From 68ddc672add7d71bc4cafe472d2bb5a720f0077e Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Sat, 18 Mar 2023 18:15:15 +0100 Subject: [PATCH] more typescript type safety tricks --- .../apps/components/buttons/AppButton.svelte | 36 ++++--------------- .../apps/components/display/AppImage.svelte | 32 ++++++++++------- .../apps/components/helpers/Loader.svelte | 20 +++++++++++ .../helpers/NonRunnableComponent.svelte | 10 +----- .../lib/components/apps/editor/appUtils.ts | 14 ++++++++ .../(logged)/apps/get/[...path]/+page.svelte | 2 +- 6 files changed, 62 insertions(+), 52 deletions(-) create mode 100644 frontend/src/lib/components/apps/components/helpers/Loader.svelte diff --git a/frontend/src/lib/components/apps/components/buttons/AppButton.svelte b/frontend/src/lib/components/apps/components/buttons/AppButton.svelte index eb59d736c1..18b6fd8919 100644 --- a/frontend/src/lib/components/apps/components/buttons/AppButton.svelte +++ b/frontend/src/lib/components/apps/components/buttons/AppButton.svelte @@ -11,8 +11,8 @@ import { loadIcon } from '../icon' import { twMerge } from 'tailwind-merge' import { goto } from '$app/navigation' - import { initOutput } from '../../editor/appUtils' - import { configurationKeys } from '../../editor/component' + import { initConfig, initOutput } from '../../editor/appUtils' + import { components, configurationKeys } from '../../editor/component' export let id: string export let componentInput: AppInput | undefined @@ -38,32 +38,10 @@ let runnableComponent: RunnableComponent - // let labelValue: string - // let color: ButtonType.Color - // let size: ButtonType.Size - // let disabled: boolean | undefined = undefined - // let fillContainer: boolean | undefined = undefined - // let gotoUrl: string | undefined = undefined - // let gotoNewTab: boolean | undefined = undefined - let isLoading: boolean = false let ownClick: boolean = false - // let beforeIcon: undefined | string = undefined - // let afterIcon: undefined | string = undefined - - let resolvedConfig = {} as { - beforeIcon?: string - afterIcon?: string - label?: string - color?: ButtonType.Color - size?: ButtonType.Size - disabled?: boolean - fillContainer?: boolean - gotoUrl?: string - gotoNewTab?: boolean - triggerOnAppLoad?: boolean - } + let resolvedConfig = initConfig(components['buttoncomponent'].initialData.configuration) $: initializing = resolvedConfig?.label == undefined @@ -123,11 +101,11 @@ ownClick = true if (!runnableComponent) { - if (resolvedConfig.gotoUrl) { + if (resolvedConfig.goto) { if (resolvedConfig.gotoNewTab) { - window.open(resolvedConfig.gotoUrl, '_blank') + window.open(resolvedConfig.goto, '_blank') } else { - goto(resolvedConfig.gotoUrl) + goto(resolvedConfig.goto) } } } else { @@ -147,7 +125,7 @@ {id} {extraQueryParams} autoRefresh={false} - goto={resolvedConfig.gotoUrl} + goto={resolvedConfig.goto} gotoNewTab={resolvedConfig.gotoNewTab} {render} > diff --git a/frontend/src/lib/components/apps/components/display/AppImage.svelte b/frontend/src/lib/components/apps/components/display/AppImage.svelte index 4273cd00ef..6d4960ff07 100644 --- a/frontend/src/lib/components/apps/components/display/AppImage.svelte +++ b/frontend/src/lib/components/apps/components/display/AppImage.svelte @@ -1,10 +1,13 @@ - - - +{#each configurationKeys['imagecomponent'] as key (key)} + +{/each} {#if render} - {altText} + + {resolvedConfig.altText} + {/if} diff --git a/frontend/src/lib/components/apps/components/helpers/Loader.svelte b/frontend/src/lib/components/apps/components/helpers/Loader.svelte new file mode 100644 index 0000000000..650e749b59 --- /dev/null +++ b/frontend/src/lib/components/apps/components/helpers/Loader.svelte @@ -0,0 +1,20 @@ + + +{#if !loading} + +{:else} +
+
+ + Loading +
+
+{/if} diff --git a/frontend/src/lib/components/apps/components/helpers/NonRunnableComponent.svelte b/frontend/src/lib/components/apps/components/helpers/NonRunnableComponent.svelte index d2894e159b..84129c7b9a 100644 --- a/frontend/src/lib/components/apps/components/helpers/NonRunnableComponent.svelte +++ b/frontend/src/lib/components/apps/components/helpers/NonRunnableComponent.svelte @@ -34,13 +34,5 @@ {#if render} {:else} -
-
- - Loading -
-
+
{/if} diff --git a/frontend/src/lib/components/apps/editor/appUtils.ts b/frontend/src/lib/components/apps/editor/appUtils.ts index c2a3aa6241..01daf9c36e 100644 --- a/frontend/src/lib/components/apps/editor/appUtils.ts +++ b/frontend/src/lib/components/apps/editor/appUtils.ts @@ -21,6 +21,7 @@ import { allItems } from '../utils' import type { Output, World } from '../rx' import gridHelp from '../svelte-grid/utils/helper' import type { FilledItem } from '../svelte-grid/types' +import type { EvalAppInput, StaticAppInput } from '../inputType' function findGridItemById( root: GridItem[], @@ -366,6 +367,19 @@ export function initOutput>( Object.entries(init).map(([key, value]) => [key, world.newOutput(id, key, value)]) ) as Outputtable } + +export function initConfig>( + r: T +): { + [Property in keyof T]: T[Property] extends StaticAppInput ? T[Property]['value'] | undefined : any +} { + return Object.fromEntries( + Object.entries(r).map(([key, value]) => + value.type == 'static' ? [key, undefined] : [key, undefined] + ) + ) as any +} + export function expandGriditem( grid: GridItem[], gridComponent: GridItem, diff --git a/frontend/src/routes/(root)/(logged)/apps/get/[...path]/+page.svelte b/frontend/src/routes/(root)/(logged)/apps/get/[...path]/+page.svelte index 23a9addec7..6a38d73f70 100644 --- a/frontend/src/routes/(root)/(logged)/apps/get/[...path]/+page.svelte +++ b/frontend/src/routes/(root)/(logged)/apps/get/[...path]/+page.svelte @@ -54,7 +54,7 @@ noBackend={false} /> {#if can_write} -
+