Address editor-mode review: mode↔focus↔rail syncing
Build image / build-and-push (push) Successful in 11s
Build image / build-and-push (push) Successful in 11s
Gadfly on #99, the real ones — all in the mode/focus/rail interplay: - (3 models) Closing a journal/assistant rail while a bed was focused hard-set mode='fixtures', docking the OBJECT palette inside the focused bed with the seed tray unreachable. Derive it: closing a panel returns to Plants if still focused, else Fixtures. The canvas-mode effect now also follows UN-focus (plants→fixtures) and won't override a panel mode. - (2 models) Plants mode on a focused non-plantable object (reachable via a ?focus= deep link) showed the misleading "tap a bed" hint and no way out on mobile. Now it says what's wrong and offers Done (exit focus). - Selecting an object leaves a panel mode, so closing the inspector can't strand the bar on Journal/Assistant with nothing open. - Tapping Fixtures steps out of a focused bed (you're arranging again). - Viewer mode bar drops Fixtures/Plants (a viewer can't place anything), leaving Journal + Assistant. - Safety: if the assistant capability flips off live while it's the active mode, fall back to a canvas mode and close the orphaned chat rail. Maintainability: extracted the shared seed-tray + Done + Clear cluster into PlantPlacementTools (was duplicated between the desktop focus toolbar and the mobile Plants strip); DEFAULT_MODE const replaces the twice-hardcoded 'fixtures'; selectMode reads the reactive railTab, not getState(). Verified live at 390px: focus a bed → Plants; open journal → close → back to Plants (tray), not the Fixtures palette; tap Fixtures → exits focus. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_01H3zbym8Doka2d7D48maSgZ
This commit is contained in:
@@ -18,6 +18,9 @@ export const MAX_SCALE = 20 // px per cm — fully zoomed in
|
||||
// side-column layout and treats this as a lighter hint.
|
||||
export type EditorMode = 'fixtures' | 'plants' | 'journal' | 'assistant'
|
||||
|
||||
// Where the editor starts, and where it returns on a garden switch.
|
||||
export const DEFAULT_MODE: EditorMode = 'fixtures'
|
||||
|
||||
interface EditorState {
|
||||
viewport: Viewport
|
||||
setViewport: (next: Viewport | ((prev: Viewport) => Viewport)) => void
|
||||
@@ -94,7 +97,7 @@ export const useEditorStore = create<EditorState>((set) => ({
|
||||
viewport: { tx: 0, ty: 0, scale: 1 },
|
||||
setViewport: (next) => set((s) => ({ viewport: typeof next === 'function' ? next(s.viewport) : next })),
|
||||
|
||||
mode: 'fixtures',
|
||||
mode: DEFAULT_MODE,
|
||||
setMode: (mode) => set({ mode }),
|
||||
|
||||
selectedId: null,
|
||||
@@ -144,6 +147,6 @@ export const useEditorStore = create<EditorState>((set) => ({
|
||||
railTab: null,
|
||||
seasonYear: null,
|
||||
journalObjectId: null,
|
||||
mode: 'fixtures',
|
||||
mode: DEFAULT_MODE,
|
||||
}),
|
||||
}))
|
||||
|
||||
Reference in New Issue
Block a user