windmill-components 1.339.2 → 1.352.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package/assets/app.css +0 -12
- package/package/ata/index.js +1 -0
- package/package/autosize.js +1 -1
- package/package/common.d.ts +6 -2
- package/package/common.js +2 -1
- package/package/components/AppConnectDrawer.svelte +1 -1
- package/package/components/AppConnectInner.svelte +9 -15
- package/package/components/ArgEnum.svelte +4 -1
- package/package/components/ArgEnum.svelte.d.ts +3 -1
- package/package/components/ArgInput.svelte +184 -141
- package/package/components/ArgInput.svelte.d.ts +7 -7
- package/package/components/ArrayTypeNarrowing.svelte +29 -27
- package/package/components/CenteredPage.svelte +2 -2
- package/package/components/DefaultTagsInner.svelte +1 -1
- package/package/components/Dev.svelte +2 -1
- package/package/components/DiffDrawer.svelte +1 -2
- package/package/components/DisplayResult.svelte +293 -233
- package/package/components/DurationMs.svelte +11 -3
- package/package/components/DurationMs.svelte.d.ts +2 -0
- package/package/components/EditableSchemaForm.svelte +447 -103
- package/package/components/EditableSchemaForm.svelte.d.ts +16 -6
- package/package/components/Editor.svelte +3 -1
- package/package/components/EditorBar.svelte +2 -2
- package/package/components/FlowBuilder.svelte +14 -6
- package/package/components/FlowGraphViewer.svelte +1 -1
- package/package/components/FlowGraphViewerStep.svelte +37 -9
- package/package/components/FlowGraphViewerStep.svelte.d.ts +2 -7
- package/package/components/FlowJobResult.svelte +1 -3
- package/package/components/FlowMetadata.svelte +1 -1
- package/package/components/FlowPreviewContent.svelte +5 -3
- package/package/components/FlowStatusViewer.svelte +4 -0
- package/package/components/FlowStatusViewer.svelte.d.ts +3 -0
- package/package/components/FlowStatusViewerInner.svelte +50 -17
- package/package/components/FlowStatusViewerInner.svelte.d.ts +3 -0
- package/package/components/FlowTimeline.svelte +13 -0
- package/package/components/FlowTimeline.svelte.d.ts +2 -0
- package/package/components/FlowViewer.svelte +0 -5
- package/package/components/FolderEditor.svelte +25 -0
- package/package/components/FolderEditor.svelte.d.ts +2 -0
- package/package/components/GroupEditor.svelte +36 -91
- package/package/components/GroupInfo.svelte +1 -1
- package/package/components/InputTransformForm.svelte +16 -1
- package/package/components/InputTransformForm.svelte.d.ts +2 -0
- package/package/components/InputTransformSchemaForm.svelte +6 -0
- package/package/components/InputTransformSchemaForm.svelte.d.ts +2 -0
- package/package/components/InstanceSettings.svelte +36 -3
- package/package/components/InstanceSettings.svelte.d.ts +2 -0
- package/package/components/JobStatus.svelte +2 -2
- package/package/components/LightweightArgInput.svelte +66 -14
- package/package/components/LightweightArgInput.svelte.d.ts +3 -2
- package/package/components/LightweightSchemaForm.svelte +24 -15
- package/package/components/ModulePreviewForm.svelte +1 -0
- package/package/components/NumberTypeNarrowing.svelte +71 -44
- package/package/components/ObjectResourceInput.svelte +2 -0
- package/package/components/ObjectResourceInput.svelte.d.ts +1 -0
- package/package/components/ObjectTypeNarrowing.svelte +0 -1
- package/package/components/ParqetCsvTableRenderer.svelte +181 -0
- package/package/components/ParqetCsvTableRenderer.svelte.d.ts +21 -0
- package/package/components/Path.svelte +2 -2
- package/package/components/PersistentScriptDrawer.svelte +6 -3
- package/package/components/Range.svelte +88 -286
- package/package/components/Range.svelte.d.ts +9 -23
- package/package/components/ResourceEditor.svelte +138 -141
- package/package/components/ResourceEditor.svelte.d.ts +9 -2
- package/package/components/ResourceEditorDrawer.svelte +45 -0
- package/package/components/ResourceEditorDrawer.svelte.d.ts +21 -0
- package/package/components/ResourcePicker.svelte +5 -2
- package/package/components/ResourceTypePicker.svelte +88 -36
- package/package/components/RunChart.svelte +55 -5
- package/package/components/RunChart.svelte.d.ts +1 -0
- package/package/components/RunForm.svelte +1 -1
- package/package/components/S3FilePicker.svelte +20 -8
- package/package/components/S3FilePicker.svelte.d.ts +2 -0
- package/package/components/ScheduleEditorInner.svelte +40 -37
- package/package/components/SchemaForm.svelte +192 -103
- package/package/components/SchemaForm.svelte.d.ts +16 -2
- package/package/components/ScriptBuilder.svelte +13 -8
- package/package/components/ScriptSchedules.svelte +11 -8
- package/package/components/ScriptSchema.svelte +3 -21
- package/package/components/ScriptVersionHistory.svelte +1 -1
- package/package/components/StringTypeNarrowing.svelte +217 -174
- package/package/components/StringTypeNarrowing.svelte.d.ts +5 -1
- package/package/components/Toggle.svelte +6 -3
- package/package/components/Toggle.svelte.d.ts +1 -0
- package/package/components/UserSettings.svelte +24 -1
- package/package/components/WorkspaceGroup.svelte +11 -13
- package/package/components/apps/components/buttons/AppButton.svelte +2 -0
- package/package/components/apps/components/buttons/AppButton.svelte.d.ts +1 -0
- package/package/components/apps/components/display/AppFlowStatusComponent.svelte +13 -70
- package/package/components/apps/components/display/AppFlowStatusComponent.svelte.d.ts +1 -9
- package/package/components/apps/components/display/AppJobIdFlowStatus.svelte +21 -8
- package/package/components/apps/components/display/AppJobIdFlowStatus.svelte.d.ts +1 -3
- package/package/components/apps/components/display/AppJobIdLogComponent.svelte +19 -7
- package/package/components/apps/components/display/AppJobIdLogComponent.svelte.d.ts +1 -3
- package/package/components/apps/components/display/AppLogsComponent.svelte +13 -70
- package/package/components/apps/components/display/AppLogsComponent.svelte.d.ts +1 -9
- package/package/components/apps/components/display/charts/AppAgCharts.svelte +25 -15
- package/package/components/apps/components/display/table/AppAggridTableActions.svelte +2 -0
- package/package/components/apps/components/display/table/SyncColumnDefs.svelte +1 -1
- package/package/components/apps/components/helpers/HiddenComponent.svelte +2 -1
- package/package/components/apps/components/helpers/RunnableComponent.svelte +18 -8
- package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +1 -0
- package/package/components/apps/components/helpers/RunnableWrapper.svelte +2 -0
- package/package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -0
- package/package/components/apps/components/helpers/eval.js +1 -36
- package/package/components/apps/components/inputs/AppFileInput.svelte +3 -1
- package/package/components/apps/components/inputs/AppFileInput.svelte.d.ts +1 -0
- package/package/components/apps/components/inputs/AppS3FileInput.svelte +3 -1
- package/package/components/apps/components/inputs/AppS3FileInput.svelte.d.ts +1 -0
- package/package/components/apps/components/layout/AppConditionalWrapper.svelte +3 -1
- package/package/components/apps/components/layout/AppConditionalWrapper.svelte.d.ts +1 -0
- package/package/components/apps/components/layout/AppStepper.svelte +5 -1
- package/package/components/apps/components/layout/AppStepper.svelte.d.ts +2 -0
- package/package/components/apps/components/layout/AppTabs.svelte +3 -1
- package/package/components/apps/components/layout/AppTabs.svelte.d.ts +1 -0
- package/package/components/apps/editor/AppEditorHeader.svelte +6 -7
- package/package/components/apps/editor/SettingsPanel.svelte +13 -3
- package/package/components/apps/editor/component/Component.svelte +8 -16
- package/package/components/apps/editor/component/components.d.ts +11 -2
- package/package/components/apps/editor/component/components.js +2 -1
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +1 -1
- package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +5 -34
- package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +3 -41
- package/package/components/apps/editor/settingsPanel/EventHandlerItem.svelte +33 -0
- package/package/components/apps/editor/settingsPanel/EventHandlerItem.svelte.d.ts +19 -0
- package/package/components/apps/editor/settingsPanel/EventHandlers.svelte +103 -0
- package/package/components/apps/editor/settingsPanel/EventHandlers.svelte.d.ts +18 -0
- package/package/components/apps/editor/settingsPanel/GridCondition.svelte +21 -45
- package/package/components/apps/editor/settingsPanel/GridTab.svelte +3 -23
- package/package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +5 -1
- package/package/components/apps/editor/settingsPanel/SubTypeEditor.svelte +0 -2
- package/package/components/apps/editor/settingsPanel/SubTypeEditor.svelte.d.ts +0 -1
- package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte +7 -1
- package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +7 -14
- package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte.d.ts +0 -1
- package/package/components/build_workers.js +13 -11
- package/package/components/common/button/ButtonDropdown.svelte +1 -0
- package/package/components/common/drawer/Disposable.svelte +3 -2
- package/package/components/common/drawer/Disposable.svelte.d.ts +1 -0
- package/package/components/common/drawer/Drawer.svelte +12 -2
- package/package/components/common/drawer/Drawer.svelte.d.ts +1 -0
- package/package/components/common/fileDownload/FileDownload.svelte +4 -2
- package/package/components/common/fileUpload/FileUpload.svelte +4 -3
- package/package/components/common/modal/Modal.svelte +4 -1
- package/package/components/common/modal/Modal.svelte.d.ts +1 -0
- package/package/components/common/popup/Popup.svelte +1 -1
- package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte +4 -1
- package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte.d.ts +1 -0
- package/package/components/common/waitTimeWarning/WaitTimeWarning.svelte +79 -0
- package/package/components/common/waitTimeWarning/WaitTimeWarning.svelte.d.ts +18 -0
- package/package/components/flows/content/FlowEditorPanel.svelte +16 -2
- package/package/components/flows/content/FlowInput.svelte +63 -53
- package/package/components/flows/content/FlowModuleComponent.svelte +26 -3
- package/package/components/flows/content/FlowModuleScript.svelte +40 -1
- package/package/components/flows/content/FlowModuleScript.svelte.d.ts +2 -0
- package/package/components/flows/content/FlowModuleSuspend.svelte +99 -59
- package/package/components/flows/content/FlowModuleWrapper.svelte +16 -1
- package/package/components/flows/content/FlowSchedules.svelte +11 -8
- package/package/components/flows/content/ScriptEditorDrawer.svelte +3 -4
- package/package/components/flows/flowStateUtils.js +4 -1
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +16 -1
- package/package/components/flows/map/FlowModuleSchemaMap.svelte +6 -1
- package/package/components/flows/types.d.ts +4 -0
- package/package/components/flows/utils.d.ts +5 -1
- package/package/components/flows/utils.js +36 -0
- package/package/components/graph/FlowGraph.svelte +5 -2
- package/package/components/graph/FlowGraph.svelte.d.ts +2 -0
- package/package/components/graph/svelvet/container/models/index.d.ts +0 -5
- package/package/components/graph/svelvet/container/models/index.js +1 -1
- package/package/components/graph/svelvet/container/views/Svelvet.svelte +2 -5
- package/package/components/graph/util.d.ts +1 -37
- package/package/components/graph/util.js +0 -34
- package/package/components/instanceSettings.js +2 -1
- package/package/components/jobs/JobPreview.svelte +1 -1
- package/package/components/multiselect/MultiSelect.svelte +4 -3
- package/package/components/multiselect/MultiSelect.svelte.d.ts +1 -0
- package/package/components/multiselect/MultiSelectWrapper.svelte +89 -0
- package/package/components/multiselect/MultiSelectWrapper.svelte.d.ts +20 -0
- package/package/components/propertyPicker/ObjectViewer.svelte +6 -2
- package/package/components/runs/JobPreview.svelte +5 -1
- package/package/components/runs/RunRow.svelte +22 -3
- package/package/components/runs/RunRow.svelte.d.ts +2 -1
- package/package/components/runs/RunsTable.svelte +22 -9
- package/package/components/runs/RunsTable.svelte.d.ts +2 -1
- package/package/components/schema/AddProperty.svelte +149 -0
- package/package/components/schema/AddProperty.svelte.d.ts +23 -0
- package/package/components/schema/AddPropertyForm.svelte +33 -0
- package/package/components/schema/AddPropertyForm.svelte.d.ts +16 -0
- package/package/components/schema/EditableSchemaDrawer.svelte +198 -0
- package/package/components/schema/EditableSchemaDrawer.svelte.d.ts +21 -0
- package/package/components/schema/EditableSchemaWrapper.svelte +31 -0
- package/package/components/schema/EditableSchemaWrapper.svelte.d.ts +22 -0
- package/package/components/schema/FlowPropertyEditor.svelte +393 -0
- package/package/components/schema/FlowPropertyEditor.svelte.d.ts +47 -0
- package/package/components/schema/PropertyEditor.svelte +185 -0
- package/package/components/schema/PropertyEditor.svelte.d.ts +46 -0
- package/package/components/schema/SchemaFormDND.svelte +75 -0
- package/package/components/schema/SchemaFormDND.svelte.d.ts +28 -0
- package/package/components/table/AutoDataTable.svelte +90 -104
- package/package/components/table/Cell.svelte +4 -1
- package/package/components/table/Cell.svelte.d.ts +1 -0
- package/package/components/table/DownloadCsv.svelte +30 -0
- package/package/components/table/DownloadCsv.svelte.d.ts +17 -0
- package/package/components/table/tableUtils.d.ts +8 -0
- package/package/components/table/tableUtils.js +37 -0
- package/package/consts.js +3 -1
- package/package/deno_fetch.d.ts.txt +6 -0
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +76 -0
- package/package/gen/schemas.gen.js +76 -0
- package/package/gen/services.gen.d.ts +100 -5
- package/package/gen/services.gen.js +216 -16
- package/package/gen/types.gen.d.ts +378 -5
- package/package/inferArgSig.d.ts +10 -0
- package/package/inferArgSig.js +59 -2
- package/package/scripts.d.ts +2 -0
- package/package/scripts.js +6 -3
- package/package/utils.d.ts +4 -3
- package/package/utils.js +9 -4
- package/package/workspace_settings.d.ts +15 -0
- package/package/workspace_settings.js +81 -0
- package/package.json +17 -7
- package/package/components/ParqetTableRenderer.svelte +0 -117
- package/package/components/ParqetTableRenderer.svelte.d.ts +0 -18
- package/package/components/PropertyRow.svelte +0 -88
- package/package/components/PropertyRow.svelte.d.ts +0 -23
- package/package/components/SchemaEditor.svelte +0 -346
- package/package/components/SchemaEditor.svelte.d.ts +0 -25
- package/package/components/SchemaModal.svelte +0 -443
- package/package/components/SchemaModal.svelte.d.ts +0 -33
- package/package/components/apps/editor/settingsPanel/Recompute.svelte +0 -55
- package/package/components/apps/editor/settingsPanel/Recompute.svelte.d.ts +0 -20
|
@@ -25,11 +25,9 @@ import FlowCopilotStatus from './copilot/FlowCopilotStatus.svelte';
|
|
|
25
25
|
import { fade } from 'svelte/transition';
|
|
26
26
|
import { loadFlowModuleState, pickScript } from './flows/flowStateUtils';
|
|
27
27
|
import FlowCopilotInputsModal from './copilot/FlowCopilotInputsModal.svelte';
|
|
28
|
-
import { snakeCase } from 'lodash';
|
|
29
28
|
import FlowBuilderTutorials from './FlowBuilderTutorials.svelte';
|
|
30
29
|
import FlowTutorials from './FlowTutorials.svelte';
|
|
31
30
|
import { ignoredTutorials } from './tutorials/ignoredTutorials';
|
|
32
|
-
import { cloneDeep } from 'lodash';
|
|
33
31
|
export let initialPath = '';
|
|
34
32
|
export let pathStoreInit = undefined;
|
|
35
33
|
export let newFlow;
|
|
@@ -129,13 +127,13 @@ async function saveDraft(forceSave = false) {
|
|
|
129
127
|
savedFlow = {
|
|
130
128
|
...(newFlow || savedFlow?.draft_only
|
|
131
129
|
? {
|
|
132
|
-
...
|
|
130
|
+
...structuredClone($flowStore),
|
|
133
131
|
path: $pathStore,
|
|
134
132
|
draft_only: true
|
|
135
133
|
}
|
|
136
134
|
: savedFlow),
|
|
137
135
|
draft: {
|
|
138
|
-
...
|
|
136
|
+
...structuredClone($flowStore),
|
|
139
137
|
path: $pathStore
|
|
140
138
|
}
|
|
141
139
|
};
|
|
@@ -252,7 +250,7 @@ async function saveFlow() {
|
|
|
252
250
|
});
|
|
253
251
|
}
|
|
254
252
|
savedFlow = {
|
|
255
|
-
...
|
|
253
|
+
...structuredClone($flowStore),
|
|
256
254
|
path: $pathStore
|
|
257
255
|
};
|
|
258
256
|
loadingSave = false;
|
|
@@ -317,7 +315,8 @@ setContext('FlowEditorContext', {
|
|
|
317
315
|
pathStore,
|
|
318
316
|
testStepStore,
|
|
319
317
|
saveDraft,
|
|
320
|
-
initialPath
|
|
318
|
+
initialPath,
|
|
319
|
+
flowInputsStore: writable({})
|
|
321
320
|
});
|
|
322
321
|
async function loadSchedule() {
|
|
323
322
|
loadFlowSchedule(initialPath, $workspaceStore)
|
|
@@ -512,6 +511,15 @@ async function finishStepGen() {
|
|
|
512
511
|
await sleep(3000);
|
|
513
512
|
copilotStatus = '';
|
|
514
513
|
}
|
|
514
|
+
function snakeCase(e) {
|
|
515
|
+
if (e.toLowerCase() === e) {
|
|
516
|
+
return e;
|
|
517
|
+
}
|
|
518
|
+
return (e
|
|
519
|
+
.match(/([A-Z])/g)
|
|
520
|
+
?.reduce((str, c) => str.replace(new RegExp(c), '_' + c.toLowerCase()), e)
|
|
521
|
+
?.substring(e.slice(0, 1).match(/([A-Z])/g) ? 1 : 0) ?? e);
|
|
522
|
+
}
|
|
515
523
|
async function genFlow(idx, flowModules, stepOnly = false) {
|
|
516
524
|
try {
|
|
517
525
|
push(history, $flowStore);
|
|
@@ -13,7 +13,7 @@ import { hubBaseUrlStore } from '../stores';
|
|
|
13
13
|
import { twMerge } from 'tailwind-merge';
|
|
14
14
|
import FlowModuleScript from './flows/content/FlowModuleScript.svelte';
|
|
15
15
|
import { Copy } from 'lucide-svelte';
|
|
16
|
-
export let
|
|
16
|
+
export let schema = undefined;
|
|
17
17
|
export let stepDetail = undefined;
|
|
18
18
|
let codeViewer;
|
|
19
19
|
</script>
|
|
@@ -32,7 +32,7 @@ let codeViewer;
|
|
|
32
32
|
<IconedPath path={stepDetail?.value?.path ?? ''} />
|
|
33
33
|
</a>
|
|
34
34
|
</div>
|
|
35
|
-
<div class="text-2xs mb-4">
|
|
35
|
+
<div class="text-2xs mb-4 mt-2">
|
|
36
36
|
<h3 class="mb-2">Step Inputs</h3>
|
|
37
37
|
|
|
38
38
|
<InputTransformsViewer inputTransforms={stepDetail?.value?.input_transforms ?? {}} />
|
|
@@ -49,7 +49,7 @@ let codeViewer;
|
|
|
49
49
|
</div>
|
|
50
50
|
{/if}
|
|
51
51
|
{:else if stepDetail.value.type == 'rawscript'}
|
|
52
|
-
<div class="text-2xs mb-4">
|
|
52
|
+
<div class="text-2xs mb-4 mt-2">
|
|
53
53
|
<h3 class="mb-2">Step Inputs</h3>
|
|
54
54
|
<InputTransformsViewer inputTransforms={stepDetail?.value?.input_transforms ?? {}} />
|
|
55
55
|
</div>
|
|
@@ -58,6 +58,16 @@ let codeViewer;
|
|
|
58
58
|
<span class="!text-xs">
|
|
59
59
|
<HighlightCode language={stepDetail.value.language} code={stepDetail.value.content} />
|
|
60
60
|
</span>
|
|
61
|
+
<h3 class="mb-2">Lockfile</h3>
|
|
62
|
+
<div>
|
|
63
|
+
{#if stepDetail.value.lock}
|
|
64
|
+
<pre class="bg-surface-secondary text-sm p-2 h-full overflow-auto w-full"
|
|
65
|
+
>{stepDetail.value.lock}</pre
|
|
66
|
+
>
|
|
67
|
+
{:else}
|
|
68
|
+
<p class="bg-surface-secondary text-sm p-2"> There is no lock file for this script </p>
|
|
69
|
+
{/if}
|
|
70
|
+
</div>
|
|
61
71
|
{/if}
|
|
62
72
|
{/if}
|
|
63
73
|
</DrawerContent>
|
|
@@ -69,11 +79,17 @@ let codeViewer;
|
|
|
69
79
|
<p class="font-medium text-secondary text-center pt-4 pb-8">
|
|
70
80
|
Click on a step to see its details
|
|
71
81
|
</p>
|
|
72
|
-
|
|
73
|
-
|
|
82
|
+
{#if schema}
|
|
83
|
+
<h3 class="mb-2 font-semibold">Flow Inputs</h3>
|
|
84
|
+
<SchemaViewer {schema} />
|
|
85
|
+
{/if}
|
|
74
86
|
</div>
|
|
75
87
|
{:else if stepDetail == 'Input'}
|
|
76
|
-
|
|
88
|
+
{#if schema}
|
|
89
|
+
<SchemaViewer {schema} />
|
|
90
|
+
{:else}
|
|
91
|
+
<p class="font-medium text-secondary text-center pt-4 pb-8"> No input schema </p>
|
|
92
|
+
{/if}
|
|
77
93
|
{:else if stepDetail == 'Result'}
|
|
78
94
|
<p class="font-medium text-secondary text-center pt-4 pb-8"> End of the flow </p>
|
|
79
95
|
{:else if typeof stepDetail != 'string' && stepDetail.value}
|
|
@@ -122,12 +138,12 @@ let codeViewer;
|
|
|
122
138
|
</p>
|
|
123
139
|
{:else if stepDetail.value.type == 'rawscript'}
|
|
124
140
|
<div class="text-xs">
|
|
125
|
-
<h3 class="mb-2 font-semibold">Step Inputs</h3>
|
|
141
|
+
<h3 class="mb-2 font-semibold mt-2">Step Inputs</h3>
|
|
126
142
|
<InputTransformsViewer inputTransforms={stepDetail?.value?.input_transforms ?? {}} />
|
|
127
143
|
</div>
|
|
128
144
|
|
|
129
145
|
<div>
|
|
130
|
-
<div class="mb-2 flex justify-between items-center">
|
|
146
|
+
<div class="mb-2 mt-4 flex justify-between items-center">
|
|
131
147
|
<h3 class="font-semibold">Code</h3>
|
|
132
148
|
<Button size="xs2" color="light" variant="contained" on:click={codeViewer.openDrawer}>
|
|
133
149
|
Expand
|
|
@@ -140,10 +156,22 @@ let codeViewer;
|
|
|
140
156
|
class="whitespace-pre-wrap"
|
|
141
157
|
/>
|
|
142
158
|
</div>
|
|
159
|
+
<h3 class="mb-2 mt-4">Lockfile</h3>
|
|
160
|
+
<div>
|
|
161
|
+
{#if stepDetail.value.lock}
|
|
162
|
+
<pre class="bg-surface-secondary text-xs p-2 h-full overflow-auto w-full"
|
|
163
|
+
>{stepDetail.value.lock}</pre
|
|
164
|
+
>
|
|
165
|
+
{:else}
|
|
166
|
+
<p class="bg-surface-secondary text-sm p-2">
|
|
167
|
+
There is no lockfile for this inline script
|
|
168
|
+
</p>
|
|
169
|
+
{/if}
|
|
170
|
+
</div>
|
|
143
171
|
</div>
|
|
144
172
|
{:else if stepDetail.value.type == 'script'}
|
|
145
173
|
<div class="text-2xs">
|
|
146
|
-
<h3 class="mb-2 font-semibold">Step Inputs</h3>
|
|
174
|
+
<h3 class="mb-2 font-semibold mt-2">Step Inputs</h3>
|
|
147
175
|
<InputTransformsViewer inputTransforms={stepDetail?.value?.input_transforms ?? {}} />
|
|
148
176
|
</div>
|
|
149
177
|
{#if stepDetail.value.path.startsWith('hub/')}
|
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
import { SvelteComponent } from "svelte";
|
|
2
|
-
import type { FlowModule
|
|
2
|
+
import type { FlowModule } from '../gen';
|
|
3
3
|
declare const __propDef: {
|
|
4
4
|
props: {
|
|
5
|
-
|
|
6
|
-
summary: string;
|
|
7
|
-
description?: string;
|
|
8
|
-
value: FlowValue;
|
|
9
|
-
schema?: any;
|
|
10
|
-
};
|
|
5
|
+
schema?: any | undefined;
|
|
11
6
|
stepDetail?: FlowModule | string | undefined;
|
|
12
7
|
};
|
|
13
8
|
events: {
|
|
@@ -56,9 +56,7 @@ async function getLogs() {
|
|
|
56
56
|
</Drawer>
|
|
57
57
|
<div
|
|
58
58
|
class:border={!noBorder}
|
|
59
|
-
class="grid {!col
|
|
60
|
-
? 'grid-cols-2'
|
|
61
|
-
: 'grid-rows-2'} shadow border border-tertiary-inverse h-full max-h-[70vh]"
|
|
59
|
+
class="grid {!col ? 'grid-cols-2' : 'grid-rows-2'} shadow border border-tertiary-inverse h-full"
|
|
62
60
|
>
|
|
63
61
|
<div class="bg-surface {col ? '' : 'max-h-80'} h-full p-1 overflow-auto relative">
|
|
64
62
|
<span class="text-tertiary">Result</span>
|
|
@@ -23,7 +23,7 @@ export let scheduleEditor;
|
|
|
23
23
|
{#if job['success'] != undefined}
|
|
24
24
|
Received job: {displayDate(job.created_at ?? '')}
|
|
25
25
|
{:else}
|
|
26
|
-
Received job <TimeAgo date={job.created_at ?? ''} />
|
|
26
|
+
Received job <TimeAgo withDate date={job.created_at ?? ''} />
|
|
27
27
|
{/if}
|
|
28
28
|
<Tooltip small>{job?.created_at}</Tooltip>
|
|
29
29
|
</span>
|
|
@@ -292,8 +292,9 @@ let inputLibraryDrawer;
|
|
|
292
292
|
{/if}
|
|
293
293
|
<FlowProgressBar {job} bind:reset={jobProgressReset} />
|
|
294
294
|
</div>
|
|
295
|
-
|
|
296
|
-
|
|
295
|
+
|
|
296
|
+
<div class="overflow-y-auto grow flex flex-col pr-4">
|
|
297
|
+
<div class="border-b">
|
|
297
298
|
<SchemaForm
|
|
298
299
|
noVariablePicker
|
|
299
300
|
compact
|
|
@@ -302,9 +303,10 @@ let inputLibraryDrawer;
|
|
|
302
303
|
bind:args={$previewArgs}
|
|
303
304
|
/>
|
|
304
305
|
</div>
|
|
305
|
-
<div class="pt-4 grow">
|
|
306
|
+
<div class="pt-4 flex flex-col grow">
|
|
306
307
|
{#if jobId}
|
|
307
308
|
<FlowStatusViewer
|
|
309
|
+
wideResults
|
|
308
310
|
{flowStateStore}
|
|
309
311
|
{jobId}
|
|
310
312
|
on:jobsLoaded={({ detail }) => {
|
|
@@ -8,6 +8,7 @@ export let workspaceId = undefined;
|
|
|
8
8
|
export let flowStateStore = writable({});
|
|
9
9
|
export let selectedJobStep = undefined;
|
|
10
10
|
export let isOwner = false;
|
|
11
|
+
export let wideResults = false;
|
|
11
12
|
let lastJobId = jobId;
|
|
12
13
|
let retryStatus = writable({});
|
|
13
14
|
let suspendStatus = writable({});
|
|
@@ -42,7 +43,10 @@ $: jobId && updateJobId();
|
|
|
42
43
|
globalDurationStatuses={[]}
|
|
43
44
|
globalModuleStates={[]}
|
|
44
45
|
bind:selectedNode={selectedJobStep}
|
|
46
|
+
on:start
|
|
47
|
+
on:done
|
|
45
48
|
{jobId}
|
|
46
49
|
{workspaceId}
|
|
47
50
|
{isOwner}
|
|
51
|
+
{wideResults}
|
|
48
52
|
/>
|
|
@@ -8,8 +8,11 @@ declare const __propDef: {
|
|
|
8
8
|
flowStateStore?: Writable<FlowState> | undefined;
|
|
9
9
|
selectedJobStep?: string | undefined;
|
|
10
10
|
isOwner?: boolean | undefined;
|
|
11
|
+
wideResults?: boolean | undefined;
|
|
11
12
|
};
|
|
12
13
|
events: {
|
|
14
|
+
start: CustomEvent<any>;
|
|
15
|
+
done: CustomEvent<any>;
|
|
13
16
|
jobsLoaded: CustomEvent<any>;
|
|
14
17
|
} & {
|
|
15
18
|
[evt: string]: CustomEvent<any>;
|
|
@@ -17,6 +17,8 @@ import { deepEqual } from 'fast-equals';
|
|
|
17
17
|
import FlowTimeline from './FlowTimeline.svelte';
|
|
18
18
|
import { dfs } from './flows/dfs';
|
|
19
19
|
import { writable } from 'svelte/store';
|
|
20
|
+
import Alert from './common/alert/Alert.svelte';
|
|
21
|
+
import FlowGraphViewerStep from './FlowGraphViewerStep.svelte';
|
|
20
22
|
const dispatch = createEventDispatcher();
|
|
21
23
|
let { flowStateStore, retryStatus, suspendStatus } = getContext('FlowStatusViewer');
|
|
22
24
|
export let jobId;
|
|
@@ -32,6 +34,7 @@ export let globalModuleStates;
|
|
|
32
34
|
export let globalDurationStatuses;
|
|
33
35
|
export let childFlow = false;
|
|
34
36
|
export let reducedPolling = false;
|
|
37
|
+
export let wideResults = false;
|
|
35
38
|
let jobResults = [];
|
|
36
39
|
let jobFailures = [];
|
|
37
40
|
let forloop_selected = '';
|
|
@@ -95,6 +98,7 @@ function updateStatus(status) {
|
|
|
95
98
|
}
|
|
96
99
|
else if ($retryStatus[jobId ?? ''] != undefined) {
|
|
97
100
|
delete $retryStatus[jobId ?? ''];
|
|
101
|
+
$retryStatus = $retryStatus;
|
|
98
102
|
}
|
|
99
103
|
let jobStatus = job?.flow_status?.modules?.[job?.flow_status.step];
|
|
100
104
|
if (jobStatus && jobStatus.count != undefined) {
|
|
@@ -102,6 +106,7 @@ function updateStatus(status) {
|
|
|
102
106
|
}
|
|
103
107
|
else if ($suspendStatus[jobId ?? ''] != undefined) {
|
|
104
108
|
delete $suspendStatus[jobId ?? ''];
|
|
109
|
+
$suspendStatus = $suspendStatus;
|
|
105
110
|
}
|
|
106
111
|
}
|
|
107
112
|
function updateInnerModules() {
|
|
@@ -138,7 +143,9 @@ function updateInnerModules() {
|
|
|
138
143
|
}
|
|
139
144
|
}
|
|
140
145
|
let errorCount = 0;
|
|
146
|
+
let notAnonynmous = false;
|
|
141
147
|
async function loadJobInProgress() {
|
|
148
|
+
dispatch('start');
|
|
142
149
|
if (jobId != '00000000-0000-0000-0000-000000000000') {
|
|
143
150
|
try {
|
|
144
151
|
const newJob = await JobService.getJob({
|
|
@@ -152,15 +159,24 @@ async function loadJobInProgress() {
|
|
|
152
159
|
dispatch('jobsLoaded', job);
|
|
153
160
|
}
|
|
154
161
|
errorCount = 0;
|
|
162
|
+
notAnonynmous = false;
|
|
155
163
|
}
|
|
156
164
|
catch (e) {
|
|
157
|
-
|
|
158
|
-
|
|
165
|
+
if (e?.body?.includes('As a non logged in user, you can only see jobs ran by anonymous users')) {
|
|
166
|
+
notAnonynmous = true;
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
errorCount += 1;
|
|
170
|
+
console.error(e);
|
|
171
|
+
}
|
|
159
172
|
}
|
|
160
173
|
}
|
|
161
174
|
if (job?.type !== 'CompletedJob' && errorCount < 4 && !destroyed) {
|
|
162
175
|
timeout = setTimeout(() => loadJobInProgress(), reducedPolling ? 5000 : 1000);
|
|
163
176
|
}
|
|
177
|
+
else {
|
|
178
|
+
dispatch('done', job);
|
|
179
|
+
}
|
|
164
180
|
}
|
|
165
181
|
let destroyed = false;
|
|
166
182
|
async function updateJobId() {
|
|
@@ -170,11 +186,12 @@ async function updateJobId() {
|
|
|
170
186
|
timeout && clearTimeout(timeout);
|
|
171
187
|
innerModules = [];
|
|
172
188
|
if (flowJobIds) {
|
|
189
|
+
let modId = flowJobIds?.moduleId ?? '';
|
|
173
190
|
let common = {
|
|
174
|
-
iteration_from:
|
|
175
|
-
|
|
191
|
+
iteration_from: $localDurationStatuses?.[modId]?.iteration_from ??
|
|
192
|
+
Math.max(flowJobIds.flowJobs.length - 20, 0),
|
|
193
|
+
iteration_total: $localDurationStatuses?.[modId]?.iteration_total ?? flowJobIds?.length
|
|
176
194
|
};
|
|
177
|
-
let modId = flowJobIds?.moduleId ?? '';
|
|
178
195
|
$localDurationStatuses[modId] = {
|
|
179
196
|
...($localDurationStatuses[modId] ?? { byJob: {} }),
|
|
180
197
|
...common
|
|
@@ -361,10 +378,15 @@ function loadPreviousIters(lenToAdd) {
|
|
|
361
378
|
jobResults = [...new Array(lenToAdd), ...jobResults];
|
|
362
379
|
updateSlicedListJobIds();
|
|
363
380
|
}
|
|
381
|
+
let stepDetail = undefined;
|
|
364
382
|
</script>
|
|
365
383
|
|
|
366
|
-
{#if
|
|
367
|
-
<
|
|
384
|
+
{#if notAnonynmous}
|
|
385
|
+
<Alert type="error" title="Required Auth">
|
|
386
|
+
As a non logged in user, you can only see jobs ran by anonymous users like you
|
|
387
|
+
</Alert>
|
|
388
|
+
{:else if job}
|
|
389
|
+
<div class="flow-root w-full space-y-4 {wideResults ? '' : 'max-w-7xl'} mx-auto px-4">
|
|
368
390
|
<!-- {#if innerModules.length > 0 && true}
|
|
369
391
|
<h3 class="text-md leading-6 font-bold text-primay border-b pb-2">Flow result</h3>
|
|
370
392
|
{:else}
|
|
@@ -398,7 +420,7 @@ function loadPreviousIters(lenToAdd) {
|
|
|
398
420
|
</p>
|
|
399
421
|
{/if}
|
|
400
422
|
{#if render}
|
|
401
|
-
<div class="w-full h-full border
|
|
423
|
+
<div class="w-full h-full border rounded-sm bg-surface p-1 overflow-auto">
|
|
402
424
|
<DisplayResult workspaceId={job?.workspace_id} {jobId} result={jobResults} />
|
|
403
425
|
</div>
|
|
404
426
|
{/if}
|
|
@@ -469,13 +491,13 @@ function loadPreviousIters(lenToAdd) {
|
|
|
469
491
|
{/if}
|
|
470
492
|
{#if render}
|
|
471
493
|
{#if innerModules.length > 0 && !isListJob}
|
|
472
|
-
<Tabs bind:selected>
|
|
494
|
+
<Tabs class="mx-auto {wideResults ? '' : 'max-w-7xl'}" bind:selected>
|
|
473
495
|
<Tab value="graph"><span class="font-semibold text-md">Graph</span></Tab>
|
|
474
496
|
<Tab value="sequence"><span class="font-semibold">Details</span></Tab>
|
|
475
497
|
</Tabs>
|
|
476
498
|
{/if}
|
|
477
499
|
{/if}
|
|
478
|
-
<div class={selected != 'sequence' ? 'hidden' : ''}>
|
|
500
|
+
<div class="{selected != 'sequence' ? 'hidden' : ''} max-w-7xl mx-auto">
|
|
479
501
|
{#if isListJob}
|
|
480
502
|
{@const lenToAdd = Math.min(
|
|
481
503
|
20,
|
|
@@ -662,8 +684,8 @@ function loadPreviousIters(lenToAdd) {
|
|
|
662
684
|
</div>
|
|
663
685
|
{#if render}
|
|
664
686
|
{#if job.raw_flow && !isListJob}
|
|
665
|
-
<div class="{selected != 'graph' ? 'hidden' : ''} mt-4">
|
|
666
|
-
<div class="grid grid-cols-3 border">
|
|
687
|
+
<div class="{selected != 'graph' ? 'hidden' : ''} grow mt-4">
|
|
688
|
+
<div class="grid grid-cols-3 border h-full">
|
|
667
689
|
<div class="col-span-2 bg-surface-secondary">
|
|
668
690
|
<div class="flex flex-col">
|
|
669
691
|
{#each Object.values($retryStatus) as count}
|
|
@@ -687,16 +709,22 @@ function loadPreviousIters(lenToAdd) {
|
|
|
687
709
|
success={jobId != undefined && isSuccess(job?.['success'])}
|
|
688
710
|
flowModuleStates={$localModuleStates}
|
|
689
711
|
on:select={(e) => {
|
|
690
|
-
rightColumnSelect
|
|
712
|
+
if (rightColumnSelect != 'node_definition') {
|
|
713
|
+
rightColumnSelect = 'node_status'
|
|
714
|
+
}
|
|
691
715
|
if (typeof e.detail == 'string') {
|
|
692
716
|
if (e.detail == 'Input') {
|
|
693
717
|
selectedNode = 'start'
|
|
718
|
+
stepDetail = undefined
|
|
694
719
|
} else if (e.detail == 'Result') {
|
|
695
720
|
selectedNode = 'end'
|
|
721
|
+
stepDetail = 'end'
|
|
696
722
|
} else {
|
|
697
723
|
selectedNode = e.detail
|
|
724
|
+
stepDetail = e.detail
|
|
698
725
|
}
|
|
699
726
|
} else {
|
|
727
|
+
stepDetail = e.detail
|
|
700
728
|
selectedNode = e.detail.id
|
|
701
729
|
}
|
|
702
730
|
}}
|
|
@@ -705,24 +733,27 @@ function loadPreviousIters(lenToAdd) {
|
|
|
705
733
|
/>
|
|
706
734
|
</div>
|
|
707
735
|
<div
|
|
708
|
-
class="border-l border-tertiary-inverse pt-1 overflow-auto min-h-[700px] flex flex-col"
|
|
736
|
+
class="border-l border-tertiary-inverse pt-1 overflow-auto min-h-[700px] flex flex-col z-0"
|
|
709
737
|
>
|
|
710
738
|
<Tabs bind:selected={rightColumnSelect}>
|
|
711
739
|
<Tab value="timeline"><span class="font-semibold text-md">Timeline</span></Tab>
|
|
712
|
-
<Tab value="
|
|
740
|
+
<Tab value="node_status"><span class="font-semibold">Node status</span></Tab>
|
|
741
|
+
<Tab value="node_definition"><span class="font-semibold">Node definition</span></Tab>
|
|
713
742
|
{#if Object.keys(job?.flow_status?.user_states ?? {}).length > 0}
|
|
714
743
|
<Tab value="user_states"><span class="font-semibold">User States</span></Tab>
|
|
715
744
|
{/if}
|
|
716
745
|
</Tabs>
|
|
717
746
|
{#if rightColumnSelect == 'timeline'}
|
|
718
747
|
<FlowTimeline
|
|
748
|
+
selfWaitTime={job?.self_wait_time_ms}
|
|
749
|
+
aggregateWaitTime={job?.aggregate_wait_time_ms}
|
|
719
750
|
flowDone={job?.['success'] != undefined}
|
|
720
751
|
bind:this={flowTimeline}
|
|
721
752
|
flowModules={dfs(job.raw_flow?.modules ?? [], (x) => x.id)}
|
|
722
753
|
durationStatuses={localDurationStatuses}
|
|
723
754
|
/>
|
|
724
|
-
{:else if rightColumnSelect == '
|
|
725
|
-
<div class="pt-2 h-
|
|
755
|
+
{:else if rightColumnSelect == 'node_status'}
|
|
756
|
+
<div class="pt-2 max-h-[80vh]">
|
|
726
757
|
{#if selectedNode}
|
|
727
758
|
{@const node = $localModuleStates[selectedNode]}
|
|
728
759
|
|
|
@@ -793,6 +824,8 @@ function loadPreviousIters(lenToAdd) {
|
|
|
793
824
|
{:else}<p class="p-2 text-tertiary italic">Select a node to see its details here</p
|
|
794
825
|
>{/if}
|
|
795
826
|
</div>
|
|
827
|
+
{:else if rightColumnSelect == 'node_definition'}
|
|
828
|
+
<FlowGraphViewerStep {stepDetail} />
|
|
796
829
|
{:else if rightColumnSelect == 'user_states'}
|
|
797
830
|
<div class="p-2">
|
|
798
831
|
<JobArgs argLabel="Key" args={job?.flow_status?.user_states ?? {}} />
|
|
@@ -20,9 +20,12 @@ declare const __propDef: {
|
|
|
20
20
|
globalDurationStatuses: Writable<Record<string, DurationStatus>>[];
|
|
21
21
|
childFlow?: boolean | undefined;
|
|
22
22
|
reducedPolling?: boolean | undefined;
|
|
23
|
+
wideResults?: boolean | undefined;
|
|
23
24
|
};
|
|
24
25
|
events: {
|
|
26
|
+
start: CustomEvent<any>;
|
|
25
27
|
jobsLoaded: CustomEvent<any>;
|
|
28
|
+
done: CustomEvent<any>;
|
|
26
29
|
} & {
|
|
27
30
|
[evt: string]: CustomEvent<any>;
|
|
28
31
|
};
|
|
@@ -3,6 +3,9 @@ import { onDestroy } from 'svelte';
|
|
|
3
3
|
import { getDbClockNow } from '../forLater';
|
|
4
4
|
import { Loader2 } from 'lucide-svelte';
|
|
5
5
|
import TimelineBar from './TimelineBar.svelte';
|
|
6
|
+
import WaitTimeWarning from './common/waitTimeWarning/WaitTimeWarning.svelte';
|
|
7
|
+
export let selfWaitTime = undefined;
|
|
8
|
+
export let aggregateWaitTime = undefined;
|
|
6
9
|
export let flowModules;
|
|
7
10
|
export let durationStatuses;
|
|
8
11
|
export let flowDone = false;
|
|
@@ -113,6 +116,16 @@ onDestroy(() => {
|
|
|
113
116
|
</div>
|
|
114
117
|
</div>
|
|
115
118
|
</div>
|
|
119
|
+
{#if selfWaitTime}
|
|
120
|
+
<div class="px-2 py-2 grid grid-cols-6 w-full">
|
|
121
|
+
root:
|
|
122
|
+
<WaitTimeWarning
|
|
123
|
+
self_wait_time_ms={selfWaitTime}
|
|
124
|
+
aggregate_wait_time_ms={aggregateWaitTime}
|
|
125
|
+
variant="badge-self-wait"
|
|
126
|
+
/>
|
|
127
|
+
</div>
|
|
128
|
+
{/if}
|
|
116
129
|
{#each Object.values(flowModules) as k (k)}
|
|
117
130
|
<div class="overflow-auto max-h-60 shadow-inner dark:shadow-gray-700 relative">
|
|
118
131
|
{#if ($durationStatuses?.[k]?.iteration_from ?? 0) > 0}
|
|
@@ -2,6 +2,8 @@ import { SvelteComponent } from "svelte";
|
|
|
2
2
|
import type { Writable } from 'svelte/store';
|
|
3
3
|
declare const __propDef: {
|
|
4
4
|
props: {
|
|
5
|
+
selfWaitTime?: number | undefined;
|
|
6
|
+
aggregateWaitTime?: number | undefined;
|
|
5
7
|
flowModules: string[];
|
|
6
8
|
durationStatuses: Writable<Record<string, {
|
|
7
9
|
byJob: Record<string, {
|
|
@@ -5,14 +5,9 @@ import SchemaViewer from './SchemaViewer.svelte';
|
|
|
5
5
|
import FieldHeader from './FieldHeader.svelte';
|
|
6
6
|
import { copyToClipboard } from '../utils';
|
|
7
7
|
import FlowGraphViewer from './FlowGraphViewer.svelte';
|
|
8
|
-
import { setContext } from 'svelte';
|
|
9
|
-
import { SVELVET_CONTEXT_KEY } from './graph/svelvet/container/models';
|
|
10
8
|
import { Clipboard } from 'lucide-svelte';
|
|
11
9
|
import YAML from 'yaml';
|
|
12
10
|
import { yaml } from 'svelte-highlight/languages';
|
|
13
|
-
setContext(SVELVET_CONTEXT_KEY, {
|
|
14
|
-
fullHeight: true
|
|
15
|
-
});
|
|
16
11
|
export let flow;
|
|
17
12
|
export let initialOpen = undefined;
|
|
18
13
|
export let noSide = false;
|
|
@@ -9,6 +9,9 @@ import ToggleButtonGroup from './common/toggleButton-v2/ToggleButtonGroup.svelte
|
|
|
9
9
|
import ToggleButton from './common/toggleButton-v2/ToggleButton.svelte';
|
|
10
10
|
import Section from './Section.svelte';
|
|
11
11
|
import { Eye, Plus } from 'lucide-svelte';
|
|
12
|
+
import Label from './Label.svelte';
|
|
13
|
+
import { sendUserToast } from '../toast';
|
|
14
|
+
import { createEventDispatcher } from 'svelte';
|
|
12
15
|
export let name;
|
|
13
16
|
let can_write = false;
|
|
14
17
|
let folder;
|
|
@@ -49,6 +52,7 @@ let folderNotFound = undefined;
|
|
|
49
52
|
async function loadFolder() {
|
|
50
53
|
try {
|
|
51
54
|
folder = await FolderService.getFolder({ workspace: $workspaceStore, name });
|
|
55
|
+
summary = folder.summary ?? '';
|
|
52
56
|
can_write =
|
|
53
57
|
$userStore != undefined &&
|
|
54
58
|
(folder?.owners.includes('u/' + $userStore.username) ||
|
|
@@ -85,6 +89,7 @@ function getRole(x) {
|
|
|
85
89
|
let ownerKind = 'user';
|
|
86
90
|
let groupCreated = undefined;
|
|
87
91
|
let newGroupName = '';
|
|
92
|
+
let summary = '';
|
|
88
93
|
async function addGroup() {
|
|
89
94
|
await GroupService.createGroup({
|
|
90
95
|
workspace: $workspaceStore ?? '',
|
|
@@ -95,6 +100,17 @@ async function addGroup() {
|
|
|
95
100
|
loadGroups();
|
|
96
101
|
ownerItem = newGroupName;
|
|
97
102
|
}
|
|
103
|
+
const dispatch = createEventDispatcher();
|
|
104
|
+
async function updateFolder() {
|
|
105
|
+
await FolderService.updateFolder({
|
|
106
|
+
workspace: $workspaceStore ?? '',
|
|
107
|
+
name,
|
|
108
|
+
requestBody: { summary }
|
|
109
|
+
});
|
|
110
|
+
sendUserToast('Folder summary updated');
|
|
111
|
+
dispatch('update');
|
|
112
|
+
loadFolder();
|
|
113
|
+
}
|
|
98
114
|
</script>
|
|
99
115
|
|
|
100
116
|
<Drawer bind:this={newGroup}>
|
|
@@ -124,6 +140,15 @@ async function addGroup() {
|
|
|
124
140
|
</DrawerContent>
|
|
125
141
|
</Drawer>
|
|
126
142
|
|
|
143
|
+
<Section label="Metadata" class="mb-4">
|
|
144
|
+
<Label label="Summary">
|
|
145
|
+
<div class="flex flex-row gap-2">
|
|
146
|
+
<input placeholder="Short summary to be displayed when listed" bind:value={summary} />
|
|
147
|
+
<Button size="sm" on:click={updateFolder} disabled={!can_write}>Save</Button>
|
|
148
|
+
</div>
|
|
149
|
+
</Label>
|
|
150
|
+
</Section>
|
|
151
|
+
|
|
127
152
|
<Section label={`Permissions (${perms?.length ?? 0})`}>
|
|
128
153
|
<div class="flex flex-col gap-6">
|
|
129
154
|
{#if can_write}
|