@strapi/admin 4.16.2 → 4.18.0
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/index.d.ts +1 -1
- package/index.js +1 -1
- package/package.json +55 -41
- package/strapi-server.js +3 -3
- package/dist/_chunks/AuthenticatedApp-342bf22f.js +0 -1476
- package/dist/_chunks/AuthenticatedApp-342bf22f.js.map +0 -1
- package/dist/_chunks/AuthenticatedApp-bb31f306.mjs +0 -1450
- package/dist/_chunks/AuthenticatedApp-bb31f306.mjs.map +0 -1
- package/dist/_chunks/DragLayer-bff96835.mjs +0 -44
- package/dist/_chunks/DragLayer-bff96835.mjs.map +0 -1
- package/dist/_chunks/DragLayer-f07eee6c.js +0 -43
- package/dist/_chunks/DragLayer-f07eee6c.js.map +0 -1
- package/dist/_chunks/HomePage-0c7717c0.mjs +0 -49
- package/dist/_chunks/HomePage-0c7717c0.mjs.map +0 -1
- package/dist/_chunks/HomePage-175f79c7.js +0 -49
- package/dist/_chunks/HomePage-175f79c7.js.map +0 -1
- package/dist/_chunks/HomePage-246cc590.mjs +0 -542
- package/dist/_chunks/HomePage-246cc590.mjs.map +0 -1
- package/dist/_chunks/HomePage-6ff9e578.js +0 -563
- package/dist/_chunks/HomePage-6ff9e578.js.map +0 -1
- package/dist/_chunks/InstalledPluginsPage-170aff77.mjs +0 -134
- package/dist/_chunks/InstalledPluginsPage-170aff77.mjs.map +0 -1
- package/dist/_chunks/InstalledPluginsPage-3ae5dbb6.js +0 -153
- package/dist/_chunks/InstalledPluginsPage-3ae5dbb6.js.map +0 -1
- package/dist/_chunks/InternalErrorPage-040dc993.mjs +0 -41
- package/dist/_chunks/InternalErrorPage-040dc993.mjs.map +0 -1
- package/dist/_chunks/InternalErrorPage-d0e51ac2.js +0 -41
- package/dist/_chunks/InternalErrorPage-d0e51ac2.js.map +0 -1
- package/dist/_chunks/Layout-4b3e434a.js +0 -92
- package/dist/_chunks/Layout-4b3e434a.js.map +0 -1
- package/dist/_chunks/Layout-72fa2ace.mjs +0 -90
- package/dist/_chunks/Layout-72fa2ace.mjs.map +0 -1
- package/dist/_chunks/LimitsModal-203482b8.js +0 -84
- package/dist/_chunks/LimitsModal-203482b8.js.map +0 -1
- package/dist/_chunks/LimitsModal-da04700e.mjs +0 -82
- package/dist/_chunks/LimitsModal-da04700e.mjs.map +0 -1
- package/dist/_chunks/Login-576bbc11.js +0 -64
- package/dist/_chunks/Login-576bbc11.js.map +0 -1
- package/dist/_chunks/Login-d627bb0a.mjs +0 -62
- package/dist/_chunks/Login-d627bb0a.mjs.map +0 -1
- package/dist/_chunks/MarketplacePage-1cbfa8fd.mjs +0 -1011
- package/dist/_chunks/MarketplacePage-1cbfa8fd.mjs.map +0 -1
- package/dist/_chunks/MarketplacePage-e7cd973b.js +0 -1035
- package/dist/_chunks/MarketplacePage-e7cd973b.js.map +0 -1
- package/dist/_chunks/ProfilePage-52844daa.js +0 -665
- package/dist/_chunks/ProfilePage-52844daa.js.map +0 -1
- package/dist/_chunks/ProfilePage-ef400907.mjs +0 -642
- package/dist/_chunks/ProfilePage-ef400907.mjs.map +0 -1
- package/dist/_chunks/SSOProviders-62bfad92.mjs +0 -58
- package/dist/_chunks/SSOProviders-62bfad92.mjs.map +0 -1
- package/dist/_chunks/SSOProviders-b395a4e6.js +0 -59
- package/dist/_chunks/SSOProviders-b395a4e6.js.map +0 -1
- package/dist/_chunks/SalesPage-4a0a68fb.js +0 -51
- package/dist/_chunks/SalesPage-4a0a68fb.js.map +0 -1
- package/dist/_chunks/SalesPage-56bf9463.mjs +0 -48
- package/dist/_chunks/SalesPage-56bf9463.mjs.map +0 -1
- package/dist/_chunks/SalesPage-66f9ea32.js +0 -51
- package/dist/_chunks/SalesPage-66f9ea32.js.map +0 -1
- package/dist/_chunks/SalesPage-d0cdc1a7.js +0 -48
- package/dist/_chunks/SalesPage-d0cdc1a7.js.map +0 -1
- package/dist/_chunks/SalesPage-f9597ae7.mjs +0 -51
- package/dist/_chunks/SalesPage-f9597ae7.mjs.map +0 -1
- package/dist/_chunks/SalesPage-fceedf48.mjs +0 -51
- package/dist/_chunks/SalesPage-fceedf48.mjs.map +0 -1
- package/dist/_chunks/ar-21279f4c.js +0 -936
- package/dist/_chunks/ar-21279f4c.js.map +0 -1
- package/dist/_chunks/ar-62e5e2b3.mjs +0 -936
- package/dist/_chunks/ar-62e5e2b3.mjs.map +0 -1
- package/dist/_chunks/build-1026ce7c.mjs +0 -68
- package/dist/_chunks/build-1026ce7c.mjs.map +0 -1
- package/dist/_chunks/build-d99bcc06.js +0 -68
- package/dist/_chunks/build-d99bcc06.js.map +0 -1
- package/dist/_chunks/ca-d05fb350.js +0 -724
- package/dist/_chunks/ca-d05fb350.js.map +0 -1
- package/dist/_chunks/ca-e99de225.mjs +0 -724
- package/dist/_chunks/ca-e99de225.mjs.map +0 -1
- package/dist/_chunks/colors-c24a54f0.js +0 -33
- package/dist/_chunks/colors-c24a54f0.js.map +0 -1
- package/dist/_chunks/colors-e7489dd4.mjs +0 -34
- package/dist/_chunks/colors-e7489dd4.mjs.map +0 -1
- package/dist/_chunks/constants-2a8f4e41.mjs +0 -11
- package/dist/_chunks/constants-2a8f4e41.mjs.map +0 -1
- package/dist/_chunks/constants-40ffa931.js +0 -11
- package/dist/_chunks/constants-40ffa931.js.map +0 -1
- package/dist/_chunks/constants-4aca55b6.js +0 -85
- package/dist/_chunks/constants-4aca55b6.js.map +0 -1
- package/dist/_chunks/constants-64899732.js +0 -30
- package/dist/_chunks/constants-64899732.js.map +0 -1
- package/dist/_chunks/constants-6c68e9a0.js +0 -229
- package/dist/_chunks/constants-6c68e9a0.js.map +0 -1
- package/dist/_chunks/constants-6ecddc43.mjs +0 -111
- package/dist/_chunks/constants-6ecddc43.mjs.map +0 -1
- package/dist/_chunks/constants-74b8a935.mjs +0 -52
- package/dist/_chunks/constants-74b8a935.mjs.map +0 -1
- package/dist/_chunks/constants-7596f6f3.js +0 -132
- package/dist/_chunks/constants-7596f6f3.js.map +0 -1
- package/dist/_chunks/constants-8092eeb5.mjs +0 -59
- package/dist/_chunks/constants-8092eeb5.mjs.map +0 -1
- package/dist/_chunks/constants-85da8cc4.js +0 -58
- package/dist/_chunks/constants-85da8cc4.js.map +0 -1
- package/dist/_chunks/constants-a6fd64fc.mjs +0 -80
- package/dist/_chunks/constants-a6fd64fc.mjs.map +0 -1
- package/dist/_chunks/constants-a92ce583.mjs +0 -7
- package/dist/_chunks/constants-a92ce583.mjs.map +0 -1
- package/dist/_chunks/constants-ae0b83df.mjs +0 -227
- package/dist/_chunks/constants-ae0b83df.mjs.map +0 -1
- package/dist/_chunks/constants-c1f1f698.mjs +0 -85
- package/dist/_chunks/constants-c1f1f698.mjs.map +0 -1
- package/dist/_chunks/constants-d3dd8ed6.mjs +0 -7
- package/dist/_chunks/constants-d3dd8ed6.mjs.map +0 -1
- package/dist/_chunks/constants-d5d67ca8.js +0 -6
- package/dist/_chunks/constants-d5d67ca8.js.map +0 -1
- package/dist/_chunks/constants-da2542a3.js +0 -6
- package/dist/_chunks/constants-da2542a3.js.map +0 -1
- package/dist/_chunks/constants-ddd2d586.js +0 -82
- package/dist/_chunks/constants-ddd2d586.js.map +0 -1
- package/dist/_chunks/constants-def33545.mjs +0 -30
- package/dist/_chunks/constants-def33545.mjs.map +0 -1
- package/dist/_chunks/constants-e05f06d4.js +0 -52
- package/dist/_chunks/constants-e05f06d4.js.map +0 -1
- package/dist/_chunks/cs-2fa881a2.mjs +0 -291
- package/dist/_chunks/cs-2fa881a2.mjs.map +0 -1
- package/dist/_chunks/cs-eee75b10.js +0 -291
- package/dist/_chunks/cs-eee75b10.js.map +0 -1
- package/dist/_chunks/de-28f8bc28.mjs +0 -716
- package/dist/_chunks/de-28f8bc28.mjs.map +0 -1
- package/dist/_chunks/de-976cc986.js +0 -716
- package/dist/_chunks/de-976cc986.js.map +0 -1
- package/dist/_chunks/develop-72394876.mjs +0 -61
- package/dist/_chunks/develop-72394876.mjs.map +0 -1
- package/dist/_chunks/develop-da585b1e.js +0 -61
- package/dist/_chunks/develop-da585b1e.js.map +0 -1
- package/dist/_chunks/dk-0b759a56.mjs +0 -634
- package/dist/_chunks/dk-0b759a56.mjs.map +0 -1
- package/dist/_chunks/dk-6189917e.js +0 -634
- package/dist/_chunks/dk-6189917e.js.map +0 -1
- package/dist/_chunks/edit-29bdf5d6.js +0 -50
- package/dist/_chunks/edit-29bdf5d6.js.map +0 -1
- package/dist/_chunks/edit-923cefa0.mjs +0 -32
- package/dist/_chunks/edit-923cefa0.mjs.map +0 -1
- package/dist/_chunks/en-0e9e9327.js +0 -1022
- package/dist/_chunks/en-0e9e9327.js.map +0 -1
- package/dist/_chunks/en-e728accb.mjs +0 -1022
- package/dist/_chunks/en-e728accb.mjs.map +0 -1
- package/dist/_chunks/es-18b29db2.mjs +0 -796
- package/dist/_chunks/es-18b29db2.mjs.map +0 -1
- package/dist/_chunks/es-3ee0992a.js +0 -796
- package/dist/_chunks/es-3ee0992a.js.map +0 -1
- package/dist/_chunks/eu-8fd773c2.mjs +0 -832
- package/dist/_chunks/eu-8fd773c2.mjs.map +0 -1
- package/dist/_chunks/eu-be749f31.js +0 -832
- package/dist/_chunks/eu-be749f31.js.map +0 -1
- package/dist/_chunks/formatAPIErrors-b599cf27.js +0 -20
- package/dist/_chunks/formatAPIErrors-b599cf27.js.map +0 -1
- package/dist/_chunks/formatAPIErrors-db6ed675.mjs +0 -21
- package/dist/_chunks/formatAPIErrors-db6ed675.mjs.map +0 -1
- package/dist/_chunks/fr-29c84e1f.js +0 -762
- package/dist/_chunks/fr-29c84e1f.js.map +0 -1
- package/dist/_chunks/fr-f37df086.mjs +0 -762
- package/dist/_chunks/fr-f37df086.mjs.map +0 -1
- package/dist/_chunks/gu-377a4b46.js +0 -623
- package/dist/_chunks/gu-377a4b46.js.map +0 -1
- package/dist/_chunks/gu-69f0e13a.mjs +0 -623
- package/dist/_chunks/gu-69f0e13a.mjs.map +0 -1
- package/dist/_chunks/he-aec27352.js +0 -326
- package/dist/_chunks/he-aec27352.js.map +0 -1
- package/dist/_chunks/he-bd769d7e.mjs +0 -326
- package/dist/_chunks/he-bd769d7e.mjs.map +0 -1
- package/dist/_chunks/hi-1bdc7a46.js +0 -722
- package/dist/_chunks/hi-1bdc7a46.js.map +0 -1
- package/dist/_chunks/hi-d397a24b.mjs +0 -722
- package/dist/_chunks/hi-d397a24b.mjs.map +0 -1
- package/dist/_chunks/hu-e2c05f40.js +0 -832
- package/dist/_chunks/hu-e2c05f40.js.map +0 -1
- package/dist/_chunks/hu-eb88bd0c.mjs +0 -832
- package/dist/_chunks/hu-eb88bd0c.mjs.map +0 -1
- package/dist/_chunks/id-586df3a2.js +0 -448
- package/dist/_chunks/id-586df3a2.js.map +0 -1
- package/dist/_chunks/id-f47699e6.mjs +0 -448
- package/dist/_chunks/id-f47699e6.mjs.map +0 -1
- package/dist/_chunks/index-10a05917.mjs +0 -51
- package/dist/_chunks/index-10a05917.mjs.map +0 -1
- package/dist/_chunks/index-115d317b.mjs +0 -244
- package/dist/_chunks/index-115d317b.mjs.map +0 -1
- package/dist/_chunks/index-171715e4.js +0 -697
- package/dist/_chunks/index-171715e4.js.map +0 -1
- package/dist/_chunks/index-176cc121.mjs +0 -469
- package/dist/_chunks/index-176cc121.mjs.map +0 -1
- package/dist/_chunks/index-1bac5263.js +0 -338
- package/dist/_chunks/index-1bac5263.js.map +0 -1
- package/dist/_chunks/index-200c5a6a.js +0 -51
- package/dist/_chunks/index-200c5a6a.js.map +0 -1
- package/dist/_chunks/index-215b5421.mjs +0 -51
- package/dist/_chunks/index-215b5421.mjs.map +0 -1
- package/dist/_chunks/index-23401c29.js +0 -418
- package/dist/_chunks/index-23401c29.js.map +0 -1
- package/dist/_chunks/index-242c859c.js +0 -335
- package/dist/_chunks/index-242c859c.js.map +0 -1
- package/dist/_chunks/index-26fcb3ca.mjs +0 -1432
- package/dist/_chunks/index-26fcb3ca.mjs.map +0 -1
- package/dist/_chunks/index-28dd9303.mjs +0 -51
- package/dist/_chunks/index-28dd9303.mjs.map +0 -1
- package/dist/_chunks/index-296c14bf.mjs +0 -362
- package/dist/_chunks/index-296c14bf.mjs.map +0 -1
- package/dist/_chunks/index-2de06c32.js +0 -51
- package/dist/_chunks/index-2de06c32.js.map +0 -1
- package/dist/_chunks/index-2eb69b5d.mjs +0 -399
- package/dist/_chunks/index-2eb69b5d.mjs.map +0 -1
- package/dist/_chunks/index-2f61e3ae.js +0 -585
- package/dist/_chunks/index-2f61e3ae.js.map +0 -1
- package/dist/_chunks/index-308b73ba.mjs +0 -60
- package/dist/_chunks/index-308b73ba.mjs.map +0 -1
- package/dist/_chunks/index-34e41e15.js +0 -134
- package/dist/_chunks/index-34e41e15.js.map +0 -1
- package/dist/_chunks/index-38115cde.js +0 -66
- package/dist/_chunks/index-38115cde.js.map +0 -1
- package/dist/_chunks/index-383efae4.mjs +0 -55
- package/dist/_chunks/index-383efae4.mjs.map +0 -1
- package/dist/_chunks/index-3b426575.js +0 -47
- package/dist/_chunks/index-3b426575.js.map +0 -1
- package/dist/_chunks/index-47af1603.js +0 -253
- package/dist/_chunks/index-47af1603.js.map +0 -1
- package/dist/_chunks/index-49b7e6ff.mjs +0 -1266
- package/dist/_chunks/index-49b7e6ff.mjs.map +0 -1
- package/dist/_chunks/index-4d9b2cb9.js +0 -47
- package/dist/_chunks/index-4d9b2cb9.js.map +0 -1
- package/dist/_chunks/index-4de70b5d.js +0 -3404
- package/dist/_chunks/index-4de70b5d.js.map +0 -1
- package/dist/_chunks/index-59b1f604.js +0 -380
- package/dist/_chunks/index-59b1f604.js.map +0 -1
- package/dist/_chunks/index-5a5217e0.mjs +0 -308
- package/dist/_chunks/index-5a5217e0.mjs.map +0 -1
- package/dist/_chunks/index-5da07c41.js +0 -418
- package/dist/_chunks/index-5da07c41.js.map +0 -1
- package/dist/_chunks/index-600cb5dd.js +0 -51
- package/dist/_chunks/index-600cb5dd.js.map +0 -1
- package/dist/_chunks/index-608d8d10.mjs +0 -393
- package/dist/_chunks/index-608d8d10.mjs.map +0 -1
- package/dist/_chunks/index-74812118.mjs +0 -53
- package/dist/_chunks/index-74812118.mjs.map +0 -1
- package/dist/_chunks/index-7d578921.js +0 -847
- package/dist/_chunks/index-7d578921.js.map +0 -1
- package/dist/_chunks/index-8109fa91.mjs +0 -676
- package/dist/_chunks/index-8109fa91.mjs.map +0 -1
- package/dist/_chunks/index-82c7a120.js +0 -15401
- package/dist/_chunks/index-82c7a120.js.map +0 -1
- package/dist/_chunks/index-83d53962.js +0 -62
- package/dist/_chunks/index-83d53962.js.map +0 -1
- package/dist/_chunks/index-88298941.js +0 -54
- package/dist/_chunks/index-88298941.js.map +0 -1
- package/dist/_chunks/index-8933483b.mjs +0 -3374
- package/dist/_chunks/index-8933483b.mjs.map +0 -1
- package/dist/_chunks/index-91df57b1.mjs +0 -826
- package/dist/_chunks/index-91df57b1.mjs.map +0 -1
- package/dist/_chunks/index-973c363e.mjs +0 -63
- package/dist/_chunks/index-973c363e.mjs.map +0 -1
- package/dist/_chunks/index-989bbeec.mjs +0 -232
- package/dist/_chunks/index-989bbeec.mjs.map +0 -1
- package/dist/_chunks/index-9910dda4.js +0 -55
- package/dist/_chunks/index-9910dda4.js.map +0 -1
- package/dist/_chunks/index-9afb163a.js +0 -418
- package/dist/_chunks/index-9afb163a.js.map +0 -1
- package/dist/_chunks/index-9f61bef8.js +0 -51
- package/dist/_chunks/index-9f61bef8.js.map +0 -1
- package/dist/_chunks/index-ab31623a.mjs +0 -273
- package/dist/_chunks/index-ab31623a.mjs.map +0 -1
- package/dist/_chunks/index-ac85118a.mjs +0 -47
- package/dist/_chunks/index-ac85118a.mjs.map +0 -1
- package/dist/_chunks/index-ad8e55c0.mjs +0 -866
- package/dist/_chunks/index-ad8e55c0.mjs.map +0 -1
- package/dist/_chunks/index-aedeaf5a.js +0 -311
- package/dist/_chunks/index-aedeaf5a.js.map +0 -1
- package/dist/_chunks/index-bbac142a.js +0 -125
- package/dist/_chunks/index-bbac142a.js.map +0 -1
- package/dist/_chunks/index-bd18f803.mjs +0 -15320
- package/dist/_chunks/index-bd18f803.mjs.map +0 -1
- package/dist/_chunks/index-c8b8a2ee.mjs +0 -359
- package/dist/_chunks/index-c8b8a2ee.mjs.map +0 -1
- package/dist/_chunks/index-c97f5820.js +0 -1456
- package/dist/_chunks/index-c97f5820.js.map +0 -1
- package/dist/_chunks/index-cb6a72d2.mjs +0 -127
- package/dist/_chunks/index-cb6a72d2.mjs.map +0 -1
- package/dist/_chunks/index-cbc7c054.js +0 -266
- package/dist/_chunks/index-cbc7c054.js.map +0 -1
- package/dist/_chunks/index-ce5995cd.mjs +0 -132
- package/dist/_chunks/index-ce5995cd.mjs.map +0 -1
- package/dist/_chunks/index-d1152896.js +0 -294
- package/dist/_chunks/index-d1152896.js.map +0 -1
- package/dist/_chunks/index-d1dd825b.js +0 -365
- package/dist/_chunks/index-d1dd825b.js.map +0 -1
- package/dist/_chunks/index-d2d9df41.mjs +0 -270
- package/dist/_chunks/index-d2d9df41.mjs.map +0 -1
- package/dist/_chunks/index-d3e1fd86.js +0 -490
- package/dist/_chunks/index-d3e1fd86.js.map +0 -1
- package/dist/_chunks/index-d4517ac4.mjs +0 -582
- package/dist/_chunks/index-d4517ac4.mjs.map +0 -1
- package/dist/_chunks/index-d49fa655.js +0 -873
- package/dist/_chunks/index-d49fa655.js.map +0 -1
- package/dist/_chunks/index-d6694cab.mjs +0 -125
- package/dist/_chunks/index-d6694cab.mjs.map +0 -1
- package/dist/_chunks/index-e117c643.mjs +0 -55
- package/dist/_chunks/index-e117c643.mjs.map +0 -1
- package/dist/_chunks/index-e1b90981.mjs +0 -314
- package/dist/_chunks/index-e1b90981.mjs.map +0 -1
- package/dist/_chunks/index-e24df0bf.js +0 -403
- package/dist/_chunks/index-e24df0bf.js.map +0 -1
- package/dist/_chunks/index-e2d2f58e.mjs +0 -47
- package/dist/_chunks/index-e2d2f58e.mjs.map +0 -1
- package/dist/_chunks/index-e369d741.mjs +0 -383
- package/dist/_chunks/index-e369d741.mjs.map +0 -1
- package/dist/_chunks/index-e79b2b9e.mjs +0 -338
- package/dist/_chunks/index-e79b2b9e.mjs.map +0 -1
- package/dist/_chunks/index-ea18ff22.mjs +0 -51
- package/dist/_chunks/index-ea18ff22.mjs.map +0 -1
- package/dist/_chunks/index-eb67694f.mjs +0 -261
- package/dist/_chunks/index-eb67694f.mjs.map +0 -1
- package/dist/_chunks/index-ed3696ec.js +0 -272
- package/dist/_chunks/index-ed3696ec.js.map +0 -1
- package/dist/_chunks/index-ee1ea38b.js +0 -129
- package/dist/_chunks/index-ee1ea38b.js.map +0 -1
- package/dist/_chunks/index-efc967f5.js +0 -55
- package/dist/_chunks/index-efc967f5.js.map +0 -1
- package/dist/_chunks/index-fc700e52.js +0 -263
- package/dist/_chunks/index-fc700e52.js.map +0 -1
- package/dist/_chunks/index-fd4e5616.mjs +0 -412
- package/dist/_chunks/index-fd4e5616.mjs.map +0 -1
- package/dist/_chunks/index-ffd2f664.js +0 -1337
- package/dist/_chunks/index-ffd2f664.js.map +0 -1
- package/dist/_chunks/it-4006227c.mjs +0 -459
- package/dist/_chunks/it-4006227c.mjs.map +0 -1
- package/dist/_chunks/it-9c4295f1.js +0 -459
- package/dist/_chunks/it-9c4295f1.js.map +0 -1
- package/dist/_chunks/ja-db43ca3d.mjs +0 -633
- package/dist/_chunks/ja-db43ca3d.mjs.map +0 -1
- package/dist/_chunks/ja-eb74520f.js +0 -633
- package/dist/_chunks/ja-eb74520f.js.map +0 -1
- package/dist/_chunks/ko-18e71df4.js +0 -631
- package/dist/_chunks/ko-18e71df4.js.map +0 -1
- package/dist/_chunks/ko-a7826e25.mjs +0 -631
- package/dist/_chunks/ko-a7826e25.mjs.map +0 -1
- package/dist/_chunks/ml-90131768.mjs +0 -722
- package/dist/_chunks/ml-90131768.mjs.map +0 -1
- package/dist/_chunks/ml-c5199364.js +0 -722
- package/dist/_chunks/ml-c5199364.js.map +0 -1
- package/dist/_chunks/ms-bc514df6.js +0 -342
- package/dist/_chunks/ms-bc514df6.js.map +0 -1
- package/dist/_chunks/ms-f4f16a83.mjs +0 -342
- package/dist/_chunks/ms-f4f16a83.mjs.map +0 -1
- package/dist/_chunks/nl-887ce2c3.mjs +0 -828
- package/dist/_chunks/nl-887ce2c3.mjs.map +0 -1
- package/dist/_chunks/nl-f1aedbe2.js +0 -828
- package/dist/_chunks/nl-f1aedbe2.js.map +0 -1
- package/dist/_chunks/no-ec6c2927.js +0 -310
- package/dist/_chunks/no-ec6c2927.js.map +0 -1
- package/dist/_chunks/no-f0b02541.mjs +0 -310
- package/dist/_chunks/no-f0b02541.mjs.map +0 -1
- package/dist/_chunks/pl-9be86414.js +0 -721
- package/dist/_chunks/pl-9be86414.js.map +0 -1
- package/dist/_chunks/pl-9ccd35d9.mjs +0 -721
- package/dist/_chunks/pl-9ccd35d9.mjs.map +0 -1
- package/dist/_chunks/pt-4fcc08f1.js +0 -296
- package/dist/_chunks/pt-4fcc08f1.js.map +0 -1
- package/dist/_chunks/pt-8acb6ac1.mjs +0 -296
- package/dist/_chunks/pt-8acb6ac1.mjs.map +0 -1
- package/dist/_chunks/pt-BR-d43239e3.js +0 -794
- package/dist/_chunks/pt-BR-d43239e3.js.map +0 -1
- package/dist/_chunks/pt-BR-fd73cb13.mjs +0 -794
- package/dist/_chunks/pt-BR-fd73cb13.mjs.map +0 -1
- package/dist/_chunks/ru-9aad40c5.mjs +0 -993
- package/dist/_chunks/ru-9aad40c5.mjs.map +0 -1
- package/dist/_chunks/ru-c0293425.js +0 -993
- package/dist/_chunks/ru-c0293425.js.map +0 -1
- package/dist/_chunks/sa-6bf4c20e.mjs +0 -722
- package/dist/_chunks/sa-6bf4c20e.mjs.map +0 -1
- package/dist/_chunks/sa-8ffb7ca7.js +0 -722
- package/dist/_chunks/sa-8ffb7ca7.js.map +0 -1
- package/dist/_chunks/schema-260fec28.js +0 -514
- package/dist/_chunks/schema-260fec28.js.map +0 -1
- package/dist/_chunks/schema-6bd8bd85.mjs +0 -490
- package/dist/_chunks/schema-6bd8bd85.mjs.map +0 -1
- package/dist/_chunks/sk-58d31b17.mjs +0 -690
- package/dist/_chunks/sk-58d31b17.mjs.map +0 -1
- package/dist/_chunks/sk-a9308737.js +0 -690
- package/dist/_chunks/sk-a9308737.js.map +0 -1
- package/dist/_chunks/sv-0f5ffd1e.js +0 -827
- package/dist/_chunks/sv-0f5ffd1e.js.map +0 -1
- package/dist/_chunks/sv-d80ad633.mjs +0 -827
- package/dist/_chunks/sv-d80ad633.mjs.map +0 -1
- package/dist/_chunks/th-a53bbf7a.js +0 -430
- package/dist/_chunks/th-a53bbf7a.js.map +0 -1
- package/dist/_chunks/th-e72c6a22.mjs +0 -430
- package/dist/_chunks/th-e72c6a22.mjs.map +0 -1
- package/dist/_chunks/tr-b84a68b0.js +0 -785
- package/dist/_chunks/tr-b84a68b0.js.map +0 -1
- package/dist/_chunks/tr-e35ecfe8.mjs +0 -785
- package/dist/_chunks/tr-e35ecfe8.mjs.map +0 -1
- package/dist/_chunks/uk-de367ec1.mjs +0 -343
- package/dist/_chunks/uk-de367ec1.mjs.map +0 -1
- package/dist/_chunks/uk-e5226227.js +0 -343
- package/dist/_chunks/uk-e5226227.js.map +0 -1
- package/dist/_chunks/useAdminRolePermissions-603a2709.mjs +0 -2322
- package/dist/_chunks/useAdminRolePermissions-603a2709.mjs.map +0 -1
- package/dist/_chunks/useAdminRolePermissions-cb1a3ee2.js +0 -2337
- package/dist/_chunks/useAdminRolePermissions-cb1a3ee2.js.map +0 -1
- package/dist/_chunks/useAdminRoles-68d5d608.js +0 -62
- package/dist/_chunks/useAdminRoles-68d5d608.js.map +0 -1
- package/dist/_chunks/useAdminRoles-7ab5d521.mjs +0 -44
- package/dist/_chunks/useAdminRoles-7ab5d521.mjs.map +0 -1
- package/dist/_chunks/useAdminUsers-05d6b26a.js +0 -61
- package/dist/_chunks/useAdminUsers-05d6b26a.js.map +0 -1
- package/dist/_chunks/useAdminUsers-09f86a58.mjs +0 -43
- package/dist/_chunks/useAdminUsers-09f86a58.mjs.map +0 -1
- package/dist/_chunks/useContentTypes-53b449bb.mjs +0 -67
- package/dist/_chunks/useContentTypes-53b449bb.mjs.map +0 -1
- package/dist/_chunks/useContentTypes-7da293cc.js +0 -85
- package/dist/_chunks/useContentTypes-7da293cc.js.map +0 -1
- package/dist/_chunks/useDebounce-4712871e.js +0 -35
- package/dist/_chunks/useDebounce-4712871e.js.map +0 -1
- package/dist/_chunks/useDebounce-9364f340.mjs +0 -17
- package/dist/_chunks/useDebounce-9364f340.mjs.map +0 -1
- package/dist/_chunks/useLicenseLimitNotification-1fd756fa.mjs +0 -80
- package/dist/_chunks/useLicenseLimitNotification-1fd756fa.mjs.map +0 -1
- package/dist/_chunks/useLicenseLimitNotification-8a4d7fc1.js +0 -100
- package/dist/_chunks/useLicenseLimitNotification-8a4d7fc1.js.map +0 -1
- package/dist/_chunks/useLicenseLimits-13a102d3.mjs +0 -31
- package/dist/_chunks/useLicenseLimits-13a102d3.mjs.map +0 -1
- package/dist/_chunks/useLicenseLimits-81ef3cce.js +0 -49
- package/dist/_chunks/useLicenseLimits-81ef3cce.js.map +0 -1
- package/dist/_chunks/useReviewWorkflows-799e0305.js +0 -59
- package/dist/_chunks/useReviewWorkflows-799e0305.js.map +0 -1
- package/dist/_chunks/useReviewWorkflows-9e6b8986.mjs +0 -41
- package/dist/_chunks/useReviewWorkflows-9e6b8986.mjs.map +0 -1
- package/dist/_chunks/validateWorkflow-5693ea2d.js +0 -1124
- package/dist/_chunks/validateWorkflow-5693ea2d.js.map +0 -1
- package/dist/_chunks/validateWorkflow-7a2b6ab8.mjs +0 -1101
- package/dist/_chunks/validateWorkflow-7a2b6ab8.mjs.map +0 -1
- package/dist/_chunks/vi-096bccbb.mjs +0 -298
- package/dist/_chunks/vi-096bccbb.mjs.map +0 -1
- package/dist/_chunks/vi-c5fabb75.js +0 -298
- package/dist/_chunks/vi-c5fabb75.js.map +0 -1
- package/dist/_chunks/zh-24f618cb.js +0 -836
- package/dist/_chunks/zh-24f618cb.js.map +0 -1
- package/dist/_chunks/zh-Hans-35d2c374.js +0 -957
- package/dist/_chunks/zh-Hans-35d2c374.js.map +0 -1
- package/dist/_chunks/zh-Hans-ccf4be4b.mjs +0 -957
- package/dist/_chunks/zh-Hans-ccf4be4b.mjs.map +0 -1
- package/dist/_chunks/zh-ba29b2e1.mjs +0 -836
- package/dist/_chunks/zh-ba29b2e1.mjs.map +0 -1
- package/dist/admin/index.js +0 -34
- package/dist/admin/index.js.map +0 -1
- package/dist/admin/index.mjs +0 -34
- package/dist/admin/index.mjs.map +0 -1
- package/dist/admin/src/App.d.ts +0 -6
- package/dist/admin/src/StrapiApp.d.ts +0 -140
- package/dist/admin/src/components/AuthenticatedApp.d.ts +0 -2
- package/dist/admin/src/components/ConfigurationProvider.d.ts +0 -11
- package/dist/admin/src/components/DefaultDocument.d.ts +0 -5
- package/dist/admin/src/components/DragLayer.d.ts +0 -10
- package/dist/admin/src/components/GuidedTour/Homepage.d.ts +0 -2
- package/dist/admin/src/components/GuidedTour/Modal.d.ts +0 -2
- package/dist/admin/src/components/GuidedTour/Ornaments.d.ts +0 -13
- package/dist/admin/src/components/GuidedTour/Provider.d.ts +0 -6
- package/dist/admin/src/components/GuidedTour/constants.d.ts +0 -165
- package/dist/admin/src/components/LanguageProvider.d.ts +0 -19
- package/dist/admin/src/components/LeftMenu.d.ts +0 -5
- package/dist/admin/src/components/NoJavascript.d.ts +0 -7
- package/dist/admin/src/components/NpsSurvey.d.ts +0 -17
- package/dist/admin/src/components/Onboarding.d.ts +0 -2
- package/dist/admin/src/components/PluginsInitializer.d.ts +0 -5
- package/dist/admin/src/components/PrivateRoute.d.ts +0 -8
- package/dist/admin/src/components/Providers.d.ts +0 -13
- package/dist/admin/src/components/RBACProvider.d.ts +0 -27
- package/dist/admin/src/components/Theme.d.ts +0 -6
- package/dist/admin/src/components/ThemeToggleProvider.d.ts +0 -12
- package/dist/admin/src/components/UnauthenticatedLogo.d.ts +0 -2
- package/dist/admin/src/constants.d.ts +0 -195
- package/dist/admin/src/content-manager/components/BlocksInput/BlocksContent.d.ts +0 -5
- package/dist/admin/src/content-manager/components/BlocksInput/BlocksEditor.d.ts +0 -34
- package/dist/admin/src/content-manager/components/BlocksInput/BlocksInput.d.ts +0 -18
- package/dist/admin/src/content-manager/components/BlocksInput/BlocksToolbar.d.ts +0 -2
- package/dist/admin/src/content-manager/components/BlocksInput/hooks/useBlocksStore.d.ts +0 -32
- package/dist/admin/src/content-manager/components/BlocksInput/hooks/useModifiersStore.d.ts +0 -20
- package/dist/admin/src/content-manager/components/BlocksInput/plugins/withLinks.d.ts +0 -8
- package/dist/admin/src/content-manager/components/BlocksInput/plugins/withStrapiSchema.d.ts +0 -8
- package/dist/admin/src/content-manager/components/BlocksInput/tests/mock-schema.d.ts +0 -2
- package/dist/admin/src/content-manager/components/BlocksInput/utils/links.d.ts +0 -10
- package/dist/admin/src/content-manager/components/BlocksInput/utils/types.d.ts +0 -6
- package/dist/admin/src/contexts/admin.d.ts +0 -14
- package/dist/admin/src/contexts/apiTokenPermissions.d.ts +0 -36
- package/dist/admin/src/contexts/configuration.d.ts +0 -27
- package/dist/admin/src/contexts/themeToggle.d.ts +0 -22
- package/dist/admin/src/core/apis/Components.d.ts +0 -10
- package/dist/admin/src/core/apis/CustomFields.d.ts +0 -8
- package/dist/admin/src/core/apis/Fields.d.ts +0 -10
- package/dist/admin/src/core/apis/Middlewares.d.ts +0 -9
- package/dist/admin/src/core/apis/Plugin.d.ts +0 -19
- package/dist/admin/src/core/apis/Reducers.d.ts +0 -10
- package/dist/admin/src/core/store/configure.d.ts +0 -29
- package/dist/admin/src/core/store/hooks.d.ts +0 -37
- package/dist/admin/src/core/utils/basename.d.ts +0 -1
- package/dist/admin/src/core/utils/createHook.d.ts +0 -10
- package/dist/admin/src/hooks/__mocks__/useAdminUsers.d.ts +0 -2
- package/dist/admin/src/hooks/__mocks__/useContentTypes.d.ts +0 -2
- package/dist/admin/src/hooks/__mocks__/useSettingsMenu.d.ts +0 -2
- package/dist/admin/src/hooks/useAdminRoles.d.ts +0 -13
- package/dist/admin/src/hooks/useAdminUsers.d.ts +0 -19
- package/dist/admin/src/hooks/useContentTypes.d.ts +0 -7
- package/dist/admin/src/hooks/useDebounce.d.ts +0 -1
- package/dist/admin/src/hooks/useEnterprise.d.ts +0 -8
- package/dist/admin/src/hooks/useInjectReducer.d.ts +0 -10
- package/dist/admin/src/hooks/useLicenseLimitNotification.d.ts +0 -1
- package/dist/admin/src/hooks/useMenu.d.ts +0 -9
- package/dist/admin/src/hooks/useSettingsMenu.d.ts +0 -24
- package/dist/admin/src/index.d.ts +0 -3
- package/dist/admin/src/layouts/AppLayout.d.ts +0 -7
- package/dist/admin/src/layouts/UnauthenticatedLayout.d.ts +0 -11
- package/dist/admin/src/pages/Admin.d.ts +0 -7
- package/dist/admin/src/pages/Auth/AuthPage.d.ts +0 -6
- package/dist/admin/src/pages/Auth/components/FieldActionWrapper.d.ts +0 -3
- package/dist/admin/src/pages/Auth/components/ForgotPassword.d.ts +0 -3
- package/dist/admin/src/pages/Auth/components/ForgotPasswordSuccess.d.ts +0 -2
- package/dist/admin/src/pages/Auth/components/Login.d.ts +0 -8
- package/dist/admin/src/pages/Auth/components/Oops.d.ts +0 -2
- package/dist/admin/src/pages/Auth/components/Register.d.ts +0 -7
- package/dist/admin/src/pages/Auth/components/ResetPassword.d.ts +0 -3
- package/dist/admin/src/pages/Auth/constants.d.ts +0 -14
- package/dist/admin/src/pages/HomePage.d.ts +0 -3
- package/dist/admin/src/pages/InstalledPluginsPage.d.ts +0 -3
- package/dist/admin/src/pages/InternalErrorPage.d.ts +0 -7
- package/dist/admin/src/pages/Marketplace/MarketplacePage.d.ts +0 -19
- package/dist/admin/src/pages/Marketplace/components/NpmPackageCard.d.ts +0 -13
- package/dist/admin/src/pages/Marketplace/components/NpmPackagesFilters.d.ts +0 -13
- package/dist/admin/src/pages/Marketplace/components/NpmPackagesGrid.d.ts +0 -13
- package/dist/admin/src/pages/Marketplace/components/OfflineLayout.d.ts +0 -2
- package/dist/admin/src/pages/Marketplace/components/PageHeader.d.ts +0 -8
- package/dist/admin/src/pages/Marketplace/components/SortSelect.d.ts +0 -51
- package/dist/admin/src/pages/Marketplace/hooks/__mocks__/useNavigatorOnline.d.ts +0 -1
- package/dist/admin/src/pages/Marketplace/hooks/useMarketplaceData.d.ts +0 -92
- package/dist/admin/src/pages/Marketplace/hooks/useNavigatorOnline.d.ts +0 -5
- package/dist/admin/src/pages/NotFoundPage.d.ts +0 -1
- package/dist/admin/src/pages/ProfilePage.d.ts +0 -2
- package/dist/admin/src/pages/SettingsPage/hooks/useRegenerate.d.ts +0 -4
- package/dist/admin/src/pages/SettingsPage/pages/Roles/EditPage/hooks/usePermissionsDataManager.d.ts +0 -24
- package/dist/admin/src/pages/SettingsPage/pages/Roles/hooks/__mocks__/useAdminRolePermissions.d.ts +0 -2
- package/dist/admin/src/pages/SettingsPage/pages/Roles/hooks/useAdminRolePermissions.d.ts +0 -11
- package/dist/admin/src/pages/SettingsPage/utils/makeUniqueRoutes.d.ts +0 -6
- package/dist/admin/src/pages/UseCasePage.d.ts +0 -8
- package/dist/admin/src/reducer.d.ts +0 -21
- package/dist/admin/src/render.d.ts +0 -10
- package/dist/admin/src/selectors.d.ts +0 -21
- package/dist/admin/src/shared/components/InjectionZone.d.ts +0 -53
- package/dist/admin/src/shared/hooks/__mocks__/useInjectionZone.d.ts +0 -1
- package/dist/admin/src/shared/hooks/useInjectionZone.d.ts +0 -2
- package/dist/admin/src/translations/languageNativeNames.d.ts +0 -36
- package/dist/admin/src/types/permissions.d.ts +0 -17
- package/dist/admin/src/utils/createRoute.d.ts +0 -6
- package/dist/admin/src/utils/formatAPIErrors.d.ts +0 -6
- package/dist/admin/src/utils/getFullName.d.ts +0 -1
- package/dist/admin/src/utils/hashAdminUserEmail.d.ts +0 -6
- package/dist/cli.js +0 -48
- package/dist/cli.js.map +0 -1
- package/dist/cli.mjs +0 -48
- package/dist/cli.mjs.map +0 -1
- package/dist/ee/admin/src/constants.d.ts +0 -55
- package/dist/ee/admin/src/hooks/useLicenseLimitNotification.d.ts +0 -1
- package/dist/ee/admin/src/pages/AuthPage/components/Login.d.ts +0 -3
- package/dist/ee/admin/src/pages/AuthPage/components/Providers.d.ts +0 -2
- package/dist/ee/admin/src/pages/AuthPage/components/SSOProviders.d.ts +0 -8
- package/dist/ee/admin/src/pages/AuthPage/constants.d.ts +0 -3
- package/dist/ee/admin/src/pages/AuthResponse.d.ts +0 -2
- package/dist/ee/admin/src/pages/HomePage.d.ts +0 -1
- package/dist/shared/contracts/admin.d.ts +0 -23
- package/dist/shared/contracts/authentication.d.ts +0 -126
- package/dist/shared/contracts/providers.d.ts +0 -34
- package/dist/shared/contracts/roles.d.ts +0 -52
- package/dist/shared/contracts/shared.d.ts +0 -39
- package/dist/shared/contracts/user.d.ts +0 -40
- package/dist/shared/contracts/users.d.ts +0 -52
- package/dist/shared/schema.d.ts +0 -7
- package/ee/server/bootstrap.js +0 -41
- package/ee/server/config/admin-actions.js +0 -72
- package/ee/server/constants/default-stages.json +0 -18
- package/ee/server/constants/default-workflow.json +0 -3
- package/ee/server/constants/webhookEvents.js +0 -5
- package/ee/server/constants/workflows.js +0 -33
- package/ee/server/content-types/index.js +0 -9
- package/ee/server/content-types/workflow/index.js +0 -41
- package/ee/server/content-types/workflow-stage/index.js +0 -51
- package/ee/server/controllers/__tests__/stages.test.js +0 -174
- package/ee/server/controllers/admin.js +0 -50
- package/ee/server/controllers/audit-logs.js +0 -24
- package/ee/server/controllers/authentication/constants.js +0 -11
- package/ee/server/controllers/authentication/index.js +0 -11
- package/ee/server/controllers/authentication/middlewares.js +0 -117
- package/ee/server/controllers/authentication/utils.js +0 -23
- package/ee/server/controllers/authentication.js +0 -64
- package/ee/server/controllers/index.js +0 -12
- package/ee/server/controllers/role.js +0 -64
- package/ee/server/controllers/user.js +0 -110
- package/ee/server/controllers/workflows/assignees/index.js +0 -44
- package/ee/server/controllers/workflows/index.js +0 -188
- package/ee/server/controllers/workflows/stages/index.js +0 -189
- package/ee/server/destroy.js +0 -12
- package/ee/server/index.js +0 -11
- package/ee/server/middlewares/__tests__/review-workflows.test.js +0 -40
- package/ee/server/middlewares/review-workflows.js +0 -40
- package/ee/server/migrations/audit-logs-table.js +0 -45
- package/ee/server/migrations/review-workflows-content-types.js +0 -29
- package/ee/server/migrations/review-workflows-deleted-ct-in-workflows.js +0 -39
- package/ee/server/migrations/review-workflows-stage-attribute.js +0 -49
- package/ee/server/migrations/review-workflows-stages-color.js +0 -20
- package/ee/server/migrations/review-workflows-stages-roles.js +0 -68
- package/ee/server/migrations/review-workflows-workflow-name.js +0 -28
- package/ee/server/register.js +0 -40
- package/ee/server/routes/audit-logs.js +0 -43
- package/ee/server/routes/index.js +0 -8
- package/ee/server/routes/license-limit.js +0 -29
- package/ee/server/routes/review-workflows.js +0 -164
- package/ee/server/routes/sso.js +0 -69
- package/ee/server/routes/utils.js +0 -15
- package/ee/server/services/__tests__/assignees.test.js +0 -76
- package/ee/server/services/__tests__/audit-logs.test.js +0 -300
- package/ee/server/services/__tests__/passport.test.js +0 -95
- package/ee/server/services/__tests__/review-workflows-validation.test.js +0 -100
- package/ee/server/services/__tests__/review-workflows.test.js +0 -163
- package/ee/server/services/__tests__/sso.test.js +0 -117
- package/ee/server/services/__tests__/stages.test.js +0 -275
- package/ee/server/services/__tests__/workflows.test.js +0 -203
- package/ee/server/services/audit-logs.js +0 -236
- package/ee/server/services/auth.js +0 -75
- package/ee/server/services/index.js +0 -18
- package/ee/server/services/passport/provider-registry.js +0 -27
- package/ee/server/services/passport/sso.js +0 -37
- package/ee/server/services/passport.js +0 -46
- package/ee/server/services/review-workflows/__tests__/entity-service-decorator.test.js +0 -211
- package/ee/server/services/review-workflows/assignees.js +0 -54
- package/ee/server/services/review-workflows/entity-service-decorator.js +0 -101
- package/ee/server/services/review-workflows/metrics/__tests__/weekly-metrics.test.js +0 -65
- package/ee/server/services/review-workflows/metrics/index.js +0 -56
- package/ee/server/services/review-workflows/metrics/weekly-metrics.js +0 -76
- package/ee/server/services/review-workflows/review-workflows.js +0 -133
- package/ee/server/services/review-workflows/stage-permissions.js +0 -60
- package/ee/server/services/review-workflows/stages.js +0 -384
- package/ee/server/services/review-workflows/validation.js +0 -68
- package/ee/server/services/review-workflows/workflows/__tests__/content-types.test.js +0 -146
- package/ee/server/services/review-workflows/workflows/content-types.js +0 -89
- package/ee/server/services/review-workflows/workflows/index.js +0 -237
- package/ee/server/services/role.js +0 -24
- package/ee/server/services/seat-enforcement.js +0 -114
- package/ee/server/services/user.js +0 -234
- package/ee/server/utils/__tests__/persisted-tables.test.js +0 -38
- package/ee/server/utils/__tests__/sso-lock.test.js +0 -84
- package/ee/server/utils/index.js +0 -8
- package/ee/server/utils/persisted-tables.js +0 -139
- package/ee/server/utils/review-workflows.js +0 -39
- package/ee/server/utils/sso-lock.js +0 -42
- package/ee/server/validation/audit-logs.js +0 -18
- package/ee/server/validation/authentication.js +0 -36
- package/ee/server/validation/review-workflows.js +0 -92
- package/ee/server/validation/role.js +0 -68
- package/ee/server/validation/user.js +0 -27
- package/ee/strapi-server.js +0 -3
- package/server/bootstrap.js +0 -101
- package/server/config/admin-actions.js +0 -216
- package/server/config/admin-conditions.js +0 -26
- package/server/config/email-templates/forgot-password.js +0 -25
- package/server/config/index.js +0 -9
- package/server/config/settings.js +0 -9
- package/server/content-types/Permission.js +0 -64
- package/server/content-types/Role.js +0 -59
- package/server/content-types/User.js +0 -112
- package/server/content-types/api-token-permission.js +0 -36
- package/server/content-types/api-token.js +0 -76
- package/server/content-types/index.js +0 -11
- package/server/content-types/transfer-token-permission.js +0 -36
- package/server/content-types/transfer-token.js +0 -66
- package/server/controllers/__tests__/admin.test.js +0 -106
- package/server/controllers/__tests__/api-token.test.js +0 -496
- package/server/controllers/__tests__/content-api.test.js +0 -173
- package/server/controllers/__tests__/permission.test.js +0 -200
- package/server/controllers/__tests__/role.test.js +0 -201
- package/server/controllers/__tests__/transfer/token.test.js +0 -520
- package/server/controllers/__tests__/user.test.js +0 -326
- package/server/controllers/admin.js +0 -151
- package/server/controllers/api-token.js +0 -135
- package/server/controllers/authenticated-user.js +0 -52
- package/server/controllers/authentication.js +0 -172
- package/server/controllers/content-api.js +0 -15
- package/server/controllers/formatters/conditions.js +0 -12
- package/server/controllers/formatters/format-actions-by-sections.js +0 -40
- package/server/controllers/formatters/index.js +0 -9
- package/server/controllers/index.js +0 -14
- package/server/controllers/permission.js +0 -45
- package/server/controllers/role.js +0 -198
- package/server/controllers/transfer/index.js +0 -13
- package/server/controllers/transfer/runner.js +0 -28
- package/server/controllers/transfer/token.js +0 -131
- package/server/controllers/user.js +0 -141
- package/server/controllers/webhooks.js +0 -132
- package/server/destroy.js +0 -10
- package/server/domain/action/__tests__/action-domain.test.js +0 -230
- package/server/domain/action/__tests__/action-provider.test.js +0 -376
- package/server/domain/action/index.js +0 -142
- package/server/domain/action/provider.js +0 -83
- package/server/domain/condition/__tests__/condition-domain.test.js +0 -122
- package/server/domain/condition/__tests__/condition-provider.test.js +0 -156
- package/server/domain/condition/index.js +0 -92
- package/server/domain/condition/provider.js +0 -42
- package/server/domain/permission/__tests__/permission-domain.test.js +0 -285
- package/server/domain/permission/index.js +0 -156
- package/server/domain/user.js +0 -28
- package/server/index.js +0 -26
- package/server/middlewares/data-transfer.js +0 -29
- package/server/middlewares/index.js +0 -8
- package/server/middlewares/rateLimit.js +0 -47
- package/server/policies/hasPermissions.js +0 -38
- package/server/policies/index.js +0 -7
- package/server/policies/isAuthenticatedAdmin.js +0 -5
- package/server/policies/isTelemetryEnabled.js +0 -16
- package/server/register.js +0 -19
- package/server/routes/admin.js +0 -71
- package/server/routes/api-tokens.js +0 -70
- package/server/routes/authentication.js +0 -57
- package/server/routes/content-api.js +0 -20
- package/server/routes/index.js +0 -28
- package/server/routes/permissions.js +0 -20
- package/server/routes/roles.js +0 -107
- package/server/routes/serve-admin-panel.js +0 -71
- package/server/routes/transfer.js +0 -102
- package/server/routes/users.js +0 -88
- package/server/routes/webhooks.js +0 -81
- package/server/services/__tests__/action.test.js +0 -98
- package/server/services/__tests__/api-token.test.js +0 -980
- package/server/services/__tests__/auth.test.js +0 -319
- package/server/services/__tests__/content-type.test.js +0 -405
- package/server/services/__tests__/metrics.test.js +0 -65
- package/server/services/__tests__/passport.test.js +0 -90
- package/server/services/__tests__/permission.test.js +0 -177
- package/server/services/__tests__/permissions-manager-sanitize.test.js +0 -117
- package/server/services/__tests__/permissions-manager-validate.test.js +0 -119
- package/server/services/__tests__/permissions-manager.test.js +0 -318
- package/server/services/__tests__/permissions.section-builder.section.test.js +0 -136
- package/server/services/__tests__/project-settings.test.js +0 -397
- package/server/services/__tests__/role.test.js +0 -970
- package/server/services/__tests__/token.test.js +0 -217
- package/server/services/__tests__/transfer/token.test.js +0 -878
- package/server/services/__tests__/user.test.js +0 -786
- package/server/services/action.js +0 -35
- package/server/services/api-token.js +0 -453
- package/server/services/auth.js +0 -117
- package/server/services/condition.js +0 -14
- package/server/services/constants.js +0 -37
- package/server/services/content-type.js +0 -208
- package/server/services/index.js +0 -18
- package/server/services/metrics.js +0 -44
- package/server/services/passport/local-strategy.js +0 -28
- package/server/services/passport.js +0 -45
- package/server/services/permission/engine.js +0 -85
- package/server/services/permission/permissions-manager/index.js +0 -53
- package/server/services/permission/permissions-manager/query-builders.js +0 -72
- package/server/services/permission/permissions-manager/sanitize.js +0 -286
- package/server/services/permission/permissions-manager/validate.js +0 -218
- package/server/services/permission/queries.js +0 -190
- package/server/services/permission/sections-builder/builder.js +0 -84
- package/server/services/permission/sections-builder/handlers.js +0 -156
- package/server/services/permission/sections-builder/index.js +0 -50
- package/server/services/permission/sections-builder/section.js +0 -71
- package/server/services/permission/sections-builder/utils.js +0 -26
- package/server/services/permission.js +0 -33
- package/server/services/project-settings.js +0 -174
- package/server/services/role.js +0 -471
- package/server/services/token.js +0 -70
- package/server/services/transfer/index.js +0 -7
- package/server/services/transfer/permission.js +0 -22
- package/server/services/transfer/token.js +0 -449
- package/server/services/transfer/utils.js +0 -38
- package/server/services/user.js +0 -363
- package/server/strategies/__tests__/admin.test.js +0 -118
- package/server/strategies/__tests__/api-token.test.js +0 -364
- package/server/strategies/admin.js +0 -52
- package/server/strategies/api-token.js +0 -140
- package/server/strategies/data-transfer.js +0 -113
- package/server/strategies/index.js +0 -26
- package/server/utils/index.d.ts +0 -25
- package/server/utils/index.js +0 -9
- package/server/validation/__tests__/common-functions.test.js +0 -54
- package/server/validation/action-provider.js +0 -67
- package/server/validation/api-tokens.js +0 -32
- package/server/validation/authentication/forgot-password.js +0 -14
- package/server/validation/authentication/index.js +0 -19
- package/server/validation/authentication/register.js +0 -45
- package/server/validation/authentication/renew-token.js +0 -7
- package/server/validation/authentication/reset-password.js +0 -15
- package/server/validation/common-functions/check-fields-are-correctly-nested.js +0 -28
- package/server/validation/common-functions/check-fields-dont-have-duplicates.js +0 -17
- package/server/validation/common-functions/index.js +0 -9
- package/server/validation/common-validators.js +0 -209
- package/server/validation/permission.js +0 -53
- package/server/validation/policies/hasPermissions.js +0 -27
- package/server/validation/project-settings.js +0 -48
- package/server/validation/role.js +0 -59
- package/server/validation/transfer/index.js +0 -5
- package/server/validation/transfer/token.js +0 -42
- package/server/validation/user.js +0 -65
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-bd18f803.mjs","sources":["../../admin/src/content-manager/contexts/ModelsContext.js","../../admin/src/content-manager/utils/ItemTypes.js","../../admin/src/content-manager/contexts/ContentTypeLayout.js","../../admin/src/content-manager/pages/EditViewLayoutManager/selectors.js","../../admin/src/content-manager/hooks/useContentTypeLayout/index.js","../../admin/src/content-manager/hooks/useFetchContentTypeLayout/reducer.js","../../admin/src/content-manager/utils/arrayMoveItem.js","../../admin/src/content-manager/utils/checkIfAttributeIsDisplayable.js","../../admin/src/content-manager/utils/createDefaultForm.js","../../admin/src/content-manager/utils/formatLayoutToApi.js","../../admin/src/content-manager/utils/generatePermissionsObject.js","../../admin/src/content-manager/utils/getFieldName.js","../../admin/src/content-manager/utils/getMaxTempKey.js","../../admin/src/content-manager/utils/mergeMetasWithSchema.js","../../admin/src/content-manager/utils/removePasswordFieldsFromData.js","../../admin/src/content-manager/utils/getDisplayName.js","../../admin/src/content-manager/hooks/useFetchContentTypeLayout/utils/formatLayouts.js","../../admin/src/content-manager/hooks/useFetchContentTypeLayout/index.js","../../admin/src/content-manager/hooks/useFindRedirectionLink/selectors.js","../../admin/src/content-manager/hooks/useFindRedirectionLink/utils/getRedirectionLink.js","../../admin/src/content-manager/hooks/useFindRedirectionLink/index.js","../../admin/src/content-manager/hooks/usePluginsQueryParams/index.js","../../admin/src/content-manager/hooks/usePrev.js","../../admin/src/content-manager/hooks/useSyncRbac/actions.js","../../admin/src/content-manager/hooks/useSyncRbac/selectors.js","../../admin/src/content-manager/hooks/useSyncRbac/index.js","../../admin/src/content-manager/pages/EditSettingsView/components/LayoutDndProvider/index.js","../../admin/src/content-manager/pages/EditSettingsView/hooks/useLayoutDnd.js","../../admin/src/content-manager/pages/EditSettingsView/components/LinkToCTB.js","../../admin/src/content-manager/pages/EditSettingsView/components/ComponentFieldList.js","../../admin/src/content-manager/components/ComponentIcon/constants.js","../../admin/src/content-manager/components/ComponentIcon/ComponentIcon.js","../../admin/src/content-manager/pages/EditSettingsView/components/DynamicZoneList.js","../../admin/src/content-manager/pages/EditSettingsView/components/FieldButtonContent.js","../../admin/src/content-manager/pages/EditSettingsView/components/DisplayedFieldButton.js","../../admin/src/content-manager/pages/EditSettingsView/components/RowItemsLayout.js","../../admin/src/content-manager/pages/EditSettingsView/components/RowsLayout.js","../../admin/src/content-manager/pages/EditSettingsView/components/DisplayedFields.js","../../admin/src/content-manager/components/FieldTypeIcon/index.js","../../admin/src/content-manager/pages/EditSettingsView/utils/createPossibleMainFieldsForModelsAndComponents.js","../../admin/src/content-manager/pages/EditSettingsView/utils/getInputProps.js","../../admin/src/content-manager/pages/EditSettingsView/components/GenericInput.js","../../admin/src/content-manager/pages/EditSettingsView/components/ModalForm.js","../../admin/src/content-manager/pages/EditSettingsView/components/FormModal.js","../../admin/src/content-manager/pages/EditSettingsView/utils/layout.js","../../admin/src/content-manager/pages/EditSettingsView/init.js","../../admin/src/content-manager/pages/EditSettingsView/reducer.js","../../admin/src/content-manager/pages/EditSettingsView/index.js","../../admin/src/content-manager/pages/EditViewLayoutManager/actions.js","../../admin/src/content-manager/sharedReducers/crudReducer/actions.js","../../admin/src/content-manager/sharedReducers/crudReducer/selectors.js","../../admin/src/content-manager/components/CollectionTypeFormWrapper/index.js","../../admin/src/content-manager/components/DynamicZone/components/AddComponentButton.js","../../admin/src/content-manager/components/DynamicZone/components/ComponentCategory.js","../../admin/src/content-manager/components/DynamicZone/components/ComponentPicker.js","../../admin/src/content-manager/components/ComponentInitializer/index.js","../../admin/src/content-manager/hooks/useLazyComponents/index.js","../../admin/src/content-manager/components/Hint/index.js","../../admin/src/content-manager/components/BlocksInput/utils/links.ts","../../admin/src/content-manager/components/BlocksInput/hooks/useBlocksStore.tsx","../../admin/src/content-manager/components/BlocksInput/hooks/useModifiersStore.tsx","../../admin/src/content-manager/components/BlocksInput/utils/types.ts","../../admin/src/content-manager/components/BlocksInput/BlocksContent.tsx","../../admin/src/content-manager/components/BlocksInput/BlocksToolbar.tsx","../../admin/src/content-manager/components/BlocksInput/plugins/withLinks.ts","../../admin/src/content-manager/components/BlocksInput/plugins/withStrapiSchema.ts","../../admin/src/content-manager/components/BlocksInput/BlocksEditor.tsx","../../admin/src/content-manager/components/BlocksInput/BlocksInput.tsx","../../admin/src/content-manager/components/InputUID/endActionStyle.js","../../admin/src/content-manager/components/InputUID/regex.js","../../admin/src/content-manager/components/InputUID/index.js","../../admin/src/content-manager/components/RelationInputDataManager/utils/connect.js","../../admin/src/content-manager/components/RelationInputDataManager/utils/diffRelations.js","../../admin/src/content-manager/components/RelationInputDataManager/constants.js","../../admin/src/content-manager/components/RelationInputDataManager/utils/getRelationLink.js","../../admin/src/content-manager/components/RelationInputDataManager/utils/normalizeRelations.js","../../admin/src/content-manager/components/RelationInputDataManager/utils/normalizeSearchResults.js","../../admin/src/content-manager/components/RelationInputDataManager/utils/select.js","../../admin/src/content-manager/hooks/useRelation/useRelation.js","../../admin/src/content-manager/utils/paths.js","../../admin/src/content-manager/components/RelationInput/components/Option.js","../../admin/src/content-manager/components/RelationInput/constants.js","../../admin/src/content-manager/components/RelationInput/components/RelationItem.js","../../admin/src/content-manager/components/RelationInput/components/RelationList.js","../../admin/src/content-manager/components/RelationInput/RelationInput.js","../../admin/src/content-manager/components/RelationInputDataManager/RelationInputDataManager.js","../../admin/src/content-manager/components/PreviewWysiwyg/utils/mdRenderer.js","../../admin/src/content-manager/components/PreviewWysiwyg/utils/satinizeHtml.js","../../admin/src/content-manager/components/PreviewWysiwyg/Wrapper.js","../../admin/src/content-manager/components/PreviewWysiwyg/index.js","../../admin/src/content-manager/components/Wysiwyg/utils/continueList.js","../../admin/src/content-manager/components/Wysiwyg/Editor.js","../../admin/src/content-manager/components/Wysiwyg/EditorLayout.js","../../admin/src/content-manager/components/Wysiwyg/utils/utils.js","../../admin/src/content-manager/components/Wysiwyg/WysiwygStyles.js","../../admin/src/content-manager/components/Wysiwyg/WysiwygFooter.js","../../admin/src/content-manager/components/Wysiwyg/WysiwygNav.js","../../admin/src/content-manager/components/Wysiwyg/index.js","../../admin/src/content-manager/components/Inputs/utils/connect.js","../../admin/src/content-manager/components/Inputs/utils/generateOptions.js","../../admin/src/content-manager/components/Inputs/utils/getInputType.js","../../admin/src/content-manager/components/Inputs/utils/select.js","../../admin/src/content-manager/components/Inputs/utils/VALIDATIONS_TO_OMIT.js","../../admin/src/content-manager/components/Inputs/index.js","../../admin/src/content-manager/components/NonRepeatableComponent/index.js","../../admin/src/content-manager/components/RepeatableComponent/components/Accordion.js","../../admin/src/content-manager/components/RepeatableComponent/components/Preview.js","../../admin/src/content-manager/components/RepeatableComponent/components/Component.js","../../admin/src/content-manager/components/RepeatableComponent/utils/getComponentErrorKeys.js","../../admin/src/content-manager/components/RepeatableComponent/index.js","../../admin/src/content-manager/components/FieldComponent/Label.js","../../admin/src/content-manager/components/FieldComponent/utils/connect.js","../../admin/src/content-manager/components/FieldComponent/utils/select.js","../../admin/src/content-manager/components/FieldComponent/index.js","../../admin/src/content-manager/components/DynamicZone/components/DynamicComponent.js","../../admin/src/content-manager/components/DynamicZone/components/DynamicZoneLabel.js","../../admin/src/content-manager/components/DynamicZone/index.js","../../admin/src/content-manager/constants/attributes.js","../../admin/src/content-manager/components/EditViewDataManagerProvider/utils/cleanData.js","../../admin/src/content-manager/components/EditViewDataManagerProvider/utils/findAllAndReplace.js","../../admin/src/content-manager/components/EditViewDataManagerProvider/utils/moveFields.js","../../admin/src/content-manager/components/EditViewDataManagerProvider/reducer.js","../../admin/src/content-manager/components/EditViewDataManagerProvider/index.js","../../admin/src/content-manager/pages/ListView/utils/buildValidGetParams.js","../../admin/src/content-manager/components/SingleTypeFormWrapper/index.js","../../admin/src/content-manager/pages/EditView/DeleteLink/utils/connect.js","../../admin/src/content-manager/pages/EditView/DeleteLink/utils/select.js","../../admin/src/content-manager/pages/EditView/DeleteLink/index.js","../../admin/src/content-manager/pages/EditView/DraftAndPublishBadge/utils/connect.js","../../admin/src/content-manager/pages/EditView/DraftAndPublishBadge/utils/select.js","../../admin/src/content-manager/pages/EditView/DraftAndPublishBadge/index.js","../../admin/src/content-manager/pages/EditView/GridRow/index.js","../../admin/src/content-manager/pages/EditView/Header/utils/connect.js","../../admin/src/content-manager/pages/EditView/Header/utils/select.js","../../admin/src/content-manager/pages/EditView/Header/index.js","../../admin/src/content-manager/pages/EditView/hooks/useOnce.js","../../admin/src/content-manager/pages/EditView/Information/utils/getUnits.js","../../admin/src/content-manager/pages/EditView/Information/index.js","../../admin/src/content-manager/pages/EditView/InformationBox/InformationBoxCE.js","../../admin/src/content-manager/pages/EditView/utils/createAttributesLayout.js","../../admin/src/content-manager/pages/EditView/utils/getCustomFieldUidsFromLayout.js","../../admin/src/content-manager/pages/EditView/utils/getFieldsActionMatchingPermissions.js","../../admin/src/content-manager/pages/EditView/selectors.js","../../admin/src/content-manager/pages/EditView/index.js","../../admin/src/content-manager/pages/EditViewLayoutManager/Permissions.js","../../admin/src/content-manager/pages/EditViewLayoutManager/index.js","../../admin/src/content-manager/pages/ListSettingsView/components/EditFieldForm.js","../../admin/src/content-manager/pages/ListSettingsView/components/Settings.js","../../admin/src/content-manager/pages/App/components/CardDragPreview.js","../../admin/src/content-manager/pages/ListSettingsView/components/DraggableCard.js","../../admin/src/content-manager/pages/ListSettingsView/components/SortDisplayedFields.js","../../admin/src/content-manager/pages/ListSettingsView/constants.js","../../admin/src/content-manager/pages/ListSettingsView/reducer.js","../../admin/src/content-manager/pages/ListSettingsView/index.js","../../admin/src/content-manager/pages/ListView/actions.js","../../admin/src/content-manager/components/Filter/Filter.js","../../admin/src/content-manager/components/Filter/CustomInputs/AdminUsersFilter.js","../../admin/src/content-manager/hooks/useAllowedAttributes.js","../../admin/src/content-manager/components/InjectionZoneList/index.js","../../admin/src/content-manager/pages/ListView/components/ConfirmDialogDelete/index.js","../../admin/src/content-manager/pages/ListView/components/Body/index.js","../../admin/src/content-manager/pages/ListView/selectors.js","../../admin/src/content-manager/pages/ListView/components/BulkActionButtons/ConfirmBulkActionDialog/index.js","../../admin/src/content-manager/pages/ListView/components/BulkActionButtons/SelectedEntriesModal/index.js","../../admin/src/content-manager/pages/ListView/components/BulkActionButtons/index.js","../../admin/src/content-manager/pages/ListView/components/CellContent/CellValue.js","../../admin/src/content-manager/pages/ListView/components/CellContent/Media/FileWrapper.js","../../admin/src/content-manager/pages/ListView/components/CellContent/Media/index.js","../../admin/src/content-manager/pages/ListView/components/CellContent/MultipleMedias.js","../../admin/src/content-manager/pages/ListView/components/CellContent/RelationMultiple/index.js","../../admin/src/content-manager/pages/ListView/components/CellContent/RelationSingle/index.js","../../admin/src/content-manager/pages/ListView/components/CellContent/RepeatableComponent/index.js","../../admin/src/content-manager/pages/ListView/components/CellContent/SingleComponent/index.js","../../admin/src/content-manager/pages/ListView/components/CellContent/utils/isSingleRelation.js","../../admin/src/content-manager/pages/ListView/components/CellContent/utils/hasContent.js","../../admin/src/content-manager/pages/ListView/components/CellContent/index.js","../../admin/src/content-manager/pages/ListView/components/FieldPicker/index.js","../../admin/src/content-manager/pages/ListView/components/ViewSettingsMenu/index.js","../../admin/src/content-manager/pages/ListView/index.js","../../admin/src/content-manager/pages/ListViewLayoutManager/Permissions.js","../../admin/src/content-manager/pages/ListViewLayoutManager/index.js","../../admin/src/content-manager/pages/CollectionTypeRecursivePath/components/ErrorFallback.js","../../admin/src/content-manager/pages/CollectionTypeRecursivePath/index.js","../../admin/src/content-manager/pages/ComponentSetttingsView/index.js","../../admin/src/content-manager/pages/NoContentType/index.js","../../admin/src/content-manager/pages/NoPermissions/index.js","../../admin/src/content-manager/pages/SingleTypeRecursivePath/index.js","../../admin/src/content-manager/pages/App/components/ComponentDragPreview.js","../../admin/src/content-manager/pages/App/components/RelationDragPreview.js","../../admin/src/content-manager/pages/App/LeftMenu/index.js","../../admin/src/content-manager/pages/App/actions.js","../../admin/src/content-manager/pages/App/utils/checkPermissions.js","../../admin/src/content-manager/pages/App/utils/generateModelsLinks.js","../../admin/src/content-manager/pages/App/utils/getContentTypeLinks.js","../../admin/src/content-manager/pages/App/useContentManagerInitData.js","../../admin/src/content-manager/pages/App/index.js"],"sourcesContent":["import { createContext } from 'react';\n\nconst ModelsContext = createContext();\n\nexport default ModelsContext;\n","export default {\n COMPONENT: 'component',\n EDIT_FIELD: 'editField',\n FIELD: 'field',\n DYNAMIC_ZONE: 'dynamicZone',\n RELATION: 'relation',\n};\n","import { createContext } from 'react';\n\nconst ContentTypeLayout = createContext();\n\nexport default ContentTypeLayout;\n","const selectLayout = (state) => state['content-manager_editViewLayoutManager'].currentLayout;\n\nexport default selectLayout;\n","import { useCallback } from 'react';\n\nimport { useSelector } from 'react-redux';\n\nimport selectLayout from '../../pages/EditViewLayoutManager/selectors';\n\nconst useContentTypeLayout = () => {\n const currentLayout = useSelector(selectLayout);\n\n const getComponentLayout = useCallback(\n (componentUid) => {\n return currentLayout?.components?.[componentUid] ?? {};\n },\n [currentLayout]\n );\n\n return { ...currentLayout, getComponentLayout };\n};\n\nexport default useContentTypeLayout;\n","/* eslint-disable consistent-return */\nimport produce from 'immer';\n\nexport const initialState = {\n error: null,\n isLoading: true,\n layout: {},\n layouts: {},\n};\n\nconst reducer = (state, action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'GET_DATA': {\n draftState.isLoading = true;\n draftState.error = null;\n draftState.layout = {};\n break;\n }\n case 'GET_DATA_SUCCEEDED': {\n const contentTypeUid = action.data.contentType.uid;\n\n draftState.layout = action.data;\n draftState.layouts[contentTypeUid] = action.data;\n draftState.isLoading = false;\n break;\n }\n case 'GET_DATA_ERROR': {\n draftState.isLoading = false;\n draftState.error = action.error;\n break;\n }\n case 'SET_LAYOUT_FROM_STATE': {\n draftState.error = null;\n draftState.layout = state.layouts[action.uid];\n break;\n }\n case 'UPDATE_LAYOUT': {\n const oldLayout = state.layout;\n\n draftState.layout = {\n ...oldLayout,\n contentType: { uid: oldLayout.contentType.uid, ...action.newLayout.contentType },\n };\n draftState.layouts[oldLayout.contentType.uid] = {\n ...oldLayout,\n contentType: { uid: oldLayout.contentType.uid, ...action.newLayout.contentType },\n };\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default reducer;\n","import cloneDeep from 'lodash/cloneDeep';\n\nconst arrayMoveItem = (arr, from, to) => {\n if (\n Array.isArray(arr) &&\n from >= 0 &&\n to >= 0 &&\n from <= arr.length - 1 &&\n to <= arr.length - 1\n ) {\n const newArray = cloneDeep(arr);\n\n const item = newArray.splice(from, 1);\n newArray.splice(to, 0, item[0]);\n\n return newArray;\n }\n\n return arr;\n};\n\nexport default arrayMoveItem;\n","const checkIfAttributeIsDisplayable = (attribute) => {\n const { type } = attribute;\n\n if (type === 'relation') {\n return !(attribute?.relationType ?? '').toLowerCase().includes('morph');\n }\n\n return !['json', 'dynamiczone', 'richtext', 'password', 'blocks'].includes(type) && !!type;\n};\n\nexport default checkIfAttributeIsDisplayable;\n","import get from 'lodash/get';\n\nconst createDefaultForm = (attributes, allComponentsSchema) => {\n return Object.keys(attributes).reduce((acc, current) => {\n const attribute = get(attributes, [current], {});\n const { default: defaultValue, component, type, required, min, repeatable } = attribute;\n\n if (defaultValue !== undefined) {\n acc[current] = defaultValue;\n }\n\n if (type === 'component') {\n const currentComponentSchema = allComponentsSchema?.[component]?.attributes ?? {};\n const currentComponentDefaultForm = createDefaultForm(\n currentComponentSchema,\n allComponentsSchema\n );\n\n if (required === true) {\n acc[current] = repeatable === true ? [] : currentComponentDefaultForm;\n }\n\n if (min && repeatable === true && required) {\n acc[current] = [];\n\n for (let i = 0; i < min; i += 1) {\n acc[current].push(currentComponentDefaultForm);\n }\n }\n }\n\n if (type === 'dynamiczone') {\n if (required === true) {\n acc[current] = [];\n }\n }\n\n return acc;\n }, {});\n};\n\nexport default createDefaultForm;\n","import get from 'lodash/get';\nimport omit from 'lodash/omit';\n\nconst formatLayoutToApi = ({ layouts, metadatas, ...rest }) => {\n const list = layouts.list.map((obj) => {\n if (obj.name) {\n return obj.name;\n }\n\n return obj;\n });\n const formattedMetadatas = Object.keys(metadatas).reduce((acc, current) => {\n const currentMetadatas = get(metadatas, [current], {});\n let editMetadatas = currentMetadatas.edit;\n\n if (editMetadatas.mainField) {\n editMetadatas = { ...editMetadatas, mainField: currentMetadatas.edit.mainField.name };\n }\n\n return {\n ...acc,\n [current]: {\n edit: editMetadatas,\n list: omit(currentMetadatas.list, ['mainField']),\n },\n };\n }, {});\n\n const edit = layouts.edit.map((row) =>\n row.map(({ name, size }) => ({\n name,\n size,\n }))\n );\n\n return {\n ...rest,\n layouts: { edit, list },\n metadatas: formattedMetadatas,\n };\n};\n\nexport default formatLayoutToApi;\n","const addSubjectToPermissionsArray = (array, uid) =>\n array.map((data) => ({ ...data, subject: uid }));\n\nconst generatePermissionsObject = (uid) => {\n const permissions = {\n create: [{ action: 'plugin::content-manager.explorer.create', subject: null }],\n delete: [{ action: 'plugin::content-manager.explorer.delete', subject: null }],\n publish: [{ action: 'plugin::content-manager.explorer.publish', subject: null }],\n read: [{ action: 'plugin::content-manager.explorer.read', subject: null }],\n update: [{ action: 'plugin::content-manager.explorer.update', subject: null }],\n };\n\n return Object.keys(permissions).reduce((acc, current) => {\n acc[current] = addSubjectToPermissionsArray(permissions[current], uid);\n\n return acc;\n }, {});\n};\n\nexport default generatePermissionsObject;\nexport { addSubjectToPermissionsArray };\n","import isNaN from 'lodash/isNaN';\n\nconst getFieldName = (stringName) =>\n stringName.split('.').filter((string) => isNaN(parseInt(string, 10)));\n\nexport default getFieldName;\n","const getMaxTempKey = (arr) => {\n if (arr.length === 0) {\n return -1;\n }\n\n const maxTempKey = Math.max.apply(\n Math,\n arr.map((o) => o.__temp_key__ ?? 0)\n );\n\n return Number.isNaN(maxTempKey) ? -1 : maxTempKey;\n};\n\nexport default getMaxTempKey;\n","import merge from 'lodash/merge';\nimport set from 'lodash/set';\n\nconst mergeMetasWithSchema = (data, schemas, mainSchemaKey) => {\n const findSchema = (refUid) => schemas.find((obj) => obj.uid === refUid);\n const merged = Object.assign({}, data);\n const mainUID = data[mainSchemaKey].uid;\n const mainSchema = findSchema(mainUID);\n\n // TODO\n // In order to merge all the layers of the schema objects, we used the Lodash function \"merge\".\n // If the destructuration is used, it will only merge the first layer of properties and overwrite the nested objects.\n set(merged, [mainSchemaKey], merge({}, mainSchema, data[mainSchemaKey]));\n\n Object.keys(data.components).forEach((compoUID) => {\n const compoSchema = findSchema(compoUID);\n\n set(merged, ['components', compoUID], { ...data.components[compoUID], ...compoSchema });\n });\n\n return merged;\n};\n\nexport default mergeMetasWithSchema;\n","import { getOtherInfos, getType } from '@strapi/helper-plugin';\nimport get from 'lodash/get';\n\nconst removePasswordFieldsFromData = (data, contentTypeSchema, componentSchema) => {\n const recursiveCleanData = (data, schema) => {\n return Object.keys(data).reduce((acc, current) => {\n const attrType = getType(schema, current);\n const value = get(data, current);\n const component = getOtherInfos(schema, [current, 'component']);\n const isRepeatable = getOtherInfos(schema, [current, 'repeatable']);\n\n if (attrType === 'dynamiczone') {\n acc[current] = value.map((componentValue) => {\n const subCleanedData = recursiveCleanData(\n componentValue,\n componentSchema[componentValue.__component]\n );\n\n return subCleanedData;\n });\n\n return acc;\n }\n\n if (attrType === 'component') {\n if (isRepeatable) {\n /* eslint-disable indent */\n acc[current] = value\n ? value.map((compoData) => {\n const subCleanedData = recursiveCleanData(compoData, componentSchema[component]);\n\n return subCleanedData;\n })\n : value;\n /* eslint-enable indent */\n } else {\n acc[current] = value ? recursiveCleanData(value, componentSchema[component]) : value;\n }\n\n return acc;\n }\n\n if (attrType !== 'password') {\n acc[current] = value;\n }\n\n return acc;\n }, {});\n };\n\n return recursiveCleanData(data, contentTypeSchema);\n};\n\nexport default removePasswordFieldsFromData;\n","/**\n * Retrieves the display name of an admin panel user\n * @typedef AdminUserNamesAttributes\n * @property {string} firstname\n * @property {string} lastname\n * @property {string} username\n * @property {string} email\n *\n * @type {(user: AdminUserNamesAttributes, formatMessage: import('react-intl').formatMessage) => string}\n */\nconst getDisplayName = ({ firstname, lastname, username, email }, formatMessage) => {\n if (username) {\n return username;\n }\n\n // firstname is not required if the user is created with a username\n if (firstname) {\n return formatMessage(\n {\n id: 'global.fullname',\n defaultMessage: '{firstname} {lastname}',\n },\n {\n firstname,\n lastname,\n }\n ).trim();\n }\n\n return email;\n};\n\nexport { getDisplayName };\n","import cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport set from 'lodash/set';\n\nimport { mergeMetasWithSchema } from '../../../utils';\n\nconst getRelationModel = (targetModel, models) => models.find((model) => model.uid === targetModel);\n\nconst formatLayouts = (initialData, models) => {\n const data = createMetasSchema(initialData, models);\n\n const formattedCTEditLayout = formatLayoutWithMetas(data.contentType, models);\n const formattedListLayout = formatListLayoutWithMetas(data.contentType, data.components);\n\n set(data, ['contentType', 'layouts', 'edit'], formattedCTEditLayout);\n set(data, ['contentType', 'layouts', 'list'], formattedListLayout);\n\n Object.keys(data.components).forEach((componentUid) => {\n const formattedComponentEditLayout = formatLayoutWithMetas(\n data.components[componentUid],\n models\n );\n\n set(data, ['components', componentUid, 'layouts', 'edit'], formattedComponentEditLayout);\n });\n\n return data;\n};\n\nconst createMetasSchema = (initialData, models) => {\n const data = mergeMetasWithSchema(cloneDeep(initialData), models, 'contentType');\n const { components, contentType } = data;\n\n const formatMetadatas = (targetSchema) => {\n return Object.keys(targetSchema.metadatas).reduce((acc, current) => {\n const schema = get(targetSchema, ['attributes', current], {});\n let metadatas = targetSchema.metadatas[current];\n\n if (schema.type === 'relation') {\n const relationModel = getRelationModel(schema.targetModel, models);\n const mainFieldName = metadatas.edit.mainField;\n const mainField = {\n name: mainFieldName,\n schema: get(relationModel, ['attributes', mainFieldName]),\n };\n\n metadatas = {\n list: {\n ...metadatas.list,\n mainField,\n },\n edit: {\n ...metadatas.edit,\n mainField,\n },\n };\n }\n\n acc[current] = metadatas;\n\n return acc;\n }, {});\n };\n\n set(data, ['contentType', 'metadatas'], formatMetadatas(contentType));\n\n Object.keys(components).forEach((compoUID) => {\n const currentCompo = components[compoUID];\n const updatedMetas = formatMetadatas(currentCompo);\n\n set(data, ['components', compoUID, 'metadatas'], updatedMetas);\n });\n\n return data;\n};\n\nconst formatLayoutWithMetas = (contentTypeConfiguration, models) =>\n contentTypeConfiguration.layouts.edit.reduce((acc, current) => {\n const row = current.map((attribute) => {\n const fieldSchema = get(contentTypeConfiguration, ['attributes', attribute.name], {});\n\n const data = {\n ...attribute,\n fieldSchema,\n metadatas: get(contentTypeConfiguration, ['metadatas', attribute.name, 'edit'], {}),\n };\n\n if (fieldSchema.type === 'relation') {\n const targetModelSchema = getRelationModel(fieldSchema.targetModel, models);\n const targetModelPluginOptions = targetModelSchema.pluginOptions || {};\n\n set(data, 'targetModelPluginOptions', targetModelPluginOptions);\n set(data, 'queryInfos', {\n shouldDisplayRelationLink: shouldDisplayRelationLink(\n contentTypeConfiguration,\n attribute.name,\n models\n ),\n });\n }\n\n return data;\n });\n\n acc.push(row);\n\n return acc;\n }, []);\n\nconst formatListLayoutWithMetas = (contentTypeConfiguration, components) => {\n const formatted = contentTypeConfiguration.layouts.list.reduce((acc, current) => {\n const fieldSchema = get(contentTypeConfiguration, ['attributes', current], {});\n const metadatas = get(contentTypeConfiguration, ['metadatas', current, 'list'], {});\n\n const type = fieldSchema.type;\n\n if (type === 'relation') {\n acc.push({ key: `__${current}_key__`, name: current, fieldSchema, metadatas });\n\n return acc;\n }\n\n if (type === 'component') {\n const component = components[fieldSchema.component];\n const mainFieldName = component.settings.mainField;\n const mainFieldAttribute = component.attributes[mainFieldName];\n\n acc.push({\n key: `__${current}_key__`,\n name: current,\n fieldSchema,\n metadatas: {\n ...metadatas,\n mainField: {\n ...mainFieldAttribute,\n name: mainFieldName,\n },\n },\n });\n\n return acc;\n }\n\n acc.push({ key: `__${current}_key__`, name: current, fieldSchema, metadatas });\n\n return acc;\n }, []);\n\n return formatted;\n};\n\nconst shouldDisplayRelationLink = (contentTypeConfiguration, fieldName, models) => {\n const targetModel = get(contentTypeConfiguration, ['attributes', fieldName, 'targetModel'], '');\n\n return getDisplayedModels(models).includes(targetModel);\n};\n\nconst getDisplayedModels = (models) =>\n models.filter((model) => model.isDisplayed).map(({ uid }) => uid);\n\nexport default formatLayouts;\nexport {\n formatLayoutWithMetas,\n formatListLayoutWithMetas,\n getDisplayedModels,\n shouldDisplayRelationLink,\n};\n","import { useCallback, useEffect, useMemo, useReducer, useRef } from 'react';\n\nimport { useFetchClient } from '@strapi/helper-plugin';\nimport axios from 'axios';\nimport { shallowEqual, useSelector } from 'react-redux';\n\nimport { makeSelectModelAndComponentSchemas } from '../../pages/App/selectors';\n\nimport reducer, { initialState } from './reducer';\nimport formatLayouts from './utils/formatLayouts';\n\nconst useFetchContentTypeLayout = (contentTypeUID) => {\n const [{ error, isLoading, layout, layouts }, dispatch] = useReducer(reducer, initialState);\n const schemasSelector = useMemo(makeSelectModelAndComponentSchemas, []);\n const { schemas } = useSelector((state) => schemasSelector(state), shallowEqual);\n const isMounted = useRef(true);\n const { get } = useFetchClient();\n\n const getData = useCallback(\n async (uid, source) => {\n if (layouts[uid]) {\n dispatch({ type: 'SET_LAYOUT_FROM_STATE', uid });\n\n return;\n }\n dispatch({ type: 'GET_DATA' });\n\n try {\n const {\n data: { data },\n } = await get(`/content-manager/content-types/${uid}/configuration`, {\n cancelToken: source.token,\n });\n\n dispatch({\n type: 'GET_DATA_SUCCEEDED',\n data: formatLayouts(data, schemas),\n });\n } catch (error) {\n if (axios.isCancel(error)) {\n return;\n }\n if (isMounted.current) {\n console.error(error);\n }\n\n if (isMounted.current) {\n dispatch({ type: 'GET_DATA_ERROR', error });\n }\n }\n },\n [layouts, schemas, get]\n );\n\n useEffect(() => {\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n useEffect(() => {\n const CancelToken = axios.CancelToken;\n const source = CancelToken.source();\n\n getData(contentTypeUID, source);\n\n return () => {\n source.cancel('Operation canceled by the user.');\n };\n }, [contentTypeUID, getData]);\n\n const updateLayout = useCallback(\n (data) => {\n dispatch({\n type: 'UPDATE_LAYOUT',\n newLayout: formatLayouts(data, schemas),\n });\n },\n [schemas]\n );\n\n return {\n error,\n isLoading,\n layout,\n updateLayout,\n };\n};\n\nexport default useFetchContentTypeLayout;\n","const selectMenuLinks = (state) => {\n const cmState = state['content-manager_app'];\n\n return cmState.collectionTypeLinks;\n};\n\nexport default selectMenuLinks;\n","import get from 'lodash/get';\nimport isObject from 'lodash/isObject';\nimport { parse, stringify } from 'qs';\n\n/**\n * Updates the leafs of the first argument\n * @param {object} initialParams\n * @param {object} params\n * @returns string\n */\nconst mergeParams = (initialParams, params) => {\n return Object.keys(initialParams).reduce((acc, current) => {\n const intialValue = initialParams[current];\n const nextValue = get(params, [current], intialValue);\n\n if (isObject(intialValue)) {\n return { ...acc, [current]: mergeParams(intialValue, nextValue) };\n }\n\n acc[current] = nextValue;\n\n return acc;\n }, {});\n};\n\nconst getRedirectionLink = (links, slug, rawQuery) => {\n const matchingLink = links.find(({ to }) => to.includes(slug));\n\n if (!matchingLink) {\n return '/';\n }\n\n const { to, search } = matchingLink;\n const searchQueryParams = parse(search);\n const currentQueryParams = parse(rawQuery.substring(1));\n\n const mergedParams = mergeParams(searchQueryParams, currentQueryParams);\n\n const link = `${to}?${stringify(mergedParams, { encode: false })}`;\n\n return link;\n};\n\nexport default getRedirectionLink;\nexport { mergeParams };\n","import { useQueryParams } from '@strapi/helper-plugin';\nimport { useSelector } from 'react-redux';\n\nimport selectMenuLinks from './selectors';\nimport getRedirectionLink from './utils/getRedirectionLink';\n\nconst useFindRedirectionLink = (slug) => {\n const [{ rawQuery }] = useQueryParams();\n const collectionTypesMenuLinks = useSelector(selectMenuLinks);\n const redirectionLink = getRedirectionLink(collectionTypesMenuLinks, slug, rawQuery);\n\n return redirectionLink;\n};\n\nexport default useFindRedirectionLink;\n","import { parse, stringify } from 'qs';\nimport { useLocation } from 'react-router-dom';\n\nconst usePluginsQueryParams = () => {\n const { search } = useLocation();\n const query = search ? parse(search.substring(1)) : {};\n\n return query.plugins ? stringify({ plugins: query.plugins }, { encode: false }) : '';\n};\n\nexport default usePluginsQueryParams;\n","import { useEffect, useRef } from 'react';\n\n/**\n * @type {<T>(value: T) => T | undefined}\n */\nexport const usePrev = (value) => {\n const ref = useRef();\n\n useEffect(() => {\n ref.current = value;\n }, [value]);\n\n return ref.current;\n};\n","import { RESET_PERMISSIONS, SET_PERMISSIONS } from './constants';\n\nexport const setPermissions = (permissions, plugins, containerName) => {\n return {\n type: SET_PERMISSIONS,\n permissions,\n __meta__: {\n plugins,\n containerName,\n },\n };\n};\n\nexport const resetPermissions = () => ({ type: RESET_PERMISSIONS });\n","export const selectPermissions = (state) => state['content-manager_rbacManager'].permissions;\n\nexport const selectCollectionTypePermissions = (state) =>\n state.rbacProvider.collectionTypesRelatedPermissions;\n","import { useEffect } from 'react';\n\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { resetPermissions, setPermissions } from './actions';\nimport { selectCollectionTypePermissions, selectPermissions } from './selectors';\n\nconst useSyncRbac = (query, collectionTypeUID, containerName = 'listView') => {\n const dispatch = useDispatch();\n\n const collectionTypesRelatedPermissions = useSelector(selectCollectionTypePermissions);\n const permissions = useSelector(selectPermissions);\n\n const relatedPermissions = collectionTypesRelatedPermissions[collectionTypeUID];\n\n useEffect(() => {\n if (relatedPermissions) {\n dispatch(setPermissions(relatedPermissions, query ? query.plugins : null, containerName));\n\n return () => {\n dispatch(resetPermissions());\n };\n }\n\n return () => {};\n }, [relatedPermissions, dispatch, query, containerName]);\n\n // Check if the permissions are related to the current collectionTypeUID\n const isPermissionMismatch =\n permissions?.some((permission) => permission.subject !== collectionTypeUID) ?? true;\n\n return {\n isValid: permissions && !isPermissionMismatch,\n permissions,\n };\n};\n\nexport default useSyncRbac;\n","import React from 'react';\n\nimport PropTypes from 'prop-types';\n\nexport const LayoutDndContext = React.createContext();\n\nexport function LayoutDndProvider({\n attributes,\n buttonData,\n children,\n goTo,\n layout,\n metadatas,\n moveItem,\n moveRow,\n onAddData,\n relationsLayout,\n removeField,\n selectedItemName,\n setEditFieldToSelect,\n ...rest\n}) {\n return (\n <LayoutDndContext.Provider\n value={{\n attributes,\n buttonData,\n goTo,\n layout,\n metadatas,\n moveItem,\n moveRow,\n onAddData,\n relationsLayout,\n removeField,\n selectedItemName,\n setEditFieldToSelect,\n ...rest,\n }}\n >\n {children}\n </LayoutDndContext.Provider>\n );\n}\n\nLayoutDndProvider.defaultProps = {\n attributes: {},\n buttonData: [],\n goTo() {},\n layout: [],\n metadatas: {},\n moveItem() {},\n moveRow() {},\n onAddData() {},\n relationsLayout: [],\n removeField() {},\n selectedItemName: null,\n setEditFieldToSelect() {},\n};\n\nLayoutDndProvider.propTypes = {\n attributes: PropTypes.object,\n buttonData: PropTypes.array,\n children: PropTypes.node.isRequired,\n goTo: PropTypes.func,\n layout: PropTypes.array,\n metadatas: PropTypes.object,\n moveItem: PropTypes.func,\n moveRow: PropTypes.func,\n onAddData: PropTypes.func,\n relationsLayout: PropTypes.array,\n removeField: PropTypes.func,\n selectedItemName: PropTypes.string,\n setEditFieldToSelect: PropTypes.func,\n};\n","import * as React from 'react';\n\nimport { LayoutDndContext } from '../components/LayoutDndProvider';\n\nexport function useLayoutDnd() {\n return React.useContext(LayoutDndContext);\n}\n","/**\n *\n * EditViewButton\n *\n */\n\nimport React from 'react';\n\nimport { CheckPermissions, LinkButton, useTracking } from '@strapi/helper-plugin';\nimport { Pencil } from '@strapi/icons';\nimport get from 'lodash/get';\nimport { useIntl } from 'react-intl';\n\nimport getTrad from '../../../utils/getTrad';\nimport { useLayoutDnd } from '../hooks/useLayoutDnd';\n\nconst permissions = [{ action: 'plugin::content-type-builder.read', subject: null }];\n\n// Create link from content-type-builder to content-manager\nconst LinkToCTB = () => {\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { slug, modifiedData, isContentTypeView } = useLayoutDnd();\n const type = isContentTypeView ? 'content-types' : 'components';\n\n const baseUrl = `/plugins/content-type-builder/${\n type === 'content-types' ? type : 'component-categories'\n }`;\n const category = get(modifiedData, 'category', '');\n\n const suffixUrl = type === 'content-types' ? slug : `${category}/${slug}`;\n\n const handleClick = () => {\n trackUsage('willEditEditLayout');\n };\n\n if (slug === 'strapi::administrator') {\n return null;\n }\n\n return (\n <CheckPermissions permissions={permissions}>\n <LinkButton\n to={`${baseUrl}/${suffixUrl}`}\n onClick={handleClick}\n size=\"S\"\n startIcon={<Pencil />}\n variant=\"secondary\"\n >\n {formatMessage({\n id: getTrad(`edit-settings-view.link-to-ctb.${type}`),\n defaultMessage: 'Edit the content type',\n })}\n </LinkButton>\n </CheckPermissions>\n );\n};\n\nexport default LinkToCTB;\n","import React from 'react';\n\nimport { Box, Flex, Grid, GridItem, Typography } from '@strapi/design-system';\nimport { Link } from '@strapi/helper-plugin';\nimport { Cog } from '@strapi/icons';\nimport get from 'lodash/get';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport getTrad from '../../../utils/getTrad';\nimport { useLayoutDnd } from '../hooks/useLayoutDnd';\n\nconst ComponentFieldList = ({ componentUid }) => {\n const { componentLayouts } = useLayoutDnd();\n const { formatMessage } = useIntl();\n const componentData = get(componentLayouts, [componentUid], {});\n const componentLayout = get(componentData, ['layouts', 'edit'], []);\n\n return (\n <Box padding={3}>\n {componentLayout.map((row, index) => (\n // eslint-disable-next-line react/no-array-index-key\n <Grid gap={4} key={index}>\n {row.map((rowContent) => (\n <GridItem key={rowContent.name} col={rowContent.size}>\n <Box paddingTop={2}>\n <Flex\n alignItems=\"center\"\n background=\"neutral0\"\n paddingLeft={3}\n paddingRight={3}\n height={`${32 / 16}rem`}\n hasRadius\n borderColor=\"neutral200\"\n >\n <Typography textColor=\"neutral800\">{rowContent.name}</Typography>\n </Flex>\n </Box>\n </GridItem>\n ))}\n </Grid>\n ))}\n <Box paddingTop={2}>\n <Link\n startIcon={<Cog />}\n to={`/content-manager/components/${componentUid}/configurations/edit`}\n >\n {formatMessage({\n id: getTrad('components.FieldItem.linkToComponentLayout'),\n defaultMessage: \"Set the component's layout\",\n })}\n </Link>\n </Box>\n </Box>\n );\n};\n\nComponentFieldList.propTypes = {\n componentUid: PropTypes.string.isRequired,\n};\n\nexport default ComponentFieldList;\n","import * as Icons from '@strapi/icons';\n\nconst COMPONENT_ICONS = {\n alien: Icons.Alien,\n apps: Icons.Apps,\n archive: Icons.Archive,\n arrowDown: Icons.ArrowDown,\n arrowLeft: Icons.ArrowLeft,\n arrowRight: Icons.ArrowRight,\n arrowUp: Icons.ArrowUp,\n attachment: Icons.Attachment,\n bell: Icons.Bell,\n bold: Icons.Bold,\n book: Icons.Book,\n briefcase: Icons.Briefcase,\n brush: Icons.Brush,\n bulletList: Icons.BulletList,\n calendar: Icons.Calendar,\n car: Icons.Car,\n cast: Icons.Cast,\n chartBubble: Icons.ChartBubble,\n chartCircle: Icons.ChartCircle,\n chartPie: Icons.ChartPie,\n check: Icons.Check,\n clock: Icons.Clock,\n cloud: Icons.Cloud,\n code: Icons.Code,\n cog: Icons.Cog,\n collapse: Icons.Collapse,\n command: Icons.Command,\n connector: Icons.Connector,\n crop: Icons.Crop,\n crown: Icons.Crown,\n cube: Icons.Cube,\n cup: Icons.Cup,\n cursor: Icons.Cursor,\n dashboard: Icons.Dashboard,\n database: Icons.Database,\n discuss: Icons.Discuss,\n doctor: Icons.Doctor,\n earth: Icons.Earth,\n emotionHappy: Icons.EmotionHappy,\n emotionUnhappy: Icons.EmotionUnhappy,\n envelop: Icons.Envelop,\n exit: Icons.Exit,\n expand: Icons.Expand,\n eye: Icons.Eye,\n feather: Icons.Feather,\n file: Icons.File,\n fileError: Icons.FileError,\n filePdf: Icons.FilePdf,\n filter: Icons.Filter,\n folder: Icons.Folder,\n gate: Icons.Gate,\n gift: Icons.Gift,\n globe: Icons.Globe,\n grid: Icons.Grid,\n handHeart: Icons.HandHeart,\n hashtag: Icons.Hashtag,\n headphone: Icons.Headphone,\n heart: Icons.Heart,\n house: Icons.House,\n information: Icons.Information,\n italic: Icons.Italic,\n key: Icons.Key,\n landscape: Icons.Landscape,\n layer: Icons.Layer,\n layout: Icons.Layout,\n lightbulb: Icons.Lightbulb,\n link: Icons.Link,\n lock: Icons.Lock,\n magic: Icons.Magic,\n manyToMany: Icons.ManyToMany,\n manyToOne: Icons.ManyToOne,\n manyWays: Icons.ManyWays,\n medium: Icons.Medium,\n message: Icons.Message,\n microphone: Icons.Microphone,\n monitor: Icons.Monitor,\n moon: Icons.Moon,\n music: Icons.Music,\n oneToMany: Icons.OneToMany,\n oneToOne: Icons.OneToOne,\n oneWay: Icons.OneWay,\n paint: Icons.Paint,\n paintBrush: Icons.PaintBrush,\n paperPlane: Icons.PaperPlane,\n pencil: Icons.Pencil,\n phone: Icons.Phone,\n picture: Icons.Picture,\n pin: Icons.Pin,\n pinMap: Icons.PinMap,\n plane: Icons.Plane,\n play: Icons.Play,\n plus: Icons.Plus,\n priceTag: Icons.PriceTag,\n puzzle: Icons.Puzzle,\n question: Icons.Question,\n quote: Icons.Quote,\n refresh: Icons.Refresh,\n repeat: Icons.Repeat,\n restaurant: Icons.Restaurant,\n rocket: Icons.Rocket,\n rotate: Icons.Rotate,\n scissors: Icons.Scissors,\n search: Icons.Search,\n seed: Icons.Seed,\n server: Icons.Server,\n shield: Icons.Shield,\n shirt: Icons.Shirt,\n shoppingCart: Icons.ShoppingCart,\n slideshow: Icons.Slideshow,\n stack: Icons.Stack,\n star: Icons.Star,\n store: Icons.Store,\n strikeThrough: Icons.StrikeThrough,\n sun: Icons.Sun,\n television: Icons.Television,\n thumbDown: Icons.ThumbDown,\n thumbUp: Icons.ThumbUp,\n train: Icons.Train,\n twitter: Icons.Twitter,\n typhoon: Icons.Typhoon,\n underline: Icons.Underline,\n user: Icons.User,\n volumeMute: Icons.VolumeMute,\n volumeUp: Icons.VolumeUp,\n walk: Icons.Walk,\n wheelchair: Icons.Wheelchair,\n write: Icons.Write,\n};\n\nexport { COMPONENT_ICONS };\n","import React from 'react';\n\nimport { Flex, Icon } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\n\nimport { COMPONENT_ICONS } from './constants';\n\nexport function ComponentIcon({ showBackground = true, size = 'M', icon }) {\n return (\n <Flex\n alignItems=\"center\"\n background={showBackground ? 'neutral200' : null}\n justifyContent=\"center\"\n size={size}\n showBackground={showBackground}\n height={size === 'S' ? 5 : 8}\n width={size === 'S' ? 5 : 8}\n color=\"neutral600\"\n borderRadius={showBackground ? '50%' : 0}\n >\n <Icon\n as={COMPONENT_ICONS[icon] || COMPONENT_ICONS.cube}\n height={size === 'S' ? 3 : 5}\n width={size === 'S' ? 3 : 5}\n />\n </Flex>\n );\n}\n\nComponentIcon.defaultProps = {\n showBackground: true,\n size: 'M',\n icon: 'Cube',\n};\n\nComponentIcon.propTypes = {\n showBackground: PropTypes.bool,\n size: PropTypes.string,\n icon: PropTypes.string,\n};\n","import React from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { Link } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport { ComponentIcon } from '../../../components/ComponentIcon';\nimport { useLayoutDnd } from '../hooks/useLayoutDnd';\n\nconst CustomLink = styled(Flex)`\n text-decoration: none;\n\n &:focus,\n &:hover {\n ${({ theme }) => `\n background-color: ${theme.colors.primary100};\n border-color: ${theme.colors.primary200};\n\n ${Typography} {\n color: ${theme.colors.primary600};\n }\n `}\n\n /* > ComponentIcon */\n > div:first-child {\n background: ${({ theme }) => theme.colors.primary200};\n color: ${({ theme }) => theme.colors.primary600};\n\n svg {\n path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n }\n }\n`;\n\nconst DynamicZoneList = ({ components }) => {\n const { componentLayouts } = useLayoutDnd();\n\n return (\n <Flex gap={2} overflow=\"scroll hidden\" padding={3}>\n {components.map((componentUid) => (\n <CustomLink\n hasRadius\n background=\"neutral0\"\n justifyContent=\"center\"\n alignItems=\"center\"\n height={`${84 / 16}rem`}\n minWidth={`${140 / 16}rem`}\n key={componentUid}\n padding={2}\n direction=\"column\"\n borderColor=\"neutral200\"\n as={Link}\n to={`/content-manager/components/${componentUid}/configurations/edit`}\n >\n <ComponentIcon icon={componentLayouts?.[componentUid]?.info?.icon} />\n\n <Box paddingTop={1}>\n <Typography fontSize={1} textColor=\"neutral600\" fontWeight=\"bold\">\n {componentLayouts?.[componentUid]?.info?.displayName ?? ''}\n </Typography>\n </Box>\n </CustomLink>\n ))}\n </Flex>\n );\n};\n\nDynamicZoneList.propTypes = {\n components: PropTypes.arrayOf(PropTypes.string).isRequired,\n};\n\nexport default DynamicZoneList;\n","import React from 'react';\n\nimport { Box, Flex, IconButton, Typography } from '@strapi/design-system';\nimport { Pencil, Trash } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { getTrad } from '../../../utils';\n\nimport ComponentFieldList from './ComponentFieldList';\nimport DynamicZoneList from './DynamicZoneList';\n\nconst CustomIconButton = styled(IconButton)`\n background-color: transparent;\n path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n`;\n\nconst FieldButtonContent = ({ attribute, onEditField, onDeleteField, children }) => {\n const { formatMessage } = useIntl();\n\n return (\n <Box overflow=\"hidden\" width=\"100%\">\n <Flex paddingLeft={3} alignItems=\"center\" justifyContent=\"space-between\">\n <Typography fontWeight=\"semiBold\" textColor=\"neutral800\" ellipsis>\n {children}\n </Typography>\n <Flex>\n <CustomIconButton\n label={formatMessage(\n {\n id: getTrad('containers.ListSettingsView.modal-form.edit-label'),\n defaultMessage: `Edit {fieldName}`,\n },\n { fieldName: children }\n )}\n onClick={onEditField}\n icon={<Pencil />}\n noBorder\n />\n <CustomIconButton\n label={formatMessage(\n {\n id: 'global.delete-target',\n defaultMessage: `Delete {target}`,\n },\n {\n target: children,\n }\n )}\n data-testid=\"delete-field\"\n onClick={onDeleteField}\n icon={<Trash />}\n noBorder\n />\n </Flex>\n </Flex>\n {attribute?.type === 'component' && <ComponentFieldList componentUid={attribute.component} />}\n {attribute?.type === 'dynamiczone' && <DynamicZoneList components={attribute.components} />}\n </Box>\n );\n};\n\nFieldButtonContent.defaultProps = {\n attribute: undefined,\n};\n\nFieldButtonContent.propTypes = {\n attribute: PropTypes.shape({\n components: PropTypes.array,\n component: PropTypes.string,\n type: PropTypes.string,\n }),\n onEditField: PropTypes.func.isRequired,\n onDeleteField: PropTypes.func.isRequired,\n children: PropTypes.string.isRequired,\n};\n\nexport default FieldButtonContent;\n","import React, { useEffect, useRef, useState } from 'react';\n\nimport { Box, Flex, GridItem } from '@strapi/design-system';\nimport { Drag } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useDrag, useDrop } from 'react-dnd';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport styled from 'styled-components';\n\nimport { ItemTypes } from '../../../utils';\nimport { useLayoutDnd } from '../hooks/useLayoutDnd';\n\nimport FieldButtonContent from './FieldButtonContent';\n\nconst Wrapper = styled(Flex)`\n position: relative;\n ${({ isFirst, isLast, hasHorizontalPadding }) => {\n if (isFirst) {\n return `\n padding-right: 4px;\n `;\n }\n if (isLast) {\n return `\n padding-left: 4px;\n `;\n }\n\n if (hasHorizontalPadding) {\n return `\n padding: 0 4px;\n `;\n }\n\n return '';\n }}\n ${({ showRightCarret, showLeftCarret, theme }) => {\n if (showRightCarret) {\n return `\n &:after {\n content: '';\n position: absolute;\n right: -1px;\n background-color: ${theme.colors.primary600};\n width: 2px;\n height: 100%;\n align-self: stretch;\n z-index: 1;\n }\n `;\n }\n\n if (showLeftCarret) {\n return `\n &:before {\n content: '';\n position: absolute;\n left: -1px;\n background-color: ${theme.colors.primary600};\n width: 2px;\n height: 100%;\n align-self: stretch;\n z-index: 1;\n }\n `;\n }\n\n return '';\n }};\n`;\nconst CustomDragIcon = styled(Drag)`\n height: ${12 / 16}rem;\n width: ${12 / 16}rem;\n path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n`;\nconst CustomFlex = styled(Flex)`\n display: ${({ dragStart }) => (dragStart ? 'none' : 'flex')};\n opacity: ${({ isDragging, isFullSize, isHidden }) => {\n if (isDragging && !isFullSize) {\n return 0.2;\n }\n\n if ((isDragging && isFullSize) || isHidden) {\n return 0;\n }\n\n return 1;\n }};\n`;\nconst DragButton = styled(Flex)`\n cursor: all-scroll;\n border-right: 1px solid ${({ theme }) => theme.colors.neutral200};\n`;\n\nconst DisplayedFieldButton = ({\n attribute,\n children,\n index,\n lastIndex,\n moveItem,\n moveRow,\n name,\n onDeleteField,\n onEditField,\n rowIndex,\n size,\n}) => {\n const [dragStart, setDragStart] = useState(false);\n const isHidden = name === '_TEMP_';\n const { setIsDraggingSibling } = useLayoutDnd();\n const isFullSize = size === 12;\n\n const dragRef = useRef(null);\n const dropRef = useRef(null);\n const [{ clientOffset, isOver }, drop] = useDrop({\n accept: ItemTypes.EDIT_FIELD,\n hover(item, monitor) {\n if (!dropRef.current) {\n return;\n }\n\n // We use the hover only to reorder full size items\n if (item.size !== 12) {\n return;\n }\n\n const dragIndex = monitor.getItem().index;\n const hoverIndex = index;\n const dragRow = monitor.getItem().rowIndex;\n const targetRow = rowIndex;\n\n // Don't replace item with themselves\n if (dragIndex === hoverIndex && dragRow === targetRow) {\n return;\n }\n\n // Determine rectangle on screen\n const hoverBoundingRect = dropRef.current.getBoundingClientRect();\n\n // Get vertical middle\n const hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;\n // Determine mouse position\n const clientOffset = monitor.getClientOffset();\n\n // Get pixels to the top\n const hoverClientY = clientOffset.y - hoverBoundingRect.top;\n\n // Only perform the move when the mouse has crossed half of the items height\n // When dragging downwards, only move when the cursor is below 50%\n // When dragging upwards, only move when the cursor is above 50%\n\n // Dragging downwards\n if (dragRow < targetRow && hoverClientY < hoverMiddleY) {\n return;\n }\n\n // Dragging upwards\n if (dragRow > targetRow && hoverClientY > hoverMiddleY) {\n return;\n }\n\n moveRow(dragRow, targetRow);\n\n item.rowIndex = targetRow;\n item.itemIndex = hoverIndex;\n },\n drop(item, monitor) {\n if (!dropRef.current) {\n return;\n }\n\n const dragIndex = monitor.getItem().index;\n const hoverIndex = index;\n const dragRow = monitor.getItem().rowIndex;\n const targetRow = rowIndex;\n\n // Don't reorder on drop for full size elements since it is already done in the hover\n if (item.size === 12) {\n return;\n }\n\n // Don't replace item with themselves\n if (dragIndex === hoverIndex && dragRow === targetRow) {\n return;\n }\n\n // Determine rectangle on screen\n const hoverBoundingRect = dropRef.current.getBoundingClientRect();\n\n // Scroll window if mouse near vertical edge(100px)\n\n // Horizontal Check --\n if (\n Math.abs(monitor.getClientOffset().x - hoverBoundingRect.left) >\n hoverBoundingRect.width / 1.8\n ) {\n moveItem(dragIndex, hoverIndex + 1, dragRow, targetRow);\n\n item.itemIndex = hoverIndex + 1;\n item.rowIndex = targetRow;\n\n return;\n }\n\n // Vertical Check |\n\n // Time to actually perform the action\n moveItem(dragIndex, hoverIndex, dragRow, targetRow);\n // Note: we're mutating the monitor item here!\n // Generally it's better to avoid mutations,\n // but it's good here for the sake of performance\n // to avoid expensive index searches.\n\n item.itemIndex = hoverIndex;\n item.rowIndex = targetRow;\n },\n collect: (monitor) => ({\n canDrop: monitor.canDrop(),\n clientOffset: monitor.getClientOffset(),\n isOver: monitor.isOver(),\n isOverCurrent: monitor.isOver({ shallow: true }),\n itemType: monitor.getItemType(),\n }),\n });\n const [{ isDragging, getItem }, drag, dragPreview] = useDrag({\n type: ItemTypes.EDIT_FIELD,\n item() {\n setIsDraggingSibling(true);\n\n return {\n index,\n labelField: children,\n rowIndex,\n name,\n size,\n };\n },\n canDrag() {\n // Each row of the layout has a max size of 12 (based on bootstrap grid system)\n // So in order to offer a better drop zone we add the _TEMP_ div to complete the remaining substract (12 - existing)\n // Those divs cannot be dragged\n // If we wanted to offer the ability to create new lines in the layout (which will come later)\n // We will need to add a 12 size _TEMP_ div to offer a drop target between each existing row.\n return name !== '_TEMP_';\n },\n collect: (monitor) => ({\n isDragging: monitor.isDragging(),\n getItem: monitor.getItem(),\n }),\n end() {\n setIsDraggingSibling(false);\n },\n });\n\n // Remove the default preview when the item is being dragged\n // The preview is handled by the DragLayer\n useEffect(() => {\n dragPreview(getEmptyImage(), { captureDraggingState: true });\n }, [dragPreview]);\n\n // Create the refs\n // We need 1 for the drop target\n // 1 for the drag target\n const refs = {\n dragRef: drag(dragRef),\n dropRef: drop(dropRef),\n };\n\n let showLeftCarret = false;\n let showRightCarret = false;\n\n if (dropRef.current && clientOffset) {\n const hoverBoundingRect = dropRef.current.getBoundingClientRect();\n\n showLeftCarret =\n isOver &&\n getItem.size !== 12 &&\n Math.abs(clientOffset.x - hoverBoundingRect.left) < hoverBoundingRect.width / 2;\n showRightCarret =\n isOver &&\n getItem.size !== 12 &&\n Math.abs(clientOffset.x - hoverBoundingRect.left) > hoverBoundingRect.width / 2;\n\n if (name === '_TEMP_') {\n showLeftCarret = isOver && getItem.size !== 12;\n showRightCarret = false;\n }\n }\n\n const getHeight = () => {\n if (attribute && isFullSize) {\n return `${74 / 16}rem`;\n }\n\n return `${32 / 16}rem`;\n };\n\n const isFirst = index === 0 && !isFullSize;\n const isLast = index === lastIndex && !isFullSize;\n const hasHorizontalPadding = index !== 0 && !isFullSize;\n\n return (\n <GridItem col={size}>\n <Wrapper\n ref={refs.dropRef}\n showLeftCarret={showLeftCarret}\n showRightCarret={showRightCarret}\n isFirst={isFirst}\n isLast={isLast}\n hasHorizontalPadding={hasHorizontalPadding}\n onDrag={() => {\n if (isFullSize && !dragStart) {\n setDragStart(true);\n }\n }}\n onDragEnd={() => {\n if (isFullSize) {\n setDragStart(false);\n }\n }}\n >\n {dragStart && isFullSize && (\n <Box\n // style={{ display: isDragging ? 'block' : 'none' }}\n width=\"100%\"\n height=\"2px\"\n background=\"primary600\"\n />\n )}\n <CustomFlex\n width={isFullSize && dragStart ? 0 : '100%'}\n borderColor=\"neutral150\"\n hasRadius\n background=\"neutral100\"\n minHeight={getHeight()}\n alignItems=\"stretch\"\n isDragging={isDragging}\n dragStart={dragStart}\n isFullSize={isFullSize}\n isHidden={isHidden}\n >\n <DragButton\n as=\"span\"\n type=\"button\"\n ref={refs.dragRef}\n onClick={(e) => e.stopPropagation()}\n alignItems=\"center\"\n paddingLeft={3}\n paddingRight={3}\n // Disable the keyboard navigation since the drag n drop isn't accessible with the keyboard for the moment\n tabIndex={-1}\n >\n <CustomDragIcon />\n </DragButton>\n {!isHidden && (\n <FieldButtonContent\n attribute={attribute}\n onEditField={onEditField}\n onDeleteField={onDeleteField}\n >\n {children}\n </FieldButtonContent>\n )}\n </CustomFlex>\n </Wrapper>\n </GridItem>\n );\n};\n\nDisplayedFieldButton.defaultProps = {\n attribute: undefined,\n};\n\nDisplayedFieldButton.propTypes = {\n attribute: PropTypes.shape({\n components: PropTypes.array,\n component: PropTypes.string,\n type: PropTypes.string,\n }),\n children: PropTypes.string.isRequired,\n index: PropTypes.number.isRequired,\n moveItem: PropTypes.func.isRequired,\n moveRow: PropTypes.func.isRequired,\n name: PropTypes.string.isRequired,\n onDeleteField: PropTypes.func.isRequired,\n onEditField: PropTypes.func.isRequired,\n rowIndex: PropTypes.number.isRequired,\n lastIndex: PropTypes.number.isRequired,\n size: PropTypes.number.isRequired,\n};\n\nexport default DisplayedFieldButton;\n","import React from 'react';\n\nimport get from 'lodash/get';\nimport PropTypes from 'prop-types';\n\nimport { useLayoutDnd } from '../hooks/useLayoutDnd';\n\nimport DisplayedFieldButton from './DisplayedFieldButton';\n\nconst RowItemsLayout = ({ rowItem, onRemoveField, rowId, rowIndex, index, lastIndex }) => {\n const { setEditFieldToSelect, attributes, modifiedData, moveRow, moveItem } = useLayoutDnd();\n const attribute = get(attributes, [rowItem.name], {});\n const attributeLabel = get(modifiedData, ['metadatas', rowItem.name, 'edit', 'label'], '');\n\n return (\n <DisplayedFieldButton\n onEditField={() => setEditFieldToSelect(rowItem.name)}\n onDeleteField={() => onRemoveField(rowId, index)}\n attribute={attribute}\n index={index}\n lastIndex={lastIndex}\n rowIndex={rowIndex}\n name={rowItem.name}\n size={rowItem.size}\n moveRow={moveRow}\n moveItem={moveItem}\n >\n {attributeLabel || rowItem.name}\n </DisplayedFieldButton>\n );\n};\n\nRowItemsLayout.propTypes = {\n index: PropTypes.number.isRequired,\n lastIndex: PropTypes.number.isRequired,\n onRemoveField: PropTypes.func.isRequired,\n rowId: PropTypes.number.isRequired,\n rowIndex: PropTypes.number.isRequired,\n rowItem: PropTypes.object.isRequired,\n};\n\nexport default RowItemsLayout;\n","import React from 'react';\n\nimport { Grid } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\n\nimport RowItemsLayout from './RowItemsLayout';\n\nconst RowsLayout = ({ row, onRemoveField, rowIndex }) => {\n return (\n <Grid>\n {row.rowContent.map((rowItem, index) => {\n return (\n <RowItemsLayout\n key={rowItem.name}\n rowItem={rowItem}\n index={index}\n rowId={row.rowId}\n onRemoveField={onRemoveField}\n rowIndex={rowIndex}\n lastIndex={row.rowContent.length - 1}\n />\n );\n })}\n </Grid>\n );\n};\n\nRowsLayout.propTypes = {\n onRemoveField: PropTypes.func.isRequired,\n row: PropTypes.object.isRequired,\n rowIndex: PropTypes.number.isRequired,\n};\n\nexport default RowsLayout;\n","import React from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { Menu } from '@strapi/design-system/v2';\nimport { Plus } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../../utils';\n\nimport LinkToCTB from './LinkToCTB';\nimport RowsLayout from './RowsLayout';\n\nconst DisplayedFields = ({ editLayout, fields, onRemoveField, onAddField }) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex justifyContent=\"space-between\">\n <div>\n <Box>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: getTrad('containers.ListPage.displayedFields'),\n defaultMessage: 'Displayed fields',\n })}\n </Typography>\n </Box>\n <Box>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'containers.SettingPage.editSettings.description',\n defaultMessage: 'Drag & drop the fields to build the layout',\n })}\n </Typography>\n </Box>\n </div>\n <LinkToCTB />\n </Flex>\n <Box padding={4} hasRadius borderStyle=\"dashed\" borderWidth=\"1px\" borderColor=\"neutral300\">\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n {editLayout.map((row, index) => (\n <RowsLayout key={row.rowId} row={row} rowIndex={index} onRemoveField={onRemoveField} />\n ))}\n <Menu.Root>\n <Menu.Trigger\n startIcon={<Plus />}\n endIcon={null}\n disabled={fields.length === 0}\n fullWidth\n variant=\"secondary\"\n >\n {formatMessage({\n id: getTrad('containers.SettingPage.add.field'),\n defaultMessage: 'Insert another field',\n })}\n </Menu.Trigger>\n <Menu.Content>\n {fields.map((field) => (\n <Menu.Item key={field} onSelect={() => onAddField(field)}>\n {field}\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Root>\n </Flex>\n </Box>\n </Flex>\n );\n};\n\nDisplayedFields.propTypes = {\n editLayout: PropTypes.array.isRequired,\n fields: PropTypes.array.isRequired,\n onAddField: PropTypes.func.isRequired,\n onRemoveField: PropTypes.func.isRequired,\n};\n\nexport default DisplayedFields;\n","import React from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport { useCustomFields } from '@strapi/helper-plugin';\nimport {\n Boolean,\n Component,\n Date,\n DynamicZone,\n Email,\n Enumeration,\n Json,\n Media,\n Number,\n Relation,\n Text,\n Uid,\n} from '@strapi/icons';\nimport PropTypes from 'prop-types';\n\nconst iconByTypes = {\n biginteger: <Number />,\n boolean: <Boolean />,\n date: <Date />,\n datetime: <Date />,\n decimal: <Number />,\n email: <Email />,\n enum: <Enumeration />,\n enumeration: <Enumeration />,\n file: <Media />,\n files: <Media />,\n float: <Number />,\n integer: <Number />,\n media: <Media />,\n number: <Number />,\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};\n\nconst FieldTypeIcon = ({ type, customFieldUid }) => {\n const customFieldsRegistry = useCustomFields();\n\n let Compo = iconByTypes[type];\n\n if (customFieldUid) {\n const customField = customFieldsRegistry.get(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\nFieldTypeIcon.defaultProps = {\n customFieldUid: null,\n};\n\nFieldTypeIcon.propTypes = {\n type: PropTypes.string.isRequired,\n customFieldUid: PropTypes.string,\n};\n\nexport default FieldTypeIcon;\n","const createPossibleMainFieldsForModelsAndComponents = (array) => {\n return array.reduce((acc, current) => {\n const attributes = current?.attributes ?? {};\n const possibleMainFields = Object.keys(attributes).filter((attr) => {\n return ![\n 'boolean',\n 'component',\n 'dynamiczone',\n 'json',\n 'media',\n 'password',\n 'relation',\n 'text',\n 'richtext',\n 'blocks',\n ].includes(attributes?.[attr]?.type ?? '');\n });\n\n acc[current.uid] = possibleMainFields;\n\n return acc;\n }, {});\n};\n\nexport default createPossibleMainFieldsForModelsAndComponents;\n","import { getTrad } from '../../../utils';\n\nconst getInputProps = (fieldName) => {\n let type;\n\n switch (fieldName) {\n case 'description':\n case 'label':\n case 'placeholder':\n type = 'text';\n break;\n case 'mainField':\n type = 'select';\n break;\n case 'editable':\n type = 'bool';\n break;\n default:\n type = '';\n }\n\n const labelId =\n fieldName === 'mainField'\n ? getTrad('containers.SettingPage.editSettings.entry.title')\n : getTrad(`form.Input.${fieldName}`);\n\n return { type, label: { id: labelId } };\n};\n\nexport default getInputProps;\n","import React from 'react';\n\nimport { Option, Select, TextInput, ToggleInput } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nconst GenericInput = ({ type, options, onChange, value, name, ...inputProps }) => {\n const { formatMessage } = useIntl();\n\n switch (type) {\n case 'text': {\n return <TextInput onChange={onChange} value={value} name={name} {...inputProps} />;\n }\n case 'bool': {\n return (\n <ToggleInput\n onChange={(e) => {\n onChange({ target: { name, value: e.target.checked } });\n }}\n checked={value}\n name={name}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'On',\n })}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'Off',\n })}\n {...inputProps}\n />\n );\n }\n case 'select': {\n return (\n <Select\n value={value}\n name={name}\n onChange={(value) => onChange({ target: { name, value } })}\n {...inputProps}\n >\n {options.map((option) => (\n <Option key={option} value={option}>\n {option}\n </Option>\n ))}\n </Select>\n );\n }\n default:\n return null;\n }\n};\n\nGenericInput.defaultProps = {\n options: undefined,\n};\n\nGenericInput.propTypes = {\n type: PropTypes.string.isRequired,\n options: PropTypes.arrayOf(PropTypes.string),\n onChange: PropTypes.func.isRequired,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]).isRequired,\n name: PropTypes.string.isRequired,\n};\n\nexport default GenericInput;\n","import React, { useCallback, useMemo } from 'react';\n\nimport { GridItem, Option, Select } from '@strapi/design-system';\nimport get from 'lodash/get';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { shallowEqual, useSelector } from 'react-redux';\n\nimport getTrad from '../../../utils/getTrad';\nimport { makeSelectModelAndComponentSchemas, selectFieldSizes } from '../../App/selectors';\nimport { useLayoutDnd } from '../hooks/useLayoutDnd';\nimport { createPossibleMainFieldsForModelsAndComponents, getInputProps } from '../utils';\n\nimport GenericInput from './GenericInput';\n\nconst FIELD_SIZES = [\n [4, '33%'],\n [6, '50%'],\n [8, '66%'],\n [12, '100%'],\n];\n\nconst ModalForm = ({ onMetaChange, onSizeChange }) => {\n const { formatMessage } = useIntl();\n const { modifiedData, selectedField, attributes, fieldForm } = useLayoutDnd();\n const schemasSelector = useMemo(makeSelectModelAndComponentSchemas, []);\n const { schemas } = useSelector((state) => schemasSelector(state), shallowEqual);\n const fieldSizes = useSelector(selectFieldSizes);\n\n const formToDisplay = useMemo(() => {\n if (!selectedField) {\n return [];\n }\n\n const associatedMetas = get(modifiedData, ['metadatas', selectedField, 'edit'], {});\n\n return Object.keys(associatedMetas).filter((meta) => meta !== 'visible');\n }, [selectedField, modifiedData]);\n\n const componentsAndModelsPossibleMainFields = useMemo(() => {\n return createPossibleMainFieldsForModelsAndComponents(schemas);\n }, [schemas]);\n\n const getSelectedItemSelectOptions = useCallback(\n (formType) => {\n if (formType !== 'relation' && formType !== 'component') {\n return [];\n }\n\n const targetKey = formType === 'component' ? 'component' : 'targetModel';\n const key = get(modifiedData, ['attributes', selectedField, targetKey], '');\n\n return get(componentsAndModelsPossibleMainFields, [key], []);\n },\n\n [selectedField, componentsAndModelsPossibleMainFields, modifiedData]\n );\n\n const metaFields = formToDisplay.map((meta) => {\n const formType = get(attributes, [selectedField, 'type']);\n\n if (\n ['component', 'dynamiczone'].includes(formType) &&\n !['label', 'description'].includes(meta)\n ) {\n return null;\n }\n\n if (formType === 'component' && meta !== 'label') {\n return null;\n }\n\n if (['media', 'json', 'boolean'].includes(formType) && meta === 'placeholder') {\n return null;\n }\n\n if (meta === 'step') {\n return null;\n }\n\n return (\n <GridItem col={6} key={meta}>\n <GenericInput\n type={getInputProps(meta).type}\n hint={\n meta === 'mainField'\n ? formatMessage({\n id: getTrad('containers.SettingPage.editSettings.relation-field.description'),\n })\n : ''\n }\n label={formatMessage({\n id: get(getInputProps(meta), 'label.id', 'app.utils.defaultMessage'),\n })}\n name={meta}\n onChange={onMetaChange}\n value={get(fieldForm, ['metadata', meta], '')}\n options={getSelectedItemSelectOptions(formType)}\n />\n </GridItem>\n );\n });\n\n // Check for a custom input provided by a custom field, or use the default one for that type\n const { type, customField } = attributes[selectedField];\n const { isResizable } = fieldSizes[customField] ?? fieldSizes[type];\n\n return (\n <>\n {metaFields}\n {isResizable && (\n <GridItem col={6} key=\"size\">\n <Select\n value={fieldForm?.size}\n name=\"size\"\n onChange={(value) => {\n onSizeChange({ name: selectedField, value });\n }}\n label={formatMessage({\n id: getTrad('containers.SettingPage.editSettings.size.label'),\n defaultMessage: 'Size',\n })}\n >\n {FIELD_SIZES.map(([value, label]) => (\n <Option key={value} value={value}>\n {label}\n </Option>\n ))}\n </Select>\n </GridItem>\n )}\n </>\n );\n};\n\nModalForm.propTypes = {\n onMetaChange: PropTypes.func.isRequired,\n onSizeChange: PropTypes.func.isRequired,\n};\n\nexport default ModalForm;\n","import React from 'react';\n\nimport {\n Button,\n Flex,\n Grid,\n ModalBody,\n ModalFooter,\n ModalHeader,\n ModalLayout,\n Typography,\n} from '@strapi/design-system';\nimport upperFirst from 'lodash/upperFirst';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport FieldTypeIcon from '../../../components/FieldTypeIcon';\nimport { getTrad } from '../../../utils';\nimport { useLayoutDnd } from '../hooks/useLayoutDnd';\n\nimport ModalForm from './ModalForm';\n\nconst HeaderContainer = styled(Flex)`\n svg {\n width: ${32 / 16}rem;\n height: ${24 / 16}rem;\n margin-right: ${({ theme }) => theme.spaces[3]};\n }\n`;\n\nconst FormModal = ({ onToggle, onMetaChange, onSizeChange, onSubmit, type, customFieldUid }) => {\n const { selectedField } = useLayoutDnd();\n const { formatMessage } = useIntl();\n\n const getAttrType = () => {\n if (type === 'timestamp') {\n return 'date';\n }\n\n if (['decimal', 'float', 'integer', 'biginter'].includes(type)) {\n return 'number';\n }\n\n return type;\n };\n\n return (\n <ModalLayout onClose={onToggle} labelledBy=\"title\">\n <form onSubmit={onSubmit}>\n <ModalHeader>\n <HeaderContainer>\n <FieldTypeIcon type={getAttrType()} customFieldUid={customFieldUid} />\n <Typography fontWeight=\"bold\" textColor=\"neutral800\" as=\"h2\" id=\"title\">\n {formatMessage(\n {\n id: getTrad('containers.ListSettingsView.modal-form.edit-label'),\n defaultMessage: 'Edit {fieldName}',\n },\n { fieldName: upperFirst(selectedField) }\n )}\n </Typography>\n </HeaderContainer>\n </ModalHeader>\n <ModalBody>\n <Grid gap={4}>\n <ModalForm onMetaChange={onMetaChange} onSizeChange={onSizeChange} />\n </Grid>\n </ModalBody>\n <ModalFooter\n startActions={\n <Button onClick={onToggle} variant=\"tertiary\">\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n }\n endActions={\n <Button type=\"submit\">\n {formatMessage({ id: 'global.finish', defaultMessage: 'Finish' })}\n </Button>\n }\n />\n </form>\n </ModalLayout>\n );\n};\n\nFormModal.defaultProps = {\n customFieldUid: null,\n};\n\nFormModal.propTypes = {\n customFieldUid: PropTypes.string,\n onSubmit: PropTypes.func.isRequired,\n onToggle: PropTypes.func.isRequired,\n onMetaChange: PropTypes.func.isRequired,\n onSizeChange: PropTypes.func.isRequired,\n type: PropTypes.string.isRequired,\n};\n\nexport default FormModal;\n","const getRowSize = (arr) => arr.reduce((sum, value) => sum + value.size, 0);\n\nconst createLayout = (arr) => {\n return arr.reduce((acc, current, index) => {\n const row = { rowId: index, rowContent: current };\n\n return acc.concat(row);\n }, []);\n};\n\nconst formatLayout = (arr) => {\n return arr\n .reduce((acc, current) => {\n let toPush = [];\n const currentRow = current.rowContent.reduce((acc2, curr) => {\n const acc2Size = getRowSize(acc2);\n\n if (curr.name === '_TEMP_') {\n return acc2;\n }\n\n if (acc2Size + curr.size <= 12) {\n acc2.push(curr);\n } else {\n toPush.push(curr);\n }\n\n return acc2;\n }, []);\n const rowId =\n acc.length === 0\n ? 0\n : Math.max.apply(\n Math,\n acc.map((o) => o.rowId)\n ) + 1;\n\n const currentRowSize = getRowSize(currentRow);\n\n if (currentRowSize < 12) {\n currentRow.push({ name: '_TEMP_', size: 12 - currentRowSize });\n }\n\n acc.push({ rowId, rowContent: currentRow });\n\n if (toPush.length > 0) {\n const toPushSize = getRowSize(toPush);\n\n if (toPushSize < 12) {\n toPush.push({ name: '_TEMP_', size: 12 - toPushSize });\n }\n\n acc.push({ rowId: rowId + 1, rowContent: toPush });\n toPush = [];\n }\n\n return acc;\n }, [])\n .filter((row) => row.rowContent.length > 0)\n .filter((row) => {\n if (row.rowContent.length === 1) {\n return row.rowContent[0].name !== '_TEMP_';\n }\n\n return true;\n });\n};\n\nconst unformatLayout = (arr) => {\n return arr.reduce((acc, current) => {\n const currentRow = current.rowContent.filter((content) => content.name !== '_TEMP_');\n\n return acc.concat([currentRow]);\n }, []);\n};\n\nconst getFieldSize = (name, layouts = []) => {\n return layouts.reduce((acc, { rowContent }) => {\n const size = rowContent.find((row) => row.name === name)?.size ?? null;\n\n if (size) {\n acc = size;\n }\n\n return acc;\n }, null);\n};\n\nconst setFieldSize = (name, size, layouts = []) => {\n return layouts.map((row) => {\n row.rowContent = row.rowContent.map((column) => {\n if (column.name === name) {\n return {\n ...column,\n size,\n };\n }\n\n return column;\n });\n\n return row;\n });\n};\n\nexport { createLayout, formatLayout, getFieldSize, getRowSize, setFieldSize, unformatLayout };\n","import cloneDeep from 'lodash/cloneDeep';\nimport set from 'lodash/set';\n\nimport { createLayout, formatLayout } from './utils/layout';\n\nconst init = (initialState, mainLayout, components) => {\n let initialData = cloneDeep(mainLayout);\n\n set(initialData, ['layouts', 'edit'], formatLayout(createLayout(mainLayout.layouts.edit)));\n\n return {\n ...initialState,\n initialData,\n modifiedData: initialData,\n componentLayouts: components,\n };\n};\n\nexport default init;\n","import produce from 'immer';\nimport cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport set from 'lodash/set';\n\nimport { arrayMoveItem } from '../../utils';\n\nimport { formatLayout, getFieldSize, setFieldSize } from './utils/layout';\n\nconst DEFAULT_FIELD_SIZE = 6;\n\nconst initialState = {\n fieldForm: {},\n componentLayouts: {},\n metaToEdit: '',\n initialData: {},\n metaForm: {},\n modifiedData: {},\n};\n\nconst reducer = (state = initialState, action) =>\n // eslint-disable-next-line consistent-return\n produce(state, (draftState) => {\n const layoutPathEdit = ['modifiedData', 'layouts', 'edit'];\n\n switch (action.type) {\n case 'MOVE_ROW': {\n const editFieldLayoutValue = get(state, layoutPathEdit, []);\n const { fromIndex, toIndex } = action;\n set(draftState, layoutPathEdit, arrayMoveItem(editFieldLayoutValue, fromIndex, toIndex));\n break;\n }\n case 'ON_ADD_FIELD': {\n const newState = cloneDeep(state);\n const attribute = get(newState, ['modifiedData', 'attributes', action.name], {});\n\n // Get the default size, checking custom fields first, then the type and generic defaults\n const size =\n action.fieldSizes[attribute?.customField]?.default ??\n action.fieldSizes[attribute?.type]?.default ??\n DEFAULT_FIELD_SIZE;\n\n const listSize = get(newState, layoutPathEdit, []).length;\n const actualRowContentPath = [...layoutPathEdit, listSize - 1, 'rowContent'];\n const rowContentToSet = get(newState, actualRowContentPath, []);\n let newList = get(newState, layoutPathEdit, []);\n\n if (Array.isArray(rowContentToSet)) {\n set(\n newList,\n [listSize > 0 ? listSize - 1 : 0, 'rowContent'],\n [...rowContentToSet, { name: action.name, size }]\n );\n } else {\n set(\n newList,\n [listSize > 0 ? listSize - 1 : 0, 'rowContent'],\n [{ name: action.name, size }]\n );\n }\n\n const formattedList = formatLayout(newList);\n set(draftState, layoutPathEdit, formattedList);\n break;\n }\n case 'ON_CHANGE': {\n set(draftState, ['modifiedData', ...action.keys], action.value);\n break;\n }\n case 'ON_CHANGE_META': {\n set(draftState, ['metaForm', 'metadata', ...action.keys], action.value);\n break;\n }\n case 'ON_CHANGE_SIZE': {\n set(draftState, ['metaForm', 'size'], action.value);\n break;\n }\n case 'ON_RESET': {\n draftState.modifiedData = state.initialData;\n break;\n }\n case 'REMOVE_FIELD': {\n const row = get(state, [...layoutPathEdit, action.rowIndex, 'rowContent'], []);\n let newState = cloneDeep(state);\n\n if (row.length === 1 || (row.length === 2 && get(row, [1, 'name'], '') === '_TEMP_')) {\n const currentRowFieldList = get(state, layoutPathEdit, []);\n set(\n newState,\n layoutPathEdit,\n currentRowFieldList.filter((_, index) => action.rowIndex !== index)\n );\n } else {\n set(\n newState,\n [...layoutPathEdit, action.rowIndex, 'rowContent'],\n row.filter((_, index) => index !== action.fieldIndex)\n );\n }\n const updatedList = formatLayout(get(newState, layoutPathEdit, []));\n set(draftState, layoutPathEdit, updatedList);\n break;\n }\n case 'REORDER_DIFF_ROW': {\n const actualRowContent = get(\n state,\n [...layoutPathEdit, action.dragRowIndex, 'rowContent'],\n []\n );\n const targetRowContent = get(\n state,\n [...layoutPathEdit, action.hoverRowIndex, 'rowContent'],\n []\n );\n const itemToInsert = get(\n state,\n [...layoutPathEdit, action.dragRowIndex, 'rowContent', action.dragIndex],\n {}\n );\n const rowContent = [...targetRowContent, itemToInsert];\n let newState = cloneDeep(state);\n\n set(\n newState,\n [...layoutPathEdit, action.dragRowIndex, 'rowContent'],\n actualRowContent.filter((_, index) => action.dragIndex !== index)\n );\n set(\n newState,\n [...layoutPathEdit, action.hoverRowIndex, 'rowContent'],\n arrayMoveItem(rowContent, rowContent.length - 1, action.hoverIndex)\n );\n\n const updatedList = formatLayout(get(newState, layoutPathEdit, []));\n set(draftState, layoutPathEdit, updatedList);\n break;\n }\n case 'REORDER_ROW': {\n const newState = cloneDeep(state);\n const rowContent = get(\n newState,\n [...layoutPathEdit, action.dragRowIndex, 'rowContent'],\n []\n );\n\n set(\n newState,\n [...layoutPathEdit, action.dragRowIndex, 'rowContent'],\n arrayMoveItem(rowContent, action.dragIndex, action.hoverIndex)\n );\n\n const updatedList = formatLayout(get(newState, layoutPathEdit, []));\n set(draftState, layoutPathEdit, updatedList);\n break;\n }\n case 'SET_FIELD_TO_EDIT': {\n draftState.metaToEdit = action.name;\n draftState.metaForm = {\n metadata: get(state, ['modifiedData', 'metadatas', action.name, 'edit'], {}),\n size: getFieldSize(action.name, state.modifiedData?.layouts?.edit) ?? DEFAULT_FIELD_SIZE,\n };\n\n break;\n }\n case 'SUBMIT_META_FORM': {\n set(\n draftState,\n ['modifiedData', 'metadatas', state.metaToEdit, 'edit'],\n state.metaForm.metadata\n );\n\n const layoutsCopy = cloneDeep(get(state, layoutPathEdit, []));\n const nextLayoutValue = setFieldSize(state.metaToEdit, state.metaForm.size, layoutsCopy);\n\n if (nextLayoutValue.length > 0) {\n set(draftState, layoutPathEdit, formatLayout(nextLayoutValue));\n }\n\n break;\n }\n case 'SUBMIT_SUCCEEDED': {\n draftState.initialData = state.modifiedData;\n break;\n }\n case 'UNSET_FIELD_TO_EDIT': {\n draftState.metaToEdit = '';\n draftState.metaForm = {};\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default reducer;\nexport { initialState };\n","import React, { useReducer, useState } from 'react';\n\nimport {\n Box,\n Button,\n ContentLayout,\n Divider,\n Flex,\n Grid,\n GridItem,\n HeaderLayout,\n Main,\n Option,\n Select,\n Typography,\n} from '@strapi/design-system';\nimport {\n ConfirmDialog,\n Link,\n useFetchClient,\n useNotification,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { ArrowLeft, Check } from '@strapi/icons';\nimport cloneDeep from 'lodash/cloneDeep';\nimport isEqual from 'lodash/isEqual';\nimport upperFirst from 'lodash/upperFirst';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { useMutation } from 'react-query';\nimport { useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n\nimport { getTrad } from '../../utils';\nimport { selectFieldSizes } from '../App/selectors';\n\nimport DisplayedFields from './components/DisplayedFields';\nimport ModalForm from './components/FormModal';\nimport { LayoutDndProvider } from './components/LayoutDndProvider';\nimport init from './init';\nimport reducer, { initialState } from './reducer';\nimport { unformatLayout } from './utils/layout';\n\nconst EditSettingsView = ({ mainLayout, components, isContentTypeView, slug, updateLayout }) => {\n const [reducerState, dispatch] = useReducer(reducer, initialState, () =>\n init(initialState, mainLayout, components)\n );\n const [isDraggingSibling, setIsDraggingSibling] = useState(false);\n const { trackUsage } = useTracking();\n const toggleNotification = useNotification();\n const { goBack } = useHistory();\n const [isModalFormOpen, setIsModalFormOpen] = useState(false);\n const [isConfirmDialogOpen, setIsConfirmDialogOpen] = useState(false);\n const { componentLayouts, initialData, modifiedData, metaToEdit, metaForm } = reducerState;\n const { formatMessage } = useIntl();\n const modelName = mainLayout.info.displayName;\n const attributes = modifiedData?.attributes ?? {};\n const fieldSizes = useSelector(selectFieldSizes);\n const { put } = useFetchClient();\n\n const entryTitleOptions = Object.keys(attributes).filter((attr) => {\n const type = attributes?.[attr]?.type ?? '';\n\n return (\n ![\n 'dynamiczone',\n 'json',\n 'text',\n 'relation',\n 'component',\n 'boolean',\n 'media',\n 'password',\n 'richtext',\n 'timestamp',\n 'blocks',\n ].includes(type) && !!type\n );\n });\n const editLayout = modifiedData.layouts.edit;\n const displayedFields = editLayout.flatMap((layout) => layout.rowContent);\n const editLayoutFields = Object.keys(modifiedData.attributes)\n .filter((attr) => (modifiedData?.metadatas?.[attr]?.edit?.visible ?? false) === true)\n .filter((attr) => displayedFields.findIndex((el) => el.name === attr) === -1)\n .sort();\n\n const handleChange = ({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE',\n keys: name.split('.'),\n value,\n });\n };\n\n const handleToggleModal = () => {\n setIsModalFormOpen((prev) => !prev);\n };\n\n const toggleConfirmDialog = () => {\n setIsConfirmDialogOpen((prev) => !prev);\n };\n\n const handleMetaChange = ({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE_META',\n keys: name.split('.'),\n value,\n });\n };\n\n const handleSizeChange = ({ name, value }) => {\n dispatch({\n type: 'ON_CHANGE_SIZE',\n name,\n value,\n });\n };\n\n const handleMetaSubmit = (e) => {\n e.preventDefault();\n dispatch({\n type: 'SUBMIT_META_FORM',\n });\n handleToggleModal();\n };\n\n const handleSubmit = (e) => {\n e.preventDefault();\n toggleConfirmDialog();\n };\n\n const submitMutation = useMutation(\n (body) => {\n return put(\n isContentTypeView\n ? `/content-manager/content-types/${slug}/configuration`\n : `/content-manager/components/${slug}/configuration`,\n body\n );\n },\n {\n onSuccess({ data }) {\n if (updateLayout) {\n updateLayout(data.data);\n }\n dispatch({\n type: 'SUBMIT_SUCCEEDED',\n });\n toggleConfirmDialog();\n trackUsage('didEditEditSettings');\n },\n onError() {\n toggleNotification({ type: 'warning', message: { id: 'notification.error' } });\n },\n }\n );\n const { isLoading: isSubmittingForm } = submitMutation;\n\n const handleConfirm = () => {\n const { layouts, metadatas, settings } = cloneDeep(modifiedData);\n submitMutation.mutate({\n layouts: {\n ...layouts,\n edit: unformatLayout(layouts.edit),\n },\n metadatas,\n settings,\n });\n };\n\n const handleMoveRelation = (fromIndex, toIndex) => {\n dispatch({\n type: 'MOVE_RELATION',\n fromIndex,\n toIndex,\n });\n };\n\n const handleMoveField = (fromIndex, toIndex) => {\n dispatch({\n type: 'MOVE_FIELD',\n fromIndex,\n toIndex,\n });\n };\n\n const moveItem = (dragIndex, hoverIndex, dragRowIndex, hoverRowIndex) => {\n // Same row = just reorder\n if (dragRowIndex === hoverRowIndex) {\n dispatch({\n type: 'REORDER_ROW',\n dragRowIndex,\n dragIndex,\n hoverIndex,\n });\n } else {\n dispatch({\n type: 'REORDER_DIFF_ROW',\n dragIndex,\n hoverIndex,\n dragRowIndex,\n hoverRowIndex,\n });\n }\n };\n\n const moveRow = (fromIndex, toIndex) => {\n dispatch({\n type: 'MOVE_ROW',\n fromIndex,\n toIndex,\n });\n };\n\n return (\n <LayoutDndProvider\n isContentTypeView={isContentTypeView}\n attributes={attributes}\n modifiedData={modifiedData}\n slug={slug}\n componentLayouts={componentLayouts}\n selectedField={metaToEdit}\n fieldForm={metaForm}\n onMoveRelation={handleMoveRelation}\n onMoveField={handleMoveField}\n moveRow={moveRow}\n moveItem={moveItem}\n setEditFieldToSelect={(name) => {\n dispatch({\n type: 'SET_FIELD_TO_EDIT',\n name,\n });\n handleToggleModal();\n }}\n isDraggingSibling={isDraggingSibling}\n setIsDraggingSibling={setIsDraggingSibling}\n >\n <Main>\n <form onSubmit={handleSubmit}>\n <HeaderLayout\n title={formatMessage(\n {\n id: getTrad('components.SettingsViewWrapper.pluginHeader.title'),\n defaultMessage: `Configure the view - ${upperFirst(modelName)}`,\n },\n { name: upperFirst(modelName) }\n )}\n subtitle={formatMessage({\n id: getTrad('components.SettingsViewWrapper.pluginHeader.description.edit-settings'),\n defaultMessage: 'Customize how the edit view will look like.',\n })}\n navigationAction={\n <Link\n startIcon={<ArrowLeft />}\n onClick={(e) => {\n e.preventDefault();\n goBack();\n }}\n to=\"/\"\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n primaryAction={\n <Button\n disabled={isEqual(initialData, modifiedData)}\n startIcon={<Check />}\n type=\"submit\"\n >\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n />\n <ContentLayout>\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: getTrad('containers.SettingPage.settings'),\n defaultMessage: 'Settings',\n })}\n </Typography>\n <Grid>\n <GridItem col={6} s={12}>\n <Select\n label={formatMessage({\n id: getTrad('containers.SettingPage.editSettings.entry.title'),\n defaultMessage: 'Entry title',\n })}\n hint={formatMessage({\n id: getTrad('containers.SettingPage.editSettings.entry.title.description'),\n defaultMessage: 'Set the display field of your entry',\n })}\n onChange={(value) => {\n handleChange({\n target: {\n name: 'settings.mainField',\n value: value === '' ? null : value,\n },\n });\n }}\n value={modifiedData.settings.mainField}\n >\n {entryTitleOptions.map((attribute) => (\n <Option key={attribute} value={attribute}>\n {attribute}\n </Option>\n ))}\n </Select>\n </GridItem>\n </Grid>\n <Box paddingTop={2} paddingBottom={2}>\n <Divider />\n </Box>\n <Typography variant=\"delta\" as=\"h3\">\n {formatMessage({\n id: getTrad('containers.SettingPage.view'),\n defaultMessage: 'View',\n })}\n </Typography>\n\n <DisplayedFields\n attributes={attributes}\n editLayout={editLayout}\n fields={editLayoutFields}\n onAddField={(field) => {\n dispatch({\n type: 'ON_ADD_FIELD',\n name: field,\n fieldSizes,\n });\n }}\n onRemoveField={(rowId, index) => {\n dispatch({\n type: 'REMOVE_FIELD',\n rowIndex: rowId,\n fieldIndex: index,\n });\n }}\n />\n </Flex>\n </Box>\n </ContentLayout>\n <ConfirmDialog\n bodyText={{\n id: getTrad('popUpWarning.warning.updateAllSettings'),\n defaultMessage: 'This will modify all your settings',\n }}\n iconRightButton={<Check />}\n isConfirmButtonLoading={isSubmittingForm}\n isOpen={isConfirmDialogOpen}\n onToggleDialog={toggleConfirmDialog}\n onConfirm={handleConfirm}\n variantRightButton=\"success-light\"\n />\n </form>\n {isModalFormOpen && (\n <ModalForm\n onSubmit={handleMetaSubmit}\n onToggle={handleToggleModal}\n onMetaChange={handleMetaChange}\n onSizeChange={handleSizeChange}\n type={attributes?.[metaToEdit]?.type ?? ''}\n customFieldUid={attributes?.[metaToEdit]?.customField ?? ''}\n />\n )}\n </Main>\n </LayoutDndProvider>\n );\n};\n\nEditSettingsView.defaultProps = {\n isContentTypeView: false,\n updateLayout: null,\n};\n\nEditSettingsView.propTypes = {\n components: PropTypes.object.isRequired,\n isContentTypeView: PropTypes.bool,\n mainLayout: PropTypes.shape({\n attributes: PropTypes.object.isRequired,\n info: PropTypes.object.isRequired,\n layouts: PropTypes.shape({\n list: PropTypes.array.isRequired,\n edit: PropTypes.array.isRequired,\n }).isRequired,\n metadatas: PropTypes.object.isRequired,\n options: PropTypes.object.isRequired,\n }).isRequired,\n slug: PropTypes.string.isRequired,\n updateLayout: PropTypes.func,\n};\n\nexport default EditSettingsView;\n","import { RESET_PROPS, SET_LAYOUT } from './constants';\n\nexport const resetProps = () => ({ type: RESET_PROPS });\n\nexport const setLayout = (layout, query) => ({\n type: SET_LAYOUT,\n layout,\n query,\n});\n","import {\n CLEAR_SET_MODIFIED_DATA_ONLY,\n GET_DATA,\n GET_DATA_SUCCEEDED,\n INIT_FORM,\n RESET_PROPS,\n SET_DATA_STRUCTURES,\n SET_STATUS,\n SUBMIT_SUCCEEDED,\n} from './constants';\n\nexport const getData = () => {\n return {\n type: GET_DATA,\n };\n};\n\nexport const getDataSucceeded = (data) => ({\n type: GET_DATA_SUCCEEDED,\n data,\n});\n\nexport const initForm = (rawQuery, isSingleType = false) => ({\n type: INIT_FORM,\n rawQuery,\n isSingleType,\n});\n\nexport const resetProps = () => ({ type: RESET_PROPS });\n\nexport const setDataStructures = (componentsDataStructure, contentTypeDataStructure) => ({\n type: SET_DATA_STRUCTURES,\n componentsDataStructure,\n contentTypeDataStructure,\n});\n\nexport const setStatus = (status) => ({\n type: SET_STATUS,\n status,\n});\n\nexport const submitSucceeded = (data) => ({\n type: SUBMIT_SUCCEEDED,\n data,\n});\n\nexport const clearSetModifiedDataOnly = () => ({\n type: CLEAR_SET_MODIFIED_DATA_ONLY,\n});\n","const selectCrudReducer = (state) => state['content-manager_editViewCrudReducer'];\n\nexport default selectCrudReducer;\n","import { memo, useCallback, useEffect, useRef } from 'react';\n\nimport {\n formatContentTypeData,\n useAPIErrorHandler,\n useFetchClient,\n useGuidedTour,\n useNotification,\n useQueryParams,\n useTracking,\n} from '@strapi/helper-plugin';\nimport axios from 'axios';\nimport get from 'lodash/get';\nimport isEqual from 'lodash/isEqual';\nimport PropTypes from 'prop-types';\nimport { useQueryClient } from 'react-query';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n\nimport { useFindRedirectionLink } from '../../hooks';\nimport {\n getData,\n getDataSucceeded,\n initForm,\n resetProps,\n setDataStructures,\n setStatus,\n submitSucceeded,\n} from '../../sharedReducers/crudReducer/actions';\nimport selectCrudReducer from '../../sharedReducers/crudReducer/selectors';\nimport { createDefaultForm, getTrad, removePasswordFieldsFromData } from '../../utils';\n\n// This container is used to handle the CRUD\nconst CollectionTypeFormWrapper = ({ allLayoutData, children, slug, id, origin }) => {\n const queryClient = useQueryClient();\n const toggleNotification = useNotification();\n const { setCurrentStep } = useGuidedTour();\n const { trackUsage } = useTracking();\n const { push, replace } = useHistory();\n const [{ query, rawQuery }] = useQueryParams();\n const dispatch = useDispatch();\n const { componentsDataStructure, contentTypeDataStructure, data, isLoading, status } =\n useSelector(selectCrudReducer);\n const redirectionLink = useFindRedirectionLink(slug);\n const { formatAPIError } = useAPIErrorHandler(getTrad);\n\n const isMounted = useRef(true);\n const trackUsageRef = useRef(trackUsage);\n\n const allLayoutDataRef = useRef(allLayoutData);\n\n const fetchClient = useFetchClient();\n const { put, post, del } = fetchClient;\n\n const isCreatingEntry = id === null;\n\n const requestURL =\n isCreatingEntry && !origin ? null : `/content-manager/collection-types/${slug}/${origin || id}`;\n\n const cleanReceivedData = useCallback((data) => {\n const cleaned = removePasswordFieldsFromData(\n data,\n allLayoutDataRef.current.contentType,\n allLayoutDataRef.current.components\n );\n\n return formatContentTypeData(\n cleaned,\n allLayoutDataRef.current.contentType,\n allLayoutDataRef.current.components\n );\n }, []);\n\n // SET THE DEFAULT LAYOUT the effect is applied when the slug changes\n useEffect(() => {\n const componentsDataStructure = Object.keys(allLayoutData.components).reduce((acc, current) => {\n const defaultComponentForm = createDefaultForm(\n get(allLayoutData, ['components', current, 'attributes'], {}),\n allLayoutData.components\n );\n\n acc[current] = formatContentTypeData(\n defaultComponentForm,\n allLayoutData.components[current],\n allLayoutData.components\n );\n\n return acc;\n }, {});\n\n const contentTypeDataStructure = createDefaultForm(\n allLayoutData.contentType.attributes,\n allLayoutData.components\n );\n\n const contentTypeDataStructureFormatted = formatContentTypeData(\n contentTypeDataStructure,\n allLayoutData.contentType,\n allLayoutData.components\n );\n\n dispatch(setDataStructures(componentsDataStructure, contentTypeDataStructureFormatted));\n }, [allLayoutData, dispatch]);\n\n useEffect(() => {\n return () => {\n dispatch(resetProps());\n };\n }, [dispatch]);\n\n useEffect(() => {\n const CancelToken = axios.CancelToken;\n const source = CancelToken.source();\n\n const fetchData = async (source) => {\n dispatch(getData());\n\n try {\n const { data } = await fetchClient.get(requestURL, { cancelToken: source.token });\n\n dispatch(getDataSucceeded(cleanReceivedData(data)));\n } catch (err) {\n if (axios.isCancel(err)) {\n return;\n }\n const resStatus = get(err, 'response.status', null);\n\n if (resStatus === 404) {\n push(redirectionLink);\n\n return;\n }\n\n // Not allowed to read a document\n if (resStatus === 403) {\n toggleNotification({\n type: 'info',\n message: { id: getTrad('permissions.not-allowed.update') },\n });\n\n push(redirectionLink);\n }\n }\n };\n\n // This is needed in order to reset the form when the query changes\n const init = async () => {\n dispatch(getData());\n dispatch(initForm(rawQuery));\n };\n\n if (!isMounted.current) {\n return () => {};\n }\n\n if (requestURL) {\n fetchData(source);\n } else {\n init();\n }\n\n return () => {\n source.cancel('Operation canceled by the user.');\n };\n }, [\n fetchClient,\n cleanReceivedData,\n push,\n requestURL,\n dispatch,\n rawQuery,\n redirectionLink,\n toggleNotification,\n ]);\n\n const displayErrors = useCallback(\n (err) => {\n toggleNotification({ type: 'warning', message: formatAPIError(err) });\n },\n [toggleNotification, formatAPIError]\n );\n\n const onDelete = useCallback(\n async (trackerProperty) => {\n try {\n trackUsageRef.current('willDeleteEntry', trackerProperty);\n\n const { data } = await del(`/content-manager/collection-types/${slug}/${id}`);\n\n toggleNotification({\n type: 'success',\n message: { id: getTrad('success.record.delete') },\n });\n\n trackUsageRef.current('didDeleteEntry', trackerProperty);\n\n replace(redirectionLink);\n\n return Promise.resolve(data);\n } catch (err) {\n trackUsageRef.current('didNotDeleteEntry', { error: err, ...trackerProperty });\n\n return Promise.reject(err);\n }\n },\n [id, slug, toggleNotification, del, redirectionLink, replace]\n );\n\n const onPost = useCallback(\n async (body, trackerProperty) => {\n const isCloning = typeof origin === 'string';\n /**\n * If we're cloning we want to post directly to this endpoint\n * so that the relations even if they're not listed in the EditView\n * are correctly attached to the entry.\n */\n const endPoint = isCloning\n ? `/content-manager/collection-types/${slug}/clone/${origin}`\n : `/content-manager/collection-types/${slug}`;\n try {\n // Show a loading button in the EditView/Header.js && lock the app => no navigation\n dispatch(setStatus('submit-pending'));\n\n const { id, ...restBody } = body;\n\n const { data } = await post(endPoint, isCloning ? restBody : body, {\n params: query,\n });\n\n trackUsageRef.current('didCreateEntry', trackerProperty);\n toggleNotification({\n type: 'success',\n message: { id: getTrad('success.record.save') },\n });\n\n setCurrentStep('contentManager.success');\n\n // TODO: need to find a better place, or a better abstraction\n queryClient.invalidateQueries(['relation']);\n\n dispatch(submitSucceeded(cleanReceivedData(data)));\n\n // Enable navigation and remove loaders\n dispatch(setStatus('resolved'));\n\n replace(`/content-manager/collectionType/${slug}/${data.id}${rawQuery}`);\n\n return Promise.resolve(data);\n } catch (err) {\n displayErrors(err);\n trackUsageRef.current('didNotCreateEntry', { error: err, trackerProperty });\n dispatch(setStatus('resolved'));\n\n return Promise.reject(err);\n }\n },\n [\n origin,\n cleanReceivedData,\n displayErrors,\n replace,\n slug,\n dispatch,\n query,\n toggleNotification,\n setCurrentStep,\n queryClient,\n post,\n rawQuery,\n ]\n );\n\n const onDraftRelationCheck = useCallback(async () => {\n try {\n trackUsageRef.current('willCheckDraftRelations');\n\n const endPoint = `/content-manager/collection-types/${slug}/${id}/actions/countDraftRelations`;\n dispatch(setStatus('draft-relation-check-pending'));\n\n const numberOfDraftRelations = await fetchClient.get(endPoint);\n trackUsageRef.current('didCheckDraftRelations');\n\n dispatch(setStatus('resolved'));\n\n return numberOfDraftRelations.data.data;\n } catch (err) {\n displayErrors(err);\n dispatch(setStatus('resolved'));\n\n return Promise.reject(err);\n }\n }, [displayErrors, id, slug, dispatch, fetchClient]);\n\n const onPublish = useCallback(async () => {\n try {\n trackUsageRef.current('willPublishEntry');\n const endPoint = `/content-manager/collection-types/${slug}/${id}/actions/publish`;\n\n dispatch(setStatus('publish-pending'));\n\n const { data } = await post(endPoint);\n\n trackUsageRef.current('didPublishEntry');\n\n dispatch(submitSucceeded(cleanReceivedData(data)));\n dispatch(setStatus('resolved'));\n\n toggleNotification({\n type: 'success',\n message: { id: getTrad('success.record.publish') },\n });\n\n return Promise.resolve(data);\n } catch (err) {\n displayErrors(err);\n dispatch(setStatus('resolved'));\n\n return Promise.reject(err);\n }\n }, [cleanReceivedData, displayErrors, id, slug, dispatch, toggleNotification, post]);\n\n const onPut = useCallback(\n async (body, trackerProperty) => {\n const endPoint = `/content-manager/collection-types/${slug}/${id}`;\n\n try {\n trackUsageRef.current('willEditEntry', trackerProperty);\n\n dispatch(setStatus('submit-pending'));\n\n const { data } = await put(endPoint, body);\n\n trackUsageRef.current('didEditEntry', { trackerProperty });\n toggleNotification({\n type: 'success',\n message: { id: getTrad('success.record.save') },\n });\n\n // TODO: need to find a better place, or a better abstraction\n queryClient.invalidateQueries(['relation']);\n\n dispatch(submitSucceeded(cleanReceivedData(data)));\n\n dispatch(setStatus('resolved'));\n\n return Promise.resolve(data);\n } catch (err) {\n trackUsageRef.current('didNotEditEntry', { error: err, trackerProperty });\n displayErrors(err);\n\n dispatch(setStatus('resolved'));\n\n return Promise.reject(err);\n }\n },\n [cleanReceivedData, displayErrors, slug, id, dispatch, toggleNotification, queryClient, put]\n );\n\n const onUnpublish = useCallback(async () => {\n const endPoint = `/content-manager/collection-types/${slug}/${id}/actions/unpublish`;\n\n dispatch(setStatus('unpublish-pending'));\n\n try {\n trackUsageRef.current('willUnpublishEntry');\n\n const { data } = await post(endPoint);\n\n trackUsageRef.current('didUnpublishEntry');\n toggleNotification({\n type: 'success',\n message: { id: getTrad('success.record.unpublish') },\n });\n\n dispatch(submitSucceeded(cleanReceivedData(data)));\n dispatch(setStatus('resolved'));\n\n return Promise.resolve(data);\n } catch (err) {\n dispatch(setStatus('resolved'));\n displayErrors(err);\n\n return Promise.reject(err);\n }\n }, [cleanReceivedData, displayErrors, id, slug, dispatch, toggleNotification, post]);\n\n return children({\n componentsDataStructure,\n contentTypeDataStructure,\n data,\n isCreatingEntry,\n isLoadingForData: isLoading,\n onDelete,\n onPost,\n onPublish,\n onDraftRelationCheck,\n onPut,\n onUnpublish,\n status,\n redirectionLink,\n });\n};\n\nCollectionTypeFormWrapper.defaultProps = {\n id: null,\n origin: null,\n};\n\nCollectionTypeFormWrapper.propTypes = {\n allLayoutData: PropTypes.exact({\n components: PropTypes.object.isRequired,\n contentType: PropTypes.shape({\n apiID: PropTypes.string.isRequired,\n attributes: PropTypes.object.isRequired,\n info: PropTypes.object.isRequired,\n isDisplayed: PropTypes.bool.isRequired,\n kind: PropTypes.string.isRequired,\n layouts: PropTypes.object.isRequired,\n metadatas: PropTypes.object.isRequired,\n options: PropTypes.object.isRequired,\n pluginOptions: PropTypes.object,\n settings: PropTypes.object.isRequired,\n uid: PropTypes.string.isRequired,\n }).isRequired,\n }).isRequired,\n children: PropTypes.func.isRequired,\n id: PropTypes.string,\n origin: PropTypes.string,\n slug: PropTypes.string.isRequired,\n};\n\nexport default memo(CollectionTypeFormWrapper, isEqual);\n","/**\n *\n * AddComponentButton\n *\n */\n\nimport React from 'react';\n\nimport { BaseButton, Flex, Typography } from '@strapi/design-system';\nimport { PlusCircle } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nexport const AddComponentButton = ({ hasError, isDisabled, isOpen, children, onClick }) => {\n return (\n <StyledButton\n type=\"button\"\n onClick={onClick}\n disabled={isDisabled}\n hasError={hasError}\n background=\"neutral0\"\n paddingTop={3}\n paddingBottom={3}\n paddingLeft={4}\n paddingRight={4}\n style={{ cursor: isDisabled ? 'not-allowed' : 'pointer' }}\n >\n <Flex as=\"span\" gap={2}>\n <StyledAddIcon aria-hidden $isOpen={isOpen} $hasError={hasError && !isOpen} />\n <Typography\n variant=\"pi\"\n fontWeight=\"bold\"\n textColor={hasError && !isOpen ? 'danger600' : 'neutral500'}\n >\n {children}\n </Typography>\n </Flex>\n </StyledButton>\n );\n};\n\nconst StyledAddIcon = styled(PlusCircle)`\n height: ${({ theme }) => theme.spaces[6]};\n width: ${({ theme }) => theme.spaces[6]};\n transform: ${({ $isOpen }) => ($isOpen ? 'rotate(45deg)' : 'rotate(0deg)')};\n > circle {\n fill: ${({ theme, $hasError }) =>\n $hasError ? theme.colors.danger200 : theme.colors.neutral150};\n }\n > path {\n fill: ${({ theme, $hasError }) =>\n $hasError ? theme.colors.danger600 : theme.colors.neutral600};\n }\n`;\n\nconst StyledButton = styled(BaseButton)`\n border-radius: 26px;\n border-color: ${({ theme }) => theme.colors.neutral150};\n box-shadow: ${({ theme }) => theme.shadows.filterShadow};\n\n &:hover {\n ${Typography} {\n color: ${({ theme }) => theme.colors.primary600};\n }\n\n ${StyledAddIcon} {\n > circle {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n > path {\n fill: ${({ theme }) => theme.colors.neutral100};\n }\n }\n }\n &:active {\n ${Typography} {\n color: ${({ theme }) => theme.colors.primary600};\n }\n ${StyledAddIcon} {\n > circle {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n > path {\n fill: ${({ theme }) => theme.colors.neutral100};\n }\n }\n }\n`;\n\nAddComponentButton.defaultProps = {\n hasError: false,\n isDisabled: false,\n isOpen: false,\n};\n\nAddComponentButton.propTypes = {\n children: PropTypes.node.isRequired,\n hasError: PropTypes.bool,\n isDisabled: PropTypes.bool,\n isOpen: PropTypes.bool,\n onClick: PropTypes.func.isRequired,\n};\n","import React from 'react';\n\nimport {\n Accordion,\n AccordionContent,\n AccordionToggle,\n Box,\n Flex,\n Typography,\n} from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { ComponentIcon } from '../../ComponentIcon';\n\nexport const ComponentCategory = ({\n category,\n components,\n variant,\n isOpen,\n onAddComponent,\n onToggle,\n}) => {\n const { formatMessage } = useIntl();\n\n const handleToggle = () => {\n onToggle(category);\n };\n\n return (\n <Accordion expanded={isOpen} onToggle={handleToggle} size=\"S\">\n <AccordionToggle\n variant={variant}\n title={formatMessage({ id: category, defaultMessage: category })}\n togglePosition=\"left\"\n />\n <AccordionContent>\n <Box paddingTop={4} paddingBottom={4} paddingLeft={3} paddingRight={3}>\n <Grid>\n {components.map(({ componentUid, info: { displayName, icon } }) => (\n <ComponentBox\n key={componentUid}\n as=\"button\"\n type=\"button\"\n background=\"neutral100\"\n justifyContent=\"center\"\n onClick={onAddComponent(componentUid)}\n hasRadius\n height={pxToRem(84)}\n shrink={0}\n borderColor=\"neutral200\"\n >\n <Flex direction=\"column\" gap={1} alignItems=\"center\" justifyContent=\"center\">\n <ComponentIcon icon={icon} />\n\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"neutral600\">\n {formatMessage({ id: displayName, defaultMessage: displayName })}\n </Typography>\n </Flex>\n </ComponentBox>\n ))}\n </Grid>\n </Box>\n </AccordionContent>\n </Accordion>\n );\n};\n\nconst Grid = styled.div`\n display: grid;\n grid-template-columns: repeat(auto-fit, ${140 / 16}rem);\n grid-gap: ${({ theme }) => theme.spaces[1]};\n`;\n\nconst ComponentBox = styled(Flex)`\n &:focus,\n &:hover {\n border: 1px solid ${({ theme }) => theme.colors.primary200};\n background: ${({ theme }) => theme.colors.primary100};\n\n ${Typography} {\n color: ${({ theme }) => theme.colors.primary600};\n }\n\n /* > Flex > ComponentIcon */\n > div > div:first-child {\n background: ${({ theme }) => theme.colors.primary200};\n color: ${({ theme }) => theme.colors.primary600};\n }\n }\n`;\n\nComponentCategory.defaultProps = {\n components: [],\n isOpen: false,\n variant: 'primary',\n};\n\nComponentCategory.propTypes = {\n category: PropTypes.string.isRequired,\n components: PropTypes.array,\n isOpen: PropTypes.bool,\n onAddComponent: PropTypes.func.isRequired,\n onToggle: PropTypes.func.isRequired,\n variant: PropTypes.oneOf(['primary', 'secondary']),\n};\n","import React, { useEffect, useState } from 'react';\n\nimport { Box, Flex, KeyboardNavigable, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../../utils';\n\nimport { ComponentCategory } from './ComponentCategory';\n\nexport const ComponentPicker = ({ dynamicComponentsByCategory, isOpen, onClickAddComponent }) => {\n const { formatMessage } = useIntl();\n\n const [categoryToOpen, setCategoryToOpen] = useState('');\n\n useEffect(() => {\n const categoryKeys = Object.keys(dynamicComponentsByCategory);\n\n if (isOpen && categoryKeys.length > 0) {\n setCategoryToOpen(categoryKeys[0]);\n }\n }, [isOpen, dynamicComponentsByCategory]);\n\n const handleAddComponentToDz = (componentUid) => () => {\n onClickAddComponent(componentUid);\n setCategoryToOpen('');\n };\n\n /**\n * @type {(categoryName: string) => void}\n */\n const handleClickToggle = (categoryName) => {\n setCategoryToOpen((currentCat) => (currentCat === categoryName ? '' : categoryName));\n };\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <Box\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={5}\n paddingRight={5}\n background=\"neutral0\"\n shadow=\"tableShadow\"\n borderColor=\"neutral150\"\n hasRadius\n >\n <Flex justifyContent=\"center\">\n <Typography fontWeight=\"bold\" textColor=\"neutral600\">\n {formatMessage({\n id: getTrad('components.DynamicZone.ComponentPicker-label'),\n defaultMessage: 'Pick one component',\n })}\n </Typography>\n </Flex>\n <Box paddingTop={2}>\n <KeyboardNavigable attributeName=\"data-strapi-accordion-toggle\">\n {Object.entries(dynamicComponentsByCategory).map(([category, components], index) => (\n <ComponentCategory\n key={category}\n category={category}\n components={components}\n onAddComponent={handleAddComponentToDz}\n isOpen={category === categoryToOpen}\n onToggle={handleClickToggle}\n variant={index % 2 === 1 ? 'primary' : 'secondary'}\n />\n ))}\n </KeyboardNavigable>\n </Box>\n </Box>\n );\n};\n\nComponentPicker.defaultProps = {\n dynamicComponentsByCategory: {},\n isOpen: false,\n};\n\nComponentPicker.propTypes = {\n dynamicComponentsByCategory: PropTypes.shape({\n components: PropTypes.arrayOf(\n PropTypes.shape({\n componentUid: PropTypes.string.isRequired,\n info: PropTypes.object,\n })\n ),\n }),\n isOpen: PropTypes.bool,\n onClickAddComponent: PropTypes.func.isRequired,\n};\n","import React from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport { PlusCircle } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { getTrad } from '../../utils';\n\nconst IconWrapper = styled.span`\n > svg {\n width: ${pxToRem(24)};\n height: ${pxToRem(24)};\n > circle {\n fill: ${({ theme }) => theme.colors.primary200};\n }\n > path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n`;\n\nconst ComponentInitializer = ({ error, isReadOnly, onClick }) => {\n const { formatMessage } = useIntl();\n\n return (\n <>\n <Box\n as=\"button\"\n background=\"neutral100\"\n borderColor={error ? 'danger600' : 'neutral200'}\n disabled={isReadOnly}\n hasRadius\n onClick={onClick}\n paddingTop={9}\n paddingBottom={9}\n type=\"button\"\n >\n <Flex direction=\"column\" gap={2}>\n <Flex justifyContent=\"center\" style={{ cursor: isReadOnly ? 'not-allowed' : 'inherit' }}>\n <IconWrapper>\n <PlusCircle />\n </IconWrapper>\n </Flex>\n <Flex justifyContent=\"center\">\n <Typography textColor=\"primary600\" variant=\"pi\" fontWeight=\"bold\">\n {formatMessage({\n id: getTrad('components.empty-repeatable'),\n defaultMessage: 'No entry yet. Click on the button below to add one.',\n })}\n </Typography>\n </Flex>\n </Flex>\n </Box>\n {error?.id && (\n <Typography textColor=\"danger600\" variant=\"pi\">\n {formatMessage(error, { ...error.values })}\n </Typography>\n )}\n </>\n );\n};\n\nComponentInitializer.defaultProps = {\n error: undefined,\n isReadOnly: false,\n};\n\nComponentInitializer.propTypes = {\n error: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n values: PropTypes.object,\n }),\n isReadOnly: PropTypes.bool,\n onClick: PropTypes.func.isRequired,\n};\n\nexport default ComponentInitializer;\n","import { useCallback, useEffect, useState } from 'react';\n\nimport { useCustomFields } from '@strapi/helper-plugin';\n\nconst componentStore = new Map();\n\n/**\n * @description\n * A hook to lazy load custom field components\n * @param {Array.<string>} componentUids - The uids to look up components\n * @returns object\n */\nconst useLazyComponents = (componentUids = []) => {\n const [lazyComponentStore, setLazyComponentStore] = useState(Object.fromEntries(componentStore));\n /**\n * Start loading only if there are any components passed in\n * and there are some new to load\n */\n const newUids = componentUids.filter((uid) => !componentStore.get(uid));\n const [loading, setLoading] = useState(() => !!newUids.length);\n const customFieldsRegistry = useCustomFields();\n\n useEffect(() => {\n const setStore = (store) => {\n setLazyComponentStore(store);\n setLoading(false);\n };\n\n const lazyLoadComponents = async (uids, components) => {\n const modules = await Promise.all(components);\n\n uids.forEach((uid, index) => {\n componentStore.set(uid, modules[index].default);\n });\n\n setStore(Object.fromEntries(componentStore));\n };\n\n if (newUids.length > 0) {\n setLoading(true);\n\n const componentPromises = newUids.reduce((arrayOfPromises, uid) => {\n const customField = customFieldsRegistry.get(uid);\n\n if (customField) {\n arrayOfPromises.push(customField.components.Input());\n }\n\n return arrayOfPromises;\n }, []);\n\n if (componentPromises.length > 0) {\n lazyLoadComponents(newUids, componentPromises);\n }\n }\n }, [newUids, customFieldsRegistry]);\n\n /**\n * Wrap this in a callback so it can be used in\n * effects to cleanup the cached store if required\n */\n const cleanup = useCallback(() => {\n componentStore.clear();\n setLazyComponentStore({});\n }, []);\n\n return { isLazyLoading: loading, lazyComponentStore, cleanup };\n};\n\nexport default useLazyComponents;\n","import React from 'react';\n\nimport { Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\n\nexport const Hint = ({ id, error, name, hint }) => {\n if (hint.length === 0 || error) {\n return null;\n }\n\n return (\n <Typography as=\"p\" variant=\"pi\" id={`${id || name}-hint`} textColor=\"neutral600\">\n {hint}\n </Typography>\n );\n};\n\nHint.defaultProps = {\n id: undefined,\n error: undefined,\n hint: '',\n};\n\nHint.propTypes = {\n hint: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\n error: PropTypes.string,\n id: PropTypes.string,\n name: PropTypes.string.isRequired,\n};\n\nexport default Hint;\n","import { Transforms, Editor, Element as SlateElement, Node, Range } from 'slate';\n\nimport { type Block } from './types';\n\nconst addProtocol = (url: string, protocol = 'https://') => {\n const allowedProtocols = ['http://', 'https://', 'mailto:', 'tel:'];\n\n if (allowedProtocols.some((allowedProtocol) => url.startsWith(allowedProtocol))) {\n return url;\n }\n\n return `${protocol}${url}`;\n};\n\nconst removeLink = (editor: Editor) => {\n Transforms.unwrapNodes(editor, {\n match: (node) => !Editor.isEditor(node) && SlateElement.isElement(node) && node.type === 'link',\n });\n};\n\nconst insertLink = (editor: Editor, { url }: { url: string }) => {\n if (editor.selection) {\n // We want to remove all link on the selection\n const linkNodes = Array.from(\n Editor.nodes(editor, {\n at: editor.selection,\n match: (node) => !Editor.isEditor(node) && node.type === 'link',\n })\n );\n\n linkNodes.forEach(([, path]) => {\n Transforms.unwrapNodes(editor, { at: path });\n });\n\n if (Range.isCollapsed(editor.selection)) {\n const link: Block<'link'> = {\n type: 'link',\n url: url ? addProtocol(url) : '',\n children: [{ type: 'text', text: url }],\n };\n\n Transforms.insertNodes(editor, link);\n } else {\n Transforms.wrapNodes(\n editor,\n { type: 'link', url: url ? addProtocol(url) : '' } as Block<'link'>,\n { split: true }\n );\n }\n }\n};\n\nconst editLink = (editor: Editor, link: { url: string; text: string }) => {\n const { url, text } = link;\n\n if (!editor.selection) {\n return;\n }\n\n const linkEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'link',\n });\n\n if (linkEntry) {\n const [, linkPath] = linkEntry;\n Transforms.setNodes(editor, { url: addProtocol(url) }, { at: linkPath });\n\n // If link text is different, we remove the old text and insert the new one\n if (text !== '' && text !== Editor.string(editor, linkPath)) {\n const linkNodeChildrens = Array.from(Node.children(editor, linkPath, { reverse: true }));\n\n linkNodeChildrens.forEach(([, childPath]) => {\n Transforms.removeNodes(editor, { at: childPath });\n });\n\n Transforms.insertNodes(editor, [{ type: 'text', text }], { at: linkPath.concat(0) });\n }\n }\n};\n\nexport { insertLink, editLink, removeLink };\n","/* eslint-disable check-file/filename-naming-convention */\n\nimport * as React from 'react';\n\nimport {\n Box,\n Icon,\n Typography,\n BaseLink,\n Popover,\n Field,\n FieldLabel,\n FieldInput,\n Flex,\n Button,\n Tooltip,\n} from '@strapi/design-system';\nimport {\n Code,\n Quote,\n Picture,\n Paragraph,\n HeadingOne,\n HeadingTwo,\n HeadingThree,\n HeadingFour,\n HeadingFive,\n HeadingSix,\n Trash,\n Pencil,\n BulletList,\n NumberList,\n} from '@strapi/icons';\nimport { type MessageDescriptor, useIntl } from 'react-intl';\nimport { type Element, type Text, Node, Editor, Path, Transforms, Range } from 'slate';\nimport { type RenderElementProps, ReactEditor } from 'slate-react';\nimport styled, { css } from 'styled-components';\n\n// @ts-expect-error TODO migrate this file\nimport { composeRefs } from '../../../utils';\nimport { useBlocksEditorContext } from '../BlocksEditor';\nimport { editLink, removeLink } from '../utils/links';\nimport { type Block } from '../utils/types';\n\nconst StyledBaseLink = styled(BaseLink)`\n text-decoration: none;\n`;\n\nconst H1 = styled(Typography).attrs({ as: 'h1' })`\n font-size: ${42 / 16}rem;\n line-height: ${({ theme }) => theme.lineHeights[1]};\n`;\n\nconst H2 = styled(Typography).attrs({ as: 'h2' })`\n font-size: ${35 / 16}rem;\n line-height: ${({ theme }) => theme.lineHeights[1]};\n`;\n\nconst H3 = styled(Typography).attrs({ as: 'h3' })`\n font-size: ${29 / 16}rem;\n line-height: ${({ theme }) => theme.lineHeights[1]};\n`;\n\nconst H4 = styled(Typography).attrs({ as: 'h4' })`\n font-size: ${24 / 16}rem;\n line-height: ${({ theme }) => theme.lineHeights[1]};\n`;\n\nconst H5 = styled(Typography).attrs({ as: 'h5' })`\n font-size: ${20 / 16}rem;\n line-height: ${({ theme }) => theme.lineHeights[1]};\n`;\n\nconst H6 = styled(Typography).attrs({ as: 'h6' })`\n font-size: 1rem;\n line-height: ${({ theme }) => theme.lineHeights[1]};\n`;\n\nconst CodeBlock = styled.pre.attrs({ role: 'code' })`\n border-radius: ${({ theme }) => theme.borderRadius};\n background-color: ${({ theme }) => theme.colors.neutral100};\n max-width: 100%;\n overflow: auto;\n padding: ${({ theme }) => `${theme.spaces[3]} ${theme.spaces[4]}`};\n flex-shrink: 0;\n & > code {\n font-family: 'SF Mono', SFMono-Regular, ui-monospace, 'DejaVu Sans Mono', Menlo, Consolas,\n monospace;\n color: ${({ theme }) => theme.colors.neutral800};\n overflow: auto;\n max-width: 100%;\n }\n`;\n\nconst Blockquote = styled.blockquote.attrs({ role: 'blockquote' })`\n margin: ${({ theme }) => `${theme.spaces[4]} 0`};\n font-weight: ${({ theme }) => theme.fontWeights.regular};\n border-left: ${({ theme }) => `${theme.spaces[1]} solid ${theme.colors.neutral200}`};\n padding: ${({ theme }) => theme.spaces[2]} ${({ theme }) => theme.spaces[5]};\n color: ${({ theme }) => theme.colors.neutral600};\n`;\n\nconst listStyle = css`\n margin-block-start: ${({ theme }) => theme.spaces[4]};\n margin-block-end: ${({ theme }) => theme.spaces[4]};\n margin-inline-start: ${({ theme }) => theme.spaces[0]};\n margin-inline-end: ${({ theme }) => theme.spaces[0]};\n padding-inline-start: ${({ theme }) => theme.spaces[4]};\n\n ol,\n ul {\n margin-block-start: ${({ theme }) => theme.spaces[0]};\n margin-block-end: ${({ theme }) => theme.spaces[0]};\n }\n`;\n\nconst Orderedlist = styled.ol`\n list-style-type: decimal;\n ${listStyle}\n`;\n\nconst Unorderedlist = styled.ul`\n list-style-type: disc;\n ${listStyle}\n`;\n\nconst isText = (node: unknown): node is Text => {\n return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'text';\n};\n\nconst isListNode = (node: unknown): node is Block<'list'> => {\n return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'list';\n};\n\nconst List = ({ attributes, children, element }: RenderElementProps) => {\n if (!isListNode(element)) {\n return null;\n }\n\n if (element.format === 'ordered') {\n return <Orderedlist {...attributes}>{children}</Orderedlist>;\n }\n\n return <Unorderedlist {...attributes}>{children}</Unorderedlist>;\n};\n\nconst replaceListWithEmptyBlock = (editor: Editor, currentListPath: Path) => {\n // Delete the empty list\n Transforms.removeNodes(editor, { at: currentListPath });\n\n if (currentListPath[0] === 0) {\n // If the list was the only (or first) block element then insert empty paragraph as editor needs default value\n Transforms.insertNodes(\n editor,\n {\n type: 'paragraph',\n children: [{ type: 'text', text: '' }],\n },\n { at: currentListPath }\n );\n Transforms.select(editor, currentListPath);\n }\n};\n\n/**\n * Common handler for the backspace event on ordered and unordered lists\n */\nconst handleBackspaceKeyOnList = (editor: Editor, event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) return;\n\n const [currentListItem, currentListItemPath] = Editor.parent(editor, editor.selection.anchor);\n const [currentList, currentListPath] = Editor.parent(editor, currentListItemPath);\n const isListEmpty =\n currentList.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isNodeStart = Editor.isStart(editor, editor.selection.anchor, currentListItemPath);\n const isFocusAtTheBeginningOfAChild =\n editor.selection.focus.offset === 0 && editor.selection.focus.path.at(-1) === 0;\n\n if (isListEmpty) {\n event.preventDefault();\n replaceListWithEmptyBlock(editor, currentListPath);\n } else if (isNodeStart) {\n Transforms.liftNodes(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list-item',\n });\n // Transforms the list item into a paragraph\n Transforms.setNodes(\n editor,\n { type: 'paragraph' },\n {\n hanging: true,\n }\n );\n } else if (isFocusAtTheBeginningOfAChild) {\n Transforms.liftNodes(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list-item',\n });\n // If the focus is at the beginning of a child node we need to replace it with a paragraph\n Transforms.setNodes(editor, { type: 'paragraph' });\n }\n};\n\n/**\n * Common handler for the enter key on ordered and unordered lists\n */\nconst handleEnterKeyOnList = (editor: Editor) => {\n const currentListItemEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list-item',\n });\n\n if (!currentListItemEntry || !editor.selection) {\n return;\n }\n\n const [currentListItem, currentListItemPath] = currentListItemEntry;\n const [currentList, currentListPath] = Editor.parent(editor, currentListItemPath);\n const isListEmpty =\n currentList.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n const isListItemEmpty =\n currentListItem.children.length === 1 &&\n isText(currentListItem.children[0]) &&\n currentListItem.children[0].text === '';\n\n if (isListEmpty) {\n replaceListWithEmptyBlock(editor, currentListPath);\n } else if (isListItemEmpty) {\n // Delete the empty list item\n Transforms.removeNodes(editor, { at: currentListItemPath });\n\n // Create a new paragraph below the parent list\n const listNodeEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n });\n\n if (!listNodeEntry) {\n return;\n }\n\n const createdParagraphPath = Path.next(listNodeEntry[1]);\n Transforms.insertNodes(\n editor,\n {\n type: 'paragraph',\n children: [{ type: 'text', text: '' }],\n },\n { at: createdParagraphPath }\n );\n\n // Move the selection to the newly created paragraph\n Transforms.select(editor, createdParagraphPath);\n } else {\n // Check if the cursor is at the end of the list item\n const isNodeEnd = Editor.isEnd(editor, editor.selection.anchor, currentListItemPath);\n\n if (isNodeEnd) {\n // If there was nothing after the cursor, create a fresh new list item,\n // in order to avoid carrying over the modifiers from the previous list item\n Transforms.insertNodes(editor, { type: 'list-item', children: [{ type: 'text', text: '' }] });\n } else {\n // If there is something after the cursor, split the current list item,\n // so that we keep the content and the modifiers\n Transforms.splitNodes(editor);\n }\n }\n};\n\n// The max-height is decided with the design team, the 56px is the height of the toolbar\nconst Img = styled.img`\n max-height: calc(512px - 56px);\n max-width: 100%;\n object-fit: contain;\n`;\n\n// Type guard to force TypeScript to narrow the type of the element in Blocks component\nconst isImage = (element: Element): element is Block<'image'> => {\n return element.type === 'image';\n};\n\n// Added a background color to the image wrapper to make it easier to recognize the image block\nconst Image = ({ attributes, children, element }: RenderElementProps) => {\n if (!isImage(element)) {\n return null;\n }\n const { url, alternativeText, width, height } = element.image;\n\n return (\n <Box {...attributes}>\n {children}\n <Flex background=\"neutral100\" contentEditable={false} justifyContent=\"center\">\n <Img src={url} alt={alternativeText} width={width} height={height} />\n </Flex>\n </Box>\n );\n};\n\n// Make sure the tooltip is above the popover\nconst TooltipCustom = styled(Tooltip)`\n z-index: 6;\n`;\n\n// Used for the Edit and Cancel buttons in the link popover\nconst CustomButton = styled(Button)`\n & > span {\n line-height: normal;\n }\n`;\n\nconst Link = React.forwardRef<HTMLAnchorElement, RenderElementProps>(\n ({ element, children, attributes }, forwardedRef) => {\n const { formatMessage } = useIntl();\n const { editor } = useBlocksEditorContext('Link');\n const path = ReactEditor.findPath(editor, element);\n const [popoverOpen, setPopoverOpen] = React.useState(\n editor.lastInsertedLinkPath ? Path.equals(path, editor.lastInsertedLinkPath) : false\n );\n\n const elementAsLink = element as Block<'link'>;\n\n const [isEditing, setIsEditing] = React.useState(elementAsLink.url === '');\n const linkRef = React.useRef<HTMLAnchorElement>(null!);\n const elementText = elementAsLink.children.map((child) => child.text).join('');\n const [linkText, setLinkText] = React.useState(elementText);\n const [linkUrl, setLinkUrl] = React.useState(elementAsLink.url);\n\n const handleOpenEditPopover: React.MouseEventHandler<HTMLAnchorElement> = (e) => {\n e.preventDefault();\n setPopoverOpen(true);\n };\n\n const handleSave: React.FormEventHandler = (e) => {\n e.stopPropagation();\n\n // If the selection is collapsed, we select the parent node because we want all the link to be replaced)\n if (editor.selection && Range.isCollapsed(editor.selection)) {\n const [, parentPath] = Editor.parent(editor, editor.selection.focus?.path);\n Transforms.select(editor, parentPath);\n }\n\n editLink(editor, { url: linkUrl, text: linkText });\n setIsEditing(false);\n };\n\n const handleCancel = () => {\n setIsEditing(false);\n\n if (elementAsLink.url === '') {\n removeLink(editor);\n }\n };\n\n const handleDismiss = () => {\n setPopoverOpen(false);\n\n if (elementAsLink.url === '') {\n removeLink(editor);\n }\n\n ReactEditor.focus(editor);\n };\n\n const composedRefs = composeRefs(linkRef, forwardedRef);\n\n return (\n <>\n <StyledBaseLink\n {...attributes}\n ref={composedRefs}\n href={elementAsLink.url}\n onClick={handleOpenEditPopover}\n color=\"primary600\"\n >\n {children}\n </StyledBaseLink>\n {popoverOpen && (\n <Popover source={linkRef} onDismiss={handleDismiss} padding={4} contentEditable={false}>\n {isEditing ? (\n <Flex as=\"form\" onSubmit={handleSave} direction=\"column\" gap={4}>\n <Field width=\"300px\">\n <FieldLabel>\n {formatMessage({\n id: 'components.Blocks.popover.text',\n defaultMessage: 'Text',\n })}\n </FieldLabel>\n <FieldInput\n name=\"text\"\n placeholder={formatMessage({\n id: 'components.Blocks.popover.text.placeholder',\n defaultMessage: 'Enter link text',\n })}\n value={linkText}\n onChange={(e) => setLinkText(e.target.value)}\n />\n </Field>\n <Field width=\"300px\">\n <FieldLabel>\n {formatMessage({\n id: 'components.Blocks.popover.link',\n defaultMessage: 'Link',\n })}\n </FieldLabel>\n <FieldInput\n name=\"url\"\n placeholder=\"https://strapi.io\"\n value={linkUrl}\n onChange={(e) => setLinkUrl(e.target.value)}\n />\n </Field>\n <Flex justifyContent=\"end\" width=\"100%\" gap={2}>\n <Button variant=\"tertiary\" onClick={handleCancel}>\n {formatMessage({\n id: 'components.Blocks.popover.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n <Button type=\"submit\" disabled={!linkText || !linkUrl}>\n {formatMessage({\n id: 'components.Blocks.popover.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n </Flex>\n ) : (\n <Flex direction=\"column\" gap={4} alignItems=\"start\" width=\"400px\">\n <Typography>{elementText}</Typography>\n <Typography>\n <StyledBaseLink href={elementAsLink.url} target=\"_blank\" color=\"primary600\">\n {elementAsLink.url}\n </StyledBaseLink>\n </Typography>\n <Flex justifyContent=\"end\" width=\"100%\" gap={2}>\n <TooltipCustom\n description={formatMessage({\n id: 'components.Blocks.popover.delete',\n defaultMessage: 'Delete',\n })}\n >\n <CustomButton\n size=\"S\"\n width=\"2rem\"\n variant=\"danger-light\"\n onClick={() => removeLink(editor)}\n aria-label={formatMessage({\n id: 'components.Blocks.popover.delete',\n defaultMessage: 'Delete',\n })}\n type=\"button\"\n justifyContent=\"center\"\n >\n <Icon width={3} height={3} as={Trash} />\n </CustomButton>\n </TooltipCustom>\n\n <TooltipCustom\n description={formatMessage({\n id: 'components.Blocks.popover.edit',\n defaultMessage: 'Edit',\n })}\n >\n <CustomButton\n size=\"S\"\n width=\"2rem\"\n variant=\"tertiary\"\n onClick={() => setIsEditing(true)}\n aria-label={formatMessage({\n id: 'components.Blocks.popover.edit',\n defaultMessage: 'Edit',\n })}\n type=\"button\"\n justifyContent=\"center\"\n >\n <Icon width={3} height={3} as={Pencil} />\n </CustomButton>\n </TooltipCustom>\n </Flex>\n </Flex>\n )}\n </Popover>\n )}\n </>\n );\n }\n);\n\ninterface NonSelectorBlock {\n renderElement: (props: RenderElementProps) => React.JSX.Element;\n value: object;\n matchNode: (node: Element) => boolean;\n isInBlocksSelector: false;\n handleEnterKey?: (editor: Editor) => void;\n handleBackspaceKey?: (editor: Editor, event: React.KeyboardEvent<HTMLElement>) => void;\n}\n\ntype SelectorBlock = Omit<NonSelectorBlock, 'isInBlocksSelector'> & {\n isInBlocksSelector: true;\n icon: React.ComponentType;\n label: MessageDescriptor;\n};\n\ntype NonSelectorBlockKey = 'list-item' | 'link';\n\nconst selectorBlockKeys = [\n 'paragraph',\n 'heading-one',\n 'heading-two',\n 'heading-three',\n 'heading-four',\n 'heading-five',\n 'heading-six',\n 'list-ordered',\n 'list-unordered',\n 'image',\n 'quote',\n 'code',\n] as const;\n\ntype SelectorBlockKey = (typeof selectorBlockKeys)[number];\n\nconst isSelectorBlockKey = (key: unknown): key is SelectorBlockKey => {\n return typeof key === 'string' && selectorBlockKeys.includes(key as SelectorBlockKey);\n};\n\ntype BlocksStore = {\n [K in SelectorBlockKey]: SelectorBlock;\n} & {\n [K in NonSelectorBlockKey]: NonSelectorBlock;\n};\n\n/**\n * Manages a store of all the available blocks.\n */\nfunction useBlocksStore(): BlocksStore {\n return {\n paragraph: {\n renderElement: (props) => (\n <Typography as=\"p\" variant=\"omega\" {...props.attributes}>\n {props.children}\n </Typography>\n ),\n icon: Paragraph,\n label: {\n id: 'components.Blocks.blocks.text',\n defaultMessage: 'Text',\n },\n value: {\n type: 'paragraph',\n },\n matchNode: (node) => node.type === 'paragraph',\n isInBlocksSelector: true,\n handleEnterKey(editor) {\n if (!editor.selection) {\n return;\n }\n\n // We need to keep track of the initial position of the cursor\n const anchorPathInitialPosition = editor.selection.anchor.path;\n /**\n * Split the nodes where the cursor is. This will create a new paragraph with the content\n * after the cursor, while retaining all the children, modifiers etc.\n */\n Transforms.splitNodes(editor, {\n // Makes sure we always create a new node,\n // even if there's nothing to the right of the cursor in the node.\n always: true,\n });\n\n // Check if the created node is empty (if there was no text after the cursor in the node)\n // This lets us know if we need to carry over the modifiers from the previous node\n const parentBlockEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n if (!parentBlockEntry) {\n return;\n }\n const [, parentBlockPath] = parentBlockEntry;\n const isNodeEnd = Editor.isEnd(editor, editor.selection.anchor, parentBlockPath);\n\n /**\n * Delete and recreate the node that was created at the right of the cursor.\n * This is to avoid node pollution\n * (e.g. keeping the level attribute when converting a heading to a paragraph).\n * Select the parent of the selection because we want the full block, not the leaf.\n * And copy its children to make sure we keep the modifiers.\n */\n const [fragmentedNode] = Editor.parent(editor, editor.selection.anchor.path);\n Transforms.removeNodes(editor);\n\n // Check if after the current position there is another node\n const hasNextNode = editor.children.length - anchorPathInitialPosition[0] > 1;\n\n // Insert the new node at the right position.\n // The next line after the editor selection if present or otherwise at the end of the editor.\n Transforms.insertNodes(\n editor,\n {\n type: 'paragraph',\n // Don't carry over the modifiers from the previous node if there was no text after the cursor\n children: (isNodeEnd\n ? [{ type: 'text', text: '' }]\n : fragmentedNode.children) as Text[],\n },\n {\n at: hasNextNode ? [anchorPathInitialPosition[0] + 1] : [editor.children.length],\n }\n );\n\n /**\n * The new selection will by default be at the end of the created node.\n * Instead we manually move it to the start of the created node.\n * Use slice(0, -1) to go 1 level higher in the tree,\n * so we go to the start of the node and not the start of the leaf.\n */\n Transforms.select(editor, editor.start([anchorPathInitialPosition[0] + 1]));\n },\n },\n 'heading-one': {\n renderElement: (props) => <H1 {...props.attributes}>{props.children}</H1>,\n icon: HeadingOne,\n label: {\n id: 'components.Blocks.blocks.heading1',\n defaultMessage: 'Heading 1',\n },\n value: {\n type: 'heading',\n level: 1,\n },\n matchNode: (node) => node.type === 'heading' && node.level === 1,\n isInBlocksSelector: true,\n },\n 'heading-two': {\n renderElement: (props) => <H2 {...props.attributes}>{props.children}</H2>,\n icon: HeadingTwo,\n label: {\n id: 'components.Blocks.blocks.heading2',\n defaultMessage: 'Heading 2',\n },\n value: {\n type: 'heading',\n level: 2,\n },\n matchNode: (node) => node.type === 'heading' && node.level === 2,\n isInBlocksSelector: true,\n },\n 'heading-three': {\n renderElement: (props) => <H3 {...props.attributes}>{props.children}</H3>,\n icon: HeadingThree,\n label: {\n id: 'components.Blocks.blocks.heading3',\n defaultMessage: 'Heading 3',\n },\n value: {\n type: 'heading',\n level: 3,\n },\n matchNode: (node) => node.type === 'heading' && node.level === 3,\n isInBlocksSelector: true,\n },\n 'heading-four': {\n renderElement: (props) => <H4 {...props.attributes}>{props.children}</H4>,\n icon: HeadingFour,\n label: {\n id: 'components.Blocks.blocks.heading4',\n defaultMessage: 'Heading 4',\n },\n value: {\n type: 'heading',\n level: 4,\n },\n matchNode: (node) => node.type === 'heading' && node.level === 4,\n isInBlocksSelector: true,\n },\n 'heading-five': {\n renderElement: (props) => <H5 {...props.attributes}>{props.children}</H5>,\n icon: HeadingFive,\n label: {\n id: 'components.Blocks.blocks.heading5',\n defaultMessage: 'Heading 5',\n },\n value: {\n type: 'heading',\n level: 5,\n },\n matchNode: (node) => node.type === 'heading' && node.level === 5,\n isInBlocksSelector: true,\n },\n 'heading-six': {\n renderElement: (props) => <H6 {...props.attributes}>{props.children}</H6>,\n icon: HeadingSix,\n label: {\n id: 'components.Blocks.blocks.heading6',\n defaultMessage: 'Heading 6',\n },\n value: {\n type: 'heading',\n level: 6,\n },\n matchNode: (node) => node.type === 'heading' && node.level === 6,\n isInBlocksSelector: true,\n },\n 'list-ordered': {\n renderElement: (props) => <List {...props} />,\n label: {\n id: 'components.Blocks.blocks.orderedList',\n defaultMessage: 'Numbered list',\n },\n value: {\n type: 'list',\n format: 'ordered',\n },\n icon: NumberList,\n matchNode: (node) => node.type === 'list' && node.format === 'ordered',\n isInBlocksSelector: true,\n handleEnterKey: handleEnterKeyOnList,\n handleBackspaceKey: handleBackspaceKeyOnList,\n },\n 'list-unordered': {\n renderElement: (props) => <List {...props} />,\n label: {\n id: 'components.Blocks.blocks.unorderedList',\n defaultMessage: 'Bulleted list',\n },\n value: {\n type: 'list',\n format: 'unordered',\n },\n icon: BulletList,\n matchNode: (node) => node.type === 'list' && node.format === 'unordered',\n isInBlocksSelector: true,\n handleEnterKey: handleEnterKeyOnList,\n handleBackspaceKey: handleBackspaceKeyOnList,\n },\n 'list-item': {\n renderElement: (props) => (\n <Typography as=\"li\" {...props.attributes}>\n {props.children}\n </Typography>\n ),\n value: {\n type: 'list-item',\n },\n matchNode: (node) => node.type === 'list-item',\n isInBlocksSelector: false,\n },\n link: {\n renderElement: (props) => (\n <Link element={props.element} attributes={props.attributes}>\n {props.children}\n </Link>\n ),\n value: {\n type: 'link',\n },\n matchNode: (node) => node.type === 'link',\n isInBlocksSelector: false,\n },\n image: {\n renderElement: (props) => <Image {...props} />,\n icon: Picture,\n label: {\n id: 'components.Blocks.blocks.image',\n defaultMessage: 'Image',\n },\n value: {\n type: 'image',\n },\n matchNode: (node) => node.type === 'image',\n isInBlocksSelector: true,\n },\n quote: {\n renderElement: (props) => <Blockquote {...props.attributes}>{props.children}</Blockquote>,\n icon: Quote,\n label: {\n id: 'components.Blocks.blocks.quote',\n defaultMessage: 'Quote',\n },\n value: {\n type: 'quote',\n },\n matchNode: (node) => node.type === 'quote',\n isInBlocksSelector: true,\n handleEnterKey(editor) {\n /**\n * To determine if we should break out of the quote node, check 2 things:\n * 1. If the cursor is at the end of the quote node\n * 2. If the last line of the quote node is empty\n */\n const quoteNodeEntry = Editor.above(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'quote',\n });\n if (!quoteNodeEntry || !editor.selection) {\n return;\n }\n const [quoteNode, quoteNodePath] = quoteNodeEntry;\n const isNodeEnd = Editor.isEnd(editor, editor.selection.anchor, quoteNodePath);\n const lastTextNode = quoteNode.children.at(-1);\n const isEmptyLine = isText(lastTextNode) && lastTextNode.text.endsWith('\\n');\n\n if (isNodeEnd && isEmptyLine) {\n // Remove the last line break\n Transforms.delete(editor, { distance: 1, unit: 'character', reverse: true });\n // Break out of the quote node new paragraph\n Transforms.insertNodes(editor, {\n type: 'paragraph',\n children: [{ type: 'text', text: '' }],\n });\n } else {\n // Otherwise insert a new line within the quote node\n Transforms.insertText(editor, '\\n');\n\n // If there's nothing after the cursor, disable modifiers\n if (isNodeEnd) {\n Editor.removeMark(editor, 'bold');\n Editor.removeMark(editor, 'italic');\n }\n }\n },\n },\n code: {\n renderElement: (props) => (\n <CodeBlock {...props.attributes}>\n <code>{props.children}</code>\n </CodeBlock>\n ),\n icon: Code,\n label: {\n id: 'components.Blocks.blocks.code',\n defaultMessage: 'Code',\n },\n value: {\n type: 'code',\n },\n matchNode: (node) => node.type === 'code',\n isInBlocksSelector: true,\n handleEnterKey(editor) {\n // Insert a new line within the block\n Transforms.insertText(editor, '\\n');\n },\n },\n };\n}\n\nexport { useBlocksStore, selectorBlockKeys, isSelectorBlockKey };\nexport type { BlocksStore, SelectorBlockKey };\n","/* eslint-disable check-file/filename-naming-convention */\n\nimport * as React from 'react';\n\nimport { Typography } from '@strapi/design-system';\nimport { Bold, Italic, Underline, StrikeThrough, Code } from '@strapi/icons';\nimport { type MessageDescriptor } from 'react-intl';\nimport { Editor, Text, Transforms } from 'slate';\nimport styled, { css } from 'styled-components';\n\nimport { useBlocksEditorContext } from '../BlocksEditor';\n\nconst stylesToInherit = css`\n font-size: inherit;\n color: inherit;\n line-height: inherit;\n`;\n\nconst BoldText = styled(Typography).attrs({ fontWeight: 'bold' })`\n ${stylesToInherit}\n`;\n\nconst ItalicText = styled(Typography)`\n font-style: italic;\n ${stylesToInherit}\n`;\n\nconst UnderlineText = styled(Typography).attrs({ textDecoration: 'underline' })`\n ${stylesToInherit}\n`;\n\nconst StrikeThroughText = styled(Typography).attrs({ textDecoration: 'line-through' })`\n ${stylesToInherit}\n`;\n\nconst InlineCode = styled.code`\n background-color: ${({ theme }) => theme.colors.neutral150};\n border-radius: ${({ theme }) => theme.borderRadius};\n padding: ${({ theme }) => `0 ${theme.spaces[2]}`};\n font-family: 'SF Mono', SFMono-Regular, ui-monospace, 'DejaVu Sans Mono', Menlo, Consolas,\n monospace;\n color: inherit;\n`;\n\ntype ModifierKey = Exclude<keyof Text, 'type' | 'text'>;\n\ntype ModifiersStore = {\n [K in ModifierKey]: {\n icon: React.ComponentType;\n isValidEventKey: (event: React.KeyboardEvent<HTMLElement>) => boolean;\n label: MessageDescriptor;\n checkIsActive: () => boolean;\n handleToggle: () => void;\n renderLeaf: (children: React.JSX.Element | string) => React.JSX.Element;\n };\n};\n\n/**\n * Manages a store of all the available modifiers.\n */\nfunction useModifiersStore(): ModifiersStore {\n const { editor } = useBlocksEditorContext('useModifiersStore');\n const modifiers = Editor.marks(editor);\n\n /**\n * The default handler for checking if a modifier is active\n *\n * @param {string} name - The name of the modifier to check\n */\n const baseCheckIsActive = (name: ModifierKey) => {\n if (!modifiers) return false;\n\n return Boolean(modifiers[name]);\n };\n\n /**\n * The default handler for toggling a modifier\n */\n const baseHandleToggle = (name: ModifierKey) => {\n // If there is no selection, set selection to the end of line\n if (!editor.selection) {\n const endOfEditor = Editor.end(editor, []);\n Transforms.select(editor, endOfEditor);\n }\n if (modifiers?.[name]) {\n Editor.removeMark(editor, name);\n } else {\n Editor.addMark(editor, name, true);\n }\n };\n\n return {\n bold: {\n icon: Bold,\n isValidEventKey: (event) => event.key === 'b',\n label: { id: 'components.Blocks.modifiers.bold', defaultMessage: 'Bold' },\n checkIsActive: () => baseCheckIsActive('bold'),\n handleToggle: () => baseHandleToggle('bold'),\n renderLeaf: (children) => <BoldText>{children}</BoldText>,\n },\n italic: {\n icon: Italic,\n isValidEventKey: (event) => event.key === 'i',\n label: { id: 'components.Blocks.modifiers.italic', defaultMessage: 'Italic' },\n checkIsActive: () => baseCheckIsActive('italic'),\n handleToggle: () => baseHandleToggle('italic'),\n renderLeaf: (children) => <ItalicText>{children}</ItalicText>,\n },\n underline: {\n icon: Underline,\n isValidEventKey: (event) => event.key === 'u',\n label: { id: 'components.Blocks.modifiers.underline', defaultMessage: 'Underline' },\n checkIsActive: () => baseCheckIsActive('underline'),\n handleToggle: () => baseHandleToggle('underline'),\n renderLeaf: (children) => <UnderlineText>{children}</UnderlineText>,\n },\n strikethrough: {\n icon: StrikeThrough,\n isValidEventKey: (event) => event.key === 'S' && event.shiftKey,\n label: { id: 'components.Blocks.modifiers.strikethrough', defaultMessage: 'Strikethrough' },\n checkIsActive: () => baseCheckIsActive('strikethrough'),\n handleToggle: () => baseHandleToggle('strikethrough'),\n renderLeaf: (children) => <StrikeThroughText>{children}</StrikeThroughText>,\n },\n code: {\n icon: Code,\n isValidEventKey: (event) => event.key === 'e',\n label: { id: 'components.Blocks.modifiers.code', defaultMessage: 'Code' },\n checkIsActive: () => baseCheckIsActive('code'),\n handleToggle: () => baseHandleToggle('code'),\n renderLeaf: (children) => <InlineCode>{children}</InlineCode>,\n },\n };\n}\n\nexport { useModifiersStore };\nexport type { ModifiersStore };\n","import { type Element, Node } from 'slate';\n\nexport type Block<T extends Element['type']> = Extract<Node, { type: T }>;\n\n// Wrap Object.entries to get the correct types\nexport const getEntries = <T extends object>(object: T) =>\n Object.entries(object) as [keyof T, T[keyof T]][];\n\n// Wrap Object.keys to get the correct types\nexport const getKeys = <T extends object>(object: T) => Object.keys(object) as (keyof T)[];\n","import * as React from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport {\n type ReactEditor,\n type RenderElementProps,\n type RenderLeafProps,\n Editable,\n} from 'slate-react';\nimport styled from 'styled-components';\n\nimport { useBlocksEditorContext } from './BlocksEditor';\nimport { type BlocksStore, useBlocksStore } from './hooks/useBlocksStore';\nimport { type ModifiersStore, useModifiersStore } from './hooks/useModifiersStore';\nimport { getEntries } from './utils/types';\n\nconst StyledEditable = styled(Editable)`\n // The outline style is set on the wrapper with :focus-within\n outline: none;\n display: flex;\n flex-direction: column;\n gap: ${({ theme }) => theme.spaces[2]};\n height: 100%;\n\n > *:last-child {\n padding-bottom: ${({ theme }) => theme.spaces[3]};\n }\n`;\n\nconst baseRenderLeaf = (props: RenderLeafProps, modifiers: ModifiersStore) => {\n // Recursively wrap the children for each active modifier\n const wrappedChildren = getEntries(modifiers).reduce((currentChildren, modifierEntry) => {\n const [name, modifier] = modifierEntry;\n\n if (props.leaf[name]) {\n return modifier.renderLeaf(currentChildren);\n }\n\n return currentChildren;\n }, props.children);\n\n return <span {...props.attributes}>{wrappedChildren}</span>;\n};\n\nconst baseRenderElement = (props: RenderElementProps, blocks: BlocksStore) => {\n const blockMatch = Object.values(blocks).find((block) => block.matchNode(props.element));\n const block = blockMatch || blocks.paragraph;\n\n return block.renderElement(props);\n};\n\ninterface BlocksInputProps {\n placeholder?: string;\n}\n\nconst BlocksContent = ({ placeholder }: BlocksInputProps) => {\n const { editor, disabled } = useBlocksEditorContext('BlocksContent');\n const blocksRef = React.useRef<HTMLDivElement>(null);\n\n // Create renderLeaf function based on the modifiers store\n const modifiers = useModifiersStore();\n const renderLeaf = React.useCallback(\n (props: RenderLeafProps) => baseRenderLeaf(props, modifiers),\n [modifiers]\n );\n\n // Create renderElement function base on the blocks store\n const blocks = useBlocksStore();\n const renderElement = React.useCallback(\n (props: RenderElementProps) => baseRenderElement(props, blocks),\n [blocks]\n );\n\n const handleEnter = () => {\n if (!editor.selection) {\n return;\n }\n\n // Get the selected node\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n\n // Find the matching block\n const selectedBlock = Object.values(blocks).find((block) => block.matchNode(selectedNode));\n if (!selectedBlock) {\n return;\n }\n\n // Check if there's an enter handler for the selected block\n if (selectedBlock.handleEnterKey) {\n selectedBlock.handleEnterKey(editor);\n } else {\n // If not, insert a new paragraph\n blocks.paragraph.handleEnterKey!(editor);\n }\n };\n\n const handleBackspaceEvent = (event: React.KeyboardEvent<HTMLElement>) => {\n if (!editor.selection) {\n return;\n }\n\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n const selectedBlock = Object.values(blocks).find((block) => block.matchNode(selectedNode));\n\n if (!selectedBlock) {\n return;\n }\n\n if (selectedBlock.handleBackspaceKey) {\n selectedBlock.handleBackspaceKey(editor, event);\n }\n };\n\n /**\n * Modifier keyboard shortcuts\n */\n const handleKeyboardShortcuts = (event: React.KeyboardEvent<HTMLElement>) => {\n const isCtrlOrCmd = event.metaKey || event.ctrlKey;\n\n if (isCtrlOrCmd) {\n Object.values(modifiers).forEach((value) => {\n if (value.isValidEventKey(event)) {\n value.handleToggle();\n }\n });\n }\n };\n\n const handleKeyDown: React.KeyboardEventHandler<HTMLElement> = (event) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n handleEnter();\n }\n if (event.key === 'Backspace') {\n handleBackspaceEvent(event);\n }\n handleKeyboardShortcuts(event);\n };\n\n /**\n * scrollSelectionIntoView : Slate's default method to scroll a DOM selection into the view,\n * thats shifting layout for us when there is a overflowY:scroll on the viewport.\n * We are overriding it to check if the selection is not fully within the visible area of the editor,\n * we use scrollBy one line to the bottom\n */\n const handleScrollSelectionIntoView = (_: ReactEditor, domRange: Range) => {\n const domRect = domRange.getBoundingClientRect();\n const blocksInput = blocksRef.current;\n\n if (!blocksInput) {\n return;\n }\n\n const editorRect = blocksInput.getBoundingClientRect();\n\n // Check if the selection is not fully within the visible area of the editor\n if (domRect.top < editorRect.top || domRect.bottom > editorRect.bottom) {\n // Scroll by one line to the bottom\n blocksInput.scrollBy({\n top: 28, // 20px is the line-height + 8px line gap\n behavior: 'smooth',\n });\n }\n };\n\n return (\n <Box\n ref={blocksRef}\n grow={1}\n width=\"100%\"\n overflow=\"auto\"\n fontSize={2}\n background=\"neutral0\"\n color=\"neutral800\"\n lineHeight={6}\n paddingLeft={4}\n paddingRight={4}\n paddingTop={3}\n >\n <StyledEditable\n readOnly={disabled}\n placeholder={placeholder}\n renderElement={renderElement}\n renderLeaf={renderLeaf}\n onKeyDown={handleKeyDown}\n scrollSelectionIntoView={handleScrollSelectionIntoView}\n />\n </Box>\n );\n};\n\nexport { BlocksContent };\n","import * as React from 'react';\n\nimport * as Toolbar from '@radix-ui/react-toolbar';\nimport { Flex, Icon, Tooltip, SingleSelect, SingleSelectOption, Box } from '@strapi/design-system';\nimport { pxToRem, prefixFileUrlWithBackendUrl, useLibrary } from '@strapi/helper-plugin';\nimport { Link } from '@strapi/icons';\nimport { Attribute } from '@strapi/types';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { type Text, Editor, Transforms, Element as SlateElement, Element, Node } from 'slate';\nimport { ReactEditor } from 'slate-react';\nimport styled from 'styled-components';\n\nimport { useBlocksEditorContext } from './BlocksEditor';\nimport {\n type BlocksStore,\n type SelectorBlockKey,\n isSelectorBlockKey,\n useBlocksStore,\n} from './hooks/useBlocksStore';\nimport { useModifiersStore } from './hooks/useModifiersStore';\nimport { insertLink } from './utils/links';\nimport { type Block, getEntries, getKeys } from './utils/types';\n\nconst ToolbarWrapper = styled(Flex)`\n &[aria-disabled='true'] {\n cursor: not-allowed;\n }\n`;\n\nconst Separator = styled(Toolbar.Separator)`\n background: ${({ theme }) => theme.colors.neutral150};\n width: 1px;\n height: ${pxToRem(24)};\n`;\n\nconst FlexButton = styled(Flex)`\n // Inherit the not-allowed cursor from ToolbarWrapper when disabled\n &[aria-disabled] {\n cursor: inherit;\n }\n\n &[aria-disabled='false'] {\n cursor: pointer;\n\n // Only apply hover styles if the button is enabled\n &:hover {\n background: ${({ theme }) => theme.colors.primary100};\n }\n }\n`;\n\nconst SelectWrapper = styled(Box)`\n // Styling changes to SingleSelect component don't work, so adding wrapper to target SingleSelect\n div[role='combobox'] {\n border: none;\n cursor: pointer;\n min-height: unset;\n padding-top: 6px;\n padding-bottom: 6px;\n\n &[aria-disabled='false']:hover {\n cursor: pointer;\n background: ${({ theme }) => theme.colors.primary100};\n }\n\n &[aria-disabled] {\n background: transparent;\n cursor: inherit;\n\n // Select text and icons should also have disabled color\n span {\n color: ${({ theme }) => theme.colors.neutral600};\n }\n }\n }\n`;\n\ninterface ToolbarButtonProps {\n icon: React.ComponentType;\n name: string;\n label: MessageDescriptor;\n isActive: boolean;\n disabled: boolean;\n handleClick: () => void;\n}\n\nconst ToolbarButton = ({\n icon,\n name,\n label,\n isActive,\n disabled,\n handleClick,\n}: ToolbarButtonProps) => {\n const { editor } = useBlocksEditorContext('ToolbarButton');\n const { formatMessage } = useIntl();\n const labelMessage = formatMessage(label);\n\n const enabledColor = isActive ? 'primary600' : 'neutral600';\n\n return (\n <Tooltip description={labelMessage}>\n <Toolbar.ToggleItem\n value={name}\n data-state={isActive ? 'on' : 'off'}\n onMouseDown={(e) => {\n e.preventDefault();\n handleClick();\n }}\n aria-disabled={disabled}\n disabled={disabled}\n aria-label={labelMessage}\n asChild\n >\n <FlexButton\n as=\"button\"\n disabled={disabled}\n background={isActive ? 'primary100' : ''}\n alignItems=\"center\"\n justifyContent=\"center\"\n width={7}\n height={7}\n hasRadius\n onMouseDown={() => {\n handleClick();\n // When a button is clicked it blurs the editor, restore the focus to the editor\n ReactEditor.focus(editor);\n }}\n aria-label={labelMessage}\n >\n <Icon width={3} height={3} as={icon} color={disabled ? 'neutral300' : enabledColor} />\n </FlexButton>\n </Toolbar.ToggleItem>\n </Tooltip>\n );\n};\n\nconst toggleBlock = (editor: Editor, value: Partial<Element>) => {\n if (!value.type) {\n throw new Error('The block type is required');\n }\n\n // Set the selected block properties received from the useBlockStore\n const blockProperties = {\n type: value.type,\n level: (value as Block<'heading'>).level || null,\n format: (value as Block<'list'>).format || null,\n };\n\n if (editor.selection) {\n // If the selection is inside a list, split the list so that the modified block is outside of it\n Transforms.unwrapNodes(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n split: true,\n });\n\n // When there is a selection, update the existing block in the tree\n Transforms.setNodes(editor, blockProperties);\n } else {\n /**\n * When there is no selection, we want to insert a new block just after\n * the last node inserted and prevent the code to add an empty paragraph\n * between them.\n */\n const [, lastNodePath] = Editor.last(editor, []);\n const [parentNode] = Editor.parent(editor, lastNodePath);\n Transforms.removeNodes(editor, {\n voids: true,\n hanging: true,\n at: {\n anchor: { path: lastNodePath, offset: 0 },\n focus: { path: lastNodePath, offset: 0 },\n },\n });\n Transforms.insertNodes(\n editor,\n {\n ...blockProperties,\n children: parentNode.children,\n } as Node,\n {\n at: [lastNodePath[0]],\n select: true,\n }\n );\n }\n\n // When the select is clicked it blurs the editor, restore the focus to the editor\n ReactEditor.focus(editor);\n};\n\nconst IMAGE_SCHEMA_FIELDS = [\n 'name',\n 'alternativeText',\n 'url',\n 'caption',\n 'width',\n 'height',\n 'formats',\n 'hash',\n 'ext',\n 'mime',\n 'size',\n 'previewUrl',\n 'provider',\n 'provider_metadata',\n 'createdAt',\n 'updatedAt',\n];\n\nconst pick = <T extends object, K extends keyof T>(object: T, keys: K[]): Pick<T, K> => {\n const entries = keys.map((key) => [key, object[key]]);\n return Object.fromEntries(entries);\n};\n\nconst ImageDialog = ({ handleClose }: { handleClose: () => void }) => {\n const { editor } = useBlocksEditorContext('ImageDialog');\n const { components } = useLibrary();\n\n if (!components) return null;\n\n const MediaLibraryDialog = components['media-library'] as React.ComponentType<{\n allowedTypes: Attribute.MediaKind[];\n onClose: () => void;\n onSelectAssets: (_images: Attribute.MediaValue<true>) => void;\n }>;\n\n const insertImages = (images: Block<'image'>['image'][]) => {\n // If the selection is inside a list, split the list so that the modified block is outside of it\n Transforms.unwrapNodes(editor, {\n match: (node) => !Editor.isEditor(node) && node.type === 'list',\n split: true,\n });\n\n // Save the path of the node that is being replaced by an image to insert the images there later\n // It's the closest full block node above the selection\n const nodeEntryBeingReplaced = Editor.above(editor, {\n match(node) {\n if (Editor.isEditor(node)) return false;\n\n const isInlineNode = ['text', 'link'].includes(node.type);\n\n return !isInlineNode;\n },\n });\n\n if (!nodeEntryBeingReplaced) return;\n const [, pathToInsert] = nodeEntryBeingReplaced;\n\n // Remove the previous node that is being replaced by an image\n Transforms.removeNodes(editor);\n\n // Convert images to nodes and insert them\n const nodesToInsert = images.map((image) => {\n const imageNode: Block<'image'> = {\n type: 'image',\n image,\n children: [{ type: 'text', text: '' }],\n };\n return imageNode;\n });\n Transforms.insertNodes(editor, nodesToInsert, { at: pathToInsert });\n };\n\n const handleSelectAssets = (images: Attribute.MediaValue<true>) => {\n const formattedImages = images.map((image) => {\n // Create an object with imageSchema defined and exclude unnecessary props coming from media library config\n const expectedImage = pick(image, IMAGE_SCHEMA_FIELDS);\n\n const nodeImage: Block<'image'>['image'] = {\n ...expectedImage,\n alternativeText: expectedImage.alternativeText || expectedImage.name,\n url: prefixFileUrlWithBackendUrl(image.url),\n };\n\n return nodeImage;\n });\n\n insertImages(formattedImages);\n\n if (isLastBlockType(editor, 'image')) {\n // Insert blank line to add new blocks below image block\n insertEmptyBlockAtLast(editor);\n }\n\n handleClose();\n };\n\n return (\n <MediaLibraryDialog\n allowedTypes={['images']}\n onClose={handleClose}\n onSelectAssets={handleSelectAssets}\n />\n );\n};\n\nconst isLastBlockType = (editor: Editor, type: Element['type']) => {\n const { selection } = editor;\n\n if (!selection) return false;\n\n const [currentBlock] = Editor.nodes(editor, {\n at: selection,\n match: (node) => !Editor.isEditor(node) && node.type === type,\n });\n\n if (currentBlock) {\n const [, currentNodePath] = currentBlock;\n\n const isNodeAfter = Boolean(Editor.after(editor, currentNodePath));\n\n return !isNodeAfter;\n }\n\n return false;\n};\n\nconst insertEmptyBlockAtLast = (editor: Editor) => {\n Transforms.insertNodes(\n editor,\n {\n type: 'paragraph',\n children: [{ type: 'text', text: '' }],\n },\n { at: [editor.children.length] }\n );\n};\n\nconst BlocksDropdown = () => {\n const { editor, disabled } = useBlocksEditorContext('BlocksDropdown');\n const { formatMessage } = useIntl();\n const [isMediaLibraryVisible, setIsMediaLibraryVisible] = React.useState(false);\n\n const blocks = useBlocksStore();\n\n const blockKeysToInclude: SelectorBlockKey[] = getEntries(blocks).reduce<\n ReturnType<typeof getEntries>\n >((currentKeys, entry) => {\n const [key, block] = entry;\n\n return block.isInBlocksSelector ? [...currentKeys, key] : currentKeys;\n }, []);\n\n const [blockSelected, setBlockSelected] = React.useState<SelectorBlockKey>('paragraph');\n\n const selectOption = (optionKey: unknown) => {\n if (!isSelectorBlockKey(optionKey)) {\n return;\n }\n\n if (['list-ordered', 'list-unordered'].includes(optionKey)) {\n // retrieve the list format\n const listFormat = (blocks[optionKey].value as { format: Block<'list'>['format'] })?.format;\n\n // check if the list is already active\n const isActive = isListActive(\n editor,\n (node) => !Editor.isEditor(node) && !isText(node) && blocks[optionKey].matchNode(node)\n );\n\n // toggle the list\n toggleList(editor, isActive, listFormat);\n } else if (optionKey !== 'image') {\n toggleBlock(editor, blocks[optionKey].value);\n }\n\n setBlockSelected(optionKey as SelectorBlockKey);\n\n if (optionKey === 'code' && isLastBlockType(editor, 'code')) {\n // Insert blank line to add new blocks below code block\n insertEmptyBlockAtLast(editor);\n }\n\n if (optionKey === 'image') {\n setIsMediaLibraryVisible(true);\n }\n };\n\n /**\n * Prevent the select from focusing itself so ReactEditor.focus(editor) can focus the editor instead.\n *\n * The editor first loses focus to a blur event when clicking the select button. However,\n * refocusing the editor is not enough since the select's default behavior is to refocus itself\n * after an option is selected.\n *\n */\n const preventSelectFocus = (e: Event) => e.preventDefault();\n\n // Listen to the selection change and update the selected block in the dropdown\n React.useEffect(() => {\n if (editor.selection) {\n // Get the parent node of the anchor\n // with a depth of two to retrieve also the list item parents\n const [anchorNode] = Editor.parent(editor, editor.selection.anchor, {\n edge: 'start',\n depth: 2,\n });\n // Find the block key that matches the anchor node\n const anchorBlockKey = getKeys(blocks).find(\n (blockKey) => !Editor.isEditor(anchorNode) && blocks[blockKey].matchNode(anchorNode)\n );\n\n // Change the value selected in the dropdown if it doesn't match the anchor block key\n if (anchorBlockKey && anchorBlockKey !== blockSelected) {\n setBlockSelected(anchorBlockKey as SelectorBlockKey);\n }\n }\n }, [editor.selection, editor, blocks, blockSelected]);\n\n return (\n <>\n <SelectWrapper>\n <SingleSelect\n startIcon={<Icon as={blocks[blockSelected].icon} />}\n onChange={selectOption}\n placeholder={formatMessage(blocks[blockSelected].label)}\n value={blockSelected}\n onCloseAutoFocus={preventSelectFocus}\n aria-label={formatMessage({\n id: 'components.Blocks.blocks.selectBlock',\n defaultMessage: 'Select a block',\n })}\n disabled={disabled}\n >\n {blockKeysToInclude.map((key) => (\n <BlockOption\n key={key}\n value={key}\n label={blocks[key].label}\n icon={blocks[key].icon}\n blockSelected={blockSelected}\n />\n ))}\n </SingleSelect>\n </SelectWrapper>\n {isMediaLibraryVisible && <ImageDialog handleClose={() => setIsMediaLibraryVisible(false)} />}\n </>\n );\n};\n\ninterface BlockOptionProps {\n value: string;\n icon: React.ComponentType;\n label: MessageDescriptor;\n blockSelected: string;\n}\n\nconst BlockOption = ({ value, icon, label, blockSelected }: BlockOptionProps) => {\n const { formatMessage } = useIntl();\n\n const isSelected = value === blockSelected;\n\n return (\n <SingleSelectOption\n startIcon={<Icon as={icon} color={isSelected ? 'primary600' : 'neutral600'} />}\n value={value}\n >\n {formatMessage(label)}\n </SingleSelectOption>\n );\n};\n\nconst isText = (node: unknown): node is Text => {\n return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'text';\n};\n\nconst isListNode = (node: unknown): node is Block<'list'> => {\n return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'list';\n};\n\nconst isListActive = (editor: Editor, matchNode: (node: Node) => boolean) => {\n const { selection } = editor;\n\n if (!selection) return false;\n\n const [match] = Array.from(\n Editor.nodes(editor, {\n at: Editor.unhangRange(editor, selection),\n match: matchNode,\n })\n );\n\n return Boolean(match);\n};\n\nconst toggleList = (editor: Editor, isActive: boolean, format: Block<'list'>['format']) => {\n // If we have selected a portion of content in the editor,\n // we want to convert it to a list or if it is already a list,\n // convert it back to a paragraph\n if (editor.selection) {\n Transforms.unwrapNodes(editor, {\n match: (node) => isListNode(node) && ['ordered', 'unordered'].includes(node.format),\n split: true,\n });\n\n Transforms.setNodes(editor, {\n type: isActive ? 'paragraph' : 'list-item',\n });\n\n if (!isActive) {\n const block = { type: 'list' as const, format, children: [] };\n Transforms.wrapNodes(editor, block);\n }\n } else {\n // There is no selection, convert the last inserted node to a list\n // If it is already a list, convert it back to a paragraph\n const [, lastNodePath] = Editor.last(editor, []);\n\n const [parentNode] = Editor.parent(editor, lastNodePath);\n\n Transforms.removeNodes(editor, {\n voids: true,\n hanging: true,\n at: {\n anchor: { path: lastNodePath, offset: 0 },\n focus: { path: lastNodePath, offset: 0 },\n },\n });\n\n Transforms.insertNodes(\n editor,\n {\n type: isActive ? 'paragraph' : 'list-item',\n children: [...parentNode.children],\n } as Node,\n {\n at: [lastNodePath[0]],\n select: true,\n }\n );\n\n if (!isActive) {\n // If the selection is now a list item, wrap it inside a list\n const block = { type: 'list' as const, format, children: [] };\n Transforms.wrapNodes(editor, block);\n }\n }\n};\n\ninterface ListButtonProps {\n block: BlocksStore['list-ordered'] | BlocksStore['list-unordered'];\n}\n\nconst ListButton = ({ block }: ListButtonProps) => {\n const { editor, disabled } = useBlocksEditorContext('ListButton');\n\n const { icon, matchNode, value, label } = block;\n const { format } = value as { format: Block<'list'>['format'] };\n\n const isActive = isListActive(\n editor,\n (node) => !Editor.isEditor(node) && node.type !== 'text' && matchNode(node)\n );\n\n return (\n <ToolbarButton\n icon={icon}\n name={format}\n label={label}\n isActive={isActive}\n disabled={disabled}\n handleClick={() => toggleList(editor, isActive, format)}\n />\n );\n};\n\nconst LinkButton = ({ disabled }: { disabled: boolean }) => {\n const { editor } = useBlocksEditorContext('LinkButton');\n\n const isLinkActive = () => {\n const { selection } = editor;\n\n if (!selection) return false;\n\n const [match] = Array.from(\n Editor.nodes(editor, {\n at: Editor.unhangRange(editor, selection),\n match: (node) => SlateElement.isElement(node) && node.type === 'link',\n })\n );\n\n return Boolean(match);\n };\n\n const isLinkDisabled = () => {\n // Always disabled when the whole editor is disabled\n if (disabled) {\n return true;\n }\n\n // Always enabled when there's no selection\n if (!editor.selection) {\n return false;\n }\n\n // Get the block node closest to the anchor and focus\n const anchorNodeEntry = Editor.above(editor, {\n at: editor.selection.anchor,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n const focusNodeEntry = Editor.above(editor, {\n at: editor.selection.focus,\n match: (node) => !Editor.isEditor(node) && node.type !== 'text',\n });\n\n if (!anchorNodeEntry || !focusNodeEntry) {\n return false;\n }\n\n // Disabled if the anchor and focus are not in the same block\n return anchorNodeEntry[0] !== focusNodeEntry[0];\n };\n\n const addLink = () => {\n // We insert an empty anchor, so we split the DOM to have a element we can use as reference for the popover\n insertLink(editor, { url: '' });\n };\n\n return (\n <ToolbarButton\n icon={Link}\n name=\"link\"\n label={{\n id: 'components.Blocks.link',\n defaultMessage: 'Link',\n }}\n isActive={isLinkActive()}\n handleClick={addLink}\n disabled={isLinkDisabled()}\n />\n );\n};\n\nconst BlocksToolbar = () => {\n const modifiers = useModifiersStore();\n const blocks = useBlocksStore();\n const { editor, disabled } = useBlocksEditorContext('BlocksToolbar');\n\n /**\n * The modifier buttons are disabled when an image is selected.\n */\n const checkButtonDisabled = () => {\n // Always disabled when the whole editor is disabled\n if (disabled) {\n return true;\n }\n\n if (!editor.selection) {\n return false;\n }\n\n const selectedNode = editor.children[editor.selection.anchor.path[0]];\n\n if (['image', 'code'].includes(selectedNode.type)) {\n return true;\n }\n\n return false;\n };\n\n const isButtonDisabled = checkButtonDisabled();\n\n return (\n <Toolbar.Root aria-disabled={disabled} asChild>\n <ToolbarWrapper gap={2} padding={2}>\n <BlocksDropdown />\n <Separator />\n <Toolbar.ToggleGroup type=\"multiple\" asChild>\n <Flex gap={1}>\n {Object.entries(modifiers).map(([name, modifier]) => (\n <ToolbarButton\n key={name}\n name={name}\n icon={modifier.icon}\n label={modifier.label}\n isActive={modifier.checkIsActive()}\n handleClick={modifier.handleToggle}\n disabled={isButtonDisabled}\n />\n ))}\n <LinkButton disabled={isButtonDisabled} />\n </Flex>\n </Toolbar.ToggleGroup>\n <Separator />\n <Toolbar.ToggleGroup type=\"single\" asChild>\n <Flex gap={1}>\n <ListButton block={blocks['list-unordered']} />\n <ListButton block={blocks['list-ordered']} />\n </Flex>\n </Toolbar.ToggleGroup>\n </ToolbarWrapper>\n </Toolbar.Root>\n );\n};\n\nexport { BlocksToolbar };\n","import { type BaseEditor, Path, Transforms, Range, Point, Editor } from 'slate';\n\nimport { insertLink } from '../utils/links';\n\ninterface LinkEditor extends BaseEditor {\n lastInsertedLinkPath: Path | null;\n}\n\nconst withLinks = (editor: Editor) => {\n const { isInline, apply, insertText, insertData } = editor;\n\n // Links are inline elements, so we need to override the isInline method for slate\n editor.isInline = (element) => {\n return element.type === 'link' ? true : isInline(element);\n };\n\n // We keep a track of the last inserted link path\n // So we can show the popover on the link component if that link is the last one inserted\n editor.lastInsertedLinkPath = null;\n\n // We intercept the apply method, so everytime we insert a new link, we save its path\n editor.apply = (operation) => {\n if (operation.type === 'insert_node') {\n if (!Editor.isEditor(operation.node) && operation.node.type === 'link') {\n editor.lastInsertedLinkPath = operation.path;\n }\n } else if (operation.type === 'move_node') {\n // We need to update the last inserted link path when link is moved\n // If link is the first word in the paragraph we dont need to update the path\n if (Path.hasPrevious(operation.path) && editor.lastInsertedLinkPath) {\n editor.lastInsertedLinkPath = Path.transform(editor.lastInsertedLinkPath, operation);\n }\n }\n\n apply(operation);\n };\n\n editor.insertText = (text) => {\n // When selection is at the end of a link and user types a space, we want to break the link\n if (editor.selection && Range.isCollapsed(editor.selection) && text === ' ') {\n const linksInSelection = Array.from(\n Editor.nodes(editor, {\n at: editor.selection,\n match: (node) => !Editor.isEditor(node) && node.type === 'link',\n })\n );\n\n const selectionIsInLink = editor.selection && linksInSelection.length > 0;\n const selectionIsAtEndOfLink =\n selectionIsInLink &&\n Point.equals(editor.selection.anchor, Editor.end(editor, linksInSelection[0][1]));\n\n if (selectionIsAtEndOfLink) {\n Transforms.insertNodes(\n editor,\n { text: ' ', type: 'text' },\n { at: Path.next(linksInSelection[0][1]), select: true }\n );\n\n return;\n }\n }\n\n insertText(text);\n };\n\n // Add data as a clickable link if its a valid URL\n editor.insertData = (data) => {\n const pastedText = data.getData('text/plain');\n\n if (pastedText) {\n try {\n // eslint-disable-next-line no-new\n new URL(pastedText);\n insertLink(editor, { url: pastedText });\n\n return;\n } catch (error) {\n // continue normal data insertion\n }\n }\n\n insertData(data);\n };\n\n return editor;\n};\n\nexport { withLinks, type LinkEditor };\n","import { type Text, Node, Editor, Element, Transforms } from 'slate';\n\nconst isText = (node: unknown): node is Text => {\n return Node.isNode(node) && !Editor.isEditor(node) && node.type === 'text';\n};\n\n/**\n * This plugin is used to normalize the Slate document to match the Strapi schema.\n */\nconst withStrapiSchema = (editor: Editor) => {\n const { normalizeNode } = editor;\n\n /**\n * On the strapi schema, we want text nodes to have type: text\n * By default, Slate add text nodes without type: text\n * So we add this normalization for the cases when Slate add text nodes automatically\n */\n editor.normalizeNode = (entry) => {\n const [node, path] = entry;\n\n if (!Element.isElement(node) && !isText(node)) {\n Transforms.setNodes(editor, { type: 'text' }, { at: path });\n\n return;\n }\n\n normalizeNode(entry);\n };\n\n return editor;\n};\n\nexport { withStrapiSchema };\n","import * as React from 'react';\n\nimport { createContext } from '@radix-ui/react-context';\nimport { InputWrapper, Divider } from '@strapi/design-system';\nimport { type Attribute } from '@strapi/types';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { type Editor, type Descendant, createEditor } from 'slate';\nimport { withHistory } from 'slate-history';\nimport { Slate, withReact, ReactEditor, useSlate } from 'slate-react';\nimport styled from 'styled-components';\n\nimport { BlocksContent } from './BlocksContent';\nimport { BlocksToolbar } from './BlocksToolbar';\nimport { withLinks } from './plugins/withLinks';\nimport { withStrapiSchema } from './plugins/withStrapiSchema';\n\n/* -------------------------------------------------------------------------------------------------\n * BlocksEditorProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface BlocksEditorContextValue {\n disabled: boolean;\n}\n\nconst [BlocksEditorProvider, usePartialBlocksEditorContext] =\n createContext<BlocksEditorContextValue>('BlocksEditor');\n\nfunction useBlocksEditorContext(\n consumerName: string\n): BlocksEditorContextValue & { editor: Editor } {\n const context = usePartialBlocksEditorContext(consumerName);\n const editor = useSlate();\n\n return {\n ...context,\n editor,\n };\n}\n\n/* -------------------------------------------------------------------------------------------------\n * BlocksEditor\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditorDivider = styled(Divider)`\n background: ${({ theme }) => theme.colors.neutral200};\n`;\n\n/**\n * Forces an update of the Slate editor when the value prop changes from outside of Slate.\n * The root cause is that Slate is not a controlled component: https://github.com/ianstormtaylor/slate/issues/4612\n * Why not use JSON.stringify(value) as the key?\n * Because it would force a rerender of the entire editor every time the user types a character.\n * Why not use the entity id as the key, since it's unique for each locale?\n * Because it would not solve the problem when using the \"fill in from other locale\" feature\n */\nfunction useResetKey(value?: Attribute.BlocksValue): {\n key: number;\n incrementSlateUpdatesCount: () => void;\n} {\n // Keep track how how many times Slate detected a change from a user interaction in the editor\n const slateUpdatesCount = React.useRef(0);\n // Keep track of how many times the value prop was updated, whether from within editor or from outside\n const valueUpdatesCount = React.useRef(0);\n // Use a key to force a rerender of the Slate editor when needed\n const [key, setKey] = React.useState(0);\n\n React.useEffect(() => {\n valueUpdatesCount.current += 1;\n\n // If the 2 refs are not equal, it means the value was updated from outside\n if (valueUpdatesCount.current !== slateUpdatesCount.current) {\n // So we change the key to force a rerender of the Slate editor,\n // which will pick up the new value through its initialValue prop\n setKey((previousKey) => previousKey + 1);\n\n // Then bring the 2 refs back in sync\n slateUpdatesCount.current = valueUpdatesCount.current;\n }\n }, [value]);\n\n return { key, incrementSlateUpdatesCount: () => (slateUpdatesCount.current += 1) };\n}\n\n/**\n * Images are void elements. They handle the rendering of their children instead of Slate.\n * See the Slate documentation for more information:\n * - https://docs.slatejs.org/api/nodes/element#void-vs-not-void\n * - https://docs.slatejs.org/api/nodes/element#rendering-void-elements\n */\nconst withImages = (editor: Editor) => {\n const { isVoid } = editor;\n\n editor.isVoid = (element) => {\n return element.type === 'image' ? true : isVoid(element);\n };\n\n return editor;\n};\n\nconst pipe =\n (...fns: ((baseEditor: Editor) => Editor)[]) =>\n (value: Editor) =>\n fns.reduce<Editor>((prev, fn) => fn(prev), value);\n\ninterface BlocksEditorProps {\n name: string;\n onChange: (event: {\n target: { name: string; value: Attribute.BlocksValue; type: 'blocks' };\n }) => void;\n disabled?: boolean;\n value?: Attribute.BlocksValue;\n placeholder?: MessageDescriptor;\n error?: string;\n}\n\nconst BlocksEditor = React.forwardRef<{ focus: () => void }, BlocksEditorProps>(\n ({ disabled = false, name, placeholder, onChange, value, error }, forwardedRef) => {\n const { formatMessage } = useIntl();\n\n const [editor] = React.useState(() =>\n pipe(withHistory, withImages, withStrapiSchema, withReact, withLinks)(createEditor())\n );\n const formattedPlaceholder =\n placeholder &&\n formatMessage({ id: placeholder.id, defaultMessage: placeholder.defaultMessage });\n\n /**\n * Editable is not able to hold the ref, https://github.com/ianstormtaylor/slate/issues/4082\n * so with \"useImperativeHandle\" we can use ReactEditor methods to expose to the parent above\n * also not passing forwarded ref here, gives console warning.\n */\n React.useImperativeHandle(\n forwardedRef,\n () => ({\n focus() {\n ReactEditor.focus(editor);\n },\n }),\n [editor]\n );\n\n const { key, incrementSlateUpdatesCount } = useResetKey(value);\n\n const handleSlateChange = (state: Descendant[]) => {\n const isAstChange = editor.operations.some((op) => op.type !== 'set_selection');\n\n if (isAstChange) {\n incrementSlateUpdatesCount();\n\n onChange({\n // Casting is needed because Slate's onChange type doesn't take into consideration\n // that we set Editor['children'] to Attribute.BlocksValue in custom.d.ts\n target: { name, value: state as Attribute.BlocksValue, type: 'blocks' },\n });\n }\n };\n\n return (\n <Slate\n editor={editor}\n initialValue={value || [{ type: 'paragraph', children: [{ type: 'text', text: '' }] }]}\n onChange={handleSlateChange}\n key={key}\n >\n <BlocksEditorProvider disabled={disabled}>\n <InputWrapper\n direction=\"column\"\n alignItems=\"flex-start\"\n height=\"512px\"\n disabled={disabled}\n hasError={Boolean(error)}\n style={{ overflow: 'hidden' }}\n >\n <BlocksToolbar />\n <EditorDivider width=\"100%\" />\n <BlocksContent placeholder={formattedPlaceholder} />\n </InputWrapper>\n </BlocksEditorProvider>\n </Slate>\n );\n }\n);\n\nexport { BlocksEditor, BlocksEditorProvider, useBlocksEditorContext };\n","import * as React from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { type MessageDescriptor, useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\n// @ts-expect-error TODO convert to typescript\nimport { Hint } from '../Hint';\n\nimport { BlocksEditor } from './BlocksEditor';\n\nconst LabelAction = styled(Box)`\n svg path {\n fill: ${({ theme }) => theme.colors.neutral500};\n }\n`;\n\ninterface BlocksInputProps extends React.ComponentPropsWithoutRef<typeof BlocksEditor> {\n intlLabel: MessageDescriptor;\n attribute: { type: string; [key: string]: unknown };\n description?: MessageDescriptor;\n labelAction?: React.ReactNode;\n required?: boolean;\n hint?: string | string[];\n}\n\nconst BlocksInput = React.forwardRef<{ focus: () => void }, BlocksInputProps>(\n (\n { intlLabel, labelAction, name, required = false, error = '', hint = null, ...editorProps },\n forwardedRef\n ) => {\n const { formatMessage } = useIntl();\n\n const label = intlLabel.id ? formatMessage(intlLabel) : name;\n\n return (\n <>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <Flex gap={1}>\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"neutral800\">\n {label}\n {required && (\n <Typography textColor=\"danger600\" lineHeight=\"0px\">\n *\n </Typography>\n )}\n </Typography>\n {labelAction && <LabelAction paddingLeft={1}>{labelAction}</LabelAction>}\n </Flex>\n <BlocksEditor name={name} error={error} ref={forwardedRef} {...editorProps} />\n <Hint hint={hint} name={name} error={error} />\n </Flex>\n {error && (\n <Box paddingTop={1}>\n <Typography variant=\"pi\" textColor=\"danger600\" data-strapi-field-error>\n {error}\n </Typography>\n </Box>\n )}\n </>\n );\n }\n);\n\nexport { BlocksInput };\n","import { FieldAction, Flex } from '@strapi/design-system';\nimport styled, { keyframes } from 'styled-components';\n\nexport const FieldActionWrapper = styled(FieldAction)`\n svg {\n height: 1rem;\n width: 1rem;\n path {\n fill: ${({ theme }) => theme.colors.neutral400};\n }\n }\n\n svg:hover {\n path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n`;\n\nexport const TextValidation = styled(Flex)`\n svg {\n height: ${12 / 16}rem;\n width: ${12 / 16}rem;\n\n path {\n fill: ${({ theme, available }) =>\n available ? theme.colors.success600 : theme.colors.danger600};\n }\n }\n`;\n\nconst rotation = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(359deg);\n }\n`;\n\nexport const LoadingWrapper = styled(Flex)`\n animation: ${rotation} 2s infinite linear;\n`;\n","const UID_REGEX = /^[A-Za-z0-9-_.~]*$/;\n\nexport default UID_REGEX;\n","import * as React from 'react';\n\nimport { Flex, TextInput, Typography } from '@strapi/design-system';\nimport {\n useAPIErrorHandler,\n useCMEditViewDataManager,\n useFetchClient,\n useNotification,\n} from '@strapi/helper-plugin';\nimport { CheckCircle, ExclamationMarkCircle, Loader, Refresh } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQuery } from 'react-query';\n\nimport { useDebounce } from '../../../hooks/useDebounce';\n\nimport { FieldActionWrapper, LoadingWrapper, TextValidation } from './endActionStyle';\nimport UID_REGEX from './regex';\n\nconst InputUID = React.forwardRef(\n (\n {\n contentTypeUID,\n hint,\n disabled,\n error,\n intlLabel,\n labelAction,\n name,\n onChange,\n value,\n placeholder,\n required,\n },\n forwardedRef\n ) => {\n const [availability, setAvailability] = React.useState(null);\n const [showRegenerate, setShowRegenerate] = React.useState(false);\n /**\n * @type {string | null}\n */\n const debouncedValue = useDebounce(value, 300);\n const { modifiedData, initialData } = useCMEditViewDataManager();\n const toggleNotification = useNotification();\n const { formatAPIError } = useAPIErrorHandler();\n const { formatMessage } = useIntl();\n const { post } = useFetchClient();\n\n const label = intlLabel.id\n ? formatMessage(\n { id: intlLabel.id, defaultMessage: intlLabel.defaultMessage },\n { ...intlLabel.values }\n )\n : name;\n\n const formattedPlaceholder = placeholder\n ? formatMessage(\n { id: placeholder.id, defaultMessage: placeholder.defaultMessage },\n { ...placeholder.values }\n )\n : '';\n\n /**\n * @type {import('react-query').UseQueryResult<string>}\n */\n const { data: defaultGeneratedUID, isLoading: isGeneratingDefaultUID } = useQuery({\n queryKey: ['uid', { contentTypeUID, field: name, data: modifiedData }],\n async queryFn({ queryKey }) {\n const [, body] = queryKey;\n\n const {\n data: { data },\n } = await post('/content-manager/uid/generate', body);\n\n return data;\n },\n onError(err) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(err),\n });\n },\n enabled: !value && required,\n });\n\n /**\n * If the defaultGeneratedUID is available, then we set it as the value,\n * but we also want to set it as the initialValue too.\n */\n React.useEffect(() => {\n if (defaultGeneratedUID) {\n onChange({ target: { name, value: defaultGeneratedUID, type: 'text' } }, true);\n }\n }, [defaultGeneratedUID, name, onChange]);\n\n const { mutate: generateUID, isLoading: isGeneratingUID } = useMutation({\n async mutationFn(body) {\n const {\n data: { data },\n } = await post('/content-manager/uid/generate', body);\n\n return data;\n },\n onSuccess(data) {\n onChange({ target: { name, value: data, type: 'text' } });\n },\n onError(err) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(err),\n });\n },\n });\n\n /**\n * @type {import('react-query').UseQueryResult<{ isAvailable: boolean }>\n */\n const { data: availabilityData, isLoading: isCheckingAvailability } = useQuery({\n queryKey: [\n 'uid',\n { contentTypeUID, field: name, value: debouncedValue ? debouncedValue.trim() : '' },\n ],\n async queryFn({ queryKey }) {\n const [, body] = queryKey;\n\n const { data } = await post('/content-manager/uid/check-availability', body);\n\n return data;\n },\n enabled: Boolean(\n debouncedValue !== initialData[name] &&\n debouncedValue &&\n UID_REGEX.test(debouncedValue.trim())\n ),\n onError(err) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(err),\n });\n },\n });\n\n React.useEffect(() => {\n /**\n * always store the data in state because that way as seen below\n * we can then remove the data to stop showing the label.\n */\n setAvailability(availabilityData);\n\n let timer;\n\n if (availabilityData?.isAvailable) {\n timer = setTimeout(() => {\n setAvailability(null);\n }, 4000);\n }\n\n return () => {\n if (timer) {\n clearTimeout(timer);\n }\n };\n }, [availabilityData]);\n\n const isLoading = isGeneratingDefaultUID || isGeneratingUID || isCheckingAvailability;\n\n return (\n <TextInput\n ref={forwardedRef}\n disabled={disabled}\n error={error}\n endAction={\n <Flex position=\"relative\" gap={1}>\n {availability && !showRegenerate && (\n <TextValidation\n alignItems=\"center\"\n gap={1}\n justifyContent=\"flex-end\"\n available={!!availability?.isAvailable}\n data-not-here-outer\n position=\"absolute\"\n pointerEvents=\"none\"\n right={6}\n width=\"100px\"\n >\n {availability?.isAvailable ? <CheckCircle /> : <ExclamationMarkCircle />}\n\n <Typography\n textColor={availability.isAvailable ? 'success600' : 'danger600'}\n variant=\"pi\"\n >\n {formatMessage(\n availability.isAvailable\n ? {\n id: 'content-manager.components.uid.available',\n defaultMessage: 'Available',\n }\n : {\n id: 'content-manager.components.uid.unavailable',\n defaultMessage: 'Unavailable',\n }\n )}\n </Typography>\n </TextValidation>\n )}\n\n {!disabled && (\n <>\n {showRegenerate && (\n <TextValidation alignItems=\"center\" justifyContent=\"flex-end\" gap={1}>\n <Typography textColor=\"primary600\" variant=\"pi\">\n {formatMessage({\n id: 'content-manager.components.uid.regenerate',\n defaultMessage: 'Regenerate',\n })}\n </Typography>\n </TextValidation>\n )}\n\n <FieldActionWrapper\n onClick={() => generateUID({ contentTypeUID, field: name, data: modifiedData })}\n label={formatMessage({\n id: 'content-manager.components.uid.regenerate',\n defaultMessage: 'Regenerate',\n })}\n onMouseEnter={() => setShowRegenerate(true)}\n onMouseLeave={() => setShowRegenerate(false)}\n >\n {isLoading ? (\n <LoadingWrapper data-testid=\"loading-wrapper\">\n <Loader />\n </LoadingWrapper>\n ) : (\n <Refresh />\n )}\n </FieldActionWrapper>\n </>\n )}\n </Flex>\n }\n hint={hint}\n label={label}\n labelAction={labelAction}\n name={name}\n onChange={onChange}\n placeholder={formattedPlaceholder}\n value={value || ''}\n required={required}\n />\n );\n }\n);\n\nInputUID.propTypes = {\n contentTypeUID: PropTypes.string.isRequired,\n disabled: PropTypes.bool,\n error: PropTypes.string,\n intlLabel: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n values: PropTypes.object,\n }).isRequired,\n labelAction: PropTypes.element,\n name: PropTypes.string.isRequired,\n onChange: PropTypes.func.isRequired,\n value: PropTypes.string,\n placeholder: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n values: PropTypes.object,\n }),\n required: PropTypes.bool,\n hint: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\n};\n\nInputUID.defaultProps = {\n disabled: false,\n error: undefined,\n labelAction: undefined,\n placeholder: undefined,\n value: '',\n required: false,\n hint: '',\n};\n\nexport { InputUID };\n","import React from 'react';\n\nfunction connect(WrappedComponent, select) {\n return (props) => {\n const selectors = select(props);\n\n return <WrappedComponent {...props} {...selectors} />;\n };\n}\n\nexport default connect;\n","/**\n * @param {Array<{id: string}>} browserStateRelations\n * @param {Array<{id: string}>} serverStateRelations\n * @returns {[connected: string[], disconnected: string[]]} – the connected and disconnected relations ids\n */\nexport const diffRelations = (browserStateRelations = [], serverStateRelations = []) => {\n const connected = browserStateRelations.reduce((acc, relation) => {\n if (!serverStateRelations.find((oldRelation) => oldRelation.id === relation.id)) {\n return [...acc, relation.id];\n }\n\n return acc;\n }, []);\n\n const disconnected = serverStateRelations.reduce((acc, relation) => {\n if (!browserStateRelations.find((oldRelation) => oldRelation.id === relation.id)) {\n return [...acc, relation.id];\n }\n\n return acc;\n }, []);\n\n return [connected, disconnected];\n};\n","export const PUBLICATION_STATES = {\n DRAFT: 'draft',\n PUBLISHED: 'published',\n};\n\nexport const RELATIONS_TO_DISPLAY = 5;\n\nexport const SEARCH_RESULTS_TO_DISPLAY = 10;\n","export function getRelationLink(targetModel, id) {\n return `/content-manager/collectionType/${targetModel}/${id ?? ''}`;\n}\n","import { PUBLICATION_STATES } from '../constants';\n\nimport { getRelationLink } from './getRelationLink';\n\nexport const normalizeRelation = (relation, { shouldAddLink, mainFieldName, targetModel }) => {\n const nextRelation = { ...relation };\n\n if (shouldAddLink) {\n nextRelation.href = getRelationLink(targetModel, nextRelation.id);\n }\n\n nextRelation.publicationState = false;\n\n if (nextRelation?.publishedAt !== undefined) {\n nextRelation.publicationState = nextRelation.publishedAt\n ? PUBLICATION_STATES.PUBLISHED\n : PUBLICATION_STATES.DRAFT;\n }\n\n nextRelation.mainField = nextRelation[mainFieldName];\n\n return nextRelation;\n};\n\n/*\n * Applies some transformations to existing and new relations in order to display them correctly\n * relations: raw relations data coming from useRelations\n * shouldAddLink: comes from generateRelationQueryInfos, if true we display a link to the relation (TO FIX: explanation)\n * mainFieldName: name of the main field inside the relation (e.g. text field), if no displayable main field exists (e.g. date field) we use the id of the entry\n * targetModel: the model on which the relation is based on, used to create an URL link\n */\n\nexport const normalizeRelations = (\n relations,\n { shouldAddLink = false, mainFieldName, targetModel } = {}\n) => {\n return [...relations].map((relation) =>\n normalizeRelation(relation, {\n shouldAddLink,\n mainFieldName,\n targetModel,\n })\n );\n};\n","import { normalizeRelation } from './normalizeRelations';\n\nexport const normalizeSearchResults = (relations, { mainFieldName }) => {\n const { data } = relations;\n const { pages = [] } = data ?? {};\n\n return {\n ...relations,\n data: pages\n .map((page) =>\n page?.results.map((relation) => normalizeRelation(relation, { mainFieldName }))\n )\n .filter(Boolean)\n .flat(),\n };\n};\n","import { useMemo } from 'react';\n\nimport { useCMEditViewDataManager } from '@strapi/helper-plugin';\nimport get from 'lodash/get';\nimport { useRouteMatch } from 'react-router-dom';\n\nfunction useSelect({\n componentUid,\n isUserAllowedToEditField,\n isUserAllowedToReadField,\n name,\n queryInfos,\n}) {\n const {\n isCreatingEntry,\n createActionAllowedFields,\n readActionAllowedFields,\n updateActionAllowedFields,\n slug,\n modifiedData,\n } = useCMEditViewDataManager();\n\n /**\n * This is our cloning route because the EditView & CloneView share the same UI component\n * We need the origin ID to pre-load the relations into the modifiedData of the new\n * to-be-cloned entity.\n */\n const { params } =\n useRouteMatch('/content-manager/collectionType/:collectionType/create/clone/:origin') ?? {};\n\n const { origin } = params ?? {};\n\n const isFieldAllowed = useMemo(() => {\n if (isUserAllowedToEditField === true) {\n return true;\n }\n\n const allowedFields = isCreatingEntry ? createActionAllowedFields : updateActionAllowedFields;\n\n return allowedFields.includes(name);\n }, [\n isCreatingEntry,\n createActionAllowedFields,\n name,\n isUserAllowedToEditField,\n updateActionAllowedFields,\n ]);\n\n const isFieldReadable = useMemo(() => {\n if (isUserAllowedToReadField) {\n return true;\n }\n\n const allowedFields = isCreatingEntry ? [] : readActionAllowedFields;\n\n return allowedFields.includes(name);\n }, [isCreatingEntry, isUserAllowedToReadField, name, readActionAllowedFields]);\n\n const fieldNameKeys = name.split('.');\n let componentId;\n\n if (componentUid) {\n componentId = get(modifiedData, fieldNameKeys.slice(0, -1))?.id;\n }\n\n const entityId = origin || modifiedData.id;\n\n // /content-manager/relations/[model]/[id]/[field-name]\n const relationFetchEndpoint = useMemo(() => {\n if (isCreatingEntry && !origin) {\n return null;\n }\n\n if (componentUid) {\n // repeatable components and dz are dynamically created\n // if no componentId exists in modifiedData it means that the user just created it\n // there then are no relations to request\n return componentId\n ? `/content-manager/relations/${componentUid}/${componentId}/${fieldNameKeys.at(-1)}`\n : null;\n }\n\n return `/content-manager/relations/${slug}/${entityId}/${name.split('.').at(-1)}`;\n }, [isCreatingEntry, origin, componentUid, slug, entityId, name, componentId, fieldNameKeys]);\n\n // /content-manager/relations/[model]/[field-name]\n const relationSearchEndpoint = useMemo(() => {\n if (componentUid) {\n return `/content-manager/relations/${componentUid}/${name.split('.').at(-1)}`;\n }\n\n return `/content-manager/relations/${slug}/${name.split('.').at(-1)}`;\n }, [componentUid, slug, name]);\n\n return {\n entityId,\n componentId,\n isComponentRelation: Boolean(componentUid),\n queryInfos: {\n ...queryInfos,\n endpoints: {\n search: relationSearchEndpoint,\n relation: relationFetchEndpoint,\n },\n },\n isCloningEntry: Boolean(origin),\n isCreatingEntry,\n isFieldAllowed,\n isFieldReadable,\n };\n}\n\nexport default useSelect;\n","import { useEffect, useState } from 'react';\n\nimport { useCallbackRef, useFetchClient } from '@strapi/helper-plugin';\nimport { useInfiniteQuery } from 'react-query';\n\nimport { normalizeRelations } from '../../components/RelationInputDataManager/utils';\n\nexport const useRelation = (cacheKey, { relation, search }) => {\n const [searchParams, setSearchParams] = useState({});\n const [currentPage, setCurrentPage] = useState(0);\n const { get } = useFetchClient();\n\n const { onLoad: onLoadRelations, normalizeArguments = {} } = relation;\n\n const relationsRes = useInfiniteQuery(\n ['relation', ...cacheKey],\n async ({ pageParam = 1 }) => {\n try {\n const { data } = await get(relation?.endpoint, {\n params: {\n ...(relation.pageParams ?? {}),\n page: pageParam,\n },\n });\n\n setCurrentPage(pageParam);\n\n return data;\n } catch (err) {\n return null;\n }\n },\n {\n cacheTime: 0,\n enabled: relation.enabled,\n /**\n * @type {(lastPage:\n * | { data: null }\n * | { results: any[],\n * pagination: {\n * page: number,\n * pageCount: number,\n * pageSize: number,\n * total: number\n * }\n * }\n * ) => number}\n */\n getNextPageParam(lastPage) {\n const isXToOneRelation = !lastPage?.pagination;\n\n if (\n !lastPage || // the API may send an empty 204 response\n isXToOneRelation || // xToOne relations do not have a pagination\n lastPage?.pagination.page >= lastPage?.pagination.pageCount\n ) {\n return undefined;\n }\n\n // eslint-disable-next-line consistent-return\n return lastPage.pagination.page + 1;\n },\n select: (data) => ({\n ...data,\n pages: data.pages.map((page) => {\n if (!page) {\n return page;\n }\n\n const { data, results, pagination } = page;\n const isXToOneRelation = !!data;\n let normalizedResults = [];\n\n // xToOne relations return an object, which we normalize so that relations\n // always have the same shape\n if (isXToOneRelation) {\n normalizedResults = [data];\n } else if (results) {\n normalizedResults = [...results].reverse();\n }\n\n return {\n pagination,\n results: normalizedResults,\n };\n }),\n }),\n }\n );\n\n const { pageGoal } = relation;\n\n const { status, data, fetchNextPage, hasNextPage } = relationsRes;\n\n useEffect(() => {\n /**\n * This ensures the infiniteQuery hook fetching has caught-up with the modifiedData\n * state i.e. in circumstances where you add 10 relations, the browserState knows this,\n * but the hook would think it could fetch more, when in reality, it can't.\n */\n if (pageGoal > currentPage && hasNextPage && status === 'success') {\n fetchNextPage({\n pageParam: currentPage + 1,\n });\n }\n }, [pageGoal, currentPage, fetchNextPage, hasNextPage, status]);\n\n const onLoadRelationsCallback = useCallbackRef(onLoadRelations);\n\n useEffect(() => {\n if (status === 'success' && data && data.pages?.at(-1)?.results && onLoadRelationsCallback) {\n // everytime we fetch, we normalize prior to adding to redux\n const normalizedResults = normalizeRelations(data.pages.at(-1).results, normalizeArguments);\n\n // this is loadRelation from EditViewDataManagerProvider\n onLoadRelationsCallback(normalizedResults);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [status, onLoadRelationsCallback, data]);\n\n const searchRes = useInfiniteQuery(\n ['relation', ...cacheKey, 'search', JSON.stringify(searchParams)],\n async ({ pageParam = 1 }) => {\n try {\n const { data } = await get(search.endpoint, {\n params: {\n ...(search.pageParams ?? {}),\n ...searchParams,\n page: pageParam,\n },\n });\n\n return data;\n } catch (err) {\n return null;\n }\n },\n {\n enabled: Object.keys(searchParams).length > 0,\n /**\n * @type {(lastPage:\n * | { data: null }\n * | { results: any[],\n * pagination: {\n * page: number,\n * pageCount: number,\n * pageSize: number,\n * total: number\n * }\n * }\n * ) => number}\n */\n getNextPageParam(lastPage) {\n if (!lastPage?.pagination || lastPage.pagination.page >= lastPage.pagination.pageCount) {\n return undefined;\n }\n\n // eslint-disable-next-line consistent-return\n return lastPage.pagination.page + 1;\n },\n }\n );\n\n const searchFor = (term, options = {}) => {\n setSearchParams({\n ...options,\n _q: term,\n _filter: '$containsi',\n });\n };\n\n return { relations: relationsRes, search: searchRes, searchFor };\n};\n","/**\n * This file is for all helpers related to `paths` in the CM.\n */\nimport get from 'lodash/get';\n\n/**\n * This is typically used in circumstances where there are re-orderable pieces e.g. Dynamic Zones\n * or Repeatable fields. It finds the _original_ location of the initial data using `__temp_key__` values\n * which are added to the fields in the `INIT_FORM` reducer to give array data a stable (when you add\n * a new item they wont have a server ID).\n */\nexport const getInitialDataPathUsingTempKeys = (initialData, modifiedData) => (currentPath) => {\n const splitPath = currentPath.split('.');\n\n return splitPath.reduce((acc, currentValue, index) => {\n const initialDataParent = get(initialData, acc);\n const modifiedDataTempKey = get(modifiedData, [\n ...splitPath.slice(0, index),\n currentValue,\n '__temp_key__',\n ]);\n\n if (Array.isArray(initialDataParent) && typeof modifiedDataTempKey === 'number') {\n const initialDataIndex = initialDataParent.findIndex(\n (entry) => entry.__temp_key__ === modifiedDataTempKey\n );\n\n acc.push(initialDataIndex.toString());\n\n return acc;\n }\n\n acc.push(currentValue);\n\n return acc;\n }, []);\n};\n","import React from 'react';\n\nimport { Flex, Typography, ComboboxOption } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { getTrad } from '../../../utils';\n\nconst StyledBullet = styled.div`\n flex-shrink: 0;\n width: ${pxToRem(6)};\n height: ${pxToRem(6)};\n margin-right: ${({ theme }) => theme.spaces[2]};\n background-color: ${({ theme, isDraft }) =>\n theme.colors[isDraft ? 'secondary600' : 'success600']};\n border-radius: 50%;\n`;\n\nexport const Option = ({ publicationState, mainField, id }) => {\n const { formatMessage } = useIntl();\n const stringifiedDisplayValue = (mainField ?? id).toString();\n\n if (publicationState) {\n const isDraft = publicationState === 'draft';\n const draftMessage = {\n id: getTrad('components.Select.draft-info-title'),\n defaultMessage: 'State: Draft',\n };\n const publishedMessage = {\n id: getTrad('components.Select.publish-info-title'),\n defaultMessage: 'State: Published',\n };\n const title = isDraft ? formatMessage(draftMessage) : formatMessage(publishedMessage);\n\n return (\n <ComboboxOption value={id} textValue={stringifiedDisplayValue}>\n <Flex>\n <StyledBullet title={title} isDraft={isDraft} />\n <Typography ellipsis>{stringifiedDisplayValue}</Typography>\n </Flex>\n </ComboboxOption>\n );\n }\n\n return (\n <ComboboxOption value={id} textValue={stringifiedDisplayValue}>\n {stringifiedDisplayValue}\n </ComboboxOption>\n );\n};\n\nOption.defaultProps = {\n mainField: undefined,\n publicationState: undefined,\n};\n\nOption.propTypes = {\n id: PropTypes.number.isRequired,\n mainField: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n publicationState: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n};\n","export const RELATION_ITEM_HEIGHT = 50;\nexport const RELATION_GUTTER = 4;\n","import React, { useEffect } from 'react';\n\nimport { Box, Flex, IconButton } from '@strapi/design-system';\nimport { Drag } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport styled from 'styled-components';\n\nimport { useDragAndDrop } from '../../../hooks/useDragAndDrop';\nimport { composeRefs, ItemTypes } from '../../../utils';\nimport { RELATION_GUTTER } from '../constants';\n\nexport const FlexWrapper = styled(Flex)`\n width: 100%;\n /* Used to prevent endAction to be pushed out of container */\n min-width: 0;\n\n & > div[role='button'] {\n cursor: all-scroll;\n }\n`;\n\nexport const ChildrenWrapper = styled(Flex)`\n width: 100%;\n /* Used to prevent endAction to be pushed out of container */\n min-width: 0;\n`;\n\nexport const RelationItem = ({\n ariaDescribedBy,\n children,\n displayValue,\n canDrag,\n disabled,\n endAction,\n iconButtonAriaLabel,\n style,\n id,\n index,\n name,\n onCancel,\n onDropItem,\n onGrabItem,\n status,\n updatePositionOfRelation,\n ...props\n}) => {\n const [{ handlerId, isDragging, handleKeyDown }, relationRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop(canDrag && !disabled, {\n type: `${ItemTypes.RELATION}_${name}`,\n index,\n item: {\n displayedValue: displayValue,\n status,\n id,\n },\n onGrabItem,\n onDropItem,\n onCancel,\n onMoveItem: updatePositionOfRelation,\n dropSensitivity: 'immediate',\n });\n\n const composedRefs = composeRefs(relationRef, dragRef);\n\n useEffect(() => {\n dragPreviewRef(getEmptyImage());\n }, [dragPreviewRef]);\n\n return (\n <Box\n style={style}\n as=\"li\"\n ref={dropRef}\n aria-describedby={ariaDescribedBy}\n cursor={canDrag ? 'all-scroll' : 'default'}\n >\n {isDragging ? (\n <RelationItemPlaceholder />\n ) : (\n <Flex\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={canDrag ? 2 : 4}\n paddingRight={4}\n hasRadius\n borderSize={1}\n borderColor=\"neutral200\"\n background={disabled ? 'neutral150' : 'neutral0'}\n justifyContent=\"space-between\"\n ref={canDrag ? composedRefs : undefined}\n data-handler-id={handlerId}\n {...props}\n >\n <FlexWrapper gap={1}>\n {canDrag ? (\n <IconButton\n forwardedAs=\"div\"\n role=\"button\"\n tabIndex={0}\n aria-label={iconButtonAriaLabel}\n noBorder\n onKeyDown={handleKeyDown}\n disabled={disabled}\n >\n <Drag />\n </IconButton>\n ) : null}\n <ChildrenWrapper justifyContent=\"space-between\">{children}</ChildrenWrapper>\n </FlexWrapper>\n {endAction && <Box paddingLeft={4}>{endAction}</Box>}\n </Flex>\n )}\n </Box>\n );\n};\n\nconst RelationItemPlaceholder = () => (\n <Box\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={4}\n paddingRight={4}\n hasRadius\n borderStyle=\"dashed\"\n borderColor=\"primary600\"\n borderWidth=\"1px\"\n background=\"primary100\"\n height={`calc(100% - ${RELATION_GUTTER}px)`}\n />\n);\n\nRelationItem.defaultProps = {\n ariaDescribedBy: '',\n canDrag: false,\n displayValue: '',\n disabled: false,\n endAction: undefined,\n onCancel: undefined,\n onDropItem: undefined,\n onGrabItem: undefined,\n style: undefined,\n status: undefined,\n updatePositionOfRelation: undefined,\n};\n\nRelationItem.propTypes = {\n ariaDescribedBy: PropTypes.string,\n canDrag: PropTypes.bool,\n children: PropTypes.node.isRequired,\n displayValue: PropTypes.string,\n disabled: PropTypes.bool,\n endAction: PropTypes.node,\n iconButtonAriaLabel: PropTypes.string.isRequired,\n id: PropTypes.number.isRequired,\n index: PropTypes.number.isRequired,\n name: PropTypes.string.isRequired,\n onCancel: PropTypes.func,\n onDropItem: PropTypes.func,\n onGrabItem: PropTypes.func,\n status: PropTypes.string,\n style: PropTypes.shape({\n height: PropTypes.number,\n left: PropTypes.number,\n position: PropTypes.string,\n right: PropTypes.number,\n width: PropTypes.string,\n }),\n updatePositionOfRelation: PropTypes.func,\n};\n","import React from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nconst ShadowBox = styled(Box)`\n position: relative;\n overflow: hidden;\n flex: 1;\n\n &:before,\n &:after {\n position: absolute;\n width: 100%;\n height: 4px;\n z-index: 1;\n }\n\n &:before {\n /* TODO: as for DS Table component we would need this to be handled by the DS theme */\n content: '';\n background: linear-gradient(rgba(3, 3, 5, 0.2) 0%, rgba(0, 0, 0, 0) 100%);\n top: 0;\n opacity: ${({ overflowDirection }) =>\n overflowDirection === 'top-bottom' || overflowDirection === 'top' ? 1 : 0};\n transition: opacity 0.2s ease-in-out;\n }\n\n &:after {\n /* TODO: as for DS Table component we would need this to be handled by the DS theme */\n content: '';\n background: linear-gradient(0deg, rgba(3, 3, 5, 0.2) 0%, rgba(0, 0, 0, 0) 100%);\n bottom: 0;\n opacity: ${({ overflowDirection }) =>\n overflowDirection === 'top-bottom' || overflowDirection === 'bottom' ? 1 : 0};\n transition: opacity 0.2s ease-in-out;\n }\n`;\n\nexport const RelationList = ({ children, overflow, ...props }) => {\n return (\n <ShadowBox overflowDirection={overflow} {...props}>\n {children}\n </ShadowBox>\n );\n};\n\nRelationList.defaultProps = {\n overflow: '',\n};\n\nRelationList.propTypes = {\n children: PropTypes.node.isRequired,\n overflow: PropTypes.oneOf(['top-bottom', 'bottom', 'top', '']),\n};\n","import React, { useRef, useState, useMemo, useEffect } from 'react';\n\nimport {\n Status,\n Box,\n Link,\n Icon,\n Flex,\n TextButton,\n Typography,\n Tooltip,\n VisuallyHidden,\n Combobox,\n} from '@strapi/design-system';\nimport { useFocusInputField } from '@strapi/helper-plugin';\nimport { Cross, Refresh } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { FixedSizeList as List } from 'react-window';\nimport styled from 'styled-components';\n\nimport { usePrev } from '../../hooks';\n\nimport { Option } from './components/Option';\nimport { RelationItem } from './components/RelationItem';\nimport { RelationList } from './components/RelationList';\nimport { RELATION_GUTTER, RELATION_ITEM_HEIGHT } from './constants';\n\nexport const LinkEllipsis = styled(Link)`\n display: block;\n\n > span {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n }\n`;\n\nexport const DisconnectButton = styled.button`\n svg path {\n fill: ${({ theme, disabled }) =>\n disabled ? theme.colors.neutral600 : theme.colors.neutral500};\n }\n\n &:hover svg path,\n &:focus svg path {\n fill: ${({ theme, disabled }) => !disabled && theme.colors.neutral600};\n }\n`;\n\nconst ComboboxWrapper = styled(Box)`\n align-self: flex-start;\n`;\n\nconst RelationInput = ({\n canReorder,\n description,\n disabled,\n error,\n iconButtonAriaLabel,\n id,\n name,\n numberOfRelationsToDisplay,\n label,\n labelAction,\n labelLoadMore,\n labelDisconnectRelation,\n listAriaDescription,\n liveText,\n loadingMessage,\n onCancel,\n onDropItem,\n onGrabItem,\n noRelationsMessage,\n onRelationConnect,\n onRelationLoadMore,\n onRelationDisconnect,\n onRelationReorder,\n onSearchNextPage,\n onSearch,\n placeholder,\n publicationStateTranslations,\n required,\n relations: paginatedRelations,\n searchResults,\n size,\n}) => {\n const [textValue, setTextValue] = useState('');\n const [overflow, setOverflow] = useState('');\n\n const listRef = useRef();\n const outerListRef = useRef();\n\n const fieldRef = useFocusInputField(name);\n\n const { data } = searchResults;\n\n const relations = paginatedRelations.data;\n const totalNumberOfRelations = relations.length ?? 0;\n\n const dynamicListHeight = useMemo(\n () =>\n totalNumberOfRelations > numberOfRelationsToDisplay\n ? Math.min(totalNumberOfRelations, numberOfRelationsToDisplay) *\n (RELATION_ITEM_HEIGHT + RELATION_GUTTER) +\n RELATION_ITEM_HEIGHT / 2\n : Math.min(totalNumberOfRelations, numberOfRelationsToDisplay) *\n (RELATION_ITEM_HEIGHT + RELATION_GUTTER),\n [totalNumberOfRelations, numberOfRelationsToDisplay]\n );\n\n const shouldDisplayLoadMoreButton = !!labelLoadMore && paginatedRelations.hasNextPage;\n\n const options = useMemo(\n () =>\n data\n .flat()\n .filter(Boolean)\n .map((result) => ({\n ...result,\n value: result.id,\n label: result.mainField,\n })),\n [data]\n );\n\n useEffect(() => {\n if (totalNumberOfRelations <= numberOfRelationsToDisplay) {\n return setOverflow('');\n }\n\n const handleNativeScroll = (e) => {\n const parentScrollContainerHeight = e.target.parentNode.scrollHeight;\n const maxScrollBottom = e.target.scrollHeight - e.target.scrollTop;\n\n if (e.target.scrollTop === 0) {\n return setOverflow('bottom');\n }\n\n if (maxScrollBottom === parentScrollContainerHeight) {\n return setOverflow('top');\n }\n\n return setOverflow('top-bottom');\n };\n\n const outerListRefCurrent = outerListRef?.current;\n\n if (!paginatedRelations.isLoading && relations.length > 0 && outerListRefCurrent) {\n outerListRef.current.addEventListener('scroll', handleNativeScroll);\n }\n\n return () => {\n if (outerListRefCurrent) {\n outerListRefCurrent.removeEventListener('scroll', handleNativeScroll);\n }\n };\n }, [paginatedRelations, relations, numberOfRelationsToDisplay, totalNumberOfRelations]);\n\n const handleMenuOpen = (isOpen) => {\n if (isOpen) {\n onSearch(textValue);\n }\n };\n\n /**\n *\n * @param {number} newIndex\n * @param {number} currentIndex\n *\n * @returns {void}\n */\n const handleUpdatePositionOfRelation = (newIndex, currentIndex) => {\n if (onRelationReorder && newIndex >= 0 && newIndex < relations.length) {\n onRelationReorder(currentIndex, newIndex);\n }\n };\n\n const previewRelationsLength = usePrev(relations.length);\n /**\n * @type {React.MutableRefObject<'onChange' | 'loadMore'>}\n */\n const updatedRelationsWith = useRef();\n\n const handleLoadMore = () => {\n updatedRelationsWith.current = 'loadMore';\n onRelationLoadMore();\n };\n\n useEffect(() => {\n if (updatedRelationsWith.current === 'onChange') {\n setTextValue('');\n }\n\n if (\n updatedRelationsWith.current === 'onChange' &&\n relations.length !== previewRelationsLength\n ) {\n listRef.current?.scrollToItem(relations.length, 'end');\n updatedRelationsWith.current = undefined;\n } else if (\n updatedRelationsWith.current === 'loadMore' &&\n relations.length !== previewRelationsLength\n ) {\n listRef.current?.scrollToItem(0, 'start');\n updatedRelationsWith.current = undefined;\n }\n }, [previewRelationsLength, relations]);\n\n const ariaDescriptionId = `${name}-item-instructions`;\n\n return (\n <Flex\n direction=\"column\"\n gap={3}\n justifyContent=\"space-between\"\n alignItems=\"stretch\"\n wrap=\"wrap\"\n >\n <Flex direction=\"row\" alignItems=\"end\" justifyContent=\"end\" gap={2} width=\"100%\">\n <ComboboxWrapper marginRight=\"auto\" maxWidth={size <= 6 ? '100%' : '70%'} width=\"100%\">\n <Combobox\n ref={fieldRef}\n autocomplete=\"none\"\n error={error}\n name={name}\n hint={description}\n id={id}\n required={required}\n label={label}\n labelAction={labelAction}\n disabled={disabled}\n placeholder={placeholder}\n hasMoreItems={searchResults.hasNextPage}\n loading={searchResults.isLoading}\n onOpenChange={handleMenuOpen}\n noOptionsMessage={() => noRelationsMessage}\n loadingMessage={loadingMessage}\n onLoadMore={() => {\n onSearchNextPage();\n }}\n textValue={textValue}\n onChange={(relationId) => {\n if (!relationId) {\n return;\n }\n onRelationConnect(options.find((opt) => opt.id === relationId));\n updatedRelationsWith.current = 'onChange';\n }}\n onTextValueChange={(text) => {\n setTextValue(text);\n }}\n onInputChange={(event) => {\n onSearch(event.currentTarget.value);\n }}\n >\n {options.map((opt) => {\n return <Option key={opt.id} {...opt} />;\n })}\n </Combobox>\n </ComboboxWrapper>\n\n {shouldDisplayLoadMoreButton && (\n <TextButton\n disabled={paginatedRelations.isLoading || paginatedRelations.isFetchingNextPage}\n onClick={handleLoadMore}\n loading={paginatedRelations.isLoading || paginatedRelations.isFetchingNextPage}\n startIcon={<Refresh />}\n // prevent the label from line-wrapping\n shrink={0}\n >\n {labelLoadMore}\n </TextButton>\n )}\n </Flex>\n\n {relations.length > 0 && (\n <RelationList overflow={overflow}>\n <VisuallyHidden id={ariaDescriptionId}>{listAriaDescription}</VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n <List\n height={dynamicListHeight}\n ref={listRef}\n outerRef={outerListRef}\n itemCount={totalNumberOfRelations}\n itemSize={RELATION_ITEM_HEIGHT + RELATION_GUTTER}\n itemData={{\n name,\n ariaDescribedBy: ariaDescriptionId,\n canDrag: canReorder,\n disabled,\n handleCancel: onCancel,\n handleDropItem: onDropItem,\n handleGrabItem: onGrabItem,\n iconButtonAriaLabel,\n labelDisconnectRelation,\n onRelationDisconnect,\n publicationStateTranslations,\n relations,\n updatePositionOfRelation: handleUpdatePositionOfRelation,\n }}\n itemKey={(index) => `${relations[index].mainField}_${relations[index].id}`}\n innerElementType=\"ol\"\n >\n {ListItem}\n </List>\n </RelationList>\n )}\n </Flex>\n );\n};\n\nconst RelationsResult = PropTypes.shape({\n data: PropTypes.arrayOf(\n PropTypes.shape({\n href: PropTypes.string,\n id: PropTypes.number.isRequired,\n publicationState: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n mainField: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n })\n ),\n hasNextPage: PropTypes.bool,\n isFetchingNextPage: PropTypes.bool.isRequired,\n isLoading: PropTypes.bool.isRequired,\n isSuccess: PropTypes.bool.isRequired,\n});\n\nconst SearchResults = PropTypes.shape({\n data: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.number.isRequired,\n href: PropTypes.string,\n mainField: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n publicationState: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n })\n ),\n hasNextPage: PropTypes.bool,\n isLoading: PropTypes.bool.isRequired,\n isSuccess: PropTypes.bool.isRequired,\n});\n\nRelationInput.defaultProps = {\n canReorder: false,\n description: undefined,\n disabled: false,\n error: undefined,\n labelAction: null,\n labelLoadMore: null,\n liveText: undefined,\n onCancel: undefined,\n onDropItem: undefined,\n onGrabItem: undefined,\n required: false,\n relations: { data: [] },\n searchResults: { data: [] },\n};\n\nRelationInput.propTypes = {\n error: PropTypes.string,\n canReorder: PropTypes.bool,\n description: PropTypes.string,\n disabled: PropTypes.bool,\n iconButtonAriaLabel: PropTypes.string.isRequired,\n id: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n labelAction: PropTypes.element,\n labelLoadMore: PropTypes.string,\n labelDisconnectRelation: PropTypes.string.isRequired,\n listAriaDescription: PropTypes.string.isRequired,\n liveText: PropTypes.string,\n loadingMessage: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n noRelationsMessage: PropTypes.string.isRequired,\n numberOfRelationsToDisplay: PropTypes.number.isRequired,\n onCancel: PropTypes.func,\n onDropItem: PropTypes.func,\n onGrabItem: PropTypes.func,\n onRelationConnect: PropTypes.func.isRequired,\n onRelationDisconnect: PropTypes.func.isRequired,\n onRelationLoadMore: PropTypes.func.isRequired,\n onRelationReorder: PropTypes.func.isRequired,\n onSearch: PropTypes.func.isRequired,\n onSearchNextPage: PropTypes.func.isRequired,\n placeholder: PropTypes.string.isRequired,\n publicationStateTranslations: PropTypes.shape({\n draft: PropTypes.string.isRequired,\n published: PropTypes.string.isRequired,\n }).isRequired,\n required: PropTypes.bool,\n searchResults: SearchResults,\n size: PropTypes.number.isRequired,\n relations: RelationsResult,\n};\n\n/**\n * This is in a separate component to enforce passing all the props the component requires to react-window\n * to ensure drag & drop correctly works.\n */\nconst ListItem = ({ data, index, style }) => {\n const {\n ariaDescribedBy,\n canDrag,\n disabled,\n handleCancel,\n handleDropItem,\n handleGrabItem,\n iconButtonAriaLabel,\n name,\n labelDisconnectRelation,\n onRelationDisconnect,\n publicationStateTranslations,\n relations,\n updatePositionOfRelation,\n } = data;\n const { publicationState, href, mainField, id } = relations[index];\n const statusColor = publicationState === 'draft' ? 'secondary' : 'success';\n\n return (\n <RelationItem\n ariaDescribedBy={ariaDescribedBy}\n canDrag={canDrag}\n disabled={disabled}\n displayValue={String(mainField ?? id)}\n iconButtonAriaLabel={iconButtonAriaLabel}\n id={id}\n index={index}\n name={name}\n endAction={\n <DisconnectButton\n data-testid={`remove-relation-${id}`}\n disabled={disabled}\n type=\"button\"\n onClick={() => onRelationDisconnect(relations[index])}\n aria-label={labelDisconnectRelation}\n >\n <Icon width=\"12px\" as={Cross} />\n </DisconnectButton>\n }\n onCancel={handleCancel}\n onDropItem={handleDropItem}\n onGrabItem={handleGrabItem}\n status={publicationState || undefined}\n style={{\n ...style,\n bottom: style.bottom ?? 0 + RELATION_GUTTER,\n height: style.height ?? 0 - RELATION_GUTTER,\n }}\n updatePositionOfRelation={updatePositionOfRelation}\n >\n <Box minWidth={0} paddingTop={1} paddingBottom={1} paddingRight={4}>\n <Tooltip description={mainField ?? `${id}`}>\n {href ? (\n <LinkEllipsis to={href}>{mainField ?? id}</LinkEllipsis>\n ) : (\n <Typography textColor={disabled ? 'neutral600' : 'primary600'} ellipsis>\n {mainField ?? id}\n </Typography>\n )}\n </Tooltip>\n </Box>\n\n {publicationState && (\n <Status variant={statusColor} showBullet={false} size=\"S\">\n <Typography fontWeight=\"bold\" textColor={`${statusColor}700`}>\n {publicationStateTranslations[publicationState]}\n </Typography>\n </Status>\n )}\n </RelationItem>\n );\n};\n\nListItem.defaultProps = {\n data: {},\n};\n\nListItem.propTypes = {\n data: PropTypes.shape({\n ariaDescribedBy: PropTypes.string.isRequired,\n canDrag: PropTypes.bool.isRequired,\n disabled: PropTypes.bool.isRequired,\n handleCancel: PropTypes.func,\n handleDropItem: PropTypes.func,\n handleGrabItem: PropTypes.func,\n iconButtonAriaLabel: PropTypes.string.isRequired,\n labelDisconnectRelation: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n onRelationDisconnect: PropTypes.func.isRequired,\n publicationStateTranslations: PropTypes.shape({\n draft: PropTypes.string.isRequired,\n published: PropTypes.string.isRequired,\n }).isRequired,\n relations: PropTypes.arrayOf(\n PropTypes.shape({\n href: PropTypes.string,\n id: PropTypes.number.isRequired,\n publicationState: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n mainField: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n })\n ),\n updatePositionOfRelation: PropTypes.func.isRequired,\n }),\n index: PropTypes.number.isRequired,\n style: PropTypes.object.isRequired,\n};\n\nexport default RelationInput;\n","/* eslint-disable no-nested-ternary */\nimport React, { memo, useMemo, useState } from 'react';\n\nimport { NotAllowedInput, useCMEditViewDataManager } from '@strapi/helper-plugin';\nimport get from 'lodash/get';\nimport pick from 'lodash/pick';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { useRelation } from '../../hooks/useRelation';\nimport { getTrad } from '../../utils';\nimport { getInitialDataPathUsingTempKeys } from '../../utils/paths';\nimport { RelationInput } from '../RelationInput';\n\nimport { PUBLICATION_STATES, RELATIONS_TO_DISPLAY, SEARCH_RESULTS_TO_DISPLAY } from './constants';\nimport { connect, diffRelations, normalizeRelation, normalizeSearchResults, select } from './utils';\n\nexport const RelationInputDataManager = ({\n error,\n entityId,\n componentId,\n isComponentRelation,\n editable,\n description,\n intlLabel,\n isCreatingEntry,\n isCloningEntry,\n isFieldAllowed,\n isFieldReadable,\n labelAction,\n mainField,\n name,\n queryInfos: { endpoints, defaultParams, shouldDisplayRelationLink },\n placeholder,\n required,\n relationType,\n size,\n targetModel,\n}) => {\n const [liveText, setLiveText] = useState('');\n const { formatMessage } = useIntl();\n const {\n slug,\n initialData,\n modifiedData,\n relationConnect,\n relationDisconnect,\n relationLoad,\n relationReorder,\n } = useCMEditViewDataManager();\n\n const nameSplit = name.split('.');\n\n const initialDataPath = getInitialDataPathUsingTempKeys(initialData, modifiedData)(name);\n\n const relationsFromModifiedData = get(modifiedData, name, []);\n\n const currentLastPage = Math.ceil(get(initialData, name, []).length / RELATIONS_TO_DISPLAY);\n\n const { relations, search, searchFor } = useRelation(\n [slug, initialDataPath.join('.'), modifiedData.id, defaultParams],\n {\n relation: {\n enabled: !!endpoints.relation,\n endpoint: endpoints.relation,\n pageGoal: currentLastPage,\n pageParams: {\n ...defaultParams,\n pageSize: RELATIONS_TO_DISPLAY,\n },\n onLoad(value) {\n relationLoad({\n target: {\n initialDataPath: ['initialData', ...initialDataPath],\n modifiedDataPath: ['modifiedData', ...nameSplit],\n value,\n },\n });\n },\n normalizeArguments: {\n mainFieldName: mainField.name,\n shouldAddLink: shouldDisplayRelationLink,\n targetModel,\n },\n },\n search: {\n endpoint: endpoints.search,\n pageParams: {\n ...defaultParams,\n // eslint-disable-next-line no-nested-ternary\n entityId:\n isCreatingEntry || isCloningEntry\n ? undefined\n : isComponentRelation\n ? componentId\n : entityId,\n pageSize: SEARCH_RESULTS_TO_DISPLAY,\n },\n },\n }\n );\n\n const isMorph = useMemo(() => relationType.toLowerCase().includes('morph'), [relationType]);\n const toOneRelation = [\n 'oneWay',\n 'oneToOne',\n 'manyToOne',\n 'oneToManyMorph',\n 'oneToOneMorph',\n ].includes(relationType);\n\n const isDisabled = useMemo(() => {\n if (isMorph) {\n return true;\n }\n\n if (!isCreatingEntry) {\n return (!isFieldAllowed && isFieldReadable) || !editable;\n }\n\n return !editable;\n }, [isMorph, isCreatingEntry, editable, isFieldAllowed, isFieldReadable]);\n\n const handleRelationConnect = (relation) => {\n /**\n * Any relation being added to the store should be normalized so it has it's link.\n */\n const normalizedRelation = normalizeRelation(relation, {\n mainFieldName: mainField.name,\n shouldAddLink: shouldDisplayRelationLink,\n targetModel,\n });\n\n relationConnect({ name, value: normalizedRelation, toOneRelation });\n };\n\n const handleRelationDisconnect = (relation) => {\n relationDisconnect({ name, id: relation.id });\n };\n\n const handleRelationLoadMore = () => {\n relations.fetchNextPage();\n };\n\n const handleSearch = (term = '') => {\n const [connected, disconnected] = diffRelations(\n relationsFromModifiedData,\n get(initialData, name)\n );\n\n searchFor(term, {\n idsToInclude: disconnected,\n idsToOmit: connected,\n });\n };\n\n const handleSearchMore = () => {\n search.fetchNextPage();\n };\n /**\n *\n * @param {number} index\n * @returns {string}\n */\n const getItemPos = (index) => `${index + 1} of ${relationsFromModifiedData.length}`;\n\n /**\n *\n * @param {number} currentIndex\n * @param {number} oldIndex\n */\n const handleRelationReorder = (oldIndex, newIndex) => {\n const item = relationsFromModifiedData[oldIndex];\n\n setLiveText(\n formatMessage(\n {\n id: getTrad('dnd.reorder'),\n defaultMessage: '{item}, moved. New position in list: {position}.',\n },\n {\n item: item.mainField ?? item.id,\n position: getItemPos(newIndex),\n }\n )\n );\n\n relationReorder({\n name,\n newIndex,\n oldIndex,\n });\n };\n\n /**\n *\n * @param {number} index\n * @returns {void}\n */\n const handleGrabItem = (index) => {\n const item = relationsFromModifiedData[index];\n\n setLiveText(\n formatMessage(\n {\n id: getTrad('dnd.grab-item'),\n defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`,\n },\n {\n item: item.mainField ?? item.id,\n position: getItemPos(index),\n }\n )\n );\n };\n\n /**\n *\n * @param {number} index\n * @returns {void}\n */\n const handleDropItem = (index) => {\n const item = relationsFromModifiedData[index];\n\n setLiveText(\n formatMessage(\n {\n id: getTrad('dnd.drop-item'),\n defaultMessage: `{item}, dropped. Final position in list: {position}.`,\n },\n {\n item: item.mainField ?? item.id,\n position: getItemPos(index),\n }\n )\n );\n };\n\n /**\n *\n * @param {number} index\n * @returns {void}\n */\n const handleCancel = (index) => {\n const item = relationsFromModifiedData[index];\n\n setLiveText(\n formatMessage(\n {\n id: getTrad('dnd.cancel-item'),\n defaultMessage: '{item}, dropped. Re-order cancelled.',\n },\n {\n item: item.mainField ?? item.id,\n }\n )\n );\n };\n\n if (\n (!isFieldAllowed && isCreatingEntry) ||\n (!isCreatingEntry && !isFieldAllowed && !isFieldReadable)\n ) {\n return <NotAllowedInput name={name} intlLabel={intlLabel} labelAction={labelAction} />;\n }\n\n /**\n * How to calculate the total number of relations even if you don't\n * have them all loaded in the browser.\n *\n * 1. The `infiniteQuery` gives you the total number of relations in the pagination result.\n * 2. You can diff the length of the browserState vs the fetchedServerState to determine if you've\n * either added or removed relations.\n * 3. Add them together, if you've removed relations you'll get a negative number and it'll\n * actually subtract from the total number on the server (regardless of how many you fetched).\n */\n const browserRelationsCount = relationsFromModifiedData.length;\n const serverRelationsCount = (get(initialData, initialDataPath) ?? []).length;\n const realServerRelationsCount = relations.data?.pages[0]?.pagination?.total ?? 0;\n /**\n * _IF_ theres no relations data and the browserCount is the same as serverCount you can therefore assume\n * that the browser count is correct because we've just _made_ this entry and the in-component hook is now fetching.\n */\n const totalRelations =\n !relations.data && browserRelationsCount === serverRelationsCount\n ? browserRelationsCount\n : browserRelationsCount - serverRelationsCount + realServerRelationsCount;\n\n return (\n <RelationInput\n error={error}\n canReorder={!toOneRelation}\n description={description}\n disabled={isDisabled}\n iconButtonAriaLabel={formatMessage({\n id: getTrad('components.RelationInput.icon-button-aria-label'),\n defaultMessage: 'Drag',\n })}\n id={name}\n label={`${formatMessage({\n id: intlLabel.id,\n defaultMessage: intlLabel.defaultMessage,\n })} ${totalRelations > 0 ? `(${totalRelations})` : ''}`}\n labelAction={labelAction}\n labelLoadMore={\n !isCreatingEntry || isCloningEntry\n ? formatMessage({\n id: getTrad('relation.loadMore'),\n defaultMessage: 'Load More',\n })\n : null\n }\n labelDisconnectRelation={formatMessage({\n id: getTrad('relation.disconnect'),\n defaultMessage: 'Remove',\n })}\n listAriaDescription={formatMessage({\n id: getTrad('dnd.instructions'),\n defaultMessage: `Press spacebar to grab and re-order`,\n })}\n listHeight={320}\n liveText={liveText}\n loadingMessage={formatMessage({\n id: getTrad('relation.isLoading'),\n defaultMessage: 'Relations are loading',\n })}\n name={name}\n noRelationsMessage={formatMessage({\n id: getTrad('relation.notAvailable'),\n defaultMessage: 'No relations available',\n })}\n numberOfRelationsToDisplay={RELATIONS_TO_DISPLAY}\n onDropItem={handleDropItem}\n onGrabItem={handleGrabItem}\n onCancel={handleCancel}\n onRelationConnect={handleRelationConnect}\n onRelationDisconnect={handleRelationDisconnect}\n onRelationLoadMore={handleRelationLoadMore}\n onRelationReorder={handleRelationReorder}\n onSearch={(term) => handleSearch(term)}\n onSearchNextPage={() => handleSearchMore()}\n placeholder={formatMessage(\n placeholder || {\n id: getTrad('relation.add'),\n defaultMessage: 'Add relation',\n }\n )}\n publicationStateTranslations={{\n [PUBLICATION_STATES.DRAFT]: formatMessage({\n id: getTrad('relation.publicationState.draft'),\n defaultMessage: 'Draft',\n }),\n\n [PUBLICATION_STATES.PUBLISHED]: formatMessage({\n id: getTrad('relation.publicationState.published'),\n defaultMessage: 'Published',\n }),\n }}\n relations={pick(\n { ...relations, data: relationsFromModifiedData },\n 'data',\n 'hasNextPage',\n 'isFetchingNextPage',\n 'isLoading',\n 'isSuccess'\n )}\n required={required}\n searchResults={normalizeSearchResults(search, {\n mainFieldName: mainField.name,\n })}\n size={size}\n />\n );\n};\n\nRelationInputDataManager.defaultProps = {\n componentId: undefined,\n entityId: undefined,\n editable: true,\n error: undefined,\n description: '',\n labelAction: null,\n isComponentRelation: false,\n isFieldAllowed: true,\n placeholder: null,\n required: false,\n};\n\nRelationInputDataManager.propTypes = {\n componentId: PropTypes.number,\n entityId: PropTypes.number,\n editable: PropTypes.bool,\n error: PropTypes.string,\n description: PropTypes.string,\n intlLabel: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n values: PropTypes.object,\n }).isRequired,\n labelAction: PropTypes.element,\n isCloningEntry: PropTypes.bool.isRequired,\n isCreatingEntry: PropTypes.bool.isRequired,\n isComponentRelation: PropTypes.bool,\n isFieldAllowed: PropTypes.bool,\n isFieldReadable: PropTypes.bool.isRequired,\n mainField: PropTypes.shape({\n name: PropTypes.string.isRequired,\n schema: PropTypes.shape({\n type: PropTypes.string.isRequired,\n }).isRequired,\n }).isRequired,\n name: PropTypes.string.isRequired,\n placeholder: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n values: PropTypes.object,\n }),\n required: PropTypes.bool,\n relationType: PropTypes.string.isRequired,\n size: PropTypes.number.isRequired,\n targetModel: PropTypes.string.isRequired,\n queryInfos: PropTypes.shape({\n defaultParams: PropTypes.shape({\n locale: PropTypes.string,\n }),\n endpoints: PropTypes.shape({\n relation: PropTypes.string,\n search: PropTypes.string.isRequired,\n }).isRequired,\n shouldDisplayRelationLink: PropTypes.bool.isRequired,\n }).isRequired,\n};\n\nconst Memoized = memo(RelationInputDataManager);\n\nexport default connect(Memoized, select);\n","/* eslint-disable prefer-template */\nimport { getLanguage, highlight, highlightAuto } from 'highlight.js';\nimport Markdown from 'markdown-it';\nimport abbr from 'markdown-it-abbr';\nimport container from 'markdown-it-container';\nimport deflist from 'markdown-it-deflist';\nimport emoji from 'markdown-it-emoji';\nimport footnote from 'markdown-it-footnote';\nimport ins from 'markdown-it-ins';\nimport mark from 'markdown-it-mark';\nimport sub from 'markdown-it-sub';\nimport sup from 'markdown-it-sup';\n\nconst loadCss = async () => {\n await import('highlight.js/styles/solarized-dark.css');\n};\n\nloadCss();\n\nconst md = new Markdown({\n html: true, // Enable HTML tags in source\n xhtmlOut: false,\n breaks: true,\n langPrefix: 'language-',\n linkify: true,\n typographer: true,\n // Code from: https://github.com/markdown-it/markdown-it/blob/master/support/demo_template/index.js#L83\n highlight(str, lang) {\n if (lang && lang !== 'auto' && getLanguage(lang)) {\n return (\n '<pre class=\"hljs language-' +\n md.utils.escapeHtml(lang.toLowerCase()) +\n '\"><code>' +\n highlight(lang, str, true).value +\n '</code></pre>'\n );\n }\n\n if (lang === 'auto') {\n const result = highlightAuto(str);\n\n return (\n '<pre class=\"hljs language-' +\n md.utils.escapeHtml(result.language) +\n '\"><code>' +\n result.value +\n '</code></pre>'\n );\n }\n\n return '<pre class=\"hljs\"><code>' + md.utils.escapeHtml(str) + '</code></pre>';\n },\n})\n .use(abbr)\n .use(container, 'warning')\n .use(container, 'tip')\n .use(deflist)\n .use(emoji)\n .use(footnote)\n .use(ins)\n .use(mark)\n .use(sub)\n .use(sup);\n\n// Code from: https://github.com/markdown-it/markdown-it-footnote/blob/master/index.js#L29\nmd.renderer.rules.footnote_ref = (tokens, idx, options, env, slf) => {\n const caption = slf.rules.footnote_caption(tokens, idx, options, env, slf);\n\n return '<sup class=\"footnote-ref\"><span>' + caption + '</span></sup>';\n};\n\nmd.renderer.rules.footnote_anchor = () => {\n /* ↩ with escape code to prevent display as Apple Emoji on iOS */\n return ' <span class=\"footnote-backref\">\\u21a9\\uFE0E</span>';\n};\n\nexport default md;\n","import sanitizeHtml from 'sanitize-html';\n\n// Options for the lib can be found here https://www.npmjs.com/package/sanitize-html\nconst options = {\n ...sanitizeHtml.defaults,\n allowedTags: false,\n allowedAttributes: {\n '*': ['href', 'align', 'alt', 'center', 'width', 'height', 'type', 'controls', 'target'],\n img: ['src', 'alt'],\n source: ['src', 'type'],\n },\n};\n\nconst clean = (dirty) => sanitizeHtml(dirty, options);\n\nexport default clean;\n","import styled from 'styled-components';\n\nconst Wrapper = styled.div`\n position: absolute;\n top: 0;\n width: 100%;\n height: 100%;\n overflow: auto;\n padding: ${({ theme }) => `${theme.spaces[3]} ${theme.spaces[4]}`};\n font-size: ${14 / 16}rem;\n background-color: ${({ theme }) => theme.colors.neutral0};\n color: ${({ theme }) => theme.colors.neutral800};\n line-height: ${({ theme }) => theme.lineHeights[6]};\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n margin-block-start: ${({ theme }) => theme.spaces[2]};\n margin-block-end: ${({ theme }) => theme.spaces[2]};\n }\n\n p {\n margin-bottom: ${({ theme }) => theme.spaces[2]};\n }\n\n h1 {\n font-size: ${36 / 16}rem;\n font-weight: 600;\n }\n\n h2 {\n font-size: ${30 / 16}rem;\n font-weight: 500;\n }\n\n h3 {\n font-size: ${24 / 16}rem;\n font-weight: 500;\n }\n\n h4 {\n font-size: ${20 / 16}rem;\n font-weight: 500;\n }\n\n strong {\n font-weight: 800;\n }\n\n em {\n font-style: italic;\n }\n\n blockquote {\n margin-top: ${({ theme }) => theme.spaces[8]};\n margin-bottom: ${({ theme }) => theme.spaces[7]};\n font-size: ${14 / 16}rem;\n font-weight: 400;\n border-left: 4px solid ${({ theme }) => theme.colors.neutral150};\n font-style: italic;\n padding: ${({ theme }) => theme.spaces[2]} ${({ theme }) => theme.spaces[5]};\n }\n\n img {\n max-width: 100%;\n }\n\n table {\n thead {\n background: ${({ theme }) => theme.colors.neutral150};\n\n th {\n padding: ${({ theme }) => theme.spaces[4]};\n }\n }\n tr {\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n }\n th,\n td {\n padding: ${({ theme }) => theme.spaces[4]};\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-bottom: 0;\n border-top: 0;\n }\n }\n\n pre,\n code {\n font-size: ${14 / 16}rem;\n border-radius: 4px;\n /* \n Hard coded since the color is the same between themes,\n theme.colors.neutral800 changes between themes.\n\n Matches the color of the JSON Input component.\n */\n background-color: #32324d;\n max-width: 100%;\n overflow: auto;\n padding: ${({ theme }) => theme.spaces[2]};\n }\n\n /* Inline code */\n p,\n pre,\n td {\n > code {\n color: #839496;\n }\n }\n\n ol {\n list-style-type: decimal;\n margin-block-start: ${({ theme }) => theme.spaces[4]};\n margin-block-end: ${({ theme }) => theme.spaces[4]};\n margin-inline-start: 0px;\n margin-inline-end: 0px;\n padding-inline-start: ${({ theme }) => theme.spaces[4]};\n\n ol,\n ul {\n margin-block-start: 0px;\n margin-block-end: 0px;\n }\n }\n\n ul {\n list-style-type: disc;\n margin-block-start: ${({ theme }) => theme.spaces[4]};\n margin-block-end: ${({ theme }) => theme.spaces[4]};\n margin-inline-start: 0px;\n margin-inline-end: 0px;\n padding-inline-start: ${({ theme }) => theme.spaces[4]};\n\n ul,\n ol {\n margin-block-start: 0px;\n margin-block-end: 0px;\n }\n }\n`;\n\nexport default Wrapper;\n","/* eslint-disable react/no-danger */\n/**\n *\n * PreviewWysiwyg\n *\n */\n\nimport React, { memo, useMemo } from 'react';\n\nimport PropTypes from 'prop-types';\n\nimport md from './utils/mdRenderer';\nimport sanitizeHtml from './utils/satinizeHtml';\nimport Wrapper from './Wrapper';\n\nconst PreviewWysiwyg = ({ data }) => {\n const html = useMemo(() => sanitizeHtml(md.render(data.replaceAll('\\\\n', '\\n') || '')), [data]);\n\n return (\n <Wrapper>\n <div dangerouslySetInnerHTML={{ __html: html }} />\n </Wrapper>\n );\n};\n\nPreviewWysiwyg.defaultProps = {\n data: '',\n};\n\nPreviewWysiwyg.propTypes = {\n data: PropTypes.string,\n};\n\nexport default memo(PreviewWysiwyg);\n","import CodeMirror from 'codemirror5';\n\n// Disabling eslint on purpose\n/* eslint-disable */\n\nvar listRE = /^(\\s*)(>[> ]*|[*+-] \\[[x ]\\]\\s|[*+-]\\s|(\\d+)([.)]))(\\s*)/,\n emptyListRE = /^(\\s*)(>[> ]*|[*+-] \\[[x ]\\]|[*+-]|(\\d+)[.)])(\\s*)$/,\n unorderedListRE = /[*+-]\\s/;\n\n/*\n functions coming from CodeMirror addons continuelist.js\n ===> https://github.com/codemirror/CodeMirror/blob/master/addon/edit/continuelist.js\n\n we imported it because the way the addon ask to use markdown mode\n since we have our own markdown preview system we couldn't use it directly\n only thing we changed is removing the part that enabled addon only with markdown mode\n*/\n\nfunction newlineAndIndentContinueMarkdownList(cm) {\n if (cm.getOption('disableInput')) return CodeMirror.Pass;\n var ranges = cm.listSelections(),\n replacements = [];\n for (var i = 0; i < ranges.length; i++) {\n var pos = ranges[i].head;\n\n var eolState = cm.getStateAfter(pos.line);\n var inList = eolState.list !== false;\n var inQuote = eolState.quote !== 0;\n\n var line = cm.getLine(pos.line),\n match = listRE.exec(line);\n var cursorBeforeBullet = /^\\s*$/.test(line.slice(0, pos.ch));\n if (!ranges[i].empty() || (!inList && !inQuote) || !match || cursorBeforeBullet) {\n cm.execCommand('newlineAndIndent');\n return;\n }\n if (emptyListRE.test(line)) {\n var endOfQuote = inQuote && />\\s*$/.test(line);\n var endOfList = !/>\\s*$/.test(line);\n if (endOfQuote || endOfList)\n cm.replaceRange(\n '',\n {\n line: pos.line,\n ch: 0,\n },\n {\n line: pos.line,\n ch: pos.ch + 1,\n }\n );\n replacements[i] = '\\n';\n } else {\n var indent = match[1],\n after = match[5];\n var numbered = !(unorderedListRE.test(match[2]) || match[2].indexOf('>') >= 0);\n var bullet = numbered ? parseInt(match[3], 10) + 1 + match[4] : match[2].replace('x', ' ');\n replacements[i] = '\\n' + indent + bullet + after;\n\n if (numbered) incrementRemainingMarkdownListNumbers(cm, pos);\n }\n }\n\n cm.replaceSelections(replacements);\n}\n\nfunction incrementRemainingMarkdownListNumbers(cm, pos) {\n var startLine = pos.line,\n lookAhead = 0,\n skipCount = 0;\n var startItem = listRE.exec(cm.getLine(startLine)),\n startIndent = startItem[1];\n\n do {\n lookAhead += 1;\n var nextLineNumber = startLine + lookAhead;\n var nextLine = cm.getLine(nextLineNumber);\n var nextItem = listRE.exec(nextLine);\n\n if (nextItem) {\n var nextIndent = nextItem[1];\n var newNumber = parseInt(startItem[3], 10) + lookAhead - skipCount;\n var nextNumber = parseInt(nextItem[3], 10),\n itemNumber = nextNumber;\n\n if (startIndent === nextIndent && !isNaN(nextNumber)) {\n if (newNumber === nextNumber) itemNumber = nextNumber + 1;\n if (newNumber > nextNumber) itemNumber = newNumber + 1;\n cm.replaceRange(\n nextLine.replace(listRE, nextIndent + itemNumber + nextItem[4] + nextItem[5]),\n {\n line: nextLineNumber,\n ch: 0,\n },\n {\n line: nextLineNumber,\n ch: nextLine.length,\n }\n );\n } else {\n if (startIndent.length > nextIndent.length) return;\n // This doesn't run if the next line immediately indents, as it is\n // not clear of the users intention (new indented item or same level)\n if (startIndent.length < nextIndent.length && lookAhead === 1) return;\n skipCount += 1;\n }\n }\n } while (nextItem);\n}\n\nexport default newlineAndIndentContinueMarkdownList;\n","import React, { forwardRef, useEffect, useImperativeHandle, useRef } from 'react';\n\nimport CodeMirror from 'codemirror5';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nimport PreviewWysiwyg from '../PreviewWysiwyg';\n\nimport newlineAndIndentContinueMarkdownList from './utils/continueList';\n\nimport 'codemirror5/addon/display/placeholder';\n\nconst Editor = forwardRef(\n (\n {\n disabled,\n editorRef,\n error,\n isPreviewMode,\n isExpandMode,\n name,\n onChange,\n placeholder,\n textareaRef,\n value,\n },\n forwardedRef\n ) => {\n const onChangeRef = useRef(onChange);\n\n useEffect(() => {\n editorRef.current = CodeMirror.fromTextArea(textareaRef.current, {\n lineWrapping: true,\n extraKeys: {\n Enter: 'newlineAndIndentContinueMarkdownList',\n Tab: false,\n 'Shift-Tab': false,\n },\n readOnly: false,\n smartIndent: false,\n placeholder,\n spellcheck: true,\n inputStyle: 'contenteditable',\n });\n\n CodeMirror.commands.newlineAndIndentContinueMarkdownList =\n newlineAndIndentContinueMarkdownList;\n editorRef.current.on('change', (doc) => {\n onChangeRef.current({ target: { name, value: doc.getValue(), type: 'wysiwyg' } });\n });\n }, [editorRef, textareaRef, name, placeholder]);\n\n useEffect(() => {\n if (value && !editorRef.current.hasFocus()) {\n editorRef.current.setValue(value);\n }\n }, [editorRef, value]);\n\n useEffect(() => {\n if (isPreviewMode || disabled) {\n editorRef.current.setOption('readOnly', 'nocursor');\n } else {\n editorRef.current.setOption('readOnly', false);\n }\n }, [disabled, isPreviewMode, editorRef]);\n\n useEffect(() => {\n if (error) {\n editorRef.current.setOption('screenReaderLabel', error);\n } else {\n // to replace with translation\n editorRef.current.setOption('screenReaderLabel', 'Editor');\n }\n }, [editorRef, error]);\n\n useImperativeHandle(\n forwardedRef,\n () => ({\n focus() {\n editorRef.current.getInputField().focus();\n },\n scrollIntoView(args) {\n editorRef.current.getInputField().scrollIntoView(args);\n },\n }),\n [editorRef]\n );\n\n return (\n <EditorAndPreviewWrapper>\n <EditorStylesContainer isExpandMode={isExpandMode} disabled={disabled || isPreviewMode}>\n <textarea ref={textareaRef} />\n </EditorStylesContainer>\n {isPreviewMode && <PreviewWysiwyg data={value} />}\n </EditorAndPreviewWrapper>\n );\n }\n);\n\nEditor.defaultProps = {\n disabled: false,\n error: undefined,\n isPreviewMode: false,\n isExpandMode: false,\n placeholder: '',\n value: '',\n};\n\nEditor.propTypes = {\n disabled: PropTypes.bool,\n editorRef: PropTypes.shape({ current: PropTypes.any }).isRequired,\n error: PropTypes.string,\n isPreviewMode: PropTypes.bool,\n isExpandMode: PropTypes.bool,\n name: PropTypes.string.isRequired,\n onChange: PropTypes.func.isRequired,\n placeholder: PropTypes.string,\n textareaRef: PropTypes.shape({ current: PropTypes.any }).isRequired,\n value: PropTypes.string,\n};\n\nconst EditorAndPreviewWrapper = styled.div`\n position: relative;\n height: calc(100% - 48px);\n`;\n\nconst EditorStylesContainer = styled.div`\n cursor: ${({ disabled }) => (disabled ? 'not-allowed !important' : 'auto')};\n height: 100%;\n /* BASICS */\n .CodeMirror-placeholder {\n color: ${({ theme }) => theme.colors.neutral600} !important;\n }\n\n .CodeMirror {\n /* Set height, width, borders, and global font properties here */\n font-size: ${14 / 16}rem;\n height: ${({ isExpandMode }) =>\n isExpandMode\n ? '100%'\n : '410px'}; // 512px(total height) - 48px (header) - 52px(footer) - 2px border\n color: ${({ theme }) => theme.colors.neutral800};\n direction: ltr;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell,\n 'Open Sans', 'Helvetica Neue', sans-serif;\n }\n\n /* PADDING */\n\n .CodeMirror-lines {\n padding: ${({ theme }) => `${theme.spaces[3]} ${theme.spaces[4]}`};\n /* Vertical padding around content */\n }\n\n .CodeMirror-scrollbar-filler,\n .CodeMirror-gutter-filler {\n /* The little square between H and V scrollbars */\n background-color: ${({ theme }) => `${theme.colors.neutral0}`};\n }\n\n /* GUTTER */\n\n .CodeMirror-gutters {\n border-right: 1px solid #ddd;\n background-color: #f7f7f7;\n white-space: nowrap;\n }\n .CodeMirror-linenumbers {\n }\n .CodeMirror-linenumber {\n padding: 0 3px 0 5px;\n min-width: 20px;\n text-align: right;\n color: #999;\n white-space: nowrap;\n }\n\n .CodeMirror-guttermarker {\n color: black;\n }\n .CodeMirror-guttermarker-subtle {\n color: #999;\n }\n\n /* CURSOR */\n\n .CodeMirror-cursor {\n border-left: 1px solid black;\n border-right: none;\n width: 0;\n }\n /* Shown when moving in bi-directional text */\n .CodeMirror div.CodeMirror-secondarycursor {\n border-left: 1px solid silver;\n }\n .cm-fat-cursor .CodeMirror-cursor {\n width: auto;\n border: 0 !important;\n background: #7e7;\n }\n .cm-fat-cursor div.CodeMirror-cursors {\n /* z-index: 1; */\n }\n\n .cm-fat-cursor-mark {\n background-color: rgba(20, 255, 20, 0.5);\n -webkit-animation: blink 1.06s steps(1) infinite;\n -moz-animation: blink 1.06s steps(1) infinite;\n animation: blink 1.06s steps(1) infinite;\n }\n .cm-animate-fat-cursor {\n width: auto;\n border: 0;\n -webkit-animation: blink 1.06s steps(1) infinite;\n -moz-animation: blink 1.06s steps(1) infinite;\n animation: blink 1.06s steps(1) infinite;\n background-color: #7e7;\n }\n\n /* Can style cursor different in overwrite (non-insert) mode */\n .CodeMirror-overwrite .CodeMirror-cursor {\n }\n\n .cm-tab {\n display: inline-block;\n text-decoration: inherit;\n }\n\n .CodeMirror-rulers {\n position: absolute;\n left: 0;\n right: 0;\n top: -50px;\n bottom: 0;\n overflow: hidden;\n }\n .CodeMirror-ruler {\n border-left: 1px solid #ccc;\n top: 0;\n bottom: 0;\n position: absolute;\n }\n\n /* DEFAULT THEME */\n\n .cm-header,\n .cm-strong {\n font-weight: bold;\n }\n .cm-em {\n font-style: italic;\n }\n .cm-link {\n text-decoration: underline;\n }\n .cm-strikethrough {\n text-decoration: line-through;\n }\n\n .CodeMirror-composing {\n border-bottom: 2px solid;\n }\n\n /* Default styles for common addons */\n\n div.CodeMirror span.CodeMirror-matchingbracket {\n color: #0b0;\n }\n div.CodeMirror span.CodeMirror-nonmatchingbracket {\n color: #a22;\n }\n .CodeMirror-matchingtag {\n background: rgba(255, 150, 0, 0.3);\n }\n .CodeMirror-activeline-background {\n background: #e8f2ff;\n }\n\n /* STOP */\n\n /* The rest of this file contains styles related to the mechanics of\n the editor. You probably shouldn't touch them. */\n\n .CodeMirror {\n position: relative;\n overflow: hidden;\n background: ${({ theme }) => `${theme.colors.neutral0}`};\n }\n\n .CodeMirror-scroll {\n overflow: scroll !important; /* Things will break if this is overridden */\n /* 50px is the magic margin used to hide the element's real scrollbars */\n /* See overflow: hidden in .CodeMirror */\n margin-bottom: -50px;\n margin-right: -50px;\n padding-bottom: 50px;\n height: 100%;\n outline: none; /* Prevent dragging from highlighting the element */\n position: relative;\n }\n .CodeMirror-sizer {\n position: relative;\n border-right: 50px solid transparent;\n }\n\n /* The fake, visible scrollbars. Used to force redraw during scrolling\n before actual scrolling happens, thus preventing shaking and\n flickering artifacts. */\n .CodeMirror-vscrollbar,\n .CodeMirror-hscrollbar,\n .CodeMirror-scrollbar-filler,\n .CodeMirror-gutter-filler {\n position: absolute;\n z-index: 1;\n display: none;\n outline: none;\n }\n\n .CodeMirror-vscrollbar {\n right: 0;\n top: 0;\n overflow-x: hidden;\n overflow-y: scroll;\n }\n .CodeMirror-hscrollbar {\n bottom: 0;\n left: 0;\n overflow-y: hidden;\n overflow-x: scroll;\n }\n .CodeMirror-scrollbar-filler {\n right: 0;\n bottom: 0;\n }\n\n .CodeMirror-lines {\n cursor: text;\n min-height: 1px; /* prevents collapsing before first draw */\n }\n /* Reset some styles that the rest of the page might have set */\n .CodeMirror pre.CodeMirror-line,\n .CodeMirror pre.CodeMirror-line-like {\n -moz-border-radius: 0;\n -webkit-border-radius: 0;\n border-radius: 0;\n border-width: 0;\n background: transparent;\n font-family: inherit;\n font-size: inherit;\n margin: 0;\n white-space: pre;\n word-wrap: normal;\n line-height: 1.5;\n color: inherit;\n /* z-index: 2; */\n position: relative;\n overflow: visible;\n -webkit-tap-highlight-color: transparent;\n -webkit-font-variant-ligatures: contextual;\n font-variant-ligatures: contextual;\n }\n\n .CodeMirror pre.CodeMirror-line-like {\n z-index: 2;\n }\n\n .CodeMirror-wrap pre.CodeMirror-line,\n .CodeMirror-wrap pre.CodeMirror-line-like {\n word-wrap: break-word;\n white-space: pre-wrap;\n word-break: normal;\n }\n\n .CodeMirror-linebackground {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n z-index: 0;\n }\n\n .CodeMirror-linewidget {\n position: relative;\n /* z-index: 2; */\n padding: 0.1px; /* Force widget margins to stay inside of the container */\n }\n\n .CodeMirror-widget {\n }\n\n .CodeMirror-rtl pre {\n direction: rtl;\n }\n\n .CodeMirror-code {\n outline: none;\n }\n\n /* Force content-box sizing for the elements where we expect it */\n .CodeMirror-scroll,\n .CodeMirror-sizer,\n .CodeMirror-gutter,\n .CodeMirror-gutters,\n .CodeMirror-linenumber {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n }\n\n .CodeMirror-measure {\n position: absolute;\n width: 100%;\n height: 0;\n overflow: hidden;\n visibility: hidden;\n }\n\n .CodeMirror-cursor {\n position: absolute;\n pointer-events: none;\n border-color: ${({ theme }) => `${theme.colors.neutral800}`};\n }\n .CodeMirror-measure pre {\n position: static;\n }\n\n div.CodeMirror-cursors {\n visibility: hidden;\n position: relative;\n + div {\n z-index: 0 !important;\n }\n }\n\n div.CodeMirror-dragcursors {\n visibility: visible;\n }\n\n .CodeMirror-focused div.CodeMirror-cursors {\n visibility: visible;\n }\n\n .CodeMirror-selected {\n background: ${({ theme }) => theme.colors.neutral200};\n /* z-index: -10; */\n }\n .CodeMirror-crosshair {\n cursor: crosshair;\n }\n\n /* Used to force a border model for a node */\n .cm-force-border {\n padding-right: 0.1px;\n }\n\n /* See issue #2901 */\n .cm-tab-wrap-hack:after {\n content: '';\n }\n\n /* Help users use markselection to safely style text background */\n span.CodeMirror-selectedtext {\n background: none;\n }\n\n span {\n color: ${({ theme }) => theme.colors.neutral800} !important;\n }\n`;\n\nexport default Editor;\n","import React from 'react';\n\nimport { BaseButton, Box, Flex, FocusTrap, Portal, Typography } from '@strapi/design-system';\nimport { pxToRem, useLockScroll } from '@strapi/helper-plugin';\nimport { Collapse } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport PreviewWysiwyg from '../PreviewWysiwyg';\n\nconst setOpacity = (hex, alpha) =>\n `${hex}${Math.floor(alpha * 255)\n .toString(16)\n .padStart(2, 0)}`;\n\nconst ExpandWrapper = styled(Flex)`\n background: ${({ theme }) => setOpacity(theme.colors.neutral800, 0.2)};\n`;\n\nconst BoxWithBorder = styled(Box)`\n border-right: 1px solid ${({ theme }) => theme.colors.neutral200};\n`;\n\nexport const ExpandButton = styled(BaseButton)`\n background-color: transparent;\n border: none;\n align-items: center;\n\n svg {\n margin-left: ${({ theme }) => `${theme.spaces[2]}`};\n\n path {\n fill: ${({ theme }) => theme.colors.neutral700};\n width: ${12 / 16}rem;\n height: ${12 / 16}rem;\n }\n }\n`;\n\nexport const EditorLayout = ({ children, isExpandMode, error, previewContent, onCollapse }) => {\n const { formatMessage } = useIntl();\n\n useLockScroll(isExpandMode);\n\n if (isExpandMode) {\n return (\n <Portal role=\"dialog\" aria-modal={false}>\n <FocusTrap onEscape={onCollapse}>\n <ExpandWrapper\n position=\"fixed\"\n top={0}\n left={0}\n right={0}\n bottom={0}\n zIndex={4}\n justifyContent=\"center\"\n onClick={onCollapse}\n >\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"popupShadow\"\n overflow=\"hidden\"\n width=\"90%\"\n height=\"90%\"\n onClick={(e) => e.stopPropagation()}\n >\n <Flex height=\"100%\" alignItems=\"flex-start\">\n <BoxWithBorder flex=\"1\" height=\"100%\">\n {children}\n </BoxWithBorder>\n <Flex alignItems=\"start\" direction=\"column\" flex={1} height=\"100%\" width=\"100%\">\n <Flex\n height={pxToRem(48)}\n background=\"neutral100\"\n justifyContent=\"flex-end\"\n shrink={0}\n width=\"100%\"\n >\n <ExpandButton onClick={onCollapse}>\n <Typography>\n {formatMessage({\n id: 'components.Wysiwyg.collapse',\n defaultMessage: 'Collapse',\n })}\n </Typography>\n <Collapse />\n </ExpandButton>\n </Flex>\n\n <Box position=\"relative\" height=\"100%\" width=\"100%\">\n <PreviewWysiwyg data={previewContent} />\n </Box>\n </Flex>\n </Flex>\n </Box>\n </ExpandWrapper>\n </FocusTrap>\n </Portal>\n );\n }\n\n return (\n <Box\n borderColor={error ? 'danger600' : 'neutral200'}\n borderStyle=\"solid\"\n borderWidth=\"1px\"\n hasRadius\n >\n {children}\n </Box>\n );\n};\n\nEditorLayout.defaultProps = {\n error: undefined,\n previewContent: '',\n};\n\nEditorLayout.propTypes = {\n children: PropTypes.node.isRequired,\n error: PropTypes.string,\n isExpandMode: PropTypes.bool.isRequired,\n previewContent: PropTypes.string,\n onCollapse: PropTypes.func.isRequired,\n};\n","export const replaceText = (markdownName, textToChange) => {\n let editedText;\n\n switch (markdownName) {\n case 'Strikethrough':\n editedText = `~~${textToChange}~~`;\n break;\n case 'Bold':\n editedText = `**${textToChange}**`;\n break;\n case 'Italic':\n editedText = `_${textToChange}_`;\n break;\n case 'Underline':\n editedText = `<u>${textToChange}</u>`;\n break;\n case 'Code':\n editedText = `\\`\\`\\`\\n${textToChange}\\n\\`\\`\\``;\n break;\n case 'Link':\n editedText = `[${textToChange}](link)`;\n break;\n case 'Quote':\n editedText = `>${textToChange}`;\n break;\n default:\n editedText = textToChange;\n }\n\n return editedText;\n};\n\nexport const insertText = (markdownName) => {\n let editedText;\n // object to calculate text that will be selected after insert of markdown\n let selection = { start: markdownName.length, end: 0 };\n\n switch (markdownName) {\n case 'Strikethrough':\n editedText = `~~${markdownName}~~`;\n selection.end = 2;\n break;\n case 'Bold':\n editedText = `**${markdownName}**`;\n selection.end = 2;\n break;\n case 'Italic':\n editedText = `_${markdownName}_`;\n selection.end = 1;\n break;\n case 'alt':\n editedText = `[${markdownName}]()`;\n selection.end = 3;\n break;\n case 'Underline':\n editedText = `<u>${markdownName}</u>`;\n selection.end = 4;\n break;\n case 'Code':\n editedText = `\\`\\`\\`\\n${markdownName}\\n\\`\\`\\``;\n selection.end = 3;\n break;\n case 'Link':\n editedText = `[${markdownName}](link)`;\n selection.end = 7;\n break;\n case 'Quote':\n editedText = `>${markdownName}`;\n selection.end = 0;\n break;\n default:\n editedText = '';\n }\n\n return { editedText, selection };\n};\n\nexport const insertListOrTitle = (markdown) => {\n let textToInsert;\n\n switch (markdown) {\n case 'BulletList':\n textToInsert = '- ';\n break;\n case 'NumberList':\n textToInsert = '1. ';\n break;\n case 'h1':\n textToInsert = '# ';\n break;\n case 'h2':\n textToInsert = '## ';\n break;\n case 'h3':\n textToInsert = '### ';\n break;\n case 'h4':\n textToInsert = '#### ';\n break;\n case 'h5':\n textToInsert = '##### ';\n break;\n case 'h6':\n textToInsert = '###### ';\n break;\n default:\n return '';\n }\n\n return textToInsert;\n};\n\n// EDITOR ACTIONS FUNCTIONS\n\nexport const markdownHandler = (editor, markdownType) => {\n const textToEdit = editor.current.getSelection();\n let textToInsert;\n\n if (textToEdit) {\n const editedText = replaceText(markdownType, textToEdit);\n editor.current.replaceSelection(editedText);\n editor.current.focus();\n } else {\n textToInsert = insertText(markdownType);\n editor.current.replaceSelection(textToInsert.editedText);\n editor.current.focus();\n // set selection-focus to text to replace with content\n const { line, ch } = editor.current.getCursor();\n const endSelection = ch - textToInsert.selection.end;\n const startSelection = ch - textToInsert.selection.end - textToInsert.selection.start;\n editor.current.setSelection({ line, ch: startSelection }, { line, ch: endSelection });\n }\n};\n\nexport const listHandler = (editor, listType) => {\n const doc = editor.current.getDoc();\n const insertion = listType === 'BulletList' ? '- ' : '1. ';\n\n if (doc.somethingSelected()) {\n const selections = doc.listSelections();\n let remove = null;\n\n editor.current.operation(function () {\n selections.forEach(function (selection) {\n const pos = [selection.head.line, selection.anchor.line].sort();\n\n // Remove if the first text starts with it\n if (remove == null) {\n remove = doc.getLine(pos[0]).startsWith(insertion);\n }\n\n for (let i = pos[0]; i <= pos[1]; i++) {\n if (remove) {\n // Don't remove if we don't start with it\n if (doc.getLine(i).startsWith(insertion)) {\n doc.replaceRange('', { line: i, ch: 0 }, { line: i, ch: insertion.length });\n }\n } else {\n const lineInsertion = listType === 'BulletList' ? '- ' : `${i + 1}. `;\n doc.replaceRange(lineInsertion, { line: i, ch: 0 });\n }\n }\n });\n });\n } else {\n let { line: currentLine } = doc.getCursor();\n const listToInsert = insertListOrTitle(listType);\n const lineContent = editor.current.getLine(currentLine);\n\n const textToInsert = listToInsert + lineContent;\n editor.current.setSelection(\n { line: currentLine, ch: 0 },\n { line: currentLine, ch: lineContent.length }\n );\n editor.current.replaceSelection(textToInsert);\n }\n\n editor.current.focus();\n};\n\nexport const titleHandler = (editor, titleType) => {\n let { line: currentLine } = editor.current.getCursor();\n const titleToInsert = insertListOrTitle(titleType);\n const lineContent = editor.current.getLine(currentLine);\n\n // replace hashtags followed by a space in case user want to change the type of title\n const lineWithNoTitle = lineContent.replace(/#{1,6}\\s/g, '').trim();\n\n const textToInsert = titleToInsert + lineWithNoTitle;\n editor.current.setSelection(\n { line: currentLine, ch: 0 },\n { line: currentLine, ch: lineContent.length }\n );\n editor.current.replaceSelection(textToInsert);\n\n setTimeout(() => {\n const newLastLineLength = editor.current.getLine(currentLine).length;\n editor.current.focus();\n editor.current.setCursor({ line: currentLine, ch: newLastLineLength });\n }, 0);\n};\n\nexport const insertFile = (editor, files) => {\n let { line, ch } = editor.current.getCursor();\n\n files.forEach((file, i) => {\n let contentLength = editor.current.getLine(line).length;\n editor.current.setCursor({ line, ch: contentLength });\n // create a new line after first image markdown inserted\n // or if there is content in current line\n\n if (i > 0 || (i === 0 && ch !== 0)) {\n contentLength = editor.current.getLine(line).length;\n editor.current.setCursor({ line, ch: contentLength });\n line++;\n editor.current.replaceSelection('\\n');\n }\n\n if (file.mime.includes('image')) {\n editor.current.replaceSelection(``);\n } else {\n editor.current.replaceSelection(`[${file.alt}](${file.url})`);\n }\n });\n\n setTimeout(() => editor.current.focus(), 0);\n};\n\n// NEXT FUNCTIONS FOR QUOTE OR CODE MARKDOWN\n\nconst insertWithTextToEdit = (editor, markdownType, line, contentLength, textToEdit) => {\n const textToInsert = replaceText(markdownType, textToEdit);\n\n // remove content after current line\n const contentToMove = editor.current.getRange(\n { line: line + 1, ch: 0 },\n { line: Infinity, ch: Infinity }\n );\n editor.current.replaceRange('', { line: line + 1, ch: 0 }, { line: Infinity, ch: Infinity });\n\n // remove word that was selected\n // set cursor end of line + move to next line\n // add text to insert\n editor.current.replaceSelection('');\n editor.current.setCursor({ line, ch: contentLength });\n editor.current.replaceSelection('\\n');\n editor.current.replaceSelection(textToInsert);\n\n if (markdownType === 'Code') {\n let { line: newLine } = editor.current.getCursor();\n editor.current.setCursor({ line: newLine - 1, ch: textToEdit.length });\n }\n\n // add content we had to remove earlier\n editor.current.replaceRange(\n contentToMove,\n { line: line + 4, ch: 0 },\n { line: Infinity, ch: Infinity }\n );\n\n editor.current.focus();\n};\n\nconst insertWithoutTextToEdit = (editor, markdownType, line, contentLength) => {\n const textToInsert = insertText(markdownType);\n\n // remove content after current line\n const contentToMove = editor.current.getRange(\n { line: line + 1, ch: 0 },\n { line: Infinity, ch: Infinity }\n );\n editor.current.replaceRange('', { line: line + 1, ch: 0 }, { line: Infinity, ch: Infinity });\n\n // replace cursor to next line\n editor.current.setCursor({ line, ch: contentLength });\n editor.current.replaceSelection('\\n');\n editor.current.replaceSelection(textToInsert.editedText);\n\n // set selection on \"Code\" or \"Quote\" word\n\n if (markdownType === 'Code') {\n line += 2;\n\n editor.current.setSelection({ line, ch: 0 }, { line, ch: 4 });\n } else {\n line += 1;\n\n let { ch } = editor.current.getCursor();\n let endSelection = ch - textToInsert.selection.end;\n let startSelection = ch - textToInsert.selection.end - textToInsert.selection.start;\n editor.current.setSelection({ line, ch: startSelection }, { line, ch: endSelection });\n }\n\n // add content we had to remove earlier\n editor.current.replaceRange(\n contentToMove,\n { line: line + 2, ch: 0 },\n { line: Infinity, ch: Infinity }\n );\n editor.current.focus();\n};\n\nexport const quoteAndCodeHandler = (editor, markdownType) => {\n const textToEdit = editor.current.getSelection();\n let { line } = editor.current.getCursor();\n let contentLength = editor.current.getLine(line).length;\n\n if (textToEdit) {\n insertWithTextToEdit(editor, markdownType, line, contentLength, textToEdit);\n } else {\n insertWithoutTextToEdit(editor, markdownType, line, contentLength);\n }\n};\n","import { BaseButton, IconButton, IconButtonGroup } from '@strapi/design-system';\nimport styled from 'styled-components';\n\n// NAV BUTTONS\nexport const CustomIconButton = styled(IconButton)`\n padding: ${({ theme }) => theme.spaces[2]};\n /* Trick to prevent the outline from overflowing because of the general outline-offset */\n outline-offset: -2px !important;\n\n svg {\n width: ${18 / 16}rem;\n height: ${18 / 16}rem;\n }\n`;\n\nexport const CustomLinkIconButton = styled(CustomIconButton)`\n svg {\n width: ${8 / 16}rem;\n height: ${8 / 16}rem;\n }\n`;\n\nexport const MainButtons = styled(IconButtonGroup)`\n margin-left: ${({ theme }) => theme.spaces[4]};\n`;\n\nexport const MoreButton = styled(IconButton)`\n margin: ${({ theme }) => `0 ${theme.spaces[2]}`};\n padding: ${({ theme }) => theme.spaces[2]};\n\n svg {\n width: ${18 / 16}rem;\n height: ${18 / 16}rem;\n }\n`;\n\n// NAV\n\nexport const IconButtonGroupMargin = styled(IconButtonGroup)`\n margin-right: ${({ theme }) => `${theme.spaces[2]}`};\n`;\n\n// FOOTER\nexport const ExpandButton = styled(BaseButton)`\n background-color: transparent;\n border: none;\n align-items: center;\n\n svg {\n margin-left: ${({ theme }) => `${theme.spaces[2]}`};\n path {\n fill: ${({ theme }) => theme.colors.neutral700};\n width: ${12 / 16}rem;\n height: ${12 / 16}rem;\n }\n }\n`;\n","import React from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { Expand } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { ExpandButton } from './WysiwygStyles';\n\nconst WysiwygFooter = ({ onToggleExpand }) => {\n const { formatMessage } = useIntl();\n\n return (\n <Box padding={2} background=\"neutral100\" borderRadius={`0 0 ${4 / 16}rem ${4 / 16}rem`}>\n <Flex justifyContent=\"flex-end\" alignItems=\"flex-end\">\n <ExpandButton id=\"expand\" onClick={onToggleExpand}>\n <Typography>\n {formatMessage({\n id: 'components.WysiwygBottomControls.fullscreen',\n defaultMessage: 'Expand',\n })}\n </Typography>\n <Expand />\n </ExpandButton>\n </Flex>\n </Box>\n );\n};\n\nWysiwygFooter.defaultProps = {\n onToggleExpand() {},\n};\n\nWysiwygFooter.propTypes = {\n onToggleExpand: PropTypes.func,\n};\n\nexport default WysiwygFooter;\n","import React, { useRef, useState } from 'react';\n\nimport {\n Button,\n Flex,\n IconButtonGroup,\n SingleSelectOption,\n Popover,\n SingleSelect,\n} from '@strapi/design-system';\nimport {\n Bold,\n BulletList,\n Code,\n Italic,\n Link,\n More,\n NumberList,\n Picture as Image,\n Quote,\n StrikeThrough,\n Underline,\n} from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport {\n CustomIconButton,\n CustomLinkIconButton,\n IconButtonGroupMargin,\n MainButtons,\n MoreButton,\n} from './WysiwygStyles';\n\n/**\n * TODO: refactor this mess.\n */\nconst WysiwygNav = ({\n disabled,\n editorRef,\n isExpandMode,\n isPreviewMode,\n onActionClick,\n onToggleMediaLib,\n onTogglePreviewMode,\n}) => {\n const [visiblePopover, setVisiblePopover] = useState(false);\n const { formatMessage } = useIntl();\n const selectPlaceholder = formatMessage({\n id: 'components.Wysiwyg.selectOptions.title',\n defaultMessage: 'Add a title',\n });\n const buttonMoreRef = useRef();\n\n const handleTogglePopover = () => {\n setVisiblePopover((prev) => !prev);\n };\n\n if (disabled || isPreviewMode) {\n return (\n <Flex\n padding={2}\n background=\"neutral100\"\n justifyContent=\"space-between\"\n borderRadius={`${4 / 16}rem ${4 / 16}rem 0 0`}\n >\n <StyledFlex>\n <SingleSelect disabled placeholder={selectPlaceholder} size=\"S\" label={selectPlaceholder}>\n <SingleSelectOption value=\"h1\">h1</SingleSelectOption>\n <SingleSelectOption value=\"h2\">h2</SingleSelectOption>\n <SingleSelectOption value=\"h3\">h3</SingleSelectOption>\n <SingleSelectOption value=\"h4\">h4</SingleSelectOption>\n <SingleSelectOption value=\"h5\">h5</SingleSelectOption>\n <SingleSelectOption value=\"h6\">h6</SingleSelectOption>\n </SingleSelect>\n\n <MainButtons>\n <CustomIconButton disabled label=\"Bold\" name=\"Bold\" icon={<Bold />} />\n <CustomIconButton disabled label=\"Italic\" name=\"Italic\" icon={<Italic />} />\n <CustomIconButton disabled label=\"Underline\" name=\"Underline\" icon={<Underline />} />\n </MainButtons>\n\n <MoreButton disabled label=\"More\" icon={<More />} />\n </StyledFlex>\n\n {!isExpandMode && (\n <Button onClick={onTogglePreviewMode} variant=\"tertiary\">\n {formatMessage({\n id: 'components.Wysiwyg.ToggleMode.markdown-mode',\n defaultMessage: 'Markdown mode',\n })}\n </Button>\n )}\n </Flex>\n );\n }\n\n return (\n <Flex\n padding={2}\n background=\"neutral100\"\n justifyContent=\"space-between\"\n borderRadius={`${4 / 16}rem ${4 / 16}rem 0 0`}\n >\n <StyledFlex>\n <SingleSelect\n placeholder={selectPlaceholder}\n label={selectPlaceholder}\n size=\"S\"\n onChange={(value) => onActionClick(value, editorRef)}\n >\n <SingleSelectOption value=\"h1\">h1</SingleSelectOption>\n <SingleSelectOption value=\"h2\">h2</SingleSelectOption>\n <SingleSelectOption value=\"h3\">h3</SingleSelectOption>\n <SingleSelectOption value=\"h4\">h4</SingleSelectOption>\n <SingleSelectOption value=\"h5\">h5</SingleSelectOption>\n <SingleSelectOption value=\"h6\">h6</SingleSelectOption>\n </SingleSelect>\n\n <MainButtons>\n <CustomIconButton\n onClick={() => onActionClick('Bold', editorRef)}\n label=\"Bold\"\n name=\"Bold\"\n icon={<Bold />}\n />\n <CustomIconButton\n onClick={() => onActionClick('Italic', editorRef)}\n label=\"Italic\"\n name=\"Italic\"\n icon={<Italic />}\n />\n <CustomIconButton\n onClick={() => onActionClick('Underline', editorRef)}\n label=\"Underline\"\n name=\"Underline\"\n icon={<Underline />}\n />\n </MainButtons>\n\n <MoreButton\n ref={buttonMoreRef}\n onClick={handleTogglePopover}\n label=\"More\"\n icon={<More />}\n />\n {visiblePopover && (\n <Popover onDismiss={handleTogglePopover} centered source={buttonMoreRef} spacing={4}>\n <Flex>\n <IconButtonGroupMargin>\n <CustomIconButton\n onClick={() => onActionClick('Strikethrough', editorRef, handleTogglePopover)}\n label=\"Strikethrough\"\n name=\"Strikethrough\"\n icon={<StrikeThrough />}\n />\n <CustomIconButton\n onClick={() => onActionClick('BulletList', editorRef, handleTogglePopover)}\n label=\"BulletList\"\n name=\"BulletList\"\n icon={<BulletList />}\n />\n <CustomIconButton\n onClick={() => onActionClick('NumberList', editorRef, handleTogglePopover)}\n label=\"NumberList\"\n name=\"NumberList\"\n icon={<NumberList />}\n />\n </IconButtonGroupMargin>\n <IconButtonGroup>\n <CustomIconButton\n onClick={() => onActionClick('Code', editorRef, handleTogglePopover)}\n label=\"Code\"\n name=\"Code\"\n icon={<Code />}\n />\n <CustomIconButton\n onClick={() => {\n handleTogglePopover();\n onToggleMediaLib();\n }}\n label=\"Image\"\n name=\"Image\"\n icon={<Image />}\n />\n <CustomLinkIconButton\n onClick={() => onActionClick('Link', editorRef, handleTogglePopover)}\n label=\"Link\"\n name=\"Link\"\n // eslint-disable-next-line jsx-a11y/anchor-is-valid\n icon={<Link />}\n />\n <CustomIconButton\n onClick={() => onActionClick('Quote', editorRef, handleTogglePopover)}\n label=\"Quote\"\n name=\"Quote\"\n icon={<Quote />}\n />\n </IconButtonGroup>\n </Flex>\n </Popover>\n )}\n </StyledFlex>\n\n {onTogglePreviewMode && (\n <Button onClick={onTogglePreviewMode} variant=\"tertiary\">\n {formatMessage({\n id: 'components.Wysiwyg.ToggleMode.preview-mode',\n defaultMessage: 'Preview mode',\n })}\n </Button>\n )}\n </Flex>\n );\n};\n\nWysiwygNav.defaultProps = {\n isPreviewMode: false,\n onActionClick() {},\n onToggleMediaLib() {},\n onTogglePreviewMode: undefined,\n};\n\nWysiwygNav.propTypes = {\n disabled: PropTypes.bool.isRequired,\n editorRef: PropTypes.shape({ current: PropTypes.any }).isRequired,\n isExpandMode: PropTypes.bool.isRequired,\n isPreviewMode: PropTypes.bool,\n onActionClick: PropTypes.func,\n onToggleMediaLib: PropTypes.func,\n onTogglePreviewMode: PropTypes.func,\n};\n\nexport default WysiwygNav;\n\nconst StyledFlex = styled(Flex)`\n /* Hide the label, every input needs a label. */\n label {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n }\n`;\n","import React, { forwardRef, useRef, useState } from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { prefixFileUrlWithBackendUrl, useLibrary } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport Hint from '../Hint';\n\nimport Editor from './Editor';\nimport { EditorLayout } from './EditorLayout';\nimport {\n insertFile,\n listHandler,\n markdownHandler,\n quoteAndCodeHandler,\n titleHandler,\n} from './utils/utils';\nimport WysiwygFooter from './WysiwygFooter';\nimport WysiwygNav from './WysiwygNav';\n\nconst LabelAction = styled(Box)`\n svg path {\n fill: ${({ theme }) => theme.colors.neutral500};\n }\n`;\n\nconst TypographyAsterisk = styled(Typography)`\n line-height: 0;\n`;\n\nconst Wysiwyg = forwardRef(\n (\n { hint, disabled, error, intlLabel, labelAction, name, onChange, placeholder, value, required },\n forwardedRef\n ) => {\n const { formatMessage } = useIntl();\n const textareaRef = useRef(null);\n const editorRef = useRef(null);\n const [isPreviewMode, setIsPreviewMode] = useState(false);\n const [mediaLibVisible, setMediaLibVisible] = useState(false);\n const [isExpandMode, setIsExpandMode] = useState(false);\n const { components } = useLibrary();\n\n const MediaLibraryDialog = components['media-library'];\n\n const handleToggleMediaLib = () => setMediaLibVisible((prev) => !prev);\n const handleTogglePreviewMode = () => setIsPreviewMode((prev) => !prev);\n const handleToggleExpand = () => {\n setIsPreviewMode(false);\n setIsExpandMode((prev) => !prev);\n };\n\n const handleActionClick = (value, currentEditorRef, togglePopover) => {\n switch (value) {\n case 'Link':\n case 'Strikethrough': {\n markdownHandler(currentEditorRef, value);\n togglePopover();\n break;\n }\n case 'Code':\n case 'Quote': {\n quoteAndCodeHandler(currentEditorRef, value);\n togglePopover();\n break;\n }\n case 'Bold':\n case 'Italic':\n case 'Underline': {\n markdownHandler(currentEditorRef, value);\n break;\n }\n case 'BulletList':\n case 'NumberList': {\n listHandler(currentEditorRef, value);\n togglePopover();\n break;\n }\n case 'h1':\n case 'h2':\n case 'h3':\n case 'h4':\n case 'h5':\n case 'h6': {\n titleHandler(currentEditorRef, value);\n break;\n }\n default: {\n // Nothing\n }\n }\n };\n\n const handleSelectAssets = (files) => {\n const formattedFiles = files.map((f) => ({\n alt: f.alternativeText || f.name,\n url: prefixFileUrlWithBackendUrl(f.url),\n mime: f.mime,\n }));\n\n insertFile(editorRef, formattedFiles);\n setMediaLibVisible(false);\n };\n\n const formattedPlaceholder = placeholder\n ? formatMessage(\n { id: placeholder.id, defaultMessage: placeholder.defaultMessage },\n { ...placeholder.values }\n )\n : '';\n\n const label = intlLabel.id\n ? formatMessage(\n { id: intlLabel.id, defaultMessage: intlLabel.defaultMessage },\n { ...intlLabel.values }\n )\n : name;\n\n return (\n <>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <Flex gap={1}>\n <Typography variant=\"pi\" fontWeight=\"bold\" textColor=\"neutral800\">\n {label}\n {required && <TypographyAsterisk textColor=\"danger600\">*</TypographyAsterisk>}\n </Typography>\n {labelAction && <LabelAction paddingLeft={1}>{labelAction}</LabelAction>}\n </Flex>\n\n <EditorLayout\n isExpandMode={isExpandMode}\n error={error}\n previewContent={value}\n onCollapse={handleToggleExpand}\n >\n <WysiwygNav\n isExpandMode={isExpandMode}\n editorRef={editorRef}\n isPreviewMode={isPreviewMode}\n onActionClick={handleActionClick}\n onToggleMediaLib={handleToggleMediaLib}\n onTogglePreviewMode={isExpandMode ? undefined : handleTogglePreviewMode}\n disabled={disabled}\n />\n\n <Editor\n disabled={disabled}\n isExpandMode={isExpandMode}\n editorRef={editorRef}\n error={error}\n isPreviewMode={isPreviewMode}\n name={name}\n onChange={onChange}\n placeholder={formattedPlaceholder}\n textareaRef={textareaRef}\n value={value}\n ref={forwardedRef}\n />\n\n {!isExpandMode && <WysiwygFooter onToggleExpand={handleToggleExpand} />}\n </EditorLayout>\n <Hint hint={hint} name={name} error={error} />\n </Flex>\n\n {error && (\n <Box paddingTop={1}>\n <Typography variant=\"pi\" textColor=\"danger600\" data-strapi-field-error>\n {error}\n </Typography>\n </Box>\n )}\n\n {mediaLibVisible && (\n <MediaLibraryDialog onClose={handleToggleMediaLib} onSelectAssets={handleSelectAssets} />\n )}\n </>\n );\n }\n);\n\nWysiwyg.defaultProps = {\n disabled: false,\n error: '',\n labelAction: undefined,\n placeholder: null,\n required: false,\n value: '',\n hint: '',\n};\n\nWysiwyg.propTypes = {\n hint: PropTypes.oneOfType([PropTypes.string, PropTypes.array]),\n disabled: PropTypes.bool,\n error: PropTypes.string,\n intlLabel: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n values: PropTypes.object,\n }).isRequired,\n labelAction: PropTypes.element,\n name: PropTypes.string.isRequired,\n onChange: PropTypes.func.isRequired,\n placeholder: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n values: PropTypes.object,\n }),\n required: PropTypes.bool,\n value: PropTypes.string,\n};\n\nexport default Wysiwyg;\n","import React from 'react';\n\nfunction connect(WrappedComponent, select) {\n return (props) => {\n // eslint-disable-next-line react/prop-types\n const selectors = select(props.keys);\n\n return <WrappedComponent {...props} {...selectors} />;\n };\n}\n\nexport default connect;\n","const generateOptions = (options, isRequired = false) => {\n return [\n {\n metadatas: {\n intlLabel: {\n id: 'components.InputSelect.option.placeholder',\n defaultMessage: 'Choose here',\n },\n disabled: isRequired,\n hidden: isRequired,\n },\n key: '__enum_option_null',\n value: '',\n },\n ...options.map((option) => {\n return {\n metadatas: {\n intlLabel: {\n id: option,\n defaultMessage: option,\n },\n hidden: false,\n disabled: false,\n },\n key: option,\n value: option,\n };\n }),\n ];\n};\n\nexport default generateOptions;\n","import toLower from 'lodash/toLower';\n\nconst getInputType = (type = '') => {\n switch (toLower(type)) {\n case 'blocks':\n return 'blocks';\n case 'boolean':\n return 'bool';\n case 'biginteger':\n return 'text';\n case 'decimal':\n case 'float':\n case 'integer':\n return 'number';\n case 'date':\n case 'datetime':\n case 'time':\n return type;\n case 'email':\n return 'email';\n case 'enumeration':\n return 'select';\n case 'password':\n return 'password';\n case 'string':\n return 'text';\n case 'text':\n return 'textarea';\n case 'media':\n case 'file':\n case 'files':\n return 'media';\n case 'json':\n return 'json';\n case 'wysiwyg':\n case 'WYSIWYG':\n case 'richtext':\n return 'wysiwyg';\n case 'uid':\n return 'uid';\n default:\n return type || 'text';\n }\n};\n\nexport default getInputType;\n","import { useMemo } from 'react';\n\nimport { useCMEditViewDataManager } from '@strapi/helper-plugin';\nimport get from 'lodash/get';\n\nfunction useSelect(keys) {\n const {\n createActionAllowedFields,\n formErrors,\n isCreatingEntry,\n modifiedData,\n onChange,\n readActionAllowedFields,\n shouldNotRunValidations,\n updateActionAllowedFields,\n } = useCMEditViewDataManager();\n\n const allowedFields = useMemo(() => {\n return isCreatingEntry ? createActionAllowedFields : updateActionAllowedFields;\n }, [isCreatingEntry, createActionAllowedFields, updateActionAllowedFields]);\n\n const readableFields = useMemo(() => {\n return isCreatingEntry ? [] : readActionAllowedFields;\n }, [isCreatingEntry, readActionAllowedFields]);\n\n const value = get(modifiedData, keys, null);\n\n return {\n allowedFields,\n formErrors,\n isCreatingEntry,\n onChange,\n readableFields,\n shouldNotRunValidations,\n value,\n };\n}\n\nexport default useSelect;\n","const validationsToOmit = [\n 'type',\n 'model',\n 'via',\n 'collection',\n 'default',\n 'plugin',\n 'enum',\n 'regex',\n 'pluginOptions',\n];\n\nexport default validationsToOmit;\n","import React, { memo, useMemo } from 'react';\n\nimport { GenericInput, NotAllowedInput, useLibrary } from '@strapi/helper-plugin';\nimport get from 'lodash/get';\nimport isEqual from 'lodash/isEqual';\nimport omit from 'lodash/omit';\nimport take from 'lodash/take';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { useContentTypeLayout } from '../../hooks';\nimport { getFieldName } from '../../utils';\nimport { BlocksInput } from '../BlocksInput/BlocksInput';\nimport { InputUID } from '../InputUID';\nimport { RelationInputDataManager } from '../RelationInputDataManager';\nimport Wysiwyg from '../Wysiwyg';\n\nimport { connect, generateOptions, getInputType, select, VALIDATIONS_TO_OMIT } from './utils';\n\nfunction Inputs({\n allowedFields,\n componentUid,\n fieldSchema,\n formErrors,\n isCreatingEntry,\n keys,\n labelAction,\n metadatas,\n onChange,\n readableFields,\n shouldNotRunValidations,\n queryInfos,\n value,\n size,\n customFieldInputs,\n}) {\n const { fields } = useLibrary();\n const { formatMessage } = useIntl();\n const { contentType: currentContentTypeLayout } = useContentTypeLayout();\n\n const disabled = useMemo(() => !get(metadatas, 'editable', true), [metadatas]);\n const { type, customField: customFieldUid } = fieldSchema;\n const error = get(formErrors, [keys], null);\n\n const fieldName = useMemo(() => {\n return getFieldName(keys);\n }, [keys]);\n\n const validations = useMemo(() => {\n const inputValidations = omit(\n fieldSchema,\n shouldNotRunValidations\n ? [...VALIDATIONS_TO_OMIT, 'required', 'minLength']\n : VALIDATIONS_TO_OMIT\n );\n\n const regexpString = fieldSchema.regex || null;\n\n if (regexpString) {\n const regexp = new RegExp(regexpString);\n\n if (regexp) {\n inputValidations.regex = regexp;\n }\n }\n\n return inputValidations;\n }, [fieldSchema, shouldNotRunValidations]);\n\n const isRequired = useMemo(() => get(validations, ['required'], false), [validations]);\n\n const isChildOfDynamicZone = useMemo(() => {\n const attributes = get(currentContentTypeLayout, ['attributes'], {});\n const foundAttributeType = get(attributes, [fieldName[0], 'type'], null);\n\n return foundAttributeType === 'dynamiczone';\n }, [currentContentTypeLayout, fieldName]);\n\n const inputType = getInputType(type);\n\n const inputValue = type === 'media' && !value ? [] : value;\n\n const isUserAllowedToEditField = useMemo(() => {\n const joinedName = fieldName.join('.');\n\n if (allowedFields.includes(joinedName)) {\n return true;\n }\n\n if (isChildOfDynamicZone) {\n return allowedFields.includes(fieldName[0]);\n }\n\n const isChildOfComponent = fieldName.length > 1;\n\n if (isChildOfComponent) {\n const parentFieldName = take(fieldName, fieldName.length - 1).join('.');\n\n return allowedFields.includes(parentFieldName);\n }\n\n return false;\n }, [allowedFields, fieldName, isChildOfDynamicZone]);\n\n const isUserAllowedToReadField = useMemo(() => {\n const joinedName = fieldName.join('.');\n\n if (readableFields.includes(joinedName)) {\n return true;\n }\n\n if (isChildOfDynamicZone) {\n return readableFields.includes(fieldName[0]);\n }\n\n const isChildOfComponent = fieldName.length > 1;\n\n if (isChildOfComponent) {\n const parentFieldName = take(fieldName, fieldName.length - 1).join('.');\n\n return readableFields.includes(parentFieldName);\n }\n\n return false;\n }, [readableFields, fieldName, isChildOfDynamicZone]);\n\n const shouldDisplayNotAllowedInput = useMemo(() => {\n return isUserAllowedToReadField || isUserAllowedToEditField;\n }, [isUserAllowedToEditField, isUserAllowedToReadField]);\n\n const shouldDisableField = useMemo(() => {\n if (!isCreatingEntry) {\n const doesNotHaveRight = isUserAllowedToReadField && !isUserAllowedToEditField;\n\n if (doesNotHaveRight) {\n return true;\n }\n\n return disabled;\n }\n\n return disabled;\n }, [disabled, isCreatingEntry, isUserAllowedToEditField, isUserAllowedToReadField]);\n\n const options = useMemo(\n () => generateOptions(fieldSchema.enum || [], isRequired),\n [fieldSchema, isRequired]\n );\n\n const { label, description, placeholder, visible } = metadatas;\n\n if (visible === false) {\n return null;\n }\n\n if (!shouldDisplayNotAllowedInput) {\n return (\n <NotAllowedInput\n description={description ? { id: description, defaultMessage: description } : null}\n intlLabel={{ id: label, defaultMessage: label }}\n labelAction={labelAction}\n error={error && formatMessage(error)}\n name={keys}\n required={isRequired}\n />\n );\n }\n\n if (type === 'relation') {\n return (\n <RelationInputDataManager\n {...metadatas}\n {...fieldSchema}\n componentUid={componentUid}\n description={\n metadatas.description\n ? formatMessage({\n id: metadatas.description,\n defaultMessage: metadatas.description,\n })\n : undefined\n }\n intlLabel={{\n id: metadatas.label,\n defaultMessage: metadatas.label,\n }}\n labelAction={labelAction}\n isUserAllowedToEditField={isUserAllowedToEditField}\n isUserAllowedToReadField={isUserAllowedToReadField}\n name={keys}\n placeholder={\n metadatas.placeholder\n ? {\n id: metadatas.placeholder,\n defaultMessage: metadatas.placeholder,\n }\n : null\n }\n queryInfos={queryInfos}\n size={size}\n value={value}\n error={error && formatMessage(error)}\n />\n );\n }\n\n const customInputs = {\n uid: InputUID,\n media: fields.media,\n wysiwyg: Wysiwyg,\n blocks: BlocksInput,\n ...fields,\n ...customFieldInputs,\n };\n\n return (\n <GenericInput\n attribute={fieldSchema}\n autoComplete=\"new-password\"\n intlLabel={{ id: label, defaultMessage: label }}\n // in case the default value of the boolean is null, attribute.default doesn't exist\n isNullable={inputType === 'bool' && [null, undefined].includes(fieldSchema.default)}\n description={description ? { id: description, defaultMessage: description } : null}\n disabled={shouldDisableField}\n error={error}\n labelAction={labelAction}\n contentTypeUID={currentContentTypeLayout.uid}\n customInputs={customInputs}\n multiple={fieldSchema.multiple || false}\n name={keys}\n onChange={onChange}\n options={options}\n placeholder={placeholder ? { id: placeholder, defaultMessage: placeholder } : null}\n required={fieldSchema.required || false}\n step={getStep(type)}\n type={customFieldUid || inputType}\n // validations={validations}\n value={inputValue}\n withDefaultValue={false}\n />\n );\n}\n\nInputs.defaultProps = {\n componentUid: undefined,\n formErrors: {},\n labelAction: undefined,\n size: undefined,\n value: null,\n queryInfos: {},\n customFieldInputs: {},\n};\n\nInputs.propTypes = {\n allowedFields: PropTypes.array.isRequired,\n componentUid: PropTypes.string,\n fieldSchema: PropTypes.object.isRequired,\n formErrors: PropTypes.object,\n keys: PropTypes.string.isRequired,\n isCreatingEntry: PropTypes.bool.isRequired,\n labelAction: PropTypes.element,\n metadatas: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n readableFields: PropTypes.array.isRequired,\n size: PropTypes.number,\n shouldNotRunValidations: PropTypes.bool.isRequired,\n value: PropTypes.any,\n queryInfos: PropTypes.shape({\n containsKey: PropTypes.string,\n defaultParams: PropTypes.object,\n endPoint: PropTypes.string,\n }),\n customFieldInputs: PropTypes.object,\n};\n\nconst getStep = (type) => {\n switch (type) {\n case 'float':\n case 'decimal':\n return 0.01;\n default:\n return 1;\n }\n};\n\nconst Memoized = memo(Inputs, isEqual);\n\nexport default connect(Memoized, select);\n","/* eslint-disable react/no-array-index-key */\n/* eslint-disable import/no-cycle */\n\nimport React, { useMemo } from 'react';\n\nimport { Box, Flex, Grid, GridItem } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\n\nimport { useContentTypeLayout } from '../../hooks';\nimport useLazyComponents from '../../hooks/useLazyComponents';\nimport FieldComponent from '../FieldComponent';\nimport Inputs from '../Inputs';\n\nconst NonRepeatableComponent = ({ componentUid, isFromDynamicZone, isNested, name }) => {\n const { getComponentLayout } = useContentTypeLayout();\n const componentLayoutData = useMemo(\n () => getComponentLayout(componentUid),\n [componentUid, getComponentLayout]\n );\n const fields = componentLayoutData.layouts.edit;\n\n const { lazyComponentStore } = useLazyComponents();\n\n return (\n <Box\n background={isFromDynamicZone ? '' : 'neutral100'}\n paddingLeft={6}\n paddingRight={6}\n paddingTop={6}\n paddingBottom={6}\n hasRadius={isNested}\n borderColor={isNested ? 'neutral200' : ''}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {fields.map((fieldRow, key) => {\n return (\n <Grid gap={4} key={key}>\n {fieldRow.map(({ name: fieldName, size, metadatas, fieldSchema, queryInfos }) => {\n const isComponent = fieldSchema.type === 'component';\n const keys = `${name}.${fieldName}`;\n\n if (isComponent) {\n const compoUid = fieldSchema.component;\n\n return (\n <GridItem col={size} s={12} xs={12} key={fieldName}>\n <FieldComponent\n componentUid={compoUid}\n intlLabel={{\n id: metadatas.label,\n defaultMessage: metadatas.label,\n }}\n isNested\n isRepeatable={fieldSchema.repeatable}\n max={fieldSchema.max}\n min={fieldSchema.min}\n name={keys}\n required={fieldSchema.required || false}\n />\n </GridItem>\n );\n }\n\n return (\n <GridItem col={size} key={fieldName} s={12} xs={12}>\n <Inputs\n componentUid={componentUid}\n keys={keys}\n fieldSchema={fieldSchema}\n metadatas={metadatas}\n queryInfos={queryInfos}\n size={size}\n customFieldInputs={lazyComponentStore}\n />\n </GridItem>\n );\n })}\n </Grid>\n );\n })}\n </Flex>\n </Box>\n );\n};\n\nNonRepeatableComponent.defaultProps = {\n isFromDynamicZone: false,\n isNested: false,\n};\n\nNonRepeatableComponent.propTypes = {\n componentUid: PropTypes.string.isRequired,\n isFromDynamicZone: PropTypes.bool,\n isNested: PropTypes.bool,\n name: PropTypes.string.isRequired,\n};\n\nexport default NonRepeatableComponent;\n","import React from 'react';\n\nimport { Box, KeyboardNavigable, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nexport const Footer = styled(Box)`\n overflow: hidden;\n border-bottom: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-right: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-left: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-radius: 0 0 ${({ theme }) => theme.borderRadius} ${({ theme }) => theme.borderRadius};\n`;\n\nexport const Content = styled(Box)`\n border-bottom: none;\n\n /* add the borders and make sure the top is transparent to avoid jumping with the hover effect */\n & > div > div {\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-top-color: transparent;\n }\n\n /* the top accordion _does_ need a border though */\n & > div:first-child > div {\n border-top: 1px solid ${({ theme }) => theme.colors.neutral200};\n }\n\n /* Reset all the border-radius' */\n & > div > div,\n & > div > div > div {\n border-radius: unset;\n }\n\n /* Give the border radius back to the first accordion */\n & > div:first-child > div,\n & > div:first-child > div > div {\n border-radius: ${({ theme }) => theme.borderRadius} ${({ theme }) => theme.borderRadius} 0 0;\n }\n\n & > div > div[data-strapi-expanded='true'] {\n border: 1px solid ${({ theme }) => theme.colors.primary600};\n }\n`;\n\nexport const Group = ({ children, error }) => {\n const { formatMessage } = useIntl();\n\n return (\n <KeyboardNavigable attributeName=\"data-strapi-accordion-toggle\">\n {children}\n {error && (\n <Box paddingTop={1}>\n <Typography variant=\"pi\" textColor=\"danger600\">\n {formatMessage(\n { id: error.id, defaultMessage: error.defaultMessage },\n { ...error.values }\n )}\n </Typography>\n </Box>\n )}\n </KeyboardNavigable>\n );\n};\n\nGroup.defaultProps = {\n error: undefined,\n};\n\nGroup.propTypes = {\n children: PropTypes.node.isRequired,\n error: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n values: PropTypes.object,\n }),\n};\n","import React from 'react';\n\nimport styled from 'styled-components';\n\nconst StyledSpan = styled.span`\n display: block;\n background-color: ${({ theme }) => theme.colors.primary100};\n outline: 1px dashed ${({ theme }) => theme.colors.primary500};\n outline-offset: -1px;\n padding: ${({ theme }) => theme.spaces[6]};\n`;\n\nconst Preview = () => {\n return <StyledSpan padding={6} background=\"primary100\" />;\n};\n\nexport default Preview;\n","/* eslint-disable import/no-cycle */\nimport React, { memo, useEffect, useRef } from 'react';\n\nimport {\n Accordion,\n AccordionContent,\n AccordionToggle,\n Box,\n Flex,\n Grid,\n GridItem,\n IconButton,\n} from '@strapi/design-system';\nimport { useCMEditViewDataManager } from '@strapi/helper-plugin';\nimport { Drag, Trash } from '@strapi/icons';\nimport get from 'lodash/get';\nimport toString from 'lodash/toString';\nimport PropTypes from 'prop-types';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { useDragAndDrop } from '../../../hooks/useDragAndDrop';\nimport useLazyComponents from '../../../hooks/useLazyComponents';\nimport { composeRefs, getTrad, ItemTypes } from '../../../utils';\nimport FieldComponent from '../../FieldComponent';\nimport Inputs from '../../Inputs';\n\nimport Preview from './Preview';\n\nconst CustomIconButton = styled(IconButton)`\n background-color: transparent;\n\n svg {\n path {\n fill: ${({ theme, expanded }) =>\n expanded ? theme.colors.primary600 : theme.colors.neutral600};\n }\n }\n\n &:hover {\n svg {\n path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n }\n`;\n\nconst ActionsFlex = styled(Flex)`\n & .drag-handle {\n background: unset;\n\n svg {\n path {\n fill: ${({ theme, expanded }) => (expanded ? theme.colors.primary600 : undefined)};\n }\n }\n\n &:hover {\n svg {\n path {\n /* keeps the hover style of the accordion */\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n }\n }\n`;\n\n// Issues:\n// https://github.com/react-dnd/react-dnd/issues/1368\n// https://github.com/frontend-collective/react-sortable-tree/issues/490\n\nconst DraggedItem = ({\n componentFieldName,\n componentUid,\n fields,\n index,\n isOpen,\n isReadOnly,\n mainField,\n moveComponentField,\n onClickToggle,\n toggleCollapses,\n onGrabItem,\n onDropItem,\n onCancel,\n}) => {\n const { modifiedData, removeRepeatableField, triggerFormValidation } = useCMEditViewDataManager();\n\n const displayedValue = toString(\n get(modifiedData, [...componentFieldName.split('.'), mainField], '')\n );\n const accordionRef = useRef(null);\n const { formatMessage } = useIntl();\n\n /**\n * The last item in the fieldName array will be the index of this component.\n * Drag and drop should be isolated to the parent component so nested repeatable\n * components are not affected by the drag and drop of the parent component in\n * their own re-ordering context.\n */\n const componentKey = componentFieldName.split('.').slice(0, -1).join('.');\n\n const [{ handlerId, isDragging, handleKeyDown }, boxRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop(!isReadOnly, {\n type: `${ItemTypes.COMPONENT}_${componentKey}`,\n index,\n item: {\n displayedValue,\n },\n onMoveItem: moveComponentField,\n onStart() {\n // Close all collapses\n toggleCollapses();\n },\n onEnd() {\n // Update the errors\n triggerFormValidation();\n },\n onGrabItem,\n onDropItem,\n onCancel,\n });\n\n useEffect(() => {\n dragPreviewRef(getEmptyImage(), { captureDraggingState: false });\n }, [dragPreviewRef, index]);\n\n const composedAccordionRefs = composeRefs(accordionRef, dragRef);\n const composedBoxRefs = composeRefs(boxRef, dropRef);\n\n const { lazyComponentStore } = useLazyComponents();\n\n return (\n <Box ref={composedBoxRefs}>\n {isDragging ? (\n <Preview />\n ) : (\n <Accordion expanded={isOpen} onToggle={onClickToggle} id={componentFieldName} size=\"S\">\n <AccordionToggle\n action={\n isReadOnly ? null : (\n <ActionsFlex gap={0} expanded={isOpen}>\n <CustomIconButton\n expanded={isOpen}\n noBorder\n onClick={() => {\n removeRepeatableField(componentFieldName);\n toggleCollapses();\n }}\n label={formatMessage({\n id: getTrad('containers.Edit.delete'),\n defaultMessage: 'Delete',\n })}\n icon={<Trash />}\n />\n <IconButton\n className=\"drag-handle\"\n ref={composedAccordionRefs}\n forwardedAs=\"div\"\n role=\"button\"\n noBorder\n tabIndex={0}\n onClick={(e) => e.stopPropagation()}\n data-handler-id={handlerId}\n label={formatMessage({\n id: getTrad('components.DragHandle-label'),\n defaultMessage: 'Drag',\n })}\n onKeyDown={handleKeyDown}\n >\n <Drag />\n </IconButton>\n </ActionsFlex>\n )\n }\n title={displayedValue}\n togglePosition=\"left\"\n />\n <AccordionContent>\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n background=\"neutral100\"\n padding={6}\n gap={6}\n >\n {fields.map((fieldRow, key) => {\n return (\n // eslint-disable-next-line react/no-array-index-key\n <Grid gap={4} key={key}>\n {fieldRow.map(({ name, fieldSchema, metadatas, queryInfos, size }) => {\n const isComponent = fieldSchema.type === 'component';\n const keys = `${componentFieldName}.${name}`;\n\n if (isComponent) {\n const componentUid = fieldSchema.component;\n\n return (\n <GridItem col={size} s={12} xs={12} key={name}>\n <FieldComponent\n componentUid={componentUid}\n intlLabel={{\n id: metadatas.label,\n defaultMessage: metadatas.label,\n }}\n isRepeatable={fieldSchema.repeatable}\n isNested\n name={keys}\n max={fieldSchema.max}\n min={fieldSchema.min}\n required={fieldSchema.required}\n />\n </GridItem>\n );\n }\n\n return (\n <GridItem key={keys} col={size} s={12} xs={12}>\n <Inputs\n componentUid={componentUid}\n fieldSchema={fieldSchema}\n keys={keys}\n metadatas={metadatas}\n queryInfos={queryInfos}\n size={size}\n customFieldInputs={lazyComponentStore}\n />\n </GridItem>\n );\n })}\n </Grid>\n );\n })}\n </Flex>\n </AccordionContent>\n </Accordion>\n )}\n </Box>\n );\n};\n\nDraggedItem.defaultProps = {\n componentUid: undefined,\n fields: [],\n isReadOnly: false,\n isOpen: false,\n onGrabItem: undefined,\n onDropItem: undefined,\n onCancel: undefined,\n toggleCollapses() {},\n};\n\nDraggedItem.propTypes = {\n componentFieldName: PropTypes.string.isRequired,\n componentUid: PropTypes.string,\n fields: PropTypes.array,\n index: PropTypes.number.isRequired,\n isOpen: PropTypes.bool,\n isReadOnly: PropTypes.bool,\n mainField: PropTypes.string.isRequired,\n moveComponentField: PropTypes.func.isRequired,\n onGrabItem: PropTypes.func,\n onDropItem: PropTypes.func,\n onCancel: PropTypes.func,\n onClickToggle: PropTypes.func.isRequired,\n toggleCollapses: PropTypes.func,\n};\n\nexport default memo(DraggedItem);\n","export default function getComponentErrorKeys(name, formErrors = {}) {\n return Object.keys(formErrors)\n .filter((errorKey) => errorKey.startsWith(name))\n .map((errorKey) =>\n errorKey\n .split('.')\n .slice(0, name.split('.').length + 1)\n .join('.')\n );\n}\n","/* eslint-disable import/no-cycle */\nimport React, { memo, useEffect, useMemo, useState } from 'react';\n\nimport { Box, Flex, TextButton, VisuallyHidden } from '@strapi/design-system';\nimport { useCMEditViewDataManager, useNotification, useQuery } from '@strapi/helper-plugin';\nimport { Plus } from '@strapi/icons';\nimport get from 'lodash/get';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { useContentTypeLayout } from '../../hooks';\nimport { getMaxTempKey, getTrad } from '../../utils';\nimport ComponentInitializer from '../ComponentInitializer';\n\nimport * as Accordion from './components/Accordion';\nimport Component from './components/Component';\nimport getComponentErrorKeys from './utils/getComponentErrorKeys';\n\nconst TextButtonCustom = styled(TextButton)`\n height: 100%;\n width: 100%;\n border-radius: 0 0 4px 4px;\n display: flex;\n justify-content: center;\n span {\n font-weight: 600;\n font-size: 14px;\n }\n`;\n\nconst RepeatableComponent = ({\n componentUid,\n componentValue,\n componentValueLength,\n isReadOnly,\n max,\n min,\n name,\n}) => {\n const { addRepeatableComponentToField, formErrors, moveComponentField } =\n useCMEditViewDataManager();\n const toggleNotification = useNotification();\n const { formatMessage } = useIntl();\n const [collapseToOpen, setCollapseToOpen] = useState('');\n const [liveText, setLiveText] = useState('');\n const { getComponentLayout, components } = useContentTypeLayout();\n const componentLayoutData = useMemo(\n () => getComponentLayout(componentUid),\n [componentUid, getComponentLayout]\n );\n\n const search = useQuery();\n\n /**\n * Get the temp key of the component that has the field that is currently focussed\n * as defined by the `field` query param. We can then force this specific component\n * to be in it's \"open\" state.\n */\n const componentTmpKeyWithFocussedField = useMemo(() => {\n if (search.has('field')) {\n const field = search.get('field');\n\n const [, path] = field.split(`${name}.`);\n\n if (get(componentValue, path, undefined) !== undefined) {\n const subpaths = path.split('.');\n\n return get(componentValue, subpaths[0], undefined)?.__temp_key__;\n }\n }\n\n // eslint-disable-next-line consistent-return\n return undefined;\n }, [componentValue, search, name]);\n\n useEffect(() => {\n if (typeof componentTmpKeyWithFocussedField === 'number') {\n setCollapseToOpen(componentTmpKeyWithFocussedField);\n }\n }, [componentTmpKeyWithFocussedField]);\n\n const nextTempKey = useMemo(() => getMaxTempKey(componentValue || []) + 1, [componentValue]);\n\n const componentErrorKeys = getComponentErrorKeys(name, formErrors);\n\n const missingComponentsValue = min - componentValueLength;\n\n const hasMinError = get(formErrors, name, { id: '' }).id.includes('min');\n\n const toggleCollapses = () => {\n setCollapseToOpen('');\n };\n\n const handleClick = () => {\n if (!isReadOnly) {\n if (componentValueLength < max) {\n const shouldCheckErrors = hasMinError;\n\n addRepeatableComponentToField(name, componentLayoutData, components, shouldCheckErrors);\n\n setCollapseToOpen(nextTempKey);\n } else if (componentValueLength >= max) {\n toggleNotification({\n type: 'info',\n message: { id: getTrad('components.notification.info.maximum-requirement') },\n });\n }\n }\n };\n\n const handleMoveComponentField = (newIndex, currentIndex) => {\n setLiveText(\n formatMessage(\n {\n id: getTrad('dnd.reorder'),\n defaultMessage: '{item}, moved. New position in list: {position}.',\n },\n {\n item: `${name}.${currentIndex}`,\n position: getItemPos(newIndex),\n }\n )\n );\n\n moveComponentField({\n name,\n newIndex,\n currentIndex,\n });\n };\n\n const mainField = get(componentLayoutData, ['settings', 'mainField'], 'id');\n\n const handleToggle = (key) => () => {\n if (collapseToOpen === key) {\n setCollapseToOpen('');\n } else {\n setCollapseToOpen(key);\n }\n };\n\n /**\n *\n * @param {number} index\n * @returns {string}\n */\n const getItemPos = (index) => `${index + 1} of ${componentValueLength}`;\n\n const handleCancel = (index) => {\n setLiveText(\n formatMessage(\n {\n id: getTrad('dnd.cancel-item'),\n defaultMessage: '{item}, dropped. Re-order cancelled.',\n },\n {\n item: `${name}.${index}`,\n }\n )\n );\n };\n\n const handleGrabItem = (index) => {\n setLiveText(\n formatMessage(\n {\n id: getTrad('dnd.grab-item'),\n defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`,\n },\n {\n item: `${name}.${index}`,\n position: getItemPos(index),\n }\n )\n );\n };\n\n const handleDropItem = (index) => {\n setLiveText(\n formatMessage(\n {\n id: getTrad('dnd.drop-item'),\n defaultMessage: `{item}, dropped. Final position in list: {position}.`,\n },\n {\n item: `${name}.${index}`,\n position: getItemPos(index),\n }\n )\n );\n };\n\n let errorMessage = formErrors[name];\n\n if (hasMinError) {\n errorMessage = {\n id: getTrad('components.DynamicZone.missing-components'),\n defaultMessage:\n 'There {number, plural, =0 {are # missing components} one {is # missing component} other {are # missing components}}',\n values: { number: missingComponentsValue },\n };\n } else if (componentErrorKeys.some((error) => error.split('.').length > 1) && !hasMinError) {\n errorMessage = {\n id: getTrad('components.RepeatableComponent.error-message'),\n defaultMessage: 'The component(s) contain error(s)',\n };\n }\n\n if (componentValueLength === 0) {\n return (\n <ComponentInitializer error={errorMessage} isReadOnly={isReadOnly} onClick={handleClick} />\n );\n }\n\n const ariaDescriptionId = `${name}-item-instructions`;\n\n return (\n <Box hasRadius>\n <VisuallyHidden id={ariaDescriptionId}>\n {formatMessage({\n id: getTrad('dnd.instructions'),\n defaultMessage: `Press spacebar to grab and re-order`,\n })}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n <Accordion.Group error={errorMessage} ariaDescribedBy={ariaDescriptionId}>\n <Accordion.Content aria-describedby={ariaDescriptionId}>\n {componentValue.map(({ __temp_key__: key }, index) => (\n <Component\n componentFieldName={`${name}.${index}`}\n componentUid={componentUid}\n fields={componentLayoutData.layouts.edit}\n key={key}\n index={index}\n isOpen={collapseToOpen === key}\n isReadOnly={isReadOnly}\n mainField={mainField}\n moveComponentField={handleMoveComponentField}\n onClickToggle={handleToggle(key)}\n toggleCollapses={toggleCollapses}\n onCancel={handleCancel}\n onDropItem={handleDropItem}\n onGrabItem={handleGrabItem}\n />\n ))}\n </Accordion.Content>\n <Accordion.Footer>\n <Flex justifyContent=\"center\" height=\"48px\" background=\"neutral0\">\n <TextButtonCustom disabled={isReadOnly} onClick={handleClick} startIcon={<Plus />}>\n {formatMessage({\n id: getTrad('containers.EditView.add.new-entry'),\n defaultMessage: 'Add an entry',\n })}\n </TextButtonCustom>\n </Flex>\n </Accordion.Footer>\n </Accordion.Group>\n </Box>\n );\n};\n\nRepeatableComponent.defaultProps = {\n componentValue: null,\n componentValueLength: 0,\n isReadOnly: false,\n max: Infinity,\n min: 0,\n};\n\nRepeatableComponent.propTypes = {\n componentUid: PropTypes.string.isRequired,\n componentValue: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),\n componentValueLength: PropTypes.number,\n isReadOnly: PropTypes.bool,\n max: PropTypes.number,\n min: PropTypes.number,\n name: PropTypes.string.isRequired,\n};\n\nexport default memo(RepeatableComponent);\n\nexport { RepeatableComponent };\n","import React from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nconst LabelAction = styled(Box)`\n svg path {\n fill: ${({ theme }) => theme.colors.neutral500};\n }\n`;\n\nconst Label = ({\n intlLabel,\n id,\n labelAction,\n name,\n numberOfEntries,\n showNumberOfEntries,\n required,\n}) => {\n const { formatMessage } = useIntl();\n const label = intlLabel?.id ? formatMessage(intlLabel) : name;\n\n return (\n <Box paddingBottom={1}>\n <Flex>\n <Typography\n textColor=\"neutral800\"\n htmlFor={id || name}\n variant=\"pi\"\n fontWeight=\"bold\"\n as=\"label\"\n >\n {label}\n {showNumberOfEntries && <> ({numberOfEntries})</>}\n {required && <Typography textColor=\"danger600\">*</Typography>}\n </Typography>\n {labelAction && <LabelAction paddingLeft={1}>{labelAction}</LabelAction>}\n </Flex>\n </Box>\n );\n};\n\nLabel.defaultProps = {\n id: undefined,\n labelAction: undefined,\n numberOfEntries: 0,\n required: false,\n showNumberOfEntries: false,\n};\n\nLabel.propTypes = {\n id: PropTypes.string,\n intlLabel: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n values: PropTypes.object,\n }).isRequired,\n labelAction: PropTypes.element,\n name: PropTypes.string.isRequired,\n numberOfEntries: PropTypes.number,\n required: PropTypes.bool,\n showNumberOfEntries: PropTypes.bool,\n};\n\nexport default Label;\n","import React from 'react';\n\nfunction connect(WrappedComponent, select) {\n return (props) => {\n // eslint-disable-next-line react/prop-types\n const selectors = select(props);\n\n return <WrappedComponent {...props} {...selectors} />;\n };\n}\n\nexport default connect;\n","import { useMemo } from 'react';\n\nimport { useCMEditViewDataManager } from '@strapi/helper-plugin';\nimport get from 'lodash/get';\nimport take from 'lodash/take';\n\nimport { useContentTypeLayout } from '../../../hooks';\nimport { getFieldName } from '../../../utils';\n\nfunction useSelect({ isFromDynamicZone, name }) {\n const {\n addNonRepeatableComponentToField,\n createActionAllowedFields,\n isCreatingEntry,\n modifiedData,\n removeComponentFromField,\n readActionAllowedFields,\n updateActionAllowedFields,\n formErrors,\n } = useCMEditViewDataManager();\n const { contentType } = useContentTypeLayout();\n\n // This is used for the readonly mode when updating an entry\n const allDynamicZoneFields = useMemo(() => {\n const attributes = get(contentType, ['attributes'], {});\n\n const dynamicZoneFields = Object.keys(attributes).filter((attrName) => {\n return get(attributes, [attrName, 'type'], '') === 'dynamiczone';\n });\n\n return dynamicZoneFields;\n }, [contentType]);\n\n const allowedFields = useMemo(() => {\n return isCreatingEntry ? createActionAllowedFields : updateActionAllowedFields;\n }, [isCreatingEntry, createActionAllowedFields, updateActionAllowedFields]);\n\n const componentValue = get(modifiedData, name, null);\n const compoName = useMemo(() => {\n return getFieldName(name);\n }, [name]);\n\n const hasChildrenAllowedFields = useMemo(() => {\n if (isFromDynamicZone && isCreatingEntry) {\n return true;\n }\n\n const includedDynamicZoneFields = allowedFields.filter((name) => name === compoName[0]);\n\n if (includedDynamicZoneFields.length > 0) {\n return true;\n }\n\n const relatedChildrenAllowedFields = allowedFields\n .map((fieldName) => {\n return fieldName.split('.');\n })\n .filter((fieldName) => {\n if (fieldName.length < compoName.length) {\n return false;\n }\n\n const joined = take(fieldName, compoName.length).join('.');\n\n return joined === compoName.join('.');\n });\n\n return relatedChildrenAllowedFields.length > 0;\n }, [isFromDynamicZone, isCreatingEntry, allowedFields, compoName]);\n\n // This is used only when updating an entry\n const hasChildrenReadableFields = useMemo(() => {\n if (isFromDynamicZone) {\n return true;\n }\n if (allDynamicZoneFields.includes(compoName[0])) {\n return true;\n }\n\n const allowedFields = isCreatingEntry ? [] : readActionAllowedFields;\n\n const relatedChildrenAllowedFields = allowedFields\n .map((fieldName) => {\n return fieldName.split('.');\n })\n .filter((fieldName) => {\n if (fieldName.length < compoName.length) {\n return false;\n }\n\n const joined = take(fieldName, compoName.length).join('.');\n\n return joined === compoName.join('.');\n });\n\n return relatedChildrenAllowedFields.length > 0;\n }, [\n isFromDynamicZone,\n allDynamicZoneFields,\n compoName,\n isCreatingEntry,\n readActionAllowedFields,\n ]);\n\n const isReadOnly = useMemo(() => {\n if (isCreatingEntry) {\n return false;\n }\n\n if (hasChildrenAllowedFields) {\n return false;\n }\n\n return hasChildrenReadableFields;\n }, [hasChildrenAllowedFields, hasChildrenReadableFields, isCreatingEntry]);\n\n return {\n addNonRepeatableComponentToField,\n formErrors,\n hasChildrenAllowedFields,\n hasChildrenReadableFields,\n isCreatingEntry,\n isReadOnly,\n removeComponentFromField,\n componentValue,\n };\n}\n\nexport default useSelect;\n","/* eslint-disable import/no-cycle */\nimport React, { memo, useMemo } from 'react';\n\nimport { Box, Flex, IconButton } from '@strapi/design-system';\nimport { NotAllowedInput } from '@strapi/helper-plugin';\nimport { Trash } from '@strapi/icons';\nimport isEqual from 'lodash/isEqual';\nimport size from 'lodash/size';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { useContentTypeLayout } from '../../hooks';\nimport { getTrad } from '../../utils';\nimport ComponentInitializer from '../ComponentInitializer';\nimport NonRepeatableComponent from '../NonRepeatableComponent';\nimport RepeatableComponent from '../RepeatableComponent';\n\nimport Label from './Label';\nimport connect from './utils/connect';\nimport select from './utils/select';\n\nconst FieldComponent = ({\n addNonRepeatableComponentToField,\n componentUid,\n // TODO add error state\n // formErrors,\n intlLabel,\n isCreatingEntry,\n isFromDynamicZone,\n isRepeatable,\n isNested,\n labelAction,\n max,\n min,\n name,\n // Passed thanks to the connect function\n hasChildrenAllowedFields,\n hasChildrenReadableFields,\n isReadOnly,\n componentValue,\n removeComponentFromField,\n required,\n}) => {\n const { formatMessage } = useIntl();\n const componentValueLength = size(componentValue);\n const isInitialized = componentValue !== null || isFromDynamicZone;\n const showResetComponent =\n !isRepeatable && isInitialized && !isFromDynamicZone && hasChildrenAllowedFields;\n\n const { getComponentLayout, components } = useContentTypeLayout();\n const componentLayoutData = useMemo(\n () => getComponentLayout(componentUid),\n [componentUid, getComponentLayout]\n );\n\n if (!hasChildrenAllowedFields && isCreatingEntry) {\n return <NotAllowedInput labelAction={labelAction} intlLabel={intlLabel} name={name} />;\n }\n\n if (!hasChildrenAllowedFields && !isCreatingEntry && !hasChildrenReadableFields) {\n return <NotAllowedInput labelAction={labelAction} intlLabel={intlLabel} name={name} />;\n }\n\n const handleClickAddNonRepeatableComponentToField = () => {\n addNonRepeatableComponentToField(name, componentLayoutData, components);\n };\n\n return (\n <Box>\n <Flex justifyContent=\"space-between\">\n {intlLabel && (\n <Label\n intlLabel={intlLabel}\n labelAction={labelAction}\n name={name}\n numberOfEntries={componentValueLength}\n showNumberOfEntries={isRepeatable}\n required={required}\n />\n )}\n\n {showResetComponent && (\n <IconButton\n label={formatMessage({\n id: getTrad('components.reset-entry'),\n defaultMessage: 'Reset Entry',\n })}\n icon={<Trash />}\n noBorder\n onClick={() => {\n removeComponentFromField(name, componentUid);\n }}\n />\n )}\n </Flex>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n {!isRepeatable && !isInitialized && (\n <ComponentInitializer\n isReadOnly={isReadOnly}\n onClick={handleClickAddNonRepeatableComponentToField}\n />\n )}\n {!isRepeatable && isInitialized && (\n <NonRepeatableComponent\n componentUid={componentUid}\n isFromDynamicZone={isFromDynamicZone}\n isNested={isNested}\n name={name}\n />\n )}\n {isRepeatable && (\n <RepeatableComponent\n componentValue={componentValue}\n componentValueLength={componentValueLength}\n componentUid={componentUid}\n isReadOnly={isReadOnly}\n max={max}\n min={min}\n name={name}\n />\n )}\n </Flex>\n </Box>\n );\n};\n\nFieldComponent.defaultProps = {\n componentValue: null,\n hasChildrenAllowedFields: false,\n hasChildrenReadableFields: false,\n intlLabel: undefined,\n isFromDynamicZone: false,\n isReadOnly: false,\n isRepeatable: false,\n isNested: false,\n labelAction: undefined,\n max: Infinity,\n min: -Infinity,\n required: false,\n};\n\nFieldComponent.propTypes = {\n addNonRepeatableComponentToField: PropTypes.func.isRequired,\n componentUid: PropTypes.string.isRequired,\n componentValue: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),\n hasChildrenAllowedFields: PropTypes.bool,\n hasChildrenReadableFields: PropTypes.bool,\n isCreatingEntry: PropTypes.bool.isRequired,\n isFromDynamicZone: PropTypes.bool,\n isReadOnly: PropTypes.bool,\n isRepeatable: PropTypes.bool,\n isNested: PropTypes.bool,\n intlLabel: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n values: PropTypes.object,\n }),\n labelAction: PropTypes.element,\n max: PropTypes.number,\n min: PropTypes.number,\n name: PropTypes.string.isRequired,\n removeComponentFromField: PropTypes.func.isRequired,\n required: PropTypes.bool,\n};\n\nconst Memoized = memo(FieldComponent, isEqual);\n\nexport default connect(Memoized, select);\n","import React, { useEffect, useMemo, useState } from 'react';\n\nimport {\n Accordion,\n AccordionContent,\n AccordionToggle,\n Box,\n Flex,\n IconButton,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Menu, MenuItem } from '@strapi/design-system/v2';\nimport { useCMEditViewDataManager } from '@strapi/helper-plugin';\nimport { Drag, More, Trash } from '@strapi/icons';\nimport get from 'lodash/get';\nimport PropTypes from 'prop-types';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { useContentTypeLayout, useDragAndDrop } from '../../../hooks';\nimport { composeRefs, getTrad, ItemTypes } from '../../../utils';\nimport { ComponentIcon } from '../../ComponentIcon';\nimport FieldComponent from '../../FieldComponent';\n\nexport const DynamicComponent = ({\n componentUid,\n formErrors,\n index,\n isFieldAllowed,\n name,\n onRemoveComponentClick,\n onMoveComponent,\n onGrabItem,\n onDropItem,\n onCancel,\n dynamicComponentsByCategory,\n onAddComponent,\n}) => {\n const [isOpen, setIsOpen] = useState(true);\n const { formatMessage } = useIntl();\n const { getComponentLayout } = useContentTypeLayout();\n const { modifiedData } = useCMEditViewDataManager();\n const { icon, friendlyName, mainValue } = useMemo(() => {\n const componentLayoutData = getComponentLayout(componentUid);\n\n const {\n info: { icon, displayName },\n } = componentLayoutData;\n\n const mainFieldKey = get(componentLayoutData, ['settings', 'mainField'], 'id');\n\n const mainField = get(modifiedData, [name, index, mainFieldKey]) ?? '';\n\n const displayedValue = mainFieldKey === 'id' ? '' : String(mainField).trim();\n\n const mainValue = displayedValue.length > 0 ? ` - ${displayedValue}` : displayedValue;\n\n return { friendlyName: displayName, icon, mainValue };\n }, [componentUid, getComponentLayout, modifiedData, name, index]);\n\n const fieldsErrors = Object.keys(formErrors).filter((errorKey) => {\n const errorKeysArray = errorKey.split('.');\n\n if (`${errorKeysArray[0]}.${errorKeysArray[1]}` === `${name}.${index}`) {\n return true;\n }\n\n return false;\n });\n\n let errorMessage;\n\n if (fieldsErrors.length > 0) {\n errorMessage = formatMessage({\n id: getTrad('components.DynamicZone.error-message'),\n defaultMessage: 'The component contains error(s)',\n });\n }\n\n const handleToggle = () => {\n setIsOpen((s) => !s);\n };\n\n const [{ handlerId, isDragging, handleKeyDown }, boxRef, dropRef, dragRef, dragPreviewRef] =\n useDragAndDrop(isFieldAllowed, {\n type: `${ItemTypes.DYNAMIC_ZONE}_${name}`,\n index,\n item: {\n displayedValue: `${friendlyName}${mainValue}`,\n icon,\n },\n onMoveItem: onMoveComponent,\n onGrabItem,\n onDropItem,\n onCancel,\n });\n\n useEffect(() => {\n dragPreviewRef(getEmptyImage(), { captureDraggingState: false });\n }, [dragPreviewRef, index]);\n\n const composedBoxRefs = composeRefs(boxRef, dropRef);\n\n const accordionActions = !isFieldAllowed ? null : (\n <ActionsFlex gap={0} expanded={isOpen}>\n <IconButtonCustom\n noBorder\n label={formatMessage(\n {\n id: getTrad('components.DynamicZone.delete-label'),\n defaultMessage: 'Delete {name}',\n },\n { name: friendlyName }\n )}\n onClick={onRemoveComponentClick}\n >\n <Trash />\n </IconButtonCustom>\n <IconButton\n forwardedAs=\"div\"\n role=\"button\"\n noBorder\n tabIndex={0}\n onClick={(e) => e.stopPropagation()}\n data-handler-id={handlerId}\n ref={dragRef}\n label={formatMessage({\n id: getTrad('components.DragHandle-label'),\n defaultMessage: 'Drag',\n })}\n onKeyDown={handleKeyDown}\n >\n <Drag />\n </IconButton>\n <Menu.Root>\n <Menu.Trigger size=\"S\" endIcon={null} paddingLeft={2} paddingRight={2}>\n <More aria-hidden focusable={false} />\n <VisuallyHidden as=\"span\">\n {formatMessage({\n id: getTrad('components.DynamicZone.more-actions'),\n defaultMessage: 'More actions',\n })}\n </VisuallyHidden>\n </Menu.Trigger>\n <Menu.Content>\n <Menu.SubRoot>\n <Menu.SubTrigger>\n {formatMessage({\n id: getTrad('components.DynamicZone.add-item-above'),\n defaultMessage: 'Add component above',\n })}\n </Menu.SubTrigger>\n <Menu.SubContent>\n {Object.entries(dynamicComponentsByCategory).map(([category, components]) => (\n <React.Fragment key={category}>\n <Menu.Label>{category}</Menu.Label>\n {components.map(({ componentUid, info: { displayName } }) => (\n <MenuItem\n key={componentUid}\n onSelect={() => onAddComponent(componentUid, index)}\n >\n {displayName}\n </MenuItem>\n ))}\n </React.Fragment>\n ))}\n </Menu.SubContent>\n </Menu.SubRoot>\n <Menu.SubRoot>\n <Menu.SubTrigger>\n {formatMessage({\n id: getTrad('components.DynamicZone.add-item-below'),\n defaultMessage: 'Add component below',\n })}\n </Menu.SubTrigger>\n <Menu.SubContent>\n {Object.entries(dynamicComponentsByCategory).map(([category, components]) => (\n <React.Fragment key={category}>\n <Menu.Label>{category}</Menu.Label>\n {components.map(({ componentUid, info: { displayName } }) => (\n <MenuItem\n key={componentUid}\n onSelect={() => onAddComponent(componentUid, index + 1)}\n >\n {displayName}\n </MenuItem>\n ))}\n </React.Fragment>\n ))}\n </Menu.SubContent>\n </Menu.SubRoot>\n </Menu.Content>\n </Menu.Root>\n </ActionsFlex>\n );\n\n return (\n <ComponentContainer as=\"li\" width=\"100%\">\n <Flex justifyContent=\"center\">\n <Rectangle background=\"neutral200\" />\n </Flex>\n <StyledBox ref={composedBoxRefs} hasRadius>\n {isDragging ? (\n <Preview padding={6} background=\"primary100\" />\n ) : (\n <Accordion expanded={isOpen} onToggle={handleToggle} size=\"S\" error={errorMessage}>\n <AccordionToggle\n startIcon={<ComponentIcon icon={icon} showBackground={false} size=\"S\" />}\n action={accordionActions}\n title={`${friendlyName}${mainValue}`}\n togglePosition=\"left\"\n />\n <AccordionContent>\n <AccordionContentRadius background=\"neutral0\">\n <FieldComponent\n componentUid={componentUid}\n icon={icon}\n name={`${name}.${index}`}\n isFromDynamicZone\n />\n </AccordionContentRadius>\n </AccordionContent>\n </Accordion>\n )}\n </StyledBox>\n </ComponentContainer>\n );\n};\n\nconst ActionsFlex = styled(Flex)`\n /* \n we need to remove the background from the button but we can't \n wrap the element in styled because it breaks the forwardedAs which\n we need for drag handler to work on firefox\n */\n div[role='button'] {\n background: transparent;\n }\n`;\n\nconst IconButtonCustom = styled(IconButton)`\n background-color: transparent;\n\n svg path {\n fill: ${({ theme, expanded }) =>\n expanded ? theme.colors.primary600 : theme.colors.neutral600};\n }\n`;\n\n// TODO: Delete once https://github.com/strapi/design-system/pull/858\n// is merged and released.\nconst StyledBox = styled(Box)`\n > div:first-child {\n box-shadow: ${({ theme }) => theme.shadows.tableShadow};\n }\n`;\n\nconst AccordionContentRadius = styled(Box)`\n border-radius: 0 0 ${({ theme }) => theme.spaces[1]} ${({ theme }) => theme.spaces[1]};\n`;\n\nconst Rectangle = styled(Box)`\n width: ${({ theme }) => theme.spaces[2]};\n height: ${({ theme }) => theme.spaces[4]};\n`;\n\nconst Preview = styled.span`\n display: block;\n background-color: ${({ theme }) => theme.colors.primary100};\n outline: 1px dashed ${({ theme }) => theme.colors.primary500};\n outline-offset: -1px;\n padding: ${({ theme }) => theme.spaces[6]};\n`;\n\nconst ComponentContainer = styled(Box)`\n list-style: none;\n padding: 0;\n margin: 0;\n`;\n\nDynamicComponent.defaultProps = {\n dynamicComponentsByCategory: {},\n formErrors: {},\n index: 0,\n isFieldAllowed: true,\n onAddComponent: undefined,\n onGrabItem: undefined,\n onDropItem: undefined,\n onCancel: undefined,\n};\n\nDynamicComponent.propTypes = {\n componentUid: PropTypes.string.isRequired,\n dynamicComponentsByCategory: PropTypes.shape({\n components: PropTypes.arrayOf(\n PropTypes.shape({\n componentUid: PropTypes.string.isRequired,\n info: PropTypes.object,\n })\n ),\n }),\n formErrors: PropTypes.object,\n index: PropTypes.number,\n isFieldAllowed: PropTypes.bool,\n name: PropTypes.string.isRequired,\n onAddComponent: PropTypes.func,\n onGrabItem: PropTypes.func,\n onDropItem: PropTypes.func,\n onCancel: PropTypes.func,\n onMoveComponent: PropTypes.func.isRequired,\n onRemoveComponentClick: PropTypes.func.isRequired,\n};\n","/**\n *\n * DzLabel\n *\n */\n\nimport React from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nexport const DynamicZoneLabel = ({\n label,\n labelAction,\n name,\n numberOfComponents,\n required,\n intlDescription,\n}) => {\n const { formatMessage } = useIntl();\n const intlLabel = formatMessage({ id: label || name, defaultMessage: label || name });\n\n return (\n <Flex justifyContent=\"center\">\n <Box\n paddingTop={3}\n paddingBottom={3}\n paddingRight={4}\n paddingLeft={4}\n borderRadius=\"26px\"\n background=\"neutral0\"\n shadow=\"filterShadow\"\n color=\"neutral500\"\n >\n <Flex direction=\"column\" justifyContent=\"center\">\n <Flex maxWidth={pxToRem(356)}>\n <Typography variant=\"pi\" textColor=\"neutral600\" fontWeight=\"bold\" ellipsis>\n {intlLabel} \n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral600\" fontWeight=\"bold\">\n ({numberOfComponents})\n </Typography>\n {required && <Typography textColor=\"danger600\">*</Typography>}\n {labelAction && <Box paddingLeft={1}>{labelAction}</Box>}\n </Flex>\n {intlDescription && (\n <Box paddingTop={1} maxWidth={pxToRem(356)}>\n <Typography variant=\"pi\" textColor=\"neutral600\" ellipsis>\n {formatMessage(intlDescription)}\n </Typography>\n </Box>\n )}\n </Flex>\n </Box>\n </Flex>\n );\n};\n\nDynamicZoneLabel.defaultProps = {\n intlDescription: undefined,\n label: '',\n labelAction: undefined,\n numberOfComponents: 0,\n required: false,\n};\n\nDynamicZoneLabel.propTypes = {\n intlDescription: PropTypes.shape({\n id: PropTypes.string.isRequired,\n defaultMessage: PropTypes.string.isRequired,\n }),\n label: PropTypes.string,\n labelAction: PropTypes.element,\n name: PropTypes.string.isRequired,\n numberOfComponents: PropTypes.number,\n required: PropTypes.bool,\n};\n","import React, { useMemo, useState } from 'react';\n\nimport { Box, Flex, VisuallyHidden } from '@strapi/design-system';\nimport { NotAllowedInput, useCMEditViewDataManager, useNotification } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { useContentTypeLayout } from '../../hooks';\nimport { getTrad } from '../../utils';\n\nimport { AddComponentButton } from './components/AddComponentButton';\nimport { ComponentPicker } from './components/ComponentPicker';\nimport { DynamicComponent } from './components/DynamicComponent';\nimport { DynamicZoneLabel } from './components/DynamicZoneLabel';\n\nconst DynamicZone = ({ name, labelAction, fieldSchema, metadatas }) => {\n // We cannot use the default props here\n const { max = Infinity, min = -Infinity, components = [], required = false } = fieldSchema;\n\n const [addComponentIsOpen, setAddComponentIsOpen] = useState(false);\n const [liveText, setLiveText] = useState('');\n\n const {\n addComponentToDynamicZone,\n createActionAllowedFields,\n isCreatingEntry,\n formErrors,\n modifiedData,\n moveComponentField,\n removeComponentFromDynamicZone,\n readActionAllowedFields,\n updateActionAllowedFields,\n } = useCMEditViewDataManager();\n\n const dynamicDisplayedComponents = useMemo(\n () =>\n (modifiedData?.[name] ?? []).map((data) => {\n return {\n componentUid: data.__component,\n id: data.id ?? data.__temp_key__,\n };\n }),\n [modifiedData, name]\n );\n\n const { getComponentLayout, components: allComponents } = useContentTypeLayout();\n\n /**\n * @type {Record<string, Array<{category: string; info: unknown, attributes: Record<string, unknown>}>>}\n */\n const dynamicComponentsByCategory = useMemo(() => {\n return components.reduce((acc, componentUid) => {\n const { category, info, attributes } = getComponentLayout(componentUid);\n const component = { componentUid, info, attributes };\n\n if (!acc[category]) {\n acc[category] = [];\n }\n\n acc[category] = [...acc[category], component];\n\n return acc;\n }, {});\n }, [components, getComponentLayout]);\n\n const { formatMessage } = useIntl();\n\n const toggleNotification = useNotification();\n\n const isFieldAllowed = useMemo(() => {\n const allowedFields = isCreatingEntry ? createActionAllowedFields : updateActionAllowedFields;\n\n return allowedFields.includes(name);\n }, [name, isCreatingEntry, createActionAllowedFields, updateActionAllowedFields]);\n\n const isFieldReadable = useMemo(() => {\n const allowedFields = isCreatingEntry ? [] : readActionAllowedFields;\n\n return allowedFields.includes(name);\n }, [name, isCreatingEntry, readActionAllowedFields]);\n\n const dynamicDisplayedComponentsLength = dynamicDisplayedComponents.length;\n const intlDescription = metadatas.description\n ? { id: metadatas.description, defaultMessage: metadatas.description }\n : null;\n\n const dynamicZoneError = formErrors[name];\n\n const missingComponentNumber = min - dynamicDisplayedComponentsLength;\n const hasError = !!dynamicZoneError;\n\n const handleAddComponent = (componentUid, position) => {\n setAddComponentIsOpen(false);\n\n const componentLayoutData = getComponentLayout(componentUid);\n\n /**\n * You have to pass _every component_ because the EditViewDataManager is not part of redux\n * and you could have a dynamic component option that contains a component that is not part\n * of the former list. Therefore it's schema is inaccessible leading to a crash.\n */\n addComponentToDynamicZone(name, componentLayoutData, allComponents, hasError, position);\n };\n\n const handleClickOpenPicker = () => {\n if (dynamicDisplayedComponentsLength < max) {\n setAddComponentIsOpen((prev) => !prev);\n } else {\n toggleNotification({\n type: 'info',\n message: { id: getTrad('components.notification.info.maximum-requirement') },\n });\n }\n };\n\n const handleMoveComponent = (newIndex, currentIndex) => {\n setLiveText(\n formatMessage(\n {\n id: getTrad('dnd.reorder'),\n defaultMessage: '{item}, moved. New position in list: {position}.',\n },\n {\n item: `${name}.${currentIndex}`,\n position: getItemPos(newIndex),\n }\n )\n );\n\n moveComponentField({\n name,\n newIndex,\n currentIndex,\n });\n };\n\n /**\n *\n * @param {number} index\n * @returns {string}\n */\n const getItemPos = (index) => `${index + 1} of ${dynamicDisplayedComponents.length}`;\n\n const handleCancel = (index) => {\n setLiveText(\n formatMessage(\n {\n id: getTrad('dnd.cancel-item'),\n defaultMessage: '{item}, dropped. Re-order cancelled.',\n },\n {\n item: `${name}.${index}`,\n }\n )\n );\n };\n\n const handleGrabItem = (index) => {\n setLiveText(\n formatMessage(\n {\n id: getTrad('dnd.grab-item'),\n defaultMessage: `{item}, grabbed. Current position in list: {position}. Press up and down arrow to change position, Spacebar to drop, Escape to cancel.`,\n },\n {\n item: `${name}.${index}`,\n position: getItemPos(index),\n }\n )\n );\n };\n\n const handleDropItem = (index) => {\n setLiveText(\n formatMessage(\n {\n id: getTrad('dnd.drop-item'),\n defaultMessage: `{item}, dropped. Final position in list: {position}.`,\n },\n {\n item: `${name}.${index}`,\n position: getItemPos(index),\n }\n )\n );\n };\n\n const handleRemoveComponent = (name, currentIndex) => () => {\n removeComponentFromDynamicZone(name, currentIndex);\n };\n\n const renderButtonLabel = () => {\n if (addComponentIsOpen) {\n return formatMessage({ id: 'app.utils.close-label', defaultMessage: 'Close' });\n }\n\n if (hasError && dynamicZoneError.id.includes('max')) {\n return formatMessage({\n id: 'components.Input.error.validation.max',\n defaultMessage: 'The value is too high.',\n });\n }\n\n if (hasError && dynamicZoneError.id.includes('min')) {\n return formatMessage(\n {\n id: getTrad(`components.DynamicZone.missing-components`),\n defaultMessage:\n 'There {number, plural, =0 {are # missing components} one {is # missing component} other {are # missing components}}',\n },\n { number: missingComponentNumber }\n );\n }\n\n return formatMessage(\n {\n id: getTrad('components.DynamicZone.add-component'),\n defaultMessage: 'Add a component to {componentName}',\n },\n { componentName: metadatas.label || name }\n );\n };\n\n if (!isFieldAllowed && (isCreatingEntry || (!isFieldReadable && !isCreatingEntry))) {\n return (\n <NotAllowedInput\n description={intlDescription}\n intlLabel={{ id: metadatas.label, defaultMessage: metadatas.label }}\n labelAction={labelAction}\n name={name}\n />\n );\n }\n\n const ariaDescriptionId = `${name}-item-instructions`;\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {dynamicDisplayedComponentsLength > 0 && (\n <Box>\n <DynamicZoneLabel\n intlDescription={intlDescription}\n label={metadatas.label}\n labelAction={labelAction}\n name={name}\n numberOfComponents={dynamicDisplayedComponentsLength}\n required={required}\n />\n <VisuallyHidden id={ariaDescriptionId}>\n {formatMessage({\n id: getTrad('dnd.instructions'),\n defaultMessage: `Press spacebar to grab and re-order`,\n })}\n </VisuallyHidden>\n <VisuallyHidden aria-live=\"assertive\">{liveText}</VisuallyHidden>\n <ol aria-describedby={ariaDescriptionId}>\n {dynamicDisplayedComponents.map(({ componentUid, id }, index) => (\n <DynamicComponent\n componentUid={componentUid}\n formErrors={formErrors}\n key={`${componentUid}-${id}`}\n index={index}\n isFieldAllowed={isFieldAllowed}\n name={name}\n onMoveComponent={handleMoveComponent}\n onRemoveComponentClick={handleRemoveComponent(name, index)}\n onCancel={handleCancel}\n onDropItem={handleDropItem}\n onGrabItem={handleGrabItem}\n onAddComponent={handleAddComponent}\n dynamicComponentsByCategory={dynamicComponentsByCategory}\n />\n ))}\n </ol>\n </Box>\n )}\n <Flex justifyContent=\"center\">\n <AddComponentButton\n hasError={hasError}\n isDisabled={!isFieldAllowed}\n isOpen={addComponentIsOpen}\n onClick={handleClickOpenPicker}\n >\n {renderButtonLabel()}\n </AddComponentButton>\n </Flex>\n <ComponentPicker\n dynamicComponentsByCategory={dynamicComponentsByCategory}\n isOpen={addComponentIsOpen}\n onClickAddComponent={handleAddComponent}\n />\n </Flex>\n );\n};\n\nDynamicZone.defaultProps = {\n fieldSchema: {},\n labelAction: null,\n};\n\nDynamicZone.propTypes = {\n fieldSchema: PropTypes.shape({\n components: PropTypes.array,\n max: PropTypes.number,\n min: PropTypes.number,\n required: PropTypes.bool,\n }),\n labelAction: PropTypes.element,\n metadatas: PropTypes.shape({\n description: PropTypes.string,\n label: PropTypes.string,\n }).isRequired,\n name: PropTypes.string.isRequired,\n};\n\nexport { DynamicZone };\n","const CREATOR_FIELDS = ['createdBy', 'updatedBy'];\n\nexport { CREATOR_FIELDS };\n","import get from 'lodash/get';\nimport isArray from 'lodash/isArray';\nimport isObject from 'lodash/isObject';\n\nimport { CREATOR_FIELDS } from '../../../constants/attributes';\nimport { getInitialDataPathUsingTempKeys } from '../../../utils/paths';\n\n/* eslint-disable indent */\n\n/**\n *\n * @param {{ browserState: object, serverState: object }} browserState – the modifiedData from REDUX, serverState - the initialData from REDUX\n * @param {object} currentSchema\n * @param {object} componentsSchema\n * @returns\n */\nconst cleanData = ({ browserState, serverState }, currentSchema, componentsSchema) => {\n const rootServerState = serverState;\n const rootBrowserState = browserState;\n const getType = (schema, attrName) => get(schema, ['attributes', attrName, 'type'], '');\n const getOtherInfos = (schema, arr) => get(schema, ['attributes', ...arr], '');\n\n /**\n *\n * @param {object} browserState – the modifiedData from REDUX\n * @param {object} serverState – the initialData from REDUX\n * @param {*} schema\n * @param {string} pathToParent - the path to the parent of the current entry\n * @returns\n */\n const recursiveCleanData = (browserState, serverState, schema, pathToParent) => {\n return Object.keys(browserState).reduce((acc, current) => {\n // Creator attributes can be safely ignored because they are handle on the backend\n if (CREATOR_FIELDS.includes(current)) {\n return acc;\n }\n\n const path = pathToParent ? `${pathToParent}.${current}` : current;\n const attrType = getType(schema, current);\n\n // This is the field value\n const value = get(browserState, current);\n const oldValue = get(serverState, current);\n const component = getOtherInfos(schema, [current, 'component']);\n const isRepeatable = getOtherInfos(schema, [current, 'repeatable']);\n let cleanedData;\n\n switch (attrType) {\n case 'json':\n cleanedData = JSON.parse(value);\n break;\n case 'time': {\n cleanedData = value;\n\n // FIXME\n if (value && value.split(':').length < 3) {\n cleanedData = `${value}:00`;\n }\n\n break;\n }\n case 'media':\n if (getOtherInfos(schema, [current, 'multiple']) === true) {\n cleanedData = value ? value.filter((file) => !(file instanceof File)) : null;\n } else {\n cleanedData = get(value, 0) instanceof File ? null : get(value, 'id', null);\n }\n break;\n case 'component':\n if (isRepeatable) {\n cleanedData = value\n ? value.map((data, index) => {\n const subCleanedData = recursiveCleanData(\n data,\n (oldValue ?? [])[index],\n componentsSchema[component],\n `${path}.${index}`\n );\n\n return subCleanedData;\n })\n : value;\n } else {\n cleanedData = value\n ? recursiveCleanData(value, oldValue, componentsSchema[component], path)\n : value;\n }\n\n break;\n\n case 'relation': {\n const trueInitialDataPath = getInitialDataPathUsingTempKeys(\n rootServerState,\n rootBrowserState\n )(path).join('.');\n\n /**\n * Because of how repeatable components work when you dig into them the server\n * will have no object to compare too therefore no relation array will be setup\n * because the component has not been initialized, therefore we can safely assume\n * it needs to be added and provide a default empty array.\n */\n let actualOldValue = get(rootServerState, trueInitialDataPath, []);\n\n /**\n * Instead of the full relation object, we only want to send its ID\n * connectedRelations are the items that are in the browserState\n * array but not in the serverState\n */\n const connectedRelations = value.reduce((acc, relation, currentIndex, array) => {\n const relationOnServer = actualOldValue.find(\n (oldRelation) => oldRelation.id === relation.id\n );\n\n const relationInFront = array[currentIndex + 1];\n\n if (!relationOnServer || relationOnServer.__temp_key__ !== relation.__temp_key__) {\n const position = relationInFront ? { before: relationInFront.id } : { end: true };\n\n return [...acc, { id: relation.id, position }];\n }\n\n return acc;\n }, []);\n\n /**\n * disconnectedRelations are the items that are in the serverState but\n * are no longer in the browserState\n */\n const disconnectedRelations = actualOldValue.reduce((acc, relation) => {\n if (!value.find((newRelation) => newRelation.id === relation.id)) {\n return [...acc, { id: relation.id }];\n }\n\n return acc;\n }, []);\n\n cleanedData = {\n disconnect: disconnectedRelations,\n /**\n * Reverse the array because the API sequentially goes through the list\n * so in an instance where you add two to the end it would fail because index0\n * would want to attach itself to index1 which doesn't exist yet.\n */\n connect: connectedRelations.reverse(),\n };\n\n break;\n }\n\n case 'dynamiczone':\n cleanedData = value.map((componentData, index) => {\n const subCleanedData = recursiveCleanData(\n componentData,\n (oldValue ?? [])[index],\n componentsSchema[componentData.__component],\n `${path}.${index}`\n );\n\n return subCleanedData;\n });\n break;\n default:\n cleanedData = helperCleanData(value, 'id');\n }\n\n acc[current] = cleanedData;\n\n return acc;\n }, {});\n };\n\n return recursiveCleanData(browserState, serverState, currentSchema, '');\n};\n\n// TODO: check which parts are still needed: I suspect the\n// isArray part can go away, but I'm not sure what could send\n// an object; in case both can go away we might be able to get\n// rid of the whole helper\nexport const helperCleanData = (value, key) => {\n if (isArray(value)) {\n return value.map((obj) => (obj[key] ? obj[key] : obj));\n }\n if (isObject(value)) {\n return value[key];\n }\n\n return value;\n};\n\nexport default cleanData;\n","/**\n * @typedef Attribute\n * @type { { type: string; repeatable: boolean }}\n *\n * @typedef Attributes\n * @type {{ [key: string]: Attribute }}\n *\n * @typedef ReplacementFn\n * @type {<TData extends object, TKey extends string>(data: TData[TKey], { path: string[]; parent: TData }) => any}\n */\n\n/**\n * This function will recursively find everything and replace it with a value\n * based on the boolean return of the predicate function e.g. `type === 'relation'`.\n *\n * If you provide a function it will call that function with data value you're replacing with\n * a second argument with the path to the value and it's parent.\n *\n * It's original use was for the preperation of action items for the INIT_FORM action. It requires\n * knowledge of the `components` in the entity, however `components` doesn't change nor does the predicate\n * function so we don't need to pass it everytime hence why it's curried.\n *\n * @type {<TData extends object = object>(data: { [key: string]: { attributes: Attributes } }, predicate?: (value: Attribute, { path: string[]; parent: TData }) => boolean, replacement?: ReplacementFn<TData, keyof TKey> | any) => (data: TData, attributes: Attributes) => TData}\n */\nconst findAllAndReplaceSetup = (components, predicate = () => false, replacement = undefined) => {\n /**\n * @type {<TData extends object = object>(data: TData, attributes: Attributes, options?: { ignoreFalseyValues?: boolean}) => TData}\n */\n const findAllAndReplace = (\n data,\n attributes,\n { ignoreFalseyValues = false, path = [], parent = attributes } = {}\n ) => {\n return Object.entries(attributes).reduce(\n (acc, [key, value]) => {\n if (\n ignoreFalseyValues &&\n (acc === null || acc === undefined || acc[key] === undefined || acc[key] === null)\n ) {\n return acc;\n }\n\n if (predicate(value, { path: [...path, key], parent })) {\n acc[key] =\n typeof replacement === 'function'\n ? replacement(acc[key], { path: [...path, key], parent: acc })\n : replacement;\n }\n\n if (value.type === 'component') {\n const componentAttributes = components[value.component].attributes;\n\n if (!value.repeatable && acc[key] && typeof acc[key] === 'object') {\n acc[key] = findAllAndReplace(acc[key], componentAttributes, {\n ignoreFalseyValues,\n path: [...path, key],\n parent: attributes[key],\n });\n } else if (value.repeatable && Array.isArray(acc[key])) {\n acc[key] = acc[key].map((datum, index) => {\n const data = findAllAndReplace(datum, componentAttributes, {\n ignoreFalseyValues,\n path: [...path, key, index],\n parent: attributes[key],\n });\n\n return data;\n });\n }\n } else if (value.type === 'dynamiczone' && Array.isArray(acc[key])) {\n acc[key] = acc[key].map((datum, index) => {\n const componentAttributes = components[datum.__component].attributes;\n const data = findAllAndReplace(datum, componentAttributes, {\n ignoreFalseyValues,\n path: [...path, key, index],\n parent: attributes[key],\n });\n\n return data;\n });\n }\n\n return acc;\n },\n { ...data }\n );\n };\n\n return findAllAndReplace;\n};\n\nexport { findAllAndReplaceSetup as findAllAndReplace };\n","const moveFields = (initialValue, from, to, value) => {\n const returnedValue = initialValue.slice();\n\n returnedValue.splice(from, 1);\n returnedValue.splice(to, 0, value);\n\n return returnedValue;\n};\n\nexport default moveFields;\n","import { generateNKeysBetween } from 'fractional-indexing';\nimport produce from 'immer';\nimport cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport set from 'lodash/set';\nimport take from 'lodash/take';\nimport uniqBy from 'lodash/uniqBy';\nimport unset from 'lodash/unset';\n\nimport { CREATOR_FIELDS } from '../../constants/attributes';\nimport { getMaxTempKey } from '../../utils';\n\nimport { findAllAndReplace, moveFields } from './utils';\n\nconst initialState = {\n componentsDataStructure: {},\n contentTypeDataStructure: {},\n formErrors: {},\n initialData: {},\n modifiedData: null,\n shouldCheckErrors: false,\n modifiedDZName: null,\n publishConfirmation: {\n show: false,\n draftCount: 0,\n },\n};\n\nconst reducer = (state, action) =>\n // eslint-disable-next-line consistent-return\n produce(state, (draftState) => {\n switch (action.type) {\n case 'ADD_NON_REPEATABLE_COMPONENT_TO_FIELD': {\n const { componentLayoutData, allComponents } = action;\n\n const defaultDataStructure = {\n ...state.componentsDataStructure[componentLayoutData.uid],\n };\n\n const findAllRelationsAndReplaceWithEmptyArray = findAllAndReplace(\n allComponents,\n (value) => value.type === 'relation',\n []\n );\n\n const componentDataStructure = findAllRelationsAndReplaceWithEmptyArray(\n defaultDataStructure,\n componentLayoutData.attributes\n );\n\n set(draftState, ['modifiedData', ...action.keys], componentDataStructure);\n\n break;\n }\n case 'ADD_COMPONENT_TO_DYNAMIC_ZONE':\n case 'ADD_REPEATABLE_COMPONENT_TO_FIELD': {\n const {\n keys,\n allComponents,\n componentLayoutData,\n shouldCheckErrors,\n position = undefined,\n } = action;\n\n if (shouldCheckErrors) {\n draftState.shouldCheckErrors = !state.shouldCheckErrors;\n }\n\n if (action.type === 'ADD_COMPONENT_TO_DYNAMIC_ZONE') {\n draftState.modifiedDZName = keys[0];\n }\n\n const currentValue = [...get(state, ['modifiedData', ...keys], [])];\n\n let actualPosition = position;\n\n if (actualPosition === undefined) {\n actualPosition = currentValue.length;\n } else if (actualPosition < 0) {\n actualPosition = 0;\n }\n\n const defaultDataStructure =\n action.type === 'ADD_COMPONENT_TO_DYNAMIC_ZONE'\n ? {\n ...state.componentsDataStructure[componentLayoutData.uid],\n __component: componentLayoutData.uid,\n __temp_key__: getMaxTempKey(currentValue) + 1,\n }\n : {\n ...state.componentsDataStructure[componentLayoutData.uid],\n __temp_key__: getMaxTempKey(currentValue) + 1,\n };\n\n const findAllRelationsAndReplaceWithEmptyArray = findAllAndReplace(\n allComponents,\n (value) => value.type === 'relation',\n []\n );\n\n const componentDataStructure = findAllRelationsAndReplaceWithEmptyArray(\n defaultDataStructure,\n componentLayoutData.attributes\n );\n\n currentValue.splice(actualPosition, 0, componentDataStructure);\n\n set(draftState, ['modifiedData', ...keys], currentValue);\n\n break;\n }\n case 'LOAD_RELATION': {\n const { initialDataPath, modifiedDataPath, value } = action;\n\n const initialDataRelations = get(state, initialDataPath);\n const modifiedDataRelations = get(state, modifiedDataPath);\n\n const valuesToLoad = !initialDataRelations\n ? value\n : value.filter((relation) => {\n return !initialDataRelations.some((initialDataRelation) => {\n return initialDataRelation.id === relation.id;\n });\n });\n\n const keys = generateNKeysBetween(\n null,\n modifiedDataRelations[0]?.__temp_key__,\n valuesToLoad.length\n );\n\n /**\n * Check if the values we're loading are already in initial\n * data if they are then we don't need to load them at all\n */\n\n const valuesWithKeys = valuesToLoad.map((relation, index) => ({\n ...relation,\n __temp_key__: keys[index],\n }));\n\n /**\n * We need to set the value also on modifiedData, because initialData\n * and modifiedData need to stay in sync, so that the CM can compare\n * both states, to render the dirty UI state\n */\n set(\n draftState,\n initialDataPath,\n uniqBy([...valuesWithKeys, ...initialDataRelations], 'id')\n );\n set(\n draftState,\n modifiedDataPath,\n uniqBy([...valuesWithKeys, ...modifiedDataRelations], 'id')\n );\n\n break;\n }\n case 'CONNECT_RELATION': {\n const path = ['modifiedData', ...action.keys];\n const { value, toOneRelation } = action;\n\n /**\n * If the field is a single relation field we don't want to append\n * we just want to replace the value.\n */\n if (toOneRelation) {\n set(draftState, path, [value]);\n } else {\n const modifiedDataRelations = get(state, path);\n const [key] = generateNKeysBetween(modifiedDataRelations.at(-1)?.__temp_key__, null, 1);\n\n const newRelations = [...modifiedDataRelations, { ...value, __temp_key__: key }];\n set(draftState, path, newRelations);\n }\n\n break;\n }\n case 'DISCONNECT_RELATION': {\n const path = ['modifiedData', ...action.keys];\n const { id } = action;\n const modifiedDataRelation = get(state, [...path]);\n\n const newRelations = modifiedDataRelation.filter((rel) => rel.id !== id);\n\n set(draftState, path, newRelations);\n\n break;\n }\n case 'MOVE_COMPONENT_FIELD':\n case 'REORDER_RELATION': {\n const { oldIndex, newIndex, keys } = action;\n const path = ['modifiedData', ...keys];\n const modifiedDataRelations = get(state, [...path]);\n\n const currentItem = modifiedDataRelations[oldIndex];\n\n const newRelations = [...modifiedDataRelations];\n\n if (action.type === 'REORDER_RELATION') {\n const startKey =\n oldIndex > newIndex\n ? modifiedDataRelations[newIndex - 1]?.__temp_key__\n : modifiedDataRelations[newIndex]?.__temp_key__;\n const endKey =\n oldIndex > newIndex\n ? modifiedDataRelations[newIndex]?.__temp_key__\n : modifiedDataRelations[newIndex + 1]?.__temp_key__;\n const [newKey] = generateNKeysBetween(startKey, endKey, 1);\n\n newRelations.splice(oldIndex, 1);\n newRelations.splice(newIndex, 0, { ...currentItem, __temp_key__: newKey });\n } else {\n newRelations.splice(oldIndex, 1);\n newRelations.splice(newIndex, 0, currentItem);\n }\n\n set(draftState, path, newRelations);\n\n break;\n }\n /**\n * This action will be called when you open your entry (first load)\n * but also every time you press publish.\n */\n case 'INIT_FORM': {\n const { initialValues, components = {}, attributes = {}, setModifiedDataOnly } = action;\n\n /**\n * You can't mutate an actions value.\n * and spreading an object only clones\n * the first level, the deeply nested values\n * are a reference.\n */\n const data = cloneDeep(initialValues);\n\n const findAllRelationsAndReplaceWithEmptyArray = findAllAndReplace(\n components,\n (value, { path }) => {\n const fieldName = path[path.length - 1];\n // We don't replace creator fields because we already return them without need to populate them separately\n const isCreatorField = CREATOR_FIELDS.includes(fieldName);\n\n return value.type === 'relation' && !isCreatorField;\n },\n (_, { path }) => {\n if (state.modifiedData?.id === data.id && get(state.modifiedData, path)) {\n return get(state.modifiedData, path);\n }\n\n return [];\n }\n );\n\n const mergedDataWithPreparedRelations = findAllRelationsAndReplaceWithEmptyArray(\n data,\n attributes\n );\n\n const findComponentsAndReplaceWithTempKey = findAllAndReplace(\n components,\n (value) =>\n value.type === 'dynamiczone' || (value.type === 'component' && !value.repeatable),\n (data) => {\n /**\n * If the data is an array, we have the dynamic zone if it's not, its a regular component.\n */\n return Array.isArray(data)\n ? data.map((datum, index) => ({\n ...datum,\n __temp_key__: index,\n }))\n : {\n ...data,\n __temp_key__: 0,\n };\n }\n );\n\n const mergedDataWithTmpKeys = findComponentsAndReplaceWithTempKey(\n mergedDataWithPreparedRelations,\n attributes,\n { ignoreFalseyValues: true }\n );\n\n if (!setModifiedDataOnly) {\n draftState.initialData = mergedDataWithTmpKeys;\n }\n\n draftState.modifiedData = mergedDataWithTmpKeys;\n\n draftState.formErrors = {};\n\n draftState.modifiedDZName = null;\n draftState.shouldCheckErrors = false;\n break;\n }\n case 'MOVE_COMPONENT_UP':\n case 'MOVE_COMPONENT_DOWN': {\n const { currentIndex, dynamicZoneName, shouldCheckErrors } = action;\n\n if (shouldCheckErrors) {\n draftState.shouldCheckErrors = !state.shouldCheckErrors;\n }\n\n const currentValue = state.modifiedData[dynamicZoneName];\n const nextIndex = action.type === 'MOVE_COMPONENT_UP' ? currentIndex - 1 : currentIndex + 1;\n const valueToInsert = state.modifiedData[dynamicZoneName][currentIndex];\n const updatedValue = moveFields(currentValue, currentIndex, nextIndex, valueToInsert);\n\n set(draftState, ['modifiedData', action.dynamicZoneName], updatedValue);\n\n break;\n }\n case 'MOVE_FIELD': {\n const currentValue = get(state, ['modifiedData', ...action.keys], []).slice();\n const valueToInsert = get(state, ['modifiedData', ...action.keys, action.dragIndex]);\n const updatedValue = moveFields(\n currentValue,\n action.dragIndex,\n action.overIndex,\n valueToInsert\n );\n\n set(draftState, ['modifiedData', ...action.keys], updatedValue);\n\n break;\n }\n case 'ON_CHANGE': {\n const [nonRepeatableComponentKey] = action.keys;\n\n // This is used to set the initialData for inputs\n // that needs an asynchronous initial value like the UID field\n // This is just a temporary patch.\n // TODO : Refactor the default form creation (workflow) to accept async default values.\n if (action.shouldSetInitialValue) {\n set(draftState, ['initialData', ...action.keys], action.value);\n }\n\n // FIXME: not sure this is needed...\n if (\n action.keys.length === 2 &&\n get(state, ['modifiedData', nonRepeatableComponentKey]) === null\n ) {\n set(draftState, ['modifiedData', nonRepeatableComponentKey], {\n [action.keys[1]]: action.value,\n });\n\n break;\n }\n\n set(draftState, ['modifiedData', ...action.keys], action.value);\n\n break;\n }\n case 'REMOVE_COMPONENT_FROM_DYNAMIC_ZONE': {\n if (action.shouldCheckErrors) {\n draftState.shouldCheckErrors = !state.shouldCheckErrors;\n }\n\n draftState.modifiedData[action.dynamicZoneName].splice(action.index, 1);\n\n break;\n }\n case 'REMOVE_COMPONENT_FROM_FIELD': {\n const componentPathToRemove = ['modifiedData', ...action.keys];\n\n set(draftState, componentPathToRemove, null);\n\n break;\n }\n case 'REMOVE_PASSWORD_FIELD': {\n unset(draftState, ['modifiedData', ...action.keys]);\n\n break;\n }\n case 'REMOVE_REPEATABLE_FIELD': {\n const keysLength = action.keys.length - 1;\n const pathToComponentData = ['modifiedData', ...take(action.keys, keysLength)];\n const hasErrors = Object.keys(state.formErrors).length > 0;\n\n if (hasErrors) {\n draftState.shouldCheckErrors = !state.shouldCheckErrors;\n }\n\n const currentValue = get(state, pathToComponentData).slice();\n currentValue.splice(parseInt(action.keys[keysLength], 10), 1);\n\n set(draftState, pathToComponentData, currentValue);\n\n break;\n }\n case 'SET_DEFAULT_DATA_STRUCTURES': {\n draftState.componentsDataStructure = action.componentsDataStructure;\n draftState.contentTypeDataStructure = action.contentTypeDataStructure;\n\n break;\n }\n case 'SET_FORM_ERRORS': {\n draftState.modifiedDZName = null;\n draftState.formErrors = action.errors;\n break;\n }\n case 'TRIGGER_FORM_VALIDATION': {\n const hasErrors = Object.keys(state.formErrors).length > 0;\n\n if (hasErrors) {\n draftState.shouldCheckErrors = !state.shouldCheckErrors;\n }\n\n break;\n }\n case 'SET_PUBLISH_CONFIRMATION': {\n draftState.publishConfirmation = { ...action.publishConfirmation };\n break;\n }\n case 'RESET_PUBLISH_CONFIRMATION': {\n draftState.publishConfirmation = { ...state.publishConfirmation, show: false };\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default reducer;\nexport { initialState };\n","/* eslint-disable react/jsx-no-constructed-context-values */\nimport React, { useCallback, useEffect, useMemo, useReducer, useRef } from 'react';\n\nimport { Main } from '@strapi/design-system';\nimport {\n ContentManagerEditViewDataManagerContext,\n getAPIInnerErrors,\n getYupInnerErrors,\n LoadingIndicatorPage,\n useNotification,\n useOverlayBlocker,\n useTracking,\n} from '@strapi/helper-plugin';\nimport cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport isEmpty from 'lodash/isEmpty';\nimport isEqual from 'lodash/isEqual';\nimport set from 'lodash/set';\nimport PropTypes from 'prop-types';\nimport { flushSync } from 'react-dom';\nimport { useIntl } from 'react-intl';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Prompt, Redirect } from 'react-router-dom';\n\nimport { usePrev } from '../../hooks';\nimport { clearSetModifiedDataOnly } from '../../sharedReducers/crudReducer/actions';\nimport selectCrudReducer from '../../sharedReducers/crudReducer/selectors';\nimport { createYupSchema, getTrad } from '../../utils';\n\nimport reducer, { initialState } from './reducer';\nimport { cleanData } from './utils';\n\nconst EditViewDataManagerProvider = ({\n allLayoutData,\n allowedActions: { canRead, canUpdate },\n children,\n componentsDataStructure,\n contentTypeDataStructure,\n createActionAllowedFields,\n from,\n initialValues,\n isCreatingEntry,\n isLoadingForData,\n isSingleType,\n onPost,\n onPublish,\n onDraftRelationCheck,\n onPut,\n onUnpublish,\n readActionAllowedFields,\n // Not sure this is needed anymore\n redirectToPreviousPage,\n slug,\n status,\n updateActionAllowedFields,\n}) => {\n const [isSaving, setIsSaving] = React.useState(false);\n /**\n * TODO: this should be moved into the global reducer\n * to match ever other reducer in the CM.\n */\n const [reducerState, dispatch] = useReducer(reducer, initialState);\n const {\n formErrors,\n initialData,\n modifiedData,\n modifiedDZName,\n shouldCheckErrors,\n publishConfirmation,\n } = reducerState;\n\n const { setModifiedDataOnly } = useSelector(selectCrudReducer);\n const reduxDispatch = useDispatch();\n\n const toggleNotification = useNotification();\n const { lockApp, unlockApp } = useOverlayBlocker();\n\n const currentContentTypeLayout = get(allLayoutData, ['contentType'], {});\n\n const hasDraftAndPublish = useMemo(() => {\n return get(currentContentTypeLayout, ['options', 'draftAndPublish'], false);\n }, [currentContentTypeLayout]);\n\n const shouldNotRunValidations = useMemo(() => {\n return hasDraftAndPublish && !initialData.publishedAt;\n }, [hasDraftAndPublish, initialData.publishedAt]);\n\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const trackUsageRef = useRef(trackUsage);\n\n const shouldRedirectToHomepageWhenEditingEntry = useMemo(() => {\n if (isLoadingForData) {\n return false;\n }\n\n if (isCreatingEntry) {\n return false;\n }\n\n if (canRead === false && canUpdate === false) {\n return true;\n }\n\n return false;\n }, [isLoadingForData, isCreatingEntry, canRead, canUpdate]);\n\n useEffect(() => {\n if (status === 'resolved') {\n unlockApp();\n } else {\n lockApp();\n }\n }, [lockApp, unlockApp, status]);\n\n // TODO check this effect if it is really needed (not prio)\n useEffect(() => {\n if (!isLoadingForData) {\n checkFormErrors();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [shouldCheckErrors]);\n\n useEffect(() => {\n const errorsInForm = Object.keys(formErrors);\n\n // TODO check if working with DZ, components...\n // TODO use querySelector querySelectorAll('[data-strapi-field-error]')\n if (errorsInForm.length > 0) {\n const firstError = errorsInForm[0];\n const el = document.getElementById(firstError);\n\n if (el) {\n el.focus();\n }\n }\n }, [formErrors]);\n\n useEffect(() => {\n if (shouldRedirectToHomepageWhenEditingEntry) {\n toggleNotification({\n type: 'info',\n message: { id: getTrad('permissions.not-allowed.update') },\n });\n }\n }, [shouldRedirectToHomepageWhenEditingEntry, toggleNotification]);\n\n useEffect(() => {\n dispatch({\n type: 'SET_DEFAULT_DATA_STRUCTURES',\n componentsDataStructure,\n contentTypeDataStructure,\n });\n }, [componentsDataStructure, contentTypeDataStructure]);\n\n const { components } = allLayoutData;\n\n const previousInitialValues = usePrev(initialValues);\n\n useEffect(() => {\n /**\n * Only fire this effect if the initialValues are different\n * otherwise it's a fruitless effort no matter what happens.\n */\n if (\n initialValues &&\n currentContentTypeLayout?.attributes &&\n !isEqual(previousInitialValues, initialValues)\n ) {\n dispatch({\n type: 'INIT_FORM',\n initialValues,\n components,\n attributes: currentContentTypeLayout.attributes,\n setModifiedDataOnly,\n });\n\n /**\n * TODO: This should be moved to a side-effect e.g. thunks\n * something to consider for V5\n */\n if (setModifiedDataOnly) {\n reduxDispatch(clearSetModifiedDataOnly());\n }\n }\n }, [\n initialValues,\n currentContentTypeLayout,\n components,\n setModifiedDataOnly,\n reduxDispatch,\n previousInitialValues,\n ]);\n\n const dispatchAddComponent = useCallback(\n (type) =>\n (\n keys,\n componentLayoutData,\n allComponents,\n shouldCheckErrors = false,\n position = undefined\n ) => {\n trackUsageRef.current('didAddComponentToDynamicZone');\n\n dispatch({\n type,\n keys: keys.split('.'),\n position,\n componentLayoutData,\n allComponents,\n shouldCheckErrors,\n });\n },\n []\n );\n\n const addComponentToDynamicZone = dispatchAddComponent('ADD_COMPONENT_TO_DYNAMIC_ZONE');\n\n const addNonRepeatableComponentToField = useCallback(\n (keys, componentLayoutData, allComponents) => {\n dispatch({\n type: 'ADD_NON_REPEATABLE_COMPONENT_TO_FIELD',\n keys: keys.split('.'),\n componentLayoutData,\n allComponents,\n });\n },\n []\n );\n\n /**\n * @type {({ name: string, value: Relation, toOneRelation: boolean}) => void}\n */\n const relationConnect = useCallback(({ name, value, toOneRelation }) => {\n dispatch({\n type: 'CONNECT_RELATION',\n keys: name.split('.'),\n value,\n toOneRelation,\n });\n }, []);\n\n const relationLoad = useCallback(\n ({ target: { initialDataPath, modifiedDataPath, value, modifiedDataOnly } }) => {\n dispatch({\n type: 'LOAD_RELATION',\n modifiedDataPath,\n initialDataPath,\n value,\n modifiedDataOnly,\n });\n },\n []\n );\n\n const addRepeatableComponentToField = dispatchAddComponent('ADD_REPEATABLE_COMPONENT_TO_FIELD');\n\n const yupSchema = useMemo(() => {\n const options = { isCreatingEntry, isDraft: shouldNotRunValidations, isFromComponent: false };\n\n return createYupSchema(\n currentContentTypeLayout,\n {\n components: allLayoutData.components || {},\n },\n options\n );\n }, [\n allLayoutData.components,\n currentContentTypeLayout,\n isCreatingEntry,\n shouldNotRunValidations,\n ]);\n\n const checkFormErrors = useCallback(\n async (dataToSet = {}) => {\n let errors = {};\n const updatedData = cloneDeep(modifiedData);\n\n if (!isEmpty(updatedData)) {\n set(updatedData, dataToSet.path, dataToSet.value);\n }\n\n try {\n // Validate the form using yup\n await yupSchema.validate(updatedData, { abortEarly: false });\n } catch (err) {\n errors = getYupInnerErrors(err);\n\n if (modifiedDZName) {\n errors = Object.keys(errors).reduce((acc, current) => {\n const dzName = current.split('.')[0];\n\n if (dzName !== modifiedDZName) {\n acc[current] = errors[current];\n }\n\n return acc;\n }, {});\n }\n }\n\n dispatch({\n type: 'SET_FORM_ERRORS',\n errors,\n });\n },\n [modifiedDZName, modifiedData, yupSchema]\n );\n\n const handleChange = useCallback(\n ({ target: { name, value, type } }, shouldSetInitialValue = false) => {\n let inputValue = value;\n\n // Allow to reset text, textarea, email, uid, select/enum, and number\n if (\n ['text', 'textarea', 'string', 'email', 'uid', 'select', 'select-one', 'number'].includes(\n type\n ) &&\n !value &&\n value !== 0\n ) {\n inputValue = null;\n }\n\n if (type === 'password' && !value) {\n dispatch({\n type: 'REMOVE_PASSWORD_FIELD',\n keys: name.split('.'),\n });\n\n return;\n }\n\n dispatch({\n type: 'ON_CHANGE',\n keys: name.split('.'),\n value: inputValue,\n shouldSetInitialValue,\n });\n },\n []\n );\n\n const createFormData = useCallback(\n (modifiedData, initialData) => {\n // Then we need to apply our helper\n const cleanedData = cleanData(\n { browserState: modifiedData, serverState: initialData },\n currentContentTypeLayout,\n allLayoutData.components\n );\n\n return cleanedData;\n },\n [allLayoutData.components, currentContentTypeLayout]\n );\n\n const trackerProperty = useMemo(() => {\n if (!hasDraftAndPublish) {\n return {};\n }\n\n return shouldNotRunValidations ? { status: 'draft' } : {};\n }, [hasDraftAndPublish, shouldNotRunValidations]);\n\n const handlePublishPromptDismissal = useCallback(async (e) => {\n e.preventDefault();\n\n return dispatch({\n type: 'RESET_PUBLISH_CONFIRMATION',\n });\n }, []);\n\n const handleSubmit = useCallback(\n async (e) => {\n e.preventDefault();\n let errors = {};\n\n try {\n await yupSchema.validate(modifiedData, { abortEarly: false });\n } catch (err) {\n errors = getYupInnerErrors(err);\n }\n\n try {\n if (isEmpty(errors)) {\n const formData = createFormData(modifiedData, initialData);\n flushSync(() => {\n setIsSaving(true);\n });\n\n if (isCreatingEntry) {\n await onPost(formData, trackerProperty);\n } else {\n await onPut(formData, trackerProperty);\n }\n\n setIsSaving(false);\n }\n } catch (err) {\n setIsSaving(false);\n errors = {\n ...errors,\n ...getAPIInnerErrors(err, { getTrad }),\n };\n }\n\n dispatch({\n type: 'SET_FORM_ERRORS',\n errors,\n });\n },\n [\n createFormData,\n isCreatingEntry,\n modifiedData,\n initialData,\n onPost,\n onPut,\n trackerProperty,\n yupSchema,\n ]\n );\n\n const handlePublish = useCallback(async () => {\n // Create yup schema here's we need to apply all the validations\n const schema = createYupSchema(\n currentContentTypeLayout,\n {\n components: get(allLayoutData, 'components', {}),\n },\n { isCreatingEntry, isDraft: false, isFromComponent: false }\n );\n\n const draftCount = await onDraftRelationCheck();\n\n if (!publishConfirmation.show && draftCount > 0) {\n // If the warning hasn't already been shown and draft relations are found,\n // abort the publish call and ask for confirmation from the user\n dispatch({\n type: 'SET_PUBLISH_CONFIRMATION',\n publishConfirmation: {\n show: true,\n draftCount,\n },\n });\n\n return;\n }\n dispatch({\n type: 'RESET_PUBLISH_CONFIRMATION',\n });\n\n let errors = {};\n try {\n await schema.validate(modifiedData, { abortEarly: false });\n } catch (err) {\n errors = getYupInnerErrors(err);\n }\n\n try {\n if (isEmpty(errors)) {\n flushSync(() => {\n setIsSaving(true);\n });\n await onPublish();\n setIsSaving(false);\n }\n } catch (err) {\n setIsSaving(false);\n errors = {\n ...errors,\n ...getAPIInnerErrors(err, { getTrad }),\n };\n }\n\n dispatch({\n type: 'SET_FORM_ERRORS',\n errors,\n });\n }, [\n allLayoutData,\n currentContentTypeLayout,\n isCreatingEntry,\n modifiedData,\n publishConfirmation.show,\n onPublish,\n onDraftRelationCheck,\n ]);\n\n const shouldCheckDZErrors = useCallback(\n (dzName) => {\n const doesDZHaveError = Object.keys(formErrors).some((key) => key.split('.')[0] === dzName);\n const shouldCheckErrors = !isEmpty(formErrors) && doesDZHaveError;\n\n return shouldCheckErrors;\n },\n [formErrors]\n );\n\n const moveComponentDown = useCallback(\n (dynamicZoneName, currentIndex) => {\n trackUsageRef.current('changeComponentsOrder');\n\n dispatch({\n type: 'MOVE_COMPONENT_DOWN',\n dynamicZoneName,\n currentIndex,\n shouldCheckErrors: shouldCheckDZErrors(dynamicZoneName),\n });\n },\n [shouldCheckDZErrors]\n );\n\n const moveComponentUp = useCallback(\n (dynamicZoneName, currentIndex) => {\n trackUsageRef.current('changeComponentsOrder');\n\n dispatch({\n type: 'MOVE_COMPONENT_UP',\n dynamicZoneName,\n currentIndex,\n shouldCheckErrors: shouldCheckDZErrors(dynamicZoneName),\n });\n },\n [shouldCheckDZErrors]\n );\n\n const moveComponentField = useCallback(({ name, newIndex, currentIndex }) => {\n dispatch({\n type: 'MOVE_COMPONENT_FIELD',\n keys: name.split('.'),\n newIndex,\n oldIndex: currentIndex,\n });\n }, []);\n\n const relationDisconnect = useCallback(({ name, id }) => {\n dispatch({\n type: 'DISCONNECT_RELATION',\n keys: name.split('.'),\n id,\n });\n }, []);\n\n /**\n * @typedef Payload\n * @type {object}\n * @property {string} name - The name of the field in `modifiedData`\n * @property {number} oldIndex - The relation's current index\n * @property {number} newIndex - The relation's new index\n *\n *\n * @type {(payload: Payload) => void}\n */\n const relationReorder = useCallback(({ name, oldIndex, newIndex }) => {\n dispatch({\n type: 'REORDER_RELATION',\n keys: name.split('.'),\n oldIndex,\n newIndex,\n });\n }, []);\n\n const removeComponentFromDynamicZone = useCallback(\n (dynamicZoneName, index) => {\n trackUsageRef.current('removeComponentFromDynamicZone');\n\n dispatch({\n type: 'REMOVE_COMPONENT_FROM_DYNAMIC_ZONE',\n dynamicZoneName,\n index,\n shouldCheckErrors: shouldCheckDZErrors(dynamicZoneName),\n });\n },\n [shouldCheckDZErrors]\n );\n\n const removeComponentFromField = useCallback((keys, componentUid) => {\n dispatch({\n type: 'REMOVE_COMPONENT_FROM_FIELD',\n keys: keys.split('.'),\n componentUid,\n });\n }, []);\n\n const removeRepeatableField = useCallback((keys, componentUid) => {\n dispatch({\n type: 'REMOVE_REPEATABLE_FIELD',\n keys: keys.split('.'),\n componentUid,\n });\n }, []);\n\n const triggerFormValidation = useCallback(() => {\n dispatch({\n type: 'TRIGGER_FORM_VALIDATION',\n });\n }, []);\n\n // Redirect the user to the previous page if he is not allowed to read/update a document\n if (shouldRedirectToHomepageWhenEditingEntry) {\n return <Redirect to={from} />;\n }\n\n if (!modifiedData) {\n return null;\n }\n\n return (\n <ContentManagerEditViewDataManagerContext.Provider\n value={{\n addComponentToDynamicZone,\n addNonRepeatableComponentToField,\n addRepeatableComponentToField,\n allLayoutData,\n checkFormErrors,\n createActionAllowedFields,\n formErrors,\n hasDraftAndPublish,\n initialData,\n isCreatingEntry,\n isSingleType,\n shouldNotRunValidations,\n status,\n layout: currentContentTypeLayout,\n modifiedData,\n moveComponentField,\n /**\n * @deprecated use `moveComponentField` instead. This will be removed in v5.\n */\n moveComponentDown,\n /**\n * @deprecated use `moveComponentField` instead. This will be removed in v5.\n */\n moveComponentUp,\n onChange: handleChange,\n onPublish: handlePublish,\n onUnpublish,\n readActionAllowedFields,\n redirectToPreviousPage,\n removeComponentFromDynamicZone,\n removeComponentFromField,\n removeRepeatableField,\n relationConnect,\n relationDisconnect,\n relationLoad,\n relationReorder,\n slug,\n triggerFormValidation,\n updateActionAllowedFields,\n onPublishPromptDismissal: handlePublishPromptDismissal,\n publishConfirmation,\n }}\n >\n {isLoadingForData || (!isCreatingEntry && !initialData.id) ? (\n <Main aria-busy=\"true\">\n <LoadingIndicatorPage />\n </Main>\n ) : (\n <>\n {!isSaving ? (\n <Prompt\n when={!isEqual(modifiedData, initialData)}\n message={formatMessage({ id: 'global.prompt.unsaved' })}\n />\n ) : null}\n <form noValidate onSubmit={handleSubmit}>\n {children}\n </form>\n </>\n )}\n </ContentManagerEditViewDataManagerContext.Provider>\n );\n};\n\nEditViewDataManagerProvider.defaultProps = {\n from: '/',\n initialValues: null,\n redirectToPreviousPage() {},\n};\n\nEditViewDataManagerProvider.propTypes = {\n allLayoutData: PropTypes.object.isRequired,\n allowedActions: PropTypes.object.isRequired,\n children: PropTypes.node.isRequired,\n componentsDataStructure: PropTypes.object.isRequired,\n contentTypeDataStructure: PropTypes.object.isRequired,\n createActionAllowedFields: PropTypes.array.isRequired,\n from: PropTypes.string,\n initialValues: PropTypes.object,\n isCreatingEntry: PropTypes.bool.isRequired,\n isLoadingForData: PropTypes.bool.isRequired,\n isSingleType: PropTypes.bool.isRequired,\n onPost: PropTypes.func.isRequired,\n onPublish: PropTypes.func.isRequired,\n onDraftRelationCheck: PropTypes.func.isRequired,\n onPut: PropTypes.func.isRequired,\n onUnpublish: PropTypes.func.isRequired,\n readActionAllowedFields: PropTypes.array.isRequired,\n redirectToPreviousPage: PropTypes.func,\n slug: PropTypes.string.isRequired,\n status: PropTypes.string.isRequired,\n updateActionAllowedFields: PropTypes.array.isRequired,\n};\n\nexport default EditViewDataManagerProvider;\n","const createPluginsFilter = (obj = {}) =>\n Object.values(obj).reduce((acc, current) => Object.assign(acc, current), {});\n\n/**\n * @description\n * Creates a valid query params object for get requests\n * ie. plugins[18n][locale]=en becomes locale=en\n * @param {object} [query={}] - The query params\n * @returns {object} - The modified query params\n */\nconst buildValidGetParams = (query = {}) => {\n // Extract pluginOptions from the query, they shouldn't be part of the URL\n const {\n plugins: _,\n _q: searchQuery,\n ...validQueryParams\n } = {\n ...query,\n ...createPluginsFilter(query.plugins),\n };\n\n if (searchQuery) {\n // Encode the search query here since the paramsSerializer will not\n validQueryParams._q = encodeURIComponent(searchQuery);\n }\n\n return validQueryParams;\n};\n\nexport default buildValidGetParams;\n","import { memo, useCallback, useEffect, useRef, useState, useMemo } from 'react';\n\nimport {\n formatContentTypeData,\n useAPIErrorHandler,\n useFetchClient,\n useGuidedTour,\n useNotification,\n useQueryParams,\n useTracking,\n} from '@strapi/helper-plugin';\nimport axios from 'axios';\nimport get from 'lodash/get';\nimport PropTypes from 'prop-types';\nimport { useQueryClient } from 'react-query';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n\nimport { buildValidGetParams } from '../../pages/ListView/utils';\nimport {\n getData,\n getDataSucceeded,\n initForm,\n resetProps,\n setDataStructures,\n setStatus,\n submitSucceeded,\n} from '../../sharedReducers/crudReducer/actions';\nimport selectCrudReducer from '../../sharedReducers/crudReducer/selectors';\nimport { createDefaultForm, getTrad, removePasswordFieldsFromData } from '../../utils';\n\n// This container is used to handle the CRUD\nconst SingleTypeFormWrapper = ({ allLayoutData, children, slug }) => {\n const queryClient = useQueryClient();\n const { trackUsage } = useTracking();\n const { push } = useHistory();\n const { setCurrentStep } = useGuidedTour();\n const trackUsageRef = useRef(trackUsage);\n const [isCreatingEntry, setIsCreatingEntry] = useState(true);\n const [{ query, rawQuery }] = useQueryParams();\n const params = useMemo(() => buildValidGetParams(query), [query]);\n const toggleNotification = useNotification();\n const dispatch = useDispatch();\n const { formatAPIError } = useAPIErrorHandler(getTrad);\n const fetchClient = useFetchClient();\n const { post, put, del } = fetchClient;\n\n const { componentsDataStructure, contentTypeDataStructure, data, isLoading, status } =\n useSelector(selectCrudReducer);\n\n const cleanReceivedData = useCallback(\n (data) => {\n const cleaned = removePasswordFieldsFromData(\n data,\n allLayoutData.contentType,\n allLayoutData.components\n );\n\n // This is needed in order to add a unique id for the repeatable components, in order to make the reorder easier\n return formatContentTypeData(cleaned, allLayoutData.contentType, allLayoutData.components);\n },\n [allLayoutData]\n );\n\n useEffect(() => {\n return () => {\n dispatch(resetProps());\n };\n }, [dispatch]);\n\n useEffect(() => {\n const componentsDataStructure = Object.keys(allLayoutData.components).reduce((acc, current) => {\n const defaultComponentForm = createDefaultForm(\n get(allLayoutData, ['components', current, 'attributes'], {}),\n allLayoutData.components\n );\n\n acc[current] = formatContentTypeData(\n defaultComponentForm,\n allLayoutData.components[current],\n allLayoutData.components\n );\n\n return acc;\n }, {});\n\n const contentTypeDataStructure = createDefaultForm(\n allLayoutData.contentType.attributes,\n allLayoutData.components\n );\n const contentTypeDataStructureFormatted = formatContentTypeData(\n contentTypeDataStructure,\n allLayoutData.contentType,\n allLayoutData.components\n );\n\n dispatch(setDataStructures(componentsDataStructure, contentTypeDataStructureFormatted));\n }, [allLayoutData, dispatch]);\n\n // Check if creation mode or editing mode\n useEffect(() => {\n const CancelToken = axios.CancelToken;\n const source = CancelToken.source();\n\n const fetchData = async (source) => {\n dispatch(getData());\n\n setIsCreatingEntry(true);\n\n try {\n const { data } = await fetchClient.get(`/content-manager/single-types/${slug}`, {\n cancelToken: source.token,\n params,\n });\n\n dispatch(getDataSucceeded(cleanReceivedData(data)));\n\n setIsCreatingEntry(false);\n } catch (err) {\n if (axios.isCancel(err)) {\n return;\n }\n\n const responseStatus = get(err, 'response.status', null);\n\n // Creating a single type\n if (responseStatus === 404) {\n dispatch(initForm(rawQuery, true));\n }\n\n if (responseStatus === 403) {\n toggleNotification({\n type: 'info',\n message: { id: getTrad('permissions.not-allowed.update') },\n });\n\n push('/');\n }\n }\n };\n\n fetchData(source);\n\n return () => source.cancel('Operation canceled by the user.');\n }, [fetchClient, cleanReceivedData, push, slug, dispatch, params, rawQuery, toggleNotification]);\n\n const displayErrors = useCallback(\n (err) => {\n toggleNotification({ type: 'warning', message: formatAPIError(err) });\n },\n [toggleNotification, formatAPIError]\n );\n\n const onDelete = useCallback(\n async (trackerProperty) => {\n try {\n trackUsageRef.current('willDeleteEntry', trackerProperty);\n\n const { data } = await del(`/content-manager/single-types/${slug}`, {\n params,\n });\n\n toggleNotification({\n type: 'success',\n message: { id: getTrad('success.record.delete') },\n });\n\n trackUsageRef.current('didDeleteEntry', trackerProperty);\n\n setIsCreatingEntry(true);\n dispatch(initForm(rawQuery, true));\n\n return Promise.resolve(data);\n } catch (err) {\n trackUsageRef.current('didNotDeleteEntry', { error: err, ...trackerProperty });\n\n displayErrors(err);\n\n return Promise.reject(err);\n }\n },\n [del, slug, params, toggleNotification, dispatch, rawQuery, displayErrors]\n );\n\n const onPost = useCallback(\n async (body, trackerProperty) => {\n const endPoint = `/content-manager/single-types/${slug}`;\n\n try {\n dispatch(setStatus('submit-pending'));\n\n const { data } = await put(endPoint, body, { params: query });\n\n trackUsageRef.current('didCreateEntry', trackerProperty);\n toggleNotification({\n type: 'success',\n message: { id: getTrad('success.record.save') },\n });\n\n setCurrentStep('contentManager.success');\n\n // TODO: need to find a better place, or a better abstraction\n queryClient.invalidateQueries(['relation']);\n\n dispatch(submitSucceeded(cleanReceivedData(data)));\n setIsCreatingEntry(false);\n\n dispatch(setStatus('resolved'));\n\n return Promise.resolve(data);\n } catch (err) {\n trackUsageRef.current('didNotCreateEntry', { error: err, trackerProperty });\n\n displayErrors(err);\n\n dispatch(setStatus('resolved'));\n\n return Promise.reject(err);\n }\n },\n [\n put,\n cleanReceivedData,\n displayErrors,\n slug,\n dispatch,\n query,\n toggleNotification,\n setCurrentStep,\n queryClient,\n ]\n );\n\n const onDraftRelationCheck = useCallback(async () => {\n try {\n trackUsageRef.current('willCheckDraftRelations');\n\n const endPoint = `/content-manager/single-types/${slug}/actions/countDraftRelations`;\n dispatch(setStatus('draft-relation-check-pending'));\n\n const numberOfDraftRelations = await fetchClient.get(endPoint);\n trackUsageRef.current('didCheckDraftRelations');\n\n dispatch(setStatus('resolved'));\n\n return numberOfDraftRelations.data.data;\n } catch (err) {\n displayErrors(err);\n dispatch(setStatus('resolved'));\n\n return Promise.reject(err);\n }\n }, [fetchClient, displayErrors, slug, dispatch]);\n\n const onPublish = useCallback(async () => {\n try {\n trackUsageRef.current('willPublishEntry');\n const endPoint = `/content-manager/single-types/${slug}/actions/publish`;\n\n dispatch(setStatus('publish-pending'));\n\n const { data } = await post(\n endPoint,\n {},\n {\n params,\n }\n );\n\n trackUsageRef.current('didPublishEntry');\n toggleNotification({\n type: 'success',\n message: { id: getTrad('success.record.publish') },\n });\n\n dispatch(submitSucceeded(cleanReceivedData(data)));\n\n dispatch(setStatus('resolved'));\n\n return Promise.resolve(data);\n } catch (err) {\n displayErrors(err);\n\n dispatch(setStatus('resolved'));\n\n return Promise.reject(err);\n }\n }, [slug, dispatch, post, params, toggleNotification, cleanReceivedData, displayErrors]);\n\n const onPut = useCallback(\n async (body, trackerProperty) => {\n const endPoint = `/content-manager/single-types/${slug}`;\n\n try {\n trackUsageRef.current('willEditEntry', trackerProperty);\n\n dispatch(setStatus('submit-pending'));\n\n const { data } = await put(endPoint, body, { params: query });\n\n toggleNotification({\n type: 'success',\n message: { id: getTrad('success.record.save') },\n });\n\n trackUsageRef.current('didEditEntry', { trackerProperty });\n\n // TODO: need to find a better place, or a better abstraction\n queryClient.invalidateQueries(['relation']);\n\n dispatch(submitSucceeded(cleanReceivedData(data)));\n\n dispatch(setStatus('resolved'));\n\n return Promise.resolve(data);\n } catch (err) {\n displayErrors(err);\n\n trackUsageRef.current('didNotEditEntry', { error: err, trackerProperty });\n\n dispatch(setStatus('resolved'));\n\n return Promise.reject(err);\n }\n },\n [put, cleanReceivedData, displayErrors, slug, dispatch, query, toggleNotification, queryClient]\n );\n\n // The publish and unpublish method could be refactored but let's leave the duplication for now\n const onUnpublish = useCallback(async () => {\n const endPoint = `/content-manager/single-types/${slug}/actions/unpublish`;\n\n dispatch(setStatus('unpublish-pending'));\n\n try {\n trackUsageRef.current('willUnpublishEntry');\n\n const { data } = await post(\n endPoint,\n {},\n {\n params,\n }\n );\n\n trackUsageRef.current('didUnpublishEntry');\n toggleNotification({\n type: 'success',\n message: { id: getTrad('success.record.unpublish') },\n });\n\n dispatch(submitSucceeded(cleanReceivedData(data)));\n\n dispatch(setStatus('resolved'));\n } catch (err) {\n dispatch(setStatus('resolved'));\n displayErrors(err);\n }\n }, [slug, dispatch, post, params, toggleNotification, cleanReceivedData, displayErrors]);\n\n return children({\n componentsDataStructure,\n contentTypeDataStructure,\n data,\n isCreatingEntry,\n isLoadingForData: isLoading,\n onDelete,\n onPost,\n onDraftRelationCheck,\n onPublish,\n onPut,\n onUnpublish,\n redirectionLink: '/',\n status,\n });\n};\n\nSingleTypeFormWrapper.propTypes = {\n allLayoutData: PropTypes.shape({\n components: PropTypes.object.isRequired,\n contentType: PropTypes.object.isRequired,\n }).isRequired,\n children: PropTypes.func.isRequired,\n slug: PropTypes.string.isRequired,\n};\n\nexport default memo(SingleTypeFormWrapper);\n","import React from 'react';\n\nfunction connect(WrappedComponent, select) {\n return (props) => {\n // eslint-disable-next-line react/prop-types\n const selectors = select();\n\n return <WrappedComponent {...props} {...selectors} />;\n };\n}\n\nexport default connect;\n","import { useCMEditViewDataManager } from '@strapi/helper-plugin';\nimport isEmpty from 'lodash/isEmpty';\n\nfunction useSelect() {\n const { hasDraftAndPublish, modifiedData } = useCMEditViewDataManager();\n\n let trackerProperty = {};\n\n if (hasDraftAndPublish) {\n const isDraft = isEmpty(modifiedData.publishedAt);\n\n trackerProperty = isDraft ? { status: 'draft' } : { status: 'published' };\n }\n\n return {\n hasDraftAndPublish,\n trackerProperty,\n };\n}\n\nexport default useSelect;\n","import React, { memo, useState } from 'react';\n\nimport { Button } from '@strapi/design-system';\nimport { ConfirmDialog, useAPIErrorHandler, useNotification } from '@strapi/helper-plugin';\nimport { Trash } from '@strapi/icons';\nimport isEqual from 'lodash/isEqual';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../../utils';\n\nimport { connect, select } from './utils';\n\nconst DeleteLink = ({ onDelete, trackerProperty }) => {\n const [displayDeleteConfirmation, setDisplayDeleteConfirmation] = useState(false);\n const [isModalConfirmButtonLoading, setIsModalConfirmButtonLoading] = useState(false);\n const { formatMessage } = useIntl();\n const { formatAPIError } = useAPIErrorHandler(getTrad);\n const toggleNotification = useNotification();\n\n const toggleWarningDelete = () => setDisplayDeleteConfirmation((prevState) => !prevState);\n\n const handleConfirmDelete = async () => {\n try {\n // Show the loading state\n setIsModalConfirmButtonLoading(true);\n\n await onDelete(trackerProperty);\n\n setIsModalConfirmButtonLoading(false);\n\n toggleWarningDelete();\n } catch (err) {\n setIsModalConfirmButtonLoading(false);\n toggleWarningDelete();\n toggleNotification({\n type: 'warning',\n message: formatAPIError(err),\n });\n }\n };\n\n return (\n <>\n <Button onClick={toggleWarningDelete} size=\"S\" startIcon={<Trash />} variant=\"danger-light\">\n {formatMessage({\n id: getTrad('containers.Edit.delete-entry'),\n defaultMessage: 'Delete this entry',\n })}\n </Button>\n\n <ConfirmDialog\n isConfirmButtonLoading={isModalConfirmButtonLoading}\n isOpen={displayDeleteConfirmation}\n onConfirm={handleConfirmDelete}\n onToggleDialog={toggleWarningDelete}\n />\n </>\n );\n};\n\nDeleteLink.propTypes = {\n onDelete: PropTypes.func.isRequired,\n trackerProperty: PropTypes.object.isRequired,\n};\n\nconst Memoized = memo(DeleteLink, isEqual);\n\nexport default connect(Memoized, select);\n","import React from 'react';\n\nfunction connect(WrappedComponent, select) {\n return (props) => {\n // eslint-disable-next-line react/prop-types\n const selectors = select();\n\n return <WrappedComponent {...props} {...selectors} />;\n };\n}\n\nexport default connect;\n","import { useCMEditViewDataManager } from '@strapi/helper-plugin';\n\nfunction useSelect() {\n const { initialData, hasDraftAndPublish } = useCMEditViewDataManager();\n\n const isPublished = initialData.publishedAt !== undefined && initialData.publishedAt !== null;\n\n return {\n hasDraftAndPublish,\n isPublished,\n };\n}\n\nexport default useSelect;\n","import React from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport { Dot } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { getTrad } from '../../../utils';\n\nimport { connect, select } from './utils';\n\nconst CustomBullet = styled(Dot)`\n width: ${pxToRem(6)};\n height: ${pxToRem(6)};\n * {\n fill: ${({ theme, $bulletColor }) => theme.colors[$bulletColor]};\n }\n`;\n\nconst DraftAndPublishBadge = ({ hasDraftAndPublish, isPublished }) => {\n const { formatMessage } = useIntl();\n\n if (!hasDraftAndPublish) {\n return null;\n }\n\n const colors = {\n draft: {\n textColor: 'secondary700',\n bulletColor: 'secondary600',\n box: {\n background: 'secondary100',\n borderColor: 'secondary200',\n },\n },\n published: {\n textColor: 'success700',\n bulletColor: 'success600',\n box: {\n background: 'success100',\n borderColor: 'success200',\n },\n },\n };\n const colorProps = isPublished ? colors.published : colors.draft;\n\n return (\n <Box\n hasRadius\n as=\"aside\"\n paddingTop={4}\n paddingBottom={4}\n paddingLeft={5}\n paddingRight={5}\n {...colorProps.box}\n >\n <Box as={Flex}>\n <CustomBullet $bulletColor={colorProps.bulletColor} />\n <Box paddingLeft={3}>\n <Typography textColor={colorProps.textColor}>\n {formatMessage({\n id: getTrad('containers.Edit.information.editing'),\n defaultMessage: 'Editing',\n })}\n \n </Typography>\n <Typography fontWeight=\"bold\" textColor={colorProps.textColor}>\n {isPublished &&\n formatMessage({\n id: getTrad('containers.Edit.information.publishedVersion'),\n defaultMessage: 'published version',\n })}\n {!isPublished &&\n formatMessage({\n id: getTrad('containers.Edit.information.draftVersion'),\n defaultMessage: 'draft version',\n })}\n </Typography>\n </Box>\n </Box>\n </Box>\n );\n};\n\nDraftAndPublishBadge.propTypes = {\n hasDraftAndPublish: PropTypes.bool.isRequired,\n isPublished: PropTypes.bool.isRequired,\n};\n\nexport default connect(DraftAndPublishBadge, select);\nexport { DraftAndPublishBadge };\n","import React from 'react';\n\nimport { Grid, GridItem } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\n\nimport FieldComponent from '../../../components/FieldComponent';\nimport Inputs from '../../../components/Inputs';\n\nconst GridRow = ({ columns, customFieldInputs }) => {\n return (\n <Grid gap={4}>\n {columns.map(({ fieldSchema, labelAction, metadatas, name, size, queryInfos }) => {\n const isComponent = fieldSchema.type === 'component';\n\n if (isComponent) {\n const { component, max, min, repeatable = false, required = false } = fieldSchema;\n\n return (\n <GridItem col={size} s={12} xs={12} key={component}>\n <FieldComponent\n componentUid={component}\n labelAction={labelAction}\n isRepeatable={repeatable}\n intlLabel={{\n id: metadatas.label,\n defaultMessage: metadatas.label,\n }}\n max={max}\n min={min}\n name={name}\n required={required}\n />\n </GridItem>\n );\n }\n\n return (\n <GridItem col={size} key={name} s={12} xs={12}>\n <Inputs\n size={size}\n fieldSchema={fieldSchema}\n keys={name}\n labelAction={labelAction}\n metadatas={metadatas}\n queryInfos={queryInfos}\n customFieldInputs={customFieldInputs}\n />\n </GridItem>\n );\n })}\n </Grid>\n );\n};\n\nGridRow.defaultProps = {\n customFieldInputs: {},\n};\n\nGridRow.propTypes = {\n columns: PropTypes.array.isRequired,\n customFieldInputs: PropTypes.object,\n};\n\nexport default GridRow;\n","import React from 'react';\n\nfunction connect(WrappedComponent, select) {\n return (props) => {\n // eslint-disable-next-line react/prop-types\n const selectors = select();\n\n return <WrappedComponent {...props} {...selectors} />;\n };\n}\n\nexport default connect;\n","import { useCMEditViewDataManager } from '@strapi/helper-plugin';\n\nfunction useSelect() {\n const {\n initialData,\n isCreatingEntry,\n isSingleType,\n status,\n layout,\n hasDraftAndPublish,\n modifiedData,\n onPublish,\n onUnpublish,\n publishConfirmation,\n onPublishPromptDismissal,\n } = useCMEditViewDataManager();\n\n return {\n initialData,\n isCreatingEntry,\n isSingleType,\n status,\n layout,\n hasDraftAndPublish,\n modifiedData,\n onPublish,\n onUnpublish,\n publishConfirmation,\n onPublishPromptDismissal,\n };\n}\n\nexport default useSelect;\n","import React, { memo, useState } from 'react';\n\nimport {\n Box,\n Button,\n Dialog,\n DialogBody,\n DialogFooter,\n Flex,\n HeaderLayout,\n Typography,\n} from '@strapi/design-system';\nimport { Link } from '@strapi/helper-plugin';\nimport { ArrowLeft, Check, ExclamationMarkCircle } from '@strapi/icons';\nimport get from 'lodash/get';\nimport isEmpty from 'lodash/isEmpty';\nimport isEqualFastCompare from 'lodash/isEqual';\nimport isEqual from 'lodash/isEqual';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { useHistory } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport { getTrad } from '../../../utils';\n\nimport { connect, select } from './utils';\n\n// TODO: replace with textAlign Typography props when available\nconst FlexTextAlign = styled(Flex)`\n text-align: center;\n`;\n\nconst Header = ({\n allowedActions: { canUpdate, canCreate, canPublish },\n initialData,\n isCreatingEntry,\n isSingleType,\n hasDraftAndPublish,\n layout,\n modifiedData,\n onPublish,\n onUnpublish,\n status,\n publishConfirmation: { show: showPublishConfirmation, draftCount },\n onPublishPromptDismissal,\n}) => {\n const { goBack } = useHistory();\n const [showWarningUnpublish, setWarningUnpublish] = useState(false);\n const { formatMessage } = useIntl();\n\n const currentContentTypeMainField = get(layout, ['settings', 'mainField'], 'id');\n const currentContentTypeName = get(layout, ['info', 'displayName'], 'NOT FOUND');\n const didChangeData =\n !isEqual(initialData, modifiedData) || (isCreatingEntry && !isEmpty(modifiedData));\n\n const createEntryIntlTitle = formatMessage({\n id: getTrad('containers.Edit.pluginHeader.title.new'),\n defaultMessage: 'Create an entry',\n });\n\n let title = createEntryIntlTitle;\n\n if (!isCreatingEntry && !isSingleType) {\n title = initialData[currentContentTypeMainField] || currentContentTypeName;\n }\n\n if (isSingleType) {\n title = currentContentTypeName;\n }\n\n let primaryAction = null;\n\n if (isCreatingEntry && canCreate) {\n primaryAction = (\n <Flex gap={2}>\n {hasDraftAndPublish && (\n <Button disabled startIcon={<Check />} variant=\"secondary\">\n {formatMessage({ id: 'app.utils.publish', defaultMessage: 'Publish' })}\n </Button>\n )}\n <Button disabled={!didChangeData} loading={status === 'submit-pending'} type=\"submit\">\n {formatMessage({\n id: getTrad('containers.Edit.submit'),\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n );\n }\n\n if (!isCreatingEntry && canUpdate) {\n const shouldShowPublishButton = hasDraftAndPublish && canPublish;\n const isPublished = !isEmpty(initialData.publishedAt);\n const isPublishButtonLoading = isPublished\n ? status === 'unpublish-pending'\n : status === 'publish-pending';\n const pubishButtonLabel = isPublished\n ? { id: 'app.utils.unpublish', defaultMessage: 'Unpublish' }\n : { id: 'app.utils.publish', defaultMessage: 'Publish' };\n\n const onClick = isPublished ? () => setWarningUnpublish(true) : () => onPublish();\n\n primaryAction = (\n <Flex>\n {shouldShowPublishButton && (\n <Button\n disabled={didChangeData}\n loading={isPublishButtonLoading}\n onClick={onClick}\n startIcon={<Check />}\n variant=\"secondary\"\n >\n {formatMessage(pubishButtonLabel)}\n </Button>\n )}\n <Box paddingLeft={shouldShowPublishButton ? 2 : 0}>\n <Button disabled={!didChangeData} loading={status === 'submit-pending'} type=\"submit\">\n {formatMessage({\n id: getTrad('containers.Edit.submit'),\n defaultMessage: 'Save',\n })}\n </Button>\n </Box>\n </Flex>\n );\n }\n\n const toggleWarningUnpublish = () => setWarningUnpublish((prevState) => !prevState);\n\n const handleUnpublish = () => {\n toggleWarningUnpublish();\n onUnpublish();\n };\n\n const subtitle = `${formatMessage({\n id: getTrad('api.id'),\n defaultMessage: 'API ID ',\n })} : ${layout.apiID}`;\n\n return (\n <>\n <HeaderLayout\n title={title.toString()}\n primaryAction={primaryAction}\n subtitle={subtitle}\n navigationAction={\n <Link\n startIcon={<ArrowLeft />}\n // Needed in order to redirect the user with the correct search params\n // Since parts is using a link from react-router-dom the best way to do it is to disable the\n // event\n onClick={(e) => {\n e.preventDefault();\n goBack();\n }}\n to=\"/\"\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n <Dialog\n onClose={toggleWarningUnpublish}\n title=\"Confirmation\"\n labelledBy=\"confirmation\"\n describedBy=\"confirm-description\"\n isOpen={showWarningUnpublish}\n >\n <DialogBody icon={<ExclamationMarkCircle />}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Flex justifyContent=\"center\" style={{ textAlign: 'center' }}>\n <Typography id=\"confirm-description\">\n {formatMessage(\n {\n id: getTrad('popUpWarning.warning.unpublish'),\n defaultMessage:\n 'Unpublish this content will automatically change it to a draft.',\n },\n {\n br: () => <br />,\n }\n )}\n </Typography>\n </Flex>\n <Flex justifyContent=\"center\" style={{ textAlign: 'center' }}>\n <Typography id=\"confirm-description\">\n {formatMessage({\n id: getTrad('popUpWarning.warning.unpublish-question'),\n defaultMessage: 'Are you sure you want to unpublish it?',\n })}\n </Typography>\n </Flex>\n </Flex>\n </DialogBody>\n <DialogFooter\n startAction={\n <Button onClick={toggleWarningUnpublish} variant=\"tertiary\">\n {formatMessage({\n id: 'components.popUpWarning.button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n }\n endAction={\n <Button variant=\"danger-light\" onClick={handleUnpublish}>\n {formatMessage({\n id: 'components.popUpWarning.button.confirm',\n defaultMessage: 'Confirm',\n })}\n </Button>\n }\n />\n </Dialog>\n <Dialog\n onClose={onPublishPromptDismissal}\n title={formatMessage({\n id: getTrad(`popUpWarning.warning.has-draft-relations.title`),\n defaultMessage: 'Confirmation',\n })}\n labelledBy=\"confirmation\"\n describedBy=\"confirm-description\"\n isOpen={showPublishConfirmation}\n >\n <DialogBody icon={<ExclamationMarkCircle />}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <FlexTextAlign justifyContent=\"center\">\n <Typography id=\"confirm-description\">\n {draftCount}\n {formatMessage(\n {\n id: getTrad(`popUpwarning.warning.has-draft-relations.message`),\n defaultMessage:\n '<b>{count, plural, one { relation is} other { relations are}}</b> not published yet and might lead to unexpected behavior.',\n },\n {\n b: (chunks) => <Typography fontWeight=\"bold\">{chunks}</Typography>,\n count: draftCount,\n }\n )}\n </Typography>\n </FlexTextAlign>\n <FlexTextAlign justifyContent=\"center\">\n <Typography id=\"confirm-description\">\n {formatMessage({\n id: getTrad('popUpWarning.warning.publish-question'),\n defaultMessage: 'Do you still want to publish?',\n })}\n </Typography>\n </FlexTextAlign>\n </Flex>\n </DialogBody>\n <DialogFooter\n startAction={\n <Button onClick={onPublishPromptDismissal} variant=\"tertiary\">\n {formatMessage({\n id: 'components.popUpWarning.button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n }\n endAction={\n <Button variant=\"success\" onClick={onPublish}>\n {formatMessage({\n id: getTrad('popUpwarning.warning.has-draft-relations.button-confirm'),\n defaultMessage: 'Publish',\n })}\n </Button>\n }\n />\n </Dialog>\n </>\n );\n};\n\nHeader.propTypes = {\n allowedActions: PropTypes.shape({\n canUpdate: PropTypes.bool.isRequired,\n canCreate: PropTypes.bool.isRequired,\n canPublish: PropTypes.bool.isRequired,\n }).isRequired,\n initialData: PropTypes.object.isRequired,\n isCreatingEntry: PropTypes.bool.isRequired,\n isSingleType: PropTypes.bool.isRequired,\n status: PropTypes.string.isRequired,\n layout: PropTypes.object.isRequired,\n hasDraftAndPublish: PropTypes.bool.isRequired,\n modifiedData: PropTypes.object.isRequired,\n onPublish: PropTypes.func.isRequired,\n onUnpublish: PropTypes.func.isRequired,\n publishConfirmation: PropTypes.shape({\n show: PropTypes.bool.isRequired,\n draftCount: PropTypes.number.isRequired,\n }).isRequired,\n onPublishPromptDismissal: PropTypes.func.isRequired,\n};\n\nconst Memoized = memo(Header, isEqualFastCompare);\n\nexport default connect(Memoized, select);\nexport { Header };\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useEffect } from 'react';\n\n/**\n *\n * @param {import('react').EffectCallback} effect\n * @returns void\n */\nexport const useOnce = (effect) => useEffect(effect, emptyDeps);\n\n/**\n * @type {import('react').DependencyList}\n */\nconst emptyDeps = [];\n","const msPerMinute = 60 * 1000;\nconst msPerHour = msPerMinute * 60;\nconst msPerDay = msPerHour * 24;\nconst msPerMonth = msPerDay * 30;\nconst msPerYear = msPerDay * 365;\n\nconst getUnits = (value) => {\n if (value < msPerMinute) {\n return { unit: 'second', value: -Math.round(value / 1000) };\n }\n if (value < msPerHour) {\n return { unit: 'minute', value: -Math.round(value / msPerMinute) };\n }\n if (value < msPerDay) {\n return { unit: 'hour', value: -Math.round(value / msPerHour) };\n }\n if (value < msPerMonth) {\n return { unit: 'day', value: -Math.round(value / msPerDay) };\n }\n if (value < msPerYear) {\n return { unit: 'month', value: -Math.round(value / msPerMonth) };\n }\n\n return { unit: 'year', value: -Math.round(value / msPerYear) };\n};\n\nexport default getUnits;\n","import React, { useRef } from 'react';\n\nimport { Box, Divider, Flex, Typography } from '@strapi/design-system';\nimport { useCMEditViewDataManager } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad, getDisplayName } from '../../../utils';\n\nimport getUnits from './utils/getUnits';\n\nconst Title = () => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Typography variant=\"sigma\" textColor=\"neutral600\" id=\"additional-information\">\n {formatMessage({\n id: getTrad('containers.Edit.information'),\n defaultMessage: 'Information',\n })}\n </Typography>\n\n <Box>\n <Divider />\n </Box>\n </Flex>\n );\n};\n\nconst KeyValuePair = ({ label, value }) => {\n return (\n <Flex justifyContent=\"space-between\">\n <Typography as=\"dt\" fontWeight=\"bold\" textColor=\"neutral800\" variant=\"pi\">\n {label}\n </Typography>\n <Typography as=\"dd\" variant=\"pi\" textColor=\"neutral600\">\n {value}\n </Typography>\n </Flex>\n );\n};\n\nKeyValuePair.defaultProps = {\n value: '-',\n};\n\nKeyValuePair.propTypes = {\n label: PropTypes.string.isRequired,\n value: PropTypes.string,\n};\n\nconst Body = () => {\n const { formatMessage, formatRelativeTime } = useIntl();\n const { initialData, isCreatingEntry } = useCMEditViewDataManager();\n const currentTime = useRef(Date.now());\n\n const getFieldInfo = (atField, byField) => {\n const displayName = initialData[byField]\n ? getDisplayName(initialData[byField], formatMessage)\n : '-';\n const timestamp = initialData[atField] ? new Date(initialData[atField]).getTime() : Date.now();\n const elapsed = timestamp - currentTime.current;\n const { unit, value } = getUnits(-elapsed);\n\n return {\n at: formatRelativeTime(value, unit, { numeric: 'auto' }),\n by: isCreatingEntry ? '-' : displayName,\n };\n };\n\n const updated = getFieldInfo('updatedAt', 'updatedBy');\n const created = getFieldInfo('createdAt', 'createdBy');\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2} as=\"dl\">\n <KeyValuePair\n label={formatMessage({\n id: getTrad('containers.Edit.information.created'),\n defaultMessage: 'Created',\n })}\n value={created.at}\n />\n\n <KeyValuePair\n label={formatMessage({\n id: getTrad('containers.Edit.information.by'),\n defaultMessage: 'By',\n })}\n value={created.by}\n />\n </Flex>\n\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2} as=\"dl\">\n <KeyValuePair\n label={formatMessage({\n id: getTrad('containers.Edit.information.lastUpdate'),\n defaultMessage: 'Last update',\n })}\n value={updated.at}\n />\n\n <KeyValuePair\n label={formatMessage({\n id: getTrad('containers.Edit.information.by'),\n defaultMessage: 'By',\n })}\n value={updated.by}\n />\n </Flex>\n </Flex>\n );\n};\n\nconst Root = ({ children }) => {\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n {children}\n </Flex>\n );\n};\n\nRoot.propTypes = {\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired,\n};\n\nexport const Information = {\n Root,\n Title,\n Body,\n};\n","import React from 'react';\n\nimport { Information } from '../Information';\n\nexport function InformationBoxCE() {\n return (\n <Information.Root>\n <Information.Title />\n <Information.Body />\n </Information.Root>\n );\n}\n","import get from 'lodash/get';\nimport isEmpty from 'lodash/isEmpty';\n\nconst createAttributesLayout = (currentContentTypeLayoutData) => {\n if (!currentContentTypeLayoutData.layouts) {\n return [];\n }\n\n const currentLayout = currentContentTypeLayoutData.layouts.edit;\n const attributes = currentContentTypeLayoutData.attributes;\n\n const getType = (name) => get(attributes, [name, 'type'], '');\n\n let currentRowIndex = 0;\n const newLayout = [];\n\n currentLayout.forEach((row) => {\n const hasDynamicZone = row.some(({ name }) => getType(name) === 'dynamiczone');\n\n if (!newLayout[currentRowIndex]) {\n newLayout[currentRowIndex] = [];\n }\n\n if (hasDynamicZone) {\n currentRowIndex = currentRowIndex === 0 && isEmpty(newLayout[0]) ? 0 : currentRowIndex + 1;\n\n if (!newLayout[currentRowIndex]) {\n newLayout[currentRowIndex] = [];\n }\n newLayout[currentRowIndex].push(row);\n\n currentRowIndex += 1;\n } else {\n newLayout[currentRowIndex].push(row);\n }\n });\n\n return newLayout.filter((arr) => arr.length > 0);\n};\n\nexport default createAttributesLayout;\n","const getCustomFieldUidsFromLayout = (layout) => {\n if (!layout) return [];\n // Get all the fields on the content-type and its components\n const allFields = [\n ...layout.contentType.layouts.edit,\n ...Object.values(layout.components).flatMap((component) => component.layouts.edit),\n ].flat();\n // Filter that down to custom fields and map the uids\n const customFieldUids = allFields\n .filter((field) => field.fieldSchema.customField)\n .map((customField) => customField.fieldSchema.customField);\n // Make sure the list is unique\n const uniqueCustomFieldUids = [...new Set(customFieldUids)];\n\n return uniqueCustomFieldUids;\n};\n\nexport default getCustomFieldUidsFromLayout;\n","import { findMatchingPermissions } from '@strapi/helper-plugin';\nimport flatMap from 'lodash/flatMap';\nimport uniq from 'lodash/uniq';\n\nconst getFieldsActionMatchingPermissions = (userPermissions, slug) => {\n const getMatchingPermissions = (action) => {\n const matched = findMatchingPermissions(userPermissions, [\n {\n action: `plugin::content-manager.explorer.${action}`,\n subject: slug,\n },\n ]);\n\n return uniq(flatMap(matched, 'properties.fields'));\n };\n\n return {\n createActionAllowedFields: getMatchingPermissions('create'),\n readActionAllowedFields: getMatchingPermissions('read'),\n updateActionAllowedFields: getMatchingPermissions('update'),\n };\n};\n\nexport default getFieldsActionMatchingPermissions;\n","import { createSelector } from '@reduxjs/toolkit';\n\nimport { createAttributesLayout, getCustomFieldUidsFromLayout } from './utils';\n\nconst selectCurrentLayout = (state) => state['content-manager_editViewLayoutManager'].currentLayout;\n\nconst selectAttributesLayout = createSelector(selectCurrentLayout, (layout) =>\n createAttributesLayout(layout?.contentType ?? {})\n);\n\nconst selectCustomFieldUids = createSelector(selectCurrentLayout, (layout) =>\n getCustomFieldUidsFromLayout(layout)\n);\n\nexport { selectAttributesLayout, selectCurrentLayout, selectCustomFieldUids };\n","import * as React from 'react';\n\nimport { Main, ContentLayout, Grid, GridItem, Flex, Box } from '@strapi/design-system';\nimport {\n CheckPermissions,\n LinkButton,\n LoadingIndicatorPage,\n useNotification,\n useTracking,\n} from '@strapi/helper-plugin';\nimport { Layer, Pencil } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\nimport { useLocation } from 'react-router-dom';\n\nimport { useEnterprise } from '../../../hooks/useEnterprise';\nimport { selectAdminPermissions } from '../../../selectors';\nimport { InjectionZone } from '../../../shared/components/InjectionZone';\nimport CollectionTypeFormWrapper from '../../components/CollectionTypeFormWrapper';\nimport { DynamicZone } from '../../components/DynamicZone';\nimport EditViewDataManagerProvider from '../../components/EditViewDataManagerProvider';\nimport SingleTypeFormWrapper from '../../components/SingleTypeFormWrapper';\nimport useLazyComponents from '../../hooks/useLazyComponents';\nimport { getTrad } from '../../utils';\n\nimport DeleteLink from './DeleteLink';\nimport DraftAndPublishBadge from './DraftAndPublishBadge';\nimport GridRow from './GridRow';\nimport Header from './Header';\nimport { useOnce } from './hooks/useOnce';\nimport { InformationBoxCE } from './InformationBox';\nimport { selectCurrentLayout, selectAttributesLayout, selectCustomFieldUids } from './selectors';\nimport { getFieldsActionMatchingPermissions } from './utils';\n\n// TODO: this seems suspicious\nconst CTB_PERMISSIONS = [{ action: 'plugin::content-type-builder.read', subject: null }];\n\n/* eslint-disable react/no-array-index-key */\nconst EditView = ({ allowedActions, isSingleType, goBack, slug, id, origin, userPermissions }) => {\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const permissions = useSelector(selectAdminPermissions);\n const location = useLocation();\n const toggleNotification = useNotification();\n const Information = useEnterprise(\n InformationBoxCE,\n async () =>\n (await import('../../../../../ee/admin/src/content-manager/pages/EditView/InformationBox'))\n .InformationBoxEE\n );\n\n useOnce(() => {\n /**\n * We only ever want to fire the notification once otherwise\n * whenever the app re-renders it'll pop up regardless of\n * what we do because the state comes from react-router-dom\n */\n if (location?.state && 'error' in location.state) {\n toggleNotification({\n type: 'warning',\n message: location.state.error,\n timeout: 5000,\n });\n }\n });\n\n const { layout, formattedContentTypeLayout, customFieldUids } = useSelector((state) => ({\n layout: selectCurrentLayout(state),\n formattedContentTypeLayout: selectAttributesLayout(state),\n customFieldUids: selectCustomFieldUids(state),\n }));\n\n const { isLazyLoading, lazyComponentStore } = useLazyComponents(customFieldUids);\n\n const { createActionAllowedFields, readActionAllowedFields, updateActionAllowedFields } =\n getFieldsActionMatchingPermissions(userPermissions, slug);\n\n const configurationPermissions = isSingleType\n ? permissions.contentManager.singleTypesConfigurations\n : permissions.contentManager.collectionTypesConfigurations;\n\n // // FIXME when changing the routing\n const configurationsURL = `/content-manager/${\n isSingleType ? 'singleType' : 'collectionType'\n }/${slug}/configurations/edit`;\n\n const DataManagementWrapper = isSingleType ? SingleTypeFormWrapper : CollectionTypeFormWrapper;\n\n // Check if a block is a dynamic zone\n const isDynamicZone = (block) => {\n return block.every((subBlock) => {\n return subBlock.every((obj) => obj.fieldSchema.type === 'dynamiczone');\n });\n };\n\n if (isLazyLoading) {\n return <LoadingIndicatorPage />;\n }\n\n // wait until the EE component is fully loaded before rendering, to prevent flickering\n if (!Information) {\n return null;\n }\n\n return (\n <DataManagementWrapper allLayoutData={layout} slug={slug} id={id} origin={origin}>\n {({\n componentsDataStructure,\n contentTypeDataStructure,\n data,\n isCreatingEntry,\n isLoadingForData,\n onDelete,\n onPost,\n onPublish,\n onDraftRelationCheck,\n onPut,\n onUnpublish,\n redirectionLink,\n status,\n }) => {\n return (\n <EditViewDataManagerProvider\n allowedActions={allowedActions}\n allLayoutData={layout}\n createActionAllowedFields={createActionAllowedFields}\n componentsDataStructure={componentsDataStructure}\n contentTypeDataStructure={contentTypeDataStructure}\n from={redirectionLink}\n initialValues={data}\n isCreatingEntry={isCreatingEntry}\n isLoadingForData={isLoadingForData}\n isSingleType={isSingleType}\n onPost={onPost}\n onPublish={onPublish}\n onDraftRelationCheck={onDraftRelationCheck}\n onPut={onPut}\n onUnpublish={onUnpublish}\n readActionAllowedFields={readActionAllowedFields}\n redirectToPreviousPage={goBack}\n slug={slug}\n status={status}\n updateActionAllowedFields={updateActionAllowedFields}\n >\n <Main aria-busy={status !== 'resolved'}>\n <Header allowedActions={allowedActions} />\n <ContentLayout>\n <Grid gap={4}>\n <GridItem col={9} s={12}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {formattedContentTypeLayout.map((row, index) => {\n if (isDynamicZone(row)) {\n const {\n 0: {\n 0: { name, fieldSchema, metadatas, labelAction },\n },\n } = row;\n\n return (\n <Box key={index}>\n <Grid gap={4}>\n <GridItem col={12} s={12} xs={12}>\n <DynamicZone\n name={name}\n fieldSchema={fieldSchema}\n labelAction={labelAction}\n metadatas={metadatas}\n />\n </GridItem>\n </Grid>\n </Box>\n );\n }\n\n return (\n <Box\n key={index}\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n paddingLeft={6}\n paddingRight={6}\n paddingTop={6}\n paddingBottom={6}\n borderColor=\"neutral150\"\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {row.map((grid, gridRowIndex) => (\n <GridRow\n columns={grid}\n customFieldInputs={lazyComponentStore}\n key={gridRowIndex}\n />\n ))}\n </Flex>\n </Box>\n );\n })}\n </Flex>\n </GridItem>\n <GridItem col={3} s={12}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <DraftAndPublishBadge />\n <Box\n as=\"aside\"\n aria-labelledby=\"additional-information\"\n background=\"neutral0\"\n borderColor=\"neutral150\"\n hasRadius\n paddingBottom={4}\n paddingLeft={4}\n paddingRight={4}\n paddingTop={6}\n shadow=\"tableShadow\"\n >\n <Information />\n <InjectionZone area=\"contentManager.editView.informations\" />\n </Box>\n <Box as=\"aside\" aria-labelledby=\"links\">\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <InjectionZone area=\"contentManager.editView.right-links\" slug={slug} />\n {slug !== 'strapi::administrator' && (\n <CheckPermissions permissions={CTB_PERMISSIONS}>\n <LinkButton\n onClick={() => {\n trackUsage('willEditEditLayout');\n }}\n size=\"S\"\n startIcon={<Pencil />}\n style={{ width: '100%' }}\n to={`/plugins/content-type-builder/content-types/${slug}`}\n variant=\"secondary\"\n >\n {formatMessage({\n id: getTrad('link-to-ctb'),\n defaultMessage: 'Edit the model',\n })}\n </LinkButton>\n </CheckPermissions>\n )}\n\n <CheckPermissions permissions={configurationPermissions}>\n <LinkButton\n size=\"S\"\n startIcon={<Layer />}\n style={{ width: '100%' }}\n to={configurationsURL}\n variant=\"secondary\"\n >\n {formatMessage({\n id: 'app.links.configure-view',\n defaultMessage: 'Configure the view',\n })}\n </LinkButton>\n </CheckPermissions>\n\n {allowedActions.canDelete && !isCreatingEntry && (\n <DeleteLink onDelete={onDelete} />\n )}\n </Flex>\n </Box>\n </Flex>\n </GridItem>\n </Grid>\n </ContentLayout>\n </Main>\n </EditViewDataManagerProvider>\n );\n }}\n </DataManagementWrapper>\n );\n};\n\nEditView.defaultProps = {\n id: null,\n isSingleType: false,\n origin: null,\n userPermissions: [],\n};\n\nEditView.propTypes = {\n allowedActions: PropTypes.shape({\n canRead: PropTypes.bool.isRequired,\n canUpdate: PropTypes.bool.isRequired,\n canCreate: PropTypes.bool.isRequired,\n canDelete: PropTypes.bool.isRequired,\n }).isRequired,\n id: PropTypes.string,\n isSingleType: PropTypes.bool,\n goBack: PropTypes.func.isRequired,\n origin: PropTypes.string,\n slug: PropTypes.string.isRequired,\n userPermissions: PropTypes.array,\n};\n\nexport default EditView;\n","import React, { memo, useMemo } from 'react';\n\nimport { LoadingIndicatorPage, useRBAC } from '@strapi/helper-plugin';\nimport isEqual from 'lodash/isEqual';\nimport PropTypes from 'prop-types';\n\nimport { generatePermissionsObject } from '../../utils';\nimport EditView from '../EditView';\n\nconst Permissions = (props) => {\n const viewPermissions = useMemo(() => generatePermissionsObject(props.slug), [props.slug]);\n const { isLoading, allowedActions } = useRBAC(viewPermissions, props.userPermissions);\n\n if (isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n return <EditView {...props} allowedActions={allowedActions} />;\n};\n\nPermissions.defaultProps = {\n permissions: [],\n};\n\nPermissions.propTypes = {\n permissions: PropTypes.array,\n slug: PropTypes.string.isRequired,\n userPermissions: PropTypes.array.isRequired,\n};\n\n// This avoids the components to rerender on params change causing multiple requests to be fired\nexport default memo(Permissions, isEqual);\n","import React, { useEffect } from 'react';\n\nimport { LoadingIndicatorPage, useQueryParams, useStrapiApp } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { HOOKS } from '../../../constants';\nimport { useSyncRbac } from '../../hooks';\n\nimport { resetProps, setLayout } from './actions';\nimport Permissions from './Permissions';\nimport selectLayout from './selectors';\n\nconst { MUTATE_EDIT_VIEW_LAYOUT } = HOOKS;\n\nconst EditViewLayoutManager = ({ layout, ...rest }) => {\n const currentLayout = useSelector(selectLayout);\n const dispatch = useDispatch();\n const [{ query }] = useQueryParams();\n const { runHookWaterfall } = useStrapiApp();\n const { permissions, isValid: isValidPermissions } = useSyncRbac(query, rest.slug, 'editView');\n\n useEffect(() => {\n // Allow the plugins to extend the edit view layout\n const mutatedLayout = runHookWaterfall(MUTATE_EDIT_VIEW_LAYOUT, { layout, query });\n\n dispatch(setLayout(mutatedLayout.layout, query));\n\n return () => {\n dispatch(resetProps());\n };\n }, [layout, dispatch, query, runHookWaterfall]);\n\n if (!currentLayout || !isValidPermissions) {\n return <LoadingIndicatorPage />;\n }\n\n return <Permissions {...rest} userPermissions={permissions} />;\n};\n\nEditViewLayoutManager.propTypes = {\n layout: PropTypes.shape({\n components: PropTypes.object.isRequired,\n contentType: PropTypes.shape({\n uid: PropTypes.string.isRequired,\n settings: PropTypes.object.isRequired,\n metadatas: PropTypes.object.isRequired,\n options: PropTypes.object.isRequired,\n attributes: PropTypes.object.isRequired,\n }).isRequired,\n }).isRequired,\n};\n\nexport default EditViewLayoutManager;\n","import React from 'react';\n\nimport {\n Button,\n Flex,\n Grid,\n GridItem,\n ModalBody,\n ModalFooter,\n ModalHeader,\n ModalLayout,\n TextInput,\n ToggleInput,\n Typography,\n} from '@strapi/design-system';\nimport upperFirst from 'lodash/upperFirst';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport FieldTypeIcon from '../../../components/FieldTypeIcon';\nimport { getTrad } from '../../../utils';\n\nconst HeaderContainer = styled(Flex)`\n svg {\n width: ${32 / 16}rem;\n height: ${24 / 16}rem;\n margin-right: ${({ theme }) => theme.spaces[3]};\n }\n`;\n\nexport const EditFieldForm = ({\n attributes,\n fieldForm,\n fieldToEdit,\n onCloseModal,\n onChangeEditLabel,\n onSubmit,\n type,\n}) => {\n const { formatMessage } = useIntl();\n\n const relationType = attributes[fieldToEdit].relationType;\n\n let shouldDisplaySortToggle = !['media', 'relation'].includes(type);\n\n if (['oneWay', 'oneToOne', 'manyToOne'].includes(relationType)) {\n shouldDisplaySortToggle = true;\n }\n\n return (\n <ModalLayout onClose={onCloseModal} labelledBy=\"title\">\n <form onSubmit={onSubmit}>\n <ModalHeader>\n <HeaderContainer>\n <FieldTypeIcon type={type} />\n <Typography fontWeight=\"bold\" textColor=\"neutral800\" as=\"h2\" id=\"title\">\n {formatMessage(\n {\n id: getTrad('containers.ListSettingsView.modal-form.edit-label'),\n defaultMessage: 'Edit {fieldName}',\n },\n { fieldName: upperFirst(fieldToEdit) }\n )}\n </Typography>\n </HeaderContainer>\n </ModalHeader>\n <ModalBody>\n <Grid gap={4}>\n <GridItem s={12} col={6}>\n <TextInput\n id=\"label-input\"\n label={formatMessage({\n id: getTrad('form.Input.label'),\n defaultMessage: 'Label',\n })}\n name=\"label\"\n onChange={(e) => onChangeEditLabel(e)}\n value={fieldForm.label}\n hint={formatMessage({\n id: getTrad('form.Input.label.inputDescription'),\n defaultMessage: \"This value overrides the label displayed in the table's head\",\n })}\n />\n </GridItem>\n {shouldDisplaySortToggle && (\n <GridItem s={12} col={6}>\n <ToggleInput\n data-testid=\"Enable sort on this field\"\n checked={fieldForm.sortable}\n label={formatMessage({\n id: getTrad('form.Input.sort.field'),\n defaultMessage: 'Enable sort on this field',\n })}\n name=\"sortable\"\n onChange={(e) =>\n onChangeEditLabel({ target: { name: 'sortable', value: e.target.checked } })\n }\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'on',\n })}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'off',\n })}\n />\n </GridItem>\n )}\n </Grid>\n </ModalBody>\n <ModalFooter\n startActions={\n <Button onClick={onCloseModal} variant=\"tertiary\">\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n }\n endActions={\n <Button type=\"submit\">\n {formatMessage({ id: 'global.finish', defaultMessage: 'Finish' })}\n </Button>\n }\n />\n </form>\n </ModalLayout>\n );\n};\n\nEditFieldForm.propTypes = {\n attributes: PropTypes.objectOf(\n PropTypes.shape({\n relationType: PropTypes.string,\n })\n ).isRequired,\n fieldForm: PropTypes.shape({\n label: PropTypes.string,\n sortable: PropTypes.bool,\n }).isRequired,\n fieldToEdit: PropTypes.string.isRequired,\n onChangeEditLabel: PropTypes.func.isRequired,\n onCloseModal: PropTypes.func.isRequired,\n onSubmit: PropTypes.func.isRequired,\n type: PropTypes.string.isRequired,\n};\n","import React from 'react';\n\nimport {\n Box,\n Flex,\n Grid,\n GridItem,\n Option,\n Select,\n ToggleInput,\n Typography,\n} from '@strapi/design-system';\nimport { useCollator } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { useEnterprise } from '../../../../hooks/useEnterprise';\nimport { getTrad } from '../../../utils';\n\nexport const Settings = ({\n contentTypeOptions,\n modifiedData,\n onChange,\n sortOptions: sortOptionsCE,\n}) => {\n const { formatMessage, locale } = useIntl();\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n const sortOptions = useEnterprise(\n sortOptionsCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/content-manager/pages/ListSettingsView/constants'\n )\n ).REVIEW_WORKFLOW_STAGE_SORT_OPTION_NAME,\n {\n combine(ceOptions, eeOption) {\n return [...ceOptions, { ...eeOption, label: formatMessage(eeOption.label) }];\n },\n\n defaultValue: sortOptionsCE,\n\n enabled: !!contentTypeOptions?.reviewWorkflows,\n }\n );\n\n const sortOptionsSorted = sortOptions.sort((a, b) => formatter.compare(a.label, b.label));\n const { settings } = modifiedData;\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: getTrad('containers.SettingPage.settings'),\n defaultMessage: 'Settings',\n })}\n </Typography>\n\n <Flex justifyContent=\"space-between\" gap={4}>\n <Box width=\"100%\">\n <ToggleInput\n label={formatMessage({\n id: getTrad('form.Input.search'),\n defaultMessage: 'Enable search',\n })}\n onChange={(e) => {\n onChange({ target: { name: 'settings.searchable', value: e.target.checked } });\n }}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'on',\n })}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'off',\n })}\n name=\"settings.searchable\"\n checked={settings.searchable}\n />\n </Box>\n\n <Box width=\"100%\">\n <ToggleInput\n label={formatMessage({\n id: getTrad('form.Input.filters'),\n defaultMessage: 'Enable filters',\n })}\n onChange={(e) => {\n onChange({ target: { name: 'settings.filterable', value: e.target.checked } });\n }}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'on',\n })}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'off',\n })}\n name=\"settings.filterable\"\n checked={settings.filterable}\n />\n </Box>\n\n <Box width=\"100%\">\n <ToggleInput\n label={formatMessage({\n id: getTrad('form.Input.bulkActions'),\n defaultMessage: 'Enable bulk actions',\n })}\n onChange={(e) => {\n onChange({ target: { name: 'settings.bulkable', value: e.target.checked } });\n }}\n onLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.on-label',\n defaultMessage: 'on',\n })}\n offLabel={formatMessage({\n id: 'app.components.ToggleCheckbox.off-label',\n defaultMessage: 'off',\n })}\n name=\"settings.bulkable\"\n checked={settings.bulkable}\n />\n </Box>\n </Flex>\n\n <Grid gap={4}>\n <GridItem s={12} col={6}>\n <Select\n label={formatMessage({\n id: getTrad('form.Input.pageEntries'),\n defaultMessage: 'Entries per page',\n })}\n hint={formatMessage({\n id: getTrad('form.Input.pageEntries.inputDescription'),\n defaultMessage:\n 'Note: You can override this value in the Collection Type settings page.',\n })}\n onChange={(value) => onChange({ target: { name: 'settings.pageSize', value } })}\n name=\"settings.pageSize\"\n value={modifiedData.settings.pageSize || ''}\n >\n {[10, 20, 50, 100].map((pageSize) => (\n <Option key={pageSize} value={pageSize}>\n {pageSize}\n </Option>\n ))}\n </Select>\n </GridItem>\n <GridItem s={12} col={3}>\n <Select\n label={formatMessage({\n id: getTrad('form.Input.defaultSort'),\n defaultMessage: 'Default sort attribute',\n })}\n onChange={(value) => onChange({ target: { name: 'settings.defaultSortBy', value } })}\n name=\"settings.defaultSortBy\"\n value={modifiedData.settings.defaultSortBy || ''}\n >\n {sortOptionsSorted.map(({ value, label }) => (\n <Option key={value} value={value}>\n {label}\n </Option>\n ))}\n </Select>\n </GridItem>\n <GridItem s={12} col={3}>\n <Select\n label={formatMessage({\n id: getTrad('form.Input.sort.order'),\n defaultMessage: 'Default sort order',\n })}\n onChange={(value) => onChange({ target: { name: 'settings.defaultSortOrder', value } })}\n name=\"settings.defaultSortOrder\"\n value={modifiedData.settings.defaultSortOrder || ''}\n >\n {['ASC', 'DESC'].map((order) => (\n <Option key={order} value={order}>\n {order}\n </Option>\n ))}\n </Select>\n </GridItem>\n </Grid>\n </Flex>\n );\n};\n\nSettings.defaultProps = {\n modifiedData: {},\n sortOptions: [],\n};\n\nSettings.propTypes = {\n contentTypeOptions: PropTypes.object.isRequired,\n modifiedData: PropTypes.object,\n onChange: PropTypes.func.isRequired,\n sortOptions: PropTypes.arrayOf(\n PropTypes.shape({\n value: PropTypes.string,\n label: PropTypes.string,\n }).isRequired\n ),\n};\n","import React from 'react';\n\nimport { Flex, Typography } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport { Cross, Drag, Pencil } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nconst ActionBox = styled(Flex)`\n height: ${({ theme }) => theme.spaces[7]};\n\n &:last-child {\n padding: 0 ${({ theme }) => theme.spaces[3]};\n }\n`;\n\nconst DragButton = styled(ActionBox)`\n border-right: 1px solid\n ${({ theme, isSibling }) => (isSibling ? theme.colors.neutral150 : theme.colors.primary200)};\n\n svg {\n width: ${12 / 16}rem;\n height: ${12 / 16}rem;\n }\n`;\n\nconst FieldContainer = styled(Flex)`\n border: 1px solid\n ${({ theme, isSibling }) => (isSibling ? theme.colors.neutral150 : theme.colors.primary200)};\n\n svg {\n width: ${10 / 16}rem;\n height: ${10 / 16}rem;\n\n path {\n fill: ${({ theme, isSibling }) => (isSibling ? undefined : theme.colors.primary600)};\n }\n }\n`;\n\nconst TypographyMaxWidth = styled(Typography)`\n max-width: ${72 / 16}rem;\n`;\n\nexport function CardDragPreview({ labelField, transparent, isSibling }) {\n return (\n <FieldContainer\n background={isSibling ? 'neutral100' : 'primary100'}\n display=\"inline-flex\"\n gap={3}\n hasRadius\n justifyContent=\"space-between\"\n transparent={transparent}\n isSibling={isSibling}\n max-height={pxToRem(32)}\n maxWidth=\"min-content\"\n opacity={transparent ? 0 : 1}\n >\n <Flex gap={3}>\n <DragButton alignItems=\"center\" cursor=\"all-scroll\" padding={3}>\n <Drag />\n </DragButton>\n\n <TypographyMaxWidth\n textColor={isSibling ? undefined : 'primary600'}\n fontWeight=\"bold\"\n ellipsis\n >\n {labelField}\n </TypographyMaxWidth>\n </Flex>\n\n <Flex>\n <ActionBox alignItems=\"center\">\n <Pencil />\n </ActionBox>\n\n <ActionBox alignItems=\"center\">\n <Cross />\n </ActionBox>\n </Flex>\n </FieldContainer>\n );\n}\n\nCardDragPreview.defaultProps = {\n isSibling: false,\n transparent: false,\n};\n\nCardDragPreview.propTypes = {\n isSibling: PropTypes.bool,\n labelField: PropTypes.string.isRequired,\n transparent: PropTypes.bool,\n};\n","import React, { useEffect, useRef, useState } from 'react';\n\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { Cross, Drag, Pencil } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useDrag, useDrop } from 'react-dnd';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport { getTrad, ItemTypes } from '../../../utils';\nimport { CardDragPreview } from '../../App/components/CardDragPreview';\n\nconst ActionButton = styled.button`\n display: flex;\n align-items: center;\n height: ${({ theme }) => theme.spaces[7]};\n\n &:last-child {\n padding: 0 ${({ theme }) => theme.spaces[3]};\n }\n`;\n\nconst DragButton = styled(ActionButton)`\n padding: 0 ${({ theme }) => theme.spaces[3]};\n border-right: 1px solid ${({ theme }) => theme.colors.neutral150};\n cursor: all-scroll;\n\n svg {\n width: ${12 / 16}rem;\n height: ${12 / 16}rem;\n }\n`;\n\nconst FieldContainer = styled(Flex)`\n max-height: ${32 / 16}rem;\n cursor: pointer;\n\n svg {\n width: ${10 / 16}rem;\n height: ${10 / 16}rem;\n\n path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n }\n\n &:hover {\n background-color: ${({ theme }) => theme.colors.primary100};\n border-color: ${({ theme }) => theme.colors.primary200};\n\n svg {\n path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n\n ${Typography} {\n color: ${({ theme }) => theme.colors.primary600};\n }\n\n ${DragButton} {\n border-right: 1px solid ${({ theme }) => theme.colors.primary200};\n }\n }\n`;\n\nconst FieldWrapper = styled(Box)`\n &:last-child {\n padding-right: ${({ theme }) => theme.spaces[3]};\n }\n`;\n\nconst DraggableCard = ({\n index,\n isDraggingSibling,\n labelField,\n onClickEditField,\n onMoveField,\n onRemoveField,\n name,\n setIsDraggingSibling,\n}) => {\n const { formatMessage } = useIntl();\n const dragRef = useRef(null);\n const dropRef = useRef(null);\n const [, forceRerenderAfterDnd] = useState(false);\n const editButtonRef = useRef();\n\n const handleClickEditRow = () => {\n if (editButtonRef.current) {\n editButtonRef.current.click();\n }\n };\n\n // TODO: this can be simplified a lot by using the useDragAndDrop() hook\n const [, drop] = useDrop({\n accept: ItemTypes.FIELD,\n hover(item, monitor) {\n if (!dropRef.current) {\n return;\n }\n const dragIndex = item.index;\n const hoverIndex = index;\n\n // Don't replace items with themselves\n if (dragIndex === hoverIndex) {\n return;\n }\n\n // Determine rectangle on screen\n const hoverBoundingRect = dropRef.current.getBoundingClientRect();\n // Get vertical middle\n const hoverMiddleX = (hoverBoundingRect.right - hoverBoundingRect.left) / 2;\n // Determine mouse position\n const clientOffset = monitor.getClientOffset();\n // Get pixels to the top\n const hoverClientX = clientOffset.x - hoverBoundingRect.left;\n\n // Only perform the move when the mouse has crossed half of the items height\n // When dragging downwards, only move when the cursor is below 50%\n // When dragging upwards, only move when the cursor is above 50%\n // Dragging downwards\n if (dragIndex > hoverIndex && hoverClientX > hoverMiddleX) {\n return;\n }\n // Dragging upwards\n if (dragIndex < hoverIndex && hoverClientX < hoverMiddleX) {\n return;\n }\n\n onMoveField(dragIndex, hoverIndex);\n\n item.index = hoverIndex;\n },\n });\n\n const [{ isDragging }, drag, preview] = useDrag({\n type: ItemTypes.FIELD,\n item() {\n return { index, labelField, name };\n },\n collect: (monitor) => ({\n isDragging: monitor.isDragging(),\n }),\n end() {\n setIsDraggingSibling(false);\n },\n });\n\n useEffect(() => {\n preview(getEmptyImage(), { captureDraggingState: false });\n }, [preview]);\n\n useEffect(() => {\n if (isDragging) {\n setIsDraggingSibling(true);\n }\n }, [isDragging, setIsDraggingSibling]);\n\n // Effect in order to force a rerender after reordering the components\n // Since we are removing the Accordion when doing the DnD we are losing the dragRef, therefore the replaced element cannot be dragged\n // anymore, this hack forces a rerender in order to apply the dragRef\n useEffect(() => {\n if (!isDraggingSibling) {\n forceRerenderAfterDnd((prev) => !prev);\n }\n }, [isDraggingSibling]);\n\n // Create the refs\n // We need 1 for the drop target\n // 1 for the drag target\n const refs = {\n dragRef: drag(dragRef),\n dropRef: drop(dropRef),\n };\n\n return (\n <FieldWrapper ref={refs ? refs.dropRef : null}>\n {isDragging && <CardDragPreview transparent labelField={labelField} />}\n {!isDragging && isDraggingSibling && <CardDragPreview isSibling labelField={labelField} />}\n\n {!isDragging && !isDraggingSibling && (\n <FieldContainer\n borderColor=\"neutral150\"\n background=\"neutral100\"\n hasRadius\n justifyContent=\"space-between\"\n onClick={handleClickEditRow}\n isDragging={isDragging}\n >\n <Flex gap={3}>\n <DragButton\n as=\"span\"\n aria-label={formatMessage(\n {\n id: getTrad('components.DraggableCard.move.field'),\n defaultMessage: 'Move {item}',\n },\n { item: labelField }\n )}\n onClick={(e) => e.stopPropagation()}\n ref={refs.dragRef}\n type=\"button\"\n >\n <Drag />\n </DragButton>\n <Typography fontWeight=\"bold\">{labelField}</Typography>\n </Flex>\n <Flex paddingLeft={3}>\n <ActionButton\n ref={editButtonRef}\n onClick={(e) => {\n e.stopPropagation();\n onClickEditField(name);\n }}\n aria-label={formatMessage(\n {\n id: getTrad('components.DraggableCard.edit.field'),\n defaultMessage: 'Edit {item}',\n },\n { item: labelField }\n )}\n type=\"button\"\n >\n <Pencil />\n </ActionButton>\n <ActionButton\n onClick={onRemoveField}\n data-testid={`delete-${name}`}\n aria-label={formatMessage(\n {\n id: getTrad('components.DraggableCard.delete.field'),\n defaultMessage: 'Delete {item}',\n },\n { item: labelField }\n )}\n type=\"button\"\n >\n <Cross />\n </ActionButton>\n </Flex>\n </FieldContainer>\n )}\n </FieldWrapper>\n );\n};\n\nDraggableCard.propTypes = {\n index: PropTypes.number.isRequired,\n isDraggingSibling: PropTypes.bool.isRequired,\n labelField: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n onClickEditField: PropTypes.func.isRequired,\n onMoveField: PropTypes.func.isRequired,\n onRemoveField: PropTypes.func.isRequired,\n setIsDraggingSibling: PropTypes.func.isRequired,\n};\n\nexport default DraggableCard;\n","import React, { useEffect, useRef, useState } from 'react';\n\nimport { Box, Flex, VisuallyHidden, Typography } from '@strapi/design-system';\nimport { Menu } from '@strapi/design-system/v2';\nimport { Plus } from '@strapi/icons';\nimport { PropTypes } from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../../utils';\n\nimport DraggableCard from './DraggableCard';\n\nexport const SortDisplayedFields = ({\n displayedFields,\n listRemainingFields,\n metadatas,\n onAddField,\n onClickEditField,\n onMoveField,\n onRemoveField,\n}) => {\n const { formatMessage } = useIntl();\n const [isDraggingSibling, setIsDraggingSibling] = useState(false);\n const [lastAction, setLastAction] = useState(null);\n const scrollableContainerRef = useRef();\n\n function handleAddField(...args) {\n setLastAction('add');\n onAddField(...args);\n }\n\n function handleRemoveField(...args) {\n setLastAction('remove');\n onRemoveField(...args);\n }\n\n useEffect(() => {\n if (lastAction === 'add' && scrollableContainerRef?.current) {\n scrollableContainerRef.current.scrollLeft = scrollableContainerRef.current.scrollWidth;\n }\n }, [displayedFields, lastAction]);\n\n return (\n <Flex alignItems=\"stretch\" direction=\"column\" gap={4}>\n <Typography variant=\"delta\" as=\"h2\">\n {formatMessage({\n id: getTrad('containers.SettingPage.view'),\n defaultMessage: 'View',\n })}\n </Typography>\n\n <Flex padding={4} borderColor=\"neutral300\" borderStyle=\"dashed\" borderWidth=\"1px\" hasRadius>\n <Box flex=\"1\" overflow=\"scroll hidden\" ref={scrollableContainerRef}>\n <Flex gap={3}>\n {displayedFields.map((field, index) => (\n <DraggableCard\n key={field}\n index={index}\n isDraggingSibling={isDraggingSibling}\n onMoveField={onMoveField}\n onClickEditField={onClickEditField}\n onRemoveField={(e) => handleRemoveField(e, index)}\n name={field}\n labelField={metadatas[field].list.label || field}\n setIsDraggingSibling={setIsDraggingSibling}\n />\n ))}\n </Flex>\n </Box>\n\n <Menu.Root>\n <Menu.Trigger\n paddingLeft={2}\n paddingRight={2}\n justifyContent=\"center\"\n endIcon={null}\n disabled={listRemainingFields.length <= 0}\n variant=\"tertiary\"\n >\n <VisuallyHidden as=\"span\">\n {formatMessage({\n id: getTrad('components.FieldSelect.label'),\n defaultMessage: 'Add a field',\n })}\n </VisuallyHidden>\n <Plus aria-hidden focusable={false} style={{ position: 'relative', top: 2 }} />\n </Menu.Trigger>\n <Menu.Content>\n {listRemainingFields.map((field) => (\n <Menu.Item key={field} onSelect={() => handleAddField(field)}>\n {metadatas[field].list.label || field}\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Root>\n </Flex>\n </Flex>\n );\n};\n\nSortDisplayedFields.propTypes = {\n displayedFields: PropTypes.array.isRequired,\n listRemainingFields: PropTypes.array.isRequired,\n metadatas: PropTypes.objectOf(\n PropTypes.shape({\n list: PropTypes.shape({\n label: PropTypes.string,\n }),\n })\n ).isRequired,\n onAddField: PropTypes.func.isRequired,\n onClickEditField: PropTypes.func.isRequired,\n onMoveField: PropTypes.func.isRequired,\n onRemoveField: PropTypes.func.isRequired,\n};\n","export const EXCLUDED_SORT_ATTRIBUTE_TYPES = [\n 'media',\n 'richtext',\n 'dynamiczone',\n 'relation',\n 'component',\n 'json',\n 'blocks',\n];\n","import produce from 'immer'; // current\nimport get from 'lodash/get';\nimport set from 'lodash/set';\n\nimport { arrayMoveItem } from '../../utils';\n\nconst initialState = {\n fieldForm: {},\n fieldToEdit: '',\n initialData: {},\n modifiedData: {},\n};\n\nconst reducer = (state = initialState, action) =>\n // eslint-disable-next-line consistent-return\n produce(state, (draftState) => {\n const layoutFieldListPath = ['modifiedData', 'layouts', 'list'];\n switch (action.type) {\n case 'ADD_FIELD': {\n const layoutFieldList = get(state, layoutFieldListPath, []);\n set(draftState, layoutFieldListPath, [...layoutFieldList, action.item]);\n break;\n }\n case 'MOVE_FIELD': {\n const layoutFieldList = get(state, layoutFieldListPath, []);\n const { originalIndex, atIndex } = action;\n set(\n draftState,\n layoutFieldListPath,\n arrayMoveItem(layoutFieldList, originalIndex, atIndex)\n );\n break;\n }\n case 'ON_CHANGE': {\n set(draftState, ['modifiedData', ...action.keys.split('.')], action.value);\n break;\n }\n case 'ON_CHANGE_FIELD_METAS': {\n set(draftState, ['fieldForm', action.name], action.value);\n break;\n }\n case 'REMOVE_FIELD': {\n const layoutFieldList = get(state, layoutFieldListPath, []);\n set(\n draftState,\n layoutFieldListPath,\n layoutFieldList.filter((_, index) => action.index !== index)\n );\n break;\n }\n case 'SET_FIELD_TO_EDIT': {\n const { fieldToEdit } = action;\n draftState.fieldToEdit = fieldToEdit;\n draftState.fieldForm.label = get(\n draftState,\n ['modifiedData', 'metadatas', fieldToEdit, 'list', 'label'],\n ''\n );\n draftState.fieldForm.sortable = get(\n draftState,\n ['modifiedData', 'metadatas', fieldToEdit, 'list', 'sortable'],\n ''\n );\n break;\n }\n case 'UNSET_FIELD_TO_EDIT': {\n draftState.fieldForm = {};\n draftState.fieldToEdit = '';\n break;\n }\n case 'SUBMIT_FIELD_FORM': {\n const fieldMetadataPath = ['modifiedData', 'metadatas', state.fieldToEdit, 'list'];\n set(draftState, [...fieldMetadataPath, 'label'], state.fieldForm.label);\n set(draftState, [...fieldMetadataPath, 'sortable'], state.fieldForm.sortable);\n break;\n }\n default:\n return draftState;\n }\n });\n\nexport default reducer;\nexport { initialState };\n","import * as React from 'react';\n\nimport {\n Button,\n ContentLayout,\n Divider,\n Flex,\n HeaderLayout,\n Layout,\n Main,\n} from '@strapi/design-system';\nimport { Link, useFetchClient, useNotification, useTracking } from '@strapi/helper-plugin';\nimport { ArrowLeft, Check } from '@strapi/icons';\nimport isEqual from 'lodash/isEqual';\nimport upperFirst from 'lodash/upperFirst';\nimport PropTypes from 'prop-types';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useMutation } from 'react-query';\n\nimport ModelsContext from '../../contexts/ModelsContext';\nimport { usePluginsQueryParams } from '../../hooks';\nimport { checkIfAttributeIsDisplayable, getTrad } from '../../utils';\n\nimport { EditFieldForm } from './components/EditFieldForm';\nimport { Settings } from './components/Settings';\nimport { SortDisplayedFields } from './components/SortDisplayedFields';\nimport { EXCLUDED_SORT_ATTRIBUTE_TYPES } from './constants';\nimport reducer, { initialState } from './reducer';\n\nexport const ListSettingsView = ({ layout, slug }) => {\n const { put } = useFetchClient();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const pluginsQueryParams = usePluginsQueryParams();\n const toggleNotification = useNotification();\n const { refetchData } = React.useContext(ModelsContext);\n const [{ fieldToEdit, fieldForm, initialData, modifiedData }, dispatch] = React.useReducer(\n reducer,\n initialState,\n () => ({\n ...initialState,\n initialData: layout,\n modifiedData: layout,\n })\n );\n\n const isModalFormOpen = Object.keys(fieldForm).length !== 0;\n\n const { attributes, options } = layout;\n const displayedFields = modifiedData.layouts.list;\n\n const goBackUrl = () => {\n const {\n settings: { pageSize, defaultSortBy, defaultSortOrder },\n kind,\n uid,\n } = initialData;\n const sort = `${defaultSortBy}:${defaultSortOrder}`;\n const goBackSearch = `${stringify(\n {\n page: 1,\n pageSize,\n sort,\n },\n { encode: false }\n )}${pluginsQueryParams ? `&${pluginsQueryParams}` : ''}`;\n\n return `/content-manager/${kind}/${uid}?${goBackSearch}`;\n };\n\n const handleChange = ({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE',\n keys: name,\n value: name === 'settings.pageSize' ? parseInt(value, 10) : value,\n });\n };\n\n const { isLoading: isSubmittingForm, mutate } = useMutation(\n (body) => put(`/content-manager/content-types/${slug}/configuration`, body),\n {\n onSuccess() {\n trackUsage('didEditListSettings');\n refetchData();\n },\n onError() {\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error' },\n });\n },\n }\n );\n\n const handleAddField = (item) => {\n dispatch({\n type: 'ADD_FIELD',\n item,\n });\n };\n\n const handleRemoveField = (e, index) => {\n e.stopPropagation();\n\n if (displayedFields.length === 1) {\n toggleNotification({\n type: 'info',\n message: { id: getTrad('notification.info.minimumFields') },\n });\n } else {\n dispatch({\n type: 'REMOVE_FIELD',\n index,\n });\n }\n };\n\n const handleSubmit = (event) => {\n event.preventDefault();\n\n const { layouts, settings, metadatas } = modifiedData;\n\n mutate({\n layouts,\n settings,\n metadatas,\n });\n\n trackUsage('willSaveContentTypeLayout');\n };\n\n const handleClickEditField = (fieldToEdit) => {\n dispatch({\n type: 'SET_FIELD_TO_EDIT',\n fieldToEdit,\n });\n };\n\n const handleCloseModal = () => {\n dispatch({\n type: 'UNSET_FIELD_TO_EDIT',\n });\n };\n\n const handleSubmitFieldEdit = (e) => {\n e.preventDefault();\n dispatch({\n type: 'SUBMIT_FIELD_FORM',\n });\n handleCloseModal();\n };\n\n const handleChangeEditLabel = ({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE_FIELD_METAS',\n name,\n value,\n });\n };\n\n const listRemainingFields = Object.entries(attributes)\n .filter(\n ([name, attribute]) =>\n checkIfAttributeIsDisplayable(attribute) && !displayedFields.includes(name)\n )\n .map(([name]) => name)\n .sort();\n\n const sortOptions = Object.entries(attributes)\n .filter(([, attribute]) => !EXCLUDED_SORT_ATTRIBUTE_TYPES.includes(attribute.type))\n .map(([name]) => ({\n value: name,\n label: layout.metadatas[name].list.label,\n }));\n\n const move = (originalIndex, atIndex) => {\n dispatch({\n type: 'MOVE_FIELD',\n originalIndex,\n atIndex,\n });\n };\n\n return (\n <Layout>\n <Main aria-busy={isSubmittingForm}>\n <form onSubmit={handleSubmit}>\n <HeaderLayout\n navigationAction={\n <Link startIcon={<ArrowLeft />} to={goBackUrl} id=\"go-back\">\n {formatMessage({ id: 'global.back', defaultMessage: 'Back' })}\n </Link>\n }\n primaryAction={\n <Button\n size=\"S\"\n startIcon={<Check />}\n disabled={isEqual(modifiedData, initialData)}\n type=\"submit\"\n >\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n }\n subtitle={formatMessage({\n id: getTrad('components.SettingsViewWrapper.pluginHeader.description.list-settings'),\n defaultMessage: 'Define the settings of the list view.',\n })}\n title={formatMessage(\n {\n id: getTrad('components.SettingsViewWrapper.pluginHeader.title'),\n defaultMessage: 'Configure the view - {name}',\n },\n { name: upperFirst(modifiedData.info.displayName) }\n )}\n />\n <ContentLayout>\n <Flex\n alignItems=\"stretch\"\n background=\"neutral0\"\n direction=\"column\"\n gap={6}\n hasRadius\n shadow=\"tableShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Settings\n contentTypeOptions={options}\n modifiedData={modifiedData}\n onChange={handleChange}\n sortOptions={sortOptions}\n />\n\n <Divider />\n\n <SortDisplayedFields\n listRemainingFields={listRemainingFields}\n displayedFields={displayedFields}\n onAddField={handleAddField}\n onClickEditField={handleClickEditField}\n onMoveField={move}\n onRemoveField={handleRemoveField}\n metadatas={modifiedData.metadatas}\n />\n </Flex>\n </ContentLayout>\n </form>\n\n {isModalFormOpen && (\n <EditFieldForm\n attributes={attributes}\n fieldForm={fieldForm}\n fieldToEdit={fieldToEdit}\n onChangeEditLabel={handleChangeEditLabel}\n onCloseModal={handleCloseModal}\n onSubmit={handleSubmitFieldEdit}\n type={attributes?.[fieldToEdit]?.type ?? 'text'}\n />\n )}\n </Main>\n </Layout>\n );\n};\n\nListSettingsView.propTypes = {\n layout: PropTypes.shape({\n uid: PropTypes.string.isRequired,\n settings: PropTypes.shape({\n bulkable: PropTypes.bool,\n defaultSortBy: PropTypes.string,\n defaultSortOrder: PropTypes.string,\n filterable: PropTypes.bool,\n pageSize: PropTypes.number,\n searchable: PropTypes.bool,\n }).isRequired,\n metadatas: PropTypes.object.isRequired,\n options: PropTypes.object.isRequired,\n attributes: PropTypes.objectOf(\n PropTypes.shape({\n type: PropTypes.string,\n })\n ).isRequired,\n }).isRequired,\n slug: PropTypes.string.isRequired,\n};\n","import {\n GET_DATA,\n GET_DATA_SUCCEEDED,\n ON_CHANGE_LIST_HEADERS,\n ON_RESET_LIST_HEADERS,\n RESET_PROPS,\n SET_LIST_LAYOUT,\n} from './constants';\n\nexport const getData = () => ({ type: GET_DATA });\n\nexport const getDataSucceeded = (pagination, data) => ({\n type: GET_DATA_SUCCEEDED,\n pagination,\n data,\n});\n\nexport const onResetListHeaders = () => ({ type: ON_RESET_LIST_HEADERS });\n\nexport function resetProps() {\n return { type: RESET_PROPS };\n}\n\nexport const setLayout = ({ components, contentType }) => {\n const { layouts } = contentType;\n\n return {\n contentType,\n components,\n displayedHeaders: layouts.list,\n type: SET_LIST_LAYOUT,\n };\n};\n\nexport const onChangeListHeaders = (target) => ({ type: ON_CHANGE_LIST_HEADERS, target });\n","import React from 'react';\n\nimport { Button } from '@strapi/design-system';\nimport { FilterListURLQuery, FilterPopoverURLQuery, useTracking } from '@strapi/helper-plugin';\nimport { Filter as FilterIcon } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nexport const Filter = ({ displayedFilters }) => {\n const [isVisible, setIsVisible] = React.useState(false);\n const { formatMessage } = useIntl();\n const buttonRef = React.useRef();\n const { trackUsage } = useTracking();\n\n const handleToggle = () => {\n if (!isVisible) {\n trackUsage('willFilterEntries');\n }\n setIsVisible((prev) => !prev);\n };\n\n return (\n <>\n <Button\n variant=\"tertiary\"\n ref={buttonRef}\n startIcon={<FilterIcon />}\n onClick={handleToggle}\n size=\"S\"\n >\n {formatMessage({ id: 'app.utils.filters', defaultMessage: 'Filters' })}\n </Button>\n {isVisible && (\n <FilterPopoverURLQuery\n displayedFilters={displayedFilters}\n isVisible={isVisible}\n onToggle={handleToggle}\n source={buttonRef}\n />\n )}\n <FilterListURLQuery filtersSchema={displayedFilters} />\n </>\n );\n};\n\nFilter.propTypes = {\n displayedFilters: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n metadatas: PropTypes.shape({ label: PropTypes.string }),\n fieldSchema: PropTypes.shape({ type: PropTypes.string }),\n })\n ).isRequired,\n};\n","import React from 'react';\n\nimport { Combobox, ComboboxOption } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { useAdminUsers } from '../../../../hooks/useAdminUsers';\nimport { getDisplayName } from '../../../utils';\n\nexport const AdminUsersFilter = ({ value, onChange }) => {\n const { formatMessage } = useIntl();\n const { users, isLoading } = useAdminUsers();\n\n return (\n <Combobox\n value={value}\n aria-label={formatMessage({\n id: 'content-manager.components.Filters.usersSelect.label',\n defaultMessage: 'Search and select an user to filter',\n })}\n onChange={onChange}\n loading={isLoading}\n >\n {users.map((user) => {\n return (\n <ComboboxOption key={user.id} value={user.id.toString()}>\n {getDisplayName(user, formatMessage)}\n </ComboboxOption>\n );\n })}\n </Combobox>\n );\n};\n\nAdminUsersFilter.propTypes = {\n onChange: PropTypes.func.isRequired,\n value: PropTypes.string,\n};\n\nAdminUsersFilter.defaultProps = {\n value: '',\n};\n","import { useRBACProvider, findMatchingPermissions } from '@strapi/helper-plugin';\n\nimport { CREATOR_FIELDS } from '../constants/attributes';\n\nconst NOT_ALLOWED_FILTERS = [\n 'json',\n 'component',\n 'media',\n 'richtext',\n 'dynamiczone',\n 'password',\n 'blocks',\n];\nconst TIMESTAMPS = ['createdAt', 'updatedAt'];\n\nexport const useAllowedAttributes = (contentType, slug) => {\n const { allPermissions } = useRBACProvider();\n\n const readPermissionsForSlug = findMatchingPermissions(allPermissions, [\n {\n action: 'plugin::content-manager.explorer.read',\n subject: slug,\n },\n ]);\n\n const canReadAdminUsers =\n findMatchingPermissions(allPermissions, [\n {\n action: 'admin::users.read',\n subject: null,\n },\n ]).length > 0;\n\n const attributesWithReadPermissions = readPermissionsForSlug?.[0]?.properties?.fields ?? [];\n\n const allowedAttributes = attributesWithReadPermissions.filter((attr) => {\n const current = contentType?.attributes?.[attr] ?? {};\n\n if (!current.type) {\n return false;\n }\n\n if (NOT_ALLOWED_FILTERS.includes(current.type)) {\n return false;\n }\n\n return true;\n });\n\n return ['id', ...allowedAttributes, ...TIMESTAMPS, ...(canReadAdminUsers ? CREATOR_FIELDS : [])];\n};\n","import React from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\n\nimport { useInjectionZone } from '../../../shared/hooks/useInjectionZone';\n\nconst InjectionZoneList = ({ area, ...props }) => {\n const compos = useInjectionZone(area);\n\n if (!compos) {\n return null;\n }\n\n // TODO\n return (\n <ul>\n {compos.map((compo) => {\n const component = compo.Component(props);\n\n if (component) {\n return (\n <Box key={compo.name} padding={3} style={{ textAlign: 'center' }}>\n <compo.Component {...props} />\n </Box>\n );\n }\n\n return null;\n })}\n </ul>\n );\n};\n\nInjectionZoneList.propTypes = {\n area: PropTypes.string.isRequired,\n};\n\nexport default InjectionZoneList;\n","import React from 'react';\n\nimport { Button, Dialog, DialogBody, DialogFooter, Flex, Typography } from '@strapi/design-system';\nimport { ExclamationMarkCircle, Trash } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport InjectionZoneList from '../../../../components/InjectionZoneList';\n\nexport const ConfirmDialogDelete = ({\n isConfirmButtonLoading,\n isOpen,\n onToggleDialog,\n onConfirm,\n}) => {\n const { formatMessage } = useIntl();\n\n return (\n <Dialog\n onClose={onToggleDialog}\n title={formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n })}\n labelledBy=\"confirmation\"\n describedBy=\"confirm-description\"\n isOpen={isOpen}\n >\n <DialogBody icon={<ExclamationMarkCircle />}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n <Flex justifyContent=\"center\">\n <Typography id=\"confirm-description\">\n {formatMessage({\n id: 'components.popUpWarning.message',\n defaultMessage: 'Are you sure you want to delete this?',\n })}\n </Typography>\n </Flex>\n <Flex>\n <InjectionZoneList area=\"contentManager.listView.deleteModalAdditionalInfos\" />\n </Flex>\n </Flex>\n </DialogBody>\n <DialogFooter\n startAction={\n <Button onClick={onToggleDialog} variant=\"tertiary\">\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n }\n endAction={\n <Button\n onClick={onConfirm}\n variant=\"danger-light\"\n startIcon={<Trash />}\n id=\"confirm-delete\"\n loading={isConfirmButtonLoading}\n >\n {formatMessage({\n id: 'app.components.Button.confirm',\n defaultMessage: 'Confirm',\n })}\n </Button>\n }\n />\n </Dialog>\n );\n};\n\nConfirmDialogDelete.propTypes = {\n isConfirmButtonLoading: PropTypes.bool.isRequired,\n isOpen: PropTypes.bool.isRequired,\n onConfirm: PropTypes.func.isRequired,\n onToggleDialog: PropTypes.func.isRequired,\n};\n","import React from 'react';\n\nimport { BaseCheckbox, IconButton, Flex } from '@strapi/design-system';\nimport { useTracking, useTableContext, Table } from '@strapi/helper-plugin';\nimport { Trash, Duplicate, Pencil } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { Link, useHistory } from 'react-router-dom';\n\nimport { usePluginsQueryParams } from '../../../../hooks';\nimport { ConfirmDialogDelete } from '../ConfirmDialogDelete';\n\nconst stopPropagation = (e) => e.stopPropagation();\n\n/* -------------------------------------------------------------------------------------------------\n * CheckboxDataCell\n * -----------------------------------------------------------------------------------------------*/\n\nconst CheckboxDataCell = ({ rowId, index }) => {\n const { selectedEntries, onSelectRow } = useTableContext();\n const { formatMessage } = useIntl();\n const isChecked = selectedEntries.findIndex((id) => id === rowId) !== -1;\n const ariaLabel = formatMessage(\n {\n id: 'app.component.table.select.one-entry',\n defaultMessage: `Select {target}`,\n },\n { target: index + 1 }\n );\n\n return (\n <BaseCheckbox\n aria-label={ariaLabel}\n checked={isChecked}\n onClick={stopPropagation}\n onChange={() => {\n onSelectRow({ name: rowId, value: !isChecked });\n }}\n />\n );\n};\n\nCheckboxDataCell.propTypes = {\n rowId: PropTypes.number.isRequired,\n index: PropTypes.number.isRequired,\n};\n\n/* -------------------------------------------------------------------------------------------------\n * EntityActionsDataCell\n * -----------------------------------------------------------------------------------------------*/\n\nconst EntityActionsDataCell = ({\n rowId,\n index,\n canCreate,\n canDelete,\n setIsConfirmDeleteRowOpen,\n handleCloneClick,\n}) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { setSelectedEntries } = useTableContext();\n const pluginsQueryParams = usePluginsQueryParams();\n const {\n location: { pathname },\n } = useHistory();\n\n const itemLineText = formatMessage(\n {\n id: 'content-manager.components.ListViewTable.row-line',\n defaultMessage: 'item line {number}',\n },\n { number: index + 1 }\n );\n\n return (\n <Flex gap={1} justifyContent=\"end\" onClick={stopPropagation}>\n <IconButton\n forwardedAs={Link}\n onClick={() => {\n trackUsage('willEditEntryFromButton');\n }}\n to={{\n pathname: `${pathname}/${rowId}`,\n state: { from: pathname },\n search: pluginsQueryParams,\n }}\n label={formatMessage(\n { id: 'app.component.table.edit', defaultMessage: 'Edit {target}' },\n { target: itemLineText }\n )}\n noBorder\n >\n <Pencil />\n </IconButton>\n\n {canCreate && (\n <IconButton\n onClick={handleCloneClick(rowId)}\n label={formatMessage(\n {\n id: 'app.component.table.duplicate',\n defaultMessage: 'Duplicate {target}',\n },\n { target: itemLineText }\n )}\n noBorder\n >\n <Duplicate />\n </IconButton>\n )}\n\n {canDelete && (\n <IconButton\n onClick={() => {\n trackUsage('willDeleteEntryFromList');\n setSelectedEntries([rowId]);\n setIsConfirmDeleteRowOpen(true);\n }}\n label={formatMessage(\n { id: 'global.delete-target', defaultMessage: 'Delete {target}' },\n { target: itemLineText }\n )}\n noBorder\n >\n <Trash />\n </IconButton>\n )}\n </Flex>\n );\n};\n\nEntityActionsDataCell.defaultProps = {\n canCreate: false,\n canDelete: false,\n};\n\nEntityActionsDataCell.propTypes = {\n rowId: PropTypes.number.isRequired,\n index: PropTypes.number.isRequired,\n setIsConfirmDeleteRowOpen: PropTypes.func.isRequired,\n handleCloneClick: PropTypes.func.isRequired,\n canCreate: PropTypes.bool,\n canDelete: PropTypes.bool,\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\nconst Root = ({ children, onConfirmDelete, isConfirmDeleteRowOpen, setIsConfirmDeleteRowOpen }) => {\n const [isLoading, setIsLoading] = React.useState(false);\n const { selectedEntries, setSelectedEntries } = useTableContext();\n\n const handleConfirmDelete = async () => {\n try {\n setIsLoading(true);\n await onConfirmDelete(selectedEntries[0]);\n setIsConfirmDeleteRowOpen(false);\n setIsLoading(false);\n setSelectedEntries([]);\n } catch (error) {\n setIsLoading(false);\n setIsConfirmDeleteRowOpen(false);\n }\n };\n\n return (\n <Table.Body>\n {children}\n <ConfirmDialogDelete\n isConfirmButtonLoading={isLoading}\n onConfirm={handleConfirmDelete}\n onToggleDialog={() => setIsConfirmDeleteRowOpen(!isConfirmDeleteRowOpen)}\n isOpen={isConfirmDeleteRowOpen}\n />\n </Table.Body>\n );\n};\n\nRoot.propTypes = {\n children: PropTypes.node.isRequired,\n onConfirmDelete: PropTypes.func.isRequired,\n isConfirmDeleteRowOpen: PropTypes.bool.isRequired,\n setIsConfirmDeleteRowOpen: PropTypes.func.isRequired,\n};\n\nexport const Body = { CheckboxDataCell, EntityActionsDataCell, Root };\n","import { createSelector } from '@reduxjs/toolkit';\n\nimport { initialState } from './reducer';\n\n/**\n * Direct selector to the listView state domain\n */\nconst listViewDomain = () => (state) => state['content-manager_listView'] || initialState;\n\n/**\n * Other specific selectors\n */\n\n/**\n * Default selector used by listView\n */\n\nconst makeSelectListView = () =>\n createSelector(listViewDomain(), (substate) => {\n return substate;\n });\n\nconst selectDisplayedHeaders = (state) => {\n const { displayedHeaders } = state['content-manager_listView'];\n\n return displayedHeaders;\n};\n\nexport default makeSelectListView;\nexport { listViewDomain, selectDisplayedHeaders };\n","import * as React from 'react';\n\nimport { Button, Flex, Dialog, DialogBody, DialogFooter, Typography } from '@strapi/design-system';\nimport {\n useTableContext,\n useFetchClient,\n useNotification,\n useAPIErrorHandler,\n useQueryParams,\n} from '@strapi/helper-plugin';\nimport { Check, ExclamationMarkCircle } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { useQuery } from 'react-query';\nimport { useSelector } from 'react-redux';\n\nimport InjectionZoneList from '../../../../../components/InjectionZoneList';\nimport { getTrad } from '../../../../../utils';\nimport { listViewDomain } from '../../../selectors';\n\nconst ConfirmBulkActionDialog = ({ onToggleDialog, isOpen, dialogBody, endAction }) => {\n const { formatMessage } = useIntl();\n\n return (\n <Dialog\n onClose={onToggleDialog}\n title={formatMessage({\n id: 'app.components.ConfirmDialog.title',\n defaultMessage: 'Confirmation',\n })}\n isOpen={isOpen}\n >\n <DialogBody icon={<ExclamationMarkCircle />}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={2}>\n {dialogBody}\n </Flex>\n </DialogBody>\n <DialogFooter\n startAction={\n <Button onClick={onToggleDialog} variant=\"tertiary\">\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n }\n endAction={endAction}\n />\n </Dialog>\n );\n};\n\nConfirmBulkActionDialog.propTypes = {\n isOpen: PropTypes.bool.isRequired,\n onToggleDialog: PropTypes.func.isRequired,\n dialogBody: PropTypes.node.isRequired,\n endAction: PropTypes.node.isRequired,\n};\n\nexport const confirmDialogsPropTypes = {\n isConfirmButtonLoading: PropTypes.bool.isRequired,\n isOpen: PropTypes.bool.isRequired,\n onConfirm: PropTypes.func.isRequired,\n onToggleDialog: PropTypes.func.isRequired,\n};\n\n/* -------------------------------------------------------------------------------------------------\n * BoldChunk\n * -----------------------------------------------------------------------------------------------*/\n\nconst BoldChunk = (chunks) => <Typography fontWeight=\"bold\">{chunks}</Typography>;\n\n/* -------------------------------------------------------------------------------------------------\n * ConfirmDialogPublishAll\n * -----------------------------------------------------------------------------------------------*/\n\nconst ConfirmDialogPublishAll = ({ isOpen, onToggleDialog, isConfirmButtonLoading, onConfirm }) => {\n const { formatMessage } = useIntl();\n const { get } = useFetchClient();\n const { selectedEntries } = useTableContext();\n const toggleNotification = useNotification();\n const { formatAPIError } = useAPIErrorHandler(getTrad);\n const {\n contentType: { uid: slug },\n } = useSelector(listViewDomain());\n const [{ query }] = useQueryParams();\n\n const {\n data: countDraftRelations,\n isLoading,\n isError,\n } = useQuery(\n ['content-manager', 'draft-relations', slug, selectedEntries],\n async () => {\n const {\n data: { data },\n } = await get(\n `/content-manager/collection-types/${slug}/actions/countManyEntriesDraftRelations`,\n {\n params: {\n ids: selectedEntries,\n locale: query?.plugins?.i18n?.locale,\n },\n }\n );\n\n return data;\n },\n {\n // The API is called everytime you select/deselect an entry, this check avoids us sending a query with bad data\n enabled: selectedEntries.length > 0,\n onError(error) {\n toggleNotification({ type: 'warning', message: formatAPIError(error) });\n },\n }\n );\n\n if (isError) {\n return null;\n }\n\n return (\n <ConfirmBulkActionDialog\n isOpen={isOpen && !isLoading}\n onToggleDialog={onToggleDialog}\n dialogBody={\n <>\n <Typography id=\"confirm-description\" textAlign=\"center\">\n {countDraftRelations > 0 &&\n formatMessage(\n {\n id: getTrad(`popUpwarning.warning.bulk-has-draft-relations.message`),\n defaultMessage:\n '<b>{count} {count, plural, one { relation } other { relations } } out of {entities} { entities, plural, one { entry } other { entries } } {count, plural, one { is } other { are } }</b> not published yet and might lead to unexpected behavior. ',\n },\n {\n b: BoldChunk,\n count: countDraftRelations,\n entities: selectedEntries.length,\n }\n )}\n {formatMessage({\n id: getTrad('popUpWarning.bodyMessage.contentType.publish.all'),\n defaultMessage: 'Are you sure you want to publish these entries?',\n })}\n </Typography>\n <InjectionZoneList area=\"contentManager.listView.publishModalAdditionalInfos\" />\n </>\n }\n endAction={\n <Button\n onClick={onConfirm}\n variant=\"secondary\"\n startIcon={<Check />}\n loading={isConfirmButtonLoading}\n >\n {formatMessage({\n id: 'app.utils.publish',\n defaultMessage: 'Publish',\n })}\n </Button>\n }\n />\n );\n};\n\nConfirmDialogPublishAll.propTypes = confirmDialogsPropTypes;\n\nexport { ConfirmDialogPublishAll, ConfirmBulkActionDialog };\n","import React from 'react';\n\nimport {\n Box,\n Button,\n Typography,\n ModalLayout,\n ModalHeader,\n ModalBody,\n ModalFooter,\n Tr,\n Td,\n IconButton,\n Flex,\n Icon,\n Tooltip,\n Loader,\n} from '@strapi/design-system';\nimport {\n useTableContext,\n Table,\n getYupInnerErrors,\n useFetchClient,\n useQueryParams,\n useNotification,\n} from '@strapi/helper-plugin';\nimport { Pencil, CrossCircle, CheckCircle } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { useMutation, useQuery } from 'react-query';\nimport { useSelector } from 'react-redux';\nimport { Link, useHistory } from 'react-router-dom';\nimport styled from 'styled-components';\n\nimport { formatAPIErrors } from '../../../../../../utils/formatAPIErrors';\nimport { getTrad, createYupSchema } from '../../../../../utils';\nimport { listViewDomain } from '../../../selectors';\nimport { Body } from '../../Body';\nimport { ConfirmDialogPublishAll } from '../ConfirmBulkActionDialog';\n\nconst TypographyMaxWidth = styled(Typography)`\n max-width: 300px;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * EntryValidationText\n * -----------------------------------------------------------------------------------------------*/\n\nconst EntryValidationText = ({ validationErrors, isPublished }) => {\n const { formatMessage } = useIntl();\n\n if (validationErrors) {\n const validationErrorsMessages = Object.entries(validationErrors)\n .map(([key, value]) =>\n formatMessage(\n { id: `${value.id}.withField`, defaultMessage: value.defaultMessage },\n { field: key }\n )\n )\n .join(' ');\n\n return (\n <Flex gap={2}>\n <Icon color=\"danger600\" as={CrossCircle} />\n <Tooltip description={validationErrorsMessages}>\n <TypographyMaxWidth textColor=\"danger600\" variant=\"omega\" fontWeight=\"semiBold\" ellipsis>\n {validationErrorsMessages}\n </TypographyMaxWidth>\n </Tooltip>\n </Flex>\n );\n }\n\n if (isPublished) {\n return (\n <Flex gap={2}>\n <Icon color=\"success600\" as={CheckCircle} />\n <Typography textColor=\"success600\" fontWeight=\"bold\">\n {formatMessage({\n id: 'content-manager.bulk-publish.already-published',\n defaultMessage: 'Already Published',\n })}\n </Typography>\n </Flex>\n );\n }\n\n return (\n <Flex gap={2}>\n <Icon color=\"success600\" as={CheckCircle} />\n <Typography>\n {formatMessage({\n id: 'app.utils.ready-to-publish',\n defaultMessage: 'Ready to publish',\n })}\n </Typography>\n </Flex>\n );\n};\n\nEntryValidationText.defaultProps = {\n validationErrors: undefined,\n isPublished: false,\n};\n\nEntryValidationText.propTypes = {\n validationErrors: PropTypes.shape({\n [PropTypes.string]: PropTypes.shape({\n id: PropTypes.string,\n defaultMessage: PropTypes.string,\n }),\n }),\n isPublished: PropTypes.bool,\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SelectedEntriesTableContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst SelectedEntriesTableContent = ({\n isPublishing,\n rowsToDisplay,\n entriesToPublish,\n validationErrors,\n}) => {\n const {\n location: { pathname },\n } = useHistory();\n const { formatMessage } = useIntl();\n\n // Get main field from list view layout\n const listViewStore = useSelector(listViewDomain());\n const { mainField } = listViewStore.contentType.settings;\n const shouldDisplayMainField = mainField != null && mainField !== 'id';\n\n const getItemLineText = (count) =>\n formatMessage(\n {\n id: 'content-manager.components.ListViewTable.row-line',\n defaultMessage: 'item line {number}',\n },\n { number: count + 1 }\n );\n\n return (\n <Table.Content>\n <Table.Head>\n <Table.HeaderCheckboxCell />\n <Table.HeaderCell fieldSchemaType=\"number\" label=\"id\" name=\"id\" />\n {shouldDisplayMainField && (\n <Table.HeaderCell fieldSchemaType=\"string\" label=\"name\" name=\"name\" />\n )}\n <Table.HeaderCell fieldSchemaType=\"string\" label=\"status\" name=\"status\" />\n </Table.Head>\n <Table.LoadingBody />\n <Table.Body>\n {rowsToDisplay.map((row, index) => (\n <Tr key={row.id}>\n <Td>\n <Body.CheckboxDataCell rowId={row.id} index={index} />\n </Td>\n <Td>\n <Typography>{row.id}</Typography>\n </Td>\n {shouldDisplayMainField && (\n <Td>\n <Typography>{row[mainField]}</Typography>\n </Td>\n )}\n <Td>\n {isPublishing && entriesToPublish.includes(row.id) ? (\n <Flex gap={2}>\n <Typography>\n {formatMessage({\n id: 'content-manager.success.record.publishing',\n defaultMessage: 'Publishing...',\n })}\n </Typography>\n <Loader small />\n </Flex>\n ) : (\n <EntryValidationText\n validationErrors={validationErrors[row.id]}\n isPublished={row.publishedAt !== null}\n />\n )}\n </Td>\n <Td>\n <IconButton\n forwardedAs={Link}\n to={{\n pathname: `${pathname}/${row.id}`,\n state: { from: pathname },\n }}\n label={formatMessage(\n { id: 'app.component.table.edit', defaultMessage: 'Edit {target}' },\n { target: getItemLineText(index) }\n )}\n noBorder\n target=\"_blank\"\n marginLeft=\"auto\"\n >\n <Pencil />\n </IconButton>\n </Td>\n </Tr>\n ))}\n </Table.Body>\n </Table.Content>\n );\n};\n\nSelectedEntriesTableContent.defaultProps = {\n isPublishing: false,\n rowsToDisplay: [],\n entriesToPublish: [],\n validationErrors: {},\n};\n\nSelectedEntriesTableContent.propTypes = {\n isPublishing: PropTypes.bool,\n rowsToDisplay: PropTypes.arrayOf(PropTypes.object),\n entriesToPublish: PropTypes.arrayOf(PropTypes.number),\n validationErrors: PropTypes.shape({\n [PropTypes.string]: PropTypes.shape({\n id: PropTypes.string,\n defaultMessage: PropTypes.string,\n }),\n }),\n};\n\n/* -------------------------------------------------------------------------------------------------\n * BoldChunk\n * -----------------------------------------------------------------------------------------------*/\n\nconst BoldChunk = (chunks) => <Typography fontWeight=\"bold\">{chunks}</Typography>;\n\n/* -------------------------------------------------------------------------------------------------\n * SelectedEntriesModalContent\n * -----------------------------------------------------------------------------------------------*/\n\nconst SelectedEntriesModalContent = ({\n toggleModal,\n refetchModalData,\n setEntriesToFetch,\n setSelectedListViewEntries,\n validationErrors,\n}) => {\n const { formatMessage } = useIntl();\n const { selectedEntries, rows, onSelectRow, isLoading, isFetching } = useTableContext();\n const [isDialogOpen, setIsDialogOpen] = React.useState(false);\n const [rowsToDisplay, setRowsToDisplay] = React.useState([]);\n const [publishedCount, setPublishedCount] = React.useState(0);\n\n const entriesToPublish = rows\n .filter(({ id }) => selectedEntries.includes(id) && !validationErrors[id])\n .map(({ id }) => id);\n\n const { post } = useFetchClient();\n const toggleNotification = useNotification();\n const { contentType } = useSelector(listViewDomain());\n\n const selectedEntriesWithErrorsCount = rowsToDisplay.filter(\n ({ id }) => selectedEntries.includes(id) && validationErrors[id]\n ).length;\n const selectedEntriesPublished = rowsToDisplay.filter(\n ({ id, publishedAt }) => selectedEntries.includes(id) && publishedAt\n ).length;\n const selectedEntriesWithNoErrorsCount =\n selectedEntries.length - selectedEntriesWithErrorsCount - selectedEntriesPublished;\n\n const bulkPublishMutation = useMutation(\n (data) =>\n post(`/content-manager/collection-types/${contentType.uid}/actions/bulkPublish`, data),\n {\n onSuccess() {\n const update = rowsToDisplay.filter((row) => {\n if (entriesToPublish.includes(row.id)) {\n // Deselect the entries that have been published from the modal table\n onSelectRow({ name: row.id, value: false });\n }\n\n // Remove the entries that have been published from the table\n return !entriesToPublish.includes(row.id);\n });\n\n setRowsToDisplay(update);\n const publishedIds = update.map(({ id }) => id);\n // Set the parent's entries to fetch when clicking refresh\n setEntriesToFetch(publishedIds);\n // Deselect the entries that were published in the list view\n setSelectedListViewEntries(publishedIds);\n\n if (update.length === 0) {\n toggleModal();\n }\n\n toggleNotification({\n type: 'success',\n message: { id: 'content-manager.success.record.publish', defaultMessage: 'Published' },\n });\n },\n onError(error) {\n toggleNotification({\n type: 'warning',\n message: formatAPIErrors(error),\n });\n },\n }\n );\n\n const toggleDialog = () => setIsDialogOpen((prev) => !prev);\n\n const handleConfirmBulkPublish = async () => {\n toggleDialog();\n const { data } = await bulkPublishMutation.mutateAsync({ ids: entriesToPublish });\n setPublishedCount(data.count);\n };\n\n const getFormattedCountMessage = () => {\n if (publishedCount) {\n return formatMessage(\n {\n id: getTrad('containers.ListPage.selectedEntriesModal.publishedCount'),\n defaultMessage:\n '<b>{publishedCount}</b> {publishedCount, plural, =0 {entries} one {entry} other {entries}} published. <b>{withErrorsCount}</b> {withErrorsCount, plural, =0 {entries} one {entry} other {entries}} waiting for action.',\n },\n {\n publishedCount,\n withErrorsCount: selectedEntriesWithErrorsCount,\n b: BoldChunk,\n }\n );\n }\n\n return formatMessage(\n {\n id: getTrad('containers.ListPage.selectedEntriesModal.selectedCount'),\n defaultMessage:\n '<b>{alreadyPublishedCount}</b> {alreadyPublishedCount, plural, =0 {entries} one {entry} other {entries}} already published. <b>{readyToPublishCount}</b> {readyToPublishCount, plural, =0 {entries} one {entry} other {entries}} ready to publish. <b>{withErrorsCount}</b> {withErrorsCount, plural, =0 {entries} one {entry} other {entries}} waiting for action.',\n },\n {\n readyToPublishCount: selectedEntriesWithNoErrorsCount,\n withErrorsCount: selectedEntriesWithErrorsCount,\n alreadyPublishedCount: selectedEntriesPublished,\n b: BoldChunk,\n }\n );\n };\n\n React.useEffect(() => {\n // When the api responds with data\n if (rows.length > 0) {\n // Update the rows to display\n setRowsToDisplay(rows);\n }\n }, [rows]);\n\n return (\n <ModalLayout onClose={toggleModal} labelledBy=\"title\">\n <ModalHeader>\n <Typography fontWeight=\"bold\" textColor=\"neutral800\" as=\"h2\" id=\"title\">\n {formatMessage({\n id: getTrad('containers.ListPage.selectedEntriesModal.title'),\n defaultMessage: 'Publish entries',\n })}\n </Typography>\n </ModalHeader>\n <ModalBody>\n <Typography>{getFormattedCountMessage()}</Typography>\n <Box marginTop={5}>\n <SelectedEntriesTableContent\n isPublishing={bulkPublishMutation.isLoading}\n rowsToDisplay={rowsToDisplay}\n entriesToPublish={entriesToPublish}\n validationErrors={validationErrors}\n />\n </Box>\n </ModalBody>\n <ModalFooter\n startActions={\n <Button onClick={toggleModal} variant=\"tertiary\">\n {formatMessage({\n id: 'app.components.Button.cancel',\n defaultMessage: 'Cancel',\n })}\n </Button>\n }\n endActions={\n <Flex gap={2}>\n <Button onClick={refetchModalData} variant=\"tertiary\" loading={isFetching}>\n {formatMessage({ id: 'app.utils.refresh', defaultMessage: 'Refresh' })}\n </Button>\n <Button\n onClick={toggleDialog}\n disabled={\n selectedEntries.length === 0 ||\n selectedEntries.length === selectedEntriesWithErrorsCount ||\n isLoading\n }\n loading={bulkPublishMutation.isLoading}\n >\n {formatMessage({ id: 'app.utils.publish', defaultMessage: 'Publish' })}\n </Button>\n </Flex>\n }\n />\n <ConfirmDialogPublishAll\n isOpen={isDialogOpen}\n onToggleDialog={toggleDialog}\n isConfirmButtonLoading={bulkPublishMutation.isLoading}\n onConfirm={handleConfirmBulkPublish}\n />\n </ModalLayout>\n );\n};\n\nSelectedEntriesModalContent.defaultProps = {\n validationErrors: {},\n};\n\nSelectedEntriesModalContent.propTypes = {\n toggleModal: PropTypes.func.isRequired,\n refetchModalData: PropTypes.func.isRequired,\n setEntriesToFetch: PropTypes.func.isRequired,\n setSelectedListViewEntries: PropTypes.func.isRequired,\n validationErrors: PropTypes.shape({\n [PropTypes.string]: PropTypes.shape({\n id: PropTypes.string,\n defaultMessage: PropTypes.string,\n }),\n }),\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SelectedEntriesModal\n * -----------------------------------------------------------------------------------------------*/\n\nconst SelectedEntriesModal = ({ onToggle }) => {\n const {\n selectedEntries: selectedListViewEntries,\n setSelectedEntries: setSelectedListViewEntries,\n } = useTableContext();\n const { contentType, components } = useSelector(listViewDomain());\n // The child table will update this value based on the entries that were published\n const [entriesToFetch, setEntriesToFetch] = React.useState(selectedListViewEntries);\n // We want to keep the selected entries order same as the list view\n const [\n {\n query: { sort, plugins },\n },\n ] = useQueryParams();\n\n const queryParams = {\n page: 1,\n pageSize: entriesToFetch.length,\n sort,\n filters: {\n id: {\n $in: entriesToFetch,\n },\n },\n locale: plugins?.i18n?.locale,\n };\n\n const { get } = useFetchClient();\n\n const { data, isLoading, isFetching, refetch } = useQuery(\n ['entries', contentType.uid, queryParams],\n async () => {\n const { data } = await get(`content-manager/collection-types/${contentType.uid}`, {\n params: queryParams,\n });\n\n if (data.results) {\n const schema = createYupSchema(\n contentType,\n { components },\n { isDraft: false, isJSONTestDisabled: true }\n );\n const validationErrors = {};\n const rows = data.results.map((entry) => {\n try {\n schema.validateSync(entry, { abortEarly: false });\n\n return entry;\n } catch (e) {\n validationErrors[entry.id] = getYupInnerErrors(e);\n\n return entry;\n }\n });\n\n return { rows, validationErrors };\n }\n\n return {\n rows: [],\n validationErrors: {},\n };\n }\n );\n\n return (\n <Table.Root\n rows={data?.rows}\n defaultSelectedEntries={selectedListViewEntries}\n colCount={4}\n isLoading={isLoading}\n isFetching={isFetching}\n >\n <SelectedEntriesModalContent\n setSelectedListViewEntries={setSelectedListViewEntries}\n setEntriesToFetch={setEntriesToFetch}\n toggleModal={onToggle}\n refetchModalData={refetch}\n validationErrors={data?.validationErrors}\n />\n </Table.Root>\n );\n};\n\nSelectedEntriesModal.propTypes = {\n onToggle: PropTypes.func.isRequired,\n};\n\nexport default SelectedEntriesModal;\n","import * as React from 'react';\n\nimport { Button, Typography } from '@strapi/design-system';\nimport { useTracking, useTableContext } from '@strapi/helper-plugin';\nimport { Check, Trash } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\n\nimport InjectionZoneList from '../../../../components/InjectionZoneList';\nimport { getTrad } from '../../../../utils';\nimport { listViewDomain } from '../../selectors';\n\nimport { ConfirmBulkActionDialog, confirmDialogsPropTypes } from './ConfirmBulkActionDialog';\nimport SelectedEntriesModal from './SelectedEntriesModal';\n\n/* -------------------------------------------------------------------------------------------------\n * ConfirmDialogUnpublishAll\n * -----------------------------------------------------------------------------------------------*/\n\nconst ConfirmDialogUnpublishAll = ({\n isOpen,\n onToggleDialog,\n isConfirmButtonLoading,\n onConfirm,\n}) => {\n const { formatMessage } = useIntl();\n\n return (\n <ConfirmBulkActionDialog\n isOpen={isOpen}\n onToggleDialog={onToggleDialog}\n dialogBody={\n <>\n <Typography id=\"confirm-description\" textAlign=\"center\">\n {formatMessage({\n id: getTrad('popUpWarning.bodyMessage.contentType.unpublish.all'),\n defaultMessage: 'Are you sure you want to unpublish these entries?',\n })}\n </Typography>\n <InjectionZoneList area=\"contentManager.listView.unpublishModalAdditionalInfos\" />\n </>\n }\n endAction={\n <Button\n onClick={onConfirm}\n variant=\"secondary\"\n startIcon={<Check />}\n loading={isConfirmButtonLoading}\n >\n {formatMessage({\n id: 'app.utils.unpublish',\n defaultMessage: 'Unpublish',\n })}\n </Button>\n }\n />\n );\n};\n\nConfirmDialogUnpublishAll.propTypes = confirmDialogsPropTypes;\n\n/* -------------------------------------------------------------------------------------------------\n * ConfirmDialogDeleteAll\n * -----------------------------------------------------------------------------------------------*/\n\nconst ConfirmDialogDeleteAll = ({ isOpen, onToggleDialog, isConfirmButtonLoading, onConfirm }) => {\n const { formatMessage } = useIntl();\n\n return (\n <ConfirmBulkActionDialog\n isOpen={isOpen}\n onToggleDialog={onToggleDialog}\n dialogBody={\n <>\n <Typography id=\"confirm-description\" textAlign=\"center\">\n {formatMessage({\n id: getTrad('popUpWarning.bodyMessage.contentType.delete.all'),\n defaultMessage: 'Are you sure you want to delete these entries?',\n })}\n </Typography>\n <InjectionZoneList area=\"contentManager.listView.deleteModalAdditionalInfos\" />\n </>\n }\n endAction={\n <Button\n onClick={onConfirm}\n variant=\"danger-light\"\n startIcon={<Trash />}\n id=\"confirm-delete\"\n loading={isConfirmButtonLoading}\n >\n {formatMessage({\n id: 'app.components.Button.confirm',\n defaultMessage: 'Confirm',\n })}\n </Button>\n }\n />\n );\n};\n\nConfirmDialogDeleteAll.propTypes = confirmDialogsPropTypes;\n\n/* -------------------------------------------------------------------------------------------------\n * BulkActionButtons\n * -----------------------------------------------------------------------------------------------*/\n\nconst BulkActionButtons = ({\n showPublish,\n showDelete,\n onConfirmDeleteAll,\n onConfirmUnpublishAll,\n refetchData,\n}) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { data } = useSelector(listViewDomain());\n const { selectedEntries, setSelectedEntries } = useTableContext();\n\n const [isConfirmButtonLoading, setIsConfirmButtonLoading] = React.useState(false);\n const [isSelectedEntriesModalOpen, setIsSelectedEntriesModalOpen] = React.useState(false);\n const [dialogToOpen, setDialogToOpen] = React.useState(null);\n\n // Filters for Bulk actions\n const selectedEntriesObjects = data.filter((entry) => selectedEntries.includes(entry.id));\n const publishButtonIsShown =\n showPublish && selectedEntriesObjects.some((entry) => !entry.publishedAt);\n const unpublishButtonIsShown =\n showPublish && selectedEntriesObjects.some((entry) => entry.publishedAt);\n\n const toggleDeleteDialog = () => {\n if (dialogToOpen === 'delete') {\n setDialogToOpen(null);\n } else {\n setDialogToOpen('delete');\n trackUsage('willBulkDeleteEntries');\n }\n };\n\n const toggleUnpublishDialog = () => {\n if (dialogToOpen === 'unpublish') {\n setDialogToOpen(null);\n } else {\n setDialogToOpen('unpublish');\n trackUsage('willBulkUnpublishEntries');\n }\n };\n\n const handleBulkAction = async (confirmAction, toggleDialog) => {\n try {\n setIsConfirmButtonLoading(true);\n await confirmAction(selectedEntries);\n setIsConfirmButtonLoading(false);\n toggleDialog();\n setSelectedEntries([]);\n } catch (error) {\n setIsConfirmButtonLoading(false);\n toggleDialog();\n }\n };\n\n const handleBulkDelete = () => handleBulkAction(onConfirmDeleteAll, toggleDeleteDialog);\n const handleBulkUnpublish = () => handleBulkAction(onConfirmUnpublishAll, toggleUnpublishDialog);\n const handleToggleSelectedEntriesModal = () => {\n setIsSelectedEntriesModalOpen((prev) => {\n if (prev) {\n refetchData();\n }\n\n return !prev;\n });\n };\n\n return (\n <>\n {publishButtonIsShown && (\n <>\n <Button variant=\"tertiary\" onClick={handleToggleSelectedEntriesModal}>\n {formatMessage({ id: 'app.utils.publish', defaultMessage: 'Publish' })}\n </Button>\n {isSelectedEntriesModalOpen && (\n <SelectedEntriesModal onToggle={handleToggleSelectedEntriesModal} />\n )}\n </>\n )}\n {unpublishButtonIsShown && (\n <>\n <Button variant=\"tertiary\" onClick={toggleUnpublishDialog}>\n {formatMessage({ id: 'app.utils.unpublish', defaultMessage: 'Unpublish' })}\n </Button>\n <ConfirmDialogUnpublishAll\n isOpen={dialogToOpen === 'unpublish'}\n onToggleDialog={toggleUnpublishDialog}\n isConfirmButtonLoading={isConfirmButtonLoading}\n onConfirm={handleBulkUnpublish}\n />\n </>\n )}\n {showDelete && (\n <>\n <Button variant=\"danger-light\" onClick={toggleDeleteDialog}>\n {formatMessage({ id: 'global.delete', defaultMessage: 'Delete' })}\n </Button>\n <ConfirmDialogDeleteAll\n isOpen={dialogToOpen === 'delete'}\n onToggleDialog={toggleDeleteDialog}\n isConfirmButtonLoading={isConfirmButtonLoading}\n onConfirm={handleBulkDelete}\n />\n </>\n )}\n </>\n );\n};\n\nBulkActionButtons.defaultProps = {\n showPublish: false,\n showDelete: false,\n onConfirmDeleteAll() {},\n onConfirmUnpublishAll() {},\n refetchData() {},\n};\n\nBulkActionButtons.propTypes = {\n showPublish: PropTypes.bool,\n showDelete: PropTypes.bool,\n onConfirmDeleteAll: PropTypes.func,\n onConfirmUnpublishAll: PropTypes.func,\n refetchData: PropTypes.func,\n};\n\nexport default BulkActionButtons;\n","import parseISO from 'date-fns/parseISO';\nimport toString from 'lodash/toString';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nconst CellValue = ({ type, value }) => {\n const { formatDate, formatTime, formatNumber } = useIntl();\n let formattedValue = value;\n\n if (type === 'date') {\n formattedValue = formatDate(parseISO(value), { dateStyle: 'full' });\n }\n\n if (type === 'datetime') {\n formattedValue = formatDate(value, { dateStyle: 'full', timeStyle: 'short' });\n }\n\n if (type === 'time') {\n const [hour, minute, second] = value.split(':');\n const date = new Date();\n date.setHours(hour);\n date.setMinutes(minute);\n date.setSeconds(second);\n\n formattedValue = formatTime(date, {\n numeric: 'auto',\n style: 'short',\n });\n }\n\n if (['float', 'decimal'].includes(type)) {\n formattedValue = formatNumber(value, {\n // Should be kept in sync with the corresponding value\n // in the design-system/NumberInput: https://github.com/strapi/design-system/blob/main/packages/strapi-design-system/src/NumberInput/NumberInput.js#L53\n maximumFractionDigits: 20,\n });\n }\n\n if (['integer', 'biginteger'].includes(type)) {\n formattedValue = formatNumber(value, { maximumFractionDigits: 0 });\n }\n\n return toString(formattedValue);\n};\n\nCellValue.propTypes = {\n type: PropTypes.string.isRequired,\n value: PropTypes.any.isRequired,\n};\n\nexport default CellValue;\n","import React from 'react';\n\nimport { Flex, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nconst Wrapper = styled(Flex)`\n position: relative;\n border-radius: 50%;\n width: 26px;\n height: 26px;\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n background: ${({ theme }) => theme.colors.neutral150};\n padding-left: 1px;\n\n span {\n line-height: 0.6rem;\n font-size: 0.6rem;\n }\n`;\n\nconst FileWrapper = ({ children, ...props }) => {\n return (\n <Wrapper justifyContent=\"center\" alignItems=\"center\" as=\"span\" {...props}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {children}\n </Typography>\n </Wrapper>\n );\n};\n\nFileWrapper.propTypes = {\n children: PropTypes.string.isRequired,\n};\n\nexport default FileWrapper;\n","import React from 'react';\n\nimport { Avatar, Tooltip } from '@strapi/design-system';\nimport { getFileExtension, prefixFileUrlWithBackendUrl } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\n\nimport FileWrapper from './FileWrapper';\n\nconst Media = ({ url, mime, alternativeText, name, ext, formats }) => {\n const fileURL = prefixFileUrlWithBackendUrl(url);\n\n if (mime.includes('image')) {\n const thumbnail = formats?.thumbnail?.url || null;\n const mediaURL = prefixFileUrlWithBackendUrl(thumbnail) || fileURL;\n\n return <Avatar src={mediaURL} alt={alternativeText || name} preview />;\n }\n\n const fileExtension = getFileExtension(ext);\n const fileName = name.length > 100 ? `${name.substring(0, 100)}...` : name;\n\n return (\n <Tooltip description={fileName}>\n <FileWrapper>{fileExtension}</FileWrapper>\n </Tooltip>\n );\n};\n\nMedia.defaultProps = {\n alternativeText: null,\n formats: null,\n};\n\nMedia.propTypes = {\n alternativeText: PropTypes.string,\n ext: PropTypes.string.isRequired,\n formats: PropTypes.object,\n mime: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n url: PropTypes.string.isRequired,\n};\n\nexport default Media;\n","import React from 'react';\n\nimport { AvatarGroup } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\n\nimport Media from './Media';\nimport FileWrapper from './Media/FileWrapper';\n\nconst MultipleMedia = ({ value }) => {\n return (\n <AvatarGroup>\n {value.map((file, index) => {\n const key = `${file.id}${index}`;\n\n if (index === 3) {\n const remainingFiles = `+${value.length - 3}`;\n\n return (\n <FileWrapper key={key} preview={false}>\n {remainingFiles}\n </FileWrapper>\n );\n }\n\n if (index > 3) {\n return null;\n }\n\n return <Media key={key} {...file} />;\n })}\n </AvatarGroup>\n );\n};\n\nMultipleMedia.propTypes = {\n value: PropTypes.arrayOf(\n PropTypes.shape({\n alternativeText: PropTypes.string,\n ext: PropTypes.string.isRequired,\n formats: PropTypes.object,\n mime: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n url: PropTypes.string.isRequired,\n })\n ).isRequired,\n};\n\nexport default MultipleMedia;\n","import React, { useEffect, useState } from 'react';\n\nimport { Badge, Flex, Loader, Typography, useNotifyAT } from '@strapi/design-system';\nimport { Menu } from '@strapi/design-system/v2';\nimport { useFetchClient } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { useQuery } from 'react-query';\nimport styled from 'styled-components';\n\nimport { getTrad } from '../../../../../utils';\nimport CellValue from '../CellValue';\n\nconst RelationMultiple = ({ fieldSchema, metadatas, name, entityId, value, contentType }) => {\n const { formatMessage } = useIntl();\n const { notifyStatus } = useNotifyAT();\n const [isOpen, setIsOpen] = useState(false);\n\n const { get } = useFetchClient();\n\n const { data, status } = useQuery(\n [fieldSchema.targetModel, entityId],\n async () => {\n const {\n data: { results, pagination },\n } = await get(\n `/content-manager/relations/${contentType.uid}/${entityId}/${name.split('.')[0]}`\n );\n\n return { results, pagination };\n },\n {\n enabled: isOpen,\n staleTime: 0,\n select: (data) => ({\n ...data,\n results: [...data.results].reverse(),\n }),\n }\n );\n\n useEffect(() => {\n if (data) {\n notifyStatus(\n formatMessage({\n id: getTrad('DynamicTable.relation-loaded'),\n defaultMessage: 'Relations have been loaded',\n })\n );\n }\n }, [data, formatMessage, notifyStatus]);\n\n return (\n <Menu.Root onOpenChange={(isOpen) => setIsOpen(isOpen)}>\n <MenuTrigger onClick={(e) => e.stopPropagation()}>\n <Flex gap={1} wrap=\"nowrap\">\n <Badge>{value.count}</Badge>\n {formatMessage(\n {\n id: 'content-manager.containers.ListPage.items',\n defaultMessage: '{number, plural, =0 {items} one {item} other {items}}',\n },\n { number: value.count }\n )}\n </Flex>\n </MenuTrigger>\n <Menu.Content>\n {status !== 'success' && (\n <Menu.Item disabled>\n <Loader small>\n {formatMessage({\n id: getTrad('ListViewTable.relation-loading'),\n defaultMessage: 'Relations are loading',\n })}\n </Loader>\n </Menu.Item>\n )}\n\n {status === 'success' && (\n <>\n {data?.results.map((entry) => (\n <Menu.Item key={entry.id} disabled>\n <TypographyMaxWidth ellipsis>\n <CellValue\n type={metadatas.mainField.schema.type}\n value={entry[metadatas.mainField.name] || entry.id}\n />\n </TypographyMaxWidth>\n </Menu.Item>\n ))}\n\n {data?.pagination.total > 10 && (\n <Menu.Item\n aria-disabled\n aria-label={formatMessage({\n id: getTrad('ListViewTable.relation-more'),\n defaultMessage: 'This relation contains more entities than displayed',\n })}\n >\n <Typography>…</Typography>\n </Menu.Item>\n )}\n </>\n )}\n </Menu.Content>\n </Menu.Root>\n );\n};\n\nRelationMultiple.propTypes = {\n contentType: PropTypes.shape({\n uid: PropTypes.string.isRequired,\n }).isRequired,\n fieldSchema: PropTypes.shape({\n relation: PropTypes.string,\n targetModel: PropTypes.string,\n type: PropTypes.string.isRequired,\n }).isRequired,\n metadatas: PropTypes.shape({\n mainField: PropTypes.shape({\n name: PropTypes.string.isRequired,\n schema: PropTypes.shape({ type: PropTypes.string.isRequired }).isRequired,\n }),\n }).isRequired,\n name: PropTypes.string.isRequired,\n entityId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n value: PropTypes.object.isRequired,\n};\n\nconst TypographyMaxWidth = styled(Typography)`\n max-width: 500px;\n`;\n\n/**\n * TODO: this needs to be solved in the Design-System\n */\nconst MenuTrigger = styled(Menu.Trigger)`\n svg {\n width: ${6 / 16}rem;\n height: ${4 / 16}rem;\n }\n`;\n\nexport default RelationMultiple;\n","import React from 'react';\n\nimport { Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nimport CellValue from '../CellValue';\n\nconst TypographyMaxWidth = styled(Typography)`\n max-width: 500px;\n`;\n\nconst RelationSingle = ({ metadatas, value }) => {\n return (\n <TypographyMaxWidth textColor=\"neutral800\" ellipsis>\n <CellValue\n type={metadatas.mainField.schema.type}\n value={value[metadatas.mainField.name] ?? value.id}\n />\n </TypographyMaxWidth>\n );\n};\n\nRelationSingle.propTypes = {\n metadatas: PropTypes.shape({\n mainField: PropTypes.shape({\n name: PropTypes.string.isRequired,\n schema: PropTypes.shape({ type: PropTypes.string.isRequired }).isRequired,\n }),\n }).isRequired,\n value: PropTypes.object.isRequired,\n};\n\nexport default RelationSingle;\n","import React from 'react';\n\nimport { Badge, Typography } from '@strapi/design-system';\nimport { Menu } from '@strapi/design-system/v2';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport styled from 'styled-components';\n\nimport CellValue from '../CellValue';\n\nconst TypographyMaxWidth = styled(Typography)`\n max-width: 500px;\n`;\n\nconst RepeatableComponentCell = ({ value, metadatas }) => {\n const { formatMessage } = useIntl();\n const {\n mainField: { type: mainFieldType, name: mainFieldName },\n } = metadatas;\n\n return (\n <Menu.Root>\n <MenuTrigger onClick={(e) => e.stopPropagation()}>\n <Badge>{value.length}</Badge>{' '}\n {formatMessage(\n {\n id: 'content-manager.containers.ListPage.items',\n defaultMessage: '{number, plural, =0 {items} one {item} other {items}}',\n },\n { number: value.length }\n )}\n </MenuTrigger>\n <Menu.Content>\n {value.map((item) => (\n <Menu.Item key={item.id} disabled>\n <TypographyMaxWidth ellipsis>\n <CellValue type={mainFieldType} value={item[mainFieldName] || item.id} />\n </TypographyMaxWidth>\n </Menu.Item>\n ))}\n </Menu.Content>\n </Menu.Root>\n );\n};\n\nRepeatableComponentCell.propTypes = {\n metadatas: PropTypes.shape({\n mainField: PropTypes.shape({\n name: PropTypes.string,\n type: PropTypes.string,\n value: PropTypes.string,\n }),\n }).isRequired,\n value: PropTypes.array.isRequired,\n};\n\n/**\n * TODO: this needs to be solved in the Design-System\n */\nconst MenuTrigger = styled(Menu.Trigger)`\n svg {\n width: ${6 / 16}rem;\n height: ${4 / 16}rem;\n }\n`;\n\nexport default RepeatableComponentCell;\n","import React from 'react';\n\nimport { Tooltip, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nimport CellValue from '../CellValue';\n\nconst TypographyMaxWidth = styled(Typography)`\n max-width: 250px;\n`;\n\nconst SingleComponentCell = ({ value, metadatas }) => {\n const { mainField } = metadatas;\n const content = value[mainField.name];\n\n return (\n <Tooltip label={content}>\n <TypographyMaxWidth textColor=\"neutral800\" ellipsis>\n <CellValue type={mainField.type} value={content} />\n </TypographyMaxWidth>\n </Tooltip>\n );\n};\n\nSingleComponentCell.propTypes = {\n metadatas: PropTypes.shape({\n mainField: PropTypes.shape({\n name: PropTypes.string,\n type: PropTypes.string,\n value: PropTypes.string,\n }),\n }).isRequired,\n value: PropTypes.object.isRequired,\n};\n\nexport default SingleComponentCell;\n","export default function isSingleRelation(type) {\n return ['oneToOne', 'manyToOne', 'oneToOneMorph'].includes(type);\n}\n","import isEmpty from 'lodash/isEmpty';\nimport isNumber from 'lodash/isNumber';\n\nimport isFieldTypeNumber from '../../../../../utils/isFieldTypeNumber';\n\nimport isSingleRelation from './isSingleRelation';\n\nexport default function hasContent(type, content, metadatas, fieldSchema) {\n if (type === 'component') {\n const {\n mainField: { name: mainFieldName, type: mainFieldType },\n } = metadatas;\n\n // Repeatable fields show the ID as fallback, in case the mainField\n // doesn't have any content\n if (fieldSchema?.repeatable) {\n return content.length > 0;\n }\n\n const value = content?.[mainFieldName];\n\n // relations, media ... show the id as fallback\n if (mainFieldName === 'id' && ![undefined, null].includes(value)) {\n return true;\n }\n\n /* The ID field reports itself as type `integer`, which makes it\n impossible to distinguish it from other number fields.\n\n Biginteger fields need to be treated as strings, as `isNumber`\n doesn't deal with them.\n */\n if (\n isFieldTypeNumber(mainFieldType) &&\n mainFieldType !== 'biginteger' &&\n mainFieldName !== 'id'\n ) {\n return isNumber(value);\n }\n\n return !isEmpty(value);\n }\n\n if (type === 'relation') {\n if (isSingleRelation(fieldSchema.relation)) {\n return !isEmpty(content);\n }\n\n return content?.count > 0;\n }\n\n /* \n Biginteger fields need to be treated as strings, as `isNumber`\n doesn't deal with them.\n */\n if (isFieldTypeNumber(type) && type !== 'biginteger') {\n return isNumber(content);\n }\n\n if (type === 'boolean') {\n return content !== null;\n }\n\n return !isEmpty(content);\n}\n","import React from 'react';\n\nimport { Tooltip, Typography } from '@strapi/design-system';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nimport CellValue from './CellValue';\nimport Media from './Media';\nimport MultipleMedias from './MultipleMedias';\nimport RelationMultiple from './RelationMultiple';\nimport RelationSingle from './RelationSingle';\nimport RepeatableComponent from './RepeatableComponent';\nimport SingleComponent from './SingleComponent';\nimport hasContent from './utils/hasContent';\nimport isSingleRelation from './utils/isSingleRelation';\n\nconst TypographyMaxWidth = styled(Typography)`\n max-width: 300px;\n`;\n\nconst CellContent = ({ content, fieldSchema, metadatas, name, rowId, contentType }) => {\n const { type } = fieldSchema;\n\n if (!hasContent(type, content, metadatas, fieldSchema)) {\n return <Typography textColor=\"neutral800\">-</Typography>;\n }\n\n switch (type) {\n case 'media':\n if (!fieldSchema.multiple) {\n return <Media {...content} />;\n }\n\n return <MultipleMedias value={content} />;\n\n case 'relation': {\n if (isSingleRelation(fieldSchema.relation)) {\n return <RelationSingle metadatas={metadatas} value={content} />;\n }\n\n return (\n <RelationMultiple\n fieldSchema={fieldSchema}\n metadatas={metadatas}\n value={content}\n name={name}\n entityId={rowId}\n contentType={contentType}\n />\n );\n }\n\n case 'component':\n if (fieldSchema.repeatable === true) {\n return <RepeatableComponent value={content} metadatas={metadatas} />;\n }\n\n return <SingleComponent value={content} metadatas={metadatas} />;\n\n case 'string':\n return (\n <Tooltip description={content}>\n <TypographyMaxWidth ellipsis textColor=\"neutral800\">\n <CellValue type={type} value={content} />\n </TypographyMaxWidth>\n </Tooltip>\n );\n\n default:\n return (\n <TypographyMaxWidth ellipsis textColor=\"neutral800\">\n <CellValue type={type} value={content} />\n </TypographyMaxWidth>\n );\n }\n};\n\nCellContent.defaultProps = {\n content: undefined,\n};\n\nCellContent.propTypes = {\n content: PropTypes.any,\n contentType: PropTypes.shape({\n uid: PropTypes.string.isRequired,\n }).isRequired,\n fieldSchema: PropTypes.shape({\n component: PropTypes.string,\n multiple: PropTypes.bool,\n type: PropTypes.string.isRequired,\n repeatable: PropTypes.bool,\n relation: PropTypes.string,\n }).isRequired,\n metadatas: PropTypes.object.isRequired,\n name: PropTypes.string.isRequired,\n rowId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n};\n\nexport default CellContent;\n","import React from 'react';\n\nimport { Flex, BaseCheckbox, TextButton, Typography } from '@strapi/design-system';\nimport { useCollator, useTracking } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { useDispatch, useSelector } from 'react-redux';\nimport styled from 'styled-components';\n\nimport { checkIfAttributeIsDisplayable } from '../../../../utils';\nimport { onChangeListHeaders, onResetListHeaders } from '../../actions';\nimport { selectDisplayedHeaders } from '../../selectors';\n\nconst ChackboxWrapper = styled(Flex)`\n :hover {\n background-color: ${(props) => props.theme.colors.primary100};\n }\n`;\n\nexport const FieldPicker = ({ layout }) => {\n const dispatch = useDispatch();\n const displayedHeaders = useSelector(selectDisplayedHeaders);\n const { trackUsage } = useTracking();\n const { formatMessage, locale } = useIntl();\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const columns = Object.keys(layout.contentType.attributes)\n .filter((name) => checkIfAttributeIsDisplayable(layout.contentType.attributes[name]))\n .map((name) => ({\n name,\n label: layout.contentType.metadatas[name].list.label,\n }))\n .sort((a, b) => formatter.compare(a.label, b.label));\n\n const displayedHeaderKeys = displayedHeaders.map(({ name }) => name);\n\n const handleChange = (name) => {\n trackUsage('didChangeDisplayedFields');\n dispatch(onChangeListHeaders({ name, value: displayedHeaderKeys.includes(name) }));\n };\n\n const handleReset = () => {\n dispatch(onResetListHeaders());\n };\n\n return (\n <Flex as=\"fieldset\" direction=\"column\" alignItems=\"stretch\" gap={3}>\n <Flex justifyContent=\"space-between\">\n <Typography as=\"legend\" variant=\"pi\" fontWeight=\"bold\">\n {formatMessage({\n id: 'containers.ListPage.displayedFields',\n defaultMessage: 'Displayed fields',\n })}\n </Typography>\n\n <TextButton onClick={handleReset}>\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </TextButton>\n </Flex>\n\n <Flex direction=\"column\" alignItems=\"stretch\">\n {columns.map((header) => {\n const isActive = displayedHeaderKeys.includes(header.name);\n\n return (\n <ChackboxWrapper\n wrap=\"wrap\"\n gap={2}\n as=\"label\"\n background={isActive ? 'primary100' : 'transparent'}\n hasRadius\n padding={2}\n key={header.name}\n >\n <BaseCheckbox\n onChange={() => handleChange(header.name)}\n value={isActive}\n name={header.name}\n />\n <Typography fontSize={1}>{header.label}</Typography>\n </ChackboxWrapper>\n );\n })}\n </Flex>\n </Flex>\n );\n};\n\nFieldPicker.propTypes = {\n layout: PropTypes.shape({\n contentType: PropTypes.shape({\n attributes: PropTypes.object.isRequired,\n metadatas: PropTypes.object.isRequired,\n layouts: PropTypes.shape({\n list: PropTypes.array.isRequired,\n }).isRequired,\n options: PropTypes.object.isRequired,\n settings: PropTypes.object.isRequired,\n }).isRequired,\n }).isRequired,\n};\n","import React from 'react';\n\nimport { Flex, IconButton, Popover } from '@strapi/design-system';\nimport { CheckPermissions, LinkButton } from '@strapi/helper-plugin';\nimport { Cog, Layer } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\n\nimport { selectAdminPermissions } from '../../../../../selectors';\nimport { FieldPicker } from '../FieldPicker';\n\nexport const ViewSettingsMenu = ({ slug, layout }) => {\n const [isVisible, setIsVisible] = React.useState(false);\n const cogButtonRef = React.useRef();\n const permissions = useSelector(selectAdminPermissions);\n const { formatMessage } = useIntl();\n\n const handleToggle = () => {\n setIsVisible((prev) => !prev);\n };\n\n return (\n <>\n <IconButton\n icon={<Cog />}\n label={formatMessage({\n id: 'components.ViewSettings.tooltip',\n defaultMessage: 'View Settings',\n })}\n ref={cogButtonRef}\n onClick={handleToggle}\n />\n {isVisible && (\n <Popover\n placement=\"bottom-end\"\n source={cogButtonRef}\n onDismiss={handleToggle}\n spacing={4}\n padding={3}\n >\n <Flex alignItems=\"stretch\" direction=\"column\" gap={3}>\n <CheckPermissions\n permissions={permissions.contentManager.collectionTypesConfigurations}\n >\n <LinkButton\n size=\"S\"\n startIcon={<Layer />}\n to={`${slug}/configurations/list`}\n variant=\"secondary\"\n >\n {formatMessage({\n id: 'app.links.configure-view',\n defaultMessage: 'Configure the view',\n })}\n </LinkButton>\n </CheckPermissions>\n\n <FieldPicker layout={layout} />\n </Flex>\n </Popover>\n )}\n </>\n );\n};\n\nViewSettingsMenu.propTypes = {\n slug: PropTypes.string.isRequired,\n layout: PropTypes.shape({\n contentType: PropTypes.shape({\n attributes: PropTypes.object.isRequired,\n metadatas: PropTypes.object.isRequired,\n layouts: PropTypes.shape({\n list: PropTypes.array.isRequired,\n }).isRequired,\n options: PropTypes.object.isRequired,\n settings: PropTypes.object.isRequired,\n }).isRequired,\n }).isRequired,\n};\n","import * as React from 'react';\n\nimport { bindActionCreators } from '@reduxjs/toolkit';\nimport {\n Main,\n ActionLayout,\n Button,\n ContentLayout,\n HeaderLayout,\n useNotifyAT,\n Flex,\n Td,\n Tr,\n Typography,\n Status,\n lightTheme,\n} from '@strapi/design-system';\nimport {\n findMatchingPermissions,\n NoPermissions,\n SearchURLQuery,\n useFetchClient,\n useFocusWhenNavigate,\n useQueryParams,\n useNotification,\n useRBACProvider,\n useTracking,\n Link,\n useAPIErrorHandler,\n useCollator,\n useStrapiApp,\n Table,\n PaginationURLQuery,\n PageSizeURLQuery,\n} from '@strapi/helper-plugin';\nimport { ArrowLeft, Plus } from '@strapi/icons';\nimport axios, { AxiosError } from 'axios';\nimport isEqual from 'lodash/isEqual';\nimport PropTypes from 'prop-types';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { useMutation } from 'react-query';\nimport { useDispatch } from 'react-redux';\nimport { useHistory, useLocation, Link as ReactRouterLink } from 'react-router-dom';\n\nimport { HOOKS } from '../../../constants';\nimport { useTypedSelector } from '../../../core/store/hooks';\nimport { useAdminUsers } from '../../../hooks/useAdminUsers';\nimport { useEnterprise } from '../../../hooks/useEnterprise';\nimport { InjectionZone } from '../../../shared/components/InjectionZone';\nimport { Filter } from '../../components/Filter';\nimport { AdminUsersFilter } from '../../components/Filter/CustomInputs/AdminUsersFilter';\nimport { CREATOR_FIELDS } from '../../constants/attributes';\nimport { useAllowedAttributes } from '../../hooks/useAllowedAttributes';\nimport { getTrad, getDisplayName } from '../../utils';\n\nimport * as Actions from './actions';\nimport { Body } from './components/Body';\nimport BulkActionButtons from './components/BulkActionButtons';\nimport CellContent from './components/CellContent';\nimport { ViewSettingsMenu } from './components/ViewSettingsMenu';\nimport makeSelectListView, { selectDisplayedHeaders } from './selectors';\nimport { buildValidGetParams } from './utils';\n\nconst { INJECT_COLUMN_IN_TABLE } = HOOKS;\nconst REVIEW_WORKFLOW_COLUMNS_CE = null;\nconst REVIEW_WORKFLOW_COLUMNS_CELL_CE = () => null;\nconst REVIEW_WORKFLOW_FILTER_CE = [];\nconst USER_FILTER_ATTRIBUTES = [...CREATOR_FIELDS, 'strapi_assignee'];\n\nfunction ListView({ canCreate, canDelete, canRead, canPublish, layout, slug }) {\n const dispatch = useDispatch();\n const { getData, getDataSucceeded } = React.useMemo(\n () =>\n bindActionCreators(\n { getData: Actions.getData, getDataSucceeded: Actions.getDataSucceeded },\n dispatch\n ),\n [dispatch]\n );\n const { pagination, isLoading, data } = useTypedSelector(makeSelectListView());\n const { total } = pagination;\n const { contentType } = layout;\n const {\n info,\n options,\n metadatas,\n settings: { bulkable: isBulkable, filterable: isFilterable, searchable: isSearchable },\n } = contentType;\n const [isConfirmDeleteRowOpen, setIsConfirmDeleteRowOpen] = React.useState(false);\n const toggleNotification = useNotification();\n const { trackUsage } = useTracking();\n const { allPermissions, refetchPermissions } = useRBACProvider();\n const trackUsageRef = React.useRef(trackUsage);\n const fetchPermissionsRef = React.useRef(refetchPermissions);\n const { notifyStatus } = useNotifyAT();\n const { formatAPIError } = useAPIErrorHandler(getTrad);\n const allowedAttributes = useAllowedAttributes(contentType, slug);\n const [{ query }] = useQueryParams();\n const { pathname } = useLocation();\n const { push } = useHistory();\n const { formatMessage, locale } = useIntl();\n const fetchClient = useFetchClient();\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const selectedUserIds =\n query?.filters?.$and?.reduce((acc, filter) => {\n const [key, value] = Object.entries(filter)[0];\n const id = value.id?.$eq || value.id?.$ne;\n\n // TODO: strapi_assignee should not be in here and rather defined\n // in the ee directory.\n if (USER_FILTER_ATTRIBUTES.includes(key) && !acc.includes(id)) {\n acc.push(id);\n }\n\n return acc;\n }, []) ?? [];\n\n const { users, isLoading: isLoadingAdminUsers } = useAdminUsers(\n { filter: { id: { in: selectedUserIds } } },\n {\n // fetch the list of admin users only if the filter contains users and the\n // current user has permissions to display users\n enabled:\n selectedUserIds.length > 0 &&\n findMatchingPermissions(allPermissions, [\n {\n action: 'admin::users.read',\n subject: null,\n },\n ]).length > 0,\n }\n );\n\n useFocusWhenNavigate();\n\n const params = React.useMemo(() => buildValidGetParams(query), [query]);\n const pluginsQueryParams = stringify({ plugins: query.plugins }, { encode: false });\n\n const displayedAttributeFilters = allowedAttributes.map((name) => {\n const attribute = contentType.attributes[name];\n const { type, enum: options } = attribute;\n\n const trackedEvent = {\n name: 'didFilterEntries',\n properties: { useRelation: type === 'relation' },\n };\n\n const { mainField, label } = metadatas[name].list;\n\n const filter = {\n name,\n metadatas: { label: formatMessage({ id: label, defaultMessage: label }) },\n fieldSchema: { type, options, mainField },\n trackedEvent,\n };\n\n if (attribute.type === 'relation' && attribute.target === 'admin::user') {\n filter.metadatas = {\n ...filter.metadatas,\n customOperators: [\n {\n intlLabel: {\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n },\n value: '$eq',\n },\n {\n intlLabel: {\n id: 'components.FilterOptions.FILTER_TYPES.$ne',\n defaultMessage: 'is not',\n },\n value: '$ne',\n },\n ],\n customInput: AdminUsersFilter,\n options: users.map((user) => ({\n label: getDisplayName(user, formatMessage),\n customValue: user.id.toString(),\n })),\n };\n\n filter.fieldSchema.mainField = {\n ...mainField,\n name: 'id',\n };\n }\n\n return filter;\n });\n\n const hasDraftAndPublish = options?.draftAndPublish ?? false;\n const hasReviewWorkflows = options?.reviewWorkflows ?? false;\n\n const reviewWorkflowColumns = useEnterprise(\n REVIEW_WORKFLOW_COLUMNS_CE,\n async () =>\n (\n await import(\n '../../../../../ee/admin/src/content-manager/pages/ListView/ReviewWorkflowsColumn/constants'\n )\n ).REVIEW_WORKFLOW_COLUMNS_EE,\n {\n enabled: !!options?.reviewWorkflows,\n }\n );\n const ReviewWorkflowsColumns = useEnterprise(\n REVIEW_WORKFLOW_COLUMNS_CELL_CE,\n async () => {\n const { ReviewWorkflowsStageEE, ReviewWorkflowsAssigneeEE } = await import(\n '../../../../../ee/admin/src/content-manager/pages/ListView/ReviewWorkflowsColumn'\n );\n\n return { ReviewWorkflowsStageEE, ReviewWorkflowsAssigneeEE };\n },\n {\n enabled: hasReviewWorkflows,\n }\n );\n\n const reviewWorkflowFilter = useEnterprise(\n REVIEW_WORKFLOW_FILTER_CE,\n async () =>\n (\n await import(\n '../../../../../ee/admin/src/content-manager/components/Filter/CustomInputs/ReviewWorkflows/constants'\n )\n ).REVIEW_WORKFLOW_FILTERS,\n {\n combine(ceFilters, eeFilters) {\n return [\n ...ceFilters,\n ...eeFilters\n .filter((eeFilter) => {\n // do not display the filter at all, if the current user does\n // not have permissions to read admin users\n if (eeFilter.name === 'strapi_assignee') {\n return (\n findMatchingPermissions(allPermissions, [\n {\n action: 'admin::users.read',\n subject: null,\n },\n ]).length > 0\n );\n }\n\n return true;\n })\n .map((eeFilter) => ({\n ...eeFilter,\n metadatas: {\n ...eeFilter.metadatas,\n // the stage filter needs the current content-type uid to fetch\n // the list of stages that can be assigned to this content-type\n ...(eeFilter.name === 'strapi_stage' ? { uid: contentType.uid } : {}),\n\n // translate the filter label\n label: formatMessage(eeFilter.metadatas.label),\n\n // `options` allows the filter-tag to render the displayname\n // of a user over a plain id\n options:\n eeFilter.name === 'strapi_assignee' &&\n users.map((user) => ({\n label: getDisplayName(user, formatMessage),\n customValue: user.id.toString(),\n })),\n },\n })),\n ];\n },\n\n defaultValue: [],\n\n // we have to wait for admin users to be fully loaded, because otherwise\n // combine is called to early and does not contain the latest state of\n // the users array\n enabled: hasReviewWorkflows && !isLoadingAdminUsers,\n }\n );\n\n const { post, del } = fetchClient;\n\n const bulkUnpublishMutation = useMutation(\n (data) =>\n post(`/content-manager/collection-types/${contentType.uid}/actions/bulkUnpublish`, data),\n {\n onSuccess() {\n toggleNotification({\n type: 'success',\n message: {\n id: 'content-manager.success.record.unpublish',\n defaultMessage: 'Unpublished',\n },\n });\n\n fetchData(`/content-manager/collection-types/${slug}`, { params });\n },\n onError(error) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(error),\n });\n },\n }\n );\n\n // FIXME\n // Using a ref to avoid requests being fired multiple times on slug on change\n // We need it because the hook as mulitple dependencies so it may run before the permissions have checked\n const requestUrlRef = React.useRef('');\n /**\n * TODO: re-write all of this, it's a mess.\n */\n const fetchData = React.useCallback(\n async (endPoint, options) => {\n getData();\n\n try {\n const {\n data: { results, pagination: paginationResult },\n } = await fetchClient.get(endPoint, options);\n\n // If user enters a page number that doesn't exist, redirect him to the last page\n if (paginationResult.page > paginationResult.pageCount && paginationResult.pageCount > 0) {\n const query = {\n ...params,\n page: paginationResult.pageCount,\n };\n\n push({\n pathname,\n state: { from: pathname },\n search: stringify(query),\n });\n\n return;\n }\n\n notifyStatus(\n formatMessage(\n {\n id: getTrad('utils.data-loaded'),\n defaultMessage:\n '{number, plural, =1 {# entry has} other {# entries have}} successfully been loaded',\n },\n // Using the plural form\n { number: paginationResult.count }\n )\n );\n\n getDataSucceeded(paginationResult, results);\n } catch (err) {\n if (axios.isCancel(err)) {\n return;\n }\n\n const resStatus = err?.response?.status ?? null;\n\n if (resStatus === 403) {\n await fetchPermissionsRef.current();\n\n toggleNotification({\n type: 'info',\n message: { id: getTrad('permissions.not-allowed.update') },\n });\n\n push('/');\n\n return;\n }\n\n toggleNotification({\n type: 'warning',\n message: { id: getTrad('error.model.fetch') },\n });\n }\n },\n [\n formatMessage,\n getData,\n getDataSucceeded,\n notifyStatus,\n push,\n toggleNotification,\n fetchClient,\n params,\n pathname,\n ]\n );\n\n const handleConfirmDeleteAllData = React.useCallback(\n async (ids) => {\n try {\n await post(`/content-manager/collection-types/${slug}/actions/bulkDelete`, {\n ids,\n });\n\n fetchData(`/content-manager/collection-types/${slug}`, { params });\n\n trackUsageRef.current('didBulkDeleteEntries');\n } catch (err) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(err),\n });\n }\n },\n [slug, toggleNotification, formatAPIError, post, fetchData, params]\n );\n\n const handleConfirmDeleteData = React.useCallback(\n async (idToDelete) => {\n try {\n await del(`/content-manager/collection-types/${slug}/${idToDelete}`);\n\n const requestUrl = `/content-manager/collection-types/${slug}`;\n fetchData(requestUrl, { params });\n\n toggleNotification({\n type: 'success',\n message: { id: getTrad('success.record.delete') },\n });\n } catch (err) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(err),\n });\n }\n },\n [slug, toggleNotification, formatAPIError, del, fetchData, params]\n );\n\n const handleConfirmUnpublishAllData = (selectedEntries) => {\n return bulkUnpublishMutation.mutateAsync({ ids: selectedEntries });\n };\n\n React.useEffect(() => {\n const CancelToken = axios.CancelToken;\n const source = CancelToken.source();\n\n const shouldSendRequest = canRead;\n const requestUrl = `/content-manager/collection-types/${slug}`;\n\n if (shouldSendRequest && requestUrl.includes(requestUrlRef.current)) {\n fetchData(requestUrl, { cancelToken: source.token, params });\n }\n\n return () => {\n requestUrlRef.current = slug;\n\n source.cancel('Operation canceled by the user.');\n };\n }, [canRead, getData, slug, params, getDataSucceeded, fetchData]);\n\n const defaultHeaderLayoutTitle = formatMessage({\n id: getTrad('header.name'),\n defaultMessage: 'Content',\n });\n const headerLayoutTitle = formatMessage({\n id: info.displayName,\n defaultMessage: info.displayName || defaultHeaderLayoutTitle,\n });\n\n const { runHookWaterfall } = useStrapiApp();\n const displayedHeaders = useTypedSelector(selectDisplayedHeaders);\n\n const tableHeaders = React.useMemo(() => {\n const headers = runHookWaterfall(INJECT_COLUMN_IN_TABLE, {\n displayedHeaders,\n layout,\n });\n\n const formattedHeaders = headers.displayedHeaders.map((header) => {\n const { metadatas } = header;\n\n if (header.fieldSchema.type === 'relation') {\n const sortFieldValue = `${header.name}.${header.metadatas.mainField.name}`;\n\n return {\n ...header,\n metadatas: {\n ...metadatas,\n label: formatMessage({\n id: getTrad(`containers.ListPage.table-headers.${header.name}`),\n defaultMessage: metadatas.label,\n }),\n },\n name: sortFieldValue,\n };\n }\n\n return {\n ...header,\n metadatas: {\n ...metadatas,\n label: formatMessage({\n id: getTrad(`containers.ListPage.table-headers.${header.name}`),\n defaultMessage: metadatas.label,\n }),\n },\n };\n });\n\n if (hasDraftAndPublish) {\n formattedHeaders.push({\n key: '__published_at_temp_key__',\n name: 'publishedAt',\n fieldSchema: {\n type: 'custom',\n },\n metadatas: {\n label: formatMessage({\n id: getTrad(`containers.ListPage.table-headers.publishedAt`),\n defaultMessage: 'publishedAt',\n }),\n searchable: false,\n sortable: true,\n },\n });\n }\n\n if (reviewWorkflowColumns) {\n // Make sure the column header label is translated\n reviewWorkflowColumns.map((column) => {\n if (typeof column.metadatas.label !== 'string') {\n column.metadatas.label = formatMessage(column.metadatas.label);\n }\n\n return column;\n });\n\n formattedHeaders.push(...reviewWorkflowColumns);\n }\n\n return formattedHeaders;\n }, [\n runHookWaterfall,\n displayedHeaders,\n layout,\n reviewWorkflowColumns,\n hasDraftAndPublish,\n formatMessage,\n ]);\n\n const subtitle = canRead\n ? formatMessage(\n {\n id: getTrad('pages.ListView.header-subtitle'),\n defaultMessage: '{number, plural, =0 {# entries} one {# entry} other {# entries}} found',\n },\n { number: total }\n )\n : null;\n\n const getCreateAction = (props) =>\n canCreate ? (\n <Button\n {...props}\n forwardedAs={ReactRouterLink}\n onClick={() => {\n const trackerProperty = hasDraftAndPublish ? { status: 'draft' } : {};\n\n trackUsageRef.current('willCreateEntry', trackerProperty);\n }}\n to={{\n pathname: `${pathname}/create`,\n search: query.plugins ? pluginsQueryParams : '',\n }}\n startIcon={<Plus />}\n style={{ textDecoration: 'none' }}\n >\n {formatMessage({\n id: getTrad('HeaderLayout.button.label-add-entry'),\n defaultMessage: 'Create new entry',\n })}\n </Button>\n ) : null;\n\n /**\n *\n * @param {string} id\n * @returns void\n */\n const handleRowClick = (id) => () => {\n trackUsage('willEditEntryFromList');\n push({\n pathname: `${pathname}/${id}`,\n state: { from: pathname },\n search: pluginsQueryParams,\n });\n };\n\n const handleCloneClick = (id) => async () => {\n try {\n const { data } = await post(\n `/content-manager/collection-types/${contentType.uid}/auto-clone/${id}?${pluginsQueryParams}`\n );\n\n if ('id' in data) {\n push({\n pathname: `${pathname}/${data.id}`,\n state: { from: pathname },\n search: pluginsQueryParams,\n });\n }\n } catch (err) {\n if (err instanceof AxiosError) {\n push({\n pathname: `${pathname}/create/clone/${id}`,\n state: { from: pathname, error: formatAPIError(err) },\n search: pluginsQueryParams,\n });\n }\n }\n };\n\n // Add 1 column for the checkbox and 1 for the actions\n const colCount = tableHeaders.length + 2;\n\n // We have this function to refetch data when selected entries modal is closed\n const refetchData = () => {\n fetchData(`/content-manager/collection-types/${slug}`, { params });\n };\n\n // Block rendering until the review stage component is fully loaded in EE\n if (!ReviewWorkflowsColumns) {\n return null;\n }\n\n return (\n <Main aria-busy={isLoading}>\n <HeaderLayout\n primaryAction={getCreateAction()}\n subtitle={subtitle}\n title={headerLayoutTitle}\n navigationAction={\n <Link startIcon={<ArrowLeft />} to=\"/content-manager/\">\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n }\n />\n {!canRead && (\n <ActionLayout endActions={<InjectionZone area=\"contentManager.listView.actions\" />} />\n )}\n {canRead && (\n <ActionLayout\n endActions={\n <>\n <InjectionZone area=\"contentManager.listView.actions\" />\n <ViewSettingsMenu slug={slug} layout={layout} />\n </>\n }\n startActions={\n <>\n {isSearchable && (\n <SearchURLQuery\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n { target: headerLayoutTitle }\n )}\n placeholder={formatMessage({\n id: 'global.search',\n defaultMessage: 'Search',\n })}\n trackedEvent=\"didSearch\"\n />\n )}\n {isFilterable && !isLoadingAdminUsers && (\n <Filter\n displayedFilters={[...displayedAttributeFilters, ...reviewWorkflowFilter].sort(\n (a, b) => formatter.compare(a.metadatas.label, b.metadatas.label)\n )}\n />\n )}\n </>\n }\n />\n )}\n <ContentLayout>\n {canRead ? (\n <Flex gap={4} direction=\"column\" alignItems=\"stretch\">\n <Table.Root rows={data} isLoading={isLoading} colCount={colCount}>\n <Table.ActionBar>\n <BulkActionButtons\n showPublish={canPublish && hasDraftAndPublish}\n showDelete={canDelete}\n onConfirmDeleteAll={handleConfirmDeleteAllData}\n onConfirmUnpublishAll={handleConfirmUnpublishAllData}\n refetchData={refetchData}\n />\n </Table.ActionBar>\n <Table.Content>\n <Table.Head>\n {/* Bulk action select all checkbox */}\n <Table.HeaderCheckboxCell />\n {/* Dynamic headers based on fields */}\n {tableHeaders.map(({ fieldSchema, key, name, metadatas }) => (\n <Table.HeaderCell\n key={key}\n name={name}\n fieldSchemaType={fieldSchema.type}\n relationFieldName={metadatas.mainField?.name}\n isSortable={metadatas.sortable}\n label={metadatas.label}\n />\n ))}\n {/* Visually hidden header for actions */}\n <Table.HeaderHiddenActionsCell />\n </Table.Head>\n {/* Loading content */}\n <Table.LoadingBody />\n {/* Empty content */}\n <Table.EmptyBody\n contentType={headerLayoutTitle}\n action={getCreateAction({ variant: 'secondary' })}\n />\n {/* Content */}\n <Body.Root\n onConfirmDelete={handleConfirmDeleteData}\n isConfirmDeleteRowOpen={isConfirmDeleteRowOpen}\n setIsConfirmDeleteRowOpen={setIsConfirmDeleteRowOpen}\n >\n {data.map((rowData, index) => {\n return (\n <Tr cursor=\"pointer\" key={rowData.id} onClick={handleRowClick(rowData.id)}>\n {/* Bulk action row checkbox */}\n <Td>\n <Body.CheckboxDataCell rowId={rowData.id} index={index} />\n </Td>\n {/* Field data */}\n {tableHeaders.map(({ key, name, cellFormatter, ...rest }) => {\n if (hasDraftAndPublish && name === 'publishedAt') {\n return (\n <Td key={key}>\n <Status\n width=\"min-content\"\n showBullet={false}\n variant={rowData.publishedAt ? 'success' : 'secondary'}\n size=\"S\"\n >\n <Typography\n fontWeight=\"bold\"\n textColor={`${\n rowData.publishedAt ? 'success' : 'secondary'\n }700`}\n >\n {formatMessage({\n id: getTrad(\n `containers.List.${\n rowData.publishedAt ? 'published' : 'draft'\n }`\n ),\n defaultMessage: rowData.publishedAt ? 'Published' : 'Draft',\n })}\n </Typography>\n </Status>\n </Td>\n );\n }\n\n if (hasReviewWorkflows) {\n if (name === 'strapi_stage') {\n return (\n <Td key={key}>\n {rowData.strapi_stage ? (\n <ReviewWorkflowsColumns.ReviewWorkflowsStageEE\n color={\n rowData.strapi_stage.color ?? lightTheme.colors.primary600\n }\n name={rowData.strapi_stage.name}\n />\n ) : (\n <Typography textColor=\"neutral800\">-</Typography>\n )}\n </Td>\n );\n }\n if (name === 'strapi_assignee') {\n return (\n <Td key={key}>\n {rowData.strapi_assignee ? (\n <ReviewWorkflowsColumns.ReviewWorkflowsAssigneeEE\n user={rowData.strapi_assignee}\n />\n ) : (\n <Typography textColor=\"neutral800\">-</Typography>\n )}\n </Td>\n );\n }\n }\n\n if (['createdBy', 'updatedBy'].includes(name.split('.')[0])) {\n // Display the users full name\n // Some entries doesn't have a user assigned as creator/updater (ex: entries created through content API)\n // In this case, we display a dash\n return (\n <Td key={key}>\n <Typography textColor=\"neutral800\">\n {rowData[name.split('.')[0]]\n ? getDisplayName(rowData[name.split('.')[0]], formatMessage)\n : '-'}\n </Typography>\n </Td>\n );\n }\n\n if (typeof cellFormatter === 'function') {\n return (\n <Td key={key}>{cellFormatter(rowData, { key, name, ...rest })}</Td>\n );\n }\n\n return (\n <Td key={key}>\n <CellContent\n content={rowData[name.split('.')[0]]}\n name={name}\n contentType={layout.contentType}\n {...rest}\n rowId={rowData.id}\n />\n </Td>\n );\n })}\n {/* Actions: edit, duplicate, delete */}\n {(canDelete || canPublish) && isBulkable && (\n <Td>\n <Body.EntityActionsDataCell\n rowId={rowData.id}\n index={index}\n setIsConfirmDeleteRowOpen={setIsConfirmDeleteRowOpen}\n canCreate={canCreate}\n canDelete={canDelete}\n handleCloneClick={handleCloneClick}\n />\n </Td>\n )}\n </Tr>\n );\n })}\n </Body.Root>\n </Table.Content>\n </Table.Root>\n <Flex alignItems=\"flex-end\" justifyContent=\"space-between\">\n <PageSizeURLQuery trackedEvent=\"willChangeNumberOfEntriesPerPage\" />\n <PaginationURLQuery pagination={{ pageCount: pagination?.pageCount || 1 }} />\n </Flex>\n </Flex>\n ) : (\n <NoPermissions />\n )}\n </ContentLayout>\n </Main>\n );\n}\n\nListView.propTypes = {\n canCreate: PropTypes.bool.isRequired,\n canDelete: PropTypes.bool.isRequired,\n canRead: PropTypes.bool.isRequired,\n canPublish: PropTypes.bool.isRequired,\n layout: PropTypes.exact({\n components: PropTypes.object.isRequired,\n contentType: PropTypes.shape({\n uid: PropTypes.string.isRequired,\n attributes: PropTypes.object.isRequired,\n metadatas: PropTypes.object.isRequired,\n info: PropTypes.shape({ displayName: PropTypes.string.isRequired }).isRequired,\n layouts: PropTypes.shape({\n list: PropTypes.array.isRequired,\n }).isRequired,\n options: PropTypes.object.isRequired,\n settings: PropTypes.object.isRequired,\n }).isRequired,\n }).isRequired,\n slug: PropTypes.string.isRequired,\n};\n\nexport default React.memo(ListView, isEqual);\n","import React, { memo, useMemo } from 'react';\n\nimport { difference, LoadingIndicatorPage, useRBAC } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\n\nimport { generatePermissionsObject } from '../../utils';\nimport ListView from '../ListView';\n\nconst Permissions = (props) => {\n const viewPermissions = useMemo(() => generatePermissionsObject(props.slug), [props.slug]);\n\n const { isLoading, allowedActions } = useRBAC(viewPermissions, props.permissions);\n\n if (isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n return <ListView {...props} {...allowedActions} />;\n};\n\nPermissions.defaultProps = {\n permissions: [],\n};\n\nPermissions.propTypes = {\n permissions: PropTypes.array,\n slug: PropTypes.string.isRequired,\n};\n\n// This avoids the components to rerender on params change causing multiple requests to be fired\nexport default memo(Permissions, (prev, next) => {\n const differenceBetweenRerenders = difference(prev, next);\n // Here the submenu is using a navlink which doesn't support the state\n // When we navigate from the EV to the LV using the menu the state is lost at some point\n // and this causes the component to rerender twice and firing requests twice\n // this hack prevents this\n // TODO: at some point we will need to refactor the LV and migrate to react-query\n const propNamesThatHaveChanged = Object.keys(differenceBetweenRerenders).filter(\n (propName) => propName !== 'state'\n );\n\n return propNamesThatHaveChanged.length > 0;\n});\n","import React, { useEffect } from 'react';\n\nimport { useQueryParams } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useDispatch } from 'react-redux';\nimport { useHistory } from 'react-router-dom';\n\nimport { useFindRedirectionLink, useSyncRbac } from '../../hooks';\nimport { resetProps, setLayout } from '../ListView/actions';\n\nimport Permissions from './Permissions';\n\nconst ListViewLayout = ({ layout, ...props }) => {\n const dispatch = useDispatch();\n const { replace } = useHistory();\n const [{ query, rawQuery }] = useQueryParams();\n const { permissions, isValid: isValidPermissions } = useSyncRbac(query, props.slug, 'listView');\n const redirectionLink = useFindRedirectionLink(props.slug);\n\n useEffect(() => {\n if (!rawQuery) {\n replace(redirectionLink);\n }\n }, [rawQuery, replace, redirectionLink]);\n\n useEffect(() => {\n dispatch(setLayout(layout));\n }, [dispatch, layout]);\n\n useEffect(() => {\n return () => {\n dispatch(resetProps());\n };\n }, [dispatch]);\n\n if (!isValidPermissions) {\n return null;\n }\n\n return <Permissions {...props} layout={layout} permissions={permissions} />;\n};\n\nListViewLayout.propTypes = {\n layout: PropTypes.exact({\n components: PropTypes.object.isRequired,\n contentType: PropTypes.shape({\n attributes: PropTypes.object.isRequired,\n metadatas: PropTypes.object.isRequired,\n layouts: PropTypes.shape({\n list: PropTypes.array.isRequired,\n }).isRequired,\n options: PropTypes.object.isRequired,\n settings: PropTypes.object.isRequired,\n pluginOptions: PropTypes.object,\n }).isRequired,\n }).isRequired,\n slug: PropTypes.string.isRequired,\n};\n\nexport default ListViewLayout;\n","import React from 'react';\n\nimport { Box } from '@strapi/design-system';\nimport { AnErrorOccurred } from '@strapi/helper-plugin';\n\nconst ErrorFallback = () => {\n return (\n <Box padding={8}>\n <AnErrorOccurred />\n </Box>\n );\n};\n\nexport default ErrorFallback;\n","import React, { memo, useMemo } from 'react';\n\nimport { CheckPagePermissions, LoadingIndicatorPage } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { ErrorBoundary } from 'react-error-boundary';\nimport { useSelector } from 'react-redux';\nimport { Route, Switch } from 'react-router-dom';\n\nimport { selectAdminPermissions } from '../../../selectors';\nimport { ContentTypeLayoutContext } from '../../contexts';\nimport { useFetchContentTypeLayout } from '../../hooks';\nimport { formatLayoutToApi } from '../../utils';\nimport EditSettingsView from '../EditSettingsView';\nimport EditViewLayoutManager from '../EditViewLayoutManager';\nimport { ListSettingsView } from '../ListSettingsView';\nimport ListViewLayout from '../ListViewLayoutManager';\n\nimport ErrorFallback from './components/ErrorFallback';\n\nconst CollectionTypeRecursivePath = ({\n match: {\n params: { slug },\n url,\n },\n}) => {\n const permissions = useSelector(selectAdminPermissions);\n const { isLoading, layout, updateLayout } = useFetchContentTypeLayout(slug);\n\n const { rawContentTypeLayout, rawComponentsLayouts } = useMemo(() => {\n let rawContentTypeLayout = {};\n let rawComponentsLayouts = {};\n\n if (layout.contentType) {\n rawContentTypeLayout = formatLayoutToApi(layout.contentType);\n }\n\n if (layout.components) {\n rawComponentsLayouts = Object.keys(layout.components).reduce((acc, current) => {\n acc[current] = formatLayoutToApi(layout.components[current]);\n\n return acc;\n }, {});\n }\n\n return { rawContentTypeLayout, rawComponentsLayouts };\n }, [layout]);\n\n const uid = layout?.contentType?.uid ?? null;\n\n // This statement is needed in order to prevent the CollectionTypeFormWrapper effects clean up phase to be run twice.\n // What can happen is that when navigating from one entry to another the cleanup phase of the fetch data effect is run twice : once when\n // unmounting, once when the url changes.\n // Since it can happen that the layout there's a delay when the layout is being fetched and the url changes adding the uid ! == slug\n // statement prevent the component from being mounted and unmounted twice.\n if (uid !== slug || isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n const renderRoute = (\n {\n location: { state },\n history: { goBack },\n match: {\n params: { id, origin },\n },\n },\n Component\n ) => {\n return (\n <Component\n slug={slug}\n layout={layout}\n state={state}\n goBack={goBack}\n id={id}\n origin={origin}\n />\n );\n };\n\n const routes = [\n { path: 'create/clone/:origin', comp: EditViewLayoutManager },\n { path: 'create', comp: EditViewLayoutManager },\n { path: ':id', comp: EditViewLayoutManager },\n { path: '', comp: ListViewLayout },\n ].map(({ path, comp }) => (\n <Route key={path} path={`${url}/${path}`} render={(props) => renderRoute(props, comp)} />\n ));\n\n return (\n <ErrorBoundary FallbackComponent={ErrorFallback}>\n <ContentTypeLayoutContext.Provider value={layout}>\n <Switch>\n <Route path={`${url}/configurations/list`}>\n <CheckPagePermissions\n permissions={permissions.contentManager.collectionTypesConfigurations}\n >\n <ListSettingsView\n layout={rawContentTypeLayout}\n slug={slug}\n updateLayout={updateLayout}\n />\n </CheckPagePermissions>\n </Route>\n <Route path={`${url}/configurations/edit`}>\n <CheckPagePermissions\n permissions={permissions.contentManager.collectionTypesConfigurations}\n >\n <EditSettingsView\n components={rawComponentsLayouts}\n isContentTypeView\n mainLayout={rawContentTypeLayout}\n slug={slug}\n updateLayout={updateLayout}\n />\n </CheckPagePermissions>\n </Route>\n {routes}\n </Switch>\n </ContentTypeLayoutContext.Provider>\n </ErrorBoundary>\n );\n};\n\nCollectionTypeRecursivePath.propTypes = {\n match: PropTypes.shape({\n url: PropTypes.string.isRequired,\n params: PropTypes.shape({\n slug: PropTypes.string.isRequired,\n }).isRequired,\n }).isRequired,\n};\n\nexport default memo(CollectionTypeRecursivePath);\n","import React, { memo, useEffect, useMemo, useReducer } from 'react';\n\nimport { CheckPagePermissions, LoadingIndicatorPage, useFetchClient } from '@strapi/helper-plugin';\nimport axios from 'axios';\nimport { shallowEqual, useSelector } from 'react-redux';\nimport { useParams } from 'react-router-dom';\n\nimport { selectAdminPermissions } from '../../../selectors';\nimport { getData, getDataSucceeded } from '../../sharedReducers/crudReducer/actions';\nimport crudReducer, { crudInitialState } from '../../sharedReducers/crudReducer/reducer';\nimport { mergeMetasWithSchema } from '../../utils';\nimport { makeSelectModelAndComponentSchemas } from '../App/selectors';\nimport EditSettingsView from '../EditSettingsView';\n\nconst ComponentSettingsView = () => {\n const [{ isLoading, data: layout }, dispatch] = useReducer(crudReducer, crudInitialState);\n const schemasSelector = useMemo(makeSelectModelAndComponentSchemas, []);\n const { schemas } = useSelector((state) => schemasSelector(state), shallowEqual);\n const permissions = useSelector(selectAdminPermissions);\n const { uid } = useParams();\n const { get } = useFetchClient();\n\n useEffect(() => {\n const CancelToken = axios.CancelToken;\n const source = CancelToken.source();\n const fetchData = async (source) => {\n try {\n dispatch(getData());\n\n const {\n data: { data },\n } = await get(`/content-manager/components/${uid}/configuration`, {\n cancelToken: source.token,\n });\n dispatch(getDataSucceeded(mergeMetasWithSchema(data, schemas, 'component')));\n } catch (err) {\n if (axios.isCancel(err)) {\n return;\n }\n console.error(err);\n }\n };\n\n fetchData(source);\n\n return () => {\n source.cancel('Operation canceled by the user.');\n };\n }, [uid, schemas, get]);\n\n if (isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n return (\n <CheckPagePermissions permissions={permissions.contentManager.componentsConfigurations}>\n <EditSettingsView components={layout.components} mainLayout={layout.component} slug={uid} />\n </CheckPagePermissions>\n );\n};\n\nexport default memo(ComponentSettingsView);\n","import React from 'react';\n\nimport { ContentLayout, EmptyStateLayout, HeaderLayout, Main } from '@strapi/design-system';\nimport { LinkButton, useFocusWhenNavigate } from '@strapi/helper-plugin';\nimport { EmptyDocuments, Plus } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../utils';\n\nconst NoContentType = () => {\n const { formatMessage } = useIntl();\n useFocusWhenNavigate();\n\n return (\n <Main>\n <HeaderLayout\n title={formatMessage({\n id: getTrad('header.name'),\n defaultMessage: 'Content',\n })}\n />\n <ContentLayout>\n <EmptyStateLayout\n action={\n <LinkButton\n variant=\"secondary\"\n startIcon={<Plus />}\n to=\"/plugins/content-type-builder/content-types/create-content-type\"\n >\n {formatMessage({\n id: 'app.components.HomePage.create',\n defaultMessage: 'Create your first Content-type',\n })}\n </LinkButton>\n }\n content={formatMessage({\n id: 'content-manager.pages.NoContentType.text',\n defaultMessage:\n \"You don't have any content yet, we recommend you to create your first Content-Type.\",\n })}\n hasRadius\n icon={<EmptyDocuments width=\"10rem\" />}\n shadow=\"tableShadow\"\n />\n </ContentLayout>\n </Main>\n );\n};\n\nexport default NoContentType;\n","import React from 'react';\n\nimport { ContentLayout, HeaderLayout, Main } from '@strapi/design-system';\nimport { NoPermissions as NoPermissionsCompo, useFocusWhenNavigate } from '@strapi/helper-plugin';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../utils';\n\nconst NoPermissions = () => {\n const { formatMessage } = useIntl();\n useFocusWhenNavigate();\n\n return (\n <Main>\n <HeaderLayout\n title={formatMessage({\n id: getTrad('header.name'),\n defaultMessage: 'Content',\n })}\n />\n <ContentLayout>\n <NoPermissionsCompo />\n </ContentLayout>\n </Main>\n );\n};\n\nexport default NoPermissions;\n","import React, { memo, useMemo } from 'react';\n\nimport { CheckPagePermissions, LoadingIndicatorPage } from '@strapi/helper-plugin';\nimport PropTypes from 'prop-types';\nimport { useSelector } from 'react-redux';\nimport { Route, Switch } from 'react-router-dom';\n\nimport { selectAdminPermissions } from '../../../selectors';\nimport { ContentTypeLayoutContext } from '../../contexts';\nimport { useFetchContentTypeLayout } from '../../hooks';\nimport { formatLayoutToApi } from '../../utils';\nimport EditSettingsView from '../EditSettingsView';\nimport EditViewLayoutManager from '../EditViewLayoutManager';\n\nconst SingleTypeRecursivePath = ({\n match: {\n params: { slug },\n url,\n },\n}) => {\n const permissions = useSelector(selectAdminPermissions);\n const { isLoading, layout, updateLayout } = useFetchContentTypeLayout(slug);\n\n const { rawContentTypeLayout, rawComponentsLayouts } = useMemo(() => {\n let rawComponentsLayouts = {};\n let rawContentTypeLayout = {};\n\n if (layout.contentType) {\n rawContentTypeLayout = formatLayoutToApi(layout.contentType);\n }\n\n if (layout.components) {\n rawComponentsLayouts = Object.keys(layout.components).reduce((acc, current) => {\n acc[current] = formatLayoutToApi(layout.components[current]);\n\n return acc;\n }, {});\n }\n\n return { rawContentTypeLayout, rawComponentsLayouts };\n }, [layout]);\n\n if (isLoading) {\n return <LoadingIndicatorPage />;\n }\n\n return (\n <ContentTypeLayoutContext.Provider value={layout}>\n <Switch>\n <Route path={`${url}/configurations/edit`}>\n <CheckPagePermissions permissions={permissions.contentManager.singleTypesConfigurations}>\n <EditSettingsView\n components={rawComponentsLayouts}\n isContentTypeView\n mainLayout={rawContentTypeLayout}\n slug={slug}\n updateLayout={updateLayout}\n />\n </CheckPagePermissions>\n </Route>\n <Route\n path={url}\n render={({ location: { state }, history: { goBack } }) => {\n return (\n <EditViewLayoutManager\n layout={layout}\n slug={slug}\n isSingleType\n state={state}\n goBack={goBack}\n />\n );\n }}\n />\n </Switch>\n </ContentTypeLayoutContext.Provider>\n );\n};\n\nSingleTypeRecursivePath.propTypes = {\n match: PropTypes.shape({\n url: PropTypes.string.isRequired,\n params: PropTypes.shape({\n slug: PropTypes.string.isRequired,\n }).isRequired,\n }).isRequired,\n};\nexport default memo(SingleTypeRecursivePath);\n","import React from 'react';\n\nimport { Flex, IconButton, Typography } from '@strapi/design-system';\nimport { pxToRem } from '@strapi/helper-plugin';\nimport { CarretDown, Drag, Trash } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nconst DropdownIconWrapper = styled(Flex)`\n border-radius: 50%;\n\n svg {\n height: ${6 / 16}rem;\n width: ${11 / 16}rem;\n > path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n }\n`;\n\n// TODO: we shouldn't have to reset a whole button\nconst ToggleButton = styled.button`\n border: none;\n background: transparent;\n display: block;\n width: 100%;\n text-align: unset;\n padding: 0;\n`;\n\nexport function ComponentDragPreview({ displayedValue }) {\n return (\n <Flex\n background=\"neutral0\"\n borderColor=\"neutral200\"\n justifyContent=\"space-between\"\n gap={3}\n padding={3}\n width={pxToRem(300)}\n >\n <ToggleButton type=\"button\">\n <Flex gap={6}>\n <DropdownIconWrapper\n alignItems=\"center\"\n justifyContent=\"center\"\n background=\"neutral200\"\n height={pxToRem(32)}\n width={pxToRem(32)}\n >\n <CarretDown />\n </DropdownIconWrapper>\n\n <Flex maxWidth={pxToRem(150)}>\n <Typography textColor=\"neutral700\" ellipsis>\n {displayedValue}\n </Typography>\n </Flex>\n </Flex>\n </ToggleButton>\n\n <Flex gap={2}>\n <IconButton noBorder>\n <Trash />\n </IconButton>\n\n <IconButton noBorder>\n <Drag />\n </IconButton>\n </Flex>\n </Flex>\n );\n}\n\nComponentDragPreview.propTypes = {\n displayedValue: PropTypes.string.isRequired,\n};\n","import * as React from 'react';\n\nimport { Box, Flex, Icon, IconButton, Status, Typography } from '@strapi/design-system';\nimport { Cross, Drag } from '@strapi/icons';\nimport PropTypes from 'prop-types';\nimport { useIntl } from 'react-intl';\n\nimport { DisconnectButton, LinkEllipsis } from '../../../components/RelationInput';\nimport {\n ChildrenWrapper,\n FlexWrapper,\n} from '../../../components/RelationInput/components/RelationItem';\nimport { PUBLICATION_STATES } from '../../../components/RelationInputDataManager/constants';\nimport { getTrad } from '../../../utils';\n\nexport const RelationDragPreview = ({ status, displayedValue, width }) => {\n const { formatMessage } = useIntl();\n\n const stateMessage = {\n [PUBLICATION_STATES.DRAFT]: formatMessage({\n id: getTrad('relation.publicationState.draft'),\n defaultMessage: 'Draft',\n }),\n\n [PUBLICATION_STATES.PUBLISHED]: formatMessage({\n id: getTrad('relation.publicationState.published'),\n defaultMessage: 'Published',\n }),\n };\n\n const statusColor = status === PUBLICATION_STATES.DRAFT ? 'secondary' : 'success';\n\n return (\n <Box style={{ width }}>\n <Flex\n paddingTop={2}\n paddingBottom={2}\n paddingLeft={2}\n paddingRight={4}\n hasRadius\n borderSize={1}\n background=\"neutral0\"\n borderColor=\"neutral200\"\n justifyContent=\"space-between\"\n >\n <FlexWrapper gap={1}>\n <IconButton noBorder>\n <Drag />\n </IconButton>\n <ChildrenWrapper maxWidth=\"100%\" justifyContent=\"space-between\">\n <Box minWidth={0} paddingTop={1} paddingBottom={1} paddingRight={4}>\n <LinkEllipsis>\n <Typography textColor=\"primary600\" ellipsis>\n {displayedValue}\n </Typography>\n </LinkEllipsis>\n </Box>\n {status && (\n <Status variant={statusColor} showBullet={false} size=\"S\">\n <Typography fontWeight=\"bold\" textColor={`${statusColor}700`}>\n {stateMessage[status]}\n </Typography>\n </Status>\n )}\n </ChildrenWrapper>\n </FlexWrapper>\n <Box paddingLeft={4}>\n <DisconnectButton type=\"button\">\n <Icon width=\"12px\" as={Cross} />\n </DisconnectButton>\n </Box>\n </Flex>\n </Box>\n );\n};\n\nRelationDragPreview.propTypes = {\n status: PropTypes.string.isRequired,\n displayedValue: PropTypes.string.isRequired,\n width: PropTypes.number.isRequired,\n};\n","/**\n *\n * LeftMenu\n *\n */\n\nimport React, { useMemo, useState } from 'react';\n\nimport {\n SubNav,\n SubNavHeader,\n SubNavLink,\n SubNavSection,\n SubNavSections,\n} from '@strapi/design-system/v2';\nimport { useCollator, useFilter } from '@strapi/helper-plugin';\nimport { useIntl } from 'react-intl';\nimport { shallowEqual, useSelector } from 'react-redux';\nimport { NavLink } from 'react-router-dom';\n\nimport getTrad from '../../../utils/getTrad';\nimport { makeSelectModelLinks } from '../selectors';\n\nconst LeftMenu = () => {\n const [search, setSearch] = useState('');\n const { formatMessage, locale } = useIntl();\n const modelLinksSelector = useMemo(makeSelectModelLinks, []);\n const { collectionTypeLinks, singleTypeLinks } = useSelector(modelLinksSelector, shallowEqual);\n\n const { startsWith } = useFilter(locale, {\n sensitivity: 'base',\n });\n\n /**\n * @type {Intl.Collator}\n */\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const menu = useMemo(\n () =>\n [\n {\n id: 'collectionTypes',\n title: {\n id: getTrad('components.LeftMenu.collection-types'),\n defaultMessage: 'Collection Types',\n },\n searchable: true,\n links: collectionTypeLinks,\n },\n {\n id: 'singleTypes',\n title: {\n id: getTrad('components.LeftMenu.single-types'),\n defaultMessage: 'Single Types',\n },\n searchable: true,\n links: singleTypeLinks,\n },\n ].map((section) => ({\n ...section,\n links: section.links\n /**\n * Filter by the search value\n */\n .filter((link) => startsWith(link.title, search))\n /**\n * Sort correctly using the language\n */\n .sort((a, b) => formatter.compare(a.title, b.title))\n /**\n * Apply the formated strings to the links from react-intl\n */\n .map((link) => {\n return {\n ...link,\n title: formatMessage({ id: link.title, defaultMessage: link.title }),\n };\n }),\n })),\n [collectionTypeLinks, search, singleTypeLinks, startsWith, formatMessage, formatter]\n );\n\n const handleClear = () => {\n setSearch('');\n };\n\n const handleChangeSearch = ({ target: { value } }) => {\n setSearch(value);\n };\n\n const label = formatMessage({\n id: getTrad('header.name'),\n defaultMessage: 'Content',\n });\n\n return (\n <SubNav ariaLabel={label}>\n <SubNavHeader\n label={label}\n searchable\n value={search}\n onChange={handleChangeSearch}\n onClear={handleClear}\n searchLabel={formatMessage({\n id: 'content-manager.components.LeftMenu.Search.label',\n defaultMessage: 'Search for a content type',\n })}\n />\n <SubNavSections>\n {menu.map((section) => {\n const label = formatMessage(\n { id: section.title.id, defaultMessage: section.title.defaultMessage },\n section.title.values\n );\n\n return (\n <SubNavSection\n key={section.id}\n label={label}\n badgeLabel={section.links.length.toString()}\n >\n {section.links.map((link) => {\n const search = link.search ? `?${link.search}` : '';\n\n return (\n <SubNavLink as={NavLink} key={link.uid} to={`${link.to}${search}`}>\n {link.title}\n </SubNavLink>\n );\n })}\n </SubNavSection>\n );\n })}\n </SubNavSections>\n </SubNav>\n );\n};\n\nexport default LeftMenu;\n","import { GET_INIT_DATA, RESET_INIT_DATA, SET_INIT_DATA } from './constants';\n\nexport const getInitData = () => ({\n type: GET_INIT_DATA,\n});\n\nexport const resetInitData = () => ({ type: RESET_INIT_DATA });\n\nexport const setInitData = ({\n authorizedCollectionTypeLinks,\n authorizedSingleTypeLinks,\n contentTypeSchemas,\n components,\n fieldSizes,\n}) => ({\n type: SET_INIT_DATA,\n data: {\n authorizedCollectionTypeLinks,\n authorizedSingleTypeLinks,\n components,\n contentTypeSchemas,\n fieldSizes,\n },\n});\n","import { hasPermissions } from '@strapi/helper-plugin';\n\n/**\n * This function resolves an array of Promises<boolean>\n * It puts at a specific index the status of a specific permission.\n * While this might look weird, we then iterate on this array\n * and check the different CT/ST/general/plugin sections\n * and make an index based comparisons\n */\nconst checkPermissions = (userPermissions, permissionsToCheck) =>\n permissionsToCheck.map(({ permissions }) => hasPermissions(userPermissions, permissions));\n\nexport default checkPermissions;\n","import groupBy from 'lodash/groupBy';\nimport sortBy from 'lodash/sortBy';\nimport { stringify } from 'qs';\n\nconst generateLinks = (links, type, configurations = []) => {\n return links\n .filter((link) => link.isDisplayed)\n .map((link) => {\n const collectionTypesPermissions = [\n { action: 'plugin::content-manager.explorer.create', subject: link.uid },\n { action: 'plugin::content-manager.explorer.read', subject: link.uid },\n ];\n const singleTypesPermissions = [\n { action: 'plugin::content-manager.explorer.read', subject: link.uid },\n ];\n const permissions =\n type === 'collectionTypes' ? collectionTypesPermissions : singleTypesPermissions;\n\n const currentContentTypeConfig = configurations.find(({ uid }) => uid === link.uid);\n\n let search = null;\n\n if (currentContentTypeConfig) {\n const searchParams = {\n page: 1,\n pageSize: currentContentTypeConfig.settings.pageSize,\n sort: `${currentContentTypeConfig.settings.defaultSortBy}:${currentContentTypeConfig.settings.defaultSortOrder}`,\n };\n\n search = stringify(searchParams, { encode: false });\n }\n\n return {\n permissions,\n search,\n kind: link.kind,\n title: link.info.displayName,\n to: `/content-manager/${link.kind}/${link.uid}`,\n uid: link.uid,\n // Used for the list item key in the helper plugin\n name: link.uid,\n isDisplayed: link.isDisplayed,\n };\n });\n};\n\nconst generateModelsLinks = (models, modelsConfigurations) => {\n const groupedModels = Object.entries(groupBy(models, 'kind')).map(([key, value]) => ({\n name: key,\n links: value,\n }));\n const [collectionTypes, singleTypes] = sortBy(groupedModels, 'name');\n\n return {\n collectionTypeSectionLinks: generateLinks(\n collectionTypes?.links || [],\n 'collectionTypes',\n modelsConfigurations\n ),\n singleTypeSectionLinks: generateLinks(singleTypes?.links ?? [], 'singleTypes'),\n };\n};\n\nexport default generateModelsLinks;\nexport { generateLinks };\n","import { getFetchClient } from '@strapi/helper-plugin';\n\nimport checkPermissions from './checkPermissions';\nimport generateModelsLinks from './generateModelsLinks';\n\nconst getContentTypeLinks = async ({ models, userPermissions, toggleNotification }) => {\n const { get } = getFetchClient();\n try {\n const {\n data: { data: contentTypeConfigurations },\n } = await get('/content-manager/content-types-settings');\n\n const { collectionTypeSectionLinks, singleTypeSectionLinks } = generateModelsLinks(\n models,\n contentTypeConfigurations\n );\n\n // Collection Types verifications\n const collectionTypeLinksPermissions = await Promise.all(\n checkPermissions(userPermissions, collectionTypeSectionLinks)\n );\n const authorizedCollectionTypeLinks = collectionTypeSectionLinks.filter(\n (_, index) => collectionTypeLinksPermissions[index]\n );\n\n // Single Types verifications\n const singleTypeLinksPermissions = await Promise.all(\n checkPermissions(userPermissions, singleTypeSectionLinks)\n );\n const authorizedSingleTypeLinks = singleTypeSectionLinks.filter(\n (_, index) => singleTypeLinksPermissions[index]\n );\n\n return {\n authorizedCollectionTypeLinks,\n authorizedSingleTypeLinks,\n };\n } catch (err) {\n console.error(err);\n\n toggleNotification({\n type: 'warning',\n message: { id: 'notification.error' },\n });\n\n return { authorizedCollectionTypeLinks: [], authorizedSingleTypeLinks: [] };\n }\n};\n\nexport default getContentTypeLinks;\n","import { useEffect, useRef } from 'react';\n\nimport { useNotifyAT } from '@strapi/design-system';\nimport {\n useFetchClient,\n useNotification,\n useRBACProvider,\n useStrapiApp,\n} from '@strapi/helper-plugin';\nimport axios from 'axios';\nimport { useIntl } from 'react-intl';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { HOOKS } from '../../../constants';\nimport { getTrad } from '../../utils';\n\nimport { getInitData, resetInitData, setInitData } from './actions';\nimport { selectAppDomain } from './selectors';\nimport getContentTypeLinks from './utils/getContentTypeLinks';\n\nconst { MUTATE_COLLECTION_TYPES_LINKS, MUTATE_SINGLE_TYPES_LINKS } = HOOKS;\n\nconst useContentManagerInitData = () => {\n const dispatch = useDispatch();\n const toggleNotification = useNotification();\n const state = useSelector(selectAppDomain());\n const fetchDataRef = useRef();\n const { allPermissions } = useRBACProvider();\n const { runHookWaterfall } = useStrapiApp();\n const CancelToken = axios.CancelToken;\n const source = CancelToken.source();\n const { notifyStatus } = useNotifyAT();\n const { formatMessage } = useIntl();\n const { get } = useFetchClient();\n\n const fetchData = async () => {\n dispatch(getInitData());\n\n try {\n const {\n data: {\n data: { components, contentTypes: models, fieldSizes },\n },\n } = await get('/content-manager/init', { cancelToken: source.token });\n notifyStatus(\n formatMessage({\n id: getTrad('App.schemas.data-loaded'),\n defaultMessage: 'The schemas have been successfully loaded.',\n })\n );\n\n const unmutatedContentTypeLinks = await getContentTypeLinks({\n models,\n userPermissions: allPermissions,\n toggleNotification,\n });\n\n const { ctLinks: authorizedCollectionTypeLinks } = runHookWaterfall(\n MUTATE_COLLECTION_TYPES_LINKS,\n {\n ctLinks: unmutatedContentTypeLinks.authorizedCollectionTypeLinks,\n models,\n }\n );\n const { stLinks: authorizedSingleTypeLinks } = runHookWaterfall(MUTATE_SINGLE_TYPES_LINKS, {\n stLinks: unmutatedContentTypeLinks.authorizedSingleTypeLinks,\n models,\n });\n\n const actionToDispatch = setInitData({\n authorizedCollectionTypeLinks,\n authorizedSingleTypeLinks,\n contentTypeSchemas: models,\n components,\n fieldSizes,\n });\n\n dispatch(actionToDispatch);\n } catch (err) {\n if (axios.isCancel(err)) {\n return;\n }\n console.error(err);\n\n toggleNotification({ type: 'warning', message: { id: 'notification.error' } });\n }\n };\n\n fetchDataRef.current = fetchData;\n\n useEffect(() => {\n fetchDataRef.current();\n\n return () => {\n source.cancel('Operation canceled by the user.');\n dispatch(resetInitData());\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dispatch, toggleNotification]);\n\n return { ...state, refetchData: fetchDataRef.current };\n};\n\nexport default useContentManagerInitData;\n","import React, { useEffect, useRef } from 'react';\n\nimport { HeaderLayout, Layout, Main } from '@strapi/design-system';\nimport {\n AnErrorOccurred,\n CheckPagePermissions,\n LoadingIndicatorPage,\n useGuidedTour,\n} from '@strapi/helper-plugin';\nimport sortBy from 'lodash/sortBy';\nimport { Helmet } from 'react-helmet';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\nimport { Redirect, Route, Switch, useLocation, useRouteMatch } from 'react-router-dom';\n\nimport { DragLayer } from '../../../components/DragLayer';\nimport { selectAdminPermissions } from '../../../selectors';\nimport ModelsContext from '../../contexts/ModelsContext';\nimport getTrad from '../../utils/getTrad';\nimport ItemTypes from '../../utils/ItemTypes';\nimport CollectionTypeRecursivePath from '../CollectionTypeRecursivePath';\nimport ComponentSettingsView from '../ComponentSetttingsView';\nimport NoContentType from '../NoContentType';\nimport NoPermissions from '../NoPermissions';\nimport SingleTypeRecursivePath from '../SingleTypeRecursivePath';\n\nimport { CardDragPreview } from './components/CardDragPreview';\nimport { ComponentDragPreview } from './components/ComponentDragPreview';\nimport { RelationDragPreview } from './components/RelationDragPreview';\nimport LeftMenu from './LeftMenu';\nimport useContentManagerInitData from './useContentManagerInitData';\n\nfunction renderDraglayerItem({ type, item }) {\n if ([ItemTypes.EDIT_FIELD, ItemTypes.FIELD].includes(type)) {\n return <CardDragPreview labelField={item.labelField} />;\n }\n\n /**\n * Because a user may have multiple relations / dynamic zones / repeable fields in the same content type,\n * we append the fieldName for the item type to make them unique, however, we then want to extract that\n * first type to apply the correct preview.\n */\n const [actualType] = type.split('_');\n\n switch (actualType) {\n case ItemTypes.COMPONENT:\n case ItemTypes.DYNAMIC_ZONE:\n return <ComponentDragPreview displayedValue={item.displayedValue} />;\n\n case ItemTypes.RELATION:\n return (\n <RelationDragPreview\n displayedValue={item.displayedValue}\n status={item.status}\n width={item.width}\n />\n );\n\n default:\n return null;\n }\n}\n\nconst App = () => {\n const contentTypeMatch = useRouteMatch(`/content-manager/:kind/:uid`);\n const { status, collectionTypeLinks, singleTypeLinks, models, refetchData } =\n useContentManagerInitData();\n const authorisedModels = sortBy([...collectionTypeLinks, ...singleTypeLinks], (model) =>\n model.title.toLowerCase()\n );\n const { pathname } = useLocation();\n const { formatMessage } = useIntl();\n const { startSection } = useGuidedTour();\n const startSectionRef = useRef(startSection);\n const permissions = useSelector(selectAdminPermissions);\n\n useEffect(() => {\n if (startSectionRef.current) {\n startSectionRef.current('contentManager');\n }\n }, []);\n\n if (status === 'loading') {\n return (\n <Main aria-busy=\"true\">\n <HeaderLayout\n title={formatMessage({\n id: getTrad('header.name'),\n defaultMessage: 'Content',\n })}\n />\n <LoadingIndicatorPage />\n </Main>\n );\n }\n\n // Array of models that are displayed in the content manager\n const supportedModelsToDisplay = models.filter(({ isDisplayed }) => isDisplayed);\n\n // Redirect the user to the 403 page\n if (\n authorisedModels.length === 0 &&\n supportedModelsToDisplay.length > 0 &&\n pathname !== '/content-manager/403'\n ) {\n return <Redirect to=\"/content-manager/403\" />;\n }\n\n // Redirect the user to the create content type page\n if (supportedModelsToDisplay.length === 0 && pathname !== '/content-manager/no-content-types') {\n return <Redirect to=\"/content-manager/no-content-types\" />;\n }\n\n if (!contentTypeMatch && authorisedModels.length > 0) {\n return (\n <Redirect\n to={`${authorisedModels[0].to}${\n authorisedModels[0].search ? `?${authorisedModels[0].search}` : ''\n }`}\n />\n );\n }\n\n return (\n <Layout sideNav={<LeftMenu />}>\n <DragLayer renderItem={renderDraglayerItem} />\n <ModelsContext.Provider value={{ refetchData }}>\n <Switch>\n <Route path=\"/content-manager/components/:uid/configurations/edit\">\n <CheckPagePermissions permissions={permissions.contentManager.componentsConfigurations}>\n <ComponentSettingsView />\n </CheckPagePermissions>\n </Route>\n <Route\n path=\"/content-manager/collectionType/:slug\"\n component={CollectionTypeRecursivePath}\n />\n <Route path=\"/content-manager/singleType/:slug\" component={SingleTypeRecursivePath} />\n\n <Route path=\"/content-manager/403\">\n <NoPermissions />\n </Route>\n <Route path=\"/content-manager/no-content-types\">\n <NoContentType />\n </Route>\n <Route path=\"\" component={AnErrorOccurred} />\n </Switch>\n </ModelsContext.Provider>\n </Layout>\n );\n};\n\nexport { App };\n\nexport default function () {\n const { formatMessage } = useIntl();\n\n return (\n <>\n <Helmet\n title={formatMessage({ id: getTrad('plugin.name'), defaultMessage: 'Content Manager' })}\n />\n <App />\n </>\n );\n}\n"],"names":["initialState","reducer","size","permissions","isNaN","data","get","getData","error","to","React","LinkButton","index","Grid","Link","CustomIconButton","Wrapper","DragButton","clientOffset","Number","Boolean","Date","Media","Component","DynamicZone","options","value","Option","HeaderContainer","ModalForm","resetProps","setLayout","getDataSucceeded","RESET_PROPS","componentsDataStructure","contentTypeDataStructure","source","init","id","Editor","SlateElement","isText","isListNode","block","insertText","createContext","LabelAction","connect","useSelect","List","shouldDisplayRelationLink","pick","Memoized","select","sanitizeHtml","PreviewWysiwyg","ExpandButton","Image","VALIDATIONS_TO_OMIT","RelationInputDataManager","GenericInput","FieldComponent","Inputs","Preview","ActionsFlex","componentUid","useQuery","Accordion.Group","Accordion.Content","Accordion.Footer","name","allowedFields","RepeatableComponent","icon","mainValue","getType","getOtherInfos","browserState","serverState","acc","findAllAndReplace","shouldCheckErrors","modifiedData","initialData","isEqualFastCompare","Body","Root","Information","SingleTypeFormWrapper","CollectionTypeFormWrapper","Header","DraftAndPublishBadge","DeleteLink","Permissions","FieldContainer","TypographyMaxWidth","PropTypes","fieldToEdit","GET_DATA","GET_DATA_SUCCEEDED","FilterIcon","BoldChunk","Loader","isOpen","MenuTrigger","MultipleMedias","SingleComponent","query","metadatas","ReactRouterLink","NoPermissions","ListView","rawContentTypeLayout","rawComponentsLayouts","ContentTypeLayoutContext","NoPermissionsCompo","label","search","ComponentSettingsView","CollectionTypeRecursivePath","SingleTypeRecursivePath"],"mappings":"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"}
|