@strapi/admin 5.0.0-alpha.0 → 5.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/{AdminSeatInfo-l78lfIiY.mjs → AdminSeatInfo-20pkL95U.mjs} +3 -3
- package/dist/_chunks/{AdminSeatInfo-l78lfIiY.mjs.map → AdminSeatInfo-20pkL95U.mjs.map} +1 -1
- package/dist/_chunks/{AdminSeatInfo-YaA1q_2d.js → AdminSeatInfo-TjK5LW2b.js} +3 -3
- package/dist/_chunks/{AdminSeatInfo-YaA1q_2d.js.map → AdminSeatInfo-TjK5LW2b.js.map} +1 -1
- package/dist/_chunks/{ApplicationInfoPage-PHLA1Ysy.js → ApplicationInfoPage-1OdKMDYH.js} +11 -12
- package/dist/_chunks/ApplicationInfoPage-1OdKMDYH.js.map +1 -0
- package/dist/_chunks/{ApplicationInfoPage-Zn5JU2zd.mjs → ApplicationInfoPage-ed6y9Q-B.mjs} +12 -13
- package/dist/_chunks/ApplicationInfoPage-ed6y9Q-B.mjs.map +1 -0
- package/dist/_chunks/{AuthResponse-1aYRF7_3.mjs → AuthResponse-Hxop00n-.mjs} +2 -2
- package/dist/_chunks/{AuthResponse-1aYRF7_3.mjs.map → AuthResponse-Hxop00n-.mjs.map} +1 -1
- package/dist/_chunks/{AuthResponse-7NG3smr6.js → AuthResponse-sca_wjIN.js} +2 -2
- package/dist/_chunks/{AuthResponse-7NG3smr6.js.map → AuthResponse-sca_wjIN.js.map} +1 -1
- package/dist/_chunks/{AuthenticatedLayout-5r4rzKeb.js → AuthenticatedLayout-PPlOm7kb.js} +14 -11
- package/dist/_chunks/AuthenticatedLayout-PPlOm7kb.js.map +1 -0
- package/dist/_chunks/{AuthenticatedLayout-a7KNOdln.mjs → AuthenticatedLayout-knXNB2i2.mjs} +11 -9
- package/dist/_chunks/AuthenticatedLayout-knXNB2i2.mjs.map +1 -0
- package/dist/_chunks/{ComponentConfigurationPage-pb8HhFAg.mjs → ComponentConfigurationPage-okd3XovW.mjs} +11 -12
- package/dist/_chunks/ComponentConfigurationPage-okd3XovW.mjs.map +1 -0
- package/dist/_chunks/{ComponentConfigurationPage-R3qV_iCR.js → ComponentConfigurationPage-xZMDjeVf.js} +11 -12
- package/dist/_chunks/ComponentConfigurationPage-xZMDjeVf.js.map +1 -0
- package/dist/_chunks/{CreateActionEE-a2zWCIpQ.js → CreateActionEE-E6YNdAVx.js} +2 -2
- package/dist/_chunks/{CreateActionEE-a2zWCIpQ.js.map → CreateActionEE-E6YNdAVx.js.map} +1 -1
- package/dist/_chunks/{CreateActionEE-hb4Pr-SD.mjs → CreateActionEE-PaZYJ410.mjs} +2 -2
- package/dist/_chunks/{CreateActionEE-hb4Pr-SD.mjs.map → CreateActionEE-PaZYJ410.mjs.map} +1 -1
- package/dist/_chunks/{CreatePage-nl6zKkKT.js → CreatePage-1Oi4-aR6.js} +17 -16
- package/dist/_chunks/CreatePage-1Oi4-aR6.js.map +1 -0
- package/dist/_chunks/{CreatePage-UC4uBFUR.mjs → CreatePage-6458K0l9.mjs} +3 -3
- package/dist/_chunks/{CreatePage-UC4uBFUR.mjs.map → CreatePage-6458K0l9.mjs.map} +1 -1
- package/dist/_chunks/{CreatePage-NSKUL8l4.js → CreatePage-DmNFNVN9.js} +10 -9
- package/dist/_chunks/CreatePage-DmNFNVN9.js.map +1 -0
- package/dist/_chunks/{CreatePage-Bil0egZ1.mjs → CreatePage-P1F3dkB3.mjs} +17 -16
- package/dist/_chunks/CreatePage-P1F3dkB3.mjs.map +1 -0
- package/dist/_chunks/{CreatePage-h5L6QP47.mjs → CreatePage-PM_r99U5.mjs} +10 -9
- package/dist/_chunks/CreatePage-PM_r99U5.mjs.map +1 -0
- package/dist/_chunks/{CreatePage-MAI6XyNg.js → CreatePage-hlkPO2Cv.js} +3 -3
- package/dist/_chunks/{CreatePage-MAI6XyNg.js.map → CreatePage-hlkPO2Cv.js.map} +1 -1
- package/dist/_chunks/{CreateView-kc0iM0LS.js → CreateView-AWmN1xWJ.js} +3 -3
- package/dist/_chunks/{CreateView-kc0iM0LS.js.map → CreateView-AWmN1xWJ.js.map} +1 -1
- package/dist/_chunks/{CreateView-RVrFxAFt.mjs → CreateView-cTvLLIgu.mjs} +3 -3
- package/dist/_chunks/{CreateView-RVrFxAFt.mjs.map → CreateView-cTvLLIgu.mjs.map} +1 -1
- package/dist/_chunks/{CreateView-3DMhoCPN.js → CreateView-hUH4bf5k.js} +3 -3
- package/dist/_chunks/{CreateView-3DMhoCPN.js.map → CreateView-hUH4bf5k.js.map} +1 -1
- package/dist/_chunks/{CreateView-DuSt3AcE.mjs → CreateView-pBI75ZwZ.mjs} +3 -3
- package/dist/_chunks/{CreateView-DuSt3AcE.mjs.map → CreateView-pBI75ZwZ.mjs.map} +1 -1
- package/dist/_chunks/{EditConfigurationPage-y_TvxjZM.mjs → EditConfigurationPage-LItt0mJo.mjs} +10 -11
- package/dist/_chunks/EditConfigurationPage-LItt0mJo.mjs.map +1 -0
- package/dist/_chunks/{EditConfigurationPage-OpEZOvAG.js → EditConfigurationPage-PZ4yq1bM.js} +10 -11
- package/dist/_chunks/EditConfigurationPage-PZ4yq1bM.js.map +1 -0
- package/dist/_chunks/{EditPage-_swY0Hy-.mjs → EditPage--EPGgPNr.mjs} +11 -10
- package/dist/_chunks/EditPage--EPGgPNr.mjs.map +1 -0
- package/dist/_chunks/{EditPage-fDVAYmuS.mjs → EditPage-30rqjB1d.mjs} +16 -16
- package/dist/_chunks/EditPage-30rqjB1d.mjs.map +1 -0
- package/dist/_chunks/{EditPage-wfPrhkA7.mjs → EditPage-GRIZWtGz.mjs} +19 -18
- package/dist/_chunks/{EditPage-wfPrhkA7.mjs.map → EditPage-GRIZWtGz.mjs.map} +1 -1
- package/dist/_chunks/{EditPage-VoRR5DCQ.mjs → EditPage-MPNLCYgQ.mjs} +14 -14
- package/dist/_chunks/EditPage-MPNLCYgQ.mjs.map +1 -0
- package/dist/_chunks/{EditPage-QoDSqYYq.js → EditPage-RpzlPkkU.js} +19 -18
- package/dist/_chunks/{EditPage-QoDSqYYq.js.map → EditPage-RpzlPkkU.js.map} +1 -1
- package/dist/_chunks/{EditPage-9aK8IFXY.js → EditPage-W6hncyNY.js} +15 -15
- package/dist/_chunks/EditPage-W6hncyNY.js.map +1 -0
- package/dist/_chunks/{EditPage-A6olBfVm.js → EditPage-_N_lm93z.js} +13 -13
- package/dist/_chunks/EditPage-_N_lm93z.js.map +1 -0
- package/dist/_chunks/{EditPage-PpBP7TBo.js → EditPage-mU2WAH0F.js} +11 -10
- package/dist/_chunks/EditPage-mU2WAH0F.js.map +1 -0
- package/dist/_chunks/{EditView-EuUw_2zc.mjs → EditView-0lXpbgG0.mjs} +12 -12
- package/dist/_chunks/EditView-0lXpbgG0.mjs.map +1 -0
- package/dist/_chunks/{EditView-C_ynfmtW.js → EditView-wDP9PNQY.js} +11 -11
- package/dist/_chunks/EditView-wDP9PNQY.js.map +1 -0
- package/dist/_chunks/{EditViewPage-Z_e1dpbU.js → EditViewPage-0Pd8zBi7.js} +16 -15
- package/dist/_chunks/EditViewPage-0Pd8zBi7.js.map +1 -0
- package/dist/_chunks/{EditViewPage-xYzUSAwS.mjs → EditViewPage-R6diW-gL.mjs} +7 -7
- package/dist/_chunks/EditViewPage-R6diW-gL.mjs.map +1 -0
- package/dist/_chunks/{EditViewPage-XtJmgPi5.js → EditViewPage-ed0-10GO.js} +6 -6
- package/dist/_chunks/EditViewPage-ed0-10GO.js.map +1 -0
- package/dist/_chunks/{EditViewPage-8uPO5GWR.mjs → EditViewPage-uWYR_o8w.mjs} +15 -15
- package/dist/_chunks/EditViewPage-uWYR_o8w.mjs.map +1 -0
- package/dist/_chunks/{EventsTable-WP7PUujH.mjs → EventsTable-CqN6AzV9.mjs} +2 -2
- package/dist/_chunks/{EventsTable-WP7PUujH.mjs.map → EventsTable-CqN6AzV9.mjs.map} +1 -1
- package/dist/_chunks/{EventsTable-hI0aV29K.js → EventsTable-R_AHW6Z4.js} +2 -2
- package/dist/_chunks/{EventsTable-hI0aV29K.js.map → EventsTable-R_AHW6Z4.js.map} +1 -1
- package/dist/_chunks/{FieldTypeIcon-OeDSkshr.js → FieldTypeIcon-1WDWx0cR.js} +2 -2
- package/dist/_chunks/{FieldTypeIcon-OeDSkshr.js.map → FieldTypeIcon-1WDWx0cR.js.map} +1 -1
- package/dist/_chunks/{FieldTypeIcon-Is5Qjngf.mjs → FieldTypeIcon-rAK1gg9p.mjs} +2 -2
- package/dist/_chunks/{FieldTypeIcon-Is5Qjngf.mjs.map → FieldTypeIcon-rAK1gg9p.mjs.map} +1 -1
- package/dist/_chunks/{Filters-xVuf1kg6.js → Filters-f6ghLf0Z.js} +2 -2
- package/dist/_chunks/{Filters-xVuf1kg6.js.map → Filters-f6ghLf0Z.js.map} +1 -1
- package/dist/_chunks/{Filters-tMd2Q5jg.mjs → Filters-rPaxqj4F.mjs} +2 -2
- package/dist/_chunks/{Filters-tMd2Q5jg.mjs.map → Filters-rPaxqj4F.mjs.map} +1 -1
- package/dist/_chunks/{Form-sZKjSFQC.mjs → Form-QOZA9Aq6.mjs} +6 -5
- package/dist/_chunks/Form-QOZA9Aq6.mjs.map +1 -0
- package/dist/_chunks/{Form-EiK_H9BI.js → Form-eqzCPjSo.js} +6 -5
- package/dist/_chunks/Form-eqzCPjSo.js.map +1 -0
- package/dist/_chunks/{History-1AF4LH3c.mjs → History-Eq4_WQPf.mjs} +4 -4
- package/dist/_chunks/{History-1AF4LH3c.mjs.map → History-Eq4_WQPf.mjs.map} +1 -1
- package/dist/_chunks/{History-V_ik1IL0.js → History-j00hpmXV.js} +4 -4
- package/dist/_chunks/{History-V_ik1IL0.js.map → History-j00hpmXV.js.map} +1 -1
- package/dist/_chunks/{HomePage-yrIp1-eG.js → HomePage-3IVOMrYf.js} +6 -5
- package/dist/_chunks/HomePage-3IVOMrYf.js.map +1 -0
- package/dist/_chunks/{HomePage-zL7HPV7A.js → HomePage-79fqDlve.js} +3 -3
- package/dist/_chunks/{HomePage-zL7HPV7A.js.map → HomePage-79fqDlve.js.map} +1 -1
- package/dist/_chunks/{HomePage-C6Ivli1q.mjs → HomePage-O-TRGX5T.mjs} +6 -5
- package/dist/_chunks/HomePage-O-TRGX5T.mjs.map +1 -0
- package/dist/_chunks/{HomePage-7Xva17wM.mjs → HomePage-gTElgmEK.mjs} +3 -3
- package/dist/_chunks/{HomePage-7Xva17wM.mjs.map → HomePage-gTElgmEK.mjs.map} +1 -1
- package/dist/_chunks/{InputRenderer-RMnWnPI4.js → InputRenderer-AVDw8MeU.js} +12 -19
- package/dist/_chunks/InputRenderer-AVDw8MeU.js.map +1 -0
- package/dist/_chunks/{InputRenderer-iP1kRki4.mjs → InputRenderer-bJwYq9ga.mjs} +13 -20
- package/dist/_chunks/InputRenderer-bJwYq9ga.mjs.map +1 -0
- package/dist/_chunks/{InstalledPluginsPage-PrMyistN.js → InstalledPluginsPage-FkR2xkQz.js} +5 -5
- package/dist/_chunks/InstalledPluginsPage-FkR2xkQz.js.map +1 -0
- package/dist/_chunks/{InstalledPluginsPage-7m_FfOGl.mjs → InstalledPluginsPage-R2hVFPZl.mjs} +6 -6
- package/dist/_chunks/InstalledPluginsPage-R2hVFPZl.mjs.map +1 -0
- package/dist/_chunks/{Layout-9Li8e-qi.js → Layout-G49-Vc5u.js} +5 -5
- package/dist/_chunks/Layout-G49-Vc5u.js.map +1 -0
- package/dist/_chunks/{Layout-EDS3Yv8X.mjs → Layout-cV6Se3U9.mjs} +6 -6
- package/dist/_chunks/Layout-cV6Se3U9.mjs.map +1 -0
- package/dist/_chunks/{Layout-DC68R0Fa.js → Layout-jweb3cF3.js} +2 -2
- package/dist/_chunks/{Layout-DC68R0Fa.js.map → Layout-jweb3cF3.js.map} +1 -1
- package/dist/_chunks/{Layout-tDfvrUZo.mjs → Layout-omCNy92r.mjs} +2 -2
- package/dist/_chunks/{Layout-tDfvrUZo.mjs.map → Layout-omCNy92r.mjs.map} +1 -1
- package/dist/_chunks/{ListConfigurationPage-Gl8AA-2t.js → ListConfigurationPage-70qtv4Ci.js} +11 -10
- package/dist/_chunks/ListConfigurationPage-70qtv4Ci.js.map +1 -0
- package/dist/_chunks/{ListConfigurationPage-7O7HiJjG.mjs → ListConfigurationPage-PrJNO_6y.mjs} +11 -10
- package/dist/_chunks/ListConfigurationPage-PrJNO_6y.mjs.map +1 -0
- package/dist/_chunks/{ListPage-em8KMoKx.js → ListPage-2lswUYQN.js} +14 -14
- package/dist/_chunks/ListPage-2lswUYQN.js.map +1 -0
- package/dist/_chunks/{ListPage-_i7RNkUF.js → ListPage-78Cv8Vfq.js} +8 -8
- package/dist/_chunks/ListPage-78Cv8Vfq.js.map +1 -0
- package/dist/_chunks/{ListPage-skKuhRrN.js → ListPage-7dZ3nYvc.js} +12 -11
- package/dist/_chunks/ListPage-7dZ3nYvc.js.map +1 -0
- package/dist/_chunks/{ListPage-DZBRIMkE.mjs → ListPage-Cvn3WbMH.mjs} +14 -14
- package/dist/_chunks/ListPage-Cvn3WbMH.mjs.map +1 -0
- package/dist/_chunks/{ListPage-0eDZZ7Zw.js → ListPage-Ms6egnF5.js} +3 -3
- package/dist/_chunks/{ListPage-0eDZZ7Zw.js.map → ListPage-Ms6egnF5.js.map} +1 -1
- package/dist/_chunks/{ListPage-Ky2tG2bd.mjs → ListPage-NmUS_cOz.mjs} +9 -9
- package/dist/_chunks/ListPage-NmUS_cOz.mjs.map +1 -0
- package/dist/_chunks/{ListPage-NdzVJ_Ed.js → ListPage-Pf5LxUYn.js} +11 -9
- package/dist/_chunks/ListPage-Pf5LxUYn.js.map +1 -0
- package/dist/_chunks/{ListPage-cBvO_gYR.mjs → ListPage-Q81SX0vA.mjs} +3 -3
- package/dist/_chunks/{ListPage-cBvO_gYR.mjs.map → ListPage-Q81SX0vA.mjs.map} +1 -1
- package/dist/_chunks/{ListPage-RlY1nro4.mjs → ListPage-edro79m2.mjs} +9 -9
- package/dist/_chunks/ListPage-edro79m2.mjs.map +1 -0
- package/dist/_chunks/{ListPage-1q5Fi4W9.mjs → ListPage-mAUCZIg8.mjs} +14 -13
- package/dist/_chunks/ListPage-mAUCZIg8.mjs.map +1 -0
- package/dist/_chunks/{ListPage-God7L19W.mjs → ListPage-xFkcmM1b.mjs} +15 -15
- package/dist/_chunks/ListPage-xFkcmM1b.mjs.map +1 -0
- package/dist/_chunks/{ListPage-aElBcYPH.js → ListPage-yymh17qi.js} +13 -13
- package/dist/_chunks/ListPage-yymh17qi.js.map +1 -0
- package/dist/_chunks/{ListView-hm-mjZ8N.mjs → ListView--43zLiHW.mjs} +11 -11
- package/dist/_chunks/ListView--43zLiHW.mjs.map +1 -0
- package/dist/_chunks/{ListView--mxDKrnG.js → ListView-YtMAQnXL.js} +10 -10
- package/dist/_chunks/ListView-YtMAQnXL.js.map +1 -0
- package/dist/_chunks/{ListView-vP-PjR4p.js → ListView-nfA6o3qO.js} +9 -9
- package/dist/_chunks/ListView-nfA6o3qO.js.map +1 -0
- package/dist/_chunks/{ListView-QEgFV6dm.mjs → ListView-qPiKeCxj.mjs} +10 -10
- package/dist/_chunks/ListView-qPiKeCxj.mjs.map +1 -0
- package/dist/_chunks/{ListViewPage-NiwpwxBR.js → ListViewPage-Ys7-G2XX.js} +9 -9
- package/dist/_chunks/ListViewPage-Ys7-G2XX.js.map +1 -0
- package/dist/_chunks/{ListViewPage-xOVa04T_.mjs → ListViewPage-fPFonK_X.mjs} +10 -10
- package/dist/_chunks/ListViewPage-fPFonK_X.mjs.map +1 -0
- package/dist/_chunks/{Login-IFCsIrab.mjs → Login-6kXI90Vy.mjs} +2 -2
- package/dist/_chunks/{Login-IFCsIrab.mjs.map → Login-6kXI90Vy.mjs.map} +1 -1
- package/dist/_chunks/{Login-0FtP5Ck_.js → Login-Ge3DZEpr.js} +2 -2
- package/dist/_chunks/{Login-0FtP5Ck_.js.map → Login-Ge3DZEpr.js.map} +1 -1
- package/dist/_chunks/{MagicLinkEE-eaU4kQ6o.mjs → MagicLinkEE-HXWaLr0K.mjs} +3 -3
- package/dist/_chunks/{MagicLinkEE-eaU4kQ6o.mjs.map → MagicLinkEE-HXWaLr0K.mjs.map} +1 -1
- package/dist/_chunks/{MagicLinkEE-S7dXBaH0.js → MagicLinkEE-sXtA2gUK.js} +3 -3
- package/dist/_chunks/{MagicLinkEE-S7dXBaH0.js.map → MagicLinkEE-sXtA2gUK.js.map} +1 -1
- package/dist/_chunks/{MarketplacePage-f0ZrC_p8.mjs → MarketplacePage-hVOJ9_0k.mjs} +15 -20
- package/dist/_chunks/MarketplacePage-hVOJ9_0k.mjs.map +1 -0
- package/dist/_chunks/{MarketplacePage-zSQ_GRnZ.js → MarketplacePage-s8KDwNwK.js} +14 -19
- package/dist/_chunks/MarketplacePage-s8KDwNwK.js.map +1 -0
- package/dist/_chunks/{NoContentTypePage-_XU8B8oQ.js → NoContentTypePage-7YEcgsE3.js} +2 -2
- package/dist/_chunks/{NoContentTypePage-_XU8B8oQ.js.map → NoContentTypePage-7YEcgsE3.js.map} +1 -1
- package/dist/_chunks/{NoContentTypePage-ER4yVLjV.mjs → NoContentTypePage-szvJnQKF.mjs} +2 -2
- package/dist/_chunks/{NoContentTypePage-ER4yVLjV.mjs.map → NoContentTypePage-szvJnQKF.mjs.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-5A4Hwjad.js → NoPermissionsPage-UX-5msLb.js} +2 -2
- package/dist/_chunks/{NoPermissionsPage-5A4Hwjad.js.map → NoPermissionsPage-UX-5msLb.js.map} +1 -1
- package/dist/_chunks/{NoPermissionsPage-DcFRsCHz.mjs → NoPermissionsPage-pqQFFlXa.mjs} +2 -2
- package/dist/_chunks/{NoPermissionsPage-DcFRsCHz.mjs.map → NoPermissionsPage-pqQFFlXa.mjs.map} +1 -1
- package/dist/_chunks/{Permissions-Ke5fqSQ2.mjs → Permissions-NUaDxULo.mjs} +3 -3
- package/dist/_chunks/Permissions-NUaDxULo.mjs.map +1 -0
- package/dist/_chunks/{Permissions--rdF1ZKQ.js → Permissions-a0IZJ8dM.js} +6 -5
- package/dist/_chunks/Permissions-a0IZJ8dM.js.map +1 -0
- package/dist/_chunks/{PrivateRoute-GLTcdbu8.js → PrivateRoute-KGxyTa5b.js} +2 -2
- package/dist/_chunks/{PrivateRoute-GLTcdbu8.js.map → PrivateRoute-KGxyTa5b.js.map} +1 -1
- package/dist/_chunks/{PrivateRoute-dWrZb-9J.mjs → PrivateRoute-eP4-pBby.mjs} +2 -2
- package/dist/_chunks/{PrivateRoute-dWrZb-9J.mjs.map → PrivateRoute-eP4-pBby.mjs.map} +1 -1
- package/dist/_chunks/{ProfilePage-bE7txhNu.mjs → ProfilePage-LXB-_EZ8.mjs} +14 -14
- package/dist/_chunks/ProfilePage-LXB-_EZ8.mjs.map +1 -0
- package/dist/_chunks/{ProfilePage-EEcNKnGH.js → ProfilePage-MBCGqbc_.js} +13 -13
- package/dist/_chunks/ProfilePage-MBCGqbc_.js.map +1 -0
- package/dist/_chunks/{ReviewWorkflowsColumn-hJRkAN5a.js → ReviewWorkflowsColumn-Ancp7-x3.js} +2 -2
- package/dist/_chunks/{ReviewWorkflowsColumn-hJRkAN5a.js.map → ReviewWorkflowsColumn-Ancp7-x3.js.map} +1 -1
- package/dist/_chunks/{ReviewWorkflowsColumn-FDxVKdto.mjs → ReviewWorkflowsColumn-WzYpj2O3.mjs} +2 -2
- package/dist/_chunks/{ReviewWorkflowsColumn-FDxVKdto.mjs.map → ReviewWorkflowsColumn-WzYpj2O3.mjs.map} +1 -1
- package/dist/_chunks/{SelectRoles-Iih1yeTu.mjs → SelectRoles-Dxz_rAaT.mjs} +6 -9
- package/dist/_chunks/SelectRoles-Dxz_rAaT.mjs.map +1 -0
- package/dist/_chunks/{SelectRoles-XK5HcBdP.js → SelectRoles-Pr2wqehq.js} +5 -8
- package/dist/_chunks/SelectRoles-Pr2wqehq.js.map +1 -0
- package/dist/_chunks/{SingleSignOnPage-uURRsIxP.js → SingleSignOnPage-4dK4id8H.js} +9 -9
- package/dist/_chunks/SingleSignOnPage-4dK4id8H.js.map +1 -0
- package/dist/_chunks/{SingleSignOnPage-vOeDxBfa.mjs → SingleSignOnPage-gxgIeURz.mjs} +10 -10
- package/dist/_chunks/SingleSignOnPage-gxgIeURz.mjs.map +1 -0
- package/dist/_chunks/{Table-k6gVR2KH.mjs → Table-NiTkS4IC.mjs} +2 -2
- package/dist/_chunks/{Table-k6gVR2KH.mjs.map → Table-NiTkS4IC.mjs.map} +1 -1
- package/dist/_chunks/{Table-VsNr4Mha.js → Table-_9gVkGGi.js} +2 -2
- package/dist/_chunks/{Table-VsNr4Mha.js.map → Table-_9gVkGGi.js.map} +1 -1
- package/dist/_chunks/{TokenTypeSelect-QN_bDdss.js → TokenTypeSelect-3aWUm1cW.js} +10 -10
- package/dist/_chunks/TokenTypeSelect-3aWUm1cW.js.map +1 -0
- package/dist/_chunks/{TokenTypeSelect-Z9iyoteG.mjs → TokenTypeSelect-jtfCyMMZ.mjs} +10 -10
- package/dist/_chunks/TokenTypeSelect-jtfCyMMZ.mjs.map +1 -0
- package/dist/_chunks/{UseCasePage-qJwKBweD.mjs → UseCasePage-0qXYZ8kt.mjs} +7 -6
- package/dist/_chunks/UseCasePage-0qXYZ8kt.mjs.map +1 -0
- package/dist/_chunks/{UseCasePage-xAlTWOcX.js → UseCasePage-QK-B8FfM.js} +7 -6
- package/dist/_chunks/UseCasePage-QK-B8FfM.js.map +1 -0
- package/dist/_chunks/{apiTokens-dGGyJI-w.mjs → apiTokens-DO6vkoyd.mjs} +2 -2
- package/dist/_chunks/{apiTokens-dGGyJI-w.mjs.map → apiTokens-DO6vkoyd.mjs.map} +1 -1
- package/dist/_chunks/{apiTokens-b3w4qO8B.js → apiTokens-TayNdk_V.js} +2 -2
- package/dist/_chunks/{apiTokens-b3w4qO8B.js.map → apiTokens-TayNdk_V.js.map} +1 -1
- package/dist/_chunks/{constants-ruIkLWCb.mjs → constants-FEW7x2Od.mjs} +2 -2
- package/dist/_chunks/{constants-ruIkLWCb.mjs.map → constants-FEW7x2Od.mjs.map} +1 -1
- package/dist/_chunks/{constants-PHXhIuUs.js → constants-RZp8o_c4.js} +2 -2
- package/dist/_chunks/{constants-PHXhIuUs.js.map → constants-RZp8o_c4.js.map} +1 -1
- package/dist/_chunks/{constants-IZEgEoW9.js → constants-Xd-X3SCR.js} +3 -3
- package/dist/_chunks/{constants-IZEgEoW9.js.map → constants-Xd-X3SCR.js.map} +1 -1
- package/dist/_chunks/{constants-WjN6I3sL.mjs → constants-_T5uxsuv.mjs} +3 -3
- package/dist/_chunks/{constants-WjN6I3sL.mjs.map → constants-_T5uxsuv.mjs.map} +1 -1
- package/dist/_chunks/{index-ibtz273H.js → index-ejSDPT-T.js} +151 -326
- package/dist/_chunks/index-ejSDPT-T.js.map +1 -0
- package/dist/_chunks/{index-5ZvCaCyY.mjs → index-hjUhNUvw.mjs} +279 -455
- package/dist/_chunks/index-hjUhNUvw.mjs.map +1 -0
- package/dist/_chunks/{selectors-TFKI8arF.js → selectors-T2YIN4Fb.js} +2 -2
- package/dist/_chunks/{selectors-TFKI8arF.js.map → selectors-T2YIN4Fb.js.map} +1 -1
- package/dist/_chunks/{selectors-JBxTdRJK.mjs → selectors-uLWxH-jN.mjs} +2 -2
- package/dist/_chunks/{selectors-JBxTdRJK.mjs.map → selectors-uLWxH-jN.mjs.map} +1 -1
- package/dist/_chunks/{transferTokens-G-suI4pp.js → transferTokens-T-kGMb3U.js} +2 -2
- package/dist/_chunks/{transferTokens-G-suI4pp.js.map → transferTokens-T-kGMb3U.js.map} +1 -1
- package/dist/_chunks/{transferTokens-4KlyXDql.mjs → transferTokens-jdkk-sPx.mjs} +2 -2
- package/dist/_chunks/{transferTokens-4KlyXDql.mjs.map → transferTokens-jdkk-sPx.mjs.map} +1 -1
- package/dist/_chunks/{useAdminRoles-7_YWhmkQ.mjs → useAdminRoles-QJQS1BCd.mjs} +2 -2
- package/dist/_chunks/{useAdminRoles-7_YWhmkQ.mjs.map → useAdminRoles-QJQS1BCd.mjs.map} +1 -1
- package/dist/_chunks/{useAdminRoles-o4dxsCcY.js → useAdminRoles-SnzC_mvy.js} +2 -2
- package/dist/_chunks/{useAdminRoles-o4dxsCcY.js.map → useAdminRoles-SnzC_mvy.js.map} +1 -1
- package/dist/_chunks/{useContentTypes-dRoMxL8c.js → useContentTypes-Lpg-eJmK.js} +5 -4
- package/dist/_chunks/useContentTypes-Lpg-eJmK.js.map +1 -0
- package/dist/_chunks/{useContentTypes-x6OLbsWe.mjs → useContentTypes-U-n1-lz0.mjs} +5 -4
- package/dist/_chunks/useContentTypes-U-n1-lz0.mjs.map +1 -0
- package/dist/_chunks/{useLicenseLimitNotification-BaSsY40x.js → useLicenseLimitNotification-Hjv_LKmp.js} +6 -5
- package/dist/_chunks/useLicenseLimitNotification-Hjv_LKmp.js.map +1 -0
- package/dist/_chunks/{useLicenseLimitNotification-wzvrsJoL.mjs → useLicenseLimitNotification-yJHxF4YO.mjs} +6 -5
- package/dist/_chunks/useLicenseLimitNotification-yJHxF4YO.mjs.map +1 -0
- package/dist/_chunks/{useReviewWorkflows-PAvhwNm3.mjs → useReviewWorkflows-0rQx2KxS.mjs} +2 -2
- package/dist/_chunks/{useReviewWorkflows-PAvhwNm3.mjs.map → useReviewWorkflows-0rQx2KxS.mjs.map} +1 -1
- package/dist/_chunks/{useReviewWorkflows-3SKYABe_.js → useReviewWorkflows-QoSEilRp.js} +2 -2
- package/dist/_chunks/{useReviewWorkflows-3SKYABe_.js.map → useReviewWorkflows-QoSEilRp.js.map} +1 -1
- package/dist/_chunks/{useSyncRbac-f7CCq_yt.js → useSyncRbac-hZJWbmmY.js} +2 -2
- package/dist/_chunks/{useSyncRbac-f7CCq_yt.js.map → useSyncRbac-hZJWbmmY.js.map} +1 -1
- package/dist/_chunks/{useSyncRbac-Kt8Li0Yf.mjs → useSyncRbac-wVgN6XIc.mjs} +2 -2
- package/dist/_chunks/{useSyncRbac-Kt8Li0Yf.mjs.map → useSyncRbac-wVgN6XIc.mjs.map} +1 -1
- package/dist/_chunks/{useWebhooks-Fhm21I_2.js → useWebhooks-1ZG0V0Mc.js} +2 -2
- package/dist/_chunks/{useWebhooks-Fhm21I_2.js.map → useWebhooks-1ZG0V0Mc.js.map} +1 -1
- package/dist/_chunks/{useWebhooks-6rWM4vzd.mjs → useWebhooks-WBwti5Jl.mjs} +2 -2
- package/dist/_chunks/{useWebhooks-6rWM4vzd.mjs.map → useWebhooks-WBwti5Jl.mjs.map} +1 -1
- package/dist/_chunks/{validateWorkflow-DlwU9a4N.mjs → validateWorkflow-23kb45Oa.mjs} +6 -5
- package/dist/_chunks/validateWorkflow-23kb45Oa.mjs.map +1 -0
- package/dist/_chunks/{validateWorkflow-1g4fl4e7.js → validateWorkflow-MaEpFiHz.js} +9 -8
- package/dist/_chunks/validateWorkflow-MaEpFiHz.js.map +1 -0
- package/dist/_chunks/{validation-NckIpCgz.js → validation-7cD0kJHF.js} +2 -2
- package/dist/_chunks/{validation-NckIpCgz.js.map → validation-7cD0kJHF.js.map} +1 -1
- package/dist/_chunks/{validation-aaWzg0nE.mjs → validation-rilbXPnt.mjs} +2 -2
- package/dist/_chunks/{validation-aaWzg0nE.mjs.map → validation-rilbXPnt.mjs.map} +1 -1
- package/dist/admin/index.js +1 -4
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +22 -25
- package/dist/admin/src/content-manager/pages/EditView/components/DocumentActions.d.ts +1 -2
- package/dist/admin/src/hooks/useAPIErrorHandler.d.ts +2 -2
- package/dist/admin/src/index.d.ts +0 -2
- 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/utils/users.d.ts +1 -1
- package/dist/server/src/validation/api-tokens.d.ts +27 -4
- package/dist/server/src/validation/api-tokens.d.ts.map +1 -1
- package/dist/server/src/validation/authentication/register.d.ts +8 -2
- package/dist/server/src/validation/authentication/register.d.ts.map +1 -1
- package/dist/server/src/validation/permission.d.ts +53 -4
- package/dist/server/src/validation/permission.d.ts.map +1 -1
- package/dist/server/src/validation/policies/hasPermissions.d.ts +7 -2
- package/dist/server/src/validation/policies/hasPermissions.d.ts.map +1 -1
- package/dist/server/src/validation/role.d.ts +23 -6
- package/dist/server/src/validation/role.d.ts.map +1 -1
- package/dist/server/src/validation/transfer/token.d.ts +23 -4
- package/dist/server/src/validation/transfer/token.d.ts.map +1 -1
- package/dist/server/src/validation/user.d.ts +56 -8
- package/dist/server/src/validation/user.d.ts.map +1 -1
- package/package.json +19 -12
- package/dist/_chunks/ApplicationInfoPage-PHLA1Ysy.js.map +0 -1
- package/dist/_chunks/ApplicationInfoPage-Zn5JU2zd.mjs.map +0 -1
- package/dist/_chunks/AuthenticatedLayout-5r4rzKeb.js.map +0 -1
- package/dist/_chunks/AuthenticatedLayout-a7KNOdln.mjs.map +0 -1
- package/dist/_chunks/ComponentConfigurationPage-R3qV_iCR.js.map +0 -1
- package/dist/_chunks/ComponentConfigurationPage-pb8HhFAg.mjs.map +0 -1
- package/dist/_chunks/CreatePage-Bil0egZ1.mjs.map +0 -1
- package/dist/_chunks/CreatePage-NSKUL8l4.js.map +0 -1
- package/dist/_chunks/CreatePage-h5L6QP47.mjs.map +0 -1
- package/dist/_chunks/CreatePage-nl6zKkKT.js.map +0 -1
- package/dist/_chunks/EditConfigurationPage-OpEZOvAG.js.map +0 -1
- package/dist/_chunks/EditConfigurationPage-y_TvxjZM.mjs.map +0 -1
- package/dist/_chunks/EditPage-9aK8IFXY.js.map +0 -1
- package/dist/_chunks/EditPage-A6olBfVm.js.map +0 -1
- package/dist/_chunks/EditPage-PpBP7TBo.js.map +0 -1
- package/dist/_chunks/EditPage-VoRR5DCQ.mjs.map +0 -1
- package/dist/_chunks/EditPage-_swY0Hy-.mjs.map +0 -1
- package/dist/_chunks/EditPage-fDVAYmuS.mjs.map +0 -1
- package/dist/_chunks/EditView-C_ynfmtW.js.map +0 -1
- package/dist/_chunks/EditView-EuUw_2zc.mjs.map +0 -1
- package/dist/_chunks/EditViewPage-8uPO5GWR.mjs.map +0 -1
- package/dist/_chunks/EditViewPage-XtJmgPi5.js.map +0 -1
- package/dist/_chunks/EditViewPage-Z_e1dpbU.js.map +0 -1
- package/dist/_chunks/EditViewPage-xYzUSAwS.mjs.map +0 -1
- package/dist/_chunks/Form-EiK_H9BI.js.map +0 -1
- package/dist/_chunks/Form-sZKjSFQC.mjs.map +0 -1
- package/dist/_chunks/HomePage-C6Ivli1q.mjs.map +0 -1
- package/dist/_chunks/HomePage-yrIp1-eG.js.map +0 -1
- package/dist/_chunks/InputRenderer-RMnWnPI4.js.map +0 -1
- package/dist/_chunks/InputRenderer-iP1kRki4.mjs.map +0 -1
- package/dist/_chunks/InstalledPluginsPage-7m_FfOGl.mjs.map +0 -1
- package/dist/_chunks/InstalledPluginsPage-PrMyistN.js.map +0 -1
- package/dist/_chunks/Layout-9Li8e-qi.js.map +0 -1
- package/dist/_chunks/Layout-EDS3Yv8X.mjs.map +0 -1
- package/dist/_chunks/ListConfigurationPage-7O7HiJjG.mjs.map +0 -1
- package/dist/_chunks/ListConfigurationPage-Gl8AA-2t.js.map +0 -1
- package/dist/_chunks/ListPage-1q5Fi4W9.mjs.map +0 -1
- package/dist/_chunks/ListPage-DZBRIMkE.mjs.map +0 -1
- package/dist/_chunks/ListPage-God7L19W.mjs.map +0 -1
- package/dist/_chunks/ListPage-Ky2tG2bd.mjs.map +0 -1
- package/dist/_chunks/ListPage-NdzVJ_Ed.js.map +0 -1
- package/dist/_chunks/ListPage-RlY1nro4.mjs.map +0 -1
- package/dist/_chunks/ListPage-_i7RNkUF.js.map +0 -1
- package/dist/_chunks/ListPage-aElBcYPH.js.map +0 -1
- package/dist/_chunks/ListPage-em8KMoKx.js.map +0 -1
- package/dist/_chunks/ListPage-skKuhRrN.js.map +0 -1
- package/dist/_chunks/ListView--mxDKrnG.js.map +0 -1
- package/dist/_chunks/ListView-QEgFV6dm.mjs.map +0 -1
- package/dist/_chunks/ListView-hm-mjZ8N.mjs.map +0 -1
- package/dist/_chunks/ListView-vP-PjR4p.js.map +0 -1
- package/dist/_chunks/ListViewPage-NiwpwxBR.js.map +0 -1
- package/dist/_chunks/ListViewPage-xOVa04T_.mjs.map +0 -1
- package/dist/_chunks/MarketplacePage-f0ZrC_p8.mjs.map +0 -1
- package/dist/_chunks/MarketplacePage-zSQ_GRnZ.js.map +0 -1
- package/dist/_chunks/Permissions--rdF1ZKQ.js.map +0 -1
- package/dist/_chunks/Permissions-Ke5fqSQ2.mjs.map +0 -1
- package/dist/_chunks/ProfilePage-EEcNKnGH.js.map +0 -1
- package/dist/_chunks/ProfilePage-bE7txhNu.mjs.map +0 -1
- package/dist/_chunks/SelectRoles-Iih1yeTu.mjs.map +0 -1
- package/dist/_chunks/SelectRoles-XK5HcBdP.js.map +0 -1
- package/dist/_chunks/SingleSignOnPage-uURRsIxP.js.map +0 -1
- package/dist/_chunks/SingleSignOnPage-vOeDxBfa.mjs.map +0 -1
- package/dist/_chunks/TokenTypeSelect-QN_bDdss.js.map +0 -1
- package/dist/_chunks/TokenTypeSelect-Z9iyoteG.mjs.map +0 -1
- package/dist/_chunks/UseCasePage-qJwKBweD.mjs.map +0 -1
- package/dist/_chunks/UseCasePage-xAlTWOcX.js.map +0 -1
- package/dist/_chunks/index-5ZvCaCyY.mjs.map +0 -1
- package/dist/_chunks/index-ibtz273H.js.map +0 -1
- package/dist/_chunks/useContentTypes-dRoMxL8c.js.map +0 -1
- package/dist/_chunks/useContentTypes-x6OLbsWe.mjs.map +0 -1
- package/dist/_chunks/useLicenseLimitNotification-BaSsY40x.js.map +0 -1
- package/dist/_chunks/useLicenseLimitNotification-wzvrsJoL.mjs.map +0 -1
- package/dist/_chunks/validateWorkflow-1g4fl4e7.js.map +0 -1
- package/dist/_chunks/validateWorkflow-DlwU9a4N.mjs.map +0 -1
- package/dist/admin/src/features/AppInfo.d.ts +0 -22
- package/dist/admin/src/features/Notifications.d.ts +0 -47
- package/dist/admin/src/utils/getYupInnerErrors.d.ts +0 -7
|
@@ -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-RpzlPkkU.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-R_AHW6Z4.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventsTable-
|
|
1
|
+
{"version":3,"file":"EventsTable-R_AHW6Z4.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;;"}
|
|
@@ -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-ejSDPT-T.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-1WDWx0cR.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldTypeIcon-
|
|
1
|
+
{"version":3,"file":"FieldTypeIcon-1WDWx0cR.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,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 { e as useStrapiApp } from "./index-hjUhNUvw.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-rAK1gg9p.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldTypeIcon-
|
|
1
|
+
{"version":3,"file":"FieldTypeIcon-rAK1gg9p.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;"}
|
|
@@ -5,7 +5,7 @@ const designSystem = require("@strapi/design-system");
|
|
|
5
5
|
const helperPlugin = require("@strapi/helper-plugin");
|
|
6
6
|
const Icons = require("@strapi/icons");
|
|
7
7
|
const reactIntl = require("react-intl");
|
|
8
|
-
const index = require("./index-
|
|
8
|
+
const index = require("./index-ejSDPT-T.js");
|
|
9
9
|
function _interopNamespace(e) {
|
|
10
10
|
if (e && e.__esModule)
|
|
11
11
|
return e;
|
|
@@ -502,4 +502,4 @@ const Filters = {
|
|
|
502
502
|
Trigger
|
|
503
503
|
};
|
|
504
504
|
exports.Filters = Filters;
|
|
505
|
-
//# sourceMappingURL=Filters-
|
|
505
|
+
//# sourceMappingURL=Filters-f6ghLf0Z.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Filters-xVuf1kg6.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 { useQueryParams } from '@strapi/helper-plugin';\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';\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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"}
|
|
1
|
+
{"version":3,"file":"Filters-f6ghLf0Z.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 { useQueryParams } from '@strapi/helper-plugin';\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';\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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"}
|
|
@@ -4,7 +4,7 @@ import { useComposedRefs, Button, PopoverPrimitives, Flex, Tag } from "@strapi/d
|
|
|
4
4
|
import { useQueryParams } from "@strapi/helper-plugin";
|
|
5
5
|
import { Filter, Plus, Cross } from "@strapi/icons";
|
|
6
6
|
import { useIntl } from "react-intl";
|
|
7
|
-
import {
|
|
7
|
+
import { A as createContext, B as useControllableState, F as Form, I as InputRenderer } from "./index-hjUhNUvw.mjs";
|
|
8
8
|
const BASE_FILTERS = [
|
|
9
9
|
{
|
|
10
10
|
label: { id: "components.FilterOptions.FILTER_TYPES.$eq", defaultMessage: "is" },
|
|
@@ -484,4 +484,4 @@ const Filters = {
|
|
|
484
484
|
export {
|
|
485
485
|
Filters as F
|
|
486
486
|
};
|
|
487
|
-
//# sourceMappingURL=Filters-
|
|
487
|
+
//# sourceMappingURL=Filters-rPaxqj4F.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Filters-tMd2Q5jg.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 { useQueryParams } from '@strapi/helper-plugin';\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';\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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"}
|
|
1
|
+
{"version":3,"file":"Filters-rPaxqj4F.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 { useQueryParams } from '@strapi/helper-plugin';\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';\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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"}
|
|
@@ -4,15 +4,16 @@ import { ModalLayout, ModalHeader, Flex, Typography, ModalBody, Grid, GridItem,
|
|
|
4
4
|
import { generateNKeysBetween as generateNKeysBetween$1 } from "fractional-indexing";
|
|
5
5
|
import pipe from "lodash/fp/pipe";
|
|
6
6
|
import { useIntl } from "react-intl";
|
|
7
|
-
import {
|
|
7
|
+
import { z as useField, aX as useGetInitialDataQuery, a$ as ATTRIBUTE_TYPES_THAT_CANNOT_BE_MAIN_FIELD, F as Form, aT as capitalise, am as getTranslation, I as InputRenderer, ay as useForm, ad as useDragAndDrop, at as ItemTypes, Y as BackButton } from "./index-hjUhNUvw.mjs";
|
|
8
8
|
import { Menu, Link } from "@strapi/design-system/v2";
|
|
9
9
|
import { Plus, Drag, Pencil, Cross, Cog } from "@strapi/icons";
|
|
10
10
|
import { getEmptyImage } from "react-dnd-html5-backend";
|
|
11
11
|
import { NavLink } from "react-router-dom";
|
|
12
12
|
import styled from "styled-components";
|
|
13
13
|
import { C as ComponentIcon } from "./ComponentIcon-J3aEhVgQ.mjs";
|
|
14
|
+
import { useNotification } from "@strapi/helper-plugin";
|
|
14
15
|
import * as yup from "yup";
|
|
15
|
-
import { F as FieldTypeIcon } from "./FieldTypeIcon-
|
|
16
|
+
import { F as FieldTypeIcon } from "./FieldTypeIcon-rAK1gg9p.mjs";
|
|
16
17
|
const FIELD_SCHEMA = yup.object().shape({
|
|
17
18
|
label: yup.string().required(),
|
|
18
19
|
description: yup.string(),
|
|
@@ -22,7 +23,7 @@ const FIELD_SCHEMA = yup.object().shape({
|
|
|
22
23
|
const EditFieldForm = ({ attribute, name, onClose }) => {
|
|
23
24
|
const { formatMessage } = useIntl();
|
|
24
25
|
const id = React.useId();
|
|
25
|
-
const
|
|
26
|
+
const toggleNotification = useNotification();
|
|
26
27
|
const { value, onChange } = useField(name);
|
|
27
28
|
const { data: mainFieldOptions } = useGetInitialDataQuery(void 0, {
|
|
28
29
|
selectFromResult: (res) => {
|
|
@@ -60,7 +61,7 @@ const EditFieldForm = ({ attribute, name, onClose }) => {
|
|
|
60
61
|
id: "content-manager.containers.edit-settings.modal-form.error",
|
|
61
62
|
defaultMessage: "An error occurred while trying to open the form."
|
|
62
63
|
}),
|
|
63
|
-
type: "
|
|
64
|
+
type: "warning"
|
|
64
65
|
});
|
|
65
66
|
return null;
|
|
66
67
|
}
|
|
@@ -733,4 +734,4 @@ export {
|
|
|
733
734
|
ConfigurationForm as C,
|
|
734
735
|
TEMP_FIELD_NAME as T
|
|
735
736
|
};
|
|
736
|
-
//# sourceMappingURL=Form-
|
|
737
|
+
//# sourceMappingURL=Form-QOZA9Aq6.mjs.map
|