windmill-components 1.405.0 → 1.406.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 +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/FlowPreviewContent.svelte +2 -1
- 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/custom_ui.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/header/FlowYamlEditor.svelte +6 -2
- 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
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { SvelteComponent } from "svelte";
|
|
2
|
+
import { type GridShadow } from '../editor/appUtils';
|
|
2
3
|
declare const __propDef: {
|
|
3
4
|
props: {
|
|
4
5
|
sensor: any;
|
|
@@ -23,6 +24,9 @@ declare const __propDef: {
|
|
|
23
24
|
h: number;
|
|
24
25
|
} | undefined;
|
|
25
26
|
overlapped?: string | undefined;
|
|
27
|
+
moveMode?: "move" | "insert" | undefined;
|
|
28
|
+
type?: string | undefined;
|
|
29
|
+
fakeShadow?: GridShadow | undefined;
|
|
26
30
|
inActivate?: (() => void) | undefined;
|
|
27
31
|
initmove?: (() => void) | undefined;
|
|
28
32
|
updateMove?: ((newCoordDiff: any, clientY: any) => void) | undefined;
|
|
@@ -31,6 +35,9 @@ declare const __propDef: {
|
|
|
31
35
|
initmove: CustomEvent<any>;
|
|
32
36
|
move: CustomEvent<any>;
|
|
33
37
|
repaint: CustomEvent<any>;
|
|
38
|
+
dropped: CustomEvent<any>;
|
|
39
|
+
resizeStart: CustomEvent<any>;
|
|
40
|
+
resizeEnd: CustomEvent<any>;
|
|
34
41
|
} & {
|
|
35
42
|
[evt: string]: CustomEvent<any>;
|
|
36
43
|
};
|
|
@@ -7,7 +7,10 @@ export declare function findFreeSpaceForItem<T>(matrix: FilledItem<T>[][], item:
|
|
|
7
7
|
};
|
|
8
8
|
export declare function moveItem(active: any, items: any, cols: any): {
|
|
9
9
|
items: any;
|
|
10
|
-
overlap
|
|
10
|
+
overlap?: undefined;
|
|
11
|
+
} | {
|
|
12
|
+
items: any;
|
|
13
|
+
overlap: undefined;
|
|
11
14
|
};
|
|
12
15
|
export declare function normalize(items: any, col: any): any;
|
|
13
16
|
export declare function adjust<T>(items: FilledItem<T>[], col: any): FilledItem<T>[];
|
|
@@ -107,8 +107,7 @@ export function moveItem(active, items, cols) {
|
|
|
107
107
|
// If found fixed, reset the active to its original position
|
|
108
108
|
if (fixed) {
|
|
109
109
|
return {
|
|
110
|
-
items: items
|
|
111
|
-
overlap: closeBlocks.length > 0
|
|
110
|
+
items: items
|
|
112
111
|
};
|
|
113
112
|
}
|
|
114
113
|
// Update items
|
|
@@ -136,7 +135,7 @@ export function moveItem(active, items, cols) {
|
|
|
136
135
|
// Return result
|
|
137
136
|
return {
|
|
138
137
|
items: tempItems,
|
|
139
|
-
overlap:
|
|
138
|
+
overlap: undefined
|
|
140
139
|
};
|
|
141
140
|
}
|
|
142
141
|
// Helper function
|
|
@@ -8,6 +8,7 @@ export let funcDesc;
|
|
|
8
8
|
export let trigger = false;
|
|
9
9
|
export let loading = false;
|
|
10
10
|
export let preFilter;
|
|
11
|
+
export let disableAi = false;
|
|
11
12
|
let scripts = undefined;
|
|
12
13
|
export let filteredItems = [];
|
|
13
14
|
$: prefilteredItems = scripts ?? [];
|
|
@@ -43,14 +44,14 @@ onMount(() => {
|
|
|
43
44
|
bind:this={input}
|
|
44
45
|
type="text"
|
|
45
46
|
bind:value={funcDesc}
|
|
46
|
-
placeholder="Search {trigger ? 'triggers' : 'scripts'} or AI gen"
|
|
47
|
+
placeholder="Search {trigger ? 'triggers' : 'scripts'} {disableAi ? '' : 'or AI gen'}"
|
|
47
48
|
/>
|
|
48
49
|
</div>
|
|
49
50
|
<div class="absolute inset-y-0 right-3 flex items-center pointer-events-none">
|
|
50
51
|
{#if loading}
|
|
51
52
|
<Loader2 size={16} class="animate-spin text-gray-400" />
|
|
52
53
|
{/if}
|
|
53
|
-
{#if funcDesc?.length === 0 && !loading}
|
|
54
|
+
{#if funcDesc?.length === 0 && !loading && !disableAi}
|
|
54
55
|
<Wand2 size={14} class="fill-current opacity-70 text-violet-800 dark:text-violet-400" />
|
|
55
56
|
{/if}
|
|
56
57
|
</div>
|
|
@@ -11,6 +11,7 @@ export let disableStaticInputs = false;
|
|
|
11
11
|
export let disableTutorials = false;
|
|
12
12
|
export let disableAi = false;
|
|
13
13
|
export let disableSettings = false;
|
|
14
|
+
export let disabledFlowInputs = false;
|
|
14
15
|
export let smallErrorHandler = false;
|
|
15
16
|
let size = 50;
|
|
16
17
|
const { currentStepStore: copilotCurrentStepStore } = getContext('FlowCopilotContext');
|
|
@@ -53,7 +54,7 @@ const { currentStepStore: copilotCurrentStepStore } = getContext('FlowCopilotCon
|
|
|
53
54
|
</div>
|
|
54
55
|
</div>
|
|
55
56
|
{:else}
|
|
56
|
-
<FlowEditorPanel enableAi={!disableAi} />
|
|
57
|
+
<FlowEditorPanel {disabledFlowInputs} enableAi={!disableAi} />
|
|
57
58
|
{/if}
|
|
58
59
|
</Pane>
|
|
59
60
|
</Splitpanes>
|
|
@@ -1,76 +1,13 @@
|
|
|
1
|
-
<script>import {
|
|
2
|
-
import PanelSection from '../apps/editor/settingsPanel/common/PanelSection.svelte';
|
|
3
|
-
import { classNames, displayDate, emptyString, sendUserToast } from '../../utils';
|
|
4
|
-
import { FlowService } from '../../gen';
|
|
5
|
-
import { workspaceStore } from '../../stores';
|
|
6
|
-
import { Skeleton } from '../common';
|
|
1
|
+
<script>import { createEventDispatcher } from 'svelte';
|
|
7
2
|
import Drawer from '../common/drawer/Drawer.svelte';
|
|
8
3
|
import DrawerContent from '../common/drawer/DrawerContent.svelte';
|
|
9
|
-
import
|
|
10
|
-
import { ArrowRight, Loader2, Pencil, X } from 'lucide-svelte';
|
|
11
|
-
import { createEventDispatcher } from 'svelte';
|
|
4
|
+
import FlowHistoryInner from './FlowHistoryInner.svelte';
|
|
12
5
|
export let path;
|
|
13
6
|
let drawer;
|
|
14
|
-
let loading = false;
|
|
15
|
-
let versions = [];
|
|
16
|
-
let selectedVersion = undefined;
|
|
17
|
-
let selected = undefined;
|
|
18
|
-
let deploymentMsgUpdateMode = false;
|
|
19
|
-
let deploymentMsgUpdate = undefined;
|
|
20
7
|
export function open() {
|
|
21
|
-
loadVersions();
|
|
22
8
|
drawer.openDrawer();
|
|
23
9
|
}
|
|
24
|
-
async function loadFlow(version) {
|
|
25
|
-
selected = await FlowService.getFlowVersion({
|
|
26
|
-
workspace: $workspaceStore,
|
|
27
|
-
version,
|
|
28
|
-
path
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
async function loadVersions() {
|
|
32
|
-
loading = true;
|
|
33
|
-
versions = await FlowService.getFlowHistory({
|
|
34
|
-
workspace: $workspaceStore,
|
|
35
|
-
path: path
|
|
36
|
-
});
|
|
37
|
-
loading = false;
|
|
38
|
-
}
|
|
39
|
-
async function updateDeploymentMsg(version) {
|
|
40
|
-
if (selectedVersion === undefined ||
|
|
41
|
-
version === undefined ||
|
|
42
|
-
emptyString(deploymentMsgUpdate)) {
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
await FlowService.updateFlowHistory({
|
|
46
|
-
workspace: $workspaceStore,
|
|
47
|
-
version,
|
|
48
|
-
path,
|
|
49
|
-
requestBody: {
|
|
50
|
-
deployment_msg: deploymentMsgUpdate
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
selectedVersion.deployment_msg = deploymentMsgUpdate;
|
|
54
|
-
deploymentMsgUpdateMode = false;
|
|
55
|
-
loadVersions();
|
|
56
|
-
}
|
|
57
10
|
const dispatch = createEventDispatcher();
|
|
58
|
-
async function restoreVersion(flow) {
|
|
59
|
-
if (!flow)
|
|
60
|
-
return;
|
|
61
|
-
await FlowService.updateFlow({
|
|
62
|
-
workspace: $workspaceStore,
|
|
63
|
-
requestBody: {
|
|
64
|
-
...flow,
|
|
65
|
-
path
|
|
66
|
-
},
|
|
67
|
-
path
|
|
68
|
-
});
|
|
69
|
-
dispatch('historyRestore');
|
|
70
|
-
drawer?.closeDrawer();
|
|
71
|
-
sendUserToast('Flow restored from previous deployment');
|
|
72
|
-
}
|
|
73
|
-
$: selectedVersion !== undefined && loadFlow(selectedVersion.id);
|
|
74
11
|
</script>
|
|
75
12
|
|
|
76
13
|
<Drawer bind:this={drawer} size="1200px">
|
|
@@ -79,136 +16,14 @@ $: selectedVersion !== undefined && loadFlow(selectedVersion.id);
|
|
|
79
16
|
drawer?.closeDrawer()
|
|
80
17
|
}}
|
|
81
18
|
noPadding
|
|
19
|
+
title="Deployment History"
|
|
82
20
|
>
|
|
83
|
-
<
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
{#each versions ?? [] as version}
|
|
91
|
-
<!-- svelte-ignore a11y-click-events-have-key-events -->
|
|
92
|
-
<div
|
|
93
|
-
class={classNames(
|
|
94
|
-
'border flex gap-1 truncate justify-between flex-row w-full items-center p-2 rounded-md cursor-pointer hover:bg-blue-50 hover:text-blue-400',
|
|
95
|
-
selectedVersion?.id == version.id ? 'bg-blue-100 text-blue-600' : ''
|
|
96
|
-
)}
|
|
97
|
-
role="button"
|
|
98
|
-
tabindex="0"
|
|
99
|
-
on:click={() => {
|
|
100
|
-
selectedVersion = version
|
|
101
|
-
}}
|
|
102
|
-
>
|
|
103
|
-
<span class="text-xs truncate">
|
|
104
|
-
{#if emptyString(version.deployment_msg)}Version {version.id}{:else}{version.deployment_msg}{/if}
|
|
105
|
-
</span>
|
|
106
|
-
</div>
|
|
107
|
-
{/each}
|
|
108
|
-
</div>
|
|
109
|
-
{:else}
|
|
110
|
-
<div class="text-sm text-tertiary">No items</div>
|
|
111
|
-
{/if}
|
|
112
|
-
{:else}
|
|
113
|
-
<Skeleton layout={[[40], [40], [40], [40], [40]]} />
|
|
114
|
-
{/if}
|
|
115
|
-
</div>
|
|
116
|
-
</PanelSection>
|
|
117
|
-
</Pane>
|
|
118
|
-
<Pane size={80}>
|
|
119
|
-
<div class="h-full w-full overflow-auto">
|
|
120
|
-
{#if selectedVersion}
|
|
121
|
-
{#if selected}
|
|
122
|
-
<div class="px-2 flex flex-col gap-2">
|
|
123
|
-
<span class="flex flex-row text-sm p-1 text-tertiary">
|
|
124
|
-
{#if deploymentMsgUpdateMode}
|
|
125
|
-
<div class="flex w-full">
|
|
126
|
-
<input
|
|
127
|
-
type="text"
|
|
128
|
-
bind:value={deploymentMsgUpdate}
|
|
129
|
-
class="!w-auto grow"
|
|
130
|
-
on:click|stopPropagation={() => {}}
|
|
131
|
-
on:keydown|stopPropagation
|
|
132
|
-
on:keypress|stopPropagation={({ key }) => {
|
|
133
|
-
if (key === 'Enter') updateDeploymentMsg(selectedVersion?.id)
|
|
134
|
-
}}
|
|
135
|
-
/>
|
|
136
|
-
<Button
|
|
137
|
-
size="xs"
|
|
138
|
-
color="blue"
|
|
139
|
-
buttonType="button"
|
|
140
|
-
btnClasses="!p-1 !w-[34px] !ml-1"
|
|
141
|
-
aria-label="Save Deployment Message"
|
|
142
|
-
on:click={() => {
|
|
143
|
-
updateDeploymentMsg(selectedVersion?.id)
|
|
144
|
-
}}
|
|
145
|
-
>
|
|
146
|
-
<ArrowRight size={14} />
|
|
147
|
-
</Button>
|
|
148
|
-
<Button
|
|
149
|
-
size="xs"
|
|
150
|
-
color="light"
|
|
151
|
-
buttonType="button"
|
|
152
|
-
btnClasses="!p-1 !w-[34px] !ml-1"
|
|
153
|
-
aria-label="Abort"
|
|
154
|
-
on:click={() => {
|
|
155
|
-
deploymentMsgUpdateMode = false
|
|
156
|
-
deploymentMsgUpdate = undefined
|
|
157
|
-
}}
|
|
158
|
-
>
|
|
159
|
-
<X size={14} />
|
|
160
|
-
</Button>
|
|
161
|
-
</div>
|
|
162
|
-
{:else}
|
|
163
|
-
{#if selectedVersion.deployment_msg}
|
|
164
|
-
{selectedVersion.deployment_msg}
|
|
165
|
-
{:else}
|
|
166
|
-
Deployed {displayDate(selected.edited_at)} by {selected.edited_by}
|
|
167
|
-
{/if}
|
|
168
|
-
<button
|
|
169
|
-
on:click={() => {
|
|
170
|
-
deploymentMsgUpdate = selectedVersion?.deployment_msg
|
|
171
|
-
deploymentMsgUpdateMode = true
|
|
172
|
-
}}
|
|
173
|
-
title="Update commit message"
|
|
174
|
-
class="flex items-center px-1 rounded-sm hover:text-primary text-secondary h-5"
|
|
175
|
-
aria-label="Update commit message"
|
|
176
|
-
>
|
|
177
|
-
<Pencil size={14} />
|
|
178
|
-
</button>
|
|
179
|
-
{/if}
|
|
180
|
-
</span>
|
|
181
|
-
<div class="flex p-1 gap-2">
|
|
182
|
-
<Button
|
|
183
|
-
size="xs"
|
|
184
|
-
on:click={() =>
|
|
185
|
-
window.open(
|
|
186
|
-
`/flows/add?template_id=${selectedVersion?.id}&template=${path}`,
|
|
187
|
-
'_blank'
|
|
188
|
-
)}
|
|
189
|
-
>
|
|
190
|
-
Restore as fork
|
|
191
|
-
</Button>
|
|
192
|
-
<Button size="xs" on:click={() => restoreVersion(selected)}
|
|
193
|
-
>Redeploy with that version
|
|
194
|
-
</Button>
|
|
195
|
-
</div>
|
|
196
|
-
{#await import('../FlowViewer.svelte')}
|
|
197
|
-
<Loader2 class="animate-spin" />
|
|
198
|
-
{:then Module}
|
|
199
|
-
<Module.default flow={selected} />
|
|
200
|
-
{/await}
|
|
201
|
-
</div>
|
|
202
|
-
{:else}
|
|
203
|
-
<Skeleton layout={[[40]]} />
|
|
204
|
-
{/if}
|
|
205
|
-
{:else}
|
|
206
|
-
<div class="text-sm p-2 text-tertiary"
|
|
207
|
-
>Select a deployment version to see its details</div
|
|
208
|
-
>
|
|
209
|
-
{/if}
|
|
210
|
-
</div>
|
|
211
|
-
</Pane>
|
|
212
|
-
</Splitpanes>
|
|
21
|
+
<FlowHistoryInner
|
|
22
|
+
on:historyRestore={() => {
|
|
23
|
+
drawer.closeDrawer()
|
|
24
|
+
dispatch('historyRestore')
|
|
25
|
+
}}
|
|
26
|
+
{path}
|
|
27
|
+
/>
|
|
213
28
|
</DrawerContent>
|
|
214
29
|
</Drawer>
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
<script>import { Pane, Splitpanes } from 'svelte-splitpanes';
|
|
2
|
+
import { classNames, displayDate, emptyString, sendUserToast } from '../../utils';
|
|
3
|
+
import { FlowService } from '../../gen';
|
|
4
|
+
import { workspaceStore } from '../../stores';
|
|
5
|
+
import { Skeleton } from '../common';
|
|
6
|
+
import Button from '../common/button/Button.svelte';
|
|
7
|
+
import { ArrowRight, Loader2, Pencil, X } from 'lucide-svelte';
|
|
8
|
+
import { createEventDispatcher } from 'svelte';
|
|
9
|
+
export let path;
|
|
10
|
+
let loading = false;
|
|
11
|
+
let versions = [];
|
|
12
|
+
let selectedVersion = undefined;
|
|
13
|
+
let selected = undefined;
|
|
14
|
+
let deploymentMsgUpdateMode = false;
|
|
15
|
+
let deploymentMsgUpdate = undefined;
|
|
16
|
+
async function loadFlow(version) {
|
|
17
|
+
selected = await FlowService.getFlowVersion({
|
|
18
|
+
workspace: $workspaceStore,
|
|
19
|
+
version,
|
|
20
|
+
path
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
async function loadVersions() {
|
|
24
|
+
loading = true;
|
|
25
|
+
versions = await FlowService.getFlowHistory({
|
|
26
|
+
workspace: $workspaceStore,
|
|
27
|
+
path: path
|
|
28
|
+
});
|
|
29
|
+
loading = false;
|
|
30
|
+
}
|
|
31
|
+
async function updateDeploymentMsg(version) {
|
|
32
|
+
if (selectedVersion === undefined ||
|
|
33
|
+
version === undefined ||
|
|
34
|
+
emptyString(deploymentMsgUpdate)) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
await FlowService.updateFlowHistory({
|
|
38
|
+
workspace: $workspaceStore,
|
|
39
|
+
version,
|
|
40
|
+
path,
|
|
41
|
+
requestBody: {
|
|
42
|
+
deployment_msg: deploymentMsgUpdate
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
selectedVersion.deployment_msg = deploymentMsgUpdate;
|
|
46
|
+
deploymentMsgUpdateMode = false;
|
|
47
|
+
loadVersions();
|
|
48
|
+
}
|
|
49
|
+
const dispatch = createEventDispatcher();
|
|
50
|
+
async function restoreVersion(flow) {
|
|
51
|
+
if (!flow)
|
|
52
|
+
return;
|
|
53
|
+
await FlowService.updateFlow({
|
|
54
|
+
workspace: $workspaceStore,
|
|
55
|
+
requestBody: {
|
|
56
|
+
...flow,
|
|
57
|
+
path
|
|
58
|
+
},
|
|
59
|
+
path
|
|
60
|
+
});
|
|
61
|
+
dispatch('historyRestore');
|
|
62
|
+
sendUserToast('Flow restored from previous deployment');
|
|
63
|
+
}
|
|
64
|
+
loadVersions();
|
|
65
|
+
$: selectedVersion !== undefined && loadFlow(selectedVersion.id);
|
|
66
|
+
</script>
|
|
67
|
+
|
|
68
|
+
<Splitpanes class="!overflow-visible">
|
|
69
|
+
<Pane size={20}>
|
|
70
|
+
<div class="flex flex-col gap-2 w-full px-2 py-2">
|
|
71
|
+
{#if !loading}
|
|
72
|
+
{#if versions.length > 0}
|
|
73
|
+
<div class="flex gap-2 flex-col">
|
|
74
|
+
{#each versions ?? [] as version}
|
|
75
|
+
<!-- svelte-ignore a11y-click-events-have-key-events -->
|
|
76
|
+
<div
|
|
77
|
+
class={classNames(
|
|
78
|
+
'border flex gap-1 truncate justify-between flex-row w-full items-center p-2 rounded-md cursor-pointer hover:bg-surface-hover hover:text-primary',
|
|
79
|
+
selectedVersion?.id == version.id ? 'bg-surface-selected text-primary' : ''
|
|
80
|
+
)}
|
|
81
|
+
role="button"
|
|
82
|
+
tabindex="0"
|
|
83
|
+
on:click={() => {
|
|
84
|
+
selectedVersion = version
|
|
85
|
+
}}
|
|
86
|
+
>
|
|
87
|
+
<span class="text-xs truncate">
|
|
88
|
+
{#if emptyString(version.deployment_msg)}Version {version.id}{:else}{version.deployment_msg}{/if}
|
|
89
|
+
</span>
|
|
90
|
+
</div>
|
|
91
|
+
{/each}
|
|
92
|
+
</div>
|
|
93
|
+
{:else}
|
|
94
|
+
<div class="text-sm text-tertiary">No items</div>
|
|
95
|
+
{/if}
|
|
96
|
+
{:else}
|
|
97
|
+
<Skeleton layout={[[40], [40], [40], [40], [40]]} />
|
|
98
|
+
{/if}
|
|
99
|
+
</div>
|
|
100
|
+
</Pane>
|
|
101
|
+
<Pane size={80}>
|
|
102
|
+
<div class="h-full w-full overflow-auto pt-2">
|
|
103
|
+
{#if selectedVersion}
|
|
104
|
+
{#if selected}
|
|
105
|
+
<div class="px-2 flex flex-col gap-2">
|
|
106
|
+
<div class="flex justify-between">
|
|
107
|
+
<span class="flex flex-row text-sm p-1 text-tertiary">
|
|
108
|
+
{#if deploymentMsgUpdateMode}
|
|
109
|
+
<div class="flex w-full">
|
|
110
|
+
<input
|
|
111
|
+
type="text"
|
|
112
|
+
bind:value={deploymentMsgUpdate}
|
|
113
|
+
class="!w-auto grow"
|
|
114
|
+
on:click|stopPropagation={() => {}}
|
|
115
|
+
on:keydown|stopPropagation
|
|
116
|
+
on:keypress|stopPropagation={({ key }) => {
|
|
117
|
+
if (key === 'Enter') updateDeploymentMsg(selectedVersion?.id)
|
|
118
|
+
}}
|
|
119
|
+
/>
|
|
120
|
+
<Button
|
|
121
|
+
size="xs"
|
|
122
|
+
color="blue"
|
|
123
|
+
buttonType="button"
|
|
124
|
+
btnClasses="!p-1 !w-[34px] !ml-1"
|
|
125
|
+
aria-label="Save Deployment Message"
|
|
126
|
+
on:click={() => {
|
|
127
|
+
updateDeploymentMsg(selectedVersion?.id)
|
|
128
|
+
}}
|
|
129
|
+
>
|
|
130
|
+
<ArrowRight size={14} />
|
|
131
|
+
</Button>
|
|
132
|
+
<Button
|
|
133
|
+
size="xs"
|
|
134
|
+
color="light"
|
|
135
|
+
buttonType="button"
|
|
136
|
+
btnClasses="!p-1 !w-[34px] !ml-1"
|
|
137
|
+
aria-label="Abort"
|
|
138
|
+
on:click={() => {
|
|
139
|
+
deploymentMsgUpdateMode = false
|
|
140
|
+
deploymentMsgUpdate = undefined
|
|
141
|
+
}}
|
|
142
|
+
>
|
|
143
|
+
<X size={14} />
|
|
144
|
+
</Button>
|
|
145
|
+
</div>
|
|
146
|
+
{:else}
|
|
147
|
+
{#if selectedVersion.deployment_msg}
|
|
148
|
+
{selectedVersion.deployment_msg}
|
|
149
|
+
{:else}
|
|
150
|
+
Deployed {displayDate(selected.edited_at)} by {selected.edited_by}
|
|
151
|
+
{/if}
|
|
152
|
+
<button
|
|
153
|
+
on:click={() => {
|
|
154
|
+
deploymentMsgUpdate = selectedVersion?.deployment_msg
|
|
155
|
+
deploymentMsgUpdateMode = true
|
|
156
|
+
}}
|
|
157
|
+
title="Update commit message"
|
|
158
|
+
class="flex items-center px-1 rounded-sm hover:text-primary text-secondary h-5"
|
|
159
|
+
aria-label="Update commit message"
|
|
160
|
+
>
|
|
161
|
+
<Pencil size={14} />
|
|
162
|
+
</button>
|
|
163
|
+
{/if}
|
|
164
|
+
</span>
|
|
165
|
+
<div class="flex p-1 gap-2">
|
|
166
|
+
<div class="flex">
|
|
167
|
+
<Button
|
|
168
|
+
size="sm"
|
|
169
|
+
color="dark"
|
|
170
|
+
on:click={() =>
|
|
171
|
+
window.open(
|
|
172
|
+
`/flows/add?template_id=${selectedVersion?.id}&template=${path}`,
|
|
173
|
+
'_blank'
|
|
174
|
+
)}
|
|
175
|
+
>
|
|
176
|
+
Restore as fork
|
|
177
|
+
</Button>
|
|
178
|
+
</div>
|
|
179
|
+
<div class="flex">
|
|
180
|
+
<Button size="sm" color="dark" on:click={() => restoreVersion(selected)}
|
|
181
|
+
>Redeploy with that version
|
|
182
|
+
</Button>
|
|
183
|
+
</div>
|
|
184
|
+
</div>
|
|
185
|
+
</div>
|
|
186
|
+
{#await import('../FlowViewer.svelte')}
|
|
187
|
+
<Loader2 class="animate-spin" />
|
|
188
|
+
{:then Module}
|
|
189
|
+
<Module.default flow={selected} />
|
|
190
|
+
{/await}
|
|
191
|
+
</div>
|
|
192
|
+
{:else}
|
|
193
|
+
<Skeleton layout={[[40]]} />
|
|
194
|
+
{/if}
|
|
195
|
+
{:else}
|
|
196
|
+
<div class="text-sm p-2 text-tertiary">Select a deployment version to see its details</div>
|
|
197
|
+
{/if}
|
|
198
|
+
</div>
|
|
199
|
+
</Pane>
|
|
200
|
+
</Splitpanes>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
path: string;
|
|
5
|
+
};
|
|
6
|
+
events: {
|
|
7
|
+
keydown: KeyboardEvent;
|
|
8
|
+
historyRestore: CustomEvent<any>;
|
|
9
|
+
} & {
|
|
10
|
+
[evt: string]: CustomEvent<any>;
|
|
11
|
+
};
|
|
12
|
+
slots: {};
|
|
13
|
+
};
|
|
14
|
+
export type FlowHistoryInnerProps = typeof __propDef.props;
|
|
15
|
+
export type FlowHistoryInnerEvents = typeof __propDef.events;
|
|
16
|
+
export type FlowHistoryInnerSlots = typeof __propDef.slots;
|
|
17
|
+
export default class FlowHistoryInner extends SvelteComponent<FlowHistoryInnerProps, FlowHistoryInnerEvents, FlowHistoryInnerSlots> {
|
|
18
|
+
}
|
|
19
|
+
export {};
|