windmill-components 1.542.4 → 1.550.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package/common.d.ts +4 -1
- package/package/components/AIAgentLogViewer.svelte +1 -1
- package/package/components/ArgEnum.svelte +14 -5
- package/package/components/ArgInput.svelte +23 -15
- package/package/components/ArgInput.svelte.d.ts +1 -1
- package/package/components/ChannelSelector.svelte +92 -18
- package/package/components/ChannelSelector.svelte.d.ts +2 -0
- package/package/components/ConnectionSection.svelte +12 -1
- package/package/components/Dev.svelte +18 -5
- package/package/components/Dev.svelte.d.ts +23 -1
- package/package/components/DisplayResult.svelte +36 -23
- package/package/components/DropdownV2.svelte +8 -2
- package/package/components/DropdownV2.svelte.d.ts +1 -0
- package/package/components/DynamicInput.svelte +10 -10
- package/package/components/EditableSchemaForm.svelte +21 -7
- package/package/components/EditorSettings.svelte +11 -9
- package/package/components/ErrorOrRecoveryHandler.svelte +14 -20
- package/package/components/FlowHistoryJobPicker.svelte +3 -0
- package/package/components/FlowHistoryJobPicker.svelte.d.ts +1 -0
- package/package/components/FlowJobResult.svelte +5 -5
- package/package/components/FlowLogRow.svelte +2 -2
- package/package/components/FlowLogViewer.svelte +228 -57
- package/package/components/FlowLogViewer.svelte.d.ts +16 -5
- package/package/components/FlowLogViewerWrapper.svelte +56 -3
- package/package/components/FlowLogViewerWrapper.svelte.d.ts +4 -3
- package/package/components/FlowLoopIterationPreview.svelte +4 -4
- package/package/components/FlowMetadata.svelte +3 -4
- package/package/components/FlowMetadata.svelte.d.ts +4 -18
- package/package/components/FlowPreviewContent.svelte +9 -3
- package/package/components/FlowPreviewContent.svelte.d.ts +1 -1
- package/package/components/FlowStatusViewer.svelte +62 -59
- package/package/components/FlowStatusViewer.svelte.d.ts +2 -2
- package/package/components/FlowStatusViewerInner.svelte +186 -94
- package/package/components/FlowStatusViewerInner.svelte.d.ts +10 -3
- package/package/components/FlowTimeline.svelte +110 -131
- package/package/components/FlowTimeline.svelte.d.ts +13 -4
- package/package/components/FlowTimelineBar.svelte +227 -0
- package/package/components/FlowTimelineBar.svelte.d.ts +24 -0
- package/package/components/InputTransformForm.svelte +119 -3
- package/package/components/InputTransformForm.svelte.d.ts +3 -0
- package/package/components/InputTransformSchemaForm.svelte +5 -1
- package/package/components/InputTransformSchemaForm.svelte.d.ts +2 -0
- package/package/components/InstanceSetting.svelte +17 -42
- package/package/components/InstanceSettings.svelte +12 -21
- package/package/components/JobArgs.svelte +15 -16
- package/package/components/JobArgs.svelte.d.ts +4 -18
- package/package/components/JobLoader.svelte +23 -42
- package/package/components/JobLoader.svelte.d.ts +2 -0
- package/package/components/JobStatus.svelte +1 -1
- package/package/components/JobStatus.svelte.d.ts +4 -18
- package/package/components/ModulePreviewResultViewer.svelte +1 -7
- package/package/components/NextcloudSetting.svelte +6 -1
- package/package/components/Password.svelte +7 -11
- package/package/components/Password.svelte.d.ts +5 -20
- package/package/components/PasswordArgInput.svelte +35 -15
- package/package/components/PasswordArgInput.svelte.d.ts +4 -18
- package/package/components/QueuePosition.svelte +6 -2
- package/package/components/RunForm.svelte +5 -14
- package/package/components/S3ArrayHelperButton.svelte +12 -0
- package/package/components/S3ArrayHelperButton.svelte.d.ts +8 -0
- package/package/components/ScriptEditor.svelte +5 -6
- package/package/components/StringTypeNarrowing.svelte +39 -24
- package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
- package/package/components/TeamSelector.svelte +83 -37
- package/package/components/TeamSelector.svelte.d.ts +0 -1
- package/package/components/apps/components/buttons/AppButton.svelte +11 -1
- package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +13 -4
- package/package/components/apps/components/display/table/SyncColumnDefs.svelte +2 -2
- package/package/components/apps/components/display/table/utils.js +1 -1
- package/package/components/apps/components/helpers/RefreshButton.svelte +5 -1
- package/package/components/apps/components/helpers/RunnableComponent.svelte +0 -2
- package/package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +1 -0
- package/package/components/apps/components/layout/AppTabs.svelte +116 -71
- package/package/components/apps/components/layout/AppTabs.svelte.d.ts +1 -0
- package/package/components/apps/editor/component/ComponentInner.svelte +1 -0
- package/package/components/apps/editor/component/components.d.ts +16 -1
- package/package/components/apps/editor/component/components.js +22 -2
- package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +2 -0
- package/package/components/apps/editor/settingsPanel/GridTab.svelte +19 -1
- package/package/components/apps/editor/settingsPanel/GridTab.svelte.d.ts +3 -1
- package/package/components/apps/editor/settingsPanel/GridTabHidden.svelte +52 -0
- package/package/components/apps/editor/settingsPanel/GridTabHidden.svelte.d.ts +9 -0
- package/package/components/auditLogs/AuditLogsFilters.svelte +6 -0
- package/package/components/auditLogs/AuditLogsTable.svelte +17 -7
- package/package/components/auditLogs/AuditLogsTable.svelte.d.ts +1 -0
- package/package/components/common/CloseButton.svelte +2 -2
- package/package/components/common/CloseButton.svelte.d.ts +1 -0
- package/package/components/common/layout/List.svelte +3 -7
- package/package/components/common/layout/List.svelte.d.ts +7 -29
- package/package/components/common/popup/PopupV2.svelte +8 -25
- package/package/components/common/popup/PopupV2.svelte.d.ts +4 -2
- package/package/components/common/table/ScriptRow.svelte +22 -2
- package/package/components/copilot/FlowCopilotInputsModal.svelte +26 -23
- package/package/components/copilot/chat/AIChatManager.svelte.js +3 -2
- package/package/components/copilot/chat/ProviderModelSelector.svelte +1 -1
- package/package/components/copilot/chat/flow/FlowAIChat.svelte +4 -2
- package/package/components/copilot/chat/script/core.d.ts +4 -4
- package/package/components/copilot/chat/script/core.js +93 -34
- package/package/components/copilot/lib.d.ts +1 -0
- package/package/components/copilot/lib.js +6 -3
- package/package/components/custom_ui.d.ts +2 -0
- package/package/components/flows/FlowProgressBar.svelte +16 -16
- package/package/components/flows/FlowProgressBar.svelte.d.ts +7 -22
- package/package/components/flows/content/FlowInputsQuick.svelte +3 -2
- package/package/components/flows/content/FlowInputsQuick.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowModuleComponent.svelte +24 -1
- package/package/components/flows/flowInfers.js +34 -8
- package/package/components/flows/flowStore.d.ts +4 -1
- package/package/components/flows/map/FlowJobsMenu.svelte +3 -3
- package/package/components/flows/map/FlowJobsMenu.svelte.d.ts +1 -1
- package/package/components/flows/map/InsertModuleButton.svelte +4 -14
- package/package/components/flows/map/InsertModuleButton.svelte.d.ts +0 -1
- package/package/components/flows/map/InsertModuleInner.svelte +17 -20
- package/package/components/flows/map/MapItem.svelte +1 -1
- package/package/components/flows/pickers/PickHubScriptQuick.svelte +38 -52
- package/package/components/flows/pickers/PickHubScriptQuick.svelte.d.ts +1 -0
- package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte +27 -15
- package/package/components/flows/pickers/WorkspaceScriptPickerQuick.svelte.d.ts +1 -0
- package/package/components/flows/propPicker/OutputPicker.svelte +2 -0
- package/package/components/git_sync/DetectionFlow.svelte +33 -44
- package/package/components/git_sync/DetectionFlow.svelte.d.ts +1 -0
- package/package/components/git_sync/GitSyncContext.svelte.d.ts +22 -0
- package/package/components/git_sync/GitSyncContext.svelte.js +145 -5
- package/package/components/git_sync/GitSyncModeDisplay.svelte +14 -0
- package/package/components/git_sync/GitSyncModeDisplay.svelte.d.ts +9 -0
- package/package/components/git_sync/GitSyncRepositoryCard.svelte +365 -253
- package/package/components/git_sync/GitSyncRepositoryCard.svelte.d.ts +10 -1
- package/package/components/git_sync/GitSyncSection.svelte +134 -14
- package/package/components/git_sync/PullWorkspaceModal.svelte +24 -32
- package/package/components/git_sync/PushWorkspaceModal.svelte +24 -32
- package/package/components/graph/model.d.ts +5 -5
- package/package/components/graph/renderers/edges/EmptyEdge.svelte +3 -10
- package/package/components/graph/renderers/edges/EmptyEdge.svelte.d.ts +4 -18
- package/package/components/graph/renderers/nodes/AIToolNode.svelte +2 -2
- package/package/components/graph/renderers/nodes/NewAIToolNode.svelte +5 -10
- package/package/components/home/ItemsList.svelte +1 -1
- package/package/components/jobs/JobProgressBar.svelte +27 -21
- package/package/components/jobs/JobProgressBar.svelte.d.ts +9 -24
- package/package/components/meltComponents/MenuSingleItem.svelte +3 -8
- package/package/components/meltComponents/MenuSingleItem.svelte.d.ts +0 -3
- package/package/components/meltComponents/Popover.svelte +3 -2
- package/package/components/meltComponents/Popover.svelte.d.ts +1 -0
- package/package/components/meltComponents/Tooltip.svelte +1 -1
- package/package/components/progressBar/ProgressBar.svelte +39 -53
- package/package/components/progressBar/ProgressBar.svelte.d.ts +11 -26
- package/package/components/runs/JobsLoader.svelte +1 -1
- package/package/components/runs/NoWorkerWithTagWarning.svelte +3 -3
- package/package/components/runs/NoWorkerWithTagWarning.svelte.d.ts +1 -1
- package/package/components/schema/AddPropertyV2.svelte +7 -4
- package/package/components/schema/PropertyEditor.svelte.d.ts +1 -1
- package/package/components/select/MultiSelect.svelte +2 -2
- package/package/components/select/MultiSelect.svelte.d.ts +1 -0
- package/package/components/settings/WorkspaceUserSettings.svelte +92 -1
- package/package/components/sidebar/MenuLink.svelte +2 -1
- package/package/components/sidebar/MenuLink.svelte.d.ts +1 -0
- package/package/components/sidebar/SidebarContent.svelte +27 -27
- package/package/components/table/Cell.svelte +7 -14
- package/package/components/table/Cell.svelte.d.ts +13 -35
- package/package/components/triggers/AddTriggersButton.svelte +1 -0
- package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte +1 -1
- package/package/components/triggers/gcp/GcpTriggerEditorConfigSection.svelte.d.ts +2 -1
- package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +28 -5
- package/package/components/triggers/gcp/utils.js +1 -0
- package/package/components/triggers/schedules/ScheduleEditorInner.svelte +1 -0
- package/package/components/triggers/webhook/WebhooksConfigSection.svelte +143 -63
- package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +22 -0
- package/package/components/triggers/websocket/utils.js +1 -0
- package/package/components/workspaceSettings/AISettings.svelte +8 -2
- package/package/components/workspaceSettings/AISettings.svelte.d.ts +2 -1
- package/package/components/workspaceSettings/ModelTokenLimits.svelte +165 -0
- package/package/components/workspaceSettings/ModelTokenLimits.svelte.d.ts +8 -0
- package/package/components/workspaceSettings/StorageSettings.svelte +123 -51
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +141 -16
- package/package/gen/schemas.gen.js +144 -16
- package/package/gen/services.gen.d.ts +62 -42
- package/package/gen/services.gen.js +131 -82
- package/package/gen/types.gen.d.ts +218 -144
- package/package/hubPaths.json +2 -1
- package/package/services/JobManager.js +10 -7
- package/package/stores.d.ts +1 -0
- package/package/stores.js +6 -3
- package/package/timelineCompute.svelte.d.ts +21 -0
- package/package/timelineCompute.svelte.js +113 -0
- package/package/utils.d.ts +15 -8
- package/package/utils.js +62 -12
- package/package/workspace_settings.d.ts +13 -8
- package/package/workspace_settings.js +46 -11
- package/package.json +2 -2
|
@@ -1,32 +1,25 @@
|
|
|
1
|
+
<script lang="ts" module>"use strict";
|
|
2
|
+
let refreshCount = $state({ val: 0 });
|
|
3
|
+
</script>
|
|
4
|
+
|
|
1
5
|
<script lang="ts">import { createEventDispatcher, getContext } from 'svelte';
|
|
2
6
|
import StepGenQuick from '../../copilot/StepGenQuick.svelte';
|
|
3
7
|
import FlowInputsQuick from '../content/FlowInputsQuick.svelte';
|
|
4
8
|
import ToggleHubWorkspaceQuick from '../../ToggleHubWorkspaceQuick.svelte';
|
|
5
9
|
import TopLevelNode from '../pickers/TopLevelNode.svelte';
|
|
6
|
-
|
|
10
|
+
import RefreshButton from '../../common/button/RefreshButton.svelte';
|
|
7
11
|
const dispatch = createEventDispatcher();
|
|
8
12
|
let { stop = false, funcDesc = $bindable(''), disableAi = false, kind = 'script', allowTrigger = true, scriptOnly = false } = $props();
|
|
9
13
|
let customUi = getContext('customUi');
|
|
10
14
|
let selectedKind = $state(kind);
|
|
11
15
|
let preFilter = $state('all');
|
|
12
16
|
let loading = $state(false);
|
|
13
|
-
let small = $
|
|
17
|
+
let small = $derived(kind === 'preprocessor' || kind === 'failure');
|
|
14
18
|
let width = $state(0);
|
|
15
19
|
let height = $state(0);
|
|
16
20
|
let displayPath = $derived(width > 650 || height > 400);
|
|
17
|
-
$effect(() => {
|
|
18
|
-
small = kind === 'preprocessor' || kind === 'failure';
|
|
19
|
-
});
|
|
20
21
|
</script>
|
|
21
22
|
|
|
22
|
-
<!-- <Menu transitionDuration={0} pointerDown bind:show={open} noMinW {placement} let:close> -->
|
|
23
|
-
|
|
24
|
-
<!-- {floatingConfig}
|
|
25
|
-
floatingClasses="mt-2"
|
|
26
|
-
containerClasses="border rounded-lg shadow-lg bg-surface"
|
|
27
|
-
noTransition
|
|
28
|
-
shouldUsePortal={true} -->
|
|
29
|
-
|
|
30
23
|
<div
|
|
31
24
|
id="flow-editor-insert-module"
|
|
32
25
|
class="flex flex-col h-[400px] {small
|
|
@@ -53,6 +46,7 @@ shouldUsePortal={true} -->
|
|
|
53
46
|
{#if selectedKind != 'preprocessor' && selectedKind != 'flow'}
|
|
54
47
|
<ToggleHubWorkspaceQuick bind:selected={preFilter} />
|
|
55
48
|
{/if}
|
|
49
|
+
<RefreshButton {loading} on:click={() => (refreshCount.val += 1)} />
|
|
56
50
|
</div>
|
|
57
51
|
|
|
58
52
|
<div class="flex flex-row grow min-h-0">
|
|
@@ -128,13 +122,15 @@ shouldUsePortal={true} -->
|
|
|
128
122
|
dispatch('new', { kind: 'branchall' })
|
|
129
123
|
}}
|
|
130
124
|
/>
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
125
|
+
{#if customUi?.aiAgent != false}
|
|
126
|
+
<TopLevelNode
|
|
127
|
+
label="AI Agent"
|
|
128
|
+
on:select={() => {
|
|
129
|
+
dispatch('close')
|
|
130
|
+
dispatch('new', { kind: 'aiagent' })
|
|
131
|
+
}}
|
|
132
|
+
/>
|
|
133
|
+
{/if}
|
|
138
134
|
</div>
|
|
139
135
|
{/if}
|
|
140
136
|
|
|
@@ -154,6 +150,7 @@ shouldUsePortal={true} -->
|
|
|
154
150
|
{preFilter}
|
|
155
151
|
{small}
|
|
156
152
|
{displayPath}
|
|
153
|
+
refreshCount={refreshCount.val}
|
|
157
154
|
/>
|
|
158
155
|
</div>
|
|
159
156
|
</div>
|
|
@@ -40,7 +40,7 @@ let parentLoop = $derived(flowStore?.val && mod ? checkIfParentLoop(flowStore.va
|
|
|
40
40
|
<div
|
|
41
41
|
class={twMerge(
|
|
42
42
|
'absolute z-10 right-0 -top-4 center-center text-tertiary text-2xs',
|
|
43
|
-
editMode ? 'text-gray-400 dark:text-gray-500 text-2xs font-normal mr-2' : ''
|
|
43
|
+
editMode ? 'text-gray-400 dark:text-gray-500 text-2xs font-normal mr-2 right-10' : ''
|
|
44
44
|
)}
|
|
45
45
|
>
|
|
46
46
|
{msToSec(duration_ms)}s
|
|
@@ -1,73 +1,65 @@
|
|
|
1
|
+
<script module lang="ts">"use strict";
|
|
2
|
+
let listHubIntegrationsCached = createCache(({ kind }) => IntegrationService.listHubIntegrations({ kind }), { initial: { kind: 'script', refreshCount: 0 }, invalidateMs: 1000 * 60 });
|
|
3
|
+
let listHubScriptsCached = createCache(async ({ filter, kind, appFilter }) => filter.length > 0
|
|
4
|
+
? await ScriptService.queryHubScripts({ text: filter, limit: 40, kind })
|
|
5
|
+
: ((await ScriptService.getTopHubScripts({ limit: 40, kind, app: appFilter })).asks ?? []), {
|
|
6
|
+
initial: { filter: '', kind: 'script', appFilter: undefined, refreshCount: 0 },
|
|
7
|
+
invalidateMs: 1000 * 60
|
|
8
|
+
});
|
|
9
|
+
</script>
|
|
10
|
+
|
|
1
11
|
<script lang="ts">import { createEventDispatcher, untrack } from 'svelte';
|
|
2
12
|
import { Skeleton } from '../../common';
|
|
3
|
-
import { classNames } from '../../../utils';
|
|
13
|
+
import { classNames, createCache } from '../../../utils';
|
|
4
14
|
import { APP_TO_ICON_COMPONENT } from '../../icons';
|
|
5
15
|
import { IntegrationService, ScriptService } from '../../../gen';
|
|
6
16
|
import { Circle } from 'lucide-svelte';
|
|
7
17
|
import Popover from '../../Popover.svelte';
|
|
18
|
+
import { usePromise } from '../../../svelte5Utils.svelte';
|
|
8
19
|
let hubNotAvailable = $state(false);
|
|
9
20
|
const dispatch = createEventDispatcher();
|
|
10
|
-
let { kind = 'script', filter = $bindable(''), loading = $bindable(false), selected = undefined, appFilter = undefined, items = $bindable([]), displayPath = false, apps = $bindable([]) } = $props();
|
|
11
|
-
let allApps = [];
|
|
21
|
+
let { kind = 'script', filter = $bindable(''), loading = $bindable(false), selected = undefined, appFilter = undefined, items = $bindable([]), displayPath = false, apps = $bindable([]), refreshCount = 0 } = $props();
|
|
22
|
+
let allApps = $state([]);
|
|
23
|
+
$effect(() => {
|
|
24
|
+
if (filter.length > 0) {
|
|
25
|
+
apps = Array.from(new Set(items?.map((x) => x.app) ?? [])).sort();
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
apps = allApps;
|
|
29
|
+
}
|
|
30
|
+
});
|
|
12
31
|
async function getAllApps(filterKind) {
|
|
13
32
|
try {
|
|
14
33
|
hubNotAvailable = false;
|
|
15
|
-
allApps = (await
|
|
16
|
-
kind: filterKind
|
|
17
|
-
})).map((x) => x.name);
|
|
18
|
-
apps = allApps;
|
|
34
|
+
allApps = (await listHubIntegrationsCached({ kind: filterKind, refreshCount })).map((x) => x.name);
|
|
19
35
|
}
|
|
20
36
|
catch (err) {
|
|
21
37
|
console.error('Hub is not available');
|
|
22
38
|
allApps = [];
|
|
23
|
-
apps = [];
|
|
24
39
|
hubNotAvailable = true;
|
|
25
40
|
}
|
|
26
41
|
}
|
|
27
|
-
let
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
42
|
+
let hubScriptsFilteredPromise = usePromise(() => listHubScriptsCached({ appFilter, filter, kind, refreshCount }), { loadInit: false });
|
|
43
|
+
$effect(() => {
|
|
44
|
+
;
|
|
45
|
+
[filter, kind, appFilter, refreshCount];
|
|
46
|
+
hubScriptsFilteredPromise.refresh();
|
|
47
|
+
});
|
|
48
|
+
$effect(() => {
|
|
49
|
+
loading = hubScriptsFilteredPromise.status === 'loading';
|
|
50
|
+
hubNotAvailable = !!hubScriptsFilteredPromise.error;
|
|
51
|
+
const scripts = hubScriptsFilteredPromise.value;
|
|
52
|
+
untrack(() => {
|
|
53
|
+
if (!scripts)
|
|
36
54
|
return;
|
|
37
|
-
const scripts = filter.length > 0
|
|
38
|
-
? await ScriptService.queryHubScripts({
|
|
39
|
-
text: `${filter}`,
|
|
40
|
-
limit: 40,
|
|
41
|
-
kind: filterKind
|
|
42
|
-
})
|
|
43
|
-
: ((await ScriptService.getTopHubScripts({
|
|
44
|
-
limit: 40,
|
|
45
|
-
kind: filterKind,
|
|
46
|
-
app: appFilter
|
|
47
|
-
})).asks ?? []);
|
|
48
55
|
const mappedItems = scripts.map((x) => ({
|
|
49
56
|
...x,
|
|
50
57
|
path: `hub/${x.version_id}/${x.app}/${x.summary.toLowerCase().replaceAll(/\s+/g, '_')}`,
|
|
51
58
|
summary: `${x.summary} (${x.app})`
|
|
52
59
|
}));
|
|
53
|
-
if (filter.length > 0) {
|
|
54
|
-
apps = Array.from(new Set(mappedItems?.map((x) => x.app) ?? [])).sort();
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
apps = allApps;
|
|
58
|
-
}
|
|
59
60
|
items = appFilter ? mappedItems.filter((x) => x.app === appFilter) : mappedItems;
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
hubNotAvailable = false;
|
|
64
|
-
}
|
|
65
|
-
catch (err) {
|
|
66
|
-
hubNotAvailable = true;
|
|
67
|
-
console.error('Hub not available');
|
|
68
|
-
loading = false;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
61
|
+
});
|
|
62
|
+
});
|
|
71
63
|
function onKeyDown(e) {
|
|
72
64
|
if (selected != undefined &&
|
|
73
65
|
items &&
|
|
@@ -81,13 +73,7 @@ function onKeyDown(e) {
|
|
|
81
73
|
}
|
|
82
74
|
$effect(() => {
|
|
83
75
|
;
|
|
84
|
-
[
|
|
85
|
-
untrack(() => {
|
|
86
|
-
applyFilter(filter, kind, appFilter);
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
$effect(() => {
|
|
90
|
-
kind;
|
|
76
|
+
[kind, refreshCount];
|
|
91
77
|
untrack(() => {
|
|
92
78
|
getAllApps(kind);
|
|
93
79
|
});
|
|
@@ -16,6 +16,7 @@ interface Props {
|
|
|
16
16
|
}[];
|
|
17
17
|
displayPath?: boolean;
|
|
18
18
|
apps?: string[];
|
|
19
|
+
refreshCount?: number;
|
|
19
20
|
}
|
|
20
21
|
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> {
|
|
21
22
|
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
@@ -1,25 +1,36 @@
|
|
|
1
|
+
<script module lang="ts">"use strict";
|
|
2
|
+
let initialWorkspace = get(workspaceStore);
|
|
3
|
+
let loadItemsCached = createCache(({ workspace, kind, isTemplate }) => workspace
|
|
4
|
+
? kind == 'flow'
|
|
5
|
+
? FlowService.listFlows({ workspace })
|
|
6
|
+
: ScriptService.listScripts({ workspace, kinds: kind, isTemplate })
|
|
7
|
+
: undefined, initialWorkspace
|
|
8
|
+
? {
|
|
9
|
+
initial: {
|
|
10
|
+
workspace: initialWorkspace,
|
|
11
|
+
kind: 'script',
|
|
12
|
+
isTemplate: undefined,
|
|
13
|
+
refreshCount: 0
|
|
14
|
+
},
|
|
15
|
+
invalidateMs: 1000 * 60
|
|
16
|
+
}
|
|
17
|
+
: {});
|
|
18
|
+
</script>
|
|
19
|
+
|
|
1
20
|
<script lang="ts">import { workspaceStore } from '../../../stores';
|
|
2
21
|
import { createEventDispatcher, untrack } from 'svelte';
|
|
3
22
|
import { FlowService, ScriptService } from '../../../gen';
|
|
4
23
|
import SearchItems from '../../SearchItems.svelte';
|
|
5
24
|
import { Skeleton } from '../../common';
|
|
6
|
-
import { emptyString } from '../../../utils';
|
|
25
|
+
import { createCache, emptyString } from '../../../utils';
|
|
7
26
|
import { Code2 } from 'lucide-svelte';
|
|
8
27
|
import BarsStaggered from '../../icons/BarsStaggered.svelte';
|
|
9
28
|
import Popover from '../../Popover.svelte';
|
|
10
|
-
|
|
29
|
+
import { usePromise } from '../../../svelte5Utils.svelte';
|
|
30
|
+
import { get } from 'svelte/store';
|
|
31
|
+
let items = usePromise(async () => await loadItemsCached({ workspace: $workspaceStore, kind, isTemplate, refreshCount }), { loadInit: false, clearValueOnRefresh: false });
|
|
11
32
|
let filteredItems = $state(undefined);
|
|
12
|
-
|
|
13
|
-
items =
|
|
14
|
-
kind == 'flow'
|
|
15
|
-
? await FlowService.listFlows({ workspace: $workspaceStore })
|
|
16
|
-
: await ScriptService.listScripts({
|
|
17
|
-
workspace: $workspaceStore,
|
|
18
|
-
kinds: kind,
|
|
19
|
-
isTemplate
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
let { kind = 'script', isTemplate = undefined, selected = undefined, displayPath = false, filteredWithOwner = $bindable(undefined), filter = '', owners = $bindable([]), ownerFilter = $bindable(undefined) } = $props();
|
|
33
|
+
let { kind = 'script', isTemplate = undefined, selected = undefined, displayPath = false, filteredWithOwner = $bindable(undefined), filter = '', owners = $bindable([]), ownerFilter = $bindable(undefined), refreshCount = 0 } = $props();
|
|
23
34
|
const dispatch = createEventDispatcher();
|
|
24
35
|
let lockHash = false;
|
|
25
36
|
function onKeyDown(e) {
|
|
@@ -39,7 +50,8 @@ function onKeyDown(e) {
|
|
|
39
50
|
}
|
|
40
51
|
}
|
|
41
52
|
$effect(() => {
|
|
42
|
-
|
|
53
|
+
refreshCount;
|
|
54
|
+
$workspaceStore && kind && untrack(() => items.refresh());
|
|
43
55
|
});
|
|
44
56
|
$effect(() => {
|
|
45
57
|
if ($workspaceStore) {
|
|
@@ -69,7 +81,7 @@ $effect(() => {
|
|
|
69
81
|
|
|
70
82
|
<SearchItems
|
|
71
83
|
{filter}
|
|
72
|
-
{items}
|
|
84
|
+
items={items.value}
|
|
73
85
|
bind:filteredItems
|
|
74
86
|
f={(x) => (emptyString(x.summary) ? x.path : x.summary + ' (' + x.path + ')')}
|
|
75
87
|
/>
|
|
@@ -18,6 +18,7 @@ interface Props {
|
|
|
18
18
|
kind: 'inline' | 'owner' | 'integrations';
|
|
19
19
|
name: string | undefined;
|
|
20
20
|
} | undefined;
|
|
21
|
+
refreshCount?: number;
|
|
21
22
|
}
|
|
22
23
|
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> {
|
|
23
24
|
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
@@ -102,6 +102,7 @@ onMount(() => {
|
|
|
102
102
|
<div class="flex flex-row items-center justify-center w-full h-full">
|
|
103
103
|
{#if showInput}
|
|
104
104
|
<Popover
|
|
105
|
+
enableFlyTransition
|
|
105
106
|
floatingConfig={{
|
|
106
107
|
placement: 'bottom',
|
|
107
108
|
gutter: 0,
|
|
@@ -144,6 +145,7 @@ onMount(() => {
|
|
|
144
145
|
{/if}
|
|
145
146
|
|
|
146
147
|
<Popover
|
|
148
|
+
enableFlyTransition
|
|
147
149
|
floatingConfig={{
|
|
148
150
|
placement: 'bottom',
|
|
149
151
|
gutter: 0,
|
|
@@ -5,10 +5,34 @@ import GitSyncFilterSettings from '../workspaceSettings/GitSyncFilterSettings.sv
|
|
|
5
5
|
import Toggle from '../Toggle.svelte';
|
|
6
6
|
import { sendUserToast } from '../../toast';
|
|
7
7
|
import { workspaceStore } from '../../stores';
|
|
8
|
-
|
|
8
|
+
import GitSyncModeDisplay from './GitSyncModeDisplay.svelte';
|
|
9
|
+
let { idx, mode } = $props();
|
|
9
10
|
const gitSyncContext = getGitSyncContext();
|
|
10
11
|
const repo = $derived(gitSyncContext.getRepository(idx));
|
|
12
|
+
let targetBranch = $state('main');
|
|
13
|
+
// Update target branch when repository changes
|
|
14
|
+
$effect(() => {
|
|
15
|
+
const abortController = new AbortController();
|
|
16
|
+
if (repo?.git_repo_resource_path) {
|
|
17
|
+
gitSyncContext.getTargetBranch(repo).then(branch => {
|
|
18
|
+
if (!abortController.signal.aborted) {
|
|
19
|
+
targetBranch = branch;
|
|
20
|
+
}
|
|
21
|
+
}).catch(error => {
|
|
22
|
+
if (!abortController.signal.aborted) {
|
|
23
|
+
console.warn('Failed to get target branch:', error);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
return () => {
|
|
28
|
+
abortController.abort();
|
|
29
|
+
};
|
|
30
|
+
});
|
|
11
31
|
async function handleDetect() {
|
|
32
|
+
if (!repo) {
|
|
33
|
+
sendUserToast('Repository not found', true);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
12
36
|
try {
|
|
13
37
|
await gitSyncContext.detectRepository(idx);
|
|
14
38
|
}
|
|
@@ -43,24 +67,13 @@ async function handleSaveConnection() {
|
|
|
43
67
|
}
|
|
44
68
|
</script>
|
|
45
69
|
|
|
70
|
+
|
|
46
71
|
{#if repo}
|
|
47
72
|
<div class="space-y-4">
|
|
48
73
|
{#if !repo.detectionState || repo.detectionState === 'idle'}
|
|
49
|
-
<!--
|
|
50
|
-
|
|
51
|
-
<
|
|
52
|
-
disabled={!repo.git_repo_resource_path}
|
|
53
|
-
bind:checked={repo.use_individual_branch}
|
|
54
|
-
options={{
|
|
55
|
-
left: 'Sync mode',
|
|
56
|
-
leftTooltip: 'Changes will be committed directly to the branch',
|
|
57
|
-
right: 'Promotion mode',
|
|
58
|
-
rightTooltip:
|
|
59
|
-
"Changes will be made to a new branch per deployed object (prefixed with 'wm_deploy/')"
|
|
60
|
-
}}
|
|
61
|
-
/>
|
|
62
|
-
|
|
63
|
-
{#if repo.use_individual_branch}
|
|
74
|
+
<!-- Folder grouping option for promotion mode -->
|
|
75
|
+
{#if mode === 'promotion'}
|
|
76
|
+
<div class="space-y-3">
|
|
64
77
|
<Toggle
|
|
65
78
|
disabled={!repo.git_repo_resource_path}
|
|
66
79
|
bind:checked={repo.group_by_folder}
|
|
@@ -70,8 +83,8 @@ async function handleSaveConnection() {
|
|
|
70
83
|
'Instead of creating a branch per object, Windmill will create a branch per folder containing objects being deployed.'
|
|
71
84
|
}}
|
|
72
85
|
/>
|
|
73
|
-
|
|
74
|
-
|
|
86
|
+
</div>
|
|
87
|
+
{/if}
|
|
75
88
|
|
|
76
89
|
<!-- Check repo settings button -->
|
|
77
90
|
<div class="flex justify-start">
|
|
@@ -110,19 +123,7 @@ async function handleSaveConnection() {
|
|
|
110
123
|
useIndividualBranch={repo.use_individual_branch}
|
|
111
124
|
/>
|
|
112
125
|
|
|
113
|
-
|
|
114
|
-
<div class="text-base">
|
|
115
|
-
{#if repo.use_individual_branch}
|
|
116
|
-
<div
|
|
117
|
-
><span class="font-bold">Promotion:</span> Creating branches whose promotion target is main</div
|
|
118
|
-
>
|
|
119
|
-
{#if repo.group_by_folder}
|
|
120
|
-
<div class="text-sm text-tertiary mt-1">Grouped by folder</div>
|
|
121
|
-
{/if}
|
|
122
|
-
{:else}
|
|
123
|
-
<div>Sync: <span class="font-bold">Syncing back to branch main</span></div>
|
|
124
|
-
{/if}
|
|
125
|
-
</div>
|
|
126
|
+
<GitSyncModeDisplay {mode} {targetBranch} repository={repo} />
|
|
126
127
|
|
|
127
128
|
<!-- Initialize button -->
|
|
128
129
|
<div class="flex justify-start">
|
|
@@ -149,19 +150,7 @@ async function handleSaveConnection() {
|
|
|
149
150
|
useIndividualBranch={repo.use_individual_branch}
|
|
150
151
|
/>
|
|
151
152
|
|
|
152
|
-
|
|
153
|
-
<div class="text-base">
|
|
154
|
-
{#if repo.use_individual_branch}
|
|
155
|
-
<div
|
|
156
|
-
><span class="font-bold">Promotion:</span> Creating branches whose promotion target is main</div
|
|
157
|
-
>
|
|
158
|
-
{#if repo.group_by_folder}
|
|
159
|
-
<div class="text-sm text-tertiary mt-1">Grouped by folder</div>
|
|
160
|
-
{/if}
|
|
161
|
-
{:else}
|
|
162
|
-
<div>Sync: <span class="font-bold">Syncing back to branch main</span></div>
|
|
163
|
-
{/if}
|
|
164
|
-
</div>
|
|
153
|
+
<GitSyncModeDisplay {mode} {targetBranch} repository={repo} />
|
|
165
154
|
|
|
166
155
|
<!-- Save connection button -->
|
|
167
156
|
<div class="flex justify-start">
|
|
@@ -12,6 +12,8 @@ export type GitSyncRepository = BackendGitRepositorySettings & {
|
|
|
12
12
|
detectionJobId?: string;
|
|
13
13
|
detectionJobStatus?: 'running' | 'success' | 'failure';
|
|
14
14
|
_trackedPath?: string;
|
|
15
|
+
_targetBranch?: string;
|
|
16
|
+
_detectionTimestamp?: number;
|
|
15
17
|
};
|
|
16
18
|
export type GitSyncTestJob = {
|
|
17
19
|
jobId: string;
|
|
@@ -60,7 +62,10 @@ export declare function createGitSyncContext(workspace: string): {
|
|
|
60
62
|
readonly hasUnsavedConnections: boolean;
|
|
61
63
|
readonly hasWorkspaceLevelSettings: boolean;
|
|
62
64
|
addRepository: () => void;
|
|
65
|
+
addSyncRepository: () => void;
|
|
66
|
+
addPromotionRepository: () => void;
|
|
63
67
|
removeRepository: (idx: number) => Promise<void>;
|
|
68
|
+
removeRepositoryByPath: (resourcePath: string) => Promise<void>;
|
|
64
69
|
getRepository: (idx: number) => GitSyncRepository;
|
|
65
70
|
getValidation: (idx: number) => ValidationState;
|
|
66
71
|
revertRepository: (idx: number) => void;
|
|
@@ -76,6 +81,23 @@ export declare function createGitSyncContext(workspace: string): {
|
|
|
76
81
|
closeSuccessModal: () => void;
|
|
77
82
|
loadSettings: () => Promise<void>;
|
|
78
83
|
saveRepository: (idx: number, savedWithoutInit?: boolean) => Promise<void>;
|
|
84
|
+
getPrimarySyncRepository: () => {
|
|
85
|
+
repo: GitSyncRepository;
|
|
86
|
+
idx: number;
|
|
87
|
+
} | null;
|
|
88
|
+
getPrimaryPromotionRepository: () => {
|
|
89
|
+
repo: GitSyncRepository;
|
|
90
|
+
idx: number;
|
|
91
|
+
} | null;
|
|
92
|
+
getSecondarySyncRepositories: () => {
|
|
93
|
+
repo: GitSyncRepository;
|
|
94
|
+
idx: number;
|
|
95
|
+
}[];
|
|
96
|
+
getLegacyPromotionRepositories: () => {
|
|
97
|
+
repo: GitSyncRepository;
|
|
98
|
+
idx: number;
|
|
99
|
+
}[];
|
|
100
|
+
getTargetBranch: (repo: GitSyncRepository) => Promise<string>;
|
|
79
101
|
};
|
|
80
102
|
export type GitSyncContextType = ReturnType<typeof createGitSyncContext>;
|
|
81
103
|
export declare function setGitSyncContext(workspace: string): GitSyncContextType;
|