windmill-components 1.511.0 → 1.522.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/AppConnectInner.svelte.d.ts +1 -1
- package/package/components/ArgInput.svelte +56 -18
- package/package/components/ArgInput.svelte.d.ts +2 -10
- package/package/components/AssignableTagsInner.svelte +5 -0
- package/package/components/AuthSettings.svelte +4 -2
- package/package/components/AuthSettings.svelte.d.ts +1 -0
- package/package/components/DBManagerDrawer.svelte +154 -151
- package/package/components/DBManagerDrawer.svelte.d.ts +2 -2
- package/package/components/DBTable.svelte +3 -3
- package/package/components/DBTable.svelte.d.ts +1 -0
- package/package/components/DBTableEditor.svelte +7 -7
- package/package/components/DBTableEditor.svelte.d.ts +1 -1
- package/package/components/DeployWorkspace.svelte +1 -1
- package/package/components/DisplayResult.svelte +34 -8
- package/package/components/DisplayResult.svelte.d.ts +4 -1
- package/package/components/DynSelect.svelte +58 -34
- package/package/components/DynSelect.svelte.d.ts +3 -11
- package/package/components/EditableSchemaForm.svelte +126 -6
- package/package/components/EditableSchemaForm.svelte.d.ts +5 -1
- package/package/components/Editor.svelte +1 -1
- package/package/components/EditorBar.svelte +82 -4
- package/package/components/ErrorOrRecoveryHandler.svelte +76 -8
- package/package/components/ErrorOrRecoveryHandler.svelte.d.ts +2 -1
- package/package/components/ExploreAssetButton.svelte +14 -4
- package/package/components/ExploreAssetButton.svelte.d.ts +1 -0
- package/package/components/FlowJobResult.svelte +3 -3
- package/package/components/FlowJobResult.svelte.d.ts +1 -0
- package/package/components/FlowPreviewContent.svelte +9 -0
- package/package/components/FlowPreviewContent.svelte.d.ts +3 -0
- package/package/components/FlowPreviewResult.svelte +4 -1
- package/package/components/FlowPreviewResult.svelte.d.ts +1 -0
- package/package/components/FlowStatusViewer.svelte +2 -1
- package/package/components/FlowStatusViewer.svelte.d.ts +3 -0
- package/package/components/FlowStatusViewerInner.svelte +23 -3
- package/package/components/FlowStatusViewerInner.svelte.d.ts +10 -1
- package/package/components/FolderEditor.svelte +1 -1
- package/package/components/GitDiffPreview.svelte +14 -18
- package/package/components/GitDiffPreview.svelte.d.ts +2 -8
- package/package/components/GitHubAppIntegration.svelte +3 -1
- package/package/components/IdEditorInput.svelte +25 -22
- package/package/components/IdEditorInput.svelte.d.ts +11 -23
- package/package/components/InstanceSetting.svelte +7 -2
- package/package/components/InstanceSettings.svelte +1 -0
- package/package/components/JobLoader.svelte +48 -5
- package/package/components/JobLoader.svelte.d.ts +7 -2
- package/package/components/Login.svelte +8 -2
- package/package/components/MemoryFootprintViewer.svelte +1 -1
- package/package/components/ModulePreviewResultViewer.svelte +2 -2
- package/package/components/MoveDrawer.svelte.d.ts +2 -2
- package/package/components/NextcloudSetting.svelte +84 -0
- package/package/components/NextcloudSetting.svelte.d.ts +7 -0
- package/package/components/ObjectResourceInput.svelte +3 -2
- package/package/components/ObjectResourceInput.svelte.d.ts +1 -0
- package/package/components/ParqetCsvTableRenderer.svelte +1 -1
- package/package/components/ResourceEditor.svelte +1 -1
- package/package/components/ResourcePicker.svelte +8 -1
- package/package/components/ResourcePicker.svelte.d.ts +1 -0
- package/package/components/ResultStreamDisplay.svelte +5 -0
- package/package/components/ResultStreamDisplay.svelte.d.ts +5 -0
- package/package/components/RunForm.svelte +9 -1
- package/package/components/SchemaForm.svelte +2 -2
- package/package/components/SchemaForm.svelte.d.ts +2 -10
- package/package/components/ScriptBuilder.svelte +13 -8
- package/package/components/ScriptBuilder.svelte.d.ts +1 -1
- package/package/components/ScriptEditor.svelte.d.ts +1 -1
- package/package/components/ScriptWrapper.svelte +1 -1
- package/package/components/ShareModal.svelte.d.ts +1 -1
- package/package/components/SimpleAgTable.svelte +2 -0
- package/package/components/SimpleAgTable.svelte.d.ts +2 -0
- package/package/components/SqlRepl.svelte +21 -7
- package/package/components/SqlRepl.svelte.d.ts +2 -2
- package/package/components/StringTypeNarrowing.svelte.d.ts +1 -1
- package/package/components/WorkerTagSelect.svelte +70 -1
- package/package/components/apps/components/display/AppDisplayComponent.svelte +13 -1
- package/package/components/apps/components/display/AppText.svelte +2 -2
- package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +8 -1
- package/package/components/apps/components/display/dbtable/InsertRow.svelte +5 -4
- package/package/components/apps/components/display/dbtable/queries/count.js +11 -1
- package/package/components/apps/components/display/dbtable/queries/createTable.d.ts +1 -1
- package/package/components/apps/components/display/dbtable/queries/createTable.js +3 -3
- package/package/components/apps/components/display/dbtable/queries/delete.js +7 -0
- package/package/components/apps/components/display/dbtable/queries/insert.js +2 -0
- package/package/components/apps/components/display/dbtable/queries/select.js +14 -0
- package/package/components/apps/components/display/dbtable/queries/update.js +7 -0
- package/package/components/apps/components/display/dbtable/utils.d.ts +6 -5
- package/package/components/apps/components/display/dbtable/utils.js +52 -28
- package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +1 -1
- package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte +1 -0
- package/package/components/apps/components/display/table/AppAggridInfiniteTable.svelte.d.ts +1 -0
- package/package/components/apps/components/display/table/AppAggridTable.svelte +5 -4
- package/package/components/apps/components/display/table/AppAggridTable.svelte.d.ts +1 -0
- package/package/components/apps/components/display/table/utils.js +7 -4
- package/package/components/apps/components/helpers/HiddenComponent.svelte +2 -2
- package/package/components/apps/components/helpers/RunnableComponent.svelte +4 -1
- package/package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +2 -1
- package/package/components/apps/components/inputs/AppS3FileInput.svelte +2 -2
- package/package/components/apps/components/layout/AppDecisionTree.svelte +1 -1
- package/package/components/apps/components/layout/AppStepper.svelte +1 -1
- package/package/components/apps/components/layout/AppTabs.svelte +1 -1
- package/package/components/apps/editor/AppEditorHeader.svelte +13 -2
- package/package/components/apps/editor/GridViewer.svelte +1 -0
- package/package/components/apps/editor/RunnableJobPanelInner.svelte +2 -1
- package/package/components/apps/editor/contextPanel/components/IdEditor.svelte +7 -7
- package/package/components/apps/editor/contextPanel/components/IdEditor.svelte.d.ts +7 -19
- package/package/components/apps/editor/contextPanel/components/OutputHeader.svelte +8 -12
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte.d.ts +1 -1
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorDrawer.svelte.d.ts +1 -1
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptRunnableByPath.svelte.d.ts +1 -1
- package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +3 -3
- package/package/components/apps/editor/settingsPanel/decisionTree/DecisionTreePreview.svelte +1 -3
- package/package/components/assets/AssetsDropdownButton.svelte +1 -1
- package/package/components/assets/JobAssetsViewer.svelte +2 -2
- package/package/components/assets/lib.js +4 -0
- package/package/components/auditLogs/AuditLogsFilters.svelte +7 -9
- package/package/components/common/button/Button.svelte +4 -3
- package/package/components/common/button/Button.svelte.d.ts +1 -0
- package/package/components/common/confirmationModal/ConfirmationModal.svelte +6 -5
- package/package/components/common/confirmationModal/ConfirmationModal.svelte.d.ts +6 -11
- package/package/components/common/confirmationModal/asyncConfirmationModal.svelte.d.ts +26 -0
- package/package/components/common/confirmationModal/asyncConfirmationModal.svelte.js +50 -0
- package/package/components/common/modal/Modal.svelte +2 -5
- package/package/components/common/tabs/TabsV2.svelte +2 -1
- package/package/components/common/tabs/TabsV2.svelte.d.ts +1 -0
- package/package/components/copilot/chat/AIChatManager.svelte.js +61 -7
- package/package/components/copilot/chat/ContextTextarea.svelte +1 -1
- package/package/components/copilot/chat/script/core.js +28 -29
- package/package/components/copilot/chat/shared.d.ts +1 -1
- package/package/components/copilot/chat/shared.js +8 -2
- package/package/components/custom_ui.d.ts +3 -0
- package/package/components/dbOps.d.ts +20 -8
- package/package/components/dbOps.js +85 -40
- package/package/components/details/DetailPageHeader.svelte +0 -2
- package/package/components/flows/content/FlowInput.svelte +5 -0
- package/package/components/flows/content/FlowModuleComponent.svelte +1 -0
- package/package/components/flows/content/FlowModuleScript.svelte +0 -1
- package/package/components/flows/idUtils.js +2 -1
- package/package/components/flows/map/FlowModuleSchemaItem.svelte +3 -3
- package/package/components/flows/map/FlowModuleSchemaMap.svelte +5 -0
- package/package/components/flows/map/InsertModuleButton.svelte +4 -1
- package/package/components/flows/propPicker/OutputBadge.svelte +5 -1
- package/package/components/flows/propPicker/OutputPickerInner.svelte +9 -5
- package/package/components/flows/propPicker/OutputPickerInner.svelte.d.ts +6 -2
- package/package/components/flows/propPicker/StepHistory.svelte +4 -1
- package/package/components/git_sync/DetectionFlow.svelte +202 -0
- package/package/components/git_sync/DetectionFlow.svelte.d.ts +6 -0
- package/package/components/git_sync/GitSyncContext.svelte.d.ts +82 -0
- package/package/components/git_sync/GitSyncContext.svelte.js +461 -0
- package/package/components/git_sync/GitSyncModalManager.svelte +99 -0
- package/package/components/git_sync/GitSyncModalManager.svelte.d.ts +18 -0
- package/package/components/git_sync/GitSyncRepositoryCard.svelte +339 -0
- package/package/components/git_sync/GitSyncRepositoryCard.svelte.d.ts +6 -0
- package/package/components/git_sync/GitSyncRepositoryList.svelte +17 -0
- package/package/components/git_sync/GitSyncRepositoryList.svelte.d.ts +18 -0
- package/package/components/git_sync/GitSyncSection.svelte +89 -0
- package/package/components/git_sync/GitSyncSection.svelte.d.ts +3 -0
- package/package/components/git_sync/GitSyncSuccessModal.svelte +58 -0
- package/package/components/git_sync/GitSyncSuccessModal.svelte.d.ts +7 -0
- package/package/components/git_sync/PullWorkspaceModal.svelte +575 -0
- package/package/components/git_sync/PullWorkspaceModal.svelte.d.ts +15 -0
- package/package/components/git_sync/PushWorkspaceModal.svelte +320 -0
- package/package/components/git_sync/PushWorkspaceModal.svelte.d.ts +12 -0
- package/package/components/graph/FlowGraphV2.svelte +5 -1
- package/package/components/graph/graphBuilder.svelte.js +1 -1
- package/package/components/graph/renderers/nodes/AssetNode.svelte +4 -4
- package/package/components/icons/AssetDucklakeIcon.svelte +28 -0
- package/package/components/icons/AssetDucklakeIcon.svelte.d.ts +9 -0
- package/package/components/icons/AssetGenericIcon.svelte +3 -0
- package/package/components/icons/DucklakeIcon.svelte +18 -0
- package/package/components/icons/DucklakeIcon.svelte.d.ts +6 -0
- package/package/components/instanceSettings.js +11 -3
- package/package/components/runs/JobPreview.svelte +2 -2
- package/package/components/runs/NoWorkerWithTagWarning.svelte +3 -3
- package/package/components/runs/RunsFilter.svelte.d.ts +1 -1
- package/package/components/schema/FlowPropertyEditor.svelte +3 -2
- package/package/components/schema/FlowPropertyEditor.svelte.d.ts +1 -1
- package/package/components/schema/PropertyEditor.svelte +0 -2
- package/package/components/schema/PropertyEditor.svelte.d.ts +1 -1
- package/package/components/schema/SchemaFormDND.svelte +2 -1
- package/package/components/schema/SchemaFormDND.svelte.d.ts +2 -0
- package/package/components/scriptEditor/LogPanel.svelte +5 -3
- package/package/components/scriptEditor/LogPanel.svelte.d.ts +5 -1
- package/package/components/select/Select.svelte +7 -4
- package/package/components/select/Select.svelte.d.ts +5 -0
- package/package/components/select/SelectDropdown.svelte +2 -1
- package/package/components/select/SelectDropdown.svelte.d.ts +3 -0
- package/package/components/sidebar/changelogs.js +5 -0
- package/package/components/table/AutoDataTable.svelte +6 -4
- package/package/components/table/AutoDataTable.svelte.d.ts +1 -0
- package/package/components/table/DataTable.svelte +12 -10
- package/package/components/table/DataTable.svelte.d.ts +1 -0
- package/package/components/triggers/TriggerRetriesAndErrorHandler.svelte.d.ts +2 -2
- 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 +50 -11
- package/package/components/triggers/gcp/utils.js +1 -0
- package/package/components/triggers/http/utils.js +1 -1
- package/package/components/triggers/kafka/utils.js +1 -1
- package/package/components/triggers/mqtt/utils.js +1 -1
- package/package/components/triggers/nats/utils.js +1 -1
- package/package/components/triggers/postgres/utils.js +1 -1
- package/package/components/triggers/sqs/utils.js +1 -1
- package/package/components/triggers/utils.js +2 -1
- package/package/components/triggers/webhook/WebhooksConfigSection.svelte +24 -26
- package/package/components/triggers/webhook/WebhooksPanel.svelte +1 -15
- package/package/components/triggers/websocket/utils.js +1 -1
- package/package/components/workspaceSettings/AISettings.svelte +52 -36
- package/package/components/workspaceSettings/DucklakeSettings.svelte +321 -0
- package/package/components/workspaceSettings/DucklakeSettings.svelte.d.ts +23 -0
- package/package/components/workspaceSettings/GitSyncFilterSettings.svelte +122 -499
- package/package/components/workspaceSettings/GitSyncFilterSettings.svelte.d.ts +8 -10
- package/package/consts.js +2 -1
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/schemas.gen.d.ts +33 -24
- package/package/gen/schemas.gen.js +36 -27
- package/package/gen/services.gen.d.ts +19 -1
- package/package/gen/services.gen.js +38 -0
- package/package/gen/types.gen.d.ts +103 -9
- package/package/git-sync.d.ts +36 -0
- package/package/git-sync.js +1 -0
- package/package/hub.d.ts +1 -0
- package/package/hubPaths.json +5 -2
- package/package/infer.js +3 -2
- package/package/script_helpers.d.ts +2 -2
- package/package/script_helpers.js +29 -11
- package/package/services/JobManager.d.ts +28 -0
- package/package/services/JobManager.js +114 -0
- package/package/stores.d.ts +1 -1
- package/package/utils.d.ts +18 -1
- package/package/utils.js +55 -2
- package/package.json +13 -12
- package/package/components/InitGitRepoPopover.svelte +0 -410
- package/package/components/InitGitRepoPopover.svelte.d.ts +0 -13
- package/package/components/PullGitRepoPopover.svelte +0 -355
- package/package/components/PullGitRepoPopover.svelte.d.ts +0 -18
- package/package/inferArgSig.d.ts +0 -35
- package/package/inferArgSig.js +0 -191
|
@@ -1,25 +1,21 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
let
|
|
1
|
+
<script lang="ts">let { previewResult } = $props();
|
|
2
|
+
let added = $derived(previewResult?.changes?.filter(c => c.type === 'added').map(c => c.path) || []);
|
|
3
|
+
let deleted = $derived(previewResult?.changes?.filter(c => c.type === 'deleted').map(c => c.path) || []);
|
|
4
|
+
let edited = $derived(previewResult?.changes?.filter(c => c.type === 'edited').map(c => c.path) || []);
|
|
5
|
+
export {};
|
|
3
6
|
</script>
|
|
4
7
|
|
|
5
8
|
<div class="border rounded p-2 text-xs max-h-40 overflow-y-auto bg-surface-secondary">
|
|
6
9
|
<div class="font-semibold text-[11px] mb-1 text-tertiary">Preview of changes:</div>
|
|
7
|
-
|
|
10
|
+
|
|
11
|
+
{#if !added.length && !deleted.length && !edited.length}
|
|
8
12
|
<div class="mt-2 text-tertiary">No changes found! The workspace is up to date.</div>
|
|
9
13
|
{:else}
|
|
10
|
-
{#if
|
|
11
|
-
<div class="mt-2">
|
|
12
|
-
<div class="text-yellow-600">Modified:</div>
|
|
13
|
-
<ul class="list-disc list-inside">
|
|
14
|
-
<li>wmill.yaml (Git sync settings)</li>
|
|
15
|
-
</ul>
|
|
16
|
-
</div>
|
|
17
|
-
{/if}
|
|
18
|
-
{#if previewResult?.added?.length}
|
|
14
|
+
{#if added.length}
|
|
19
15
|
<div class="mt-2">
|
|
20
16
|
<div class="text-green-600">Added:</div>
|
|
21
17
|
<ul class="list-disc list-inside">
|
|
22
|
-
{#each
|
|
18
|
+
{#each added as file}
|
|
23
19
|
<li>
|
|
24
20
|
{file}{!file.includes('.') ? ' (dir)' : ''}
|
|
25
21
|
</li>
|
|
@@ -27,11 +23,11 @@ let { previewResult } = $props();
|
|
|
27
23
|
</ul>
|
|
28
24
|
</div>
|
|
29
25
|
{/if}
|
|
30
|
-
{#if
|
|
26
|
+
{#if deleted.length}
|
|
31
27
|
<div class="mt-2">
|
|
32
28
|
<div class="text-red-600">Deleted:</div>
|
|
33
29
|
<ul class="list-disc list-inside">
|
|
34
|
-
{#each
|
|
30
|
+
{#each deleted as file}
|
|
35
31
|
<li>
|
|
36
32
|
{file}{!file.includes('.') ? ' (dir)' : ''}
|
|
37
33
|
</li>
|
|
@@ -39,11 +35,11 @@ let { previewResult } = $props();
|
|
|
39
35
|
</ul>
|
|
40
36
|
</div>
|
|
41
37
|
{/if}
|
|
42
|
-
{#if
|
|
38
|
+
{#if edited.length}
|
|
43
39
|
<div class="mt-2">
|
|
44
|
-
<div class="text-yellow-600">
|
|
40
|
+
<div class="text-yellow-600">Edited:</div>
|
|
45
41
|
<ul class="list-disc list-inside">
|
|
46
|
-
{#each
|
|
42
|
+
{#each edited as file}
|
|
47
43
|
<li>
|
|
48
44
|
{file}{!file.includes('.') ? ' (dir)' : ''}
|
|
49
45
|
</li>
|
|
@@ -1,12 +1,6 @@
|
|
|
1
|
-
type
|
|
2
|
-
added: string[];
|
|
3
|
-
deleted: string[];
|
|
4
|
-
modified: string[];
|
|
5
|
-
repoWmillYaml?: string;
|
|
6
|
-
yamlModified?: boolean;
|
|
7
|
-
};
|
|
1
|
+
import type { SyncResponse } from '../git-sync';
|
|
8
2
|
type $$ComponentProps = {
|
|
9
|
-
previewResult:
|
|
3
|
+
previewResult: SyncResponse | undefined;
|
|
10
4
|
};
|
|
11
5
|
declare const GitDiffPreview: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
12
6
|
type GitDiffPreview = ReturnType<typeof GitDiffPreview>;
|
|
@@ -12,7 +12,9 @@ let githubAppPopover = $state(null);
|
|
|
12
12
|
let githubInstallationsNotInWorkspace = $derived(githubState.githubInstallations
|
|
13
13
|
.filter((installation) => !githubState.workspaceGithubInstallations.some((workspaceInstallation) => workspaceInstallation.installation_id === installation.installation_id))
|
|
14
14
|
.filter((installation, index, array) => array.findIndex((item) => item.installation_id === installation.installation_id) === index));
|
|
15
|
-
let showGitHubApp = $derived(resourceType === 'git_repository' &&
|
|
15
|
+
let showGitHubApp = $derived(resourceType === 'git_repository' &&
|
|
16
|
+
$workspaceStore &&
|
|
17
|
+
($userStore?.is_admin || $userStore?.is_super_admin));
|
|
16
18
|
// Load GitHub installations when conditions are met
|
|
17
19
|
$effect(() => {
|
|
18
20
|
if (showGitHubApp && $enterpriseLicense && $workspaceStore) {
|
|
@@ -1,20 +1,13 @@
|
|
|
1
|
-
<script lang="ts">import {
|
|
1
|
+
<script lang="ts">import { stopPropagation, createBubbler } from 'svelte/legacy';
|
|
2
|
+
const bubble = createBubbler();
|
|
3
|
+
import { ArrowRight } from 'lucide-svelte';
|
|
2
4
|
import { Button } from './common';
|
|
3
|
-
import { createEventDispatcher } from 'svelte';
|
|
4
5
|
import { forbiddenIds } from './flows/idUtils';
|
|
5
6
|
import { slide } from 'svelte/transition';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
export let label = 'Component ID';
|
|
9
|
-
export let value = initialId;
|
|
10
|
-
export let buttonText = '';
|
|
11
|
-
export let btnClasses = '!p-1 !w-[34px] !ml-1';
|
|
12
|
-
export let acceptUnderScores = false;
|
|
13
|
-
let error = '';
|
|
14
|
-
const dispatch = createEventDispatcher();
|
|
7
|
+
let { initialId, reservedIds = [], reservedPrefixes = [], label = 'Component ID', value = $bindable(initialId), buttonText = '', btnClasses = '!p-1 !w-[34px] !ml-1', acceptUnderScores = false, onSave, onClose } = $props();
|
|
8
|
+
let error = $state('');
|
|
15
9
|
const regex = acceptUnderScores ? /^[a-zA-Z][a-zA-Z0-9_]*$/ : /^[a-zA-Z][a-zA-Z0-9]*$/;
|
|
16
|
-
|
|
17
|
-
function validateId(id, reservedIds) {
|
|
10
|
+
function validateId(id, reservedIds, reservedPrefixes) {
|
|
18
11
|
if (id == initialId) {
|
|
19
12
|
error = '';
|
|
20
13
|
return;
|
|
@@ -25,6 +18,9 @@ function validateId(id, reservedIds) {
|
|
|
25
18
|
else if (forbiddenIds.includes(value)) {
|
|
26
19
|
error = 'This ID is reserved';
|
|
27
20
|
}
|
|
21
|
+
else if (reservedPrefixes.some((prefix) => value.startsWith(prefix))) {
|
|
22
|
+
error = 'This ID uses a reserved prefix';
|
|
23
|
+
}
|
|
28
24
|
else if (reservedIds.some((rid) => rid === value)) {
|
|
29
25
|
error = 'This ID is already in use';
|
|
30
26
|
}
|
|
@@ -32,8 +28,13 @@ function validateId(id, reservedIds) {
|
|
|
32
28
|
error = '';
|
|
33
29
|
}
|
|
34
30
|
}
|
|
35
|
-
let inputDiv = undefined;
|
|
36
|
-
|
|
31
|
+
let inputDiv = $state(undefined);
|
|
32
|
+
$effect(() => {
|
|
33
|
+
validateId(value, reservedIds, reservedPrefixes);
|
|
34
|
+
});
|
|
35
|
+
$effect(() => {
|
|
36
|
+
inputDiv?.focus();
|
|
37
|
+
});
|
|
37
38
|
</script>
|
|
38
39
|
|
|
39
40
|
<label class="block text-primary">
|
|
@@ -46,15 +47,17 @@ $: inputDiv?.focus();
|
|
|
46
47
|
type="text"
|
|
47
48
|
bind:value
|
|
48
49
|
class="!w-auto grow"
|
|
49
|
-
|
|
50
|
-
|
|
50
|
+
onclick={stopPropagation(() => {})}
|
|
51
|
+
onkeydown={(e) => {
|
|
52
|
+
e.stopPropagation()
|
|
53
|
+
let key = e.key
|
|
51
54
|
if (key === 'Enter' && error === '' && value !== initialId) {
|
|
52
|
-
|
|
55
|
+
onSave({ oldId: initialId, newId: value })
|
|
53
56
|
} else if (key == 'Escape') {
|
|
54
|
-
|
|
57
|
+
onClose?.()
|
|
55
58
|
}
|
|
56
59
|
}}
|
|
57
|
-
|
|
60
|
+
onkeypress={stopPropagation(bubble('keypress'))}
|
|
58
61
|
/>
|
|
59
62
|
<Button
|
|
60
63
|
size="xs"
|
|
@@ -63,8 +66,8 @@ $: inputDiv?.focus();
|
|
|
63
66
|
{btnClasses}
|
|
64
67
|
aria-label="Save ID"
|
|
65
68
|
disabled={error != '' || value === initialId}
|
|
66
|
-
|
|
67
|
-
|
|
69
|
+
onclick={() => {
|
|
70
|
+
onSave({ oldId: initialId, newId: value })
|
|
68
71
|
}}
|
|
69
72
|
>
|
|
70
73
|
{buttonText}<ArrowRight size={18} />
|
|
@@ -1,30 +1,18 @@
|
|
|
1
|
-
interface
|
|
2
|
-
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
3
|
-
$$bindings?: Bindings;
|
|
4
|
-
} & Exports;
|
|
5
|
-
(internal: unknown, props: Props & {
|
|
6
|
-
$$events?: Events;
|
|
7
|
-
$$slots?: Slots;
|
|
8
|
-
}): Exports & {
|
|
9
|
-
$set?: any;
|
|
10
|
-
$on?: any;
|
|
11
|
-
};
|
|
12
|
-
z_$$bindings?: Bindings;
|
|
13
|
-
}
|
|
14
|
-
declare const IdEditorInput: $$__sveltets_2_IsomorphicComponent<{
|
|
1
|
+
interface Props {
|
|
15
2
|
initialId: string;
|
|
16
3
|
reservedIds?: string[];
|
|
4
|
+
reservedPrefixes?: string[];
|
|
17
5
|
label?: string;
|
|
18
|
-
value?:
|
|
6
|
+
value?: any;
|
|
19
7
|
buttonText?: string;
|
|
20
8
|
btnClasses?: string;
|
|
21
9
|
acceptUnderScores?: boolean;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
type IdEditorInput =
|
|
10
|
+
onSave: ({ oldId, newId }: {
|
|
11
|
+
oldId: string;
|
|
12
|
+
newId: string;
|
|
13
|
+
}) => void;
|
|
14
|
+
onClose?: () => void;
|
|
15
|
+
}
|
|
16
|
+
declare const IdEditorInput: import("svelte").Component<Props, {}, "value">;
|
|
17
|
+
type IdEditorInput = ReturnType<typeof IdEditorInput>;
|
|
30
18
|
export default IdEditorInput;
|
|
@@ -44,6 +44,11 @@ let to = $state('');
|
|
|
44
44
|
async function reloadKeyrenewalAttemptInfo() {
|
|
45
45
|
latestKeyRenewalAttempt = await SettingService.getLatestKeyRenewalAttempt();
|
|
46
46
|
}
|
|
47
|
+
async function reloadLicenseKey() {
|
|
48
|
+
$values['license_key'] = await SettingService.getGlobal({
|
|
49
|
+
key: 'license_key'
|
|
50
|
+
});
|
|
51
|
+
}
|
|
47
52
|
if (setting.key == 'license_key') {
|
|
48
53
|
reloadKeyrenewalAttemptInfo();
|
|
49
54
|
}
|
|
@@ -54,13 +59,13 @@ export async function renewLicenseKey() {
|
|
|
54
59
|
licenseKey: $values['license_key'] || undefined
|
|
55
60
|
});
|
|
56
61
|
sendUserToast('Key renewal successful');
|
|
57
|
-
|
|
62
|
+
reloadLicenseKey();
|
|
58
63
|
}
|
|
59
64
|
catch (err) {
|
|
60
|
-
latestKeyRenewalAttempt = await SettingService.getLatestKeyRenewalAttempt();
|
|
61
65
|
throw err;
|
|
62
66
|
}
|
|
63
67
|
finally {
|
|
68
|
+
reloadKeyrenewalAttemptInfo();
|
|
64
69
|
renewing = false;
|
|
65
70
|
}
|
|
66
71
|
}
|
|
@@ -3,7 +3,7 @@ import { workspaceStore } from '../stores';
|
|
|
3
3
|
import { onDestroy, tick, untrack } from 'svelte';
|
|
4
4
|
import { sendUserToast } from '../toast';
|
|
5
5
|
import { isScriptPreview } from '../utils';
|
|
6
|
-
let { isLoading = $bindable(false), job = $bindable(undefined), noCode = false, allowConcurentRequests = false, workspaceOverride = undefined, notfound = $bindable(false), jobUpdateLastFetch = $bindable(undefined), toastError = false,
|
|
6
|
+
let { isLoading = $bindable(false), job = $bindable(undefined), noCode = false, allowConcurentRequests = false, workspaceOverride = undefined, notfound = $bindable(false), jobUpdateLastFetch = $bindable(undefined), toastError = false, onlyResult = false, scriptProgress = $bindable(undefined), noLogs = false, children } = $props();
|
|
7
7
|
/// Last time asked for job progress
|
|
8
8
|
let lastTimeCheckedProgress = undefined;
|
|
9
9
|
/// Will try to poll progress every 5s and if once progress returned was not undefined, will be ignored
|
|
@@ -15,6 +15,7 @@ let workspace = $derived(workspaceOverride ?? $workspaceStore);
|
|
|
15
15
|
let syncIteration = 0;
|
|
16
16
|
let errorIteration = 0;
|
|
17
17
|
let logOffset = 0;
|
|
18
|
+
let resultStreamOffset = 0;
|
|
18
19
|
let lastCallbacks = undefined;
|
|
19
20
|
let finished = [];
|
|
20
21
|
let ITERATIONS_BEFORE_SLOW_REFRESH = 10;
|
|
@@ -104,6 +105,9 @@ function refreshLogOffset() {
|
|
|
104
105
|
if (logOffset == 0) {
|
|
105
106
|
logOffset = job?.logs?.length ? job.logs?.length + 1 : 0;
|
|
106
107
|
}
|
|
108
|
+
if (resultStreamOffset == 0) {
|
|
109
|
+
resultStreamOffset = job?.result_stream?.length ? job.result_stream?.length + 1 : 0;
|
|
110
|
+
}
|
|
107
111
|
}
|
|
108
112
|
export async function getLogs() {
|
|
109
113
|
if (job) {
|
|
@@ -176,6 +180,7 @@ function supportsSSE() {
|
|
|
176
180
|
let startedWatchingJob = undefined;
|
|
177
181
|
export async function watchJob(testId, callbacks) {
|
|
178
182
|
logOffset = 0;
|
|
183
|
+
resultStreamOffset = 0;
|
|
179
184
|
syncIteration = 0;
|
|
180
185
|
errorIteration = 0;
|
|
181
186
|
currentId = testId;
|
|
@@ -237,9 +242,24 @@ function updateJobFromProgress(previewJobUpdates, job, callbacks) {
|
|
|
237
242
|
job.logs = (job?.logs ?? '').concat(previewJobUpdates.new_logs);
|
|
238
243
|
}
|
|
239
244
|
}
|
|
245
|
+
if (previewJobUpdates.new_result_stream) {
|
|
246
|
+
if (!job.result_stream) {
|
|
247
|
+
job.result_stream = previewJobUpdates.new_result_stream;
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
job.result_stream = job.result_stream.concat(previewJobUpdates.new_result_stream);
|
|
251
|
+
}
|
|
252
|
+
callbacks?.resultStreamUpdate?.({
|
|
253
|
+
id: job.id,
|
|
254
|
+
result_stream: job.result_stream
|
|
255
|
+
});
|
|
256
|
+
}
|
|
240
257
|
if (previewJobUpdates.log_offset) {
|
|
241
258
|
logOffset = previewJobUpdates.log_offset ?? 0;
|
|
242
259
|
}
|
|
260
|
+
if (previewJobUpdates.stream_offset) {
|
|
261
|
+
resultStreamOffset = previewJobUpdates.stream_offset ?? 0;
|
|
262
|
+
}
|
|
243
263
|
if (previewJobUpdates.flow_status) {
|
|
244
264
|
job.flow_status = previewJobUpdates.flow_status;
|
|
245
265
|
}
|
|
@@ -252,9 +272,10 @@ function updateJobFromProgress(previewJobUpdates, job, callbacks) {
|
|
|
252
272
|
if (job &&
|
|
253
273
|
(previewJobUpdates.running ||
|
|
254
274
|
previewJobUpdates.progress ||
|
|
255
|
-
previewJobUpdates.
|
|
275
|
+
previewJobUpdates.log_offset ||
|
|
256
276
|
previewJobUpdates.flow_status ||
|
|
257
|
-
previewJobUpdates.mem_peak
|
|
277
|
+
previewJobUpdates.mem_peak ||
|
|
278
|
+
previewJobUpdates.stream_offset)) {
|
|
258
279
|
callbacks?.change?.(job);
|
|
259
280
|
}
|
|
260
281
|
}
|
|
@@ -288,7 +309,7 @@ async function loadTestJob(id, callbacks) {
|
|
|
288
309
|
job = await JobService.getJob({
|
|
289
310
|
workspace: workspace,
|
|
290
311
|
id,
|
|
291
|
-
noLogs:
|
|
312
|
+
noLogs: onlyResult || noLogs,
|
|
292
313
|
noCode
|
|
293
314
|
});
|
|
294
315
|
}
|
|
@@ -364,6 +385,7 @@ function isCurrentJob(id) {
|
|
|
364
385
|
}
|
|
365
386
|
async function loadTestJobWithSSE(id, attempt, callbacks) {
|
|
366
387
|
let isCompleted = false;
|
|
388
|
+
let resultOnlyResultStream = '';
|
|
367
389
|
if (isCurrentJob(id)) {
|
|
368
390
|
try {
|
|
369
391
|
// First load the job to get initial state
|
|
@@ -371,10 +393,16 @@ async function loadTestJobWithSSE(id, attempt, callbacks) {
|
|
|
371
393
|
job = await JobService.getJob({
|
|
372
394
|
workspace: workspace,
|
|
373
395
|
id,
|
|
374
|
-
noLogs:
|
|
396
|
+
noLogs: noLogs,
|
|
375
397
|
noCode
|
|
376
398
|
});
|
|
377
399
|
}
|
|
400
|
+
if (!onlyResult) {
|
|
401
|
+
callbacks?.resultStreamUpdate?.({
|
|
402
|
+
id,
|
|
403
|
+
result_stream: undefined
|
|
404
|
+
});
|
|
405
|
+
}
|
|
378
406
|
// If job is already completed, don't start SSE
|
|
379
407
|
if (job?.type === 'CompletedJob') {
|
|
380
408
|
isCompleted = true;
|
|
@@ -411,6 +439,12 @@ async function loadTestJobWithSSE(id, attempt, callbacks) {
|
|
|
411
439
|
if (startedWatchingJob && startedWatchingJob > Date.now() - 5000) {
|
|
412
440
|
params.set('fast', 'true');
|
|
413
441
|
}
|
|
442
|
+
if (noLogs) {
|
|
443
|
+
params.set('no_logs', 'true');
|
|
444
|
+
}
|
|
445
|
+
if (resultStreamOffset) {
|
|
446
|
+
params.set('stream_offset', resultStreamOffset.toString());
|
|
447
|
+
}
|
|
414
448
|
const sseUrl = `/api/w/${workspace}/jobs_u/getupdate_sse/${id}?${params.toString()}`;
|
|
415
449
|
currentEventSource = new EventSource(sseUrl);
|
|
416
450
|
setNoPingTimeout(id, attempt, callbacks);
|
|
@@ -452,6 +486,14 @@ async function loadTestJobWithSSE(id, attempt, callbacks) {
|
|
|
452
486
|
else if (onlyResult && callbacks?.running && previewJobUpdates.running) {
|
|
453
487
|
callbacks?.running?.({ id });
|
|
454
488
|
}
|
|
489
|
+
if (onlyResult && previewJobUpdates.new_result_stream) {
|
|
490
|
+
resultOnlyResultStream = resultOnlyResultStream.concat(previewJobUpdates.new_result_stream);
|
|
491
|
+
// console.log('resultOnlyResultStream', resultOnlyResultStream)
|
|
492
|
+
callbacks?.resultStreamUpdate?.({
|
|
493
|
+
id,
|
|
494
|
+
result_stream: resultOnlyResultStream
|
|
495
|
+
});
|
|
496
|
+
}
|
|
455
497
|
// Check if job is completed
|
|
456
498
|
if (previewJobUpdates.completed) {
|
|
457
499
|
currentEventSource?.close();
|
|
@@ -468,6 +510,7 @@ async function loadTestJobWithSSE(id, attempt, callbacks) {
|
|
|
468
510
|
else {
|
|
469
511
|
const njob = previewJobUpdates.job;
|
|
470
512
|
njob.logs = job?.logs ?? '';
|
|
513
|
+
njob.result_stream = job?.result_stream ?? '';
|
|
471
514
|
job = njob;
|
|
472
515
|
onJobCompleted(id, job, callbacks);
|
|
473
516
|
}
|
|
@@ -22,10 +22,16 @@ export type Callbacks = {
|
|
|
22
22
|
running?: ({ id }: {
|
|
23
23
|
id: string;
|
|
24
24
|
}) => void;
|
|
25
|
+
resultStreamUpdate?: ({ id, result_stream }: {
|
|
26
|
+
id: string;
|
|
27
|
+
result_stream?: string;
|
|
28
|
+
}) => void;
|
|
25
29
|
};
|
|
26
30
|
interface Props {
|
|
27
31
|
isLoading?: boolean;
|
|
28
|
-
job?: Job
|
|
32
|
+
job?: (Job & {
|
|
33
|
+
result_stream?: string;
|
|
34
|
+
}) | undefined;
|
|
29
35
|
noCode?: boolean;
|
|
30
36
|
noLogs?: boolean;
|
|
31
37
|
workspaceOverride?: string | undefined;
|
|
@@ -33,7 +39,6 @@ interface Props {
|
|
|
33
39
|
allowConcurentRequests?: boolean;
|
|
34
40
|
jobUpdateLastFetch?: Date | undefined;
|
|
35
41
|
toastError?: boolean;
|
|
36
|
-
lazyLogs?: boolean;
|
|
37
42
|
onlyResult?: boolean;
|
|
38
43
|
scriptProgress?: number | undefined;
|
|
39
44
|
children?: import('svelte').Snippet<[any]>;
|
|
@@ -5,9 +5,10 @@ import Google from './icons/brands/Google.svelte';
|
|
|
5
5
|
import Microsoft from './icons/brands/Microsoft.svelte';
|
|
6
6
|
import Okta from './icons/brands/Okta.svelte';
|
|
7
7
|
import Auth0 from './icons/brands/Auth0.svelte';
|
|
8
|
+
import NextcloudIcon from './icons/NextcloudIcon.svelte';
|
|
8
9
|
import { OauthService, UserService, WorkspaceService } from '../gen';
|
|
9
10
|
import { usersWorkspaceStore, workspaceStore, userStore } from '../stores';
|
|
10
|
-
import { classNames, emptyString, parseQueryParams } from '../utils';
|
|
11
|
+
import { classNames, emptyString, escapeHtml, parseQueryParams } from '../utils';
|
|
11
12
|
import { base } from '../base';
|
|
12
13
|
import { getUserExt } from '../user';
|
|
13
14
|
import { sendUserToast } from '../toast';
|
|
@@ -47,6 +48,11 @@ const providers = [
|
|
|
47
48
|
type: 'auth0',
|
|
48
49
|
name: 'Auth0',
|
|
49
50
|
icon: Auth0
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
type: 'nextcloud',
|
|
54
|
+
name: 'Nextcloud',
|
|
55
|
+
icon: NextcloudIcon
|
|
50
56
|
}
|
|
51
57
|
];
|
|
52
58
|
const providersType = providers.map((p) => p.type);
|
|
@@ -227,7 +233,7 @@ function storeRedirect(provider) {
|
|
|
227
233
|
}
|
|
228
234
|
}
|
|
229
235
|
$effect(() => {
|
|
230
|
-
error && sendUserToast(error, true);
|
|
236
|
+
error && sendUserToast(escapeHtml(error), true);
|
|
231
237
|
});
|
|
232
238
|
</script>
|
|
233
239
|
|
|
@@ -49,7 +49,7 @@ $: jobUpdateLastFetch && loadMetricsData();
|
|
|
49
49
|
|
|
50
50
|
<div class="relative max-h-100">
|
|
51
51
|
{#if !$enterpriseLicense}
|
|
52
|
-
<Alert type="
|
|
52
|
+
<Alert type="warning" title="Enterprise Edition only feature">
|
|
53
53
|
Job metrics are only available on Windmill Enterprise Edition.
|
|
54
54
|
</Alert>
|
|
55
55
|
{:else if (jobMemoryStats?.length ?? 0) === 0}
|
|
@@ -15,7 +15,7 @@ const logJob = $derived(testJob ?? selectedJob);
|
|
|
15
15
|
</script>
|
|
16
16
|
|
|
17
17
|
<Splitpanes horizontal>
|
|
18
|
-
<Pane size={
|
|
18
|
+
<Pane size={65} minSize={10} class="text-sm text-tertiary">
|
|
19
19
|
{#if scriptProgress}
|
|
20
20
|
<JobProgressBar
|
|
21
21
|
job={testJob}
|
|
@@ -50,7 +50,7 @@ const logJob = $derived(testJob ?? selectedJob);
|
|
|
50
50
|
{/snippet}
|
|
51
51
|
</OutputPickerInner>
|
|
52
52
|
</Pane>
|
|
53
|
-
<Pane size={
|
|
53
|
+
<Pane size={35} minSize={10}>
|
|
54
54
|
{#if (mod.mock?.enabled && preview != 'job') || preview == 'mock'}
|
|
55
55
|
<LogViewer
|
|
56
56
|
small
|
|
@@ -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: "resource" | "script" | "flow" | "
|
|
15
|
+
openDrawer?: (initialPath_l: string, summary_l: string | undefined, kind_l: "resource" | "script" | "flow" | "app" | "variable" | "schedule" | "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: "resource" | "script" | "flow" | "
|
|
21
|
+
openDrawer: (initialPath_l: string, summary_l: string | undefined, kind_l: "resource" | "script" | "flow" | "app" | "variable" | "schedule" | "raw_app") => Promise<void>;
|
|
22
22
|
}, string>;
|
|
23
23
|
type MoveDrawer = InstanceType<typeof MoveDrawer>;
|
|
24
24
|
export default MoveDrawer;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
<script lang="ts">import CollapseLink from './CollapseLink.svelte';
|
|
2
|
+
import IconedResourceType from './IconedResourceType.svelte';
|
|
3
|
+
import Toggle from './Toggle.svelte';
|
|
4
|
+
import Tooltip from './Tooltip.svelte';
|
|
5
|
+
let { value = $bindable(), baseUrl } = $props();
|
|
6
|
+
function changeDomain(domain) {
|
|
7
|
+
if (value && domain) {
|
|
8
|
+
// Remove http:// or https:// if user included it
|
|
9
|
+
const cleanDomain = domain.replace(/^https?:\/\//, '');
|
|
10
|
+
let baseUrl = `https://${cleanDomain}`;
|
|
11
|
+
value = {
|
|
12
|
+
...value,
|
|
13
|
+
login_config: {
|
|
14
|
+
auth_url: `${baseUrl}/apps/oauth2/authorize`,
|
|
15
|
+
token_url: `${baseUrl}/apps/oauth2/api/v1/token`,
|
|
16
|
+
userinfo_url: `${baseUrl}/ocs/v2.php/cloud/user?format=json`,
|
|
17
|
+
scopes: []
|
|
18
|
+
},
|
|
19
|
+
connect_config: {
|
|
20
|
+
auth_url: `${baseUrl}/apps/oauth2/authorize`,
|
|
21
|
+
token_url: `${baseUrl}/apps/oauth2/api/v1/token`,
|
|
22
|
+
scopes: []
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
let enabled = $derived(value != undefined);
|
|
28
|
+
$effect(() => {
|
|
29
|
+
changeDomain(value?.['domain']);
|
|
30
|
+
});
|
|
31
|
+
</script>
|
|
32
|
+
|
|
33
|
+
<div class="flex flex-col gap-1">
|
|
34
|
+
<!-- svelte-ignore a11y_label_has_associated_control -->
|
|
35
|
+
<label class="text-sm font-medium text-primary flex gap-4 items-center"
|
|
36
|
+
><div class="w-[120px]"><IconedResourceType name="nextcloud" after={true} /></div><Toggle
|
|
37
|
+
checked={enabled}
|
|
38
|
+
on:change={(e) => {
|
|
39
|
+
if (e.detail) {
|
|
40
|
+
value = { id: '', secret: '', domain: '' }
|
|
41
|
+
} else {
|
|
42
|
+
value = undefined
|
|
43
|
+
}
|
|
44
|
+
}}
|
|
45
|
+
/></label
|
|
46
|
+
>
|
|
47
|
+
{#if enabled}
|
|
48
|
+
<div class="p-2 rounded border">
|
|
49
|
+
<label class="block pb-2">
|
|
50
|
+
<span class="text-primary font-semibold text-sm">Nextcloud Instance Domain</span>
|
|
51
|
+
<input type="text" placeholder="example.nextcloud.com" bind:value={value['domain']} />
|
|
52
|
+
</label>
|
|
53
|
+
<label class="block pb-2">
|
|
54
|
+
<span class="text-primary font-semibold text-sm">Custom Name</span>
|
|
55
|
+
<input type="text" placeholder="Custom Name" bind:value={value['display_name']} />
|
|
56
|
+
</label>
|
|
57
|
+
<label class="block pb-2">
|
|
58
|
+
<span class="text-primary font-semibold text-sm"
|
|
59
|
+
>Client Id <Tooltip
|
|
60
|
+
>Client ID from your Nextcloud OAuth2 app configuration</Tooltip
|
|
61
|
+
></span
|
|
62
|
+
>
|
|
63
|
+
<input type="text" placeholder="Client Id" bind:value={value['id']} />
|
|
64
|
+
</label>
|
|
65
|
+
<label class="block pb-2">
|
|
66
|
+
<span class="text-primary font-semibold text-sm"
|
|
67
|
+
>Client Secret <Tooltip
|
|
68
|
+
>Client Secret from your Nextcloud OAuth2 app configuration</Tooltip
|
|
69
|
+
></span
|
|
70
|
+
>
|
|
71
|
+
<input type="text" placeholder="Client Secret" bind:value={value['secret']} />
|
|
72
|
+
</label>
|
|
73
|
+
<CollapseLink text="Instructions">
|
|
74
|
+
<div class="text-sm text-secondary border p-2">
|
|
75
|
+
1. Go to your Nextcloud instance as an administrator<br />
|
|
76
|
+
2. Navigate to <strong>Administration settings → Security → OAuth 2.0 clients</strong><br />
|
|
77
|
+
3. Click "Add client" to create a new OAuth2 application<br />
|
|
78
|
+
4. Set the redirect URI to your Windmill instance's <code>{baseUrl || 'BASE_URL'}/user/login_callback/nextcloud</code><br />
|
|
79
|
+
5. Copy the Client ID and Client Secret to the fields above<br />
|
|
80
|
+
</div>
|
|
81
|
+
</CollapseLink>
|
|
82
|
+
</div>
|
|
83
|
+
{/if}
|
|
84
|
+
</div>
|
|
@@ -4,7 +4,7 @@ import S3ObjectPicker from './S3ObjectPicker.svelte';
|
|
|
4
4
|
function isString(value) {
|
|
5
5
|
return typeof value === 'string' || value instanceof String;
|
|
6
6
|
}
|
|
7
|
-
let { format, value = $bindable(), disablePortal = false, showSchemaExplorer = false, selectFirst = false, defaultValue, editor = $bindable(undefined), onClear = undefined } = $props();
|
|
7
|
+
let { format, value = $bindable(), disablePortal = false, showSchemaExplorer = false, selectFirst = false, defaultValue, editor = $bindable(undefined), disabled = false, onClear = undefined } = $props();
|
|
8
8
|
function isResource() {
|
|
9
9
|
return isString(value) && value.length >= '$res:'.length;
|
|
10
10
|
}
|
|
@@ -21,6 +21,7 @@ function valueToPath() {
|
|
|
21
21
|
<S3ObjectPicker bind:value />
|
|
22
22
|
{:else if value == undefined || typeof value === 'string'}
|
|
23
23
|
<ResourcePicker
|
|
24
|
+
{disabled}
|
|
24
25
|
{selectFirst}
|
|
25
26
|
{disablePortal}
|
|
26
27
|
{onClear}
|
|
@@ -44,7 +45,7 @@ function valueToPath() {
|
|
|
44
45
|
{#await import('./JsonEditor.svelte')}
|
|
45
46
|
<Loader2 class="animate-spin" />
|
|
46
47
|
{:then Module}
|
|
47
|
-
<Module.default bind:editor code={JSON.stringify(value, null, 2)} bind:value />
|
|
48
|
+
<Module.default {disabled} bind:editor code={JSON.stringify(value, null, 2)} bind:value />
|
|
48
49
|
{/await}
|
|
49
50
|
{/if}
|
|
50
51
|
</div>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<script lang="ts">import {
|
|
1
|
+
<script lang="ts">import { createGrid } from 'ag-grid-community';
|
|
2
2
|
import 'ag-grid-community/styles/ag-grid.css';
|
|
3
3
|
import 'ag-grid-community/styles/ag-theme-alpine.css';
|
|
4
4
|
import { twMerge } from 'tailwind-merge';
|
|
@@ -225,7 +225,7 @@ run(() => {
|
|
|
225
225
|
{:else}
|
|
226
226
|
<TestConnection resourceType={resourceToEdit?.resource_type} {args} />
|
|
227
227
|
{/if}
|
|
228
|
-
{#if resource_type === 'git_repository' && $workspaceStore && $userStore?.is_admin}
|
|
228
|
+
{#if resource_type === 'git_repository' && $workspaceStore && ($userStore?.is_admin || $userStore?.is_super_admin)}
|
|
229
229
|
<GitHubAppIntegration
|
|
230
230
|
resourceType={resource_type}
|
|
231
231
|
{args}
|