windmill-components 1.22.42 → 1.28.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.
Files changed (250) hide show
  1. package/components/AppConnect.svelte +93 -47
  2. package/components/AppConnect.svelte.d.ts +2 -2
  3. package/components/ArgInfo.svelte +0 -5
  4. package/components/ArgInput.svelte +91 -64
  5. package/components/ArgInput.svelte.d.ts +8 -3
  6. package/components/Button.svelte +4 -4
  7. package/components/CenteredPage.svelte +1 -1
  8. package/components/CollapseLink.svelte +12 -0
  9. package/components/CollapseLink.svelte.d.ts +19 -0
  10. package/components/CronInput.svelte +84 -0
  11. package/components/CronInput.svelte.d.ts +18 -0
  12. package/components/DisplayResult.svelte +28 -15
  13. package/components/Editor.svelte +136 -66
  14. package/components/Editor.svelte.d.ts +2 -0
  15. package/components/EditorBar.svelte +56 -45
  16. package/components/FlowBuilder.svelte +155 -70
  17. package/components/FlowEditor.svelte +79 -200
  18. package/components/FlowEditor.svelte.d.ts +3 -2
  19. package/components/FlowJobResult.svelte +1 -1
  20. package/components/FlowPreview.svelte +18 -24
  21. package/components/FlowPreviewContent.svelte +68 -0
  22. package/components/FlowPreviewContent.svelte.d.ts +21 -0
  23. package/components/FlowStatusViewer.svelte +85 -37
  24. package/components/FlowStatusViewer.svelte.d.ts +3 -2
  25. package/components/FlowViewer.svelte +85 -45
  26. package/components/FlowViewer.svelte.d.ts +2 -1
  27. package/components/IconedResourceType.svelte +30 -5
  28. package/components/InputTransformForm.svelte +209 -0
  29. package/components/InputTransformForm.svelte.d.ts +26 -0
  30. package/components/InputTransformsViewer.svelte +19 -0
  31. package/components/InputTransformsViewer.svelte.d.ts +17 -0
  32. package/components/InviteGlobalUser.svelte +2 -2
  33. package/components/InviteUser.svelte +2 -2
  34. package/components/JobStatus.svelte +32 -25
  35. package/components/Modal.svelte +44 -42
  36. package/components/ModuleStep.svelte +94 -79
  37. package/components/ObjectResourceInput.svelte +58 -38
  38. package/components/ObjectTypeNarrowing.svelte +4 -19
  39. package/components/Path.svelte +1 -0
  40. package/components/Path.svelte.d.ts +1 -1
  41. package/components/RadioButton.svelte +11 -96
  42. package/components/RadioButton.svelte.d.ts +4 -2
  43. package/components/ResourceEditor.svelte +4 -5
  44. package/components/ResourceEditor.svelte.d.ts +2 -2
  45. package/components/ResourcePicker.svelte +25 -2
  46. package/components/ResourcePicker.svelte.d.ts +3 -0
  47. package/components/ResourceTypePicker.svelte +17 -29
  48. package/components/ResourceTypePicker.svelte.d.ts +1 -0
  49. package/components/RunForm.svelte +14 -15
  50. package/components/RunForm.svelte.d.ts +1 -1
  51. package/components/SchemaEditor.svelte +87 -71
  52. package/components/SchemaEditor.svelte.d.ts +2 -0
  53. package/components/SchemaEditorProperty.svelte +11 -0
  54. package/components/SchemaEditorProperty.svelte.d.ts +17 -0
  55. package/components/SchemaForm.svelte +21 -127
  56. package/components/SchemaForm.svelte.d.ts +3 -4
  57. package/components/SchemaModal.svelte +20 -33
  58. package/components/SchemaModal.svelte.d.ts +1 -1
  59. package/components/SchemaViewer.svelte +4 -6
  60. package/components/ScriptBuilder.svelte +40 -43
  61. package/components/ScriptEditor.svelte +71 -66
  62. package/components/ScriptPicker.svelte +10 -12
  63. package/components/ScriptPicker.svelte.d.ts +1 -1
  64. package/components/ScriptSchema.svelte +0 -5
  65. package/components/ShareModal.svelte +1 -1
  66. package/components/SharedBadge.svelte +12 -10
  67. package/components/StringTypeNarrowing.svelte +8 -4
  68. package/components/StringTypeNarrowing.svelte.d.ts +1 -0
  69. package/components/TableCustom.svelte +7 -9
  70. package/components/TableSimple.svelte +1 -1
  71. package/components/Toggle.svelte +8 -10
  72. package/components/Toggle.svelte.d.ts +5 -11
  73. package/components/Tooltip.svelte +3 -2
  74. package/components/VariableEditor.svelte +21 -6
  75. package/components/flows/CopyFirstStepSchema.svelte +7 -5
  76. package/components/flows/DynamicInputHelpBox.svelte +1 -1
  77. package/components/flows/FlowBox.svelte +3 -0
  78. package/components/flows/FlowBox.svelte.d.ts +23 -0
  79. package/components/flows/FlowBoxHeader.svelte +9 -0
  80. package/components/flows/FlowBoxHeader.svelte.d.ts +18 -0
  81. package/components/flows/FlowInput.svelte +20 -0
  82. package/components/flows/FlowInput.svelte.d.ts +14 -0
  83. package/components/flows/FlowInputs.svelte +7 -3
  84. package/components/flows/FlowModuleHeader.svelte +42 -40
  85. package/components/flows/FlowModuleHeader.svelte.d.ts +1 -1
  86. package/components/flows/FlowSettings.svelte +174 -0
  87. package/components/flows/FlowSettings.svelte.d.ts +21 -0
  88. package/components/flows/flowStore.d.ts +5 -2
  89. package/components/flows/flowStore.js +65 -9
  90. package/components/flows/pickers/FlowScriptPicker.svelte +6 -1
  91. package/components/flows/pickers/FlowScriptPicker.svelte.d.ts +1 -0
  92. package/components/flows/utils.d.ts +11 -7
  93. package/components/flows/utils.js +114 -45
  94. package/components/icons/AirtableIcon.svelte +17 -0
  95. package/components/icons/AirtableIcon.svelte.d.ts +17 -0
  96. package/components/icons/GCloudIcon.svelte +16 -0
  97. package/components/icons/GCloudIcon.svelte.d.ts +17 -0
  98. package/components/icons/GItlabIcon.svelte +16 -0
  99. package/components/icons/GItlabIcon.svelte.d.ts +17 -0
  100. package/components/icons/GSheetsIcon.svelte +16 -0
  101. package/components/icons/GSheetsIcon.svelte.d.ts +17 -0
  102. package/components/icons/GcalIcon.svelte +16 -0
  103. package/components/icons/GcalIcon.svelte.d.ts +17 -0
  104. package/components/icons/GdriveIcon.svelte +16 -0
  105. package/components/icons/GdriveIcon.svelte.d.ts +17 -0
  106. package/components/icons/GmailIcon.svelte +16 -0
  107. package/components/icons/GmailIcon.svelte.d.ts +17 -0
  108. package/components/icons/PostgresIcon.svelte +8 -49
  109. package/components/icons/Slack.svelte +9 -18
  110. package/components/icons/TogglIcon.svelte +59 -0
  111. package/components/icons/TogglIcon.svelte.d.ts +17 -0
  112. package/components/propertyPicker/ObjectViewer.svelte +35 -37
  113. package/components/propertyPicker/ObjectViewer.svelte.d.ts +2 -0
  114. package/components/propertyPicker/OverlayPropertyPicker.svelte +53 -53
  115. package/components/propertyPicker/OverlayPropertyPicker.svelte.d.ts +5 -2
  116. package/components/propertyPicker/PropPicker.svelte +13 -15
  117. package/components/propertyPicker/PropPicker.svelte.d.ts +1 -1
  118. package/components/propertyPicker/WarningMessage.svelte +14 -41
  119. package/components/propertyPicker/WarningMessage.svelte.d.ts +11 -8
  120. package/components/propertyPicker/utils.d.ts +1 -0
  121. package/components/propertyPicker/utils.js +25 -0
  122. package/gen/core/OpenAPI.js +1 -1
  123. package/gen/index.d.ts +11 -2
  124. package/gen/index.js +1 -2
  125. package/gen/models/CompletedJob.d.ts +1 -1
  126. package/gen/models/Flow.d.ts +3 -13
  127. package/gen/models/FlowMetadata.d.ts +9 -0
  128. package/gen/models/FlowMetadata.js +4 -0
  129. package/gen/models/FlowModuleValue.d.ts +5 -22
  130. package/gen/models/FlowModuleValue.js +1 -15
  131. package/gen/models/ForloopFlow.d.ts +8 -0
  132. package/gen/models/ForloopFlow.js +4 -0
  133. package/gen/models/InputTransform.d.ts +3 -12
  134. package/gen/models/InputTransform.js +1 -8
  135. package/gen/models/JavascriptTransform.d.ts +4 -0
  136. package/gen/models/JavascriptTransform.js +4 -0
  137. package/gen/models/MainArgSignature.d.ts +1 -1
  138. package/gen/models/NewSchedule.d.ts +1 -0
  139. package/gen/models/OpenFlowWPath.d.ts +4 -0
  140. package/gen/models/OpenFlowWPath.js +4 -0
  141. package/gen/models/PathFlow.d.ts +4 -0
  142. package/gen/models/PathFlow.js +4 -0
  143. package/gen/models/PathScript.d.ts +4 -0
  144. package/gen/models/PathScript.js +4 -0
  145. package/gen/models/RawScript.d.ts +12 -0
  146. package/gen/models/RawScript.js +11 -0
  147. package/gen/models/Schedule.d.ts +1 -1
  148. package/gen/models/StaticTransform.d.ts +4 -0
  149. package/gen/models/StaticTransform.js +4 -0
  150. package/gen/models/TokenResponse.d.ts +3 -3
  151. package/gen/models/Usage.d.ts +5 -0
  152. package/gen/models/Usage.js +4 -0
  153. package/gen/models/User.d.ts +2 -0
  154. package/gen/schemas/$AuditLog.d.ts +32 -0
  155. package/gen/schemas/$AuditLog.js +35 -0
  156. package/gen/schemas/$CompletedJob.d.ts +98 -0
  157. package/gen/schemas/$CompletedJob.js +103 -0
  158. package/gen/schemas/$ContextualVariable.d.ts +16 -0
  159. package/gen/schemas/$ContextualVariable.js +19 -0
  160. package/gen/schemas/$CreateResource.d.ts +22 -0
  161. package/gen/schemas/$CreateResource.js +25 -0
  162. package/gen/schemas/$CreateVariable.d.ts +26 -0
  163. package/gen/schemas/$CreateVariable.js +29 -0
  164. package/gen/schemas/$CreateWorkspace.d.ts +20 -0
  165. package/gen/schemas/$CreateWorkspace.js +23 -0
  166. package/gen/schemas/$EditResource.d.ts +13 -0
  167. package/gen/schemas/$EditResource.js +16 -0
  168. package/gen/schemas/$EditResourceType.d.ts +10 -0
  169. package/gen/schemas/$EditResourceType.js +13 -0
  170. package/gen/schemas/$EditSchedule.d.ts +20 -0
  171. package/gen/schemas/$EditSchedule.js +23 -0
  172. package/gen/schemas/$EditVariable.d.ts +16 -0
  173. package/gen/schemas/$EditVariable.js +19 -0
  174. package/gen/schemas/$EditWorkspaceUser.d.ts +7 -0
  175. package/gen/schemas/$EditWorkspaceUser.js +10 -0
  176. package/gen/schemas/$Flow.d.ts +23 -0
  177. package/gen/schemas/$Flow.js +26 -0
  178. package/gen/schemas/$FlowMetadata.d.ts +31 -0
  179. package/gen/schemas/$FlowMetadata.js +34 -0
  180. package/gen/schemas/$FlowPreview.d.ts +80 -0
  181. package/gen/schemas/$FlowPreview.js +83 -0
  182. package/gen/schemas/$GlobalUserInfo.d.ts +26 -0
  183. package/gen/schemas/$GlobalUserInfo.js +29 -0
  184. package/gen/schemas/$Group.d.ts +23 -0
  185. package/gen/schemas/$Group.js +26 -0
  186. package/gen/schemas/$Job.d.ts +17 -0
  187. package/gen/schemas/$Job.js +20 -0
  188. package/gen/schemas/$ListableVariable.d.ts +35 -0
  189. package/gen/schemas/$ListableVariable.js +38 -0
  190. package/gen/schemas/$Login.d.ts +12 -0
  191. package/gen/schemas/$Login.js +15 -0
  192. package/gen/schemas/$MainArgSignature.d.ts +50 -0
  193. package/gen/schemas/$MainArgSignature.js +53 -0
  194. package/gen/schemas/$NewSchedule.d.ts +30 -0
  195. package/gen/schemas/$NewSchedule.js +33 -0
  196. package/gen/schemas/$NewToken.d.ts +11 -0
  197. package/gen/schemas/$NewToken.js +14 -0
  198. package/gen/schemas/$NewUser.d.ts +16 -0
  199. package/gen/schemas/$NewUser.js +19 -0
  200. package/gen/schemas/$Preview.d.ts +19 -0
  201. package/gen/schemas/$Preview.js +22 -0
  202. package/gen/schemas/$QueuedJob.d.ts +139 -0
  203. package/gen/schemas/$QueuedJob.js +144 -0
  204. package/gen/schemas/$Resource.d.ts +31 -0
  205. package/gen/schemas/$Resource.js +34 -0
  206. package/gen/schemas/$ResourceType.d.ts +17 -0
  207. package/gen/schemas/$ResourceType.js +20 -0
  208. package/gen/schemas/$Schedule.d.ts +47 -0
  209. package/gen/schemas/$Schedule.js +50 -0
  210. package/gen/schemas/$Script.d.ts +77 -0
  211. package/gen/schemas/$Script.js +80 -0
  212. package/gen/schemas/$ScriptArgs.d.ts +6 -0
  213. package/gen/schemas/$ScriptArgs.js +9 -0
  214. package/gen/schemas/$SlackToken.d.ts +24 -0
  215. package/gen/schemas/$SlackToken.js +27 -0
  216. package/gen/schemas/$TokenResponse.d.ts +23 -0
  217. package/gen/schemas/$TokenResponse.js +26 -0
  218. package/gen/schemas/$TruncatedToken.d.ts +25 -0
  219. package/gen/schemas/$TruncatedToken.js +28 -0
  220. package/gen/schemas/$Usage.d.ts +13 -0
  221. package/gen/schemas/$Usage.js +16 -0
  222. package/gen/schemas/$User.d.ts +42 -0
  223. package/gen/schemas/$User.js +45 -0
  224. package/gen/schemas/$UserWorkspaceList.d.ts +28 -0
  225. package/gen/schemas/$UserWorkspaceList.js +31 -0
  226. package/gen/schemas/$WorkerPing.d.ts +31 -0
  227. package/gen/schemas/$WorkerPing.js +34 -0
  228. package/gen/schemas/$Workspace.d.ts +19 -0
  229. package/gen/schemas/$Workspace.js +22 -0
  230. package/gen/schemas/$WorkspaceInvite.d.ts +16 -0
  231. package/gen/schemas/$WorkspaceInvite.js +19 -0
  232. package/gen/services/FlowService.d.ts +24 -23
  233. package/gen/services/FlowService.js +14 -0
  234. package/gen/services/JobService.d.ts +1 -1
  235. package/gen/services/ScriptService.d.ts +13 -19
  236. package/gen/services/ScriptService.js +0 -14
  237. package/gen/services/WorkspaceService.d.ts +1 -1
  238. package/gen/services/WorkspaceService.js +1 -1
  239. package/infer.js +8 -1
  240. package/package.json +85 -16
  241. package/script_helpers.d.ts +1 -1
  242. package/script_helpers.js +11 -13
  243. package/sql.d.ts +89 -0
  244. package/sql.js +817 -0
  245. package/stores.d.ts +0 -1
  246. package/stores.js +0 -6
  247. package/utils.d.ts +12 -5
  248. package/utils.js +55 -9
  249. package/components/RadioButtonV2.svelte +0 -33
  250. package/components/RadioButtonV2.svelte.d.ts +0 -20
