diff --git a/src/backend/shared/utils/default-zod-schema-values.ts b/src/backend/shared/utils/default-zod-schema-values.ts index d0b010b5e..547fe47e9 100644 --- a/src/backend/shared/utils/default-zod-schema-values.ts +++ b/src/backend/shared/utils/default-zod-schema-values.ts @@ -20,7 +20,13 @@ import { } from 'zod' export const getDefaultSchemaValues = (schema: ZodTypeAny): unknown => { - if (schema instanceof ZodDefault) return schema._def.defaultValue() + if (schema instanceof ZodDefault) { + const innerType = schema._def.innerType as ZodTypeAny + if (innerType instanceof ZodObject) { + return getDefaultSchemaValues(innerType) + } + return schema._def.defaultValue() + } if (schema instanceof ZodObject) { const shape = schema.shape return Object.fromEntries(Object.entries(shape).map(([k, v]) => [k, getDefaultSchemaValues(v as ZodTypeAny)])) diff --git a/src/frontend/components/_features/[start]/new-project/steps/third-step.tsx b/src/frontend/components/_features/[start]/new-project/steps/third-step.tsx index e9e5956fd..26f78a7bf 100644 --- a/src/frontend/components/_features/[start]/new-project/steps/third-step.tsx +++ b/src/frontend/components/_features/[start]/new-project/steps/third-step.tsx @@ -42,9 +42,7 @@ const Step3 = ({ onPrev, onFinish, onClose }: { onPrev: () => void; onFinish: () const [intervalValue, setIntervalValue] = useState('T#20ms') const projectPort = useProject() const { - projectActions: { setProject }, - deviceActions: { setDeviceDefinitions }, - workspaceActions: { setEditingState }, + sharedWorkspaceActions: { handleOpenProjectResponse }, } = useOpenPLCStore() const handleFormSubmit: SubmitHandler = async (data) => { @@ -73,18 +71,7 @@ const Step3 = ({ onPrev, onFinish, onClose }: { onPrev: () => void; onFinish: () return } - // Hydrate store with returned project data - setProject({ - meta: result.data.meta, - data: result.data.projectData, - }) - if (result.data.deviceConfiguration || result.data.devicePinMapping) { - setDeviceDefinitions({ - configuration: result.data.deviceConfiguration, - pinMapping: result.data.devicePinMapping, - }) - } - setEditingState('saved') + handleOpenProjectResponse(result.data) } catch (_error) { toast({ title: 'Cannot create a project!', diff --git a/src/middleware/editor-platform.ts b/src/middleware/editor-platform.ts index 76c7ec040..3a9168b9a 100644 --- a/src/middleware/editor-platform.ts +++ b/src/middleware/editor-platform.ts @@ -38,6 +38,10 @@ export function setRuntimeIpAddress(ip: string): void { _runtimeIpAddress = ip } +// macOS has a native application menu bar; Windows and Linux do not +// (the Electron menu is hidden on those platforms — see menu.ts buildDefaultTemplate). +const isMac = navigator.platform.startsWith('Mac') + /** * Editor platform ports — all port interfaces wired to Electron IPC bridge. */ @@ -54,5 +58,5 @@ export const editorPorts: PlatformPorts = { accelerator: createEditorAcceleratorAdapter(), theme: createEditorThemeAdapter(), versionControl: createEditorVersionControlAdapter(), - capabilities: { ...EDITOR_CAPABILITIES, isDevMode: process.env.NODE_ENV === 'development' }, + capabilities: { ...EDITOR_CAPABILITIES, isDevMode: process.env.NODE_ENV === 'development', hasNativeMenu: isMac }, }