@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
@@ -1,160 +1,139 @@
1
- import React from 'react';
1
+ import * as React from 'react';
2
2
 
3
- import {
4
- Button,
5
- Grid,
6
- GridItem,
7
- ModalBody,
8
- ModalFooter,
9
- ModalHeader,
10
- ModalLayout,
11
- Textarea,
12
- } from '@strapi/design-system';
13
- import { Breadcrumbs, Crumb } from '@strapi/design-system/v2';
14
- import { Form, GenericInput } from '@strapi/helper-plugin';
15
- import { Formik } from 'formik';
3
+ import { Button, Grid, Modal, Breadcrumbs, Crumb, VisuallyHidden } from '@strapi/design-system';
4
+ import { Form, InputRenderer } from '@strapi/strapi/admin';
16
5
  import PropTypes from 'prop-types';
17
6
  import { useIntl } from 'react-intl';
18
7
 
19
8
  import { getTrad } from '../../../utils';
20
9
  import schema from '../utils/schema';
21
10
 
22
- const EmailForm = ({ template, onToggle, onSubmit }) => {
11
+ const EmailForm = ({ template = {}, onToggle, open, onSubmit }) => {
23
12
  const { formatMessage } = useIntl();
24
13
 
25
14
  return (
26
- <ModalLayout
27
- onClose={onToggle}
28
- labelledBy={`${formatMessage({
29
- id: getTrad('PopUpForm.header.edit.email-templates'),
30
- defaultMessage: 'Edit email template',
31
- })}, ${formatMessage({ id: getTrad(template.display), defaultMessage: template.display })}`}
32
- >
33
- <ModalHeader>
34
- <Breadcrumbs
35
- label={`${formatMessage({
36
- id: getTrad('PopUpForm.header.edit.email-templates'),
37
- defaultMessage: 'Edit email template',
38
- })}, ${formatMessage({
39
- id: getTrad(template.display),
40
- defaultMessage: template.display,
41
- })}`}
42
- >
43
- <Crumb>
44
- {formatMessage({
15
+ <Modal.Root open={open} onOpenChange={onToggle}>
16
+ <Modal.Content>
17
+ <Modal.Header>
18
+ <Breadcrumbs
19
+ label={`${formatMessage({
45
20
  id: getTrad('PopUpForm.header.edit.email-templates'),
46
21
  defaultMessage: 'Edit email template',
47
- })}
48
- </Crumb>
49
- <Crumb isCurrent>
50
- {formatMessage({ id: getTrad(template.display), defaultMessage: template.display })}
51
- </Crumb>
52
- </Breadcrumbs>
53
- </ModalHeader>
54
- <Formik
55
- onSubmit={onSubmit}
56
- initialValues={template}
57
- validateOnChange={false}
58
- validationSchema={schema}
59
- enableReinitialize
60
- >
61
- {({ errors, values, handleChange, isSubmitting }) => {
62
- return (
63
- <Form>
64
- <ModalBody>
65
- <Grid gap={5}>
66
- <GridItem col={6} s={12}>
67
- <GenericInput
68
- intlLabel={{
69
- id: getTrad('PopUpForm.Email.options.from.name.label'),
70
- defaultMessage: 'Shipper name',
71
- }}
72
- name="options.from.name"
73
- onChange={handleChange}
74
- value={values.options.from.name}
75
- error={errors?.options?.from?.name}
76
- type="text"
77
- />
78
- </GridItem>
79
- <GridItem col={6} s={12}>
80
- <GenericInput
81
- intlLabel={{
82
- id: getTrad('PopUpForm.Email.options.from.email.label'),
83
- defaultMessage: 'Shipper email',
84
- }}
85
- name="options.from.email"
86
- onChange={handleChange}
87
- value={values.options.from.email}
88
- error={errors?.options?.from?.email}
89
- type="text"
90
- />
91
- </GridItem>
92
- <GridItem col={6} s={12}>
93
- <GenericInput
94
- intlLabel={{
95
- id: getTrad('PopUpForm.Email.options.response_email.label'),
96
- defaultMessage: 'Response email',
97
- }}
98
- name="options.response_email"
99
- onChange={handleChange}
100
- value={values.options.response_email}
101
- error={errors?.options?.response_email}
102
- type="text"
103
- />
104
- </GridItem>
105
- <GridItem col={6} s={12}>
106
- <GenericInput
107
- intlLabel={{
108
- id: getTrad('PopUpForm.Email.options.object.label'),
109
- defaultMessage: 'Subject',
110
- }}
111
- name="options.object"
112
- onChange={handleChange}
113
- value={values.options.object}
114
- error={errors?.options?.object}
115
- type="text"
116
- />
117
- </GridItem>
118
- <GridItem col={12} s={12}>
119
- <Textarea
120
- label={formatMessage({
121
- id: getTrad('PopUpForm.Email.options.message.label'),
122
- defaultMessage: 'Message',
123
- })}
124
- id="options.message"
125
- onChange={handleChange}
126
- value={values.options.message}
127
- error={
128
- errors?.options?.message &&
129
- formatMessage({
130
- id: errors.options.message,
131
- defaultMessage: errors.options.message,
132
- })
133
- }
134
- />
135
- </GridItem>
136
- </Grid>
137
- </ModalBody>
138
- <ModalFooter
139
- startActions={
140
- <Button onClick={onToggle} variant="tertiary">
141
- Cancel
142
- </Button>
143
- }
144
- endActions={
22
+ })}, ${
23
+ template.display
24
+ ? formatMessage({
25
+ id: getTrad(template.display),
26
+ defaultMessage: template.display,
27
+ })
28
+ : ''
29
+ }`}
30
+ >
31
+ <Crumb>
32
+ {formatMessage({
33
+ id: getTrad('PopUpForm.header.edit.email-templates'),
34
+ defaultMessage: 'Edit email template',
35
+ })}
36
+ </Crumb>
37
+ <Crumb isCurrent>
38
+ {template.display
39
+ ? formatMessage({ id: getTrad(template.display), defaultMessage: template.display })
40
+ : ''}
41
+ </Crumb>
42
+ </Breadcrumbs>
43
+ <VisuallyHidden>
44
+ <Modal.Title>
45
+ {`${formatMessage({
46
+ id: getTrad('PopUpForm.header.edit.email-templates'),
47
+ defaultMessage: 'Edit email template',
48
+ })}, ${template.display ? formatMessage({ id: getTrad(template.display), defaultMessage: template.display }) : ''}`}
49
+ </Modal.Title>
50
+ </VisuallyHidden>
51
+ </Modal.Header>
52
+ <Form onSubmit={onSubmit} initialValues={template} validationSchema={schema}>
53
+ {({ isSubmitting }) => {
54
+ return (
55
+ <>
56
+ <Modal.Body>
57
+ <Grid.Root gap={5}>
58
+ {[
59
+ {
60
+ label: formatMessage({
61
+ id: getTrad('PopUpForm.Email.options.from.name.label'),
62
+ defaultMessage: 'Shipper name',
63
+ }),
64
+ name: 'options.from.name',
65
+ size: 6,
66
+ type: 'string',
67
+ },
68
+ {
69
+ label: formatMessage({
70
+ id: getTrad('PopUpForm.Email.options.from.email.label'),
71
+ defaultMessage: 'Shipper email',
72
+ }),
73
+ name: 'options.from.email',
74
+ size: 6,
75
+ type: 'string',
76
+ },
77
+ {
78
+ label: formatMessage({
79
+ id: getTrad('PopUpForm.Email.options.response_email.label'),
80
+ defaultMessage: 'Response email',
81
+ }),
82
+ name: 'options.response_email',
83
+ size: 6,
84
+ type: 'string',
85
+ },
86
+ {
87
+ label: formatMessage({
88
+ id: getTrad('PopUpForm.Email.options.object.label'),
89
+ defaultMessage: 'Subject',
90
+ }),
91
+ name: 'options.object',
92
+ size: 6,
93
+ type: 'string',
94
+ },
95
+ {
96
+ label: formatMessage({
97
+ id: getTrad('PopUpForm.Email.options.message.label'),
98
+ defaultMessage: 'Message',
99
+ }),
100
+ name: 'options.message',
101
+ size: 12,
102
+ type: 'text',
103
+ },
104
+ ].map(({ size, ...field }) => (
105
+ <Grid.Item
106
+ key={field.name}
107
+ col={size}
108
+ direction="column"
109
+ alignItems="stretch"
110
+ >
111
+ <InputRenderer {...field} />
112
+ </Grid.Item>
113
+ ))}
114
+ </Grid.Root>
115
+ </Modal.Body>
116
+ <Modal.Footer>
117
+ <Modal.Close>
118
+ <Button variant="tertiary">Cancel</Button>
119
+ </Modal.Close>
145
120
  <Button loading={isSubmitting} type="submit">
146
121
  Finish
147
122
  </Button>
148
- }
149
- />
150
- </Form>
151
- );
152
- }}
153
- </Formik>
154
- </ModalLayout>
123
+ </Modal.Footer>
124
+ </>
125
+ );
126
+ }}
127
+ </Form>
128
+ </Modal.Content>
129
+ </Modal.Root>
155
130
  );
156
131
  };
