@strapi/admin 4.10.0-beta.0 → 4.10.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.
Files changed (229) hide show
  1. package/.eslintignore +4 -0
  2. package/.eslintrc.js +14 -0
  3. package/admin/src/components/LanguageProvider/index.js +1 -1
  4. package/admin/src/components/LocalesProvider/__mocks__/useLocalesProvider.js +7 -0
  5. package/admin/src/components/LocalesProvider/index.js +2 -3
  6. package/admin/src/content-manager/components/CollectionTypeFormWrapper/index.js +3 -6
  7. package/admin/src/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/getTableColumn.js +2 -0
  8. package/admin/src/content-manager/components/DynamicTable/index.js +11 -29
  9. package/admin/src/content-manager/components/EditViewDataManagerProvider/reducer.js +12 -6
  10. package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/findAllAndReplace.js +10 -3
  11. package/admin/src/content-manager/components/InputUID/endActionStyle.js +4 -13
  12. package/admin/src/content-manager/components/InputUID/index.js +95 -72
  13. package/admin/src/content-manager/components/RepeatableComponent/components/Component.js +8 -2
  14. package/admin/src/content-manager/components/SingleTypeFormWrapper/index.js +4 -8
  15. package/admin/src/content-manager/pages/App/LeftMenu/index.js +56 -35
  16. package/admin/src/content-manager/pages/App/actions.js +19 -7
  17. package/admin/src/content-manager/pages/App/constants.js +3 -3
  18. package/admin/src/content-manager/pages/App/index.js +5 -4
  19. package/admin/src/content-manager/pages/App/reducer.js +7 -6
  20. package/admin/src/content-manager/pages/App/selectors.js +3 -0
  21. package/admin/src/content-manager/pages/App/{useModels.js → useContentManagerInitData.js} +29 -28
  22. package/admin/src/content-manager/pages/App/utils/generateModelsLinks.js +2 -2
  23. package/admin/src/content-manager/pages/App/utils/getContentTypeLinks.js +17 -15
  24. package/admin/src/content-manager/pages/EditSettingsView/components/ModalForm.js +6 -5
  25. package/admin/src/content-manager/pages/EditSettingsView/index.js +4 -0
  26. package/admin/src/content-manager/pages/EditSettingsView/reducer.js +12 -7
  27. package/admin/src/content-manager/pages/EditSettingsView/utils/layout.js +1 -30
  28. package/admin/src/content-manager/pages/EditView/DeleteLink/index.js +5 -11
  29. package/admin/src/content-manager/pages/EditView/index.js +2 -7
  30. package/admin/src/content-manager/pages/EditViewLayoutManager/reducer.js +4 -4
  31. package/admin/src/content-manager/pages/ListSettingsView/index.js +1 -0
  32. package/admin/src/hooks/useConfigurations/__mocks__/index.js +7 -0
  33. package/admin/src/hooks/useFetchMarketplacePlugins/utils/api.js +7 -8
  34. package/admin/src/hooks/useFetchMarketplaceProviders/utils/api.js +5 -0
  35. package/admin/src/hooks/useFetchPermissionsLayout/index.js +24 -15
  36. package/admin/src/hooks/useFetchRole/index.js +37 -30
  37. package/admin/src/hooks/useModels/index.js +22 -12
  38. package/admin/src/hooks/useRegenerate/index.js +12 -7
  39. package/admin/src/hooks/useSettingsForm/index.js +14 -6
  40. package/admin/src/pages/App/index.js +19 -24
  41. package/admin/src/pages/AuthPage/components/Register/index.js +46 -38
  42. package/admin/src/pages/HomePage/SocialLinks.js +1 -1
  43. package/admin/src/pages/MarketplacePage/components/EmptyNpmPackageSearch/index.js +3 -3
  44. package/admin/src/pages/MarketplacePage/components/NpmPackagesGrid/index.js +42 -9
  45. package/admin/src/pages/MarketplacePage/components/NpmPackagesPagination/index.js +26 -0
  46. package/admin/src/pages/MarketplacePage/components/OfflineLayout/index.js +45 -0
  47. package/admin/src/pages/MarketplacePage/index.js +80 -175
  48. package/admin/src/pages/MarketplacePage/utils/useMarketplaceData.js +85 -0
  49. package/admin/src/pages/SettingsPage/components/Tokens/FormHead/index.js +4 -0
  50. package/admin/src/pages/SettingsPage/components/Tokens/Regenerate/index.js +5 -3
  51. package/admin/src/pages/SettingsPage/components/Tokens/TokenTypeSelect/index.js +7 -5
  52. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoModalStepper/PendingLogoDialog.js +1 -3
  53. package/admin/src/pages/SettingsPage/pages/Roles/CreatePage/index.js +6 -12
  54. package/admin/src/pages/SettingsPage/pages/Roles/EditPage/index.js +6 -10
  55. package/admin/src/pages/SettingsPage/pages/Roles/ListPage/components/RoleRow/index.js +12 -4
  56. package/admin/src/pages/SettingsPage/pages/Roles/ListPage/index.js +21 -2
  57. package/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/components/FormTransferTokenContainer/index.js +41 -0
  58. package/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/index.js +53 -9
  59. package/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/utils/schema.js +1 -0
  60. package/admin/src/pages/SettingsPage/pages/TransferTokens/ListView/index.js +27 -5
  61. package/admin/src/pages/SettingsPage/pages/Webhooks/EditView/index.js +18 -33
  62. package/admin/src/pages/SettingsPage/pages/Webhooks/ListView/index.js +41 -41
  63. package/admin/src/translations/en.json +52 -50
  64. package/admin/src/translations/fr.json +89 -1
  65. package/admin/src/translations/ru.json +51 -19
  66. package/build/1387.84b454d3.chunk.js +1 -0
  67. package/build/1657.45231968.chunk.js +168 -0
  68. package/build/3081.bcf9a12f.chunk.js +108 -0
  69. package/build/462.8fff7f3b.chunk.js +71 -0
  70. package/build/4628.20631dd1.chunk.js +1 -0
  71. package/build/5542.b8240e3f.chunk.js +70 -0
  72. package/build/5563.905daa13.chunk.js +79 -0
  73. package/build/6404.68405699.chunk.js +100 -0
  74. package/build/7259.b7d00cea.chunk.js +1 -0
  75. package/build/8694.6522968d.chunk.js +247 -0
  76. package/build/Admin-authenticatedApp.b036fe95.chunk.js +79 -0
  77. package/build/Admin_InternalErrorPage.15c6bf07.chunk.js +1 -0
  78. package/build/Admin_homePage.f9309c6d.chunk.js +73 -0
  79. package/build/Admin_marketplace.56bc1008.chunk.js +31 -0
  80. package/build/Admin_pluginsPage.f6b52ee9.chunk.js +6 -0
  81. package/build/Admin_profilePage.9112cffc.chunk.js +15 -0
  82. package/build/Admin_settingsPage.4604a16c.chunk.js +79 -0
  83. package/build/Upload_ConfigureTheView.eaaec495.chunk.js +1 -0
  84. package/build/admin-app.014adc27.chunk.js +110 -0
  85. package/build/admin-edit-roles-page.8a4063f7.chunk.js +280 -0
  86. package/build/admin-edit-users.7e14d85f.chunk.js +10 -0
  87. package/build/admin-roles-list.329c1f63.chunk.js +31 -0
  88. package/build/admin-users.d02de059.chunk.js +34 -0
  89. package/build/api-tokens-create-page.97595e12.chunk.js +1 -0
  90. package/build/api-tokens-edit-page.cd36e30e.chunk.js +1 -0
  91. package/build/api-tokens-list-page.6757c7b9.chunk.js +16 -0
  92. package/build/audit-logs-settings-page.19d90bda.chunk.js +76 -0
  93. package/build/content-manager.84f81966.chunk.js +1130 -0
  94. package/build/content-type-builder-list-view.9c2c020c.chunk.js +214 -0
  95. package/build/{content-type-builder-translation-de-json.0979cccb.chunk.js → content-type-builder-translation-de-json.393a76c0.chunk.js} +1 -1
  96. package/build/{content-type-builder-translation-dk-json.e05583e9.chunk.js → content-type-builder-translation-dk-json.fbd39bb7.chunk.js} +1 -1
  97. package/build/content-type-builder-translation-en-json.446b611d.chunk.js +1 -0
  98. package/build/{content-type-builder-translation-es-json.fe4daad8.chunk.js → content-type-builder-translation-es-json.9288474b.chunk.js} +1 -1
  99. package/build/{content-type-builder-translation-fr-json.b1eb52f6.chunk.js → content-type-builder-translation-fr-json.d35e269c.chunk.js} +1 -1
  100. package/build/{content-type-builder-translation-id-json.ee3b36bb.chunk.js → content-type-builder-translation-id-json.f0513929.chunk.js} +1 -1
  101. package/build/{content-type-builder-translation-it-json.13b3c26a.chunk.js → content-type-builder-translation-it-json.aaf16753.chunk.js} +1 -1
  102. package/build/{content-type-builder-translation-ko-json.8a274be5.chunk.js → content-type-builder-translation-ko-json.8fe21a7f.chunk.js} +1 -1
  103. package/build/{content-type-builder-translation-ms-json.2d29c1e0.chunk.js → content-type-builder-translation-ms-json.3b5d2d3e.chunk.js} +1 -1
  104. package/build/{content-type-builder-translation-nl-json.40bbc562.chunk.js → content-type-builder-translation-nl-json.225ef5d3.chunk.js} +1 -1
  105. package/build/{content-type-builder-translation-pl-json.24a34349.chunk.js → content-type-builder-translation-pl-json.92f36be2.chunk.js} +1 -1
  106. package/build/{content-type-builder-translation-pt-BR-json.97f71a9d.chunk.js → content-type-builder-translation-pt-BR-json.3bd10f89.chunk.js} +1 -1
  107. package/build/{content-type-builder-translation-ru-json.54d11230.chunk.js → content-type-builder-translation-ru-json.9bfe47ce.chunk.js} +1 -1
  108. package/build/{content-type-builder-translation-sk-json.626c9493.chunk.js → content-type-builder-translation-sk-json.d03cc18a.chunk.js} +1 -1
  109. package/build/{content-type-builder-translation-sv-json.59f5e1e5.chunk.js → content-type-builder-translation-sv-json.d23dcd32.chunk.js} +1 -1
  110. package/build/{content-type-builder-translation-th-json.6fe3ed55.chunk.js → content-type-builder-translation-th-json.7ad256e2.chunk.js} +1 -1
  111. package/build/{content-type-builder-translation-tr-json.cea4d226.chunk.js → content-type-builder-translation-tr-json.926f6191.chunk.js} +1 -1
  112. package/build/{content-type-builder-translation-uk-json.c4524247.chunk.js → content-type-builder-translation-uk-json.7bf19546.chunk.js} +1 -1
  113. package/build/{content-type-builder-translation-zh-json.faedd610.chunk.js → content-type-builder-translation-zh-json.ad24dbeb.chunk.js} +1 -1
  114. package/build/content-type-builder.68af11d2.chunk.js +126 -0
  115. package/build/email-settings-page.1095e1ab.chunk.js +10 -0
  116. package/build/en-json.c7fc79af.chunk.js +1 -0
  117. package/build/fr-json.5947cf63.chunk.js +1 -0
  118. package/build/{highlight.js.26ef649f.chunk.js → highlight.js.28a1547e.chunk.js} +2 -2
  119. package/build/i18n-settings-page.d95b32df.chunk.js +60 -0
  120. package/build/index.html +1 -1
  121. package/build/main.841e0dcb.js +2280 -0
  122. package/build/review-workflows-settings.f7890c40.chunk.js +106 -0
  123. package/build/ru-json.e0662702.chunk.js +1 -0
  124. package/build/{runtime~main.5a95bee6.js → runtime~main.965f8af8.js} +1 -1
  125. package/build/sso-settings-page.1dd4886e.chunk.js +1 -0
  126. package/build/transfer-tokens-create-page.ec2ca215.chunk.js +1 -0
  127. package/build/transfer-tokens-edit-page.22bf28e5.chunk.js +1 -0
  128. package/build/transfer-tokens-list-page.cf8c77f2.chunk.js +16 -0
  129. package/build/upload-settings.945fdcfa.chunk.js +13 -0
  130. package/build/{upload-translation-th-json.3847dae0.chunk.js → upload-translation-th-json.98d35574.chunk.js} +1 -1
  131. package/build/upload.a86b1054.chunk.js +33 -0
  132. package/build/users-advanced-settings-page.5b5a9baa.chunk.js +8 -0
  133. package/build/users-email-settings-page.e5506eb4.chunk.js +23 -0
  134. package/build/users-providers-settings-page.e32089c2.chunk.js +28 -0
  135. package/build/users-roles-settings-page.20656f92.chunk.js +30 -0
  136. package/build/webhook-edit-page.a3b62049.chunk.js +75 -0
  137. package/build/webhook-list-page.ca38eeef.chunk.js +71 -0
  138. package/{admin/src/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/ReviewWorkflowsStage.js → ee/admin/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/ReviewWorkflowsStageEE.js} +2 -2
  139. package/ee/admin/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/getTableColumn.js +47 -0
  140. package/ee/admin/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/index.js +3 -0
  141. package/ee/admin/content-manager/pages/EditView/InformationBox/InformationBoxEE.js +64 -18
  142. package/ee/admin/hooks/useAuthProviders/index.js +28 -29
  143. package/ee/admin/hooks/useLicenseLimitNotification/index.js +1 -1
  144. package/ee/admin/pages/AuthResponse/index.js +7 -3
  145. package/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/hooks/useAuditLogsData.js +6 -3
  146. package/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/index.js +15 -5
  147. package/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/utils/getDisplayedFilters.js +52 -45
  148. package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/ReviewWorkflows.js +9 -5
  149. package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/components/Stages/Stage/Stage.js +2 -2
  150. package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/hooks/useReviewWorkflows.js +2 -2
  151. package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/reducer/index.js +2 -1
  152. package/ee/server/content-types/workflow/index.js +0 -3
  153. package/ee/server/content-types/workflow-stage/index.js +0 -5
  154. package/ee/server/controllers/authentication/middlewares.js +2 -1
  155. package/ee/server/controllers/workflows/stages/index.js +8 -1
  156. package/ee/server/register.js +3 -1
  157. package/ee/server/services/audit-logs.js +75 -16
  158. package/ee/server/services/index.js +1 -0
  159. package/ee/server/services/review-workflows/entity-service-decorator.js +17 -5
  160. package/ee/server/services/review-workflows/metrics.js +24 -0
  161. package/ee/server/services/review-workflows/review-workflows.js +44 -94
  162. package/ee/server/services/review-workflows/stages.js +136 -17
  163. package/ee/server/utils/persisted-tables.js +116 -22
  164. package/ee/server/utils/review-workflows.js +9 -0
  165. package/jest.config.front.js +1 -6
  166. package/package.json +25 -23
  167. package/server/controllers/transfer/runner.js +4 -2
  168. package/server/middlewares/data-transfer.js +4 -1
  169. package/server/routes/transfer.js +13 -4
  170. package/server/services/constants.js +4 -0
  171. package/server/services/transfer/permission.js +1 -1
  172. package/server/services/transfer/token.js +33 -31
  173. package/server/strategies/api-token.js +8 -1
  174. package/server/validation/transfer/token.js +10 -2
  175. package/webpack.config.js +6 -2
  176. package/admin/src/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/index.js +0 -1
  177. package/admin/src/content-manager/pages/App/LeftMenu/utils/index.js +0 -1
  178. package/admin/src/content-manager/pages/App/LeftMenu/utils/matchByTitle.js +0 -24
  179. package/build/2263.4c5916f9.chunk.js +0 -98
  180. package/build/4049.64715f20.chunk.js +0 -1
  181. package/build/4649.213b8a3b.chunk.js +0 -30
  182. package/build/6985.66cca29c.chunk.js +0 -1
  183. package/build/7259.aefb51e8.chunk.js +0 -1
  184. package/build/8469.853c822b.chunk.js +0 -1
  185. package/build/9505.dbe702ab.chunk.js +0 -14
  186. package/build/9816.01ee964f.chunk.js +0 -2
  187. package/build/Admin-authenticatedApp.f50ad423.chunk.js +0 -79
  188. package/build/Admin_InternalErrorPage.4ad8b0df.chunk.js +0 -1
  189. package/build/Admin_homePage.1411fb7c.chunk.js +0 -68
  190. package/build/Admin_marketplace.02608d56.chunk.js +0 -22
  191. package/build/Admin_pluginsPage.15e3b0fd.chunk.js +0 -1
  192. package/build/Admin_profilePage.76afeca0.chunk.js +0 -15
  193. package/build/Admin_settingsPage.147755cd.chunk.js +0 -9
  194. package/build/Upload_ConfigureTheView.34dde278.chunk.js +0 -1
  195. package/build/admin-app.55dd7921.chunk.js +0 -112
  196. package/build/admin-edit-roles-page.cf543488.chunk.js +0 -216
  197. package/build/admin-edit-users.31c20712.chunk.js +0 -10
  198. package/build/admin-roles-list.489c501f.chunk.js +0 -2
  199. package/build/admin-users.3e111a7d.chunk.js +0 -11
  200. package/build/api-tokens-create-page.4328b852.chunk.js +0 -1
  201. package/build/api-tokens-edit-page.bce5050f.chunk.js +0 -1
  202. package/build/api-tokens-list-page.93f24348.chunk.js +0 -16
  203. package/build/audit-logs-settings-page.7be97e82.chunk.js +0 -1
  204. package/build/content-manager.4480ae88.chunk.js +0 -1137
  205. package/build/content-type-builder-list-view.cf38fe2f.chunk.js +0 -191
  206. package/build/content-type-builder-translation-en-json.7961593e.chunk.js +0 -1
  207. package/build/content-type-builder.af9abf1e.chunk.js +0 -126
  208. package/build/email-settings-page.4bdbef9a.chunk.js +0 -3
  209. package/build/en-json.697b4bcf.chunk.js +0 -1
  210. package/build/fr-json.f66c3211.chunk.js +0 -1
  211. package/build/i18n-settings-page.2bb5be96.chunk.js +0 -1
  212. package/build/main.af8c0f31.js +0 -3790
  213. package/build/review-workflows-settings.7a7dc773.chunk.js +0 -57
  214. package/build/ru-json.6a01cea6.chunk.js +0 -1
  215. package/build/sso-settings-page.272b87c8.chunk.js +0 -1
  216. package/build/transfer-tokens-create-page.a1f14bb1.chunk.js +0 -1
  217. package/build/transfer-tokens-edit-page.00ee1c74.chunk.js +0 -1
  218. package/build/transfer-tokens-list-page.ce37354b.chunk.js +0 -16
  219. package/build/upload-settings.0875e973.chunk.js +0 -1
  220. package/build/upload.c7da1611.chunk.js +0 -13
  221. package/build/users-advanced-settings-page.1d3c14c7.chunk.js +0 -1
  222. package/build/users-email-settings-page.e8db68c4.chunk.js +0 -1
  223. package/build/users-providers-settings-page.14cac425.chunk.js +0 -1
  224. package/build/users-roles-settings-page.2ea4de84.chunk.js +0 -30
  225. package/build/webhook-edit-page.329141a5.chunk.js +0 -23
  226. package/build/webhook-list-page.029957a4.chunk.js +0 -1
  227. package/ee/server/migrations/review-workflows.js +0 -39
  228. package/ee/server/utils/test.js +0 -11
  229. /package/admin/src/{content-manager/components/InputUID/useDebounce.js → hooks/useDebounce/index.js} +0 -0
