Skip to content

Commit 370c562

Browse files
benceruleanluchristian-byrne
authored andcommitted
fix: open target panel when toggling Docked Job History (#9215)
## Summary Make the Docked Job History toggle deterministic so it opens the expected UI target in both directions. ## Changes - Update `JobHistoryActionsMenu` toggle behavior: - When currently docked (`Comfy.Queue.QPOV2=true`), disable docked mode and explicitly open floating QPO (`Comfy.Queue.History.Expanded=true`) - When currently floating (`Comfy.Queue.QPOV2=false`), enable docked mode and open the `job-history` sidebar tab - Add/adjust unit tests in `QueueOverlayHeader.test.ts` to verify both toggle directions and target panel behavior ## Testing - `pnpm exec eslint src/components/queue/JobHistoryActionsMenu.vue src/components/queue/QueueOverlayHeader.test.ts` - `pnpm typecheck` - `pnpm test:unit -- src/components/queue/QueueOverlayHeader.test.ts` ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-9215-fix-open-target-panel-when-toggling-Docked-Job-History-3126d73d3650810eb409ff38e3a521f3) by [Unito](https://www.unito.io)
1 parent b7f9519 commit 370c562

2 files changed

Lines changed: 50 additions & 4 deletions

File tree

src/components/queue/JobHistoryActionsMenu.vue

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,13 +79,15 @@ import Button from '@/components/ui/button/Button.vue'
7979
import { buildTooltipConfig } from '@/composables/useTooltipConfig'
8080
import { isCloud } from '@/platform/distribution/types'
8181
import { useSettingStore } from '@/platform/settings/settingStore'
82+
import { useSidebarTabStore } from '@/stores/workspace/sidebarTabStore'
8283
8384
const emit = defineEmits<{
8485
(e: 'clearHistory'): void
8586
}>()
8687
8788
const { t } = useI18n()
8889
const settingStore = useSettingStore()
90+
const sidebarTabStore = useSidebarTabStore()
8991
9092
const moreTooltipConfig = computed(() => buildTooltipConfig(t('g.more')))
9193
const isQueuePanelV2Enabled = computed(() =>
@@ -99,6 +101,13 @@ const onClearHistoryFromMenu = (close: () => void) => {
99101
}
100102
101103
const onToggleDockedJobHistory = async () => {
102-
await settingStore.set('Comfy.Queue.QPOV2', !isQueuePanelV2Enabled.value)
104+
if (isQueuePanelV2Enabled.value) {
105+
await settingStore.set('Comfy.Queue.QPOV2', false)
106+
await settingStore.set('Comfy.Queue.History.Expanded', true)
107+
return
108+
}
109+
110+
await settingStore.set('Comfy.Queue.QPOV2', true)
111+
sidebarTabStore.activeSidebarTabId = 'job-history'
103112
}
104113
</script>

src/components/queue/QueueOverlayHeader.test.ts

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,13 @@ vi.mock('@/components/ui/Popover.vue', () => {
2323
return { default: PopoverStub }
2424
})
2525

26-
const mockGetSetting = vi.fn((key: string) =>
26+
const mockGetSetting = vi.fn<(key: string) => boolean | undefined>((key) =>
2727
key === 'Comfy.Queue.QPOV2' ? true : undefined
2828
)
2929
const mockSetSetting = vi.fn()
30+
const mockSidebarTabStore = {
31+
activeSidebarTabId: null as string | null
32+
}
3033

3134
vi.mock('@/platform/settings/settingStore', () => ({
3235
useSettingStore: () => ({
@@ -35,6 +38,10 @@ vi.mock('@/platform/settings/settingStore', () => ({
3538
})
3639
}))
3740

41+
vi.mock('@/stores/workspace/sidebarTabStore', () => ({
42+
useSidebarTabStore: () => mockSidebarTabStore
43+
}))
44+
3845
import QueueOverlayHeader from './QueueOverlayHeader.vue'
3946
import * as tooltipConfig from '@/composables/useTooltipConfig'
4047

@@ -81,6 +88,10 @@ describe('QueueOverlayHeader', () => {
8188
beforeEach(() => {
8289
popoverCloseSpy.mockClear()
8390
mockSetSetting.mockClear()
91+
mockSidebarTabStore.activeSidebarTabId = null
92+
mockGetSetting.mockImplementation((key: string) =>
93+
key === 'Comfy.Queue.QPOV2' ? true : undefined
94+
)
8495
})
8596

8697
it('renders header title', () => {
@@ -125,7 +136,32 @@ describe('QueueOverlayHeader', () => {
125136
expect(wrapper.emitted('clearHistory')).toHaveLength(1)
126137
})
127138

128-
it('toggles docked job history setting from the menu', async () => {
139+
it('opens floating queue progress overlay when disabling from the menu', async () => {
140+
const wrapper = mountHeader()
141+
142+
const dockedJobHistoryButton = wrapper.get(
143+
'[data-testid="docked-job-history-action"]'
144+
)
145+
await dockedJobHistoryButton.trigger('click')
146+
147+
expect(mockSetSetting).toHaveBeenCalledTimes(2)
148+
expect(mockSetSetting).toHaveBeenNthCalledWith(
149+
1,
150+
'Comfy.Queue.QPOV2',
151+
false
152+
)
153+
expect(mockSetSetting).toHaveBeenNthCalledWith(
154+
2,
155+
'Comfy.Queue.History.Expanded',
156+
true
157+
)
158+
expect(mockSidebarTabStore.activeSidebarTabId).toBe(null)
159+
})
160+
161+
it('opens docked job history sidebar when enabling from the menu', async () => {
162+
mockGetSetting.mockImplementation((key: string) =>
163+
key === 'Comfy.Queue.QPOV2' ? false : undefined
164+
)
129165
const wrapper = mountHeader()
130166

131167
const dockedJobHistoryButton = wrapper.get(
@@ -134,6 +170,7 @@ describe('QueueOverlayHeader', () => {
134170
await dockedJobHistoryButton.trigger('click')
135171

136172
expect(mockSetSetting).toHaveBeenCalledTimes(1)
137-
expect(mockSetSetting).toHaveBeenCalledWith('Comfy.Queue.QPOV2', false)
173+
expect(mockSetSetting).toHaveBeenCalledWith('Comfy.Queue.QPOV2', true)
174+
expect(mockSidebarTabStore.activeSidebarTabId).toBe('job-history')
138175
})
139176
})

0 commit comments

Comments
 (0)