import { by , browser } from 'protractor' ; import { Component } from '../component' ; import { isPresentAndDisplayed } from '../../utilities/utils' ; import { BrowserActions , BrowserVisibility } from '@alfresco/adf-testing' ; export type SortByType = 'Relevance' | 'Title' | 'Filename' | 'Modified date' | 'Modifier' | 'Created date' | 'Size' | 'Type' ; export type SortOrderType = 'ASC' | 'DESC' | '' ; export class SearchSortingPicker extends Component { actionMenu = browser . element ( by . css ( 'aca-search-action-menu > button' ) ) ; sortOrderButton = browser . element ( by . css ( '#aca-button-sorting-menu' ) ) ; sortByDropdownExpanded = browser . element . all ( by . css ( '.mat-menu-panel' ) ) . get ( 1 ) ; sortByList = this . sortByDropdownExpanded . all ( by . css ( 'button' ) ) ; constructor ( ancestor ? ) { super ( 'aca-button-action-menu' , ancestor ) ; } async waitForSortByDropdownToExpand ( ) { await BrowserVisibility . waitUntilElementIsVisible ( this . sortByDropdownExpanded , BrowserVisibility . DEFAULT_TIMEOUT , 'Timeout waiting for sortBy dropdown to expand' ) ; } async isSortOrderButtonDisplayed ( ) { return isPresentAndDisplayed ( this . actionMenu ) ; } async isSortByOptionDisplayed ( ) { return isPresentAndDisplayed ( this . sortOrderButton ) ; } async isSortByDropdownExpanded ( ) { return isPresentAndDisplayed ( this . sortByDropdownExpanded ) ; } async clickSortByDropdown ( ) { await BrowserActions . click ( this . actionMenu ) ; await BrowserActions . click ( this . sortOrderButton ) ; await this . waitForSortByDropdownToExpand ( ) ; } async getSortByOptionsList ( ) { return this . sortByList . map ( async ( option ) => { return option . getText ( ) ; } ) ; } async sortBy ( option , direction ) { if ( ! ( await this . isSortByDropdownExpanded ( ) ) ) { await this . clickSortByDropdown ( ) ; } const elem = browser . element ( by . cssContainingText ( '.mat-menu-item' , option ) ) ; const optionId = await elem . getAttribute ( 'id' ) ; await BrowserActions . click ( elem ) ; const directionSortElement = browser . element ( by . id ( `${ optionId }-${ direction . toLocaleLowerCase ( ) }` ) ) ; await BrowserActions . click ( directionSortElement ) ; } }