n8n-editor-ui 1.41.0 → 1.41.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/.turbo/turbo-build.log +61 -61
  2. package/dist/assets/{AuthView-E0Dwqa78.js → AuthView-CMX_-yPy.js} +2 -2
  3. package/dist/assets/{AuthView-E0Dwqa78.js.map → AuthView-CMX_-yPy.js.map} +1 -1
  4. package/dist/assets/{CanvasControls-yrXCY2V6.js → CanvasControls-9oKgZX9B.js} +2 -2
  5. package/dist/assets/{CanvasControls-yrXCY2V6.js.map → CanvasControls-9oKgZX9B.js.map} +1 -1
  6. package/dist/assets/{ChangePasswordView-kHBWSwn5.js → ChangePasswordView-GG3ESv5E.js} +2 -2
  7. package/dist/assets/{ChangePasswordView-kHBWSwn5.js.map → ChangePasswordView-GG3ESv5E.js.map} +1 -1
  8. package/dist/assets/{CollectionParameter-ZuNQUd29.js → CollectionParameter-1UnufhEZ.js} +2 -2
  9. package/dist/assets/CollectionParameter-1UnufhEZ.js.map +1 -0
  10. package/dist/assets/{CredentialsView-24rpr6nX.js → CredentialsView-TrGa_IpW.js} +2 -2
  11. package/dist/assets/{CredentialsView-24rpr6nX.js.map → CredentialsView-TrGa_IpW.js.map} +1 -1
  12. package/dist/assets/{ExecutionsFilter-RyBW2SgR.js → ExecutionsFilter-W0_jymTM.js} +2 -2
  13. package/dist/assets/{ExecutionsFilter-RyBW2SgR.js.map → ExecutionsFilter-W0_jymTM.js.map} +1 -1
  14. package/dist/assets/{ExecutionsView-NIusemYP.js → ExecutionsView-P-nSEBpq.js} +2 -2
  15. package/dist/assets/{ExecutionsView-NIusemYP.js.map → ExecutionsView-P-nSEBpq.js.map} +1 -1
  16. package/dist/assets/{ForgotMyPasswordView-ebrry8c_.js → ForgotMyPasswordView-_Ft-h_Xq.js} +2 -2
  17. package/dist/assets/{ForgotMyPasswordView-ebrry8c_.js.map → ForgotMyPasswordView-_Ft-h_Xq.js.map} +1 -1
  18. package/dist/assets/{MainHeader-JJIRXuyj.js → MainHeader-UFj-n8nH.js} +2 -2
  19. package/dist/assets/{MainHeader-JJIRXuyj.js.map → MainHeader-UFj-n8nH.js.map} +1 -1
  20. package/dist/assets/{MainSidebar-KnXGjnqU.js → MainSidebar-H7A2NfnT.js} +2 -2
  21. package/dist/assets/{MainSidebar-KnXGjnqU.js.map → MainSidebar-H7A2NfnT.js.map} +1 -1
  22. package/dist/assets/{NodeCreation-01VRbmJn.js → NodeCreation-MVULkw2n.js} +3 -3
  23. package/dist/assets/{NodeCreation-01VRbmJn.js.map → NodeCreation-MVULkw2n.js.map} +1 -1
  24. package/dist/assets/{NodeCreator-D_gQXSbT.js → NodeCreator-NjQetiNP.js} +2 -2
  25. package/dist/assets/{NodeCreator-D_gQXSbT.js.map → NodeCreator-NjQetiNP.js.map} +1 -1
  26. package/dist/assets/{NodeList-Ysq3Cjbn.js → NodeList-f4t5_e24.js} +2 -2
  27. package/dist/assets/{NodeList-Ysq3Cjbn.js.map → NodeList-f4t5_e24.js.map} +1 -1
  28. package/dist/assets/{NodeView-QjQV3eFX.js → NodeView-kA0j8oya.js} +4 -4
  29. package/dist/assets/{NodeView-QjQV3eFX.js.map → NodeView-kA0j8oya.js.map} +1 -1
  30. package/dist/assets/{RunDataAi-wbEK-oHX.js → RunDataAi-9Rk5nlrG.js} +2 -2
  31. package/dist/assets/{RunDataAi-wbEK-oHX.js.map → RunDataAi-9Rk5nlrG.js.map} +1 -1
  32. package/dist/assets/{RunDataJson-YtVT_k9o.js → RunDataJson-3HvvCXQv.js} +3 -3
  33. package/dist/assets/{RunDataJson-YtVT_k9o.js.map → RunDataJson-3HvvCXQv.js.map} +1 -1
  34. package/dist/assets/{RunDataJsonActions-dl7uUHxF.js → RunDataJsonActions-QVURaY0g.js} +2 -2
  35. package/dist/assets/{RunDataJsonActions-dl7uUHxF.js.map → RunDataJsonActions-QVURaY0g.js.map} +1 -1
  36. package/dist/assets/{RunDataSchema-zsup9Psk.js → RunDataSchema-8AcA4SSx.js} +2 -2
  37. package/dist/assets/{RunDataSchema-zsup9Psk.js.map → RunDataSchema-8AcA4SSx.js.map} +1 -1
  38. package/dist/assets/{RunDataTable-4PVwCliN.js → RunDataTable-aySP3LG2.js} +2 -2
  39. package/dist/assets/{RunDataTable-4PVwCliN.js.map → RunDataTable-aySP3LG2.js.map} +1 -1
  40. package/dist/assets/{SamlOnboarding-a7AOJSPY.js → SamlOnboarding-g5DOLc7y.js} +2 -2
  41. package/dist/assets/{SamlOnboarding-a7AOJSPY.js.map → SamlOnboarding-g5DOLc7y.js.map} +1 -1
  42. package/dist/assets/{SettingsApiView-MKVmxKrc.js → SettingsApiView-368bFhYh.js} +2 -2
  43. package/dist/assets/{SettingsApiView-MKVmxKrc.js.map → SettingsApiView-368bFhYh.js.map} +1 -1
  44. package/dist/assets/{SettingsCommunityNodesView-JSEAJRmQ.js → SettingsCommunityNodesView-4ma9ZrA6.js} +2 -2
  45. package/dist/assets/{SettingsCommunityNodesView-JSEAJRmQ.js.map → SettingsCommunityNodesView-4ma9ZrA6.js.map} +1 -1
  46. package/dist/assets/{SettingsExternalSecrets-LATcSwCb.js → SettingsExternalSecrets-anO5H_X6.js} +2 -2
  47. package/dist/assets/{SettingsExternalSecrets-LATcSwCb.js.map → SettingsExternalSecrets-anO5H_X6.js.map} +1 -1
  48. package/dist/assets/{SettingsFakeDoorView-JXYglIiV.js → SettingsFakeDoorView-DP8hJH_b.js} +2 -2
  49. package/dist/assets/{SettingsFakeDoorView-JXYglIiV.js.map → SettingsFakeDoorView-DP8hJH_b.js.map} +1 -1
  50. package/dist/assets/{SettingsLdapView-2qYzfmuL.js → SettingsLdapView-TVoyUgkx.js} +2 -2
  51. package/dist/assets/{SettingsLdapView-2qYzfmuL.js.map → SettingsLdapView-TVoyUgkx.js.map} +1 -1
  52. package/dist/assets/{SettingsLogStreamingView-Xc6EScgx.js → SettingsLogStreamingView-IIFjEkjs.js} +2 -2
  53. package/dist/assets/{SettingsLogStreamingView-Xc6EScgx.js.map → SettingsLogStreamingView-IIFjEkjs.js.map} +1 -1
  54. package/dist/assets/{SettingsSourceControl-Mb0LqGSl.js → SettingsSourceControl-1zDUY0dl.js} +2 -2
  55. package/dist/assets/{SettingsSourceControl-Mb0LqGSl.js.map → SettingsSourceControl-1zDUY0dl.js.map} +1 -1
  56. package/dist/assets/{SettingsSso-2YEXaMhF.js → SettingsSso-7dAOqmaA.js} +2 -2
  57. package/dist/assets/{SettingsSso-2YEXaMhF.js.map → SettingsSso-7dAOqmaA.js.map} +1 -1
  58. package/dist/assets/{SettingsUsageAndPlan-_C19BOT1.js → SettingsUsageAndPlan-0b_7OZCC.js} +2 -2
  59. package/dist/assets/{SettingsUsageAndPlan-_C19BOT1.js.map → SettingsUsageAndPlan-0b_7OZCC.js.map} +1 -1
  60. package/dist/assets/{SettingsUsersView-salH__qs.js → SettingsUsersView-0AZ_F16e.js} +2 -2
  61. package/dist/assets/{SettingsUsersView-salH__qs.js.map → SettingsUsersView-0AZ_F16e.js.map} +1 -1
  62. package/dist/assets/{SettingsView-EBt-ouA4.js → SettingsView-pF2qlNhK.js} +2 -2
  63. package/dist/assets/SettingsView-pF2qlNhK.js.map +1 -0
  64. package/dist/assets/{SetupView-T7JQiE1O.js → SetupView-IPdjd4om.js} +2 -2
  65. package/dist/assets/{SetupView-T7JQiE1O.js.map → SetupView-IPdjd4om.js.map} +1 -1
  66. package/dist/assets/{SetupWorkflowCredentialsButton-lDl1ksax.js → SetupWorkflowCredentialsButton-fL7BC8Hp.js} +2 -2
  67. package/dist/assets/{SetupWorkflowCredentialsButton-lDl1ksax.js.map → SetupWorkflowCredentialsButton-fL7BC8Hp.js.map} +1 -1
  68. package/dist/assets/{SetupWorkflowFromTemplateView-uEG55eR-.js → SetupWorkflowFromTemplateView-mDNSG38Q.js} +2 -2
  69. package/dist/assets/{SetupWorkflowFromTemplateView-uEG55eR-.js.map → SetupWorkflowFromTemplateView-mDNSG38Q.js.map} +1 -1
  70. package/dist/assets/{SigninView-tsJLDDbt.js → SigninView-4mpqXNHu.js} +2 -2
  71. package/dist/assets/{SigninView-tsJLDDbt.js.map → SigninView-4mpqXNHu.js.map} +1 -1
  72. package/dist/assets/{SignupView-ckdGMylG.js → SignupView-v6AVy0zJ.js} +2 -2
  73. package/dist/assets/{SignupView-ckdGMylG.js.map → SignupView-v6AVy0zJ.js.map} +1 -1
  74. package/dist/assets/{TemplateDetails-YEZlo0n4.js → TemplateDetails-WQVyxQi7.js} +2 -2
  75. package/dist/assets/{TemplateDetails-YEZlo0n4.js.map → TemplateDetails-WQVyxQi7.js.map} +1 -1
  76. package/dist/assets/{TemplateList-OGWLmWk_.js → TemplateList--WJ98ZVH.js} +2 -2
  77. package/dist/assets/{TemplateList-OGWLmWk_.js.map → TemplateList--WJ98ZVH.js.map} +1 -1
  78. package/dist/assets/{TemplatesCollectionView-Fx5qyXc6.js → TemplatesCollectionView-g59Pu268.js} +2 -2
  79. package/dist/assets/{TemplatesCollectionView-Fx5qyXc6.js.map → TemplatesCollectionView-g59Pu268.js.map} +1 -1
  80. package/dist/assets/{TemplatesInfoCarousel-oLwAv_o3.js → TemplatesInfoCarousel-Nq4oRyBi.js} +2 -2
  81. package/dist/assets/{TemplatesInfoCarousel-oLwAv_o3.js.map → TemplatesInfoCarousel-Nq4oRyBi.js.map} +1 -1
  82. package/dist/assets/{TemplatesSearchView-TtSL2qyI.js → TemplatesSearchView-Lv0e5mOk.js} +2 -2
  83. package/dist/assets/{TemplatesSearchView-TtSL2qyI.js.map → TemplatesSearchView-Lv0e5mOk.js.map} +1 -1
  84. package/dist/assets/{TemplatesWorkflowView-Ipt1HHPc.js → TemplatesWorkflowView-FoPXbc_4.js} +2 -2
  85. package/dist/assets/{TemplatesWorkflowView-Ipt1HHPc.js.map → TemplatesWorkflowView-FoPXbc_4.js.map} +1 -1
  86. package/dist/assets/{VariablesView-pLmlCm20.js → VariablesView-Sg4v_4Ai.js} +2 -2
  87. package/dist/assets/{VariablesView-pLmlCm20.js.map → VariablesView-Sg4v_4Ai.js.map} +1 -1
  88. package/dist/assets/{WorkerView-Du8mpTon.js → WorkerView-y-y5Q5E5.js} +2 -2
  89. package/dist/assets/{WorkerView-Du8mpTon.js.map → WorkerView-y-y5Q5E5.js.map} +1 -1
  90. package/dist/assets/{WorkflowActivator-MuCzpXdv.js → WorkflowActivator-vtOaSPI6.js} +2 -2
  91. package/dist/assets/{WorkflowActivator-MuCzpXdv.js.map → WorkflowActivator-vtOaSPI6.js.map} +1 -1
  92. package/dist/assets/{WorkflowExecutionsInfoAccordion-9gkfchSQ.js → WorkflowExecutionsInfoAccordion-Gm7eM0Un.js} +2 -2
  93. package/dist/assets/{WorkflowExecutionsInfoAccordion-9gkfchSQ.js.map → WorkflowExecutionsInfoAccordion-Gm7eM0Un.js.map} +1 -1
  94. package/dist/assets/{WorkflowExecutionsLandingPage-g4QNNuc4.js → WorkflowExecutionsLandingPage-C_oVBqy4.js} +2 -2
  95. package/dist/assets/{WorkflowExecutionsLandingPage-g4QNNuc4.js.map → WorkflowExecutionsLandingPage-C_oVBqy4.js.map} +1 -1
  96. package/dist/assets/{WorkflowExecutionsPreview-KNJgPBbn.js → WorkflowExecutionsPreview-Yw0HRwQz.js} +2 -2
  97. package/dist/assets/{WorkflowExecutionsPreview-KNJgPBbn.js.map → WorkflowExecutionsPreview-Yw0HRwQz.js.map} +1 -1
  98. package/dist/assets/{WorkflowExecutionsView-Iwwaw9Lt.js → WorkflowExecutionsView-dwh6ZDgY.js} +2 -2
  99. package/dist/assets/{WorkflowExecutionsView-Iwwaw9Lt.js.map → WorkflowExecutionsView-dwh6ZDgY.js.map} +1 -1
  100. package/dist/assets/{WorkflowHistory-HxH8_2Dt.js → WorkflowHistory-RGKALSm6.js} +2 -2
  101. package/dist/assets/{WorkflowHistory-HxH8_2Dt.js.map → WorkflowHistory-RGKALSm6.js.map} +1 -1
  102. package/dist/assets/{WorkflowOnboardingView-KirfsyFh.js → WorkflowOnboardingView-kAh_YIAL.js} +2 -2
  103. package/dist/assets/{WorkflowOnboardingView-KirfsyFh.js.map → WorkflowOnboardingView-kAh_YIAL.js.map} +1 -1
  104. package/dist/assets/{WorkflowsView-SJ6W5Ten.js → WorkflowsView-_nHq94Wq.js} +2 -2
  105. package/dist/assets/{WorkflowsView-SJ6W5Ten.js.map → WorkflowsView-_nHq94Wq.js.map} +1 -1
  106. package/dist/assets/{cloud-WKIHJYyR.js → cloud-jEANLTrV.js} +2 -2
  107. package/dist/assets/{cloud-WKIHJYyR.js.map → cloud-jEANLTrV.js.map} +1 -1
  108. package/dist/assets/{index-Qw68KAhz.js → index-6M_Mo9yq.js} +4 -4
  109. package/dist/assets/{index-Qw68KAhz.js.map → index-6M_Mo9yq.js.map} +1 -1
  110. package/dist/assets/{templateActions-5n_gDrp9.js → templateActions-l9fJr0Cu.js} +2 -2
  111. package/dist/assets/{templateActions-5n_gDrp9.js.map → templateActions-l9fJr0Cu.js.map} +1 -1
  112. package/dist/assets/{useExecutionDebugging-bM31shhY.js → useExecutionDebugging-ndesKh44.js} +2 -2
  113. package/dist/assets/{useExecutionDebugging-bM31shhY.js.map → useExecutionDebugging-ndesKh44.js.map} +1 -1
  114. package/dist/assets/{usePushConnection-YMVPmkf5.js → usePushConnection-vhkd7pw_.js} +2 -2
  115. package/dist/assets/{usePushConnection-YMVPmkf5.js.map → usePushConnection-vhkd7pw_.js.map} +1 -1
  116. package/dist/assets/{workflowActivate-L9KnNQBb.js → workflowActivate-dwxhdtFU.js} +2 -2
  117. package/dist/assets/{workflowActivate-L9KnNQBb.js.map → workflowActivate-dwxhdtFU.js.map} +1 -1
  118. package/dist/index.html +1 -1
  119. package/package.json +1 -1
  120. package/dist/assets/CollectionParameter-ZuNQUd29.js.map +0 -1
  121. package/dist/assets/SettingsView-EBt-ouA4.js.map +0 -1
