[AAE-4515] Provide a way to disable/enable the main file uploading di… (#1981)

* [AAE-4515] Provide a way to disable/enable the main file uploading dialog

* Fix expression has been changed after is has been checked error

* Add unit tests

* Fix linting errors
This commit is contained in:
arditdomi
2021-02-09 20:10:09 +01:00
committed by GitHub
parent 5948580c4c
commit 0f3aa4b589
8 changed files with 77 additions and 17 deletions

View File

@@ -43,7 +43,8 @@ export enum AppActionTypes {
ResetSelection = 'RESET_SELECTION', ResetSelection = 'RESET_SELECTION',
SetInfoDrawerState = 'SET_INFO_DRAWER_STATE', SetInfoDrawerState = 'SET_INFO_DRAWER_STATE',
SetInfoDrawerMetadataAspect = 'SET_INFO_DRAWER_METADATA_ASPECT', SetInfoDrawerMetadataAspect = 'SET_INFO_DRAWER_METADATA_ASPECT',
CloseModalDialogs = 'CLOSE_MODAL_DIALOGS' CloseModalDialogs = 'CLOSE_MODAL_DIALOGS',
SetFileUploadingDialog = 'SET_FILE_UPLOADING_DIALOG'
} }
export class SetSettingsParameterAction implements Action { export class SetSettingsParameterAction implements Action {
@@ -127,3 +128,9 @@ export class SetRepositoryInfoAction implements Action {
constructor(public payload: RepositoryInfo) {} constructor(public payload: RepositoryInfo) {}
} }
export class SetFileUploadingDialogAction implements Action {
readonly type = AppActionTypes.SetFileUploadingDialog;
constructor(public payload: boolean) {}
}

View File

@@ -44,6 +44,7 @@ export const getDocumentDisplayMode = createSelector(selectApp, (state) => state
export const getRepositoryStatus = createSelector(selectApp, (state) => state.repository); export const getRepositoryStatus = createSelector(selectApp, (state) => state.repository);
export const isQuickShareEnabled = createSelector(getRepositoryStatus, (info) => info.status.isQuickShareEnabled); export const isQuickShareEnabled = createSelector(getRepositoryStatus, (info) => info.status.isQuickShareEnabled);
export const isAdmin = createSelector(selectApp, (state) => state.user.isAdmin); export const isAdmin = createSelector(selectApp, (state) => state.user.isAdmin);
export const getFileUploadingDialog = createSelector(selectApp, (state) => state.fileUploadingDialog);
export const getSideNavState = createSelector(getAppSelection, getNavigationState, (selection, navigation) => { export const getSideNavState = createSelector(getAppSelection, getNavigationState, (selection, navigation) => {
return { return {

View File

@@ -41,6 +41,7 @@ export interface AppState {
showFacetFilter: boolean; showFacetFilter: boolean;
documentDisplayMode: string; documentDisplayMode: string;
repository: RepositoryInfo; repository: RepositoryInfo;
fileUploadingDialog: boolean;
} }
export interface AppStore { export interface AppStore {

View File

@@ -10,13 +10,7 @@
> >
<adf-sidenav-layout-header> <adf-sidenav-layout-header>
<ng-template let-isMenuMinimized="isMenuMinimized"> <ng-template let-isMenuMinimized="isMenuMinimized">
<app-header <app-header role="heading" aria-level="1" *ngIf="!hideSidenav" (toggleClicked)="layout.toggleMenu()" [expandedSidenav]="!isMenuMinimized()">
role="heading"
aria-level="1"
*ngIf="!hideSidenav"
(toggleClicked)="layout.toggleMenu()"
[expandedSidenav]="!isMenuMinimized()"
>
</app-header> </app-header>
</ng-template> </ng-template>
</adf-sidenav-layout-header> </adf-sidenav-layout-header>
@@ -25,9 +19,7 @@
<ng-template let-isMenuMinimized="isMenuMinimized"> <ng-template let-isMenuMinimized="isMenuMinimized">
<app-sidenav <app-sidenav
[mode]="isMenuMinimized() ? 'collapsed' : 'expanded'" [mode]="isMenuMinimized() ? 'collapsed' : 'expanded'"
[attr.data-automation-id]=" [attr.data-automation-id]="isMenuMinimized() ? 'collapsed' : 'expanded'"
isMenuMinimized() ? 'collapsed' : 'expanded'
"
(swipeleft)="hideMenu($event)" (swipeleft)="hideMenu($event)"
> >
</app-sidenav> </app-sidenav>
@@ -41,7 +33,7 @@
</adf-sidenav-layout-content> </adf-sidenav-layout-content>
</adf-sidenav-layout> </adf-sidenav-layout>
<adf-file-uploading-dialog position="left"></adf-file-uploading-dialog> <adf-file-uploading-dialog *ngIf="showFileUploadingDialog" position="left"></adf-file-uploading-dialog>
</adf-upload-drag-area> </adf-upload-drag-area>
<router-outlet name="viewer"></router-outlet> <router-outlet name="viewer"></router-outlet>

View File

@@ -25,13 +25,14 @@
import { NO_ERRORS_SCHEMA } from '@angular/core'; import { NO_ERRORS_SCHEMA } from '@angular/core';
import { TestBed, ComponentFixture } from '@angular/core/testing'; import { TestBed, ComponentFixture } from '@angular/core/testing';
import { AppConfigService, UserPreferencesService } from '@alfresco/adf-core'; import { AppConfigService, FileModel, UploadService, UserPreferencesService } from '@alfresco/adf-core';
import { AppLayoutComponent } from './app-layout.component'; import { AppLayoutComponent } from './app-layout.component';
import { AppTestingModule } from '../../../testing/app-testing.module'; import { AppTestingModule } from '../../../testing/app-testing.module';
import { Store } from '@ngrx/store'; import { Store } from '@ngrx/store';
import { AppStore, SetSelectedNodesAction, ResetSelectionAction } from '@alfresco/aca-shared/store'; import { AppStore, SetSelectedNodesAction, ResetSelectionAction } from '@alfresco/aca-shared/store';
import { Router, NavigationStart } from '@angular/router'; import { Router, NavigationStart } from '@angular/router';
import { Subject } from 'rxjs'; import { of, Subject } from 'rxjs';
import { By } from '@angular/platform-browser';
class MockRouter { class MockRouter {
private url = 'some-url'; private url = 'some-url';
@@ -52,6 +53,8 @@ describe('AppLayoutComponent', () => {
let userPreference: UserPreferencesService; let userPreference: UserPreferencesService;
let store: Store<AppStore>; let store: Store<AppStore>;
let router: Router; let router: Router;
let uploadService: UploadService;
let fakeFileList: FileModel[];
beforeEach(() => { beforeEach(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
@@ -73,6 +76,10 @@ describe('AppLayoutComponent', () => {
store = TestBed.inject(Store); store = TestBed.inject(Store);
router = TestBed.inject(Router); router = TestBed.inject(Router);
userPreference = TestBed.inject(UserPreferencesService); userPreference = TestBed.inject(UserPreferencesService);
fakeFileList = [new FileModel(new File([], 'fakeFile'))];
uploadService = TestBed.inject(UploadService);
}); });
beforeEach(() => { beforeEach(() => {
@@ -178,4 +185,36 @@ describe('AppLayoutComponent', () => {
expect(component.layout.container.toggleMenu).toHaveBeenCalled(); expect(component.layout.container.toggleMenu).toHaveBeenCalled();
}); });
describe('File Uploading Dialog', () => {
it('should the uploading file dialog be visible on the left when the showFileUploadingDialog is true', async () => {
fixture.detectChanges();
await fixture.whenStable();
uploadService.addToQueue(...fakeFileList);
fixture.detectChanges();
await fixture.whenStable();
const fileUploadingDialog = fixture.debugElement.query(By.css('adf-file-uploading-dialog'));
expect(fileUploadingDialog.attributes['position']).toEqual('left');
expect(component.showFileUploadingDialog).toEqual(true);
expect(fileUploadingDialog).not.toEqual(null);
});
it('should the uploading file dialog not be visible when the showFileUploadingDialog is false', async () => {
spyOn(store, 'select').and.returnValue(of(false));
fixture.detectChanges();
await fixture.whenStable();
uploadService.addToQueue(...fakeFileList);
fixture.detectChanges();
await fixture.whenStable();
const fileUploadingDialog = fixture.debugElement.query(By.css('adf-file-uploading-dialog'));
expect(component.showFileUploadingDialog).toEqual(false);
expect(fileUploadingDialog).toEqual(null);
});
});
}); });

View File

@@ -28,10 +28,10 @@ import { Component, OnDestroy, OnInit, ViewChild, ViewEncapsulation } from '@ang
import { NavigationEnd, Router, NavigationStart } from '@angular/router'; import { NavigationEnd, Router, NavigationStart } from '@angular/router';
import { Store } from '@ngrx/store'; import { Store } from '@ngrx/store';
import { Subject, Observable } from 'rxjs'; import { Subject, Observable } from 'rxjs';
import { filter, takeUntil, map, withLatestFrom } from 'rxjs/operators'; import { filter, takeUntil, map, withLatestFrom, delay } from 'rxjs/operators';
import { NodePermissionService } from '@alfresco/aca-shared'; import { NodePermissionService } from '@alfresco/aca-shared';
import { BreakpointObserver } from '@angular/cdk/layout'; import { BreakpointObserver } from '@angular/cdk/layout';
import { AppStore, getCurrentFolder, ResetSelectionAction } from '@alfresco/aca-shared/store'; import { AppStore, getCurrentFolder, getFileUploadingDialog, ResetSelectionAction } from '@alfresco/aca-shared/store';
import { Directionality } from '@angular/cdk/bidi'; import { Directionality } from '@angular/cdk/bidi';
@Component({ @Component({
@@ -56,6 +56,8 @@ export class AppLayoutComponent implements OnInit, OnDestroy {
hideSidenav = false; hideSidenav = false;
direction: Directionality; direction: Directionality;
showFileUploadingDialog: boolean;
private minimizeConditions: string[] = ['search']; private minimizeConditions: string[] = ['search'];
private hideConditions: string[] = ['/preview/']; private hideConditions: string[] = ['/preview/'];
@@ -119,6 +121,13 @@ export class AppLayoutComponent implements OnInit, OnDestroy {
.subscribe(() => { .subscribe(() => {
this.store.dispatch(new ResetSelectionAction()); this.store.dispatch(new ResetSelectionAction());
}); });
this.store
.select(getFileUploadingDialog)
.pipe(delay(0), takeUntil(this.onDestroy$))
.subscribe((fileUploadingDialog: boolean) => {
this.showFileUploadingDialog = fileUploadingDialog;
});
} }
ngOnDestroy() { ngOnDestroy() {

View File

@@ -50,6 +50,7 @@ export const INITIAL_APP_STATE: AppState = {
infoDrawerOpened: false, infoDrawerOpened: false,
infoDrawerMetadataAspect: '', infoDrawerMetadataAspect: '',
showFacetFilter: true, showFacetFilter: true,
fileUploadingDialog: true,
documentDisplayMode: 'list', documentDisplayMode: 'list',
repository: { repository: {
status: { status: {

View File

@@ -38,7 +38,8 @@ import {
SetInfoDrawerStateAction, SetInfoDrawerStateAction,
SetInfoDrawerMetadataAspectAction, SetInfoDrawerMetadataAspectAction,
SetHeaderColorAction, SetHeaderColorAction,
SetCurrentNodeVersionAction SetCurrentNodeVersionAction,
SetFileUploadingDialogAction
} from '@alfresco/aca-shared/store'; } from '@alfresco/aca-shared/store';
import { INITIAL_APP_STATE } from '../initial-state'; import { INITIAL_APP_STATE } from '../initial-state';
@@ -94,6 +95,9 @@ export function appReducer(state: AppState = INITIAL_APP_STATE, action: Action):
case SearchActionTypes.HideFilter: case SearchActionTypes.HideFilter:
newState = hideSearchFilter(state); newState = hideSearchFilter(state);
break; break;
case AppActionTypes.SetFileUploadingDialog:
newState = setUploadDialogVisibility(state, action as SetFileUploadingDialogAction);
break;
default: default:
newState = { ...state }; newState = { ...state };
} }
@@ -256,3 +260,9 @@ function updateRepositoryStatus(state: AppState, action: SetRepositoryInfoAction
newState.repository = action.payload; newState.repository = action.payload;
return newState; return newState;
} }
function setUploadDialogVisibility(state: AppState, action: SetFileUploadingDialogAction): AppState {
const newState = { ...state };
newState.fileUploadingDialog = action.payload;
return newState;
}