diff --git a/frontend/libs/components/settings-modal/src/lib/MiscSettingsPane.tsx b/frontend/libs/components/settings-modal/src/lib/MiscSettingsPane.tsx index a8467298ab..d57cfd3879 100644 --- a/frontend/libs/components/settings-modal/src/lib/MiscSettingsPane.tsx +++ b/frontend/libs/components/settings-modal/src/lib/MiscSettingsPane.tsx @@ -1,9 +1,13 @@ import { useEffect, useState } from "react"; +import { Button } from "@storyteller/ui-button"; import { Input } from "@storyteller/ui-input"; -import { AppPreferencesPayload, GetAppPreferences } from "@storyteller/tauri-api"; +import { AppPreferencesPayload, GetAppPreferences, CustomDirectory } from "@storyteller/tauri-api"; import { PreferenceName, UpdateAppPreferences } from "libs/tauri-api/src/lib/settings/UpdateAppPreference"; import { open } from '@tauri-apps/plugin-dialog'; +// NB: On the backend, we expand "$default" to mean the default system download dir. +const DEFAULT_SYSTEM_DOWNLOAD_DIRECTORY_SIGIL = "$default"; + interface MiscSettingsPaneProps { } @@ -20,7 +24,12 @@ export const MiscSettingsPane = (args: MiscSettingsPaneProps) => { fetchData(); }, []); - const downloadDirectory = preferences?.preferred_download_directory || "(default)"; + + + // NB: This might be a complex type. + const downloadDirectorySpec = preferences?.preferred_download_directory || DEFAULT_SYSTEM_DOWNLOAD_DIRECTORY_SIGIL; + const downloadDirectory = (typeof downloadDirectorySpec === "string")? downloadDirectorySpec : downloadDirectorySpec.custom; + const playSounds = preferences?.play_sounds || false; const reloadPreferences = async () => { @@ -29,14 +38,6 @@ export const MiscSettingsPane = (args: MiscSettingsPaneProps) => { setPreferences(prefs.preferences); } - const setDownloadDirectory = async (value: string) => { - await UpdateAppPreferences({ - preference: PreferenceName.PreferredDownloadDirectory, - value: value, - }); - await reloadPreferences(); - } - const setPlaySounds = async (checked: boolean) => { const value = checked ? "true" : "false"; await UpdateAppPreferences({ @@ -46,12 +47,25 @@ export const MiscSettingsPane = (args: MiscSettingsPaneProps) => { await reloadPreferences(); } - const openPicker = async () => { - const file = await open({ + const openDirectoryPicker = async () => { + let defaultPath = downloadDirectory || undefined; + + let directory = await open({ multiple: false, - directory: false, + directory: true, + defaultPath: defaultPath, }); - console.log(file); + + console.log("selected directory", directory); + + directory = directory === null ? DEFAULT_SYSTEM_DOWNLOAD_DIRECTORY_SIGIL : directory; + + await UpdateAppPreferences({ + preference: PreferenceName.PreferredDownloadDirectory, + value: directory, + }); + + await reloadPreferences(); } return (<> @@ -60,18 +74,19 @@ export const MiscSettingsPane = (args: MiscSettingsPaneProps) => { - - setDownloadDirectory((e.target as any).value)} - placeholder="Enter API Key" - /> + + +