import { by , browser } from 'protractor' ; import { BrowserActions , BrowserVisibility , Logger } from '@alfresco/adf-testing' ; import { Component } from '../component' ; import { CommentsTab } from './info-drawer-comments-tab' ; import { LibraryMetadata } from './info-drawer-metadata-library' ; import { ContentMetadata } from './info-drawer-metadata-content' ; import { waitForPresence } from '../../utilities/utils' ; export class InfoDrawer extends Component { commentsTab = new CommentsTab ( 'adf-info-drawer' ) ; aboutTab = new LibraryMetadata ( 'adf-info-drawer' ) ; propertiesTab = new ContentMetadata ( 'adf-info-drawer' ) ; header = this . byCss ( '.adf-info-drawer-layout-header' ) ; headerTitle = this . byCss ( '.adf-info-drawer-layout-header-title' ) ; tabLabel = this . byCss ( '.mat-tab-label-content' ) ; tabLabelsList = this . allByCss ( '.mat-tab-label-content' ) ; tabActiveLabel = this . byCss ( '.mat-tab-label-active' ) ; tabActiveContent = this . byCss ( '.mat-tab-body-active .mat-tab-body-content adf-dynamic-tab' ) ; nextButton = this . byCss ( '.mat-tab-header-pagination-after .mat-tab-header-pagination-chevron' ) ; previousButton = this . byCss ( '.mat-tab-header-pagination-before .mat-tab-header-pagination-chevron' ) ; constructor ( ancestor ? ) { super ( 'adf-info-drawer' , ancestor ) ; } async waitForInfoDrawerToOpen ( ) { await waitForPresence ( this . header ) ; } async isOpen ( ) { return browser . isElementPresent ( this . header ) ; } async isEmpty ( ) { return ! ( await browser . isElementPresent ( by . css ( '.adf-info-drawer-tabs' ) ) ) ; } getTabByTitle ( title ) { return this . byCssText ( '.mat-tab-label-content' , title ) ; } async getTabsCount ( ) { return this . allByCss ( '.mat-tab-label-content' ) . count ( ) ; } async isTabPresent ( title ) { return this . getTabByTitle ( title ) . isPresent ( ) ; } async isTabDisplayed ( title ) { if ( await browser . isElementPresent ( this . getTabByTitle ( title ) ) ) { return this . getTabByTitle ( title ) . isDisplayed ( ) ; } return false ; } async getTabTitle ( index ) { const attributeValue = await browser . executeScript ( `return arguments[0].innerText` , this . tabLabelsList . get ( index - 1 ) ) ; return attributeValue || '' ; } async getActiveTabTitle ( ) { return this . tabActiveLabel . getText ( ) ; } async clickTab ( title ) { await BrowserActions . click ( this . getTabByTitle ( title ) ) ; } async getComponentIdOfTab ( ) { return this . tabActiveContent . getAttribute ( 'data-automation-id' ) ; } async getHeaderTitle ( ) { return this . headerTitle . getText ( ) ; } async isAboutTabDisplayed ( ) { return this . isTabDisplayed ( 'About' ) ; } async isPropertiesTabDisplayed ( ) { return this . isTabDisplayed ( 'Properties' ) ; } async isPropertiesTabActive ( ) { return ( await this . getActiveTabTitle ( ) ) === 'PROPERTIES' ; } async isCommentsTabDisplayed ( ) { return this . isTabDisplayed ( 'Comments' ) ; } async clickCommentsTab ( ) { try { await BrowserActions . click ( this . getTabByTitle ( 'Comments' ) ) ; await this . commentsTab . waitForCommentsContainer ( ) ; await Promise . all ( [ BrowserVisibility . waitUntilElementIsVisible ( this . commentsTab . component ) , BrowserVisibility . waitUntilElementIsNotVisible ( this . propertiesTab . component ) ] ) ; } catch ( error ) { Logger . error ( '--- info-drawer clickCommentsTab catch error: ' , error ) ; } } }