@@ -1,14 +1,16 @@
1
- <script>import { FlowModuleValue } from '../gen';
2
- import { addPreviewResult, previewResults } from '../stores';
3
- import { buildExtraLib, objectToTsType, schemaToObject, schemaToTsType } from '../utils';
4
- import { faRobot } from '@fortawesome/free-solid-svg-icons';
1
+ <script>import { RawScript } from '../gen';
2
+ import { previewResults } from '../stores';
3
+ import { buildExtraLib, objectToTsType, schemaToTsType } from '../utils';
4
+ import { faChevronDown, faChevronUp, faPlus } from '@fortawesome/free-solid-svg-icons';
5
5
  import Icon from 'svelte-awesome';
6
6
  import Editor from './Editor.svelte';
7
7
  import EditorBar from './EditorBar.svelte';
8
8
  import FlowPreview from './FlowPreview.svelte';
9
+ import FlowBox from './flows/FlowBox.svelte';
9
10
  import FlowInputs from './flows/FlowInputs.svelte';
10
11
  import FlowModuleHeader from './flows/FlowModuleHeader.svelte';
11
- import { createInlineScriptModule, flowStore, loadSchema, pickScript, schemasStore } from './flows/flowStore';
12
+ import { addModule, createInlineScriptModule, flowStore, loadSchema, pickScript, schemasStore } from './flows/flowStore';
13
+ import { getPickableProperties, jobsToResults } from './flows/utils';
12
14
  import SchemaForm from './SchemaForm.svelte';
