@strapi/plugin-users-permissions 0.0.0-next.fc231041206e6f3999b094160cfa05db2892ad54 → 0.0.0-next.fc9d26d995624dc886b29f563e1de655d47e6609

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) hide show
  1. package/.eslintignore +2 -1
  2. package/LICENSE +18 -3
  3. package/admin/src/components/BoundRoute/index.jsx +3 -3
  4. package/admin/src/components/FormModal/Input/index.jsx +33 -32
  5. package/admin/src/components/FormModal/index.jsx +58 -69
  6. package/admin/src/components/Permissions/PermissionRow/CheckboxWrapper.jsx +4 -3
  7. package/admin/src/components/Permissions/PermissionRow/SubCategory.jsx +13 -22
  8. package/admin/src/components/Permissions/index.jsx +27 -35
  9. package/admin/src/components/Permissions/reducer.js +1 -1
  10. package/admin/src/components/Policies/index.jsx +8 -6
  11. package/admin/src/components/UsersPermissions/index.jsx +15 -7
  12. package/admin/src/components/UsersPermissions/reducer.js +1 -1
  13. package/admin/src/index.js +17 -34
  14. package/admin/src/pages/AdvancedSettings/index.jsx +84 -129
  15. package/admin/src/pages/AdvancedSettings/utils/layout.js +20 -35
  16. package/admin/src/pages/AdvancedSettings/utils/schema.js +5 -2
  17. package/admin/src/pages/EmailTemplates/components/EmailForm.jsx +120 -140
  18. package/admin/src/pages/EmailTemplates/components/EmailTable.jsx +21 -18
  19. package/admin/src/pages/EmailTemplates/index.jsx +36 -62
  20. package/admin/src/pages/EmailTemplates/utils/schema.js +18 -6
  21. package/admin/src/pages/Providers/index.jsx +98 -113
  22. package/admin/src/pages/Providers/utils/forms.js +23 -11
  23. package/admin/src/pages/Roles/constants.js +3 -3
  24. package/admin/src/pages/Roles/hooks/usePlugins.js +4 -4
  25. package/admin/src/pages/Roles/index.jsx +10 -19
  26. package/admin/src/pages/Roles/pages/CreatePage.jsx +53 -58
  27. package/admin/src/pages/Roles/pages/EditPage.jsx +63 -68
  28. package/admin/src/pages/Roles/pages/ListPage/components/TableBody.jsx +28 -32
  29. package/admin/src/pages/Roles/pages/ListPage/index.jsx +79 -55
  30. package/admin/src/pluginId.js +2 -2
  31. package/admin/src/translations/en.json +1 -1
  32. package/admin/src/utils/prefixPluginTranslations.js +13 -0
  33. package/dist/admin/chunks/ar-BJwjobLp.js +45 -0
  34. package/dist/admin/chunks/ar-BJwjobLp.js.map +1 -0
  35. package/dist/admin/chunks/ar-G6bUGuUb.js +43 -0
  36. package/dist/admin/chunks/ar-G6bUGuUb.js.map +1 -0
  37. package/dist/admin/chunks/cs-Bu59JqhG.js +49 -0
  38. package/dist/admin/chunks/cs-Bu59JqhG.js.map +1 -0
  39. package/dist/admin/chunks/cs-uS_SIEo8.js +51 -0
  40. package/dist/admin/chunks/cs-uS_SIEo8.js.map +1 -0
  41. package/dist/admin/chunks/de-7MVMrqqI.js +63 -0
  42. package/dist/admin/chunks/de-7MVMrqqI.js.map +1 -0
  43. package/dist/admin/chunks/de-B81A69_5.js +61 -0
  44. package/dist/admin/chunks/de-B81A69_5.js.map +1 -0
  45. package/dist/admin/chunks/dk-BaelzvBE.js +85 -0
  46. package/dist/admin/chunks/dk-BaelzvBE.js.map +1 -0
  47. package/dist/admin/chunks/dk-DwCLGmy9.js +87 -0
  48. package/dist/admin/chunks/dk-DwCLGmy9.js.map +1 -0
  49. package/dist/admin/chunks/en-BhgCBe7M.js +85 -0
  50. package/dist/admin/chunks/en-BhgCBe7M.js.map +1 -0
  51. package/dist/admin/chunks/en-DwQjkHi_.js +87 -0
  52. package/dist/admin/chunks/en-DwQjkHi_.js.map +1 -0
  53. package/dist/admin/chunks/es-B0wXmvRj.js +85 -0
  54. package/dist/admin/chunks/es-B0wXmvRj.js.map +1 -0
  55. package/dist/admin/chunks/es-BOJOedG5.js +87 -0
  56. package/dist/admin/chunks/es-BOJOedG5.js.map +1 -0
  57. package/dist/admin/chunks/fr-BDNWCNs0.js +51 -0
  58. package/dist/admin/chunks/fr-BDNWCNs0.js.map +1 -0
  59. package/dist/admin/chunks/fr-CGYvGUXg.js +49 -0
  60. package/dist/admin/chunks/fr-CGYvGUXg.js.map +1 -0
  61. package/dist/admin/chunks/id-CNzbwFjA.js +61 -0
  62. package/dist/admin/chunks/id-CNzbwFjA.js.map +1 -0
  63. package/dist/admin/chunks/id-UqUPykHZ.js +63 -0
  64. package/dist/admin/chunks/id-UqUPykHZ.js.map +1 -0
  65. package/dist/admin/chunks/index-BPiDUOGt.js +471 -0
  66. package/dist/admin/chunks/index-BPiDUOGt.js.map +1 -0
  67. package/dist/admin/chunks/index-BtYUb_br.js +741 -0
  68. package/dist/admin/chunks/index-BtYUb_br.js.map +1 -0
  69. package/dist/admin/chunks/index-CkYplz_3.js +301 -0
  70. package/dist/admin/chunks/index-CkYplz_3.js.map +1 -0
  71. package/dist/admin/chunks/index-CxiKMwJn.js +279 -0
  72. package/dist/admin/chunks/index-CxiKMwJn.js.map +1 -0
  73. package/dist/admin/chunks/index-D01zzG9y.js +1537 -0
  74. package/dist/admin/chunks/index-D01zzG9y.js.map +1 -0
  75. package/dist/admin/chunks/index-DAclA-0k.js +217 -0
  76. package/dist/admin/chunks/index-DAclA-0k.js.map +1 -0
  77. package/dist/admin/chunks/index-DG6Abn44.js +213 -0
  78. package/dist/admin/chunks/index-DG6Abn44.js.map +1 -0
  79. package/dist/admin/chunks/index-De_N0gr1.js +448 -0
  80. package/dist/admin/chunks/index-De_N0gr1.js.map +1 -0
  81. package/dist/admin/chunks/index-DgONbTcJ.js +718 -0
  82. package/dist/admin/chunks/index-DgONbTcJ.js.map +1 -0
  83. package/dist/admin/chunks/index-xVVRcuDA.js +1516 -0
  84. package/dist/admin/chunks/index-xVVRcuDA.js.map +1 -0
  85. package/dist/admin/chunks/it-B2H2foTf.js +61 -0
  86. package/dist/admin/chunks/it-B2H2foTf.js.map +1 -0
  87. package/dist/admin/chunks/it-D5VuyoLU.js +63 -0
  88. package/dist/admin/chunks/it-D5VuyoLU.js.map +1 -0
  89. package/dist/admin/chunks/ja-C0z9d7L9.js +47 -0
  90. package/dist/admin/chunks/ja-C0z9d7L9.js.map +1 -0
  91. package/dist/admin/chunks/ja-MpqVsCgs.js +49 -0
  92. package/dist/admin/chunks/ja-MpqVsCgs.js.map +1 -0
  93. package/dist/admin/chunks/ko-Bm-grPSc.js +87 -0
  94. package/dist/admin/chunks/ko-Bm-grPSc.js.map +1 -0
  95. package/dist/admin/chunks/ko-CzUgzpeS.js +85 -0
  96. package/dist/admin/chunks/ko-CzUgzpeS.js.map +1 -0
  97. package/dist/admin/chunks/ms-CCacxjim.js +48 -0
  98. package/dist/admin/chunks/ms-CCacxjim.js.map +1 -0
  99. package/dist/admin/chunks/ms-D7eyBD5H.js +50 -0
  100. package/dist/admin/chunks/ms-D7eyBD5H.js.map +1 -0
  101. package/dist/admin/chunks/nl-BIOwAQtI.js +49 -0
  102. package/dist/admin/chunks/nl-BIOwAQtI.js.map +1 -0
  103. package/dist/admin/chunks/nl-DDC3nZW-.js +47 -0
  104. package/dist/admin/chunks/nl-DDC3nZW-.js.map +1 -0
  105. package/dist/admin/chunks/pl-D5BeNrg_.js +87 -0
  106. package/dist/admin/chunks/pl-D5BeNrg_.js.map +1 -0
  107. package/dist/admin/chunks/pl-XkS463rN.js +85 -0
  108. package/dist/admin/chunks/pl-XkS463rN.js.map +1 -0
  109. package/dist/admin/chunks/pt-BR-8cC7z8Km.js +43 -0
  110. package/dist/admin/chunks/pt-BR-8cC7z8Km.js.map +1 -0
  111. package/dist/admin/chunks/pt-BR-DxPBzQGx.js +45 -0
  112. package/dist/admin/chunks/pt-BR-DxPBzQGx.js.map +1 -0
  113. package/dist/admin/chunks/pt-DQpEvio8.js +47 -0
  114. package/dist/admin/chunks/pt-DQpEvio8.js.map +1 -0
  115. package/dist/admin/chunks/pt-kkCwzNvH.js +49 -0
  116. package/dist/admin/chunks/pt-kkCwzNvH.js.map +1 -0
  117. package/dist/admin/chunks/ru-BQ0gHmp3.js +87 -0
  118. package/dist/admin/chunks/ru-BQ0gHmp3.js.map +1 -0
  119. package/dist/admin/chunks/ru-nzL_7Mhg.js +85 -0
  120. package/dist/admin/chunks/ru-nzL_7Mhg.js.map +1 -0
  121. package/dist/admin/chunks/sk-Ddxc_tZA.js +49 -0
  122. package/dist/admin/chunks/sk-Ddxc_tZA.js.map +1 -0
  123. package/dist/admin/chunks/sk-nVwAPdYC.js +51 -0
  124. package/dist/admin/chunks/sk-nVwAPdYC.js.map +1 -0
  125. package/dist/admin/chunks/sv-BDfk2A-F.js +87 -0
  126. package/dist/admin/chunks/sv-BDfk2A-F.js.map +1 -0
  127. package/dist/admin/chunks/sv-By3RYpMG.js +85 -0
  128. package/dist/admin/chunks/sv-By3RYpMG.js.map +1 -0
  129. package/dist/admin/chunks/th-BtTtpHe2.js +61 -0
  130. package/dist/admin/chunks/th-BtTtpHe2.js.map +1 -0
  131. package/dist/admin/chunks/th-COl50vqb.js +59 -0
  132. package/dist/admin/chunks/th-COl50vqb.js.map +1 -0
  133. package/dist/admin/chunks/tr-80SJU6jg.js +84 -0
  134. package/dist/admin/chunks/tr-80SJU6jg.js.map +1 -0
  135. package/dist/admin/chunks/tr-Di-Nf7cT.js +86 -0
  136. package/dist/admin/chunks/tr-Di-Nf7cT.js.map +1 -0
  137. package/dist/admin/chunks/uk-CggQOx1l.js +50 -0
  138. package/dist/admin/chunks/uk-CggQOx1l.js.map +1 -0
  139. package/dist/admin/chunks/uk-D8JHuzch.js +48 -0
  140. package/dist/admin/chunks/uk-D8JHuzch.js.map +1 -0
  141. package/dist/admin/chunks/vi-69AF03Iv.js +49 -0
  142. package/dist/admin/chunks/vi-69AF03Iv.js.map +1 -0
  143. package/dist/admin/chunks/vi-D9cCsHsU.js +51 -0
  144. package/dist/admin/chunks/vi-D9cCsHsU.js.map +1 -0
  145. package/dist/admin/chunks/zh-BzSkqxo-.js +85 -0
  146. package/dist/admin/chunks/zh-BzSkqxo-.js.map +1 -0
  147. package/dist/admin/chunks/zh-BzWgJEzz.js +87 -0
  148. package/dist/admin/chunks/zh-BzWgJEzz.js.map +1 -0
  149. package/dist/admin/chunks/zh-Hans-CKqQbpsM.js +87 -0
  150. package/dist/admin/chunks/zh-Hans-CKqQbpsM.js.map +1 -0
  151. package/dist/admin/chunks/zh-Hans-DmDcSsp7.js +85 -0
  152. package/dist/admin/chunks/zh-Hans-DmDcSsp7.js.map +1 -0
  153. package/dist/admin/index.js +6 -3
  154. package/dist/admin/index.js.map +1 -1
  155. package/dist/admin/index.mjs +1 -5
  156. package/dist/admin/index.mjs.map +1 -1
  157. package/dist/server/index.js +4739 -0
  158. package/dist/server/index.js.map +1 -0
  159. package/dist/server/index.mjs +4737 -0
  160. package/dist/server/index.mjs.map +1 -0
  161. package/package.json +31 -32
  162. package/rollup.config.mjs +52 -0
  163. package/server/bootstrap/index.js +18 -51
  164. package/server/bootstrap/users-permissions-actions.js +6 -0
  165. package/server/config.js +29 -0
  166. package/server/content-types/user/index.js +0 -1
  167. package/server/controllers/auth.js +63 -64
  168. package/server/controllers/content-manager-user.js +28 -30
  169. package/server/controllers/role.js +17 -4
  170. package/server/controllers/user.js +8 -9
  171. package/server/controllers/validation/auth.js +81 -25
  172. package/server/graphql/types/index.js +1 -0
  173. package/server/graphql/types/me.js +1 -0
  174. package/server/graphql/types/user-input.js +20 -0
  175. package/server/middlewares/rateLimit.js +1 -1
  176. package/server/register.js +2 -2
  177. package/server/services/jwt.js +3 -3
  178. package/server/services/permission.js +3 -7
  179. package/server/services/providers-registry.js +468 -275
  180. package/server/services/providers.js +10 -5
  181. package/server/services/role.js +15 -13
  182. package/server/services/user.js +56 -19
  183. package/server/services/users-permissions.js +15 -13
  184. package/server/utils/index.d.ts +2 -1
  185. package/server/utils/sanitize/sanitizers.js +7 -3
  186. package/server/utils/sanitize/visitors/remove-user-relation-from-role-entities.js +2 -2
  187. package/admin/src/pages/Roles/pages/ListPage/utils/api.js +0 -30
  188. package/dist/_chunks/ar-MvD8Ghac.mjs +0 -44
  189. package/dist/_chunks/ar-MvD8Ghac.mjs.map +0 -1
  190. package/dist/_chunks/ar-t5qTFaAD.js +0 -44
  191. package/dist/_chunks/ar-t5qTFaAD.js.map +0 -1
  192. package/dist/_chunks/cs-BMuXwxA1.mjs +0 -50
  193. package/dist/_chunks/cs-BMuXwxA1.mjs.map +0 -1
  194. package/dist/_chunks/cs-I8N4u-Sd.js +0 -50
  195. package/dist/_chunks/cs-I8N4u-Sd.js.map +0 -1
  196. package/dist/_chunks/de-YTjtq89K.js +0 -62
  197. package/dist/_chunks/de-YTjtq89K.js.map +0 -1
  198. package/dist/_chunks/de-zs2qqc0W.mjs +0 -62
  199. package/dist/_chunks/de-zs2qqc0W.mjs.map +0 -1
  200. package/dist/_chunks/dk-HctVBMsG.mjs +0 -86
  201. package/dist/_chunks/dk-HctVBMsG.mjs.map +0 -1
  202. package/dist/_chunks/dk-TF-dWjzl.js +0 -86
  203. package/dist/_chunks/dk-TF-dWjzl.js.map +0 -1
  204. package/dist/_chunks/en-CE3wEy_c.mjs +0 -86
  205. package/dist/_chunks/en-CE3wEy_c.mjs.map +0 -1
  206. package/dist/_chunks/en-m608rMZx.js +0 -86
  207. package/dist/_chunks/en-m608rMZx.js.map +0 -1
  208. package/dist/_chunks/es-9381tih_.mjs +0 -86
  209. package/dist/_chunks/es-9381tih_.mjs.map +0 -1
  210. package/dist/_chunks/es-XBQsB8_9.js +0 -86
  211. package/dist/_chunks/es-XBQsB8_9.js.map +0 -1
  212. package/dist/_chunks/fr-6cz3U-IF.js +0 -50
  213. package/dist/_chunks/fr-6cz3U-IF.js.map +0 -1
  214. package/dist/_chunks/fr-CMSc77If.mjs +0 -50
  215. package/dist/_chunks/fr-CMSc77If.mjs.map +0 -1
  216. package/dist/_chunks/id-RJ934rq-.js +0 -62
  217. package/dist/_chunks/id-RJ934rq-.js.map +0 -1
  218. package/dist/_chunks/id-SDuyIkZa.mjs +0 -62
  219. package/dist/_chunks/id-SDuyIkZa.mjs.map +0 -1
  220. package/dist/_chunks/index-5-krOCaE.mjs +0 -250
  221. package/dist/_chunks/index-5-krOCaE.mjs.map +0 -1
  222. package/dist/_chunks/index-Aq7T7skI.js +0 -1191
  223. package/dist/_chunks/index-Aq7T7skI.js.map +0 -1
  224. package/dist/_chunks/index-LN8gSFZ3.mjs +0 -385
  225. package/dist/_chunks/index-LN8gSFZ3.mjs.map +0 -1
  226. package/dist/_chunks/index-RWAJu_-T.js +0 -407
  227. package/dist/_chunks/index-RWAJu_-T.js.map +0 -1
  228. package/dist/_chunks/index-SICvbeQf.mjs +0 -301
  229. package/dist/_chunks/index-SICvbeQf.mjs.map +0 -1
  230. package/dist/_chunks/index-YkMqn-9t.js +0 -249
  231. package/dist/_chunks/index-YkMqn-9t.js.map +0 -1
  232. package/dist/_chunks/index-_wwOOuf_.js +0 -320
  233. package/dist/_chunks/index-_wwOOuf_.js.map +0 -1
  234. package/dist/_chunks/index-dnfs8wOQ.js +0 -638
  235. package/dist/_chunks/index-dnfs8wOQ.js.map +0 -1
  236. package/dist/_chunks/index-l_QWM0NZ.mjs +0 -1159
  237. package/dist/_chunks/index-l_QWM0NZ.mjs.map +0 -1
  238. package/dist/_chunks/index-wiA9qAAp.mjs +0 -615
  239. package/dist/_chunks/index-wiA9qAAp.mjs.map +0 -1
  240. package/dist/_chunks/it-YhZOlM2X.js +0 -62
  241. package/dist/_chunks/it-YhZOlM2X.js.map +0 -1
  242. package/dist/_chunks/it-bvH7DgQo.mjs +0 -62
  243. package/dist/_chunks/it-bvH7DgQo.mjs.map +0 -1
  244. package/dist/_chunks/ja-o_-JPvQv.mjs +0 -48
  245. package/dist/_chunks/ja-o_-JPvQv.mjs.map +0 -1
  246. package/dist/_chunks/ja-xssHUXFv.js +0 -48
  247. package/dist/_chunks/ja-xssHUXFv.js.map +0 -1
  248. package/dist/_chunks/ko-C3mHUSJa.js +0 -86
  249. package/dist/_chunks/ko-C3mHUSJa.js.map +0 -1
  250. package/dist/_chunks/ko-XJbPSez_.mjs +0 -86
  251. package/dist/_chunks/ko-XJbPSez_.mjs.map +0 -1
  252. package/dist/_chunks/ms-II5Ea73J.mjs +0 -49
  253. package/dist/_chunks/ms-II5Ea73J.mjs.map +0 -1
  254. package/dist/_chunks/ms-d0hfg65Z.js +0 -49
  255. package/dist/_chunks/ms-d0hfg65Z.js.map +0 -1
  256. package/dist/_chunks/nl-TA7TfK_5.js +0 -48
  257. package/dist/_chunks/nl-TA7TfK_5.js.map +0 -1
  258. package/dist/_chunks/nl-vEy6TN0K.mjs +0 -48
  259. package/dist/_chunks/nl-vEy6TN0K.mjs.map +0 -1
  260. package/dist/_chunks/pl-0pUL9hdA.js +0 -86
  261. package/dist/_chunks/pl-0pUL9hdA.js.map +0 -1
  262. package/dist/_chunks/pl-2VowaFGt.mjs +0 -86
  263. package/dist/_chunks/pl-2VowaFGt.mjs.map +0 -1
  264. package/dist/_chunks/pt-BR-WNOhafR4.js +0 -44
  265. package/dist/_chunks/pt-BR-WNOhafR4.js.map +0 -1
  266. package/dist/_chunks/pt-BR-sS1Xp3Jt.mjs +0 -44
  267. package/dist/_chunks/pt-BR-sS1Xp3Jt.mjs.map +0 -1
  268. package/dist/_chunks/pt-Rf9W51IO.mjs +0 -48
  269. package/dist/_chunks/pt-Rf9W51IO.mjs.map +0 -1
  270. package/dist/_chunks/pt-guNR9Gax.js +0 -48
  271. package/dist/_chunks/pt-guNR9Gax.js.map +0 -1
  272. package/dist/_chunks/ru-X3BMXDds.js +0 -86
  273. package/dist/_chunks/ru-X3BMXDds.js.map +0 -1
  274. package/dist/_chunks/ru-qKHnd5or.mjs +0 -86
  275. package/dist/_chunks/ru-qKHnd5or.mjs.map +0 -1
  276. package/dist/_chunks/sk-NWPw1oTN.js +0 -50
  277. package/dist/_chunks/sk-NWPw1oTN.js.map +0 -1
  278. package/dist/_chunks/sk-_Ryr-eTT.mjs +0 -50
  279. package/dist/_chunks/sk-_Ryr-eTT.mjs.map +0 -1
  280. package/dist/_chunks/sv-76NnbB__.js +0 -86
  281. package/dist/_chunks/sv-76NnbB__.js.map +0 -1
  282. package/dist/_chunks/sv-BqzScFXS.mjs +0 -86
  283. package/dist/_chunks/sv-BqzScFXS.mjs.map +0 -1
  284. package/dist/_chunks/th-WsknMEpq.mjs +0 -60
  285. package/dist/_chunks/th-WsknMEpq.mjs.map +0 -1
  286. package/dist/_chunks/th-cbppX21D.js +0 -60
  287. package/dist/_chunks/th-cbppX21D.js.map +0 -1
  288. package/dist/_chunks/tr-6mm_Fmz7.js +0 -85
  289. package/dist/_chunks/tr-6mm_Fmz7.js.map +0 -1
  290. package/dist/_chunks/tr-_DB1F1GW.mjs +0 -85
  291. package/dist/_chunks/tr-_DB1F1GW.mjs.map +0 -1
  292. package/dist/_chunks/uk-sI2I1ogF.js +0 -49
  293. package/dist/_chunks/uk-sI2I1ogF.js.map +0 -1
  294. package/dist/_chunks/uk-yxMSQAwI.mjs +0 -49
  295. package/dist/_chunks/uk-yxMSQAwI.mjs.map +0 -1
  296. package/dist/_chunks/vi-A3zJxaiI.js +0 -50
  297. package/dist/_chunks/vi-A3zJxaiI.js.map +0 -1
  298. package/dist/_chunks/vi-xY0zCW3d.mjs +0 -50
  299. package/dist/_chunks/vi-xY0zCW3d.mjs.map +0 -1
  300. package/dist/_chunks/zh-72SpmFXa.js +0 -86
  301. package/dist/_chunks/zh-72SpmFXa.js.map +0 -1
  302. package/dist/_chunks/zh-Hans-ArWWtyP4.js +0 -86
  303. package/dist/_chunks/zh-Hans-ArWWtyP4.js.map +0 -1
  304. package/dist/_chunks/zh-Hans-E84cu4kP.mjs +0 -86
  305. package/dist/_chunks/zh-Hans-E84cu4kP.mjs.map +0 -1
  306. package/dist/_chunks/zh-OFeldzbX.mjs +0 -86
  307. package/dist/_chunks/zh-OFeldzbX.mjs.map +0 -1
  308. package/packup.config.ts +0 -22
  309. package/server/bootstrap/grant-config.js +0 -140
  310. package/strapi-server.js +0 -3
