diff --git a/apps/desktop/app/onboarding/page.tsx b/apps/desktop/app/onboarding/page.tsx index 52476453..a7782a88 100644 --- a/apps/desktop/app/onboarding/page.tsx +++ b/apps/desktop/app/onboarding/page.tsx @@ -24,6 +24,7 @@ import { updateDesktopOnboardingStatus, } from "@/lib/onboarding" import { + chooseSmfsMountPath, getDefaultSmfsContainerTag, getSmfsState, mountSmfs, @@ -340,6 +341,9 @@ function FilesystemStep({ }) { const [tag, setTag] = useState("sm_fs_desktop") const [status, setStatus] = useState(null) + const [selectedMountPath, setSelectedMountPath] = useState( + null, + ) const [loading, setLoading] = useState(true) const [busy, setBusy] = useState(false) const [error, setError] = useState(null) @@ -353,7 +357,16 @@ function FilesystemStep({ getSmfsState(), ]) setTag(defaultTag) - setStatus(statuses[0] ?? null) + const nextStatus = statuses[0] ?? null + setStatus(nextStatus) + if ( + nextStatus?.mountPath && + (nextStatus.mountPathConfigured || + nextStatus.state === "mounted" || + nextStatus.state === "external") + ) { + setSelectedMountPath(nextStatus.mountPath) + } } catch (err) { setError(formatUnknownError(err, "Could not load filesystem status")) } finally { @@ -369,7 +382,12 @@ function FilesystemStep({ setError(null) setBusy(true) try { - setStatus(await mountSmfs(tag)) + if (!selectedMountPath) { + throw new Error("Choose a folder before mounting SMFS") + } + const nextStatus = await mountSmfs(tag, selectedMountPath) + setStatus(nextStatus) + setSelectedMountPath(nextStatus.mountPath) } catch (err) { setError(formatUnknownError(err, "Could not mount memory folder")) } finally { @@ -377,7 +395,25 @@ function FilesystemStep({ } } + async function chooseFolder() { + setError(null) + setBusy(true) + try { + const path = await chooseSmfsMountPath() + if (path) { + setSelectedMountPath(path) + } + } catch (err) { + setError(formatUnknownError(err, "Could not choose mount folder")) + } finally { + setBusy(false) + } + } + const mounted = status?.state === "mounted" || status?.state === "external" + const mountPath = + selectedMountPath ?? (status?.mountPathConfigured ? status.mountPath : null) + const canMount = Boolean(mountPath) && !loading && !busy return (
@@ -410,8 +446,11 @@ function FilesystemStep({
-

- {status?.tag ?? tag} +

+ {mountPath ? compactPath(mountPath) : "No folder selected"}

{error ?

{error}

: null} @@ -438,16 +477,25 @@ function FilesystemStep({ Mount folder

- Create the local memory folder for this Mac + Choose or create the local folder SMFS should mount into

+