n8n-editor-ui 1.47.0 → 1.47.2
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-BgFWzBDm.js → AuthView-B_jZMnGj.js} +2 -2
- package/dist/assets/{AuthView-BgFWzBDm.js.map → AuthView-B_jZMnGj.js.map} +1 -1
- package/dist/assets/{CanvasControls-m_3acPPd.js → CanvasControls-ns1B0A0j.js} +2 -2
- package/dist/assets/{CanvasControls-m_3acPPd.js.map → CanvasControls-ns1B0A0j.js.map} +1 -1
- package/dist/assets/{ChangePasswordView-CN6JWR-N.js → ChangePasswordView-BDsuHv0B.js} +2 -2
- package/dist/assets/{ChangePasswordView-CN6JWR-N.js.map → ChangePasswordView-BDsuHv0B.js.map} +1 -1
- package/dist/assets/{CollectionParameter-DHmcKhO-.js → CollectionParameter-Br-xtutZ.js} +2 -2
- package/dist/assets/CollectionParameter-Br-xtutZ.js.map +1 -0
- package/dist/assets/{CredentialsView-D9TXjOnK.js → CredentialsView-DnJ_jhDo.js} +2 -2
- package/dist/assets/{CredentialsView-D9TXjOnK.js.map → CredentialsView-DnJ_jhDo.js.map} +1 -1
- package/dist/assets/{ErrorView-CYag8fsg.js → ErrorView-BfV5e5ko.js} +2 -2
- package/dist/assets/{ErrorView-CYag8fsg.js.map → ErrorView-BfV5e5ko.js.map} +1 -1
- package/dist/assets/{ExecutionsFilter-Cf35yNfd.js → ExecutionsFilter-0XcXH83H.js} +2 -2
- package/dist/assets/{ExecutionsFilter-Cf35yNfd.js.map → ExecutionsFilter-0XcXH83H.js.map} +1 -1
- package/dist/assets/{ExecutionsView-ztrgLYNP.js → ExecutionsView-aFiZuLVt.js} +2 -2
- package/dist/assets/{ExecutionsView-ztrgLYNP.js.map → ExecutionsView-aFiZuLVt.js.map} +1 -1
- package/dist/assets/{ForgotMyPasswordView-C-0yB-bx.js → ForgotMyPasswordView-64X9tXq4.js} +2 -2
- package/dist/assets/{ForgotMyPasswordView-C-0yB-bx.js.map → ForgotMyPasswordView-64X9tXq4.js.map} +1 -1
- package/dist/assets/MainHeader-Ch0Iz_7s.js +2 -0
- package/dist/assets/{MainHeader-CMxbwL4C.js.map → MainHeader-Ch0Iz_7s.js.map} +1 -1
- package/dist/assets/{MainSidebar-BuwaBgG9.js → MainSidebar-3ee-tTgz.js} +2 -2
- package/dist/assets/{MainSidebar-BuwaBgG9.js.map → MainSidebar-3ee-tTgz.js.map} +1 -1
- package/dist/assets/{NodeCreation-B7Uimsok.js → NodeCreation-PrQGENrl.js} +3 -3
- package/dist/assets/{NodeCreation-B7Uimsok.js.map → NodeCreation-PrQGENrl.js.map} +1 -1
- package/dist/assets/{NodeCreator-IRjqf3_R.js → NodeCreator-DlK1669m.js} +2 -2
- package/dist/assets/{NodeCreator-IRjqf3_R.js.map → NodeCreator-DlK1669m.js.map} +1 -1
- package/dist/assets/{NodeDetailsView-CSnjluIR.js → NodeDetailsView-DcV7LI-g.js} +4 -4
- package/dist/assets/{NodeDetailsView-CSnjluIR.js.map → NodeDetailsView-DcV7LI-g.js.map} +1 -1
- package/dist/assets/{NodeView-DMzj-gox.css → NodeView--67hs6V6.css} +1 -1
- package/dist/assets/NodeView-D_kbUfVN.js +3 -0
- package/dist/assets/NodeView-D_kbUfVN.js.map +1 -0
- package/dist/assets/{NodeView.v2-DyU_S0rY.js → NodeView.v2-D_Wbnl01.js} +3 -3
- package/dist/assets/{NodeView.v2-DyU_S0rY.js.map → NodeView.v2-D_Wbnl01.js.map} +1 -1
- package/dist/assets/{ProjectCardBadge.vue_vue_type_script_setup_true_lang-C1N0EZCM.js → ProjectCardBadge.vue_vue_type_script_setup_true_lang-6oVL0vKx.js} +2 -2
- package/dist/assets/{ProjectCardBadge.vue_vue_type_script_setup_true_lang-C1N0EZCM.js.map → ProjectCardBadge.vue_vue_type_script_setup_true_lang-6oVL0vKx.js.map} +1 -1
- package/dist/assets/{ProjectSettings-CbNlX27g.js → ProjectSettings-CfcplqBX.js} +2 -2
- package/dist/assets/{ProjectSettings-CbNlX27g.js.map → ProjectSettings-CfcplqBX.js.map} +1 -1
- package/dist/assets/{ProjectTabs-Cx2VWeba.js → ProjectTabs-5ZO9YR8J.js} +2 -2
- package/dist/assets/{ProjectTabs-Cx2VWeba.js.map → ProjectTabs-5ZO9YR8J.js.map} +1 -1
- package/dist/assets/{PushConnectionTracker-C_r8Zv-p.js → PushConnectionTracker-Bp-RjnYr.js} +2 -2
- package/dist/assets/{PushConnectionTracker-C_r8Zv-p.js.map → PushConnectionTracker-Bp-RjnYr.js.map} +1 -1
- package/dist/assets/{ResourcesListLayout-CKSHiUAP.js → ResourcesListLayout-B4W1PSHT.js} +2 -2
- package/dist/assets/{ResourcesListLayout-CKSHiUAP.js.map → ResourcesListLayout-B4W1PSHT.js.map} +1 -1
- package/dist/assets/{RunDataAi-BVqsN7UN.js → RunDataAi-C3XiqNZa.js} +2 -2
- package/dist/assets/{RunDataAi-BVqsN7UN.js.map → RunDataAi-C3XiqNZa.js.map} +1 -1
- package/dist/assets/{RunDataJson-6Yfwd78r.js → RunDataJson-CMcOD-78.js} +3 -3
- package/dist/assets/{RunDataJson-6Yfwd78r.js.map → RunDataJson-CMcOD-78.js.map} +1 -1
- package/dist/assets/{RunDataJsonActions-5ig3g4km.js → RunDataJsonActions-BQBpmtOi.js} +2 -2
- package/dist/assets/{RunDataJsonActions-5ig3g4km.js.map → RunDataJsonActions-BQBpmtOi.js.map} +1 -1
- package/dist/assets/{RunDataSchema-CrW957BW.js → RunDataSchema-CF4YH-8y.js} +3 -3
- package/dist/assets/{RunDataSchema-CrW957BW.js.map → RunDataSchema-CF4YH-8y.js.map} +1 -1
- package/dist/assets/{RunDataSearch-BrIWOZXO.js → RunDataSearch-DwB8g_cE.js} +2 -2
- package/dist/assets/{RunDataSearch-BrIWOZXO.js.map → RunDataSearch-DwB8g_cE.js.map} +1 -1
- package/dist/assets/RunDataTable-BVAuNDP9.js +2 -0
- package/dist/assets/{RunDataTable-B01U16vv.js.map → RunDataTable-BVAuNDP9.js.map} +1 -1
- package/dist/assets/{SamlOnboarding-CfbBlTNm.js → SamlOnboarding-Csd8l-7T.js} +2 -2
- package/dist/assets/{SamlOnboarding-CfbBlTNm.js.map → SamlOnboarding-Csd8l-7T.js.map} +1 -1
- package/dist/assets/{SettingsApiView-CuliNEKo.js → SettingsApiView-DnvdV7dx.js} +2 -2
- package/dist/assets/{SettingsApiView-CuliNEKo.js.map → SettingsApiView-DnvdV7dx.js.map} +1 -1
- package/dist/assets/{SettingsCommunityNodesView-CeY4uqH-.js → SettingsCommunityNodesView-C11a_Ybs.js} +2 -2
- package/dist/assets/{SettingsCommunityNodesView-CeY4uqH-.js.map → SettingsCommunityNodesView-C11a_Ybs.js.map} +1 -1
- package/dist/assets/{SettingsExternalSecrets-CE7ObFx_.js → SettingsExternalSecrets-IIReUcRG.js} +2 -2
- package/dist/assets/{SettingsExternalSecrets-CE7ObFx_.js.map → SettingsExternalSecrets-IIReUcRG.js.map} +1 -1
- package/dist/assets/{SettingsFakeDoorView-DQqNf_Q9.js → SettingsFakeDoorView-BOUfBJS8.js} +2 -2
- package/dist/assets/{SettingsFakeDoorView-DQqNf_Q9.js.map → SettingsFakeDoorView-BOUfBJS8.js.map} +1 -1
- package/dist/assets/{SettingsLdapView-9hy5C87y.js → SettingsLdapView-BaSjQ4cy.js} +2 -2
- package/dist/assets/{SettingsLdapView-9hy5C87y.js.map → SettingsLdapView-BaSjQ4cy.js.map} +1 -1
- package/dist/assets/{SettingsLogStreamingView-Cc0h5DhT.js → SettingsLogStreamingView-COGhA1hN.js} +2 -2
- package/dist/assets/{SettingsLogStreamingView-Cc0h5DhT.js.map → SettingsLogStreamingView-COGhA1hN.js.map} +1 -1
- package/dist/assets/{SettingsPersonalView-Cs82ezMX.js → SettingsPersonalView-BJGgPTwa.js} +2 -2
- package/dist/assets/{SettingsPersonalView-Cs82ezMX.js.map → SettingsPersonalView-BJGgPTwa.js.map} +1 -1
- package/dist/assets/{SettingsSourceControl-Dr7R-QpH.js → SettingsSourceControl-DkdSLuvp.js} +2 -2
- package/dist/assets/{SettingsSourceControl-Dr7R-QpH.js.map → SettingsSourceControl-DkdSLuvp.js.map} +1 -1
- package/dist/assets/{SettingsSso-Di6lHXV2.js → SettingsSso-DA9AOKH5.js} +2 -2
- package/dist/assets/{SettingsSso-Di6lHXV2.js.map → SettingsSso-DA9AOKH5.js.map} +1 -1
- package/dist/assets/{SettingsUsageAndPlan-g86Q7EQY.js → SettingsUsageAndPlan-BVPtlthH.js} +2 -2
- package/dist/assets/{SettingsUsageAndPlan-g86Q7EQY.js.map → SettingsUsageAndPlan-BVPtlthH.js.map} +1 -1
- package/dist/assets/{SettingsUsersView-dOWjUJTW.js → SettingsUsersView-BuKt4ZDO.js} +2 -2
- package/dist/assets/{SettingsUsersView-dOWjUJTW.js.map → SettingsUsersView-BuKt4ZDO.js.map} +1 -1
- package/dist/assets/{SettingsView-DQ0hQWFt.js → SettingsView-DJ78VuiY.js} +2 -2
- package/dist/assets/{SettingsView-DQ0hQWFt.js.map → SettingsView-DJ78VuiY.js.map} +1 -1
- package/dist/assets/{SetupView-CqT8d0D8.js → SetupView-C70Dkfed.js} +2 -2
- package/dist/assets/{SetupView-CqT8d0D8.js.map → SetupView-C70Dkfed.js.map} +1 -1
- package/dist/assets/{SetupWorkflowCredentialsButton-BR-ObOqw.js → SetupWorkflowCredentialsButton-CEQ1LrFl.js} +2 -2
- package/dist/assets/{SetupWorkflowCredentialsButton-BR-ObOqw.js.map → SetupWorkflowCredentialsButton-CEQ1LrFl.js.map} +1 -1
- package/dist/assets/{SetupWorkflowFromTemplateView-DHHtk6_-.js → SetupWorkflowFromTemplateView-BUzzXtBr.js} +2 -2
- package/dist/assets/{SetupWorkflowFromTemplateView-DHHtk6_-.js.map → SetupWorkflowFromTemplateView-BUzzXtBr.js.map} +1 -1
- package/dist/assets/{SigninView-2eLLF8DU.js → SigninView-B3CNL-yp.js} +2 -2
- package/dist/assets/{SigninView-2eLLF8DU.js.map → SigninView-B3CNL-yp.js.map} +1 -1
- package/dist/assets/{SignoutView-BQyCyjsK.js → SignoutView-svcLavkC.js} +2 -2
- package/dist/assets/{SignoutView-BQyCyjsK.js.map → SignoutView-svcLavkC.js.map} +1 -1
- package/dist/assets/{SignupView-ByYEkUpW.js → SignupView-DJWRTPKF.js} +2 -2
- package/dist/assets/{SignupView-ByYEkUpW.js.map → SignupView-DJWRTPKF.js.map} +1 -1
- package/dist/assets/{TemplateDetails-I6WMCxGm.js → TemplateDetails-BnbiWxo-.js} +2 -2
- package/dist/assets/{TemplateDetails-I6WMCxGm.js.map → TemplateDetails-BnbiWxo-.js.map} +1 -1
- package/dist/assets/{TemplateList-DRf0Cbhg.js → TemplateList-By-t2s0M.js} +2 -2
- package/dist/assets/{TemplateList-DRf0Cbhg.js.map → TemplateList-By-t2s0M.js.map} +1 -1
- package/dist/assets/{TemplatesCollectionView-BYkDe49v.js → TemplatesCollectionView-D2L1fmSc.js} +2 -2
- package/dist/assets/{TemplatesCollectionView-BYkDe49v.js.map → TemplatesCollectionView-D2L1fmSc.js.map} +1 -1
- package/dist/assets/{TemplatesSearchView-CiZ7aZcy.js → TemplatesSearchView-Bmr6Nd6g.js} +2 -2
- package/dist/assets/{TemplatesSearchView-CiZ7aZcy.js.map → TemplatesSearchView-Bmr6Nd6g.js.map} +1 -1
- package/dist/assets/{TemplatesView-zULLoEwu.js → TemplatesView-BbunSn-s.js} +2 -2
- package/dist/assets/{TemplatesView-zULLoEwu.js.map → TemplatesView-BbunSn-s.js.map} +1 -1
- package/dist/assets/{TemplatesWorkflowView-DptRLbdX.js → TemplatesWorkflowView-XxBIlMWY.js} +2 -2
- package/dist/assets/{TemplatesWorkflowView-DptRLbdX.js.map → TemplatesWorkflowView-XxBIlMWY.js.map} +1 -1
- package/dist/assets/{VariablesView-NcNcsjHY.js → VariablesView-ZY5xLmKI.js} +2 -2
- package/dist/assets/{VariablesView-NcNcsjHY.js.map → VariablesView-ZY5xLmKI.js.map} +1 -1
- package/dist/assets/{WorkerView-dtJzfgCM.js → WorkerView-DV19-i1-.js} +2 -2
- package/dist/assets/{WorkerView-dtJzfgCM.js.map → WorkerView-DV19-i1-.js.map} +1 -1
- package/dist/assets/{WorkflowActivator-D6Zad1X2.js → WorkflowActivator-BXWURYao.js} +2 -2
- package/dist/assets/{WorkflowActivator-D6Zad1X2.js.map → WorkflowActivator-BXWURYao.js.map} +1 -1
- package/dist/assets/{WorkflowExecutionsInfoAccordion-C86A1CHv.js → WorkflowExecutionsInfoAccordion-aldNazgt.js} +2 -2
- package/dist/assets/{WorkflowExecutionsInfoAccordion-C86A1CHv.js.map → WorkflowExecutionsInfoAccordion-aldNazgt.js.map} +1 -1
- package/dist/assets/{WorkflowExecutionsLandingPage-DAfHDMth.js → WorkflowExecutionsLandingPage-CaAameTk.js} +2 -2
- package/dist/assets/{WorkflowExecutionsLandingPage-DAfHDMth.js.map → WorkflowExecutionsLandingPage-CaAameTk.js.map} +1 -1
- package/dist/assets/{WorkflowExecutionsPreview-C_EBlNX6.js → WorkflowExecutionsPreview-Bb-wJtr-.js} +2 -2
- package/dist/assets/WorkflowExecutionsPreview-Bb-wJtr-.js.map +1 -0
- package/dist/assets/WorkflowExecutionsView-D7nlOP1-.js +2 -0
- package/dist/assets/WorkflowExecutionsView-D7nlOP1-.js.map +1 -0
- package/dist/assets/{WorkflowHistory-DkdQ1koF.js → WorkflowHistory-C6zCGFoY.js} +2 -2
- package/dist/assets/{WorkflowHistory-DkdQ1koF.js.map → WorkflowHistory-C6zCGFoY.js.map} +1 -1
- package/dist/assets/{WorkflowOnboardingView-BPMBW_hz.js → WorkflowOnboardingView-Bu_Oqtr7.js} +2 -2
- package/dist/assets/{WorkflowOnboardingView-BPMBW_hz.js.map → WorkflowOnboardingView-Bu_Oqtr7.js.map} +1 -1
- package/dist/assets/{WorkflowPreview-CLzyAzmJ.js → WorkflowPreview-CVwpKdpj.js} +2 -2
- package/dist/assets/{WorkflowPreview-CLzyAzmJ.js.map → WorkflowPreview-CVwpKdpj.js.map} +1 -1
- package/dist/assets/{WorkflowsView-CzJx_-P5.js → WorkflowsView-DVeAZ2zW.js} +2 -2
- package/dist/assets/{WorkflowsView-CzJx_-P5.js.map → WorkflowsView-DVeAZ2zW.js.map} +1 -1
- package/dist/assets/{cloud-CRMEbZfJ.js → cloud-BRhZDk2r.js} +2 -2
- package/dist/assets/{cloud-CRMEbZfJ.js.map → cloud-BRhZDk2r.js.map} +1 -1
- package/dist/assets/{collaboration.store-Co5wlk8y.js → collaboration.store-Ol7bcCFc.js} +2 -2
- package/dist/assets/{collaboration.store-Co5wlk8y.js.map → collaboration.store-Ol7bcCFc.js.map} +1 -1
- package/dist/assets/index-1OxaEeO3.js +341 -0
- package/dist/assets/index-1OxaEeO3.js.map +1 -0
- package/dist/assets/{nodeCreator.store-CTXKjjQB.js → nodeCreator.store-FIsc3SCx.js} +2 -2
- package/dist/assets/{nodeCreator.store-CTXKjjQB.js.map → nodeCreator.store-FIsc3SCx.js.map} +1 -1
- package/dist/assets/{templateActions-CIRsIG2W.js → templateActions-w_1vSarr.js} +2 -2
- package/dist/assets/{templateActions-CIRsIG2W.js.map → templateActions-w_1vSarr.js.map} +1 -1
- package/dist/assets/{useExecutionDebugging-BzC-1xF-.js → useExecutionDebugging-EHinBq_u.js} +2 -2
- package/dist/assets/{useExecutionDebugging-BzC-1xF-.js.map → useExecutionDebugging-EHinBq_u.js.map} +1 -1
- package/dist/assets/{useExecutionHelpers-C2K8pfbF.js → useExecutionHelpers-LeKoU_T-.js} +2 -2
- package/dist/assets/{useExecutionHelpers-C2K8pfbF.js.map → useExecutionHelpers-LeKoU_T-.js.map} +1 -1
- package/dist/assets/{usePushConnection-EMXpPhl-.js → usePushConnection-PQgFeT_8.js} +2 -2
- package/dist/assets/{usePushConnection-EMXpPhl-.js.map → usePushConnection-PQgFeT_8.js.map} +1 -1
- package/dist/assets/{useUserHelpers-Bn_ZV9Jv.js → useUserHelpers-DZtbUAMm.js} +2 -2
- package/dist/assets/{useUserHelpers-Bn_ZV9Jv.js.map → useUserHelpers-DZtbUAMm.js.map} +1 -1
- package/dist/assets/{useWorkflowActivate-BwVActuc.js → useWorkflowActivate-npf1npdP.js} +2 -2
- package/dist/assets/{useWorkflowActivate-BwVActuc.js.map → useWorkflowActivate-npf1npdP.js.map} +1 -1
- package/dist/index.html +1 -1
- package/package.json +1 -1
- package/dist/assets/CollectionParameter-DHmcKhO-.js.map +0 -1
- package/dist/assets/MainHeader-CMxbwL4C.js +0 -2
- package/dist/assets/NodeView-C-hQ3_xD.js +0 -3
- package/dist/assets/NodeView-C-hQ3_xD.js.map +0 -1
- package/dist/assets/RunDataTable-B01U16vv.js +0 -2
- package/dist/assets/WorkflowExecutionsPreview-C_EBlNX6.js.map +0 -1
- package/dist/assets/WorkflowExecutionsView-Nm1Oo9El.js +0 -2
- package/dist/assets/WorkflowExecutionsView-Nm1Oo9El.js.map +0 -1
- package/dist/assets/index-Dtri_pSJ.js +0 -341
- package/dist/assets/index-Dtri_pSJ.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
2
|
-
//# sourceMappingURL=ProjectCardBadge.vue_vue_type_script_setup_true_lang-
|
|
1
|
+
import{e8 as h,e9 as c,x as j}from"./index-1OxaEeO3.js";import{G as P,e as l,ag as m,l as u,M as i,O as f,S as g,T as x,R as p}from"./vendor-Dv5OeN6t.js";const T=P({__name:"ProjectCardBadge",props:{resource:{},personalProject:{}},setup(d){const e=d,_=j(),a=l(()=>{var o;if(e.resource.homeProject&&e.personalProject&&e.resource.homeProject.id===e.personalProject.id||!e.resource.homeProject)return _.baseText("generic.ownedByMe");{const{firstName:t,lastName:r,email:s}=h(((o=e.resource.homeProject)==null?void 0:o.name)??"");return t?`${t}${r?" "+r:""}`:s}}),n=l(()=>{var o,t,r;return(o=e.resource.sharedWithProjects)!=null&&o.length&&((t=e.resource.homeProject)==null?void 0:t.type)!==c.Team?"user-friends":((r=e.resource.homeProject)==null?void 0:r.type)===c.Team?"archive":""});return(o,t)=>{const r=m("n8n-icon"),s=m("n8n-badge");return a.value?(u(),i(s,{key:0,class:"mr-xs",theme:"tertiary",bold:"","data-test-id":"card-badge"},{default:f(()=>[g(x(a.value)+" ",1),n.value?(u(),i(r,{key:0,icon:n.value,size:"small",class:"ml-5xs"},null,8,["icon"])):p("",!0)]),_:1})):p("",!0)}}});export{T as _};
|
|
2
|
+
//# sourceMappingURL=ProjectCardBadge.vue_vue_type_script_setup_true_lang-6oVL0vKx.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectCardBadge.vue_vue_type_script_setup_true_lang-
|
|
1
|
+
{"version":3,"file":"ProjectCardBadge.vue_vue_type_script_setup_true_lang-6oVL0vKx.js","sources":["../../src/components/Projects/ProjectCardBadge.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport { useI18n } from '@/composables/useI18n';\nimport { splitName } from '@/utils/projects.utils';\nimport type { ICredentialsResponse, IWorkflowDb } from '@/Interface';\nimport type { Project } from '@/types/projects.types';\nimport { ProjectTypes } from '@/types/projects.types';\n\ntype Props = {\n\tresource: IWorkflowDb | ICredentialsResponse;\n\tpersonalProject: Project | null;\n};\n\nconst props = defineProps<Props>();\n\nconst locale = useI18n();\n\nconst badgeText = computed(() => {\n\tif (\n\t\t(props.resource.homeProject &&\n\t\t\tprops.personalProject &&\n\t\t\tprops.resource.homeProject.id === props.personalProject.id) ||\n\t\t!props.resource.homeProject\n\t) {\n\t\treturn locale.baseText('generic.ownedByMe');\n\t} else {\n\t\tconst { firstName, lastName, email } = splitName(props.resource.homeProject?.name ?? '');\n\t\treturn !firstName ? email : `${firstName}${lastName ? ' ' + lastName : ''}`;\n\t}\n});\n\nconst badgeIcon = computed(() => {\n\tif (\n\t\tprops.resource.sharedWithProjects?.length &&\n\t\tprops.resource.homeProject?.type !== ProjectTypes.Team\n\t) {\n\t\treturn 'user-friends';\n\t} else if (props.resource.homeProject?.type === ProjectTypes.Team) {\n\t\treturn 'archive';\n\t} else {\n\t\treturn '';\n\t}\n});\n</script>\n<template>\n\t<n8n-badge v-if=\"badgeText\" class=\"mr-xs\" theme=\"tertiary\" bold data-test-id=\"card-badge\">\n\t\t{{ badgeText }}\n\t\t<n8n-icon v-if=\"badgeIcon\" :icon=\"badgeIcon\" size=\"small\" class=\"ml-5xs\" />\n\t</n8n-badge>\n</template>\n\n<style lang=\"scss\" module></style>\n"],"names":["props","__props","locale","useI18n","badgeText","computed","firstName","lastName","email","splitName","_a","badgeIcon","_b","ProjectTypes","_c"],"mappings":"+OAaA,MAAMA,EAAQC,EAERC,EAASC,IAETC,EAAYC,EAAS,IAAM,OAChC,GACEL,EAAM,SAAS,aACfA,EAAM,iBACNA,EAAM,SAAS,YAAY,KAAOA,EAAM,gBAAgB,IACzD,CAACA,EAAM,SAAS,YAET,OAAAE,EAAO,SAAS,mBAAmB,EACpC,CACA,KAAA,CAAE,UAAAI,EAAW,SAAAC,EAAU,MAAAC,GAAUC,IAAUC,EAAAV,EAAM,SAAS,cAAf,YAAAU,EAA4B,OAAQ,EAAE,EAChF,OAACJ,EAAoB,GAAGA,CAAS,GAAGC,EAAW,IAAMA,EAAW,EAAE,GAArDC,CACrB,CAAA,CACA,EAEKG,EAAYN,EAAS,IAAM,WAE/B,OAAAK,EAAAV,EAAM,SAAS,qBAAf,MAAAU,EAAmC,UACnCE,EAAAZ,EAAM,SAAS,cAAf,YAAAY,EAA4B,QAASC,EAAa,KAE3C,iBACGC,EAAAd,EAAM,SAAS,cAAf,YAAAc,EAA4B,QAASD,EAAa,KACrD,UAEA,EACR,CACA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{G as W,aI as G,aJ as Z,r as V,e as B,ag as v,l as h,M as H,O as i,U as l,S as b,T as u,u as r,a2 as L,p as m,m as D,I as S,R as O,aH as ue,d as de,D as pe,F as me,a7 as ve,n as je}from"./vendor-Dv5OeN6t.js";import{_ as ee,h as Y}from"./n8n-4UEsHtUL.js";import{e1 as be,x as J,e as fe,a as ge,o as _e,ef as ye,U as xe,u as Pe,V as Te,G as Ve}from"./index-Dtri_pSJ.js";import{P as he}from"./ProjectTabs-Cx2VWeba.js";import"./axios-Mm4CS0gO.js";import"./esprima-next-nhoSXAeq.js";import"./luxon-CLwAIbs0.js";import"./lodash-es-CZ1inz46.js";import"./pinia-sugP77Im.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-BBHtM40w.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-CIxnBJXX.js";import"./vue-i18n-Delvyc9x.js";import"./uuid-SoommWqA.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"./fast-json-stable-stringify-BOfzoJX1.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-BGkPba5A.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";const Ne={class:"pt-l"},Ue=W({__name:"ProjectDeleteDialog",props:G({currentProject:{},projects:{}},{modelValue:{type:Boolean},modelModifiers:{}}),emits:G(["confirmDelete"],["update:modelValue"]),setup(M,{emit:f}){const n=M,o=Z(M,"modelValue"),N=f,j=J(),g=V(null),p=V(null),y=V(""),x=B(()=>p.value==="transfer"?!!g.value:p.value==="wipe"?y.value===j.baseText("projects.settings.delete.question.wipe.placeholder"):!1),U=()=>{var d;x.value&&(p.value==="wipe"&&(g.value=null),N("confirmDelete",(d=g.value)==null?void 0:d.id))};return(d,s)=>{var A;const $=v("n8n-text"),w=v("el-radio"),z=v("n8n-input"),F=v("n8n-input-label"),I=v("N8nButton"),R=v("el-dialog");return h(),H(R,{modelValue:o.value,"onUpdate:modelValue":s[4]||(s[4]=P=>o.value=P),title:r(j).baseText("projects.settings.delete.title",{interpolate:{projectName:((A=n.currentProject)==null?void 0:A.name)??""}}),width:"500"},{footer:i(()=>[l(I,{type:"danger","native-type":"button",disabled:!x.value,"data-test-id":"project-settings-delete-confirm-button",onClick:L(U,["stop","prevent"])},{default:i(()=>[b(u(r(j).baseText("projects.settings.danger.deleteProject")),1)]),_:1},8,["disabled"])]),default:i(()=>[l($,{color:"text-base"},{default:i(()=>[b(u(r(j).baseText("projects.settings.delete.message")),1)]),_:1}),m("div",Ne,[l(w,{"model-value":p.value,label:"transfer",class:"mb-s","onUpdate:modelValue":s[0]||(s[0]=P=>p.value="transfer")},{default:i(()=>[l($,{color:"text-dark"},{default:i(()=>[b(u(r(j).baseText("projects.settings.delete.question.transfer.label")),1)]),_:1})]),_:1},8,["model-value"]),p.value==="transfer"?(h(),D("div",{key:0,class:S(d.$style.operation)},[l($,{color:"text-dark"},{default:i(()=>[b(u(r(j).baseText("projects.settings.delete.question.transfer.title")),1)]),_:1}),l(be,{modelValue:g.value,"onUpdate:modelValue":s[1]||(s[1]=P=>g.value=P),class:"pt-2xs",projects:n.projects,"empty-options-text":r(j).baseText("projects.sharing.noMatchingProjects")},null,8,["modelValue","projects","empty-options-text"])],2)):O("",!0),l(w,{"model-value":p.value,label:"wipe",class:"mb-s","onUpdate:modelValue":s[2]||(s[2]=P=>p.value="wipe")},{default:i(()=>[l($,{color:"text-dark"},{default:i(()=>[b(u(r(j).baseText("projects.settings.delete.question.wipe.label")),1)]),_:1})]),_:1},8,["model-value"]),p.value==="wipe"?(h(),D("div",{key:1,class:S(d.$style.operation)},[l(F,{label:r(j).baseText("projects.settings.delete.question.wipe.title")},{default:i(()=>[l(z,{modelValue:y.value,"onUpdate:modelValue":s[3]||(s[3]=P=>y.value=P),placeholder:r(j).baseText("projects.settings.delete.question.wipe.placeholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"])],2)):O("",!0)])]),_:1},8,["modelValue","title"])}}}),we="_operation_1mn5e_1",ke={operation:we},Se={$style:ke},Me=ee(Ue,[["__cssModules",Se]]),$e={class:"pt-l"},Ce=W({__name:"ProjectRoleUpgradeDialog",props:G({limit:{},planName:{}},{modelValue:{type:Boolean},modelModifiers:{}}),emits:["update:modelValue"],setup(M){const f=M,n=Z(M,"modelValue"),o=fe(),N=J(),j=async()=>{await o.goToUpgrade("rbac","upgrade-rbac"),n.value=!1};return(g,p)=>{const y=v("i18n-t"),x=v("N8nButton"),U=v("el-dialog");return h(),H(U,{modelValue:n.value,"onUpdate:modelValue":p[1]||(p[1]=d=>n.value=d),title:r(N).baseText("projects.settings.role.upgrade.title"),width:"500"},{footer:i(()=>[l(x,{type:"secondary","native-type":"button",onClick:p[0]||(p[0]=d=>n.value=!1)},{default:i(()=>[b(u(r(N).baseText("generic.cancel")),1)]),_:1}),l(x,{type:"primary","native-type":"button",onClick:j},{default:i(()=>[b(u(r(N).baseText("projects.create.limitReached.link")),1)]),_:1})]),default:i(()=>[m("div",$e,[l(y,{keypath:"projects.settings.role.upgrade.message"},{planName:i(()=>[b(u(f.planName),1)]),limit:i(()=>[b(u(r(N).baseText("projects.create.limit",{adjustToNumber:f.limit,interpolate:{num:String(f.limit)}})),1)]),_:1})])]),_:1},8,["modelValue","title"])}}}),De={for:"projectName"},Ie={for:"projectMembers"},Be={key:0,class:"mr-2xs"},Re=m("hr",{class:"mb-2xl"},null,-1),Ae={class:"mb-xs"},Ee=m("br",null,null,-1),qe=W({__name:"ProjectSettings",setup(M){const f=ge(),n=J(),o=_e(),N=ye(),j=xe(),g=Pe(),p=ue(),y=Ve(),x=V(!1),U=V(!1),d=V(!1),s=V({name:"",relations:[]}),$=V({"project:editor":n.baseText("projects.settings.role.editor"),"project:admin":n.baseText("projects.settings.role.admin")}),w=V(null),z=B(()=>f.allUsers.filter(e=>!(s.value.relations||[]).find(a=>a.id===e.id))),F=B(()=>o.teamProjects.filter(e=>e.id!==o.currentProjectId)),I=B(()=>N.processedProjectRoles.map(e=>({...e,name:$.value[e.role]}))),R=B(()=>{var e;return(e=I.value.find(t=>t.licensed))==null?void 0:e.role}),A=e=>{d.value=!0;const t=f.getUserById(e);if(!t)return;const{id:a,firstName:c,lastName:C,email:k}=t,E={id:a,firstName:c,lastName:C,email:k};R.value&&(E.role=R.value),s.value.relations.push(E)},P=(e,t)=>{d.value=!0;const a=s.value.relations.findIndex(c=>c.id===e.id);t==="remove"?s.value.relations.splice(a,1):s.value.relations[a].role=t},te=()=>{d.value=!0},oe=()=>{var e,t;s.value.relations=(e=o.currentProject)!=null&&e.relations?Y(o.currentProject.relations):[],s.value.name=((t=o.currentProject)==null?void 0:t.name)??"",d.value=!1},se=()=>{const e={};return o.currentProject&&(s.value.name!==o.currentProject.name&&(e.name=s.value.name??""),s.value.relations.length!==o.currentProject.relations.length&&(e.memberAdded=s.value.relations.filter(t=>{var a;return!((a=o.currentProject)!=null&&a.relations.find(c=>c.id===t.id))}),e.memberRemoved=o.currentProject.relations.filter(t=>!s.value.relations.find(a=>a.id===t.id))),e.role=s.value.relations.filter(t=>{var c,C;const a=(c=o.currentProject)==null?void 0:c.relations.find(k=>k.id===t.id);return(a==null?void 0:a.role)!==t.role&&!((C=e.memberAdded)!=null&&C.find(k=>k.id===t.id))})),e},ae=e=>{var t;e.name&&y.track("User changed project name",{project_id:(t=o.currentProject)==null?void 0:t.id,name:e.name}),e.memberAdded&&e.memberAdded.forEach(a=>{var c;y.track("User added member to project",{project_id:(c=o.currentProject)==null?void 0:c.id,target_user_id:a.id,role:a.role})}),e.memberRemoved&&e.memberRemoved.forEach(a=>{var c;y.track("User removed member from project",{project_id:(c=o.currentProject)==null?void 0:c.id,target_user_id:a.id})}),e.role&&e.role.forEach(a=>{var c;y.track("User changed member role on project",{project_id:(c=o.currentProject)==null?void 0:c.id,target_user_id:a.id,role:a.role})})},re=async()=>{try{if(d.value&&o.currentProject){const e=se();await o.updateProject({id:o.currentProject.id,name:s.value.name,relations:s.value.relations.map(t=>({userId:t.id,role:t.role}))}),ae(e),d.value=!1,g.showMessage({title:n.baseText("projects.settings.save.successful.title",{interpolate:{projectName:s.value.name??""}}),type:"success"})}}catch(e){g.showError(e,n.baseText("projects.settings.save.error.title"))}},le=async()=>{await o.getAllProjects(),x.value=!0},ne=async e=>{var t;try{if(o.currentProject){const a=((t=o.currentProject)==null?void 0:t.name)??"";await o.deleteProject(o.currentProject.id,e),await p.push({name:Te.HOMEPAGE}),g.showMessage({title:n.baseText("projects.settings.delete.successful.title",{interpolate:{projectName:a}}),type:"success"}),x.value=!0}}catch(a){g.showError(a,n.baseText("projects.settings.delete.error.title"))}},ie=()=>{w.value&&s.value.name===n.baseText("projects.settings.newProjectName")&&(w.value.focus(),w.value.select())};return de(()=>o.currentProject,async()=>{var e,t;s.value.name=((e=o.currentProject)==null?void 0:e.name)??"",s.value.relations=(t=o.currentProject)!=null&&t.relations?Y(o.currentProject.relations):[],await je(),ie()},{immediate:!0}),pe(async()=>{await f.fetchUsers()}),(e,t)=>{var K,Q,X;const a=v("N8nInput"),c=v("N8nIcon"),C=v("N8nUserSelect"),k=v("N8nOption"),E=v("N8nSelect"),q=v("N8nButton"),ce=v("N8nUsersList");return h(),D("div",{class:S(e.$style.projectSettings)},[m("div",{class:S(e.$style.header)},[l(he)],2),m("form",{onSubmit:L(re,["prevent"])},[m("fieldset",null,[m("label",De,u(r(n).baseText("projects.settings.name")),1),l(a,{id:"projectName",ref_key:"nameInput",ref:w,modelValue:s.value.name,"onUpdate:modelValue":t[0]||(t[0]=_=>s.value.name=_),type:"text",name:"name","data-test-id":"project-settings-name-input",onInput:te},null,8,["modelValue"])]),m("fieldset",null,[m("label",Ie,u(r(n).baseText("projects.settings.projectMembers")),1),l(C,{id:"projectMembers",class:"mb-s",size:"large",users:z.value,"current-user-id":(K=r(f).currentUser)==null?void 0:K.id,placeholder:e.$locale.baseText("workflows.shareModal.select.placeholder"),"data-test-id":"project-members-select","onUpdate:modelValue":A},{prefix:i(()=>[l(c,{icon:"search"})]),_:1},8,["users","current-user-id","placeholder"]),l(ce,{actions:[],users:s.value.relations,"current-user-id":(Q=r(f).currentUser)==null?void 0:Q.id,"delete-label":e.$locale.baseText("workflows.shareModal.list.delete")},{actions:i(({user:_})=>[m("div",{class:S(e.$style.buttons)},[l(E,{class:"mr-2xs","model-value":(_==null?void 0:_.role)||I.value[0].role,size:"small","onUpdate:modelValue":T=>P(_,T)},{default:i(()=>[(h(!0),D(me,null,ve(I.value,T=>(h(),H(k,{key:T.role,value:T.role,label:T.name,disabled:!T.licensed},{default:i(()=>[b(u(T.name),1),T.licensed?O("",!0):(h(),D("span",{key:0,class:S(e.$style.upgrade),onClick:t[1]||(t[1]=He=>U.value=!0)}," - "+u(r(n).baseText("generic.upgrade")),3))]),_:2},1032,["value","label","disabled"]))),128))]),_:2},1032,["model-value","onUpdate:modelValue"]),l(q,{type:"tertiary","native-type":"button",square:"",icon:"trash","data-test-id":"project-user-remove",onClick:T=>P(_,"remove")},null,8,["onClick"])],2)]),_:1},8,["users","current-user-id","delete-label"])]),m("fieldset",{class:S(e.$style.buttons)},[m("div",null,[d.value?(h(),D("small",Be,u(r(n).baseText("projects.settings.message.unsavedChanges")),1)):O("",!0),l(q,{disabled:!d.value,type:"secondary","native-type":"button",class:"mr-2xs","data-test-id":"project-settings-cancel-button",onClick:L(oe,["stop","prevent"])},{default:i(()=>[b(u(r(n).baseText("projects.settings.button.cancel")),1)]),_:1},8,["disabled"])]),l(q,{disabled:!d.value,type:"primary","data-test-id":"project-settings-save-button"},{default:i(()=>[b(u(r(n).baseText("projects.settings.button.save")),1)]),_:1},8,["disabled"])],2),m("fieldset",null,[Re,m("h3",Ae,u(r(n).baseText("projects.settings.danger.title")),1),m("small",null,u(r(n).baseText("projects.settings.danger.message")),1),Ee,l(q,{type:"tertiary","native-type":"button",class:"mt-s","data-test-id":"project-settings-delete-button",onClick:L(le,["stop","prevent"])},{default:i(()=>[b(u(r(n).baseText("projects.settings.danger.deleteProject")),1)]),_:1})])],32),l(Me,{modelValue:x.value,"onUpdate:modelValue":t[2]||(t[2]=_=>x.value=_),"current-project":r(o).currentProject,projects:F.value,onConfirmDelete:ne},null,8,["modelValue","current-project","projects"]),l(Ce,{modelValue:U.value,"onUpdate:modelValue":t[3]||(t[3]=_=>U.value=_),limit:r(o).teamProjectsLimit,"plan-name":(X=r(j).currentPlanData)==null?void 0:X.displayName},null,8,["modelValue","limit","plan-name"])],2)}}}),Le="_projectSettings_2vgb7_1",Oe="_header_2vgb7_21",ze="_upgrade_2vgb7_27",Fe="_buttons_2vgb7_31",Ge={projectSettings:Le,header:Oe,upgrade:ze,buttons:Fe},We={$style:Ge},Vt=ee(qe,[["__cssModules",We]]);export{Vt as default};
|
|
2
|
-
//# sourceMappingURL=ProjectSettings-
|
|
1
|
+
import{G as W,aI as G,aJ as Z,r as V,e as B,ag as v,l as h,M as H,O as i,U as l,S as b,T as u,u as r,a2 as L,p as m,m as D,I as S,R as O,aH as ue,d as de,D as pe,F as me,a7 as ve,n as je}from"./vendor-Dv5OeN6t.js";import{_ as ee,h as Y}from"./n8n-4UEsHtUL.js";import{d$ as be,x as J,e as fe,a as ge,o as _e,ed as ye,U as xe,u as Pe,V as Te,G as Ve}from"./index-1OxaEeO3.js";import{P as he}from"./ProjectTabs-5ZO9YR8J.js";import"./axios-Mm4CS0gO.js";import"./esprima-next-nhoSXAeq.js";import"./luxon-CLwAIbs0.js";import"./lodash-es-CZ1inz46.js";import"./pinia-sugP77Im.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-BBHtM40w.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-CIxnBJXX.js";import"./vue-i18n-Delvyc9x.js";import"./uuid-SoommWqA.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"./fast-json-stable-stringify-BOfzoJX1.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-BGkPba5A.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";const Ne={class:"pt-l"},Ue=W({__name:"ProjectDeleteDialog",props:G({currentProject:{},projects:{}},{modelValue:{type:Boolean},modelModifiers:{}}),emits:G(["confirmDelete"],["update:modelValue"]),setup($,{emit:f}){const n=$,o=Z($,"modelValue"),N=f,j=J(),g=V(null),p=V(null),y=V(""),x=B(()=>p.value==="transfer"?!!g.value:p.value==="wipe"?y.value===j.baseText("projects.settings.delete.question.wipe.placeholder"):!1),U=()=>{var d;x.value&&(p.value==="wipe"&&(g.value=null),N("confirmDelete",(d=g.value)==null?void 0:d.id))};return(d,s)=>{var A;const M=v("n8n-text"),w=v("el-radio"),z=v("n8n-input"),F=v("n8n-input-label"),I=v("N8nButton"),R=v("el-dialog");return h(),H(R,{modelValue:o.value,"onUpdate:modelValue":s[4]||(s[4]=P=>o.value=P),title:r(j).baseText("projects.settings.delete.title",{interpolate:{projectName:((A=n.currentProject)==null?void 0:A.name)??""}}),width:"500"},{footer:i(()=>[l(I,{type:"danger","native-type":"button",disabled:!x.value,"data-test-id":"project-settings-delete-confirm-button",onClick:L(U,["stop","prevent"])},{default:i(()=>[b(u(r(j).baseText("projects.settings.danger.deleteProject")),1)]),_:1},8,["disabled"])]),default:i(()=>[l(M,{color:"text-base"},{default:i(()=>[b(u(r(j).baseText("projects.settings.delete.message")),1)]),_:1}),m("div",Ne,[l(w,{"model-value":p.value,label:"transfer",class:"mb-s","onUpdate:modelValue":s[0]||(s[0]=P=>p.value="transfer")},{default:i(()=>[l(M,{color:"text-dark"},{default:i(()=>[b(u(r(j).baseText("projects.settings.delete.question.transfer.label")),1)]),_:1})]),_:1},8,["model-value"]),p.value==="transfer"?(h(),D("div",{key:0,class:S(d.$style.operation)},[l(M,{color:"text-dark"},{default:i(()=>[b(u(r(j).baseText("projects.settings.delete.question.transfer.title")),1)]),_:1}),l(be,{modelValue:g.value,"onUpdate:modelValue":s[1]||(s[1]=P=>g.value=P),class:"pt-2xs",projects:n.projects,"empty-options-text":r(j).baseText("projects.sharing.noMatchingProjects")},null,8,["modelValue","projects","empty-options-text"])],2)):O("",!0),l(w,{"model-value":p.value,label:"wipe",class:"mb-s","onUpdate:modelValue":s[2]||(s[2]=P=>p.value="wipe")},{default:i(()=>[l(M,{color:"text-dark"},{default:i(()=>[b(u(r(j).baseText("projects.settings.delete.question.wipe.label")),1)]),_:1})]),_:1},8,["model-value"]),p.value==="wipe"?(h(),D("div",{key:1,class:S(d.$style.operation)},[l(F,{label:r(j).baseText("projects.settings.delete.question.wipe.title")},{default:i(()=>[l(z,{modelValue:y.value,"onUpdate:modelValue":s[3]||(s[3]=P=>y.value=P),placeholder:r(j).baseText("projects.settings.delete.question.wipe.placeholder")},null,8,["modelValue","placeholder"])]),_:1},8,["label"])],2)):O("",!0)])]),_:1},8,["modelValue","title"])}}}),we="_operation_1mn5e_1",ke={operation:we},Se={$style:ke},$e=ee(Ue,[["__cssModules",Se]]),Me={class:"pt-l"},Ce=W({__name:"ProjectRoleUpgradeDialog",props:G({limit:{},planName:{}},{modelValue:{type:Boolean},modelModifiers:{}}),emits:["update:modelValue"],setup($){const f=$,n=Z($,"modelValue"),o=fe(),N=J(),j=async()=>{await o.goToUpgrade("rbac","upgrade-rbac"),n.value=!1};return(g,p)=>{const y=v("i18n-t"),x=v("N8nButton"),U=v("el-dialog");return h(),H(U,{modelValue:n.value,"onUpdate:modelValue":p[1]||(p[1]=d=>n.value=d),title:r(N).baseText("projects.settings.role.upgrade.title"),width:"500"},{footer:i(()=>[l(x,{type:"secondary","native-type":"button",onClick:p[0]||(p[0]=d=>n.value=!1)},{default:i(()=>[b(u(r(N).baseText("generic.cancel")),1)]),_:1}),l(x,{type:"primary","native-type":"button",onClick:j},{default:i(()=>[b(u(r(N).baseText("projects.create.limitReached.link")),1)]),_:1})]),default:i(()=>[m("div",Me,[l(y,{keypath:"projects.settings.role.upgrade.message"},{planName:i(()=>[b(u(f.planName),1)]),limit:i(()=>[b(u(r(N).baseText("projects.create.limit",{adjustToNumber:f.limit,interpolate:{num:String(f.limit)}})),1)]),_:1})])]),_:1},8,["modelValue","title"])}}}),De={for:"projectName"},Ie={for:"projectMembers"},Be={key:0,class:"mr-2xs"},Re=m("hr",{class:"mb-2xl"},null,-1),Ae={class:"mb-xs"},Ee=m("br",null,null,-1),qe=W({__name:"ProjectSettings",setup($){const f=ge(),n=J(),o=_e(),N=ye(),j=xe(),g=Pe(),p=ue(),y=Ve(),x=V(!1),U=V(!1),d=V(!1),s=V({name:"",relations:[]}),M=V({"project:editor":n.baseText("projects.settings.role.editor"),"project:admin":n.baseText("projects.settings.role.admin")}),w=V(null),z=B(()=>f.allUsers.filter(e=>!(s.value.relations||[]).find(a=>a.id===e.id))),F=B(()=>o.teamProjects.filter(e=>e.id!==o.currentProjectId)),I=B(()=>N.processedProjectRoles.map(e=>({...e,name:M.value[e.role]}))),R=B(()=>{var e;return(e=I.value.find(t=>t.licensed))==null?void 0:e.role}),A=e=>{d.value=!0;const t=f.getUserById(e);if(!t)return;const{id:a,firstName:c,lastName:C,email:k}=t,E={id:a,firstName:c,lastName:C,email:k};R.value&&(E.role=R.value),s.value.relations.push(E)},P=(e,t)=>{d.value=!0;const a=s.value.relations.findIndex(c=>c.id===e.id);t==="remove"?s.value.relations.splice(a,1):s.value.relations[a].role=t},te=()=>{d.value=!0},oe=()=>{var e,t;s.value.relations=(e=o.currentProject)!=null&&e.relations?Y(o.currentProject.relations):[],s.value.name=((t=o.currentProject)==null?void 0:t.name)??"",d.value=!1},se=()=>{const e={};return o.currentProject&&(s.value.name!==o.currentProject.name&&(e.name=s.value.name??""),s.value.relations.length!==o.currentProject.relations.length&&(e.memberAdded=s.value.relations.filter(t=>{var a;return!((a=o.currentProject)!=null&&a.relations.find(c=>c.id===t.id))}),e.memberRemoved=o.currentProject.relations.filter(t=>!s.value.relations.find(a=>a.id===t.id))),e.role=s.value.relations.filter(t=>{var c,C;const a=(c=o.currentProject)==null?void 0:c.relations.find(k=>k.id===t.id);return(a==null?void 0:a.role)!==t.role&&!((C=e.memberAdded)!=null&&C.find(k=>k.id===t.id))})),e},ae=e=>{var t;e.name&&y.track("User changed project name",{project_id:(t=o.currentProject)==null?void 0:t.id,name:e.name}),e.memberAdded&&e.memberAdded.forEach(a=>{var c;y.track("User added member to project",{project_id:(c=o.currentProject)==null?void 0:c.id,target_user_id:a.id,role:a.role})}),e.memberRemoved&&e.memberRemoved.forEach(a=>{var c;y.track("User removed member from project",{project_id:(c=o.currentProject)==null?void 0:c.id,target_user_id:a.id})}),e.role&&e.role.forEach(a=>{var c;y.track("User changed member role on project",{project_id:(c=o.currentProject)==null?void 0:c.id,target_user_id:a.id,role:a.role})})},re=async()=>{try{if(d.value&&o.currentProject){const e=se();await o.updateProject({id:o.currentProject.id,name:s.value.name,relations:s.value.relations.map(t=>({userId:t.id,role:t.role}))}),ae(e),d.value=!1,g.showMessage({title:n.baseText("projects.settings.save.successful.title",{interpolate:{projectName:s.value.name??""}}),type:"success"})}}catch(e){g.showError(e,n.baseText("projects.settings.save.error.title"))}},le=async()=>{await o.getAllProjects(),x.value=!0},ne=async e=>{var t;try{if(o.currentProject){const a=((t=o.currentProject)==null?void 0:t.name)??"";await o.deleteProject(o.currentProject.id,e),await p.push({name:Te.HOMEPAGE}),g.showMessage({title:n.baseText("projects.settings.delete.successful.title",{interpolate:{projectName:a}}),type:"success"}),x.value=!0}}catch(a){g.showError(a,n.baseText("projects.settings.delete.error.title"))}},ie=()=>{w.value&&s.value.name===n.baseText("projects.settings.newProjectName")&&(w.value.focus(),w.value.select())};return de(()=>o.currentProject,async()=>{var e,t;s.value.name=((e=o.currentProject)==null?void 0:e.name)??"",s.value.relations=(t=o.currentProject)!=null&&t.relations?Y(o.currentProject.relations):[],await je(),ie()},{immediate:!0}),pe(async()=>{await f.fetchUsers()}),(e,t)=>{var K,Q,X;const a=v("N8nInput"),c=v("N8nIcon"),C=v("N8nUserSelect"),k=v("N8nOption"),E=v("N8nSelect"),q=v("N8nButton"),ce=v("N8nUsersList");return h(),D("div",{class:S(e.$style.projectSettings)},[m("div",{class:S(e.$style.header)},[l(he)],2),m("form",{onSubmit:L(re,["prevent"])},[m("fieldset",null,[m("label",De,u(r(n).baseText("projects.settings.name")),1),l(a,{id:"projectName",ref_key:"nameInput",ref:w,modelValue:s.value.name,"onUpdate:modelValue":t[0]||(t[0]=_=>s.value.name=_),type:"text",name:"name","data-test-id":"project-settings-name-input",onInput:te},null,8,["modelValue"])]),m("fieldset",null,[m("label",Ie,u(r(n).baseText("projects.settings.projectMembers")),1),l(C,{id:"projectMembers",class:"mb-s",size:"large",users:z.value,"current-user-id":(K=r(f).currentUser)==null?void 0:K.id,placeholder:e.$locale.baseText("workflows.shareModal.select.placeholder"),"data-test-id":"project-members-select","onUpdate:modelValue":A},{prefix:i(()=>[l(c,{icon:"search"})]),_:1},8,["users","current-user-id","placeholder"]),l(ce,{actions:[],users:s.value.relations,"current-user-id":(Q=r(f).currentUser)==null?void 0:Q.id,"delete-label":e.$locale.baseText("workflows.shareModal.list.delete")},{actions:i(({user:_})=>[m("div",{class:S(e.$style.buttons)},[l(E,{class:"mr-2xs","model-value":(_==null?void 0:_.role)||I.value[0].role,size:"small","onUpdate:modelValue":T=>P(_,T)},{default:i(()=>[(h(!0),D(me,null,ve(I.value,T=>(h(),H(k,{key:T.role,value:T.role,label:T.name,disabled:!T.licensed},{default:i(()=>[b(u(T.name),1),T.licensed?O("",!0):(h(),D("span",{key:0,class:S(e.$style.upgrade),onClick:t[1]||(t[1]=He=>U.value=!0)}," - "+u(r(n).baseText("generic.upgrade")),3))]),_:2},1032,["value","label","disabled"]))),128))]),_:2},1032,["model-value","onUpdate:modelValue"]),l(q,{type:"tertiary","native-type":"button",square:"",icon:"trash","data-test-id":"project-user-remove",onClick:T=>P(_,"remove")},null,8,["onClick"])],2)]),_:1},8,["users","current-user-id","delete-label"])]),m("fieldset",{class:S(e.$style.buttons)},[m("div",null,[d.value?(h(),D("small",Be,u(r(n).baseText("projects.settings.message.unsavedChanges")),1)):O("",!0),l(q,{disabled:!d.value,type:"secondary","native-type":"button",class:"mr-2xs","data-test-id":"project-settings-cancel-button",onClick:L(oe,["stop","prevent"])},{default:i(()=>[b(u(r(n).baseText("projects.settings.button.cancel")),1)]),_:1},8,["disabled"])]),l(q,{disabled:!d.value,type:"primary","data-test-id":"project-settings-save-button"},{default:i(()=>[b(u(r(n).baseText("projects.settings.button.save")),1)]),_:1},8,["disabled"])],2),m("fieldset",null,[Re,m("h3",Ae,u(r(n).baseText("projects.settings.danger.title")),1),m("small",null,u(r(n).baseText("projects.settings.danger.message")),1),Ee,l(q,{type:"tertiary","native-type":"button",class:"mt-s","data-test-id":"project-settings-delete-button",onClick:L(le,["stop","prevent"])},{default:i(()=>[b(u(r(n).baseText("projects.settings.danger.deleteProject")),1)]),_:1})])],32),l($e,{modelValue:x.value,"onUpdate:modelValue":t[2]||(t[2]=_=>x.value=_),"current-project":r(o).currentProject,projects:F.value,onConfirmDelete:ne},null,8,["modelValue","current-project","projects"]),l(Ce,{modelValue:U.value,"onUpdate:modelValue":t[3]||(t[3]=_=>U.value=_),limit:r(o).teamProjectsLimit,"plan-name":(X=r(j).currentPlanData)==null?void 0:X.displayName},null,8,["modelValue","limit","plan-name"])],2)}}}),Le="_projectSettings_2vgb7_1",Oe="_header_2vgb7_21",ze="_upgrade_2vgb7_27",Fe="_buttons_2vgb7_31",Ge={projectSettings:Le,header:Oe,upgrade:ze,buttons:Fe},We={$style:Ge},Vt=ee(qe,[["__cssModules",We]]);export{Vt as default};
|
|
2
|
+
//# sourceMappingURL=ProjectSettings-CfcplqBX.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectSettings-CbNlX27g.js","sources":["../../src/components/Projects/ProjectDeleteDialog.vue","../../src/components/Projects/ProjectRoleUpgradeDialog.vue","../../src/components/Projects/ProjectSettings.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { ref, computed } from 'vue';\nimport type { Project, ProjectListItem, ProjectSharingData } from '@/types/projects.types';\nimport ProjectSharing from '@/components/Projects/ProjectSharing.vue';\nimport { useI18n } from '@/composables/useI18n';\n\ntype Props = {\n\tcurrentProject: Project | null;\n\tprojects: ProjectListItem[];\n};\n\nconst props = defineProps<Props>();\nconst visible = defineModel<boolean>();\nconst emit = defineEmits<{\n\t(e: 'confirmDelete', value?: string): void;\n}>();\n\nconst locale = useI18n();\n\nconst selectedProject = ref<ProjectSharingData | null>(null);\nconst operation = ref<'transfer' | 'wipe' | null>(null);\nconst wipeConfirmText = ref('');\nconst isValid = computed(() => {\n\tif (operation.value === 'transfer') {\n\t\treturn !!selectedProject.value;\n\t}\n\tif (operation.value === 'wipe') {\n\t\treturn (\n\t\t\twipeConfirmText.value ===\n\t\t\tlocale.baseText('projects.settings.delete.question.wipe.placeholder')\n\t\t);\n\t}\n\treturn false;\n});\n\nconst onDelete = () => {\n\tif (!isValid.value) {\n\t\treturn;\n\t}\n\n\tif (operation.value === 'wipe') {\n\t\tselectedProject.value = null;\n\t}\n\n\temit('confirmDelete', selectedProject.value?.id);\n};\n</script>\n<template>\n\t<el-dialog\n\t\tv-model=\"visible\"\n\t\t:title=\"\n\t\t\tlocale.baseText('projects.settings.delete.title', {\n\t\t\t\tinterpolate: { projectName: props.currentProject?.name ?? '' },\n\t\t\t})\n\t\t\"\n\t\twidth=\"500\"\n\t>\n\t\t<n8n-text color=\"text-base\">{{ locale.baseText('projects.settings.delete.message') }}</n8n-text>\n\t\t<div class=\"pt-l\">\n\t\t\t<el-radio\n\t\t\t\t:model-value=\"operation\"\n\t\t\t\tlabel=\"transfer\"\n\t\t\t\tclass=\"mb-s\"\n\t\t\t\t@update:model-value=\"operation = 'transfer'\"\n\t\t\t>\n\t\t\t\t<n8n-text color=\"text-dark\">{{\n\t\t\t\t\tlocale.baseText('projects.settings.delete.question.transfer.label')\n\t\t\t\t}}</n8n-text>\n\t\t\t</el-radio>\n\t\t\t<div v-if=\"operation === 'transfer'\" :class=\"$style.operation\">\n\t\t\t\t<n8n-text color=\"text-dark\">{{\n\t\t\t\t\tlocale.baseText('projects.settings.delete.question.transfer.title')\n\t\t\t\t}}</n8n-text>\n\t\t\t\t<ProjectSharing\n\t\t\t\t\tv-model=\"selectedProject\"\n\t\t\t\t\tclass=\"pt-2xs\"\n\t\t\t\t\t:projects=\"props.projects\"\n\t\t\t\t\t:empty-options-text=\"locale.baseText('projects.sharing.noMatchingProjects')\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<el-radio\n\t\t\t\t:model-value=\"operation\"\n\t\t\t\tlabel=\"wipe\"\n\t\t\t\tclass=\"mb-s\"\n\t\t\t\t@update:model-value=\"operation = 'wipe'\"\n\t\t\t>\n\t\t\t\t<n8n-text color=\"text-dark\">{{\n\t\t\t\t\tlocale.baseText('projects.settings.delete.question.wipe.label')\n\t\t\t\t}}</n8n-text>\n\t\t\t</el-radio>\n\t\t\t<div v-if=\"operation === 'wipe'\" :class=\"$style.operation\">\n\t\t\t\t<n8n-input-label :label=\"locale.baseText('projects.settings.delete.question.wipe.title')\">\n\t\t\t\t\t<n8n-input\n\t\t\t\t\t\tv-model=\"wipeConfirmText\"\n\t\t\t\t\t\t:placeholder=\"locale.baseText('projects.settings.delete.question.wipe.placeholder')\"\n\t\t\t\t\t/>\n\t\t\t\t</n8n-input-label>\n\t\t\t</div>\n\t\t</div>\n\t\t<template #footer>\n\t\t\t<N8nButton\n\t\t\t\ttype=\"danger\"\n\t\t\t\tnative-type=\"button\"\n\t\t\t\t:disabled=\"!isValid\"\n\t\t\t\tdata-test-id=\"project-settings-delete-confirm-button\"\n\t\t\t\t@click.stop.prevent=\"onDelete\"\n\t\t\t\t>{{ locale.baseText('projects.settings.danger.deleteProject') }}</N8nButton\n\t\t\t>\n\t\t</template>\n\t</el-dialog>\n</template>\n\n<style lang=\"scss\" module>\n.operation {\n\tpadding: 0 0 var(--spacing-l) var(--spacing-l);\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useI18n } from '@/composables/useI18n';\nimport { useUIStore } from '@/stores/ui.store';\n\ntype Props = {\n\tlimit: number;\n\tplanName?: string;\n};\n\nconst props = defineProps<Props>();\nconst visible = defineModel<boolean>();\nconst uiStore = useUIStore();\nconst locale = useI18n();\n\nconst goToUpgrade = async () => {\n\tawait uiStore.goToUpgrade('rbac', 'upgrade-rbac');\n\tvisible.value = false;\n};\n</script>\n<template>\n\t<el-dialog\n\t\tv-model=\"visible\"\n\t\t:title=\"locale.baseText('projects.settings.role.upgrade.title')\"\n\t\twidth=\"500\"\n\t>\n\t\t<div class=\"pt-l\">\n\t\t\t<i18n-t keypath=\"projects.settings.role.upgrade.message\">\n\t\t\t\t<template #planName>{{ props.planName }}</template>\n\t\t\t\t<template #limit>\n\t\t\t\t\t{{\n\t\t\t\t\t\tlocale.baseText('projects.create.limit', {\n\t\t\t\t\t\t\tadjustToNumber: props.limit,\n\t\t\t\t\t\t\tinterpolate: { num: String(props.limit) },\n\t\t\t\t\t\t})\n\t\t\t\t\t}}\n\t\t\t\t</template>\n\t\t\t</i18n-t>\n\t\t</div>\n\t\t<template #footer>\n\t\t\t<N8nButton type=\"secondary\" native-type=\"button\" @click=\"visible = false\">{{\n\t\t\t\tlocale.baseText('generic.cancel')\n\t\t\t}}</N8nButton>\n\t\t\t<N8nButton type=\"primary\" native-type=\"button\" @click=\"goToUpgrade\">{{\n\t\t\t\tlocale.baseText('projects.create.limitReached.link')\n\t\t\t}}</N8nButton>\n\t\t</template>\n\t</el-dialog>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, ref, watch, onBeforeMount, nextTick } from 'vue';\nimport { useRouter } from 'vue-router';\nimport { deepCopy } from 'n8n-workflow';\nimport { useUsersStore } from '@/stores/users.store';\nimport type { IUser } from '@/Interface';\nimport { useI18n } from '@/composables/useI18n';\nimport { useProjectsStore } from '@/stores/projects.store';\nimport ProjectTabs from '@/components/Projects/ProjectTabs.vue';\nimport type { Project, ProjectRelation } from '@/types/projects.types';\nimport { useToast } from '@/composables/useToast';\nimport { VIEWS } from '@/constants';\nimport ProjectDeleteDialog from '@/components/Projects/ProjectDeleteDialog.vue';\nimport ProjectRoleUpgradeDialog from '@/components/Projects/ProjectRoleUpgradeDialog.vue';\nimport { useRolesStore } from '@/stores/roles.store';\nimport type { ProjectRole } from '@/types/roles.types';\nimport { useCloudPlanStore } from '@/stores/cloudPlan.store';\nimport { useTelemetry } from '@/composables/useTelemetry';\n\ntype FormDataDiff = {\n\tname?: string;\n\trole?: ProjectRelation[];\n\tmemberAdded?: ProjectRelation[];\n\tmemberRemoved?: ProjectRelation[];\n};\n\nconst usersStore = useUsersStore();\nconst locale = useI18n();\nconst projectsStore = useProjectsStore();\nconst rolesStore = useRolesStore();\nconst cloudPlanStore = useCloudPlanStore();\nconst toast = useToast();\nconst router = useRouter();\nconst telemetry = useTelemetry();\nconst dialogVisible = ref(false);\nconst upgradeDialogVisible = ref(false);\n\nconst isDirty = ref(false);\nconst formData = ref<Pick<Project, 'name' | 'relations'>>({\n\tname: '',\n\trelations: [],\n});\nconst projectRoleTranslations = ref<{ [key: string]: string }>({\n\t'project:editor': locale.baseText('projects.settings.role.editor'),\n\t'project:admin': locale.baseText('projects.settings.role.admin'),\n});\nconst nameInput = ref<HTMLInputElement | null>(null);\n\nconst usersList = computed(() =>\n\tusersStore.allUsers.filter((user: IUser) => {\n\t\tconst isAlreadySharedWithUser = (formData.value.relations || []).find(\n\t\t\t(r: ProjectRelation) => r.id === user.id,\n\t\t);\n\n\t\treturn !isAlreadySharedWithUser;\n\t}),\n);\n\nconst projects = computed(() =>\n\tprojectsStore.teamProjects.filter((project) => project.id !== projectsStore.currentProjectId),\n);\nconst projectRoles = computed(() =>\n\trolesStore.processedProjectRoles.map((role) => ({\n\t\t...role,\n\t\tname: projectRoleTranslations.value[role.role],\n\t})),\n);\nconst firstLicensedRole = computed(() => projectRoles.value.find((role) => role.licensed)?.role);\n\nconst onAddMember = (userId: string) => {\n\tisDirty.value = true;\n\tconst user = usersStore.getUserById(userId);\n\tif (!user) return;\n\n\tconst { id, firstName, lastName, email } = user;\n\tconst relation = { id, firstName, lastName, email } as ProjectRelation;\n\n\tif (firstLicensedRole.value) {\n\t\trelation.role = firstLicensedRole.value;\n\t}\n\n\tformData.value.relations.push(relation);\n};\n\nconst onRoleAction = (user: Partial<IUser>, role: string) => {\n\tisDirty.value = true;\n\tconst index = formData.value.relations.findIndex((r: ProjectRelation) => r.id === user.id);\n\tif (role === 'remove') {\n\t\tformData.value.relations.splice(index, 1);\n\t} else {\n\t\tformData.value.relations[index].role = role as ProjectRole;\n\t}\n};\n\nconst onNameInput = () => {\n\tisDirty.value = true;\n};\n\nconst onCancel = () => {\n\tformData.value.relations = projectsStore.currentProject?.relations\n\t\t? deepCopy(projectsStore.currentProject.relations)\n\t\t: [];\n\tformData.value.name = projectsStore.currentProject?.name ?? '';\n\tisDirty.value = false;\n};\n\nconst makeFormDataDiff = (): FormDataDiff => {\n\tconst diff: FormDataDiff = {};\n\tif (!projectsStore.currentProject) {\n\t\treturn diff;\n\t}\n\n\tif (formData.value.name !== projectsStore.currentProject.name) {\n\t\tdiff.name = formData.value.name ?? '';\n\t}\n\n\tif (formData.value.relations.length !== projectsStore.currentProject.relations.length) {\n\t\tdiff.memberAdded = formData.value.relations.filter(\n\t\t\t(r: ProjectRelation) => !projectsStore.currentProject?.relations.find((cr) => cr.id === r.id),\n\t\t);\n\t\tdiff.memberRemoved = projectsStore.currentProject.relations.filter(\n\t\t\t(cr: ProjectRelation) => !formData.value.relations.find((r) => r.id === cr.id),\n\t\t);\n\t}\n\n\tdiff.role = formData.value.relations.filter((r: ProjectRelation) => {\n\t\tconst currentRelation = projectsStore.currentProject?.relations.find((cr) => cr.id === r.id);\n\t\treturn currentRelation?.role !== r.role && !diff.memberAdded?.find((ar) => ar.id === r.id);\n\t});\n\n\treturn diff;\n};\n\nconst sendTelemetry = (diff: FormDataDiff) => {\n\tif (diff.name) {\n\t\ttelemetry.track('User changed project name', {\n\t\t\tproject_id: projectsStore.currentProject?.id,\n\t\t\tname: diff.name,\n\t\t});\n\t}\n\n\tif (diff.memberAdded) {\n\t\tdiff.memberAdded.forEach((r) => {\n\t\t\ttelemetry.track('User added member to project', {\n\t\t\t\tproject_id: projectsStore.currentProject?.id,\n\t\t\t\ttarget_user_id: r.id,\n\t\t\t\trole: r.role,\n\t\t\t});\n\t\t});\n\t}\n\n\tif (diff.memberRemoved) {\n\t\tdiff.memberRemoved.forEach((r) => {\n\t\t\ttelemetry.track('User removed member from project', {\n\t\t\t\tproject_id: projectsStore.currentProject?.id,\n\t\t\t\ttarget_user_id: r.id,\n\t\t\t});\n\t\t});\n\t}\n\n\tif (diff.role) {\n\t\tdiff.role.forEach((r) => {\n\t\t\ttelemetry.track('User changed member role on project', {\n\t\t\t\tproject_id: projectsStore.currentProject?.id,\n\t\t\t\ttarget_user_id: r.id,\n\t\t\t\trole: r.role,\n\t\t\t});\n\t\t});\n\t}\n};\n\nconst onSubmit = async () => {\n\ttry {\n\t\tif (isDirty.value && projectsStore.currentProject) {\n\t\t\tconst diff = makeFormDataDiff();\n\n\t\t\tawait projectsStore.updateProject({\n\t\t\t\tid: projectsStore.currentProject.id,\n\t\t\t\tname: formData.value.name,\n\t\t\t\trelations: formData.value.relations.map((r: ProjectRelation) => ({\n\t\t\t\t\tuserId: r.id,\n\t\t\t\t\trole: r.role,\n\t\t\t\t})),\n\t\t\t});\n\t\t\tsendTelemetry(diff);\n\t\t\tisDirty.value = false;\n\t\t\ttoast.showMessage({\n\t\t\t\ttitle: locale.baseText('projects.settings.save.successful.title', {\n\t\t\t\t\tinterpolate: { projectName: formData.value.name ?? '' },\n\t\t\t\t}),\n\t\t\t\ttype: 'success',\n\t\t\t});\n\t\t}\n\t} catch (error) {\n\t\ttoast.showError(error, locale.baseText('projects.settings.save.error.title'));\n\t}\n};\n\nconst onDelete = async () => {\n\tawait projectsStore.getAllProjects();\n\tdialogVisible.value = true;\n};\n\nconst onConfirmDelete = async (transferId?: string) => {\n\ttry {\n\t\tif (projectsStore.currentProject) {\n\t\t\tconst projectName = projectsStore.currentProject?.name ?? '';\n\t\t\tawait projectsStore.deleteProject(projectsStore.currentProject.id, transferId);\n\t\t\tawait router.push({ name: VIEWS.HOMEPAGE });\n\t\t\ttoast.showMessage({\n\t\t\t\ttitle: locale.baseText('projects.settings.delete.successful.title', {\n\t\t\t\t\tinterpolate: { projectName },\n\t\t\t\t}),\n\t\t\t\ttype: 'success',\n\t\t\t});\n\t\t\tdialogVisible.value = true;\n\t\t}\n\t} catch (error) {\n\t\ttoast.showError(error, locale.baseText('projects.settings.delete.error.title'));\n\t}\n};\n\nconst selectProjectNameIfMatchesDefault = () => {\n\tif (\n\t\tnameInput.value &&\n\t\tformData.value.name === locale.baseText('projects.settings.newProjectName')\n\t) {\n\t\tnameInput.value.focus();\n\t\tnameInput.value.select();\n\t}\n};\n\nwatch(\n\t() => projectsStore.currentProject,\n\tasync () => {\n\t\tformData.value.name = projectsStore.currentProject?.name ?? '';\n\t\tformData.value.relations = projectsStore.currentProject?.relations\n\t\t\t? deepCopy(projectsStore.currentProject.relations)\n\t\t\t: [];\n\t\tawait nextTick();\n\t\tselectProjectNameIfMatchesDefault();\n\t},\n\t{ immediate: true },\n);\n\nonBeforeMount(async () => {\n\tawait usersStore.fetchUsers();\n});\n</script>\n\n<template>\n\t<div :class=\"$style.projectSettings\">\n\t\t<div :class=\"$style.header\">\n\t\t\t<ProjectTabs />\n\t\t</div>\n\t\t<form @submit.prevent=\"onSubmit\">\n\t\t\t<fieldset>\n\t\t\t\t<label for=\"projectName\">{{ locale.baseText('projects.settings.name') }}</label>\n\t\t\t\t<N8nInput\n\t\t\t\t\tid=\"projectName\"\n\t\t\t\t\tref=\"nameInput\"\n\t\t\t\t\tv-model=\"formData.name\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tname=\"name\"\n\t\t\t\t\tdata-test-id=\"project-settings-name-input\"\n\t\t\t\t\t@input=\"onNameInput\"\n\t\t\t\t/>\n\t\t\t</fieldset>\n\t\t\t<fieldset>\n\t\t\t\t<label for=\"projectMembers\">{{\n\t\t\t\t\tlocale.baseText('projects.settings.projectMembers')\n\t\t\t\t}}</label>\n\t\t\t\t<N8nUserSelect\n\t\t\t\t\tid=\"projectMembers\"\n\t\t\t\t\tclass=\"mb-s\"\n\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t:users=\"usersList\"\n\t\t\t\t\t:current-user-id=\"usersStore.currentUser?.id\"\n\t\t\t\t\t:placeholder=\"$locale.baseText('workflows.shareModal.select.placeholder')\"\n\t\t\t\t\tdata-test-id=\"project-members-select\"\n\t\t\t\t\t@update:model-value=\"onAddMember\"\n\t\t\t\t>\n\t\t\t\t\t<template #prefix>\n\t\t\t\t\t\t<N8nIcon icon=\"search\" />\n\t\t\t\t\t</template>\n\t\t\t\t</N8nUserSelect>\n\t\t\t\t<N8nUsersList\n\t\t\t\t\t:actions=\"[]\"\n\t\t\t\t\t:users=\"formData.relations\"\n\t\t\t\t\t:current-user-id=\"usersStore.currentUser?.id\"\n\t\t\t\t\t:delete-label=\"$locale.baseText('workflows.shareModal.list.delete')\"\n\t\t\t\t>\n\t\t\t\t\t<template #actions=\"{ user }\">\n\t\t\t\t\t\t<div :class=\"$style.buttons\">\n\t\t\t\t\t\t\t<N8nSelect\n\t\t\t\t\t\t\t\tclass=\"mr-2xs\"\n\t\t\t\t\t\t\t\t:model-value=\"user?.role || projectRoles[0].role\"\n\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t@update:model-value=\"onRoleAction(user, $event)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<N8nOption\n\t\t\t\t\t\t\t\t\tv-for=\"role in projectRoles\"\n\t\t\t\t\t\t\t\t\t:key=\"role.role\"\n\t\t\t\t\t\t\t\t\t:value=\"role.role\"\n\t\t\t\t\t\t\t\t\t:label=\"role.name\"\n\t\t\t\t\t\t\t\t\t:disabled=\"!role.licensed\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{{ role.name\n\t\t\t\t\t\t\t\t\t}}<span\n\t\t\t\t\t\t\t\t\t\tv-if=\"!role.licensed\"\n\t\t\t\t\t\t\t\t\t\t:class=\"$style.upgrade\"\n\t\t\t\t\t\t\t\t\t\t@click=\"upgradeDialogVisible = true\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t - {{ locale.baseText('generic.upgrade') }}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</N8nOption>\n\t\t\t\t\t\t\t</N8nSelect>\n\t\t\t\t\t\t\t<N8nButton\n\t\t\t\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t\t\t\tnative-type=\"button\"\n\t\t\t\t\t\t\t\tsquare\n\t\t\t\t\t\t\t\ticon=\"trash\"\n\t\t\t\t\t\t\t\tdata-test-id=\"project-user-remove\"\n\t\t\t\t\t\t\t\t@click=\"onRoleAction(user, 'remove')\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</template>\n\t\t\t\t</N8nUsersList>\n\t\t\t</fieldset>\n\t\t\t<fieldset :class=\"$style.buttons\">\n\t\t\t\t<div>\n\t\t\t\t\t<small v-if=\"isDirty\" class=\"mr-2xs\">{{\n\t\t\t\t\t\tlocale.baseText('projects.settings.message.unsavedChanges')\n\t\t\t\t\t}}</small>\n\t\t\t\t\t<N8nButton\n\t\t\t\t\t\t:disabled=\"!isDirty\"\n\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\tnative-type=\"button\"\n\t\t\t\t\t\tclass=\"mr-2xs\"\n\t\t\t\t\t\tdata-test-id=\"project-settings-cancel-button\"\n\t\t\t\t\t\t@click.stop.prevent=\"onCancel\"\n\t\t\t\t\t\t>{{ locale.baseText('projects.settings.button.cancel') }}</N8nButton\n\t\t\t\t\t>\n\t\t\t\t</div>\n\t\t\t\t<N8nButton\n\t\t\t\t\t:disabled=\"!isDirty\"\n\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\tdata-test-id=\"project-settings-save-button\"\n\t\t\t\t\t>{{ locale.baseText('projects.settings.button.save') }}</N8nButton\n\t\t\t\t>\n\t\t\t</fieldset>\n\t\t\t<fieldset>\n\t\t\t\t<hr class=\"mb-2xl\" />\n\t\t\t\t<h3 class=\"mb-xs\">{{ locale.baseText('projects.settings.danger.title') }}</h3>\n\t\t\t\t<small>{{ locale.baseText('projects.settings.danger.message') }}</small>\n\t\t\t\t<br />\n\t\t\t\t<N8nButton\n\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\tnative-type=\"button\"\n\t\t\t\t\tclass=\"mt-s\"\n\t\t\t\t\tdata-test-id=\"project-settings-delete-button\"\n\t\t\t\t\t@click.stop.prevent=\"onDelete\"\n\t\t\t\t\t>{{ locale.baseText('projects.settings.danger.deleteProject') }}</N8nButton\n\t\t\t\t>\n\t\t\t</fieldset>\n\t\t</form>\n\t\t<ProjectDeleteDialog\n\t\t\tv-model=\"dialogVisible\"\n\t\t\t:current-project=\"projectsStore.currentProject\"\n\t\t\t:projects=\"projects\"\n\t\t\t@confirm-delete=\"onConfirmDelete\"\n\t\t/>\n\t\t<ProjectRoleUpgradeDialog\n\t\t\tv-model=\"upgradeDialogVisible\"\n\t\t\t:limit=\"projectsStore.teamProjectsLimit\"\n\t\t\t:plan-name=\"cloudPlanStore.currentPlanData?.displayName\"\n\t\t/>\n\t</div>\n</template>\n\n<style lang=\"scss\" module>\n.projectSettings {\n\tdisplay: grid;\n\twidth: 100%;\n\tjustify-items: center;\n\tgrid-auto-rows: max-content;\n\n\tform {\n\t\twidth: 100%;\n\t\tmax-width: 1280px;\n\t\tpadding: 0 var(--spacing-2xl);\n\n\t\tfieldset {\n\t\t\tpadding-bottom: var(--spacing-2xl);\n\n\t\t\tlabel {\n\t\t\t\tdisplay: block;\n\t\t\t\tmargin-bottom: var(--spacing-xs);\n\t\t\t\tfont-size: var(--font-size-xl);\n\t\t\t}\n\t\t}\n\t}\n}\n\n.header {\n\twidth: 100%;\n\tmax-width: 1280px;\n\tpadding: var(--spacing-l) var(--spacing-2xl) 0;\n}\n\n.upgrade {\n\tcursor: pointer;\n}\n\n.buttons {\n\tdisplay: flex;\n\tjustify-content: flex-end;\n\talign-items: center;\n}\n</style>\n"],"names":["props","__props","visible","_useModel","emit","__emit","locale","useI18n","selectedProject","ref","operation","wipeConfirmText","isValid","computed","onDelete","_a","uiStore","useUIStore","goToUpgrade","usersStore","useUsersStore","projectsStore","useProjectsStore","rolesStore","useRolesStore","cloudPlanStore","useCloudPlanStore","toast","useToast","router","useRouter","telemetry","useTelemetry","dialogVisible","upgradeDialogVisible","isDirty","formData","projectRoleTranslations","nameInput","usersList","user","r","projects","project","projectRoles","role","firstLicensedRole","onAddMember","userId","id","firstName","lastName","email","relation","onRoleAction","index","onNameInput","onCancel","deepCopy","_b","makeFormDataDiff","diff","cr","currentRelation","ar","sendTelemetry","onSubmit","error","onConfirmDelete","transferId","projectName","VIEWS","selectProjectNameIfMatchesDefault","watch","nextTick","onBeforeMount"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ProjectSettings-CfcplqBX.js","sources":["../../src/components/Projects/ProjectDeleteDialog.vue","../../src/components/Projects/ProjectRoleUpgradeDialog.vue","../../src/components/Projects/ProjectSettings.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { ref, computed } from 'vue';\nimport type { Project, ProjectListItem, ProjectSharingData } from '@/types/projects.types';\nimport ProjectSharing from '@/components/Projects/ProjectSharing.vue';\nimport { useI18n } from '@/composables/useI18n';\n\ntype Props = {\n\tcurrentProject: Project | null;\n\tprojects: ProjectListItem[];\n};\n\nconst props = defineProps<Props>();\nconst visible = defineModel<boolean>();\nconst emit = defineEmits<{\n\t(e: 'confirmDelete', value?: string): void;\n}>();\n\nconst locale = useI18n();\n\nconst selectedProject = ref<ProjectSharingData | null>(null);\nconst operation = ref<'transfer' | 'wipe' | null>(null);\nconst wipeConfirmText = ref('');\nconst isValid = computed(() => {\n\tif (operation.value === 'transfer') {\n\t\treturn !!selectedProject.value;\n\t}\n\tif (operation.value === 'wipe') {\n\t\treturn (\n\t\t\twipeConfirmText.value ===\n\t\t\tlocale.baseText('projects.settings.delete.question.wipe.placeholder')\n\t\t);\n\t}\n\treturn false;\n});\n\nconst onDelete = () => {\n\tif (!isValid.value) {\n\t\treturn;\n\t}\n\n\tif (operation.value === 'wipe') {\n\t\tselectedProject.value = null;\n\t}\n\n\temit('confirmDelete', selectedProject.value?.id);\n};\n</script>\n<template>\n\t<el-dialog\n\t\tv-model=\"visible\"\n\t\t:title=\"\n\t\t\tlocale.baseText('projects.settings.delete.title', {\n\t\t\t\tinterpolate: { projectName: props.currentProject?.name ?? '' },\n\t\t\t})\n\t\t\"\n\t\twidth=\"500\"\n\t>\n\t\t<n8n-text color=\"text-base\">{{ locale.baseText('projects.settings.delete.message') }}</n8n-text>\n\t\t<div class=\"pt-l\">\n\t\t\t<el-radio\n\t\t\t\t:model-value=\"operation\"\n\t\t\t\tlabel=\"transfer\"\n\t\t\t\tclass=\"mb-s\"\n\t\t\t\t@update:model-value=\"operation = 'transfer'\"\n\t\t\t>\n\t\t\t\t<n8n-text color=\"text-dark\">{{\n\t\t\t\t\tlocale.baseText('projects.settings.delete.question.transfer.label')\n\t\t\t\t}}</n8n-text>\n\t\t\t</el-radio>\n\t\t\t<div v-if=\"operation === 'transfer'\" :class=\"$style.operation\">\n\t\t\t\t<n8n-text color=\"text-dark\">{{\n\t\t\t\t\tlocale.baseText('projects.settings.delete.question.transfer.title')\n\t\t\t\t}}</n8n-text>\n\t\t\t\t<ProjectSharing\n\t\t\t\t\tv-model=\"selectedProject\"\n\t\t\t\t\tclass=\"pt-2xs\"\n\t\t\t\t\t:projects=\"props.projects\"\n\t\t\t\t\t:empty-options-text=\"locale.baseText('projects.sharing.noMatchingProjects')\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<el-radio\n\t\t\t\t:model-value=\"operation\"\n\t\t\t\tlabel=\"wipe\"\n\t\t\t\tclass=\"mb-s\"\n\t\t\t\t@update:model-value=\"operation = 'wipe'\"\n\t\t\t>\n\t\t\t\t<n8n-text color=\"text-dark\">{{\n\t\t\t\t\tlocale.baseText('projects.settings.delete.question.wipe.label')\n\t\t\t\t}}</n8n-text>\n\t\t\t</el-radio>\n\t\t\t<div v-if=\"operation === 'wipe'\" :class=\"$style.operation\">\n\t\t\t\t<n8n-input-label :label=\"locale.baseText('projects.settings.delete.question.wipe.title')\">\n\t\t\t\t\t<n8n-input\n\t\t\t\t\t\tv-model=\"wipeConfirmText\"\n\t\t\t\t\t\t:placeholder=\"locale.baseText('projects.settings.delete.question.wipe.placeholder')\"\n\t\t\t\t\t/>\n\t\t\t\t</n8n-input-label>\n\t\t\t</div>\n\t\t</div>\n\t\t<template #footer>\n\t\t\t<N8nButton\n\t\t\t\ttype=\"danger\"\n\t\t\t\tnative-type=\"button\"\n\t\t\t\t:disabled=\"!isValid\"\n\t\t\t\tdata-test-id=\"project-settings-delete-confirm-button\"\n\t\t\t\t@click.stop.prevent=\"onDelete\"\n\t\t\t\t>{{ locale.baseText('projects.settings.danger.deleteProject') }}</N8nButton\n\t\t\t>\n\t\t</template>\n\t</el-dialog>\n</template>\n\n<style lang=\"scss\" module>\n.operation {\n\tpadding: 0 0 var(--spacing-l) var(--spacing-l);\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { useI18n } from '@/composables/useI18n';\nimport { useUIStore } from '@/stores/ui.store';\n\ntype Props = {\n\tlimit: number;\n\tplanName?: string;\n};\n\nconst props = defineProps<Props>();\nconst visible = defineModel<boolean>();\nconst uiStore = useUIStore();\nconst locale = useI18n();\n\nconst goToUpgrade = async () => {\n\tawait uiStore.goToUpgrade('rbac', 'upgrade-rbac');\n\tvisible.value = false;\n};\n</script>\n<template>\n\t<el-dialog\n\t\tv-model=\"visible\"\n\t\t:title=\"locale.baseText('projects.settings.role.upgrade.title')\"\n\t\twidth=\"500\"\n\t>\n\t\t<div class=\"pt-l\">\n\t\t\t<i18n-t keypath=\"projects.settings.role.upgrade.message\">\n\t\t\t\t<template #planName>{{ props.planName }}</template>\n\t\t\t\t<template #limit>\n\t\t\t\t\t{{\n\t\t\t\t\t\tlocale.baseText('projects.create.limit', {\n\t\t\t\t\t\t\tadjustToNumber: props.limit,\n\t\t\t\t\t\t\tinterpolate: { num: String(props.limit) },\n\t\t\t\t\t\t})\n\t\t\t\t\t}}\n\t\t\t\t</template>\n\t\t\t</i18n-t>\n\t\t</div>\n\t\t<template #footer>\n\t\t\t<N8nButton type=\"secondary\" native-type=\"button\" @click=\"visible = false\">{{\n\t\t\t\tlocale.baseText('generic.cancel')\n\t\t\t}}</N8nButton>\n\t\t\t<N8nButton type=\"primary\" native-type=\"button\" @click=\"goToUpgrade\">{{\n\t\t\t\tlocale.baseText('projects.create.limitReached.link')\n\t\t\t}}</N8nButton>\n\t\t</template>\n\t</el-dialog>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, ref, watch, onBeforeMount, nextTick } from 'vue';\nimport { useRouter } from 'vue-router';\nimport { deepCopy } from 'n8n-workflow';\nimport { useUsersStore } from '@/stores/users.store';\nimport type { IUser } from '@/Interface';\nimport { useI18n } from '@/composables/useI18n';\nimport { useProjectsStore } from '@/stores/projects.store';\nimport ProjectTabs from '@/components/Projects/ProjectTabs.vue';\nimport type { Project, ProjectRelation } from '@/types/projects.types';\nimport { useToast } from '@/composables/useToast';\nimport { VIEWS } from '@/constants';\nimport ProjectDeleteDialog from '@/components/Projects/ProjectDeleteDialog.vue';\nimport ProjectRoleUpgradeDialog from '@/components/Projects/ProjectRoleUpgradeDialog.vue';\nimport { useRolesStore } from '@/stores/roles.store';\nimport type { ProjectRole } from '@/types/roles.types';\nimport { useCloudPlanStore } from '@/stores/cloudPlan.store';\nimport { useTelemetry } from '@/composables/useTelemetry';\n\ntype FormDataDiff = {\n\tname?: string;\n\trole?: ProjectRelation[];\n\tmemberAdded?: ProjectRelation[];\n\tmemberRemoved?: ProjectRelation[];\n};\n\nconst usersStore = useUsersStore();\nconst locale = useI18n();\nconst projectsStore = useProjectsStore();\nconst rolesStore = useRolesStore();\nconst cloudPlanStore = useCloudPlanStore();\nconst toast = useToast();\nconst router = useRouter();\nconst telemetry = useTelemetry();\nconst dialogVisible = ref(false);\nconst upgradeDialogVisible = ref(false);\n\nconst isDirty = ref(false);\nconst formData = ref<Pick<Project, 'name' | 'relations'>>({\n\tname: '',\n\trelations: [],\n});\nconst projectRoleTranslations = ref<{ [key: string]: string }>({\n\t'project:editor': locale.baseText('projects.settings.role.editor'),\n\t'project:admin': locale.baseText('projects.settings.role.admin'),\n});\nconst nameInput = ref<HTMLInputElement | null>(null);\n\nconst usersList = computed(() =>\n\tusersStore.allUsers.filter((user: IUser) => {\n\t\tconst isAlreadySharedWithUser = (formData.value.relations || []).find(\n\t\t\t(r: ProjectRelation) => r.id === user.id,\n\t\t);\n\n\t\treturn !isAlreadySharedWithUser;\n\t}),\n);\n\nconst projects = computed(() =>\n\tprojectsStore.teamProjects.filter((project) => project.id !== projectsStore.currentProjectId),\n);\nconst projectRoles = computed(() =>\n\trolesStore.processedProjectRoles.map((role) => ({\n\t\t...role,\n\t\tname: projectRoleTranslations.value[role.role],\n\t})),\n);\nconst firstLicensedRole = computed(() => projectRoles.value.find((role) => role.licensed)?.role);\n\nconst onAddMember = (userId: string) => {\n\tisDirty.value = true;\n\tconst user = usersStore.getUserById(userId);\n\tif (!user) return;\n\n\tconst { id, firstName, lastName, email } = user;\n\tconst relation = { id, firstName, lastName, email } as ProjectRelation;\n\n\tif (firstLicensedRole.value) {\n\t\trelation.role = firstLicensedRole.value;\n\t}\n\n\tformData.value.relations.push(relation);\n};\n\nconst onRoleAction = (user: Partial<IUser>, role: string) => {\n\tisDirty.value = true;\n\tconst index = formData.value.relations.findIndex((r: ProjectRelation) => r.id === user.id);\n\tif (role === 'remove') {\n\t\tformData.value.relations.splice(index, 1);\n\t} else {\n\t\tformData.value.relations[index].role = role as ProjectRole;\n\t}\n};\n\nconst onNameInput = () => {\n\tisDirty.value = true;\n};\n\nconst onCancel = () => {\n\tformData.value.relations = projectsStore.currentProject?.relations\n\t\t? deepCopy(projectsStore.currentProject.relations)\n\t\t: [];\n\tformData.value.name = projectsStore.currentProject?.name ?? '';\n\tisDirty.value = false;\n};\n\nconst makeFormDataDiff = (): FormDataDiff => {\n\tconst diff: FormDataDiff = {};\n\tif (!projectsStore.currentProject) {\n\t\treturn diff;\n\t}\n\n\tif (formData.value.name !== projectsStore.currentProject.name) {\n\t\tdiff.name = formData.value.name ?? '';\n\t}\n\n\tif (formData.value.relations.length !== projectsStore.currentProject.relations.length) {\n\t\tdiff.memberAdded = formData.value.relations.filter(\n\t\t\t(r: ProjectRelation) => !projectsStore.currentProject?.relations.find((cr) => cr.id === r.id),\n\t\t);\n\t\tdiff.memberRemoved = projectsStore.currentProject.relations.filter(\n\t\t\t(cr: ProjectRelation) => !formData.value.relations.find((r) => r.id === cr.id),\n\t\t);\n\t}\n\n\tdiff.role = formData.value.relations.filter((r: ProjectRelation) => {\n\t\tconst currentRelation = projectsStore.currentProject?.relations.find((cr) => cr.id === r.id);\n\t\treturn currentRelation?.role !== r.role && !diff.memberAdded?.find((ar) => ar.id === r.id);\n\t});\n\n\treturn diff;\n};\n\nconst sendTelemetry = (diff: FormDataDiff) => {\n\tif (diff.name) {\n\t\ttelemetry.track('User changed project name', {\n\t\t\tproject_id: projectsStore.currentProject?.id,\n\t\t\tname: diff.name,\n\t\t});\n\t}\n\n\tif (diff.memberAdded) {\n\t\tdiff.memberAdded.forEach((r) => {\n\t\t\ttelemetry.track('User added member to project', {\n\t\t\t\tproject_id: projectsStore.currentProject?.id,\n\t\t\t\ttarget_user_id: r.id,\n\t\t\t\trole: r.role,\n\t\t\t});\n\t\t});\n\t}\n\n\tif (diff.memberRemoved) {\n\t\tdiff.memberRemoved.forEach((r) => {\n\t\t\ttelemetry.track('User removed member from project', {\n\t\t\t\tproject_id: projectsStore.currentProject?.id,\n\t\t\t\ttarget_user_id: r.id,\n\t\t\t});\n\t\t});\n\t}\n\n\tif (diff.role) {\n\t\tdiff.role.forEach((r) => {\n\t\t\ttelemetry.track('User changed member role on project', {\n\t\t\t\tproject_id: projectsStore.currentProject?.id,\n\t\t\t\ttarget_user_id: r.id,\n\t\t\t\trole: r.role,\n\t\t\t});\n\t\t});\n\t}\n};\n\nconst onSubmit = async () => {\n\ttry {\n\t\tif (isDirty.value && projectsStore.currentProject) {\n\t\t\tconst diff = makeFormDataDiff();\n\n\t\t\tawait projectsStore.updateProject({\n\t\t\t\tid: projectsStore.currentProject.id,\n\t\t\t\tname: formData.value.name,\n\t\t\t\trelations: formData.value.relations.map((r: ProjectRelation) => ({\n\t\t\t\t\tuserId: r.id,\n\t\t\t\t\trole: r.role,\n\t\t\t\t})),\n\t\t\t});\n\t\t\tsendTelemetry(diff);\n\t\t\tisDirty.value = false;\n\t\t\ttoast.showMessage({\n\t\t\t\ttitle: locale.baseText('projects.settings.save.successful.title', {\n\t\t\t\t\tinterpolate: { projectName: formData.value.name ?? '' },\n\t\t\t\t}),\n\t\t\t\ttype: 'success',\n\t\t\t});\n\t\t}\n\t} catch (error) {\n\t\ttoast.showError(error, locale.baseText('projects.settings.save.error.title'));\n\t}\n};\n\nconst onDelete = async () => {\n\tawait projectsStore.getAllProjects();\n\tdialogVisible.value = true;\n};\n\nconst onConfirmDelete = async (transferId?: string) => {\n\ttry {\n\t\tif (projectsStore.currentProject) {\n\t\t\tconst projectName = projectsStore.currentProject?.name ?? '';\n\t\t\tawait projectsStore.deleteProject(projectsStore.currentProject.id, transferId);\n\t\t\tawait router.push({ name: VIEWS.HOMEPAGE });\n\t\t\ttoast.showMessage({\n\t\t\t\ttitle: locale.baseText('projects.settings.delete.successful.title', {\n\t\t\t\t\tinterpolate: { projectName },\n\t\t\t\t}),\n\t\t\t\ttype: 'success',\n\t\t\t});\n\t\t\tdialogVisible.value = true;\n\t\t}\n\t} catch (error) {\n\t\ttoast.showError(error, locale.baseText('projects.settings.delete.error.title'));\n\t}\n};\n\nconst selectProjectNameIfMatchesDefault = () => {\n\tif (\n\t\tnameInput.value &&\n\t\tformData.value.name === locale.baseText('projects.settings.newProjectName')\n\t) {\n\t\tnameInput.value.focus();\n\t\tnameInput.value.select();\n\t}\n};\n\nwatch(\n\t() => projectsStore.currentProject,\n\tasync () => {\n\t\tformData.value.name = projectsStore.currentProject?.name ?? '';\n\t\tformData.value.relations = projectsStore.currentProject?.relations\n\t\t\t? deepCopy(projectsStore.currentProject.relations)\n\t\t\t: [];\n\t\tawait nextTick();\n\t\tselectProjectNameIfMatchesDefault();\n\t},\n\t{ immediate: true },\n);\n\nonBeforeMount(async () => {\n\tawait usersStore.fetchUsers();\n});\n</script>\n\n<template>\n\t<div :class=\"$style.projectSettings\">\n\t\t<div :class=\"$style.header\">\n\t\t\t<ProjectTabs />\n\t\t</div>\n\t\t<form @submit.prevent=\"onSubmit\">\n\t\t\t<fieldset>\n\t\t\t\t<label for=\"projectName\">{{ locale.baseText('projects.settings.name') }}</label>\n\t\t\t\t<N8nInput\n\t\t\t\t\tid=\"projectName\"\n\t\t\t\t\tref=\"nameInput\"\n\t\t\t\t\tv-model=\"formData.name\"\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tname=\"name\"\n\t\t\t\t\tdata-test-id=\"project-settings-name-input\"\n\t\t\t\t\t@input=\"onNameInput\"\n\t\t\t\t/>\n\t\t\t</fieldset>\n\t\t\t<fieldset>\n\t\t\t\t<label for=\"projectMembers\">{{\n\t\t\t\t\tlocale.baseText('projects.settings.projectMembers')\n\t\t\t\t}}</label>\n\t\t\t\t<N8nUserSelect\n\t\t\t\t\tid=\"projectMembers\"\n\t\t\t\t\tclass=\"mb-s\"\n\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t:users=\"usersList\"\n\t\t\t\t\t:current-user-id=\"usersStore.currentUser?.id\"\n\t\t\t\t\t:placeholder=\"$locale.baseText('workflows.shareModal.select.placeholder')\"\n\t\t\t\t\tdata-test-id=\"project-members-select\"\n\t\t\t\t\t@update:model-value=\"onAddMember\"\n\t\t\t\t>\n\t\t\t\t\t<template #prefix>\n\t\t\t\t\t\t<N8nIcon icon=\"search\" />\n\t\t\t\t\t</template>\n\t\t\t\t</N8nUserSelect>\n\t\t\t\t<N8nUsersList\n\t\t\t\t\t:actions=\"[]\"\n\t\t\t\t\t:users=\"formData.relations\"\n\t\t\t\t\t:current-user-id=\"usersStore.currentUser?.id\"\n\t\t\t\t\t:delete-label=\"$locale.baseText('workflows.shareModal.list.delete')\"\n\t\t\t\t>\n\t\t\t\t\t<template #actions=\"{ user }\">\n\t\t\t\t\t\t<div :class=\"$style.buttons\">\n\t\t\t\t\t\t\t<N8nSelect\n\t\t\t\t\t\t\t\tclass=\"mr-2xs\"\n\t\t\t\t\t\t\t\t:model-value=\"user?.role || projectRoles[0].role\"\n\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t@update:model-value=\"onRoleAction(user, $event)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<N8nOption\n\t\t\t\t\t\t\t\t\tv-for=\"role in projectRoles\"\n\t\t\t\t\t\t\t\t\t:key=\"role.role\"\n\t\t\t\t\t\t\t\t\t:value=\"role.role\"\n\t\t\t\t\t\t\t\t\t:label=\"role.name\"\n\t\t\t\t\t\t\t\t\t:disabled=\"!role.licensed\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{{ role.name\n\t\t\t\t\t\t\t\t\t}}<span\n\t\t\t\t\t\t\t\t\t\tv-if=\"!role.licensed\"\n\t\t\t\t\t\t\t\t\t\t:class=\"$style.upgrade\"\n\t\t\t\t\t\t\t\t\t\t@click=\"upgradeDialogVisible = true\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t - {{ locale.baseText('generic.upgrade') }}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</N8nOption>\n\t\t\t\t\t\t\t</N8nSelect>\n\t\t\t\t\t\t\t<N8nButton\n\t\t\t\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t\t\t\tnative-type=\"button\"\n\t\t\t\t\t\t\t\tsquare\n\t\t\t\t\t\t\t\ticon=\"trash\"\n\t\t\t\t\t\t\t\tdata-test-id=\"project-user-remove\"\n\t\t\t\t\t\t\t\t@click=\"onRoleAction(user, 'remove')\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</template>\n\t\t\t\t</N8nUsersList>\n\t\t\t</fieldset>\n\t\t\t<fieldset :class=\"$style.buttons\">\n\t\t\t\t<div>\n\t\t\t\t\t<small v-if=\"isDirty\" class=\"mr-2xs\">{{\n\t\t\t\t\t\tlocale.baseText('projects.settings.message.unsavedChanges')\n\t\t\t\t\t}}</small>\n\t\t\t\t\t<N8nButton\n\t\t\t\t\t\t:disabled=\"!isDirty\"\n\t\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\t\tnative-type=\"button\"\n\t\t\t\t\t\tclass=\"mr-2xs\"\n\t\t\t\t\t\tdata-test-id=\"project-settings-cancel-button\"\n\t\t\t\t\t\t@click.stop.prevent=\"onCancel\"\n\t\t\t\t\t\t>{{ locale.baseText('projects.settings.button.cancel') }}</N8nButton\n\t\t\t\t\t>\n\t\t\t\t</div>\n\t\t\t\t<N8nButton\n\t\t\t\t\t:disabled=\"!isDirty\"\n\t\t\t\t\ttype=\"primary\"\n\t\t\t\t\tdata-test-id=\"project-settings-save-button\"\n\t\t\t\t\t>{{ locale.baseText('projects.settings.button.save') }}</N8nButton\n\t\t\t\t>\n\t\t\t</fieldset>\n\t\t\t<fieldset>\n\t\t\t\t<hr class=\"mb-2xl\" />\n\t\t\t\t<h3 class=\"mb-xs\">{{ locale.baseText('projects.settings.danger.title') }}</h3>\n\t\t\t\t<small>{{ locale.baseText('projects.settings.danger.message') }}</small>\n\t\t\t\t<br />\n\t\t\t\t<N8nButton\n\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\tnative-type=\"button\"\n\t\t\t\t\tclass=\"mt-s\"\n\t\t\t\t\tdata-test-id=\"project-settings-delete-button\"\n\t\t\t\t\t@click.stop.prevent=\"onDelete\"\n\t\t\t\t\t>{{ locale.baseText('projects.settings.danger.deleteProject') }}</N8nButton\n\t\t\t\t>\n\t\t\t</fieldset>\n\t\t</form>\n\t\t<ProjectDeleteDialog\n\t\t\tv-model=\"dialogVisible\"\n\t\t\t:current-project=\"projectsStore.currentProject\"\n\t\t\t:projects=\"projects\"\n\t\t\t@confirm-delete=\"onConfirmDelete\"\n\t\t/>\n\t\t<ProjectRoleUpgradeDialog\n\t\t\tv-model=\"upgradeDialogVisible\"\n\t\t\t:limit=\"projectsStore.teamProjectsLimit\"\n\t\t\t:plan-name=\"cloudPlanStore.currentPlanData?.displayName\"\n\t\t/>\n\t</div>\n</template>\n\n<style lang=\"scss\" module>\n.projectSettings {\n\tdisplay: grid;\n\twidth: 100%;\n\tjustify-items: center;\n\tgrid-auto-rows: max-content;\n\n\tform {\n\t\twidth: 100%;\n\t\tmax-width: 1280px;\n\t\tpadding: 0 var(--spacing-2xl);\n\n\t\tfieldset {\n\t\t\tpadding-bottom: var(--spacing-2xl);\n\n\t\t\tlabel {\n\t\t\t\tdisplay: block;\n\t\t\t\tmargin-bottom: var(--spacing-xs);\n\t\t\t\tfont-size: var(--font-size-xl);\n\t\t\t}\n\t\t}\n\t}\n}\n\n.header {\n\twidth: 100%;\n\tmax-width: 1280px;\n\tpadding: var(--spacing-l) var(--spacing-2xl) 0;\n}\n\n.upgrade {\n\tcursor: pointer;\n}\n\n.buttons {\n\tdisplay: flex;\n\tjustify-content: flex-end;\n\talign-items: center;\n}\n</style>\n"],"names":["props","__props","visible","_useModel","emit","__emit","locale","useI18n","selectedProject","ref","operation","wipeConfirmText","isValid","computed","onDelete","_a","uiStore","useUIStore","goToUpgrade","usersStore","useUsersStore","projectsStore","useProjectsStore","rolesStore","useRolesStore","cloudPlanStore","useCloudPlanStore","toast","useToast","router","useRouter","telemetry","useTelemetry","dialogVisible","upgradeDialogVisible","isDirty","formData","projectRoleTranslations","nameInput","usersList","user","r","projects","project","projectRoles","role","firstLicensedRole","onAddMember","userId","id","firstName","lastName","email","relation","onRoleAction","index","onNameInput","onCancel","deepCopy","_b","makeFormDataDiff","diff","cr","currentRelation","ar","sendTelemetry","onSubmit","error","onConfirmDelete","transferId","projectName","VIEWS","selectProjectNameIfMatchesDefault","watch","nextTick","onBeforeMount"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{G as p,az as i,r as d,e as T,d as u,ag as b,l as _,m as S,U as j,I as f}from"./vendor-Dv5OeN6t.js";import{o as w,V as o,
|
|
2
|
-
//# sourceMappingURL=ProjectTabs-
|
|
1
|
+
import{G as p,az as i,r as d,e as T,d as u,ag as b,l as _,m as S,U as j,I as f}from"./vendor-Dv5OeN6t.js";import{o as w,V as o,e7 as E,x as P}from"./index-1OxaEeO3.js";import{_ as v}from"./n8n-4UEsHtUL.js";const C=p({__name:"ProjectTabs",setup(k){const r=P(),e=i(),c=w(),l=d(""),m=T(()=>{var n;const s=(n=e==null?void 0:e.params)==null?void 0:n.projectId,a=s?{workflows:{name:o.PROJECTS_WORKFLOWS,params:{projectId:s}},credentials:{name:o.PROJECTS_CREDENTIALS,params:{projectId:s}}}:{workflows:{name:o.WORKFLOWS},credentials:{name:o.CREDENTIALS}},t=[{label:r.baseText("mainSidebar.workflows"),value:a.workflows.name,to:a.workflows},{label:r.baseText("mainSidebar.credentials"),value:a.credentials.name,to:a.credentials}];return s&&E(c.currentProject).update&&t.push({label:r.baseText("projects.settings"),value:o.PROJECT_SETTINGS,to:{name:o.PROJECT_SETTINGS,params:{projectId:s}}}),t});return u(()=>e==null?void 0:e.name,()=>{l.value=e==null?void 0:e.name},{immediate:!0}),(s,a)=>{const t=b("N8nTabs");return _(),S("div",{class:f(s.$style.projectTabs)},[j(t,{modelValue:l.value,"onUpdate:modelValue":a[0]||(a[0]=n=>l.value=n),options:m.value,"data-test-id":"project-tabs"},null,8,["modelValue","options"])],2)}}}),I="_projectTabs_1nw28_1",R={projectTabs:I},O={$style:R},W=v(C,[["__cssModules",O]]);export{W as P};
|
|
2
|
+
//# sourceMappingURL=ProjectTabs-5ZO9YR8J.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectTabs-
|
|
1
|
+
{"version":3,"file":"ProjectTabs-5ZO9YR8J.js","sources":["../../src/components/Projects/ProjectTabs.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, watch, computed } from 'vue';\nimport type { RouteRecordName } from 'vue-router';\nimport { useRoute } from 'vue-router';\nimport { VIEWS } from '@/constants';\nimport { useI18n } from '@/composables/useI18n';\nimport { useProjectsStore } from '@/stores/projects.store';\nimport { getProjectPermissions } from '@/permissions';\n\nconst locale = useI18n();\nconst route = useRoute();\n\nconst projectsStore = useProjectsStore();\n\nconst selectedTab = ref<RouteRecordName | null | undefined>('');\nconst options = computed(() => {\n\tconst projectId = route?.params?.projectId;\n\tconst to = projectId\n\t\t? {\n\t\t\t\tworkflows: {\n\t\t\t\t\tname: VIEWS.PROJECTS_WORKFLOWS,\n\t\t\t\t\tparams: { projectId },\n\t\t\t\t},\n\t\t\t\tcredentials: {\n\t\t\t\t\tname: VIEWS.PROJECTS_CREDENTIALS,\n\t\t\t\t\tparams: { projectId },\n\t\t\t\t},\n\t\t\t}\n\t\t: {\n\t\t\t\tworkflows: {\n\t\t\t\t\tname: VIEWS.WORKFLOWS,\n\t\t\t\t},\n\t\t\t\tcredentials: {\n\t\t\t\t\tname: VIEWS.CREDENTIALS,\n\t\t\t\t},\n\t\t\t};\n\tconst tabs = [\n\t\t{\n\t\t\tlabel: locale.baseText('mainSidebar.workflows'),\n\t\t\tvalue: to.workflows.name,\n\t\t\tto: to.workflows,\n\t\t},\n\t\t{\n\t\t\tlabel: locale.baseText('mainSidebar.credentials'),\n\t\t\tvalue: to.credentials.name,\n\t\t\tto: to.credentials,\n\t\t},\n\t];\n\n\tif (projectId && getProjectPermissions(projectsStore.currentProject).update) {\n\t\ttabs.push({\n\t\t\tlabel: locale.baseText('projects.settings'),\n\t\t\tvalue: VIEWS.PROJECT_SETTINGS,\n\t\t\tto: { name: VIEWS.PROJECT_SETTINGS, params: { projectId } },\n\t\t});\n\t}\n\n\treturn tabs;\n});\nwatch(\n\t() => route?.name,\n\t() => {\n\t\tselectedTab.value = route?.name;\n\t},\n\t{ immediate: true },\n);\n</script>\n\n<template>\n\t<div :class=\"$style.projectTabs\">\n\t\t<N8nTabs v-model=\"selectedTab\" :options=\"options\" data-test-id=\"project-tabs\" />\n\t</div>\n</template>\n\n<style module lang=\"scss\">\n.projectTabs {\n\tpadding: var(--spacing-2xs) 0 var(--spacing-l);\n}\n</style>\n"],"names":["locale","useI18n","route","useRoute","projectsStore","useProjectsStore","selectedTab","ref","options","computed","projectId","_a","to","VIEWS","tabs","getProjectPermissions","watch"],"mappings":"uPASA,MAAMA,EAASC,IACTC,EAAQC,IAERC,EAAgBC,IAEhBC,EAAcC,EAAwC,EAAE,EACxDC,EAAUC,EAAS,IAAM,OACxB,MAAAC,GAAYC,EAAAT,GAAA,YAAAA,EAAO,SAAP,YAAAS,EAAe,UAC3BC,EAAKF,EACR,CACA,UAAW,CACV,KAAMG,EAAM,mBACZ,OAAQ,CAAE,UAAAH,CAAU,CACrB,EACA,YAAa,CACZ,KAAMG,EAAM,qBACZ,OAAQ,CAAE,UAAAH,CAAU,CACrB,CAAA,EAEA,CACA,UAAW,CACV,KAAMG,EAAM,SACb,EACA,YAAa,CACZ,KAAMA,EAAM,WACb,CAAA,EAEGC,EAAO,CACZ,CACC,MAAOd,EAAO,SAAS,uBAAuB,EAC9C,MAAOY,EAAG,UAAU,KACpB,GAAIA,EAAG,SACR,EACA,CACC,MAAOZ,EAAO,SAAS,yBAAyB,EAChD,MAAOY,EAAG,YAAY,KACtB,GAAIA,EAAG,WACR,CAAA,EAGD,OAAIF,GAAaK,EAAsBX,EAAc,cAAc,EAAE,QACpEU,EAAK,KAAK,CACT,MAAOd,EAAO,SAAS,mBAAmB,EAC1C,MAAOa,EAAM,iBACb,GAAI,CAAE,KAAMA,EAAM,iBAAkB,OAAQ,CAAE,UAAAH,EAAY,CAAA,CAC1D,EAGKI,CAAA,CACP,EACD,OAAAE,EACC,IAAMd,GAAA,YAAAA,EAAO,KACb,IAAM,CACLI,EAAY,MAAQJ,GAAA,YAAAA,EAAO,IAC5B,EACA,CAAE,UAAW,EAAK,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{m as l}from"./pinia-sugP77Im.js";import{l as p}from"./index-
|
|
2
|
-
//# sourceMappingURL=PushConnectionTracker-
|
|
1
|
+
import{m as l}from"./pinia-sugP77Im.js";import{l as p}from"./index-1OxaEeO3.js";import{G as m,ag as e,l as n,m as t,U as s,O as a,p as r,S as _,T as d,H as u}from"./vendor-Dv5OeN6t.js";import{_ as f}from"./n8n-4UEsHtUL.js";const T=m({name:"PushConnectionTracker",computed:{...l(p)}}),h={key:0,class:"push-connection-lost primary-color"},C=["innerHTML"];function k(o,S,$,v,x,y){const c=e("font-awesome-icon"),i=e("n8n-tooltip");return n(),t("span",null,[o.rootStore.pushConnectionActive?u(o.$slots,"default",{key:1}):(n(),t("div",h,[s(i,{placement:"bottom-end"},{content:a(()=>[r("div",{innerHTML:o.$locale.baseText("pushConnectionTracker.cannotConnectToServer")},null,8,C)]),default:a(()=>[r("span",null,[s(c,{icon:"exclamation-triangle"}),_(" "+d(o.$locale.baseText("pushConnectionTracker.connectionLost")),1)])]),_:1})]))])}const H=f(T,[["render",k]]);export{H as P};
|
|
2
|
+
//# sourceMappingURL=PushConnectionTracker-Bp-RjnYr.js.map
|
package/dist/assets/{PushConnectionTracker-C_r8Zv-p.js.map → PushConnectionTracker-Bp-RjnYr.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PushConnectionTracker-
|
|
1
|
+
{"version":3,"file":"PushConnectionTracker-Bp-RjnYr.js","sources":["../../src/components/PushConnectionTracker.vue"],"sourcesContent":["<template>\n\t<span>\n\t\t<div v-if=\"!rootStore.pushConnectionActive\" class=\"push-connection-lost primary-color\">\n\t\t\t<n8n-tooltip placement=\"bottom-end\">\n\t\t\t\t<template #content>\n\t\t\t\t\t<div v-html=\"$locale.baseText('pushConnectionTracker.cannotConnectToServer')\"></div>\n\t\t\t\t</template>\n\t\t\t\t<span>\n\t\t\t\t\t<font-awesome-icon icon=\"exclamation-triangle\" /> \n\t\t\t\t\t{{ $locale.baseText('pushConnectionTracker.connectionLost') }}\n\t\t\t\t</span>\n\t\t\t</n8n-tooltip>\n\t\t</div>\n\t\t<slot v-else />\n\t</span>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { mapStores } from 'pinia';\nimport { useRootStore } from '@/stores/root.store';\n\nexport default defineComponent({\n\tname: 'PushConnectionTracker',\n\tcomputed: {\n\t\t...mapStores(useRootStore),\n\t},\n});\n</script>\n"],"names":["_sfc_main","defineComponent","mapStores","useRootStore","_hoisted_1","_resolveComponent","_openBlock","_createElementBlock","_ctx","_renderSlot","_createVNode","_component_n8n_tooltip","_withCtx","$locale","_createElementVNode","_hoisted_2","_component_font_awesome_icon"],"mappings":"+NAsBA,MAAAA,EAAeC,EAAgB,CAC9B,KAAM,wBACN,SAAU,CACT,GAAGC,EAAUC,CAAY,CAC1B,CACD,CAAC,EAzB6CC,EAAM,CAAA,IAAA,uHADnDC,EAaO,aAAA,EAZN,OAAAC,EAAA,EAAAC,EAUM,OAVN,KAAA,CAAAC,EACC,+BAUDC,EAAAD,EAAA,OAAA,UAAA,CAAA,IAAA,EAAA,OARuFD,EAAA,MAAAH,EAAA,CAAAM,EAApFC,EAAoF,CAAA,UAAA,YAAA,EAAA,CAAA,QAA/EC,EAAQC,IAAAA,CALlBC,EAAA,MAAA,CAAA,UAAAN,EAAA,QAAA,SAAA,6CAAA,GAUW,KAAA,EAAAO,CAAA,CAAA,CAAA,UAFNH,EAAiD,IAAA,CACjDE,EAAA,OAAA,KAAA,CAAAJ,EAAAM,EAAA,CAAA,KAAA,sBAAA,CAAA,yEATL,CAAA,CAAA,CAAA,KAaE,CAAA,CAAA,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{m as G}from"./pinia-sugP77Im.js";import{e as se,e1 as re,E as oe,o as ae,d as le,a as ne,x as ie,G as de}from"./index-Dtri_pSJ.js";import{G as B,l as n,m as h,H as f,p as b,I as u,R as P,ag as r,M as g,O as i,U as c,P as J,V as Q,S as F,T as k,az as ue,r as w,e as W,d as D,b as ce,n as fe,ab as pe,al as me,F as q,a7 as ye}from"./vendor-Dv5OeN6t.js";import{_ as M}from"./n8n-4UEsHtUL.js";const he=B({name:"PageViewLayout",data(){return{loading:!1}},computed:{...G(se)}}),ge="_wrapper_u24kg_1",$e="_content_u24kg_12",ve={wrapper:ge,content:$e};function we(e,s,p,C,j,L){return n(),h("div",{class:u(e.$style.wrapper)},[f(e.$slots,"header"),b("main",{class:u(e.$style.content)},[f(e.$slots,"default")],2)],2)}const be={$style:ve},_e=M(he,[["render",we],["__cssModules",be]]),Pe=B({props:{overflow:{type:Boolean,default:!1}}}),Fe="_wrapper_183my_1",ke="_overflow_183my_6",je="_list_183my_6",Se="_body_183my_6",Ve={wrapper:Fe,overflow:ke,list:je,body:Se};function Ae(e,s,p,C,j,L){return n(),h("div",{class:u({[e.$style.wrapper]:!0,[e.$style.overflow]:e.overflow})},[b("div",{class:u(e.$style.list)},[e.$slots.header?(n(),h("div",{key:0,class:u(e.$style.header)},[f(e.$slots,"header")],2)):P("",!0),b("div",{class:u(e.$style.body)},[f(e.$slots,"default")],2)],2)],2)}const Ce={$style:Ve},Le=M(Pe,[["render",Ae],["__cssModules",Ce]]),Ue=B({components:{ProjectSharing:re},props:{modelValue:{type:Object,default:()=>({})},keys:{type:Array,default:()=>[]},shareable:{type:Boolean,default:!0},reset:{type:Function,default:()=>{}}},data(){return{EnterpriseEditionFeature:oe,selectedProject:null}},computed:{...G(ae),filtersLength(){let e=0;return this.keys.forEach(s=>{if(s==="search")return;const p=this.modelValue[s];e+=(Array.isArray(p)?p.length>0:p!=="")?1:0}),e},hasFilters(){return this.filtersLength>0}},watch:{filtersLength(e){this.$emit("update:filtersLength",e)}},async beforeMount(){await this.projectsStore.getAllProjects(),this.selectedProject=this.projectsStore.projects.find(e=>e.id===this.modelValue.homeProject)??null},methods:{setKeyValue(e,s){const p={...this.modelValue,[e]:s};this.$emit("update:modelValue",p)},resetFilters(){if(this.reset)this.reset();else{const e={...this.modelValue};this.keys.forEach(s=>{e[s]=Array.isArray(this.modelValue[s])?[]:""}),this.$emit("update:modelValue",e)}this.selectedProject=null}}}),De={"filter-button":"_filter-button_91qwg_1","filters-dropdown":"_filters-dropdown_91qwg_6","filters-dropdown-footer":"_filters-dropdown-footer_91qwg_11"};function Te(e,s,p,C,j,L){const $=r("n8n-badge"),S=r("n8n-button"),m=r("n8n-input-label"),_=r("ProjectSharing"),o=r("enterprise-edition"),V=r("n8n-link"),A=r("n8n-popover");return n(),g(A,{trigger:"click",width:"304",size:"large"},{reference:i(()=>[c(S,{icon:"filter",type:"tertiary",active:e.hasFilters,class:u(e.$style["filter-button"]),"data-test-id":"resources-list-filters-trigger"},{default:i(()=>[J(c($,{theme:"primary",class:"mr-4xs"},{default:i(()=>[F(k(e.filtersLength),1)]),_:1},512),[[Q,e.filtersLength>0]]),F(" "+k(e.$locale.baseText("forms.resourceFiltersDropdown.filters")),1)]),_:1},8,["active","class"])]),default:i(()=>[b("div",{class:u(e.$style["filters-dropdown"]),"data-test-id":"resources-list-filters-dropdown"},[f(e.$slots,"default",{filters:e.modelValue,setKeyValue:e.setKeyValue}),e.shareable&&e.projectsStore.isProjectHome?(n(),g(o,{key:0,features:[e.EnterpriseEditionFeature.Sharing]},{default:i(()=>[c(m,{label:e.$locale.baseText("forms.resourceFiltersDropdown.owner"),bold:!1,size:"small",color:"text-base",class:"mb-3xs"},null,8,["label"]),c(_,{modelValue:e.selectedProject,"onUpdate:modelValue":[s[0]||(s[0]=y=>e.selectedProject=y),s[1]||(s[1]=y=>e.setKeyValue("homeProject",y.id))],class:"pt-2xs",projects:e.projectsStore.projects,placeholder:e.$locale.baseText("forms.resourceFiltersDropdown.owner.placeholder"),"empty-options-text":e.$locale.baseText("projects.sharing.noMatchingProjects")},null,8,["modelValue","projects","placeholder","empty-options-text"])]),_:1},8,["features"])):P("",!0),e.hasFilters?(n(),h("div",{key:1,class:u([e.$style["filters-dropdown-footer"],"mt-s"])},[c(V,{onClick:e.resetFilters},{default:i(()=>[F(k(e.$locale.baseText("forms.resourceFiltersDropdown.reset")),1)]),_:1},8,["onClick"])],2)):P("",!0)],2)]),_:3})}const Ke={$style:De},ze=M(Ue,[["render",Te],["__cssModules",Ke]]),Re=B({name:"ResourcesListLayout",components:{PageViewLayout:_e,PageViewLayoutList:Le,ResourceFiltersDropdown:ze},props:{resourceKey:{type:String,default:""},displayName:{type:Function,default:e=>e.name},resources:{type:Array,default:()=>[]},disabled:{type:Boolean,default:!1},initialize:{type:Function,default:()=>async()=>{}},filters:{type:Object,default:()=>({search:"",homeProject:""})},additionalFiltersHandler:{type:Function,required:!1,default:void 0},shareable:{type:Boolean,default:!0},showFiltersDropdown:{type:Boolean,default:!0},sortFns:{type:Object,default:()=>({})},sortOptions:{type:Array,default:()=>["lastUpdated","lastCreated","nameAsc","nameDesc"]},type:{type:String,default:"list"},typeProps:{type:Object,default:()=>({itemSize:80})}},emits:["update:filters","click:add","sort"],setup(e,{emit:s}){const p=ue(),C=ie(),{callDebounced:j}=le(),L=ne(),$=de(),S=w(!0),m=w(e.sortOptions[0]),_=w(!1),o=w(e.filters),V=w(1),A=w(10),y=w(!1),U=w(null),T=W(()=>Object.keys(o.value)),K=W(()=>e.resources.filter(d=>{let a=!0;if(o.value.homeProject&&(a=a&&!!(d.homeProject&&d.homeProject.id===o.value.homeProject)),o.value.search){const z=o.value.search.toLowerCase();a=a&&e.displayName(d).toLowerCase().includes(z)}return e.additionalFiltersHandler&&(a=e.additionalFiltersHandler(d,o.value,a)),a}).sort((d,a)=>{switch(m.value){case"lastUpdated":return e.sortFns.lastUpdated?e.sortFns.lastUpdated(d,a):new Date(a.updatedAt??"").valueOf()-new Date(d.updatedAt??"").valueOf();case"lastCreated":return e.sortFns.lastCreated?e.sortFns.lastCreated(d,a):new Date(a.createdAt??"").valueOf()-new Date(d.createdAt??"").valueOf();case"nameAsc":return e.sortFns.nameAsc?e.sortFns.nameAsc(d,a):e.displayName(d).trim().localeCompare(e.displayName(a).trim());case"nameDesc":return e.sortFns.nameDesc?e.sortFns.nameDesc(d,a):e.displayName(a).trim().localeCompare(e.displayName(d).trim());default:return e.sortFns[m.value]?e.sortFns[m.value](d,a):0}})),N=()=>{U.value&&U.value.focus()},O=()=>!!T.value.find(t=>t!=="search"&&(Array.isArray(e.filters[t])?e.filters[t].length>0:e.filters[t]!=="")),E=t=>{A.value=t},H=t=>{V.value=t},l=t=>{if(y.value){if(t!=="reset")return;setTimeout(()=>y.value=!1,1500)}const d=o.value,a=[],z=[];Object.keys(d).forEach(R=>{d[R]&&(a.push(R),z.push(R==="search"?null:d[R]))}),$.track(`User set filters in ${e.resourceKey} list`,{filters_set:a,filter_values:z,[`${e.resourceKey}_total_in_view`]:e.resources.length,[`${e.resourceKey}_after_filtering`]:K.value.length})},v=t=>{s("click:add",t)},X=t=>{s("update:filters",t)},I=()=>{Object.keys(o.value).forEach(t=>{o.value[t]=Array.isArray(o.value[t])?[]:""}),y.value=!0,l("reset"),s("update:filters",o.value)},Y=()=>"itemSize"in e.typeProps?e.typeProps.itemSize:0,Z=()=>"columns"in e.typeProps?e.typeProps.columns:{},x=()=>{$.track(`User changed sorting in ${e.resourceKey} list`,{sorting:m.value})},ee=t=>{_.value=t>0},te=t=>{o.value.search=t,s("update:filters",o.value)};return D(()=>e.filters,t=>{o.value=t}),D(()=>o.value.homeProject,()=>{l("homeProject")}),D(()=>o.value.search,()=>j(l,{debounceTime:1e3,trailing:!0},"search")),D(()=>m.value,t=>{s("sort",t),x()}),D(()=>{var t;return(t=p==null?void 0:p.params)==null?void 0:t.projectId},()=>{I()}),ce(async()=>{await e.initialize(),S.value=!1,await fe(),N(),O()&&(_.value=!0)}),{loading:S,i18n:C,search:U,usersStore:L,filterKeys:T,currentPage:V,rowsPerPage:A,filteredAndSortedResources:K,hasFilters:_,sortBy:m,resettingFilters:y,filtersModel:o,sendFiltersTelemetry:l,getColumns:Z,itemSize:Y,onAddButtonClick:v,onUpdateFiltersLength:ee,onUpdateFilters:X,resetFilters:I,callDebounced:j,setCurrentPage:H,setRowsPerPage:E,onSearch:te}}}),Be="_filters_18koc_1",Me="_search_18koc_16",Ne="_listWrapper_18koc_20",Oe="_datatable_18koc_38",Ee={"filters-row":"_filters-row_18koc_1",filters:Be,search:Me,listWrapper:Ne,"sort-and-filter":"_sort-and-filter_18koc_26","header-loading":"_header-loading_18koc_30","card-loading":"_card-loading_18koc_34",datatable:Oe},He={key:0},Ie={key:0},We={key:0,class:"mt-xs"},qe=b("div",{class:"pb-xs"},null,-1);function Ge(e,s,p,C,j,L){const $=r("n8n-loading"),S=r("n8n-action-box"),m=r("n8n-icon"),_=r("n8n-input"),o=r("ResourceFiltersDropdown"),V=r("n8n-option"),A=r("n8n-select"),y=r("n8n-button"),U=r("n8n-link"),T=r("n8n-info-tip"),K=r("n8n-recycle-scroller"),N=r("n8n-datatable"),O=r("n8n-text"),E=r("PageViewLayoutList"),H=r("PageViewLayout");return n(),g(H,null,{header:i(()=>[f(e.$slots,"header")]),default:i(()=>[e.loading?(n(),h("div",He,[c($,{class:u([e.$style["header-loading"],"mb-l"]),variant:"custom"},null,8,["class"]),c($,{class:u([e.$style["card-loading"],"mb-2xs"]),variant:"custom"},null,8,["class"]),c($,{class:u(e.$style["card-loading"]),variant:"custom"},null,8,["class"])])):(n(),h(q,{key:1},[e.resources.length===0?(n(),h("div",Ie,[f(e.$slots,"empty",{},()=>{var l,v;return[c(S,{"data-test-id":"empty-resources-list",emoji:"👋",heading:e.i18n.baseText((l=e.usersStore.currentUser)!=null&&l.firstName?`${e.resourceKey}.empty.heading`:`${e.resourceKey}.empty.heading.userNotSetup`,{interpolate:{name:((v=e.usersStore.currentUser)==null?void 0:v.firstName)??""}}),description:e.i18n.baseText(`${e.resourceKey}.empty.description`),"button-text":e.i18n.baseText(`${e.resourceKey}.empty.button`),"button-type":"secondary","onClick:button":e.onAddButtonClick},null,8,["heading","description","button-text","onClick:button"])]})])):(n(),g(E,{key:1,overflow:e.type!=="list"},{header:i(()=>[b("div",{class:u(e.$style["filters-row"])},[b("div",{class:u(e.$style.filters)},[c(_,{ref:"search","model-value":e.filtersModel.search,class:u([e.$style.search,"mr-2xs"]),placeholder:e.i18n.baseText(`${e.resourceKey}.search.placeholder`),clearable:"","data-test-id":"resources-list-search","onUpdate:modelValue":e.onSearch},{prefix:i(()=>[c(m,{icon:"search"})]),_:1},8,["model-value","class","placeholder","onUpdate:modelValue"]),e.showFiltersDropdown?(n(),g(o,{key:0,keys:e.filterKeys,reset:e.resetFilters,"model-value":e.filtersModel,shareable:e.shareable,"onUpdate:modelValue":e.onUpdateFilters,"onUpdate:filtersLength":e.onUpdateFiltersLength},{default:i(l=>[f(e.$slots,"filters",pe(me(l)))]),_:3},8,["keys","reset","model-value","shareable","onUpdate:modelValue","onUpdate:filtersLength"])):P("",!0),b("div",{class:u(e.$style["sort-and-filter"])},[c(A,{modelValue:e.sortBy,"onUpdate:modelValue":s[0]||(s[0]=l=>e.sortBy=l),"data-test-id":"resources-list-sort"},{default:i(()=>[(n(!0),h(q,null,ye(e.sortOptions,l=>(n(),g(V,{key:l,"data-test-id":"resources-list-sort-item",value:l,label:e.i18n.baseText(`${e.resourceKey}.sort.${l}`)},null,8,["value","label"]))),128))]),_:1},8,["modelValue"])],2)],2),f(e.$slots,"add-button",{disabled:e.disabled},()=>[c(y,{size:"large",disabled:e.disabled,"data-test-id":"resources-list-add",onClick:e.onAddButtonClick},{default:i(()=>[F(k(e.i18n.baseText(`${e.resourceKey}.add`)),1)]),_:1},8,["disabled","onClick"])])],2),f(e.$slots,"callout"),e.showFiltersDropdown?J((n(),h("div",We,[c(T,{bold:!1},{default:i(()=>[F(k(e.i18n.baseText(`${e.resourceKey}.filters.active`))+" ",1),c(U,{"data-test-id":"workflows-filter-reset",size:"small",onClick:e.resetFilters},{default:i(()=>[F(k(e.i18n.baseText(`${e.resourceKey}.filters.active.reset`)),1)]),_:1},8,["onClick"])]),_:1})],512)),[[Q,e.hasFilters]]):P("",!0),qe]),default:i(()=>[f(e.$slots,"preamble"),e.filteredAndSortedResources.length>0?(n(),h("div",{key:0,ref:"listWrapperRef",class:u(e.$style.listWrapper)},[e.type==="list"?(n(),g(K,{key:0,"data-test-id":"resources-list",items:e.filteredAndSortedResources,"item-size":e.itemSize(),"item-key":"id"},{default:i(({item:l,updateItemSize:v})=>[f(e.$slots,"default",{data:l,updateItemSize:v})]),_:3},8,["items","item-size"])):P("",!0),e.type==="datatable"?(n(),g(N,{key:1,"data-test-id":"resources-table",class:u(e.$style.datatable),columns:e.getColumns(),rows:e.filteredAndSortedResources,"current-page":e.currentPage,"rows-per-page":e.rowsPerPage,"onUpdate:currentPage":e.setCurrentPage,"onUpdate:rowsPerPage":e.setRowsPerPage},{row:i(({columns:l,row:v})=>[f(e.$slots,"default",{data:v,columns:l})]),_:3},8,["class","columns","rows","current-page","rows-per-page","onUpdate:currentPage","onUpdate:rowsPerPage"])):P("",!0)],2)):(n(),g(O,{key:1,color:"text-base",size:"medium","data-test-id":"resources-list-empty"},{default:i(()=>[F(k(e.i18n.baseText(`${e.resourceKey}.noResults`)),1)]),_:1})),f(e.$slots,"postamble")]),_:3},8,["overflow"]))],64))]),_:3})}const Je={$style:Ee},xe=M(Re,[["render",Ge],["__cssModules",Je]]);export{xe as R};
|
|
2
|
-
//# sourceMappingURL=ResourcesListLayout-
|
|
1
|
+
import{m as G}from"./pinia-sugP77Im.js";import{e as se,d$ as re,E as oe,o as ae,d as le,a as ne,x as ie,G as de}from"./index-1OxaEeO3.js";import{G as B,l as n,m as h,H as f,p as b,I as u,R as P,ag as r,M as g,O as i,U as c,P as J,V as Q,S as F,T as k,az as ue,r as w,e as W,d as D,b as ce,n as fe,ab as pe,al as me,F as q,a7 as ye}from"./vendor-Dv5OeN6t.js";import{_ as M}from"./n8n-4UEsHtUL.js";const he=B({name:"PageViewLayout",data(){return{loading:!1}},computed:{...G(se)}}),ge="_wrapper_u24kg_1",$e="_content_u24kg_12",ve={wrapper:ge,content:$e};function we(e,s,p,C,j,L){return n(),h("div",{class:u(e.$style.wrapper)},[f(e.$slots,"header"),b("main",{class:u(e.$style.content)},[f(e.$slots,"default")],2)],2)}const be={$style:ve},_e=M(he,[["render",we],["__cssModules",be]]),Pe=B({props:{overflow:{type:Boolean,default:!1}}}),Fe="_wrapper_183my_1",ke="_overflow_183my_6",je="_list_183my_6",Se="_body_183my_6",Ve={wrapper:Fe,overflow:ke,list:je,body:Se};function Ae(e,s,p,C,j,L){return n(),h("div",{class:u({[e.$style.wrapper]:!0,[e.$style.overflow]:e.overflow})},[b("div",{class:u(e.$style.list)},[e.$slots.header?(n(),h("div",{key:0,class:u(e.$style.header)},[f(e.$slots,"header")],2)):P("",!0),b("div",{class:u(e.$style.body)},[f(e.$slots,"default")],2)],2)],2)}const Ce={$style:Ve},Le=M(Pe,[["render",Ae],["__cssModules",Ce]]),Ue=B({components:{ProjectSharing:re},props:{modelValue:{type:Object,default:()=>({})},keys:{type:Array,default:()=>[]},shareable:{type:Boolean,default:!0},reset:{type:Function,default:()=>{}}},data(){return{EnterpriseEditionFeature:oe,selectedProject:null}},computed:{...G(ae),filtersLength(){let e=0;return this.keys.forEach(s=>{if(s==="search")return;const p=this.modelValue[s];e+=(Array.isArray(p)?p.length>0:p!=="")?1:0}),e},hasFilters(){return this.filtersLength>0}},watch:{filtersLength(e){this.$emit("update:filtersLength",e)}},async beforeMount(){await this.projectsStore.getAllProjects(),this.selectedProject=this.projectsStore.projects.find(e=>e.id===this.modelValue.homeProject)??null},methods:{setKeyValue(e,s){const p={...this.modelValue,[e]:s};this.$emit("update:modelValue",p)},resetFilters(){if(this.reset)this.reset();else{const e={...this.modelValue};this.keys.forEach(s=>{e[s]=Array.isArray(this.modelValue[s])?[]:""}),this.$emit("update:modelValue",e)}this.selectedProject=null}}}),De={"filter-button":"_filter-button_91qwg_1","filters-dropdown":"_filters-dropdown_91qwg_6","filters-dropdown-footer":"_filters-dropdown-footer_91qwg_11"};function Te(e,s,p,C,j,L){const $=r("n8n-badge"),S=r("n8n-button"),m=r("n8n-input-label"),_=r("ProjectSharing"),o=r("enterprise-edition"),V=r("n8n-link"),A=r("n8n-popover");return n(),g(A,{trigger:"click",width:"304",size:"large"},{reference:i(()=>[c(S,{icon:"filter",type:"tertiary",active:e.hasFilters,class:u(e.$style["filter-button"]),"data-test-id":"resources-list-filters-trigger"},{default:i(()=>[J(c($,{theme:"primary",class:"mr-4xs"},{default:i(()=>[F(k(e.filtersLength),1)]),_:1},512),[[Q,e.filtersLength>0]]),F(" "+k(e.$locale.baseText("forms.resourceFiltersDropdown.filters")),1)]),_:1},8,["active","class"])]),default:i(()=>[b("div",{class:u(e.$style["filters-dropdown"]),"data-test-id":"resources-list-filters-dropdown"},[f(e.$slots,"default",{filters:e.modelValue,setKeyValue:e.setKeyValue}),e.shareable&&e.projectsStore.isProjectHome?(n(),g(o,{key:0,features:[e.EnterpriseEditionFeature.Sharing]},{default:i(()=>[c(m,{label:e.$locale.baseText("forms.resourceFiltersDropdown.owner"),bold:!1,size:"small",color:"text-base",class:"mb-3xs"},null,8,["label"]),c(_,{modelValue:e.selectedProject,"onUpdate:modelValue":[s[0]||(s[0]=y=>e.selectedProject=y),s[1]||(s[1]=y=>e.setKeyValue("homeProject",y.id))],class:"pt-2xs",projects:e.projectsStore.projects,placeholder:e.$locale.baseText("forms.resourceFiltersDropdown.owner.placeholder"),"empty-options-text":e.$locale.baseText("projects.sharing.noMatchingProjects")},null,8,["modelValue","projects","placeholder","empty-options-text"])]),_:1},8,["features"])):P("",!0),e.hasFilters?(n(),h("div",{key:1,class:u([e.$style["filters-dropdown-footer"],"mt-s"])},[c(V,{onClick:e.resetFilters},{default:i(()=>[F(k(e.$locale.baseText("forms.resourceFiltersDropdown.reset")),1)]),_:1},8,["onClick"])],2)):P("",!0)],2)]),_:3})}const Ke={$style:De},ze=M(Ue,[["render",Te],["__cssModules",Ke]]),Re=B({name:"ResourcesListLayout",components:{PageViewLayout:_e,PageViewLayoutList:Le,ResourceFiltersDropdown:ze},props:{resourceKey:{type:String,default:""},displayName:{type:Function,default:e=>e.name},resources:{type:Array,default:()=>[]},disabled:{type:Boolean,default:!1},initialize:{type:Function,default:()=>async()=>{}},filters:{type:Object,default:()=>({search:"",homeProject:""})},additionalFiltersHandler:{type:Function,required:!1,default:void 0},shareable:{type:Boolean,default:!0},showFiltersDropdown:{type:Boolean,default:!0},sortFns:{type:Object,default:()=>({})},sortOptions:{type:Array,default:()=>["lastUpdated","lastCreated","nameAsc","nameDesc"]},type:{type:String,default:"list"},typeProps:{type:Object,default:()=>({itemSize:80})}},emits:["update:filters","click:add","sort"],setup(e,{emit:s}){const p=ue(),C=ie(),{callDebounced:j}=le(),L=ne(),$=de(),S=w(!0),m=w(e.sortOptions[0]),_=w(!1),o=w(e.filters),V=w(1),A=w(10),y=w(!1),U=w(null),T=W(()=>Object.keys(o.value)),K=W(()=>e.resources.filter(d=>{let a=!0;if(o.value.homeProject&&(a=a&&!!(d.homeProject&&d.homeProject.id===o.value.homeProject)),o.value.search){const z=o.value.search.toLowerCase();a=a&&e.displayName(d).toLowerCase().includes(z)}return e.additionalFiltersHandler&&(a=e.additionalFiltersHandler(d,o.value,a)),a}).sort((d,a)=>{switch(m.value){case"lastUpdated":return e.sortFns.lastUpdated?e.sortFns.lastUpdated(d,a):new Date(a.updatedAt??"").valueOf()-new Date(d.updatedAt??"").valueOf();case"lastCreated":return e.sortFns.lastCreated?e.sortFns.lastCreated(d,a):new Date(a.createdAt??"").valueOf()-new Date(d.createdAt??"").valueOf();case"nameAsc":return e.sortFns.nameAsc?e.sortFns.nameAsc(d,a):e.displayName(d).trim().localeCompare(e.displayName(a).trim());case"nameDesc":return e.sortFns.nameDesc?e.sortFns.nameDesc(d,a):e.displayName(a).trim().localeCompare(e.displayName(d).trim());default:return e.sortFns[m.value]?e.sortFns[m.value](d,a):0}})),N=()=>{U.value&&U.value.focus()},O=()=>!!T.value.find(t=>t!=="search"&&(Array.isArray(e.filters[t])?e.filters[t].length>0:e.filters[t]!=="")),E=t=>{A.value=t},H=t=>{V.value=t},l=t=>{if(y.value){if(t!=="reset")return;setTimeout(()=>y.value=!1,1500)}const d=o.value,a=[],z=[];Object.keys(d).forEach(R=>{d[R]&&(a.push(R),z.push(R==="search"?null:d[R]))}),$.track(`User set filters in ${e.resourceKey} list`,{filters_set:a,filter_values:z,[`${e.resourceKey}_total_in_view`]:e.resources.length,[`${e.resourceKey}_after_filtering`]:K.value.length})},v=t=>{s("click:add",t)},X=t=>{s("update:filters",t)},I=()=>{Object.keys(o.value).forEach(t=>{o.value[t]=Array.isArray(o.value[t])?[]:""}),y.value=!0,l("reset"),s("update:filters",o.value)},Y=()=>"itemSize"in e.typeProps?e.typeProps.itemSize:0,Z=()=>"columns"in e.typeProps?e.typeProps.columns:{},x=()=>{$.track(`User changed sorting in ${e.resourceKey} list`,{sorting:m.value})},ee=t=>{_.value=t>0},te=t=>{o.value.search=t,s("update:filters",o.value)};return D(()=>e.filters,t=>{o.value=t}),D(()=>o.value.homeProject,()=>{l("homeProject")}),D(()=>o.value.search,()=>j(l,{debounceTime:1e3,trailing:!0},"search")),D(()=>m.value,t=>{s("sort",t),x()}),D(()=>{var t;return(t=p==null?void 0:p.params)==null?void 0:t.projectId},()=>{I()}),ce(async()=>{await e.initialize(),S.value=!1,await fe(),N(),O()&&(_.value=!0)}),{loading:S,i18n:C,search:U,usersStore:L,filterKeys:T,currentPage:V,rowsPerPage:A,filteredAndSortedResources:K,hasFilters:_,sortBy:m,resettingFilters:y,filtersModel:o,sendFiltersTelemetry:l,getColumns:Z,itemSize:Y,onAddButtonClick:v,onUpdateFiltersLength:ee,onUpdateFilters:X,resetFilters:I,callDebounced:j,setCurrentPage:H,setRowsPerPage:E,onSearch:te}}}),Be="_filters_18koc_1",Me="_search_18koc_16",Ne="_listWrapper_18koc_20",Oe="_datatable_18koc_38",Ee={"filters-row":"_filters-row_18koc_1",filters:Be,search:Me,listWrapper:Ne,"sort-and-filter":"_sort-and-filter_18koc_26","header-loading":"_header-loading_18koc_30","card-loading":"_card-loading_18koc_34",datatable:Oe},He={key:0},Ie={key:0},We={key:0,class:"mt-xs"},qe=b("div",{class:"pb-xs"},null,-1);function Ge(e,s,p,C,j,L){const $=r("n8n-loading"),S=r("n8n-action-box"),m=r("n8n-icon"),_=r("n8n-input"),o=r("ResourceFiltersDropdown"),V=r("n8n-option"),A=r("n8n-select"),y=r("n8n-button"),U=r("n8n-link"),T=r("n8n-info-tip"),K=r("n8n-recycle-scroller"),N=r("n8n-datatable"),O=r("n8n-text"),E=r("PageViewLayoutList"),H=r("PageViewLayout");return n(),g(H,null,{header:i(()=>[f(e.$slots,"header")]),default:i(()=>[e.loading?(n(),h("div",He,[c($,{class:u([e.$style["header-loading"],"mb-l"]),variant:"custom"},null,8,["class"]),c($,{class:u([e.$style["card-loading"],"mb-2xs"]),variant:"custom"},null,8,["class"]),c($,{class:u(e.$style["card-loading"]),variant:"custom"},null,8,["class"])])):(n(),h(q,{key:1},[e.resources.length===0?(n(),h("div",Ie,[f(e.$slots,"empty",{},()=>{var l,v;return[c(S,{"data-test-id":"empty-resources-list",emoji:"👋",heading:e.i18n.baseText((l=e.usersStore.currentUser)!=null&&l.firstName?`${e.resourceKey}.empty.heading`:`${e.resourceKey}.empty.heading.userNotSetup`,{interpolate:{name:((v=e.usersStore.currentUser)==null?void 0:v.firstName)??""}}),description:e.i18n.baseText(`${e.resourceKey}.empty.description`),"button-text":e.i18n.baseText(`${e.resourceKey}.empty.button`),"button-type":"secondary","onClick:button":e.onAddButtonClick},null,8,["heading","description","button-text","onClick:button"])]})])):(n(),g(E,{key:1,overflow:e.type!=="list"},{header:i(()=>[b("div",{class:u(e.$style["filters-row"])},[b("div",{class:u(e.$style.filters)},[c(_,{ref:"search","model-value":e.filtersModel.search,class:u([e.$style.search,"mr-2xs"]),placeholder:e.i18n.baseText(`${e.resourceKey}.search.placeholder`),clearable:"","data-test-id":"resources-list-search","onUpdate:modelValue":e.onSearch},{prefix:i(()=>[c(m,{icon:"search"})]),_:1},8,["model-value","class","placeholder","onUpdate:modelValue"]),e.showFiltersDropdown?(n(),g(o,{key:0,keys:e.filterKeys,reset:e.resetFilters,"model-value":e.filtersModel,shareable:e.shareable,"onUpdate:modelValue":e.onUpdateFilters,"onUpdate:filtersLength":e.onUpdateFiltersLength},{default:i(l=>[f(e.$slots,"filters",pe(me(l)))]),_:3},8,["keys","reset","model-value","shareable","onUpdate:modelValue","onUpdate:filtersLength"])):P("",!0),b("div",{class:u(e.$style["sort-and-filter"])},[c(A,{modelValue:e.sortBy,"onUpdate:modelValue":s[0]||(s[0]=l=>e.sortBy=l),"data-test-id":"resources-list-sort"},{default:i(()=>[(n(!0),h(q,null,ye(e.sortOptions,l=>(n(),g(V,{key:l,"data-test-id":"resources-list-sort-item",value:l,label:e.i18n.baseText(`${e.resourceKey}.sort.${l}`)},null,8,["value","label"]))),128))]),_:1},8,["modelValue"])],2)],2),f(e.$slots,"add-button",{disabled:e.disabled},()=>[c(y,{size:"large",disabled:e.disabled,"data-test-id":"resources-list-add",onClick:e.onAddButtonClick},{default:i(()=>[F(k(e.i18n.baseText(`${e.resourceKey}.add`)),1)]),_:1},8,["disabled","onClick"])])],2),f(e.$slots,"callout"),e.showFiltersDropdown?J((n(),h("div",We,[c(T,{bold:!1},{default:i(()=>[F(k(e.i18n.baseText(`${e.resourceKey}.filters.active`))+" ",1),c(U,{"data-test-id":"workflows-filter-reset",size:"small",onClick:e.resetFilters},{default:i(()=>[F(k(e.i18n.baseText(`${e.resourceKey}.filters.active.reset`)),1)]),_:1},8,["onClick"])]),_:1})],512)),[[Q,e.hasFilters]]):P("",!0),qe]),default:i(()=>[f(e.$slots,"preamble"),e.filteredAndSortedResources.length>0?(n(),h("div",{key:0,ref:"listWrapperRef",class:u(e.$style.listWrapper)},[e.type==="list"?(n(),g(K,{key:0,"data-test-id":"resources-list",items:e.filteredAndSortedResources,"item-size":e.itemSize(),"item-key":"id"},{default:i(({item:l,updateItemSize:v})=>[f(e.$slots,"default",{data:l,updateItemSize:v})]),_:3},8,["items","item-size"])):P("",!0),e.type==="datatable"?(n(),g(N,{key:1,"data-test-id":"resources-table",class:u(e.$style.datatable),columns:e.getColumns(),rows:e.filteredAndSortedResources,"current-page":e.currentPage,"rows-per-page":e.rowsPerPage,"onUpdate:currentPage":e.setCurrentPage,"onUpdate:rowsPerPage":e.setRowsPerPage},{row:i(({columns:l,row:v})=>[f(e.$slots,"default",{data:v,columns:l})]),_:3},8,["class","columns","rows","current-page","rows-per-page","onUpdate:currentPage","onUpdate:rowsPerPage"])):P("",!0)],2)):(n(),g(O,{key:1,color:"text-base",size:"medium","data-test-id":"resources-list-empty"},{default:i(()=>[F(k(e.i18n.baseText(`${e.resourceKey}.noResults`)),1)]),_:1})),f(e.$slots,"postamble")]),_:3},8,["overflow"]))],64))]),_:3})}const Je={$style:Ee},xe=M(Re,[["render",Ge],["__cssModules",Je]]);export{xe as R};
|
|
2
|
+
//# sourceMappingURL=ResourcesListLayout-B4W1PSHT.js.map
|
package/dist/assets/{ResourcesListLayout-CKSHiUAP.js.map → ResourcesListLayout-B4W1PSHT.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResourcesListLayout-CKSHiUAP.js","sources":["../../src/components/layouts/PageViewLayout.vue","../../src/components/layouts/PageViewLayoutList.vue","../../src/components/forms/ResourceFiltersDropdown.vue","../../src/components/layouts/ResourcesListLayout.vue"],"sourcesContent":["<template>\n\t<div :class=\"$style.wrapper\">\n\t\t<slot name=\"header\" />\n\t\t<main :class=\"$style.content\">\n\t\t\t<slot />\n\t\t</main>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { mapStores } from 'pinia';\nimport { useUIStore } from '@/stores/ui.store';\n\nexport default defineComponent({\n\tname: 'PageViewLayout',\n\tdata() {\n\t\treturn {\n\t\t\tloading: false,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useUIStore),\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.wrapper {\n\tdisplay: grid;\n\theight: 100%;\n\twidth: 100%;\n\tmax-width: 1280px;\n\tgrid-template-rows: auto 1fr;\n\tbox-sizing: border-box;\n\talign-content: start;\n\tpadding: var(--spacing-l) var(--spacing-2xl) 0;\n}\n\n.content {\n\tdisplay: grid;\n\theight: 100%;\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n\tprops: {\n\t\toverflow: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n});\n</script>\n\n<template>\n\t<div :class=\"{ [$style.wrapper]: true, [$style.overflow]: overflow }\">\n\t\t<div :class=\"$style.list\">\n\t\t\t<div v-if=\"$slots.header\" :class=\"$style.header\">\n\t\t\t\t<slot name=\"header\" />\n\t\t\t</div>\n\t\t\t<div :class=\"$style.body\">\n\t\t\t\t<slot />\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<style lang=\"scss\" module>\n.wrapper {\n\tdisplay: grid;\n\theight: 100%;\n}\n\n.overflow {\n\t.list {\n\t\t.body {\n\t\t\toverflow: auto;\n\t\t}\n\t}\n}\n\n.list {\n\tdisplay: grid;\n\tgrid-template-rows: auto 1fr;\n\theight: 100%;\n\t.body {\n\t\tposition: relative;\n\t\theight: 100%;\n\t}\n}\n</style>\n","<template>\n\t<n8n-popover trigger=\"click\" width=\"304\" size=\"large\">\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=\"hasFilters\"\n\t\t\t\t:class=\"$style['filter-button']\"\n\t\t\t\tdata-test-id=\"resources-list-filters-trigger\"\n\t\t\t>\n\t\t\t\t<n8n-badge v-show=\"filtersLength > 0\" theme=\"primary\" class=\"mr-4xs\">\n\t\t\t\t\t{{ filtersLength }}\n\t\t\t\t</n8n-badge>\n\t\t\t\t{{ $locale.baseText('forms.resourceFiltersDropdown.filters') }}\n\t\t\t</n8n-button>\n\t\t</template>\n\t\t<div :class=\"$style['filters-dropdown']\" data-test-id=\"resources-list-filters-dropdown\">\n\t\t\t<slot :filters=\"modelValue\" :set-key-value=\"setKeyValue\" />\n\t\t\t<enterprise-edition\n\t\t\t\tv-if=\"shareable && projectsStore.isProjectHome\"\n\t\t\t\t:features=\"[EnterpriseEditionFeature.Sharing]\"\n\t\t\t>\n\t\t\t\t<n8n-input-label\n\t\t\t\t\t:label=\"$locale.baseText('forms.resourceFiltersDropdown.owner')\"\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<ProjectSharing\n\t\t\t\t\tv-model=\"selectedProject\"\n\t\t\t\t\tclass=\"pt-2xs\"\n\t\t\t\t\t:projects=\"projectsStore.projects\"\n\t\t\t\t\t:placeholder=\"$locale.baseText('forms.resourceFiltersDropdown.owner.placeholder')\"\n\t\t\t\t\t:empty-options-text=\"$locale.baseText('projects.sharing.noMatchingProjects')\"\n\t\t\t\t\t@update:model-value=\"setKeyValue('homeProject', ($event as ProjectSharingData).id)\"\n\t\t\t\t/>\n\t\t\t</enterprise-edition>\n\t\t\t<div v-if=\"hasFilters\" :class=\"[$style['filters-dropdown-footer'], 'mt-s']\">\n\t\t\t\t<n8n-link @click=\"resetFilters\">\n\t\t\t\t\t{{ $locale.baseText('forms.resourceFiltersDropdown.reset') }}\n\t\t\t\t</n8n-link>\n\t\t\t</div>\n\t\t</div>\n\t</n8n-popover>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { EnterpriseEditionFeature } from '@/constants';\nimport { mapStores } from 'pinia';\nimport { useProjectsStore } from '@/stores/projects.store';\nimport type { PropType } from 'vue';\nimport type { ProjectSharingData } from '@/types/projects.types';\nimport ProjectSharing from '@/components/Projects/ProjectSharing.vue';\n\nexport type IResourceFiltersType = Record<string, boolean | string | string[]>;\n\nexport default defineComponent({\n\tcomponents: {\n\t\tProjectSharing,\n\t},\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: Object as PropType<IResourceFiltersType>,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t\tkeys: {\n\t\t\ttype: Array as PropType<string[]>,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tshareable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\treset: {\n\t\t\ttype: Function as PropType<() => void>,\n\t\t\tdefault: () => {},\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tEnterpriseEditionFeature,\n\t\t\tselectedProject: null as ProjectSharingData | null,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useProjectsStore),\n\t\tfiltersLength(): number {\n\t\t\tlet length = 0;\n\n\t\t\tthis.keys.forEach((key) => {\n\t\t\t\tif (key === 'search') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst value = this.modelValue[key];\n\t\t\t\tlength += (Array.isArray(value) ? value.length > 0 : value !== '') ? 1 : 0;\n\t\t\t});\n\n\t\t\treturn length;\n\t\t},\n\t\thasFilters(): boolean {\n\t\t\treturn this.filtersLength > 0;\n\t\t},\n\t},\n\twatch: {\n\t\tfiltersLength(value: number) {\n\t\t\tthis.$emit('update:filtersLength', value);\n\t\t},\n\t},\n\tasync beforeMount() {\n\t\tawait this.projectsStore.getAllProjects();\n\t\tthis.selectedProject =\n\t\t\tthis.projectsStore.projects.find((project) => project.id === this.modelValue.homeProject) ??\n\t\t\tnull;\n\t},\n\tmethods: {\n\t\tsetKeyValue(key: string, value: unknown) {\n\t\t\tconst filters = {\n\t\t\t\t...this.modelValue,\n\t\t\t\t[key]: value,\n\t\t\t};\n\n\t\t\tthis.$emit('update:modelValue', filters);\n\t\t},\n\t\tresetFilters() {\n\t\t\tif (this.reset) {\n\t\t\t\tthis.reset();\n\t\t\t} else {\n\t\t\t\tconst filters = { ...this.modelValue };\n\n\t\t\t\tthis.keys.forEach((key) => {\n\t\t\t\t\tfilters[key] = Array.isArray(this.modelValue[key]) ? [] : '';\n\t\t\t\t});\n\n\t\t\t\tthis.$emit('update:modelValue', filters);\n\t\t\t}\n\t\t\tthis.selectedProject = null;\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.filter-button {\n\theight: 40px;\n\talign-items: center;\n}\n\n.filters-dropdown {\n\twidth: 280px;\n\tpadding-bottom: var(--spacing-s);\n}\n\n.filters-dropdown-footer {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n}\n</style>\n","<template>\n\t<PageViewLayout>\n\t\t<template #header> <slot name=\"header\" /> </template>\n\t\t<div v-if=\"loading\">\n\t\t\t<n8n-loading :class=\"[$style['header-loading'], 'mb-l']\" variant=\"custom\" />\n\t\t\t<n8n-loading :class=\"[$style['card-loading'], 'mb-2xs']\" variant=\"custom\" />\n\t\t\t<n8n-loading :class=\"$style['card-loading']\" variant=\"custom\" />\n\t\t</div>\n\t\t<template v-else>\n\t\t\t<div v-if=\"resources.length === 0\">\n\t\t\t\t<slot name=\"empty\">\n\t\t\t\t\t<n8n-action-box\n\t\t\t\t\t\tdata-test-id=\"empty-resources-list\"\n\t\t\t\t\t\temoji=\"👋\"\n\t\t\t\t\t\t:heading=\"\n\t\t\t\t\t\t\ti18n.baseText(\n\t\t\t\t\t\t\t\tusersStore.currentUser?.firstName\n\t\t\t\t\t\t\t\t\t? (`${resourceKey}.empty.heading` as BaseTextKey)\n\t\t\t\t\t\t\t\t\t: (`${resourceKey}.empty.heading.userNotSetup` as BaseTextKey),\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tinterpolate: { name: usersStore.currentUser?.firstName ?? '' },\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\"\n\t\t\t\t\t\t:description=\"i18n.baseText(`${resourceKey}.empty.description` as BaseTextKey)\"\n\t\t\t\t\t\t:button-text=\"i18n.baseText(`${resourceKey}.empty.button` as BaseTextKey)\"\n\t\t\t\t\t\tbutton-type=\"secondary\"\n\t\t\t\t\t\t@click:button=\"onAddButtonClick\"\n\t\t\t\t\t/>\n\t\t\t\t</slot>\n\t\t\t</div>\n\t\t\t<PageViewLayoutList v-else :overflow=\"type !== 'list'\">\n\t\t\t\t<template #header>\n\t\t\t\t\t<div :class=\"$style['filters-row']\">\n\t\t\t\t\t\t<div :class=\"$style.filters\">\n\t\t\t\t\t\t\t<n8n-input\n\t\t\t\t\t\t\t\tref=\"search\"\n\t\t\t\t\t\t\t\t:model-value=\"filtersModel.search\"\n\t\t\t\t\t\t\t\t:class=\"[$style['search'], 'mr-2xs']\"\n\t\t\t\t\t\t\t\t:placeholder=\"i18n.baseText(`${resourceKey}.search.placeholder` as BaseTextKey)\"\n\t\t\t\t\t\t\t\tclearable\n\t\t\t\t\t\t\t\tdata-test-id=\"resources-list-search\"\n\t\t\t\t\t\t\t\t@update:model-value=\"onSearch\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<template #prefix>\n\t\t\t\t\t\t\t\t\t<n8n-icon icon=\"search\" />\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t</n8n-input>\n\t\t\t\t\t\t\t<ResourceFiltersDropdown\n\t\t\t\t\t\t\t\tv-if=\"showFiltersDropdown\"\n\t\t\t\t\t\t\t\t:keys=\"filterKeys\"\n\t\t\t\t\t\t\t\t:reset=\"resetFilters\"\n\t\t\t\t\t\t\t\t:model-value=\"filtersModel\"\n\t\t\t\t\t\t\t\t:shareable=\"shareable\"\n\t\t\t\t\t\t\t\t@update:model-value=\"onUpdateFilters\"\n\t\t\t\t\t\t\t\t@update:filters-length=\"onUpdateFiltersLength\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<template #default=\"resourceFiltersSlotProps\">\n\t\t\t\t\t\t\t\t\t<slot name=\"filters\" v-bind=\"resourceFiltersSlotProps\" />\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t</ResourceFiltersDropdown>\n\t\t\t\t\t\t\t<div :class=\"$style['sort-and-filter']\">\n\t\t\t\t\t\t\t\t<n8n-select v-model=\"sortBy\" data-test-id=\"resources-list-sort\">\n\t\t\t\t\t\t\t\t\t<n8n-option\n\t\t\t\t\t\t\t\t\t\tv-for=\"sortOption in sortOptions\"\n\t\t\t\t\t\t\t\t\t\t:key=\"sortOption\"\n\t\t\t\t\t\t\t\t\t\tdata-test-id=\"resources-list-sort-item\"\n\t\t\t\t\t\t\t\t\t\t:value=\"sortOption\"\n\t\t\t\t\t\t\t\t\t\t:label=\"i18n.baseText(`${resourceKey}.sort.${sortOption}` as BaseTextKey)\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</n8n-select>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<slot name=\"add-button\" :disabled=\"disabled\">\n\t\t\t\t\t\t\t<n8n-button\n\t\t\t\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t\t\t\t:disabled=\"disabled\"\n\t\t\t\t\t\t\t\tdata-test-id=\"resources-list-add\"\n\t\t\t\t\t\t\t\t@click=\"onAddButtonClick\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{{ i18n.baseText(`${resourceKey}.add` as BaseTextKey) }}\n\t\t\t\t\t\t\t</n8n-button>\n\t\t\t\t\t\t</slot>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<slot name=\"callout\"></slot>\n\n\t\t\t\t\t<div v-if=\"showFiltersDropdown\" v-show=\"hasFilters\" class=\"mt-xs\">\n\t\t\t\t\t\t<n8n-info-tip :bold=\"false\">\n\t\t\t\t\t\t\t{{ i18n.baseText(`${resourceKey}.filters.active` as BaseTextKey) }}\n\t\t\t\t\t\t\t<n8n-link data-test-id=\"workflows-filter-reset\" size=\"small\" @click=\"resetFilters\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText(`${resourceKey}.filters.active.reset` as BaseTextKey) }}\n\t\t\t\t\t\t\t</n8n-link>\n\t\t\t\t\t\t</n8n-info-tip>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"pb-xs\" />\n\t\t\t\t</template>\n\n\t\t\t\t<slot name=\"preamble\" />\n\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"filteredAndSortedResources.length > 0\"\n\t\t\t\t\tref=\"listWrapperRef\"\n\t\t\t\t\t:class=\"$style.listWrapper\"\n\t\t\t\t>\n\t\t\t\t\t<n8n-recycle-scroller\n\t\t\t\t\t\tv-if=\"type === 'list'\"\n\t\t\t\t\t\tdata-test-id=\"resources-list\"\n\t\t\t\t\t\t:items=\"filteredAndSortedResources\"\n\t\t\t\t\t\t:item-size=\"itemSize()\"\n\t\t\t\t\t\titem-key=\"id\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<template #default=\"{ item, updateItemSize }\">\n\t\t\t\t\t\t\t<slot :data=\"item\" :update-item-size=\"updateItemSize\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</n8n-recycle-scroller>\n\t\t\t\t\t<n8n-datatable\n\t\t\t\t\t\tv-if=\"type === 'datatable'\"\n\t\t\t\t\t\tdata-test-id=\"resources-table\"\n\t\t\t\t\t\t:class=\"$style.datatable\"\n\t\t\t\t\t\t:columns=\"getColumns()\"\n\t\t\t\t\t\t:rows=\"filteredAndSortedResources\"\n\t\t\t\t\t\t:current-page=\"currentPage\"\n\t\t\t\t\t\t:rows-per-page=\"rowsPerPage\"\n\t\t\t\t\t\t@update:current-page=\"setCurrentPage\"\n\t\t\t\t\t\t@update:rows-per-page=\"setRowsPerPage\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<template #row=\"{ columns, row }\">\n\t\t\t\t\t\t\t<slot :data=\"row\" :columns=\"columns\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</n8n-datatable>\n\t\t\t\t</div>\n\n\t\t\t\t<n8n-text v-else color=\"text-base\" size=\"medium\" data-test-id=\"resources-list-empty\">\n\t\t\t\t\t{{ i18n.baseText(`${resourceKey}.noResults` as BaseTextKey) }}\n\t\t\t\t</n8n-text>\n\n\t\t\t\t<slot name=\"postamble\" />\n\t\t\t</PageViewLayoutList>\n\t\t</template>\n\t</PageViewLayout>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, nextTick, ref, onMounted, watch } from 'vue';\nimport type { PropType } from 'vue';\n\nimport type { ProjectSharingData } from '@/types/projects.types';\nimport PageViewLayout from '@/components/layouts/PageViewLayout.vue';\nimport PageViewLayoutList from '@/components/layouts/PageViewLayoutList.vue';\nimport ResourceFiltersDropdown from '@/components/forms/ResourceFiltersDropdown.vue';\nimport { useUsersStore } from '@/stores/users.store';\nimport type { DatatableColumn } from 'n8n-design-system';\nimport { useI18n } from '@/composables/useI18n';\nimport { useDebounce } from '@/composables/useDebounce';\nimport { useTelemetry } from '@/composables/useTelemetry';\nimport { useRoute } from 'vue-router';\n\n// eslint-disable-next-line unused-imports/no-unused-imports, @typescript-eslint/no-unused-vars\nimport type { BaseTextKey } from '@/plugins/i18n';\nimport type { Scope } from '@n8n/permissions';\n\nexport type IResource = {\n\tid: string;\n\tname: string;\n\tvalue: string;\n\tupdatedAt?: string;\n\tcreatedAt?: string;\n\thomeProject?: ProjectSharingData;\n\tscopes?: Scope[];\n\ttype?: string;\n\tsharedWithProjects?: ProjectSharingData[];\n};\n\ninterface IFilters {\n\tsearch: string;\n\thomeProject: string;\n\t[key: string]: boolean | string | string[];\n}\n\ntype IResourceKeyType = 'credentials' | 'workflows';\n\nexport default defineComponent({\n\tname: 'ResourcesListLayout',\n\tcomponents: {\n\t\tPageViewLayout,\n\t\tPageViewLayoutList,\n\t\tResourceFiltersDropdown,\n\t},\n\tprops: {\n\t\tresourceKey: {\n\t\t\ttype: String,\n\t\t\tdefault: '' as IResourceKeyType,\n\t\t},\n\t\tdisplayName: {\n\t\t\ttype: Function as PropType<(resource: IResource) => string>,\n\t\t\tdefault: (resource: IResource) => resource.name,\n\t\t},\n\t\tresources: {\n\t\t\ttype: Array as PropType<IResource[]>,\n\t\t\tdefault: (): IResource[] => [],\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tinitialize: {\n\t\t\ttype: Function as PropType<() => Promise<void>>,\n\t\t\tdefault: () => async () => {},\n\t\t},\n\t\tfilters: {\n\t\t\ttype: Object,\n\t\t\tdefault: (): IFilters => ({ search: '', homeProject: '' }),\n\t\t},\n\t\tadditionalFiltersHandler: {\n\t\t\ttype: Function,\n\t\t\trequired: false,\n\t\t\tdefault: undefined,\n\t\t},\n\t\tshareable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tshowFiltersDropdown: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tsortFns: {\n\t\t\ttype: Object as PropType<Record<string, (a: IResource, b: IResource) => number>>,\n\t\t\tdefault: (): Record<string, (a: IResource, b: IResource) => number> => ({}),\n\t\t},\n\t\tsortOptions: {\n\t\t\ttype: Array as PropType<string[]>,\n\t\t\tdefault: () => ['lastUpdated', 'lastCreated', 'nameAsc', 'nameDesc'],\n\t\t},\n\t\ttype: {\n\t\t\ttype: String as PropType<'datatable' | 'list'>,\n\t\t\tdefault: 'list',\n\t\t},\n\t\ttypeProps: {\n\t\t\ttype: Object as PropType<{ itemSize: number } | { columns: DatatableColumn[] }>,\n\t\t\tdefault: () => ({\n\t\t\t\titemSize: 80,\n\t\t\t}),\n\t\t},\n\t},\n\temits: ['update:filters', 'click:add', 'sort'],\n\tsetup(props, { emit }) {\n\t\tconst route = useRoute();\n\t\tconst i18n = useI18n();\n\t\tconst { callDebounced } = useDebounce();\n\t\tconst usersStore = useUsersStore();\n\t\tconst telemetry = useTelemetry();\n\n\t\tconst loading = ref(true);\n\t\tconst sortBy = ref(props.sortOptions[0]);\n\t\tconst hasFilters = ref(false);\n\t\tconst filtersModel = ref(props.filters);\n\t\tconst currentPage = ref(1);\n\t\tconst rowsPerPage = ref<number>(10);\n\t\tconst resettingFilters = ref(false);\n\t\tconst search = ref<HTMLElement | null>(null);\n\n\t\t//computed\n\n\t\tconst filterKeys = computed(() => {\n\t\t\treturn Object.keys(filtersModel.value);\n\t\t});\n\n\t\tconst filteredAndSortedResources = computed(() => {\n\t\t\tconst filtered = props.resources.filter((resource) => {\n\t\t\t\tlet matches = true;\n\n\t\t\t\tif (filtersModel.value.homeProject) {\n\t\t\t\t\tmatches =\n\t\t\t\t\t\tmatches &&\n\t\t\t\t\t\t!!(resource.homeProject && resource.homeProject.id === filtersModel.value.homeProject);\n\t\t\t\t}\n\n\t\t\t\tif (filtersModel.value.search) {\n\t\t\t\t\tconst searchString = filtersModel.value.search.toLowerCase();\n\t\t\t\t\tmatches = matches && props.displayName(resource).toLowerCase().includes(searchString);\n\t\t\t\t}\n\n\t\t\t\tif (props.additionalFiltersHandler) {\n\t\t\t\t\tmatches = props.additionalFiltersHandler(resource, filtersModel.value, matches);\n\t\t\t\t}\n\n\t\t\t\treturn matches;\n\t\t\t});\n\n\t\t\treturn filtered.sort((a, b) => {\n\t\t\t\tswitch (sortBy.value) {\n\t\t\t\t\tcase 'lastUpdated':\n\t\t\t\t\t\treturn props.sortFns.lastUpdated\n\t\t\t\t\t\t\t? props.sortFns.lastUpdated(a, b)\n\t\t\t\t\t\t\t: new Date(b.updatedAt ?? '').valueOf() - new Date(a.updatedAt ?? '').valueOf();\n\t\t\t\t\tcase 'lastCreated':\n\t\t\t\t\t\treturn props.sortFns.lastCreated\n\t\t\t\t\t\t\t? props.sortFns.lastCreated(a, b)\n\t\t\t\t\t\t\t: new Date(b.createdAt ?? '').valueOf() - new Date(a.createdAt ?? '').valueOf();\n\t\t\t\t\tcase 'nameAsc':\n\t\t\t\t\t\treturn props.sortFns.nameAsc\n\t\t\t\t\t\t\t? props.sortFns.nameAsc(a, b)\n\t\t\t\t\t\t\t: props.displayName(a).trim().localeCompare(props.displayName(b).trim());\n\t\t\t\t\tcase 'nameDesc':\n\t\t\t\t\t\treturn props.sortFns.nameDesc\n\t\t\t\t\t\t\t? props.sortFns.nameDesc(a, b)\n\t\t\t\t\t\t\t: props.displayName(b).trim().localeCompare(props.displayName(a).trim());\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn props.sortFns[sortBy.value] ? props.sortFns[sortBy.value](a, b) : 0;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t//methods\n\n\t\tconst focusSearchInput = () => {\n\t\t\tif (search.value) {\n\t\t\t\tsearch.value.focus();\n\t\t\t}\n\t\t};\n\n\t\tconst hasAppliedFilters = (): boolean => {\n\t\t\treturn !!filterKeys.value.find(\n\t\t\t\t(key) =>\n\t\t\t\t\tkey !== 'search' &&\n\t\t\t\t\t(Array.isArray(props.filters[key])\n\t\t\t\t\t\t? props.filters[key].length > 0\n\t\t\t\t\t\t: props.filters[key] !== ''),\n\t\t\t);\n\t\t};\n\n\t\tconst setRowsPerPage = (numberOfRowsPerPage: number) => {\n\t\t\trowsPerPage.value = numberOfRowsPerPage;\n\t\t};\n\n\t\tconst setCurrentPage = (page: number) => {\n\t\t\tcurrentPage.value = page;\n\t\t};\n\n\t\tconst sendFiltersTelemetry = (source: string) => {\n\t\t\t// Prevent sending multiple telemetry events when resetting filters\n\t\t\t// Timeout is required to wait for search debounce to be over\n\t\t\tif (resettingFilters.value) {\n\t\t\t\tif (source !== 'reset') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsetTimeout(() => (resettingFilters.value = false), 1500);\n\t\t\t}\n\n\t\t\tconst filters = filtersModel.value as Record<string, string[] | string | boolean>;\n\t\t\tconst filtersSet: string[] = [];\n\t\t\tconst filterValues: Array<string[] | string | boolean | null> = [];\n\n\t\t\tObject.keys(filters).forEach((key) => {\n\t\t\t\tif (filters[key]) {\n\t\t\t\t\tfiltersSet.push(key);\n\t\t\t\t\tfilterValues.push(key === 'search' ? null : filters[key]);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\ttelemetry.track(`User set filters in ${props.resourceKey} list`, {\n\t\t\t\tfilters_set: filtersSet,\n\t\t\t\tfilter_values: filterValues,\n\t\t\t\t[`${props.resourceKey}_total_in_view`]: props.resources.length,\n\t\t\t\t[`${props.resourceKey}_after_filtering`]: filteredAndSortedResources.value.length,\n\t\t\t});\n\t\t};\n\n\t\tconst onAddButtonClick = (e: Event) => {\n\t\t\temit('click:add', e);\n\t\t};\n\n\t\tconst onUpdateFilters = (e: Event) => {\n\t\t\temit('update:filters', e);\n\t\t};\n\n\t\tconst resetFilters = () => {\n\t\t\tObject.keys(filtersModel.value).forEach((key) => {\n\t\t\t\tfiltersModel.value[key] = Array.isArray(filtersModel.value[key]) ? [] : '';\n\t\t\t});\n\n\t\t\tresettingFilters.value = true;\n\t\t\tsendFiltersTelemetry('reset');\n\t\t\temit('update:filters', filtersModel.value);\n\t\t};\n\n\t\tconst itemSize = () => {\n\t\t\tif ('itemSize' in props.typeProps) {\n\t\t\t\treturn props.typeProps.itemSize;\n\t\t\t}\n\t\t\treturn 0;\n\t\t};\n\n\t\tconst getColumns = () => {\n\t\t\tif ('columns' in props.typeProps) {\n\t\t\t\treturn props.typeProps.columns;\n\t\t\t}\n\t\t\treturn {};\n\t\t};\n\n\t\tconst sendSortingTelemetry = () => {\n\t\t\ttelemetry.track(`User changed sorting in ${props.resourceKey} list`, {\n\t\t\t\tsorting: sortBy.value,\n\t\t\t});\n\t\t};\n\n\t\tconst onUpdateFiltersLength = (length: number) => {\n\t\t\thasFilters.value = length > 0;\n\t\t};\n\n\t\tconst onSearch = (s: string) => {\n\t\t\tfiltersModel.value.search = s;\n\t\t\temit('update:filters', filtersModel.value);\n\t\t};\n\n\t\t//watchers\n\n\t\twatch(\n\t\t\t() => props.filters,\n\t\t\t(value) => {\n\t\t\t\tfiltersModel.value = value;\n\t\t\t},\n\t\t);\n\n\t\twatch(\n\t\t\t() => filtersModel.value.homeProject,\n\t\t\t() => {\n\t\t\t\tsendFiltersTelemetry('homeProject');\n\t\t\t},\n\t\t);\n\n\t\twatch(\n\t\t\t() => filtersModel.value.search,\n\t\t\t() => callDebounced(sendFiltersTelemetry, { debounceTime: 1000, trailing: true }, 'search'),\n\t\t);\n\n\t\twatch(\n\t\t\t() => sortBy.value,\n\t\t\t(newValue) => {\n\t\t\t\temit('sort', newValue);\n\t\t\t\tsendSortingTelemetry();\n\t\t\t},\n\t\t);\n\n\t\twatch(\n\t\t\t() => route?.params?.projectId,\n\t\t\t() => {\n\t\t\t\tresetFilters();\n\t\t\t},\n\t\t);\n\n\t\tonMounted(async () => {\n\t\t\tawait props.initialize();\n\t\t\tloading.value = false;\n\t\t\tawait nextTick();\n\n\t\t\tfocusSearchInput();\n\n\t\t\tif (hasAppliedFilters()) {\n\t\t\t\thasFilters.value = true;\n\t\t\t}\n\t\t});\n\n\t\treturn {\n\t\t\tloading,\n\t\t\ti18n,\n\t\t\tsearch,\n\t\t\tusersStore,\n\t\t\tfilterKeys,\n\t\t\tcurrentPage,\n\t\t\trowsPerPage,\n\t\t\tfilteredAndSortedResources,\n\t\t\thasFilters,\n\t\t\tsortBy,\n\t\t\tresettingFilters,\n\t\t\tfiltersModel,\n\t\t\tsendFiltersTelemetry,\n\t\t\tgetColumns,\n\t\t\titemSize,\n\t\t\tonAddButtonClick,\n\t\t\tonUpdateFiltersLength,\n\t\t\tonUpdateFilters,\n\t\t\tresetFilters,\n\t\t\tcallDebounced,\n\t\t\tsetCurrentPage,\n\t\t\tsetRowsPerPage,\n\t\t\tonSearch,\n\t\t};\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.filters-row {\n\tdisplay: flex;\n\tflex-direction: row;\n\talign-items: center;\n\tjustify-content: space-between;\n}\n\n.filters {\n\tdisplay: grid;\n\tgrid-auto-flow: column;\n\tgrid-auto-columns: max-content;\n\tgap: var(--spacing-2xs);\n\talign-items: center;\n}\n\n.search {\n\tmax-width: 240px;\n}\n\n.listWrapper {\n\tposition: absolute;\n\theight: 100%;\n\twidth: 100%;\n}\n\n.sort-and-filter {\n\twhite-space: nowrap;\n}\n\n.header-loading {\n\theight: 36px;\n}\n\n.card-loading {\n\theight: 69px;\n}\n\n.datatable {\n\tpadding-bottom: var(--spacing-s);\n}\n</style>\n"],"names":["_sfc_main$3","defineComponent","mapStores","useUIStore","_sfc_render","_ctx","$style","$setup","$data","$options","_normalizeClass","_renderSlot","_sfc_main$2","_cache","$slots","_openBlock","_createElementBlock","_createCommentVNode","_sfc_main$1","ProjectSharing","EnterpriseEditionFeature","useProjectsStore","length","key","value","project","filters","_resolveComponent","_createBlock","_component_n8n_popover","_withCtx","_createVNode","_component_n8n_button","_withDirectives","_component_n8n_badge","_createTextVNode","_toDisplayString","_vShow","_createElementVNode","setKeyValue","shareable","projectsStore","_component_enterprise_edition","$locale","_component_n8n_input_label","selectedProject","_component_ProjectSharing","$event","resetFilters","_component_n8n_link","_sfc_main","PageViewLayout","PageViewLayoutList","ResourceFiltersDropdown","resource","props","emit","route","useRoute","i18n","useI18n","callDebounced","useDebounce","usersStore","useUsersStore","telemetry","useTelemetry","loading","ref","sortBy","hasFilters","filtersModel","currentPage","rowsPerPage","resettingFilters","search","filterKeys","computed","filteredAndSortedResources","matches","searchString","a","b","focusSearchInput","hasAppliedFilters","setRowsPerPage","numberOfRowsPerPage","setCurrentPage","page","sendFiltersTelemetry","source","filtersSet","filterValues","onAddButtonClick","e","onUpdateFilters","itemSize","getColumns","sendSortingTelemetry","onUpdateFiltersLength","onSearch","s","watch","newValue","_a","onMounted","nextTick","_hoisted_2","_hoisted_3","_component_PageViewLayout","_hoisted_1","_component_n8n_loading","_Fragment","_component_n8n_action_box","resourceKey","_component_PageViewLayoutList","_component_n8n_input","_component_n8n_icon","showFiltersDropdown","_component_ResourceFiltersDropdown","_normalizeProps","_guardReactiveProps","resourceFiltersSlotProps","_component_n8n_select","_renderList","sortOption","_component_n8n_option","disabled","_component_n8n_info_tip","_hoisted_4","type","_component_n8n_recycle_scroller","item","updateItemSize","_component_n8n_datatable","columns","row","_component_n8n_text"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ResourcesListLayout-B4W1PSHT.js","sources":["../../src/components/layouts/PageViewLayout.vue","../../src/components/layouts/PageViewLayoutList.vue","../../src/components/forms/ResourceFiltersDropdown.vue","../../src/components/layouts/ResourcesListLayout.vue"],"sourcesContent":["<template>\n\t<div :class=\"$style.wrapper\">\n\t\t<slot name=\"header\" />\n\t\t<main :class=\"$style.content\">\n\t\t\t<slot />\n\t\t</main>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { mapStores } from 'pinia';\nimport { useUIStore } from '@/stores/ui.store';\n\nexport default defineComponent({\n\tname: 'PageViewLayout',\n\tdata() {\n\t\treturn {\n\t\t\tloading: false,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useUIStore),\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.wrapper {\n\tdisplay: grid;\n\theight: 100%;\n\twidth: 100%;\n\tmax-width: 1280px;\n\tgrid-template-rows: auto 1fr;\n\tbox-sizing: border-box;\n\talign-content: start;\n\tpadding: var(--spacing-l) var(--spacing-2xl) 0;\n}\n\n.content {\n\tdisplay: grid;\n\theight: 100%;\n}\n</style>\n","<script lang=\"ts\">\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n\tprops: {\n\t\toverflow: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n});\n</script>\n\n<template>\n\t<div :class=\"{ [$style.wrapper]: true, [$style.overflow]: overflow }\">\n\t\t<div :class=\"$style.list\">\n\t\t\t<div v-if=\"$slots.header\" :class=\"$style.header\">\n\t\t\t\t<slot name=\"header\" />\n\t\t\t</div>\n\t\t\t<div :class=\"$style.body\">\n\t\t\t\t<slot />\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<style lang=\"scss\" module>\n.wrapper {\n\tdisplay: grid;\n\theight: 100%;\n}\n\n.overflow {\n\t.list {\n\t\t.body {\n\t\t\toverflow: auto;\n\t\t}\n\t}\n}\n\n.list {\n\tdisplay: grid;\n\tgrid-template-rows: auto 1fr;\n\theight: 100%;\n\t.body {\n\t\tposition: relative;\n\t\theight: 100%;\n\t}\n}\n</style>\n","<template>\n\t<n8n-popover trigger=\"click\" width=\"304\" size=\"large\">\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=\"hasFilters\"\n\t\t\t\t:class=\"$style['filter-button']\"\n\t\t\t\tdata-test-id=\"resources-list-filters-trigger\"\n\t\t\t>\n\t\t\t\t<n8n-badge v-show=\"filtersLength > 0\" theme=\"primary\" class=\"mr-4xs\">\n\t\t\t\t\t{{ filtersLength }}\n\t\t\t\t</n8n-badge>\n\t\t\t\t{{ $locale.baseText('forms.resourceFiltersDropdown.filters') }}\n\t\t\t</n8n-button>\n\t\t</template>\n\t\t<div :class=\"$style['filters-dropdown']\" data-test-id=\"resources-list-filters-dropdown\">\n\t\t\t<slot :filters=\"modelValue\" :set-key-value=\"setKeyValue\" />\n\t\t\t<enterprise-edition\n\t\t\t\tv-if=\"shareable && projectsStore.isProjectHome\"\n\t\t\t\t:features=\"[EnterpriseEditionFeature.Sharing]\"\n\t\t\t>\n\t\t\t\t<n8n-input-label\n\t\t\t\t\t:label=\"$locale.baseText('forms.resourceFiltersDropdown.owner')\"\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<ProjectSharing\n\t\t\t\t\tv-model=\"selectedProject\"\n\t\t\t\t\tclass=\"pt-2xs\"\n\t\t\t\t\t:projects=\"projectsStore.projects\"\n\t\t\t\t\t:placeholder=\"$locale.baseText('forms.resourceFiltersDropdown.owner.placeholder')\"\n\t\t\t\t\t:empty-options-text=\"$locale.baseText('projects.sharing.noMatchingProjects')\"\n\t\t\t\t\t@update:model-value=\"setKeyValue('homeProject', ($event as ProjectSharingData).id)\"\n\t\t\t\t/>\n\t\t\t</enterprise-edition>\n\t\t\t<div v-if=\"hasFilters\" :class=\"[$style['filters-dropdown-footer'], 'mt-s']\">\n\t\t\t\t<n8n-link @click=\"resetFilters\">\n\t\t\t\t\t{{ $locale.baseText('forms.resourceFiltersDropdown.reset') }}\n\t\t\t\t</n8n-link>\n\t\t\t</div>\n\t\t</div>\n\t</n8n-popover>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport { EnterpriseEditionFeature } from '@/constants';\nimport { mapStores } from 'pinia';\nimport { useProjectsStore } from '@/stores/projects.store';\nimport type { PropType } from 'vue';\nimport type { ProjectSharingData } from '@/types/projects.types';\nimport ProjectSharing from '@/components/Projects/ProjectSharing.vue';\n\nexport type IResourceFiltersType = Record<string, boolean | string | string[]>;\n\nexport default defineComponent({\n\tcomponents: {\n\t\tProjectSharing,\n\t},\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: Object as PropType<IResourceFiltersType>,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t\tkeys: {\n\t\t\ttype: Array as PropType<string[]>,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tshareable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\treset: {\n\t\t\ttype: Function as PropType<() => void>,\n\t\t\tdefault: () => {},\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tEnterpriseEditionFeature,\n\t\t\tselectedProject: null as ProjectSharingData | null,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useProjectsStore),\n\t\tfiltersLength(): number {\n\t\t\tlet length = 0;\n\n\t\t\tthis.keys.forEach((key) => {\n\t\t\t\tif (key === 'search') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst value = this.modelValue[key];\n\t\t\t\tlength += (Array.isArray(value) ? value.length > 0 : value !== '') ? 1 : 0;\n\t\t\t});\n\n\t\t\treturn length;\n\t\t},\n\t\thasFilters(): boolean {\n\t\t\treturn this.filtersLength > 0;\n\t\t},\n\t},\n\twatch: {\n\t\tfiltersLength(value: number) {\n\t\t\tthis.$emit('update:filtersLength', value);\n\t\t},\n\t},\n\tasync beforeMount() {\n\t\tawait this.projectsStore.getAllProjects();\n\t\tthis.selectedProject =\n\t\t\tthis.projectsStore.projects.find((project) => project.id === this.modelValue.homeProject) ??\n\t\t\tnull;\n\t},\n\tmethods: {\n\t\tsetKeyValue(key: string, value: unknown) {\n\t\t\tconst filters = {\n\t\t\t\t...this.modelValue,\n\t\t\t\t[key]: value,\n\t\t\t};\n\n\t\t\tthis.$emit('update:modelValue', filters);\n\t\t},\n\t\tresetFilters() {\n\t\t\tif (this.reset) {\n\t\t\t\tthis.reset();\n\t\t\t} else {\n\t\t\t\tconst filters = { ...this.modelValue };\n\n\t\t\t\tthis.keys.forEach((key) => {\n\t\t\t\t\tfilters[key] = Array.isArray(this.modelValue[key]) ? [] : '';\n\t\t\t\t});\n\n\t\t\t\tthis.$emit('update:modelValue', filters);\n\t\t\t}\n\t\t\tthis.selectedProject = null;\n\t\t},\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.filter-button {\n\theight: 40px;\n\talign-items: center;\n}\n\n.filters-dropdown {\n\twidth: 280px;\n\tpadding-bottom: var(--spacing-s);\n}\n\n.filters-dropdown-footer {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n}\n</style>\n","<template>\n\t<PageViewLayout>\n\t\t<template #header> <slot name=\"header\" /> </template>\n\t\t<div v-if=\"loading\">\n\t\t\t<n8n-loading :class=\"[$style['header-loading'], 'mb-l']\" variant=\"custom\" />\n\t\t\t<n8n-loading :class=\"[$style['card-loading'], 'mb-2xs']\" variant=\"custom\" />\n\t\t\t<n8n-loading :class=\"$style['card-loading']\" variant=\"custom\" />\n\t\t</div>\n\t\t<template v-else>\n\t\t\t<div v-if=\"resources.length === 0\">\n\t\t\t\t<slot name=\"empty\">\n\t\t\t\t\t<n8n-action-box\n\t\t\t\t\t\tdata-test-id=\"empty-resources-list\"\n\t\t\t\t\t\temoji=\"👋\"\n\t\t\t\t\t\t:heading=\"\n\t\t\t\t\t\t\ti18n.baseText(\n\t\t\t\t\t\t\t\tusersStore.currentUser?.firstName\n\t\t\t\t\t\t\t\t\t? (`${resourceKey}.empty.heading` as BaseTextKey)\n\t\t\t\t\t\t\t\t\t: (`${resourceKey}.empty.heading.userNotSetup` as BaseTextKey),\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tinterpolate: { name: usersStore.currentUser?.firstName ?? '' },\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\"\n\t\t\t\t\t\t:description=\"i18n.baseText(`${resourceKey}.empty.description` as BaseTextKey)\"\n\t\t\t\t\t\t:button-text=\"i18n.baseText(`${resourceKey}.empty.button` as BaseTextKey)\"\n\t\t\t\t\t\tbutton-type=\"secondary\"\n\t\t\t\t\t\t@click:button=\"onAddButtonClick\"\n\t\t\t\t\t/>\n\t\t\t\t</slot>\n\t\t\t</div>\n\t\t\t<PageViewLayoutList v-else :overflow=\"type !== 'list'\">\n\t\t\t\t<template #header>\n\t\t\t\t\t<div :class=\"$style['filters-row']\">\n\t\t\t\t\t\t<div :class=\"$style.filters\">\n\t\t\t\t\t\t\t<n8n-input\n\t\t\t\t\t\t\t\tref=\"search\"\n\t\t\t\t\t\t\t\t:model-value=\"filtersModel.search\"\n\t\t\t\t\t\t\t\t:class=\"[$style['search'], 'mr-2xs']\"\n\t\t\t\t\t\t\t\t:placeholder=\"i18n.baseText(`${resourceKey}.search.placeholder` as BaseTextKey)\"\n\t\t\t\t\t\t\t\tclearable\n\t\t\t\t\t\t\t\tdata-test-id=\"resources-list-search\"\n\t\t\t\t\t\t\t\t@update:model-value=\"onSearch\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<template #prefix>\n\t\t\t\t\t\t\t\t\t<n8n-icon icon=\"search\" />\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t</n8n-input>\n\t\t\t\t\t\t\t<ResourceFiltersDropdown\n\t\t\t\t\t\t\t\tv-if=\"showFiltersDropdown\"\n\t\t\t\t\t\t\t\t:keys=\"filterKeys\"\n\t\t\t\t\t\t\t\t:reset=\"resetFilters\"\n\t\t\t\t\t\t\t\t:model-value=\"filtersModel\"\n\t\t\t\t\t\t\t\t:shareable=\"shareable\"\n\t\t\t\t\t\t\t\t@update:model-value=\"onUpdateFilters\"\n\t\t\t\t\t\t\t\t@update:filters-length=\"onUpdateFiltersLength\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<template #default=\"resourceFiltersSlotProps\">\n\t\t\t\t\t\t\t\t\t<slot name=\"filters\" v-bind=\"resourceFiltersSlotProps\" />\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t</ResourceFiltersDropdown>\n\t\t\t\t\t\t\t<div :class=\"$style['sort-and-filter']\">\n\t\t\t\t\t\t\t\t<n8n-select v-model=\"sortBy\" data-test-id=\"resources-list-sort\">\n\t\t\t\t\t\t\t\t\t<n8n-option\n\t\t\t\t\t\t\t\t\t\tv-for=\"sortOption in sortOptions\"\n\t\t\t\t\t\t\t\t\t\t:key=\"sortOption\"\n\t\t\t\t\t\t\t\t\t\tdata-test-id=\"resources-list-sort-item\"\n\t\t\t\t\t\t\t\t\t\t:value=\"sortOption\"\n\t\t\t\t\t\t\t\t\t\t:label=\"i18n.baseText(`${resourceKey}.sort.${sortOption}` as BaseTextKey)\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</n8n-select>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<slot name=\"add-button\" :disabled=\"disabled\">\n\t\t\t\t\t\t\t<n8n-button\n\t\t\t\t\t\t\t\tsize=\"large\"\n\t\t\t\t\t\t\t\t:disabled=\"disabled\"\n\t\t\t\t\t\t\t\tdata-test-id=\"resources-list-add\"\n\t\t\t\t\t\t\t\t@click=\"onAddButtonClick\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{{ i18n.baseText(`${resourceKey}.add` as BaseTextKey) }}\n\t\t\t\t\t\t\t</n8n-button>\n\t\t\t\t\t\t</slot>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<slot name=\"callout\"></slot>\n\n\t\t\t\t\t<div v-if=\"showFiltersDropdown\" v-show=\"hasFilters\" class=\"mt-xs\">\n\t\t\t\t\t\t<n8n-info-tip :bold=\"false\">\n\t\t\t\t\t\t\t{{ i18n.baseText(`${resourceKey}.filters.active` as BaseTextKey) }}\n\t\t\t\t\t\t\t<n8n-link data-test-id=\"workflows-filter-reset\" size=\"small\" @click=\"resetFilters\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText(`${resourceKey}.filters.active.reset` as BaseTextKey) }}\n\t\t\t\t\t\t\t</n8n-link>\n\t\t\t\t\t\t</n8n-info-tip>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div class=\"pb-xs\" />\n\t\t\t\t</template>\n\n\t\t\t\t<slot name=\"preamble\" />\n\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"filteredAndSortedResources.length > 0\"\n\t\t\t\t\tref=\"listWrapperRef\"\n\t\t\t\t\t:class=\"$style.listWrapper\"\n\t\t\t\t>\n\t\t\t\t\t<n8n-recycle-scroller\n\t\t\t\t\t\tv-if=\"type === 'list'\"\n\t\t\t\t\t\tdata-test-id=\"resources-list\"\n\t\t\t\t\t\t:items=\"filteredAndSortedResources\"\n\t\t\t\t\t\t:item-size=\"itemSize()\"\n\t\t\t\t\t\titem-key=\"id\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<template #default=\"{ item, updateItemSize }\">\n\t\t\t\t\t\t\t<slot :data=\"item\" :update-item-size=\"updateItemSize\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</n8n-recycle-scroller>\n\t\t\t\t\t<n8n-datatable\n\t\t\t\t\t\tv-if=\"type === 'datatable'\"\n\t\t\t\t\t\tdata-test-id=\"resources-table\"\n\t\t\t\t\t\t:class=\"$style.datatable\"\n\t\t\t\t\t\t:columns=\"getColumns()\"\n\t\t\t\t\t\t:rows=\"filteredAndSortedResources\"\n\t\t\t\t\t\t:current-page=\"currentPage\"\n\t\t\t\t\t\t:rows-per-page=\"rowsPerPage\"\n\t\t\t\t\t\t@update:current-page=\"setCurrentPage\"\n\t\t\t\t\t\t@update:rows-per-page=\"setRowsPerPage\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<template #row=\"{ columns, row }\">\n\t\t\t\t\t\t\t<slot :data=\"row\" :columns=\"columns\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</n8n-datatable>\n\t\t\t\t</div>\n\n\t\t\t\t<n8n-text v-else color=\"text-base\" size=\"medium\" data-test-id=\"resources-list-empty\">\n\t\t\t\t\t{{ i18n.baseText(`${resourceKey}.noResults` as BaseTextKey) }}\n\t\t\t\t</n8n-text>\n\n\t\t\t\t<slot name=\"postamble\" />\n\t\t\t</PageViewLayoutList>\n\t\t</template>\n\t</PageViewLayout>\n</template>\n\n<script lang=\"ts\">\nimport { computed, defineComponent, nextTick, ref, onMounted, watch } from 'vue';\nimport type { PropType } from 'vue';\n\nimport type { ProjectSharingData } from '@/types/projects.types';\nimport PageViewLayout from '@/components/layouts/PageViewLayout.vue';\nimport PageViewLayoutList from '@/components/layouts/PageViewLayoutList.vue';\nimport ResourceFiltersDropdown from '@/components/forms/ResourceFiltersDropdown.vue';\nimport { useUsersStore } from '@/stores/users.store';\nimport type { DatatableColumn } from 'n8n-design-system';\nimport { useI18n } from '@/composables/useI18n';\nimport { useDebounce } from '@/composables/useDebounce';\nimport { useTelemetry } from '@/composables/useTelemetry';\nimport { useRoute } from 'vue-router';\n\n// eslint-disable-next-line unused-imports/no-unused-imports, @typescript-eslint/no-unused-vars\nimport type { BaseTextKey } from '@/plugins/i18n';\nimport type { Scope } from '@n8n/permissions';\n\nexport type IResource = {\n\tid: string;\n\tname: string;\n\tvalue: string;\n\tupdatedAt?: string;\n\tcreatedAt?: string;\n\thomeProject?: ProjectSharingData;\n\tscopes?: Scope[];\n\ttype?: string;\n\tsharedWithProjects?: ProjectSharingData[];\n};\n\ninterface IFilters {\n\tsearch: string;\n\thomeProject: string;\n\t[key: string]: boolean | string | string[];\n}\n\ntype IResourceKeyType = 'credentials' | 'workflows';\n\nexport default defineComponent({\n\tname: 'ResourcesListLayout',\n\tcomponents: {\n\t\tPageViewLayout,\n\t\tPageViewLayoutList,\n\t\tResourceFiltersDropdown,\n\t},\n\tprops: {\n\t\tresourceKey: {\n\t\t\ttype: String,\n\t\t\tdefault: '' as IResourceKeyType,\n\t\t},\n\t\tdisplayName: {\n\t\t\ttype: Function as PropType<(resource: IResource) => string>,\n\t\t\tdefault: (resource: IResource) => resource.name,\n\t\t},\n\t\tresources: {\n\t\t\ttype: Array as PropType<IResource[]>,\n\t\t\tdefault: (): IResource[] => [],\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tinitialize: {\n\t\t\ttype: Function as PropType<() => Promise<void>>,\n\t\t\tdefault: () => async () => {},\n\t\t},\n\t\tfilters: {\n\t\t\ttype: Object,\n\t\t\tdefault: (): IFilters => ({ search: '', homeProject: '' }),\n\t\t},\n\t\tadditionalFiltersHandler: {\n\t\t\ttype: Function,\n\t\t\trequired: false,\n\t\t\tdefault: undefined,\n\t\t},\n\t\tshareable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tshowFiltersDropdown: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tsortFns: {\n\t\t\ttype: Object as PropType<Record<string, (a: IResource, b: IResource) => number>>,\n\t\t\tdefault: (): Record<string, (a: IResource, b: IResource) => number> => ({}),\n\t\t},\n\t\tsortOptions: {\n\t\t\ttype: Array as PropType<string[]>,\n\t\t\tdefault: () => ['lastUpdated', 'lastCreated', 'nameAsc', 'nameDesc'],\n\t\t},\n\t\ttype: {\n\t\t\ttype: String as PropType<'datatable' | 'list'>,\n\t\t\tdefault: 'list',\n\t\t},\n\t\ttypeProps: {\n\t\t\ttype: Object as PropType<{ itemSize: number } | { columns: DatatableColumn[] }>,\n\t\t\tdefault: () => ({\n\t\t\t\titemSize: 80,\n\t\t\t}),\n\t\t},\n\t},\n\temits: ['update:filters', 'click:add', 'sort'],\n\tsetup(props, { emit }) {\n\t\tconst route = useRoute();\n\t\tconst i18n = useI18n();\n\t\tconst { callDebounced } = useDebounce();\n\t\tconst usersStore = useUsersStore();\n\t\tconst telemetry = useTelemetry();\n\n\t\tconst loading = ref(true);\n\t\tconst sortBy = ref(props.sortOptions[0]);\n\t\tconst hasFilters = ref(false);\n\t\tconst filtersModel = ref(props.filters);\n\t\tconst currentPage = ref(1);\n\t\tconst rowsPerPage = ref<number>(10);\n\t\tconst resettingFilters = ref(false);\n\t\tconst search = ref<HTMLElement | null>(null);\n\n\t\t//computed\n\n\t\tconst filterKeys = computed(() => {\n\t\t\treturn Object.keys(filtersModel.value);\n\t\t});\n\n\t\tconst filteredAndSortedResources = computed(() => {\n\t\t\tconst filtered = props.resources.filter((resource) => {\n\t\t\t\tlet matches = true;\n\n\t\t\t\tif (filtersModel.value.homeProject) {\n\t\t\t\t\tmatches =\n\t\t\t\t\t\tmatches &&\n\t\t\t\t\t\t!!(resource.homeProject && resource.homeProject.id === filtersModel.value.homeProject);\n\t\t\t\t}\n\n\t\t\t\tif (filtersModel.value.search) {\n\t\t\t\t\tconst searchString = filtersModel.value.search.toLowerCase();\n\t\t\t\t\tmatches = matches && props.displayName(resource).toLowerCase().includes(searchString);\n\t\t\t\t}\n\n\t\t\t\tif (props.additionalFiltersHandler) {\n\t\t\t\t\tmatches = props.additionalFiltersHandler(resource, filtersModel.value, matches);\n\t\t\t\t}\n\n\t\t\t\treturn matches;\n\t\t\t});\n\n\t\t\treturn filtered.sort((a, b) => {\n\t\t\t\tswitch (sortBy.value) {\n\t\t\t\t\tcase 'lastUpdated':\n\t\t\t\t\t\treturn props.sortFns.lastUpdated\n\t\t\t\t\t\t\t? props.sortFns.lastUpdated(a, b)\n\t\t\t\t\t\t\t: new Date(b.updatedAt ?? '').valueOf() - new Date(a.updatedAt ?? '').valueOf();\n\t\t\t\t\tcase 'lastCreated':\n\t\t\t\t\t\treturn props.sortFns.lastCreated\n\t\t\t\t\t\t\t? props.sortFns.lastCreated(a, b)\n\t\t\t\t\t\t\t: new Date(b.createdAt ?? '').valueOf() - new Date(a.createdAt ?? '').valueOf();\n\t\t\t\t\tcase 'nameAsc':\n\t\t\t\t\t\treturn props.sortFns.nameAsc\n\t\t\t\t\t\t\t? props.sortFns.nameAsc(a, b)\n\t\t\t\t\t\t\t: props.displayName(a).trim().localeCompare(props.displayName(b).trim());\n\t\t\t\t\tcase 'nameDesc':\n\t\t\t\t\t\treturn props.sortFns.nameDesc\n\t\t\t\t\t\t\t? props.sortFns.nameDesc(a, b)\n\t\t\t\t\t\t\t: props.displayName(b).trim().localeCompare(props.displayName(a).trim());\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn props.sortFns[sortBy.value] ? props.sortFns[sortBy.value](a, b) : 0;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t//methods\n\n\t\tconst focusSearchInput = () => {\n\t\t\tif (search.value) {\n\t\t\t\tsearch.value.focus();\n\t\t\t}\n\t\t};\n\n\t\tconst hasAppliedFilters = (): boolean => {\n\t\t\treturn !!filterKeys.value.find(\n\t\t\t\t(key) =>\n\t\t\t\t\tkey !== 'search' &&\n\t\t\t\t\t(Array.isArray(props.filters[key])\n\t\t\t\t\t\t? props.filters[key].length > 0\n\t\t\t\t\t\t: props.filters[key] !== ''),\n\t\t\t);\n\t\t};\n\n\t\tconst setRowsPerPage = (numberOfRowsPerPage: number) => {\n\t\t\trowsPerPage.value = numberOfRowsPerPage;\n\t\t};\n\n\t\tconst setCurrentPage = (page: number) => {\n\t\t\tcurrentPage.value = page;\n\t\t};\n\n\t\tconst sendFiltersTelemetry = (source: string) => {\n\t\t\t// Prevent sending multiple telemetry events when resetting filters\n\t\t\t// Timeout is required to wait for search debounce to be over\n\t\t\tif (resettingFilters.value) {\n\t\t\t\tif (source !== 'reset') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsetTimeout(() => (resettingFilters.value = false), 1500);\n\t\t\t}\n\n\t\t\tconst filters = filtersModel.value as Record<string, string[] | string | boolean>;\n\t\t\tconst filtersSet: string[] = [];\n\t\t\tconst filterValues: Array<string[] | string | boolean | null> = [];\n\n\t\t\tObject.keys(filters).forEach((key) => {\n\t\t\t\tif (filters[key]) {\n\t\t\t\t\tfiltersSet.push(key);\n\t\t\t\t\tfilterValues.push(key === 'search' ? null : filters[key]);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\ttelemetry.track(`User set filters in ${props.resourceKey} list`, {\n\t\t\t\tfilters_set: filtersSet,\n\t\t\t\tfilter_values: filterValues,\n\t\t\t\t[`${props.resourceKey}_total_in_view`]: props.resources.length,\n\t\t\t\t[`${props.resourceKey}_after_filtering`]: filteredAndSortedResources.value.length,\n\t\t\t});\n\t\t};\n\n\t\tconst onAddButtonClick = (e: Event) => {\n\t\t\temit('click:add', e);\n\t\t};\n\n\t\tconst onUpdateFilters = (e: Event) => {\n\t\t\temit('update:filters', e);\n\t\t};\n\n\t\tconst resetFilters = () => {\n\t\t\tObject.keys(filtersModel.value).forEach((key) => {\n\t\t\t\tfiltersModel.value[key] = Array.isArray(filtersModel.value[key]) ? [] : '';\n\t\t\t});\n\n\t\t\tresettingFilters.value = true;\n\t\t\tsendFiltersTelemetry('reset');\n\t\t\temit('update:filters', filtersModel.value);\n\t\t};\n\n\t\tconst itemSize = () => {\n\t\t\tif ('itemSize' in props.typeProps) {\n\t\t\t\treturn props.typeProps.itemSize;\n\t\t\t}\n\t\t\treturn 0;\n\t\t};\n\n\t\tconst getColumns = () => {\n\t\t\tif ('columns' in props.typeProps) {\n\t\t\t\treturn props.typeProps.columns;\n\t\t\t}\n\t\t\treturn {};\n\t\t};\n\n\t\tconst sendSortingTelemetry = () => {\n\t\t\ttelemetry.track(`User changed sorting in ${props.resourceKey} list`, {\n\t\t\t\tsorting: sortBy.value,\n\t\t\t});\n\t\t};\n\n\t\tconst onUpdateFiltersLength = (length: number) => {\n\t\t\thasFilters.value = length > 0;\n\t\t};\n\n\t\tconst onSearch = (s: string) => {\n\t\t\tfiltersModel.value.search = s;\n\t\t\temit('update:filters', filtersModel.value);\n\t\t};\n\n\t\t//watchers\n\n\t\twatch(\n\t\t\t() => props.filters,\n\t\t\t(value) => {\n\t\t\t\tfiltersModel.value = value;\n\t\t\t},\n\t\t);\n\n\t\twatch(\n\t\t\t() => filtersModel.value.homeProject,\n\t\t\t() => {\n\t\t\t\tsendFiltersTelemetry('homeProject');\n\t\t\t},\n\t\t);\n\n\t\twatch(\n\t\t\t() => filtersModel.value.search,\n\t\t\t() => callDebounced(sendFiltersTelemetry, { debounceTime: 1000, trailing: true }, 'search'),\n\t\t);\n\n\t\twatch(\n\t\t\t() => sortBy.value,\n\t\t\t(newValue) => {\n\t\t\t\temit('sort', newValue);\n\t\t\t\tsendSortingTelemetry();\n\t\t\t},\n\t\t);\n\n\t\twatch(\n\t\t\t() => route?.params?.projectId,\n\t\t\t() => {\n\t\t\t\tresetFilters();\n\t\t\t},\n\t\t);\n\n\t\tonMounted(async () => {\n\t\t\tawait props.initialize();\n\t\t\tloading.value = false;\n\t\t\tawait nextTick();\n\n\t\t\tfocusSearchInput();\n\n\t\t\tif (hasAppliedFilters()) {\n\t\t\t\thasFilters.value = true;\n\t\t\t}\n\t\t});\n\n\t\treturn {\n\t\t\tloading,\n\t\t\ti18n,\n\t\t\tsearch,\n\t\t\tusersStore,\n\t\t\tfilterKeys,\n\t\t\tcurrentPage,\n\t\t\trowsPerPage,\n\t\t\tfilteredAndSortedResources,\n\t\t\thasFilters,\n\t\t\tsortBy,\n\t\t\tresettingFilters,\n\t\t\tfiltersModel,\n\t\t\tsendFiltersTelemetry,\n\t\t\tgetColumns,\n\t\t\titemSize,\n\t\t\tonAddButtonClick,\n\t\t\tonUpdateFiltersLength,\n\t\t\tonUpdateFilters,\n\t\t\tresetFilters,\n\t\t\tcallDebounced,\n\t\t\tsetCurrentPage,\n\t\t\tsetRowsPerPage,\n\t\t\tonSearch,\n\t\t};\n\t},\n});\n</script>\n\n<style lang=\"scss\" module>\n.filters-row {\n\tdisplay: flex;\n\tflex-direction: row;\n\talign-items: center;\n\tjustify-content: space-between;\n}\n\n.filters {\n\tdisplay: grid;\n\tgrid-auto-flow: column;\n\tgrid-auto-columns: max-content;\n\tgap: var(--spacing-2xs);\n\talign-items: center;\n}\n\n.search {\n\tmax-width: 240px;\n}\n\n.listWrapper {\n\tposition: absolute;\n\theight: 100%;\n\twidth: 100%;\n}\n\n.sort-and-filter {\n\twhite-space: nowrap;\n}\n\n.header-loading {\n\theight: 36px;\n}\n\n.card-loading {\n\theight: 69px;\n}\n\n.datatable {\n\tpadding-bottom: var(--spacing-s);\n}\n</style>\n"],"names":["_sfc_main$3","defineComponent","mapStores","useUIStore","_sfc_render","_ctx","$style","$setup","$data","$options","_normalizeClass","_renderSlot","_sfc_main$2","_cache","$slots","_openBlock","_createElementBlock","_createCommentVNode","_sfc_main$1","ProjectSharing","EnterpriseEditionFeature","useProjectsStore","length","key","value","project","filters","_resolveComponent","_createBlock","_component_n8n_popover","_withCtx","_createVNode","_component_n8n_button","_withDirectives","_component_n8n_badge","_createTextVNode","_toDisplayString","_vShow","_createElementVNode","setKeyValue","shareable","projectsStore","_component_enterprise_edition","$locale","_component_n8n_input_label","selectedProject","_component_ProjectSharing","$event","resetFilters","_component_n8n_link","_sfc_main","PageViewLayout","PageViewLayoutList","ResourceFiltersDropdown","resource","props","emit","route","useRoute","i18n","useI18n","callDebounced","useDebounce","usersStore","useUsersStore","telemetry","useTelemetry","loading","ref","sortBy","hasFilters","filtersModel","currentPage","rowsPerPage","resettingFilters","search","filterKeys","computed","filteredAndSortedResources","matches","searchString","a","b","focusSearchInput","hasAppliedFilters","setRowsPerPage","numberOfRowsPerPage","setCurrentPage","page","sendFiltersTelemetry","source","filtersSet","filterValues","onAddButtonClick","e","onUpdateFilters","itemSize","getColumns","sendSortingTelemetry","onUpdateFiltersLength","onSearch","s","watch","newValue","_a","onMounted","nextTick","_hoisted_2","_hoisted_3","_component_PageViewLayout","_hoisted_1","_component_n8n_loading","_Fragment","_component_n8n_action_box","resourceKey","_component_PageViewLayoutList","_component_n8n_input","_component_n8n_icon","showFiltersDropdown","_component_ResourceFiltersDropdown","_normalizeProps","_guardReactiveProps","resourceFiltersSlotProps","_component_n8n_select","_renderList","sortOption","_component_n8n_option","disabled","_component_n8n_info_tip","_hoisted_4","type","_component_n8n_recycle_scroller","item","updateItemSize","_component_n8n_datatable","columns","row","_component_n8n_text"],"mappings":"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"}
|