From 3b9eae677cae0f41c858549e7af46da55a8b284d Mon Sep 17 00:00:00 2001 From: Nikita Maliarchuk <84377976+nikita-web-ua@users.noreply.github.com> Date: Fri, 16 Sep 2022 11:14:32 +0200 Subject: [PATCH] [ACS-3512] - ACA enable/disable rule from listing (#2636) * initial html layout * toggleRule method * [ACS-3512] - ACA enable/disable rule from listing * useless crutch was deleted --- .../manage-rules.smart-component.html | 3 ++- .../rule/rule-list-item.ui-component.html | 6 +++-- .../rule/rule-list-item.ui-component.scss | 23 +++++++++++++------ .../rule/rule-list-item.ui-component.spec.ts | 4 ++++ .../rule/rule-list-item.ui-component.ts | 8 +++++++ .../rules-list/rules-list.ui-component.html | 3 ++- .../rules-list.ui-component.spec.ts | 4 +++- .../lib/rules-list/rules-list.ui-component.ts | 3 +++ .../lib/services/folder-rules.service.spec.ts | 16 +++++++++++++ .../src/lib/services/folder-rules.service.ts | 14 +++++++++++ 10 files changed, 72 insertions(+), 12 deletions(-) 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 4bb3c3bdd..ad9866c39 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 @@ -30,7 +30,8 @@
- +
diff --git a/projects/aca-folder-rules/src/lib/rules-list/rule/rule-list-item.ui-component.html b/projects/aca-folder-rules/src/lib/rules-list/rule/rule-list-item.ui-component.html index 1cfe07f73..09650096f 100644 --- a/projects/aca-folder-rules/src/lib/rules-list/rule/rule-list-item.ui-component.html +++ b/projects/aca-folder-rules/src/lib/rules-list/rule/rule-list-item.ui-component.html @@ -1,7 +1,9 @@
- {{rule.name}} +
+ {{rule.name}} + +

{{rule.description}}

- diff --git a/projects/aca-folder-rules/src/lib/rules-list/rule/rule-list-item.ui-component.scss b/projects/aca-folder-rules/src/lib/rules-list/rule/rule-list-item.ui-component.scss index 0a47e8198..f73e02d79 100644 --- a/projects/aca-folder-rules/src/lib/rules-list/rule/rule-list-item.ui-component.scss +++ b/projects/aca-folder-rules/src/lib/rules-list/rule/rule-list-item.ui-component.scss @@ -5,13 +5,6 @@ margin-bottom: 8px; cursor: pointer; - .aca-rule-title{ - font-weight: 900; - font-size: 14px; - color: #212121; - line-height: 20px; - } - p{ margin: 6px 0 0 0; color: rgba(33, 35, 40, 0.7); @@ -22,6 +15,22 @@ } } +.rule-info{ + width: 100%; + + &__header{ + display: flex; + justify-content: space-between; + + &__title{ + font-weight: 900; + font-size: 14px; + color: #212121; + line-height: 20px; + } + } +} + .selected{ background: rgba(31, 116, 219, 0.24); } diff --git a/projects/aca-folder-rules/src/lib/rules-list/rule/rule-list-item.ui-component.spec.ts b/projects/aca-folder-rules/src/lib/rules-list/rule/rule-list-item.ui-component.spec.ts index 2a11d5be4..f47dd11ca 100644 --- a/projects/aca-folder-rules/src/lib/rules-list/rule/rule-list-item.ui-component.spec.ts +++ b/projects/aca-folder-rules/src/lib/rules-list/rule/rule-list-item.ui-component.spec.ts @@ -25,12 +25,16 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { RuleListItemUiComponent } from './rule-list-item.ui-component'; +import { CoreTestingModule } from '@alfresco/adf-core'; describe('RuleComponent', () => { let component: RuleListItemUiComponent; let fixture: ComponentFixture; beforeEach(() => { + TestBed.configureTestingModule({ + imports: [CoreTestingModule] + }); fixture = TestBed.createComponent(RuleListItemUiComponent); component = fixture.componentInstance; }); diff --git a/projects/aca-folder-rules/src/lib/rules-list/rule/rule-list-item.ui-component.ts b/projects/aca-folder-rules/src/lib/rules-list/rule/rule-list-item.ui-component.ts index adf1ef737..93a139f6a 100644 --- a/projects/aca-folder-rules/src/lib/rules-list/rule/rule-list-item.ui-component.ts +++ b/projects/aca-folder-rules/src/lib/rules-list/rule/rule-list-item.ui-component.ts @@ -25,6 +25,7 @@ import { Component, Input } from '@angular/core'; import { Rule } from '../../model/rule.model'; +import { FolderRulesService } from '../../services/folder-rules.service'; @Component({ selector: 'aca-rule', @@ -34,4 +35,11 @@ import { Rule } from '../../model/rule.model'; export class RuleListItemUiComponent { @Input() rule: Rule; @Input() isSelected: boolean; + @Input() nodeId: string; + + constructor(private folderRulesService: FolderRulesService) {} + + onToggleClick(enabled: boolean) { + this.folderRulesService.toggleRule(this.nodeId, this.rule.id, { ...this.rule, enabled }); + } } diff --git a/projects/aca-folder-rules/src/lib/rules-list/rules-list.ui-component.html b/projects/aca-folder-rules/src/lib/rules-list/rules-list.ui-component.html index 5cba76239..553779f4c 100644 --- a/projects/aca-folder-rules/src/lib/rules-list/rules-list.ui-component.html +++ b/projects/aca-folder-rules/src/lib/rules-list/rules-list.ui-component.html @@ -1,3 +1,4 @@
- +
diff --git a/projects/aca-folder-rules/src/lib/rules-list/rules-list.ui-component.spec.ts b/projects/aca-folder-rules/src/lib/rules-list/rules-list.ui-component.spec.ts index ba623a4f1..04b6f990d 100644 --- a/projects/aca-folder-rules/src/lib/rules-list/rules-list.ui-component.spec.ts +++ b/projects/aca-folder-rules/src/lib/rules-list/rules-list.ui-component.spec.ts @@ -60,10 +60,12 @@ describe('RulesListComponent', () => { expect(rules.length).toBe(2, 'Unexpected number of rules'); const rule = debugElement.query(By.css('.aca-rule:first-child')); - const title = rule.query(By.css('.aca-rule-title')); + const title = rule.query(By.css('.rule-info__header__title')); const description = rule.query(By.css('p')); + const toggleBtn = rule.query(By.css('mat-slide-toggle')); expect(title.nativeElement.textContent).toBe(dummyRules[0].name); + expect(toggleBtn).toBeTruthy(); expect(description.nativeElement.textContent).toBe(dummyRules[0].description); }); }); diff --git a/projects/aca-folder-rules/src/lib/rules-list/rules-list.ui-component.ts b/projects/aca-folder-rules/src/lib/rules-list/rules-list.ui-component.ts index 44ab62700..d82b2c8ab 100644 --- a/projects/aca-folder-rules/src/lib/rules-list/rules-list.ui-component.ts +++ b/projects/aca-folder-rules/src/lib/rules-list/rules-list.ui-component.ts @@ -38,6 +38,9 @@ export class RulesListUiComponent { @Input() selectedRule: Rule; + @Input() + nodeId: string; + @Output() ruleSelected = new EventEmitter(); 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 1626a7527..9d76cc287 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 @@ -109,4 +109,20 @@ describe('FolderRulesService', () => { expect(apiCallSpy).toHaveBeenCalledWith(`/nodes/${nodeId}/rule-sets/${ruleSetId}/rules/${ruleId}`, 'DELETE', params); }); }); + + describe('toggleRule', () => { + const paramsWithBody = [{}, {}, {}, {}, dummyRules[0], ['application/json'], ['application/json']]; + beforeEach(async () => { + apiCallSpy = spyOn(folderRulesService, 'apiCall') + .withArgs(`/nodes/${nodeId}/rule-sets/${ruleSetId}/rules/${ruleId}`, 'PUT', paramsWithBody) + .and.returnValue([]); + + folderRulesService.toggleRule(nodeId, ruleId, dummyRules[0]); + }); + + it('should send correct PUT request', async () => { + expect(apiCallSpy).toHaveBeenCalled(); + expect(apiCallSpy).toHaveBeenCalledWith(`/nodes/${nodeId}/rule-sets/${ruleSetId}/rules/${ruleId}`, 'PUT', paramsWithBody); + }); + }); }); 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 262bc5ff8..07a776f91 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 @@ -132,6 +132,20 @@ export class FolderRulesService { ); } + toggleRule(nodeId: string, ruleId: string, rule: Rule, ruleSetId: string = '-default-'): void { + from( + this.apiCall(`/nodes/${nodeId}/rule-sets/${ruleSetId}/rules/${ruleId}`, 'PUT', [ + {}, + {}, + {}, + {}, + { ...rule }, + ['application/json'], + ['application/json'] + ]) + ).subscribe({ error: (error) => console.error(error) }); + } + private apiCall(path: string, httpMethod: string, params?: any[]): Promise { return this.apiService.getInstance().contentClient.callApi(path, httpMethod, ...params); }