windmill-components 1.269.4 → 1.291.4
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/ata/apis.d.ts +8 -5
- package/package/ata/apis.js +20 -9
- package/package/ata/edgeCases.js +5 -1
- package/package/ata/index.d.ts +3 -3
- package/package/ata/index.js +51 -28
- package/package/common.d.ts +1 -0
- package/package/components/AddUser.svelte +15 -6
- package/package/components/ApiConnectForm.svelte +1 -1
- package/package/components/ArgEnum.svelte +1 -1
- package/package/components/ArgEnum.svelte.d.ts +1 -1
- package/package/components/ArgInfo.svelte +2 -1
- package/package/components/ArgInput.svelte +7 -6
- package/package/components/ArgInput.svelte.d.ts +1 -1
- package/package/components/ArrayTypeNarrowing.svelte +2 -0
- package/package/components/CenteredModal.svelte +5 -2
- package/package/components/ChangeInstanceUsername.svelte +123 -0
- package/package/components/ChangeInstanceUsername.svelte.d.ts +20 -0
- package/package/components/ContentSearch.svelte +3 -4
- package/package/components/ContentSearch.svelte.d.ts +0 -3
- package/package/components/DateTimeInput.svelte +73 -9
- package/package/components/DateTimeInput.svelte.d.ts +8 -1
- package/package/components/DefaultScripts.svelte +26 -0
- package/package/components/DefaultScripts.svelte.d.ts +14 -0
- package/package/components/DefaultScriptsInner.svelte +75 -0
- package/package/components/DefaultScriptsInner.svelte.d.ts +14 -0
- package/package/components/Dev.svelte +59 -17
- package/package/components/DisplayResult.svelte +73 -67
- package/package/components/DurationMs.svelte +9 -8
- package/package/components/DurationMs.svelte.d.ts +1 -0
- package/package/components/Editor.svelte +23 -7
- package/package/components/FieldHeader.svelte +7 -7
- package/package/components/FlowBuilder.svelte +24 -13
- package/package/components/FlowBuilder.svelte.d.ts +0 -3
- package/package/components/FlowLoopIterationPreview.svelte +6 -5
- package/package/components/FlowMetadata.svelte +6 -2
- package/package/components/FlowPreviewContent.svelte +5 -5
- package/package/components/FolderEditor.svelte +20 -39
- package/package/components/GroupEditor.svelte +1 -1
- package/package/components/HighlightCode.svelte +7 -5
- package/package/components/IconedResourceType.svelte +5 -3
- package/package/components/IconedResourceType.svelte.d.ts +21 -7
- package/package/components/InputTransformForm.svelte +6 -1
- package/package/components/InstanceSettings.svelte +29 -17
- package/package/components/InstanceSettings.svelte.d.ts +3 -0
- package/package/components/InviteGlobalUser.svelte +1 -1
- package/package/components/JobArgs.svelte +20 -7
- package/package/components/JobStatus.svelte +8 -2
- package/package/components/LightweightArgInput.svelte +30 -14
- package/package/components/LightweightSchemaForm.svelte +1 -0
- package/package/components/LogViewer.svelte +21 -6
- package/package/components/ModulePreview.svelte +19 -11
- package/package/components/ModulePreview.svelte.d.ts +3 -2
- package/package/components/ObjectResourceInput.svelte +2 -0
- package/package/components/ObjectResourceInput.svelte.d.ts +1 -0
- package/package/components/Password.svelte +5 -2
- package/package/components/Password.svelte.d.ts +1 -0
- package/package/components/Path.svelte +10 -11
- package/package/components/ResourcePicker.svelte +28 -9
- package/package/components/ResourcePicker.svelte.d.ts +1 -0
- package/package/components/RunChart.svelte +1 -0
- package/package/components/RunForm.svelte +9 -17
- package/package/components/RunFormAdvancedPopup.svelte +11 -12
- package/package/components/S3FilePicker.svelte +1 -0
- package/package/components/ScheduleEditorInner.svelte +10 -9
- package/package/components/ScheduleEditorInner.svelte.d.ts +2 -2
- package/package/components/SchemaEditor.svelte +12 -1
- package/package/components/SchemaForm.svelte +1 -2
- package/package/components/SchemaModal.svelte +2 -2
- package/package/components/ScriptBuilder.svelte +152 -79
- package/package/components/ScriptBuilder.svelte.d.ts +1 -1
- package/package/components/ScriptEditor.svelte +8 -9
- package/package/components/ScriptSchedules.svelte +99 -0
- package/package/components/ScriptSchedules.svelte.d.ts +20 -0
- package/package/components/ShareModal.svelte +1 -0
- package/package/components/StringTypeNarrowing.svelte +9 -3
- package/package/components/SuperadminSettings.svelte +114 -10
- package/package/components/TestJobLoader.svelte +8 -0
- package/package/components/TestJobLoader.svelte.d.ts +1 -0
- package/package/components/TimeAgo.svelte +2 -2
- package/package/components/TimelineBar.svelte +5 -2
- package/package/components/Toggle.svelte +5 -2
- package/package/components/Toggle.svelte.d.ts +1 -0
- package/package/components/Tooltip.svelte +13 -2
- package/package/components/Tooltip.svelte.d.ts +1 -0
- package/package/components/Uptodate.svelte +12 -6
- package/package/components/UserSettings.svelte +87 -73
- package/package/components/WorkerTagPicker.svelte +4 -2
- package/package/components/WorkflowTimeline.svelte +106 -0
- package/package/components/WorkflowTimeline.svelte.d.ts +18 -0
- package/package/components/WorkspaceGroup.svelte +1 -0
- package/package/components/apps/components/buttons/AppButton.svelte +9 -19
- package/package/components/apps/components/display/AppCustomComponent.svelte +2 -4
- package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte +246 -94
- package/package/components/apps/components/display/dbtable/AppDbExplorer.svelte.d.ts +0 -3
- package/package/components/apps/components/display/dbtable/DbExplorerCount.svelte +17 -5
- package/package/components/apps/components/display/dbtable/DbExplorerCount.svelte.d.ts +6 -2
- package/package/components/apps/components/display/dbtable/DeleteRow.svelte +6 -4
- package/package/components/apps/components/display/dbtable/DeleteRow.svelte.d.ts +3 -3
- package/package/components/apps/components/display/dbtable/InsertRow.svelte +55 -37
- package/package/components/apps/components/display/dbtable/InsertRow.svelte.d.ts +17 -1
- package/package/components/apps/components/display/dbtable/InsertRowRunnable.svelte +4 -3
- package/package/components/apps/components/display/dbtable/InsertRowRunnable.svelte.d.ts +2 -2
- package/package/components/apps/components/display/dbtable/UpdateCell.svelte +5 -4
- package/package/components/apps/components/display/dbtable/UpdateCell.svelte.d.ts +3 -3
- package/package/components/apps/components/display/dbtable/queries/count.d.ts +4 -0
- package/package/components/apps/components/display/dbtable/queries/count.js +140 -0
- package/package/components/apps/components/display/dbtable/queries/delete.d.ts +3 -0
- package/package/components/apps/components/display/dbtable/queries/delete.js +68 -0
- package/package/components/apps/components/display/dbtable/queries/insert.d.ts +5 -0
- package/package/components/apps/components/display/dbtable/queries/insert.js +121 -0
- package/package/components/apps/components/display/dbtable/queries/select.d.ts +7 -0
- package/package/components/apps/components/display/dbtable/queries/select.js +196 -0
- package/package/components/apps/components/display/dbtable/queries/update.d.ts +3 -0
- package/package/components/apps/components/display/dbtable/queries/update.js +75 -0
- package/package/components/apps/components/display/dbtable/utils.d.ts +79 -0
- package/package/components/apps/components/display/dbtable/utils.js +284 -309
- package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte +39 -19
- package/package/components/apps/components/display/table/AppAggridExplorerTable.svelte.d.ts +0 -2
- package/package/components/apps/components/display/table/AppAggridTable.svelte +4 -1
- package/package/components/apps/components/display/table/AppTable.svelte +4 -0
- package/package/components/apps/components/display/table/AppTable.svelte.d.ts +2 -2
- package/package/components/apps/components/display/table/utils.js +42 -0
- package/package/components/apps/components/helpers/InputValue.svelte +10 -8
- package/package/components/apps/components/helpers/InputValue.svelte.d.ts +1 -0
- package/package/components/apps/components/helpers/RefreshButton.svelte +1 -1
- package/package/components/apps/components/helpers/ResolveConfig.svelte +2 -0
- package/package/components/apps/components/helpers/RunnableComponent.svelte +6 -2
- package/package/components/apps/components/helpers/eval.d.ts +2 -2
- package/package/components/apps/components/helpers/eval.js +33 -11
- package/package/components/apps/components/inputs/AppCheckbox.svelte +4 -0
- package/package/components/apps/components/inputs/AppCheckbox.svelte.d.ts +1 -0
- package/package/components/apps/components/inputs/AppDateInput.svelte +2 -2
- package/package/components/apps/components/inputs/AppDateTimeInput.svelte +121 -0
- package/package/components/apps/components/inputs/AppDateTimeInput.svelte.d.ts +22 -0
- package/package/components/apps/components/inputs/AppSelect.svelte +5 -0
- package/package/components/apps/components/inputs/AppSelect.svelte.d.ts +1 -0
- package/package/components/apps/components/inputs/AppTimeInput.svelte +103 -0
- package/package/components/apps/components/inputs/AppTimeInput.svelte.d.ts +21 -0
- package/package/components/apps/components/layout/AppConditionalWrapper.svelte +0 -1
- package/package/components/apps/components/layout/AppDecisionTree.svelte +12 -0
- package/package/components/apps/components/layout/AppStepper.svelte +4 -2
- package/package/components/apps/editor/AppEditor.svelte +19 -4
- package/package/components/apps/editor/AppEditorHeader.svelte +42 -14
- package/package/components/apps/editor/AppEditorHeader.svelte.d.ts +2 -0
- package/package/components/apps/editor/AppTimeline.svelte +4 -4
- package/package/components/apps/editor/DecisionTreeDebug.svelte +1 -1
- package/package/components/apps/editor/DeploymentHistory.svelte +1 -1
- package/package/components/apps/editor/GridEditorMenu.svelte +3 -3
- package/package/components/apps/editor/RecomputeAllComponents.svelte +1 -1
- package/package/components/apps/editor/SettingsPanel.svelte +2 -0
- package/package/components/apps/editor/TabsDebug.svelte +2 -2
- package/package/components/apps/editor/appUtils.js +8 -0
- package/package/components/apps/editor/component/Component.svelte +21 -0
- package/package/components/apps/editor/component/components.d.ts +168 -9
- package/package/components/apps/editor/component/components.js +203 -10
- package/package/components/apps/editor/component/sets.js +2 -0
- package/package/components/apps/editor/componentsPanel/ComponentList.svelte +3 -3
- package/package/components/apps/editor/componentsPanel/ThemeList.svelte +1 -0
- package/package/components/apps/editor/componentsPanel/ThemeList.svelte.d.ts +2 -0
- package/package/components/apps/editor/componentsPanel/ThemeRow.svelte +8 -4
- package/package/components/apps/editor/componentsPanel/componentControlUtils.js +2 -0
- package/package/components/apps/editor/componentsPanel/quickStyleProperties.js +6 -0
- package/package/components/apps/editor/contextPanel/DebugPanel.svelte +178 -0
- package/package/components/apps/editor/contextPanel/DebugPanel.svelte.d.ts +14 -0
- package/package/components/apps/editor/inlineScriptsPanel/CacheTtlPopup.svelte +3 -1
- package/package/components/apps/editor/inlineScriptsPanel/EmptyInlineScript.svelte +9 -18
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditor.svelte +11 -16
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptEditorPanel.svelte +2 -2
- package/package/components/apps/editor/inlineScriptsPanel/InlineScriptHiddenRunnable.svelte +2 -2
- package/package/components/apps/editor/inlineScriptsPanel/RunButton.svelte +4 -12
- package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte +27 -4
- package/package/components/apps/editor/settingsPanel/ArrayStaticInputEditor.svelte.d.ts +3 -1
- package/package/components/apps/editor/settingsPanel/ComponentPanel.svelte +68 -28
- package/package/components/apps/editor/settingsPanel/DecisionTreeGraphEditor.svelte +1 -1
- package/package/components/apps/editor/settingsPanel/GridCondition.svelte +57 -43
- package/package/components/apps/editor/settingsPanel/GridTab.svelte +15 -12
- package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte +9 -3
- package/package/components/apps/editor/settingsPanel/InputsSpecEditor.svelte.d.ts +4 -0
- package/package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte +8 -0
- package/package/components/apps/editor/settingsPanel/InputsSpecsEditor.svelte.d.ts +2 -0
- package/package/components/apps/editor/settingsPanel/OneOfInputSpecsEditor.svelte +6 -0
- package/package/components/apps/editor/settingsPanel/OneOfInputSpecsEditor.svelte.d.ts +2 -0
- package/package/components/apps/editor/settingsPanel/Recompute.svelte +4 -5
- package/package/components/apps/editor/settingsPanel/Recompute.svelte.d.ts +3 -0
- package/package/components/apps/editor/settingsPanel/inputEditor/ColorInput.svelte +4 -2
- package/package/components/apps/editor/settingsPanel/inputEditor/DBTableSelect.svelte +42 -0
- package/package/components/apps/editor/settingsPanel/inputEditor/DBTableSelect.svelte.d.ts +19 -0
- package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte +24 -2
- package/package/components/apps/editor/settingsPanel/inputEditor/EvalV2InputEditor.svelte.d.ts +2 -0
- package/package/components/apps/editor/settingsPanel/inputEditor/StaticInputEditor.svelte +25 -15
- package/package/components/apps/editor/settingsPanel/script/BackgroundScriptSettings.svelte +1 -1
- package/package/components/apps/editor/settingsPanel/script/ComponentScriptSettings.svelte +1 -1
- package/package/components/apps/editor/settingsPanel/script/shared/ScriptSettingHeader.svelte +8 -1
- package/package/components/apps/editor/settingsPanel/script/shared/ScriptSettingHeader.svelte.d.ts +1 -0
- package/package/components/apps/editor/settingsPanel/script/shared/ScriptTriggers.svelte +13 -0
- package/package/components/apps/inputType.d.ts +2 -2
- package/package/components/apps/svelte-select/lib/Select.svelte +2 -1
- package/package/components/apps/types.d.ts +5 -3
- package/package/components/build_workers.js +9 -13
- package/package/components/common/button/Button.svelte +78 -36
- package/package/components/common/button/Button.svelte.d.ts +7 -0
- package/package/components/common/button/model.d.ts +0 -1
- package/package/components/common/button/model.js +0 -8
- package/package/components/common/calendarPicker/CalendarPicker.svelte +11 -37
- package/package/components/common/confirmationModal/ConfirmationModal.svelte +11 -10
- package/package/components/common/confirmationModal/UnsavedConfirmationModal.svelte +5 -12
- package/package/components/common/confirmationModal/UnsavedConfirmationModal.svelte.d.ts +0 -3
- package/package/components/common/table/ScriptRow.svelte +28 -1
- package/package/components/common/tabs/Tab.svelte +6 -4
- package/package/components/common/tabs/Tab.svelte.d.ts +1 -0
- package/package/components/common/toggleButton-v2/ToggleButtonGroup.svelte +4 -2
- package/package/components/copilot/IteratorGen.svelte +10 -5
- package/package/components/copilot/MetadataGen.svelte +6 -1
- package/package/components/copilot/PredicateGen.svelte +3 -4
- package/package/components/copilot/ScriptFix.svelte +1 -1
- package/package/components/copilot/StepGen.svelte +2 -1
- package/package/components/copilot/StepGen.svelte.d.ts +1 -0
- package/package/components/copilot/StepInputGen.svelte +13 -7
- package/package/components/copilot/StepInputsGen.svelte +12 -7
- package/package/components/copilot/lib.d.ts +1 -1
- package/package/components/copilot/lib.js +2 -2
- package/package/components/details/Menu.svelte +11 -6
- package/package/components/details/Menu.svelte.d.ts +1 -3
- package/package/components/details/WebhooksPanel.svelte +1 -1
- package/package/components/flows/content/FlowBranchesAllWrapper.svelte +11 -10
- package/package/components/flows/content/FlowBranchesOneWrapper.svelte +11 -9
- package/package/components/flows/content/FlowInputs.svelte +84 -238
- package/package/components/flows/content/FlowLoop.svelte +25 -16
- package/package/components/flows/content/FlowModuleComponent.svelte +17 -2
- package/package/components/flows/content/FlowModuleComponent.svelte.d.ts +1 -0
- package/package/components/flows/content/FlowModuleWrapper.svelte +5 -0
- package/package/components/flows/content/FlowSchedules.svelte +75 -1
- package/package/components/flows/content/FlowSettings.svelte +5 -0
- package/package/components/flows/content/SuspendDrawer.svelte +1 -1
- package/package/components/flows/flowStateUtils.d.ts +1 -1
- package/package/components/flows/flowStateUtils.js +2 -2
- package/package/components/flows/idUtils.js +12 -1
- package/package/components/flows/map/FlowModuleSchemaMap.svelte +2 -2
- package/package/components/flows/map/InsertModuleButton.svelte +1 -3
- package/package/components/flows/map/MapItem.svelte +1 -1
- package/package/components/flows/pickers/FlowScriptPicker.svelte.d.ts +1 -1
- package/package/components/flows/scheduleUtils.d.ts +2 -1
- package/package/components/flows/scheduleUtils.js +2 -1
- package/package/components/home/ItemsList.svelte +10 -9
- package/package/components/icons/AsanaIcon.svelte +5 -0
- package/package/components/icons/AsanaIcon.svelte.d.ts +17 -0
- package/package/components/icons/BitbucketIcon.svelte +19 -0
- package/package/components/icons/BitbucketIcon.svelte.d.ts +17 -0
- package/package/components/icons/CACertificate.svelte +7 -0
- package/package/components/icons/CACertificate.svelte.d.ts +17 -0
- package/package/components/icons/CurrencyApiIcon.svelte +24 -0
- package/package/components/icons/CurrencyApiIcon.svelte.d.ts +17 -0
- package/package/components/icons/DynatraceIcon.svelte +26 -0
- package/package/components/icons/DynatraceIcon.svelte.d.ts +17 -0
- package/package/components/icons/EdgeDbIcon.svelte +25 -0
- package/package/components/icons/EdgeDbIcon.svelte.d.ts +17 -0
- package/package/components/icons/GitIcon.svelte +7 -0
- package/package/components/icons/GitIcon.svelte.d.ts +17 -0
- package/package/components/icons/GoogleCloudIcon.svelte +20 -0
- package/package/components/icons/GoogleCloudIcon.svelte.d.ts +17 -0
- package/package/components/icons/IpinfoIcon.svelte +8 -0
- package/package/components/icons/IpinfoIcon.svelte.d.ts +17 -0
- package/package/components/icons/MSTeamsIcon.svelte +5 -0
- package/package/components/icons/MSTeamsIcon.svelte.d.ts +17 -0
- package/package/components/icons/MailgunIcon.svelte +11 -0
- package/package/components/icons/MailgunIcon.svelte.d.ts +17 -0
- package/package/components/icons/PushoverIcon.svelte +8 -0
- package/package/components/icons/PushoverIcon.svelte.d.ts +17 -0
- package/package/components/icons/QuickbooksIcon.svelte +5 -0
- package/package/components/icons/QuickbooksIcon.svelte.d.ts +17 -0
- package/package/components/icons/ResendIcon.svelte +7 -0
- package/package/components/icons/ResendIcon.svelte.d.ts +17 -0
- package/package/components/icons/TrelloIcon.svelte +5 -0
- package/package/components/icons/TrelloIcon.svelte.d.ts +17 -0
- package/package/components/icons/TwilioIcon.svelte +11 -0
- package/package/components/icons/TwilioIcon.svelte.d.ts +17 -0
- package/package/components/icons/ZendeskIcon.svelte +11 -0
- package/package/components/icons/ZendeskIcon.svelte.d.ts +17 -0
- package/package/components/icons/index.d.ts +36 -1
- package/package/components/icons/index.js +37 -2
- package/package/components/instanceSettings.js +38 -1
- package/package/components/jobs/JobPreview.svelte +4 -1
- package/package/components/runs/JobLoader.svelte +6 -4
- package/package/components/runs/JobPreview.svelte +15 -1
- package/package/components/runs/ManuelDatePicker.svelte +1 -1
- package/package/components/runs/NoWorkerWithTagWarning.svelte +5 -3
- package/package/components/runs/RunRow.svelte +5 -19
- package/package/components/runs/RunsFilter.svelte +1 -1
- package/package/components/runs/RunsTable.svelte +1 -1
- package/package/components/scriptEditor/LogPanel.svelte +12 -0
- package/package/components/settings/PremiumInfo.svelte +92 -31
- package/package/components/settings/WorkspaceUserSettings.svelte +42 -6
- package/package/components/sidebar/changelogs.js +20 -0
- package/package/components/table/AutoDataTable.svelte +18 -4
- package/package/consts.d.ts +0 -3
- package/package/consts.js +0 -3
- package/package/enterpriseUtils.d.ts +1 -0
- package/package/enterpriseUtils.js +17 -0
- package/package/gen/core/OpenAPI.js +1 -1
- package/package/gen/index.d.ts +5 -2
- package/package/gen/models/LargeFileStorage.d.ts +3 -1
- package/package/gen/models/LargeFileStorage.js +2 -0
- package/package/gen/models/User.d.ts +0 -2
- package/package/gen/models/UserUsage.d.ts +4 -0
- package/package/gen/models/WorkflowStatus.d.ts +6 -0
- package/package/gen/models/WorkflowStatusRecord.d.ts +2 -0
- package/package/gen/models/WorkflowStatusRecord.js +5 -0
- package/package/gen/models/WorkflowTask.d.ts +4 -0
- package/package/gen/models/WorkflowTask.js +5 -0
- package/package/gen/models/WorkspaceDefaultScripts.d.ts +5 -0
- package/package/gen/models/WorkspaceDefaultScripts.js +5 -0
- package/package/gen/services/AdminService.d.ts +6 -9
- package/package/gen/services/AdminService.js +6 -7
- package/package/gen/services/FolderService.d.ts +3 -2
- package/package/gen/services/JobService.d.ts +27 -2
- package/package/gen/services/JobService.js +22 -2
- package/package/gen/services/SettingService.d.ts +11 -0
- package/package/gen/services/SettingService.js +13 -0
- package/package/gen/services/UserService.d.ts +14 -9
- package/package/gen/services/UserService.js +20 -7
- package/package/gen/services/WorkspaceService.d.ts +62 -0
- package/package/gen/services/WorkspaceService.js +76 -0
- package/package/infer.d.ts +20 -1
- package/package/infer.js +39 -19
- package/package/script_helpers.d.ts +7 -6
- package/package/script_helpers.js +24 -7
- package/package/scripts.d.ts +11 -0
- package/package/scripts.js +38 -1
- package/package/stores.d.ts +2 -1
- package/package/stores.js +2 -0
- package/package/utils.d.ts +1 -1
- package/package/utils.js +3 -3
- package/package.json +3 -4
- package/package/components/common/confirmationModal/model.d.ts +0 -9
- package/package/components/common/confirmationModal/model.js +0 -1
- package/package/gen/models/NewUser.d.ts +0 -5
- package/package/gen/models/Usage.d.ts +0 -3
- /package/package/gen/models/{NewUser.js → UserUsage.js} +0 -0
- /package/package/gen/models/{Usage.js → WorkflowStatus.js} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script>import { GridApi, createGrid } from 'ag-grid-community';
|
|
2
|
-
import { isObject } from '../../../../../utils';
|
|
2
|
+
import { isObject, sendUserToast } from '../../../../../utils';
|
|
3
3
|
import { createEventDispatcher, getContext } from 'svelte';
|
|
4
4
|
import Alert from '../../../../common/alert/Alert.svelte';
|
|
5
5
|
import { deepEqual } from 'fast-equals';
|
|
@@ -9,7 +9,7 @@ import { twMerge } from 'tailwind-merge';
|
|
|
9
9
|
import { initCss } from '../../../utils';
|
|
10
10
|
import ResolveStyle from '../../helpers/ResolveStyle.svelte';
|
|
11
11
|
import { Button } from '../../../../common';
|
|
12
|
-
import { cellRendererFactory } from '
|
|
12
|
+
import { cellRendererFactory } from './utils';
|
|
13
13
|
import { Trash2 } from 'lucide-svelte';
|
|
14
14
|
// import 'ag-grid-community/dist/styles/ag-theme-alpine-dark.css'
|
|
15
15
|
export let id;
|
|
@@ -96,6 +96,11 @@ let api = undefined;
|
|
|
96
96
|
let eGui;
|
|
97
97
|
$: eGui && mountGrid();
|
|
98
98
|
function transformColumnDefs(columnDefs) {
|
|
99
|
+
const { isValid, errors } = validateColumnDefs(columnDefs);
|
|
100
|
+
if (!isValid) {
|
|
101
|
+
sendUserToast(`Invalid columnDefs: ${errors.join('\n')}`, true);
|
|
102
|
+
return [];
|
|
103
|
+
}
|
|
99
104
|
let r = columnDefs?.filter((x) => x && !x.ignored) ?? [];
|
|
100
105
|
if (allowDelete) {
|
|
101
106
|
r.push({
|
|
@@ -105,11 +110,13 @@ function transformColumnDefs(columnDefs) {
|
|
|
105
110
|
new Button({
|
|
106
111
|
target: c.eGui,
|
|
107
112
|
props: {
|
|
108
|
-
btnClasses: '
|
|
109
|
-
|
|
110
|
-
|
|
113
|
+
btnClasses: 'w-12',
|
|
114
|
+
wrapperClasses: 'flex justify-end items-center h-full',
|
|
115
|
+
color: 'light',
|
|
116
|
+
size: 'sm',
|
|
117
|
+
variant: 'contained',
|
|
111
118
|
iconOnly: true,
|
|
112
|
-
|
|
119
|
+
startIcon: { icon: Trash2 },
|
|
113
120
|
nonCaptureEvent: true
|
|
114
121
|
}
|
|
115
122
|
});
|
|
@@ -129,6 +136,19 @@ function transformColumnDefs(columnDefs) {
|
|
|
129
136
|
}
|
|
130
137
|
let firstRow = 0;
|
|
131
138
|
let lastRow = 0;
|
|
139
|
+
function validateColumnDefs(columnDefs) {
|
|
140
|
+
let isValid = true;
|
|
141
|
+
const errors = [];
|
|
142
|
+
// Validate each column definition
|
|
143
|
+
columnDefs.forEach((colDef, index) => {
|
|
144
|
+
// Check if 'field' property exists and is a non-empty string
|
|
145
|
+
if (!colDef.field || typeof colDef.field !== 'string' || colDef.field.trim() === '') {
|
|
146
|
+
isValid = false;
|
|
147
|
+
errors.push(`Column at index ${index} is missing a valid 'field' property.`);
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
return { isValid, errors };
|
|
151
|
+
}
|
|
132
152
|
function mountGrid() {
|
|
133
153
|
if (eGui) {
|
|
134
154
|
createGrid(eGui, {
|
|
@@ -141,6 +161,10 @@ function mountGrid() {
|
|
|
141
161
|
editable: resolvedConfig?.allEditable,
|
|
142
162
|
onCellValueChanged
|
|
143
163
|
},
|
|
164
|
+
infiniteInitialRowCount: 100,
|
|
165
|
+
cacheBlockSize: 100,
|
|
166
|
+
cacheOverflowSize: 10,
|
|
167
|
+
maxBlocksInCache: 20,
|
|
144
168
|
suppressColumnMoveAnimation: true,
|
|
145
169
|
rowSelection: resolvedConfig?.multipleSelectable ? 'multiple' : 'single',
|
|
146
170
|
rowMultiSelectWithClick: resolvedConfig?.multipleSelectable
|
|
@@ -179,7 +203,11 @@ function mountGrid() {
|
|
|
179
203
|
}
|
|
180
204
|
}
|
|
181
205
|
$: resolvedConfig && updateOptions();
|
|
182
|
-
|
|
206
|
+
let oldDatasource = datasource;
|
|
207
|
+
$: if (datasource && datasource != oldDatasource) {
|
|
208
|
+
oldDatasource = datasource;
|
|
209
|
+
api?.updateGridOptions({ datasource });
|
|
210
|
+
}
|
|
183
211
|
let extraConfig = resolvedConfig.extraConfig;
|
|
184
212
|
$: if (!deepEqual(extraConfig, resolvedConfig.extraConfig)) {
|
|
185
213
|
extraConfig = resolvedConfig.extraConfig;
|
|
@@ -219,10 +247,6 @@ function updateOptions() {
|
|
|
219
247
|
...(resolvedConfig?.extraConfig ?? {})
|
|
220
248
|
});
|
|
221
249
|
}
|
|
222
|
-
let runnableComponent;
|
|
223
|
-
export function recompute() {
|
|
224
|
-
runnableComponent?.runComponent();
|
|
225
|
-
}
|
|
226
250
|
</script>
|
|
227
251
|
|
|
228
252
|
{#each Object.keys(css ?? {}) as key (key)}
|
|
@@ -237,11 +261,7 @@ export function recompute() {
|
|
|
237
261
|
|
|
238
262
|
{#if Array.isArray(resolvedConfig.columnDefs) && resolvedConfig.columnDefs.every(isObject)}
|
|
239
263
|
<div
|
|
240
|
-
class={twMerge(
|
|
241
|
-
'border shadow-sm divide-y flex flex-col h-full',
|
|
242
|
-
css?.container?.class,
|
|
243
|
-
'wm-aggrid-container'
|
|
244
|
-
)}
|
|
264
|
+
class={twMerge('divide-y flex flex-col h-full', css?.container?.class, 'wm-aggrid-container')}
|
|
245
265
|
style={containerHeight ? `height: ${containerHeight}px;` : css?.container?.style}
|
|
246
266
|
bind:clientHeight
|
|
247
267
|
bind:clientWidth
|
|
@@ -257,10 +277,10 @@ export function recompute() {
|
|
|
257
277
|
>
|
|
258
278
|
<div bind:this={eGui} style:height="100%" />
|
|
259
279
|
</div>
|
|
280
|
+
<div class="flex gap-1 w-full justify-end text-sm text-secondary py-1"
|
|
281
|
+
>{firstRow}{'->'}{lastRow + 1} of {datasource?.rowCount} rows</div
|
|
282
|
+
>
|
|
260
283
|
</div>
|
|
261
|
-
<div class="flex gap-1 absolute bottom-1 right-2 text-sm text-secondary"
|
|
262
|
-
>{firstRow}{'->'}{lastRow + 1} of {datasource?.rowCount} rows</div
|
|
263
|
-
>
|
|
264
284
|
{:else if resolvedConfig.columnDefs != undefined}
|
|
265
285
|
<Alert title="Parsing issues" type="error" size="xs">
|
|
266
286
|
The columnDefs should be an array of objects, received:
|
|
@@ -17,7 +17,6 @@ declare const __propDef: {
|
|
|
17
17
|
outputs: Record<string, Output<any>>;
|
|
18
18
|
allowDelete: boolean;
|
|
19
19
|
clearRows?: (() => void) | undefined;
|
|
20
|
-
recompute?: (() => void) | undefined;
|
|
21
20
|
};
|
|
22
21
|
events: {
|
|
23
22
|
update: CustomEvent<any>;
|
|
@@ -32,6 +31,5 @@ export type AppAggridExplorerTableEvents = typeof __propDef.events;
|
|
|
32
31
|
export type AppAggridExplorerTableSlots = typeof __propDef.slots;
|
|
33
32
|
export default class AppAggridExplorerTable extends SvelteComponent<AppAggridExplorerTableProps, AppAggridExplorerTableEvents, AppAggridExplorerTableSlots> {
|
|
34
33
|
get clearRows(): () => void;
|
|
35
|
-
get recompute(): () => void;
|
|
36
34
|
}
|
|
37
35
|
export {};
|
|
@@ -103,7 +103,7 @@ function onCellValueChanged(event) {
|
|
|
103
103
|
column: event.colDef.field,
|
|
104
104
|
value: dataCell
|
|
105
105
|
});
|
|
106
|
-
result[event.node.
|
|
106
|
+
result[Number(event.node.data['__index'])][event.colDef.field] = dataCell;
|
|
107
107
|
let data = { ...result[event.node.rowIndex] };
|
|
108
108
|
outputs?.selectedRow?.set(data);
|
|
109
109
|
}
|
|
@@ -164,6 +164,9 @@ function mountGrid() {
|
|
|
164
164
|
onSelectionChanged(e.api);
|
|
165
165
|
resolvedConfig?.extraConfig?.['onSelectionChanged']?.(e);
|
|
166
166
|
},
|
|
167
|
+
onCellEditingStarted: (e) => {
|
|
168
|
+
e.api.getRowNode(e.data['__index'])?.setSelected(true);
|
|
169
|
+
},
|
|
167
170
|
onFilterChanged: (e) => {
|
|
168
171
|
outputs?.filters?.set(e.api.getFilterModel());
|
|
169
172
|
outputs?.displayedRowCount?.set(e.api.getDisplayedRowCount());
|
|
@@ -505,6 +505,7 @@ function updateCellValue(rowIndex, columnIndex, newCellValue) {
|
|
|
505
505
|
customCss={actionButton.customCss}
|
|
506
506
|
configuration={actionButton.configuration}
|
|
507
507
|
recomputeIds={actionButton.recomputeIds}
|
|
508
|
+
onToggle={actionButton.onToggle}
|
|
508
509
|
preclickAction={async () => {
|
|
509
510
|
toggleRow(row)
|
|
510
511
|
}}
|
|
@@ -521,6 +522,7 @@ function updateCellValue(rowIndex, columnIndex, newCellValue) {
|
|
|
521
522
|
customCss={actionButton.customCss}
|
|
522
523
|
configuration={actionButton.configuration}
|
|
523
524
|
recomputeIds={actionButton.recomputeIds}
|
|
525
|
+
onSelect={actionButton.onSelect}
|
|
524
526
|
preclickAction={async () => {
|
|
525
527
|
toggleRow(row)
|
|
526
528
|
}}
|
|
@@ -553,6 +555,7 @@ function updateCellValue(rowIndex, columnIndex, newCellValue) {
|
|
|
553
555
|
customCss={actionButton.customCss}
|
|
554
556
|
configuration={actionButton.configuration}
|
|
555
557
|
recomputeIds={actionButton.recomputeIds}
|
|
558
|
+
onToggle={actionButton.onToggle}
|
|
556
559
|
preclickAction={async () => {
|
|
557
560
|
toggleRow(row)
|
|
558
561
|
}}
|
|
@@ -569,6 +572,7 @@ function updateCellValue(rowIndex, columnIndex, newCellValue) {
|
|
|
569
572
|
customCss={actionButton.customCss}
|
|
570
573
|
configuration={actionButton.configuration}
|
|
571
574
|
recomputeIds={actionButton.recomputeIds}
|
|
575
|
+
onSelect={actionButton.onSelect}
|
|
572
576
|
preclickAction={async () => {
|
|
573
577
|
toggleRow(row)
|
|
574
578
|
}}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { SvelteComponent } from "svelte";
|
|
2
2
|
import type { BaseAppComponent, ComponentCustomCSS, RichConfigurations } from '../../../types';
|
|
3
3
|
import type { AppInput } from '../../../inputType';
|
|
4
|
-
import { type ButtonComponent } from '../../../editor/component';
|
|
4
|
+
import { type ButtonComponent, type CheckboxComponent, type SelectComponent } from '../../../editor/component';
|
|
5
5
|
declare const __propDef: {
|
|
6
6
|
props: {
|
|
7
7
|
id: string;
|
|
8
8
|
componentInput: AppInput | undefined;
|
|
9
9
|
configuration: RichConfigurations;
|
|
10
|
-
actionButtons: (BaseAppComponent & ButtonComponent)[];
|
|
10
|
+
actionButtons: (BaseAppComponent & (ButtonComponent | CheckboxComponent | SelectComponent))[];
|
|
11
11
|
initializing?: boolean | undefined;
|
|
12
12
|
customCss?: ComponentCustomCSS<'tablecomponent'> | undefined;
|
|
13
13
|
render: boolean;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Class for defining a cell renderer.
|
|
3
|
+
* If you don't need to define a separate class you could use cellRendererFactory
|
|
4
|
+
* to create a component with the column definitions.
|
|
5
|
+
*/
|
|
6
|
+
export class AbstractCellRenderer {
|
|
7
|
+
eGui;
|
|
8
|
+
value;
|
|
9
|
+
params;
|
|
10
|
+
constructor(parentElement = 'span') {
|
|
11
|
+
// create empty span (or other element) to place svelte component in
|
|
12
|
+
this.eGui = document.createElement(parentElement);
|
|
13
|
+
}
|
|
14
|
+
init(params) {
|
|
15
|
+
this.value = params.value;
|
|
16
|
+
this.createComponent(params);
|
|
17
|
+
this.eGui.addEventListener('click', () => params.onClick?.(params.data));
|
|
18
|
+
this.params = params;
|
|
19
|
+
}
|
|
20
|
+
getGui() {
|
|
21
|
+
return this.eGui;
|
|
22
|
+
}
|
|
23
|
+
refresh(params) {
|
|
24
|
+
this.value = params.value;
|
|
25
|
+
this.eGui.innerHTML = '';
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Creates a cell renderer using the given callback for how to initialise a svelte component.
|
|
31
|
+
* See AbstractCellRenderer.createComponent
|
|
32
|
+
* @param svelteComponent function for how to create the svelte component
|
|
33
|
+
* @returns
|
|
34
|
+
*/
|
|
35
|
+
export function cellRendererFactory(svelteComponent) {
|
|
36
|
+
class Renderer extends AbstractCellRenderer {
|
|
37
|
+
createComponent(params) {
|
|
38
|
+
svelteComponent(this, params);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return Renderer;
|
|
42
|
+
}
|
|
@@ -12,6 +12,7 @@ export let error = '';
|
|
|
12
12
|
export let key = '';
|
|
13
13
|
export let field = key;
|
|
14
14
|
export let onDemandOnly = false;
|
|
15
|
+
export let exportValueFunction = false;
|
|
15
16
|
const { componentControl, runnableComponents } = getContext('AppViewerContext');
|
|
16
17
|
const editorContext = getContext('AppEditorContext');
|
|
17
18
|
const iterContext = getContext('ListWrapperContext');
|
|
@@ -59,11 +60,7 @@ let timeout = undefined;
|
|
|
59
60
|
let firstDebounce = true;
|
|
60
61
|
const debounce_ms = 50;
|
|
61
62
|
export async function computeExpr(args) {
|
|
62
|
-
|
|
63
|
-
if (!deepEqual(nvalue, value)) {
|
|
64
|
-
value = nvalue;
|
|
65
|
-
}
|
|
66
|
-
return nvalue;
|
|
63
|
+
return await evalExpr(lastInput, args);
|
|
67
64
|
}
|
|
68
65
|
function debounce(cb) {
|
|
69
66
|
if (firstDebounce) {
|
|
@@ -91,6 +88,7 @@ $: lastInput && $worldStore && debounce(handleConnection);
|
|
|
91
88
|
const debounceTemplate = async () => {
|
|
92
89
|
let nvalue = await getValue(lastInput);
|
|
93
90
|
if (!deepEqual(nvalue, value)) {
|
|
91
|
+
// console.log('template')
|
|
94
92
|
value = nvalue;
|
|
95
93
|
}
|
|
96
94
|
};
|
|
@@ -113,6 +111,7 @@ const debounceEval = async (s) => {
|
|
|
113
111
|
if (!onDemandOnly) {
|
|
114
112
|
let nhash = typeof nvalue != 'object' ? nvalue : sum(nvalue);
|
|
115
113
|
if (lastExprHash != nhash) {
|
|
114
|
+
// console.log('eval changed', field, nvalue)
|
|
116
115
|
value = nvalue;
|
|
117
116
|
lastExprHash = nhash;
|
|
118
117
|
}
|
|
@@ -122,6 +121,7 @@ $: lastInput && lastInput.type == 'eval' && $stateId && $state && debounce2(debo
|
|
|
122
121
|
$: lastInput?.type == 'evalv2' && lastInput.expr && debounceEval('exprChanged');
|
|
123
122
|
$: lastInput?.type == 'templatev2' && lastInput.eval && debounceTemplate();
|
|
124
123
|
async function handleConnection() {
|
|
124
|
+
// console.log('handleCon')
|
|
125
125
|
if (lastInput?.type === 'connected') {
|
|
126
126
|
if (lastInput.connection) {
|
|
127
127
|
const { path, componentId } = lastInput.connection;
|
|
@@ -142,7 +142,8 @@ async function handleConnection() {
|
|
|
142
142
|
value = await evalExpr(lastInput);
|
|
143
143
|
}
|
|
144
144
|
else if (lastInput?.type == 'evalv2') {
|
|
145
|
-
|
|
145
|
+
// console.log('evalv2', onDemandOnly, field)
|
|
146
|
+
if (onDemandOnly && exportValueFunction) {
|
|
146
147
|
value = (args) => {
|
|
147
148
|
return evalExpr(lastInput, args);
|
|
148
149
|
};
|
|
@@ -189,7 +190,7 @@ async function evalExpr(input, args) {
|
|
|
189
190
|
return;
|
|
190
191
|
try {
|
|
191
192
|
const context = computeGlobalContext($worldStore, deepMergeWithPriority(fullContext, args ?? {}));
|
|
192
|
-
const r = await eval_like(input.expr, context,
|
|
193
|
+
const r = await eval_like(input.expr, context, $state, $mode == 'dnd', $componentControl, $worldStore, $runnableComponents, false);
|
|
193
194
|
error = '';
|
|
194
195
|
return r;
|
|
195
196
|
}
|
|
@@ -206,7 +207,7 @@ async function getValue(input) {
|
|
|
206
207
|
return;
|
|
207
208
|
if ((input.type === 'template' || input.type == 'templatev2') && isCodeInjection(input.eval)) {
|
|
208
209
|
try {
|
|
209
|
-
const r = await eval_like('`' + input.eval + '`', computeGlobalContext($worldStore, fullContext),
|
|
210
|
+
const r = await eval_like('`' + input.eval + '`', computeGlobalContext($worldStore, fullContext), $state, $mode == 'dnd', $componentControl, $worldStore, $runnableComponents, false);
|
|
210
211
|
error = '';
|
|
211
212
|
return r;
|
|
212
213
|
}
|
|
@@ -231,6 +232,7 @@ function onValueChange(newValue) {
|
|
|
231
232
|
// No connection
|
|
232
233
|
return;
|
|
233
234
|
}
|
|
235
|
+
// console.log('onValueChange', newValue, connection, previousConnectedValue)
|
|
234
236
|
previousConnectedValue = newValue;
|
|
235
237
|
let { path } = connection;
|
|
236
238
|
path = path.replace(/\[(\d+)\]/g, '.$1').replace(/\[\"(.*)\"\]/g, '.$1');
|
|
@@ -10,6 +10,7 @@ declare const __propDef: {
|
|
|
10
10
|
key?: string | undefined;
|
|
11
11
|
field?: string | undefined;
|
|
12
12
|
onDemandOnly?: boolean | undefined;
|
|
13
|
+
exportValueFunction?: boolean | undefined;
|
|
13
14
|
computeExpr?: ((args?: Record<string, any>) => Promise<any>) | undefined;
|
|
14
15
|
};
|
|
15
16
|
events: {
|
|
@@ -11,7 +11,7 @@ async function refresh() {
|
|
|
11
11
|
<button
|
|
12
12
|
on:pointerdown|preventDefault|stopPropagation
|
|
13
13
|
on:click|preventDefault|stopPropagation={refresh}
|
|
14
|
-
class="center-center p-1 rounded border bg-surface/60 hover:bg-
|
|
14
|
+
class="center-center p-1 rounded border bg-surface/60 hover:bg-surface-hover z-10"
|
|
15
15
|
>
|
|
16
16
|
<RefreshCw class={loading ? 'animate-spin' : ''} size={16} />
|
|
17
17
|
</button>
|
|
@@ -25,6 +25,7 @@ function handleSelected(selected) {
|
|
|
25
25
|
bind:value={resolvedConfig.configuration[choice][nestedKey]}
|
|
26
26
|
onDemandOnly={initialConfig?.type == 'oneOf' &&
|
|
27
27
|
initialConfig?.configuration?.[choice]?.[nestedKey]?.onDemandOnly}
|
|
28
|
+
exportValueFunction
|
|
28
29
|
/>
|
|
29
30
|
{/if}
|
|
30
31
|
{/each}
|
|
@@ -37,5 +38,6 @@ function handleSelected(selected) {
|
|
|
37
38
|
onDemandOnly={(initialConfig?.type == 'static' || initialConfig?.type == 'evalv2') &&
|
|
38
39
|
initialConfig?.onDemandOnly}
|
|
39
40
|
bind:value={resolvedConfig}
|
|
41
|
+
exportValueFunction
|
|
40
42
|
/>
|
|
41
43
|
{/if}
|
|
@@ -75,6 +75,7 @@ $: if (!deepEqual(currentStaticValues, lazyStaticValues)) {
|
|
|
75
75
|
lazyStaticValues = currentStaticValues;
|
|
76
76
|
refreshIfAutoRefresh('static changed');
|
|
77
77
|
}
|
|
78
|
+
// $: console.log(runnableInputValues)
|
|
78
79
|
$: (runnableInputValues || extraQueryParams || args) &&
|
|
79
80
|
resultJobLoader &&
|
|
80
81
|
refreshIfAutoRefresh('arg changed');
|
|
@@ -173,7 +174,7 @@ async function executeComponent(noToast = false, inlineScriptOverride, setRunnab
|
|
|
173
174
|
iter: iterContext ? $iterContext : undefined,
|
|
174
175
|
row: rowContext ? $rowContext : undefined,
|
|
175
176
|
group: groupContext ? $groupContext : undefined
|
|
176
|
-
}),
|
|
177
|
+
}), $state, isEditor, $componentControl, $worldStore, $runnableComponents, true);
|
|
177
178
|
await setResult(r, job, setRunnableJobEditorPanel);
|
|
178
179
|
$state = $state;
|
|
179
180
|
}
|
|
@@ -274,6 +275,8 @@ async function executeComponent(noToast = false, inlineScriptOverride, setRunnab
|
|
|
274
275
|
let error = e.body ?? e.message;
|
|
275
276
|
updateResult({ error });
|
|
276
277
|
$errorByComponent[id] = { error };
|
|
278
|
+
donePromise?.({ error });
|
|
279
|
+
sendUserToast(error, true);
|
|
277
280
|
loading = false;
|
|
278
281
|
}
|
|
279
282
|
}
|
|
@@ -337,7 +340,7 @@ async function runTransformer(res) {
|
|
|
337
340
|
iter: iterContext ? $iterContext : undefined,
|
|
338
341
|
row: rowContext ? $rowContext : undefined,
|
|
339
342
|
result: res
|
|
340
|
-
}),
|
|
343
|
+
}), $state, isEditor, $componentControl, $worldStore, $runnableComponents, true);
|
|
341
344
|
return transformerResult;
|
|
342
345
|
}
|
|
343
346
|
catch (err) {
|
|
@@ -450,6 +453,7 @@ function updateBgRuns(loading) {
|
|
|
450
453
|
{id}
|
|
451
454
|
input={fields[key]}
|
|
452
455
|
bind:value={runnableInputValues[key]}
|
|
456
|
+
onDemandOnly={v.onDemandOnly}
|
|
453
457
|
/>
|
|
454
458
|
{/if}
|
|
455
459
|
{/each}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { World } from '../../rx';
|
|
2
2
|
export declare function computeGlobalContext(world: World | undefined, extraContext?: any): any;
|
|
3
|
-
export declare function eval_like(text: string, context: {} | undefined,
|
|
3
|
+
export declare function eval_like(text: string, context: {} | undefined, state: Record<string, any>, editor: boolean, controlComponents: Record<string, {
|
|
4
4
|
setTab?: (index: number) => void;
|
|
5
5
|
agGrid?: {
|
|
6
6
|
api: any;
|
|
@@ -18,4 +18,4 @@ export declare function eval_like(text: string, context: {} | undefined, noRetur
|
|
|
18
18
|
clearFiles?: () => void;
|
|
19
19
|
}>, worldStore: World | undefined, runnableComponents: Record<string, {
|
|
20
20
|
cb?: (() => void)[];
|
|
21
|
-
}
|
|
21
|
+
}>, noReturn: boolean): Promise<any>;
|
|
@@ -13,23 +13,33 @@ export function computeGlobalContext(world, extraContext = {}) {
|
|
|
13
13
|
...extraContext
|
|
14
14
|
};
|
|
15
15
|
}
|
|
16
|
-
function create_context_function_template(eval_string,
|
|
16
|
+
function create_context_function_template(eval_string, contextKeys, noReturn) {
|
|
17
|
+
let hasReturnAsLastLine = noReturn || eval_string.split('\n').some((x) => x.startsWith('return '));
|
|
17
18
|
return `
|
|
18
19
|
return async function (context, state, goto, setTab, recompute, getAgGrid, setValue, setSelectedIndex, openModal, closeModal, open, close, validate, invalidate, validateAll, clearFiles, showToast) {
|
|
19
20
|
"use strict";
|
|
20
|
-
${
|
|
21
|
-
? `let ${
|
|
21
|
+
${contextKeys && contextKeys.length > 0
|
|
22
|
+
? `let ${contextKeys.map((key) => ` ${key} = context['${key}']`)};`
|
|
22
23
|
: ``}
|
|
23
|
-
${
|
|
24
|
-
?
|
|
25
|
-
:
|
|
24
|
+
${hasReturnAsLastLine
|
|
25
|
+
? eval_string
|
|
26
|
+
: `
|
|
27
|
+
return ${eval_string.startsWith('return ') ? eval_string.substring(7) : eval_string}`}
|
|
28
|
+
|
|
26
29
|
}
|
|
27
30
|
`;
|
|
28
31
|
}
|
|
29
|
-
|
|
30
|
-
|
|
32
|
+
let functorCache = {};
|
|
33
|
+
function make_context_evaluator(eval_string, contextKeys, noReturn) {
|
|
34
|
+
let cacheKey = hashCode(JSON.stringify({ eval_string, contextKeys, noReturn }));
|
|
35
|
+
if (functorCache[cacheKey]) {
|
|
36
|
+
return functorCache[cacheKey];
|
|
37
|
+
}
|
|
38
|
+
let template = create_context_function_template(eval_string, contextKeys, noReturn);
|
|
31
39
|
let functor = Function(template);
|
|
32
|
-
|
|
40
|
+
let r = functor();
|
|
41
|
+
functorCache[cacheKey] = r;
|
|
42
|
+
return r;
|
|
33
43
|
}
|
|
34
44
|
function isSerializable(obj) {
|
|
35
45
|
var isNestedSerializable;
|
|
@@ -60,7 +70,18 @@ function isSerializable(obj) {
|
|
|
60
70
|
}
|
|
61
71
|
return true;
|
|
62
72
|
}
|
|
63
|
-
|
|
73
|
+
function hashCode(s) {
|
|
74
|
+
var hash = 0, i, chr;
|
|
75
|
+
if (s.length === 0)
|
|
76
|
+
return hash;
|
|
77
|
+
for (i = 0; i < s.length; i++) {
|
|
78
|
+
chr = s.charCodeAt(i);
|
|
79
|
+
hash = (hash << 5) - hash + chr;
|
|
80
|
+
hash |= 0; // Convert to 32bit integer
|
|
81
|
+
}
|
|
82
|
+
return hash;
|
|
83
|
+
}
|
|
84
|
+
export async function eval_like(text, context = {}, state, editor, controlComponents, worldStore, runnableComponents, noReturn) {
|
|
64
85
|
const proxiedState = new Proxy(state, {
|
|
65
86
|
set(target, key, value) {
|
|
66
87
|
if (typeof key !== 'string') {
|
|
@@ -77,7 +98,8 @@ export async function eval_like(text, context = {}, noReturn, state, editor, con
|
|
|
77
98
|
return true;
|
|
78
99
|
}
|
|
79
100
|
});
|
|
80
|
-
let evaluator = make_context_evaluator(text, context, noReturn);
|
|
101
|
+
let evaluator = make_context_evaluator(text, Object.keys(context ?? {}), noReturn);
|
|
102
|
+
// console.log(i, j)
|
|
81
103
|
return await evaluator(context, proxiedState, async (x, newTab) => {
|
|
82
104
|
if (newTab || editor) {
|
|
83
105
|
if (!newTab) {
|
|
@@ -18,6 +18,7 @@ export let render;
|
|
|
18
18
|
export let extraKey = undefined;
|
|
19
19
|
export let preclickAction = undefined;
|
|
20
20
|
export let noInitialize = false;
|
|
21
|
+
export let onToggle = undefined;
|
|
21
22
|
export let controls = undefined;
|
|
22
23
|
const { app, worldStore, componentControl, runnableComponents } = getContext('AppViewerContext');
|
|
23
24
|
const iterContext = getContext('ListWrapperContext');
|
|
@@ -110,6 +111,9 @@ let css = initCss($app.css?.checkboxcomponent, customCss);
|
|
|
110
111
|
if (recomputeIds) {
|
|
111
112
|
recomputeIds.forEach((id) => $runnableComponents?.[id]?.cb?.forEach((cb) => cb()))
|
|
112
113
|
}
|
|
114
|
+
if (onToggle) {
|
|
115
|
+
onToggle.forEach((id) => $runnableComponents?.[id]?.cb?.forEach((cb) => cb()))
|
|
116
|
+
}
|
|
113
117
|
}}
|
|
114
118
|
disabled={resolvedConfig.disabled}
|
|
115
119
|
/>
|
|
@@ -12,6 +12,7 @@ declare const __propDef: {
|
|
|
12
12
|
extraKey?: string | undefined;
|
|
13
13
|
preclickAction?: (() => Promise<void>) | undefined;
|
|
14
14
|
noInitialize?: boolean | undefined;
|
|
15
|
+
onToggle?: string[] | undefined;
|
|
15
16
|
controls?: {
|
|
16
17
|
left: () => boolean;
|
|
17
18
|
right: () => boolean | string;
|
|
@@ -25,7 +25,7 @@ $componentControl[id] = {
|
|
|
25
25
|
let outputs = initOutput($worldStore, id, {
|
|
26
26
|
result: undefined
|
|
27
27
|
});
|
|
28
|
-
$: handleDefault(resolvedConfig.defaultValue);
|
|
28
|
+
$: !value && handleDefault(resolvedConfig.defaultValue);
|
|
29
29
|
function formatDate(dateString, formatString = 'dd.MM.yyyy') {
|
|
30
30
|
if (formatString === '') {
|
|
31
31
|
formatString = 'dd.MM.yyyy';
|
|
@@ -83,7 +83,7 @@ let css = initCss($app.css?.dateinputcomponent, customCss);
|
|
|
83
83
|
min={resolvedConfig.minDate}
|
|
84
84
|
max={resolvedConfig.maxDate}
|
|
85
85
|
placeholder="Type..."
|
|
86
|
-
class={twMerge(css?.input?.class, 'wm-date-input')}
|
|
86
|
+
class={twMerge('windmillapp w-full py-1.5 text-sm px-2', css?.input?.class, 'wm-date-input')}
|
|
87
87
|
style={css?.input?.style ?? ''}
|
|
88
88
|
/>
|
|
89
89
|
{/if}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
<script>import { getContext } from 'svelte';
|
|
2
|
+
import { initConfig, initOutput } from '../../editor/appUtils';
|
|
3
|
+
import { initCss } from '../../utils';
|
|
4
|
+
import AlignWrapper from '../helpers/AlignWrapper.svelte';
|
|
5
|
+
import InitializeComponent from '../helpers/InitializeComponent.svelte';
|
|
6
|
+
import { components } from '../../editor/component';
|
|
7
|
+
import ResolveConfig from '../helpers/ResolveConfig.svelte';
|
|
8
|
+
import ResolveStyle from '../helpers/ResolveStyle.svelte';
|
|
9
|
+
import DateTimeInput from '../../../DateTimeInput.svelte';
|
|
10
|
+
import { twMerge } from 'tailwind-merge';
|
|
11
|
+
import { parseISO, format as formatDateFns } from 'date-fns';
|
|
12
|
+
export let id;
|
|
13
|
+
export let configuration;
|
|
14
|
+
export let inputType;
|
|
15
|
+
export let verticalAlignment = undefined;
|
|
16
|
+
export let customCss = undefined;
|
|
17
|
+
export let render;
|
|
18
|
+
const { app, worldStore, componentControl, selectedComponent } = getContext('AppViewerContext');
|
|
19
|
+
let resolvedConfig = initConfig(components['datetimeinputcomponent'].initialData.configuration, configuration);
|
|
20
|
+
let value = undefined;
|
|
21
|
+
$componentControl[id] = {
|
|
22
|
+
setValue(nvalue) {
|
|
23
|
+
value = nvalue;
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
let outputs = initOutput($worldStore, id, {
|
|
27
|
+
result: undefined,
|
|
28
|
+
validity: true
|
|
29
|
+
});
|
|
30
|
+
$: handleDefault(resolvedConfig.defaultValue);
|
|
31
|
+
function formatDate(dateString, formatString = 'dd.MM.yyyy HH:mm') {
|
|
32
|
+
if (formatString === '') {
|
|
33
|
+
formatString = 'dd.MM.yyyy HH:mm';
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const isoDate = parseISO(dateString);
|
|
37
|
+
return formatDateFns(isoDate, formatString);
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
return 'Error formatting date:' + error.message;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
$: {
|
|
44
|
+
if (value) {
|
|
45
|
+
outputs?.result.set(formatDate(value, resolvedConfig.outputFormat));
|
|
46
|
+
const valueDate = new Date(value);
|
|
47
|
+
if (resolvedConfig.minDateTime) {
|
|
48
|
+
const minDate = new Date(resolvedConfig.minDateTime);
|
|
49
|
+
if (minDate.getDay() === valueDate.getDay() &&
|
|
50
|
+
minDate.getMonth() === valueDate.getMonth() &&
|
|
51
|
+
minDate.getFullYear() === valueDate.getFullYear()) {
|
|
52
|
+
outputs?.validity.set(minDate.getTime() < valueDate.getTime());
|
|
53
|
+
}
|
|
54
|
+
if (minDate.getTime() > valueDate.getTime()) {
|
|
55
|
+
outputs?.validity.set(false);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (resolvedConfig.maxDateTime) {
|
|
59
|
+
const maxDate = new Date(resolvedConfig.maxDateTime);
|
|
60
|
+
if (maxDate.getDay() === valueDate.getDay() &&
|
|
61
|
+
maxDate.getMonth() === valueDate.getMonth() &&
|
|
62
|
+
maxDate.getFullYear() === valueDate.getFullYear()) {
|
|
63
|
+
outputs?.validity.set(maxDate.getTime() > valueDate.getTime());
|
|
64
|
+
}
|
|
65
|
+
if (maxDate.getTime() < valueDate.getTime()) {
|
|
66
|
+
outputs?.validity.set(false);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
outputs?.result.set(undefined);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function handleDefault(defaultValue) {
|
|
75
|
+
value = defaultValue;
|
|
76
|
+
}
|
|
77
|
+
let css = initCss($app.css?.datetimeinputcomponent, customCss);
|
|
78
|
+
</script>
|
|
79
|
+
|
|
80
|
+
{#each Object.keys(components['datetimeinputcomponent'].initialData.configuration) as key (key)}
|
|
81
|
+
<ResolveConfig
|
|
82
|
+
{id}
|
|
83
|
+
{key}
|
|
84
|
+
bind:resolvedConfig={resolvedConfig[key]}
|
|
85
|
+
configuration={configuration[key]}
|
|
86
|
+
/>
|
|
87
|
+
{/each}
|
|
88
|
+
|
|
89
|
+
{#each Object.keys(css ?? {}) as key (key)}
|
|
90
|
+
<ResolveStyle
|
|
91
|
+
{id}
|
|
92
|
+
{customCss}
|
|
93
|
+
{key}
|
|
94
|
+
bind:css={css[key]}
|
|
95
|
+
componentStyle={$app.css?.datetimeinputcomponent}
|
|
96
|
+
/>
|
|
97
|
+
{/each}
|
|
98
|
+
|
|
99
|
+
<InitializeComponent {id} />
|
|
100
|
+
|
|
101
|
+
<AlignWrapper {render} {verticalAlignment}>
|
|
102
|
+
<div class={twMerge(css?.container?.class, 'w-full')} style={css?.container?.style}>
|
|
103
|
+
{#if inputType === 'date'}
|
|
104
|
+
<DateTimeInput
|
|
105
|
+
bind:value
|
|
106
|
+
useDropdown={resolvedConfig?.displayPresets}
|
|
107
|
+
on:pointerdown={(e) => {
|
|
108
|
+
e.stopPropagation()
|
|
109
|
+
$selectedComponent = [id]
|
|
110
|
+
}}
|
|
111
|
+
minDate={resolvedConfig.minDateTime
|
|
112
|
+
? formatDate(resolvedConfig.minDateTime, 'yyyy-MM-dd')
|
|
113
|
+
: undefined}
|
|
114
|
+
maxDate={resolvedConfig.maxDateTime
|
|
115
|
+
? formatDate(resolvedConfig.maxDateTime, 'yyyy-MM-dd')
|
|
116
|
+
: undefined}
|
|
117
|
+
on:focus={() => ($selectedComponent = [id])}
|
|
118
|
+
/>
|
|
119
|
+
{/if}
|
|
120
|
+
</div>
|
|
121
|
+
</AlignWrapper>
|