n8n-editor-ui 1.47.1 → 1.47.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/.turbo/turbo-build.log +76 -76
  2. package/dist/assets/{AuthView-CMxdNKZJ.js → AuthView-B_jZMnGj.js} +2 -2
  3. package/dist/assets/{AuthView-CMxdNKZJ.js.map → AuthView-B_jZMnGj.js.map} +1 -1
  4. package/dist/assets/{CanvasControls-3FMjwMqA.js → CanvasControls-ns1B0A0j.js} +2 -2
  5. package/dist/assets/{CanvasControls-3FMjwMqA.js.map → CanvasControls-ns1B0A0j.js.map} +1 -1
  6. package/dist/assets/{ChangePasswordView-_NkkcUVb.js → ChangePasswordView-BDsuHv0B.js} +2 -2
  7. package/dist/assets/{ChangePasswordView-_NkkcUVb.js.map → ChangePasswordView-BDsuHv0B.js.map} +1 -1
  8. package/dist/assets/{CollectionParameter-BXMOfisf.js → CollectionParameter-Br-xtutZ.js} +2 -2
  9. package/dist/assets/CollectionParameter-Br-xtutZ.js.map +1 -0
  10. package/dist/assets/{CredentialsView-B2UF3tK_.js → CredentialsView-DnJ_jhDo.js} +2 -2
  11. package/dist/assets/{CredentialsView-B2UF3tK_.js.map → CredentialsView-DnJ_jhDo.js.map} +1 -1
  12. package/dist/assets/{ErrorView-B_lpOlen.js → ErrorView-BfV5e5ko.js} +2 -2
  13. package/dist/assets/{ErrorView-B_lpOlen.js.map → ErrorView-BfV5e5ko.js.map} +1 -1
  14. package/dist/assets/{ExecutionsFilter-dNFZor7l.js → ExecutionsFilter-0XcXH83H.js} +2 -2
  15. package/dist/assets/{ExecutionsFilter-dNFZor7l.js.map → ExecutionsFilter-0XcXH83H.js.map} +1 -1
  16. package/dist/assets/{ExecutionsView-BYe-KERG.js → ExecutionsView-aFiZuLVt.js} +2 -2
  17. package/dist/assets/{ExecutionsView-BYe-KERG.js.map → ExecutionsView-aFiZuLVt.js.map} +1 -1
  18. package/dist/assets/{ForgotMyPasswordView-D97J06wc.js → ForgotMyPasswordView-64X9tXq4.js} +2 -2
  19. package/dist/assets/{ForgotMyPasswordView-D97J06wc.js.map → ForgotMyPasswordView-64X9tXq4.js.map} +1 -1
  20. package/dist/assets/{MainHeader-CT4nF2mY.js → MainHeader-Ch0Iz_7s.js} +2 -2
  21. package/dist/assets/{MainHeader-CT4nF2mY.js.map → MainHeader-Ch0Iz_7s.js.map} +1 -1
  22. package/dist/assets/{MainSidebar-CTg5wPzP.js → MainSidebar-3ee-tTgz.js} +2 -2
  23. package/dist/assets/{MainSidebar-CTg5wPzP.js.map → MainSidebar-3ee-tTgz.js.map} +1 -1
  24. package/dist/assets/{NodeCreation-BF_L2-99.js → NodeCreation-PrQGENrl.js} +3 -3
  25. package/dist/assets/{NodeCreation-BF_L2-99.js.map → NodeCreation-PrQGENrl.js.map} +1 -1
  26. package/dist/assets/{NodeCreator-B_yCtSu6.js → NodeCreator-DlK1669m.js} +2 -2
  27. package/dist/assets/{NodeCreator-B_yCtSu6.js.map → NodeCreator-DlK1669m.js.map} +1 -1
  28. package/dist/assets/{NodeDetailsView-ggolOsHM.js → NodeDetailsView-DcV7LI-g.js} +4 -4
  29. package/dist/assets/{NodeDetailsView-ggolOsHM.js.map → NodeDetailsView-DcV7LI-g.js.map} +1 -1
  30. package/dist/assets/{NodeView-B2MlTl6g.js → NodeView-D_kbUfVN.js} +3 -3
  31. package/dist/assets/{NodeView-B2MlTl6g.js.map → NodeView-D_kbUfVN.js.map} +1 -1
  32. package/dist/assets/{NodeView.v2-D_CKj9CS.js → NodeView.v2-D_Wbnl01.js} +3 -3
  33. package/dist/assets/{NodeView.v2-D_CKj9CS.js.map → NodeView.v2-D_Wbnl01.js.map} +1 -1
  34. package/dist/assets/{ProjectCardBadge.vue_vue_type_script_setup_true_lang-DdHOM703.js → ProjectCardBadge.vue_vue_type_script_setup_true_lang-6oVL0vKx.js} +2 -2
  35. package/dist/assets/{ProjectCardBadge.vue_vue_type_script_setup_true_lang-DdHOM703.js.map → ProjectCardBadge.vue_vue_type_script_setup_true_lang-6oVL0vKx.js.map} +1 -1
  36. package/dist/assets/{ProjectSettings-DpJesEZX.js → ProjectSettings-CfcplqBX.js} +2 -2
  37. package/dist/assets/{ProjectSettings-DpJesEZX.js.map → ProjectSettings-CfcplqBX.js.map} +1 -1
  38. package/dist/assets/{ProjectTabs-D7nNxtFO.js → ProjectTabs-5ZO9YR8J.js} +2 -2
  39. package/dist/assets/{ProjectTabs-D7nNxtFO.js.map → ProjectTabs-5ZO9YR8J.js.map} +1 -1
  40. package/dist/assets/{PushConnectionTracker-YJuy57g2.js → PushConnectionTracker-Bp-RjnYr.js} +2 -2
  41. package/dist/assets/{PushConnectionTracker-YJuy57g2.js.map → PushConnectionTracker-Bp-RjnYr.js.map} +1 -1
  42. package/dist/assets/{ResourcesListLayout-mZ4ijKRB.js → ResourcesListLayout-B4W1PSHT.js} +2 -2
  43. package/dist/assets/{ResourcesListLayout-mZ4ijKRB.js.map → ResourcesListLayout-B4W1PSHT.js.map} +1 -1
  44. package/dist/assets/{RunDataAi-D0m0Vg_p.js → RunDataAi-C3XiqNZa.js} +2 -2
  45. package/dist/assets/{RunDataAi-D0m0Vg_p.js.map → RunDataAi-C3XiqNZa.js.map} +1 -1
  46. package/dist/assets/{RunDataJson-DkHNIqVj.js → RunDataJson-CMcOD-78.js} +3 -3
  47. package/dist/assets/{RunDataJson-DkHNIqVj.js.map → RunDataJson-CMcOD-78.js.map} +1 -1
  48. package/dist/assets/{RunDataJsonActions-Cgxcpw8t.js → RunDataJsonActions-BQBpmtOi.js} +2 -2
  49. package/dist/assets/{RunDataJsonActions-Cgxcpw8t.js.map → RunDataJsonActions-BQBpmtOi.js.map} +1 -1
  50. package/dist/assets/{RunDataSchema-C6aZoC0a.js → RunDataSchema-CF4YH-8y.js} +2 -2
  51. package/dist/assets/{RunDataSchema-C6aZoC0a.js.map → RunDataSchema-CF4YH-8y.js.map} +1 -1
  52. package/dist/assets/{RunDataSearch-D2CDg21N.js → RunDataSearch-DwB8g_cE.js} +2 -2
  53. package/dist/assets/{RunDataSearch-D2CDg21N.js.map → RunDataSearch-DwB8g_cE.js.map} +1 -1
  54. package/dist/assets/{RunDataTable-D597NRFD.js → RunDataTable-BVAuNDP9.js} +2 -2
  55. package/dist/assets/{RunDataTable-D597NRFD.js.map → RunDataTable-BVAuNDP9.js.map} +1 -1
  56. package/dist/assets/{SamlOnboarding-Me669myi.js → SamlOnboarding-Csd8l-7T.js} +2 -2
  57. package/dist/assets/{SamlOnboarding-Me669myi.js.map → SamlOnboarding-Csd8l-7T.js.map} +1 -1
  58. package/dist/assets/{SettingsApiView-DV8pIHDw.js → SettingsApiView-DnvdV7dx.js} +2 -2
  59. package/dist/assets/{SettingsApiView-DV8pIHDw.js.map → SettingsApiView-DnvdV7dx.js.map} +1 -1
  60. package/dist/assets/{SettingsCommunityNodesView-D_gtSdk3.js → SettingsCommunityNodesView-C11a_Ybs.js} +2 -2
  61. package/dist/assets/{SettingsCommunityNodesView-D_gtSdk3.js.map → SettingsCommunityNodesView-C11a_Ybs.js.map} +1 -1
  62. package/dist/assets/{SettingsExternalSecrets-xprYKjAW.js → SettingsExternalSecrets-IIReUcRG.js} +2 -2
  63. package/dist/assets/{SettingsExternalSecrets-xprYKjAW.js.map → SettingsExternalSecrets-IIReUcRG.js.map} +1 -1
  64. package/dist/assets/{SettingsFakeDoorView-CKaSOYh5.js → SettingsFakeDoorView-BOUfBJS8.js} +2 -2
  65. package/dist/assets/{SettingsFakeDoorView-CKaSOYh5.js.map → SettingsFakeDoorView-BOUfBJS8.js.map} +1 -1
  66. package/dist/assets/{SettingsLdapView-BBCv2tmk.js → SettingsLdapView-BaSjQ4cy.js} +2 -2
  67. package/dist/assets/{SettingsLdapView-BBCv2tmk.js.map → SettingsLdapView-BaSjQ4cy.js.map} +1 -1
  68. package/dist/assets/{SettingsLogStreamingView-HRIp8kyL.js → SettingsLogStreamingView-COGhA1hN.js} +2 -2
  69. package/dist/assets/{SettingsLogStreamingView-HRIp8kyL.js.map → SettingsLogStreamingView-COGhA1hN.js.map} +1 -1
  70. package/dist/assets/{SettingsPersonalView-CsUb3SvK.js → SettingsPersonalView-BJGgPTwa.js} +2 -2
  71. package/dist/assets/{SettingsPersonalView-CsUb3SvK.js.map → SettingsPersonalView-BJGgPTwa.js.map} +1 -1
  72. package/dist/assets/{SettingsSourceControl-BkPpVGsk.js → SettingsSourceControl-DkdSLuvp.js} +2 -2
  73. package/dist/assets/{SettingsSourceControl-BkPpVGsk.js.map → SettingsSourceControl-DkdSLuvp.js.map} +1 -1
  74. package/dist/assets/{SettingsSso-BueUV3RH.js → SettingsSso-DA9AOKH5.js} +2 -2
  75. package/dist/assets/{SettingsSso-BueUV3RH.js.map → SettingsSso-DA9AOKH5.js.map} +1 -1
  76. package/dist/assets/{SettingsUsageAndPlan-DzDC9m54.js → SettingsUsageAndPlan-BVPtlthH.js} +2 -2
  77. package/dist/assets/{SettingsUsageAndPlan-DzDC9m54.js.map → SettingsUsageAndPlan-BVPtlthH.js.map} +1 -1
  78. package/dist/assets/{SettingsUsersView-CTd5MQLw.js → SettingsUsersView-BuKt4ZDO.js} +2 -2
  79. package/dist/assets/{SettingsUsersView-CTd5MQLw.js.map → SettingsUsersView-BuKt4ZDO.js.map} +1 -1
  80. package/dist/assets/{SettingsView-DMxqsNh0.js → SettingsView-DJ78VuiY.js} +2 -2
  81. package/dist/assets/{SettingsView-DMxqsNh0.js.map → SettingsView-DJ78VuiY.js.map} +1 -1
  82. package/dist/assets/{SetupView-tkyttChl.js → SetupView-C70Dkfed.js} +2 -2
  83. package/dist/assets/{SetupView-tkyttChl.js.map → SetupView-C70Dkfed.js.map} +1 -1
  84. package/dist/assets/{SetupWorkflowCredentialsButton-B3HZvKQp.js → SetupWorkflowCredentialsButton-CEQ1LrFl.js} +2 -2
  85. package/dist/assets/{SetupWorkflowCredentialsButton-B3HZvKQp.js.map → SetupWorkflowCredentialsButton-CEQ1LrFl.js.map} +1 -1
  86. package/dist/assets/{SetupWorkflowFromTemplateView-DL3b-TZS.js → SetupWorkflowFromTemplateView-BUzzXtBr.js} +2 -2
  87. package/dist/assets/{SetupWorkflowFromTemplateView-DL3b-TZS.js.map → SetupWorkflowFromTemplateView-BUzzXtBr.js.map} +1 -1
  88. package/dist/assets/{SigninView-BPLGsvzz.js → SigninView-B3CNL-yp.js} +2 -2
  89. package/dist/assets/{SigninView-BPLGsvzz.js.map → SigninView-B3CNL-yp.js.map} +1 -1
  90. package/dist/assets/{SignoutView-BySf9D7k.js → SignoutView-svcLavkC.js} +2 -2
  91. package/dist/assets/{SignoutView-BySf9D7k.js.map → SignoutView-svcLavkC.js.map} +1 -1
  92. package/dist/assets/{SignupView-EU3JWt4T.js → SignupView-DJWRTPKF.js} +2 -2
  93. package/dist/assets/{SignupView-EU3JWt4T.js.map → SignupView-DJWRTPKF.js.map} +1 -1
  94. package/dist/assets/{TemplateDetails-Cemx-ozB.js → TemplateDetails-BnbiWxo-.js} +2 -2
  95. package/dist/assets/{TemplateDetails-Cemx-ozB.js.map → TemplateDetails-BnbiWxo-.js.map} +1 -1
  96. package/dist/assets/{TemplateList-h3b91b7e.js → TemplateList-By-t2s0M.js} +2 -2
  97. package/dist/assets/{TemplateList-h3b91b7e.js.map → TemplateList-By-t2s0M.js.map} +1 -1
  98. package/dist/assets/{TemplatesCollectionView-aBX3f7Pp.js → TemplatesCollectionView-D2L1fmSc.js} +2 -2
  99. package/dist/assets/{TemplatesCollectionView-aBX3f7Pp.js.map → TemplatesCollectionView-D2L1fmSc.js.map} +1 -1
  100. package/dist/assets/{TemplatesSearchView-DyoC9WUR.js → TemplatesSearchView-Bmr6Nd6g.js} +2 -2
  101. package/dist/assets/{TemplatesSearchView-DyoC9WUR.js.map → TemplatesSearchView-Bmr6Nd6g.js.map} +1 -1
  102. package/dist/assets/{TemplatesView-GQmC_sY8.js → TemplatesView-BbunSn-s.js} +2 -2
  103. package/dist/assets/{TemplatesView-GQmC_sY8.js.map → TemplatesView-BbunSn-s.js.map} +1 -1
  104. package/dist/assets/{TemplatesWorkflowView-C-0pXdDh.js → TemplatesWorkflowView-XxBIlMWY.js} +2 -2
  105. package/dist/assets/{TemplatesWorkflowView-C-0pXdDh.js.map → TemplatesWorkflowView-XxBIlMWY.js.map} +1 -1
  106. package/dist/assets/{VariablesView-BO5fdkwt.js → VariablesView-ZY5xLmKI.js} +2 -2
  107. package/dist/assets/{VariablesView-BO5fdkwt.js.map → VariablesView-ZY5xLmKI.js.map} +1 -1
  108. package/dist/assets/{WorkerView-C3Rdbsfq.js → WorkerView-DV19-i1-.js} +2 -2
  109. package/dist/assets/{WorkerView-C3Rdbsfq.js.map → WorkerView-DV19-i1-.js.map} +1 -1
  110. package/dist/assets/{WorkflowActivator-DQXSsw0V.js → WorkflowActivator-BXWURYao.js} +2 -2
  111. package/dist/assets/{WorkflowActivator-DQXSsw0V.js.map → WorkflowActivator-BXWURYao.js.map} +1 -1
  112. package/dist/assets/{WorkflowExecutionsInfoAccordion-DJPF47om.js → WorkflowExecutionsInfoAccordion-aldNazgt.js} +2 -2
  113. package/dist/assets/{WorkflowExecutionsInfoAccordion-DJPF47om.js.map → WorkflowExecutionsInfoAccordion-aldNazgt.js.map} +1 -1
  114. package/dist/assets/{WorkflowExecutionsLandingPage-DoSsHWxH.js → WorkflowExecutionsLandingPage-CaAameTk.js} +2 -2
  115. package/dist/assets/{WorkflowExecutionsLandingPage-DoSsHWxH.js.map → WorkflowExecutionsLandingPage-CaAameTk.js.map} +1 -1
  116. package/dist/assets/{WorkflowExecutionsPreview-Dt23N5A4.js → WorkflowExecutionsPreview-Bb-wJtr-.js} +2 -2
  117. package/dist/assets/{WorkflowExecutionsPreview-Dt23N5A4.js.map → WorkflowExecutionsPreview-Bb-wJtr-.js.map} +1 -1
  118. package/dist/assets/{WorkflowExecutionsView-CpAIVxYQ.js → WorkflowExecutionsView-D7nlOP1-.js} +2 -2
  119. package/dist/assets/{WorkflowExecutionsView-CpAIVxYQ.js.map → WorkflowExecutionsView-D7nlOP1-.js.map} +1 -1
  120. package/dist/assets/{WorkflowHistory-D1-E_J_s.js → WorkflowHistory-C6zCGFoY.js} +2 -2
  121. package/dist/assets/{WorkflowHistory-D1-E_J_s.js.map → WorkflowHistory-C6zCGFoY.js.map} +1 -1
  122. package/dist/assets/{WorkflowOnboardingView-fzAZuVh5.js → WorkflowOnboardingView-Bu_Oqtr7.js} +2 -2
  123. package/dist/assets/{WorkflowOnboardingView-fzAZuVh5.js.map → WorkflowOnboardingView-Bu_Oqtr7.js.map} +1 -1
  124. package/dist/assets/{WorkflowPreview-BkL2jDRm.js → WorkflowPreview-CVwpKdpj.js} +2 -2
  125. package/dist/assets/{WorkflowPreview-BkL2jDRm.js.map → WorkflowPreview-CVwpKdpj.js.map} +1 -1
  126. package/dist/assets/{WorkflowsView-rbygROmM.js → WorkflowsView-DVeAZ2zW.js} +2 -2
  127. package/dist/assets/{WorkflowsView-rbygROmM.js.map → WorkflowsView-DVeAZ2zW.js.map} +1 -1
  128. package/dist/assets/{cloud-B90x0-JC.js → cloud-BRhZDk2r.js} +2 -2
  129. package/dist/assets/{cloud-B90x0-JC.js.map → cloud-BRhZDk2r.js.map} +1 -1
  130. package/dist/assets/{collaboration.store-ElxCV91F.js → collaboration.store-Ol7bcCFc.js} +2 -2
  131. package/dist/assets/{collaboration.store-ElxCV91F.js.map → collaboration.store-Ol7bcCFc.js.map} +1 -1
  132. package/dist/assets/{index-BE0Xl-jy.js → index-1OxaEeO3.js} +4 -4
  133. package/dist/assets/{index-BE0Xl-jy.js.map → index-1OxaEeO3.js.map} +1 -1
  134. package/dist/assets/{nodeCreator.store-Q1T99YCl.js → nodeCreator.store-FIsc3SCx.js} +2 -2
  135. package/dist/assets/{nodeCreator.store-Q1T99YCl.js.map → nodeCreator.store-FIsc3SCx.js.map} +1 -1
  136. package/dist/assets/{templateActions-B7R6qRak.js → templateActions-w_1vSarr.js} +2 -2
  137. package/dist/assets/{templateActions-B7R6qRak.js.map → templateActions-w_1vSarr.js.map} +1 -1
  138. package/dist/assets/{useExecutionDebugging-BJ0CgMh8.js → useExecutionDebugging-EHinBq_u.js} +2 -2
  139. package/dist/assets/{useExecutionDebugging-BJ0CgMh8.js.map → useExecutionDebugging-EHinBq_u.js.map} +1 -1
  140. package/dist/assets/{useExecutionHelpers-D3294Pbg.js → useExecutionHelpers-LeKoU_T-.js} +2 -2
  141. package/dist/assets/{useExecutionHelpers-D3294Pbg.js.map → useExecutionHelpers-LeKoU_T-.js.map} +1 -1
  142. package/dist/assets/{usePushConnection-CsYeEXN4.js → usePushConnection-PQgFeT_8.js} +2 -2
  143. package/dist/assets/{usePushConnection-CsYeEXN4.js.map → usePushConnection-PQgFeT_8.js.map} +1 -1
  144. package/dist/assets/{useUserHelpers-CzNhI0vP.js → useUserHelpers-DZtbUAMm.js} +2 -2
  145. package/dist/assets/{useUserHelpers-CzNhI0vP.js.map → useUserHelpers-DZtbUAMm.js.map} +1 -1
  146. package/dist/assets/{useWorkflowActivate-D8iK20ua.js → useWorkflowActivate-npf1npdP.js} +2 -2
  147. package/dist/assets/{useWorkflowActivate-D8iK20ua.js.map → useWorkflowActivate-npf1npdP.js.map} +1 -1
  148. package/dist/index.html +1 -1
  149. package/package.json +1 -1
  150. package/dist/assets/CollectionParameter-BXMOfisf.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"WorkflowExecutionsPreview-Dt23N5A4.js","sources":["../../src/components/executions/workflow/WorkflowExecutionsPreview.vue"],"sourcesContent":["<template>\n\t<div v-if=\"executionUIDetails?.name === 'running'\" :class=\"$style.runningInfo\">\n\t\t<div :class=\"$style.spinner\">\n\t\t\t<n8n-spinner type=\"ring\" />\n\t\t</div>\n\t\t<n8n-text :class=\"$style.runningMessage\" color=\"text-light\">\n\t\t\t{{ $locale.baseText('executionDetails.runningMessage') }}\n\t\t</n8n-text>\n\t\t<n8n-button class=\"mt-l\" type=\"tertiary\" @click=\"handleStopClick\">\n\t\t\t{{ $locale.baseText('executionsList.stopExecution') }}\n\t\t</n8n-button>\n\t</div>\n\t<div v-else-if=\"executionUIDetails\" :class=\"$style.previewContainer\">\n\t\t<div\n\t\t\tv-if=\"execution\"\n\t\t\t:class=\"$style.executionDetails\"\n\t\t\t:data-test-id=\"`execution-preview-details-${executionId}`\"\n\t\t>\n\t\t\t<div>\n\t\t\t\t<n8n-text size=\"large\" color=\"text-base\" :bold=\"true\" data-test-id=\"execution-time\">{{\n\t\t\t\t\texecutionUIDetails?.startTime\n\t\t\t\t}}</n8n-text\n\t\t\t\t><br />\n\t\t\t\t<n8n-spinner\n\t\t\t\t\tv-if=\"executionUIDetails?.name === 'running'\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t:class=\"[$style.spinner, 'mr-4xs']\"\n\t\t\t\t/>\n\t\t\t\t<n8n-text\n\t\t\t\t\tsize=\"medium\"\n\t\t\t\t\t:class=\"[$style.status, $style[executionUIDetails.name]]\"\n\t\t\t\t\tdata-test-id=\"execution-preview-label\"\n\t\t\t\t>\n\t\t\t\t\t{{ executionUIDetails.label }}\n\t\t\t\t</n8n-text>\n\t\t\t\t{{ ' ' }}\n\t\t\t\t<n8n-text v-if=\"executionUIDetails.name === 'running'\" color=\"text-base\" size=\"medium\">\n\t\t\t\t\t{{\n\t\t\t\t\t\t$locale.baseText('executionDetails.runningTimeRunning', {\n\t\t\t\t\t\t\tinterpolate: { time: executionUIDetails?.runningTime },\n\t\t\t\t\t\t})\n\t\t\t\t\t}}\n\t\t\t\t\t| ID#{{ execution.id }}\n\t\t\t\t</n8n-text>\n\t\t\t\t<n8n-text\n\t\t\t\t\tv-else-if=\"executionUIDetails.name !== 'waiting'\"\n\t\t\t\t\tcolor=\"text-base\"\n\t\t\t\t\tsize=\"medium\"\n\t\t\t\t\tdata-test-id=\"execution-preview-id\"\n\t\t\t\t>\n\t\t\t\t\t{{\n\t\t\t\t\t\t$locale.baseText('executionDetails.runningTimeFinished', {\n\t\t\t\t\t\t\tinterpolate: { time: executionUIDetails?.runningTime ?? 'unknown' },\n\t\t\t\t\t\t})\n\t\t\t\t\t}}\n\t\t\t\t\t| ID#{{ execution.id }}\n\t\t\t\t</n8n-text>\n\t\t\t\t<n8n-text\n\t\t\t\t\tv-else-if=\"executionUIDetails?.name === 'waiting'\"\n\t\t\t\t\tcolor=\"text-base\"\n\t\t\t\t\tsize=\"medium\"\n\t\t\t\t>\n\t\t\t\t\t| ID#{{ execution.id }}\n\t\t\t\t</n8n-text>\n\t\t\t\t<br /><n8n-text v-if=\"execution.mode === 'retry'\" color=\"text-base\" size=\"medium\">\n\t\t\t\t\t{{ $locale.baseText('executionDetails.retry') }}\n\t\t\t\t\t<router-link\n\t\t\t\t\t\t:class=\"$style.executionLink\"\n\t\t\t\t\t\t:to=\"{\n\t\t\t\t\t\t\tname: executionPreviewViewName,\n\t\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\t\tworkflowId: execution.workflowId,\n\t\t\t\t\t\t\t\texecutionId: execution.retryOf,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\"\n\t\t\t\t\t>\n\t\t\t\t\t\t#{{ execution.retryOf }}\n\t\t\t\t\t</router-link>\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<n8n-button size=\"medium\" :type=\"debugButtonData.type\" :class=\"$style.debugLink\">\n\t\t\t\t\t<router-link\n\t\t\t\t\t\t:to=\"{\n\t\t\t\t\t\t\tname: executionDebugViewName,\n\t\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\t\tname: execution.workflowId,\n\t\t\t\t\t\t\t\texecutionId: execution.id,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span data-test-id=\"execution-debug-button\" @click=\"handleDebugLinkClick\">{{\n\t\t\t\t\t\t\tdebugButtonData.text\n\t\t\t\t\t\t}}</span>\n\t\t\t\t\t</router-link>\n\t\t\t\t</n8n-button>\n\n\t\t\t\t<ElDropdown\n\t\t\t\t\tv-if=\"isRetriable\"\n\t\t\t\t\tref=\"retryDropdown\"\n\t\t\t\t\ttrigger=\"click\"\n\t\t\t\t\tclass=\"mr-xs\"\n\t\t\t\t\t@command=\"handleRetryClick\"\n\t\t\t\t>\n\t\t\t\t\t<span class=\"retry-button\">\n\t\t\t\t\t\t<n8n-icon-button\n\t\t\t\t\t\t\tsize=\"medium\"\n\t\t\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t\t\t:title=\"$locale.baseText('executionsList.retryExecution')\"\n\t\t\t\t\t\t\ticon=\"redo\"\n\t\t\t\t\t\t\tdata-test-id=\"execution-preview-retry-button\"\n\t\t\t\t\t\t\t@blur=\"onRetryButtonBlur\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</span>\n\t\t\t\t\t<template #dropdown>\n\t\t\t\t\t\t<el-dropdown-menu>\n\t\t\t\t\t\t\t<el-dropdown-item command=\"current-workflow\">\n\t\t\t\t\t\t\t\t{{ $locale.baseText('executionsList.retryWithCurrentlySavedWorkflow') }}\n\t\t\t\t\t\t\t</el-dropdown-item>\n\t\t\t\t\t\t\t<el-dropdown-item command=\"original-workflow\">\n\t\t\t\t\t\t\t\t{{ $locale.baseText('executionsList.retryWithOriginalWorkflow') }}\n\t\t\t\t\t\t\t</el-dropdown-item>\n\t\t\t\t\t\t</el-dropdown-menu>\n\t\t\t\t\t</template>\n\t\t\t\t</ElDropdown>\n\t\t\t\t<n8n-icon-button\n\t\t\t\t\t:title=\"$locale.baseText('executionDetails.deleteExecution')\"\n\t\t\t\t\ticon=\"trash\"\n\t\t\t\t\tsize=\"medium\"\n\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\tdata-test-id=\"execution-preview-delete-button\"\n\t\t\t\t\t@click=\"onDeleteExecution\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t\t<WorkflowPreview\n\t\t\tmode=\"execution\"\n\t\t\tloader-type=\"spinner\"\n\t\t\t:execution-id=\"executionId\"\n\t\t\t:execution-mode=\"executionMode\"\n\t\t/>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue';\nimport { defineComponent } from 'vue';\nimport { ElDropdown } from 'element-plus';\nimport { useExecutionDebugging } from '@/composables/useExecutionDebugging';\nimport { useMessage } from '@/composables/useMessage';\nimport WorkflowPreview from '@/components/WorkflowPreview.vue';\nimport { MODAL_CONFIRM, VIEWS } from '@/constants';\nimport type { ExecutionSummary } from 'n8n-workflow';\nimport type { IExecutionUIData } from '@/composables/useExecutionHelpers';\nimport { useExecutionHelpers } from '@/composables/useExecutionHelpers';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { mapStores } from 'pinia';\n\ntype RetryDropdownRef = InstanceType<typeof ElDropdown> & { hide: () => void };\n\nexport default defineComponent({\n\tname: 'WorkflowExecutionsPreview',\n\tcomponents: {\n\t\tElDropdown,\n\t\tWorkflowPreview,\n\t},\n\tprops: {\n\t\texecution: {\n\t\t\ttype: Object as PropType<ExecutionSummary>,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tsetup() {\n\t\tconst executionHelpers = useExecutionHelpers();\n\n\t\treturn {\n\t\t\texecutionHelpers,\n\t\t\t...useMessage(),\n\t\t\t...useExecutionDebugging(),\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useWorkflowsStore),\n\t\texecutionId(): string {\n\t\t\treturn this.$route.params.executionId as string;\n\t\t},\n\t\texecutionUIDetails(): IExecutionUIData | null {\n\t\t\treturn this.execution ? this.executionHelpers.getUIDetails(this.execution) : null;\n\t\t},\n\t\texecutionMode(): string {\n\t\t\treturn this.execution?.mode || '';\n\t\t},\n\t\tdebugButtonData(): Record<string, string> {\n\t\t\treturn this.execution?.status === 'success'\n\t\t\t\t? {\n\t\t\t\t\t\ttext: this.$locale.baseText('executionsList.debug.button.copyToEditor'),\n\t\t\t\t\t\ttype: 'secondary',\n\t\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\t\ttext: this.$locale.baseText('executionsList.debug.button.debugInEditor'),\n\t\t\t\t\t\ttype: 'primary',\n\t\t\t\t\t};\n\t\t},\n\t\tisRetriable(): boolean {\n\t\t\treturn !!this.execution && this.executionHelpers.isExecutionRetriable(this.execution);\n\t\t},\n\t\texecutionDebugViewName() {\n\t\t\treturn VIEWS.EXECUTION_DEBUG;\n\t\t},\n\t\texecutionPreviewViewName() {\n\t\t\treturn VIEWS.EXECUTION_PREVIEW;\n\t\t},\n\t},\n\tmethods: {\n\t\tasync onDeleteExecution(): Promise<void> {\n\t\t\tconst deleteConfirmed = await this.confirm(\n\t\t\t\tthis.$locale.baseText('executionDetails.confirmMessage.message'),\n\t\t\t\tthis.$locale.baseText('executionDetails.confirmMessage.headline'),\n\t\t\t\t{\n\t\t\t\t\ttype: 'warning',\n\t\t\t\t\tconfirmButtonText: this.$locale.baseText(\n\t\t\t\t\t\t'executionDetails.confirmMessage.confirmButtonText',\n\t\t\t\t\t),\n\t\t\t\t\tcancelButtonText: '',\n\t\t\t\t},\n\t\t\t);\n\t\t\tif (deleteConfirmed !== MODAL_CONFIRM) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.$emit('deleteCurrentExecution');\n\t\t},\n\t\thandleRetryClick(command: string): void {\n\t\t\tthis.$emit('retryExecution', { execution: this.execution, command });\n\t\t},\n\t\thandleStopClick(): void {\n\t\t\tthis.$emit('stopExecution');\n\t\t},\n\t\tonRetryButtonBlur(event: FocusEvent): void {\n\t\t\t// Hide dropdown when clicking outside of current document\n\t\t\tconst retryDropdownRef = this.$refs.retryDropdown as RetryDropdownRef | undefined;\n\t\t\tif (retryDropdownRef && event.relatedTarget === null) {\n\t\t\t\tretryDropdownRef.handleClose();\n\t\t\t}\n\t\t},\n\t},\n});\n</script>\n\n<style module lang=\"scss\">\n.previewContainer {\n\tposition: relative;\n\theight: 100%;\n\toverflow: hidden;\n}\n\n.executionDetails {\n\tposition: absolute;\n\tpadding: var(--spacing-m);\n\tpadding-right: var(--spacing-xl);\n\twidth: 100%;\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\ttransition: all 150ms ease-in-out;\n\tpointer-events: none;\n\n\t> div:last-child {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t}\n\n\t& * {\n\t\tpointer-events: all;\n\t}\n}\n\n.spinner {\n\tdiv div {\n\t\twidth: 30px;\n\t\theight: 30px;\n\t\tborder-width: 2px;\n\t}\n}\n\n.running,\n.spinner {\n\tcolor: var(--color-warning);\n}\n.waiting {\n\tcolor: var(--color-secondary);\n}\n.success {\n\tcolor: var(--color-success);\n}\n.error {\n\tcolor: var(--color-danger);\n}\n\n.runningInfo {\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\tmargin-top: var(--spacing-4xl);\n}\n\n.runningMessage {\n\twidth: 200px;\n\tmargin-top: var(--spacing-l);\n\ttext-align: center;\n}\n\n.debugLink {\n\tmargin-right: var(--spacing-xs);\n\tpadding: 0;\n\n\ta > span {\n\t\tdisplay: block;\n\t\tpadding: var(--button-padding-vertical, var(--spacing-xs))\n\t\t\tvar(--button-padding-horizontal, var(--spacing-m));\n\t}\n}\n</style>\n"],"names":["_sfc_main","defineComponent","ElDropdown","WorkflowPreview","useExecutionHelpers","useMessage","useExecutionDebugging","mapStores","useWorkflowsStore","_a","VIEWS","MODAL_CONFIRM","command","event","retryDropdownRef","_hoisted_1","_createElementVNode","_resolveComponent","_ctx","_openBlock","_createElementBlock","$style","_normalizeClass","_createVNode","_component_n8n_spinner","_component_n8n_text","_createTextVNode","_toDisplayString","_component_n8n_button","executionUIDetails","execution","_b","_createBlock","_createCommentVNode","_hoisted_3","_withCtx","_component_router_link","executionPreviewViewName","debugButtonData","executionDebugViewName","isRetriable","_component_ElDropdown","_component_el_dropdown_menu","_component_el_dropdown_item","$locale","_hoisted_4","_component_n8n_icon_button","_component_WorkflowPreview"],"mappings":"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"}
