mirror of
https://github.com/Alfresco/alfresco-content-app.git
synced 2025-05-12 17:04:46 +00:00
[ACA-4644] Inherited & linked rules that are disabled should not be listed (#2843)
* [ACA-4644] Inherited & linked rules that are disabled should not be listed * Added condition for linked rule sets to need only enabled rules * Added a bypass for the empty rules list for linked rule sets that have only disabled rules * Replaced array filter with some
This commit is contained in:
parent
49f0cc3b61
commit
8c7c40a3d4
@ -121,7 +121,8 @@
|
||||
"LOAD_MORE_RULE_SETS": "Load rules from other folders",
|
||||
"LOAD_MORE_RULES": "Load more rules",
|
||||
"LOADING_RULES": "Loading rules",
|
||||
"INHERITED_RULES_WILL_BE_RUN_FIRST": "Inherited rules will be run first"
|
||||
"INHERITED_RULES_WILL_BE_RUN_FIRST": "Inherited rules will be run first",
|
||||
"ALL_LINKED_RULES_ARE_DISABLED": "All rules linked from this rule set are disabled"
|
||||
},
|
||||
"LINK_RULES_DIALOG": {
|
||||
"TITLE": "Select a folder to link rules from",
|
||||
|
@ -57,7 +57,7 @@
|
||||
</adf-toolbar>
|
||||
<mat-divider></mat-divider>
|
||||
|
||||
<div class="aca-manage-rules__container" *ngIf="(mainRuleSet$ | async) || isInheritedRuleSetsNotEmpty(inheritedRuleSets$ | async); else emptyContent">
|
||||
<div class="aca-manage-rules__container" *ngIf="isMainRuleSetNotEmpty(mainRuleSet$ | async) || isInheritedRuleSetsNotEmpty(inheritedRuleSets$ | async); else emptyContent">
|
||||
<aca-rule-list
|
||||
[mainRuleSet]="mainRuleSet$ | async"
|
||||
[folderId]="nodeId"
|
||||
|
@ -30,7 +30,13 @@ import { CoreTestingModule } from '@alfresco/adf-core';
|
||||
import { FolderRulesService } from '../services/folder-rules.service';
|
||||
import { ActivatedRoute } from '@angular/router';
|
||||
import { of } from 'rxjs';
|
||||
import { inheritedRuleSetMock, ownedRuleSetMock, ruleSetsWithEmptyRulesMock, ruleSetWithLinkMock } from '../mock/rule-sets.mock';
|
||||
import {
|
||||
inheritedRuleSetMock,
|
||||
inheritedRuleSetWithEmptyRulesMock,
|
||||
inheritedRuleSetWithOnlyDisabledRulesMock,
|
||||
ownedRuleSetMock,
|
||||
ruleSetWithLinkMock
|
||||
} from '../mock/rule-sets.mock';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { owningFolderIdMock, owningFolderMock } from '../mock/node.mock';
|
||||
import { MatDialog } from '@angular/material/dialog';
|
||||
@ -97,10 +103,30 @@ describe('ManageRulesSmartComponent', () => {
|
||||
expect(deleteRuleBtn).toBeTruthy('no delete rule button');
|
||||
});
|
||||
|
||||
it('should only show adf-empty-content if node has no rules defined yet', () => {
|
||||
it('should show adf-empty-content if node has no rules defined yet', () => {
|
||||
folderRuleSetsService.folderInfo$ = of(owningFolderMock);
|
||||
folderRuleSetsService.mainRuleSet$ = of(null);
|
||||
folderRuleSetsService.inheritedRuleSets$ = of(ruleSetsWithEmptyRulesMock);
|
||||
folderRuleSetsService.inheritedRuleSets$ = of([inheritedRuleSetWithEmptyRulesMock]);
|
||||
folderRuleSetsService.isLoading$ = of(false);
|
||||
actionsService.loading$ = of(false);
|
||||
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(component).toBeTruthy();
|
||||
|
||||
const adfEmptyContent = debugElement.query(By.css('adf-empty-content'));
|
||||
const ruleSets = debugElement.queryAll(By.css(`[data-automation-id="rule-set-list-item"]`));
|
||||
const ruleDetails = debugElement.query(By.css('aca-rule-details'));
|
||||
|
||||
expect(adfEmptyContent).toBeTruthy();
|
||||
expect(ruleSets.length).toBe(0);
|
||||
expect(ruleDetails).toBeFalsy();
|
||||
});
|
||||
|
||||
it('should show adf-empty-content if there are only inherited disabled rules', () => {
|
||||
folderRuleSetsService.folderInfo$ = of(owningFolderMock);
|
||||
folderRuleSetsService.mainRuleSet$ = of(null);
|
||||
folderRuleSetsService.inheritedRuleSets$ = of([inheritedRuleSetWithOnlyDisabledRulesMock]);
|
||||
folderRuleSetsService.isLoading$ = of(false);
|
||||
actionsService.loading$ = of(false);
|
||||
|
||||
|
@ -242,7 +242,11 @@ export class ManageRulesSmartComponent implements OnInit, OnDestroy {
|
||||
});
|
||||
}
|
||||
|
||||
isMainRuleSetNotEmpty(mainRuleSet: RuleSet): boolean {
|
||||
return !!mainRuleSet;
|
||||
}
|
||||
|
||||
isInheritedRuleSetsNotEmpty(inheritedRuleSets: RuleSet[]): boolean {
|
||||
return inheritedRuleSets.filter((ruleSet) => ruleSet.rules.length > 0).length > 0;
|
||||
return inheritedRuleSets.some((ruleSet) => ruleSet.rules.some((rule: Rule) => rule.isEnabled));
|
||||
}
|
||||
}
|
||||
|
@ -26,7 +26,7 @@
|
||||
import { RuleSet } from '../model/rule-set.model';
|
||||
import { otherFolderIdMock, otherFolderMock, owningFolderIdMock, owningFolderMock } from './node.mock';
|
||||
import { Rule } from '../model/rule.model';
|
||||
import { inheritedRulesMock, linkedRulesMock, ownedRulesMock } from './rules.mock';
|
||||
import { inheritedRulesMock, linkedRulesMock, ownedRulesMock, ruleMock } from './rules.mock';
|
||||
|
||||
export const getRuleSetsResponseMock = {
|
||||
list: {
|
||||
@ -125,6 +125,17 @@ export const inheritedRuleSetWithEmptyRulesMock: RuleSet = {
|
||||
loadingRules: false
|
||||
};
|
||||
|
||||
export const ruleSetsMock: RuleSet[] = [inheritedRuleSetMock, ownedRuleSetMock, ruleSetWithLinkMock];
|
||||
export const inheritedRuleSetWithOnlyDisabledRulesMock: RuleSet = {
|
||||
id: 'inherited-rule-set',
|
||||
isLinkedTo: false,
|
||||
owningFolder: otherFolderMock,
|
||||
linkedToBy: [],
|
||||
rules: [
|
||||
{ ...ruleMock('rule1'), isEnabled: false },
|
||||
{ ...ruleMock('rule2'), isEnabled: false }
|
||||
],
|
||||
hasMoreRules: false,
|
||||
loadingRules: false
|
||||
};
|
||||
|
||||
export const ruleSetsWithEmptyRulesMock: RuleSet[] = [inheritedRuleSetWithEmptyRulesMock];
|
||||
export const ruleSetsMock: RuleSet[] = [inheritedRuleSetMock, ownedRuleSetMock, ruleSetWithLinkMock];
|
||||
|
@ -35,7 +35,7 @@
|
||||
</div>
|
||||
|
||||
<div
|
||||
*ngIf="mainRuleSetGroupingItems.length > 0"
|
||||
*ngIf="mainRuleSetGroupingItems.length > 0 || isMainRuleSetLinked"
|
||||
class="aca-rule-list__item"
|
||||
data-automation-id="rule-list-item"
|
||||
[ngClass]="{ expanded: mainRuleSetExpanded }">
|
||||
@ -66,14 +66,25 @@
|
||||
</mat-icon>
|
||||
</div>
|
||||
|
||||
<aca-rule-list-grouping
|
||||
*ngIf="mainRuleSetExpanded"
|
||||
[items]="mainRuleSetGroupingItems"
|
||||
[selectedRule]="selectedRule"
|
||||
[showEnabledToggles]="isMainRuleSetOwned"
|
||||
(selectRule)="onSelectRule($event)"
|
||||
(ruleEnabledChanged)="onRuleEnabledChanged($event)"
|
||||
(loadMoreRules)="onLoadMoreRules($event)">
|
||||
</aca-rule-list-grouping>
|
||||
<ng-container *ngIf="mainRuleSetExpanded">
|
||||
<aca-rule-list-grouping
|
||||
*ngIf="mainRuleSetGroupingItems.length > 0; else emptyLinkedRuleSet"
|
||||
[items]="mainRuleSetGroupingItems"
|
||||
[selectedRule]="selectedRule"
|
||||
[showEnabledToggles]="isMainRuleSetOwned"
|
||||
(selectRule)="onSelectRule($event)"
|
||||
(ruleEnabledChanged)="onRuleEnabledChanged($event)"
|
||||
(loadMoreRules)="onLoadMoreRules($event)">
|
||||
</aca-rule-list-grouping>
|
||||
|
||||
<ng-template #emptyLinkedRuleSet>
|
||||
<div class="aca-rule-list__item__all-linked-rules-are-disabled">
|
||||
{{ 'ACA_FOLDER_RULES.RULE_LIST.ALL_LINKED_RULES_ARE_DISABLED' | translate }}
|
||||
<button mat-stroked-button [routerLink]="['/nodes', mainRuleSet.owningFolder.id, 'rules']">
|
||||
{{ 'ACA_FOLDER_RULES.MANAGE_RULES.TOOLBAR.ACTIONS.SEE_IN_FOLDER' | translate }}
|
||||
</button>
|
||||
</div>
|
||||
</ng-template>
|
||||
</ng-container>
|
||||
|
||||
</div>
|
||||
|
@ -46,5 +46,18 @@
|
||||
border-bottom: 1px solid var(--theme-border-color);
|
||||
}
|
||||
}
|
||||
|
||||
&__all-linked-rules-are-disabled {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
color: var(--theme-disabled-text-color);
|
||||
font-style: italic;
|
||||
text-align: center;
|
||||
padding: 0.5em 0;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -69,14 +69,17 @@ export class RuleListUiComponent {
|
||||
get isMainRuleSetOwned(): boolean {
|
||||
return FolderRuleSetsService.isOwnedRuleSet(this.mainRuleSet, this.folderId);
|
||||
}
|
||||
get isMainRuleSetLinked(): boolean {
|
||||
return FolderRuleSetsService.isLinkedRuleSet(this.mainRuleSet, this.folderId);
|
||||
}
|
||||
|
||||
get mainRuleSetGroupingItems(): RuleGroupingItem[] {
|
||||
return this.mainRuleSet ? this.getRuleSetGroupingItems(this.mainRuleSet) : [];
|
||||
return this.mainRuleSet ? this.getRuleSetGroupingItems(this.mainRuleSet, !this.isMainRuleSetOwned) : [];
|
||||
}
|
||||
|
||||
get inheritedRuleSetGroupingItems(): RuleGroupingItem[] {
|
||||
const items = this.inheritedRuleSets.reduce((accumulator: RuleGroupingItem[], currentRuleSet: RuleSet) => {
|
||||
accumulator.push(...this.getRuleSetGroupingItems(currentRuleSet));
|
||||
accumulator.push(...this.getRuleSetGroupingItems(currentRuleSet, true));
|
||||
return accumulator;
|
||||
}, []);
|
||||
if (this.ruleSetsLoading || this.hasMoreRuleSets) {
|
||||
@ -87,11 +90,13 @@ export class RuleListUiComponent {
|
||||
return items;
|
||||
}
|
||||
|
||||
getRuleSetGroupingItems(ruleSet: RuleSet): RuleGroupingItem[] {
|
||||
const items: RuleGroupingItem[] = ruleSet.rules.map((rule: Rule) => ({
|
||||
type: 'rule',
|
||||
rule
|
||||
}));
|
||||
getRuleSetGroupingItems(ruleSet: RuleSet, filterOutDisabledRules: boolean): RuleGroupingItem[] {
|
||||
const items: RuleGroupingItem[] = ruleSet.rules
|
||||
.filter((rule: Rule) => rule.isEnabled || !filterOutDisabledRules)
|
||||
.map((rule: Rule) => ({
|
||||
type: 'rule',
|
||||
rule
|
||||
}));
|
||||
if (ruleSet.loadingRules || ruleSet.hasMoreRules) {
|
||||
items.push(
|
||||
ruleSet.loadingRules
|
||||
|
@ -143,7 +143,10 @@ export class FolderRuleSetsService {
|
||||
this.mainRuleSetSource.next(mainRuleSet);
|
||||
this.inheritedRuleSetsSource.next(inheritedRuleSets);
|
||||
this.hasMoreRuleSetsSource.next(this.hasMoreRuleSets);
|
||||
this.folderRulesService.selectRule(mainRuleSet?.rules[0] ?? inheritedRuleSets[0]?.rules[0] ?? null);
|
||||
const ruleToSelect =
|
||||
mainRuleSet?.rules.find((r: Rule) => FolderRuleSetsService.isOwnedRuleSet(mainRuleSet, nodeId) || r.isEnabled) ??
|
||||
inheritedRuleSets.reduce((foundRule: Rule, ruleSet: RuleSet) => foundRule ?? ruleSet.rules.find((r: Rule) => r.isEnabled), null);
|
||||
this.folderRulesService.selectRule(ruleToSelect);
|
||||
});
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user