[ACS-6081] Reduce references to internal Angular material CSS classes (#3534)

* [ACS-6081] Reduce references to internal Angular material CSS classes

* [ACS-6081] rollback default scrollable value [ci:force]

* [ACS-6081] linting

* [ACS-6081] fix e2es

* [ACS-6081] cr fix

* [ACS-6081] remove adf-cli logger from e2es
This commit is contained in:
Mykyta Maliarchuk
2023-11-24 14:59:57 +01:00
committed by GitHub
parent 7468111d19
commit 7c95b53c8b
82 changed files with 390 additions and 471 deletions
+1 -1
View File
@@ -1,2 +1,2 @@
<h1 class="sr-only" title="{{pageHeading | async | translate}}">{{ pageHeading | async | translate }}</h1> <h1 class="aca-sr-only" title="{{pageHeading | async | translate}}">{{ pageHeading | async | translate }}</h1>
<router-outlet></router-outlet> <router-outlet></router-outlet>
+1 -1
View File
@@ -2,7 +2,7 @@ app-root {
display: flex; display: flex;
flex: 1; flex: 1;
.sr-only { .aca-sr-only {
position: absolute; position: absolute;
width: 1px; width: 1px;
height: 1px; height: 1px;
@@ -33,7 +33,6 @@ import {
errorStrings, errorStrings,
test test
} from '@alfresco/playwright-shared'; } from '@alfresco/playwright-shared';
import { logger } from '@alfresco/adf-cli/scripts/logger';
test.describe('Create folders', () => { test.describe('Create folders', () => {
const apiClientFactory = new ApiClientFactory(); const apiClientFactory = new ApiClientFactory();
@@ -56,7 +55,7 @@ test.describe('Create folders', () => {
nodesApi = await NodesApi.initialize(username, username); nodesApi = await NodesApi.initialize(username, username);
await nodesApi.createFolder(commonFolderName); await nodesApi.createFolder(commonFolderName);
} catch (error) { } catch (error) {
logger.error(`beforeAll failed : ${error}`); console.error(`beforeAll failed : ${error}`);
} }
}); });
@@ -77,7 +76,7 @@ test.describe('Create folders', () => {
await personalFiles.navigate(); await personalFiles.navigate();
await personalFiles.selectCreateFolder(); await personalFiles.selectCreateFolder();
} catch (error) { } catch (error) {
logger.error(`beforeEach failed : ${error}`); console.error(`beforeEach failed : ${error}`);
} }
}); });
@@ -85,7 +84,7 @@ test.describe('Create folders', () => {
try { try {
await nodesApi.deleteCurrentUserNodes(); await nodesApi.deleteCurrentUserNodes();
} catch (error) { } catch (error) {
logger.error(`afterAll failed : ${error}`); console.error(`afterAll failed : ${error}`);
} }
}); });
@@ -35,7 +35,6 @@ import {
Breadcrumb, Breadcrumb,
TrashcanApi TrashcanApi
} from '@alfresco/playwright-shared'; } from '@alfresco/playwright-shared';
import { logger } from '@alfresco/adf-cli/scripts/logger';
test.describe('Create Libraries ', () => { test.describe('Create Libraries ', () => {
const apiClientFactory = new ApiClientFactory(); const apiClientFactory = new ApiClientFactory();
@@ -70,7 +69,7 @@ test.describe('Create Libraries ', () => {
await sitesApi.createSite(commonTrashLibraryName); await sitesApi.createSite(commonTrashLibraryName);
await sitesApi.deleteSites([commonTrashLibraryName], false); await sitesApi.deleteSites([commonTrashLibraryName], false);
} catch (error) { } catch (error) {
logger.error(`beforeAll failed : ${error}`); console.error(`beforeAll failed : ${error}`);
} }
}); });
@@ -91,7 +90,7 @@ test.describe('Create Libraries ', () => {
await myLibrariesPage.navigate(); await myLibrariesPage.navigate();
await myLibrariesPage.selectCreateLibrary(); await myLibrariesPage.selectCreateLibrary();
} catch (error) { } catch (error) {
logger.error(`beforeEach failed : ${error}`); console.error(`beforeEach failed : ${error}`);
} }
}); });
@@ -101,7 +100,7 @@ test.describe('Create Libraries ', () => {
const trashcanApi = await TrashcanApi.initialize(username, username); const trashcanApi = await TrashcanApi.initialize(username, username);
await trashcanApi.emptyTrashcan(); await trashcanApi.emptyTrashcan();
} catch (error) { } catch (error) {
logger.error(`afterAll failed : ${error}`); console.error(`afterAll failed : ${error}`);
} }
}); });
@@ -6,7 +6,7 @@
<h1>{{ 'APP.BROWSE.ABOUT.TITLE' | translate }}</h1> <h1>{{ 'APP.BROWSE.ABOUT.TITLE' | translate }}</h1>
</div> </div>
<div class="aca-page-layout-content scrollable"> <div class="aca-page-layout-content aca-scrollable">
<adf-about> <adf-about>
<adf-about-panel *ngIf="dev" [label]="'ABOUT.SERVER_SETTINGS.TITLE' | translate"> <adf-about-panel *ngIf="dev" [label]="'ABOUT.SERVER_SETTINGS.TITLE' | translate">
<ng-template> <ng-template>
@@ -10,7 +10,7 @@
</div> </div>
<div class="aca-page-layout-content"> <div class="aca-page-layout-content">
<div class="main-content"> <div class="aca-main-content">
<ng-container *ngIf="((ruleSetsLoading$ | async) && (inheritedRuleSets$ | async).length === 0) || (actionsLoading$ | async); else onLoaded"> <ng-container *ngIf="((ruleSetsLoading$ | async) && (inheritedRuleSets$ | async).length === 0) || (actionsLoading$ | async); else onLoaded">
<mat-progress-bar color="primary" mode="indeterminate"></mat-progress-bar> <mat-progress-bar color="primary" mode="indeterminate"></mat-progress-bar>
@@ -27,6 +27,7 @@
<mat-slide-toggle <mat-slide-toggle
data-automation-id="manage-rules-inheritance-toggle-button" data-automation-id="manage-rules-inheritance-toggle-button"
class="aca-manage-rules__actions-bar__toggle"
[checked]="isInheritanceEnabled" [checked]="isInheritanceEnabled"
(change)="onInheritanceToggleChange($event)" (change)="onInheritanceToggleChange($event)"
[disabled]="isInheritanceToggleDisabled" [disabled]="isInheritanceToggleDisabled"
@@ -34,7 +35,7 @@
{{ 'ACA_FOLDER_RULES.MANAGE_RULES.TOOLBAR.ACTIONS.INHERIT_RULES' | translate }} {{ 'ACA_FOLDER_RULES.MANAGE_RULES.TOOLBAR.ACTIONS.INHERIT_RULES' | translate }}
</mat-slide-toggle> </mat-slide-toggle>
<mat-divider vertical class="vertical-divider"></mat-divider> <mat-divider vertical class="aca-manage-rules__actions-bar__vertical-divider"></mat-divider>
<div class="aca-manage-rules__actions-bar__buttons"> <div class="aca-manage-rules__actions-bar__buttons">
<button <button
@@ -19,12 +19,12 @@
gap: 12px; gap: 12px;
} }
.mat-slide-toggle-label { &__toggle {
font-weight: 600; font-weight: 600;
font-size: 14px; font-size: 14px;
} }
.vertical-divider { &__vertical-divider {
height: 50%; height: 50%;
margin: 0 12px; margin: 0 12px;
} }
@@ -4,8 +4,9 @@
flex-direction: row; flex-direction: row;
gap: 20px; gap: 20px;
adf-card-view .adf-property-list .adf-property adf-card-view-item-dispatcher adf-card-view-textitem .mat-form-field .mat-form-field-infix { adf-card-view .adf-property-list .adf-property adf-card-view-item-dispatcher adf-card-view-textitem {
width: 280px; display: inline-block;
width: 300px;
} }
} }
@@ -2,11 +2,11 @@
display: block; display: block;
border-radius: 8px; border-radius: 8px;
&.childCompositeCondition { &.aca-childCompositeCondition {
padding: 8px 16px; padding: 8px 16px;
background-color: hsl(0deg, 0%, 100%); background-color: hsl(0deg, 0%, 100%);
&.secondaryBackground { &.aca-secondaryBackground {
background-color: hsl(0deg, 0%, 95%); background-color: hsl(0deg, 0%, 95%);
} }
} }
@@ -62,10 +62,10 @@ import { RuleSimpleConditionUiComponent } from './rule-simple-condition.ui-compo
] ]
}) })
export class RuleCompositeConditionUiComponent implements ControlValueAccessor, OnDestroy, OnChanges { export class RuleCompositeConditionUiComponent implements ControlValueAccessor, OnDestroy, OnChanges {
@HostBinding('class.secondaryBackground') @HostBinding('class.aca-secondaryBackground')
@Input() @Input()
secondaryBackground = false; secondaryBackground = false;
@HostBinding('class.childCompositeCondition') @HostBinding('class.aca-childCompositeCondition')
@Input() @Input()
childCondition = false; childCondition = false;
@@ -11,7 +11,7 @@
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<mat-form-field class="aca-rule-simple-condition__form__comparator-input" [class]="{ hidden: isComparatorHidden }" data-automation-id="comparator-form-field"> <mat-form-field class="aca-rule-simple-condition__form__comparator-input" [class]="{ 'aca-hidden': isComparatorHidden }" data-automation-id="comparator-form-field">
<mat-select formControlName="comparator" data-automation-id="comparator-select"> <mat-select formControlName="comparator" data-automation-id="comparator-select">
<mat-option <mat-option
*ngFor="let comparator of selectedFieldComparators" *ngFor="let comparator of selectedFieldComparators"
@@ -10,7 +10,7 @@
} }
&__comparator-input { &__comparator-input {
&.hidden { &.aca-hidden {
display: none; display: none;
} }
} }
@@ -1,16 +1,14 @@
.aca-edit-rule-dialog-container { .aca-edit-rule-dialog-container {
--edit-rule-dialog-padding: 8px 20px; --edit-rule-dialog-padding: 8px 20px;
.mat-dialog-container {
padding: 0;
}
} }
.aca-edit-rule-dialog { .aca-edit-rule-dialog {
margin: -24px;
&__header { &__header {
display: flex; display: flex;
align-items: center; align-items: center;
margin: 0; margin: -43px -24px 0;
padding: var(--edit-rule-dialog-padding); padding: var(--edit-rule-dialog-padding);
box-sizing: border-box; box-sizing: border-box;
border-bottom: 1px solid var(--theme-border-color); border-bottom: 1px solid var(--theme-border-color);
@@ -29,7 +27,7 @@
} }
&__content { &__content {
margin: 0; margin: 0 -24px;
padding: 0; padding: 0;
&__spinner { &__spinner {
@@ -41,7 +39,7 @@
} }
&__footer { &__footer {
margin: 0; margin: 0 -24px -43px;
padding: var(--edit-rule-dialog-padding); padding: var(--edit-rule-dialog-padding);
box-sizing: border-box; box-sizing: border-box;
border-top: 1px solid var(--theme-border-color); border-top: 1px solid var(--theme-border-color);
@@ -3,6 +3,7 @@
<mat-checkbox <mat-checkbox
formControlName="isAsynchronous" formControlName="isAsynchronous"
(change)="toggleErrorScriptDropdown($event)" (change)="toggleErrorScriptDropdown($event)"
class="aca-rule-options__checkbox"
data-automation-id="rule-option-checkbox-asynchronous"> data-automation-id="rule-option-checkbox-asynchronous">
{{ 'ACA_FOLDER_RULES.RULE_DETAILS.OPTIONS.IS_ASYNCHRONOUS' | translate }} {{ 'ACA_FOLDER_RULES.RULE_DETAILS.OPTIONS.IS_ASYNCHRONOUS' | translate }}
</mat-checkbox> </mat-checkbox>
@@ -10,7 +11,7 @@
<mat-form-field <mat-form-field
data-automation-id="rule-option-form-field-errorScript" data-automation-id="rule-option-form-field-errorScript"
floatLabel="always" floatLabel="always"
[ngClass]="{ 'hide-error-script-dropdown': hideErrorScriptDropdown }"> [ngClass]="{ 'aca-hide-error-script-dropdown': hideErrorScriptDropdown }">
<mat-select <mat-select
formControlName="errorScript" formControlName="errorScript"
@@ -31,6 +32,7 @@
<div class="aca-rule-options__option" *ngIf="!readOnly || isInheritableChecked"> <div class="aca-rule-options__option" *ngIf="!readOnly || isInheritableChecked">
<mat-checkbox <mat-checkbox
formControlName="isInheritable" formControlName="isInheritable"
class="aca-rule-options__checkbox"
data-automation-id="rule-option-checkbox-inheritable"> data-automation-id="rule-option-checkbox-inheritable">
{{ 'ACA_FOLDER_RULES.RULE_DETAILS.OPTIONS.IS_INHERITABLE' | translate }} {{ 'ACA_FOLDER_RULES.RULE_DETAILS.OPTIONS.IS_INHERITABLE' | translate }}
</mat-checkbox> </mat-checkbox>
@@ -39,6 +41,7 @@
<div class="aca-rule-options__option" *ngIf="!readOnly"> <div class="aca-rule-options__option" *ngIf="!readOnly">
<mat-checkbox <mat-checkbox
formControlName="isDisabled" formControlName="isDisabled"
class="aca-rule-options__checkbox"
data-automation-id="rule-option-checkbox-disabled"> data-automation-id="rule-option-checkbox-disabled">
{{ 'ACA_FOLDER_RULES.RULE_DETAILS.OPTIONS.DISABLE_RULE' | translate }} {{ 'ACA_FOLDER_RULES.RULE_DETAILS.OPTIONS.DISABLE_RULE' | translate }}
</mat-checkbox> </mat-checkbox>
@@ -8,11 +8,11 @@
flex-direction: column; flex-direction: column;
} }
&.read-only .mat-checkbox-inner-container { &.aca-read-only &__checkbox label > span:first-child {
display: none; display: none;
} }
.hide-error-script-dropdown { .aca-hide-error-script-dropdown {
visibility: hidden; visibility: hidden;
} }
} }
@@ -45,11 +45,11 @@ describe('RuleOptionsUiComponent', () => {
const testErrorScriptFormFieldVisibility = (isVisible: boolean) => { const testErrorScriptFormFieldVisibility = (isVisible: boolean) => {
if (isVisible) { if (isVisible) {
expect((getByDataAutomationId('rule-option-form-field-errorScript').nativeElement as HTMLElement).classList).not.toContain( expect((getByDataAutomationId('rule-option-form-field-errorScript').nativeElement as HTMLElement).classList).not.toContain(
'hide-error-script-dropdown' 'aca-hide-error-script-dropdown'
); );
} else { } else {
expect((getByDataAutomationId('rule-option-form-field-errorScript').nativeElement as HTMLElement).classList).toContain( expect((getByDataAutomationId('rule-option-form-field-errorScript').nativeElement as HTMLElement).classList).toContain(
'hide-error-script-dropdown' 'aca-hide-error-script-dropdown'
); );
} }
}; };
@@ -74,7 +74,7 @@ export class RuleOptionsUiComponent implements ControlValueAccessor, OnChanges,
@Input() @Input()
errorScriptConstraint: ActionParameterConstraint; errorScriptConstraint: ActionParameterConstraint;
@HostBinding('class.read-only') @HostBinding('class.aca-read-only')
readOnly = false; readOnly = false;
onChange: (options: RuleOptions) => void = () => undefined; onChange: (options: RuleOptions) => void = () => undefined;
@@ -1,10 +1,10 @@
<form class="aca-rule-details__form" [ngClass]="{ 'read-only': readOnly }" [formGroup]="form"> <form class="aca-rule-details__form" [ngClass]="{ 'aca-read-only': readOnly }" [formGroup]="form">
<ng-container *ngIf="!preview"> <ng-container *ngIf="!preview">
<div class="aca-rule-details__form__row aca-rule-details__form__name"> <div class="aca-rule-details__form__row aca-rule-details__form__name">
<label for="rule-details-name-input">{{ 'ACA_FOLDER_RULES.RULE_DETAILS.LABEL.NAME' | translate }}</label> <label for="rule-details-name-input">{{ 'ACA_FOLDER_RULES.RULE_DETAILS.LABEL.NAME' | translate }}</label>
<div> <div>
<mat-form-field floatLabel='never'> <mat-form-field floatLabel='never' class="aca-rule-details__form__row__field">
<input <input
id="rule-details-name-input" id="rule-details-name-input"
matInput type="text" formControlName="name" data-automation-id="rule-details-name-input" matInput type="text" formControlName="name" data-automation-id="rule-details-name-input"
@@ -17,8 +17,9 @@
<div class="aca-rule-details__form__row aca-rule-details__form__description"> <div class="aca-rule-details__form__row aca-rule-details__form__description">
<label for="rule-details-description-textarea">{{ 'ACA_FOLDER_RULES.RULE_DETAILS.LABEL.DESCRIPTION' | translate }}</label> <label for="rule-details-description-textarea">{{ 'ACA_FOLDER_RULES.RULE_DETAILS.LABEL.DESCRIPTION' | translate }}</label>
<div> <div>
<mat-form-field floatLabel='never'> <mat-form-field floatLabel='never' class="aca-rule-details__form__row__field">
<textarea <textarea
class="aca-rule-details__form__row__field__textarea"
id="rule-details-description-textarea" id="rule-details-description-textarea"
matInput formControlName="description" data-automation-id="rule-details-description-textarea" matInput formControlName="description" data-automation-id="rule-details-description-textarea"
[placeholder]="descriptionPlaceHolder | translate"> [placeholder]="descriptionPlaceHolder | translate">
@@ -29,20 +30,20 @@
</ng-container> </ng-container>
<div class="aca-rule-details__form__row aca-rule-details__form__triggers"> <div class="aca-rule-details__form__row aca-rule-details__form__triggers">
<div class="label">{{ 'ACA_FOLDER_RULES.RULE_DETAILS.LABEL.WHEN' | translate }}</div> <div class="aca-label">{{ 'ACA_FOLDER_RULES.RULE_DETAILS.LABEL.WHEN' | translate }}</div>
<div> <div>
<aca-rule-triggers formControlName="triggers" data-automation-id="rule-details-triggers-component"></aca-rule-triggers> <aca-rule-triggers formControlName="triggers" data-automation-id="rule-details-triggers-component"></aca-rule-triggers>
<mat-error class="rule-details-error" *ngIf="triggers.hasError('required')">{{ 'ACA_FOLDER_RULES.RULE_DETAILS.ERROR.INSUFFICIENT_TRIGGERS_SELECTED' | translate }}</mat-error> <mat-error class="aca-rule-details-error" *ngIf="triggers.hasError('required')">{{ 'ACA_FOLDER_RULES.RULE_DETAILS.ERROR.INSUFFICIENT_TRIGGERS_SELECTED' | translate }}</mat-error>
</div> </div>
</div> </div>
<div class="aca-rule-details__form__conditions"> <div class="aca-rule-details__form__conditions">
<aca-rule-composite-condition formControlName="conditions"></aca-rule-composite-condition> <aca-rule-composite-condition formControlName="conditions"></aca-rule-composite-condition>
<mat-error class="rule-details-error" *ngIf="conditions.hasError('ruleCompositeConditionInvalid')">{{ 'ACA_FOLDER_RULES.RULE_DETAILS.ERROR.RULE_COMPOSITE_CONDITION_INVALID' | translate }}</mat-error> <mat-error class="aca-rule-details-error" *ngIf="conditions.hasError('ruleCompositeConditionInvalid')">{{ 'ACA_FOLDER_RULES.RULE_DETAILS.ERROR.RULE_COMPOSITE_CONDITION_INVALID' | translate }}</mat-error>
</div> </div>
<div class="aca-rule-details__form__row aca-rule-details__form__actions"> <div class="aca-rule-details__form__row aca-rule-details__form__actions">
<div class="label">{{ 'ACA_FOLDER_RULES.RULE_DETAILS.LABEL.PERFORM_ACTIONS' | translate }}</div> <div class="aca-label">{{ 'ACA_FOLDER_RULES.RULE_DETAILS.LABEL.PERFORM_ACTIONS' | translate }}</div>
<aca-rule-action-list <aca-rule-action-list
formControlName="actions" formControlName="actions"
[actionDefinitions]="actionDefinitions" [actionDefinitions]="actionDefinitions"
@@ -53,7 +54,7 @@
</div> </div>
<div class="aca-rule-details__form__row" *ngIf="showOptionsSection"> <div class="aca-rule-details__form__row" *ngIf="showOptionsSection">
<div class="label">{{ 'ACA_FOLDER_RULES.RULE_DETAILS.LABEL.OPTIONS' | translate }}</div> <div class="aca-label">{{ 'ACA_FOLDER_RULES.RULE_DETAILS.LABEL.OPTIONS' | translate }}</div>
<aca-rule-options <aca-rule-options
formControlName="options" formControlName="options"
data-automation-id="rule-details-options-component" data-automation-id="rule-details-options-component"
@@ -25,7 +25,7 @@
gap: 8px; gap: 8px;
& > label, & > label,
& > .label { & > .aca-label {
font-weight: bold; font-weight: bold;
width: 20%; width: 20%;
min-width: 100px; min-width: 100px;
@@ -35,15 +35,16 @@
& > div { & > div {
flex-grow: 1; flex-grow: 1;
}
mat-form-field { &__field {
width: 100%; width: 100%;
max-width: 400px; max-width: 400px;
font-size: inherit; margin-top: -11px;
font-size: inherit;
.mat-form-field-infix { &__textarea {
border: none; min-height: 4em;
}
} }
} }
} }
@@ -55,17 +56,13 @@
&__conditions { &__conditions {
width: 100%; width: 100%;
& > .rule-details-error { & > .aca-rule-details-error {
margin-left: 16px; margin-left: 16px;
color: inherit; color: inherit;
} }
} }
textarea { .aca-rule-details-error {
min-height: 4em;
}
.rule-details-error {
font-size: 75%; font-size: 75%;
height: 1em; height: 1em;
} }
@@ -76,7 +73,7 @@
} }
} }
&.read-only, &.aca-read-only,
.mat-form-field-disabled { .mat-form-field-disabled {
.mat-form-field-underline, .mat-form-field-underline,
.mat-select-arrow-wrapper { .mat-select-arrow-wrapper {
@@ -15,7 +15,7 @@
<div <div
*ngIf="item.type === 'load-more-rules'; else loadMoreRuleSets" *ngIf="item.type === 'load-more-rules'; else loadMoreRuleSets"
tabindex="0" tabindex="0"
class="aca-rule-list-grouping__non-rule-item load-more" class="aca-rule-list-grouping__non-rule-item aca-load-more"
matRipple matRippleColor="hsla(0,0%,0%,0.05)" matRipple matRippleColor="hsla(0,0%,0%,0.05)"
(click)="onClickLoadMoreRules(item.ruleSet)" (click)="onClickLoadMoreRules(item.ruleSet)"
(keyup.enter)="onClickLoadMoreRules(item.ruleSet)"> (keyup.enter)="onClickLoadMoreRules(item.ruleSet)">
@@ -27,7 +27,7 @@
<div <div
*ngIf="item.type === 'load-more-rule-sets'; else loadingRules" *ngIf="item.type === 'load-more-rule-sets'; else loadingRules"
tabindex="0" tabindex="0"
class="aca-rule-list-grouping__non-rule-item load-more" class="aca-rule-list-grouping__non-rule-item aca-load-more"
matRipple matRippleColor="hsla(0,0%,0%,0.05)" matRipple matRippleColor="hsla(0,0%,0%,0.05)"
(click)="onClickLoadMoreRuleSets()" (click)="onClickLoadMoreRuleSets()"
(keyup.enter)="onClickLoadMoreRuleSets()"> (keyup.enter)="onClickLoadMoreRuleSets()">
@@ -40,7 +40,7 @@
tabindex="0" tabindex="0"
class="aca-rule-list-grouping__non-rule-item" class="aca-rule-list-grouping__non-rule-item"
matRipple matRippleColor="hsla(0,0%,0%,0.05)"> matRipple matRippleColor="hsla(0,0%,0%,0.05)">
<mat-spinner mode="indeterminate" [diameter]="16"></mat-spinner> <mat-spinner mode="indeterminate" [diameter]="16" class="aca-spinner"></mat-spinner>
{{ 'ACA_FOLDER_RULES.RULE_LIST.LOADING_RULES' | translate }} {{ 'ACA_FOLDER_RULES.RULE_LIST.LOADING_RULES' | translate }}
</div> </div>
</ng-template> </ng-template>
@@ -12,7 +12,7 @@
text-align: center; text-align: center;
padding: 0.5em 0; padding: 0.5em 0;
&.load-more { &.aca-load-more {
cursor: pointer; cursor: pointer;
} }
@@ -20,7 +20,7 @@
border-bottom: 1px solid var(--theme-border-color); border-bottom: 1px solid var(--theme-border-color);
} }
.mat-spinner { .aca-spinner {
margin-right: 0.5em; margin-right: 0.5em;
} }
} }
@@ -34,7 +34,7 @@
text-overflow: ellipsis; text-overflow: ellipsis;
} }
&.selected { &.aca-selected {
background: var(--theme-selected-button-bg-color); background: var(--adf-theme-background-selected-button-color);
} }
} }
@@ -40,7 +40,7 @@ export class RuleListItemUiComponent {
@Input() @Input()
rule: Rule; rule: Rule;
@Input() @Input()
@HostBinding('class.selected') @HostBinding('class.aca-selected')
isSelected: boolean; isSelected: boolean;
@Input() @Input()
showEnabledToggle = false; showEnabledToggle = false;
@@ -2,7 +2,7 @@
*ngIf="inheritedRuleSetGroupingItems.length > 0" *ngIf="inheritedRuleSetGroupingItems.length > 0"
class="aca-rule-list__item" class="aca-rule-list__item"
data-automation-id="rule-list-item" data-automation-id="rule-list-item"
[ngClass]="{ expanded: inheritedRuleSetsExpanded }"> [ngClass]="{ 'aca-expanded': inheritedRuleSetsExpanded }">
<div <div
tabindex="0" tabindex="0"
@@ -13,7 +13,7 @@
<span class="aca-rule-list__item__header__title"> <span class="aca-rule-list__item__header__title">
{{ 'ACA_FOLDER_RULES.RULE_LIST.INHERITED_RULES' | translate }} {{ 'ACA_FOLDER_RULES.RULE_LIST.INHERITED_RULES' | translate }}
<mat-icon [matTooltip]="'ACA_FOLDER_RULES.RULE_LIST.INHERITED_RULES_WILL_BE_RUN_FIRST' | translate"> <mat-icon class="aca-rule-list__item__header__title__mat-icon" [matTooltip]="'ACA_FOLDER_RULES.RULE_LIST.INHERITED_RULES_WILL_BE_RUN_FIRST' | translate">
info info
</mat-icon> </mat-icon>
</span> </span>
@@ -38,7 +38,7 @@
*ngIf="mainRuleSetGroupingItems.length > 0 || isMainRuleSetLinked" *ngIf="mainRuleSetGroupingItems.length > 0 || isMainRuleSetLinked"
class="aca-rule-list__item" class="aca-rule-list__item"
data-automation-id="rule-list-item" data-automation-id="rule-list-item"
[ngClass]="{ expanded: mainRuleSetExpanded }"> [ngClass]="{ 'aca-expanded': mainRuleSetExpanded }">
<div <div
tabindex="0" tabindex="0"
@@ -35,13 +35,13 @@
justify-content: flex-start; justify-content: flex-start;
flex: 1; flex: 1;
.mat-icon { &__mat-icon {
transform: scale(0.8); transform: scale(0.8);
} }
} }
} }
&.expanded { &.aca-expanded {
.aca-rule-list__item__header { .aca-rule-list__item__header {
border-bottom: 1px solid var(--theme-border-color); border-bottom: 1px solid var(--theme-border-color);
} }
@@ -3,7 +3,7 @@
{{ 'ACA_FOLDER_RULES.LINK_RULES_DIALOG.TITLE' | translate }} {{ 'ACA_FOLDER_RULES.LINK_RULES_DIALOG.TITLE' | translate }}
</div> </div>
<button mat-icon-button mat-dialog-close class="aca-rule-set-picker__header__close" tabindex="-1"> <button mat-icon-button mat-dialog-close class="aca-rule-set-picker__header__close" tabindex="-1">
<mat-icon>close</mat-icon> <mat-icon class="aca-rule-set-picker__header__close__icon">close</mat-icon>
</button> </button>
</div> </div>
@@ -17,7 +17,7 @@
(siteChange)="setFolderLoading(true)"> (siteChange)="setFolderLoading(true)">
</adf-content-node-selector-panel> </adf-content-node-selector-panel>
<div class="aca-rule-set-picker__content__rule-list" [ngClass]="{ justify: rulesLoading$ | async }"> <div class="aca-rule-set-picker__content__rule-list" [ngClass]="{ 'aca-justify': rulesLoading$ | async }">
<ng-container *ngIf="rulesLoading$ | async; else rulesLoaded"> <ng-container *ngIf="rulesLoading$ | async; else rulesLoaded">
<mat-progress-spinner color="primary" mode="indeterminate"></mat-progress-spinner> <mat-progress-spinner color="primary" mode="indeterminate"></mat-progress-spinner>
</ng-container> </ng-container>
@@ -1,7 +1,7 @@
.aca-rule-set-picker-container { .aca-rule-set-picker-container {
--rule-set-picker-padding: 8px 20px; --rule-set-picker-padding: 8px 20px;
.mat-dialog-container { & > * {
padding: 0; padding: 0;
} }
} }
@@ -22,7 +22,7 @@
} }
&__close { &__close {
& mat-icon { &__icon {
font-size: 18px; font-size: 18px;
} }
} }
@@ -50,7 +50,7 @@
overflow-y: auto; overflow-y: auto;
overflow-x: hidden; overflow-x: hidden;
&.justify { &.aca-justify {
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} }
@@ -1,7 +1,7 @@
<ng-container *ngIf="nodeId"> <ng-container *ngIf="nodeId">
<adf-alfresco-viewer <adf-alfresco-viewer
[ngClass]="{ [ngClass]="{
'right_side--hide': !showRightSide 'aca-right_side--hide': !showRightSide
}" }"
[nodeId]="nodeId" [nodeId]="nodeId"
[allowNavigate]="navigateMultiple" [allowNavigate]="navigateMultiple"
@@ -18,10 +18,10 @@
} }
// todo: remove this when viewer supports extensions // todo: remove this when viewer supports extensions
.adf-viewer-toolbar .mat-toolbar > button:last-child { .adf-viewer-toolbar > * > button:last-child {
display: none; display: none;
} }
.adf-alfresco-viewer.right_side--hide .adf-viewer__sidebar__right { .adf-alfresco-viewer.aca-right_side--hide .adf-viewer__sidebar__right {
width: 0; width: 0;
} }
@@ -5,12 +5,12 @@
</div> </div>
<div class="aca-page-layout-content"> <div class="aca-page-layout-content">
<div class="acs-details-container"> <div class="aca-details-container">
<div class="acs-details-title"> <div class="aca-details-title">
<div class="acs-details-breadcrumb" role="heading" aria-level="2" *ngIf="node"> <div class="aca-details-breadcrumb" role="heading" aria-level="2" *ngIf="node">
<span class="acs-details-breadcrumb-library"> {{ node.name }} </span> <span class="aca-details-breadcrumb-library"> {{ node.name }} </span>
- -
<span class="acs-details-breadcrumb-item">{{ 'APP.INFO_DRAWER.TITLE' | translate }}</span> <span class="aca-details-breadcrumb-item">{{ 'APP.INFO_DRAWER.TITLE' | translate }}</span>
</div> </div>
<button <button
class="aca-close-details-button" class="aca-close-details-button"
@@ -18,7 +18,7 @@ app-details-manager {
} }
} }
.acs-details-container { .aca-details-container {
background-color: var(--theme-card-background-color); background-color: var(--theme-card-background-color);
width: 100%; width: 100%;
} }
@@ -31,27 +31,27 @@ app-details-manager {
height: 100%; height: 100%;
} }
.mat-tab-labels { mat-tab-header {
text-transform: uppercase; text-transform: uppercase;
} }
} }
.acs-details-title { .aca-details-title {
width: 100%; width: 100%;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
} }
.acs-details-breadcrumb { .aca-details-breadcrumb {
font-size: 18px; font-size: 18px;
margin-left: 20px; margin-left: 20px;
.acs-details-breadcrumb-library { &-library {
font-weight: 900; font-weight: 900;
} }
.acs-details-breadcrumb-item { &-item {
font-weight: 100; font-weight: 100;
} }
} }
@@ -17,14 +17,14 @@
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
aca-locked-by { .aca-locked-by {
display: flex; display: flex;
align-items: center; align-items: center;
color: rgba(0, 0, 0, 0.54); color: rgba(0, 0, 0, 0.54);
max-width: 100%; max-width: 100%;
padding: 0 10px; padding-right: 10px;
.locked_by--name { &--name {
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
} }
@@ -5,7 +5,7 @@
</div> </div>
<div class="aca-page-layout-content"> <div class="aca-page-layout-content">
<div class="main-content"> <div class="aca-main-content">
<adf-document-list <adf-document-list
#documentList #documentList
acaDocumentList acaDocumentList
@@ -5,7 +5,7 @@
</div> </div>
<div class="aca-page-layout-content"> <div class="aca-page-layout-content">
<div class="main-content"> <div class="aca-main-content">
<adf-document-list <adf-document-list
#documentList #documentList
acaDocumentList acaDocumentList
@@ -9,7 +9,7 @@
</div> </div>
<div class="aca-page-layout-content"> <div class="aca-page-layout-content">
<div class="main-content" *ngIf="!(showLoader$ | async)"> <div class="aca-main-content" *ngIf="!(showLoader$ | async)">
<adf-upload-drag-area [rootFolderId]="node?.id" [disabled]="!canUpload" (updateFileVersion)="onUploadNewVersion($event)"> <adf-upload-drag-area [rootFolderId]="node?.id" [disabled]="!canUpload" (updateFileVersion)="onUploadNewVersion($event)">
<adf-document-list <adf-document-list
#documentList #documentList
@@ -1,7 +1,7 @@
<mat-card *ngIf="node"> <mat-card *ngIf="node">
<mat-card-content> <mat-card-content>
<form [formGroup]="form" autocomplete="off"> <form [formGroup]="form" autocomplete="off">
<mat-form-field floatLabel="auto" data-automation-id="library-name-properties-wrapper"> <mat-form-field floatLabel="auto" data-automation-id="library-name-properties-wrapper" class="app-library-metadata-form-field">
<input <input
matInput matInput
[cdkTrapFocusAutoCapture]="form.enabled" [cdkTrapFocusAutoCapture]="form.enabled"
@@ -17,11 +17,11 @@
</mat-error> </mat-error>
</mat-form-field> </mat-form-field>
<mat-form-field floatLabel="auto" data-automation-id="library-id-properties-wrapper"> <mat-form-field floatLabel="auto" data-automation-id="library-id-properties-wrapper" class="app-library-metadata-form-field">
<input matInput placeholder="{{ 'LIBRARY.DIALOG.FORM.SITE_ID' | translate }}" formControlName="id" /> <input matInput placeholder="{{ 'LIBRARY.DIALOG.FORM.SITE_ID' | translate }}" formControlName="id" />
</mat-form-field> </mat-form-field>
<mat-form-field floatLabel="auto" data-automation-id="library-visibility-properties-wrapper"> <mat-form-field floatLabel="auto" data-automation-id="library-visibility-properties-wrapper" class="app-library-metadata-form-field">
<mat-select placeholder="{{ 'LIBRARY.DIALOG.FORM.VISIBILITY' | translate }}" formControlName="visibility"> <mat-select placeholder="{{ 'LIBRARY.DIALOG.FORM.VISIBILITY' | translate }}" formControlName="visibility">
<mat-option [value]="type.value" *ngFor="let type of libraryType"> <mat-option [value]="type.value" *ngFor="let type of libraryType">
{{ type.label | translate }} {{ type.label | translate }}
@@ -29,7 +29,7 @@
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<mat-form-field floatLabel="auto" data-automation-id="library-description-properties-wrapper"> <mat-form-field floatLabel="auto" data-automation-id="library-description-properties-wrapper" class="app-library-metadata-form-field">
<textarea <textarea
matInput matInput
placeholder="{{ 'LIBRARY.DIALOG.FORM.DESCRIPTION' | translate }}" placeholder="{{ 'LIBRARY.DIALOG.FORM.DESCRIPTION' | translate }}"
@@ -1,24 +1,5 @@
app-library-metadata-form { app-library-metadata-form {
.mat-form-field { .app-library-metadata-form-field {
width: 100%; width: 100%;
} }
.mat-form-field-infix {
position: relative;
width: 180px;
.mat-form-field-label-wrapper {
position: absolute;
width: 100%;
pointer-events: none;
.mat-form-field-label {
position: absolute;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
transform-origin: 0 0;
}
}
}
} }
@@ -5,7 +5,7 @@
</div> </div>
<div class="aca-page-layout-content"> <div class="aca-page-layout-content">
<div class="main-content"> <div class="aca-main-content">
<adf-document-list <adf-document-list
#documentList #documentList
acaDocumentList acaDocumentList
@@ -5,7 +5,7 @@
</div> </div>
<div class="aca-page-layout-content"> <div class="aca-page-layout-content">
<div class="main-content"> <div class="aca-main-content">
<adf-document-list <adf-document-list
#documentList #documentList
acaDocumentList acaDocumentList
@@ -6,7 +6,7 @@
(click)="searchSubmit(searchTerm)" (click)="searchSubmit(searchTerm)"
[title]="'SEARCH.BUTTON.TOOLTIP' | translate" [title]="'SEARCH.BUTTON.TOOLTIP' | translate"
> >
<mat-icon [attr.aria-label]="'SEARCH.BUTTON.ARIA-LABEL' | translate">search</mat-icon> <mat-icon class="app-search-button-icon" [attr.aria-label]="'SEARCH.BUTTON.ARIA-LABEL' | translate">search</mat-icon>
</button> </button>
<mat-form-field class="app-input-form-field" [floatLabel]="'never'"> <mat-form-field class="app-input-form-field" [floatLabel]="'never'">
<input <input
@@ -18,6 +18,7 @@
[(ngModel)]="searchTerm" [(ngModel)]="searchTerm"
(ngModelChange)="inputChange($event)" (ngModelChange)="inputChange($event)"
(keyup.enter)="searchSubmit($event)" (keyup.enter)="searchSubmit($event)"
class="app-input-form-field-input"
[placeholder]="'SEARCH.INPUT.PLACEHOLDER' | translate" [placeholder]="'SEARCH.INPUT.PLACEHOLDER' | translate"
autocomplete="off" autocomplete="off"
/> />
@@ -5,7 +5,7 @@ $top-margin: 12px;
margin: 14px 1px; margin: 14px 1px;
float: left; float: left;
.mat-icon { mat-icon {
font-size: 24px; font-size: 24px;
cursor: pointer; cursor: pointer;
} }
@@ -24,10 +24,6 @@ $top-margin: 12px;
box-sizing: border-box; box-sizing: border-box;
margin-bottom: 12px; margin-bottom: 12px;
.mat-form-field {
font-size: 16px;
}
.mat-form-field-underline { .mat-form-field-underline {
display: none; display: none;
} }
@@ -37,7 +33,7 @@ $top-margin: 12px;
} }
// fixes pointer event on FF // fixes pointer event on FF
&.searchMenuTrigger .mat-form-field-label-wrapper { &.app-search-menu-trigger .mat-form-field-label-wrapper {
pointer-events: auto; pointer-events: auto;
} }
@@ -45,16 +41,16 @@ $top-margin: 12px;
letter-spacing: -0.7px; letter-spacing: -0.7px;
width: calc(100% - 56px); width: calc(100% - 56px);
.mat-input-element { &-input {
letter-spacing: -0.7px; letter-spacing: -0.7px;
} }
} }
.app-search-button.mat-icon-button { .app-search-button {
top: -2px; top: -2px;
left: -8px; left: -8px;
.mat-icon { &-icon {
font-size: 24px; font-size: 24px;
padding-right: 0; padding-right: 0;
} }
@@ -1,4 +1,4 @@
<div class="app-search-container searchMenuTrigger" <div class="app-search-container app-search-menu-trigger"
[matMenuTriggerFor]="searchOptionsMenu" [matMenuTriggerFor]="searchOptionsMenu"
(menuOpened)="onMenuOpened()" (menuOpened)="onMenuOpened()"
(menuClosed)="syncInputValues()" (menuClosed)="syncInputValues()"
@@ -11,6 +11,7 @@
<input <input
matInput matInput
[attr.aria-label]="'SEARCH.INPUT.ARIA-LABEL' | translate" [attr.aria-label]="'SEARCH.INPUT.ARIA-LABEL' | translate"
class="app-input-form-field-input"
[type]="'text'" [type]="'text'"
[disabled]="true" [disabled]="true"
[value]="searchedWord" [value]="searchedWord"
@@ -21,8 +22,8 @@
<mat-icon>arrow_drop_down</mat-icon> <mat-icon>arrow_drop_down</mat-icon>
</div> </div>
<button mat-icon-button matSuffix class="app-suffix-search-icon-wrapper app-close-icon" (click)="exitSearch()"> <button mat-icon-button matSuffix class="app-suffix-search-icon-wrapper app-close-button" (click)="exitSearch()">
<mat-icon>close</mat-icon> <mat-icon class="app-close-icon">close</mat-icon>
</button> </button>
</mat-form-field> </mat-form-field>
</div> </div>
@@ -39,8 +40,9 @@
</app-search-input-control> </app-search-input-control>
<mat-hint *ngIf="hasLibrariesConstraint" class="app-search-hint">{{ 'SEARCH.INPUT.HINT' | translate }}</mat-hint> <mat-hint *ngIf="hasLibrariesConstraint" class="app-search-hint">{{ 'SEARCH.INPUT.HINT' | translate }}</mat-hint>
<div id="search-options"> <div id="search-options" class="app-search-options">
<mat-checkbox <mat-checkbox
class="app-search-options-checkbox"
*ngFor="let option of searchOptions" *ngFor="let option of searchOptions"
id="{{ option.id }}" id="{{ option.id }}"
[(ngModel)]="option.value" [(ngModel)]="option.value"
@@ -10,10 +10,6 @@ $top-margin: 12px;
max-width: $search-width; max-width: $search-width;
height: $search-height + $top-margin; height: $search-height + $top-margin;
&.mat-menu-trigger {
margin: 0;
}
.app-search-button { .app-search-button {
width: 32px; width: 32px;
height: 32px; height: 32px;
@@ -23,18 +19,16 @@ $top-margin: 12px;
} }
.app-input-form-field { .app-input-form-field {
.app-close-icon { .app-suffix-search-icon-wrapper.app-close-button {
height: 6px; height: 6px;
&.app-suffix-search-icon-wrapper { .app-close-icon {
.mat-icon { font-size: 18px;
font-size: 18px; line-height: 28px;
line-height: 28px;
}
} }
} }
.mat-input-element { &-input {
caret-color: var(--theme-text-color); caret-color: var(--theme-text-color);
&:disabled { &:disabled {
@@ -43,30 +37,19 @@ $top-margin: 12px;
} }
} }
.mat-focused label.mat-form-field-label { &:focus-within {
display: none; label {
display: none;
}
} }
} }
.app-search-options-menu { .app-search-options-menu {
&.mat-menu-panel { background-color: var(--theme-dialog-background-color);
background-color: var(--theme-dialog-background-color); width: $search-width;
width: $search-width; max-width: unset;
max-width: unset; border-radius: $search-border-radius;
border-radius: $search-border-radius; margin-top: 3px;
margin-top: $top-margin;
}
.mat-menu-content:not(:empty) {
padding-top: 0;
padding-bottom: 0;
}
}
mat-checkbox {
.mat-checkbox-frame {
border-color: var(--theme-text-color);
}
} }
.aca-search-input { .aca-search-input {
@@ -77,20 +60,25 @@ mat-checkbox {
height: $search-height; height: $search-height;
margin-bottom: 0; margin-bottom: 0;
padding-bottom: 26px; padding-bottom: 26px;
.app-search-container {
margin: 0;
}
} }
.app-search-control { .app-search-control {
margin-top: -$top-margin; margin-top: -$top-margin;
} }
#search-options { .app-search-options {
color: var(--theme-text-color); color: var(--theme-text-color);
border-top: 1px solid var(--theme-divider-color); border-top: 1px solid var(--theme-divider-color);
padding: 20px 0; padding: 20px 0;
font-size: 16px; font-size: 16px;
letter-spacing: -0.7px; letter-spacing: -0.7px;
margin-bottom: -8px;
mat-checkbox { &-checkbox {
padding: 3px 24px 3px 19px; padding: 3px 24px 3px 19px;
.mat-checkbox-inner-container { .mat-checkbox-inner-container {
@@ -105,7 +93,7 @@ mat-checkbox {
} }
} }
.mat-checkbox-layout { .app-search-options-checkbox label {
max-width: 155px; max-width: 155px;
} }
} }
@@ -128,9 +116,7 @@ mat-checkbox {
} }
.app-search-options-menu { .app-search-options-menu {
&.mat-menu-panel { width: $search-width-small;
width: $search-width-small;
}
} }
#search-options { #search-options {
@@ -144,7 +130,7 @@ mat-checkbox {
} }
} }
.mat-checkbox-layout { label {
max-width: 105px; max-width: 105px;
} }
} }
@@ -162,13 +148,10 @@ mat-checkbox {
} }
.app-search-options-menu { .app-search-options-menu {
&.mat-menu-panel { width: $search-width-xsmall;
width: $search-width-xsmall;
margin-top: 9px;
}
} }
#search-options .mat-checkbox-layout { #search-options label {
max-width: 180px; max-width: 180px;
} }
} }
@@ -6,12 +6,12 @@
</div> </div>
<div class="aca-page-layout-content"> <div class="aca-page-layout-content">
<div class="main-content"> <div class="aca-main-content">
<div class="adf-search-results"> <div class="adf-search-results">
<div class="adf-search-results__content"> <div class="adf-search-results__content">
<mat-progress-bar *ngIf="isLoading" color="primary" mode="indeterminate"></mat-progress-bar> <mat-progress-bar *ngIf="isLoading" color="primary" mode="indeterminate"></mat-progress-bar>
<div class="adf-search-results__content-header content" *ngIf="data?.list.entries.length"> <div class="adf-search-results__content-header aca-content" *ngIf="data?.list.entries.length">
<div class="content__side--left"> <div class="aca-content__side--left">
<div class="adf-search-results--info-text" *ngIf="totalResults !== 1"> <div class="adf-search-results--info-text" *ngIf="totalResults !== 1">
{{ 'APP.BROWSE.SEARCH_LIBRARIES.FOUND_RESULTS' | translate: { number: totalResults } }} {{ 'APP.BROWSE.SEARCH_LIBRARIES.FOUND_RESULTS' | translate: { number: totalResults } }}
</div> </div>
@@ -28,11 +28,7 @@ aca-search-results {
color: rgba(0, 0, 0, 0.54); color: rgba(0, 0, 0, 0.54);
} }
.text--bold { .aca-content {
font-weight: 600;
}
.content {
@include flex-row; @include flex-row;
flex: unset; flex: unset;
@@ -1,12 +1,12 @@
<div class="search-file-name"> <div class="search-file-name">
<span tabindex="0" role="link" *ngIf="isFile" (click)="showPreview($event)" (keyup.enter)="showPreview($event)" class="link"> <span tabindex="0" role="link" *ngIf="isFile" (click)="showPreview($event)" (keyup.enter)="showPreview($event)" class="aca-link">
{{ name$ | async }} {{ name$ | async }}
</span> </span>
<span tabindex="0" role="link" *ngIf="!isFile" (click)="navigate($event)" (keyup.enter)="navigate($event)" class="bold link"> <span tabindex="0" role="link" *ngIf="!isFile" (click)="navigate($event)" (keyup.enter)="navigate($event)" class="bold aca-link">
{{ name$ | async }} {{ name$ | async }}
</span> </span>
<span>{{ title$ | async }}</span> <span>{{ title$ | async }}</span>
</div> </div>
<div class="result-location"> <div class="aca-result-location">
<aca-location-link [context]="context" [showLocation]="true"></aca-location-link> <aca-location-link [context]="context" [showLocation]="true"></aca-location-link>
</div> </div>
@@ -1,10 +1,10 @@
.aca-search-results-row { .aca-search-results-row {
.result-location { .aca-result-location {
height: 15px; height: 15px;
padding-top: 3px; padding-top: 3px;
} }
.link { .aca-link {
text-decoration: none; text-decoration: none;
color: var(--theme-text-bold-color); color: var(--theme-text-bold-color);
} }
@@ -14,13 +14,13 @@
color: var(--theme-foreground-text-color); color: var(--theme-foreground-text-color);
} }
.link:hover, .aca-link:hover,
.aca-location-link .adf-datatable-cell-value:hover { .aca-location-link .adf-datatable-cell-value:hover {
color: var(--theme-primary-color); color: var(--theme-primary-color);
text-decoration: underline; text-decoration: underline;
} }
.adf-is-selected .link:not(:hover), .adf-is-selected .aca-link:not(:hover),
.adf-is-selected .adf-datatable-cell-value:not(:hover) { .adf-is-selected .adf-datatable-cell-value:not(:hover) {
color: var(--theme-primary-color); color: var(--theme-primary-color);
} }
@@ -6,7 +6,7 @@
</div> </div>
<div class="aca-page-layout-content"> <div class="aca-page-layout-content">
<div class="main-content"> <div class="aca-main-content">
<div class="adf-search-results"> <div class="adf-search-results">
<div class="adf-search-results__content"> <div class="adf-search-results__content">
<mat-progress-bar *ngIf="isLoading" color="primary" mode="indeterminate" aria-live="polite"> </mat-progress-bar> <mat-progress-bar *ngIf="isLoading" color="primary" mode="indeterminate" aria-live="polite"> </mat-progress-bar>
@@ -30,16 +30,9 @@ aca-search-results {
border-top: 1px solid var(--theme-border-color); border-top: 1px solid var(--theme-border-color);
border-bottom: 1px solid var(--theme-border-color); border-bottom: 1px solid var(--theme-border-color);
.adf-search-filter-chip, .aca-content__advanced-filters {
.adf-search-filter-chip-tabbed { .adf-search-filter-chip,
&[disabled] { .adf-search-filter-chip-tabbed {
&.mat-chip {
background-color: var(--theme-disabled-chip-background-color);
color: var(--theme-search-chip-icon-color);
}
}
&.mat-chip {
background-color: var(--theme-dropdown-color); background-color: var(--theme-dropdown-color);
color: var(--theme-selected-text-color); color: var(--theme-selected-text-color);
@@ -48,6 +41,11 @@ aca-search-results {
background-color: var(--theme-grey-background-hover); background-color: var(--theme-grey-background-hover);
} }
&[disabled] {
background-color: var(--theme-disabled-chip-background-color);
color: var(--theme-search-chip-icon-color);
}
mat-icon { mat-icon {
color: var(--theme-search-chip-icon-color); color: var(--theme-search-chip-icon-color);
} }
@@ -5,7 +5,7 @@
</div> </div>
<div class="aca-page-layout-content"> <div class="aca-page-layout-content">
<div class="main-content"> <div class="aca-main-content">
<adf-document-list <adf-document-list
#documentList #documentList
acaDocumentList acaDocumentList
@@ -1,14 +1,14 @@
<ng-container *ngIf="!item.children"> <ng-container *ngIf="!item.children">
<div class="item"> <div class="aca-expansion-panel-item">
<button <button
acaActiveLink="action-button--active" acaActiveLink="aca-action-button--active"
[action]="item" [action]="item"
[attr.aria-label]="item.title | translate" [attr.aria-label]="item.title | translate"
[id]="item.id" [id]="item.id"
[attr.data-automation-id]="item.id" [attr.data-automation-id]="item.id"
[attr.title]="item.description | translate" [attr.title]="item.description | translate"
mat-button mat-button
class="action-button full-width" class="aca-action-button aca-full-width"
> >
<adf-icon *ngIf="item.icon" [value]="item.icon"></adf-icon> <adf-icon *ngIf="item.icon" [value]="item.icon"></adf-icon>
<span class="action-button__label">{{ item.title | translate }}</span> <span class="action-button__label">{{ item.title | translate }}</span>
@@ -18,41 +18,43 @@
<ng-container *ngIf="item.children && item.children.length"> <ng-container *ngIf="item.children && item.children.length">
<mat-expansion-panel <mat-expansion-panel
class="aca-expansion-panel"
[expanded]="true" [expanded]="true"
[acaExpansionPanel]="item" [acaExpansionPanel]="item"
[@.disabled]="true" [@.disabled]="true"
> >
<mat-expansion-panel-header expandedHeight="32px" collapsedHeight="32px" role="group"> <mat-expansion-panel-header expandedHeight="32px" collapsedHeight="32px" role="group" class="aca-expansion-panel-header">
<mat-panel-title> <mat-panel-title class="aca-expansion-panel-header-title">
<div class="item"> <div class="aca-expansion-panel-item">
<span <span
[attr.aria-label]="item.title | translate" [attr.aria-label]="item.title | translate"
[id]="item.id" [id]="item.id"
[attr.title]="item.description | translate" [attr.title]="item.description | translate"
[attr.data-automation-id]="item.id" [attr.data-automation-id]="item.id"
class="action-button full-width" class="aca-action-button aca-full-width"
> >
<adf-icon *ngIf="item.icon" [value]="item.icon"></adf-icon> <adf-icon *ngIf="item.icon" [value]="item.icon"></adf-icon>
<span class="action-button__label">{{ item.title | translate }}</span> <span class="aca-action-button__label">{{ item.title | translate }}</span>
</span> </span>
</div> </div>
</mat-panel-title> </mat-panel-title>
</mat-expansion-panel-header> </mat-expansion-panel-header>
<div class="aca-expansion-panel-body">
<div *ngFor="let child of item.children; trackBy: trackById" class="item"> <div *ngFor="let child of item.children; trackBy: trackById" class="aca-expansion-panel-item">
<button <button
acaActiveLink="action-button--active" acaActiveLink="aca-action-button--active"
[action]="child" [action]="child"
[attr.aria-label]="child.title | translate" [attr.aria-label]="child.title | translate"
[id]="child.id" [id]="child.id"
[attr.data-automation-id]="child.id" [attr.data-automation-id]="child.id"
[attr.title]="child.description | translate" [attr.title]="child.description | translate"
mat-button mat-button
class="action-button full-width" class="aca-action-button aca-full-width"
> >
<adf-icon *ngIf="child.icon" [value]="child.icon"></adf-icon> <adf-icon *ngIf="child.icon" [value]="child.icon"></adf-icon>
<span class="action-button__label">{{ child.title | translate }}</span> <span class="aca-action-button__label">{{ child.title | translate }}</span>
</button> </button>
</div>
</div> </div>
</mat-expansion-panel> </mat-expansion-panel>
</ng-container> </ng-container>
@@ -1,6 +1,6 @@
<div class="sidenav-header"> <div class="aca-sidenav-header">
<div class="sidenav-header-title"> <div class="aca-sidenav-header-title">
<div class="sidenav-header-title-logo" <div class="aca-sidenav-header-title-logo"
tabindex=0 tabindex=0
(click)="toggleNavBar.emit()" (click)="toggleNavBar.emit()"
(keypress)="toggleNavBar.emit()"> (keypress)="toggleNavBar.emit()">
@@ -10,7 +10,7 @@
alt="{{ 'CORE.HEADER.LOGO_ARIA' | translate }}" /> alt="{{ 'CORE.HEADER.LOGO_ARIA' | translate }}" />
</div> </div>
<div class="sidenav-header-title-text" [routerLink]="landingPage"> <div class="aca-sidenav-header-title-text" [routerLink]="landingPage">
{{ appName$ | async | translate }} {{ appName$ | async | translate }}
</div> </div>
@@ -1,8 +1,8 @@
<div class="sidenav"> <div class="aca-sidenav">
<app-sidenav-header (toggleNavBar)="toggleClick()"></app-sidenav-header> <app-sidenav-header (toggleNavBar)="toggleClick()"></app-sidenav-header>
<div class="section-sub-actions"> <div class="aca-sidenav__section">
<div *ngFor="let group of groups; trackBy: trackByGroupId" class="section"> <div *ngFor="let group of groups; trackBy: trackByGroupId" class="aca-sidenav__section__actions">
<mat-list-item *ngFor="let item of group.items; trackBy: trackByLinkId"> <mat-list-item *ngFor="let item of group.items; trackBy: trackByLinkId">
<ng-container *ngIf="!item.component"> <ng-container *ngIf="!item.component">
<app-expand-menu [item]="item"></app-expand-menu> <app-expand-menu [item]="item"></app-expand-menu>
@@ -1,4 +1,4 @@
.sidenav { .aca-sidenav {
display: flex; display: flex;
flex: 1; flex: 1;
flex-direction: column; flex-direction: column;
@@ -38,14 +38,10 @@
} }
} }
.section:last-child { &__section {
border-bottom: 0;
}
.section-sub-actions {
overflow-y: auto; overflow-y: auto;
.mat-expansion-panel { .aca-expansion-panel {
width: 100%; width: 100%;
background-color: unset; background-color: unset;
box-shadow: none; box-shadow: none;
@@ -56,80 +52,69 @@
display: flex; display: flex;
align-items: center; align-items: center;
border: none; border: none;
}
&-header-title { span::after {
display: flex; transform: rotate(226deg);
flex-direction: row;
.mat-button {
line-height: 32px;
align-items: center;
border: none;
} }
.action-button__label { &-title {
font-size: var(--theme-caption-font-size); display: flex;
} flex-direction: row;
}
&-body { .aca-action-button__label {
padding: 0 0 16px; font-size: var(--theme-caption-font-size);
font-size: var(--theme-body-1-font-size);
.mat-button {
line-height: 32px;
align-items: center;
.mat-button-wrapper {
display: flex;
} }
} }
} }
.mat-expansion-indicator { .aca-expansion-panel-header:hover {
background: var(--adf-theme-background-hover-color);
}
&-item {
flex-direction: row;
display: flex; display: flex;
align-content: center; align-items: center;
text-decoration: none;
width: 100%;
user-select: none;
&:hover .aca-action-button__label {
color: var(--theme-selected-text-color);
}
} }
.mat-expansion-indicator::after { &-body {
transform: rotate(226deg); margin: 0 -24px 16px;
font-size: var(--theme-body-1-font-size);
button {
line-height: 32px;
align-items: center;
}
} }
} }
.mat-expansion-panel-header:hover { .aca-action-button {
background: var(--adf-theme-background-hover-color);
}
.item {
flex-direction: row;
display: flex;
align-items: center;
text-decoration: none;
width: 100%;
user-select: none;
&:hover .action-button__label {
color: var(--theme-selected-text-color);
}
}
.action-button {
color: var(--theme-action-button-text-color); color: var(--theme-action-button-text-color);
height: 32px; height: 32px;
padding: 0 24px; padding: 0 24px;
border-radius: 0; border-radius: 0;
line-height: 32px; line-height: 32px;
&--active {
color: var(--theme-selected-text-color);
background: var(--theme-selected-background-color);
}
} }
.full-width { .aca-full-width {
display: flex; display: flex;
width: 100%; width: 100%;
} }
.action-button--active { &__actions:last-child {
color: var(--theme-selected-text-color); border-bottom: 0;
background: var(--theme-selected-background-color);
} }
} }
} }
@@ -5,7 +5,7 @@
</div> </div>
<div class="aca-page-layout-content"> <div class="aca-page-layout-content">
<div class="main-content"> <div class="aca-main-content">
<adf-document-list <adf-document-list
#documentList #documentList
acaDocumentList acaDocumentList
@@ -1,5 +1,5 @@
<h2 mat-dialog-title [innerHTML]="title"></h2> <h2 mat-dialog-title [innerHTML]="title" class="app-create-from-template-title"></h2>
<div mat-dialog-content> <div mat-dialog-content class="app-create-from-template-content">
<form [formGroup]="form" novalidate> <form [formGroup]="form" novalidate>
<mat-form-field class="app-create-from-template-field"> <mat-form-field class="app-create-from-template-field">
<input <input
@@ -41,12 +41,12 @@
</mat-form-field> </mat-form-field>
</form> </form>
</div> </div>
<div mat-dialog-actions> <div mat-dialog-actions class="app-create-from-template-footer">
<button mat-button mat-dialog-close data-automation-id="create-from-template-dialog-cancel-button"> <button mat-button mat-dialog-close data-automation-id="create-from-template-dialog-cancel-button">
{{ 'NODE_FROM_TEMPLATE.CANCEL' | translate }} {{ 'NODE_FROM_TEMPLATE.CANCEL' | translate }}
</button> </button>
<button <button
class="create" class="app-create-from-template-footer-create-button"
[disabled]="form.invalid" [disabled]="form.invalid"
mat-button mat-button
(click)="onSubmit()" (click)="onSubmit()"
@@ -4,54 +4,56 @@ app-create-from-template-dialog {
margin-left: -24px; margin-left: -24px;
margin-right: -24px; margin-right: -24px;
.mat-dialog-title { .app-create-from-template {
margin-left: 24px; &-title {
margin-right: 24px; margin-left: 24px;
font-size: 20px; margin-right: 24px;
font-style: normal; font-size: 20px;
font-stretch: normal; font-style: normal;
line-height: 1.6; font-stretch: normal;
letter-spacing: -0.5px; line-height: 1.6;
color: var(--theme-text-bold-color); letter-spacing: -0.5px;
white-space: nowrap; color: var(--theme-text-bold-color);
overflow: hidden; white-space: nowrap;
text-overflow: ellipsis; overflow: hidden;
text-overflow: ellipsis;
.bold { .bold {
font-weight: 600; font-weight: 600;
} }
}
.app-create-from-template-field {
width: 100%;
&:not(:last-of-type) {
margin-bottom: 20px;
}
}
.mat-dialog-content {
margin: 0 2px;
overflow: hidden;
}
.mat-dialog-actions {
padding: 8px 22px;
display: flex;
justify-content: flex-end;
color: var(--theme-secondary-text-color);
button {
text-transform: uppercase;
font-weight: normal;
} }
.create[disabled] { &-field {
opacity: 0.6; width: 100%;
&:not(:last-of-type) {
margin-bottom: 20px;
}
} }
.create:enabled { &-content {
color: var(--theme-accent-color); margin: 0 2px;
overflow: hidden;
}
&-footer {
padding: 8px 22px;
display: flex;
justify-content: flex-end;
color: var(--theme-secondary-text-color);
button {
text-transform: uppercase;
font-weight: normal;
}
&-create-button[disabled] {
opacity: 0.6;
}
&-create-button:enabled {
color: var(--theme-accent-color);
}
} }
} }
} }
@@ -19,7 +19,7 @@ body {
} }
} }
[dir='rtl'] .mat-icon { [dir='rtl'] mat-icon {
transform: scale(-1, 1); transform: scale(-1, 1);
} }
@@ -26,7 +26,7 @@
.adf-pagination__actualinfo-block { .adf-pagination__actualinfo-block {
padding-right: 12px; padding-right: 12px;
.mat-menu-trigger { button {
display: none; display: none;
} }
} }
+1 -6
View File
@@ -4,7 +4,7 @@
@import 'variables/variables'; @import 'variables/variables';
@include custom-theme($custom-theme); @include custom-theme($custom-theme);
.mat-toolbar { mat-toolbar {
color: var(--theme-text-color, rgba(0, 0, 0, 0.54)); color: var(--theme-text-color, rgba(0, 0, 0, 0.54));
} }
@@ -48,11 +48,6 @@ mat-toolbar.mat-toolbar.mat-toolbar-single-row {
} }
} }
.mat-chip.mat-standard-chip {
background-color: #efefef;
color: var(--theme-contrast-gray);
}
.adf-property-field { .adf-property-field {
.adf-textitem-edit-icon.mat-icon { .adf-textitem-edit-icon.mat-icon {
color: var(--theme-contrast-gray); color: var(--theme-contrast-gray);
@@ -1,7 +1,7 @@
<ng-container *ngIf="nodeId"> <ng-container *ngIf="nodeId">
<adf-alfresco-viewer <adf-alfresco-viewer
[ngClass]="{ [ngClass]="{
'right_side--hide': !showRightSide 'aca-right_side--hide': !showRightSide
}" }"
[maxRetries]="'viewer.maxRetries' | adfAppConfig" [maxRetries]="'viewer.maxRetries' | adfAppConfig"
[nodeId]="nodeId" [nodeId]="nodeId"
@@ -17,11 +17,11 @@
} }
// todo: remove this when viewer supports extensions // todo: remove this when viewer supports extensions
.adf-viewer-toolbar .mat-toolbar > button:last-child { .adf-viewer-toolbar > * > button:last-child {
display: none; display: none;
} }
.adf-alfresco-viewer.right_side--hide .adf-viewer__sidebar__right { .adf-alfresco-viewer.aca-right_side--hide .adf-viewer__sidebar__right {
width: 0; width: 0;
} }
} }
@@ -41,7 +41,6 @@ import {
TrashcanApi, TrashcanApi,
PersonEntry PersonEntry
} from '@alfresco/js-api'; } from '@alfresco/js-api';
import { logger } from '@alfresco/adf-cli/scripts/logger';
import { ActionTypes, Rule } from './rules-api'; import { ActionTypes, Rule } from './rules-api';
import { users } from '../base-config'; import { users } from '../base-config';
import { Person, PersonModel } from './people-api-models'; import { Person, PersonModel } from './people-api-models';
@@ -145,7 +144,7 @@ export class ApiClientFactory {
try { try {
e = await this.alfrescoApi.login(user, userPassword); e = await this.alfrescoApi.login(user, userPassword);
} catch (error) { } catch (error) {
logger.error(`[API Client Factory] Log in user ${user} failed ${e}`); console.error(`[API Client Factory] Log in user ${user} failed ${e}`);
throw error; throw error;
} }
} }
@@ -155,7 +154,7 @@ export class ApiClientFactory {
try { try {
e = await this.alfrescoApi.login(user.username, user.password); e = await this.alfrescoApi.login(user.username, user.password);
} catch (error) { } catch (error) {
logger.error(`[API Client Factory] Log in user ${user.username} failed ${e}`); console.error(`[API Client Factory] Log in user ${user.username} failed ${e}`);
throw error; throw error;
} }
} }
@@ -167,7 +166,7 @@ export class ApiClientFactory {
try { try {
return peopleApi.createPerson(person); return peopleApi.createPerson(person);
} catch (error) { } catch (error) {
logger.error('[API Client Factory] createUser failed : ', error); console.error('[API Client Factory] createUser failed : ', error);
return null; return null;
} }
} }
@@ -178,7 +177,7 @@ export class ApiClientFactory {
try { try {
return peopleApi.updatePerson(username, { password: newPassword }); return peopleApi.updatePerson(username, { password: newPassword });
} catch (error) { } catch (error) {
logger.error('[API Client Factory] changePassword failed : ', error); console.error('[API Client Factory] changePassword failed : ', error);
return null; return null;
} }
} }
@@ -24,7 +24,6 @@
import { ApiClientFactory } from './api-client-factory'; import { ApiClientFactory } from './api-client-factory';
import { NodeChildAssociationPaging, NodeEntry, NodePaging } from '@alfresco/js-api'; import { NodeChildAssociationPaging, NodeEntry, NodePaging } from '@alfresco/js-api';
import { logger } from '@alfresco/adf-cli/scripts/logger';
import { NodeContentTree, flattenNodeContentTree } from './node-content-tree'; import { NodeContentTree, flattenNodeContentTree } from './node-content-tree';
export class NodesApi { export class NodesApi {
@@ -51,7 +50,7 @@ export class NodesApi {
try { try {
return await this.createNode('cm:folder', name, parentId, title, description, null, author, null, aspectNames); return await this.createNode('cm:folder', name, parentId, title, description, null, author, null, aspectNames);
} catch (error) { } catch (error) {
logger.error(`${this.constructor.name} ${this.createFolder.name}`, error); console.error(`${this.constructor.name} ${this.createFolder.name}`, error);
return null; return null;
} }
} }
@@ -68,7 +67,7 @@ export class NodesApi {
try { try {
return await this.createNode('cm:content', name, parentId, title, description, null, author, majorVersion, aspectNames); return await this.createNode('cm:content', name, parentId, title, description, null, author, majorVersion, aspectNames);
} catch (error) { } catch (error) {
logger.error(`${this.constructor.name} ${this.createFile.name}`, error); console.error(`${this.constructor.name} ${this.createFile.name}`, error);
return null; return null;
} }
} }
@@ -77,7 +76,7 @@ export class NodesApi {
try { try {
return await this.createContent({ files: names }, relativePath); return await this.createContent({ files: names }, relativePath);
} catch (error) { } catch (error) {
logger.error(`${this.constructor.name} ${this.createFiles.name}: ${error}`); console.error(`${this.constructor.name} ${this.createFiles.name}: ${error}`);
return null; return null;
} }
} }
@@ -116,7 +115,7 @@ export class NodesApi {
majorVersion majorVersion
}); });
} catch (error) { } catch (error) {
logger.error(`${this.constructor.name} ${this.createNode.name}`, error); console.error(`${this.constructor.name} ${this.createNode.name}`, error);
return null; return null;
} }
} }
@@ -125,7 +124,7 @@ export class NodesApi {
try { try {
return this.apiService.nodes.updateNode(nodeId, { name: newName }); return this.apiService.nodes.updateNode(nodeId, { name: newName });
} catch (error) { } catch (error) {
logger.error(`${this.constructor.name} ${this.renameNode.name}`, error); console.error(`${this.constructor.name} ${this.renameNode.name}`, error);
return null; return null;
} }
} }
@@ -141,7 +140,7 @@ export class NodesApi {
await this.apiService.nodes.deleteNode(nodeId, { permanent }); await this.apiService.nodes.deleteNode(nodeId, { permanent });
} }
} catch (error) { } catch (error) {
logger.error(`${this.constructor.name} ${this.deleteNodes.name}`, error); console.error(`${this.constructor.name} ${this.deleteNodes.name}`, error);
} }
} }
@@ -155,7 +154,7 @@ export class NodesApi {
const userNodesIds = userNodes.map((nodeChild) => nodeChild.entry.id); const userNodesIds = userNodes.map((nodeChild) => nodeChild.entry.id);
await this.deleteNodes(userNodesIds); await this.deleteNodes(userNodesIds);
} catch (error) { } catch (error) {
logger.error(`${this.constructor.name} ${this.deleteCurrentUserNodes.name}`, error); console.error(`${this.constructor.name} ${this.deleteCurrentUserNodes.name}`, error);
} }
} }
@@ -165,7 +164,7 @@ export class NodesApi {
await this.apiService.nodes.lockNode(nodeId, { type: lockType }); await this.apiService.nodes.lockNode(nodeId, { type: lockType });
} }
} catch (error) { } catch (error) {
logger.error(`${this.constructor.name} ${this.lockNodes.name}`, error); console.error(`${this.constructor.name} ${this.lockNodes.name}`, error);
} }
} }
@@ -173,7 +172,7 @@ export class NodesApi {
try { try {
return await this.apiService.nodes.createNode('-my-', flattenNodeContentTree(content, relativePath) as any); return await this.apiService.nodes.createNode('-my-', flattenNodeContentTree(content, relativePath) as any);
} catch (error) { } catch (error) {
logger.error(`${this.constructor.name} ${this.createContent.name}`, error); console.error(`${this.constructor.name} ${this.createContent.name}`, error);
return null; return null;
} }
} }
@@ -182,7 +181,7 @@ export class NodesApi {
try { try {
return await this.apiService.nodes.getNode(id); return await this.apiService.nodes.getNode(id);
} catch (error) { } catch (error) {
logger.error(`${this.constructor.name} ${this.getNodeById.name}`, error); console.error(`${this.constructor.name} ${this.getNodeById.name}`, error);
return null; return null;
} }
} }
@@ -192,7 +191,7 @@ export class NodesApi {
const children = (await this.getNodeChildren(parentId)).list.entries; const children = (await this.getNodeChildren(parentId)).list.entries;
return children.find((elem) => elem.entry.name === name).entry.id || ''; return children.find((elem) => elem.entry.name === name).entry.id || '';
} catch (error) { } catch (error) {
logger.error(`${this.constructor.name} ${this.getNodeIdFromParent.name}`, error); console.error(`${this.constructor.name} ${this.getNodeIdFromParent.name}`, error);
return ''; return '';
} }
} }
@@ -204,7 +203,7 @@ export class NodesApi {
}; };
return await this.apiService.nodes.listNodeChildren(nodeId, opts); return await this.apiService.nodes.listNodeChildren(nodeId, opts);
} catch (error) { } catch (error) {
logger.error(`${this.constructor.name} ${this.getNodeChildren.name}`, error); console.error(`${this.constructor.name} ${this.getNodeChildren.name}`, error);
return null; return null;
} }
} }
@@ -213,7 +212,7 @@ export class NodesApi {
try { try {
await this.apiService.nodes.deleteNode(id, { permanent }); await this.apiService.nodes.deleteNode(id, { permanent });
} catch (error) { } catch (error) {
logger.error(`${this.constructor.name} ${this.deleteNodeById.name}`, error); console.error(`${this.constructor.name} ${this.deleteNodeById.name}`, error);
} }
} }
@@ -225,7 +224,7 @@ export class NodesApi {
await this.deleteNodeById(nodeId); await this.deleteNodeById(nodeId);
} }
} catch (error) { } catch (error) {
logger.error('Admin Actions - cleanupNodeTemplatesItems failed : ', error); console.error('Admin Actions - cleanupNodeTemplatesItems failed : ', error);
} }
} }
@@ -237,7 +236,7 @@ export class NodesApi {
await this.deleteNodeById(nodeId); await this.deleteNodeById(nodeId);
} }
} catch (error) { } catch (error) {
logger.error('Admin Actions - cleanupSpaceTemplatesFolder failed : ', error); console.error('Admin Actions - cleanupSpaceTemplatesFolder failed : ', error);
} }
} }
@@ -245,7 +244,7 @@ export class NodesApi {
try { try {
return this.getNodeIdFromParent('Node Templates', await this.getDataDictionaryId()); return this.getNodeIdFromParent('Node Templates', await this.getDataDictionaryId());
} catch (error) { } catch (error) {
logger.error('Admin Actions - getNodeTemplatesFolderId failed : ', error); console.error('Admin Actions - getNodeTemplatesFolderId failed : ', error);
return ''; return '';
} }
} }
@@ -254,14 +253,14 @@ export class NodesApi {
try { try {
return this.getNodeIdFromParent('Space Templates', await this.getDataDictionaryId()); return this.getNodeIdFromParent('Space Templates', await this.getDataDictionaryId());
} catch (error) { } catch (error) {
logger.error('Admin Actions - getSpaceTemplatesFolderId failed : ', error); console.error('Admin Actions - getSpaceTemplatesFolderId failed : ', error);
return ''; return '';
} }
} }
private async getDataDictionaryId(): Promise<string> { private async getDataDictionaryId(): Promise<string> {
return this.getNodeIdFromParent('Data Dictionary', '-root-').catch((error) => { return this.getNodeIdFromParent('Data Dictionary', '-root-').catch((error) => {
logger.error('Admin Actions - getDataDictionaryId failed : ', error); console.error('Admin Actions - getDataDictionaryId failed : ', error);
return ''; return '';
}); });
} }
@@ -282,7 +281,7 @@ export class NodesApi {
try { try {
return await this.apiService.nodes.updateNode(nodeId, data); return await this.apiService.nodes.updateNode(nodeId, data);
} catch (error) { } catch (error) {
logger.error(`${this.constructor.name} ${this.setGranularPermission.name}`, error); console.error(`${this.constructor.name} ${this.setGranularPermission.name}`, error);
return null; return null;
} }
} }
@@ -294,7 +293,7 @@ export class NodesApi {
return this.setInheritPermissions(nodeId, false); return this.setInheritPermissions(nodeId, false);
} catch (error) { } catch (error) {
logger.error('Admin Actions - removeUserAccessOnNodeTemplate failed : ', error); console.error('Admin Actions - removeUserAccessOnNodeTemplate failed : ', error);
return null; return null;
} }
} }
@@ -306,7 +305,7 @@ export class NodesApi {
return this.setInheritPermissions(nodeId, false); return this.setInheritPermissions(nodeId, false);
} catch (error) { } catch (error) {
logger.error('Admin Actions - removeUserAccessOnSpaceTemplate failed : ', error); console.error('Admin Actions - removeUserAccessOnSpaceTemplate failed : ', error);
return null; return null;
} }
} }
@@ -321,7 +320,7 @@ export class NodesApi {
try { try {
return await this.apiService.nodes.updateNode(nodeId, data); return await this.apiService.nodes.updateNode(nodeId, data);
} catch (error) { } catch (error) {
logger.error(`${this.constructor.name} ${this.setInheritPermissions.name}`, error); console.error(`${this.constructor.name} ${this.setInheritPermissions.name}`, error);
return null; return null;
} }
} }
@@ -330,7 +329,7 @@ export class NodesApi {
try { try {
return this.apiService.nodes.updateNode(nodeId, { aspectNames }); return this.apiService.nodes.updateNode(nodeId, { aspectNames });
} catch (error) { } catch (error) {
logger.error(`${this.constructor.name} ${this.addAspects.name}`, error); console.error(`${this.constructor.name} ${this.addAspects.name}`, error);
return null; return null;
} }
} }
@@ -350,7 +349,7 @@ export class NodesApi {
await this.addAspects(originalNodeId, ['app:linked']); await this.addAspects(originalNodeId, ['app:linked']);
return link; return link;
} catch (error) { } catch (error) {
logger.error(`${this.constructor.name} ${this.createFileLink.name}`, error); console.error(`${this.constructor.name} ${this.createFileLink.name}`, error);
return null; return null;
} }
} }
@@ -373,7 +372,7 @@ export class NodesApi {
await this.addAspects(originalNodeId, ['app:linked']); await this.addAspects(originalNodeId, ['app:linked']);
return link; return link;
} catch (error) { } catch (error) {
logger.error(`${this.constructor.name} ${this.createFolderLink.name}`, error); console.error(`${this.constructor.name} ${this.createFolderLink.name}`, error);
return null; return null;
} }
} }
@@ -386,7 +385,7 @@ export class NodesApi {
return this.createFileLink(nodeId, destinationParentId); return this.createFileLink(nodeId, destinationParentId);
} catch (error) { } catch (error) {
logger.error('Admin Actions - createLinkToFileName failed : ', error); console.error('Admin Actions - createLinkToFileName failed : ', error);
return null; return null;
} }
} }
@@ -398,7 +397,7 @@ export class NodesApi {
const nodeId = await this.getNodeIdFromParent(originalFolderName, originalFolderParentId); const nodeId = await this.getNodeIdFromParent(originalFolderName, originalFolderParentId);
return this.createFolderLink(nodeId, destinationParentId); return this.createFolderLink(nodeId, destinationParentId);
} catch (error) { } catch (error) {
logger.error('Admin Actions - createLinkToFolderName failed : ', error); console.error('Admin Actions - createLinkToFolderName failed : ', error);
return null; return null;
} }
} }
@@ -22,7 +22,6 @@
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>. * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/ */
import { logger } from '@alfresco/adf-cli/scripts/logger';
import { ApiClientFactory } from './api-client-factory'; import { ApiClientFactory } from './api-client-factory';
import { SharedLinkEntry, SharedLinkPaging } from '@alfresco/js-api'; import { SharedLinkEntry, SharedLinkPaging } from '@alfresco/js-api';
import { Utils } from '../utils'; import { Utils } from '../utils';
@@ -61,7 +60,7 @@ export class SharedLinksApi {
} }
} }
} catch (error) { } catch (error) {
logger.error(`SharedLinksApi shareFilesByIds : catch : `, error); console.error(`SharedLinksApi shareFilesByIds : catch : `, error);
} }
return sharedLinks; return sharedLinks;
} }
@@ -73,7 +72,7 @@ export class SharedLinksApi {
}; };
return await this.apiService.share.listSharedLinks(opts); return await this.apiService.share.listSharedLinks(opts);
} catch (error) { } catch (error) {
logger.error(`SharedLinksApi getSharedLinks : catch : `, error); console.error(`SharedLinksApi getSharedLinks : catch : `, error);
return new SharedLinkPaging; return new SharedLinkPaging;
} }
} }
@@ -92,8 +91,8 @@ export class SharedLinksApi {
return Utils.retryCall(sharedFile); return Utils.retryCall(sharedFile);
} catch (error) { } catch (error) {
logger.error(`SharedLinksApi waitForFilesToBeShared : catch : ${error}`); console.error(`SharedLinksApi waitForFilesToBeShared : catch : ${error}`);
logger.error(`\tWait timeout reached waiting for files to be shared`); console.error(`\tWait timeout reached waiting for files to be shared`);
} }
} }
} }
@@ -24,7 +24,6 @@
import { ApiClientFactory } from './api-client-factory'; import { ApiClientFactory } from './api-client-factory';
import { Site, SiteBodyCreate, SiteEntry, SiteMemberEntry, SiteMembershipBodyCreate, SiteMembershipBodyUpdate } from '@alfresco/js-api'; import { Site, SiteBodyCreate, SiteEntry, SiteMemberEntry, SiteMembershipBodyCreate, SiteMembershipBodyUpdate } from '@alfresco/js-api';
import { logger } from '@alfresco/adf-cli/scripts/logger';
export class SitesApi { export class SitesApi {
private apiService: ApiClientFactory; private apiService: ApiClientFactory;
@@ -49,7 +48,7 @@ export class SitesApi {
try { try {
return await this.apiService.sites.createSite(site); return await this.apiService.sites.createSite(site);
} catch (error) { } catch (error) {
logger.error(`SitesApi createSite : catch : `, error); console.error(`SitesApi createSite : catch : `, error);
return null; return null;
} }
} }
@@ -58,7 +57,7 @@ export class SitesApi {
try { try {
return (await this.apiService.sites.listSiteContainers(siteId)).list.entries[0].entry.id; return (await this.apiService.sites.listSiteContainers(siteId)).list.entries[0].entry.id;
} catch (error) { } catch (error) {
logger.error(`SitesApi getDocLibId : catch : `, error); console.error(`SitesApi getDocLibId : catch : `, error);
return null; return null;
} }
} }
@@ -76,7 +75,7 @@ export class SitesApi {
} }
} }
} catch (error) { } catch (error) {
logger.error(`${this.constructor.name} ${this.deleteSites.name}`, error); console.error(`${this.constructor.name} ${this.deleteSites.name}`, error);
} }
} }
@@ -88,7 +87,7 @@ export class SitesApi {
try { try {
return await this.apiService.sites.updateSiteMembership(siteId, userId, siteRole); return await this.apiService.sites.updateSiteMembership(siteId, userId, siteRole);
} catch (error) { } catch (error) {
logger.error(`SitesApi updateSiteMember : catch : `, error); console.error(`SitesApi updateSiteMember : catch : `, error);
return new SiteMemberEntry; return new SiteMemberEntry;
} }
} }
@@ -105,7 +104,7 @@ export class SitesApi {
if (error.status === 409) { if (error.status === 409) {
return this.updateSiteMember(siteId, userId, role); return this.updateSiteMember(siteId, userId, role);
} else { } else {
logger.error(`SitesApi addSiteMember : catch : `, error); console.error(`SitesApi addSiteMember : catch : `, error);
return new SiteMemberEntry; return new SiteMemberEntry;
} }
} }
@@ -23,7 +23,6 @@
*/ */
import { ApiClientFactory } from './api-client-factory'; import { ApiClientFactory } from './api-client-factory';
import { logger } from '@alfresco/adf-cli/scripts/logger';
export class TrashcanApi { export class TrashcanApi {
private apiService = new ApiClientFactory(); private apiService = new ApiClientFactory();
@@ -51,7 +50,7 @@ export class TrashcanApi {
} }
} }
} catch (error) { } catch (error) {
logger.error('User Actions - emptyTrashcan failed : ', error); console.error('User Actions - emptyTrashcan failed : ', error);
} }
} }
@@ -37,7 +37,7 @@ export class SidenavComponent extends BaseComponent {
private recentFiles = this.getChild(`[data-automation-id='app.navbar.recentFiles']`); private recentFiles = this.getChild(`[data-automation-id='app.navbar.recentFiles']`);
private favorites = this.getChild(`[data-automation-id='app.navbar.favorites']`); private favorites = this.getChild(`[data-automation-id='app.navbar.favorites']`);
private trash = this.getChild(`[data-automation-id='app.navbar.trashcan']`); private trash = this.getChild(`[data-automation-id='app.navbar.trashcan']`);
private sidenavToggle = this.getChild(`.sidenav-header-title-logo`); private sidenavToggle = this.getChild(`.aca-sidenav-header-title-logo`);
private sidenavExpand = this.page.getByTitle('Expand navigation menu'); private sidenavExpand = this.page.getByTitle('Expand navigation menu');
public expandedSidenav = this.page.locator(`[data-automation-id='expanded']`); public expandedSidenav = this.page.locator(`[data-automation-id='expanded']`);
@@ -6,16 +6,14 @@
* agreement is prohibited. * agreement is prohibited.
*/ */
import { logger } from '@alfresco/adf-cli/scripts/logger';
export const getExcludedTestsRegExpArray = (excludedJson: any, projectName: string) => { export const getExcludedTestsRegExpArray = (excludedJson: any, projectName: string) => {
const prefix = `[ 🎭 Playwright Excludes - ${projectName} ]`; const prefix = `[ 🎭 Playwright Excludes - ${projectName} ]`;
const objectKeys = Object.keys(excludedJson); const objectKeys = Object.keys(excludedJson);
if (!objectKeys.length) { if (!objectKeys.length) {
logger.info(`${prefix} ✅ No excluded tests 🎉 `); console.info(`${prefix} ✅ No excluded tests 🎉 `);
} else { } else {
logger.warn(`${prefix} ❌ Tests excluded because of 🐛 : ${objectKeys}`); console.warn(`${prefix} ❌ Tests excluded because of 🐛 : ${objectKeys}`);
} }
return objectKeys.map((key) => new RegExp(key)); return objectKeys.map((key) => new RegExp(key));
@@ -3,14 +3,14 @@
align-items: center; align-items: center;
color: var(--theme-text-color, rgba(0, 0, 0, 0.54)); color: var(--theme-text-color, rgba(0, 0, 0, 0.54));
.locked_by--icon { &--icon {
font-size: 14px; font-size: 14px;
width: 14px; width: 14px;
height: 14px; height: 14px;
} }
.locked_by--label, &--label,
.locked_by--name { &--name {
font-size: 12px; font-size: 12px;
padding: 0 2px; padding: 0 2px;
} }
@@ -32,9 +32,9 @@ import { MatIconModule } from '@angular/material/icon';
imports: [TranslateModule, MatIconModule], imports: [TranslateModule, MatIconModule],
selector: 'aca-locked-by', selector: 'aca-locked-by',
template: ` template: `
<mat-icon class="locked_by--icon">lock</mat-icon> <mat-icon class="aca-locked-by--icon">lock</mat-icon>
<span class="locked_by--label">{{ 'APP.LOCKED_BY' | translate }}</span> <span class="aca-locked-by--label">{{ 'APP.LOCKED_BY' | translate }}</span>
<span class="locked_by--name">{{ text }}</span> <span class="aca-locked-by--name">{{ text }}</span>
`, `,
styleUrls: ['./locked-by.component.scss'], styleUrls: ['./locked-by.component.scss'],
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
@@ -1,18 +1,18 @@
<div class="alfresco-mobile-application-container"> <div class="aca-mobile-application-container">
<span>{{ 'APP.DIALOGS.MOBILE_APP.OPEN_ALFRESCO_MOBILE_APP' | translate }}</span> <span>{{ 'APP.DIALOGS.MOBILE_APP.OPEN_ALFRESCO_MOBILE_APP' | translate }}</span>
<button mat-button class="cross-button" (click)="onCloseDialog()"> <button mat-button class="aca-cross-button" (click)="onCloseDialog()">
<mat-icon class="cross-icon">close</mat-icon> <mat-icon class="aca-cross-button-icon">close</mat-icon>
</button> </button>
</div> </div>
<div class="open-in-app-container"> <div class="aca-open-in-app-container">
<button mat-button (click)="openInApp()" data-automation-id="open-in-app-button" class="open-in-app" cdkFocusInitial> <button mat-button (click)="openInApp()" data-automation-id="open-in-app-button" class="aca-open-in-app-container-button" cdkFocusInitial>
<span>{{ 'APP.DIALOGS.MOBILE_APP.MOBILE_APP_BUTTON_LABEL' | translate }}</span> <span>{{ 'APP.DIALOGS.MOBILE_APP.MOBILE_APP_BUTTON_LABEL' | translate }}</span>
</button> </button>
</div> </div>
<div class="download-app-container" *ngIf="appStoreUrl"> <div class="aca-download-app-container" *ngIf="appStoreUrl">
<button mat-button data-automation-id="download-app-button" class="download-app-button" (click)="downloadIosApp()"> <button mat-button data-automation-id="download-app-button" class="aca-download-app-container-button" (click)="downloadIosApp()">
<span>{{ 'APP.DIALOGS.MOBILE_APP.DOWNLOAD_APP_BUTTON_LABEL' | translate }}</span> <span>{{ 'APP.DIALOGS.MOBILE_APP.DOWNLOAD_APP_BUTTON_LABEL' | translate }}</span>
</button> </button>
</div> </div>
@@ -1,5 +1,5 @@
aca-open-in-app { aca-open-in-app {
.open-in-app-container { .aca-open-in-app-container {
display: flex; display: flex;
place-content: center; place-content: center;
padding: 0; padding: 0;
@@ -7,28 +7,34 @@ aca-open-in-app {
background-color: var(--theme-primary-color); background-color: var(--theme-primary-color);
color: var(--theme-about-panel-background-color); color: var(--theme-about-panel-background-color);
margin-top: 12px; margin-top: 12px;
}
.open-in-app { &-button {
overflow-x: hidden; overflow-x: hidden;
font-size: 16px; font-size: 16px;
width: 100%; width: 100%;
padding: 0; padding: 0;
height: 48px; height: 48px;
&:focus-visible { &:focus-visible {
outline: none; outline: none;
border-radius: unset; border-radius: unset;
}
} }
} }
.download-app-container { .aca-download-app-container {
display: flex; display: flex;
place-content: center; place-content: center;
margin-top: 12px; margin-top: 12px;
&-button {
background: var(--theme-dialog-background-color);
color: var(--theme-primary-color);
font-size: 14px;
}
} }
.alfresco-mobile-application-container { .aca-mobile-application-container {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
justify-content: space-between; justify-content: space-between;
@@ -37,28 +43,18 @@ aca-open-in-app {
padding: 6px 0; padding: 6px 0;
} }
.cross-button { .aca-cross-button {
padding-right: 0; padding-right: 0;
&:focus-visible { &:focus-visible {
outline: none; outline: none;
border-radius: unset; border-radius: unset;
} }
}
.cross-icon { &-icon {
font-weight: bold; font-weight: bold;
font-size: 21px; font-size: 21px;
height: 21px; height: 21px;
} }
.download-app-button {
background: var(--theme-dialog-background-color);
color: var(--theme-primary-color);
font-size: 14px;
}
.mat-dialog-container {
padding: 8px 24px 24px;
} }
} }
@@ -35,6 +35,6 @@ import { Component, ViewEncapsulation, ChangeDetectionStrategy, Input, HostBindi
}) })
export class PageLayoutContentComponent { export class PageLayoutContentComponent {
@Input() @Input()
@HostBinding('class.scrollable') @HostBinding('class.aca-scrollable')
scrollable = false; scrollable = false;
} }
@@ -24,7 +24,7 @@
} }
.aca-toolbar-action { .aca-toolbar-action {
.mat-button-base { button {
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
@@ -43,27 +43,27 @@
@include flex-row; @include flex-row;
} }
.main-content { .aca-main-content {
@include flex-column; @include flex-column;
} }
.scrollable { .aca-scrollable {
overflow: auto; overflow: auto;
.main-content { .aca-main-content {
overflow: auto; overflow: auto;
} }
} }
} }
[dir='rtl'] .aca-page-layout { [dir='rtl'] .aca-page-layout {
.main-content { .aca-main-content {
border-left: 1px solid var(--theme-border-color, rgba(0, 0, 0, 0.07)); border-left: 1px solid var(--theme-border-color, rgba(0, 0, 0, 0.07));
} }
} }
[dir='ltr'] .aca-page-layout { [dir='ltr'] .aca-page-layout {
.main-content { .aca-main-content {
border-right: 1px solid var(--theme-border-color, rgba(0, 0, 0, 0.07)); border-right: 1px solid var(--theme-border-color, rgba(0, 0, 0, 0.07));
} }
} }
@@ -56,13 +56,13 @@ Displayed only when an error is detected by the parent container component.
## Layout Content ## Layout Content
You can provide any Angular component or HTML element as the main content. You can provide any Angular component or HTML element as the main content.
In addition, you can use `scrollable` class to make the content scroll. In addition, you can use `aca-scrollable` class to make the content scroll.
The content is displayed only when there are no errors detected. The content is displayed only when there are no errors detected.
```html ```html
<aca-page-layout> <aca-page-layout>
<div class="aca-page-layout-content scrollable"> <div class="aca-page-layout-content aca-scrollable">
<!-- Main Content --> <!-- Main Content -->
</div> </div>
</aca-page-layout> </aca-page-layout>
@@ -1,4 +1,4 @@
<mat-toolbar> <mat-toolbar class="aca-toolbar">
<ng-container *ngFor="let item of items; trackBy: trackByActionId"> <ng-container *ngFor="let item of items; trackBy: trackByActionId">
<aca-toolbar-action [actionRef]="item"></aca-toolbar-action> <aca-toolbar-action [actionRef]="item"></aca-toolbar-action>
</ng-container> </ng-container>
@@ -1,5 +1,5 @@
aca-toolbar { aca-toolbar {
.mat-toolbar { .aca-toolbar {
min-height: 48px; min-height: 48px;
color: var(--adf-theme-foreground-text-color-054); color: var(--adf-theme-foreground-text-color-054);
background-color: inherit; background-color: inherit;
@@ -7,16 +7,6 @@ aca-toolbar {
padding: 0; padding: 0;
} }
.mat-toolbar-row {
height: 48px;
font-size: var(--theme-body-1-font-size);
white-space: normal;
}
.mat-toolbar-single-row {
height: 64px;
}
.aca-toolbar-divider { .aca-toolbar-divider {
height: 24px; height: 24px;
width: 1px; width: 1px;
@@ -213,7 +213,7 @@ export class DataTable extends Component {
async getLockOwner(itemName: string, location: string = ''): Promise<string> { async getLockOwner(itemName: string, location: string = ''): Promise<string> {
if (await this.hasLockOwnerInfo(itemName, location)) { if (await this.hasLockOwnerInfo(itemName, location)) {
const row = this.getRowByName(itemName, location); const row = this.getRowByName(itemName, location);
return row.$(DataTable.selectors.lockOwner).$('.locked_by--name').getText(); return row.$(DataTable.selectors.lockOwner).$('.aca-locked-by--name').getText();
} }
return ''; return '';
} }
@@ -425,7 +425,7 @@ export class DataTable extends Component {
} }
private getSearchResultNameLink(itemName: string, location: string = ''): ElementFinder { private getSearchResultNameLink(itemName: string, location: string = ''): ElementFinder {
return this.getSearchResultsRowByName(itemName, location).$('.link'); return this.getSearchResultsRowByName(itemName, location).$('.aca-link');
} }
async hasLinkOnSearchResultName(itemName: string, location: string = ''): Promise<boolean> { async hasLinkOnSearchResultName(itemName: string, location: string = ''): Promise<boolean> {
@@ -32,7 +32,7 @@ import { BrowserActions } from '@alfresco/adf-testing';
export class Header extends Component { export class Header extends Component {
userMenuButton = this.byCss(`.aca-user-menu-button`); userMenuButton = this.byCss(`.aca-user-menu-button`);
sidenavToggle = this.byCss(`.sidenav-header-title-logo`); sidenavToggle = this.byCss(`.aca-sidenav-header-title-logo`);
menu = new Menu(); menu = new Menu();
toolbar = new Toolbar(); toolbar = new Toolbar();
@@ -42,7 +42,7 @@ export class InfoDrawer extends Component {
tabActiveContent = this.byCss('.mat-tab-body-active .mat-tab-body-content adf-dynamic-tab'); tabActiveContent = this.byCss('.mat-tab-body-active .mat-tab-body-content adf-dynamic-tab');
expandDetailsButton = TestElement.byCss(`button[title='Expand']`); expandDetailsButton = TestElement.byCss(`button[title='Expand']`);
selectedTab = TestElement.byCss(`.mat-tab-list [aria-selected='true'] div`); selectedTab = TestElement.byCss(`.mat-tab-list [aria-selected='true'] div`);
expandedDetailsPermissionsTab = TestElement.byText('.acs-details-container .mat-tab-label-content', 'Permissions'); expandedDetailsPermissionsTab = TestElement.byText('.aca-details-container .mat-tab-label-content', 'Permissions');
previewButton = TestElement.byCss(`button[title='Preview File']`); previewButton = TestElement.byCss(`button[title='Preview File']`);
toolbar = new Toolbar('adf-info-drawer'); toolbar = new Toolbar('adf-info-drawer');
@@ -39,7 +39,7 @@ export class Sidenav extends Component {
recentFiles = this.byCss(`[data-automation-id='app.navbar.recentFiles']`); recentFiles = this.byCss(`[data-automation-id='app.navbar.recentFiles']`);
favorites = this.byCss(`[data-automation-id='app.navbar.favorites']`); favorites = this.byCss(`[data-automation-id='app.navbar.favorites']`);
trash = this.byCss(`[data-automation-id='app.navbar.trashcan']`); trash = this.byCss(`[data-automation-id='app.navbar.trashcan']`);
sidenavToggle = this.byCss(`.sidenav-header-title-logo`); sidenavToggle = this.byCss(`.aca-sidenav-header-title-logo`);
menu: Menu = new Menu(); menu: Menu = new Menu();