diff --git a/backend/windmill-api/openapi.yaml b/backend/windmill-api/openapi.yaml index 2fd1cbe946..b59bcc74ea 100644 --- a/backend/windmill-api/openapi.yaml +++ b/backend/windmill-api/openapi.yaml @@ -3947,7 +3947,7 @@ paths: required: true schema: type: string - enum: [script, group_, resource, schedule, variable, flow, folder] + enum: [script, group_, resource, schedule, variable, flow, folder, app] responses: "200": description: acls @@ -3972,7 +3972,7 @@ paths: required: true schema: type: string - enum: [script, group_, resource, schedule, variable, flow, folder] + enum: [script, group_, resource, schedule, variable, flow, folder, app] requestBody: description: acl to add required: true @@ -4008,7 +4008,7 @@ paths: required: true schema: type: string - enum: [script, group_, resource, schedule, variable, flow, folder] + enum: [script, group_, resource, schedule, variable, flow, folder, app] requestBody: description: acl to add required: true diff --git a/backend/windmill-api/src/apps.rs b/backend/windmill-api/src/apps.rs index c3164bd456..8efe00370a 100644 --- a/backend/windmill-api/src/apps.rs +++ b/backend/windmill-api/src/apps.rs @@ -37,7 +37,7 @@ pub fn workspaced_service() -> Router { .route("/list", get(list_apps)) .route("/get/p/*path", get(get_app)) .route("/get/v/*id", get(get_app_by_id)) - .route("/exists/*path", post(exists_app)) + .route("/exists/*path", get(exists_app)) .route("/update/*path", post(update_app)) .route("/delete/*path", delete(delete_app)) .route("/create", post(create_app)) diff --git a/frontend/src/lib/components/MoveDrawer.svelte b/frontend/src/lib/components/MoveDrawer.svelte index 75b0e2511d..d56d679696 100644 --- a/frontend/src/lib/components/MoveDrawer.svelte +++ b/frontend/src/lib/components/MoveDrawer.svelte @@ -5,7 +5,7 @@ import { Alert, Button, Drawer } from './common' import DrawerContent from './common/drawer/DrawerContent.svelte' import Path from './Path.svelte' - import { FlowService, ScriptService } from '$lib/gen' + import { AppService, FlowService, ScriptService } from '$lib/gen' const dispatch = createEventDispatcher() @@ -25,7 +25,6 @@ drawer.openDrawer() } - async function loadOwner() { own = await isOwner(path, $userStore!, $workspaceStore!) } @@ -61,6 +60,14 @@ path } }) + } else if (kind == 'app') { + await AppService.updateApp({ + workspace: $workspaceStore!, + path: initialPath, + requestBody: { + path + } + }) } dispatch('update', path) drawer.closeDrawer() diff --git a/frontend/src/lib/components/Path.svelte b/frontend/src/lib/components/Path.svelte index 98f6585824..4376b4710a 100644 --- a/frontend/src/lib/components/Path.svelte +++ b/frontend/src/lib/components/Path.svelte @@ -2,6 +2,7 @@ import { type Meta, pathToMeta } from '$lib/common' import { + AppService, FlowService, FolderService, GroupService, @@ -151,6 +152,8 @@ }) } else if (kind == 'schedule') { return await ScheduleService.existsSchedule({ workspace: $workspaceStore!, path: path }) + } else if (kind == 'app') { + return await AppService.existsApp({ workspace: $workspaceStore!, path: path }) } else { return false } @@ -237,7 +240,7 @@ >
-
diff --git a/frontend/src/lib/components/ShareModal.svelte b/frontend/src/lib/components/ShareModal.svelte index 9ae96f78f0..3e551ad71a 100644 --- a/frontend/src/lib/components/ShareModal.svelte +++ b/frontend/src/lib/components/ShareModal.svelte @@ -13,7 +13,7 @@ const dispatch = createEventDispatcher() - type Kind = 'script' | 'group_' | 'resource' | 'schedule' | 'variable' | 'flow' + type Kind = 'script' | 'group_' | 'resource' | 'schedule' | 'variable' | 'flow' | 'app' let kind: Kind let path: string = '' diff --git a/frontend/src/lib/components/apps/CreateApp.svelte b/frontend/src/lib/components/apps/CreateApp.svelte index 3a4d5e9f44..b44fafb9ab 100644 --- a/frontend/src/lib/components/apps/CreateApp.svelte +++ b/frontend/src/lib/components/apps/CreateApp.svelte @@ -51,7 +51,7 @@ - closeDrawer()}> + closeDrawer()}>
App permissions depend on their path. Select the group all diff --git a/frontend/src/lib/components/apps/components/helpers/RefreshButton.svelte b/frontend/src/lib/components/apps/components/helpers/RefreshButton.svelte index 41b6729b8c..aaa4ec0611 100644 --- a/frontend/src/lib/components/apps/components/helpers/RefreshButton.svelte +++ b/frontend/src/lib/components/apps/components/helpers/RefreshButton.svelte @@ -25,7 +25,7 @@ diff --git a/frontend/src/lib/components/apps/components/helpers/RunnableComponent.svelte b/frontend/src/lib/components/apps/components/helpers/RunnableComponent.svelte index 2b04a2ab4d..07648ac333 100644 --- a/frontend/src/lib/components/apps/components/helpers/RunnableComponent.svelte +++ b/frontend/src/lib/components/apps/components/helpers/RunnableComponent.svelte @@ -33,6 +33,7 @@ await executeComponent() } } + executeComponent() }) let pagePath = $page.params.path diff --git a/frontend/src/lib/components/apps/editor/AppEditorHeader.svelte b/frontend/src/lib/components/apps/editor/AppEditorHeader.svelte index 4b7ca5259d..26c9e7e36a 100644 --- a/frontend/src/lib/components/apps/editor/AppEditorHeader.svelte +++ b/frontend/src/lib/components/apps/editor/AppEditorHeader.svelte @@ -12,6 +12,7 @@ faHand, faMobileAlt } from '@fortawesome/free-solid-svg-icons' + import { Eye, Laptop2, Pencil, PenTool, Smartphone } from 'lucide-svelte' import { getContext } from 'svelte' import { Icon } from 'svelte-awesome' import { sendUserToast } from '../../../utils' @@ -55,40 +56,37 @@
-
+
- - Editor +
+ + Editor +
- - Preview - +
Preview
- - + + + +
- diff --git a/frontend/src/lib/components/apps/editor/GridEditor.svelte b/frontend/src/lib/components/apps/editor/GridEditor.svelte index 6922ad0d53..2d4d00d0af 100644 --- a/frontend/src/lib/components/apps/editor/GridEditor.svelte +++ b/frontend/src/lib/components/apps/editor/GridEditor.svelte @@ -100,57 +100,52 @@ } -
+

{$app.title}

{policy.execution_mode} mode {policy.on_behalf_of - ? `on behalf of ${policy.on_behalf_of}` - : ''}
{policy.on_behalf_of ? `on behalf of ${policy.on_behalf_of}` : ''}
- selectComponent(detail.id)} - gap={[4, 2]} - > - {#each $lazyGrid as gridComponent (gridComponent.id)} - {#if gridComponent.data.id === dataItem.data.id} - -
- removeGridElement(gridComponent.data)} - on:lock={() => { - let fComponent = $app.grid.find((c) => c.id === gridComponent.id) - if (fComponent) { - fComponent = toggleFixed(fComponent) - } - }} - /> -
- {/if} - {/each} -
+
+ selectComponent(detail.id)} + gap={[4, 2]} + > + {#each $lazyGrid as gridComponent (gridComponent.id)} + {#if gridComponent.data.id === dataItem.data.id} + +
+ removeGridElement(gridComponent.data)} + on:lock={() => { + let fComponent = $app.grid.find((c) => c.id === gridComponent.id) + if (fComponent) { + fComponent = toggleFixed(fComponent) + } + }} + /> +
+ {/if} + {/each} +
+