@@ -2,30 +2,20 @@ import * as React from 'react';
2
2
 
3
3
  import {
4
4
  Button,
5
- ContentLayout,
6
5
  Flex,
7
6
  Grid,
8
- GridItem,
9
- HeaderLayout,
10
7
  Main,
11
8
  Textarea,
12
9
  TextInput,
13
10
  Typography,
11
+ Field,
14
12
  } from '@strapi/design-system';
15
- import {
16
- CheckPagePermissions,
17
- Form,
18
- SettingsPageTitle,
19
- useFetchClient,
20
- useNotification,
21
- useOverlayBlocker,
22
- useTracking,
23
- } from '@strapi/helper-plugin';
24
13
  import { Check } from '@strapi/icons';
25
- import { Formik } from 'formik';
14
+ import { Page, useTracking, useNotification, useFetchClient, Layouts } from '@strapi/strapi/admin';
15
+ import { Formik, Form } from 'formik';
26
16
  import { useIntl } from 'react-intl';
27
17
  import { useMutation } from 'react-query';
28
- import { useHistory } from 'react-router-dom';
18
+ import { useNavigate } from 'react-router-dom';
29
19
 
30
20
  import UsersPermissions from '../../../components/UsersPermissions';
31
21
  import { PERMISSIONS } from '../../../constants';
