diff --git a/frontend/app/waveenv/waveenv.ts b/frontend/app/waveenv/waveenv.ts index 365bf74be9..f643c24295 100644 --- a/frontend/app/waveenv/waveenv.ts +++ b/frontend/app/waveenv/waveenv.ts @@ -16,8 +16,11 @@ export type BlockMetaKeyAtomFnType export type WaveEnv = { electron: ElectronApi; rpc: RpcApiType; + platform: NodeJS.Platform; configAtoms: ConfigAtoms; isDev: () => boolean; + isWindows: () => boolean; + isMacOS: () => boolean; atoms: GlobalAtomsType; createBlock: (blockDef: BlockDef, magnified?: boolean, ephemeral?: boolean) => Promise; showContextMenu: (menu: ContextMenuItem[], e: React.MouseEvent) => void; diff --git a/frontend/app/waveenv/waveenvimpl.ts b/frontend/app/waveenv/waveenvimpl.ts index 50aa4ef7ea..0f2461fcf6 100644 --- a/frontend/app/waveenv/waveenvimpl.ts +++ b/frontend/app/waveenv/waveenvimpl.ts @@ -13,6 +13,7 @@ import { } from "@/app/store/global"; import { RpcApi } from "@/app/store/wshclientapi"; import { WaveEnv } from "@/app/waveenv/waveenv"; +import { isMacOS, isWindows, PLATFORM } from "@/util/platformutil"; const configAtoms = new Proxy({} as WaveEnv["configAtoms"], { get(_target: WaveEnv["configAtoms"], key: K) { @@ -24,8 +25,11 @@ export function makeWaveEnvImpl(): WaveEnv { return { electron: (window as any).api, rpc: RpcApi, + platform: PLATFORM, configAtoms, isDev, + isWindows, + isMacOS, atoms, createBlock, showContextMenu: (menu: ContextMenuItem[], e: React.MouseEvent) => { diff --git a/frontend/preview/mock/mockwaveenv.ts b/frontend/preview/mock/mockwaveenv.ts index 913cbc1501..43b77c761a 100644 --- a/frontend/preview/mock/mockwaveenv.ts +++ b/frontend/preview/mock/mockwaveenv.ts @@ -4,6 +4,7 @@ import { getSettingsKeyAtom, makeDefaultConnStatus } from "@/app/store/global"; import { RpcApiType } from "@/app/store/wshclientapi"; import { WaveEnv } from "@/app/waveenv/waveenv"; +import { PlatformMacOS, PlatformWindows } from "@/util/platformutil"; import { Atom, atom, PrimitiveAtom } from "jotai"; import { DefaultFullConfig } from "./defaultconfig"; import { previewElectronApi } from "./preview-electron-api"; @@ -14,6 +15,7 @@ type RpcOverrides = { export type MockEnv = { isDev?: boolean; + platform?: NodeJS.Platform; settings?: Partial; rpc?: RpcOverrides; atoms?: Partial; @@ -36,6 +38,7 @@ function mergeRecords(base: Record, overrides: Record): export function mergeMockEnv(base: MockEnv, overrides: MockEnv): MockEnv { return { isDev: overrides.isDev ?? base.isDev, + platform: overrides.platform ?? base.platform, settings: mergeRecords(base.settings, overrides.settings), rpc: mergeRecords(base.rpc as any, overrides.rpc as any) as RpcOverrides, atoms: overrides.atoms != null || base.atoms != null ? { ...base.atoms, ...overrides.atoms } : undefined, @@ -146,16 +149,24 @@ export function applyMockEnvOverrides(env: WaveEnv, newOverrides: MockEnv): Mock export function makeMockWaveEnv(mockEnv?: MockEnv): MockWaveEnv { const overrides: MockEnv = mockEnv ?? {}; + const platform = overrides.platform ?? PlatformMacOS; const connStatusAtomCache = new Map>(); const waveObjectAtomCache = new Map>(); const blockMetaKeyAtomCache = new Map>(); const env = { mockEnv: overrides, - electron: overrides.electron ? { ...previewElectronApi, ...overrides.electron } : previewElectronApi, + electron: { + ...previewElectronApi, + getPlatform: () => platform, + ...overrides.electron, + }, rpc: makeMockRpc(overrides.rpc), + platform, configAtoms: makeMockConfigAtoms(overrides.settings), atoms: makeMockGlobalAtoms(overrides.settings, overrides.atoms), isDev: () => overrides.isDev ?? true, + isWindows: () => platform === PlatformWindows, + isMacOS: () => platform === PlatformMacOS, createBlock: overrides.createBlock ?? ((blockDef: BlockDef, magnified?: boolean, ephemeral?: boolean) => {