Skip to content

Commit

Permalink
feat(devtools): remove logical operator for capability filters where …
Browse files Browse the repository at this point in the history
…not useful
  • Loading branch information
danielwiehl authored and mofogasy committed Nov 7, 2022
1 parent 3130e88 commit 3909ba3
Show file tree
Hide file tree
Showing 5 changed files with 11 additions and 80 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,40 +19,16 @@ import {Arrays} from '@scion/toolkit/util';
providedIn: 'root',
})
export class CapabilityFilterSession {
private readonly defaultLogicalOperator: LogicalOperator = 'or';

private _idFilters = new Set<string>();
private _typeFilters = new Set<string>();
private _qualifierFilters = new Array<KeyValuePair>();
private _appFilters = new Set<string>();
private _idLogicalOperator: LogicalOperator;
private _typeLogicalOperator: LogicalOperator;
private _qualifierLogicalOperator: LogicalOperator;
private _appLogicalOperator: LogicalOperator;
private _filterChange$ = new Subject<void>();

constructor(private _manifestService: DevToolsManifestService) {
this.idLogicalOperator= this.defaultLogicalOperator;
this.typeLogicalOperator = this.defaultLogicalOperator;
this.qualifierLogicalOperator = this.defaultLogicalOperator;
this.appLogicalOperator = this.defaultLogicalOperator;
}

public set idLogicalOperator(value: LogicalOperator) {
this._idLogicalOperator = value;
this._filterChange$.next();
}

public get idLogicalOperator(): LogicalOperator {
return this._idLogicalOperator;
}

public set typeLogicalOperator(value: LogicalOperator) {
this._typeLogicalOperator = value;
this._filterChange$.next();
}

public get typeLogicalOperator(): LogicalOperator {
return this._typeLogicalOperator;
this.qualifierLogicalOperator = 'or';
}

public set qualifierLogicalOperator(value: LogicalOperator) {
Expand All @@ -64,15 +40,6 @@ export class CapabilityFilterSession {
return this._qualifierLogicalOperator;
}

public set appLogicalOperator(value: LogicalOperator) {
this._appLogicalOperator = value;
this._filterChange$.next();
}

public get appLogicalOperator(): LogicalOperator {
return this._appLogicalOperator;
}

public capabilities$(): Observable<Capability[]> {
return this._manifestService.capabilities$()
.pipe(
Expand All @@ -91,35 +58,21 @@ export class CapabilityFilterSession {
}

private filterById(capability: Capability): boolean {
if (this._idLogicalOperator === 'or') {
return this._idFilters.has(capability.metadata.id);
}
else if (this._idLogicalOperator === 'and') {
return Array.from(this._idFilters).every(id => id === capability.metadata.id);
}
return false;
return this._idFilters.has(capability.metadata.id);
}

private filterByType(capability: Capability): boolean {
const capabilityType = capability.type.toLowerCase();
const typeFilters = Array.from(this._typeFilters).map(typeFilter => typeFilter.toLowerCase());
if (this._typeLogicalOperator === 'or') {
return typeFilters.includes(capabilityType);
}
else if (this._typeLogicalOperator === 'and') {
return typeFilters.every(type => type === capabilityType);
}
return false;
return Array.from(this._typeFilters).some(typeFilter => typeFilter.toLowerCase() === capabilityType);
}

private filterByQualifier(qualifier: Qualifier): boolean {
if (this._qualifierLogicalOperator === 'or') {
return this._qualifierFilters.some(it => this.matchesQualifier(it, qualifier));
}
else if (this._qualifierLogicalOperator === 'and') {
if (this._qualifierLogicalOperator === 'and') {
return this._qualifierFilters.every(it => this.matchesQualifier(it, qualifier));
}
return false;
else {
return this._qualifierFilters.some(it => this.matchesQualifier(it, qualifier));
}
}

private matchesQualifier(filterQualifier: KeyValuePair, qualifier: Qualifier): boolean {
Expand All @@ -141,14 +94,7 @@ export class CapabilityFilterSession {

private filterAppByName(capability: Capability): boolean {
const symbolicName = capability.metadata.appSymbolicName.toLowerCase();
const appFilters = Array.from(this._appFilters).map(appFilter => appFilter.toLowerCase());
if (this._appLogicalOperator === 'or') {
return appFilters.includes(symbolicName);
}
else if (this._appLogicalOperator === 'and') {
return appFilters.every(app => app === symbolicName);
}
return false;
return Array.from(this._appFilters).some(appFilter => appFilter.toLowerCase() === symbolicName);
}

public addIdFilter(id: string): void {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<header>
<span class="title">{{title}}</span>
<span class="toggle-button">
<span class="toggle-button" *ngIf="logicalOperator">
<button [class.active]="logicalOperator === OR" (click)="onLogicalOperatorClick(OR)" type="button">OR</button>
<button [class.active]="logicalOperator === AND" (click)="onLogicalOperatorClick(AND)" type="button">AND</button>
</span>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ export class FilterFieldComponent implements OnInit {
public type: 'value' | 'key-value' = 'value';

@Input()
public logicalOperator: LogicalOperator;
public logicalOperator?: LogicalOperator;

@Input()
public placeholder = 'Value';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,15 @@
<sci-viewport>
<devtools-filter-field [title]="'Filter by Type'" type="value" placeholder="Type" [autocompleteValues]="capabilityTypes$ | async"
[logicalOperator]="capabilityFilterSession.typeLogicalOperator" (changeLogicalOperator)="onTypeLogicalOperatorChange($event)"
[initialFilters]="typeFilters" (addValueFilter)="onTypeFilterAdd($event)" (removeValueFilter)="onTypeFilterRemove($event)">
</devtools-filter-field>
<devtools-filter-field [title]="'Filter by Qualifier'" type="key-value" [autocompleteKeys]="qualifierKeys$ | async" [autocompleteValues]="qualifierValues$ | async"
[logicalOperator]="capabilityFilterSession.qualifierLogicalOperator" (changeLogicalOperator)="onQualifierLogicalOperatorChange($event)"
[initialFilters]="qualifierFilters" (addKeyValueFilter)="onQualifierFilterAdd($event)" (removeKeyValueFilter)="onQualifierFilterRemove($event)">
</devtools-filter-field>
<devtools-filter-field [title]="'Filter by App'" type="value" placeholder="App" [autocompleteValues]="appSymbolicNames"
[logicalOperator]="capabilityFilterSession.appLogicalOperator" (changeLogicalOperator)="onAppLogicalOperatorChange($event)"
[initialFilters]="appFilters" (addValueFilter)="onAppFilterAdd($event)" (removeValueFilter)="onAppFilterRemove($event)">
</devtools-filter-field>
<devtools-filter-field [title]="'Filter by ID'" type="value" placeholder="ID" [autocompleteValues]="capabilityIds$ | async"
[logicalOperator]="capabilityFilterSession.idLogicalOperator" (changeLogicalOperator)="onIdLogicalOperatorChange($event)"
(addValueFilter)="onIdFilterAdd($event)" (removeValueFilter)="onIdFilterRemove($event)"
[initialFilters]="idFilters">
</devtools-filter-field>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,19 +97,7 @@ export class FindCapabilitiesComponent {
return this.capabilityFilterSession.appFilters;
}

public onIdLogicalOperatorChange(logicalOperator: LogicalOperator): void {
this.capabilityFilterSession.idLogicalOperator = logicalOperator;
}

public onTypeLogicalOperatorChange(logicalOperator: LogicalOperator): void {
this.capabilityFilterSession.typeLogicalOperator = logicalOperator;
}

public onQualifierLogicalOperatorChange(logicalOperator: LogicalOperator): void {
this.capabilityFilterSession.qualifierLogicalOperator = logicalOperator;
}

public onAppLogicalOperatorChange(logicalOperator: LogicalOperator): void {
this.capabilityFilterSession.appLogicalOperator = logicalOperator;
}
}

0 comments on commit 3909ba3

Please sign in to comment.