157
132
 
133
+ EmailForm.defaultProps = {
134
+ template: {},
135
+ };
136
+
158
137
  EmailForm.propTypes = {
159
138
  template: PropTypes.shape({
160
139
  display: PropTypes.string,
@@ -168,7 +147,8 @@ EmailForm.propTypes = {
168
147
  object: PropTypes.string,
169
148
  response_email: PropTypes.string,
170
149
  }),
171
- }).isRequired,
150
+ }),
151
+ open: PropTypes.bool.isRequired,
172
152
  onSubmit: PropTypes.func.isRequired,
173
153
  onToggle: PropTypes.func.isRequired,
174
154
  };
@@ -1,7 +1,6 @@
1
- import React from 'react';
1
+ import * as React from 'react';
2
2
 
3
3
  import {
4
- Icon,
5
4
  IconButton,
6
5
  Table,
7
6
  Tbody,
@@ -11,9 +10,9 @@ import {
11
10
  Tr,
12
11
  Typography,
13
12
  VisuallyHidden,
13
+ Box,
14
14
  } from '@strapi/design-system';
15
- import { onRowClick, stopPropagation } from '@strapi/helper-plugin';
16
- import { Check, Pencil, Refresh } from '@strapi/icons';
15
+ import { Check, Pencil, ArrowClockwise as Refresh } from '@strapi/icons';
17
16
  import PropTypes from 'prop-types';
18
17
  import { useIntl } from 'react-intl';
19
18
 
@@ -53,16 +52,16 @@ const EmailTable = ({ canUpdate, onEditClick }) => {
53
52
  </Tr>
54
53
  </Thead>
55
54
  <Tbody>
56
- <Tr {...onRowClick({ fn: () => onEditClick('reset_password') })}>
55
+ <Tr cursor="pointer" onClick={() => onEditClick('reset_password')}>
57
56
  <Td>
58
- <Icon>
57
+ <Box width="3.2rem" height="3.2rem" padding="0.8rem">
59
58
  <Refresh
60
59
  aria-label={formatMessage({
61
60
  id: 'global.reset-password',
62
61
  defaultMessage: 'Reset password',
63
62
  })}
64
63
  />
65
- </Icon>
64
+ </Box>
66
65
  </Td>
67
66
  <Td>
68
67
  <Typography>
@@ -72,28 +71,30 @@ const EmailTable = ({ canUpdate, onEditClick }) => {
72
71
  })}
