mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-02-22 07:44:11 +00:00
Centraliza output key
This commit is contained in:
@@ -2,15 +2,20 @@ import { beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
import { ref } from 'vue'
|
||||
|
||||
import type { AssetItem } from '@/platform/assets/schemas/assetSchema'
|
||||
import type * as OutputAssetUtil from '@/platform/assets/utils/outputAssetUtil'
|
||||
import { useOutputStacks } from '@/platform/assets/composables/useOutputStacks'
|
||||
|
||||
const mocks = vi.hoisted(() => ({
|
||||
resolveOutputAssetItems: vi.fn()
|
||||
}))
|
||||
|
||||
vi.mock('@/platform/assets/utils/outputAssetUtil', () => ({
|
||||
resolveOutputAssetItems: mocks.resolveOutputAssetItems
|
||||
}))
|
||||
vi.mock('@/platform/assets/utils/outputAssetUtil', async (importOriginal) => {
|
||||
const actual = await importOriginal<typeof OutputAssetUtil>()
|
||||
return {
|
||||
...actual,
|
||||
resolveOutputAssetItems: mocks.resolveOutputAssetItems
|
||||
}
|
||||
})
|
||||
|
||||
type Deferred<T> = {
|
||||
promise: Promise<T>
|
||||
|
||||
@@ -3,7 +3,10 @@ import type { Ref } from 'vue'
|
||||
|
||||
import { getOutputAssetMetadata } from '@/platform/assets/schemas/assetMetadataSchema'
|
||||
import type { AssetItem } from '@/platform/assets/schemas/assetSchema'
|
||||
import { resolveOutputAssetItems } from '@/platform/assets/utils/outputAssetUtil'
|
||||
import {
|
||||
getOutputKey,
|
||||
resolveOutputAssetItems
|
||||
} from '@/platform/assets/utils/outputAssetUtil'
|
||||
|
||||
export type OutputStackListItem = {
|
||||
key: string
|
||||
@@ -109,9 +112,11 @@ export function useOutputStacks({ assets }: UseOutputStacksOptions) {
|
||||
}
|
||||
|
||||
const excludeOutputKey =
|
||||
metadata.nodeId && metadata.subfolder
|
||||
? `${metadata.nodeId}-${metadata.subfolder}-${asset.name}`
|
||||
: undefined
|
||||
getOutputKey({
|
||||
nodeId: metadata.nodeId,
|
||||
subfolder: metadata.subfolder,
|
||||
filename: asset.name
|
||||
}) ?? undefined
|
||||
|
||||
try {
|
||||
return await resolveOutputAssetItems(metadata, {
|
||||
|
||||
@@ -20,6 +20,12 @@ type ResolveOutputAssetItemsOptions = {
|
||||
excludeOutputKey?: string
|
||||
}
|
||||
|
||||
type OutputKeyParts = {
|
||||
nodeId?: string | number | null
|
||||
subfolder?: string | null
|
||||
filename?: string | null
|
||||
}
|
||||
|
||||
function shouldLoadFullOutputs(
|
||||
outputCount: OutputAssetMetadata['outputCount'],
|
||||
outputsLength: number
|
||||
@@ -31,8 +37,16 @@ function shouldLoadFullOutputs(
|
||||
)
|
||||
}
|
||||
|
||||
function getOutputKey(output: ResultItemImpl): string {
|
||||
return `${output.nodeId}-${output.subfolder}-${output.filename}`
|
||||
export function getOutputKey({
|
||||
nodeId,
|
||||
subfolder,
|
||||
filename
|
||||
}: OutputKeyParts): string | null {
|
||||
if (!nodeId || !subfolder || !filename) {
|
||||
return null
|
||||
}
|
||||
|
||||
return `${nodeId}-${subfolder}-${filename}`
|
||||
}
|
||||
|
||||
function mapOutputsToAssetItems({
|
||||
@@ -45,12 +59,14 @@ function mapOutputsToAssetItems({
|
||||
}: OutputAssetMapOptions): AssetItem[] {
|
||||
const createdAtValue = createdAt ?? new Date().toISOString()
|
||||
|
||||
return outputs
|
||||
.filter(
|
||||
(output) => output.filename && getOutputKey(output) !== excludeOutputKey
|
||||
)
|
||||
.map((output) => ({
|
||||
id: `${promptId}-${getOutputKey(output)}`,
|
||||
return outputs.reduce<AssetItem[]>((items, output) => {
|
||||
const outputKey = getOutputKey(output)
|
||||
if (!output.filename || !outputKey || outputKey === excludeOutputKey) {
|
||||
return items
|
||||
}
|
||||
|
||||
items.push({
|
||||
id: `${promptId}-${outputKey}`,
|
||||
name: output.filename,
|
||||
size: 0,
|
||||
created_at: createdAtValue,
|
||||
@@ -63,7 +79,10 @@ function mapOutputsToAssetItems({
|
||||
executionTimeInSeconds,
|
||||
workflow
|
||||
}
|
||||
}))
|
||||
})
|
||||
|
||||
return items
|
||||
}, [])
|
||||
}
|
||||
|
||||
export async function resolveOutputAssetItems(
|
||||
|
||||
Reference in New Issue
Block a user