- +
- + - \ No newline at end of file diff --git a/demo-shell/src/app/components/card-view/card-view.component.html b/demo-shell/src/app/components/card-view/card-view.component.html index e39f4116c8..87c8edd452 100644 --- a/demo-shell/src/app/components/card-view/card-view.component.html +++ b/demo-shell/src/app/components/card-view/card-view.component.html @@ -4,7 +4,9 @@ + [editable]="true" + [displayClearAction]="showClearDateAction" + [displayNoneOption]="showNoneOption"> @@ -22,6 +24,20 @@ (change)="toggleEditable()" [checked]="isEditable"> Editable +
+ + Show clear date icon +
+ + Show none option

diff --git a/demo-shell/src/app/components/card-view/card-view.component.ts b/demo-shell/src/app/components/card-view/card-view.component.ts index 0f4a283367..0c3f50e61b 100644 --- a/demo-shell/src/app/components/card-view/card-view.component.ts +++ b/demo-shell/src/app/components/card-view/card-view.component.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { Component, OnInit, ElementRef, ViewChild } from '@angular/core'; +import { Component, OnInit, ElementRef, ViewChild, OnDestroy } from '@angular/core'; import { CardViewTextItemModel, CardViewDateItemModel, @@ -27,23 +27,30 @@ import { CardViewSelectItemModel, CardViewUpdateService, CardViewMapItemModel, - UpdateNotification + UpdateNotification, + DecimalNumberPipe } from '@alfresco/adf-core'; -import { of } from 'rxjs'; +import { of, Subject } from 'rxjs'; +import { takeUntil } from 'rxjs/operators'; @Component({ templateUrl: './card-view.component.html', styleUrls: ['./card-view.component.scss'] }) -export class CardViewComponent implements OnInit { +export class CardViewComponent implements OnInit, OnDestroy { @ViewChild('console') console: ElementRef; isEditable = true; properties: any; logs: string[]; + showClearDateAction = false; + showNoneOption = false; - constructor(private cardViewUpdateService: CardViewUpdateService) { + private onDestroy$ = new Subject(); + + constructor(private cardViewUpdateService: CardViewUpdateService, + private decimalNumberPipe: DecimalNumberPipe) { this.logs = []; this.createCard(); } @@ -53,7 +60,14 @@ export class CardViewComponent implements OnInit { } ngOnInit() { - this.cardViewUpdateService.itemUpdated$.subscribe(this.onItemChange.bind(this)); + this.cardViewUpdateService.itemUpdated$ + .pipe(takeUntil(this.onDestroy$)) + .subscribe(this.onItemChange.bind(this)); + } + + ngOnDestroy() { + this.onDestroy$.next(true); + this.onDestroy$.complete(); } createCard() { @@ -102,7 +116,8 @@ export class CardViewComponent implements OnInit { value: 9.9, key: 'float', default: 0.0, - editable: this.isEditable + editable: this.isEditable, + pipes: [{ pipe: this.decimalNumberPipe}] }), new CardViewKeyValuePairsItemModel({ label: 'CardView Key-Value Pairs Item', @@ -153,6 +168,14 @@ export class CardViewComponent implements OnInit { this.createCard(); } + toggleClearDate() { + this.showClearDateAction = !this.showClearDateAction; + } + + toggleNoneOption() { + this.showNoneOption = !this.showNoneOption; + } + reset() { this.isEditable = true; this.createCard(); diff --git a/demo-shell/src/app/components/cloud/cloud-breadcrumb-component.ts b/demo-shell/src/app/components/cloud/cloud-breadcrumb-component.ts index d3edf12944..90816e16bd 100644 --- a/demo-shell/src/app/components/cloud/cloud-breadcrumb-component.ts +++ b/demo-shell/src/app/components/cloud/cloud-breadcrumb-component.ts @@ -19,26 +19,24 @@ import { Component, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; @Component({ - selector: 'app-cloud-breadcrumbs', - templateUrl: './cloud-breadcrumb-component.html', - styleUrls: ['cloud-breadcrumb-component.scss'] + selector: 'app-cloud-breadcrumbs', + templateUrl: './cloud-breadcrumb-component.html', + styleUrls: ['cloud-breadcrumb-component.scss'] }) export class CloudBreadcrumbsComponent implements OnInit { + appName: string; + filterName: string; - appName: string; - filterName: string; + constructor(private route: ActivatedRoute) {} - constructor(private route: ActivatedRoute) { } - - ngOnInit() { - this.route.parent.params.subscribe(( - params) => { - this.appName = params.appName; - }); - this.route.queryParams.subscribe((params) => { - if (params.filterName) { - this.filterName = params.filterName; - } - }); - } + ngOnInit() { + this.route.parent.params.subscribe(params => { + this.appName = params.appName; + }); + this.route.queryParams.subscribe(params => { + if (params.filterName) { + this.filterName = params.filterName; + } + }); + } } diff --git a/demo-shell/src/app/components/cloud/cloud-filters-demo.component.ts b/demo-shell/src/app/components/cloud/cloud-filters-demo.component.ts index 7f27a2aa3a..2a193bfdbe 100644 --- a/demo-shell/src/app/components/cloud/cloud-filters-demo.component.ts +++ b/demo-shell/src/app/components/cloud/cloud-filters-demo.component.ts @@ -46,8 +46,9 @@ export class CloudFiltersDemoComponent implements OnInit { ) {} ngOnInit() { - this.currentTaskFilter$ = this.cloudLayoutService.getCurrentTaskFilterParam(); - this.currentProcessFilter$ = this.cloudLayoutService.getCurrentProcessFilterParam(); + this.currentTaskFilter$ = this.cloudLayoutService.taskFilter$; + this.currentProcessFilter$ = this.cloudLayoutService.processFilter$; + let root = ''; if (this.route.snapshot && this.route.snapshot.firstChild) { root = this.route.snapshot.firstChild.url[0].path; @@ -62,13 +63,13 @@ export class CloudFiltersDemoComponent implements OnInit { } onTaskFilterSelected(filter) { - this.cloudLayoutService.setCurrentTaskFilterParam({id: filter.id}); + this.cloudLayoutService.setCurrentTaskFilterParam({id: filter && filter.id ? filter.id : ''}); const currentFilter = Object.assign({}, filter); this.router.navigate([`/cloud/${this.appName}/tasks/`], { queryParams: currentFilter }); } onProcessFilterSelected(filter) { - this.cloudLayoutService.setCurrentProcessFilterParam({id: filter.id}); + this.cloudLayoutService.setCurrentProcessFilterParam({id: filter && filter.id ? filter.id : ''}); const currentFilter = Object.assign({}, filter); this.router.navigate([`/cloud/${this.appName}/processes/`], { queryParams: currentFilter }); } diff --git a/demo-shell/src/app/components/cloud/cloud-viewer.component.ts b/demo-shell/src/app/components/cloud/cloud-viewer.component.ts index a65bfe0b5c..14623f5330 100644 --- a/demo-shell/src/app/components/cloud/cloud-viewer.component.ts +++ b/demo-shell/src/app/components/cloud/cloud-viewer.component.ts @@ -15,32 +15,24 @@ * limitations under the License. */ -import { Component, OnDestroy, OnInit } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; -import { Subscription } from 'rxjs'; import { Params } from '@angular/router/src/shared'; @Component({ selector: 'app-cloud-viewer', templateUrl: './cloud-viewer.component.html' }) -export class CloudViewerComponent implements OnInit, OnDestroy { +export class CloudViewerComponent implements OnInit { nodeId: string; - private sub: Subscription; - constructor(private route: ActivatedRoute) { } ngOnInit() { - this.sub = this.route.params.subscribe((params: Params) => { + this.route.params.subscribe((params: Params) => { this.nodeId = params['nodeId']; }); } - - ngOnDestroy() { - this.sub.unsubscribe(); - } - } diff --git a/demo-shell/src/app/components/cloud/community/community-cloud.component.ts b/demo-shell/src/app/components/cloud/community/community-cloud.component.ts index 6303699344..40f92e73b4 100644 --- a/demo-shell/src/app/components/cloud/community/community-cloud.component.ts +++ b/demo-shell/src/app/components/cloud/community/community-cloud.component.ts @@ -29,7 +29,7 @@ import { CloudLayoutService } from '../services/cloud-layout.service'; height: 100% !important; } `], - encapsulation: ViewEncapsulation.None + encapsulation: ViewEncapsulation.None }) export class CommunityCloudComponent { diff --git a/demo-shell/src/app/components/cloud/community/community-filters.component.ts b/demo-shell/src/app/components/cloud/community/community-filters.component.ts index 39e64d288f..f3cf42d129 100644 --- a/demo-shell/src/app/components/cloud/community/community-filters.component.ts +++ b/demo-shell/src/app/components/cloud/community/community-filters.component.ts @@ -45,8 +45,9 @@ export class CommunityCloudFiltersDemoComponent implements OnInit { ) {} ngOnInit() { - this.currentTaskFilter$ = this.cloudLayoutService.getCurrentTaskFilterParam(); - this.currentProcessFilter$ = this.cloudLayoutService.getCurrentProcessFilterParam(); + this.currentTaskFilter$ = this.cloudLayoutService.taskFilter$; + this.currentProcessFilter$ = this.cloudLayoutService.processFilter$; + let root = ''; if (this.route.snapshot && this.route.snapshot.firstChild) { root = this.route.snapshot.firstChild.url[0].path; diff --git a/demo-shell/src/app/components/cloud/community/community-processes-cloud.component.ts b/demo-shell/src/app/components/cloud/community/community-processes-cloud.component.ts index c7d658b9b1..4092e9a573 100644 --- a/demo-shell/src/app/components/cloud/community/community-processes-cloud.component.ts +++ b/demo-shell/src/app/components/cloud/community/community-processes-cloud.component.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { Component, ViewChild, OnInit } from '@angular/core'; +import { Component, ViewChild, OnInit, OnDestroy } from '@angular/core'; import { ProcessListCloudComponent, ProcessFilterCloudModel, @@ -27,12 +27,14 @@ import { import { ActivatedRoute, Router } from '@angular/router'; import { UserPreferencesService, AppConfigService } from '@alfresco/adf-core'; import { CloudLayoutService } from '../services/cloud-layout.service'; +import { Subject } from 'rxjs'; +import { takeUntil } from 'rxjs/operators'; +import { Pagination } from '@alfresco/js-api'; @Component({ templateUrl: './community-processes-cloud.component.html' }) -export class CommunityProcessesCloudDemoComponent implements OnInit { - +export class CommunityProcessesCloudDemoComponent implements OnInit, OnDestroy { public static ACTION_SAVE_AS = 'saveAs'; static PROCESS_FILTER_PROPERTY_KEYS = 'adf-edit-process-filter'; @@ -56,6 +58,8 @@ export class CommunityProcessesCloudDemoComponent implements OnInit { editedFilter: ProcessFilterCloudModel; + private onDestroy$ = new Subject(); + constructor( private route: ActivatedRoute, private router: Router, @@ -63,7 +67,10 @@ export class CommunityProcessesCloudDemoComponent implements OnInit { private userPreference: UserPreferencesService, private processFilterCloudService: ProcessFilterCloudService, private appConfig: AppConfigService) { - const properties = this.appConfig.get>(CommunityProcessesCloudDemoComponent.PROCESS_FILTER_PROPERTY_KEYS); + const properties = this.appConfig.get>( + CommunityProcessesCloudDemoComponent.PROCESS_FILTER_PROPERTY_KEYS + ); + if (properties) { this.processFilterProperties = properties; } @@ -71,6 +78,7 @@ export class CommunityProcessesCloudDemoComponent implements OnInit { ngOnInit() { this.isFilterLoaded = false; + this.route.parent.params.subscribe((params) => { this.appName = params.appName; }); @@ -85,14 +93,23 @@ export class CommunityProcessesCloudDemoComponent implements OnInit { } }); - this.cloudLayoutService.getCurrentSettings() - .subscribe((settings) => this.setCurrentSettings(settings)); + this.cloudLayoutService + .settings$ + .pipe(takeUntil(this.onDestroy$)) + .subscribe(settings => this.setCurrentSettings(settings)); + } + + ngOnDestroy() { + this.onDestroy$.next(true); + this.onDestroy$.complete(); } loadDefaultFilters() { - this.processFilterCloudService.getProcessFilters('community').subscribe( (filters: ProcessFilterCloudModel[]) => { - this.onFilterChange(filters[0]); - }); + this.processFilterCloudService + .getProcessFilters('community') + .subscribe((filters: ProcessFilterCloudModel[]) => { + this.onFilterChange(filters[0]); + }); } setCurrentSettings(settings) { @@ -103,7 +120,7 @@ export class CommunityProcessesCloudDemoComponent implements OnInit { } } - onChangePageSize(event) { + onChangePageSize(event: Pagination) { this.userPreference.paginationSize = event.maxItems; } @@ -111,13 +128,18 @@ export class CommunityProcessesCloudDemoComponent implements OnInit { this.selectedRows = []; } - onRowClick(processInstanceId) { + onRowClick(processInstanceId: string) { this.router.navigate([`/cloud/community/process-details/${processInstanceId}`]); } onFilterChange(query: any) { this.editedFilter = Object.assign({}, query); - this.sortArray = [new ProcessListCloudSortingModel({ orderBy: this.editedFilter.sort, direction: this.editedFilter.order })]; + this.sortArray = [ + new ProcessListCloudSortingModel({ + orderBy: this.editedFilter.sort, + direction: this.editedFilter.order + }) + ]; } onProcessFilterAction(filterAction: any) { diff --git a/demo-shell/src/app/components/cloud/community/community-task-cloud.component.ts b/demo-shell/src/app/components/cloud/community/community-task-cloud.component.ts index 1e77a51372..94c38ddb1c 100644 --- a/demo-shell/src/app/components/cloud/community/community-task-cloud.component.ts +++ b/demo-shell/src/app/components/cloud/community/community-task-cloud.component.ts @@ -15,11 +15,14 @@ * limitations under the License. */ -import { Component, ViewChild, OnInit } from '@angular/core'; +import { Component, ViewChild, OnInit, OnDestroy } from '@angular/core'; import { TaskListCloudComponent, TaskListCloudSortingModel, TaskFilterCloudModel, TaskFilterCloudService } from '@alfresco/adf-process-services-cloud'; import { UserPreferencesService, AppConfigService } from '@alfresco/adf-core'; import { ActivatedRoute, Router } from '@angular/router'; import { CloudLayoutService } from '../services/cloud-layout.service'; +import { Subject } from 'rxjs'; +import { takeUntil } from 'rxjs/operators'; +import { Pagination } from '@alfresco/js-api'; @Component({ templateUrl: './community-task-cloud.component.html', @@ -28,8 +31,7 @@ import { CloudLayoutService } from '../services/cloud-layout.service'; } `] }) -export class CommunityTasksCloudDemoComponent implements OnInit { - +export class CommunityTasksCloudDemoComponent implements OnInit, OnDestroy { public static ACTION_SAVE_AS = 'saveAs'; static TASK_FILTER_PROPERTY_KEYS = 'adf-edit-task-filter'; @@ -51,6 +53,8 @@ export class CommunityTasksCloudDemoComponent implements OnInit { selectionMode: string; taskDetailsRedirection: boolean; + private onDestroy$ = new Subject(); + constructor( private cloudLayoutService: CloudLayoutService, private route: ActivatedRoute, @@ -79,14 +83,23 @@ export class CommunityTasksCloudDemoComponent implements OnInit { } }); - this.cloudLayoutService.getCurrentSettings() - .subscribe((settings) => this.setCurrentSettings(settings)); + this.cloudLayoutService + .settings$ + .pipe(takeUntil(this.onDestroy$)) + .subscribe(settings => this.setCurrentSettings(settings)); + } + + ngOnDestroy() { + this.onDestroy$.next(true); + this.onDestroy$.complete(); } loadDefaultFilters() { - this.taskFilterCloudService.getTaskListFilters('community').subscribe( (filters: TaskFilterCloudModel[]) => { - this.onFilterChange(filters[0]); - }); + this.taskFilterCloudService + .getTaskListFilters('community') + .subscribe((filters: TaskFilterCloudModel[]) => { + this.onFilterChange(filters[0]); + }); } setCurrentSettings(settings) { @@ -98,7 +111,7 @@ export class CommunityTasksCloudDemoComponent implements OnInit { } } - onChangePageSize(event) { + onChangePageSize(event: Pagination) { this.userPreference.paginationSize = event.maxItems; } @@ -106,7 +119,7 @@ export class CommunityTasksCloudDemoComponent implements OnInit { this.selectedRows = []; } - onRowClick(taskId) { + onRowClick(taskId: string) { if (!this.multiselect && this.selectionMode !== 'multiple' && this.taskDetailsRedirection) { this.router.navigate([`/cloud/community/task-details/${taskId}`]); } diff --git a/demo-shell/src/app/components/cloud/community/community-task-details-cloud.component.scss b/demo-shell/src/app/components/cloud/community/community-task-details-cloud.component.scss index e97ca949e4..e3cc8d8c52 100644 --- a/demo-shell/src/app/components/cloud/community/community-task-details-cloud.component.scss +++ b/demo-shell/src/app/components/cloud/community/community-task-details-cloud.component.scss @@ -5,7 +5,7 @@ display: flex; } - &-task-tiitle { + &-task-title { margin-left:15px; } diff --git a/demo-shell/src/app/components/cloud/community/community.module.ts b/demo-shell/src/app/components/cloud/community/community.module.ts new file mode 100644 index 0000000000..6b10e6b435 --- /dev/null +++ b/demo-shell/src/app/components/cloud/community/community.module.ts @@ -0,0 +1,97 @@ +/*! + * @license + * Copyright 2019 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import { CommonModule } from '@angular/common'; +import { CoreModule } from '@alfresco/adf-core'; +import { FlexLayoutModule } from '@angular/flex-layout'; +import { + ProcessServicesCloudModule, + LocalPreferenceCloudService, + PROCESS_FILTERS_SERVICE_TOKEN, + TASK_FILTERS_SERVICE_TOKEN +} from '@alfresco/adf-process-services-cloud'; + +import { CommunityCloudComponent } from './community-cloud.component'; +import { CommunityTasksCloudDemoComponent } from './community-task-cloud.component'; +import { CommunityCloudFiltersDemoComponent } from './community-filters.component'; +import { CommunityProcessesCloudDemoComponent } from './community-processes-cloud.component'; +import { CommunityStartProcessCloudDemoComponent } from './community-start-process-cloud.component'; +import { CommunityStartTaskCloudDemoComponent } from './community-start-task-cloud.component'; +import { CommunityProcessDetailsCloudDemoComponent } from './community-process-details-cloud.component'; +import { CommunityTaskDetailsCloudDemoComponent } from './community-task-details-cloud.component'; +import { AppCloudSharedModule } from '../shared/cloud.shared.module'; + +const routes: Routes = [ + { + path: '', + component: CommunityCloudComponent, + children: [ + { + path: 'tasks', + component: CommunityTasksCloudDemoComponent + }, + { + path: 'processes', + component: CommunityProcessesCloudDemoComponent + }, + { + path: 'start-task', + component: CommunityStartTaskCloudDemoComponent + }, + { + path: 'start-process', + component: CommunityStartProcessCloudDemoComponent + }, + { + path: 'task-details/:taskId', + component: CommunityTaskDetailsCloudDemoComponent + }, + { + path: 'process-details/:processInstanceId', + component: CommunityProcessDetailsCloudDemoComponent + } + ] + } +]; + +@NgModule({ + imports: [ + CommonModule, + CoreModule.forChild(), + ProcessServicesCloudModule, + RouterModule.forChild(routes), + AppCloudSharedModule, + FlexLayoutModule + ], + declarations: [ + CommunityCloudComponent, + CommunityTasksCloudDemoComponent, + CommunityCloudFiltersDemoComponent, + CommunityProcessesCloudDemoComponent, + CommunityStartProcessCloudDemoComponent, + CommunityStartTaskCloudDemoComponent, + CommunityProcessDetailsCloudDemoComponent, + CommunityTaskDetailsCloudDemoComponent + ], + providers: [ + { provide: PROCESS_FILTERS_SERVICE_TOKEN, useClass: LocalPreferenceCloudService }, + { provide: TASK_FILTERS_SERVICE_TOKEN, useClass: LocalPreferenceCloudService } + ] +}) +export class AppCommunityModule {} diff --git a/demo-shell/src/app/components/cloud/processes-cloud-demo.component.ts b/demo-shell/src/app/components/cloud/processes-cloud-demo.component.ts index 31a417e206..40455ff8c2 100644 --- a/demo-shell/src/app/components/cloud/processes-cloud-demo.component.ts +++ b/demo-shell/src/app/components/cloud/processes-cloud-demo.component.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { Component, ViewChild, OnInit } from '@angular/core'; +import { Component, ViewChild, OnInit, OnDestroy } from '@angular/core'; import { ProcessListCloudComponent, ProcessFilterCloudModel, @@ -25,13 +25,16 @@ import { import { ActivatedRoute, Router } from '@angular/router'; import { UserPreferencesService, AppConfigService } from '@alfresco/adf-core'; -import { CloudLayoutService } from './services/cloud-layout.service'; +import { CloudLayoutService, CloudServiceSettings } from './services/cloud-layout.service'; +import { Subject } from 'rxjs'; +import { takeUntil } from 'rxjs/operators'; +import { Pagination } from '@alfresco/js-api'; @Component({ templateUrl: './processes-cloud-demo.component.html', styleUrls: ['./processes-cloud-demo.component.scss'] }) -export class ProcessesCloudDemoComponent implements OnInit { +export class ProcessesCloudDemoComponent implements OnInit, OnDestroy { public static ACTION_SAVE_AS = 'saveAs'; static PROCESS_FILTER_PROPERTY_KEYS = 'adf-edit-process-filter'; @@ -57,6 +60,8 @@ export class ProcessesCloudDemoComponent implements OnInit { editedFilter: ProcessFilterCloudModel; + private onDestroy$ = new Subject(); + constructor( private route: ActivatedRoute, private router: Router, @@ -81,11 +86,17 @@ export class ProcessesCloudDemoComponent implements OnInit { this.filterId = params.id; }); - this.cloudLayoutService.getCurrentSettings() - .subscribe((settings) => this.setCurrentSettings(settings)); + this.cloudLayoutService.settings$ + .pipe(takeUntil(this.onDestroy$)) + .subscribe(settings => this.setCurrentSettings(settings)); } - setCurrentSettings(settings) { + ngOnDestroy() { + this.onDestroy$.next(true); + this.onDestroy$.complete(); + } + + setCurrentSettings(settings: CloudServiceSettings) { if (settings) { this.multiselect = settings.multiselect; this.testingMode = settings.testingMode; @@ -94,7 +105,7 @@ export class ProcessesCloudDemoComponent implements OnInit { } } - onChangePageSize(event) { + onChangePageSize(event: Pagination) { this.userPreference.paginationSize = event.maxItems; } @@ -102,7 +113,7 @@ export class ProcessesCloudDemoComponent implements OnInit { this.selectedRows = []; } - onRowClick(processInstanceId) { + onRowClick(processInstanceId: string) { if (!this.multiselect && this.selectionMode !== 'multiple' && this.processDetailsRedirection) { this.router.navigate([`/cloud/${this.appName}/process-details/${processInstanceId}`]); } @@ -110,7 +121,12 @@ export class ProcessesCloudDemoComponent implements OnInit { onFilterChange(query: any) { this.editedFilter = Object.assign({}, query); - this.sortArray = [new ProcessListCloudSortingModel({ orderBy: this.editedFilter.sort, direction: this.editedFilter.order })]; + this.sortArray = [ + new ProcessListCloudSortingModel({ + orderBy: this.editedFilter.sort, + direction: this.editedFilter.order + }) + ]; } onProcessFilterAction(filterAction: any) { diff --git a/demo-shell/src/app/components/cloud/services/cloud-layout.service.ts b/demo-shell/src/app/components/cloud/services/cloud-layout.service.ts index 7bf710169c..d3041063d3 100644 --- a/demo-shell/src/app/components/cloud/services/cloud-layout.service.ts +++ b/demo-shell/src/app/components/cloud/services/cloud-layout.service.ts @@ -16,14 +16,28 @@ */ import { Injectable } from '@angular/core'; -import { Observable, BehaviorSubject } from 'rxjs'; +import { BehaviorSubject } from 'rxjs'; + +export interface CloudServiceSettings { + multiselect: boolean; + testingMode: boolean; + taskDetailsRedirection: boolean; + processDetailsRedirection: boolean; + selectionMode: string; +} + +export interface FilterSettings { + id?: string; + index?: number; + key?: string; +} @Injectable({ providedIn: 'root' }) export class CloudLayoutService { - private settings = { + private settings: CloudServiceSettings = { multiselect: false, testingMode: false, taskDetailsRedirection: true, @@ -31,40 +45,19 @@ export class CloudLayoutService { selectionMode: 'single' }; - private filterTaskSubject: BehaviorSubject = new BehaviorSubject({index: 0}); - private filterTask$: Observable; - private filterProcessSubject: BehaviorSubject = new BehaviorSubject({index: 0}); - private filterProcess$: Observable; - private settingsSubject: BehaviorSubject = new BehaviorSubject(this.settings); - private settings$: Observable; + taskFilter$ = new BehaviorSubject({index: 0}); + processFilter$ = new BehaviorSubject({index: 0}); + settings$ = new BehaviorSubject(this.settings); - constructor() { - this.filterTask$ = this.filterTaskSubject.asObservable(); - this.filterProcess$ = this.filterProcessSubject.asObservable(); - this.settings$ = this.settingsSubject.asObservable(); + setCurrentTaskFilterParam(param: FilterSettings) { + this.taskFilter$.next(param); } - getCurrentTaskFilterParam() { - return this.filterTask$; + setCurrentProcessFilterParam(param: FilterSettings) { + this.processFilter$.next(param); } - setCurrentTaskFilterParam(param) { - this.filterTaskSubject.next(param); - } - - getCurrentProcessFilterParam() { - return this.filterProcess$; - } - - setCurrentProcessFilterParam(param) { - this.filterProcessSubject.next(param); - } - - getCurrentSettings() { - return this.settings$; - } - - setCurrentSettings(param) { - this.settingsSubject.next(param); + setCurrentSettings(param: CloudServiceSettings) { + this.settings$.next(param); } } diff --git a/demo-shell/src/app/components/cloud/cloud-settings.component.html b/demo-shell/src/app/components/cloud/shared/cloud-settings.component.html similarity index 100% rename from demo-shell/src/app/components/cloud/cloud-settings.component.html rename to demo-shell/src/app/components/cloud/shared/cloud-settings.component.html diff --git a/demo-shell/src/app/components/cloud/cloud-settings.component.scss b/demo-shell/src/app/components/cloud/shared/cloud-settings.component.scss similarity index 100% rename from demo-shell/src/app/components/cloud/cloud-settings.component.scss rename to demo-shell/src/app/components/cloud/shared/cloud-settings.component.scss diff --git a/demo-shell/src/app/components/cloud/cloud-settings.component.ts b/demo-shell/src/app/components/cloud/shared/cloud-settings.component.ts similarity index 80% rename from demo-shell/src/app/components/cloud/cloud-settings.component.ts rename to demo-shell/src/app/components/cloud/shared/cloud-settings.component.ts index cdb7a31fb8..d21e308386 100644 --- a/demo-shell/src/app/components/cloud/cloud-settings.component.ts +++ b/demo-shell/src/app/components/cloud/shared/cloud-settings.component.ts @@ -15,15 +15,18 @@ * limitations under the License. */ -import { Component, OnInit } from '@angular/core'; -import { CloudLayoutService } from './services/cloud-layout.service'; +import { Component, OnInit, OnDestroy } from '@angular/core'; +import { CloudLayoutService } from '../services/cloud-layout.service'; +import { Subject } from 'rxjs'; +import { takeUntil } from 'rxjs/operators'; @Component({ selector: 'app-cloud-settings', templateUrl: './cloud-settings.component.html', styleUrls: ['./cloud-settings.component.scss'] }) -export class CloudSettingsComponent implements OnInit { +export class CloudSettingsComponent implements OnInit, OnDestroy { + private onDestroy$ = new Subject(); multiselect: boolean; selectionMode: string; @@ -40,8 +43,15 @@ export class CloudSettingsComponent implements OnInit { constructor(private cloudLayoutService: CloudLayoutService) { } ngOnInit() { - this.cloudLayoutService.getCurrentSettings() - .subscribe((settings) => this.setCurrentSettings(settings)); + this.cloudLayoutService + .settings$ + .pipe(takeUntil(this.onDestroy$)) + .subscribe(settings => this.setCurrentSettings(settings)); + } + + ngOnDestroy() { + this.onDestroy$.next(true); + this.onDestroy$.complete(); } setCurrentSettings(settings) { diff --git a/demo-shell/src/app/components/blob-preview/blob-preview.module.ts b/demo-shell/src/app/components/cloud/shared/cloud.shared.module.ts similarity index 53% rename from demo-shell/src/app/components/blob-preview/blob-preview.module.ts rename to demo-shell/src/app/components/cloud/shared/cloud.shared.module.ts index 9e056eac9c..a67fc6e948 100644 --- a/demo-shell/src/app/components/blob-preview/blob-preview.module.ts +++ b/demo-shell/src/app/components/cloud/shared/cloud.shared.module.ts @@ -16,34 +16,22 @@ */ import { NgModule } from '@angular/core'; -import { Routes, RouterModule } from '@angular/router'; import { CommonModule } from '@angular/common'; -import { CoreModule, InfoDrawerModule } from '@alfresco/adf-core'; -import { ContentDirectiveModule, ContentMetadataModule, VersionManagerModule } from '@alfresco/adf-content-services'; -import { BlobPreviewComponent } from './blob-preview.component'; - -const routes: Routes = [ - { - path: '', - component: BlobPreviewComponent - } -]; +import { CloudSettingsComponent } from './cloud-settings.component'; +import { MatDialogModule, MatInputModule, MatSelectModule, MatSlideToggleModule } from '@angular/material'; +import { CoreModule } from '@alfresco/adf-core'; @NgModule({ imports: [ CommonModule, - RouterModule.forChild(routes), CoreModule.forChild(), - InfoDrawerModule, - ContentDirectiveModule, - ContentMetadataModule, - VersionManagerModule + MatDialogModule, + MatInputModule, + MatSelectModule, + MatSlideToggleModule ], - declarations: [ - BlobPreviewComponent - ], - exports: [ - BlobPreviewComponent - ] + declarations: [ CloudSettingsComponent ], + exports: [ CommonModule, CloudSettingsComponent] }) -export class BlobPreviewModule {} + +export class AppCloudSharedModule {} diff --git a/demo-shell/src/app/components/cloud/task-details-cloud-demo.component.html b/demo-shell/src/app/components/cloud/task-details-cloud-demo.component.html index d1e7f8c7ec..c1a956acec 100644 --- a/demo-shell/src/app/components/cloud/task-details-cloud-demo.component.html +++ b/demo-shell/src/app/components/cloud/task-details-cloud-demo.component.html @@ -8,10 +8,12 @@ [taskId]="taskId" (cancelClick)="goBack()" (taskCompleted)="onTaskCompleted()" + (taskClaimed)="onTaskClaimed()" + (taskUnclaimed)="onTaskUnclaimed()" (formSaved)="onFormSaved()">