From 43fe932c5777ea6e89a1386f7268db4f4cc7e875 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 20 Feb 2026 12:53:16 -0800 Subject: [PATCH] Fix: unify POSTs when toggling sidebar to prevent db lock (#12129) --- .../app-frame/app-frame.component.spec.ts | 14 +++++++++++++ .../app-frame/app-frame.component.ts | 20 ++++++++++++++++--- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src-ui/src/app/components/app-frame/app-frame.component.spec.ts b/src-ui/src/app/components/app-frame/app-frame.component.spec.ts index 15151782d..931f46254 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.spec.ts +++ b/src-ui/src/app/components/app-frame/app-frame.component.spec.ts @@ -243,9 +243,19 @@ describe('AppFrameComponent', () => { it('should support toggling slim sidebar and saving', fakeAsync(() => { const saveSettingSpy = jest.spyOn(settingsService, 'set') + settingsService.set(SETTINGS_KEYS.ATTRIBUTES_SECTIONS_COLLAPSED, []) expect(component.slimSidebarEnabled).toBeFalsy() expect(component.slimSidebarAnimating).toBeFalsy() component.toggleSlimSidebar() + const requests = httpTestingController.match( + `${environment.apiBaseUrl}ui_settings/` + ) + expect(requests).toHaveLength(1) + expect(requests[0].request.body.settings.slim_sidebar).toBe(true) + expect( + requests[0].request.body.settings.attributes_sections_collapsed + ).toEqual(['attributes']) + requests[0].flush({ success: true }) expect(component.slimSidebarAnimating).toBeTruthy() tick(200) expect(component.slimSidebarAnimating).toBeFalsy() @@ -254,6 +264,10 @@ describe('AppFrameComponent', () => { SETTINGS_KEYS.SLIM_SIDEBAR, true ) + expect(saveSettingSpy).toHaveBeenCalledWith( + SETTINGS_KEYS.ATTRIBUTES_SECTIONS_COLLAPSED, + ['attributes'] + ) })) it('should show error on toggle slim sidebar if store settings fails', () => { diff --git a/src-ui/src/app/components/app-frame/app-frame.component.ts b/src-ui/src/app/components/app-frame/app-frame.component.ts index a063c5095..5218d829c 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.ts +++ b/src-ui/src/app/components/app-frame/app-frame.component.ts @@ -140,10 +140,24 @@ export class AppFrameComponent toggleSlimSidebar(): void { this.slimSidebarAnimating = true - this.slimSidebarEnabled = !this.slimSidebarEnabled - if (this.slimSidebarEnabled) { - this.attributesSectionsCollapsed = true + const slimSidebarEnabled = !this.slimSidebarEnabled + this.settingsService.set(SETTINGS_KEYS.SLIM_SIDEBAR, slimSidebarEnabled) + if (slimSidebarEnabled) { + this.settingsService.set(SETTINGS_KEYS.ATTRIBUTES_SECTIONS_COLLAPSED, [ + CollapsibleSection.ATTRIBUTES, + ]) } + this.settingsService + .storeSettings() + .pipe(first()) + .subscribe({ + error: (error) => { + this.toastService.showError( + $localize`An error occurred while saving settings.` + ) + console.warn(error) + }, + }) setTimeout(() => { this.slimSidebarAnimating = false }, 200) // slightly longer than css animation for slim sidebar