From c642d0e5c250a16fdc571ff2723d5e14c2460224 Mon Sep 17 00:00:00 2001 From: Mykyta Maliarchuk <84377976+nikita-web-ua@users.noreply.github.com> Date: Wed, 20 Mar 2024 08:56:01 +0100 Subject: [PATCH] [ACS-6150] Add category selector dialog (#9423) * [ACS-6150] add category selector dialog * [ACS-6150] fix import * [ACS-6150] cr fix * [ACS-6150] cr fix * [ACS-6150] change describe name * [ACS-6150] linting * [ACS-6150] style fix * [ACS-6150] align styles --- .../categories-management.component.md | 2 + .../dialogs/category-selector.dialog.md | 58 +++++++++++ .../images/adf-category-selector-dialog.png | Bin 0 -> 58171 bytes docs/versionIndex.md | 9 ++ .../categories-management.component.html | 2 +- .../categories-management.component.scss | 2 + .../categories-management.component.spec.ts | 8 ++ .../categories-management.component.ts | 20 ++-- .../lib/dialogs/category-selector.dialog.html | 28 +++++ .../lib/dialogs/category-selector.dialog.scss | 5 + .../dialogs/category-selector.dialog.spec.ts | 98 ++++++++++++++++++ .../lib/dialogs/category-selector.dialog.ts | 54 ++++++++++ .../src/lib/dialogs/dialog.module.ts | 11 +- .../src/lib/dialogs/public-api.ts | 1 + .../tags-creator/tags-creator.component.scss | 2 + 15 files changed, 289 insertions(+), 11 deletions(-) create mode 100644 docs/content-services/dialogs/category-selector.dialog.md create mode 100644 docs/docassets/images/adf-category-selector-dialog.png create mode 100644 lib/content-services/src/lib/dialogs/category-selector.dialog.html create mode 100644 lib/content-services/src/lib/dialogs/category-selector.dialog.scss create mode 100644 lib/content-services/src/lib/dialogs/category-selector.dialog.spec.ts create mode 100644 lib/content-services/src/lib/dialogs/category-selector.dialog.ts diff --git a/docs/content-services/components/categories-management.component.md b/docs/content-services/components/categories-management.component.md index dc2f8c985b..c5e8417235 100644 --- a/docs/content-services/components/categories-management.component.md +++ b/docs/content-services/components/categories-management.component.md @@ -19,6 +19,7 @@ Component allows to both assign/unassign categories to content and create multip [parentId]="parentId" [managementMode]="categoriesManagementMode" [classifiableChanged]="classifiableChanged" + [multiSelect]="multiSelect" (categoriesChange)="storeCategoriesToAssign($event)"> ``` @@ -35,6 +36,7 @@ Component allows to both assign/unassign categories to content and create multip | disableRemoval | `boolean` | false | Determines if categories assigned/created can be unassigned/removed from the list. | | managementMode | `CategoriesManagementMode` | | Management mode determines if component works in assign/unassign mode or create mode. | | parentId | `string` | | (optional) ID of a parent category that new categories will be created under. | +| multiSelect | `boolean` | true | (optional) Toggles multiselect mode. | ### Events diff --git a/docs/content-services/dialogs/category-selector.dialog.md b/docs/content-services/dialogs/category-selector.dialog.md new file mode 100644 index 0000000000..10f02f7a62 --- /dev/null +++ b/docs/content-services/dialogs/category-selector.dialog.md @@ -0,0 +1,58 @@ +--- +Title: Category selector dialog component +Added: v6.8.0 +Status: Active +Last reviewed: 2024-03-12 +--- + +# [Category selector dialog component](../../../lib/content-services/src/lib/dialogs/category-selector.dialog.ts "Defined in category-selector.dialog.ts") + +Allows the user to select one or multiple categories. + +![Category selector dialog component](../../docassets/images/adf-category-selector-dialog.png) + +## Dialog inputs + +| Name | Type | Default value | Description | +| ---- |-----------| ------------- | ----------- | +| select | [`Subject`](https://github.com/Alfresco/alfresco-ng2-components/blob/develop/lib/js-api/src/api/content-rest-api/docs/CategoriesApi.md) | | Emits an array of selected categories when the dialog closes | +| multiSelect | `boolean` | `true` | (optional) Toggles multiselect mode | + +## Basic Usage + +```ts +constructor(private dialog: MatDialog) {} + +... + +function openCatDialog() { + const data: CategorySelectorDialogOptions = { + select: new Subject(), + multiSelect: false + }; + + this.dialog.open(CategorySelectorDialogComponent, { + data, + width: '400px' + }); + + data.select.subscribe( + (selections: Category[]) => { + ... + } + ); +} +``` +All the results will be streamed to the select [subject](http://reactivex.io/rxjs/manual/overview.html#subject) present in the `CategorySelectorDialogOptions` object passed to the dialog. +When the category is selected by clicking the `Select` button, the `options.select` stream will be completed. + +## Details + +This component lets the user select categories. Use the +Angular [`MatDialog`](https://material.angular.io/components/dialog/overview) +service to open the dialog, as shown in the example, and pass a `options` object +with properties. + +## See also + +- [Categories management component](../components/categories-management.component.md) diff --git a/docs/docassets/images/adf-category-selector-dialog.png b/docs/docassets/images/adf-category-selector-dialog.png new file mode 100644 index 0000000000000000000000000000000000000000..8630e6c31a0f214d9952e17eb74bf0eab9c0d0bf GIT binary patch literal 58171 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�mZF$*n7b$=;2Eq-{heqn;dkHe<=@W^QI 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 literal 0 HcmV?d00001 diff --git a/docs/versionIndex.md b/docs/versionIndex.md index a37899d01e..b294bf6846 100644 --- a/docs/versionIndex.md +++ b/docs/versionIndex.md @@ -12,6 +12,7 @@ backend services have been tested with each released version of ADF. ## Versions +- [v6.8.0](#v680) - [v6.7.0](#v670) - [v6.4.0](#v640) - [v6.2.0](#v620) @@ -45,6 +46,14 @@ backend services have been tested with each released version of ADF. - [v2.1.0](#v210) - [v2.0.0](#v200) +## v6.8.0 + + + +- [Category selector dialog component](content-services/dialogs/category-selector.dialog.md) + + + ## v6.7.0 diff --git a/lib/content-services/src/lib/category/categories-management/categories-management.component.html b/lib/content-services/src/lib/category/categories-management/categories-management.component.html index b7ae49cb2c..a58a5feeec 100644 --- a/lib/content-services/src/lib/category/categories-management/categories-management.component.html +++ b/lib/content-services/src/lib/category/categories-management/categories-management.component.html @@ -44,7 +44,7 @@ {{ existingCategoriesMsg | translate }}

{ discardPeriodicTasks(); flush(); })); + + it ('should disable existing categories list if category already selected and multiSelect is false', fakeAsync(() => { + component.multiSelect = false; + fixture.detectChanges(); + typeCategory('test'); + + expect(getSelectionList().disabled).toBeTrue(); + })); }); describe('CRUD mode', () => { diff --git a/lib/content-services/src/lib/category/categories-management/categories-management.component.ts b/lib/content-services/src/lib/category/categories-management/categories-management.component.ts index 26af4900c5..7b1bef58fb 100644 --- a/lib/content-services/src/lib/category/categories-management/categories-management.component.ts +++ b/lib/content-services/src/lib/category/categories-management/categories-management.component.ts @@ -116,6 +116,10 @@ export class CategoriesManagementComponent implements OnInit, OnDestroy { @Input() parentId: string; + /** Toggles multiselect mode */ + @Input() + multiSelect = true; + /** Emits when state of upper categories list changes */ @Output() categoriesChange = new EventEmitter(); @@ -159,13 +163,15 @@ export class CategoriesManagementComponent implements OnInit, OnDestroy { if (!this.isCRUDMode) { this._categoryNameControl.removeValidators(Validators.required); this.categories.forEach((category) => this.initialCategories.push(category)); - this.classifiableChanged - .pipe(takeUntil(this.onDestroy$)) - .subscribe(() => { - this.categories = []; - this.categoryNameControlVisible = false; - this.categoryNameControlVisibleChange.emit(false); - }); + if (this.classifiableChanged) { + this.classifiableChanged + .pipe(takeUntil(this.onDestroy$)) + .subscribe(() => { + this.categories = []; + this.categoryNameControlVisible = false; + this.categoryNameControlVisibleChange.emit(false); + }); + } } } diff --git a/lib/content-services/src/lib/dialogs/category-selector.dialog.html b/lib/content-services/src/lib/dialogs/category-selector.dialog.html new file mode 100644 index 0000000000..4fed9bfc98 --- /dev/null +++ b/lib/content-services/src/lib/dialogs/category-selector.dialog.html @@ -0,0 +1,28 @@ +

+ {{ 'CATEGORIES_MANAGEMENT.SELECT_EXISTING_CATEGORY' | translate }} +

+ + + + + + + + + diff --git a/lib/content-services/src/lib/dialogs/category-selector.dialog.scss b/lib/content-services/src/lib/dialogs/category-selector.dialog.scss new file mode 100644 index 0000000000..e5f986a5fd --- /dev/null +++ b/lib/content-services/src/lib/dialogs/category-selector.dialog.scss @@ -0,0 +1,5 @@ +adf-category-selector-dialog { + .adf-dialog-content { + height: 400px; + } +} diff --git a/lib/content-services/src/lib/dialogs/category-selector.dialog.spec.ts b/lib/content-services/src/lib/dialogs/category-selector.dialog.spec.ts new file mode 100644 index 0000000000..a252387292 --- /dev/null +++ b/lib/content-services/src/lib/dialogs/category-selector.dialog.spec.ts @@ -0,0 +1,98 @@ +/*! + * @license + * Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved. + * + * 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 { ComponentFixture, TestBed } from '@angular/core/testing'; +import { CategorySelectorDialogComponent, CategorySelectorDialogOptions } from './category-selector.dialog'; +import { Subject } from 'rxjs'; +import { Category } from '@alfresco/js-api'; +import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; +import { CoreTestingModule } from '@alfresco/adf-core'; +import { By } from '@angular/platform-browser'; + +describe('Category selector dialog component', () => { + let fixture: ComponentFixture; + let component: CategorySelectorDialogComponent; + let selectButton: HTMLButtonElement; + + const dialogRef = { + close: jasmine.createSpy('close') + }; + + const options: CategorySelectorDialogOptions = { + select: new Subject() + }; + + const categories: Category[] = [{id: 'id1', name: 'cat1'}, {id: 'id2', name: 'cat3'}]; + + const setCategories = () => { + component.categories = categories; + fixture.detectChanges(); + }; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [CoreTestingModule], + providers: [ + { provide: MatDialogRef, useValue: dialogRef }, + { provide: MAT_DIALOG_DATA, useValue: options } + ] + }); + dialogRef.close.calls.reset(); + fixture = TestBed.createComponent(CategorySelectorDialogComponent); + component = fixture.componentInstance; + + fixture.detectChanges(); + + selectButton = fixture.debugElement.query(By.css(`[data-automation-id="category-selector-dialog-select-button"]`)).nativeElement; + }); + + it('should set params if they are provided as dialog options', () => { + options.multiSelect = true; + component.ngOnInit(); + + expect(component.multiSelect).toBeTrue(); + }); + + it('should close dialog on cancel button click', () => { + fixture.debugElement.query(By.css(`[data-automation-id="category-selector-dialog-cancel-button"]`)).nativeElement.click(); + expect(dialogRef.close).toHaveBeenCalled(); + }); + + it('should close dialog if category is selected and Select button was clicked', () => { + selectButton.click(); + expect(dialogRef.close).not.toHaveBeenCalled(); + + setCategories(); + selectButton.click(); + + expect(dialogRef.close).toHaveBeenCalled(); + }); + + it('should provide selected categories as observable on Select click', () => { + spyOn(options.select, 'next'); + setCategories(); + selectButton.click(); + + expect(options.select.next).toHaveBeenCalledWith(categories); + }); + + it('should disable select button if no categories were selected', () => { + expect(selectButton.disabled).toBeTruthy(); + setCategories(); + expect(selectButton.disabled).toBeFalse(); + }); +}); diff --git a/lib/content-services/src/lib/dialogs/category-selector.dialog.ts b/lib/content-services/src/lib/dialogs/category-selector.dialog.ts new file mode 100644 index 0000000000..4c9f5e6a4e --- /dev/null +++ b/lib/content-services/src/lib/dialogs/category-selector.dialog.ts @@ -0,0 +1,54 @@ +/*! + * @license + * Copyright © 2005-2023 Hyland Software, Inc. and its affiliates. All rights reserved. + * + * 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 { Component, Inject, OnInit, ViewEncapsulation } from '@angular/core'; +import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; +import { Subject } from 'rxjs'; +import { Category } from '@alfresco/js-api'; +import { CategoriesManagementMode } from '../category'; + +export interface CategorySelectorDialogOptions { + select: Subject; + multiSelect?: boolean; +} + +@Component({ + selector: 'adf-category-selector-dialog', + templateUrl: './category-selector.dialog.html', + styleUrls: ['./category-selector.dialog.scss'], + encapsulation: ViewEncapsulation.None +}) +export class CategorySelectorDialogComponent implements OnInit { + categories: Category[] = []; + categoriesManagementMode = CategoriesManagementMode.ASSIGN; + multiSelect = true; + + constructor( + private dialog: MatDialogRef, + @Inject(MAT_DIALOG_DATA) private options: CategorySelectorDialogOptions + ) { + } + + ngOnInit() { + this.multiSelect = this.options.multiSelect ?? true; + } + + selectCategories() { + this.options.select.next(this.categories); + this.dialog.close(true); + } +} diff --git a/lib/content-services/src/lib/dialogs/dialog.module.ts b/lib/content-services/src/lib/dialogs/dialog.module.ts index 51495a8fff..904eb704f6 100644 --- a/lib/content-services/src/lib/dialogs/dialog.module.ts +++ b/lib/content-services/src/lib/dialogs/dialog.module.ts @@ -28,6 +28,8 @@ import { MatDatetimepickerModule } from '@mat-datetimepicker/core'; import { LibraryDialogComponent } from './library/library.dialog'; import { ContentDirectiveModule } from '../directives'; import { DownloadZipDialogModule } from './download-zip/download-zip.dialog.module'; +import { CategorySelectorDialogComponent } from './category-selector.dialog'; +import { CategoriesModule } from '../category'; @NgModule({ imports: [ @@ -38,19 +40,22 @@ import { DownloadZipDialogModule } from './download-zip/download-zip.dialog.modu ReactiveFormsModule, MatDatetimepickerModule, ContentDirectiveModule, - DownloadZipDialogModule + DownloadZipDialogModule, + CategoriesModule ], declarations: [ FolderDialogComponent, NodeLockDialogComponent, ConfirmDialogComponent, - LibraryDialogComponent + LibraryDialogComponent, + CategorySelectorDialogComponent ], exports: [ FolderDialogComponent, NodeLockDialogComponent, ConfirmDialogComponent, - LibraryDialogComponent + LibraryDialogComponent, + CategorySelectorDialogComponent ] }) export class DialogModule {} diff --git a/lib/content-services/src/lib/dialogs/public-api.ts b/lib/content-services/src/lib/dialogs/public-api.ts index 2e3414ab0a..23a1a87fd5 100644 --- a/lib/content-services/src/lib/dialogs/public-api.ts +++ b/lib/content-services/src/lib/dialogs/public-api.ts @@ -18,6 +18,7 @@ export * from './folder.dialog'; export * from './node-lock.dialog'; export * from './confirm.dialog'; +export * from './category-selector.dialog'; export * from './dialog.module'; export * from './library/library.dialog'; diff --git a/lib/content-services/src/lib/tag/tags-creator/tags-creator.component.scss b/lib/content-services/src/lib/tag/tags-creator/tags-creator.component.scss index 724a9b5aa8..741f236b1e 100644 --- a/lib/content-services/src/lib/tag/tags-creator/tags-creator.component.scss +++ b/lib/content-services/src/lib/tag/tags-creator/tags-creator.component.scss @@ -93,6 +93,8 @@ adf-tags-creator { font-size: 14px; height: auto; width: unset; + background-color: inherit; + color: inherit; &:hover { cursor: pointer;