diff --git a/frontend/src/app/components/values-picker/values-picker.component.html b/frontend/src/app/components/values-picker/values-picker.component.html index d6f466a..6da4a07 100644 --- a/frontend/src/app/components/values-picker/values-picker.component.html +++ b/frontend/src/app/components/values-picker/values-picker.component.html @@ -7,13 +7,13 @@ [disabled]="isDisabled(item)" (removed)="removeItem(item)" > - {{ item }} + {{ valueMapper(item) }} - - {{ item }} + + {{ valueMapper(item) }} diff --git a/frontend/src/app/components/values-picker/values-picker.component.ts b/frontend/src/app/components/values-picker/values-picker.component.ts index 4e7a972..8d6d883 100644 --- a/frontend/src/app/components/values-picker/values-picker.component.ts +++ b/frontend/src/app/components/values-picker/values-picker.component.ts @@ -1,10 +1,5 @@ -import { COMMA, ENTER, SPACE } from '@angular/cdk/keycodes'; -import { - Component, - Input, - OnChanges, - OnInit -} from '@angular/core'; +import { COMMA, ENTER } from '@angular/cdk/keycodes'; +import { Component, Input, OnChanges, OnInit } from '@angular/core'; import { FormControl } from '@angular/forms'; import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete'; import { MatChipInputEvent } from '@angular/material/chips'; @@ -20,7 +15,7 @@ import { Required } from 'src/app/models/decorators/required.decorator'; }) export class ValuesPickerComponent implements OnInit, OnChanges { // Static data - readonly separatorKeysCodes: number[] = [ENTER, COMMA, SPACE]; + readonly separatorKeysCodes: number[] = [ENTER, COMMA]; // Ui niceties @Input('name') @Required name: string = ''; @@ -37,10 +32,14 @@ export class ValuesPickerComponent implements OnInit, OnChanges { @Input('disabled-list') disabledSelection: string[] = []; + @Input('value-mapper') + valueMapper: (value: string) => string = (value) => 'poopoo'; + // Selection private selectableSubject = new BehaviorSubject([]); + private foundSubject = new BehaviorSubject([]); - public selectable = this.selectableSubject.asObservable(); + public found = this.foundSubject.asObservable(); public inputControl = new FormControl(''); public ngOnInit(): void { @@ -49,7 +48,7 @@ export class ValuesPickerComponent implements OnInit, OnChanges { } public ngOnChanges(): void { - this.updateSelectable() + this.updateSelectable(); } public isDisabled(value: string): boolean { @@ -69,7 +68,7 @@ export class ValuesPickerComponent implements OnInit, OnChanges { } public addItemSelect(event: MatAutocompleteSelectedEvent): void { - this.addItem(event.option.viewValue); + this.addItem(event.option.value); } private addItem(value: string) { @@ -89,14 +88,20 @@ export class ValuesPickerComponent implements OnInit, OnChanges { (s) => !this.isDisabled(s) && !selected.includes(s) ); + this.selectableSubject.next(available); + const searchValue = this.inputControl.value; if (searchValue && available.length > 0) { - const fuse = new Fuse(available); - const result = fuse.search(searchValue).map((r) => r.item); + const fuse = new Fuse(available.map(this.valueMapper)); + const result = fuse + .search(searchValue, { + limit: 10, + }) + .map((r) => available[r.refIndex]); - this.selectableSubject.next(result); + this.foundSubject.next(result); } else { - this.selectableSubject.next(available); + this.foundSubject.next(available); } } diff --git a/frontend/src/app/routes/settings/roles/settings-roles-edit/settings-roles-edit.component.html b/frontend/src/app/routes/settings/roles/settings-roles-edit/settings-roles-edit.component.html index c42ec99..c811601 100644 --- a/frontend/src/app/routes/settings/roles/settings-roles-edit/settings-roles-edit.component.html +++ b/frontend/src/app/routes/settings/roles/settings-roles-edit/settings-roles-edit.component.html @@ -30,6 +30,7 @@
diff --git a/frontend/src/app/routes/settings/roles/settings-roles-edit/settings-roles-edit.component.ts b/frontend/src/app/routes/settings/roles/settings-roles-edit/settings-roles-edit.component.ts index 278e158..9fac206 100644 --- a/frontend/src/app/routes/settings/roles/settings-roles-edit/settings-roles-edit.component.ts +++ b/frontend/src/app/routes/settings/roles/settings-roles-edit/settings-roles-edit.component.ts @@ -1,6 +1,8 @@ import { Component, OnInit } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; +import { Permission } from 'picsur-shared/dist/dto/permissions.dto'; import { HasFailed } from 'picsur-shared/dist/types'; +import { UIFriendlyPermissions } from 'src/app/i18n/permissions.i18n'; import { SnackBarType } from 'src/app/models/dto/snack-bar-type.dto'; import { UpdateRoleControl } from 'src/app/models/forms/updaterole.control'; import { RolesService } from 'src/app/services/api/roles.service'; @@ -41,7 +43,9 @@ export class SettingsRolesEditComponent implements OnInit { ) {} ngOnInit() { - Promise.all([this.initRole(), this.initPermissions()]).catch(this.logger.error); + Promise.all([this.initRole(), this.initPermissions()]).catch( + this.logger.error + ); } private async initRole() { @@ -104,4 +108,8 @@ export class SettingsRolesEditComponent implements OnInit { cancel() { this.router.navigate(['/settings/roles']); } + + public UIFriendlyPermission(name: string) { + return UIFriendlyPermissions[name as Permission] ?? name; + } }