@@ -1,2 +1,2 @@
1
- import{G as z,r as $,e as H,b as ae,l as T,m as x,H as G,p as m,R as v,T as C,O,S as N,M as P,u as V,Q as M,I as p,a2 as re,ag as R,F as ie,a7 as le,az as ce,aG as we,D as ue,w as de,af as me}from"./vendor-KLOX9vbo.js";import{dJ as fe,x as B,_ as D,ar as J,m as Q,l as pe,v as X,g8 as ke,e as ve,u as ye,V as U,ge as _e,dX as he}from"./n8n-0pza0mdA.js";import{az as ge}from"./index-Qw68KAhz.js";import{d as be}from"./pinia-28uZ5ZtB.js";import{F as We}from"./file-saver-61OBSfpv.js";import"./lodash-es-wI9avrph.js";import"./axios-s2RMMPhA.js";import"./flatted-jPn12Tq4.js";import"./esprima-next-ulPLCZ1Z.js";import"./luxon-ZRIU05qF.js";import"./@vueuse/core-JpwZAlxf.js";import"./uuid-McvpxQtQ.js";import"./vue-i18n-Cb1fO4GA.js";import"./@n8n/permissions-8yMqUF1Y.js";import"./@n8n/codemirror-lang-sql-_W1-z7Mc.js";import"./@lezer/common-1hBQ1gIF.js";import"./prettier-XiNuC5bg.js";import"./@jsplumb/util-DR0SB56A.js";import"./@jsplumb/core-MKwKlGip.js";import"./@jsplumb/common-Q5_tv_GT.js";import"./@jsplumb/connector-bezier-3dWY17R5.js";import"./@jsplumb/browser-ui-AlqFM-P6.js";import"./codemirror-lang-html-n8n-tmVw-mwA.js";import"./codemirror-lang-n8n-expression-71F4KZSz.js";import"./fast-json-stable-stringify-QF2cL2qw.js";import"./timeago.js--Bumj2r9.js";import"./qrcode.vue-ohcdYkQS.js";import"./vue3-touch-events-_RfbPMOD.js";import"./chart.js-JtqvIvkt.js";const Ie=["datetime"],$e=["value"],Te=z({__name:"WorkflowHistoryListItem",props:{item:{},index:{},actions:{},isActive:{type:Boolean}},emits:["action","preview","mounted"],setup(g,{emit:y}){const o=g,e=y,f=B(),r=$(!1),k=$(null),c=$(null),i=$(!1),_=H(()=>{const t=new Date().getFullYear().toString(),[n,l]=fe(o.item.createdAt,`${o.item.createdAt.startsWith(t)?"":"yyyy "}mmm d"#"HH:MM:ss`).split("#");return f.baseText("workflowHistory.item.createdAt",{interpolate:{date:n,time:l}})}),b=H(()=>{const t=o.item.authors.split(", ");let n=t[0];return t.length>1&&(n=`${n} + ${t.length-1}`),{size:t.length,label:n}}),S=H(()=>f.baseText("workflowHistory.item.id",{interpolate:{id:o.item.versionId}})),w=t=>{e("action",{action:t,id:o.item.versionId,data:{formattedCreatedAt:_.value}})},a=t=>{r.value=t},u=t=>{e("preview",{event:t,id:o.item.versionId})};return ae(()=>{var t,n,l;e("mounted",{index:o.index,offsetTop:((t=k.value)==null?void 0:t.offsetTop)??0,isActive:o.isActive}),i.value=((n=c.value)==null?void 0:n.scrollWidth)>((l=c.value)==null?void 0:l.clientWidth)}),(t,n)=>{const l=R("n8n-tooltip"),W=R("n8n-badge"),I=R("n8n-action-toggle");return T(),x("li",{ref_key:"itemElement",ref:k,"data-test-id":"workflow-history-list-item",class:p({[t.$style.item]:!0,[t.$style.active]:o.isActive,[t.$style.actionsVisible]:r.value})},[G(t.$slots,"default",{formattedCreatedAt:_.value},()=>[m("p",{onClick:u},[m("time",{datetime:t.item.createdAt},v(_.value),9,Ie),C(l,{placement:"right-end",disabled:b.value.size<2&&!i.value},{content:O(()=>[N(v(o.item.authors),1)]),default:O(()=>[m("span",{ref_key:"authorElement",ref:c},v(b.value.label),513)]),_:1},8,["disabled"]),m("data",{value:t.item.versionId},v(S.value),9,$e)])]),m("div",{class:p(t.$style.tail)},[o.index===0?(T(),P(W,{key:0},{default:O(()=>[N(v(V(f).baseText("workflowHistory.item.latest")),1)]),_:1})):M("",!0),C(I,{theme:"dark",class:p(t.$style.actions),actions:o.actions,placement:"bottom-end",onAction:w,onClick:n[0]||(n[0]=re(()=>{},["stop"])),onVisibleChange:a},{default:O(()=>[G(t.$slots,"action-toggle-button")]),_:3},8,["class","actions"])],2)],2)}}}),He="_item_1a4du_1",Ve="_tail_1a4du_33",Ce="_active_1a4du_38",Oe="_actionsVisible_1a4du_45",Se="_actions_1a4du_45",Ae={item:He,tail:Ve,active:Ce,actionsVisible:Oe,actions:Se},Re={$style:Ae},Z=D(Te,[["__cssModules",Re]]),Le=m("br",null,null,-1),xe=["aria-label"],Me=z({__name:"WorkflowHistoryList",props:{items:{},activeItem:{},actions:{},requestNumberOfItems:{},lastReceivedItemsLength:{},evaluatedPruneTime:{},shouldUpgrade:{type:Boolean},isListLoading:{type:Boolean}},emits:["action","preview","loadMore","upgrade"],setup(g,{emit:y}){const o=g,e=y,f=B(),r=$(null),k=$(!0),c=$(null),i=a=>a===0?o.actions.filter(u=>u.value!=="restore"):o.actions,_=a=>{c.value=new IntersectionObserver(([u])=>{var t,n;u.isIntersecting&&((t=c.value)==null||t.unobserve(a),(n=c.value)==null||n.disconnect(),c.value=null,e("loadMore",{take:o.requestNumberOfItems,skip:o.items.length}))},{root:r.value,threshold:.01}),c.value.observe(a)},b=({action:a,id:u,data:t})=>{k.value=!1,e("action",{action:a,id:u,data:t})},S=({event:a,id:u})=>{k.value=!1,e("preview",{event:a,id:u})},w=({index:a,offsetTop:u,isActive:t})=>{var n,l;t&&k.value&&(k.value=!1,(n=r.value)==null||n.scrollTo({top:u,behavior:"smooth"})),a===o.items.length-1&&o.lastReceivedItemsLength===o.requestNumberOfItems&&_((l=r.value)==null?void 0:l.children[a])};return(a,u)=>{const t=R("n8n-loading"),n=R("i18n-t");return T(),x("ul",{ref_key:"listElement",ref:r,class:p(a.$style.list),"data-test-id":"workflow-history-list"},[(T(!0),x(ie,null,le(o.items,(l,W)=>{var I;return T(),P(Z,{key:l.versionId,index:W,item:l,"is-active":l.versionId===((I=o.activeItem)==null?void 0:I.versionId),actions:i(W),onAction:b,onPreview:S,onMounted:w},null,8,["index","item","is-active","actions"])}),128)),!o.items.length&&!o.isListLoading?(T(),x("li",{key:0,class:p(a.$style.empty)},[N(v(V(f).baseText("workflowHistory.empty"))+" ",1),Le,N(" "+v(V(f).baseText("workflowHistory.hint")),1)],2)):M("",!0),o.isListLoading?(T(),x("li",{key:1,class:p(a.$style.loader),role:"status","aria-live":"polite","aria-busy":"true","aria-label":V(f).baseText("generic.loading")},[C(t,{rows:3,class:"mb-xs"}),C(t,{rows:3,class:"mb-xs"}),C(t,{rows:3,class:"mb-xs"})],10,xe)):M("",!0),o.shouldUpgrade?(T(),x("li",{key:2,class:p(a.$style.retention)},[m("span",null,v(V(f).baseText("workflowHistory.limit",{interpolate:{evaluatedPruneTime:o.evaluatedPruneTime}})),1),C(n,{keypath:"workflowHistory.upgrade",tag:"span"},{link:O(()=>[m("a",{href:"#",onClick:u[0]||(u[0]=l=>e("upgrade"))},v(V(f).baseText("workflowHistory.upgrade.link")),1)]),_:1})],2)):M("",!0)],2)}}}),Ee="_list_undzg_1",Ne="_empty_undzg_10",Pe="_loader_undzg_23",Ue="_retention_undzg_27",Fe={list:Ee,empty:Ne,loader:Pe,retention:Ue},ze={$style:Fe},Be=D(Me,[["__cssModules",ze]]),De=["datetime"],Ke=["value"],qe=z({__name:"WorkflowHistoryContent",props:{workflow:{},workflowVersion:{},actions:{},isListLoading:{type:Boolean},isFirstItemShown:{type:Boolean}},emits:["action"],setup(g,{emit:y}){const o=B(),e=g,f=y,r=H(()=>{if(!e.workflowVersion||!e.workflow)return;const{pinData:i,..._}=e.workflow;return{..._,nodes:e.workflowVersion.nodes,connections:e.workflowVersion.connections}}),k=H(()=>e.isFirstItemShown?e.actions.filter(i=>i.value!=="restore"):e.actions),c=({action:i,id:_,data:b})=>{f("action",{action:i,id:_,data:b})};return(i,_)=>{const b=R("n8n-icon"),S=R("n8n-button");return T(),x("div",{class:p(i.$style.content)},[e.workflowVersion?(T(),P(ge,{key:0,workflow:r.value,loading:e.isListLoading,"loader-type":"spinner"},null,8,["workflow","loading"])):M("",!0),m("ul",{class:p(i.$style.info)},[e.workflowVersion?(T(),P(Z,{key:0,class:p(i.$style.card),index:-1,item:e.workflowVersion,"is-active":!1,actions:k.value,onAction:c},{default:O(({formattedCreatedAt:w})=>[m("section",{class:p(i.$style.text)},[m("p",null,[m("span",{class:p(i.$style.label)},v(V(o).baseText("workflowHistory.content.title"))+": ",3),m("time",{datetime:e.workflowVersion.createdAt},v(w),9,De)]),m("p",null,[m("span",{class:p(i.$style.label)},v(V(o).baseText("workflowHistory.content.editedBy"))+": ",3),m("span",null,v(e.workflowVersion.authors),1)]),m("p",null,[m("span",{class:p(i.$style.label)},v(V(o).baseText("workflowHistory.content.versionId"))+": ",3),m("data",{value:e.workflowVersion.versionId},v(e.workflowVersion.versionId),9,Ke)])],2)]),"action-toggle-button":O(()=>[C(S,{type:"tertiary",size:"large","data-test-id":"action-toggle-button"},{default:O(()=>[N(v(V(o).baseText("workflowHistory.content.actions"))+" ",1),C(b,{class:"ml-3xs",icon:"chevron-down",size:"small"})]),_:1})]),_:1},8,["class","item","actions"])):M("",!0)],2)],2)}}}),Ye="_content_2kwc4_1",je="_info_2kwc4_11",Ge="_card_2kwc4_19",Je="_text_2kwc4_24",Qe="_label_2kwc4_49",Xe={content:Ye,info:je,card:Ge,text:Je,label:Qe},Ze={$style:Xe},et=D(qe,[["__cssModules",Ze]]),tt=async(g,y,o)=>{const{data:e}=await J(g.baseUrl,`/workflow-history/workflow/${y}`,o);return e},ot=async(g,y,o)=>{const{data:e}=await J(g.baseUrl,`/workflow-history/workflow/${y}/version/${o}`);return e},st=be("workflowHistory",()=>{const g=Q(),y=pe(),o=X(),e=H(()=>y.settings.workflowHistory.licensePruneTime),f=H(()=>y.settings.workflowHistory.pruneTime),r=H(()=>Math.min(f.value,e.value)),k=H(()=>e.value!==-1&&e.value===f.value),c=async(w,a)=>await tt(g.getRestApiContext,w,a),i=async(w,a)=>await ot(g.getRestApiContext,w,a);return{getWorkflowHistory:c,getWorkflowVersion:i,downloadVersion:async(w,a,u)=>{const[t,n]=await Promise.all([o.fetchWorkflow(w),i(w,a)]),{connections:l,nodes:W}=n,I=new Blob([JSON.stringify({...t,nodes:W,connections:l},null,2)],{type:"application/json;charset=utf-8"});We.saveAs(I,`${t.name}(${u.formattedCreatedAt}).json`)},cloneIntoNewWorkflow:async(w,a,u)=>{const[t,n]=await Promise.all([o.fetchWorkflow(w),i(w,a)]),{connections:l,nodes:W}=n,{name:I}=t,K=await ke(g.getRestApiContext,`${I} (${u.formattedCreatedAt})`),L={nodes:W,connections:l,name:K.name};return await o.createNewWorkflow(L)},restoreWorkflow:async(w,a,u)=>{const t=await i(w,a),{connections:n,nodes:l}=t,W={connections:n,nodes:l};return u&&(W.active=!1),await o.updateWorkflow(w,W,!0).catch(async I=>{if(I.httpStatusCode===400&&I.message.includes("can not be activated"))return await o.fetchWorkflow(w);throw new Error(I)})},evaluatedPruneTime:r,shouldUpgrade:k}}),nt=z({__name:"WorkflowHistory",setup(g){const y=["restore","clone","open","download"],o=y.reduce((s,d)=>({...s,[d.toUpperCase()]:d}),{}),e=ce(),f=we(),r=B(),k=ve(),c=st(),i=ye(),_=X(),b=$(!0),S=$(!0),w=$(20),a=$(0),u=H(()=>({name:U.WORKFLOW,params:{name:e.params.workflowId}})),t=$(null),n=$([]),l=$(null),W=H(()=>y.map(s=>({label:r.baseText(`workflowHistory.item.actions.${s}`),disabled:!1,value:s}))),I=H(()=>{var s;return((s=n.value[0])==null?void 0:s.versionId)===e.params.versionId}),K=H(()=>Math.floor(c.evaluatedPruneTime/24)),L=s=>{_e.track(s,{instance_id:Q().instanceId,workflow_id:e.params.workflowId})},q=async s=>{const d=await c.getWorkflowHistory(e.params.workflowId,s);a.value=d.length,n.value=n.value.concat(d)};ue(async()=>{L("User opened workflow history");try{const[s]=await Promise.all([_.fetchWorkflow(e.params.workflowId),q({take:w.value})]);t.value=s,S.value=!1,!e.params.versionId&&n.value.length&&await f.replace({name:U.WORKFLOW_HISTORY,params:{workflowId:e.params.workflowId,versionId:n.value[0].versionId}})}catch(s){b.value=!1,k.showError(s,r.baseText("workflowHistory.title"))}});const Y=s=>{const{href:d}=f.resolve({name:U.WORKFLOW_HISTORY,params:{workflowId:e.params.workflowId,versionId:s}});window.open(d,"_blank")},ee=async(s,d)=>await new Promise((h,A)=>{const E=[{text:r.baseText("workflowHistory.action.restore.modal.button.cancel"),type:"tertiary",action:()=>{h("cancel")}}];s&&E.push({text:r.baseText("workflowHistory.action.restore.modal.button.deactivateAndRestore"),type:"tertiary",action:()=>{h("deactivateAndRestore")}}),E.push({text:r.baseText("workflowHistory.action.restore.modal.button.restore"),type:"primary",action:()=>{h("restore")}});try{i.openModalWithData({name:he,data:{beforeClose:()=>{h("cancel")},isWorkflowActivated:s,formattedCreatedAt:d,buttons:E}})}catch(F){A(F)}}),te=async(s,d)=>{const h=await c.cloneIntoNewWorkflow(e.params.workflowId,s,d),{href:A}=f.resolve({name:U.WORKFLOW,params:{name:h.id}});k.showMessage({title:r.baseText("workflowHistory.action.clone.success.title"),message:me("a",{href:A,target:"_blank"},r.baseText("workflowHistory.action.clone.success.message")),type:"success",duration:1e4})},oe=async(s,d)=>{const h=await _.fetchWorkflow(e.params.workflowId),A=await ee(h.active,d.formattedCreatedAt);if(A==="cancel")return;t.value=await c.restoreWorkflow(e.params.workflowId,s,A==="deactivateAndRestore");const E=await c.getWorkflowHistory(e.params.workflowId,{take:1});n.value=E.concat(n.value),k.showMessage({title:r.baseText("workflowHistory.action.restore.success.title"),type:"success"})},j=async({action:s,id:d,data:h})=>{try{switch(s){case o.OPEN:Y(d),L("User opened version in new tab");break;case o.DOWNLOAD:await c.downloadVersion(e.params.workflowId,d,h),L("User downloaded version");break;case o.CLONE:await te(d,h),L("User cloned version");break;case o.RESTORE:await oe(d,h),L("User restored version");break}}catch(A){k.showError(A,r.baseText("workflowHistory.action.error.title",{interpolate:{action:r.baseText(`workflowHistory.item.actions.${s}`).toLowerCase()}}))}},se=async({event:s,id:d})=>{s.metaKey||s.ctrlKey?(Y(d),L("User opened version in new tab")):await f.push({name:U.WORKFLOW_HISTORY,params:{workflowId:e.params.workflowId,versionId:d}})},ne=()=>{i.goToUpgrade("workflow-history","upgrade-workflow-history")};return de(async()=>{if(e.params.versionId){try{l.value=await c.getWorkflowVersion(e.params.workflowId,e.params.versionId),L("User selected version")}catch(s){k.showError(new Error(`${s.message} "${e.params.versionId}"&nbsp;`),r.baseText("workflowHistory.title"))}try{t.value=await _.fetchWorkflow(e.params.workflowId)}catch(s){b.value=!1,k.showError(s,r.baseText("workflowHistory.title"))}}}),(s,d)=>{const h=R("n8n-heading"),A=R("n8n-button"),E=R("router-link");return T(),x("div",{class:p(s.$style.view)},[C(h,{class:p(s.$style.header),tag:"h2",size:"medium"},{default:O(()=>{var F;return[N(v((F=t.value)==null?void 0:F.name),1)]}),_:1},8,["class"]),m("div",{class:p(s.$style.corner)},[C(h,{tag:"h2",size:"medium",bold:""},{default:O(()=>[N(v(V(r).baseText("workflowHistory.title")),1)]),_:1}),C(E,{to:u.value,"data-test-id":"workflow-history-close-button"},{default:O(()=>[C(A,{type:"tertiary",icon:"times",size:"small",text:"",square:""})]),_:1},8,["to"])],2),m("div",{class:p(s.$style.listComponentWrapper)},[b.value?(T(),P(Be,{key:0,items:n.value,"last-received-items-length":a.value,"active-item":l.value,actions:W.value,"request-number-of-items":w.value,"should-upgrade":V(c).shouldUpgrade,"evaluated-prune-time":K.value,"is-list-loading":S.value,onAction:j,onPreview:se,onLoadMore:q,onUpgrade:ne},null,8,["items","last-received-items-length","active-item","actions","request-number-of-items","should-upgrade","evaluated-prune-time","is-list-loading"])):M("",!0)],2),m("div",{class:p(s.$style.contentComponentWrapper)},[b.value?(T(),P(et,{key:0,workflow:t.value,"workflow-version":l.value,actions:W.value,"is-list-loading":S.value,"is-first-item-shown":I.value,onAction:j},null,8,["workflow","workflow-version","actions","is-list-loading","is-first-item-shown"])):M("",!0)],2)],2)}}}),at="_view_phdlt_1",rt="_header_phdlt_11",it="_corner_phdlt_19",lt="_contentComponentWrapper_phdlt_30",ct="_listComponentWrapper_phdlt_35",wt={view:at,header:rt,corner:it,contentComponentWrapper:lt,listComponentWrapper:ct},ut={$style:wt},Ft=D(nt,[["__cssModules",ut]]);export{Ft as default};
2
- //# sourceMappingURL=WorkflowHistory-HxH8_2Dt.js.map
1
+ import{G as z,r as $,e as H,b as ae,l as T,m as x,H as G,p as m,R as v,T as C,O,S as N,M as P,u as V,Q as M,I as p,a2 as re,ag as R,F as ie,a7 as le,az as ce,aG as we,D as ue,w as de,af as me}from"./vendor-KLOX9vbo.js";import{dJ as fe,x as B,_ as D,ar as J,m as Q,l as pe,v as X,g8 as ke,e as ve,u as ye,V as U,ge as _e,dX as he}from"./n8n-0pza0mdA.js";import{az as ge}from"./index-6M_Mo9yq.js";import{d as be}from"./pinia-28uZ5ZtB.js";import{F as We}from"./file-saver-61OBSfpv.js";import"./lodash-es-wI9avrph.js";import"./axios-s2RMMPhA.js";import"./flatted-jPn12Tq4.js";import"./esprima-next-ulPLCZ1Z.js";import"./luxon-ZRIU05qF.js";import"./@vueuse/core-JpwZAlxf.js";import"./uuid-McvpxQtQ.js";import"./vue-i18n-Cb1fO4GA.js";import"./@n8n/permissions-8yMqUF1Y.js";import"./@n8n/codemirror-lang-sql-_W1-z7Mc.js";import"./@lezer/common-1hBQ1gIF.js";import"./prettier-XiNuC5bg.js";import"./@jsplumb/util-DR0SB56A.js";import"./@jsplumb/core-MKwKlGip.js";import"./@jsplumb/common-Q5_tv_GT.js";import"./@jsplumb/connector-bezier-3dWY17R5.js";import"./@jsplumb/browser-ui-AlqFM-P6.js";import"./codemirror-lang-html-n8n-tmVw-mwA.js";import"./codemirror-lang-n8n-expression-71F4KZSz.js";import"./fast-json-stable-stringify-QF2cL2qw.js";import"./timeago.js--Bumj2r9.js";import"./qrcode.vue-ohcdYkQS.js";import"./vue3-touch-events-_RfbPMOD.js";import"./chart.js-JtqvIvkt.js";const Ie=["datetime"],$e=["value"],Te=z({__name:"WorkflowHistoryListItem",props:{item:{},index:{},actions:{},isActive:{type:Boolean}},emits:["action","preview","mounted"],setup(g,{emit:y}){const o=g,e=y,f=B(),r=$(!1),k=$(null),c=$(null),i=$(!1),_=H(()=>{const t=new Date().getFullYear().toString(),[n,l]=fe(o.item.createdAt,`${o.item.createdAt.startsWith(t)?"":"yyyy "}mmm d"#"HH:MM:ss`).split("#");return f.baseText("workflowHistory.item.createdAt",{interpolate:{date:n,time:l}})}),b=H(()=>{const t=o.item.authors.split(", ");let n=t[0];return t.length>1&&(n=`${n} + ${t.length-1}`),{size:t.length,label:n}}),S=H(()=>f.baseText("workflowHistory.item.id",{interpolate:{id:o.item.versionId}})),w=t=>{e("action",{action:t,id:o.item.versionId,data:{formattedCreatedAt:_.value}})},a=t=>{r.value=t},u=t=>{e("preview",{event:t,id:o.item.versionId})};return ae(()=>{var t,n,l;e("mounted",{index:o.index,offsetTop:((t=k.value)==null?void 0:t.offsetTop)??0,isActive:o.isActive}),i.value=((n=c.value)==null?void 0:n.scrollWidth)>((l=c.value)==null?void 0:l.clientWidth)}),(t,n)=>{const l=R("n8n-tooltip"),W=R("n8n-badge"),I=R("n8n-action-toggle");return T(),x("li",{ref_key:"itemElement",ref:k,"data-test-id":"workflow-history-list-item",class:p({[t.$style.item]:!0,[t.$style.active]:o.isActive,[t.$style.actionsVisible]:r.value})},[G(t.$slots,"default",{formattedCreatedAt:_.value},()=>[m("p",{onClick:u},[m("time",{datetime:t.item.createdAt},v(_.value),9,Ie),C(l,{placement:"right-end",disabled:b.value.size<2&&!i.value},{content:O(()=>[N(v(o.item.authors),1)]),default:O(()=>[m("span",{ref_key:"authorElement",ref:c},v(b.value.label),513)]),_:1},8,["disabled"]),m("data",{value:t.item.versionId},v(S.value),9,$e)])]),m("div",{class:p(t.$style.tail)},[o.index===0?(T(),P(W,{key:0},{default:O(()=>[N(v(V(f).baseText("workflowHistory.item.latest")),1)]),_:1})):M("",!0),C(I,{theme:"dark",class:p(t.$style.actions),actions:o.actions,placement:"bottom-end",onAction:w,onClick:n[0]||(n[0]=re(()=>{},["stop"])),onVisibleChange:a},{default:O(()=>[G(t.$slots,"action-toggle-button")]),_:3},8,["class","actions"])],2)],2)}}}),He="_item_1a4du_1",Ve="_tail_1a4du_33",Ce="_active_1a4du_38",Oe="_actionsVisible_1a4du_45",Se="_actions_1a4du_45",Ae={item:He,tail:Ve,active:Ce,actionsVisible:Oe,actions:Se},Re={$style:Ae},Z=D(Te,[["__cssModules",Re]]),Le=m("br",null,null,-1),xe=["aria-label"],Me=z({__name:"WorkflowHistoryList",props:{items:{},activeItem:{},actions:{},requestNumberOfItems:{},lastReceivedItemsLength:{},evaluatedPruneTime:{},shouldUpgrade:{type:Boolean},isListLoading:{type:Boolean}},emits:["action","preview","loadMore","upgrade"],setup(g,{emit:y}){const o=g,e=y,f=B(),r=$(null),k=$(!0),c=$(null),i=a=>a===0?o.actions.filter(u=>u.value!=="restore"):o.actions,_=a=>{c.value=new IntersectionObserver(([u])=>{var t,n;u.isIntersecting&&((t=c.value)==null||t.unobserve(a),(n=c.value)==null||n.disconnect(),c.value=null,e("loadMore",{take:o.requestNumberOfItems,skip:o.items.length}))},{root:r.value,threshold:.01}),c.value.observe(a)},b=({action:a,id:u,data:t})=>{k.value=!1,e("action",{action:a,id:u,data:t})},S=({event:a,id:u})=>{k.value=!1,e("preview",{event:a,id:u})},w=({index:a,offsetTop:u,isActive:t})=>{var n,l;t&&k.value&&(k.value=!1,(n=r.value)==null||n.scrollTo({top:u,behavior:"smooth"})),a===o.items.length-1&&o.lastReceivedItemsLength===o.requestNumberOfItems&&_((l=r.value)==null?void 0:l.children[a])};return(a,u)=>{const t=R("n8n-loading"),n=R("i18n-t");return T(),x("ul",{ref_key:"listElement",ref:r,class:p(a.$style.list),"data-test-id":"workflow-history-list"},[(T(!0),x(ie,null,le(o.items,(l,W)=>{var I;return T(),P(Z,{key:l.versionId,index:W,item:l,"is-active":l.versionId===((I=o.activeItem)==null?void 0:I.versionId),actions:i(W),onAction:b,onPreview:S,onMounted:w},null,8,["index","item","is-active","actions"])}),128)),!o.items.length&&!o.isListLoading?(T(),x("li",{key:0,class:p(a.$style.empty)},[N(v(V(f).baseText("workflowHistory.empty"))+" ",1),Le,N(" "+v(V(f).baseText("workflowHistory.hint")),1)],2)):M("",!0),o.isListLoading?(T(),x("li",{key:1,class:p(a.$style.loader),role:"status","aria-live":"polite","aria-busy":"true","aria-label":V(f).baseText("generic.loading")},[C(t,{rows:3,class:"mb-xs"}),C(t,{rows:3,class:"mb-xs"}),C(t,{rows:3,class:"mb-xs"})],10,xe)):M("",!0),o.shouldUpgrade?(T(),x("li",{key:2,class:p(a.$style.retention)},[m("span",null,v(V(f).baseText("workflowHistory.limit",{interpolate:{evaluatedPruneTime:o.evaluatedPruneTime}})),1),C(n,{keypath:"workflowHistory.upgrade",tag:"span"},{link:O(()=>[m("a",{href:"#",onClick:u[0]||(u[0]=l=>e("upgrade"))},v(V(f).baseText("workflowHistory.upgrade.link")),1)]),_:1})],2)):M("",!0)],2)}}}),Ee="_list_undzg_1",Ne="_empty_undzg_10",Pe="_loader_undzg_23",Ue="_retention_undzg_27",Fe={list:Ee,empty:Ne,loader:Pe,retention:Ue},ze={$style:Fe},Be=D(Me,[["__cssModules",ze]]),De=["datetime"],Ke=["value"],qe=z({__name:"WorkflowHistoryContent",props:{workflow:{},workflowVersion:{},actions:{},isListLoading:{type:Boolean},isFirstItemShown:{type:Boolean}},emits:["action"],setup(g,{emit:y}){const o=B(),e=g,f=y,r=H(()=>{if(!e.workflowVersion||!e.workflow)return;const{pinData:i,..._}=e.workflow;return{..._,nodes:e.workflowVersion.nodes,connections:e.workflowVersion.connections}}),k=H(()=>e.isFirstItemShown?e.actions.filter(i=>i.value!=="restore"):e.actions),c=({action:i,id:_,data:b})=>{f("action",{action:i,id:_,data:b})};return(i,_)=>{const b=R("n8n-icon"),S=R("n8n-button");return T(),x("div",{class:p(i.$style.content)},[e.workflowVersion?(T(),P(ge,{key:0,workflow:r.value,loading:e.isListLoading,"loader-type":"spinner"},null,8,["workflow","loading"])):M("",!0),m("ul",{class:p(i.$style.info)},[e.workflowVersion?(T(),P(Z,{key:0,class:p(i.$style.card),index:-1,item:e.workflowVersion,"is-active":!1,actions:k.value,onAction:c},{default:O(({formattedCreatedAt:w})=>[m("section",{class:p(i.$style.text)},[m("p",null,[m("span",{class:p(i.$style.label)},v(V(o).baseText("workflowHistory.content.title"))+": ",3),m("time",{datetime:e.workflowVersion.createdAt},v(w),9,De)]),m("p",null,[m("span",{class:p(i.$style.label)},v(V(o).baseText("workflowHistory.content.editedBy"))+": ",3),m("span",null,v(e.workflowVersion.authors),1)]),m("p",null,[m("span",{class:p(i.$style.label)},v(V(o).baseText("workflowHistory.content.versionId"))+": ",3),m("data",{value:e.workflowVersion.versionId},v(e.workflowVersion.versionId),9,Ke)])],2)]),"action-toggle-button":O(()=>[C(S,{type:"tertiary",size:"large","data-test-id":"action-toggle-button"},{default:O(()=>[N(v(V(o).baseText("workflowHistory.content.actions"))+" ",1),C(b,{class:"ml-3xs",icon:"chevron-down",size:"small"})]),_:1})]),_:1},8,["class","item","actions"])):M("",!0)],2)],2)}}}),Ye="_content_2kwc4_1",je="_info_2kwc4_11",Ge="_card_2kwc4_19",Je="_text_2kwc4_24",Qe="_label_2kwc4_49",Xe={content:Ye,info:je,card:Ge,text:Je,label:Qe},Ze={$style:Xe},et=D(qe,[["__cssModules",Ze]]),tt=async(g,y,o)=>{const{data:e}=await J(g.baseUrl,`/workflow-history/workflow/${y}`,o);return e},ot=async(g,y,o)=>{const{data:e}=await J(g.baseUrl,`/workflow-history/workflow/${y}/version/${o}`);return e},st=be("workflowHistory",()=>{const g=Q(),y=pe(),o=X(),e=H(()=>y.settings.workflowHistory.licensePruneTime),f=H(()=>y.settings.workflowHistory.pruneTime),r=H(()=>Math.min(f.value,e.value)),k=H(()=>e.value!==-1&&e.value===f.value),c=async(w,a)=>await tt(g.getRestApiContext,w,a),i=async(w,a)=>await ot(g.getRestApiContext,w,a);return{getWorkflowHistory:c,getWorkflowVersion:i,downloadVersion:async(w,a,u)=>{const[t,n]=await Promise.all([o.fetchWorkflow(w),i(w,a)]),{connections:l,nodes:W}=n,I=new Blob([JSON.stringify({...t,nodes:W,connections:l},null,2)],{type:"application/json;charset=utf-8"});We.saveAs(I,`${t.name}(${u.formattedCreatedAt}).json`)},cloneIntoNewWorkflow:async(w,a,u)=>{const[t,n]=await Promise.all([o.fetchWorkflow(w),i(w,a)]),{connections:l,nodes:W}=n,{name:I}=t,K=await ke(g.getRestApiContext,`${I} (${u.formattedCreatedAt})`),L={nodes:W,connections:l,name:K.name};return await o.createNewWorkflow(L)},restoreWorkflow:async(w,a,u)=>{const t=await i(w,a),{connections:n,nodes:l}=t,W={connections:n,nodes:l};return u&&(W.active=!1),await o.updateWorkflow(w,W,!0).catch(async I=>{if(I.httpStatusCode===400&&I.message.includes("can not be activated"))return await o.fetchWorkflow(w);throw new Error(I)})},evaluatedPruneTime:r,shouldUpgrade:k}}),nt=z({__name:"WorkflowHistory",setup(g){const y=["restore","clone","open","download"],o=y.reduce((s,d)=>({...s,[d.toUpperCase()]:d}),{}),e=ce(),f=we(),r=B(),k=ve(),c=st(),i=ye(),_=X(),b=$(!0),S=$(!0),w=$(20),a=$(0),u=H(()=>({name:U.WORKFLOW,params:{name:e.params.workflowId}})),t=$(null),n=$([]),l=$(null),W=H(()=>y.map(s=>({label:r.baseText(`workflowHistory.item.actions.${s}`),disabled:!1,value:s}))),I=H(()=>{var s;return((s=n.value[0])==null?void 0:s.versionId)===e.params.versionId}),K=H(()=>Math.floor(c.evaluatedPruneTime/24)),L=s=>{_e.track(s,{instance_id:Q().instanceId,workflow_id:e.params.workflowId})},q=async s=>{const d=await c.getWorkflowHistory(e.params.workflowId,s);a.value=d.length,n.value=n.value.concat(d)};ue(async()=>{L("User opened workflow history");try{const[s]=await Promise.all([_.fetchWorkflow(e.params.workflowId),q({take:w.value})]);t.value=s,S.value=!1,!e.params.versionId&&n.value.length&&await f.replace({name:U.WORKFLOW_HISTORY,params:{workflowId:e.params.workflowId,versionId:n.value[0].versionId}})}catch(s){b.value=!1,k.showError(s,r.baseText("workflowHistory.title"))}});const Y=s=>{const{href:d}=f.resolve({name:U.WORKFLOW_HISTORY,params:{workflowId:e.params.workflowId,versionId:s}});window.open(d,"_blank")},ee=async(s,d)=>await new Promise((h,A)=>{const E=[{text:r.baseText("workflowHistory.action.restore.modal.button.cancel"),type:"tertiary",action:()=>{h("cancel")}}];s&&E.push({text:r.baseText("workflowHistory.action.restore.modal.button.deactivateAndRestore"),type:"tertiary",action:()=>{h("deactivateAndRestore")}}),E.push({text:r.baseText("workflowHistory.action.restore.modal.button.restore"),type:"primary",action:()=>{h("restore")}});try{i.openModalWithData({name:he,data:{beforeClose:()=>{h("cancel")},isWorkflowActivated:s,formattedCreatedAt:d,buttons:E}})}catch(F){A(F)}}),te=async(s,d)=>{const h=await c.cloneIntoNewWorkflow(e.params.workflowId,s,d),{href:A}=f.resolve({name:U.WORKFLOW,params:{name:h.id}});k.showMessage({title:r.baseText("workflowHistory.action.clone.success.title"),message:me("a",{href:A,target:"_blank"},r.baseText("workflowHistory.action.clone.success.message")),type:"success",duration:1e4})},oe=async(s,d)=>{const h=await _.fetchWorkflow(e.params.workflowId),A=await ee(h.active,d.formattedCreatedAt);if(A==="cancel")return;t.value=await c.restoreWorkflow(e.params.workflowId,s,A==="deactivateAndRestore");const E=await c.getWorkflowHistory(e.params.workflowId,{take:1});n.value=E.concat(n.value),k.showMessage({title:r.baseText("workflowHistory.action.restore.success.title"),type:"success"})},j=async({action:s,id:d,data:h})=>{try{switch(s){case o.OPEN:Y(d),L("User opened version in new tab");break;case o.DOWNLOAD:await c.downloadVersion(e.params.workflowId,d,h),L("User downloaded version");break;case o.CLONE:await te(d,h),L("User cloned version");break;case o.RESTORE:await oe(d,h),L("User restored version");break}}catch(A){k.showError(A,r.baseText("workflowHistory.action.error.title",{interpolate:{action:r.baseText(`workflowHistory.item.actions.${s}`).toLowerCase()}}))}},se=async({event:s,id:d})=>{s.metaKey||s.ctrlKey?(Y(d),L("User opened version in new tab")):await f.push({name:U.WORKFLOW_HISTORY,params:{workflowId:e.params.workflowId,versionId:d}})},ne=()=>{i.goToUpgrade("workflow-history","upgrade-workflow-history")};return de(async()=>{if(e.params.versionId){try{l.value=await c.getWorkflowVersion(e.params.workflowId,e.params.versionId),L("User selected version")}catch(s){k.showError(new Error(`${s.message} "${e.params.versionId}"&nbsp;`),r.baseText("workflowHistory.title"))}try{t.value=await _.fetchWorkflow(e.params.workflowId)}catch(s){b.value=!1,k.showError(s,r.baseText("workflowHistory.title"))}}}),(s,d)=>{const h=R("n8n-heading"),A=R("n8n-button"),E=R("router-link");return T(),x("div",{class:p(s.$style.view)},[C(h,{class:p(s.$style.header),tag:"h2",size:"medium"},{default:O(()=>{var F;return[N(v((F=t.value)==null?void 0:F.name),1)]}),_:1},8,["class"]),m("div",{class:p(s.$style.corner)},[C(h,{tag:"h2",size:"medium",bold:""},{default:O(()=>[N(v(V(r).baseText("workflowHistory.title")),1)]),_:1}),C(E,{to:u.value,"data-test-id":"workflow-history-close-button"},{default:O(()=>[C(A,{type:"tertiary",icon:"times",size:"small",text:"",square:""})]),_:1},8,["to"])],2),m("div",{class:p(s.$style.listComponentWrapper)},[b.value?(T(),P(Be,{key:0,items:n.value,"last-received-items-length":a.value,"active-item":l.value,actions:W.value,"request-number-of-items":w.value,"should-upgrade":V(c).shouldUpgrade,"evaluated-prune-time":K.value,"is-list-loading":S.value,onAction:j,onPreview:se,onLoadMore:q,onUpgrade:ne},null,8,["items","last-received-items-length","active-item","actions","request-number-of-items","should-upgrade","evaluated-prune-time","is-list-loading"])):M("",!0)],2),m("div",{class:p(s.$style.contentComponentWrapper)},[b.value?(T(),P(et,{key:0,workflow:t.value,"workflow-version":l.value,actions:W.value,"is-list-loading":S.value,"is-first-item-shown":I.value,onAction:j},null,8,["workflow","workflow-version","actions","is-list-loading","is-first-item-shown"])):M("",!0)],2)],2)}}}),at="_view_phdlt_1",rt="_header_phdlt_11",it="_corner_phdlt_19",lt="_contentComponentWrapper_phdlt_30",ct="_listComponentWrapper_phdlt_35",wt={view:at,header:rt,corner:it,contentComponentWrapper:lt,listComponentWrapper:ct},ut={$style:wt},Ft=D(nt,[["__cssModules",ut]]);export{Ft as default};
2
+ //# sourceMappingURL=WorkflowHistory-RGKALSm6.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WorkflowHistory-HxH8_2Dt.js","sources":["../../src/components/WorkflowHistory/WorkflowHistoryListItem.vue","../../src/components/WorkflowHistory/WorkflowHistoryList.vue","../../src/components/WorkflowHistory/WorkflowHistoryContent.vue","../../src/api/workflowHistory.ts","../../src/stores/workflowHistory.store.ts","../../src/views/WorkflowHistory.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, onMounted } from 'vue';\nimport dateformat from 'dateformat';\nimport type { UserAction } from 'n8n-design-system';\nimport type {\n\tWorkflowHistory,\n\tWorkflowVersionId,\n\tWorkflowHistoryActionTypes,\n} from '@/types/workflowHistory';\nimport { useI18n } from '@/composables/useI18n';\n\nconst props = defineProps<{\n\titem: WorkflowHistory;\n\tindex: number;\n\tactions: UserAction[];\n\tisActive: boolean;\n}>();\nconst emit = defineEmits<{\n\t(\n\t\tevent: 'action',\n\t\tvalue: {\n\t\t\taction: WorkflowHistoryActionTypes[number];\n\t\t\tid: WorkflowVersionId;\n\t\t\tdata: { formattedCreatedAt: string };\n\t\t},\n\t): void;\n\t(event: 'preview', value: { event: MouseEvent; id: WorkflowVersionId }): void;\n\t(event: 'mounted', value: { index: number; offsetTop: number; isActive: boolean }): void;\n}>();\n\nconst i18n = useI18n();\n\nconst actionsVisible = ref(false);\nconst itemElement = ref<HTMLElement | null>(null);\nconst authorElement = ref<HTMLElement | null>(null);\nconst isAuthorElementTruncated = ref(false);\n\nconst formattedCreatedAt = computed<string>(() => {\n\tconst currentYear = new Date().getFullYear().toString();\n\tconst [date, time] = dateformat(\n\t\tprops.item.createdAt,\n\t\t`${props.item.createdAt.startsWith(currentYear) ? '' : 'yyyy '}mmm d\"#\"HH:MM:ss`,\n\t).split('#');\n\n\treturn i18n.baseText('workflowHistory.item.createdAt', { interpolate: { date, time } });\n});\n\nconst authors = computed<{ size: number; label: string }>(() => {\n\tconst allAuthors = props.item.authors.split(', ');\n\tlet label = allAuthors[0];\n\n\tif (allAuthors.length > 1) {\n\t\tlabel = `${label} + ${allAuthors.length - 1}`;\n\t}\n\n\treturn {\n\t\tsize: allAuthors.length,\n\t\tlabel,\n\t};\n});\n\nconst idLabel = computed<string>(() =>\n\ti18n.baseText('workflowHistory.item.id', { interpolate: { id: props.item.versionId } }),\n);\n\nconst onAction = (action: WorkflowHistoryActionTypes[number]) => {\n\temit('action', {\n\t\taction,\n\t\tid: props.item.versionId,\n\t\tdata: { formattedCreatedAt: formattedCreatedAt.value },\n\t});\n};\n\nconst onVisibleChange = (visible: boolean) => {\n\tactionsVisible.value = visible;\n};\n\nconst onItemClick = (event: MouseEvent) => {\n\temit('preview', { event, id: props.item.versionId });\n};\n\nonMounted(() => {\n\temit('mounted', {\n\t\tindex: props.index,\n\t\toffsetTop: itemElement.value?.offsetTop ?? 0,\n\t\tisActive: props.isActive,\n\t});\n\tisAuthorElementTruncated.value =\n\t\tauthorElement.value?.scrollWidth > authorElement.value?.clientWidth;\n});\n</script>\n<template>\n\t<li\n\t\tref=\"itemElement\"\n\t\tdata-test-id=\"workflow-history-list-item\"\n\t\t:class=\"{\n\t\t\t[$style.item]: true,\n\t\t\t[$style.active]: props.isActive,\n\t\t\t[$style.actionsVisible]: actionsVisible,\n\t\t}\"\n\t>\n\t\t<slot :formatted-created-at=\"formattedCreatedAt\">\n\t\t\t<p @click=\"onItemClick\">\n\t\t\t\t<time :datetime=\"item.createdAt\">{{ formattedCreatedAt }}</time>\n\t\t\t\t<n8n-tooltip\n\t\t\t\t\tplacement=\"right-end\"\n\t\t\t\t\t:disabled=\"authors.size < 2 && !isAuthorElementTruncated\"\n\t\t\t\t>\n\t\t\t\t\t<template #content>{{ props.item.authors }}</template>\n\t\t\t\t\t<span ref=\"authorElement\">{{ authors.label }}</span>\n\t\t\t\t</n8n-tooltip>\n\t\t\t\t<data :value=\"item.versionId\">{{ idLabel }}</data>\n\t\t\t</p>\n\t\t</slot>\n\t\t<div :class=\"$style.tail\">\n\t\t\t<n8n-badge v-if=\"props.index === 0\">\n\t\t\t\t{{ i18n.baseText('workflowHistory.item.latest') }}\n\t\t\t</n8n-badge>\n\t\t\t<n8n-action-toggle\n\t\t\t\ttheme=\"dark\"\n\t\t\t\t:class=\"$style.actions\"\n\t\t\t\t:actions=\"props.actions\"\n\t\t\t\tplacement=\"bottom-end\"\n\t\t\t\t@action=\"onAction\"\n\t\t\t\t@click.stop\n\t\t\t\t@visible-change=\"onVisibleChange\"\n\t\t\t>\n\t\t\t\t<slot name=\"action-toggle-button\" />\n\t\t\t</n8n-action-toggle>\n\t\t</div>\n\t</li>\n</template>\n<style module lang=\"scss\">\n.item {\n\tdisplay: flex;\n\tposition: relative;\n\talign-items: center;\n\tjustify-content: space-between;\n\tborder-left: 2px var(--border-style-base) transparent;\n\tborder-bottom: var(--border-width-base) var(--border-style-base) var(--color-foreground-base);\n\tcolor: var(--color-text-base);\n\tfont-size: var(--font-size-2xs);\n\n\tp {\n\t\tdisplay: grid;\n\t\tpadding: var(--spacing-s);\n\t\tcursor: pointer;\n\t\tflex: 1 1 auto;\n\n\t\ttime {\n\t\t\tpadding: 0 0 var(--spacing-5xs);\n\t\t\tcolor: var(--color-text-dark);\n\t\t\tfont-size: var(--font-size-s);\n\t\t\tfont-weight: var(--font-weight-bold);\n\t\t}\n\n\t\tspan,\n\t\tdata {\n\t\t\tjustify-self: start;\n\t\t\tmax-width: 160px;\n\t\t\twhite-space: nowrap;\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t\tmargin-top: calc(var(--spacing-4xs) * -1);\n\t\t\tfont-size: var(--font-size-2xs);\n\t\t}\n\t}\n\n\t.tail {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t}\n\n\t&.active {\n\t\tbackground-color: var(--color-background-base);\n\t\tborder-left-color: var(--color-primary);\n\n\t\tp {\n\t\t\tcursor: default;\n\t\t}\n\t}\n\n\t&:hover,\n\t&.actionsVisible {\n\t\tborder-left-color: var(--color-foreground-xdark);\n\t}\n}\n\n.actions {\n\tdisplay: block;\n\tpadding: var(--spacing-3xs);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport type { UserAction } from 'n8n-design-system';\nimport { useI18n } from '@/composables/useI18n';\nimport type {\n\tWorkflowHistory,\n\tWorkflowVersionId,\n\tWorkflowHistoryActionTypes,\n\tWorkflowHistoryRequestParams,\n} from '@/types/workflowHistory';\nimport WorkflowHistoryListItem from '@/components/WorkflowHistory/WorkflowHistoryListItem.vue';\n\nconst props = defineProps<{\n\titems: WorkflowHistory[];\n\tactiveItem: WorkflowHistory | null;\n\tactions: UserAction[];\n\trequestNumberOfItems: number;\n\tlastReceivedItemsLength: number;\n\tevaluatedPruneTime: number;\n\tshouldUpgrade?: boolean;\n\tisListLoading?: boolean;\n}>();\n\nconst emit = defineEmits<{\n\t(\n\t\tevent: 'action',\n\t\tvalue: {\n\t\t\taction: WorkflowHistoryActionTypes[number];\n\t\t\tid: WorkflowVersionId;\n\t\t\tdata: { formattedCreatedAt: string };\n\t\t},\n\t): void;\n\t(event: 'preview', value: { event: MouseEvent; id: WorkflowVersionId }): void;\n\t(event: 'loadMore', value: WorkflowHistoryRequestParams): void;\n\t(event: 'upgrade'): void;\n}>();\n\nconst i18n = useI18n();\n\nconst listElement = ref<Element | null>(null);\nconst shouldAutoScroll = ref(true);\nconst observer = ref<IntersectionObserver | null>(null);\n\nconst getActions = (index: number) =>\n\tindex === 0 ? props.actions.filter((action) => action.value !== 'restore') : props.actions;\n\nconst observeElement = (element: Element) => {\n\tobserver.value = new IntersectionObserver(\n\t\t([entry]) => {\n\t\t\tif (entry.isIntersecting) {\n\t\t\t\tobserver.value?.unobserve(element);\n\t\t\t\tobserver.value?.disconnect();\n\t\t\t\tobserver.value = null;\n\t\t\t\temit('loadMore', { take: props.requestNumberOfItems, skip: props.items.length });\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troot: listElement.value,\n\t\t\tthreshold: 0.01,\n\t\t},\n\t);\n\n\tobserver.value.observe(element);\n};\n\nconst onAction = ({\n\taction,\n\tid,\n\tdata,\n}: {\n\taction: WorkflowHistoryActionTypes[number];\n\tid: WorkflowVersionId;\n\tdata: { formattedCreatedAt: string };\n}) => {\n\tshouldAutoScroll.value = false;\n\temit('action', { action, id, data });\n};\n\nconst onPreview = ({ event, id }: { event: MouseEvent; id: WorkflowVersionId }) => {\n\tshouldAutoScroll.value = false;\n\temit('preview', { event, id });\n};\n\nconst onItemMounted = ({\n\tindex,\n\toffsetTop,\n\tisActive,\n}: {\n\tindex: number;\n\toffsetTop: number;\n\tisActive: boolean;\n}) => {\n\tif (isActive && shouldAutoScroll.value) {\n\t\tshouldAutoScroll.value = false;\n\t\tlistElement.value?.scrollTo({ top: offsetTop, behavior: 'smooth' });\n\t}\n\n\tif (\n\t\tindex === props.items.length - 1 &&\n\t\tprops.lastReceivedItemsLength === props.requestNumberOfItems\n\t) {\n\t\tobserveElement(listElement.value?.children[index] as Element);\n\t}\n};\n</script>\n\n<template>\n\t<ul ref=\"listElement\" :class=\"$style.list\" data-test-id=\"workflow-history-list\">\n\t\t<WorkflowHistoryListItem\n\t\t\tv-for=\"(item, index) in props.items\"\n\t\t\t:key=\"item.versionId\"\n\t\t\t:index=\"index\"\n\t\t\t:item=\"item\"\n\t\t\t:is-active=\"item.versionId === props.activeItem?.versionId\"\n\t\t\t:actions=\"getActions(index)\"\n\t\t\t@action=\"onAction\"\n\t\t\t@preview=\"onPreview\"\n\t\t\t@mounted=\"onItemMounted\"\n\t\t/>\n\t\t<li v-if=\"!props.items.length && !props.isListLoading\" :class=\"$style.empty\">\n\t\t\t{{ i18n.baseText('workflowHistory.empty') }}\n\t\t\t<br />\n\t\t\t{{ i18n.baseText('workflowHistory.hint') }}\n\t\t</li>\n\t\t<li\n\t\t\tv-if=\"props.isListLoading\"\n\t\t\t:class=\"$style.loader\"\n\t\t\trole=\"status\"\n\t\t\taria-live=\"polite\"\n\t\t\taria-busy=\"true\"\n\t\t\t:aria-label=\"i18n.baseText('generic.loading')\"\n\t\t>\n\t\t\t<n8n-loading :rows=\"3\" class=\"mb-xs\" />\n\t\t\t<n8n-loading :rows=\"3\" class=\"mb-xs\" />\n\t\t\t<n8n-loading :rows=\"3\" class=\"mb-xs\" />\n\t\t</li>\n\t\t<li v-if=\"props.shouldUpgrade\" :class=\"$style.retention\">\n\t\t\t<span>\n\t\t\t\t{{\n\t\t\t\t\ti18n.baseText('workflowHistory.limit', {\n\t\t\t\t\t\tinterpolate: { evaluatedPruneTime: props.evaluatedPruneTime },\n\t\t\t\t\t})\n\t\t\t\t}}\n\t\t\t</span>\n\t\t\t<i18n-t keypath=\"workflowHistory.upgrade\" tag=\"span\">\n\t\t\t\t<template #link>\n\t\t\t\t\t<a href=\"#\" @click=\"emit('upgrade')\">\n\t\t\t\t\t\t{{ i18n.baseText('workflowHistory.upgrade.link') }}\n\t\t\t\t\t</a>\n\t\t\t\t</template>\n\t\t\t</i18n-t>\n\t\t</li>\n\t</ul>\n</template>\n\n<style module lang=\"scss\">\n.list {\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\twidth: 100%;\n\theight: 100%;\n\toverflow: auto;\n}\n\n.empty {\n\tdisplay: flex;\n\tposition: absolute;\n\theight: 100%;\n\tpadding: 0 25%;\n\tjustify-content: center;\n\talign-items: center;\n\ttext-align: center;\n\tcolor: var(--color-text-base);\n\tfont-size: var(--font-size-s);\n\tline-height: var(--font-line-height-loose);\n}\n\n.loader {\n\tpadding: 0 var(--spacing-s);\n}\n\n.retention {\n\tdisplay: grid;\n\tpadding: var(--spacing-s);\n\tfont-size: var(--font-size-2xs);\n\tline-height: var(--font-line-height-loose);\n\ttext-align: center;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { IWorkflowDb, UserAction } from '@/Interface';\nimport type {\n\tWorkflowVersion,\n\tWorkflowHistoryActionTypes,\n\tWorkflowVersionId,\n} from '@/types/workflowHistory';\nimport WorkflowPreview from '@/components/WorkflowPreview.vue';\nimport WorkflowHistoryListItem from '@/components/WorkflowHistory/WorkflowHistoryListItem.vue';\nimport { useI18n } from '@/composables/useI18n';\n\nconst i18n = useI18n();\n\nconst props = defineProps<{\n\tworkflow: IWorkflowDb | null;\n\tworkflowVersion: WorkflowVersion | null;\n\tactions: UserAction[];\n\tisListLoading?: boolean;\n\tisFirstItemShown?: boolean;\n}>();\n\nconst emit = defineEmits<{\n\t(\n\t\tevent: 'action',\n\t\tvalue: {\n\t\t\taction: WorkflowHistoryActionTypes[number];\n\t\t\tid: WorkflowVersionId;\n\t\t\tdata: { formattedCreatedAt: string };\n\t\t},\n\t): void;\n}>();\n\nconst workflowVersionPreview = computed<IWorkflowDb | undefined>(() => {\n\tif (!props.workflowVersion || !props.workflow) {\n\t\treturn;\n\t}\n\tconst { pinData, ...workflow } = props.workflow;\n\treturn {\n\t\t...workflow,\n\t\tnodes: props.workflowVersion.nodes,\n\t\tconnections: props.workflowVersion.connections,\n\t};\n});\n\nconst actions = computed(() =>\n\tprops.isFirstItemShown\n\t\t? props.actions.filter((action) => action.value !== 'restore')\n\t\t: props.actions,\n);\n\nconst onAction = ({\n\taction,\n\tid,\n\tdata,\n}: {\n\taction: WorkflowHistoryActionTypes[number];\n\tid: WorkflowVersionId;\n\tdata: { formattedCreatedAt: string };\n}) => {\n\temit('action', { action, id, data });\n};\n</script>\n\n<template>\n\t<div :class=\"$style.content\">\n\t\t<WorkflowPreview\n\t\t\tv-if=\"props.workflowVersion\"\n\t\t\t:workflow=\"workflowVersionPreview\"\n\t\t\t:loading=\"props.isListLoading\"\n\t\t\tloader-type=\"spinner\"\n\t\t/>\n\t\t<ul :class=\"$style.info\">\n\t\t\t<WorkflowHistoryListItem\n\t\t\t\tv-if=\"props.workflowVersion\"\n\t\t\t\t:class=\"$style.card\"\n\t\t\t\t:index=\"-1\"\n\t\t\t\t:item=\"props.workflowVersion\"\n\t\t\t\t:is-active=\"false\"\n\t\t\t\t:actions=\"actions\"\n\t\t\t\t@action=\"onAction\"\n\t\t\t>\n\t\t\t\t<template #default=\"{ formattedCreatedAt }\">\n\t\t\t\t\t<section :class=\"$style.text\">\n\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t<span :class=\"$style.label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('workflowHistory.content.title') }}:\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<time :datetime=\"props.workflowVersion.createdAt\">{{ formattedCreatedAt }}</time>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t<span :class=\"$style.label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('workflowHistory.content.editedBy') }}:\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<span>{{ props.workflowVersion.authors }}</span>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t<span :class=\"$style.label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('workflowHistory.content.versionId') }}:\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<data :value=\"props.workflowVersion.versionId\">{{\n\t\t\t\t\t\t\t\tprops.workflowVersion.versionId\n\t\t\t\t\t\t\t}}</data>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</section>\n\t\t\t\t</template>\n\t\t\t\t<template #action-toggle-button>\n\t\t\t\t\t<n8n-button type=\"tertiary\" size=\"large\" data-test-id=\"action-toggle-button\">\n\t\t\t\t\t\t{{ i18n.baseText('workflowHistory.content.actions') }}\n\t\t\t\t\t\t<n8n-icon class=\"ml-3xs\" icon=\"chevron-down\" size=\"small\" />\n\t\t\t\t\t</n8n-button>\n\t\t\t\t</template>\n\t\t\t</WorkflowHistoryListItem>\n\t\t</ul>\n\t</div>\n</template>\n\n<style module lang=\"scss\">\n.content {\n\tposition: absolute;\n\tdisplay: block;\n\tleft: 0;\n\ttop: 0;\n\twidth: 100%;\n\theight: 100%;\n\toverflow: auto;\n}\n\n.info {\n\tposition: absolute;\n\tz-index: 1;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n}\n\n.card {\n\tpadding: var(--spacing-s) var(--spacing-l) 0 var(--spacing-xl);\n\tborder: 0;\n\talign-items: start;\n\n\t.text {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tflex: 1 1 auto;\n\n\t\tp {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tpadding: 0;\n\t\t\tcursor: default;\n\n\t\t\t&:first-child {\n\t\t\t\tpadding-top: var(--spacing-3xs);\n\t\t\t\tpadding-bottom: var(--spacing-4xs);\n\t\t\t\t* {\n\t\t\t\t\tmargin-top: auto;\n\t\t\t\t\tfont-size: var(--font-size-m);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&:last-child {\n\t\t\t\tpadding-top: var(--spacing-3xs);\n\n\t\t\t\t* {\n\t\t\t\t\tfont-size: var(--font-size-2xs);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.label {\n\t\t\t\tcolor: var(--color-text-light);\n\t\t\t\tpadding-right: var(--spacing-4xs);\n\t\t\t}\n\n\t\t\t* {\n\t\t\t\tmax-width: unset;\n\t\t\t\tjustify-self: unset;\n\t\t\t\twhite-space: unset;\n\t\t\t\toverflow: hidden;\n\t\t\t\ttext-overflow: unset;\n\t\t\t\tpadding: 0;\n\t\t\t\tfont-size: var(--font-size-s);\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n","import type { IRestApiContext } from '@/Interface';\nimport { get } from '@/utils/apiUtils';\nimport type {\n\tWorkflowHistory,\n\tWorkflowVersion,\n\tWorkflowHistoryRequestParams,\n} from '@/types/workflowHistory';\n\nexport const getWorkflowHistory = async (\n\tcontext: IRestApiContext,\n\tworkflowId: string,\n\tqueryParams: WorkflowHistoryRequestParams,\n): Promise<WorkflowHistory[]> => {\n\tconst { data } = await get(\n\t\tcontext.baseUrl,\n\t\t`/workflow-history/workflow/${workflowId}`,\n\t\tqueryParams,\n\t);\n\treturn data;\n};\n\nexport const getWorkflowVersion = async (\n\tcontext: IRestApiContext,\n\tworkflowId: string,\n\tversionId: string,\n): Promise<WorkflowVersion> => {\n\tconst { data } = await get(\n\t\tcontext.baseUrl,\n\t\t`/workflow-history/workflow/${workflowId}/version/${versionId}`,\n\t);\n\treturn data;\n};\n","import { computed } from 'vue';\nimport { defineStore } from 'pinia';\nimport { saveAs } from 'file-saver';\nimport type { IWorkflowDataUpdate, IWorkflowDb } from '@/Interface';\nimport type {\n\tWorkflowHistory,\n\tWorkflowVersion,\n\tWorkflowHistoryRequestParams,\n\tWorkflowVersionId,\n} from '@/types/workflowHistory';\nimport * as whApi from '@/api/workflowHistory';\nimport { useRootStore } from '@/stores/n8nRoot.store';\nimport { useSettingsStore } from '@/stores/settings.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { getNewWorkflow } from '@/api/workflows';\n\nexport const useWorkflowHistoryStore = defineStore('workflowHistory', () => {\n\tconst rootStore = useRootStore();\n\tconst settingsStore = useSettingsStore();\n\tconst workflowsStore = useWorkflowsStore();\n\n\tconst licensePruneTime = computed(() => settingsStore.settings.workflowHistory.licensePruneTime);\n\tconst pruneTime = computed(() => settingsStore.settings.workflowHistory.pruneTime);\n\tconst evaluatedPruneTime = computed(() => Math.min(pruneTime.value, licensePruneTime.value));\n\tconst shouldUpgrade = computed(\n\t\t() => licensePruneTime.value !== -1 && licensePruneTime.value === pruneTime.value,\n\t);\n\n\tconst getWorkflowHistory = async (\n\t\tworkflowId: string,\n\t\tqueryParams: WorkflowHistoryRequestParams,\n\t): Promise<WorkflowHistory[]> =>\n\t\tawait whApi.getWorkflowHistory(rootStore.getRestApiContext, workflowId, queryParams);\n\n\tconst getWorkflowVersion = async (\n\t\tworkflowId: string,\n\t\tversionId: string,\n\t): Promise<WorkflowVersion> =>\n\t\tawait whApi.getWorkflowVersion(rootStore.getRestApiContext, workflowId, versionId);\n\n\tconst downloadVersion = async (\n\t\tworkflowId: string,\n\t\tworkflowVersionId: WorkflowVersionId,\n\t\tdata: { formattedCreatedAt: string },\n\t) => {\n\t\tconst [workflow, workflowVersion] = await Promise.all([\n\t\t\tworkflowsStore.fetchWorkflow(workflowId),\n\t\t\tgetWorkflowVersion(workflowId, workflowVersionId),\n\t\t]);\n\t\tconst { connections, nodes } = workflowVersion;\n\t\tconst blob = new Blob([JSON.stringify({ ...workflow, nodes, connections }, null, 2)], {\n\t\t\ttype: 'application/json;charset=utf-8',\n\t\t});\n\t\tsaveAs(blob, `${workflow.name}(${data.formattedCreatedAt}).json`);\n\t};\n\n\tconst cloneIntoNewWorkflow = async (\n\t\tworkflowId: string,\n\t\tworkflowVersionId: string,\n\t\tdata: { formattedCreatedAt: string },\n\t): Promise<IWorkflowDb> => {\n\t\tconst [workflow, workflowVersion] = await Promise.all([\n\t\t\tworkflowsStore.fetchWorkflow(workflowId),\n\t\t\tgetWorkflowVersion(workflowId, workflowVersionId),\n\t\t]);\n\t\tconst { connections, nodes } = workflowVersion;\n\t\tconst { name } = workflow;\n\t\tconst newWorkflow = await getNewWorkflow(\n\t\t\trootStore.getRestApiContext,\n\t\t\t`${name} (${data.formattedCreatedAt})`,\n\t\t);\n\t\tconst newWorkflowData: IWorkflowDataUpdate = {\n\t\t\tnodes,\n\t\t\tconnections,\n\t\t\tname: newWorkflow.name,\n\t\t};\n\t\treturn await workflowsStore.createNewWorkflow(newWorkflowData);\n\t};\n\n\tconst restoreWorkflow = async (\n\t\tworkflowId: string,\n\t\tworkflowVersionId: string,\n\t\tshouldDeactivate: boolean,\n\t): Promise<IWorkflowDb> => {\n\t\tconst workflowVersion = await getWorkflowVersion(workflowId, workflowVersionId);\n\t\tconst { connections, nodes } = workflowVersion;\n\t\tconst updateData: IWorkflowDataUpdate = { connections, nodes };\n\n\t\tif (shouldDeactivate) {\n\t\t\tupdateData.active = false;\n\t\t}\n\n\t\treturn await workflowsStore\n\t\t\t.updateWorkflow(workflowId, updateData, true)\n\t\t\t.catch(async (error) => {\n\t\t\t\tif (error.httpStatusCode === 400 && error.message.includes('can not be activated')) {\n\t\t\t\t\treturn await workflowsStore.fetchWorkflow(workflowId);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(error);\n\t\t\t\t}\n\t\t\t});\n\t};\n\n\treturn {\n\t\tgetWorkflowHistory,\n\t\tgetWorkflowVersion,\n\t\tdownloadVersion,\n\t\tcloneIntoNewWorkflow,\n\t\trestoreWorkflow,\n\t\tevaluatedPruneTime,\n\t\tshouldUpgrade,\n\t};\n});\n","<script setup lang=\"ts\">\nimport { onBeforeMount, ref, watchEffect, computed, h } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport type { IWorkflowDb, UserAction } from '@/Interface';\nimport { VIEWS, WORKFLOW_HISTORY_VERSION_RESTORE } from '@/constants';\nimport { useI18n } from '@/composables/useI18n';\nimport { useToast } from '@/composables/useToast';\nimport type {\n\tWorkflowHistoryActionTypes,\n\tWorkflowVersionId,\n\tWorkflowHistoryRequestParams,\n\tWorkflowHistory,\n\tWorkflowVersion,\n} from '@/types/workflowHistory';\nimport WorkflowHistoryList from '@/components/WorkflowHistory/WorkflowHistoryList.vue';\nimport WorkflowHistoryContent from '@/components/WorkflowHistory/WorkflowHistoryContent.vue';\nimport { useWorkflowHistoryStore } from '@/stores/workflowHistory.store';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { telemetry } from '@/plugins/telemetry';\nimport { useRootStore } from '@/stores/n8nRoot.store';\n\ntype WorkflowHistoryActionRecord = {\n\t[K in Uppercase<WorkflowHistoryActionTypes[number]>]: Lowercase<K>;\n};\n\nconst enum WorkflowHistoryVersionRestoreModalActions {\n\trestore = 'restore',\n\tdeactivateAndRestore = 'deactivateAndRestore',\n\tcancel = 'cancel',\n}\n\nconst workflowHistoryActionTypes: WorkflowHistoryActionTypes = [\n\t'restore',\n\t'clone',\n\t'open',\n\t'download',\n];\nconst WORKFLOW_HISTORY_ACTIONS = workflowHistoryActionTypes.reduce(\n\t(record, key) => ({ ...record, [key.toUpperCase()]: key }),\n\t{} as WorkflowHistoryActionRecord,\n);\n\nconst route = useRoute();\nconst router = useRouter();\nconst i18n = useI18n();\nconst toast = useToast();\nconst workflowHistoryStore = useWorkflowHistoryStore();\nconst uiStore = useUIStore();\nconst workflowsStore = useWorkflowsStore();\n\nconst canRender = ref(true);\nconst isListLoading = ref(true);\nconst requestNumberOfItems = ref(20);\nconst lastReceivedItemsLength = ref(0);\nconst editorRoute = computed(() => ({\n\tname: VIEWS.WORKFLOW,\n\tparams: {\n\t\tname: route.params.workflowId,\n\t},\n}));\nconst activeWorkflow = ref<IWorkflowDb | null>(null);\nconst workflowHistory = ref<WorkflowHistory[]>([]);\nconst activeWorkflowVersion = ref<WorkflowVersion | null>(null);\nconst actions = computed<UserAction[]>(() =>\n\tworkflowHistoryActionTypes.map((value) => ({\n\t\tlabel: i18n.baseText(`workflowHistory.item.actions.${value}`),\n\t\tdisabled: false,\n\t\tvalue,\n\t})),\n);\n\nconst isFirstItemShown = computed(\n\t() => workflowHistory.value[0]?.versionId === route.params.versionId,\n);\nconst evaluatedPruneTime = computed(() => Math.floor(workflowHistoryStore.evaluatedPruneTime / 24));\n\nconst sendTelemetry = (event: string) => {\n\ttelemetry.track(event, {\n\t\tinstance_id: useRootStore().instanceId,\n\t\tworkflow_id: route.params.workflowId,\n\t});\n};\n\nconst loadMore = async (queryParams: WorkflowHistoryRequestParams) => {\n\tconst history = await workflowHistoryStore.getWorkflowHistory(\n\t\troute.params.workflowId,\n\t\tqueryParams,\n\t);\n\tlastReceivedItemsLength.value = history.length;\n\tworkflowHistory.value = workflowHistory.value.concat(history);\n};\n\nonBeforeMount(async () => {\n\tsendTelemetry('User opened workflow history');\n\ttry {\n\t\tconst [workflow] = await Promise.all([\n\t\t\tworkflowsStore.fetchWorkflow(route.params.workflowId),\n\t\t\tloadMore({ take: requestNumberOfItems.value }),\n\t\t]);\n\t\tactiveWorkflow.value = workflow;\n\t\tisListLoading.value = false;\n\n\t\tif (!route.params.versionId && workflowHistory.value.length) {\n\t\t\tawait router.replace({\n\t\t\t\tname: VIEWS.WORKFLOW_HISTORY,\n\t\t\t\tparams: {\n\t\t\t\t\tworkflowId: route.params.workflowId,\n\t\t\t\t\tversionId: workflowHistory.value[0].versionId,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t} catch (error) {\n\t\tcanRender.value = false;\n\t\ttoast.showError(error, i18n.baseText('workflowHistory.title'));\n\t}\n});\n\nconst openInNewTab = (id: WorkflowVersionId) => {\n\tconst { href } = router.resolve({\n\t\tname: VIEWS.WORKFLOW_HISTORY,\n\t\tparams: {\n\t\t\tworkflowId: route.params.workflowId,\n\t\t\tversionId: id,\n\t\t},\n\t});\n\twindow.open(href, '_blank');\n};\n\nconst openRestorationModal = async (\n\tisWorkflowActivated: boolean,\n\tformattedCreatedAt: string,\n): Promise<WorkflowHistoryVersionRestoreModalActions> => {\n\treturn await new Promise((resolve, reject) => {\n\t\tconst buttons = [\n\t\t\t{\n\t\t\t\ttext: i18n.baseText('workflowHistory.action.restore.modal.button.cancel'),\n\t\t\t\ttype: 'tertiary',\n\t\t\t\taction: () => {\n\t\t\t\t\tresolve(WorkflowHistoryVersionRestoreModalActions.cancel);\n\t\t\t\t},\n\t\t\t},\n\t\t];\n\n\t\tif (isWorkflowActivated) {\n\t\t\tbuttons.push({\n\t\t\t\ttext: i18n.baseText('workflowHistory.action.restore.modal.button.deactivateAndRestore'),\n\t\t\t\ttype: 'tertiary',\n\t\t\t\taction: () => {\n\t\t\t\t\tresolve(WorkflowHistoryVersionRestoreModalActions.deactivateAndRestore);\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tbuttons.push({\n\t\t\ttext: i18n.baseText('workflowHistory.action.restore.modal.button.restore'),\n\t\t\ttype: 'primary',\n\t\t\taction: () => {\n\t\t\t\tresolve(WorkflowHistoryVersionRestoreModalActions.restore);\n\t\t\t},\n\t\t});\n\n\t\ttry {\n\t\t\tuiStore.openModalWithData({\n\t\t\t\tname: WORKFLOW_HISTORY_VERSION_RESTORE,\n\t\t\t\tdata: {\n\t\t\t\t\tbeforeClose: () => {\n\t\t\t\t\t\tresolve(WorkflowHistoryVersionRestoreModalActions.cancel);\n\t\t\t\t\t},\n\t\t\t\t\tisWorkflowActivated,\n\t\t\t\t\tformattedCreatedAt,\n\t\t\t\t\tbuttons,\n\t\t\t\t},\n\t\t\t});\n\t\t} catch (error) {\n\t\t\treject(error);\n\t\t}\n\t});\n};\n\nconst cloneWorkflowVersion = async (\n\tid: WorkflowVersionId,\n\tdata: { formattedCreatedAt: string },\n) => {\n\tconst clonedWorkflow = await workflowHistoryStore.cloneIntoNewWorkflow(\n\t\troute.params.workflowId,\n\t\tid,\n\t\tdata,\n\t);\n\tconst { href } = router.resolve({\n\t\tname: VIEWS.WORKFLOW,\n\t\tparams: {\n\t\t\tname: clonedWorkflow.id,\n\t\t},\n\t});\n\n\ttoast.showMessage({\n\t\ttitle: i18n.baseText('workflowHistory.action.clone.success.title'),\n\t\tmessage: h(\n\t\t\t'a',\n\t\t\t{ href, target: '_blank' },\n\t\t\ti18n.baseText('workflowHistory.action.clone.success.message'),\n\t\t),\n\t\ttype: 'success',\n\t\tduration: 10000,\n\t});\n};\n\nconst restoreWorkflowVersion = async (\n\tid: WorkflowVersionId,\n\tdata: { formattedCreatedAt: string },\n) => {\n\tconst workflow = await workflowsStore.fetchWorkflow(route.params.workflowId);\n\tconst modalAction = await openRestorationModal(workflow.active, data.formattedCreatedAt);\n\tif (modalAction === WorkflowHistoryVersionRestoreModalActions.cancel) {\n\t\treturn;\n\t}\n\tactiveWorkflow.value = await workflowHistoryStore.restoreWorkflow(\n\t\troute.params.workflowId,\n\t\tid,\n\t\tmodalAction === WorkflowHistoryVersionRestoreModalActions.deactivateAndRestore,\n\t);\n\tconst history = await workflowHistoryStore.getWorkflowHistory(route.params.workflowId, {\n\t\ttake: 1,\n\t});\n\tworkflowHistory.value = history.concat(workflowHistory.value);\n\ttoast.showMessage({\n\t\ttitle: i18n.baseText('workflowHistory.action.restore.success.title'),\n\t\ttype: 'success',\n\t});\n};\n\nconst onAction = async ({\n\taction,\n\tid,\n\tdata,\n}: {\n\taction: WorkflowHistoryActionTypes[number];\n\tid: WorkflowVersionId;\n\tdata: { formattedCreatedAt: string };\n}) => {\n\ttry {\n\t\tswitch (action) {\n\t\t\tcase WORKFLOW_HISTORY_ACTIONS.OPEN:\n\t\t\t\topenInNewTab(id);\n\t\t\t\tsendTelemetry('User opened version in new tab');\n\t\t\t\tbreak;\n\t\t\tcase WORKFLOW_HISTORY_ACTIONS.DOWNLOAD:\n\t\t\t\tawait workflowHistoryStore.downloadVersion(route.params.workflowId, id, data);\n\t\t\t\tsendTelemetry('User downloaded version');\n\t\t\t\tbreak;\n\t\t\tcase WORKFLOW_HISTORY_ACTIONS.CLONE:\n\t\t\t\tawait cloneWorkflowVersion(id, data);\n\t\t\t\tsendTelemetry('User cloned version');\n\t\t\t\tbreak;\n\t\t\tcase WORKFLOW_HISTORY_ACTIONS.RESTORE:\n\t\t\t\tawait restoreWorkflowVersion(id, data);\n\t\t\t\tsendTelemetry('User restored version');\n\t\t\t\tbreak;\n\t\t}\n\t} catch (error) {\n\t\ttoast.showError(\n\t\t\terror,\n\t\t\ti18n.baseText('workflowHistory.action.error.title', {\n\t\t\t\tinterpolate: {\n\t\t\t\t\taction: i18n.baseText(`workflowHistory.item.actions.${action}`).toLowerCase(),\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\t}\n};\n\nconst onPreview = async ({ event, id }: { event: MouseEvent; id: WorkflowVersionId }) => {\n\tif (event.metaKey || event.ctrlKey) {\n\t\topenInNewTab(id);\n\t\tsendTelemetry('User opened version in new tab');\n\t} else {\n\t\tawait router.push({\n\t\t\tname: VIEWS.WORKFLOW_HISTORY,\n\t\t\tparams: {\n\t\t\t\tworkflowId: route.params.workflowId,\n\t\t\t\tversionId: id,\n\t\t\t},\n\t\t});\n\t}\n};\n\nconst onUpgrade = () => {\n\tvoid uiStore.goToUpgrade('workflow-history', 'upgrade-workflow-history');\n};\n\nwatchEffect(async () => {\n\tif (!route.params.versionId) {\n\t\treturn;\n\t}\n\ttry {\n\t\tactiveWorkflowVersion.value = await workflowHistoryStore.getWorkflowVersion(\n\t\t\troute.params.workflowId,\n\t\t\troute.params.versionId,\n\t\t);\n\t\tsendTelemetry('User selected version');\n\t} catch (error) {\n\t\ttoast.showError(\n\t\t\tnew Error(`${error.message} \"${route.params.versionId}\"&nbsp;`),\n\t\t\ti18n.baseText('workflowHistory.title'),\n\t\t);\n\t}\n\n\ttry {\n\t\tactiveWorkflow.value = await workflowsStore.fetchWorkflow(route.params.workflowId);\n\t} catch (error) {\n\t\tcanRender.value = false;\n\t\ttoast.showError(error, i18n.baseText('workflowHistory.title'));\n\t}\n});\n</script>\n<template>\n\t<div :class=\"$style.view\">\n\t\t<n8n-heading :class=\"$style.header\" tag=\"h2\" size=\"medium\">\n\t\t\t{{ activeWorkflow?.name }}\n\t\t</n8n-heading>\n\t\t<div :class=\"$style.corner\">\n\t\t\t<n8n-heading tag=\"h2\" size=\"medium\" bold>\n\t\t\t\t{{ i18n.baseText('workflowHistory.title') }}\n\t\t\t</n8n-heading>\n\t\t\t<router-link :to=\"editorRoute\" data-test-id=\"workflow-history-close-button\">\n\t\t\t\t<n8n-button type=\"tertiary\" icon=\"times\" size=\"small\" text square />\n\t\t\t</router-link>\n\t\t</div>\n\t\t<div :class=\"$style.listComponentWrapper\">\n\t\t\t<WorkflowHistoryList\n\t\t\t\tv-if=\"canRender\"\n\t\t\t\t:items=\"workflowHistory\"\n\t\t\t\t:last-received-items-length=\"lastReceivedItemsLength\"\n\t\t\t\t:active-item=\"activeWorkflowVersion\"\n\t\t\t\t:actions=\"actions\"\n\t\t\t\t:request-number-of-items=\"requestNumberOfItems\"\n\t\t\t\t:should-upgrade=\"workflowHistoryStore.shouldUpgrade\"\n\t\t\t\t:evaluated-prune-time=\"evaluatedPruneTime\"\n\t\t\t\t:is-list-loading=\"isListLoading\"\n\t\t\t\t@action=\"onAction\"\n\t\t\t\t@preview=\"onPreview\"\n\t\t\t\t@load-more=\"loadMore\"\n\t\t\t\t@upgrade=\"onUpgrade\"\n\t\t\t/>\n\t\t</div>\n\t\t<div :class=\"$style.contentComponentWrapper\">\n\t\t\t<WorkflowHistoryContent\n\t\t\t\tv-if=\"canRender\"\n\t\t\t\t:workflow=\"activeWorkflow\"\n\t\t\t\t:workflow-version=\"activeWorkflowVersion\"\n\t\t\t\t:actions=\"actions\"\n\t\t\t\t:is-list-loading=\"isListLoading\"\n\t\t\t\t:is-first-item-shown=\"isFirstItemShown\"\n\t\t\t\t@action=\"onAction\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</template>\n<style module lang=\"scss\">\n.view {\n\tposition: relative;\n\tdisplay: grid;\n\twidth: 100%;\n\tgrid-template-areas: 'header corner' 'content list';\n\tgrid-template-columns: auto 330px;\n\tgrid-template-rows: 65px auto;\n\tbackground-color: var(--color-background-xlight);\n}\n\n.header {\n\tgrid-area: header;\n\tdisplay: flex;\n\talign-items: center;\n\tpadding: 0 var(--spacing-l);\n\tborder-bottom: var(--border-width-base) var(--border-style-base) var(--color-foreground-base);\n}\n\n.corner {\n\tgrid-area: corner;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tpadding: 0 var(--spacing-3xs) 0 var(--spacing-s);\n\tbackground-color: var(--color-background-lighter);\n\tborder-bottom: var(--border-width-base) var(--border-style-base) var(--color-foreground-base);\n\tborder-left: var(--border-width-base) var(--border-style-base) var(--color-foreground-base);\n}\n\n.contentComponentWrapper {\n\tgrid-area: content;\n\tposition: relative;\n}\n\n.listComponentWrapper {\n\tgrid-area: list;\n\tposition: relative;\n\n\t&::before {\n\t\tcontent: '';\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tbottom: 0;\n\t\tleft: 0;\n\t\twidth: var(--border-width-base);\n\t\tbackground-color: var(--color-foreground-base);\n\t}\n}\n</style>\n"],"names":["props","__props","emit","__emit","i18n","useI18n","actionsVisible","ref","itemElement","authorElement","isAuthorElementTruncated","formattedCreatedAt","computed","currentYear","date","time","dateformat","authors","allAuthors","label","idLabel","onAction","action","onVisibleChange","visible","onItemClick","event","onMounted","_a","_b","_c","listElement","shouldAutoScroll","observer","getActions","index","observeElement","element","entry","id","data","onPreview","onItemMounted","offsetTop","isActive","workflowVersionPreview","pinData","workflow","actions","getWorkflowHistory","context","workflowId","queryParams","get","getWorkflowVersion","versionId","useWorkflowHistoryStore","defineStore","rootStore","useRootStore","settingsStore","useSettingsStore","workflowsStore","useWorkflowsStore","licensePruneTime","pruneTime","evaluatedPruneTime","shouldUpgrade","whApi.getWorkflowHistory","whApi.getWorkflowVersion","workflowVersionId","workflowVersion","connections","nodes","blob","saveAs","name","newWorkflow","getNewWorkflow","newWorkflowData","shouldDeactivate","updateData","error","workflowHistoryActionTypes","WORKFLOW_HISTORY_ACTIONS","record","key","route","useRoute","router","useRouter","toast","useToast","workflowHistoryStore","uiStore","useUIStore","canRender","isListLoading","requestNumberOfItems","lastReceivedItemsLength","editorRoute","VIEWS","activeWorkflow","workflowHistory","activeWorkflowVersion","value","isFirstItemShown","sendTelemetry","telemetry","loadMore","history","onBeforeMount","openInNewTab","href","openRestorationModal","isWorkflowActivated","resolve","reject","buttons","WORKFLOW_HISTORY_VERSION_RESTORE","cloneWorkflowVersion","clonedWorkflow","h","restoreWorkflowVersion","modalAction","onUpgrade","watchEffect"],"mappings":"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"}
1
+ {"version":3,"file":"WorkflowHistory-RGKALSm6.js","sources":["../../src/components/WorkflowHistory/WorkflowHistoryListItem.vue","../../src/components/WorkflowHistory/WorkflowHistoryList.vue","../../src/components/WorkflowHistory/WorkflowHistoryContent.vue","../../src/api/workflowHistory.ts","../../src/stores/workflowHistory.store.ts","../../src/views/WorkflowHistory.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, ref, onMounted } from 'vue';\nimport dateformat from 'dateformat';\nimport type { UserAction } from 'n8n-design-system';\nimport type {\n\tWorkflowHistory,\n\tWorkflowVersionId,\n\tWorkflowHistoryActionTypes,\n} from '@/types/workflowHistory';\nimport { useI18n } from '@/composables/useI18n';\n\nconst props = defineProps<{\n\titem: WorkflowHistory;\n\tindex: number;\n\tactions: UserAction[];\n\tisActive: boolean;\n}>();\nconst emit = defineEmits<{\n\t(\n\t\tevent: 'action',\n\t\tvalue: {\n\t\t\taction: WorkflowHistoryActionTypes[number];\n\t\t\tid: WorkflowVersionId;\n\t\t\tdata: { formattedCreatedAt: string };\n\t\t},\n\t): void;\n\t(event: 'preview', value: { event: MouseEvent; id: WorkflowVersionId }): void;\n\t(event: 'mounted', value: { index: number; offsetTop: number; isActive: boolean }): void;\n}>();\n\nconst i18n = useI18n();\n\nconst actionsVisible = ref(false);\nconst itemElement = ref<HTMLElement | null>(null);\nconst authorElement = ref<HTMLElement | null>(null);\nconst isAuthorElementTruncated = ref(false);\n\nconst formattedCreatedAt = computed<string>(() => {\n\tconst currentYear = new Date().getFullYear().toString();\n\tconst [date, time] = dateformat(\n\t\tprops.item.createdAt,\n\t\t`${props.item.createdAt.startsWith(currentYear) ? '' : 'yyyy '}mmm d\"#\"HH:MM:ss`,\n\t).split('#');\n\n\treturn i18n.baseText('workflowHistory.item.createdAt', { interpolate: { date, time } });\n});\n\nconst authors = computed<{ size: number; label: string }>(() => {\n\tconst allAuthors = props.item.authors.split(', ');\n\tlet label = allAuthors[0];\n\n\tif (allAuthors.length > 1) {\n\t\tlabel = `${label} + ${allAuthors.length - 1}`;\n\t}\n\n\treturn {\n\t\tsize: allAuthors.length,\n\t\tlabel,\n\t};\n});\n\nconst idLabel = computed<string>(() =>\n\ti18n.baseText('workflowHistory.item.id', { interpolate: { id: props.item.versionId } }),\n);\n\nconst onAction = (action: WorkflowHistoryActionTypes[number]) => {\n\temit('action', {\n\t\taction,\n\t\tid: props.item.versionId,\n\t\tdata: { formattedCreatedAt: formattedCreatedAt.value },\n\t});\n};\n\nconst onVisibleChange = (visible: boolean) => {\n\tactionsVisible.value = visible;\n};\n\nconst onItemClick = (event: MouseEvent) => {\n\temit('preview', { event, id: props.item.versionId });\n};\n\nonMounted(() => {\n\temit('mounted', {\n\t\tindex: props.index,\n\t\toffsetTop: itemElement.value?.offsetTop ?? 0,\n\t\tisActive: props.isActive,\n\t});\n\tisAuthorElementTruncated.value =\n\t\tauthorElement.value?.scrollWidth > authorElement.value?.clientWidth;\n});\n</script>\n<template>\n\t<li\n\t\tref=\"itemElement\"\n\t\tdata-test-id=\"workflow-history-list-item\"\n\t\t:class=\"{\n\t\t\t[$style.item]: true,\n\t\t\t[$style.active]: props.isActive,\n\t\t\t[$style.actionsVisible]: actionsVisible,\n\t\t}\"\n\t>\n\t\t<slot :formatted-created-at=\"formattedCreatedAt\">\n\t\t\t<p @click=\"onItemClick\">\n\t\t\t\t<time :datetime=\"item.createdAt\">{{ formattedCreatedAt }}</time>\n\t\t\t\t<n8n-tooltip\n\t\t\t\t\tplacement=\"right-end\"\n\t\t\t\t\t:disabled=\"authors.size < 2 && !isAuthorElementTruncated\"\n\t\t\t\t>\n\t\t\t\t\t<template #content>{{ props.item.authors }}</template>\n\t\t\t\t\t<span ref=\"authorElement\">{{ authors.label }}</span>\n\t\t\t\t</n8n-tooltip>\n\t\t\t\t<data :value=\"item.versionId\">{{ idLabel }}</data>\n\t\t\t</p>\n\t\t</slot>\n\t\t<div :class=\"$style.tail\">\n\t\t\t<n8n-badge v-if=\"props.index === 0\">\n\t\t\t\t{{ i18n.baseText('workflowHistory.item.latest') }}\n\t\t\t</n8n-badge>\n\t\t\t<n8n-action-toggle\n\t\t\t\ttheme=\"dark\"\n\t\t\t\t:class=\"$style.actions\"\n\t\t\t\t:actions=\"props.actions\"\n\t\t\t\tplacement=\"bottom-end\"\n\t\t\t\t@action=\"onAction\"\n\t\t\t\t@click.stop\n\t\t\t\t@visible-change=\"onVisibleChange\"\n\t\t\t>\n\t\t\t\t<slot name=\"action-toggle-button\" />\n\t\t\t</n8n-action-toggle>\n\t\t</div>\n\t</li>\n</template>\n<style module lang=\"scss\">\n.item {\n\tdisplay: flex;\n\tposition: relative;\n\talign-items: center;\n\tjustify-content: space-between;\n\tborder-left: 2px var(--border-style-base) transparent;\n\tborder-bottom: var(--border-width-base) var(--border-style-base) var(--color-foreground-base);\n\tcolor: var(--color-text-base);\n\tfont-size: var(--font-size-2xs);\n\n\tp {\n\t\tdisplay: grid;\n\t\tpadding: var(--spacing-s);\n\t\tcursor: pointer;\n\t\tflex: 1 1 auto;\n\n\t\ttime {\n\t\t\tpadding: 0 0 var(--spacing-5xs);\n\t\t\tcolor: var(--color-text-dark);\n\t\t\tfont-size: var(--font-size-s);\n\t\t\tfont-weight: var(--font-weight-bold);\n\t\t}\n\n\t\tspan,\n\t\tdata {\n\t\t\tjustify-self: start;\n\t\t\tmax-width: 160px;\n\t\t\twhite-space: nowrap;\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t\tmargin-top: calc(var(--spacing-4xs) * -1);\n\t\t\tfont-size: var(--font-size-2xs);\n\t\t}\n\t}\n\n\t.tail {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: space-between;\n\t}\n\n\t&.active {\n\t\tbackground-color: var(--color-background-base);\n\t\tborder-left-color: var(--color-primary);\n\n\t\tp {\n\t\t\tcursor: default;\n\t\t}\n\t}\n\n\t&:hover,\n\t&.actionsVisible {\n\t\tborder-left-color: var(--color-foreground-xdark);\n\t}\n}\n\n.actions {\n\tdisplay: block;\n\tpadding: var(--spacing-3xs);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport type { UserAction } from 'n8n-design-system';\nimport { useI18n } from '@/composables/useI18n';\nimport type {\n\tWorkflowHistory,\n\tWorkflowVersionId,\n\tWorkflowHistoryActionTypes,\n\tWorkflowHistoryRequestParams,\n} from '@/types/workflowHistory';\nimport WorkflowHistoryListItem from '@/components/WorkflowHistory/WorkflowHistoryListItem.vue';\n\nconst props = defineProps<{\n\titems: WorkflowHistory[];\n\tactiveItem: WorkflowHistory | null;\n\tactions: UserAction[];\n\trequestNumberOfItems: number;\n\tlastReceivedItemsLength: number;\n\tevaluatedPruneTime: number;\n\tshouldUpgrade?: boolean;\n\tisListLoading?: boolean;\n}>();\n\nconst emit = defineEmits<{\n\t(\n\t\tevent: 'action',\n\t\tvalue: {\n\t\t\taction: WorkflowHistoryActionTypes[number];\n\t\t\tid: WorkflowVersionId;\n\t\t\tdata: { formattedCreatedAt: string };\n\t\t},\n\t): void;\n\t(event: 'preview', value: { event: MouseEvent; id: WorkflowVersionId }): void;\n\t(event: 'loadMore', value: WorkflowHistoryRequestParams): void;\n\t(event: 'upgrade'): void;\n}>();\n\nconst i18n = useI18n();\n\nconst listElement = ref<Element | null>(null);\nconst shouldAutoScroll = ref(true);\nconst observer = ref<IntersectionObserver | null>(null);\n\nconst getActions = (index: number) =>\n\tindex === 0 ? props.actions.filter((action) => action.value !== 'restore') : props.actions;\n\nconst observeElement = (element: Element) => {\n\tobserver.value = new IntersectionObserver(\n\t\t([entry]) => {\n\t\t\tif (entry.isIntersecting) {\n\t\t\t\tobserver.value?.unobserve(element);\n\t\t\t\tobserver.value?.disconnect();\n\t\t\t\tobserver.value = null;\n\t\t\t\temit('loadMore', { take: props.requestNumberOfItems, skip: props.items.length });\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\troot: listElement.value,\n\t\t\tthreshold: 0.01,\n\t\t},\n\t);\n\n\tobserver.value.observe(element);\n};\n\nconst onAction = ({\n\taction,\n\tid,\n\tdata,\n}: {\n\taction: WorkflowHistoryActionTypes[number];\n\tid: WorkflowVersionId;\n\tdata: { formattedCreatedAt: string };\n}) => {\n\tshouldAutoScroll.value = false;\n\temit('action', { action, id, data });\n};\n\nconst onPreview = ({ event, id }: { event: MouseEvent; id: WorkflowVersionId }) => {\n\tshouldAutoScroll.value = false;\n\temit('preview', { event, id });\n};\n\nconst onItemMounted = ({\n\tindex,\n\toffsetTop,\n\tisActive,\n}: {\n\tindex: number;\n\toffsetTop: number;\n\tisActive: boolean;\n}) => {\n\tif (isActive && shouldAutoScroll.value) {\n\t\tshouldAutoScroll.value = false;\n\t\tlistElement.value?.scrollTo({ top: offsetTop, behavior: 'smooth' });\n\t}\n\n\tif (\n\t\tindex === props.items.length - 1 &&\n\t\tprops.lastReceivedItemsLength === props.requestNumberOfItems\n\t) {\n\t\tobserveElement(listElement.value?.children[index] as Element);\n\t}\n};\n</script>\n\n<template>\n\t<ul ref=\"listElement\" :class=\"$style.list\" data-test-id=\"workflow-history-list\">\n\t\t<WorkflowHistoryListItem\n\t\t\tv-for=\"(item, index) in props.items\"\n\t\t\t:key=\"item.versionId\"\n\t\t\t:index=\"index\"\n\t\t\t:item=\"item\"\n\t\t\t:is-active=\"item.versionId === props.activeItem?.versionId\"\n\t\t\t:actions=\"getActions(index)\"\n\t\t\t@action=\"onAction\"\n\t\t\t@preview=\"onPreview\"\n\t\t\t@mounted=\"onItemMounted\"\n\t\t/>\n\t\t<li v-if=\"!props.items.length && !props.isListLoading\" :class=\"$style.empty\">\n\t\t\t{{ i18n.baseText('workflowHistory.empty') }}\n\t\t\t<br />\n\t\t\t{{ i18n.baseText('workflowHistory.hint') }}\n\t\t</li>\n\t\t<li\n\t\t\tv-if=\"props.isListLoading\"\n\t\t\t:class=\"$style.loader\"\n\t\t\trole=\"status\"\n\t\t\taria-live=\"polite\"\n\t\t\taria-busy=\"true\"\n\t\t\t:aria-label=\"i18n.baseText('generic.loading')\"\n\t\t>\n\t\t\t<n8n-loading :rows=\"3\" class=\"mb-xs\" />\n\t\t\t<n8n-loading :rows=\"3\" class=\"mb-xs\" />\n\t\t\t<n8n-loading :rows=\"3\" class=\"mb-xs\" />\n\t\t</li>\n\t\t<li v-if=\"props.shouldUpgrade\" :class=\"$style.retention\">\n\t\t\t<span>\n\t\t\t\t{{\n\t\t\t\t\ti18n.baseText('workflowHistory.limit', {\n\t\t\t\t\t\tinterpolate: { evaluatedPruneTime: props.evaluatedPruneTime },\n\t\t\t\t\t})\n\t\t\t\t}}\n\t\t\t</span>\n\t\t\t<i18n-t keypath=\"workflowHistory.upgrade\" tag=\"span\">\n\t\t\t\t<template #link>\n\t\t\t\t\t<a href=\"#\" @click=\"emit('upgrade')\">\n\t\t\t\t\t\t{{ i18n.baseText('workflowHistory.upgrade.link') }}\n\t\t\t\t\t</a>\n\t\t\t\t</template>\n\t\t\t</i18n-t>\n\t\t</li>\n\t</ul>\n</template>\n\n<style module lang=\"scss\">\n.list {\n\tposition: absolute;\n\tleft: 0;\n\ttop: 0;\n\twidth: 100%;\n\theight: 100%;\n\toverflow: auto;\n}\n\n.empty {\n\tdisplay: flex;\n\tposition: absolute;\n\theight: 100%;\n\tpadding: 0 25%;\n\tjustify-content: center;\n\talign-items: center;\n\ttext-align: center;\n\tcolor: var(--color-text-base);\n\tfont-size: var(--font-size-s);\n\tline-height: var(--font-line-height-loose);\n}\n\n.loader {\n\tpadding: 0 var(--spacing-s);\n}\n\n.retention {\n\tdisplay: grid;\n\tpadding: var(--spacing-s);\n\tfont-size: var(--font-size-2xs);\n\tline-height: var(--font-line-height-loose);\n\ttext-align: center;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { IWorkflowDb, UserAction } from '@/Interface';\nimport type {\n\tWorkflowVersion,\n\tWorkflowHistoryActionTypes,\n\tWorkflowVersionId,\n} from '@/types/workflowHistory';\nimport WorkflowPreview from '@/components/WorkflowPreview.vue';\nimport WorkflowHistoryListItem from '@/components/WorkflowHistory/WorkflowHistoryListItem.vue';\nimport { useI18n } from '@/composables/useI18n';\n\nconst i18n = useI18n();\n\nconst props = defineProps<{\n\tworkflow: IWorkflowDb | null;\n\tworkflowVersion: WorkflowVersion | null;\n\tactions: UserAction[];\n\tisListLoading?: boolean;\n\tisFirstItemShown?: boolean;\n}>();\n\nconst emit = defineEmits<{\n\t(\n\t\tevent: 'action',\n\t\tvalue: {\n\t\t\taction: WorkflowHistoryActionTypes[number];\n\t\t\tid: WorkflowVersionId;\n\t\t\tdata: { formattedCreatedAt: string };\n\t\t},\n\t): void;\n}>();\n\nconst workflowVersionPreview = computed<IWorkflowDb | undefined>(() => {\n\tif (!props.workflowVersion || !props.workflow) {\n\t\treturn;\n\t}\n\tconst { pinData, ...workflow } = props.workflow;\n\treturn {\n\t\t...workflow,\n\t\tnodes: props.workflowVersion.nodes,\n\t\tconnections: props.workflowVersion.connections,\n\t};\n});\n\nconst actions = computed(() =>\n\tprops.isFirstItemShown\n\t\t? props.actions.filter((action) => action.value !== 'restore')\n\t\t: props.actions,\n);\n\nconst onAction = ({\n\taction,\n\tid,\n\tdata,\n}: {\n\taction: WorkflowHistoryActionTypes[number];\n\tid: WorkflowVersionId;\n\tdata: { formattedCreatedAt: string };\n}) => {\n\temit('action', { action, id, data });\n};\n</script>\n\n<template>\n\t<div :class=\"$style.content\">\n\t\t<WorkflowPreview\n\t\t\tv-if=\"props.workflowVersion\"\n\t\t\t:workflow=\"workflowVersionPreview\"\n\t\t\t:loading=\"props.isListLoading\"\n\t\t\tloader-type=\"spinner\"\n\t\t/>\n\t\t<ul :class=\"$style.info\">\n\t\t\t<WorkflowHistoryListItem\n\t\t\t\tv-if=\"props.workflowVersion\"\n\t\t\t\t:class=\"$style.card\"\n\t\t\t\t:index=\"-1\"\n\t\t\t\t:item=\"props.workflowVersion\"\n\t\t\t\t:is-active=\"false\"\n\t\t\t\t:actions=\"actions\"\n\t\t\t\t@action=\"onAction\"\n\t\t\t>\n\t\t\t\t<template #default=\"{ formattedCreatedAt }\">\n\t\t\t\t\t<section :class=\"$style.text\">\n\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t<span :class=\"$style.label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('workflowHistory.content.title') }}:\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<time :datetime=\"props.workflowVersion.createdAt\">{{ formattedCreatedAt }}</time>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t<span :class=\"$style.label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('workflowHistory.content.editedBy') }}:\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<span>{{ props.workflowVersion.authors }}</span>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t<span :class=\"$style.label\">\n\t\t\t\t\t\t\t\t{{ i18n.baseText('workflowHistory.content.versionId') }}:\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<data :value=\"props.workflowVersion.versionId\">{{\n\t\t\t\t\t\t\t\tprops.workflowVersion.versionId\n\t\t\t\t\t\t\t}}</data>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</section>\n\t\t\t\t</template>\n\t\t\t\t<template #action-toggle-button>\n\t\t\t\t\t<n8n-button type=\"tertiary\" size=\"large\" data-test-id=\"action-toggle-button\">\n\t\t\t\t\t\t{{ i18n.baseText('workflowHistory.content.actions') }}\n\t\t\t\t\t\t<n8n-icon class=\"ml-3xs\" icon=\"chevron-down\" size=\"small\" />\n\t\t\t\t\t</n8n-button>\n\t\t\t\t</template>\n\t\t\t</WorkflowHistoryListItem>\n\t\t</ul>\n\t</div>\n</template>\n\n<style module lang=\"scss\">\n.content {\n\tposition: absolute;\n\tdisplay: block;\n\tleft: 0;\n\ttop: 0;\n\twidth: 100%;\n\theight: 100%;\n\toverflow: auto;\n}\n\n.info {\n\tposition: absolute;\n\tz-index: 1;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n}\n\n.card {\n\tpadding: var(--spacing-s) var(--spacing-l) 0 var(--spacing-xl);\n\tborder: 0;\n\talign-items: start;\n\n\t.text {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tflex: 1 1 auto;\n\n\t\tp {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tpadding: 0;\n\t\t\tcursor: default;\n\n\t\t\t&:first-child {\n\t\t\t\tpadding-top: var(--spacing-3xs);\n\t\t\t\tpadding-bottom: var(--spacing-4xs);\n\t\t\t\t* {\n\t\t\t\t\tmargin-top: auto;\n\t\t\t\t\tfont-size: var(--font-size-m);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&:last-child {\n\t\t\t\tpadding-top: var(--spacing-3xs);\n\n\t\t\t\t* {\n\t\t\t\t\tfont-size: var(--font-size-2xs);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t.label {\n\t\t\t\tcolor: var(--color-text-light);\n\t\t\t\tpadding-right: var(--spacing-4xs);\n\t\t\t}\n\n\t\t\t* {\n\t\t\t\tmax-width: unset;\n\t\t\t\tjustify-self: unset;\n\t\t\t\twhite-space: unset;\n\t\t\t\toverflow: hidden;\n\t\t\t\ttext-overflow: unset;\n\t\t\t\tpadding: 0;\n\t\t\t\tfont-size: var(--font-size-s);\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n","import type { IRestApiContext } from '@/Interface';\nimport { get } from '@/utils/apiUtils';\nimport type {\n\tWorkflowHistory,\n\tWorkflowVersion,\n\tWorkflowHistoryRequestParams,\n} from '@/types/workflowHistory';\n\nexport const getWorkflowHistory = async (\n\tcontext: IRestApiContext,\n\tworkflowId: string,\n\tqueryParams: WorkflowHistoryRequestParams,\n): Promise<WorkflowHistory[]> => {\n\tconst { data } = await get(\n\t\tcontext.baseUrl,\n\t\t`/workflow-history/workflow/${workflowId}`,\n\t\tqueryParams,\n\t);\n\treturn data;\n};\n\nexport const getWorkflowVersion = async (\n\tcontext: IRestApiContext,\n\tworkflowId: string,\n\tversionId: string,\n): Promise<WorkflowVersion> => {\n\tconst { data } = await get(\n\t\tcontext.baseUrl,\n\t\t`/workflow-history/workflow/${workflowId}/version/${versionId}`,\n\t);\n\treturn data;\n};\n","import { computed } from 'vue';\nimport { defineStore } from 'pinia';\nimport { saveAs } from 'file-saver';\nimport type { IWorkflowDataUpdate, IWorkflowDb } from '@/Interface';\nimport type {\n\tWorkflowHistory,\n\tWorkflowVersion,\n\tWorkflowHistoryRequestParams,\n\tWorkflowVersionId,\n} from '@/types/workflowHistory';\nimport * as whApi from '@/api/workflowHistory';\nimport { useRootStore } from '@/stores/n8nRoot.store';\nimport { useSettingsStore } from '@/stores/settings.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { getNewWorkflow } from '@/api/workflows';\n\nexport const useWorkflowHistoryStore = defineStore('workflowHistory', () => {\n\tconst rootStore = useRootStore();\n\tconst settingsStore = useSettingsStore();\n\tconst workflowsStore = useWorkflowsStore();\n\n\tconst licensePruneTime = computed(() => settingsStore.settings.workflowHistory.licensePruneTime);\n\tconst pruneTime = computed(() => settingsStore.settings.workflowHistory.pruneTime);\n\tconst evaluatedPruneTime = computed(() => Math.min(pruneTime.value, licensePruneTime.value));\n\tconst shouldUpgrade = computed(\n\t\t() => licensePruneTime.value !== -1 && licensePruneTime.value === pruneTime.value,\n\t);\n\n\tconst getWorkflowHistory = async (\n\t\tworkflowId: string,\n\t\tqueryParams: WorkflowHistoryRequestParams,\n\t): Promise<WorkflowHistory[]> =>\n\t\tawait whApi.getWorkflowHistory(rootStore.getRestApiContext, workflowId, queryParams);\n\n\tconst getWorkflowVersion = async (\n\t\tworkflowId: string,\n\t\tversionId: string,\n\t): Promise<WorkflowVersion> =>\n\t\tawait whApi.getWorkflowVersion(rootStore.getRestApiContext, workflowId, versionId);\n\n\tconst downloadVersion = async (\n\t\tworkflowId: string,\n\t\tworkflowVersionId: WorkflowVersionId,\n\t\tdata: { formattedCreatedAt: string },\n\t) => {\n\t\tconst [workflow, workflowVersion] = await Promise.all([\n\t\t\tworkflowsStore.fetchWorkflow(workflowId),\n\t\t\tgetWorkflowVersion(workflowId, workflowVersionId),\n\t\t]);\n\t\tconst { connections, nodes } = workflowVersion;\n\t\tconst blob = new Blob([JSON.stringify({ ...workflow, nodes, connections }, null, 2)], {\n\t\t\ttype: 'application/json;charset=utf-8',\n\t\t});\n\t\tsaveAs(blob, `${workflow.name}(${data.formattedCreatedAt}).json`);\n\t};\n\n\tconst cloneIntoNewWorkflow = async (\n\t\tworkflowId: string,\n\t\tworkflowVersionId: string,\n\t\tdata: { formattedCreatedAt: string },\n\t): Promise<IWorkflowDb> => {\n\t\tconst [workflow, workflowVersion] = await Promise.all([\n\t\t\tworkflowsStore.fetchWorkflow(workflowId),\n\t\t\tgetWorkflowVersion(workflowId, workflowVersionId),\n\t\t]);\n\t\tconst { connections, nodes } = workflowVersion;\n\t\tconst { name } = workflow;\n\t\tconst newWorkflow = await getNewWorkflow(\n\t\t\trootStore.getRestApiContext,\n\t\t\t`${name} (${data.formattedCreatedAt})`,\n\t\t);\n\t\tconst newWorkflowData: IWorkflowDataUpdate = {\n\t\t\tnodes,\n\t\t\tconnections,\n\t\t\tname: newWorkflow.name,\n\t\t};\n\t\treturn await workflowsStore.createNewWorkflow(newWorkflowData);\n\t};\n\n\tconst restoreWorkflow = async (\n\t\tworkflowId: string,\n\t\tworkflowVersionId: string,\n\t\tshouldDeactivate: boolean,\n\t): Promise<IWorkflowDb> => {\n\t\tconst workflowVersion = await getWorkflowVersion(workflowId, workflowVersionId);\n\t\tconst { connections, nodes } = workflowVersion;\n\t\tconst updateData: IWorkflowDataUpdate = { connections, nodes };\n\n\t\tif (shouldDeactivate) {\n\t\t\tupdateData.active = false;\n\t\t}\n\n\t\treturn await workflowsStore\n\t\t\t.updateWorkflow(workflowId, updateData, true)\n\t\t\t.catch(async (error) => {\n\t\t\t\tif (error.httpStatusCode === 400 && error.message.includes('can not be activated')) {\n\t\t\t\t\treturn await workflowsStore.fetchWorkflow(workflowId);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(error);\n\t\t\t\t}\n\t\t\t});\n\t};\n\n\treturn {\n\t\tgetWorkflowHistory,\n\t\tgetWorkflowVersion,\n\t\tdownloadVersion,\n\t\tcloneIntoNewWorkflow,\n\t\trestoreWorkflow,\n\t\tevaluatedPruneTime,\n\t\tshouldUpgrade,\n\t};\n});\n","<script setup lang=\"ts\">\nimport { onBeforeMount, ref, watchEffect, computed, h } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport type { IWorkflowDb, UserAction } from '@/Interface';\nimport { VIEWS, WORKFLOW_HISTORY_VERSION_RESTORE } from '@/constants';\nimport { useI18n } from '@/composables/useI18n';\nimport { useToast } from '@/composables/useToast';\nimport type {\n\tWorkflowHistoryActionTypes,\n\tWorkflowVersionId,\n\tWorkflowHistoryRequestParams,\n\tWorkflowHistory,\n\tWorkflowVersion,\n} from '@/types/workflowHistory';\nimport WorkflowHistoryList from '@/components/WorkflowHistory/WorkflowHistoryList.vue';\nimport WorkflowHistoryContent from '@/components/WorkflowHistory/WorkflowHistoryContent.vue';\nimport { useWorkflowHistoryStore } from '@/stores/workflowHistory.store';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { telemetry } from '@/plugins/telemetry';\nimport { useRootStore } from '@/stores/n8nRoot.store';\n\ntype WorkflowHistoryActionRecord = {\n\t[K in Uppercase<WorkflowHistoryActionTypes[number]>]: Lowercase<K>;\n};\n\nconst enum WorkflowHistoryVersionRestoreModalActions {\n\trestore = 'restore',\n\tdeactivateAndRestore = 'deactivateAndRestore',\n\tcancel = 'cancel',\n}\n\nconst workflowHistoryActionTypes: WorkflowHistoryActionTypes = [\n\t'restore',\n\t'clone',\n\t'open',\n\t'download',\n];\nconst WORKFLOW_HISTORY_ACTIONS = workflowHistoryActionTypes.reduce(\n\t(record, key) => ({ ...record, [key.toUpperCase()]: key }),\n\t{} as WorkflowHistoryActionRecord,\n);\n\nconst route = useRoute();\nconst router = useRouter();\nconst i18n = useI18n();\nconst toast = useToast();\nconst workflowHistoryStore = useWorkflowHistoryStore();\nconst uiStore = useUIStore();\nconst workflowsStore = useWorkflowsStore();\n\nconst canRender = ref(true);\nconst isListLoading = ref(true);\nconst requestNumberOfItems = ref(20);\nconst lastReceivedItemsLength = ref(0);\nconst editorRoute = computed(() => ({\n\tname: VIEWS.WORKFLOW,\n\tparams: {\n\t\tname: route.params.workflowId,\n\t},\n}));\nconst activeWorkflow = ref<IWorkflowDb | null>(null);\nconst workflowHistory = ref<WorkflowHistory[]>([]);\nconst activeWorkflowVersion = ref<WorkflowVersion | null>(null);\nconst actions = computed<UserAction[]>(() =>\n\tworkflowHistoryActionTypes.map((value) => ({\n\t\tlabel: i18n.baseText(`workflowHistory.item.actions.${value}`),\n\t\tdisabled: false,\n\t\tvalue,\n\t})),\n);\n\nconst isFirstItemShown = computed(\n\t() => workflowHistory.value[0]?.versionId === route.params.versionId,\n);\nconst evaluatedPruneTime = computed(() => Math.floor(workflowHistoryStore.evaluatedPruneTime / 24));\n\nconst sendTelemetry = (event: string) => {\n\ttelemetry.track(event, {\n\t\tinstance_id: useRootStore().instanceId,\n\t\tworkflow_id: route.params.workflowId,\n\t});\n};\n\nconst loadMore = async (queryParams: WorkflowHistoryRequestParams) => {\n\tconst history = await workflowHistoryStore.getWorkflowHistory(\n\t\troute.params.workflowId,\n\t\tqueryParams,\n\t);\n\tlastReceivedItemsLength.value = history.length;\n\tworkflowHistory.value = workflowHistory.value.concat(history);\n};\n\nonBeforeMount(async () => {\n\tsendTelemetry('User opened workflow history');\n\ttry {\n\t\tconst [workflow] = await Promise.all([\n\t\t\tworkflowsStore.fetchWorkflow(route.params.workflowId),\n\t\t\tloadMore({ take: requestNumberOfItems.value }),\n\t\t]);\n\t\tactiveWorkflow.value = workflow;\n\t\tisListLoading.value = false;\n\n\t\tif (!route.params.versionId && workflowHistory.value.length) {\n\t\t\tawait router.replace({\n\t\t\t\tname: VIEWS.WORKFLOW_HISTORY,\n\t\t\t\tparams: {\n\t\t\t\t\tworkflowId: route.params.workflowId,\n\t\t\t\t\tversionId: workflowHistory.value[0].versionId,\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t} catch (error) {\n\t\tcanRender.value = false;\n\t\ttoast.showError(error, i18n.baseText('workflowHistory.title'));\n\t}\n});\n\nconst openInNewTab = (id: WorkflowVersionId) => {\n\tconst { href } = router.resolve({\n\t\tname: VIEWS.WORKFLOW_HISTORY,\n\t\tparams: {\n\t\t\tworkflowId: route.params.workflowId,\n\t\t\tversionId: id,\n\t\t},\n\t});\n\twindow.open(href, '_blank');\n};\n\nconst openRestorationModal = async (\n\tisWorkflowActivated: boolean,\n\tformattedCreatedAt: string,\n): Promise<WorkflowHistoryVersionRestoreModalActions> => {\n\treturn await new Promise((resolve, reject) => {\n\t\tconst buttons = [\n\t\t\t{\n\t\t\t\ttext: i18n.baseText('workflowHistory.action.restore.modal.button.cancel'),\n\t\t\t\ttype: 'tertiary',\n\t\t\t\taction: () => {\n\t\t\t\t\tresolve(WorkflowHistoryVersionRestoreModalActions.cancel);\n\t\t\t\t},\n\t\t\t},\n\t\t];\n\n\t\tif (isWorkflowActivated) {\n\t\t\tbuttons.push({\n\t\t\t\ttext: i18n.baseText('workflowHistory.action.restore.modal.button.deactivateAndRestore'),\n\t\t\t\ttype: 'tertiary',\n\t\t\t\taction: () => {\n\t\t\t\t\tresolve(WorkflowHistoryVersionRestoreModalActions.deactivateAndRestore);\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tbuttons.push({\n\t\t\ttext: i18n.baseText('workflowHistory.action.restore.modal.button.restore'),\n\t\t\ttype: 'primary',\n\t\t\taction: () => {\n\t\t\t\tresolve(WorkflowHistoryVersionRestoreModalActions.restore);\n\t\t\t},\n\t\t});\n\n\t\ttry {\n\t\t\tuiStore.openModalWithData({\n\t\t\t\tname: WORKFLOW_HISTORY_VERSION_RESTORE,\n\t\t\t\tdata: {\n\t\t\t\t\tbeforeClose: () => {\n\t\t\t\t\t\tresolve(WorkflowHistoryVersionRestoreModalActions.cancel);\n\t\t\t\t\t},\n\t\t\t\t\tisWorkflowActivated,\n\t\t\t\t\tformattedCreatedAt,\n\t\t\t\t\tbuttons,\n\t\t\t\t},\n\t\t\t});\n\t\t} catch (error) {\n\t\t\treject(error);\n\t\t}\n\t});\n};\n\nconst cloneWorkflowVersion = async (\n\tid: WorkflowVersionId,\n\tdata: { formattedCreatedAt: string },\n) => {\n\tconst clonedWorkflow = await workflowHistoryStore.cloneIntoNewWorkflow(\n\t\troute.params.workflowId,\n\t\tid,\n\t\tdata,\n\t);\n\tconst { href } = router.resolve({\n\t\tname: VIEWS.WORKFLOW,\n\t\tparams: {\n\t\t\tname: clonedWorkflow.id,\n\t\t},\n\t});\n\n\ttoast.showMessage({\n\t\ttitle: i18n.baseText('workflowHistory.action.clone.success.title'),\n\t\tmessage: h(\n\t\t\t'a',\n\t\t\t{ href, target: '_blank' },\n\t\t\ti18n.baseText('workflowHistory.action.clone.success.message'),\n\t\t),\n\t\ttype: 'success',\n\t\tduration: 10000,\n\t});\n};\n\nconst restoreWorkflowVersion = async (\n\tid: WorkflowVersionId,\n\tdata: { formattedCreatedAt: string },\n) => {\n\tconst workflow = await workflowsStore.fetchWorkflow(route.params.workflowId);\n\tconst modalAction = await openRestorationModal(workflow.active, data.formattedCreatedAt);\n\tif (modalAction === WorkflowHistoryVersionRestoreModalActions.cancel) {\n\t\treturn;\n\t}\n\tactiveWorkflow.value = await workflowHistoryStore.restoreWorkflow(\n\t\troute.params.workflowId,\n\t\tid,\n\t\tmodalAction === WorkflowHistoryVersionRestoreModalActions.deactivateAndRestore,\n\t);\n\tconst history = await workflowHistoryStore.getWorkflowHistory(route.params.workflowId, {\n\t\ttake: 1,\n\t});\n\tworkflowHistory.value = history.concat(workflowHistory.value);\n\ttoast.showMessage({\n\t\ttitle: i18n.baseText('workflowHistory.action.restore.success.title'),\n\t\ttype: 'success',\n\t});\n};\n\nconst onAction = async ({\n\taction,\n\tid,\n\tdata,\n}: {\n\taction: WorkflowHistoryActionTypes[number];\n\tid: WorkflowVersionId;\n\tdata: { formattedCreatedAt: string };\n}) => {\n\ttry {\n\t\tswitch (action) {\n\t\t\tcase WORKFLOW_HISTORY_ACTIONS.OPEN:\n\t\t\t\topenInNewTab(id);\n\t\t\t\tsendTelemetry('User opened version in new tab');\n\t\t\t\tbreak;\n\t\t\tcase WORKFLOW_HISTORY_ACTIONS.DOWNLOAD:\n\t\t\t\tawait workflowHistoryStore.downloadVersion(route.params.workflowId, id, data);\n\t\t\t\tsendTelemetry('User downloaded version');\n\t\t\t\tbreak;\n\t\t\tcase WORKFLOW_HISTORY_ACTIONS.CLONE:\n\t\t\t\tawait cloneWorkflowVersion(id, data);\n\t\t\t\tsendTelemetry('User cloned version');\n\t\t\t\tbreak;\n\t\t\tcase WORKFLOW_HISTORY_ACTIONS.RESTORE:\n\t\t\t\tawait restoreWorkflowVersion(id, data);\n\t\t\t\tsendTelemetry('User restored version');\n\t\t\t\tbreak;\n\t\t}\n\t} catch (error) {\n\t\ttoast.showError(\n\t\t\terror,\n\t\t\ti18n.baseText('workflowHistory.action.error.title', {\n\t\t\t\tinterpolate: {\n\t\t\t\t\taction: i18n.baseText(`workflowHistory.item.actions.${action}`).toLowerCase(),\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\t}\n};\n\nconst onPreview = async ({ event, id }: { event: MouseEvent; id: WorkflowVersionId }) => {\n\tif (event.metaKey || event.ctrlKey) {\n\t\topenInNewTab(id);\n\t\tsendTelemetry('User opened version in new tab');\n\t} else {\n\t\tawait router.push({\n\t\t\tname: VIEWS.WORKFLOW_HISTORY,\n\t\t\tparams: {\n\t\t\t\tworkflowId: route.params.workflowId,\n\t\t\t\tversionId: id,\n\t\t\t},\n\t\t});\n\t}\n};\n\nconst onUpgrade = () => {\n\tvoid uiStore.goToUpgrade('workflow-history', 'upgrade-workflow-history');\n};\n\nwatchEffect(async () => {\n\tif (!route.params.versionId) {\n\t\treturn;\n\t}\n\ttry {\n\t\tactiveWorkflowVersion.value = await workflowHistoryStore.getWorkflowVersion(\n\t\t\troute.params.workflowId,\n\t\t\troute.params.versionId,\n\t\t);\n\t\tsendTelemetry('User selected version');\n\t} catch (error) {\n\t\ttoast.showError(\n\t\t\tnew Error(`${error.message} \"${route.params.versionId}\"&nbsp;`),\n\t\t\ti18n.baseText('workflowHistory.title'),\n\t\t);\n\t}\n\n\ttry {\n\t\tactiveWorkflow.value = await workflowsStore.fetchWorkflow(route.params.workflowId);\n\t} catch (error) {\n\t\tcanRender.value = false;\n\t\ttoast.showError(error, i18n.baseText('workflowHistory.title'));\n\t}\n});\n</script>\n<template>\n\t<div :class=\"$style.view\">\n\t\t<n8n-heading :class=\"$style.header\" tag=\"h2\" size=\"medium\">\n\t\t\t{{ activeWorkflow?.name }}\n\t\t</n8n-heading>\n\t\t<div :class=\"$style.corner\">\n\t\t\t<n8n-heading tag=\"h2\" size=\"medium\" bold>\n\t\t\t\t{{ i18n.baseText('workflowHistory.title') }}\n\t\t\t</n8n-heading>\n\t\t\t<router-link :to=\"editorRoute\" data-test-id=\"workflow-history-close-button\">\n\t\t\t\t<n8n-button type=\"tertiary\" icon=\"times\" size=\"small\" text square />\n\t\t\t</router-link>\n\t\t</div>\n\t\t<div :class=\"$style.listComponentWrapper\">\n\t\t\t<WorkflowHistoryList\n\t\t\t\tv-if=\"canRender\"\n\t\t\t\t:items=\"workflowHistory\"\n\t\t\t\t:last-received-items-length=\"lastReceivedItemsLength\"\n\t\t\t\t:active-item=\"activeWorkflowVersion\"\n\t\t\t\t:actions=\"actions\"\n\t\t\t\t:request-number-of-items=\"requestNumberOfItems\"\n\t\t\t\t:should-upgrade=\"workflowHistoryStore.shouldUpgrade\"\n\t\t\t\t:evaluated-prune-time=\"evaluatedPruneTime\"\n\t\t\t\t:is-list-loading=\"isListLoading\"\n\t\t\t\t@action=\"onAction\"\n\t\t\t\t@preview=\"onPreview\"\n\t\t\t\t@load-more=\"loadMore\"\n\t\t\t\t@upgrade=\"onUpgrade\"\n\t\t\t/>\n\t\t</div>\n\t\t<div :class=\"$style.contentComponentWrapper\">\n\t\t\t<WorkflowHistoryContent\n\t\t\t\tv-if=\"canRender\"\n\t\t\t\t:workflow=\"activeWorkflow\"\n\t\t\t\t:workflow-version=\"activeWorkflowVersion\"\n\t\t\t\t:actions=\"actions\"\n\t\t\t\t:is-list-loading=\"isListLoading\"\n\t\t\t\t:is-first-item-shown=\"isFirstItemShown\"\n\t\t\t\t@action=\"onAction\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</template>\n<style module lang=\"scss\">\n.view {\n\tposition: relative;\n\tdisplay: grid;\n\twidth: 100%;\n\tgrid-template-areas: 'header corner' 'content list';\n\tgrid-template-columns: auto 330px;\n\tgrid-template-rows: 65px auto;\n\tbackground-color: var(--color-background-xlight);\n}\n\n.header {\n\tgrid-area: header;\n\tdisplay: flex;\n\talign-items: center;\n\tpadding: 0 var(--spacing-l);\n\tborder-bottom: var(--border-width-base) var(--border-style-base) var(--color-foreground-base);\n}\n\n.corner {\n\tgrid-area: corner;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tpadding: 0 var(--spacing-3xs) 0 var(--spacing-s);\n\tbackground-color: var(--color-background-lighter);\n\tborder-bottom: var(--border-width-base) var(--border-style-base) var(--color-foreground-base);\n\tborder-left: var(--border-width-base) var(--border-style-base) var(--color-foreground-base);\n}\n\n.contentComponentWrapper {\n\tgrid-area: content;\n\tposition: relative;\n}\n\n.listComponentWrapper {\n\tgrid-area: list;\n\tposition: relative;\n\n\t&::before {\n\t\tcontent: '';\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tbottom: 0;\n\t\tleft: 0;\n\t\twidth: var(--border-width-base);\n\t\tbackground-color: var(--color-foreground-base);\n\t}\n}\n</style>\n"],"names":["props","__props","emit","__emit","i18n","useI18n","actionsVisible","ref","itemElement","authorElement","isAuthorElementTruncated","formattedCreatedAt","computed","currentYear","date","time","dateformat","authors","allAuthors","label","idLabel","onAction","action","onVisibleChange","visible","onItemClick","event","onMounted","_a","_b","_c","listElement","shouldAutoScroll","observer","getActions","index","observeElement","element","entry","id","data","onPreview","onItemMounted","offsetTop","isActive","workflowVersionPreview","pinData","workflow","actions","getWorkflowHistory","context","workflowId","queryParams","get","getWorkflowVersion","versionId","useWorkflowHistoryStore","defineStore","rootStore","useRootStore","settingsStore","useSettingsStore","workflowsStore","useWorkflowsStore","licensePruneTime","pruneTime","evaluatedPruneTime","shouldUpgrade","whApi.getWorkflowHistory","whApi.getWorkflowVersion","workflowVersionId","workflowVersion","connections","nodes","blob","saveAs","name","newWorkflow","getNewWorkflow","newWorkflowData","shouldDeactivate","updateData","error","workflowHistoryActionTypes","WORKFLOW_HISTORY_ACTIONS","record","key","route","useRoute","router","useRouter","toast","useToast","workflowHistoryStore","uiStore","useUIStore","canRender","isListLoading","requestNumberOfItems","lastReceivedItemsLength","editorRoute","VIEWS","activeWorkflow","workflowHistory","activeWorkflowVersion","value","isFirstItemShown","sendTelemetry","telemetry","loadMore","history","onBeforeMount","openInNewTab","href","openRestorationModal","isWorkflowActivated","resolve","reject","buttons","WORKFLOW_HISTORY_VERSION_RESTORE","cloneWorkflowVersion","clonedWorkflow","h","restoreWorkflowVersion","modalAction","onUpgrade","watchEffect"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{f as l,h as d}from"./index-Qw68KAhz.js";import{v as f,V as a,x as u}from"./n8n-0pza0mdA.js";import{G as g,aG as W,az as k,b as _,l as b,m as L}from"./vendor-KLOX9vbo.js";import"./pinia-28uZ5ZtB.js";import"./@n8n/codemirror-lang-sql-_W1-z7Mc.js";import"./@lezer/common-1hBQ1gIF.js";import"./prettier-XiNuC5bg.js";import"./@jsplumb/util-DR0SB56A.js";import"./@jsplumb/core-MKwKlGip.js";import"./@jsplumb/common-Q5_tv_GT.js";import"./@jsplumb/connector-bezier-3dWY17R5.js";import"./lodash-es-wI9avrph.js";import"./@jsplumb/browser-ui-AlqFM-P6.js";import"./uuid-McvpxQtQ.js";import"./codemirror-lang-html-n8n-tmVw-mwA.js";import"./luxon-ZRIU05qF.js";import"./codemirror-lang-n8n-expression-71F4KZSz.js";import"./@vueuse/core-JpwZAlxf.js";import"./esprima-next-ulPLCZ1Z.js";import"./fast-json-stable-stringify-QF2cL2qw.js";import"./timeago.js--Bumj2r9.js";import"./qrcode.vue-ohcdYkQS.js";import"./vue3-touch-events-_RfbPMOD.js";import"./chart.js-JtqvIvkt.js";import"./axios-s2RMMPhA.js";import"./flatted-jPn12Tq4.js";import"./vue-i18n-Cb1fO4GA.js";import"./@n8n/permissions-8yMqUF1Y.js";const X=g({__name:"WorkflowOnboardingView",setup(O){const r=l(),n=d(),i=f(),e=W(),s=k(),m=u(),p=async o=>{try{r.startLoading();const t=await n.getFixedWorkflowTemplate(o);if(!t)throw new Error;const c=m.baseText("onboarding.title",{interpolate:{name:t.name}}),w=await i.createNewWorkflow({name:c,connections:t.workflow.connections,nodes:t.workflow.nodes,pinData:t.workflow.pinData,settings:t.workflow.settings,meta:{onboardingId:o}});await e.replace({name:a.WORKFLOW,params:{name:w.id},query:{onboardingId:o}}),r.stopLoading()}catch{throw await e.replace({name:a.NEW_WORKFLOW}),r.stopLoading(),new Error(`Could not load onboarding template ${o}`)}};return _(async()=>{const o=s.params.id;if(!o||typeof o!="string"){await e.replace({name:a.NEW_WORKFLOW});return}await p(o)}),(o,t)=>(b(),L("div"))}});export{X as default};
2
- //# sourceMappingURL=WorkflowOnboardingView-KirfsyFh.js.map
1
+ import{f as l,h as d}from"./index-6M_Mo9yq.js";import{v as f,V as a,x as u}from"./n8n-0pza0mdA.js";import{G as g,aG as W,az as k,b as _,l as b,m as L}from"./vendor-KLOX9vbo.js";import"./pinia-28uZ5ZtB.js";import"./@n8n/codemirror-lang-sql-_W1-z7Mc.js";import"./@lezer/common-1hBQ1gIF.js";import"./prettier-XiNuC5bg.js";import"./@jsplumb/util-DR0SB56A.js";import"./@jsplumb/core-MKwKlGip.js";import"./@jsplumb/common-Q5_tv_GT.js";import"./@jsplumb/connector-bezier-3dWY17R5.js";import"./lodash-es-wI9avrph.js";import"./@jsplumb/browser-ui-AlqFM-P6.js";import"./uuid-McvpxQtQ.js";import"./codemirror-lang-html-n8n-tmVw-mwA.js";import"./luxon-ZRIU05qF.js";import"./codemirror-lang-n8n-expression-71F4KZSz.js";import"./@vueuse/core-JpwZAlxf.js";import"./esprima-next-ulPLCZ1Z.js";import"./fast-json-stable-stringify-QF2cL2qw.js";import"./timeago.js--Bumj2r9.js";import"./qrcode.vue-ohcdYkQS.js";import"./vue3-touch-events-_RfbPMOD.js";import"./chart.js-JtqvIvkt.js";import"./axios-s2RMMPhA.js";import"./flatted-jPn12Tq4.js";import"./vue-i18n-Cb1fO4GA.js";import"./@n8n/permissions-8yMqUF1Y.js";const X=g({__name:"WorkflowOnboardingView",setup(O){const r=l(),n=d(),i=f(),e=W(),s=k(),m=u(),p=async o=>{try{r.startLoading();const t=await n.getFixedWorkflowTemplate(o);if(!t)throw new Error;const c=m.baseText("onboarding.title",{interpolate:{name:t.name}}),w=await i.createNewWorkflow({name:c,connections:t.workflow.connections,nodes:t.workflow.nodes,pinData:t.workflow.pinData,settings:t.workflow.settings,meta:{onboardingId:o}});await e.replace({name:a.WORKFLOW,params:{name:w.id},query:{onboardingId:o}}),r.stopLoading()}catch{throw await e.replace({name:a.NEW_WORKFLOW}),r.stopLoading(),new Error(`Could not load onboarding template ${o}`)}};return _(async()=>{const o=s.params.id;if(!o||typeof o!="string"){await e.replace({name:a.NEW_WORKFLOW});return}await p(o)}),(o,t)=>(b(),L("div"))}});export{X as default};
2
+ //# sourceMappingURL=WorkflowOnboardingView-kAh_YIAL.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WorkflowOnboardingView-KirfsyFh.js","sources":["../../src/views/WorkflowOnboardingView.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useLoadingService } from '@/composables/useLoadingService';\nimport { useI18n } from '@/composables/useI18n';\nimport { VIEWS } from '@/constants';\nimport { useTemplatesStore } from '@/stores/templates.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { onMounted } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\n\nconst loadingService = useLoadingService();\nconst templateStore = useTemplatesStore();\nconst workfowStore = useWorkflowsStore();\nconst router = useRouter();\nconst route = useRoute();\nconst i18n = useI18n();\n\nconst openWorkflowTemplate = async (templateId: string) => {\n\ttry {\n\t\tloadingService.startLoading();\n\t\tconst template = await templateStore.getFixedWorkflowTemplate(templateId);\n\t\tif (!template) {\n\t\t\tthrow new Error();\n\t\t}\n\n\t\tconst name: string = i18n.baseText('onboarding.title', {\n\t\t\tinterpolate: { name: template.name },\n\t\t});\n\n\t\tconst workflow = await workfowStore.createNewWorkflow({\n\t\t\tname,\n\t\t\tconnections: template.workflow.connections,\n\t\t\tnodes: template.workflow.nodes,\n\t\t\tpinData: template.workflow.pinData,\n\t\t\tsettings: template.workflow.settings,\n\t\t\tmeta: {\n\t\t\t\tonboardingId: templateId,\n\t\t\t},\n\t\t});\n\n\t\tawait router.replace({\n\t\t\tname: VIEWS.WORKFLOW,\n\t\t\tparams: { name: workflow.id },\n\t\t\tquery: { onboardingId: templateId },\n\t\t});\n\n\t\tloadingService.stopLoading();\n\t} catch (e) {\n\t\tawait router.replace({ name: VIEWS.NEW_WORKFLOW });\n\t\tloadingService.stopLoading();\n\n\t\tthrow new Error(`Could not load onboarding template ${templateId}`); // sentry reporing\n\t}\n};\n\nonMounted(async () => {\n\tconst templateId = route.params.id;\n\tif (!templateId || typeof templateId !== 'string') {\n\t\tawait router.replace({ name: VIEWS.NEW_WORKFLOW });\n\t\treturn;\n\t}\n\n\tawait openWorkflowTemplate(templateId);\n});\n</script>\n\n<template>\n\t<div></div>\n</template>\n\n<style lang=\"scss\" module></style>\n"],"names":["loadingService","useLoadingService","templateStore","useTemplatesStore","workfowStore","useWorkflowsStore","router","useRouter","route","useRoute","i18n","useI18n","openWorkflowTemplate","templateId","template","name","workflow","VIEWS","onMounted"],"mappings":"snCASA,MAAMA,EAAiBC,IACjBC,EAAgBC,IAChBC,EAAeC,IACfC,EAASC,IACTC,EAAQC,IACRC,EAAOC,IAEPC,EAAuB,MAAOC,GAAuB,CACtD,GAAA,CACHb,EAAe,aAAa,EAC5B,MAAMc,EAAW,MAAMZ,EAAc,yBAAyBW,CAAU,EACxE,GAAI,CAACC,EACJ,MAAM,IAAI,MAGL,MAAAC,EAAeL,EAAK,SAAS,mBAAoB,CACtD,YAAa,CAAE,KAAMI,EAAS,IAAK,CAAA,CACnC,EAEKE,EAAW,MAAMZ,EAAa,kBAAkB,CACrD,KAAAW,EACA,YAAaD,EAAS,SAAS,YAC/B,MAAOA,EAAS,SAAS,MACzB,QAASA,EAAS,SAAS,QAC3B,SAAUA,EAAS,SAAS,SAC5B,KAAM,CACL,aAAcD,CACf,CAAA,CACA,EAED,MAAMP,EAAO,QAAQ,CACpB,KAAMW,EAAM,SACZ,OAAQ,CAAE,KAAMD,EAAS,EAAG,EAC5B,MAAO,CAAE,aAAcH,CAAW,CAAA,CAClC,EAEDb,EAAe,YAAY,OAChB,CACX,YAAMM,EAAO,QAAQ,CAAE,KAAMW,EAAM,aAAc,EACjDjB,EAAe,YAAY,EAErB,IAAI,MAAM,sCAAsCa,CAAU,EAAE,CACnE,CAAA,EAGD,OAAAK,EAAU,SAAY,CACf,MAAAL,EAAaL,EAAM,OAAO,GAChC,GAAI,CAACK,GAAc,OAAOA,GAAe,SAAU,CAClD,MAAMP,EAAO,QAAQ,CAAE,KAAMW,EAAM,aAAc,EACjD,MACD,CAEA,MAAML,EAAqBC,CAAU,CAAA,CACrC"}
1
+ {"version":3,"file":"WorkflowOnboardingView-kAh_YIAL.js","sources":["../../src/views/WorkflowOnboardingView.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useLoadingService } from '@/composables/useLoadingService';\nimport { useI18n } from '@/composables/useI18n';\nimport { VIEWS } from '@/constants';\nimport { useTemplatesStore } from '@/stores/templates.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { onMounted } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\n\nconst loadingService = useLoadingService();\nconst templateStore = useTemplatesStore();\nconst workfowStore = useWorkflowsStore();\nconst router = useRouter();\nconst route = useRoute();\nconst i18n = useI18n();\n\nconst openWorkflowTemplate = async (templateId: string) => {\n\ttry {\n\t\tloadingService.startLoading();\n\t\tconst template = await templateStore.getFixedWorkflowTemplate(templateId);\n\t\tif (!template) {\n\t\t\tthrow new Error();\n\t\t}\n\n\t\tconst name: string = i18n.baseText('onboarding.title', {\n\t\t\tinterpolate: { name: template.name },\n\t\t});\n\n\t\tconst workflow = await workfowStore.createNewWorkflow({\n\t\t\tname,\n\t\t\tconnections: template.workflow.connections,\n\t\t\tnodes: template.workflow.nodes,\n\t\t\tpinData: template.workflow.pinData,\n\t\t\tsettings: template.workflow.settings,\n\t\t\tmeta: {\n\t\t\t\tonboardingId: templateId,\n\t\t\t},\n\t\t});\n\n\t\tawait router.replace({\n\t\t\tname: VIEWS.WORKFLOW,\n\t\t\tparams: { name: workflow.id },\n\t\t\tquery: { onboardingId: templateId },\n\t\t});\n\n\t\tloadingService.stopLoading();\n\t} catch (e) {\n\t\tawait router.replace({ name: VIEWS.NEW_WORKFLOW });\n\t\tloadingService.stopLoading();\n\n\t\tthrow new Error(`Could not load onboarding template ${templateId}`); // sentry reporing\n\t}\n};\n\nonMounted(async () => {\n\tconst templateId = route.params.id;\n\tif (!templateId || typeof templateId !== 'string') {\n\t\tawait router.replace({ name: VIEWS.NEW_WORKFLOW });\n\t\treturn;\n\t}\n\n\tawait openWorkflowTemplate(templateId);\n});\n</script>\n\n<template>\n\t<div></div>\n</template>\n\n<style lang=\"scss\" module></style>\n"],"names":["loadingService","useLoadingService","templateStore","useTemplatesStore","workfowStore","useWorkflowsStore","router","useRouter","route","useRoute","i18n","useI18n","openWorkflowTemplate","templateId","template","name","workflow","VIEWS","onMounted"],"mappings":"snCASA,MAAMA,EAAiBC,IACjBC,EAAgBC,IAChBC,EAAeC,IACfC,EAASC,IACTC,EAAQC,IACRC,EAAOC,IAEPC,EAAuB,MAAOC,GAAuB,CACtD,GAAA,CACHb,EAAe,aAAa,EAC5B,MAAMc,EAAW,MAAMZ,EAAc,yBAAyBW,CAAU,EACxE,GAAI,CAACC,EACJ,MAAM,IAAI,MAGL,MAAAC,EAAeL,EAAK,SAAS,mBAAoB,CACtD,YAAa,CAAE,KAAMI,EAAS,IAAK,CAAA,CACnC,EAEKE,EAAW,MAAMZ,EAAa,kBAAkB,CACrD,KAAAW,EACA,YAAaD,EAAS,SAAS,YAC/B,MAAOA,EAAS,SAAS,MACzB,QAASA,EAAS,SAAS,QAC3B,SAAUA,EAAS,SAAS,SAC5B,KAAM,CACL,aAAcD,CACf,CAAA,CACA,EAED,MAAMP,EAAO,QAAQ,CACpB,KAAMW,EAAM,SACZ,OAAQ,CAAE,KAAMD,EAAS,EAAG,EAC5B,MAAO,CAAE,aAAcH,CAAW,CAAA,CAClC,EAEDb,EAAe,YAAY,OAChB,CACX,YAAMM,EAAO,QAAQ,CAAE,KAAMW,EAAM,aAAc,EACjDjB,EAAe,YAAY,EAErB,IAAI,MAAM,sCAAsCa,CAAU,EAAE,CACnE,CAAA,EAGD,OAAAK,EAAU,SAAY,CACf,MAAAL,EAAaL,EAAM,OAAO,GAChC,GAAI,CAACK,GAAc,OAAOA,GAAe,SAAU,CAClD,MAAMP,EAAO,QAAQ,CAAE,KAAMW,EAAM,aAAc,EACjD,MACD,CAEA,MAAML,EAAqBC,CAAU,CAAA,CACrC"}
@@ -1,2 +1,2 @@
1
- import{R as X}from"./ResourcesListLayout-oPQAgi31.js";import{e as Z,t as K,v as H,f as F,u as I,l as j,$ as ee,dJ as te,V as L,dV as se,du as oe,aa as ae,_ as R,dM as re,O as ne,B as le}from"./n8n-0pza0mdA.js";import{aF as ie,d as de,T as ce,h as ue,u as me,b as pe}from"./index-Qw68KAhz.js";import{W as fe}from"./WorkflowActivator-MuCzpXdv.js";import{m as q}from"./pinia-28uZ5ZtB.js";import{G as M,ag as o,l as c,M as v,O as a,I as u,R as f,S as w,T as s,a2 as he,Q as O,p as k,U as V,V as z,m as _,e as D,aG as ge,F as N,a7 as P,u as we}from"./vendor-KLOX9vbo.js";import{T as ke}from"./TemplatesInfoCarousel-oLwAv_o3.js";import"./lodash-es-wI9avrph.js";import"./axios-s2RMMPhA.js";import"./flatted-jPn12Tq4.js";import"./esprima-next-ulPLCZ1Z.js";import"./luxon-ZRIU05qF.js";import"./@vueuse/core-JpwZAlxf.js";import"./uuid-McvpxQtQ.js";import"./vue-i18n-Cb1fO4GA.js";import"./@n8n/permissions-8yMqUF1Y.js";import"./@n8n/codemirror-lang-sql-_W1-z7Mc.js";import"./@lezer/common-1hBQ1gIF.js";import"./prettier-XiNuC5bg.js";import"./@jsplumb/util-DR0SB56A.js";import"./@jsplumb/core-MKwKlGip.js";import"./@jsplumb/common-Q5_tv_GT.js";import"./@jsplumb/connector-bezier-3dWY17R5.js";import"./@jsplumb/browser-ui-AlqFM-P6.js";import"./codemirror-lang-html-n8n-tmVw-mwA.js";import"./codemirror-lang-n8n-expression-71F4KZSz.js";import"./fast-json-stable-stringify-QF2cL2qw.js";import"./timeago.js--Bumj2r9.js";import"./qrcode.vue-ohcdYkQS.js";import"./vue3-touch-events-_RfbPMOD.js";import"./chart.js-JtqvIvkt.js";import"./workflowActivate-L9KnNQBb.js";import"./NodeList-Ysq3Cjbn.js";import"./vue-agile-eBX40Hen.js";const C={OPEN:"open",SHARE:"share",DUPLICATE:"duplicate",DELETE:"delete"},ye=M({components:{TimeAgo:ie,WorkflowActivator:fe},props:{data:{type:Object,required:!0,default:()=>({id:"",createdAt:"",updatedAt:"",active:!1,connections:{},nodes:[],name:"",sharedWith:[],ownedBy:{},versionId:""})},readOnly:{type:Boolean,default:!1}},setup(){return{...Z(),...de()}},data(){return{EnterpriseEditionFeature:K}},computed:{...q(j,I,F,H),currentUser(){return this.usersStore.currentUser||{}},workflowPermissions(){return ee(this.currentUser,this.data)},actions(){const e=[{label:this.$locale.baseText("workflows.item.open"),value:C.OPEN},{label:this.$locale.baseText("workflows.item.share"),value:C.SHARE}];return this.readOnly||e.push({label:this.$locale.baseText("workflows.item.duplicate"),value:C.DUPLICATE}),this.workflowPermissions.delete&&!this.readOnly&&e.push({label:this.$locale.baseText("workflows.item.delete"),value:C.DELETE}),e},formattedCreatedAtDate(){const e=new Date().getFullYear();return te(this.data.createdAt,`d mmmm${this.data.createdAt.startsWith(e)?"":", yyyy"}`)}},methods:{async onClick(e){if(e!=null&&e.ctrlKey||e!=null&&e.metaKey){const t=this.$router.resolve({name:L.WORKFLOW,params:{name:this.data.id}});window.open(t.href,"_blank");return}await this.$router.push({name:L.WORKFLOW,params:{name:this.data.id}})},onClickTag(e,t){t.stopPropagation(),this.$emit("click:tag",e,t)},onExpandTags(){this.$emit("expand:tags")},async onAction(e){if(e===C.OPEN)await this.onClick();else if(e===C.DUPLICATE)this.uiStore.openModalWithData({name:se,data:{id:this.data.id,name:this.data.name,tags:(this.data.tags||[]).map(t=>t.id)}});else if(e===C.SHARE)this.uiStore.openModalWithData({name:oe,data:{id:this.data.id}}),this.$telemetry.track("User opened sharing modal",{workflow_id:this.data.id,user_id_sharer:this.currentUser.id,sub_view:this.$route.name===L.WORKFLOWS?"Workflows listing":"Workflow editor"});else if(e===C.DELETE){if(await this.confirm(this.$locale.baseText("mainSidebar.confirmMessage.workflowDelete.message",{interpolate:{workflowName:this.data.name}}),this.$locale.baseText("mainSidebar.confirmMessage.workflowDelete.headline"),{type:"warning",confirmButtonText:this.$locale.baseText("mainSidebar.confirmMessage.workflowDelete.confirmButtonText"),cancelButtonText:this.$locale.baseText("mainSidebar.confirmMessage.workflowDelete.cancelButtonText")})!==ae)return;try{await this.workflowsStore.deleteWorkflow(this.data.id)}catch(l){this.showError(l,this.$locale.baseText("generic.deleteWorkflowError"));return}this.showMessage({title:this.$locale.baseText("mainSidebar.showMessage.handleSelect1.title"),type:"success"})}}}}),be="_cardLink_w0ebe_1",_e="_cardHeading_w0ebe_11",Te="_cardDescription_w0ebe_17",Se="_cardActions_w0ebe_24",$e={cardLink:be,cardHeading:_e,cardDescription:Te,cardActions:Se},Ce={key:0};function ve(e,t,l,r,h,i){const d=o("n8n-heading"),m=o("TimeAgo"),p=o("n8n-tags"),E=o("n8n-text"),n=o("n8n-badge"),T=o("enterprise-edition"),y=o("WorkflowActivator"),S=o("n8n-action-toggle"),W=o("n8n-card");return c(),v(W,{class:u(e.$style.cardLink),onClick:e.onClick},{header:a(()=>[s(d,{tag:"h2",bold:"",class:u(e.$style.cardHeading),"data-test-id":"workflow-card-name"},{default:a(()=>[w(f(e.data.name),1)]),_:1},8,["class"])]),append:a(()=>[k("div",{class:u(e.$style.cardActions),onClick:t[0]||(t[0]=he(()=>{},["stop"]))},[s(T,{features:[e.EnterpriseEditionFeature.Sharing]},{default:a(()=>[e.workflowPermissions.isOwner?(c(),v(n,{key:0,class:"mr-xs",theme:"tertiary",bold:""},{default:a(()=>[w(f(e.$locale.baseText("workflows.item.owner")),1)]),_:1})):O("",!0)]),_:1},8,["features"]),s(y,{class:"mr-s","workflow-active":e.data.active,"workflow-id":e.data.id,"data-test-id":"workflow-card-activator"},null,8,["workflow-active","workflow-id"]),s(S,{actions:e.actions,theme:"dark","data-test-id":"workflow-card-actions",onAction:e.onAction},null,8,["actions","onAction"])],2)]),default:a(()=>[k("div",{class:u(e.$style.cardDescription)},[s(E,{color:"text-light",size:"small"},{default:a(()=>[z(k("span",null,[w(f(e.$locale.baseText("workflows.item.updated"))+" ",1),s(m,{date:e.data.updatedAt},null,8,["date"]),w(" | ")],512),[[V,e.data]]),z(k("span",{class:"mr-2xs"},f(e.$locale.baseText("workflows.item.created"))+" "+f(e.formattedCreatedAtDate),513),[[V,e.data]]),e.settingsStore.areTagsEnabled&&e.data.tags&&e.data.tags.length>0?z((c(),_("span",Ce,[s(p,{tags:e.data.tags,"truncate-at":3,truncate:"","data-test-id":"workflow-card-tags","onClick:tag":e.onClickTag,onExpand:e.onExpandTags},null,8,["tags","onClick:tag","onExpand"])],512)),[[V,e.data]]):O("",!0)]),_:1})],2)]),_:1},8,["class","onClick"])}const Ee={$style:$e},We=R(ye,[["render",ve],["__cssModules",Ee]]),Ae=M({__name:"SuggestedTemplatesSection",props:{section:{type:Object,required:!0},title:{type:String,required:!1},showTitle:{type:Boolean,default:!0}},setup(e){const t=I(),l=ne(),r=e,h=D(()=>{const d=Array();return t.suggestedTemplates&&r.section.workflows.forEach((m,p)=>{d.push({id:p,name:m.title,workflows:[{id:p}],nodes:m.nodes})}),d});function i({id:d}){t.openModalWithData({name:re,data:{workflow:r.section.workflows[d]}}),l.track("User clicked template recommendation",{templateName:r.section.workflows[d].title},{withPostHog:!0})}return(d,m)=>{const p=o("n8n-text");return c(),_("div",{class:u(d.$style.container),"data-test-id":"suggested-templates-section-container"},[e.showTitle?(c(),_("div",{key:0,class:u(d.$style.header)},[s(p,{size:"large",color:"text-base",bold:!0},{default:a(()=>[w(f(r.title??e.section.title),1)]),_:1})],2)):O("",!0),k("div",{class:u(d.$style.content)},[s(ke,{collections:h.value,loading:!1,"show-item-count":!1,"show-navigation":!1,"cards-width":"24%",onOpenCollection:i},null,8,["collections"])],2)],2)}}}),Oe="_container_13wqg_1",Ue={container:Oe},Le={$style:Ue},Q=R(Ae,[["__cssModules",Le]]),De=M({__name:"SuggestedTemplatesPage",setup(e,{expose:t}){const l=F(),r=I(),h=ge(),i=D(()=>l.currentUser),d=n=>{var T,y,S;if(n!=null&&n.firstName)return((y=(T=n.firstName)==null?void 0:T.charAt(0))==null?void 0:y.toUpperCase())+((S=n==null?void 0:n.firstName)==null?void 0:S.slice(1))},m=D(()=>r.suggestedTemplates?r.suggestedTemplates.sections[0]:null),p=D(()=>{const n=Array();return!r.suggestedTemplates||!m.value||m.value.workflows.forEach((T,y)=>{n.push({id:y,name:T.title,workflows:[{id:y}],nodes:T.nodes})}),n});function E(){r.nodeViewInitialized=!1,h.push({name:L.NEW_WORKFLOW})}return t({currentUser:i,openCanvas:E,suggestedTemplates:p}),(n,T)=>{var U;const y=o("n8n-heading"),S=o("n8n-text"),W=o("n8n-button");return c(),_("div",{class:u(n.$style.container),"data-test-id":"suggested-templates-page-container"},[k("div",{class:u(n.$style.header)},[s(y,{tag:"h1",size:"2xlarge",class:"mb-2xs"},{default:a(()=>[w(f(n.$locale.baseText("suggestedTemplates.heading",{interpolate:{name:d(i.value)||n.$locale.baseText("generic.welcome")}})),1)]),_:1}),s(S,{size:"large",color:"text-base","data-test-id":"suggested-template-section-description"},{default:a(()=>{var $;return[w(f(($=m.value)==null?void 0:$.description),1)]}),_:1})],2),k("div",{class:u(n.$style.content)},[(c(!0),_(N,null,P((U=we(r).suggestedTemplates)==null?void 0:U.sections,$=>(c(),v(Q,{key:$.title,section:$,"show-title":!1},null,8,["section"]))),128))],2),k("div",null,[s(W,{label:n.$locale.baseText("suggestedTemplates.newWorkflowButton"),type:"secondary",size:"medium",icon:"plus","data-test-id":"suggested-templates-new-workflow-button",onClick:E},null,8,["label"])])],2)}}}),Fe="_container_1on4d_1",Ie="_header_1on4d_7",Re={container:Fe,header:Ie},Me={$style:Re},Ve=R(De,[["__cssModules",Me]]),A={ACTIVE:!0,DEACTIVATED:!1,ALL:""},ze=M({name:"WorkflowsView",components:{ResourcesListLayout:X,WorkflowCard:We,TagsDropdown:ce,SuggestedTemplatesPage:Ve,SuggestedTemplatesSection:Q},data(){return{filters:{search:"",ownedBy:"",sharedWith:"",status:A.ALL,tags:[]},sourceControlStoreUnsubscribe:()=>{}}},computed:{...q(j,I,F,H,le,pe,me,ue,F),readOnlyEnv(){return this.sourceControlStore.preferences.branchReadOnly},currentUser(){return this.usersStore.currentUser||{}},allWorkflows(){return this.workflowsStore.allWorkflows},isShareable(){return this.settingsStore.isEnterpriseFeatureEnabled(K.Sharing)},statusFilterOptions(){return[{label:this.$locale.baseText("workflows.filters.status.all"),value:A.ALL},{label:this.$locale.baseText("workflows.filters.status.active"),value:A.ACTIVE},{label:this.$locale.baseText("workflows.filters.status.deactivated"),value:A.DEACTIVATED}]},suggestedTemplates(){return this.uiStore.suggestedTemplates},userRole(){var t,l,r;return((t=this.usersStore.currentUserCloudInfo)==null?void 0:t.role)??((r=(l=this.usersStore.currentUser)==null?void 0:l.personalizationAnswers)==null?void 0:r.role)},isSalesUser(){return this.userRole?["Sales","sales-and-marketing"].includes(this.userRole):!1}},watch:{"filters.tags"(){this.sendFiltersTelemetry("tags")}},mounted(){this.setFiltersFromQueryString(),this.usersStore.showPersonalizationSurvey(),this.sourceControlStoreUnsubscribe=this.sourceControlStore.$onAction(({name:e,after:t})=>{e==="pullWorkfolder"&&t&&t(()=>{this.initialize()})})},beforeUnmount(){this.sourceControlStoreUnsubscribe()},methods:{onFiltersUpdated(e){this.filters=e,this.saveFiltersOnQueryString()},addWorkflow(){this.uiStore.nodeViewInitialized=!1,this.$router.push({name:L.NEW_WORKFLOW}),this.$telemetry.track("User clicked add workflow button",{source:"Workflows list"})},getTemplateRepositoryURL(){return this.templatesStore.websiteTemplateRepositoryURL},trackCategoryLinkClick(e){var t;this.$telemetry.track(`User clicked Browse ${e} Templates`,{role:(t=this.usersStore.currentUserCloudInfo)==null?void 0:t.role,active_workflow_count:this.workflowsStore.activeWorkflows.length})},async initialize(){await Promise.all([this.usersStore.fetchUsers(),this.workflowsStore.fetchAllWorkflows(),this.workflowsStore.fetchActiveWorkflows(),this.credentialsStore.fetchAllCredentials()])},onClickTag(e,t){this.filters.tags.includes(e)||this.filters.tags.push(e)},onFilter(e,t,l){return this.settingsStore.areTagsEnabled&&t.tags.length>0&&(l=l&&t.tags.every(r=>{var h;return(h=e.tags)==null?void 0:h.find(i=>typeof i=="object"?`${i.id}`==`${r}`:`${i}`==`${r}`)})),t.status!==""&&(l=l&&e.active===t.status),l},sendFiltersTelemetry(e){this.$refs.layout.sendFiltersTelemetry(e)},saveFiltersOnQueryString(){const e={};this.filters.search&&(e.search=this.filters.search),typeof this.filters.status!="string"&&(e.status=this.filters.status.toString()),this.filters.tags.length&&(e.tags=this.filters.tags.join(",")),this.filters.ownedBy&&(e.ownedBy=this.filters.ownedBy),this.filters.sharedWith&&(e.sharedWith=this.filters.sharedWith),this.$router.replace({query:Object.keys(e).length?e:void 0})},isValidUserId(e){return Object.keys(this.usersStore.users).includes(e)},setFiltersFromQueryString(){const{tags:e,status:t,search:l,ownedBy:r,sharedWith:h}=this.$route.query,i={};if(r&&typeof r=="string"&&this.isValidUserId(r)&&(i.ownedBy=r),h&&typeof h=="string"&&this.isValidUserId(h)&&(i.sharedWith=h),l&&typeof l=="string"&&(i.search=l),e&&typeof e=="string"){const d=this.tagsStore.allTags.map(p=>p.id),m=e.split(",").filter(p=>d.includes(p));m.length&&(i.tags=m)}t&&typeof t=="string"&&[A.ACTIVE.toString(),A.DEACTIVATED.toString()].includes(t)&&(i.status=t==="true"),Object.keys(i).length&&(this.filters={...this.filters,...i})}}}),Ne=ze,Pe="_actionsContainer_1gv00_1",Be="_emptyStateCard_1gv00_6",Ke="_emptyStateCardIcon_1gv00_19",He={actionsContainer:Pe,emptyStateCard:Be,emptyStateCardIcon:Ke},je={target:"_blank",href:"https://docs.n8n.io/source-control-environments/"},qe={key:1},Qe={class:"text-center mt-s"},Ye=["href"],Ge={key:0,class:"mb-s"},xe={class:"mb-s"};function Je(e,t,l,r,h,i){const d=o("n8n-button"),m=o("i18n-t"),p=o("n8n-tooltip"),E=o("WorkflowCard"),n=o("SuggestedTemplatesSection"),T=o("SuggestedTemplatesPage"),y=o("n8n-heading"),S=o("n8n-text"),W=o("n8n-icon"),U=o("n8n-card"),$=o("n8n-input-label"),Y=o("TagsDropdown"),G=o("n8n-option"),x=o("n8n-select"),J=o("ResourcesListLayout");return c(),v(J,{ref:"layout","resource-key":"workflows",resources:e.allWorkflows,filters:e.filters,"additional-filters-handler":e.onFilter,"type-props":{itemSize:80},"show-aside":e.allWorkflows.length>0,shareable:e.isShareable,initialize:e.initialize,disabled:e.readOnlyEnv,"onClick:add":e.addWorkflow,"onUpdate:filters":e.onFiltersUpdated},{"add-button":a(({disabled:b})=>[s(p,{disabled:!e.readOnlyEnv},{content:a(()=>[s(m,{tag:"span",keypath:"mainSidebar.workflows.readOnlyEnv.tooltip"},{link:a(()=>[k("a",je,f(e.$locale.baseText("mainSidebar.workflows.readOnlyEnv.tooltip.link")),1)]),_:1})]),default:a(()=>[k("div",null,[s(d,{size:"large",block:"",disabled:b,"data-test-id":"resources-list-add",onClick:e.addWorkflow},{default:a(()=>[w(f(e.$locale.baseText("workflows.add")),1)]),_:2},1032,["disabled","onClick"])])]),_:2},1032,["disabled"])]),default:a(({data:b,updateItemSize:g})=>[s(E,{"data-test-id":"resources-list-item",class:"mb-2xs",data:b,"read-only":e.readOnlyEnv,"onExpand:tags":B=>g(b),"onClick:tag":e.onClickTag},null,8,["data","read-only","onExpand:tags","onClick:tag"])]),postListContent:a(()=>{var b;return[(c(!0),_(N,null,P((b=e.suggestedTemplates)==null?void 0:b.sections,(g,B)=>(c(),v(n,{key:B,section:g,title:e.$locale.baseText("suggestedTemplates.sectionTitle",{interpolate:{sectionName:g.name.toLocaleLowerCase()}})},null,8,["section","title"]))),128))]}),empty:a(()=>[e.suggestedTemplates?(c(),v(T,{key:0})):(c(),_("div",qe,[k("div",Qe,[s(y,{tag:"h2",size:"xlarge",class:"mb-2xs"},{default:a(()=>[w(f(e.$locale.baseText(e.currentUser.firstName?"workflows.empty.heading":"workflows.empty.heading.userNotSetup",{interpolate:{name:e.currentUser.firstName}})),1)]),_:1}),s(S,{size:"large",color:"text-base"},{default:a(()=>[w(f(e.$locale.baseText(e.readOnlyEnv?"workflows.empty.description.readOnlyEnv":"workflows.empty.description")),1)]),_:1})]),e.readOnlyEnv?O("",!0):(c(),_("div",{key:0,class:u(["text-center","mt-2xl",e.$style.actionsContainer])},[e.isSalesUser?(c(),_("a",{key:0,href:e.getTemplateRepositoryURL(),class:u(e.$style.emptyStateCard),target:"_blank"},[s(U,{hoverable:"","data-test-id":"browse-sales-templates-card",onClick:t[0]||(t[0]=b=>e.trackCategoryLinkClick("Sales"))},{default:a(()=>[s(W,{class:u(e.$style.emptyStateCardIcon),icon:"box-open"},null,8,["class"]),s(S,{size:"large",class:"mt-xs",color:"text-base"},{default:a(()=>[w(f(e.$locale.baseText("workflows.empty.browseTemplates")),1)]),_:1})]),_:1})],10,Ye)):O("",!0),s(U,{class:u(e.$style.emptyStateCard),hoverable:"","data-test-id":"new-workflow-card",onClick:e.addWorkflow},{default:a(()=>[s(W,{class:u(e.$style.emptyStateCardIcon),icon:"file"},null,8,["class"]),s(S,{size:"large",class:"mt-xs",color:"text-base"},{default:a(()=>[w(f(e.$locale.baseText("workflows.empty.startFromScratch")),1)]),_:1})]),_:1},8,["class","onClick"])],2))]))]),filters:a(({setKeyValue:b})=>[e.settingsStore.areTagsEnabled?(c(),_("div",Ge,[s($,{label:e.$locale.baseText("workflows.filters.tags"),bold:!1,size:"small",color:"text-base",class:"mb-3xs"},null,8,["label"]),s(Y,{placeholder:e.$locale.baseText("workflowOpen.filterWorkflows"),"model-value":e.filters.tags,"create-enabled":!1,"onUpdate:modelValue":g=>b("tags",g)},null,8,["placeholder","model-value","onUpdate:modelValue"])])):O("",!0),k("div",xe,[s($,{label:e.$locale.baseText("workflows.filters.status"),bold:!1,size:"small",color:"text-base",class:"mb-3xs"},null,8,["label"]),s(x,{"data-test-id":"status-dropdown","model-value":e.filters.status,"onUpdate:modelValue":g=>b("status",g)},{default:a(()=>[(c(!0),_(N,null,P(e.statusFilterOptions,g=>(c(),v(G,{key:g.label,label:g.label,value:g.value,"data-test-id":"status"},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onUpdate:modelValue"])])]),_:1},8,["resources","filters","additional-filters-handler","show-aside","shareable","initialize","disabled","onClick:add","onUpdate:filters"])}const Xe={$style:He},Dt=R(Ne,[["render",Je],["__cssModules",Xe]]);export{Dt as default};
2
- //# sourceMappingURL=WorkflowsView-SJ6W5Ten.js.map
1
+ import{R as X}from"./ResourcesListLayout-oPQAgi31.js";import{e as Z,t as K,v as H,f as F,u as I,l as j,$ as ee,dJ as te,V as L,dV as se,du as oe,aa as ae,_ as R,dM as re,O as ne,B as le}from"./n8n-0pza0mdA.js";import{aF as ie,d as de,T as ce,h as ue,u as me,b as pe}from"./index-6M_Mo9yq.js";import{W as fe}from"./WorkflowActivator-vtOaSPI6.js";import{m as q}from"./pinia-28uZ5ZtB.js";import{G as M,ag as o,l as c,M as v,O as a,I as u,R as f,S as w,T as s,a2 as he,Q as O,p as k,U as V,V as z,m as _,e as D,aG as ge,F as N,a7 as P,u as we}from"./vendor-KLOX9vbo.js";import{T as ke}from"./TemplatesInfoCarousel-Nq4oRyBi.js";import"./lodash-es-wI9avrph.js";import"./axios-s2RMMPhA.js";import"./flatted-jPn12Tq4.js";import"./esprima-next-ulPLCZ1Z.js";import"./luxon-ZRIU05qF.js";import"./@vueuse/core-JpwZAlxf.js";import"./uuid-McvpxQtQ.js";import"./vue-i18n-Cb1fO4GA.js";import"./@n8n/permissions-8yMqUF1Y.js";import"./@n8n/codemirror-lang-sql-_W1-z7Mc.js";import"./@lezer/common-1hBQ1gIF.js";import"./prettier-XiNuC5bg.js";import"./@jsplumb/util-DR0SB56A.js";import"./@jsplumb/core-MKwKlGip.js";import"./@jsplumb/common-Q5_tv_GT.js";import"./@jsplumb/connector-bezier-3dWY17R5.js";import"./@jsplumb/browser-ui-AlqFM-P6.js";import"./codemirror-lang-html-n8n-tmVw-mwA.js";import"./codemirror-lang-n8n-expression-71F4KZSz.js";import"./fast-json-stable-stringify-QF2cL2qw.js";import"./timeago.js--Bumj2r9.js";import"./qrcode.vue-ohcdYkQS.js";import"./vue3-touch-events-_RfbPMOD.js";import"./chart.js-JtqvIvkt.js";import"./workflowActivate-dwxhdtFU.js";import"./NodeList-f4t5_e24.js";import"./vue-agile-eBX40Hen.js";const C={OPEN:"open",SHARE:"share",DUPLICATE:"duplicate",DELETE:"delete"},ye=M({components:{TimeAgo:ie,WorkflowActivator:fe},props:{data:{type:Object,required:!0,default:()=>({id:"",createdAt:"",updatedAt:"",active:!1,connections:{},nodes:[],name:"",sharedWith:[],ownedBy:{},versionId:""})},readOnly:{type:Boolean,default:!1}},setup(){return{...Z(),...de()}},data(){return{EnterpriseEditionFeature:K}},computed:{...q(j,I,F,H),currentUser(){return this.usersStore.currentUser||{}},workflowPermissions(){return ee(this.currentUser,this.data)},actions(){const e=[{label:this.$locale.baseText("workflows.item.open"),value:C.OPEN},{label:this.$locale.baseText("workflows.item.share"),value:C.SHARE}];return this.readOnly||e.push({label:this.$locale.baseText("workflows.item.duplicate"),value:C.DUPLICATE}),this.workflowPermissions.delete&&!this.readOnly&&e.push({label:this.$locale.baseText("workflows.item.delete"),value:C.DELETE}),e},formattedCreatedAtDate(){const e=new Date().getFullYear();return te(this.data.createdAt,`d mmmm${this.data.createdAt.startsWith(e)?"":", yyyy"}`)}},methods:{async onClick(e){if(e!=null&&e.ctrlKey||e!=null&&e.metaKey){const t=this.$router.resolve({name:L.WORKFLOW,params:{name:this.data.id}});window.open(t.href,"_blank");return}await this.$router.push({name:L.WORKFLOW,params:{name:this.data.id}})},onClickTag(e,t){t.stopPropagation(),this.$emit("click:tag",e,t)},onExpandTags(){this.$emit("expand:tags")},async onAction(e){if(e===C.OPEN)await this.onClick();else if(e===C.DUPLICATE)this.uiStore.openModalWithData({name:se,data:{id:this.data.id,name:this.data.name,tags:(this.data.tags||[]).map(t=>t.id)}});else if(e===C.SHARE)this.uiStore.openModalWithData({name:oe,data:{id:this.data.id}}),this.$telemetry.track("User opened sharing modal",{workflow_id:this.data.id,user_id_sharer:this.currentUser.id,sub_view:this.$route.name===L.WORKFLOWS?"Workflows listing":"Workflow editor"});else if(e===C.DELETE){if(await this.confirm(this.$locale.baseText("mainSidebar.confirmMessage.workflowDelete.message",{interpolate:{workflowName:this.data.name}}),this.$locale.baseText("mainSidebar.confirmMessage.workflowDelete.headline"),{type:"warning",confirmButtonText:this.$locale.baseText("mainSidebar.confirmMessage.workflowDelete.confirmButtonText"),cancelButtonText:this.$locale.baseText("mainSidebar.confirmMessage.workflowDelete.cancelButtonText")})!==ae)return;try{await this.workflowsStore.deleteWorkflow(this.data.id)}catch(l){this.showError(l,this.$locale.baseText("generic.deleteWorkflowError"));return}this.showMessage({title:this.$locale.baseText("mainSidebar.showMessage.handleSelect1.title"),type:"success"})}}}}),be="_cardLink_w0ebe_1",_e="_cardHeading_w0ebe_11",Te="_cardDescription_w0ebe_17",Se="_cardActions_w0ebe_24",$e={cardLink:be,cardHeading:_e,cardDescription:Te,cardActions:Se},Ce={key:0};function ve(e,t,l,r,h,i){const d=o("n8n-heading"),m=o("TimeAgo"),p=o("n8n-tags"),E=o("n8n-text"),n=o("n8n-badge"),T=o("enterprise-edition"),y=o("WorkflowActivator"),S=o("n8n-action-toggle"),W=o("n8n-card");return c(),v(W,{class:u(e.$style.cardLink),onClick:e.onClick},{header:a(()=>[s(d,{tag:"h2",bold:"",class:u(e.$style.cardHeading),"data-test-id":"workflow-card-name"},{default:a(()=>[w(f(e.data.name),1)]),_:1},8,["class"])]),append:a(()=>[k("div",{class:u(e.$style.cardActions),onClick:t[0]||(t[0]=he(()=>{},["stop"]))},[s(T,{features:[e.EnterpriseEditionFeature.Sharing]},{default:a(()=>[e.workflowPermissions.isOwner?(c(),v(n,{key:0,class:"mr-xs",theme:"tertiary",bold:""},{default:a(()=>[w(f(e.$locale.baseText("workflows.item.owner")),1)]),_:1})):O("",!0)]),_:1},8,["features"]),s(y,{class:"mr-s","workflow-active":e.data.active,"workflow-id":e.data.id,"data-test-id":"workflow-card-activator"},null,8,["workflow-active","workflow-id"]),s(S,{actions:e.actions,theme:"dark","data-test-id":"workflow-card-actions",onAction:e.onAction},null,8,["actions","onAction"])],2)]),default:a(()=>[k("div",{class:u(e.$style.cardDescription)},[s(E,{color:"text-light",size:"small"},{default:a(()=>[z(k("span",null,[w(f(e.$locale.baseText("workflows.item.updated"))+" ",1),s(m,{date:e.data.updatedAt},null,8,["date"]),w(" | ")],512),[[V,e.data]]),z(k("span",{class:"mr-2xs"},f(e.$locale.baseText("workflows.item.created"))+" "+f(e.formattedCreatedAtDate),513),[[V,e.data]]),e.settingsStore.areTagsEnabled&&e.data.tags&&e.data.tags.length>0?z((c(),_("span",Ce,[s(p,{tags:e.data.tags,"truncate-at":3,truncate:"","data-test-id":"workflow-card-tags","onClick:tag":e.onClickTag,onExpand:e.onExpandTags},null,8,["tags","onClick:tag","onExpand"])],512)),[[V,e.data]]):O("",!0)]),_:1})],2)]),_:1},8,["class","onClick"])}const Ee={$style:$e},We=R(ye,[["render",ve],["__cssModules",Ee]]),Ae=M({__name:"SuggestedTemplatesSection",props:{section:{type:Object,required:!0},title:{type:String,required:!1},showTitle:{type:Boolean,default:!0}},setup(e){const t=I(),l=ne(),r=e,h=D(()=>{const d=Array();return t.suggestedTemplates&&r.section.workflows.forEach((m,p)=>{d.push({id:p,name:m.title,workflows:[{id:p}],nodes:m.nodes})}),d});function i({id:d}){t.openModalWithData({name:re,data:{workflow:r.section.workflows[d]}}),l.track("User clicked template recommendation",{templateName:r.section.workflows[d].title},{withPostHog:!0})}return(d,m)=>{const p=o("n8n-text");return c(),_("div",{class:u(d.$style.container),"data-test-id":"suggested-templates-section-container"},[e.showTitle?(c(),_("div",{key:0,class:u(d.$style.header)},[s(p,{size:"large",color:"text-base",bold:!0},{default:a(()=>[w(f(r.title??e.section.title),1)]),_:1})],2)):O("",!0),k("div",{class:u(d.$style.content)},[s(ke,{collections:h.value,loading:!1,"show-item-count":!1,"show-navigation":!1,"cards-width":"24%",onOpenCollection:i},null,8,["collections"])],2)],2)}}}),Oe="_container_13wqg_1",Ue={container:Oe},Le={$style:Ue},Q=R(Ae,[["__cssModules",Le]]),De=M({__name:"SuggestedTemplatesPage",setup(e,{expose:t}){const l=F(),r=I(),h=ge(),i=D(()=>l.currentUser),d=n=>{var T,y,S;if(n!=null&&n.firstName)return((y=(T=n.firstName)==null?void 0:T.charAt(0))==null?void 0:y.toUpperCase())+((S=n==null?void 0:n.firstName)==null?void 0:S.slice(1))},m=D(()=>r.suggestedTemplates?r.suggestedTemplates.sections[0]:null),p=D(()=>{const n=Array();return!r.suggestedTemplates||!m.value||m.value.workflows.forEach((T,y)=>{n.push({id:y,name:T.title,workflows:[{id:y}],nodes:T.nodes})}),n});function E(){r.nodeViewInitialized=!1,h.push({name:L.NEW_WORKFLOW})}return t({currentUser:i,openCanvas:E,suggestedTemplates:p}),(n,T)=>{var U;const y=o("n8n-heading"),S=o("n8n-text"),W=o("n8n-button");return c(),_("div",{class:u(n.$style.container),"data-test-id":"suggested-templates-page-container"},[k("div",{class:u(n.$style.header)},[s(y,{tag:"h1",size:"2xlarge",class:"mb-2xs"},{default:a(()=>[w(f(n.$locale.baseText("suggestedTemplates.heading",{interpolate:{name:d(i.value)||n.$locale.baseText("generic.welcome")}})),1)]),_:1}),s(S,{size:"large",color:"text-base","data-test-id":"suggested-template-section-description"},{default:a(()=>{var $;return[w(f(($=m.value)==null?void 0:$.description),1)]}),_:1})],2),k("div",{class:u(n.$style.content)},[(c(!0),_(N,null,P((U=we(r).suggestedTemplates)==null?void 0:U.sections,$=>(c(),v(Q,{key:$.title,section:$,"show-title":!1},null,8,["section"]))),128))],2),k("div",null,[s(W,{label:n.$locale.baseText("suggestedTemplates.newWorkflowButton"),type:"secondary",size:"medium",icon:"plus","data-test-id":"suggested-templates-new-workflow-button",onClick:E},null,8,["label"])])],2)}}}),Fe="_container_1on4d_1",Ie="_header_1on4d_7",Re={container:Fe,header:Ie},Me={$style:Re},Ve=R(De,[["__cssModules",Me]]),A={ACTIVE:!0,DEACTIVATED:!1,ALL:""},ze=M({name:"WorkflowsView",components:{ResourcesListLayout:X,WorkflowCard:We,TagsDropdown:ce,SuggestedTemplatesPage:Ve,SuggestedTemplatesSection:Q},data(){return{filters:{search:"",ownedBy:"",sharedWith:"",status:A.ALL,tags:[]},sourceControlStoreUnsubscribe:()=>{}}},computed:{...q(j,I,F,H,le,pe,me,ue,F),readOnlyEnv(){return this.sourceControlStore.preferences.branchReadOnly},currentUser(){return this.usersStore.currentUser||{}},allWorkflows(){return this.workflowsStore.allWorkflows},isShareable(){return this.settingsStore.isEnterpriseFeatureEnabled(K.Sharing)},statusFilterOptions(){return[{label:this.$locale.baseText("workflows.filters.status.all"),value:A.ALL},{label:this.$locale.baseText("workflows.filters.status.active"),value:A.ACTIVE},{label:this.$locale.baseText("workflows.filters.status.deactivated"),value:A.DEACTIVATED}]},suggestedTemplates(){return this.uiStore.suggestedTemplates},userRole(){var t,l,r;return((t=this.usersStore.currentUserCloudInfo)==null?void 0:t.role)??((r=(l=this.usersStore.currentUser)==null?void 0:l.personalizationAnswers)==null?void 0:r.role)},isSalesUser(){return this.userRole?["Sales","sales-and-marketing"].includes(this.userRole):!1}},watch:{"filters.tags"(){this.sendFiltersTelemetry("tags")}},mounted(){this.setFiltersFromQueryString(),this.usersStore.showPersonalizationSurvey(),this.sourceControlStoreUnsubscribe=this.sourceControlStore.$onAction(({name:e,after:t})=>{e==="pullWorkfolder"&&t&&t(()=>{this.initialize()})})},beforeUnmount(){this.sourceControlStoreUnsubscribe()},methods:{onFiltersUpdated(e){this.filters=e,this.saveFiltersOnQueryString()},addWorkflow(){this.uiStore.nodeViewInitialized=!1,this.$router.push({name:L.NEW_WORKFLOW}),this.$telemetry.track("User clicked add workflow button",{source:"Workflows list"})},getTemplateRepositoryURL(){return this.templatesStore.websiteTemplateRepositoryURL},trackCategoryLinkClick(e){var t;this.$telemetry.track(`User clicked Browse ${e} Templates`,{role:(t=this.usersStore.currentUserCloudInfo)==null?void 0:t.role,active_workflow_count:this.workflowsStore.activeWorkflows.length})},async initialize(){await Promise.all([this.usersStore.fetchUsers(),this.workflowsStore.fetchAllWorkflows(),this.workflowsStore.fetchActiveWorkflows(),this.credentialsStore.fetchAllCredentials()])},onClickTag(e,t){this.filters.tags.includes(e)||this.filters.tags.push(e)},onFilter(e,t,l){return this.settingsStore.areTagsEnabled&&t.tags.length>0&&(l=l&&t.tags.every(r=>{var h;return(h=e.tags)==null?void 0:h.find(i=>typeof i=="object"?`${i.id}`==`${r}`:`${i}`==`${r}`)})),t.status!==""&&(l=l&&e.active===t.status),l},sendFiltersTelemetry(e){this.$refs.layout.sendFiltersTelemetry(e)},saveFiltersOnQueryString(){const e={};this.filters.search&&(e.search=this.filters.search),typeof this.filters.status!="string"&&(e.status=this.filters.status.toString()),this.filters.tags.length&&(e.tags=this.filters.tags.join(",")),this.filters.ownedBy&&(e.ownedBy=this.filters.ownedBy),this.filters.sharedWith&&(e.sharedWith=this.filters.sharedWith),this.$router.replace({query:Object.keys(e).length?e:void 0})},isValidUserId(e){return Object.keys(this.usersStore.users).includes(e)},setFiltersFromQueryString(){const{tags:e,status:t,search:l,ownedBy:r,sharedWith:h}=this.$route.query,i={};if(r&&typeof r=="string"&&this.isValidUserId(r)&&(i.ownedBy=r),h&&typeof h=="string"&&this.isValidUserId(h)&&(i.sharedWith=h),l&&typeof l=="string"&&(i.search=l),e&&typeof e=="string"){const d=this.tagsStore.allTags.map(p=>p.id),m=e.split(",").filter(p=>d.includes(p));m.length&&(i.tags=m)}t&&typeof t=="string"&&[A.ACTIVE.toString(),A.DEACTIVATED.toString()].includes(t)&&(i.status=t==="true"),Object.keys(i).length&&(this.filters={...this.filters,...i})}}}),Ne=ze,Pe="_actionsContainer_1gv00_1",Be="_emptyStateCard_1gv00_6",Ke="_emptyStateCardIcon_1gv00_19",He={actionsContainer:Pe,emptyStateCard:Be,emptyStateCardIcon:Ke},je={target:"_blank",href:"https://docs.n8n.io/source-control-environments/"},qe={key:1},Qe={class:"text-center mt-s"},Ye=["href"],Ge={key:0,class:"mb-s"},xe={class:"mb-s"};function Je(e,t,l,r,h,i){const d=o("n8n-button"),m=o("i18n-t"),p=o("n8n-tooltip"),E=o("WorkflowCard"),n=o("SuggestedTemplatesSection"),T=o("SuggestedTemplatesPage"),y=o("n8n-heading"),S=o("n8n-text"),W=o("n8n-icon"),U=o("n8n-card"),$=o("n8n-input-label"),Y=o("TagsDropdown"),G=o("n8n-option"),x=o("n8n-select"),J=o("ResourcesListLayout");return c(),v(J,{ref:"layout","resource-key":"workflows",resources:e.allWorkflows,filters:e.filters,"additional-filters-handler":e.onFilter,"type-props":{itemSize:80},"show-aside":e.allWorkflows.length>0,shareable:e.isShareable,initialize:e.initialize,disabled:e.readOnlyEnv,"onClick:add":e.addWorkflow,"onUpdate:filters":e.onFiltersUpdated},{"add-button":a(({disabled:b})=>[s(p,{disabled:!e.readOnlyEnv},{content:a(()=>[s(m,{tag:"span",keypath:"mainSidebar.workflows.readOnlyEnv.tooltip"},{link:a(()=>[k("a",je,f(e.$locale.baseText("mainSidebar.workflows.readOnlyEnv.tooltip.link")),1)]),_:1})]),default:a(()=>[k("div",null,[s(d,{size:"large",block:"",disabled:b,"data-test-id":"resources-list-add",onClick:e.addWorkflow},{default:a(()=>[w(f(e.$locale.baseText("workflows.add")),1)]),_:2},1032,["disabled","onClick"])])]),_:2},1032,["disabled"])]),default:a(({data:b,updateItemSize:g})=>[s(E,{"data-test-id":"resources-list-item",class:"mb-2xs",data:b,"read-only":e.readOnlyEnv,"onExpand:tags":B=>g(b),"onClick:tag":e.onClickTag},null,8,["data","read-only","onExpand:tags","onClick:tag"])]),postListContent:a(()=>{var b;return[(c(!0),_(N,null,P((b=e.suggestedTemplates)==null?void 0:b.sections,(g,B)=>(c(),v(n,{key:B,section:g,title:e.$locale.baseText("suggestedTemplates.sectionTitle",{interpolate:{sectionName:g.name.toLocaleLowerCase()}})},null,8,["section","title"]))),128))]}),empty:a(()=>[e.suggestedTemplates?(c(),v(T,{key:0})):(c(),_("div",qe,[k("div",Qe,[s(y,{tag:"h2",size:"xlarge",class:"mb-2xs"},{default:a(()=>[w(f(e.$locale.baseText(e.currentUser.firstName?"workflows.empty.heading":"workflows.empty.heading.userNotSetup",{interpolate:{name:e.currentUser.firstName}})),1)]),_:1}),s(S,{size:"large",color:"text-base"},{default:a(()=>[w(f(e.$locale.baseText(e.readOnlyEnv?"workflows.empty.description.readOnlyEnv":"workflows.empty.description")),1)]),_:1})]),e.readOnlyEnv?O("",!0):(c(),_("div",{key:0,class:u(["text-center","mt-2xl",e.$style.actionsContainer])},[e.isSalesUser?(c(),_("a",{key:0,href:e.getTemplateRepositoryURL(),class:u(e.$style.emptyStateCard),target:"_blank"},[s(U,{hoverable:"","data-test-id":"browse-sales-templates-card",onClick:t[0]||(t[0]=b=>e.trackCategoryLinkClick("Sales"))},{default:a(()=>[s(W,{class:u(e.$style.emptyStateCardIcon),icon:"box-open"},null,8,["class"]),s(S,{size:"large",class:"mt-xs",color:"text-base"},{default:a(()=>[w(f(e.$locale.baseText("workflows.empty.browseTemplates")),1)]),_:1})]),_:1})],10,Ye)):O("",!0),s(U,{class:u(e.$style.emptyStateCard),hoverable:"","data-test-id":"new-workflow-card",onClick:e.addWorkflow},{default:a(()=>[s(W,{class:u(e.$style.emptyStateCardIcon),icon:"file"},null,8,["class"]),s(S,{size:"large",class:"mt-xs",color:"text-base"},{default:a(()=>[w(f(e.$locale.baseText("workflows.empty.startFromScratch")),1)]),_:1})]),_:1},8,["class","onClick"])],2))]))]),filters:a(({setKeyValue:b})=>[e.settingsStore.areTagsEnabled?(c(),_("div",Ge,[s($,{label:e.$locale.baseText("workflows.filters.tags"),bold:!1,size:"small",color:"text-base",class:"mb-3xs"},null,8,["label"]),s(Y,{placeholder:e.$locale.baseText("workflowOpen.filterWorkflows"),"model-value":e.filters.tags,"create-enabled":!1,"onUpdate:modelValue":g=>b("tags",g)},null,8,["placeholder","model-value","onUpdate:modelValue"])])):O("",!0),k("div",xe,[s($,{label:e.$locale.baseText("workflows.filters.status"),bold:!1,size:"small",color:"text-base",class:"mb-3xs"},null,8,["label"]),s(x,{"data-test-id":"status-dropdown","model-value":e.filters.status,"onUpdate:modelValue":g=>b("status",g)},{default:a(()=>[(c(!0),_(N,null,P(e.statusFilterOptions,g=>(c(),v(G,{key:g.label,label:g.label,value:g.value,"data-test-id":"status"},null,8,["label","value"]))),128))]),_:2},1032,["model-value","onUpdate:modelValue"])])]),_:1},8,["resources","filters","additional-filters-handler","show-aside","shareable","initialize","disabled","onClick:add","onUpdate:filters"])}const Xe={$style:He},Dt=R(Ne,[["render",Je],["__cssModules",Xe]]);export{Dt as default};
2
+ //# sourceMappingURL=WorkflowsView-_nHq94Wq.js.map