@strapi/admin 4.25.8 → 4.25.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/{AdminSeatInfo-2tiJbYUA.js → AdminSeatInfo-6zKyZssa.js} +3 -3
- package/dist/_chunks/{AdminSeatInfo-2tiJbYUA.js.map → AdminSeatInfo-6zKyZssa.js.map} +1 -1
- package/dist/_chunks/{AdminSeatInfo-B8EsgOqz.mjs → AdminSeatInfo-Md5oKgdi.mjs} +3 -3
- package/dist/_chunks/{AdminSeatInfo-B8EsgOqz.mjs.map → AdminSeatInfo-Md5oKgdi.mjs.map} +1 -1
- package/dist/_chunks/{AuthenticatedApp-GC9sytrp.mjs → AuthenticatedApp-MPoeoIOU.mjs} +21 -21
- package/dist/_chunks/{AuthenticatedApp-GC9sytrp.mjs.map → AuthenticatedApp-MPoeoIOU.mjs.map} +1 -1
- package/dist/_chunks/{AuthenticatedApp-u0q2mjfS.js → AuthenticatedApp-Qy5uXoF3.js} +21 -21
- package/dist/_chunks/{AuthenticatedApp-u0q2mjfS.js.map → AuthenticatedApp-Qy5uXoF3.js.map} +1 -1
- package/dist/_chunks/{CreateActionEE-dFIOIHGp.mjs → CreateActionEE-FAHFAEmB.mjs} +2 -2
- package/dist/_chunks/{CreateActionEE-dFIOIHGp.mjs.map → CreateActionEE-FAHFAEmB.mjs.map} +1 -1
- package/dist/_chunks/{CreateActionEE-6ReRB5hD.js → CreateActionEE-upWBCmFE.js} +2 -2
- package/dist/_chunks/{CreateActionEE-6ReRB5hD.js.map → CreateActionEE-upWBCmFE.js.map} +1 -1
- package/dist/_chunks/{CreatePage-y4ooh8yo.js → CreatePage-0azPmoEO.js} +3 -3
- package/dist/_chunks/{CreatePage-y4ooh8yo.js.map → CreatePage-0azPmoEO.js.map} +1 -1
- package/dist/_chunks/{CreatePage-twifSYga.js → CreatePage-GlDbH1lS.js} +8 -8
- package/dist/_chunks/{CreatePage-twifSYga.js.map → CreatePage-GlDbH1lS.js.map} +1 -1
- package/dist/_chunks/{CreatePage--dD3CTIn.js → CreatePage-X7AwX0nX.js} +6 -6
- package/dist/_chunks/{CreatePage--dD3CTIn.js.map → CreatePage-X7AwX0nX.js.map} +1 -1
- package/dist/_chunks/{CreatePage-DHFcFptO.mjs → CreatePage-hzhKSiJ0.mjs} +6 -6
- package/dist/_chunks/{CreatePage-DHFcFptO.mjs.map → CreatePage-hzhKSiJ0.mjs.map} +1 -1
- package/dist/_chunks/{CreatePage-qUzcFRYT.mjs → CreatePage-wy4nvb2g.mjs} +3 -3
- package/dist/_chunks/{CreatePage-qUzcFRYT.mjs.map → CreatePage-wy4nvb2g.mjs.map} +1 -1
- package/dist/_chunks/{CreatePage-5PDeZvjx.mjs → CreatePage-x78bBThb.mjs} +8 -8
- package/dist/_chunks/{CreatePage-5PDeZvjx.mjs.map → CreatePage-x78bBThb.mjs.map} +1 -1
- package/dist/_chunks/{CreateView-acNas4Gc.js → CreateView-1pa9tRAV.js} +6 -6
- package/dist/_chunks/{CreateView-acNas4Gc.js.map → CreateView-1pa9tRAV.js.map} +1 -1
- package/dist/_chunks/{CreateView-Bl679oI2.js → CreateView-7FP7qeFz.js} +6 -6
- package/dist/_chunks/{CreateView-Bl679oI2.js.map → CreateView-7FP7qeFz.js.map} +1 -1
- package/dist/_chunks/{CreateView-8BeRt60a.mjs → CreateView-Xs06-Who.mjs} +6 -6
- package/dist/_chunks/{CreateView-8BeRt60a.mjs.map → CreateView-Xs06-Who.mjs.map} +1 -1
- package/dist/_chunks/{CreateView-X9V7eD4E.mjs → CreateView-lrGthjNo.mjs} +6 -6
- package/dist/_chunks/{CreateView-X9V7eD4E.mjs.map → CreateView-lrGthjNo.mjs.map} +1 -1
- package/dist/_chunks/{EditPage-u2yPVChT.js → EditPage-4DJ3Tjlb.js} +9 -9
- package/dist/_chunks/{EditPage-u2yPVChT.js.map → EditPage-4DJ3Tjlb.js.map} +1 -1
- package/dist/_chunks/{EditPage-vI7rOpa-.mjs → EditPage-QI0u5f-m.mjs} +4 -4
- package/dist/_chunks/{EditPage-vI7rOpa-.mjs.map → EditPage-QI0u5f-m.mjs.map} +1 -1
- package/dist/_chunks/{EditPage-l2_vqzof.js → EditPage-b1mM_YNY.js} +6 -6
- package/dist/_chunks/{EditPage-l2_vqzof.js.map → EditPage-b1mM_YNY.js.map} +1 -1
- package/dist/_chunks/{EditPage-mBFAaUcp.js → EditPage-bT_J6RPv.js} +4 -4
- package/dist/_chunks/{EditPage-mBFAaUcp.js.map → EditPage-bT_J6RPv.js.map} +1 -1
- package/dist/_chunks/{EditPage-m7pa1w4V.mjs → EditPage-jP3J_b-g.mjs} +6 -6
- package/dist/_chunks/{EditPage-m7pa1w4V.mjs.map → EditPage-jP3J_b-g.mjs.map} +1 -1
- package/dist/_chunks/{EditPage-9WEzBn3x.mjs → EditPage-lpcjU1iO.mjs} +9 -9
- package/dist/_chunks/{EditPage-9WEzBn3x.mjs.map → EditPage-lpcjU1iO.mjs.map} +1 -1
- package/dist/_chunks/{EditPage-fi71U2Y3.mjs → EditPage-po_MJGqG.mjs} +6 -6
- package/dist/_chunks/{EditPage-fi71U2Y3.mjs.map → EditPage-po_MJGqG.mjs.map} +1 -1
- package/dist/_chunks/{EditPage-uTMdltI_.js → EditPage-uqR-CSI7.js} +6 -6
- package/dist/_chunks/{EditPage-uTMdltI_.js.map → EditPage-uqR-CSI7.js.map} +1 -1
- package/dist/_chunks/{EditView-nAZrTRIE.mjs → EditView-OkrQPrNV.mjs} +4 -4
- package/dist/_chunks/{EditView-nAZrTRIE.mjs.map → EditView-OkrQPrNV.mjs.map} +1 -1
- package/dist/_chunks/{EditView-2P7SMpNu.js → EditView-ZqREhMRs.js} +4 -4
- package/dist/_chunks/{EditView-2P7SMpNu.js.map → EditView-ZqREhMRs.js.map} +1 -1
- package/dist/_chunks/{EditViewPage-46wAt5pF.mjs → EditViewPage-M2aXbEr9.mjs} +4 -4
- package/dist/_chunks/{EditViewPage-46wAt5pF.mjs.map → EditViewPage-M2aXbEr9.mjs.map} +1 -1
- package/dist/_chunks/{EditViewPage-cRg5S1RF.js → EditViewPage-y6-QEPXe.js} +4 -4
- package/dist/_chunks/{EditViewPage-cRg5S1RF.js.map → EditViewPage-y6-QEPXe.js.map} +1 -1
- package/dist/_chunks/{EventsTable-GglsD7N7.mjs → EventsTable-DiHkzjty.mjs} +6 -6
- package/dist/_chunks/{EventsTable-GglsD7N7.mjs.map → EventsTable-DiHkzjty.mjs.map} +1 -1
- package/dist/_chunks/{EventsTable-C_A7ZTUR.js → EventsTable-v1WZ_gi9.js} +6 -6
- package/dist/_chunks/{EventsTable-C_A7ZTUR.js.map → EventsTable-v1WZ_gi9.js.map} +1 -1
- package/dist/_chunks/{HomePage-dwi6D_9t.mjs → HomePage-TYvBggdQ.mjs} +6 -6
- package/dist/_chunks/{HomePage-dwi6D_9t.mjs.map → HomePage-TYvBggdQ.mjs.map} +1 -1
- package/dist/_chunks/{HomePage-wUu7rdOD.mjs → HomePage-n1fwbnez.mjs} +5 -5
- package/dist/_chunks/{HomePage-wUu7rdOD.mjs.map → HomePage-n1fwbnez.mjs.map} +1 -1
- package/dist/_chunks/{HomePage-zgM7JhID.js → HomePage-p5SWGQgz.js} +5 -5
- package/dist/_chunks/{HomePage-zgM7JhID.js.map → HomePage-p5SWGQgz.js.map} +1 -1
- package/dist/_chunks/{HomePage-yQz2-0Hj.js → HomePage-qF-dEV8u.js} +6 -6
- package/dist/_chunks/{HomePage-yQz2-0Hj.js.map → HomePage-qF-dEV8u.js.map} +1 -1
- package/dist/_chunks/{InformationBoxEE-Uuf46B1C.mjs → InformationBoxEE-7zOeWUFf.mjs} +3 -3
- package/dist/_chunks/{InformationBoxEE-Uuf46B1C.mjs.map → InformationBoxEE-7zOeWUFf.mjs.map} +1 -1
- package/dist/_chunks/{InformationBoxEE-lVCnucO_.js → InformationBoxEE-zUIffb4F.js} +3 -3
- package/dist/_chunks/{InformationBoxEE-lVCnucO_.js.map → InformationBoxEE-zUIffb4F.js.map} +1 -1
- package/dist/_chunks/{InstalledPluginsPage-eCEcrw7N.js → InstalledPluginsPage-2Vr4BFUf.js} +3 -3
- package/dist/_chunks/{InstalledPluginsPage-eCEcrw7N.js.map → InstalledPluginsPage-2Vr4BFUf.js.map} +1 -1
- package/dist/_chunks/{InstalledPluginsPage-e_GC8uEF.mjs → InstalledPluginsPage-4oPT9TZu.mjs} +3 -3
- package/dist/_chunks/{InstalledPluginsPage-e_GC8uEF.mjs.map → InstalledPluginsPage-4oPT9TZu.mjs.map} +1 -1
- package/dist/_chunks/{Layout-Ru74pw9w.js → Layout-cW_d_wLg.js} +2 -2
- package/dist/_chunks/{Layout-Ru74pw9w.js.map → Layout-cW_d_wLg.js.map} +1 -1
- package/dist/_chunks/{Layout-aUEgqbde.mjs → Layout-jwPGTxyo.mjs} +2 -2
- package/dist/_chunks/{Layout-aUEgqbde.mjs.map → Layout-jwPGTxyo.mjs.map} +1 -1
- package/dist/_chunks/{ListPage-jaKpbAU_.js → ListPage-U-CCr8z2.js} +7 -7
- package/dist/_chunks/{ListPage-jaKpbAU_.js.map → ListPage-U-CCr8z2.js.map} +1 -1
- package/dist/_chunks/{ListPage-ND8MCbH2.mjs → ListPage-USWD7OAn.mjs} +6 -6
- package/dist/_chunks/{ListPage-ND8MCbH2.mjs.map → ListPage-USWD7OAn.mjs.map} +1 -1
- package/dist/_chunks/{ListPage-uxhmCvLZ.mjs → ListPage-XuUYNFON.mjs} +4 -4
- package/dist/_chunks/{ListPage-uxhmCvLZ.mjs.map → ListPage-XuUYNFON.mjs.map} +1 -1
- package/dist/_chunks/{ListPage-lscBKMe6.mjs → ListPage-boe-QdwP.mjs} +3 -3
- package/dist/_chunks/{ListPage-lscBKMe6.mjs.map → ListPage-boe-QdwP.mjs.map} +1 -1
- package/dist/_chunks/{ListPage-puxMGFG0.js → ListPage-cf0xg9Vl.js} +2 -2
- package/dist/_chunks/{ListPage-puxMGFG0.js.map → ListPage-cf0xg9Vl.js.map} +1 -1
- package/dist/_chunks/{ListPage-8XEglSuW.js → ListPage-gQmALRcv.js} +3 -3
- package/dist/_chunks/{ListPage-8XEglSuW.js.map → ListPage-gQmALRcv.js.map} +1 -1
- package/dist/_chunks/{ListPage-Swosd8N6.js → ListPage-iMHN5Q_L.js} +6 -6
- package/dist/_chunks/{ListPage-Swosd8N6.js.map → ListPage-iMHN5Q_L.js.map} +1 -1
- package/dist/_chunks/{ListPage-e0WuiZ8D.js → ListPage-kxukYyMR.js} +4 -4
- package/dist/_chunks/{ListPage-e0WuiZ8D.js.map → ListPage-kxukYyMR.js.map} +1 -1
- package/dist/_chunks/{ListPage-zp9DAHQo.mjs → ListPage-mYq4GXDx.mjs} +2 -2
- package/dist/_chunks/{ListPage-zp9DAHQo.mjs.map → ListPage-mYq4GXDx.mjs.map} +1 -1
- package/dist/_chunks/{ListPage-EzG3R8c_.mjs → ListPage-tQZAAMZ2.mjs} +8 -8
- package/dist/_chunks/{ListPage-EzG3R8c_.mjs.map → ListPage-tQZAAMZ2.mjs.map} +1 -1
- package/dist/_chunks/{ListPage-mCJNNkYT.mjs → ListPage-um6bRMmX.mjs} +7 -7
- package/dist/_chunks/{ListPage-mCJNNkYT.mjs.map → ListPage-um6bRMmX.mjs.map} +1 -1
- package/dist/_chunks/{ListPage-lzdWWBd9.js → ListPage-yrF1oGFd.js} +8 -8
- package/dist/_chunks/{ListPage-lzdWWBd9.js.map → ListPage-yrF1oGFd.js.map} +1 -1
- package/dist/_chunks/{ListView-lhQnnSMZ.mjs → ListView-1TZSzm0E.mjs} +3 -3
- package/dist/_chunks/{ListView-lhQnnSMZ.mjs.map → ListView-1TZSzm0E.mjs.map} +1 -1
- package/dist/_chunks/{ListView-C7joiCJ6.js → ListView-1y2gjseP.js} +3 -3
- package/dist/_chunks/{ListView-C7joiCJ6.js.map → ListView-1y2gjseP.js.map} +1 -1
- package/dist/_chunks/{ListView-2H2wgBV7.js → ListView-8aqFHxwk.js} +3 -3
- package/dist/_chunks/{ListView-2H2wgBV7.js.map → ListView-8aqFHxwk.js.map} +1 -1
- package/dist/_chunks/{ListView-AnpNYGS-.mjs → ListView-Y8xl3SNS.mjs} +3 -3
- package/dist/_chunks/{ListView-AnpNYGS-.mjs.map → ListView-Y8xl3SNS.mjs.map} +1 -1
- package/dist/_chunks/{Login-pKD99CNZ.js → Login-39PECWHo.js} +2 -2
- package/dist/_chunks/{Login-pKD99CNZ.js.map → Login-39PECWHo.js.map} +1 -1
- package/dist/_chunks/{Login-35D4pkZY.mjs → Login-MvF-l7Jf.mjs} +2 -2
- package/dist/_chunks/{Login-35D4pkZY.mjs.map → Login-MvF-l7Jf.mjs.map} +1 -1
- package/dist/_chunks/{MagicLinkEE-qsOSRXXs.mjs → MagicLinkEE-2SgSsQ9D.mjs} +4 -4
- package/dist/_chunks/{MagicLinkEE-qsOSRXXs.mjs.map → MagicLinkEE-2SgSsQ9D.mjs.map} +1 -1
- package/dist/_chunks/{MagicLinkEE-7fpRGbys.js → MagicLinkEE-RZbU7-RH.js} +4 -4
- package/dist/_chunks/{MagicLinkEE-7fpRGbys.js.map → MagicLinkEE-RZbU7-RH.js.map} +1 -1
- package/dist/_chunks/{MarketplacePage-VZHeIDyV.mjs → MarketplacePage-avpto0An.mjs} +3 -3
- package/dist/_chunks/{MarketplacePage-VZHeIDyV.mjs.map → MarketplacePage-avpto0An.mjs.map} +1 -1
- package/dist/_chunks/{MarketplacePage-JTtXw3Vz.js → MarketplacePage-wE94Wh4I.js} +3 -3
- package/dist/_chunks/{MarketplacePage-JTtXw3Vz.js.map → MarketplacePage-wE94Wh4I.js.map} +1 -1
- package/dist/_chunks/{Permissions-Zmdfc2DI.js → Permissions-1Q5T7SVl.js} +2 -2
- package/dist/_chunks/{Permissions-Zmdfc2DI.js.map → Permissions-1Q5T7SVl.js.map} +1 -1
- package/dist/_chunks/{Permissions-k4NWVhTV.mjs → Permissions-UlAp5vXm.mjs} +2 -2
- package/dist/_chunks/{Permissions-k4NWVhTV.mjs.map → Permissions-UlAp5vXm.mjs.map} +1 -1
- package/dist/_chunks/{ProfilePage-nWh5usVZ.js → ProfilePage-efqbtTP9.js} +3 -3
- package/dist/_chunks/{ProfilePage-nWh5usVZ.js.map → ProfilePage-efqbtTP9.js.map} +1 -1
- package/dist/_chunks/{ProfilePage-mYKE0J_h.mjs → ProfilePage-g36T4a0Q.mjs} +3 -3
- package/dist/_chunks/{ProfilePage-mYKE0J_h.mjs.map → ProfilePage-g36T4a0Q.mjs.map} +1 -1
- package/dist/_chunks/{ReviewWorkflowsColumn-ol7_HUiQ.js → ReviewWorkflowsColumn-1rphvuAX.js} +2 -2
- package/dist/_chunks/{ReviewWorkflowsColumn-ol7_HUiQ.js.map → ReviewWorkflowsColumn-1rphvuAX.js.map} +1 -1
- package/dist/_chunks/{ReviewWorkflowsColumn-uinlpNoZ.mjs → ReviewWorkflowsColumn-23m0Jbcb.mjs} +2 -2
- package/dist/_chunks/{ReviewWorkflowsColumn-uinlpNoZ.mjs.map → ReviewWorkflowsColumn-23m0Jbcb.mjs.map} +1 -1
- package/dist/_chunks/{SelectRoles-8s8JlxNx.js → SelectRoles-EMflJoZf.js} +3 -3
- package/dist/_chunks/{SelectRoles-8s8JlxNx.js.map → SelectRoles-EMflJoZf.js.map} +1 -1
- package/dist/_chunks/{SelectRoles-IgUUQ1dl.mjs → SelectRoles-EcNeQDtr.mjs} +3 -3
- package/dist/_chunks/{SelectRoles-IgUUQ1dl.mjs.map → SelectRoles-EcNeQDtr.mjs.map} +1 -1
- package/dist/_chunks/{SettingsPage-1_9llT4p.mjs → SettingsPage-ctRMOKpC.mjs} +21 -21
- package/dist/_chunks/{SettingsPage-1_9llT4p.mjs.map → SettingsPage-ctRMOKpC.mjs.map} +1 -1
- package/dist/_chunks/{SettingsPage-DMfiUNsO.js → SettingsPage-pbZQYRba.js} +21 -21
- package/dist/_chunks/{SettingsPage-DMfiUNsO.js.map → SettingsPage-pbZQYRba.js.map} +1 -1
- package/dist/_chunks/{SingleSignOnPage-sNEnLMOw.js → SingleSignOnPage-0PwZElsW.js} +3 -3
- package/dist/_chunks/{SingleSignOnPage-sNEnLMOw.js.map → SingleSignOnPage-0PwZElsW.js.map} +1 -1
- package/dist/_chunks/{SingleSignOnPage-AnioOyGC.mjs → SingleSignOnPage-hF18NC0F.mjs} +3 -3
- package/dist/_chunks/{SingleSignOnPage-AnioOyGC.mjs.map → SingleSignOnPage-hF18NC0F.mjs.map} +1 -1
- package/dist/_chunks/{TokenTypeSelect-JBp4MYVF.js → TokenTypeSelect-OKSX2lfX.js} +2 -2
- package/dist/_chunks/{TokenTypeSelect-JBp4MYVF.js.map → TokenTypeSelect-OKSX2lfX.js.map} +1 -1
- package/dist/_chunks/{TokenTypeSelect-IDDlAIJV.mjs → TokenTypeSelect-VOdl0ZmL.mjs} +2 -2
- package/dist/_chunks/{TokenTypeSelect-IDDlAIJV.mjs.map → TokenTypeSelect-VOdl0ZmL.mjs.map} +1 -1
- package/dist/_chunks/{apiTokens-xexY0NGW.js → apiTokens-EVFBWYmA.js} +2 -2
- package/dist/_chunks/{apiTokens-xexY0NGW.js.map → apiTokens-EVFBWYmA.js.map} +1 -1
- package/dist/_chunks/{apiTokens-rB6wJonW.mjs → apiTokens-yJQ8-8xC.mjs} +2 -2
- package/dist/_chunks/{apiTokens-rB6wJonW.mjs.map → apiTokens-yJQ8-8xC.mjs.map} +1 -1
- package/dist/_chunks/{constants-PpOBcn17.mjs → constants-0ftEXoFj.mjs} +2 -2
- package/dist/_chunks/{constants-PpOBcn17.mjs.map → constants-0ftEXoFj.mjs.map} +1 -1
- package/dist/_chunks/{constants-3KxTcEPy.mjs → constants-5cTkDbEw.mjs} +4 -4
- package/dist/_chunks/{constants-3KxTcEPy.mjs.map → constants-5cTkDbEw.mjs.map} +1 -1
- package/dist/_chunks/{constants-hHgAMYki.mjs → constants-6DC4IjBd.mjs} +6 -6
- package/dist/_chunks/{constants-hHgAMYki.mjs.map → constants-6DC4IjBd.mjs.map} +1 -1
- package/dist/_chunks/{constants-fE09nQBQ.mjs → constants-FtFKsXD2.mjs} +2 -2
- package/dist/_chunks/{constants-fE09nQBQ.mjs.map → constants-FtFKsXD2.mjs.map} +1 -1
- package/dist/_chunks/{constants-AhDzn17a.js → constants-GrxlpuUW.js} +6 -6
- package/dist/_chunks/{constants-AhDzn17a.js.map → constants-GrxlpuUW.js.map} +1 -1
- package/dist/_chunks/{constants-A_xmXqs1.js → constants-XwCwfaxY.js} +2 -2
- package/dist/_chunks/{constants-A_xmXqs1.js.map → constants-XwCwfaxY.js.map} +1 -1
- package/dist/_chunks/{constants-uv3Byj1O.js → constants-iyl1t6wG.js} +2 -2
- package/dist/_chunks/{constants-uv3Byj1O.js.map → constants-iyl1t6wG.js.map} +1 -1
- package/dist/_chunks/{constants-7zMfSXpq.js → constants-s0SKq0VB.js} +4 -4
- package/dist/_chunks/{constants-7zMfSXpq.js.map → constants-s0SKq0VB.js.map} +1 -1
- package/dist/_chunks/{index-hLwLJn2b.js → index-Ts0i8jmH.js} +20 -11
- package/dist/_chunks/index-Ts0i8jmH.js.map +1 -0
- package/dist/_chunks/{index-NCt4-R5U.mjs → index-eT0CIaDr.mjs} +20 -11
- package/dist/_chunks/index-eT0CIaDr.mjs.map +1 -0
- package/dist/_chunks/{reviewWorkflows-f_PWhEgA.js → reviewWorkflows-VYHOVjTk.js} +2 -2
- package/dist/_chunks/{reviewWorkflows-f_PWhEgA.js.map → reviewWorkflows-VYHOVjTk.js.map} +1 -1
- package/dist/_chunks/{reviewWorkflows-_Y1gbdFD.mjs → reviewWorkflows-X4opVwyZ.mjs} +2 -2
- package/dist/_chunks/{reviewWorkflows-_Y1gbdFD.mjs.map → reviewWorkflows-X4opVwyZ.mjs.map} +1 -1
- package/dist/_chunks/{transferTokens--LF7vlmg.js → transferTokens-XbqoKHA6.js} +2 -2
- package/dist/_chunks/{transferTokens--LF7vlmg.js.map → transferTokens-XbqoKHA6.js.map} +1 -1
- package/dist/_chunks/{transferTokens-BsEREEPV.mjs → transferTokens-tZFQBBDc.mjs} +2 -2
- package/dist/_chunks/{transferTokens-BsEREEPV.mjs.map → transferTokens-tZFQBBDc.mjs.map} +1 -1
- package/dist/_chunks/{useAdminRoles-4ZxMiacH.js → useAdminRoles-MjR-VmL_.js} +2 -2
- package/dist/_chunks/{useAdminRoles-4ZxMiacH.js.map → useAdminRoles-MjR-VmL_.js.map} +1 -1
- package/dist/_chunks/{useAdminRoles-8FXsuYaX.mjs → useAdminRoles-lZ7mEYnT.mjs} +2 -2
- package/dist/_chunks/{useAdminRoles-8FXsuYaX.mjs.map → useAdminRoles-lZ7mEYnT.mjs.map} +1 -1
- package/dist/_chunks/{useContentTypes-pMsgcqbF.mjs → useContentTypes-buqO4eWt.mjs} +2 -2
- package/dist/_chunks/{useContentTypes-pMsgcqbF.mjs.map → useContentTypes-buqO4eWt.mjs.map} +1 -1
- package/dist/_chunks/{useContentTypes-Ob05_NHk.js → useContentTypes-dP0t6DnS.js} +2 -2
- package/dist/_chunks/{useContentTypes-Ob05_NHk.js.map → useContentTypes-dP0t6DnS.js.map} +1 -1
- package/dist/_chunks/{useLicenseLimitNotification--f-qHelG.js → useLicenseLimitNotification-HG-BNi8G.js} +2 -2
- package/dist/_chunks/{useLicenseLimitNotification--f-qHelG.js.map → useLicenseLimitNotification-HG-BNi8G.js.map} +1 -1
- package/dist/_chunks/{useLicenseLimitNotification-e9T8fpma.mjs → useLicenseLimitNotification-QwULiYn5.mjs} +2 -2
- package/dist/_chunks/{useLicenseLimitNotification-e9T8fpma.mjs.map → useLicenseLimitNotification-QwULiYn5.mjs.map} +1 -1
- package/dist/_chunks/{useReviewWorkflows-dRt5dIvq.mjs → useReviewWorkflows-Xn3L8MI8.mjs} +2 -2
- package/dist/_chunks/{useReviewWorkflows-dRt5dIvq.mjs.map → useReviewWorkflows-Xn3L8MI8.mjs.map} +1 -1
- package/dist/_chunks/{useReviewWorkflows-5qy9NvVQ.js → useReviewWorkflows-vusjQAH8.js} +2 -2
- package/dist/_chunks/{useReviewWorkflows-5qy9NvVQ.js.map → useReviewWorkflows-vusjQAH8.js.map} +1 -1
- package/dist/_chunks/{useWebhooks-vTIGfLb3.mjs → useWebhooks-FgW5WF9_.mjs} +2 -2
- package/dist/_chunks/{useWebhooks-vTIGfLb3.mjs.map → useWebhooks-FgW5WF9_.mjs.map} +1 -1
- package/dist/_chunks/{useWebhooks-dYRnNCuh.js → useWebhooks-yfZ95LU8.js} +2 -2
- package/dist/_chunks/{useWebhooks-dYRnNCuh.js.map → useWebhooks-yfZ95LU8.js.map} +1 -1
- package/dist/_chunks/{validateWorkflow-X-QPLokm.js → validateWorkflow-4DkGfvCG.js} +2 -2
- package/dist/_chunks/{validateWorkflow-X-QPLokm.js.map → validateWorkflow-4DkGfvCG.js.map} +1 -1
- package/dist/_chunks/{validateWorkflow-0zJgqQGY.mjs → validateWorkflow-JGLqIx3z.mjs} +2 -2
- package/dist/_chunks/{validateWorkflow-0zJgqQGY.mjs.map → validateWorkflow-JGLqIx3z.mjs.map} +1 -1
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/shared/contracts/user.d.ts +1 -1
- package/dist/shared/contracts/user.d.ts.map +1 -1
- package/package.json +13 -13
- package/dist/_chunks/index-NCt4-R5U.mjs.map +0 -1
- package/dist/_chunks/index-hLwLJn2b.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreatePage-y4ooh8yo.js","sources":["../../admin/src/pages/Settings/pages/Roles/CreatePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Button,\n ContentLayout,\n Flex,\n Grid,\n GridItem,\n HeaderLayout,\n Main,\n Textarea,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport {\n CheckPagePermissions,\n Form,\n LoadingIndicatorPage,\n SettingsPageTitle,\n useNotification,\n useOverlayBlocker,\n useTracking,\n translatedErrors,\n useAPIErrorHandler,\n} from '@strapi/helper-plugin';\nimport { ArrowLeft } from '@strapi/icons';\nimport { format } from 'date-fns';\nimport { Formik, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useHistory, useRouteMatch } from 'react-router-dom';\nimport styled from 'styled-components';\nimport * as yup from 'yup';\n\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport {\n useCreateRoleMutation,\n useGetRolePermissionLayoutQuery,\n useGetRolePermissionsQuery,\n useUpdateRolePermissionsMutation,\n} from '../../../../services/users';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\n\nimport { Permissions, PermissionsAPI } from './components/Permissions';\n\n/* -------------------------------------------------------------------------------------------------\n * CreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst CREATE_SCHEMA = yup.object().shape({\n name: yup.string().required(translatedErrors.required),\n description: yup.string().required(translatedErrors.required),\n});\n\n/**\n * TODO: be nice if we could just infer this from the schema\n */\ninterface CreateRoleFormValues {\n name: string;\n description: string;\n}\n\n/**\n * TODO: this whole section of the app needs refactoring. Using a ref to\n * manage the state of the child is nonsensical.\n */\nconst CreatePage = () => {\n const match = useRouteMatch<{ id: string }>('/settings/roles/duplicate/:id');\n const toggleNotification = useNotification();\n const { lockApp, unlockApp } = useOverlayBlocker();\n const { formatMessage } = useIntl();\n const { replace } = useHistory();\n const permissionsRef = React.useRef<PermissionsAPI>(null);\n const { trackUsage } = useTracking();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const id = match?.params.id ?? null;\n\n const { isLoading: isLoadingPermissionsLayout, data: permissionsLayout } =\n useGetRolePermissionLayoutQuery({\n /**\n * Role here is a query param so if there's no role we pass an empty string\n * which returns us a default layout.\n */\n role: id ?? '',\n });\n\n /**\n * We need this so if we're cloning a role, we can fetch\n * the current permissions that role has.\n */\n const { data: rolePermissions, isLoading: isLoadingRole } = useGetRolePermissionsQuery(\n {\n id: id!,\n },\n {\n skip: !id,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [createRole] = useCreateRoleMutation();\n const [updateRolePermissions] = useUpdateRolePermissionsMutation();\n\n const handleCreateRoleSubmit = async (\n data: CreateRoleFormValues,\n formik: FormikHelpers<CreateRoleFormValues>\n ) => {\n try {\n // @ts-expect-error – fixed in V5\n lockApp();\n\n if (id) {\n trackUsage('willDuplicateRole');\n } else {\n trackUsage('willCreateNewRole');\n }\n\n const res = await createRole(data);\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n const { permissionsToSend } = permissionsRef.current?.getPermissions() ?? {};\n\n if (res.data.id && Array.isArray(permissionsToSend) && permissionsToSend.length > 0) {\n const updateRes = await updateRolePermissions({\n id: res.data.id,\n permissions: permissionsToSend,\n });\n\n if ('error' in updateRes) {\n if (isBaseQueryError(updateRes.error) && updateRes.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(updateRes.error));\n } else {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(updateRes.error),\n });\n }\n\n return;\n }\n }\n\n toggleNotification({\n type: 'success',\n message: { id: 'Settings.roles.created', defaultMessage: 'created' },\n });\n\n replace(`/settings/roles/${res.data.id}`);\n } catch (err) {\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error' },\n });\n } finally {\n // @ts-expect-error – fixed in V5\n unlockApp();\n }\n };\n\n return (\n <Main>\n <SettingsPageTitle name=\"Roles\" />\n <Formik\n initialValues={\n {\n name: '',\n description: `${formatMessage({\n id: 'Settings.roles.form.created',\n defaultMessage: 'Created',\n })} ${format(new Date(), 'PPP')}`,\n } satisfies CreateRoleFormValues\n }\n onSubmit={handleCreateRoleSubmit}\n validationSchema={CREATE_SCHEMA}\n validateOnChange={false}\n >\n {({ values, errors, handleReset, handleChange, isSubmitting }) => (\n <Form>\n <>\n <HeaderLayout\n primaryAction={\n <Flex gap={2}>\n <Button\n variant=\"secondary\"\n onClick={() => {\n handleReset();\n permissionsRef.current?.resetForm();\n }}\n size=\"L\"\n >\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </Button>\n <Button type=\"submit\" loading={isSubmitting} size=\"L\">\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n }\n title={formatMessage({\n id: 'Settings.roles.create.title',\n defaultMessage: 'Create a role',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.create.description',\n defaultMessage: 'Define the rights given to the role',\n })}\n navigationAction={\n // @ts-expect-error – the props from the component passed as `as` are not correctly inferred.\n <Link as={NavLink} startIcon={<ArrowLeft />} to=\"/settings/roles\">\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n <ContentLayout>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex justifyContent=\"space-between\">\n <Box>\n <Box>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n </Box>\n <Box>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.roles.form.description',\n defaultMessage: 'Name and description of the role',\n })}\n </Typography>\n </Box>\n </Box>\n <UsersRoleNumber>\n {formatMessage(\n {\n id: 'Settings.roles.form.button.users-with-role',\n defaultMessage:\n '{number, plural, =0 {# users} one {# user} other {# users}} with this role',\n },\n { number: 0 }\n )}\n </UsersRoleNumber>\n </Flex>\n <Grid gap={4}>\n <GridItem col={6}>\n <TextInput\n name=\"name\"\n error={errors.name && formatMessage({ id: errors.name })}\n label={formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n onChange={handleChange}\n required\n value={values.name}\n />\n </GridItem>\n <GridItem col={6}>\n <Textarea\n label={formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n id=\"description\"\n error={errors.description && formatMessage({ id: errors.description })}\n onChange={handleChange}\n >\n {values.description}\n </Textarea>\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n {!isLoadingPermissionsLayout && !isLoadingRole && permissionsLayout ? (\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={false}\n ref={permissionsRef}\n permissions={rolePermissions}\n layout={permissionsLayout}\n />\n </Box>\n ) : (\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <LoadingIndicatorPage />\n </Box>\n )}\n </Flex>\n </ContentLayout>\n </>\n </Form>\n )}\n </Formik>\n </Main>\n );\n};\n\nconst UsersRoleNumber = styled.div`\n border: 1px solid ${({ theme }) => theme.colors.primary200};\n background: ${({ theme }) => theme.colors.primary100};\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[4]}`};\n color: ${({ theme }) => theme.colors.primary600};\n border-radius: ${({ theme }) => theme.borderRadius};\n font-size: ${12 / 16}rem;\n font-weight: bold;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedCreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedCreatePage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.roles.create\n );\n\n return (\n <CheckPagePermissions permissions={permissions}>\n <CreatePage />\n </CheckPagePermissions>\n );\n};\n\nexport { CreatePage, ProtectedCreatePage };\n"],"names":["yup","translatedErrors","useRouteMatch","useNotification","useOverlayBlocker","useIntl","useHistory","React","useTracking","useAPIErrorHandler","useGetRolePermissionLayoutQuery","useGetRolePermissionsQuery","useCreateRoleMutation","useUpdateRolePermissionsMutation","formik","isBaseQueryError","Main","jsx","SettingsPageTitle","Formik","format","Form","jsxs","Fragment","HeaderLayout","Flex","Button","Link","NavLink","ArrowLeft","ContentLayout","Box","Typography","Grid","GridItem","TextInput","Textarea","Permissions","LoadingIndicatorPage","styled","useTypedSelector","CheckPagePermissions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CreatePage-0azPmoEO.js","sources":["../../admin/src/pages/Settings/pages/Roles/CreatePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Button,\n ContentLayout,\n Flex,\n Grid,\n GridItem,\n HeaderLayout,\n Main,\n Textarea,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport {\n CheckPagePermissions,\n Form,\n LoadingIndicatorPage,\n SettingsPageTitle,\n useNotification,\n useOverlayBlocker,\n useTracking,\n translatedErrors,\n useAPIErrorHandler,\n} from '@strapi/helper-plugin';\nimport { ArrowLeft } from '@strapi/icons';\nimport { format } from 'date-fns';\nimport { Formik, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useHistory, useRouteMatch } from 'react-router-dom';\nimport styled from 'styled-components';\nimport * as yup from 'yup';\n\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport {\n useCreateRoleMutation,\n useGetRolePermissionLayoutQuery,\n useGetRolePermissionsQuery,\n useUpdateRolePermissionsMutation,\n} from '../../../../services/users';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\n\nimport { Permissions, PermissionsAPI } from './components/Permissions';\n\n/* -------------------------------------------------------------------------------------------------\n * CreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst CREATE_SCHEMA = yup.object().shape({\n name: yup.string().required(translatedErrors.required),\n description: yup.string().required(translatedErrors.required),\n});\n\n/**\n * TODO: be nice if we could just infer this from the schema\n */\ninterface CreateRoleFormValues {\n name: string;\n description: string;\n}\n\n/**\n * TODO: this whole section of the app needs refactoring. Using a ref to\n * manage the state of the child is nonsensical.\n */\nconst CreatePage = () => {\n const match = useRouteMatch<{ id: string }>('/settings/roles/duplicate/:id');\n const toggleNotification = useNotification();\n const { lockApp, unlockApp } = useOverlayBlocker();\n const { formatMessage } = useIntl();\n const { replace } = useHistory();\n const permissionsRef = React.useRef<PermissionsAPI>(null);\n const { trackUsage } = useTracking();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const id = match?.params.id ?? null;\n\n const { isLoading: isLoadingPermissionsLayout, data: permissionsLayout } =\n useGetRolePermissionLayoutQuery({\n /**\n * Role here is a query param so if there's no role we pass an empty string\n * which returns us a default layout.\n */\n role: id ?? '',\n });\n\n /**\n * We need this so if we're cloning a role, we can fetch\n * the current permissions that role has.\n */\n const { data: rolePermissions, isLoading: isLoadingRole } = useGetRolePermissionsQuery(\n {\n id: id!,\n },\n {\n skip: !id,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [createRole] = useCreateRoleMutation();\n const [updateRolePermissions] = useUpdateRolePermissionsMutation();\n\n const handleCreateRoleSubmit = async (\n data: CreateRoleFormValues,\n formik: FormikHelpers<CreateRoleFormValues>\n ) => {\n try {\n // @ts-expect-error – fixed in V5\n lockApp();\n\n if (id) {\n trackUsage('willDuplicateRole');\n } else {\n trackUsage('willCreateNewRole');\n }\n\n const res = await createRole(data);\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n const { permissionsToSend } = permissionsRef.current?.getPermissions() ?? {};\n\n if (res.data.id && Array.isArray(permissionsToSend) && permissionsToSend.length > 0) {\n const updateRes = await updateRolePermissions({\n id: res.data.id,\n permissions: permissionsToSend,\n });\n\n if ('error' in updateRes) {\n if (isBaseQueryError(updateRes.error) && updateRes.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(updateRes.error));\n } else {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(updateRes.error),\n });\n }\n\n return;\n }\n }\n\n toggleNotification({\n type: 'success',\n message: { id: 'Settings.roles.created', defaultMessage: 'created' },\n });\n\n replace(`/settings/roles/${res.data.id}`);\n } catch (err) {\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error' },\n });\n } finally {\n // @ts-expect-error – fixed in V5\n unlockApp();\n }\n };\n\n return (\n <Main>\n <SettingsPageTitle name=\"Roles\" />\n <Formik\n initialValues={\n {\n name: '',\n description: `${formatMessage({\n id: 'Settings.roles.form.created',\n defaultMessage: 'Created',\n })} ${format(new Date(), 'PPP')}`,\n } satisfies CreateRoleFormValues\n }\n onSubmit={handleCreateRoleSubmit}\n validationSchema={CREATE_SCHEMA}\n validateOnChange={false}\n >\n {({ values, errors, handleReset, handleChange, isSubmitting }) => (\n <Form>\n <>\n <HeaderLayout\n primaryAction={\n <Flex gap={2}>\n <Button\n variant=\"secondary\"\n onClick={() => {\n handleReset();\n permissionsRef.current?.resetForm();\n }}\n size=\"L\"\n >\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </Button>\n <Button type=\"submit\" loading={isSubmitting} size=\"L\">\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n }\n title={formatMessage({\n id: 'Settings.roles.create.title',\n defaultMessage: 'Create a role',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.create.description',\n defaultMessage: 'Define the rights given to the role',\n })}\n navigationAction={\n // @ts-expect-error – the props from the component passed as `as` are not correctly inferred.\n <Link as={NavLink} startIcon={<ArrowLeft />} to=\"/settings/roles\">\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n <ContentLayout>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex justifyContent=\"space-between\">\n <Box>\n <Box>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n </Box>\n <Box>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.roles.form.description',\n defaultMessage: 'Name and description of the role',\n })}\n </Typography>\n </Box>\n </Box>\n <UsersRoleNumber>\n {formatMessage(\n {\n id: 'Settings.roles.form.button.users-with-role',\n defaultMessage:\n '{number, plural, =0 {# users} one {# user} other {# users}} with this role',\n },\n { number: 0 }\n )}\n </UsersRoleNumber>\n </Flex>\n <Grid gap={4}>\n <GridItem col={6}>\n <TextInput\n name=\"name\"\n error={errors.name && formatMessage({ id: errors.name })}\n label={formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n onChange={handleChange}\n required\n value={values.name}\n />\n </GridItem>\n <GridItem col={6}>\n <Textarea\n label={formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n id=\"description\"\n error={errors.description && formatMessage({ id: errors.description })}\n onChange={handleChange}\n >\n {values.description}\n </Textarea>\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n {!isLoadingPermissionsLayout && !isLoadingRole && permissionsLayout ? (\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={false}\n ref={permissionsRef}\n permissions={rolePermissions}\n layout={permissionsLayout}\n />\n </Box>\n ) : (\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <LoadingIndicatorPage />\n </Box>\n )}\n </Flex>\n </ContentLayout>\n </>\n </Form>\n )}\n </Formik>\n </Main>\n );\n};\n\nconst UsersRoleNumber = styled.div`\n border: 1px solid ${({ theme }) => theme.colors.primary200};\n background: ${({ theme }) => theme.colors.primary100};\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[4]}`};\n color: ${({ theme }) => theme.colors.primary600};\n border-radius: ${({ theme }) => theme.borderRadius};\n font-size: ${12 / 16}rem;\n font-weight: bold;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedCreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedCreatePage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.roles.create\n );\n\n return (\n <CheckPagePermissions permissions={permissions}>\n <CreatePage />\n </CheckPagePermissions>\n );\n};\n\nexport { CreatePage, ProtectedCreatePage };\n"],"names":["yup","translatedErrors","useRouteMatch","useNotification","useOverlayBlocker","useIntl","useHistory","React","useTracking","useAPIErrorHandler","useGetRolePermissionLayoutQuery","useGetRolePermissionsQuery","useCreateRoleMutation","useUpdateRolePermissionsMutation","formik","isBaseQueryError","Main","jsx","SettingsPageTitle","Formik","format","Form","jsxs","Fragment","HeaderLayout","Flex","Button","Link","NavLink","ArrowLeft","ContentLayout","Box","Typography","Grid","GridItem","TextInput","Textarea","Permissions","LoadingIndicatorPage","styled","useTypedSelector","CheckPagePermissions"],"mappings":"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"}
|
|
@@ -9,14 +9,14 @@ const formik = require("formik");
|
|
|
9
9
|
const reactIntl = require("react-intl");
|
|
10
10
|
const reactRedux = require("react-redux");
|
|
11
11
|
const reactRouterDom = require("react-router-dom");
|
|
12
|
-
const useAdminRoles = require("./useAdminRoles-
|
|
13
|
-
const useContentTypes = require("./useContentTypes-
|
|
14
|
-
const validateWorkflow = require("./validateWorkflow-
|
|
15
|
-
const index = require("./index-
|
|
16
|
-
const Layout = require("./Layout-
|
|
12
|
+
const useAdminRoles = require("./useAdminRoles-MjR-VmL_.js");
|
|
13
|
+
const useContentTypes = require("./useContentTypes-dP0t6DnS.js");
|
|
14
|
+
const validateWorkflow = require("./validateWorkflow-4DkGfvCG.js");
|
|
15
|
+
const index = require("./index-Ts0i8jmH.js");
|
|
16
|
+
const Layout = require("./Layout-cW_d_wLg.js");
|
|
17
17
|
const LimitsModal = require("./LimitsModal-gq7jwfap.js");
|
|
18
18
|
const constants = require("./constants-L1I-Y-RJ.js");
|
|
19
|
-
const useReviewWorkflows = require("./useReviewWorkflows-
|
|
19
|
+
const useReviewWorkflows = require("./useReviewWorkflows-vusjQAH8.js");
|
|
20
20
|
require("styled-components");
|
|
21
21
|
require("prop-types");
|
|
22
22
|
require("@strapi/design-system/v2");
|
|
@@ -79,7 +79,7 @@ require("lodash/uniqBy");
|
|
|
79
79
|
require("lodash/unset");
|
|
80
80
|
require("lodash/isArray");
|
|
81
81
|
require("date-fns/parseISO");
|
|
82
|
-
require("./reviewWorkflows-
|
|
82
|
+
require("./reviewWorkflows-VYHOVjTk.js");
|
|
83
83
|
function _interopNamespace(e) {
|
|
84
84
|
if (e && e.__esModule)
|
|
85
85
|
return e;
|
|
@@ -330,4 +330,4 @@ const ReviewWorkflowsCreatePage = () => {
|
|
|
330
330
|
] });
|
|
331
331
|
};
|
|
332
332
|
exports.ReviewWorkflowsCreatePage = ReviewWorkflowsCreatePage;
|
|
333
|
-
//# sourceMappingURL=CreatePage-
|
|
333
|
+
//# sourceMappingURL=CreatePage-GlDbH1lS.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreatePage-twifSYga.js","sources":["../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/CreatePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Button, Flex, Loader, Typography } from '@strapi/design-system';\nimport { ConfirmDialog, useAPIErrorHandler, useNotification } from '@strapi/helper-plugin';\nimport { Check } from '@strapi/icons';\nimport { useFormik, Form, FormikProvider, FormikErrors } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n\nimport { useAdminRoles } from '../../../../../../../admin/src/hooks/useAdminRoles';\nimport { useContentTypes } from '../../../../../../../admin/src/hooks/useContentTypes';\nimport { useInjectReducer } from '../../../../../../../admin/src/hooks/useInjectReducer';\nimport { isBaseQueryError } from '../../../../../../../admin/src/utils/baseQuery';\nimport { useLicenseLimits } from '../../../../hooks/useLicenseLimits';\n\nimport {\n addStage,\n resetWorkflow,\n setContentTypes,\n setIsLoading,\n setRoles,\n setWorkflows,\n} from './actions';\nimport * as Layout from './components/Layout';\nimport { LimitsModal } from './components/LimitsModal';\nimport { Stages } from './components/Stages';\nimport { WorkflowAttributes } from './components/WorkflowAttributes';\nimport {\n CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME,\n CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME,\n REDUX_NAMESPACE,\n} from './constants';\nimport { useReviewWorkflows } from './hooks/useReviewWorkflows';\nimport { CurrentWorkflow, reducer } from './reducer';\nimport {\n selectIsLoading,\n selectIsWorkflowDirty,\n selectCurrentWorkflow,\n selectRoles,\n} from './selectors';\nimport { validateWorkflow } from './utils/validateWorkflow';\n\nexport const ReviewWorkflowsCreatePage = () => {\n const { formatMessage } = useIntl();\n const { push } = useHistory();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n const dispatch = useDispatch();\n const toggleNotification = useNotification();\n const { collectionTypes, singleTypes, isLoading: isLoadingContentTypes } = useContentTypes();\n const { isLoading: isLoadingWorkflow, meta, workflows, createWorkflow } = useReviewWorkflows();\n const { isLoading: isLoadingRoles, roles: serverRoles } = useAdminRoles();\n const isLoading = useSelector(selectIsLoading);\n const currentWorkflowIsDirty = useSelector(selectIsWorkflowDirty);\n const currentWorkflow = useSelector(selectCurrentWorkflow);\n const roles = useSelector(selectRoles);\n const [showLimitModal, setShowLimitModal] = React.useState<'workflow' | 'stage' | null>(null);\n const { isLoading: isLicenseLoading, getFeature } = useLicenseLimits();\n const [initialErrors, setInitialErrors] = React.useState<FormikErrors<CurrentWorkflow>>();\n const [savePrompts, setSavePrompts] = React.useState<{ hasReassignedContentTypes?: boolean }>({});\n\n const limits = getFeature<string>('review-workflows');\n const numberOfWorkflows = limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME];\n const stagesPerWorkflow = limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME];\n const contentTypesFromOtherWorkflows = workflows?.flatMap((workflow) => workflow.contentTypes);\n\n const submitForm = async () => {\n setSavePrompts({});\n\n try {\n const res = await createWorkflow({\n // @ts-expect-error – currentWorkflow will have already been validated by formik before it gets here.\n data: currentWorkflow,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n setInitialErrors(formatValidationErrors(res.error));\n }\n\n toggleNotification({\n type: 'warning',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: {\n id: 'Settings.review-workflows.create.page.notification.success',\n defaultMessage: 'Workflow successfully created',\n },\n });\n\n push(`/settings/review-workflows/${res.data.id}`);\n } catch (error) {\n toggleNotification({\n type: 'warning',\n message: {\n id: 'Settings.review-workflows.create.page.notification.error',\n defaultMessage: 'An error occurred',\n },\n });\n }\n };\n\n const handleConfirmDeleteDialog = async () => {\n await submitForm();\n };\n\n const handleConfirmClose = () => {\n setSavePrompts({});\n };\n\n const formik = useFormik({\n enableReinitialize: true,\n initialErrors,\n initialValues: currentWorkflow,\n async onSubmit() {\n const isContentTypeReassignment = currentWorkflow.contentTypes?.some((contentType) =>\n contentTypesFromOtherWorkflows?.includes(contentType)\n );\n\n /**\n * If the current license has a limit, check if the total count of workflows\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n\n if (meta && numberOfWorkflows && meta?.workflowCount >= parseInt(numberOfWorkflows, 10)) {\n setShowLimitModal('workflow');\n\n /**\n * If the current license has a limit, check if the total count of stages\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n } else if (\n currentWorkflow.stages &&\n stagesPerWorkflow &&\n currentWorkflow.stages.length >= parseInt(stagesPerWorkflow, 10)\n ) {\n setShowLimitModal('stage');\n } else if (isContentTypeReassignment) {\n setSavePrompts((prev) => ({ ...prev, hasReassignedContentTypes: true }));\n } else {\n submitForm();\n }\n },\n validate(values) {\n return validateWorkflow({ values, formatMessage });\n },\n });\n\n useInjectReducer(REDUX_NAMESPACE, reducer);\n\n React.useEffect(() => {\n dispatch(resetWorkflow());\n\n if (!isLoadingWorkflow && workflows) {\n dispatch(setWorkflows({ workflows }));\n }\n\n if (!isLoadingContentTypes) {\n dispatch(setContentTypes({ collectionTypes, singleTypes }));\n }\n\n if (!isLoadingRoles) {\n dispatch(setRoles(serverRoles));\n }\n\n dispatch(setIsLoading(isLoadingContentTypes || isLoadingRoles));\n\n // Create an empty default stage\n dispatch(\n addStage({\n name: '',\n })\n );\n }, [\n collectionTypes,\n dispatch,\n isLoadingContentTypes,\n isLoadingRoles,\n isLoadingWorkflow,\n serverRoles,\n singleTypes,\n workflows,\n ]);\n\n /**\n * If the current license has a limit:\n * check if the total count of workflows or stages exceeds that limit and display\n * the limits modal on page load. It can be closed by the user, but the\n * API will throw an error in case they try to create a new workflow or update the\n * stages.\n *\n * If the current license does not have a limit (e.g. offline license):\n * do nothing (for now). In case they are trying to create the 201st workflow/ stage\n * the API will throw an error.\n *\n */\n React.useEffect(() => {\n if (!isLoadingWorkflow && !isLicenseLoading) {\n if (\n currentWorkflow.stages &&\n limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME] &&\n stagesPerWorkflow &&\n currentWorkflow.stages.length >= parseInt(stagesPerWorkflow, 10)\n ) {\n setShowLimitModal('stage');\n }\n }\n }, [isLicenseLoading, isLoadingWorkflow, limits, currentWorkflow.stages, stagesPerWorkflow]);\n\n React.useEffect(() => {\n if (!isLoading && roles?.length === 0) {\n toggleNotification({\n blockTransition: true,\n type: 'warning',\n message: formatMessage({\n id: 'Settings.review-workflows.stage.permissions.noPermissions.description',\n defaultMessage: 'You don’t have the permission to see roles',\n }),\n });\n }\n }, [formatMessage, isLoading, roles, toggleNotification]);\n\n return (\n <>\n <Layout.DragLayerRendered />\n <FormikProvider value={formik}>\n <Form onSubmit={formik.handleSubmit}>\n <Layout.Header\n navigationAction={<Layout.Back href=\"/settings/review-workflows\" />}\n primaryAction={\n <Button\n startIcon={<Check />}\n type=\"submit\"\n size=\"M\"\n disabled={!currentWorkflowIsDirty}\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n }\n title={formatMessage({\n id: 'Settings.review-workflows.create.page.title',\n defaultMessage: 'Create Review Workflow',\n })}\n subtitle={formatMessage(\n {\n id: 'Settings.review-workflows.page.subtitle',\n defaultMessage: '{count, plural, one {# stage} other {# stages}}',\n },\n { count: currentWorkflow?.stages?.length ?? 0 }\n )}\n />\n <Layout.Root>\n <Flex alignItems=\"stretch\" direction=\"column\" gap={7}>\n {isLoading ? (\n <Loader>\n {formatMessage({\n id: 'Settings.review-workflows.page.isLoading',\n defaultMessage: 'Workflow is loading',\n })}\n </Loader>\n ) : (\n <Flex alignItems=\"stretch\" direction=\"column\" gap={7}>\n <WorkflowAttributes />\n <Stages stages={formik.values?.stages} />\n </Flex>\n )}\n </Flex>\n </Layout.Root>\n </Form>\n </FormikProvider>\n\n <ConfirmDialog.Root\n isConfirmButtonLoading={isLoading}\n isOpen={Object.keys(savePrompts).length > 0}\n onToggleDialog={handleConfirmClose}\n onConfirm={handleConfirmDeleteDialog}\n >\n <ConfirmDialog.Body>\n <Flex direction=\"column\" gap={5}>\n {savePrompts.hasReassignedContentTypes && (\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage(\n {\n id: 'Settings.review-workflows.page.delete.confirm.contentType.body',\n defaultMessage:\n '{count} {count, plural, one {content-type} other {content-types}} {count, plural, one {is} other {are}} already mapped to {count, plural, one {another workflow} other {other workflows}}. If you save changes, {count, plural, one {this} other {these}} {count, plural, one {content-type} other {{count} content-types}} will no more be mapped to the {count, plural, one {another workflow} other {other workflows}} and all corresponding information will be removed.',\n },\n {\n count: contentTypesFromOtherWorkflows?.filter((contentType) =>\n currentWorkflow.contentTypes?.includes(contentType)\n ).length,\n }\n )}\n </Typography>\n )}\n\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage({\n id: 'Settings.review-workflows.page.delete.confirm.confirm',\n defaultMessage: 'Are you sure you want to save?',\n })}\n </Typography>\n </Flex>\n </ConfirmDialog.Body>\n </ConfirmDialog.Root>\n\n <LimitsModal.Root\n isOpen={showLimitModal === 'workflow'}\n onClose={() => setShowLimitModal(null)}\n >\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.workflows.limit.title',\n defaultMessage: 'You’ve reached the limit of workflows in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.workflows.limit.body',\n defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n\n <LimitsModal.Root isOpen={showLimitModal === 'stage'} onClose={() => setShowLimitModal(null)}>\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.stages.limit.title',\n defaultMessage: 'You have reached the limit of stages for this workflow in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.stages.limit.body',\n defaultMessage: 'Try deleting some stages or contact Sales to enable more stages.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n </>\n );\n};\n"],"names":["useIntl","useHistory","useAPIErrorHandler","useDispatch","useNotification","useContentTypes","useReviewWorkflows","useAdminRoles","useSelector","selectIsLoading","selectIsWorkflowDirty","selectCurrentWorkflow","selectRoles","React","useLicenseLimits","CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME","CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME","isBaseQueryError","formik","useFormik","validateWorkflow","useInjectReducer","REDUX_NAMESPACE","reducer","resetWorkflow","setWorkflows","setContentTypes","setRoles","setIsLoading","addStage","jsxs","Fragment","jsx","Layout.DragLayerRendered","FormikProvider","Form","Layout.Header","Layout.Back","Button","Check","Layout.Root","Flex","Loader","WorkflowAttributes","Stages","ConfirmDialog","Typography","LimitsModal"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CreatePage-GlDbH1lS.js","sources":["../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/CreatePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Button, Flex, Loader, Typography } from '@strapi/design-system';\nimport { ConfirmDialog, useAPIErrorHandler, useNotification } from '@strapi/helper-plugin';\nimport { Check } from '@strapi/icons';\nimport { useFormik, Form, FormikProvider, FormikErrors } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n\nimport { useAdminRoles } from '../../../../../../../admin/src/hooks/useAdminRoles';\nimport { useContentTypes } from '../../../../../../../admin/src/hooks/useContentTypes';\nimport { useInjectReducer } from '../../../../../../../admin/src/hooks/useInjectReducer';\nimport { isBaseQueryError } from '../../../../../../../admin/src/utils/baseQuery';\nimport { useLicenseLimits } from '../../../../hooks/useLicenseLimits';\n\nimport {\n addStage,\n resetWorkflow,\n setContentTypes,\n setIsLoading,\n setRoles,\n setWorkflows,\n} from './actions';\nimport * as Layout from './components/Layout';\nimport { LimitsModal } from './components/LimitsModal';\nimport { Stages } from './components/Stages';\nimport { WorkflowAttributes } from './components/WorkflowAttributes';\nimport {\n CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME,\n CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME,\n REDUX_NAMESPACE,\n} from './constants';\nimport { useReviewWorkflows } from './hooks/useReviewWorkflows';\nimport { CurrentWorkflow, reducer } from './reducer';\nimport {\n selectIsLoading,\n selectIsWorkflowDirty,\n selectCurrentWorkflow,\n selectRoles,\n} from './selectors';\nimport { validateWorkflow } from './utils/validateWorkflow';\n\nexport const ReviewWorkflowsCreatePage = () => {\n const { formatMessage } = useIntl();\n const { push } = useHistory();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n const dispatch = useDispatch();\n const toggleNotification = useNotification();\n const { collectionTypes, singleTypes, isLoading: isLoadingContentTypes } = useContentTypes();\n const { isLoading: isLoadingWorkflow, meta, workflows, createWorkflow } = useReviewWorkflows();\n const { isLoading: isLoadingRoles, roles: serverRoles } = useAdminRoles();\n const isLoading = useSelector(selectIsLoading);\n const currentWorkflowIsDirty = useSelector(selectIsWorkflowDirty);\n const currentWorkflow = useSelector(selectCurrentWorkflow);\n const roles = useSelector(selectRoles);\n const [showLimitModal, setShowLimitModal] = React.useState<'workflow' | 'stage' | null>(null);\n const { isLoading: isLicenseLoading, getFeature } = useLicenseLimits();\n const [initialErrors, setInitialErrors] = React.useState<FormikErrors<CurrentWorkflow>>();\n const [savePrompts, setSavePrompts] = React.useState<{ hasReassignedContentTypes?: boolean }>({});\n\n const limits = getFeature<string>('review-workflows');\n const numberOfWorkflows = limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME];\n const stagesPerWorkflow = limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME];\n const contentTypesFromOtherWorkflows = workflows?.flatMap((workflow) => workflow.contentTypes);\n\n const submitForm = async () => {\n setSavePrompts({});\n\n try {\n const res = await createWorkflow({\n // @ts-expect-error – currentWorkflow will have already been validated by formik before it gets here.\n data: currentWorkflow,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n setInitialErrors(formatValidationErrors(res.error));\n }\n\n toggleNotification({\n type: 'warning',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: {\n id: 'Settings.review-workflows.create.page.notification.success',\n defaultMessage: 'Workflow successfully created',\n },\n });\n\n push(`/settings/review-workflows/${res.data.id}`);\n } catch (error) {\n toggleNotification({\n type: 'warning',\n message: {\n id: 'Settings.review-workflows.create.page.notification.error',\n defaultMessage: 'An error occurred',\n },\n });\n }\n };\n\n const handleConfirmDeleteDialog = async () => {\n await submitForm();\n };\n\n const handleConfirmClose = () => {\n setSavePrompts({});\n };\n\n const formik = useFormik({\n enableReinitialize: true,\n initialErrors,\n initialValues: currentWorkflow,\n async onSubmit() {\n const isContentTypeReassignment = currentWorkflow.contentTypes?.some((contentType) =>\n contentTypesFromOtherWorkflows?.includes(contentType)\n );\n\n /**\n * If the current license has a limit, check if the total count of workflows\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n\n if (meta && numberOfWorkflows && meta?.workflowCount >= parseInt(numberOfWorkflows, 10)) {\n setShowLimitModal('workflow');\n\n /**\n * If the current license has a limit, check if the total count of stages\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n } else if (\n currentWorkflow.stages &&\n stagesPerWorkflow &&\n currentWorkflow.stages.length >= parseInt(stagesPerWorkflow, 10)\n ) {\n setShowLimitModal('stage');\n } else if (isContentTypeReassignment) {\n setSavePrompts((prev) => ({ ...prev, hasReassignedContentTypes: true }));\n } else {\n submitForm();\n }\n },\n validate(values) {\n return validateWorkflow({ values, formatMessage });\n },\n });\n\n useInjectReducer(REDUX_NAMESPACE, reducer);\n\n React.useEffect(() => {\n dispatch(resetWorkflow());\n\n if (!isLoadingWorkflow && workflows) {\n dispatch(setWorkflows({ workflows }));\n }\n\n if (!isLoadingContentTypes) {\n dispatch(setContentTypes({ collectionTypes, singleTypes }));\n }\n\n if (!isLoadingRoles) {\n dispatch(setRoles(serverRoles));\n }\n\n dispatch(setIsLoading(isLoadingContentTypes || isLoadingRoles));\n\n // Create an empty default stage\n dispatch(\n addStage({\n name: '',\n })\n );\n }, [\n collectionTypes,\n dispatch,\n isLoadingContentTypes,\n isLoadingRoles,\n isLoadingWorkflow,\n serverRoles,\n singleTypes,\n workflows,\n ]);\n\n /**\n * If the current license has a limit:\n * check if the total count of workflows or stages exceeds that limit and display\n * the limits modal on page load. It can be closed by the user, but the\n * API will throw an error in case they try to create a new workflow or update the\n * stages.\n *\n * If the current license does not have a limit (e.g. offline license):\n * do nothing (for now). In case they are trying to create the 201st workflow/ stage\n * the API will throw an error.\n *\n */\n React.useEffect(() => {\n if (!isLoadingWorkflow && !isLicenseLoading) {\n if (\n currentWorkflow.stages &&\n limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME] &&\n stagesPerWorkflow &&\n currentWorkflow.stages.length >= parseInt(stagesPerWorkflow, 10)\n ) {\n setShowLimitModal('stage');\n }\n }\n }, [isLicenseLoading, isLoadingWorkflow, limits, currentWorkflow.stages, stagesPerWorkflow]);\n\n React.useEffect(() => {\n if (!isLoading && roles?.length === 0) {\n toggleNotification({\n blockTransition: true,\n type: 'warning',\n message: formatMessage({\n id: 'Settings.review-workflows.stage.permissions.noPermissions.description',\n defaultMessage: 'You don’t have the permission to see roles',\n }),\n });\n }\n }, [formatMessage, isLoading, roles, toggleNotification]);\n\n return (\n <>\n <Layout.DragLayerRendered />\n <FormikProvider value={formik}>\n <Form onSubmit={formik.handleSubmit}>\n <Layout.Header\n navigationAction={<Layout.Back href=\"/settings/review-workflows\" />}\n primaryAction={\n <Button\n startIcon={<Check />}\n type=\"submit\"\n size=\"M\"\n disabled={!currentWorkflowIsDirty}\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n }\n title={formatMessage({\n id: 'Settings.review-workflows.create.page.title',\n defaultMessage: 'Create Review Workflow',\n })}\n subtitle={formatMessage(\n {\n id: 'Settings.review-workflows.page.subtitle',\n defaultMessage: '{count, plural, one {# stage} other {# stages}}',\n },\n { count: currentWorkflow?.stages?.length ?? 0 }\n )}\n />\n <Layout.Root>\n <Flex alignItems=\"stretch\" direction=\"column\" gap={7}>\n {isLoading ? (\n <Loader>\n {formatMessage({\n id: 'Settings.review-workflows.page.isLoading',\n defaultMessage: 'Workflow is loading',\n })}\n </Loader>\n ) : (\n <Flex alignItems=\"stretch\" direction=\"column\" gap={7}>\n <WorkflowAttributes />\n <Stages stages={formik.values?.stages} />\n </Flex>\n )}\n </Flex>\n </Layout.Root>\n </Form>\n </FormikProvider>\n\n <ConfirmDialog.Root\n isConfirmButtonLoading={isLoading}\n isOpen={Object.keys(savePrompts).length > 0}\n onToggleDialog={handleConfirmClose}\n onConfirm={handleConfirmDeleteDialog}\n >\n <ConfirmDialog.Body>\n <Flex direction=\"column\" gap={5}>\n {savePrompts.hasReassignedContentTypes && (\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage(\n {\n id: 'Settings.review-workflows.page.delete.confirm.contentType.body',\n defaultMessage:\n '{count} {count, plural, one {content-type} other {content-types}} {count, plural, one {is} other {are}} already mapped to {count, plural, one {another workflow} other {other workflows}}. If you save changes, {count, plural, one {this} other {these}} {count, plural, one {content-type} other {{count} content-types}} will no more be mapped to the {count, plural, one {another workflow} other {other workflows}} and all corresponding information will be removed.',\n },\n {\n count: contentTypesFromOtherWorkflows?.filter((contentType) =>\n currentWorkflow.contentTypes?.includes(contentType)\n ).length,\n }\n )}\n </Typography>\n )}\n\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage({\n id: 'Settings.review-workflows.page.delete.confirm.confirm',\n defaultMessage: 'Are you sure you want to save?',\n })}\n </Typography>\n </Flex>\n </ConfirmDialog.Body>\n </ConfirmDialog.Root>\n\n <LimitsModal.Root\n isOpen={showLimitModal === 'workflow'}\n onClose={() => setShowLimitModal(null)}\n >\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.workflows.limit.title',\n defaultMessage: 'You’ve reached the limit of workflows in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.workflows.limit.body',\n defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n\n <LimitsModal.Root isOpen={showLimitModal === 'stage'} onClose={() => setShowLimitModal(null)}>\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.stages.limit.title',\n defaultMessage: 'You have reached the limit of stages for this workflow in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.stages.limit.body',\n defaultMessage: 'Try deleting some stages or contact Sales to enable more stages.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n </>\n );\n};\n"],"names":["useIntl","useHistory","useAPIErrorHandler","useDispatch","useNotification","useContentTypes","useReviewWorkflows","useAdminRoles","useSelector","selectIsLoading","selectIsWorkflowDirty","selectCurrentWorkflow","selectRoles","React","useLicenseLimits","CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME","CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME","isBaseQueryError","formik","useFormik","validateWorkflow","useInjectReducer","REDUX_NAMESPACE","reducer","resetWorkflow","setWorkflows","setContentTypes","setRoles","setIsLoading","addStage","jsxs","Fragment","jsx","Layout.DragLayerRendered","FormikProvider","Form","Layout.Header","Layout.Back","Button","Check","Layout.Root","Flex","Loader","WorkflowAttributes","Stages","ConfirmDialog","Typography","LimitsModal"],"mappings":"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"}
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
4
|
const helperPlugin = require("@strapi/helper-plugin");
|
|
5
|
-
const index = require("./index-
|
|
6
|
-
const AuthenticatedApp = require("./AuthenticatedApp-
|
|
7
|
-
const EditPage = require("./EditPage-
|
|
5
|
+
const index = require("./index-Ts0i8jmH.js");
|
|
6
|
+
const AuthenticatedApp = require("./AuthenticatedApp-Qy5uXoF3.js");
|
|
7
|
+
const EditPage = require("./EditPage-b1mM_YNY.js");
|
|
8
8
|
require("react-dom/client");
|
|
9
9
|
require("@strapi/design-system");
|
|
10
10
|
require("invariant");
|
|
@@ -75,12 +75,12 @@ require("lodash/isArray");
|
|
|
75
75
|
require("date-fns/parseISO");
|
|
76
76
|
require("semver/functions/lt");
|
|
77
77
|
require("semver/functions/valid");
|
|
78
|
-
require("./useContentTypes-
|
|
79
|
-
require("./useWebhooks-
|
|
78
|
+
require("./useContentTypes-dP0t6DnS.js");
|
|
79
|
+
require("./useWebhooks-yfZ95LU8.js");
|
|
80
80
|
const ProtectedCreatePage = () => {
|
|
81
81
|
const permissions = index.useTypedSelector(AuthenticatedApp.selectAdminPermissions);
|
|
82
82
|
return /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPagePermissions, { permissions: permissions.settings?.webhooks.create, children: /* @__PURE__ */ jsxRuntime.jsx(EditPage.EditPage, {}) });
|
|
83
83
|
};
|
|
84
84
|
exports.CreatePage = EditPage.EditPage;
|
|
85
85
|
exports.ProtectedCreatePage = ProtectedCreatePage;
|
|
86
|
-
//# sourceMappingURL=CreatePage
|
|
86
|
+
//# sourceMappingURL=CreatePage-X7AwX0nX.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreatePage
|
|
1
|
+
{"version":3,"file":"CreatePage-X7AwX0nX.js","sources":["../../admin/src/pages/Settings/pages/Webhooks/CreatePage.tsx"],"sourcesContent":["import { CheckPagePermissions } from '@strapi/helper-plugin';\n\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { selectAdminPermissions } from '../../../../selectors';\n\nimport { EditPage } from './EditPage';\n\nconst ProtectedCreatePage = () => {\n const permissions = useTypedSelector(selectAdminPermissions);\n\n return (\n <CheckPagePermissions permissions={permissions.settings?.webhooks.create}>\n <EditPage />\n </CheckPagePermissions>\n );\n};\n\nexport { ProtectedCreatePage, EditPage as CreatePage };\n"],"names":["useTypedSelector","selectAdminPermissions","jsx","CheckPagePermissions","EditPage"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,MAAM,sBAAsB,MAAM;AAC1B,QAAA,cAAcA,uBAAiBC,iBAAAA,sBAAsB;AAGzD,SAAAC,2BAAA,IAACC,qCAAqB,aAAa,YAAY,UAAU,SAAS,QAChE,UAACD,2BAAA,IAAAE,SAAA,UAAA,CAAS,CAAA,EACZ,CAAA;AAEJ;;;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
2
|
import { CheckPagePermissions } from "@strapi/helper-plugin";
|
|
3
|
-
import { j as useTypedSelector } from "./index-
|
|
4
|
-
import { s as selectAdminPermissions } from "./AuthenticatedApp-
|
|
5
|
-
import { E as EditPage } from "./EditPage-
|
|
3
|
+
import { j as useTypedSelector } from "./index-eT0CIaDr.mjs";
|
|
4
|
+
import { s as selectAdminPermissions } from "./AuthenticatedApp-MPoeoIOU.mjs";
|
|
5
|
+
import { E as EditPage } from "./EditPage-po_MJGqG.mjs";
|
|
6
6
|
import "react-dom/client";
|
|
7
7
|
import "@strapi/design-system";
|
|
8
8
|
import "invariant";
|
|
@@ -73,8 +73,8 @@ import "lodash/isArray";
|
|
|
73
73
|
import "date-fns/parseISO";
|
|
74
74
|
import "semver/functions/lt";
|
|
75
75
|
import "semver/functions/valid";
|
|
76
|
-
import "./useContentTypes-
|
|
77
|
-
import "./useWebhooks-
|
|
76
|
+
import "./useContentTypes-buqO4eWt.mjs";
|
|
77
|
+
import "./useWebhooks-FgW5WF9_.mjs";
|
|
78
78
|
const ProtectedCreatePage = () => {
|
|
79
79
|
const permissions = useTypedSelector(selectAdminPermissions);
|
|
80
80
|
return /* @__PURE__ */ jsx(CheckPagePermissions, { permissions: permissions.settings?.webhooks.create, children: /* @__PURE__ */ jsx(EditPage, {}) });
|
|
@@ -83,4 +83,4 @@ export {
|
|
|
83
83
|
EditPage as CreatePage,
|
|
84
84
|
ProtectedCreatePage
|
|
85
85
|
};
|
|
86
|
-
//# sourceMappingURL=CreatePage-
|
|
86
|
+
//# sourceMappingURL=CreatePage-hzhKSiJ0.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreatePage-
|
|
1
|
+
{"version":3,"file":"CreatePage-hzhKSiJ0.mjs","sources":["../../admin/src/pages/Settings/pages/Webhooks/CreatePage.tsx"],"sourcesContent":["import { CheckPagePermissions } from '@strapi/helper-plugin';\n\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { selectAdminPermissions } from '../../../../selectors';\n\nimport { EditPage } from './EditPage';\n\nconst ProtectedCreatePage = () => {\n const permissions = useTypedSelector(selectAdminPermissions);\n\n return (\n <CheckPagePermissions permissions={permissions.settings?.webhooks.create}>\n <EditPage />\n </CheckPagePermissions>\n );\n};\n\nexport { ProtectedCreatePage, EditPage as CreatePage };\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,MAAM,sBAAsB,MAAM;AAC1B,QAAA,cAAc,iBAAiB,sBAAsB;AAGzD,SAAA,oBAAC,wBAAqB,aAAa,YAAY,UAAU,SAAS,QAChE,UAAC,oBAAA,UAAA,CAAS,CAAA,EACZ,CAAA;AAEJ;"}
|
|
@@ -10,8 +10,8 @@ import { useIntl } from "react-intl";
|
|
|
10
10
|
import { useRouteMatch, useHistory, NavLink } from "react-router-dom";
|
|
11
11
|
import styled from "styled-components";
|
|
12
12
|
import * as yup from "yup";
|
|
13
|
-
import { j as useTypedSelector, A as useGetRolePermissionLayoutQuery, B as useGetRolePermissionsQuery, D as useCreateRoleMutation, E as useUpdateRolePermissionsMutation, x as isBaseQueryError } from "./index-
|
|
14
|
-
import { P as Permissions } from "./Permissions-
|
|
13
|
+
import { j as useTypedSelector, A as useGetRolePermissionLayoutQuery, B as useGetRolePermissionsQuery, D as useCreateRoleMutation, E as useUpdateRolePermissionsMutation, x as isBaseQueryError } from "./index-eT0CIaDr.mjs";
|
|
14
|
+
import { P as Permissions } from "./Permissions-UlAp5vXm.mjs";
|
|
15
15
|
import "react-dom/client";
|
|
16
16
|
import "invariant";
|
|
17
17
|
import "lodash/isFunction";
|
|
@@ -302,4 +302,4 @@ export {
|
|
|
302
302
|
CreatePage,
|
|
303
303
|
ProtectedCreatePage
|
|
304
304
|
};
|
|
305
|
-
//# sourceMappingURL=CreatePage-
|
|
305
|
+
//# sourceMappingURL=CreatePage-wy4nvb2g.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreatePage-qUzcFRYT.mjs","sources":["../../admin/src/pages/Settings/pages/Roles/CreatePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Button,\n ContentLayout,\n Flex,\n Grid,\n GridItem,\n HeaderLayout,\n Main,\n Textarea,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport {\n CheckPagePermissions,\n Form,\n LoadingIndicatorPage,\n SettingsPageTitle,\n useNotification,\n useOverlayBlocker,\n useTracking,\n translatedErrors,\n useAPIErrorHandler,\n} from '@strapi/helper-plugin';\nimport { ArrowLeft } from '@strapi/icons';\nimport { format } from 'date-fns';\nimport { Formik, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useHistory, useRouteMatch } from 'react-router-dom';\nimport styled from 'styled-components';\nimport * as yup from 'yup';\n\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport {\n useCreateRoleMutation,\n useGetRolePermissionLayoutQuery,\n useGetRolePermissionsQuery,\n useUpdateRolePermissionsMutation,\n} from '../../../../services/users';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\n\nimport { Permissions, PermissionsAPI } from './components/Permissions';\n\n/* -------------------------------------------------------------------------------------------------\n * CreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst CREATE_SCHEMA = yup.object().shape({\n name: yup.string().required(translatedErrors.required),\n description: yup.string().required(translatedErrors.required),\n});\n\n/**\n * TODO: be nice if we could just infer this from the schema\n */\ninterface CreateRoleFormValues {\n name: string;\n description: string;\n}\n\n/**\n * TODO: this whole section of the app needs refactoring. Using a ref to\n * manage the state of the child is nonsensical.\n */\nconst CreatePage = () => {\n const match = useRouteMatch<{ id: string }>('/settings/roles/duplicate/:id');\n const toggleNotification = useNotification();\n const { lockApp, unlockApp } = useOverlayBlocker();\n const { formatMessage } = useIntl();\n const { replace } = useHistory();\n const permissionsRef = React.useRef<PermissionsAPI>(null);\n const { trackUsage } = useTracking();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const id = match?.params.id ?? null;\n\n const { isLoading: isLoadingPermissionsLayout, data: permissionsLayout } =\n useGetRolePermissionLayoutQuery({\n /**\n * Role here is a query param so if there's no role we pass an empty string\n * which returns us a default layout.\n */\n role: id ?? '',\n });\n\n /**\n * We need this so if we're cloning a role, we can fetch\n * the current permissions that role has.\n */\n const { data: rolePermissions, isLoading: isLoadingRole } = useGetRolePermissionsQuery(\n {\n id: id!,\n },\n {\n skip: !id,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [createRole] = useCreateRoleMutation();\n const [updateRolePermissions] = useUpdateRolePermissionsMutation();\n\n const handleCreateRoleSubmit = async (\n data: CreateRoleFormValues,\n formik: FormikHelpers<CreateRoleFormValues>\n ) => {\n try {\n // @ts-expect-error – fixed in V5\n lockApp();\n\n if (id) {\n trackUsage('willDuplicateRole');\n } else {\n trackUsage('willCreateNewRole');\n }\n\n const res = await createRole(data);\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n const { permissionsToSend } = permissionsRef.current?.getPermissions() ?? {};\n\n if (res.data.id && Array.isArray(permissionsToSend) && permissionsToSend.length > 0) {\n const updateRes = await updateRolePermissions({\n id: res.data.id,\n permissions: permissionsToSend,\n });\n\n if ('error' in updateRes) {\n if (isBaseQueryError(updateRes.error) && updateRes.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(updateRes.error));\n } else {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(updateRes.error),\n });\n }\n\n return;\n }\n }\n\n toggleNotification({\n type: 'success',\n message: { id: 'Settings.roles.created', defaultMessage: 'created' },\n });\n\n replace(`/settings/roles/${res.data.id}`);\n } catch (err) {\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error' },\n });\n } finally {\n // @ts-expect-error – fixed in V5\n unlockApp();\n }\n };\n\n return (\n <Main>\n <SettingsPageTitle name=\"Roles\" />\n <Formik\n initialValues={\n {\n name: '',\n description: `${formatMessage({\n id: 'Settings.roles.form.created',\n defaultMessage: 'Created',\n })} ${format(new Date(), 'PPP')}`,\n } satisfies CreateRoleFormValues\n }\n onSubmit={handleCreateRoleSubmit}\n validationSchema={CREATE_SCHEMA}\n validateOnChange={false}\n >\n {({ values, errors, handleReset, handleChange, isSubmitting }) => (\n <Form>\n <>\n <HeaderLayout\n primaryAction={\n <Flex gap={2}>\n <Button\n variant=\"secondary\"\n onClick={() => {\n handleReset();\n permissionsRef.current?.resetForm();\n }}\n size=\"L\"\n >\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </Button>\n <Button type=\"submit\" loading={isSubmitting} size=\"L\">\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n }\n title={formatMessage({\n id: 'Settings.roles.create.title',\n defaultMessage: 'Create a role',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.create.description',\n defaultMessage: 'Define the rights given to the role',\n })}\n navigationAction={\n // @ts-expect-error – the props from the component passed as `as` are not correctly inferred.\n <Link as={NavLink} startIcon={<ArrowLeft />} to=\"/settings/roles\">\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n <ContentLayout>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex justifyContent=\"space-between\">\n <Box>\n <Box>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n </Box>\n <Box>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.roles.form.description',\n defaultMessage: 'Name and description of the role',\n })}\n </Typography>\n </Box>\n </Box>\n <UsersRoleNumber>\n {formatMessage(\n {\n id: 'Settings.roles.form.button.users-with-role',\n defaultMessage:\n '{number, plural, =0 {# users} one {# user} other {# users}} with this role',\n },\n { number: 0 }\n )}\n </UsersRoleNumber>\n </Flex>\n <Grid gap={4}>\n <GridItem col={6}>\n <TextInput\n name=\"name\"\n error={errors.name && formatMessage({ id: errors.name })}\n label={formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n onChange={handleChange}\n required\n value={values.name}\n />\n </GridItem>\n <GridItem col={6}>\n <Textarea\n label={formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n id=\"description\"\n error={errors.description && formatMessage({ id: errors.description })}\n onChange={handleChange}\n >\n {values.description}\n </Textarea>\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n {!isLoadingPermissionsLayout && !isLoadingRole && permissionsLayout ? (\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={false}\n ref={permissionsRef}\n permissions={rolePermissions}\n layout={permissionsLayout}\n />\n </Box>\n ) : (\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <LoadingIndicatorPage />\n </Box>\n )}\n </Flex>\n </ContentLayout>\n </>\n </Form>\n )}\n </Formik>\n </Main>\n );\n};\n\nconst UsersRoleNumber = styled.div`\n border: 1px solid ${({ theme }) => theme.colors.primary200};\n background: ${({ theme }) => theme.colors.primary100};\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[4]}`};\n color: ${({ theme }) => theme.colors.primary600};\n border-radius: ${({ theme }) => theme.borderRadius};\n font-size: ${12 / 16}rem;\n font-weight: bold;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedCreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedCreatePage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.roles.create\n );\n\n return (\n <CheckPagePermissions permissions={permissions}>\n <CreatePage />\n </CheckPagePermissions>\n );\n};\n\nexport { CreatePage, ProtectedCreatePage };\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CreatePage-wy4nvb2g.mjs","sources":["../../admin/src/pages/Settings/pages/Roles/CreatePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Button,\n ContentLayout,\n Flex,\n Grid,\n GridItem,\n HeaderLayout,\n Main,\n Textarea,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport { Link } from '@strapi/design-system/v2';\nimport {\n CheckPagePermissions,\n Form,\n LoadingIndicatorPage,\n SettingsPageTitle,\n useNotification,\n useOverlayBlocker,\n useTracking,\n translatedErrors,\n useAPIErrorHandler,\n} from '@strapi/helper-plugin';\nimport { ArrowLeft } from '@strapi/icons';\nimport { format } from 'date-fns';\nimport { Formik, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { NavLink, useHistory, useRouteMatch } from 'react-router-dom';\nimport styled from 'styled-components';\nimport * as yup from 'yup';\n\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport {\n useCreateRoleMutation,\n useGetRolePermissionLayoutQuery,\n useGetRolePermissionsQuery,\n useUpdateRolePermissionsMutation,\n} from '../../../../services/users';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\n\nimport { Permissions, PermissionsAPI } from './components/Permissions';\n\n/* -------------------------------------------------------------------------------------------------\n * CreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst CREATE_SCHEMA = yup.object().shape({\n name: yup.string().required(translatedErrors.required),\n description: yup.string().required(translatedErrors.required),\n});\n\n/**\n * TODO: be nice if we could just infer this from the schema\n */\ninterface CreateRoleFormValues {\n name: string;\n description: string;\n}\n\n/**\n * TODO: this whole section of the app needs refactoring. Using a ref to\n * manage the state of the child is nonsensical.\n */\nconst CreatePage = () => {\n const match = useRouteMatch<{ id: string }>('/settings/roles/duplicate/:id');\n const toggleNotification = useNotification();\n const { lockApp, unlockApp } = useOverlayBlocker();\n const { formatMessage } = useIntl();\n const { replace } = useHistory();\n const permissionsRef = React.useRef<PermissionsAPI>(null);\n const { trackUsage } = useTracking();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const id = match?.params.id ?? null;\n\n const { isLoading: isLoadingPermissionsLayout, data: permissionsLayout } =\n useGetRolePermissionLayoutQuery({\n /**\n * Role here is a query param so if there's no role we pass an empty string\n * which returns us a default layout.\n */\n role: id ?? '',\n });\n\n /**\n * We need this so if we're cloning a role, we can fetch\n * the current permissions that role has.\n */\n const { data: rolePermissions, isLoading: isLoadingRole } = useGetRolePermissionsQuery(\n {\n id: id!,\n },\n {\n skip: !id,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [createRole] = useCreateRoleMutation();\n const [updateRolePermissions] = useUpdateRolePermissionsMutation();\n\n const handleCreateRoleSubmit = async (\n data: CreateRoleFormValues,\n formik: FormikHelpers<CreateRoleFormValues>\n ) => {\n try {\n // @ts-expect-error – fixed in V5\n lockApp();\n\n if (id) {\n trackUsage('willDuplicateRole');\n } else {\n trackUsage('willCreateNewRole');\n }\n\n const res = await createRole(data);\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n const { permissionsToSend } = permissionsRef.current?.getPermissions() ?? {};\n\n if (res.data.id && Array.isArray(permissionsToSend) && permissionsToSend.length > 0) {\n const updateRes = await updateRolePermissions({\n id: res.data.id,\n permissions: permissionsToSend,\n });\n\n if ('error' in updateRes) {\n if (isBaseQueryError(updateRes.error) && updateRes.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(updateRes.error));\n } else {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(updateRes.error),\n });\n }\n\n return;\n }\n }\n\n toggleNotification({\n type: 'success',\n message: { id: 'Settings.roles.created', defaultMessage: 'created' },\n });\n\n replace(`/settings/roles/${res.data.id}`);\n } catch (err) {\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error' },\n });\n } finally {\n // @ts-expect-error – fixed in V5\n unlockApp();\n }\n };\n\n return (\n <Main>\n <SettingsPageTitle name=\"Roles\" />\n <Formik\n initialValues={\n {\n name: '',\n description: `${formatMessage({\n id: 'Settings.roles.form.created',\n defaultMessage: 'Created',\n })} ${format(new Date(), 'PPP')}`,\n } satisfies CreateRoleFormValues\n }\n onSubmit={handleCreateRoleSubmit}\n validationSchema={CREATE_SCHEMA}\n validateOnChange={false}\n >\n {({ values, errors, handleReset, handleChange, isSubmitting }) => (\n <Form>\n <>\n <HeaderLayout\n primaryAction={\n <Flex gap={2}>\n <Button\n variant=\"secondary\"\n onClick={() => {\n handleReset();\n permissionsRef.current?.resetForm();\n }}\n size=\"L\"\n >\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </Button>\n <Button type=\"submit\" loading={isSubmitting} size=\"L\">\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n }\n title={formatMessage({\n id: 'Settings.roles.create.title',\n defaultMessage: 'Create a role',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.create.description',\n defaultMessage: 'Define the rights given to the role',\n })}\n navigationAction={\n // @ts-expect-error – the props from the component passed as `as` are not correctly inferred.\n <Link as={NavLink} startIcon={<ArrowLeft />} to=\"/settings/roles\">\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n <ContentLayout>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex justifyContent=\"space-between\">\n <Box>\n <Box>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n </Box>\n <Box>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.roles.form.description',\n defaultMessage: 'Name and description of the role',\n })}\n </Typography>\n </Box>\n </Box>\n <UsersRoleNumber>\n {formatMessage(\n {\n id: 'Settings.roles.form.button.users-with-role',\n defaultMessage:\n '{number, plural, =0 {# users} one {# user} other {# users}} with this role',\n },\n { number: 0 }\n )}\n </UsersRoleNumber>\n </Flex>\n <Grid gap={4}>\n <GridItem col={6}>\n <TextInput\n name=\"name\"\n error={errors.name && formatMessage({ id: errors.name })}\n label={formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n onChange={handleChange}\n required\n value={values.name}\n />\n </GridItem>\n <GridItem col={6}>\n <Textarea\n label={formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n id=\"description\"\n error={errors.description && formatMessage({ id: errors.description })}\n onChange={handleChange}\n >\n {values.description}\n </Textarea>\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n {!isLoadingPermissionsLayout && !isLoadingRole && permissionsLayout ? (\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={false}\n ref={permissionsRef}\n permissions={rolePermissions}\n layout={permissionsLayout}\n />\n </Box>\n ) : (\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <LoadingIndicatorPage />\n </Box>\n )}\n </Flex>\n </ContentLayout>\n </>\n </Form>\n )}\n </Formik>\n </Main>\n );\n};\n\nconst UsersRoleNumber = styled.div`\n border: 1px solid ${({ theme }) => theme.colors.primary200};\n background: ${({ theme }) => theme.colors.primary100};\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[4]}`};\n color: ${({ theme }) => theme.colors.primary600};\n border-radius: ${({ theme }) => theme.borderRadius};\n font-size: ${12 / 16}rem;\n font-weight: bold;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedCreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedCreatePage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.roles.create\n );\n\n return (\n <CheckPagePermissions permissions={permissions}>\n <CreatePage />\n </CheckPagePermissions>\n );\n};\n\nexport { CreatePage, ProtectedCreatePage };\n"],"names":[],"mappings":"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"}
|
|
@@ -7,14 +7,14 @@ import { useFormik, FormikProvider, Form } from "formik";
|
|
|
7
7
|
import { useIntl } from "react-intl";
|
|
8
8
|
import { useDispatch, useSelector } from "react-redux";
|
|
9
9
|
import { useHistory } from "react-router-dom";
|
|
10
|
-
import { u as useAdminRoles } from "./useAdminRoles-
|
|
11
|
-
import { u as useContentTypes } from "./useContentTypes-
|
|
12
|
-
import { s as selectIsLoading, a as selectIsWorkflowDirty, b as selectCurrentWorkflow, c as selectRoles, v as validateWorkflow, u as useInjectReducer, r as resetWorkflow, d as setWorkflows, e as setContentTypes, f as setRoles, g as setIsLoading, h as addStage, W as WorkflowAttributes, S as Stages, i as reducer } from "./validateWorkflow-
|
|
13
|
-
import { m as useLicenseLimits, x as isBaseQueryError } from "./index-
|
|
14
|
-
import { D as DragLayerRendered, H as Header, B as Back, R as Root } from "./Layout-
|
|
10
|
+
import { u as useAdminRoles } from "./useAdminRoles-lZ7mEYnT.mjs";
|
|
11
|
+
import { u as useContentTypes } from "./useContentTypes-buqO4eWt.mjs";
|
|
12
|
+
import { s as selectIsLoading, a as selectIsWorkflowDirty, b as selectCurrentWorkflow, c as selectRoles, v as validateWorkflow, u as useInjectReducer, r as resetWorkflow, d as setWorkflows, e as setContentTypes, f as setRoles, g as setIsLoading, h as addStage, W as WorkflowAttributes, S as Stages, i as reducer } from "./validateWorkflow-JGLqIx3z.mjs";
|
|
13
|
+
import { m as useLicenseLimits, x as isBaseQueryError } from "./index-eT0CIaDr.mjs";
|
|
14
|
+
import { D as DragLayerRendered, H as Header, B as Back, R as Root } from "./Layout-jwPGTxyo.mjs";
|
|
15
15
|
import { L as LimitsModal } from "./LimitsModal-slvRtty7.mjs";
|
|
16
16
|
import { C as CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME, a as CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME, R as REDUX_NAMESPACE } from "./constants-8sAt6dKz.mjs";
|
|
17
|
-
import { u as useReviewWorkflows } from "./useReviewWorkflows-
|
|
17
|
+
import { u as useReviewWorkflows } from "./useReviewWorkflows-Xn3L8MI8.mjs";
|
|
18
18
|
import "styled-components";
|
|
19
19
|
import "prop-types";
|
|
20
20
|
import "@strapi/design-system/v2";
|
|
@@ -77,7 +77,7 @@ import "lodash/uniqBy";
|
|
|
77
77
|
import "lodash/unset";
|
|
78
78
|
import "lodash/isArray";
|
|
79
79
|
import "date-fns/parseISO";
|
|
80
|
-
import "./reviewWorkflows-
|
|
80
|
+
import "./reviewWorkflows-X4opVwyZ.mjs";
|
|
81
81
|
const ReviewWorkflowsCreatePage = () => {
|
|
82
82
|
const { formatMessage } = useIntl();
|
|
83
83
|
const { push } = useHistory();
|
|
@@ -311,4 +311,4 @@ const ReviewWorkflowsCreatePage = () => {
|
|
|
311
311
|
export {
|
|
312
312
|
ReviewWorkflowsCreatePage
|
|
313
313
|
};
|
|
314
|
-
//# sourceMappingURL=CreatePage-
|
|
314
|
+
//# sourceMappingURL=CreatePage-x78bBThb.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreatePage-5PDeZvjx.mjs","sources":["../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/CreatePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Button, Flex, Loader, Typography } from '@strapi/design-system';\nimport { ConfirmDialog, useAPIErrorHandler, useNotification } from '@strapi/helper-plugin';\nimport { Check } from '@strapi/icons';\nimport { useFormik, Form, FormikProvider, FormikErrors } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n\nimport { useAdminRoles } from '../../../../../../../admin/src/hooks/useAdminRoles';\nimport { useContentTypes } from '../../../../../../../admin/src/hooks/useContentTypes';\nimport { useInjectReducer } from '../../../../../../../admin/src/hooks/useInjectReducer';\nimport { isBaseQueryError } from '../../../../../../../admin/src/utils/baseQuery';\nimport { useLicenseLimits } from '../../../../hooks/useLicenseLimits';\n\nimport {\n addStage,\n resetWorkflow,\n setContentTypes,\n setIsLoading,\n setRoles,\n setWorkflows,\n} from './actions';\nimport * as Layout from './components/Layout';\nimport { LimitsModal } from './components/LimitsModal';\nimport { Stages } from './components/Stages';\nimport { WorkflowAttributes } from './components/WorkflowAttributes';\nimport {\n CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME,\n CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME,\n REDUX_NAMESPACE,\n} from './constants';\nimport { useReviewWorkflows } from './hooks/useReviewWorkflows';\nimport { CurrentWorkflow, reducer } from './reducer';\nimport {\n selectIsLoading,\n selectIsWorkflowDirty,\n selectCurrentWorkflow,\n selectRoles,\n} from './selectors';\nimport { validateWorkflow } from './utils/validateWorkflow';\n\nexport const ReviewWorkflowsCreatePage = () => {\n const { formatMessage } = useIntl();\n const { push } = useHistory();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n const dispatch = useDispatch();\n const toggleNotification = useNotification();\n const { collectionTypes, singleTypes, isLoading: isLoadingContentTypes } = useContentTypes();\n const { isLoading: isLoadingWorkflow, meta, workflows, createWorkflow } = useReviewWorkflows();\n const { isLoading: isLoadingRoles, roles: serverRoles } = useAdminRoles();\n const isLoading = useSelector(selectIsLoading);\n const currentWorkflowIsDirty = useSelector(selectIsWorkflowDirty);\n const currentWorkflow = useSelector(selectCurrentWorkflow);\n const roles = useSelector(selectRoles);\n const [showLimitModal, setShowLimitModal] = React.useState<'workflow' | 'stage' | null>(null);\n const { isLoading: isLicenseLoading, getFeature } = useLicenseLimits();\n const [initialErrors, setInitialErrors] = React.useState<FormikErrors<CurrentWorkflow>>();\n const [savePrompts, setSavePrompts] = React.useState<{ hasReassignedContentTypes?: boolean }>({});\n\n const limits = getFeature<string>('review-workflows');\n const numberOfWorkflows = limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME];\n const stagesPerWorkflow = limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME];\n const contentTypesFromOtherWorkflows = workflows?.flatMap((workflow) => workflow.contentTypes);\n\n const submitForm = async () => {\n setSavePrompts({});\n\n try {\n const res = await createWorkflow({\n // @ts-expect-error – currentWorkflow will have already been validated by formik before it gets here.\n data: currentWorkflow,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n setInitialErrors(formatValidationErrors(res.error));\n }\n\n toggleNotification({\n type: 'warning',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: {\n id: 'Settings.review-workflows.create.page.notification.success',\n defaultMessage: 'Workflow successfully created',\n },\n });\n\n push(`/settings/review-workflows/${res.data.id}`);\n } catch (error) {\n toggleNotification({\n type: 'warning',\n message: {\n id: 'Settings.review-workflows.create.page.notification.error',\n defaultMessage: 'An error occurred',\n },\n });\n }\n };\n\n const handleConfirmDeleteDialog = async () => {\n await submitForm();\n };\n\n const handleConfirmClose = () => {\n setSavePrompts({});\n };\n\n const formik = useFormik({\n enableReinitialize: true,\n initialErrors,\n initialValues: currentWorkflow,\n async onSubmit() {\n const isContentTypeReassignment = currentWorkflow.contentTypes?.some((contentType) =>\n contentTypesFromOtherWorkflows?.includes(contentType)\n );\n\n /**\n * If the current license has a limit, check if the total count of workflows\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n\n if (meta && numberOfWorkflows && meta?.workflowCount >= parseInt(numberOfWorkflows, 10)) {\n setShowLimitModal('workflow');\n\n /**\n * If the current license has a limit, check if the total count of stages\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n } else if (\n currentWorkflow.stages &&\n stagesPerWorkflow &&\n currentWorkflow.stages.length >= parseInt(stagesPerWorkflow, 10)\n ) {\n setShowLimitModal('stage');\n } else if (isContentTypeReassignment) {\n setSavePrompts((prev) => ({ ...prev, hasReassignedContentTypes: true }));\n } else {\n submitForm();\n }\n },\n validate(values) {\n return validateWorkflow({ values, formatMessage });\n },\n });\n\n useInjectReducer(REDUX_NAMESPACE, reducer);\n\n React.useEffect(() => {\n dispatch(resetWorkflow());\n\n if (!isLoadingWorkflow && workflows) {\n dispatch(setWorkflows({ workflows }));\n }\n\n if (!isLoadingContentTypes) {\n dispatch(setContentTypes({ collectionTypes, singleTypes }));\n }\n\n if (!isLoadingRoles) {\n dispatch(setRoles(serverRoles));\n }\n\n dispatch(setIsLoading(isLoadingContentTypes || isLoadingRoles));\n\n // Create an empty default stage\n dispatch(\n addStage({\n name: '',\n })\n );\n }, [\n collectionTypes,\n dispatch,\n isLoadingContentTypes,\n isLoadingRoles,\n isLoadingWorkflow,\n serverRoles,\n singleTypes,\n workflows,\n ]);\n\n /**\n * If the current license has a limit:\n * check if the total count of workflows or stages exceeds that limit and display\n * the limits modal on page load. It can be closed by the user, but the\n * API will throw an error in case they try to create a new workflow or update the\n * stages.\n *\n * If the current license does not have a limit (e.g. offline license):\n * do nothing (for now). In case they are trying to create the 201st workflow/ stage\n * the API will throw an error.\n *\n */\n React.useEffect(() => {\n if (!isLoadingWorkflow && !isLicenseLoading) {\n if (\n currentWorkflow.stages &&\n limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME] &&\n stagesPerWorkflow &&\n currentWorkflow.stages.length >= parseInt(stagesPerWorkflow, 10)\n ) {\n setShowLimitModal('stage');\n }\n }\n }, [isLicenseLoading, isLoadingWorkflow, limits, currentWorkflow.stages, stagesPerWorkflow]);\n\n React.useEffect(() => {\n if (!isLoading && roles?.length === 0) {\n toggleNotification({\n blockTransition: true,\n type: 'warning',\n message: formatMessage({\n id: 'Settings.review-workflows.stage.permissions.noPermissions.description',\n defaultMessage: 'You don’t have the permission to see roles',\n }),\n });\n }\n }, [formatMessage, isLoading, roles, toggleNotification]);\n\n return (\n <>\n <Layout.DragLayerRendered />\n <FormikProvider value={formik}>\n <Form onSubmit={formik.handleSubmit}>\n <Layout.Header\n navigationAction={<Layout.Back href=\"/settings/review-workflows\" />}\n primaryAction={\n <Button\n startIcon={<Check />}\n type=\"submit\"\n size=\"M\"\n disabled={!currentWorkflowIsDirty}\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n }\n title={formatMessage({\n id: 'Settings.review-workflows.create.page.title',\n defaultMessage: 'Create Review Workflow',\n })}\n subtitle={formatMessage(\n {\n id: 'Settings.review-workflows.page.subtitle',\n defaultMessage: '{count, plural, one {# stage} other {# stages}}',\n },\n { count: currentWorkflow?.stages?.length ?? 0 }\n )}\n />\n <Layout.Root>\n <Flex alignItems=\"stretch\" direction=\"column\" gap={7}>\n {isLoading ? (\n <Loader>\n {formatMessage({\n id: 'Settings.review-workflows.page.isLoading',\n defaultMessage: 'Workflow is loading',\n })}\n </Loader>\n ) : (\n <Flex alignItems=\"stretch\" direction=\"column\" gap={7}>\n <WorkflowAttributes />\n <Stages stages={formik.values?.stages} />\n </Flex>\n )}\n </Flex>\n </Layout.Root>\n </Form>\n </FormikProvider>\n\n <ConfirmDialog.Root\n isConfirmButtonLoading={isLoading}\n isOpen={Object.keys(savePrompts).length > 0}\n onToggleDialog={handleConfirmClose}\n onConfirm={handleConfirmDeleteDialog}\n >\n <ConfirmDialog.Body>\n <Flex direction=\"column\" gap={5}>\n {savePrompts.hasReassignedContentTypes && (\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage(\n {\n id: 'Settings.review-workflows.page.delete.confirm.contentType.body',\n defaultMessage:\n '{count} {count, plural, one {content-type} other {content-types}} {count, plural, one {is} other {are}} already mapped to {count, plural, one {another workflow} other {other workflows}}. If you save changes, {count, plural, one {this} other {these}} {count, plural, one {content-type} other {{count} content-types}} will no more be mapped to the {count, plural, one {another workflow} other {other workflows}} and all corresponding information will be removed.',\n },\n {\n count: contentTypesFromOtherWorkflows?.filter((contentType) =>\n currentWorkflow.contentTypes?.includes(contentType)\n ).length,\n }\n )}\n </Typography>\n )}\n\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage({\n id: 'Settings.review-workflows.page.delete.confirm.confirm',\n defaultMessage: 'Are you sure you want to save?',\n })}\n </Typography>\n </Flex>\n </ConfirmDialog.Body>\n </ConfirmDialog.Root>\n\n <LimitsModal.Root\n isOpen={showLimitModal === 'workflow'}\n onClose={() => setShowLimitModal(null)}\n >\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.workflows.limit.title',\n defaultMessage: 'You’ve reached the limit of workflows in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.workflows.limit.body',\n defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n\n <LimitsModal.Root isOpen={showLimitModal === 'stage'} onClose={() => setShowLimitModal(null)}>\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.stages.limit.title',\n defaultMessage: 'You have reached the limit of stages for this workflow in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.stages.limit.body',\n defaultMessage: 'Try deleting some stages or contact Sales to enable more stages.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n </>\n );\n};\n"],"names":["Layout.DragLayerRendered","Layout.Header","Layout.Back","Layout.Root"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CreatePage-x78bBThb.mjs","sources":["../../ee/admin/src/pages/SettingsPage/pages/ReviewWorkflows/CreatePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Button, Flex, Loader, Typography } from '@strapi/design-system';\nimport { ConfirmDialog, useAPIErrorHandler, useNotification } from '@strapi/helper-plugin';\nimport { Check } from '@strapi/icons';\nimport { useFormik, Form, FormikProvider, FormikErrors } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n\nimport { useAdminRoles } from '../../../../../../../admin/src/hooks/useAdminRoles';\nimport { useContentTypes } from '../../../../../../../admin/src/hooks/useContentTypes';\nimport { useInjectReducer } from '../../../../../../../admin/src/hooks/useInjectReducer';\nimport { isBaseQueryError } from '../../../../../../../admin/src/utils/baseQuery';\nimport { useLicenseLimits } from '../../../../hooks/useLicenseLimits';\n\nimport {\n addStage,\n resetWorkflow,\n setContentTypes,\n setIsLoading,\n setRoles,\n setWorkflows,\n} from './actions';\nimport * as Layout from './components/Layout';\nimport { LimitsModal } from './components/LimitsModal';\nimport { Stages } from './components/Stages';\nimport { WorkflowAttributes } from './components/WorkflowAttributes';\nimport {\n CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME,\n CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME,\n REDUX_NAMESPACE,\n} from './constants';\nimport { useReviewWorkflows } from './hooks/useReviewWorkflows';\nimport { CurrentWorkflow, reducer } from './reducer';\nimport {\n selectIsLoading,\n selectIsWorkflowDirty,\n selectCurrentWorkflow,\n selectRoles,\n} from './selectors';\nimport { validateWorkflow } from './utils/validateWorkflow';\n\nexport const ReviewWorkflowsCreatePage = () => {\n const { formatMessage } = useIntl();\n const { push } = useHistory();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n const dispatch = useDispatch();\n const toggleNotification = useNotification();\n const { collectionTypes, singleTypes, isLoading: isLoadingContentTypes } = useContentTypes();\n const { isLoading: isLoadingWorkflow, meta, workflows, createWorkflow } = useReviewWorkflows();\n const { isLoading: isLoadingRoles, roles: serverRoles } = useAdminRoles();\n const isLoading = useSelector(selectIsLoading);\n const currentWorkflowIsDirty = useSelector(selectIsWorkflowDirty);\n const currentWorkflow = useSelector(selectCurrentWorkflow);\n const roles = useSelector(selectRoles);\n const [showLimitModal, setShowLimitModal] = React.useState<'workflow' | 'stage' | null>(null);\n const { isLoading: isLicenseLoading, getFeature } = useLicenseLimits();\n const [initialErrors, setInitialErrors] = React.useState<FormikErrors<CurrentWorkflow>>();\n const [savePrompts, setSavePrompts] = React.useState<{ hasReassignedContentTypes?: boolean }>({});\n\n const limits = getFeature<string>('review-workflows');\n const numberOfWorkflows = limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME];\n const stagesPerWorkflow = limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME];\n const contentTypesFromOtherWorkflows = workflows?.flatMap((workflow) => workflow.contentTypes);\n\n const submitForm = async () => {\n setSavePrompts({});\n\n try {\n const res = await createWorkflow({\n // @ts-expect-error – currentWorkflow will have already been validated by formik before it gets here.\n data: currentWorkflow,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n setInitialErrors(formatValidationErrors(res.error));\n }\n\n toggleNotification({\n type: 'warning',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: {\n id: 'Settings.review-workflows.create.page.notification.success',\n defaultMessage: 'Workflow successfully created',\n },\n });\n\n push(`/settings/review-workflows/${res.data.id}`);\n } catch (error) {\n toggleNotification({\n type: 'warning',\n message: {\n id: 'Settings.review-workflows.create.page.notification.error',\n defaultMessage: 'An error occurred',\n },\n });\n }\n };\n\n const handleConfirmDeleteDialog = async () => {\n await submitForm();\n };\n\n const handleConfirmClose = () => {\n setSavePrompts({});\n };\n\n const formik = useFormik({\n enableReinitialize: true,\n initialErrors,\n initialValues: currentWorkflow,\n async onSubmit() {\n const isContentTypeReassignment = currentWorkflow.contentTypes?.some((contentType) =>\n contentTypesFromOtherWorkflows?.includes(contentType)\n );\n\n /**\n * If the current license has a limit, check if the total count of workflows\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n\n if (meta && numberOfWorkflows && meta?.workflowCount >= parseInt(numberOfWorkflows, 10)) {\n setShowLimitModal('workflow');\n\n /**\n * If the current license has a limit, check if the total count of stages\n * exceeds that limit and display the limits modal instead of sending the\n * update, because it would throw an API error.\n */\n } else if (\n currentWorkflow.stages &&\n stagesPerWorkflow &&\n currentWorkflow.stages.length >= parseInt(stagesPerWorkflow, 10)\n ) {\n setShowLimitModal('stage');\n } else if (isContentTypeReassignment) {\n setSavePrompts((prev) => ({ ...prev, hasReassignedContentTypes: true }));\n } else {\n submitForm();\n }\n },\n validate(values) {\n return validateWorkflow({ values, formatMessage });\n },\n });\n\n useInjectReducer(REDUX_NAMESPACE, reducer);\n\n React.useEffect(() => {\n dispatch(resetWorkflow());\n\n if (!isLoadingWorkflow && workflows) {\n dispatch(setWorkflows({ workflows }));\n }\n\n if (!isLoadingContentTypes) {\n dispatch(setContentTypes({ collectionTypes, singleTypes }));\n }\n\n if (!isLoadingRoles) {\n dispatch(setRoles(serverRoles));\n }\n\n dispatch(setIsLoading(isLoadingContentTypes || isLoadingRoles));\n\n // Create an empty default stage\n dispatch(\n addStage({\n name: '',\n })\n );\n }, [\n collectionTypes,\n dispatch,\n isLoadingContentTypes,\n isLoadingRoles,\n isLoadingWorkflow,\n serverRoles,\n singleTypes,\n workflows,\n ]);\n\n /**\n * If the current license has a limit:\n * check if the total count of workflows or stages exceeds that limit and display\n * the limits modal on page load. It can be closed by the user, but the\n * API will throw an error in case they try to create a new workflow or update the\n * stages.\n *\n * If the current license does not have a limit (e.g. offline license):\n * do nothing (for now). In case they are trying to create the 201st workflow/ stage\n * the API will throw an error.\n *\n */\n React.useEffect(() => {\n if (!isLoadingWorkflow && !isLicenseLoading) {\n if (\n currentWorkflow.stages &&\n limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME] &&\n stagesPerWorkflow &&\n currentWorkflow.stages.length >= parseInt(stagesPerWorkflow, 10)\n ) {\n setShowLimitModal('stage');\n }\n }\n }, [isLicenseLoading, isLoadingWorkflow, limits, currentWorkflow.stages, stagesPerWorkflow]);\n\n React.useEffect(() => {\n if (!isLoading && roles?.length === 0) {\n toggleNotification({\n blockTransition: true,\n type: 'warning',\n message: formatMessage({\n id: 'Settings.review-workflows.stage.permissions.noPermissions.description',\n defaultMessage: 'You don’t have the permission to see roles',\n }),\n });\n }\n }, [formatMessage, isLoading, roles, toggleNotification]);\n\n return (\n <>\n <Layout.DragLayerRendered />\n <FormikProvider value={formik}>\n <Form onSubmit={formik.handleSubmit}>\n <Layout.Header\n navigationAction={<Layout.Back href=\"/settings/review-workflows\" />}\n primaryAction={\n <Button\n startIcon={<Check />}\n type=\"submit\"\n size=\"M\"\n disabled={!currentWorkflowIsDirty}\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n }\n title={formatMessage({\n id: 'Settings.review-workflows.create.page.title',\n defaultMessage: 'Create Review Workflow',\n })}\n subtitle={formatMessage(\n {\n id: 'Settings.review-workflows.page.subtitle',\n defaultMessage: '{count, plural, one {# stage} other {# stages}}',\n },\n { count: currentWorkflow?.stages?.length ?? 0 }\n )}\n />\n <Layout.Root>\n <Flex alignItems=\"stretch\" direction=\"column\" gap={7}>\n {isLoading ? (\n <Loader>\n {formatMessage({\n id: 'Settings.review-workflows.page.isLoading',\n defaultMessage: 'Workflow is loading',\n })}\n </Loader>\n ) : (\n <Flex alignItems=\"stretch\" direction=\"column\" gap={7}>\n <WorkflowAttributes />\n <Stages stages={formik.values?.stages} />\n </Flex>\n )}\n </Flex>\n </Layout.Root>\n </Form>\n </FormikProvider>\n\n <ConfirmDialog.Root\n isConfirmButtonLoading={isLoading}\n isOpen={Object.keys(savePrompts).length > 0}\n onToggleDialog={handleConfirmClose}\n onConfirm={handleConfirmDeleteDialog}\n >\n <ConfirmDialog.Body>\n <Flex direction=\"column\" gap={5}>\n {savePrompts.hasReassignedContentTypes && (\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage(\n {\n id: 'Settings.review-workflows.page.delete.confirm.contentType.body',\n defaultMessage:\n '{count} {count, plural, one {content-type} other {content-types}} {count, plural, one {is} other {are}} already mapped to {count, plural, one {another workflow} other {other workflows}}. If you save changes, {count, plural, one {this} other {these}} {count, plural, one {content-type} other {{count} content-types}} will no more be mapped to the {count, plural, one {another workflow} other {other workflows}} and all corresponding information will be removed.',\n },\n {\n count: contentTypesFromOtherWorkflows?.filter((contentType) =>\n currentWorkflow.contentTypes?.includes(contentType)\n ).length,\n }\n )}\n </Typography>\n )}\n\n <Typography textAlign=\"center\" variant=\"omega\">\n {formatMessage({\n id: 'Settings.review-workflows.page.delete.confirm.confirm',\n defaultMessage: 'Are you sure you want to save?',\n })}\n </Typography>\n </Flex>\n </ConfirmDialog.Body>\n </ConfirmDialog.Root>\n\n <LimitsModal.Root\n isOpen={showLimitModal === 'workflow'}\n onClose={() => setShowLimitModal(null)}\n >\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.workflows.limit.title',\n defaultMessage: 'You’ve reached the limit of workflows in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.workflows.limit.body',\n defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n\n <LimitsModal.Root isOpen={showLimitModal === 'stage'} onClose={() => setShowLimitModal(null)}>\n <LimitsModal.Title>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.stages.limit.title',\n defaultMessage: 'You have reached the limit of stages for this workflow in your plan',\n })}\n </LimitsModal.Title>\n\n <LimitsModal.Body>\n {formatMessage({\n id: 'Settings.review-workflows.create.page.stages.limit.body',\n defaultMessage: 'Try deleting some stages or contact Sales to enable more stages.',\n })}\n </LimitsModal.Body>\n </LimitsModal.Root>\n </>\n );\n};\n"],"names":["Layout.DragLayerRendered","Layout.Header","Layout.Back","Layout.Root"],"mappings":"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"}
|
|
@@ -3,12 +3,12 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
4
|
const helperPlugin = require("@strapi/helper-plugin");
|
|
5
5
|
const reactRedux = require("react-redux");
|
|
6
|
-
const AuthenticatedApp = require("./AuthenticatedApp-
|
|
7
|
-
const EditViewPage = require("./EditViewPage-
|
|
6
|
+
const AuthenticatedApp = require("./AuthenticatedApp-Qy5uXoF3.js");
|
|
7
|
+
const EditViewPage = require("./EditViewPage-y6-QEPXe.js");
|
|
8
8
|
require("react");
|
|
9
9
|
require("semver/functions/lt");
|
|
10
10
|
require("semver/functions/valid");
|
|
11
|
-
require("./index-
|
|
11
|
+
require("./index-Ts0i8jmH.js");
|
|
12
12
|
require("react-dom/client");
|
|
13
13
|
require("@strapi/design-system");
|
|
14
14
|
require("invariant");
|
|
@@ -75,9 +75,9 @@ require("lodash/uniqBy");
|
|
|
75
75
|
require("lodash/unset");
|
|
76
76
|
require("lodash/isArray");
|
|
77
77
|
require("date-fns/parseISO");
|
|
78
|
-
require("./apiTokens-
|
|
78
|
+
require("./apiTokens-EVFBWYmA.js");
|
|
79
79
|
require("./constants-RMqZXSqh.js");
|
|
80
|
-
require("./TokenTypeSelect-
|
|
80
|
+
require("./TokenTypeSelect-OKSX2lfX.js");
|
|
81
81
|
require("date-fns");
|
|
82
82
|
require("date-fns/locale");
|
|
83
83
|
require("lodash/map");
|
|
@@ -89,4 +89,4 @@ const ProtectedCreateView = () => {
|
|
|
89
89
|
return /* @__PURE__ */ jsxRuntime.jsx(helperPlugin.CheckPagePermissions, { permissions: permissions.settings?.["api-tokens"].create, children: /* @__PURE__ */ jsxRuntime.jsx(EditViewPage.EditView, {}) });
|
|
90
90
|
};
|
|
91
91
|
exports.ProtectedCreateView = ProtectedCreateView;
|
|
92
|
-
//# sourceMappingURL=CreateView-
|
|
92
|
+
//# sourceMappingURL=CreateView-1pa9tRAV.js.map
|