windmill-components 1.389.2 → 1.394.3
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 +4 -3
- package/package/components/AppConnectInner.svelte +18 -10
- package/package/components/ArgInfo.svelte +1 -1
- package/package/components/ArgInput.svelte +22 -2
- package/package/components/AutheliaSetting.svelte +1 -0
- package/package/components/AuthentikSetting.svelte +1 -0
- package/package/components/BoundedInputNumber +0 -0
- package/package/components/CliHelpBox.svelte +2 -2
- package/package/components/DateInput.svelte +1 -0
- package/package/components/DisplayResult.svelte +39 -31
- package/package/components/Editor.svelte +0 -21
- package/package/components/ErrorOrRecoveryHandler.svelte +7 -1
- package/package/components/ErrorOrRecoveryHandler.svelte.d.ts +1 -1
- package/package/components/FlowBuilder.svelte +2 -2
- package/package/components/FlowGraphViewerStep.svelte +22 -0
- package/package/components/FlowJobResult.svelte +1 -0
- package/package/components/FlowMetadata.svelte +3 -2
- package/package/components/FlowStatusViewer.svelte +2 -0
- package/package/components/FlowStatusViewer.svelte.d.ts +2 -0
- package/package/components/FlowStatusViewerInner.svelte +10 -5
- package/package/components/FlowStatusViewerInner.svelte.d.ts +1 -0
- package/package/components/FolderEditor.svelte +1 -1
- package/package/components/IdEditorInput.svelte +82 -0
- package/package/components/IdEditorInput.svelte.d.ts +26 -0
- package/package/components/InputTransformForm.svelte +10 -10
- package/package/components/InputTransformForm.svelte.d.ts +4 -1
- package/package/components/InputTransformSchemaForm.svelte.d.ts +3 -1
- package/package/components/InstanceSettings.svelte +73 -12
- package/package/components/ItemPicker.svelte +1 -0
- package/package/components/KanidmSetting.svelte +1 -0
- package/package/components/KeycloakSetting.svelte +1 -0
- package/package/components/LightweightArgInput.svelte +2 -0
- package/package/components/LogViewer.svelte +206 -0
- package/package/components/ModulePreview.svelte.d.ts +3 -1
- package/package/components/ModulePreviewForm.svelte +2 -2
- package/package/components/ModulePreviewForm.svelte.d.ts +4 -1
- package/package/components/OAuthSetting.svelte +11 -10
- package/package/components/ObjectStoreConfigSettings.svelte +6 -6
- package/package/components/OktaSetting.svelte +1 -0
- package/package/components/Password.svelte +30 -35
- package/package/components/RunChart.svelte +16 -0
- package/package/components/RunChart.svelte.d.ts +2 -0
- package/package/components/SavedInputs.svelte +4 -4
- package/package/components/ScheduleEditorInner.svelte +145 -2
- package/package/components/SchemaForm.svelte +1 -2
- package/package/components/ScriptBuilder.svelte +1 -0
- package/package/components/TestConnection.svelte +24 -6
- package/package/components/TestJobLoader.svelte +2 -0
- package/package/components/ZitadelSetting.svelte +1 -0
- package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +0 -1
- package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte.d.ts +1 -2
- package/package/components/apps/components/display/table/AppAggridInfiniteTableEe.svelte +0 -2
- package/package/components/apps/components/display/table/AppAggridInfiniteTableEe.svelte.d.ts +1 -2
- package/package/components/apps/components/display/table/AppAggridTable.svelte +6 -2
- package/package/components/apps/components/inputs/AppSelect.svelte +18 -17
- package/package/components/apps/editor/AppEditor.svelte +1 -1
- package/package/components/apps/editor/AppPreview.svelte +3 -6
- package/package/components/apps/editor/AppReportsDrawer.svelte +17 -5
- package/package/components/apps/editor/DeploymentHistory.svelte +1 -0
- package/package/components/apps/editor/component/Component.svelte +0 -2
- package/package/components/apps/editor/componentsPanel/themeUtils.js +18 -7
- package/package/components/apps/editor/contextPanel/SubGridOutput.svelte +1 -0
- package/package/components/apps/editor/contextPanel/components/IdEditor.svelte +13 -67
- package/package/components/apps/editor/contextPanel/components/IdEditor.svelte.d.ts +1 -2
- package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +0 -1
- package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +0 -1
- package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte.d.ts +0 -1
- package/package/components/apps/editor/settingsPanel/DecisionTreeGraphNode.svelte +1 -1
- package/package/components/apps/editor/settingsPanel/decisionTree/InsertDecisionTreeNode.svelte +2 -2
- package/package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte +1 -0
- package/package/components/apps/svelte-select/lib/Select.svelte +1 -0
- package/package/components/build_workers.js +24 -18
- package/package/components/common/button/Button.svelte +3 -4
- package/package/components/common/button/model.d.ts +1 -1
- package/package/components/common/button/model.js +6 -0
- package/package/components/common/clearableInput/ClearableInput.svelte +1 -0
- package/package/components/common/menu/MenuItem.svelte +1 -0
- package/package/components/common/modal/AlwaysMountedModal.svelte +1 -0
- package/package/components/common/stepper/Stepper.svelte +1 -0
- package/package/components/copilot/StepInputsGen.svelte +2 -2
- package/package/components/copilot/StepInputsGen.svelte.d.ts +3 -1
- package/package/components/copilot/lib.js +2 -2
- package/package/components/details/ClipboardPanel.svelte +1 -0
- package/package/components/flows/content/DynamicInputHelpBox.svelte +4 -1
- package/package/components/flows/content/FlowConstants.svelte +3 -3
- package/package/components/flows/content/FlowEditorPanel.svelte +1 -1
- package/package/components/flows/content/FlowModuleComponent.svelte +2 -2
- package/package/components/flows/content/FlowModuleHeader.svelte +5 -45
- package/package/components/flows/content/FlowModuleWorkerTagSelect.svelte +47 -0
- package/package/components/flows/content/FlowModuleWorkerTagSelect.svelte.d.ts +16 -0
- package/package/components/flows/content/FlowSettings.svelte +1 -0
- package/package/components/flows/flowModuleNextId.js +1 -1
- package/package/components/flows/flowState.d.ts +1 -1
- package/package/components/flows/flowStateUtils.d.ts +1 -1
- package/package/components/flows/flowStateUtils.js +1 -1
- package/package/components/flows/flowStore.d.ts +1 -0
- package/package/components/flows/flowStore.js +5 -0
- package/package/components/flows/map/FlowJobsMenu.svelte +0 -1
- package/package/components/flows/map/FlowJobsMenu.svelte.d.ts +0 -1
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +103 -19
- package/package/components/flows/map/FlowModuleSchemaItem.svelte.d.ts +1 -0
- package/package/components/flows/map/FlowModuleSchemaMap.svelte +31 -1
- package/package/components/flows/map/InsertModuleButton.svelte +5 -5
- package/package/components/flows/map/InsertTriggerButton.svelte +2 -2
- package/package/components/flows/map/MapItem.svelte +4 -0
- package/package/components/flows/map/MapItem.svelte.d.ts +1 -0
- package/package/components/flows/map/VirtualItem.svelte +15 -7
- package/package/components/flows/map/VirtualItem.svelte.d.ts +2 -1
- package/package/components/flows/previousResults.js +1 -1
- package/package/components/flows/utils.d.ts +3 -3
- package/package/components/flows/utils.js +2 -2
- package/package/components/graph/FlowGraphV2.svelte +4 -0
- package/package/components/graph/FlowGraphV2.svelte.d.ts +1 -0
- package/package/components/graph/graphBuilder.d.ts +1 -0
- package/package/components/graph/graphBuilder.js +2 -4
- package/package/components/graph/renderers/edges/BaseEdge.svelte +2 -2
- package/package/components/graph/renderers/nodes/BranchAllStart.svelte +2 -1
- package/package/components/graph/renderers/nodes/BranchOneStart.svelte +3 -3
- package/package/components/graph/renderers/nodes/BranchOneStart.svelte.d.ts +1 -0
- package/package/components/graph/renderers/nodes/InputNode.svelte +2 -2
- package/package/components/graph/renderers/nodes/ModuleNode.svelte +6 -2
- package/package/components/graph/util.d.ts +1 -1
- package/package/components/graph/util.js +7 -2
- package/package/components/icons/AzureIcon.svelte +1 -1
- package/package/components/icons/FunkwhaleIcon.svelte +1 -19
- package/package/components/icons/JumpCloudIcon.svelte +12 -0
- package/package/components/icons/JumpCloudIcon.svelte.d.ts +17 -0
- package/package/components/icons/KeycloakIcon.svelte +20 -0
- package/package/components/icons/KeycloakIcon.svelte.d.ts +17 -0
- package/package/components/icons/MailchimpIcon.svelte +1 -1
- package/package/components/icons/ZitadelIcon.svelte +76 -0
- package/package/components/icons/ZitadelIcon.svelte.d.ts +17 -0
- package/package/components/icons/index.d.ts +7 -1
- package/package/components/icons/index.js +8 -2
- package/package/components/instanceSettings.d.ts +1 -1
- package/package/components/instanceSettings.js +24 -15
- package/package/components/runs/JobLoader.svelte +17 -6
- package/package/components/runs/JobLoader.svelte.d.ts +2 -0
- package/package/components/runs/RunRow.svelte +7 -7
- package/package/components/runs/RunsFilter.svelte +8 -1
- package/package/components/runs/RunsTable.svelte +30 -8
- package/package/components/runs/RunsTable.svelte.d.ts +2 -0
- package/package/components/schema/PropertyEditor.svelte +0 -5
- package/package/components/settings/WorkspaceUserSettings.svelte +1 -1
- package/package/components/sidebar/MenuLink.svelte +2 -1
- package/package/components/sidebar/WorkspaceMenu.svelte +4 -1
- package/package/components/sidebar/changelogs.js +30 -0
- package/package/components/tutorials/FlowBuilderTutorialsForLoop.svelte +2 -2
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +21 -0
- package/package/gen/schemas.gen.js +21 -0
- package/package/gen/services.gen.d.ts +11 -12
- package/package/gen/services.gen.js +19 -24
- package/package/gen/types.gen.d.ts +62 -37
- package/package/hub.d.ts +1 -0
- package/package/hubPaths.json +11 -8
- package/package.json +4 -4
- package/package/windmill_fetch.d.ts.txt +0 -16966
|
@@ -114,14 +114,14 @@ async function testConnection() {
|
|
|
114
114
|
<input type="text" bind:value={bucket_config.region} />
|
|
115
115
|
</label>
|
|
116
116
|
<label class="block pb-2">
|
|
117
|
-
<span class="text-primary font-semibold text-sm">Access
|
|
117
|
+
<span class="text-primary font-semibold text-sm">Access key ID</span>
|
|
118
118
|
<span class="text-tertiary text-2xs"
|
|
119
119
|
>If left empty, will be derived automatically from $AWS_ACCESS_KEY_ID, pod or ec2 profile</span
|
|
120
120
|
>
|
|
121
121
|
<input type="text" bind:value={bucket_config.access_key} />
|
|
122
122
|
</label>
|
|
123
123
|
<label class="block pb-2">
|
|
124
|
-
<span class="text-primary font-semibold text-sm">Secret
|
|
124
|
+
<span class="text-primary font-semibold text-sm">Secret key</span>
|
|
125
125
|
<span class="text-tertiary text-2xs"
|
|
126
126
|
>If left empty, will be derived automatically from $AWS_SECRET_KEY, pod or ec2 profile</span
|
|
127
127
|
>
|
|
@@ -137,20 +137,20 @@ async function testConnection() {
|
|
|
137
137
|
<div class="block pb-2">
|
|
138
138
|
<span class="text-tertiary text-2xs">Disable if using https only policy</span>
|
|
139
139
|
<div>
|
|
140
|
-
<Toggle bind:checked={bucket_config.allow_http} options={{ right: '
|
|
140
|
+
<Toggle bind:checked={bucket_config.allow_http} options={{ right: 'Allow http' }} />
|
|
141
141
|
</div>
|
|
142
142
|
</div>
|
|
143
143
|
{:else if bucket_config.type === 'Azure'}
|
|
144
144
|
<label class="block pb-2">
|
|
145
|
-
<span class="text-primary font-semibold text-sm">Account
|
|
145
|
+
<span class="text-primary font-semibold text-sm">Account name</span>
|
|
146
146
|
<input type="text" placeholder="account-name" bind:value={bucket_config.accountName} />
|
|
147
147
|
</label>
|
|
148
148
|
<label class="block pb-2">
|
|
149
|
-
<span class="text-primary font-semibold text-sm">Container
|
|
149
|
+
<span class="text-primary font-semibold text-sm">Container name</span>
|
|
150
150
|
<input type="text" placeholder="container-name" bind:value={bucket_config.containerName} />
|
|
151
151
|
</label>
|
|
152
152
|
<label class="block pb-2">
|
|
153
|
-
<span class="text-primary font-semibold text-sm">Access
|
|
153
|
+
<span class="text-primary font-semibold text-sm">Access key</span>
|
|
154
154
|
<input type="password" autocomplete="new-password" bind:value={bucket_config.accessKey} />
|
|
155
155
|
</label>
|
|
156
156
|
<label class="block pb-2">
|
|
@@ -29,6 +29,7 @@ function changeDomain(domain, custom) {
|
|
|
29
29
|
</script>
|
|
30
30
|
|
|
31
31
|
<div class="flex flex-col gap-1">
|
|
32
|
+
<!-- svelte-ignore a11y-label-has-associated-control -->
|
|
32
33
|
<label class="text-sm font-medium text-primary flex gap-4 items-center"
|
|
33
34
|
><div class="w-[120px]"><IconedResourceType name="okta" after={true} /></div><Toggle
|
|
34
35
|
checked={enabled}
|
|
@@ -5,49 +5,44 @@ export let placeholder = '******';
|
|
|
5
5
|
export let disabled = false;
|
|
6
6
|
export let required = false;
|
|
7
7
|
export let small = false;
|
|
8
|
-
onMount(() => {
|
|
9
|
-
const passwordToggle = document.querySelector('.js-password-toggle');
|
|
10
|
-
if (passwordToggle) {
|
|
11
|
-
passwordToggle.addEventListener('change', function () {
|
|
12
|
-
const password = document.querySelector('.js-password'), passwordLabel = document.querySelector('.js-password-label');
|
|
13
|
-
if (password.type === 'password') {
|
|
14
|
-
password.type = 'text';
|
|
15
|
-
passwordLabel.innerHTML = 'hide';
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
password.type = 'password';
|
|
19
|
-
passwordLabel.innerHTML = 'show';
|
|
20
|
-
}
|
|
21
|
-
password.focus();
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
throw Error('Password component is undefined');
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
8
|
$: red = required && (password == '' || password == undefined);
|
|
9
|
+
let hideValue = true;
|
|
10
|
+
let randomId = (Math.random() * 10e15).toString(16);
|
|
29
11
|
</script>
|
|
30
12
|
|
|
31
13
|
<div class="relative w-full {small ? 'max-w-lg' : ''}">
|
|
32
14
|
<div class="absolute inset-y-0 right-0 flex items-center px-2">
|
|
33
|
-
<input class="!hidden
|
|
15
|
+
<input bind:checked={hideValue} class="!hidden" id={randomId} type="checkbox" />
|
|
34
16
|
<label
|
|
35
|
-
class="bg-surface-secondary hover:bg-gray-400 rounded px-2 py-1 text-sm text-tertiary font-mono cursor-pointer
|
|
36
|
-
for=
|
|
17
|
+
class="bg-surface-secondary hover:bg-gray-400 rounded px-2 py-1 text-sm text-tertiary font-mono cursor-pointer"
|
|
18
|
+
for={randomId}>{hideValue ? 'show' : 'hide'}</label
|
|
37
19
|
>
|
|
38
20
|
</div>
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
? '!
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
21
|
+
{#if hideValue}
|
|
22
|
+
<input
|
|
23
|
+
class="block {small ? '!text-2xs' : 'w-full'} px-2 py-1 {red
|
|
24
|
+
? '!border-red-500'
|
|
25
|
+
: ''} text-sm h-9"
|
|
26
|
+
type="password"
|
|
27
|
+
bind:value={password}
|
|
28
|
+
on:keydown
|
|
29
|
+
autocomplete="new-password"
|
|
30
|
+
{placeholder}
|
|
31
|
+
{disabled}
|
|
32
|
+
/>
|
|
33
|
+
{:else}
|
|
34
|
+
<input
|
|
35
|
+
class="block {small ? '!text-2xs' : 'w-full'} px-2 py-1 {red
|
|
36
|
+
? '!border-red-500'
|
|
37
|
+
: ''} text-sm h-9"
|
|
38
|
+
type="text"
|
|
39
|
+
bind:value={password}
|
|
40
|
+
on:keydown
|
|
41
|
+
autocomplete="new-password"
|
|
42
|
+
{placeholder}
|
|
43
|
+
{disabled}
|
|
44
|
+
/>
|
|
45
|
+
{/if}
|
|
51
46
|
</div>
|
|
52
47
|
{#if red}
|
|
53
48
|
<div class="text-red-600 text-2xs grow">This field is required</div>
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
<script>import { Scatter } from 'svelte-chartjs';
|
|
2
2
|
import 'chartjs-adapter-date-fns';
|
|
3
3
|
import zoomPlugin from 'chartjs-plugin-zoom';
|
|
4
|
+
import Tooltip2 from './Tooltip.svelte';
|
|
4
5
|
import { Chart as ChartJS, Title, Tooltip, Legend, LineElement, CategoryScale, LinearScale, PointElement, TimeScale, LogarithmicScale } from 'chart.js';
|
|
5
6
|
import { createEventDispatcher } from 'svelte';
|
|
6
7
|
import { getDbClockNow } from '../forLater';
|
|
8
|
+
import Button from './common/button/Button.svelte';
|
|
7
9
|
export let jobs = [];
|
|
8
10
|
export let maxIsNow = false;
|
|
9
11
|
export let minTimeSet = undefined;
|
|
10
12
|
export let maxTimeSet = undefined;
|
|
11
13
|
export let selectedIds = [];
|
|
12
14
|
export let canSelect = true;
|
|
15
|
+
export let lastFetchWentToEnd = false;
|
|
13
16
|
const dispatch = createEventDispatcher();
|
|
14
17
|
const SUCCESS_COLOR = '#4ade80';
|
|
15
18
|
// const SUCCESS_COLOR_TRANSPARENT = '#c9b638'
|
|
@@ -220,5 +223,18 @@ $: data && scatterOptions && highlightSelectedPoints(selectedIds);
|
|
|
220
223
|
{maxTime} -->
|
|
221
224
|
<!-- {JSON.stringify(jobs?.map((x) => x.started_at))} -->
|
|
222
225
|
<div class="relative max-h-40">
|
|
226
|
+
{#if !lastFetchWentToEnd}
|
|
227
|
+
<div class="absolute top-[-10px] left-[60px]"
|
|
228
|
+
><Button
|
|
229
|
+
size="xs"
|
|
230
|
+
color="transparent"
|
|
231
|
+
variant="contained"
|
|
232
|
+
on:click={() => dispatch('loadExtra')}
|
|
233
|
+
>Load more <Tooltip2
|
|
234
|
+
>There are more jobs to load but only the first 1000 were fetched</Tooltip2
|
|
235
|
+
></Button
|
|
236
|
+
></div
|
|
237
|
+
>
|
|
238
|
+
{/if}
|
|
223
239
|
<Scatter {data} options={scatterOptions} />
|
|
224
240
|
</div>
|
|
@@ -9,8 +9,10 @@ declare const __propDef: {
|
|
|
9
9
|
maxTimeSet?: string | undefined;
|
|
10
10
|
selectedIds?: string[] | undefined;
|
|
11
11
|
canSelect?: boolean | undefined;
|
|
12
|
+
lastFetchWentToEnd?: boolean | undefined;
|
|
12
13
|
};
|
|
13
14
|
events: {
|
|
15
|
+
loadExtra: CustomEvent<any>;
|
|
14
16
|
zoom: CustomEvent<any>;
|
|
15
17
|
} & {
|
|
16
18
|
[evt: string]: CustomEvent<any>;
|
|
@@ -192,7 +192,7 @@ async function loadLargeArgs(id, input, allowLarge) {
|
|
|
192
192
|
<div class="w-full flex flex-col gap-1 h-full overflow-y-auto p">
|
|
193
193
|
{#if savedInputs === undefined}
|
|
194
194
|
<Skeleton layout={[[8]]} />
|
|
195
|
-
{:else if savedInputs
|
|
195
|
+
{:else if savedInputs?.length > 0}
|
|
196
196
|
{#each savedInputs as i}
|
|
197
197
|
<button
|
|
198
198
|
class={classNames(
|
|
@@ -293,7 +293,7 @@ async function loadLargeArgs(id, input, allowLarge) {
|
|
|
293
293
|
<div class="w-full flex flex-col gap-1 p-0 h-full overflow-y-auto">
|
|
294
294
|
{#if loading && (jobs == undefined || jobs?.length == 0)}
|
|
295
295
|
<div class="text-left text-tertiary text-xs">Loading current runs...</div>
|
|
296
|
-
{:else if jobs
|
|
296
|
+
{:else if jobs?.length > 0}
|
|
297
297
|
{#each jobs as i (i.id)}
|
|
298
298
|
<button
|
|
299
299
|
class={classNames(
|
|
@@ -348,7 +348,7 @@ async function loadLargeArgs(id, input, allowLarge) {
|
|
|
348
348
|
</div>
|
|
349
349
|
</button>
|
|
350
350
|
{/each}
|
|
351
|
-
{#if jobs
|
|
351
|
+
{#if jobs?.length == 5}
|
|
352
352
|
<div class="text-left text-tertiary text-xs"
|
|
353
353
|
>... there may be more runs not displayed here as the limit is 5</div
|
|
354
354
|
>
|
|
@@ -361,7 +361,7 @@ async function loadLargeArgs(id, input, allowLarge) {
|
|
|
361
361
|
<div class="w-full flex flex-col gap-1 p-0 h-full overflow-y-auto">
|
|
362
362
|
{#if previousInputs === undefined}
|
|
363
363
|
<Skeleton layout={[[8]]} />
|
|
364
|
-
{:else if previousInputs
|
|
364
|
+
{:else if previousInputs?.length > 0}
|
|
365
365
|
{#each previousInputs as i (i.id)}
|
|
366
366
|
<button
|
|
367
367
|
class={classNames(
|
|
@@ -39,6 +39,11 @@ let recoveryHandlerCustomInitialPath = undefined;
|
|
|
39
39
|
let recoveryHandlerSelected = 'slack';
|
|
40
40
|
let recoveryHandlerItemKind = 'script';
|
|
41
41
|
let recoveryHandlerExtraArgs = {};
|
|
42
|
+
let successHandlerPath = undefined;
|
|
43
|
+
let successHandlerCustomInitialPath = undefined;
|
|
44
|
+
let successHandlerSelected = 'slack';
|
|
45
|
+
let successHandlerItemKind = 'script';
|
|
46
|
+
let successHandlerExtraArgs = {};
|
|
42
47
|
let failedTimes = 1;
|
|
43
48
|
let failedExact = false;
|
|
44
49
|
let recoveredTimes = 1;
|
|
@@ -80,6 +85,7 @@ export async function openNew(nis_flow, initial_script_path) {
|
|
|
80
85
|
showPauseUntil = false;
|
|
81
86
|
let defaultErrorHandlerMaybe = undefined;
|
|
82
87
|
let defaultRecoveryHandlerMaybe = undefined;
|
|
88
|
+
let defaultSuccessHandlerMaybe = undefined;
|
|
83
89
|
if ($workspaceStore) {
|
|
84
90
|
defaultErrorHandlerMaybe = (await SettingService.getGlobal({
|
|
85
91
|
key: 'default_error_handler_' + $workspaceStore
|
|
@@ -87,6 +93,9 @@ export async function openNew(nis_flow, initial_script_path) {
|
|
|
87
93
|
defaultRecoveryHandlerMaybe = (await SettingService.getGlobal({
|
|
88
94
|
key: 'default_recovery_handler_' + $workspaceStore
|
|
89
95
|
}));
|
|
96
|
+
defaultSuccessHandlerMaybe = (await SettingService.getGlobal({
|
|
97
|
+
key: 'default_success_handler_' + $workspaceStore
|
|
98
|
+
}));
|
|
90
99
|
}
|
|
91
100
|
edit = false;
|
|
92
101
|
itemKind = nis_flow ? 'flow' : 'script';
|
|
@@ -137,6 +146,22 @@ export async function openNew(nis_flow, initial_script_path) {
|
|
|
137
146
|
recoveryHandlerSelected = 'slack';
|
|
138
147
|
recoveredTimes = 1;
|
|
139
148
|
}
|
|
149
|
+
if (defaultSuccessHandlerMaybe !== undefined && defaultSuccessHandlerMaybe !== null) {
|
|
150
|
+
let splitted = defaultSuccessHandlerMaybe['successHandlerPath'].split('/');
|
|
151
|
+
successHandlerItemKind = splitted[0];
|
|
152
|
+
successHandlerPath = splitted.slice(1)?.join('/');
|
|
153
|
+
successHandlerExtraArgs = defaultSuccessHandlerMaybe['successHandlerExtraArgs'];
|
|
154
|
+
successHandlerCustomInitialPath = successHandlerPath;
|
|
155
|
+
successHandlerSelected = isSlackHandler('success', successHandlerPath) ? 'slack' : 'custom';
|
|
156
|
+
recoveredTimes = defaultSuccessHandlerMaybe['recoveredTimes'];
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
successHandlerPath = undefined;
|
|
160
|
+
successHandlerItemKind = 'script';
|
|
161
|
+
successHandlerExtraArgs = {};
|
|
162
|
+
successHandlerCustomInitialPath = undefined;
|
|
163
|
+
successHandlerSelected = 'slack';
|
|
164
|
+
}
|
|
140
165
|
timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
141
166
|
}
|
|
142
167
|
finally {
|
|
@@ -232,6 +257,32 @@ async function saveAsDefaultRecoveryHandler(overrideExisting) {
|
|
|
232
257
|
}
|
|
233
258
|
}
|
|
234
259
|
}
|
|
260
|
+
async function saveAsDefaultSuccessHandler(overrideExisting) {
|
|
261
|
+
if (!$enterpriseLicense) {
|
|
262
|
+
sendUserToast(`Setting default success handler is an enterprise edition feature`, true);
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
if ($workspaceStore) {
|
|
266
|
+
await ScheduleService.setDefaultErrorOrRecoveryHandler({
|
|
267
|
+
workspace: $workspaceStore,
|
|
268
|
+
requestBody: {
|
|
269
|
+
handler_type: 'success',
|
|
270
|
+
override_existing: overrideExisting,
|
|
271
|
+
path: successHandlerPath === undefined
|
|
272
|
+
? undefined
|
|
273
|
+
: `${successHandlerItemKind}/${successHandlerPath}`,
|
|
274
|
+
extra_args: successHandlerExtraArgs,
|
|
275
|
+
number_of_occurence: recoveredTimes
|
|
276
|
+
}
|
|
277
|
+
});
|
|
278
|
+
if (successHandlerPath !== undefined) {
|
|
279
|
+
sendUserToast(`Default success handler saved to ${successHandlerPath}`, false);
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
sendUserToast(`Default success handler reset`, false);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
235
286
|
let can_write = true;
|
|
236
287
|
async function loadSchedule() {
|
|
237
288
|
loading = true;
|
|
@@ -290,6 +341,21 @@ async function loadSchedule() {
|
|
|
290
341
|
recoveryHandlerSelected = 'slack';
|
|
291
342
|
recoveryHandlerExtraArgs = {};
|
|
292
343
|
}
|
|
344
|
+
if (s.on_success) {
|
|
345
|
+
let splitted = s.on_success.split('/');
|
|
346
|
+
successHandlerItemKind = splitted[0];
|
|
347
|
+
successHandlerPath = splitted.slice(1)?.join('/');
|
|
348
|
+
successHandlerCustomInitialPath = successHandlerPath;
|
|
349
|
+
successHandlerExtraArgs = s.on_success_extra_args ?? {};
|
|
350
|
+
successHandlerSelected = isSlackHandler('success', successHandlerPath) ? 'slack' : 'custom';
|
|
351
|
+
}
|
|
352
|
+
else {
|
|
353
|
+
successHandlerPath = undefined;
|
|
354
|
+
successHandlerItemKind = 'script';
|
|
355
|
+
successHandlerCustomInitialPath = undefined;
|
|
356
|
+
successHandlerSelected = 'slack';
|
|
357
|
+
successHandlerExtraArgs = {};
|
|
358
|
+
}
|
|
293
359
|
args = s.args ?? {};
|
|
294
360
|
can_write = canWrite(s.path, s.extra_perms, $userStore);
|
|
295
361
|
tag = s.tag;
|
|
@@ -306,6 +372,9 @@ async function scheduleScript() {
|
|
|
306
372
|
if (recoveryHandlerPath !== undefined && isSlackHandler('recovery', recoveryHandlerPath)) {
|
|
307
373
|
recoveryHandlerExtraArgs['slack'] = '$res:f/slack_bot/bot_token';
|
|
308
374
|
}
|
|
375
|
+
if (successHandlerPath !== undefined && isSlackHandler('success', successHandlerPath)) {
|
|
376
|
+
successHandlerExtraArgs['slack'] = '$res:f/slack_bot/bot_token';
|
|
377
|
+
}
|
|
309
378
|
if (edit) {
|
|
310
379
|
await ScheduleService.updateSchedule({
|
|
311
380
|
workspace: $workspaceStore,
|
|
@@ -323,6 +392,10 @@ async function scheduleScript() {
|
|
|
323
392
|
: undefined,
|
|
324
393
|
on_recovery_times: recoveredTimes,
|
|
325
394
|
on_recovery_extra_args: recoveryHandlerPath ? recoveryHandlerExtraArgs : {},
|
|
395
|
+
on_success: successHandlerPath
|
|
396
|
+
? `${successHandlerItemKind}/${successHandlerPath}`
|
|
397
|
+
: undefined,
|
|
398
|
+
on_success_extra_args: successHandlerPath ? successHandlerExtraArgs : {},
|
|
326
399
|
ws_error_handler_muted: wsErrorHandlerMuted,
|
|
327
400
|
retry: retry,
|
|
328
401
|
summary: summary != '' ? summary : undefined,
|
|
@@ -353,6 +426,10 @@ async function scheduleScript() {
|
|
|
353
426
|
: undefined,
|
|
354
427
|
on_recovery_times: recoveredTimes,
|
|
355
428
|
on_recovery_extra_args: recoveryHandlerPath ? recoveryHandlerExtraArgs : {},
|
|
429
|
+
on_success: successHandlerPath
|
|
430
|
+
? `${successHandlerItemKind}/${successHandlerPath}`
|
|
431
|
+
: undefined,
|
|
432
|
+
on_success_extra_args: successHandlerPath ? successHandlerExtraArgs : {},
|
|
356
433
|
ws_error_handler_muted: wsErrorHandlerMuted,
|
|
357
434
|
retry: retry,
|
|
358
435
|
summary: summary != '' ? summary : undefined,
|
|
@@ -371,9 +448,12 @@ function isSlackHandler(isSlackHandler, scriptPath) {
|
|
|
371
448
|
return (scriptPath.startsWith('hub/') &&
|
|
372
449
|
scriptPath.endsWith('/workspace-or-schedule-error-handler-slack'));
|
|
373
450
|
}
|
|
374
|
-
else {
|
|
451
|
+
else if (isSlackHandler == 'recovery') {
|
|
375
452
|
return (scriptPath.startsWith('hub/') && scriptPath.endsWith('/schedule-recovery-handler-slack'));
|
|
376
453
|
}
|
|
454
|
+
else {
|
|
455
|
+
return scriptPath.startsWith('hub/') && scriptPath.endsWith('/schedule-success-handler-slack');
|
|
456
|
+
}
|
|
377
457
|
}
|
|
378
458
|
$: {
|
|
379
459
|
if ($workspaceStore) {
|
|
@@ -602,6 +682,7 @@ $: !showPauseUntil && (paused_until = undefined);
|
|
|
602
682
|
<Tabs bind:selected={optionTabSelected}>
|
|
603
683
|
<Tab value="error_handler">Error Handler</Tab>
|
|
604
684
|
<Tab value="recovery_handler">Recovery Handler</Tab>
|
|
685
|
+
<Tab value="success_handler">Success Handler</Tab>
|
|
605
686
|
{#if itemKind === 'script'}
|
|
606
687
|
<Tab value="retries">Retries</Tab>
|
|
607
688
|
<Tab value="tag">Custom tag</Tab>
|
|
@@ -749,7 +830,7 @@ $: !showPauseUntil && (paused_until = undefined);
|
|
|
749
830
|
bind:handlerPath={recoveryHandlerPath}
|
|
750
831
|
customInitialScriptPath={recoveryHandlerCustomInitialPath}
|
|
751
832
|
slackToggleText="Alert channel when error recovered"
|
|
752
|
-
customScriptTemplate="/scripts/add?hub=hub%
|
|
833
|
+
customScriptTemplate="/scripts/add?hub=hub%2F2794%2Fwindmill%2Fschedule_recovery_handler_template"
|
|
753
834
|
bind:customHandlerKind={recoveryHandlerItemKind}
|
|
754
835
|
bind:handlerExtraArgs={recoveryHandlerExtraArgs}
|
|
755
836
|
>
|
|
@@ -801,6 +882,68 @@ $: !showPauseUntil && (paused_until = undefined);
|
|
|
801
882
|
</div>
|
|
802
883
|
</div>
|
|
803
884
|
</Section>
|
|
885
|
+
{:else if optionTabSelected === 'success_handler'}
|
|
886
|
+
<Section label="Success handler">
|
|
887
|
+
<svelte:fragment slot="header">
|
|
888
|
+
<div class="flex flex-row gap-2">
|
|
889
|
+
{#if !$enterpriseLicense}<span class="text-normal text-2xs">(ee only)</span
|
|
890
|
+
>{/if}
|
|
891
|
+
</div>
|
|
892
|
+
</svelte:fragment>
|
|
893
|
+
<svelte:fragment slot="action">
|
|
894
|
+
<div class="flex flex-row items-center text-tertiary text-2xs gap-2">
|
|
895
|
+
defaults
|
|
896
|
+
<Dropdown
|
|
897
|
+
items={[
|
|
898
|
+
{
|
|
899
|
+
displayName: `Override future schedules only`,
|
|
900
|
+
action: () => saveAsDefaultSuccessHandler(false)
|
|
901
|
+
},
|
|
902
|
+
{
|
|
903
|
+
displayName: 'Override all existing',
|
|
904
|
+
type: 'delete',
|
|
905
|
+
action: () => saveAsDefaultSuccessHandler(true)
|
|
906
|
+
}
|
|
907
|
+
]}
|
|
908
|
+
>
|
|
909
|
+
<svelte:fragment>
|
|
910
|
+
<Save size={12} class="mr-1" />
|
|
911
|
+
Set as default
|
|
912
|
+
</svelte:fragment>
|
|
913
|
+
</Dropdown>
|
|
914
|
+
</div>
|
|
915
|
+
</svelte:fragment>
|
|
916
|
+
<ErrorOrRecoveryHandler
|
|
917
|
+
isEditable={can_write && !emptyString($enterpriseLicense)}
|
|
918
|
+
errorOrRecovery="success"
|
|
919
|
+
bind:handlerSelected={successHandlerSelected}
|
|
920
|
+
bind:handlerPath={successHandlerPath}
|
|
921
|
+
customInitialScriptPath={successHandlerCustomInitialPath}
|
|
922
|
+
slackToggleText="Alert channel when successful"
|
|
923
|
+
customScriptTemplate="/scripts/add?hub=hub%2F9071%2Fwindmill%2Fschedule_success_handler_template"
|
|
924
|
+
bind:customHandlerKind={successHandlerItemKind}
|
|
925
|
+
bind:handlerExtraArgs={successHandlerExtraArgs}
|
|
926
|
+
>
|
|
927
|
+
<svelte:fragment slot="custom-tab-tooltip">
|
|
928
|
+
<Tooltip>
|
|
929
|
+
<div class="flex gap-20 items-start mt-3">
|
|
930
|
+
<div class=" text-sm"
|
|
931
|
+
>The following args will be passed to the success handler:
|
|
932
|
+
<ul class="mt-1 ml-2">
|
|
933
|
+
<li><b>path</b>: The path of the script or flow that succeeded.</li>
|
|
934
|
+
<li><b>is_flow</b>: Whether the runnable is a flow.</li>
|
|
935
|
+
<li><b>schedule_path</b>: The path of the schedule.</li>
|
|
936
|
+
<li><b>success_result</b>: The result of the successful job</li>
|
|
937
|
+
<li
|
|
938
|
+
><b>success_started_at</b>: The start datetime of the successful job</li
|
|
939
|
+
>
|
|
940
|
+
</ul>
|
|
941
|
+
</div>
|
|
942
|
+
</div>
|
|
943
|
+
</Tooltip>
|
|
944
|
+
</svelte:fragment>
|
|
945
|
+
</ErrorOrRecoveryHandler>
|
|
946
|
+
</Section>
|
|
804
947
|
{:else if optionTabSelected === 'retries'}
|
|
805
948
|
<Section label="Retries">
|
|
806
949
|
<svelte:fragment slot="header">
|
|
@@ -13,7 +13,6 @@ import { createEventDispatcher } from 'svelte';
|
|
|
13
13
|
import LightweightArgInput from './LightweightArgInput.svelte';
|
|
14
14
|
import { deepEqual } from 'fast-equals';
|
|
15
15
|
import { dragHandleZone } from '@windmill-labs/svelte-dnd-action';
|
|
16
|
-
import { flip } from 'svelte/animate';
|
|
17
16
|
export let schema;
|
|
18
17
|
export let schemaSkippedValues = [];
|
|
19
18
|
export let schemaFieldTooltip = {};
|
|
@@ -125,7 +124,7 @@ $: fields = items ?? keys.map((x) => ({ id: x, value: x }));
|
|
|
125
124
|
{#if keys.length > 0}
|
|
126
125
|
{#each fields as item, i (item.id)}
|
|
127
126
|
{@const argName = item.value}
|
|
128
|
-
<div
|
|
127
|
+
<div>
|
|
129
128
|
<!-- svelte-ignore a11y-click-events-have-key-events -->
|
|
130
129
|
{#if !schemaSkippedValues.includes(argName) && Object.keys(schema?.properties ?? {}).includes(argName)}
|
|
131
130
|
<!-- svelte-ignore a11y-no-static-element-interactions -->
|
|
@@ -36,18 +36,36 @@ const scripts = {
|
|
|
36
36
|
},
|
|
37
37
|
s3: {
|
|
38
38
|
code: `
|
|
39
|
-
import
|
|
39
|
+
import * as wmill from "windmill-client"
|
|
40
40
|
|
|
41
41
|
type S3 = object
|
|
42
42
|
|
|
43
43
|
export async function main(s3: S3) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
return fetch(process.env["BASE_URL"] + '/api/settings/test_object_storage_config', {
|
|
45
|
+
method: 'POST',
|
|
46
|
+
headers: {
|
|
47
|
+
'Content-Type': 'application/json',
|
|
48
|
+
Authorization: 'Bearer ' + process.env["WM_TOKEN"],
|
|
49
|
+
},
|
|
50
|
+
body: JSON.stringify({
|
|
51
|
+
type: "S3",
|
|
52
|
+
bucket: s3.bucket,
|
|
53
|
+
endpoint: s3.endPoint,
|
|
54
|
+
port: s3.port,
|
|
55
|
+
allow_http: !s3.useSSL,
|
|
56
|
+
access_key: s3.accessKey,
|
|
57
|
+
secret_key: s3.secretKey,
|
|
58
|
+
path_style: s3.pathStyle,
|
|
59
|
+
}),
|
|
60
|
+
}).then(async (res) => {
|
|
61
|
+
if (!res.ok) {
|
|
62
|
+
throw new Error(await res.text())
|
|
63
|
+
}
|
|
64
|
+
return res.text()
|
|
65
|
+
})
|
|
48
66
|
}
|
|
49
67
|
`,
|
|
50
|
-
lang: '
|
|
68
|
+
lang: 'bun',
|
|
51
69
|
argName: 's3'
|
|
52
70
|
},
|
|
53
71
|
graphql: {
|
|
@@ -68,6 +68,7 @@ export async function runFlowByPath(path, args) {
|
|
|
68
68
|
}
|
|
69
69
|
export async function getLogs() {
|
|
70
70
|
if (job) {
|
|
71
|
+
console.log('getLogs');
|
|
71
72
|
const getUpdate = await JobService.getJobUpdates({
|
|
72
73
|
workspace: workspace,
|
|
73
74
|
id: job.id,
|
|
@@ -135,6 +136,7 @@ async function loadTestJob(id) {
|
|
|
135
136
|
try {
|
|
136
137
|
if (job && `running` in job) {
|
|
137
138
|
const offset = logOffset == 0 ? (job.logs?.length ? job.logs?.length + 1 : 0) : logOffset;
|
|
139
|
+
console.log('getLogs');
|
|
138
140
|
let previewJobUpdates = await JobService.getJobUpdates({
|
|
139
141
|
workspace: workspace,
|
|
140
142
|
id,
|
|
@@ -25,6 +25,7 @@ function changeOrg(org) {
|
|
|
25
25
|
</script>
|
|
26
26
|
|
|
27
27
|
<div class="flex flex-col gap-1">
|
|
28
|
+
<!-- svelte-ignore a11y-label-has-associated-control -->
|
|
28
29
|
<label class="text-sm font-medium text-primary flex gap-4 items-center"
|
|
29
30
|
><div class="w-[120px]"><IconedResourceType name={'zitadel'} after={true} /></div><Toggle
|
|
30
31
|
checked={enabled}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SvelteComponent } from "svelte";
|
|
2
2
|
import type { AppInput } from '../../../inputType';
|
|
3
|
-
import type { ComponentCustomCSS,
|
|
3
|
+
import type { ComponentCustomCSS, RichConfigurations } from '../../../types';
|
|
4
4
|
import { type TableAction } from '../../../editor/component';
|
|
5
5
|
import 'ag-grid-community/styles/ag-grid.css';
|
|
6
6
|
import './theme/windmill-theme.css';
|
|
@@ -13,7 +13,6 @@ declare const __propDef: {
|
|
|
13
13
|
render: boolean;
|
|
14
14
|
customCss?: ComponentCustomCSS<'aggridinfinitecomponent'> | undefined;
|
|
15
15
|
actions?: TableAction[] | undefined;
|
|
16
|
-
actionsOrder?: RichConfiguration | undefined;
|
|
17
16
|
};
|
|
18
17
|
events: {
|
|
19
18
|
[evt: string]: CustomEvent<any>;
|
|
@@ -13,7 +13,6 @@ export let initializing = undefined;
|
|
|
13
13
|
export let render;
|
|
14
14
|
export let customCss = undefined;
|
|
15
15
|
export let actions = [];
|
|
16
|
-
export let actionsOrder = undefined;
|
|
17
16
|
let loaded = false;
|
|
18
17
|
async function load() {
|
|
19
18
|
await import('ag-grid-enterprise');
|
|
@@ -33,7 +32,6 @@ load();
|
|
|
33
32
|
{render}
|
|
34
33
|
{customCss}
|
|
35
34
|
{actions}
|
|
36
|
-
{actionsOrder}
|
|
37
35
|
/>
|
|
38
36
|
{:else}
|
|
39
37
|
<Loader2 class="animate-spin" />
|
package/package/components/apps/components/display/table/AppAggridInfiniteTableEe.svelte.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SvelteComponent } from "svelte";
|
|
2
2
|
import type { AppInput } from '../../../inputType';
|
|
3
|
-
import type { ComponentCustomCSS,
|
|
3
|
+
import type { ComponentCustomCSS, RichConfigurations } from '../../../types';
|
|
4
4
|
import 'ag-grid-community/styles/ag-grid.css';
|
|
5
5
|
import 'ag-grid-community/styles/ag-theme-alpine.css';
|
|
6
6
|
import type { TableAction } from '../../../editor/component';
|
|
@@ -14,7 +14,6 @@ declare const __propDef: {
|
|
|
14
14
|
render: boolean;
|
|
15
15
|
customCss?: ComponentCustomCSS<'aggridinfinitecomponentee'> | undefined;
|
|
16
16
|
actions?: TableAction[] | undefined;
|
|
17
|
-
actionsOrder?: RichConfiguration | undefined;
|
|
18
17
|
};
|
|
19
18
|
events: {
|
|
20
19
|
[evt: string]: CustomEvent<any>;
|
|
@@ -402,6 +402,7 @@ let loading = false;
|
|
|
402
402
|
let refreshCount = 0;
|
|
403
403
|
let footerRenderCount = 0;
|
|
404
404
|
let computedOrder = undefined;
|
|
405
|
+
let footerHeight = 0;
|
|
405
406
|
</script>
|
|
406
407
|
|
|
407
408
|
{#if actionsOrder}
|
|
@@ -458,7 +459,7 @@ let computedOrder = undefined;
|
|
|
458
459
|
on:pointerdown|stopPropagation={() => {
|
|
459
460
|
$selectedComponent = [id]
|
|
460
461
|
}}
|
|
461
|
-
style:height="{clientHeight}px"
|
|
462
|
+
style:height="{clientHeight - (resolvedConfig.footer ? footerHeight : 0)}px"
|
|
462
463
|
style:width="{clientWidth}px"
|
|
463
464
|
class="ag-theme-alpine relative"
|
|
464
465
|
class:ag-theme-alpine-dark={$darkMode}
|
|
@@ -490,7 +491,10 @@ let computedOrder = undefined;
|
|
|
490
491
|
</div>
|
|
491
492
|
{#if resolvedConfig.footer}
|
|
492
493
|
{#key footerRenderCount}
|
|
493
|
-
<div
|
|
494
|
+
<div
|
|
495
|
+
class="flex gap-1 w-full justify-between items-center text-sm text-secondary/80 p-2"
|
|
496
|
+
bind:clientHeight={footerHeight}
|
|
497
|
+
>
|
|
494
498
|
<div>
|
|
495
499
|
<Popover>
|
|
496
500
|
<svelte:fragment slot="text">Download</svelte:fragment>
|