diff --git a/projects/aca-folder-rules/src/lib/mock/actions.mock.ts b/projects/aca-folder-rules/src/lib/mock/actions.mock.ts index 63d3584f6..b9e388539 100644 --- a/projects/aca-folder-rules/src/lib/mock/actions.mock.ts +++ b/projects/aca-folder-rules/src/lib/mock/actions.mock.ts @@ -24,6 +24,7 @@ */ import { ActionDefinitionTransformed, ActionParameterDefinitionTransformed, RuleAction } from '../model/rule-action.model'; +import { ActionParameterConstraint } from '../model/action-parameter-constraint.model'; export const actionDefListMock = { list: { @@ -187,3 +188,17 @@ export const validActionsMock: RuleAction[] = [ params: {} } ]; + +export const errorScriptConstraintMock: ActionParameterConstraint = { + name: 'script-ref', + constraints: [ + { + value: 'script-1-value', + label: 'Script 1' + }, + { + value: 'script-2-value', + label: 'Script 2' + } + ] +}; diff --git a/projects/aca-folder-rules/src/lib/rule-details/options/rule-options.ui-component.html b/projects/aca-folder-rules/src/lib/rule-details/options/rule-options.ui-component.html index 10d961170..2c7baad1b 100644 --- a/projects/aca-folder-rules/src/lib/rule-details/options/rule-options.ui-component.html +++ b/projects/aca-folder-rules/src/lib/rule-details/options/rule-options.ui-component.html @@ -7,12 +7,21 @@ {{ 'ACA_FOLDER_RULES.RULE_DETAILS.OPTIONS.IS_ASYNCHRONOUS' | translate }} - + + {{ 'ACA_FOLDER_RULES.RULE_DETAILS.OPTIONS.NO_SCRIPT' | translate }} + + + + {{ option.label }} + + + diff --git a/projects/aca-folder-rules/src/lib/rule-details/options/rule-options.ui-component.scss b/projects/aca-folder-rules/src/lib/rule-details/options/rule-options.ui-component.scss index 34a18c083..5894debb0 100644 --- a/projects/aca-folder-rules/src/lib/rule-details/options/rule-options.ui-component.scss +++ b/projects/aca-folder-rules/src/lib/rule-details/options/rule-options.ui-component.scss @@ -11,4 +11,8 @@ &.read-only .mat-checkbox-inner-container { display: none; } + + .hide-error-script-dropdown { + opacity: 0; + } } diff --git a/projects/aca-folder-rules/src/lib/rule-details/options/rule-options.ui-component.spec.ts b/projects/aca-folder-rules/src/lib/rule-details/options/rule-options.ui-component.spec.ts index 51c4caa6a..16072761e 100644 --- a/projects/aca-folder-rules/src/lib/rule-details/options/rule-options.ui-component.spec.ts +++ b/projects/aca-folder-rules/src/lib/rule-details/options/rule-options.ui-component.spec.ts @@ -29,6 +29,7 @@ import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { RuleOptionsUiComponent } from './rule-options.ui-component'; import { CoreTestingModule } from '@alfresco/adf-core'; import { By } from '@angular/platform-browser'; +import { errorScriptConstraintMock } from '../../mock/actions.mock'; describe('RuleOptionsUiComponent', () => { let fixture: ComponentFixture; @@ -112,4 +113,24 @@ describe('RuleOptionsUiComponent', () => { expect(getByDataAutomationId('rule-option-checkbox-enabled')).toBeFalsy(); expect(getByDataAutomationId('rule-option-select-errorScript')).toBeTruthy(); }); + + it('should populate the error script dropdown with scripts', () => { + component.writeValue({ + isEnabled: true, + isInheritable: false, + isAsynchronous: true, + errorScript: '' + }); + component.errorScriptConstraint = errorScriptConstraintMock; + fixture.detectChanges(); + + (getByDataAutomationId('rule-option-select-errorScript').nativeElement as HTMLElement).click(); + fixture.detectChanges(); + + const matOptions = fixture.debugElement.queryAll(By.css(`.mat-option`)); + expect(matOptions.length).toBe(3); + expect((matOptions[0].nativeElement as HTMLElement).innerText.trim()).toBe('ACA_FOLDER_RULES.RULE_DETAILS.OPTIONS.NO_SCRIPT'); + expect((matOptions[1].nativeElement as HTMLElement).innerText.trim()).toBe('Script 1'); + expect((matOptions[2].nativeElement as HTMLElement).innerText.trim()).toBe('Script 2'); + }); }); diff --git a/projects/aca-folder-rules/src/lib/rule-details/options/rule-options.ui-component.ts b/projects/aca-folder-rules/src/lib/rule-details/options/rule-options.ui-component.ts index 8376acb3f..28ef1ab71 100644 --- a/projects/aca-folder-rules/src/lib/rule-details/options/rule-options.ui-component.ts +++ b/projects/aca-folder-rules/src/lib/rule-details/options/rule-options.ui-component.ts @@ -23,10 +23,11 @@ * along with Alfresco. If not, see . */ -import { Component, forwardRef, HostBinding, OnDestroy, ViewEncapsulation } from '@angular/core'; +import { Component, forwardRef, HostBinding, Input, OnDestroy, ViewEncapsulation } from '@angular/core'; import { AbstractControl, ControlValueAccessor, FormControl, FormGroup, NG_VALUE_ACCESSOR } from '@angular/forms'; import { MatCheckboxChange } from '@angular/material/checkbox'; import { RuleOptions } from '../../model/rule.model'; +import { ActionParameterConstraint, ConstraintValue } from '../../model/action-parameter-constraint.model'; @Component({ selector: 'aca-rule-options', @@ -60,6 +61,11 @@ export class RuleOptionsUiComponent implements ControlValueAccessor, OnDestroy { this.onTouch(); }); + hideErrorScriptDropdown = true; + + @Input() + errorScriptConstraint: ActionParameterConstraint; + @HostBinding('class.read-only') readOnly = false; @@ -73,6 +79,10 @@ export class RuleOptionsUiComponent implements ControlValueAccessor, OnDestroy { return this.form.get('isInheritable').value; } + get errorScriptOptions(): ConstraintValue[] { + return this.errorScriptConstraint?.constraints ?? []; + } + writeValue(options: RuleOptions) { const isAsynchronousFormControl = this.form.get('isAsynchronous'); const errorScriptFormControl = this.form.get('errorScript'); @@ -81,8 +91,10 @@ export class RuleOptionsUiComponent implements ControlValueAccessor, OnDestroy { this.form.get('isAsynchronous').setValue(options.isAsynchronous); errorScriptFormControl.setValue(options.errorScript ?? ''); if (isAsynchronousFormControl.value) { + this.hideErrorScriptDropdown = false; errorScriptFormControl.enable(); } else { + this.hideErrorScriptDropdown = true; errorScriptFormControl.disable(); } } @@ -112,8 +124,10 @@ export class RuleOptionsUiComponent implements ControlValueAccessor, OnDestroy { toggleErrorScriptDropdown(value: MatCheckboxChange) { const formControl: AbstractControl = this.form.get('errorScript'); if (value.checked) { + this.hideErrorScriptDropdown = false; formControl.enable(); } else { + this.hideErrorScriptDropdown = true; formControl.disable(); } } diff --git a/projects/aca-folder-rules/src/lib/rule-details/rule-details.ui-component.html b/projects/aca-folder-rules/src/lib/rule-details/rule-details.ui-component.html index 61176a08c..5b98554d7 100644 --- a/projects/aca-folder-rules/src/lib/rule-details/rule-details.ui-component.html +++ b/projects/aca-folder-rules/src/lib/rule-details/rule-details.ui-component.html @@ -54,7 +54,11 @@
{{ 'ACA_FOLDER_RULES.RULE_DETAILS.LABEL.OPTIONS' | translate }}
- + +
diff --git a/projects/aca-folder-rules/src/lib/rule-details/rule-details.ui-component.ts b/projects/aca-folder-rules/src/lib/rule-details/rule-details.ui-component.ts index 8bf23d112..f11779b84 100644 --- a/projects/aca-folder-rules/src/lib/rule-details/rule-details.ui-component.ts +++ b/projects/aca-folder-rules/src/lib/rule-details/rule-details.ui-component.ts @@ -125,6 +125,10 @@ export class RuleDetailsUiComponent implements OnInit, OnDestroy { return !this.readOnly || this.value.isAsynchronous || this.value.isInheritable; } + get errorScriptConstraint(): ActionParameterConstraint { + return this.parameterConstraints.find((parameterConstraint: ActionParameterConstraint) => parameterConstraint.name === 'script-ref'); + } + ngOnInit() { this.form = new UntypedFormGroup({ id: new UntypedFormControl(this.value.id),