diff --git a/src-ui/src/app/components/manage/saved-views/saved-views.component.html b/src-ui/src/app/components/manage/saved-views/saved-views.component.html index c4005cb2d..a7afb09a5 100644 --- a/src-ui/src/app/components/manage/saved-views/saved-views.component.html +++ b/src-ui/src/app/components/manage/saved-views/saved-views.component.html @@ -11,10 +11,19 @@
  • -
    +
    -
    +
    + + +
    +
    diff --git a/src-ui/src/app/components/manage/saved-views/saved-views.component.spec.ts b/src-ui/src/app/components/manage/saved-views/saved-views.component.spec.ts index 735e5abf4..825e19cf3 100644 --- a/src-ui/src/app/components/manage/saved-views/saved-views.component.spec.ts +++ b/src-ui/src/app/components/manage/saved-views/saved-views.component.spec.ts @@ -25,8 +25,20 @@ import { PageHeaderComponent } from '../../common/page-header/page-header.compon import { SavedViewsComponent } from './saved-views.component' const savedViews = [ - { id: 1, name: 'view1', show_in_sidebar: true, show_on_dashboard: true }, - { id: 2, name: 'view2', show_in_sidebar: false, show_on_dashboard: false }, + { + id: 1, + name: 'view1', + icon: 'archive', + show_in_sidebar: true, + show_on_dashboard: true, + }, + { + id: 2, + name: 'view2', + icon: 'funnel', + show_in_sidebar: false, + show_on_dashboard: false, + }, ] describe('SavedViewsComponent', () => { @@ -157,6 +169,24 @@ describe('SavedViewsComponent', () => { expect(patchBody.show_in_sidebar).toBeUndefined() }) + it('should persist a changed icon', () => { + const patchSpy = jest.spyOn(savedViewService, 'patchMany') + const view = savedViews[0] + const iconControl = component.savedViewsForm + .get('savedViews') + .get(view.id.toString()) + .get('icon') + + iconControl.setValue('bell') + iconControl.markAsDirty() + component.save() + + expect(patchSpy.mock.calls[0][0][0]).toMatchObject({ + id: view.id, + icon: 'bell', + }) + }) + it('should persist visibility changes to user settings', () => { const patchSpy = jest.spyOn(savedViewService, 'patchMany') const updateVisibilitySpy = jest diff --git a/src-ui/src/app/components/manage/saved-views/saved-views.component.ts b/src-ui/src/app/components/manage/saved-views/saved-views.component.ts index 3d9ee84dd..d2827e774 100644 --- a/src-ui/src/app/components/manage/saved-views/saved-views.component.ts +++ b/src-ui/src/app/components/manage/saved-views/saved-views.component.ts @@ -13,6 +13,10 @@ import { BehaviorSubject, Observable, of, switchMap, takeUntil } from 'rxjs' import { PermissionsDialogComponent } from 'src/app/components/common/permissions-dialog/permissions-dialog.component' import { DisplayMode } from 'src/app/data/document' import { SavedView } from 'src/app/data/saved-view' +import { + DEFAULT_SAVED_VIEW_ICON, + SAVED_VIEW_ICONS, +} from 'src/app/data/saved-view-icons' import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive' import { PermissionAction, @@ -24,6 +28,7 @@ import { ToastService } from 'src/app/services/toast.service' import { ConfirmButtonComponent } from '../../common/confirm-button/confirm-button.component' import { DragDropSelectComponent } from '../../common/input/drag-drop-select/drag-drop-select.component' import { NumberComponent } from '../../common/input/number/number.component' +import { SelectComponent } from '../../common/input/select/select.component' import { TextComponent } from '../../common/input/text/text.component' import { PageHeaderComponent } from '../../common/page-header/page-header.component' import { LoadingComponentWithPermissions } from '../../loading-component/loading.component' @@ -35,6 +40,7 @@ import { LoadingComponentWithPermissions } from '../../loading-component/loading PageHeaderComponent, ConfirmButtonComponent, NumberComponent, + SelectComponent, TextComponent, IfPermissionsDirective, DragDropSelectComponent, @@ -55,6 +61,7 @@ export class SavedViewsComponent private readonly modalService = inject(NgbModal) DisplayMode = DisplayMode + readonly savedViewIcons = SAVED_VIEW_ICONS readonly savedViews = signal(undefined) private savedViewsGroup = new FormGroup({}) @@ -105,6 +112,7 @@ export class SavedViewsComponent storeData.savedViews[view.id.toString()] = { id: view.id, name: view.name, + icon: view.icon ?? DEFAULT_SAVED_VIEW_ICON, show_on_dashboard: view.show_on_dashboard, show_in_sidebar: view.show_in_sidebar, page_size: view.page_size, @@ -117,6 +125,7 @@ export class SavedViewsComponent new FormGroup({ id: new FormControl({ value: null, disabled: !canEdit }), name: new FormControl({ value: null, disabled: !canEdit }), + icon: new FormControl({ value: null, disabled: !canEdit }), show_on_dashboard: new FormControl({ value: null, disabled: false, @@ -195,6 +204,7 @@ export class SavedViewsComponent const modelFieldsChanged = group.get('name')?.dirty || + group.get('icon')?.dirty || group.get('page_size')?.dirty || group.get('display_mode')?.dirty || group.get('display_fields')?.dirty