windmill-components 1.687.0 → 1.695.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/components/ArgInput.svelte +2 -0
- package/package/components/AutoscalingConfigEditor.svelte +18 -4
- package/package/components/CompareWorkspaces.svelte +206 -157
- package/package/components/DatatableSchemaDiff.svelte +2 -2
- package/package/components/Dev.svelte +401 -85
- package/package/components/EditableSchemaForm.svelte +4 -0
- package/package/components/ErrorOrRecoveryHandler.svelte +2 -2
- package/package/components/FlowPreviewContent.svelte +32 -30
- package/package/components/FlowRestartButton.svelte +143 -61
- package/package/components/FlowRestartButton.svelte.d.ts +37 -0
- package/package/components/FlowStatusViewer.svelte +15 -1
- package/package/components/FlowStatusViewer.svelte.d.ts +10 -2
- package/package/components/FlowStatusViewerInner.svelte +1 -2
- package/package/components/FlowStatusViewerInner.svelte.d.ts +6 -2
- package/package/components/ForkConflictModal.svelte +57 -0
- package/package/components/ForkConflictModal.svelte.d.ts +3 -0
- package/package/components/GitRepoViewer.svelte +251 -97
- package/package/components/InputTransformSchemaForm.svelte +1 -1
- package/package/components/InstanceSettings.svelte +36 -16
- package/package/components/Login.svelte +113 -28
- package/package/components/Login.svelte.d.ts +1 -0
- package/package/components/Path.svelte +7 -1
- package/package/components/Path.svelte.d.ts +1 -1
- package/package/components/RunsPage.svelte +2 -1
- package/package/components/S3FilePickerInner.svelte +89 -89
- package/package/components/ScriptEditor.svelte +18 -5
- package/package/components/ShareModal.svelte.d.ts +1 -1
- package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +3 -0
- package/package/components/apps/components/helpers/executeRunnable.js +2 -1
- package/package/components/apps/editor/AppReportsDrawerInner.svelte +1 -1
- package/package/components/apps/editor/appPolicy.js +2 -1
- package/package/components/apps/editor/commonAppUtils.d.ts +3 -0
- package/package/components/apps/editor/inlineScriptsPanel/CacheTtlPopup.svelte +1 -1
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +7 -0
- package/package/components/apps/editor/inlineScriptsPanel/TagPopup.svelte +49 -0
- package/package/components/apps/editor/inlineScriptsPanel/TagPopup.svelte.d.ts +9 -0
- package/package/components/apps/inputType.d.ts +1 -0
- package/package/components/apps/sharedTypes.d.ts +1 -0
- package/package/components/auditLogs/AuditLogsFilters.svelte +8 -3
- package/package/components/common/fileUpload/S3ArgInput.svelte +12 -10
- package/package/components/common/fileUpload/S3ArgInput.svelte.d.ts +2 -0
- package/package/components/copilot/chat/AIChatDisplay.svelte +5 -36
- package/package/components/copilot/chat/AIChatInput.svelte +56 -47
- package/package/components/copilot/chat/AIChatManager.svelte.js +48 -46
- package/package/components/copilot/chat/ContextElementBadge.svelte +6 -4
- package/package/components/copilot/chat/app/core.d.ts +12 -20
- package/package/components/copilot/chat/app/core.js +103 -160
- package/package/components/copilot/chat/app/core.test.js +234 -9
- package/package/components/copilot/chat/context.js +44 -0
- package/package/components/copilot/chat/flow/FlowAIChat.svelte +5 -3
- package/package/components/copilot/chat/flow/core.d.ts +2 -1
- package/package/components/copilot/chat/flow/core.js +48 -21
- package/package/components/copilot/chat/flow/helperUtils.d.ts +5 -2
- package/package/components/copilot/chat/flow/helperUtils.js +33 -1
- package/package/components/copilot/chat/flow/helperUtils.test.js +116 -1
- package/package/components/copilot/chat/flow/openFlow.json +1 -1
- package/package/components/copilot/chat/flow/openFlowZod.gen.js +24 -0
- package/package/components/copilot/chat/script/core.js +3 -0
- package/package/components/copilot/chat/shared.d.ts +6 -0
- package/package/components/copilot/chat/shared.js +22 -1
- package/package/components/copilot/chat/shared.test.d.ts +1 -0
- package/package/components/copilot/chat/shared.test.js +412 -0
- package/package/components/copilot/chat/workspaceTools.d.ts +7 -0
- package/package/components/copilot/chat/workspaceTools.js +239 -0
- package/package/components/copilot/chat/workspaceToolsZod.gen.d.ts +1295 -0
- package/package/components/copilot/chat/workspaceToolsZod.gen.js +424 -0
- package/package/components/copilot/lib.js +3 -1
- package/package/components/copilot/lib.test.d.ts +1 -0
- package/package/components/copilot/lib.test.js +19 -0
- package/package/components/copilot/modelConfig.d.ts +3 -0
- package/package/components/copilot/modelConfig.js +10 -0
- package/package/components/flows/FlowProgressBar.svelte +5 -2
- package/package/components/flows/content/FlowModuleComponent.svelte +636 -599
- package/package/components/flows/conversations/FlowChatManager.svelte.js +21 -10
- package/package/components/flows/flowStateUtils.svelte.js +5 -1
- package/package/components/flows/map/FlowModuleSchemaMap.svelte +3 -2
- package/package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +1 -0
- package/package/components/git_sync/GitSyncContext.svelte.js +0 -2
- package/package/components/graph/FlowGraphV2.svelte +7 -3
- package/package/components/graph/FlowGraphV2.svelte.d.ts +1 -0
- package/package/components/graph/renderers/triggers/TriggersBadge.svelte +3 -0
- package/package/components/home/deploy_ui.js +1 -1
- package/package/components/icons/AzureIcon.svelte +12 -25
- package/package/components/icons/AzureIcon.svelte.d.ts +3 -2
- package/package/components/instanceSettings.js +24 -0
- package/package/components/mcp/McpScopeSelector.svelte +119 -9
- package/package/components/mcp/McpScopeSelector.svelte.d.ts +1 -0
- package/package/components/offboarding-utils.js +2 -0
- package/package/components/progressBar/ProgressBar.svelte +9 -5
- package/package/components/progressBar/ProgressBar.svelte.d.ts +1 -0
- package/package/components/raw_apps/DeleteAfterUsePopup.svelte +52 -0
- package/package/components/raw_apps/DeleteAfterUsePopup.svelte.d.ts +9 -0
- package/package/components/raw_apps/RawAppBackgroundRunner.svelte +5 -1
- package/package/components/raw_apps/RawAppEditor.svelte +159 -102
- package/package/components/raw_apps/RawAppInlineScriptEditor.svelte +9 -3
- package/package/components/raw_apps/RawAppInlineScriptEditor.svelte.d.ts +2 -1
- package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte +1 -0
- package/package/components/raw_apps/RawAppInlineScriptRunnable.svelte.d.ts +1 -0
- package/package/components/raw_apps/RawAppInputsSpecEditor.svelte +48 -5
- package/package/components/raw_apps/RawAppSharedUiDrawer.svelte +129 -0
- package/package/components/raw_apps/RawAppSharedUiDrawer.svelte.d.ts +5 -0
- package/package/components/raw_apps/RawAppSidebar.svelte +12 -0
- package/package/components/raw_apps/dataTableRefUtils.d.ts +7 -0
- package/package/components/raw_apps/dataTableRefUtils.js +34 -0
- package/package/components/raw_apps/dataTableRefUtils.test.d.ts +1 -0
- package/package/components/raw_apps/dataTableRefUtils.test.js +29 -0
- package/package/components/raw_apps/rawAppPolicy.d.ts +1 -0
- package/package/components/raw_apps/rawAppPolicy.js +17 -2
- package/package/components/resources/resourceTypesFilter.d.ts +19 -0
- package/package/components/resources/resourceTypesFilter.js +21 -0
- package/package/components/restartFromStepPath.d.ts +39 -0
- package/package/components/restartFromStepPath.js +89 -0
- package/package/components/runs/JobDetailFieldConfig.d.ts +1 -0
- package/package/components/runs/JobDetailFieldConfig.js +57 -10
- package/package/components/runs/JobDetailHeader.svelte +24 -3
- package/package/components/runs/runsFilter.d.ts +1 -1
- package/package/components/schema/FlowPropertyEditor.svelte +30 -1
- package/package/components/schema/FlowPropertyEditor.svelte.d.ts +5 -2
- package/package/components/search/GlobalSearchModal.svelte +8 -1
- package/package/components/select/Select.svelte +1 -1
- package/package/components/settings/CreateToken.svelte +48 -77
- package/package/components/settings/EditTokenScopesModal.svelte +57 -0
- package/package/components/settings/EditTokenScopesModal.svelte.d.ts +10 -0
- package/package/components/settings/ScopesPicker.svelte +43 -0
- package/package/components/settings/ScopesPicker.svelte.d.ts +11 -0
- package/package/components/settings/TokensTable.svelte +51 -15
- package/package/components/sidebar/OperatorMenu.svelte +6 -0
- package/package/components/sidebar/SidebarContent.svelte +11 -1
- package/package/components/triggers/AddTriggersButton.svelte +6 -0
- package/package/components/triggers/CaptureWrapper.svelte +19 -1
- package/package/components/triggers/TriggerEditorToolbar.svelte.d.ts +1 -1
- package/package/components/triggers/TriggerModeToggle.svelte +36 -7
- package/package/components/triggers/TriggerModeToggle.svelte.d.ts +1 -1
- package/package/components/triggers/TriggerSuspendedJobsModal.svelte.d.ts +1 -1
- package/package/components/triggers/TriggersEditor.svelte +5 -1
- package/package/components/triggers/TriggersWrapper.svelte +10 -0
- package/package/components/triggers/azure/AzureCapture.svelte +41 -0
- package/package/components/triggers/azure/AzureCapture.svelte.d.ts +44 -0
- package/package/components/triggers/azure/AzureTriggerEditor.svelte +20 -0
- package/package/components/triggers/azure/AzureTriggerEditor.svelte.d.ts +9 -0
- package/package/components/triggers/azure/AzureTriggerEditorConfigSection.svelte +301 -0
- package/package/components/triggers/azure/AzureTriggerEditorConfigSection.svelte.d.ts +16 -0
- package/package/components/triggers/azure/AzureTriggerEditorInner.svelte +422 -0
- package/package/components/triggers/azure/AzureTriggerEditorInner.svelte.d.ts +25 -0
- package/package/components/triggers/azure/AzureTriggerPanel.svelte +55 -0
- package/package/components/triggers/azure/AzureTriggerPanel.svelte.d.ts +10 -0
- package/{dist/sharedUtils/components/triggers/kafka → package/components/triggers/azure}/utils.d.ts +1 -1
- package/package/components/triggers/azure/utils.js +56 -0
- package/package/components/triggers/email/EmailTriggerEditorInner.svelte +2 -0
- package/package/components/triggers/gcp/GcpTriggerEditorInner.svelte +9 -3
- package/package/components/triggers/http/RouteEditorInner.svelte +2 -0
- package/package/components/triggers/kafka/KafkaTriggerEditorInner.svelte +9 -3
- package/package/components/triggers/mqtt/MqttTriggerEditorInner.svelte +9 -3
- package/package/components/triggers/nats/NatsTriggerEditorInner.svelte +9 -3
- package/package/components/triggers/postgres/PostgresTriggerEditorInner.svelte +9 -3
- package/package/components/triggers/schedules/ScheduleEditorInner.svelte +9 -3
- package/package/components/triggers/sqs/SqsTriggerEditorInner.svelte +9 -3
- package/package/components/triggers/triggers.svelte.d.ts +1 -0
- package/package/components/triggers/triggers.svelte.js +23 -1
- package/package/components/triggers/utils.js +20 -0
- package/package/components/triggers/websocket/WebsocketTriggerEditorInner.svelte +9 -3
- package/package/components/triggers.d.ts +1 -1
- package/package/components/useNestedRestartState.svelte.d.ts +56 -0
- package/package/components/useNestedRestartState.svelte.js +320 -0
- package/package/components/workspaceSettings/SharedUiSettings.svelte +175 -0
- package/package/components/workspaceSettings/SharedUiSettings.svelte.d.ts +3 -0
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +294 -24
- package/package/gen/schemas.gen.js +297 -25
- package/package/gen/services.gen.d.ts +247 -4
- package/package/gen/services.gen.js +498 -7
- package/package/gen/types.gen.d.ts +990 -37
- package/package/hubPaths.json +2 -5
- package/package/infer.d.ts +1 -1
- package/package/infer.js +37 -51
- package/package/mcpEndpointTools.js +60 -4
- package/package/script_helpers.js +17 -0
- package/package/stores.d.ts +7 -0
- package/package/stores.js +6 -1
- package/package/system_prompts/index.d.ts +1 -0
- package/package/system_prompts/index.js +8 -0
- package/package/system_prompts/prompts.d.ts +16 -13
- package/package/system_prompts/prompts.js +653 -43
- package/package/templates/ci_test_bun.ts.template +8 -0
- package/package/templates/ci_test_python.py.template +8 -0
- package/package/utils/forkConflict.d.ts +26 -0
- package/package/utils/forkConflict.js +56 -0
- package/package/utils_deployable.d.ts +164 -121
- package/package/utils_deployable.js +61 -11
- package/package/utils_workspace_deploy.js +3 -1
- package/package.json +28 -4
- package/dist/sharedUtils/assets/tokens/colorTokensConfig.d.ts +0 -2
- package/dist/sharedUtils/base.d.ts +0 -1
- package/dist/sharedUtils/cloud.d.ts +0 -1
- package/dist/sharedUtils/common.d.ts +0 -111
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/count.d.ts +0 -5
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/delete.d.ts +0 -5
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/insert.d.ts +0 -5
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/select.d.ts +0 -13
- package/dist/sharedUtils/components/apps/components/display/dbtable/queries/update.d.ts +0 -11
- package/dist/sharedUtils/components/apps/components/display/dbtable/utils.d.ts +0 -95
- package/dist/sharedUtils/components/apps/editor/appPolicy.d.ts +0 -6
- package/dist/sharedUtils/components/apps/editor/appUtilsCore.d.ts +0 -7
- package/dist/sharedUtils/components/apps/editor/appUtilsS3.d.ts +0 -33
- package/dist/sharedUtils/components/apps/editor/commonAppUtils.d.ts +0 -10
- package/dist/sharedUtils/components/apps/editor/component/components.d.ts +0 -5371
- package/dist/sharedUtils/components/apps/editor/component/default-codes.d.ts +0 -3
- package/dist/sharedUtils/components/apps/editor/component/index.d.ts +0 -3
- package/dist/sharedUtils/components/apps/editor/component/sets.d.ts +0 -7
- package/dist/sharedUtils/components/apps/editor/componentsPanel/componentDefaultProps.d.ts +0 -3
- package/dist/sharedUtils/components/apps/gridUtils.d.ts +0 -14
- package/dist/sharedUtils/components/apps/inputType.d.ts +0 -178
- package/dist/sharedUtils/components/apps/rx.d.ts +0 -29
- package/dist/sharedUtils/components/apps/sharedTypes.d.ts +0 -21
- package/dist/sharedUtils/components/apps/types.d.ts +0 -274
- package/dist/sharedUtils/components/assets/lib.d.ts +0 -25
- package/dist/sharedUtils/components/common/alert/model.d.ts +0 -2
- package/dist/sharedUtils/components/common/badge/model.d.ts +0 -8
- package/dist/sharedUtils/components/common/button/model.d.ts +0 -45
- package/dist/sharedUtils/components/common/fileInput/model.d.ts +0 -1
- package/dist/sharedUtils/components/common/index.d.ts +0 -24
- package/dist/sharedUtils/components/common/skeleton/model.d.ts +0 -21
- package/dist/sharedUtils/components/dbTypes.d.ts +0 -14
- package/dist/sharedUtils/components/diff_drawer.d.ts +0 -26
- package/dist/sharedUtils/components/ducklake.d.ts +0 -1
- package/dist/sharedUtils/components/flows/scheduleUtils.d.ts +0 -7
- package/dist/sharedUtils/components/icons/index.d.ts +0 -101
- package/dist/sharedUtils/components/random_positive_adjetive.d.ts +0 -1
- package/dist/sharedUtils/components/raw_apps/rawAppPolicy.d.ts +0 -10
- package/dist/sharedUtils/components/raw_apps/utils.d.ts +0 -15
- package/dist/sharedUtils/components/triggers/email/utils.d.ts +0 -4
- package/dist/sharedUtils/components/triggers/gcp/utils.d.ts +0 -2
- package/dist/sharedUtils/components/triggers/http/utils.d.ts +0 -11
- package/dist/sharedUtils/components/triggers/mqtt/utils.d.ts +0 -2
- package/dist/sharedUtils/components/triggers/nats/utils.d.ts +0 -2
- package/dist/sharedUtils/components/triggers/postgres/utils.d.ts +0 -8
- package/dist/sharedUtils/components/triggers/sqs/utils.d.ts +0 -2
- package/dist/sharedUtils/components/triggers/triggers.svelte.d.ts +0 -32
- package/dist/sharedUtils/components/triggers/utils.d.ts +0 -80
- package/dist/sharedUtils/components/triggers/websocket/utils.d.ts +0 -2
- package/dist/sharedUtils/components/triggers.d.ts +0 -20
- package/dist/sharedUtils/gen/core/ApiError.d.ts +0 -10
- package/dist/sharedUtils/gen/core/ApiRequestOptions.d.ts +0 -13
- package/dist/sharedUtils/gen/core/ApiResult.d.ts +0 -7
- package/dist/sharedUtils/gen/core/CancelablePromise.d.ts +0 -26
- package/dist/sharedUtils/gen/core/OpenAPI.d.ts +0 -27
- package/dist/sharedUtils/gen/core/request.d.ts +0 -29
- package/dist/sharedUtils/gen/index.d.ts +0 -6
- package/dist/sharedUtils/gen/schemas.gen.d.ts +0 -7036
- package/dist/sharedUtils/gen/services.gen.d.ts +0 -6047
- package/dist/sharedUtils/gen/types.gen.d.ts +0 -21881
- package/dist/sharedUtils/history.svelte.d.ts +0 -9
- package/dist/sharedUtils/hub.d.ts +0 -49
- package/dist/sharedUtils/jsr.json +0 -6
- package/dist/sharedUtils/lib.d.ts +0 -5
- package/dist/sharedUtils/lib.es.js +0 -1588
- package/dist/sharedUtils/package.json +0 -12
- package/dist/sharedUtils/schema.d.ts +0 -3
- package/dist/sharedUtils/stores.d.ts +0 -97
- package/dist/sharedUtils/svelte5Utils.svelte.d.ts +0 -80
- package/dist/sharedUtils/toast.d.ts +0 -8
- package/dist/sharedUtils/utils.d.ts +0 -265
- package/package/components/copilot/chat/flow/openFlowZod.js +0 -24
- /package/package/components/copilot/chat/flow/{openFlowZod.d.ts → openFlowZod.gen.d.ts} +0 -0
|
@@ -586,6 +586,8 @@ onDestroy(() => {
|
|
|
586
586
|
{appPath}
|
|
587
587
|
{computeS3ForceViewerPolicies}
|
|
588
588
|
bottom={innerBottomSnippet}
|
|
589
|
+
hideCatalogPicker={extra?.['hideCatalogPicker'] ?? false}
|
|
590
|
+
hideRawInput={extra?.['hideRawInput'] ?? false}
|
|
589
591
|
/>
|
|
590
592
|
{:else if inputCat == 'object' && format == 'json-schema'}
|
|
591
593
|
{#await import('./EditableSchemaForm.svelte')}
|
|
@@ -13,6 +13,7 @@ import { ConfigService } from '../gen';
|
|
|
13
13
|
import Select from './select/Select.svelte';
|
|
14
14
|
import ScriptPicker from './ScriptPicker.svelte';
|
|
15
15
|
import Badge from './common/badge/Badge.svelte';
|
|
16
|
+
import { sendUserToast } from '../toast';
|
|
16
17
|
let { config = $bindable(), worker_tags, disabled, eeOnly = false } = $props();
|
|
17
18
|
let test_input = $state(3);
|
|
18
19
|
let healthCheckLoading = $state(false);
|
|
@@ -206,13 +207,13 @@ let collapsed = $state(true);
|
|
|
206
207
|
id="custom_tag_select"
|
|
207
208
|
disabled={!config || !config.integration || disabled}
|
|
208
209
|
bind:value={
|
|
209
|
-
() => config?.integration?.['
|
|
210
|
+
() => config?.integration?.['tag'] ?? undefined,
|
|
210
211
|
(v) => {
|
|
211
212
|
if (!config || !config.integration) return
|
|
212
213
|
if (!v || v === '') {
|
|
213
|
-
delete config.integration['
|
|
214
|
+
delete config.integration['tag']
|
|
214
215
|
} else {
|
|
215
|
-
config.integration['
|
|
216
|
+
config.integration['tag'] = v
|
|
216
217
|
}
|
|
217
218
|
}
|
|
218
219
|
}
|
|
@@ -220,7 +221,20 @@ let collapsed = $state(true);
|
|
|
220
221
|
/>
|
|
221
222
|
|
|
222
223
|
<div class="flex flex-row gap-2 justify-end mt-4">
|
|
223
|
-
<Button
|
|
224
|
+
<Button
|
|
225
|
+
variant="default"
|
|
226
|
+
unifiedSize="md"
|
|
227
|
+
onclick={() => {
|
|
228
|
+
if (!config?.integration?.['path']) {
|
|
229
|
+
sendUserToast('Please select a script before testing scaling', true)
|
|
230
|
+
return
|
|
231
|
+
}
|
|
232
|
+
if (!config?.integration?.['tag']) {
|
|
233
|
+
sendUserToast('Please select a custom tag before testing scaling', true)
|
|
234
|
+
return
|
|
235
|
+
}
|
|
236
|
+
}}>Test scaling</Button
|
|
237
|
+
>
|
|
224
238
|
<div class="flex text-xs flex-row gap-2 items-center">
|
|
225
239
|
<input class="!w-16" type="number" bind:value={test_input} />
|
|
226
240
|
workers
|
|
@@ -1,26 +1,19 @@
|
|
|
1
|
-
<script lang="ts">import { AlertTriangle, ArrowDown, ArrowDownRight, ArrowRight, ArrowUp, ArrowUpRight, Building, CircleCheck, CircleX, DiffIcon,
|
|
1
|
+
<script lang="ts">import { AlertTriangle, ArrowDown, ArrowDownRight, ArrowRight, ArrowUp, ArrowUpRight, Building, CircleCheck, CircleX, DiffIcon, FileJson, FlaskConical, GitFork, Loader2, UserPlus } from 'lucide-svelte';
|
|
2
2
|
import { Alert, Badge } from './common';
|
|
3
|
-
import { AppService, EmailTriggerService, FlowService, FolderService, GcpTriggerService, HttpTriggerService, KafkaTriggerService, MqttTriggerService, NatsTriggerService, PostgresTriggerService, ScheduleService, ScriptService, SqsTriggerService, UserService, WebsocketTriggerService, WorkspaceService } from '../gen';
|
|
3
|
+
import { AppService, EmailTriggerService, FlowService, FolderService, AzureTriggerService, GcpTriggerService, HttpTriggerService, KafkaTriggerService, MqttTriggerService, NatsTriggerService, PostgresTriggerService, ScheduleService, ScriptService, SqsTriggerService, UserService, WebsocketTriggerService, WorkspaceService } from '../gen';
|
|
4
4
|
import Button from './common/button/Button.svelte';
|
|
5
|
-
import ConfirmationModal from './common/confirmationModal/ConfirmationModal.svelte';
|
|
6
5
|
import DiffDrawer from './DiffDrawer.svelte';
|
|
6
|
+
import DiffEditor from './DiffEditor.svelte';
|
|
7
|
+
import Drawer from './common/drawer/Drawer.svelte';
|
|
8
|
+
import DrawerContent from './common/drawer/DrawerContent.svelte';
|
|
7
9
|
import ParentWorkspaceProtectionAlert from './ParentWorkspaceProtectionAlert.svelte';
|
|
8
|
-
import ScheduleEditor from './triggers/schedules/ScheduleEditor.svelte';
|
|
9
|
-
import RouteEditor from './triggers/http/RouteEditor.svelte';
|
|
10
|
-
import WebsocketTriggerEditor from './triggers/websocket/WebsocketTriggerEditor.svelte';
|
|
11
|
-
import KafkaTriggerEditor from './triggers/kafka/KafkaTriggerEditor.svelte';
|
|
12
|
-
import PostgresTriggerEditor from './triggers/postgres/PostgresTriggerEditor.svelte';
|
|
13
|
-
import NatsTriggerEditor from './triggers/nats/NatsTriggerEditor.svelte';
|
|
14
|
-
import MqttTriggerEditor from './triggers/mqtt/MqttTriggerEditor.svelte';
|
|
15
|
-
import SqsTriggerEditor from './triggers/sqs/SqsTriggerEditor.svelte';
|
|
16
|
-
import GcpTriggerEditor from './triggers/gcp/GcpTriggerEditor.svelte';
|
|
17
|
-
import EmailTriggerEditor from './triggers/email/EmailTriggerEditor.svelte';
|
|
18
10
|
import { userWorkspaces, workspaceStore } from '../stores';
|
|
19
11
|
import { deployItem, deleteItemInWorkspace, getItemValue, getOnBehalfOf } from '../utils_workspace_deploy';
|
|
20
12
|
import Tooltip from './Tooltip.svelte';
|
|
21
13
|
import OnBehalfOfSelector, { needsOnBehalfOfSelection } from './OnBehalfOfSelector.svelte';
|
|
22
14
|
import { sendUserToast } from '../toast';
|
|
23
15
|
import { deepEqual } from 'fast-equals';
|
|
16
|
+
import { orderedJsonStringify, orderedYamlStringify } from '../utils';
|
|
24
17
|
import WorkspaceDeployLayout from './WorkspaceDeployLayout.svelte';
|
|
25
18
|
import DeploymentRequestPanel from './deploymentRequest/DeploymentRequestPanel.svelte';
|
|
26
19
|
import { userStore } from '../stores';
|
|
@@ -416,6 +409,8 @@ let deployableItems = $derived.by(() => {
|
|
|
416
409
|
}));
|
|
417
410
|
const triggerItems = forkTriggers
|
|
418
411
|
.filter((t) => {
|
|
412
|
+
if (!isTriggerRelevantForDirection(t, mergeIntoParent))
|
|
413
|
+
return false;
|
|
419
414
|
const key = getTriggerKey(t);
|
|
420
415
|
return deploymentStatus[key]?.status !== 'deployed';
|
|
421
416
|
})
|
|
@@ -423,6 +418,7 @@ let deployableItems = $derived.by(() => {
|
|
|
423
418
|
key: getTriggerKey(trigger),
|
|
424
419
|
path: trigger.path,
|
|
425
420
|
kind: 'trigger',
|
|
421
|
+
triggerKind: trigger.triggerKind,
|
|
426
422
|
diff: undefined,
|
|
427
423
|
trigger
|
|
428
424
|
}));
|
|
@@ -480,185 +476,211 @@ let allCiTests = $derived.by(() => {
|
|
|
480
476
|
return [...seen.values()];
|
|
481
477
|
});
|
|
482
478
|
let forkTriggers = $state([]);
|
|
483
|
-
let triggerToDelete = $state(undefined);
|
|
484
479
|
let deploymentRequestPanel = $state(undefined);
|
|
485
480
|
let hasOpenDeploymentRequest = $state(false);
|
|
486
|
-
|
|
487
|
-
// on first openEdit() call, so having them all sit here is cheap.
|
|
488
|
-
let scheduleEditor = $state();
|
|
489
|
-
let routeEditor = $state();
|
|
490
|
-
let websocketEditor = $state();
|
|
491
|
-
let kafkaEditor = $state();
|
|
492
|
-
let postgresEditor = $state();
|
|
493
|
-
let natsEditor = $state();
|
|
494
|
-
let mqttEditor = $state();
|
|
495
|
-
let sqsEditor = $state();
|
|
496
|
-
let gcpEditor = $state();
|
|
497
|
-
let emailEditor = $state();
|
|
498
|
-
function openTriggerDetails(trigger) {
|
|
499
|
-
const isFlow = trigger.isFlow;
|
|
500
|
-
switch (trigger.triggerKind) {
|
|
501
|
-
case 'schedules':
|
|
502
|
-
scheduleEditor?.openEdit(trigger.path, isFlow);
|
|
503
|
-
break;
|
|
504
|
-
case 'routes':
|
|
505
|
-
routeEditor?.openEdit(trigger.path, isFlow);
|
|
506
|
-
break;
|
|
507
|
-
case 'websockets':
|
|
508
|
-
websocketEditor?.openEdit(trigger.path, isFlow);
|
|
509
|
-
break;
|
|
510
|
-
case 'kafka':
|
|
511
|
-
kafkaEditor?.openEdit(trigger.path, isFlow);
|
|
512
|
-
break;
|
|
513
|
-
case 'postgres':
|
|
514
|
-
postgresEditor?.openEdit(trigger.path, isFlow);
|
|
515
|
-
break;
|
|
516
|
-
case 'nats':
|
|
517
|
-
natsEditor?.openEdit(trigger.path, isFlow);
|
|
518
|
-
break;
|
|
519
|
-
case 'mqtt':
|
|
520
|
-
mqttEditor?.openEdit(trigger.path, isFlow);
|
|
521
|
-
break;
|
|
522
|
-
case 'sqs':
|
|
523
|
-
sqsEditor?.openEdit(trigger.path, isFlow);
|
|
524
|
-
break;
|
|
525
|
-
case 'gcp':
|
|
526
|
-
gcpEditor?.openEdit(trigger.path, isFlow);
|
|
527
|
-
break;
|
|
528
|
-
case 'emails':
|
|
529
|
-
emailEditor?.openEdit(trigger.path, isFlow);
|
|
530
|
-
break;
|
|
531
|
-
}
|
|
532
|
-
}
|
|
533
|
-
/** Deployable trigger kinds and their list+delete services */
|
|
481
|
+
/** Deployable trigger kinds and their list services */
|
|
534
482
|
const triggerServices = {
|
|
535
483
|
schedules: {
|
|
536
484
|
list: (ws) => ScheduleService.listSchedules({ workspace: ws }),
|
|
537
|
-
delete: (ws, path) => ScheduleService.deleteSchedule({ workspace: ws, path }),
|
|
538
485
|
normalize: (item) => ({
|
|
539
486
|
path: item.path,
|
|
540
487
|
triggerKind: 'schedules',
|
|
541
488
|
scriptPath: item.script_path,
|
|
542
489
|
isFlow: item.is_flow,
|
|
543
|
-
|
|
544
|
-
|
|
490
|
+
extraLabel: item.schedule,
|
|
491
|
+
raw: item
|
|
545
492
|
})
|
|
546
493
|
},
|
|
547
494
|
routes: {
|
|
548
495
|
list: (ws) => HttpTriggerService.listHttpTriggers({ workspace: ws }),
|
|
549
|
-
delete: (ws, path) => HttpTriggerService.deleteHttpTrigger({ workspace: ws, path }),
|
|
550
496
|
normalize: (item) => ({
|
|
551
497
|
path: item.path,
|
|
552
498
|
triggerKind: 'routes',
|
|
553
499
|
scriptPath: item.script_path,
|
|
554
500
|
isFlow: item.is_flow,
|
|
555
|
-
enabled: item.mode === 'enabled',
|
|
556
501
|
extraLabel: `${(item.http_method ?? 'get').toUpperCase()} ${item.route_path ?? ''}`
|
|
557
502
|
})
|
|
558
503
|
},
|
|
559
504
|
websockets: {
|
|
560
505
|
list: (ws) => WebsocketTriggerService.listWebsocketTriggers({ workspace: ws }),
|
|
561
|
-
delete: (ws, path) => WebsocketTriggerService.deleteWebsocketTrigger({ workspace: ws, path }),
|
|
562
506
|
normalize: (item) => ({
|
|
563
507
|
path: item.path,
|
|
564
508
|
triggerKind: 'websockets',
|
|
565
509
|
scriptPath: item.script_path,
|
|
566
510
|
isFlow: item.is_flow,
|
|
567
|
-
|
|
568
|
-
|
|
511
|
+
extraLabel: item.url,
|
|
512
|
+
raw: item
|
|
569
513
|
})
|
|
570
514
|
},
|
|
571
515
|
kafka: {
|
|
572
516
|
list: (ws) => KafkaTriggerService.listKafkaTriggers({ workspace: ws }),
|
|
573
|
-
delete: (ws, path) => KafkaTriggerService.deleteKafkaTrigger({ workspace: ws, path }),
|
|
574
517
|
normalize: (item) => ({
|
|
575
518
|
path: item.path,
|
|
576
519
|
triggerKind: 'kafka',
|
|
577
520
|
scriptPath: item.script_path,
|
|
578
521
|
isFlow: item.is_flow,
|
|
579
|
-
|
|
580
|
-
|
|
522
|
+
extraLabel: item.topics?.join(', '),
|
|
523
|
+
raw: item
|
|
581
524
|
})
|
|
582
525
|
},
|
|
583
526
|
postgres: {
|
|
584
527
|
list: (ws) => PostgresTriggerService.listPostgresTriggers({ workspace: ws }),
|
|
585
|
-
delete: (ws, path) => PostgresTriggerService.deletePostgresTrigger({ workspace: ws, path }),
|
|
586
528
|
normalize: (item) => ({
|
|
587
529
|
path: item.path,
|
|
588
530
|
triggerKind: 'postgres',
|
|
589
531
|
scriptPath: item.script_path,
|
|
590
532
|
isFlow: item.is_flow,
|
|
591
|
-
|
|
533
|
+
raw: item
|
|
592
534
|
})
|
|
593
535
|
},
|
|
594
536
|
nats: {
|
|
595
537
|
list: (ws) => NatsTriggerService.listNatsTriggers({ workspace: ws }),
|
|
596
|
-
delete: (ws, path) => NatsTriggerService.deleteNatsTrigger({ workspace: ws, path }),
|
|
597
538
|
normalize: (item) => ({
|
|
598
539
|
path: item.path,
|
|
599
540
|
triggerKind: 'nats',
|
|
600
541
|
scriptPath: item.script_path,
|
|
601
542
|
isFlow: item.is_flow,
|
|
602
|
-
|
|
603
|
-
|
|
543
|
+
extraLabel: item.subjects?.join(', '),
|
|
544
|
+
raw: item
|
|
604
545
|
})
|
|
605
546
|
},
|
|
606
547
|
mqtt: {
|
|
607
548
|
list: (ws) => MqttTriggerService.listMqttTriggers({ workspace: ws }),
|
|
608
|
-
delete: (ws, path) => MqttTriggerService.deleteMqttTrigger({ workspace: ws, path }),
|
|
609
549
|
normalize: (item) => ({
|
|
610
550
|
path: item.path,
|
|
611
551
|
triggerKind: 'mqtt',
|
|
612
552
|
scriptPath: item.script_path,
|
|
613
553
|
isFlow: item.is_flow,
|
|
614
|
-
|
|
554
|
+
raw: item
|
|
615
555
|
})
|
|
616
556
|
},
|
|
617
557
|
sqs: {
|
|
618
558
|
list: (ws) => SqsTriggerService.listSqsTriggers({ workspace: ws }),
|
|
619
|
-
delete: (ws, path) => SqsTriggerService.deleteSqsTrigger({ workspace: ws, path }),
|
|
620
559
|
normalize: (item) => ({
|
|
621
560
|
path: item.path,
|
|
622
561
|
triggerKind: 'sqs',
|
|
623
562
|
scriptPath: item.script_path,
|
|
624
563
|
isFlow: item.is_flow,
|
|
625
|
-
|
|
626
|
-
|
|
564
|
+
extraLabel: item.queue_url,
|
|
565
|
+
raw: item
|
|
627
566
|
})
|
|
628
567
|
},
|
|
629
568
|
gcp: {
|
|
630
569
|
list: (ws) => GcpTriggerService.listGcpTriggers({ workspace: ws }),
|
|
631
|
-
delete: (ws, path) => GcpTriggerService.deleteGcpTrigger({ workspace: ws, path }),
|
|
632
570
|
normalize: (item) => ({
|
|
633
571
|
path: item.path,
|
|
634
572
|
triggerKind: 'gcp',
|
|
635
573
|
scriptPath: item.script_path,
|
|
636
574
|
isFlow: item.is_flow,
|
|
637
|
-
|
|
638
|
-
|
|
575
|
+
extraLabel: item.topic_id,
|
|
576
|
+
raw: item
|
|
577
|
+
})
|
|
578
|
+
},
|
|
579
|
+
azure: {
|
|
580
|
+
list: (ws) => AzureTriggerService.listAzureTriggers({ workspace: ws }),
|
|
581
|
+
normalize: (item) => ({
|
|
582
|
+
path: item.path,
|
|
583
|
+
triggerKind: 'azure',
|
|
584
|
+
scriptPath: item.script_path,
|
|
585
|
+
isFlow: item.is_flow,
|
|
586
|
+
extraLabel: item.topic_name ?? item.scope_resource_id,
|
|
587
|
+
raw: item
|
|
639
588
|
})
|
|
640
589
|
},
|
|
641
590
|
emails: {
|
|
642
591
|
list: (ws) => EmailTriggerService.listEmailTriggers({ workspace: ws }),
|
|
643
|
-
delete: (ws, path) => EmailTriggerService.deleteEmailTrigger({ workspace: ws, path }),
|
|
644
592
|
normalize: (item) => ({
|
|
645
593
|
path: item.path,
|
|
646
594
|
triggerKind: 'emails',
|
|
647
595
|
scriptPath: item.script_path,
|
|
648
596
|
isFlow: item.is_flow,
|
|
649
|
-
|
|
650
|
-
|
|
597
|
+
extraLabel: getEmailAddress(item.local_part, item.workspaced_local_part, currentWorkspaceId, emailDomain ?? ''),
|
|
598
|
+
raw: item
|
|
651
599
|
})
|
|
652
600
|
}
|
|
653
601
|
};
|
|
654
602
|
let emailDomain = $state(undefined);
|
|
603
|
+
/**
|
|
604
|
+
* Fields that should not count as a "change" between the parent and the
|
|
605
|
+
* fork. Mode/enabled are forced to 'disabled'/false on clone and stripped
|
|
606
|
+
* by the fork-export filter; the rest are runtime state or per-row
|
|
607
|
+
* metadata that always diverges. Comparing without these matches the
|
|
608
|
+
* semantics of "is this trigger configured the same way?" rather than
|
|
609
|
+
* "are these two rows byte-identical?".
|
|
610
|
+
*/
|
|
611
|
+
const TRIGGER_COMPARE_IGNORE = new Set([
|
|
612
|
+
'workspace_id',
|
|
613
|
+
'mode',
|
|
614
|
+
'enabled',
|
|
615
|
+
'edited_at',
|
|
616
|
+
'edited_by',
|
|
617
|
+
'last_server_ping',
|
|
618
|
+
'server_id',
|
|
619
|
+
'error',
|
|
620
|
+
'extra_perms',
|
|
621
|
+
'permissioned_as'
|
|
622
|
+
]);
|
|
623
|
+
function stripIgnoredFields(row) {
|
|
624
|
+
if (!row || typeof row !== 'object')
|
|
625
|
+
return row;
|
|
626
|
+
const out = {};
|
|
627
|
+
for (const [k, v] of Object.entries(row)) {
|
|
628
|
+
if (!TRIGGER_COMPARE_IGNORE.has(k))
|
|
629
|
+
out[k] = v;
|
|
630
|
+
}
|
|
631
|
+
return out;
|
|
632
|
+
}
|
|
633
|
+
function rowsHaveSameConfig(a, b) {
|
|
634
|
+
return (orderedJsonStringify(stripIgnoredFields(a)) === orderedJsonStringify(stripIgnoredFields(b)));
|
|
635
|
+
}
|
|
655
636
|
async function fetchAllTriggers() {
|
|
656
637
|
try {
|
|
657
638
|
emailDomain = await getEmailDomain();
|
|
658
|
-
const entries = Object.
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
639
|
+
const entries = Object.entries(triggerServices);
|
|
640
|
+
// Fetch fork + parent in parallel for each kind. Either side may
|
|
641
|
+
// fail (e.g. permission denied on parent) — fall back to empty.
|
|
642
|
+
const results = await Promise.allSettled(entries.map(async ([kind, svc]) => {
|
|
643
|
+
const [forkItems, parentItems] = await Promise.all([
|
|
644
|
+
svc.list(currentWorkspaceId).catch(() => []),
|
|
645
|
+
svc.list(parentWorkspaceId).catch(() => [])
|
|
646
|
+
]);
|
|
647
|
+
const byPath = new Map();
|
|
648
|
+
for (const item of forkItems) {
|
|
649
|
+
byPath.set(item.path, { fork: item });
|
|
650
|
+
}
|
|
651
|
+
for (const item of parentItems) {
|
|
652
|
+
const entry = byPath.get(item.path) ?? {};
|
|
653
|
+
entry.parent = item;
|
|
654
|
+
byPath.set(item.path, entry);
|
|
655
|
+
}
|
|
656
|
+
const merged = [];
|
|
657
|
+
for (const [path, entry] of byPath) {
|
|
658
|
+
const sourceItem = entry.fork ?? entry.parent;
|
|
659
|
+
const normalized = svc.normalize(sourceItem);
|
|
660
|
+
let changeKind;
|
|
661
|
+
let hasChanges = false;
|
|
662
|
+
if (entry.fork && !entry.parent) {
|
|
663
|
+
changeKind = 'new';
|
|
664
|
+
}
|
|
665
|
+
else if (!entry.fork && entry.parent) {
|
|
666
|
+
changeKind = 'deleted-in-source';
|
|
667
|
+
}
|
|
668
|
+
else if (entry.fork && entry.parent) {
|
|
669
|
+
hasChanges = !rowsHaveSameConfig(entry.fork, entry.parent);
|
|
670
|
+
if (hasChanges)
|
|
671
|
+
changeKind = 'modified';
|
|
672
|
+
}
|
|
673
|
+
merged.push({
|
|
674
|
+
...normalized,
|
|
675
|
+
raw: sourceItem,
|
|
676
|
+
hasChanges,
|
|
677
|
+
changeKind,
|
|
678
|
+
sourceRaw: entry.fork,
|
|
679
|
+
targetRaw: entry.parent,
|
|
680
|
+
path
|
|
681
|
+
});
|
|
682
|
+
}
|
|
683
|
+
return merged;
|
|
662
684
|
}));
|
|
663
685
|
forkTriggers = results.flatMap((r) => (r.status === 'fulfilled' ? r.value : []));
|
|
664
686
|
}
|
|
@@ -667,33 +689,48 @@ async function fetchAllTriggers() {
|
|
|
667
689
|
forkTriggers = [];
|
|
668
690
|
}
|
|
669
691
|
}
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
const
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
throw new Error(`No service for trigger kind: ${trigger.triggerKind}`);
|
|
684
|
-
}
|
|
685
|
-
await svc.delete(currentWorkspaceId, trigger.path);
|
|
686
|
-
forkTriggers = forkTriggers.filter((t) => !(t.path === trigger.path && t.triggerKind === trigger.triggerKind));
|
|
687
|
-
sendUserToast(`Deleted ${displayName} trigger '${trigger.path}'`);
|
|
692
|
+
/**
|
|
693
|
+
* Triggers worth showing in the merge UI given the current direction.
|
|
694
|
+
* - "Deploy to parent": rows that exist in fork and either don't exist in
|
|
695
|
+
* parent or have config differences.
|
|
696
|
+
* - "Update current" (pull from parent): mirror.
|
|
697
|
+
* Triggers that exist on both sides with identical config are filtered
|
|
698
|
+
* out — they would generate a no-op deploy and only add noise.
|
|
699
|
+
*/
|
|
700
|
+
function isTriggerRelevantForDirection(t, deployingToParent) {
|
|
701
|
+
const existsInFork = !!t.sourceRaw;
|
|
702
|
+
const existsInParent = !!t.targetRaw;
|
|
703
|
+
if (deployingToParent) {
|
|
704
|
+
return existsInFork && (!existsInParent || !!t.hasChanges);
|
|
688
705
|
}
|
|
689
|
-
|
|
690
|
-
|
|
706
|
+
else {
|
|
707
|
+
return existsInParent && (!existsInFork || !!t.hasChanges);
|
|
691
708
|
}
|
|
692
709
|
}
|
|
693
710
|
function getTriggerDisplayName(triggerKind) {
|
|
694
711
|
const triggerType = triggerKindToTriggerType(triggerKind);
|
|
695
712
|
return triggerType ? triggerDisplayNamesMap[triggerType] : triggerKind;
|
|
696
713
|
}
|
|
714
|
+
let triggerDiffOpen = $state(false);
|
|
715
|
+
let triggerDiffPayload = $state(undefined);
|
|
716
|
+
function openTriggerDiff(t) {
|
|
717
|
+
// `sourceRaw` is the fork row, `targetRaw` is the parent row regardless
|
|
718
|
+
// of direction (set in fetchAllTriggers). The diff reads from the
|
|
719
|
+
// destination (left) to the source (right), matching the deploy arrow.
|
|
720
|
+
const sourceWorkspace = mergeIntoParent ? currentWorkspaceId : parentWorkspaceId;
|
|
721
|
+
const targetWorkspace = mergeIntoParent ? parentWorkspaceId : currentWorkspaceId;
|
|
722
|
+
const fromRow = mergeIntoParent ? t.sourceRaw : t.targetRaw;
|
|
723
|
+
const toRow = mergeIntoParent ? t.targetRaw : t.sourceRaw;
|
|
724
|
+
triggerDiffPayload = {
|
|
725
|
+
kindLabel: getTriggerDisplayName(t.triggerKind),
|
|
726
|
+
path: t.path,
|
|
727
|
+
originalLabel: `${targetWorkspace} (target)`,
|
|
728
|
+
modifiedLabel: `${sourceWorkspace} (source)`,
|
|
729
|
+
original: orderedYamlStringify(stripIgnoredFields(toRow ?? {})),
|
|
730
|
+
modified: orderedYamlStringify(stripIgnoredFields(fromRow ?? {}))
|
|
731
|
+
};
|
|
732
|
+
triggerDiffOpen = true;
|
|
733
|
+
}
|
|
697
734
|
// Fetch triggers when workspace is available
|
|
698
735
|
$effect(() => {
|
|
699
736
|
if (currentWorkspaceId) {
|
|
@@ -901,7 +938,10 @@ $effect(() => {
|
|
|
901
938
|
{#if item.trigger}
|
|
902
939
|
{@const t = item.trigger as ForkTrigger}
|
|
903
940
|
<span class="text-emphasis">{getTriggerDisplayName(t.triggerKind)}</span>
|
|
904
|
-
|
|
941
|
+
{#if t.extraLabel}
|
|
942
|
+
<span class="text-secondary ml-1">{t.extraLabel}</span>
|
|
943
|
+
{/if}
|
|
944
|
+
<span class="text-tertiary mx-1">→</span>
|
|
905
945
|
<span class="text-secondary">{t.scriptPath}</span>
|
|
906
946
|
{:else}
|
|
907
947
|
{@const diff = item.diff as WorkspaceItemDiff}
|
|
@@ -932,30 +972,38 @@ $effect(() => {
|
|
|
932
972
|
{#if item.trigger}
|
|
933
973
|
{@const t = item.trigger as ForkTrigger}
|
|
934
974
|
{@const key = item.key}
|
|
935
|
-
|
|
975
|
+
{#if t.changeKind === 'new'}
|
|
976
|
+
<Badge
|
|
977
|
+
title={mergeIntoParent
|
|
978
|
+
? `Only exists in '${currentWorkspaceId}'`
|
|
979
|
+
: `Only exists in '${parentWorkspaceId}'`}
|
|
980
|
+
color="indigo"
|
|
981
|
+
size="xs">New</Badge
|
|
982
|
+
>
|
|
983
|
+
{/if}
|
|
936
984
|
{#if t.isFlow}
|
|
937
985
|
<Badge color="blue" size="xs">flow</Badge>
|
|
938
986
|
{/if}
|
|
939
|
-
{#if t.extraLabel}
|
|
940
|
-
<span class="text-tertiary text-xs">({t.extraLabel})</span>
|
|
941
|
-
{/if}
|
|
942
|
-
{#if t.enabled != null}
|
|
943
|
-
<Badge color={t.enabled ? 'green' : 'gray'} size="xs">
|
|
944
|
-
{t.enabled ? 'Enabled' : 'Disabled'}
|
|
945
|
-
</Badge>
|
|
946
|
-
{/if}
|
|
947
987
|
{#if !deploymentStatus[key] || deploymentStatus[key].status != 'deployed'}
|
|
948
|
-
|
|
949
|
-
size="xs"
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
988
|
+
{#if mergeIntoParent}
|
|
989
|
+
<Badge color="green" size="xs">
|
|
990
|
+
<ArrowUpRight class="w-3 h-3 inline" />
|
|
991
|
+
1 ahead
|
|
992
|
+
</Badge>
|
|
993
|
+
{:else}
|
|
994
|
+
<Badge color="blue" size="xs">
|
|
995
|
+
<ArrowDownRight class="w-3 h-3 inline" />
|
|
996
|
+
1 behind
|
|
997
|
+
</Badge>
|
|
998
|
+
{/if}
|
|
999
|
+
{#if t.changeKind === 'modified'}
|
|
1000
|
+
<div>
|
|
1001
|
+
<Button size="xs" variant="subtle" onclick={() => openTriggerDiff(t)}>
|
|
1002
|
+
<DiffIcon class="w-3 h-3" />
|
|
1003
|
+
Show diff
|
|
1004
|
+
</Button>
|
|
1005
|
+
</div>
|
|
1006
|
+
{/if}
|
|
959
1007
|
{/if}
|
|
960
1008
|
{:else}
|
|
961
1009
|
{@const diff = item.diff as WorkspaceItemDiff}
|
|
@@ -1138,29 +1186,30 @@ $effect(() => {
|
|
|
1138
1186
|
|
|
1139
1187
|
<DiffDrawer bind:this={diffDrawer} {isFlow} />
|
|
1140
1188
|
|
|
1141
|
-
<
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1189
|
+
<Drawer bind:open={triggerDiffOpen} size="900px">
|
|
1190
|
+
<DrawerContent
|
|
1191
|
+
title={triggerDiffPayload
|
|
1192
|
+
? `${triggerDiffPayload.kindLabel} ${triggerDiffPayload.path}`
|
|
1193
|
+
: 'Trigger diff'}
|
|
1194
|
+
on:close={() => (triggerDiffOpen = false)}
|
|
1195
|
+
>
|
|
1196
|
+
{#if triggerDiffPayload}
|
|
1197
|
+
<div class="flex flex-col h-full">
|
|
1198
|
+
<div class="flex-1 min-h-0">
|
|
1199
|
+
<DiffEditor
|
|
1200
|
+
open={triggerDiffOpen}
|
|
1201
|
+
className="!h-full"
|
|
1202
|
+
defaultLang="yaml"
|
|
1203
|
+
defaultOriginal={triggerDiffPayload.original}
|
|
1204
|
+
defaultModified={triggerDiffPayload.modified}
|
|
1205
|
+
readOnly
|
|
1206
|
+
inlineDiff={false}
|
|
1207
|
+
/>
|
|
1208
|
+
</div>
|
|
1209
|
+
</div>
|
|
1210
|
+
{/if}
|
|
1211
|
+
</DrawerContent>
|
|
1212
|
+
</Drawer>
|
|
1164
1213
|
{:else}
|
|
1165
1214
|
<div class="flex items-center justify-center h-full">
|
|
1166
1215
|
<div class="text-gray-500">No comparison data available</div>
|
|
@@ -172,7 +172,7 @@ async function loadDiffs() {
|
|
|
172
172
|
error = undefined;
|
|
173
173
|
diffs = [];
|
|
174
174
|
try {
|
|
175
|
-
const forkSettings = await WorkspaceService.
|
|
175
|
+
const forkSettings = await WorkspaceService.getPublicSettings({
|
|
176
176
|
workspace: currentWorkspaceId
|
|
177
177
|
});
|
|
178
178
|
const datatables = forkSettings.datatable?.datatables ?? {};
|
|
@@ -310,7 +310,7 @@ async function runMigration() {
|
|
|
310
310
|
const sourceSchema = drawerDirection === 'ahead' ? drawerDiff.forkSchema : drawerDiff.parentSchema;
|
|
311
311
|
const { schemaName, tableName } = drawerChange;
|
|
312
312
|
const newTableDef = sourceSchema[schemaName]?.[tableName];
|
|
313
|
-
const forkSettings = await WorkspaceService.
|
|
313
|
+
const forkSettings = await WorkspaceService.getPublicSettings({
|
|
314
314
|
workspace: currentWorkspaceId
|
|
315
315
|
});
|
|
316
316
|
const datatableConfig = forkSettings.datatable ?? { datatables: {} };
|