73
72
  </Typography>
74
73
  </Td>
75
- <Td {...stopPropagation}>
74
+ <Td onClick={(e) => e.stopPropagation()}>
76
75
  <IconButton
77
76
  onClick={() => onEditClick('reset_password')}
78
77
  label={formatMessage({
79
78
  id: getTrad('Email.template.form.edit.label'),
80
79
  defaultMessage: 'Edit a template',
81
80
  })}
82
- noBorder
83
- icon={canUpdate && <Pencil />}
84
- />
81
+ variant="ghost"
82
+ disabled={!canUpdate}
83
+ >
84
+ <Pencil />
85
+ </IconButton>
85
86
  </Td>
86
87
  </Tr>
87
- <Tr {...onRowClick({ fn: () => onEditClick('email_confirmation') })}>
88
+ <Tr cursor="pointer" onClick={() => onEditClick('email_confirmation')}>
88
89
  <Td>
89
- <Icon>
90
+ <Box width="3.2rem" height="3.2rem" padding="0.8rem">
90
91
  <Check
91
92
  aria-label={formatMessage({
92
93
  id: getTrad('Email.template.email_confirmation'),
93
94
  defaultMessage: 'Email address confirmation',
94
95
  })}
95
96
  />
96
- </Icon>
97
+ </Box>
97
98
  </Td>
98
99
  <Td>
99
100
  <Typography>
