From d8659f8ed5123500ee22fc5d81bb82c03d10ba80 Mon Sep 17 00:00:00 2001 From: Rune Harlyk Date: Sun, 18 Aug 2024 01:06:21 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=91=B1=E2=80=8D=E2=99=82=EF=B8=8F=20Adds?= =?UTF-8?q?=20layout=20manager?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/layout/DynamicLayout.svelte | 36 +++++++ .../lib/components/layout/LayoutManager.ts | 60 +++++++++++ app/src/lib/components/layout/Widget.svelte | 7 ++ .../lib/components/widget/ChartBase.svelte | 99 +++++++++++++++++++ .../components/widget/CpuUsageChart.svelte | 8 ++ app/src/routes/controller/+layout.svelte | 20 ++-- app/src/routes/controller/+page.svelte | 9 -- 7 files changed, 219 insertions(+), 20 deletions(-) create mode 100644 app/src/lib/components/layout/DynamicLayout.svelte create mode 100644 app/src/lib/components/layout/LayoutManager.ts create mode 100644 app/src/lib/components/layout/Widget.svelte create mode 100644 app/src/lib/components/widget/ChartBase.svelte create mode 100644 app/src/lib/components/widget/CpuUsageChart.svelte delete mode 100644 app/src/routes/controller/+page.svelte diff --git a/app/src/lib/components/layout/DynamicLayout.svelte b/app/src/lib/components/layout/DynamicLayout.svelte new file mode 100644 index 0000000..d68fec4 --- /dev/null +++ b/app/src/lib/components/layout/DynamicLayout.svelte @@ -0,0 +1,36 @@ + + +
+ {#if container.header} +
+
{container.header}
+
+ {/if} + +
+ {#each container.widgets as widget, index (widget.id + '-' + index)} + + {#if isWidgetConfig(widget)} + + {:else if widget.widgets} + + {/if} + + {#if index !== container.widgets.length - 1} +
+ {/if} + {/each} +
+
diff --git a/app/src/lib/components/layout/LayoutManager.ts b/app/src/lib/components/layout/LayoutManager.ts new file mode 100644 index 0000000..e5187de --- /dev/null +++ b/app/src/lib/components/layout/LayoutManager.ts @@ -0,0 +1,60 @@ +import { persistentStore } from '$lib/utilities'; +import Visualization from '$lib/components/Visualization.svelte'; +import Stream from '$lib/components/Stream.svelte'; +import CpuUsageChart from '$lib/components/widget/CpuUsageChart.svelte'; +import type { Writable } from 'svelte/store'; + +export interface WidgetConfig { + id: string | number; + component: keyof typeof WidgetComponents; + size?: number; + props?: Record; +} + +export interface WidgetContainerConfig { + id: string | number; + layout: 'row' | 'column'; + header?: string; + size?: number; + widgets: Array; +} + +export const isWidgetConfig = ( + widget: WidgetConfig | WidgetContainerConfig +): widget is WidgetConfig => 'component' in widget; + +export const WidgetComponents = { + Visualization, + Stream, + CpuUsageChart +}; + +export const controllerLayout: Writable = persistentStore( + 'controller_layout', + { + id: 'root', + layout: 'column', + widgets: [ + { + id: 'visualization', + layout: 'column', + header: 'Visualization', + size: 2, + widgets: [ + { id: 1, component: 'Visualization', size: 2, props: { debug: true } }, + { id: 2, component: 'Stream' } + ] + }, + { + id: 'charts', + layout: 'row', + header: 'Charts', + widgets: [ + { id: 3, component: 'CpuUsageChart' }, + { id: 4, component: 'CpuUsageChart' }, + { id: 5, component: 'CpuUsageChart' } + ] + } + ] + } as WidgetContainerConfig +); diff --git a/app/src/lib/components/layout/Widget.svelte b/app/src/lib/components/layout/Widget.svelte new file mode 100644 index 0000000..6e4c0f7 --- /dev/null +++ b/app/src/lib/components/layout/Widget.svelte @@ -0,0 +1,7 @@ + + +
+ +
diff --git a/app/src/lib/components/widget/ChartBase.svelte b/app/src/lib/components/widget/ChartBase.svelte new file mode 100644 index 0000000..f8bfcf6 --- /dev/null +++ b/app/src/lib/components/widget/ChartBase.svelte @@ -0,0 +1,99 @@ + + + +
+
+ +
+
\ No newline at end of file diff --git a/app/src/lib/components/widget/CpuUsageChart.svelte b/app/src/lib/components/widget/CpuUsageChart.svelte new file mode 100644 index 0000000..44a5fa8 --- /dev/null +++ b/app/src/lib/components/widget/CpuUsageChart.svelte @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/routes/controller/+layout.svelte b/app/src/routes/controller/+layout.svelte index 452f1df..f0e7d8a 100644 --- a/app/src/routes/controller/+layout.svelte +++ b/app/src/routes/controller/+layout.svelte @@ -1,15 +1,13 @@ -
- {#if !$socket} -
- -

Waiting for connection

-
- {/if} - - + +
+ + +
+ +
diff --git a/app/src/routes/controller/+page.svelte b/app/src/routes/controller/+page.svelte deleted file mode 100644 index a30d935..0000000 --- a/app/src/routes/controller/+page.svelte +++ /dev/null @@ -1,9 +0,0 @@ - - -
-
- -
-
\ No newline at end of file