mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-02-07 16:40:05 +00:00
assign node images for backwards compat
This commit is contained in:
@@ -197,6 +197,17 @@ watch(
|
||||
{ deep: true, immediate: true }
|
||||
)
|
||||
|
||||
/**
|
||||
* Sync node.imgs for backwards compatibility with legacy systems (e.g., Copy Image).
|
||||
*/
|
||||
const syncNodeImgs = () => {
|
||||
if (!props.nodeId || !currentImageEl.value) return
|
||||
const node = app.rootGraph?.getNodeById(props.nodeId)
|
||||
if (!node) return
|
||||
node.imgs = [currentImageEl.value]
|
||||
node.imageIndex = currentIndex.value
|
||||
}
|
||||
|
||||
// Event handlers
|
||||
const handleImageLoad = (event: Event) => {
|
||||
if (!event.target || !(event.target instanceof HTMLImageElement)) return
|
||||
@@ -207,6 +218,7 @@ const handleImageLoad = (event: Event) => {
|
||||
if (img.naturalWidth && img.naturalHeight) {
|
||||
actualDimensions.value = `${img.naturalWidth} x ${img.naturalHeight}`
|
||||
}
|
||||
syncNodeImgs()
|
||||
}
|
||||
|
||||
const handleImageError = () => {
|
||||
@@ -216,14 +228,11 @@ const handleImageError = () => {
|
||||
actualDimensions.value = null
|
||||
}
|
||||
|
||||
// In vueNodes mode, we need to set them manually before opening the mask editor.
|
||||
const setupNodeForMaskEditor = () => {
|
||||
if (!props.nodeId || !currentImageEl.value) return
|
||||
syncNodeImgs()
|
||||
if (!props.nodeId) return
|
||||
const node = app.rootGraph?.getNodeById(props.nodeId)
|
||||
if (!node) return
|
||||
node.imageIndex = currentIndex.value
|
||||
node.imgs = [currentImageEl.value]
|
||||
app.canvas?.select(node)
|
||||
if (node) app.canvas?.select(node)
|
||||
}
|
||||
|
||||
const handleEditMask = () => {
|
||||
|
||||
@@ -12,6 +12,22 @@ vi.mock('@/base/common/downloadUtil', () => ({
|
||||
downloadFile: vi.fn()
|
||||
}))
|
||||
|
||||
// Mock app for node.imgs sync tests
|
||||
const mockNode: {
|
||||
imgs?: HTMLImageElement[] | undefined
|
||||
imageIndex?: number | null
|
||||
} = {}
|
||||
vi.mock('@/scripts/app', () => ({
|
||||
app: {
|
||||
rootGraph: {
|
||||
getNodeById: vi.fn(() => mockNode)
|
||||
},
|
||||
canvas: {
|
||||
select: vi.fn()
|
||||
}
|
||||
}
|
||||
}))
|
||||
|
||||
const i18n = createI18n({
|
||||
legacy: false,
|
||||
locale: 'en',
|
||||
@@ -297,4 +313,27 @@ describe('ImagePreview', () => {
|
||||
expect(imgElement.exists()).toBe(true)
|
||||
expect(imgElement.attributes('alt')).toBe('Node output 2')
|
||||
})
|
||||
|
||||
it('syncs node.imgs on image load for legacy compatibility', async () => {
|
||||
// Reset mock node state
|
||||
delete mockNode.imgs
|
||||
delete mockNode.imageIndex
|
||||
|
||||
const wrapper = mountImagePreview({
|
||||
imageUrls: [defaultProps.imageUrls[0]],
|
||||
nodeId: 'test-node-123'
|
||||
})
|
||||
|
||||
const img = wrapper.find('img')
|
||||
expect(img.exists()).toBe(true)
|
||||
|
||||
// Simulate image load event
|
||||
await img.trigger('load')
|
||||
await nextTick()
|
||||
|
||||
// Verify node.imgs was synced
|
||||
expect(mockNode.imgs).toBeDefined()
|
||||
expect(mockNode.imgs).toHaveLength(1)
|
||||
expect(mockNode.imageIndex).toBe(0)
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user