diff --git a/frontend/src/lib/components/apps/components/buttons/AppForm.svelte b/frontend/src/lib/components/apps/components/buttons/AppForm.svelte index 2ab78f7198..7aa9fed9f7 100644 --- a/frontend/src/lib/components/apps/components/buttons/AppForm.svelte +++ b/frontend/src/lib/components/apps/components/buttons/AppForm.svelte @@ -29,7 +29,8 @@ export const staticOutputs: string[] = ['loading', 'result', 'jobId'] - const { app, worldStore, stateId } = getContext('AppViewerContext') + const { app, worldStore, stateId, componentControl } = + getContext('AppViewerContext') const outputs = initOutput($worldStore, id, { result: undefined, @@ -42,6 +43,12 @@ configuration ) + $componentControl[id] = { + setValue(nvalue: string) { + wrapper?.setArgs(nvalue) + } + } + let runnableComponent: RunnableComponent let loading = false @@ -50,6 +57,8 @@ (componentInput?.type != 'runnable' || Object.keys(componentInput?.fields ?? {}).length == 0) let css = initCss($app.css?.formcomponent, customCss) + + let wrapper: RunnableWrapper {#each Object.keys(components['formcomponent'].initialData.configuration) as key (key)} @@ -74,6 +83,7 @@ | undefined = undefined let runnableInputValues: Record = {} let executeTimeout: NodeJS.Timeout | undefined = undefined diff --git a/frontend/src/lib/components/apps/components/helpers/RunnableWrapper.svelte b/frontend/src/lib/components/apps/components/helpers/RunnableWrapper.svelte index ed35c8241d..f290d5bc87 100644 --- a/frontend/src/lib/components/apps/components/helpers/RunnableWrapper.svelte +++ b/frontend/src/lib/components/apps/components/helpers/RunnableWrapper.svelte @@ -22,6 +22,8 @@ | 'errorOverlay' | 'openModal' | 'closeModal' + | 'open' + | 'close' configuration: { gotoUrl: { url: string | undefined; newTab: boolean | undefined } setTab: { @@ -40,6 +42,12 @@ closeModal?: { modalId: string | undefined } + open?: { + id: string | undefined + } + close?: { + id: string | undefined + } } } | undefined @@ -69,6 +77,10 @@ export let errorHandledByComponent: boolean = false export let hasChildrens: boolean = false + export function setArgs(value: any) { + runnableComponent?.setArgs(value) + } + const { staticExporter, noBackend, componentControl, runnableComponents } = getContext('AppViewerContext') @@ -168,6 +180,22 @@ $componentControl[modalId].closeModal?.() break } + case 'open': { + const id = sideEffect?.configuration?.open?.id + + if (!id) return + + $componentControl[id].open?.() + break + } + case 'close': { + const id = sideEffect?.configuration?.close?.id + + if (!id) return + + $componentControl[id].close?.() + break + } default: break } diff --git a/frontend/src/lib/components/apps/components/helpers/eval.ts b/frontend/src/lib/components/apps/components/helpers/eval.ts index 2e58f6dc38..3c5df41a98 100644 --- a/frontend/src/lib/components/apps/components/helpers/eval.ts +++ b/frontend/src/lib/components/apps/components/helpers/eval.ts @@ -20,7 +20,7 @@ export function computeGlobalContext(world: World | undefined, extraContext: any function create_context_function_template(eval_string: string, context, noReturn: boolean) { return ` -return async function (context, state, goto, setTab, recompute, getAgGrid, setValue, setSelectedIndex, openModal, closeModal) { +return async function (context, state, goto, setTab, recompute, getAgGrid, setValue, setSelectedIndex, openModal, closeModal, open, close) { "use strict"; ${ Object.keys(context).length > 0 @@ -50,7 +50,9 @@ function make_context_evaluator( setValue, setSelectedIndex, openModal, - closeModal + closeModal, + open, + close ) => Promise { let template = create_context_function_template(eval_string, context, noReturn) let functor = Function(template) @@ -104,6 +106,8 @@ export async function eval_like( setSelectedIndex?: (index: number) => void openModal?: () => void closeModal?: () => void + open?: () => void + close?: () => void } >, worldStore: World | undefined, @@ -160,6 +164,12 @@ export async function eval_like( }, (id) => { controlComponents[id]?.closeModal?.() + }, + (id) => { + controlComponents[id]?.open?.() + }, + (id) => { + controlComponents[id]?.close?.() } ) } diff --git a/frontend/src/lib/components/apps/components/layout/AppDrawer.svelte b/frontend/src/lib/components/apps/components/layout/AppDrawer.svelte index 5aa4dd20c5..c3c42860ca 100644 --- a/frontend/src/lib/components/apps/components/layout/AppDrawer.svelte +++ b/frontend/src/lib/components/apps/components/layout/AppDrawer.svelte @@ -21,8 +21,15 @@ export let noWFull = false export let render: boolean - const { app, focusedGrid, selectedComponent, worldStore, connectingInput, mode } = - getContext('AppViewerContext') + const { + app, + focusedGrid, + selectedComponent, + worldStore, + connectingInput, + mode, + componentControl + } = getContext('AppViewerContext') const resolvedConfig = initConfig( components['drawercomponent'].initialData.configuration, @@ -32,6 +39,15 @@ let appDrawer: Drawer + $componentControl[id] = { + open: () => { + appDrawer?.openDrawer() + }, + close: () => { + appDrawer?.closeDrawer() + } + } + let css = initCss($app.css?.drawercomponent, customCss) diff --git a/frontend/src/lib/components/apps/components/layout/AppModal.svelte b/frontend/src/lib/components/apps/components/layout/AppModal.svelte index 9168e052ab..e34689c570 100644 --- a/frontend/src/lib/components/apps/components/layout/AppModal.svelte +++ b/frontend/src/lib/components/apps/components/layout/AppModal.svelte @@ -64,6 +64,12 @@ }, closeModal: () => { open = false + }, + open: () => { + open = true + }, + close: () => { + open = false } } diff --git a/frontend/src/lib/components/apps/editor/AppEditor.svelte b/frontend/src/lib/components/apps/editor/AppEditor.svelte index 3ac628ce6e..ea3b47bf5c 100644 --- a/frontend/src/lib/components/apps/editor/AppEditor.svelte +++ b/frontend/src/lib/components/apps/editor/AppEditor.svelte @@ -453,7 +453,7 @@ )} style={$appStore.css?.['app']?.['viewer']?.style} > -
+
- {$scale} + {$scale}%