windmill-components 1.55.0 → 1.55.2

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.
Files changed (203) hide show
  1. package/common.d.ts +1 -1
  2. package/common.js +3 -0
  3. package/components/AppConnect.svelte +2 -2
  4. package/components/ArgInput.svelte +1 -1
  5. package/components/CronInput.svelte +54 -53
  6. package/components/Dropdown.svelte +21 -9
  7. package/components/Editor.svelte +10 -10
  8. package/components/EditorBar.svelte +2 -2
  9. package/components/FlowBuilder.svelte +41 -25
  10. package/components/FlowGraphViewer.svelte +6 -2
  11. package/components/FlowMetadata.svelte +8 -3
  12. package/components/FlowViewer.svelte +2 -2
  13. package/components/FolderEditor.svelte +299 -0
  14. package/components/FolderEditor.svelte.d.ts +16 -0
  15. package/components/FolderInfo.svelte +13 -0
  16. package/components/FolderInfo.svelte.d.ts +16 -0
  17. package/components/FolderUsageInfo.svelte +17 -0
  18. package/components/FolderUsageInfo.svelte.d.ts +16 -0
  19. package/components/GroupEditor.svelte +287 -0
  20. package/components/GroupEditor.svelte.d.ts +18 -0
  21. package/components/GroupInfo.svelte +22 -0
  22. package/components/GroupInfo.svelte.d.ts +16 -0
  23. package/components/InputTransformForm.svelte +16 -7
  24. package/components/MoveDrawer.svelte +75 -0
  25. package/components/MoveDrawer.svelte.d.ts +19 -0
  26. package/components/Path.svelte +243 -96
  27. package/components/Path.svelte.d.ts +1 -4
  28. package/components/RadioButton.svelte +2 -0
  29. package/components/RadioButton.svelte.d.ts +1 -0
  30. package/components/ResourceEditor.svelte +11 -16
  31. package/components/RunForm.svelte +21 -4
  32. package/components/RunForm.svelte.d.ts +1 -1
  33. package/components/ScheduleEditor.svelte +226 -0
  34. package/components/ScheduleEditor.svelte.d.ts +26 -0
  35. package/components/ScriptBuilder.svelte +109 -114
  36. package/components/ScriptEditor.svelte +17 -14
  37. package/components/ScriptEditor.svelte.d.ts +1 -0
  38. package/components/ScriptPicker.svelte +55 -29
  39. package/components/ScriptPicker.svelte.d.ts +1 -0
  40. package/components/ShareModal.svelte +94 -73
  41. package/components/ShareModal.svelte.d.ts +2 -4
  42. package/components/SimpleEditor.svelte +15 -10
  43. package/components/TemplateEditor.svelte +496 -0
  44. package/components/TemplateEditor.svelte.d.ts +25 -0
  45. package/components/TestJobLoader.svelte +1 -1
  46. package/components/VariableEditor.svelte +2 -1
  47. package/components/apps/CreateApp.svelte +1 -1
  48. package/components/apps/components/buttons/AppButton.svelte +3 -3
  49. package/components/apps/components/dataDisplay/AppBarChart.svelte +5 -4
  50. package/components/apps/components/dataDisplay/AppPieChart.svelte +3 -3
  51. package/components/apps/components/dateInputs/AppDateInput.svelte +34 -0
  52. package/components/apps/components/dateInputs/AppDateInput.svelte.d.ts +22 -0
  53. package/components/apps/components/form/AppForm.svelte +4 -5
  54. package/components/apps/components/form/AppForm.svelte.d.ts +0 -1
  55. package/components/apps/components/helpers/AlignWrapper.svelte +3 -4
  56. package/components/apps/components/helpers/AlignWrapper.svelte.d.ts +2 -3
  57. package/components/apps/components/helpers/InputValue.svelte +54 -5
  58. package/components/apps/components/helpers/InputValue.svelte.d.ts +1 -0
  59. package/components/apps/components/helpers/NonRunnableComponent.svelte +2 -1
  60. package/components/apps/components/helpers/RefreshButton.svelte +20 -0
  61. package/components/apps/components/helpers/RefreshButton.svelte.d.ts +16 -0
  62. package/components/apps/components/helpers/RunnableComponent.svelte +38 -42
  63. package/components/apps/components/helpers/RunnableWrapper.svelte +6 -3
  64. package/components/apps/components/numberInputs/AppNumberInput.svelte +8 -11
  65. package/components/apps/components/numberInputs/AppNumberInput.svelte.d.ts +1 -0
  66. package/components/apps/components/selectInputs/AppCheckbox.svelte +1 -1
  67. package/components/apps/components/selectInputs/AppSelect.svelte +26 -0
  68. package/components/apps/components/selectInputs/AppSelect.svelte.d.ts +22 -0
  69. package/components/apps/components/table/AppTable.svelte +159 -0
  70. package/components/apps/components/{dataDisplay → table}/AppTable.svelte.d.ts +0 -0
  71. package/components/apps/components/table/AppTableFooter.svelte +54 -0
  72. package/components/apps/components/table/AppTableFooter.svelte.d.ts +20 -0
  73. package/components/apps/components/table/tableOptions.d.ts +10 -0
  74. package/components/apps/components/table/tableOptions.js +11 -0
  75. package/components/apps/components/textInputs/AppTextInput.svelte +17 -10
  76. package/components/apps/components/textInputs/AppTextInput.svelte.d.ts +2 -0
  77. package/components/apps/editor/AppEditor.svelte +35 -20
  78. package/components/apps/editor/AppEditorHeader.svelte +15 -7
  79. package/components/apps/editor/AppPreview.svelte +5 -3
  80. package/components/apps/editor/AppPreview.svelte.d.ts +4 -1
  81. package/components/apps/editor/ComponentEditor.svelte +21 -3
  82. package/components/apps/editor/ComponentEditor.svelte.d.ts +2 -0
  83. package/components/apps/editor/ComponentHeader.svelte +21 -4
  84. package/components/apps/editor/ComponentHeader.svelte.d.ts +2 -0
  85. package/components/apps/editor/GridEditor.svelte +40 -20
  86. package/components/apps/editor/RecomputeAllComponents.svelte +5 -7
  87. package/components/apps/editor/componentsPanel/ComponentList.svelte +30 -82
  88. package/components/apps/editor/componentsPanel/data.js +78 -29
  89. package/components/apps/editor/contextPanel/ComponentOutputViewer.svelte +5 -1
  90. package/components/apps/editor/contextPanel/ContextPanel.svelte +35 -152
  91. package/components/apps/editor/contextPanel/ContextPanel.svelte.d.ts +1 -3
  92. package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +64 -0
  93. package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte.d.ts +18 -0
  94. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +95 -0
  95. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +20 -0
  96. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte +32 -0
  97. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +19 -0
  98. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte +63 -0
  99. package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte.d.ts +17 -0
  100. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanel.svelte +44 -0
  101. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanel.svelte.d.ts +14 -0
  102. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte +126 -0
  103. package/components/apps/editor/inlineScriptsPanel/InlineScriptsPanelList.svelte.d.ts +16 -0
  104. package/components/apps/editor/settingsPanel/AlignmentEditor.svelte +41 -0
  105. package/components/apps/editor/settingsPanel/AlignmentEditor.svelte.d.ts +17 -0
  106. package/components/apps/editor/settingsPanel/ComponentInputTypeEditor.svelte +44 -0
  107. package/components/apps/editor/settingsPanel/ComponentInputTypeEditor.svelte.d.ts +18 -0
  108. package/components/apps/editor/settingsPanel/ComponentPanel.svelte +48 -130
  109. package/components/apps/editor/settingsPanel/ComponentPanel.svelte.d.ts +3 -0
  110. package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +2 -2
  111. package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +1 -1
  112. package/components/apps/editor/settingsPanel/Recompute.svelte +2 -2
  113. package/components/apps/editor/settingsPanel/SelectedRunnable.svelte +46 -0
  114. package/components/apps/editor/settingsPanel/SelectedRunnable.svelte.d.ts +17 -0
  115. package/components/apps/editor/settingsPanel/SubTypeEditor.svelte +1 -1
  116. package/components/apps/editor/settingsPanel/common/PanelSection.svelte +1 -1
  117. package/components/apps/editor/settingsPanel/{ConnectedInputEditor.svelte → inputEditor/ConnectedInputEditor.svelte} +1 -2
  118. package/components/apps/editor/settingsPanel/{ConnectedInputEditor.svelte.d.ts → inputEditor/ConnectedInputEditor.svelte.d.ts} +1 -1
  119. package/components/apps/editor/settingsPanel/inputEditor/RunnableInputEditor.svelte +12 -0
  120. package/components/apps/editor/settingsPanel/inputEditor/RunnableInputEditor.svelte.d.ts +17 -0
  121. package/components/apps/editor/settingsPanel/{StaticInputEditor.svelte → inputEditor/StaticInputEditor.svelte} +5 -5
  122. package/components/apps/editor/settingsPanel/{StaticInputEditor.svelte.d.ts → inputEditor/StaticInputEditor.svelte.d.ts} +1 -1
  123. package/components/apps/editor/settingsPanel/mainInput/InlineScriptList.svelte +6 -3
  124. package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +66 -22
  125. package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte.d.ts +2 -3
  126. package/components/apps/editor/settingsPanel/mainInput/WorkspaceFlowList.svelte +1 -1
  127. package/components/apps/gridUtils.d.ts +3 -1
  128. package/components/apps/gridUtils.js +16 -1
  129. package/components/apps/inputType.d.ts +10 -4
  130. package/components/apps/rx.d.ts +8 -8
  131. package/components/apps/rx.js +17 -9
  132. package/components/apps/types.d.ts +14 -2
  133. package/components/apps/utils.d.ts +4 -3
  134. package/components/apps/utils.js +37 -5
  135. package/components/common/drawer/Drawer.svelte +1 -1
  136. package/components/common/drawer/Drawer.svelte.d.ts +1 -0
  137. package/components/common/popup/Popup.svelte +0 -2
  138. package/components/common/popup/Popup.svelte.d.ts +0 -4
  139. package/components/common/table/FlowRow.svelte +21 -7
  140. package/components/common/table/FlowRow.svelte.d.ts +2 -0
  141. package/components/common/table/ScriptRow.svelte +22 -7
  142. package/components/common/table/ScriptRow.svelte.d.ts +2 -0
  143. package/components/common/toggleButton/ToggleButton.svelte +1 -1
  144. package/components/common/toggleButton/ToggleButtonGroup.svelte +1 -1
  145. package/components/common/toggleButton/ToggleButtonGroup.svelte.d.ts +1 -0
  146. package/components/flows/content/FlowEditorPanel.svelte +10 -16
  147. package/components/flows/content/FlowInputs.svelte +18 -4
  148. package/components/flows/content/FlowInputs.svelte.d.ts +1 -0
  149. package/components/flows/content/FlowModuleComponent.svelte +1 -1
  150. package/components/flows/content/FlowModuleWrapper.svelte +26 -1
  151. package/components/flows/content/FlowSchedules.svelte +5 -0
  152. package/components/flows/content/FlowSettings.svelte +16 -24
  153. package/components/flows/content/FlowSettings.svelte.d.ts +0 -1
  154. package/components/flows/header/FlowPreviewButtons.svelte +13 -10
  155. package/components/flows/map/FlowErrorHandlerItem.svelte +1 -1
  156. package/components/flows/map/FlowModuleSchemaMap.svelte +12 -3
  157. package/components/flows/map/FlowSettingsItem.svelte +8 -15
  158. package/components/flows/map/InsertModuleButton.svelte +29 -2
  159. package/components/flows/map/InsertModuleButton.svelte.d.ts +3 -1
  160. package/components/flows/map/MapItem.svelte +2 -1
  161. package/components/flows/map/MapItem.svelte.d.ts +1 -0
  162. package/components/flows/pickers/WorkspaceScriptPicker.svelte +3 -0
  163. package/components/flows/previousResults.js +1 -1
  164. package/components/graph/FlowGraph.svelte +15 -15
  165. package/components/graph/model.d.ts +35 -1
  166. package/components/home/ItemsList.svelte +20 -12
  167. package/components/jobs/JobDetail.svelte +9 -3
  168. package/components/sidebar/SidebarContent.svelte +4 -3
  169. package/components/sidebar/UserMenu.svelte +1 -1
  170. package/editorUtils.d.ts +7 -1
  171. package/editorUtils.js +98 -3
  172. package/es5.d.ts.txt +4526 -0
  173. package/gen/index.d.ts +2 -0
  174. package/gen/index.js +1 -0
  175. package/gen/models/CompletedJob.d.ts +1 -0
  176. package/gen/models/EditSchedule.d.ts +0 -2
  177. package/gen/models/Folder.d.ts +5 -0
  178. package/gen/models/Folder.js +4 -0
  179. package/gen/models/QueuedJob.d.ts +1 -0
  180. package/gen/models/Script.d.ts +1 -1
  181. package/gen/models/User.d.ts +1 -0
  182. package/gen/services/FolderService.d.ts +128 -0
  183. package/gen/services/FolderService.js +151 -0
  184. package/gen/services/GranularAclService.d.ts +3 -3
  185. package/gen/services/GroupService.d.ts +5 -1
  186. package/gen/services/GroupService.js +4 -1
  187. package/gen/services/JobService.d.ts +25 -5
  188. package/gen/services/JobService.js +10 -5
  189. package/gen/services/ScriptService.d.ts +2 -1
  190. package/gen/services/UserService.d.ts +9 -0
  191. package/gen/services/UserService.js +15 -0
  192. package/package.json +485 -461
  193. package/script_helpers.d.ts +2 -2
  194. package/script_helpers.js +4 -4
  195. package/stores.d.ts +1 -0
  196. package/utils.d.ts +3 -0
  197. package/utils.js +44 -7
  198. package/components/GroupModal.svelte +0 -98
  199. package/components/GroupModal.svelte.d.ts +0 -17
  200. package/components/apps/components/dataDisplay/AppTable.svelte +0 -132
  201. package/components/apps/components/dataDisplay/app.md +0 -49
  202. package/components/apps/editor/contextPanel/InlineScriptCreationPanel.svelte +0 -29
  203. package/components/apps/editor/contextPanel/InlineScriptCreationPanel.svelte.d.ts +0 -16