@@ -103,16 +104,18 @@ const EmailTable = ({ canUpdate, onEditClick }) => {
103
104
  })}
104
105
  </Typography>
105
106
  </Td>
106
- <Td {...stopPropagation}>
107
+ <Td onClick={(e) => e.stopPropagation()}>
107
108
  <IconButton
108
109
  onClick={() => onEditClick('email_confirmation')}
109
110
  label={formatMessage({
110
111
  id: getTrad('Email.template.form.edit.label'),
111
112
  defaultMessage: 'Edit a template',
112
113
  })}
113
- noBorder
114
- icon={canUpdate && <Pencil />}
115
- />
114
+ variant="ghost"
115
+ disabled={!canUpdate}
116
+ >
117
+ <Pencil />
118
+ </IconButton>
116
119
  </Td>
117
120
  </Tr>
118
121
  </Tbody>
@@ -1,18 +1,15 @@
1
1
  import * as React from 'react';
2
2
 
3
- import { ContentLayout, HeaderLayout, Main, useNotifyAT } from '@strapi/design-system';
3
+ import { useTracking } from '@strapi/admin/strapi-admin';
4
+ import { useNotifyAT } from '@strapi/design-system';
4
5
  import {
5
- CheckPagePermissions,
6
- LoadingIndicatorPage,
7
- SettingsPageTitle,
6
+ Page,
8
7
  useAPIErrorHandler,
9
- useFetchClient,
10
- useFocusWhenNavigate,
11
8
  useNotification,
12
- useOverlayBlocker,
9
+ useFetchClient,
13
10
  useRBAC,
14
- useTracking,
15
- } from '@strapi/helper-plugin';
11
+ Layouts,
12
+ } from '@strapi/strapi/admin';
16
13
  import { useIntl } from 'react-intl';
17
14
  import { useMutation, useQuery, useQueryClient } from 'react-query';
18
15
 
@@ -23,23 +20,19 @@ import EmailForm from './components/EmailForm';
23
20
  import EmailTable from './components/EmailTable';
24
21
 
25
22
  const ProtectedEmailTemplatesPage = () => (
26
- <CheckPagePermissions permissions={PERMISSIONS.readEmailTemplates}>
23
+ <Page.Protect permissions={PERMISSIONS.readEmailTemplates}>
27
24
  <EmailTemplatesPage />
28
- </CheckPagePermissions>
25
+ </Page.Protect>
29
26
  );
30
-
31
27
  const EmailTemplatesPage = () => {
32
28
  const { formatMessage } = useIntl();
33
29
  const { trackUsage } = useTracking();
34
30
  const { notifyStatus } = useNotifyAT();
35
- const toggleNotification = useNotification();
36
- const { lockApp, unlockApp } = useOverlayBlocker();
31
+ const { toggleNotification } = useNotification();
37
32
  const queryClient = useQueryClient();
38
33
  const { get, put } = useFetchClient();
39
34
  const { formatAPIError } = useAPIErrorHandler();
40
35
 
41
- useFocusWhenNavigate();
42
-
43
36
  const [isModalOpen, setIsModalOpen] = React.useState(false);
44
37
  const [templateToEdit, setTemplateToEdit] = React.useState(null);
45
38
 
@@ -66,7 +59,7 @@ const EmailTemplatesPage = () => {
66
59
  },
67
60
  onError(error) {
68
61
  toggleNotification({
69
- type: 'warning',
62
+ type: 'danger',
70
63
  message: formatAPIError(error),
71
64
  });
72
65
  },
@@ -92,29 +85,24 @@ const EmailTemplatesPage = () => {
92
85
 
93
86
  toggleNotification({
94
87
  type: 'success',
95
- message: { id: 'notification.success.saved', defaultMessage: 'Saved' },
88
+ message: formatMessage({ id: 'notification.success.saved', defaultMessage: 'Saved' }),
96
89
  });
97
90
 
98
91
  trackUsage('didEditEmailTemplates');
99
92
 
100
- unlockApp();
101
93
  handleToggle();
102
94
  },
103
95
  onError(error) {
104
96
  toggleNotification({
105
- type: 'warning',
97
+ type: 'danger',
106
98
  message: formatAPIError(error),
107
99
  });
108
-
109
- unlockApp();
110
100
  },
111
101
  refetchActive: true,
112
102
  }
113
103
  );
114
104
 