13
15
  import Tooltip from './Tooltip.svelte';
14
16
  export let open;
@@ -18,73 +20,91 @@ export let mod;
18
20
  export let args = {};
19
21
  let editor;
20
22
  let websocketAlive = { pyright: false, black: false, deno: false };
23
+ let pickableProperties = undefined;
24
+ let bigEditor = false;
21
25
  $: schema = $schemasStore[i];
22
- $: shouldPick = mod.value.path === '' && mod.value.language === undefined;
23
- $: previousSchema = i === 0 ? schemaToObject($flowStore?.schema) : $previewResults[i];
24
- $: extraLib = buildExtraLib(i === 0 ? schemaToTsType($flowStore?.schema) : objectToTsType($previewResults[i]));
26
+ $: shouldPick = 'path' in mod.value && mod.value.path === '' && !('language' in mod.value);
27
+ $: pickableProperties = getPickableProperties($flowStore?.schema, args, $previewResults, mode, i);
28
+ $: extraLib = buildExtraLib(schemaToTsType($flowStore?.schema), i === 0 ? schemaToTsType($flowStore?.schema) : objectToTsType($previewResults[i]));
29
+ const isTrigger = mode === 'pull' && i === 0;
25
30
  </script>
26
31
 
27
- <li class="flex flex-row flex-shrink max-w-full mx-auto mt-16">
28
- <div
29
- class="bg-white border border-gray xl-rounded shadow-lg w-full max-w-4xl mx-4 md:mx-auto"
30
- id="module-{i}"
31
- >
32
- <div class="flex items-center justify-between flex-wra p-4 sm:px-6 z-10">
33
- <FlowModuleHeader bind:open {mod} {i} {shouldPick}>
34
- <div>
35
- <h3 class="text-lg font-bold text-gray-900">Step {i + 1}</h3>
36
- {#if i == 0 && mode == 'pull'}
37
- <h3 class="font-bold">
38
- Trigger Script <Tooltip
39
- >When a flow is 'Pull', the first step is a trigger script. Trigger scripts are
40
- scripts that must return a list which are the new items to be treated one by one by
41
- the rest of the flow, usually the list of new items since last time the flow was
42
- run. One can retrieve the item in the next step using `previous_result._value`. To
43
- easily compute the diff, windmill provides some helpers under the form of
44
- `getInternalState` and `setInternalState`.</Tooltip
45
- >
46
- </h3>{/if}
47
- <p>
48
- {#if mod.value.path}
49
- {mod.value.path}
50
- {/if}
51
- {#if mod.value.language}
52
- Inline {mod.value.language}
53
- {/if}
54
- {#if !mod.value.path && !mod.value.language}
55
- Select a script
56
- {/if}
57
- </p>
58
- </div>
59
- </FlowModuleHeader>
60
- </div>
61
- <div class="border-b border-gray-200" />
32
+ <button
33
+ class="rounded-full h-10 w-10 bg-white border-2 border-gray-400"
34
+ on:click={() => {
35
+ addModule(i)
36
+ open = i
37
+ }}
38
+ >
39
+ <Icon class="text-gray-400 mb-1" data={faPlus} />
40
+ </button>
41
+ <FlowBox>
42
+ <div id="module-{i}">
43
+ <FlowModuleHeader bind:open {mod} {i} {shouldPick}>
44
+ <div>
45
+ <h3 class="text-lg font-bold text-gray-900">Step {i + 1}</h3>
46
+ {#if isTrigger}
47
+ <h3 class="font-bold">
48
+ Trigger Script
49
+ <Tooltip>
50
+ When a flow is 'Pull', the first step is a trigger script. Trigger scripts are scripts
51
+ that must return a list which are the new items to be treated one by one by the rest
52
+ of the flow, usually the list of new items since last time the flow was run. One can
53
+ retrieve the item in the next step using `previous_result._value`. To easily compute
54
+ the diff, windmill provides some helpers under the form of `getInternalState` and
55
+ `setInternalState`.
56
+ </Tooltip>
57
+ </h3>
58
+ {/if}
59
+ <p>
60
+ {#if 'path' in mod.value && mod.value.path}
61
+ {mod.value.path}
62
+ {/if}
63
+ {#if 'language' in mod.value && mod.value.language}
64
+ Inline {mod.value.language}
65
+ {/if}
66
+ {#if !('path' in mod.value) && !('language' in mod.value)}
67
+ Select a script
68
+ {/if}
69
+ </p>
70
+ </div>
71
+ </FlowModuleHeader>
62
72
  {#if open == i}
63
73
  <div class="p-6">
64
74
  {#if shouldPick}
65
75
  <FlowInputs
66
- isTrigger={mode == 'pull' && i == 0}
76
+ {isTrigger}
67
77
  on:pick={(e) => pickScript(e.detail.path, i)}
68
78
  on:new={(e) => createInlineScriptModule(e.detail.language, i, mode)}
69
79
  />
70
80
  {/if}
71
- {#if mod.value.type === FlowModuleValue.type.RAWSCRIPT}
72
- <div class="p-1 overflow-hidden">
81
+ {#if mod.value.type === 'rawscript'}
82
+ <div class="mb-2 overflow-hidden">
73
83
  <EditorBar {editor} {websocketAlive} lang={mod.value.language ?? 'deno'} />
74
84
  </div>
75
- <Editor
76
- bind:websocketAlive
77
- bind:this={editor}
78
- class="h-80 border p-2 rounded"
79
- bind:code={mod.value.content}
80
- deno={mod.value.language === FlowModuleValue.language.DENO}
81
- />
85
+ <div>
86
+ <Editor
87
+ bind:websocketAlive
88
+ bind:this={editor}
89
+ class="{bigEditor ? 'h-2/3' : 'h-80'} border p-2 rounded"
90
+ bind:code={mod.value.content}
91
+ deno={mod.value.language === RawScript.language.DENO}
92
+ automaticLayout={true}
93
+ on:blur={() => loadSchema(i)}
94
+ formatAction={() => loadSchema(i)}
95
+ />
96
+ <button
97
+ class="w-full text-center"
98
+ on:click={() => {
99
+ bigEditor = !bigEditor
100
+ }}><Icon data={bigEditor ? faChevronUp : faChevronDown} scale={1.0} /></button
101
+ >
102
+ </div>
82
103
  <div class="mt-2 mb-8">
83
- <button class="default-primary-button-v2" on:click={() => loadSchema(i)}>
84
- <Icon data={faRobot} class="w-4 h-4 mr-2 -ml-2" />
85
-
86
- Infer step inputs from code
87
- </button>
104
+ <p class="text-gray-500 italic">
105
+ Move the focus outside of the text editor to recompute the input schema or press
106
+ Ctrl/Cmd+S
107
+ </p>
88
108
  </div>
89
109
  {/if}
90
110
  {#if !shouldPick}
@@ -94,7 +114,7 @@ $: extraLib = buildExtraLib(i === 0 ? schemaToTsType($flowStore?.schema) : objec
94
114
  {schema}
95
115
  {extraLib}
96
116
  {i}
97
- {previousSchema}
117
+ bind:pickableProperties
98
118
  bind:args={mod.input_transform}
99
119
  />
100
120
  {/if}
@@ -110,29 +130,24 @@ $: extraLib = buildExtraLib(i === 0 ? schemaToTsType($flowStore?.schema) : objec
110
130
  {mode}
111
131
  schemas={$schemasStore}
112
132
  on:change={(e) => {
113
- addPreviewResult(e.detail.result, i + 1)
133
+ previewResults.set(jobsToResults(e.detail))
114
134
  }}
115
135
  />
116
136
  </div>
117
- <div>
118
- <button class="w-full h-full" on:click={() => (open = -1)}>(-)</button>
119
- </div>
120
- {:else}
121
- <div>
122
- <button class="w-full h-full" on:click={() => (open = i)}>(+)</button>
123
- </div>
124
137
  {/if}
125
138
  {/if}
139
+ {#if open == i}
140
+ <div>
141
+ <button class="w-full h-full" on:click={() => (open = -1)}>
142
+ <Icon data={faChevronUp} scale={1.0} />
143
+ </button>
144
+ </div>
145
+ {:else}
146
+ <div>
147
+ <button class="w-full h-full" on:click={() => (open = i)}>
148
+ <Icon data={faChevronDown} scale={1.0} />
149
+ </button>
150
+ </div>
151
+ {/if}
126
152
  </div>
127
- </li>
128
- {#if i == 0 && mode == 'pull'}
129
- <li class="relative m-20 ">
130
- <div class="relative flex justify-center bg-white shadow p-2">
131
- Starting from here, the flow for loop over items from step 1's result above &nbsp;<Tooltip
132
- >This flow being in 'Pull' mode, the rest of the flow will for loop over the list of items
133
- returned by the trigger script right above. Retrieve the item value using
134
- `previous_result._value`</Tooltip
135
- >
136
- </div>
137
- </li>
138
- {/if}
153
+ </FlowBox>
@@ -1,61 +1,81 @@
1
1
  <script>import { ResourceService } from '../gen';
2
- import ResourcePicker from './ResourcePicker.svelte';
3
2
  import { workspaceStore } from '../stores';
4
- import SchemaForm from './SchemaForm.svelte';
5
3
  import RadioButton from './RadioButton.svelte';
4
+ import ResourcePicker from './ResourcePicker.svelte';
5
+ import SchemaForm from './SchemaForm.svelte';
6
6
  export let format;
7
7
  export let value;
8
8
  function isString(value) {
9
9
  return typeof value === 'string' || value instanceof String;
10
10
  }
11
- let path = isString(value) && value.length >= '$res:'.length ? value.substr('$res:'.length) : undefined;
11
+ let path = '';
12
12
  let args = {};
13
- if (!isString(value) && value) {
14
- args = value;
15
- }
16
13
  let schema = undefined;
17
14
  let isValid = true;
18
15
  let resourceTypeName = '';
16
+ let option = isString(value) || value == undefined ? 'resource' : 'raw';
17
+ $: format.startsWith('resource-') && loadSchema(format);
19
18
  async function loadSchema(format) {
20
19
  resourceTypeName = format.substring('resource-'.length);
21
20
  schema = (await ResourceService.getResourceType({ workspace: $workspaceStore, path: resourceTypeName })).schema;
22
21
  }
23
- let option = isString(value) || value == undefined ? 'resource' : 'raw';
24
- $: {
25
- if (option == 'resource') {
26
- value = `$res:${path}`;
22
+ function argToValue() {
23
+ value = args;
24
+ }
25
+ function resourceToValue() {
26
+ value = `$res:${path}`;
27
+ }
28
+ function isResource() {
29
+ return isString(value) && value.length >= '$res:'.length;
30
+ }
31
+ function valueToPath() {
32
+ if (!isString(value) && value) {
33
+ args = value;
34
+ }
35
+ if (isResource()) {
36
+ path = value.substr('$res:'.length);
27
37
  }
28
- else {
29
- value = args;
38
+ else if (value !== undefined && value !== '') {
39
+ option = 'raw';
30
40
  }
31
41
  }
32
- $: format.startsWith('resource-') && loadSchema(format);
42
+ $: value && valueToPath();
33
43
  </script>
34
44
 
35
- <div class="max-w-lg">
36
- <RadioButton
37
- options={[
38
- [`Resource (${resourceTypeName})`, 'resource'],
39
- [`Raw object value`, 'raw']
40
- ]}
41
- small={true}
42
- bind:value={option}
43
- />
44
- </div>
45
- <div class="mt-1" />
46
- {#if option == 'resource'}
47
- <ResourcePicker
48
- bind:value={path}
49
- resourceType={format.split('-').length > 1 ? format.substring('resource-'.length) : undefined}
50
- />
51
- {:else}
52
- <div class="border rounded p-5">
53
- <h2 class="mb-5">
54
- Object of <a target="_blank" href="/resources">resource type</a>
55
- {resourceTypeName}
56
- </h2>
57
- {#if !isString(args)}
58
- <SchemaForm {schema} bind:isValid bind:args />
45
+ <div class="flex flex-row w-full gap-2">
46
+ <div class="shrink w-40">
47
+ <RadioButton
48
+ options={[
49
+ [`Resource (${resourceTypeName})`, 'resource'],
50
+ [`Raw object value`, 'raw']
51
+ ]}
52
+ on:change={argToValue}
53
+ bind:value={option}
54
+ />
55
+ </div>
56
+ <div class="grow">
57
+ {#if option == 'resource'}
58
+ <ResourcePicker
59
+ on:refresh={() => loadSchema(format)}
60
+ on:change={(e) => {
61
+ path = e.detail
62
+ resourceToValue()
63
+ }}
64
+ bind:value={path}
65
+ resourceType={format.split('-').length > 1
66
+ ? format.substring('resource-'.length)
67
+ : undefined}
68
+ />
69
+ {:else}
70
+ <div class="border rounded p-5 w-full">
71
+ <h2 class="mb-5">
72
+ Object of <a target="_blank" href="/resources">resource type</a>
73
+ {resourceTypeName}
74
+ </h2>
75
+ {#if !isString(args)}
76
+ <SchemaForm {schema} bind:isValid bind:args />
77
+ {/if}
78
+ </div>
59
79
  {/if}
60
80
  </div>
61
- {/if}
81
+ </div>
@@ -1,25 +1,10 @@
1
- <script>import RadioButton from './RadioButton.svelte';
2
- import ResourceTypePicker from './ResourceTypePicker.svelte';
1
+ <script>import ResourceTypePicker from './ResourceTypePicker.svelte';
3
2
  export let format;
4
- let kind = format?.startsWith('resource') ? 'resource' : 'none';
5
3
  let resource = format?.startsWith('resource-')
6
4
  ? format.substring('resource-'.length)
7
5
  : undefined;
8
- $: format =
9
- kind == 'resource' ? (resource != undefined ? `resource-${resource}` : 'resource') : undefined;
6
+ $: format = resource != undefined ? `resource-${resource}` : undefined;
10
7
  </script>
11
8
 
12
- <RadioButton
13
- label="Kind"
14
- small={true}
15
- options={[
16
- ['None', 'none'],
17
- ['Resource Type', 'resource']
18
- ]}
19
- bind:value={kind}
20
- />
21
-
22
- {#if kind == 'resource'}
23
- <div class="mt-1" />
24
- <ResourceTypePicker bind:value={resource} />
25
- {/if}
9
+ <div class="mt-2" />
10
+ <ResourceTypePicker bind:value={resource} nonePickable={true} />
@@ -155,6 +155,7 @@ $: {
155
155
  <label class="block col-span-2">
156
156
  <span class="text-gray-700 text-sm">Name<span class="text-red-600 text-sm">*</span></span>
157
157
  <input
158
+ autofocus
158
159
  bind:value={meta.name}
159
160
  placeholder={namePlaceholder}
160
161
  class={error === ''
@@ -7,7 +7,7 @@ declare const __propDef: {
7
7
  initialPath: string;
8
8
  path?: string | undefined;
9
9
  error?: string | undefined;
10
- kind: "resource" | "script" | "schedule" | "variable" | "flow";
10
+ kind: "flow" | "script" | "resource" | "schedule" | "variable";
11
11
  getPath?: (() => string) | undefined;
12
12
  reset?: (() => Promise<void>) | undefined;
13
13
  };
@@ -1,16 +1,19 @@
1
1
  <script>export let label = '';
2
2
  export let options;
3
3
  export let value;
4
- export let small = false;
5
4
  import { createEventDispatcher } from 'svelte';
5
+ import Tooltip from './Tooltip.svelte';
6
6
  const dispatch = createEventDispatcher();
7
7
  </script>
8
8
 
9
- <fieldset>
9
+ <fieldset class="w-full">
10
10
  <legend class="sr-only">{label}</legend>
11
- <div class="flex flex-row gap-2">
11
+ <div class="flex flex-row flex-wrap gap-2 items-center mb-2 w-full">
12
12
  {#each options as [label, val]}
13
- <label class:selected={val == value} class={small ? 'py-0' : 'py-3'}>
13
+ <label
14
+ class:item-button-selected={val == value}
15
+ class="item-button text-center text-sm h-full p-2 grow"
16
+ >
14
17
  <input
15
18
  type="radio"
16
19
  value={val}
@@ -19,99 +22,11 @@ const dispatch = createEventDispatcher();
19
22
  aria-labelledby="memory-option-0-label"
20
23
  on:click={() => dispatch('change', val)}
21
24
  />
22
- <p>{label}</p>
25
+ <p>
26
+ {#if typeof label !== 'string'}{label.title} <Tooltip>{label.desc}</Tooltip>
27
+ {:else}{label}{/if}
28
+ </p>
23
29
  </label>
24
30
  {/each}
25
31
  </div>
26
32
  </fieldset>
27
-
28
- <style>
29
- label {
30
-
31
- display: flex;
32
-
33
- cursor: pointer;
34
-
35
- align-items: center;
36
-
37
- justify-content: center;
38
-
39
- border-radius: 0.375rem;
40
-
41
- border-width: 1px;
42
-
43
- padding-left: 0.75rem;
44
-
45
- padding-right: 0.75rem;
46
-
47
- font-size: 0.875rem;
48
-
49
- line-height: 1.25rem;
50
-
51
- font-weight: 500;
52
-
53
- text-transform: uppercase
54
- }
55
-
56
- label:focus {
57
-
58
- outline: 2px solid transparent;
59
-
60
- outline-offset: 2px
61
- }
62
-
63
- @media (min-width: 640px) {
64
-
65
- label {
66
-
67
- flex: 1 1 0%
68
- }
69
- }
70
-
71
- label.selected {
72
-
73
- display: flex;
74
-
75
- cursor: pointer;
76
-
77
- align-items: center;
78
-
79
- justify-content: center;
80
-
81
- border-radius: 0.375rem;
82
-
83
- border-width: 1px;
84
-
85
- background-color: rgb(59 130 246 / 0.7);
86
-
87
- padding-left: 0.75rem;
88
-
89
- padding-right: 0.75rem;
90
-
91
- font-size: 0.875rem;
92
-
93
- line-height: 1.25rem;
94
-
95
- font-weight: 500;
96
-
97
- text-transform: uppercase;
98
-
99
- --tw-text-opacity: 1;
100
-
101
- color: rgb(255 255 255 / var(--tw-text-opacity))
102
- }
103
-
104
- label.selected:focus {
105
-
106
- outline: 2px solid transparent;
107
-
108
- outline-offset: 2px
109
- }
110
-
111
- @media (min-width: 640px) {
112
-
113
- label.selected {
114
-
115
- flex: 1 1 0%
116
- }
117
- }</style>
@@ -2,9 +2,11 @@ import { SvelteComponentTyped } from "svelte";
2
2
  declare const __propDef: {
3
3
  props: {
4
4
  label?: string | undefined;
5
- options: [string, any][];
5
+ options: [string | {
6
+ title: string;
7
+ desc: string;
8
+ }, any][];
6
9
  value: any;
7
- small?: boolean | undefined;
8
10
  };
9
11
  events: {
10
12
  change: CustomEvent<any>;
@@ -16,8 +16,7 @@ let pathError = '';
16
16
  let step = 1;
17
17
  let resourceToEdit;
18
18
  let description = '';
19
- let DESCRIPTION_PLACEHOLDER = `You can use markdown to style your description.
20
- A good way to make resources user friendly is to link to a default script for your resource [example](scripts/add?template=f2d1dc8df796d9e8)`;
19
+ let DESCRIPTION_PLACEHOLDER = `You can use markdown to style your description`;
21
20
  let selectedResourceType;
22
21
  let resourceType;
23
22
  let resourceSchema;
@@ -28,8 +27,7 @@ let itemPicker;
28
27
  let variableEditor;
29
28
  let modal;
30
29
  const dispatch = createEventDispatcher();
31
- export async function initNew() {
32
- selectedResourceType = undefined;
30
+ export async function initNew(rt) {
33
31
  step = 1;
34
32
  args = {};
35
33
  path = '';
@@ -37,6 +35,7 @@ export async function initNew() {
37
35
  initialPath = '';
38
36
  resourceSchema = emptySchema();
39
37
  resourceToEdit = undefined;
38
+ selectedResourceType = rt;
40
39
  modal.openModal();
41
40
  }
42
41
  export async function initEdit(p) {
@@ -136,7 +135,7 @@ $: isValid = allTrue(inputCheck) ?? false;
136
135
  minRows={3}
137
136
  />
138
137
  <div>
139
- <div class="mb-1 font-semibold text-gray-700">
138
+ <div class="mb-2 font-semibold text-gray-700">
140
139
  Resource type<Required required={true} />
141
140
  </div>
142
141
  <ResourceTypePicker
@@ -1,7 +1,7 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
2
  declare const __propDef: {
3
3
  props: {
4
- initNew?: (() => Promise<void>) | undefined;
4
+ initNew?: ((rt?: string) => Promise<void>) | undefined;
5
5
  initEdit?: ((p: string) => Promise<void>) | undefined;
6
6
  };
7
7
  events: {
@@ -16,7 +16,7 @@ export declare type ResourceEditorProps = typeof __propDef.props;
16
16
  export declare type ResourceEditorEvents = typeof __propDef.events;
17
17
  export declare type ResourceEditorSlots = typeof __propDef.slots;
18
18
  export default class ResourceEditor extends SvelteComponentTyped<ResourceEditorProps, ResourceEditorEvents, ResourceEditorSlots> {
19
- get initNew(): () => Promise<void>;
19
+ get initNew(): (rt?: string | undefined) => Promise<void>;
20
20
  get initEdit(): (p: string) => Promise<void>;
21
21
  }
22
22
  export {};
@@ -1,21 +1,44 @@
1
1
  <script>import { ResourceService } from '../gen';
2
2
  import { workspaceStore } from '../stores';
3
+ import { createEventDispatcher } from 'svelte';
4
+ import ResourceEditor from './ResourceEditor.svelte';
5
+ const dispatch = createEventDispatcher();
3
6
  let resources = [];
4
- export let value = undefined;
7
+ export let initialValue = undefined;
8
+ export let value = initialValue;
5
9
  export let resourceType = undefined;
10
+ let resourceEditor;
6
11
  async function loadResources(resourceType) {
12
+ const v = value;
7
13
  resources = await ResourceService.listResource({ workspace: $workspaceStore, resourceType });
14
+ value = v;
8
15
  }
9
16
  $: {
10
17
  if ($workspaceStore) {
11
18
  loadResources(resourceType);
12
19
  }
13
20
  }
21
+ $: dispatch('change', value);
14
22
  </script>
15
23
 
16
- <select class="mt-1" bind:value placeholder="Pick a resource {resourceType}">
24
+ <ResourceEditor bind:this={resourceEditor} on:refresh={() => loadResources(resourceType)} />
25
+ <select bind:value placeholder="Pick a resource {resourceType}">
17
26
  <option value={undefined} />
18
27
  {#each resources as r}
19
28
  <option value={r.path}>{r.path}{r.description ? ' | ' + r.description : ''}</option>
20
29
  {/each}
21
30
  </select>
31
+ <div class="flex flex-row gap-4">
32
+ <a class="text-xs hover:underline" target="_blank" href="/resources?connect_app={resourceType}"
33
+ >Connect the app {resourceType} to an account (if available)</a
34
+ >
35
+ <button
36
+ class="text-xs text-blue-500"
37
+ type="button"
38
+ on:click={() => {
39
+ resourceEditor.initNew(resourceType)
40
+ }}
41
+ >
42
+ + Create a new {resourceType} resource manually
43
+ </button>
44
+ </div>
@@ -1,10 +1,13 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
2
  declare const __propDef: {
3
3
  props: {
4
+ initialValue?: string | undefined;
4
5
  value?: string | undefined;
5
6
  resourceType?: string | undefined;
6
7
  };
7
8
  events: {
9
+ change: CustomEvent<any>;
10
+ } & {
8
11
  [evt: string]: CustomEvent<any>;
9
12
  };
10
13
  slots: {};