windmill-components 1.405.0 → 1.405.5
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 +20 -0
- package/package/components/AppConnectLightweightResourcePicker.svelte +66 -0
- package/package/components/AppConnectLightweightResourcePicker.svelte.d.ts +21 -0
- package/package/components/ArgInput.svelte +6 -2
- package/package/components/ArgInput.svelte.d.ts +1 -0
- package/package/components/CustomPopover.svelte +1 -1
- package/package/components/DisplayResult.svelte +1 -1
- package/package/components/FlowBuilder.svelte +2 -0
- package/package/components/FlowBuilder.svelte.d.ts +1 -0
- package/package/components/FlowInputViewer.svelte +25 -0
- package/package/components/FlowInputViewer.svelte.d.ts +19 -0
- package/package/components/FlowJobResult.svelte +8 -1
- package/package/components/FlowJobResult.svelte.d.ts +1 -0
- package/package/components/FlowMetadata.svelte +2 -2
- package/package/components/FlowStatusViewer.svelte +3 -1
- package/package/components/FlowStatusViewer.svelte.d.ts +1 -0
- package/package/components/FlowStatusViewerInner.svelte +4 -1
- package/package/components/FlowViewer.svelte +2 -21
- package/package/components/LightweightResourcePicker.svelte +34 -30
- package/package/components/LogViewer.svelte +4 -3
- package/package/components/LogViewer.svelte.d.ts +1 -0
- package/package/components/ManualPopover.svelte +1 -1
- package/package/components/ObjectResourceInput.svelte +5 -2
- package/package/components/ObjectResourceInput.svelte.d.ts +2 -0
- package/package/components/Popover.svelte +1 -1
- package/package/components/Portal.svelte +7 -8
- package/package/components/Portal.svelte.d.ts +3 -7
- package/package/components/QueueMetricsDrawer.svelte +368 -3
- package/package/components/QueueMetricsDrawer.svelte.d.ts +2 -0
- package/package/components/ResourceEditor.svelte +4 -5
- package/package/components/ResourcePicker.svelte +14 -9
- package/package/components/ResourcePicker.svelte.d.ts +1 -0
- package/package/components/RunForm.svelte +1 -1
- package/package/components/SavedInputs.svelte +2 -2
- package/package/components/ScriptVersionHistory.svelte +54 -59
- package/package/components/TestConnection.svelte +1 -0
- package/package/components/TimeAgo.svelte +5 -6
- package/package/components/TimeAgo.svelte.d.ts +1 -1
- package/package/components/apps/components/buttons/AppButton.svelte +1 -1
- package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +1 -1
- package/package/components/apps/components/inputs/AppMultiSelect.svelte +1 -1
- package/package/components/apps/components/inputs/AppMultiSelectV2.svelte +1 -1
- package/package/components/apps/components/layout/AppDrawer.svelte +1 -1
- package/package/components/apps/components/layout/AppModal.svelte +1 -1
- package/package/components/apps/editor/AppEditor.svelte +11 -3
- package/package/components/apps/editor/GridEditor.svelte +57 -4
- package/package/components/apps/editor/GridEditor.svelte.d.ts +8 -0
- package/package/components/apps/editor/GridEditorMenu.svelte +1 -1
- package/package/components/apps/editor/SubGridEditor.svelte +82 -3
- package/package/components/apps/editor/SubGridEditor.svelte.d.ts +16 -0
- package/package/components/apps/editor/appUtils.d.ts +19 -2
- package/package/components/apps/editor/appUtils.js +103 -7
- package/package/components/apps/editor/component/Component.svelte +36 -8
- package/package/components/apps/editor/component/Component.svelte.d.ts +3 -1
- package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +1 -1
- package/package/components/apps/svelte-grid/Grid.svelte +235 -12
- package/package/components/apps/svelte-grid/Grid.svelte.d.ts +7 -7
- package/package/components/apps/svelte-grid/MoveResize.svelte +104 -11
- package/package/components/apps/svelte-grid/MoveResize.svelte.d.ts +7 -0
- package/package/components/apps/svelte-grid/utils/item.d.ts +4 -1
- package/package/components/apps/svelte-grid/utils/item.js +2 -3
- package/package/components/apps/svelte-select/lib/ConditionalPortal.svelte +1 -1
- package/package/components/apps/svelte-select/lib/ConditionalPortalGlobal.svelte +1 -1
- package/package/components/common/button/ButtonDropdown.svelte +1 -1
- package/package/components/common/drawer/ConditionalPortal.svelte +1 -1
- package/package/components/common/menu/MenuV2.svelte +1 -1
- package/package/components/common/modal/AlwaysMountedModal.svelte +1 -1
- package/package/components/common/popup/PopupV2.svelte +1 -1
- package/package/components/copilot/StepGenQuick.svelte +3 -2
- package/package/components/copilot/StepGenQuick.svelte.d.ts +1 -0
- package/package/components/details/Menu.svelte +1 -1
- package/package/components/flows/CreateActionsApp.svelte +1 -1
- package/package/components/flows/FlowEditor.svelte +2 -1
- package/package/components/flows/FlowEditor.svelte.d.ts +1 -0
- package/package/components/flows/FlowHistory.svelte +10 -195
- package/package/components/flows/FlowHistory.svelte.d.ts +0 -1
- package/package/components/flows/FlowHistoryInner.svelte +200 -0
- package/package/components/flows/FlowHistoryInner.svelte.d.ts +19 -0
- package/package/components/flows/content/FlowEditorPanel.svelte +2 -1
- package/package/components/flows/content/FlowEditorPanel.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowInput.svelte +66 -58
- package/package/components/flows/content/FlowInput.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowModuleScript.svelte +1 -1
- package/package/components/flows/map/FlowModuleSchemaMap.svelte +3 -2
- package/package/components/flows/map/InsertModuleButton.svelte +1 -1
- package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte +1 -1
- package/package/components/graph/model.d.ts +1 -0
- package/package/components/icons/WindmillIcon.svelte +119 -105
- package/package/components/icons/store.d.ts +4 -0
- package/package/components/icons/store.js +1 -0
- package/package/components/multiselect/MultiSelectWrapper.svelte +1 -1
- package/package/components/propertyPicker/ObjectViewer.svelte +1 -1
- package/package/components/runs/RunRow.svelte +3 -7
- package/package/components/schema/FlowPropertyEditor.svelte +1 -0
- package/package/components/search/GlobalSearchModal.svelte +1 -1
- package/package/script_helpers.d.ts +37 -38
- package/package/script_helpers.js +100 -38
- package/package.json +23 -1
- package/package/init_scripts/python_failure_module.d.ts +0 -2
- package/package/init_scripts/python_failure_module.js +0 -8
- package/package/init_scripts/python_init_code.d.ts +0 -2
- package/package/init_scripts/python_init_code.js +0 -40
- package/package/init_scripts/python_init_code_clear.d.ts +0 -2
- package/package/init_scripts/python_init_code_clear.js +0 -5
- package/package/init_scripts/python_init_code_trigger.d.ts +0 -2
- package/package/init_scripts/python_init_code_trigger.js +0 -14
package/package/assets/app.css
CHANGED
|
@@ -145,3 +145,23 @@ svelte-virtual-list-contents > * + * {
|
|
|
145
145
|
rgba(255, 69, 58, 0.2) 20px
|
|
146
146
|
);
|
|
147
147
|
}
|
|
148
|
+
|
|
149
|
+
.bg-draggedover {
|
|
150
|
+
background-image: repeating-linear-gradient(
|
|
151
|
+
-45deg,
|
|
152
|
+
rgba(0, 0, 128, 0.2),
|
|
153
|
+
rgba(0, 0, 192, 0.2) 10px,
|
|
154
|
+
rgba(0, 0, 128, 0.2) 10px,
|
|
155
|
+
rgba(0, 0, 192, 0.2) 20px
|
|
156
|
+
);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.bg-draggedover-dark {
|
|
160
|
+
background-image: repeating-linear-gradient(
|
|
161
|
+
-45deg,
|
|
162
|
+
rgba(0, 0, 128, 0.6),
|
|
163
|
+
rgba(0, 0, 192, 0.6) 10px,
|
|
164
|
+
rgba(0, 0, 128, 0.6) 10px,
|
|
165
|
+
rgba(0, 0, 192, 0.6) 20px
|
|
166
|
+
);
|
|
167
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
<script>import { base } from '$app/paths';
|
|
2
|
+
import AppConnectInner from './AppConnectInner.svelte';
|
|
3
|
+
import DarkModeObserver from './DarkModeObserver.svelte';
|
|
4
|
+
import { Button } from './common';
|
|
5
|
+
import { workspaceStore } from '../stores';
|
|
6
|
+
import { onMount } from 'svelte';
|
|
7
|
+
export let resourceType = undefined;
|
|
8
|
+
export let workspace;
|
|
9
|
+
export let express = false;
|
|
10
|
+
let step = 1;
|
|
11
|
+
let disabled = false;
|
|
12
|
+
let isGoogleSignin = false;
|
|
13
|
+
let manual = true;
|
|
14
|
+
let appConnect = undefined;
|
|
15
|
+
let darkMode = false;
|
|
16
|
+
if (workspace) {
|
|
17
|
+
$workspaceStore = workspace;
|
|
18
|
+
}
|
|
19
|
+
onMount(async () => {
|
|
20
|
+
if (resourceType) {
|
|
21
|
+
appConnect?.open(resourceType, express);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
</script>
|
|
25
|
+
|
|
26
|
+
<DarkModeObserver bind:darkMode />
|
|
27
|
+
|
|
28
|
+
<div>
|
|
29
|
+
<div class="flex flex-row-reverse w-full">
|
|
30
|
+
<div class="flex gap-2">
|
|
31
|
+
{#if step > 2}
|
|
32
|
+
<Button variant="border" on:click={appConnect?.back}>Back</Button>
|
|
33
|
+
{/if}
|
|
34
|
+
|
|
35
|
+
{#if isGoogleSignin}
|
|
36
|
+
<button {disabled} on:click={appConnect?.next}>
|
|
37
|
+
<img
|
|
38
|
+
class="h-10 w-auto object-contain"
|
|
39
|
+
src={darkMode ? base + '/google_signin_dark.png' : base + '/google_signin_light.png'}
|
|
40
|
+
alt="Google sign-in"
|
|
41
|
+
/>
|
|
42
|
+
</button>
|
|
43
|
+
{:else}
|
|
44
|
+
<Button {disabled} on:click={appConnect?.next}>
|
|
45
|
+
{#if step == 2 && !manual}
|
|
46
|
+
Connect
|
|
47
|
+
{:else if step == 1}
|
|
48
|
+
Next
|
|
49
|
+
{:else}
|
|
50
|
+
Save
|
|
51
|
+
{/if}
|
|
52
|
+
</Button>
|
|
53
|
+
{/if}
|
|
54
|
+
</div>
|
|
55
|
+
</div>
|
|
56
|
+
<AppConnectInner
|
|
57
|
+
bind:this={appConnect}
|
|
58
|
+
bind:step
|
|
59
|
+
bind:resourceType
|
|
60
|
+
bind:isGoogleSignin
|
|
61
|
+
bind:disabled
|
|
62
|
+
bind:manual
|
|
63
|
+
on:error
|
|
64
|
+
on:refresh
|
|
65
|
+
/>
|
|
66
|
+
</div>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
resourceType?: string | undefined;
|
|
5
|
+
workspace: string;
|
|
6
|
+
express?: boolean | undefined;
|
|
7
|
+
};
|
|
8
|
+
events: {
|
|
9
|
+
error: CustomEvent<any>;
|
|
10
|
+
refresh: CustomEvent<any>;
|
|
11
|
+
} & {
|
|
12
|
+
[evt: string]: CustomEvent<any>;
|
|
13
|
+
};
|
|
14
|
+
slots: {};
|
|
15
|
+
};
|
|
16
|
+
export type AppConnectLightweightResourcePickerProps = typeof __propDef.props;
|
|
17
|
+
export type AppConnectLightweightResourcePickerEvents = typeof __propDef.events;
|
|
18
|
+
export type AppConnectLightweightResourcePickerSlots = typeof __propDef.slots;
|
|
19
|
+
export default class AppConnectLightweightResourcePicker extends SvelteComponent<AppConnectLightweightResourcePickerProps, AppConnectLightweightResourcePickerEvents, AppConnectLightweightResourcePickerSlots> {
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
@@ -67,6 +67,7 @@ export let order = undefined;
|
|
|
67
67
|
export let editor = undefined;
|
|
68
68
|
export let orderEditable = false;
|
|
69
69
|
export let shouldDispatchChanges = false;
|
|
70
|
+
export let noDefaultOnSelectFirst = false;
|
|
70
71
|
export let helperScript = undefined;
|
|
71
72
|
export let otherArgs = {};
|
|
72
73
|
let oneOfSelected = undefined;
|
|
@@ -495,11 +496,14 @@ $: shouldDispatchChanges && debounced(value);
|
|
|
495
496
|
{:else if inputCat == 'resource-object' && (resourceTypes == undefined || (format.split('-').length > 1 && resourceTypes.includes(format.substring('resource-'.length))))}
|
|
496
497
|
<ObjectResourceInput
|
|
497
498
|
{defaultValue}
|
|
498
|
-
selectFirst
|
|
499
|
+
selectFirst={!noDefaultOnSelectFirst}
|
|
499
500
|
{disablePortal}
|
|
500
501
|
{format}
|
|
501
502
|
bind:value
|
|
502
503
|
bind:editor
|
|
504
|
+
on:clear={() => {
|
|
505
|
+
defaultValue = null
|
|
506
|
+
}}
|
|
503
507
|
{showSchemaExplorer}
|
|
504
508
|
/>
|
|
505
509
|
{:else if inputCat == 'resource-object' && format.split('-').length > 1 && format
|
|
@@ -765,7 +769,7 @@ $: shouldDispatchChanges && debounced(value);
|
|
|
765
769
|
</div>
|
|
766
770
|
{:else if inputCat == 'resource-string'}
|
|
767
771
|
<ResourcePicker
|
|
768
|
-
selectFirst
|
|
772
|
+
selectFirst={noDefaultOnSelectFirst}
|
|
769
773
|
{disablePortal}
|
|
770
774
|
bind:value
|
|
771
775
|
initialValue={defaultValue}
|
|
@@ -57,6 +57,7 @@ declare const __propDef: {
|
|
|
57
57
|
editor?: SimpleEditor | undefined;
|
|
58
58
|
orderEditable?: boolean | undefined;
|
|
59
59
|
shouldDispatchChanges?: boolean | undefined;
|
|
60
|
+
noDefaultOnSelectFirst?: boolean | undefined;
|
|
60
61
|
helperScript?: {
|
|
61
62
|
type: 'inline';
|
|
62
63
|
path?: string | undefined;
|
|
@@ -48,6 +48,7 @@ export let savedFlow = undefined;
|
|
|
48
48
|
export let diffDrawer = undefined;
|
|
49
49
|
export let customUi = {};
|
|
50
50
|
export let disableAi = false;
|
|
51
|
+
export let disabledFlowInputs = false;
|
|
51
52
|
$: setContext('customUi', customUi);
|
|
52
53
|
const dispatch = createEventDispatcher();
|
|
53
54
|
async function createSchedule(path) {
|
|
@@ -1134,6 +1135,7 @@ let msgInput = undefined;
|
|
|
1134
1135
|
<!-- metadata -->
|
|
1135
1136
|
{#if $flowStateStore}
|
|
1136
1137
|
<FlowEditor
|
|
1138
|
+
{disabledFlowInputs}
|
|
1137
1139
|
disableAi={disableAi || customUi?.stepInputs?.ai == false}
|
|
1138
1140
|
disableSettings={customUi?.settingsPanel === false}
|
|
1139
1141
|
{loading}
|
|
@@ -20,6 +20,7 @@ declare const __propDef: {
|
|
|
20
20
|
diffDrawer?: DiffDrawer | undefined;
|
|
21
21
|
customUi?: FlowBuilderWhitelabelCustomUi | undefined;
|
|
22
22
|
disableAi?: boolean | undefined;
|
|
23
|
+
disabledFlowInputs?: boolean | undefined;
|
|
23
24
|
computeUnlockedSteps?: ((flow: Flow) => {
|
|
24
25
|
[k: string]: string;
|
|
25
26
|
}) | undefined;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<script>import FieldHeader from './FieldHeader.svelte';
|
|
2
|
+
export let schema;
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
<ul class="my-2">
|
|
6
|
+
{#if schema == undefined}
|
|
7
|
+
<li class="text-secondary text-xs italic mb-4">No inputs</li>
|
|
8
|
+
{:else}
|
|
9
|
+
{#each Object.entries(schema.properties ?? {}) as [inp, v]}
|
|
10
|
+
<li class="list-disc flex flex-row items-center">
|
|
11
|
+
<FieldHeader
|
|
12
|
+
label={inp}
|
|
13
|
+
required={Array.isArray(schema.required) && schema.required?.includes(inp)}
|
|
14
|
+
type={v?.type}
|
|
15
|
+
contentEncoding={v?.contentEncoding}
|
|
16
|
+
format={v?.format}
|
|
17
|
+
/><span class="ml-4 mt-1 text-xs"
|
|
18
|
+
>{v?.default != undefined && v?.default != ''
|
|
19
|
+
? 'default: ' + JSON.stringify(v?.default)
|
|
20
|
+
: ''}</span
|
|
21
|
+
>
|
|
22
|
+
</li>
|
|
23
|
+
{/each}
|
|
24
|
+
{/if}
|
|
25
|
+
</ul>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
import type { Schema } from '../common';
|
|
3
|
+
declare const __propDef: {
|
|
4
|
+
props: {
|
|
5
|
+
schema: Schema | {
|
|
6
|
+
[key: string]: unknown;
|
|
7
|
+
} | undefined;
|
|
8
|
+
};
|
|
9
|
+
events: {
|
|
10
|
+
[evt: string]: CustomEvent<any>;
|
|
11
|
+
};
|
|
12
|
+
slots: {};
|
|
13
|
+
};
|
|
14
|
+
export type FlowInputViewerProps = typeof __propDef.props;
|
|
15
|
+
export type FlowInputViewerEvents = typeof __propDef.events;
|
|
16
|
+
export type FlowInputViewerSlots = typeof __propDef.slots;
|
|
17
|
+
export default class FlowInputViewer extends SvelteComponent<FlowInputViewerProps, FlowInputViewerEvents, FlowInputViewerSlots> {
|
|
18
|
+
}
|
|
19
|
+
export {};
|
|
@@ -18,6 +18,7 @@ export let tag = undefined;
|
|
|
18
18
|
export let workspaceId = undefined;
|
|
19
19
|
export let refreshLog = false;
|
|
20
20
|
export let durationStates;
|
|
21
|
+
export let downloadLogs = true;
|
|
21
22
|
let lastJobId = undefined;
|
|
22
23
|
let drawer = undefined;
|
|
23
24
|
$: jobId != lastJobId && diffJobId();
|
|
@@ -76,6 +77,12 @@ async function getLogs() {
|
|
|
76
77
|
<div class="absolute z-40 text-xs top-0 left-1"
|
|
77
78
|
><button class="" on:click={drawer.openDrawer}>explore all steps' logs</button></div
|
|
78
79
|
>
|
|
79
|
-
<LogViewer
|
|
80
|
+
<LogViewer
|
|
81
|
+
download={downloadLogs}
|
|
82
|
+
content={logs ?? ''}
|
|
83
|
+
{jobId}
|
|
84
|
+
isLoading={waitingForExecutor}
|
|
85
|
+
{tag}
|
|
86
|
+
/>
|
|
80
87
|
</div>
|
|
81
88
|
</div>
|
|
@@ -15,6 +15,7 @@ declare const __propDef: {
|
|
|
15
15
|
workspaceId?: string | undefined;
|
|
16
16
|
refreshLog?: boolean | undefined;
|
|
17
17
|
durationStates: Writable<Record<string, DurationStatus>> | undefined;
|
|
18
|
+
downloadLogs?: boolean | undefined;
|
|
18
19
|
};
|
|
19
20
|
events: {
|
|
20
21
|
[evt: string]: CustomEvent<any>;
|
|
@@ -24,7 +24,7 @@ export let scheduleEditor;
|
|
|
24
24
|
{#if job['success'] != undefined}
|
|
25
25
|
Received job: {displayDate(job.created_at ?? '')}
|
|
26
26
|
{:else}
|
|
27
|
-
Received job <TimeAgo
|
|
27
|
+
Received job <TimeAgo date={job.created_at ?? ''} />
|
|
28
28
|
{/if}
|
|
29
29
|
<Tooltip small>{job?.created_at}</Tooltip>
|
|
30
30
|
</span>
|
|
@@ -33,7 +33,7 @@ export let scheduleEditor;
|
|
|
33
33
|
<div class="flex flex-row gap-2 items-center text-sm">
|
|
34
34
|
<Clock size={SMALL_ICON_SIZE} class="text-secondary min-w-3.5" />
|
|
35
35
|
<span class="whitespace-nowrap">
|
|
36
|
-
Started <TimeAgo
|
|
36
|
+
Started <TimeAgo agoOnlyIfRecent date={job.started_at ?? ''} />
|
|
37
37
|
<Tooltip small>{job?.started_at}</Tooltip>
|
|
38
38
|
</span>
|
|
39
39
|
</div>
|
|
@@ -13,6 +13,7 @@ export let hideTimeline = false;
|
|
|
13
13
|
export let hideDownloadInGraph = false;
|
|
14
14
|
export let hideNodeDefinition = false;
|
|
15
15
|
export let hideJobId = false;
|
|
16
|
+
export let hideDownloadLogs = false;
|
|
16
17
|
export let isOwner = false;
|
|
17
18
|
export let wideResults = false;
|
|
18
19
|
let lastJobId = jobId;
|
|
@@ -25,7 +26,8 @@ setContext('FlowStatusViewer', {
|
|
|
25
26
|
hideDownloadInGraph,
|
|
26
27
|
hideNodeDefinition,
|
|
27
28
|
hideTimeline,
|
|
28
|
-
hideJobId
|
|
29
|
+
hideJobId,
|
|
30
|
+
hideDownloadLogs
|
|
29
31
|
});
|
|
30
32
|
function loadOwner(path) {
|
|
31
33
|
isOwner = loadIsOwner(path, $userStore, workspaceId ?? $workspaceStore);
|
|
@@ -14,6 +14,7 @@ declare const __propDef: {
|
|
|
14
14
|
hideDownloadInGraph?: boolean | undefined;
|
|
15
15
|
hideNodeDefinition?: boolean | undefined;
|
|
16
16
|
hideJobId?: boolean | undefined;
|
|
17
|
+
hideDownloadLogs?: boolean | undefined;
|
|
17
18
|
isOwner?: boolean | undefined;
|
|
18
19
|
wideResults?: boolean | undefined;
|
|
19
20
|
};
|
|
@@ -22,7 +22,7 @@ import Alert from './common/alert/Alert.svelte';
|
|
|
22
22
|
import FlowGraphViewerStep from './FlowGraphViewerStep.svelte';
|
|
23
23
|
import FlowGraphV2 from './graph/FlowGraphV2.svelte';
|
|
24
24
|
const dispatch = createEventDispatcher();
|
|
25
|
-
let { flowStateStore, retryStatus, suspendStatus, hideDownloadInGraph, hideTimeline, hideNodeDefinition } = getContext('FlowStatusViewer');
|
|
25
|
+
let { flowStateStore, retryStatus, suspendStatus, hideDownloadInGraph, hideTimeline, hideNodeDefinition, hideDownloadLogs } = getContext('FlowStatusViewer');
|
|
26
26
|
export let jobId;
|
|
27
27
|
export let initialJob = undefined;
|
|
28
28
|
export let workspaceId = undefined;
|
|
@@ -540,6 +540,7 @@ let wrapperHeight = 0;
|
|
|
540
540
|
result={job.result}
|
|
541
541
|
logs={job.logs}
|
|
542
542
|
durationStates={localDurationStatuses}
|
|
543
|
+
downloadLogs={!hideDownloadLogs}
|
|
543
544
|
/>
|
|
544
545
|
</div>
|
|
545
546
|
{/if}
|
|
@@ -897,6 +898,7 @@ let wrapperHeight = 0;
|
|
|
897
898
|
result={job['result']}
|
|
898
899
|
logs={job.logs ?? ''}
|
|
899
900
|
durationStates={localDurationStatuses}
|
|
901
|
+
downloadLogs={!hideDownloadLogs}
|
|
900
902
|
/>
|
|
901
903
|
{:else if selectedNode == 'start'}
|
|
902
904
|
{#if job.args}
|
|
@@ -972,6 +974,7 @@ let wrapperHeight = 0;
|
|
|
972
974
|
tag={node.tag}
|
|
973
975
|
logs={node.logs}
|
|
974
976
|
durationStates={localDurationStatuses}
|
|
977
|
+
downloadLogs={!hideDownloadLogs}
|
|
975
978
|
/>
|
|
976
979
|
{:else}
|
|
977
980
|
<p class="p-2 text-tertiary italic"
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<script>import { Tab, Tabs, TabContent } from './common';
|
|
2
2
|
import SchemaViewer from './SchemaViewer.svelte';
|
|
3
|
-
import FieldHeader from './FieldHeader.svelte';
|
|
4
3
|
import FlowGraphViewer from './FlowGraphViewer.svelte';
|
|
5
4
|
import HighlightTheme from './HighlightTheme.svelte';
|
|
6
5
|
import FlowViewerInner from './FlowViewerInner.svelte';
|
|
6
|
+
import FlowInputViewer from './FlowInputViewer.svelte';
|
|
7
7
|
export let flow;
|
|
8
8
|
export let initialOpen = undefined;
|
|
9
9
|
export let noSide = false;
|
|
@@ -15,9 +15,6 @@ let open = {};
|
|
|
15
15
|
if (initialOpen) {
|
|
16
16
|
open[initialOpen] = true;
|
|
17
17
|
}
|
|
18
|
-
function toAny(x) {
|
|
19
|
-
return x;
|
|
20
|
-
}
|
|
21
18
|
</script>
|
|
22
19
|
|
|
23
20
|
<HighlightTheme />
|
|
@@ -41,23 +38,7 @@ function toAny(x) {
|
|
|
41
38
|
<span>Flow Input</span>
|
|
42
39
|
</p>
|
|
43
40
|
{#if flow.schema && flow.schema.properties && Object.keys(flow.schema.properties).length > 0 && flow.schema}
|
|
44
|
-
<
|
|
45
|
-
{#each Object.entries(flow.schema.properties) as [inp, v]}
|
|
46
|
-
<li class="list-disc flex flex-row">
|
|
47
|
-
<FieldHeader
|
|
48
|
-
label={inp}
|
|
49
|
-
required={flow.schema.required?.includes(inp)}
|
|
50
|
-
type={toAny(v)?.type}
|
|
51
|
-
contentEncoding={toAny(v)?.contentEncoding}
|
|
52
|
-
format={toAny(v)?.format}
|
|
53
|
-
/><span class="ml-4 mt-2 text-xs"
|
|
54
|
-
>{toAny(v)?.default != undefined
|
|
55
|
-
? 'default: ' + JSON.stringify(toAny(v)?.default)
|
|
56
|
-
: ''}</span
|
|
57
|
-
>
|
|
58
|
-
</li>
|
|
59
|
-
{/each}
|
|
60
|
-
</ul>
|
|
41
|
+
<FlowInputViewer schema={flow.schema} />
|
|
61
42
|
{:else}
|
|
62
43
|
<div class="text-secondary text-xs italic mb-4">No inputs</div>
|
|
63
44
|
{/if}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
<script>import { ResourceService } from '../gen';
|
|
2
|
-
import { base } from '../base';
|
|
3
2
|
import { workspaceStore } from '../stores';
|
|
4
3
|
import { createEventDispatcher, getContext } from 'svelte';
|
|
5
4
|
import Select from './apps/svelte-select/lib/index';
|
|
6
5
|
import { SELECT_INPUT_DEFAULT_STYLE } from '../defaults';
|
|
7
6
|
import DarkModeObserver from './DarkModeObserver.svelte';
|
|
8
7
|
import { Button, Drawer, DrawerContent } from './common';
|
|
9
|
-
import { Plus } from 'lucide-svelte';
|
|
8
|
+
import { Plus, Loader2 } from 'lucide-svelte';
|
|
10
9
|
import { sendUserToast } from '../toast';
|
|
11
10
|
const dispatch = createEventDispatcher();
|
|
12
11
|
export let initialValue = undefined;
|
|
@@ -47,21 +46,6 @@ export function askNewResource() {
|
|
|
47
46
|
refreshCount += 1;
|
|
48
47
|
open = true;
|
|
49
48
|
}
|
|
50
|
-
function processEvent(event) {
|
|
51
|
-
if (event.origin !== window.location.origin) {
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
if (event.data.type === 'error') {
|
|
55
|
-
sendUserToast(event.data.error, true);
|
|
56
|
-
}
|
|
57
|
-
if (event.data.type === 'refresh') {
|
|
58
|
-
window.removeEventListener('message', processEvent);
|
|
59
|
-
value = event.data.detail;
|
|
60
|
-
valueSelect = { value, label: value };
|
|
61
|
-
drawer?.closeDrawer?.();
|
|
62
|
-
open = false;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
49
|
</script>
|
|
66
50
|
|
|
67
51
|
<DarkModeObserver bind:darkMode />
|
|
@@ -69,12 +53,15 @@ function processEvent(event) {
|
|
|
69
53
|
{#if expressOAuthSetup}
|
|
70
54
|
{#if open}
|
|
71
55
|
{#key refreshCount}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
$workspaceStore}
|
|
77
|
-
|
|
56
|
+
{#await import('./AppConnectLightweightResourcePicker.svelte')}
|
|
57
|
+
<Loader2 class="animate-spin" />
|
|
58
|
+
{:then Module}
|
|
59
|
+
<Module.default
|
|
60
|
+
workspace={appViewerContext?.workspace ?? $workspaceStore}
|
|
61
|
+
{resourceType}
|
|
62
|
+
express={true}
|
|
63
|
+
/>
|
|
64
|
+
{/await}
|
|
78
65
|
{/key}
|
|
79
66
|
{/if}
|
|
80
67
|
{:else}
|
|
@@ -85,12 +72,31 @@ function processEvent(event) {
|
|
|
85
72
|
tooltip="Resources represent connections to third party systems. Learn more on how to integrate external APIs."
|
|
86
73
|
documentationLink="https://www.windmill.dev/docs/integrations/integrations_on_windmill"
|
|
87
74
|
>
|
|
88
|
-
|
|
75
|
+
{#await import('./AppConnectLightweightResourcePicker.svelte')}
|
|
76
|
+
<Loader2 class="animate-spin" />
|
|
77
|
+
{:then Module}
|
|
78
|
+
<Module.default
|
|
79
|
+
workspace={appViewerContext?.workspace ?? $workspaceStore}
|
|
80
|
+
{resourceType}
|
|
81
|
+
express={false}
|
|
82
|
+
on:error={(e) => {
|
|
83
|
+
sendUserToast(e.detail, true)
|
|
84
|
+
}}
|
|
85
|
+
on:refresh={(e) => {
|
|
86
|
+
value = e.detail
|
|
87
|
+
valueSelect = { value, label: value }
|
|
88
|
+
drawer?.closeDrawer?.()
|
|
89
|
+
open = false
|
|
90
|
+
}}
|
|
91
|
+
/>
|
|
92
|
+
{/await}
|
|
93
|
+
|
|
94
|
+
<!-- <iframe
|
|
89
95
|
title="App connection"
|
|
90
96
|
class="w-full h-full"
|
|
91
97
|
src="{base}/embed_connect?resource_type={resourceType}&workspace={appViewerContext?.workspace ??
|
|
92
98
|
$workspaceStore}&express=false"
|
|
93
|
-
/>
|
|
99
|
+
/> -->
|
|
94
100
|
</DrawerContent>
|
|
95
101
|
</Drawer>
|
|
96
102
|
{/if}
|
|
@@ -122,13 +128,11 @@ function processEvent(event) {
|
|
|
122
128
|
<Button
|
|
123
129
|
{disabled}
|
|
124
130
|
color="light"
|
|
125
|
-
variant="
|
|
126
|
-
|
|
131
|
+
variant="contained"
|
|
132
|
+
btnClasses="w-8 px-0.5 py-1.5"
|
|
133
|
+
size="sm"
|
|
127
134
|
on:click={() => {
|
|
128
135
|
open = true
|
|
129
|
-
window.removeEventListener('message', processEvent)
|
|
130
|
-
window.addEventListener('message', processEvent)
|
|
131
|
-
|
|
132
136
|
drawer?.openDrawer?.()
|
|
133
137
|
}}
|
|
134
138
|
startIcon={{ icon: Plus }}
|
|
@@ -26,6 +26,7 @@ export let small = false;
|
|
|
26
26
|
export let drawerOpen = false;
|
|
27
27
|
export let noMaxH = false;
|
|
28
28
|
export let noAutoScroll = false;
|
|
29
|
+
export let download = true;
|
|
29
30
|
// @ts-ignore
|
|
30
31
|
const ansi_up = new AnsiUp();
|
|
31
32
|
ansi_up.use_classes = true;
|
|
@@ -75,7 +76,7 @@ $: truncatedContent = truncateContent(content, loadedFromObjectStore, LOG_LIMIT)
|
|
|
75
76
|
$: prefixIndex = findPrefixIndex(truncatedContent);
|
|
76
77
|
$: downloadStartUrl = findStartUrl(truncatedContent, prefixIndex);
|
|
77
78
|
function truncateContent(jobContent, loadedFromObjectStore, limit) {
|
|
78
|
-
let content = loadedFromObjectStore + jobContent ?? '';
|
|
79
|
+
let content = loadedFromObjectStore + (jobContent ?? '');
|
|
79
80
|
if (content.length > limit) {
|
|
80
81
|
return content.substring(content.length - limit);
|
|
81
82
|
}
|
|
@@ -121,7 +122,7 @@ function showMoreTruncate(len) {
|
|
|
121
122
|
<Drawer bind:this={logViewer} bind:open={drawerOpen} size="900px">
|
|
122
123
|
<DrawerContent title="Expanded Logs" on:close={logViewer.closeDrawer}>
|
|
123
124
|
<svelte:fragment slot="actions">
|
|
124
|
-
{#if jobId}
|
|
125
|
+
{#if jobId && download}
|
|
125
126
|
<Button
|
|
126
127
|
href="{base}/api/w/{$workspaceStore}/jobs_u/get_logs/{jobId}"
|
|
127
128
|
download="windmill_logs_{jobId}.txt"
|
|
@@ -169,7 +170,7 @@ function showMoreTruncate(len) {
|
|
|
169
170
|
>
|
|
170
171
|
<div class="sticky z-10 top-0 right-0 w-full flex flex-row-reverse justify-between text-sm">
|
|
171
172
|
<div class="flex gap-2 pl-0.5 bg-surface-secondary">
|
|
172
|
-
{#if jobId}
|
|
173
|
+
{#if jobId && download}
|
|
173
174
|
<div class="flex items-center">
|
|
174
175
|
<a
|
|
175
176
|
class="text-primary pb-0.5"
|
|
@@ -14,7 +14,7 @@ function isString(value) {
|
|
|
14
14
|
}
|
|
15
15
|
export let path = '';
|
|
16
16
|
function resourceToValue() {
|
|
17
|
-
if (path) {
|
|
17
|
+
if (path && path != '') {
|
|
18
18
|
value = `$res:${path}`;
|
|
19
19
|
}
|
|
20
20
|
else {
|
|
@@ -43,8 +43,11 @@ $: value && valueToPath();
|
|
|
43
43
|
path = e.detail
|
|
44
44
|
resourceToValue()
|
|
45
45
|
}}
|
|
46
|
+
on:clear
|
|
46
47
|
bind:value={path}
|
|
47
|
-
initialValue={defaultValue
|
|
48
|
+
initialValue={typeof defaultValue == 'string' && defaultValue.startsWith('$res:')
|
|
49
|
+
? defaultValue.substr('$res:'.length)
|
|
50
|
+
: defaultValue}
|
|
48
51
|
resourceType={format.split('-').length > 1 ? format.substring('resource-'.length) : undefined}
|
|
49
52
|
{showSchemaExplorer}
|
|
50
53
|
/>
|
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
<script context="module">
|
|
2
2
|
import { tick } from 'svelte'
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
*
|
|
7
|
-
* @param {HTMLElement} el
|
|
8
|
-
* @param {HTMLElement|string} target DOM Element or CSS Selector
|
|
9
|
-
*/
|
|
10
|
-
export function portal(el, target = 'body') {
|
|
4
|
+
export function portal(el, options) {
|
|
5
|
+
let { target, name } = options
|
|
11
6
|
let targetEl
|
|
12
7
|
async function update(newTarget) {
|
|
13
8
|
target = newTarget
|
|
@@ -32,6 +27,9 @@
|
|
|
32
27
|
if (!el.classList.contains('windmill-app')) {
|
|
33
28
|
el.classList.add('windmill-app')
|
|
34
29
|
}
|
|
30
|
+
if (name && !el.classList.contains(name)) {
|
|
31
|
+
el.classList.add(name)
|
|
32
|
+
}
|
|
35
33
|
targetEl.appendChild(el)
|
|
36
34
|
el.hidden = false
|
|
37
35
|
}
|
|
@@ -56,8 +54,9 @@
|
|
|
56
54
|
* @type { HTMLElement|string}
|
|
57
55
|
*/
|
|
58
56
|
export let target = 'body'
|
|
57
|
+
export let name = undefined
|
|
59
58
|
</script>
|
|
60
59
|
|
|
61
|
-
<div use:portal={target} hidden>
|
|
60
|
+
<div use:portal={{ target, name }} hidden>
|
|
62
61
|
<slot />
|
|
63
62
|
</div>
|