diff --git a/projects/aca-folder-rules/assets/i18n/en.json b/projects/aca-folder-rules/assets/i18n/en.json
index 2ce08d5eb..af73a207f 100644
--- a/projects/aca-folder-rules/assets/i18n/en.json
+++ b/projects/aca-folder-rules/assets/i18n/en.json
@@ -90,7 +90,8 @@
"RULES": "rules"
},
"ACTIONS": {
- "CREATE_RULE": "Create rule"
+ "CREATE_RULE": "Create rule",
+ "EDIT_RULE": "Edit"
}
},
"EMPTY_RULES_LIST": {
diff --git a/projects/aca-folder-rules/src/lib/manage-rules/manage-rules.smart-component.html b/projects/aca-folder-rules/src/lib/manage-rules/manage-rules.smart-component.html
index ef52ac195..e8baf52f7 100644
--- a/projects/aca-folder-rules/src/lib/manage-rules/manage-rules.smart-component.html
+++ b/projects/aca-folder-rules/src/lib/manage-rules/manage-rules.smart-component.html
@@ -25,7 +25,7 @@
class="aca-manage-rules__actions-bar__title__breadcrumb">
-
+
@@ -40,6 +40,9 @@
+
{{ selectedRule.description }}
diff --git a/projects/aca-folder-rules/src/lib/manage-rules/manage-rules.smart-component.ts b/projects/aca-folder-rules/src/lib/manage-rules/manage-rules.smart-component.ts
index 88c02df32..c990ab999 100644
--- a/projects/aca-folder-rules/src/lib/manage-rules/manage-rules.smart-component.ts
+++ b/projects/aca-folder-rules/src/lib/manage-rules/manage-rules.smart-component.ts
@@ -103,10 +103,13 @@ export class ManageRulesSmartComponent implements OnInit, OnDestroy {
this.selectedRule = rule;
}
- openNewRuleDialog() {
+ openCreateUpdateRuleDialog(model = {}) {
const dialogRef = this.matDialogService.open(EditRuleDialogSmartComponent, {
width: '90%',
- panelClass: 'aca-edit-rule-dialog-container'
+ panelClass: 'aca-edit-rule-dialog-container',
+ data: {
+ model
+ }
});
this.onSubmitRuleDialog(dialogRef);
@@ -115,7 +118,11 @@ export class ManageRulesSmartComponent implements OnInit, OnDestroy {
onSubmitRuleDialog(dialogRef) {
dialogRef.componentInstance.submitted.subscribe(async (rule) => {
try {
- await this.folderRulesService.createRule(this.nodeId, rule);
+ if (rule.id) {
+ await this.folderRulesService.updateRule(this.nodeId, rule.id, rule);
+ } else {
+ await this.folderRulesService.createRule(this.nodeId, rule);
+ }
this.folderRulesService.loadRules(this.nodeId);
dialogRef.close();
} catch (error) {
@@ -140,4 +147,8 @@ export class ManageRulesSmartComponent implements OnInit, OnDestroy {
}
});
}
+
+ onRuleUpdate(): void {
+ this.openCreateUpdateRuleDialog(this.selectedRule);
+ }
}
diff --git a/projects/aca-folder-rules/src/lib/rule-details/edit-rule-dialog.smart-component.ts b/projects/aca-folder-rules/src/lib/rule-details/edit-rule-dialog.smart-component.ts
index 9fb69a8d4..1d2301a0d 100644
--- a/projects/aca-folder-rules/src/lib/rule-details/edit-rule-dialog.smart-component.ts
+++ b/projects/aca-folder-rules/src/lib/rule-details/edit-rule-dialog.smart-component.ts
@@ -47,12 +47,12 @@ export class EditRuleDialogSmartComponent implements OnInit {
actionDefinitions$ = this.actionsService.actionDefinitionsListing$;
loading$ = this.actionsService.loading$;
- constructor(@Inject(MAT_DIALOG_DATA) public options: EditRuleDialogOptions, private actionsService: ActionsService) {
- this.model = this.options?.model || {};
+ constructor(@Inject(MAT_DIALOG_DATA) public data: EditRuleDialogOptions, private actionsService: ActionsService) {
+ this.model = this.data?.model || {};
}
get isUpdateMode(): boolean {
- return !!this.options?.model?.id;
+ return !!this.data?.model?.id;
}
get title(): string {
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 c51c4a063..582d3b1b6 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
@@ -25,11 +25,10 @@
{{ 'ACA_FOLDER_RULES.RULE_DETAILS.OPTIONS.DISABLE_RULE' | 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 94b7ae8e6..f5508905f 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
@@ -62,6 +62,7 @@ export class RuleDetailsUiComponent implements OnInit, OnDestroy {
}
set value(newValue: Partial) {
newValue = {
+ id: newValue.id || FolderRulesService.emptyRule.id,
name: newValue.name || FolderRulesService.emptyRule.name,
description: newValue.description || FolderRulesService.emptyRule.description,
triggers: newValue.triggers || FolderRulesService.emptyRule.triggers,
@@ -69,7 +70,7 @@ export class RuleDetailsUiComponent implements OnInit, OnDestroy {
isAsynchronous: newValue.isAsynchronous || FolderRulesService.emptyRule.isAsynchronous,
errorScript: newValue.errorScript || FolderRulesService.emptyRule.errorScript,
isInheritable: newValue.isInheritable || FolderRulesService.emptyRule.isInheritable,
- isEnabled: newValue.isEnabled || FolderRulesService.emptyRule.isEnabled,
+ isEnabled: typeof newValue.isInheritable == 'boolean' ? newValue.isEnabled : FolderRulesService.emptyRule.isEnabled,
actions: newValue.actions || FolderRulesService.emptyRule.actions
};
if (this.form) {
@@ -118,6 +119,7 @@ export class RuleDetailsUiComponent implements OnInit, OnDestroy {
ngOnInit() {
this.form = new UntypedFormGroup({
+ id: new UntypedFormControl(this.value.id),
name: new UntypedFormControl(this.value.name || '', Validators.required),
description: new UntypedFormControl(this.value.description || ''),
triggers: new UntypedFormControl(this.value.triggers || ['inbound'], Validators.required),
diff --git a/projects/aca-folder-rules/src/lib/services/folder-rules.service.spec.ts b/projects/aca-folder-rules/src/lib/services/folder-rules.service.spec.ts
index fa99c3f79..7c3c3d381 100644
--- a/projects/aca-folder-rules/src/lib/services/folder-rules.service.spec.ts
+++ b/projects/aca-folder-rules/src/lib/services/folder-rules.service.spec.ts
@@ -151,4 +151,13 @@ describe('FolderRulesService', () => {
expect(result).toEqual(dummyRules[0]);
});
});
+
+ it('should send correct PUT request to update rule and return it', async () => {
+ spyOn(folderRulesService, 'apiCall')
+ .withArgs(`/nodes/${nodeId}/rule-sets/${ruleSetId}/rules/${ruleId}`, 'PUT', paramsWithBody)
+ .and.returnValue(Promise.resolve(dummyRules[0]));
+
+ const result = await folderRulesService.updateRule(nodeId, ruleId, dummyRules[0]);
+ expect(result).toEqual(dummyRules[0]);
+ });
});
diff --git a/projects/aca-folder-rules/src/lib/services/folder-rules.service.ts b/projects/aca-folder-rules/src/lib/services/folder-rules.service.ts
index 9b61b90a8..7c2f368e7 100644
--- a/projects/aca-folder-rules/src/lib/services/folder-rules.service.ts
+++ b/projects/aca-folder-rules/src/lib/services/folder-rules.service.ts
@@ -118,7 +118,19 @@ export class FolderRulesService {
{},
{},
{},
- { ...this.addFakeAction(rule) },
+ { ...rule },
+ ['application/json'],
+ ['application/json']
+ ]);
+ }
+
+ updateRule(nodeId: string, ruleId: string, rule: Rule, ruleSetId: string = '-default-') {
+ return this.apiCall(`/nodes/${nodeId}/rule-sets/${ruleSetId}/rules/${ruleId}`, 'PUT', [
+ {},
+ {},
+ {},
+ {},
+ { ...rule },
['application/json'],
['application/json']
]);
@@ -169,24 +181,6 @@ export class FolderRulesService {
});
}
- private addFakeAction(rule): Partial {
- if (rule.actions) {
- return rule;
- } else {
- return {
- ...rule,
- actions: [
- {
- actionDefinitionId: 'add-features',
- params: {
- 'aspect-name': 'ai:creativeWorks'
- }
- }
- ]
- };
- }
- }
-
private apiCall(path: string, httpMethod: string, params?: any[]): Promise {
return this.apiService.getInstance().contentClient.callApi(path, httpMethod, ...params);
}