windmill-components 1.52.0 → 1.55.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/components/ApiConnectForm.svelte +42 -7
- package/components/ApiConnectForm.svelte.d.ts +2 -1
- package/components/AppConnect.svelte +19 -11
- package/components/ArgInfo.svelte +6 -2
- package/components/ArgInput.svelte +9 -3
- package/components/ArgInput.svelte.d.ts +1 -0
- package/components/CenteredPage.svelte +1 -1
- package/components/CenteredPage.svelte.d.ts +6 -2
- package/components/CronInput.svelte +1 -1
- package/components/DisplayResult.svelte +39 -2
- package/components/Dropdown.svelte +73 -100
- package/components/Dropdown.svelte.d.ts +1 -3
- package/components/Editor.svelte +16 -5
- package/components/EditorBar.svelte +69 -63
- package/components/EditorBar.svelte.d.ts +1 -0
- package/components/FlowBuilder.svelte +74 -68
- package/components/FlowGraphViewer.svelte +136 -34
- package/components/FlowGraphViewer.svelte.d.ts +1 -0
- package/components/FlowJobResult.svelte +6 -1
- package/components/FlowJobResult.svelte.d.ts +2 -0
- package/components/FlowMetadata.svelte +4 -2
- package/components/FlowPreviewContent.svelte +10 -23
- package/components/FlowPreviewContent.svelte.d.ts +3 -0
- package/components/FlowStatusViewer.svelte +155 -30
- package/components/FlowStatusViewer.svelte.d.ts +4 -2
- package/components/FlowViewer.svelte +3 -3
- package/components/FlowViewer.svelte.d.ts +1 -0
- package/components/HighlightCode.svelte +1 -1
- package/components/HighlightCode.svelte.d.ts +1 -0
- package/components/IconedPath.svelte +16 -6
- package/components/IconedPath.svelte.d.ts +2 -0
- package/components/IconedResourceType.svelte +5 -2
- package/components/InputTransformForm.svelte +92 -73
- package/components/InviteGlobalUser.svelte +2 -2
- package/components/InviteGlobalUser.svelte.d.ts +1 -1
- package/components/InviteUser.svelte +20 -6
- package/components/InviteUser.svelte.d.ts +1 -1
- package/components/ItemPicker.svelte +38 -27
- package/components/ItemPicker.svelte.d.ts +2 -1
- package/components/JobStatus.svelte +19 -13
- package/components/LogViewer.svelte +11 -3
- package/components/LogViewer.svelte.d.ts +1 -0
- package/components/ModuleStatus.svelte +38 -0
- package/components/ModuleStatus.svelte.d.ts +18 -0
- package/components/ObjectResourceInput.svelte +8 -52
- package/components/ObjectResourceInput.svelte.d.ts +0 -1
- package/components/Path.svelte +2 -2
- package/components/Path.svelte.d.ts +1 -1
- package/components/Popover.svelte +7 -1
- package/components/Popover.svelte.d.ts +3 -1
- package/components/ResourceEditor.svelte +57 -29
- package/components/ResourcePicker.svelte +12 -2
- package/components/SchemaEditor.svelte +2 -1
- package/components/SchemaForm.svelte +2 -1
- package/components/SchemaForm.svelte.d.ts +1 -0
- package/components/SchemaModal.svelte +11 -10
- package/components/ScriptBuilder.svelte +207 -192
- package/components/ScriptBuilder.svelte.d.ts +1 -1
- package/components/ScriptEditor.svelte +49 -45
- package/components/ScriptEditor.svelte.d.ts +1 -0
- package/components/ScriptPicker.svelte.d.ts +1 -1
- package/components/ScriptSchema.svelte +11 -30
- package/components/ScriptSchema.svelte.d.ts +0 -1
- package/components/SharedBadge.svelte +2 -3
- package/components/SimpleEditor.svelte +6 -7
- package/components/SimpleEditor.svelte.d.ts +1 -0
- package/components/Star.svelte +2 -2
- package/components/SuperadminSettings.svelte +9 -38
- package/components/TableSimple.svelte +1 -1
- package/components/TestJobLoader.svelte +20 -8
- package/components/ToggleHubWorkspace.svelte +16 -0
- package/components/ToggleHubWorkspace.svelte.d.ts +16 -0
- package/components/Tooltip.svelte.d.ts +1 -1
- package/components/VariableEditor.svelte +22 -9
- package/components/apps/CreateApp.svelte +5 -2
- package/components/apps/CreateApp.svelte.d.ts +1 -1
- package/components/apps/components/DisplayComponent.svelte +7 -14
- package/components/apps/components/DisplayComponent.svelte.d.ts +3 -2
- package/components/apps/components/buttons/AppButton.svelte +34 -27
- package/components/apps/components/buttons/AppButton.svelte.d.ts +6 -6
- package/components/apps/components/dataDisplay/AppBarChart.svelte +33 -9
- package/components/apps/components/dataDisplay/AppBarChart.svelte.d.ts +3 -5
- package/components/apps/components/dataDisplay/AppPieChart.svelte +33 -12
- package/components/apps/components/dataDisplay/AppPieChart.svelte.d.ts +3 -5
- package/components/apps/components/dataDisplay/AppTable.svelte +27 -30
- package/components/apps/components/dataDisplay/AppTable.svelte.d.ts +4 -8
- package/components/apps/components/dataDisplay/AppText.svelte +16 -9
- package/components/apps/components/dataDisplay/AppText.svelte.d.ts +3 -2
- package/components/apps/components/dataDisplay/app.md +49 -0
- package/components/apps/components/form/AppForm.svelte +50 -0
- package/components/apps/components/form/AppForm.svelte.d.ts +25 -0
- package/components/apps/components/helpers/AlignWrapper.svelte +2 -1
- package/components/apps/components/helpers/AlignWrapper.svelte.d.ts +1 -0
- package/components/apps/components/helpers/DebouncedInput.svelte +9 -1
- package/components/apps/components/helpers/DebouncedInput.svelte.d.ts +2 -1
- package/components/apps/components/helpers/InputValue.svelte +15 -6
- package/components/apps/components/helpers/InputValue.svelte.d.ts +2 -2
- package/components/apps/components/helpers/NonRunnableComponent.svelte +20 -0
- package/components/apps/components/helpers/NonRunnableComponent.svelte.d.ts +21 -0
- package/components/apps/components/helpers/RunnableComponent.svelte +36 -30
- package/components/apps/components/helpers/RunnableComponent.svelte.d.ts +6 -7
- package/components/apps/components/helpers/RunnableWrapper.svelte +32 -0
- package/components/apps/components/helpers/RunnableWrapper.svelte.d.ts +26 -0
- package/components/apps/components/numberInputs/AppNumberInput.svelte +36 -0
- package/components/apps/components/numberInputs/AppNumberInput.svelte.d.ts +20 -0
- package/components/apps/components/selectInputs/AppCheckbox.svelte +4 -2
- package/components/apps/components/selectInputs/AppCheckbox.svelte.d.ts +2 -2
- package/components/apps/components/textInputs/AppTextInput.svelte +21 -0
- package/components/apps/components/textInputs/AppTextInput.svelte.d.ts +20 -0
- package/components/apps/editor/AppEditor.svelte +66 -55
- package/components/apps/editor/AppEditorHeader.svelte +4 -4
- package/components/apps/editor/AppPreview.svelte +42 -0
- package/components/apps/editor/AppPreview.svelte.d.ts +17 -0
- package/components/apps/editor/ComponentEditor.svelte +41 -20
- package/components/apps/editor/ComponentEditor.svelte.d.ts +2 -0
- package/components/apps/editor/ComponentHeader.svelte +28 -0
- package/components/apps/editor/ComponentHeader.svelte.d.ts +20 -0
- package/components/apps/editor/GridEditor.svelte +54 -5
- package/components/apps/editor/GridEditor.svelte.d.ts +1 -1
- package/components/apps/editor/RecomputeAllComponents.svelte +28 -0
- package/components/apps/editor/RecomputeAllComponents.svelte.d.ts +14 -0
- package/components/apps/editor/componentsPanel/ComponentList.svelte +94 -26
- package/components/apps/editor/componentsPanel/ComponentList.svelte.d.ts +1 -1
- package/components/apps/editor/componentsPanel/componentDefaultProps.d.ts +2 -6
- package/components/apps/editor/componentsPanel/componentDefaultProps.js +1 -5
- package/components/apps/editor/componentsPanel/componentStaticValues.d.ts +2 -0
- package/components/apps/editor/componentsPanel/componentStaticValues.js +3 -1
- package/components/apps/editor/componentsPanel/data.js +191 -76
- package/components/apps/editor/contextPanel/ContextPanel.svelte +56 -48
- package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +67 -0
- package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte.d.ts +55 -0
- package/components/apps/editor/settingsPanel/ComponentPanel.svelte +154 -129
- package/components/apps/editor/settingsPanel/ConnectedInputEditor.svelte +70 -0
- package/components/apps/editor/settingsPanel/ConnectedInputEditor.svelte.d.ts +17 -0
- package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +6 -6
- package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte.d.ts +2 -2
- package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +55 -87
- package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte.d.ts +3 -4
- package/components/apps/editor/settingsPanel/PickFlow.svelte +3 -2
- package/components/apps/editor/settingsPanel/PickFlow.svelte.d.ts +1 -1
- package/components/apps/editor/settingsPanel/PickInlineScript.svelte +3 -3
- package/components/apps/editor/settingsPanel/Recompute.svelte +46 -0
- package/components/apps/editor/settingsPanel/Recompute.svelte.d.ts +17 -0
- package/components/apps/editor/settingsPanel/StaticInputEditor.svelte +31 -14
- package/components/apps/editor/settingsPanel/StaticInputEditor.svelte.d.ts +3 -3
- package/components/apps/editor/settingsPanel/SubTypeEditor.svelte +17 -0
- package/components/apps/editor/settingsPanel/SubTypeEditor.svelte.d.ts +19 -0
- package/components/apps/editor/settingsPanel/TableActionLabel.svelte +10 -0
- package/components/apps/editor/settingsPanel/TableActionLabel.svelte.d.ts +17 -0
- package/components/apps/editor/settingsPanel/TableActions.svelte +13 -9
- package/components/apps/editor/settingsPanel/UserInputEditor.svelte.d.ts +1 -1
- package/components/apps/editor/settingsPanel/common/PanelSection.svelte +3 -2
- package/components/apps/editor/settingsPanel/common/PanelSection.svelte.d.ts +1 -0
- package/components/apps/editor/settingsPanel/mainInput/InlineScriptList.svelte +53 -0
- package/components/apps/editor/settingsPanel/mainInput/InlineScriptList.svelte.d.ts +21 -0
- package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte +98 -0
- package/components/apps/editor/settingsPanel/mainInput/RunnableSelector.svelte.d.ts +18 -0
- package/components/apps/editor/settingsPanel/mainInput/WorkspaceFlowList.svelte +81 -0
- package/components/apps/editor/settingsPanel/mainInput/WorkspaceFlowList.svelte.d.ts +20 -0
- package/components/apps/editor/settingsPanel/mainInput/WorkspaceScriptList.svelte +81 -0
- package/components/apps/editor/settingsPanel/mainInput/WorkspaceScriptList.svelte.d.ts +20 -0
- package/components/apps/inputType.d.ts +62 -0
- package/components/apps/inputType.js +1 -0
- package/components/apps/rx.d.ts +4 -4
- package/components/apps/rx.js +16 -4
- package/components/apps/types.d.ts +20 -54
- package/components/apps/utils.d.ts +11 -34
- package/components/apps/utils.js +54 -18
- package/components/common/alert/Alert.svelte +2 -1
- package/components/common/alert/Alert.svelte.d.ts +1 -0
- package/components/common/button/Button.svelte +1 -1
- package/components/common/confirmationModal/UnsavedConfirmationModal.svelte.d.ts +1 -1
- package/components/common/drawer/DrawerContent.svelte +23 -22
- package/components/common/drawer/DrawerContent.svelte.d.ts +1 -3
- package/components/common/kbd/Kbd.svelte.d.ts +2 -2
- package/components/common/languageIcons/LanguageIcon.svelte +4 -2
- package/components/common/languageIcons/LanguageIcon.svelte.d.ts +1 -1
- package/components/common/menu/Menu.svelte +0 -1
- package/components/common/menu/MenuItem.svelte.d.ts +6 -2
- package/components/common/popup/Popup.svelte +0 -11
- package/components/common/table/AppRow.svelte +42 -26
- package/components/common/table/AppRow.svelte.d.ts +1 -1
- package/components/common/table/FlowRow.svelte +54 -49
- package/components/common/table/LanguageBadge.svelte +1 -1
- package/components/common/table/Row.svelte +27 -16
- package/components/common/table/Row.svelte.d.ts +2 -1
- package/components/common/table/RowIcon.svelte +13 -8
- package/components/common/table/ScriptRow.svelte +65 -57
- package/components/common/table/Table.svelte.d.ts +6 -2
- package/components/flows/CreateActionsFlow.svelte +14 -41
- package/components/flows/CreateActionsFlow.svelte.d.ts +1 -1
- package/components/flows/common/FlowCardHeader.svelte +7 -8
- package/components/flows/content/BranchPredicateEditor.svelte +30 -0
- package/components/flows/content/BranchPredicateEditor.svelte.d.ts +23 -0
- package/components/flows/content/CapturePayload.svelte +12 -8
- package/components/flows/content/DynamicInputHelpBox.svelte.d.ts +1 -1
- package/components/flows/content/FlowBranchAllWrapper.svelte +2 -2
- package/components/flows/content/FlowBranchOneWrapper.svelte +4 -36
- package/components/flows/content/FlowBranchesAllWrapper.svelte +91 -0
- package/components/flows/content/FlowBranchesAllWrapper.svelte.d.ts +18 -0
- package/components/flows/content/FlowBranchesOneWrapper.svelte +88 -0
- package/components/flows/content/FlowBranchesOneWrapper.svelte.d.ts +18 -0
- package/components/flows/content/FlowFailureModule.svelte.d.ts +1 -1
- package/components/flows/content/FlowInput.svelte +1 -2
- package/components/flows/content/FlowInput.svelte.d.ts +1 -1
- package/components/flows/content/FlowInputs.svelte +28 -26
- package/components/flows/content/FlowInputsFlow.svelte +101 -0
- package/components/flows/content/FlowInputsFlow.svelte.d.ts +20 -0
- package/components/flows/content/FlowLoop.svelte +10 -3
- package/components/flows/content/FlowModuleComponent.svelte +46 -35
- package/components/flows/content/FlowModuleEarlyStop.svelte +4 -3
- package/components/flows/content/FlowModuleHeader.svelte +22 -21
- package/components/flows/content/FlowModuleHeader.svelte.d.ts +1 -0
- package/components/flows/content/FlowModuleSleep.svelte +69 -0
- package/components/flows/content/FlowModuleSleep.svelte.d.ts +18 -0
- package/components/flows/content/FlowModuleSuspend.svelte +5 -63
- package/components/flows/content/FlowModuleSuspend.svelte.d.ts +0 -1
- package/components/flows/content/FlowModuleWrapper.svelte +59 -35
- package/components/flows/content/FlowPathViewer.svelte +20 -0
- package/components/flows/content/FlowPathViewer.svelte.d.ts +17 -0
- package/components/flows/content/FlowSchedules.svelte.d.ts +1 -1
- package/components/flows/content/FlowSettings.svelte +8 -12
- package/components/flows/flowState.js +2 -2
- package/components/flows/flowStateUtils.d.ts +7 -3
- package/components/flows/flowStateUtils.js +29 -8
- package/components/flows/header/FlowImportExportMenu.svelte.d.ts +1 -1
- package/components/flows/header/FlowPreviewButtons.svelte +6 -2
- package/components/flows/header/FlowPreviewButtons.svelte.d.ts +1 -1
- package/components/flows/map/FlowErrorHandlerItem.svelte +5 -5
- package/components/flows/map/FlowErrorHandlerItem.svelte.d.ts +1 -1
- package/components/flows/map/FlowInputsItem.svelte.d.ts +1 -1
- package/components/flows/map/FlowModuleSchemaItem.svelte +30 -11
- package/components/flows/map/FlowModuleSchemaMap.svelte +26 -20
- package/components/flows/map/FlowModuleSchemaMap.svelte.d.ts +1 -1
- package/components/flows/map/FlowSettingsItem.svelte +1 -1
- package/components/flows/map/FlowSettingsItem.svelte.d.ts +1 -1
- package/components/flows/map/InsertModuleButton.svelte +20 -4
- package/components/flows/map/InsertModuleButton.svelte.d.ts +1 -1
- package/components/flows/map/MapItem.svelte +11 -5
- package/components/flows/pickers/FlowScriptPicker.svelte.d.ts +1 -1
- package/components/flows/pickers/PickHubFlow.svelte +72 -0
- package/components/flows/pickers/PickHubFlow.svelte.d.ts +20 -0
- package/components/flows/pickers/PickHubScript.svelte +65 -56
- package/components/flows/pickers/PickHubScript.svelte.d.ts +3 -1
- package/components/flows/pickers/PickScript.svelte +2 -2
- package/components/flows/pickers/WorkspaceScriptPicker.svelte +79 -19
- package/components/flows/pickers/WorkspaceScriptPicker.svelte.d.ts +5 -1
- package/components/flows/previousResults.d.ts +1 -0
- package/components/flows/previousResults.js +2 -1
- package/components/flows/propPicker/PropPickerWrapper.svelte +9 -1
- package/components/flows/utils.d.ts +0 -1
- package/components/flows/utils.js +6 -6
- package/components/graph/FlowGraph.svelte +120 -54
- package/components/graph/FlowGraph.svelte.d.ts +3 -2
- package/components/graph/model.d.ts +11 -0
- package/components/home/ItemsList.svelte +265 -0
- package/components/home/ItemsList.svelte.d.ts +16 -0
- package/components/home/ListFilters.svelte +37 -0
- package/components/home/ListFilters.svelte.d.ts +18 -0
- package/components/home/NoItemFound.svelte +6 -0
- package/components/home/NoItemFound.svelte.d.ts +23 -0
- package/components/icons/DatadogIcon.svelte +48 -0
- package/components/icons/DatadogIcon.svelte.d.ts +17 -0
- package/components/icons/FunkwhaleIcon.svelte +90 -0
- package/components/icons/FunkwhaleIcon.svelte.d.ts +17 -0
- package/components/icons/GdocsIcon.svelte +9 -0
- package/components/icons/GdocsIcon.svelte.d.ts +17 -0
- package/components/icons/HubspotIcon.svelte +9 -0
- package/components/icons/HubspotIcon.svelte.d.ts +17 -0
- package/components/icons/LinkedinIcon.svelte +9 -0
- package/components/icons/LinkedinIcon.svelte.d.ts +17 -0
- package/components/icons/Mail.svelte +9 -53
- package/components/icons/Mysql.svelte +8 -8
- package/components/icons/NextcloudIcon.svelte +9 -0
- package/components/icons/NextcloudIcon.svelte.d.ts +17 -0
- package/components/icons/QRCodeIcon.svelte +5 -0
- package/components/icons/QRCodeIcon.svelte.d.ts +16 -0
- package/components/icons/SendflakeIcon.svelte +15 -0
- package/components/icons/SendflakeIcon.svelte.d.ts +17 -0
- package/components/icons/StripeIcon.svelte +9 -0
- package/components/icons/StripeIcon.svelte.d.ts +17 -0
- package/components/icons/TelegramIcon.svelte +9 -0
- package/components/icons/TelegramIcon.svelte.d.ts +17 -0
- package/components/icons/WindmillIcon.svelte +3 -3
- package/components/icons/index.d.ts +23 -1
- package/components/icons/index.js +23 -1
- package/components/jobs/JobDetail.svelte +2 -2
- package/components/preview/FlowPreviewStatus.svelte +12 -23
- package/components/propertyPicker/PropPicker.svelte +16 -0
- package/components/propertyPicker/PropPickerResult.svelte +2 -3
- package/components/propertyPicker/WarningMessage.svelte.d.ts +6 -2
- package/components/scriptEditor/LogPanel.svelte +11 -4
- package/components/scripts/CreateActionsScript.svelte +13 -59
- package/components/scripts/CreateActionsScript.svelte.d.ts +1 -1
- package/components/sidebar/FavoriteMenu.svelte +52 -0
- package/components/sidebar/FavoriteMenu.svelte.d.ts +21 -0
- package/components/sidebar/SidebarContent.svelte +10 -19
- package/components/sidebar/SidebarContent.svelte.d.ts +0 -4
- package/components/sidebar/UserMenu.svelte +21 -4
- package/components/sidebar/WorkspaceMenu.svelte +6 -7
- package/editorUtils.d.ts +2 -0
- package/editorUtils.js +3 -1
- package/gen/core/OpenAPI.js +1 -1
- package/gen/index.d.ts +1 -0
- package/gen/models/CompletedJob.d.ts +1 -0
- package/gen/models/CreateWorkspace.d.ts +0 -1
- package/gen/models/EditWorkspaceUser.d.ts +2 -0
- package/gen/models/FlowModuleValue.d.ts +2 -1
- package/gen/models/FlowStatus.d.ts +3 -1
- package/gen/models/FlowStatusModule.d.ts +1 -1
- package/gen/models/FlowStatusModule.js +1 -1
- package/gen/models/Identity.d.ts +1 -0
- package/gen/models/ListableResource.d.ts +1 -0
- package/gen/models/ListableVariable.d.ts +1 -0
- package/gen/models/PathFlow.d.ts +6 -0
- package/gen/models/PathFlow.js +4 -0
- package/gen/models/PathScript.d.ts +1 -0
- package/gen/models/QueuedJob.d.ts +1 -0
- package/gen/models/Schedule.d.ts +2 -0
- package/gen/models/Usage.d.ts +1 -3
- package/gen/models/WorkspaceInvite.d.ts +1 -0
- package/gen/services/AppService.d.ts +7 -1
- package/gen/services/AppService.js +2 -1
- package/gen/services/JobService.d.ts +35 -5
- package/gen/services/JobService.js +14 -5
- package/gen/services/OauthService.d.ts +1 -1
- package/gen/services/ResourceService.d.ts +6 -2
- package/gen/services/ResourceService.js +2 -1
- package/gen/services/UserService.d.ts +6 -0
- package/gen/services/UserService.js +11 -0
- package/gen/services/WorkspaceService.d.ts +35 -0
- package/gen/services/WorkspaceService.js +41 -0
- package/package.json +56 -17
- package/script_helpers.d.ts +2 -1
- package/script_helpers.js +20 -3
- package/scripts.d.ts +1 -0
- package/scripts.js +8 -1
- package/stores.d.ts +11 -2
- package/stores.js +24 -6
- package/utils.d.ts +3 -1
- package/utils.js +11 -4
- package/components/ButtonAndDropdown.svelte +0 -25
- package/components/ButtonAndDropdown.svelte.d.ts +0 -23
- package/components/apps/components/index.d.ts +0 -22
- package/components/apps/components/index.js +0 -42
- package/components/apps/editor/settingsPanel/DynamicInputEditor.svelte +0 -64
- package/components/apps/editor/settingsPanel/DynamicInputEditor.svelte.d.ts +0 -17
- package/components/flows/content/FlowBranchesWrapper.svelte +0 -140
- package/components/flows/content/FlowBranchesWrapper.svelte.d.ts +0 -19
|
@@ -4,39 +4,51 @@ import { FlowStatusModule, RawScript } from '../../gen';
|
|
|
4
4
|
import { NODE, createIdGenerator, isNode, isLoop, isBranch } from '.';
|
|
5
5
|
import { defaultIfEmptyString, truncateRev } from '../../utils';
|
|
6
6
|
import { createEventDispatcher } from 'svelte';
|
|
7
|
-
import { numberToChars } from '../flows/utils';
|
|
7
|
+
import { charsToNumber, numberToChars } from '../flows/utils';
|
|
8
8
|
export let modules = [];
|
|
9
9
|
export let failureModule = undefined;
|
|
10
10
|
export let minHeight = 0;
|
|
11
11
|
export let notSelectable = false;
|
|
12
12
|
export let flowModuleStates = undefined;
|
|
13
13
|
let selectedNode = undefined;
|
|
14
|
-
|
|
14
|
+
let idGenerator;
|
|
15
15
|
let nestedNodes;
|
|
16
16
|
let nodes = [];
|
|
17
17
|
let edges = [];
|
|
18
18
|
let width, height;
|
|
19
|
+
let errorHandlers = {};
|
|
19
20
|
let dispatch = createEventDispatcher();
|
|
20
21
|
$: {
|
|
21
22
|
width && height && minHeight && selectedNode && flowModuleStates;
|
|
23
|
+
nodes = edges = [];
|
|
24
|
+
errorHandlers = {};
|
|
25
|
+
createGraph();
|
|
26
|
+
}
|
|
27
|
+
async function createGraph() {
|
|
22
28
|
if (modules) {
|
|
23
|
-
|
|
29
|
+
idGenerator = createIdGenerator();
|
|
24
30
|
}
|
|
25
31
|
else {
|
|
26
32
|
nodes = edges = [];
|
|
33
|
+
return;
|
|
27
34
|
}
|
|
28
|
-
}
|
|
29
|
-
function createGraph(modules, failureModule) {
|
|
30
35
|
nestedNodes = nodes = [];
|
|
31
|
-
nestedNodes.push(createVirtualNode(getParentIds(), '
|
|
36
|
+
nestedNodes.push(createVirtualNode(getParentIds(), 'Input'));
|
|
32
37
|
modules.forEach((m) => {
|
|
33
38
|
const item = getConvertedFlowModule(m);
|
|
34
39
|
item && nestedNodes.push(item);
|
|
35
40
|
});
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
41
|
+
nestedNodes.push(createVirtualNode(getParentIds(), 'Result'));
|
|
42
|
+
if (!flowModuleStates) {
|
|
43
|
+
if (failureModule)
|
|
44
|
+
nestedNodes.push(createErrorHandler(failureModule));
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
Object.entries(flowModuleStates ?? [])
|
|
48
|
+
.filter(([k, v]) => k.startsWith('failure'))
|
|
49
|
+
.forEach(([k, v]) => {
|
|
50
|
+
nestedNodes.push(createErrorHandler({ id: k }, v.parent_module));
|
|
51
|
+
});
|
|
40
52
|
}
|
|
41
53
|
const flatNodes = flattenNestedNodes(nestedNodes);
|
|
42
54
|
const layered = layoutNodes(flatNodes);
|
|
@@ -67,6 +79,9 @@ function getConvertedFlowModule(module, parent = undefined, edgeLabel = undefine
|
|
|
67
79
|
const branches = module.value.branches.map((b) => b.modules);
|
|
68
80
|
return flowModuleToBranch(module, branches, [], parent);
|
|
69
81
|
}
|
|
82
|
+
else if (type === 'flow') {
|
|
83
|
+
return flowModuleToNode(parentIds, module.id, module.summary || 'Flow ' + module.value.path, 'inline', module, undefined, edgeLabel);
|
|
84
|
+
}
|
|
70
85
|
return flowModuleToNode(parentIds, module.id, module.summary || 'Identity step', 'inline', module, undefined, edgeLabel);
|
|
71
86
|
}
|
|
72
87
|
function getParentIds(items = undefined) {
|
|
@@ -77,7 +92,8 @@ function getParentIds(items = undefined) {
|
|
|
77
92
|
if (!item)
|
|
78
93
|
return [];
|
|
79
94
|
if (isNode(item)) {
|
|
80
|
-
|
|
95
|
+
const id = numberToChars(item.id);
|
|
96
|
+
return [id];
|
|
81
97
|
}
|
|
82
98
|
else if (isLoop(item)) {
|
|
83
99
|
return getParentIds(item.items);
|
|
@@ -90,16 +106,20 @@ function getParentIds(items = undefined) {
|
|
|
90
106
|
function getStateColor(state) {
|
|
91
107
|
switch (state) {
|
|
92
108
|
case FlowStatusModule.type.SUCCESS:
|
|
93
|
-
return 'rgb(
|
|
109
|
+
return 'rgb(193, 255, 216)';
|
|
94
110
|
case FlowStatusModule.type.FAILURE:
|
|
95
111
|
return 'rgb(248 113 113)';
|
|
96
112
|
case FlowStatusModule.type.IN_PROGRESS:
|
|
97
|
-
return 'rgb(253
|
|
113
|
+
return 'rgb(253, 240, 176)';
|
|
114
|
+
case FlowStatusModule.type.WAITING_FOR_EVENTS:
|
|
115
|
+
return 'rgb(229, 176, 253)';
|
|
116
|
+
case FlowStatusModule.type.WAITING_FOR_EXECUTOR:
|
|
117
|
+
return 'rgb(255, 208, 193)';
|
|
98
118
|
default:
|
|
99
119
|
return '#fff';
|
|
100
120
|
}
|
|
101
121
|
}
|
|
102
|
-
function flowModuleToNode(parentIds, id, title, host, onClickDetail, lang, edgeLabel) {
|
|
122
|
+
function flowModuleToNode(parentIds, id, title, host, onClickDetail, lang, edgeLabel, header) {
|
|
103
123
|
const langImg = {
|
|
104
124
|
deno: '/icons/ts-lang.svg',
|
|
105
125
|
go: '/icons/go-lang.svg',
|
|
@@ -112,9 +132,9 @@ function flowModuleToNode(parentIds, id, title, host, onClickDetail, lang, edgeL
|
|
|
112
132
|
inline: ''
|
|
113
133
|
};
|
|
114
134
|
const wrapperWidth = lang ? 'w-[calc(100%-70px)]' : 'w-[calc(100%-50px)]';
|
|
115
|
-
|
|
135
|
+
let nodeId = id ?? numberToChars(idGenerator.next().value - 1);
|
|
116
136
|
return {
|
|
117
|
-
id:
|
|
137
|
+
id: charsToNumber(nodeId),
|
|
118
138
|
position: { x: -1, y: -1 },
|
|
119
139
|
data: {
|
|
120
140
|
html: `
|
|
@@ -126,23 +146,25 @@ function flowModuleToNode(parentIds, id, title, host, onClickDetail, lang, edgeL
|
|
|
126
146
|
${lang ? `<img src="${langImg[lang]}" class="grayscale">` : ''}
|
|
127
147
|
${host != 'inline' ? `<img src="${hostImg[host]}" class="grayscale">` : ''}
|
|
128
148
|
<span class="center-center font-semibold bg-indigo-100 text-indigo-800 rounded px-1 pb-[2px] ml-[2px]">
|
|
129
|
-
${
|
|
149
|
+
${nodeId}
|
|
130
150
|
</span>
|
|
131
151
|
</div>
|
|
132
152
|
</div>
|
|
153
|
+
<div class="text-2xs absolute -top-6 text-gray-600 truncate">${flowModuleStates?.[nodeId]?.scheduled_for ?? header ?? ''}<div>
|
|
133
154
|
`
|
|
134
155
|
},
|
|
135
156
|
host,
|
|
136
157
|
width: NODE.width,
|
|
137
158
|
height: NODE.height,
|
|
138
|
-
borderColor: selectedNode ==
|
|
139
|
-
bgColor: selectedNode ==
|
|
140
|
-
? '#f5f5f5'
|
|
141
|
-
: getStateColor(flowModuleStates?.[onClickDetail.id]),
|
|
159
|
+
borderColor: selectedNode == nodeId ? 'black' : '#999',
|
|
160
|
+
bgColor: selectedNode == nodeId ? '#f5f5f5' : getStateColor(flowModuleStates?.[nodeId]?.type),
|
|
142
161
|
parentIds,
|
|
143
162
|
clickCallback: (node) => {
|
|
144
163
|
if (!notSelectable) {
|
|
145
|
-
selectedNode =
|
|
164
|
+
selectedNode = nodeId;
|
|
165
|
+
}
|
|
166
|
+
if (onClickDetail.id == undefined) {
|
|
167
|
+
onClickDetail.id = nodeId;
|
|
146
168
|
}
|
|
147
169
|
dispatch('click', onClickDetail);
|
|
148
170
|
},
|
|
@@ -155,14 +177,16 @@ function flowModuleToLoop(modules, module, parent = undefined) {
|
|
|
155
177
|
const loop = {
|
|
156
178
|
type: 'loop',
|
|
157
179
|
items: [
|
|
158
|
-
flowModuleToNode(getParentIds(parent), module.id, module.summary || `For Loop: ${defaultIfEmptyString(expr ?? '', 'TBD')}`, 'inline', module, undefined
|
|
180
|
+
flowModuleToNode(getParentIds(parent), module.id, module.summary || `For Loop: ${defaultIfEmptyString(expr ?? '', 'TBD')}`, 'inline', module, undefined, undefined, flowModuleStates?.[module.id]?.iteration_total
|
|
181
|
+
? 'Iteration ' + flowModuleStates?.[module.id]?.iteration_total
|
|
182
|
+
: '')
|
|
159
183
|
]
|
|
160
184
|
};
|
|
161
185
|
modules.forEach((module) => {
|
|
162
186
|
const item = getConvertedFlowModule(module, loop.items);
|
|
163
187
|
item && loop.items.push(item);
|
|
164
188
|
});
|
|
165
|
-
loop.items.push(createVirtualNode(getParentIds(loop.items), `Collect iterations' results of For Loop ${module.id}
|
|
189
|
+
loop.items.push(createVirtualNode(getParentIds(loop.items), `Collect iterations' results of For Loop ${module.id}`, undefined, 1000));
|
|
166
190
|
return loop;
|
|
167
191
|
}
|
|
168
192
|
function flowModuleToBranch(module, branches, edgesLabel, parent = undefined) {
|
|
@@ -173,7 +197,7 @@ function flowModuleToBranch(module, branches, edgesLabel, parent = undefined) {
|
|
|
173
197
|
: 'Run one branch given predicate', 'inline', module, undefined),
|
|
174
198
|
items: []
|
|
175
199
|
};
|
|
176
|
-
const branchParent = [branch.node.id
|
|
200
|
+
const branchParent = [numberToChars(branch.node.id)];
|
|
177
201
|
if (branches.length == 0) {
|
|
178
202
|
branch.items.push([createVirtualNode(branchParent, 'No branches')]);
|
|
179
203
|
}
|
|
@@ -184,7 +208,7 @@ function flowModuleToBranch(module, branches, edgesLabel, parent = undefined) {
|
|
|
184
208
|
}
|
|
185
209
|
else {
|
|
186
210
|
modules.forEach((module) => {
|
|
187
|
-
const item = getConvertedFlowModule(module, items.length ? items : branch.node.id
|
|
211
|
+
const item = getConvertedFlowModule(module, items.length ? items : numberToChars(branch.node.id), edgesLabel[i]);
|
|
188
212
|
item && items.push(item);
|
|
189
213
|
});
|
|
190
214
|
}
|
|
@@ -211,7 +235,7 @@ function flattenNestedNodes(nestedNodes, nodes = []) {
|
|
|
211
235
|
return array;
|
|
212
236
|
}
|
|
213
237
|
function layoutNodes(nodes) {
|
|
214
|
-
const stratify = dagStratify().id(({ id }) =>
|
|
238
|
+
const stratify = dagStratify().id(({ id }) => numberToChars(id));
|
|
215
239
|
const dag = stratify(nodes);
|
|
216
240
|
const layout = sugiyama()
|
|
217
241
|
.decross(decrossOpt())
|
|
@@ -221,7 +245,7 @@ function layoutNodes(nodes) {
|
|
|
221
245
|
return {
|
|
222
246
|
nodes: dag.descendants().map((des) => ({
|
|
223
247
|
...des.data,
|
|
224
|
-
id:
|
|
248
|
+
id: des.data.id,
|
|
225
249
|
position: {
|
|
226
250
|
x: des.x ? des.x + (width - boxSize.width - NODE.width) / 2 : 0,
|
|
227
251
|
y: des.y || 0
|
|
@@ -234,24 +258,51 @@ function createEdges(nodes) {
|
|
|
234
258
|
const edges = [];
|
|
235
259
|
nodes.forEach((node) => {
|
|
236
260
|
node.parentIds.forEach((pid, i) => {
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
261
|
+
// skip virtual nodes such as collect result
|
|
262
|
+
if (errorHandlers[pid] && node.id < 900 && nodes.find((x) => x.id == errorHandlers[pid])) {
|
|
263
|
+
edges.push({
|
|
264
|
+
id: `e-${pid}-${node.id}`,
|
|
265
|
+
source: charsToNumber(pid),
|
|
266
|
+
target: errorHandlers[pid],
|
|
267
|
+
labelBgColor: 'white',
|
|
268
|
+
arrow: true,
|
|
269
|
+
animate: false,
|
|
270
|
+
noHandle: false,
|
|
271
|
+
label: node.edgeLabel
|
|
272
|
+
// type: 'smoothstep'
|
|
273
|
+
});
|
|
274
|
+
edges.push({
|
|
275
|
+
id: `e-${pid}-${node.id}`,
|
|
276
|
+
source: errorHandlers[pid],
|
|
277
|
+
target: node.id,
|
|
278
|
+
labelBgColor: 'white',
|
|
279
|
+
arrow: true,
|
|
280
|
+
animate: false,
|
|
281
|
+
noHandle: false,
|
|
282
|
+
label: node.edgeLabel
|
|
283
|
+
// type: 'smoothstep'
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
else {
|
|
287
|
+
edges.push({
|
|
288
|
+
id: `e-${pid}-${node.id}`,
|
|
289
|
+
source: charsToNumber(pid),
|
|
290
|
+
target: node.id,
|
|
291
|
+
labelBgColor: 'white',
|
|
292
|
+
arrow: true,
|
|
293
|
+
animate: false,
|
|
294
|
+
noHandle: false,
|
|
295
|
+
label: node.edgeLabel
|
|
296
|
+
// type: 'smoothstep'
|
|
297
|
+
});
|
|
298
|
+
}
|
|
248
299
|
});
|
|
249
300
|
});
|
|
250
301
|
return edges;
|
|
251
302
|
}
|
|
252
|
-
function createVirtualNode(parentIds, label, edgesLabel) {
|
|
303
|
+
function createVirtualNode(parentIds, label, edgesLabel, offset) {
|
|
253
304
|
return {
|
|
254
|
-
id: idGenerator.next().value,
|
|
305
|
+
id: -idGenerator.next().value - 1 + (offset ?? 0),
|
|
255
306
|
position: { x: -1, y: -1 },
|
|
256
307
|
data: {
|
|
257
308
|
html: `
|
|
@@ -262,38 +313,53 @@ function createVirtualNode(parentIds, label, edgesLabel) {
|
|
|
262
313
|
},
|
|
263
314
|
width: NODE.width,
|
|
264
315
|
height: NODE.height,
|
|
265
|
-
borderColor: '#999',
|
|
266
|
-
bgColor: '#d4e4ff',
|
|
267
|
-
parentIds
|
|
316
|
+
borderColor: selectedNode == label ? 'black' : '#999',
|
|
317
|
+
bgColor: selectedNode == label ? '#f5f5f5' : '#d4e4ff',
|
|
318
|
+
parentIds,
|
|
319
|
+
clickCallback: (node) => {
|
|
320
|
+
if (!notSelectable) {
|
|
321
|
+
selectedNode = label;
|
|
322
|
+
}
|
|
323
|
+
dispatch('click', label);
|
|
324
|
+
}
|
|
268
325
|
};
|
|
269
326
|
}
|
|
270
|
-
function createErrorHandler(
|
|
327
|
+
function createErrorHandler(mod, parent_module) {
|
|
328
|
+
const nId = -idGenerator.next().value - 1 + 1100;
|
|
329
|
+
parent_module && (errorHandlers[parent_module] = nId);
|
|
271
330
|
return {
|
|
272
|
-
id:
|
|
331
|
+
id: nId,
|
|
273
332
|
position: { x: -1, y: -1 },
|
|
274
333
|
data: {
|
|
275
334
|
html: `
|
|
276
|
-
<div class="w-full
|
|
277
|
-
|
|
335
|
+
<div class="w-full flex justify-between items-center px-1">
|
|
336
|
+
<div class="text-left ellipsize text-2xs truncate">
|
|
337
|
+
Error Handler
|
|
338
|
+
</div>
|
|
339
|
+
<div class="flex items-center">
|
|
340
|
+
<span class="center-center font-semibold bg-indigo-100 text-indigo-800 rounded px-1 pb-[2px] ml-[2px]">
|
|
341
|
+
${mod.id}
|
|
342
|
+
</span>
|
|
343
|
+
</div>
|
|
278
344
|
</div>
|
|
279
345
|
`
|
|
280
346
|
},
|
|
281
347
|
width: NODE.width,
|
|
282
348
|
height: NODE.height,
|
|
283
|
-
bgColor: '
|
|
284
|
-
borderColor: '#999',
|
|
285
|
-
parentIds,
|
|
349
|
+
bgColor: selectedNode == mod.id ? '#f5f5f5' : getStateColor(flowModuleStates?.[mod.id]?.type),
|
|
350
|
+
borderColor: selectedNode == mod.id ? 'black' : '#999',
|
|
351
|
+
parentIds: parent_module ? [parent_module] : [],
|
|
286
352
|
clickCallback: (node) => {
|
|
287
353
|
if (!notSelectable) {
|
|
288
|
-
selectedNode =
|
|
354
|
+
selectedNode = mod.id;
|
|
289
355
|
}
|
|
290
|
-
dispatch('click',
|
|
356
|
+
dispatch('click', mod);
|
|
291
357
|
}
|
|
292
358
|
};
|
|
293
359
|
}
|
|
294
360
|
</script>
|
|
295
361
|
|
|
296
|
-
<div bind:clientWidth={width} class="w-full h-full overflow-hidden">
|
|
362
|
+
<div bind:clientWidth={width} class="w-full h-full overflow-hidden relative">
|
|
297
363
|
{#if width && height}
|
|
298
364
|
<Svelvet {nodes} {width} {edges} {height} bgColor="rgb(249 250 251)" />
|
|
299
365
|
{/if}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { SvelteComponentTyped } from "svelte";
|
|
2
|
-
import { type FlowModule
|
|
2
|
+
import { type FlowModule } from '../../gen';
|
|
3
|
+
import { type GraphModuleState } from '.';
|
|
3
4
|
declare const __propDef: {
|
|
4
5
|
props: {
|
|
5
6
|
modules?: FlowModule[] | undefined;
|
|
6
7
|
failureModule?: FlowModule | undefined;
|
|
7
8
|
minHeight?: number | undefined;
|
|
8
9
|
notSelectable?: boolean | undefined;
|
|
9
|
-
flowModuleStates?: Record<string,
|
|
10
|
+
flowModuleStates?: Record<string, GraphModuleState> | undefined;
|
|
10
11
|
};
|
|
11
12
|
events: {
|
|
12
13
|
click: CustomEvent<any>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { FlowStatusModule } from "../../gen";
|
|
1
2
|
import type { Node as SvelvetNode } from "svelvet";
|
|
2
3
|
export type ModuleHost = 'workspace' | 'inline' | 'hub';
|
|
3
4
|
export type Node = SvelvetNode & {
|
|
@@ -15,6 +16,16 @@ export type Branch = {
|
|
|
15
16
|
items: NestedNodes[];
|
|
16
17
|
};
|
|
17
18
|
export type GraphItem = Node | Loop | Branch;
|
|
19
|
+
export type GraphModuleState = {
|
|
20
|
+
type: FlowStatusModule.type;
|
|
21
|
+
logs?: string;
|
|
22
|
+
result?: any;
|
|
23
|
+
scheduled_for?: string;
|
|
24
|
+
job_id?: string;
|
|
25
|
+
parent_module?: string;
|
|
26
|
+
iteration_total?: number;
|
|
27
|
+
retries?: number;
|
|
28
|
+
};
|
|
18
29
|
export type NestedNodes = GraphItem[];
|
|
19
30
|
export declare function isNode(item: GraphItem | NestedNodes | undefined): item is Node;
|
|
20
31
|
export declare function isLoop(item: GraphItem | NestedNodes | undefined): item is Loop;
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
<script>import CenteredPage from '../CenteredPage.svelte';
|
|
2
|
+
import { AppService, FlowService, ListableApp, Script, ScriptService } from '../../gen';
|
|
3
|
+
import { superadmin, userStore, workspaceStore } from '../../stores';
|
|
4
|
+
import { Skeleton, ToggleButton, ToggleButtonGroup } from '../common';
|
|
5
|
+
import { canWrite } from '../../utils';
|
|
6
|
+
import ShareModal from '../ShareModal.svelte';
|
|
7
|
+
import { Code2, LayoutDashboard } from 'lucide-svelte';
|
|
8
|
+
export let filter = '';
|
|
9
|
+
import ScriptRow from '../common/table/ScriptRow.svelte';
|
|
10
|
+
import FlowRow from '../common/table/FlowRow.svelte';
|
|
11
|
+
import AppRow from '../common/table/AppRow.svelte';
|
|
12
|
+
import NoItemFound from './NoItemFound.svelte';
|
|
13
|
+
import ListFilters from './ListFilters.svelte';
|
|
14
|
+
import SearchItems from '../SearchItems.svelte';
|
|
15
|
+
import { Icon } from 'svelte-awesome';
|
|
16
|
+
import { faBarsStaggered } from '@fortawesome/free-solid-svg-icons';
|
|
17
|
+
let scripts;
|
|
18
|
+
let flows;
|
|
19
|
+
let apps;
|
|
20
|
+
let filteredItems = [];
|
|
21
|
+
let itemKind = 'all';
|
|
22
|
+
let shareModalScripts;
|
|
23
|
+
let shareModalFlows;
|
|
24
|
+
let loading = true;
|
|
25
|
+
async function loadScripts() {
|
|
26
|
+
const loadedScripts = await ScriptService.listScripts({
|
|
27
|
+
workspace: $workspaceStore,
|
|
28
|
+
perPage: 300
|
|
29
|
+
});
|
|
30
|
+
scripts = loadedScripts.map((script) => {
|
|
31
|
+
return {
|
|
32
|
+
canWrite: canWrite(script.path, script.extra_perms, $userStore) &&
|
|
33
|
+
script.workspace_id == $workspaceStore &&
|
|
34
|
+
!$userStore?.operator,
|
|
35
|
+
...script
|
|
36
|
+
};
|
|
37
|
+
});
|
|
38
|
+
loading = false;
|
|
39
|
+
}
|
|
40
|
+
async function loadFlows() {
|
|
41
|
+
flows = (await FlowService.listFlows({ workspace: $workspaceStore })).map((x) => {
|
|
42
|
+
return {
|
|
43
|
+
canWrite: canWrite(x.path, x.extra_perms, $userStore) &&
|
|
44
|
+
x.workspace_id == $workspaceStore &&
|
|
45
|
+
!$userStore?.operator,
|
|
46
|
+
...x
|
|
47
|
+
};
|
|
48
|
+
});
|
|
49
|
+
loading = false;
|
|
50
|
+
}
|
|
51
|
+
async function loadApps() {
|
|
52
|
+
apps = (await AppService.listApps({ workspace: $workspaceStore })).map((app) => {
|
|
53
|
+
return {
|
|
54
|
+
canWrite: canWrite(app.path, app.extra_perms, $userStore) &&
|
|
55
|
+
app.workspace_id == $workspaceStore &&
|
|
56
|
+
!$userStore?.operator,
|
|
57
|
+
...app
|
|
58
|
+
};
|
|
59
|
+
});
|
|
60
|
+
loading = false;
|
|
61
|
+
}
|
|
62
|
+
$: owners = Array.from(new Set(filteredItems?.map((x) => x.path.split('/').slice(0, 2).join('/')) ?? [])).sort();
|
|
63
|
+
let combinedItems = undefined;
|
|
64
|
+
$: combinedItems =
|
|
65
|
+
flows == undefined || scripts == undefined || apps == undefined
|
|
66
|
+
? undefined
|
|
67
|
+
: [
|
|
68
|
+
...flows.map((x) => ({
|
|
69
|
+
...x,
|
|
70
|
+
type: 'flow',
|
|
71
|
+
time: new Date(x.edited_at).getTime()
|
|
72
|
+
})),
|
|
73
|
+
...scripts.map((x) => ({
|
|
74
|
+
...x,
|
|
75
|
+
type: 'script',
|
|
76
|
+
time: new Date(x.created_at).getTime()
|
|
77
|
+
})),
|
|
78
|
+
...apps.map((x) => ({
|
|
79
|
+
...x,
|
|
80
|
+
type: 'app',
|
|
81
|
+
time: new Date(x.edited_at).getTime()
|
|
82
|
+
}))
|
|
83
|
+
].sort((a, b) => a.starred != b.starred ? (a.starred ? -1 : 1) : a.time - b.time > 0 ? -1 : 1);
|
|
84
|
+
$: preFilteredItems =
|
|
85
|
+
ownerFilter != undefined
|
|
86
|
+
? combinedItems?.filter((x) => x.path.startsWith(ownerFilter ?? '') && (x.type == itemKind || itemKind == 'all'))
|
|
87
|
+
: combinedItems?.filter((x) => x.type == itemKind || itemKind == 'all');
|
|
88
|
+
let ownerFilter = undefined;
|
|
89
|
+
$: {
|
|
90
|
+
if (($userStore || $superadmin) && $workspaceStore) {
|
|
91
|
+
loadScripts();
|
|
92
|
+
loadFlows();
|
|
93
|
+
loadApps();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const cmp = new Intl.Collator('en').compare;
|
|
97
|
+
const opts = {
|
|
98
|
+
sort: (info, haystack, needle) => {
|
|
99
|
+
let { idx, chars, terms, interLft2, interLft1,
|
|
100
|
+
// interRgt2,
|
|
101
|
+
// interRgt1,
|
|
102
|
+
start, intraIns, interIns } = info;
|
|
103
|
+
const sortResult = idx
|
|
104
|
+
.map((v, i) => i)
|
|
105
|
+
.sort((ia, ib) =>
|
|
106
|
+
// most contig chars matched
|
|
107
|
+
chars[ib] - chars[ia] ||
|
|
108
|
+
// least char intra-fuzz (most contiguous)
|
|
109
|
+
intraIns[ia] - intraIns[ib] ||
|
|
110
|
+
// most prefix bounds, boosted by full term matches
|
|
111
|
+
terms[ib] +
|
|
112
|
+
interLft2[ib] +
|
|
113
|
+
0.5 * interLft1[ib] -
|
|
114
|
+
(terms[ia] + interLft2[ia] + 0.5 * interLft1[ia]) ||
|
|
115
|
+
// highest density of match (least span)
|
|
116
|
+
// span[ia] - span[ib] ||
|
|
117
|
+
// highest density of match (least term inter-fuzz)
|
|
118
|
+
interIns[ia] - interIns[ib] ||
|
|
119
|
+
// earliest start of match
|
|
120
|
+
start[ia] - start[ib] ||
|
|
121
|
+
// alphabetic
|
|
122
|
+
cmp(haystack[idx[ia]], haystack[idx[ib]]) +
|
|
123
|
+
(preFilteredItems?.[idx[ib]]?.starred ? 100 : 0) -
|
|
124
|
+
(preFilteredItems?.[idx[ia]]?.starred ? 100 : 0));
|
|
125
|
+
return sortResult;
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
$: items = filter !== '' ? filteredItems : preFilteredItems;
|
|
129
|
+
function resetScroll() {
|
|
130
|
+
const element = document.getElementsByTagName('svelte-virtual-list-viewport');
|
|
131
|
+
const firstElement = element.item(0);
|
|
132
|
+
if (firstElement) {
|
|
133
|
+
firstElement.scrollTop = 0;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
$: items && resetScroll();
|
|
137
|
+
</script>
|
|
138
|
+
|
|
139
|
+
<SearchItems
|
|
140
|
+
{filter}
|
|
141
|
+
items={preFilteredItems}
|
|
142
|
+
bind:filteredItems
|
|
143
|
+
f={(x) => (x.summary ? x.summary + ' (' + x.path + ')' : x.path)}
|
|
144
|
+
{opts}
|
|
145
|
+
/>
|
|
146
|
+
|
|
147
|
+
<ShareModal
|
|
148
|
+
bind:this={shareModalScripts}
|
|
149
|
+
kind="script"
|
|
150
|
+
on:change={() => {
|
|
151
|
+
loadScripts()
|
|
152
|
+
}}
|
|
153
|
+
/>
|
|
154
|
+
|
|
155
|
+
<ShareModal
|
|
156
|
+
bind:this={shareModalFlows}
|
|
157
|
+
kind="flow"
|
|
158
|
+
on:change={() => {
|
|
159
|
+
loadFlows()
|
|
160
|
+
}}
|
|
161
|
+
/>
|
|
162
|
+
|
|
163
|
+
<CenteredPage>
|
|
164
|
+
<div class="flex flex-col md:flex-row gap-2 items-center sm:justify-between w-full">
|
|
165
|
+
<div>
|
|
166
|
+
<ToggleButtonGroup bind:selected={itemKind}>
|
|
167
|
+
<ToggleButton light position="left" value="all" size="sm">All</ToggleButton>
|
|
168
|
+
<ToggleButton light position="center" value="script" size="sm">
|
|
169
|
+
<div class="flex gap-1 items-center">
|
|
170
|
+
<Code2 size={16} />
|
|
171
|
+
Scripts
|
|
172
|
+
</div>
|
|
173
|
+
</ToggleButton>
|
|
174
|
+
<ToggleButton light position="center" value="flow" size="sm">
|
|
175
|
+
<div class="flex gap-1 items-center">
|
|
176
|
+
<Icon data={faBarsStaggered} scale={0.8} class="mr-1" />
|
|
177
|
+
Flows
|
|
178
|
+
</div>
|
|
179
|
+
</ToggleButton>
|
|
180
|
+
<ToggleButton light position="right" value="app" size="sm">
|
|
181
|
+
<div class="flex gap-1 items-center">
|
|
182
|
+
<LayoutDashboard size={16} />
|
|
183
|
+
Apps
|
|
184
|
+
</div>
|
|
185
|
+
</ToggleButton>
|
|
186
|
+
</ToggleButtonGroup>
|
|
187
|
+
</div>
|
|
188
|
+
|
|
189
|
+
<div class="relative text-gray-600 w-full">
|
|
190
|
+
<!-- svelte-ignore a11y-autofocus -->
|
|
191
|
+
<input
|
|
192
|
+
autofocus
|
|
193
|
+
placeholder="Search Scripts, Flows & Apps"
|
|
194
|
+
bind:value={filter}
|
|
195
|
+
class="bg-white !h-10 !px-4 !pr-10 !rounded-lg text-sm focus:outline-none"
|
|
196
|
+
/>
|
|
197
|
+
<button type="submit" class="absolute right-0 top-0 mt-3 mr-4">
|
|
198
|
+
<svg
|
|
199
|
+
class="h-4 w-4 fill-current"
|
|
200
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
201
|
+
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
202
|
+
version="1.1"
|
|
203
|
+
id="Capa_1"
|
|
204
|
+
x="0px"
|
|
205
|
+
y="0px"
|
|
206
|
+
viewBox="0 0 56.966 56.966"
|
|
207
|
+
style="enable-background:new 0 0 56.966 56.966;"
|
|
208
|
+
xml:space="preserve"
|
|
209
|
+
width="512px"
|
|
210
|
+
height="512px"
|
|
211
|
+
>
|
|
212
|
+
<path
|
|
213
|
+
d="M55.146,51.887L41.588,37.786c3.486-4.144,5.396-9.358,5.396-14.786c0-12.682-10.318-23-23-23s-23,10.318-23,23 s10.318,23,23,23c4.761,0,9.298-1.436,13.177-4.162l13.661,14.208c0.571,0.593,1.339,0.92,2.162,0.92 c0.779,0,1.518-0.297,2.079-0.837C56.255,54.982,56.293,53.08,55.146,51.887z M23.984,6c9.374,0,17,7.626,17,17s-7.626,17-17,17 s-17-7.626-17-17S14.61,6,23.984,6z"
|
|
214
|
+
/>
|
|
215
|
+
</svg>
|
|
216
|
+
</button>
|
|
217
|
+
</div>
|
|
218
|
+
</div>
|
|
219
|
+
|
|
220
|
+
<ListFilters bind:selectedFilter={ownerFilter} filters={owners} />
|
|
221
|
+
<div>
|
|
222
|
+
{#if filteredItems == undefined}
|
|
223
|
+
<div class="mt-4" />
|
|
224
|
+
<Skeleton layout={[[2], 1]} />
|
|
225
|
+
{#each new Array(6) as _}
|
|
226
|
+
<Skeleton layout={[[4], 0.5]} />
|
|
227
|
+
{/each}
|
|
228
|
+
{:else if filteredItems.length === 0}
|
|
229
|
+
<NoItemFound />
|
|
230
|
+
{:else}
|
|
231
|
+
<div class="border rounded-md divide-y divide-gray-200 mb-80">
|
|
232
|
+
<!-- <VirtualList {items} let:item bind:start bind:end> -->
|
|
233
|
+
{#each items ?? [] as item, i (item.type + '/' + item.path)}
|
|
234
|
+
{#if item.type == 'script'}
|
|
235
|
+
<ScriptRow
|
|
236
|
+
starred={item.starred ?? false}
|
|
237
|
+
marked={item.marked}
|
|
238
|
+
on:change={loadScripts}
|
|
239
|
+
script={item}
|
|
240
|
+
shareModal={shareModalScripts}
|
|
241
|
+
/>
|
|
242
|
+
{:else if item.type == 'flow'}
|
|
243
|
+
<FlowRow
|
|
244
|
+
starred={item.starred ?? false}
|
|
245
|
+
marked={item.marked}
|
|
246
|
+
on:change={loadFlows}
|
|
247
|
+
flow={item}
|
|
248
|
+
shareModal={shareModalFlows}
|
|
249
|
+
/>
|
|
250
|
+
{:else if item.type == 'app'}
|
|
251
|
+
<AppRow
|
|
252
|
+
starred={item.starred ?? false}
|
|
253
|
+
marked={item.marked}
|
|
254
|
+
on:change={loadApps}
|
|
255
|
+
app={item}
|
|
256
|
+
/>
|
|
257
|
+
{/if}
|
|
258
|
+
{/each}
|
|
259
|
+
<!-- </VirtualList> -->
|
|
260
|
+
</div>
|
|
261
|
+
<!-- <span class="text-xs">{pluralize(items?.length ?? 0, 'item')}</span>
|
|
262
|
+
<span class="text-xs">{`(${start} - ${end})`}</span> -->
|
|
263
|
+
{/if}
|
|
264
|
+
</div>
|
|
265
|
+
</CenteredPage>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
filter?: string | undefined;
|
|
5
|
+
};
|
|
6
|
+
events: {
|
|
7
|
+
[evt: string]: CustomEvent<any>;
|
|
8
|
+
};
|
|
9
|
+
slots: {};
|
|
10
|
+
};
|
|
11
|
+
export type ItemsListProps = typeof __propDef.props;
|
|
12
|
+
export type ItemsListEvents = typeof __propDef.events;
|
|
13
|
+
export type ItemsListSlots = typeof __propDef.slots;
|
|
14
|
+
export default class ItemsList extends SvelteComponentTyped<ItemsListProps, ItemsListEvents, ItemsListSlots> {
|
|
15
|
+
}
|
|
16
|
+
export {};
|