115
105
  const handleSubmit = (body) => {
116
- lockApp();
117
-
118
106
  trackUsage('willEditEmailTemplates');
119
107
 
120
108
  const editedTemplates = { ...data, [templateToEdit]: body };
@@ -122,53 +110,39 @@ const EmailTemplatesPage = () => {
122
110
  };
123
111
 
124
112
  if (isLoading) {
125
- return (
126
- <Main aria-busy="true">
127
- <SettingsPageTitle
128
- name={formatMessage({
129
- id: getTrad('HeaderNav.link.emailTemplates'),
130
- defaultMessage: 'Email templates',
131
- })}
132
- />
133
- <HeaderLayout
134
- title={formatMessage({
135
- id: getTrad('HeaderNav.link.emailTemplates'),
136
- defaultMessage: 'Email templates',
137
- })}
138
- />
139
- <ContentLayout>
140
- <LoadingIndicatorPage />
141
- </ContentLayout>
142
- </Main>
143
- );
113
+ return <Page.Loading />;
144
114
  }
145
115
 
146
116
  return (
147
- <Main aria-busy={submitMutation.isLoading}>
148
- <SettingsPageTitle
149
- name={formatMessage({
150
- id: getTrad('HeaderNav.link.emailTemplates'),
151
- defaultMessage: 'Email templates',
152
- })}
153
- />
154
- <HeaderLayout
117
+ <Page.Main aria-busy={submitMutation.isLoading}>
118
+ <Page.Title>
119
+ {formatMessage(
120
+ { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },
121
+ {
122
+ name: formatMessage({
123
+ id: getTrad('HeaderNav.link.emailTemplates'),
124
+ defaultMessage: 'Email templates',
125
+ }),
126
+ }
127
+ )}
128
+ </Page.Title>
129
+ <Layouts.Header
155
130
  title={formatMessage({
156
131
  id: getTrad('HeaderNav.link.emailTemplates'),
157
132
  defaultMessage: 'Email templates',
158
133
  })}
159
134
  />
160
- <ContentLayout>
135
+ <Layouts.Content>
161
136
  <EmailTable onEditClick={handleEditClick} canUpdate={canUpdate} />
162
- {isModalOpen && (
163
- <EmailForm
164
- template={data[templateToEdit]}
165
- onToggle={handleToggle}
166
- onSubmit={handleSubmit}
167
- />
168
- )}
169
- </ContentLayout>
170
- </Main>
137
+ <EmailForm
138
+ template={data[templateToEdit]}
139
+ onToggle={handleToggle}
140
+ open={isModalOpen}
141
+ onSubmit={handleSubmit}
142
+ />
143
+ </Layouts.Content>
144
+ </Page.Main>
171
145
  );
172
146
  };
173
147
 
174
- export default ProtectedEmailTemplatesPage;
148
+ export { ProtectedEmailTemplatesPage, EmailTemplatesPage };
@@ -1,4 +1,4 @@
1
- import { translatedErrors } from '@strapi/helper-plugin';
1
+ import { translatedErrors } from '@strapi/strapi/admin';
2
2
  import * as yup from 'yup';
3
3
 
4
4
  const schema = yup.object().shape({
@@ -8,15 +8,27 @@ const schema = yup.object().shape({
8
8
  from: yup
9
9
  .object()
10
10
  .shape({
11
- name: yup.string().required(translatedErrors.required),
12
- email: yup.string().email(translatedErrors.email).required(translatedErrors.required),
11
+ name: yup.string().required({
12
+ id: translatedErrors.required.id,
13
+ defaultMessage: 'This field is required',
14
+ }),
15
+ email: yup.string().email(translatedErrors.email).required({
16
+ id: translatedErrors.required.id,
17
+ defaultMessage: 'This field is required',
18
+ }),
13
19
  })
14
20
  .required(),
15
21
  response_email: yup.string().email(translatedErrors.email),
16
- object: yup.string().required(translatedErrors.required),
17
- message: yup.string().required(translatedErrors.required),
22
+ object: yup.string().required({
23
+ id: translatedErrors.required.id,
24
+ defaultMessage: 'This field is required',
25
+ }),
26
+ message: yup.string().required({
27
+ id: translatedErrors.required.id,
28
+ defaultMessage: 'This field is required',
29
+ }),
18
30
  })
19
- .required(translatedErrors.required),
31
+ .required(translatedErrors.required.id),
20
32
  });
21
33
 
22
34
  export default schema;