diff --git a/apps/editor/components/editor/preset-thumbnail-generator.tsx b/apps/editor/components/editor/preset-thumbnail-generator.tsx index b55a1f3a..49ee33c5 100644 --- a/apps/editor/components/editor/preset-thumbnail-generator.tsx +++ b/apps/editor/components/editor/preset-thumbnail-generator.tsx @@ -103,7 +103,10 @@ export const PresetThumbnailGenerator = () => { body: blob, headers: { 'Content-Type': 'image/png' }, }) - if (!res.ok) { + if (res.ok) { + const json = await res.json() + emitter.emit('preset:thumbnail-updated', { presetId, thumbnailUrl: json.thumbnail_url }) + } else { console.error('❌ PresetThumbnail: upload failed', await res.text()) } }, 'image/png') diff --git a/apps/editor/components/ui/panels/presets/presets-popover.tsx b/apps/editor/components/ui/panels/presets/presets-popover.tsx index 873245c2..e8970c99 100644 --- a/apps/editor/components/ui/panels/presets/presets-popover.tsx +++ b/apps/editor/components/ui/panels/presets/presets-popover.tsx @@ -2,6 +2,7 @@ import { useEffect, useState, useCallback } from 'react' import { BookMarked, Check, Globe, GlobeLock, Pencil, Plus, Save, Trash2, Users, X } from 'lucide-react' +import { emitter } from '@pascal-app/core' import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/primitives/popover' import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/primitives/tooltip' import { useAuth } from '@/features/community/lib/auth/hooks' @@ -76,6 +77,16 @@ export function PresetsPopover({ type, onApply, onSave, onOverwrite, children }: if (!isAuthenticated && tab === 'mine') setTab('community') }, [isAuthenticated, tab]) + useEffect(() => { + const handler = ({ presetId, thumbnailUrl }: { presetId: string; thumbnailUrl: string }) => { + setPresets((prev) => + prev.map((p) => (p.id === presetId ? { ...p, thumbnail_url: thumbnailUrl } : p)), + ) + } + emitter.on('preset:thumbnail-updated', handler) + return () => emitter.off('preset:thumbnail-updated', handler) + }, []) + const handleSaveNew = async () => { if (!saveName.trim()) return setSaving(true) diff --git a/packages/core/src/events/bus.ts b/packages/core/src/events/bus.ts index 8e9b9539..63c87dac 100644 --- a/packages/core/src/events/bus.ts +++ b/packages/core/src/events/bus.ts @@ -75,6 +75,7 @@ type ToolEvents = { type PresetEvents = { 'preset:generate-thumbnail': { presetId: string; nodeId: string } + 'preset:thumbnail-updated': { presetId: string; thumbnailUrl: string } } type EditorEvents = GridEvents &