@@ -0,0 +1,75 @@
1
+ "use strict";(self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[]).push([[5162],{47272:function(ne,S,t){t.d(S,{Z:function(){return Se}});var e=t(32735),d=t(43383),L=t(27649),o=t(20108),O=t(53038),D=t(67927),J=t(60216),s=t.n(J),g=t(2438),m=t(66456),N=t(29439),Oe=t(82055),b=t(87933),he=t(41415),ke=t(17e3),ae=t(72850),le=t(15335),V=t(5803),ie=t(10369),Z=t(92802),j=t(67879),Ee=t(28847),W=t(49372),de=t(8471),ve=t(8284),Le=t(44426),Q=t(23940),ce=t.n(Q);const i=({disabledEvents:n,name:r,events:a,inputValue:l,handleChange:p,handleChangeAll:I})=>{const u=a.filter(E=>!n.includes(E)),f=l.length===u.length,C=l.length>0,y=({target:{name:E}})=>{I({target:{name:E,value:!f}})};return e.createElement("tr",null,e.createElement("td",null,e.createElement(ve.X,{indeterminate:C&&!f,"aria-label":"Select all entries",name:r,onChange:y,value:f},ce()(r))),a.map(E=>e.createElement("td",{key:E},e.createElement(Le.C,{disabled:n.includes(E),"aria-label":E,name:E,value:l.includes(E),onValueChange:M=>p({target:{name:E,value:M}})}))))};i.defaultProps={disabledEvents:[],events:[],inputValue:[],handleChange(){},handleChangeAll(){}},i.propTypes={disabledEvents:s().array,events:s().array,inputValue:s().array,handleChange:s().func,handleChangeAll:s().func,name:s().string.isRequired};var A=i,X=n=>n.reduce((r,a)=>{const l=a.split(".")[0];return r[l]||(r[l]=[]),r[l].push(a),r},{});const R=de.ZP.table`
2
+ td {
3
+ height: ${52/16}rem;
4
+ width: 10%;
5
+ vertical-align: middle;
6
+ text-align: center;
7
+ }
8
+
9
+ tbody tr:nth-child(odd) {
10
+ background: ${({theme:n})=>n.colors.neutral100};
11
+ }
12
+
13
+ tbody tr td:first-child {
14
+ padding-left: ${({theme:n})=>n.spaces[7]};
15
+ }
16
+ `,H={headers:{default:[{id:"Settings.webhooks.events.create",defaultMessage:"Create"},{id:"Settings.webhooks.events.update",defaultMessage:"Update"},{id:"app.utils.delete",defaultMessage:"Delete"}],draftAndPublish:[{id:"Settings.webhooks.events.create",defaultMessage:"Create"},{id:"Settings.webhooks.events.update",defaultMessage:"Update"},{id:"app.utils.delete",defaultMessage:"Delete"},{id:"app.utils.publish",defaultMessage:"Publish"},{id:"app.utils.unpublish",defaultMessage:"Unpublish"}]},events:{default:{entry:["entry.create","entry.update","entry.delete"],media:["media.create","media.update","media.delete"]},draftAndPublish:{entry:["entry.create","entry.update","entry.delete","entry.publish","entry.unpublish"],media:["media.create","media.update","media.delete"]}}},be=({isDraftAndPublish:n})=>{const r=n?H.headers.draftAndPublish:H.headers.default,a=n?H.events.draftAndPublish:H.events.default,{formatMessage:l}=(0,j.Z)(),{values:p,handleChange:I}=(0,Z.u6)(),u="events",f=p.events,C=[],y=X(f),E=({target:{name:h,value:T}})=>{let F=new Set(f);T?F.add(h):F.delete(h),I({target:{name:u,value:Array.from(F)}})},M=({target:{name:h,value:T}})=>{let F=new Set(f);T?a[h].forEach(G=>{C.includes(G)||F.add(G)}):a[h].forEach(G=>F.delete(G)),I({target:{name:u,value:Array.from(F)}})};return e.createElement(b.k,{direction:"column",alignItems:"stretch",gap:1},e.createElement(Ee.Q,null,l({id:"Settings.webhooks.form.events",defaultMessage:"Events"})),e.createElement(R,null,e.createElement("thead",null,e.createElement("tr",null,e.createElement("td",null),r.map(h=>h==="app.utils.publish"||h==="app.utils.unpublish"?e.createElement("td",{key:h.id,title:l({id:"Settings.webhooks.event.publish-tooltip",defaultMessage:"This event only exists for content with draft & publish enabled"})},e.createElement(W.Z,{variant:"sigma",textColor:"neutral600"},l(h))):e.createElement("td",{key:h.id},e.createElement(W.Z,{variant:"sigma",textColor:"neutral600"},l(h)))))),e.createElement("tbody",null,Object.keys(a).map(h=>e.createElement(A,{disabledEvents:C,key:h,name:h,events:a[h],inputValue:y[h],handleChange:E,handleChangeAll:M})))))};be.propTypes={isDraftAndPublish:s().bool.isRequired};var ue=be,Re=t(19406),Y=t(7563),Te=t(42623),ge=t(90333),Ce=["A-IM","Accept","Accept-Charset","Accept-Encoding","Accept-Language","Accept-Datetime","Access-Control-Request-Method","Access-Control-Request-Headers","Authorization","Cache-Control","Connection","Content-Length","Content-Type","Cookie","Date","Expect","Forwarded","From","Host","If-Match","If-Modified-Since","If-None-Match","If-Range","If-Unmodified-Since","Max-Forwards","Origin","Pragma","Proxy-Authorization","Range","Referer","TE","User-Agent","Upgrade","Via","Warning"];const re=({name:n,onChange:r,value:a,...l})=>{const[p,I]=(0,e.useState)(a?[...Ce,a]:Ce),u=C=>{r({target:{name:n,value:C}})},f=C=>{I(y=>[...y,C]),r({target:{name:n,value:C}})};return e.createElement(Te.X,{...l,onChange:u,onCreateOption:f,placeholder:"",value:a},p.map(C=>e.createElement(ge.O,{value:C,key:C},C)))};re.defaultProps={value:void 0},re.propTypes={name:s().string.isRequired,onChange:s().func.isRequired,value:s().string};var ye=re,Me=()=>{const{formatMessage:n}=(0,j.Z)(),{values:r,errors:a}=(0,Z.u6)();return e.createElement(b.k,{direction:"column",alignItems:"stretch",gap:1},e.createElement(Ee.Q,null,n({id:"Settings.webhooks.form.headers",defaultMessage:"Headers"})),e.createElement(ae.x,{padding:8,background:"neutral100",hasRadius:!0},e.createElement(Z.F2,{validateOnChange:!1,name:"headers",render:({push:l,remove:p})=>e.createElement(le.r,{gap:4},r.headers?.map((I,u)=>e.createElement(e.Fragment,{key:u},e.createElement(V.P,{col:6},e.createElement(Z.gN,{as:ye,name:`headers.${u}.key`,"aria-label":`row ${u+1} key`,label:n({id:"Settings.webhooks.key",defaultMessage:"Key"}),error:a.headers?.[u]?.key&&n({id:a.headers[u]?.key,defaultMessage:a.headers[u]?.key})})),e.createElement(V.P,{col:6},e.createElement(b.k,{alignItems:"flex-end"},e.createElement(ae.x,{style:{flex:1}},e.createElement(Z.gN,{as:ie.o,"aria-label":`row ${u+1} value`,label:n({id:"Settings.webhooks.value",defaultMessage:"Value"}),name:`headers.${u}.value`,error:a.headers?.[u]?.value&&n({id:a.headers[u]?.value,defaultMessage:a.headers[u]?.value})})),e.createElement(b.k,{paddingLeft:2,style:{alignSelf:"center"},paddingTop:a.headers?.[u]?.value?0:5},e.createElement(d.fG,{onClick:()=>r.headers.length!==1&&p(u),label:n({id:"Settings.webhooks.headers.remove",defaultMessage:"Remove header row {number}"},{number:u+1})})))))),e.createElement(V.P,{col:12},e.createElement(Y.A,{type:"button",onClick:()=>{l({key:"",value:""})},startIcon:e.createElement(Re.Z,null)},n({id:"Settings.webhooks.create.header",defaultMessage:"Create new header"}))))})))},Ae=t(27169),Pe=t(35331);const q=de.ZP.svg(({theme:n,color:r})=>`
17
+ width: ${12/16}rem;
18
+ height: ${12/16}rem;
19
+
20
+ path {
21
+ fill: ${n.colors[r]};
22
+ }
23
+ `),B=({isPending:n,statusCode:r})=>{const{formatMessage:a}=(0,j.Z)();return n?e.createElement(b.k,{gap:2,alignItems:"center"},e.createElement(q,{as:Ae.Z}),e.createElement(W.Z,null,a({id:"Settings.webhooks.trigger.pending",defaultMessage:"pending"}))):r>=200&&r<300?e.createElement(b.k,{gap:2,alignItems:"center"},e.createElement(q,{as:m.Z,color:"success700"}),e.createElement(W.Z,null,a({id:"Settings.webhooks.trigger.success",defaultMessage:"success"}))):r>=300?e.createElement(b.k,{gap:2,alignItems:"center"},e.createElement(q,{as:Pe.Z,color:"danger700"}),e.createElement(W.Z,null,a({id:"Settings.error",defaultMessage:"error"})," ",r)):null};B.propTypes={isPending:s().bool.isRequired,statusCode:s().number},B.defaultProps={statusCode:void 0};const me=({statusCode:n,message:r})=>{const{formatMessage:a}=(0,j.Z)();return n>=200&&n<300?e.createElement(b.k,{justifyContent:"flex-end"},e.createElement(W.Z,{textColor:"neutral600",ellipsis:!0},a({id:"Settings.webhooks.trigger.success.label",defaultMessage:"Trigger succeeded"}))):n>=300?e.createElement(b.k,{justifyContent:"flex-end"},e.createElement(b.k,{maxWidth:(0,d.Q1)(250),justifyContent:"flex-end",title:r},e.createElement(W.Z,{ellipsis:!0,textColor:"neutral600"},r))):null};me.propTypes={statusCode:s().number,message:s().string},me.defaultProps={statusCode:void 0,message:void 0};const xe=({onCancel:n})=>{const{formatMessage:r}=(0,j.Z)();return e.createElement(b.k,{justifyContent:"flex-end"},e.createElement("button",{onClick:n,type:"button"},e.createElement(b.k,{gap:2,alignItems:"center"},e.createElement(W.Z,{textColor:"neutral400"},r({id:"Settings.webhooks.trigger.cancel",defaultMessage:"cancel"})),e.createElement(q,{as:Pe.Z,color:"neutral400"}))))};xe.propTypes={onCancel:s().func.isRequired};const x=({isPending:n,onCancel:r,response:a})=>{const{statusCode:l,message:p}=a,{formatMessage:I}=(0,j.Z)();return e.createElement(ae.x,{background:"neutral0",padding:5,shadow:"filterShadow",hasRadius:!0},e.createElement(le.r,{gap:4,style:{alignItems:"center"}},e.createElement(V.P,{col:3},e.createElement(W.Z,null,I({id:"Settings.webhooks.trigger.test",defaultMessage:"Test-trigger"}))),e.createElement(V.P,{col:3},e.createElement(B,{isPending:n,statusCode:l})),e.createElement(V.P,{col:6},n?e.createElement(xe,{onCancel:r}):e.createElement(me,{statusCode:l,message:p}))))};x.defaultProps={isPending:!1,onCancel(){},response:{}},x.propTypes={isPending:s().bool,onCancel:s().func,response:s().object};var Ie=x,w=t(24346);const De=/(^$)|(^[A-Za-z][_0-9A-Za-z ]*$)/,U=/(^$)|((https?:\/\/.*)(d*)\/?(.*))/;var z=w.Ry().shape({name:w.Z_(d.I0.string).required(d.I0.required).matches(De,d.I0.regex),url:w.Z_(d.I0.string).required(d.I0.required).matches(U,d.I0.regex),headers:w.Vo(n=>{let r=w.IX();if(n.length===1){const{key:a,value:l}=n[0];if(!a&&!l)return r}return r.of(w.Ry().shape({key:w.Z_().required(d.I0.required),value:w.Z_().required(d.I0.required)}))}),events:w.IX()});const pe=({handleSubmit:n,data:r,triggerWebhook:a,isCreating:l,isTriggering:p,triggerResponse:I,isDraftAndPublishEvents:u})=>{const{formatMessage:f}=(0,j.Z)(),[C,y]=(0,e.useState)(!1);return e.createElement(Z.J9,{onSubmit:n,initialValues:{name:r?.name||"",url:r?.url||"",headers:Object.keys(r?.headers||[]).length?Object.entries(r.headers).map(([E,M])=>({key:E,value:M})):[{key:"",value:""}],events:r?.events||[]},validationSchema:z,validateOnChange:!1,validateOnBlur:!1},({handleSubmit:E,errors:M})=>e.createElement(d.l0,{noValidate:!0},e.createElement(Oe.T,{primaryAction:e.createElement(b.k,{gap:2},e.createElement(he.z,{onClick:()=>{a(),y(!0)},variant:"tertiary",startIcon:e.createElement(g.Z,null),disabled:l||p,size:"L"},f({id:"Settings.webhooks.trigger",defaultMessage:"Trigger"})),e.createElement(he.z,{startIcon:e.createElement(m.Z,null),onClick:E,type:"submit",size:"L"},f({id:"global.save",defaultMessage:"Save"}))),title:l?f({id:"Settings.webhooks.create",defaultMessage:"Create a webhook"}):r?.name,navigationAction:e.createElement(d.rU,{startIcon:e.createElement(N.Z,null),to:"/settings/webhooks"},f({id:"global.back",defaultMessage:"Back"}))}),e.createElement(ke.D,null,e.createElement(b.k,{direction:"column",alignItems:"stretch",gap:4},C&&e.createElement("div",{className:"trigger-wrapper"},e.createElement(Ie,{isPending:p,response:I,onCancel:()=>y(!1)})),e.createElement(ae.x,{background:"neutral0",padding:8,shadow:"filterShadow",hasRadius:!0},e.createElement(b.k,{direction:"column",alignItems:"stretch",gap:6},e.createElement(le.r,{gap:6},e.createElement(V.P,{col:6},e.createElement(Z.gN,{as:ie.o,name:"name",error:M.name&&f({id:M.name}),label:f({id:"global.name",defaultMessage:"Name"}),required:!0})),e.createElement(V.P,{col:12},e.createElement(Z.gN,{as:ie.o,name:"url",error:M.url&&f({id:M.url}),label:f({id:"Settings.roles.form.input.url",defaultMessage:"Url"}),required:!0}))),e.createElement(Me,null),e.createElement(ue,{isDraftAndPublish:u})))))))};pe.propTypes={data:s().object,handleSubmit:s().func.isRequired,triggerWebhook:s().func.isRequired,isCreating:s().bool.isRequired,isDraftAndPublishEvents:s().bool.isRequired,isTriggering:s().bool.isRequired,triggerResponse:s().object},pe.defaultProps={data:void 0,triggerResponse:void 0};var k=pe;const oe=n=>({...n,headers:_(n.headers)}),_=n=>n.reduce((r,a)=>{const{key:l,value:p}=a;return l!==""?{...r,[l]:p}:r},{});var ee=oe,Se=()=>{const{params:{id:n}}=(0,O.$B)("/settings/webhooks/:id"),{replace:r}=(0,O.k6)(),{lockApp:a,unlockApp:l}=(0,d.o1)(),p=(0,d.lm)(),I=(0,o.useQueryClient)(),{isLoading:u,collectionTypes:f}=(0,D.bP)(),{put:C,get:y,post:E}=(0,d.kY)(),M=n==="create",{isLoading:h,data:T}=(0,o.useQuery)(["get-webhook",n],async()=>{try{const{data:{data:P}}=await y(`/admin/webhooks/${n}`);return P}catch{return p({type:"warning",message:{id:"notification.error"}}),null}},{enabled:!M}),{isLoading:F,data:G,isIdle:$e,mutate:Be}=(0,o.useMutation)(()=>E(`/admin/webhooks/${n}/trigger`)),Ue=()=>Be(null,{onError(){p({type:"warning",message:{id:"notification.error"}})}}),fe=(0,o.useMutation)(P=>E("/admin/webhooks",P)),c=(0,o.useMutation)(({id:P,body:te})=>C(`/admin/webhooks/${P}`,te)),v=async P=>{M?(a(),fe.mutate(ee(P),{onSuccess({data:te}){p({type:"success",message:{id:"Settings.webhooks.created"}}),r(`/settings/webhooks/${te.data.id}`),l()},onError(te){p({type:"warning",message:{id:"notification.error"}}),console.log(te),l()}})):(a(),c.mutate({id:n,body:ee(P)},{onSuccess(){I.invalidateQueries(["get-webhook",n]),p({type:"success",message:{id:"notification.form.success.fields"}}),l()},onError(te){p({type:"warning",message:{id:"notification.error"}}),console.log(te),l()}}))},K=e.useMemo(()=>f.some(P=>P.options.draftAndPublish===!0),[f]);return h||u?e.createElement(d.dO,null):e.createElement(L.o,null,e.createElement(d.SL,{name:"Webhooks"}),e.createElement(k,{handleSubmit:v,data:T,triggerWebhook:Ue,isCreating:M,isTriggering:F,isTriggerIdle:$e,triggerResponse:G?.data.data,isDraftAndPublishEvents:K}))}},33238:function(ne,S,t){t.r(S);var e=t(32735),d=t(43383),L=t(83983),o=t(47272);const O=()=>e.createElement(d.O4,{permissions:L.Z.settings.webhooks.create},e.createElement(o.Z,null));S.default=O},59021:function(ne,S,t){t.r(S);var e=t(32735),d=t(43383),L=t(83983),o=t(47272);const O=()=>e.createElement(d.O4,{permissions:L.Z.settings.webhooks.update},e.createElement(o.Z,null));S.default=O},42623:function(ne,S,t){t.d(S,{h:function(){return Q},X:function(){return ce}});var e=t(32735),d=t(35331),L=t(16899),o=t(60216),O=t(90333),D=t(91225),J=t(17289),s=t(94486);const g={Close:"Close",CloseSelect:"CloseSelect",First:"First",Last:"Last",Next:"Next",Open:"Open",PageDown:"PageDown",PageUp:"PageUp",Previous:"Previous",Select:"Select",Space:"Space",Type:"Type"},m={Close:"Close",First:"First",Last:"Last",Next:"Next",Open:"Open",Previous:"Previous",Select:"Select",UpLevel:"UpLevel"};function N(i=[],A=null,$=[]){const X=String(A??"").toLowerCase();return X?i.filter(R=>R.props.children.toString().toLowerCase().includes(X)&&$.indexOf(R)<0):i}function Oe(i,A){if(!A&&i===s.y.DOWN)return g.Open;if(i===s.y.DOWN)return g.Next;if(i===s.y.UP)return g.Previous;if(i===s.y.HOME)return g.First;if(i===s.y.END)return g.Last;if(i===s.y.ESCAPE)return g.Close;if(i===s.y.ENTER)return g.CloseSelect;if(i===s.y.BACKSPACE||i===s.y.CLEAR||i.length===1)return g.Type}function b(i,A,$){switch($){case g.First:return 0;case g.Last:return A;case g.Previous:return Math.max(0,i-1);case g.Next:return Math.min(A,i+1);default:return i}}function he(i){(0,J.Z)(i,{scrollMode:"if-needed",block:"nearest",inline:"nearest"}).forEach(({el:A,top:$,left:X})=>{A.scrollTop=$,A.scrollLeft=X})}var ke=t(72850),ae=t(87107),le=t(28847),V=t(67014),ie=t(47851),Z=t(87933),j=t(74971),Ee=t(97405),W=t(4101),de=t(93958),ve=t(49372),Le=t(3685);const Q=({children:i,clearLabel:A,creatable:$,createMessage:X,disabled:R,error:H,hasMoreItems:be,hint:ue,id:Re,label:Y,labelAction:Te,loading:ge,loadingMessage:We,noOptionsMessage:Ce,onChange:re,onClear:ye,onCreateOption:we,onInputChange:Me,onLoadMore:Ae,placeholder:Pe,required:q,value:B,...me})=>{const xe=()=>i.find(c=>c.props?.value.toLowerCase()===B.toLowerCase()).props?.children,[x,Ie]=(0,e.useState)(0),[w,De]=(0,e.useState)(null),[U,Ze]=(0,e.useState)(i),[z,pe]=(0,e.useState)(!1),[k,oe]=(0,e.useState)(""),_=(0,e.useRef)(),ee=(0,e.useRef)(!1),se=(0,e.useRef)(),Se=(0,e.useRef)(),n=(0,e.useRef)(),r=(0,e.useRef)(!0),a=(0,j.M)(Re),l=`${a}-label`;if(!Y&&!me["aria-label"])throw new Error('The Combobox component needs a "label" or an "aria-label" props');(0,e.useEffect)(()=>{Ze(N(i,k))},[k,i]),(0,e.useEffect)(()=>{z&&_.current&&he(_.current)},[x,z]),(0,e.useLayoutEffect)(()=>{r.current&&(r.current=!1)},[B]);const p=z?`${a}-${x}`:"",I=()=>{re(null),oe("")},u=c=>{Me&&Me(c);const v=se.current.value;Ze(N(i,v)),Ie(0),De(null),k!==v&&oe(v),z||T(!0,!1)},f=c=>{const{key:v}=c,K=$&&k?U.length:U.length-1,P=Oe(v,z);switch(B&&!k&&v===s.y.BACKSPACE&&I(),P){case g.Next:{if(x===K){y(0);break}y(b(x,K,P));break}case g.Previous:{if(x===0){y(K);break}y(b(x,K,P));break}case g.Last:case g.First:{if(x===K){y(0);break}y(b(x,K,P));break}case g.CloseSelect:c.preventDefault(),h(x);break;case g.Close:c.preventDefault(),T(!1);break;case g.Open:T(!0);break}},C=c=>{if(c.preventDefault(),B&&!ee.current&&oe(""),ee.current){ee.current=!1;return}T(!1,!1)},y=c=>{Ie(c)},E=c=>{y(c),h(c)},M=()=>{ee.current=!0},h=c=>{const v=U[c];if(oe(""),v){re(v.props.value),T(!1);return}$&&(we(k),T(!1))},T=(c,v=!0)=>{pe(c),v&&se.current.focus()},F=e.Children.toArray(U).map((c,v)=>{const K=x===v;return(0,e.cloneElement)(c,{id:`${a}-${v}`,"aria-selected":w===v,"aria-posinset":v+1,"aria-setsize":e.Children.toArray(U).length,ref(P){K&&(_.current=P)},onClick:()=>E(v),onMouseDown:M,isSelected:K})}),G=()=>{se.current.focus(),ye&&ye(),I()},$e=()=>{se.current.focus(),T(!0)},Be=()=>{const c=U.findIndex(v=>v.props?.children===k);return k&&c===-1},Ue=c=>{c.preventDefault(),T(c,!0)};let fe;return H?fe=`${a}-error`:ue&&(fe=`${a}-hint`),e.createElement(ae.g,{hint:ue,error:H,id:a,required:q},e.createElement(Le.T,{"aria-live":"polite","aria-atomic":"false","aria-relevant":"additions text"},B),e.createElement(Z.k,{direction:"column",alignItems:"stretch",gap:Y||ue||H?1:0},Y&&e.createElement(le.Q,{action:Te},Y),e.createElement(D.d8,{ref:Se,$disabled:R,hasError:H},e.createElement(D.fv,{wrap:"wrap"},!k&&B&&e.createElement(D.K7,{id:`${a}-selected-value`},e.createElement(ve.Z,null,xe())),e.createElement(D.II,{"aria-activedescendant":p,"aria-autocomplete":"list","aria-controls":`${a}-listbox`,"aria-disabled":R,"aria-expanded":z,"aria-haspopup":"listbox","aria-describedby":fe,autoComplete:"off",autoCorrect:"off",id:a,onBlur:R?void 0:C,onClick:R?void 0:Ue,onInput:R?void 0:u,onKeyDown:R?void 0:f,placeholder:B?"":Pe,readOnly:R,ref:se,required:q,role:"combobox",spellCheck:"off",type:"text",value:k})),e.createElement(Z.k,null,(B||k)&&e.createElement(de.zb,{id:`${a}-clear`,"aria-label":A,disabled:R,paddingLeft:3,as:"button",onClick:G,type:"button"},e.createElement(d.Z,null)),e.createElement(de.AV,{disabled:R,paddingLeft:3,"aria-hidden":!0,as:"button",onClick:$e,tabIndex:-1,type:"button"},e.createElement(L.Z,null)))),e.createElement(V.J,null),e.createElement(ie.c,null)),z&&e.createElement(W.J2,{id:`${a}-popover`,source:Se,spacing:4,fullWidth:!0,intersectionId:`${a}-listbox-popover-intersection`,onReachEnd:be&&!ge?Ae:void 0},e.createElement("div",{role:"listbox",ref:n,id:`${a}-listbox`,"aria-labelledby":Y?l:void 0},(Boolean(U.length)||$)&&e.createElement(e.Fragment,null,F,Be()&&$&&e.createElement(O.O,{isSelected:x===U.length,ref:c=>{x===U.length&&(_.current=c)},onMouseDown:M,onClick:()=>h(),taindex:0},X(k))),!U.length&&!$&&!ge&&e.createElement(ke.x,{paddingLeft:4,paddingRight:4,paddingTop:2,paddingBottom:2,ref:_},e.createElement(ve.Z,{textColor:"neutral800"},Ce(k))),ge&&e.createElement(Z.k,{justifyContent:"center",alignItems:"center",paddingTop:2,paddingBottom:2},e.createElement(Ee.a,{small:!0},We)))))},ce=i=>e.createElement(Q,{...i,creatable:!0});Q.defaultProps={"aria-label":void 0,clearLabel:"clear",creatable:!1,createMessage:i=>`Create "${i}"`,disabled:!1,error:void 0,hasMoreItems:!1,hint:void 0,id:void 0,label:void 0,loading:!1,loadingMessage:"Loading content...",noOptionsMessage:()=>"No results found",onClear:void 0,onCreateOption:void 0,onInputChange:void 0,onLoadMore:void 0,placeholder:"Select or enter a value",value:void 0},ce.defaultProps=Q.defaultProps,Q.propTypes={"aria-label":o.string,children:o.oneOfType([o.arrayOf(o.node),o.node]),clearLabel:o.string,creatable:o.bool,createMessage:o.func,disabled:o.bool,error:o.string,hasMoreItems:o.bool,id:o.string,hint:o.oneOfType([o.string,o.node,o.arrayOf(o.node)]),label:o.string,labelAction:o.element,loading:o.bool,loadingMessage:o.string,noOptionsMessage:o.func,onChange:o.func.isRequired,onClear:o.func,onCreateOption:o.func,onInputChange:o.func,onLoadMore:o.func,placeholder:o.string,value:o.string},ce.propTypes={...Q.propTypes,onCreateOption:o.func.isRequired}},90333:function(ne,S,t){t.d(S,{O:function(){return O}});var e=t(32735),d=t(60216),L=t(91225),o=t(49372);const O=(0,e.forwardRef)(({isSelected:D,children:J,...s},g)=>e.createElement(L.Zq,{hasRadius:!0,paddingLeft:4,paddingRight:4,paddingTop:2,paddingBottom:2,role:"option",background:"neutral0",isSelected:D,ref:g,...s},e.createElement(o.Z,{textColor:D?"primary600":"neutral800",fontWeight:D?"bold":null},J)));O.defaultProps={isSelected:!1},O.propTypes={children:d.oneOfType([d.string,d.number]).isRequired,isSelected:d.bool},O.displayName="ComboboxOption"},91225:function(ne,S,t){t.d(S,{II:function(){return s},K7:function(){return D},Zq:function(){return g},d8:function(){return O},fv:function(){return J}});var e=t(8471),d=t(72850),L=t(87933),o=t(30350);const O=(0,e.ZP)(L.k)`
24
+ position: relative;
25
+ border: 1px solid ${({theme:m,hasError:N})=>N?m.colors.danger600:m.colors.neutral200};
26
+ padding-right: ${({theme:m})=>m.spaces[3]};
27
+ padding-left: ${({theme:m})=>m.spaces[3]};
28
+ border-radius: ${({theme:m})=>m.borderRadius};
29
+ background: ${({theme:m})=>m.colors.neutral0};
30
+
31
+ ${({theme:m,$disabled:N})=>N?`
32
+ color: ${m.colors.neutral600};
33
+ background: ${m.colors.neutral150};
34
+ `:void 0}
35
+
36
+ ${(0,o.k3)()}
37
+ `,D=e.ZP.div`
38
+ padding: 1px 2px;
39
+ grid-area: 1 / 1 / 2 / 3;
40
+ `,J=(0,e.ZP)(L.k)`
41
+ display: grid;
42
+ flex: 1 1 0%;
43
+ position: relative;
44
+ `,s=e.ZP.input`
45
+ display: inline-grid;
46
+ grid-area: 1 / 1 / 2 / 3;
47
+ grid-template-columns: 0px min-content;
48
+ background: transparent;
49
+ min-height: ${40/16}rem;
50
+ border: none;
51
+ flex: 1;
52
+ font-size: ${14/16}rem;
53
+ color: ${({theme:m})=>m.colors.neutral800};
54
+ outline: none;
55
+ &:focus-visible {
56
+ outline: none;
57
+ box-shadow: none;
58
+ outline-offset: 0;
59
+ }
60
+ &[aria-disabled='true'] {
61
+ background: inherit;
62
+ color: inherit;
63
+ cursor: not-allowed;
64
+ }
65
+ `,g=(0,e.ZP)(d.x)`
66
+ width: 100%;
67
+ border: none;
68
+ text-align: left;
69
+ outline-offset: -3px;
70
+ ${({isSelected:m,theme:N})=>m&&`background: ${N.colors.primary100};`}
71
+
72
+ &:hover {
73
+ background: ${({theme:m})=>m.colors.primary100};
74
+ }
75
+ `},29439:function(ne,S,t){t.d(S,{Z:function(){return L}});var e=t(74512);const d=o=>(0,e.jsx)("svg",{width:"1rem",height:"1rem",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...o,children:(0,e.jsx)("path",{d:"M24 13.3a.2.2 0 0 1-.2.2H5.74l8.239 8.239a.2.2 0 0 1 0 .282L12.14 23.86a.2.2 0 0 1-.282 0L.14 12.14a.2.2 0 0 1 0-.282L11.86.14a.2.2 0 0 1 .282 0L13.98 1.98a.2.2 0 0 1 0 .282L5.74 10.5H23.8c.11 0 .2.09.2.2v2.6Z",fill:"#212134"})}),L=d}}]);
@@ -0,0 +1,71 @@
1
+ "use strict";(self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[]).push([[4121],{74767:function(U,p,t){t.r(p),t.d(p,{default:function(){return be}});var e=t(32735),s=t(43383),b=t(83983),h=t(53038),L=t(67879),O=t(94638),C=t(96709),D=t(27649),E=t(82055),f=t(99223),d=t(49372),M=t(41415),x=t(17e3),H=t(72850),te=t(56755),ne=t(73269),le=t(33827),G=t(94547),m=t(19786),N=t(44426),ae=t(3685),oe=t(35658),S=t(87933),y=t(60216),V=t(8471);const $=V.ZP.div`
2
+ background: ${({theme:l})=>l.colors.danger500};
3
+ border: none;
4
+ border-radius: 16px;
5
+ position: relative;
6
+ height: ${24/16}rem;
7
+ width: ${40/16}rem;
8
+
9
+ & span {
10
+ font-size: ${({visibleLabels:l})=>l?"1rem":0};
11
+ }
12
+
13
+ &:before {
14
+ content: '';
15
+ background: ${({theme:l})=>l.colors.neutral0};
16
+ width: 1rem;
17
+ height: 1rem;
18
+ border-radius: 50%;
19
+ position: absolute;
20
+ transition: all 0.5s;
21
+ left: ${({theme:l})=>l.spaces[1]};
22
+ top: ${({theme:l})=>l.spaces[1]};
23
+ }
24
+
25
+ @media (prefers-reduced-motion: reduce) {
26
+ &:before {
27
+ transition: none;
28
+ }
29
+ }
30
+ `,se=V.ZP.button`
31
+ background: transparent;
32
+ padding: 0;
33
+ border: none;
34
+
35
+ &[aria-checked='true'] ${$} {
36
+ background: ${({theme:l})=>l.colors.success500};
37
+ }
38
+
39
+ &[aria-checked='true'] ${$}:before {
40
+ transform: translateX(1rem);
41
+ }
42
+ `,W=e.forwardRef(({label:l,onChange:r,onLabel:o,offLabel:c,selected:T,visibleLabels:v,...u},a)=>e.createElement(se,{ref:a,role:"switch","aria-checked":T,"aria-label":l,onClick:r,visibleLabels:v,type:"button",...u},e.createElement(S.k,null,e.createElement($,null,e.createElement("span",null,o),e.createElement("span",null,c)),v&&e.createElement(H.x,{as:"span","aria-hidden":!0,paddingLeft:2,color:T?"success600":"danger600"},T?o:c))));W.defaultProps={onLabel:"On",offLabel:"Off",visibleLabels:!1},W.propTypes={label:y.string.isRequired,offLabel:y.string,onChange:y.func.isRequired,onLabel:y.string,selected:y.bool.isRequired,visibleLabels:y.bool},W.displayName="Switch";var j=t(50563),re=t(9695),R=t(19406),F=t(4038),ie=t(68625),de=t(54725),ce=t(97889),Ee=t(3040),me=t.n(Ee);const he={webhooks:[],webhooksToDelete:[],webhookToDelete:null,loadingWebhooks:!0};var ue=(l,r)=>(0,ce.ZP)(l,o=>{switch(r.type){case"GET_DATA_SUCCEEDED":{o.webhooks=r.data,o.loadingWebhooks=!1;break}case"TOGGLE_LOADING":{o.loadingWebhooks=!l.loadingWebhooks;break}case"SET_WEBHOOK_ENABLED":{me()(o,["webhooks",...r.keys],r.value);break}case"SET_WEBHOOK_TO_DELETE":{o.webhookToDelete=r.id;break}case"SET_WEBHOOKS_TO_DELETE":{r.value?o.webhooksToDelete.push(r.id):o.webhooksToDelete=l.webhooksToDelete.filter(c=>c!==r.id);break}case"SET_ALL_WEBHOOKS_TO_DELETE":{l.webhooksToDelete.length===0?o.webhooksToDelete=l.webhooks.map(c=>c.id):o.webhooksToDelete=[];break}case"WEBHOOKS_DELETED":{o.webhooks=l.webhooks.filter(c=>!l.webhooksToDelete.includes(c.id)),o.webhooksToDelete=[];break}case"WEBHOOK_DELETED":{o.webhooks=l.webhooks.filter((c,T)=>T!==r.index),o.webhookToDelete=null;break}default:return o}}),ge=()=>{const{isLoading:l,allowedActions:{canCreate:r,canRead:o,canUpdate:c,canDelete:T}}=(0,s.ss)(b.Z.settings.webhooks),v=(0,s.lm)(),u=(0,e.useRef)(!0),{formatMessage:a}=(0,L.Z)(),[fe,B]=(0,e.useState)(!1),[{webhooks:P,webhooksToDelete:Z,webhookToDelete:K,loadingWebhooks:I},g]=(0,e.useReducer)(ue,he),{notifyStatus:z}=(0,O.G)(),{get:Q,del:Te,post:ve,put:De}=(0,s.kY)();(0,s.go)();const{push:pe}=(0,h.k6)(),{pathname:X}=(0,h.TH)(),A=P.length,k=Z.length,Y=n=>P.findIndex(i=>i.id===n);(0,e.useEffect)(()=>(u.current=!0,()=>{u.current=!1}),[]),(0,e.useEffect)(()=>{o&&(async()=>{try{const{data:{data:i}}=await Q("/admin/webhooks");u.current&&(g({type:"GET_DATA_SUCCEEDED",data:i}),z("webhooks have been loaded"))}catch(i){console.log(i),u.current&&(i.code!==20&&v({type:"warning",message:{id:"notification.error"}}),g({type:"TOGGLE_LOADING"}))}})()},[o,Q,z,v]);const Le=()=>{B(n=>!n)},Oe=()=>{K?ye():Ce()},ye=async()=>{try{await Te(`/admin/webhooks/${K}`),g({type:"WEBHOOK_DELETED",index:Y(K)})}catch(n){n.code!==20&&v({type:"warning",message:{id:"notification.error"}})}B(!1)},Ce=async()=>{const n={ids:Z};try{await ve("/admin/webhooks/batch-delete",n),u.current&&g({type:"WEBHOOKS_DELETED"})}catch(i){u.current&&i.code!==20&&v({type:"warning",message:{id:"notification.error"}})}B(!1)},J=n=>{B(!0),n!=="all"&&g({type:"SET_WEBHOOK_TO_DELETE",id:n})},ke=async(n,i)=>{const q=Y(i),Be=P[q],_=[q,"isEnabled"],ee={...Be,isEnabled:n};delete ee.id;try{g({type:"SET_WEBHOOK_ENABLED",keys:_,value:n}),await De(`/admin/webhooks/${i}`,ee)}catch(Pe){u.current&&(g({type:"SET_WEBHOOK_ENABLED",keys:_,value:!n}),Pe.code!==20&&v({type:"warning",message:{id:"notification.error"}}))}},Me=()=>{g({type:"SET_ALL_WEBHOOKS_TO_DELETE"})},We=(n,i)=>{g({type:"SET_WEBHOOKS_TO_DELETE",value:n,id:i})},w=n=>{pe(`${X}/${n}`)};return e.createElement(C.A,null,e.createElement(s.SL,{name:"Webhooks"}),e.createElement(D.o,{"aria-busy":l||I},e.createElement(E.T,{title:a({id:"Settings.webhooks.title",defaultMessage:"Webhooks"}),subtitle:a({id:"Settings.webhooks.list.description",defaultMessage:"Get POST changes notifications"}),primaryAction:r&&!I&&e.createElement(s.Qj,{startIcon:e.createElement(R.Z,null),variant:"default",to:`${X}/create`,size:"S"},a({id:"Settings.webhooks.list.button.add",defaultMessage:"Create new webhook"}))}),k>0&&T&&e.createElement(f.Z,{startActions:e.createElement(e.Fragment,null,e.createElement(d.Z,{variant:"epsilon",textColor:"neutral600"},a({id:"Settings.webhooks.to.delete",defaultMessage:"{webhooksToDeleteLength, plural, one {# asset} other {# assets}} selected"},{webhooksToDeleteLength:k})),e.createElement(M.z,{onClick:()=>J("all"),startIcon:e.createElement(F.Z,null),size:"L",variant:"danger-light"},a({id:"global.delete",defaultMessage:"Delete"})))}),e.createElement(x.D,null,l||I?e.createElement(H.x,{background:"neutral0",padding:6,shadow:"filterShadow",hasRadius:!0},e.createElement(s.dO,null)):A>0?e.createElement(te.i,{colCount:5,rowCount:A+1,footer:e.createElement(ne.c,{onClick:()=>r?w("create"):{},icon:e.createElement(R.Z,null)},a({id:"Settings.webhooks.list.button.add",defaultMessage:"Create new webhook"}))},e.createElement(le.h,null,e.createElement(G.Tr,null,e.createElement(m.Th,null,e.createElement(N.C,{"aria-label":a({id:"global.select-all-entries",defaultMessage:"Select all entries"}),indeterminate:k>0&&k<A,value:k===A,onValueChange:Me})),e.createElement(m.Th,{width:"20%"},e.createElement(d.Z,{variant:"sigma",textColor:"neutral600"},a({id:"global.name",defaultMessage:"Name"}))),e.createElement(m.Th,{width:"60%"},e.createElement(d.Z,{variant:"sigma",textColor:"neutral600"},a({id:"Settings.webhooks.form.url",defaultMessage:"URL"}))),e.createElement(m.Th,{width:"20%"},e.createElement(d.Z,{variant:"sigma",textColor:"neutral600"},a({id:"Settings.webhooks.list.th.status",defaultMessage:"Status"}))),e.createElement(m.Th,null,e.createElement(ae.T,null,a({id:"Settings.webhooks.list.th.actions",defaultMessage:"Actions"}))))),e.createElement(oe.p,null,P.map(n=>e.createElement(G.Tr,{key:n.id,...(0,s.X7)({fn:()=>w(n.id),condition:c})},e.createElement(m.Td,{...s.UW},e.createElement(N.C,{"aria-label":`${a({id:"global.select",defaultMessage:"Select"})} ${n.name}`,value:Z?.includes(n.id),onValueChange:i=>We(i,n.id),id:"select",name:"select"})),e.createElement(m.Td,null,e.createElement(d.Z,{fontWeight:"semiBold",textColor:"neutral800"},n.name)),e.createElement(m.Td,null,e.createElement(d.Z,{textColor:"neutral800"},n.url)),e.createElement(m.Td,null,e.createElement(S.k,{...s.UW},e.createElement(W,{onLabel:a({id:"global.enabled",defaultMessage:"Enabled"}),offLabel:a({id:"global.disabled",defaultMessage:"Disabled"}),label:`${n.name} ${a({id:"Settings.webhooks.list.th.status",defaultMessage:"Status"})}`,selected:n.isEnabled,onChange:()=>ke(!n.isEnabled,n.id),visibleLabels:!0}))),e.createElement(m.Td,null,e.createElement(S.k,{gap:1,...s.UW},c&&e.createElement(j.h,{onClick:()=>{w(n.id)},label:a({id:"Settings.webhooks.events.update",defaultMessage:"Update"}),icon:e.createElement(ie.Z,null),noBorder:!0}),T&&e.createElement(j.h,{onClick:()=>J(n.id),label:a({id:"global.delete",defaultMessage:"Delete"}),icon:e.createElement(F.Z,null),noBorder:!0,id:`delete-${n.id}`}))))))):e.createElement(re.x,{icon:e.createElement(de.Z,{width:"160px"}),content:a({id:"Settings.webhooks.list.empty.description",defaultMessage:"No webhooks found"}),action:e.createElement(M.z,{variant:"secondary",startIcon:e.createElement(R.Z,null),onClick:()=>r?w("create"):{}},a({id:"Settings.webhooks.list.button.add",defaultMessage:"Create new webhook"}))}))),e.createElement(s.QH,{isOpen:fe,onToggleDialog:Le,onConfirm:Oe}))},be=()=>e.createElement(s.O4,{permissions:b.Z.settings.webhooks.main},e.createElement(ge,null))},99223:function(U,p,t){t.d(p,{Z:function(){return D}});var e=t(32735),s=t(60216),b=t(8471),h=t(72850),L=t(87933);const O=(0,b.ZP)(L.k)`
43
+ & > * + * {
44
+ margin-left: ${({theme:E})=>E.spaces[2]};
45
+ }
46
+
47
+ margin-left: ${({pullRight:E})=>E?"auto":void 0};
48
+ `,C=(0,b.ZP)(O)`
49
+ flex-shrink: 0;
50
+ `,D=({startActions:E,endActions:f})=>E||f?e.createElement(h.x,{paddingLeft:10,paddingRight:10},e.createElement(h.x,{paddingBottom:4},e.createElement(L.k,{justifyContent:"space-between",alignItems:"flex-start"},E&&e.createElement(O,{wrap:"wrap"},E),f&&e.createElement(C,{pullRight:!0},f)))):null;D.defaultProps={endActions:void 0,startActions:void 0},D.propTypes={endActions:s.node,startActions:s.node}},73269:function(U,p,t){t.d(p,{c:function(){return f}});var e=t(32735),s=t(60216),b=t(8471),h=t(72850),L=t(9026),O=t(87933),C=t(49372);const D=(0,b.ZP)(h.x)`
51
+ height: ${24/16}rem;
52
+ width: ${24/16}rem;
53
+ border-radius: 50%;
54
+ display: flex;
55
+ justify-content: center;
56
+ align-items: center;
57
+
58
+ svg {
59
+ height: ${10/16}rem;
60
+ width: ${10/16}rem;
61
+ }
62
+
63
+ svg path {
64
+ fill: ${({theme:d})=>d.colors.primary600};
65
+ }
66
+ `,E=(0,b.ZP)(h.x)`
67
+ border-radius: 0 0 ${({theme:d})=>d.borderRadius} ${({theme:d})=>d.borderRadius};
68
+ display: block;
69
+ width: 100%;
70
+ border: none;
71
+ `,f=({children:d,icon:M,...x})=>e.createElement("div",null,e.createElement(L.i,null),e.createElement(E,{as:"button",background:"primary100",padding:5,...x},e.createElement(O.k,null,e.createElement(D,{"aria-hidden":!0,background:"primary200"},M),e.createElement(h.x,{paddingLeft:3},e.createElement(C.Z,{variant:"pi",fontWeight:"bold",textColor:"primary600"},d)))));f.propTypes={children:s.string.isRequired,icon:s.node.isRequired}}}]);
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { Typography } from '@strapi/design-system';
4
4
 
