windmill-components 1.389.3 → 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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export const settings = {
|
|
2
2
|
Core: [
|
|
3
3
|
{
|
|
4
|
-
label: 'Base
|
|
4
|
+
label: 'Base url',
|
|
5
5
|
description: 'Public base url of the instance',
|
|
6
6
|
key: 'base_url',
|
|
7
7
|
fieldType: 'text',
|
|
@@ -24,7 +24,7 @@ export const settings = {
|
|
|
24
24
|
placeholder: 'mail.windmill.com'
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
|
-
label: 'Request
|
|
27
|
+
label: 'Request size limit in MB',
|
|
28
28
|
description: 'Maximum size of HTTP requests in MB.',
|
|
29
29
|
cloudonly: true,
|
|
30
30
|
key: 'request_size_limit_mb',
|
|
@@ -41,7 +41,7 @@ export const settings = {
|
|
|
41
41
|
cloudonly: false
|
|
42
42
|
},
|
|
43
43
|
{
|
|
44
|
-
label: 'Max
|
|
44
|
+
label: 'Max timeout for sync endpoints',
|
|
45
45
|
key: 'timeout_wait_result',
|
|
46
46
|
cloudonly: true,
|
|
47
47
|
fieldType: 'seconds',
|
|
@@ -49,8 +49,8 @@ export const settings = {
|
|
|
49
49
|
storage: 'config'
|
|
50
50
|
},
|
|
51
51
|
{
|
|
52
|
-
label: 'License
|
|
53
|
-
description: 'License
|
|
52
|
+
label: 'License key',
|
|
53
|
+
description: 'License key required to use the EE (switch image for windmill-ee)',
|
|
54
54
|
key: 'license_key',
|
|
55
55
|
fieldType: 'license_key',
|
|
56
56
|
placeholder: 'only needed to prepare upgrade to EE',
|
|
@@ -65,7 +65,7 @@ export const settings = {
|
|
|
65
65
|
ee_only: 'This is only relevant for EE'
|
|
66
66
|
},
|
|
67
67
|
{
|
|
68
|
-
label: 'Retention
|
|
68
|
+
label: 'Retention period in secs',
|
|
69
69
|
key: 'retention_period_secs',
|
|
70
70
|
description: 'How long to keep the jobs data in the database (max 30 days on CE)',
|
|
71
71
|
fieldType: 'seconds',
|
|
@@ -76,14 +76,14 @@ export const settings = {
|
|
|
76
76
|
},
|
|
77
77
|
{
|
|
78
78
|
label: 'Expose metrics',
|
|
79
|
-
description: 'Expose
|
|
79
|
+
description: 'Expose Prometheus metrics for workers and servers on port 8001 at /metrics',
|
|
80
80
|
key: 'expose_metrics',
|
|
81
81
|
fieldType: 'boolean',
|
|
82
82
|
storage: 'setting',
|
|
83
83
|
ee_only: ''
|
|
84
84
|
},
|
|
85
85
|
{
|
|
86
|
-
label: 'S3/Azure for Python/Go
|
|
86
|
+
label: 'S3/Azure for Python/Go cache & large logs',
|
|
87
87
|
description: 'Bucket to store large logs and global cache for Python and Go.',
|
|
88
88
|
key: 'object_store_cache_config',
|
|
89
89
|
fieldType: 'object_store_config',
|
|
@@ -91,8 +91,8 @@ export const settings = {
|
|
|
91
91
|
ee_only: ''
|
|
92
92
|
},
|
|
93
93
|
{
|
|
94
|
-
label: 'Critical
|
|
95
|
-
description: 'Channels to send critical alerts to. SMTP must be configured for the email channel.',
|
|
94
|
+
label: 'Critical alert channels',
|
|
95
|
+
description: 'Channels to send critical alerts to. SMTP must be configured for the email channel. A Slack workspace must be connected to the instance for the Slack channel.',
|
|
96
96
|
key: 'critical_error_channels',
|
|
97
97
|
fieldType: 'critical_error_channels',
|
|
98
98
|
storage: 'setting',
|
|
@@ -107,8 +107,8 @@ export const settings = {
|
|
|
107
107
|
ee_only: ''
|
|
108
108
|
},
|
|
109
109
|
{
|
|
110
|
-
label: 'Private
|
|
111
|
-
description: 'Base url of your private
|
|
110
|
+
label: 'Private Hub base url',
|
|
111
|
+
description: 'Base url of your private Hub instance, without trailing slash',
|
|
112
112
|
placeholder: 'https://hub.company.com',
|
|
113
113
|
key: 'hub_base_url',
|
|
114
114
|
fieldType: 'text',
|
|
@@ -197,9 +197,18 @@ export const settings = {
|
|
|
197
197
|
storage: 'config'
|
|
198
198
|
}
|
|
199
199
|
],
|
|
200
|
+
Slack: [
|
|
201
|
+
{
|
|
202
|
+
label: 'Slack',
|
|
203
|
+
key: 'slack',
|
|
204
|
+
fieldType: 'slack_connect',
|
|
205
|
+
storage: 'setting',
|
|
206
|
+
ee_only: ''
|
|
207
|
+
}
|
|
208
|
+
],
|
|
200
209
|
'SCIM/SAML': [
|
|
201
210
|
{
|
|
202
|
-
label: 'SCIM
|
|
211
|
+
label: 'SCIM token',
|
|
203
212
|
description: 'Token used to authenticate requests from the IdP',
|
|
204
213
|
key: 'scim_token',
|
|
205
214
|
fieldType: 'text',
|
|
@@ -219,14 +228,14 @@ export const settings = {
|
|
|
219
228
|
],
|
|
220
229
|
Debug: [
|
|
221
230
|
{
|
|
222
|
-
label: 'Keep
|
|
231
|
+
label: 'Keep job directories',
|
|
223
232
|
key: 'keep_job_dir',
|
|
224
233
|
fieldType: 'boolean',
|
|
225
234
|
tooltip: 'Keep Job directories after execution at /tmp/windmill/<worker>/<job_id>',
|
|
226
235
|
storage: 'setting'
|
|
227
236
|
},
|
|
228
237
|
{
|
|
229
|
-
label: 'Expose
|
|
238
|
+
label: 'Expose debug metrics',
|
|
230
239
|
key: 'expose_debug_metrics',
|
|
231
240
|
fieldType: 'boolean',
|
|
232
241
|
tooltip: 'Expose additional metrics (require metrics to be enabled)',
|
|
@@ -105,7 +105,19 @@ function computeJobKinds(jobKindsCat) {
|
|
|
105
105
|
}
|
|
106
106
|
}
|
|
107
107
|
let loadingFetch = false;
|
|
108
|
-
async function
|
|
108
|
+
export async function loadExtraJobs() {
|
|
109
|
+
if (jobs && jobs.length > 0) {
|
|
110
|
+
const lastJob = jobs[jobs.length - 1];
|
|
111
|
+
// const minCreated = lastJob?.created_at
|
|
112
|
+
const minCreated = new Date(new Date(lastJob.created_at).getTime() - 1).toISOString();
|
|
113
|
+
let olderJobs = await fetchJobs(undefined, minTs, undefined, minCreated);
|
|
114
|
+
jobs = jobs.concat(olderJobs);
|
|
115
|
+
computeCompletedJobs();
|
|
116
|
+
return olderJobs?.length < 1000;
|
|
117
|
+
}
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
async function fetchJobs(startedBefore, startedAfter, startedAfterCompletedJobs, createdBefore) {
|
|
109
121
|
loadingFetch = true;
|
|
110
122
|
try {
|
|
111
123
|
let scriptPathStart = folder === null || folder === '' ? undefined : `f/${folder}/`;
|
|
@@ -117,6 +129,7 @@ async function fetchJobs(startedBefore, startedAfter, startedAfterCompletedJobs)
|
|
|
117
129
|
createdOrStartedAfterCompletedJobs: startedAfterCompletedJobs,
|
|
118
130
|
schedulePath,
|
|
119
131
|
scriptPathExact,
|
|
132
|
+
createdBefore,
|
|
120
133
|
createdBy: user === null || user === '' ? undefined : user,
|
|
121
134
|
scriptPathStart: scriptPathStart,
|
|
122
135
|
jobKinds,
|
|
@@ -128,9 +141,7 @@ async function fetchJobs(startedBefore, startedAfter, startedAfterCompletedJobs)
|
|
|
128
141
|
: undefined,
|
|
129
142
|
isSkipped: isSkipped ? undefined : false,
|
|
130
143
|
// isFlowStep: jobKindsCat != 'all' ? false : undefined,
|
|
131
|
-
hasNullParent:
|
|
132
|
-
? true
|
|
133
|
-
: undefined,
|
|
144
|
+
hasNullParent: jobKindsCat != 'all' ? true : undefined,
|
|
134
145
|
label: label === null || label === '' ? undefined : label,
|
|
135
146
|
tag: tag === null || tag === '' ? undefined : tag,
|
|
136
147
|
isNotSchedule: showSchedules == false ? true : undefined,
|
|
@@ -229,7 +240,7 @@ async function loadJobsIntern(shouldGetCount) {
|
|
|
229
240
|
// lookback won't be needed anymore (just filter ended_at > minTs instead
|
|
230
241
|
const extendedMinTs = subtractDaysFromDateString(minTs, lookback);
|
|
231
242
|
if (concurrencyKey == null || concurrencyKey === '') {
|
|
232
|
-
let newJobs = await fetchJobs(maxTs, undefined, extendedMinTs);
|
|
243
|
+
let newJobs = await fetchJobs(maxTs, undefined, extendedMinTs, undefined);
|
|
233
244
|
extendedJobs = { jobs: newJobs, obscured_jobs: [] };
|
|
234
245
|
// Filter on minTs here and not in the backend
|
|
235
246
|
// to get enough data for the concurrency graph
|
|
@@ -328,7 +339,7 @@ async function syncer() {
|
|
|
328
339
|
loading = true;
|
|
329
340
|
let newJobs;
|
|
330
341
|
if (concurrencyKey == null || concurrencyKey === '') {
|
|
331
|
-
newJobs = await fetchJobs(maxTs, minTs ?? ts, undefined);
|
|
342
|
+
newJobs = await fetchJobs(maxTs, minTs ?? ts, undefined, undefined);
|
|
332
343
|
}
|
|
333
344
|
else {
|
|
334
345
|
// Obscured jobs have no ids, so we have to do the full request
|
|
@@ -39,6 +39,7 @@ declare const __propDef: {
|
|
|
39
39
|
} | undefined) | undefined;
|
|
40
40
|
lookback?: number | undefined;
|
|
41
41
|
perPage?: number | undefined;
|
|
42
|
+
loadExtraJobs?: (() => Promise<boolean>) | undefined;
|
|
42
43
|
loadJobs?: ((nMinTs: string | undefined, nMaxTs: string | undefined, reset: boolean, shouldGetCount?: boolean) => Promise<void>) | undefined;
|
|
43
44
|
};
|
|
44
45
|
events: {
|
|
@@ -50,6 +51,7 @@ export type JobLoaderProps = typeof __propDef.props;
|
|
|
50
51
|
export type JobLoaderEvents = typeof __propDef.events;
|
|
51
52
|
export type JobLoaderSlots = typeof __propDef.slots;
|
|
52
53
|
export default class JobLoader extends SvelteComponent<JobLoaderProps, JobLoaderEvents, JobLoaderSlots> {
|
|
54
|
+
get loadExtraJobs(): () => Promise<boolean>;
|
|
53
55
|
get loadJobs(): (nMinTs: string | undefined, nMaxTs: string | undefined, reset: boolean, shouldGetCount?: boolean | undefined) => Promise<void>;
|
|
54
56
|
}
|
|
55
57
|
export {};
|
|
@@ -193,14 +193,14 @@ function isJobCancelable(j) {
|
|
|
193
193
|
{/if}
|
|
194
194
|
</div>
|
|
195
195
|
{#if containsLabel}
|
|
196
|
-
<div class="w-3/12 flex justify-start">
|
|
196
|
+
<div class="w-3/12 flex justify-start px-0.5">
|
|
197
197
|
{#if job && job?.['labels']}
|
|
198
198
|
<div class="flex flex-row items-center gap-1 overflow-x-auto">
|
|
199
199
|
{#if Array.isArray(job?.['labels'])}
|
|
200
200
|
{#each job?.['labels'] as label}
|
|
201
201
|
<Button
|
|
202
202
|
variant="border"
|
|
203
|
-
size="
|
|
203
|
+
size="xs3"
|
|
204
204
|
btnClasses={twMerge(
|
|
205
205
|
activeLabel == label ? 'bg-blue-50 dark:bg-blue-900/50' : '',
|
|
206
206
|
'!text-2xs !font-normal truncate max-w-28'
|
|
@@ -209,9 +209,9 @@ function isJobCancelable(j) {
|
|
|
209
209
|
on:click={() => {
|
|
210
210
|
dispatch('filterByLabel', label)
|
|
211
211
|
}}
|
|
212
|
+
endIcon={{ icon: ListFilter }}
|
|
212
213
|
>
|
|
213
214
|
{label}
|
|
214
|
-
<ListFilter size={10} />
|
|
215
215
|
</Button>
|
|
216
216
|
{/each}
|
|
217
217
|
{/if}
|
|
@@ -229,7 +229,7 @@ function isJobCancelable(j) {
|
|
|
229
229
|
btnClasses="font-normal"
|
|
230
230
|
on:click={() => scheduleEditor?.openEdit(job.schedule_path ?? '', job.job_kind == 'flow')}
|
|
231
231
|
>
|
|
232
|
-
<div class="truncate text-ellipsis text-left">
|
|
232
|
+
<div class="truncate text-ellipsis text-left" title={job.schedule_path}>
|
|
233
233
|
{truncateRev(job.schedule_path, 20)}
|
|
234
234
|
</div>
|
|
235
235
|
</Button>
|
|
@@ -245,15 +245,15 @@ function isJobCancelable(j) {
|
|
|
245
245
|
</div>
|
|
246
246
|
{:else}
|
|
247
247
|
<div class="flex flex-row gap-1 items-center">
|
|
248
|
-
<div class="text-xs">
|
|
249
|
-
{job.created_by}
|
|
248
|
+
<div class="text-xs truncate text-ellipsis text-left" title={job.created_by}>
|
|
249
|
+
{truncateRev(job.created_by ?? '', 20)}
|
|
250
250
|
</div>
|
|
251
251
|
{#if !isExternal}
|
|
252
252
|
<Button
|
|
253
253
|
size="xs2"
|
|
254
254
|
color="light"
|
|
255
255
|
on:click={() => {
|
|
256
|
-
dispatch('filterByUser', job.created_by)
|
|
256
|
+
dispatch('filterByUser', job.created_by ?? '')
|
|
257
257
|
}}
|
|
258
258
|
>
|
|
259
259
|
<ListFilter size={10} />
|
|
@@ -249,6 +249,7 @@ let tagTimeout = undefined;
|
|
|
249
249
|
></span
|
|
250
250
|
>
|
|
251
251
|
|
|
252
|
+
<!-- svelte-ignore a11y-autofocus -->
|
|
252
253
|
<input
|
|
253
254
|
autofocus
|
|
254
255
|
type="text"
|
|
@@ -290,6 +291,7 @@ let tagTimeout = undefined;
|
|
|
290
291
|
</Tooltip></span
|
|
291
292
|
>
|
|
292
293
|
|
|
294
|
+
<!-- svelte-ignore a11y-autofocus -->
|
|
293
295
|
<input
|
|
294
296
|
autofocus
|
|
295
297
|
type="text"
|
|
@@ -323,6 +325,7 @@ let tagTimeout = undefined;
|
|
|
323
325
|
{/if}
|
|
324
326
|
<span class="text-xs absolute -top-4"> Tag </span>
|
|
325
327
|
|
|
328
|
+
<!-- svelte-ignore a11y-autofocus -->
|
|
326
329
|
<input
|
|
327
330
|
autofocus
|
|
328
331
|
type="text"
|
|
@@ -356,6 +359,7 @@ let tagTimeout = undefined;
|
|
|
356
359
|
{/if}
|
|
357
360
|
<span class="text-xs absolute -top-4"> Schedule Path </span>
|
|
358
361
|
|
|
362
|
+
<!-- svelte-ignore a11y-autofocus -->
|
|
359
363
|
<input
|
|
360
364
|
autofocus
|
|
361
365
|
type="text"
|
|
@@ -470,7 +474,7 @@ let tagTimeout = undefined;
|
|
|
470
474
|
<CloseButton on:close={() => close(null)} />
|
|
471
475
|
</svelte:fragment>
|
|
472
476
|
|
|
473
|
-
<div class="w-
|
|
477
|
+
<div class="w-102 flex flex-col gap-4">
|
|
474
478
|
{#if mobile}
|
|
475
479
|
<Label label="Filter by">
|
|
476
480
|
<ToggleButtonGroup
|
|
@@ -603,6 +607,7 @@ let tagTimeout = undefined;
|
|
|
603
607
|
</button>
|
|
604
608
|
{/if}
|
|
605
609
|
|
|
610
|
+
<!-- svelte-ignore a11y-autofocus -->
|
|
606
611
|
<input
|
|
607
612
|
autofocus
|
|
608
613
|
type="text"
|
|
@@ -637,6 +642,7 @@ let tagTimeout = undefined;
|
|
|
637
642
|
</button>
|
|
638
643
|
{/if}
|
|
639
644
|
|
|
645
|
+
<!-- svelte-ignore a11y-autofocus -->
|
|
640
646
|
<input
|
|
641
647
|
autofocus
|
|
642
648
|
type="text"
|
|
@@ -671,6 +677,7 @@ let tagTimeout = undefined;
|
|
|
671
677
|
</button>
|
|
672
678
|
{/if}
|
|
673
679
|
|
|
680
|
+
<!-- svelte-ignore a11y-autofocus -->
|
|
674
681
|
<input
|
|
675
682
|
autofocus
|
|
676
683
|
type="text"
|
|
@@ -16,6 +16,7 @@ export let selectedIds = [];
|
|
|
16
16
|
export let selectedWorkspace = undefined;
|
|
17
17
|
export let activeLabel = null;
|
|
18
18
|
// const loadMoreQuantity: number = 100
|
|
19
|
+
export let lastFetchWentToEnd = false;
|
|
19
20
|
function getTime(job) {
|
|
20
21
|
return job['started_at'] ?? job['scheduled_for'] ?? job['created_at'];
|
|
21
22
|
}
|
|
@@ -123,9 +124,12 @@ function selectAll() {
|
|
|
123
124
|
let cancelableJobCount = 0;
|
|
124
125
|
$: isSelectingJobsToCancel && (allSelected = selectedIds.length === cancelableJobCount);
|
|
125
126
|
$: isSelectingJobsToCancel && (cancelableJobCount = jobs?.filter(isJobCancelable).length ?? 0);
|
|
126
|
-
function jobCountString(jobCount) {
|
|
127
|
+
function jobCountString(jobCount, lastFetchWentToEnd) {
|
|
128
|
+
if (jobCount === undefined) {
|
|
129
|
+
return '';
|
|
130
|
+
}
|
|
127
131
|
const jc = jobCount;
|
|
128
|
-
const isTruncated = jc >= 1000;
|
|
132
|
+
const isTruncated = jc >= 1000 && !lastFetchWentToEnd;
|
|
129
133
|
return `${jc}${isTruncated ? '+' : ''} job${jc != 1 ? 's' : ''}`;
|
|
130
134
|
}
|
|
131
135
|
function computeHeight() {
|
|
@@ -166,14 +170,14 @@ const dispatch = createEventDispatcher();
|
|
|
166
170
|
{#if showExternalJobs && externalJobs.length > 0}
|
|
167
171
|
<div class="w-1/12 text-2xs">
|
|
168
172
|
<div class="flex flex-row">
|
|
169
|
-
{jobs
|
|
170
|
-
|
|
171
|
-
|
|
173
|
+
{jobs
|
|
174
|
+
? jobCountString(jobs.length + externalJobs.length, lastFetchWentToEnd)
|
|
175
|
+
: ''}<Tooltip>{externalJobs.length} jobs obscured</Tooltip>
|
|
172
176
|
</div>
|
|
173
177
|
</div>
|
|
174
178
|
{:else if $workspaceStore !== 'admins' && omittedObscuredJobs}
|
|
175
179
|
<div class="w-1/12 text-2xs flex flex-row">
|
|
176
|
-
{jobs
|
|
180
|
+
{jobs ? jobCountString(jobs.length, lastFetchWentToEnd) : ''}
|
|
177
181
|
<Popover>
|
|
178
182
|
<AlertTriangle size={16} class="ml-0.5 text-yellow-500" />
|
|
179
183
|
<svelte:fragment slot="text">
|
|
@@ -183,9 +187,11 @@ const dispatch = createEventDispatcher();
|
|
|
183
187
|
</Popover>
|
|
184
188
|
</div>
|
|
185
189
|
{:else}
|
|
186
|
-
<div class="w-1/12 text-2xs"
|
|
190
|
+
<div class="w-1/12 text-2xs"
|
|
191
|
+
>{jobs ? jobCountString(jobs.length, lastFetchWentToEnd) : ''}</div
|
|
192
|
+
>
|
|
187
193
|
{/if}
|
|
188
|
-
<div class="w-4/12 text-xs font-semibold"
|
|
194
|
+
<div class="w-4/12 text-xs font-semibold" />
|
|
189
195
|
<div class="w-4/12 text-xs font-semibold">Path</div>
|
|
190
196
|
{#if containsLabel}
|
|
191
197
|
<div class="w-3/12 text-xs font-semibold">Label</div>
|
|
@@ -262,6 +268,22 @@ const dispatch = createEventDispatcher();
|
|
|
262
268
|
</div>
|
|
263
269
|
{/if}
|
|
264
270
|
</div>
|
|
271
|
+
<div slot="footer"
|
|
272
|
+
>{#if !lastFetchWentToEnd && jobs && jobs.length >= 1000}
|
|
273
|
+
<button
|
|
274
|
+
class="text-xs text-blue-600 text-center w-full pb-2"
|
|
275
|
+
on:click={() => {
|
|
276
|
+
dispatch('loadExtra')
|
|
277
|
+
}}>Load next 1000 jobs</button
|
|
278
|
+
>
|
|
279
|
+
{/if}</div
|
|
280
|
+
>
|
|
265
281
|
</VirtualList>
|
|
266
282
|
{/if}
|
|
267
283
|
</div>
|
|
284
|
+
|
|
285
|
+
<style>
|
|
286
|
+
:global(.virtual-list-wrapper:hover::-webkit-scrollbar) {
|
|
287
|
+
width: 8px !important;
|
|
288
|
+
height: 8px !important;
|
|
289
|
+
}</style>
|
|
@@ -10,6 +10,7 @@ declare const __propDef: {
|
|
|
10
10
|
selectedIds?: string[] | undefined;
|
|
11
11
|
selectedWorkspace?: string | undefined;
|
|
12
12
|
activeLabel?: string | null | undefined;
|
|
13
|
+
lastFetchWentToEnd?: boolean | undefined;
|
|
13
14
|
};
|
|
14
15
|
events: {
|
|
15
16
|
focus: FocusEvent;
|
|
@@ -20,6 +21,7 @@ declare const __propDef: {
|
|
|
20
21
|
filterByConcurrencyKey: CustomEvent<any>;
|
|
21
22
|
filterBySchedule: CustomEvent<any>;
|
|
22
23
|
select: CustomEvent<any>;
|
|
24
|
+
loadExtra: CustomEvent<any>;
|
|
23
25
|
} & {
|
|
24
26
|
[evt: string]: CustomEvent<any>;
|
|
25
27
|
};
|
|
@@ -290,7 +290,7 @@ $: showInvites = invites?.length > 0 || (auto_invite_domain != undefined && !aut
|
|
|
290
290
|
{#if filteredUsers}
|
|
291
291
|
{#each filteredUsers.slice(0, nbDisplayed) as { email, username, is_admin, operator, disabled } (email)}
|
|
292
292
|
<tr class="!hover:bg-surface-hover">
|
|
293
|
-
<Cell first>{truncate(email, 20)}</Cell>
|
|
293
|
+
<Cell first><a href="mailto:{email}">{truncate(email, 20)}</a></Cell>
|
|
294
294
|
<Cell>{truncate(username, 30)}</Cell>
|
|
295
295
|
<Cell
|
|
296
296
|
>{#if usage?.[email] != undefined}{usage?.[email]}{:else}<Loader2
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
<script>import { classNames } from '../../utils';
|
|
2
2
|
import { navigating, page } from '$app/stores';
|
|
3
3
|
import Popover from '../Popover.svelte';
|
|
4
|
+
import { base } from '$app/paths';
|
|
4
5
|
export let label;
|
|
5
6
|
export let href;
|
|
6
7
|
export let icon = undefined;
|
|
@@ -9,7 +10,7 @@ export let disabled = false;
|
|
|
9
10
|
export let lightMode = false;
|
|
10
11
|
let isSelected = false;
|
|
11
12
|
navigating.subscribe(() => {
|
|
12
|
-
if (href ===
|
|
13
|
+
if (href === `${base}/`) {
|
|
13
14
|
isSelected = $page.url.pathname === href;
|
|
14
15
|
}
|
|
15
16
|
else {
|
|
@@ -26,10 +26,13 @@ async function toggleSwitchWorkspace(id) {
|
|
|
26
26
|
const isOnEditPage = editPages.some((editPage) => $page.route.id?.includes(editPage) ?? false);
|
|
27
27
|
if (!isOnEditPage) {
|
|
28
28
|
switchWorkspace(id);
|
|
29
|
+
if ($page.url.searchParams.get('workspace')) {
|
|
30
|
+
$page.url.searchParams.set('workspace', id);
|
|
31
|
+
}
|
|
29
32
|
}
|
|
30
33
|
else {
|
|
31
|
-
await goto('/');
|
|
32
34
|
switchWorkspace(id);
|
|
35
|
+
await goto('/');
|
|
33
36
|
}
|
|
34
37
|
}
|
|
35
38
|
</script>
|
|
@@ -1,4 +1,34 @@
|
|
|
1
1
|
const changelogs = [
|
|
2
|
+
{
|
|
3
|
+
label: 'Directly edit flow YAML',
|
|
4
|
+
href: 'https://www.windmill.dev/changelog/flow-yaml-editor',
|
|
5
|
+
date: '2024-09-02'
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
label: 'Critical alert channels',
|
|
9
|
+
href: 'https://www.windmill.dev/changelog/critical-alert-channels',
|
|
10
|
+
date: '2024-09-01'
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
label: 'See service logs directly in Windmill',
|
|
14
|
+
href: 'https://www.windmill.dev/changelog/service-logs',
|
|
15
|
+
date: '2024-09-01'
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
label: 'Vim support for Monaco/webeditor',
|
|
19
|
+
href: 'https://www.windmill.dev/changelog/vim-support',
|
|
20
|
+
date: '2024-08-28'
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
label: 'Hide / Show App Editor Panels',
|
|
24
|
+
href: 'https://www.windmill.dev/changelog/hide-show-app-panels',
|
|
25
|
+
date: '2024-08-26'
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
label: 'Email triggers',
|
|
29
|
+
href: 'https://www.windmill.dev/changelog/email-triggers',
|
|
30
|
+
date: '2024-08-06'
|
|
31
|
+
},
|
|
2
32
|
{
|
|
3
33
|
label: 'Continue on disapproval/timeout',
|
|
4
34
|
href: 'https://www.windmill.dev/changelog/continue-on-disapproval',
|
|
@@ -130,8 +130,8 @@ export function runTutorial(indexToInsertAt) {
|
|
|
130
130
|
}
|
|
131
131
|
|
|
132
132
|
$flowStateStore[newId] = emptyFlowModuleState()
|
|
133
|
-
|
|
134
|
-
|
|
133
|
+
let schema = $flowStateStore[newId].schema ?? { properties: {} }
|
|
134
|
+
schema.properties = {
|
|
135
135
|
x: {
|
|
136
136
|
type: 'string',
|
|
137
137
|
description: '',
|
|
@@ -1251,6 +1251,12 @@ export declare const $Schedule: {
|
|
|
1251
1251
|
readonly on_recovery_extra_args: {
|
|
1252
1252
|
readonly $ref: "#/components/schemas/ScriptArgs";
|
|
1253
1253
|
};
|
|
1254
|
+
readonly on_success: {
|
|
1255
|
+
readonly type: "string";
|
|
1256
|
+
};
|
|
1257
|
+
readonly on_success_extra_args: {
|
|
1258
|
+
readonly $ref: "#/components/schemas/ScriptArgs";
|
|
1259
|
+
};
|
|
1254
1260
|
readonly ws_error_handler_muted: {
|
|
1255
1261
|
readonly type: "boolean";
|
|
1256
1262
|
};
|
|
@@ -1345,6 +1351,12 @@ export declare const $NewSchedule: {
|
|
|
1345
1351
|
readonly on_recovery_extra_args: {
|
|
1346
1352
|
readonly $ref: "#/components/schemas/ScriptArgs";
|
|
1347
1353
|
};
|
|
1354
|
+
readonly on_success: {
|
|
1355
|
+
readonly type: "string";
|
|
1356
|
+
};
|
|
1357
|
+
readonly on_success_extra_args: {
|
|
1358
|
+
readonly $ref: "#/components/schemas/ScriptArgs";
|
|
1359
|
+
};
|
|
1348
1360
|
readonly ws_error_handler_muted: {
|
|
1349
1361
|
readonly type: "boolean";
|
|
1350
1362
|
};
|
|
@@ -1400,6 +1412,12 @@ export declare const $EditSchedule: {
|
|
|
1400
1412
|
readonly on_recovery_extra_args: {
|
|
1401
1413
|
readonly $ref: "#/components/schemas/ScriptArgs";
|
|
1402
1414
|
};
|
|
1415
|
+
readonly on_success: {
|
|
1416
|
+
readonly type: "string";
|
|
1417
|
+
};
|
|
1418
|
+
readonly on_success_extra_args: {
|
|
1419
|
+
readonly $ref: "#/components/schemas/ScriptArgs";
|
|
1420
|
+
};
|
|
1403
1421
|
readonly ws_error_handler_muted: {
|
|
1404
1422
|
readonly type: "boolean";
|
|
1405
1423
|
};
|
|
@@ -2762,6 +2780,9 @@ export declare const $PathScript: {
|
|
|
2762
2780
|
readonly type: "string";
|
|
2763
2781
|
readonly enum: readonly ["script"];
|
|
2764
2782
|
};
|
|
2783
|
+
readonly tag_override: {
|
|
2784
|
+
readonly type: "string";
|
|
2785
|
+
};
|
|
2765
2786
|
};
|
|
2766
2787
|
readonly required: readonly ["type", "path", "input_transforms"];
|
|
2767
2788
|
};
|
|
@@ -1281,6 +1281,12 @@ export const $Schedule = {
|
|
|
1281
1281
|
on_recovery_extra_args: {
|
|
1282
1282
|
'$ref': '#/components/schemas/ScriptArgs'
|
|
1283
1283
|
},
|
|
1284
|
+
on_success: {
|
|
1285
|
+
type: 'string'
|
|
1286
|
+
},
|
|
1287
|
+
on_success_extra_args: {
|
|
1288
|
+
'$ref': '#/components/schemas/ScriptArgs'
|
|
1289
|
+
},
|
|
1284
1290
|
ws_error_handler_muted: {
|
|
1285
1291
|
type: 'boolean'
|
|
1286
1292
|
},
|
|
@@ -1378,6 +1384,12 @@ export const $NewSchedule = {
|
|
|
1378
1384
|
on_recovery_extra_args: {
|
|
1379
1385
|
'$ref': '#/components/schemas/ScriptArgs'
|
|
1380
1386
|
},
|
|
1387
|
+
on_success: {
|
|
1388
|
+
type: 'string'
|
|
1389
|
+
},
|
|
1390
|
+
on_success_extra_args: {
|
|
1391
|
+
'$ref': '#/components/schemas/ScriptArgs'
|
|
1392
|
+
},
|
|
1381
1393
|
ws_error_handler_muted: {
|
|
1382
1394
|
type: 'boolean'
|
|
1383
1395
|
},
|
|
@@ -1433,6 +1445,12 @@ export const $EditSchedule = {
|
|
|
1433
1445
|
on_recovery_extra_args: {
|
|
1434
1446
|
'$ref': '#/components/schemas/ScriptArgs'
|
|
1435
1447
|
},
|
|
1448
|
+
on_success: {
|
|
1449
|
+
type: 'string'
|
|
1450
|
+
},
|
|
1451
|
+
on_success_extra_args: {
|
|
1452
|
+
'$ref': '#/components/schemas/ScriptArgs'
|
|
1453
|
+
},
|
|
1436
1454
|
ws_error_handler_muted: {
|
|
1437
1455
|
type: 'boolean'
|
|
1438
1456
|
},
|
|
@@ -2815,6 +2833,9 @@ export const $PathScript = {
|
|
|
2815
2833
|
type: {
|
|
2816
2834
|
type: 'string',
|
|
2817
2835
|
enum: ['script']
|
|
2836
|
+
},
|
|
2837
|
+
tag_override: {
|
|
2838
|
+
type: 'string'
|
|
2818
2839
|
}
|
|
2819
2840
|
},
|
|
2820
2841
|
required: ['type', 'path', 'input_transforms']
|