[ACS-6150] Folder rules - add category selector for link category action (#3701)

* [ACS-6150] folder rules - add category selector for link category action

* [ACS-6150] unit tests
This commit is contained in:
Mykyta Maliarchuk
2024-03-21 12:31:16 +01:00
committed by GitHub
parent 76f83da505
commit 965f68c0ac
2 changed files with 58 additions and 3 deletions

View File

@@ -30,6 +30,7 @@ import { By } from '@angular/platform-browser';
import { dummyCategoriesConstraints, dummyConstraints, dummyTagsConstraints } from '../../mock/action-parameter-constraints.mock';
import { CategoryService, TagService } from '@alfresco/adf-content-services';
import { MatSelect } from '@angular/material/select';
import { MatDialog } from '@angular/material/dialog';
describe('RuleActionUiComponent', () => {
let fixture: ComponentFixture<RuleActionUiComponent>;
@@ -124,11 +125,25 @@ describe('RuleActionUiComponent', () => {
const cardView = getPropertiesCardView();
expect(cardView.properties.length).toBe(1);
expect(cardView.properties[0].icon).toBeFalsy();
expect(cardView.properties[0].icon).toBe('library_add');
expect(cardView.properties[0].value).toBeFalsy();
expect(cardView.properties[0]).toBeInstanceOf(CardViewTextItemModel);
});
it('should open category selector dialog on category-value action parameter clicked', () => {
const dialog = fixture.debugElement.injector.get(MatDialog);
component.actionDefinitions = [actionLinkToCategoryTransformedMock];
component.parameterConstraints = dummyConstraints;
spyOn(dialog, 'open');
fixture.detectChanges();
changeMatSelectValue('mock-action-3-definition');
fixture.debugElement.query(By.css('.adf-textitem-action')).nativeElement.click();
expect(dialog.open).toHaveBeenCalledTimes(1);
expect(dialog.open['calls'].argsFor(0)[0].name).toBe('CategorySelectorDialogComponent');
});
describe('Select options', () => {
beforeEach(() => {
component.actionDefinitions = actionsTransformedListMock;

View File

@@ -35,7 +35,7 @@ import {
CardViewUpdateService,
UpdateNotification
} from '@alfresco/adf-core';
import { ActionParameterDefinition, Node } from '@alfresco/js-api';
import { ActionParameterDefinition, Category, Node } from '@alfresco/js-api';
import { of, Subject } from 'rxjs';
import { map, takeUntil } from 'rxjs/operators';
import { ActionParameterConstraint, ConstraintValue } from '../../model/action-parameter-constraint.model';
@@ -44,7 +44,9 @@ import {
ContentNodeSelectorComponent,
ContentNodeSelectorComponentData,
NodeAction,
TagService
TagService,
CategorySelectorDialogComponent,
CategorySelectorDialogOptions
} from '@alfresco/adf-content-services';
import { MatDialog } from '@angular/material/dialog';
import { TranslateModule, TranslateService } from '@ngx-translate/core';
@@ -220,6 +222,15 @@ export class RuleActionUiComponent implements ControlValueAccessor, OnInit, OnCh
clickCallBack: this.openSelectorDialog.bind(this, paramDef.name),
value: this.parameters[paramDef.name]
});
} else if (paramDef.name === 'category-value' && !this.readOnly) {
return new CardViewTextItemModel({
...cardViewPropertiesModel,
icon: 'library_add',
default: '',
clickable: true,
clickCallBack: this.openCatDialog.bind(this, paramDef.name),
value: this.parameters[paramDef.name]
});
}
// falls through
default:
@@ -288,6 +299,35 @@ export class RuleActionUiComponent implements ControlValueAccessor, OnInit, OnCh
);
}
private openCatDialog(paramDefName) {
const data: CategorySelectorDialogOptions = {
select: new Subject<Category[]>(),
multiSelect: false
};
this.dialog.open(CategorySelectorDialogComponent, {
data,
width: '630px'
});
data.select.pipe(takeUntil(this.onDestroy$)).subscribe((selections: Category[]) => {
if (selections[0].id) {
this.writeValue({
actionDefinitionId: this.selectedActionDefinitionId,
params: {
...this.parameters,
[paramDefName]: selections[0].id
}
});
this.onChange({
actionDefinitionId: this.selectedActionDefinitionId,
params: this.parameters
});
this.onTouch();
}
});
}
setDefaultParameters() {
this.parameters = {};
(this.selectedActionDefinition?.parameterDefinitions ?? []).forEach((paramDef: ActionParameterDefinition) => {