summaryrefslogtreecommitdiffhomepage
path: root/src/App.svelte
diff options
context:
space:
mode:
Diffstat (limited to 'src/App.svelte')
-rw-r--r--src/App.svelte21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/App.svelte b/src/App.svelte
index 27c9271..32eaf70 100644
--- a/src/App.svelte
+++ b/src/App.svelte
@@ -1,6 +1,7 @@
<script lang="ts">
import { App, createAppStore } from "./app";
import { createHistoryAdapter } from "./adapters/history";
+ import type { WorkspaceLayoutPort } from "./features/plugins";
import {
createWorkspaceHttp,
createWorkspaceStore,
@@ -65,6 +66,23 @@
function navigate(path: string): void {
history.navigate(path);
}
+
+ // plan 04 ยง4.4: the workspace plugins modal's "Reset layout to default"
+ // affordance. The port gates on an ACTIVE layout provider (read through the
+ // store's reactive getters, so enable/disable mid-session flips the button)
+ // and resets via the layout store (`DELETE /workspaces/:id/layout` โ†’ the
+ // server re-seeds โ†’ the WS broadcast re-renders every client).
+ const layoutPort: WorkspaceLayoutPort = {
+ get providerActive() {
+ return store.layout.providerState === "present";
+ },
+ reset: (workspaceId) => store.layout.resetToDefault(workspaceId),
+ // The plugins modal's per-workspace toggles can change WHICH layout
+ // plugin serves the workspace (the per-workspace activation rule) โ€” the
+ // store re-probes only the active workspace (non-active toggles are
+ // picked up by their own probe on switch).
+ refresh: (workspaceId) => store.layout.onWorkspacePluginsChanged(workspaceId),
+ };
</script>
{#if route.kind === "home"}
@@ -73,6 +91,9 @@
onNavigate={navigate}
computers={store.computers}
hasActive={(id) => store.workspaceHasActiveConversations(id)}
+ plugins={store.plugins}
+ layout={layoutPort}
+ tiles={store.tileLayout}
/>
{:else}
<App {store} onNavigate={navigate} />