@strapi/admin 5.0.0-alpha.1 → 5.0.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/{AdminSeatInfo-TjK5LW2b.js → AdminSeatInfo-JtsYpBbO.js} +3 -3
- package/dist/_chunks/{AdminSeatInfo-TjK5LW2b.js.map → AdminSeatInfo-JtsYpBbO.js.map} +1 -1
- package/dist/_chunks/{AdminSeatInfo-20pkL95U.mjs → AdminSeatInfo-ZZsKxX-S.mjs} +3 -3
- package/dist/_chunks/{AdminSeatInfo-20pkL95U.mjs.map → AdminSeatInfo-ZZsKxX-S.mjs.map} +1 -1
- package/dist/_chunks/{ApplicationInfoPage-ed6y9Q-B.mjs → ApplicationInfoPage-NhhWzHF1.mjs} +15 -15
- package/dist/_chunks/ApplicationInfoPage-NhhWzHF1.mjs.map +1 -0
- package/dist/_chunks/{ApplicationInfoPage-1OdKMDYH.js → ApplicationInfoPage-xj1SCaSR.js} +13 -13
- package/dist/_chunks/ApplicationInfoPage-xj1SCaSR.js.map +1 -0
- package/dist/_chunks/{AuthResponse-Hxop00n-.mjs → AuthResponse-jIqWZLMh.mjs} +2 -2
- package/dist/_chunks/{AuthResponse-Hxop00n-.mjs.map → AuthResponse-jIqWZLMh.mjs.map} +1 -1
- package/dist/_chunks/{AuthResponse-sca_wjIN.js → AuthResponse-maUe9KWA.js} +2 -2
- package/dist/_chunks/{AuthResponse-sca_wjIN.js.map → AuthResponse-maUe9KWA.js.map} +1 -1
- package/dist/_chunks/{AuthenticatedLayout-knXNB2i2.mjs → AuthenticatedLayout-Ffy6uoNF.mjs} +27 -22
- package/dist/_chunks/AuthenticatedLayout-Ffy6uoNF.mjs.map +1 -0
- package/dist/_chunks/{AuthenticatedLayout-PPlOm7kb.js → AuthenticatedLayout-kxORHKAl.js} +29 -25
- package/dist/_chunks/AuthenticatedLayout-kxORHKAl.js.map +1 -0
- package/dist/_chunks/{ComponentConfigurationPage-xZMDjeVf.js → ComponentConfigurationPage-JMCc1P7r.js} +12 -11
- package/dist/_chunks/ComponentConfigurationPage-JMCc1P7r.js.map +1 -0
- package/dist/_chunks/{ComponentConfigurationPage-okd3XovW.mjs → ComponentConfigurationPage-oiBCHXQO.mjs} +12 -11
- package/dist/_chunks/ComponentConfigurationPage-oiBCHXQO.mjs.map +1 -0
- package/dist/_chunks/{CreateActionEE-E6YNdAVx.js → CreateActionEE-ThopeFZP.js} +2 -2
- package/dist/_chunks/{CreateActionEE-E6YNdAVx.js.map → CreateActionEE-ThopeFZP.js.map} +1 -1
- package/dist/_chunks/{CreateActionEE-PaZYJ410.mjs → CreateActionEE-VMKfXSGW.mjs} +2 -2
- package/dist/_chunks/{CreateActionEE-PaZYJ410.mjs.map → CreateActionEE-VMKfXSGW.mjs.map} +1 -1
- package/dist/_chunks/{CreatePage-P1F3dkB3.mjs → CreatePage-6AeIanOF.mjs} +16 -17
- package/dist/_chunks/CreatePage-6AeIanOF.mjs.map +1 -0
- package/dist/_chunks/{CreatePage-PM_r99U5.mjs → CreatePage-Gh5xb10f.mjs} +9 -10
- package/dist/_chunks/CreatePage-Gh5xb10f.mjs.map +1 -0
- package/dist/_chunks/{CreatePage-hlkPO2Cv.js → CreatePage-JIHfFWS7.js} +3 -3
- package/dist/_chunks/{CreatePage-hlkPO2Cv.js.map → CreatePage-JIHfFWS7.js.map} +1 -1
- package/dist/_chunks/{CreatePage-1Oi4-aR6.js → CreatePage-WWKaoNH7.js} +16 -17
- package/dist/_chunks/CreatePage-WWKaoNH7.js.map +1 -0
- package/dist/_chunks/{CreatePage-6458K0l9.mjs → CreatePage-hxFhldpL.mjs} +3 -3
- package/dist/_chunks/{CreatePage-6458K0l9.mjs.map → CreatePage-hxFhldpL.mjs.map} +1 -1
- package/dist/_chunks/{CreatePage-DmNFNVN9.js → CreatePage-yjmy0z57.js} +9 -10
- package/dist/_chunks/CreatePage-yjmy0z57.js.map +1 -0
- package/dist/_chunks/{CreateView-AWmN1xWJ.js → CreateView-J48m0lSL.js} +3 -3
- package/dist/_chunks/{CreateView-AWmN1xWJ.js.map → CreateView-J48m0lSL.js.map} +1 -1
- package/dist/_chunks/{CreateView-hUH4bf5k.js → CreateView-Vqd1PVrJ.js} +3 -3
- package/dist/_chunks/{CreateView-hUH4bf5k.js.map → CreateView-Vqd1PVrJ.js.map} +1 -1
- package/dist/_chunks/{CreateView-cTvLLIgu.mjs → CreateView-oBp0NzJx.mjs} +3 -3
- package/dist/_chunks/{CreateView-cTvLLIgu.mjs.map → CreateView-oBp0NzJx.mjs.map} +1 -1
- package/dist/_chunks/{CreateView-pBI75ZwZ.mjs → CreateView-qzpeDBvR.mjs} +3 -3
- package/dist/_chunks/{CreateView-pBI75ZwZ.mjs.map → CreateView-qzpeDBvR.mjs.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-LItt0mJo.mjs → EditConfigurationPage-MAUfMzG6.mjs} +11 -10
- package/dist/_chunks/EditConfigurationPage-MAUfMzG6.mjs.map +1 -0
- package/dist/_chunks/{EditConfigurationPage-PZ4yq1bM.js → EditConfigurationPage-PKHUVKGD.js} +11 -10
- package/dist/_chunks/EditConfigurationPage-PKHUVKGD.js.map +1 -0
- package/dist/_chunks/{EditPage-W6hncyNY.js → EditPage-7bVupT7n.js} +15 -15
- package/dist/_chunks/EditPage-7bVupT7n.js.map +1 -0
- package/dist/_chunks/{EditPage-MPNLCYgQ.mjs → EditPage-DQUZsl8H.mjs} +16 -17
- package/dist/_chunks/EditPage-DQUZsl8H.mjs.map +1 -0
- package/dist/_chunks/{EditPage-mU2WAH0F.js → EditPage-Hxt5uBXk.js} +10 -11
- package/dist/_chunks/EditPage-Hxt5uBXk.js.map +1 -0
- package/dist/_chunks/{EditPage-30rqjB1d.mjs → EditPage-Izmz7bdh.mjs} +16 -16
- package/dist/_chunks/EditPage-Izmz7bdh.mjs.map +1 -0
- package/dist/_chunks/{EditPage-_N_lm93z.js → EditPage-QA0-S3kV.js} +14 -15
- package/dist/_chunks/EditPage-QA0-S3kV.js.map +1 -0
- package/dist/_chunks/{EditPage--EPGgPNr.mjs → EditPage-THSaM4-0.mjs} +10 -11
- package/dist/_chunks/EditPage-THSaM4-0.mjs.map +1 -0
- package/dist/_chunks/{EditPage-RpzlPkkU.js → EditPage-vUQIn3OJ.js} +18 -19
- package/dist/_chunks/{EditPage-RpzlPkkU.js.map → EditPage-vUQIn3OJ.js.map} +1 -1
- package/dist/_chunks/{EditPage-GRIZWtGz.mjs → EditPage-zpnfFOjc.mjs} +18 -19
- package/dist/_chunks/{EditPage-GRIZWtGz.mjs.map → EditPage-zpnfFOjc.mjs.map} +1 -1
- package/dist/_chunks/{EditView-wDP9PNQY.js → EditView-63ynF0vf.js} +12 -13
- package/dist/_chunks/EditView-63ynF0vf.js.map +1 -0
- package/dist/_chunks/{EditView-0lXpbgG0.mjs → EditView-cfOpTlAi.mjs} +14 -15
- package/dist/_chunks/EditView-cfOpTlAi.mjs.map +1 -0
- package/dist/_chunks/{EditViewPage-0Pd8zBi7.js → EditViewPage--SujdXIG.js} +16 -18
- package/dist/_chunks/EditViewPage--SujdXIG.js.map +1 -0
- package/dist/_chunks/{EditViewPage-R6diW-gL.mjs → EditViewPage-JFzIJClS.mjs} +6 -7
- package/dist/_chunks/EditViewPage-JFzIJClS.mjs.map +1 -0
- package/dist/_chunks/{EditViewPage-ed0-10GO.js → EditViewPage-kkCJlZyh.js} +8 -9
- package/dist/_chunks/EditViewPage-kkCJlZyh.js.map +1 -0
- package/dist/_chunks/{EditViewPage-uWYR_o8w.mjs → EditViewPage-vz8UJ4U_.mjs} +17 -18
- package/dist/_chunks/EditViewPage-vz8UJ4U_.mjs.map +1 -0
- package/dist/_chunks/{EventsTable-R_AHW6Z4.js → EventsTable-1X4uyY8J.js} +2 -2
- package/dist/_chunks/{EventsTable-R_AHW6Z4.js.map → EventsTable-1X4uyY8J.js.map} +1 -1
- package/dist/_chunks/{EventsTable-CqN6AzV9.mjs → EventsTable-dN2MNNFu.mjs} +2 -2
- package/dist/_chunks/{EventsTable-CqN6AzV9.mjs.map → EventsTable-dN2MNNFu.mjs.map} +1 -1
- package/dist/_chunks/{FieldTypeIcon-rAK1gg9p.mjs → FieldTypeIcon-4-UZzZla.mjs} +2 -2
- package/dist/_chunks/{FieldTypeIcon-rAK1gg9p.mjs.map → FieldTypeIcon-4-UZzZla.mjs.map} +1 -1
- package/dist/_chunks/{FieldTypeIcon-1WDWx0cR.js → FieldTypeIcon-wxfhExw2.js} +2 -2
- package/dist/_chunks/{FieldTypeIcon-1WDWx0cR.js.map → FieldTypeIcon-wxfhExw2.js.map} +1 -1
- package/dist/_chunks/{Filters-rPaxqj4F.mjs → Filters--lh-i85A.mjs} +2 -3
- package/dist/_chunks/Filters--lh-i85A.mjs.map +1 -0
- package/dist/_chunks/{Filters-f6ghLf0Z.js → Filters-V0VODaNk.js} +4 -5
- package/dist/_chunks/Filters-V0VODaNk.js.map +1 -0
- package/dist/_chunks/{Form-eqzCPjSo.js → Form-6QJjWK34.js} +5 -6
- package/dist/_chunks/Form-6QJjWK34.js.map +1 -0
- package/dist/_chunks/{Form-QOZA9Aq6.mjs → Form-HXiNxSZi.mjs} +5 -6
- package/dist/_chunks/Form-HXiNxSZi.mjs.map +1 -0
- package/dist/_chunks/{History-Eq4_WQPf.mjs → History-CRGqDfHr.mjs} +4 -5
- package/dist/_chunks/History-CRGqDfHr.mjs.map +1 -0
- package/dist/_chunks/{History-j00hpmXV.js → History-R_4lEy01.js} +9 -10
- package/dist/_chunks/History-R_4lEy01.js.map +1 -0
- package/dist/_chunks/{HomePage-gTElgmEK.mjs → HomePage-GJRtRqAj.mjs} +3 -3
- package/dist/_chunks/{HomePage-gTElgmEK.mjs.map → HomePage-GJRtRqAj.mjs.map} +1 -1
- package/dist/_chunks/{HomePage-O-TRGX5T.mjs → HomePage-Si17pjt5.mjs} +5 -6
- package/dist/_chunks/HomePage-Si17pjt5.mjs.map +1 -0
- package/dist/_chunks/{HomePage-3IVOMrYf.js → HomePage-oiaJD-JE.js} +5 -6
- package/dist/_chunks/HomePage-oiaJD-JE.js.map +1 -0
- package/dist/_chunks/{HomePage-79fqDlve.js → HomePage-rEW7Jpww.js} +3 -3
- package/dist/_chunks/{HomePage-79fqDlve.js.map → HomePage-rEW7Jpww.js.map} +1 -1
- package/dist/_chunks/{InputRenderer-bJwYq9ga.mjs → InputRenderer-JfwBoJk0.mjs} +40 -18
- package/dist/_chunks/InputRenderer-JfwBoJk0.mjs.map +1 -0
- package/dist/_chunks/{InputRenderer-AVDw8MeU.js → InputRenderer-hWILsDgK.js} +42 -20
- package/dist/_chunks/InputRenderer-hWILsDgK.js.map +1 -0
- package/dist/_chunks/{InstalledPluginsPage-R2hVFPZl.mjs → InstalledPluginsPage-XqzfeZgq.mjs} +7 -9
- package/dist/_chunks/InstalledPluginsPage-XqzfeZgq.mjs.map +1 -0
- package/dist/_chunks/{InstalledPluginsPage-FkR2xkQz.js → InstalledPluginsPage-ao6yYe7N.js} +6 -8
- package/dist/_chunks/InstalledPluginsPage-ao6yYe7N.js.map +1 -0
- package/dist/_chunks/{Layout-omCNy92r.mjs → Layout-2dctwEHz.mjs} +2 -2
- package/dist/_chunks/{Layout-omCNy92r.mjs.map → Layout-2dctwEHz.mjs.map} +1 -1
- package/dist/_chunks/{Layout-cV6Se3U9.mjs → Layout-3sYAgWn4.mjs} +6 -6
- package/dist/_chunks/Layout-3sYAgWn4.mjs.map +1 -0
- package/dist/_chunks/{Layout-jweb3cF3.js → Layout-4vMUN0Ez.js} +2 -2
- package/dist/_chunks/{Layout-jweb3cF3.js.map → Layout-4vMUN0Ez.js.map} +1 -1
- package/dist/_chunks/{Layout-G49-Vc5u.js → Layout-kbqdKkiF.js} +5 -5
- package/dist/_chunks/Layout-kbqdKkiF.js.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-70qtv4Ci.js → ListConfigurationPage-BXuW_9Wt.js} +10 -11
- package/dist/_chunks/ListConfigurationPage-BXuW_9Wt.js.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-PrJNO_6y.mjs → ListConfigurationPage-lPILAPkW.mjs} +10 -11
- package/dist/_chunks/ListConfigurationPage-lPILAPkW.mjs.map +1 -0
- package/dist/_chunks/{ListPage-78Cv8Vfq.js → ListPage-02WM7Pt9.js} +11 -12
- package/dist/_chunks/ListPage-02WM7Pt9.js.map +1 -0
- package/dist/_chunks/{ListPage-2lswUYQN.js → ListPage-7TAp-q4k.js} +15 -16
- package/dist/_chunks/ListPage-7TAp-q4k.js.map +1 -0
- package/dist/_chunks/{ListPage-edro79m2.mjs → ListPage-EdOy02-v.mjs} +11 -12
- package/dist/_chunks/ListPage-EdOy02-v.mjs.map +1 -0
- package/dist/_chunks/{ListPage-mAUCZIg8.mjs → ListPage-OaldiDCh.mjs} +57 -59
- package/dist/_chunks/ListPage-OaldiDCh.mjs.map +1 -0
- package/dist/_chunks/{ListPage-Q81SX0vA.mjs → ListPage-R8Qs69v7.mjs} +3 -3
- package/dist/_chunks/{ListPage-Q81SX0vA.mjs.map → ListPage-R8Qs69v7.mjs.map} +1 -1
- package/dist/_chunks/{ListPage-Cvn3WbMH.mjs → ListPage-SCTNGhhO.mjs} +16 -17
- package/dist/_chunks/ListPage-SCTNGhhO.mjs.map +1 -0
- package/dist/_chunks/{ListPage-xFkcmM1b.mjs → ListPage-YZ45BiMe.mjs} +17 -18
- package/dist/_chunks/ListPage-YZ45BiMe.mjs.map +1 -0
- package/dist/_chunks/{ListPage-7dZ3nYvc.js → ListPage-ZWUo77nT.js} +55 -56
- package/dist/_chunks/ListPage-ZWUo77nT.js.map +1 -0
- package/dist/_chunks/{ListPage-Ms6egnF5.js → ListPage-bE4a6YkV.js} +3 -3
- package/dist/_chunks/{ListPage-Ms6egnF5.js.map → ListPage-bE4a6YkV.js.map} +1 -1
- package/dist/_chunks/{ListPage-NmUS_cOz.mjs → ListPage-p17R2Gql.mjs} +14 -18
- package/dist/_chunks/ListPage-p17R2Gql.mjs.map +1 -0
- package/dist/_chunks/{ListPage-Pf5LxUYn.js → ListPage-rCVvOLlD.js} +14 -20
- package/dist/_chunks/ListPage-rCVvOLlD.js.map +1 -0
- package/dist/_chunks/{ListPage-yymh17qi.js → ListPage-u6uVacPz.js} +14 -15
- package/dist/_chunks/ListPage-u6uVacPz.js.map +1 -0
- package/dist/_chunks/{ListView--43zLiHW.mjs → ListView--O7X6dMw.mjs} +13 -14
- package/dist/_chunks/ListView--O7X6dMw.mjs.map +1 -0
- package/dist/_chunks/{ListView-YtMAQnXL.js → ListView-SsUn5vcn.js} +11 -12
- package/dist/_chunks/ListView-SsUn5vcn.js.map +1 -0
- package/dist/_chunks/{ListView-nfA6o3qO.js → ListView-ZkjwQBXQ.js} +10 -11
- package/dist/_chunks/ListView-ZkjwQBXQ.js.map +1 -0
- package/dist/_chunks/{ListView-qPiKeCxj.mjs → ListView-oP-C8SCR.mjs} +12 -13
- package/dist/_chunks/ListView-oP-C8SCR.mjs.map +1 -0
- package/dist/_chunks/{ListViewPage-fPFonK_X.mjs → ListViewPage-1VNVP9Rw.mjs} +12 -13
- package/dist/_chunks/ListViewPage-1VNVP9Rw.mjs.map +1 -0
- package/dist/_chunks/{ListViewPage-Ys7-G2XX.js → ListViewPage-idgrhBAP.js} +16 -17
- package/dist/_chunks/ListViewPage-idgrhBAP.js.map +1 -0
- package/dist/_chunks/{Login-Ge3DZEpr.js → Login-4Igrm6CC.js} +2 -2
- package/dist/_chunks/{Login-Ge3DZEpr.js.map → Login-4Igrm6CC.js.map} +1 -1
- package/dist/_chunks/{Login-6kXI90Vy.mjs → Login-B55AM-7k.mjs} +2 -2
- package/dist/_chunks/{Login-6kXI90Vy.mjs.map → Login-B55AM-7k.mjs.map} +1 -1
- package/dist/_chunks/{MagicLinkEE-HXWaLr0K.mjs → MagicLinkEE-Zy_9ZZ7y.mjs} +3 -3
- package/dist/_chunks/{MagicLinkEE-HXWaLr0K.mjs.map → MagicLinkEE-Zy_9ZZ7y.mjs.map} +1 -1
- package/dist/_chunks/{MagicLinkEE-sXtA2gUK.js → MagicLinkEE-v7xTuVEA.js} +3 -3
- package/dist/_chunks/{MagicLinkEE-sXtA2gUK.js.map → MagicLinkEE-v7xTuVEA.js.map} +1 -1
- package/dist/_chunks/{MarketplacePage-hVOJ9_0k.mjs → MarketplacePage-UGys0LVN.mjs} +20 -17
- package/dist/_chunks/MarketplacePage-UGys0LVN.mjs.map +1 -0
- package/dist/_chunks/{MarketplacePage-s8KDwNwK.js → MarketplacePage-tWKM5xe8.js} +22 -19
- package/dist/_chunks/MarketplacePage-tWKM5xe8.js.map +1 -0
- package/dist/_chunks/{NoContentTypePage-szvJnQKF.mjs → NoContentTypePage-BaaTD5uB.mjs} +4 -6
- package/dist/_chunks/NoContentTypePage-BaaTD5uB.mjs.map +1 -0
- package/dist/_chunks/{NoContentTypePage-7YEcgsE3.js → NoContentTypePage-Lbuve_Uu.js} +3 -5
- package/dist/_chunks/NoContentTypePage-Lbuve_Uu.js.map +1 -0
- package/dist/_chunks/{NoPermissionsPage-pqQFFlXa.mjs → NoPermissionsPage--Oa97N7k.mjs} +5 -7
- package/dist/_chunks/NoPermissionsPage--Oa97N7k.mjs.map +1 -0
- package/dist/_chunks/{NoPermissionsPage-UX-5msLb.js → NoPermissionsPage-q44k5VFX.js} +3 -5
- package/dist/_chunks/NoPermissionsPage-q44k5VFX.js.map +1 -0
- package/dist/_chunks/{Permissions-a0IZJ8dM.js → Permissions-CFuwI0Ni.js} +5 -6
- package/dist/_chunks/Permissions-CFuwI0Ni.js.map +1 -0
- package/dist/_chunks/{Permissions-NUaDxULo.mjs → Permissions-NbmBkSB4.mjs} +3 -3
- package/dist/_chunks/Permissions-NbmBkSB4.mjs.map +1 -0
- package/dist/_chunks/{PrivateRoute-eP4-pBby.mjs → PrivateRoute-YN_98pM_.mjs} +2 -2
- package/dist/_chunks/{PrivateRoute-eP4-pBby.mjs.map → PrivateRoute-YN_98pM_.mjs.map} +1 -1
- package/dist/_chunks/{PrivateRoute-KGxyTa5b.js → PrivateRoute-avlq1MEy.js} +2 -2
- package/dist/_chunks/{PrivateRoute-KGxyTa5b.js.map → PrivateRoute-avlq1MEy.js.map} +1 -1
- package/dist/_chunks/{ProfilePage-MBCGqbc_.js → ProfilePage-brPbqDP1.js} +14 -16
- package/dist/_chunks/ProfilePage-brPbqDP1.js.map +1 -0
- package/dist/_chunks/{ProfilePage-LXB-_EZ8.mjs → ProfilePage-eCIvxxJY.mjs} +15 -17
- package/dist/_chunks/ProfilePage-eCIvxxJY.mjs.map +1 -0
- package/dist/_chunks/{ReviewWorkflowsColumn-Ancp7-x3.js → ReviewWorkflowsColumn-HfjzpLFU.js} +2 -2
- package/dist/_chunks/{ReviewWorkflowsColumn-Ancp7-x3.js.map → ReviewWorkflowsColumn-HfjzpLFU.js.map} +1 -1
- package/dist/_chunks/{ReviewWorkflowsColumn-WzYpj2O3.mjs → ReviewWorkflowsColumn-sPZxvFUd.mjs} +2 -2
- package/dist/_chunks/{ReviewWorkflowsColumn-WzYpj2O3.mjs.map → ReviewWorkflowsColumn-sPZxvFUd.mjs.map} +1 -1
- package/dist/_chunks/{SelectRoles-Pr2wqehq.js → SelectRoles-BmNzL0q5.js} +9 -7
- package/dist/_chunks/SelectRoles-BmNzL0q5.js.map +1 -0
- package/dist/_chunks/{SelectRoles-Dxz_rAaT.mjs → SelectRoles-jvH4WUf6.mjs} +8 -6
- package/dist/_chunks/SelectRoles-jvH4WUf6.mjs.map +1 -0
- package/dist/_chunks/{SingleSignOnPage-4dK4id8H.js → SingleSignOnPage-ZyiHtZxJ.js} +10 -11
- package/dist/_chunks/SingleSignOnPage-ZyiHtZxJ.js.map +1 -0
- package/dist/_chunks/{SingleSignOnPage-gxgIeURz.mjs → SingleSignOnPage-aMd3wcAh.mjs} +12 -13
- package/dist/_chunks/SingleSignOnPage-aMd3wcAh.mjs.map +1 -0
- package/dist/_chunks/{Table-NiTkS4IC.mjs → Table-591I_RMU.mjs} +2 -3
- package/dist/_chunks/Table-591I_RMU.mjs.map +1 -0
- package/dist/_chunks/{Table-_9gVkGGi.js → Table-aUfykqgd.js} +3 -4
- package/dist/_chunks/Table-aUfykqgd.js.map +1 -0
- package/dist/_chunks/{TokenTypeSelect-jtfCyMMZ.mjs → TokenTypeSelect-vIBdBE9t.mjs} +9 -10
- package/dist/_chunks/TokenTypeSelect-vIBdBE9t.mjs.map +1 -0
- package/dist/_chunks/{TokenTypeSelect-3aWUm1cW.js → TokenTypeSelect-vp-54yBv.js} +10 -11
- package/dist/_chunks/TokenTypeSelect-vp-54yBv.js.map +1 -0
- package/dist/_chunks/{UseCasePage-QK-B8FfM.js → UseCasePage-0_alQEc9.js} +6 -7
- package/dist/_chunks/UseCasePage-0_alQEc9.js.map +1 -0
- package/dist/_chunks/{UseCasePage-0qXYZ8kt.mjs → UseCasePage-Cxu2FeWo.mjs} +6 -7
- package/dist/_chunks/UseCasePage-Cxu2FeWo.mjs.map +1 -0
- package/dist/_chunks/{apiTokens-TayNdk_V.js → apiTokens-IG3rF-G2.js} +2 -2
- package/dist/_chunks/{apiTokens-TayNdk_V.js.map → apiTokens-IG3rF-G2.js.map} +1 -1
- package/dist/_chunks/{apiTokens-DO6vkoyd.mjs → apiTokens-wLmJ3Liv.mjs} +2 -2
- package/dist/_chunks/{apiTokens-DO6vkoyd.mjs.map → apiTokens-wLmJ3Liv.mjs.map} +1 -1
- package/dist/_chunks/{constants-_T5uxsuv.mjs → constants-0OGkpIzK.mjs} +3 -3
- package/dist/_chunks/{constants-_T5uxsuv.mjs.map → constants-0OGkpIzK.mjs.map} +1 -1
- package/dist/_chunks/{constants-RZp8o_c4.js → constants-7yqqXq3r.js} +2 -2
- package/dist/_chunks/{constants-RZp8o_c4.js.map → constants-7yqqXq3r.js.map} +1 -1
- package/dist/_chunks/{constants-FEW7x2Od.mjs → constants-JgR8CVx2.mjs} +2 -2
- package/dist/_chunks/{constants-FEW7x2Od.mjs.map → constants-JgR8CVx2.mjs.map} +1 -1
- package/dist/_chunks/{constants-Xd-X3SCR.js → constants-XJLrl2Tl.js} +3 -3
- package/dist/_chunks/{constants-Xd-X3SCR.js.map → constants-XJLrl2Tl.js.map} +1 -1
- package/dist/_chunks/{index-hjUhNUvw.mjs → index-GIVuHJgC.mjs} +647 -312
- package/dist/_chunks/index-GIVuHJgC.mjs.map +1 -0
- package/dist/_chunks/{index-ejSDPT-T.js → index-haHGOQMJ.js} +553 -218
- package/dist/_chunks/index-haHGOQMJ.js.map +1 -0
- package/dist/_chunks/{selectors-uLWxH-jN.mjs → selectors--2Vzk8PA.mjs} +2 -2
- package/dist/_chunks/{selectors-uLWxH-jN.mjs.map → selectors--2Vzk8PA.mjs.map} +1 -1
- package/dist/_chunks/{selectors-T2YIN4Fb.js → selectors-NSSzzIzx.js} +2 -2
- package/dist/_chunks/{selectors-T2YIN4Fb.js.map → selectors-NSSzzIzx.js.map} +1 -1
- package/dist/_chunks/{transferTokens-jdkk-sPx.mjs → transferTokens-WIsWKVbF.mjs} +2 -2
- package/dist/_chunks/{transferTokens-jdkk-sPx.mjs.map → transferTokens-WIsWKVbF.mjs.map} +1 -1
- package/dist/_chunks/{transferTokens-T-kGMb3U.js → transferTokens-xL4mlopP.js} +2 -2
- package/dist/_chunks/{transferTokens-T-kGMb3U.js.map → transferTokens-xL4mlopP.js.map} +1 -1
- package/dist/_chunks/{useAdminRoles-QJQS1BCd.mjs → useAdminRoles--ozrdfW_.mjs} +2 -2
- package/dist/_chunks/{useAdminRoles-QJQS1BCd.mjs.map → useAdminRoles--ozrdfW_.mjs.map} +1 -1
- package/dist/_chunks/{useAdminRoles-SnzC_mvy.js → useAdminRoles-Y25Pjlcy.js} +2 -2
- package/dist/_chunks/{useAdminRoles-SnzC_mvy.js.map → useAdminRoles-Y25Pjlcy.js.map} +1 -1
- package/dist/_chunks/{useContentTypes-Lpg-eJmK.js → useContentTypes-Vr8jkHQL.js} +4 -5
- package/dist/_chunks/useContentTypes-Vr8jkHQL.js.map +1 -0
- package/dist/_chunks/{useContentTypes-U-n1-lz0.mjs → useContentTypes-ralhLmpD.mjs} +4 -5
- package/dist/_chunks/useContentTypes-ralhLmpD.mjs.map +1 -0
- package/dist/_chunks/{useLicenseLimitNotification-yJHxF4YO.mjs → useLicenseLimitNotification-RSTkqcfW.mjs} +5 -6
- package/dist/_chunks/useLicenseLimitNotification-RSTkqcfW.mjs.map +1 -0
- package/dist/_chunks/{useLicenseLimitNotification-Hjv_LKmp.js → useLicenseLimitNotification-fSsffVh-.js} +5 -6
- package/dist/_chunks/useLicenseLimitNotification-fSsffVh-.js.map +1 -0
- package/dist/_chunks/{useReviewWorkflows-0rQx2KxS.mjs → useReviewWorkflows--7WPIykR.mjs} +2 -2
- package/dist/_chunks/{useReviewWorkflows-0rQx2KxS.mjs.map → useReviewWorkflows--7WPIykR.mjs.map} +1 -1
- package/dist/_chunks/{useReviewWorkflows-QoSEilRp.js → useReviewWorkflows-4t3eVbDa.js} +2 -2
- package/dist/_chunks/{useReviewWorkflows-QoSEilRp.js.map → useReviewWorkflows-4t3eVbDa.js.map} +1 -1
- package/dist/_chunks/{useSyncRbac-hZJWbmmY.js → useSyncRbac-Fw5UPeMQ.js} +2 -2
- package/dist/_chunks/{useSyncRbac-hZJWbmmY.js.map → useSyncRbac-Fw5UPeMQ.js.map} +1 -1
- package/dist/_chunks/{useSyncRbac-wVgN6XIc.mjs → useSyncRbac-JNQibLFa.mjs} +2 -2
- package/dist/_chunks/{useSyncRbac-wVgN6XIc.mjs.map → useSyncRbac-JNQibLFa.mjs.map} +1 -1
- package/dist/_chunks/{useWebhooks-1ZG0V0Mc.js → useWebhooks-IXb4Ks8E.js} +2 -2
- package/dist/_chunks/{useWebhooks-1ZG0V0Mc.js.map → useWebhooks-IXb4Ks8E.js.map} +1 -1
- package/dist/_chunks/{useWebhooks-WBwti5Jl.mjs → useWebhooks-sfNt0r3v.mjs} +2 -2
- package/dist/_chunks/{useWebhooks-WBwti5Jl.mjs.map → useWebhooks-sfNt0r3v.mjs.map} +1 -1
- package/dist/_chunks/{validateWorkflow-23kb45Oa.mjs → validateWorkflow-YRBggwod.mjs} +5 -6
- package/dist/_chunks/validateWorkflow-YRBggwod.mjs.map +1 -0
- package/dist/_chunks/{validateWorkflow-MaEpFiHz.js → validateWorkflow-akFNValJ.js} +8 -9
- package/dist/_chunks/validateWorkflow-akFNValJ.js.map +1 -0
- package/dist/_chunks/{validation-7cD0kJHF.js → validation--QPWqn0e.js} +2 -2
- package/dist/_chunks/{validation-7cD0kJHF.js.map → validation--QPWqn0e.js.map} +1 -1
- package/dist/_chunks/{validation-rilbXPnt.mjs → validation-hlioQ0PO.mjs} +2 -2
- package/dist/_chunks/{validation-rilbXPnt.mjs.map → validation-hlioQ0PO.mjs.map} +1 -1
- package/dist/admin/index.js +7 -1
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +28 -22
- package/dist/admin/src/components/PageHelpers.d.ts +6 -2
- package/dist/admin/src/content-manager/history/services/historyVersion.d.ts +1 -1
- package/dist/admin/src/content-manager/history/tests/mockData.d.ts +692 -0
- package/dist/admin/src/content-manager/history/tests/server.d.ts +3 -0
- package/dist/admin/src/content-manager/pages/EditView/components/DocumentActions.d.ts +2 -1
- package/dist/admin/src/content-manager/services/api.d.ts +1 -1
- package/dist/admin/src/content-manager/services/components.d.ts +2 -2
- package/dist/admin/src/content-manager/services/contentTypes.d.ts +3 -3
- package/dist/admin/src/content-manager/services/documents.d.ts +17 -20
- package/dist/admin/src/content-manager/services/init.d.ts +1 -1
- package/dist/admin/src/content-manager/services/relations.d.ts +2 -2
- package/dist/admin/src/content-manager/services/uid.d.ts +3 -3
- package/dist/admin/src/core/store/configure.d.ts +2 -2
- package/dist/admin/src/core/store/hooks.d.ts +3 -3
- package/dist/admin/src/features/AppInfo.d.ts +22 -0
- package/dist/admin/src/features/Notifications.d.ts +47 -0
- package/dist/admin/src/hooks/useAPIErrorHandler.d.ts +4 -3
- package/dist/admin/src/hooks/useClipboard.d.ts +4 -0
- package/dist/admin/src/hooks/useFetchClient.d.ts +43 -0
- package/dist/admin/src/hooks/useFocusInputField.d.ts +20 -0
- package/dist/admin/src/hooks/useQueryParams.d.ts +5 -0
- package/dist/admin/src/index.d.ts +8 -4
- package/dist/admin/src/pages/Marketplace/components/NpmPackageCard.d.ts +1 -1
- package/dist/admin/src/pages/Marketplace/components/NpmPackagesGrid.d.ts +1 -1
- package/dist/admin/src/pages/Marketplace/hooks/useMarketplaceData.d.ts +2 -2
- package/dist/admin/src/selectors.d.ts +2 -2
- package/dist/admin/src/utils/baseQuery.d.ts +1 -1
- package/dist/admin/src/utils/getFetchClient.d.ts +30 -0
- package/dist/admin/src/utils/getYupInnerErrors.d.ts +7 -0
- package/dist/admin/src/utils/normalizeAPIError.d.ts +2 -2
- package/dist/admin/src/utils/users.d.ts +1 -1
- package/dist/admin/tests/index.js +49173 -0
- package/dist/admin/tests/index.js.map +1 -0
- package/dist/admin/tests/index.mjs +49135 -0
- package/dist/admin/tests/index.mjs.map +1 -0
- package/dist/admin/tests/mockData.d.ts +2053 -0
- package/dist/admin/tests/server.d.ts +2 -0
- package/dist/admin/tests/setup.d.ts +1 -0
- package/dist/admin/tests/store.d.ts +468 -0
- package/dist/admin/tests/utils.d.ts +511 -0
- package/dist/server/src/validation/api-tokens.d.ts +4 -27
- package/dist/server/src/validation/api-tokens.d.ts.map +1 -1
- package/dist/server/src/validation/authentication/register.d.ts +2 -8
- package/dist/server/src/validation/authentication/register.d.ts.map +1 -1
- package/dist/server/src/validation/permission.d.ts +4 -53
- package/dist/server/src/validation/permission.d.ts.map +1 -1
- package/dist/server/src/validation/policies/hasPermissions.d.ts +2 -7
- package/dist/server/src/validation/policies/hasPermissions.d.ts.map +1 -1
- package/dist/server/src/validation/role.d.ts +6 -23
- package/dist/server/src/validation/role.d.ts.map +1 -1
- package/dist/server/src/validation/transfer/token.d.ts +4 -23
- package/dist/server/src/validation/transfer/token.d.ts.map +1 -1
- package/dist/server/src/validation/user.d.ts +8 -56
- package/dist/server/src/validation/user.d.ts.map +1 -1
- package/package.json +12 -12
- package/dist/_chunks/ApplicationInfoPage-1OdKMDYH.js.map +0 -1
- package/dist/_chunks/ApplicationInfoPage-ed6y9Q-B.mjs.map +0 -1
- package/dist/_chunks/AuthenticatedLayout-PPlOm7kb.js.map +0 -1
- package/dist/_chunks/AuthenticatedLayout-knXNB2i2.mjs.map +0 -1
- package/dist/_chunks/ComponentConfigurationPage-okd3XovW.mjs.map +0 -1
- package/dist/_chunks/ComponentConfigurationPage-xZMDjeVf.js.map +0 -1
- package/dist/_chunks/CreatePage-1Oi4-aR6.js.map +0 -1
- package/dist/_chunks/CreatePage-DmNFNVN9.js.map +0 -1
- package/dist/_chunks/CreatePage-P1F3dkB3.mjs.map +0 -1
- package/dist/_chunks/CreatePage-PM_r99U5.mjs.map +0 -1
- package/dist/_chunks/EditConfigurationPage-LItt0mJo.mjs.map +0 -1
- package/dist/_chunks/EditConfigurationPage-PZ4yq1bM.js.map +0 -1
- package/dist/_chunks/EditPage--EPGgPNr.mjs.map +0 -1
- package/dist/_chunks/EditPage-30rqjB1d.mjs.map +0 -1
- package/dist/_chunks/EditPage-MPNLCYgQ.mjs.map +0 -1
- package/dist/_chunks/EditPage-W6hncyNY.js.map +0 -1
- package/dist/_chunks/EditPage-_N_lm93z.js.map +0 -1
- package/dist/_chunks/EditPage-mU2WAH0F.js.map +0 -1
- package/dist/_chunks/EditView-0lXpbgG0.mjs.map +0 -1
- package/dist/_chunks/EditView-wDP9PNQY.js.map +0 -1
- package/dist/_chunks/EditViewPage-0Pd8zBi7.js.map +0 -1
- package/dist/_chunks/EditViewPage-R6diW-gL.mjs.map +0 -1
- package/dist/_chunks/EditViewPage-ed0-10GO.js.map +0 -1
- package/dist/_chunks/EditViewPage-uWYR_o8w.mjs.map +0 -1
- package/dist/_chunks/Filters-f6ghLf0Z.js.map +0 -1
- package/dist/_chunks/Filters-rPaxqj4F.mjs.map +0 -1
- package/dist/_chunks/Form-QOZA9Aq6.mjs.map +0 -1
- package/dist/_chunks/Form-eqzCPjSo.js.map +0 -1
- package/dist/_chunks/History-Eq4_WQPf.mjs.map +0 -1
- package/dist/_chunks/History-j00hpmXV.js.map +0 -1
- package/dist/_chunks/HomePage-3IVOMrYf.js.map +0 -1
- package/dist/_chunks/HomePage-O-TRGX5T.mjs.map +0 -1
- package/dist/_chunks/InputRenderer-AVDw8MeU.js.map +0 -1
- package/dist/_chunks/InputRenderer-bJwYq9ga.mjs.map +0 -1
- package/dist/_chunks/InstalledPluginsPage-FkR2xkQz.js.map +0 -1
- package/dist/_chunks/InstalledPluginsPage-R2hVFPZl.mjs.map +0 -1
- package/dist/_chunks/Layout-G49-Vc5u.js.map +0 -1
- package/dist/_chunks/Layout-cV6Se3U9.mjs.map +0 -1
- package/dist/_chunks/ListConfigurationPage-70qtv4Ci.js.map +0 -1
- package/dist/_chunks/ListConfigurationPage-PrJNO_6y.mjs.map +0 -1
- package/dist/_chunks/ListPage-2lswUYQN.js.map +0 -1
- package/dist/_chunks/ListPage-78Cv8Vfq.js.map +0 -1
- package/dist/_chunks/ListPage-7dZ3nYvc.js.map +0 -1
- package/dist/_chunks/ListPage-Cvn3WbMH.mjs.map +0 -1
- package/dist/_chunks/ListPage-NmUS_cOz.mjs.map +0 -1
- package/dist/_chunks/ListPage-Pf5LxUYn.js.map +0 -1
- package/dist/_chunks/ListPage-edro79m2.mjs.map +0 -1
- package/dist/_chunks/ListPage-mAUCZIg8.mjs.map +0 -1
- package/dist/_chunks/ListPage-xFkcmM1b.mjs.map +0 -1
- package/dist/_chunks/ListPage-yymh17qi.js.map +0 -1
- package/dist/_chunks/ListView--43zLiHW.mjs.map +0 -1
- package/dist/_chunks/ListView-YtMAQnXL.js.map +0 -1
- package/dist/_chunks/ListView-nfA6o3qO.js.map +0 -1
- package/dist/_chunks/ListView-qPiKeCxj.mjs.map +0 -1
- package/dist/_chunks/ListViewPage-Ys7-G2XX.js.map +0 -1
- package/dist/_chunks/ListViewPage-fPFonK_X.mjs.map +0 -1
- package/dist/_chunks/MarketplacePage-hVOJ9_0k.mjs.map +0 -1
- package/dist/_chunks/MarketplacePage-s8KDwNwK.js.map +0 -1
- package/dist/_chunks/NoContentTypePage-7YEcgsE3.js.map +0 -1
- package/dist/_chunks/NoContentTypePage-szvJnQKF.mjs.map +0 -1
- package/dist/_chunks/NoPermissionsPage-UX-5msLb.js.map +0 -1
- package/dist/_chunks/NoPermissionsPage-pqQFFlXa.mjs.map +0 -1
- package/dist/_chunks/Permissions-NUaDxULo.mjs.map +0 -1
- package/dist/_chunks/Permissions-a0IZJ8dM.js.map +0 -1
- package/dist/_chunks/ProfilePage-LXB-_EZ8.mjs.map +0 -1
- package/dist/_chunks/ProfilePage-MBCGqbc_.js.map +0 -1
- package/dist/_chunks/SelectRoles-Dxz_rAaT.mjs.map +0 -1
- package/dist/_chunks/SelectRoles-Pr2wqehq.js.map +0 -1
- package/dist/_chunks/SingleSignOnPage-4dK4id8H.js.map +0 -1
- package/dist/_chunks/SingleSignOnPage-gxgIeURz.mjs.map +0 -1
- package/dist/_chunks/Table-NiTkS4IC.mjs.map +0 -1
- package/dist/_chunks/Table-_9gVkGGi.js.map +0 -1
- package/dist/_chunks/TokenTypeSelect-3aWUm1cW.js.map +0 -1
- package/dist/_chunks/TokenTypeSelect-jtfCyMMZ.mjs.map +0 -1
- package/dist/_chunks/UseCasePage-0qXYZ8kt.mjs.map +0 -1
- package/dist/_chunks/UseCasePage-QK-B8FfM.js.map +0 -1
- package/dist/_chunks/index-ejSDPT-T.js.map +0 -1
- package/dist/_chunks/index-hjUhNUvw.mjs.map +0 -1
- package/dist/_chunks/useContentTypes-Lpg-eJmK.js.map +0 -1
- package/dist/_chunks/useContentTypes-U-n1-lz0.mjs.map +0 -1
- package/dist/_chunks/useLicenseLimitNotification-Hjv_LKmp.js.map +0 -1
- package/dist/_chunks/useLicenseLimitNotification-yJHxF4YO.mjs.map +0 -1
- package/dist/_chunks/validateWorkflow-23kb45Oa.mjs.map +0 -1
- package/dist/_chunks/validateWorkflow-MaEpFiHz.js.map +0 -1
- package/dist/admin/src/types/errors.d.ts +0 -2
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
2
|
import * as React from "react";
|
|
3
|
-
import { Box, Flex, Typography, Grid, GridItem, Accordion, AccordionToggle, AccordionContent, Checkbox,
|
|
4
|
-
import {
|
|
3
|
+
import { Box, Flex, Typography, Grid, GridItem, Accordion, AccordionToggle, AccordionContent, Checkbox, ContentLayout } from "@strapi/design-system";
|
|
4
|
+
import { useRBAC } from "@strapi/helper-plugin";
|
|
5
5
|
import { Formik, Form } from "formik";
|
|
6
6
|
import { Helmet } from "react-helmet";
|
|
7
7
|
import { useIntl } from "react-intl";
|
|
8
8
|
import { useLocation, useMatch, useNavigate } from "react-router-dom";
|
|
9
|
-
import {
|
|
10
|
-
import { b as useGetAPITokenQuery, c as useCreateAPITokenMutation, d as useUpdateAPITokenMutation } from "./apiTokens-
|
|
9
|
+
import { n as adminApi, p as errorsTrads, q as useTypedSelector, P as Page, u as useNotification, d as useTracking, c as useGuidedTour, o as useAPIErrorHandler, w as isBaseQueryError } from "./index-GIVuHJgC.mjs";
|
|
10
|
+
import { b as useGetAPITokenQuery, c as useCreateAPITokenMutation, d as useUpdateAPITokenMutation } from "./apiTokens-wLmJ3Liv.mjs";
|
|
11
11
|
import { A as API_TOKEN_TYPE } from "./constants-fJt30IoY.mjs";
|
|
12
|
-
import { T as TokenName, a as TokenDescription, L as LifeSpanInput, b as TokenTypeSelect, F as FormHead, c as TokenBox } from "./TokenTypeSelect-
|
|
12
|
+
import { T as TokenName, a as TokenDescription, L as LifeSpanInput, b as TokenTypeSelect, F as FormHead, c as TokenBox } from "./TokenTypeSelect-vIBdBE9t.mjs";
|
|
13
13
|
import { createContext } from "@radix-ui/react-context";
|
|
14
14
|
import map from "lodash/map";
|
|
15
15
|
import tail from "lodash/tail";
|
|
@@ -17,7 +17,7 @@ import styled, { css } from "styled-components";
|
|
|
17
17
|
import { Cog } from "@strapi/icons";
|
|
18
18
|
import capitalize from "lodash/capitalize";
|
|
19
19
|
import * as yup from "yup";
|
|
20
|
-
import produce from "immer";
|
|
20
|
+
import { produce } from "immer";
|
|
21
21
|
import pull from "lodash/pull";
|
|
22
22
|
const contentApiService = adminApi.injectEndpoints({
|
|
23
23
|
endpoints: (builder) => ({
|
|
@@ -520,9 +520,8 @@ const reducer = (state, action) => produce(state, (draftState) => {
|
|
|
520
520
|
}
|
|
521
521
|
});
|
|
522
522
|
const EditView = () => {
|
|
523
|
-
useFocusWhenNavigate();
|
|
524
523
|
const { formatMessage } = useIntl();
|
|
525
|
-
const toggleNotification = useNotification();
|
|
524
|
+
const { toggleNotification } = useNotification();
|
|
526
525
|
const { state: locationState } = useLocation();
|
|
527
526
|
const permissions = useTypedSelector((state2) => state2.admin_app.permissions);
|
|
528
527
|
const [apiToken, setApiToken] = React.useState(
|
|
@@ -549,7 +548,7 @@ const EditView = () => {
|
|
|
549
548
|
React.useEffect(() => {
|
|
550
549
|
if (contentAPIPermissionsQuery.error) {
|
|
551
550
|
toggleNotification({
|
|
552
|
-
type: "
|
|
551
|
+
type: "danger",
|
|
553
552
|
message: formatAPIError(contentAPIPermissionsQuery.error)
|
|
554
553
|
});
|
|
555
554
|
}
|
|
@@ -557,7 +556,7 @@ const EditView = () => {
|
|
|
557
556
|
React.useEffect(() => {
|
|
558
557
|
if (contentAPIRoutesQuery.error) {
|
|
559
558
|
toggleNotification({
|
|
560
|
-
type: "
|
|
559
|
+
type: "danger",
|
|
561
560
|
message: formatAPIError(contentAPIRoutesQuery.error)
|
|
562
561
|
});
|
|
563
562
|
}
|
|
@@ -609,7 +608,7 @@ const EditView = () => {
|
|
|
609
608
|
React.useEffect(() => {
|
|
610
609
|
if (error) {
|
|
611
610
|
toggleNotification({
|
|
612
|
-
type: "
|
|
611
|
+
type: "danger",
|
|
613
612
|
message: formatAPIError(error)
|
|
614
613
|
});
|
|
615
614
|
}
|
|
@@ -654,7 +653,7 @@ const EditView = () => {
|
|
|
654
653
|
formik.setErrors(formatValidtionErrors(res.error));
|
|
655
654
|
} else {
|
|
656
655
|
toggleNotification({
|
|
657
|
-
type: "
|
|
656
|
+
type: "danger",
|
|
658
657
|
message: formatAPIError(res.error)
|
|
659
658
|
});
|
|
660
659
|
}
|
|
@@ -689,7 +688,7 @@ const EditView = () => {
|
|
|
689
688
|
formik.setErrors(formatValidtionErrors(res.error));
|
|
690
689
|
} else {
|
|
691
690
|
toggleNotification({
|
|
692
|
-
type: "
|
|
691
|
+
type: "danger",
|
|
693
692
|
message: formatAPIError(res.error)
|
|
694
693
|
});
|
|
695
694
|
}
|
|
@@ -709,11 +708,11 @@ const EditView = () => {
|
|
|
709
708
|
}
|
|
710
709
|
} catch {
|
|
711
710
|
toggleNotification({
|
|
712
|
-
type: "
|
|
713
|
-
message: {
|
|
711
|
+
type: "danger",
|
|
712
|
+
message: formatMessage({
|
|
714
713
|
id: "notification.error",
|
|
715
714
|
defaultMessage: "Something went wrong"
|
|
716
|
-
}
|
|
715
|
+
})
|
|
717
716
|
});
|
|
718
717
|
}
|
|
719
718
|
};
|
|
@@ -754,7 +753,7 @@ const EditView = () => {
|
|
|
754
753
|
if (isLoading) {
|
|
755
754
|
return /* @__PURE__ */ jsx(Page.Loading, {});
|
|
756
755
|
}
|
|
757
|
-
return /* @__PURE__ */ jsx(ApiTokenPermissionsProvider, { value: providerValue, children: /* @__PURE__ */ jsxs(Main, { children: [
|
|
756
|
+
return /* @__PURE__ */ jsx(ApiTokenPermissionsProvider, { value: providerValue, children: /* @__PURE__ */ jsxs(Page.Main, { children: [
|
|
758
757
|
/* @__PURE__ */ jsx(
|
|
759
758
|
Helmet,
|
|
760
759
|
{
|
|
@@ -835,4 +834,4 @@ export {
|
|
|
835
834
|
EditView,
|
|
836
835
|
ProtectedEditView
|
|
837
836
|
};
|
|
838
|
-
//# sourceMappingURL=EditViewPage-
|
|
837
|
+
//# sourceMappingURL=EditViewPage-vz8UJ4U_.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EditViewPage-vz8UJ4U_.mjs","sources":["../../admin/src/services/contentApi.ts","../../admin/src/pages/Settings/pages/ApiTokens/EditView/apiTokenPermissions.tsx","../../admin/src/pages/Settings/pages/ApiTokens/EditView/components/FormApiTokenContainer.tsx","../../admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.tsx","../../admin/src/pages/Settings/pages/ApiTokens/EditView/components/ActionBoundRoutes.tsx","../../admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollabsableContentType.tsx","../../admin/src/pages/Settings/pages/ApiTokens/EditView/components/ContentTypesSection.tsx","../../admin/src/pages/Settings/pages/ApiTokens/EditView/components/Permissions.tsx","../../admin/src/pages/Settings/pages/ApiTokens/EditView/constants.ts","../../admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.ts","../../admin/src/pages/Settings/pages/ApiTokens/EditView/reducer.ts","../../admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.tsx"],"sourcesContent":["import { adminApi } from './api';\n\nimport type { List as ListContentApiPermissions } from '../../../shared/contracts/content-api/permissions';\nimport type { List as ListContentApiRoutes } from '../../../shared/contracts/content-api/routes';\n\nconst contentApiService = adminApi.injectEndpoints({\n endpoints: (builder) => ({\n getPermissions: builder.query<ListContentApiPermissions.Response['data'], void>({\n query: () => '/admin/content-api/permissions',\n transformResponse: (response: ListContentApiPermissions.Response) => response.data,\n }),\n getRoutes: builder.query<ListContentApiRoutes.Response['data'], void>({\n query: () => '/admin/content-api/routes',\n transformResponse: (response: ListContentApiRoutes.Response) => response.data,\n }),\n }),\n overrideExisting: false,\n});\n\nconst { useGetPermissionsQuery, useGetRoutesQuery } = contentApiService;\n\nexport { useGetPermissionsQuery, useGetRoutesQuery };\n","/* eslint-disable check-file/filename-naming-convention */\n\nimport * as React from 'react';\n\nimport { createContext } from '@radix-ui/react-context';\n\nimport { List as ListContentApiPermissions } from '../../../../../../../shared/contracts/content-api/permissions';\nimport { List as ListContentApiRoutes } from '../../../../../../../shared/contracts/content-api/routes';\n\nexport interface PseudoEvent {\n target: { value: string };\n}\n\ninterface ApiTokenPermissionsContextValue {\n value: {\n selectedAction: string | null;\n routes: ListContentApiRoutes.Response['data'];\n selectedActions: string[];\n data: {\n allActionsIds: string[];\n permissions: ListContentApiPermissions.Response['data'][];\n };\n onChange: ({ target: { value } }: PseudoEvent) => void;\n onChangeSelectAll: ({\n target: { value },\n }: {\n target: { value: { action: string; actionId: string }[] };\n }) => void;\n setSelectedAction: ({ target: { value } }: PseudoEvent) => void;\n };\n}\n\ninterface ApiTokenPermissionsContextProviderProps extends ApiTokenPermissionsContextValue {\n children: React.ReactNode | React.ReactNode[];\n}\n\nconst [ApiTokenPermissionsContextProvider, useApiTokenPermissionsContext] =\n createContext<ApiTokenPermissionsContextValue>('ApiTokenPermissionsContext');\n\nconst ApiTokenPermissionsProvider = ({\n children,\n ...rest\n}: ApiTokenPermissionsContextProviderProps) => {\n return (\n <ApiTokenPermissionsContextProvider {...rest}>{children}</ApiTokenPermissionsContextProvider>\n );\n};\n\nconst useApiTokenPermissions = () => useApiTokenPermissionsContext('useApiTokenPermissions');\n\nexport { ApiTokenPermissionsProvider, useApiTokenPermissions };\nexport type { ApiTokenPermissionsContextValue, ApiTokenPermissionsContextProviderProps };\n","import * as React from 'react';\n\nimport { Box, Flex, Grid, GridItem, Typography } from '@strapi/design-system';\nimport { FormikErrors } from 'formik';\nimport { useIntl } from 'react-intl';\n\nimport { LifeSpanInput } from '../../../../components/Tokens/LifeSpanInput';\nimport { TokenDescription } from '../../../../components/Tokens/TokenDescription';\nimport { TokenName } from '../../../../components/Tokens/TokenName';\nimport { TokenTypeSelect } from '../../../../components/Tokens/TokenTypeSelect';\n\nimport type { ApiToken } from '../../../../../../../../shared/contracts/api-token';\n\ninterface FormApiTokenContainerProps {\n errors?: FormikErrors<Pick<ApiToken, 'name' | 'description' | 'lifespan' | 'type'>>;\n onChange: ({ target: { name, value } }: { target: { name: string; value: string } }) => void;\n canEditInputs: boolean;\n values?: Partial<Pick<ApiToken, 'name' | 'description' | 'lifespan' | 'type'>>;\n isCreating: boolean;\n apiToken?: null | Partial<ApiToken>;\n onDispatch: React.Dispatch<any>;\n setHasChangedPermissions: (hasChanged: boolean) => void;\n}\n\nexport const FormApiTokenContainer = ({\n errors = {},\n onChange,\n canEditInputs,\n isCreating,\n values = {},\n apiToken = {},\n onDispatch,\n setHasChangedPermissions,\n}: FormApiTokenContainerProps) => {\n const { formatMessage } = useIntl();\n\n const handleChangeSelectApiTokenType = ({ target: { value } }: { target: { value: string } }) => {\n setHasChangedPermissions(false);\n\n if (value === 'full-access') {\n onDispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (value === 'read-only') {\n onDispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n };\n\n const typeOptions = [\n {\n value: 'read-only',\n label: {\n id: 'Settings.tokens.types.read-only',\n defaultMessage: 'Read-only',\n },\n },\n {\n value: 'full-access',\n label: {\n id: 'Settings.tokens.types.full-access',\n defaultMessage: 'Full access',\n },\n },\n {\n value: 'custom',\n label: {\n id: 'Settings.tokens.types.custom',\n defaultMessage: 'Custom',\n },\n },\n ];\n\n return (\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n <Grid gap={5}>\n <GridItem key=\"name\" col={6} xs={12}>\n <TokenName\n error={errors['name']}\n value={values['name']}\n canEditInputs={canEditInputs}\n onChange={onChange}\n />\n </GridItem>\n <GridItem key=\"description\" col={6} xs={12}>\n <TokenDescription\n error={errors['description']}\n value={values['description']}\n canEditInputs={canEditInputs}\n onChange={onChange}\n />\n </GridItem>\n <GridItem key=\"lifespan\" col={6} xs={12}>\n <LifeSpanInput\n isCreating={isCreating}\n error={errors['lifespan']}\n value={values['lifespan']}\n onChange={onChange}\n token={apiToken}\n />\n </GridItem>\n\n <GridItem key=\"type\" col={6} xs={12}>\n <TokenTypeSelect\n value={values['type']}\n error={errors['type']}\n label={{\n id: 'Settings.tokens.form.type',\n defaultMessage: 'Token type',\n }}\n onChange={(value) => {\n // @ts-expect-error – DS Select supports numbers & strings, will be removed in V2\n handleChangeSelectApiTokenType({ target: { value } });\n\n // @ts-expect-error – DS Select supports numbers & strings, will be removed in V2\n onChange({ target: { name: 'type', value } });\n }}\n options={typeOptions}\n canEditInputs={canEditInputs}\n />\n </GridItem>\n </Grid>\n </Flex>\n </Box>\n );\n};\n","import React from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport map from 'lodash/map';\nimport tail from 'lodash/tail';\nimport { useIntl } from 'react-intl';\nimport styled, { DefaultTheme } from 'styled-components';\n\ntype HttpVerb = 'POST' | 'GET' | 'PUT' | 'DELETE';\n\ntype MethodColor = {\n text: keyof DefaultTheme['colors'];\n border: keyof DefaultTheme['colors'];\n background: keyof DefaultTheme['colors'];\n};\n\nconst getMethodColor = (verb: HttpVerb): MethodColor => {\n switch (verb) {\n case 'POST': {\n return {\n text: 'success600',\n border: 'success200',\n background: 'success100',\n };\n }\n case 'GET': {\n return {\n text: 'secondary600',\n border: 'secondary200',\n background: 'secondary100',\n };\n }\n case 'PUT': {\n return {\n text: 'warning600',\n border: 'warning200',\n background: 'warning100',\n };\n }\n case 'DELETE': {\n return {\n text: 'danger600',\n border: 'danger200',\n background: 'danger100',\n };\n }\n default: {\n return {\n text: 'neutral600',\n border: 'neutral200',\n background: 'neutral100',\n };\n }\n }\n};\n\nconst MethodBox = styled(Box)`\n margin: -1px;\n border-radius: ${({ theme }) => theme.spaces[1]} 0 0 ${({ theme }) => theme.spaces[1]};\n`;\n\ninterface BoundRouteProps {\n route: {\n handler: string;\n method: HttpVerb;\n path: string;\n };\n}\n\nexport const BoundRoute = ({\n route = {\n handler: 'Nocontroller.error',\n method: 'GET',\n path: '/there-is-no-path',\n },\n}: BoundRouteProps) => {\n const { formatMessage } = useIntl();\n\n const { method, handler: title, path } = route;\n const formattedRoute = path ? tail(path.split('/')) : [];\n const [controller = '', action = ''] = title ? title.split('.') : [];\n const colors = getMethodColor(route.method);\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography variant=\"delta\" as=\"h3\">\n {formatMessage({\n id: 'Settings.apiTokens.createPage.BoundRoute.title',\n defaultMessage: 'Bound route to',\n })}\n \n <span>{controller}</span>\n <Typography variant=\"delta\" textColor=\"primary600\">\n .{action}\n </Typography>\n </Typography>\n <Flex hasRadius background=\"neutral0\" borderColor=\"neutral200\" gap={0}>\n <MethodBox background={colors.background} borderColor={colors.border} padding={2}>\n <Typography fontWeight=\"bold\" textColor={colors.text}>\n {method}\n </Typography>\n </MethodBox>\n <Box paddingLeft={2} paddingRight={2}>\n {map(formattedRoute, (value) => (\n <Typography key={value} textColor={value.includes(':') ? 'neutral600' : 'neutral900'}>\n /{value}\n </Typography>\n ))}\n </Box>\n </Flex>\n </Flex>\n );\n};\n","import { Flex, GridItem, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useApiTokenPermissions } from '../apiTokenPermissions';\n\nimport { BoundRoute } from './BoundRoute';\n\nexport const ActionBoundRoutes = () => {\n const {\n value: { selectedAction, routes },\n } = useApiTokenPermissions();\n const { formatMessage } = useIntl();\n const actionSection = selectedAction?.split('.')[0];\n\n return (\n <GridItem\n col={5}\n background=\"neutral150\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n style={{ minHeight: '100%' }}\n >\n {selectedAction ? (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n {actionSection &&\n actionSection in routes &&\n routes[actionSection].map((route) => {\n return route.config.auth?.scope?.includes(selectedAction) ||\n route.handler === selectedAction ? (\n <BoundRoute key={route.handler} route={route} />\n ) : null;\n })}\n </Flex>\n ) : (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography variant=\"delta\" as=\"h3\">\n {formatMessage({\n id: 'Settings.apiTokens.createPage.permissions.header.title',\n defaultMessage: 'Advanced settings',\n })}\n </Typography>\n <Typography as=\"p\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.apiTokens.createPage.permissions.header.hint',\n defaultMessage:\n \"Select the application's actions or the plugin's actions and click on the cog icon to display the bound route\",\n })}\n </Typography>\n </Flex>\n )}\n </GridItem>\n );\n};\n","import * as React from 'react';\n\nimport {\n Accordion,\n AccordionContent,\n AccordionToggle,\n Box,\n Checkbox,\n Flex,\n Grid,\n GridItem,\n Typography,\n} from '@strapi/design-system';\nimport { Cog } from '@strapi/icons';\nimport capitalize from 'lodash/capitalize';\nimport { useIntl } from 'react-intl';\nimport styled, { css } from 'styled-components';\n\nimport { ContentApiPermission } from '../../../../../../../../shared/contracts/content-api/permissions';\nimport { useApiTokenPermissions } from '../apiTokenPermissions';\n\nconst activeCheckboxWrapperStyles = css`\n background: ${(props) => props.theme.colors.primary100};\n svg {\n opacity: 1;\n }\n`;\n\nconst CheckboxWrapper = styled(Box)<{ isActive: boolean }>`\n display: flex;\n justify-content: space-between;\n align-items: center;\n\n svg {\n opacity: 0;\n path {\n fill: ${(props) => props.theme.colors.primary600};\n }\n }\n\n /* Show active style both on hover and when the action is selected */\n ${(props) => props.isActive && activeCheckboxWrapperStyles}\n &:hover {\n ${activeCheckboxWrapperStyles}\n }\n`;\n\nconst Border = styled.div`\n flex: 1;\n align-self: center;\n border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\ninterface CollapsableContentTypeProps {\n controllers?: ContentApiPermission['controllers'];\n label: ContentApiPermission['label'];\n orderNumber?: number;\n disabled?: boolean;\n onExpanded?: (orderNumber: number) => void;\n indexExpandendCollapsedContent: number | null;\n}\n\nexport const CollapsableContentType = ({\n controllers = [],\n label,\n orderNumber = 0,\n disabled = false,\n onExpanded = () => null,\n indexExpandendCollapsedContent = null,\n}: CollapsableContentTypeProps) => {\n const {\n value: { onChangeSelectAll, onChange, selectedActions, setSelectedAction, selectedAction },\n } = useApiTokenPermissions();\n const [expanded, setExpanded] = React.useState(false);\n const { formatMessage } = useIntl();\n\n const handleExpandedAccordion = () => {\n setExpanded((s) => !s);\n onExpanded(orderNumber);\n };\n\n React.useEffect(() => {\n if (\n indexExpandendCollapsedContent !== null &&\n indexExpandendCollapsedContent !== orderNumber &&\n expanded\n ) {\n setExpanded(false);\n }\n }, [indexExpandendCollapsedContent, orderNumber, expanded]);\n\n const isActionSelected = (actionId: string) => actionId === selectedAction;\n\n return (\n <Accordion\n expanded={expanded}\n onToggle={handleExpandedAccordion}\n variant={orderNumber % 2 ? 'primary' : 'secondary'}\n >\n <AccordionToggle title={capitalize(label)} />\n <AccordionContent>\n {controllers?.map((controller) => {\n const allActionsSelected = controller.actions.every((action) =>\n selectedActions.includes(action.actionId)\n );\n\n const someActionsSelected = controller.actions.some((action) =>\n selectedActions.includes(action.actionId)\n );\n\n return (\n <Box key={`${label}.${controller?.controller}`}>\n <Flex justifyContent=\"space-between\" alignItems=\"center\" padding={4}>\n <Box paddingRight={4}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {controller?.controller}\n </Typography>\n </Box>\n <Border />\n <Box paddingLeft={4}>\n <Checkbox\n value={allActionsSelected}\n indeterminate={!allActionsSelected && someActionsSelected}\n onValueChange={() => {\n onChangeSelectAll({ target: { value: [...controller.actions] } });\n }}\n disabled={disabled}\n >\n {formatMessage({ id: 'app.utils.select-all', defaultMessage: 'Select all' })}\n </Checkbox>\n </Box>\n </Flex>\n <Grid gap={4} padding={4}>\n {controller?.actions &&\n controller?.actions.map((action) => {\n return (\n <GridItem col={6} key={action.actionId}>\n <CheckboxWrapper\n isActive={isActionSelected(action.actionId)}\n padding={2}\n hasRadius\n >\n <Checkbox\n value={selectedActions.includes(action.actionId)}\n name={action.actionId}\n onValueChange={() => {\n onChange({ target: { value: action.actionId } });\n }}\n disabled={disabled}\n >\n {action.action}\n </Checkbox>\n <button\n type=\"button\"\n data-testid=\"action-cog\"\n onClick={() =>\n setSelectedAction({ target: { value: action.actionId } })\n }\n style={{ display: 'inline-flex', alignItems: 'center' }}\n >\n <Cog />\n </button>\n </CheckboxWrapper>\n </GridItem>\n );\n })}\n </Grid>\n </Box>\n );\n })}\n </AccordionContent>\n </Accordion>\n );\n};\n","import * as React from 'react';\n\nimport { Box } from '@strapi/design-system';\n\nimport { ContentApiPermission } from '../../../../../../../../shared/contracts/content-api/permissions';\n\nimport { CollapsableContentType } from './CollabsableContentType';\n\ninterface ContentTypesSectionProps {\n section: ContentApiPermission[] | null;\n}\n\nexport const ContentTypesSection = ({ section = null, ...props }: ContentTypesSectionProps) => {\n const [indexExpandedCollpsedContent, setIndexExpandedCollpsedContent] = React.useState<\n null | number\n >(null);\n const handleExpandedCollpsedContentIndex = (index: number) =>\n setIndexExpandedCollpsedContent(index);\n\n return (\n <Box padding={4} background=\"neutral0\">\n {section &&\n section.map((api, index) => (\n <CollapsableContentType\n key={api.apiId}\n label={api.label}\n controllers={api.controllers}\n orderNumber={index}\n indexExpandendCollapsedContent={indexExpandedCollpsedContent}\n onExpanded={handleExpandedCollpsedContentIndex}\n {...props}\n />\n ))}\n </Box>\n );\n};\n","import { Flex, Grid, GridItem, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { useApiTokenPermissions } from '../apiTokenPermissions';\n\nimport { ActionBoundRoutes } from './ActionBoundRoutes';\nimport { ContentTypesSection } from './ContentTypesSection';\n\nexport const Permissions = ({ ...props }) => {\n const {\n value: { data },\n } = useApiTokenPermissions();\n const { formatMessage } = useIntl();\n\n return (\n <Grid gap={0} shadow=\"filterShadow\" hasRadius background=\"neutral0\">\n <GridItem col={7} paddingTop={6} paddingBottom={6} paddingLeft={7} paddingRight={7}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: 'Settings.apiTokens.createPage.permissions.title',\n defaultMessage: 'Permissions',\n })}\n </Typography>\n <Typography as=\"p\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.apiTokens.createPage.permissions.description',\n defaultMessage: 'Only actions bound by a route are listed below.',\n })}\n </Typography>\n </Flex>\n {data?.permissions && <ContentTypesSection section={data?.permissions} {...props} />}\n </GridItem>\n <ActionBoundRoutes />\n </Grid>\n );\n};\n","import * as yup from 'yup';\n\nimport { translatedErrors } from '../../../../../utils/translatedErrors';\n\nexport const schema = yup.object().shape({\n name: yup.string().max(100).required(translatedErrors.required.id),\n type: yup\n .string()\n .oneOf(['read-only', 'full-access', 'custom'])\n .required(translatedErrors.required.id),\n description: yup.string().nullable(),\n lifespan: yup.number().integer().min(0).nullable().defined(translatedErrors.required.id),\n});\n","import { ContentApiPermission } from '../../../../../../../../shared/contracts/content-api/permissions';\n\ninterface Layout {\n allActionsIds: string[];\n permissions: {\n apiId: string;\n label: string;\n controllers: { controller: string; actions: { action: string; actionId: string }[] }[];\n }[];\n}\n\nexport const transformPermissionsData = (data: ContentApiPermission) => {\n const layout: Layout = {\n allActionsIds: [],\n permissions: [],\n };\n\n layout.permissions = Object.entries(data).map(([apiId, permission]) => ({\n apiId,\n label: apiId.split('::')[1],\n controllers: Object.keys(permission.controllers)\n .map((controller) => ({\n controller,\n actions:\n controller in permission.controllers\n ? permission.controllers[controller]\n .map((action: ContentApiPermission['controllers']) => {\n const actionId = `${apiId}.${controller}.${action}`;\n\n if (apiId.includes('api::')) {\n layout.allActionsIds.push(actionId);\n }\n\n return {\n action,\n actionId,\n };\n })\n .flat()\n : [],\n }))\n .flat(),\n }));\n\n return layout;\n};\n","/* eslint-disable consistent-return */\nimport { produce } from 'immer';\nimport pull from 'lodash/pull';\n\nimport { ContentApiPermission } from '../../../../../../../shared/contracts/content-api/permissions';\n\nimport { ApiTokenPermissionsContextValue } from './apiTokenPermissions';\nimport { transformPermissionsData } from './utils/transformPermissionsData';\n\ntype InitialState = Pick<\n ApiTokenPermissionsContextValue['value'],\n 'data' | 'routes' | 'selectedAction' | 'selectedActions'\n>;\n\ninterface ActionOnChange {\n type: 'ON_CHANGE';\n value: string;\n}\n\ninterface ActionSelectAllInPermission {\n type: 'SELECT_ALL_IN_PERMISSION';\n value: { action: string; actionId: string }[];\n}\n\ninterface ActionSelectAllActions {\n type: 'SELECT_ALL_ACTIONS';\n}\n\ninterface ActionOnChangeReadOnly {\n type: 'ON_CHANGE_READ_ONLY';\n}\n\ninterface ActionUpdatePermissionsLayout {\n type: 'UPDATE_PERMISSIONS_LAYOUT';\n value: ContentApiPermission;\n}\n\ninterface ActionUpdateRoutes {\n type: 'UPDATE_ROUTES';\n value: ApiTokenPermissionsContextValue['value']['routes'] | undefined;\n}\n\ninterface ActionUpdatePermissions {\n type: 'UPDATE_PERMISSIONS';\n value: any[];\n}\n\ninterface ActionSetSelectedAction {\n type: 'SET_SELECTED_ACTION';\n value: string;\n}\n\ntype Action =\n | ActionOnChange\n | ActionSelectAllInPermission\n | ActionSelectAllActions\n | ActionOnChangeReadOnly\n | ActionUpdatePermissionsLayout\n | ActionUpdateRoutes\n | ActionUpdatePermissions\n | ActionSetSelectedAction;\n\nexport const initialState: InitialState = {\n data: {\n allActionsIds: [],\n permissions: [],\n },\n routes: {},\n selectedAction: '',\n selectedActions: [],\n};\n\nexport const reducer = (state: InitialState, action: Action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'ON_CHANGE': {\n if (draftState.selectedActions.includes(action.value)) {\n pull(draftState.selectedActions, action.value);\n } else {\n draftState.selectedActions.push(action.value);\n }\n break;\n }\n case 'SELECT_ALL_IN_PERMISSION': {\n const areAllSelected = action.value.every((item) =>\n draftState.selectedActions.includes(item.actionId)\n );\n\n if (areAllSelected) {\n action.value.forEach((item) => {\n pull(draftState.selectedActions, item.actionId);\n });\n } else {\n action.value.forEach((item) => {\n draftState.selectedActions.push(item.actionId);\n });\n }\n break;\n }\n\n case 'SELECT_ALL_ACTIONS': {\n draftState.selectedActions = [...draftState.data.allActionsIds];\n\n break;\n }\n case 'ON_CHANGE_READ_ONLY': {\n const onlyReadOnlyActions = draftState.data.allActionsIds.filter(\n (actionId) => actionId.includes('find') || actionId.includes('findOne')\n );\n draftState.selectedActions = [...onlyReadOnlyActions];\n break;\n }\n case 'UPDATE_PERMISSIONS_LAYOUT': {\n draftState.data = transformPermissionsData(action.value);\n break;\n }\n case 'UPDATE_ROUTES': {\n draftState.routes = { ...action.value };\n break;\n }\n case 'UPDATE_PERMISSIONS': {\n draftState.selectedActions = [...action.value];\n break;\n }\n case 'SET_SELECTED_ACTION': {\n draftState.selectedAction = action.value;\n break;\n }\n default:\n return draftState;\n }\n });\n","import * as React from 'react';\n\nimport { ContentLayout, Flex } from '@strapi/design-system';\nimport { useRBAC } from '@strapi/helper-plugin';\nimport { Formik, Form, FormikHelpers } from 'formik';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useMatch, useNavigate } from 'react-router-dom';\n\nimport { useGuidedTour } from '../../../../../components/GuidedTour/Provider';\nimport { Page } from '../../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../../core/store/hooks';\nimport { useNotification } from '../../../../../features/Notifications';\nimport { useTracking } from '../../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../../hooks/useAPIErrorHandler';\nimport {\n useCreateAPITokenMutation,\n useGetAPITokenQuery,\n useUpdateAPITokenMutation,\n} from '../../../../../services/apiTokens';\nimport { useGetPermissionsQuery, useGetRoutesQuery } from '../../../../../services/contentApi';\nimport { isBaseQueryError } from '../../../../../utils/baseQuery';\nimport { API_TOKEN_TYPE } from '../../../components/Tokens/constants';\nimport { FormHead } from '../../../components/Tokens/FormHead';\nimport { TokenBox } from '../../../components/Tokens/TokenBox';\n\nimport {\n ApiTokenPermissionsContextValue,\n ApiTokenPermissionsProvider,\n} from './apiTokenPermissions';\nimport { FormApiTokenContainer } from './components/FormApiTokenContainer';\nimport { Permissions } from './components/Permissions';\nimport { schema } from './constants';\nimport { initialState, reducer } from './reducer';\n\nimport type { Get, ApiToken } from '../../../../../../../shared/contracts/api-token';\n\n/**\n * TODO: this could definitely be refactored to avoid using redux and instead just use the\n * server response as the source of the truth for the data.\n */\nexport const EditView = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { state: locationState } = useLocation();\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const [apiToken, setApiToken] = React.useState<ApiToken | null>(\n locationState?.apiToken?.accessKey\n ? {\n ...locationState.apiToken,\n }\n : null\n );\n const { trackUsage } = useTracking();\n const setCurrentStep = useGuidedTour('EditView', (state) => state.setCurrentStep);\n const {\n allowedActions: { canCreate, canUpdate, canRegenerate },\n } = useRBAC(permissions.settings?.['api-tokens']);\n const [state, dispatch] = React.useReducer(reducer, initialState);\n const match = useMatch('/settings/api-tokens/:id');\n const id = match?.params?.id;\n const isCreating = id === 'create';\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidtionErrors,\n } = useAPIErrorHandler();\n\n const navigate = useNavigate();\n\n const contentAPIPermissionsQuery = useGetPermissionsQuery();\n const contentAPIRoutesQuery = useGetRoutesQuery();\n\n /**\n * Separate effects otherwise we could end\n * up duplicating the same notification.\n */\n React.useEffect(() => {\n if (contentAPIPermissionsQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentAPIPermissionsQuery.error),\n });\n }\n }, [contentAPIPermissionsQuery.error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (contentAPIRoutesQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentAPIRoutesQuery.error),\n });\n }\n }, [contentAPIRoutesQuery.error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (contentAPIPermissionsQuery.data) {\n dispatch({\n type: 'UPDATE_PERMISSIONS_LAYOUT',\n value: contentAPIPermissionsQuery.data,\n });\n }\n }, [contentAPIPermissionsQuery.data]);\n\n React.useEffect(() => {\n if (contentAPIRoutesQuery.data) {\n dispatch({\n type: 'UPDATE_ROUTES',\n value: contentAPIRoutesQuery.data,\n });\n }\n }, [contentAPIRoutesQuery.data]);\n\n React.useEffect(() => {\n if (apiToken) {\n if (apiToken.type === 'read-only') {\n dispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n if (apiToken.type === 'full-access') {\n dispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (apiToken.type === 'custom') {\n dispatch({\n type: 'UPDATE_PERMISSIONS',\n value: apiToken?.permissions,\n });\n }\n }\n }, [apiToken]);\n\n React.useEffect(() => {\n trackUsage(isCreating ? 'didAddTokenFromList' : 'didEditTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n });\n }, [isCreating, trackUsage]);\n\n const { data, error, isLoading } = useGetAPITokenQuery(id!, {\n skip: !id || isCreating || !!apiToken,\n });\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (data) {\n setApiToken(data);\n\n if (data.type === 'read-only') {\n dispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n if (data.type === 'full-access') {\n dispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (data.type === 'custom') {\n dispatch({\n type: 'UPDATE_PERMISSIONS',\n value: data?.permissions,\n });\n }\n }\n }, [data]);\n\n const [createToken] = useCreateAPITokenMutation();\n const [updateToken] = useUpdateAPITokenMutation();\n\n interface FormValues extends Pick<Get.Response['data'], 'name' | 'description'> {\n lifespan: Get.Response['data']['lifespan'] | undefined;\n type: Get.Response['data']['type'] | undefined;\n }\n\n const handleSubmit = async (body: FormValues, formik: FormikHelpers<FormValues>) => {\n trackUsage(isCreating ? 'willCreateToken' : 'willEditToken', {\n tokenType: API_TOKEN_TYPE,\n });\n\n try {\n if (isCreating) {\n const res = await createToken({\n ...body,\n // lifespan must be \"null\" for unlimited (0 would mean instantly expired and isn't accepted)\n lifespan: body?.lifespan || null,\n permissions: body.type === 'custom' ? state.selectedActions : null,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidtionErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.apitokencreated',\n defaultMessage: 'API Token successfully created',\n }),\n });\n\n trackUsage('didCreateToken', {\n type: res.data.type,\n tokenType: API_TOKEN_TYPE,\n });\n\n navigate(res.data.id.toString(), {\n state: { apiToken: res.data },\n replace: true,\n });\n setCurrentStep('apiTokens.success');\n } else {\n const res = await updateToken({\n id: id!,\n name: body.name,\n description: body.description,\n type: body.type,\n permissions: body.type === 'custom' ? state.selectedActions : null,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidtionErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.apitokenedited',\n defaultMessage: 'API Token successfully edited',\n }),\n });\n\n trackUsage('didEditToken', {\n type: res.data.type,\n tokenType: API_TOKEN_TYPE,\n });\n }\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n }\n };\n\n const [hasChangedPermissions, setHasChangedPermissions] = React.useState(false);\n\n const handleChangeCheckbox = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['onChange']>[0]) => {\n setHasChangedPermissions(true);\n dispatch({\n type: 'ON_CHANGE',\n value,\n });\n };\n\n const handleChangeSelectAllCheckbox = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['onChangeSelectAll']>[0]) => {\n setHasChangedPermissions(true);\n dispatch({\n type: 'SELECT_ALL_IN_PERMISSION',\n value,\n });\n };\n\n const setSelectedAction = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['setSelectedAction']>[0]) => {\n dispatch({\n type: 'SET_SELECTED_ACTION',\n value,\n });\n };\n\n const providerValue = {\n ...state,\n onChange: handleChangeCheckbox,\n onChangeSelectAll: handleChangeSelectAllCheckbox,\n setSelectedAction,\n };\n\n const canEditInputs = (canUpdate && !isCreating) || (canCreate && isCreating);\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <ApiTokenPermissionsProvider value={providerValue}>\n <Page.Main>\n <Helmet\n title={formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'API Tokens' }\n )}\n />\n <Formik\n validationSchema={schema}\n validateOnChange={false}\n initialValues={{\n name: apiToken?.name || '',\n description: apiToken?.description || '',\n type: apiToken?.type,\n lifespan: apiToken?.lifespan,\n }}\n enableReinitialize\n onSubmit={(body, actions) => handleSubmit(body, actions)}\n >\n {({ errors, handleChange, isSubmitting, values, setFieldValue }) => {\n if (hasChangedPermissions && values?.type !== 'custom') {\n setFieldValue('type', 'custom');\n }\n\n return (\n <Form>\n <FormHead\n title={{\n id: 'Settings.apiTokens.createPage.title',\n defaultMessage: 'Create API Token',\n }}\n token={apiToken}\n setToken={setApiToken}\n canEditInputs={canEditInputs}\n canRegenerate={canRegenerate}\n isSubmitting={isSubmitting}\n regenerateUrl=\"/admin/api-tokens/\"\n />\n\n <ContentLayout>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {Boolean(apiToken?.name) && (\n <TokenBox token={apiToken?.accessKey} tokenType={API_TOKEN_TYPE} />\n )}\n <FormApiTokenContainer\n errors={errors}\n onChange={handleChange}\n canEditInputs={canEditInputs}\n isCreating={isCreating}\n values={values}\n apiToken={apiToken}\n onDispatch={dispatch}\n setHasChangedPermissions={setHasChangedPermissions}\n />\n <Permissions\n disabled={\n !canEditInputs ||\n values?.type === 'read-only' ||\n values?.type === 'full-access'\n }\n />\n </Flex>\n </ContentLayout>\n </Form>\n );\n }}\n </Formik>\n </Page.Main>\n </ApiTokenPermissionsProvider>\n );\n};\n\nexport const ProtectedEditView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens'].read\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <EditView />\n </Page.Protect>\n );\n};\n"],"names":["translatedErrors","state"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAKA,MAAM,oBAAoB,SAAS,gBAAgB;AAAA,EACjD,WAAW,CAAC,aAAa;AAAA,IACvB,gBAAgB,QAAQ,MAAwD;AAAA,MAC9E,OAAO,MAAM;AAAA,MACb,mBAAmB,CAAC,aAAiD,SAAS;AAAA,IAAA,CAC/E;AAAA,IACD,WAAW,QAAQ,MAAmD;AAAA,MACpE,OAAO,MAAM;AAAA,MACb,mBAAmB,CAAC,aAA4C,SAAS;AAAA,IAAA,CAC1E;AAAA,EAAA;AAAA,EAEH,kBAAkB;AACpB,CAAC;AAED,MAAM,EAAE,wBAAwB,kBAAA,IAAsB;ACiBtD,MAAM,CAAC,oCAAoC,6BAA6B,IACtE,cAA+C,4BAA4B;AAE7E,MAAM,8BAA8B,CAAC;AAAA,EACnC;AAAA,EACA,GAAG;AACL,MAA+C;AAC7C,SACG,oBAAA,oCAAA,EAAoC,GAAG,MAAO,SAAS,CAAA;AAE5D;AAEA,MAAM,yBAAyB,MAAM,8BAA8B,wBAAwB;ACxBpF,MAAM,wBAAwB,CAAC;AAAA,EACpC,SAAS,CAAC;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS,CAAC;AAAA,EACV,WAAW,CAAC;AAAA,EACZ;AAAA,EACA;AACF,MAAkC;AAC1B,QAAA,EAAE,kBAAkB;AAE1B,QAAM,iCAAiC,CAAC,EAAE,QAAQ,EAAE,cAA6C;AAC/F,6BAAyB,KAAK;AAE9B,QAAI,UAAU,eAAe;AAChB,iBAAA;AAAA,QACT,MAAM;AAAA,MAAA,CACP;AAAA,IACH;AACA,QAAI,UAAU,aAAa;AACd,iBAAA;AAAA,QACT,MAAM;AAAA,MAAA,CACP;AAAA,IACH;AAAA,EAAA;AAGF,QAAM,cAAc;AAAA,IAClB;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,IACF;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,IACF;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAClB;AAAA,IACF;AAAA,EAAA;AAIA,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,YAAW;AAAA,MACX,WAAS;AAAA,MACT,QAAO;AAAA,MACP,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,aAAa;AAAA,MACb,cAAc;AAAA,MAEd,+BAAC,MAAK,EAAA,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,QAAA,oBAAC,YAAW,EAAA,SAAQ,SAAQ,IAAG,MAC5B,UAAc,cAAA;AAAA,UACb,IAAI;AAAA,UACJ,gBAAgB;AAAA,QACjB,CAAA,GACH;AAAA,QACA,qBAAC,MAAK,EAAA,KAAK,GACT,UAAA;AAAA,UAAA,oBAAC,UAAoB,EAAA,KAAK,GAAG,IAAI,IAC/B,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO,OAAO,MAAM;AAAA,cACpB,OAAO,OAAO,MAAM;AAAA,cACpB;AAAA,cACA;AAAA,YAAA;AAAA,eALU,MAOd;AAAA,UACC,oBAAA,UAAA,EAA2B,KAAK,GAAG,IAAI,IACtC,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO,OAAO,aAAa;AAAA,cAC3B,OAAO,OAAO,aAAa;AAAA,cAC3B;AAAA,cACA;AAAA,YAAA;AAAA,eALU,aAOd;AAAA,UACC,oBAAA,UAAA,EAAwB,KAAK,GAAG,IAAI,IACnC,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC;AAAA,cACA,OAAO,OAAO,UAAU;AAAA,cACxB,OAAO,OAAO,UAAU;AAAA,cACxB;AAAA,cACA,OAAO;AAAA,YAAA;AAAA,eANG,UAQd;AAAA,UAEC,oBAAA,UAAA,EAAoB,KAAK,GAAG,IAAI,IAC/B,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAO,OAAO,MAAM;AAAA,cACpB,OAAO,OAAO,MAAM;AAAA,cACpB,OAAO;AAAA,gBACL,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cAClB;AAAA,cACA,UAAU,CAAC,UAAU;AAEnB,+CAA+B,EAAE,QAAQ,EAAE,MAAA,EAAS,CAAA;AAGpD,yBAAS,EAAE,QAAQ,EAAE,MAAM,QAAQ,SAAS;AAAA,cAC9C;AAAA,cACA,SAAS;AAAA,cACT;AAAA,YAAA;AAAA,eAhBU,MAkBd;AAAA,QAAA,GACF;AAAA,MAAA,GACF;AAAA,IAAA;AAAA,EAAA;AAGN;AC9HA,MAAM,iBAAiB,CAAC,SAAgC;AACtD,UAAQ,MAAM;AAAA,IACZ,KAAK,QAAQ;AACJ,aAAA;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,YAAY;AAAA,MAAA;AAAA,IAEhB;AAAA,IACA,KAAK,OAAO;AACH,aAAA;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,YAAY;AAAA,MAAA;AAAA,IAEhB;AAAA,IACA,KAAK,OAAO;AACH,aAAA;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,YAAY;AAAA,MAAA;AAAA,IAEhB;AAAA,IACA,KAAK,UAAU;AACN,aAAA;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,YAAY;AAAA,MAAA;AAAA,IAEhB;AAAA,IACA,SAAS;AACA,aAAA;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,YAAY;AAAA,MAAA;AAAA,IAEhB;AAAA,EACF;AACF;AAEA,MAAM,YAAY,OAAO,GAAG;AAAA;AAAA,mBAET,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAM,MAAM,MAAM,OAAO,CAAC,CAAC;AAAA;AAWhF,MAAM,aAAa,CAAC;AAAA,EACzB,QAAQ;AAAA,IACN,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AACF,MAAuB;AACf,QAAA,EAAE,kBAAkB;AAE1B,QAAM,EAAE,QAAQ,SAAS,OAAO,SAAS;AACnC,QAAA,iBAAiB,OAAO,KAAK,KAAK,MAAM,GAAG,CAAC,IAAI;AAChD,QAAA,CAAC,aAAa,IAAI,SAAS,EAAE,IAAI,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAA;AAC5D,QAAA,SAAS,eAAe,MAAM,MAAM;AAE1C,8BACG,MAAK,EAAA,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,IAAA,qBAAC,YAAW,EAAA,SAAQ,SAAQ,IAAG,MAC5B,UAAA;AAAA,MAAc,cAAA;AAAA,QACb,IAAI;AAAA,QACJ,gBAAgB;AAAA,MAAA,CACjB;AAAA,MAAE;AAAA,MAEH,oBAAC,UAAM,UAAW,WAAA,CAAA;AAAA,MACjB,qBAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,cAAa,UAAA;AAAA,QAAA;AAAA,QAC/C;AAAA,MAAA,GACJ;AAAA,IAAA,GACF;AAAA,IACA,qBAAC,QAAK,WAAS,MAAC,YAAW,YAAW,aAAY,cAAa,KAAK,GAClE,UAAA;AAAA,MAAA,oBAAC,aAAU,YAAY,OAAO,YAAY,aAAa,OAAO,QAAQ,SAAS,GAC7E,UAAA,oBAAC,cAAW,YAAW,QAAO,WAAW,OAAO,MAC7C,iBACH,CAAA,GACF;AAAA,0BACC,KAAI,EAAA,aAAa,GAAG,cAAc,GAChC,cAAI,gBAAgB,CAAC,UACpB,qBAAC,cAAuB,WAAW,MAAM,SAAS,GAAG,IAAI,eAAe,cAAc,UAAA;AAAA,QAAA;AAAA,QAClF;AAAA,MAAA,KADa,KAEjB,CACD,GACH;AAAA,IAAA,GACF;AAAA,EACF,EAAA,CAAA;AAEJ;ACzGO,MAAM,oBAAoB,MAAM;AAC/B,QAAA;AAAA,IACJ,OAAO,EAAE,gBAAgB,OAAO;AAAA,MAC9B,uBAAuB;AACrB,QAAA,EAAE,kBAAkB;AAC1B,QAAM,gBAAgB,gBAAgB,MAAM,GAAG,EAAE,CAAC;AAGhD,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAK;AAAA,MACL,YAAW;AAAA,MACX,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,aAAa;AAAA,MACb,cAAc;AAAA,MACd,OAAO,EAAE,WAAW,OAAO;AAAA,MAE1B,2BACE,oBAAA,MAAA,EAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GAChD,UAAA,iBACC,iBAAiB,UACjB,OAAO,aAAa,EAAE,IAAI,CAAC,UAAU;AACnC,eAAO,MAAM,OAAO,MAAM,OAAO,SAAS,cAAc,KACtD,MAAM,YAAY,iBACjB,oBAAA,YAAA,EAA+B,MAAf,GAAA,MAAM,OAAuB,IAC5C;AAAA,MACL,CAAA,GACL,IAEC,qBAAA,MAAA,EAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,QAAA,oBAAC,YAAW,EAAA,SAAQ,SAAQ,IAAG,MAC5B,UAAc,cAAA;AAAA,UACb,IAAI;AAAA,UACJ,gBAAgB;AAAA,QACjB,CAAA,GACH;AAAA,4BACC,YAAW,EAAA,IAAG,KAAI,WAAU,cAC1B,UAAc,cAAA;AAAA,UACb,IAAI;AAAA,UACJ,gBACE;AAAA,QACH,CAAA,GACH;AAAA,MAAA,GACF;AAAA,IAAA;AAAA,EAAA;AAIR;ACjCA,MAAM,8BAA8B;AAAA,gBACpB,CAAC,UAAU,MAAM,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAMxD,MAAM,kBAAkB,OAAO,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAQpB,CAAC,UAAU,MAAM,MAAM,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA,IAKlD,CAAC,UAAU,MAAM,YAAY,2BAA2B;AAAA;AAAA,MAEtD,2BAA2B;AAAA;AAAA;AAIjC,MAAM,SAAS,OAAO;AAAA;AAAA;AAAA,0BAGI,CAAC,EAAE,MAAA,MAAY,MAAM,OAAO,UAAU;AAAA;AAYzD,MAAM,yBAAyB,CAAC;AAAA,EACrC,cAAc,CAAC;AAAA,EACf;AAAA,EACA,cAAc;AAAA,EACd,WAAW;AAAA,EACX,aAAa,MAAM;AAAA,EACnB,iCAAiC;AACnC,MAAmC;AAC3B,QAAA;AAAA,IACJ,OAAO,EAAE,mBAAmB,UAAU,iBAAiB,mBAAmB,eAAe;AAAA,MACvF,uBAAuB;AAC3B,QAAM,CAAC,UAAU,WAAW,IAAI,MAAM,SAAS,KAAK;AAC9C,QAAA,EAAE,kBAAkB;AAE1B,QAAM,0BAA0B,MAAM;AACxB,gBAAA,CAAC,MAAM,CAAC,CAAC;AACrB,eAAW,WAAW;AAAA,EAAA;AAGxB,QAAM,UAAU,MAAM;AACpB,QACE,mCAAmC,QACnC,mCAAmC,eACnC,UACA;AACA,kBAAY,KAAK;AAAA,IACnB;AAAA,EACC,GAAA,CAAC,gCAAgC,aAAa,QAAQ,CAAC;AAEpD,QAAA,mBAAmB,CAAC,aAAqB,aAAa;AAG1D,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA,UAAU;AAAA,MACV,SAAS,cAAc,IAAI,YAAY;AAAA,MAEvC,UAAA;AAAA,QAAA,oBAAC,iBAAgB,EAAA,OAAO,WAAW,KAAK,EAAG,CAAA;AAAA,QAC1C,oBAAA,kBAAA,EACE,UAAa,aAAA,IAAI,CAAC,eAAe;AAC1B,gBAAA,qBAAqB,WAAW,QAAQ;AAAA,YAAM,CAAC,WACnD,gBAAgB,SAAS,OAAO,QAAQ;AAAA,UAAA;AAGpC,gBAAA,sBAAsB,WAAW,QAAQ;AAAA,YAAK,CAAC,WACnD,gBAAgB,SAAS,OAAO,QAAQ;AAAA,UAAA;AAG1C,sCACG,KACC,EAAA,UAAA;AAAA,YAAA,qBAAC,QAAK,gBAAe,iBAAgB,YAAW,UAAS,SAAS,GAChE,UAAA;AAAA,cAAC,oBAAA,KAAA,EAAI,cAAc,GACjB,UAAC,oBAAA,YAAA,EAAW,SAAQ,SAAQ,WAAU,cACnC,UAAY,YAAA,WACf,CAAA,GACF;AAAA,kCACC,QAAO,EAAA;AAAA,cACR,oBAAC,KAAI,EAAA,aAAa,GAChB,UAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,OAAO;AAAA,kBACP,eAAe,CAAC,sBAAsB;AAAA,kBACtC,eAAe,MAAM;AACD,sCAAA,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,WAAW,OAAO,EAAE,EAAA,CAAG;AAAA,kBAClE;AAAA,kBACA;AAAA,kBAEC,wBAAc,EAAE,IAAI,wBAAwB,gBAAgB,cAAc;AAAA,gBAAA;AAAA,cAAA,GAE/E;AAAA,YAAA,GACF;AAAA,YACC,oBAAA,MAAA,EAAK,KAAK,GAAG,SAAS,GACpB,UAAY,YAAA,WACX,YAAY,QAAQ,IAAI,CAAC,WAAW;AAEhC,qBAAA,oBAAC,UAAS,EAAA,KAAK,GACb,UAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,UAAU,iBAAiB,OAAO,QAAQ;AAAA,kBAC1C,SAAS;AAAA,kBACT,WAAS;AAAA,kBAET,UAAA;AAAA,oBAAA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,OAAO,gBAAgB,SAAS,OAAO,QAAQ;AAAA,wBAC/C,MAAM,OAAO;AAAA,wBACb,eAAe,MAAM;AACnB,mCAAS,EAAE,QAAQ,EAAE,OAAO,OAAO,YAAY;AAAA,wBACjD;AAAA,wBACA;AAAA,wBAEC,UAAO,OAAA;AAAA,sBAAA;AAAA,oBACV;AAAA,oBACA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,MAAK;AAAA,wBACL,eAAY;AAAA,wBACZ,SAAS,MACP,kBAAkB,EAAE,QAAQ,EAAE,OAAO,OAAO,SAAS,GAAG;AAAA,wBAE1D,OAAO,EAAE,SAAS,eAAe,YAAY,SAAS;AAAA,wBAEtD,8BAAC,KAAI,EAAA;AAAA,sBAAA;AAAA,oBACP;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA,KAzBmB,OAAO,QA2B9B;AAAA,YAEH,CAAA,GACL;AAAA,UAAA,EAAA,GAvDQ,GAAG,KAAK,IAAI,YAAY,UAAU,EAwD5C;AAAA,QAEH,CAAA,GACH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;ACjKO,MAAM,sBAAsB,CAAC,EAAE,UAAU,MAAM,GAAG,YAAsC;AAC7F,QAAM,CAAC,8BAA8B,+BAA+B,IAAI,MAAM,SAE5E,IAAI;AACN,QAAM,qCAAqC,CAAC,UAC1C,gCAAgC,KAAK;AAGrC,SAAA,oBAAC,KAAI,EAAA,SAAS,GAAG,YAAW,YACzB,UAAA,WACC,QAAQ,IAAI,CAAC,KAAK,UAChB;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,OAAO,IAAI;AAAA,MACX,aAAa,IAAI;AAAA,MACjB,aAAa;AAAA,MACb,gCAAgC;AAAA,MAChC,YAAY;AAAA,MACX,GAAG;AAAA,IAAA;AAAA,IANC,IAAI;AAAA,EAQZ,CAAA,EACL,CAAA;AAEJ;AC3BO,MAAM,cAAc,CAAC,EAAE,GAAG,YAAY;AACrC,QAAA;AAAA,IACJ,OAAO,EAAE,KAAK;AAAA,MACZ,uBAAuB;AACrB,QAAA,EAAE,kBAAkB;AAGxB,SAAA,qBAAC,QAAK,KAAK,GAAG,QAAO,gBAAe,WAAS,MAAC,YAAW,YACvD,UAAA;AAAA,IAAC,qBAAA,UAAA,EAAS,KAAK,GAAG,YAAY,GAAG,eAAe,GAAG,aAAa,GAAG,cAAc,GAC/E,UAAA;AAAA,MAAA,qBAAC,QAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GACjD,UAAA;AAAA,QAAA,oBAAC,YAAW,EAAA,SAAQ,SAAQ,IAAG,MAC5B,UAAc,cAAA;AAAA,UACb,IAAI;AAAA,UACJ,gBAAgB;AAAA,QACjB,CAAA,GACH;AAAA,4BACC,YAAW,EAAA,IAAG,KAAI,WAAU,cAC1B,UAAc,cAAA;AAAA,UACb,IAAI;AAAA,UACJ,gBAAgB;AAAA,QACjB,CAAA,GACH;AAAA,MAAA,GACF;AAAA,MACC,MAAM,eAAgB,oBAAA,qBAAA,EAAoB,SAAS,MAAM,aAAc,GAAG,OAAO;AAAA,IAAA,GACpF;AAAA,wBACC,mBAAkB,EAAA;AAAA,EACrB,EAAA,CAAA;AAEJ;AChCO,MAAM,SAAS,IAAI,OAAO,EAAE,MAAM;AAAA,EACvC,MAAM,IAAI,OAAA,EAAS,IAAI,GAAG,EAAE,SAASA,YAAiB,SAAS,EAAE;AAAA,EACjE,MAAM,IACH,SACA,MAAM,CAAC,aAAa,eAAe,QAAQ,CAAC,EAC5C,SAASA,YAAiB,SAAS,EAAE;AAAA,EACxC,aAAa,IAAI,OAAO,EAAE,SAAS;AAAA,EACnC,UAAU,IAAI,SAAS,QAAU,EAAA,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQA,YAAiB,SAAS,EAAE;AACzF,CAAC;ACDY,MAAA,2BAA2B,CAAC,SAA+B;AACtE,QAAM,SAAiB;AAAA,IACrB,eAAe,CAAC;AAAA,IAChB,aAAa,CAAC;AAAA,EAAA;AAGT,SAAA,cAAc,OAAO,QAAQ,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,UAAU,OAAO;AAAA,IACtE;AAAA,IACA,OAAO,MAAM,MAAM,IAAI,EAAE,CAAC;AAAA,IAC1B,aAAa,OAAO,KAAK,WAAW,WAAW,EAC5C,IAAI,CAAC,gBAAgB;AAAA,MACpB;AAAA,MACA,SACE,cAAc,WAAW,cACrB,WAAW,YAAY,UAAU,EAC9B,IAAI,CAAC,WAAgD;AACpD,cAAM,WAAW,GAAG,KAAK,IAAI,UAAU,IAAI,MAAM;AAE7C,YAAA,MAAM,SAAS,OAAO,GAAG;AACpB,iBAAA,cAAc,KAAK,QAAQ;AAAA,QACpC;AAEO,eAAA;AAAA,UACL;AAAA,UACA;AAAA,QAAA;AAAA,MACF,CACD,EACA,KAAK,IACR,CAAC;AAAA,IAAA,EACP,EACD,KAAK;AAAA,EACR,EAAA;AAEK,SAAA;AACT;ACiBO,MAAM,eAA6B;AAAA,EACxC,MAAM;AAAA,IACJ,eAAe,CAAC;AAAA,IAChB,aAAa,CAAC;AAAA,EAChB;AAAA,EACA,QAAQ,CAAC;AAAA,EACT,gBAAgB;AAAA,EAChB,iBAAiB,CAAC;AACpB;AAEO,MAAM,UAAU,CAAC,OAAqB,WAC3C,QAAQ,OAAO,CAAC,eAAe;AAC7B,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK,aAAa;AAChB,UAAI,WAAW,gBAAgB,SAAS,OAAO,KAAK,GAAG;AAChD,aAAA,WAAW,iBAAiB,OAAO,KAAK;AAAA,MAAA,OACxC;AACM,mBAAA,gBAAgB,KAAK,OAAO,KAAK;AAAA,MAC9C;AACA;AAAA,IACF;AAAA,IACA,KAAK,4BAA4B;AACzB,YAAA,iBAAiB,OAAO,MAAM;AAAA,QAAM,CAAC,SACzC,WAAW,gBAAgB,SAAS,KAAK,QAAQ;AAAA,MAAA;AAGnD,UAAI,gBAAgB;AACX,eAAA,MAAM,QAAQ,CAAC,SAAS;AACxB,eAAA,WAAW,iBAAiB,KAAK,QAAQ;AAAA,QAAA,CAC/C;AAAA,MAAA,OACI;AACE,eAAA,MAAM,QAAQ,CAAC,SAAS;AAClB,qBAAA,gBAAgB,KAAK,KAAK,QAAQ;AAAA,QAAA,CAC9C;AAAA,MACH;AACA;AAAA,IACF;AAAA,IAEA,KAAK,sBAAsB;AACzB,iBAAW,kBAAkB,CAAC,GAAG,WAAW,KAAK,aAAa;AAE9D;AAAA,IACF;AAAA,IACA,KAAK,uBAAuB;AACpB,YAAA,sBAAsB,WAAW,KAAK,cAAc;AAAA,QACxD,CAAC,aAAa,SAAS,SAAS,MAAM,KAAK,SAAS,SAAS,SAAS;AAAA,MAAA;AAE7D,iBAAA,kBAAkB,CAAC,GAAG,mBAAmB;AACpD;AAAA,IACF;AAAA,IACA,KAAK,6BAA6B;AACrB,iBAAA,OAAO,yBAAyB,OAAO,KAAK;AACvD;AAAA,IACF;AAAA,IACA,KAAK,iBAAiB;AACpB,iBAAW,SAAS,EAAE,GAAG,OAAO,MAAM;AACtC;AAAA,IACF;AAAA,IACA,KAAK,sBAAsB;AACzB,iBAAW,kBAAkB,CAAC,GAAG,OAAO,KAAK;AAC7C;AAAA,IACF;AAAA,IACA,KAAK,uBAAuB;AAC1B,iBAAW,iBAAiB,OAAO;AACnC;AAAA,IACF;AAAA,IACA;AACS,aAAA;AAAA,EACX;AACF,CAAC;AC1FI,MAAM,WAAW,MAAM;AACtB,QAAA,EAAE,kBAAkB;AACpB,QAAA,EAAE,uBAAuB;AAC/B,QAAM,EAAE,OAAO,cAAc,IAAI,YAAY;AAC7C,QAAM,cAAc,iBAAiB,CAACC,WAAUA,OAAM,UAAU,WAAW;AAC3E,QAAM,CAAC,UAAU,WAAW,IAAI,MAAM;AAAA,IACpC,eAAe,UAAU,YACrB;AAAA,MACE,GAAG,cAAc;AAAA,IAAA,IAEnB;AAAA,EAAA;AAEA,QAAA,EAAE,eAAe;AACvB,QAAM,iBAAiB,cAAc,YAAY,CAACA,WAAUA,OAAM,cAAc;AAC1E,QAAA;AAAA,IACJ,gBAAgB,EAAE,WAAW,WAAW,cAAc;AAAA,EACpD,IAAA,QAAQ,YAAY,WAAW,YAAY,CAAC;AAChD,QAAM,CAAC,OAAO,QAAQ,IAAI,MAAM,WAAW,SAAS,YAAY;AAC1D,QAAA,QAAQ,SAAS,0BAA0B;AAC3C,QAAA,KAAK,OAAO,QAAQ;AAC1B,QAAM,aAAa,OAAO;AACpB,QAAA;AAAA,IACJ,yBAAyB;AAAA,IACzB,iCAAiC;AAAA,MAC/B,mBAAmB;AAEvB,QAAM,WAAW;AAEjB,QAAM,6BAA6B;AACnC,QAAM,wBAAwB;AAM9B,QAAM,UAAU,MAAM;AACpB,QAAI,2BAA2B,OAAO;AACjB,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,eAAe,2BAA2B,KAAK;AAAA,MAAA,CACzD;AAAA,IACH;AAAA,KACC,CAAC,2BAA2B,OAAO,gBAAgB,kBAAkB,CAAC;AAEzE,QAAM,UAAU,MAAM;AACpB,QAAI,sBAAsB,OAAO;AACZ,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,eAAe,sBAAsB,KAAK;AAAA,MAAA,CACpD;AAAA,IACH;AAAA,KACC,CAAC,sBAAsB,OAAO,gBAAgB,kBAAkB,CAAC;AAEpE,QAAM,UAAU,MAAM;AACpB,QAAI,2BAA2B,MAAM;AAC1B,eAAA;AAAA,QACP,MAAM;AAAA,QACN,OAAO,2BAA2B;AAAA,MAAA,CACnC;AAAA,IACH;AAAA,EAAA,GACC,CAAC,2BAA2B,IAAI,CAAC;AAEpC,QAAM,UAAU,MAAM;AACpB,QAAI,sBAAsB,MAAM;AACrB,eAAA;AAAA,QACP,MAAM;AAAA,QACN,OAAO,sBAAsB;AAAA,MAAA,CAC9B;AAAA,IACH;AAAA,EAAA,GACC,CAAC,sBAAsB,IAAI,CAAC;AAE/B,QAAM,UAAU,MAAM;AACpB,QAAI,UAAU;AACR,UAAA,SAAS,SAAS,aAAa;AACxB,iBAAA;AAAA,UACP,MAAM;AAAA,QAAA,CACP;AAAA,MACH;AACI,UAAA,SAAS,SAAS,eAAe;AAC1B,iBAAA;AAAA,UACP,MAAM;AAAA,QAAA,CACP;AAAA,MACH;AACI,UAAA,SAAS,SAAS,UAAU;AACrB,iBAAA;AAAA,UACP,MAAM;AAAA,UACN,OAAO,UAAU;AAAA,QAAA,CAClB;AAAA,MACH;AAAA,IACF;AAAA,EAAA,GACC,CAAC,QAAQ,CAAC;AAEb,QAAM,UAAU,MAAM;AACT,eAAA,aAAa,wBAAwB,wBAAwB;AAAA,MACtE,WAAW;AAAA,IAAA,CACZ;AAAA,EAAA,GACA,CAAC,YAAY,UAAU,CAAC;AAE3B,QAAM,EAAE,MAAM,OAAO,UAAU,IAAI,oBAAoB,IAAK;AAAA,IAC1D,MAAM,CAAC,MAAM,cAAc,CAAC,CAAC;AAAA,EAAA,CAC9B;AAED,QAAM,UAAU,MAAM;AACpB,QAAI,OAAO;AACU,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,eAAe,KAAK;AAAA,MAAA,CAC9B;AAAA,IACH;AAAA,EACC,GAAA,CAAC,OAAO,gBAAgB,kBAAkB,CAAC;AAE9C,QAAM,UAAU,MAAM;AACpB,QAAI,MAAM;AACR,kBAAY,IAAI;AAEZ,UAAA,KAAK,SAAS,aAAa;AACpB,iBAAA;AAAA,UACP,MAAM;AAAA,QAAA,CACP;AAAA,MACH;AACI,UAAA,KAAK,SAAS,eAAe;AACtB,iBAAA;AAAA,UACP,MAAM;AAAA,QAAA,CACP;AAAA,MACH;AACI,UAAA,KAAK,SAAS,UAAU;AACjB,iBAAA;AAAA,UACP,MAAM;AAAA,UACN,OAAO,MAAM;AAAA,QAAA,CACd;AAAA,MACH;AAAA,IACF;AAAA,EAAA,GACC,CAAC,IAAI,CAAC;AAEH,QAAA,CAAC,WAAW,IAAI;AAChB,QAAA,CAAC,WAAW,IAAI;AAOhB,QAAA,eAAe,OAAO,MAAkB,WAAsC;AACvE,eAAA,aAAa,oBAAoB,iBAAiB;AAAA,MAC3D,WAAW;AAAA,IAAA,CACZ;AAEG,QAAA;AACF,UAAI,YAAY;AACR,cAAA,MAAM,MAAM,YAAY;AAAA,UAC5B,GAAG;AAAA;AAAA,UAEH,UAAU,MAAM,YAAY;AAAA,UAC5B,aAAa,KAAK,SAAS,WAAW,MAAM,kBAAkB;AAAA,QAAA,CAC/D;AAED,YAAI,WAAW,KAAK;AAClB,cAAI,iBAAiB,IAAI,KAAK,KAAK,IAAI,MAAM,SAAS,mBAAmB;AACvE,mBAAO,UAAU,sBAAsB,IAAI,KAAK,CAAC;AAAA,UAAA,OAC5C;AACc,+BAAA;AAAA,cACjB,MAAM;AAAA,cACN,SAAS,eAAe,IAAI,KAAK;AAAA,YAAA,CAClC;AAAA,UACH;AAEA;AAAA,QACF;AAEmB,2BAAA;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,cAAc;AAAA,YACrB,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,QAAA,CACF;AAED,mBAAW,kBAAkB;AAAA,UAC3B,MAAM,IAAI,KAAK;AAAA,UACf,WAAW;AAAA,QAAA,CACZ;AAED,iBAAS,IAAI,KAAK,GAAG,SAAA,GAAY;AAAA,UAC/B,OAAO,EAAE,UAAU,IAAI,KAAK;AAAA,UAC5B,SAAS;AAAA,QAAA,CACV;AACD,uBAAe,mBAAmB;AAAA,MAAA,OAC7B;AACC,cAAA,MAAM,MAAM,YAAY;AAAA,UAC5B;AAAA,UACA,MAAM,KAAK;AAAA,UACX,aAAa,KAAK;AAAA,UAClB,MAAM,KAAK;AAAA,UACX,aAAa,KAAK,SAAS,WAAW,MAAM,kBAAkB;AAAA,QAAA,CAC/D;AAED,YAAI,WAAW,KAAK;AAClB,cAAI,iBAAiB,IAAI,KAAK,KAAK,IAAI,MAAM,SAAS,mBAAmB;AACvE,mBAAO,UAAU,sBAAsB,IAAI,KAAK,CAAC;AAAA,UAAA,OAC5C;AACc,+BAAA;AAAA,cACjB,MAAM;AAAA,cACN,SAAS,eAAe,IAAI,KAAK;AAAA,YAAA,CAClC;AAAA,UACH;AAEA;AAAA,QACF;AAEmB,2BAAA;AAAA,UACjB,MAAM;AAAA,UACN,SAAS,cAAc;AAAA,YACrB,IAAI;AAAA,YACJ,gBAAgB;AAAA,UAAA,CACjB;AAAA,QAAA,CACF;AAED,mBAAW,gBAAgB;AAAA,UACzB,MAAM,IAAI,KAAK;AAAA,UACf,WAAW;AAAA,QAAA,CACZ;AAAA,MACH;AAAA,IAAA,QACM;AACa,yBAAA;AAAA,QACjB,MAAM;AAAA,QACN,SAAS,cAAc;AAAA,UACrB,IAAI;AAAA,UACJ,gBAAgB;AAAA,QAAA,CACjB;AAAA,MAAA,CACF;AAAA,IACH;AAAA,EAAA;AAGF,QAAM,CAAC,uBAAuB,wBAAwB,IAAI,MAAM,SAAS,KAAK;AAE9E,QAAM,uBAAuB,CAAC;AAAA,IAC5B,QAAQ,EAAE,MAAM;AAAA,EAAA,MACyD;AACzE,6BAAyB,IAAI;AACpB,aAAA;AAAA,MACP,MAAM;AAAA,MACN;AAAA,IAAA,CACD;AAAA,EAAA;AAGH,QAAM,gCAAgC,CAAC;AAAA,IACrC,QAAQ,EAAE,MAAM;AAAA,EAAA,MACkE;AAClF,6BAAyB,IAAI;AACpB,aAAA;AAAA,MACP,MAAM;AAAA,MACN;AAAA,IAAA,CACD;AAAA,EAAA;AAGH,QAAM,oBAAoB,CAAC;AAAA,IACzB,QAAQ,EAAE,MAAM;AAAA,EAAA,MACkE;AACzE,aAAA;AAAA,MACP,MAAM;AAAA,MACN;AAAA,IAAA,CACD;AAAA,EAAA;AAGH,QAAM,gBAAgB;AAAA,IACpB,GAAG;AAAA,IACH,UAAU;AAAA,IACV,mBAAmB;AAAA,IACnB;AAAA,EAAA;AAGF,QAAM,gBAAiB,aAAa,CAAC,cAAgB,aAAa;AAElE,MAAI,WAAW;AACN,WAAA,oBAAC,KAAK,SAAL,CAAa,CAAA;AAAA,EACvB;AAEA,6BACG,6BAA4B,EAAA,OAAO,eAClC,UAAC,qBAAA,KAAK,MAAL,EACC,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,EAAE,IAAI,sBAAsB,gBAAgB,oBAAoB;AAAA,UAChE,EAAE,MAAM,aAAa;AAAA,QACvB;AAAA,MAAA;AAAA,IACF;AAAA,IACA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,kBAAkB;AAAA,QAClB,kBAAkB;AAAA,QAClB,eAAe;AAAA,UACb,MAAM,UAAU,QAAQ;AAAA,UACxB,aAAa,UAAU,eAAe;AAAA,UACtC,MAAM,UAAU;AAAA,UAChB,UAAU,UAAU;AAAA,QACtB;AAAA,QACA,oBAAkB;AAAA,QAClB,UAAU,CAAC,MAAM,YAAY,aAAa,MAAM,OAAO;AAAA,QAEtD,WAAC,EAAE,QAAQ,cAAc,cAAc,QAAQ,oBAAoB;AAC9D,cAAA,yBAAyB,QAAQ,SAAS,UAAU;AACtD,0BAAc,QAAQ,QAAQ;AAAA,UAChC;AAEA,sCACG,MACC,EAAA,UAAA;AAAA,YAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAO;AAAA,kBACL,IAAI;AAAA,kBACJ,gBAAgB;AAAA,gBAClB;AAAA,gBACA,OAAO;AAAA,gBACP,UAAU;AAAA,gBACV;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,eAAc;AAAA,cAAA;AAAA,YAChB;AAAA,YAEA,oBAAC,iBACC,UAAC,qBAAA,MAAA,EAAK,WAAU,UAAS,YAAW,WAAU,KAAK,GAChD,UAAA;AAAA,cAAQ,QAAA,UAAU,IAAI,KACrB,oBAAC,YAAS,OAAO,UAAU,WAAW,WAAW,eAAgB,CAAA;AAAA,cAEnE;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC;AAAA,kBACA,UAAU;AAAA,kBACV;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA,YAAY;AAAA,kBACZ;AAAA,gBAAA;AAAA,cACF;AAAA,cACA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,UACE,CAAC,iBACD,QAAQ,SAAS,eACjB,QAAQ,SAAS;AAAA,gBAAA;AAAA,cAErB;AAAA,YAAA,EAAA,CACF,EACF,CAAA;AAAA,UACF,EAAA,CAAA;AAAA,QAEJ;AAAA,MAAA;AAAA,IACF;AAAA,EAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAEO,MAAM,oBAAoB,MAAM;AACrC,QAAM,cAAc;AAAA,IAClB,CAAC,UAAU,MAAM,UAAU,YAAY,WAAW,YAAY,EAAE;AAAA,EAAA;AAGlE,6BACG,KAAK,SAAL,EAAa,aACZ,UAAA,oBAAC,YAAS,EACZ,CAAA;AAEJ;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
-
const EditPage = require("./EditPage-
|
|
4
|
+
const EditPage = require("./EditPage-vUQIn3OJ.js");
|
|
5
5
|
const eeTables = {
|
|
6
6
|
"review-workflows": {
|
|
7
7
|
"review-workflows": ["review-workflows.updateEntryStage"]
|
|
@@ -29,4 +29,4 @@ const EventsTableEE = () => {
|
|
|
29
29
|
] });
|
|
30
30
|
};
|
|
31
31
|
exports.EventsTableEE = EventsTableEE;
|
|
32
|
-
//# sourceMappingURL=EventsTable-
|
|
32
|
+
//# sourceMappingURL=EventsTable-1X4uyY8J.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventsTable-
|
|
1
|
+
{"version":3,"file":"EventsTable-1X4uyY8J.js","sources":["../../ee/admin/src/pages/SettingsPage/pages/Webhooks/components/EventsTable.tsx"],"sourcesContent":["import { Events } from '../../../../../../../../admin/src/pages/Settings/pages/Webhooks/components/Events';\n\nconst eeTables = {\n 'review-workflows': {\n 'review-workflows': ['review-workflows.updateEntryStage'],\n },\n releases: {\n releases: ['releases.publish'],\n },\n};\n\nconst getHeaders = (table: keyof typeof eeTables) => {\n switch (table) {\n case 'review-workflows':\n return () => [{ id: 'review-workflows.updateEntryStage', defaultMessage: 'Stage Change' }];\n case 'releases':\n return () => [{ id: 'releases.publish', defaultMessage: 'Publish' }];\n }\n};\n\nconst EventsTableEE = () => {\n return (\n <Events.Root>\n <Events.Headers />\n <Events.Body />\n {(Object.keys(eeTables) as Array<keyof typeof eeTables>).map((table) => (\n <>\n <Events.Headers getHeaders={getHeaders(table)} />\n <Events.Body providedEvents={eeTables[table]} />\n </>\n ))}\n </Events.Root>\n );\n};\n\nexport { EventsTableEE };\n"],"names":["jsxs","Events","jsx","Fragment"],"mappings":";;;;AAEA,MAAM,WAAW;AAAA,EACf,oBAAoB;AAAA,IAClB,oBAAoB,CAAC,mCAAmC;AAAA,EAC1D;AAAA,EACA,UAAU;AAAA,IACR,UAAU,CAAC,kBAAkB;AAAA,EAC/B;AACF;AAEA,MAAM,aAAa,CAAC,UAAiC;AACnD,UAAQ,OAAO;AAAA,IACb,KAAK;AACH,aAAO,MAAM,CAAC,EAAE,IAAI,qCAAqC,gBAAgB,gBAAgB;AAAA,IAC3F,KAAK;AACH,aAAO,MAAM,CAAC,EAAE,IAAI,oBAAoB,gBAAgB,WAAW;AAAA,EACvE;AACF;AAEA,MAAM,gBAAgB,MAAM;AAExB,SAAAA,gCAACC,SAAAA,OAAO,MAAP,EACC,UAAA;AAAA,IAACC,+BAAAD,SAAAA,OAAO,SAAP,EAAe;AAAA,IAChBC,+BAACD,SAAAA,OAAO,MAAP,EAAY;AAAA,IACX,OAAO,KAAK,QAAQ,EAAmC,IAAI,CAAC,UAE1DD,2BAAA,KAAAG,qBAAA,EAAA,UAAA;AAAA,MAAAD,2BAAA,IAACD,gBAAO,SAAP,EAAe,YAAY,WAAW,KAAK,GAAG;AAAA,qCAC9CA,SAAO,OAAA,MAAP,EAAY,gBAAgB,SAAS,KAAK,GAAG;AAAA,IAAA,EAAA,CAChD,CACD;AAAA,EACH,EAAA,CAAA;AAEJ;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsxs, jsx, Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { a as Events } from "./EditPage-
|
|
2
|
+
import { a as Events } from "./EditPage-zpnfFOjc.mjs";
|
|
3
3
|
const eeTables = {
|
|
4
4
|
"review-workflows": {
|
|
5
5
|
"review-workflows": ["review-workflows.updateEntryStage"]
|
|
@@ -29,4 +29,4 @@ const EventsTableEE = () => {
|
|
|
29
29
|
export {
|
|
30
30
|
EventsTableEE
|
|
31
31
|
};
|
|
32
|
-
//# sourceMappingURL=EventsTable-
|
|
32
|
+
//# sourceMappingURL=EventsTable-dN2MNNFu.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventsTable-
|
|
1
|
+
{"version":3,"file":"EventsTable-dN2MNNFu.mjs","sources":["../../ee/admin/src/pages/SettingsPage/pages/Webhooks/components/EventsTable.tsx"],"sourcesContent":["import { Events } from '../../../../../../../../admin/src/pages/Settings/pages/Webhooks/components/Events';\n\nconst eeTables = {\n 'review-workflows': {\n 'review-workflows': ['review-workflows.updateEntryStage'],\n },\n releases: {\n releases: ['releases.publish'],\n },\n};\n\nconst getHeaders = (table: keyof typeof eeTables) => {\n switch (table) {\n case 'review-workflows':\n return () => [{ id: 'review-workflows.updateEntryStage', defaultMessage: 'Stage Change' }];\n case 'releases':\n return () => [{ id: 'releases.publish', defaultMessage: 'Publish' }];\n }\n};\n\nconst EventsTableEE = () => {\n return (\n <Events.Root>\n <Events.Headers />\n <Events.Body />\n {(Object.keys(eeTables) as Array<keyof typeof eeTables>).map((table) => (\n <>\n <Events.Headers getHeaders={getHeaders(table)} />\n <Events.Body providedEvents={eeTables[table]} />\n </>\n ))}\n </Events.Root>\n );\n};\n\nexport { EventsTableEE };\n"],"names":[],"mappings":";;AAEA,MAAM,WAAW;AAAA,EACf,oBAAoB;AAAA,IAClB,oBAAoB,CAAC,mCAAmC;AAAA,EAC1D;AAAA,EACA,UAAU;AAAA,IACR,UAAU,CAAC,kBAAkB;AAAA,EAC/B;AACF;AAEA,MAAM,aAAa,CAAC,UAAiC;AACnD,UAAQ,OAAO;AAAA,IACb,KAAK;AACH,aAAO,MAAM,CAAC,EAAE,IAAI,qCAAqC,gBAAgB,gBAAgB;AAAA,IAC3F,KAAK;AACH,aAAO,MAAM,CAAC,EAAE,IAAI,oBAAoB,gBAAgB,WAAW;AAAA,EACvE;AACF;AAEA,MAAM,gBAAgB,MAAM;AAExB,SAAA,qBAAC,OAAO,MAAP,EACC,UAAA;AAAA,IAAC,oBAAA,OAAO,SAAP,EAAe;AAAA,IAChB,oBAAC,OAAO,MAAP,EAAY;AAAA,IACX,OAAO,KAAK,QAAQ,EAAmC,IAAI,CAAC,UAE1D,qBAAA,UAAA,EAAA,UAAA;AAAA,MAAA,oBAAC,OAAO,SAAP,EAAe,YAAY,WAAW,KAAK,GAAG;AAAA,0BAC9C,OAAO,MAAP,EAAY,gBAAgB,SAAS,KAAK,GAAG;AAAA,IAAA,EAAA,CAChD,CACD;AAAA,EACH,EAAA,CAAA;AAEJ;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
2
|
import { Box } from "@strapi/design-system";
|
|
3
3
|
import { Number, Boolean, Date, Email, Enumeration, Media, Password, Relation, Text, Json, Uid, Component, DynamicZone, Blocks } from "@strapi/icons";
|
|
4
|
-
import {
|
|
4
|
+
import { h as useStrapiApp } from "./index-GIVuHJgC.mjs";
|
|
5
5
|
const iconByTypes = {
|
|
6
6
|
biginteger: /* @__PURE__ */ jsx(Number, {}),
|
|
7
7
|
boolean: /* @__PURE__ */ jsx(Boolean, {}),
|
|
@@ -47,4 +47,4 @@ const FieldTypeIcon = ({ type, customFieldUid }) => {
|
|
|
47
47
|
export {
|
|
48
48
|
FieldTypeIcon as F
|
|
49
49
|
};
|
|
50
|
-
//# sourceMappingURL=FieldTypeIcon-
|
|
50
|
+
//# sourceMappingURL=FieldTypeIcon-4-UZzZla.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldTypeIcon-
|
|
1
|
+
{"version":3,"file":"FieldTypeIcon-4-UZzZla.mjs","sources":["../../admin/src/content-manager/components/FieldTypeIcon.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport {\n Blocks,\n Boolean,\n Component,\n Date,\n DynamicZone,\n Email,\n Enumeration,\n Json,\n Media,\n Number,\n Password,\n Relation,\n Text,\n Uid,\n} from '@strapi/icons';\n\nimport { useStrapiApp } from '../../features/StrapiApp';\n\nimport type { Attribute } from '@strapi/types';\n\nconst iconByTypes: Record<Attribute.Kind, React.ReactElement> = {\n biginteger: <Number />,\n boolean: <Boolean />,\n date: <Date />,\n datetime: <Date />,\n decimal: <Number />,\n email: <Email />,\n enumeration: <Enumeration />,\n float: <Number />,\n integer: <Number />,\n media: <Media />,\n password: <Password />,\n relation: <Relation />,\n string: <Text />,\n text: <Text />,\n richtext: <Text />,\n time: <Date />,\n timestamp: <Date />,\n json: <Json />,\n uid: <Uid />,\n component: <Component />,\n dynamiczone: <DynamicZone />,\n blocks: <Blocks />,\n};\n\ninterface FieldTypeIconProps {\n type?: keyof typeof iconByTypes;\n customFieldUid?: string;\n}\n\nconst FieldTypeIcon = ({ type, customFieldUid }: FieldTypeIconProps) => {\n const getCustomField = useStrapiApp('FieldTypeIcon', (state) => state.customFields.get);\n\n if (!type) {\n return null;\n }\n\n let Compo = iconByTypes[type];\n\n if (customFieldUid) {\n const customField = getCustomField(customFieldUid);\n const CustomFieldIcon = customField?.icon;\n\n if (CustomFieldIcon) {\n Compo = (\n <Box marginRight={3} width={7} height={6}>\n <CustomFieldIcon />\n </Box>\n );\n }\n }\n\n if (!iconByTypes[type]) {\n return null;\n }\n\n return Compo;\n};\n\nexport { FieldTypeIcon };\n"],"names":[],"mappings":";;;;AAwBA,MAAM,cAA0D;AAAA,EAC9D,gCAAa,QAAO,EAAA;AAAA,EACpB,6BAAU,SAAQ,EAAA;AAAA,EAClB,0BAAO,MAAK,EAAA;AAAA,EACZ,8BAAW,MAAK,EAAA;AAAA,EAChB,6BAAU,QAAO,EAAA;AAAA,EACjB,2BAAQ,OAAM,EAAA;AAAA,EACd,iCAAc,aAAY,EAAA;AAAA,EAC1B,2BAAQ,QAAO,EAAA;AAAA,EACf,6BAAU,QAAO,EAAA;AAAA,EACjB,2BAAQ,OAAM,EAAA;AAAA,EACd,8BAAW,UAAS,EAAA;AAAA,EACpB,8BAAW,UAAS,EAAA;AAAA,EACpB,4BAAS,MAAK,EAAA;AAAA,EACd,0BAAO,MAAK,EAAA;AAAA,EACZ,8BAAW,MAAK,EAAA;AAAA,EAChB,0BAAO,MAAK,EAAA;AAAA,EACZ,+BAAY,MAAK,EAAA;AAAA,EACjB,0BAAO,MAAK,EAAA;AAAA,EACZ,yBAAM,KAAI,EAAA;AAAA,EACV,+BAAY,WAAU,EAAA;AAAA,EACtB,iCAAc,aAAY,EAAA;AAAA,EAC1B,4BAAS,QAAO,EAAA;AAClB;AAOA,MAAM,gBAAgB,CAAC,EAAE,MAAM,qBAAyC;AACtE,QAAM,iBAAiB,aAAa,iBAAiB,CAAC,UAAU,MAAM,aAAa,GAAG;AAEtF,MAAI,CAAC,MAAM;AACF,WAAA;AAAA,EACT;AAEI,MAAA,QAAQ,YAAY,IAAI;AAE5B,MAAI,gBAAgB;AACZ,UAAA,cAAc,eAAe,cAAc;AACjD,UAAM,kBAAkB,aAAa;AAErC,QAAI,iBAAiB;AAEjB,cAAA,oBAAC,KAAI,EAAA,aAAa,GAAG,OAAO,GAAG,QAAQ,GACrC,UAAC,oBAAA,iBAAA,CAAA,CAAgB,EACnB,CAAA;AAAA,IAEJ;AAAA,EACF;AAEI,MAAA,CAAC,YAAY,IAAI,GAAG;AACf,WAAA;AAAA,EACT;AAEO,SAAA;AACT;"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const jsxRuntime = require("react/jsx-runtime");
|
|
3
3
|
const designSystem = require("@strapi/design-system");
|
|
4
4
|
const Icons = require("@strapi/icons");
|
|
5
|
-
const index = require("./index-
|
|
5
|
+
const index = require("./index-haHGOQMJ.js");
|
|
6
6
|
const iconByTypes = {
|
|
7
7
|
biginteger: /* @__PURE__ */ jsxRuntime.jsx(Icons.Number, {}),
|
|
8
8
|
boolean: /* @__PURE__ */ jsxRuntime.jsx(Icons.Boolean, {}),
|
|
@@ -46,4 +46,4 @@ const FieldTypeIcon = ({ type, customFieldUid }) => {
|
|
|
46
46
|
return Compo;
|
|
47
47
|
};
|
|
48
48
|
exports.FieldTypeIcon = FieldTypeIcon;
|
|
49
|
-
//# sourceMappingURL=FieldTypeIcon-
|
|
49
|
+
//# sourceMappingURL=FieldTypeIcon-wxfhExw2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldTypeIcon-
|
|
1
|
+
{"version":3,"file":"FieldTypeIcon-wxfhExw2.js","sources":["../../admin/src/content-manager/components/FieldTypeIcon.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport {\n Blocks,\n Boolean,\n Component,\n Date,\n DynamicZone,\n Email,\n Enumeration,\n Json,\n Media,\n Number,\n Password,\n Relation,\n Text,\n Uid,\n} from '@strapi/icons';\n\nimport { useStrapiApp } from '../../features/StrapiApp';\n\nimport type { Attribute } from '@strapi/types';\n\nconst iconByTypes: Record<Attribute.Kind, React.ReactElement> = {\n biginteger: <Number />,\n boolean: <Boolean />,\n date: <Date />,\n datetime: <Date />,\n decimal: <Number />,\n email: <Email />,\n enumeration: <Enumeration />,\n float: <Number />,\n integer: <Number />,\n media: <Media />,\n password: <Password />,\n relation: <Relation />,\n string: <Text />,\n text: <Text />,\n richtext: <Text />,\n time: <Date />,\n timestamp: <Date />,\n json: <Json />,\n uid: <Uid />,\n component: <Component />,\n dynamiczone: <DynamicZone />,\n blocks: <Blocks />,\n};\n\ninterface FieldTypeIconProps {\n type?: keyof typeof iconByTypes;\n customFieldUid?: string;\n}\n\nconst FieldTypeIcon = ({ type, customFieldUid }: FieldTypeIconProps) => {\n const getCustomField = useStrapiApp('FieldTypeIcon', (state) => state.customFields.get);\n\n if (!type) {\n return null;\n }\n\n let Compo = iconByTypes[type];\n\n if (customFieldUid) {\n const customField = getCustomField(customFieldUid);\n const CustomFieldIcon = customField?.icon;\n\n if (CustomFieldIcon) {\n Compo = (\n <Box marginRight={3} width={7} height={6}>\n <CustomFieldIcon />\n </Box>\n );\n }\n }\n\n if (!iconByTypes[type]) {\n return null;\n }\n\n return Compo;\n};\n\nexport { FieldTypeIcon };\n"],"names":["Number","Boolean","Date","Email","Enumeration","Media","Password","Relation","Text","Json","Uid","Component","DynamicZone","Blocks","useStrapiApp","jsx","Box"],"mappings":";;;;;AAwBA,MAAM,cAA0D;AAAA,EAC9D,2CAAaA,MAAO,QAAA,EAAA;AAAA,EACpB,wCAAUC,MAAQ,SAAA,EAAA;AAAA,EAClB,qCAAOC,MAAK,MAAA,EAAA;AAAA,EACZ,yCAAWA,MAAK,MAAA,EAAA;AAAA,EAChB,wCAAUF,MAAO,QAAA,EAAA;AAAA,EACjB,sCAAQG,MAAM,OAAA,EAAA;AAAA,EACd,4CAAcC,MAAY,aAAA,EAAA;AAAA,EAC1B,sCAAQJ,MAAO,QAAA,EAAA;AAAA,EACf,wCAAUA,MAAO,QAAA,EAAA;AAAA,EACjB,sCAAQK,MAAM,OAAA,EAAA;AAAA,EACd,yCAAWC,MAAS,UAAA,EAAA;AAAA,EACpB,yCAAWC,MAAS,UAAA,EAAA;AAAA,EACpB,uCAASC,MAAK,MAAA,EAAA;AAAA,EACd,qCAAOA,MAAK,MAAA,EAAA;AAAA,EACZ,yCAAWA,MAAK,MAAA,EAAA;AAAA,EAChB,qCAAON,MAAK,MAAA,EAAA;AAAA,EACZ,0CAAYA,MAAK,MAAA,EAAA;AAAA,EACjB,qCAAOO,MAAK,MAAA,EAAA;AAAA,EACZ,oCAAMC,MAAI,KAAA,EAAA;AAAA,EACV,0CAAYC,MAAU,WAAA,EAAA;AAAA,EACtB,4CAAcC,MAAY,aAAA,EAAA;AAAA,EAC1B,uCAASC,MAAO,QAAA,EAAA;AAClB;AAOA,MAAM,gBAAgB,CAAC,EAAE,MAAM,qBAAyC;AACtE,QAAM,iBAAiBC,MAAa,aAAA,iBAAiB,CAAC,UAAU,MAAM,aAAa,GAAG;AAEtF,MAAI,CAAC,MAAM;AACF,WAAA;AAAA,EACT;AAEI,MAAA,QAAQ,YAAY,IAAI;AAE5B,MAAI,gBAAgB;AACZ,UAAA,cAAc,eAAe,cAAc;AACjD,UAAM,kBAAkB,aAAa;AAErC,QAAI,iBAAiB;AAEjB,cAAAC,2BAAA,IAACC,aAAI,KAAA,EAAA,aAAa,GAAG,OAAO,GAAG,QAAQ,GACrC,UAACD,2BAAAA,IAAA,iBAAA,CAAA,CAAgB,EACnB,CAAA;AAAA,IAEJ;AAAA,EACF;AAEI,MAAA,CAAC,YAAY,IAAI,GAAG;AACf,WAAA;AAAA,EACT;AAEO,SAAA;AACT;;"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { useComposedRefs, Button, PopoverPrimitives, Flex, Tag } from "@strapi/design-system";
|
|
4
|
-
import { useQueryParams } from "@strapi/helper-plugin";
|
|
5
4
|
import { Filter, Plus, Cross } from "@strapi/icons";
|
|
6
5
|
import { useIntl } from "react-intl";
|
|
7
|
-
import {
|
|
6
|
+
import { G as createContext, H as useControllableState, z as useQueryParams, F as Form, I as InputRenderer } from "./index-GIVuHJgC.mjs";
|
|
8
7
|
const BASE_FILTERS = [
|
|
9
8
|
{
|
|
10
9
|
label: { id: "components.FilterOptions.FILTER_TYPES.$eq", defaultMessage: "is" },
|
|
@@ -484,4 +483,4 @@ const Filters = {
|
|
|
484
483
|
export {
|
|
485
484
|
Filters as F
|
|
486
485
|
};
|
|
487
|
-
//# sourceMappingURL=Filters-
|
|
486
|
+
//# sourceMappingURL=Filters--lh-i85A.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Filters--lh-i85A.mjs","sources":["../../admin/src/constants/filters.ts","../../admin/src/components/Filters.tsx"],"sourcesContent":["import type { EntityService } from '@strapi/types';\nimport type { MessageDescriptor } from 'react-intl';\n\n/**\n * @description designed to be parsed by formatMessage from react-intl\n * then passed to a Select component.\n */\ninterface FilterOption {\n value: EntityService.Params.Filters.Operator.Where;\n label: MessageDescriptor;\n}\n\n/**\n * @description these are shared by everyone\n */\nconst BASE_FILTERS = [\n {\n label: { id: 'components.FilterOptions.FILTER_TYPES.$eq', defaultMessage: 'is' },\n value: '$eq',\n },\n {\n label: { id: 'components.FilterOptions.FILTER_TYPES.$ne', defaultMessage: 'is not' },\n value: '$ne',\n },\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$null',\n defaultMessage: 'is null',\n },\n value: '$null',\n },\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$notNull',\n defaultMessage: 'is not null',\n },\n value: '$notNull',\n },\n] satisfies FilterOption[];\n\n/**\n * @description typically performed on attributes that are numerical incl. dates.\n */\nconst NUMERIC_FILTERS = [\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$gt',\n defaultMessage: 'is greater than',\n },\n value: '$gt',\n },\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$gte',\n defaultMessage: 'is greater than or equal to',\n },\n value: '$gte',\n },\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$lt',\n defaultMessage: 'is less than',\n },\n value: '$lt',\n },\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$lte',\n defaultMessage: 'is less than or equal to',\n },\n value: '$lte',\n },\n] satisfies FilterOption[];\n\nconst IS_SENSITIVE_FILTERS = [\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$eqi',\n defaultMessage: 'is (case insensitive)',\n },\n value: '$eqi',\n },\n\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$nei',\n defaultMessage: 'is not (case insensitive)',\n },\n value: '$nei',\n },\n] satisfies FilterOption[];\n\n/**\n * @description typically performed on attributes that are strings for partial looking.\n */\nconst CONTAINS_FILTERS = [\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$contains',\n defaultMessage: 'contains',\n },\n value: '$contains',\n },\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$containsi',\n defaultMessage: 'contains (case insensitive)',\n },\n value: '$containsi',\n },\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$notContains',\n defaultMessage: 'not contains',\n },\n value: '$notContains',\n },\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$notContainsi',\n defaultMessage: 'not contains (case insensitive)',\n },\n value: '$notContainsi',\n },\n] satisfies FilterOption[];\n\n/**\n * @description only used on string attributes.\n */\nconst STRING_PARSE_FILTERS = [\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$startsWith',\n defaultMessage: 'starts with',\n },\n value: '$startsWith',\n },\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$startsWithi',\n defaultMessage: 'starts with (case insensitive)',\n },\n value: '$startsWithi',\n },\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$endsWith',\n defaultMessage: 'ends with',\n },\n value: '$endsWith',\n },\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$endsWithi',\n defaultMessage: 'ends with (case insensitive)',\n },\n value: '$endsWithi',\n },\n] satisfies FilterOption[];\n\nexport {\n BASE_FILTERS,\n NUMERIC_FILTERS,\n IS_SENSITIVE_FILTERS,\n CONTAINS_FILTERS,\n STRING_PARSE_FILTERS,\n};\nexport type { FilterOption };\n","import * as React from 'react';\n\nimport { Button, Flex, PopoverPrimitives, Tag, useComposedRefs } from '@strapi/design-system';\nimport { Plus, Filter as FilterIcon, Cross } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport {\n BASE_FILTERS,\n CONTAINS_FILTERS,\n FilterOption,\n IS_SENSITIVE_FILTERS,\n NUMERIC_FILTERS,\n STRING_PARSE_FILTERS,\n} from '../constants/filters';\nimport { MainField } from '../content-manager/utils/attributes';\nimport { useControllableState } from '../hooks/useControllableState';\nimport { useQueryParams } from '../hooks/useQueryParams';\n\nimport { createContext } from './Context';\nimport { Form, InputProps } from './Form';\nimport { InputRenderer } from './FormInputs/Renderer';\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FilterFormData {\n name: string;\n filter: string;\n value?: string;\n}\n\ninterface FitlersContextValue {\n disabled: boolean;\n onChange: (data: FilterFormData) => void;\n open: boolean;\n setOpen: (open: boolean) => void;\n setTriggerNode: (node: HTMLButtonElement | null) => void;\n triggerNode: HTMLButtonElement | null;\n options: Filters.Filter[];\n}\n\nconst [FiltersProvider, useFilters] = createContext<FitlersContextValue>('Filters');\n\ninterface RootProps\n extends Partial<Pick<FitlersContextValue, 'disabled' | 'onChange' | 'options' | 'open'>> {\n children: React.ReactNode;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nconst Root = ({\n children,\n disabled = false,\n onChange,\n onOpenChange,\n open: openProp,\n defaultOpen,\n options = [],\n}: RootProps) => {\n const [triggerNode, setTriggerNode] = React.useState<FitlersContextValue['triggerNode']>(null);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n });\n\n const handleChange = (data: FilterFormData) => {\n if (onChange) {\n onChange(data);\n }\n };\n\n return (\n <FiltersProvider\n disabled={disabled}\n onChange={handleChange}\n open={open}\n options={options}\n setOpen={setOpen}\n setTriggerNode={setTriggerNode}\n triggerNode={triggerNode}\n >\n {children}\n </FiltersProvider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Trigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst Trigger = React.forwardRef<HTMLButtonElement, Filters.TriggerProps>(\n ({ label }, forwardedRef) => {\n const { formatMessage } = useIntl();\n const { setTriggerNode, setOpen } = useFilters('Trigger', ({ setTriggerNode, setOpen }) => ({\n setTriggerNode,\n setOpen,\n }));\n const disabled = useFilters('Trigger', ({ disabled }) => disabled);\n const open = useFilters('Trigger', ({ open }) => open);\n\n const composedRefs = useComposedRefs(forwardedRef, setTriggerNode);\n\n const handleClick = () => setOpen(!open);\n\n return (\n <Button\n variant=\"tertiary\"\n ref={composedRefs}\n startIcon={<FilterIcon />}\n onClick={handleClick}\n size=\"S\"\n disabled={disabled}\n >\n {label || formatMessage({ id: 'app.utils.filters', defaultMessage: 'Filters' })}\n </Button>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * Popover\n * -----------------------------------------------------------------------------------------------*/\n\nconst PopoverImpl = () => {\n const [{ query }, setQuery] = useQueryParams<Filters.Query>();\n const { formatMessage } = useIntl();\n const open = useFilters('Popover', ({ open }) => open);\n const options = useFilters('Popover', ({ options }) => options);\n const triggerNode = useFilters('Popover', ({ triggerNode }) => triggerNode);\n const setOpen = useFilters('Popover', ({ setOpen }) => setOpen);\n const onChange = useFilters('Popover', ({ onChange }) => onChange);\n\n if (!open || options.length === 0 || !triggerNode) {\n return null;\n }\n\n const handleSubmit = (data: FilterFormData) => {\n if (!data.value) {\n return;\n }\n\n if (onChange) {\n onChange(data);\n }\n\n /**\n * There will ALWAYS be an option because we use the options to create the form data.\n */\n const filterType = options.find((filter) => filter.name === data.name)!.type;\n\n /**\n * If the filter is a relation, we need to nest the filter object,\n * we always use ids to filter relations. But the nested object is\n * the operator & value pair. This value _could_ look like:\n * ```json\n * {\n * \"$eq\": \"1\",\n * }\n * ```\n */\n const operatorValuePairing = {\n [data.filter]: data.value,\n };\n\n const newFilterQuery = {\n ...query.filters,\n $and: [\n ...(query.filters?.$and ?? []),\n {\n [data.name]:\n filterType === 'relation'\n ? {\n id: operatorValuePairing,\n }\n : operatorValuePairing,\n },\n ],\n };\n\n setQuery({ filters: newFilterQuery, page: 1 });\n setOpen(false);\n };\n\n return (\n <PopoverPrimitives.Content\n source={{ current: triggerNode }}\n onDismiss={() => setOpen(false)}\n padding={3}\n spacing={4}\n maxHeight=\"unset\"\n >\n <Form\n method=\"POST\"\n initialValues={\n {\n name: options[0]?.name,\n filter: BASE_FILTERS[0].value,\n } satisfies FilterFormData\n }\n onSubmit={handleSubmit}\n >\n {({ values: formValues, modified, isSubmitting }) => {\n const filter = options.find((filter) => filter.name === formValues.name);\n const Input = filter?.input || InputRenderer;\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2} style={{ minWidth: 184 }}>\n {[\n {\n ['aria-label']: formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n }),\n name: 'name',\n options: options.map((filter) => ({\n label: filter.label,\n value: filter.name,\n })),\n placholder: formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n }),\n type: 'enumeration' as const,\n },\n {\n ['aria-label']: formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n }),\n name: 'filter',\n options:\n filter?.operators ||\n getFilterList(filter).map((opt) => ({\n label: formatMessage(opt.label),\n value: opt.value,\n })),\n placeholder: formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n }),\n type: 'enumeration' as const,\n },\n ].map((field) => (\n <InputRenderer key={field.name} {...field} />\n ))}\n {filter &&\n formValues.filter &&\n formValues.filter !== '$null' &&\n formValues.filter !== '$notNull' ? (\n <Input\n {...filter}\n label={null}\n aria-label={filter.label}\n name=\"value\"\n // @ts-expect-error – if type is `custom` then `Input` will be a custom component.\n type={filter.mainField?.type ?? filter.type}\n />\n ) : null}\n <Button\n disabled={!modified || isSubmitting}\n size=\"L\"\n variant=\"secondary\"\n startIcon={<Plus />}\n type=\"submit\"\n fullWidth\n >\n {formatMessage({ id: 'app.utils.add-filter', defaultMessage: 'Add filter' })}\n </Button>\n </Flex>\n );\n }}\n </Form>\n </PopoverPrimitives.Content>\n );\n};\n\n/**\n * Depending on the selected field find the possible filters to apply\n */\nconst getFilterList = (filter?: Filters.Filter): FilterOption[] => {\n if (!filter) {\n return [];\n }\n\n const type = filter.mainField?.type ? filter.mainField.type : filter.type;\n\n switch (type) {\n case 'email':\n case 'text':\n case 'enumeration':\n case 'string': {\n return [\n ...BASE_FILTERS,\n ...IS_SENSITIVE_FILTERS,\n ...CONTAINS_FILTERS,\n ...STRING_PARSE_FILTERS,\n ];\n }\n\n case 'float':\n case 'integer':\n case 'biginteger':\n case 'decimal': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS];\n }\n case 'time':\n case 'date': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS, ...CONTAINS_FILTERS];\n }\n\n case 'datetime': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS];\n }\n\n default:\n return [...BASE_FILTERS, ...IS_SENSITIVE_FILTERS];\n }\n};\n\n/* -------------------------------------------------------------------------------------------------\n * List\n * -----------------------------------------------------------------------------------------------*/\n\nconst List = () => {\n const [{ query }, setQuery] = useQueryParams<Filters.Query>();\n\n const options = useFilters('List', ({ options }) => options);\n\n const handleClick = (data: FilterFormData) => {\n /**\n * Check the name, operator and value to see if it already exists in the query\n * if it does, remove it.\n */\n const nextFilters = (query?.filters?.$and ?? []).filter((filter) => {\n const [attributeName] = Object.keys(filter);\n if (attributeName !== data.name) {\n return true;\n }\n\n const { type, mainField } = options.find(({ name }) => name === attributeName)!;\n\n if (type === 'relation') {\n const filterObj = filter[attributeName][mainField?.name ?? 'id'];\n\n if (typeof filterObj === 'object') {\n const [operator] = Object.keys(filterObj);\n const value = filterObj[operator];\n\n return !(operator === data.filter && value === data.value);\n }\n\n return true;\n } else {\n const filterObj = filter[attributeName];\n const [operator] = Object.keys(filterObj);\n const value = filterObj[operator];\n\n return !(operator === data.filter && value === data.value);\n }\n });\n\n setQuery({ filters: { $and: nextFilters }, page: 1 });\n };\n\n if (!query?.filters?.$and?.length) {\n return null;\n }\n\n return (\n <>\n {query?.filters?.$and?.map((queryFilter) => {\n const [attributeName] = Object.keys(queryFilter);\n const filter = options.find(({ name }) => name === attributeName);\n const filterObj = queryFilter[attributeName];\n\n if (!filter || typeof filterObj !== 'object' || filterObj === null) {\n return null;\n }\n\n if (filter.type === 'relation') {\n const modelFilter = filterObj[filter.mainField?.name ?? 'id'];\n\n if (typeof modelFilter === 'object') {\n const [operator] = Object.keys(modelFilter);\n const value = modelFilter[operator];\n return (\n <AttributeTag\n key={`${attributeName}-${operator}-${value}`}\n {...filter}\n onClick={handleClick}\n operator={operator}\n value={value}\n />\n );\n }\n\n return null;\n } else {\n const [operator] = Object.keys(filterObj);\n const value = filterObj[operator];\n\n /**\n * Something has gone wrong here, because the attribute is not a relation\n * but we have a nested filter object.\n */\n if (typeof value === 'object') {\n return null;\n }\n\n return (\n <AttributeTag\n key={`${attributeName}-${operator}-${value}`}\n {...filter}\n onClick={handleClick}\n operator={operator}\n value={value}\n />\n );\n }\n })}\n </>\n );\n};\n\ninterface AttributeTagProps extends Filters.Filter {\n onClick: (data: FilterFormData) => void;\n operator: string;\n value: string;\n}\n\nconst AttributeTag = ({\n input,\n label,\n mainField,\n name,\n onClick,\n operator,\n options,\n value,\n ...filter\n}: AttributeTagProps) => {\n const { formatMessage, formatDate, formatTime, formatNumber } = useIntl();\n\n const handleClick = () => {\n onClick({ name, value, filter: operator });\n };\n\n const type = mainField?.type ? mainField.type : filter.type;\n\n let formattedValue: string = value;\n\n switch (type) {\n case 'date':\n formattedValue = formatDate(value, { dateStyle: 'full' });\n break;\n case 'datetime':\n formattedValue = formatDate(value, { dateStyle: 'full', timeStyle: 'short' });\n break;\n case 'time':\n const [hour, minute] = value.split(':');\n const date = new Date();\n date.setHours(Number(hour));\n date.setMinutes(Number(minute));\n\n formattedValue = formatTime(date, {\n hour: 'numeric',\n minute: 'numeric',\n });\n break;\n case 'float':\n case 'integer':\n case 'biginteger':\n case 'decimal':\n formattedValue = formatNumber(Number(value));\n break;\n }\n\n // Handle custom input\n if (input && options) {\n // If the custom input has an options array, find the option with a customValue matching the query value\n const selectedOption = options.find((option) => {\n return (typeof option === 'string' ? option : option.value) === value;\n });\n\n formattedValue = selectedOption\n ? typeof selectedOption === 'string'\n ? selectedOption\n : selectedOption.label ?? selectedOption.value\n : value;\n }\n\n const content = `${label} ${formatMessage({\n id: `components.FilterOptions.FILTER_TYPES.${operator}`,\n defaultMessage: operator,\n })} ${operator !== '$null' && operator !== '$notNull' ? formattedValue : ''}`;\n\n return (\n <Tag padding={1} onClick={handleClick} icon={<Cross />}>\n {content}\n </Tag>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EXPORTS\n * -----------------------------------------------------------------------------------------------*/\n\nconst Filters = {\n List,\n Popover: PopoverImpl,\n Root,\n Trigger,\n};\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nnamespace Filters {\n export interface Filter {\n input?: React.ComponentType<ValueInputProps>;\n label: string;\n /**\n * the name of the attribute we use to display the actual name e.g. relations\n * are just ids, so we use the mainField to display something meaninginful by\n * looking at the target's schema\n */\n mainField?: MainField;\n name: string;\n operators?: Array<{\n label: string;\n value: string;\n }>;\n options?: Array<{ label?: string; value: string }> | string[];\n type: InputProps['type'] | 'relation' | 'custom';\n }\n\n export interface ValueInputProps extends Omit<Filter, 'label'> {\n ['aria-label']: string;\n }\n\n export type Props = RootProps;\n\n export interface TriggerProps {\n label?: string;\n }\n\n export interface Query {\n filters?: {\n /**\n * Typically, a filter will be:\n * ```ts\n * {\n * [attributeName]: {\n * [operator]: value\n * }\n * }\n * ```\n * However, for relation items it becomes more nested.\n * ```ts\n * {\n * [attributeName]: {\n * [relationTargetAttribute]: {\n * [operator]: value\n * }\n * }\n * }\n */\n $and?: Array<Record<string, Record<string, string | Record<string, string>>>>;\n };\n page?: number;\n }\n}\n\nexport { Filters };\n"],"names":["setTriggerNode","setOpen","disabled","open","FilterIcon","options","triggerNode","onChange","filter"],"mappings":"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"}
|
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
const jsxRuntime = require("react/jsx-runtime");
|
|
3
3
|
const React = require("react");
|
|
4
4
|
const designSystem = require("@strapi/design-system");
|
|
5
|
-
const helperPlugin = require("@strapi/helper-plugin");
|
|
6
5
|
const Icons = require("@strapi/icons");
|
|
7
6
|
const reactIntl = require("react-intl");
|
|
8
|
-
const index = require("./index-
|
|
7
|
+
const index = require("./index-haHGOQMJ.js");
|
|
9
8
|
function _interopNamespace(e) {
|
|
10
9
|
if (e && e.__esModule)
|
|
11
10
|
return e;
|
|
@@ -216,7 +215,7 @@ const Trigger = React__namespace.forwardRef(
|
|
|
216
215
|
}
|
|
217
216
|
);
|
|
218
217
|
const PopoverImpl = () => {
|
|
219
|
-
const [{ query }, setQuery] =
|
|
218
|
+
const [{ query }, setQuery] = index.useQueryParams();
|
|
220
219
|
const { formatMessage } = reactIntl.useIntl();
|
|
221
220
|
const open = useFilters("Popover", ({ open: open2 }) => open2);
|
|
222
221
|
const options = useFilters("Popover", ({ options: options2 }) => options2);
|
|
@@ -370,7 +369,7 @@ const getFilterList = (filter) => {
|
|
|
370
369
|
}
|
|
371
370
|
};
|
|
372
371
|
const List = () => {
|
|
373
|
-
const [{ query }, setQuery] =
|
|
372
|
+
const [{ query }, setQuery] = index.useQueryParams();
|
|
374
373
|
const options = useFilters("List", ({ options: options2 }) => options2);
|
|
375
374
|
const handleClick = (data) => {
|
|
376
375
|
const nextFilters = (query?.filters?.$and ?? []).filter((filter) => {
|
|
@@ -502,4 +501,4 @@ const Filters = {
|
|
|
502
501
|
Trigger
|
|
503
502
|
};
|
|
504
503
|
exports.Filters = Filters;
|
|
505
|
-
//# sourceMappingURL=Filters-
|
|
504
|
+
//# sourceMappingURL=Filters-V0VODaNk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Filters-V0VODaNk.js","sources":["../../admin/src/constants/filters.ts","../../admin/src/components/Filters.tsx"],"sourcesContent":["import type { EntityService } from '@strapi/types';\nimport type { MessageDescriptor } from 'react-intl';\n\n/**\n * @description designed to be parsed by formatMessage from react-intl\n * then passed to a Select component.\n */\ninterface FilterOption {\n value: EntityService.Params.Filters.Operator.Where;\n label: MessageDescriptor;\n}\n\n/**\n * @description these are shared by everyone\n */\nconst BASE_FILTERS = [\n {\n label: { id: 'components.FilterOptions.FILTER_TYPES.$eq', defaultMessage: 'is' },\n value: '$eq',\n },\n {\n label: { id: 'components.FilterOptions.FILTER_TYPES.$ne', defaultMessage: 'is not' },\n value: '$ne',\n },\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$null',\n defaultMessage: 'is null',\n },\n value: '$null',\n },\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$notNull',\n defaultMessage: 'is not null',\n },\n value: '$notNull',\n },\n] satisfies FilterOption[];\n\n/**\n * @description typically performed on attributes that are numerical incl. dates.\n */\nconst NUMERIC_FILTERS = [\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$gt',\n defaultMessage: 'is greater than',\n },\n value: '$gt',\n },\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$gte',\n defaultMessage: 'is greater than or equal to',\n },\n value: '$gte',\n },\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$lt',\n defaultMessage: 'is less than',\n },\n value: '$lt',\n },\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$lte',\n defaultMessage: 'is less than or equal to',\n },\n value: '$lte',\n },\n] satisfies FilterOption[];\n\nconst IS_SENSITIVE_FILTERS = [\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$eqi',\n defaultMessage: 'is (case insensitive)',\n },\n value: '$eqi',\n },\n\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$nei',\n defaultMessage: 'is not (case insensitive)',\n },\n value: '$nei',\n },\n] satisfies FilterOption[];\n\n/**\n * @description typically performed on attributes that are strings for partial looking.\n */\nconst CONTAINS_FILTERS = [\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$contains',\n defaultMessage: 'contains',\n },\n value: '$contains',\n },\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$containsi',\n defaultMessage: 'contains (case insensitive)',\n },\n value: '$containsi',\n },\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$notContains',\n defaultMessage: 'not contains',\n },\n value: '$notContains',\n },\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$notContainsi',\n defaultMessage: 'not contains (case insensitive)',\n },\n value: '$notContainsi',\n },\n] satisfies FilterOption[];\n\n/**\n * @description only used on string attributes.\n */\nconst STRING_PARSE_FILTERS = [\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$startsWith',\n defaultMessage: 'starts with',\n },\n value: '$startsWith',\n },\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$startsWithi',\n defaultMessage: 'starts with (case insensitive)',\n },\n value: '$startsWithi',\n },\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$endsWith',\n defaultMessage: 'ends with',\n },\n value: '$endsWith',\n },\n {\n label: {\n id: 'components.FilterOptions.FILTER_TYPES.$endsWithi',\n defaultMessage: 'ends with (case insensitive)',\n },\n value: '$endsWithi',\n },\n] satisfies FilterOption[];\n\nexport {\n BASE_FILTERS,\n NUMERIC_FILTERS,\n IS_SENSITIVE_FILTERS,\n CONTAINS_FILTERS,\n STRING_PARSE_FILTERS,\n};\nexport type { FilterOption };\n","import * as React from 'react';\n\nimport { Button, Flex, PopoverPrimitives, Tag, useComposedRefs } from '@strapi/design-system';\nimport { Plus, Filter as FilterIcon, Cross } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport {\n BASE_FILTERS,\n CONTAINS_FILTERS,\n FilterOption,\n IS_SENSITIVE_FILTERS,\n NUMERIC_FILTERS,\n STRING_PARSE_FILTERS,\n} from '../constants/filters';\nimport { MainField } from '../content-manager/utils/attributes';\nimport { useControllableState } from '../hooks/useControllableState';\nimport { useQueryParams } from '../hooks/useQueryParams';\n\nimport { createContext } from './Context';\nimport { Form, InputProps } from './Form';\nimport { InputRenderer } from './FormInputs/Renderer';\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FilterFormData {\n name: string;\n filter: string;\n value?: string;\n}\n\ninterface FitlersContextValue {\n disabled: boolean;\n onChange: (data: FilterFormData) => void;\n open: boolean;\n setOpen: (open: boolean) => void;\n setTriggerNode: (node: HTMLButtonElement | null) => void;\n triggerNode: HTMLButtonElement | null;\n options: Filters.Filter[];\n}\n\nconst [FiltersProvider, useFilters] = createContext<FitlersContextValue>('Filters');\n\ninterface RootProps\n extends Partial<Pick<FitlersContextValue, 'disabled' | 'onChange' | 'options' | 'open'>> {\n children: React.ReactNode;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n}\n\nconst Root = ({\n children,\n disabled = false,\n onChange,\n onOpenChange,\n open: openProp,\n defaultOpen,\n options = [],\n}: RootProps) => {\n const [triggerNode, setTriggerNode] = React.useState<FitlersContextValue['triggerNode']>(null);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n });\n\n const handleChange = (data: FilterFormData) => {\n if (onChange) {\n onChange(data);\n }\n };\n\n return (\n <FiltersProvider\n disabled={disabled}\n onChange={handleChange}\n open={open}\n options={options}\n setOpen={setOpen}\n setTriggerNode={setTriggerNode}\n triggerNode={triggerNode}\n >\n {children}\n </FiltersProvider>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Trigger\n * -----------------------------------------------------------------------------------------------*/\n\nconst Trigger = React.forwardRef<HTMLButtonElement, Filters.TriggerProps>(\n ({ label }, forwardedRef) => {\n const { formatMessage } = useIntl();\n const { setTriggerNode, setOpen } = useFilters('Trigger', ({ setTriggerNode, setOpen }) => ({\n setTriggerNode,\n setOpen,\n }));\n const disabled = useFilters('Trigger', ({ disabled }) => disabled);\n const open = useFilters('Trigger', ({ open }) => open);\n\n const composedRefs = useComposedRefs(forwardedRef, setTriggerNode);\n\n const handleClick = () => setOpen(!open);\n\n return (\n <Button\n variant=\"tertiary\"\n ref={composedRefs}\n startIcon={<FilterIcon />}\n onClick={handleClick}\n size=\"S\"\n disabled={disabled}\n >\n {label || formatMessage({ id: 'app.utils.filters', defaultMessage: 'Filters' })}\n </Button>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * Popover\n * -----------------------------------------------------------------------------------------------*/\n\nconst PopoverImpl = () => {\n const [{ query }, setQuery] = useQueryParams<Filters.Query>();\n const { formatMessage } = useIntl();\n const open = useFilters('Popover', ({ open }) => open);\n const options = useFilters('Popover', ({ options }) => options);\n const triggerNode = useFilters('Popover', ({ triggerNode }) => triggerNode);\n const setOpen = useFilters('Popover', ({ setOpen }) => setOpen);\n const onChange = useFilters('Popover', ({ onChange }) => onChange);\n\n if (!open || options.length === 0 || !triggerNode) {\n return null;\n }\n\n const handleSubmit = (data: FilterFormData) => {\n if (!data.value) {\n return;\n }\n\n if (onChange) {\n onChange(data);\n }\n\n /**\n * There will ALWAYS be an option because we use the options to create the form data.\n */\n const filterType = options.find((filter) => filter.name === data.name)!.type;\n\n /**\n * If the filter is a relation, we need to nest the filter object,\n * we always use ids to filter relations. But the nested object is\n * the operator & value pair. This value _could_ look like:\n * ```json\n * {\n * \"$eq\": \"1\",\n * }\n * ```\n */\n const operatorValuePairing = {\n [data.filter]: data.value,\n };\n\n const newFilterQuery = {\n ...query.filters,\n $and: [\n ...(query.filters?.$and ?? []),\n {\n [data.name]:\n filterType === 'relation'\n ? {\n id: operatorValuePairing,\n }\n : operatorValuePairing,\n },\n ],\n };\n\n setQuery({ filters: newFilterQuery, page: 1 });\n setOpen(false);\n };\n\n return (\n <PopoverPrimitives.Content\n source={{ current: triggerNode }}\n onDismiss={() => setOpen(false)}\n padding={3}\n spacing={4}\n maxHeight=\"unset\"\n >\n <Form\n method=\"POST\"\n initialValues={\n {\n name: options[0]?.name,\n filter: BASE_FILTERS[0].value,\n } satisfies FilterFormData\n }\n onSubmit={handleSubmit}\n >\n {({ values: formValues, modified, isSubmitting }) => {\n const filter = options.find((filter) => filter.name === formValues.name);\n const Input = filter?.input || InputRenderer;\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2} style={{ minWidth: 184 }}>\n {[\n {\n ['aria-label']: formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n }),\n name: 'name',\n options: options.map((filter) => ({\n label: filter.label,\n value: filter.name,\n })),\n placholder: formatMessage({\n id: 'app.utils.select-field',\n defaultMessage: 'Select field',\n }),\n type: 'enumeration' as const,\n },\n {\n ['aria-label']: formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n }),\n name: 'filter',\n options:\n filter?.operators ||\n getFilterList(filter).map((opt) => ({\n label: formatMessage(opt.label),\n value: opt.value,\n })),\n placeholder: formatMessage({\n id: 'app.utils.select-filter',\n defaultMessage: 'Select filter',\n }),\n type: 'enumeration' as const,\n },\n ].map((field) => (\n <InputRenderer key={field.name} {...field} />\n ))}\n {filter &&\n formValues.filter &&\n formValues.filter !== '$null' &&\n formValues.filter !== '$notNull' ? (\n <Input\n {...filter}\n label={null}\n aria-label={filter.label}\n name=\"value\"\n // @ts-expect-error – if type is `custom` then `Input` will be a custom component.\n type={filter.mainField?.type ?? filter.type}\n />\n ) : null}\n <Button\n disabled={!modified || isSubmitting}\n size=\"L\"\n variant=\"secondary\"\n startIcon={<Plus />}\n type=\"submit\"\n fullWidth\n >\n {formatMessage({ id: 'app.utils.add-filter', defaultMessage: 'Add filter' })}\n </Button>\n </Flex>\n );\n }}\n </Form>\n </PopoverPrimitives.Content>\n );\n};\n\n/**\n * Depending on the selected field find the possible filters to apply\n */\nconst getFilterList = (filter?: Filters.Filter): FilterOption[] => {\n if (!filter) {\n return [];\n }\n\n const type = filter.mainField?.type ? filter.mainField.type : filter.type;\n\n switch (type) {\n case 'email':\n case 'text':\n case 'enumeration':\n case 'string': {\n return [\n ...BASE_FILTERS,\n ...IS_SENSITIVE_FILTERS,\n ...CONTAINS_FILTERS,\n ...STRING_PARSE_FILTERS,\n ];\n }\n\n case 'float':\n case 'integer':\n case 'biginteger':\n case 'decimal': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS];\n }\n case 'time':\n case 'date': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS, ...CONTAINS_FILTERS];\n }\n\n case 'datetime': {\n return [...BASE_FILTERS, ...NUMERIC_FILTERS];\n }\n\n default:\n return [...BASE_FILTERS, ...IS_SENSITIVE_FILTERS];\n }\n};\n\n/* -------------------------------------------------------------------------------------------------\n * List\n * -----------------------------------------------------------------------------------------------*/\n\nconst List = () => {\n const [{ query }, setQuery] = useQueryParams<Filters.Query>();\n\n const options = useFilters('List', ({ options }) => options);\n\n const handleClick = (data: FilterFormData) => {\n /**\n * Check the name, operator and value to see if it already exists in the query\n * if it does, remove it.\n */\n const nextFilters = (query?.filters?.$and ?? []).filter((filter) => {\n const [attributeName] = Object.keys(filter);\n if (attributeName !== data.name) {\n return true;\n }\n\n const { type, mainField } = options.find(({ name }) => name === attributeName)!;\n\n if (type === 'relation') {\n const filterObj = filter[attributeName][mainField?.name ?? 'id'];\n\n if (typeof filterObj === 'object') {\n const [operator] = Object.keys(filterObj);\n const value = filterObj[operator];\n\n return !(operator === data.filter && value === data.value);\n }\n\n return true;\n } else {\n const filterObj = filter[attributeName];\n const [operator] = Object.keys(filterObj);\n const value = filterObj[operator];\n\n return !(operator === data.filter && value === data.value);\n }\n });\n\n setQuery({ filters: { $and: nextFilters }, page: 1 });\n };\n\n if (!query?.filters?.$and?.length) {\n return null;\n }\n\n return (\n <>\n {query?.filters?.$and?.map((queryFilter) => {\n const [attributeName] = Object.keys(queryFilter);\n const filter = options.find(({ name }) => name === attributeName);\n const filterObj = queryFilter[attributeName];\n\n if (!filter || typeof filterObj !== 'object' || filterObj === null) {\n return null;\n }\n\n if (filter.type === 'relation') {\n const modelFilter = filterObj[filter.mainField?.name ?? 'id'];\n\n if (typeof modelFilter === 'object') {\n const [operator] = Object.keys(modelFilter);\n const value = modelFilter[operator];\n return (\n <AttributeTag\n key={`${attributeName}-${operator}-${value}`}\n {...filter}\n onClick={handleClick}\n operator={operator}\n value={value}\n />\n );\n }\n\n return null;\n } else {\n const [operator] = Object.keys(filterObj);\n const value = filterObj[operator];\n\n /**\n * Something has gone wrong here, because the attribute is not a relation\n * but we have a nested filter object.\n */\n if (typeof value === 'object') {\n return null;\n }\n\n return (\n <AttributeTag\n key={`${attributeName}-${operator}-${value}`}\n {...filter}\n onClick={handleClick}\n operator={operator}\n value={value}\n />\n );\n }\n })}\n </>\n );\n};\n\ninterface AttributeTagProps extends Filters.Filter {\n onClick: (data: FilterFormData) => void;\n operator: string;\n value: string;\n}\n\nconst AttributeTag = ({\n input,\n label,\n mainField,\n name,\n onClick,\n operator,\n options,\n value,\n ...filter\n}: AttributeTagProps) => {\n const { formatMessage, formatDate, formatTime, formatNumber } = useIntl();\n\n const handleClick = () => {\n onClick({ name, value, filter: operator });\n };\n\n const type = mainField?.type ? mainField.type : filter.type;\n\n let formattedValue: string = value;\n\n switch (type) {\n case 'date':\n formattedValue = formatDate(value, { dateStyle: 'full' });\n break;\n case 'datetime':\n formattedValue = formatDate(value, { dateStyle: 'full', timeStyle: 'short' });\n break;\n case 'time':\n const [hour, minute] = value.split(':');\n const date = new Date();\n date.setHours(Number(hour));\n date.setMinutes(Number(minute));\n\n formattedValue = formatTime(date, {\n hour: 'numeric',\n minute: 'numeric',\n });\n break;\n case 'float':\n case 'integer':\n case 'biginteger':\n case 'decimal':\n formattedValue = formatNumber(Number(value));\n break;\n }\n\n // Handle custom input\n if (input && options) {\n // If the custom input has an options array, find the option with a customValue matching the query value\n const selectedOption = options.find((option) => {\n return (typeof option === 'string' ? option : option.value) === value;\n });\n\n formattedValue = selectedOption\n ? typeof selectedOption === 'string'\n ? selectedOption\n : selectedOption.label ?? selectedOption.value\n : value;\n }\n\n const content = `${label} ${formatMessage({\n id: `components.FilterOptions.FILTER_TYPES.${operator}`,\n defaultMessage: operator,\n })} ${operator !== '$null' && operator !== '$notNull' ? formattedValue : ''}`;\n\n return (\n <Tag padding={1} onClick={handleClick} icon={<Cross />}>\n {content}\n </Tag>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EXPORTS\n * -----------------------------------------------------------------------------------------------*/\n\nconst Filters = {\n List,\n Popover: PopoverImpl,\n Root,\n Trigger,\n};\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nnamespace Filters {\n export interface Filter {\n input?: React.ComponentType<ValueInputProps>;\n label: string;\n /**\n * the name of the attribute we use to display the actual name e.g. relations\n * are just ids, so we use the mainField to display something meaninginful by\n * looking at the target's schema\n */\n mainField?: MainField;\n name: string;\n operators?: Array<{\n label: string;\n value: string;\n }>;\n options?: Array<{ label?: string; value: string }> | string[];\n type: InputProps['type'] | 'relation' | 'custom';\n }\n\n export interface ValueInputProps extends Omit<Filter, 'label'> {\n ['aria-label']: string;\n }\n\n export type Props = RootProps;\n\n export interface TriggerProps {\n label?: string;\n }\n\n export interface Query {\n filters?: {\n /**\n * Typically, a filter will be:\n * ```ts\n * {\n * [attributeName]: {\n * [operator]: value\n * }\n * }\n * ```\n * However, for relation items it becomes more nested.\n * ```ts\n * {\n * [attributeName]: {\n * [relationTargetAttribute]: {\n * [operator]: value\n * }\n * }\n * }\n */\n $and?: Array<Record<string, Record<string, string | Record<string, string>>>>;\n };\n page?: number;\n }\n}\n\nexport { Filters };\n"],"names":["createContext","React","useControllableState","jsx","useIntl","setTriggerNode","setOpen","disabled","open","useComposedRefs","Button","FilterIcon","useQueryParams","options","triggerNode","onChange","PopoverPrimitives","Form","filter","InputRenderer","jsxs","Flex","Plus","Tag","Cross"],"mappings":"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"}
|