From 52787c7fc0134c45697fdce99af129231b0c87bb Mon Sep 17 00:00:00 2001 From: bflatastic Date: Wed, 13 May 2026 21:57:09 +0700 Subject: [PATCH] add initial model selection on edit 3d --- .../pagescene/src/lib/Stage3DBody.tsx | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/frontend/libs/components/pagescene/src/lib/Stage3DBody.tsx b/frontend/libs/components/pagescene/src/lib/Stage3DBody.tsx index 03c0ac8cc2..d4930ccf2a 100644 --- a/frontend/libs/components/pagescene/src/lib/Stage3DBody.tsx +++ b/frontend/libs/components/pagescene/src/lib/Stage3DBody.tsx @@ -22,6 +22,7 @@ import { import { STAGE_3D_PAGE_MODEL_LIST, ModelPage, + defaultModelForPage, useClassyModelSelectorStore, useSelectedImageModel, useSelectedProviderForModel, @@ -132,6 +133,22 @@ export const Stage3DBody = ({ const setSelectedModel = useClassyModelSelectorStore( (s) => s.setSelectedModel, ); + + // Seed the default model on mount when we're the only model picker + // on the page. ClassyModelSelector does this itself on mount, but in + // the prompt-box placement we don't render it — so without this + // effect the store stays empty and the trigger has no icon until the + // user opens the popover and picks a model manually. + useEffect(() => { + if (modelSelectorPlacement !== "prompt-box") return; + if (selectedImageModel) return; + const models = STAGE_3D_PAGE_MODEL_LIST.map((i) => i.model).filter( + (m): m is NonNullable => m !== undefined, + ); + const def = defaultModelForPage(models, PAGE_ID); + if (def) setSelectedModel(PAGE_ID, def); + }, [modelSelectorPlacement, selectedImageModel, setSelectedModel]); + const inlineModelItems: PopoverItem[] = useMemo( () => STAGE_3D_PAGE_MODEL_LIST.map((item) => ({