5
- export function ReviewWorkflowsStage({ name }) {
5
+ export function ReviewWorkflowsStageEE({ name }) {
6
6
  return (
7
7
  <Typography fontWeight="regular" textColor="neutral700">
8
8
  {name}
@@ -10,6 +10,6 @@ export function ReviewWorkflowsStage({ name }) {
10
10
  );
11
11
  }
12
12
 
13
- ReviewWorkflowsStage.propTypes = {
13
+ ReviewWorkflowsStageEE.propTypes = {
14
14
  name: PropTypes.string.isRequired,
15
15
  };
@@ -0,0 +1,47 @@
1
+ import React from 'react';
2
+ import { useIntl } from 'react-intl';
3
+ import { Typography } from '@strapi/design-system';
4
+
5
+ import ReviewWorkflowsStage from '.';
6
+ import getTrad from '../../../../../../../admin/src/content-manager/utils/getTrad';
7
+
8
+ export default (layout) => {
9
+ const { formatMessage } = useIntl();
10
+
11
+ // TODO: As soon as the feature was enabled in EE mode, the BE currently does not have a way to send
12
+ // `false` once a user is in CE mode again. We shouldn't have to perform the window.strapi.isEE check here
13
+ // and it is meant to be in interim solution until we find a better one.
14
+ const hasReviewWorkflows =
15
+ (window.strapi.features.isEnabled(window.strapi.features.REVIEW_WORKFLOWS) &&
16
+ layout.contentType.options?.reviewWorkflows) ??
17
+ false;
18
+
19
+ if (!hasReviewWorkflows) {
20
+ return null;
21
+ }
22
+
23
+ return {
24
+ key: '__strapi_reviewWorkflows_stage_temp_key__',
25
+ name: 'strapi_reviewWorkflows_stage',
26
+ fieldSchema: {
27
+ type: 'custom',
28
+ },
29
+ metadatas: {
30
+ label: formatMessage({
31
+ id: getTrad(`containers.ListPage.table-headers.reviewWorkflows.stage`),
32
+ defaultMessage: 'Review stage',
33
+ }),
34
+ searchable: false,
35
+ sortable: false,
36
+ },
37
+ cellFormatter({ strapi_reviewWorkflows_stage }) {
38
+ // if entities are created e.g. through lifecycle methods
39
+ // they may not have a stage assigned
40
+ if (!strapi_reviewWorkflows_stage) {
41
+ return <Typography textColor="neutral800">-</Typography>;
42
+ }
43
+
44
+ return <ReviewWorkflowsStage name={strapi_reviewWorkflows_stage.name} />;
45
+ },
46
+ };
47
+ };
@@ -0,0 +1,3 @@
1
+ import { ReviewWorkflowsStageEE } from './ReviewWorkflowsStageEE';
2
+
3
+ export default ReviewWorkflowsStageEE;
@@ -4,8 +4,9 @@ import {
4
4
  useCMEditViewDataManager,
5
5
  useAPIErrorHandler,
6
6
  useFetchClient,
7
+ useNotification,
7
8
  } from '@strapi/helper-plugin';
8
- import { Field, FieldLabel, FieldError, Flex } from '@strapi/design-system';
9
+ import { Field, FieldLabel, FieldError, Flex, Loader } from '@strapi/design-system';
9
10
  import { useIntl } from 'react-intl';
10
11
  import { useMutation } from 'react-query';
11
12
 
@@ -19,27 +20,68 @@ export function InformationBoxEE() {
19
20
  initialData,
20
21
  isCreatingEntry,
21
22
  layout: { uid },
23
+ isSingleType,
24
+ onChange,
22
25
  } = useCMEditViewDataManager();
23
26
  const { put } = useFetchClient();
27
+ // it is possible to rely on initialData here, because it always will
28
+ // be updated at the same time when modifiedData is updated, otherwise
29
+ // the entity is flagged as modified
24
30
  const activeWorkflowStage = initialData?.[ATTRIBUTE_NAME] ?? null;
31
+ const hasReviewWorkflowsEnabled = Object.prototype.hasOwnProperty.call(
32
+ initialData,
33
+ ATTRIBUTE_NAME
34
+ );
25
35
  const { formatMessage } = useIntl();
26
36
  const { formatAPIError } = useAPIErrorHandler();
37
+ const toggleNotification = useNotification();
27
38
 
28
- const { workflows: { data: [workflow] = [] } = {} } = useReviewWorkflows();
39
+ const { workflows: { data: workflows, isLoading: workflowIsLoading } = {} } =
40
+ useReviewWorkflows();
41
+ // TODO: this works only as long as we support one workflow
42
+ const workflow = workflows?.[0] ?? null;
29
43
 
30
- const { error, isLoading, mutateAsync } = useMutation(async ({ entityId, stageId, uid }) => {
31
- const {
32
- data: { data },
33
- } = await put(`/admin/content-manager/collection-types/${uid}/${entityId}/stage`, {
34
- data: { id: stageId },
35
- });
44
+ const { error, isLoading, mutateAsync } = useMutation(
45
+ async ({ entityId, stageId, uid }) => {
46
+ const typeSlug = isSingleType ? 'single-types' : 'collection-types';
36
47
 
37
- return data;
38
- });
48
+ const {
49
+ data: { data: createdEntity },
50
+ } = await put(`/admin/content-manager/${typeSlug}/${uid}/${entityId}/stage`, {
51
+ data: { id: stageId },
52
+ });
39
53
 
40
- // stages are empty while the workflow is loading
41
- const options = (workflow?.stages ?? []).map(({ id, name }) => ({ value: id, label: name }));
42
- const formattedError = error ? formatAPIError(error) : null;
54
+ // initialData and modifiedData have to stay in sync, otherwise the entity would be flagged
55
+ // as modified, which is what the boolean flag is for
56
+ onChange({ target: { name: ATTRIBUTE_NAME, value: createdEntity[ATTRIBUTE_NAME] } }, true);
57
+
58
+ return createdEntity;
59
+ },
60
+ {
61
+ onSuccess() {
62
+ toggleNotification({
63
+ type: 'success',
64
+ message: { id: 'notification.success.saved', defaultMessage: 'Saved' },
65
+ });
66
+ },
67
+ }
68
+ );
69
+
70
+ // if entities are created e.g. through lifecycle methods
71
+ // they may not have a stage assigned. Updating the entity won't
72
+ // set the default stage either which may lead to entities that
73
+ // do not have a stage assigned for a while. By displaying an
74
+ // error by default we are trying to nudge users into assigning a stage.
75
+ const initialStageNullError =
76
+ activeWorkflowStage === null &&
77
+ !workflowIsLoading &&
78
+ !isCreatingEntry &&
79
+ formatMessage({
80
+ id: 'content-manager.reviewWorkflows.stage.select.placeholder',
81
+ defaultMessage: 'Select a stage',
82
+ });
83
+ const formattedMutationError = error && formatAPIError(error);
84
+ const formattedError = formattedMutationError || initialStageNullError || null;
43
85
 
44
86
  const handleStageChange = async ({ value: stageId }) => {
45
87
  try {
@@ -58,7 +100,7 @@ export function InformationBoxEE() {
58
100
  <Information.Root>
59
101
  <Information.Title />
60
102
 
61
- {activeWorkflowStage && (
103
+ {hasReviewWorkflowsEnabled && !isCreatingEntry && (
62
104
  <Field error={formattedError} name={ATTRIBUTE_NAME} id={ATTRIBUTE_NAME}>
63
105
  <Flex direction="column" gap={2} alignItems="stretch">
64
106
  <FieldLabel>
@@ -69,16 +111,20 @@ export function InformationBoxEE() {
69
111
  </FieldLabel>
70
112
 
71
113
  <ReactSelect
114
+ components={{
115
+ LoadingIndicator: () => <Loader small />,
116
+ }}
72
117
  error={formattedError}
73
118
  inputId={ATTRIBUTE_NAME}
74
- isDisabled={isCreatingEntry}
75
- options={options}
76
- name={ATTRIBUTE_NAME}
77
- defaultValue={{ value: activeWorkflowStage?.id, label: activeWorkflowStage?.name }}
78
119
  isLoading={isLoading}
79
120
  isSearchable={false}
80
121
  isClearable={false}
122
+ name={ATTRIBUTE_NAME}
81
123
  onChange={handleStageChange}
124
+ options={
125
+ workflow ? workflow.stages.map(({ id, name }) => ({ value: id, label: name })) : []
126
+ }
127
+ value={{ value: activeWorkflowStage?.id, label: activeWorkflowStage?.name }}
82
128
  />
83
129
 
84
130
  <FieldError />
@@ -1,5 +1,5 @@
1
1
  import { useReducer, useEffect } from 'react';
2
- import { request, useNotification } from '@strapi/helper-plugin';
2
+ import { useFetchClient, useNotification } from '@strapi/helper-plugin';
3
3
 
4
4
  import { getRequestUrl } from '../../../../admin/src/utils';
5
5
  import reducer, { initialState } from './reducer';
@@ -7,43 +7,42 @@ import reducer, { initialState } from './reducer';
7
7
  const useAuthProviders = ({ ssoEnabled }) => {
8
8
  const [state, dispatch] = useReducer(reducer, initialState);
9
9
  const toggleNotification = useNotification();
10
+ const { get } = useFetchClient();
10
11
 
11
12
  useEffect(() => {
12
- fetchAuthProviders();
13
- // eslint-disable-next-line react-hooks/exhaustive-deps
14
- }, []);
13
+ const fetchAuthProviders = async () => {
14
+ try {
15
+ if (!ssoEnabled) {
16
+ dispatch({
17
+ type: 'GET_DATA_SUCCEEDED',
18
+ data: [],
19
+ });
20
+
21
+ return;
22
+ }
23
+
24
+ const { data } = await get(getRequestUrl('providers'));
15
25
 
16
- const fetchAuthProviders = async () => {
17
- try {
18
- if (!ssoEnabled) {
19
26
  dispatch({
20
27
  type: 'GET_DATA_SUCCEEDED',
21
- data: [],
28
+ data,
29
+ });
30
+ } catch (err) {
31
+ console.error(err);
32
+
33
+ dispatch({
34
+ type: 'GET_DATA_ERROR',
22
35
  });
23
36
 
24
- return;
37
+ toggleNotification({
38
+ type: 'warning',
39
+ message: { id: 'notification.error' },
40
+ });
25
41
  }
42
+ };
26
43
 
27
- const requestUrl = getRequestUrl('providers');
28
- const data = await request(requestUrl, { method: 'GET' });
29
-
30
- dispatch({
31
- type: 'GET_DATA_SUCCEEDED',
32
- data,
33
- });
34
- } catch (err) {
35
- console.error(err);
36
-
37
- dispatch({
38
- type: 'GET_DATA_ERROR',
39
- });
40
-
41
- toggleNotification({
42
- type: 'warning',
43
- message: { id: 'notification.error' },
44
- });
45
- }
46
- };
44
+ fetchAuthProviders();
45
+ }, [get, ssoEnabled, toggleNotification]);
47
46
 
48
47
  return state;
49
48
  };
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { useEffect } from 'react';
7
7
  import { useIntl } from 'react-intl';
8
- import { useLocation } from 'react-router';
8
+ import { useLocation } from 'react-router-dom';
9
9
  import { useNotification } from '@strapi/helper-plugin';
10
10
  import isNil from 'lodash/isNil';
11
11
  import useLicenseLimits from '../useLicenseLimits';
@@ -2,7 +2,7 @@ import React, { useEffect, useRef, useCallback } from 'react';
2
2
  import { useHistory, useRouteMatch } from 'react-router-dom';
3
3
  import { useIntl } from 'react-intl';
4
4
  import Cookies from 'js-cookie';
5
- import { auth, LoadingIndicatorPage, request } from '@strapi/helper-plugin';
5
+ import { auth, LoadingIndicatorPage, useFetchClient } from '@strapi/helper-plugin';
6
6
  import { getRequestUrl } from '../../../../admin/src/utils';
7
7
 
8
8
  const AuthResponse = () => {
@@ -24,6 +24,8 @@ const AuthResponse = () => {
24
24
  );
25
25
  }, [push]);
26
26
 
27
+ const { get } = useFetchClient();
28
+
27
29
  const fetchUserInfo = useCallback(async () => {
28
30
  try {
29
31
  const jwtToken = Cookies.get('jwtToken');
@@ -33,7 +35,9 @@ const AuthResponse = () => {
33
35
  if (jwtToken) {
34
36
  auth.setToken(jwtToken, true);
35
37
  const requestUrl = getRequestUrl('users/me');
36
- const { data } = await request(requestUrl, { method: 'GET' });
38
+ const {
39
+ data: { data },
40
+ } = await get(requestUrl);
37
41
 
38
42
  auth.setUserInfo(data, true);
39
43
 
@@ -44,7 +48,7 @@ const AuthResponse = () => {
44
48
  } catch (e) {
45
49
  redirectToOops();
46
50
  }
47
- }, [push, redirectToOops]);
51
+ }, [get, push, redirectToOops]);
48
52
 
49
53
  useEffect(() => {
50
54
  if (authResponse === 'error') {
@@ -2,7 +2,7 @@ import { useQuery } from 'react-query';
2
2
  import { useNotification, useFetchClient } from '@strapi/helper-plugin';
3
3
  import { useLocation } from 'react-router-dom';
4
4
 
5
- const useAuditLogsData = ({ canRead }) => {
5
+ const useAuditLogsData = ({ canReadAuditLogs, canReadUsers }) => {
6
6
  const { get } = useFetchClient();
7
7
  const { search } = useLocation();
8
8
  const toggleNotification = useNotification();
@@ -21,7 +21,6 @@ const useAuditLogsData = ({ canRead }) => {
21
21
  };
22
22
 
23
23
  const queryOptions = {
24
- enabled: canRead,
25
24
  keepPreviousData: true,
26
25
  retry: false,
27
26
  staleTime: 1000 * 20, // 20 seconds
@@ -32,10 +31,14 @@ const useAuditLogsData = ({ canRead }) => {
32
31
  data: auditLogs,
33
32
  isLoading,
34
33
  isError: isAuditLogsError,
35
- } = useQuery(['auditLogs', search], fetchAuditLogsPage, queryOptions);
34
+ } = useQuery(['auditLogs', search], fetchAuditLogsPage, {
35
+ ...queryOptions,
36
+ enabled: canReadAuditLogs,
37
+ });
36
38
 
37
39
  const { data: users, isError: isUsersError } = useQuery(['auditLogsUsers'], fetchAllUsers, {
38
40
  ...queryOptions,
41
+ enabled: canReadUsers,
39
42
  staleTime: 2 * (1000 * 60), // 2 minutes
40
43
  });
41
44
 
@@ -25,17 +25,27 @@ import Filters from '../../../../../../../admin/src/pages/SettingsPage/component
25
25
  import getDisplayedFilters from './utils/getDisplayedFilters';
26
26
  import useAuditLogsData from './hooks/useAuditLogsData';
27
27
 
28
+ const auditLogsPermissions = {
29
+ ...adminPermissions.settings.auditLogs,
30
+ readUsers: adminPermissions.settings.users.read,
31
+ };
32
+
28
33
  const ListView = () => {
29
34
  const { formatMessage } = useIntl();
35
+
30
36
  const {
31
- allowedActions: { canRead },
32
- } = useRBAC(adminPermissions.settings.auditLogs);
37
+ allowedActions: { canRead: canReadAuditLogs, canReadUsers },
38
+ } = useRBAC(auditLogsPermissions);
39
+
33
40
  const [{ query }, setQuery] = useQueryParams();
34
- const { auditLogs, users, isLoading, hasError } = useAuditLogsData({ canRead });
41
+ const { auditLogs, users, isLoading, hasError } = useAuditLogsData({
42
+ canReadAuditLogs,
43
+ canReadUsers,
44
+ });
35
45
 
36
46
  useFocusWhenNavigate();
37
47
 
38
- const displayedFilters = getDisplayedFilters({ formatMessage, users });
48
+ const displayedFilters = getDisplayedFilters({ formatMessage, users, canReadUsers });
39
49
 
40
50
  const title = formatMessage({
41
51
  id: 'global.auditLogs',
@@ -73,7 +83,7 @@ const ListView = () => {
73
83
  })}
74
84
  />
75
85
  <ActionLayout startActions={<Filters displayedFilters={displayedFilters} />} />
76
- <ContentLayout canRead={canRead}>
86
+ <ContentLayout canRead={canReadAuditLogs}>
77
87
  <DynamicTable
78
88
  contentType="Audit logs"
79
89
  headers={headers}