diff --git a/src/renderer/extensions/linearMode/OutputHistory.vue b/src/renderer/extensions/linearMode/OutputHistory.vue index 66a3cacc06..168d136ebf 100644 --- a/src/renderer/extensions/linearMode/OutputHistory.vue +++ b/src/renderer/extensions/linearMode/OutputHistory.vue @@ -4,6 +4,7 @@ import { useInfiniteScroll, useResizeObserver } from '@vueuse/core' +import { storeToRefs } from 'pinia' import type { ComponentPublicInstance } from 'vue' import { computed, @@ -26,11 +27,13 @@ import type { import OutputPreviewItem from '@/renderer/extensions/linearMode/OutputPreviewItem.vue' import { useOutputHistory } from '@/renderer/extensions/linearMode/useOutputHistory' import { useWorkflowStore } from '@/platform/workflow/management/stores/workflowStore' +import { useAppModeStore } from '@/stores/appModeStore' import { useQueueStore } from '@/stores/queueStore' import { cn } from '@/utils/tailwindUtil' const { outputs, allOutputs, selectFirstHistory, mayBeActiveWorkflowPending } = useOutputHistory() +const { hasOutputs } = storeToRefs(useAppModeStore()) const queueStore = useQueueStore() const store = useLinearOutputStore() const workflowStore = useWorkflowStore() @@ -156,8 +159,10 @@ watch( const inProgress = store.activeWorkflowInProgressItems if (inProgress.length > 0) { store.selectAsLatest(`slot:${inProgress[0].id}`) - } else { + } else if (hasOutputs.value) { selectFirstHistory() + } else { + store.selectAsLatest(null) } }, { immediate: true } @@ -180,13 +185,13 @@ watch( : undefined if (!sv || sv.kind !== 'history') { - selectFirstHistory() + if (hasOutputs.value) selectFirstHistory() return } const wasFirst = sv.assetId === oldAssets[0]?.id if (wasFirst || !newAssets.some((a) => a.id === sv.assetId)) { - selectFirstHistory() + if (hasOutputs.value) selectFirstHistory() } } ) diff --git a/src/renderer/extensions/linearMode/useOutputHistory.test.ts b/src/renderer/extensions/linearMode/useOutputHistory.test.ts index dbfbe9006b..1371caecdd 100644 --- a/src/renderer/extensions/linearMode/useOutputHistory.test.ts +++ b/src/renderer/extensions/linearMode/useOutputHistory.test.ts @@ -219,6 +219,7 @@ describe(useOutputHistory, () => { }) it('returns outputs from metadata allOutputs when count matches', () => { + useAppModeStore().selectedOutputs.push('1') const results = [makeResult('a.png'), makeResult('b.png')] const asset = makeAsset('a1', 'job-1', { allOutputs: results, @@ -255,7 +256,7 @@ describe(useOutputHistory, () => { expect(outputs[0].filename).toBe('b.png') }) - it('returns all outputs when no output nodes are selected', () => { + it('returns empty when no output nodes are selected', () => { const results = [makeResult('a.png', '1'), makeResult('b.png', '2')] const asset = makeAsset('a1', 'job-1', { allOutputs: results, @@ -265,7 +266,7 @@ describe(useOutputHistory, () => { const { allOutputs } = useOutputHistory() const outputs = allOutputs(asset) - expect(outputs).toHaveLength(2) + expect(outputs).toHaveLength(0) }) it('returns consistent filtered outputs across repeated calls', () => { @@ -288,6 +289,7 @@ describe(useOutputHistory, () => { }) it('returns in-progress outputs for pending resolve jobs', () => { + useAppModeStore().selectedOutputs.push('1') pendingResolveRef.value = new Set(['job-1']) inProgressItemsRef.value = [ { @@ -314,6 +316,7 @@ describe(useOutputHistory, () => { }) it('fetches full job detail for multi-output jobs', async () => { + useAppModeStore().selectedOutputs.push('1') jobDetailResults.set('job-1', { outputs: { '1': { @@ -342,6 +345,7 @@ describe(useOutputHistory, () => { describe('watchEffect resolve loop', () => { it('resolves pending jobs when history outputs load', async () => { + useAppModeStore().selectedOutputs.push('1') const results = [makeResult('a.png')] const asset = makeAsset('a1', 'job-1', { allOutputs: results, @@ -360,6 +364,7 @@ describe(useOutputHistory, () => { }) it('does not select first history when a selection exists', async () => { + useAppModeStore().selectedOutputs.push('1') const results = [makeResult('a.png')] const asset = makeAsset('a1', 'job-1', { allOutputs: results, diff --git a/src/renderer/extensions/linearMode/useOutputHistory.ts b/src/renderer/extensions/linearMode/useOutputHistory.ts index 9a692e2085..134b82fab5 100644 --- a/src/renderer/extensions/linearMode/useOutputHistory.ts +++ b/src/renderer/extensions/linearMode/useOutputHistory.ts @@ -65,7 +65,7 @@ export function useOutputHistory(): { function filterByOutputNodes(items: ResultItemImpl[]): ResultItemImpl[] { const nodeIds = appModeStore.selectedOutputs - if (!nodeIds.length) return items + if (!nodeIds.length) return [] return items.filter((r) => nodeIds.some((id) => String(id) === String(r.nodeId)) )