windmill-components 1.291.4 → 1.305.0
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/autosize.d.ts +4 -0
- package/package/autosize.js +76 -0
- package/package/components/AppConnect.svelte +26 -7
- package/package/components/ArgInput.svelte +129 -103
- package/package/components/ContentSearch.svelte +8 -2
- package/package/components/ContextualVariableEditor.svelte +69 -0
- package/package/components/ContextualVariableEditor.svelte.d.ts +21 -0
- package/package/components/CronInput.svelte +3 -0
- package/package/components/DBSchemaExplorer.svelte +2 -2
- package/package/components/DarkModeObserver.svelte +2 -2
- package/package/components/DateTimeInput.svelte +9 -3
- package/package/components/DefaultScripts.svelte +1 -0
- package/package/components/DisplayResult.svelte +83 -41
- package/package/components/DisplayResult.svelte.d.ts +1 -0
- package/package/components/DurationMs.svelte +1 -10
- package/package/components/DurationMs.svelte.d.ts +0 -1
- package/package/components/Editor.svelte +40 -10
- package/package/components/ErrorOrRecoveryHandler.svelte +5 -2
- package/package/components/FlowBuilder.svelte +9 -5
- package/package/components/FlowBuilder.svelte.d.ts +1 -0
- package/package/components/FlowGraphViewerStep.svelte +5 -4
- package/package/components/FlowJobResult.svelte +36 -1
- package/package/components/FlowJobResult.svelte.d.ts +2 -1
- package/package/components/FlowLoopIterationPreview.svelte +18 -2
- package/package/components/FlowLoopIterationPreview.svelte.d.ts +6 -0
- package/package/components/FlowStatusViewer.svelte +1 -1
- package/package/components/FlowStatusViewerInner.svelte +117 -44
- package/package/components/FlowStatusViewerInner.svelte.d.ts +1 -0
- package/package/components/FlowStatusWaitingForEvents.svelte +97 -54
- package/package/components/GfmMarkdown.svelte +14 -0
- package/package/components/GfmMarkdown.svelte.d.ts +16 -0
- package/package/components/GroupEditor.svelte +1 -2
- package/package/components/HighlightCode.svelte +1 -1
- package/package/components/InputTransformForm.svelte +24 -2
- package/package/components/InstanceGroupEditor.svelte +1 -2
- package/package/components/InstanceSettings.svelte +4 -0
- package/package/components/JobArgs.svelte +5 -4
- package/package/components/JobArgs.svelte.d.ts +1 -0
- package/package/components/JobStatus.svelte +2 -8
- package/package/components/LightweightArgInput.svelte +3 -6
- package/package/components/LightweightArgInput.svelte.d.ts +0 -1
- package/package/components/LogId.svelte +3 -0
- package/package/components/LogId.svelte.d.ts +16 -0
- package/package/components/LogViewer.svelte +14 -5
- package/package/components/MapResult.svelte +151 -0
- package/package/components/MapResult.svelte.d.ts +27 -0
- package/package/components/MoveDrawer.svelte +2 -1
- package/package/components/ObjectStoreConfigSettings.svelte +169 -0
- package/package/components/ObjectStoreConfigSettings.svelte.d.ts +32 -0
- package/package/components/ParqetTableRenderer.svelte +3 -2
- package/package/components/ResourceEditor.svelte +33 -11
- package/package/components/RunChart.svelte +0 -1
- package/package/components/RunForm.svelte.d.ts +1 -1
- package/package/components/RunFormAdvancedPopup.svelte.d.ts +1 -1
- package/package/components/SavedInputs.svelte +1 -1
- package/package/components/ScriptBuilder.svelte +38 -8
- package/package/components/SimpleEditor.svelte +1 -3
- package/package/components/SimpleEditor.svelte.d.ts +0 -3
- package/package/components/SupabaseConnect.svelte +2 -2
- package/package/components/TableSimple.svelte +12 -1
- package/package/components/TableSimple.svelte.d.ts +1 -0
- package/package/components/TestConnection.svelte +29 -4
- package/package/components/TestConnection.svelte.d.ts +2 -0
- package/package/components/TestJobLoader.svelte +19 -2
- package/package/components/TestJobLoader.svelte.d.ts +3 -0
- package/package/components/UserSettings.svelte +5 -2
- package/package/components/UserSettings.svelte.d.ts +4 -0
- package/package/components/VariableEditor.svelte +2 -3
- package/package/components/WorkspaceGroup.svelte +10 -1
- package/package/components/apps/components/display/AppCustomComponent.svelte +3 -0
- package/package/components/apps/components/display/AppText.svelte +14 -19
- package/package/components/apps/components/display/PlotlyHtml.svelte +5 -1
- package/package/components/apps/components/display/PlotlyHtmlV2.svelte +4 -1
- package/package/components/apps/components/display/VegaLiteHtml.svelte +3 -3
- package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +18 -2
- package/package/components/apps/components/display/dbtable/DbExplorerCount.svelte +8 -5
- package/package/components/apps/components/display/dbtable/DbExplorerCount.svelte.d.ts +2 -0
- package/package/components/apps/components/display/dbtable/InsertRow.svelte +32 -18
- package/package/components/apps/components/display/dbtable/queries/count.js +2 -2
- package/package/components/apps/components/display/dbtable/queries/select.js +8 -6
- package/package/components/apps/components/display/dbtable/utils.d.ts +10 -5
- package/package/components/apps/components/display/dbtable/utils.js +83 -29
- package/package/components/apps/components/display/table/AppAggridTable.svelte +1 -1
- package/package/components/apps/components/display/table/AppTable.svelte +5 -1
- package/package/components/apps/components/helpers/RunnableComponent.svelte +3 -0
- package/package/components/apps/components/helpers/eval.d.ts +1 -0
- package/package/components/apps/components/inputs/AppFileInput.svelte +8 -1
- package/package/components/apps/editor/AppEditorHeader.svelte +1 -1
- package/package/components/apps/editor/GridEditorMenu.svelte +11 -1
- package/package/components/apps/editor/RunnableJobPanel.svelte +5 -30
- package/package/components/apps/editor/appUtils.js +2 -1
- package/package/components/apps/editor/component/components.d.ts +78 -78
- package/package/components/apps/editor/component/components.js +12 -12
- package/package/components/apps/editor/component/default-codes.js +5 -1
- package/package/components/apps/editor/componentsPanel/CssEval.svelte +0 -1
- package/package/components/apps/editor/componentsPanel/CssProperty.svelte +113 -109
- package/package/components/apps/editor/componentsPanel/QuickStyleMenu.svelte +14 -7
- package/package/components/apps/editor/componentsPanel/componentControlUtils.js +2 -0
- package/package/components/apps/editor/componentsPanel/quickStyleProperties.js +2 -1
- package/package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +3 -1
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte +6 -0
- package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +4 -0
- package/package/components/apps/editor/settingsPanel/ComponentInputTypeEditor.svelte +1 -1
- package/package/components/apps/editor/settingsPanel/GridPane.svelte +11 -15
- package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +1 -1
- package/package/components/apps/editor/settingsPanel/StylePanel.svelte +40 -39
- package/package/components/apps/editor/settingsPanel/SubTypeEditor.svelte +2 -0
- package/package/components/apps/editor/settingsPanel/SubTypeEditor.svelte.d.ts +1 -0
- package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte +0 -1
- package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +13 -6
- package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte.d.ts +1 -0
- package/package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +6 -2
- package/package/components/apps/editor/settingsPanel/secondaryMenu/SecondaryMenu.svelte +1 -6
- package/package/components/apps/svelte-select/lib/Select.svelte.d.ts +2 -2
- package/package/components/apps/types.d.ts +1 -0
- package/package/components/apps/utils.js +3 -3
- package/package/components/build_workers.js +2 -1
- package/package/components/common/FileProgressBar.svelte +1 -1
- package/package/components/common/clearableInput/ClearableInput.svelte.d.ts +1 -1
- package/package/components/common/fileInput/FileInput.svelte +4 -0
- package/package/components/common/fileInput/FileInput.svelte.d.ts +2 -0
- package/package/components/common/modal/Modal.svelte +2 -0
- package/package/components/copilot/MetadataGen.svelte +17 -12
- package/package/components/copilot/MetadataGen.svelte.d.ts +1 -1
- package/package/components/copilot/ScriptGen.svelte +61 -27
- package/package/components/copilot/lib.d.ts +4 -1
- package/package/components/copilot/lib.js +46 -31
- package/package/components/copilot/prompts/edit.yaml +1 -0
- package/package/components/copilot/prompts/editPrompt.js +1 -1
- package/package/components/copilot/prompts/fix.yaml +1 -0
- package/package/components/copilot/prompts/fixPrompt.js +1 -1
- package/package/components/copilot/prompts/gen.yaml +1 -0
- package/package/components/copilot/prompts/genPrompt.js +1 -1
- package/package/components/details/WebhooksPanel.svelte +10 -3
- package/package/components/flows/content/FlowInputs.svelte +35 -36
- package/package/components/flows/content/FlowLoop.svelte +0 -1
- package/package/components/flows/content/FlowModuleComponent.svelte +18 -1
- package/package/components/flows/content/FlowModuleSuspend.svelte +7 -0
- package/package/components/flows/content/FlowModuleWrapper.svelte +4 -1
- package/package/components/flows/content/FlowSettings.svelte +32 -4
- package/package/components/flows/content/FlowWhileLoop.svelte +137 -0
- package/package/components/flows/content/FlowWhileLoop.svelte.d.ts +19 -0
- package/package/components/flows/content/SuspendDrawer.svelte +4 -4
- package/package/components/flows/dfs.js +1 -1
- package/package/components/flows/flowExplorer.js +1 -1
- package/package/components/flows/flowStateUtils.d.ts +1 -0
- package/package/components/flows/flowStateUtils.js +12 -0
- package/package/components/flows/map/FlowModuleSchemaMap.svelte +6 -2
- package/package/components/flows/map/InsertModuleButton.svelte +12 -0
- package/package/components/flows/map/MapItem.svelte +5 -5
- package/package/components/flows/map/MapItem.svelte.d.ts +1 -1
- package/package/components/flows/types.d.ts +1 -0
- package/package/components/flows/utils.d.ts +1 -0
- package/package/components/flows/utils.js +3 -0
- package/package/components/graph/FlowGraph.svelte +1 -1
- package/package/components/graph/model.d.ts +5 -2
- package/package/components/graph/svelvet/container/views/GraphView.svelte +2 -0
- package/package/components/home/Item.svelte +7 -2
- package/package/components/home/TreeView.svelte +4 -2
- package/package/components/home/TreeViewRoot.svelte +1 -1
- package/package/components/instanceSettings.d.ts +1 -1
- package/package/components/instanceSettings.js +12 -4
- package/package/components/jobs/JobPreview.svelte +1 -4
- package/package/components/propertyPicker/ObjectViewer.svelte +3 -0
- package/package/components/propertyPicker/ObjectViewer.svelte.d.ts +1 -0
- package/package/components/runs/JobLoader.svelte +3 -2
- package/package/components/runs/JobPreview.svelte +13 -7
- package/package/components/runs/RunsFilter.svelte.d.ts +1 -1
- package/package/components/scriptEditor/LogPanel.svelte +6 -8
- package/package/components/settings/ChangeWorkspaceId.svelte +98 -0
- package/package/components/settings/ChangeWorkspaceId.svelte.d.ts +16 -0
- package/package/components/settings/ChangeWorkspaceName.svelte +71 -0
- package/package/components/settings/ChangeWorkspaceName.svelte.d.ts +16 -0
- package/package/components/settings/PremiumInfo.svelte +2 -1
- package/package/components/sidebar/OperatorMenu.svelte +3 -2
- package/package/components/sidebar/UserMenu.svelte +13 -2
- package/package/components/sidebar/WorkspaceMenu.svelte +30 -1
- package/package/components/sidebar/changelogs.js +51 -1
- package/package/components/table/AutoDataTable.svelte +62 -41
- package/package/components/tutorials/FlowBuilderTutorialSimpleFlow.svelte +2 -2
- package/package/es6.d.ts.txt +1 -12395
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/index.d.ts +2 -0
- package/package/gen/models/CacheTtl.d.ts +4 -0
- package/package/gen/models/CacheTtl.js +5 -0
- package/package/gen/models/ContextualVariable.d.ts +1 -0
- package/package/gen/models/CreateWorkspace.d.ts +1 -1
- package/package/gen/models/FlowMetadata.d.ts +1 -0
- package/package/gen/models/FlowModule.d.ts +2 -0
- package/package/gen/models/FlowModuleValue.d.ts +2 -1
- package/package/gen/models/FlowStatus.d.ts +1 -0
- package/package/gen/models/FlowValue.d.ts +1 -0
- package/package/gen/models/GitRepositorySettings.d.ts +2 -1
- package/package/gen/models/GlobalUserInfo.d.ts +1 -0
- package/package/gen/models/NewScript.d.ts +1 -0
- package/package/gen/models/OpenFlowWPath.d.ts +1 -0
- package/package/gen/models/Script.d.ts +1 -0
- package/package/gen/models/WhileloopFlow.d.ts +8 -0
- package/package/gen/models/WhileloopFlow.js +5 -0
- package/package/gen/models/WorkspaceGitSyncSettings.d.ts +1 -1
- package/package/gen/services/JobService.d.ts +74 -8
- package/package/gen/services/JobService.js +55 -8
- package/package/gen/services/ScheduleService.d.ts +5 -1
- package/package/gen/services/ScheduleService.js +2 -1
- package/package/gen/services/SettingService.d.ts +11 -0
- package/package/gen/services/SettingService.js +13 -0
- package/package/gen/services/UserService.d.ts +29 -1
- package/package/gen/services/UserService.js +30 -0
- package/package/gen/services/WorkspaceService.d.ts +57 -2
- package/package/gen/services/WorkspaceService.js +76 -0
- package/package/hub.d.ts +3 -3
- package/package/hub.js +6 -6
- package/package/infer.d.ts +1 -20
- package/package/infer.js +1 -95
- package/package/inferArgSig.d.ts +20 -0
- package/package/inferArgSig.js +95 -0
- package/package/script_helpers.d.ts +3 -3
- package/package/script_helpers.js +47 -7
- package/package/scripts.d.ts +2 -2
- package/package/scripts.js +4 -4
- package/package/stores.d.ts +4 -0
- package/package/stores.js +2 -0
- package/package/utils.js +1 -0
- package/package.json +3 -2
|
@@ -5,7 +5,7 @@ import { isOwner as loadIsOwner } from '../utils';
|
|
|
5
5
|
import { userStore, workspaceStore } from '../stores';
|
|
6
6
|
export let jobId;
|
|
7
7
|
export let workspaceId = undefined;
|
|
8
|
-
export let flowStateStore =
|
|
8
|
+
export let flowStateStore = writable({});
|
|
9
9
|
export let selectedJobStep = undefined;
|
|
10
10
|
export let isOwner = false;
|
|
11
11
|
let lastJobId = jobId;
|
|
@@ -31,6 +31,7 @@ export let selectedNode = undefined;
|
|
|
31
31
|
export let globalModuleStates;
|
|
32
32
|
export let globalDurationStatuses;
|
|
33
33
|
export let childFlow = false;
|
|
34
|
+
export let reducedPolling = false;
|
|
34
35
|
let jobResults = [];
|
|
35
36
|
let jobFailures = [];
|
|
36
37
|
let forloop_selected = '';
|
|
@@ -78,22 +79,6 @@ function initializeByJob(modId) {
|
|
|
78
79
|
return x;
|
|
79
80
|
}));
|
|
80
81
|
}
|
|
81
|
-
if (flowJobIds) {
|
|
82
|
-
let common = {
|
|
83
|
-
iteration_from: Math.max(flowJobIds.flowJobs.length - 20, 0),
|
|
84
|
-
iteration_total: flowJobIds?.length
|
|
85
|
-
};
|
|
86
|
-
let modId = flowJobIds?.moduleId ?? '';
|
|
87
|
-
$localDurationStatuses[modId] = {
|
|
88
|
-
...($localDurationStatuses[modId] ?? { byJob: {} }),
|
|
89
|
-
...common
|
|
90
|
-
};
|
|
91
|
-
let prefixed = modId;
|
|
92
|
-
globalDurationStatuses.forEach((x) => x.update((x) => {
|
|
93
|
-
x[prefixed] = { ...(x[prefixed] ?? { byJob: {} }), ...common };
|
|
94
|
-
return x;
|
|
95
|
-
}));
|
|
96
|
-
}
|
|
97
82
|
function updateForloop(len) {
|
|
98
83
|
forloop_selected = flowJobIds?.flowJobs[len - 1] ?? '';
|
|
99
84
|
lastSize = len;
|
|
@@ -110,7 +95,13 @@ function updateStatus(status) {
|
|
|
110
95
|
else if ($retryStatus[jobId ?? ''] != undefined) {
|
|
111
96
|
delete $retryStatus[jobId ?? ''];
|
|
112
97
|
}
|
|
113
|
-
|
|
98
|
+
let jobStatus = job?.flow_status?.modules?.[job?.flow_status.step];
|
|
99
|
+
if (jobStatus && jobStatus.count != undefined) {
|
|
100
|
+
$suspendStatus[jobId ?? ''] = { nb: jobStatus.count, job: job };
|
|
101
|
+
}
|
|
102
|
+
else if ($suspendStatus[jobId ?? ''] != undefined) {
|
|
103
|
+
delete $suspendStatus[jobId ?? ''];
|
|
104
|
+
}
|
|
114
105
|
}
|
|
115
106
|
function updateInnerModules() {
|
|
116
107
|
if ($localModuleStates) {
|
|
@@ -124,7 +115,8 @@ function updateInnerModules() {
|
|
|
124
115
|
$localModuleStates[mod.id ?? '']?.scheduled_for == undefined) {
|
|
125
116
|
JobService.getJob({
|
|
126
117
|
workspace: workspaceId ?? $workspaceStore ?? '',
|
|
127
|
-
id: mod.job ?? ''
|
|
118
|
+
id: mod.job ?? '',
|
|
119
|
+
noLogs: true
|
|
128
120
|
})
|
|
129
121
|
.then((job) => {
|
|
130
122
|
const newState = {
|
|
@@ -151,7 +143,8 @@ async function loadJobInProgress() {
|
|
|
151
143
|
try {
|
|
152
144
|
const newJob = await JobService.getJob({
|
|
153
145
|
workspace: workspaceId ?? $workspaceStore ?? '',
|
|
154
|
-
id: jobId ?? ''
|
|
146
|
+
id: jobId ?? '',
|
|
147
|
+
noLogs: true
|
|
155
148
|
});
|
|
156
149
|
if (!deepEqual(job, newJob)) {
|
|
157
150
|
job = newJob;
|
|
@@ -166,16 +159,34 @@ async function loadJobInProgress() {
|
|
|
166
159
|
}
|
|
167
160
|
}
|
|
168
161
|
if (job?.type !== 'CompletedJob' && errorCount < 4) {
|
|
169
|
-
timeout = setTimeout(() => loadJobInProgress(),
|
|
162
|
+
timeout = setTimeout(() => loadJobInProgress(), reducedPolling ? 5000 : 1000);
|
|
170
163
|
}
|
|
171
164
|
}
|
|
172
165
|
async function updateJobId() {
|
|
173
166
|
if (jobId !== job?.id) {
|
|
174
167
|
$localModuleStates = {};
|
|
175
|
-
$localDurationStatuses = {};
|
|
176
168
|
flowTimeline?.reset();
|
|
177
169
|
timeout && clearTimeout(timeout);
|
|
178
170
|
innerModules = [];
|
|
171
|
+
if (flowJobIds) {
|
|
172
|
+
let common = {
|
|
173
|
+
iteration_from: Math.max(flowJobIds.flowJobs.length - 20, 0),
|
|
174
|
+
iteration_total: flowJobIds?.length
|
|
175
|
+
};
|
|
176
|
+
let modId = flowJobIds?.moduleId ?? '';
|
|
177
|
+
$localDurationStatuses[modId] = {
|
|
178
|
+
...($localDurationStatuses[modId] ?? { byJob: {} }),
|
|
179
|
+
...common
|
|
180
|
+
};
|
|
181
|
+
let prefixed = modId;
|
|
182
|
+
globalDurationStatuses.forEach((x) => x.update((x) => {
|
|
183
|
+
x[prefixed] = { ...(x[prefixed] ?? { byJob: {} }), ...common };
|
|
184
|
+
return x;
|
|
185
|
+
}));
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
$localDurationStatuses = {};
|
|
189
|
+
}
|
|
179
190
|
await loadJobInProgress();
|
|
180
191
|
}
|
|
181
192
|
}
|
|
@@ -245,6 +256,12 @@ function onJobsLoaded(mod, job) {
|
|
|
245
256
|
function innerJobLoaded(jobLoaded, j) {
|
|
246
257
|
let modId = flowJobIds?.moduleId;
|
|
247
258
|
if (modId) {
|
|
259
|
+
if ($flowStateStore && $flowStateStore?.[modId] == undefined) {
|
|
260
|
+
$flowStateStore[modId] = {
|
|
261
|
+
...$flowStateStore[modId],
|
|
262
|
+
previewResult: jobLoaded.args
|
|
263
|
+
};
|
|
264
|
+
}
|
|
248
265
|
if ($flowStateStore?.[modId]) {
|
|
249
266
|
if (!childFlow) {
|
|
250
267
|
if (!$flowStateStore[modId].previewResult ||
|
|
@@ -321,6 +338,26 @@ function innerJobLoaded(jobLoaded, j) {
|
|
|
321
338
|
}
|
|
322
339
|
let flowTimeline;
|
|
323
340
|
let rightColumnSelect = 'timeline';
|
|
341
|
+
let slicedListJobIds = [];
|
|
342
|
+
$: flowJobIds && !deepEqual(flowJobIds, lastFlowJobIds) && updateSlicedListJobIds();
|
|
343
|
+
let lastFlowJobIds = undefined;
|
|
344
|
+
function updateSlicedListJobIds() {
|
|
345
|
+
lastFlowJobIds = flowJobIds;
|
|
346
|
+
slicedListJobIds =
|
|
347
|
+
(flowJobIds?.flowJobs.length ?? 0) > 20
|
|
348
|
+
? flowJobIds?.flowJobs?.slice($localDurationStatuses[flowJobIds?.moduleId ?? '']?.iteration_from ?? 0) ?? []
|
|
349
|
+
: flowJobIds?.flowJobs ?? [];
|
|
350
|
+
}
|
|
351
|
+
function loadPreviousIters(lenToAdd) {
|
|
352
|
+
let r = $localDurationStatuses[flowJobIds?.moduleId ?? ''];
|
|
353
|
+
if (r.iteration_from) {
|
|
354
|
+
r.iteration_from -= lenToAdd;
|
|
355
|
+
$localDurationStatuses = $localDurationStatuses;
|
|
356
|
+
globalDurationStatuses.forEach((x) => x.update((x) => x));
|
|
357
|
+
}
|
|
358
|
+
jobResults = [...new Array(lenToAdd), ...jobResults];
|
|
359
|
+
updateSlicedListJobIds();
|
|
360
|
+
}
|
|
324
361
|
</script>
|
|
325
362
|
|
|
326
363
|
{#if job}
|
|
@@ -337,23 +374,28 @@ let rightColumnSelect = 'timeline';
|
|
|
337
374
|
)}
|
|
338
375
|
|
|
339
376
|
{#if (flowJobIds?.flowJobs.length ?? 0) > 20 && lenToAdd > 0}
|
|
377
|
+
{@const allToAdd = (flowJobIds?.length ?? 0) - (slicedListJobIds.length ?? 0)}
|
|
340
378
|
<p class="text-tertiary italic text-xs">
|
|
341
379
|
For performance reasons, only the last 20 items are shown by default <button
|
|
342
380
|
class="text-primary underline ml-4"
|
|
343
381
|
on:click={() => {
|
|
344
|
-
|
|
345
|
-
if (r.iteration_from) {
|
|
346
|
-
r.iteration_from -= lenToAdd
|
|
347
|
-
$localDurationStatuses = $localDurationStatuses
|
|
348
|
-
globalDurationStatuses.forEach((x) => x.update((x) => x))
|
|
349
|
-
}
|
|
382
|
+
loadPreviousIters(lenToAdd)
|
|
350
383
|
}}
|
|
351
384
|
>Load {lenToAdd} prior
|
|
352
385
|
</button>
|
|
386
|
+
{#if allToAdd > 0}
|
|
387
|
+
<button
|
|
388
|
+
class="text-primary underline ml-4"
|
|
389
|
+
on:click={() => {
|
|
390
|
+
loadPreviousIters(allToAdd)
|
|
391
|
+
}}
|
|
392
|
+
>Load {allToAdd} prior
|
|
393
|
+
</button>
|
|
394
|
+
{/if}
|
|
353
395
|
</p>
|
|
354
396
|
{/if}
|
|
355
397
|
{#if render}
|
|
356
|
-
<div class="w-full h-full border border-
|
|
398
|
+
<div class="w-full h-full border border-secondary bg-surface p-1 overflow-auto">
|
|
357
399
|
<DisplayResult workspaceId={job?.workspace_id} {jobId} result={jobResults} />
|
|
358
400
|
</div>
|
|
359
401
|
{/if}
|
|
@@ -371,13 +413,26 @@ let rightColumnSelect = 'timeline';
|
|
|
371
413
|
jobId={job?.id}
|
|
372
414
|
loading={job['running'] == true}
|
|
373
415
|
result={job.result}
|
|
374
|
-
logs={job.logs
|
|
416
|
+
logs={job.logs}
|
|
375
417
|
/>
|
|
376
418
|
</div>
|
|
377
419
|
{:else if job.flow_status?.modules?.[job?.flow_status?.step]?.type === FlowStatusModule.type.WAITING_FOR_EVENTS}
|
|
378
420
|
<FlowStatusWaitingForEvents {workspaceId} {job} {isOwner} />
|
|
421
|
+
{:else if $suspendStatus && Object.keys($suspendStatus).length > 0}
|
|
422
|
+
<div class="flex gap-2 flex-col">
|
|
423
|
+
{#each Object.values($suspendStatus) as suspendCount (suspendCount.job.id)}
|
|
424
|
+
<div>
|
|
425
|
+
<div class="text-sm">
|
|
426
|
+
Flow suspended, waiting for {suspendCount.nb} events
|
|
427
|
+
</div>
|
|
428
|
+
<FlowStatusWaitingForEvents job={suspendCount.job} {workspaceId} {isOwner} />
|
|
429
|
+
</div>
|
|
430
|
+
{/each}
|
|
431
|
+
</div>
|
|
379
432
|
{:else if job.logs}
|
|
380
|
-
<div
|
|
433
|
+
<div
|
|
434
|
+
class="text-xs p-4 bg-surface-secondary overflow-auto max-h-80 border border-tertiary-inverse"
|
|
435
|
+
>
|
|
381
436
|
<pre class="w-full">{job.logs}</pre>
|
|
382
437
|
</div>
|
|
383
438
|
{:else if innerModules?.length > 0}
|
|
@@ -426,22 +481,28 @@ let rightColumnSelect = 'timeline';
|
|
|
426
481
|
Embedded flows: ({flowJobIds?.flowJobs.length} items)
|
|
427
482
|
</h3>
|
|
428
483
|
{#if (flowJobIds?.flowJobs.length ?? 0) > 20 && lenToAdd > 0}
|
|
484
|
+
{@const allToAdd = (flowJobIds?.length ?? 0) - (slicedListJobIds.length ?? 0)}
|
|
485
|
+
|
|
429
486
|
<p class="text-tertiary italic text-xs">
|
|
430
487
|
For performance reasons, only the last 20 items are shown by default <button
|
|
431
488
|
class="text-primary underline ml-4"
|
|
432
489
|
on:click={() => {
|
|
433
|
-
|
|
434
|
-
if (r.iteration_from) {
|
|
435
|
-
r.iteration_from -= lenToAdd
|
|
436
|
-
$localDurationStatuses = $localDurationStatuses
|
|
437
|
-
globalDurationStatuses.forEach((x) => x.update((x) => x))
|
|
438
|
-
}
|
|
490
|
+
loadPreviousIters(lenToAdd)
|
|
439
491
|
}}
|
|
440
492
|
>Load {lenToAdd} prior
|
|
441
493
|
</button>
|
|
494
|
+
{#if allToAdd > 0}
|
|
495
|
+
<button
|
|
496
|
+
class="text-primary underline ml-4"
|
|
497
|
+
on:click={() => {
|
|
498
|
+
loadPreviousIters(allToAdd)
|
|
499
|
+
}}
|
|
500
|
+
>Load {allToAdd} prior
|
|
501
|
+
</button>
|
|
502
|
+
{/if}
|
|
442
503
|
</p>
|
|
443
504
|
{/if}
|
|
444
|
-
{#each
|
|
505
|
+
{#each slicedListJobIds as loopJobId, j (loopJobId)}
|
|
445
506
|
{#if render}
|
|
446
507
|
<Button
|
|
447
508
|
variant={forloop_selected === loopJobId ? 'contained' : 'border'}
|
|
@@ -471,12 +532,14 @@ let rightColumnSelect = 'timeline';
|
|
|
471
532
|
</Button>
|
|
472
533
|
{/if}
|
|
473
534
|
|
|
535
|
+
<!-- <LogId id={loopJobId} /> -->
|
|
474
536
|
<div class="border p-6" class:hidden={forloop_selected != loopJobId}>
|
|
475
537
|
<svelte:self
|
|
476
538
|
{childFlow}
|
|
477
539
|
globalModuleStates={[localModuleStates, ...globalModuleStates]}
|
|
478
540
|
globalDurationStatuses={[localDurationStatuses, ...globalDurationStatuses]}
|
|
479
541
|
render={forloop_selected == loopJobId && selected == 'sequence' && render}
|
|
542
|
+
reducedPolling={flowJobIds?.flowJobs.length && flowJobIds?.flowJobs.length > 20}
|
|
480
543
|
{workspaceId}
|
|
481
544
|
jobId={loopJobId}
|
|
482
545
|
on:jobsLoaded={(e) => innerJobLoaded(e.detail, j)}
|
|
@@ -570,9 +633,9 @@ let rightColumnSelect = 'timeline';
|
|
|
570
633
|
{/if}
|
|
571
634
|
{/each}
|
|
572
635
|
{#each Object.values($suspendStatus) as count}
|
|
573
|
-
{#if count}
|
|
636
|
+
{#if count.nb}
|
|
574
637
|
<span class="text-sm">
|
|
575
|
-
Flow suspended, waiting for {count} events
|
|
638
|
+
Flow suspended, waiting for {count.nb} events
|
|
576
639
|
</span>
|
|
577
640
|
{/if}
|
|
578
641
|
{/each}
|
|
@@ -600,10 +663,15 @@ let rightColumnSelect = 'timeline';
|
|
|
600
663
|
failureModule={job.raw_flow?.failure_module}
|
|
601
664
|
/>
|
|
602
665
|
</div>
|
|
603
|
-
<div
|
|
666
|
+
<div
|
|
667
|
+
class="border-l border-tertiary-inverse pt-1 overflow-auto min-h-[700px] flex flex-col"
|
|
668
|
+
>
|
|
604
669
|
<Tabs bind:selected={rightColumnSelect}>
|
|
605
670
|
<Tab value="timeline"><span class="font-semibold text-md">Timeline</span></Tab>
|
|
606
671
|
<Tab value="detail"><span class="font-semibold">Details</span></Tab>
|
|
672
|
+
{#if Object.keys(job?.flow_status?.user_states ?? {}).length > 0}
|
|
673
|
+
<Tab value="user_states"><span class="font-semibold">User States</span></Tab>
|
|
674
|
+
{/if}
|
|
607
675
|
</Tabs>
|
|
608
676
|
{#if rightColumnSelect == 'timeline'}
|
|
609
677
|
<FlowTimeline
|
|
@@ -613,7 +681,7 @@ let rightColumnSelect = 'timeline';
|
|
|
613
681
|
durationStatuses={localDurationStatuses}
|
|
614
682
|
/>
|
|
615
683
|
{:else if rightColumnSelect == 'detail'}
|
|
616
|
-
<div class="pt-2">
|
|
684
|
+
<div class="pt-2 h-full">
|
|
617
685
|
{#if selectedNode}
|
|
618
686
|
{@const node = $localModuleStates[selectedNode]}
|
|
619
687
|
|
|
@@ -663,15 +731,16 @@ let rightColumnSelect = 'timeline';
|
|
|
663
731
|
<JobArgs args={node.args} />
|
|
664
732
|
</div>
|
|
665
733
|
{/if}
|
|
666
|
-
|
|
667
734
|
<FlowJobResult
|
|
668
735
|
workspaceId={job?.workspace_id}
|
|
669
736
|
jobId={node.job_id}
|
|
670
737
|
noBorder
|
|
671
|
-
loading={
|
|
738
|
+
loading={node.type != FlowStatusModule.type.SUCCESS &&
|
|
739
|
+
node.type != FlowStatusModule.type.FAILURE}
|
|
740
|
+
refreshLog={node.type == FlowStatusModule.type.IN_PROGRESS}
|
|
672
741
|
col
|
|
673
742
|
result={node.result}
|
|
674
|
-
logs={node.logs
|
|
743
|
+
logs={node.logs}
|
|
675
744
|
/>
|
|
676
745
|
{:else}
|
|
677
746
|
<p class="p-2 text-tertiary italic"
|
|
@@ -682,6 +751,10 @@ let rightColumnSelect = 'timeline';
|
|
|
682
751
|
{:else}<p class="p-2 text-tertiary italic">Select a node to see its details here</p
|
|
683
752
|
>{/if}
|
|
684
753
|
</div>
|
|
754
|
+
{:else if rightColumnSelect == 'user_states'}
|
|
755
|
+
<div class="p-2">
|
|
756
|
+
<JobArgs argLabel="Key" args={job?.flow_status?.user_states ?? {}} />
|
|
757
|
+
</div>
|
|
685
758
|
{/if}
|
|
686
759
|
</div>
|
|
687
760
|
</div>
|
|
@@ -19,6 +19,7 @@ declare const __propDef: {
|
|
|
19
19
|
globalModuleStates: Writable<Record<string, GraphModuleState>>[];
|
|
20
20
|
globalDurationStatuses: Writable<Record<string, DurationStatus>>[];
|
|
21
21
|
childFlow?: boolean | undefined;
|
|
22
|
+
reducedPolling?: boolean | undefined;
|
|
22
23
|
};
|
|
23
24
|
events: {
|
|
24
25
|
jobsLoaded: CustomEvent<any>;
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
import { Job, JobService } from '../gen';
|
|
3
3
|
import { workspaceStore } from '../stores';
|
|
4
4
|
import { sendUserToast } from '../toast';
|
|
5
|
+
import { X } from 'lucide-svelte';
|
|
6
|
+
import DisplayResult from './DisplayResult.svelte';
|
|
5
7
|
import LightweightSchemaForm from './LightweightSchemaForm.svelte';
|
|
6
8
|
import Tooltip from './Tooltip.svelte';
|
|
7
9
|
import { Button } from './common';
|
|
@@ -9,73 +11,120 @@ export let isOwner;
|
|
|
9
11
|
export let workspaceId;
|
|
10
12
|
export let job;
|
|
11
13
|
let default_payload = {};
|
|
12
|
-
let enum_payload = {};
|
|
13
14
|
let resumeUrl = undefined;
|
|
15
|
+
let cancelUrl = undefined;
|
|
16
|
+
let description = undefined;
|
|
17
|
+
let hide_cancel = false;
|
|
14
18
|
$: approvalStep = (job?.flow_status?.step ?? 1) - 1;
|
|
19
|
+
let defaultValues = {};
|
|
15
20
|
$: job && getDefaultArgs();
|
|
21
|
+
let schema = {};
|
|
22
|
+
let lastJobId = undefined;
|
|
16
23
|
async function getDefaultArgs() {
|
|
17
|
-
let jobId = job
|
|
24
|
+
let jobId = job?.flow_status?.modules?.[approvalStep]?.job;
|
|
25
|
+
if (jobId === lastJobId) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
18
28
|
if (!jobId) {
|
|
19
29
|
return {};
|
|
20
30
|
}
|
|
31
|
+
lastJobId = jobId;
|
|
21
32
|
let job_result = await JobService.getCompletedJobResult({
|
|
22
33
|
workspace: workspaceId ?? $workspaceStore ?? '',
|
|
23
34
|
id: jobId
|
|
24
35
|
});
|
|
25
|
-
|
|
26
|
-
|
|
36
|
+
const args = job_result?.default_args ?? {};
|
|
37
|
+
description = job_result?.description;
|
|
38
|
+
defaultValues = JSON.parse(JSON.stringify(args));
|
|
39
|
+
default_payload = args;
|
|
27
40
|
resumeUrl = job_result?.['resume'];
|
|
41
|
+
cancelUrl = job_result?.['cancel'];
|
|
42
|
+
hide_cancel = job?.raw_flow?.modules?.[approvalStep]?.suspend?.hide_cancel ?? false;
|
|
43
|
+
schema = mergeSchema(job?.raw_flow?.modules?.[approvalStep]?.suspend?.resume_form?.schema ?? {}, job_result?.enums ?? {});
|
|
44
|
+
}
|
|
45
|
+
async function continu(approve) {
|
|
46
|
+
if ((resumeUrl && approve) || (cancelUrl && !approve)) {
|
|
47
|
+
let split = (approve ? resumeUrl : cancelUrl).split('/');
|
|
48
|
+
let signatureUrl = split.pop() ?? '';
|
|
49
|
+
const regex = /([^?]+)(?:\?[^=]+=(\w+))?/;
|
|
50
|
+
const matches = signatureUrl.match(regex);
|
|
51
|
+
const signature = matches?.[1];
|
|
52
|
+
if (!signature) {
|
|
53
|
+
sendUserToast(`Could not parse signature: ${signatureUrl}`, true);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const approver = matches?.[2] || undefined;
|
|
57
|
+
let resumeId = -1;
|
|
58
|
+
let parsedResumeId = split.pop() ?? '';
|
|
59
|
+
try {
|
|
60
|
+
resumeId = new Number(parsedResumeId).valueOf();
|
|
61
|
+
}
|
|
62
|
+
catch (e) {
|
|
63
|
+
console.error(`Could not parse resume id: ${parsedResumeId}`);
|
|
64
|
+
}
|
|
65
|
+
let jobId = split.pop() ?? '';
|
|
66
|
+
if (approve) {
|
|
67
|
+
await JobService.resumeSuspendedJobPost({
|
|
68
|
+
workspace: workspaceId ?? $workspaceStore ?? '',
|
|
69
|
+
id: jobId,
|
|
70
|
+
requestBody: default_payload,
|
|
71
|
+
resumeId,
|
|
72
|
+
signature,
|
|
73
|
+
approver
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
await JobService.cancelSuspendedJobPost({
|
|
78
|
+
workspace: workspaceId ?? $workspaceStore ?? '',
|
|
79
|
+
id: jobId,
|
|
80
|
+
resumeId,
|
|
81
|
+
signature,
|
|
82
|
+
approver,
|
|
83
|
+
requestBody: {}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
if (approve) {
|
|
89
|
+
await JobService.resumeSuspendedFlowAsOwner({
|
|
90
|
+
workspace: workspaceId ?? $workspaceStore ?? '',
|
|
91
|
+
id: job?.id ?? '',
|
|
92
|
+
requestBody: default_payload
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
await JobService.cancelQueuedJob({
|
|
97
|
+
workspace: workspaceId ?? $workspaceStore ?? '',
|
|
98
|
+
id: job?.id ?? '',
|
|
99
|
+
requestBody: {}
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
28
103
|
}
|
|
29
104
|
</script>
|
|
30
105
|
|
|
31
106
|
<div class="w-full h-full mt-2 text-sm text-tertiary">
|
|
32
107
|
<p>Waiting to be resumed</p>
|
|
108
|
+
{#if description != undefined}
|
|
109
|
+
<DisplayResult noControls result={description} />
|
|
110
|
+
{/if}
|
|
33
111
|
<div>
|
|
34
112
|
{#if isOwner || resumeUrl}
|
|
35
113
|
<div class="flex flex-row gap-2 mt-2">
|
|
114
|
+
{#if cancelUrl && !hide_cancel}
|
|
115
|
+
<div>
|
|
116
|
+
<Button
|
|
117
|
+
color="red"
|
|
118
|
+
title="Cancel the flow"
|
|
119
|
+
iconOnly
|
|
120
|
+
startIcon={{ icon: X }}
|
|
121
|
+
variant="border"
|
|
122
|
+
on:click={() => continu(false)}
|
|
123
|
+
/>
|
|
124
|
+
</div>
|
|
125
|
+
{/if}
|
|
36
126
|
<div>
|
|
37
|
-
<Button
|
|
38
|
-
color="green"
|
|
39
|
-
variant="border"
|
|
40
|
-
on:click={async () => {
|
|
41
|
-
if (resumeUrl) {
|
|
42
|
-
let split = resumeUrl.split('/')
|
|
43
|
-
let signatureUrl = split.pop() ?? ''
|
|
44
|
-
const regex = /([^?]+)(?:\?[^=]+=(\w+))?/
|
|
45
|
-
|
|
46
|
-
const matches = signatureUrl.match(regex)
|
|
47
|
-
|
|
48
|
-
const signature = matches?.[1]
|
|
49
|
-
if (!signature) {
|
|
50
|
-
sendUserToast(`Could not parse signature: ${signatureUrl}`, true)
|
|
51
|
-
return
|
|
52
|
-
}
|
|
53
|
-
const approver = matches?.[2] || undefined
|
|
54
|
-
|
|
55
|
-
let resumeId = -1
|
|
56
|
-
let parsedResumeId = split.pop() ?? ''
|
|
57
|
-
try {
|
|
58
|
-
resumeId = new Number(parsedResumeId).valueOf()
|
|
59
|
-
} catch (e) {
|
|
60
|
-
console.error(`Could not parse resume id: ${parsedResumeId}`)
|
|
61
|
-
}
|
|
62
|
-
let jobId = split.pop() ?? ''
|
|
63
|
-
await JobService.resumeSuspendedJobPost({
|
|
64
|
-
workspace: workspaceId ?? $workspaceStore ?? '',
|
|
65
|
-
id: jobId,
|
|
66
|
-
requestBody: default_payload,
|
|
67
|
-
resumeId,
|
|
68
|
-
signature,
|
|
69
|
-
approver
|
|
70
|
-
})
|
|
71
|
-
} else {
|
|
72
|
-
await JobService.resumeSuspendedFlowAsOwner({
|
|
73
|
-
workspace: workspaceId ?? $workspaceStore ?? '',
|
|
74
|
-
id: job?.id ?? '',
|
|
75
|
-
requestBody: default_payload
|
|
76
|
-
})
|
|
77
|
-
}
|
|
78
|
-
}}
|
|
127
|
+
<Button color="green" variant="border" on:click={() => continu(true)}
|
|
79
128
|
>Resume <Tooltip
|
|
80
129
|
>Since you are an owner of this flow, you can send resume events without necessarily
|
|
81
130
|
knowing the resume id sent by the approval step</Tooltip
|
|
@@ -83,15 +132,9 @@ async function getDefaultArgs() {
|
|
|
83
132
|
>
|
|
84
133
|
</div>
|
|
85
134
|
|
|
86
|
-
{#if job
|
|
135
|
+
{#if job?.raw_flow?.modules?.[approvalStep]?.suspend?.resume_form?.schema}
|
|
87
136
|
<div class="w-full border rounded-lg p-2">
|
|
88
|
-
<LightweightSchemaForm
|
|
89
|
-
bind:args={default_payload}
|
|
90
|
-
schema={mergeSchema(
|
|
91
|
-
job.raw_flow?.modules?.[approvalStep]?.suspend?.resume_form?.schema ?? {},
|
|
92
|
-
enum_payload
|
|
93
|
-
)}
|
|
94
|
-
/>
|
|
137
|
+
<LightweightSchemaForm bind:args={default_payload} {defaultValues} {schema} />
|
|
95
138
|
</div>
|
|
96
139
|
{/if}
|
|
97
140
|
<Tooltip
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<script>import Markdown from 'svelte-exmarkdown';
|
|
2
|
+
import { gfmPlugin } from 'svelte-exmarkdown/gfm';
|
|
3
|
+
export let md;
|
|
4
|
+
</script>
|
|
5
|
+
|
|
6
|
+
<div class="!prose-xs pgap">
|
|
7
|
+
<Markdown {md} plugins={[gfmPlugin()]} />
|
|
8
|
+
</div>
|
|
9
|
+
|
|
10
|
+
<style global>
|
|
11
|
+
:global(.pgap) > :global(p) {
|
|
12
|
+
margin-top: 0.5rem;
|
|
13
|
+
margin-bottom: 0.5rem;
|
|
14
|
+
}</style>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
md: string;
|
|
5
|
+
};
|
|
6
|
+
events: {
|
|
7
|
+
[evt: string]: CustomEvent<any>;
|
|
8
|
+
};
|
|
9
|
+
slots: {};
|
|
10
|
+
};
|
|
11
|
+
export type GfmMarkdownProps = typeof __propDef.props;
|
|
12
|
+
export type GfmMarkdownEvents = typeof __propDef.events;
|
|
13
|
+
export type GfmMarkdownSlots = typeof __propDef.slots;
|
|
14
|
+
export default class GfmMarkdown extends SvelteComponent<GfmMarkdownProps, GfmMarkdownEvents, GfmMarkdownSlots> {
|
|
15
|
+
}
|
|
16
|
+
export {};
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { userStore, workspaceStore } from '../stores';
|
|
3
3
|
import AutoComplete from 'simple-svelte-autocomplete';
|
|
4
4
|
import { createEventDispatcher } from 'svelte';
|
|
5
|
-
import autosize from '
|
|
5
|
+
import autosize from '../autosize';
|
|
6
6
|
import { Button } from './common';
|
|
7
7
|
import Skeleton from './common/skeleton/Skeleton.svelte';
|
|
8
8
|
import TableCustom from './TableCustom.svelte';
|
|
@@ -89,7 +89,6 @@ function getRole(x) {
|
|
|
89
89
|
<textarea
|
|
90
90
|
disabled={!can_write}
|
|
91
91
|
rows="2"
|
|
92
|
-
type="text"
|
|
93
92
|
use:autosize
|
|
94
93
|
bind:value={group.summary}
|
|
95
94
|
placeholder="Summary of the group"
|
|
@@ -210,7 +210,7 @@ loadResourceTypes();
|
|
|
210
210
|
staticTemplate
|
|
211
211
|
? `\`${arg?.value?.toString().replaceAll('`', '\\`') ?? ''}\``
|
|
212
212
|
: arg.value
|
|
213
|
-
? JSON.stringify(arg?.value, null, 4)
|
|
213
|
+
? '(' + JSON.stringify(arg?.value, null, 4) + ')'
|
|
214
214
|
: ''
|
|
215
215
|
)
|
|
216
216
|
}
|
|
@@ -226,6 +226,19 @@ loadResourceTypes();
|
|
|
226
226
|
arg.expr = undefined
|
|
227
227
|
}
|
|
228
228
|
setPropertyType(arg?.value)
|
|
229
|
+
} else if (inputCat == 'list' || inputCat == 'object') {
|
|
230
|
+
if (arg) {
|
|
231
|
+
try {
|
|
232
|
+
let newExpr = arg.expr
|
|
233
|
+
if (newExpr.startsWith('(') && newExpr.endsWith(')')) {
|
|
234
|
+
newExpr = newExpr.slice(1, -1)
|
|
235
|
+
}
|
|
236
|
+
arg.value = JSON.parse(newExpr)
|
|
237
|
+
} catch (e) {
|
|
238
|
+
arg.value = undefined
|
|
239
|
+
}
|
|
240
|
+
arg.expr = undefined
|
|
241
|
+
}
|
|
229
242
|
} else {
|
|
230
243
|
if (arg) {
|
|
231
244
|
arg.type = 'static'
|
|
@@ -282,7 +295,7 @@ loadResourceTypes();
|
|
|
282
295
|
<!-- svelte-ignore a11y-no-static-element-interactions -->
|
|
283
296
|
<div
|
|
284
297
|
class="relative {$propPickerConfig?.propName == argName
|
|
285
|
-
? 'outline outline-offset-
|
|
298
|
+
? 'outline outline-offset-1 outline-1 outline-blue-500 rounded-md'
|
|
286
299
|
: ''}"
|
|
287
300
|
on:keyup={stepInputGen?.onKeyUp}
|
|
288
301
|
>
|
|
@@ -372,6 +385,15 @@ loadResourceTypes();
|
|
|
372
385
|
<div class="mb-2" />
|
|
373
386
|
{:else}
|
|
374
387
|
Not recognized input type {argName} ({arg.expr}, {propertyType})
|
|
388
|
+
<div class="flex mt-2">
|
|
389
|
+
<Button
|
|
390
|
+
variant="border"
|
|
391
|
+
size="xs"
|
|
392
|
+
on:click={() => {
|
|
393
|
+
arg.expr = ''
|
|
394
|
+
}}>Set expr to empty string</Button
|
|
395
|
+
></div
|
|
396
|
+
>
|
|
375
397
|
{/if}
|
|
376
398
|
</div>
|
|
377
399
|
</div>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script>import { GroupService } from '../gen';
|
|
2
2
|
import { createEventDispatcher } from 'svelte';
|
|
3
|
-
import autosize from '
|
|
3
|
+
import autosize from '../autosize';
|
|
4
4
|
import { Button } from './common';
|
|
5
5
|
import Skeleton from './common/skeleton/Skeleton.svelte';
|
|
6
6
|
import TableCustom from './TableCustom.svelte';
|
|
@@ -32,7 +32,6 @@ async function loadInstanceGroup() {
|
|
|
32
32
|
<div class="flex flex-col gap-1">
|
|
33
33
|
<textarea
|
|
34
34
|
rows="2"
|
|
35
|
-
type="text"
|
|
36
35
|
use:autosize
|
|
37
36
|
bind:value={instance_group.summary}
|
|
38
37
|
placeholder="Summary of the group"
|