windmill-components 1.85.0 → 1.86.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/components/CenteredModal.svelte +9 -7
- package/components/CronInput.svelte +301 -64
- package/components/CronInput.svelte.d.ts +3 -3
- package/components/DisplayResult.svelte +2 -2
- package/components/Editor.svelte +97 -42
- package/components/Editor.svelte.d.ts +10 -4
- package/components/EditorBar.svelte +14 -9
- package/components/EditorBar.svelte.d.ts +1 -1
- package/components/FlowBuilder.svelte +73 -53
- package/components/FlowGraphViewer.svelte +2 -0
- package/components/FlowGraphViewer.svelte.d.ts +1 -0
- package/components/FlowPreviewContent.svelte +3 -2
- package/components/FlowViewer.svelte +1 -1
- package/components/InputTransformForm.svelte +75 -72
- package/components/LightweightArgInput.svelte +3 -0
- package/components/LightweightArgInput.svelte.d.ts +1 -0
- package/components/LightweightSchemaForm.svelte +1 -0
- package/components/LightweightSchemaForm.svelte.d.ts +2 -0
- package/components/ModulePreview.svelte +2 -2
- package/components/Path.svelte +15 -3
- package/components/Popover.svelte +7 -19
- package/components/ScheduleEditor.svelte +18 -8
- package/components/ScriptBuilder.svelte +201 -206
- package/components/ScriptBuilder.svelte.d.ts +2 -0
- package/components/ScriptEditor.svelte +38 -37
- package/components/ScriptEditor.svelte.d.ts +5 -1
- package/components/ScriptSchema.svelte +1 -20
- package/components/ScriptSchema.svelte.d.ts +0 -1
- package/components/SimpleEditor.svelte +8 -2
- package/components/SimpleEditor.svelte.d.ts +6 -0
- package/components/Star.svelte +2 -1
- package/components/TemplateEditor.svelte +16 -3
- package/components/TemplateEditor.svelte.d.ts +3 -0
- package/components/Toast.svelte +50 -0
- package/components/Toast.svelte.d.ts +18 -0
- package/components/apps/components/buttons/AppButton.svelte +2 -1
- package/components/apps/components/display/AppHtml.svelte +9 -6
- package/components/apps/components/display/AppIcon.svelte +3 -0
- package/components/apps/components/display/AppImage.svelte +3 -0
- package/components/apps/components/display/AppMap.svelte +3 -0
- package/components/apps/components/display/AppPdf.svelte +3 -0
- package/components/apps/components/display/AppText.svelte +143 -51
- package/components/apps/components/display/AppText.svelte.d.ts +4 -0
- package/components/apps/components/helpers/AlignWrapper.svelte +1 -20
- package/components/apps/components/helpers/HiddenComponent.svelte +12 -6
- package/components/apps/components/helpers/HiddenComponent.svelte.d.ts +2 -1
- package/components/apps/components/helpers/InitializeComponent.svelte +12 -0
- package/components/apps/components/helpers/InitializeComponent.svelte.d.ts +16 -0
- package/components/apps/components/helpers/InputValue.svelte +6 -0
- package/components/apps/components/helpers/NonRunnableComponent.svelte +3 -0
- package/components/apps/components/helpers/RunnableComponent.svelte +24 -6
- package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +2 -1
- package/components/apps/components/helpers/RunnableWrapper.svelte +8 -2
- package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -0
- package/components/apps/components/inputs/AppCheckbox.svelte +3 -0
- package/components/apps/components/inputs/AppDateInput.svelte +3 -0
- package/components/apps/components/inputs/AppFileInput.svelte +4 -0
- package/components/apps/components/inputs/AppMultiSelect.svelte +3 -0
- package/components/apps/components/inputs/AppNumberInput.svelte +3 -0
- package/components/apps/components/inputs/AppRangeInput.svelte +3 -0
- package/components/apps/components/inputs/AppSelect.svelte +3 -9
- package/components/apps/components/inputs/AppSliderInputs.svelte +2 -0
- package/components/apps/components/inputs/AppTextInput.svelte +3 -0
- package/components/apps/components/inputs/currency/AppCurrencyInput.svelte +3 -0
- package/components/apps/components/layout/AppContainer.svelte +3 -0
- package/components/apps/components/layout/AppDivider.svelte +3 -0
- package/components/apps/components/layout/AppDrawer.svelte +3 -0
- package/components/apps/components/layout/AppSplitpanes.svelte +3 -0
- package/components/apps/components/layout/AppTabs.svelte +3 -0
- package/components/apps/editor/AppEditor.svelte +29 -18
- package/components/apps/editor/AppEditorHeader.svelte +23 -15
- package/components/apps/editor/AppPreview.svelte +5 -3
- package/components/apps/editor/ComponentHeader.svelte +20 -1
- package/components/apps/editor/ComponentHeader.svelte.d.ts +3 -0
- package/components/apps/editor/GridEditor.svelte +2 -2
- package/components/apps/editor/RecomputeAllComponents.svelte +7 -4
- package/components/apps/editor/SettingsPanel.svelte +1 -0
- package/components/apps/editor/appUtils.js +12 -2
- package/components/apps/editor/component/Component.svelte +24 -2
- package/components/apps/editor/component/components.d.ts +39 -39
- package/components/apps/editor/componentsPanel/ComponentList.svelte +12 -26
- package/components/apps/editor/componentsPanel/CssSettings.svelte +1 -1
- package/components/apps/editor/componentsPanel/ListItem.svelte +2 -2
- package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +4 -3
- package/components/apps/editor/settingsPanel/ComponentInputTypeEditor.svelte +50 -37
- package/components/apps/editor/settingsPanel/ComponentPanel.svelte +3 -3
- package/components/apps/editor/settingsPanel/SelectedRunnable.svelte +14 -6
- package/components/apps/editor/settingsPanel/inputEditor/ConnectedInputEditor.svelte +2 -2
- package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte +8 -3
- package/components/apps/editor/settingsPanel/inputEditor/IconSelectInput.svelte.d.ts +0 -2
- package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +2 -2
- package/components/apps/editor/settingsPanel/triggerLists/BackgroundScriptTriggerList.svelte +15 -7
- package/components/apps/editor/settingsPanel/triggerLists/BackgroundScriptTriggerList.svelte.d.ts +2 -1
- package/components/apps/editor/settingsPanel/triggerLists/ComponentTriggerList.svelte +2 -2
- package/components/apps/editor/settingsPanel/triggerLists/ComponentTriggerList.svelte.d.ts +1 -1
- package/components/apps/editor/settingsPanel/triggerLists/TriggerBadgesList.svelte +6 -5
- package/components/apps/editor/settingsPanel/triggerLists/TriggerBadgesList.svelte.d.ts +1 -1
- package/components/apps/inputType.d.ts +1 -0
- package/components/apps/rx.d.ts +0 -2
- package/components/apps/rx.js +1 -3
- package/components/apps/types.d.ts +8 -0
- package/components/apps/utils.d.ts +3 -1
- package/components/apps/utils.js +24 -1
- package/components/build_workers.d.ts +14 -0
- package/components/build_workers.js +45 -0
- package/components/common/button/Button.svelte +46 -24
- package/components/common/button/Button.svelte.d.ts +7 -1
- package/components/common/button/ButtonDropdown.svelte +25 -0
- package/components/common/button/ButtonDropdown.svelte.d.ts +27 -0
- package/components/common/button/model.d.ts +2 -3
- package/components/common/button/model.js +7 -3
- package/components/common/drawer/Drawer.svelte +0 -1
- package/components/common/drawer/DrawerContent.svelte +1 -1
- package/components/common/fileInput/FileInput.svelte +5 -1
- package/components/common/fileInput/FileInput.svelte.d.ts +1 -0
- package/components/common/index.d.ts +0 -2
- package/components/common/index.js +0 -2
- package/components/common/menu/Menu.svelte.d.ts +1 -1
- package/components/common/popup/Popup.svelte +9 -5
- package/components/common/table/ScriptRow.svelte +2 -2
- package/components/common/tabs/Tab.svelte +10 -5
- package/components/common/tabs/Tabs.svelte +20 -1
- package/components/common/tabs/Tabs.svelte.d.ts +3 -0
- package/components/flows/CreateActionsApp.svelte +12 -7
- package/components/flows/CreateActionsFlow.svelte +11 -10
- package/components/flows/FlowEditor.svelte +2 -2
- package/components/flows/content/CapturePayload.svelte +2 -4
- package/components/flows/content/FlowModuleComponent.svelte +1 -0
- package/components/flows/content/FlowSchedules.svelte +3 -1
- package/components/flows/header/FlowImportExportMenu.svelte +10 -12
- package/components/flows/header/FlowPreviewButtons.svelte +21 -23
- package/components/flows/scheduleUtils.d.ts +1 -0
- package/components/flows/scheduleUtils.js +2 -1
- package/components/graph/FlowGraph.svelte +21 -7
- package/components/graph/FlowGraph.svelte.d.ts +2 -0
- package/components/graph/svelvet/container/views/GraphView.svelte +17 -29
- package/components/graph/svelvet/container/views/GraphView.svelte.d.ts +2 -0
- package/components/graph/svelvet/container/views/Svelvet.svelte +4 -3
- package/components/graph/svelvet/container/views/Svelvet.svelte.d.ts +3 -0
- package/components/home/ItemsList.svelte +1 -1
- package/components/icons/WindmillIcon.svelte +4 -0
- package/components/icons/WindmillIcon.svelte.d.ts +1 -0
- package/components/propertyPicker/PropPicker.svelte +2 -2
- package/components/scripts/CreateActionsScript.svelte +4 -22
- package/editorUtils.js +3 -1
- package/gen/core/OpenAPI.js +1 -1
- package/gen/index.d.ts +6 -0
- package/gen/index.js +2 -0
- package/gen/models/CreateInput.d.ts +5 -0
- package/gen/models/CreateInput.js +4 -0
- package/gen/models/EditSchedule.d.ts +1 -0
- package/gen/models/Input.d.ts +6 -0
- package/gen/models/Input.js +4 -0
- package/gen/models/NewSchedule.d.ts +1 -1
- package/gen/models/NewTokenImpersonate.d.ts +5 -0
- package/gen/models/NewTokenImpersonate.js +4 -0
- package/gen/models/RunnableType.d.ts +5 -0
- package/gen/models/RunnableType.js +9 -0
- package/gen/models/Schedule.d.ts +1 -1
- package/gen/models/UpdateInput.d.ts +4 -0
- package/gen/models/UpdateInput.js +4 -0
- package/gen/services/FlowService.d.ts +18 -0
- package/gen/services/FlowService.js +19 -0
- package/gen/services/InputService.d.ts +78 -0
- package/gen/services/InputService.js +95 -0
- package/gen/services/JobService.d.ts +35 -15
- package/gen/services/JobService.js +25 -7
- package/gen/services/ScheduleService.d.ts +2 -2
- package/gen/services/ScheduleService.js +1 -1
- package/gen/services/ScriptService.d.ts +10 -0
- package/gen/services/ScriptService.js +16 -0
- package/gen/services/UserService.d.ts +12 -0
- package/gen/services/UserService.js +13 -0
- package/package.json +24 -13
- package/script_helpers.d.ts +1 -1
- package/script_helpers.js +7 -5
- package/utils.d.ts +2 -2
- package/utils.js +21 -11
- package/components/common/button/ButtonPopup.svelte +0 -78
- package/components/common/button/ButtonPopup.svelte.d.ts +0 -39
- package/components/common/button/ButtonPopupItem.svelte +0 -48
- package/components/common/button/ButtonPopupItem.svelte.d.ts +0 -28
|
@@ -10,9 +10,11 @@ onMount(async () => {
|
|
|
10
10
|
});
|
|
11
11
|
</script>
|
|
12
12
|
|
|
13
|
-
<div class="center-center min-h-screen p-4 relative bg-
|
|
14
|
-
<div
|
|
15
|
-
|
|
13
|
+
<div class="center-center min-h-screen p-4 relative bg-gray-50">
|
|
14
|
+
<div
|
|
15
|
+
class="border rounded-md shadow-md bg-white w-full max-w-[640px]
|
|
16
|
+
p-4 sm:py-8 sm:px-10 mb-6 md:mb-20 z-10"
|
|
17
|
+
>
|
|
16
18
|
<div class="mb-10">
|
|
17
19
|
<h1 class="text-center">
|
|
18
20
|
{title}
|
|
@@ -27,13 +29,13 @@ onMount(async () => {
|
|
|
27
29
|
</div>
|
|
28
30
|
{#if !disableLogo}
|
|
29
31
|
<div class="hidden lg:block absolute top-10 right-50">
|
|
30
|
-
<div
|
|
31
|
-
<WindmillIcon
|
|
32
|
+
<div>
|
|
33
|
+
<WindmillIcon height="100px" width="100px" spin="slow" />
|
|
32
34
|
</div>
|
|
33
|
-
<h2 class="text-center pt-2 text-gray-
|
|
35
|
+
<h2 class="text-center pt-2 text-gray-800">Windmill</h2>
|
|
34
36
|
</div>
|
|
35
37
|
{/if}
|
|
36
|
-
<div class="absolute top-0 right-0 text-2xs text-gray-
|
|
38
|
+
<div class="absolute top-0 right-0 text-2xs text-gray-800 italic px-3 py-1">
|
|
37
39
|
<span class="font-mono">{version}</span>
|
|
38
40
|
</div>
|
|
39
41
|
</div>
|
|
@@ -1,28 +1,61 @@
|
|
|
1
|
-
<script context="module">
|
|
2
|
-
export const OFFSET = new Date().getTimezoneOffset()
|
|
3
|
-
</script>
|
|
4
|
-
|
|
5
1
|
<script>import { ScheduleService } from '../gen';
|
|
6
|
-
import {
|
|
2
|
+
import { emptyString, formatCron } from '../utils';
|
|
3
|
+
import Badge from './Badge.svelte';
|
|
4
|
+
// @ts-ignore
|
|
5
|
+
import Multiselect from 'svelte-multiselect';
|
|
6
|
+
import TimezonePicker from 'svelte-timezone-picker';
|
|
7
7
|
import CollapseLink from './CollapseLink.svelte';
|
|
8
|
+
import { Button } from './common';
|
|
9
|
+
export let schedule;
|
|
10
|
+
// export let offset: number = -60 * Math.floor(new Date().getTimezoneOffset() / 60)
|
|
11
|
+
export let timezone; // = Intl.DateTimeFormat().resolvedOptions().timeZone
|
|
12
|
+
export let disabled = false;
|
|
8
13
|
export let validCRON = true;
|
|
9
14
|
let preview = [];
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
let
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
// If the user has already entered a cron string, switching to the basic tab will override it.
|
|
16
|
+
let executeEvery = 'minute';
|
|
17
|
+
let seconds = 30;
|
|
18
|
+
let minutes = 30;
|
|
19
|
+
let hours = 1;
|
|
20
|
+
const daysOfMonthOptions = Array.from(Array(31).keys()).map((i) => i + 1);
|
|
21
|
+
let daysOfMonth = [];
|
|
22
|
+
// let lastDayOfMonth = false
|
|
23
|
+
const monthsOfYearOptions = [
|
|
24
|
+
'January',
|
|
25
|
+
'February',
|
|
26
|
+
'March',
|
|
27
|
+
'April',
|
|
28
|
+
'May',
|
|
29
|
+
'June',
|
|
30
|
+
'July',
|
|
31
|
+
'August',
|
|
32
|
+
'September',
|
|
33
|
+
'October',
|
|
34
|
+
'November',
|
|
35
|
+
'December'
|
|
36
|
+
];
|
|
37
|
+
let monthsOfYear = [];
|
|
38
|
+
const daysOfWeekOptions = [
|
|
39
|
+
'Sunday',
|
|
40
|
+
'Monday',
|
|
41
|
+
'Tuesday',
|
|
42
|
+
'Wednesday',
|
|
43
|
+
'Thursday',
|
|
44
|
+
'Friday',
|
|
45
|
+
'Saturday'
|
|
46
|
+
];
|
|
47
|
+
let daysOfWeek = [];
|
|
48
|
+
let UTCTime = '';
|
|
49
|
+
$: !emptyString(schedule) && handleScheduleInput(schedule, timezone);
|
|
50
|
+
async function handleScheduleInput(input, timezone) {
|
|
16
51
|
try {
|
|
17
52
|
preview = await ScheduleService.previewSchedule({
|
|
18
|
-
requestBody: { schedule: formatCron(input),
|
|
53
|
+
requestBody: { schedule: formatCron(input), timezone }
|
|
19
54
|
});
|
|
20
|
-
cronError = '';
|
|
21
55
|
validCRON = true;
|
|
22
56
|
}
|
|
23
57
|
catch (err) {
|
|
24
58
|
if (err.status == 400 && err.body.includes('cron')) {
|
|
25
|
-
cronError = `Invalid cron expression`;
|
|
26
59
|
validCRON = false;
|
|
27
60
|
}
|
|
28
61
|
else {
|
|
@@ -30,60 +63,264 @@ async function handleScheduleInput(input) {
|
|
|
30
63
|
}
|
|
31
64
|
}
|
|
32
65
|
}
|
|
66
|
+
let nschedule = '';
|
|
67
|
+
$: {
|
|
68
|
+
// CRON string format
|
|
69
|
+
// sec min hour day of month month day of week year
|
|
70
|
+
// 0 30 9,12,15 1,15 May-Aug Mon,Wed,Fri 2018/2
|
|
71
|
+
let s_daysOfMonth = '';
|
|
72
|
+
// if (lastDayOfMonth) {
|
|
73
|
+
// s_daysOfMonth = 'L'
|
|
74
|
+
// } else
|
|
75
|
+
if (daysOfMonth.length > 0) {
|
|
76
|
+
s_daysOfMonth = daysOfMonth.join(',');
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
s_daysOfMonth = '*';
|
|
80
|
+
}
|
|
81
|
+
let s_months = '';
|
|
82
|
+
if (monthsOfYear.length > 0) {
|
|
83
|
+
s_months = monthsOfYear.map((m) => m.slice(0, 3).toLowerCase()).join(',');
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
s_months = '*';
|
|
87
|
+
}
|
|
88
|
+
let s_daysOfWeek = '';
|
|
89
|
+
if (daysOfWeek.length > 0) {
|
|
90
|
+
s_daysOfWeek = daysOfWeek.map((d) => d.slice(0, 3).toLowerCase()).join(',');
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
s_daysOfWeek = '*';
|
|
94
|
+
}
|
|
95
|
+
const s_AtUTCHours = parseInt(UTCTime.split(':')[0]) || '0';
|
|
96
|
+
const s_AtUTCMinutes = parseInt(UTCTime.split(':')[1]) || '0';
|
|
97
|
+
// If using the basic editor, set the cron string based on the selected options
|
|
98
|
+
if (executeEvery === 'second') {
|
|
99
|
+
if (seconds > 0) {
|
|
100
|
+
nschedule = `*/${seconds} * * * *`;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
nschedule = `* * * * *`;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else if (executeEvery === 'minute') {
|
|
107
|
+
if (minutes > 0) {
|
|
108
|
+
nschedule = `0 */${minutes} * * *`;
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
nschedule = `* * * * *`;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
else if (executeEvery === 'hour') {
|
|
115
|
+
if (hours > 0) {
|
|
116
|
+
nschedule = `0 0 */${hours} * *`;
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
nschedule = `* * * * *`;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
else if (executeEvery === 'day-month') {
|
|
123
|
+
nschedule = `0 ${s_AtUTCMinutes} ${s_AtUTCHours} ${s_daysOfMonth} *`;
|
|
124
|
+
}
|
|
125
|
+
else if (executeEvery === 'month') {
|
|
126
|
+
nschedule = `0 ${s_AtUTCMinutes} ${s_AtUTCHours} ${s_daysOfMonth} ${s_months}`;
|
|
127
|
+
}
|
|
128
|
+
else if (executeEvery === 'day-week') {
|
|
129
|
+
nschedule = `0 ${s_AtUTCMinutes} ${s_AtUTCHours} * * ${s_daysOfWeek}`;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
$: dateFormatter = new Intl.DateTimeFormat('en-GB', {
|
|
133
|
+
weekday: 'short',
|
|
134
|
+
day: '2-digit',
|
|
135
|
+
month: 'short',
|
|
136
|
+
year: 'numeric',
|
|
137
|
+
hour: 'numeric',
|
|
138
|
+
minute: 'numeric',
|
|
139
|
+
second: 'numeric',
|
|
140
|
+
timeZone: timezone,
|
|
141
|
+
timeZoneName: 'short'
|
|
142
|
+
}).format;
|
|
33
143
|
</script>
|
|
34
144
|
|
|
35
|
-
<div class="
|
|
36
|
-
<div class="w-full
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
on:click={() => {
|
|
52
|
-
schedule = '0 */15 * * *'
|
|
53
|
-
cronError = ''
|
|
54
|
-
}}>every 15 min</button
|
|
55
|
-
>
|
|
56
|
-
<button
|
|
57
|
-
on:click={() => {
|
|
58
|
-
schedule = '0 0 * * * *'
|
|
59
|
-
cronError = ''
|
|
60
|
-
}}>every hour</button
|
|
61
|
-
>
|
|
62
|
-
<button
|
|
63
|
-
on:click={() => {
|
|
64
|
-
schedule = '0 0 8 * * *'
|
|
65
|
-
cronError = ''
|
|
66
|
-
}}>once a day at 8AM</button
|
|
67
|
-
>
|
|
145
|
+
<div class="w-full flex space-x-16 p-4">
|
|
146
|
+
<div class="w-full flex flex-col space-y-2">
|
|
147
|
+
<div class="w-full flex flex-col gap-1">
|
|
148
|
+
<small class="font-bold">Cron</small>
|
|
149
|
+
<input
|
|
150
|
+
class="inline-block"
|
|
151
|
+
type="text"
|
|
152
|
+
id="cron-schedule"
|
|
153
|
+
name="cron-schedule"
|
|
154
|
+
placeholder="*/30 * * * *"
|
|
155
|
+
bind:value={schedule}
|
|
156
|
+
{disabled}
|
|
157
|
+
/>
|
|
158
|
+
{#if !validCRON}
|
|
159
|
+
<small class="text-red-600"> Invalid cron syntax </small>
|
|
160
|
+
{/if}
|
|
68
161
|
</div>
|
|
69
|
-
{/if}
|
|
70
162
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
<
|
|
76
|
-
{
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
163
|
+
<div class="w-full flex flex-col gap-1">
|
|
164
|
+
<small class="font-bold">Timezone</small>
|
|
165
|
+
|
|
166
|
+
{#if disabled}
|
|
167
|
+
<div>
|
|
168
|
+
<Badge>{timezone}</Badge>
|
|
169
|
+
</div>
|
|
170
|
+
{:else}
|
|
171
|
+
<TimezonePicker {timezone} on:update={(e) => (timezone = e.detail.timezone)} />
|
|
172
|
+
{/if}
|
|
173
|
+
</div>
|
|
174
|
+
|
|
175
|
+
{#if !disabled}
|
|
176
|
+
<div class="w-full">
|
|
177
|
+
<CollapseLink text="Use simplified builder">
|
|
178
|
+
<div class="w-full flex flex-col gap-4 mt-4">
|
|
179
|
+
<div class="w-full flex flex-col gap-1">
|
|
180
|
+
<small class="font-bold">Execute schedule every</small>
|
|
181
|
+
|
|
182
|
+
<div class="w-full flex gap-4">
|
|
183
|
+
<div class="w-full flex flex-col gap-1">
|
|
184
|
+
<select
|
|
185
|
+
{disabled}
|
|
186
|
+
name="execute_every"
|
|
187
|
+
id="execute_every"
|
|
188
|
+
bind:value={executeEvery}
|
|
189
|
+
>
|
|
190
|
+
<option value="second">Second(s)</option>
|
|
191
|
+
<option value="minute">Minute(s)</option>
|
|
192
|
+
<option value="hour">Hour(s)</option>
|
|
193
|
+
<option value="day-month">Day of the month</option>
|
|
194
|
+
<option value="month">Month(s)</option>
|
|
195
|
+
<option value="day-week">Day of the week</option>
|
|
196
|
+
</select>
|
|
197
|
+
</div>
|
|
198
|
+
|
|
199
|
+
<div class="w-full flex flex-col gap-1 justify-center">
|
|
200
|
+
{#if executeEvery == 'second'}
|
|
201
|
+
<input {disabled} type="number" min="0" max="59" bind:value={seconds} />
|
|
202
|
+
<small>Valid range 0-59</small>
|
|
203
|
+
{:else if executeEvery == 'minute'}
|
|
204
|
+
<input {disabled} type="number" min="0" max="59" bind:value={minutes} />
|
|
205
|
+
<small>Valid range 0-59</small>
|
|
206
|
+
{:else if executeEvery == 'hour'}
|
|
207
|
+
<input {disabled} type="number" min="0" max="23" bind:value={hours} />
|
|
208
|
+
<small>Valid range 0-23</small>
|
|
209
|
+
{:else if executeEvery == 'day-month'}
|
|
210
|
+
<!-- <div class="w-full flex">
|
|
211
|
+
<label for="lastDayOfMonth" class="w-full flex items-center gap-2">
|
|
212
|
+
<div class="flex">
|
|
213
|
+
<input type="checkbox" id="lastDayOfMonth" bind:checked={lastDayOfMonth} />
|
|
214
|
+
</div>
|
|
215
|
+
<small> Last day of the month </small>
|
|
216
|
+
</label>
|
|
217
|
+
</div> -->
|
|
218
|
+
{/if}
|
|
219
|
+
</div>
|
|
220
|
+
</div>
|
|
221
|
+
</div>
|
|
222
|
+
|
|
223
|
+
<div class="w-full flex flex-col gap-4">
|
|
224
|
+
{#if executeEvery == 'month'}
|
|
225
|
+
<div class="w-full flex flex-col">
|
|
226
|
+
<Multiselect
|
|
227
|
+
{disabled}
|
|
228
|
+
bind:selected={monthsOfYear}
|
|
229
|
+
options={monthsOfYearOptions}
|
|
230
|
+
selectedOptionsDraggable={false}
|
|
231
|
+
placeholder="Every month"
|
|
232
|
+
/>
|
|
233
|
+
</div>
|
|
234
|
+
{/if}
|
|
235
|
+
|
|
236
|
+
{#if executeEvery == 'day-week'}
|
|
237
|
+
<div class="w-full flex flex-col">
|
|
238
|
+
<Multiselect
|
|
239
|
+
{disabled}
|
|
240
|
+
bind:selected={daysOfWeek}
|
|
241
|
+
options={daysOfWeekOptions}
|
|
242
|
+
selectedOptionsDraggable={false}
|
|
243
|
+
placeholder="Every day"
|
|
244
|
+
/>
|
|
245
|
+
</div>
|
|
246
|
+
{/if}
|
|
247
|
+
|
|
248
|
+
{#if executeEvery == 'day-month' || executeEvery == 'month'}
|
|
249
|
+
<div class="w-full flex flex-col gap-1">
|
|
250
|
+
{#if executeEvery == 'month'}
|
|
251
|
+
<small class="font-bold">On day of the month</small>
|
|
252
|
+
{/if}
|
|
253
|
+
<div class="w-full flex gap-4">
|
|
254
|
+
<div class="w-full flex">
|
|
255
|
+
<Multiselect
|
|
256
|
+
{disabled}
|
|
257
|
+
bind:selected={daysOfMonth}
|
|
258
|
+
options={daysOfMonthOptions}
|
|
259
|
+
selectedOptionsDraggable={false}
|
|
260
|
+
placeholder="Every day"
|
|
261
|
+
/>
|
|
262
|
+
</div>
|
|
263
|
+
|
|
264
|
+
<!-- {#if executeEvery == 'month'}
|
|
265
|
+
<div class="w-full flex">
|
|
266
|
+
<label for="lastDayOfMonth" class="w-full flex items-center gap-2">
|
|
267
|
+
<div class="flex">
|
|
268
|
+
<input type="checkbox" id="lastDayOfMonth" bind:checked={lastDayOfMonth} />
|
|
269
|
+
</div>
|
|
270
|
+
<small> Last day of the month </small>
|
|
271
|
+
</label>
|
|
272
|
+
</div>
|
|
273
|
+
{/if} -->
|
|
274
|
+
</div>
|
|
275
|
+
<small>Schedule will only execute on valid calendar days</small>
|
|
276
|
+
</div>
|
|
277
|
+
{/if}
|
|
278
|
+
|
|
279
|
+
{#if executeEvery == 'day-month' || executeEvery == 'month' || executeEvery == 'day-week'}
|
|
280
|
+
<div class="w-full flex flex-col gap-1">
|
|
281
|
+
<small class="font-bold">At UTC Time</small>
|
|
282
|
+
<input
|
|
283
|
+
{disabled}
|
|
284
|
+
type="time"
|
|
285
|
+
name="atUTCTime"
|
|
286
|
+
id="atUTCTime"
|
|
287
|
+
bind:value={UTCTime}
|
|
288
|
+
/>
|
|
289
|
+
</div>
|
|
290
|
+
{/if}
|
|
291
|
+
</div>
|
|
292
|
+
|
|
293
|
+
<div class="w-full flex flex-col gap-1">
|
|
294
|
+
<small class="font-bold">Preview New Cron</small>
|
|
295
|
+
|
|
296
|
+
<div class="flex p-2 px-4 rounded-md bg-gray-100">
|
|
297
|
+
<span>{nschedule}</span>
|
|
298
|
+
</div>
|
|
299
|
+
</div>
|
|
300
|
+
</div>
|
|
301
|
+
|
|
302
|
+
<div class="mt-4">
|
|
303
|
+
<Button variant="border" color="dark" size="xs" on:click={() => (schedule = nschedule)}
|
|
304
|
+
>Set Schedule</Button
|
|
305
|
+
>
|
|
306
|
+
</div>
|
|
307
|
+
</CollapseLink>
|
|
86
308
|
</div>
|
|
87
309
|
{/if}
|
|
88
|
-
</
|
|
310
|
+
</div>
|
|
311
|
+
|
|
312
|
+
<div class="w-full flex flex-col space-y-2">
|
|
313
|
+
<h3>Execution summary</h3>
|
|
314
|
+
<hr />
|
|
315
|
+
<div class="flex flex-col space-y-2">
|
|
316
|
+
<small>Estimated upcoming events ({timezone})</small>
|
|
317
|
+
<div class="flex flex-col rounded-md p-4 border text-gray-600">
|
|
318
|
+
{#each preview as date}
|
|
319
|
+
<div class="flex items-center space-x-2">
|
|
320
|
+
<span>{dateFormatter(new Date(date))}</span>
|
|
321
|
+
</div>
|
|
322
|
+
{/each}
|
|
323
|
+
</div>
|
|
324
|
+
</div>
|
|
325
|
+
</div>
|
|
89
326
|
</div>
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { SvelteComponentTyped } from "svelte";
|
|
2
|
-
export declare const OFFSET: number;
|
|
3
2
|
declare const __propDef: {
|
|
4
3
|
props: {
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
schedule: string;
|
|
5
|
+
timezone: string;
|
|
7
6
|
disabled?: boolean | undefined;
|
|
7
|
+
validCRON?: boolean | undefined;
|
|
8
8
|
};
|
|
9
9
|
events: {
|
|
10
10
|
[evt: string]: CustomEvent<any>;
|
|
@@ -82,9 +82,9 @@ let jsonViewer;
|
|
|
82
82
|
<div class="mb-2 text-gray-500 text-sm bg-gray-50/20">
|
|
83
83
|
as JSON <input class="windmillapp" type="checkbox" bind:checked={forceJson} /></div
|
|
84
84
|
>{/if}{#if typeof result == 'object' && Object.keys(result).length > 0}<div
|
|
85
|
-
class="mb-2
|
|
85
|
+
class="mb-2 w-full text-sm text-gray-700 relative"
|
|
86
86
|
>The result keys are: <b>{truncate(Object.keys(result).join(', '), 50)}</b>
|
|
87
|
-
<div class="text-gray-500 text-sm absolute top-
|
|
87
|
+
<div class="text-gray-500 text-sm absolute top-6 right-0">
|
|
88
88
|
<button on:click={jsonViewer.openDrawer}>Expand JSON</button>
|
|
89
89
|
</div></div
|
|
90
90
|
>{/if}{#if !forceJson && resultKind == 'table-col'}<div
|