n8n-editor-ui 1.44.0 → 1.44.1
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/.turbo/turbo-build.log +77 -77
- package/dist/assets/{AuthView-1FRMwQ3r.js → AuthView-DfyvaM6i.js} +2 -2
- package/dist/assets/{AuthView-1FRMwQ3r.js.map → AuthView-DfyvaM6i.js.map} +1 -1
- package/dist/assets/{CanvasControls-FCzUEVOQ.js → CanvasControls-DFdnF5qb.js} +2 -2
- package/dist/assets/{CanvasControls-FCzUEVOQ.js.map → CanvasControls-DFdnF5qb.js.map} +1 -1
- package/dist/assets/{ChangePasswordView-DdWHauKg.js → ChangePasswordView-B4v8DwW9.js} +2 -2
- package/dist/assets/{ChangePasswordView-DdWHauKg.js.map → ChangePasswordView-B4v8DwW9.js.map} +1 -1
- package/dist/assets/{CollectionParameter-CiMzJaXg.js → CollectionParameter-5V5xJsjs.js} +2 -2
- package/dist/assets/CollectionParameter-5V5xJsjs.js.map +1 -0
- package/dist/assets/{CredentialsView-Bn6PVi9E.js → CredentialsView-tyjXlz4Z.js} +2 -2
- package/dist/assets/{CredentialsView-Bn6PVi9E.js.map → CredentialsView-tyjXlz4Z.js.map} +1 -1
- package/dist/assets/{ExecutionsFilter-nFboBzV2.js → ExecutionsFilter-0t_omffh.js} +2 -2
- package/dist/assets/{ExecutionsFilter-nFboBzV2.js.map → ExecutionsFilter-0t_omffh.js.map} +1 -1
- package/dist/assets/{ExecutionsView-CbkLSsSW.js → ExecutionsView-DzCvkqXG.js} +2 -2
- package/dist/assets/{ExecutionsView-CbkLSsSW.js.map → ExecutionsView-DzCvkqXG.js.map} +1 -1
- package/dist/assets/{ForgotMyPasswordView-vPMSx22g.js → ForgotMyPasswordView-D_90K80j.js} +2 -2
- package/dist/assets/{ForgotMyPasswordView-vPMSx22g.js.map → ForgotMyPasswordView-D_90K80j.js.map} +1 -1
- package/dist/assets/{MainHeader-DedFNVir.js → MainHeader-BYoa1H_e.js} +2 -2
- package/dist/assets/{MainHeader-DedFNVir.js.map → MainHeader-BYoa1H_e.js.map} +1 -1
- package/dist/assets/{MainSidebar-BNq07OnD.js → MainSidebar-BNsdraIv.js} +2 -2
- package/dist/assets/{MainSidebar-BNq07OnD.js.map → MainSidebar-BNsdraIv.js.map} +1 -1
- package/dist/assets/{NodeCreation-C0AAIhNs.js → NodeCreation-R9yLdNU1.js} +3 -3
- package/dist/assets/{NodeCreation-C0AAIhNs.js.map → NodeCreation-R9yLdNU1.js.map} +1 -1
- package/dist/assets/{NodeCreator-ESjCn1LZ.js → NodeCreator-CLzfNOJ5.js} +2 -2
- package/dist/assets/{NodeCreator-ESjCn1LZ.js.map → NodeCreator-CLzfNOJ5.js.map} +1 -1
- package/dist/assets/{NodeList-baCRAzNs.js → NodeList-B4yRfzDq.js} +2 -2
- package/dist/assets/{NodeList-baCRAzNs.js.map → NodeList-B4yRfzDq.js.map} +1 -1
- package/dist/assets/{NodeView-BucVYztm.js → NodeView-BGtpd_Bb.js} +4 -4
- package/dist/assets/{NodeView-BucVYztm.js.map → NodeView-BGtpd_Bb.js.map} +1 -1
- package/dist/assets/{NodeView.v2-Oz2vwdfG.js → NodeView.v2-DnTCsiDE.js} +3 -3
- package/dist/assets/{NodeView.v2-Oz2vwdfG.js.map → NodeView.v2-DnTCsiDE.js.map} +1 -1
- package/dist/assets/{ProjectCardBadge.vue_vue_type_script_setup_true_lang-BRGRmswR.js → ProjectCardBadge.vue_vue_type_script_setup_true_lang-CYFr8_zj.js} +2 -2
- package/dist/assets/{ProjectCardBadge.vue_vue_type_script_setup_true_lang-BRGRmswR.js.map → ProjectCardBadge.vue_vue_type_script_setup_true_lang-CYFr8_zj.js.map} +1 -1
- package/dist/assets/{ProjectSettings-D3FAGvAm.js → ProjectSettings-kayD4yS7.js} +2 -2
- package/dist/assets/{ProjectSettings-D3FAGvAm.js.map → ProjectSettings-kayD4yS7.js.map} +1 -1
- package/dist/assets/{ProjectTabs-B_U7Q16t.js → ProjectTabs-1jmisSQb.js} +2 -2
- package/dist/assets/{ProjectTabs-B_U7Q16t.js.map → ProjectTabs-1jmisSQb.js.map} +1 -1
- package/dist/assets/{PushConnectionTracker-DQVvJ6kh.js → PushConnectionTracker-Dfvjg1ts.js} +2 -2
- package/dist/assets/{PushConnectionTracker-DQVvJ6kh.js.map → PushConnectionTracker-Dfvjg1ts.js.map} +1 -1
- package/dist/assets/{ResourcesListLayout-CfzMCzp5.js → ResourcesListLayout-BOYOLez8.js} +2 -2
- package/dist/assets/{ResourcesListLayout-CfzMCzp5.js.map → ResourcesListLayout-BOYOLez8.js.map} +1 -1
- package/dist/assets/{RunDataAi-CwnKkFZ1.js → RunDataAi-CFKU0i2R.js} +2 -2
- package/dist/assets/{RunDataAi-CwnKkFZ1.js.map → RunDataAi-CFKU0i2R.js.map} +1 -1
- package/dist/assets/{RunDataJson-DTMT_R5P.js → RunDataJson-DHI409Ix.js} +3 -3
- package/dist/assets/{RunDataJson-DTMT_R5P.js.map → RunDataJson-DHI409Ix.js.map} +1 -1
- package/dist/assets/{RunDataJsonActions-dNlM_YO3.js → RunDataJsonActions-LAsoJBBD.js} +2 -2
- package/dist/assets/{RunDataJsonActions-dNlM_YO3.js.map → RunDataJsonActions-LAsoJBBD.js.map} +1 -1
- package/dist/assets/{RunDataSchema-D7rSFQ4v.js → RunDataSchema-CgYDgOLN.js} +2 -2
- package/dist/assets/{RunDataSchema-D7rSFQ4v.js.map → RunDataSchema-CgYDgOLN.js.map} +1 -1
- package/dist/assets/{RunDataSearch-BLxgvPWc.js → RunDataSearch-ZJd98FoH.js} +2 -2
- package/dist/assets/{RunDataSearch-BLxgvPWc.js.map → RunDataSearch-ZJd98FoH.js.map} +1 -1
- package/dist/assets/{RunDataTable-CTYOMGVf.js → RunDataTable-IMqti3UV.js} +2 -2
- package/dist/assets/{RunDataTable-CTYOMGVf.js.map → RunDataTable-IMqti3UV.js.map} +1 -1
- package/dist/assets/{SamlOnboarding-B0SKUJ7w.js → SamlOnboarding-6S1cZAZQ.js} +2 -2
- package/dist/assets/{SamlOnboarding-B0SKUJ7w.js.map → SamlOnboarding-6S1cZAZQ.js.map} +1 -1
- package/dist/assets/{SettingsApiView-04CpGWS3.js → SettingsApiView-DzACRdqO.js} +2 -2
- package/dist/assets/{SettingsApiView-04CpGWS3.js.map → SettingsApiView-DzACRdqO.js.map} +1 -1
- package/dist/assets/{SettingsCommunityNodesView-CNryAAn3.js → SettingsCommunityNodesView-DI8tm65K.js} +2 -2
- package/dist/assets/{SettingsCommunityNodesView-CNryAAn3.js.map → SettingsCommunityNodesView-DI8tm65K.js.map} +1 -1
- package/dist/assets/{SettingsExternalSecrets-B39P4p2-.js → SettingsExternalSecrets-DFb1WNlI.js} +2 -2
- package/dist/assets/{SettingsExternalSecrets-B39P4p2-.js.map → SettingsExternalSecrets-DFb1WNlI.js.map} +1 -1
- package/dist/assets/{SettingsFakeDoorView-BOQAY92v.js → SettingsFakeDoorView-CDAZibIu.js} +2 -2
- package/dist/assets/{SettingsFakeDoorView-BOQAY92v.js.map → SettingsFakeDoorView-CDAZibIu.js.map} +1 -1
- package/dist/assets/{SettingsLdapView-VTF-EB0a.js → SettingsLdapView-yXjpScE1.js} +2 -2
- package/dist/assets/{SettingsLdapView-VTF-EB0a.js.map → SettingsLdapView-yXjpScE1.js.map} +1 -1
- package/dist/assets/{SettingsLogStreamingView-JsodKkoJ.js → SettingsLogStreamingView-DQTUJczt.js} +2 -2
- package/dist/assets/{SettingsLogStreamingView-JsodKkoJ.js.map → SettingsLogStreamingView-DQTUJczt.js.map} +1 -1
- package/dist/assets/{SettingsPersonalView-DxQ-hHrk.js → SettingsPersonalView-CYfSdpu7.js} +2 -2
- package/dist/assets/{SettingsPersonalView-DxQ-hHrk.js.map → SettingsPersonalView-CYfSdpu7.js.map} +1 -1
- package/dist/assets/{SettingsSourceControl-aqaWVYCl.js → SettingsSourceControl-SrxQOR5H.js} +2 -2
- package/dist/assets/{SettingsSourceControl-aqaWVYCl.js.map → SettingsSourceControl-SrxQOR5H.js.map} +1 -1
- package/dist/assets/{SettingsSso-Chwn0xrx.js → SettingsSso-DrB162SI.js} +2 -2
- package/dist/assets/{SettingsSso-Chwn0xrx.js.map → SettingsSso-DrB162SI.js.map} +1 -1
- package/dist/assets/{SettingsUsageAndPlan-CIj5SQKn.js → SettingsUsageAndPlan-vOGNFMVq.js} +2 -2
- package/dist/assets/{SettingsUsageAndPlan-CIj5SQKn.js.map → SettingsUsageAndPlan-vOGNFMVq.js.map} +1 -1
- package/dist/assets/{SettingsUsersView-CY4kSRaG.js → SettingsUsersView-Tx1-g18F.js} +2 -2
- package/dist/assets/{SettingsUsersView-CY4kSRaG.js.map → SettingsUsersView-Tx1-g18F.js.map} +1 -1
- package/dist/assets/{SettingsView-jgK3_oOB.js → SettingsView-BOZ2SBsQ.js} +2 -2
- package/dist/assets/{SettingsView-jgK3_oOB.js.map → SettingsView-BOZ2SBsQ.js.map} +1 -1
- package/dist/assets/{SetupView-O6xv77jO.js → SetupView-DY7tVzgF.js} +2 -2
- package/dist/assets/{SetupView-O6xv77jO.js.map → SetupView-DY7tVzgF.js.map} +1 -1
- package/dist/assets/{SetupWorkflowCredentialsButton-oGzzXD7H.js → SetupWorkflowCredentialsButton-B9Acgowu.js} +2 -2
- package/dist/assets/{SetupWorkflowCredentialsButton-oGzzXD7H.js.map → SetupWorkflowCredentialsButton-B9Acgowu.js.map} +1 -1
- package/dist/assets/{SetupWorkflowFromTemplateView-BDUp9JWx.js → SetupWorkflowFromTemplateView-C2E8A8g4.js} +2 -2
- package/dist/assets/{SetupWorkflowFromTemplateView-BDUp9JWx.js.map → SetupWorkflowFromTemplateView-C2E8A8g4.js.map} +1 -1
- package/dist/assets/{SigninView-BLgTm7p4.js → SigninView-DlT1Bv9l.js} +2 -2
- package/dist/assets/{SigninView-BLgTm7p4.js.map → SigninView-DlT1Bv9l.js.map} +1 -1
- package/dist/assets/{SignoutView-DFSKFmE2.js → SignoutView-DisgJoQS.js} +2 -2
- package/dist/assets/{SignoutView-DFSKFmE2.js.map → SignoutView-DisgJoQS.js.map} +1 -1
- package/dist/assets/{SignupView-DSmDdbRA.js → SignupView-CQZSGNCi.js} +2 -2
- package/dist/assets/{SignupView-DSmDdbRA.js.map → SignupView-CQZSGNCi.js.map} +1 -1
- package/dist/assets/{TemplateDetails-DW6dTHAk.js → TemplateDetails-DZzMxROe.js} +2 -2
- package/dist/assets/{TemplateDetails-DW6dTHAk.js.map → TemplateDetails-DZzMxROe.js.map} +1 -1
- package/dist/assets/{TemplateList-DHLgDv5f.js → TemplateList-DS0lnbxA.js} +2 -2
- package/dist/assets/{TemplateList-DHLgDv5f.js.map → TemplateList-DS0lnbxA.js.map} +1 -1
- package/dist/assets/{TemplatesCollectionView-Bix3khnw.js → TemplatesCollectionView-BMck3jn9.js} +2 -2
- package/dist/assets/{TemplatesCollectionView-Bix3khnw.js.map → TemplatesCollectionView-BMck3jn9.js.map} +1 -1
- package/dist/assets/{TemplatesInfoCarousel-B3u16wII.js → TemplatesInfoCarousel-BYIB7MKZ.js} +2 -2
- package/dist/assets/{TemplatesInfoCarousel-B3u16wII.js.map → TemplatesInfoCarousel-BYIB7MKZ.js.map} +1 -1
- package/dist/assets/{TemplatesSearchView-CvtrqPXg.js → TemplatesSearchView-aVpZ2G9F.js} +2 -2
- package/dist/assets/{TemplatesSearchView-CvtrqPXg.js.map → TemplatesSearchView-aVpZ2G9F.js.map} +1 -1
- package/dist/assets/{TemplatesView-DuT3R1EI.js → TemplatesView-CuyRlzAM.js} +2 -2
- package/dist/assets/{TemplatesView-DuT3R1EI.js.map → TemplatesView-CuyRlzAM.js.map} +1 -1
- package/dist/assets/{TemplatesWorkflowView-C_-zPrQW.js → TemplatesWorkflowView-DAa2SCYE.js} +2 -2
- package/dist/assets/{TemplatesWorkflowView-C_-zPrQW.js.map → TemplatesWorkflowView-DAa2SCYE.js.map} +1 -1
- package/dist/assets/{VariablesView-CMrDg4Fx.js → VariablesView-57BdyEmO.js} +2 -2
- package/dist/assets/{VariablesView-CMrDg4Fx.js.map → VariablesView-57BdyEmO.js.map} +1 -1
- package/dist/assets/{WorkerView-BcfdfxOO.js → WorkerView-BLv_CYeM.js} +2 -2
- package/dist/assets/{WorkerView-BcfdfxOO.js.map → WorkerView-BLv_CYeM.js.map} +1 -1
- package/dist/assets/{WorkflowActivator-BiqeeeBc.js → WorkflowActivator-WjfZFpnK.js} +2 -2
- package/dist/assets/{WorkflowActivator-BiqeeeBc.js.map → WorkflowActivator-WjfZFpnK.js.map} +1 -1
- package/dist/assets/{WorkflowExecutionsInfoAccordion-CITQoihQ.js → WorkflowExecutionsInfoAccordion-Dv9rbNek.js} +2 -2
- package/dist/assets/{WorkflowExecutionsInfoAccordion-CITQoihQ.js.map → WorkflowExecutionsInfoAccordion-Dv9rbNek.js.map} +1 -1
- package/dist/assets/{WorkflowExecutionsLandingPage-CnHdLYgR.js → WorkflowExecutionsLandingPage-CsbJPayv.js} +2 -2
- package/dist/assets/{WorkflowExecutionsLandingPage-CnHdLYgR.js.map → WorkflowExecutionsLandingPage-CsbJPayv.js.map} +1 -1
- package/dist/assets/{WorkflowExecutionsPreview-By0_k6NX.js → WorkflowExecutionsPreview-xxP83pWI.js} +2 -2
- package/dist/assets/{WorkflowExecutionsPreview-By0_k6NX.js.map → WorkflowExecutionsPreview-xxP83pWI.js.map} +1 -1
- package/dist/assets/WorkflowExecutionsView-c7NCTwks.js +2 -0
- package/dist/assets/WorkflowExecutionsView-c7NCTwks.js.map +1 -0
- package/dist/assets/{WorkflowHistory-C5ALmvoB.js → WorkflowHistory-DI6sDGlZ.js} +2 -2
- package/dist/assets/{WorkflowHistory-C5ALmvoB.js.map → WorkflowHistory-DI6sDGlZ.js.map} +1 -1
- package/dist/assets/{WorkflowOnboardingView-hQxsQlm1.js → WorkflowOnboardingView-DVqrTjM4.js} +2 -2
- package/dist/assets/{WorkflowOnboardingView-hQxsQlm1.js.map → WorkflowOnboardingView-DVqrTjM4.js.map} +1 -1
- package/dist/assets/{WorkflowsView-TF6zcpi6.js → WorkflowsView-DpB66gWH.js} +2 -2
- package/dist/assets/{WorkflowsView-TF6zcpi6.js.map → WorkflowsView-DpB66gWH.js.map} +1 -1
- package/dist/assets/{cloud-CZc2nauc.js → cloud-bM1gshor.js} +2 -2
- package/dist/assets/{cloud-CZc2nauc.js.map → cloud-bM1gshor.js.map} +1 -1
- package/dist/assets/{collaboration.store-BkSXOsR4.js → collaboration.store-Ct7EpGqG.js} +2 -2
- package/dist/assets/{collaboration.store-BkSXOsR4.js.map → collaboration.store-Ct7EpGqG.js.map} +1 -1
- package/dist/assets/{index-CY2ZfL2U.js → index-BQ6Z7VRj.js} +4 -4
- package/dist/assets/{index-CY2ZfL2U.js.map → index-BQ6Z7VRj.js.map} +1 -1
- package/dist/assets/{nodeCreator.store-CmYeJsEL.js → nodeCreator.store-DAcGJEHy.js} +2 -2
- package/dist/assets/{nodeCreator.store-CmYeJsEL.js.map → nodeCreator.store-DAcGJEHy.js.map} +1 -1
- package/dist/assets/{templateActions-DvpFnju7.js → templateActions-F64sfZ3n.js} +2 -2
- package/dist/assets/{templateActions-DvpFnju7.js.map → templateActions-F64sfZ3n.js.map} +1 -1
- package/dist/assets/{useExecutionDebugging-6-sjTvWS.js → useExecutionDebugging-DuMp5DdQ.js} +2 -2
- package/dist/assets/{useExecutionDebugging-6-sjTvWS.js.map → useExecutionDebugging-DuMp5DdQ.js.map} +1 -1
- package/dist/assets/{useExecutionHelpers-BZpwMJs_.js → useExecutionHelpers-Dt-UJW97.js} +2 -2
- package/dist/assets/{useExecutionHelpers-BZpwMJs_.js.map → useExecutionHelpers-Dt-UJW97.js.map} +1 -1
- package/dist/assets/{usePushConnection-DI_JaC-X.js → usePushConnection-Kek6sJ0j.js} +2 -2
- package/dist/assets/{usePushConnection-DI_JaC-X.js.map → usePushConnection-Kek6sJ0j.js.map} +1 -1
- package/dist/assets/{useViewStacks-D-hnVv3F.js → useViewStacks-CSn_e3gA.js} +2 -2
- package/dist/assets/{useViewStacks-D-hnVv3F.js.map → useViewStacks-CSn_e3gA.js.map} +1 -1
- package/dist/assets/{useWorkflowActivate-lrYalAwm.js → useWorkflowActivate-Bl43vPgP.js} +2 -2
- package/dist/assets/{useWorkflowActivate-lrYalAwm.js.map → useWorkflowActivate-Bl43vPgP.js.map} +1 -1
- package/dist/index.html +1 -1
- package/package.json +1 -1
- package/dist/assets/CollectionParameter-CiMzJaXg.js.map +0 -1
- package/dist/assets/WorkflowExecutionsView-fiAM1R-f.js +0 -2
- package/dist/assets/WorkflowExecutionsView-fiAM1R-f.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SetupWorkflowFromTemplateView-BDUp9JWx.js","sources":["../../src/views/SetupWorkflowFromTemplateView/setupTemplate.store.ts","../../src/views/SetupWorkflowFromTemplateView/SetupWorkflowFromTemplateView.vue"],"sourcesContent":["import { defineStore } from 'pinia';\nimport { computed, ref } from 'vue';\nimport type { Router } from 'vue-router';\nimport { useCredentialsStore } from '@/stores/credentials.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useRootStore } from '@/stores/n8nRoot.store';\nimport { useTemplatesStore } from '@/stores/templates.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport type { INodeTypeDescription } from 'n8n-workflow';\nimport type { INodeUi } from '@/Interface';\nimport { VIEWS } from '@/constants';\nimport { createWorkflowFromTemplate } from '@/utils/templates/templateActions';\nimport { useExternalHooks } from '@/composables/useExternalHooks';\nimport { useTelemetry } from '@/composables/useTelemetry';\nimport { useCredentialSetupState } from '@/views/SetupWorkflowFromTemplateView/useCredentialSetupState';\nimport { tryToParseNumber } from '@/utils/typesUtils';\n\nexport type NodeAndType = {\n\tnode: INodeUi;\n\tnodeType: INodeTypeDescription;\n};\n\nexport type RequiredCredentials = {\n\tnode: INodeUi;\n\tcredentialName: string;\n\tcredentialType: string;\n};\n\nexport type AppCredentialCount = {\n\tappName: string;\n\tcount: number;\n};\n\n/**\n * Store for managing the state of the SetupWorkflowFromTemplateView\n */\nexport const useSetupTemplateStore = defineStore('setupTemplate', () => {\n\t//#region State\n\n\tconst templateId = ref<string>('');\n\tconst isLoading = ref(true);\n\tconst isSaving = ref(false);\n\n\t//#endregion State\n\n\tconst templatesStore = useTemplatesStore();\n\tconst nodeTypesStore = useNodeTypesStore();\n\tconst credentialsStore = useCredentialsStore();\n\tconst rootStore = useRootStore();\n\tconst workflowsStore = useWorkflowsStore();\n\n\t//#region Getters\n\n\tconst template = computed(() => {\n\t\treturn templateId.value ? templatesStore.getFullTemplateById(templateId.value) : null;\n\t});\n\n\tconst templateNodes = computed(() => {\n\t\treturn template.value?.workflow.nodes ?? [];\n\t});\n\n\tconst {\n\t\tappCredentials,\n\t\tcredentialOverrides,\n\t\tcredentialUsages,\n\t\tcredentialsByKey,\n\t\tnodesRequiringCredentialsSorted,\n\t\tnumFilledCredentials,\n\t\tselectedCredentialIdByKey,\n\t\tsetSelectedCredentialId,\n\t\tunsetSelectedCredential,\n\t} = useCredentialSetupState(templateNodes);\n\n\t//#endregion Getters\n\n\t//#region Actions\n\n\tconst setTemplateId = (id: string) => {\n\t\ttemplateId.value = id;\n\t};\n\n\tconst ignoredAutoFillCredentialTypes = new Set([\n\t\t'httpBasicAuth',\n\t\t'httpCustomAuth',\n\t\t'httpDigestAuth',\n\t\t'httpHeaderAuth',\n\t\t'oAuth1Api',\n\t\t'oAuth2Api',\n\t\t'httpQueryAuth',\n\t]);\n\n\t/**\n\t * Selects initial credentials for the template. Credentials\n\t * need to be loaded before this.\n\t */\n\tconst setInitialCredentialSelection = () => {\n\t\tfor (const credUsage of credentialUsages.value) {\n\t\t\tif (ignoredAutoFillCredentialTypes.has(credUsage.credentialType)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst availableCreds = credentialsStore.getCredentialsByType(credUsage.credentialType);\n\n\t\t\tif (availableCreds.length === 1) {\n\t\t\t\tselectedCredentialIdByKey.value[credUsage.key] = availableCreds[0].id;\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Loads the template if it hasn't been loaded yet.\n\t */\n\tconst loadTemplateIfNeeded = async () => {\n\t\tif (!!template.value || !templateId.value) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait templatesStore.fetchTemplateById(templateId.value);\n\n\t\tsetInitialCredentialSelection();\n\t};\n\n\t/**\n\t * Initializes the store for a specific template.\n\t */\n\tconst init = async () => {\n\t\tisLoading.value = true;\n\t\ttry {\n\t\t\tselectedCredentialIdByKey.value = {};\n\n\t\t\tawait Promise.all([\n\t\t\t\tcredentialsStore.fetchAllCredentials(),\n\t\t\t\tcredentialsStore.fetchCredentialTypes(false),\n\t\t\t\tnodeTypesStore.loadNodeTypesIfNotLoaded(),\n\t\t\t\tloadTemplateIfNeeded(),\n\t\t\t]);\n\n\t\t\tsetInitialCredentialSelection();\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t};\n\n\t/**\n\t * Skips the setup and goes directly to the workflow view.\n\t */\n\tconst skipSetup = async ({ router }: { router: Router }) => {\n\t\tconst externalHooks = useExternalHooks();\n\t\tconst telemetry = useTelemetry();\n\n\t\tawait externalHooks.run('templatesWorkflowView.openWorkflow', {\n\t\t\tsource: 'workflow',\n\t\t\ttemplate_id: templateId.value,\n\t\t\twf_template_repo_session_id: templatesStore.currentSessionId,\n\t\t});\n\n\t\ttelemetry.track('User closed cred setup', {\n\t\t\tcompleted: false,\n\t\t\tcreds_filled: 0,\n\t\t\tcreds_needed: credentialUsages.value.length,\n\t\t\tworkflow_id: null,\n\t\t});\n\n\t\t// Replace the URL so back button doesn't come back to this setup view\n\t\tawait router.replace({\n\t\t\tname: VIEWS.TEMPLATE_IMPORT,\n\t\t\tparams: { id: templateId.value },\n\t\t});\n\t};\n\n\t/**\n\t * Creates a workflow from the template and navigates to the workflow view.\n\t */\n\tconst createWorkflow = async (opts: { router: Router }) => {\n\t\tconst { router } = opts;\n\t\tconst telemetry = useTelemetry();\n\n\t\tif (!template.value) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tisSaving.value = true;\n\n\t\t\tconst createdWorkflow = await createWorkflowFromTemplate({\n\t\t\t\ttemplate: template.value,\n\t\t\t\tcredentialOverrides: credentialOverrides.value,\n\t\t\t\trootStore,\n\t\t\t\tworkflowsStore,\n\t\t\t\tnodeTypeProvider: nodeTypesStore,\n\t\t\t});\n\n\t\t\ttelemetry.track('User closed cred setup', {\n\t\t\t\tcompleted: true,\n\t\t\t\tcreds_filled: numFilledCredentials.value,\n\t\t\t\tcreds_needed: credentialUsages.value.length,\n\t\t\t\tworkflow_id: createdWorkflow.id,\n\t\t\t});\n\n\t\t\ttelemetry.track(\n\t\t\t\t'User inserted workflow template',\n\t\t\t\t{\n\t\t\t\t\tsource: 'workflow',\n\t\t\t\t\ttemplate_id: tryToParseNumber(templateId.value),\n\t\t\t\t\twf_template_repo_session_id: templatesStore.currentSessionId,\n\t\t\t\t},\n\t\t\t\t{ withPostHog: true },\n\t\t\t);\n\n\t\t\ttelemetry.track('User saved new workflow from template', {\n\t\t\t\ttemplate_id: tryToParseNumber(templateId.value),\n\t\t\t\tworkflow_id: createdWorkflow.id,\n\t\t\t\twf_template_repo_session_id: templatesStore.currentSessionId,\n\t\t\t});\n\n\t\t\t// Replace the URL so back button doesn't come back to this setup view\n\t\t\tawait router.replace({\n\t\t\t\tname: VIEWS.WORKFLOW,\n\t\t\t\tparams: { name: createdWorkflow.id },\n\t\t\t});\n\t\t} finally {\n\t\t\tisSaving.value = false;\n\t\t}\n\t};\n\n\t//#endregion Actions\n\n\treturn {\n\t\tcredentialsByKey,\n\t\tisLoading,\n\t\tisSaving,\n\t\tappCredentials,\n\t\tnodesRequiringCredentialsSorted,\n\t\ttemplate,\n\t\tcredentialUsages,\n\t\tselectedCredentialIdByKey,\n\t\tcredentialOverrides,\n\t\tnumFilledCredentials,\n\t\tcreateWorkflow,\n\t\tskipSetup,\n\t\tinit,\n\t\tloadTemplateIfNeeded,\n\t\tsetInitialCredentialSelection,\n\t\tsetTemplateId,\n\t\tsetSelectedCredentialId,\n\t\tunsetSelectedCredential,\n\t};\n});\n","<script setup lang=\"ts\">\nimport { computed, onBeforeMount, onMounted, watch } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { useSetupTemplateStore } from './setupTemplate.store';\nimport N8nHeading from 'n8n-design-system/components/N8nHeading';\nimport N8nLink from 'n8n-design-system/components/N8nLink';\nimport AppsRequiringCredsNotice from './AppsRequiringCredsNotice.vue';\nimport SetupTemplateFormStep from './SetupTemplateFormStep.vue';\nimport TemplatesView from '../TemplatesView.vue';\nimport { TEMPLATE_CREDENTIAL_SETUP_EXPERIMENT, VIEWS } from '@/constants';\nimport { useI18n } from '@/composables/useI18n';\nimport { usePostHog } from '@/stores/posthog.store';\n\n// Store\nconst setupTemplateStore = useSetupTemplateStore();\nconst i18n = useI18n();\nconst posthogStore = usePostHog();\n\n// Router\nconst route = useRoute();\nconst router = useRouter();\n\n//#region Computed\n\nconst templateId = computed(() =>\n\tArray.isArray(route.params.id) ? route.params.id[0] : route.params.id,\n);\nconst title = computed(() => setupTemplateStore.template?.name ?? 'unknown');\nconst isReady = computed(() => !setupTemplateStore.isLoading);\n\nconst skipSetupUrl = computed(() => {\n\tconst resolvedRoute = router.resolve({\n\t\tname: VIEWS.TEMPLATE_IMPORT,\n\t\tparams: { id: templateId.value },\n\t});\n\treturn resolvedRoute.fullPath;\n});\n\n//#endregion Computed\n\n//#region Watchers\n\nwatch(templateId, async (newTemplateId) => {\n\tsetupTemplateStore.setTemplateId(newTemplateId);\n\tawait setupTemplateStore.loadTemplateIfNeeded();\n});\n\n//#endregion Watchers\n\n//#region Methods\n\nconst onSkipSetup = async (event: MouseEvent) => {\n\tevent.preventDefault();\n\n\tawait setupTemplateStore.skipSetup({\n\t\trouter,\n\t});\n};\n\nconst skipIfTemplateHasNoCreds = async () => {\n\tconst isTemplateLoaded = !!setupTemplateStore.template;\n\tif (!isTemplateLoaded) {\n\t\treturn false;\n\t}\n\n\tif (setupTemplateStore.credentialUsages.length === 0) {\n\t\tawait setupTemplateStore.skipSetup({\n\t\t\trouter,\n\t\t});\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n//#endregion Methods\n\n//#region Lifecycle hooks\n\nsetupTemplateStore.setTemplateId(templateId.value);\n\nonBeforeMount(async () => {\n\tif (!posthogStore.isFeatureEnabled(TEMPLATE_CREDENTIAL_SETUP_EXPERIMENT)) {\n\t\tvoid router.replace({\n\t\t\tname: VIEWS.TEMPLATE_IMPORT,\n\t\t\tparams: { id: templateId.value },\n\t\t});\n\t}\n});\n\nonMounted(async () => {\n\tawait setupTemplateStore.init();\n\tawait skipIfTemplateHasNoCreds();\n});\n\n//#endregion Lifecycle hooks\n</script>\n\n<template>\n\t<TemplatesView :go-back-enabled=\"true\">\n\t\t<template #header>\n\t\t\t<N8nHeading v-if=\"isReady\" tag=\"h1\" size=\"2xlarge\"\n\t\t\t\t>{{ i18n.baseText('templateSetup.title', { interpolate: { name: title } }) }}\n\t\t\t</N8nHeading>\n\t\t\t<n8n-loading v-else variant=\"h1\" />\n\t\t</template>\n\n\t\t<template #content>\n\t\t\t<div :class=\"$style.grid\">\n\t\t\t\t<div :class=\"$style.notice\" data-test-id=\"info-callout\">\n\t\t\t\t\t<AppsRequiringCredsNotice\n\t\t\t\t\t\tv-if=\"isReady\"\n\t\t\t\t\t\t:app-credentials=\"setupTemplateStore.appCredentials\"\n\t\t\t\t\t/>\n\t\t\t\t\t<n8n-loading v-else variant=\"p\" />\n\t\t\t\t</div>\n\n\t\t\t\t<div>\n\t\t\t\t\t<ol v-if=\"isReady\" :class=\"$style.appCredentialsContainer\">\n\t\t\t\t\t\t<SetupTemplateFormStep\n\t\t\t\t\t\t\tv-for=\"(credentials, index) in setupTemplateStore.credentialUsages\"\n\t\t\t\t\t\t\t:key=\"credentials.key\"\n\t\t\t\t\t\t\t:class=\"$style.appCredential\"\n\t\t\t\t\t\t\t:order=\"index + 1\"\n\t\t\t\t\t\t\t:credentials=\"credentials\"\n\t\t\t\t\t\t\t:selected-credential-id=\"\n\t\t\t\t\t\t\t\tsetupTemplateStore.selectedCredentialIdByKey[credentials.key]\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t@credential-selected=\"\n\t\t\t\t\t\t\t\tsetupTemplateStore.setSelectedCredentialId(\n\t\t\t\t\t\t\t\t\t$event.credentialUsageKey,\n\t\t\t\t\t\t\t\t\t$event.credentialId,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t@credential-deselected=\"\n\t\t\t\t\t\t\t\tsetupTemplateStore.unsetSelectedCredential($event.credentialUsageKey)\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ol>\n\t\t\t\t\t<div v-else :class=\"$style.appCredentialsContainer\">\n\t\t\t\t\t\t<n8n-loading :class=\"$style.appCredential\" variant=\"p\" :rows=\"3\" />\n\t\t\t\t\t\t<n8n-loading :class=\"$style.appCredential\" variant=\"p\" :rows=\"3\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div :class=\"$style.actions\">\n\t\t\t\t\t<N8nLink :href=\"skipSetupUrl\" :new-window=\"false\" @click=\"onSkipSetup($event)\">{{\n\t\t\t\t\t\ti18n.baseText('templateSetup.skip')\n\t\t\t\t\t}}</N8nLink>\n\n\t\t\t\t\t<n8n-tooltip\n\t\t\t\t\t\tv-if=\"isReady\"\n\t\t\t\t\t\t:content=\"i18n.baseText('templateSetup.continue.button.fillRemaining')\"\n\t\t\t\t\t\t:disabled=\"setupTemplateStore.numFilledCredentials > 0\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<n8n-button\n\t\t\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t\t\t:label=\"i18n.baseText('templateSetup.continue.button')\"\n\t\t\t\t\t\t\t:disabled=\"\n\t\t\t\t\t\t\t\tsetupTemplateStore.isSaving || setupTemplateStore.numFilledCredentials === 0\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\tdata-test-id=\"continue-button\"\n\t\t\t\t\t\t\t@click=\"setupTemplateStore.createWorkflow({ router })\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</n8n-tooltip>\n\t\t\t\t\t<div v-else>\n\t\t\t\t\t\t<n8n-loading variant=\"button\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</template>\n\t</TemplatesView>\n</template>\n\n<style lang=\"scss\" module>\n.grid {\n\tmargin: 0 auto;\n\tdisplay: flex;\n\tflex-direction: column;\n\tjustify-content: center;\n\tmax-width: 768px;\n}\n\n.notice {\n\tmargin-bottom: var(--spacing-2xl);\n}\n\n.appCredentialsContainer {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--spacing-2xl);\n}\n\n.appCredential:not(:last-of-type) {\n\tpadding-bottom: var(--spacing-2xl);\n\tborder-bottom: 1px solid var(--color-foreground-light);\n}\n\n.actions {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\tmargin-top: var(--spacing-3xl);\n\tmargin-bottom: var(--spacing-3xl);\n}\n</style>\n"],"names":["useSetupTemplateStore","defineStore","templateId","ref","isLoading","isSaving","templatesStore","useTemplatesStore","nodeTypesStore","useNodeTypesStore","credentialsStore","useCredentialsStore","rootStore","useRootStore","workflowsStore","useWorkflowsStore","template","computed","templateNodes","_a","appCredentials","credentialOverrides","credentialUsages","credentialsByKey","nodesRequiringCredentialsSorted","numFilledCredentials","selectedCredentialIdByKey","setSelectedCredentialId","unsetSelectedCredential","useCredentialSetupState","setTemplateId","id","ignoredAutoFillCredentialTypes","setInitialCredentialSelection","credUsage","availableCreds","loadTemplateIfNeeded","opts","router","telemetry","useTelemetry","createdWorkflow","createWorkflowFromTemplate","tryToParseNumber","VIEWS","externalHooks","useExternalHooks","setupTemplateStore","i18n","useI18n","posthogStore","usePostHog","route","useRoute","useRouter","title","isReady","skipSetupUrl","watch","newTemplateId","onSkipSetup","event","skipIfTemplateHasNoCreds","onBeforeMount","TEMPLATE_CREDENTIAL_SETUP_EXPERIMENT","onMounted"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SetupWorkflowFromTemplateView-C2E8A8g4.js","sources":["../../src/views/SetupWorkflowFromTemplateView/setupTemplate.store.ts","../../src/views/SetupWorkflowFromTemplateView/SetupWorkflowFromTemplateView.vue"],"sourcesContent":["import { defineStore } from 'pinia';\nimport { computed, ref } from 'vue';\nimport type { Router } from 'vue-router';\nimport { useCredentialsStore } from '@/stores/credentials.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useRootStore } from '@/stores/n8nRoot.store';\nimport { useTemplatesStore } from '@/stores/templates.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport type { INodeTypeDescription } from 'n8n-workflow';\nimport type { INodeUi } from '@/Interface';\nimport { VIEWS } from '@/constants';\nimport { createWorkflowFromTemplate } from '@/utils/templates/templateActions';\nimport { useExternalHooks } from '@/composables/useExternalHooks';\nimport { useTelemetry } from '@/composables/useTelemetry';\nimport { useCredentialSetupState } from '@/views/SetupWorkflowFromTemplateView/useCredentialSetupState';\nimport { tryToParseNumber } from '@/utils/typesUtils';\n\nexport type NodeAndType = {\n\tnode: INodeUi;\n\tnodeType: INodeTypeDescription;\n};\n\nexport type RequiredCredentials = {\n\tnode: INodeUi;\n\tcredentialName: string;\n\tcredentialType: string;\n};\n\nexport type AppCredentialCount = {\n\tappName: string;\n\tcount: number;\n};\n\n/**\n * Store for managing the state of the SetupWorkflowFromTemplateView\n */\nexport const useSetupTemplateStore = defineStore('setupTemplate', () => {\n\t//#region State\n\n\tconst templateId = ref<string>('');\n\tconst isLoading = ref(true);\n\tconst isSaving = ref(false);\n\n\t//#endregion State\n\n\tconst templatesStore = useTemplatesStore();\n\tconst nodeTypesStore = useNodeTypesStore();\n\tconst credentialsStore = useCredentialsStore();\n\tconst rootStore = useRootStore();\n\tconst workflowsStore = useWorkflowsStore();\n\n\t//#region Getters\n\n\tconst template = computed(() => {\n\t\treturn templateId.value ? templatesStore.getFullTemplateById(templateId.value) : null;\n\t});\n\n\tconst templateNodes = computed(() => {\n\t\treturn template.value?.workflow.nodes ?? [];\n\t});\n\n\tconst {\n\t\tappCredentials,\n\t\tcredentialOverrides,\n\t\tcredentialUsages,\n\t\tcredentialsByKey,\n\t\tnodesRequiringCredentialsSorted,\n\t\tnumFilledCredentials,\n\t\tselectedCredentialIdByKey,\n\t\tsetSelectedCredentialId,\n\t\tunsetSelectedCredential,\n\t} = useCredentialSetupState(templateNodes);\n\n\t//#endregion Getters\n\n\t//#region Actions\n\n\tconst setTemplateId = (id: string) => {\n\t\ttemplateId.value = id;\n\t};\n\n\tconst ignoredAutoFillCredentialTypes = new Set([\n\t\t'httpBasicAuth',\n\t\t'httpCustomAuth',\n\t\t'httpDigestAuth',\n\t\t'httpHeaderAuth',\n\t\t'oAuth1Api',\n\t\t'oAuth2Api',\n\t\t'httpQueryAuth',\n\t]);\n\n\t/**\n\t * Selects initial credentials for the template. Credentials\n\t * need to be loaded before this.\n\t */\n\tconst setInitialCredentialSelection = () => {\n\t\tfor (const credUsage of credentialUsages.value) {\n\t\t\tif (ignoredAutoFillCredentialTypes.has(credUsage.credentialType)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst availableCreds = credentialsStore.getCredentialsByType(credUsage.credentialType);\n\n\t\t\tif (availableCreds.length === 1) {\n\t\t\t\tselectedCredentialIdByKey.value[credUsage.key] = availableCreds[0].id;\n\t\t\t}\n\t\t}\n\t};\n\n\t/**\n\t * Loads the template if it hasn't been loaded yet.\n\t */\n\tconst loadTemplateIfNeeded = async () => {\n\t\tif (!!template.value || !templateId.value) {\n\t\t\treturn;\n\t\t}\n\n\t\tawait templatesStore.fetchTemplateById(templateId.value);\n\n\t\tsetInitialCredentialSelection();\n\t};\n\n\t/**\n\t * Initializes the store for a specific template.\n\t */\n\tconst init = async () => {\n\t\tisLoading.value = true;\n\t\ttry {\n\t\t\tselectedCredentialIdByKey.value = {};\n\n\t\t\tawait Promise.all([\n\t\t\t\tcredentialsStore.fetchAllCredentials(),\n\t\t\t\tcredentialsStore.fetchCredentialTypes(false),\n\t\t\t\tnodeTypesStore.loadNodeTypesIfNotLoaded(),\n\t\t\t\tloadTemplateIfNeeded(),\n\t\t\t]);\n\n\t\t\tsetInitialCredentialSelection();\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t};\n\n\t/**\n\t * Skips the setup and goes directly to the workflow view.\n\t */\n\tconst skipSetup = async ({ router }: { router: Router }) => {\n\t\tconst externalHooks = useExternalHooks();\n\t\tconst telemetry = useTelemetry();\n\n\t\tawait externalHooks.run('templatesWorkflowView.openWorkflow', {\n\t\t\tsource: 'workflow',\n\t\t\ttemplate_id: templateId.value,\n\t\t\twf_template_repo_session_id: templatesStore.currentSessionId,\n\t\t});\n\n\t\ttelemetry.track('User closed cred setup', {\n\t\t\tcompleted: false,\n\t\t\tcreds_filled: 0,\n\t\t\tcreds_needed: credentialUsages.value.length,\n\t\t\tworkflow_id: null,\n\t\t});\n\n\t\t// Replace the URL so back button doesn't come back to this setup view\n\t\tawait router.replace({\n\t\t\tname: VIEWS.TEMPLATE_IMPORT,\n\t\t\tparams: { id: templateId.value },\n\t\t});\n\t};\n\n\t/**\n\t * Creates a workflow from the template and navigates to the workflow view.\n\t */\n\tconst createWorkflow = async (opts: { router: Router }) => {\n\t\tconst { router } = opts;\n\t\tconst telemetry = useTelemetry();\n\n\t\tif (!template.value) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tisSaving.value = true;\n\n\t\t\tconst createdWorkflow = await createWorkflowFromTemplate({\n\t\t\t\ttemplate: template.value,\n\t\t\t\tcredentialOverrides: credentialOverrides.value,\n\t\t\t\trootStore,\n\t\t\t\tworkflowsStore,\n\t\t\t\tnodeTypeProvider: nodeTypesStore,\n\t\t\t});\n\n\t\t\ttelemetry.track('User closed cred setup', {\n\t\t\t\tcompleted: true,\n\t\t\t\tcreds_filled: numFilledCredentials.value,\n\t\t\t\tcreds_needed: credentialUsages.value.length,\n\t\t\t\tworkflow_id: createdWorkflow.id,\n\t\t\t});\n\n\t\t\ttelemetry.track(\n\t\t\t\t'User inserted workflow template',\n\t\t\t\t{\n\t\t\t\t\tsource: 'workflow',\n\t\t\t\t\ttemplate_id: tryToParseNumber(templateId.value),\n\t\t\t\t\twf_template_repo_session_id: templatesStore.currentSessionId,\n\t\t\t\t},\n\t\t\t\t{ withPostHog: true },\n\t\t\t);\n\n\t\t\ttelemetry.track('User saved new workflow from template', {\n\t\t\t\ttemplate_id: tryToParseNumber(templateId.value),\n\t\t\t\tworkflow_id: createdWorkflow.id,\n\t\t\t\twf_template_repo_session_id: templatesStore.currentSessionId,\n\t\t\t});\n\n\t\t\t// Replace the URL so back button doesn't come back to this setup view\n\t\t\tawait router.replace({\n\t\t\t\tname: VIEWS.WORKFLOW,\n\t\t\t\tparams: { name: createdWorkflow.id },\n\t\t\t});\n\t\t} finally {\n\t\t\tisSaving.value = false;\n\t\t}\n\t};\n\n\t//#endregion Actions\n\n\treturn {\n\t\tcredentialsByKey,\n\t\tisLoading,\n\t\tisSaving,\n\t\tappCredentials,\n\t\tnodesRequiringCredentialsSorted,\n\t\ttemplate,\n\t\tcredentialUsages,\n\t\tselectedCredentialIdByKey,\n\t\tcredentialOverrides,\n\t\tnumFilledCredentials,\n\t\tcreateWorkflow,\n\t\tskipSetup,\n\t\tinit,\n\t\tloadTemplateIfNeeded,\n\t\tsetInitialCredentialSelection,\n\t\tsetTemplateId,\n\t\tsetSelectedCredentialId,\n\t\tunsetSelectedCredential,\n\t};\n});\n","<script setup lang=\"ts\">\nimport { computed, onBeforeMount, onMounted, watch } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { useSetupTemplateStore } from './setupTemplate.store';\nimport N8nHeading from 'n8n-design-system/components/N8nHeading';\nimport N8nLink from 'n8n-design-system/components/N8nLink';\nimport AppsRequiringCredsNotice from './AppsRequiringCredsNotice.vue';\nimport SetupTemplateFormStep from './SetupTemplateFormStep.vue';\nimport TemplatesView from '../TemplatesView.vue';\nimport { TEMPLATE_CREDENTIAL_SETUP_EXPERIMENT, VIEWS } from '@/constants';\nimport { useI18n } from '@/composables/useI18n';\nimport { usePostHog } from '@/stores/posthog.store';\n\n// Store\nconst setupTemplateStore = useSetupTemplateStore();\nconst i18n = useI18n();\nconst posthogStore = usePostHog();\n\n// Router\nconst route = useRoute();\nconst router = useRouter();\n\n//#region Computed\n\nconst templateId = computed(() =>\n\tArray.isArray(route.params.id) ? route.params.id[0] : route.params.id,\n);\nconst title = computed(() => setupTemplateStore.template?.name ?? 'unknown');\nconst isReady = computed(() => !setupTemplateStore.isLoading);\n\nconst skipSetupUrl = computed(() => {\n\tconst resolvedRoute = router.resolve({\n\t\tname: VIEWS.TEMPLATE_IMPORT,\n\t\tparams: { id: templateId.value },\n\t});\n\treturn resolvedRoute.fullPath;\n});\n\n//#endregion Computed\n\n//#region Watchers\n\nwatch(templateId, async (newTemplateId) => {\n\tsetupTemplateStore.setTemplateId(newTemplateId);\n\tawait setupTemplateStore.loadTemplateIfNeeded();\n});\n\n//#endregion Watchers\n\n//#region Methods\n\nconst onSkipSetup = async (event: MouseEvent) => {\n\tevent.preventDefault();\n\n\tawait setupTemplateStore.skipSetup({\n\t\trouter,\n\t});\n};\n\nconst skipIfTemplateHasNoCreds = async () => {\n\tconst isTemplateLoaded = !!setupTemplateStore.template;\n\tif (!isTemplateLoaded) {\n\t\treturn false;\n\t}\n\n\tif (setupTemplateStore.credentialUsages.length === 0) {\n\t\tawait setupTemplateStore.skipSetup({\n\t\t\trouter,\n\t\t});\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n//#endregion Methods\n\n//#region Lifecycle hooks\n\nsetupTemplateStore.setTemplateId(templateId.value);\n\nonBeforeMount(async () => {\n\tif (!posthogStore.isFeatureEnabled(TEMPLATE_CREDENTIAL_SETUP_EXPERIMENT)) {\n\t\tvoid router.replace({\n\t\t\tname: VIEWS.TEMPLATE_IMPORT,\n\t\t\tparams: { id: templateId.value },\n\t\t});\n\t}\n});\n\nonMounted(async () => {\n\tawait setupTemplateStore.init();\n\tawait skipIfTemplateHasNoCreds();\n});\n\n//#endregion Lifecycle hooks\n</script>\n\n<template>\n\t<TemplatesView :go-back-enabled=\"true\">\n\t\t<template #header>\n\t\t\t<N8nHeading v-if=\"isReady\" tag=\"h1\" size=\"2xlarge\"\n\t\t\t\t>{{ i18n.baseText('templateSetup.title', { interpolate: { name: title } }) }}\n\t\t\t</N8nHeading>\n\t\t\t<n8n-loading v-else variant=\"h1\" />\n\t\t</template>\n\n\t\t<template #content>\n\t\t\t<div :class=\"$style.grid\">\n\t\t\t\t<div :class=\"$style.notice\" data-test-id=\"info-callout\">\n\t\t\t\t\t<AppsRequiringCredsNotice\n\t\t\t\t\t\tv-if=\"isReady\"\n\t\t\t\t\t\t:app-credentials=\"setupTemplateStore.appCredentials\"\n\t\t\t\t\t/>\n\t\t\t\t\t<n8n-loading v-else variant=\"p\" />\n\t\t\t\t</div>\n\n\t\t\t\t<div>\n\t\t\t\t\t<ol v-if=\"isReady\" :class=\"$style.appCredentialsContainer\">\n\t\t\t\t\t\t<SetupTemplateFormStep\n\t\t\t\t\t\t\tv-for=\"(credentials, index) in setupTemplateStore.credentialUsages\"\n\t\t\t\t\t\t\t:key=\"credentials.key\"\n\t\t\t\t\t\t\t:class=\"$style.appCredential\"\n\t\t\t\t\t\t\t:order=\"index + 1\"\n\t\t\t\t\t\t\t:credentials=\"credentials\"\n\t\t\t\t\t\t\t:selected-credential-id=\"\n\t\t\t\t\t\t\t\tsetupTemplateStore.selectedCredentialIdByKey[credentials.key]\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t@credential-selected=\"\n\t\t\t\t\t\t\t\tsetupTemplateStore.setSelectedCredentialId(\n\t\t\t\t\t\t\t\t\t$event.credentialUsageKey,\n\t\t\t\t\t\t\t\t\t$event.credentialId,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\t@credential-deselected=\"\n\t\t\t\t\t\t\t\tsetupTemplateStore.unsetSelectedCredential($event.credentialUsageKey)\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ol>\n\t\t\t\t\t<div v-else :class=\"$style.appCredentialsContainer\">\n\t\t\t\t\t\t<n8n-loading :class=\"$style.appCredential\" variant=\"p\" :rows=\"3\" />\n\t\t\t\t\t\t<n8n-loading :class=\"$style.appCredential\" variant=\"p\" :rows=\"3\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div :class=\"$style.actions\">\n\t\t\t\t\t<N8nLink :href=\"skipSetupUrl\" :new-window=\"false\" @click=\"onSkipSetup($event)\">{{\n\t\t\t\t\t\ti18n.baseText('templateSetup.skip')\n\t\t\t\t\t}}</N8nLink>\n\n\t\t\t\t\t<n8n-tooltip\n\t\t\t\t\t\tv-if=\"isReady\"\n\t\t\t\t\t\t:content=\"i18n.baseText('templateSetup.continue.button.fillRemaining')\"\n\t\t\t\t\t\t:disabled=\"setupTemplateStore.numFilledCredentials > 0\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<n8n-button\n\t\t\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t\t\t:label=\"i18n.baseText('templateSetup.continue.button')\"\n\t\t\t\t\t\t\t:disabled=\"\n\t\t\t\t\t\t\t\tsetupTemplateStore.isSaving || setupTemplateStore.numFilledCredentials === 0\n\t\t\t\t\t\t\t\"\n\t\t\t\t\t\t\tdata-test-id=\"continue-button\"\n\t\t\t\t\t\t\t@click=\"setupTemplateStore.createWorkflow({ router })\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</n8n-tooltip>\n\t\t\t\t\t<div v-else>\n\t\t\t\t\t\t<n8n-loading variant=\"button\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</template>\n\t</TemplatesView>\n</template>\n\n<style lang=\"scss\" module>\n.grid {\n\tmargin: 0 auto;\n\tdisplay: flex;\n\tflex-direction: column;\n\tjustify-content: center;\n\tmax-width: 768px;\n}\n\n.notice {\n\tmargin-bottom: var(--spacing-2xl);\n}\n\n.appCredentialsContainer {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--spacing-2xl);\n}\n\n.appCredential:not(:last-of-type) {\n\tpadding-bottom: var(--spacing-2xl);\n\tborder-bottom: 1px solid var(--color-foreground-light);\n}\n\n.actions {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\tmargin-top: var(--spacing-3xl);\n\tmargin-bottom: var(--spacing-3xl);\n}\n</style>\n"],"names":["useSetupTemplateStore","defineStore","templateId","ref","isLoading","isSaving","templatesStore","useTemplatesStore","nodeTypesStore","useNodeTypesStore","credentialsStore","useCredentialsStore","rootStore","useRootStore","workflowsStore","useWorkflowsStore","template","computed","templateNodes","_a","appCredentials","credentialOverrides","credentialUsages","credentialsByKey","nodesRequiringCredentialsSorted","numFilledCredentials","selectedCredentialIdByKey","setSelectedCredentialId","unsetSelectedCredential","useCredentialSetupState","setTemplateId","id","ignoredAutoFillCredentialTypes","setInitialCredentialSelection","credUsage","availableCreds","loadTemplateIfNeeded","opts","router","telemetry","useTelemetry","createdWorkflow","createWorkflowFromTemplate","tryToParseNumber","VIEWS","externalHooks","useExternalHooks","setupTemplateStore","i18n","useI18n","posthogStore","usePostHog","route","useRoute","useRouter","title","isReady","skipSetupUrl","watch","newTemplateId","onSkipSetup","event","skipIfTemplateHasNoCreds","onBeforeMount","TEMPLATE_CREDENTIAL_SETUP_EXPERIMENT","onMounted"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{L as A,A as V}from"./AuthView-
|
|
2
|
-
//# sourceMappingURL=SigninView-
|
|
1
|
+
import{L as A,A as V}from"./AuthView-DfyvaM6i.js";import{u as T,cN as I,a as R,M as E,cO as v,R as L,i as N,b as B,V as D,cP as U}from"./index-BQ6Z7VRj.js";import{m as _}from"./pinia-Dh4cxKZ0.js";import{G as $,l as s,m as k,p as i,U as d,I as a,O as h,S as g,T as m,M as c,R as n,ag as r}from"./vendor-CUQSof8H.js";import{_ as F}from"./n8n-DT_bOwuZ.js";import"./axios-Mm4CS0gO.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-BiGWdRh4.js";import"./lodash-es-BFdF4Er8.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-C0ZgbPvs.js";import"./vue-i18n-CG6eDDlD.js";import"./uuid-SoommWqA.js";import"./luxon-CLwAIbs0.js";import"./@n8n/codemirror-lang-sql-x14jMqbG.js";import"./@lezer/common-B6ct0j_v.js";import"./prettier-bS6l4Vb1.js";import"./@jsplumb/util-DS-9vq_E.js";import"./@jsplumb/core-CVBraiyY.js";import"./@jsplumb/common-CF-b-6-M.js";import"./@jsplumb/connector-bezier-BGU0Ovbw.js";import"./@jsplumb/browser-ui-BVF2KoJK.js";import"./codemirror-lang-html-n8n-DcTmlMkf.js";import"./@n8n/codemirror-lang-Qkdx7NoQ.js";import"./esprima-next-nhoSXAeq.js";import"./fast-json-stable-stringify-wY6jAr7b.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-DOxvr88t.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";const u={MFA_TOKEN:"MFA_TOKEN",MFA_RECOVERY_CODE:"MFA_RECOVERY_CODE"},P=$({name:"MfaView",components:{Logo:A},props:{reportError:Boolean},setup(){return{...T()}},data(){return{hasAnyChanges:!1,formBus:I,formInputs:null,showRecoveryCodeForm:!1,verifyingMfaToken:!1,formError:""}},async mounted(){this.formInputs=[this.mfaTokenFieldWithDefaults()]},computed:{..._(R)},methods:{onRecoveryCodeClick(){this.formError="",this.showRecoveryCodeForm=!0,this.hasAnyChanges=!1,this.formInputs=[this.mfaRecoveryCodeFieldWithDefaults()],this.$emit("onFormChanged",u.MFA_RECOVERY_CODE)},onBackClick(){if(!this.showRecoveryCodeForm){this.$emit("onBackClick",u.MFA_TOKEN);return}this.showRecoveryCodeForm=!1,this.hasAnyChanges=!0,this.formInputs=[this.mfaTokenFieldWithDefaults()],this.$emit("onBackClick",u.MFA_RECOVERY_CODE)},onInput({target:{value:e,name:o}}){const l=o==="token"?E:v;if(e.length!==l){this.hasAnyChanges=!1;return}this.verifyingMfaToken=!0,this.hasAnyChanges=!0,this.onSubmit({token:e,recoveryCode:e}).catch(()=>{}).finally(()=>this.verifyingMfaToken=!1)},async onSubmit(e){this.formError=this.showRecoveryCodeForm?this.$locale.baseText("mfa.recovery.invalid"):this.$locale.baseText("mfa.code.invalid"),this.$emit("submit",e)},onSaveClick(){this.formBus.emit("submit")},mfaTokenFieldWithDefaults(){return this.formField("token",this.$locale.baseText("mfa.code.input.label"),this.$locale.baseText("mfa.code.input.placeholder"),E)},mfaRecoveryCodeFieldWithDefaults(){return this.formField("recoveryCode",this.$locale.baseText("mfa.recovery.input.label"),this.$locale.baseText("mfa.recovery.input.placeholder"),v)},formField(e,o,t,l,f=!0){return{name:e,initialValue:"",properties:{label:o,placeholder:t,maxlength:l,capitalize:!0,validateOnBlur:!1,focusInitially:f}}}}}),W="_container_1mdjt_5",z="_logoContainer_1mdjt_16",j="_formContainer_1mdjt_21",G="_headerContainer_1mdjt_25",H="_formError_1mdjt_30",q="_recoveryCodeLink_1mdjt_34",Y="_infoBox_1mdjt_38",K={container:W,logoContainer:z,formContainer:j,headerContainer:G,formError:H,recoveryCodeLink:q,infoBox:Y};function Q(e,o,t,l,f,M){const p=r("Logo"),C=r("n8n-heading"),S=r("n8n-form-inputs"),b=r("n8n-text"),w=r("n8n-button"),O=r("n8n-card");return s(),k("div",{class:a(e.$style.container)},[i("div",{class:a(e.$style.logoContainer)},[d(p)],2),d(O,null,{default:h(()=>[i("div",{class:a(e.$style.headerContainer)},[d(C,{size:"xlarge",color:"text-dark"},{default:h(()=>[g(m(e.showRecoveryCodeForm?e.$locale.baseText("mfa.recovery.modal.title"):e.$locale.baseText("mfa.code.modal.title")),1)]),_:1})],2),i("div",{class:a([e.$style.formContainer,e.reportError?e.$style.formError:""])},[e.formInputs?(s(),c(S,{key:0,"data-test-id":"mfa-login-form",inputs:e.formInputs,"event-bus":e.formBus,onInput:e.onInput,onSubmit:e.onSubmit},null,8,["inputs","event-bus","onInput","onSubmit"])):n("",!0),i("div",{class:a(e.$style.infoBox)},[!e.showRecoveryCodeForm&&!e.reportError?(s(),c(b,{key:0,size:"small",color:"text-base",bold:!1},{default:h(()=>[g(m(e.$locale.baseText("mfa.code.input.info"))+" ",1),i("a",{"data-test-id":"mfa-enter-recovery-code-button",onClick:o[0]||(o[0]=(...y)=>e.onRecoveryCodeClick&&e.onRecoveryCodeClick(...y))},m(e.$locale.baseText("mfa.code.input.info.action")),1)]),_:1})):n("",!0),e.reportError?(s(),c(b,{key:1,color:"danger",size:"small"},{default:h(()=>[g(m(e.formError)+" ",1),e.showRecoveryCodeForm?n("",!0):(s(),k("a",{key:0,class:a(e.$style.recoveryCodeLink),onClick:o[1]||(o[1]=(...y)=>e.onRecoveryCodeClick&&e.onRecoveryCodeClick(...y))},m(e.$locale.baseText("mfa.recovery.input.info.action")),3))]),_:1})):n("",!0)],2)],2),i("div",null,[d(w,{float:"right",loading:e.verifyingMfaToken,label:e.showRecoveryCodeForm?e.$locale.baseText("mfa.recovery.button.verify"):e.$locale.baseText("mfa.code.button.continue"),size:"large",disabled:!e.hasAnyChanges,onClick:e.onSaveClick},null,8,["loading","label","disabled","onClick"]),d(w,{float:"left",label:e.$locale.baseText("mfa.button.back"),size:"large",type:"tertiary",onClick:e.onBackClick},null,8,["label","onClick"])])]),_:1})],2)}const X={$style:K},J=F(P,[["render",Q],["__cssModules",X]]),Z=$({name:"SigninView",components:{AuthView:V,MfaView:J},setup(){return{...T()}},data(){return{FORM_CONFIG:{},loading:!1,showMfaView:!1,email:"",password:"",reportError:!1}},computed:{..._(R,B,N,L),userHasMfaEnabled(){var e;return!!((e=this.usersStore.currentUser)!=null&&e.mfaEnabled)}},mounted(){let e=this.$locale.baseText("auth.email");const o=this.settingsStore.ldapLoginLabel,t=this.settingsStore.isLdapLoginEnabled;t&&o&&(e=o),this.FORM_CONFIG={title:this.$locale.baseText("auth.signin"),buttonText:this.$locale.baseText("auth.signin"),redirectText:this.$locale.baseText("forgotPassword"),inputs:[{name:"email",properties:{label:e,type:"email",required:!0,...!t&&{validationRules:[{name:"VALID_EMAIL"}]},showRequiredAsterisk:!1,validateOnBlur:!1,autocomplete:"email",capitalize:!0}},{name:"password",properties:{label:this.$locale.baseText("auth.password"),type:"password",required:!0,showRequiredAsterisk:!1,validateOnBlur:!1,autocomplete:"current-password",capitalize:!0}}]},this.settingsStore.isDesktopDeployment||(this.FORM_CONFIG.redirectLink="/forgot-password")},methods:{async onMFASubmitted(e){await this.login({email:this.email,password:this.password,token:e.token,recoveryCode:e.recoveryCode})},async onEmailPasswordSubmitted(e){await this.login(e)},isRedirectSafe(){const e=this.getRedirectQueryParameter();return e.startsWith("/")||e.startsWith(window.location.origin)},getRedirectQueryParameter(){var o,t;let e="";return typeof((o=this.$route.query)==null?void 0:o.redirect)=="string"&&(e=decodeURIComponent((t=this.$route.query)==null?void 0:t.redirect)),e},async login(e){try{if(this.loading=!0,await this.usersStore.loginWithCreds({email:e.email,password:e.password,mfaToken:e.token,mfaRecoveryCode:e.recoveryCode}),this.loading=!1,this.settingsStore.isCloudDeployment)try{await this.cloudPlanStore.checkForCloudPlanData()}catch(o){console.warn("Failed to check for cloud plan data",o)}if(await this.settingsStore.getSettings(),this.clearAllStickyNotifications(),this.checkRecoveryCodesLeft(),this.$telemetry.track("User attempted to login",{result:this.showMfaView?"mfa_success":"success"}),this.isRedirectSafe()){const o=this.getRedirectQueryParameter();if(o.startsWith("http")){window.location.href=o;return}this.$router.push(o);return}await this.$router.push({name:D.HOMEPAGE})}catch(o){if(o.errorCode===U){this.showMfaView=!0,this.cacheCredentials(e);return}if(this.$telemetry.track("User attempted to login",{result:this.showMfaView?"mfa_token_rejected":"credentials_error"}),!this.showMfaView){this.showError(o,this.$locale.baseText("auth.signin.error")),this.loading=!1;return}this.reportError=!0}},onBackClick(e){this.reportError=!1,e===u.MFA_TOKEN&&(this.showMfaView=!1,this.loading=!1)},onFormChanged(e){e===u.MFA_RECOVERY_CODE&&(this.reportError=!1)},cacheCredentials(e){this.email=e.email,this.password=e.password},checkRecoveryCodesLeft(){if(this.usersStore.currentUser){const{hasRecoveryCodesLeft:e,mfaEnabled:o}=this.usersStore.currentUser;o&&!e&&this.showToast({title:this.$locale.baseText("settings.mfa.toast.noRecoveryCodeLeft.title"),message:this.$locale.baseText("settings.mfa.toast.noRecoveryCodeLeft.message"),type:"info",duration:0,dangerouslyUseHTMLString:!0})}}}});function x(e,o,t,l,f,M){const p=r("AuthView"),C=r("MfaView");return s(),k("div",null,[e.showMfaView?n("",!0):(s(),c(p,{key:0,form:e.FORM_CONFIG,"form-loading":e.loading,"with-sso":!0,"data-test-id":"signin-form",onSubmit:e.onEmailPasswordSubmitted},null,8,["form","form-loading","onSubmit"])),e.showMfaView?(s(),c(C,{key:1,"report-error":e.reportError,onSubmit:e.onMFASubmitted,onOnBackClick:e.onBackClick,onOnFormChanged:e.onFormChanged},null,8,["report-error","onSubmit","onOnBackClick","onOnFormChanged"])):n("",!0)])}const Se=F(Z,[["render",x]]);export{Se as default};
|
|
2
|
+
//# sourceMappingURL=SigninView-DlT1Bv9l.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SigninView-BLgTm7p4.js","sources":["../../src/views/MfaView.vue","../../src/views/SigninView.vue"],"sourcesContent":["<template>\n\t<div :class=\"$style.container\">\n\t\t<div :class=\"$style.logoContainer\">\n\t\t\t<Logo />\n\t\t</div>\n\t\t<n8n-card>\n\t\t\t<div :class=\"$style.headerContainer\">\n\t\t\t\t<n8n-heading size=\"xlarge\" color=\"text-dark\">{{\n\t\t\t\t\tshowRecoveryCodeForm\n\t\t\t\t\t\t? $locale.baseText('mfa.recovery.modal.title')\n\t\t\t\t\t\t: $locale.baseText('mfa.code.modal.title')\n\t\t\t\t}}</n8n-heading>\n\t\t\t</div>\n\t\t\t<div :class=\"[$style.formContainer, reportError ? $style.formError : '']\">\n\t\t\t\t<n8n-form-inputs\n\t\t\t\t\tv-if=\"formInputs\"\n\t\t\t\t\tdata-test-id=\"mfa-login-form\"\n\t\t\t\t\t:inputs=\"formInputs\"\n\t\t\t\t\t:event-bus=\"formBus\"\n\t\t\t\t\t@input=\"onInput\"\n\t\t\t\t\t@submit=\"onSubmit\"\n\t\t\t\t/>\n\t\t\t\t<div :class=\"$style.infoBox\">\n\t\t\t\t\t<n8n-text\n\t\t\t\t\t\tv-if=\"!showRecoveryCodeForm && !reportError\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\tcolor=\"text-base\"\n\t\t\t\t\t\t:bold=\"false\"\n\t\t\t\t\t\t>{{ $locale.baseText('mfa.code.input.info') }}\n\t\t\t\t\t\t<a data-test-id=\"mfa-enter-recovery-code-button\" @click=\"onRecoveryCodeClick\">{{\n\t\t\t\t\t\t\t$locale.baseText('mfa.code.input.info.action')\n\t\t\t\t\t\t}}</a></n8n-text\n\t\t\t\t\t>\n\t\t\t\t\t<n8n-text v-if=\"reportError\" color=\"danger\" size=\"small\"\n\t\t\t\t\t\t>{{ formError }}\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\tv-if=\"!showRecoveryCodeForm\"\n\t\t\t\t\t\t\t:class=\"$style.recoveryCodeLink\"\n\t\t\t\t\t\t\t@click=\"onRecoveryCodeClick\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ $locale.baseText('mfa.recovery.input.info.action') }}</a\n\t\t\t\t\t\t>\n\t\t\t\t\t</n8n-text>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<n8n-button\n\t\t\t\t\tfloat=\"right\"\n\t\t\t\t\t:loading=\"verifyingMfaToken\"\n\t\t\t\t\t:label=\"\n\t\t\t\t\t\tshowRecoveryCodeForm\n\t\t\t\t\t\t\t? $locale.baseText('mfa.recovery.button.verify')\n\t\t\t\t\t\t\t: $locale.baseText('mfa.code.button.continue')\n\t\t\t\t\t\"\n\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t:disabled=\"!hasAnyChanges\"\n\t\t\t\t\t@click=\"onSaveClick\"\n\t\t\t\t/>\n\t\t\t\t<n8n-button\n\t\t\t\t\tfloat=\"left\"\n\t\t\t\t\t:label=\"$locale.baseText('mfa.button.back')\"\n\t\t\t\t\tsize=\"large\"\n\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t@click=\"onBackClick\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</n8n-card>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport type { IFormInputs } from '@/Interface';\nimport Logo from '../components/Logo.vue';\nimport {\n\tMFA_AUTHENTICATION_RECOVERY_CODE_INPUT_MAX_LENGTH,\n\tMFA_AUTHENTICATION_TOKEN_INPUT_MAX_LENGTH,\n} from '@/constants';\nimport { useUsersStore } from '@/stores/users.store';\nimport { mapStores } from 'pinia';\nimport { mfaEventBus } from '@/event-bus';\nimport { defineComponent } from 'vue';\nimport { useToast } from '@/composables/useToast';\n\nexport const FORM = {\n\tMFA_TOKEN: 'MFA_TOKEN',\n\tMFA_RECOVERY_CODE: 'MFA_RECOVERY_CODE',\n} as const;\n\nexport default defineComponent({\n\tname: 'MfaView',\n\tcomponents: {\n\t\tLogo,\n\t},\n\tprops: {\n\t\treportError: Boolean,\n\t},\n\tsetup() {\n\t\treturn {\n\t\t\t...useToast(),\n\t\t};\n\t},\n\tdata() {\n\t\treturn {\n\t\t\thasAnyChanges: false,\n\t\t\tformBus: mfaEventBus,\n\t\t\tformInputs: null as null | IFormInputs,\n\t\t\tshowRecoveryCodeForm: false,\n\t\t\tverifyingMfaToken: false,\n\t\t\tformError: '',\n\t\t};\n\t},\n\tasync mounted() {\n\t\tthis.formInputs = [this.mfaTokenFieldWithDefaults()];\n\t},\n\tcomputed: {\n\t\t...mapStores(useUsersStore),\n\t},\n\tmethods: {\n\t\tonRecoveryCodeClick() {\n\t\t\tthis.formError = '';\n\t\t\tthis.showRecoveryCodeForm = true;\n\t\t\tthis.hasAnyChanges = false;\n\t\t\tthis.formInputs = [this.mfaRecoveryCodeFieldWithDefaults()];\n\t\t\tthis.$emit('onFormChanged', FORM.MFA_RECOVERY_CODE);\n\t\t},\n\t\tonBackClick() {\n\t\t\tif (!this.showRecoveryCodeForm) {\n\t\t\t\tthis.$emit('onBackClick', FORM.MFA_TOKEN);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.showRecoveryCodeForm = false;\n\t\t\tthis.hasAnyChanges = true;\n\t\t\tthis.formInputs = [this.mfaTokenFieldWithDefaults()];\n\t\t\tthis.$emit('onBackClick', FORM.MFA_RECOVERY_CODE);\n\t\t},\n\t\tonInput({ target: { value, name } }: { target: { value: string; name: string } }) {\n\t\t\tconst isSubmittingMfaToken = name === 'token';\n\t\t\tconst inputValidLength = isSubmittingMfaToken\n\t\t\t\t? MFA_AUTHENTICATION_TOKEN_INPUT_MAX_LENGTH\n\t\t\t\t: MFA_AUTHENTICATION_RECOVERY_CODE_INPUT_MAX_LENGTH;\n\n\t\t\tif (value.length !== inputValidLength) {\n\t\t\t\tthis.hasAnyChanges = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.verifyingMfaToken = true;\n\t\t\tthis.hasAnyChanges = true;\n\n\t\t\tthis.onSubmit({ token: value, recoveryCode: value })\n\t\t\t\t.catch(() => {})\n\t\t\t\t.finally(() => (this.verifyingMfaToken = false));\n\t\t},\n\t\tasync onSubmit(form: { token: string; recoveryCode: string }) {\n\t\t\tthis.formError = !this.showRecoveryCodeForm\n\t\t\t\t? this.$locale.baseText('mfa.code.invalid')\n\t\t\t\t: this.$locale.baseText('mfa.recovery.invalid');\n\t\t\tthis.$emit('submit', form);\n\t\t},\n\t\tonSaveClick() {\n\t\t\tthis.formBus.emit('submit');\n\t\t},\n\t\tmfaTokenFieldWithDefaults() {\n\t\t\treturn this.formField(\n\t\t\t\t'token',\n\t\t\t\tthis.$locale.baseText('mfa.code.input.label'),\n\t\t\t\tthis.$locale.baseText('mfa.code.input.placeholder'),\n\t\t\t\tMFA_AUTHENTICATION_TOKEN_INPUT_MAX_LENGTH,\n\t\t\t);\n\t\t},\n\t\tmfaRecoveryCodeFieldWithDefaults() {\n\t\t\treturn this.formField(\n\t\t\t\t'recoveryCode',\n\t\t\t\tthis.$locale.baseText('mfa.recovery.input.label'),\n\t\t\t\tthis.$locale.baseText('mfa.recovery.input.placeholder'),\n\t\t\t\tMFA_AUTHENTICATION_RECOVERY_CODE_INPUT_MAX_LENGTH,\n\t\t\t);\n\t\t},\n\t\tformField(name: string, label: string, placeholder: string, maxlength: number, focus = true) {\n\t\t\treturn {\n\t\t\t\tname,\n\t\t\t\tinitialValue: '',\n\t\t\t\tproperties: {\n\t\t\t\t\tlabel,\n\t\t\t\t\tplaceholder,\n\t\t\t\t\tmaxlength,\n\t\t\t\t\tcapitalize: true,\n\t\t\t\t\tvalidateOnBlur: false,\n\t\t\t\t\tfocusInitially: focus,\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\nbody {\n\tbackground-color: var(--color-background-light);\n}\n\n.container {\n\tdisplay: flex;\n\talign-items: center;\n\tflex-direction: column;\n\tpadding-top: var(--spacing-2xl);\n\n\t> * {\n\t\tmargin-bottom: var(--spacing-l);\n\t\twidth: 352px;\n\t}\n}\n\n.logoContainer {\n\tdisplay: flex;\n\tjustify-content: center;\n}\n\n.formContainer {\n\tpadding-bottom: var(--spacing-xl);\n}\n\n.headerContainer {\n\ttext-align: center;\n\tmargin-bottom: var(--spacing-xl);\n}\n\n.formError input {\n\tborder-color: var(--color-danger);\n}\n\n.recoveryCodeLink {\n\ttext-decoration: underline;\n}\n\n.infoBox {\n\tpadding-top: var(--spacing-4xs);\n}\n</style>\n","<template>\n\t<div>\n\t\t<AuthView\n\t\t\tv-if=\"!showMfaView\"\n\t\t\t:form=\"FORM_CONFIG\"\n\t\t\t:form-loading=\"loading\"\n\t\t\t:with-sso=\"true\"\n\t\t\tdata-test-id=\"signin-form\"\n\t\t\t@submit=\"onEmailPasswordSubmitted\"\n\t\t/>\n\t\t<MfaView\n\t\t\tv-if=\"showMfaView\"\n\t\t\t:report-error=\"reportError\"\n\t\t\t@submit=\"onMFASubmitted\"\n\t\t\t@on-back-click=\"onBackClick\"\n\t\t\t@on-form-changed=\"onFormChanged\"\n\t\t/>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport AuthView from './AuthView.vue';\nimport MfaView, { FORM } from './MfaView.vue';\nimport { useToast } from '@/composables/useToast';\nimport type { IFormBoxConfig } from '@/Interface';\nimport { MFA_AUTHENTICATION_REQUIRED_ERROR_CODE, VIEWS } from '@/constants';\nimport { mapStores } from 'pinia';\nimport { useUsersStore } from '@/stores/users.store';\nimport { useSettingsStore } from '@/stores/settings.store';\nimport { useCloudPlanStore } from '@/stores/cloudPlan.store';\nimport { useUIStore } from '@/stores/ui.store';\n\nexport default defineComponent({\n\tname: 'SigninView',\n\tcomponents: {\n\t\tAuthView,\n\t\tMfaView,\n\t},\n\tsetup() {\n\t\treturn {\n\t\t\t...useToast(),\n\t\t};\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tFORM_CONFIG: {} as IFormBoxConfig,\n\t\t\tloading: false,\n\t\t\tshowMfaView: false,\n\t\t\temail: '',\n\t\t\tpassword: '',\n\t\t\treportError: false,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useUsersStore, useSettingsStore, useUIStore, useCloudPlanStore),\n\t\tuserHasMfaEnabled() {\n\t\t\treturn !!this.usersStore.currentUser?.mfaEnabled;\n\t\t},\n\t},\n\tmounted() {\n\t\tlet emailLabel = this.$locale.baseText('auth.email');\n\t\tconst ldapLoginLabel = this.settingsStore.ldapLoginLabel;\n\t\tconst isLdapLoginEnabled = this.settingsStore.isLdapLoginEnabled;\n\t\tif (isLdapLoginEnabled && ldapLoginLabel) {\n\t\t\temailLabel = ldapLoginLabel;\n\t\t}\n\t\tthis.FORM_CONFIG = {\n\t\t\ttitle: this.$locale.baseText('auth.signin'),\n\t\t\tbuttonText: this.$locale.baseText('auth.signin'),\n\t\t\tredirectText: this.$locale.baseText('forgotPassword'),\n\t\t\tinputs: [\n\t\t\t\t{\n\t\t\t\t\tname: 'email',\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tlabel: emailLabel,\n\t\t\t\t\t\ttype: 'email',\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\t...(!isLdapLoginEnabled && { validationRules: [{ name: 'VALID_EMAIL' }] }),\n\t\t\t\t\t\tshowRequiredAsterisk: false,\n\t\t\t\t\t\tvalidateOnBlur: false,\n\t\t\t\t\t\tautocomplete: 'email',\n\t\t\t\t\t\tcapitalize: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'password',\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tlabel: this.$locale.baseText('auth.password'),\n\t\t\t\t\t\ttype: 'password',\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tshowRequiredAsterisk: false,\n\t\t\t\t\t\tvalidateOnBlur: false,\n\t\t\t\t\t\tautocomplete: 'current-password',\n\t\t\t\t\t\tcapitalize: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\n\t\tif (!this.settingsStore.isDesktopDeployment) {\n\t\t\tthis.FORM_CONFIG.redirectLink = '/forgot-password';\n\t\t}\n\t},\n\tmethods: {\n\t\tasync onMFASubmitted(form: { token?: string; recoveryCode?: string }) {\n\t\t\tawait this.login({\n\t\t\t\temail: this.email,\n\t\t\t\tpassword: this.password,\n\t\t\t\ttoken: form.token,\n\t\t\t\trecoveryCode: form.recoveryCode,\n\t\t\t});\n\t\t},\n\t\tasync onEmailPasswordSubmitted(form: { email: string; password: string }) {\n\t\t\tawait this.login(form);\n\t\t},\n\t\tisRedirectSafe() {\n\t\t\tconst redirect = this.getRedirectQueryParameter();\n\t\t\treturn redirect.startsWith('/') || redirect.startsWith(window.location.origin);\n\t\t},\n\t\tgetRedirectQueryParameter() {\n\t\t\tlet redirect = '';\n\t\t\tif (typeof this.$route.query?.redirect === 'string') {\n\t\t\t\tredirect = decodeURIComponent(this.$route.query?.redirect);\n\t\t\t}\n\t\t\treturn redirect;\n\t\t},\n\t\tasync login(form: { email: string; password: string; token?: string; recoveryCode?: string }) {\n\t\t\ttry {\n\t\t\t\tthis.loading = true;\n\t\t\t\tawait this.usersStore.loginWithCreds({\n\t\t\t\t\temail: form.email,\n\t\t\t\t\tpassword: form.password,\n\t\t\t\t\tmfaToken: form.token,\n\t\t\t\t\tmfaRecoveryCode: form.recoveryCode,\n\t\t\t\t});\n\t\t\t\tthis.loading = false;\n\t\t\t\tif (this.settingsStore.isCloudDeployment) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.cloudPlanStore.checkForCloudPlanData();\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.warn('Failed to check for cloud plan data', error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tawait this.settingsStore.getSettings();\n\t\t\t\tthis.clearAllStickyNotifications();\n\t\t\t\tthis.checkRecoveryCodesLeft();\n\n\t\t\t\tthis.$telemetry.track('User attempted to login', {\n\t\t\t\t\tresult: this.showMfaView ? 'mfa_success' : 'success',\n\t\t\t\t});\n\n\t\t\t\tif (this.isRedirectSafe()) {\n\t\t\t\t\tconst redirect = this.getRedirectQueryParameter();\n\t\t\t\t\tif (redirect.startsWith('http')) {\n\t\t\t\t\t\twindow.location.href = redirect;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvoid this.$router.push(redirect);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tawait this.$router.push({ name: VIEWS.HOMEPAGE });\n\t\t\t} catch (error) {\n\t\t\t\tif (error.errorCode === MFA_AUTHENTICATION_REQUIRED_ERROR_CODE) {\n\t\t\t\t\tthis.showMfaView = true;\n\t\t\t\t\tthis.cacheCredentials(form);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.$telemetry.track('User attempted to login', {\n\t\t\t\t\tresult: this.showMfaView ? 'mfa_token_rejected' : 'credentials_error',\n\t\t\t\t});\n\n\t\t\t\tif (!this.showMfaView) {\n\t\t\t\t\tthis.showError(error, this.$locale.baseText('auth.signin.error'));\n\t\t\t\t\tthis.loading = false;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.reportError = true;\n\t\t\t}\n\t\t},\n\t\tonBackClick(fromForm: string) {\n\t\t\tthis.reportError = false;\n\t\t\tif (fromForm === FORM.MFA_TOKEN) {\n\t\t\t\tthis.showMfaView = false;\n\t\t\t\tthis.loading = false;\n\t\t\t}\n\t\t},\n\t\tonFormChanged(toForm: string) {\n\t\t\tif (toForm === FORM.MFA_RECOVERY_CODE) {\n\t\t\t\tthis.reportError = false;\n\t\t\t}\n\t\t},\n\t\tcacheCredentials(form: { email: string; password: string }) {\n\t\t\tthis.email = form.email;\n\t\t\tthis.password = form.password;\n\t\t},\n\t\tcheckRecoveryCodesLeft() {\n\t\t\tif (this.usersStore.currentUser) {\n\t\t\t\tconst { hasRecoveryCodesLeft, mfaEnabled } = this.usersStore.currentUser;\n\n\t\t\t\tif (mfaEnabled && !hasRecoveryCodesLeft) {\n\t\t\t\t\tthis.showToast({\n\t\t\t\t\t\ttitle: this.$locale.baseText('settings.mfa.toast.noRecoveryCodeLeft.title'),\n\t\t\t\t\t\tmessage: this.$locale.baseText('settings.mfa.toast.noRecoveryCodeLeft.message'),\n\t\t\t\t\t\ttype: 'info',\n\t\t\t\t\t\tduration: 0,\n\t\t\t\t\t\tdangerouslyUseHTMLString: true,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n});\n</script>\n"],"names":["FORM","_sfc_main$1","defineComponent","Logo","useToast","mfaEventBus","mapStores","useUsersStore","value","name","inputValidLength","MFA_AUTHENTICATION_TOKEN_INPUT_MAX_LENGTH","MFA_AUTHENTICATION_RECOVERY_CODE_INPUT_MAX_LENGTH","form","label","placeholder","maxlength","focus","_resolveComponent","_normalizeClass","_ctx","_createVNode","_component_Logo","_component_n8n_card","_withCtx","_createElementVNode","_component_n8n_heading","$locale","_toDisplayString","formInputs","_openBlock","_component_n8n_form_inputs","formBus","onInput","onSubmit","_createCommentVNode","$style","showRecoveryCodeForm","reportError","_createBlock","_component_n8n_text","_createTextVNode","_cache","args","verifyingMfaToken","_sfc_main","AuthView","MfaView","useSettingsStore","useUIStore","useCloudPlanStore","_a","emailLabel","ldapLoginLabel","isLdapLoginEnabled","redirect","_b","error","VIEWS","MFA_AUTHENTICATION_REQUIRED_ERROR_CODE","fromForm","toForm","hasRecoveryCodesLeft","mfaEnabled","_createElementBlock","_component_AuthView","onEmailPasswordSubmitted","showMfaView","onBackClick"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SigninView-DlT1Bv9l.js","sources":["../../src/views/MfaView.vue","../../src/views/SigninView.vue"],"sourcesContent":["<template>\n\t<div :class=\"$style.container\">\n\t\t<div :class=\"$style.logoContainer\">\n\t\t\t<Logo />\n\t\t</div>\n\t\t<n8n-card>\n\t\t\t<div :class=\"$style.headerContainer\">\n\t\t\t\t<n8n-heading size=\"xlarge\" color=\"text-dark\">{{\n\t\t\t\t\tshowRecoveryCodeForm\n\t\t\t\t\t\t? $locale.baseText('mfa.recovery.modal.title')\n\t\t\t\t\t\t: $locale.baseText('mfa.code.modal.title')\n\t\t\t\t}}</n8n-heading>\n\t\t\t</div>\n\t\t\t<div :class=\"[$style.formContainer, reportError ? $style.formError : '']\">\n\t\t\t\t<n8n-form-inputs\n\t\t\t\t\tv-if=\"formInputs\"\n\t\t\t\t\tdata-test-id=\"mfa-login-form\"\n\t\t\t\t\t:inputs=\"formInputs\"\n\t\t\t\t\t:event-bus=\"formBus\"\n\t\t\t\t\t@input=\"onInput\"\n\t\t\t\t\t@submit=\"onSubmit\"\n\t\t\t\t/>\n\t\t\t\t<div :class=\"$style.infoBox\">\n\t\t\t\t\t<n8n-text\n\t\t\t\t\t\tv-if=\"!showRecoveryCodeForm && !reportError\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\tcolor=\"text-base\"\n\t\t\t\t\t\t:bold=\"false\"\n\t\t\t\t\t\t>{{ $locale.baseText('mfa.code.input.info') }}\n\t\t\t\t\t\t<a data-test-id=\"mfa-enter-recovery-code-button\" @click=\"onRecoveryCodeClick\">{{\n\t\t\t\t\t\t\t$locale.baseText('mfa.code.input.info.action')\n\t\t\t\t\t\t}}</a></n8n-text\n\t\t\t\t\t>\n\t\t\t\t\t<n8n-text v-if=\"reportError\" color=\"danger\" size=\"small\"\n\t\t\t\t\t\t>{{ formError }}\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\tv-if=\"!showRecoveryCodeForm\"\n\t\t\t\t\t\t\t:class=\"$style.recoveryCodeLink\"\n\t\t\t\t\t\t\t@click=\"onRecoveryCodeClick\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{{ $locale.baseText('mfa.recovery.input.info.action') }}</a\n\t\t\t\t\t\t>\n\t\t\t\t\t</n8n-text>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<n8n-button\n\t\t\t\t\tfloat=\"right\"\n\t\t\t\t\t:loading=\"verifyingMfaToken\"\n\t\t\t\t\t:label=\"\n\t\t\t\t\t\tshowRecoveryCodeForm\n\t\t\t\t\t\t\t? $locale.baseText('mfa.recovery.button.verify')\n\t\t\t\t\t\t\t: $locale.baseText('mfa.code.button.continue')\n\t\t\t\t\t\"\n\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t:disabled=\"!hasAnyChanges\"\n\t\t\t\t\t@click=\"onSaveClick\"\n\t\t\t\t/>\n\t\t\t\t<n8n-button\n\t\t\t\t\tfloat=\"left\"\n\t\t\t\t\t:label=\"$locale.baseText('mfa.button.back')\"\n\t\t\t\t\tsize=\"large\"\n\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t@click=\"onBackClick\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</n8n-card>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport type { IFormInputs } from '@/Interface';\nimport Logo from '../components/Logo.vue';\nimport {\n\tMFA_AUTHENTICATION_RECOVERY_CODE_INPUT_MAX_LENGTH,\n\tMFA_AUTHENTICATION_TOKEN_INPUT_MAX_LENGTH,\n} from '@/constants';\nimport { useUsersStore } from '@/stores/users.store';\nimport { mapStores } from 'pinia';\nimport { mfaEventBus } from '@/event-bus';\nimport { defineComponent } from 'vue';\nimport { useToast } from '@/composables/useToast';\n\nexport const FORM = {\n\tMFA_TOKEN: 'MFA_TOKEN',\n\tMFA_RECOVERY_CODE: 'MFA_RECOVERY_CODE',\n} as const;\n\nexport default defineComponent({\n\tname: 'MfaView',\n\tcomponents: {\n\t\tLogo,\n\t},\n\tprops: {\n\t\treportError: Boolean,\n\t},\n\tsetup() {\n\t\treturn {\n\t\t\t...useToast(),\n\t\t};\n\t},\n\tdata() {\n\t\treturn {\n\t\t\thasAnyChanges: false,\n\t\t\tformBus: mfaEventBus,\n\t\t\tformInputs: null as null | IFormInputs,\n\t\t\tshowRecoveryCodeForm: false,\n\t\t\tverifyingMfaToken: false,\n\t\t\tformError: '',\n\t\t};\n\t},\n\tasync mounted() {\n\t\tthis.formInputs = [this.mfaTokenFieldWithDefaults()];\n\t},\n\tcomputed: {\n\t\t...mapStores(useUsersStore),\n\t},\n\tmethods: {\n\t\tonRecoveryCodeClick() {\n\t\t\tthis.formError = '';\n\t\t\tthis.showRecoveryCodeForm = true;\n\t\t\tthis.hasAnyChanges = false;\n\t\t\tthis.formInputs = [this.mfaRecoveryCodeFieldWithDefaults()];\n\t\t\tthis.$emit('onFormChanged', FORM.MFA_RECOVERY_CODE);\n\t\t},\n\t\tonBackClick() {\n\t\t\tif (!this.showRecoveryCodeForm) {\n\t\t\t\tthis.$emit('onBackClick', FORM.MFA_TOKEN);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.showRecoveryCodeForm = false;\n\t\t\tthis.hasAnyChanges = true;\n\t\t\tthis.formInputs = [this.mfaTokenFieldWithDefaults()];\n\t\t\tthis.$emit('onBackClick', FORM.MFA_RECOVERY_CODE);\n\t\t},\n\t\tonInput({ target: { value, name } }: { target: { value: string; name: string } }) {\n\t\t\tconst isSubmittingMfaToken = name === 'token';\n\t\t\tconst inputValidLength = isSubmittingMfaToken\n\t\t\t\t? MFA_AUTHENTICATION_TOKEN_INPUT_MAX_LENGTH\n\t\t\t\t: MFA_AUTHENTICATION_RECOVERY_CODE_INPUT_MAX_LENGTH;\n\n\t\t\tif (value.length !== inputValidLength) {\n\t\t\t\tthis.hasAnyChanges = false;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.verifyingMfaToken = true;\n\t\t\tthis.hasAnyChanges = true;\n\n\t\t\tthis.onSubmit({ token: value, recoveryCode: value })\n\t\t\t\t.catch(() => {})\n\t\t\t\t.finally(() => (this.verifyingMfaToken = false));\n\t\t},\n\t\tasync onSubmit(form: { token: string; recoveryCode: string }) {\n\t\t\tthis.formError = !this.showRecoveryCodeForm\n\t\t\t\t? this.$locale.baseText('mfa.code.invalid')\n\t\t\t\t: this.$locale.baseText('mfa.recovery.invalid');\n\t\t\tthis.$emit('submit', form);\n\t\t},\n\t\tonSaveClick() {\n\t\t\tthis.formBus.emit('submit');\n\t\t},\n\t\tmfaTokenFieldWithDefaults() {\n\t\t\treturn this.formField(\n\t\t\t\t'token',\n\t\t\t\tthis.$locale.baseText('mfa.code.input.label'),\n\t\t\t\tthis.$locale.baseText('mfa.code.input.placeholder'),\n\t\t\t\tMFA_AUTHENTICATION_TOKEN_INPUT_MAX_LENGTH,\n\t\t\t);\n\t\t},\n\t\tmfaRecoveryCodeFieldWithDefaults() {\n\t\t\treturn this.formField(\n\t\t\t\t'recoveryCode',\n\t\t\t\tthis.$locale.baseText('mfa.recovery.input.label'),\n\t\t\t\tthis.$locale.baseText('mfa.recovery.input.placeholder'),\n\t\t\t\tMFA_AUTHENTICATION_RECOVERY_CODE_INPUT_MAX_LENGTH,\n\t\t\t);\n\t\t},\n\t\tformField(name: string, label: string, placeholder: string, maxlength: number, focus = true) {\n\t\t\treturn {\n\t\t\t\tname,\n\t\t\t\tinitialValue: '',\n\t\t\t\tproperties: {\n\t\t\t\t\tlabel,\n\t\t\t\t\tplaceholder,\n\t\t\t\t\tmaxlength,\n\t\t\t\t\tcapitalize: true,\n\t\t\t\t\tvalidateOnBlur: false,\n\t\t\t\t\tfocusInitially: focus,\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\nbody {\n\tbackground-color: var(--color-background-light);\n}\n\n.container {\n\tdisplay: flex;\n\talign-items: center;\n\tflex-direction: column;\n\tpadding-top: var(--spacing-2xl);\n\n\t> * {\n\t\tmargin-bottom: var(--spacing-l);\n\t\twidth: 352px;\n\t}\n}\n\n.logoContainer {\n\tdisplay: flex;\n\tjustify-content: center;\n}\n\n.formContainer {\n\tpadding-bottom: var(--spacing-xl);\n}\n\n.headerContainer {\n\ttext-align: center;\n\tmargin-bottom: var(--spacing-xl);\n}\n\n.formError input {\n\tborder-color: var(--color-danger);\n}\n\n.recoveryCodeLink {\n\ttext-decoration: underline;\n}\n\n.infoBox {\n\tpadding-top: var(--spacing-4xs);\n}\n</style>\n","<template>\n\t<div>\n\t\t<AuthView\n\t\t\tv-if=\"!showMfaView\"\n\t\t\t:form=\"FORM_CONFIG\"\n\t\t\t:form-loading=\"loading\"\n\t\t\t:with-sso=\"true\"\n\t\t\tdata-test-id=\"signin-form\"\n\t\t\t@submit=\"onEmailPasswordSubmitted\"\n\t\t/>\n\t\t<MfaView\n\t\t\tv-if=\"showMfaView\"\n\t\t\t:report-error=\"reportError\"\n\t\t\t@submit=\"onMFASubmitted\"\n\t\t\t@on-back-click=\"onBackClick\"\n\t\t\t@on-form-changed=\"onFormChanged\"\n\t\t/>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport AuthView from './AuthView.vue';\nimport MfaView, { FORM } from './MfaView.vue';\nimport { useToast } from '@/composables/useToast';\nimport type { IFormBoxConfig } from '@/Interface';\nimport { MFA_AUTHENTICATION_REQUIRED_ERROR_CODE, VIEWS } from '@/constants';\nimport { mapStores } from 'pinia';\nimport { useUsersStore } from '@/stores/users.store';\nimport { useSettingsStore } from '@/stores/settings.store';\nimport { useCloudPlanStore } from '@/stores/cloudPlan.store';\nimport { useUIStore } from '@/stores/ui.store';\n\nexport default defineComponent({\n\tname: 'SigninView',\n\tcomponents: {\n\t\tAuthView,\n\t\tMfaView,\n\t},\n\tsetup() {\n\t\treturn {\n\t\t\t...useToast(),\n\t\t};\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tFORM_CONFIG: {} as IFormBoxConfig,\n\t\t\tloading: false,\n\t\t\tshowMfaView: false,\n\t\t\temail: '',\n\t\t\tpassword: '',\n\t\t\treportError: false,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useUsersStore, useSettingsStore, useUIStore, useCloudPlanStore),\n\t\tuserHasMfaEnabled() {\n\t\t\treturn !!this.usersStore.currentUser?.mfaEnabled;\n\t\t},\n\t},\n\tmounted() {\n\t\tlet emailLabel = this.$locale.baseText('auth.email');\n\t\tconst ldapLoginLabel = this.settingsStore.ldapLoginLabel;\n\t\tconst isLdapLoginEnabled = this.settingsStore.isLdapLoginEnabled;\n\t\tif (isLdapLoginEnabled && ldapLoginLabel) {\n\t\t\temailLabel = ldapLoginLabel;\n\t\t}\n\t\tthis.FORM_CONFIG = {\n\t\t\ttitle: this.$locale.baseText('auth.signin'),\n\t\t\tbuttonText: this.$locale.baseText('auth.signin'),\n\t\t\tredirectText: this.$locale.baseText('forgotPassword'),\n\t\t\tinputs: [\n\t\t\t\t{\n\t\t\t\t\tname: 'email',\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tlabel: emailLabel,\n\t\t\t\t\t\ttype: 'email',\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\t...(!isLdapLoginEnabled && { validationRules: [{ name: 'VALID_EMAIL' }] }),\n\t\t\t\t\t\tshowRequiredAsterisk: false,\n\t\t\t\t\t\tvalidateOnBlur: false,\n\t\t\t\t\t\tautocomplete: 'email',\n\t\t\t\t\t\tcapitalize: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'password',\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tlabel: this.$locale.baseText('auth.password'),\n\t\t\t\t\t\ttype: 'password',\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tshowRequiredAsterisk: false,\n\t\t\t\t\t\tvalidateOnBlur: false,\n\t\t\t\t\t\tautocomplete: 'current-password',\n\t\t\t\t\t\tcapitalize: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\n\t\tif (!this.settingsStore.isDesktopDeployment) {\n\t\t\tthis.FORM_CONFIG.redirectLink = '/forgot-password';\n\t\t}\n\t},\n\tmethods: {\n\t\tasync onMFASubmitted(form: { token?: string; recoveryCode?: string }) {\n\t\t\tawait this.login({\n\t\t\t\temail: this.email,\n\t\t\t\tpassword: this.password,\n\t\t\t\ttoken: form.token,\n\t\t\t\trecoveryCode: form.recoveryCode,\n\t\t\t});\n\t\t},\n\t\tasync onEmailPasswordSubmitted(form: { email: string; password: string }) {\n\t\t\tawait this.login(form);\n\t\t},\n\t\tisRedirectSafe() {\n\t\t\tconst redirect = this.getRedirectQueryParameter();\n\t\t\treturn redirect.startsWith('/') || redirect.startsWith(window.location.origin);\n\t\t},\n\t\tgetRedirectQueryParameter() {\n\t\t\tlet redirect = '';\n\t\t\tif (typeof this.$route.query?.redirect === 'string') {\n\t\t\t\tredirect = decodeURIComponent(this.$route.query?.redirect);\n\t\t\t}\n\t\t\treturn redirect;\n\t\t},\n\t\tasync login(form: { email: string; password: string; token?: string; recoveryCode?: string }) {\n\t\t\ttry {\n\t\t\t\tthis.loading = true;\n\t\t\t\tawait this.usersStore.loginWithCreds({\n\t\t\t\t\temail: form.email,\n\t\t\t\t\tpassword: form.password,\n\t\t\t\t\tmfaToken: form.token,\n\t\t\t\t\tmfaRecoveryCode: form.recoveryCode,\n\t\t\t\t});\n\t\t\t\tthis.loading = false;\n\t\t\t\tif (this.settingsStore.isCloudDeployment) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.cloudPlanStore.checkForCloudPlanData();\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tconsole.warn('Failed to check for cloud plan data', error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tawait this.settingsStore.getSettings();\n\t\t\t\tthis.clearAllStickyNotifications();\n\t\t\t\tthis.checkRecoveryCodesLeft();\n\n\t\t\t\tthis.$telemetry.track('User attempted to login', {\n\t\t\t\t\tresult: this.showMfaView ? 'mfa_success' : 'success',\n\t\t\t\t});\n\n\t\t\t\tif (this.isRedirectSafe()) {\n\t\t\t\t\tconst redirect = this.getRedirectQueryParameter();\n\t\t\t\t\tif (redirect.startsWith('http')) {\n\t\t\t\t\t\twindow.location.href = redirect;\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvoid this.$router.push(redirect);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tawait this.$router.push({ name: VIEWS.HOMEPAGE });\n\t\t\t} catch (error) {\n\t\t\t\tif (error.errorCode === MFA_AUTHENTICATION_REQUIRED_ERROR_CODE) {\n\t\t\t\t\tthis.showMfaView = true;\n\t\t\t\t\tthis.cacheCredentials(form);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.$telemetry.track('User attempted to login', {\n\t\t\t\t\tresult: this.showMfaView ? 'mfa_token_rejected' : 'credentials_error',\n\t\t\t\t});\n\n\t\t\t\tif (!this.showMfaView) {\n\t\t\t\t\tthis.showError(error, this.$locale.baseText('auth.signin.error'));\n\t\t\t\t\tthis.loading = false;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.reportError = true;\n\t\t\t}\n\t\t},\n\t\tonBackClick(fromForm: string) {\n\t\t\tthis.reportError = false;\n\t\t\tif (fromForm === FORM.MFA_TOKEN) {\n\t\t\t\tthis.showMfaView = false;\n\t\t\t\tthis.loading = false;\n\t\t\t}\n\t\t},\n\t\tonFormChanged(toForm: string) {\n\t\t\tif (toForm === FORM.MFA_RECOVERY_CODE) {\n\t\t\t\tthis.reportError = false;\n\t\t\t}\n\t\t},\n\t\tcacheCredentials(form: { email: string; password: string }) {\n\t\t\tthis.email = form.email;\n\t\t\tthis.password = form.password;\n\t\t},\n\t\tcheckRecoveryCodesLeft() {\n\t\t\tif (this.usersStore.currentUser) {\n\t\t\t\tconst { hasRecoveryCodesLeft, mfaEnabled } = this.usersStore.currentUser;\n\n\t\t\t\tif (mfaEnabled && !hasRecoveryCodesLeft) {\n\t\t\t\t\tthis.showToast({\n\t\t\t\t\t\ttitle: this.$locale.baseText('settings.mfa.toast.noRecoveryCodeLeft.title'),\n\t\t\t\t\t\tmessage: this.$locale.baseText('settings.mfa.toast.noRecoveryCodeLeft.message'),\n\t\t\t\t\t\ttype: 'info',\n\t\t\t\t\t\tduration: 0,\n\t\t\t\t\t\tdangerouslyUseHTMLString: true,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n});\n</script>\n"],"names":["FORM","_sfc_main$1","defineComponent","Logo","useToast","mfaEventBus","mapStores","useUsersStore","value","name","inputValidLength","MFA_AUTHENTICATION_TOKEN_INPUT_MAX_LENGTH","MFA_AUTHENTICATION_RECOVERY_CODE_INPUT_MAX_LENGTH","form","label","placeholder","maxlength","focus","_resolveComponent","_normalizeClass","_ctx","_createVNode","_component_Logo","_component_n8n_card","_withCtx","_createElementVNode","_component_n8n_heading","$locale","_toDisplayString","formInputs","_openBlock","_component_n8n_form_inputs","formBus","onInput","onSubmit","_createCommentVNode","$style","showRecoveryCodeForm","reportError","_createBlock","_component_n8n_text","_createTextVNode","_cache","args","verifyingMfaToken","_sfc_main","AuthView","MfaView","useSettingsStore","useUIStore","useCloudPlanStore","_a","emailLabel","ldapLoginLabel","isLdapLoginEnabled","redirect","_b","error","VIEWS","MFA_AUTHENTICATION_REQUIRED_ERROR_CODE","fromForm","toForm","hasRecoveryCodesLeft","mfaEnabled","_createElementBlock","_component_AuthView","onEmailPasswordSubmitted","showMfaView","onBackClick"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as t,a as r,V as i}from"./index-
|
|
2
|
-
//# sourceMappingURL=SignoutView-
|
|
1
|
+
import{u as t,a as r,V as i}from"./index-BQ6Z7VRj.js";import{m as e}from"./pinia-Dh4cxKZ0.js";import{G as m,l as p,m as s}from"./vendor-CUQSof8H.js";import{_ as a}from"./n8n-DT_bOwuZ.js";import"./axios-Mm4CS0gO.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-BiGWdRh4.js";import"./lodash-es-BFdF4Er8.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-C0ZgbPvs.js";import"./vue-i18n-CG6eDDlD.js";import"./uuid-SoommWqA.js";import"./luxon-CLwAIbs0.js";import"./@n8n/codemirror-lang-sql-x14jMqbG.js";import"./@lezer/common-B6ct0j_v.js";import"./prettier-bS6l4Vb1.js";import"./@jsplumb/util-DS-9vq_E.js";import"./@jsplumb/core-CVBraiyY.js";import"./@jsplumb/common-CF-b-6-M.js";import"./@jsplumb/connector-bezier-BGU0Ovbw.js";import"./@jsplumb/browser-ui-BVF2KoJK.js";import"./codemirror-lang-html-n8n-DcTmlMkf.js";import"./@n8n/codemirror-lang-Qkdx7NoQ.js";import"./esprima-next-nhoSXAeq.js";import"./fast-json-stable-stringify-wY6jAr7b.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-DOxvr88t.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";const n=m({name:"SignoutView",setup(){return{...t()}},computed:{...e(r)},mounted(){this.logout()},methods:{async logout(){try{await this.usersStore.logout(),window.location.href=this.$router.resolve({name:i.SIGNIN}).href}catch(o){this.showError(o,this.$locale.baseText("auth.signout.error"))}}}});function u(o,c,f,h,l,d){return p(),s("div")}const L=a(n,[["render",u]]);export{L as default};
|
|
2
|
+
//# sourceMappingURL=SignoutView-DisgJoQS.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SignoutView-
|
|
1
|
+
{"version":3,"file":"SignoutView-DisgJoQS.js","sources":["../../src/views/SignoutView.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { VIEWS } from '@/constants';\nimport { mapStores } from 'pinia';\nimport { useUsersStore } from '@/stores/users.store';\nimport { defineComponent } from 'vue';\nimport { useToast } from '@/composables/useToast';\n\nexport default defineComponent({\n\tname: 'SignoutView',\n\tsetup() {\n\t\treturn {\n\t\t\t...useToast(),\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useUsersStore),\n\t},\n\tmounted() {\n\t\tvoid this.logout();\n\t},\n\tmethods: {\n\t\tasync logout() {\n\t\t\ttry {\n\t\t\t\tawait this.usersStore.logout();\n\t\t\t\twindow.location.href = this.$router.resolve({ name: VIEWS.SIGNIN }).href;\n\t\t\t} catch (e) {\n\t\t\t\tthis.showError(e, this.$locale.baseText('auth.signout.error'));\n\t\t\t}\n\t\t},\n\t},\n});\n</script>\n\n<template>\n\t<div />\n</template>\n"],"names":["_sfc_main","defineComponent","useToast","mapStores","useUsersStore","VIEWS","e"],"mappings":"ukCAOA,MAAAA,EAAeC,EAAgB,CAC9B,KAAM,cACN,OAAQ,CACA,MAAA,CACN,GAAGC,EAAS,CAAA,CAEd,EACA,SAAU,CACT,GAAGC,EAAUC,CAAa,CAC3B,EACA,SAAU,CACJ,KAAK,QACX,EACA,QAAS,CACR,MAAM,QAAS,CACV,GAAA,CACG,MAAA,KAAK,WAAW,SACf,OAAA,SAAS,KAAO,KAAK,QAAQ,QAAQ,CAAE,KAAMC,EAAM,MAAQ,CAAA,EAAE,WAC5DC,EAAG,CACX,KAAK,UAAUA,EAAG,KAAK,QAAQ,SAAS,oBAAoB,CAAC,CAC9D,CACD,CACD,CACD,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{A as a}from"./AuthView-
|
|
2
|
-
//# sourceMappingURL=SignupView-
|
|
1
|
+
import{A as a}from"./AuthView-DfyvaM6i.js";import{u as s,V as r,a as n,i as u}from"./index-BQ6Z7VRj.js";import{m}from"./pinia-Dh4cxKZ0.js";import{G as p,l,M as h,ag as c}from"./vendor-CUQSof8H.js";import{_ as d}from"./n8n-DT_bOwuZ.js";import"./axios-Mm4CS0gO.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-BiGWdRh4.js";import"./lodash-es-BFdF4Er8.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-C0ZgbPvs.js";import"./vue-i18n-CG6eDDlD.js";import"./uuid-SoommWqA.js";import"./luxon-CLwAIbs0.js";import"./@n8n/codemirror-lang-sql-x14jMqbG.js";import"./@lezer/common-B6ct0j_v.js";import"./prettier-bS6l4Vb1.js";import"./@jsplumb/util-DS-9vq_E.js";import"./@jsplumb/core-CVBraiyY.js";import"./@jsplumb/common-CF-b-6-M.js";import"./@jsplumb/connector-bezier-BGU0Ovbw.js";import"./@jsplumb/browser-ui-BVF2KoJK.js";import"./codemirror-lang-html-n8n-DcTmlMkf.js";import"./@n8n/codemirror-lang-Qkdx7NoQ.js";import"./esprima-next-nhoSXAeq.js";import"./fast-json-stable-stringify-wY6jAr7b.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-DOxvr88t.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";const g=p({name:"SignupView",components:{AuthView:a},setup(){return{...s()}},data(){return{FORM_CONFIG:{title:this.$locale.baseText("auth.signup.setupYourAccount"),buttonText:this.$locale.baseText("auth.signup.finishAccountSetup"),inputs:[{name:"firstName",properties:{label:this.$locale.baseText("auth.firstName"),maxlength:32,required:!0,autocomplete:"given-name",capitalize:!0}},{name:"lastName",properties:{label:this.$locale.baseText("auth.lastName"),maxlength:32,required:!0,autocomplete:"family-name",capitalize:!0}},{name:"password",properties:{label:this.$locale.baseText("auth.password"),type:"password",validationRules:[{name:"DEFAULT_PASSWORD_RULES"}],required:!0,infoText:this.$locale.baseText("auth.defaultPasswordRequirements"),autocomplete:"new-password",capitalize:!0}},{name:"agree",properties:{label:this.$locale.baseText("auth.agreement.label"),type:"checkbox"}}]},loading:!1,inviter:null,inviterId:null,inviteeId:null}},async mounted(){const t=this.getQueryParameter("inviterId"),e=this.getQueryParameter("inviteeId");try{if(!t||!e)throw new Error(this.$locale.baseText("auth.signup.missingTokenError"));this.inviterId=t,this.inviteeId=e;const i=await this.usersStore.validateSignupToken({inviteeId:e,inviterId:t});this.inviter=i.inviter}catch(i){this.showError(i,this.$locale.baseText("auth.signup.tokenValidationError")),this.$router.replace({name:r.SIGNIN})}},computed:{...m(u,n),inviteMessage(){return this.inviter?this.$locale.baseText("settings.signup.signUpInviterInfo",{interpolate:{firstName:this.inviter.firstName,lastName:this.inviter.lastName}}):null}},methods:{async onSubmit(t){if(!this.inviterId||!this.inviteeId){this.showError(new Error(this.$locale.baseText("auth.signup.tokenValidationError")),this.$locale.baseText("auth.signup.setupYourAccountError"));return}try{if(this.loading=!0,await this.usersStore.acceptInvitation({...t,inviterId:this.inviterId,inviteeId:this.inviteeId}),t.agree===!0)try{await this.uiStore.submitContactEmail(t.email.toString(),t.agree)}catch{}await this.$router.push({name:r.NEW_WORKFLOW})}catch(e){this.showError(e,this.$locale.baseText("auth.signup.setupYourAccountError"))}this.loading=!1},getQueryParameter(t){return!this.$route.query[t]||typeof this.$route.query[t]!="string"?null:this.$route.query[t]}}});function f(t,e,i,b,v,I){const o=c("AuthView");return l(),h(o,{form:t.FORM_CONFIG,"form-loading":t.loading,subtitle:t.inviteMessage,onSubmit:t.onSubmit},null,8,["form","form-loading","subtitle","onSubmit"])}const H=d(g,[["render",f]]);export{H as default};
|
|
2
|
+
//# sourceMappingURL=SignupView-CQZSGNCi.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SignupView-
|
|
1
|
+
{"version":3,"file":"SignupView-CQZSGNCi.js","sources":["../../src/views/SignupView.vue"],"sourcesContent":["<template>\n\t<AuthView\n\t\t:form=\"FORM_CONFIG\"\n\t\t:form-loading=\"loading\"\n\t\t:subtitle=\"inviteMessage\"\n\t\t@submit=\"onSubmit\"\n\t/>\n</template>\n\n<script lang=\"ts\">\nimport AuthView from '@/views/AuthView.vue';\nimport { useToast } from '@/composables/useToast';\n\nimport { defineComponent } from 'vue';\nimport type { IFormBoxConfig } from '@/Interface';\nimport { VIEWS } from '@/constants';\nimport { mapStores } from 'pinia';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useUsersStore } from '@/stores/users.store';\n\nexport default defineComponent({\n\tname: 'SignupView',\n\tcomponents: {\n\t\tAuthView,\n\t},\n\tsetup() {\n\t\treturn {\n\t\t\t...useToast(),\n\t\t};\n\t},\n\tdata() {\n\t\tconst FORM_CONFIG: IFormBoxConfig = {\n\t\t\ttitle: this.$locale.baseText('auth.signup.setupYourAccount'),\n\t\t\tbuttonText: this.$locale.baseText('auth.signup.finishAccountSetup'),\n\t\t\tinputs: [\n\t\t\t\t{\n\t\t\t\t\tname: 'firstName',\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tlabel: this.$locale.baseText('auth.firstName'),\n\t\t\t\t\t\tmaxlength: 32,\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tautocomplete: 'given-name',\n\t\t\t\t\t\tcapitalize: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'lastName',\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tlabel: this.$locale.baseText('auth.lastName'),\n\t\t\t\t\t\tmaxlength: 32,\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tautocomplete: 'family-name',\n\t\t\t\t\t\tcapitalize: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'password',\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tlabel: this.$locale.baseText('auth.password'),\n\t\t\t\t\t\ttype: 'password',\n\t\t\t\t\t\tvalidationRules: [{ name: 'DEFAULT_PASSWORD_RULES' }],\n\t\t\t\t\t\trequired: true,\n\t\t\t\t\t\tinfoText: this.$locale.baseText('auth.defaultPasswordRequirements'),\n\t\t\t\t\t\tautocomplete: 'new-password',\n\t\t\t\t\t\tcapitalize: true,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: 'agree',\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tlabel: this.$locale.baseText('auth.agreement.label'),\n\t\t\t\t\t\ttype: 'checkbox',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\t\treturn {\n\t\t\tFORM_CONFIG,\n\t\t\tloading: false,\n\t\t\tinviter: null as null | { firstName: string; lastName: string },\n\t\t\tinviterId: null as string | null,\n\t\t\tinviteeId: null as string | null,\n\t\t};\n\t},\n\tasync mounted() {\n\t\tconst inviterId = this.getQueryParameter('inviterId');\n\t\tconst inviteeId = this.getQueryParameter('inviteeId');\n\t\ttry {\n\t\t\tif (!inviterId || !inviteeId) {\n\t\t\t\tthrow new Error(this.$locale.baseText('auth.signup.missingTokenError'));\n\t\t\t}\n\t\t\tthis.inviterId = inviterId;\n\t\t\tthis.inviteeId = inviteeId;\n\n\t\t\tconst invite = await this.usersStore.validateSignupToken({ inviteeId, inviterId });\n\t\t\tthis.inviter = invite.inviter as { firstName: string; lastName: string };\n\t\t} catch (e) {\n\t\t\tthis.showError(e, this.$locale.baseText('auth.signup.tokenValidationError'));\n\t\t\tvoid this.$router.replace({ name: VIEWS.SIGNIN });\n\t\t}\n\t},\n\tcomputed: {\n\t\t...mapStores(useUIStore, useUsersStore),\n\t\tinviteMessage(): null | string {\n\t\t\tif (!this.inviter) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn this.$locale.baseText('settings.signup.signUpInviterInfo', {\n\t\t\t\tinterpolate: { firstName: this.inviter.firstName, lastName: this.inviter.lastName },\n\t\t\t});\n\t\t},\n\t},\n\tmethods: {\n\t\tasync onSubmit(values: { [key: string]: string | boolean }) {\n\t\t\tif (!this.inviterId || !this.inviteeId) {\n\t\t\t\tthis.showError(\n\t\t\t\t\tnew Error(this.$locale.baseText('auth.signup.tokenValidationError')),\n\t\t\t\t\tthis.$locale.baseText('auth.signup.setupYourAccountError'),\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tthis.loading = true;\n\t\t\t\tawait this.usersStore.acceptInvitation({\n\t\t\t\t\t...values,\n\t\t\t\t\tinviterId: this.inviterId,\n\t\t\t\t\tinviteeId: this.inviteeId,\n\t\t\t\t} as {\n\t\t\t\t\tinviteeId: string;\n\t\t\t\t\tinviterId: string;\n\t\t\t\t\tfirstName: string;\n\t\t\t\t\tlastName: string;\n\t\t\t\t\tpassword: string;\n\t\t\t\t});\n\n\t\t\t\tif (values.agree === true) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.uiStore.submitContactEmail(values.email.toString(), values.agree);\n\t\t\t\t\t} catch {}\n\t\t\t\t}\n\n\t\t\t\tawait this.$router.push({ name: VIEWS.NEW_WORKFLOW });\n\t\t\t} catch (error) {\n\t\t\t\tthis.showError(error, this.$locale.baseText('auth.signup.setupYourAccountError'));\n\t\t\t}\n\t\t\tthis.loading = false;\n\t\t},\n\t\tgetQueryParameter(key: 'inviterId' | 'inviteeId'): string | null {\n\t\t\treturn !this.$route.query[key] || typeof this.$route.query[key] !== 'string'\n\t\t\t\t? null\n\t\t\t\t: (this.$route.query[key] as string);\n\t\t},\n\t},\n});\n</script>\n"],"names":["_sfc_main","defineComponent","AuthView","useToast","inviterId","inviteeId","invite","e","VIEWS","mapStores","useUIStore","useUsersStore","values","error","key","_resolveComponent","_openBlock","_createBlock","_component_AuthView","inviteMessage","onSubmit"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{G as T,l as t,m as d,p as i,U as l,O as n,S as m,T as s,I as o,H as w,ag as a,M as r,F as B,a7 as z,R as c}from"./vendor-CUQSof8H.js";import{_}from"./n8n-DT_bOwuZ.js";import{a9 as D,cS as I,$ as V,cT as M,cU as A}from"./index-
|
|
2
|
-
//# sourceMappingURL=TemplateDetails-
|
|
1
|
+
import{G as T,l as t,m as d,p as i,U as l,O as n,S as m,T as s,I as o,H as w,ag as a,M as r,F as B,a7 as z,R as c}from"./vendor-CUQSof8H.js";import{_}from"./n8n-DT_bOwuZ.js";import{a9 as D,cS as I,$ as V,cT as M,cU as A}from"./index-BQ6Z7VRj.js";import{m as F}from"./pinia-Dh4cxKZ0.js";const O=T({name:"TemplateDetailsBlock",props:{title:{type:String}}}),P="_block_czs8t_1",U="_header_czs8t_5",j="_content_czs8t_10",E={block:P,header:U,content:j};function G(e,b,h,k,f,v){const p=a("n8n-heading");return t(),d("div",{class:o(e.$style.block)},[i("div",{class:o(e.$style.header)},[l(p,{tag:"h3",size:"small",color:"text-base"},{default:n(()=>[m(s(e.title),1)]),_:1})],2),i("div",{class:o(e.$style.content)},[w(e.$slots,"default")],2)],2)}const H={$style:E},L=_(O,[["render",G],["__cssModules",H]]),R=T({name:"TemplateDetails",components:{NodeIcon:D,TemplateDetailsBlock:L,TimeAgo:I},props:{blockTitle:{type:String},loading:{type:Boolean},template:{type:Object}},computed:{...F(V)},methods:{abbreviateNumber:M,filterTemplateNodes:A,redirectToCategory(e){this.templatesStore.resetSessionId(),this.$router.push(`/templates?categories=${e}`)},redirectToSearchPage(e){this.templatesStore.resetSessionId(),this.$router.push(`/templates?search=${e.displayName}`)}}}),q="_icons_1yw74_1",J="_icon_1yw74_1",K="_text_1yw74_12",Q={icons:q,icon:J,text:K};function W(e,b,h,k,f,v){var y;const p=a("n8n-loading"),S=a("NodeIcon"),u=a("TemplateDetailsBlock"),N=a("n8n-tags"),C=a("TimeAgo"),$=a("n8n-text");return t(),d("div",null,[l(p,{loading:e.loading,rows:5,variant:"p"},null,8,["loading"]),!e.loading&&e.template.nodes.length>0?(t(),r(u,{key:0,title:e.blockTitle},{default:n(()=>[i("div",{class:o(e.$style.icons)},[(t(!0),d(B,null,z(e.filterTemplateNodes(e.template.nodes),g=>(t(),d("div",{key:g.name,class:o(e.$style.icon)},[l(S,{"node-type":g,size:24,"show-tooltip":!0,onClick:Y=>e.redirectToSearchPage(g)},null,8,["node-type","onClick"])],2))),128))],2)]),_:1},8,["title"])):c("",!0),!e.loading&&((y=e.template)==null?void 0:y.categories.length)>0?(t(),r(u,{key:1,title:e.$locale.baseText("template.details.categories")},{default:n(()=>[l(N,{tags:e.template.categories,"onClick:tag":e.redirectToCategory},null,8,["tags","onClick:tag"])]),_:1},8,["title"])):c("",!0),e.loading?c("",!0):(t(),r(u,{key:2,title:e.$locale.baseText("template.details.details")},{default:n(()=>[i("div",{class:o(e.$style.text)},[l($,{size:"small",color:"text-base"},{default:n(()=>[m(s(e.$locale.baseText("template.details.created"))+" ",1),l(C,{date:e.template.createdAt},null,8,["date"]),m(" "+s(e.$locale.baseText("template.details.by"))+" "+s(e.template.user?e.template.user.username:"n8n team"),1)]),_:1})],2),i("div",{class:o(e.$style.text)},[e.template.totalViews!==0?(t(),r($,{key:0,size:"small",color:"text-base"},{default:n(()=>[m(s(e.$locale.baseText("template.details.viewed"))+" "+s(e.abbreviateNumber(e.template.totalViews))+" "+s(e.$locale.baseText("template.details.times")),1)]),_:1})):c("",!0)],2)]),_:1},8,["title"]))])}const X={$style:Q},se=_(R,[["render",W],["__cssModules",X]]);export{se as T};
|
|
2
|
+
//# sourceMappingURL=TemplateDetails-DZzMxROe.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TemplateDetails-
|
|
1
|
+
{"version":3,"file":"TemplateDetails-DZzMxROe.js","sources":["../../src/components/TemplateDetailsBlock.vue","../../src/components/TemplateDetails.vue"],"sourcesContent":["<template>\n\t<div :class=\"$style.block\">\n\t\t<div :class=\"$style.header\">\n\t\t\t<n8n-heading tag=\"h3\" size=\"small\" color=\"text-base\">{{ title }}</n8n-heading>\n\t\t</div>\n\t\t<div :class=\"$style.content\">\n\t\t\t<slot></slot>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n\tname: 'TemplateDetailsBlock',\n\tprops: {\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.block {\n\tpadding-bottom: var(--spacing-xl);\n}\n\n.header {\n\tpadding: 0 0 var(--spacing-4xs);\n\tborder-bottom: var(--border-base);\n}\n\n.content {\n\tpadding: var(--spacing-xs) 0 0;\n}\n</style>\n","<template>\n\t<div>\n\t\t<n8n-loading :loading=\"loading\" :rows=\"5\" variant=\"p\" />\n\n\t\t<TemplateDetailsBlock v-if=\"!loading && template.nodes.length > 0\" :title=\"blockTitle\">\n\t\t\t<div :class=\"$style.icons\">\n\t\t\t\t<div\n\t\t\t\t\tv-for=\"node in filterTemplateNodes(template.nodes)\"\n\t\t\t\t\t:key=\"node.name\"\n\t\t\t\t\t:class=\"$style.icon\"\n\t\t\t\t>\n\t\t\t\t\t<NodeIcon\n\t\t\t\t\t\t:node-type=\"node\"\n\t\t\t\t\t\t:size=\"24\"\n\t\t\t\t\t\t:show-tooltip=\"true\"\n\t\t\t\t\t\t@click=\"redirectToSearchPage(node)\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</TemplateDetailsBlock>\n\n\t\t<TemplateDetailsBlock\n\t\t\tv-if=\"!loading && template?.categories.length > 0\"\n\t\t\t:title=\"$locale.baseText('template.details.categories')\"\n\t\t>\n\t\t\t<n8n-tags :tags=\"template.categories\" @click:tag=\"redirectToCategory\" />\n\t\t</TemplateDetailsBlock>\n\n\t\t<TemplateDetailsBlock v-if=\"!loading\" :title=\"$locale.baseText('template.details.details')\">\n\t\t\t<div :class=\"$style.text\">\n\t\t\t\t<n8n-text size=\"small\" color=\"text-base\">\n\t\t\t\t\t{{ $locale.baseText('template.details.created') }}\n\t\t\t\t\t<TimeAgo :date=\"template.createdAt\" />\n\t\t\t\t\t{{ $locale.baseText('template.details.by') }}\n\t\t\t\t\t{{ template.user ? template.user.username : 'n8n team' }}\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\t\t\t<div :class=\"$style.text\">\n\t\t\t\t<n8n-text v-if=\"template.totalViews !== 0\" size=\"small\" color=\"text-base\">\n\t\t\t\t\t{{ $locale.baseText('template.details.viewed') }}\n\t\t\t\t\t{{ abbreviateNumber(template.totalViews) }}\n\t\t\t\t\t{{ $locale.baseText('template.details.times') }}\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\t\t</TemplateDetailsBlock>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport type { PropType } from 'vue';\nimport TemplateDetailsBlock from '@/components/TemplateDetailsBlock.vue';\nimport NodeIcon from '@/components/NodeIcon.vue';\nimport { filterTemplateNodes } from '@/utils/nodeTypesUtils';\nimport { abbreviateNumber } from '@/utils/typesUtils';\nimport type { ITemplatesNode, ITemplatesWorkflow, ITemplatesWorkflowFull } from '@/Interface';\nimport { mapStores } from 'pinia';\nimport { useTemplatesStore } from '@/stores/templates.store';\nimport TimeAgo from '@/components/TimeAgo.vue';\n\nexport default defineComponent({\n\tname: 'TemplateDetails',\n\tcomponents: {\n\t\tNodeIcon,\n\t\tTemplateDetailsBlock,\n\t\tTimeAgo,\n\t},\n\tprops: {\n\t\tblockTitle: {\n\t\t\ttype: String,\n\t\t},\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\ttemplate: {\n\t\t\ttype: Object as PropType<ITemplatesWorkflow | ITemplatesWorkflowFull>,\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useTemplatesStore),\n\t},\n\tmethods: {\n\t\tabbreviateNumber,\n\t\tfilterTemplateNodes,\n\t\tredirectToCategory(id: string) {\n\t\t\tthis.templatesStore.resetSessionId();\n\t\t\tvoid this.$router.push(`/templates?categories=${id}`);\n\t\t},\n\t\tredirectToSearchPage(node: ITemplatesNode) {\n\t\t\tthis.templatesStore.resetSessionId();\n\t\t\tvoid this.$router.push(`/templates?search=${node.displayName}`);\n\t\t},\n\t},\n});\n</script>\n<style lang=\"scss\" module>\n.icons {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n}\n.icon {\n\tmargin-right: var(--spacing-xs);\n\tmargin-bottom: var(--spacing-xs);\n\tcursor: pointer;\n}\n.text {\n\tpadding-bottom: var(--spacing-xs);\n}\n</style>\n"],"names":["_sfc_main$1","defineComponent","_resolveComponent","_normalizeClass","_ctx","_component_n8n_heading","_createTextVNode","_toDisplayString","_createElementVNode","_sfc_main","NodeIcon","TemplateDetailsBlock","TimeAgo","mapStores","useTemplatesStore","abbreviateNumber","filterTemplateNodes","id","node","_openBlock","_createElementBlock","_createVNode","_component_n8n_loading","loading","_createBlock","_component_TemplateDetailsBlock","_withCtx","_Fragment","_renderList","_component_NodeIcon","template","_a","_component_n8n_tags","redirectToCategory","_createCommentVNode","_component_n8n_text","_component_TimeAgo"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{cS as S,cU as N,cT as V}from"./index-
|
|
2
|
-
//# sourceMappingURL=TemplateList-
|
|
1
|
+
import{cS as S,cU as N,cT as V}from"./index-BQ6Z7VRj.js";import{N as q}from"./NodeList-B4yRfzDq.js";import{G as g,l as o,m as t,I as i,U as r,O as f,S as c,T as u,R as n,M as w,a2 as E,ag as a,p as U,F as h,a7 as _}from"./vendor-CUQSof8H.js";import{_ as C}from"./n8n-DT_bOwuZ.js";const L=g({name:"TemplateCard",components:{TimeAgo:S,NodeList:q},props:{lastItem:{type:Boolean,default:!1},firstItem:{type:Boolean,default:!1},workflow:{type:Object},useWorkflowButton:{type:Boolean},loading:{type:Boolean},simpleView:{type:Boolean,default:!1}},data(){return{nodesToBeShown:5}},methods:{filterTemplateNodes:N,abbreviateNumber:V,countNodesToBeSliced(e){return e.length>this.nodesToBeShown?this.nodesToBeShown-1:this.nodesToBeShown},onUseWorkflowClick(e){this.$emit("useWorkflow",e)},onCardClick(e){this.$emit("click",e)}}}),z="_nodes_psqnp_1",I="_icon_psqnp_8",M="_card_psqnp_12",H="_hideOnHover_psqnp_24",O="_buttonContainer_psqnp_27",A="_loaded_psqnp_38",R="_first_psqnp_42",F="_last_psqnp_48",j="_content_psqnp_53",D="_line_psqnp_58",G="_loading_psqnp_64",J="_nodesContainer_psqnp_69",K={nodes:z,icon:I,card:M,hideOnHover:H,buttonContainer:O,loaded:A,first:R,last:F,content:j,line:D,loading:G,nodesContainer:J},P={key:1},Q={key:0};function X(e,s,y,$,B,b){const k=a("n8n-loading"),p=a("n8n-heading"),l=a("font-awesome-icon"),d=a("n8n-text"),m=a("TimeAgo"),v=a("NodeList"),T=a("n8n-button");return o(),t("div",{class:i([e.$style.card,e.lastItem&&e.$style.last,e.firstItem&&e.$style.first,!e.loading&&e.$style.loaded]),"data-test-id":"template-card",onClick:s[0]||(s[0]=(...W)=>e.onCardClick&&e.onCardClick(...W))},[e.loading?(o(),t("div",{key:0,class:i(e.$style.loading)},[r(k,{rows:2,"shrink-last":!1,loading:e.loading},null,8,["loading"])],2)):(o(),t("div",P,[r(p,{bold:!0,size:"small"},{default:f(()=>[c(u(e.workflow.name),1)]),_:1}),e.simpleView?n("",!0):(o(),t("div",{key:0,class:i(e.$style.content)},[e.workflow.totalViews?(o(),t("span",Q,[r(d,{size:"small",color:"text-light"},{default:f(()=>[r(l,{icon:"eye"}),c(" "+u(e.abbreviateNumber(e.workflow.totalViews)),1)]),_:1})])):n("",!0),e.workflow.totalViews?(o(),t("div",{key:1,class:i(e.$style.line),textContent:"|"},null,2)):n("",!0),r(d,{size:"small",color:"text-light"},{default:f(()=>[r(m,{date:e.workflow.createdAt},null,8,["date"])]),_:1}),e.workflow.user?(o(),t("div",{key:2,class:i(e.$style.line),textContent:"|"},null,2)):n("",!0),e.workflow.user?(o(),w(d,{key:3,size:"small",color:"text-light"},{default:f(()=>[c("By "+u(e.workflow.user.username),1)]),_:1})):n("",!0)],2))])),e.loading?n("",!0):(o(),t("div",{key:2,class:i([e.$style.nodesContainer,e.useWorkflowButton&&e.$style.hideOnHover])},[e.workflow.nodes?(o(),w(v,{key:0,nodes:e.workflow.nodes,limit:e.nodesToBeShown,size:"md"},null,8,["nodes","limit"])):n("",!0)],2)),e.useWorkflowButton?(o(),t("div",{key:3,class:i(e.$style.buttonContainer)},[e.useWorkflowButton?(o(),w(T,{key:0,outline:"",label:"Use workflow","data-test-id":"use-workflow-button",onClick:E(e.onUseWorkflowClick,["stop"])},null,8,["onClick"])):n("",!0)],2)):n("",!0)],2)}const Y={$style:K},Z=C(L,[["render",X],["__cssModules",Y]]),x=g({name:"TemplateList",components:{TemplateCard:Z},props:{infiniteScrollEnabled:{type:Boolean,default:!1},loading:{type:Boolean},useWorkflowButton:{type:Boolean,default:!1},workflows:{type:Array,default:()=>[]},totalWorkflows:{type:Number,default:0},simpleView:{type:Boolean,default:!1},totalCount:{type:Number,default:0}},mounted(){if(this.infiniteScrollEnabled){const e=document.getElementById("content");e&&e.addEventListener("scroll",this.onScroll)}},beforeUnmount(){const e=document.getElementById("content");e&&e.removeEventListener("scroll",this.onScroll)},methods:{onScroll(){const e=this.$refs.loader;if(!e||this.loading)return;const s=e.getBoundingClientRect();s.top>=0&&s.left>=0&&s.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&s.right<=(window.innerWidth||document.documentElement.clientWidth)&&this.$emit("loadMore")},onCardClick(e,s){this.$emit("openTemplate",{event:e,id:s})},onUseWorkflow(e,s){this.$emit("useWorkflow",{event:e,id:s})}}}),ee="_header_1ivn7_1",oe="_workflowButton_1ivn7_5",te="_button_1ivn7_5",ne="_nodes_1ivn7_8",se={header:ee,workflowButton:oe,button:te,nodes:ne},le={key:0,"data-test-id":"template-count-label"},ie=["textContent"],ae={key:0,ref:"loader"},re={key:1,"data-test-id":"templates-loading-container"};function de(e,s,y,$,B,b){const k=a("n8n-heading"),p=a("TemplateCard");return e.loading||e.workflows.length?(o(),t("div",{key:0,class:i(e.$style.list)},[e.simpleView?n("",!0):(o(),t("div",{key:0,class:i(e.$style.header)},[r(k,{bold:!0,size:"medium",color:"text-light"},{default:f(()=>[c(u(e.$locale.baseText("templates.workflows"))+" ",1),e.totalCount>0?(o(),t("span",le,"("+u(e.totalCount)+")",1)):n("",!0),!e.loading&&e.totalWorkflows?(o(),t("span",{key:1,textContent:u(`(${e.totalWorkflows})`)},null,8,ie)):n("",!0)]),_:1})],2)),U("div",{class:i(e.$style.container)},[(o(!0),t(h,null,_(e.workflows,(l,d)=>(o(),w(p,{key:l.id,workflow:l,"first-item":d===0,"simple-view":e.simpleView,"last-item":d===e.workflows.length-1&&!e.loading,"use-workflow-button":e.useWorkflowButton,onClick:m=>e.onCardClick(m,l.id),onUseWorkflow:m=>e.onUseWorkflow(m,l.id)},null,8,["workflow","first-item","simple-view","last-item","use-workflow-button","onClick","onUseWorkflow"]))),128)),e.infiniteScrollEnabled?(o(),t("div",ae,null,512)):n("",!0),e.loading?(o(),t("div",re,[(o(),t(h,null,_(4,l=>r(p,{key:"index-"+l,loading:!0,"first-item":e.workflows.length===0&&l===1,"last-item":l===4},null,8,["first-item","last-item"])),64))])):n("",!0)],2)],2)):n("",!0)}const ue={$style:se},we=C(x,[["render",de],["__cssModules",ue]]);export{we as T};
|
|
2
|
+
//# sourceMappingURL=TemplateList-DS0lnbxA.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TemplateList-DHLgDv5f.js","sources":["../../src/components/TemplateCard.vue","../../src/components/TemplateList.vue"],"sourcesContent":["<template>\n\t<div\n\t\t:class=\"[\n\t\t\t$style.card,\n\t\t\tlastItem && $style.last,\n\t\t\tfirstItem && $style.first,\n\t\t\t!loading && $style.loaded,\n\t\t]\"\n\t\tdata-test-id=\"template-card\"\n\t\t@click=\"onCardClick\"\n\t>\n\t\t<div v-if=\"loading\" :class=\"$style.loading\">\n\t\t\t<n8n-loading :rows=\"2\" :shrink-last=\"false\" :loading=\"loading\" />\n\t\t</div>\n\t\t<div v-else>\n\t\t\t<n8n-heading :bold=\"true\" size=\"small\">{{ workflow.name }}</n8n-heading>\n\t\t\t<div v-if=\"!simpleView\" :class=\"$style.content\">\n\t\t\t\t<span v-if=\"workflow.totalViews\">\n\t\t\t\t\t<n8n-text size=\"small\" color=\"text-light\">\n\t\t\t\t\t\t<font-awesome-icon icon=\"eye\" />\n\t\t\t\t\t\t{{ abbreviateNumber(workflow.totalViews) }}\n\t\t\t\t\t</n8n-text>\n\t\t\t\t</span>\n\t\t\t\t<div v-if=\"workflow.totalViews\" :class=\"$style.line\" v-text=\"'|'\" />\n\t\t\t\t<n8n-text size=\"small\" color=\"text-light\">\n\t\t\t\t\t<TimeAgo :date=\"workflow.createdAt\" />\n\t\t\t\t</n8n-text>\n\t\t\t\t<div v-if=\"workflow.user\" :class=\"$style.line\" v-text=\"'|'\" />\n\t\t\t\t<n8n-text v-if=\"workflow.user\" size=\"small\" color=\"text-light\"\n\t\t\t\t\t>By {{ workflow.user.username }}</n8n-text\n\t\t\t\t>\n\t\t\t</div>\n\t\t</div>\n\t\t<div v-if=\"!loading\" :class=\"[$style.nodesContainer, useWorkflowButton && $style.hideOnHover]\">\n\t\t\t<NodeList v-if=\"workflow.nodes\" :nodes=\"workflow.nodes\" :limit=\"nodesToBeShown\" size=\"md\" />\n\t\t</div>\n\t\t<div v-if=\"useWorkflowButton\" :class=\"$style.buttonContainer\">\n\t\t\t<n8n-button\n\t\t\t\tv-if=\"useWorkflowButton\"\n\t\t\t\toutline\n\t\t\t\tlabel=\"Use workflow\"\n\t\t\t\tdata-test-id=\"use-workflow-button\"\n\t\t\t\t@click.stop=\"onUseWorkflowClick\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { filterTemplateNodes } from '@/utils/nodeTypesUtils';\nimport { abbreviateNumber } from '@/utils/typesUtils';\nimport NodeList from './NodeList.vue';\nimport TimeAgo from '@/components/TimeAgo.vue';\n\nexport default defineComponent({\n\tname: 'TemplateCard',\n\tcomponents: {\n\t\tTimeAgo,\n\t\tNodeList,\n\t},\n\tprops: {\n\t\tlastItem: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tfirstItem: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tworkflow: {\n\t\t\ttype: Object,\n\t\t},\n\t\tuseWorkflowButton: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tsimpleView: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tnodesToBeShown: 5,\n\t\t};\n\t},\n\tmethods: {\n\t\tfilterTemplateNodes,\n\t\tabbreviateNumber,\n\t\tcountNodesToBeSliced(nodes: []): number {\n\t\t\tif (nodes.length > this.nodesToBeShown) {\n\t\t\t\treturn this.nodesToBeShown - 1;\n\t\t\t} else {\n\t\t\t\treturn this.nodesToBeShown;\n\t\t\t}\n\t\t},\n\t\tonUseWorkflowClick(e: MouseEvent) {\n\t\t\tthis.$emit('useWorkflow', e);\n\t\t},\n\t\tonCardClick(e: MouseEvent) {\n\t\t\tthis.$emit('click', e);\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.nodes {\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-content: center;\n\tflex-direction: row;\n}\n\n.icon {\n\tmargin-left: var(--spacing-xs);\n}\n\n.card {\n\tposition: relative;\n\tborder-left: var(--border-base);\n\tborder-right: var(--border-base);\n\tborder-bottom: var(--border-base);\n\tbackground-color: var(--color-background-xlight);\n\n\tdisplay: flex;\n\talign-items: center;\n\tpadding: 0 var(--spacing-s) var(--spacing-s) var(--spacing-s);\n\tbackground-color: var(--color-background-xlight);\n\tcursor: pointer;\n\n\t&:hover {\n\t\t.hideOnHover {\n\t\t\tvisibility: hidden;\n\t\t}\n\n\t\t.buttonContainer {\n\t\t\tdisplay: block;\n\t\t}\n\t}\n}\n\n.buttonContainer {\n\tdisplay: none;\n\tposition: absolute;\n\tright: 10px;\n\ttop: 30%;\n}\n\n.loaded {\n\tpadding-top: var(--spacing-s);\n}\n\n.first {\n\tborder-top: var(--border-base);\n\tborder-top-right-radius: var(--border-radius-large);\n\tborder-top-left-radius: var(--border-radius-large);\n}\n\n.last {\n\tborder-bottom-right-radius: var(--border-radius-large);\n\tborder-bottom-left-radius: var(--border-radius-large);\n}\n\n.content {\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.line {\n\tpadding: 0 6px;\n\tcolor: var(--color-foreground-base);\n\tfont-size: var(--font-size-2xs);\n}\n\n.loading {\n\twidth: 100%;\n\tbackground-color: var(--color-background-xlight);\n}\n\n.nodesContainer {\n\tmin-width: 175px;\n\tdisplay: flex;\n\tjustify-content: flex-end;\n\talign-items: center;\n\tflex-grow: 1;\n}\n</style>\n","<template>\n\t<div v-if=\"loading || workflows.length\" :class=\"$style.list\">\n\t\t<div v-if=\"!simpleView\" :class=\"$style.header\">\n\t\t\t<n8n-heading :bold=\"true\" size=\"medium\" color=\"text-light\">\n\t\t\t\t{{ $locale.baseText('templates.workflows') }}\n\t\t\t\t<span v-if=\"totalCount > 0\" data-test-id=\"template-count-label\">({{ totalCount }})</span>\n\t\t\t\t<span v-if=\"!loading && totalWorkflows\" v-text=\"`(${totalWorkflows})`\" />\n\t\t\t</n8n-heading>\n\t\t</div>\n\t\t<div :class=\"$style.container\">\n\t\t\t<TemplateCard\n\t\t\t\tv-for=\"(workflow, index) in workflows\"\n\t\t\t\t:key=\"workflow.id\"\n\t\t\t\t:workflow=\"workflow\"\n\t\t\t\t:first-item=\"index === 0\"\n\t\t\t\t:simple-view=\"simpleView\"\n\t\t\t\t:last-item=\"index === workflows.length - 1 && !loading\"\n\t\t\t\t:use-workflow-button=\"useWorkflowButton\"\n\t\t\t\t@click=\"(e) => onCardClick(e, workflow.id)\"\n\t\t\t\t@use-workflow=\"(e) => onUseWorkflow(e, workflow.id)\"\n\t\t\t/>\n\t\t\t<div v-if=\"infiniteScrollEnabled\" ref=\"loader\" />\n\t\t\t<div v-if=\"loading\" data-test-id=\"templates-loading-container\">\n\t\t\t\t<TemplateCard\n\t\t\t\t\tv-for=\"n in 4\"\n\t\t\t\t\t:key=\"'index-' + n\"\n\t\t\t\t\t:loading=\"true\"\n\t\t\t\t\t:first-item=\"workflows.length === 0 && n === 1\"\n\t\t\t\t\t:last-item=\"n === 4\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport TemplateCard from './TemplateCard.vue';\n\nexport default defineComponent({\n\tname: 'TemplateList',\n\tcomponents: {\n\t\tTemplateCard,\n\t},\n\tprops: {\n\t\tinfiniteScrollEnabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tuseWorkflowButton: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tworkflows: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\ttotalWorkflows: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\t\tsimpleView: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\ttotalCount: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\t},\n\tmounted() {\n\t\tif (this.infiniteScrollEnabled) {\n\t\t\tconst content = document.getElementById('content');\n\t\t\tif (content) {\n\t\t\t\tcontent.addEventListener('scroll', this.onScroll);\n\t\t\t}\n\t\t}\n\t},\n\tbeforeUnmount() {\n\t\tconst content = document.getElementById('content');\n\t\tif (content) {\n\t\t\tcontent.removeEventListener('scroll', this.onScroll);\n\t\t}\n\t},\n\tmethods: {\n\t\tonScroll() {\n\t\t\tconst loaderRef = this.$refs.loader as HTMLElement | undefined;\n\t\t\tif (!loaderRef || this.loading) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst rect = loaderRef.getBoundingClientRect();\n\t\t\tconst inView =\n\t\t\t\trect.top >= 0 &&\n\t\t\t\trect.left >= 0 &&\n\t\t\t\trect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n\t\t\t\trect.right <= (window.innerWidth || document.documentElement.clientWidth);\n\n\t\t\tif (inView) {\n\t\t\t\tthis.$emit('loadMore');\n\t\t\t}\n\t\t},\n\t\tonCardClick(event: MouseEvent, id: string) {\n\t\t\tthis.$emit('openTemplate', { event, id });\n\t\t},\n\t\tonUseWorkflow(event: MouseEvent, id: string) {\n\t\t\tthis.$emit('useWorkflow', { event, id });\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.header {\n\tpadding-bottom: var(--spacing-2xs);\n}\n\n.workflowButton {\n\t&:hover {\n\t\t.button {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\t.nodes {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n</style>\n"],"names":["_sfc_main$1","defineComponent","TimeAgo","NodeList","filterTemplateNodes","abbreviateNumber","nodes","_resolveComponent","$style","_createElementBlock","lastItem","firstItem","loading","_ctx","_cache","args","_openBlock","_normalizeClass","_component_n8n_loading","_hoisted_1","_createVNode","_component_n8n_heading","_createTextVNode","_toDisplayString","simpleView","workflow","_hoisted_2","_component_n8n_text","_withCtx","_component_font_awesome_icon","_createCommentVNode","_component_TimeAgo","_createBlock","_component_NodeList","useWorkflowButton","_component_n8n_button","_withModifiers","_sfc_main","TemplateCard","content","loaderRef","rect","event","id","_hoisted_3","_hoisted_4","workflows","totalCount","totalWorkflows","_Fragment","_renderList","index","_component_TemplateCard","onCardClick","onUseWorkflow","n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TemplateList-DS0lnbxA.js","sources":["../../src/components/TemplateCard.vue","../../src/components/TemplateList.vue"],"sourcesContent":["<template>\n\t<div\n\t\t:class=\"[\n\t\t\t$style.card,\n\t\t\tlastItem && $style.last,\n\t\t\tfirstItem && $style.first,\n\t\t\t!loading && $style.loaded,\n\t\t]\"\n\t\tdata-test-id=\"template-card\"\n\t\t@click=\"onCardClick\"\n\t>\n\t\t<div v-if=\"loading\" :class=\"$style.loading\">\n\t\t\t<n8n-loading :rows=\"2\" :shrink-last=\"false\" :loading=\"loading\" />\n\t\t</div>\n\t\t<div v-else>\n\t\t\t<n8n-heading :bold=\"true\" size=\"small\">{{ workflow.name }}</n8n-heading>\n\t\t\t<div v-if=\"!simpleView\" :class=\"$style.content\">\n\t\t\t\t<span v-if=\"workflow.totalViews\">\n\t\t\t\t\t<n8n-text size=\"small\" color=\"text-light\">\n\t\t\t\t\t\t<font-awesome-icon icon=\"eye\" />\n\t\t\t\t\t\t{{ abbreviateNumber(workflow.totalViews) }}\n\t\t\t\t\t</n8n-text>\n\t\t\t\t</span>\n\t\t\t\t<div v-if=\"workflow.totalViews\" :class=\"$style.line\" v-text=\"'|'\" />\n\t\t\t\t<n8n-text size=\"small\" color=\"text-light\">\n\t\t\t\t\t<TimeAgo :date=\"workflow.createdAt\" />\n\t\t\t\t</n8n-text>\n\t\t\t\t<div v-if=\"workflow.user\" :class=\"$style.line\" v-text=\"'|'\" />\n\t\t\t\t<n8n-text v-if=\"workflow.user\" size=\"small\" color=\"text-light\"\n\t\t\t\t\t>By {{ workflow.user.username }}</n8n-text\n\t\t\t\t>\n\t\t\t</div>\n\t\t</div>\n\t\t<div v-if=\"!loading\" :class=\"[$style.nodesContainer, useWorkflowButton && $style.hideOnHover]\">\n\t\t\t<NodeList v-if=\"workflow.nodes\" :nodes=\"workflow.nodes\" :limit=\"nodesToBeShown\" size=\"md\" />\n\t\t</div>\n\t\t<div v-if=\"useWorkflowButton\" :class=\"$style.buttonContainer\">\n\t\t\t<n8n-button\n\t\t\t\tv-if=\"useWorkflowButton\"\n\t\t\t\toutline\n\t\t\t\tlabel=\"Use workflow\"\n\t\t\t\tdata-test-id=\"use-workflow-button\"\n\t\t\t\t@click.stop=\"onUseWorkflowClick\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { filterTemplateNodes } from '@/utils/nodeTypesUtils';\nimport { abbreviateNumber } from '@/utils/typesUtils';\nimport NodeList from './NodeList.vue';\nimport TimeAgo from '@/components/TimeAgo.vue';\n\nexport default defineComponent({\n\tname: 'TemplateCard',\n\tcomponents: {\n\t\tTimeAgo,\n\t\tNodeList,\n\t},\n\tprops: {\n\t\tlastItem: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tfirstItem: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tworkflow: {\n\t\t\ttype: Object,\n\t\t},\n\t\tuseWorkflowButton: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tsimpleView: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tnodesToBeShown: 5,\n\t\t};\n\t},\n\tmethods: {\n\t\tfilterTemplateNodes,\n\t\tabbreviateNumber,\n\t\tcountNodesToBeSliced(nodes: []): number {\n\t\t\tif (nodes.length > this.nodesToBeShown) {\n\t\t\t\treturn this.nodesToBeShown - 1;\n\t\t\t} else {\n\t\t\t\treturn this.nodesToBeShown;\n\t\t\t}\n\t\t},\n\t\tonUseWorkflowClick(e: MouseEvent) {\n\t\t\tthis.$emit('useWorkflow', e);\n\t\t},\n\t\tonCardClick(e: MouseEvent) {\n\t\t\tthis.$emit('click', e);\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.nodes {\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-content: center;\n\tflex-direction: row;\n}\n\n.icon {\n\tmargin-left: var(--spacing-xs);\n}\n\n.card {\n\tposition: relative;\n\tborder-left: var(--border-base);\n\tborder-right: var(--border-base);\n\tborder-bottom: var(--border-base);\n\tbackground-color: var(--color-background-xlight);\n\n\tdisplay: flex;\n\talign-items: center;\n\tpadding: 0 var(--spacing-s) var(--spacing-s) var(--spacing-s);\n\tbackground-color: var(--color-background-xlight);\n\tcursor: pointer;\n\n\t&:hover {\n\t\t.hideOnHover {\n\t\t\tvisibility: hidden;\n\t\t}\n\n\t\t.buttonContainer {\n\t\t\tdisplay: block;\n\t\t}\n\t}\n}\n\n.buttonContainer {\n\tdisplay: none;\n\tposition: absolute;\n\tright: 10px;\n\ttop: 30%;\n}\n\n.loaded {\n\tpadding-top: var(--spacing-s);\n}\n\n.first {\n\tborder-top: var(--border-base);\n\tborder-top-right-radius: var(--border-radius-large);\n\tborder-top-left-radius: var(--border-radius-large);\n}\n\n.last {\n\tborder-bottom-right-radius: var(--border-radius-large);\n\tborder-bottom-left-radius: var(--border-radius-large);\n}\n\n.content {\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.line {\n\tpadding: 0 6px;\n\tcolor: var(--color-foreground-base);\n\tfont-size: var(--font-size-2xs);\n}\n\n.loading {\n\twidth: 100%;\n\tbackground-color: var(--color-background-xlight);\n}\n\n.nodesContainer {\n\tmin-width: 175px;\n\tdisplay: flex;\n\tjustify-content: flex-end;\n\talign-items: center;\n\tflex-grow: 1;\n}\n</style>\n","<template>\n\t<div v-if=\"loading || workflows.length\" :class=\"$style.list\">\n\t\t<div v-if=\"!simpleView\" :class=\"$style.header\">\n\t\t\t<n8n-heading :bold=\"true\" size=\"medium\" color=\"text-light\">\n\t\t\t\t{{ $locale.baseText('templates.workflows') }}\n\t\t\t\t<span v-if=\"totalCount > 0\" data-test-id=\"template-count-label\">({{ totalCount }})</span>\n\t\t\t\t<span v-if=\"!loading && totalWorkflows\" v-text=\"`(${totalWorkflows})`\" />\n\t\t\t</n8n-heading>\n\t\t</div>\n\t\t<div :class=\"$style.container\">\n\t\t\t<TemplateCard\n\t\t\t\tv-for=\"(workflow, index) in workflows\"\n\t\t\t\t:key=\"workflow.id\"\n\t\t\t\t:workflow=\"workflow\"\n\t\t\t\t:first-item=\"index === 0\"\n\t\t\t\t:simple-view=\"simpleView\"\n\t\t\t\t:last-item=\"index === workflows.length - 1 && !loading\"\n\t\t\t\t:use-workflow-button=\"useWorkflowButton\"\n\t\t\t\t@click=\"(e) => onCardClick(e, workflow.id)\"\n\t\t\t\t@use-workflow=\"(e) => onUseWorkflow(e, workflow.id)\"\n\t\t\t/>\n\t\t\t<div v-if=\"infiniteScrollEnabled\" ref=\"loader\" />\n\t\t\t<div v-if=\"loading\" data-test-id=\"templates-loading-container\">\n\t\t\t\t<TemplateCard\n\t\t\t\t\tv-for=\"n in 4\"\n\t\t\t\t\t:key=\"'index-' + n\"\n\t\t\t\t\t:loading=\"true\"\n\t\t\t\t\t:first-item=\"workflows.length === 0 && n === 1\"\n\t\t\t\t\t:last-item=\"n === 4\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport TemplateCard from './TemplateCard.vue';\n\nexport default defineComponent({\n\tname: 'TemplateList',\n\tcomponents: {\n\t\tTemplateCard,\n\t},\n\tprops: {\n\t\tinfiniteScrollEnabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t},\n\t\tuseWorkflowButton: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tworkflows: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\ttotalWorkflows: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\t\tsimpleView: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\ttotalCount: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\t},\n\tmounted() {\n\t\tif (this.infiniteScrollEnabled) {\n\t\t\tconst content = document.getElementById('content');\n\t\t\tif (content) {\n\t\t\t\tcontent.addEventListener('scroll', this.onScroll);\n\t\t\t}\n\t\t}\n\t},\n\tbeforeUnmount() {\n\t\tconst content = document.getElementById('content');\n\t\tif (content) {\n\t\t\tcontent.removeEventListener('scroll', this.onScroll);\n\t\t}\n\t},\n\tmethods: {\n\t\tonScroll() {\n\t\t\tconst loaderRef = this.$refs.loader as HTMLElement | undefined;\n\t\t\tif (!loaderRef || this.loading) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst rect = loaderRef.getBoundingClientRect();\n\t\t\tconst inView =\n\t\t\t\trect.top >= 0 &&\n\t\t\t\trect.left >= 0 &&\n\t\t\t\trect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n\t\t\t\trect.right <= (window.innerWidth || document.documentElement.clientWidth);\n\n\t\t\tif (inView) {\n\t\t\t\tthis.$emit('loadMore');\n\t\t\t}\n\t\t},\n\t\tonCardClick(event: MouseEvent, id: string) {\n\t\t\tthis.$emit('openTemplate', { event, id });\n\t\t},\n\t\tonUseWorkflow(event: MouseEvent, id: string) {\n\t\t\tthis.$emit('useWorkflow', { event, id });\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.header {\n\tpadding-bottom: var(--spacing-2xs);\n}\n\n.workflowButton {\n\t&:hover {\n\t\t.button {\n\t\t\tdisplay: block;\n\t\t}\n\n\t\t.nodes {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n</style>\n"],"names":["_sfc_main$1","defineComponent","TimeAgo","NodeList","filterTemplateNodes","abbreviateNumber","nodes","_resolveComponent","$style","_createElementBlock","lastItem","firstItem","loading","_ctx","_cache","args","_openBlock","_normalizeClass","_component_n8n_loading","_hoisted_1","_createVNode","_component_n8n_heading","_createTextVNode","_toDisplayString","simpleView","workflow","_hoisted_2","_component_n8n_text","_withCtx","_component_font_awesome_icon","_createCommentVNode","_component_TimeAgo","_createBlock","_component_NodeList","useWorkflowButton","_component_n8n_button","_withModifiers","_sfc_main","TemplateCard","content","loaderRef","rect","event","id","_hoisted_3","_hoisted_4","workflows","totalCount","totalWorkflows","_Fragment","_renderList","index","_component_TemplateCard","onCardClick","onUseWorkflow","n"],"mappings":"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"}
|
package/dist/assets/{TemplatesCollectionView-Bix3khnw.js → TemplatesCollectionView-BMck3jn9.js}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{m as v}from"./pinia-Dh4cxKZ0.js";import{T as S}from"./TemplateDetails-
|
|
2
|
-
//# sourceMappingURL=TemplatesCollectionView-
|
|
1
|
+
import{m as v}from"./pinia-Dh4cxKZ0.js";import{T as S}from"./TemplateDetails-DZzMxROe.js";import{T as C}from"./TemplateList-DS0lnbxA.js";import{T as I}from"./TemplatesView-CuyRlzAM.js";import{cQ as V,$ as h,cR as w,V as E,a4 as B,a3 as F}from"./index-BQ6Z7VRj.js";import{u as W}from"./templateActions-F64sfZ3n.js";import{G as q,l,M as m,a9 as N,O as s,p as r,I as t,m as p,U as a,R as c,S as d,T as u,ag as n}from"./vendor-CUQSof8H.js";import{_ as H}from"./n8n-DT_bOwuZ.js";import"./NodeList-B4yRfzDq.js";import"./axios-Mm4CS0gO.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-BiGWdRh4.js";import"./lodash-es-BFdF4Er8.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-C0ZgbPvs.js";import"./vue-i18n-CG6eDDlD.js";import"./uuid-SoommWqA.js";import"./luxon-CLwAIbs0.js";import"./@n8n/codemirror-lang-sql-x14jMqbG.js";import"./@lezer/common-B6ct0j_v.js";import"./prettier-bS6l4Vb1.js";import"./@jsplumb/util-DS-9vq_E.js";import"./@jsplumb/core-CVBraiyY.js";import"./@jsplumb/common-CF-b-6-M.js";import"./@jsplumb/connector-bezier-BGU0Ovbw.js";import"./@jsplumb/browser-ui-BVF2KoJK.js";import"./codemirror-lang-html-n8n-DcTmlMkf.js";import"./@n8n/codemirror-lang-Qkdx7NoQ.js";import"./esprima-next-nhoSXAeq.js";import"./fast-json-stable-stringify-wY6jAr7b.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-DOxvr88t.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";const O=q({name:"TemplatesCollectionView",components:{TemplateDetails:S,TemplateList:C,TemplatesView:I},setup(){return{externalHooks:F()}},computed:{...v(h,V),collection(){return this.templatesStore.getCollectionById(this.collectionId)},collectionId(){return Array.isArray(this.$route.params.id)?this.$route.params.id[0]:this.$route.params.id},collectionWorkflows(){return this.collection?this.collection.workflows.map(({id:e})=>this.templatesStore.getTemplateById(e.toString())):null}},data(){return{loading:!0,notFoundError:!1}},watch:{collection(e){e?w(`n8n - Template collection: ${e.name}`):w("n8n - Templates")}},async mounted(){if(this.scrollToTop(),this.collection&&this.collection.full){this.loading=!1;return}try{await this.templatesStore.fetchCollectionById(this.collectionId)}catch{this.notFoundError=!0}this.loading=!1},methods:{scrollToTop(){setTimeout(()=>{const e=document.getElementById("content");e&&e.scrollTo({top:0,behavior:"smooth"})},50)},onOpenTemplate({event:e,id:o}){this.navigateTo(e,E.TEMPLATE,o)},async onUseWorkflow({event:e,id:o}){await W({posthogStore:this.posthogStore,router:this.$router,templateId:o,inNewBrowserTab:e.metaKey||e.ctrlKey,templatesStore:h(),externalHooks:this.externalHooks,nodeTypesStore:B(),telemetry:this.$telemetry,source:"template_list"})},navigateTo(e,o,i){if(e.metaKey||e.ctrlKey){const T=this.$router.resolve({name:o,params:{id:i}});window.open(T.href,"_blank");return}else this.$router.push({name:o,params:{id:i}})}}}),U="_wrapper_b0vqe_1",A="_notFound_b0vqe_11",D="_title_b0vqe_15",K="_button_b0vqe_19",L="_mainContent_b0vqe_23",M="_markdown_b0vqe_34",z="_details_b0vqe_38",P={wrapper:U,notFound:A,title:D,button:K,mainContent:L,markdown:M,details:z};function R(e,o,i,T,Q,j){const g=n("n8n-heading"),f=n("n8n-text"),k=n("n8n-loading"),y=n("n8n-markdown"),b=n("TemplateList"),$=n("TemplateDetails"),_=n("TemplatesView");return l(),m(_,{"go-back-enabled":!0},N({header:s(()=>[e.notFoundError?(l(),p("div",{key:1,class:t(e.$style.notFound)},[a(f,{color:"text-base"},{default:s(()=>[d(u(e.$locale.baseText("templates.collectionsNotFound")),1)]),_:1})],2)):(l(),p("div",{key:0,class:t(e.$style.wrapper)},[r("div",{class:t(e.$style.title)},[e.collection&&e.collection.name?(l(),m(g,{key:0,tag:"h1",size:"2xlarge"},{default:s(()=>[d(u(e.collection.name),1)]),_:1})):c("",!0),e.collection&&e.collection.name?(l(),m(f,{key:1,color:"text-base",size:"small"},{default:s(()=>[d(u(e.$locale.baseText("templates.collection")),1)]),_:1})):c("",!0),a(k,{loading:!e.collection||!e.collection.name,rows:2,variant:"h1"},null,8,["loading"])],2)],2))]),_:2},[e.notFoundError?void 0:{name:"content",fn:s(()=>[r("div",{class:t(e.$style.wrapper)},[r("div",{class:t(e.$style.mainContent)},[e.loading||e.collection&&e.collection.description?(l(),p("div",{key:0,class:t(e.$style.markdown)},[a(y,{content:e.collection&&e.collection.description,images:e.collection&&e.collection.image,loading:e.loading},null,8,["content","images","loading"])],2)):c("",!0),a(b,{"infinite-scroll-enabled":!1,loading:e.loading,"use-workflow-button":!0,workflows:e.loading?[]:e.collectionWorkflows,onUseWorkflow:e.onUseWorkflow,onOpenTemplate:e.onOpenTemplate},null,8,["loading","workflows","onUseWorkflow","onOpenTemplate"])],2),r("div",{class:t(e.$style.details)},[a($,{"block-title":e.$locale.baseText("template.details.appsInTheCollection"),loading:e.loading,template:e.collection},null,8,["block-title","loading","template"])],2)],2)]),key:"0"}]),1024)}const G={$style:P},Ee=H(O,[["render",R],["__cssModules",G]]);export{Ee as default};
|
|
2
|
+
//# sourceMappingURL=TemplatesCollectionView-BMck3jn9.js.map
|