n8n-editor-ui 1.48.0 → 1.48.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 +79 -79
- package/dist/assets/{AuthView-Cfnovems.js → AuthView-DeM_7KeR.js} +2 -2
- package/dist/assets/{AuthView-Cfnovems.js.map → AuthView-DeM_7KeR.js.map} +1 -1
- package/dist/assets/{CanvasControls-Dis0UJTc.js → CanvasControls-BarjtIlw.js} +2 -2
- package/dist/assets/{CanvasControls-Dis0UJTc.js.map → CanvasControls-BarjtIlw.js.map} +1 -1
- package/dist/assets/{ChangePasswordView-CFVFfkrj.js → ChangePasswordView-BsVhSf9z.js} +2 -2
- package/dist/assets/{ChangePasswordView-CFVFfkrj.js.map → ChangePasswordView-BsVhSf9z.js.map} +1 -1
- package/dist/assets/{CollectionParameter-BKwsDV7i.js → CollectionParameter-ruqgU7kr.js} +2 -2
- package/dist/assets/CollectionParameter-ruqgU7kr.js.map +1 -0
- package/dist/assets/{CredentialsView-D-Gs1CW_.js → CredentialsView-CEWMy0O7.js} +2 -2
- package/dist/assets/{CredentialsView-D-Gs1CW_.js.map → CredentialsView-CEWMy0O7.js.map} +1 -1
- package/dist/assets/{ErrorView-B9fsIgpd.js → ErrorView-i1G_7Vnl.js} +2 -2
- package/dist/assets/{ErrorView-B9fsIgpd.js.map → ErrorView-i1G_7Vnl.js.map} +1 -1
- package/dist/assets/{ExecutionsFilter-Bp-2hjm2.js → ExecutionsFilter-8p_qD50I.js} +2 -2
- package/dist/assets/{ExecutionsFilter-Bp-2hjm2.js.map → ExecutionsFilter-8p_qD50I.js.map} +1 -1
- package/dist/assets/{ExecutionsView-CaF0x9T5.js → ExecutionsView-Bw4zWCsi.js} +2 -2
- package/dist/assets/{ExecutionsView-CaF0x9T5.js.map → ExecutionsView-Bw4zWCsi.js.map} +1 -1
- package/dist/assets/{ForgotMyPasswordView-C6mthrk9.js → ForgotMyPasswordView-xpgEo3Ld.js} +2 -2
- package/dist/assets/{ForgotMyPasswordView-C6mthrk9.js.map → ForgotMyPasswordView-xpgEo3Ld.js.map} +1 -1
- package/dist/assets/{MainHeader-Cq4gEd6q.js → MainHeader-BckwBOk-.js} +2 -2
- package/dist/assets/{MainHeader-Cq4gEd6q.js.map → MainHeader-BckwBOk-.js.map} +1 -1
- package/dist/assets/{MainSidebar-5O6ikbgz.js → MainSidebar-Cs4qBbtI.js} +2 -2
- package/dist/assets/{MainSidebar-5O6ikbgz.js.map → MainSidebar-Cs4qBbtI.js.map} +1 -1
- package/dist/assets/{NodeCreation-Ddbdc92L.js → NodeCreation-CicljMw4.js} +3 -3
- package/dist/assets/{NodeCreation-Ddbdc92L.js.map → NodeCreation-CicljMw4.js.map} +1 -1
- package/dist/assets/{NodeCreator-DCRSsCDa.js → NodeCreator-B_seYieX.js} +2 -2
- package/dist/assets/{NodeCreator-DCRSsCDa.js.map → NodeCreator-B_seYieX.js.map} +1 -1
- package/dist/assets/NodeDetailsView-uX6Ox6-p.js +4 -0
- package/dist/assets/NodeDetailsView-uX6Ox6-p.js.map +1 -0
- package/dist/assets/{NodeView-ZNm7_dIP.css → NodeView-B1741gUJ.css} +1 -1
- package/dist/assets/{NodeView-DHiWHy1x.js → NodeView-dhEa5JeF.js} +3 -3
- package/dist/assets/NodeView-dhEa5JeF.js.map +1 -0
- package/dist/assets/NodeView.v2-BTnhsVQt.js +3 -0
- package/dist/assets/{NodeView.v2-Ces_FOmN.js.map → NodeView.v2-BTnhsVQt.js.map} +1 -1
- package/dist/assets/{ProjectCardBadge.vue_vue_type_script_setup_true_lang-BrrHv_OT.js → ProjectCardBadge.vue_vue_type_script_setup_true_lang-DrgXuCbj.js} +2 -2
- package/dist/assets/{ProjectCardBadge.vue_vue_type_script_setup_true_lang-BrrHv_OT.js.map → ProjectCardBadge.vue_vue_type_script_setup_true_lang-DrgXuCbj.js.map} +1 -1
- package/dist/assets/{ProjectSettings-DwtXe_N9.js → ProjectSettings-H_vMYteG.js} +2 -2
- package/dist/assets/{ProjectSettings-DwtXe_N9.js.map → ProjectSettings-H_vMYteG.js.map} +1 -1
- package/dist/assets/{ProjectTabs-DY8rNWak.js → ProjectTabs-CBgK4uTk.js} +2 -2
- package/dist/assets/{ProjectTabs-DY8rNWak.js.map → ProjectTabs-CBgK4uTk.js.map} +1 -1
- package/dist/assets/{PushConnectionTracker-BodK8d2Q.js → PushConnectionTracker-CaBlBm3C.js} +2 -2
- package/dist/assets/{PushConnectionTracker-BodK8d2Q.js.map → PushConnectionTracker-CaBlBm3C.js.map} +1 -1
- package/dist/assets/{ResourcesListLayout-qK7zTnkk.js → ResourcesListLayout-DqfRSMy0.js} +2 -2
- package/dist/assets/{ResourcesListLayout-qK7zTnkk.js.map → ResourcesListLayout-DqfRSMy0.js.map} +1 -1
- package/dist/assets/{RunDataAi-CQWIq0sA.js → RunDataAi-BRDcniUj.js} +2 -2
- package/dist/assets/{RunDataAi-CQWIq0sA.js.map → RunDataAi-BRDcniUj.js.map} +1 -1
- package/dist/assets/{RunDataJson-DV2qWwIx.js → RunDataJson-CJg6rq7p.js} +3 -3
- package/dist/assets/{RunDataJson-DV2qWwIx.js.map → RunDataJson-CJg6rq7p.js.map} +1 -1
- package/dist/assets/{RunDataJsonActions-D9BQabwD.js → RunDataJsonActions-DtpaWP51.js} +2 -2
- package/dist/assets/{RunDataJsonActions-D9BQabwD.js.map → RunDataJsonActions-DtpaWP51.js.map} +1 -1
- package/dist/assets/{RunDataSchema-CEbOE_wk.js → RunDataSchema-CH1XRzPV.js} +2 -2
- package/dist/assets/{RunDataSchema-CEbOE_wk.js.map → RunDataSchema-CH1XRzPV.js.map} +1 -1
- package/dist/assets/{RunDataSearch-BIoMsNXa.js → RunDataSearch-CtzUEG0k.js} +2 -2
- package/dist/assets/{RunDataSearch-BIoMsNXa.js.map → RunDataSearch-CtzUEG0k.js.map} +1 -1
- package/dist/assets/{RunDataTable-DRwDl7l_.js → RunDataTable-Bwwqtg2e.js} +2 -2
- package/dist/assets/{RunDataTable-DRwDl7l_.js.map → RunDataTable-Bwwqtg2e.js.map} +1 -1
- package/dist/assets/{SamlOnboarding-B7CMPcIO.js → SamlOnboarding-C8J1wO2_.js} +2 -2
- package/dist/assets/{SamlOnboarding-B7CMPcIO.js.map → SamlOnboarding-C8J1wO2_.js.map} +1 -1
- package/dist/assets/{SettingsApiView-2o3tSk6F.js → SettingsApiView-CFZYL9SM.js} +2 -2
- package/dist/assets/{SettingsApiView-2o3tSk6F.js.map → SettingsApiView-CFZYL9SM.js.map} +1 -1
- package/dist/assets/{SettingsCommunityNodesView-DtFVlTax.js → SettingsCommunityNodesView-BJygUgC4.js} +2 -2
- package/dist/assets/{SettingsCommunityNodesView-DtFVlTax.js.map → SettingsCommunityNodesView-BJygUgC4.js.map} +1 -1
- package/dist/assets/{SettingsExternalSecrets-b3iC5CUl.js → SettingsExternalSecrets-Dvrb_hHi.js} +2 -2
- package/dist/assets/{SettingsExternalSecrets-b3iC5CUl.js.map → SettingsExternalSecrets-Dvrb_hHi.js.map} +1 -1
- package/dist/assets/{SettingsFakeDoorView-BDqufqIU.js → SettingsFakeDoorView-BAi6oJnj.js} +2 -2
- package/dist/assets/{SettingsFakeDoorView-BDqufqIU.js.map → SettingsFakeDoorView-BAi6oJnj.js.map} +1 -1
- package/dist/assets/{SettingsLdapView-KAZZv8gN.js → SettingsLdapView-BMSWqnQ9.js} +2 -2
- package/dist/assets/{SettingsLdapView-KAZZv8gN.js.map → SettingsLdapView-BMSWqnQ9.js.map} +1 -1
- package/dist/assets/{SettingsLogStreamingView-BQB24Jd7.js → SettingsLogStreamingView-HusCnCf9.js} +2 -2
- package/dist/assets/{SettingsLogStreamingView-BQB24Jd7.js.map → SettingsLogStreamingView-HusCnCf9.js.map} +1 -1
- package/dist/assets/{SettingsPersonalView-BucAs1ZA.js → SettingsPersonalView-CJLyPtEQ.js} +2 -2
- package/dist/assets/{SettingsPersonalView-BucAs1ZA.js.map → SettingsPersonalView-CJLyPtEQ.js.map} +1 -1
- package/dist/assets/{SettingsSourceControl-iph73y14.js → SettingsSourceControl-DEfa_Jc9.js} +2 -2
- package/dist/assets/{SettingsSourceControl-iph73y14.js.map → SettingsSourceControl-DEfa_Jc9.js.map} +1 -1
- package/dist/assets/{SettingsSso-dhn_J94r.js → SettingsSso-QPRaZWWj.js} +2 -2
- package/dist/assets/{SettingsSso-dhn_J94r.js.map → SettingsSso-QPRaZWWj.js.map} +1 -1
- package/dist/assets/{SettingsUsageAndPlan-UVZXvMB0.js → SettingsUsageAndPlan-CRnR3ZSO.js} +2 -2
- package/dist/assets/{SettingsUsageAndPlan-UVZXvMB0.js.map → SettingsUsageAndPlan-CRnR3ZSO.js.map} +1 -1
- package/dist/assets/{SettingsUsersView-D7RGgFQd.js → SettingsUsersView-DZFKtn1k.js} +2 -2
- package/dist/assets/{SettingsUsersView-D7RGgFQd.js.map → SettingsUsersView-DZFKtn1k.js.map} +1 -1
- package/dist/assets/{SettingsView-B162yoGp.js → SettingsView-DNVOn5WZ.js} +2 -2
- package/dist/assets/{SettingsView-B162yoGp.js.map → SettingsView-DNVOn5WZ.js.map} +1 -1
- package/dist/assets/{SetupView-njSOn-8-.js → SetupView-DotzeMGc.js} +2 -2
- package/dist/assets/{SetupView-njSOn-8-.js.map → SetupView-DotzeMGc.js.map} +1 -1
- package/dist/assets/{SetupWorkflowCredentialsButton-D6kdzcAr.js → SetupWorkflowCredentialsButton-B5QDECym.js} +2 -2
- package/dist/assets/{SetupWorkflowCredentialsButton-D6kdzcAr.js.map → SetupWorkflowCredentialsButton-B5QDECym.js.map} +1 -1
- package/dist/assets/{SetupWorkflowFromTemplateView-BG4CefMq.js → SetupWorkflowFromTemplateView-Cret3KQc.js} +2 -2
- package/dist/assets/{SetupWorkflowFromTemplateView-BG4CefMq.js.map → SetupWorkflowFromTemplateView-Cret3KQc.js.map} +1 -1
- package/dist/assets/{SigninView-CDnvthma.js → SigninView-C-e__nLi.js} +2 -2
- package/dist/assets/{SigninView-CDnvthma.js.map → SigninView-C-e__nLi.js.map} +1 -1
- package/dist/assets/{SignoutView-CGC8CP2R.js → SignoutView-BnQGk2l9.js} +2 -2
- package/dist/assets/{SignoutView-CGC8CP2R.js.map → SignoutView-BnQGk2l9.js.map} +1 -1
- package/dist/assets/{SignupView-DzjytZkS.js → SignupView-CXd-UXXE.js} +2 -2
- package/dist/assets/{SignupView-DzjytZkS.js.map → SignupView-CXd-UXXE.js.map} +1 -1
- package/dist/assets/{TemplateDetails-1Y3PVQer.js → TemplateDetails-d7bjG-lc.js} +2 -2
- package/dist/assets/{TemplateDetails-1Y3PVQer.js.map → TemplateDetails-d7bjG-lc.js.map} +1 -1
- package/dist/assets/{TemplateList-BAk7Min6.js → TemplateList-B-UGoryh.js} +2 -2
- package/dist/assets/{TemplateList-BAk7Min6.js.map → TemplateList-B-UGoryh.js.map} +1 -1
- package/dist/assets/{TemplatesCollectionView-B7-6TTfO.js → TemplatesCollectionView-C3NLN4r4.js} +2 -2
- package/dist/assets/{TemplatesCollectionView-B7-6TTfO.js.map → TemplatesCollectionView-C3NLN4r4.js.map} +1 -1
- package/dist/assets/{TemplatesSearchView-DbRpG5Mr.js → TemplatesSearchView-d6JOZHQV.js} +2 -2
- package/dist/assets/{TemplatesSearchView-DbRpG5Mr.js.map → TemplatesSearchView-d6JOZHQV.js.map} +1 -1
- package/dist/assets/{TemplatesView-COyKdRm2.js → TemplatesView-CWeiRxEd.js} +2 -2
- package/dist/assets/{TemplatesView-COyKdRm2.js.map → TemplatesView-CWeiRxEd.js.map} +1 -1
- package/dist/assets/{TemplatesWorkflowView-CIeAGGeu.js → TemplatesWorkflowView-BnHhke9R.js} +2 -2
- package/dist/assets/{TemplatesWorkflowView-CIeAGGeu.js.map → TemplatesWorkflowView-BnHhke9R.js.map} +1 -1
- package/dist/assets/{VariablesView-BWE4aH2w.js → VariablesView-HRSOjl6h.js} +2 -2
- package/dist/assets/{VariablesView-BWE4aH2w.js.map → VariablesView-HRSOjl6h.js.map} +1 -1
- package/dist/assets/{WorkerView-9f3_1jpS.js → WorkerView-BoBwGroS.js} +2 -2
- package/dist/assets/{WorkerView-9f3_1jpS.js.map → WorkerView-BoBwGroS.js.map} +1 -1
- package/dist/assets/{WorkflowActivator-B6RfdJ_9.js → WorkflowActivator-b_Aa-Z_t.js} +2 -2
- package/dist/assets/{WorkflowActivator-B6RfdJ_9.js.map → WorkflowActivator-b_Aa-Z_t.js.map} +1 -1
- package/dist/assets/{WorkflowExecutionsInfoAccordion-BluokbL6.js → WorkflowExecutionsInfoAccordion-B5WHuoYD.js} +2 -2
- package/dist/assets/{WorkflowExecutionsInfoAccordion-BluokbL6.js.map → WorkflowExecutionsInfoAccordion-B5WHuoYD.js.map} +1 -1
- package/dist/assets/{WorkflowExecutionsLandingPage-DNfzEsWQ.js → WorkflowExecutionsLandingPage-D5D2gCKQ.js} +2 -2
- package/dist/assets/{WorkflowExecutionsLandingPage-DNfzEsWQ.js.map → WorkflowExecutionsLandingPage-D5D2gCKQ.js.map} +1 -1
- package/dist/assets/{WorkflowExecutionsPreview-DAmDAF-W.js → WorkflowExecutionsPreview-CQgNc11q.js} +2 -2
- package/dist/assets/{WorkflowExecutionsPreview-DAmDAF-W.js.map → WorkflowExecutionsPreview-CQgNc11q.js.map} +1 -1
- package/dist/assets/{WorkflowExecutionsView-pwPLba8F.js → WorkflowExecutionsView-CR-bru7r.js} +2 -2
- package/dist/assets/{WorkflowExecutionsView-pwPLba8F.js.map → WorkflowExecutionsView-CR-bru7r.js.map} +1 -1
- package/dist/assets/{WorkflowHistory-Dxo17Hrn.js → WorkflowHistory-DZ-HRVUW.js} +2 -2
- package/dist/assets/{WorkflowHistory-Dxo17Hrn.js.map → WorkflowHistory-DZ-HRVUW.js.map} +1 -1
- package/dist/assets/{WorkflowOnboardingView-BBidrsf7.js → WorkflowOnboardingView-DOIdULx-.js} +2 -2
- package/dist/assets/{WorkflowOnboardingView-BBidrsf7.js.map → WorkflowOnboardingView-DOIdULx-.js.map} +1 -1
- package/dist/assets/{WorkflowPreview-OBQIslyy.js → WorkflowPreview-3iPlzE4s.js} +2 -2
- package/dist/assets/{WorkflowPreview-OBQIslyy.js.map → WorkflowPreview-3iPlzE4s.js.map} +1 -1
- package/dist/assets/{WorkflowsView-CODAAPom.js → WorkflowsView-Ch9-zyDd.js} +2 -2
- package/dist/assets/{WorkflowsView-CODAAPom.js.map → WorkflowsView-Ch9-zyDd.js.map} +1 -1
- package/dist/assets/{cloud-b1t6vFlo.js → cloud-PFRUu9iS.js} +2 -2
- package/dist/assets/{cloud-b1t6vFlo.js.map → cloud-PFRUu9iS.js.map} +1 -1
- package/dist/assets/{collaboration.store-C5F_y2IO.js → collaboration.store-CV20HjQm.js} +2 -2
- package/dist/assets/{collaboration.store-C5F_y2IO.js.map → collaboration.store-CV20HjQm.js.map} +1 -1
- package/dist/assets/{index-DATiCTBk.js → index-BjbCeTcj.js} +105 -105
- package/dist/assets/index-BjbCeTcj.js.map +1 -0
- package/dist/assets/{nodeCreator.store-BHeYrLWf.js → nodeCreator.store-LPbO-Os0.js} +2 -2
- package/dist/assets/{nodeCreator.store-BHeYrLWf.js.map → nodeCreator.store-LPbO-Os0.js.map} +1 -1
- package/dist/assets/{templateActions-C33KdEJM.js → templateActions-BZ9bA7ql.js} +2 -2
- package/dist/assets/{templateActions-C33KdEJM.js.map → templateActions-BZ9bA7ql.js.map} +1 -1
- package/dist/assets/{useExecutionDebugging-DejsFiYr.js → useExecutionDebugging-L_wm2gVK.js} +2 -2
- package/dist/assets/{useExecutionDebugging-DejsFiYr.js.map → useExecutionDebugging-L_wm2gVK.js.map} +1 -1
- package/dist/assets/{useExecutionHelpers-DrZ09ZbE.js → useExecutionHelpers-th1spplL.js} +2 -2
- package/dist/assets/{useExecutionHelpers-DrZ09ZbE.js.map → useExecutionHelpers-th1spplL.js.map} +1 -1
- package/dist/assets/{usePushConnection-qF8q4o13.js → usePushConnection-DsZw7iUE.js} +2 -2
- package/dist/assets/{usePushConnection-qF8q4o13.js.map → usePushConnection-DsZw7iUE.js.map} +1 -1
- package/dist/assets/{useUserHelpers-Dn-199Fi.js → useUserHelpers-lyQUjtql.js} +2 -2
- package/dist/assets/{useUserHelpers-Dn-199Fi.js.map → useUserHelpers-lyQUjtql.js.map} +1 -1
- package/dist/assets/{useWorkflowActivate-MNrM98NZ.js → useWorkflowActivate-DTmbKEGl.js} +2 -2
- package/dist/assets/{useWorkflowActivate-MNrM98NZ.js.map → useWorkflowActivate-DTmbKEGl.js.map} +1 -1
- package/dist/index.html +1 -1
- package/package.json +1 -1
- package/dist/assets/CollectionParameter-BKwsDV7i.js.map +0 -1
- package/dist/assets/NodeDetailsView-j5ZU-3Ol.js +0 -4
- package/dist/assets/NodeDetailsView-j5ZU-3Ol.js.map +0 -1
- package/dist/assets/NodeView-DHiWHy1x.js.map +0 -1
- package/dist/assets/NodeView.v2-Ces_FOmN.js +0 -3
- package/dist/assets/index-DATiCTBk.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CredentialsView-D-Gs1CW_.js","sources":["../../src/components/CredentialCard.vue","../../src/views/CredentialsView.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport dateformat from 'dateformat';\nimport type { ICredentialsResponse } from '@/Interface';\nimport { MODAL_CONFIRM, PROJECT_MOVE_RESOURCE_MODAL } from '@/constants';\nimport { useMessage } from '@/composables/useMessage';\nimport CredentialIcon from '@/components/CredentialIcon.vue';\nimport { getCredentialPermissions } from '@/permissions';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useCredentialsStore } from '@/stores/credentials.store';\nimport TimeAgo from '@/components/TimeAgo.vue';\nimport type { ProjectSharingData } from '@/types/projects.types';\nimport { useProjectsStore } from '@/stores/projects.store';\nimport ProjectCardBadge from '@/components/Projects/ProjectCardBadge.vue';\nimport { useI18n } from '@/composables/useI18n';\n\nconst CREDENTIAL_LIST_ITEM_ACTIONS = {\n\tOPEN: 'open',\n\tDELETE: 'delete',\n\tMOVE: 'move',\n};\n\nconst props = withDefaults(\n\tdefineProps<{\n\t\tdata: ICredentialsResponse;\n\t\treadOnly?: boolean;\n\t}>(),\n\t{\n\t\tdata: () => ({\n\t\t\tid: '',\n\t\t\tcreatedAt: '',\n\t\t\tupdatedAt: '',\n\t\t\ttype: '',\n\t\t\tname: '',\n\t\t\tsharedWithProjects: [],\n\t\t\thomeProject: {} as ProjectSharingData,\n\t\t}),\n\t\treadOnly: false,\n\t},\n);\n\nconst locale = useI18n();\nconst message = useMessage();\nconst uiStore = useUIStore();\nconst credentialsStore = useCredentialsStore();\nconst projectsStore = useProjectsStore();\n\nconst credentialType = computed(() => credentialsStore.getCredentialTypeByName(props.data.type));\nconst credentialPermissions = computed(() => getCredentialPermissions(props.data));\nconst actions = computed(() => {\n\tconst items = [\n\t\t{\n\t\t\tlabel: locale.baseText('credentials.item.open'),\n\t\t\tvalue: CREDENTIAL_LIST_ITEM_ACTIONS.OPEN,\n\t\t},\n\t];\n\n\tif (credentialPermissions.value.delete) {\n\t\titems.push({\n\t\t\tlabel: locale.baseText('credentials.item.delete'),\n\t\t\tvalue: CREDENTIAL_LIST_ITEM_ACTIONS.DELETE,\n\t\t});\n\t}\n\n\tif (credentialPermissions.value.move) {\n\t\titems.push({\n\t\t\tlabel: locale.baseText('credentials.item.move'),\n\t\t\tvalue: CREDENTIAL_LIST_ITEM_ACTIONS.MOVE,\n\t\t});\n\t}\n\n\treturn items;\n});\nconst formattedCreatedAtDate = computed(() => {\n\tconst currentYear = new Date().getFullYear().toString();\n\n\treturn dateformat(\n\t\tprops.data.createdAt,\n\t\t`d mmmm${props.data.createdAt.startsWith(currentYear) ? '' : ', yyyy'}`,\n\t);\n});\n\nfunction onClick() {\n\tuiStore.openExistingCredential(props.data.id);\n}\n\nasync function onAction(action: string) {\n\tswitch (action) {\n\t\tcase CREDENTIAL_LIST_ITEM_ACTIONS.OPEN:\n\t\t\tonClick();\n\t\t\tbreak;\n\t\tcase CREDENTIAL_LIST_ITEM_ACTIONS.DELETE:\n\t\t\tawait deleteResource();\n\t\t\tbreak;\n\t\tcase CREDENTIAL_LIST_ITEM_ACTIONS.MOVE:\n\t\t\tmoveResource();\n\t\t\tbreak;\n\t}\n}\n\nasync function deleteResource() {\n\tconst deleteConfirmed = await message.confirm(\n\t\tlocale.baseText('credentialEdit.credentialEdit.confirmMessage.deleteCredential.message', {\n\t\t\tinterpolate: { savedCredentialName: props.data.name },\n\t\t}),\n\t\tlocale.baseText('credentialEdit.credentialEdit.confirmMessage.deleteCredential.headline'),\n\t\t{\n\t\t\tconfirmButtonText: locale.baseText(\n\t\t\t\t'credentialEdit.credentialEdit.confirmMessage.deleteCredential.confirmButtonText',\n\t\t\t),\n\t\t},\n\t);\n\n\tif (deleteConfirmed === MODAL_CONFIRM) {\n\t\tawait credentialsStore.deleteCredential({ id: props.data.id });\n\t}\n}\n\nfunction moveResource() {\n\tuiStore.openModalWithData({\n\t\tname: PROJECT_MOVE_RESOURCE_MODAL,\n\t\tdata: {\n\t\t\tresource: props.data,\n\t\t\tresourceType: locale.baseText('generic.credential').toLocaleLowerCase(),\n\t\t},\n\t});\n}\n</script>\n\n<template>\n\t<n8n-card :class=\"$style.cardLink\" @click=\"onClick\">\n\t\t<template #prepend>\n\t\t\t<CredentialIcon :credential-type-name=\"credentialType?.name ?? ''\" />\n\t\t</template>\n\t\t<template #header>\n\t\t\t<n8n-heading tag=\"h2\" bold :class=\"$style.cardHeading\">\n\t\t\t\t{{ data.name }}\n\t\t\t</n8n-heading>\n\t\t</template>\n\t\t<div :class=\"$style.cardDescription\">\n\t\t\t<n8n-text color=\"text-light\" size=\"small\">\n\t\t\t\t<span v-if=\"credentialType\">{{ credentialType.displayName }} | </span>\n\t\t\t\t<span v-show=\"data\"\n\t\t\t\t\t>{{ $locale.baseText('credentials.item.updated') }} <TimeAgo :date=\"data.updatedAt\" /> |\n\t\t\t\t</span>\n\t\t\t\t<span v-show=\"data\"\n\t\t\t\t\t>{{ $locale.baseText('credentials.item.created') }} {{ formattedCreatedAtDate }}\n\t\t\t\t</span>\n\t\t\t</n8n-text>\n\t\t</div>\n\t\t<template #append>\n\t\t\t<div :class=\"$style.cardActions\" @click.stop>\n\t\t\t\t<ProjectCardBadge :resource=\"data\" :personal-project=\"projectsStore.personalProject\" />\n\t\t\t\t<n8n-action-toggle\n\t\t\t\t\tdata-test-id=\"credential-card-actions\"\n\t\t\t\t\t:actions=\"actions\"\n\t\t\t\t\ttheme=\"dark\"\n\t\t\t\t\t@action=\"onAction\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</template>\n\t</n8n-card>\n</template>\n\n<style lang=\"scss\" module>\n.cardLink {\n\ttransition: box-shadow 0.3s ease;\n\tcursor: pointer;\n\tpadding: 0 0 0 var(--spacing-s);\n\talign-items: stretch;\n\n\t&:hover {\n\t\tbox-shadow: 0 2px 8px rgba(#441c17, 0.1);\n\t}\n}\n\n.cardHeading {\n\tfont-size: var(--font-size-s);\n\tpadding: var(--spacing-s) 0 0;\n\n\tspan {\n\t\tcolor: var(--color-text-light);\n\t}\n}\n\n.cardDescription {\n\tmin-height: 19px;\n\tdisplay: flex;\n\talign-items: center;\n\tpadding: 0 0 var(--spacing-s);\n}\n\n.cardActions {\n\tdisplay: flex;\n\tflex-direction: row;\n\tjustify-content: center;\n\talign-items: center;\n\talign-self: stretch;\n\tpadding: 0 var(--spacing-s) 0 0;\n\tcursor: default;\n}\n</style>\n","<template>\n\t<ResourcesListLayout\n\t\tref=\"layout\"\n\t\tresource-key=\"credentials\"\n\t\t:resources=\"allCredentials\"\n\t\t:initialize=\"initialize\"\n\t\t:filters=\"filters\"\n\t\t:additional-filters-handler=\"onFilter\"\n\t\t:type-props=\"{ itemSize: 77 }\"\n\t\t@click:add=\"addCredential\"\n\t\t@update:filters=\"filters = $event\"\n\t>\n\t\t<template #header>\n\t\t\t<ProjectTabs />\n\t\t</template>\n\t\t<template #add-button=\"{ disabled }\">\n\t\t\t<div>\n\t\t\t\t<n8n-button\n\t\t\t\t\tsize=\"large\"\n\t\t\t\t\tblock\n\t\t\t\t\t:disabled=\"disabled\"\n\t\t\t\t\tdata-test-id=\"resources-list-add\"\n\t\t\t\t\t@click=\"addCredential\"\n\t\t\t\t>\n\t\t\t\t\t{{ addCredentialButtonText }}\n\t\t\t\t</n8n-button>\n\t\t\t</div>\n\t\t</template>\n\t\t<template #default=\"{ data }\">\n\t\t\t<CredentialCard data-test-id=\"resources-list-item\" class=\"mb-2xs\" :data=\"data\" />\n\t\t</template>\n\t\t<template #filters=\"{ setKeyValue }\">\n\t\t\t<div class=\"mb-s\">\n\t\t\t\t<n8n-input-label\n\t\t\t\t\t:label=\"$locale.baseText('credentials.filters.type')\"\n\t\t\t\t\t:bold=\"false\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tcolor=\"text-base\"\n\t\t\t\t\tclass=\"mb-3xs\"\n\t\t\t\t/>\n\t\t\t\t<n8n-select\n\t\t\t\t\tref=\"typeInput\"\n\t\t\t\t\t:model-value=\"filters.type\"\n\t\t\t\t\tsize=\"medium\"\n\t\t\t\t\tmultiple\n\t\t\t\t\tfilterable\n\t\t\t\t\t:class=\"$style['type-input']\"\n\t\t\t\t\t@update:model-value=\"setKeyValue('type', $event)\"\n\t\t\t\t>\n\t\t\t\t\t<n8n-option\n\t\t\t\t\t\tv-for=\"credentialType in allCredentialTypes\"\n\t\t\t\t\t\t:key=\"credentialType.name\"\n\t\t\t\t\t\t:value=\"credentialType.name\"\n\t\t\t\t\t\t:label=\"credentialType.displayName\"\n\t\t\t\t\t/>\n\t\t\t\t</n8n-select>\n\t\t\t</div>\n\t\t</template>\n\t</ResourcesListLayout>\n</template>\n\n<script lang=\"ts\">\nimport type { ICredentialsResponse, ICredentialTypeMap } from '@/Interface';\nimport { defineComponent } from 'vue';\n\nimport type { IResource } from '@/components/layouts/ResourcesListLayout.vue';\nimport ResourcesListLayout from '@/components/layouts/ResourcesListLayout.vue';\nimport CredentialCard from '@/components/CredentialCard.vue';\nimport type { ICredentialType } from 'n8n-workflow';\nimport { CREDENTIAL_SELECT_MODAL_KEY, EnterpriseEditionFeature } from '@/constants';\nimport { mapStores } from 'pinia';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useCredentialsStore } from '@/stores/credentials.store';\nimport { useExternalSecretsStore } from '@/stores/externalSecrets.ee.store';\nimport { useSourceControlStore } from '@/stores/sourceControl.store';\nimport { useProjectsStore } from '@/stores/projects.store';\nimport ProjectTabs from '@/components/Projects/ProjectTabs.vue';\nimport useEnvironmentsStore from '@/stores/environments.ee.store';\nimport { useSettingsStore } from '@/stores/settings.store';\n\ntype IResourcesListLayoutInstance = InstanceType<typeof ResourcesListLayout>;\n\nexport default defineComponent({\n\tname: 'CredentialsView',\n\tcomponents: {\n\t\tResourcesListLayout,\n\t\tCredentialCard,\n\t\tProjectTabs,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tfilters: {\n\t\t\t\tsearch: '',\n\t\t\t\thomeProject: '',\n\t\t\t\ttype: '',\n\t\t\t},\n\t\t\tsourceControlStoreUnsubscribe: () => {},\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(\n\t\t\tuseCredentialsStore,\n\t\t\tuseNodeTypesStore,\n\t\t\tuseUIStore,\n\t\t\tuseSourceControlStore,\n\t\t\tuseExternalSecretsStore,\n\t\t\tuseProjectsStore,\n\t\t),\n\t\tallCredentials(): IResource[] {\n\t\t\treturn this.credentialsStore.allCredentials.map((credential) => ({\n\t\t\t\tid: credential.id,\n\t\t\t\tname: credential.name,\n\t\t\t\tvalue: '',\n\t\t\t\tupdatedAt: credential.updatedAt,\n\t\t\t\tcreatedAt: credential.createdAt,\n\t\t\t\thomeProject: credential.homeProject,\n\t\t\t\tscopes: credential.scopes,\n\t\t\t\ttype: credential.type,\n\t\t\t\tsharedWithProjects: credential.sharedWithProjects,\n\t\t\t}));\n\t\t},\n\t\tallCredentialTypes(): ICredentialType[] {\n\t\t\treturn this.credentialsStore.allCredentialTypes;\n\t\t},\n\t\tcredentialTypesById(): ICredentialTypeMap {\n\t\t\treturn this.credentialsStore.credentialTypesById;\n\t\t},\n\t\taddCredentialButtonText() {\n\t\t\treturn this.projectsStore.currentProject\n\t\t\t\t? this.$locale.baseText('credentials.project.add')\n\t\t\t\t: this.$locale.baseText('credentials.add');\n\t\t},\n\t},\n\twatch: {\n\t\t'filters.type'() {\n\t\t\tthis.sendFiltersTelemetry('type');\n\t\t},\n\t\t'$route.params.projectId'() {\n\t\t\tvoid this.initialize();\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.sourceControlStoreUnsubscribe = this.sourceControlStore.$onAction(({ name, after }) => {\n\t\t\tif (name === 'pullWorkfolder' && after) {\n\t\t\t\tafter(() => {\n\t\t\t\t\tvoid this.initialize();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t},\n\tbeforeUnmount() {\n\t\tthis.sourceControlStoreUnsubscribe();\n\t},\n\tmethods: {\n\t\taddCredential() {\n\t\t\tthis.uiStore.openModal(CREDENTIAL_SELECT_MODAL_KEY);\n\n\t\t\tthis.$telemetry.track('User clicked add cred button', {\n\t\t\t\tsource: 'Creds list',\n\t\t\t});\n\t\t},\n\t\tasync initialize() {\n\t\t\tconst isVarsEnabled = useSettingsStore().isEnterpriseFeatureEnabled(\n\t\t\t\tEnterpriseEditionFeature.Variables,\n\t\t\t);\n\n\t\t\tconst loadPromises = [\n\t\t\t\tthis.credentialsStore.fetchAllCredentials(\n\t\t\t\t\tthis.$route?.params?.projectId as string | undefined,\n\t\t\t\t),\n\t\t\t\tthis.credentialsStore.fetchCredentialTypes(false),\n\t\t\t\tthis.externalSecretsStore.fetchAllSecrets(),\n\t\t\t\tthis.nodeTypesStore.loadNodeTypesIfNotLoaded(),\n\t\t\t\tisVarsEnabled ? useEnvironmentsStore().fetchAllVariables() : Promise.resolve(), // for expression resolution\n\t\t\t];\n\n\t\t\tawait Promise.all(loadPromises);\n\t\t},\n\t\tonFilter(\n\t\t\tresource: ICredentialsResponse,\n\t\t\tfilters: { type: string[]; search: string },\n\t\t\tmatches: boolean,\n\t\t): boolean {\n\t\t\tif (filters.type.length > 0) {\n\t\t\t\tmatches = matches && filters.type.includes(resource.type);\n\t\t\t}\n\n\t\t\tif (filters.search) {\n\t\t\t\tconst searchString = filters.search.toLowerCase();\n\n\t\t\t\tmatches =\n\t\t\t\t\tmatches ||\n\t\t\t\t\t(this.credentialTypesById[resource.type] &&\n\t\t\t\t\t\tthis.credentialTypesById[resource.type].displayName\n\t\t\t\t\t\t\t.toLowerCase()\n\t\t\t\t\t\t\t.includes(searchString));\n\t\t\t}\n\n\t\t\treturn matches;\n\t\t},\n\t\tsendFiltersTelemetry(source: string) {\n\t\t\t(this.$refs.layout as IResourcesListLayoutInstance).sendFiltersTelemetry(source);\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.type-input {\n\t--max-width: 265px;\n}\n\n.sidebarContainer ul {\n\tpadding: 0 !important;\n}\n</style>\n"],"names":["CREDENTIAL_LIST_ITEM_ACTIONS","props","__props","locale","useI18n","message","useMessage","uiStore","useUIStore","credentialsStore","useCredentialsStore","projectsStore","useProjectsStore","credentialType","computed","credentialPermissions","getCredentialPermissions","actions","items","formattedCreatedAtDate","currentYear","dateformat","onClick","onAction","action","deleteResource","moveResource","MODAL_CONFIRM","PROJECT_MOVE_RESOURCE_MODAL","_sfc_main","defineComponent","ResourcesListLayout","CredentialCard","ProjectTabs","mapStores","useNodeTypesStore","useSourceControlStore","useExternalSecretsStore","credential","name","after","CREDENTIAL_SELECT_MODAL_KEY","isVarsEnabled","useSettingsStore","EnterpriseEditionFeature","loadPromises","_b","_a","useEnvironmentsStore","resource","filters","matches","searchString","source","_component_ResourcesListLayout","_resolveComponent","_openBlock","_createBlock","initialize","_ctx","addCredential","_cache","$event","_createVNode","_component_ProjectTabs","_withCtx","disabled","_createElementVNode","_component_n8n_button","_createTextVNode","_toDisplayString","data","_component_CredentialCard","setKeyValue","$locale","_hoisted_1","_component_n8n_input_label","_component_n8n_select","_normalizeClass","_createElementBlock","_Fragment","_renderList","_component_n8n_option"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CredentialsView-CEWMy0O7.js","sources":["../../src/components/CredentialCard.vue","../../src/views/CredentialsView.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport dateformat from 'dateformat';\nimport type { ICredentialsResponse } from '@/Interface';\nimport { MODAL_CONFIRM, PROJECT_MOVE_RESOURCE_MODAL } from '@/constants';\nimport { useMessage } from '@/composables/useMessage';\nimport CredentialIcon from '@/components/CredentialIcon.vue';\nimport { getCredentialPermissions } from '@/permissions';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useCredentialsStore } from '@/stores/credentials.store';\nimport TimeAgo from '@/components/TimeAgo.vue';\nimport type { ProjectSharingData } from '@/types/projects.types';\nimport { useProjectsStore } from '@/stores/projects.store';\nimport ProjectCardBadge from '@/components/Projects/ProjectCardBadge.vue';\nimport { useI18n } from '@/composables/useI18n';\n\nconst CREDENTIAL_LIST_ITEM_ACTIONS = {\n\tOPEN: 'open',\n\tDELETE: 'delete',\n\tMOVE: 'move',\n};\n\nconst props = withDefaults(\n\tdefineProps<{\n\t\tdata: ICredentialsResponse;\n\t\treadOnly?: boolean;\n\t}>(),\n\t{\n\t\tdata: () => ({\n\t\t\tid: '',\n\t\t\tcreatedAt: '',\n\t\t\tupdatedAt: '',\n\t\t\ttype: '',\n\t\t\tname: '',\n\t\t\tsharedWithProjects: [],\n\t\t\thomeProject: {} as ProjectSharingData,\n\t\t}),\n\t\treadOnly: false,\n\t},\n);\n\nconst locale = useI18n();\nconst message = useMessage();\nconst uiStore = useUIStore();\nconst credentialsStore = useCredentialsStore();\nconst projectsStore = useProjectsStore();\n\nconst credentialType = computed(() => credentialsStore.getCredentialTypeByName(props.data.type));\nconst credentialPermissions = computed(() => getCredentialPermissions(props.data));\nconst actions = computed(() => {\n\tconst items = [\n\t\t{\n\t\t\tlabel: locale.baseText('credentials.item.open'),\n\t\t\tvalue: CREDENTIAL_LIST_ITEM_ACTIONS.OPEN,\n\t\t},\n\t];\n\n\tif (credentialPermissions.value.delete) {\n\t\titems.push({\n\t\t\tlabel: locale.baseText('credentials.item.delete'),\n\t\t\tvalue: CREDENTIAL_LIST_ITEM_ACTIONS.DELETE,\n\t\t});\n\t}\n\n\tif (credentialPermissions.value.move) {\n\t\titems.push({\n\t\t\tlabel: locale.baseText('credentials.item.move'),\n\t\t\tvalue: CREDENTIAL_LIST_ITEM_ACTIONS.MOVE,\n\t\t});\n\t}\n\n\treturn items;\n});\nconst formattedCreatedAtDate = computed(() => {\n\tconst currentYear = new Date().getFullYear().toString();\n\n\treturn dateformat(\n\t\tprops.data.createdAt,\n\t\t`d mmmm${props.data.createdAt.startsWith(currentYear) ? '' : ', yyyy'}`,\n\t);\n});\n\nfunction onClick() {\n\tuiStore.openExistingCredential(props.data.id);\n}\n\nasync function onAction(action: string) {\n\tswitch (action) {\n\t\tcase CREDENTIAL_LIST_ITEM_ACTIONS.OPEN:\n\t\t\tonClick();\n\t\t\tbreak;\n\t\tcase CREDENTIAL_LIST_ITEM_ACTIONS.DELETE:\n\t\t\tawait deleteResource();\n\t\t\tbreak;\n\t\tcase CREDENTIAL_LIST_ITEM_ACTIONS.MOVE:\n\t\t\tmoveResource();\n\t\t\tbreak;\n\t}\n}\n\nasync function deleteResource() {\n\tconst deleteConfirmed = await message.confirm(\n\t\tlocale.baseText('credentialEdit.credentialEdit.confirmMessage.deleteCredential.message', {\n\t\t\tinterpolate: { savedCredentialName: props.data.name },\n\t\t}),\n\t\tlocale.baseText('credentialEdit.credentialEdit.confirmMessage.deleteCredential.headline'),\n\t\t{\n\t\t\tconfirmButtonText: locale.baseText(\n\t\t\t\t'credentialEdit.credentialEdit.confirmMessage.deleteCredential.confirmButtonText',\n\t\t\t),\n\t\t},\n\t);\n\n\tif (deleteConfirmed === MODAL_CONFIRM) {\n\t\tawait credentialsStore.deleteCredential({ id: props.data.id });\n\t}\n}\n\nfunction moveResource() {\n\tuiStore.openModalWithData({\n\t\tname: PROJECT_MOVE_RESOURCE_MODAL,\n\t\tdata: {\n\t\t\tresource: props.data,\n\t\t\tresourceType: locale.baseText('generic.credential').toLocaleLowerCase(),\n\t\t},\n\t});\n}\n</script>\n\n<template>\n\t<n8n-card :class=\"$style.cardLink\" @click=\"onClick\">\n\t\t<template #prepend>\n\t\t\t<CredentialIcon :credential-type-name=\"credentialType?.name ?? ''\" />\n\t\t</template>\n\t\t<template #header>\n\t\t\t<n8n-heading tag=\"h2\" bold :class=\"$style.cardHeading\">\n\t\t\t\t{{ data.name }}\n\t\t\t</n8n-heading>\n\t\t</template>\n\t\t<div :class=\"$style.cardDescription\">\n\t\t\t<n8n-text color=\"text-light\" size=\"small\">\n\t\t\t\t<span v-if=\"credentialType\">{{ credentialType.displayName }} | </span>\n\t\t\t\t<span v-show=\"data\"\n\t\t\t\t\t>{{ $locale.baseText('credentials.item.updated') }} <TimeAgo :date=\"data.updatedAt\" /> |\n\t\t\t\t</span>\n\t\t\t\t<span v-show=\"data\"\n\t\t\t\t\t>{{ $locale.baseText('credentials.item.created') }} {{ formattedCreatedAtDate }}\n\t\t\t\t</span>\n\t\t\t</n8n-text>\n\t\t</div>\n\t\t<template #append>\n\t\t\t<div :class=\"$style.cardActions\" @click.stop>\n\t\t\t\t<ProjectCardBadge :resource=\"data\" :personal-project=\"projectsStore.personalProject\" />\n\t\t\t\t<n8n-action-toggle\n\t\t\t\t\tdata-test-id=\"credential-card-actions\"\n\t\t\t\t\t:actions=\"actions\"\n\t\t\t\t\ttheme=\"dark\"\n\t\t\t\t\t@action=\"onAction\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</template>\n\t</n8n-card>\n</template>\n\n<style lang=\"scss\" module>\n.cardLink {\n\ttransition: box-shadow 0.3s ease;\n\tcursor: pointer;\n\tpadding: 0 0 0 var(--spacing-s);\n\talign-items: stretch;\n\n\t&:hover {\n\t\tbox-shadow: 0 2px 8px rgba(#441c17, 0.1);\n\t}\n}\n\n.cardHeading {\n\tfont-size: var(--font-size-s);\n\tpadding: var(--spacing-s) 0 0;\n\n\tspan {\n\t\tcolor: var(--color-text-light);\n\t}\n}\n\n.cardDescription {\n\tmin-height: 19px;\n\tdisplay: flex;\n\talign-items: center;\n\tpadding: 0 0 var(--spacing-s);\n}\n\n.cardActions {\n\tdisplay: flex;\n\tflex-direction: row;\n\tjustify-content: center;\n\talign-items: center;\n\talign-self: stretch;\n\tpadding: 0 var(--spacing-s) 0 0;\n\tcursor: default;\n}\n</style>\n","<template>\n\t<ResourcesListLayout\n\t\tref=\"layout\"\n\t\tresource-key=\"credentials\"\n\t\t:resources=\"allCredentials\"\n\t\t:initialize=\"initialize\"\n\t\t:filters=\"filters\"\n\t\t:additional-filters-handler=\"onFilter\"\n\t\t:type-props=\"{ itemSize: 77 }\"\n\t\t@click:add=\"addCredential\"\n\t\t@update:filters=\"filters = $event\"\n\t>\n\t\t<template #header>\n\t\t\t<ProjectTabs />\n\t\t</template>\n\t\t<template #add-button=\"{ disabled }\">\n\t\t\t<div>\n\t\t\t\t<n8n-button\n\t\t\t\t\tsize=\"large\"\n\t\t\t\t\tblock\n\t\t\t\t\t:disabled=\"disabled\"\n\t\t\t\t\tdata-test-id=\"resources-list-add\"\n\t\t\t\t\t@click=\"addCredential\"\n\t\t\t\t>\n\t\t\t\t\t{{ addCredentialButtonText }}\n\t\t\t\t</n8n-button>\n\t\t\t</div>\n\t\t</template>\n\t\t<template #default=\"{ data }\">\n\t\t\t<CredentialCard data-test-id=\"resources-list-item\" class=\"mb-2xs\" :data=\"data\" />\n\t\t</template>\n\t\t<template #filters=\"{ setKeyValue }\">\n\t\t\t<div class=\"mb-s\">\n\t\t\t\t<n8n-input-label\n\t\t\t\t\t:label=\"$locale.baseText('credentials.filters.type')\"\n\t\t\t\t\t:bold=\"false\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tcolor=\"text-base\"\n\t\t\t\t\tclass=\"mb-3xs\"\n\t\t\t\t/>\n\t\t\t\t<n8n-select\n\t\t\t\t\tref=\"typeInput\"\n\t\t\t\t\t:model-value=\"filters.type\"\n\t\t\t\t\tsize=\"medium\"\n\t\t\t\t\tmultiple\n\t\t\t\t\tfilterable\n\t\t\t\t\t:class=\"$style['type-input']\"\n\t\t\t\t\t@update:model-value=\"setKeyValue('type', $event)\"\n\t\t\t\t>\n\t\t\t\t\t<n8n-option\n\t\t\t\t\t\tv-for=\"credentialType in allCredentialTypes\"\n\t\t\t\t\t\t:key=\"credentialType.name\"\n\t\t\t\t\t\t:value=\"credentialType.name\"\n\t\t\t\t\t\t:label=\"credentialType.displayName\"\n\t\t\t\t\t/>\n\t\t\t\t</n8n-select>\n\t\t\t</div>\n\t\t</template>\n\t</ResourcesListLayout>\n</template>\n\n<script lang=\"ts\">\nimport type { ICredentialsResponse, ICredentialTypeMap } from '@/Interface';\nimport { defineComponent } from 'vue';\n\nimport type { IResource } from '@/components/layouts/ResourcesListLayout.vue';\nimport ResourcesListLayout from '@/components/layouts/ResourcesListLayout.vue';\nimport CredentialCard from '@/components/CredentialCard.vue';\nimport type { ICredentialType } from 'n8n-workflow';\nimport { CREDENTIAL_SELECT_MODAL_KEY, EnterpriseEditionFeature } from '@/constants';\nimport { mapStores } from 'pinia';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useCredentialsStore } from '@/stores/credentials.store';\nimport { useExternalSecretsStore } from '@/stores/externalSecrets.ee.store';\nimport { useSourceControlStore } from '@/stores/sourceControl.store';\nimport { useProjectsStore } from '@/stores/projects.store';\nimport ProjectTabs from '@/components/Projects/ProjectTabs.vue';\nimport useEnvironmentsStore from '@/stores/environments.ee.store';\nimport { useSettingsStore } from '@/stores/settings.store';\n\ntype IResourcesListLayoutInstance = InstanceType<typeof ResourcesListLayout>;\n\nexport default defineComponent({\n\tname: 'CredentialsView',\n\tcomponents: {\n\t\tResourcesListLayout,\n\t\tCredentialCard,\n\t\tProjectTabs,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tfilters: {\n\t\t\t\tsearch: '',\n\t\t\t\thomeProject: '',\n\t\t\t\ttype: '',\n\t\t\t},\n\t\t\tsourceControlStoreUnsubscribe: () => {},\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(\n\t\t\tuseCredentialsStore,\n\t\t\tuseNodeTypesStore,\n\t\t\tuseUIStore,\n\t\t\tuseSourceControlStore,\n\t\t\tuseExternalSecretsStore,\n\t\t\tuseProjectsStore,\n\t\t),\n\t\tallCredentials(): IResource[] {\n\t\t\treturn this.credentialsStore.allCredentials.map((credential) => ({\n\t\t\t\tid: credential.id,\n\t\t\t\tname: credential.name,\n\t\t\t\tvalue: '',\n\t\t\t\tupdatedAt: credential.updatedAt,\n\t\t\t\tcreatedAt: credential.createdAt,\n\t\t\t\thomeProject: credential.homeProject,\n\t\t\t\tscopes: credential.scopes,\n\t\t\t\ttype: credential.type,\n\t\t\t\tsharedWithProjects: credential.sharedWithProjects,\n\t\t\t}));\n\t\t},\n\t\tallCredentialTypes(): ICredentialType[] {\n\t\t\treturn this.credentialsStore.allCredentialTypes;\n\t\t},\n\t\tcredentialTypesById(): ICredentialTypeMap {\n\t\t\treturn this.credentialsStore.credentialTypesById;\n\t\t},\n\t\taddCredentialButtonText() {\n\t\t\treturn this.projectsStore.currentProject\n\t\t\t\t? this.$locale.baseText('credentials.project.add')\n\t\t\t\t: this.$locale.baseText('credentials.add');\n\t\t},\n\t},\n\twatch: {\n\t\t'filters.type'() {\n\t\t\tthis.sendFiltersTelemetry('type');\n\t\t},\n\t\t'$route.params.projectId'() {\n\t\t\tvoid this.initialize();\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.sourceControlStoreUnsubscribe = this.sourceControlStore.$onAction(({ name, after }) => {\n\t\t\tif (name === 'pullWorkfolder' && after) {\n\t\t\t\tafter(() => {\n\t\t\t\t\tvoid this.initialize();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t},\n\tbeforeUnmount() {\n\t\tthis.sourceControlStoreUnsubscribe();\n\t},\n\tmethods: {\n\t\taddCredential() {\n\t\t\tthis.uiStore.openModal(CREDENTIAL_SELECT_MODAL_KEY);\n\n\t\t\tthis.$telemetry.track('User clicked add cred button', {\n\t\t\t\tsource: 'Creds list',\n\t\t\t});\n\t\t},\n\t\tasync initialize() {\n\t\t\tconst isVarsEnabled = useSettingsStore().isEnterpriseFeatureEnabled(\n\t\t\t\tEnterpriseEditionFeature.Variables,\n\t\t\t);\n\n\t\t\tconst loadPromises = [\n\t\t\t\tthis.credentialsStore.fetchAllCredentials(\n\t\t\t\t\tthis.$route?.params?.projectId as string | undefined,\n\t\t\t\t),\n\t\t\t\tthis.credentialsStore.fetchCredentialTypes(false),\n\t\t\t\tthis.externalSecretsStore.fetchAllSecrets(),\n\t\t\t\tthis.nodeTypesStore.loadNodeTypesIfNotLoaded(),\n\t\t\t\tisVarsEnabled ? useEnvironmentsStore().fetchAllVariables() : Promise.resolve(), // for expression resolution\n\t\t\t];\n\n\t\t\tawait Promise.all(loadPromises);\n\t\t},\n\t\tonFilter(\n\t\t\tresource: ICredentialsResponse,\n\t\t\tfilters: { type: string[]; search: string },\n\t\t\tmatches: boolean,\n\t\t): boolean {\n\t\t\tif (filters.type.length > 0) {\n\t\t\t\tmatches = matches && filters.type.includes(resource.type);\n\t\t\t}\n\n\t\t\tif (filters.search) {\n\t\t\t\tconst searchString = filters.search.toLowerCase();\n\n\t\t\t\tmatches =\n\t\t\t\t\tmatches ||\n\t\t\t\t\t(this.credentialTypesById[resource.type] &&\n\t\t\t\t\t\tthis.credentialTypesById[resource.type].displayName\n\t\t\t\t\t\t\t.toLowerCase()\n\t\t\t\t\t\t\t.includes(searchString));\n\t\t\t}\n\n\t\t\treturn matches;\n\t\t},\n\t\tsendFiltersTelemetry(source: string) {\n\t\t\t(this.$refs.layout as IResourcesListLayoutInstance).sendFiltersTelemetry(source);\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.type-input {\n\t--max-width: 265px;\n}\n\n.sidebarContainer ul {\n\tpadding: 0 !important;\n}\n</style>\n"],"names":["CREDENTIAL_LIST_ITEM_ACTIONS","props","__props","locale","useI18n","message","useMessage","uiStore","useUIStore","credentialsStore","useCredentialsStore","projectsStore","useProjectsStore","credentialType","computed","credentialPermissions","getCredentialPermissions","actions","items","formattedCreatedAtDate","currentYear","dateformat","onClick","onAction","action","deleteResource","moveResource","MODAL_CONFIRM","PROJECT_MOVE_RESOURCE_MODAL","_sfc_main","defineComponent","ResourcesListLayout","CredentialCard","ProjectTabs","mapStores","useNodeTypesStore","useSourceControlStore","useExternalSecretsStore","credential","name","after","CREDENTIAL_SELECT_MODAL_KEY","isVarsEnabled","useSettingsStore","EnterpriseEditionFeature","loadPromises","_b","_a","useEnvironmentsStore","resource","filters","matches","searchString","source","_component_ResourcesListLayout","_resolveComponent","_openBlock","_createBlock","initialize","_ctx","addCredential","_cache","$event","_createVNode","_component_ProjectTabs","_withCtx","disabled","_createElementVNode","_component_n8n_button","_createTextVNode","_toDisplayString","data","_component_CredentialCard","setKeyValue","$locale","_hoisted_1","_component_n8n_input_label","_component_n8n_select","_normalizeClass","_createElementBlock","_Fragment","_renderList","_component_n8n_option"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{G as y,aH as C,ag as o,l as i,m as w,U as t,I as r,p as n,O as a,S as m,T as s,M as V,R as b}from"./vendor-Dv5OeN6t.js";import{V as T}from"./index-
|
|
2
|
-
//# sourceMappingURL=ErrorView-
|
|
1
|
+
import{G as y,aH as C,ag as o,l as i,m as w,U as t,I as r,p as n,O as a,S as m,T as s,M as V,R as b}from"./vendor-Dv5OeN6t.js";import{V as T}from"./index-BjbCeTcj.js";import{_ as $}from"./n8n-CX_-_IN5.js";import"./pinia-DJNDmPLG.js";import"./axios-Mm4CS0gO.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-BBHtM40w.js";import"./lodash-es-CZ1inz46.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-CZXI82nZ.js";import"./vue-i18n-Delvyc9x.js";import"./uuid-SoommWqA.js";import"./luxon-CLwAIbs0.js";import"./@n8n/codemirror-lang-sql-DBO6T13I.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-CWDO6_kP.js";import"./@n8n/codemirror-lang-Dl0FW_KM.js";import"./esprima-next-nhoSXAeq.js";import"./fast-json-stable-stringify-CqoWQPIV.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-BGkPba5A.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";const k=y({__name:"ErrorView",props:{messageKey:{},errorCode:{},redirectTextKey:{},redirectPage:{}},setup(c){const p=C(),l=c;function _(){p.push({name:l.redirectPage??T.HOMEPAGE})}return(e,K)=>{const d=o("font-awesome-icon"),u=o("n8n-heading"),g=o("n8n-text"),f=o("n8n-button");return i(),w("div",{class:r(e.$style.container)},[t(d,{icon:"exclamation-triangle",class:r(e.$style.icon)},null,8,["class"]),n("div",{class:r(e.$style.message)},[n("div",null,[t(u,{size:"2xlarge"},{default:a(()=>[m(s(e.$locale.baseText(e.messageKey)),1)]),_:1})]),n("div",null,[e.errorCode?(i(),V(g,{key:0,size:"large"},{default:a(()=>[m(s(e.errorCode)+" "+s(e.$locale.baseText("error")),1)]),_:1})):b("",!0)])],2),t(f,{label:e.$locale.baseText(e.redirectTextKey),onClick:_},null,8,["label"])],2)}}}),v="_container_womip_1",E="_icon_womip_10",h="_message_womip_17",B={container:v,icon:E,message:h},x={$style:B},ie=$(k,[["__cssModules",x]]);export{ie as default};
|
|
2
|
+
//# sourceMappingURL=ErrorView-i1G_7Vnl.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorView-
|
|
1
|
+
{"version":3,"file":"ErrorView-i1G_7Vnl.js","sources":["../../src/views/ErrorView.vue"],"sourcesContent":["<template>\n\t<div :class=\"$style.container\">\n\t\t<font-awesome-icon icon=\"exclamation-triangle\" :class=\"$style.icon\" />\n\t\t<div :class=\"$style.message\">\n\t\t\t<div>\n\t\t\t\t<n8n-heading size=\"2xlarge\">\n\t\t\t\t\t{{ $locale.baseText(messageKey) }}\n\t\t\t\t</n8n-heading>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<n8n-text v-if=\"errorCode\" size=\"large\">\n\t\t\t\t\t{{ errorCode }} {{ $locale.baseText('error') }}\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\t\t</div>\n\t\t<n8n-button :label=\"$locale.baseText(redirectTextKey)\" @click=\"onButtonClick\" />\n\t</div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { BaseTextKey } from '@/plugins/i18n';\nimport { useRouter } from 'vue-router';\nimport { VIEWS } from '@/constants';\nconst router = useRouter();\n\nconst props = defineProps<{\n\tmessageKey: BaseTextKey;\n\terrorCode: number;\n\tredirectTextKey: BaseTextKey;\n\tredirectPage?: keyof typeof VIEWS;\n}>();\n\nfunction onButtonClick() {\n\tvoid router.push({ name: props.redirectPage ?? VIEWS.HOMEPAGE });\n}\n</script>\n\n<style lang=\"scss\" module>\n.container {\n\theight: 100%;\n\twidth: 100%;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tflex-direction: column;\n}\n\n.icon {\n\tmin-height: 96px;\n\tmin-width: 108px;\n\tmargin-bottom: var(--spacing-2xl);\n\tcolor: var(--color-foreground-base);\n}\n\n.message {\n\tmargin-bottom: var(--spacing-l);\n\n\t* {\n\t\tmargin-bottom: var(--spacing-2xs);\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t}\n}\n</style>\n"],"names":["router","useRouter","props","__props","onButtonClick","VIEWS"],"mappings":"kuCAuBA,MAAMA,EAASC,IAETC,EAAQC,EAOd,SAASC,GAAgB,CACnBJ,EAAO,KAAK,CAAE,KAAME,EAAM,cAAgBG,EAAM,SAAU,CAChE"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{G as R,l as p,m as g,T as d,r as se,e as x,Z as O,D as le,ag as c,M as _,O as i,U as r,S as y,R as h,u as l,p as n,F as Y,a7 as z,I as u,a2 as W}from"./vendor-Dv5OeN6t.js";import{_ as q}from"./n8n-CX_-_IN5.js";import{b as oe,e as ne,d as ie,E as re,dl as de,bW as t,dm as j,w as ue,G as ce}from"./index-
|
|
2
|
-
//# sourceMappingURL=ExecutionsFilter-
|
|
1
|
+
import{G as R,l as p,m as g,T as d,r as se,e as x,Z as O,D as le,ag as c,M as _,O as i,U as r,S as y,R as h,u as l,p as n,F as Y,a7 as z,I as u,a2 as W}from"./vendor-Dv5OeN6t.js";import{_ as q}from"./n8n-CX_-_IN5.js";import{b as oe,e as ne,d as ie,E as re,dl as de,bW as t,dm as j,w as ue,G as ce}from"./index-BjbCeTcj.js";const pe=R({name:"ExecutionsTime",props:["startTime"],data(){return{nowTime:-1,intervalTimer:null}},computed:{time(){if(!this.startTime)return"...";const b=this.nowTime-new Date(this.startTime).getTime();return this.$locale.displayTimer(b)}},mounted(){this.setNow(),this.intervalTimer=setInterval(()=>{this.setNow()},1e3)},beforeUnmount(){this.intervalTimer!==null&&clearInterval(this.intervalTimer)},methods:{setNow(){this.nowTime=new Date().getTime()}}});function me(b,E,$,C,I,U){return p(),g("span",null,d(b.time),1)}const Be=q(pe,[["render",me]]),fe={"data-test-id":"execution-filter-form"},be={for:"execution-filter-workflows"},ve={for:"execution-filter-tags"},xe={for:"execution-filter-status"},_e={for:"execution-filter-start-date"},ge={target:"_blank",href:"https://docs.n8n.io/workflows/executions/custom-executions-data/"},we={for:"execution-filter-saved-data-key"},Te={for:"execution-filter-saved-data-value"},H="YYYY-MM-DD HH:mm",ke=R({__name:"ExecutionsFilter",props:{workflows:{default:()=>[]},popoverPlacement:{default:"bottom"},teleported:{type:Boolean,default:!0}},emits:["filterChanged"],setup(b,{emit:E}){const $=oe(),C=ne(),{debounce:I}=ie(),U=ce(),M=b,w=E,Z=I(w,{debounceTime:500}),D=se(!1),T=x(()=>$.isEnterpriseFeatureEnabled(re.AdvancedExecutionFilters)),J=x(()=>!1),S=()=>({status:"all",workflowId:"all",tags:[],startDate:"",endDate:"",metadata:[{key:"",value:""}]}),a=O(S()),m=O(de(a).reduce((e,o)=>(e[o]=x({get(){return a[o]},set(v){a[o]=v,w("filterChanged",a)}}),e),{})),Q=x(()=>[{id:"all",name:t.baseText("executionsList.anyStatus")},{id:"error",name:t.baseText("executionsList.error")},{id:"canceled",name:t.baseText("executionsList.canceled")},{id:"running",name:t.baseText("executionsList.running")},{id:"success",name:t.baseText("executionsList.success")},{id:"waiting",name:t.baseText("executionsList.waiting")}]),k=x(()=>{let e=0;return a.status!=="all"&&e++,a.workflowId!=="all"&&M.workflows.length&&e++,j(a.tags)||e++,j(a.metadata)||e++,a.startDate&&e++,a.endDate&&e++,e}),B=(e,o,v)=>{a.metadata[e]||(a.metadata[e]={key:"",value:""}),a.metadata[e][o]=v,D.value||(U.track("User filtered executions with custom data"),D.value=!0),Z("filterChanged",a)},X=e=>{a.tags=e,w("filterChanged",a)},ee=()=>{Object.assign(a,S()),w("filterChanged",a)},L=()=>{C.goToUpgrade("custom-data-filter","upgrade-custom-data-filter")};return le(()=>{D.value=!1}),(e,o)=>{const v=c("n8n-badge"),N=c("n8n-button"),G=c("n8n-option"),P=c("n8n-select"),A=c("el-date-picker"),F=c("i18n-t"),te=c("n8n-icon"),V=c("n8n-tooltip"),K=c("n8n-input"),ae=c("n8n-popover");return p(),_(ae,{trigger:"click",placement:e.popoverPlacement,width:"440"},{reference:i(()=>[r(N,{icon:"filter",type:"tertiary",active:!!k.value,"data-test-id":"executions-filter-button"},{default:i(()=>[k.value?(p(),_(v,{key:0,theme:"primary",class:"mr-4xs","data-test-id":"execution-filter-badge"},{default:i(()=>[y(d(k.value),1)]),_:1})):h("",!0),y(" "+d(l(t).baseText("executionsList.filters")),1)]),_:1},8,["active"])]),default:i(()=>[n("div",fe,[e.workflows&&e.workflows.length>0?(p(),g("div",{key:0,class:u(e.$style.group)},[n("label",be,d(l(t).baseText("workflows.heading")),1),r(P,{id:"execution-filter-workflows",modelValue:m.workflowId,"onUpdate:modelValue":o[0]||(o[0]=s=>m.workflowId=s),placeholder:l(t).baseText("executionsFilter.selectWorkflow"),filterable:"","data-test-id":"executions-filter-workflows-select",teleported:e.teleported},{default:i(()=>[n("div",null,[(p(!0),g(Y,null,z(M.workflows,(s,f)=>(p(),_(G,{key:f,label:s.name,value:s.id},null,8,["label","value"]))),128))])]),_:1},8,["modelValue","placeholder","teleported"])],2)):h("",!0),J.value?(p(),g("div",{key:1,class:u(e.$style.group)},[n("label",ve,d(l(t).baseText("workflows.filters.tags")),1),r(ue,{id:"execution-filter-tags",placeholder:l(t).baseText("workflowOpen.filterWorkflows"),"model-value":a.tags,"create-enabled":!1,"data-test-id":"executions-filter-tags-select","onUpdate:modelValue":X},null,8,["placeholder","model-value"])],2)):h("",!0),n("div",{class:u(e.$style.group)},[n("label",xe,d(l(t).baseText("executionsList.status")),1),r(P,{id:"execution-filter-status",modelValue:m.status,"onUpdate:modelValue":o[1]||(o[1]=s=>m.status=s),placeholder:l(t).baseText("executionsFilter.selectStatus"),filterable:"","data-test-id":"executions-filter-status-select",teleported:e.teleported},{default:i(()=>[(p(!0),g(Y,null,z(Q.value,(s,f)=>(p(),_(G,{key:f,label:s.name,value:s.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue","placeholder","teleported"])],2),n("div",{class:u(e.$style.group)},[n("label",_e,d(l(t).baseText("executionsFilter.start")),1),n("div",{class:u(e.$style.dates)},[r(A,{id:"execution-filter-start-date",modelValue:m.startDate,"onUpdate:modelValue":o[2]||(o[2]=s=>m.startDate=s),type:"datetime",teleported:!1,format:H,placeholder:l(t).baseText("executionsFilter.startDate"),"data-test-id":"executions-filter-start-date-picker"},null,8,["modelValue","placeholder"]),n("span",{class:u(e.$style.divider)},"to",2),r(A,{id:"execution-filter-end-date",modelValue:m.endDate,"onUpdate:modelValue":o[3]||(o[3]=s=>m.endDate=s),type:"datetime",teleported:!1,format:H,placeholder:l(t).baseText("executionsFilter.endDate"),"data-test-id":"executions-filter-end-date-picker"},null,8,["modelValue","placeholder"])],2)],2),n("div",{class:u(e.$style.group)},[r(V,{placement:"right"},{content:i(()=>[r(F,{tag:"span",keypath:"executionsFilter.customData.docsTooltip"},{link:i(()=>[n("a",ge,d(l(t).baseText("executionsFilter.customData.docsTooltip.link")),1)]),_:1})]),default:i(()=>[n("span",{class:u(e.$style.label)},[y(d(l(t).baseText("executionsFilter.savedData"))+" ",1),r(te,{class:u(e.$style.tooltipIcon),icon:"question-circle",size:"small"},null,8,["class"])],2)]),_:1}),n("div",{class:u(e.$style.subGroup)},[n("label",we,d(l(t).baseText("executionsFilter.savedDataKey")),1),r(V,{disabled:T.value,placement:"top"},{content:i(()=>[r(F,{tag:"span",keypath:"executionsFilter.customData.inputTooltip"},{link:i(()=>[n("a",{href:"#","data-test-id":"executions-filter-view-plans-link",onClick:W(L,["prevent"])},d(l(t).baseText("executionsFilter.customData.inputTooltip.link")),1)]),_:1})]),default:i(()=>{var s;return[r(K,{id:"execution-filter-saved-data-key",name:"execution-filter-saved-data-key",type:"text",disabled:!T.value,placeholder:l(t).baseText("executionsFilter.savedDataKeyPlaceholder"),"model-value":(s=a.metadata[0])==null?void 0:s.key,"data-test-id":"execution-filter-saved-data-key-input","onUpdate:modelValue":o[4]||(o[4]=f=>B(0,"key",f))},null,8,["disabled","placeholder","model-value"])]}),_:1},8,["disabled"]),n("label",Te,d(l(t).baseText("executionsFilter.savedDataValue")),1),r(V,{disabled:T.value,placement:"top"},{content:i(()=>[r(F,{tag:"span",keypath:"executionsFilter.customData.inputTooltip"},{link:i(()=>[n("a",{href:"#",onClick:W(L,["prevent"])},d(l(t).baseText("executionsFilter.customData.inputTooltip.link")),1)]),_:1})]),default:i(()=>{var s;return[r(K,{id:"execution-filter-saved-data-value",name:"execution-filter-saved-data-value",type:"text",disabled:!T.value,placeholder:l(t).baseText("executionsFilter.savedDataValuePlaceholder"),"model-value":(s=a.metadata[0])==null?void 0:s.value,"data-test-id":"execution-filter-saved-data-value-input","onUpdate:modelValue":o[5]||(o[5]=f=>B(0,"value",f))},null,8,["disabled","placeholder","model-value"])]}),_:1},8,["disabled"])],2)],2),k.value?(p(),_(N,{key:2,class:u(e.$style.resetBtn),size:"large",text:"","data-test-id":"executions-filter-reset-button",onClick:ee},{default:i(()=>[y(d(l(t).baseText("executionsFilter.reset")),1)]),_:1},8,["class"])):h("",!0)])]),_:1},8,["placement"])}}}),ye="_group_1lywb_1",he="_label_1lywb_2",De="_subGroup_1lywb_8",Fe="_dates_1lywb_17",Ve="_divider_1lywb_25",Ee="_resetBtn_1lywb_30",$e="_tooltipIcon_1lywb_35",Ce={group:ye,label:he,subGroup:De,dates:Fe,divider:Ve,resetBtn:Ee,tooltipIcon:$e},Ie={$style:Ce},Le=q(ke,[["__cssModules",Ie],["__scopeId","data-v-e4981c3e"]]);export{Be as E,Le as a};
|
|
2
|
+
//# sourceMappingURL=ExecutionsFilter-8p_qD50I.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExecutionsFilter-Bp-2hjm2.js","sources":["../../src/components/executions/ExecutionsTime.vue","../../src/components/executions/ExecutionsFilter.vue"],"sourcesContent":["<template>\n\t<span>\n\t\t{{ time }}\n\t</span>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n\tname: 'ExecutionsTime',\n\tprops: ['startTime'],\n\tdata() {\n\t\treturn {\n\t\t\tnowTime: -1,\n\t\t\tintervalTimer: null as null | NodeJS.Timeout,\n\t\t};\n\t},\n\tcomputed: {\n\t\ttime(): string {\n\t\t\tif (!this.startTime) {\n\t\t\t\treturn '...';\n\t\t\t}\n\t\t\tconst msPassed = this.nowTime - new Date(this.startTime).getTime();\n\t\t\treturn this.$locale.displayTimer(msPassed);\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.setNow();\n\t\tthis.intervalTimer = setInterval(() => {\n\t\t\tthis.setNow();\n\t\t}, 1000);\n\t},\n\tbeforeUnmount() {\n\t\t// Make sure that the timer gets destroyed once no longer needed\n\t\tif (this.intervalTimer !== null) {\n\t\t\tclearInterval(this.intervalTimer);\n\t\t}\n\t},\n\tmethods: {\n\t\tsetNow() {\n\t\t\tthis.nowTime = new Date().getTime();\n\t\t},\n\t},\n});\n</script>\n","<script lang=\"ts\" setup>\nimport { computed, reactive, onBeforeMount, ref } from 'vue';\nimport type {\n\tExecutionFilterType,\n\tExecutionFilterMetadata,\n\tIWorkflowShortResponse,\n\tIWorkflowDb,\n} from '@/Interface';\nimport { i18n as locale } from '@/plugins/i18n';\nimport TagsDropdown from '@/components/TagsDropdown.vue';\nimport { getObjectKeys, isEmpty } from '@/utils/typesUtils';\nimport { EnterpriseEditionFeature } from '@/constants';\nimport { useSettingsStore } from '@/stores/settings.store';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useTelemetry } from '@/composables/useTelemetry';\nimport type { Placement } from '@floating-ui/core';\nimport { useDebounce } from '@/composables/useDebounce';\n\nexport type ExecutionFilterProps = {\n\tworkflows?: Array<IWorkflowDb | IWorkflowShortResponse>;\n\tpopoverPlacement?: Placement;\n\tteleported?: boolean;\n};\n\nconst DATE_TIME_MASK = 'YYYY-MM-DD HH:mm';\n\nconst settingsStore = useSettingsStore();\nconst uiStore = useUIStore();\nconst { debounce } = useDebounce();\n\nconst telemetry = useTelemetry();\n\nconst props = withDefaults(defineProps<ExecutionFilterProps>(), {\n\tworkflows: () => [] as Array<IWorkflowDb | IWorkflowShortResponse>,\n\tpopoverPlacement: 'bottom' as Placement,\n\tteleported: true,\n});\nconst emit = defineEmits<{\n\t(event: 'filterChanged', value: ExecutionFilterType): void;\n}>();\nconst debouncedEmit = debounce(emit, {\n\tdebounceTime: 500,\n});\n\nconst isCustomDataFilterTracked = ref(false);\nconst isAdvancedExecutionFilterEnabled = computed(() =>\n\tsettingsStore.isEnterpriseFeatureEnabled(EnterpriseEditionFeature.AdvancedExecutionFilters),\n);\nconst showTags = computed(() => false);\n\nconst getDefaultFilter = (): ExecutionFilterType => ({\n\tstatus: 'all',\n\tworkflowId: 'all',\n\ttags: [],\n\tstartDate: '',\n\tendDate: '',\n\tmetadata: [{ key: '', value: '' }],\n});\nconst filter = reactive(getDefaultFilter());\n\n// Automatically set up v-models based on filter properties\nconst vModel = reactive(\n\tgetObjectKeys(filter).reduce(\n\t\t(acc, key) => {\n\t\t\tacc[key] = computed({\n\t\t\t\tget() {\n\t\t\t\t\treturn filter[key];\n\t\t\t\t},\n\t\t\t\tset(value) {\n\t\t\t\t\t// TODO: find out what exactly is typechecker complaining about\n\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tfilter[key] = value;\n\t\t\t\t\temit('filterChanged', filter);\n\t\t\t\t},\n\t\t\t});\n\t\t\treturn acc;\n\t\t},\n\t\t{} as Record<keyof ExecutionFilterType, ReturnType<typeof computed>>,\n\t),\n);\n\nconst statuses = computed(() => [\n\t{ id: 'all', name: locale.baseText('executionsList.anyStatus') },\n\t{ id: 'error', name: locale.baseText('executionsList.error') },\n\t{ id: 'canceled', name: locale.baseText('executionsList.canceled') },\n\t{ id: 'running', name: locale.baseText('executionsList.running') },\n\t{ id: 'success', name: locale.baseText('executionsList.success') },\n\t{ id: 'waiting', name: locale.baseText('executionsList.waiting') },\n]);\n\nconst countSelectedFilterProps = computed(() => {\n\tlet count = 0;\n\tif (filter.status !== 'all') {\n\t\tcount++;\n\t}\n\tif (filter.workflowId !== 'all' && props.workflows.length) {\n\t\tcount++;\n\t}\n\tif (!isEmpty(filter.tags)) {\n\t\tcount++;\n\t}\n\tif (!isEmpty(filter.metadata)) {\n\t\tcount++;\n\t}\n\tif (!!filter.startDate) {\n\t\tcount++;\n\t}\n\tif (!!filter.endDate) {\n\t\tcount++;\n\t}\n\treturn count;\n});\n\n// vModel.metadata is a text input and needs a debounced emit to avoid too many requests\n// We use the :value and @input combo instead of v-model with this event listener\nconst onFilterMetaChange = (index: number, prop: keyof ExecutionFilterMetadata, value: string) => {\n\tif (!filter.metadata[index]) {\n\t\tfilter.metadata[index] = {\n\t\t\tkey: '',\n\t\t\tvalue: '',\n\t\t};\n\t}\n\tfilter.metadata[index][prop] = value;\n\n\tif (!isCustomDataFilterTracked.value) {\n\t\ttelemetry.track('User filtered executions with custom data');\n\t\tisCustomDataFilterTracked.value = true;\n\t}\n\n\tdebouncedEmit('filterChanged', filter);\n};\n\n// Can't use v-model on TagsDropdown component and thus vModel.tags is useless\n// We just emit the updated filter\nconst onTagsChange = (tags: string[]) => {\n\tfilter.tags = tags;\n\temit('filterChanged', filter);\n};\n\nconst onFilterReset = () => {\n\tObject.assign(filter, getDefaultFilter());\n\temit('filterChanged', filter);\n};\n\nconst goToUpgrade = () => {\n\tvoid uiStore.goToUpgrade('custom-data-filter', 'upgrade-custom-data-filter');\n};\n\nonBeforeMount(() => {\n\tisCustomDataFilterTracked.value = false;\n});\n</script>\n<template>\n\t<n8n-popover trigger=\"click\" :placement=\"popoverPlacement\" width=\"440\">\n\t\t<template #reference>\n\t\t\t<n8n-button\n\t\t\t\ticon=\"filter\"\n\t\t\t\ttype=\"tertiary\"\n\t\t\t\t:active=\"!!countSelectedFilterProps\"\n\t\t\t\tdata-test-id=\"executions-filter-button\"\n\t\t\t>\n\t\t\t\t<n8n-badge\n\t\t\t\t\tv-if=\"!!countSelectedFilterProps\"\n\t\t\t\t\ttheme=\"primary\"\n\t\t\t\t\tclass=\"mr-4xs\"\n\t\t\t\t\tdata-test-id=\"execution-filter-badge\"\n\t\t\t\t\t>{{ countSelectedFilterProps }}</n8n-badge\n\t\t\t\t>\n\t\t\t\t{{ locale.baseText('executionsList.filters') }}\n\t\t\t</n8n-button>\n\t\t</template>\n\t\t<div data-test-id=\"execution-filter-form\">\n\t\t\t<div v-if=\"workflows && workflows.length > 0\" :class=\"$style.group\">\n\t\t\t\t<label for=\"execution-filter-workflows\">{{ locale.baseText('workflows.heading') }}</label>\n\t\t\t\t<n8n-select\n\t\t\t\t\tid=\"execution-filter-workflows\"\n\t\t\t\t\tv-model=\"vModel.workflowId\"\n\t\t\t\t\t:placeholder=\"locale.baseText('executionsFilter.selectWorkflow')\"\n\t\t\t\t\tfilterable\n\t\t\t\t\tdata-test-id=\"executions-filter-workflows-select\"\n\t\t\t\t\t:teleported=\"teleported\"\n\t\t\t\t>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<n8n-option\n\t\t\t\t\t\t\tv-for=\"(item, idx) in props.workflows\"\n\t\t\t\t\t\t\t:key=\"idx\"\n\t\t\t\t\t\t\t:label=\"item.name\"\n\t\t\t\t\t\t\t:value=\"item.id\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</n8n-select>\n\t\t\t</div>\n\t\t\t<div v-if=\"showTags\" :class=\"$style.group\">\n\t\t\t\t<label for=\"execution-filter-tags\">{{ locale.baseText('workflows.filters.tags') }}</label>\n\t\t\t\t<TagsDropdown\n\t\t\t\t\tid=\"execution-filter-tags\"\n\t\t\t\t\t:placeholder=\"locale.baseText('workflowOpen.filterWorkflows')\"\n\t\t\t\t\t:model-value=\"filter.tags\"\n\t\t\t\t\t:create-enabled=\"false\"\n\t\t\t\t\tdata-test-id=\"executions-filter-tags-select\"\n\t\t\t\t\t@update:model-value=\"onTagsChange\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div :class=\"$style.group\">\n\t\t\t\t<label for=\"execution-filter-status\">{{ locale.baseText('executionsList.status') }}</label>\n\t\t\t\t<n8n-select\n\t\t\t\t\tid=\"execution-filter-status\"\n\t\t\t\t\tv-model=\"vModel.status\"\n\t\t\t\t\t:placeholder=\"locale.baseText('executionsFilter.selectStatus')\"\n\t\t\t\t\tfilterable\n\t\t\t\t\tdata-test-id=\"executions-filter-status-select\"\n\t\t\t\t\t:teleported=\"teleported\"\n\t\t\t\t>\n\t\t\t\t\t<n8n-option\n\t\t\t\t\t\tv-for=\"(item, idx) in statuses\"\n\t\t\t\t\t\t:key=\"idx\"\n\t\t\t\t\t\t:label=\"item.name\"\n\t\t\t\t\t\t:value=\"item.id\"\n\t\t\t\t\t/>\n\t\t\t\t</n8n-select>\n\t\t\t</div>\n\t\t\t<div :class=\"$style.group\">\n\t\t\t\t<label for=\"execution-filter-start-date\">{{\n\t\t\t\t\tlocale.baseText('executionsFilter.start')\n\t\t\t\t}}</label>\n\t\t\t\t<div :class=\"$style.dates\">\n\t\t\t\t\t<el-date-picker\n\t\t\t\t\t\tid=\"execution-filter-start-date\"\n\t\t\t\t\t\tv-model=\"vModel.startDate\"\n\t\t\t\t\t\ttype=\"datetime\"\n\t\t\t\t\t\t:teleported=\"false\"\n\t\t\t\t\t\t:format=\"DATE_TIME_MASK\"\n\t\t\t\t\t\t:placeholder=\"locale.baseText('executionsFilter.startDate')\"\n\t\t\t\t\t\tdata-test-id=\"executions-filter-start-date-picker\"\n\t\t\t\t\t/>\n\t\t\t\t\t<span :class=\"$style.divider\">to</span>\n\t\t\t\t\t<el-date-picker\n\t\t\t\t\t\tid=\"execution-filter-end-date\"\n\t\t\t\t\t\tv-model=\"vModel.endDate\"\n\t\t\t\t\t\ttype=\"datetime\"\n\t\t\t\t\t\t:teleported=\"false\"\n\t\t\t\t\t\t:format=\"DATE_TIME_MASK\"\n\t\t\t\t\t\t:placeholder=\"locale.baseText('executionsFilter.endDate')\"\n\t\t\t\t\t\tdata-test-id=\"executions-filter-end-date-picker\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div :class=\"$style.group\">\n\t\t\t\t<n8n-tooltip placement=\"right\">\n\t\t\t\t\t<template #content>\n\t\t\t\t\t\t<i18n-t tag=\"span\" keypath=\"executionsFilter.customData.docsTooltip\">\n\t\t\t\t\t\t\t<template #link>\n\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\thref=\"https://docs.n8n.io/workflows/executions/custom-executions-data/\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{{ locale.baseText('executionsFilter.customData.docsTooltip.link') }}\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</i18n-t>\n\t\t\t\t\t</template>\n\t\t\t\t\t<span :class=\"$style.label\">\n\t\t\t\t\t\t{{ locale.baseText('executionsFilter.savedData') }}\n\t\t\t\t\t\t<n8n-icon :class=\"$style.tooltipIcon\" icon=\"question-circle\" size=\"small\" />\n\t\t\t\t\t</span>\n\t\t\t\t</n8n-tooltip>\n\t\t\t\t<div :class=\"$style.subGroup\">\n\t\t\t\t\t<label for=\"execution-filter-saved-data-key\">{{\n\t\t\t\t\t\tlocale.baseText('executionsFilter.savedDataKey')\n\t\t\t\t\t}}</label>\n\t\t\t\t\t<n8n-tooltip :disabled=\"isAdvancedExecutionFilterEnabled\" placement=\"top\">\n\t\t\t\t\t\t<template #content>\n\t\t\t\t\t\t\t<i18n-t tag=\"span\" keypath=\"executionsFilter.customData.inputTooltip\">\n\t\t\t\t\t\t\t\t<template #link>\n\t\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\t\thref=\"#\"\n\t\t\t\t\t\t\t\t\t\tdata-test-id=\"executions-filter-view-plans-link\"\n\t\t\t\t\t\t\t\t\t\t@click.prevent=\"goToUpgrade\"\n\t\t\t\t\t\t\t\t\t\t>{{ locale.baseText('executionsFilter.customData.inputTooltip.link') }}</a\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t</i18n-t>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<n8n-input\n\t\t\t\t\t\t\tid=\"execution-filter-saved-data-key\"\n\t\t\t\t\t\t\tname=\"execution-filter-saved-data-key\"\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t:disabled=\"!isAdvancedExecutionFilterEnabled\"\n\t\t\t\t\t\t\t:placeholder=\"locale.baseText('executionsFilter.savedDataKeyPlaceholder')\"\n\t\t\t\t\t\t\t:model-value=\"filter.metadata[0]?.key\"\n\t\t\t\t\t\t\tdata-test-id=\"execution-filter-saved-data-key-input\"\n\t\t\t\t\t\t\t@update:model-value=\"onFilterMetaChange(0, 'key', $event)\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</n8n-tooltip>\n\t\t\t\t\t<label for=\"execution-filter-saved-data-value\">{{\n\t\t\t\t\t\tlocale.baseText('executionsFilter.savedDataValue')\n\t\t\t\t\t}}</label>\n\t\t\t\t\t<n8n-tooltip :disabled=\"isAdvancedExecutionFilterEnabled\" placement=\"top\">\n\t\t\t\t\t\t<template #content>\n\t\t\t\t\t\t\t<i18n-t tag=\"span\" keypath=\"executionsFilter.customData.inputTooltip\">\n\t\t\t\t\t\t\t\t<template #link>\n\t\t\t\t\t\t\t\t\t<a href=\"#\" @click.prevent=\"goToUpgrade\">{{\n\t\t\t\t\t\t\t\t\t\tlocale.baseText('executionsFilter.customData.inputTooltip.link')\n\t\t\t\t\t\t\t\t\t}}</a>\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t</i18n-t>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<n8n-input\n\t\t\t\t\t\t\tid=\"execution-filter-saved-data-value\"\n\t\t\t\t\t\t\tname=\"execution-filter-saved-data-value\"\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t:disabled=\"!isAdvancedExecutionFilterEnabled\"\n\t\t\t\t\t\t\t:placeholder=\"locale.baseText('executionsFilter.savedDataValuePlaceholder')\"\n\t\t\t\t\t\t\t:model-value=\"filter.metadata[0]?.value\"\n\t\t\t\t\t\t\tdata-test-id=\"execution-filter-saved-data-value-input\"\n\t\t\t\t\t\t\t@update:model-value=\"onFilterMetaChange(0, 'value', $event)\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</n8n-tooltip>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<n8n-button\n\t\t\t\tv-if=\"!!countSelectedFilterProps\"\n\t\t\t\t:class=\"$style.resetBtn\"\n\t\t\t\tsize=\"large\"\n\t\t\t\ttext\n\t\t\t\tdata-test-id=\"executions-filter-reset-button\"\n\t\t\t\t@click=\"onFilterReset\"\n\t\t\t>\n\t\t\t\t{{ locale.baseText('executionsFilter.reset') }}\n\t\t\t</n8n-button>\n\t\t</div>\n\t</n8n-popover>\n</template>\n<style lang=\"scss\" module>\n.group {\n\tlabel,\n\t.label {\n\t\tdisplay: inline-block;\n\t\tfont-size: var(--font-size-2xs);\n\t\tmargin: var(--spacing-s) 0 var(--spacing-3xs);\n\t}\n}\n\n.subGroup {\n\tpadding: 0 0 var(--spacing-xs) var(--spacing-s);\n\n\tlabel,\n\t.label {\n\t\tfont-size: var(--font-size-3xs);\n\t\tmargin: var(--spacing-4xs) 0 var(--spacing-4xs);\n\t}\n}\n\n.dates {\n\tdisplay: flex;\n\tborder: 1px solid var(--color-foreground-base);\n\tborder-radius: var(--border-radius-base);\n\twhite-space: nowrap;\n\talign-items: center;\n}\n\n.divider {\n\tpadding: 0 var(--spacing-m);\n\tline-height: 100%;\n}\n\n.resetBtn {\n\tpadding: 0;\n\tmargin: var(--spacing-xs) 0 0;\n}\n\n.tooltipIcon {\n\tcolor: var(--color-text-light);\n}\n</style>\n\n<style lang=\"scss\" scoped>\n:deep(.el-date-editor) {\n\tinput {\n\t\theight: 36px;\n\t\tborder: 0;\n\t\tpadding-right: 0;\n\t}\n\n\t.el-input__prefix {\n\t\tcolor: var(--color-foreground-dark);\n\t}\n\n\t&:last-of-type {\n\t\tinput {\n\t\t\tpadding-left: 0;\n\t\t}\n\n\t\t.el-input__prefix {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n\n:deep(.el-select-dropdown.el-popper[data-popper-placement^='bottom']) {\n\t> .popper__arrow {\n\t\ttop: -6px;\n\t\tleft: 50%;\n\t\tright: unset;\n\t\tmargin-bottom: 0;\n\t\tmargin-right: 3px;\n\t\tborder-left-width: 6px;\n\t\tborder-top-width: 0;\n\t\tborder-bottom-color: var(--border-color-light);\n\t\tborder-right-color: transparent;\n\n\t\t&::after {\n\t\t\ttop: 1px;\n\t\t\tleft: unset;\n\t\t\tbottom: unset;\n\t\t\tmargin-left: -6px;\n\t\t\tborder-left-width: 6px;\n\t\t\tborder-top-width: 0;\n\t\t\tborder-bottom-color: var(--color-foreground-xlight);\n\t\t\tborder-right-color: transparent;\n\t\t}\n\t}\n}\n</style>\n"],"names":["_sfc_main$1","defineComponent","msPassed","DATE_TIME_MASK","settingsStore","useSettingsStore","uiStore","useUIStore","debounce","useDebounce","telemetry","useTelemetry","props","__props","emit","__emit","debouncedEmit","isCustomDataFilterTracked","ref","isAdvancedExecutionFilterEnabled","computed","EnterpriseEditionFeature","showTags","getDefaultFilter","filter","reactive","vModel","getObjectKeys","acc","key","value","statuses","locale","countSelectedFilterProps","count","isEmpty","onFilterMetaChange","index","prop","onTagsChange","tags","onFilterReset","goToUpgrade","onBeforeMount"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ExecutionsFilter-8p_qD50I.js","sources":["../../src/components/executions/ExecutionsTime.vue","../../src/components/executions/ExecutionsFilter.vue"],"sourcesContent":["<template>\n\t<span>\n\t\t{{ time }}\n\t</span>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n\tname: 'ExecutionsTime',\n\tprops: ['startTime'],\n\tdata() {\n\t\treturn {\n\t\t\tnowTime: -1,\n\t\t\tintervalTimer: null as null | NodeJS.Timeout,\n\t\t};\n\t},\n\tcomputed: {\n\t\ttime(): string {\n\t\t\tif (!this.startTime) {\n\t\t\t\treturn '...';\n\t\t\t}\n\t\t\tconst msPassed = this.nowTime - new Date(this.startTime).getTime();\n\t\t\treturn this.$locale.displayTimer(msPassed);\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.setNow();\n\t\tthis.intervalTimer = setInterval(() => {\n\t\t\tthis.setNow();\n\t\t}, 1000);\n\t},\n\tbeforeUnmount() {\n\t\t// Make sure that the timer gets destroyed once no longer needed\n\t\tif (this.intervalTimer !== null) {\n\t\t\tclearInterval(this.intervalTimer);\n\t\t}\n\t},\n\tmethods: {\n\t\tsetNow() {\n\t\t\tthis.nowTime = new Date().getTime();\n\t\t},\n\t},\n});\n</script>\n","<script lang=\"ts\" setup>\nimport { computed, reactive, onBeforeMount, ref } from 'vue';\nimport type {\n\tExecutionFilterType,\n\tExecutionFilterMetadata,\n\tIWorkflowShortResponse,\n\tIWorkflowDb,\n} from '@/Interface';\nimport { i18n as locale } from '@/plugins/i18n';\nimport TagsDropdown from '@/components/TagsDropdown.vue';\nimport { getObjectKeys, isEmpty } from '@/utils/typesUtils';\nimport { EnterpriseEditionFeature } from '@/constants';\nimport { useSettingsStore } from '@/stores/settings.store';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useTelemetry } from '@/composables/useTelemetry';\nimport type { Placement } from '@floating-ui/core';\nimport { useDebounce } from '@/composables/useDebounce';\n\nexport type ExecutionFilterProps = {\n\tworkflows?: Array<IWorkflowDb | IWorkflowShortResponse>;\n\tpopoverPlacement?: Placement;\n\tteleported?: boolean;\n};\n\nconst DATE_TIME_MASK = 'YYYY-MM-DD HH:mm';\n\nconst settingsStore = useSettingsStore();\nconst uiStore = useUIStore();\nconst { debounce } = useDebounce();\n\nconst telemetry = useTelemetry();\n\nconst props = withDefaults(defineProps<ExecutionFilterProps>(), {\n\tworkflows: () => [] as Array<IWorkflowDb | IWorkflowShortResponse>,\n\tpopoverPlacement: 'bottom' as Placement,\n\tteleported: true,\n});\nconst emit = defineEmits<{\n\t(event: 'filterChanged', value: ExecutionFilterType): void;\n}>();\nconst debouncedEmit = debounce(emit, {\n\tdebounceTime: 500,\n});\n\nconst isCustomDataFilterTracked = ref(false);\nconst isAdvancedExecutionFilterEnabled = computed(() =>\n\tsettingsStore.isEnterpriseFeatureEnabled(EnterpriseEditionFeature.AdvancedExecutionFilters),\n);\nconst showTags = computed(() => false);\n\nconst getDefaultFilter = (): ExecutionFilterType => ({\n\tstatus: 'all',\n\tworkflowId: 'all',\n\ttags: [],\n\tstartDate: '',\n\tendDate: '',\n\tmetadata: [{ key: '', value: '' }],\n});\nconst filter = reactive(getDefaultFilter());\n\n// Automatically set up v-models based on filter properties\nconst vModel = reactive(\n\tgetObjectKeys(filter).reduce(\n\t\t(acc, key) => {\n\t\t\tacc[key] = computed({\n\t\t\t\tget() {\n\t\t\t\t\treturn filter[key];\n\t\t\t\t},\n\t\t\t\tset(value) {\n\t\t\t\t\t// TODO: find out what exactly is typechecker complaining about\n\n\t\t\t\t\t// @ts-ignore\n\t\t\t\t\tfilter[key] = value;\n\t\t\t\t\temit('filterChanged', filter);\n\t\t\t\t},\n\t\t\t});\n\t\t\treturn acc;\n\t\t},\n\t\t{} as Record<keyof ExecutionFilterType, ReturnType<typeof computed>>,\n\t),\n);\n\nconst statuses = computed(() => [\n\t{ id: 'all', name: locale.baseText('executionsList.anyStatus') },\n\t{ id: 'error', name: locale.baseText('executionsList.error') },\n\t{ id: 'canceled', name: locale.baseText('executionsList.canceled') },\n\t{ id: 'running', name: locale.baseText('executionsList.running') },\n\t{ id: 'success', name: locale.baseText('executionsList.success') },\n\t{ id: 'waiting', name: locale.baseText('executionsList.waiting') },\n]);\n\nconst countSelectedFilterProps = computed(() => {\n\tlet count = 0;\n\tif (filter.status !== 'all') {\n\t\tcount++;\n\t}\n\tif (filter.workflowId !== 'all' && props.workflows.length) {\n\t\tcount++;\n\t}\n\tif (!isEmpty(filter.tags)) {\n\t\tcount++;\n\t}\n\tif (!isEmpty(filter.metadata)) {\n\t\tcount++;\n\t}\n\tif (!!filter.startDate) {\n\t\tcount++;\n\t}\n\tif (!!filter.endDate) {\n\t\tcount++;\n\t}\n\treturn count;\n});\n\n// vModel.metadata is a text input and needs a debounced emit to avoid too many requests\n// We use the :value and @input combo instead of v-model with this event listener\nconst onFilterMetaChange = (index: number, prop: keyof ExecutionFilterMetadata, value: string) => {\n\tif (!filter.metadata[index]) {\n\t\tfilter.metadata[index] = {\n\t\t\tkey: '',\n\t\t\tvalue: '',\n\t\t};\n\t}\n\tfilter.metadata[index][prop] = value;\n\n\tif (!isCustomDataFilterTracked.value) {\n\t\ttelemetry.track('User filtered executions with custom data');\n\t\tisCustomDataFilterTracked.value = true;\n\t}\n\n\tdebouncedEmit('filterChanged', filter);\n};\n\n// Can't use v-model on TagsDropdown component and thus vModel.tags is useless\n// We just emit the updated filter\nconst onTagsChange = (tags: string[]) => {\n\tfilter.tags = tags;\n\temit('filterChanged', filter);\n};\n\nconst onFilterReset = () => {\n\tObject.assign(filter, getDefaultFilter());\n\temit('filterChanged', filter);\n};\n\nconst goToUpgrade = () => {\n\tvoid uiStore.goToUpgrade('custom-data-filter', 'upgrade-custom-data-filter');\n};\n\nonBeforeMount(() => {\n\tisCustomDataFilterTracked.value = false;\n});\n</script>\n<template>\n\t<n8n-popover trigger=\"click\" :placement=\"popoverPlacement\" width=\"440\">\n\t\t<template #reference>\n\t\t\t<n8n-button\n\t\t\t\ticon=\"filter\"\n\t\t\t\ttype=\"tertiary\"\n\t\t\t\t:active=\"!!countSelectedFilterProps\"\n\t\t\t\tdata-test-id=\"executions-filter-button\"\n\t\t\t>\n\t\t\t\t<n8n-badge\n\t\t\t\t\tv-if=\"!!countSelectedFilterProps\"\n\t\t\t\t\ttheme=\"primary\"\n\t\t\t\t\tclass=\"mr-4xs\"\n\t\t\t\t\tdata-test-id=\"execution-filter-badge\"\n\t\t\t\t\t>{{ countSelectedFilterProps }}</n8n-badge\n\t\t\t\t>\n\t\t\t\t{{ locale.baseText('executionsList.filters') }}\n\t\t\t</n8n-button>\n\t\t</template>\n\t\t<div data-test-id=\"execution-filter-form\">\n\t\t\t<div v-if=\"workflows && workflows.length > 0\" :class=\"$style.group\">\n\t\t\t\t<label for=\"execution-filter-workflows\">{{ locale.baseText('workflows.heading') }}</label>\n\t\t\t\t<n8n-select\n\t\t\t\t\tid=\"execution-filter-workflows\"\n\t\t\t\t\tv-model=\"vModel.workflowId\"\n\t\t\t\t\t:placeholder=\"locale.baseText('executionsFilter.selectWorkflow')\"\n\t\t\t\t\tfilterable\n\t\t\t\t\tdata-test-id=\"executions-filter-workflows-select\"\n\t\t\t\t\t:teleported=\"teleported\"\n\t\t\t\t>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<n8n-option\n\t\t\t\t\t\t\tv-for=\"(item, idx) in props.workflows\"\n\t\t\t\t\t\t\t:key=\"idx\"\n\t\t\t\t\t\t\t:label=\"item.name\"\n\t\t\t\t\t\t\t:value=\"item.id\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</n8n-select>\n\t\t\t</div>\n\t\t\t<div v-if=\"showTags\" :class=\"$style.group\">\n\t\t\t\t<label for=\"execution-filter-tags\">{{ locale.baseText('workflows.filters.tags') }}</label>\n\t\t\t\t<TagsDropdown\n\t\t\t\t\tid=\"execution-filter-tags\"\n\t\t\t\t\t:placeholder=\"locale.baseText('workflowOpen.filterWorkflows')\"\n\t\t\t\t\t:model-value=\"filter.tags\"\n\t\t\t\t\t:create-enabled=\"false\"\n\t\t\t\t\tdata-test-id=\"executions-filter-tags-select\"\n\t\t\t\t\t@update:model-value=\"onTagsChange\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div :class=\"$style.group\">\n\t\t\t\t<label for=\"execution-filter-status\">{{ locale.baseText('executionsList.status') }}</label>\n\t\t\t\t<n8n-select\n\t\t\t\t\tid=\"execution-filter-status\"\n\t\t\t\t\tv-model=\"vModel.status\"\n\t\t\t\t\t:placeholder=\"locale.baseText('executionsFilter.selectStatus')\"\n\t\t\t\t\tfilterable\n\t\t\t\t\tdata-test-id=\"executions-filter-status-select\"\n\t\t\t\t\t:teleported=\"teleported\"\n\t\t\t\t>\n\t\t\t\t\t<n8n-option\n\t\t\t\t\t\tv-for=\"(item, idx) in statuses\"\n\t\t\t\t\t\t:key=\"idx\"\n\t\t\t\t\t\t:label=\"item.name\"\n\t\t\t\t\t\t:value=\"item.id\"\n\t\t\t\t\t/>\n\t\t\t\t</n8n-select>\n\t\t\t</div>\n\t\t\t<div :class=\"$style.group\">\n\t\t\t\t<label for=\"execution-filter-start-date\">{{\n\t\t\t\t\tlocale.baseText('executionsFilter.start')\n\t\t\t\t}}</label>\n\t\t\t\t<div :class=\"$style.dates\">\n\t\t\t\t\t<el-date-picker\n\t\t\t\t\t\tid=\"execution-filter-start-date\"\n\t\t\t\t\t\tv-model=\"vModel.startDate\"\n\t\t\t\t\t\ttype=\"datetime\"\n\t\t\t\t\t\t:teleported=\"false\"\n\t\t\t\t\t\t:format=\"DATE_TIME_MASK\"\n\t\t\t\t\t\t:placeholder=\"locale.baseText('executionsFilter.startDate')\"\n\t\t\t\t\t\tdata-test-id=\"executions-filter-start-date-picker\"\n\t\t\t\t\t/>\n\t\t\t\t\t<span :class=\"$style.divider\">to</span>\n\t\t\t\t\t<el-date-picker\n\t\t\t\t\t\tid=\"execution-filter-end-date\"\n\t\t\t\t\t\tv-model=\"vModel.endDate\"\n\t\t\t\t\t\ttype=\"datetime\"\n\t\t\t\t\t\t:teleported=\"false\"\n\t\t\t\t\t\t:format=\"DATE_TIME_MASK\"\n\t\t\t\t\t\t:placeholder=\"locale.baseText('executionsFilter.endDate')\"\n\t\t\t\t\t\tdata-test-id=\"executions-filter-end-date-picker\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div :class=\"$style.group\">\n\t\t\t\t<n8n-tooltip placement=\"right\">\n\t\t\t\t\t<template #content>\n\t\t\t\t\t\t<i18n-t tag=\"span\" keypath=\"executionsFilter.customData.docsTooltip\">\n\t\t\t\t\t\t\t<template #link>\n\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\thref=\"https://docs.n8n.io/workflows/executions/custom-executions-data/\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{{ locale.baseText('executionsFilter.customData.docsTooltip.link') }}\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</i18n-t>\n\t\t\t\t\t</template>\n\t\t\t\t\t<span :class=\"$style.label\">\n\t\t\t\t\t\t{{ locale.baseText('executionsFilter.savedData') }}\n\t\t\t\t\t\t<n8n-icon :class=\"$style.tooltipIcon\" icon=\"question-circle\" size=\"small\" />\n\t\t\t\t\t</span>\n\t\t\t\t</n8n-tooltip>\n\t\t\t\t<div :class=\"$style.subGroup\">\n\t\t\t\t\t<label for=\"execution-filter-saved-data-key\">{{\n\t\t\t\t\t\tlocale.baseText('executionsFilter.savedDataKey')\n\t\t\t\t\t}}</label>\n\t\t\t\t\t<n8n-tooltip :disabled=\"isAdvancedExecutionFilterEnabled\" placement=\"top\">\n\t\t\t\t\t\t<template #content>\n\t\t\t\t\t\t\t<i18n-t tag=\"span\" keypath=\"executionsFilter.customData.inputTooltip\">\n\t\t\t\t\t\t\t\t<template #link>\n\t\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\t\thref=\"#\"\n\t\t\t\t\t\t\t\t\t\tdata-test-id=\"executions-filter-view-plans-link\"\n\t\t\t\t\t\t\t\t\t\t@click.prevent=\"goToUpgrade\"\n\t\t\t\t\t\t\t\t\t\t>{{ locale.baseText('executionsFilter.customData.inputTooltip.link') }}</a\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t</i18n-t>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<n8n-input\n\t\t\t\t\t\t\tid=\"execution-filter-saved-data-key\"\n\t\t\t\t\t\t\tname=\"execution-filter-saved-data-key\"\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t:disabled=\"!isAdvancedExecutionFilterEnabled\"\n\t\t\t\t\t\t\t:placeholder=\"locale.baseText('executionsFilter.savedDataKeyPlaceholder')\"\n\t\t\t\t\t\t\t:model-value=\"filter.metadata[0]?.key\"\n\t\t\t\t\t\t\tdata-test-id=\"execution-filter-saved-data-key-input\"\n\t\t\t\t\t\t\t@update:model-value=\"onFilterMetaChange(0, 'key', $event)\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</n8n-tooltip>\n\t\t\t\t\t<label for=\"execution-filter-saved-data-value\">{{\n\t\t\t\t\t\tlocale.baseText('executionsFilter.savedDataValue')\n\t\t\t\t\t}}</label>\n\t\t\t\t\t<n8n-tooltip :disabled=\"isAdvancedExecutionFilterEnabled\" placement=\"top\">\n\t\t\t\t\t\t<template #content>\n\t\t\t\t\t\t\t<i18n-t tag=\"span\" keypath=\"executionsFilter.customData.inputTooltip\">\n\t\t\t\t\t\t\t\t<template #link>\n\t\t\t\t\t\t\t\t\t<a href=\"#\" @click.prevent=\"goToUpgrade\">{{\n\t\t\t\t\t\t\t\t\t\tlocale.baseText('executionsFilter.customData.inputTooltip.link')\n\t\t\t\t\t\t\t\t\t}}</a>\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t</i18n-t>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<n8n-input\n\t\t\t\t\t\t\tid=\"execution-filter-saved-data-value\"\n\t\t\t\t\t\t\tname=\"execution-filter-saved-data-value\"\n\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t:disabled=\"!isAdvancedExecutionFilterEnabled\"\n\t\t\t\t\t\t\t:placeholder=\"locale.baseText('executionsFilter.savedDataValuePlaceholder')\"\n\t\t\t\t\t\t\t:model-value=\"filter.metadata[0]?.value\"\n\t\t\t\t\t\t\tdata-test-id=\"execution-filter-saved-data-value-input\"\n\t\t\t\t\t\t\t@update:model-value=\"onFilterMetaChange(0, 'value', $event)\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</n8n-tooltip>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<n8n-button\n\t\t\t\tv-if=\"!!countSelectedFilterProps\"\n\t\t\t\t:class=\"$style.resetBtn\"\n\t\t\t\tsize=\"large\"\n\t\t\t\ttext\n\t\t\t\tdata-test-id=\"executions-filter-reset-button\"\n\t\t\t\t@click=\"onFilterReset\"\n\t\t\t>\n\t\t\t\t{{ locale.baseText('executionsFilter.reset') }}\n\t\t\t</n8n-button>\n\t\t</div>\n\t</n8n-popover>\n</template>\n<style lang=\"scss\" module>\n.group {\n\tlabel,\n\t.label {\n\t\tdisplay: inline-block;\n\t\tfont-size: var(--font-size-2xs);\n\t\tmargin: var(--spacing-s) 0 var(--spacing-3xs);\n\t}\n}\n\n.subGroup {\n\tpadding: 0 0 var(--spacing-xs) var(--spacing-s);\n\n\tlabel,\n\t.label {\n\t\tfont-size: var(--font-size-3xs);\n\t\tmargin: var(--spacing-4xs) 0 var(--spacing-4xs);\n\t}\n}\n\n.dates {\n\tdisplay: flex;\n\tborder: 1px solid var(--color-foreground-base);\n\tborder-radius: var(--border-radius-base);\n\twhite-space: nowrap;\n\talign-items: center;\n}\n\n.divider {\n\tpadding: 0 var(--spacing-m);\n\tline-height: 100%;\n}\n\n.resetBtn {\n\tpadding: 0;\n\tmargin: var(--spacing-xs) 0 0;\n}\n\n.tooltipIcon {\n\tcolor: var(--color-text-light);\n}\n</style>\n\n<style lang=\"scss\" scoped>\n:deep(.el-date-editor) {\n\tinput {\n\t\theight: 36px;\n\t\tborder: 0;\n\t\tpadding-right: 0;\n\t}\n\n\t.el-input__prefix {\n\t\tcolor: var(--color-foreground-dark);\n\t}\n\n\t&:last-of-type {\n\t\tinput {\n\t\t\tpadding-left: 0;\n\t\t}\n\n\t\t.el-input__prefix {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n\n:deep(.el-select-dropdown.el-popper[data-popper-placement^='bottom']) {\n\t> .popper__arrow {\n\t\ttop: -6px;\n\t\tleft: 50%;\n\t\tright: unset;\n\t\tmargin-bottom: 0;\n\t\tmargin-right: 3px;\n\t\tborder-left-width: 6px;\n\t\tborder-top-width: 0;\n\t\tborder-bottom-color: var(--border-color-light);\n\t\tborder-right-color: transparent;\n\n\t\t&::after {\n\t\t\ttop: 1px;\n\t\t\tleft: unset;\n\t\t\tbottom: unset;\n\t\t\tmargin-left: -6px;\n\t\t\tborder-left-width: 6px;\n\t\t\tborder-top-width: 0;\n\t\t\tborder-bottom-color: var(--color-foreground-xlight);\n\t\t\tborder-right-color: transparent;\n\t\t}\n\t}\n}\n</style>\n"],"names":["_sfc_main$1","defineComponent","msPassed","DATE_TIME_MASK","settingsStore","useSettingsStore","uiStore","useUIStore","debounce","useDebounce","telemetry","useTelemetry","props","__props","emit","__emit","debouncedEmit","isCustomDataFilterTracked","ref","isAdvancedExecutionFilterEnabled","computed","EnterpriseEditionFeature","showTags","getDefaultFilter","filter","reactive","vModel","getObjectKeys","acc","key","value","statuses","locale","countSelectedFilterProps","count","isEmpty","onFilterMetaChange","index","prop","onTagsChange","tags","onFilterReset","goToUpgrade","onBeforeMount"],"mappings":"mUASA,MAAAA,GAAeC,EAAgB,CAC9B,KAAM,iBACN,MAAO,CAAC,WAAW,EACnB,MAAO,CACC,MAAA,CACN,QAAS,GACT,cAAe,IAAA,CAEjB,EACA,SAAU,CACT,MAAe,CACV,GAAA,CAAC,KAAK,UACF,MAAA,MAEF,MAAAC,EAAW,KAAK,QAAU,IAAI,KAAK,KAAK,SAAS,EAAE,UAClD,OAAA,KAAK,QAAQ,aAAaA,CAAQ,CAC1C,CACD,EACA,SAAU,CACT,KAAK,OAAO,EACP,KAAA,cAAgB,YAAY,IAAM,CACtC,KAAK,OAAO,GACV,GAAI,CACR,EACA,eAAgB,CAEX,KAAK,gBAAkB,MAC1B,cAAc,KAAK,aAAa,CAElC,EACA,QAAS,CACR,QAAS,CACR,KAAK,QAAU,IAAI,KAAK,EAAE,QAAQ,CACnC,CACD,CACD,CAAC,kdCpBKC,EAAiB,yMAEvB,MAAMC,EAAgBC,KAChBC,EAAUC,KACV,CAAE,SAAAC,GAAaC,KAEfC,EAAYC,KAEZC,EAAQC,EAKRC,EAAOC,EAGPC,EAAgBR,EAASM,EAAM,CACpC,aAAc,GAAA,CACd,EAEKG,EAA4BC,GAAI,EAAK,EACrCC,EAAmCC,EAAS,IACjDhB,EAAc,2BAA2BiB,GAAyB,wBAAwB,CAAA,EAErFC,EAAWF,EAAS,IAAM,EAAK,EAE/BG,EAAmB,KAA4B,CACpD,OAAQ,MACR,WAAY,MACZ,KAAM,CAAC,EACP,UAAW,GACX,QAAS,GACT,SAAU,CAAC,CAAE,IAAK,GAAI,MAAO,GAAI,CAAA,GAE5BC,EAASC,EAASF,EAAA,CAAkB,EAGpCG,EAASD,EACdE,GAAcH,CAAM,EAAE,OACrB,CAACI,EAAKC,KACDD,EAAAC,CAAG,EAAIT,EAAS,CACnB,KAAM,CACL,OAAOI,EAAOK,CAAG,CAClB,EACA,IAAIC,EAAO,CAIVN,EAAOK,CAAG,EAAIC,EACdhB,EAAK,gBAAiBU,CAAM,CAC7B,CAAA,CACA,EACMI,GAER,CAAC,CACF,CAAA,EAGKG,EAAWX,EAAS,IAAM,CAC/B,CAAE,GAAI,MAAO,KAAMY,EAAO,SAAS,0BAA0B,CAAE,EAC/D,CAAE,GAAI,QAAS,KAAMA,EAAO,SAAS,sBAAsB,CAAE,EAC7D,CAAE,GAAI,WAAY,KAAMA,EAAO,SAAS,yBAAyB,CAAE,EACnE,CAAE,GAAI,UAAW,KAAMA,EAAO,SAAS,wBAAwB,CAAE,EACjE,CAAE,GAAI,UAAW,KAAMA,EAAO,SAAS,wBAAwB,CAAE,EACjE,CAAE,GAAI,UAAW,KAAMA,EAAO,SAAS,wBAAwB,CAAE,CAAA,CACjE,EAEKC,EAA2Bb,EAAS,IAAM,CAC/C,IAAIc,EAAQ,EACR,OAAAV,EAAO,SAAW,OACrBU,IAEGV,EAAO,aAAe,OAASZ,EAAM,UAAU,QAClDsB,IAEIC,EAAQX,EAAO,IAAI,GACvBU,IAEIC,EAAQX,EAAO,QAAQ,GAC3BU,IAEKV,EAAO,WACZU,IAEKV,EAAO,SACZU,IAEMA,CAAA,CACP,EAIKE,EAAqB,CAACC,EAAeC,EAAqCR,IAAkB,CAC5FN,EAAO,SAASa,CAAK,IAClBb,EAAA,SAASa,CAAK,EAAI,CACxB,IAAK,GACL,MAAO,EAAA,GAGTb,EAAO,SAASa,CAAK,EAAEC,CAAI,EAAIR,EAE1Bb,EAA0B,QAC9BP,EAAU,MAAM,2CAA2C,EAC3DO,EAA0B,MAAQ,IAGnCD,EAAc,gBAAiBQ,CAAM,CAAA,EAKhCe,EAAgBC,GAAmB,CACxChB,EAAO,KAAOgB,EACd1B,EAAK,gBAAiBU,CAAM,CAAA,EAGvBiB,GAAgB,IAAM,CACpB,OAAA,OAAOjB,EAAQD,EAAkB,CAAA,EACxCT,EAAK,gBAAiBU,CAAM,CAAA,EAGvBkB,EAAc,IAAM,CACpBpC,EAAQ,YAAY,qBAAsB,4BAA4B,CAAA,EAG5E,OAAAqC,GAAc,IAAM,CACnB1B,EAA0B,MAAQ,EAAA,CAClC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{G as ee,av as ue,aH as de,r as B,e as k,ag as h,l as i,m as b,p as s,M as w,R as g,I as r,a2 as Z,T as u,U as _,O as y,u as n,S as V,d as xe,b as oe,P as pe,V as me,F as fe,a7 as ye,a0 as we,D as _e,y as be}from"./vendor-Dv5OeN6t.js";import{E as he,a as ve}from"./ExecutionsFilter-Bp-2hjm2.js";import{as as ge,bW as ke,x as te,V as Le,j as ne,L as le,u as ie,A as Te,H as Ee,G as ae,d9 as Ae,a2 as Ce}from"./index-DATiCTBk.js";import{c as Ie}from"./dateFormatter-C9_5JWtn.js";import{u as Se}from"./useExecutionHelpers-DrZ09ZbE.js";import{_ as ce}from"./n8n-CX_-_IN5.js";import{s as $e}from"./pinia-DJNDmPLG.js";import"./axios-Mm4CS0gO.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-BBHtM40w.js";import"./lodash-es-CZ1inz46.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-CZXI82nZ.js";import"./vue-i18n-Delvyc9x.js";import"./uuid-SoommWqA.js";import"./luxon-CLwAIbs0.js";import"./@n8n/codemirror-lang-sql-DBO6T13I.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-CWDO6_kP.js";import"./@n8n/codemirror-lang-Dl0FW_KM.js";import"./esprima-next-nhoSXAeq.js";import"./fast-json-stable-stringify-CqoWQPIV.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-BGkPba5A.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";const Me={key:0},De={key:1},Ne={key:0},We={key:1},Oe=s("br",null,null,-1),Re={key:2},ze=s("br",null,null,-1),je=ee({__name:"GlobalExecutionsListItem",props:{execution:{},selected:{type:Boolean,default:!1},workflowName:{}},emits:["stop","select","retrySaved","retryOriginal","delete"],setup(H,{emit:I}){const m=I,c=H,o=ue(),l=te(),S=de(),x=Se(),L=B(!1),f=k(()=>c.execution.status==="running"),p=k(()=>c.execution.waitTill?new Date(c.execution.waitTill).toISOString()===ge:!1),d=k(()=>x.isExecutionRetriable(c.execution)),M=k(()=>({[o.executionListItem]:!0,[o[c.execution.status]]:!0})),v=k(()=>c.execution.startedAt?U(c.execution.startedAt):""),C=k(()=>c.execution.waitTill?U(c.execution.waitTill):""),D=k(()=>c.execution.stoppedAt?l.displayTimer(new Date(c.execution.stoppedAt).getTime()-new Date(c.execution.startedAt).getTime(),!0):""),T=k(()=>c.execution.status==="waiting"&&p.value?l.baseText("executionsList.statusTooltipText.theWorkflowIsWaitingIndefinitely"):""),N=k(()=>{switch(c.execution.status){case"waiting":return l.baseText("executionsList.waiting");case"canceled":return l.baseText("executionsList.canceled");case"crashed":return l.baseText("executionsList.error");case"new":return l.baseText("executionsList.running");case"running":return l.baseText("executionsList.running");case"success":return l.baseText("executionsList.succeeded");case"error":return l.baseText("executionsList.error");default:return l.baseText("executionsList.unknown")}}),P=k(()=>{switch(c.execution.status){case"waiting":return"executionsList.statusWaiting";case"canceled":return"executionsList.statusCanceled";case"crashed":case"error":case"success":return c.execution.stoppedAt?"executionsList.statusText":"executionsList.statusTextWithoutTime";case"new":return"executionsList.statusRunning";case"running":return"executionsList.statusRunning";default:return"executionsList.statusUnknown"}});function U(t){const{date:O,time:R}=Ie(t);return ke.baseText("executionsList.started",{interpolate:{time:R,date:O}})}function $(){const t=S.resolve({name:Le.EXECUTION_PREVIEW,params:{name:c.execution.workflowId,executionId:c.execution.id}});window.open(t.href,"_blank")}function X(){L.value=!0,m("stop",c.execution)}function q(){m("select",c.execution)}async function J(t){m(t,c.execution)}return(t,O)=>{const R=h("ElCheckbox"),F=h("FontAwesomeIcon"),K=h("i18n-t"),z=h("N8nTooltip"),G=h("N8nButton"),Q=h("N8nIconButton"),j=h("ElDropdownItem"),e=h("ElDropdownMenu"),a=h("ElDropdown");return i(),b("tr",{class:r(M.value)},[s("td",null,[t.execution.stoppedAt&&t.execution.id?(i(),w(R,{key:0,"model-value":t.selected,label:"","data-test-id":"select-execution-checkbox","onUpdate:modelValue":q},null,8,["model-value"])):g("",!0)]),s("td",null,[s("span",{class:r(t.$style.link),onClick:Z($,["stop"])},u(t.execution.workflowName||t.workflowName),3)]),s("td",null,[s("span",null,u(v.value),1)]),s("td",null,[s("div",{class:r(t.$style.statusColumn)},[f.value?(i(),b("span",{key:0,class:r(t.$style.spinner)},[_(F,{icon:"spinner",spin:""})],2)):g("",!0),p.value?(i(),w(z,{key:2,placement:"top"},{content:y(()=>[s("span",null,u(T.value),1)]),default:y(()=>[s("span",{class:r(t.$style.status)},u(N.value),3)]),_:1})):(i(),w(K,{key:1,"data-test-id":"execution-status",tag:"span",keypath:P.value},{status:y(()=>[s("span",{class:r(t.$style.status)},u(N.value),3)]),time:y(()=>[t.execution.waitTill?(i(),b("span",Me,u(C.value),1)):t.execution.stoppedAt?(i(),b("span",De,u(D.value),1)):(i(),w(he,{key:2,"start-time":t.execution.startedAt},null,8,["start-time"]))]),_:1},8,["keypath"]))],2)]),s("td",null,[t.execution.id?(i(),b("span",Ne,"#"+u(t.execution.id),1)):g("",!0),t.execution.retryOf?(i(),b("span",We,[Oe,s("small",null," ("+u(n(l).baseText("executionsList.retryOf"))+" #"+u(t.execution.retryOf)+") ",1)])):t.execution.retrySuccessId?(i(),b("span",Re,[ze,s("small",null," ("+u(n(l).baseText("executionsList.successRetry"))+" #"+u(t.execution.retrySuccessId)+") ",1)])):g("",!0)]),s("td",null,[t.execution.mode==="manual"?(i(),w(z,{key:0,placement:"top"},{content:y(()=>[s("span",null,u(n(l).baseText("executionsList.test")),1)]),default:y(()=>[_(F,{icon:"flask"})]),_:1})):g("",!0)]),s("td",null,[s("div",{class:r(t.$style.buttonCell)},[t.execution.stoppedAt&&t.execution.id?(i(),w(G,{key:0,size:"small",outline:"",label:n(l).baseText("executionsList.view"),onClick:Z($,["stop"])},null,8,["label"])):g("",!0)],2)]),s("td",null,[s("div",{class:r(t.$style.buttonCell)},[!t.execution.stoppedAt||t.execution.waitTill?(i(),w(G,{key:0,"data-test-id":"stop-execution-button",size:"small",outline:"",label:n(l).baseText("executionsList.stop"),loading:L.value,onClick:Z(X,["stop"])},null,8,["label","loading"])):g("",!0)],2)]),s("td",null,[f.value?g("",!0):(i(),w(a,{key:0,trigger:"click",onCommand:J},{dropdown:y(()=>[_(e,{class:r({[t.$style.actions]:!0,[t.$style.deleteOnly]:!d.value})},{default:y(()=>[d.value?(i(),w(j,{key:0,"data-test-id":"execution-retry-saved-dropdown-item",class:r(t.$style.retryAction),command:"retrySaved"},{default:y(()=>[V(u(n(l).baseText("executionsList.retryWithCurrentlySavedWorkflow")),1)]),_:1},8,["class"])):g("",!0),d.value?(i(),w(j,{key:1,"data-test-id":"execution-retry-original-dropdown-item",class:r(t.$style.retryAction),command:"retryOriginal"},{default:y(()=>[V(u(n(l).baseText("executionsList.retryWithOriginalWorkflow")),1)]),_:1},8,["class"])):g("",!0),_(j,{"data-test-id":"execution-delete-dropdown-item",class:r(t.$style.deleteAction),command:"delete"},{default:y(()=>[V(u(n(l).baseText("generic.delete")),1)]),_:1},8,["class"])]),_:1},8,["class"])]),default:y(()=>[_(Q,{text:"",type:"tertiary",size:"mini",icon:"ellipsis-v"})]),_:1}))])],2)}}}),Be="_executionListItem_jgpi5_1",Ve="_crashed_jgpi5_30",He="_error_jgpi5_30",Ue="_success_jgpi5_33",Fe="_running_jgpi5_36",Ge="_waiting_jgpi5_39",Pe="_unknown_jgpi5_42",Xe="_link_jgpi5_46",qe="_statusColumn_jgpi5_52",Je="_spinner_jgpi5_57",Ke="_status_jgpi5_52",Qe="_buttonCell_jgpi5_83",Ye={executionListItem:Be,crashed:Ve,error:He,success:Ue,new:"_new_jgpi5_36",running:Fe,waiting:Ge,unknown:Pe,link:Xe,statusColumn:qe,spinner:Je,status:Ke,buttonCell:Qe},Ze={$style:Ye},et=ce(je,[["__cssModules",Ze]]),tt={key:1},st=s("th",null,null,-1),ot=s("th",null,null,-1),nt=s("th",null,null,-1),lt=s("th",null,null,-1),it=ee({__name:"GlobalExecutionsList",props:{executions:{},filters:{},total:{default:0},estimated:{type:Boolean,default:!1}},emits:["closeModal","execution:stop","update:autoRefresh","update:filters"],setup(H,{emit:I}){const m=H,c=I,o=te(),l=ae(),S=ne(),x=le(),L=B(!1),f=B(!1),p=B(!1),d=B({}),M=Ee(),v=ie(),C=k(()=>p.value?m.total:Object.keys(d.value).length),D=k(()=>[{id:"all",name:o.baseText("executionsList.allWorkflows")},...S.allWorkflows]);xe(()=>m.executions,()=>{m.executions.length===0&&$(),R()}),oe(()=>{L.value=!0});function T(){p.value=!p.value,f.value=!p.value,N()}function N(){f.value=!f.value,f.value?O():(p.value=!1,d.value={})}function P(e){const a=e.id;if(d.value[a]){const{[a]:E,...W}=d.value;d.value=W}else d.value={...d.value,[a]:!0};f.value=Object.keys(d.value).length===m.executions.length,p.value=Object.keys(d.value).length===m.total}async function U(){if(await M.confirm(o.baseText("executionsList.confirmMessage.message",{interpolate:{count:C.value.toString()}}),o.baseText("executionsList.confirmMessage.headline"),{type:"warning",confirmButtonText:o.baseText("executionsList.confirmMessage.confirmButtonText"),cancelButtonText:o.baseText("executionsList.confirmMessage.cancelButtonText")})===Te){try{await x.deleteExecutions({filters:x.executionsFilters,...p.value?{deleteBefore:m.executions[0].startedAt}:{ids:Object.keys(d.value)}})}catch(a){v.showError(a,o.baseText("executionsList.showError.handleDeleteSelected.title"));return}v.showMessage({title:o.baseText("executionsList.showMessage.handleDeleteSelected.title"),type:"success"}),$()}}function $(){f.value=!1,p.value=!1,d.value={}}async function X(e){c("update:filters",e),$()}function q(e){return J(e.workflowId??"")??o.baseText("executionsList.unsavedWorkflow")}function J(e){var a;return(a=D.value.find(E=>E.id===e))==null?void 0:a.name}async function t(){if(x.filters.status==="running")return;let e;m.executions.length!==0&&(e=m.executions.slice(-1)[0].id);try{await x.fetchExecutions(x.executionsFilters,e)}catch(a){v.showError(a,o.baseText("executionsList.showError.loadMore.title"))}}function O(){m.executions.forEach(e=>{d.value[e.id]=!0})}function R(){p.value&&(f.value=!0,O())}async function F(e){await z(e,!0)}async function K(e){await z(e,!1)}async function z(e,a){try{await x.retryExecution(e.id,a)?v.showMessage({title:o.baseText("executionsList.showMessage.retrySuccessfulTrue.title"),type:"success"}):v.showMessage({title:o.baseText("executionsList.showMessage.retrySuccessfulFalse.title"),type:"error"})}catch(E){v.showError(E,o.baseText("executionsList.showError.retryExecution.title"))}l.track("User clicked retry execution button",{workflow_id:S.workflowId,execution_id:e.id,retry_type:a?"current":"original"})}async function G(e){try{await x.stopCurrentExecution(e.id),v.showMessage({title:o.baseText("executionsList.showMessage.stopExecution.title"),message:o.baseText("executionsList.showMessage.stopExecution.message",{interpolate:{activeExecutionId:e.id}}),type:"success"}),c("execution:stop")}catch(a){v.showError(a,o.baseText("executionsList.showError.stopExecution.title"))}}async function Q(e){try{if(await x.deleteExecutions({ids:[e.id]}),f.value){const{[e.id]:a,...E}=d.value;d.value=E}}catch(a){v.showError(a,o.baseText("executionsList.showError.handleDeleteSelected.title"))}}async function j(e){e?await x.startAutoRefreshInterval():x.stopAutoRefreshInterval()}return(e,a)=>{const E=h("N8nHeading"),W=h("N8nLoading"),se=h("ElCheckbox"),re=h("el-checkbox"),Y=h("N8nButton");return i(),b("div",{class:r(e.$style.execListWrapper)},[s("div",{class:r(e.$style.execList)},[s("div",{class:r(e.$style.execListHeader)},[_(E,{tag:"h1",size:"2xlarge"},{default:y(()=>[V(u(n(o).baseText("executionsList.workflowExecutions")),1)]),_:1}),s("div",{class:r(e.$style.execListHeaderControls)},[L.value?(i(),w(se,{key:1,modelValue:n(x).autoRefresh,"onUpdate:modelValue":[a[0]||(a[0]=A=>n(x).autoRefresh=A),a[1]||(a[1]=A=>j(A))],class:"mr-xl","data-test-id":"execution-auto-refresh-checkbox"},{default:y(()=>[V(u(n(o).baseText("executionsList.autoRefresh")),1)]),_:1},8,["modelValue"])):(i(),w(W,{key:0,class:r(e.$style.filterLoader),variant:"custom"},null,8,["class"])),pe(_(ve,{workflows:D.value,onFilterChanged:X},null,8,["workflows"]),[[me,L.value]])],2)],2),f.value&&e.total>0?(i(),w(se,{key:0,class:r(e.$style.selectAll),label:n(o).baseText("executionsList.selectAll",{adjustToNumber:e.total,interpolate:{executionNum:`${e.total}`}}),"model-value":p.value,"data-test-id":"select-all-executions-checkbox","onUpdate:modelValue":T},null,8,["class","label","model-value"])):g("",!0),L.value?(i(),b("table",{key:2,class:r(e.$style.execTable)},[s("thead",null,[s("tr",null,[s("th",null,[_(re,{"model-value":f.value,disabled:e.total<1,label:"","data-test-id":"select-visible-executions-checkbox","onUpdate:modelValue":N},null,8,["model-value","disabled"])]),s("th",null,u(n(o).baseText("executionsList.name")),1),s("th",null,u(n(o).baseText("executionsList.startedAt")),1),s("th",null,u(n(o).baseText("executionsList.status")),1),s("th",null,u(n(o).baseText("executionsList.id")),1),st,ot,nt,lt])]),_(we,{tag:"tbody",name:"executions-list"},{default:y(()=>[(i(!0),b(fe,null,ye(e.executions,A=>(i(),w(et,{key:A.id,execution:A,"workflow-name":q(A),selected:d.value[A.id]||p.value,onStop:G,onDelete:Q,onSelect:P,onRetrySaved:F,onRetryOriginal:K},null,8,["execution","workflow-name","selected"]))),128))]),_:1})],2)):(i(),b("div",tt,[_(W,{class:r(e.$style.tableLoader),variant:"custom"},null,8,["class"]),_(W,{class:r(e.$style.tableLoader),variant:"custom"},null,8,["class"]),_(W,{class:r(e.$style.tableLoader),variant:"custom"},null,8,["class"])])),!e.executions.length&&L.value&&!n(x).loading?(i(),b("div",{key:3,class:r(e.$style.loadedAll),"data-test-id":"execution-list-empty"},u(n(o).baseText("executionsList.empty")),3)):e.total>e.executions.length||e.estimated?(i(),b("div",{key:4,class:r(e.$style.loadMore)},[_(Y,{icon:"sync",title:n(o).baseText("executionsList.loadMore"),label:n(o).baseText("executionsList.loadMore"),loading:n(x).loading,"data-test-id":"load-more-button",onClick:a[2]||(a[2]=A=>t())},null,8,["title","label","loading"])],2)):L.value&&!n(x).loading?(i(),b("div",{key:5,class:r(e.$style.loadedAll),"data-test-id":"execution-all-loaded"},u(n(o).baseText("executionsList.loadedAll")),3)):g("",!0)],2),C.value>0?(i(),b("div",{key:0,class:r(e.$style.selectionOptions),"data-test-id":"selected-executions-info"},[s("span",null,u(n(o).baseText("executionsList.selected",{adjustToNumber:C.value,interpolate:{count:`${C.value}`}})),1),_(Y,{label:n(o).baseText("generic.delete"),type:"tertiary","data-test-id":"delete-selected-button",onClick:U},null,8,["label"]),_(Y,{label:n(o).baseText("executionsList.clearSelection"),type:"tertiary","data-test-id":"clear-selection-button",onClick:$},null,8,["label"])],2)):g("",!0)],2)}}}),at="_execListWrapper_1xozp_1",ct="_execList_1xozp_1",rt="_execListHeader_1xozp_22",ut="_execListHeaderControls_1xozp_29",dt="_selectionOptions_1xozp_35",xt="_execTable_1xozp_53",pt="_loadMore_1xozp_96",mt="_loadedAll_1xozp_102",ft="_actions_1xozp_109",yt="_deleteOnly_1xozp_109",wt="_retryAction_1xozp_113",_t="_deleteAction_1xozp_113",bt="_selectAll_1xozp_117",ht="_filterLoader_1xozp_123",vt="_tableLoader_1xozp_128",gt={execListWrapper:at,execList:ct,execListHeader:rt,execListHeaderControls:ut,selectionOptions:dt,execTable:xt,loadMore:pt,loadedAll:mt,actions:ft,deleteOnly:yt,retryAction:wt,deleteAction:_t,selectAll:bt,filterLoader:ht,tableLoader:vt},kt={$style:gt},Lt=ce(it,[["__cssModules",kt]]),os=ee({__name:"ExecutionsView",setup(H){const I=te(),m=ae(),c=Ce(),o=ne(),l=le(),S=ie(),{executionsCount:x,executionsCountEstimated:L,filters:f,allExecutions:p}=$e(l);_e(async()=>{await d(),c.run("executionsList.openDialog"),m.track("User opened Executions log",{workflow_id:o.workflowId})}),oe(async()=>{Ae(`n8n - ${I.baseText("executionsList.workflowExecutions")}`),document.addEventListener("visibilitychange",M),await l.initialize()}),be(()=>{l.reset(),document.removeEventListener("visibilitychange",M)});async function d(){try{await o.fetchAllWorkflows()}catch(T){S.showError(T,I.baseText("executionsList.showError.loadWorkflows.title"))}}function M(){document.visibilityState==="hidden"?l.stopAutoRefreshInterval():l.startAutoRefreshInterval()}async function v(){try{await l.fetchExecutions()}catch(T){S.showError(T,I.baseText("executionsList.showError.refreshData.title"))}}async function C(T){l.reset(),l.setFilters(T),await l.initialize()}async function D(){await v()}return(T,N)=>(i(),w(Lt,{executions:n(p),filters:n(f),total:n(x),"estimated-total":n(L),"onExecution:stop":D,"onUpdate:filters":C},null,8,["executions","filters","total","estimated-total"]))}});export{os as default};
|
|
2
|
-
//# sourceMappingURL=ExecutionsView-
|
|
1
|
+
import{G as ee,av as ue,aH as de,r as B,e as k,ag as h,l as i,m as b,p as s,M as w,R as g,I as r,a2 as Z,T as u,U as _,O as y,u as n,S as V,d as xe,b as oe,P as pe,V as me,F as fe,a7 as ye,a0 as we,D as _e,y as be}from"./vendor-Dv5OeN6t.js";import{E as he,a as ve}from"./ExecutionsFilter-8p_qD50I.js";import{as as ge,bW as ke,x as te,V as Le,j as ne,L as le,u as ie,A as Te,H as Ee,G as ae,d9 as Ae,a2 as Ce}from"./index-BjbCeTcj.js";import{c as Ie}from"./dateFormatter-C9_5JWtn.js";import{u as Se}from"./useExecutionHelpers-th1spplL.js";import{_ as ce}from"./n8n-CX_-_IN5.js";import{s as $e}from"./pinia-DJNDmPLG.js";import"./axios-Mm4CS0gO.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-BBHtM40w.js";import"./lodash-es-CZ1inz46.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-CZXI82nZ.js";import"./vue-i18n-Delvyc9x.js";import"./uuid-SoommWqA.js";import"./luxon-CLwAIbs0.js";import"./@n8n/codemirror-lang-sql-DBO6T13I.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-CWDO6_kP.js";import"./@n8n/codemirror-lang-Dl0FW_KM.js";import"./esprima-next-nhoSXAeq.js";import"./fast-json-stable-stringify-CqoWQPIV.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-BGkPba5A.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";const Me={key:0},De={key:1},Ne={key:0},We={key:1},Oe=s("br",null,null,-1),Re={key:2},ze=s("br",null,null,-1),je=ee({__name:"GlobalExecutionsListItem",props:{execution:{},selected:{type:Boolean,default:!1},workflowName:{}},emits:["stop","select","retrySaved","retryOriginal","delete"],setup(H,{emit:I}){const m=I,c=H,o=ue(),l=te(),S=de(),x=Se(),L=B(!1),f=k(()=>c.execution.status==="running"),p=k(()=>c.execution.waitTill?new Date(c.execution.waitTill).toISOString()===ge:!1),d=k(()=>x.isExecutionRetriable(c.execution)),M=k(()=>({[o.executionListItem]:!0,[o[c.execution.status]]:!0})),v=k(()=>c.execution.startedAt?U(c.execution.startedAt):""),C=k(()=>c.execution.waitTill?U(c.execution.waitTill):""),D=k(()=>c.execution.stoppedAt?l.displayTimer(new Date(c.execution.stoppedAt).getTime()-new Date(c.execution.startedAt).getTime(),!0):""),T=k(()=>c.execution.status==="waiting"&&p.value?l.baseText("executionsList.statusTooltipText.theWorkflowIsWaitingIndefinitely"):""),N=k(()=>{switch(c.execution.status){case"waiting":return l.baseText("executionsList.waiting");case"canceled":return l.baseText("executionsList.canceled");case"crashed":return l.baseText("executionsList.error");case"new":return l.baseText("executionsList.running");case"running":return l.baseText("executionsList.running");case"success":return l.baseText("executionsList.succeeded");case"error":return l.baseText("executionsList.error");default:return l.baseText("executionsList.unknown")}}),P=k(()=>{switch(c.execution.status){case"waiting":return"executionsList.statusWaiting";case"canceled":return"executionsList.statusCanceled";case"crashed":case"error":case"success":return c.execution.stoppedAt?"executionsList.statusText":"executionsList.statusTextWithoutTime";case"new":return"executionsList.statusRunning";case"running":return"executionsList.statusRunning";default:return"executionsList.statusUnknown"}});function U(t){const{date:O,time:R}=Ie(t);return ke.baseText("executionsList.started",{interpolate:{time:R,date:O}})}function $(){const t=S.resolve({name:Le.EXECUTION_PREVIEW,params:{name:c.execution.workflowId,executionId:c.execution.id}});window.open(t.href,"_blank")}function X(){L.value=!0,m("stop",c.execution)}function q(){m("select",c.execution)}async function J(t){m(t,c.execution)}return(t,O)=>{const R=h("ElCheckbox"),F=h("FontAwesomeIcon"),K=h("i18n-t"),z=h("N8nTooltip"),G=h("N8nButton"),Q=h("N8nIconButton"),j=h("ElDropdownItem"),e=h("ElDropdownMenu"),a=h("ElDropdown");return i(),b("tr",{class:r(M.value)},[s("td",null,[t.execution.stoppedAt&&t.execution.id?(i(),w(R,{key:0,"model-value":t.selected,label:"","data-test-id":"select-execution-checkbox","onUpdate:modelValue":q},null,8,["model-value"])):g("",!0)]),s("td",null,[s("span",{class:r(t.$style.link),onClick:Z($,["stop"])},u(t.execution.workflowName||t.workflowName),3)]),s("td",null,[s("span",null,u(v.value),1)]),s("td",null,[s("div",{class:r(t.$style.statusColumn)},[f.value?(i(),b("span",{key:0,class:r(t.$style.spinner)},[_(F,{icon:"spinner",spin:""})],2)):g("",!0),p.value?(i(),w(z,{key:2,placement:"top"},{content:y(()=>[s("span",null,u(T.value),1)]),default:y(()=>[s("span",{class:r(t.$style.status)},u(N.value),3)]),_:1})):(i(),w(K,{key:1,"data-test-id":"execution-status",tag:"span",keypath:P.value},{status:y(()=>[s("span",{class:r(t.$style.status)},u(N.value),3)]),time:y(()=>[t.execution.waitTill?(i(),b("span",Me,u(C.value),1)):t.execution.stoppedAt?(i(),b("span",De,u(D.value),1)):(i(),w(he,{key:2,"start-time":t.execution.startedAt},null,8,["start-time"]))]),_:1},8,["keypath"]))],2)]),s("td",null,[t.execution.id?(i(),b("span",Ne,"#"+u(t.execution.id),1)):g("",!0),t.execution.retryOf?(i(),b("span",We,[Oe,s("small",null," ("+u(n(l).baseText("executionsList.retryOf"))+" #"+u(t.execution.retryOf)+") ",1)])):t.execution.retrySuccessId?(i(),b("span",Re,[ze,s("small",null," ("+u(n(l).baseText("executionsList.successRetry"))+" #"+u(t.execution.retrySuccessId)+") ",1)])):g("",!0)]),s("td",null,[t.execution.mode==="manual"?(i(),w(z,{key:0,placement:"top"},{content:y(()=>[s("span",null,u(n(l).baseText("executionsList.test")),1)]),default:y(()=>[_(F,{icon:"flask"})]),_:1})):g("",!0)]),s("td",null,[s("div",{class:r(t.$style.buttonCell)},[t.execution.stoppedAt&&t.execution.id?(i(),w(G,{key:0,size:"small",outline:"",label:n(l).baseText("executionsList.view"),onClick:Z($,["stop"])},null,8,["label"])):g("",!0)],2)]),s("td",null,[s("div",{class:r(t.$style.buttonCell)},[!t.execution.stoppedAt||t.execution.waitTill?(i(),w(G,{key:0,"data-test-id":"stop-execution-button",size:"small",outline:"",label:n(l).baseText("executionsList.stop"),loading:L.value,onClick:Z(X,["stop"])},null,8,["label","loading"])):g("",!0)],2)]),s("td",null,[f.value?g("",!0):(i(),w(a,{key:0,trigger:"click",onCommand:J},{dropdown:y(()=>[_(e,{class:r({[t.$style.actions]:!0,[t.$style.deleteOnly]:!d.value})},{default:y(()=>[d.value?(i(),w(j,{key:0,"data-test-id":"execution-retry-saved-dropdown-item",class:r(t.$style.retryAction),command:"retrySaved"},{default:y(()=>[V(u(n(l).baseText("executionsList.retryWithCurrentlySavedWorkflow")),1)]),_:1},8,["class"])):g("",!0),d.value?(i(),w(j,{key:1,"data-test-id":"execution-retry-original-dropdown-item",class:r(t.$style.retryAction),command:"retryOriginal"},{default:y(()=>[V(u(n(l).baseText("executionsList.retryWithOriginalWorkflow")),1)]),_:1},8,["class"])):g("",!0),_(j,{"data-test-id":"execution-delete-dropdown-item",class:r(t.$style.deleteAction),command:"delete"},{default:y(()=>[V(u(n(l).baseText("generic.delete")),1)]),_:1},8,["class"])]),_:1},8,["class"])]),default:y(()=>[_(Q,{text:"",type:"tertiary",size:"mini",icon:"ellipsis-v"})]),_:1}))])],2)}}}),Be="_executionListItem_jgpi5_1",Ve="_crashed_jgpi5_30",He="_error_jgpi5_30",Ue="_success_jgpi5_33",Fe="_running_jgpi5_36",Ge="_waiting_jgpi5_39",Pe="_unknown_jgpi5_42",Xe="_link_jgpi5_46",qe="_statusColumn_jgpi5_52",Je="_spinner_jgpi5_57",Ke="_status_jgpi5_52",Qe="_buttonCell_jgpi5_83",Ye={executionListItem:Be,crashed:Ve,error:He,success:Ue,new:"_new_jgpi5_36",running:Fe,waiting:Ge,unknown:Pe,link:Xe,statusColumn:qe,spinner:Je,status:Ke,buttonCell:Qe},Ze={$style:Ye},et=ce(je,[["__cssModules",Ze]]),tt={key:1},st=s("th",null,null,-1),ot=s("th",null,null,-1),nt=s("th",null,null,-1),lt=s("th",null,null,-1),it=ee({__name:"GlobalExecutionsList",props:{executions:{},filters:{},total:{default:0},estimated:{type:Boolean,default:!1}},emits:["closeModal","execution:stop","update:autoRefresh","update:filters"],setup(H,{emit:I}){const m=H,c=I,o=te(),l=ae(),S=ne(),x=le(),L=B(!1),f=B(!1),p=B(!1),d=B({}),M=Ee(),v=ie(),C=k(()=>p.value?m.total:Object.keys(d.value).length),D=k(()=>[{id:"all",name:o.baseText("executionsList.allWorkflows")},...S.allWorkflows]);xe(()=>m.executions,()=>{m.executions.length===0&&$(),R()}),oe(()=>{L.value=!0});function T(){p.value=!p.value,f.value=!p.value,N()}function N(){f.value=!f.value,f.value?O():(p.value=!1,d.value={})}function P(e){const a=e.id;if(d.value[a]){const{[a]:E,...W}=d.value;d.value=W}else d.value={...d.value,[a]:!0};f.value=Object.keys(d.value).length===m.executions.length,p.value=Object.keys(d.value).length===m.total}async function U(){if(await M.confirm(o.baseText("executionsList.confirmMessage.message",{interpolate:{count:C.value.toString()}}),o.baseText("executionsList.confirmMessage.headline"),{type:"warning",confirmButtonText:o.baseText("executionsList.confirmMessage.confirmButtonText"),cancelButtonText:o.baseText("executionsList.confirmMessage.cancelButtonText")})===Te){try{await x.deleteExecutions({filters:x.executionsFilters,...p.value?{deleteBefore:m.executions[0].startedAt}:{ids:Object.keys(d.value)}})}catch(a){v.showError(a,o.baseText("executionsList.showError.handleDeleteSelected.title"));return}v.showMessage({title:o.baseText("executionsList.showMessage.handleDeleteSelected.title"),type:"success"}),$()}}function $(){f.value=!1,p.value=!1,d.value={}}async function X(e){c("update:filters",e),$()}function q(e){return J(e.workflowId??"")??o.baseText("executionsList.unsavedWorkflow")}function J(e){var a;return(a=D.value.find(E=>E.id===e))==null?void 0:a.name}async function t(){if(x.filters.status==="running")return;let e;m.executions.length!==0&&(e=m.executions.slice(-1)[0].id);try{await x.fetchExecutions(x.executionsFilters,e)}catch(a){v.showError(a,o.baseText("executionsList.showError.loadMore.title"))}}function O(){m.executions.forEach(e=>{d.value[e.id]=!0})}function R(){p.value&&(f.value=!0,O())}async function F(e){await z(e,!0)}async function K(e){await z(e,!1)}async function z(e,a){try{await x.retryExecution(e.id,a)?v.showMessage({title:o.baseText("executionsList.showMessage.retrySuccessfulTrue.title"),type:"success"}):v.showMessage({title:o.baseText("executionsList.showMessage.retrySuccessfulFalse.title"),type:"error"})}catch(E){v.showError(E,o.baseText("executionsList.showError.retryExecution.title"))}l.track("User clicked retry execution button",{workflow_id:S.workflowId,execution_id:e.id,retry_type:a?"current":"original"})}async function G(e){try{await x.stopCurrentExecution(e.id),v.showMessage({title:o.baseText("executionsList.showMessage.stopExecution.title"),message:o.baseText("executionsList.showMessage.stopExecution.message",{interpolate:{activeExecutionId:e.id}}),type:"success"}),c("execution:stop")}catch(a){v.showError(a,o.baseText("executionsList.showError.stopExecution.title"))}}async function Q(e){try{if(await x.deleteExecutions({ids:[e.id]}),f.value){const{[e.id]:a,...E}=d.value;d.value=E}}catch(a){v.showError(a,o.baseText("executionsList.showError.handleDeleteSelected.title"))}}async function j(e){e?await x.startAutoRefreshInterval():x.stopAutoRefreshInterval()}return(e,a)=>{const E=h("N8nHeading"),W=h("N8nLoading"),se=h("ElCheckbox"),re=h("el-checkbox"),Y=h("N8nButton");return i(),b("div",{class:r(e.$style.execListWrapper)},[s("div",{class:r(e.$style.execList)},[s("div",{class:r(e.$style.execListHeader)},[_(E,{tag:"h1",size:"2xlarge"},{default:y(()=>[V(u(n(o).baseText("executionsList.workflowExecutions")),1)]),_:1}),s("div",{class:r(e.$style.execListHeaderControls)},[L.value?(i(),w(se,{key:1,modelValue:n(x).autoRefresh,"onUpdate:modelValue":[a[0]||(a[0]=A=>n(x).autoRefresh=A),a[1]||(a[1]=A=>j(A))],class:"mr-xl","data-test-id":"execution-auto-refresh-checkbox"},{default:y(()=>[V(u(n(o).baseText("executionsList.autoRefresh")),1)]),_:1},8,["modelValue"])):(i(),w(W,{key:0,class:r(e.$style.filterLoader),variant:"custom"},null,8,["class"])),pe(_(ve,{workflows:D.value,onFilterChanged:X},null,8,["workflows"]),[[me,L.value]])],2)],2),f.value&&e.total>0?(i(),w(se,{key:0,class:r(e.$style.selectAll),label:n(o).baseText("executionsList.selectAll",{adjustToNumber:e.total,interpolate:{executionNum:`${e.total}`}}),"model-value":p.value,"data-test-id":"select-all-executions-checkbox","onUpdate:modelValue":T},null,8,["class","label","model-value"])):g("",!0),L.value?(i(),b("table",{key:2,class:r(e.$style.execTable)},[s("thead",null,[s("tr",null,[s("th",null,[_(re,{"model-value":f.value,disabled:e.total<1,label:"","data-test-id":"select-visible-executions-checkbox","onUpdate:modelValue":N},null,8,["model-value","disabled"])]),s("th",null,u(n(o).baseText("executionsList.name")),1),s("th",null,u(n(o).baseText("executionsList.startedAt")),1),s("th",null,u(n(o).baseText("executionsList.status")),1),s("th",null,u(n(o).baseText("executionsList.id")),1),st,ot,nt,lt])]),_(we,{tag:"tbody",name:"executions-list"},{default:y(()=>[(i(!0),b(fe,null,ye(e.executions,A=>(i(),w(et,{key:A.id,execution:A,"workflow-name":q(A),selected:d.value[A.id]||p.value,onStop:G,onDelete:Q,onSelect:P,onRetrySaved:F,onRetryOriginal:K},null,8,["execution","workflow-name","selected"]))),128))]),_:1})],2)):(i(),b("div",tt,[_(W,{class:r(e.$style.tableLoader),variant:"custom"},null,8,["class"]),_(W,{class:r(e.$style.tableLoader),variant:"custom"},null,8,["class"]),_(W,{class:r(e.$style.tableLoader),variant:"custom"},null,8,["class"])])),!e.executions.length&&L.value&&!n(x).loading?(i(),b("div",{key:3,class:r(e.$style.loadedAll),"data-test-id":"execution-list-empty"},u(n(o).baseText("executionsList.empty")),3)):e.total>e.executions.length||e.estimated?(i(),b("div",{key:4,class:r(e.$style.loadMore)},[_(Y,{icon:"sync",title:n(o).baseText("executionsList.loadMore"),label:n(o).baseText("executionsList.loadMore"),loading:n(x).loading,"data-test-id":"load-more-button",onClick:a[2]||(a[2]=A=>t())},null,8,["title","label","loading"])],2)):L.value&&!n(x).loading?(i(),b("div",{key:5,class:r(e.$style.loadedAll),"data-test-id":"execution-all-loaded"},u(n(o).baseText("executionsList.loadedAll")),3)):g("",!0)],2),C.value>0?(i(),b("div",{key:0,class:r(e.$style.selectionOptions),"data-test-id":"selected-executions-info"},[s("span",null,u(n(o).baseText("executionsList.selected",{adjustToNumber:C.value,interpolate:{count:`${C.value}`}})),1),_(Y,{label:n(o).baseText("generic.delete"),type:"tertiary","data-test-id":"delete-selected-button",onClick:U},null,8,["label"]),_(Y,{label:n(o).baseText("executionsList.clearSelection"),type:"tertiary","data-test-id":"clear-selection-button",onClick:$},null,8,["label"])],2)):g("",!0)],2)}}}),at="_execListWrapper_1xozp_1",ct="_execList_1xozp_1",rt="_execListHeader_1xozp_22",ut="_execListHeaderControls_1xozp_29",dt="_selectionOptions_1xozp_35",xt="_execTable_1xozp_53",pt="_loadMore_1xozp_96",mt="_loadedAll_1xozp_102",ft="_actions_1xozp_109",yt="_deleteOnly_1xozp_109",wt="_retryAction_1xozp_113",_t="_deleteAction_1xozp_113",bt="_selectAll_1xozp_117",ht="_filterLoader_1xozp_123",vt="_tableLoader_1xozp_128",gt={execListWrapper:at,execList:ct,execListHeader:rt,execListHeaderControls:ut,selectionOptions:dt,execTable:xt,loadMore:pt,loadedAll:mt,actions:ft,deleteOnly:yt,retryAction:wt,deleteAction:_t,selectAll:bt,filterLoader:ht,tableLoader:vt},kt={$style:gt},Lt=ce(it,[["__cssModules",kt]]),os=ee({__name:"ExecutionsView",setup(H){const I=te(),m=ae(),c=Ce(),o=ne(),l=le(),S=ie(),{executionsCount:x,executionsCountEstimated:L,filters:f,allExecutions:p}=$e(l);_e(async()=>{await d(),c.run("executionsList.openDialog"),m.track("User opened Executions log",{workflow_id:o.workflowId})}),oe(async()=>{Ae(`n8n - ${I.baseText("executionsList.workflowExecutions")}`),document.addEventListener("visibilitychange",M),await l.initialize()}),be(()=>{l.reset(),document.removeEventListener("visibilitychange",M)});async function d(){try{await o.fetchAllWorkflows()}catch(T){S.showError(T,I.baseText("executionsList.showError.loadWorkflows.title"))}}function M(){document.visibilityState==="hidden"?l.stopAutoRefreshInterval():l.startAutoRefreshInterval()}async function v(){try{await l.fetchExecutions()}catch(T){S.showError(T,I.baseText("executionsList.showError.refreshData.title"))}}async function C(T){l.reset(),l.setFilters(T),await l.initialize()}async function D(){await v()}return(T,N)=>(i(),w(Lt,{executions:n(p),filters:n(f),total:n(x),"estimated-total":n(L),"onExecution:stop":D,"onUpdate:filters":C},null,8,["executions","filters","total","estimated-total"]))}});export{os as default};
|
|
2
|
+
//# sourceMappingURL=ExecutionsView-Bw4zWCsi.js.map
|