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