From 8a0d1158c4d7e970cb91e1adf4838e5efdbb39ff Mon Sep 17 00:00:00 2001 From: Faton Ramadani Date: Tue, 28 Feb 2023 15:49:57 +0100 Subject: [PATCH] feat(frontend): App drawer (#1246) * feat(frontend): app drawer * feat(frontend): app drawer * feat(frontend): app drawer * feat(frontend): app drawer wip * feat(frontend): drawer wip * feat(frontend): drawer wip * feat(frontend): app missing prop * feat(frontend): revert drawer changes * feat(frontend): highlight subgrid --- .../components/layout/AppContainer.svelte | 1 + .../apps/components/layout/AppDrawer.svelte | 89 +++++++++++++++++++ .../apps/components/layout/AppTabs.svelte | 1 + .../components/apps/editor/AppEditor.svelte | 14 +-- .../components/apps/editor/AppPreview.svelte | 3 + .../components/apps/editor/GridEditor.svelte | 5 +- .../apps/editor/SubGridEditor.svelte | 14 ++- .../apps/editor/component/Component.svelte | 3 + .../apps/editor/component/components.ts | 64 ++++++++++++- .../components/apps/editor/component/sets.ts | 7 +- .../components/common/drawer/Drawer.svelte | 12 ++- .../common/drawer/DrawerContent.svelte | 1 - frontend/tsconfig.json | 3 +- 13 files changed, 196 insertions(+), 21 deletions(-) create mode 100644 frontend/src/lib/components/apps/components/layout/AppDrawer.svelte diff --git a/frontend/src/lib/components/apps/components/layout/AppContainer.svelte b/frontend/src/lib/components/apps/components/layout/AppContainer.svelte index 6ece31ca0a..7774633d7b 100644 --- a/frontend/src/lib/components/apps/components/layout/AppContainer.svelte +++ b/frontend/src/lib/components/apps/components/layout/AppContainer.svelte @@ -36,6 +36,7 @@ {#if $app.subgrids?.[`${id}-0`]} + import { getContext } from 'svelte' + import SubGridEditor from '../../editor/SubGridEditor.svelte' + import type { AppInput } from '../../inputType' + import type { AppEditorContext, ComponentCustomCSS } from '../../types' + import InputValue from '../helpers/InputValue.svelte' + import Portal from 'svelte-portal' + import { concatCustomCss } from '../../utils' + import { Button, ButtonType, Drawer, DrawerContent } from '$lib/components/common' + import { twMerge } from 'tailwind-merge' + import { AlignWrapper } from '../helpers' + + export let customCss: ComponentCustomCSS<'container'> | undefined = undefined + export let id: string + export let configuration: Record + export let horizontalAlignment: 'left' | 'center' | 'right' | undefined = undefined + export let verticalAlignment: 'top' | 'center' | 'bottom' | undefined = undefined + export let noWFull = false + + const { app, focusedGrid, selectedComponent } = getContext('AppEditorContext') + + let gridContent: string[] | undefined = undefined + let noPadding: boolean | undefined = undefined + let drawerTitle: string | undefined = undefined + let appDrawer: Drawer + + let labelValue: string + let color: ButtonType.Color + let size: ButtonType.Size + let disabled: boolean | undefined = undefined + let fillContainer: boolean | undefined = undefined + + $: css = concatCustomCss($app.css?.containercomponent, customCss) + + +
+ + + +
+ + + + + + + + + + + + + {#if $app.subgrids?.[`${id}-0`]} + { + $selectedComponent = id + }} + /> + {/if} + + + diff --git a/frontend/src/lib/components/apps/components/layout/AppTabs.svelte b/frontend/src/lib/components/apps/components/layout/AppTabs.svelte index 9e655495ca..0f3d05d638 100644 --- a/frontend/src/lib/components/apps/components/layout/AppTabs.svelte +++ b/frontend/src/lib/components/apps/components/layout/AppTabs.svelte @@ -72,6 +72,7 @@ {#if $app.subgrids} {#each tabs ?? [] as res, i} Promise>>({}) const errorByComponent = writable>({}) - const focusedGrid = writable(undefined) setContext('AppEditorContext', { @@ -126,7 +125,7 @@ {#if $connectingInput.opened}
{/if} {#if !$userStore?.operator} @@ -172,14 +171,17 @@ style={$appStore.css?.['app']?.['viewer']?.style} >
{#if $appStore.grid}
+ +
{/if}
diff --git a/frontend/src/lib/components/apps/editor/AppPreview.svelte b/frontend/src/lib/components/apps/editor/AppPreview.svelte index 81c3dcdd23..187fe04f75 100644 --- a/frontend/src/lib/components/apps/editor/AppPreview.svelte +++ b/frontend/src/lib/components/apps/editor/AppPreview.svelte @@ -76,6 +76,8 @@ $: lockedClasses = isLocked ? '!max-h-[400px] overflow-hidden pointer-events-none' : '' +
+
+
('AppEditorContext') - let pointerdown = false + $: highlight = id === $focusedGrid?.parentComponentId && $selectedComponent !== id + let pointerdown = false let onComponent: string | undefined = undefined const onpointerdown = (e) => { @@ -64,11 +65,16 @@ diff --git a/frontend/src/lib/components/apps/editor/component/components.ts b/frontend/src/lib/components/apps/editor/component/components.ts index d14b762eed..d0d1e5000b 100644 --- a/frontend/src/lib/components/apps/editor/component/components.ts +++ b/frontend/src/lib/components/apps/editor/component/components.ts @@ -27,7 +27,8 @@ import { SeparatorHorizontal, SeparatorVertical, Paperclip, - Image + Image, + SidebarClose } from 'lucide-svelte' import type { BaseAppComponent } from '../../types' @@ -78,6 +79,7 @@ export type TabsComponent = BaseComponent<'tabscomponent'> & { tabs: string[] } export type ContainerComponent = BaseComponent<'containercomponent'> +export type DrawerComponent = BaseComponent<'drawercomponent'> export type AppComponent = BaseAppComponent & ( @@ -112,6 +114,7 @@ export type AppComponent = BaseAppComponent & | FileInputComponent | ImageComponent | AggridComponent + | DrawerComponent ) export type AppComponentDimensions = `${IntRange< @@ -1274,5 +1277,64 @@ Hello \${ctx.username} customCss: {}, card: false } + }, + drawercomponent: { + name: 'Drawer', + icon: SidebarClose, + dims: '1:1-2:1', + data: { + softWrap: true, + id: '', + type: 'drawercomponent', + horizontalAlignment: 'center', + verticalAlignment: 'center', + configuration: { + noPadding: { + type: 'static', + fieldType: 'boolean', + value: false, + onlyStatic: true + }, + drawerTitle: { + type: 'static', + fieldType: 'text', + value: 'Drawer title', + onlyStatic: true + }, + label: { + type: 'static', + fieldType: 'text', + value: 'Press me' + }, + color: { + fieldType: 'select', + type: 'static', + onlyStatic: true, + optionValuesKey: 'buttonColorOptions', + value: 'blue' + }, + size: { + fieldType: 'select', + type: 'static', + onlyStatic: true, + optionValuesKey: 'buttonSizeOptions', + value: 'xs' + }, + fillContainer: { + fieldType: 'boolean', + type: 'static', + onlyStatic: true, + value: false + }, + disabled: { + fieldType: 'boolean', + type: 'eval', + expr: 'false' + } + }, + componentInput: undefined, + card: false, + numberOfSubgrids: 1 + } } } diff --git a/frontend/src/lib/components/apps/editor/component/sets.ts b/frontend/src/lib/components/apps/editor/component/sets.ts index 6944eeb852..734132080e 100644 --- a/frontend/src/lib/components/apps/editor/component/sets.ts +++ b/frontend/src/lib/components/apps/editor/component/sets.ts @@ -6,7 +6,8 @@ const layout: ComponentSet = { 'tabscomponent', 'containercomponent', 'horizontaldividercomponent', - 'verticaldividercomponent' + 'verticaldividercomponent', + 'drawercomponent' ] } as const @@ -46,8 +47,8 @@ const display: ComponentSet = { 'plotlycomponent', 'scatterchartcomponent', 'timeseriescomponent', - 'displaycomponent', + 'displaycomponent' ] } as const -export const COMPONENT_SETS = [layout, buttons, inputs, display] as const \ No newline at end of file +export const COMPONENT_SETS = [layout, buttons, inputs, display] as const diff --git a/frontend/src/lib/components/common/drawer/Drawer.svelte b/frontend/src/lib/components/common/drawer/Drawer.svelte index 2396675061..b4d2bb5e61 100644 --- a/frontend/src/lib/components/common/drawer/Drawer.svelte +++ b/frontend/src/lib/components/common/drawer/Drawer.svelte @@ -76,9 +76,15 @@ -