windmill-components 1.504.0 → 1.504.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.
- package/package/components/AppWrapper.svelte +0 -3
- package/package/components/{DBManagerDrawerButton.svelte → DBManagerDrawer.svelte} +38 -38
- package/package/components/DBManagerDrawer.svelte.d.ts +7 -0
- package/package/components/DarkModeObserver.svelte +30 -16
- package/package/components/DarkModeObserver.svelte.d.ts +9 -4
- package/package/components/Dev.svelte +1 -1
- package/package/components/EditorBar.svelte +108 -67
- package/package/components/FlowBuilder.svelte +2 -3
- package/package/components/FlowStatusViewerInner.svelte +19 -0
- package/package/components/FlowWrapper.svelte +0 -3
- package/package/components/ItemPicker.svelte +1 -1
- package/package/components/ItemPicker.svelte.d.ts +1 -1
- package/package/components/MoveDrawer.svelte.d.ts +2 -2
- package/package/components/ResourcePicker.svelte +11 -4
- package/package/components/S3FilePicker.svelte +10 -3
- package/package/components/S3FilePicker.svelte.d.ts +6 -4
- package/package/components/ScriptBuilder.svelte +3 -1
- package/package/components/ScriptEditor.svelte +31 -3
- package/package/components/ScriptEditor.svelte.d.ts +3 -1
- package/package/components/ScriptWrapper.svelte +0 -3
- package/package/components/ShareModal.svelte.d.ts +1 -1
- package/package/components/apps/editor/AppEditor.svelte +1 -1
- package/package/components/apps/editor/AppEditorHeader.svelte +1 -1
- package/package/components/apps/editor/GridEditor.svelte +1 -1
- package/package/components/apps/editor/SubGridEditor.svelte +1 -1
- package/package/components/apps/editor/component/componentCallbacks.svelte.js +1 -1
- package/package/components/apps/editor/componentsPanel/ComponentList.svelte +1 -1
- package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +1 -1
- package/package/components/apps/editor/settingsPanel/DeleteComponent.svelte +1 -1
- package/package/components/apps/types.d.ts +2 -2
- package/package/components/assets/AssetsDropdownButton.svelte +178 -0
- package/package/components/assets/AssetsDropdownButton.svelte.d.ts +16 -0
- package/package/components/assets/AssetsUsageDrawer.svelte +43 -0
- package/package/components/assets/AssetsUsageDrawer.svelte.d.ts +12 -0
- package/package/components/assets/lib.d.ts +16 -0
- package/package/components/assets/lib.js +60 -0
- package/package/components/auditLogs/AuditLogsFilters.svelte.d.ts +1 -1
- package/package/components/common/OnChange.svelte +18 -0
- package/package/components/common/OnChange.svelte.d.ts +21 -0
- package/package/components/common/button/UndoRedo.svelte +2 -2
- package/package/components/common/button/UndoRedo.svelte.d.ts +5 -6
- package/package/components/copilot/chat/script/core.js +4 -4
- package/package/components/custom_ui.d.ts +1 -0
- package/package/components/flows/content/FlowModuleComponent.svelte +20 -1
- package/package/components/flows/types.d.ts +15 -1
- package/package/components/graph/FlowGraphV2.svelte +111 -8
- package/package/components/graph/FlowGraphV2.svelte.d.ts +2 -0
- package/package/components/graph/graphBuilder.svelte.d.ts +14 -1
- package/package/components/graph/renderers/edges/BaseEdge.svelte +10 -1
- package/package/components/graph/renderers/edges/EmptyEdge.svelte +7 -1
- package/package/components/graph/renderers/edges/EmptyEdge.svelte.d.ts +3 -0
- package/package/components/graph/renderers/nodes/AssetNode.svelte +257 -0
- package/package/components/graph/renderers/nodes/AssetNode.svelte.d.ts +21 -0
- package/package/components/graph/renderers/nodes/AssetsOverflowedNode.svelte +55 -0
- package/package/components/graph/renderers/nodes/AssetsOverflowedNode.svelte.d.ts +7 -0
- package/package/components/icons/AssetGenericIcon.svelte +16 -0
- package/package/components/icons/AssetGenericIcon.svelte.d.ts +10 -0
- package/package/components/icons/AssetResIcon.svelte +32 -0
- package/package/components/icons/AssetResIcon.svelte.d.ts +9 -0
- package/package/components/icons/AssetS3Icon.svelte +30 -0
- package/package/components/icons/AssetS3Icon.svelte.d.ts +9 -0
- package/package/components/icons/AssetVarIcon.svelte +31 -0
- package/package/components/icons/AssetVarIcon.svelte.d.ts +9 -0
- package/package/components/meltComponents/Popover.svelte +2 -0
- package/package/components/meltComponents/Popover.svelte.d.ts +2 -0
- package/package/components/schema/EditableSchemaSdkWrapper.svelte +1 -4
- package/package/components/script_builder.d.ts +2 -0
- package/package/components/settings/WorkspaceOperatorSettings.svelte +20 -17
- package/package/components/sidebar/OperatorMenu.svelte +5 -0
- package/package/components/sidebar/SidebarContent.svelte +9 -1
- package/package/components/tutorials/app/AppTutorial.svelte +1 -1
- package/package/components/tutorials/app/ConnectionTutorial.svelte +1 -1
- package/package/gen/schemas.gen.d.ts +69 -1
- package/package/gen/schemas.gen.js +69 -1
- package/package/gen/services.gen.d.ts +20 -1
- package/package/gen/services.gen.js +37 -0
- package/package/gen/types.gen.d.ts +103 -0
- package/package/history.svelte.d.ts +2 -2
- package/package/history.svelte.js +6 -6
- package/package/infer.d.ts +2 -0
- package/package/infer.js +31 -5
- package/package/svelte5Utils.svelte.d.ts +2 -1
- package/package/svelte5Utils.svelte.js +3 -2
- package/package/utils.d.ts +12 -0
- package/package/utils.js +22 -0
- package/package.json +5 -5
- package/package/components/DBManagerDrawerButton.svelte.d.ts +0 -9
|
@@ -3,10 +3,9 @@ import Button from './common/button/Button.svelte';
|
|
|
3
3
|
import Drawer from './common/drawer/Drawer.svelte';
|
|
4
4
|
import DrawerContent from './common/drawer/DrawerContent.svelte';
|
|
5
5
|
import { sendUserToast, sortArray } from '../utils';
|
|
6
|
-
import { ArrowLeft,
|
|
6
|
+
import { ArrowLeft, Expand, Loader2, Minimize, RefreshCcw } from 'lucide-svelte';
|
|
7
7
|
import { dbSupportsSchemas, getDbSchemas, getLanguageByResourceType, loadAllTablesMetaData, loadTableMetaData } from './apps/components/display/dbtable/utils';
|
|
8
8
|
import DbManager from './DBManager.svelte';
|
|
9
|
-
import { Alert } from './common';
|
|
10
9
|
import { dbDeleteTableActionWithPreviewScript, dbTableOpsWithPreviewScripts } from './dbOps';
|
|
11
10
|
import { makeCreateTableQuery } from './apps/components/display/dbtable/queries/createTable';
|
|
12
11
|
import { runScriptAndPollResult } from './jobs/utils';
|
|
@@ -14,10 +13,21 @@ import { Pane, Splitpanes } from 'svelte-splitpanes';
|
|
|
14
13
|
import SqlRepl from './SqlRepl.svelte';
|
|
15
14
|
import SimpleAgTable from './SimpleAgTable.svelte';
|
|
16
15
|
import { untrack } from 'svelte';
|
|
17
|
-
let
|
|
18
|
-
let
|
|
19
|
-
let
|
|
20
|
-
|
|
16
|
+
let resourceType = $state(undefined);
|
|
17
|
+
let resourcePath = $state(undefined);
|
|
18
|
+
let open = $derived(resourcePath && resourceType);
|
|
19
|
+
export function openDrawer(_resourceType, _resourcePath) {
|
|
20
|
+
resourceType = _resourceType;
|
|
21
|
+
resourcePath = _resourcePath;
|
|
22
|
+
getSchema();
|
|
23
|
+
}
|
|
24
|
+
export function closeDrawer() {
|
|
25
|
+
resourceType = undefined;
|
|
26
|
+
resourcePath = undefined;
|
|
27
|
+
refreshCount = 0;
|
|
28
|
+
refreshing = false;
|
|
29
|
+
}
|
|
30
|
+
let dbSchema = $derived(resourcePath && resourcePath in $dbSchemas ? $dbSchemas[resourcePath] : undefined);
|
|
21
31
|
// `refreshCount` is a derived state. `refreshing` is the source of truth
|
|
22
32
|
let refreshCount = $state(0);
|
|
23
33
|
$effect(() => {
|
|
@@ -32,18 +42,17 @@ $effect(() => {
|
|
|
32
42
|
const refresh = () => !refreshing && (refreshing = true);
|
|
33
43
|
let expand = $state(false);
|
|
34
44
|
$effect(() => {
|
|
35
|
-
if (!
|
|
45
|
+
if (!open)
|
|
36
46
|
expand = false;
|
|
37
47
|
});
|
|
38
48
|
async function getSchema() {
|
|
39
|
-
if ($dbSchemas[resourcePath] && !refreshing)
|
|
49
|
+
if (!resourcePath || !resourceType || ($dbSchemas[resourcePath] && !refreshing))
|
|
40
50
|
return;
|
|
41
51
|
try {
|
|
42
52
|
const oldDbSchema = $dbSchemas[resourcePath];
|
|
43
53
|
await getDbSchemas(resourceType, resourcePath, $workspaceStore, $dbSchemas, (message) => {
|
|
44
|
-
if (
|
|
54
|
+
if (open)
|
|
45
55
|
sendUserToast(message, true);
|
|
46
|
-
}
|
|
47
56
|
});
|
|
48
57
|
// avoid infinite loop on error due to the way getDbSchemas is implemented
|
|
49
58
|
// and relying on an assignement side effect
|
|
@@ -64,6 +73,8 @@ let replResultData = $state(undefined);
|
|
|
64
73
|
let cachedColDefs = {};
|
|
65
74
|
let cachedLastRefreshCount = 0;
|
|
66
75
|
async function getColDefs(tableKey) {
|
|
76
|
+
if (!resourcePath || !resourceType)
|
|
77
|
+
return [];
|
|
67
78
|
if (cachedLastRefreshCount !== refreshCount)
|
|
68
79
|
cachedColDefs = {};
|
|
69
80
|
cachedLastRefreshCount = refreshCount;
|
|
@@ -96,37 +107,26 @@ async function getColDefs(tableKey) {
|
|
|
96
107
|
}}
|
|
97
108
|
/>
|
|
98
109
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
{
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
variant="border"
|
|
107
|
-
spacingSize="xs2"
|
|
108
|
-
btnClasses="mt-1 w-24"
|
|
109
|
-
on:click={async () => {
|
|
110
|
-
if (!dbSchema || !$workspaceStore) refreshing = true
|
|
111
|
-
isDrawerOpen = true
|
|
112
|
-
}}
|
|
113
|
-
>
|
|
114
|
-
<Database size={18} /> Manager
|
|
115
|
-
</Button>
|
|
116
|
-
<Drawer bind:open={isDrawerOpen} size={expand ? `${windowWidth}px` : '1200px'} preventEscape>
|
|
110
|
+
<Drawer
|
|
111
|
+
bind:open
|
|
112
|
+
size={expand ? `${windowWidth}px` : '1200px'}
|
|
113
|
+
preventEscape
|
|
114
|
+
on:close={closeDrawer}
|
|
115
|
+
>
|
|
116
|
+
{#key [resourceType, resourcePath, dbSchema]}
|
|
117
117
|
<DrawerContent
|
|
118
118
|
title={replResultData ? 'Query Result' : 'Database Manager'}
|
|
119
119
|
on:close={() => {
|
|
120
120
|
if (replResultData) {
|
|
121
121
|
replResultData = undefined
|
|
122
122
|
} else {
|
|
123
|
-
|
|
123
|
+
closeDrawer()
|
|
124
124
|
}
|
|
125
125
|
}}
|
|
126
126
|
CloseIcon={replResultData ? ArrowLeft : undefined}
|
|
127
127
|
noPadding
|
|
128
128
|
>
|
|
129
|
-
{#if dbSchema && $workspaceStore}
|
|
129
|
+
{#if dbSchema && $workspaceStore && resourceType && resourcePath}
|
|
130
130
|
<Splitpanes horizontal>
|
|
131
131
|
<Pane class="relative">
|
|
132
132
|
<!-- svelte-ignore a11y_click_events_have_key_events -->
|
|
@@ -157,8 +157,8 @@ async function getColDefs(tableKey) {
|
|
|
157
157
|
dbTableOpsWithPreviewScripts({
|
|
158
158
|
colDefs,
|
|
159
159
|
tableKey,
|
|
160
|
-
resourcePath
|
|
161
|
-
resourceType
|
|
160
|
+
resourcePath: resourcePath!,
|
|
161
|
+
resourceType: resourceType!,
|
|
162
162
|
workspace: $workspaceStore
|
|
163
163
|
})}
|
|
164
164
|
dbTableActionsFactory={[
|
|
@@ -170,16 +170,16 @@ async function getColDefs(tableKey) {
|
|
|
170
170
|
]}
|
|
171
171
|
{refresh}
|
|
172
172
|
dbTableEditorPropsFactory={({ selectedSchemaKey }) => ({
|
|
173
|
-
resourceType
|
|
173
|
+
resourceType: resourceType!,
|
|
174
174
|
previewSql: (values) =>
|
|
175
|
-
makeCreateTableQuery(values, resourceType
|
|
175
|
+
makeCreateTableQuery(values, resourceType!, selectedSchemaKey),
|
|
176
176
|
async onConfirm(values) {
|
|
177
177
|
await runScriptAndPollResult({
|
|
178
178
|
workspace: $workspaceStore,
|
|
179
179
|
requestBody: {
|
|
180
180
|
args: { database: '$res:' + resourcePath },
|
|
181
|
-
content: makeCreateTableQuery(values, resourceType
|
|
182
|
-
language: getLanguageByResourceType(resourceType)
|
|
181
|
+
content: makeCreateTableQuery(values, resourceType!, selectedSchemaKey),
|
|
182
|
+
language: getLanguageByResourceType(resourceType!)
|
|
183
183
|
}
|
|
184
184
|
})
|
|
185
185
|
refresh()
|
|
@@ -234,5 +234,5 @@ async function getColDefs(tableKey) {
|
|
|
234
234
|
/>
|
|
235
235
|
{/snippet}
|
|
236
236
|
</DrawerContent>
|
|
237
|
-
|
|
238
|
-
|
|
237
|
+
{/key}
|
|
238
|
+
</Drawer>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type DbType } from './apps/components/display/dbtable/utils';
|
|
2
|
+
declare const DbManagerDrawer: import("svelte").Component<Record<string, never>, {
|
|
3
|
+
openDrawer: (_resourceType: DbType, _resourcePath: string) => void;
|
|
4
|
+
closeDrawer: () => void;
|
|
5
|
+
}, "">;
|
|
6
|
+
type DbManagerDrawer = ReturnType<typeof DbManagerDrawer>;
|
|
7
|
+
export default DbManagerDrawer;
|
|
@@ -1,22 +1,36 @@
|
|
|
1
|
+
<script module lang="ts">export function useIsDarkMode({ onChange } = {}) {
|
|
2
|
+
let isDarkMode = $state({ val: false });
|
|
3
|
+
let observer = undefined;
|
|
4
|
+
onMount(() => {
|
|
5
|
+
isDarkMode.val = document.documentElement.classList.contains('dark');
|
|
6
|
+
observer = new MutationObserver((mutationsList) => {
|
|
7
|
+
for (let mutation of mutationsList) {
|
|
8
|
+
if (mutation.type === 'attributes' && mutation.attributeName === 'class') {
|
|
9
|
+
const newDarkMode = document.documentElement.classList.contains('dark');
|
|
10
|
+
onChange?.(newDarkMode);
|
|
11
|
+
isDarkMode.val = newDarkMode;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
observer.observe(document.documentElement, { attributes: true });
|
|
16
|
+
});
|
|
17
|
+
onDestroy(() => {
|
|
18
|
+
observer?.disconnect();
|
|
19
|
+
});
|
|
20
|
+
return isDarkMode;
|
|
21
|
+
}
|
|
22
|
+
</script>
|
|
23
|
+
|
|
1
24
|
<script lang="ts">import { onMount, onDestroy } from 'svelte';
|
|
2
25
|
import { createEventDispatcher } from 'svelte';
|
|
3
|
-
|
|
26
|
+
let { darkMode = $bindable(false) } = $props();
|
|
4
27
|
const dispatch = createEventDispatcher();
|
|
5
|
-
let
|
|
6
|
-
|
|
7
|
-
darkMode = document.documentElement.classList.contains('dark');
|
|
8
|
-
observer = new MutationObserver((mutationsList, observer) => {
|
|
9
|
-
for (let mutation of mutationsList) {
|
|
10
|
-
if (mutation.type === 'attributes' && mutation.attributeName === 'class') {
|
|
11
|
-
const newDarkMode = document.documentElement.classList.contains('dark');
|
|
12
|
-
dispatch('change', newDarkMode);
|
|
13
|
-
darkMode = newDarkMode;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
});
|
|
17
|
-
observer.observe(document.documentElement, { attributes: true });
|
|
28
|
+
let isDarkMode = useIsDarkMode({
|
|
29
|
+
onChange: (newDarkMode) => dispatch('change', newDarkMode)
|
|
18
30
|
});
|
|
19
|
-
|
|
20
|
-
|
|
31
|
+
$effect(() => {
|
|
32
|
+
if (darkMode !== isDarkMode.val) {
|
|
33
|
+
darkMode = isDarkMode.val;
|
|
34
|
+
}
|
|
21
35
|
});
|
|
22
36
|
</script>
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
import type { StateStore } from '../utils';
|
|
2
|
+
export declare function useIsDarkMode({ onChange }?: {
|
|
3
|
+
onChange?: (newDarkMode: boolean) => void;
|
|
4
|
+
}): StateStore<boolean>;
|
|
5
|
+
type $$ComponentProps = {
|
|
6
|
+
darkMode?: boolean;
|
|
7
|
+
};
|
|
1
8
|
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
2
9
|
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
3
10
|
$$bindings?: Bindings;
|
|
@@ -11,12 +18,10 @@ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> =
|
|
|
11
18
|
};
|
|
12
19
|
z_$$bindings?: Bindings;
|
|
13
20
|
}
|
|
14
|
-
declare const DarkModeObserver: $$__sveltets_2_IsomorphicComponent
|
|
15
|
-
darkMode?: boolean;
|
|
16
|
-
}, {
|
|
21
|
+
declare const DarkModeObserver: $$__sveltets_2_IsomorphicComponent<$$ComponentProps, {
|
|
17
22
|
change: CustomEvent<any>;
|
|
18
23
|
} & {
|
|
19
24
|
[evt: string]: CustomEvent<any>;
|
|
20
|
-
}, {}, {},
|
|
25
|
+
}, {}, {}, "darkMode">;
|
|
21
26
|
type DarkModeObserver = InstanceType<typeof DarkModeObserver>;
|
|
22
27
|
export default DarkModeObserver;
|
|
@@ -17,7 +17,7 @@ import FlowModuleSchemaMap from './flows/map/FlowModuleSchemaMap.svelte';
|
|
|
17
17
|
import FlowEditorPanel from './flows/content/FlowEditorPanel.svelte';
|
|
18
18
|
import { deepEqual } from 'fast-equals';
|
|
19
19
|
import { writable } from 'svelte/store';
|
|
20
|
-
import { initHistory } from '../history';
|
|
20
|
+
import { initHistory } from '../history.svelte';
|
|
21
21
|
import { dfs } from './flows/dfs';
|
|
22
22
|
import { loadSchemaFromModule } from './flows/flowInfers';
|
|
23
23
|
import { CornerDownLeft, Play } from 'lucide-svelte';
|
|
@@ -20,14 +20,15 @@ import { createEventDispatcher, untrack } from 'svelte';
|
|
|
20
20
|
import { sendUserToast } from '../toast';
|
|
21
21
|
import { getScriptByPath, scriptLangToEditorLang } from '../scripts';
|
|
22
22
|
import Toggle from './Toggle.svelte';
|
|
23
|
-
import { DiffIcon, DollarSign, History, Library, Link, Package, Plus, RotateCw, Save, Users } from 'lucide-svelte';
|
|
24
|
-
import { capitalize, toCamel } from '../utils';
|
|
23
|
+
import { DiffIcon, DollarSign, File, History, Library, Link, Package, Plus, RotateCw, Save, Users } from 'lucide-svelte';
|
|
24
|
+
import { capitalize, formatS3Object, toCamel } from '../utils';
|
|
25
25
|
import ScriptVersionHistory from './ScriptVersionHistory.svelte';
|
|
26
26
|
import ScriptGen from './copilot/ScriptGen.svelte';
|
|
27
27
|
import { getResetCode } from '../script_helpers';
|
|
28
28
|
import Popover from './Popover.svelte';
|
|
29
29
|
import ResourceEditorDrawer from './ResourceEditorDrawer.svelte';
|
|
30
30
|
import EditorSettings from './EditorSettings.svelte';
|
|
31
|
+
import S3FilePicker from './S3FilePicker.svelte';
|
|
31
32
|
let { lang, editor, websocketAlive, iconOnly = false, validCode = true, kind = 'script', template = 'script', collabMode = false, collabLive = false, collabUsers = [], scriptPath = undefined, diffEditor = undefined, args, noHistory = false, saveToWorkspace = false, customUi = {}, lastDeployedCode = undefined, diffMode = false, showHistoryDrawer = $bindable(false), right, openAiChat = false } = $props();
|
|
32
33
|
let contextualVariablePicker = $state();
|
|
33
34
|
let variablePicker = $state();
|
|
@@ -35,70 +36,61 @@ let resourcePicker = $state();
|
|
|
35
36
|
let resourceTypePicker = $state();
|
|
36
37
|
let variableEditor = $state();
|
|
37
38
|
let resourceEditor = $state();
|
|
38
|
-
let
|
|
39
|
-
let
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
// for related places search: ADD_NEW_LANG
|
|
94
|
-
].includes(lang ?? '');
|
|
95
|
-
});
|
|
96
|
-
run(() => {
|
|
97
|
-
showResourceTypePicker =
|
|
98
|
-
['typescript', 'javascript'].includes(scriptLangToEditorLang(lang)) ||
|
|
99
|
-
lang === 'python3' ||
|
|
100
|
-
lang === 'php';
|
|
101
|
-
});
|
|
39
|
+
let s3FilePicker = $state();
|
|
40
|
+
let showContextVarPicker = $derived([
|
|
41
|
+
'python3',
|
|
42
|
+
'bash',
|
|
43
|
+
'powershell',
|
|
44
|
+
'go',
|
|
45
|
+
'deno',
|
|
46
|
+
'bun',
|
|
47
|
+
'bunnative',
|
|
48
|
+
'nativets',
|
|
49
|
+
'php',
|
|
50
|
+
'rust',
|
|
51
|
+
'csharp',
|
|
52
|
+
'nu',
|
|
53
|
+
'java'
|
|
54
|
+
// for related places search: ADD_NEW_LANG
|
|
55
|
+
].includes(lang ?? ''));
|
|
56
|
+
let showVarPicker = $derived([
|
|
57
|
+
'python3',
|
|
58
|
+
'bash',
|
|
59
|
+
'powershell',
|
|
60
|
+
'go',
|
|
61
|
+
'deno',
|
|
62
|
+
'bun',
|
|
63
|
+
'bunnative',
|
|
64
|
+
'nativets',
|
|
65
|
+
'php',
|
|
66
|
+
'rust',
|
|
67
|
+
'csharp',
|
|
68
|
+
'nu',
|
|
69
|
+
'java'
|
|
70
|
+
// for related places search: ADD_NEW_LANG
|
|
71
|
+
].includes(lang ?? ''));
|
|
72
|
+
let showResourcePicker = $derived([
|
|
73
|
+
'python3',
|
|
74
|
+
'bash',
|
|
75
|
+
'powershell',
|
|
76
|
+
'go',
|
|
77
|
+
'deno',
|
|
78
|
+
'bun',
|
|
79
|
+
'bunnative',
|
|
80
|
+
'nativets',
|
|
81
|
+
'php',
|
|
82
|
+
'rust',
|
|
83
|
+
'csharp',
|
|
84
|
+
'nu',
|
|
85
|
+
'java',
|
|
86
|
+
'duckdb'
|
|
87
|
+
// for related places search: ADD_NEW_LANG
|
|
88
|
+
].includes(lang ?? ''));
|
|
89
|
+
let showS3Picker = $derived(['duckdb', 'python3'].includes(lang ?? '') ||
|
|
90
|
+
['typescript', 'javascript'].includes(scriptLangToEditorLang(lang)));
|
|
91
|
+
let showResourceTypePicker = $derived(['typescript', 'javascript'].includes(scriptLangToEditorLang(lang)) ||
|
|
92
|
+
lang === 'python3' ||
|
|
93
|
+
lang === 'php');
|
|
102
94
|
let codeViewer = $state();
|
|
103
95
|
let codeObj = $state(undefined);
|
|
104
96
|
function addEditorActions() {
|
|
@@ -444,7 +436,7 @@ string ${windmillPathToCamelCaseName(path)} = await client.GetStringAsync(uri);
|
|
|
444
436
|
|
|
445
437
|
<ItemPicker
|
|
446
438
|
bind:this={resourcePicker}
|
|
447
|
-
pickCallback={(path, _) => {
|
|
439
|
+
pickCallback={(path, _, resType) => {
|
|
448
440
|
if (!editor) return
|
|
449
441
|
if (lang == 'deno') {
|
|
450
442
|
if (!editor.getCode().includes('import * as wmill from')) {
|
|
@@ -504,6 +496,15 @@ JsonNode ${windmillPathToCamelCaseName(path)} = JsonNode.Parse(await client.GetS
|
|
|
504
496
|
} else if (lang == 'java') {
|
|
505
497
|
editor.insertAtCursor(`(Wmill.getResource("${path}"))`)
|
|
506
498
|
// for related places search: ADD_NEW_LANG
|
|
499
|
+
} else if (lang == 'duckdb') {
|
|
500
|
+
let t = { postgresql: 'postgres', mysql: 'mysql', bigquery: 'bigquery' }[resType]
|
|
501
|
+
if (!t) {
|
|
502
|
+
sendUserToast(`Resource type ${resType} is not supported in DuckDB`, true)
|
|
503
|
+
editor.insertAtCursor(`'$res:${path}'`)
|
|
504
|
+
return
|
|
505
|
+
} else {
|
|
506
|
+
editor.insertAtCursor(`ATTACH '$res:${path}' AS db (TYPE ${t});`)
|
|
507
|
+
}
|
|
507
508
|
}
|
|
508
509
|
|
|
509
510
|
sendUserToast(`${path} inserted at cursor`)
|
|
@@ -550,6 +551,30 @@ JsonNode ${windmillPathToCamelCaseName(path)} = JsonNode.Parse(await client.GetS
|
|
|
550
551
|
<ResourceEditorDrawer bind:this={resourceEditor} on:refresh={resourcePicker.openDrawer} />
|
|
551
552
|
<VariableEditor bind:this={variableEditor} on:create={variablePicker.openDrawer} />
|
|
552
553
|
|
|
554
|
+
<S3FilePicker
|
|
555
|
+
bind:this={s3FilePicker}
|
|
556
|
+
readOnlyMode={false}
|
|
557
|
+
on:selectAndClose={(s3obj) => {
|
|
558
|
+
let s = `'${formatS3Object(s3obj.detail)}'`
|
|
559
|
+
if (lang === 'duckdb') {
|
|
560
|
+
if (s3obj.detail?.s3.endsWith('.json')) s = `read_json(${s})`
|
|
561
|
+
if (s3obj.detail?.s3.endsWith('.csv')) s = `read_csv(${s})`
|
|
562
|
+
if (s3obj.detail?.s3.endsWith('.parquet')) s = `read_parquet(${s})`
|
|
563
|
+
editor?.insertAtCursor(s)
|
|
564
|
+
} else if (lang === 'python3') {
|
|
565
|
+
if (!editor?.getCode().includes('import wmill')) {
|
|
566
|
+
editor?.insertAtBeginning('import wmill\n')
|
|
567
|
+
}
|
|
568
|
+
editor?.insertAtCursor(`wmill.load_s3_file(${s})`)
|
|
569
|
+
} else if (['javascript', 'typescript'].includes(scriptLangToEditorLang(lang))) {
|
|
570
|
+
if (!editor?.getCode().includes('import * as wmill from')) {
|
|
571
|
+
editor?.insertAtBeginning(`import * as wmill from "npm:windmill-client@1"\n`)
|
|
572
|
+
}
|
|
573
|
+
editor?.insertAtCursor(`wmill.loadS3File(${s})`)
|
|
574
|
+
}
|
|
575
|
+
}}
|
|
576
|
+
/>
|
|
577
|
+
|
|
553
578
|
<div class="flex justify-between items-center overflow-y-auto w-full p-0.5">
|
|
554
579
|
<div class="flex items-center">
|
|
555
580
|
<div
|
|
@@ -589,6 +614,22 @@ JsonNode ${windmillPathToCamelCaseName(path)} = JsonNode.Parse(await client.GetS
|
|
|
589
614
|
</Button>
|
|
590
615
|
{/if}
|
|
591
616
|
|
|
617
|
+
{#if showS3Picker && customUi?.s3object != false}
|
|
618
|
+
<Button
|
|
619
|
+
aiId="editor-bar-add-s3-object"
|
|
620
|
+
aiDescription="Add S3 Object"
|
|
621
|
+
title="Add S3 object"
|
|
622
|
+
color="light"
|
|
623
|
+
on:click={() => s3FilePicker?.open()}
|
|
624
|
+
size="xs"
|
|
625
|
+
btnClasses="!font-medium text-tertiary"
|
|
626
|
+
spacingSize="md"
|
|
627
|
+
startIcon={{ icon: File }}
|
|
628
|
+
{iconOnly}
|
|
629
|
+
>+S3 Object
|
|
630
|
+
</Button>
|
|
631
|
+
{/if}
|
|
632
|
+
|
|
592
633
|
{#if showResourcePicker && customUi?.resource != false}
|
|
593
634
|
<Button
|
|
594
635
|
aiId="editor-bar-add-resource"
|
|
@@ -785,10 +785,9 @@ const flowHasChanged = $derived(flowPreviewContent?.flowHasChanged());
|
|
|
785
785
|
redoProps={{ disabled: $history.index === $history.history.length - 1 }}
|
|
786
786
|
on:undo={() => {
|
|
787
787
|
const currentModules = flowStore.val?.value?.modules
|
|
788
|
-
|
|
789
|
-
console.log('debug before', $state.snapshot(flowStore.val))
|
|
788
|
+
console.log('undo before', flowStore.val, JSON.stringify(flowStore.val, null, 2))
|
|
790
789
|
flowStore.val = undo(history, flowStore.val)
|
|
791
|
-
console.log('
|
|
790
|
+
console.log('undo after', flowStore.val, JSON.stringify(flowStore.val, null, 2))
|
|
792
791
|
|
|
793
792
|
const newModules = flowStore.val?.value?.modules
|
|
794
793
|
const restoredModules = newModules?.filter(
|
|
@@ -20,6 +20,7 @@ import Alert from './common/alert/Alert.svelte';
|
|
|
20
20
|
import FlowGraphViewerStep from './FlowGraphViewerStep.svelte';
|
|
21
21
|
import FlowGraphV2 from './graph/FlowGraphV2.svelte';
|
|
22
22
|
import { buildPrefix } from './graph/graphBuilder.svelte';
|
|
23
|
+
import { parseAssetFromString } from './assets/lib';
|
|
23
24
|
import FlowPreviewResult from './FlowPreviewResult.svelte';
|
|
24
25
|
const dispatch = createEventDispatcher();
|
|
25
26
|
let { flowStateStore, retryStatus, suspendStatus, hideDownloadInGraph, hideTimeline, hideNodeDefinition, hideDownloadLogs, hideJobId } = getContext('FlowStatusViewer');
|
|
@@ -51,6 +52,23 @@ export let rightColumnSelect = 'timeline';
|
|
|
51
52
|
export let localModuleStates = writable({});
|
|
52
53
|
export let localDurationStatuses = writable({});
|
|
53
54
|
let recursiveRefresh = {};
|
|
55
|
+
$: inputAssets = parseInputAssets(job?.args ?? {});
|
|
56
|
+
function parseInputAssets(args) {
|
|
57
|
+
const arr = [];
|
|
58
|
+
for (const v of Object.values(args)) {
|
|
59
|
+
if (typeof v === 'string') {
|
|
60
|
+
const asset = parseAssetFromString(v);
|
|
61
|
+
if (asset)
|
|
62
|
+
arr.push(asset);
|
|
63
|
+
}
|
|
64
|
+
else if (v && typeof v === 'object' && typeof v['s3'] === 'string') {
|
|
65
|
+
const s3 = v['s3'];
|
|
66
|
+
const storage = typeof v['storage'] == 'string' ? v['storage'] : undefined;
|
|
67
|
+
arr.push({ kind: 's3object', path: `${storage ?? ''}/${s3}` });
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return arr;
|
|
71
|
+
}
|
|
54
72
|
let jobResults = flowJobIds?.flowJobs?.map((x, id) => `iter #${id + 1} not loaded by frontend yet`) ?? [];
|
|
55
73
|
let retry_selected = '';
|
|
56
74
|
let timeout = undefined;
|
|
@@ -1015,6 +1033,7 @@ let subflowsSize = 500;
|
|
|
1015
1033
|
</div>
|
|
1016
1034
|
|
|
1017
1035
|
<FlowGraphV2
|
|
1036
|
+
{inputAssets}
|
|
1018
1037
|
{selectedId}
|
|
1019
1038
|
triggerNode={true}
|
|
1020
1039
|
download={!hideDownloadInGraph}
|
|
@@ -2,9 +2,6 @@
|
|
|
2
2
|
import FlowBuilder from './FlowBuilder.svelte';
|
|
3
3
|
let { flowStore: oldFlowStore, disableAi, light, ...props } = $props();
|
|
4
4
|
let flowStore = $state(oldFlowStore);
|
|
5
|
-
$effect(() => {
|
|
6
|
-
flowStore = oldFlowStore;
|
|
7
|
-
});
|
|
8
5
|
let trialRender = $state(true);
|
|
9
6
|
if (light) {
|
|
10
7
|
setTimeout(() => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
type Item = Record<string, any>;
|
|
2
2
|
interface Props {
|
|
3
|
-
pickCallback: (path: string,
|
|
3
|
+
pickCallback: (path: string, extraField: string, extraField2: string) => void;
|
|
4
4
|
loadItems: () => Promise<Item[] | undefined>;
|
|
5
5
|
extraField?: string;
|
|
6
6
|
extraField2?: string | undefined;
|
|
@@ -12,13 +12,13 @@ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> =
|
|
|
12
12
|
z_$$bindings?: Bindings;
|
|
13
13
|
}
|
|
14
14
|
declare const MoveDrawer: $$__sveltets_2_IsomorphicComponent<{
|
|
15
|
-
openDrawer?: (initialPath_l: string, summary_l: string | undefined, kind_l: "
|
|
15
|
+
openDrawer?: (initialPath_l: string, summary_l: string | undefined, kind_l: "resource" | "script" | "flow" | "schedule" | "app" | "variable" | "raw_app") => Promise<void>;
|
|
16
16
|
}, {
|
|
17
17
|
update: CustomEvent<any>;
|
|
18
18
|
} & {
|
|
19
19
|
[evt: string]: CustomEvent<any>;
|
|
20
20
|
}, {}, {
|
|
21
|
-
openDrawer: (initialPath_l: string, summary_l: string | undefined, kind_l: "
|
|
21
|
+
openDrawer: (initialPath_l: string, summary_l: string | undefined, kind_l: "resource" | "script" | "flow" | "schedule" | "app" | "variable" | "raw_app") => Promise<void>;
|
|
22
22
|
}, string>;
|
|
23
23
|
type MoveDrawer = InstanceType<typeof MoveDrawer>;
|
|
24
24
|
export default MoveDrawer;
|
|
@@ -4,11 +4,11 @@ import { onMount, untrack } from 'svelte';
|
|
|
4
4
|
import AppConnect from './AppConnectDrawer.svelte';
|
|
5
5
|
import ResourceEditorDrawer from './ResourceEditorDrawer.svelte';
|
|
6
6
|
import { Button } from './common';
|
|
7
|
-
import DBManagerDrawerButton from './DBManagerDrawerButton.svelte';
|
|
8
7
|
import { Pen, Plus, RotateCw } from 'lucide-svelte';
|
|
9
8
|
import { sendUserToast } from '../toast';
|
|
10
|
-
import { isDbType } from './apps/components/display/dbtable/utils';
|
|
11
9
|
import Select from './select/Select.svelte';
|
|
10
|
+
import DbManagerDrawer from './DBManagerDrawer.svelte';
|
|
11
|
+
import ExploreAssetButton, { assetCanBeExplored } from '../../routes/(root)/(logged)/assets/ExploreAssetButton.svelte';
|
|
12
12
|
let { initialValue = $bindable(undefined), value = $bindable(undefined), valueType = $bindable(undefined), resourceType = undefined, disabled = false, disablePortal = false, showSchemaExplorer = false, selectFirst = false, expressOAuthSetup = false, defaultValues = undefined, placeholder = undefined, onClear = undefined } = $props();
|
|
13
13
|
if (initialValue && value == undefined) {
|
|
14
14
|
console.log('initialValue', initialValue);
|
|
@@ -97,6 +97,7 @@ $effect(() => {
|
|
|
97
97
|
});
|
|
98
98
|
let appConnect = $state();
|
|
99
99
|
let resourceEditor = $state();
|
|
100
|
+
let dbManagerDrawer = $state();
|
|
100
101
|
</script>
|
|
101
102
|
|
|
102
103
|
<AppConnect
|
|
@@ -203,7 +204,13 @@ let resourceEditor = $state();
|
|
|
203
204
|
iconOnly
|
|
204
205
|
/>
|
|
205
206
|
</div>
|
|
206
|
-
{#if showSchemaExplorer &&
|
|
207
|
-
<
|
|
207
|
+
{#if showSchemaExplorer && value && assetCanBeExplored({ kind: 'resource', path: value }, { resource_type: resourceType })}
|
|
208
|
+
<ExploreAssetButton
|
|
209
|
+
_resourceMetadata={{ resource_type: resourceType }}
|
|
210
|
+
asset={{ kind: 'resource', path: value }}
|
|
211
|
+
{dbManagerDrawer}
|
|
212
|
+
/>
|
|
208
213
|
{/if}
|
|
209
214
|
</div>
|
|
215
|
+
|
|
216
|
+
<DbManagerDrawer bind:this={dbManagerDrawer} />
|