@@ -35,9 +25,8 @@ import { usePlugins } from '../hooks/usePlugins';
35
25
 
36
26
  export const CreatePage = () => {
37
27
  const { formatMessage } = useIntl();
38
- const toggleNotification = useNotification();
39
- const { goBack } = useHistory();
40
- const { lockApp, unlockApp } = useOverlayBlocker();
28
+ const { toggleNotification } = useNotification();
29
+ const navigate = useNavigate();
41
30
  const { isLoading: isLoadingPlugins, permissions, routes } = usePlugins();
42
31
  const { trackUsage } = useTracking();
43
32
  const permissionsRef = React.useRef();
@@ -45,11 +34,11 @@ export const CreatePage = () => {
45
34
  const mutation = useMutation((body) => post(`/users-permissions/roles`, body), {
46
35
  onError() {
47
36
  toggleNotification({
48
- type: 'warning',
49
- message: {
37
+ type: 'danger',
38
+ message: formatMessage({
50
39
  id: 'notification.error',
51
40
  defaultMessage: 'An error occurred',
52
- },
41
+ }),
53
42
  });
54
43
  },
55
44
 
@@ -58,34 +47,34 @@ export const CreatePage = () => {
58
47
 
59
48
  toggleNotification({
60
49
  type: 'success',
61
- message: {
50
+ message: formatMessage({
62
51
  id: getTrad('Settings.roles.created'),
63
52
  defaultMessage: 'Role created',
64
- },
53
+ }),
65
54
  });
66
55
 
67
56
  // Forcing redirecting since we don't have the id in the response
68
- goBack();
57
+ navigate(-1);
69
58
  },
70
59
  });
71
60
 
72
61
  const handleCreateRoleSubmit = async (data) => {
73
- lockApp();
74
-
75
62
  // TODO: refactor. Child -> parent component communication is evil;
76
63
  // We should either move the provider one level up or move the state
77
64
  // straight into redux.
78
65
  const permissions = permissionsRef.current.getPermissions();
79
66
 
80
67
  await mutation.mutate({ ...data, ...permissions, users: [] });
81
-
82
- unlockApp();
83
68
  };
84
69
 
85
70
  return (
86
71
  <Main>
87
- {/* TODO: This needs to be translated */}
88
- <SettingsPageTitle name="Roles" />
72
+ <Page.Title>
73
+ {formatMessage(
74
+ { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },
75
+ { name: 'Roles' }
76
+ )}
77
+ </Page.Title>
89
78
  <Formik
90
79
  enableReinitialize
91
80
  initialValues={{ name: '', description: '' }}
@@ -94,7 +83,7 @@ export const CreatePage = () => {
94
83
  >
95
84
  {({ handleSubmit, values, handleChange, errors }) => (
96
85
  <Form noValidate onSubmit={handleSubmit}>
97
- <HeaderLayout
86
+ <Layouts.Header
98
87
  primaryAction={
99
88
  !isLoadingPlugins && (
100
89
  <Button type="submit" loading={mutation.isLoading} startIcon={<Check />}>
@@ -114,7 +103,7 @@ export const CreatePage = () => {
114
103
  defaultMessage: 'Define the rights given to the role',
115
104
  })}
116
105
  />
117
- <ContentLayout>
106
+ <Layouts.Content>
118
107
  <Flex
119
108
  background="neutral0"
120
109
  direction="column"
@@ -128,40 +117,37 @@ export const CreatePage = () => {
128
117
  shadow="filterShadow"
129
118
  >
130
119
  <Flex direction="column" alignItems="stretch">
131
- <Typography variant="delta" as="h2">
120
+ <Typography variant="delta" tag="h2">
132
121
  {formatMessage({
133
122
  id: getTrad('EditPage.form.roles'),
134
123
  defaultMessage: 'Role details',
135
124
  })}
136
125
  </Typography>
137
126
 
138
- <Grid gap={4}>
139
- <GridItem col={6}>
140
- <TextInput
127
+ <Grid.Root gap={4}>
128
+ <Grid.Item col={6} direction="column" alignItems="stretch">
129
+ <Field.Root
141
130
  name="name"
142
- value={values.name || ''}
143
- onChange={handleChange}
144
- label={formatMessage({
145
- id: 'global.name',
146
- defaultMessage: 'Name',
147
- })}
148
131
  error={
149
132
  errors?.name
150
133
  ? formatMessage({ id: errors.name, defaultMessage: 'Name is required' })
151
134
  : false
152
135
  }
153
136
  required
154
- />
155
- </GridItem>
156
- <GridItem col={6}>
157
- <Textarea
158
- id="description"
159
- value={values.description || ''}
160
- onChange={handleChange}
161
- label={formatMessage({
162
- id: 'global.description',
163
- defaultMessage: 'Description',
164
- })}
137
+ >
138
+ <Field.Label>
139
+ {formatMessage({
140
+ id: 'global.name',
141
+ defaultMessage: 'Name',
142
+ })}
143
+ </Field.Label>
144
+ <TextInput value={values.name || ''} onChange={handleChange} />
145
+ <Field.Error />
146
+ </Field.Root>
147
+ </Grid.Item>
148
+ <Grid.Item col={6} direction="column" alignItems="stretch">
149
+ <Field.Root
150
+ name="description"
165
151
  error={
166
152
  errors?.description
167
153
  ? formatMessage({
@@ -171,9 +157,18 @@ export const CreatePage = () => {
171
157
  : false
172
158
  }
173
159
  required
174
- />
175
- </GridItem>
176
- </Grid>
160
+ >
161
+ <Field.Label>
162
+ {formatMessage({
163
+ id: 'global.description',
164
+ defaultMessage: 'Description',
165
+ })}
166
+ </Field.Label>
167
+ <Textarea value={values.description || ''} onChange={handleChange} />
168
+ <Field.Error />
169
+ </Field.Root>
170
+ </Grid.Item>
171
+ </Grid.Root>
177
172
  </Flex>
178
173
 
179
174
  {!isLoadingPlugins && (
@@ -184,7 +179,7 @@ export const CreatePage = () => {
184
179
  />
185
180
  )}
186
181
  </Flex>
187
- </ContentLayout>
182
+ </Layouts.Content>
188
183
  </Form>
189
184
  )}
190
185
  </Formik>
@@ -193,7 +188,7 @@ export const CreatePage = () => {
193
188
  };
194
189
 
195
190
  export const ProtectedRolesCreatePage = () => (
196
- <CheckPagePermissions permissions={PERMISSIONS.createRole}>
191
+ <Page.Protect permissions={PERMISSIONS.createRole}>
197
192
  <CreatePage />
198
- </CheckPagePermissions>
193
+ </Page.Protect>
199
194
  );
@@ -1,33 +1,28 @@
1
1
  import * as React from 'react';
2
2
 
3
3
  import {
4
- ContentLayout,
5
- HeaderLayout,
6
4
  Main,
7
5
  Button,
8
6
  Flex,
9
7
  TextInput,
10
8
  Textarea,
11
9
  Typography,
12
- GridItem,
13
10
  Grid,
11
+ Field,
14
12
  } from '@strapi/design-system';
13
+ import { Check } from '@strapi/icons';
15
14
  import {
16
- CheckPagePermissions,
17
- useOverlayBlocker,
18
- SettingsPageTitle,
19
- LoadingIndicatorPage,
20
- Form,
15
+ Page,
16
+ BackButton,
21
17
  useAPIErrorHandler,
22
- useFetchClient,
23
18
  useNotification,
24
- Link,
25
- } from '@strapi/helper-plugin';
26
- import { ArrowLeft, Check } from '@strapi/icons';
27
- import { Formik } from 'formik';
19
+ useFetchClient,
20
+ Layouts,
21
+ } from '@strapi/strapi/admin';
22
+ import { Formik, Form } from 'formik';
28
23
  import { useIntl } from 'react-intl';
29
24
  import { useQuery, useMutation } from 'react-query';
30
- import { useRouteMatch } from 'react-router-dom';
25
+ import { useMatch } from 'react-router-dom';
31
26
 
32
27
  import UsersPermissions from '../../../components/UsersPermissions';
33
28
  import { PERMISSIONS } from '../../../constants';
@@ -37,11 +32,10 @@ import { usePlugins } from '../hooks/usePlugins';
37
32
 
38
33
  export const EditPage = () => {
39
34
  const { formatMessage } = useIntl();
40
- const toggleNotification = useNotification();
41
- const { lockApp, unlockApp } = useOverlayBlocker();
35
+ const { toggleNotification } = useNotification();
42
36
  const {
43
37
  params: { id },
44
- } = useRouteMatch(`/settings/users-permissions/roles/:id`);
38
+ } = useMatch(`/settings/users-permissions/roles/:id`);
45
39
  const { get } = useFetchClient();
46
40
  const { isLoading: isLoadingPlugins, routes } = usePlugins();
47
41
  const {
@@ -63,7 +57,7 @@ export const EditPage = () => {
63
57
  const mutation = useMutation((body) => put(`/users-permissions/roles/${id}`, body), {
64
58
  onError(error) {
65
59
  toggleNotification({
66
- type: 'warning',
60
+ type: 'danger',
67
61
  message: formatAPIError(error),
68
62
  });
69
63
  },
@@ -71,10 +65,10 @@ export const EditPage = () => {
71
65
  async onSuccess() {
72
66
  toggleNotification({
73
67
  type: 'success',
74
- message: {
68
+ message: formatMessage({
75
69
  id: getTrad('Settings.roles.created'),
76
70
  defaultMessage: 'Role edited',
77
- },
71
+ }),
78
72
  });
79
73
 
80
74
  await refetchRole();
@@ -82,24 +76,23 @@ export const EditPage = () => {
82
76
  });
83
77
 
84
78
  const handleEditRoleSubmit = async (data) => {
85
- // Set loading state
86
- lockApp();
87
-
88
79
  const permissions = permissionsRef.current.getPermissions();
89
80
 
90
81
  await mutation.mutate({ ...data, ...permissions, users: [] });
91
-
92
- unlockApp();
93
82
  };
94
83
 
95
84
  if (isLoadingRole) {
96
- return <LoadingIndicatorPage />;
85
+ return <Page.Loading />;
97
86
  }
98
87
 
99
88
  return (
100
89
  <Main>
101
- {/* TODO: this needs to be translated */}
102
- <SettingsPageTitle name="Roles" />
90
+ <Page.Title>
91
+ {formatMessage(
92
+ { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },
93
+ { name: 'Roles' }
94
+ )}
95
+ </Page.Title>
103
96
  <Formik
104
97
  enableReinitialize
105
98
  initialValues={{ name: role.name, description: role.description }}
@@ -108,9 +101,9 @@ export const EditPage = () => {
108
101
  >
109
102
  {({ handleSubmit, values, handleChange, errors }) => (
110
103
  <Form noValidate onSubmit={handleSubmit}>
111
- <HeaderLayout
104
+ <Layouts.Header
112
105
  primaryAction={
113
- !isLoadingPlugins && (
106
+ !isLoadingPlugins ? (
114
107
  <Button
115
108
  disabled={role.code === 'strapi-super-admin'}
116
109
  type="submit"
@@ -122,20 +115,13 @@ export const EditPage = () => {
122
115
  defaultMessage: 'Save',
123
116
  })}
124
117
  </Button>
125
- )
118
+ ) : null
126
119
  }
127
120
  title={role.name}
128
121
  subtitle={role.description}
129
- navigationAction={
130
- <Link startIcon={<ArrowLeft />} to="/settings/users-permissions/roles">
131
- {formatMessage({
132
- id: 'global.back',
133
- defaultMessage: 'Back',
134
- })}
135
- </Link>
136
- }
122
+ navigationAction={<BackButton fallback=".." />}
137
123
  />
138
- <ContentLayout>
124
+ <Layouts.Content>
139
125
  <Flex
140
126
  background="neutral0"
141
127
  direction="column"
@@ -149,40 +135,40 @@ export const EditPage = () => {
149
135
  shadow="filterShadow"
150
136
  >
151
137
  <Flex direction="column" alignItems="stretch" gap={4}>
152
- <Typography variant="delta" as="h2">
138
+ <Typography variant="delta" tag="h2">
153
139
  {formatMessage({
154
140
  id: getTrad('EditPage.form.roles'),
155
141
  defaultMessage: 'Role details',
156
142
  })}
157
143
  </Typography>
158
144
 
159
- <Grid gap={4}>
160
- <GridItem col={6}>
161
- <TextInput
145
+ <Grid.Root gap={4}>
146
+ <Grid.Item col={6} direction="column" alignItems="stretch">
147
+ <Field.Root
162
148
  name="name"
163
- value={values.name || ''}
164
- onChange={handleChange}
165
- label={formatMessage({
166
- id: 'global.name',
167
- defaultMessage: 'Name',
168
- })}
169
149
  error={
170
150
  errors?.name
171
- ? formatMessage({ id: errors.name, defaultMessage: 'Name is required' })
151
+ ? formatMessage({
152
+ id: errors.name,
153
+ defaultMessage: 'Name is required',
154
+ })
172
155
  : false
173
156
  }
174
157
  required
175
- />
176
- </GridItem>
177
- <GridItem col={6}>
178
- <Textarea
179
- id="description"
180
- value={values.description || ''}
181
- onChange={handleChange}
182
- label={formatMessage({
183
- id: 'global.description',
184
- defaultMessage: 'Description',
185
- })}
158
+ >
159
+ <Field.Label>
160
+ {formatMessage({
161
+ id: 'global.name',
162
+ defaultMessage: 'Name',
163
+ })}
164
+ </Field.Label>
165
+ <TextInput value={values.name || ''} onChange={handleChange} />
166
+ <Field.Error />
167
+ </Field.Root>
168
+ </Grid.Item>
169
+ <Grid.Item col={6} direction="column" alignItems="stretch">
170
+ <Field.Root
171
+ name="description"
186
172
  error={
187
173
  errors?.description
188
174
  ? formatMessage({
@@ -192,9 +178,18 @@ export const EditPage = () => {
192
178
  : false
193
179
  }
194
180
  required
195
- />
196
- </GridItem>
197
- </Grid>
181
+ >
182
+ <Field.Label>
183
+ {formatMessage({
184
+ id: 'global.description',
185
+ defaultMessage: 'Description',
186
+ })}
187
+ </Field.Label>
188
+ <Textarea value={values.description || ''} onChange={handleChange} />
189
+ <Field.Error />
190
+ </Field.Root>
191
+ </Grid.Item>
192
+ </Grid.Root>
198
193
  </Flex>
199
194
 
200
195
  {!isLoadingPlugins && (
@@ -205,7 +200,7 @@ export const EditPage = () => {
205
200
  />
206
201
  )}
207
202
  </Flex>
208
- </ContentLayout>
203
+ </Layouts.Content>
209
204
  </Form>
210
205
  )}
211
206
  </Formik>
@@ -214,7 +209,7 @@ export const EditPage = () => {
214
209
  };
215
210
 
216
211
  export const ProtectedRolesEditPage = () => (
217
- <CheckPagePermissions permissions={PERMISSIONS.updateRole}>
212
+ <Page.Protect permissions={PERMISSIONS.updateRole}>
218
213
  <EditPage />
219
- </CheckPagePermissions>
214
+ </Page.Protect>
220
215
  );
@@ -1,24 +1,23 @@
1
- import React from 'react';
1
+ import * as React from 'react';
2
2
 
3
3
  import { Flex, IconButton, Link, Tbody, Td, Tr, Typography } from '@strapi/design-system';
4
- import { CheckPermissions, onRowClick, pxToRem, stopPropagation } from '@strapi/helper-plugin';
5
4
  import { Pencil, Trash } from '@strapi/icons';
6
5
  import PropTypes from 'prop-types';
7
6
  import { useIntl } from 'react-intl';
8
- import { useHistory } from 'react-router-dom';
9
- import styled from 'styled-components';
7
+ import { useNavigate, NavLink } from 'react-router-dom';
8
+ import { styled } from 'styled-components';
10
9
 
11
10
  const EditLink = styled(Link)`
12
11
  align-items: center;
13
- height: ${pxToRem(32)};
12
+ height: 3.2rem;
13
+ width: 3.2rem;
14
14
  display: flex;
15
15
  justify-content: center;
16
- padding: ${({ theme }) => `${theme.spaces[2]}}`};
17
- width: ${pxToRem(32)};
16
+ padding: ${({ theme }) => `${theme.spaces[2]}`};
18
17
 
19
18
  svg {
20
- height: ${pxToRem(12)};
21
- width: ${pxToRem(12)};
19
+ height: 1.6rem;
20
+ width: 1.6rem;
22
21
 
23
22
  path {
24
23
  fill: ${({ theme }) => theme.colors.neutral500};
@@ -35,9 +34,9 @@ const EditLink = styled(Link)`
35
34
  }
36
35
  `;
37
36
 
38
- const TableBody = ({ sortedRoles, canDelete, permissions, setRoleToDelete, onDelete }) => {
37
+ const TableBody = ({ sortedRoles, canDelete, canUpdate, setRoleToDelete, onDelete }) => {
39
38
  const { formatMessage } = useIntl();
40
- const { push } = useHistory();
39
+ const navigate = useNavigate();
41
40
  const [showConfirmDelete, setShowConfirmDelete] = onDelete;
42
41
 
43
42
  const checkCanDeleteRole = (role) =>
@@ -48,14 +47,10 @@ const TableBody = ({ sortedRoles, canDelete, permissions, setRoleToDelete, onDel
48
47
  setShowConfirmDelete(!showConfirmDelete);
49
48
  };
50
49
 
51
- const handleClickEdit = (id) => {
52
- push(`/settings/users-permissions/roles/${id}`);
53
- };
54
-
55
50
  return (
56
51
  <Tbody>
57
52
  {sortedRoles?.map((role) => (
58
- <Tr key={role.name} {...onRowClick({ fn: () => handleClickEdit(role.id) })}>
53
+ <Tr cursor="pointer" key={role.name} onClick={() => navigate(role.id.toString())}>
59
54
  <Td width="20%">
60
55
  <Typography>{role.name}</Typography>
61
56
  </Td>
@@ -74,10 +69,11 @@ const TableBody = ({ sortedRoles, canDelete, permissions, setRoleToDelete, onDel
74
69
  </Typography>
75
70
  </Td>
76
71
  <Td>
77
- <Flex justifyContent="end" {...stopPropagation}>
78
- <CheckPermissions permissions={permissions.updateRole}>
72
+ <Flex justifyContent="end" onClick={(e) => e.stopPropagation()}>
73
+ {canUpdate ? (
79
74
  <EditLink
80
- to={`/settings/users-permissions/roles/${role.id}`}
75
+ tag={NavLink}
76
+ to={role.id.toString()}
81
77
  aria-label={formatMessage(
82
78
  { id: 'app.component.table.edit', defaultMessage: 'Edit {target}' },
83
79
  { target: `${role.name}` }
@@ -85,20 +81,19 @@ const TableBody = ({ sortedRoles, canDelete, permissions, setRoleToDelete, onDel
85
81
  >
86
82
  <Pencil />
87
83
  </EditLink>
88
- </CheckPermissions>
84
+ ) : null}
89
85
 
90
86
  {checkCanDeleteRole(role) && (
91
- <CheckPermissions permissions={permissions.deleteRole}>
92
- <IconButton
93
- onClick={() => handleClickDelete(role.id)}
94
- noBorder
95
- icon={<Trash />}
96
- label={formatMessage(
97
- { id: 'global.delete-target', defaultMessage: 'Delete {target}' },
98
- { target: `${role.name}` }
99
- )}
100
- />
101
- </CheckPermissions>
87
+ <IconButton
88
+ onClick={() => handleClickDelete(role.id.toString())}
89
+ variant="ghost"
90
+ label={formatMessage(
91
+ { id: 'global.delete-target', defaultMessage: 'Delete {target}' },
92
+ { target: `${role.name}` }
93
+ )}
94
+ >
95
+ <Trash />
96
+ </IconButton>
102
97
  )}
103
98
  </Flex>
104
99
  </Td>
@@ -112,12 +107,13 @@ export default TableBody;
112
107
 
113
108
  TableBody.defaultProps = {
114
109
  canDelete: false,
110
+ canUpdate: false,
115
111
  };
116
112
 
117
113
  TableBody.propTypes = {
118
114
  onDelete: PropTypes.array.isRequired,
119
- permissions: PropTypes.object.isRequired,
120
115
  setRoleToDelete: PropTypes.func.isRequired,
121
116
  sortedRoles: PropTypes.array.isRequired,
122
117
  canDelete: PropTypes.bool,
118
+ canUpdate: PropTypes.bool,
123
119
  };