onyx-tasks/apps/tauri/src/App.svelte
Tristan Michael 50d859ef80 Refactor workspaces to use UUID keys
Change workspace identifiers from display names to UUID strings so
multiple workspaces can share the same display name. WorkspaceConfig now
stores a name field; add_workspace returns a generated UUID. Update all
CLI, Tauri commands, frontend stores and screens, WebDAV managed
directories, and tests to use/resolve workspace IDs; add helpers
find_by_name/resolve_name to map display names to IDs when needed. This
removes duplicate-name checks, avoids filesystem conflicts, and
preserves display names while using stable unique IDs internally.
2026-04-05 14:58:31 -07:00

58 lines
2.3 KiB
Svelte

<script lang="ts">
import { onMount } from "svelte";
import { platform } from "@tauri-apps/plugin-os";
import { app } from "./lib/stores/app.svelte";
import SetupScreen from "./lib/screens/SetupScreen.svelte";
import TasksScreen from "./lib/screens/TasksScreen.svelte";
const isLinux = platform() === "linux";
onMount(() => {
app.loadConfig();
});
</script>
<div class={app.isDark ? "dark" : ""} data-theme={app.currentTheme ?? ""}>
<div class="h-screen w-screen" class:p-2={isLinux}>
<div
class="relative h-full w-full overflow-hidden bg-surface-light text-text-light dark:bg-surface-dark dark:text-text-dark"
class:rounded-xl={isLinux}
class:linux-window-border={isLinux}
style="container-type: inline-size"
>
{#if app.error}
<div
class="absolute top-0 left-0 right-0 z-50 flex items-center justify-between bg-danger px-4 py-2 text-sm text-white"
>
<span>{app.error}</span>
<button onclick={() => app.clearError()} class="ml-2 font-bold"></button>
</div>
{/if}
{#if app.screen === "missing"}
<div class="flex h-full items-center justify-center p-6">
<div class="w-full max-w-sm rounded-2xl bg-card-light p-8 shadow-lg dark:bg-card-dark">
<h1 class="mb-1 text-2xl font-bold">Workspace Not Found</h1>
<p class="mb-2 text-sm text-text-secondary-light dark:text-text-secondary-dark">
The workspace <strong>{app.missingWorkspace && app.config?.workspaces[app.missingWorkspace]?.name || "Unknown"}</strong> could not be opened. Its folder may have been moved or deleted.
</p>
<p class="mb-6 text-sm text-text-secondary-light dark:text-text-secondary-dark">
It will be removed from your workspace list. You can re-add it if the folder becomes available again.
</p>
<button
onclick={() => app.forgetMissingWorkspace()}
class="w-full rounded-lg bg-primary py-2.5 text-sm font-medium text-white hover:bg-primary-hover"
>
Continue
</button>
</div>
</div>
{:else if app.screen === "setup"}
<SetupScreen cancellable={app.hasWorkspace} />
{:else}
<TasksScreen />
{/if}
</div>
</div>
</div>