From 40e413d9586a7c96024c30d543e295d2ee16a6b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milorad=20FIlipovi=C4=87?= Date: Fri, 4 Nov 2022 14:04:31 +0100 Subject: [PATCH] refactor(editor): Migrate part of the vuex store to pinia (#4484) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ✨ Added pinia support. Migrated community nodes module. * ✨ Added ui pinia store, moved some data from root store to it, updated modals to work with pinia stores * ✨ Added ui pinia store and migrated a part of the root store * ✨ Migrated `settings` store to pinia * ✨ Removing vuex store refs from router * ✨ Migrated `users` module to pinia store * ⚡ Fixing errors after sync with master * ⚡ One more error after merge * ⚡ Created `workflows` pinia store. Moved large part of root store to it. Started updating references. * ✨ Finished migrating workflows store to pinia * ⚡ Renaming some getters and actions to make more sense * ✨ Finished migrating the root store to pinia * ✨ Migrated ndv store to pinia * ⚡ Renaming main panel dimensions getter so it doesn't clash with data prop name * ✔️ Fixing lint errors * ✨ Migrated `templates` store to pinia * ✨ Migrated the `nodeTypes`store * ⚡ Removed unused pieces of code and oold vuex modules * ✨ Adding vuex calls to pinia store, fi xing wrong references * 💄 Removing leftover $store refs * ⚡ Added legacy getters and mutations to store to support webhooks * ⚡ Added missing front-end hooks, updated vuex state subscriptions to pinia * ✔️ Fixing linting errors * ⚡ Removing vue composition api plugin * ⚡ Fixing main sidebar state when loading node view * 🐛 Fixing an error when activating workflows * 🐛 Fixing isses with workflow settings and executions auto-refresh * 🐛 Removing duplicate listeners which cause import error * 🐛 Fixing route authentication * ⚡ Updating freshly pulled $store refs * Adding deleted const * ⚡ Updating store references in ee features. Reseting NodeView credentials update flag when resetting workspace * ⚡ Adding return type to email submission modal * ⚡ Making NodeView only react to paste event when active * 🐛 Fixing signup view errors * 👌 Addressing PR review comments * 👌 Addressing new PR comments * 👌 Updating invite id logic in signup view --- package-lock.json | 100 +- packages/editor-ui/package.json | 1 + packages/editor-ui/src/App.vue | 55 +- packages/editor-ui/src/Interface.ts | 107 +- packages/editor-ui/src/api/communityNodes.ts | 2 +- packages/editor-ui/src/api/curlHelper.ts | 4 +- packages/editor-ui/src/api/settings.ts | 6 +- .../editor-ui/src/api/workflow-webhooks.ts | 6 +- .../editor-ui/src/components/AboutModal.vue | 14 +- .../src/components/ActivationModal.vue | 60 +- .../src/components/BinaryDataDisplay.vue | 11 +- .../src/components/ChangePasswordModal.vue | 7 +- .../editor-ui/src/components/CodeEdit.vue | 19 +- .../CodeNodeEditor/CodeNodeEditor.vue | 7 +- .../completions/base.completions.ts | 11 +- .../completions/jsonField.completions.ts | 23 +- .../completions/require.completions.ts | 21 +- .../src/components/CollectionParameter.vue | 9 +- .../src/components/CommunityPackageCard.vue | 9 +- .../CommunityPackageInstallModal.vue | 9 +- .../CommunityPackageManageConfirmModal.vue | 9 +- .../src/components/ContactPromptModal.vue | 28 +- .../src/components/CredentialCard.vue | 12 +- .../CredentialEdit/CredentialConfig.vue | 23 +- .../CredentialEdit/CredentialEdit.vue | 40 +- .../CredentialEdit/CredentialSharing.ee.vue | 48 +- .../components/CredentialEdit/OauthButton.vue | 7 +- .../src/components/CredentialIcon.vue | 12 +- .../src/components/CredentialsSelectModal.vue | 11 +- .../src/components/DeleteUserModal.vue | 31 +- .../editor-ui/src/components/Draggable.vue | 13 +- .../src/components/DraggableTarget.vue | 15 +- .../components/DuplicateWorkflowDialog.vue | 14 +- .../src/components/EnterpriseEdition.ee.vue | 5 +- .../src/components/Error/NodeErrorView.vue | 11 +- .../src/components/ExecutionsList.vue | 34 +- .../ExecutionsView/ExecutionPreview.vue | 7 +- .../ExecutionsInfoAccordion.vue | 35 +- .../ExecutionsView/ExecutionsLandingPage.vue | 19 +- .../ExecutionsView/ExecutionsSidebar.vue | 9 +- .../ExecutionsView/ExecutionsView.vue | 96 +- .../src/components/ExpressionEdit.vue | 23 +- .../src/components/FeatureComingSoon.vue | 28 +- .../editor-ui/src/components/GoBackButton.vue | 2 +- .../src/components/HoverableNodeIcon.vue | 7 +- .../src/components/ImportCurlModal.vue | 21 +- .../src/components/ImportParameter.vue | 7 +- .../editor-ui/src/components/InputPanel.vue | 27 +- .../src/components/InviteUsersModal.vue | 5 +- packages/editor-ui/src/components/Logo.vue | 7 +- .../ExecutionDetails/ExecutionDetails.vue | 15 +- .../src/components/MainHeader/MainHeader.vue | 28 +- .../src/components/MainHeader/TabBar.vue | 7 +- .../components/MainHeader/WorkflowDetails.vue | 57 +- .../editor-ui/src/components/MainSidebar.vue | 77 +- packages/editor-ui/src/components/Modal.vue | 85 +- .../editor-ui/src/components/ModalDrawer.vue | 22 +- .../editor-ui/src/components/ModalRoot.vue | 38 +- .../src/components/NDVDraggablePanels.vue | 32 +- packages/editor-ui/src/components/Node.vue | 47 +- .../src/components/Node/NodeCreation.vue | 7 +- .../Node/NodeCreator/CategorizedItems.vue | 21 +- .../Node/NodeCreator/CategoryItem.vue | 11 +- .../components/Node/NodeCreator/MainPanel.vue | 9 +- .../Node/NodeCreator/NodeCreator.vue | 14 +- .../src/components/NodeCredentials.vue | 30 +- .../src/components/NodeDetailsView.vue | 81 +- .../src/components/NodeExecuteButton.vue | 36 +- .../editor-ui/src/components/NodeIcon.vue | 7 +- .../editor-ui/src/components/NodeSettings.vue | 76 +- .../src/components/NodeSettingsTabs.vue | 15 +- .../components/OnboardingCallSignupModal.vue | 5 +- .../editor-ui/src/components/OutputPanel.vue | 35 +- .../src/components/ParameterInput.vue | 35 +- .../src/components/ParameterInputExpanded.vue | 7 +- .../src/components/ParameterInputFull.vue | 17 +- .../src/components/ParameterInputList.vue | 15 +- .../src/components/ParameterInputWrapper.vue | 17 +- .../src/components/PersonalizationModal.vue | 36 +- .../src/components/PushConnectionTracker.vue | 9 +- .../ResourceLocator/ResourceLocator.vue | 44 +- packages/editor-ui/src/components/RunData.vue | 94 +- .../editor-ui/src/components/RunDataJson.vue | 9 +- .../src/components/RunDataJsonActions.vue | 13 +- .../editor-ui/src/components/RunDataTable.vue | 27 +- .../src/components/SettingsSidebar.vue | 18 +- packages/editor-ui/src/components/Sticky.vue | 39 +- .../editor-ui/src/components/TagsDropdown.vue | 5 +- .../TagsManager/TagsView/TagsView.vue | 6 +- .../editor-ui/src/components/Telemetry.vue | 32 +- .../src/components/TemplateDetails.vue | 13 +- packages/editor-ui/src/components/TimeAgo.vue | 9 +- .../editor-ui/src/components/TriggerPanel.vue | 33 +- .../editor-ui/src/components/ValueSurvey.vue | 37 +- .../src/components/VariableSelector.vue | 23 +- .../src/components/WorkflowActivator.vue | 24 +- .../editor-ui/src/components/WorkflowCard.vue | 22 +- .../src/components/WorkflowSettings.vue | 60 +- .../forms/ResourceFiltersDropdown.vue | 18 +- .../src/components/layouts/PageViewLayout.vue | 8 +- .../layouts/ResourcesListLayout.vue | 23 +- .../components/mixins/executionsHelpers.ts | 15 +- .../src/components/mixins/mouseSelect.ts | 27 +- .../src/components/mixins/moveNodeWorkflow.ts | 24 +- .../src/components/mixins/newVersions.ts | 7 +- .../src/components/mixins/nodeBase.ts | 42 +- .../src/components/mixins/nodeHelpers.ts | 57 +- .../src/components/mixins/pinData.ts | 7 +- .../src/components/mixins/pushConnection.ts | 86 +- .../src/components/mixins/restApi.ts | 9 +- .../src/components/mixins/showMessage.ts | 11 +- .../src/components/mixins/userHelpers.ts | 8 +- .../src/components/mixins/workflowActivate.ts | 25 +- .../src/components/mixins/workflowHelpers.ts | 144 ++- .../src/components/mixins/workflowRun.ts | 39 +- packages/editor-ui/src/constants.ts | 12 + packages/editor-ui/src/main.ts | 6 + .../editor-ui/src/modules/communityNodes.ts | 87 -- .../editor-ui/src/modules/credentials.ee.ts | 6 +- packages/editor-ui/src/modules/credentials.ts | 53 +- packages/editor-ui/src/modules/ndv.ts | 170 --- packages/editor-ui/src/modules/nodeTypes.ts | 180 --- packages/editor-ui/src/modules/settings.ts | 243 ---- packages/editor-ui/src/modules/tags.ts | 17 +- packages/editor-ui/src/modules/templates.ts | 282 ----- packages/editor-ui/src/modules/ui.ts | 376 ------ packages/editor-ui/src/modules/users.ts | 227 ---- packages/editor-ui/src/modules/versions.ts | 10 +- packages/editor-ui/src/modules/workflows.ts | 115 -- packages/editor-ui/src/permissions.ts | 6 +- packages/editor-ui/src/plugins/i18n/index.ts | 17 +- .../src/plugins/i18n/locales/en.json | 1 + .../editor-ui/src/plugins/telemetry/index.ts | 7 +- packages/editor-ui/src/router.ts | 53 +- packages/editor-ui/src/store.ts | 1089 +---------------- .../editor-ui/src/stores/communityNodes.ts | 82 ++ packages/editor-ui/src/stores/n8nRootStore.ts | 109 ++ packages/editor-ui/src/stores/ndv.ts | 180 +++ packages/editor-ui/src/stores/nodeTypes.ts | 157 +++ packages/editor-ui/src/stores/settings.ts | 235 ++++ packages/editor-ui/src/stores/templates.ts | 267 ++++ packages/editor-ui/src/stores/ui.ts | 385 ++++++ packages/editor-ui/src/stores/users.ts | 204 +++ packages/editor-ui/src/stores/workflows.ts | 773 ++++++++++++ .../src/views/ChangePasswordView.vue | 35 +- .../editor-ui/src/views/CredentialsView.vue | 23 +- .../src/views/ForgotMyPasswordView.vue | 12 +- packages/editor-ui/src/views/NodeView.vue | 708 ++++++----- .../editor-ui/src/views/SettingsApiView.vue | 25 +- .../src/views/SettingsCommunityNodesView.vue | 53 +- .../src/views/SettingsFakeDoorView.vue | 11 +- .../src/views/SettingsPersonalView.vue | 25 +- .../editor-ui/src/views/SettingsUsersView.vue | 40 +- packages/editor-ui/src/views/SetupView.vue | 19 +- packages/editor-ui/src/views/SigninView.vue | 7 +- packages/editor-ui/src/views/SignupView.vue | 28 +- .../src/views/TemplatesCollectionView.vue | 17 +- .../src/views/TemplatesSearchView.vue | 88 +- .../src/views/TemplatesWorkflowView.vue | 11 +- .../editor-ui/src/views/WorkflowsView.vue | 32 +- 160 files changed, 5141 insertions(+), 4378 deletions(-) delete mode 100644 packages/editor-ui/src/modules/communityNodes.ts delete mode 100644 packages/editor-ui/src/modules/ndv.ts delete mode 100644 packages/editor-ui/src/modules/nodeTypes.ts delete mode 100644 packages/editor-ui/src/modules/settings.ts delete mode 100644 packages/editor-ui/src/modules/templates.ts delete mode 100644 packages/editor-ui/src/modules/ui.ts delete mode 100644 packages/editor-ui/src/modules/users.ts delete mode 100644 packages/editor-ui/src/modules/workflows.ts create mode 100644 packages/editor-ui/src/stores/communityNodes.ts create mode 100644 packages/editor-ui/src/stores/n8nRootStore.ts create mode 100644 packages/editor-ui/src/stores/ndv.ts create mode 100644 packages/editor-ui/src/stores/nodeTypes.ts create mode 100644 packages/editor-ui/src/stores/settings.ts create mode 100644 packages/editor-ui/src/stores/templates.ts create mode 100644 packages/editor-ui/src/stores/ui.ts create mode 100644 packages/editor-ui/src/stores/users.ts create mode 100644 packages/editor-ui/src/stores/workflows.ts diff --git a/package-lock.json b/package-lock.json index cbc4105f01..9e18178e79 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9090,6 +9090,11 @@ "yallist": "^2.1.2" } }, + "node_modules/@vue/devtools-api": { + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.4.5.tgz", + "integrity": "sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ==" + }, "node_modules/@vue/eslint-config-typescript": { "version": "11.0.2", "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-11.0.2.tgz", @@ -27057,6 +27062,31 @@ "node": ">=6" } }, + "node_modules/pinia": { + "version": "2.0.23", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.0.23.tgz", + "integrity": "sha512-N15hFf4o5STrxpNrib1IEb1GOArvPYf1zPvQVRGOO1G1d74Ak0J0lVyalX/SmrzdT4Q0nlEFjbURsmBmIGUR5Q==", + "dependencies": { + "@vue/devtools-api": "^6.4.4", + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "@vue/composition-api": "^1.4.0", + "typescript": ">=4.4.4", + "vue": "^2.6.14 || ^3.2.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, "node_modules/pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", @@ -35718,6 +35748,31 @@ "tinycolor2": "^1.1.2" } }, + "node_modules/vue-demi": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz", + "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, "node_modules/vue-docgen-api": { "version": "4.54.2", "resolved": "https://registry.npmjs.org/vue-docgen-api/-/vue-docgen-api-4.54.2.tgz", @@ -38517,6 +38572,7 @@ "n8n-design-system": "~0.40.0", "n8n-workflow": "~0.122.1", "normalize-wheel": "^1.0.1", + "pinia": "^2.0.22", "prismjs": "^1.17.1", "quill": "2.0.0-dev.4", "quill-autoformat": "^0.1.1", @@ -42784,7 +42840,7 @@ "functional-red-black-tree": "^1.0.1", "glob-parent": "^6.0.1", "globals": "^13.15.0", - "globby": "^11.0.2", + "globby": "^11.1.0", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", @@ -43016,7 +43072,7 @@ "@oclif/errors": "^1.3.6", "@oclif/parser": "^3.8.8", "debug": "^4.3.4", - "globby": "^11.0.2", + "globby": "^11.1.0", "is-wsl": "^2.1.1", "tslib": "^2.3.1" }, @@ -43042,10 +43098,10 @@ "clean-stack": "^3.0.1", "cli-progress": "^3.10.0", "debug": "^4.3.4", - "ejs": "^3.1.8", + "ejs": "^3.1.6", "fs-extra": "^9.1.0", "get-package-type": "^0.1.0", - "globby": "^11.0.2", + "globby": "^11.1.0", "hyperlinker": "^1.0.0", "indent-string": "^4.0.0", "is-wsl": "^2.2.0", @@ -43262,7 +43318,7 @@ "@oclif/errors": "^1.3.3", "@oclif/parser": "^3.8.0", "debug": "^4.1.1", - "globby": "^11.0.2", + "globby": "^11.0.1", "is-wsl": "^2.1.1", "tslib": "^2.0.0" } @@ -43855,7 +43911,7 @@ "css-loader": "^3.6.0", "file-loader": "^6.2.0", "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.0.4", + "fork-ts-checker-webpack-plugin": "^4.1.6", "glob": "^7.1.6", "glob-promise": "^3.4.0", "global": "^4.4.0", @@ -45971,7 +46027,7 @@ "@typescript-eslint/types": "5.42.0", "@typescript-eslint/visitor-keys": "5.42.0", "debug": "^4.3.4", - "globby": "^11.0.2", + "globby": "^11.1.0", "is-glob": "^4.0.3", "semver": "^7.3.7", "tsutils": "^3.21.0" @@ -46249,6 +46305,11 @@ } } }, + "@vue/devtools-api": { + "version": "6.4.5", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.4.5.tgz", + "integrity": "sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ==" + }, "@vue/eslint-config-typescript": { "version": "11.0.2", "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-11.0.2.tgz", @@ -47273,7 +47334,7 @@ "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", "dev": true, "requires": { - "browserslist": "^4.21.3", + "browserslist": "^4.12.0", "caniuse-lite": "^1.0.30001109", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", @@ -49868,7 +49929,7 @@ "integrity": "sha512-piOX9Go+Z4f9ZiBFLnZ5VrOpBl0h7IGCkiFUN11QTe6LjAvOT3ifL/5TdoizMh99hcGy5SoLyWbapIY/PIb/3A==", "dev": true, "requires": { - "browserslist": "^4.21.3" + "browserslist": "^4.21.4" } }, "core-js-pure": { @@ -49936,7 +49997,7 @@ "requires": { "arrify": "^2.0.1", "cp-file": "^7.0.0", - "globby": "^11.0.2", + "globby": "^9.2.0", "has-glob": "^1.0.0", "junk": "^3.1.0", "nested-error-stacks": "^2.1.0", @@ -58963,6 +59024,7 @@ "n8n-design-system": "~0.40.0", "n8n-workflow": "~0.122.1", "normalize-wheel": "^1.0.1", + "pinia": "^2.0.22", "prismjs": "^1.17.1", "quill": "2.0.0-dev.4", "quill-autoformat": "^0.1.1", @@ -61151,6 +61213,15 @@ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, + "pinia": { + "version": "2.0.23", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.0.23.tgz", + "integrity": "sha512-N15hFf4o5STrxpNrib1IEb1GOArvPYf1zPvQVRGOO1G1d74Ak0J0lVyalX/SmrzdT4Q0nlEFjbURsmBmIGUR5Q==", + "requires": { + "@vue/devtools-api": "^6.4.4", + "vue-demi": "*" + } + }, "pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", @@ -61952,7 +62023,7 @@ "fs-extra": "^6.0.1", "get-stream": "^5.1.0", "glob": "^7.1.2", - "globby": "^11.0.2", + "globby": "^10.0.1", "http-call": "^5.1.2", "load-json-file": "^6.2.0", "pkg-dir": "^4.2.0", @@ -67643,7 +67714,7 @@ "consola": "^2.15.3", "dotenv": "^16.0.0", "dotenv-expand": "^8.0.2", - "ejs": "^3.1.8", + "ejs": "^3.1.6", "fast-glob": "^3.2.11", "fs-extra": "^10.0.1", "html-minifier-terser": "^6.1.0", @@ -67820,6 +67891,11 @@ "tinycolor2": "^1.1.2" } }, + "vue-demi": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz", + "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==" + }, "vue-docgen-api": { "version": "4.54.2", "resolved": "https://registry.npmjs.org/vue-docgen-api/-/vue-docgen-api-4.54.2.tgz", diff --git a/packages/editor-ui/package.json b/packages/editor-ui/package.json index 558b33faa6..684bbfe19d 100644 --- a/packages/editor-ui/package.json +++ b/packages/editor-ui/package.json @@ -57,6 +57,7 @@ "n8n-design-system": "~0.41.0", "n8n-workflow": "~0.123.0", "normalize-wheel": "^1.0.1", + "pinia": "^2.0.22", "prismjs": "^1.17.1", "quill": "2.0.0-dev.4", "quill-autoformat": "^0.1.1", diff --git a/packages/editor-ui/src/App.vue b/packages/editor-ui/src/App.vue index d864af4ce3..80d6b1b6a9 100644 --- a/packages/editor-ui/src/App.vue +++ b/packages/editor-ui/src/App.vue @@ -6,7 +6,7 @@ id="app" :class="{ [$style.container]: true, - [$style.sidebarCollapsed]: sidebarMenuCollapsed + [$style.sidebarCollapsed]: uiStore.sidebarMenuCollapsed }" > @@ -55,9 +55,11 @@ diff --git a/packages/editor-ui/src/components/ModalDrawer.vue b/packages/editor-ui/src/components/ModalDrawer.vue index 3854b72f95..af031bf15b 100644 --- a/packages/editor-ui/src/components/ModalDrawer.vue +++ b/packages/editor-ui/src/components/ModalDrawer.vue @@ -1,7 +1,7 @@