windmill-components 1.339.2 → 1.352.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/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/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 +16 -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
|
@@ -22,7 +22,7 @@ export let disableTutorials = false;
|
|
|
22
22
|
export let disableAi = false;
|
|
23
23
|
export let smallErrorHandler = false;
|
|
24
24
|
let flowTutorials = undefined;
|
|
25
|
-
const { selectedId, moving, history, flowStateStore, flowStore } = getContext('FlowEditorContext');
|
|
25
|
+
const { selectedId, moving, history, flowStateStore, flowStore, flowInputsStore } = getContext('FlowEditorContext');
|
|
26
26
|
async function insertNewModuleAtIndex(modules, index, kind, wsScript) {
|
|
27
27
|
push(history, $flowStore);
|
|
28
28
|
var module = emptyModule($flowStateStore, $flowStore, kind == 'flow');
|
|
@@ -195,6 +195,7 @@ const dispatch = createEventDispatcher();
|
|
|
195
195
|
maxHeight={minHeight}
|
|
196
196
|
modules={$flowStore.value?.modules}
|
|
197
197
|
{selectedId}
|
|
198
|
+
{flowInputsStore}
|
|
198
199
|
on:delete={({ detail }) => {
|
|
199
200
|
let e = detail.detail
|
|
200
201
|
dependents = getDependentComponents(e.id, $flowStore)
|
|
@@ -202,6 +203,10 @@ const dispatch = createEventDispatcher();
|
|
|
202
203
|
push(history, $flowStore)
|
|
203
204
|
selectNextId(e.id)
|
|
204
205
|
removeAtId($flowStore.value.modules, e.id)
|
|
206
|
+
|
|
207
|
+
if ($flowInputsStore) {
|
|
208
|
+
delete $flowInputsStore[e.id]
|
|
209
|
+
}
|
|
205
210
|
$flowStore = $flowStore
|
|
206
211
|
}
|
|
207
212
|
|
|
@@ -5,6 +5,9 @@ import type { Writable } from 'svelte/store';
|
|
|
5
5
|
import type ScriptEditorDrawer from './content/ScriptEditorDrawer.svelte';
|
|
6
6
|
import type { FlowState } from './flowState';
|
|
7
7
|
import type { Schedule } from './scheduleUtils';
|
|
8
|
+
export type FlowInput = Record<string, {
|
|
9
|
+
requiredInputsFilled?: Record<string, boolean>;
|
|
10
|
+
}>;
|
|
8
11
|
export type FlowEditorContext = {
|
|
9
12
|
selectedId: Writable<string>;
|
|
10
13
|
moving: Writable<{
|
|
@@ -26,4 +29,5 @@ export type FlowEditorContext = {
|
|
|
26
29
|
testStepStore: Writable<Record<string, any>>;
|
|
27
30
|
saveDraft: () => void;
|
|
28
31
|
initialPath: string;
|
|
32
|
+
flowInputsStore: Writable<FlowInput | undefined>;
|
|
29
33
|
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { type FlowModule, type Job, type RestartedFrom, type OpenFlow } from '../../gen';
|
|
1
|
+
import { type FlowModule, type InputTransform, type Job, type RestartedFrom, type OpenFlow, type FlowModuleValue } from '../../gen';
|
|
2
2
|
import type { FlowModuleState } from './flowState';
|
|
3
3
|
import type { PickableProperties } from './previousResults';
|
|
4
|
+
import type { Schema } from '../../common';
|
|
4
5
|
export declare function evalValue(k: string, mod: FlowModule, testStepStore: Record<string, any>, pickableProperties: PickableProperties | undefined, showError: boolean): any;
|
|
5
6
|
export declare function cleanInputs(flow: OpenFlow | any): OpenFlow & {
|
|
6
7
|
tag?: string;
|
|
@@ -15,3 +16,6 @@ export declare function runFlowPreview(args: Record<string, any>, flow: OpenFlow
|
|
|
15
16
|
}, path: string, restartedFrom: RestartedFrom | undefined): Promise<string>;
|
|
16
17
|
export declare function codeToStaticTemplate(code?: string): string | undefined;
|
|
17
18
|
export declare function emptyFlowModuleState(): FlowModuleState;
|
|
19
|
+
export declare function isInputFilled(inputTransforms: Record<string, InputTransform>, key: string, schema: Schema): boolean;
|
|
20
|
+
export declare function setRequiredInputFilled(argName: string, flowModuleValue: FlowModuleValue, requiredInputsFilled: Record<string, boolean>, schema: Schema): Record<string, boolean>;
|
|
21
|
+
export declare function initRequiredInputFilled(flowModuleValue: FlowModuleValue, schema: Schema): Record<string, boolean>;
|
|
@@ -118,3 +118,39 @@ export function emptyFlowModuleState() {
|
|
|
118
118
|
previewResult: NEVER_TESTED_THIS_FAR
|
|
119
119
|
};
|
|
120
120
|
}
|
|
121
|
+
export function isInputFilled(inputTransforms, key, schema) {
|
|
122
|
+
const required = schema?.required?.includes(key) ?? false;
|
|
123
|
+
if (!required) {
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
if (inputTransforms.hasOwnProperty(key)) {
|
|
127
|
+
const transform = inputTransforms[key];
|
|
128
|
+
if (transform?.type === 'static' &&
|
|
129
|
+
(transform?.value === undefined || transform?.value === '' || transform?.value === null)) {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
else if (transform?.type === 'javascript' &&
|
|
133
|
+
(transform?.expr === undefined || transform?.expr === '' || transform?.expr === null)) {
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
export function setRequiredInputFilled(argName, flowModuleValue, requiredInputsFilled, schema) {
|
|
140
|
+
const type = flowModuleValue.type;
|
|
141
|
+
if (type == 'rawscript' || type == 'script' || type == 'flow') {
|
|
142
|
+
requiredInputsFilled[argName] = isInputFilled(flowModuleValue.input_transforms, argName, schema ?? {});
|
|
143
|
+
}
|
|
144
|
+
return requiredInputsFilled;
|
|
145
|
+
}
|
|
146
|
+
export function initRequiredInputFilled(flowModuleValue, schema) {
|
|
147
|
+
const requiredInputsFilled = {};
|
|
148
|
+
const type = flowModuleValue.type;
|
|
149
|
+
if (type == 'rawscript' || type == 'script' || type == 'flow') {
|
|
150
|
+
const keys = Object.keys(flowModuleValue.input_transforms);
|
|
151
|
+
for (const key of keys) {
|
|
152
|
+
requiredInputsFilled[key] = isInputFilled(flowModuleValue.input_transforms, key, schema ?? {});
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return requiredInputsFilled;
|
|
156
|
+
}
|
|
@@ -25,7 +25,8 @@ export let scroll = false;
|
|
|
25
25
|
export let download = false;
|
|
26
26
|
export let fullSize = false;
|
|
27
27
|
export let disableAi = false;
|
|
28
|
-
|
|
28
|
+
export let flowInputsStore = writable(undefined);
|
|
29
|
+
setContext('FlowGraphContext', { selectedId, flowInputsStore });
|
|
29
30
|
let idGenerator;
|
|
30
31
|
let nestedNodes;
|
|
31
32
|
let nodes = [];
|
|
@@ -33,6 +34,7 @@ let edges = [];
|
|
|
33
34
|
let width, height;
|
|
34
35
|
let fullWidth;
|
|
35
36
|
let errorHandlers = {};
|
|
37
|
+
let containerHeight = window.innerHeight;
|
|
36
38
|
let error = undefined;
|
|
37
39
|
$: showDataflow =
|
|
38
40
|
$selectedId != undefined &&
|
|
@@ -95,7 +97,7 @@ async function createGraph() {
|
|
|
95
97
|
nodes = layered.nodes;
|
|
96
98
|
let hfull = Math.max(layered.height, minHeight);
|
|
97
99
|
fullWidth = layered.width;
|
|
98
|
-
height = fullSize ? hfull : Math.
|
|
100
|
+
height = fullSize ? hfull : Math.max(hfull, maxHeight ?? containerHeight);
|
|
99
101
|
let useDataflow = dataflow && showDataflow;
|
|
100
102
|
edges = useDataflow ? [] : createEdges(nodes);
|
|
101
103
|
if (useDataflow && $selectedId) {
|
|
@@ -525,6 +527,7 @@ onMount(() => {
|
|
|
525
527
|
<!-- {JSON.stringify(flowModuleStates)} -->
|
|
526
528
|
<div
|
|
527
529
|
bind:clientWidth={width}
|
|
530
|
+
bind:clientHeight={containerHeight}
|
|
528
531
|
class={fullSize ? '' : 'w-full h-full overflow-hidden relative'}
|
|
529
532
|
id="flow-graph"
|
|
530
533
|
>
|
|
@@ -2,6 +2,7 @@ import { SvelteComponent } from "svelte";
|
|
|
2
2
|
import { type FlowModule } from '../../gen';
|
|
3
3
|
import { type GraphModuleState } from '.';
|
|
4
4
|
import { type Writable } from 'svelte/store';
|
|
5
|
+
import type { FlowInput } from '../flows/types';
|
|
5
6
|
declare const __propDef: {
|
|
6
7
|
props: {
|
|
7
8
|
success?: boolean | undefined;
|
|
@@ -19,6 +20,7 @@ declare const __propDef: {
|
|
|
19
20
|
download?: boolean | undefined;
|
|
20
21
|
fullSize?: boolean | undefined;
|
|
21
22
|
disableAi?: boolean | undefined;
|
|
23
|
+
flowInputsStore?: Writable<FlowInput | undefined> | undefined;
|
|
22
24
|
};
|
|
23
25
|
events: {
|
|
24
26
|
delete: CustomEvent<any>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
<script>const pkStringGenerator = () => (Math.random() + 1).toString(36).substring(7);
|
|
2
2
|
import { createStoreEmpty, populateSvelvetStoreFromUserInput } from '../../store/controllers/storeApi';
|
|
3
|
-
import { afterUpdate, onMount
|
|
3
|
+
import { afterUpdate, onMount } from 'svelte';
|
|
4
4
|
import GraphView from './GraphView.svelte';
|
|
5
5
|
import { sanitizeUserNodesAndEdges } from '../controllers/middleware';
|
|
6
|
-
import { SVELVET_CONTEXT_KEY } from '../models';
|
|
7
|
-
const settings = getContext(SVELVET_CONTEXT_KEY);
|
|
8
6
|
export let nodes;
|
|
9
7
|
export let edges;
|
|
10
8
|
export let width = 600;
|
|
@@ -23,7 +21,6 @@ export let scroll = false;
|
|
|
23
21
|
export let download = false;
|
|
24
22
|
export let dataflow = false;
|
|
25
23
|
export let nodeSelected = false;
|
|
26
|
-
const fullHeight = settings?.fullHeight ?? false;
|
|
27
24
|
// generates a unique string for each svelvet component's unique store instance
|
|
28
25
|
// creates a store that uses the unique sting as the key to create and look up the corresponding store
|
|
29
26
|
// this way we can have multiple Svelvet Components on the same page and prevent overlap of information
|
|
@@ -95,7 +92,7 @@ afterUpdate(() => {
|
|
|
95
92
|
<!-- Now that a store has been created from the initial nodes and initial edges we drill props from the store down to the D3 GraphView along with the unique key -->
|
|
96
93
|
<div
|
|
97
94
|
class="Svelvet bg-surface-secondary"
|
|
98
|
-
style={`width: ${width}px; height:
|
|
95
|
+
style={`width: ${width}px; min-height: 100%; height: ${height}px;`}
|
|
99
96
|
>
|
|
100
97
|
{#if error != ''}
|
|
101
98
|
<div class="error text-red-600 center-center p-4">{error}</div>
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import type { FlowStatusModule
|
|
2
|
-
import MapItem from '../flows/map/MapItem.svelte';
|
|
3
|
-
import type { GraphModuleState } from './model';
|
|
1
|
+
import type { FlowStatusModule } from '../../gen';
|
|
4
2
|
export declare const NODE: {
|
|
5
3
|
width: number;
|
|
6
4
|
height: number;
|
|
@@ -11,37 +9,3 @@ export declare const NODE: {
|
|
|
11
9
|
};
|
|
12
10
|
export declare function createIdGenerator(): Generator<number, number, unknown>;
|
|
13
11
|
export declare function getStateColor(state: FlowStatusModule['type'] | undefined): string;
|
|
14
|
-
export declare function flowModuleToNode(parentIds: string[], mod: FlowModule, edgeLabel: string | undefined, annotation: string | undefined, loopDepth: number, insertableEnd: boolean, branchable: boolean, modules: FlowModule[], callbackHandler: (event: string, detail: any) => void, flowModuleStates: Record<string, GraphModuleState>, insertable: boolean, moving: boolean, disableAi: boolean): {
|
|
15
|
-
type: string;
|
|
16
|
-
id: string;
|
|
17
|
-
position: {
|
|
18
|
-
x: number;
|
|
19
|
-
y: number;
|
|
20
|
-
};
|
|
21
|
-
data: {
|
|
22
|
-
custom: {
|
|
23
|
-
component: typeof MapItem;
|
|
24
|
-
props: {
|
|
25
|
-
trigger: boolean;
|
|
26
|
-
mod: FlowModule;
|
|
27
|
-
insertable: boolean;
|
|
28
|
-
insertableEnd: boolean;
|
|
29
|
-
branchable: boolean;
|
|
30
|
-
duration_ms: number | undefined;
|
|
31
|
-
bgColor: string;
|
|
32
|
-
annotation: string | undefined;
|
|
33
|
-
modules: FlowModule[];
|
|
34
|
-
moving: boolean;
|
|
35
|
-
disableAi: boolean;
|
|
36
|
-
};
|
|
37
|
-
cb: (event: string, detail: any) => void;
|
|
38
|
-
};
|
|
39
|
-
};
|
|
40
|
-
width: number;
|
|
41
|
-
height: number;
|
|
42
|
-
parentIds: string[];
|
|
43
|
-
sourcePosition: string;
|
|
44
|
-
targetPosition: string;
|
|
45
|
-
edgeLabel: string | undefined;
|
|
46
|
-
loopDepth: number;
|
|
47
|
-
};
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import MapItem from '../flows/map/MapItem.svelte';
|
|
2
1
|
export const NODE = {
|
|
3
2
|
width: 275,
|
|
4
3
|
height: 34,
|
|
@@ -30,36 +29,3 @@ export function getStateColor(state) {
|
|
|
30
29
|
return isDark ? '#2e3440' : '#fff';
|
|
31
30
|
}
|
|
32
31
|
}
|
|
33
|
-
export function flowModuleToNode(parentIds, mod, edgeLabel, annotation, loopDepth, insertableEnd, branchable, modules, callbackHandler, flowModuleStates, insertable, moving, disableAi) {
|
|
34
|
-
return {
|
|
35
|
-
type: 'node',
|
|
36
|
-
id: mod.id,
|
|
37
|
-
position: { x: -1, y: -1 },
|
|
38
|
-
data: {
|
|
39
|
-
custom: {
|
|
40
|
-
component: MapItem,
|
|
41
|
-
props: {
|
|
42
|
-
trigger: parentIds.length == 0,
|
|
43
|
-
mod,
|
|
44
|
-
insertable,
|
|
45
|
-
insertableEnd,
|
|
46
|
-
branchable,
|
|
47
|
-
duration_ms: flowModuleStates?.[mod.id]?.duration_ms,
|
|
48
|
-
bgColor: getStateColor(flowModuleStates?.[mod.id]?.type),
|
|
49
|
-
annotation,
|
|
50
|
-
modules,
|
|
51
|
-
moving,
|
|
52
|
-
disableAi
|
|
53
|
-
},
|
|
54
|
-
cb: callbackHandler
|
|
55
|
-
}
|
|
56
|
-
},
|
|
57
|
-
width: NODE.width,
|
|
58
|
-
height: NODE.height,
|
|
59
|
-
parentIds,
|
|
60
|
-
sourcePosition: 'bottom',
|
|
61
|
-
targetPosition: 'top',
|
|
62
|
-
edgeLabel,
|
|
63
|
-
loopDepth
|
|
64
|
-
};
|
|
65
|
-
}
|
|
@@ -100,7 +100,8 @@ export const settings = {
|
|
|
100
100
|
},
|
|
101
101
|
{
|
|
102
102
|
label: 'Private hub base url',
|
|
103
|
-
description: 'Base url of your private hub instance',
|
|
103
|
+
description: 'Base url of your private hub instance, without trailing slash',
|
|
104
|
+
placeholder: 'https://hub.company.com',
|
|
104
105
|
key: 'hub_base_url',
|
|
105
106
|
fieldType: 'text',
|
|
106
107
|
storage: 'setting',
|
|
@@ -95,7 +95,7 @@ onDestroy(() => {
|
|
|
95
95
|
Mem: {job?.['mem_peak'] ? `${(job['mem_peak'] / 1024).toPrecision(4)}MB` : 'N/A'}
|
|
96
96
|
</Badge>
|
|
97
97
|
{#if job?.['duration_ms']}
|
|
98
|
-
<DurationMs duration_ms={job?.['duration_ms']} />
|
|
98
|
+
<DurationMs duration_ms={job?.['duration_ms']} self_wait_time_ms={job?.self_wait_time_ms} aggregate_wait_time_ms={job?.aggregate_wait_time_ms} />
|
|
99
99
|
{/if}
|
|
100
100
|
{#if job?.['labels'] && Array.isArray(job?.['labels']) && job?.['labels'].length > 0}
|
|
101
101
|
{#each job?.['labels'] as label}
|
|
@@ -63,6 +63,7 @@ export let style = null;
|
|
|
63
63
|
export let ulSelectedClass = ``;
|
|
64
64
|
export let ulSelectedStyle = null;
|
|
65
65
|
export let value = null;
|
|
66
|
+
export let disableRemoveAll = false;
|
|
66
67
|
const selected_to_value = (selected) => {
|
|
67
68
|
value = maxSelect === 1 ? selected[0] ?? null : selected;
|
|
68
69
|
};
|
|
@@ -456,7 +457,7 @@ $: required, form_input?.setCustomValidity(``);
|
|
|
456
457
|
class="remove"
|
|
457
458
|
>
|
|
458
459
|
<slot name="remove-icon">
|
|
459
|
-
<X size={20} class="text-primary p-0.5" />
|
|
460
|
+
<X size={20} class="text-primary dark:text-primary-inverse p-0.5" />
|
|
460
461
|
</slot>
|
|
461
462
|
</button>
|
|
462
463
|
{/if}
|
|
@@ -501,7 +502,7 @@ $: required, form_input?.setCustomValidity(``);
|
|
|
501
502
|
{#if disabled}
|
|
502
503
|
<slot name="disabled-icon">disable</slot>
|
|
503
504
|
{:else if selected.length > 0}
|
|
504
|
-
{#if maxSelect !== 1 && selected.length > 1}
|
|
505
|
+
{#if maxSelect !== 1 && selected.length > 1 && !disableRemoveAll}
|
|
505
506
|
<button
|
|
506
507
|
type="button"
|
|
507
508
|
class="remove remove-all"
|
|
@@ -597,7 +598,7 @@ $: required, form_input?.setCustomValidity(``);
|
|
|
597
598
|
on:blur={() => (option_msg_is_active = false)}
|
|
598
599
|
role="option"
|
|
599
600
|
aria-selected="false"
|
|
600
|
-
class="user-msg"
|
|
601
|
+
class="user-msg p-1"
|
|
601
602
|
style:cursor={{
|
|
602
603
|
dupe: `not-allowed`,
|
|
603
604
|
create: `pointer`,
|
|
@@ -52,6 +52,7 @@ declare class __sveltets_Render<Option extends T> {
|
|
|
52
52
|
ulSelectedClass?: string | undefined;
|
|
53
53
|
ulSelectedStyle?: string | null | undefined;
|
|
54
54
|
value?: Option | Option[] | null | undefined;
|
|
55
|
+
disableRemoveAll?: boolean | undefined;
|
|
55
56
|
};
|
|
56
57
|
events(): MultiSelectEvents;
|
|
57
58
|
slots(): {
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
<script>// @ts-ignore
|
|
2
|
+
import Portal from 'svelte-portal';
|
|
3
|
+
import { createFloatingActions } from 'svelte-floating-ui';
|
|
4
|
+
import { tick } from 'svelte';
|
|
5
|
+
import { offset, flip, shift } from 'svelte-floating-ui/dom';
|
|
6
|
+
import MultiSelect from './MultiSelect.svelte';
|
|
7
|
+
import DarkModeObserver from '../DarkModeObserver.svelte';
|
|
8
|
+
const [floatingRef, floatingContent] = createFloatingActions({
|
|
9
|
+
strategy: 'absolute',
|
|
10
|
+
middleware: [offset(5), flip(), shift()]
|
|
11
|
+
});
|
|
12
|
+
export let items;
|
|
13
|
+
export let value = [];
|
|
14
|
+
let outerDiv = undefined;
|
|
15
|
+
let portalRef = undefined;
|
|
16
|
+
function moveOptionsToPortal() {
|
|
17
|
+
// Find ul element with class 'options' within the outerDiv
|
|
18
|
+
const ul = outerDiv?.querySelector('.options');
|
|
19
|
+
if (ul) {
|
|
20
|
+
// Move the ul element to the portal
|
|
21
|
+
portalRef?.appendChild(ul);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
$: if (portalRef && outerDiv && items?.length > 0) {
|
|
25
|
+
tick().then(() => {
|
|
26
|
+
moveOptionsToPortal();
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
// bg-indigo-100 text-indigo-800 dark:bg-indigo-200 dark:text-indigo-900
|
|
30
|
+
let darkMode = false;
|
|
31
|
+
let w = 0;
|
|
32
|
+
let open = false;
|
|
33
|
+
</script>
|
|
34
|
+
|
|
35
|
+
<DarkModeObserver bind:darkMode />
|
|
36
|
+
|
|
37
|
+
<div use:floatingRef bind:clientWidth={w}>
|
|
38
|
+
{#if !value || Array.isArray(value)}
|
|
39
|
+
<div class="border rounded-md border-gray-300 shadow-sm dark:border-gray-600 !w-full">
|
|
40
|
+
<MultiSelect
|
|
41
|
+
outerDivClass={`!text-xs`}
|
|
42
|
+
ulSelectedClass="overflow-auto"
|
|
43
|
+
bind:outerDiv
|
|
44
|
+
--sms-border={'none'}
|
|
45
|
+
--sms-min-height={'30px'}
|
|
46
|
+
--sms-focus-border={'none'}
|
|
47
|
+
--sms-selected-bg={darkMode ? '#c7d2fe' : '#e0e7ff'}
|
|
48
|
+
--sms-selected-text-color={darkMode ? '#312e81' : '#3730a3'}
|
|
49
|
+
bind:selected={value}
|
|
50
|
+
options={items}
|
|
51
|
+
on:close={() => {
|
|
52
|
+
open = false
|
|
53
|
+
}}
|
|
54
|
+
on:open={() => {
|
|
55
|
+
open = true
|
|
56
|
+
}}
|
|
57
|
+
let:option
|
|
58
|
+
disableRemoveAll
|
|
59
|
+
>
|
|
60
|
+
<!-- needed because portal doesn't work for mouseup event en mobile -->
|
|
61
|
+
<!-- svelte-ignore a11y-no-static-element-interactions -->
|
|
62
|
+
<div
|
|
63
|
+
class="w-full text-sm"
|
|
64
|
+
on:mouseup|stopPropagation
|
|
65
|
+
on:pointerdown|stopPropagation={(e) => {
|
|
66
|
+
let newe = new MouseEvent('mouseup')
|
|
67
|
+
e.target?.['parentElement']?.dispatchEvent(newe)
|
|
68
|
+
}}
|
|
69
|
+
>
|
|
70
|
+
{option}
|
|
71
|
+
</div>
|
|
72
|
+
</MultiSelect>
|
|
73
|
+
</div>
|
|
74
|
+
<Portal>
|
|
75
|
+
<div use:floatingContent class="z5000" hidden={!open}>
|
|
76
|
+
<!-- svelte-ignore a11y-click-events-have-key-events -->
|
|
77
|
+
<!-- svelte-ignore a11y-no-static-element-interactions -->
|
|
78
|
+
<div
|
|
79
|
+
bind:this={portalRef}
|
|
80
|
+
class="multiselect"
|
|
81
|
+
style={`min-width: ${w}px;`}
|
|
82
|
+
on:click|stopPropagation
|
|
83
|
+
/>
|
|
84
|
+
</div>
|
|
85
|
+
</Portal>
|
|
86
|
+
{:else}
|
|
87
|
+
Value {value} is not an array
|
|
88
|
+
{/if}
|
|
89
|
+
</div>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
items: any[];
|
|
5
|
+
value?: string[] | undefined;
|
|
6
|
+
};
|
|
7
|
+
events: {
|
|
8
|
+
mouseup: MouseEvent;
|
|
9
|
+
click: MouseEvent;
|
|
10
|
+
} & {
|
|
11
|
+
[evt: string]: CustomEvent<any>;
|
|
12
|
+
};
|
|
13
|
+
slots: {};
|
|
14
|
+
};
|
|
15
|
+
export type MultiSelectWrapperProps = typeof __propDef.props;
|
|
16
|
+
export type MultiSelectWrapperEvents = typeof __propDef.events;
|
|
17
|
+
export type MultiSelectWrapperSlots = typeof __propDef.slots;
|
|
18
|
+
export default class MultiSelectWrapper extends SvelteComponent<MultiSelectWrapperProps, MultiSelectWrapperEvents, MultiSelectWrapperSlots> {
|
|
19
|
+
}
|
|
20
|
+
export {};
|
|
@@ -98,7 +98,9 @@ $: fullyCollapsed = keys.length > 1 && collapsed;
|
|
|
98
98
|
<button
|
|
99
99
|
class="val text-left {pureViewer
|
|
100
100
|
? 'cursor-auto'
|
|
101
|
-
: ''} rounded px-1 hover:bg-blue-100 dark:hover:bg-blue-100/10 {getTypeAsString(
|
|
101
|
+
: ''} rounded px-1 hover:bg-blue-100 dark:hover:bg-blue-100/10 {getTypeAsString(
|
|
102
|
+
json[key]
|
|
103
|
+
)}"
|
|
102
104
|
on:click={() => selectProp(key, json[key])}
|
|
103
105
|
>
|
|
104
106
|
{#if json[key] === NEVER_TESTED_THIS_FAR}
|
|
@@ -131,7 +133,9 @@ $: fullyCollapsed = keys.length > 1 && collapsed;
|
|
|
131
133
|
{#if getTypeAsString(json) === 's3object'}
|
|
132
134
|
<a
|
|
133
135
|
class="text-secondary underline font-semibold text-2xs whitespace-nowrap ml-1 w-fit"
|
|
134
|
-
href={`/api/w/${$workspaceStore}/job_helpers/download_s3_file?file_key=${json?.s3}
|
|
136
|
+
href={`/api/w/${$workspaceStore}/job_helpers/download_s3_file?file_key=${json?.s3}${
|
|
137
|
+
json?.storage ? `&storage=${json.storage}` : ''
|
|
138
|
+
}`}
|
|
135
139
|
download={json?.s3.split('/').pop() ?? 'unnamed_download.file'}
|
|
136
140
|
>
|
|
137
141
|
<span class="flex items-center gap-1"><Download size={12} />download</span>
|
|
@@ -63,7 +63,11 @@ const dispatch = createEventDispatcher();
|
|
|
63
63
|
</Badge>
|
|
64
64
|
{/if}
|
|
65
65
|
{#if job && 'duration_ms' in job && job.duration_ms != undefined}
|
|
66
|
-
<DurationMs
|
|
66
|
+
<DurationMs
|
|
67
|
+
duration_ms={job.duration_ms}
|
|
68
|
+
self_wait_time_ms={job?.self_wait_time_ms}
|
|
69
|
+
aggregate_wait_time_ms={job?.aggregate_wait_time_ms}
|
|
70
|
+
/>
|
|
67
71
|
{/if}
|
|
68
72
|
{#if job?.['mem_peak']}
|
|
69
73
|
<Badge large>
|
|
@@ -9,15 +9,20 @@ import TimeAgo from '../TimeAgo.svelte';
|
|
|
9
9
|
import { forLater } from '../../forLater';
|
|
10
10
|
import { twMerge } from 'tailwind-merge';
|
|
11
11
|
import Portal from 'svelte-portal';
|
|
12
|
+
import WaitTimeWarning from '../common/waitTimeWarning/WaitTimeWarning.svelte';
|
|
12
13
|
const dispatch = createEventDispatcher();
|
|
13
14
|
export let job;
|
|
14
|
-
export let
|
|
15
|
+
export let selected = false;
|
|
15
16
|
export let containerWidth = 0;
|
|
16
17
|
export let containsLabel = false;
|
|
17
18
|
export let activeLabel;
|
|
19
|
+
export let isSelectingJobsToCancel = false;
|
|
18
20
|
let scheduleEditor;
|
|
19
21
|
$: isExternal = job && job.id === '-';
|
|
20
22
|
let triggeredByWidth = 0;
|
|
23
|
+
function isJobCancelable(j) {
|
|
24
|
+
return j.type === 'QueuedJob' && !j.schedule_path;
|
|
25
|
+
}
|
|
21
26
|
</script>
|
|
22
27
|
|
|
23
28
|
<Portal>
|
|
@@ -28,15 +33,22 @@ let triggeredByWidth = 0;
|
|
|
28
33
|
<div
|
|
29
34
|
class={twMerge(
|
|
30
35
|
'hover:bg-surface-hover cursor-pointer',
|
|
31
|
-
|
|
36
|
+
selected ? 'bg-blue-50 dark:bg-blue-900/50' : '',
|
|
32
37
|
'flex flex-row items-center h-full'
|
|
33
38
|
)}
|
|
34
39
|
style="width: {containerWidth}px"
|
|
35
40
|
on:click={() => {
|
|
36
|
-
|
|
41
|
+
if (!isSelectingJobsToCancel || isJobCancelable(job)) {
|
|
42
|
+
dispatch('select')
|
|
43
|
+
}
|
|
37
44
|
}}
|
|
38
45
|
>
|
|
39
46
|
<div class="w-1/12 flex justify-center">
|
|
47
|
+
{#if isSelectingJobsToCancel && isJobCancelable(job)}
|
|
48
|
+
<div class="px-2">
|
|
49
|
+
<input type="checkbox" checked={selected}/>
|
|
50
|
+
</div>
|
|
51
|
+
{/if}
|
|
40
52
|
{#if isExternal}
|
|
41
53
|
<Badge color="gray" baseClass="!px-1.5">
|
|
42
54
|
<ShieldQuestion size={14} />
|
|
@@ -80,6 +92,13 @@ let triggeredByWidth = 0;
|
|
|
80
92
|
job.duration_ms
|
|
81
93
|
)}s{#if job.job_kind == 'flow' || job.job_kind == 'flowpreview'} total{/if})
|
|
82
94
|
{/if}
|
|
95
|
+
{#if job && (job.self_wait_time_ms || job.aggregate_wait_time_ms)}
|
|
96
|
+
<WaitTimeWarning
|
|
97
|
+
self_wait_time_ms={job.self_wait_time_ms}
|
|
98
|
+
aggregate_wait_time_ms={job.aggregate_wait_time_ms}
|
|
99
|
+
variant="icon"
|
|
100
|
+
/>
|
|
101
|
+
{/if}
|
|
83
102
|
{:else if `scheduled_for` in job && job.scheduled_for && forLater(job.scheduled_for)}
|
|
84
103
|
Scheduled for {displayDate(job.scheduled_for)}
|
|
85
104
|
{:else}
|
|
@@ -3,10 +3,11 @@ import type { Job } from '../../gen';
|
|
|
3
3
|
declare const __propDef: {
|
|
4
4
|
props: {
|
|
5
5
|
job: Job;
|
|
6
|
-
|
|
6
|
+
selected?: boolean | undefined;
|
|
7
7
|
containerWidth?: number | undefined;
|
|
8
8
|
containsLabel?: boolean | undefined;
|
|
9
9
|
activeLabel: string | null;
|
|
10
|
+
isSelectingJobsToCancel?: boolean | undefined;
|
|
10
11
|
};
|
|
11
12
|
events: {
|
|
12
13
|
select: CustomEvent<any>;
|
|
@@ -10,7 +10,8 @@ export let jobs = undefined;
|
|
|
10
10
|
export let externalJobs = [];
|
|
11
11
|
export let omittedObscuredJobs;
|
|
12
12
|
export let showExternalJobs = false;
|
|
13
|
-
export let
|
|
13
|
+
export let isSelectingJobsToCancel = false;
|
|
14
|
+
export let selectedIds = [];
|
|
14
15
|
export let selectedWorkspace = undefined;
|
|
15
16
|
export let activeLabel = null;
|
|
16
17
|
// const loadMoreQuantity: number = 100
|
|
@@ -106,7 +107,7 @@ function infiniteHandler({ detail: { loaded, error, complete } }) {
|
|
|
106
107
|
*/
|
|
107
108
|
function jobCountString(jobCount) {
|
|
108
109
|
const jc = jobCount;
|
|
109
|
-
const isTruncated = jc
|
|
110
|
+
const isTruncated = jc >= 1000;
|
|
110
111
|
return `${jc}${isTruncated ? '+' : ''} job${jc != 1 ? 's' : ''}`;
|
|
111
112
|
}
|
|
112
113
|
function computeHeight() {
|
|
@@ -137,13 +138,14 @@ const dispatch = createEventDispatcher();
|
|
|
137
138
|
>
|
|
138
139
|
</div>
|
|
139
140
|
</div>
|
|
140
|
-
{:else if $workspaceStore !== 'admins' &&
|
|
141
|
+
{:else if $workspaceStore !== 'admins' && omittedObscuredJobs}
|
|
141
142
|
<div class="w-1/12 text-2xs flex flex-row">
|
|
142
143
|
{jobs && jobCountString(jobs.length)}
|
|
143
144
|
<Popover>
|
|
144
|
-
<AlertTriangle size={16} class="ml-0.5 text-yellow-500"/>
|
|
145
|
+
<AlertTriangle size={16} class="ml-0.5 text-yellow-500" />
|
|
145
146
|
<svelte:fragment slot="text">
|
|
146
|
-
Too specific filtering may have caused the omission of obscured jobs. This is done for
|
|
147
|
+
Too specific filtering may have caused the omission of obscured jobs. This is done for
|
|
148
|
+
security reasons. To see obscured jobs, try removing some filters.
|
|
147
149
|
</svelte:fragment>
|
|
148
150
|
</Popover>
|
|
149
151
|
</div>
|
|
@@ -179,11 +181,22 @@ const dispatch = createEventDispatcher();
|
|
|
179
181
|
<RunRow
|
|
180
182
|
{containsLabel}
|
|
181
183
|
job={jobOrDate.job}
|
|
182
|
-
{
|
|
184
|
+
selected={jobOrDate.job.id !== '-' && selectedIds.includes(jobOrDate.job.id)}
|
|
185
|
+
{isSelectingJobsToCancel}
|
|
183
186
|
on:select={() => {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
+
const jobId = jobOrDate.job.id
|
|
188
|
+
if (isSelectingJobsToCancel) {
|
|
189
|
+
if (selectedIds.includes(jobOrDate.job.id)) {
|
|
190
|
+
selectedIds = selectedIds.filter((id) => id != jobId)
|
|
191
|
+
} else {
|
|
192
|
+
selectedIds.push(jobId)
|
|
193
|
+
selectedIds = selectedIds
|
|
194
|
+
}
|
|
195
|
+
} else {
|
|
196
|
+
selectedWorkspace = jobOrDate.job.workspace_id
|
|
197
|
+
selectedIds = [jobOrDate.job.id]
|
|
198
|
+
dispatch('select')
|
|
199
|
+
}
|
|
187
200
|
}}
|
|
188
201
|
{activeLabel}
|
|
189
202
|
on:filterByLabel
|
|
@@ -6,7 +6,8 @@ declare const __propDef: {
|
|
|
6
6
|
externalJobs?: Job[] | undefined;
|
|
7
7
|
omittedObscuredJobs: boolean;
|
|
8
8
|
showExternalJobs?: boolean | undefined;
|
|
9
|
-
|
|
9
|
+
isSelectingJobsToCancel?: boolean | undefined;
|
|
10
|
+
selectedIds?: string[] | undefined;
|
|
10
11
|
selectedWorkspace?: string | undefined;
|
|
11
12
|
activeLabel?: string | null | undefined;
|
|
12
13
|
};
|