1
+ {"version":3,"file":"WorkflowExecutionsPreview-Bb-wJtr-.js","sources":["../../src/components/executions/workflow/WorkflowExecutionsPreview.vue"],"sourcesContent":["<template>\n\t<div v-if=\"executionUIDetails?.name === 'running'\" :class=\"$style.runningInfo\">\n\t\t<div :class=\"$style.spinner\">\n\t\t\t<n8n-spinner type=\"ring\" />\n\t\t</div>\n\t\t<n8n-text :class=\"$style.runningMessage\" color=\"text-light\">\n\t\t\t{{ $locale.baseText('executionDetails.runningMessage') }}\n\t\t</n8n-text>\n\t\t<n8n-button class=\"mt-l\" type=\"tertiary\" @click=\"handleStopClick\">\n\t\t\t{{ $locale.baseText('executionsList.stopExecution') }}\n\t\t</n8n-button>\n\t</div>\n\t<div v-else-if=\"executionUIDetails\" :class=\"$style.previewContainer\">\n\t\t<div\n\t\t\tv-if=\"execution\"\n\t\t\t:class=\"$style.executionDetails\"\n\t\t\t:data-test-id=\"`execution-preview-details-${executionId}`\"\n\t\t>\n\t\t\t<div>\n\t\t\t\t<n8n-text size=\"large\" color=\"text-base\" :bold=\"true\" data-test-id=\"execution-time\">{{\n\t\t\t\t\texecutionUIDetails?.startTime\n\t\t\t\t}}</n8n-text\n\t\t\t\t><br />\n\t\t\t\t<n8n-spinner\n\t\t\t\t\tv-if=\"executionUIDetails?.name === 'running'\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t:class=\"[$style.spinner, 'mr-4xs']\"\n\t\t\t\t/>\n\t\t\t\t<n8n-text\n\t\t\t\t\tsize=\"medium\"\n\t\t\t\t\t:class=\"[$style.status, $style[executionUIDetails.name]]\"\n\t\t\t\t\tdata-test-id=\"execution-preview-label\"\n\t\t\t\t>\n\t\t\t\t\t{{ executionUIDetails.label }}\n\t\t\t\t</n8n-text>\n\t\t\t\t{{ ' ' }}\n\t\t\t\t<n8n-text v-if=\"executionUIDetails.name === 'running'\" color=\"text-base\" size=\"medium\">\n\t\t\t\t\t{{\n\t\t\t\t\t\t$locale.baseText('executionDetails.runningTimeRunning', {\n\t\t\t\t\t\t\tinterpolate: { time: executionUIDetails?.runningTime },\n\t\t\t\t\t\t})\n\t\t\t\t\t}}\n\t\t\t\t\t| ID#{{ execution.id }}\n\t\t\t\t</n8n-text>\n\t\t\t\t<n8n-text\n\t\t\t\t\tv-else-if=\"executionUIDetails.name !== 'waiting'\"\n\t\t\t\t\tcolor=\"text-base\"\n\t\t\t\t\tsize=\"medium\"\n\t\t\t\t\tdata-test-id=\"execution-preview-id\"\n\t\t\t\t>\n\t\t\t\t\t{{\n\t\t\t\t\t\t$locale.baseText('executionDetails.runningTimeFinished', {\n\t\t\t\t\t\t\tinterpolate: { time: executionUIDetails?.runningTime ?? 'unknown' },\n\t\t\t\t\t\t})\n\t\t\t\t\t}}\n\t\t\t\t\t| ID#{{ execution.id }}\n\t\t\t\t</n8n-text>\n\t\t\t\t<n8n-text\n\t\t\t\t\tv-else-if=\"executionUIDetails?.name === 'waiting'\"\n\t\t\t\t\tcolor=\"text-base\"\n\t\t\t\t\tsize=\"medium\"\n\t\t\t\t>\n\t\t\t\t\t| ID#{{ execution.id }}\n\t\t\t\t</n8n-text>\n\t\t\t\t<br /><n8n-text v-if=\"execution.mode === 'retry'\" color=\"text-base\" size=\"medium\">\n\t\t\t\t\t{{ $locale.baseText('executionDetails.retry') }}\n\t\t\t\t\t<router-link\n\t\t\t\t\t\t:class=\"$style.executionLink\"\n\t\t\t\t\t\t:to=\"{\n\t\t\t\t\t\t\tname: executionPreviewViewName,\n\t\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\t\tworkflowId: execution.workflowId,\n\t\t\t\t\t\t\t\texecutionId: execution.retryOf,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\"\n\t\t\t\t\t>\n\t\t\t\t\t\t#{{ execution.retryOf }}\n\t\t\t\t\t</router-link>\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<n8n-button size=\"medium\" :type=\"debugButtonData.type\" :class=\"$style.debugLink\">\n\t\t\t\t\t<router-link\n\t\t\t\t\t\t:to=\"{\n\t\t\t\t\t\t\tname: executionDebugViewName,\n\t\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\t\tname: execution.workflowId,\n\t\t\t\t\t\t\t\texecutionId: execution.id,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span data-test-id=\"execution-debug-button\" @click=\"handleDebugLinkClick\">{{\n\t\t\t\t\t\t\tdebugButtonData.text\n\t\t\t\t\t\t}}</span>\n\t\t\t\t\t</router-link>\n\t\t\t\t</n8n-button>\n\n\t\t\t\t<ElDropdown\n\t\t\t\t\tv-if=\"isRetriable\"\n\t\t\t\t\tref=\"retryDropdown\"\n\t\t\t\t\ttrigger=\"click\"\n\t\t\t\t\tclass=\"mr-xs\"\n\t\t\t\t\t@command=\"handleRetryClick\"\n\t\t\t\t>\n\t\t\t\t\t<span class=\"retry-button\">\n\t\t\t\t\t\t<n8n-icon-button\n\t\t\t\t\t\t\tsize=\"medium\"\n\t\t\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\t\t\t:title=\"$locale.baseText('executionsList.retryExecution')\"\n\t\t\t\t\t\t\ticon=\"redo\"\n\t\t\t\t\t\t\tdata-test-id=\"execution-preview-retry-button\"\n\t\t\t\t\t\t\t@blur=\"onRetryButtonBlur\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</span>\n\t\t\t\t\t<template #dropdown>\n\t\t\t\t\t\t<el-dropdown-menu>\n\t\t\t\t\t\t\t<el-dropdown-item command=\"current-workflow\">\n\t\t\t\t\t\t\t\t{{ $locale.baseText('executionsList.retryWithCurrentlySavedWorkflow') }}\n\t\t\t\t\t\t\t</el-dropdown-item>\n\t\t\t\t\t\t\t<el-dropdown-item command=\"original-workflow\">\n\t\t\t\t\t\t\t\t{{ $locale.baseText('executionsList.retryWithOriginalWorkflow') }}\n\t\t\t\t\t\t\t</el-dropdown-item>\n\t\t\t\t\t\t</el-dropdown-menu>\n\t\t\t\t\t</template>\n\t\t\t\t</ElDropdown>\n\t\t\t\t<n8n-icon-button\n\t\t\t\t\t:title=\"$locale.baseText('executionDetails.deleteExecution')\"\n\t\t\t\t\ticon=\"trash\"\n\t\t\t\t\tsize=\"medium\"\n\t\t\t\t\ttype=\"tertiary\"\n\t\t\t\t\tdata-test-id=\"execution-preview-delete-button\"\n\t\t\t\t\t@click=\"onDeleteExecution\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t\t<WorkflowPreview\n\t\t\tmode=\"execution\"\n\t\t\tloader-type=\"spinner\"\n\t\t\t:execution-id=\"executionId\"\n\t\t\t:execution-mode=\"executionMode\"\n\t\t/>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue';\nimport { defineComponent } from 'vue';\nimport { ElDropdown } from 'element-plus';\nimport { useExecutionDebugging } from '@/composables/useExecutionDebugging';\nimport { useMessage } from '@/composables/useMessage';\nimport WorkflowPreview from '@/components/WorkflowPreview.vue';\nimport { MODAL_CONFIRM, VIEWS } from '@/constants';\nimport type { ExecutionSummary } from 'n8n-workflow';\nimport type { IExecutionUIData } from '@/composables/useExecutionHelpers';\nimport { useExecutionHelpers } from '@/composables/useExecutionHelpers';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { mapStores } from 'pinia';\n\ntype RetryDropdownRef = InstanceType<typeof ElDropdown> & { hide: () => void };\n\nexport default defineComponent({\n\tname: 'WorkflowExecutionsPreview',\n\tcomponents: {\n\t\tElDropdown,\n\t\tWorkflowPreview,\n\t},\n\tprops: {\n\t\texecution: {\n\t\t\ttype: Object as PropType<ExecutionSummary>,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tsetup() {\n\t\tconst executionHelpers = useExecutionHelpers();\n\n\t\treturn {\n\t\t\texecutionHelpers,\n\t\t\t...useMessage(),\n\t\t\t...useExecutionDebugging(),\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useWorkflowsStore),\n\t\texecutionId(): string {\n\t\t\treturn this.$route.params.executionId as string;\n\t\t},\n\t\texecutionUIDetails(): IExecutionUIData | null {\n\t\t\treturn this.execution ? this.executionHelpers.getUIDetails(this.execution) : null;\n\t\t},\n\t\texecutionMode(): string {\n\t\t\treturn this.execution?.mode || '';\n\t\t},\n\t\tdebugButtonData(): Record<string, string> {\n\t\t\treturn this.execution?.status === 'success'\n\t\t\t\t? {\n\t\t\t\t\t\ttext: this.$locale.baseText('executionsList.debug.button.copyToEditor'),\n\t\t\t\t\t\ttype: 'secondary',\n\t\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\t\ttext: this.$locale.baseText('executionsList.debug.button.debugInEditor'),\n\t\t\t\t\t\ttype: 'primary',\n\t\t\t\t\t};\n\t\t},\n\t\tisRetriable(): boolean {\n\t\t\treturn !!this.execution && this.executionHelpers.isExecutionRetriable(this.execution);\n\t\t},\n\t\texecutionDebugViewName() {\n\t\t\treturn VIEWS.EXECUTION_DEBUG;\n\t\t},\n\t\texecutionPreviewViewName() {\n\t\t\treturn VIEWS.EXECUTION_PREVIEW;\n\t\t},\n\t},\n\tmethods: {\n\t\tasync onDeleteExecution(): Promise<void> {\n\t\t\tconst deleteConfirmed = await this.confirm(\n\t\t\t\tthis.$locale.baseText('executionDetails.confirmMessage.message'),\n\t\t\t\tthis.$locale.baseText('executionDetails.confirmMessage.headline'),\n\t\t\t\t{\n\t\t\t\t\ttype: 'warning',\n\t\t\t\t\tconfirmButtonText: this.$locale.baseText(\n\t\t\t\t\t\t'executionDetails.confirmMessage.confirmButtonText',\n\t\t\t\t\t),\n\t\t\t\t\tcancelButtonText: '',\n\t\t\t\t},\n\t\t\t);\n\t\t\tif (deleteConfirmed !== MODAL_CONFIRM) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.$emit('deleteCurrentExecution');\n\t\t},\n\t\thandleRetryClick(command: string): void {\n\t\t\tthis.$emit('retryExecution', { execution: this.execution, command });\n\t\t},\n\t\thandleStopClick(): void {\n\t\t\tthis.$emit('stopExecution');\n\t\t},\n\t\tonRetryButtonBlur(event: FocusEvent): void {\n\t\t\t// Hide dropdown when clicking outside of current document\n\t\t\tconst retryDropdownRef = this.$refs.retryDropdown as RetryDropdownRef | undefined;\n\t\t\tif (retryDropdownRef && event.relatedTarget === null) {\n\t\t\t\tretryDropdownRef.handleClose();\n\t\t\t}\n\t\t},\n\t},\n});\n</script>\n\n<style module lang=\"scss\">\n.previewContainer {\n\tposition: relative;\n\theight: 100%;\n\toverflow: hidden;\n}\n\n.executionDetails {\n\tposition: absolute;\n\tpadding: var(--spacing-m);\n\tpadding-right: var(--spacing-xl);\n\twidth: 100%;\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n\ttransition: all 150ms ease-in-out;\n\tpointer-events: none;\n\n\t> div:last-child {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t}\n\n\t& * {\n\t\tpointer-events: all;\n\t}\n}\n\n.spinner {\n\tdiv div {\n\t\twidth: 30px;\n\t\theight: 30px;\n\t\tborder-width: 2px;\n\t}\n}\n\n.running,\n.spinner {\n\tcolor: var(--color-warning);\n}\n.waiting {\n\tcolor: var(--color-secondary);\n}\n.success {\n\tcolor: var(--color-success);\n}\n.error {\n\tcolor: var(--color-danger);\n}\n\n.runningInfo {\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\tmargin-top: var(--spacing-4xl);\n}\n\n.runningMessage {\n\twidth: 200px;\n\tmargin-top: var(--spacing-l);\n\ttext-align: center;\n}\n\n.debugLink {\n\tmargin-right: var(--spacing-xs);\n\tpadding: 0;\n\n\ta > span {\n\t\tdisplay: block;\n\t\tpadding: var(--button-padding-vertical, var(--spacing-xs))\n\t\t\tvar(--button-padding-horizontal, var(--spacing-m));\n\t}\n}\n</style>\n"],"names":["_sfc_main","defineComponent","ElDropdown","WorkflowPreview","useExecutionHelpers","useMessage","useExecutionDebugging","mapStores","useWorkflowsStore","_a","VIEWS","MODAL_CONFIRM","command","event","retryDropdownRef","_hoisted_1","_createElementVNode","_resolveComponent","_ctx","_openBlock","_createElementBlock","$style","_normalizeClass","_createVNode","_component_n8n_spinner","_component_n8n_text","_createTextVNode","_toDisplayString","_component_n8n_button","executionUIDetails","execution","_b","_createBlock","_createCommentVNode","_hoisted_3","_withCtx","_component_router_link","executionPreviewViewName","debugButtonData","executionDebugViewName","isRetriable","_component_ElDropdown","_component_el_dropdown_menu","_component_el_dropdown_item","$locale","_hoisted_4","_component_n8n_icon_button","_component_WorkflowPreview"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{m as N,s as ce}from"./pinia-sugP77Im.js";import{G as O,ag as c,l as r,m as $,U as d,O as x,p as _,S as v,T as h,I as u,M as k,R as w,F as de,a7 as fe,a0 as me,aH as G,az as pe,r as D,e as A,d as q,b as xe,y as he,u as we}from"./vendor-Dv5OeN6t.js";import{j as H,V as b,L as X,aI as ye,J as Ee,A as ge,aJ as ve,q as j,d as K,u as J,H as ke,p as $e,e as _e,b as be,a4 as Q,c as Ie,P as Y,cG as Te,a3 as Se,ap as Re,x as Me,cH as Le,G as We}from"./index-BE0Xl-jy.js";import{E as Ce,a as De}from"./ExecutionsFilter-dNFZor7l.js";import{u as Ae}from"./useExecutionHelpers-D3294Pbg.js";import{_ as F}from"./n8n-4UEsHtUL.js";import{W as Oe}from"./WorkflowExecutionsInfoAccordion-DJPF47om.js";import"./axios-Mm4CS0gO.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-BBHtM40w.js";import"./lodash-es-CZ1inz46.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-CIxnBJXX.js";import"./vue-i18n-Delvyc9x.js";import"./uuid-SoommWqA.js";import"./luxon-CLwAIbs0.js";import"./@n8n/codemirror-lang-sql-DBO6T13I.js";import"./@lezer/common-B6ct0j_v.js";import"./prettier-bS6l4Vb1.js";import"./@jsplumb/util-DS-9vq_E.js";import"./@jsplumb/core-CVBraiyY.js";import"./@jsplumb/common-CF-b-6-M.js";import"./@jsplumb/connector-bezier-BGU0Ovbw.js";import"./@jsplumb/browser-ui-BVF2KoJK.js";import"./codemirror-lang-html-n8n-CWDO6_kP.js";import"./@n8n/codemirror-lang-Dl0FW_KM.js";import"./esprima-next-nhoSXAeq.js";import"./fast-json-stable-stringify-BOfzoJX1.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-BGkPba5A.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";import"./dateFormatter-CfbOITvW.js";const ze=O({name:"WorkflowExecutionsCard",components:{ExecutionsTime:Ce},props:{execution:{type:Object,required:!0},highlight:{type:Boolean,default:!1},showGap:{type:Boolean,default:!1}},emits:["retryExecution","mounted"],setup(){return{executionHelpers:Ae()}},computed:{...N(H),currentWorkflow(){return this.$route.params.name||this.workflowsStore.workflowId},retryExecutionActions(){return[{id:"current-workflow",label:this.$locale.baseText("executionsList.retryWithCurrentlySavedWorkflow")},{id:"original-workflow",label:this.$locale.baseText("executionsList.retryWithOriginalWorkflow")}]},executionUIDetails(){return this.executionHelpers.getUIDetails(this.execution)},isActive(){return this.execution.id===this.$route.params.executionId},isRetriable(){return this.executionHelpers.isExecutionRetriable(this.execution)},executionPreviewViewName(){return b.EXECUTION_PREVIEW}},mounted(){this.$emit("mounted",this.execution.id)},methods:{onRetryMenuItemSelect(e){this.$emit("retryExecution",{execution:this.execution,command:e})}}}),Ue="_WorkflowExecutionsCard_16ozu_1",Ne="_active_16ozu_8",He="_executionStatus_16ozu_11",Fe="_executionLink_16ozu_14",Be="_spinner_16ozu_17",Pe="_running_16ozu_17",Ve="_statusLabel_16ozu_24",qe="_success_16ozu_29",Ge="_waiting_16ozu_32",Xe="_error_16ozu_38",je="_unknown_16ozu_44",Ke="_icon_16ozu_61",Je="_icons_16ozu_66",Qe="_retry_16ozu_74",Ye="_manual_16ozu_77",Ze="_showGap_16ozu_85",et={WorkflowExecutionsCard:Ue,active:Ne,executionStatus:He,executionLink:Fe,new:"_new_16ozu_17",spinner:Be,running:Pe,statusLabel:Ve,success:qe,waiting:Ge,error:Xe,unknown:je,icon:Ke,icons:Je,retry:Qe,manual:Ye,showGap:Ze},tt={key:0};function ot(e,t,n,f,i,I){const m=c("n8n-text"),y=c("n8n-spinner"),s=c("ExecutionsTime"),T=c("n8n-action-dropdown"),R=c("font-awesome-icon"),S=c("n8n-tooltip"),M=c("router-link");return r(),$("div",{class:u({"execution-card":!0,[e.$style.WorkflowExecutionsCard]:!0,[e.$style.active]:e.isActive,[e.$style[e.executionUIDetails.name]]:!0,[e.$style.highlight]:e.highlight,[e.$style.showGap]:e.showGap})},[d(M,{class:u(e.$style.executionLink),to:{name:e.executionPreviewViewName,params:{name:e.currentWorkflow,executionId:e.execution.id}},"data-test-execution-status":e.executionUIDetails.name},{default:x(()=>[_("div",{class:u(e.$style.description)},[d(m,{color:"text-dark",bold:!0,size:"medium","data-test-id":"execution-time"},{default:x(()=>[v(h(e.executionUIDetails.startTime),1)]),_:1}),_("div",{class:u(e.$style.executionStatus)},[e.executionUIDetails.name==="running"?(r(),k(y,{key:0,size:"small",class:u([e.$style.spinner,"mr-4xs"])},null,8,["class"])):w("",!0),d(m,{class:u(e.$style.statusLabel),size:"small"},{default:x(()=>[v(h(e.executionUIDetails.label),1)]),_:1},8,["class"]),v(" "+h(" ")+" "),e.executionUIDetails.name==="running"?(r(),k(m,{key:1,color:e.isActive?"text-dark":"text-base",size:"small"},{default:x(()=>[v(h(e.$locale.baseText("executionDetails.runningTimeRunning"))+" ",1),d(s,{"start-time":e.execution.startedAt},null,8,["start-time"])]),_:1},8,["color"])):e.executionUIDetails.runningTime!==""?(r(),k(m,{key:2,color:e.isActive?"text-dark":"text-base",size:"small"},{default:x(()=>{var a;return[v(h(e.$locale.baseText("executionDetails.runningTimeFinished",{interpolate:{time:(a=e.executionUIDetails)==null?void 0:a.runningTime}})),1)]}),_:1},8,["color"])):w("",!0)],2),e.execution.mode==="retry"?(r(),$("div",tt,[d(m,{color:e.isActive?"text-dark":"text-base",size:"small"},{default:x(()=>[v(h(e.$locale.baseText("executionDetails.retry"))+" #"+h(e.execution.retryOf),1)]),_:1},8,["color"])])):w("",!0)],2),_("div",{class:u(e.$style.icons)},[e.isRetriable?(r(),k(T,{key:0,class:u([e.$style.icon,e.$style.retry]),items:e.retryExecutionActions,"activator-icon":"redo","data-test-id":"retry-execution-button",onSelect:e.onRetryMenuItemSelect},null,8,["class","items","onSelect"])):w("",!0),e.execution.mode==="manual"?(r(),k(S,{key:1,placement:"top"},{content:x(()=>[_("span",null,h(e.$locale.baseText("executionsList.test")),1)]),default:x(()=>[e.execution.mode==="manual"?(r(),k(R,{key:0,class:u([e.$style.icon,e.$style.manual]),icon:"flask"},null,8,["class"])):w("",!0)]),_:1})):w("",!0)],2)]),_:1},8,["class","to","data-test-execution-status"])],2)}const nt={$style:et},st=F(ze,[["render",ot],["__cssModules",nt]]),it=O({name:"WorkflowExecutionsSidebar",components:{WorkflowExecutionsCard:st,WorkflowExecutionsInfoAccordion:Oe,ExecutionsFilter:De},props:{executions:{type:Array,required:!0},loading:{type:Boolean,default:!0},loadingMore:{type:Boolean,default:!1},temporaryExecution:{type:Object,default:null}},emits:{retryExecution:null,loadMore:null,refresh:null,filterUpdated:null,reloadExecutions:null,"update:autoRefresh":null},data(){return{filter:{},mountedItems:[],autoScrollDeps:{activeExecutionSet:!1,cardsMounted:!1,scroll:!0}}},computed:{...N(X,H)},watch:{$route(e,t){t.name===b.EXECUTION_PREVIEW&&e.name===b.EXECUTION_HOME&&this.$router.go(-1)},"executionsStore.activeExecution"(e,t){e&&e.id!==(t==null?void 0:t.id)&&(this.autoScrollDeps.activeExecutionSet=!0)},autoScrollDeps:{handler(e){Object.values(e).every(Boolean)&&this.scrollToActiveCard()},deep:!0}},methods:{onItemMounted(e){var t;this.mountedItems.push(e),this.mountedItems.length===this.executions.length&&(this.autoScrollDeps.cardsMounted=!0,this.checkListSize()),((t=this.executionsStore.activeExecution)==null?void 0:t.id)===e&&(this.autoScrollDeps.activeExecutionSet=!0)},loadMore(e=20){if(!this.loading){const t=this.$refs.executionList;if(t){const n=t.offsetHeight-(t.scrollHeight-t.scrollTop);n>-10&&n<10&&this.$emit("loadMore",e)}}},onRetryExecution(e){this.$emit("retryExecution",e)},onRefresh(){this.$emit("refresh")},onFilterChanged(e){this.$emit("filterUpdated",e)},reloadExecutions(){this.$emit("reloadExecutions")},checkListSize(){const e=this.$refs.container,t=this.$refs[`execution-${this.mountedItems[this.mountedItems.length-1]}`];if(e&&(t!=null&&t.length)){const n=t[0].$el,f=Math.ceil(e.clientHeight/n.clientHeight);f>this.executions.length&&this.$emit("loadMore",f-this.executions.length)}},scrollToActiveCard(){var n;const e=this.$refs.executionList,t=this.$refs[`execution-${(n=this.executionsStore.activeExecution)==null?void 0:n.id}`];if(e&&(t!=null&&t.length)&&this.executionsStore.activeExecution){const i=t[0].$el.getBoundingClientRect(),I=200;i.top>e.offsetHeight&&(this.autoScrollDeps.scroll=!1,e.scrollTo({top:i.top-I,behavior:"smooth"}))}}}}),rt="_container_qg8we_1",at="_heading_qg8we_12",ut="_controls_qg8we_19",lt="_executionList_qg8we_31",ct="_infoAccordion_qg8we_49",dt="_noResultsContainer_qg8we_61",ft={container:rt,heading:at,controls:ut,executionList:lt,infoAccordion:ct,noResultsContainer:dt},mt={key:0,class:"mr-l"},pt={key:3,class:"mr-m"};function xt(e,t,n,f,i,I){const m=c("n8n-heading"),y=c("el-checkbox"),s=c("ExecutionsFilter"),T=c("n8n-loading"),R=c("n8n-text"),S=c("WorkflowExecutionsCard"),M=c("WorkflowExecutionsInfoAccordion");return r(),$("div",{ref:"container",class:u(["executions-sidebar",e.$style.container]),"data-test-id":"executions-sidebar"},[_("div",{class:u(e.$style.heading)},[d(m,{tag:"h2",size:"medium",color:"text-dark"},{default:x(()=>[v(h(e.$locale.baseText("generic.executions")),1)]),_:1})],2),_("div",{class:u(e.$style.controls)},[d(y,{modelValue:e.executionsStore.autoRefresh,"onUpdate:modelValue":[t[0]||(t[0]=a=>e.executionsStore.autoRefresh=a),t[1]||(t[1]=a=>e.$emit("update:autoRefresh",a))],"data-test-id":"auto-refresh-checkbox"},{default:x(()=>[v(h(e.$locale.baseText("executionsList.autoRefresh")),1)]),_:1},8,["modelValue"]),d(s,{"popover-placement":"left-start",onFilterChanged:e.onFilterChanged},null,8,["onFilterChanged"])],2),_("div",{ref:"executionList",class:u(e.$style.executionList),"data-test-id":"current-executions-list",onScroll:t[2]||(t[2]=a=>e.loadMore(20))},[e.loading?(r(),$("div",mt,[d(T,{variant:"rect"})])):w("",!0),!e.loading&&e.executions.length===0?(r(),$("div",{key:1,class:u(e.$style.noResultsContainer),"data-test-id":"execution-list-empty"},[d(R,{color:"text-base",size:"medium",align:"center"},{default:x(()=>[v(h(e.$locale.baseText("executionsLandingPage.noResults")),1)]),_:1})],2)):e.temporaryExecution?(r(),k(S,{key:2,ref:`execution-${e.temporaryExecution.id}`,execution:e.temporaryExecution,"data-test-id":`execution-details-${e.temporaryExecution.id}`,"show-gap":!0,onRetryExecution:e.onRetryExecution},null,8,["execution","data-test-id","onRetryExecution"])):w("",!0),d(me,{name:"executions-list"},{default:x(()=>[(r(!0),$(de,null,fe(e.executions,a=>(r(),k(S,{key:a.id,ref_for:!0,ref:`execution-${a.id}`,execution:a,"data-test-id":`execution-details-${a.id}`,onRetryExecution:e.onRetryExecution,onMounted:e.onItemMounted},null,8,["execution","data-test-id","onRetryExecution","onMounted"]))),128))]),_:1}),e.loadingMore?(r(),$("div",pt,[d(T,{variant:"p",rows:1})])):w("",!0)],34),_("div",{class:u(e.$style.infoAccordion)},[d(M,{"initially-expanded":!1})],2)],2)}const ht={$style:ft},wt=F(it,[["render",xt],["__cssModules",ht],["__scopeId","data-v-4ab2abd5"]]),yt=O({name:"WorkflowExecutionsList",components:{WorkflowExecutionsSidebar:wt},async beforeRouteLeave(e,t,n){if(ye(e)===Ee.WORKFLOW){n();return}if(this.uiStore.stateIsDirty){const f=await this.confirm(this.$locale.baseText("generic.unsavedWork.confirmMessage.message"),{title:this.$locale.baseText("generic.unsavedWork.confirmMessage.headline"),type:"warning",confirmButtonText:this.$locale.baseText("generic.unsavedWork.confirmMessage.confirmButtonText"),cancelButtonText:this.$locale.baseText("generic.unsavedWork.confirmMessage.cancelButtonText"),showClose:!0});f===ge?(await this.workflowHelpers.saveCurrentWorkflow({},!1)&&await this.npsSurveyStore.fetchPromptsData(),this.uiStore.stateIsDirty=!1,n()):f===ve&&(this.uiStore.stateIsDirty=!1,n())}else n()},props:{loading:{type:Boolean,default:!1},workflow:{type:Object,required:!0},executions:{type:Array,default:()=>[]},filters:{type:Object,default:()=>({})},execution:{type:Object,default:null},loadingMore:{type:Boolean,default:!1}},emits:["execution:delete","execution:stop","execution:retry","update:auto-refresh","update:filters","load-more","reload"],setup(){const e=Se(),t=G(),n=j({router:t}),{callDebounced:f}=K();return{externalHooks:e,workflowHelpers:n,callDebounced:f,...J(),...ke()}},computed:{...N(Ie,Q,be,_e,$e),temporaryExecution(){return!this.executions.find(t=>{var n;return t.id===((n=this.execution)==null?void 0:n.id)})?this.execution:void 0},hidePreview(){return this.loading||!this.execution&&this.executions.length},filterApplied(){return this.filters.status!=="all"},workflowDataNotLoaded(){return this.workflow.id===Y&&this.workflow.name===""},requestFilter(){return Te({...this.filters,workflowId:this.workflow.id})}},watch:{execution(e){e&&this.$router.push({name:b.EXECUTION_PREVIEW,params:{name:this.workflow.id,executionId:e.id}}).catch(()=>{})}},methods:{async onDeleteCurrentExecution(){var e;this.$emit("execution:delete",(e=this.execution)==null?void 0:e.id)},async onStopExecution(){var e;this.$emit("execution:stop",(e=this.execution)==null?void 0:e.id)},async onRetryExecution(e){const t=e.command==="current-workflow";this.$emit("execution:retry",{id:e.execution.id,loadWorkflow:t})}}}),Et="_container_16o1g_1",gt="_content_16o1g_7",vt={container:Et,content:gt};function kt(e,t,n,f,i,I){const m=c("WorkflowExecutionsSidebar"),y=c("router-view");return r(),$("div",{class:u(e.$style.container)},[d(m,{executions:e.executions,loading:e.loading&&!e.executions.length,"loading-more":e.loadingMore,"temporary-execution":e.temporaryExecution,"onUpdate:autoRefresh":t[0]||(t[0]=s=>e.$emit("update:auto-refresh",s)),onReloadExecutions:t[1]||(t[1]=s=>e.$emit("reload")),onFilterUpdated:t[2]||(t[2]=s=>e.$emit("update:filters",s)),onLoadMore:t[3]||(t[3]=s=>e.$emit("load-more")),onRetryExecution:e.onRetryExecution},null,8,["executions","loading","loading-more","temporary-execution","onRetryExecution"]),e.hidePreview?w("",!0):(r(),$("div",{key:0,class:u(e.$style.content)},[d(y,{name:"executionPreview",execution:e.execution,onDeleteCurrentExecution:e.onDeleteCurrentExecution,onRetryExecution:e.onRetryExecution,onStopExecution:e.onStopExecution},null,8,["execution","onDeleteCurrentExecution","onRetryExecution","onStopExecution"])],2))],2)}const $t={$style:vt},_t=F(yt,[["render",kt],["__cssModules",$t]]),so=O({__name:"WorkflowExecutionsView",setup(e){const t=X(),n=H(),f=Q(),i=Me(),I=We(),m=pe(),y=G(),s=J(),{callDebounced:T}=K(),R=j({router:y}),S=Re(),{filters:M}=ce(t),a=D(!1),L=D(!1),g=D(),E=A(()=>m.params.name||n.workflowId),W=A(()=>m.params.executionId),p=A(()=>[...t.currentExecutionsByWorkflowId[E.value]??[],...t.executionsByWorkflowId[E.value]??[]]),Z=A(()=>p.value.find(o=>o.id===W.value)??z.value),z=D();q(()=>E.value,async()=>{await V()}),q(()=>W.value,async()=>{await B()}),xe(async()=>{await f.loadNodeTypesIfNotLoaded(),await Promise.all([f.loadNodeTypesIfNotLoaded(),V(),t.initialize(E.value)]),await B(),await ee(),document.addEventListener("visibilitychange",P)}),he(()=>{t.reset(),document.removeEventListener("visibilitychange",P)});async function B(){if(W.value)try{z.value=await t.fetchExecution(W.value),t.activeExecution=z.value}catch(o){s.showError(o,i.baseText("nodeView.showError.openExecution.title"))}}function P(){document.visibilityState==="hidden"?t.stopAutoRefreshInterval():t.startAutoRefreshInterval(E.value)}async function ee(){m.name===b.EXECUTION_HOME&&p.value.length>0&&g.value&&await y.push({name:b.EXECUTION_PREVIEW,params:{name:g.value.id,executionId:p.value[0].id}}).catch(()=>{})}async function V(){if(n.workflow.id===Y)try{await n.fetchActiveWorkflows();const o=await n.fetchWorkflow(E.value);await R.initState(o),await S.addNodes(o.nodes,o.connections)}catch(o){s.showError(o,i.baseText("nodeView.showError.openWorkflow.title"))}g.value=n.workflow}async function te(o){o?await t.startAutoRefreshInterval(E.value):t.stopAutoRefreshInterval()}async function U(){if(E.value)try{await t.fetchExecutions({...t.executionsFilters,workflowId:E.value})}catch(o){o.errorCode===Le?s.showMessage({title:i.baseText("executionsList.showError.refreshData.title"),message:o.message,type:"error",duration:3500},!1):s.showError(o,i.baseText("executionsList.showError.refreshData.title"))}}async function oe(o){t.reset(),t.setFilters(o),await t.initialize(E.value)}async function ne(o){try{await t.stopCurrentExecution(o),s.showMessage({title:i.baseText("executionsList.showMessage.stopExecution.title"),message:i.baseText("executionsList.showMessage.stopExecution.message",{interpolate:{activeExecutionId:o}}),type:"success"}),await U()}catch(l){s.showError(l,i.baseText("executionsList.showError.stopExecution.title"))}}async function se(o){a.value=!0;try{const l=p.value.findIndex(le=>le.id===o),C=p.value[l+1]||p.value[l-1]||p.value[0];await t.deleteExecutions({ids:[o]}),g.value&&(p.value.length>0?await y.replace({name:b.EXECUTION_PREVIEW,params:{name:g.value.id,executionId:C.id}}).catch(()=>{}):await y.replace({name:b.EXECUTION_HOME,params:{name:g.value.id}}))}catch(l){a.value=!1,s.showError(l,i.baseText("executionsList.showError.handleDeleteSelected.title"));return}a.value=!1,s.showMessage({title:i.baseText("executionsList.showMessage.handleDeleteSelected.title"),type:"success"})}async function ie(o){var l;s.showMessage({title:i.baseText("executionDetails.runningMessage"),type:"info",duration:2e3}),await re(o),await U(),I.track("User clicked retry execution button",{workflow_id:(l=g.value)==null?void 0:l.id,execution_id:o.id,retry_type:o.loadWorkflow?"current":"original"})}async function re(o){try{await t.retryExecution(o.id,o.loadWorkflow)?s.showMessage({title:i.baseText("executionsList.showMessage.retrySuccessfulTrue.title"),type:"success"}):s.showMessage({title:i.baseText("executionsList.showMessage.retrySuccessfulFalse.title"),type:"error"})}catch(l){s.showError(l,i.baseText("executionsList.showError.retryExecution.title"))}}async function ae(){L.value||await T(ue,{debounceTime:1e3})}async function ue(){var l;if((l=t.executionsFilters.status)!=null&&l.includes("running")||p.value.length>=t.executionsCount)return;L.value=!0;let o;p.value.length!==0&&(o=p.value.slice(-1)[0].id);try{await t.fetchExecutions(t.executionsFilters,o)}catch(C){L.value=!1,s.showError(C,i.baseText("executionsList.showError.loadMore.title"));return}L.value=!1}return(o,l)=>g.value?(r(),k(_t,{key:0,executions:p.value,execution:Z.value,filters:we(M),workflow:g.value,loading:a.value,"loading-more":L.value,"onExecution:stop":ne,"onExecution:delete":se,"onExecution:retry":ie,"onUpdate:filters":oe,"onUpdate:autoRefresh":te,onLoadMore:ae,onReload:U},null,8,["executions","execution","filters","workflow","loading","loading-more"])):w("",!0)}});export{so as default};
2
- //# sourceMappingURL=WorkflowExecutionsView-CpAIVxYQ.js.map
1
+ import{m as N,s as ce}from"./pinia-sugP77Im.js";import{G as O,ag as c,l as r,m as $,U as d,O as x,p as _,S as v,T as h,I as u,M as k,R as w,F as de,a7 as fe,a0 as me,aH as G,az as pe,r as D,e as A,d as q,b as xe,y as he,u as we}from"./vendor-Dv5OeN6t.js";import{j as H,V as b,L as X,aI as ye,J as Ee,A as ge,aJ as ve,q as j,d as K,u as J,H as ke,p as $e,e as _e,b as be,a4 as Q,c as Ie,P as Y,cG as Te,a3 as Se,ap as Re,x as Me,cH as Le,G as We}from"./index-1OxaEeO3.js";import{E as Ce,a as De}from"./ExecutionsFilter-0XcXH83H.js";import{u as Ae}from"./useExecutionHelpers-LeKoU_T-.js";import{_ as F}from"./n8n-4UEsHtUL.js";import{W as Oe}from"./WorkflowExecutionsInfoAccordion-aldNazgt.js";import"./axios-Mm4CS0gO.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-BBHtM40w.js";import"./lodash-es-CZ1inz46.js";import"./@n8n/permissions-BxxteU-C.js";import"./dateformat-CIxnBJXX.js";import"./vue-i18n-Delvyc9x.js";import"./uuid-SoommWqA.js";import"./luxon-CLwAIbs0.js";import"./@n8n/codemirror-lang-sql-DBO6T13I.js";import"./@lezer/common-B6ct0j_v.js";import"./prettier-bS6l4Vb1.js";import"./@jsplumb/util-DS-9vq_E.js";import"./@jsplumb/core-CVBraiyY.js";import"./@jsplumb/common-CF-b-6-M.js";import"./@jsplumb/connector-bezier-BGU0Ovbw.js";import"./@jsplumb/browser-ui-BVF2KoJK.js";import"./codemirror-lang-html-n8n-CWDO6_kP.js";import"./@n8n/codemirror-lang-Dl0FW_KM.js";import"./esprima-next-nhoSXAeq.js";import"./fast-json-stable-stringify-BOfzoJX1.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-BGkPba5A.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";import"./dateFormatter-CfbOITvW.js";const ze=O({name:"WorkflowExecutionsCard",components:{ExecutionsTime:Ce},props:{execution:{type:Object,required:!0},highlight:{type:Boolean,default:!1},showGap:{type:Boolean,default:!1}},emits:["retryExecution","mounted"],setup(){return{executionHelpers:Ae()}},computed:{...N(H),currentWorkflow(){return this.$route.params.name||this.workflowsStore.workflowId},retryExecutionActions(){return[{id:"current-workflow",label:this.$locale.baseText("executionsList.retryWithCurrentlySavedWorkflow")},{id:"original-workflow",label:this.$locale.baseText("executionsList.retryWithOriginalWorkflow")}]},executionUIDetails(){return this.executionHelpers.getUIDetails(this.execution)},isActive(){return this.execution.id===this.$route.params.executionId},isRetriable(){return this.executionHelpers.isExecutionRetriable(this.execution)},executionPreviewViewName(){return b.EXECUTION_PREVIEW}},mounted(){this.$emit("mounted",this.execution.id)},methods:{onRetryMenuItemSelect(e){this.$emit("retryExecution",{execution:this.execution,command:e})}}}),Ue="_WorkflowExecutionsCard_16ozu_1",Ne="_active_16ozu_8",He="_executionStatus_16ozu_11",Fe="_executionLink_16ozu_14",Be="_spinner_16ozu_17",Pe="_running_16ozu_17",Ve="_statusLabel_16ozu_24",qe="_success_16ozu_29",Ge="_waiting_16ozu_32",Xe="_error_16ozu_38",je="_unknown_16ozu_44",Ke="_icon_16ozu_61",Je="_icons_16ozu_66",Qe="_retry_16ozu_74",Ye="_manual_16ozu_77",Ze="_showGap_16ozu_85",et={WorkflowExecutionsCard:Ue,active:Ne,executionStatus:He,executionLink:Fe,new:"_new_16ozu_17",spinner:Be,running:Pe,statusLabel:Ve,success:qe,waiting:Ge,error:Xe,unknown:je,icon:Ke,icons:Je,retry:Qe,manual:Ye,showGap:Ze},tt={key:0};function ot(e,t,n,f,i,I){const m=c("n8n-text"),y=c("n8n-spinner"),s=c("ExecutionsTime"),T=c("n8n-action-dropdown"),R=c("font-awesome-icon"),S=c("n8n-tooltip"),M=c("router-link");return r(),$("div",{class:u({"execution-card":!0,[e.$style.WorkflowExecutionsCard]:!0,[e.$style.active]:e.isActive,[e.$style[e.executionUIDetails.name]]:!0,[e.$style.highlight]:e.highlight,[e.$style.showGap]:e.showGap})},[d(M,{class:u(e.$style.executionLink),to:{name:e.executionPreviewViewName,params:{name:e.currentWorkflow,executionId:e.execution.id}},"data-test-execution-status":e.executionUIDetails.name},{default:x(()=>[_("div",{class:u(e.$style.description)},[d(m,{color:"text-dark",bold:!0,size:"medium","data-test-id":"execution-time"},{default:x(()=>[v(h(e.executionUIDetails.startTime),1)]),_:1}),_("div",{class:u(e.$style.executionStatus)},[e.executionUIDetails.name==="running"?(r(),k(y,{key:0,size:"small",class:u([e.$style.spinner,"mr-4xs"])},null,8,["class"])):w("",!0),d(m,{class:u(e.$style.statusLabel),size:"small"},{default:x(()=>[v(h(e.executionUIDetails.label),1)]),_:1},8,["class"]),v(" "+h(" ")+" "),e.executionUIDetails.name==="running"?(r(),k(m,{key:1,color:e.isActive?"text-dark":"text-base",size:"small"},{default:x(()=>[v(h(e.$locale.baseText("executionDetails.runningTimeRunning"))+" ",1),d(s,{"start-time":e.execution.startedAt},null,8,["start-time"])]),_:1},8,["color"])):e.executionUIDetails.runningTime!==""?(r(),k(m,{key:2,color:e.isActive?"text-dark":"text-base",size:"small"},{default:x(()=>{var a;return[v(h(e.$locale.baseText("executionDetails.runningTimeFinished",{interpolate:{time:(a=e.executionUIDetails)==null?void 0:a.runningTime}})),1)]}),_:1},8,["color"])):w("",!0)],2),e.execution.mode==="retry"?(r(),$("div",tt,[d(m,{color:e.isActive?"text-dark":"text-base",size:"small"},{default:x(()=>[v(h(e.$locale.baseText("executionDetails.retry"))+" #"+h(e.execution.retryOf),1)]),_:1},8,["color"])])):w("",!0)],2),_("div",{class:u(e.$style.icons)},[e.isRetriable?(r(),k(T,{key:0,class:u([e.$style.icon,e.$style.retry]),items:e.retryExecutionActions,"activator-icon":"redo","data-test-id":"retry-execution-button",onSelect:e.onRetryMenuItemSelect},null,8,["class","items","onSelect"])):w("",!0),e.execution.mode==="manual"?(r(),k(S,{key:1,placement:"top"},{content:x(()=>[_("span",null,h(e.$locale.baseText("executionsList.test")),1)]),default:x(()=>[e.execution.mode==="manual"?(r(),k(R,{key:0,class:u([e.$style.icon,e.$style.manual]),icon:"flask"},null,8,["class"])):w("",!0)]),_:1})):w("",!0)],2)]),_:1},8,["class","to","data-test-execution-status"])],2)}const nt={$style:et},st=F(ze,[["render",ot],["__cssModules",nt]]),it=O({name:"WorkflowExecutionsSidebar",components:{WorkflowExecutionsCard:st,WorkflowExecutionsInfoAccordion:Oe,ExecutionsFilter:De},props:{executions:{type:Array,required:!0},loading:{type:Boolean,default:!0},loadingMore:{type:Boolean,default:!1},temporaryExecution:{type:Object,default:null}},emits:{retryExecution:null,loadMore:null,refresh:null,filterUpdated:null,reloadExecutions:null,"update:autoRefresh":null},data(){return{filter:{},mountedItems:[],autoScrollDeps:{activeExecutionSet:!1,cardsMounted:!1,scroll:!0}}},computed:{...N(X,H)},watch:{$route(e,t){t.name===b.EXECUTION_PREVIEW&&e.name===b.EXECUTION_HOME&&this.$router.go(-1)},"executionsStore.activeExecution"(e,t){e&&e.id!==(t==null?void 0:t.id)&&(this.autoScrollDeps.activeExecutionSet=!0)},autoScrollDeps:{handler(e){Object.values(e).every(Boolean)&&this.scrollToActiveCard()},deep:!0}},methods:{onItemMounted(e){var t;this.mountedItems.push(e),this.mountedItems.length===this.executions.length&&(this.autoScrollDeps.cardsMounted=!0,this.checkListSize()),((t=this.executionsStore.activeExecution)==null?void 0:t.id)===e&&(this.autoScrollDeps.activeExecutionSet=!0)},loadMore(e=20){if(!this.loading){const t=this.$refs.executionList;if(t){const n=t.offsetHeight-(t.scrollHeight-t.scrollTop);n>-10&&n<10&&this.$emit("loadMore",e)}}},onRetryExecution(e){this.$emit("retryExecution",e)},onRefresh(){this.$emit("refresh")},onFilterChanged(e){this.$emit("filterUpdated",e)},reloadExecutions(){this.$emit("reloadExecutions")},checkListSize(){const e=this.$refs.container,t=this.$refs[`execution-${this.mountedItems[this.mountedItems.length-1]}`];if(e&&(t!=null&&t.length)){const n=t[0].$el,f=Math.ceil(e.clientHeight/n.clientHeight);f>this.executions.length&&this.$emit("loadMore",f-this.executions.length)}},scrollToActiveCard(){var n;const e=this.$refs.executionList,t=this.$refs[`execution-${(n=this.executionsStore.activeExecution)==null?void 0:n.id}`];if(e&&(t!=null&&t.length)&&this.executionsStore.activeExecution){const i=t[0].$el.getBoundingClientRect(),I=200;i.top>e.offsetHeight&&(this.autoScrollDeps.scroll=!1,e.scrollTo({top:i.top-I,behavior:"smooth"}))}}}}),rt="_container_qg8we_1",at="_heading_qg8we_12",ut="_controls_qg8we_19",lt="_executionList_qg8we_31",ct="_infoAccordion_qg8we_49",dt="_noResultsContainer_qg8we_61",ft={container:rt,heading:at,controls:ut,executionList:lt,infoAccordion:ct,noResultsContainer:dt},mt={key:0,class:"mr-l"},pt={key:3,class:"mr-m"};function xt(e,t,n,f,i,I){const m=c("n8n-heading"),y=c("el-checkbox"),s=c("ExecutionsFilter"),T=c("n8n-loading"),R=c("n8n-text"),S=c("WorkflowExecutionsCard"),M=c("WorkflowExecutionsInfoAccordion");return r(),$("div",{ref:"container",class:u(["executions-sidebar",e.$style.container]),"data-test-id":"executions-sidebar"},[_("div",{class:u(e.$style.heading)},[d(m,{tag:"h2",size:"medium",color:"text-dark"},{default:x(()=>[v(h(e.$locale.baseText("generic.executions")),1)]),_:1})],2),_("div",{class:u(e.$style.controls)},[d(y,{modelValue:e.executionsStore.autoRefresh,"onUpdate:modelValue":[t[0]||(t[0]=a=>e.executionsStore.autoRefresh=a),t[1]||(t[1]=a=>e.$emit("update:autoRefresh",a))],"data-test-id":"auto-refresh-checkbox"},{default:x(()=>[v(h(e.$locale.baseText("executionsList.autoRefresh")),1)]),_:1},8,["modelValue"]),d(s,{"popover-placement":"left-start",onFilterChanged:e.onFilterChanged},null,8,["onFilterChanged"])],2),_("div",{ref:"executionList",class:u(e.$style.executionList),"data-test-id":"current-executions-list",onScroll:t[2]||(t[2]=a=>e.loadMore(20))},[e.loading?(r(),$("div",mt,[d(T,{variant:"rect"})])):w("",!0),!e.loading&&e.executions.length===0?(r(),$("div",{key:1,class:u(e.$style.noResultsContainer),"data-test-id":"execution-list-empty"},[d(R,{color:"text-base",size:"medium",align:"center"},{default:x(()=>[v(h(e.$locale.baseText("executionsLandingPage.noResults")),1)]),_:1})],2)):e.temporaryExecution?(r(),k(S,{key:2,ref:`execution-${e.temporaryExecution.id}`,execution:e.temporaryExecution,"data-test-id":`execution-details-${e.temporaryExecution.id}`,"show-gap":!0,onRetryExecution:e.onRetryExecution},null,8,["execution","data-test-id","onRetryExecution"])):w("",!0),d(me,{name:"executions-list"},{default:x(()=>[(r(!0),$(de,null,fe(e.executions,a=>(r(),k(S,{key:a.id,ref_for:!0,ref:`execution-${a.id}`,execution:a,"data-test-id":`execution-details-${a.id}`,onRetryExecution:e.onRetryExecution,onMounted:e.onItemMounted},null,8,["execution","data-test-id","onRetryExecution","onMounted"]))),128))]),_:1}),e.loadingMore?(r(),$("div",pt,[d(T,{variant:"p",rows:1})])):w("",!0)],34),_("div",{class:u(e.$style.infoAccordion)},[d(M,{"initially-expanded":!1})],2)],2)}const ht={$style:ft},wt=F(it,[["render",xt],["__cssModules",ht],["__scopeId","data-v-4ab2abd5"]]),yt=O({name:"WorkflowExecutionsList",components:{WorkflowExecutionsSidebar:wt},async beforeRouteLeave(e,t,n){if(ye(e)===Ee.WORKFLOW){n();return}if(this.uiStore.stateIsDirty){const f=await this.confirm(this.$locale.baseText("generic.unsavedWork.confirmMessage.message"),{title:this.$locale.baseText("generic.unsavedWork.confirmMessage.headline"),type:"warning",confirmButtonText:this.$locale.baseText("generic.unsavedWork.confirmMessage.confirmButtonText"),cancelButtonText:this.$locale.baseText("generic.unsavedWork.confirmMessage.cancelButtonText"),showClose:!0});f===ge?(await this.workflowHelpers.saveCurrentWorkflow({},!1)&&await this.npsSurveyStore.fetchPromptsData(),this.uiStore.stateIsDirty=!1,n()):f===ve&&(this.uiStore.stateIsDirty=!1,n())}else n()},props:{loading:{type:Boolean,default:!1},workflow:{type:Object,required:!0},executions:{type:Array,default:()=>[]},filters:{type:Object,default:()=>({})},execution:{type:Object,default:null},loadingMore:{type:Boolean,default:!1}},emits:["execution:delete","execution:stop","execution:retry","update:auto-refresh","update:filters","load-more","reload"],setup(){const e=Se(),t=G(),n=j({router:t}),{callDebounced:f}=K();return{externalHooks:e,workflowHelpers:n,callDebounced:f,...J(),...ke()}},computed:{...N(Ie,Q,be,_e,$e),temporaryExecution(){return!this.executions.find(t=>{var n;return t.id===((n=this.execution)==null?void 0:n.id)})?this.execution:void 0},hidePreview(){return this.loading||!this.execution&&this.executions.length},filterApplied(){return this.filters.status!=="all"},workflowDataNotLoaded(){return this.workflow.id===Y&&this.workflow.name===""},requestFilter(){return Te({...this.filters,workflowId:this.workflow.id})}},watch:{execution(e){e&&this.$router.push({name:b.EXECUTION_PREVIEW,params:{name:this.workflow.id,executionId:e.id}}).catch(()=>{})}},methods:{async onDeleteCurrentExecution(){var e;this.$emit("execution:delete",(e=this.execution)==null?void 0:e.id)},async onStopExecution(){var e;this.$emit("execution:stop",(e=this.execution)==null?void 0:e.id)},async onRetryExecution(e){const t=e.command==="current-workflow";this.$emit("execution:retry",{id:e.execution.id,loadWorkflow:t})}}}),Et="_container_16o1g_1",gt="_content_16o1g_7",vt={container:Et,content:gt};function kt(e,t,n,f,i,I){const m=c("WorkflowExecutionsSidebar"),y=c("router-view");return r(),$("div",{class:u(e.$style.container)},[d(m,{executions:e.executions,loading:e.loading&&!e.executions.length,"loading-more":e.loadingMore,"temporary-execution":e.temporaryExecution,"onUpdate:autoRefresh":t[0]||(t[0]=s=>e.$emit("update:auto-refresh",s)),onReloadExecutions:t[1]||(t[1]=s=>e.$emit("reload")),onFilterUpdated:t[2]||(t[2]=s=>e.$emit("update:filters",s)),onLoadMore:t[3]||(t[3]=s=>e.$emit("load-more")),onRetryExecution:e.onRetryExecution},null,8,["executions","loading","loading-more","temporary-execution","onRetryExecution"]),e.hidePreview?w("",!0):(r(),$("div",{key:0,class:u(e.$style.content)},[d(y,{name:"executionPreview",execution:e.execution,onDeleteCurrentExecution:e.onDeleteCurrentExecution,onRetryExecution:e.onRetryExecution,onStopExecution:e.onStopExecution},null,8,["execution","onDeleteCurrentExecution","onRetryExecution","onStopExecution"])],2))],2)}const $t={$style:vt},_t=F(yt,[["render",kt],["__cssModules",$t]]),so=O({__name:"WorkflowExecutionsView",setup(e){const t=X(),n=H(),f=Q(),i=Me(),I=We(),m=pe(),y=G(),s=J(),{callDebounced:T}=K(),R=j({router:y}),S=Re(),{filters:M}=ce(t),a=D(!1),L=D(!1),g=D(),E=A(()=>m.params.name||n.workflowId),W=A(()=>m.params.executionId),p=A(()=>[...t.currentExecutionsByWorkflowId[E.value]??[],...t.executionsByWorkflowId[E.value]??[]]),Z=A(()=>p.value.find(o=>o.id===W.value)??z.value),z=D();q(()=>E.value,async()=>{await V()}),q(()=>W.value,async()=>{await B()}),xe(async()=>{await f.loadNodeTypesIfNotLoaded(),await Promise.all([f.loadNodeTypesIfNotLoaded(),V(),t.initialize(E.value)]),await B(),await ee(),document.addEventListener("visibilitychange",P)}),he(()=>{t.reset(),document.removeEventListener("visibilitychange",P)});async function B(){if(W.value)try{z.value=await t.fetchExecution(W.value),t.activeExecution=z.value}catch(o){s.showError(o,i.baseText("nodeView.showError.openExecution.title"))}}function P(){document.visibilityState==="hidden"?t.stopAutoRefreshInterval():t.startAutoRefreshInterval(E.value)}async function ee(){m.name===b.EXECUTION_HOME&&p.value.length>0&&g.value&&await y.push({name:b.EXECUTION_PREVIEW,params:{name:g.value.id,executionId:p.value[0].id}}).catch(()=>{})}async function V(){if(n.workflow.id===Y)try{await n.fetchActiveWorkflows();const o=await n.fetchWorkflow(E.value);await R.initState(o),await S.addNodes(o.nodes,o.connections)}catch(o){s.showError(o,i.baseText("nodeView.showError.openWorkflow.title"))}g.value=n.workflow}async function te(o){o?await t.startAutoRefreshInterval(E.value):t.stopAutoRefreshInterval()}async function U(){if(E.value)try{await t.fetchExecutions({...t.executionsFilters,workflowId:E.value})}catch(o){o.errorCode===Le?s.showMessage({title:i.baseText("executionsList.showError.refreshData.title"),message:o.message,type:"error",duration:3500},!1):s.showError(o,i.baseText("executionsList.showError.refreshData.title"))}}async function oe(o){t.reset(),t.setFilters(o),await t.initialize(E.value)}async function ne(o){try{await t.stopCurrentExecution(o),s.showMessage({title:i.baseText("executionsList.showMessage.stopExecution.title"),message:i.baseText("executionsList.showMessage.stopExecution.message",{interpolate:{activeExecutionId:o}}),type:"success"}),await U()}catch(l){s.showError(l,i.baseText("executionsList.showError.stopExecution.title"))}}async function se(o){a.value=!0;try{const l=p.value.findIndex(le=>le.id===o),C=p.value[l+1]||p.value[l-1]||p.value[0];await t.deleteExecutions({ids:[o]}),g.value&&(p.value.length>0?await y.replace({name:b.EXECUTION_PREVIEW,params:{name:g.value.id,executionId:C.id}}).catch(()=>{}):await y.replace({name:b.EXECUTION_HOME,params:{name:g.value.id}}))}catch(l){a.value=!1,s.showError(l,i.baseText("executionsList.showError.handleDeleteSelected.title"));return}a.value=!1,s.showMessage({title:i.baseText("executionsList.showMessage.handleDeleteSelected.title"),type:"success"})}async function ie(o){var l;s.showMessage({title:i.baseText("executionDetails.runningMessage"),type:"info",duration:2e3}),await re(o),await U(),I.track("User clicked retry execution button",{workflow_id:(l=g.value)==null?void 0:l.id,execution_id:o.id,retry_type:o.loadWorkflow?"current":"original"})}async function re(o){try{await t.retryExecution(o.id,o.loadWorkflow)?s.showMessage({title:i.baseText("executionsList.showMessage.retrySuccessfulTrue.title"),type:"success"}):s.showMessage({title:i.baseText("executionsList.showMessage.retrySuccessfulFalse.title"),type:"error"})}catch(l){s.showError(l,i.baseText("executionsList.showError.retryExecution.title"))}}async function ae(){L.value||await T(ue,{debounceTime:1e3})}async function ue(){var l;if((l=t.executionsFilters.status)!=null&&l.includes("running")||p.value.length>=t.executionsCount)return;L.value=!0;let o;p.value.length!==0&&(o=p.value.slice(-1)[0].id);try{await t.fetchExecutions(t.executionsFilters,o)}catch(C){L.value=!1,s.showError(C,i.baseText("executionsList.showError.loadMore.title"));return}L.value=!1}return(o,l)=>g.value?(r(),k(_t,{key:0,executions:p.value,execution:Z.value,filters:we(M),workflow:g.value,loading:a.value,"loading-more":L.value,"onExecution:stop":ne,"onExecution:delete":se,"onExecution:retry":ie,"onUpdate:filters":oe,"onUpdate:autoRefresh":te,onLoadMore:ae,onReload:U},null,8,["executions","execution","filters","workflow","loading","loading-more"])):w("",!0)}});export{so as default};
2
+ //# sourceMappingURL=WorkflowExecutionsView-D7nlOP1-.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WorkflowExecutionsView-CpAIVxYQ.js","sources":["../../src/components/executions/workflow/WorkflowExecutionsCard.vue","../../src/components/executions/workflow/WorkflowExecutionsSidebar.vue","../../src/components/executions/workflow/WorkflowExecutionsList.vue","../../src/views/WorkflowExecutionsView.vue"],"sourcesContent":["<template>\n\t<div\n\t\t:class=\"{\n\t\t\t['execution-card']: true,\n\t\t\t[$style.WorkflowExecutionsCard]: true,\n\t\t\t[$style.active]: isActive,\n\t\t\t[$style[executionUIDetails.name]]: true,\n\t\t\t[$style.highlight]: highlight,\n\t\t\t[$style.showGap]: showGap,\n\t\t}\"\n\t>\n\t\t<router-link\n\t\t\t:class=\"$style.executionLink\"\n\t\t\t:to=\"{\n\t\t\t\tname: executionPreviewViewName,\n\t\t\t\tparams: { name: currentWorkflow, executionId: execution.id },\n\t\t\t}\"\n\t\t\t:data-test-execution-status=\"executionUIDetails.name\"\n\t\t>\n\t\t\t<div :class=\"$style.description\">\n\t\t\t\t<n8n-text color=\"text-dark\" :bold=\"true\" size=\"medium\" data-test-id=\"execution-time\">\n\t\t\t\t\t{{ executionUIDetails.startTime }}\n\t\t\t\t</n8n-text>\n\t\t\t\t<div :class=\"$style.executionStatus\">\n\t\t\t\t\t<n8n-spinner\n\t\t\t\t\t\tv-if=\"executionUIDetails.name === 'running'\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t:class=\"[$style.spinner, 'mr-4xs']\"\n\t\t\t\t\t/>\n\t\t\t\t\t<n8n-text :class=\"$style.statusLabel\" size=\"small\">{{\n\t\t\t\t\t\texecutionUIDetails.label\n\t\t\t\t\t}}</n8n-text>\n\t\t\t\t\t{{ ' ' }}\n\t\t\t\t\t<n8n-text\n\t\t\t\t\t\tv-if=\"executionUIDetails.name === 'running'\"\n\t\t\t\t\t\t:color=\"isActive ? 'text-dark' : 'text-base'\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ $locale.baseText('executionDetails.runningTimeRunning') }}\n\t\t\t\t\t\t<ExecutionsTime :start-time=\"execution.startedAt\" />\n\t\t\t\t\t</n8n-text>\n\t\t\t\t\t<n8n-text\n\t\t\t\t\t\tv-else-if=\"executionUIDetails.runningTime !== ''\"\n\t\t\t\t\t\t:color=\"isActive ? 'text-dark' : 'text-base'\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t$locale.baseText('executionDetails.runningTimeFinished', {\n\t\t\t\t\t\t\t\tinterpolate: { time: executionUIDetails?.runningTime },\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}}\n\t\t\t\t\t</n8n-text>\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"execution.mode === 'retry'\">\n\t\t\t\t\t<n8n-text :color=\"isActive ? 'text-dark' : 'text-base'\" size=\"small\">\n\t\t\t\t\t\t{{ $locale.baseText('executionDetails.retry') }} #{{ execution.retryOf }}\n\t\t\t\t\t</n8n-text>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div :class=\"$style.icons\">\n\t\t\t\t<n8n-action-dropdown\n\t\t\t\t\tv-if=\"isRetriable\"\n\t\t\t\t\t:class=\"[$style.icon, $style.retry]\"\n\t\t\t\t\t:items=\"retryExecutionActions\"\n\t\t\t\t\tactivator-icon=\"redo\"\n\t\t\t\t\tdata-test-id=\"retry-execution-button\"\n\t\t\t\t\t@select=\"onRetryMenuItemSelect\"\n\t\t\t\t/>\n\t\t\t\t<n8n-tooltip v-if=\"execution.mode === 'manual'\" placement=\"top\">\n\t\t\t\t\t<template #content>\n\t\t\t\t\t\t<span>{{ $locale.baseText('executionsList.test') }}</span>\n\t\t\t\t\t</template>\n\t\t\t\t\t<font-awesome-icon\n\t\t\t\t\t\tv-if=\"execution.mode === 'manual'\"\n\t\t\t\t\t\t:class=\"[$style.icon, $style.manual]\"\n\t\t\t\t\t\ticon=\"flask\"\n\t\t\t\t\t/>\n\t\t\t\t</n8n-tooltip>\n\t\t\t</div>\n\t\t</router-link>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport type { IExecutionUIData } from '@/composables/useExecutionHelpers';\nimport { VIEWS } from '@/constants';\nimport ExecutionsTime from '@/components/executions/ExecutionsTime.vue';\nimport { useExecutionHelpers } from '@/composables/useExecutionHelpers';\nimport type { ExecutionSummary } from 'n8n-workflow';\nimport { mapStores } from 'pinia';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\n\nexport default defineComponent({\n\tname: 'WorkflowExecutionsCard',\n\tcomponents: {\n\t\tExecutionsTime,\n\t},\n\tprops: {\n\t\texecution: {\n\t\t\ttype: Object as () => ExecutionSummary,\n\t\t\trequired: true,\n\t\t},\n\t\thighlight: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tshowGap: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\temits: ['retryExecution', 'mounted'],\n\tsetup() {\n\t\tconst executionHelpers = useExecutionHelpers();\n\n\t\treturn {\n\t\t\texecutionHelpers,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useWorkflowsStore),\n\t\tcurrentWorkflow(): string {\n\t\t\treturn (this.$route.params.name as string) || this.workflowsStore.workflowId;\n\t\t},\n\t\tretryExecutionActions(): object[] {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tid: 'current-workflow',\n\t\t\t\t\tlabel: this.$locale.baseText('executionsList.retryWithCurrentlySavedWorkflow'),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'original-workflow',\n\t\t\t\t\tlabel: this.$locale.baseText('executionsList.retryWithOriginalWorkflow'),\n\t\t\t\t},\n\t\t\t];\n\t\t},\n\t\texecutionUIDetails(): IExecutionUIData {\n\t\t\treturn this.executionHelpers.getUIDetails(this.execution);\n\t\t},\n\t\tisActive(): boolean {\n\t\t\treturn this.execution.id === this.$route.params.executionId;\n\t\t},\n\t\tisRetriable(): boolean {\n\t\t\treturn this.executionHelpers.isExecutionRetriable(this.execution);\n\t\t},\n\t\texecutionPreviewViewName() {\n\t\t\treturn VIEWS.EXECUTION_PREVIEW;\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.$emit('mounted', this.execution.id);\n\t},\n\tmethods: {\n\t\tonRetryMenuItemSelect(action: string): void {\n\t\t\tthis.$emit('retryExecution', { execution: this.execution, command: action });\n\t\t},\n\t},\n});\n</script>\n\n<style module lang=\"scss\">\n@import '@/styles/variables';\n\n.WorkflowExecutionsCard {\n\t--execution-list-item-background: var(--color-foreground-xlight);\n\t--execution-list-item-highlight-background: var(--color-warning-tint-1);\n\n\tdisplay: flex;\n\tflex-direction: column;\n\tpadding-right: var(--spacing-m);\n\n\t&.active {\n\t\tborder-left: var(--spacing-4xs) var(--border-style-base) transparent !important;\n\n\t\t.executionStatus {\n\t\t\tcolor: var(--color-text-dark) !important;\n\t\t}\n\t}\n\n\t&:hover,\n\t&.active {\n\t\t.executionLink {\n\t\t\t--execution-list-item-background: var(--color-foreground-light);\n\t\t}\n\t}\n\n\t&.new,\n\t&.running {\n\t\t.spinner {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t&,\n\t\t& .executionLink {\n\t\t\tborder-left: var(--spacing-4xs) var(--border-style-base) var(--execution-card-border-running);\n\t\t}\n\t\t.statusLabel,\n\t\t.spinner {\n\t\t\tcolor: var(--color-warning);\n\t\t}\n\t}\n\n\t&.success {\n\t\t&,\n\t\t& .executionLink {\n\t\t\tborder-left: var(--spacing-4xs) var(--border-style-base) var(--execution-card-border-success);\n\t\t}\n\t}\n\n\t&.waiting {\n\t\t&,\n\t\t& .executionLink {\n\t\t\tborder-left: var(--spacing-4xs) var(--border-style-base) var(--execution-card-border-waiting);\n\t\t}\n\t\t.statusLabel {\n\t\t\tcolor: var(--color-secondary);\n\t\t}\n\t}\n\n\t&.error {\n\t\t&,\n\t\t& .executionLink {\n\t\t\tborder-left: var(--spacing-4xs) var(--border-style-base) var(--execution-card-border-error);\n\t\t}\n\t\t.statusLabel {\n\t\t\tcolor: var(--color-danger);\n\t\t}\n\t}\n\n\t&.unknown {\n\t\t&,\n\t\t& .executionLink {\n\t\t\tborder-left: var(--spacing-4xs) var(--border-style-base) var(--execution-card-border-unknown);\n\t\t}\n\t}\n}\n\n.executionLink {\n\tbackground: var(--execution-list-item-background);\n\tdisplay: flex;\n\twidth: 100%;\n\talign-items: center;\n\tjustify-content: space-between;\n\tcolor: var(--color-text-base);\n\tfont-size: var(--font-size-xs);\n\tpadding: var(--spacing-xs);\n\tpadding-right: var(--spacing-s);\n\tposition: relative;\n\tleft: calc(\n\t\t-1 * var(--spacing-4xs)\n\t); // Hide link border under card border so it's not visible when not hovered\n\n\t&:active {\n\t\t.icon,\n\t\t.statusLabel {\n\t\t\tcolor: var(--color-text-base);\n\t\t}\n\t}\n}\n\n.icons {\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.icon {\n\tfont-size: var(--font-size-s);\n\n\t&.retry {\n\t\tsvg {\n\t\t\tcolor: var(--color-primary);\n\t\t}\n\t}\n\n\t&.manual {\n\t\tposition: relative;\n\t\ttop: 1px;\n\t}\n\n\t& + & {\n\t\tmargin-left: var(--spacing-2xs);\n\t}\n}\n.showGap {\n\tmargin-bottom: var(--spacing-2xs);\n\t.executionLink {\n\t\tborder-bottom: 1px solid var(--color-foreground-dark);\n\t}\n}\n</style>\n","<template>\n\t<div\n\t\tref=\"container\"\n\t\t:class=\"['executions-sidebar', $style.container]\"\n\t\tdata-test-id=\"executions-sidebar\"\n\t>\n\t\t<div :class=\"$style.heading\">\n\t\t\t<n8n-heading tag=\"h2\" size=\"medium\" color=\"text-dark\">\n\t\t\t\t{{ $locale.baseText('generic.executions') }}\n\t\t\t</n8n-heading>\n\t\t</div>\n\t\t<div :class=\"$style.controls\">\n\t\t\t<el-checkbox\n\t\t\t\tv-model=\"executionsStore.autoRefresh\"\n\t\t\t\tdata-test-id=\"auto-refresh-checkbox\"\n\t\t\t\t@update:model-value=\"$emit('update:autoRefresh', $event)\"\n\t\t\t>\n\t\t\t\t{{ $locale.baseText('executionsList.autoRefresh') }}\n\t\t\t</el-checkbox>\n\t\t\t<ExecutionsFilter popover-placement=\"left-start\" @filter-changed=\"onFilterChanged\" />\n\t\t</div>\n\t\t<div\n\t\t\tref=\"executionList\"\n\t\t\t:class=\"$style.executionList\"\n\t\t\tdata-test-id=\"current-executions-list\"\n\t\t\t@scroll=\"loadMore(20)\"\n\t\t>\n\t\t\t<div v-if=\"loading\" class=\"mr-l\">\n\t\t\t\t<n8n-loading variant=\"rect\" />\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tv-if=\"!loading && executions.length === 0\"\n\t\t\t\t:class=\"$style.noResultsContainer\"\n\t\t\t\tdata-test-id=\"execution-list-empty\"\n\t\t\t>\n\t\t\t\t<n8n-text color=\"text-base\" size=\"medium\" align=\"center\">\n\t\t\t\t\t{{ $locale.baseText('executionsLandingPage.noResults') }}\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\t\t\t<WorkflowExecutionsCard\n\t\t\t\tv-else-if=\"temporaryExecution\"\n\t\t\t\t:ref=\"`execution-${temporaryExecution.id}`\"\n\t\t\t\t:execution=\"temporaryExecution\"\n\t\t\t\t:data-test-id=\"`execution-details-${temporaryExecution.id}`\"\n\t\t\t\t:show-gap=\"true\"\n\t\t\t\t@retry-execution=\"onRetryExecution\"\n\t\t\t/>\n\t\t\t<TransitionGroup name=\"executions-list\">\n\t\t\t\t<WorkflowExecutionsCard\n\t\t\t\t\tv-for=\"execution in executions\"\n\t\t\t\t\t:key=\"execution.id\"\n\t\t\t\t\t:ref=\"`execution-${execution.id}`\"\n\t\t\t\t\t:execution=\"execution\"\n\t\t\t\t\t:data-test-id=\"`execution-details-${execution.id}`\"\n\t\t\t\t\t@retry-execution=\"onRetryExecution\"\n\t\t\t\t\t@mounted=\"onItemMounted\"\n\t\t\t\t/>\n\t\t\t</TransitionGroup>\n\t\t\t<div v-if=\"loadingMore\" class=\"mr-m\">\n\t\t\t\t<n8n-loading variant=\"p\" :rows=\"1\" />\n\t\t\t</div>\n\t\t</div>\n\t\t<div :class=\"$style.infoAccordion\">\n\t\t\t<WorkflowExecutionsInfoAccordion :initially-expanded=\"false\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport WorkflowExecutionsCard from '@/components/executions/workflow/WorkflowExecutionsCard.vue';\nimport WorkflowExecutionsInfoAccordion from '@/components/executions/workflow/WorkflowExecutionsInfoAccordion.vue';\nimport ExecutionsFilter from '@/components/executions/ExecutionsFilter.vue';\nimport { VIEWS } from '@/constants';\nimport type { ExecutionSummary } from 'n8n-workflow';\nimport type { RouteRecord } from 'vue-router';\nimport { defineComponent } from 'vue';\nimport type { PropType } from 'vue';\nimport { mapStores } from 'pinia';\nimport { useExecutionsStore } from '@/stores/executions.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport type { ExecutionFilterType } from '@/Interface';\n\ntype WorkflowExecutionsCardRef = InstanceType<typeof WorkflowExecutionsCard>;\ntype AutoScrollDeps = { activeExecutionSet: boolean; cardsMounted: boolean; scroll: boolean };\n\nexport default defineComponent({\n\tname: 'WorkflowExecutionsSidebar',\n\tcomponents: {\n\t\tWorkflowExecutionsCard,\n\t\tWorkflowExecutionsInfoAccordion,\n\t\tExecutionsFilter,\n\t},\n\tprops: {\n\t\texecutions: {\n\t\t\ttype: Array as PropType<ExecutionSummary[]>,\n\t\t\trequired: true,\n\t\t},\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tloadingMore: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\ttemporaryExecution: {\n\t\t\ttype: Object as PropType<ExecutionSummary>,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\temits: {\n\t\tretryExecution: null,\n\t\tloadMore: null,\n\t\trefresh: null,\n\t\tfilterUpdated: null,\n\t\treloadExecutions: null,\n\t\t'update:autoRefresh': null,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tfilter: {} as ExecutionFilterType,\n\t\t\tmountedItems: [] as string[],\n\t\t\tautoScrollDeps: {\n\t\t\t\tactiveExecutionSet: false,\n\t\t\t\tcardsMounted: false,\n\t\t\t\tscroll: true,\n\t\t\t} as AutoScrollDeps,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useExecutionsStore, useWorkflowsStore),\n\t},\n\twatch: {\n\t\t$route(to: RouteRecord, from: RouteRecord) {\n\t\t\tif (from.name === VIEWS.EXECUTION_PREVIEW && to.name === VIEWS.EXECUTION_HOME) {\n\t\t\t\t// Skip parent route when navigating through executions with back button\n\t\t\t\tthis.$router.go(-1);\n\t\t\t}\n\t\t},\n\t\t'executionsStore.activeExecution'(\n\t\t\tnewValue: ExecutionSummary | null,\n\t\t\toldValue: ExecutionSummary | null,\n\t\t) {\n\t\t\tif (newValue && newValue.id !== oldValue?.id) {\n\t\t\t\tthis.autoScrollDeps.activeExecutionSet = true;\n\t\t\t}\n\t\t},\n\t\tautoScrollDeps: {\n\t\t\thandler(updatedDeps: AutoScrollDeps) {\n\t\t\t\tif (Object.values(updatedDeps).every(Boolean)) {\n\t\t\t\t\tthis.scrollToActiveCard();\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeep: true,\n\t\t},\n\t},\n\tmethods: {\n\t\tonItemMounted(id: string): void {\n\t\t\tthis.mountedItems.push(id);\n\t\t\tif (this.mountedItems.length === this.executions.length) {\n\t\t\t\tthis.autoScrollDeps.cardsMounted = true;\n\t\t\t\tthis.checkListSize();\n\t\t\t}\n\n\t\t\tif (this.executionsStore.activeExecution?.id === id) {\n\t\t\t\tthis.autoScrollDeps.activeExecutionSet = true;\n\t\t\t}\n\t\t},\n\t\tloadMore(limit = 20): void {\n\t\t\tif (!this.loading) {\n\t\t\t\tconst executionsListRef = this.$refs.executionList as HTMLElement | undefined;\n\t\t\t\tif (executionsListRef) {\n\t\t\t\t\tconst diff =\n\t\t\t\t\t\texecutionsListRef.offsetHeight -\n\t\t\t\t\t\t(executionsListRef.scrollHeight - executionsListRef.scrollTop);\n\t\t\t\t\tif (diff > -10 && diff < 10) {\n\t\t\t\t\t\tthis.$emit('loadMore', limit);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tonRetryExecution(payload: object) {\n\t\t\tthis.$emit('retryExecution', payload);\n\t\t},\n\t\tonRefresh(): void {\n\t\t\tthis.$emit('refresh');\n\t\t},\n\t\tonFilterChanged(filter: ExecutionFilterType) {\n\t\t\tthis.$emit('filterUpdated', filter);\n\t\t},\n\t\treloadExecutions(): void {\n\t\t\tthis.$emit('reloadExecutions');\n\t\t},\n\t\tcheckListSize(): void {\n\t\t\tconst sidebarContainerRef = this.$refs.container as HTMLElement | undefined;\n\t\t\tconst currentWorkflowExecutionsCardRefs = this.$refs[\n\t\t\t\t`execution-${this.mountedItems[this.mountedItems.length - 1]}`\n\t\t\t] as WorkflowExecutionsCardRef[] | undefined;\n\n\t\t\t// Find out how many execution card can fit into list\n\t\t\t// and load more if needed\n\t\t\tif (sidebarContainerRef && currentWorkflowExecutionsCardRefs?.length) {\n\t\t\t\tconst cardElement = currentWorkflowExecutionsCardRefs[0].$el as HTMLElement;\n\t\t\t\tconst listCapacity = Math.ceil(sidebarContainerRef.clientHeight / cardElement.clientHeight);\n\n\t\t\t\tif (listCapacity > this.executions.length) {\n\t\t\t\t\tthis.$emit('loadMore', listCapacity - this.executions.length);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tscrollToActiveCard(): void {\n\t\t\tconst executionsListRef = this.$refs.executionList as HTMLElement | undefined;\n\t\t\tconst currentWorkflowExecutionsCardRefs = this.$refs[\n\t\t\t\t`execution-${this.executionsStore.activeExecution?.id}`\n\t\t\t] as WorkflowExecutionsCardRef[] | undefined;\n\n\t\t\tif (\n\t\t\t\texecutionsListRef &&\n\t\t\t\tcurrentWorkflowExecutionsCardRefs?.length &&\n\t\t\t\tthis.executionsStore.activeExecution\n\t\t\t) {\n\t\t\t\tconst cardElement = currentWorkflowExecutionsCardRefs[0].$el as HTMLElement;\n\t\t\t\tconst cardRect = cardElement.getBoundingClientRect();\n\t\t\t\tconst LIST_HEADER_OFFSET = 200;\n\t\t\t\tif (cardRect.top > executionsListRef.offsetHeight) {\n\t\t\t\t\tthis.autoScrollDeps.scroll = false;\n\t\t\t\t\texecutionsListRef.scrollTo({\n\t\t\t\t\t\ttop: cardRect.top - LIST_HEADER_OFFSET,\n\t\t\t\t\t\tbehavior: 'smooth',\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n});\n</script>\n\n<style module lang=\"scss\">\n.container {\n\tflex: 310px 0 0;\n\tbackground-color: var(--color-background-xlight);\n\tborder-right: var(--border-base);\n\tpadding: var(--spacing-l) 0 var(--spacing-l) var(--spacing-l);\n\tz-index: 1;\n\tdisplay: flex;\n\tflex-direction: column;\n\toverflow: hidden;\n}\n\n.heading {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: baseline;\n\tpadding-right: var(--spacing-l);\n}\n\n.controls {\n\tpadding: var(--spacing-s) 0 var(--spacing-xs);\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tpadding-right: var(--spacing-m);\n\n\tbutton {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t}\n}\n\n.executionList {\n\tflex: 1;\n\toverflow: auto;\n\tmargin-bottom: var(--spacing-m);\n\tbackground-color: var(--color-background-xlight) !important;\n\n\t// Scrolling fader\n\t&::before {\n\t\tposition: absolute;\n\t\tdisplay: block;\n\t\twidth: 270px;\n\t\theight: 6px;\n\t\tbackground: linear-gradient(to bottom, rgba(251, 251, 251, 1) 0%, rgba(251, 251, 251, 0) 100%);\n\t\tz-index: 999;\n\t}\n\n\t// Lower first execution card so fader is not visible when not scrolled\n\t& > div:first-child {\n\t\tmargin-top: 3px;\n\t}\n}\n\n.infoAccordion {\n\tposition: absolute;\n\tbottom: 0;\n\tmargin-left: calc(-1 * var(--spacing-l));\n\tborder-top: var(--border-base);\n\n\t& > div {\n\t\twidth: 309px;\n\t\tbackground-color: var(--color-background-light);\n\t\tmargin-top: 0 !important;\n\t}\n}\n\n.noResultsContainer {\n\twidth: 100%;\n\tmargin-top: var(--spacing-2xl);\n\ttext-align: center;\n}\n</style>\n\n<style lang=\"scss\" scoped>\n.executions-sidebar {\n\t:deep(.el-skeleton__item) {\n\t\theight: 60px;\n\t\tborder-radius: 0;\n\t}\n}\n</style>\n","<template>\n\t<div :class=\"$style.container\">\n\t\t<WorkflowExecutionsSidebar\n\t\t\t:executions=\"executions\"\n\t\t\t:loading=\"loading && !executions.length\"\n\t\t\t:loading-more=\"loadingMore\"\n\t\t\t:temporary-execution=\"temporaryExecution\"\n\t\t\t@update:auto-refresh=\"$emit('update:auto-refresh', $event)\"\n\t\t\t@reload-executions=\"$emit('reload')\"\n\t\t\t@filter-updated=\"$emit('update:filters', $event)\"\n\t\t\t@load-more=\"$emit('load-more')\"\n\t\t\t@retry-execution=\"onRetryExecution\"\n\t\t/>\n\t\t<div v-if=\"!hidePreview\" :class=\"$style.content\">\n\t\t\t<router-view\n\t\t\t\tname=\"executionPreview\"\n\t\t\t\t:execution=\"execution\"\n\t\t\t\t@delete-current-execution=\"onDeleteCurrentExecution\"\n\t\t\t\t@retry-execution=\"onRetryExecution\"\n\t\t\t\t@stop-execution=\"onStopExecution\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue';\nimport { defineComponent } from 'vue';\nimport { mapStores } from 'pinia';\nimport { useRouter } from 'vue-router';\nimport WorkflowExecutionsSidebar from '@/components/executions/workflow/WorkflowExecutionsSidebar.vue';\nimport {\n\tMAIN_HEADER_TABS,\n\tMODAL_CANCEL,\n\tMODAL_CONFIRM,\n\tPLACEHOLDER_EMPTY_WORKFLOW_ID,\n\tVIEWS,\n} from '@/constants';\nimport type { ExecutionFilterType, IWorkflowDb } from '@/Interface';\nimport type { ExecutionSummary, IDataObject } from 'n8n-workflow';\nimport { useMessage } from '@/composables/useMessage';\nimport { useToast } from '@/composables/useToast';\nimport { getNodeViewTab } from '@/utils/canvasUtils';\nimport { useWorkflowHelpers } from '@/composables/useWorkflowHelpers';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useSettingsStore } from '@/stores/settings.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useTagsStore } from '@/stores/tags.store';\nimport { executionFilterToQueryFilter } from '@/utils/executionUtils';\nimport { useExternalHooks } from '@/composables/useExternalHooks';\nimport { useDebounce } from '@/composables/useDebounce';\nimport { useNpsSurveyStore } from '@/stores/npsSurvey.store';\n\nexport default defineComponent({\n\tname: 'WorkflowExecutionsList',\n\tcomponents: {\n\t\tWorkflowExecutionsSidebar,\n\t},\n\tasync beforeRouteLeave(to, _, next) {\n\t\tif (getNodeViewTab(to) === MAIN_HEADER_TABS.WORKFLOW) {\n\t\t\tnext();\n\t\t\treturn;\n\t\t}\n\t\tif (this.uiStore.stateIsDirty) {\n\t\t\tconst confirmModal = await this.confirm(\n\t\t\t\tthis.$locale.baseText('generic.unsavedWork.confirmMessage.message'),\n\t\t\t\t{\n\t\t\t\t\ttitle: this.$locale.baseText('generic.unsavedWork.confirmMessage.headline'),\n\t\t\t\t\ttype: 'warning',\n\t\t\t\t\tconfirmButtonText: this.$locale.baseText(\n\t\t\t\t\t\t'generic.unsavedWork.confirmMessage.confirmButtonText',\n\t\t\t\t\t),\n\t\t\t\t\tcancelButtonText: this.$locale.baseText(\n\t\t\t\t\t\t'generic.unsavedWork.confirmMessage.cancelButtonText',\n\t\t\t\t\t),\n\t\t\t\t\tshowClose: true,\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tif (confirmModal === MODAL_CONFIRM) {\n\t\t\t\tconst saved = await this.workflowHelpers.saveCurrentWorkflow({}, false);\n\t\t\t\tif (saved) {\n\t\t\t\t\tawait this.npsSurveyStore.fetchPromptsData();\n\t\t\t\t}\n\t\t\t\tthis.uiStore.stateIsDirty = false;\n\t\t\t\tnext();\n\t\t\t} else if (confirmModal === MODAL_CANCEL) {\n\t\t\t\tthis.uiStore.stateIsDirty = false;\n\t\t\t\tnext();\n\t\t\t}\n\t\t} else {\n\t\t\tnext();\n\t\t}\n\t},\n\tprops: {\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tworkflow: {\n\t\t\ttype: Object as PropType<IWorkflowDb>,\n\t\t\trequired: true,\n\t\t},\n\t\texecutions: {\n\t\t\ttype: Array as PropType<ExecutionSummary[]>,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tfilters: {\n\t\t\ttype: Object as PropType<ExecutionFilterType>,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t\texecution: {\n\t\t\ttype: Object as PropType<ExecutionSummary> | null,\n\t\t\tdefault: null,\n\t\t},\n\t\tloadingMore: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\temits: [\n\t\t'execution:delete',\n\t\t'execution:stop',\n\t\t'execution:retry',\n\t\t'update:auto-refresh',\n\t\t'update:filters',\n\t\t'load-more',\n\t\t'reload',\n\t],\n\tsetup() {\n\t\tconst externalHooks = useExternalHooks();\n\t\tconst router = useRouter();\n\t\tconst workflowHelpers = useWorkflowHelpers({ router });\n\t\tconst { callDebounced } = useDebounce();\n\n\t\treturn {\n\t\t\texternalHooks,\n\t\t\tworkflowHelpers,\n\t\t\tcallDebounced,\n\t\t\t...useToast(),\n\t\t\t...useMessage(),\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useTagsStore, useNodeTypesStore, useSettingsStore, useUIStore, useNpsSurveyStore),\n\t\ttemporaryExecution(): ExecutionSummary | undefined {\n\t\t\tconst isTemporary = !this.executions.find((execution) => execution.id === this.execution?.id);\n\t\t\treturn isTemporary ? this.execution : undefined;\n\t\t},\n\t\thidePreview(): boolean {\n\t\t\treturn this.loading || (!this.execution && this.executions.length);\n\t\t},\n\t\tfilterApplied(): boolean {\n\t\t\treturn this.filters.status !== 'all';\n\t\t},\n\t\tworkflowDataNotLoaded(): boolean {\n\t\t\treturn this.workflow.id === PLACEHOLDER_EMPTY_WORKFLOW_ID && this.workflow.name === '';\n\t\t},\n\t\trequestFilter(): IDataObject {\n\t\t\treturn executionFilterToQueryFilter({\n\t\t\t\t...this.filters,\n\t\t\t\tworkflowId: this.workflow.id,\n\t\t\t});\n\t\t},\n\t},\n\twatch: {\n\t\texecution(value: ExecutionSummary) {\n\t\t\tif (!value) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.$router\n\t\t\t\t.push({\n\t\t\t\t\tname: VIEWS.EXECUTION_PREVIEW,\n\t\t\t\t\tparams: { name: this.workflow.id, executionId: value.id },\n\t\t\t\t})\n\t\t\t\t.catch(() => {});\n\t\t},\n\t},\n\tmethods: {\n\t\tasync onDeleteCurrentExecution(): Promise<void> {\n\t\t\tthis.$emit('execution:delete', this.execution?.id);\n\t\t},\n\t\tasync onStopExecution(): Promise<void> {\n\t\t\tthis.$emit('execution:stop', this.execution?.id);\n\t\t},\n\t\tasync onRetryExecution(payload: { execution: ExecutionSummary; command: string }) {\n\t\t\tconst loadWorkflow = payload.command === 'current-workflow';\n\n\t\t\tthis.$emit('execution:retry', {\n\t\t\t\tid: payload.execution.id,\n\t\t\t\tloadWorkflow,\n\t\t\t});\n\t\t},\n\t},\n});\n</script>\n\n<style module lang=\"scss\">\n.container {\n\tdisplay: flex;\n\theight: 100%;\n\twidth: 100%;\n}\n\n.content {\n\tflex: 1;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue';\nimport WorkflowExecutionsList from '@/components/executions/workflow/WorkflowExecutionsList.vue';\nimport { useExecutionsStore } from '@/stores/executions.store';\nimport { useI18n } from '@/composables/useI18n';\nimport type { ExecutionFilterType, IWorkflowDb } from '@/Interface';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { NO_NETWORK_ERROR_CODE } from '@/utils/apiUtils';\nimport { useToast } from '@/composables/useToast';\nimport { PLACEHOLDER_EMPTY_WORKFLOW_ID, VIEWS } from '@/constants';\nimport { useRoute, useRouter } from 'vue-router';\nimport type { ExecutionSummary } from 'n8n-workflow';\nimport { useDebounce } from '@/composables/useDebounce';\nimport { storeToRefs } from 'pinia';\nimport { useTelemetry } from '@/composables/useTelemetry';\nimport { useWorkflowHelpers } from '@/composables/useWorkflowHelpers';\nimport { useNodeHelpers } from '@/composables/useNodeHelpers';\n\nconst executionsStore = useExecutionsStore();\nconst workflowsStore = useWorkflowsStore();\nconst nodeTypesStore = useNodeTypesStore();\nconst i18n = useI18n();\nconst telemetry = useTelemetry();\nconst route = useRoute();\nconst router = useRouter();\nconst toast = useToast();\nconst { callDebounced } = useDebounce();\nconst workflowHelpers = useWorkflowHelpers({ router });\nconst nodeHelpers = useNodeHelpers();\n\nconst { filters } = storeToRefs(executionsStore);\n\nconst loading = ref(false);\nconst loadingMore = ref(false);\n\nconst workflow = ref<IWorkflowDb | undefined>();\n\nconst workflowId = computed(() => {\n\treturn (route.params.name as string) || workflowsStore.workflowId;\n});\n\nconst executionId = computed(() => route.params.executionId as string);\n\nconst executions = computed(() => [\n\t...(executionsStore.currentExecutionsByWorkflowId[workflowId.value] ?? []),\n\t...(executionsStore.executionsByWorkflowId[workflowId.value] ?? []),\n]);\n\nconst execution = computed(() => {\n\treturn executions.value.find((e) => e.id === executionId.value) ?? currentExecution.value;\n});\n\nconst currentExecution = ref<ExecutionSummary | undefined>();\n\nwatch(\n\t() => workflowId.value,\n\tasync () => {\n\t\tawait fetchWorkflow();\n\t},\n);\n\nwatch(\n\t() => executionId.value,\n\tasync () => {\n\t\tawait fetchExecution();\n\t},\n);\n\nonMounted(async () => {\n\tawait nodeTypesStore.loadNodeTypesIfNotLoaded();\n\tawait Promise.all([\n\t\tnodeTypesStore.loadNodeTypesIfNotLoaded(),\n\t\tfetchWorkflow(),\n\t\texecutionsStore.initialize(workflowId.value),\n\t]);\n\tawait fetchExecution();\n\tawait initializeRoute();\n\tdocument.addEventListener('visibilitychange', onDocumentVisibilityChange);\n});\n\nonBeforeUnmount(() => {\n\texecutionsStore.reset();\n\tdocument.removeEventListener('visibilitychange', onDocumentVisibilityChange);\n});\n\nasync function fetchExecution() {\n\tif (!executionId.value) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\tcurrentExecution.value = (await executionsStore.fetchExecution(\n\t\t\texecutionId.value,\n\t\t)) as ExecutionSummary;\n\t\texecutionsStore.activeExecution = currentExecution.value;\n\t} catch (error) {\n\t\ttoast.showError(error, i18n.baseText('nodeView.showError.openExecution.title'));\n\t}\n}\n\nfunction onDocumentVisibilityChange() {\n\tif (document.visibilityState === 'hidden') {\n\t\texecutionsStore.stopAutoRefreshInterval();\n\t} else {\n\t\tvoid executionsStore.startAutoRefreshInterval(workflowId.value);\n\t}\n}\n\nasync function initializeRoute() {\n\tif (route.name === VIEWS.EXECUTION_HOME && executions.value.length > 0 && workflow.value) {\n\t\tawait router\n\t\t\t.push({\n\t\t\t\tname: VIEWS.EXECUTION_PREVIEW,\n\t\t\t\tparams: { name: workflow.value.id, executionId: executions.value[0].id },\n\t\t\t})\n\t\t\t.catch(() => {});\n\t}\n}\n\nasync function fetchWorkflow() {\n\t// Check if the workflow already has an ID\n\t// In other words: are we coming from the Editor tab or browser loaded the Executions tab directly\n\tif (workflowsStore.workflow.id === PLACEHOLDER_EMPTY_WORKFLOW_ID) {\n\t\ttry {\n\t\t\tawait workflowsStore.fetchActiveWorkflows();\n\t\t\tconst data = await workflowsStore.fetchWorkflow(workflowId.value);\n\t\t\tawait workflowHelpers.initState(data);\n\t\t\tawait nodeHelpers.addNodes(data.nodes, data.connections);\n\t\t} catch (error) {\n\t\t\ttoast.showError(error, i18n.baseText('nodeView.showError.openWorkflow.title'));\n\t\t}\n\t}\n\tworkflow.value = workflowsStore.workflow;\n}\n\nasync function onAutoRefreshToggle(value: boolean) {\n\tif (value) {\n\t\tawait executionsStore.startAutoRefreshInterval(workflowId.value);\n\t} else {\n\t\texecutionsStore.stopAutoRefreshInterval();\n\t}\n}\n\nasync function onRefreshData() {\n\tif (!workflowId.value) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\tawait executionsStore.fetchExecutions({\n\t\t\t...executionsStore.executionsFilters,\n\t\t\tworkflowId: workflowId.value,\n\t\t});\n\t} catch (error) {\n\t\tif (error.errorCode === NO_NETWORK_ERROR_CODE) {\n\t\t\ttoast.showMessage(\n\t\t\t\t{\n\t\t\t\t\ttitle: i18n.baseText('executionsList.showError.refreshData.title'),\n\t\t\t\t\tmessage: error.message,\n\t\t\t\t\ttype: 'error',\n\t\t\t\t\tduration: 3500,\n\t\t\t\t},\n\t\t\t\tfalse,\n\t\t\t);\n\t\t} else {\n\t\t\ttoast.showError(error, i18n.baseText('executionsList.showError.refreshData.title'));\n\t\t}\n\t}\n}\n\nasync function onUpdateFilters(newFilters: ExecutionFilterType) {\n\texecutionsStore.reset();\n\texecutionsStore.setFilters(newFilters);\n\tawait executionsStore.initialize(workflowId.value);\n}\n\nasync function onExecutionStop(id: string) {\n\ttry {\n\t\tawait executionsStore.stopCurrentExecution(id);\n\n\t\ttoast.showMessage({\n\t\t\ttitle: i18n.baseText('executionsList.showMessage.stopExecution.title'),\n\t\t\tmessage: i18n.baseText('executionsList.showMessage.stopExecution.message', {\n\t\t\t\tinterpolate: { activeExecutionId: id },\n\t\t\t}),\n\t\t\ttype: 'success',\n\t\t});\n\n\t\tawait onRefreshData();\n\t} catch (error) {\n\t\ttoast.showError(error, i18n.baseText('executionsList.showError.stopExecution.title'));\n\t}\n}\n\nasync function onExecutionDelete(id: string) {\n\tloading.value = true;\n\ttry {\n\t\tconst executionIndex = executions.value.findIndex((e: ExecutionSummary) => e.id === id);\n\n\t\tconst nextExecution =\n\t\t\texecutions.value[executionIndex + 1] ||\n\t\t\texecutions.value[executionIndex - 1] ||\n\t\t\texecutions.value[0];\n\n\t\tawait executionsStore.deleteExecutions({\n\t\t\tids: [id],\n\t\t});\n\n\t\tif (workflow.value) {\n\t\t\tif (executions.value.length > 0) {\n\t\t\t\tawait router\n\t\t\t\t\t.replace({\n\t\t\t\t\t\tname: VIEWS.EXECUTION_PREVIEW,\n\t\t\t\t\t\tparams: { name: workflow.value.id, executionId: nextExecution.id },\n\t\t\t\t\t})\n\t\t\t\t\t.catch(() => {});\n\t\t\t} else {\n\t\t\t\t// If there are no executions left, show empty state\n\t\t\t\tawait router.replace({\n\t\t\t\t\tname: VIEWS.EXECUTION_HOME,\n\t\t\t\t\tparams: { name: workflow.value.id },\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tloading.value = false;\n\t\ttoast.showError(error, i18n.baseText('executionsList.showError.handleDeleteSelected.title'));\n\t\treturn;\n\t}\n\tloading.value = false;\n\n\ttoast.showMessage({\n\t\ttitle: i18n.baseText('executionsList.showMessage.handleDeleteSelected.title'),\n\t\ttype: 'success',\n\t});\n}\n\nasync function onExecutionRetry(payload: { id: string; loadWorkflow: boolean }) {\n\ttoast.showMessage({\n\t\ttitle: i18n.baseText('executionDetails.runningMessage'),\n\t\ttype: 'info',\n\t\tduration: 2000,\n\t});\n\n\tawait retryExecution(payload);\n\tawait onRefreshData();\n\n\ttelemetry.track('User clicked retry execution button', {\n\t\tworkflow_id: workflow.value?.id,\n\t\texecution_id: payload.id,\n\t\tretry_type: payload.loadWorkflow ? 'current' : 'original',\n\t});\n}\n\nasync function retryExecution(payload: { id: string; loadWorkflow: boolean }) {\n\ttry {\n\t\tconst retrySuccessful = await executionsStore.retryExecution(payload.id, payload.loadWorkflow);\n\n\t\tif (retrySuccessful) {\n\t\t\ttoast.showMessage({\n\t\t\t\ttitle: i18n.baseText('executionsList.showMessage.retrySuccessfulTrue.title'),\n\t\t\t\ttype: 'success',\n\t\t\t});\n\t\t} else {\n\t\t\ttoast.showMessage({\n\t\t\t\ttitle: i18n.baseText('executionsList.showMessage.retrySuccessfulFalse.title'),\n\t\t\t\ttype: 'error',\n\t\t\t});\n\t\t}\n\t} catch (error) {\n\t\ttoast.showError(error, i18n.baseText('executionsList.showError.retryExecution.title'));\n\t}\n}\n\nasync function onLoadMore(): Promise<void> {\n\tif (!loadingMore.value) {\n\t\tawait callDebounced(loadMore, { debounceTime: 1000 });\n\t}\n}\n\nasync function loadMore(): Promise<void> {\n\tif (\n\t\t!!executionsStore.executionsFilters.status?.includes('running') ||\n\t\texecutions.value.length >= executionsStore.executionsCount\n\t) {\n\t\treturn;\n\t}\n\n\tloadingMore.value = true;\n\n\tlet lastId: string | undefined;\n\tif (executions.value.length !== 0) {\n\t\tconst lastItem = executions.value.slice(-1)[0];\n\t\tlastId = lastItem.id;\n\t}\n\n\ttry {\n\t\tawait executionsStore.fetchExecutions(executionsStore.executionsFilters, lastId);\n\t} catch (error) {\n\t\tloadingMore.value = false;\n\t\ttoast.showError(error, i18n.baseText('executionsList.showError.loadMore.title'));\n\t\treturn;\n\t}\n\n\tloadingMore.value = false;\n}\n</script>\n<template>\n\t<WorkflowExecutionsList\n\t\tv-if=\"workflow\"\n\t\t:executions=\"executions\"\n\t\t:execution=\"execution\"\n\t\t:filters=\"filters\"\n\t\t:workflow=\"workflow\"\n\t\t:loading=\"loading\"\n\t\t:loading-more=\"loadingMore\"\n\t\t@execution:stop=\"onExecutionStop\"\n\t\t@execution:delete=\"onExecutionDelete\"\n\t\t@execution:retry=\"onExecutionRetry\"\n\t\t@update:filters=\"onUpdateFilters\"\n\t\t@update:auto-refresh=\"onAutoRefreshToggle\"\n\t\t@load-more=\"onLoadMore\"\n\t\t@reload=\"onRefreshData\"\n\t/>\n</template>\n"],"names":["_sfc_main$3","defineComponent","ExecutionsTime","useExecutionHelpers","mapStores","useWorkflowsStore","VIEWS","action","_resolveComponent","$style","_normalizeClass","executionUIDetails","_ctx","highlight","_createVNode","_component_router_link","executionPreviewViewName","_withCtx","_createElementVNode","_component_n8n_text","_createTextVNode","_toDisplayString","_openBlock","_createBlock","_component_n8n_spinner","_createCommentVNode","execution","_component_ExecutionsTime","_createElementBlock","_hoisted_1","isRetriable","onRetryMenuItemSelect","_component_n8n_tooltip","_sfc_main$2","WorkflowExecutionsCard","WorkflowExecutionsInfoAccordion","ExecutionsFilter","useExecutionsStore","to","from","newValue","oldValue","updatedDeps","id","_a","limit","executionsListRef","diff","payload","filter","sidebarContainerRef","currentWorkflowExecutionsCardRefs","cardElement","listCapacity","cardRect","LIST_HEADER_OFFSET","_hoisted_2","_component_WorkflowExecutionsInfoAccordion","_component_n8n_heading","_component_el_checkbox","_cache","$event","_component_ExecutionsFilter","loadMore","loading","_component_n8n_loading","temporaryExecution","onRetryExecution","_TransitionGroup","_Fragment","_renderList","_component_WorkflowExecutionsCard","onItemMounted","loadingMore","_sfc_main$1","WorkflowExecutionsSidebar","_","next","getNodeViewTab","MAIN_HEADER_TABS","confirmModal","MODAL_CONFIRM","MODAL_CANCEL","externalHooks","useExternalHooks","router","useRouter","workflowHelpers","useWorkflowHelpers","callDebounced","useDebounce","useToast","useMessage","useTagsStore","useNodeTypesStore","useSettingsStore","useUIStore","useNpsSurveyStore","PLACEHOLDER_EMPTY_WORKFLOW_ID","executionFilterToQueryFilter","value","loadWorkflow","$emit","hidePreview","onStopExecution","executionsStore","workflowsStore","nodeTypesStore","i18n","useI18n","telemetry","useTelemetry","route","useRoute","toast","nodeHelpers","useNodeHelpers","filters","storeToRefs","ref","workflow","workflowId","computed","executionId","executions","e","currentExecution","watch","fetchWorkflow","fetchExecution","onMounted","initializeRoute","onDocumentVisibilityChange","onBeforeUnmount","error","data","onAutoRefreshToggle","onRefreshData","NO_NETWORK_ERROR_CODE","onUpdateFilters","newFilters","onExecutionStop","onExecutionDelete","executionIndex","nextExecution","onExecutionRetry","retryExecution","onLoadMore","lastId"],"mappings":"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"}
1
+ {"version":3,"file":"WorkflowExecutionsView-D7nlOP1-.js","sources":["../../src/components/executions/workflow/WorkflowExecutionsCard.vue","../../src/components/executions/workflow/WorkflowExecutionsSidebar.vue","../../src/components/executions/workflow/WorkflowExecutionsList.vue","../../src/views/WorkflowExecutionsView.vue"],"sourcesContent":["<template>\n\t<div\n\t\t:class=\"{\n\t\t\t['execution-card']: true,\n\t\t\t[$style.WorkflowExecutionsCard]: true,\n\t\t\t[$style.active]: isActive,\n\t\t\t[$style[executionUIDetails.name]]: true,\n\t\t\t[$style.highlight]: highlight,\n\t\t\t[$style.showGap]: showGap,\n\t\t}\"\n\t>\n\t\t<router-link\n\t\t\t:class=\"$style.executionLink\"\n\t\t\t:to=\"{\n\t\t\t\tname: executionPreviewViewName,\n\t\t\t\tparams: { name: currentWorkflow, executionId: execution.id },\n\t\t\t}\"\n\t\t\t:data-test-execution-status=\"executionUIDetails.name\"\n\t\t>\n\t\t\t<div :class=\"$style.description\">\n\t\t\t\t<n8n-text color=\"text-dark\" :bold=\"true\" size=\"medium\" data-test-id=\"execution-time\">\n\t\t\t\t\t{{ executionUIDetails.startTime }}\n\t\t\t\t</n8n-text>\n\t\t\t\t<div :class=\"$style.executionStatus\">\n\t\t\t\t\t<n8n-spinner\n\t\t\t\t\t\tv-if=\"executionUIDetails.name === 'running'\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t:class=\"[$style.spinner, 'mr-4xs']\"\n\t\t\t\t\t/>\n\t\t\t\t\t<n8n-text :class=\"$style.statusLabel\" size=\"small\">{{\n\t\t\t\t\t\texecutionUIDetails.label\n\t\t\t\t\t}}</n8n-text>\n\t\t\t\t\t{{ ' ' }}\n\t\t\t\t\t<n8n-text\n\t\t\t\t\t\tv-if=\"executionUIDetails.name === 'running'\"\n\t\t\t\t\t\t:color=\"isActive ? 'text-dark' : 'text-base'\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ $locale.baseText('executionDetails.runningTimeRunning') }}\n\t\t\t\t\t\t<ExecutionsTime :start-time=\"execution.startedAt\" />\n\t\t\t\t\t</n8n-text>\n\t\t\t\t\t<n8n-text\n\t\t\t\t\t\tv-else-if=\"executionUIDetails.runningTime !== ''\"\n\t\t\t\t\t\t:color=\"isActive ? 'text-dark' : 'text-base'\"\n\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t$locale.baseText('executionDetails.runningTimeFinished', {\n\t\t\t\t\t\t\t\tinterpolate: { time: executionUIDetails?.runningTime },\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}}\n\t\t\t\t\t</n8n-text>\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"execution.mode === 'retry'\">\n\t\t\t\t\t<n8n-text :color=\"isActive ? 'text-dark' : 'text-base'\" size=\"small\">\n\t\t\t\t\t\t{{ $locale.baseText('executionDetails.retry') }} #{{ execution.retryOf }}\n\t\t\t\t\t</n8n-text>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div :class=\"$style.icons\">\n\t\t\t\t<n8n-action-dropdown\n\t\t\t\t\tv-if=\"isRetriable\"\n\t\t\t\t\t:class=\"[$style.icon, $style.retry]\"\n\t\t\t\t\t:items=\"retryExecutionActions\"\n\t\t\t\t\tactivator-icon=\"redo\"\n\t\t\t\t\tdata-test-id=\"retry-execution-button\"\n\t\t\t\t\t@select=\"onRetryMenuItemSelect\"\n\t\t\t\t/>\n\t\t\t\t<n8n-tooltip v-if=\"execution.mode === 'manual'\" placement=\"top\">\n\t\t\t\t\t<template #content>\n\t\t\t\t\t\t<span>{{ $locale.baseText('executionsList.test') }}</span>\n\t\t\t\t\t</template>\n\t\t\t\t\t<font-awesome-icon\n\t\t\t\t\t\tv-if=\"execution.mode === 'manual'\"\n\t\t\t\t\t\t:class=\"[$style.icon, $style.manual]\"\n\t\t\t\t\t\ticon=\"flask\"\n\t\t\t\t\t/>\n\t\t\t\t</n8n-tooltip>\n\t\t\t</div>\n\t\t</router-link>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent } from 'vue';\nimport type { IExecutionUIData } from '@/composables/useExecutionHelpers';\nimport { VIEWS } from '@/constants';\nimport ExecutionsTime from '@/components/executions/ExecutionsTime.vue';\nimport { useExecutionHelpers } from '@/composables/useExecutionHelpers';\nimport type { ExecutionSummary } from 'n8n-workflow';\nimport { mapStores } from 'pinia';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\n\nexport default defineComponent({\n\tname: 'WorkflowExecutionsCard',\n\tcomponents: {\n\t\tExecutionsTime,\n\t},\n\tprops: {\n\t\texecution: {\n\t\t\ttype: Object as () => ExecutionSummary,\n\t\t\trequired: true,\n\t\t},\n\t\thighlight: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tshowGap: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\temits: ['retryExecution', 'mounted'],\n\tsetup() {\n\t\tconst executionHelpers = useExecutionHelpers();\n\n\t\treturn {\n\t\t\texecutionHelpers,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useWorkflowsStore),\n\t\tcurrentWorkflow(): string {\n\t\t\treturn (this.$route.params.name as string) || this.workflowsStore.workflowId;\n\t\t},\n\t\tretryExecutionActions(): object[] {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tid: 'current-workflow',\n\t\t\t\t\tlabel: this.$locale.baseText('executionsList.retryWithCurrentlySavedWorkflow'),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: 'original-workflow',\n\t\t\t\t\tlabel: this.$locale.baseText('executionsList.retryWithOriginalWorkflow'),\n\t\t\t\t},\n\t\t\t];\n\t\t},\n\t\texecutionUIDetails(): IExecutionUIData {\n\t\t\treturn this.executionHelpers.getUIDetails(this.execution);\n\t\t},\n\t\tisActive(): boolean {\n\t\t\treturn this.execution.id === this.$route.params.executionId;\n\t\t},\n\t\tisRetriable(): boolean {\n\t\t\treturn this.executionHelpers.isExecutionRetriable(this.execution);\n\t\t},\n\t\texecutionPreviewViewName() {\n\t\t\treturn VIEWS.EXECUTION_PREVIEW;\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.$emit('mounted', this.execution.id);\n\t},\n\tmethods: {\n\t\tonRetryMenuItemSelect(action: string): void {\n\t\t\tthis.$emit('retryExecution', { execution: this.execution, command: action });\n\t\t},\n\t},\n});\n</script>\n\n<style module lang=\"scss\">\n@import '@/styles/variables';\n\n.WorkflowExecutionsCard {\n\t--execution-list-item-background: var(--color-foreground-xlight);\n\t--execution-list-item-highlight-background: var(--color-warning-tint-1);\n\n\tdisplay: flex;\n\tflex-direction: column;\n\tpadding-right: var(--spacing-m);\n\n\t&.active {\n\t\tborder-left: var(--spacing-4xs) var(--border-style-base) transparent !important;\n\n\t\t.executionStatus {\n\t\t\tcolor: var(--color-text-dark) !important;\n\t\t}\n\t}\n\n\t&:hover,\n\t&.active {\n\t\t.executionLink {\n\t\t\t--execution-list-item-background: var(--color-foreground-light);\n\t\t}\n\t}\n\n\t&.new,\n\t&.running {\n\t\t.spinner {\n\t\t\tposition: relative;\n\t\t\ttop: 1px;\n\t\t}\n\t\t&,\n\t\t& .executionLink {\n\t\t\tborder-left: var(--spacing-4xs) var(--border-style-base) var(--execution-card-border-running);\n\t\t}\n\t\t.statusLabel,\n\t\t.spinner {\n\t\t\tcolor: var(--color-warning);\n\t\t}\n\t}\n\n\t&.success {\n\t\t&,\n\t\t& .executionLink {\n\t\t\tborder-left: var(--spacing-4xs) var(--border-style-base) var(--execution-card-border-success);\n\t\t}\n\t}\n\n\t&.waiting {\n\t\t&,\n\t\t& .executionLink {\n\t\t\tborder-left: var(--spacing-4xs) var(--border-style-base) var(--execution-card-border-waiting);\n\t\t}\n\t\t.statusLabel {\n\t\t\tcolor: var(--color-secondary);\n\t\t}\n\t}\n\n\t&.error {\n\t\t&,\n\t\t& .executionLink {\n\t\t\tborder-left: var(--spacing-4xs) var(--border-style-base) var(--execution-card-border-error);\n\t\t}\n\t\t.statusLabel {\n\t\t\tcolor: var(--color-danger);\n\t\t}\n\t}\n\n\t&.unknown {\n\t\t&,\n\t\t& .executionLink {\n\t\t\tborder-left: var(--spacing-4xs) var(--border-style-base) var(--execution-card-border-unknown);\n\t\t}\n\t}\n}\n\n.executionLink {\n\tbackground: var(--execution-list-item-background);\n\tdisplay: flex;\n\twidth: 100%;\n\talign-items: center;\n\tjustify-content: space-between;\n\tcolor: var(--color-text-base);\n\tfont-size: var(--font-size-xs);\n\tpadding: var(--spacing-xs);\n\tpadding-right: var(--spacing-s);\n\tposition: relative;\n\tleft: calc(\n\t\t-1 * var(--spacing-4xs)\n\t); // Hide link border under card border so it's not visible when not hovered\n\n\t&:active {\n\t\t.icon,\n\t\t.statusLabel {\n\t\t\tcolor: var(--color-text-base);\n\t\t}\n\t}\n}\n\n.icons {\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.icon {\n\tfont-size: var(--font-size-s);\n\n\t&.retry {\n\t\tsvg {\n\t\t\tcolor: var(--color-primary);\n\t\t}\n\t}\n\n\t&.manual {\n\t\tposition: relative;\n\t\ttop: 1px;\n\t}\n\n\t& + & {\n\t\tmargin-left: var(--spacing-2xs);\n\t}\n}\n.showGap {\n\tmargin-bottom: var(--spacing-2xs);\n\t.executionLink {\n\t\tborder-bottom: 1px solid var(--color-foreground-dark);\n\t}\n}\n</style>\n","<template>\n\t<div\n\t\tref=\"container\"\n\t\t:class=\"['executions-sidebar', $style.container]\"\n\t\tdata-test-id=\"executions-sidebar\"\n\t>\n\t\t<div :class=\"$style.heading\">\n\t\t\t<n8n-heading tag=\"h2\" size=\"medium\" color=\"text-dark\">\n\t\t\t\t{{ $locale.baseText('generic.executions') }}\n\t\t\t</n8n-heading>\n\t\t</div>\n\t\t<div :class=\"$style.controls\">\n\t\t\t<el-checkbox\n\t\t\t\tv-model=\"executionsStore.autoRefresh\"\n\t\t\t\tdata-test-id=\"auto-refresh-checkbox\"\n\t\t\t\t@update:model-value=\"$emit('update:autoRefresh', $event)\"\n\t\t\t>\n\t\t\t\t{{ $locale.baseText('executionsList.autoRefresh') }}\n\t\t\t</el-checkbox>\n\t\t\t<ExecutionsFilter popover-placement=\"left-start\" @filter-changed=\"onFilterChanged\" />\n\t\t</div>\n\t\t<div\n\t\t\tref=\"executionList\"\n\t\t\t:class=\"$style.executionList\"\n\t\t\tdata-test-id=\"current-executions-list\"\n\t\t\t@scroll=\"loadMore(20)\"\n\t\t>\n\t\t\t<div v-if=\"loading\" class=\"mr-l\">\n\t\t\t\t<n8n-loading variant=\"rect\" />\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tv-if=\"!loading && executions.length === 0\"\n\t\t\t\t:class=\"$style.noResultsContainer\"\n\t\t\t\tdata-test-id=\"execution-list-empty\"\n\t\t\t>\n\t\t\t\t<n8n-text color=\"text-base\" size=\"medium\" align=\"center\">\n\t\t\t\t\t{{ $locale.baseText('executionsLandingPage.noResults') }}\n\t\t\t\t</n8n-text>\n\t\t\t</div>\n\t\t\t<WorkflowExecutionsCard\n\t\t\t\tv-else-if=\"temporaryExecution\"\n\t\t\t\t:ref=\"`execution-${temporaryExecution.id}`\"\n\t\t\t\t:execution=\"temporaryExecution\"\n\t\t\t\t:data-test-id=\"`execution-details-${temporaryExecution.id}`\"\n\t\t\t\t:show-gap=\"true\"\n\t\t\t\t@retry-execution=\"onRetryExecution\"\n\t\t\t/>\n\t\t\t<TransitionGroup name=\"executions-list\">\n\t\t\t\t<WorkflowExecutionsCard\n\t\t\t\t\tv-for=\"execution in executions\"\n\t\t\t\t\t:key=\"execution.id\"\n\t\t\t\t\t:ref=\"`execution-${execution.id}`\"\n\t\t\t\t\t:execution=\"execution\"\n\t\t\t\t\t:data-test-id=\"`execution-details-${execution.id}`\"\n\t\t\t\t\t@retry-execution=\"onRetryExecution\"\n\t\t\t\t\t@mounted=\"onItemMounted\"\n\t\t\t\t/>\n\t\t\t</TransitionGroup>\n\t\t\t<div v-if=\"loadingMore\" class=\"mr-m\">\n\t\t\t\t<n8n-loading variant=\"p\" :rows=\"1\" />\n\t\t\t</div>\n\t\t</div>\n\t\t<div :class=\"$style.infoAccordion\">\n\t\t\t<WorkflowExecutionsInfoAccordion :initially-expanded=\"false\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport WorkflowExecutionsCard from '@/components/executions/workflow/WorkflowExecutionsCard.vue';\nimport WorkflowExecutionsInfoAccordion from '@/components/executions/workflow/WorkflowExecutionsInfoAccordion.vue';\nimport ExecutionsFilter from '@/components/executions/ExecutionsFilter.vue';\nimport { VIEWS } from '@/constants';\nimport type { ExecutionSummary } from 'n8n-workflow';\nimport type { RouteRecord } from 'vue-router';\nimport { defineComponent } from 'vue';\nimport type { PropType } from 'vue';\nimport { mapStores } from 'pinia';\nimport { useExecutionsStore } from '@/stores/executions.store';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport type { ExecutionFilterType } from '@/Interface';\n\ntype WorkflowExecutionsCardRef = InstanceType<typeof WorkflowExecutionsCard>;\ntype AutoScrollDeps = { activeExecutionSet: boolean; cardsMounted: boolean; scroll: boolean };\n\nexport default defineComponent({\n\tname: 'WorkflowExecutionsSidebar',\n\tcomponents: {\n\t\tWorkflowExecutionsCard,\n\t\tWorkflowExecutionsInfoAccordion,\n\t\tExecutionsFilter,\n\t},\n\tprops: {\n\t\texecutions: {\n\t\t\ttype: Array as PropType<ExecutionSummary[]>,\n\t\t\trequired: true,\n\t\t},\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tloadingMore: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\ttemporaryExecution: {\n\t\t\ttype: Object as PropType<ExecutionSummary>,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\temits: {\n\t\tretryExecution: null,\n\t\tloadMore: null,\n\t\trefresh: null,\n\t\tfilterUpdated: null,\n\t\treloadExecutions: null,\n\t\t'update:autoRefresh': null,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tfilter: {} as ExecutionFilterType,\n\t\t\tmountedItems: [] as string[],\n\t\t\tautoScrollDeps: {\n\t\t\t\tactiveExecutionSet: false,\n\t\t\t\tcardsMounted: false,\n\t\t\t\tscroll: true,\n\t\t\t} as AutoScrollDeps,\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useExecutionsStore, useWorkflowsStore),\n\t},\n\twatch: {\n\t\t$route(to: RouteRecord, from: RouteRecord) {\n\t\t\tif (from.name === VIEWS.EXECUTION_PREVIEW && to.name === VIEWS.EXECUTION_HOME) {\n\t\t\t\t// Skip parent route when navigating through executions with back button\n\t\t\t\tthis.$router.go(-1);\n\t\t\t}\n\t\t},\n\t\t'executionsStore.activeExecution'(\n\t\t\tnewValue: ExecutionSummary | null,\n\t\t\toldValue: ExecutionSummary | null,\n\t\t) {\n\t\t\tif (newValue && newValue.id !== oldValue?.id) {\n\t\t\t\tthis.autoScrollDeps.activeExecutionSet = true;\n\t\t\t}\n\t\t},\n\t\tautoScrollDeps: {\n\t\t\thandler(updatedDeps: AutoScrollDeps) {\n\t\t\t\tif (Object.values(updatedDeps).every(Boolean)) {\n\t\t\t\t\tthis.scrollToActiveCard();\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeep: true,\n\t\t},\n\t},\n\tmethods: {\n\t\tonItemMounted(id: string): void {\n\t\t\tthis.mountedItems.push(id);\n\t\t\tif (this.mountedItems.length === this.executions.length) {\n\t\t\t\tthis.autoScrollDeps.cardsMounted = true;\n\t\t\t\tthis.checkListSize();\n\t\t\t}\n\n\t\t\tif (this.executionsStore.activeExecution?.id === id) {\n\t\t\t\tthis.autoScrollDeps.activeExecutionSet = true;\n\t\t\t}\n\t\t},\n\t\tloadMore(limit = 20): void {\n\t\t\tif (!this.loading) {\n\t\t\t\tconst executionsListRef = this.$refs.executionList as HTMLElement | undefined;\n\t\t\t\tif (executionsListRef) {\n\t\t\t\t\tconst diff =\n\t\t\t\t\t\texecutionsListRef.offsetHeight -\n\t\t\t\t\t\t(executionsListRef.scrollHeight - executionsListRef.scrollTop);\n\t\t\t\t\tif (diff > -10 && diff < 10) {\n\t\t\t\t\t\tthis.$emit('loadMore', limit);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tonRetryExecution(payload: object) {\n\t\t\tthis.$emit('retryExecution', payload);\n\t\t},\n\t\tonRefresh(): void {\n\t\t\tthis.$emit('refresh');\n\t\t},\n\t\tonFilterChanged(filter: ExecutionFilterType) {\n\t\t\tthis.$emit('filterUpdated', filter);\n\t\t},\n\t\treloadExecutions(): void {\n\t\t\tthis.$emit('reloadExecutions');\n\t\t},\n\t\tcheckListSize(): void {\n\t\t\tconst sidebarContainerRef = this.$refs.container as HTMLElement | undefined;\n\t\t\tconst currentWorkflowExecutionsCardRefs = this.$refs[\n\t\t\t\t`execution-${this.mountedItems[this.mountedItems.length - 1]}`\n\t\t\t] as WorkflowExecutionsCardRef[] | undefined;\n\n\t\t\t// Find out how many execution card can fit into list\n\t\t\t// and load more if needed\n\t\t\tif (sidebarContainerRef && currentWorkflowExecutionsCardRefs?.length) {\n\t\t\t\tconst cardElement = currentWorkflowExecutionsCardRefs[0].$el as HTMLElement;\n\t\t\t\tconst listCapacity = Math.ceil(sidebarContainerRef.clientHeight / cardElement.clientHeight);\n\n\t\t\t\tif (listCapacity > this.executions.length) {\n\t\t\t\t\tthis.$emit('loadMore', listCapacity - this.executions.length);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tscrollToActiveCard(): void {\n\t\t\tconst executionsListRef = this.$refs.executionList as HTMLElement | undefined;\n\t\t\tconst currentWorkflowExecutionsCardRefs = this.$refs[\n\t\t\t\t`execution-${this.executionsStore.activeExecution?.id}`\n\t\t\t] as WorkflowExecutionsCardRef[] | undefined;\n\n\t\t\tif (\n\t\t\t\texecutionsListRef &&\n\t\t\t\tcurrentWorkflowExecutionsCardRefs?.length &&\n\t\t\t\tthis.executionsStore.activeExecution\n\t\t\t) {\n\t\t\t\tconst cardElement = currentWorkflowExecutionsCardRefs[0].$el as HTMLElement;\n\t\t\t\tconst cardRect = cardElement.getBoundingClientRect();\n\t\t\t\tconst LIST_HEADER_OFFSET = 200;\n\t\t\t\tif (cardRect.top > executionsListRef.offsetHeight) {\n\t\t\t\t\tthis.autoScrollDeps.scroll = false;\n\t\t\t\t\texecutionsListRef.scrollTo({\n\t\t\t\t\t\ttop: cardRect.top - LIST_HEADER_OFFSET,\n\t\t\t\t\t\tbehavior: 'smooth',\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n});\n</script>\n\n<style module lang=\"scss\">\n.container {\n\tflex: 310px 0 0;\n\tbackground-color: var(--color-background-xlight);\n\tborder-right: var(--border-base);\n\tpadding: var(--spacing-l) 0 var(--spacing-l) var(--spacing-l);\n\tz-index: 1;\n\tdisplay: flex;\n\tflex-direction: column;\n\toverflow: hidden;\n}\n\n.heading {\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: baseline;\n\tpadding-right: var(--spacing-l);\n}\n\n.controls {\n\tpadding: var(--spacing-s) 0 var(--spacing-xs);\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tpadding-right: var(--spacing-m);\n\n\tbutton {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t}\n}\n\n.executionList {\n\tflex: 1;\n\toverflow: auto;\n\tmargin-bottom: var(--spacing-m);\n\tbackground-color: var(--color-background-xlight) !important;\n\n\t// Scrolling fader\n\t&::before {\n\t\tposition: absolute;\n\t\tdisplay: block;\n\t\twidth: 270px;\n\t\theight: 6px;\n\t\tbackground: linear-gradient(to bottom, rgba(251, 251, 251, 1) 0%, rgba(251, 251, 251, 0) 100%);\n\t\tz-index: 999;\n\t}\n\n\t// Lower first execution card so fader is not visible when not scrolled\n\t& > div:first-child {\n\t\tmargin-top: 3px;\n\t}\n}\n\n.infoAccordion {\n\tposition: absolute;\n\tbottom: 0;\n\tmargin-left: calc(-1 * var(--spacing-l));\n\tborder-top: var(--border-base);\n\n\t& > div {\n\t\twidth: 309px;\n\t\tbackground-color: var(--color-background-light);\n\t\tmargin-top: 0 !important;\n\t}\n}\n\n.noResultsContainer {\n\twidth: 100%;\n\tmargin-top: var(--spacing-2xl);\n\ttext-align: center;\n}\n</style>\n\n<style lang=\"scss\" scoped>\n.executions-sidebar {\n\t:deep(.el-skeleton__item) {\n\t\theight: 60px;\n\t\tborder-radius: 0;\n\t}\n}\n</style>\n","<template>\n\t<div :class=\"$style.container\">\n\t\t<WorkflowExecutionsSidebar\n\t\t\t:executions=\"executions\"\n\t\t\t:loading=\"loading && !executions.length\"\n\t\t\t:loading-more=\"loadingMore\"\n\t\t\t:temporary-execution=\"temporaryExecution\"\n\t\t\t@update:auto-refresh=\"$emit('update:auto-refresh', $event)\"\n\t\t\t@reload-executions=\"$emit('reload')\"\n\t\t\t@filter-updated=\"$emit('update:filters', $event)\"\n\t\t\t@load-more=\"$emit('load-more')\"\n\t\t\t@retry-execution=\"onRetryExecution\"\n\t\t/>\n\t\t<div v-if=\"!hidePreview\" :class=\"$style.content\">\n\t\t\t<router-view\n\t\t\t\tname=\"executionPreview\"\n\t\t\t\t:execution=\"execution\"\n\t\t\t\t@delete-current-execution=\"onDeleteCurrentExecution\"\n\t\t\t\t@retry-execution=\"onRetryExecution\"\n\t\t\t\t@stop-execution=\"onStopExecution\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</template>\n\n<script lang=\"ts\">\nimport type { PropType } from 'vue';\nimport { defineComponent } from 'vue';\nimport { mapStores } from 'pinia';\nimport { useRouter } from 'vue-router';\nimport WorkflowExecutionsSidebar from '@/components/executions/workflow/WorkflowExecutionsSidebar.vue';\nimport {\n\tMAIN_HEADER_TABS,\n\tMODAL_CANCEL,\n\tMODAL_CONFIRM,\n\tPLACEHOLDER_EMPTY_WORKFLOW_ID,\n\tVIEWS,\n} from '@/constants';\nimport type { ExecutionFilterType, IWorkflowDb } from '@/Interface';\nimport type { ExecutionSummary, IDataObject } from 'n8n-workflow';\nimport { useMessage } from '@/composables/useMessage';\nimport { useToast } from '@/composables/useToast';\nimport { getNodeViewTab } from '@/utils/canvasUtils';\nimport { useWorkflowHelpers } from '@/composables/useWorkflowHelpers';\nimport { useUIStore } from '@/stores/ui.store';\nimport { useSettingsStore } from '@/stores/settings.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { useTagsStore } from '@/stores/tags.store';\nimport { executionFilterToQueryFilter } from '@/utils/executionUtils';\nimport { useExternalHooks } from '@/composables/useExternalHooks';\nimport { useDebounce } from '@/composables/useDebounce';\nimport { useNpsSurveyStore } from '@/stores/npsSurvey.store';\n\nexport default defineComponent({\n\tname: 'WorkflowExecutionsList',\n\tcomponents: {\n\t\tWorkflowExecutionsSidebar,\n\t},\n\tasync beforeRouteLeave(to, _, next) {\n\t\tif (getNodeViewTab(to) === MAIN_HEADER_TABS.WORKFLOW) {\n\t\t\tnext();\n\t\t\treturn;\n\t\t}\n\t\tif (this.uiStore.stateIsDirty) {\n\t\t\tconst confirmModal = await this.confirm(\n\t\t\t\tthis.$locale.baseText('generic.unsavedWork.confirmMessage.message'),\n\t\t\t\t{\n\t\t\t\t\ttitle: this.$locale.baseText('generic.unsavedWork.confirmMessage.headline'),\n\t\t\t\t\ttype: 'warning',\n\t\t\t\t\tconfirmButtonText: this.$locale.baseText(\n\t\t\t\t\t\t'generic.unsavedWork.confirmMessage.confirmButtonText',\n\t\t\t\t\t),\n\t\t\t\t\tcancelButtonText: this.$locale.baseText(\n\t\t\t\t\t\t'generic.unsavedWork.confirmMessage.cancelButtonText',\n\t\t\t\t\t),\n\t\t\t\t\tshowClose: true,\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tif (confirmModal === MODAL_CONFIRM) {\n\t\t\t\tconst saved = await this.workflowHelpers.saveCurrentWorkflow({}, false);\n\t\t\t\tif (saved) {\n\t\t\t\t\tawait this.npsSurveyStore.fetchPromptsData();\n\t\t\t\t}\n\t\t\t\tthis.uiStore.stateIsDirty = false;\n\t\t\t\tnext();\n\t\t\t} else if (confirmModal === MODAL_CANCEL) {\n\t\t\t\tthis.uiStore.stateIsDirty = false;\n\t\t\t\tnext();\n\t\t\t}\n\t\t} else {\n\t\t\tnext();\n\t\t}\n\t},\n\tprops: {\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\tworkflow: {\n\t\t\ttype: Object as PropType<IWorkflowDb>,\n\t\t\trequired: true,\n\t\t},\n\t\texecutions: {\n\t\t\ttype: Array as PropType<ExecutionSummary[]>,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tfilters: {\n\t\t\ttype: Object as PropType<ExecutionFilterType>,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t\texecution: {\n\t\t\ttype: Object as PropType<ExecutionSummary> | null,\n\t\t\tdefault: null,\n\t\t},\n\t\tloadingMore: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\temits: [\n\t\t'execution:delete',\n\t\t'execution:stop',\n\t\t'execution:retry',\n\t\t'update:auto-refresh',\n\t\t'update:filters',\n\t\t'load-more',\n\t\t'reload',\n\t],\n\tsetup() {\n\t\tconst externalHooks = useExternalHooks();\n\t\tconst router = useRouter();\n\t\tconst workflowHelpers = useWorkflowHelpers({ router });\n\t\tconst { callDebounced } = useDebounce();\n\n\t\treturn {\n\t\t\texternalHooks,\n\t\t\tworkflowHelpers,\n\t\t\tcallDebounced,\n\t\t\t...useToast(),\n\t\t\t...useMessage(),\n\t\t};\n\t},\n\tcomputed: {\n\t\t...mapStores(useTagsStore, useNodeTypesStore, useSettingsStore, useUIStore, useNpsSurveyStore),\n\t\ttemporaryExecution(): ExecutionSummary | undefined {\n\t\t\tconst isTemporary = !this.executions.find((execution) => execution.id === this.execution?.id);\n\t\t\treturn isTemporary ? this.execution : undefined;\n\t\t},\n\t\thidePreview(): boolean {\n\t\t\treturn this.loading || (!this.execution && this.executions.length);\n\t\t},\n\t\tfilterApplied(): boolean {\n\t\t\treturn this.filters.status !== 'all';\n\t\t},\n\t\tworkflowDataNotLoaded(): boolean {\n\t\t\treturn this.workflow.id === PLACEHOLDER_EMPTY_WORKFLOW_ID && this.workflow.name === '';\n\t\t},\n\t\trequestFilter(): IDataObject {\n\t\t\treturn executionFilterToQueryFilter({\n\t\t\t\t...this.filters,\n\t\t\t\tworkflowId: this.workflow.id,\n\t\t\t});\n\t\t},\n\t},\n\twatch: {\n\t\texecution(value: ExecutionSummary) {\n\t\t\tif (!value) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.$router\n\t\t\t\t.push({\n\t\t\t\t\tname: VIEWS.EXECUTION_PREVIEW,\n\t\t\t\t\tparams: { name: this.workflow.id, executionId: value.id },\n\t\t\t\t})\n\t\t\t\t.catch(() => {});\n\t\t},\n\t},\n\tmethods: {\n\t\tasync onDeleteCurrentExecution(): Promise<void> {\n\t\t\tthis.$emit('execution:delete', this.execution?.id);\n\t\t},\n\t\tasync onStopExecution(): Promise<void> {\n\t\t\tthis.$emit('execution:stop', this.execution?.id);\n\t\t},\n\t\tasync onRetryExecution(payload: { execution: ExecutionSummary; command: string }) {\n\t\t\tconst loadWorkflow = payload.command === 'current-workflow';\n\n\t\t\tthis.$emit('execution:retry', {\n\t\t\t\tid: payload.execution.id,\n\t\t\t\tloadWorkflow,\n\t\t\t});\n\t\t},\n\t},\n});\n</script>\n\n<style module lang=\"scss\">\n.container {\n\tdisplay: flex;\n\theight: 100%;\n\twidth: 100%;\n}\n\n.content {\n\tflex: 1;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue';\nimport WorkflowExecutionsList from '@/components/executions/workflow/WorkflowExecutionsList.vue';\nimport { useExecutionsStore } from '@/stores/executions.store';\nimport { useI18n } from '@/composables/useI18n';\nimport type { ExecutionFilterType, IWorkflowDb } from '@/Interface';\nimport { useWorkflowsStore } from '@/stores/workflows.store';\nimport { useNodeTypesStore } from '@/stores/nodeTypes.store';\nimport { NO_NETWORK_ERROR_CODE } from '@/utils/apiUtils';\nimport { useToast } from '@/composables/useToast';\nimport { PLACEHOLDER_EMPTY_WORKFLOW_ID, VIEWS } from '@/constants';\nimport { useRoute, useRouter } from 'vue-router';\nimport type { ExecutionSummary } from 'n8n-workflow';\nimport { useDebounce } from '@/composables/useDebounce';\nimport { storeToRefs } from 'pinia';\nimport { useTelemetry } from '@/composables/useTelemetry';\nimport { useWorkflowHelpers } from '@/composables/useWorkflowHelpers';\nimport { useNodeHelpers } from '@/composables/useNodeHelpers';\n\nconst executionsStore = useExecutionsStore();\nconst workflowsStore = useWorkflowsStore();\nconst nodeTypesStore = useNodeTypesStore();\nconst i18n = useI18n();\nconst telemetry = useTelemetry();\nconst route = useRoute();\nconst router = useRouter();\nconst toast = useToast();\nconst { callDebounced } = useDebounce();\nconst workflowHelpers = useWorkflowHelpers({ router });\nconst nodeHelpers = useNodeHelpers();\n\nconst { filters } = storeToRefs(executionsStore);\n\nconst loading = ref(false);\nconst loadingMore = ref(false);\n\nconst workflow = ref<IWorkflowDb | undefined>();\n\nconst workflowId = computed(() => {\n\treturn (route.params.name as string) || workflowsStore.workflowId;\n});\n\nconst executionId = computed(() => route.params.executionId as string);\n\nconst executions = computed(() => [\n\t...(executionsStore.currentExecutionsByWorkflowId[workflowId.value] ?? []),\n\t...(executionsStore.executionsByWorkflowId[workflowId.value] ?? []),\n]);\n\nconst execution = computed(() => {\n\treturn executions.value.find((e) => e.id === executionId.value) ?? currentExecution.value;\n});\n\nconst currentExecution = ref<ExecutionSummary | undefined>();\n\nwatch(\n\t() => workflowId.value,\n\tasync () => {\n\t\tawait fetchWorkflow();\n\t},\n);\n\nwatch(\n\t() => executionId.value,\n\tasync () => {\n\t\tawait fetchExecution();\n\t},\n);\n\nonMounted(async () => {\n\tawait nodeTypesStore.loadNodeTypesIfNotLoaded();\n\tawait Promise.all([\n\t\tnodeTypesStore.loadNodeTypesIfNotLoaded(),\n\t\tfetchWorkflow(),\n\t\texecutionsStore.initialize(workflowId.value),\n\t]);\n\tawait fetchExecution();\n\tawait initializeRoute();\n\tdocument.addEventListener('visibilitychange', onDocumentVisibilityChange);\n});\n\nonBeforeUnmount(() => {\n\texecutionsStore.reset();\n\tdocument.removeEventListener('visibilitychange', onDocumentVisibilityChange);\n});\n\nasync function fetchExecution() {\n\tif (!executionId.value) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\tcurrentExecution.value = (await executionsStore.fetchExecution(\n\t\t\texecutionId.value,\n\t\t)) as ExecutionSummary;\n\t\texecutionsStore.activeExecution = currentExecution.value;\n\t} catch (error) {\n\t\ttoast.showError(error, i18n.baseText('nodeView.showError.openExecution.title'));\n\t}\n}\n\nfunction onDocumentVisibilityChange() {\n\tif (document.visibilityState === 'hidden') {\n\t\texecutionsStore.stopAutoRefreshInterval();\n\t} else {\n\t\tvoid executionsStore.startAutoRefreshInterval(workflowId.value);\n\t}\n}\n\nasync function initializeRoute() {\n\tif (route.name === VIEWS.EXECUTION_HOME && executions.value.length > 0 && workflow.value) {\n\t\tawait router\n\t\t\t.push({\n\t\t\t\tname: VIEWS.EXECUTION_PREVIEW,\n\t\t\t\tparams: { name: workflow.value.id, executionId: executions.value[0].id },\n\t\t\t})\n\t\t\t.catch(() => {});\n\t}\n}\n\nasync function fetchWorkflow() {\n\t// Check if the workflow already has an ID\n\t// In other words: are we coming from the Editor tab or browser loaded the Executions tab directly\n\tif (workflowsStore.workflow.id === PLACEHOLDER_EMPTY_WORKFLOW_ID) {\n\t\ttry {\n\t\t\tawait workflowsStore.fetchActiveWorkflows();\n\t\t\tconst data = await workflowsStore.fetchWorkflow(workflowId.value);\n\t\t\tawait workflowHelpers.initState(data);\n\t\t\tawait nodeHelpers.addNodes(data.nodes, data.connections);\n\t\t} catch (error) {\n\t\t\ttoast.showError(error, i18n.baseText('nodeView.showError.openWorkflow.title'));\n\t\t}\n\t}\n\tworkflow.value = workflowsStore.workflow;\n}\n\nasync function onAutoRefreshToggle(value: boolean) {\n\tif (value) {\n\t\tawait executionsStore.startAutoRefreshInterval(workflowId.value);\n\t} else {\n\t\texecutionsStore.stopAutoRefreshInterval();\n\t}\n}\n\nasync function onRefreshData() {\n\tif (!workflowId.value) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\tawait executionsStore.fetchExecutions({\n\t\t\t...executionsStore.executionsFilters,\n\t\t\tworkflowId: workflowId.value,\n\t\t});\n\t} catch (error) {\n\t\tif (error.errorCode === NO_NETWORK_ERROR_CODE) {\n\t\t\ttoast.showMessage(\n\t\t\t\t{\n\t\t\t\t\ttitle: i18n.baseText('executionsList.showError.refreshData.title'),\n\t\t\t\t\tmessage: error.message,\n\t\t\t\t\ttype: 'error',\n\t\t\t\t\tduration: 3500,\n\t\t\t\t},\n\t\t\t\tfalse,\n\t\t\t);\n\t\t} else {\n\t\t\ttoast.showError(error, i18n.baseText('executionsList.showError.refreshData.title'));\n\t\t}\n\t}\n}\n\nasync function onUpdateFilters(newFilters: ExecutionFilterType) {\n\texecutionsStore.reset();\n\texecutionsStore.setFilters(newFilters);\n\tawait executionsStore.initialize(workflowId.value);\n}\n\nasync function onExecutionStop(id: string) {\n\ttry {\n\t\tawait executionsStore.stopCurrentExecution(id);\n\n\t\ttoast.showMessage({\n\t\t\ttitle: i18n.baseText('executionsList.showMessage.stopExecution.title'),\n\t\t\tmessage: i18n.baseText('executionsList.showMessage.stopExecution.message', {\n\t\t\t\tinterpolate: { activeExecutionId: id },\n\t\t\t}),\n\t\t\ttype: 'success',\n\t\t});\n\n\t\tawait onRefreshData();\n\t} catch (error) {\n\t\ttoast.showError(error, i18n.baseText('executionsList.showError.stopExecution.title'));\n\t}\n}\n\nasync function onExecutionDelete(id: string) {\n\tloading.value = true;\n\ttry {\n\t\tconst executionIndex = executions.value.findIndex((e: ExecutionSummary) => e.id === id);\n\n\t\tconst nextExecution =\n\t\t\texecutions.value[executionIndex + 1] ||\n\t\t\texecutions.value[executionIndex - 1] ||\n\t\t\texecutions.value[0];\n\n\t\tawait executionsStore.deleteExecutions({\n\t\t\tids: [id],\n\t\t});\n\n\t\tif (workflow.value) {\n\t\t\tif (executions.value.length > 0) {\n\t\t\t\tawait router\n\t\t\t\t\t.replace({\n\t\t\t\t\t\tname: VIEWS.EXECUTION_PREVIEW,\n\t\t\t\t\t\tparams: { name: workflow.value.id, executionId: nextExecution.id },\n\t\t\t\t\t})\n\t\t\t\t\t.catch(() => {});\n\t\t\t} else {\n\t\t\t\t// If there are no executions left, show empty state\n\t\t\t\tawait router.replace({\n\t\t\t\t\tname: VIEWS.EXECUTION_HOME,\n\t\t\t\t\tparams: { name: workflow.value.id },\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t} catch (error) {\n\t\tloading.value = false;\n\t\ttoast.showError(error, i18n.baseText('executionsList.showError.handleDeleteSelected.title'));\n\t\treturn;\n\t}\n\tloading.value = false;\n\n\ttoast.showMessage({\n\t\ttitle: i18n.baseText('executionsList.showMessage.handleDeleteSelected.title'),\n\t\ttype: 'success',\n\t});\n}\n\nasync function onExecutionRetry(payload: { id: string; loadWorkflow: boolean }) {\n\ttoast.showMessage({\n\t\ttitle: i18n.baseText('executionDetails.runningMessage'),\n\t\ttype: 'info',\n\t\tduration: 2000,\n\t});\n\n\tawait retryExecution(payload);\n\tawait onRefreshData();\n\n\ttelemetry.track('User clicked retry execution button', {\n\t\tworkflow_id: workflow.value?.id,\n\t\texecution_id: payload.id,\n\t\tretry_type: payload.loadWorkflow ? 'current' : 'original',\n\t});\n}\n\nasync function retryExecution(payload: { id: string; loadWorkflow: boolean }) {\n\ttry {\n\t\tconst retrySuccessful = await executionsStore.retryExecution(payload.id, payload.loadWorkflow);\n\n\t\tif (retrySuccessful) {\n\t\t\ttoast.showMessage({\n\t\t\t\ttitle: i18n.baseText('executionsList.showMessage.retrySuccessfulTrue.title'),\n\t\t\t\ttype: 'success',\n\t\t\t});\n\t\t} else {\n\t\t\ttoast.showMessage({\n\t\t\t\ttitle: i18n.baseText('executionsList.showMessage.retrySuccessfulFalse.title'),\n\t\t\t\ttype: 'error',\n\t\t\t});\n\t\t}\n\t} catch (error) {\n\t\ttoast.showError(error, i18n.baseText('executionsList.showError.retryExecution.title'));\n\t}\n}\n\nasync function onLoadMore(): Promise<void> {\n\tif (!loadingMore.value) {\n\t\tawait callDebounced(loadMore, { debounceTime: 1000 });\n\t}\n}\n\nasync function loadMore(): Promise<void> {\n\tif (\n\t\t!!executionsStore.executionsFilters.status?.includes('running') ||\n\t\texecutions.value.length >= executionsStore.executionsCount\n\t) {\n\t\treturn;\n\t}\n\n\tloadingMore.value = true;\n\n\tlet lastId: string | undefined;\n\tif (executions.value.length !== 0) {\n\t\tconst lastItem = executions.value.slice(-1)[0];\n\t\tlastId = lastItem.id;\n\t}\n\n\ttry {\n\t\tawait executionsStore.fetchExecutions(executionsStore.executionsFilters, lastId);\n\t} catch (error) {\n\t\tloadingMore.value = false;\n\t\ttoast.showError(error, i18n.baseText('executionsList.showError.loadMore.title'));\n\t\treturn;\n\t}\n\n\tloadingMore.value = false;\n}\n</script>\n<template>\n\t<WorkflowExecutionsList\n\t\tv-if=\"workflow\"\n\t\t:executions=\"executions\"\n\t\t:execution=\"execution\"\n\t\t:filters=\"filters\"\n\t\t:workflow=\"workflow\"\n\t\t:loading=\"loading\"\n\t\t:loading-more=\"loadingMore\"\n\t\t@execution:stop=\"onExecutionStop\"\n\t\t@execution:delete=\"onExecutionDelete\"\n\t\t@execution:retry=\"onExecutionRetry\"\n\t\t@update:filters=\"onUpdateFilters\"\n\t\t@update:auto-refresh=\"onAutoRefreshToggle\"\n\t\t@load-more=\"onLoadMore\"\n\t\t@reload=\"onRefreshData\"\n\t/>\n</template>\n"],"names":["_sfc_main$3","defineComponent","ExecutionsTime","useExecutionHelpers","mapStores","useWorkflowsStore","VIEWS","action","_resolveComponent","$style","_normalizeClass","executionUIDetails","_ctx","highlight","_createVNode","_component_router_link","executionPreviewViewName","_withCtx","_createElementVNode","_component_n8n_text","_createTextVNode","_toDisplayString","_openBlock","_createBlock","_component_n8n_spinner","_createCommentVNode","execution","_component_ExecutionsTime","_createElementBlock","_hoisted_1","isRetriable","onRetryMenuItemSelect","_component_n8n_tooltip","_sfc_main$2","WorkflowExecutionsCard","WorkflowExecutionsInfoAccordion","ExecutionsFilter","useExecutionsStore","to","from","newValue","oldValue","updatedDeps","id","_a","limit","executionsListRef","diff","payload","filter","sidebarContainerRef","currentWorkflowExecutionsCardRefs","cardElement","listCapacity","cardRect","LIST_HEADER_OFFSET","_hoisted_2","_component_WorkflowExecutionsInfoAccordion","_component_n8n_heading","_component_el_checkbox","_cache","$event","_component_ExecutionsFilter","loadMore","loading","_component_n8n_loading","temporaryExecution","onRetryExecution","_TransitionGroup","_Fragment","_renderList","_component_WorkflowExecutionsCard","onItemMounted","loadingMore","_sfc_main$1","WorkflowExecutionsSidebar","_","next","getNodeViewTab","MAIN_HEADER_TABS","confirmModal","MODAL_CONFIRM","MODAL_CANCEL","externalHooks","useExternalHooks","router","useRouter","workflowHelpers","useWorkflowHelpers","callDebounced","useDebounce","useToast","useMessage","useTagsStore","useNodeTypesStore","useSettingsStore","useUIStore","useNpsSurveyStore","PLACEHOLDER_EMPTY_WORKFLOW_ID","executionFilterToQueryFilter","value","loadWorkflow","$emit","hidePreview","onStopExecution","executionsStore","workflowsStore","nodeTypesStore","i18n","useI18n","telemetry","useTelemetry","route","useRoute","toast","nodeHelpers","useNodeHelpers","filters","storeToRefs","ref","workflow","workflowId","computed","executionId","executions","e","currentExecution","watch","fetchWorkflow","fetchExecution","onMounted","initializeRoute","onDocumentVisibilityChange","onBeforeUnmount","error","data","onAutoRefreshToggle","onRefreshData","NO_NETWORK_ERROR_CODE","onUpdateFilters","newFilters","onExecutionStop","onExecutionDelete","executionIndex","nextExecution","onExecutionRetry","retryExecution","onLoadMore","lastId"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{G as B,r as T,e as b,b as le,ag as L,l as I,m as R,H as Q,p as m,M as P,O as C,S as N,T as k,u as V,R as x,U as S,I as p,a2 as ce,F as ue,a7 as we,az as de,aH as me,D as fe,w as pe,af as ve}from"./vendor-Dv5OeN6t.js";import{x as D,Q as X,l as Z,b as ke,j as ee,dh as ye,u as _e,e as he,V as U,dp as ge,e5 as be}from"./index-BE0Xl-jy.js";import{d as We}from"./dateformat-CIxnBJXX.js";import{_ as K}from"./n8n-4UEsHtUL.js";import{W as $e}from"./WorkflowPreview-BkL2jDRm.js";import{d as He}from"./pinia-sugP77Im.js";import{F as Te}from"./file-saver-By8WREO3.js";import"./axios-Mm4CS0gO.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-BBHtM40w.js";import"./lodash-es-CZ1inz46.js";import"./@n8n/permissions-BxxteU-C.js";import"./vue-i18n-Delvyc9x.js";import"./uuid-SoommWqA.js";import"./luxon-CLwAIbs0.js";import"./@n8n/codemirror-lang-sql-DBO6T13I.js";import"./@lezer/common-B6ct0j_v.js";import"./prettier-bS6l4Vb1.js";import"./@jsplumb/util-DS-9vq_E.js";import"./@jsplumb/core-CVBraiyY.js";import"./@jsplumb/common-CF-b-6-M.js";import"./@jsplumb/connector-bezier-BGU0Ovbw.js";import"./@jsplumb/browser-ui-BVF2KoJK.js";import"./codemirror-lang-html-n8n-CWDO6_kP.js";import"./@n8n/codemirror-lang-Dl0FW_KM.js";import"./esprima-next-nhoSXAeq.js";import"./fast-json-stable-stringify-BOfzoJX1.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-BGkPba5A.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";const Ie=["datetime"],Ve=["value"],Se=B({__name:"WorkflowHistoryListItem",props:{item:{},index:{},actions:{},isActive:{type:Boolean}},emits:["action","preview","mounted"],setup(W,{emit:_}){const t=W,s=_,f=D(),c=T(!1),v=T(null),w=T(null),u=T(!1),h=b(()=>{const e=new Date().getFullYear().toString(),[r,n]=We(t.item.createdAt,`${t.item.createdAt.startsWith(e)?"":"yyyy "}mmm d"#"HH:MM:ss`).split("#");return f.baseText("workflowHistory.item.createdAt",{interpolate:{date:r,time:n}})}),$=b(()=>{const e=t.item.authors.split(", ");let r=e[0];return e.length>1&&(r=`${r} + ${e.length-1}`),{size:e.length,label:r}}),O=b(()=>f.baseText("workflowHistory.item.id",{interpolate:{id:t.item.versionId}})),d=e=>{s("action",{action:e,id:t.item.versionId,data:{formattedCreatedAt:h.value}})},a=e=>{c.value=e},l=e=>{s("preview",{event:e,id:t.item.versionId})};return le(()=>{var e,r,n;s("mounted",{index:t.index,offsetTop:((e=v.value)==null?void 0:e.offsetTop)??0,isActive:t.isActive}),u.value=(((r=w.value)==null?void 0:r.scrollWidth)??0)>(((n=w.value)==null?void 0:n.clientWidth)??0)}),(e,r)=>{const n=L("n8n-tooltip"),y=L("n8n-badge"),H=L("n8n-action-toggle");return I(),R("li",{ref_key:"itemElement",ref:v,"data-test-id":"workflow-history-list-item",class:p({[e.$style.item]:!0,[e.$style.active]:t.isActive,[e.$style.actionsVisible]:c.value})},[Q(e.$slots,"default",{formattedCreatedAt:h.value},()=>[m("p",{onClick:l},[m("time",{datetime:e.item.createdAt},k(h.value),9,Ie),S(n,{placement:"right-end",disabled:$.value.size<2&&!u.value},{content:C(()=>[N(k(t.item.authors),1)]),default:C(()=>[m("span",{ref_key:"authorElement",ref:w},k($.value.label),513)]),_:1},8,["disabled"]),m("data",{value:e.item.versionId},k(O.value),9,Ve)])]),m("div",{class:p(e.$style.tail)},[t.index===0?(I(),P(y,{key:0},{default:C(()=>[N(k(V(f).baseText("workflowHistory.item.latest")),1)]),_:1})):x("",!0),S(H,{theme:"dark",class:p(e.$style.actions),actions:t.actions,placement:"bottom-end",onAction:d,onClick:r[0]||(r[0]=ce(()=>{},["stop"])),onVisibleChange:a},{default:C(()=>[Q(e.$slots,"action-toggle-button")]),_:3},8,["class","actions"])],2)],2)}}}),Ce="_item_1a4du_1",Oe="_tail_1a4du_33",Ae="_active_1a4du_38",Le="_actionsVisible_1a4du_45",Re="_actions_1a4du_45",xe={item:Ce,tail:Oe,active:Ae,actionsVisible:Le,actions:Re},Me={$style:xe},te=K(Se,[["__cssModules",Me]]),Ee=m("br",null,null,-1),Ne=["aria-label"],Pe=B({__name:"WorkflowHistoryList",props:{items:{},activeItem:{},actions:{},requestNumberOfItems:{},lastReceivedItemsLength:{},evaluatedPruneTime:{},shouldUpgrade:{type:Boolean},isListLoading:{type:Boolean}},emits:["action","preview","loadMore","upgrade"],setup(W,{emit:_}){const t=W,s=_,f=D(),c=T(null),v=T(!0),w=T(null),u=a=>a===0?t.actions.filter(l=>l.value!=="restore"):t.actions,h=a=>{w.value=new IntersectionObserver(([l])=>{var e,r;l.isIntersecting&&((e=w.value)==null||e.unobserve(a),(r=w.value)==null||r.disconnect(),w.value=null,s("loadMore",{take:t.requestNumberOfItems,skip:t.items.length}))},{root:c.value,threshold:.01}),w.value.observe(a)},$=({action:a,id:l,data:e})=>{v.value=!1,s("action",{action:a,id:l,data:e})},O=({event:a,id:l})=>{v.value=!1,s("preview",{event:a,id:l})},d=({index:a,offsetTop:l,isActive:e})=>{var r,n;e&&v.value&&(v.value=!1,(r=c.value)==null||r.scrollTo({top:l,behavior:"smooth"})),a===t.items.length-1&&t.lastReceivedItemsLength===t.requestNumberOfItems&&h((n=c.value)==null?void 0:n.children[a])};return(a,l)=>{const e=L("n8n-loading"),r=L("i18n-t");return I(),R("ul",{ref_key:"listElement",ref:c,class:p(a.$style.list),"data-test-id":"workflow-history-list"},[(I(!0),R(ue,null,we(t.items,(n,y)=>{var H;return I(),P(te,{key:n.versionId,index:y,item:n,"is-active":n.versionId===((H=t.activeItem)==null?void 0:H.versionId),actions:u(y),onAction:$,onPreview:O,onMounted:d},null,8,["index","item","is-active","actions"])}),128)),!t.items.length&&!t.isListLoading?(I(),R("li",{key:0,class:p(a.$style.empty)},[N(k(V(f).baseText("workflowHistory.empty"))+" ",1),Ee,N(" "+k(V(f).baseText("workflowHistory.hint")),1)],2)):x("",!0),t.isListLoading?(I(),R("li",{key:1,class:p(a.$style.loader),role:"status","aria-live":"polite","aria-busy":"true","aria-label":V(f).baseText("generic.loading")},[S(e,{rows:3,class:"mb-xs"}),S(e,{rows:3,class:"mb-xs"}),S(e,{rows:3,class:"mb-xs"})],10,Ne)):x("",!0),t.shouldUpgrade?(I(),R("li",{key:2,class:p(a.$style.retention)},[m("span",null,k(V(f).baseText("workflowHistory.limit",{interpolate:{evaluatedPruneTime:String(t.evaluatedPruneTime)}})),1),S(r,{keypath:"workflowHistory.upgrade",tag:"span"},{link:C(()=>[m("a",{href:"#",onClick:l[0]||(l[0]=n=>s("upgrade"))},k(V(f).baseText("workflowHistory.upgrade.link")),1)]),_:1})],2)):x("",!0)],2)}}}),Ue="_list_undzg_1",Fe="_empty_undzg_10",ze="_loader_undzg_23",Be="_retention_undzg_27",De={list:Ue,empty:Fe,loader:ze,retention:Be},Ke={$style:De},qe=K(Pe,[["__cssModules",Ke]]),Ye=["datetime"],je=["value"],Ge=B({__name:"WorkflowHistoryContent",props:{workflow:{},workflowVersion:{},actions:{},isListLoading:{type:Boolean},isFirstItemShown:{type:Boolean}},emits:["action"],setup(W,{emit:_}){const t=D(),s=W,f=_,c=b(()=>{if(!s.workflowVersion||!s.workflow)return;const{pinData:u,...h}=s.workflow;return{...h,nodes:s.workflowVersion.nodes,connections:s.workflowVersion.connections}}),v=b(()=>s.isFirstItemShown?s.actions.filter(u=>u.value!=="restore"):s.actions),w=({action:u,id:h,data:$})=>{f("action",{action:u,id:h,data:$})};return(u,h)=>{const $=L("n8n-icon"),O=L("n8n-button");return I(),R("div",{class:p(u.$style.content)},[s.workflowVersion?(I(),P($e,{key:0,workflow:c.value,loading:s.isListLoading,"loader-type":"spinner"},null,8,["workflow","loading"])):x("",!0),m("ul",{class:p(u.$style.info)},[s.workflowVersion?(I(),P(te,{key:0,class:p(u.$style.card),index:-1,item:s.workflowVersion,"is-active":!1,actions:v.value,onAction:w},{default:C(({formattedCreatedAt:d})=>[m("section",{class:p(u.$style.text)},[m("p",null,[m("span",{class:p(u.$style.label)},k(V(t).baseText("workflowHistory.content.title"))+": ",3),m("time",{datetime:s.workflowVersion.createdAt},k(d),9,Ye)]),m("p",null,[m("span",{class:p(u.$style.label)},k(V(t).baseText("workflowHistory.content.editedBy"))+": ",3),m("span",null,k(s.workflowVersion.authors),1)]),m("p",null,[m("span",{class:p(u.$style.label)},k(V(t).baseText("workflowHistory.content.versionId"))+": ",3),m("data",{value:s.workflowVersion.versionId},k(s.workflowVersion.versionId),9,je)])],2)]),"action-toggle-button":C(()=>[S(O,{type:"tertiary",size:"large","data-test-id":"action-toggle-button"},{default:C(()=>[N(k(V(t).baseText("workflowHistory.content.actions"))+" ",1),S($,{class:"ml-3xs",icon:"chevron-down",size:"small"})]),_:1})]),_:1},8,["class","item","actions"])):x("",!0)],2)],2)}}}),Je="_content_2kwc4_1",Qe="_info_2kwc4_11",Xe="_card_2kwc4_19",Ze="_text_2kwc4_24",et="_label_2kwc4_49",tt={content:Je,info:Qe,card:Xe,text:Ze,label:et},ot={$style:tt},st=K(Ge,[["__cssModules",ot]]),nt=async(W,_,t)=>{const{data:s}=await X(W.baseUrl,`/workflow-history/workflow/${_}`,t);return s},at=async(W,_,t)=>{const{data:s}=await X(W.baseUrl,`/workflow-history/workflow/${_}/version/${t}`);return s},rt=He("workflowHistory",()=>{const W=Z(),_=ke(),t=ee(),s=b(()=>_.settings.workflowHistory.licensePruneTime),f=b(()=>_.settings.workflowHistory.pruneTime),c=b(()=>Math.min(f.value,s.value)),v=b(()=>s.value!==-1&&s.value===f.value),w=async(d,a)=>await nt(W.restApiContext,d,a),u=async(d,a)=>await at(W.restApiContext,d,a);return{getWorkflowHistory:w,getWorkflowVersion:u,downloadVersion:async(d,a,l)=>{const[e,r]=await Promise.all([t.fetchWorkflow(d),u(d,a)]),{connections:n,nodes:y}=r,H=new Blob([JSON.stringify({...e,nodes:y,connections:n},null,2)],{type:"application/json;charset=utf-8"});Te.saveAs(H,`${e.name}(${l.formattedCreatedAt}).json`)},cloneIntoNewWorkflow:async(d,a,l)=>{const[e,r]=await Promise.all([t.fetchWorkflow(d),u(d,a)]),{connections:n,nodes:y}=r,{name:H}=e,F=await ye(W.restApiContext,{name:`${H} (${l.formattedCreatedAt})`}),q={nodes:y,connections:n,name:F.name};return await t.createNewWorkflow(q)},restoreWorkflow:async(d,a,l)=>{const e=await u(d,a),{connections:r,nodes:n}=e,y={connections:r,nodes:n};return l&&(y.active=!1),await t.updateWorkflow(d,y,!0).catch(async H=>{if(H.httpStatusCode===400&&H.message.includes("can not be activated"))return await t.fetchWorkflow(d);throw new Error(H)})},evaluatedPruneTime:c,shouldUpgrade:v}}),it=B({__name:"WorkflowHistory",setup(W){const _=["restore","clone","open","download"],t=_.reduce((o,i)=>({...o,[i.toUpperCase()]:i}),{}),s=de(),f=me(),c=D(),v=_e(),w=rt(),u=he(),h=ee(),$=T(!0),O=T(!0),d=T(20),a=T(0),l=T(null),e=T([]),r=T(null),n=b(()=>j("workflowId")),y=b(()=>j("versionId")),H=b(()=>({name:U.WORKFLOW,params:{name:n.value}})),F=b(()=>_.map(o=>({label:c.baseText(`workflowHistory.item.actions.${o}`),disabled:!1,value:o}))),q=b(()=>{var o;return((o=e.value[0])==null?void 0:o.versionId)===y.value}),oe=b(()=>Math.floor(w.evaluatedPruneTime/24)),M=o=>{ge.track(o,{instance_id:Z().instanceId,workflow_id:n.value})},Y=async o=>{const i=await w.getWorkflowHistory(n.value,o);a.value=i.length,e.value=e.value.concat(i)};fe(async()=>{M("User opened workflow history");try{const[o]=await Promise.all([h.fetchWorkflow(n.value),Y({take:d.value})]);l.value=o,O.value=!1,!y.value&&e.value.length&&await f.replace({name:U.WORKFLOW_HISTORY,params:{workflowId:n.value,versionId:e.value[0].versionId}})}catch(o){$.value=!1,v.showError(o,c.baseText("workflowHistory.title"))}});const j=o=>{const i=s.params[o];return typeof i=="string"?i:(i==null?void 0:i[0])??""},G=o=>{const{href:i}=f.resolve({name:U.WORKFLOW_HISTORY,params:{workflowId:n.value,versionId:o}});window.open(i,"_blank")},se=async(o,i)=>await new Promise((g,A)=>{const E=[{text:c.baseText("workflowHistory.action.restore.modal.button.cancel"),type:"tertiary",action:()=>{g("cancel")}}];o&&E.push({text:c.baseText("workflowHistory.action.restore.modal.button.deactivateAndRestore"),type:"tertiary",action:()=>{g("deactivateAndRestore")}}),E.push({text:c.baseText("workflowHistory.action.restore.modal.button.restore"),type:"primary",action:()=>{g("restore")}});try{u.openModalWithData({name:be,data:{beforeClose:()=>{g("cancel")},isWorkflowActivated:o,formattedCreatedAt:i,buttons:E}})}catch(z){A(z)}}),ne=async(o,i)=>{const g=await w.cloneIntoNewWorkflow(n.value,o,i),{href:A}=f.resolve({name:U.WORKFLOW,params:{name:g.id}});v.showMessage({title:c.baseText("workflowHistory.action.clone.success.title"),message:ve("a",{href:A,target:"_blank"},c.baseText("workflowHistory.action.clone.success.message")),type:"success",duration:1e4})},ae=async(o,i)=>{const g=await h.fetchWorkflow(n.value),A=await se(g.active,i.formattedCreatedAt);if(A==="cancel")return;l.value=await w.restoreWorkflow(n.value,o,A==="deactivateAndRestore");const E=await w.getWorkflowHistory(n.value,{take:1});e.value=E.concat(e.value),v.showMessage({title:c.baseText("workflowHistory.action.restore.success.title"),type:"success"})},J=async({action:o,id:i,data:g})=>{try{switch(o){case t.OPEN:G(i),M("User opened version in new tab");break;case t.DOWNLOAD:await w.downloadVersion(n.value,i,g),M("User downloaded version");break;case t.CLONE:await ne(i,g),M("User cloned version");break;case t.RESTORE:await ae(i,g),M("User restored version");break}}catch(A){v.showError(A,c.baseText("workflowHistory.action.error.title",{interpolate:{action:c.baseText(`workflowHistory.item.actions.${o}`).toLowerCase()}}))}},re=async({event:o,id:i})=>{o.metaKey||o.ctrlKey?(G(i),M("User opened version in new tab")):await f.push({name:U.WORKFLOW_HISTORY,params:{workflowId:n.value,versionId:i}})},ie=()=>{u.goToUpgrade("workflow-history","upgrade-workflow-history")};return pe(async()=>{if(y.value){try{r.value=await w.getWorkflowVersion(n.value,y.value),M("User selected version")}catch(o){v.showError(new Error(`${o.message} "${y.value}"&nbsp;`),c.baseText("workflowHistory.title"))}try{l.value=await h.fetchWorkflow(n.value)}catch(o){$.value=!1,v.showError(o,c.baseText("workflowHistory.title"))}}}),(o,i)=>{const g=L("n8n-heading"),A=L("n8n-button"),E=L("router-link");return I(),R("div",{class:p(o.$style.view)},[S(g,{class:p(o.$style.header),tag:"h2",size:"medium"},{default:C(()=>{var z;return[N(k((z=l.value)==null?void 0:z.name),1)]}),_:1},8,["class"]),m("div",{class:p(o.$style.corner)},[S(g,{tag:"h2",size:"medium",bold:""},{default:C(()=>[N(k(V(c).baseText("workflowHistory.title")),1)]),_:1}),S(E,{to:H.value,"data-test-id":"workflow-history-close-button"},{default:C(()=>[S(A,{type:"tertiary",icon:"times",size:"small",text:"",square:""})]),_:1},8,["to"])],2),m("div",{class:p(o.$style.listComponentWrapper)},[$.value?(I(),P(qe,{key:0,items:e.value,"last-received-items-length":a.value,"active-item":r.value,actions:F.value,"request-number-of-items":d.value,"should-upgrade":V(w).shouldUpgrade,"evaluated-prune-time":oe.value,"is-list-loading":O.value,onAction:J,onPreview:re,onLoadMore:Y,onUpgrade:ie},null,8,["items","last-received-items-length","active-item","actions","request-number-of-items","should-upgrade","evaluated-prune-time","is-list-loading"])):x("",!0)],2),m("div",{class:p(o.$style.contentComponentWrapper)},[$.value?(I(),P(st,{key:0,workflow:l.value,"workflow-version":r.value,actions:F.value,"is-list-loading":O.value,"is-first-item-shown":q.value,onAction:J},null,8,["workflow","workflow-version","actions","is-list-loading","is-first-item-shown"])):x("",!0)],2)],2)}}}),lt="_view_phdlt_1",ct="_header_phdlt_11",ut="_corner_phdlt_19",wt="_contentComponentWrapper_phdlt_30",dt="_listComponentWrapper_phdlt_35",mt={view:lt,header:ct,corner:ut,contentComponentWrapper:wt,listComponentWrapper:dt},ft={$style:mt},qt=K(it,[["__cssModules",ft]]);export{qt as default};
2
- //# sourceMappingURL=WorkflowHistory-D1-E_J_s.js.map
1
+ import{G as B,r as T,e as b,b as le,ag as L,l as I,m as R,H as Q,p as m,M as P,O as C,S as N,T as k,u as V,R as x,U as S,I as p,a2 as ce,F as ue,a7 as we,az as de,aH as me,D as fe,w as pe,af as ve}from"./vendor-Dv5OeN6t.js";import{x as D,Q as X,l as Z,b as ke,j as ee,dh as ye,u as _e,e as he,V as U,dp as ge,e5 as be}from"./index-1OxaEeO3.js";import{d as We}from"./dateformat-CIxnBJXX.js";import{_ as K}from"./n8n-4UEsHtUL.js";import{W as $e}from"./WorkflowPreview-CVwpKdpj.js";import{d as He}from"./pinia-sugP77Im.js";import{F as Te}from"./file-saver-By8WREO3.js";import"./axios-Mm4CS0gO.js";import"./flatted-DN8lQ2XG.js";import"./@vueuse/core-BBHtM40w.js";import"./lodash-es-CZ1inz46.js";import"./@n8n/permissions-BxxteU-C.js";import"./vue-i18n-Delvyc9x.js";import"./uuid-SoommWqA.js";import"./luxon-CLwAIbs0.js";import"./@n8n/codemirror-lang-sql-DBO6T13I.js";import"./@lezer/common-B6ct0j_v.js";import"./prettier-bS6l4Vb1.js";import"./@jsplumb/util-DS-9vq_E.js";import"./@jsplumb/core-CVBraiyY.js";import"./@jsplumb/common-CF-b-6-M.js";import"./@jsplumb/connector-bezier-BGU0Ovbw.js";import"./@jsplumb/browser-ui-BVF2KoJK.js";import"./codemirror-lang-html-n8n-CWDO6_kP.js";import"./@n8n/codemirror-lang-Dl0FW_KM.js";import"./esprima-next-nhoSXAeq.js";import"./fast-json-stable-stringify-BOfzoJX1.js";import"./timeago.js-CiyKClrF.js";import"./qrcode.vue-BGkPba5A.js";import"./vue3-touch-events-mV0oX_Sl.js";import"./chart.js-343vZi4M.js";const Ie=["datetime"],Ve=["value"],Se=B({__name:"WorkflowHistoryListItem",props:{item:{},index:{},actions:{},isActive:{type:Boolean}},emits:["action","preview","mounted"],setup(W,{emit:_}){const t=W,s=_,f=D(),c=T(!1),v=T(null),w=T(null),u=T(!1),h=b(()=>{const e=new Date().getFullYear().toString(),[r,n]=We(t.item.createdAt,`${t.item.createdAt.startsWith(e)?"":"yyyy "}mmm d"#"HH:MM:ss`).split("#");return f.baseText("workflowHistory.item.createdAt",{interpolate:{date:r,time:n}})}),$=b(()=>{const e=t.item.authors.split(", ");let r=e[0];return e.length>1&&(r=`${r} + ${e.length-1}`),{size:e.length,label:r}}),O=b(()=>f.baseText("workflowHistory.item.id",{interpolate:{id:t.item.versionId}})),d=e=>{s("action",{action:e,id:t.item.versionId,data:{formattedCreatedAt:h.value}})},a=e=>{c.value=e},l=e=>{s("preview",{event:e,id:t.item.versionId})};return le(()=>{var e,r,n;s("mounted",{index:t.index,offsetTop:((e=v.value)==null?void 0:e.offsetTop)??0,isActive:t.isActive}),u.value=(((r=w.value)==null?void 0:r.scrollWidth)??0)>(((n=w.value)==null?void 0:n.clientWidth)??0)}),(e,r)=>{const n=L("n8n-tooltip"),y=L("n8n-badge"),H=L("n8n-action-toggle");return I(),R("li",{ref_key:"itemElement",ref:v,"data-test-id":"workflow-history-list-item",class:p({[e.$style.item]:!0,[e.$style.active]:t.isActive,[e.$style.actionsVisible]:c.value})},[Q(e.$slots,"default",{formattedCreatedAt:h.value},()=>[m("p",{onClick:l},[m("time",{datetime:e.item.createdAt},k(h.value),9,Ie),S(n,{placement:"right-end",disabled:$.value.size<2&&!u.value},{content:C(()=>[N(k(t.item.authors),1)]),default:C(()=>[m("span",{ref_key:"authorElement",ref:w},k($.value.label),513)]),_:1},8,["disabled"]),m("data",{value:e.item.versionId},k(O.value),9,Ve)])]),m("div",{class:p(e.$style.tail)},[t.index===0?(I(),P(y,{key:0},{default:C(()=>[N(k(V(f).baseText("workflowHistory.item.latest")),1)]),_:1})):x("",!0),S(H,{theme:"dark",class:p(e.$style.actions),actions:t.actions,placement:"bottom-end",onAction:d,onClick:r[0]||(r[0]=ce(()=>{},["stop"])),onVisibleChange:a},{default:C(()=>[Q(e.$slots,"action-toggle-button")]),_:3},8,["class","actions"])],2)],2)}}}),Ce="_item_1a4du_1",Oe="_tail_1a4du_33",Ae="_active_1a4du_38",Le="_actionsVisible_1a4du_45",Re="_actions_1a4du_45",xe={item:Ce,tail:Oe,active:Ae,actionsVisible:Le,actions:Re},Me={$style:xe},te=K(Se,[["__cssModules",Me]]),Ee=m("br",null,null,-1),Ne=["aria-label"],Pe=B({__name:"WorkflowHistoryList",props:{items:{},activeItem:{},actions:{},requestNumberOfItems:{},lastReceivedItemsLength:{},evaluatedPruneTime:{},shouldUpgrade:{type:Boolean},isListLoading:{type:Boolean}},emits:["action","preview","loadMore","upgrade"],setup(W,{emit:_}){const t=W,s=_,f=D(),c=T(null),v=T(!0),w=T(null),u=a=>a===0?t.actions.filter(l=>l.value!=="restore"):t.actions,h=a=>{w.value=new IntersectionObserver(([l])=>{var e,r;l.isIntersecting&&((e=w.value)==null||e.unobserve(a),(r=w.value)==null||r.disconnect(),w.value=null,s("loadMore",{take:t.requestNumberOfItems,skip:t.items.length}))},{root:c.value,threshold:.01}),w.value.observe(a)},$=({action:a,id:l,data:e})=>{v.value=!1,s("action",{action:a,id:l,data:e})},O=({event:a,id:l})=>{v.value=!1,s("preview",{event:a,id:l})},d=({index:a,offsetTop:l,isActive:e})=>{var r,n;e&&v.value&&(v.value=!1,(r=c.value)==null||r.scrollTo({top:l,behavior:"smooth"})),a===t.items.length-1&&t.lastReceivedItemsLength===t.requestNumberOfItems&&h((n=c.value)==null?void 0:n.children[a])};return(a,l)=>{const e=L("n8n-loading"),r=L("i18n-t");return I(),R("ul",{ref_key:"listElement",ref:c,class:p(a.$style.list),"data-test-id":"workflow-history-list"},[(I(!0),R(ue,null,we(t.items,(n,y)=>{var H;return I(),P(te,{key:n.versionId,index:y,item:n,"is-active":n.versionId===((H=t.activeItem)==null?void 0:H.versionId),actions:u(y),onAction:$,onPreview:O,onMounted:d},null,8,["index","item","is-active","actions"])}),128)),!t.items.length&&!t.isListLoading?(I(),R("li",{key:0,class:p(a.$style.empty)},[N(k(V(f).baseText("workflowHistory.empty"))+" ",1),Ee,N(" "+k(V(f).baseText("workflowHistory.hint")),1)],2)):x("",!0),t.isListLoading?(I(),R("li",{key:1,class:p(a.$style.loader),role:"status","aria-live":"polite","aria-busy":"true","aria-label":V(f).baseText("generic.loading")},[S(e,{rows:3,class:"mb-xs"}),S(e,{rows:3,class:"mb-xs"}),S(e,{rows:3,class:"mb-xs"})],10,Ne)):x("",!0),t.shouldUpgrade?(I(),R("li",{key:2,class:p(a.$style.retention)},[m("span",null,k(V(f).baseText("workflowHistory.limit",{interpolate:{evaluatedPruneTime:String(t.evaluatedPruneTime)}})),1),S(r,{keypath:"workflowHistory.upgrade",tag:"span"},{link:C(()=>[m("a",{href:"#",onClick:l[0]||(l[0]=n=>s("upgrade"))},k(V(f).baseText("workflowHistory.upgrade.link")),1)]),_:1})],2)):x("",!0)],2)}}}),Ue="_list_undzg_1",Fe="_empty_undzg_10",ze="_loader_undzg_23",Be="_retention_undzg_27",De={list:Ue,empty:Fe,loader:ze,retention:Be},Ke={$style:De},qe=K(Pe,[["__cssModules",Ke]]),Ye=["datetime"],je=["value"],Ge=B({__name:"WorkflowHistoryContent",props:{workflow:{},workflowVersion:{},actions:{},isListLoading:{type:Boolean},isFirstItemShown:{type:Boolean}},emits:["action"],setup(W,{emit:_}){const t=D(),s=W,f=_,c=b(()=>{if(!s.workflowVersion||!s.workflow)return;const{pinData:u,...h}=s.workflow;return{...h,nodes:s.workflowVersion.nodes,connections:s.workflowVersion.connections}}),v=b(()=>s.isFirstItemShown?s.actions.filter(u=>u.value!=="restore"):s.actions),w=({action:u,id:h,data:$})=>{f("action",{action:u,id:h,data:$})};return(u,h)=>{const $=L("n8n-icon"),O=L("n8n-button");return I(),R("div",{class:p(u.$style.content)},[s.workflowVersion?(I(),P($e,{key:0,workflow:c.value,loading:s.isListLoading,"loader-type":"spinner"},null,8,["workflow","loading"])):x("",!0),m("ul",{class:p(u.$style.info)},[s.workflowVersion?(I(),P(te,{key:0,class:p(u.$style.card),index:-1,item:s.workflowVersion,"is-active":!1,actions:v.value,onAction:w},{default:C(({formattedCreatedAt:d})=>[m("section",{class:p(u.$style.text)},[m("p",null,[m("span",{class:p(u.$style.label)},k(V(t).baseText("workflowHistory.content.title"))+": ",3),m("time",{datetime:s.workflowVersion.createdAt},k(d),9,Ye)]),m("p",null,[m("span",{class:p(u.$style.label)},k(V(t).baseText("workflowHistory.content.editedBy"))+": ",3),m("span",null,k(s.workflowVersion.authors),1)]),m("p",null,[m("span",{class:p(u.$style.label)},k(V(t).baseText("workflowHistory.content.versionId"))+": ",3),m("data",{value:s.workflowVersion.versionId},k(s.workflowVersion.versionId),9,je)])],2)]),"action-toggle-button":C(()=>[S(O,{type:"tertiary",size:"large","data-test-id":"action-toggle-button"},{default:C(()=>[N(k(V(t).baseText("workflowHistory.content.actions"))+" ",1),S($,{class:"ml-3xs",icon:"chevron-down",size:"small"})]),_:1})]),_:1},8,["class","item","actions"])):x("",!0)],2)],2)}}}),Je="_content_2kwc4_1",Qe="_info_2kwc4_11",Xe="_card_2kwc4_19",Ze="_text_2kwc4_24",et="_label_2kwc4_49",tt={content:Je,info:Qe,card:Xe,text:Ze,label:et},ot={$style:tt},st=K(Ge,[["__cssModules",ot]]),nt=async(W,_,t)=>{const{data:s}=await X(W.baseUrl,`/workflow-history/workflow/${_}`,t);return s},at=async(W,_,t)=>{const{data:s}=await X(W.baseUrl,`/workflow-history/workflow/${_}/version/${t}`);return s},rt=He("workflowHistory",()=>{const W=Z(),_=ke(),t=ee(),s=b(()=>_.settings.workflowHistory.licensePruneTime),f=b(()=>_.settings.workflowHistory.pruneTime),c=b(()=>Math.min(f.value,s.value)),v=b(()=>s.value!==-1&&s.value===f.value),w=async(d,a)=>await nt(W.restApiContext,d,a),u=async(d,a)=>await at(W.restApiContext,d,a);return{getWorkflowHistory:w,getWorkflowVersion:u,downloadVersion:async(d,a,l)=>{const[e,r]=await Promise.all([t.fetchWorkflow(d),u(d,a)]),{connections:n,nodes:y}=r,H=new Blob([JSON.stringify({...e,nodes:y,connections:n},null,2)],{type:"application/json;charset=utf-8"});Te.saveAs(H,`${e.name}(${l.formattedCreatedAt}).json`)},cloneIntoNewWorkflow:async(d,a,l)=>{const[e,r]=await Promise.all([t.fetchWorkflow(d),u(d,a)]),{connections:n,nodes:y}=r,{name:H}=e,F=await ye(W.restApiContext,{name:`${H} (${l.formattedCreatedAt})`}),q={nodes:y,connections:n,name:F.name};return await t.createNewWorkflow(q)},restoreWorkflow:async(d,a,l)=>{const e=await u(d,a),{connections:r,nodes:n}=e,y={connections:r,nodes:n};return l&&(y.active=!1),await t.updateWorkflow(d,y,!0).catch(async H=>{if(H.httpStatusCode===400&&H.message.includes("can not be activated"))return await t.fetchWorkflow(d);throw new Error(H)})},evaluatedPruneTime:c,shouldUpgrade:v}}),it=B({__name:"WorkflowHistory",setup(W){const _=["restore","clone","open","download"],t=_.reduce((o,i)=>({...o,[i.toUpperCase()]:i}),{}),s=de(),f=me(),c=D(),v=_e(),w=rt(),u=he(),h=ee(),$=T(!0),O=T(!0),d=T(20),a=T(0),l=T(null),e=T([]),r=T(null),n=b(()=>j("workflowId")),y=b(()=>j("versionId")),H=b(()=>({name:U.WORKFLOW,params:{name:n.value}})),F=b(()=>_.map(o=>({label:c.baseText(`workflowHistory.item.actions.${o}`),disabled:!1,value:o}))),q=b(()=>{var o;return((o=e.value[0])==null?void 0:o.versionId)===y.value}),oe=b(()=>Math.floor(w.evaluatedPruneTime/24)),M=o=>{ge.track(o,{instance_id:Z().instanceId,workflow_id:n.value})},Y=async o=>{const i=await w.getWorkflowHistory(n.value,o);a.value=i.length,e.value=e.value.concat(i)};fe(async()=>{M("User opened workflow history");try{const[o]=await Promise.all([h.fetchWorkflow(n.value),Y({take:d.value})]);l.value=o,O.value=!1,!y.value&&e.value.length&&await f.replace({name:U.WORKFLOW_HISTORY,params:{workflowId:n.value,versionId:e.value[0].versionId}})}catch(o){$.value=!1,v.showError(o,c.baseText("workflowHistory.title"))}});const j=o=>{const i=s.params[o];return typeof i=="string"?i:(i==null?void 0:i[0])??""},G=o=>{const{href:i}=f.resolve({name:U.WORKFLOW_HISTORY,params:{workflowId:n.value,versionId:o}});window.open(i,"_blank")},se=async(o,i)=>await new Promise((g,A)=>{const E=[{text:c.baseText("workflowHistory.action.restore.modal.button.cancel"),type:"tertiary",action:()=>{g("cancel")}}];o&&E.push({text:c.baseText("workflowHistory.action.restore.modal.button.deactivateAndRestore"),type:"tertiary",action:()=>{g("deactivateAndRestore")}}),E.push({text:c.baseText("workflowHistory.action.restore.modal.button.restore"),type:"primary",action:()=>{g("restore")}});try{u.openModalWithData({name:be,data:{beforeClose:()=>{g("cancel")},isWorkflowActivated:o,formattedCreatedAt:i,buttons:E}})}catch(z){A(z)}}),ne=async(o,i)=>{const g=await w.cloneIntoNewWorkflow(n.value,o,i),{href:A}=f.resolve({name:U.WORKFLOW,params:{name:g.id}});v.showMessage({title:c.baseText("workflowHistory.action.clone.success.title"),message:ve("a",{href:A,target:"_blank"},c.baseText("workflowHistory.action.clone.success.message")),type:"success",duration:1e4})},ae=async(o,i)=>{const g=await h.fetchWorkflow(n.value),A=await se(g.active,i.formattedCreatedAt);if(A==="cancel")return;l.value=await w.restoreWorkflow(n.value,o,A==="deactivateAndRestore");const E=await w.getWorkflowHistory(n.value,{take:1});e.value=E.concat(e.value),v.showMessage({title:c.baseText("workflowHistory.action.restore.success.title"),type:"success"})},J=async({action:o,id:i,data:g})=>{try{switch(o){case t.OPEN:G(i),M("User opened version in new tab");break;case t.DOWNLOAD:await w.downloadVersion(n.value,i,g),M("User downloaded version");break;case t.CLONE:await ne(i,g),M("User cloned version");break;case t.RESTORE:await ae(i,g),M("User restored version");break}}catch(A){v.showError(A,c.baseText("workflowHistory.action.error.title",{interpolate:{action:c.baseText(`workflowHistory.item.actions.${o}`).toLowerCase()}}))}},re=async({event:o,id:i})=>{o.metaKey||o.ctrlKey?(G(i),M("User opened version in new tab")):await f.push({name:U.WORKFLOW_HISTORY,params:{workflowId:n.value,versionId:i}})},ie=()=>{u.goToUpgrade("workflow-history","upgrade-workflow-history")};return pe(async()=>{if(y.value){try{r.value=await w.getWorkflowVersion(n.value,y.value),M("User selected version")}catch(o){v.showError(new Error(`${o.message} "${y.value}"&nbsp;`),c.baseText("workflowHistory.title"))}try{l.value=await h.fetchWorkflow(n.value)}catch(o){$.value=!1,v.showError(o,c.baseText("workflowHistory.title"))}}}),(o,i)=>{const g=L("n8n-heading"),A=L("n8n-button"),E=L("router-link");return I(),R("div",{class:p(o.$style.view)},[S(g,{class:p(o.$style.header),tag:"h2",size:"medium"},{default:C(()=>{var z;return[N(k((z=l.value)==null?void 0:z.name),1)]}),_:1},8,["class"]),m("div",{class:p(o.$style.corner)},[S(g,{tag:"h2",size:"medium",bold:""},{default:C(()=>[N(k(V(c).baseText("workflowHistory.title")),1)]),_:1}),S(E,{to:H.value,"data-test-id":"workflow-history-close-button"},{default:C(()=>[S(A,{type:"tertiary",icon:"times",size:"small",text:"",square:""})]),_:1},8,["to"])],2),m("div",{class:p(o.$style.listComponentWrapper)},[$.value?(I(),P(qe,{key:0,items:e.value,"last-received-items-length":a.value,"active-item":r.value,actions:F.value,"request-number-of-items":d.value,"should-upgrade":V(w).shouldUpgrade,"evaluated-prune-time":oe.value,"is-list-loading":O.value,onAction:J,onPreview:re,onLoadMore:Y,onUpgrade:ie},null,8,["items","last-received-items-length","active-item","actions","request-number-of-items","should-upgrade","evaluated-prune-time","is-list-loading"])):x("",!0)],2),m("div",{class:p(o.$style.contentComponentWrapper)},[$.value?(I(),P(st,{key:0,workflow:l.value,"workflow-version":r.value,actions:F.value,"is-list-loading":O.value,"is-first-item-shown":q.value,onAction:J},null,8,["workflow","workflow-version","actions","is-list-loading","is-first-item-shown"])):x("",!0)],2)],2)}}}),lt="_view_phdlt_1",ct="_header_phdlt_11",ut="_corner_phdlt_19",wt="_contentComponentWrapper_phdlt_30",dt="_listComponentWrapper_phdlt_35",mt={view:lt,header:ct,corner:ut,contentComponentWrapper:wt,listComponentWrapper:dt},ft={$style:mt},qt=K(it,[["__cssModules",ft]]);export{qt as default};
2
+ //# sourceMappingURL=WorkflowHistory-C6zCGFoY.js.map