package/common.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { Script } from "./gen";
2
- export type OwnerKind = 'group' | 'user';
2
+ export type OwnerKind = 'group' | 'user' | 'folder';
3
3
  export type ActionKind = 'Create' | 'Update' | 'Delete' | 'Execute';
4
4
  export type SupportedLanguage = Script.language;
5
5
  export interface SchemaProperty {
package/common.js CHANGED
@@ -4,6 +4,9 @@ export function pathToMeta(path) {
4
4
  if (splitted[0] == 'g') {
5
5
  ownerKind = 'group';
6
6
  }
7
+ else if (splitted[0] == 'f') {
8
+ ownerKind = 'folder';
9
+ }
7
10
  else if (splitted[0] == 'u') {
8
11
  ownerKind = 'user';
9
12
  }
@@ -369,8 +369,8 @@ let filteredConnectsManual = [];
369
369
  </ol>
370
370
  </div>
371
371
  {#if apiTokenApps[resource_type].img}
372
- <div class="mt-4">
373
- <img alt="connect" src={apiTokenApps[resource_type].img} />
372
+ <div class="mt-4 w-full">
373
+ <img class="max-h-96 m-auto" alt="connect" src={apiTokenApps[resource_type].img} />
374
374
  </div>
375
375
  {/if}
376
376
  {/if}
@@ -11,7 +11,6 @@ import StringTypeNarrowing from './StringTypeNarrowing.svelte';
11
11
  import SchemaForm from './SchemaForm.svelte';
12
12
  import SimpleEditor from './SimpleEditor.svelte';
13
13
  import autosize from 'svelte-autosize';
14
- import * as autosizeLib from 'autosize';
15
14
  import Toggle from './Toggle.svelte';
16
15
  import Password from './Password.svelte';
17
16
  export let label = '';
@@ -270,6 +269,7 @@ $: inputCat = computeInputCat(type, format, itemsType?.type, enum_, contentEncod
270
269
  {#if properties && Object.keys(properties).length > 0}
271
270
  <div class="p-4 pl-8 border rounded w-full">
272
271
  <SchemaForm
272
+ {disabled}
273
273
  schema={{ properties, $schema: '', required: [], type: 'object' }}
274
274
  bind:args={value}
275
275
  />
@@ -3,7 +3,7 @@
3
3
  </script>
4
4
 
5
5
  <script>import { ScheduleService } from '../gen';
6
- import { displayDate, formatCron, sendUserToast } from '../utils';
6
+ import { displayDate, emptyString, formatCron, sendUserToast } from '../utils';
7
7
  import CollapseLink from './CollapseLink.svelte';
8
8
  export let validCRON = true;
9
9
  let preview = [];
@@ -11,7 +11,7 @@ let cronError = '';
11
11
  export let schedule = '0 0 12 * *';
12
12
  export let disabled = false;
13
13
  let limit = 3;
14
- $: handleScheduleInput(schedule);
14
+ $: !emptyString(schedule) && handleScheduleInput(schedule);
15
15
  async function handleScheduleInput(input) {
16
16
  try {
17
17
  preview = await ScheduleService.previewSchedule({
@@ -26,63 +26,64 @@ async function handleScheduleInput(input) {
26
26
  validCRON = false;
27
27
  }
28
28
  else {
29
- sendUserToast(`Cannot preview: ${err}`, true);
30
29
  validCRON = false;
31
30
  }
32
31
  }
33
32
  }
34
33
  </script>
35
34
 
36
- <div class="text-red-600 text-2xs grow">{cronError}</div>
37
- <div class="flex flex-row items-end max-w-5xl">
38
- <label class="text-xs min-w-max mr-2 self-center" for="cron-schedule">CRON expression</label>
39
- <input
40
- class="inline-block"
41
- type="text"
42
- id="cron-schedule"
43
- name="cron-schedule"
44
- bind:value={schedule}
45
- {disabled}
46
- />
47
- </div>
48
- {#if !disabled}
49
- <div class="flex flex-row text-xs text-blue-500 gap-3 pl-28 mb-2">
50
- <button
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
- >
35
+ <div class="max-w-xl">
36
+ <div class="w-full text-right text-red-600 text-2xs grow">{cronError}</div>
37
+ <div class="flex flex-row items-end max-w-5xl">
38
+ <label class="text-xs min-w-max mr-2 self-center" for="cron-schedule">CRON expression</label>
39
+ <input
40
+ class="inline-block"
41
+ type="text"
42
+ id="cron-schedule"
43
+ name="cron-schedule"
44
+ bind:value={schedule}
45
+ {disabled}
46
+ />
68
47
  </div>
69
- {/if}
70
-
71
- <CollapseLink text="preview next runs" open={true}>
72
- {#if preview && preview.length > 0}
73
- <div class="text-sm text-gray-700 border p-2 rounded-md">
74
- <div class="flex flex-row justify-between">The next runs will be scheduled at:</div>
75
- <ul class="list-disc mx-12">
76
- {#each preview.slice(0, limit) as p}
77
- <li class="mx-2 text-gray-700 text-sm">{displayDate(p, true)}</li>
78
- {/each}
79
- <li class="text-sm mx-2">...</li>
80
- {#if limit != 10}
81
- <button class="underline text-gray-400" on:click={() => (limit = 10)}>Load more</button>
82
- {:else}
83
- <button class="underline text-gray-400" on:click={() => (limit = 3)}>Load less</button>
84
- {/if}
85
- </ul>
48
+ {#if !disabled}
49
+ <div class="flex flex-row text-xs text-blue-500 gap-3 pl-28 mb-2">
50
+ <button
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
+ >
86
68
  </div>
87
69
  {/if}
88
- </CollapseLink>
70
+
71
+ <CollapseLink text="preview next runs" open={true}>
72
+ {#if preview && preview.length > 0}
73
+ <div class="text-sm text-gray-700 border p-2 rounded-md">
74
+ <div class="flex flex-row justify-between">The next runs will be scheduled at:</div>
75
+ <ul class="list-disc mx-12">
76
+ {#each preview.slice(0, limit) as p}
77
+ <li class="mx-2 text-gray-700 text-sm">{displayDate(p, true)}</li>
78
+ {/each}
79
+ <li class="text-sm mx-2">...</li>
80
+ {#if limit != 10}
81
+ <button class="underline text-gray-400" on:click={() => (limit = 10)}>Load more</button>
82
+ {:else}
83
+ <button class="underline text-gray-400" on:click={() => (limit = 3)}>Load less</button>
84
+ {/if}
85
+ </ul>
86
+ </div>
87
+ {/if}
88
+ </CollapseLink>
89
+ </div>
@@ -21,23 +21,24 @@ const dispatch = createEventDispatcher();
21
21
  {#if item.action}
22
22
  <button
23
23
  on:click={(event) => {
24
+ event.preventDefault()
24
25
  if (!item.disabled) {
25
- event.preventDefault()
26
26
  close()
27
27
  item.action && item.action(event)
28
28
  dispatch('click', { item: item?.eventName })
29
29
  }
30
30
  }}
31
- class="block w-full whitespace-nowrap hover:drop-shadow-sm hover:bg-gray-50 hover:bg-opacity-30 px-4 py-2 text-sm text-gray-700 text-left {item.separatorTop
32
- ? 'border-t'
33
- : ''} {item.separatorBottom ? 'border-b' : ''} {item.type == 'delete'
31
+ class="block w-full whitespace-nowrap hover:drop-shadow-sm hover:bg-gray-50 hover:bg-opacity-30
32
+ px-4 py-2 text-sm text-gray-700 text-left
33
+ {item.disabled ? 'bg-gray-100' : ''}
34
+ {item.separatorTop ? 'border-t' : ''} {item.separatorBottom ? 'border-b' : ''} {item.type ==
35
+ 'delete'
34
36
  ? 'text-red-500'
35
37
  : ''}"
36
38
  role="menuitem"
37
39
  tabindex="-1"
38
40
  id="user-menu-item-{name}-{i}}"
39
41
  disabled={item.disabled}
40
- class:disabled={item.disabled}
41
42
  >
42
43
  {#if item.icon}
43
44
  <Icon
@@ -48,15 +49,17 @@ const dispatch = createEventDispatcher();
48
49
  {/if}
49
50
  {item.displayName}
50
51
  </button>
51
- {:else if item.href}
52
+ {:else if item.href && !item.disabled}
52
53
  <a
53
54
  href={item.href}
54
- on:click={() => {
55
+ on:click={(e) => {
55
56
  if (!item.disabled) {
56
57
  close()
58
+ } else {
59
+ e.preventDefault()
57
60
  }
58
61
  }}
59
- class="block w-full px-4 py-2 text-sm text-gray-700 hover:drop-shadow-sm hover:bg-gray-50 hover:bg-opacity-30"
62
+ class="block w-full px-4 font-semibold py-2 text-sm text-gray-700 hover:drop-shadow-sm hover:bg-gray-50 hover:bg-opacity-30"
60
63
  role="menuitem"
61
64
  tabindex="-1"
62
65
  id="user-menu-item-{name}-{i}}"
@@ -73,11 +76,20 @@ const dispatch = createEventDispatcher();
73
76
  </a>
74
77
  {:else}
75
78
  <span
76
- class="block px-4 py-2 text-sm text-gray-700"
79
+ class:bg-gray-50={item.disabled}
80
+ class="block px-4 py-2 text-sm text-gray-700 cursor-auto"
77
81
  role="menuitem"
78
82
  tabindex="-1"
79
83
  id="user-menu-item-{name}-{i}}"
84
+ on:click|preventDefault
80
85
  >
86
+ {#if item.icon}
87
+ <Icon
88
+ data={item.icon}
89
+ scale={0.6}
90
+ class="inline mr-2 {item.type == 'delete' ? 'text-red-500' : 'text-gray-700'}"
91
+ />
92
+ {/if}
81
93
  {item.displayName}
82
94
  </span>
83
95
  {/if}
@@ -19,6 +19,14 @@ monaco.editor.defineTheme('myTheme', {
19
19
  }
20
20
  });
21
21
  monaco.editor.setTheme('myTheme');
22
+ try {
23
+ StandaloneServices.initialize({
24
+ ...getMessageServiceOverride(document.body)
25
+ });
26
+ }
27
+ catch (e) {
28
+ console.error(e);
29
+ }
22
30
  </script>
23
31
 
24
32
  <script>import { browser, dev } from '$app/env';
@@ -27,20 +35,12 @@ import { sendUserToast } from '../utils';
27
35
  import editorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker';
28
36
  import tsWorker from 'monaco-editor/esm/vs/language/typescript/ts.worker?worker';
29
37
  import { buildWorkerDefinition } from 'monaco-editor-workers';
30
- import { createEventDispatcher, onDestroy, onMount } from 'svelte';
31
38
  import getMessageServiceOverride from 'vscode/service-override/messages';
32
- import { StandaloneServices } from 'vscode/services';
39
+ import { createEventDispatcher, onDestroy, onMount } from 'svelte';
33
40
  import { BASH_INIT_CODE, DENO_INIT_CODE_CLEAR, GO_INIT_CODE, PYTHON_INIT_CODE_CLEAR } from '../script_helpers';
34
41
  import { createHash as randomHash, editorConfig, langToExt, updateOptions } from '../editorUtils';
35
42
  import { dirtyStore } from './common/confirmationModal/dirtyStore';
36
- try {
37
- StandaloneServices.initialize({
38
- ...getMessageServiceOverride(document.body)
39
- });
40
- }
41
- catch (e) {
42
- console.error(e);
43
- }
43
+ import { StandaloneServices } from 'vscode/services';
44
44
  let divEl = null;
45
45
  let editor;
46
46
  export let lang;
@@ -127,7 +127,7 @@ async function onScriptPick(e) {
127
127
  editor.insertAtCursor(`v, _ := wmill.GetVariable("${path}")`)
128
128
  } else if (lang == 'bash') {
129
129
  editor.insertAtCursor(`curl -s -H "Authorization: Bearer $WM_TOKEN" \\
130
- "$WM_BASE_URL/api/w/$WM_WORKSPACE/variables/get/${path}" \\
130
+ "$BASE_INTERNAL_URL/api/w/$WM_WORKSPACE/variables/get/${path}" \\
131
131
  | jq -r .value`)
132
132
  }
133
133
  sendUserToast(`${name} inserted at cursor`)
@@ -173,7 +173,7 @@ async function onScriptPick(e) {
173
173
  editor.insertAtCursor(`r, _ := wmill.GetResource("${path}")`)
174
174
  } else if (lang == 'bash') {
175
175
  editor.insertAtCursor(`curl -s -H "Authorization: Bearer $WM_TOKEN" \\
176
- "$WM_BASE_URL/api/w/$WM_WORKSPACE/resources/get/${path}" \\
176
+ "$BASE_INTERNAL_URL/api/w/$WM_WORKSPACE/resources/get/${path}" \\
177
177
  | jq -r .value`)
178
178
  }
179
179
  sendUserToast(`${path} inserted at cursor`)
@@ -3,11 +3,12 @@ import { page } from '$app/stores';
3
3
  import { FlowService, ScheduleService } from '../gen';
4
4
  import { userStore, workspaceStore } from '../stores';
5
5
  import { encodeState, formatCron, loadHubScripts, sendUserToast, setQueryWithoutLoad } from '../utils';
6
- import { faEye, faPen, faSave } from '@fortawesome/free-solid-svg-icons';
6
+ import { faCalendarAlt, faEye, faPen, faSave } from '@fortawesome/free-solid-svg-icons';
7
7
  import { setContext } from 'svelte';
8
+ import { Icon } from 'svelte-awesome';
8
9
  import { writable } from 'svelte/store';
9
10
  import CenteredPage from './CenteredPage.svelte';
10
- import { Button, Drawer, DrawerContent } from './common';
11
+ import { Badge, Button, Drawer, DrawerContent } from './common';
11
12
  import { dirtyStore } from './common/confirmationModal/dirtyStore';
12
13
  import UnsavedConfirmationModal from './common/confirmationModal/UnsavedConfirmationModal.svelte';
13
14
  import { OFFSET } from './CronInput.svelte';
@@ -26,18 +27,23 @@ export let loading = false;
26
27
  let pathError = '';
27
28
  async function createSchedule(path) {
28
29
  const { cron, args, enabled } = $scheduleStore;
29
- await ScheduleService.createSchedule({
30
- workspace: $workspaceStore,
31
- requestBody: {
32
- path: path,
33
- schedule: formatCron(cron),
34
- offset: OFFSET,
35
- script_path: path,
36
- is_flow: true,
37
- args,
38
- enabled
39
- }
40
- });
30
+ try {
31
+ await ScheduleService.createSchedule({
32
+ workspace: $workspaceStore,
33
+ requestBody: {
34
+ path: path,
35
+ schedule: formatCron(cron),
36
+ offset: OFFSET,
37
+ script_path: path,
38
+ is_flow: true,
39
+ args,
40
+ enabled
41
+ }
42
+ });
43
+ }
44
+ catch (err) {
45
+ sendUserToast(`The primary schedule could not be created: ${err}`, true);
46
+ }
41
47
  }
42
48
  async function saveFlow() {
43
49
  const flow = cleanInputs($flowStore);
@@ -72,23 +78,19 @@ async function saveFlow() {
72
78
  });
73
79
  const scheduleExists = await ScheduleService.existsSchedule({
74
80
  workspace: $workspaceStore ?? '',
75
- path: initialPath
81
+ path: flow.path
76
82
  });
77
83
  if (scheduleExists) {
78
84
  const schedule = await ScheduleService.getSchedule({
79
85
  workspace: $workspaceStore ?? '',
80
- path: initialPath
86
+ path: flow.path
81
87
  });
82
- if (schedule.path != flow.path ||
83
- JSON.stringify(schedule.args) != JSON.stringify(args) ||
84
- schedule.schedule != cron) {
88
+ if (JSON.stringify(schedule.args) != JSON.stringify(args) || schedule.schedule != cron) {
85
89
  await ScheduleService.updateSchedule({
86
90
  workspace: $workspaceStore ?? '',
87
- path: initialPath,
91
+ path: flow.path,
88
92
  requestBody: {
89
93
  schedule: formatCron(cron),
90
- script_path: flow.path,
91
- is_flow: true,
92
94
  args
93
95
  }
94
96
  });
@@ -178,10 +180,24 @@ let flowViewer;
178
180
  size="sm"
179
181
  on:click={flowViewer.openDrawer}
180
182
  >
181
- View Graph
183
+ Graph
182
184
  </Button>
183
185
  </div>
184
186
  <div class="gap-1 flex-row hidden md:flex shrink overflow-hidden">
187
+ {#if $scheduleStore.enabled}
188
+ <Button
189
+ btnClasses="hidden lg:inline-flex"
190
+ startIcon={{ icon: faCalendarAlt }}
191
+ variant="contained"
192
+ color="light"
193
+ size="xs"
194
+ on:click={async () => {
195
+ select('settings-schedule')
196
+ }}
197
+ >
198
+ {$scheduleStore.cron ?? ''}
199
+ </Button>
200
+ {/if}
185
201
  <Button
186
202
  btnClasses="hidden lg:inline-flex"
187
203
  startIcon={{ icon: faPen }}
@@ -189,7 +205,7 @@ let flowViewer;
189
205
  color="light"
190
206
  size="xs"
191
207
  on:click={async () => {
192
- select('settings')
208
+ select('settings-metadata')
193
209
  document.getElementById('path')?.focus()
194
210
  }}
195
211
  >
@@ -201,7 +217,7 @@ let flowViewer;
201
217
  color="light"
202
218
  size="xs"
203
219
  on:click={async () => {
204
- select('settings')
220
+ select('settings-metadata')
205
221
  document.getElementById('flow-summary')?.focus()
206
222
  }}
207
223
  >
@@ -72,7 +72,9 @@ let topHeight = 0;
72
72
  <div class="grid grid-cols-3 w-full">
73
73
  <div
74
74
  bind:clientHeight={topHeight}
75
- class="{noSide ? 'col-span-3' : 'col-span-2'} w-full border border-gray-400 h-screen"
75
+ class="{noSide
76
+ ? 'col-span-3'
77
+ : 'sm:col-span-2 col-span-3'} w-full border border-gray-400 h-screen"
76
78
  class:overflow-auto={overflowAuto}
77
79
  >
78
80
  <FlowGraph
@@ -83,7 +85,9 @@ let topHeight = 0;
83
85
  />
84
86
  </div>
85
87
  {#if !noSide}
86
- <div class="w-full border-r border-b border-t border-gray-400 min-h-[150px] p-2 overflow-auto">
88
+ <div
89
+ class="w-full border-r border-b border-t border-gray-400 min-h-[150px] p-2 overflow-auto hidden sm:block"
90
+ >
87
91
  {#if stepDetail == undefined}
88
92
  <span class="font-black text-lg w-full my-4">
89
93
  <span>Click on a step to see its details</span>
@@ -2,10 +2,14 @@
2
2
  import Icon from 'svelte-awesome';
3
3
  import { displayDaysAgo } from '../utils';
4
4
  import { faCalendar, faClock, faRobot, faScroll, faUser, faBarsStaggered } from '@fortawesome/free-solid-svg-icons';
5
+ import ScheduleEditor from './ScheduleEditor.svelte';
5
6
  export let job;
6
7
  const SMALL_ICON_SCALE = 0.7;
8
+ let scheduleEditor;
7
9
  </script>
8
10
 
11
+ <ScheduleEditor bind:this={scheduleEditor} />
12
+
9
13
  <div class="rounded-md p-3 bg-gray-50 shadow-sm sm:text-sm md:text-base" style="min-height: 150px;">
10
14
  <JobStatus {job} />
11
15
  <div>
@@ -36,9 +40,10 @@ const SMALL_ICON_SCALE = 0.7;
36
40
  {:else if job && job.schedule_path}
37
41
  <Icon class="text-gray-700" data={faCalendar} scale={SMALL_ICON_SCALE} />
38
42
  <span
39
- >Triggered by the schedule: <a
40
- href={`/schedule/add?edit=${job.schedule_path}&isFlow=${job.job_kind == 'flow'}`}
41
- >{job.schedule_path}</a
43
+ >Triggered by the schedule: <button
44
+ class="break-words text-sm text-blue-600 font-normal"
45
+ on:click={() => scheduleEditor?.openEdit(job.schedule_path ?? '', job.job_kind == 'flow')}
46
+ >{job.schedule_path}</button
42
47
  ></span
43
48
  >
44
49
  {/if}
@@ -27,9 +27,9 @@ function toAny(x) {
27
27
  </script>
28
28
 
29
29
  <Tabs bind:selected={tab}>
30
- <Tab value="ui">Flow rendered</Tab>
30
+ <Tab value="ui">Graph</Tab>
31
31
  <Tab value="json">Json</Tab>
32
- <Tab value="schema">Input schema of the flow</Tab>
32
+ <Tab value="schema">Input Schema</Tab>
33
33
 
34
34
  <svelte:fragment slot="content">
35
35
  <TabContent value="ui">