@strapi/admin 4.12.7 → 4.13.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/admin/src/components/NpsSurvey/hooks/useNpsSurveySettings.js +17 -0
  2. package/admin/src/components/NpsSurvey/index.js +365 -0
  3. package/admin/src/content-manager/components/DynamicTable/CellContent/ReviewWorkflowsStage/getTableColumns.js +2 -0
  4. package/admin/src/content-manager/components/DynamicZone/components/DynamicZoneLabel.js +1 -1
  5. package/admin/src/content-manager/components/EditViewDataManagerProvider/reducer.js +7 -2
  6. package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/cleanData.js +6 -0
  7. package/admin/src/content-manager/components/Filter/CustomInputs/AdminUsersFilter.js +42 -0
  8. package/admin/src/content-manager/components/Filter/Filter.js +54 -0
  9. package/admin/src/content-manager/components/Filter/index.js +1 -0
  10. package/admin/src/content-manager/components/InputUID/index.js +222 -216
  11. package/admin/src/content-manager/components/RelationInput/RelationInput.js +4 -0
  12. package/admin/src/content-manager/components/RepeatableComponent/index.js +32 -2
  13. package/admin/src/content-manager/components/Wysiwyg/Editor.js +432 -68
  14. package/admin/src/content-manager/components/Wysiwyg/WysiwygStyles.js +0 -7
  15. package/admin/src/content-manager/components/Wysiwyg/index.js +147 -152
  16. package/admin/src/content-manager/constants/attributes.js +3 -0
  17. package/admin/src/content-manager/hooks/useAllowedAttributes.js +43 -0
  18. package/admin/src/content-manager/pages/EditView/Information/index.js +9 -8
  19. package/admin/src/content-manager/pages/ListSettingsView/components/Settings.js +40 -7
  20. package/admin/src/content-manager/pages/ListSettingsView/index.js +6 -2
  21. package/admin/src/content-manager/pages/ListView/components/FieldPicker/index.js +67 -69
  22. package/admin/src/content-manager/pages/ListView/components/ViewSettingsMenu/index.js +80 -0
  23. package/admin/src/content-manager/pages/ListView/index.js +236 -67
  24. package/admin/src/content-manager/utils/getDisplayName.js +33 -0
  25. package/admin/src/content-manager/utils/index.js +1 -0
  26. package/admin/src/pages/Admin/index.js +3 -1
  27. package/admin/src/pages/AuthPage/components/Register/index.js +5 -0
  28. package/admin/src/pages/SettingsPage/components/SettingsNav/index.js +3 -3
  29. package/admin/src/pages/SettingsPage/index.js +16 -26
  30. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/index.js +69 -35
  31. package/admin/src/plugins.js +7 -8
  32. package/admin/src/translations/en.json +10 -1
  33. package/build/{1049.f76cb14b.chunk.js → 1049.ec69f5e0.chunk.js} +1 -1
  34. package/build/1227.9f37e1dc.chunk.js +1 -0
  35. package/build/{1386.879bcd90.chunk.js → 1386.ea73b677.chunk.js} +1 -1
  36. package/build/1504.eff012f7.chunk.js +95 -0
  37. package/build/{2225.c6244756.chunk.js → 2225.649fb7bc.chunk.js} +11 -11
  38. package/build/2237.b832ae6e.chunk.js +114 -0
  39. package/build/2379.1f98a31a.chunk.js +1 -0
  40. package/build/2395.0e5e8ded.chunk.js +26 -0
  41. package/build/2801.8e1aa82a.chunk.js +1 -0
  42. package/build/{3483.03c24f96.chunk.js → 3483.19381b40.chunk.js} +1 -1
  43. package/build/4174.f1f39e40.chunk.js +1 -0
  44. package/build/4546.a5946d22.chunk.js +1 -0
  45. package/build/4724.aea5c8c1.chunk.js +6 -0
  46. package/build/502.7bba43b1.chunk.js +1 -0
  47. package/build/6158.c3c13c20.chunk.js +1 -0
  48. package/build/7464.eb057bec.chunk.js +1 -0
  49. package/build/78.dcc6df5c.chunk.js +1 -0
  50. package/build/8276.be3ed581.chunk.js +26 -0
  51. package/build/{Admin-authenticatedApp.31497f74.chunk.js → Admin-authenticatedApp.36b0fe22.chunk.js} +2 -2
  52. package/build/{Admin_InternalErrorPage.f45f2462.chunk.js → Admin_InternalErrorPage.38155af3.chunk.js} +1 -1
  53. package/build/{Admin_homePage.ac9dfb86.chunk.js → Admin_homePage.6f128523.chunk.js} +1 -1
  54. package/build/{Admin_marketplace.c94239f6.chunk.js → Admin_marketplace.061a6e5a.chunk.js} +1 -1
  55. package/build/{Admin_pluginsPage.bbe79434.chunk.js → Admin_pluginsPage.16f837b8.chunk.js} +1 -1
  56. package/build/{Admin_profilePage.192edc52.chunk.js → Admin_profilePage.678bce24.chunk.js} +2 -2
  57. package/build/Admin_settingsPage.af7309e4.chunk.js +111 -0
  58. package/build/{Upload_ConfigureTheView.345ac1e0.chunk.js → Upload_ConfigureTheView.3fc1c100.chunk.js} +1 -1
  59. package/build/admin-app.d63bd229.chunk.js +36 -0
  60. package/build/{admin-edit-roles-page.6d567273.chunk.js → admin-edit-roles-page.38a6c863.chunk.js} +3 -3
  61. package/build/{admin-edit-users.acfd4128.chunk.js → admin-edit-users.545fc882.chunk.js} +2 -2
  62. package/build/{admin-roles-list.23ddff26.chunk.js → admin-roles-list.1e2e814d.chunk.js} +1 -1
  63. package/build/{admin-users.00e20017.chunk.js → admin-users.b8ea5677.chunk.js} +2 -2
  64. package/build/{api-tokens-create-page.46c2ea84.chunk.js → api-tokens-create-page.e0c15627.chunk.js} +1 -1
  65. package/build/{api-tokens-edit-page.58139df9.chunk.js → api-tokens-edit-page.9f2dce47.chunk.js} +1 -1
  66. package/build/{api-tokens-list-page.0af7d431.chunk.js → api-tokens-list-page.d747051c.chunk.js} +2 -2
  67. package/build/{audit-logs-settings-page.0f73ccf8.chunk.js → audit-logs-settings-page.96f9d608.chunk.js} +1 -1
  68. package/build/content-manager.2d676432.chunk.js +1097 -0
  69. package/build/{content-type-builder-list-view.bf9be456.chunk.js → content-type-builder-list-view.b71cf240.chunk.js} +1 -1
  70. package/build/{content-type-builder.cd999f6e.chunk.js → content-type-builder.e5669749.chunk.js} +2 -2
  71. package/build/email-settings-page.2809f0bf.chunk.js +11 -0
  72. package/build/en-json.e12fd5fc.chunk.js +1 -0
  73. package/build/{i18n-settings-page.47f78016.chunk.js → i18n-settings-page.5f716172.chunk.js} +1 -1
  74. package/build/index.html +1 -1
  75. package/build/main.c6c9e04c.js +2859 -0
  76. package/build/review-workflows-settings-create-view.4a156a19.chunk.js +1 -0
  77. package/build/review-workflows-settings-edit-view.ce984d1f.chunk.js +1 -0
  78. package/build/review-workflows-settings-list-view.419b8deb.chunk.js +56 -0
  79. package/build/{runtime~main.d515c521.js → runtime~main.5a10b789.js} +2 -2
  80. package/build/{sso-settings-page.12b6d8ae.chunk.js → sso-settings-page.45153df5.chunk.js} +1 -1
  81. package/build/{transfer-tokens-create-page.1597e6ab.chunk.js → transfer-tokens-create-page.ebba16d8.chunk.js} +1 -1
  82. package/build/{transfer-tokens-edit-page.8741529f.chunk.js → transfer-tokens-edit-page.d7bb2b3e.chunk.js} +1 -1
  83. package/build/{transfer-tokens-list-page.d6986b03.chunk.js → transfer-tokens-list-page.cfe1736c.chunk.js} +2 -2
  84. package/build/{upload-settings.7f93d4c0.chunk.js → upload-settings.cc5ad813.chunk.js} +1 -1
  85. package/build/{upload.37488080.chunk.js → upload.756efc28.chunk.js} +1 -1
  86. package/build/users-advanced-settings-page.818d84eb.chunk.js +9 -0
  87. package/build/users-email-settings-page.c1967c09.chunk.js +9 -0
  88. package/build/users-providers-settings-page.11893e08.chunk.js +14 -0
  89. package/build/users-roles-settings-page.2b051e6a.chunk.js +55 -0
  90. package/build/{webhook-edit-page.6cb479ff.chunk.js → webhook-edit-page.de45c635.chunk.js} +2 -2
  91. package/build/{webhook-list-page.65e1b5bb.chunk.js → webhook-list-page.ca91df8b.chunk.js} +1 -1
  92. package/ee/admin/content-manager/components/Filter/CustomInputs/ReviewWorkflows/AssigneeFilter.js +42 -0
  93. package/ee/admin/content-manager/components/Filter/CustomInputs/ReviewWorkflows/StageFilter.js +70 -0
  94. package/ee/admin/content-manager/components/Filter/CustomInputs/ReviewWorkflows/constants.js +71 -0
  95. package/ee/admin/content-manager/pages/EditView/InformationBox/InformationBoxEE.js +9 -217
  96. package/ee/admin/content-manager/pages/EditView/InformationBox/components/AssigneeSelect/AssigneeSelect.js +147 -0
  97. package/ee/admin/content-manager/pages/EditView/InformationBox/components/AssigneeSelect/index.js +1 -0
  98. package/ee/admin/content-manager/pages/EditView/InformationBox/components/StageSelect/StageSelect.js +243 -0
  99. package/ee/admin/content-manager/pages/EditView/InformationBox/components/StageSelect/index.js +1 -0
  100. package/ee/admin/content-manager/pages/EditView/InformationBox/constants.js +2 -0
  101. package/ee/admin/content-manager/pages/ListSettingsView/constants.js +7 -0
  102. package/ee/admin/content-manager/pages/ListView/ReviewWorkflowsColumn/ReviewWorkflowsAssigneeEE.js +21 -0
  103. package/ee/admin/content-manager/pages/ListView/ReviewWorkflowsColumn/constants.js +44 -17
  104. package/ee/admin/content-manager/pages/ListView/ReviewWorkflowsColumn/index.js +1 -0
  105. package/ee/admin/hooks/useAuthProviders.js +25 -0
  106. package/ee/admin/hooks/{useLicenseLimitNotification/index.js → useLicenseLimitNotification.js} +2 -4
  107. package/ee/admin/hooks/{useLicenseLimits/useLicenseLimits.js → useLicenseLimits.js} +4 -1
  108. package/ee/admin/pages/AuthPage/components/Login/index.js +8 -4
  109. package/ee/admin/pages/AuthPage/components/Providers/index.js +8 -5
  110. package/ee/admin/pages/HomePage/index.js +1 -1
  111. package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/pages/CreateView/CreateView.js +1 -1
  112. package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/pages/EditView/EditView.js +1 -1
  113. package/ee/admin/pages/SettingsPage/pages/ReviewWorkflows/pages/ListView/ListView.js +1 -1
  114. package/ee/admin/pages/SettingsPage/pages/Users/ListPage/CreateAction/index.js +1 -1
  115. package/ee/admin/pages/SettingsPage/pages/Users/ListPage/index.js +1 -1
  116. package/ee/server/constants/workflows.js +1 -0
  117. package/ee/server/controllers/index.js +1 -0
  118. package/ee/server/controllers/workflows/assignees/index.js +44 -0
  119. package/ee/server/routes/review-workflows.js +17 -0
  120. package/ee/server/services/index.js +1 -0
  121. package/ee/server/services/review-workflows/assignees.js +54 -0
  122. package/ee/server/services/review-workflows/metrics/index.js +5 -0
  123. package/ee/server/services/review-workflows/review-workflows.js +20 -11
  124. package/ee/server/validation/review-workflows.js +8 -0
  125. package/index.js +2 -6
  126. package/package.json +9 -9
  127. package/scripts/build.js +15 -15
  128. package/scripts/create-dev-plugins-file.js +5 -38
  129. package/server/controllers/role.js +2 -0
  130. package/server/controllers/user.js +2 -0
  131. package/server/services/permission/permissions-manager/index.js +3 -1
  132. package/server/services/permission/permissions-manager/sanitize.js +19 -7
  133. package/server/services/permission/permissions-manager/validate.js +218 -0
  134. package/utils/create-cache-dir.js +62 -16
  135. package/utils/create-plugins-exclude-path.js +3 -23
  136. package/utils/get-plugins.js +110 -0
  137. package/utils/index.js +1 -1
  138. package/webpack.config.js +10 -13
  139. package/admin/src/content-manager/components/AttributeFilter/Filters.js +0 -58
  140. package/admin/src/content-manager/components/AttributeFilter/hooks/useAllowedAttributes.js +0 -42
  141. package/admin/src/content-manager/components/AttributeFilter/index.js +0 -40
  142. package/admin/src/content-manager/components/Wysiwyg/EditorStylesContainer.js +0 -344
  143. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/api.js +0 -23
  144. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/prefixAllUrls.js +0 -17
  145. package/admin/src/pages/SettingsPage/utils/createSectionsRoutes.js +0 -11
  146. package/admin/src/pages/SettingsPage/utils/getSectionsToDisplay.js +0 -5
  147. package/admin/src/pages/SettingsPage/utils/index.js +0 -2
  148. package/build/2379.f1641312.chunk.js +0 -1
  149. package/build/2395.46f8d0c1.chunk.js +0 -26
  150. package/build/2801.5cef5ec8.chunk.js +0 -1
  151. package/build/3929.5632f24d.chunk.js +0 -114
  152. package/build/3984.dda474f7.chunk.js +0 -1
  153. package/build/4546.7a3c0d03.chunk.js +0 -1
  154. package/build/502.8ae8ef60.chunk.js +0 -1
  155. package/build/5483.6dd2e776.chunk.js +0 -6
  156. package/build/5542.2415a393.chunk.js +0 -63
  157. package/build/6158.c974fd83.chunk.js +0 -1
  158. package/build/7464.3e64a1d5.chunk.js +0 -1
  159. package/build/8276.10a3f883.chunk.js +0 -26
  160. package/build/Admin_settingsPage.97cb9d41.chunk.js +0 -111
  161. package/build/admin-app.91898385.chunk.js +0 -36
  162. package/build/content-manager.b40f79c0.chunk.js +0 -1099
  163. package/build/email-settings-page.d494d1eb.chunk.js +0 -11
  164. package/build/en-json.08c05fcf.chunk.js +0 -1
  165. package/build/main.9dbe4579.js +0 -2859
  166. package/build/review-workflows-settings-create-view.cb08cfa2.chunk.js +0 -1
  167. package/build/review-workflows-settings-edit-view.3c7cbe63.chunk.js +0 -1
  168. package/build/review-workflows-settings-list-view.1611dc1f.chunk.js +0 -56
  169. package/build/users-advanced-settings-page.f0760eb8.chunk.js +0 -9
  170. package/build/users-email-settings-page.ff4b32f3.chunk.js +0 -9
  171. package/build/users-providers-settings-page.48de0306.chunk.js +0 -14
  172. package/build/users-roles-settings-page.9d9a1eff.chunk.js +0 -30
  173. package/ee/admin/hooks/index.js +0 -4
  174. package/ee/admin/hooks/useAuthProviders/index.js +0 -50
  175. package/ee/admin/hooks/useAuthProviders/reducer.js +0 -26
  176. package/ee/admin/hooks/useLicenseLimits/index.js +0 -1
  177. package/scripts/create-plugins-file.js +0 -92
  178. package/utils/get-plugins-path.js +0 -41
  179. /package/ee/admin/hooks/{useLicenseLimits/__mocks__/index.js → __mocks__/useLicenseLimits.js} +0 -0
  180. /package/server/services/permission/permissions-manager/{query-builers.js → query-builders.js} +0 -0
@@ -0,0 +1,55 @@
1
+ "use strict";(self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[]).push([[8853],{34254:function(ve,G,s){s.r(G),s.d(G,{default:function(){return Tt}});var e=s(32735),a=s(45509),T=s(53038),P=s(19108),k=s(27649),x=s(82055),O=s(41415),B=s(17e3),E=s(87933),p=s(49372),A=s(15335),S=s(5803),K=s(10369),J=s(33475),w=s(66456),q=s(92802),b=s(67879),I=s(20108),ye=s(60216),y=s.n(ye);const _=(0,e.createContext)({}),ee=({children:t,value:n})=>e.createElement(_.Provider,{value:n},t),Q=()=>(0,e.useContext)(_);ee.propTypes={children:y().node.isRequired,value:y().object.isRequired};var $=s(48395),Re=s(83828),Ce=s(61762),Pe=s(89966),Se=s(23940),Te=s.n(Se);function be(t){switch(t){case"application":return"Application";case"plugin::content-manager":return"Content manager";case"plugin::content-type-builder":return"Content types builder";case"plugin::documentation":return"Documentation";case"plugin::email":return"Email";case"plugin::i18n":return"i18n";case"plugin::upload":return"Upload";case"plugin::users-permissions":return"Users-permissions";default:return Te()(t.replace("api::","").replace("plugin::",""))}}var Ae=be,Me=(t,n)=>{const o=Object.keys(n).sort().map(r=>({name:r,isOpen:!1}));return{...t,collapses:o}},L=s(72850),Le=s(98978),te=s.n(Le),se=s(8284),ne=s(3685),De=s(45112),Ze=s(33795),F=s.n(Ze),U=s(8471);const ae=(0,U.iv)`
2
+ background: ${t=>t.theme.colors.primary100};
3
+ svg {
4
+ opacity: 1;
5
+ }
6
+ `;var xe=(0,U.ZP)(L.x)`
7
+ display: flex;
8
+ justify-content: space-between;
9
+ align-items: center;
10
+
11
+ svg {
12
+ opacity: 0;
13
+ path {
14
+ fill: ${t=>t.theme.colors.primary600};
15
+ }
16
+ }
17
+
18
+ /* Show active style both on hover and when the action is selected */
19
+ ${t=>t.isActive&&ae}
20
+ &:hover {
21
+ ${ae}
22
+ }
23
+ `;const Oe=U.ZP.div`
24
+ flex: 1;
25
+ align-self: center;
26
+ border-top: 1px solid ${({theme:t})=>t.colors.neutral150};
27
+ `,oe=({subCategory:t})=>{const{formatMessage:n}=(0,b.Z)(),{onChange:o,onChangeSelectAll:r,onSelectedAction:c,selectedAction:l,modifiedData:d}=Q(),u=(0,e.useMemo)(()=>F()(d,t.name,{}),[d,t]),m=(0,e.useMemo)(()=>Object.values(u).every(i=>i.enabled===!0),[u]),g=(0,e.useMemo)(()=>Object.values(u).some(i=>i.enabled===!0)&&!m,[u,m]),h=(0,e.useCallback)(({target:{name:i}})=>{r({target:{name:i,value:!m}})},[m,r]),f=(0,e.useCallback)(i=>l===i,[l]);return e.createElement(L.x,null,e.createElement(E.k,{justifyContent:"space-between",alignItems:"center"},e.createElement(L.x,{paddingRight:4},e.createElement(p.Z,{variant:"sigma",textColor:"neutral600"},t.label)),e.createElement(Oe,null),e.createElement(L.x,{paddingLeft:4},e.createElement(se.X,{name:t.name,value:m,onValueChange:i=>h({target:{name:t.name,value:i}}),indeterminate:g},n({id:"app.utils.select-all",defaultMessage:"Select all"})))),e.createElement(E.k,{paddingTop:6,paddingBottom:6},e.createElement(A.r,{gap:2,style:{flex:1}},t.actions.map(i=>{const v=`${i.name}.enabled`;return e.createElement(S.P,{col:6,key:i.name},e.createElement(xe,{isActive:f(i.name),padding:2,hasRadius:!0},e.createElement(se.X,{value:F()(d,v,!1),name:v,onValueChange:C=>o({target:{name:v,value:C}})},i.label),e.createElement("button",{type:"button",onClick:()=>c(i.name),style:{display:"inline-flex",alignItems:"center"}},e.createElement(ne.T,{as:"span"},n({id:"app.utils.show-bound-route",defaultMessage:"Show bound route for {route}"},{route:i.name})),e.createElement(De.Z,null))))}))))};oe.propTypes={subCategory:y().object.isRequired};var Be=oe;const re=({name:t,permissions:n})=>{const o=(0,e.useMemo)(()=>te()(Object.values(n.controllers).reduce((r,c,l)=>{const d=`${t}.controllers.${Object.keys(n.controllers)[l]}`,u=te()(Object.keys(c).reduce((m,g)=>[...m,{...c[g],label:g,name:`${d}.${g}`}],[]),"label");return[...r,{actions:u,label:Object.keys(n.controllers)[l],name:d}]},[]),"label"),[t,n]);return e.createElement(L.x,{padding:6},o.map(r=>e.createElement(Be,{key:r.name,subCategory:r})))};re.propTypes={name:y().string.isRequired,permissions:y().object.isRequired};var Ie=re,le=s(97889);const $e={collapses:[]},Ne=(t,n)=>(0,le.ZP)(t,o=>{switch(n.type){case"TOGGLE_COLLAPSE":{o.collapses=t.collapses.map((r,c)=>c===n.index?{...r,isOpen:!r.isOpen}:{...r,isOpen:!1});break}default:return o}});var je=()=>{const{modifiedData:t}=Q(),{formatMessage:n}=(0,b.Z)(),[{collapses:o},r]=(0,e.useReducer)(Ne,$e,l=>Me(l,t)),c=l=>r({type:"TOGGLE_COLLAPSE",index:l});return e.createElement(E.k,{direction:"column",alignItems:"stretch",gap:1},o.map((l,d)=>e.createElement(Re.U,{expanded:l.isOpen,onToggle:()=>c(d),key:l.name,variant:d%2===0?"secondary":void 0},e.createElement(Ce.B,{title:Ae(l.name),description:n({id:"users-permissions.Plugin.permissions.plugins.description",defaultMessage:"Define all allowed actions for the {name} plugin."},{name:l.name}),variant:d%2?"primary":"secondary"}),e.createElement(Pe.v,null,e.createElement(Ie,{permissions:t[l.name],name:l.name})))))},ke=s(86834),Ue=s.n(ke),We=s(86205),Ge=s.n(We),Fe=s(37213),Ve=s.n(Fe),He=s(15738),Qe=s.n(He),Ye=t=>{switch(t){case"POST":return{text:"success600",border:"success200",background:"success100"};case"GET":return{text:"secondary600",border:"secondary200",background:"secondary100"};case"PUT":return{text:"warning600",border:"warning200",background:"warning100"};case"DELETE":return{text:"danger600",border:"danger200",background:"danger100"};default:return{text:"neutral600",border:"neutral200",background:"neutral100"}}};const Xe=(0,U.ZP)(L.x)`
28
+ margin: -1px;
29
+ border-radius: ${({theme:t})=>t.spaces[1]} 0 0 ${({theme:t})=>t.spaces[1]};
30
+ `;function Y({route:t}){const{formatMessage:n}=(0,b.Z)(),{method:o,handler:r,path:c}=t,l=c?Qe()(c.split("/")):[],[d="",u=""]=r?r.split("."):[],m=Ye(t.method);return e.createElement(E.k,{direction:"column",alignItems:"stretch",gap:2},e.createElement(p.Z,{variant:"delta",as:"h3"},n({id:"users-permissions.BoundRoute.title",defaultMessage:"Bound route to"}),"\xA0",e.createElement("span",null,d),e.createElement(p.Z,{variant:"delta",textColor:"primary600"},".",u)),e.createElement(E.k,{hasRadius:!0,background:"neutral0",borderColor:"neutral200",gap:0},e.createElement(Xe,{background:m.background,borderColor:m.border,padding:2},e.createElement(p.Z,{fontWeight:"bold",textColor:m.text},o)),e.createElement(L.x,{paddingLeft:2,paddingRight:2},Ve()(l,g=>e.createElement(p.Z,{key:g,textColor:g.includes(":")?"neutral600":"neutral900"},"/",g)))))}Y.defaultProps={route:{handler:"Nocontroller.error",method:"GET",path:"/there-is-no-path"}},Y.propTypes={route:y().shape({handler:y().string,method:y().string,path:y().string})};var ze=Y,Ke=()=>{const{formatMessage:t}=(0,b.Z)(),{selectedAction:n,routes:o}=Q(),r=Ge()(n.split("."),"controllers"),c=F()(o,r[0]),l=r.slice(1).join("."),d=Ue()(c)?[]:c.filter(u=>u.handler.endsWith(l));return e.createElement(S.P,{col:5,background:"neutral150",paddingTop:6,paddingBottom:6,paddingLeft:7,paddingRight:7,style:{minHeight:"100%"}},n?e.createElement(E.k,{direction:"column",alignItems:"stretch",gap:2},d.map((u,m)=>e.createElement(ze,{key:m,route:u}))):e.createElement(E.k,{direction:"column",alignItems:"stretch",gap:2},e.createElement(p.Z,{variant:"delta",as:"h3"},t({id:"users-permissions.Policies.header.title",defaultMessage:"Advanced settings"})),e.createElement(p.Z,{as:"p",textColor:"neutral600"},t({id:"users-permissions.Policies.header.hint",defaultMessage:"Select the application's actions or the plugin's actions and click on the cog icon to display the bound route"}))))},Je=(t,n,o)=>({...t,initialData:n,modifiedData:n,routes:o}),we=s(3040),ie=s.n(we),qe=s(88708),_e=s.n(qe);const et={initialData:{},modifiedData:{},routes:{},selectedAction:"",policies:[]};var tt=(t,n)=>(0,le.ZP)(t,o=>{switch(n.type){case"ON_CHANGE":{const r=n.keys.length,c=n.keys[r-1]==="enabled";if(n.value&&c){const l=_e()(n.keys,r-1).join(".");o.selectedAction=l}ie()(o,["modifiedData",...n.keys],n.value);break}case"ON_CHANGE_SELECT_ALL":{const r=["modifiedData",...n.keys],c=F()(t,r,{}),l=Object.keys(c).reduce((d,u)=>(d[u]={...c[u],enabled:n.value},d),{});ie()(o,r,l);break}case"ON_RESET":{o.modifiedData=t.initialData;break}case"ON_SUBMIT_SUCCEEDED":{o.initialData=t.modifiedData;break}case"SELECT_ACTION":{const{actionToSelect:r}=n;o.selectedAction=r===t.selectedAction?"":r;break}default:return o}});const ce=(0,e.forwardRef)(({permissions:t,routes:n},o)=>{const{formatMessage:r}=(0,b.Z)(),[c,l]=(0,e.useReducer)(tt,et,h=>Je(h,t,n));(0,e.useImperativeHandle)(o,()=>({getPermissions(){return{permissions:c.modifiedData}},resetForm(){l({type:"ON_RESET"})},setFormAfterSubmit(){l({type:"ON_SUBMIT_SUCCEEDED"})}}));const g={...c,onChange:({target:{name:h,value:f}})=>l({type:"ON_CHANGE",keys:h.split("."),value:f==="empty__string_value"?"":f}),onChangeSelectAll:({target:{name:h,value:f}})=>l({type:"ON_CHANGE_SELECT_ALL",keys:h.split("."),value:f}),onSelectedAction:h=>l({type:"SELECT_ACTION",actionToSelect:h})};return e.createElement(ee,{value:g},e.createElement(A.r,{gap:0,shadow:"filterShadow",hasRadius:!0,background:"neutral0"},e.createElement(S.P,{col:7,paddingTop:6,paddingBottom:6,paddingLeft:7,paddingRight:7},e.createElement(E.k,{direction:"column",alignItems:"stretch",gap:6},e.createElement(E.k,{direction:"column",alignItems:"stretch",gap:2},e.createElement(p.Z,{variant:"delta",as:"h2"},r({id:(0,$.Z)("Plugins.header.title"),defaultMessage:"Permissions"})),e.createElement(p.Z,{as:"p",textColor:"neutral600"},r({id:(0,$.Z)("Plugins.header.description"),defaultMessage:"Only actions bound by a route are listed below."}))),e.createElement(je,null))),e.createElement(Ke,null)))});ce.propTypes={permissions:y().object.isRequired,routes:y().object.isRequired};var de=(0,e.memo)(ce),X=s(24346);const me=X.Ry().shape({name:X.Z_().required(a.I0.required),description:X.Z_().required(a.I0.required)});var W=s(55733);const ue=()=>{const t=(0,a.lm)(),{get:n}=(0,a.kY)(),{formatAPIError:o}=(0,a.So)(W.OB),[{data:r,isLoading:c,error:l,refetch:d},{data:u,isLoading:m,error:g,refetch:h}]=(0,I.useQueries)([{queryKey:["users-permissions","permissions"],async queryFn(){const{data:{permissions:v}}=await n("/users-permissions/permissions");return v}},{queryKey:["users-permissions","routes"],async queryFn(){const{data:{routes:v}}=await n("/users-permissions/routes");return v}}]),f=async()=>{await Promise.all([d(),h()])};(0,e.useEffect)(()=>{l&&t({type:"warning",message:o(l)})},[t,l,o]),(0,e.useEffect)(()=>{g&&t({type:"warning",message:o(g)})},[t,g,o]);const i=c||m;return{permissions:r?(0,W.YX)(r):{},routes:u??{},getData:f,isLoading:i}},st=()=>{const{formatMessage:t}=(0,b.Z)(),n=(0,a.lm)(),{goBack:o}=(0,T.k6)(),{lockApp:r,unlockApp:c}=(0,a.o1)(),{isLoading:l,permissions:d,routes:u}=ue(),{trackUsage:m}=(0,a.rS)(),g=e.useRef(),{post:h}=(0,a.kY)(),f=(0,I.useMutation)(v=>h("/users-permissions/roles",v),{onError(){n({type:"warning",message:{id:"notification.error",defaultMessage:"An error occurred"}})},onSuccess(){m("didCreateRole"),n({type:"success",message:{id:(0,$.Z)("Settings.roles.created"),defaultMessage:"Role created"}}),o()}}),i=async v=>{r();const C=g.current.getPermissions();await f.mutate({...v,...C,users:[]}),c()};return e.createElement(k.o,null,e.createElement(a.SL,{name:"Roles"}),e.createElement(q.J9,{enableReinitialize:!0,initialValues:{name:"",description:""},onSubmit:i,validationSchema:me},({handleSubmit:v,values:C,handleChange:N,errors:R})=>e.createElement(a.l0,{noValidate:!0,onSubmit:v},e.createElement(x.T,{primaryAction:!l&&e.createElement(O.z,{type:"submit",loading:f.isLoading,startIcon:e.createElement(w.Z,null)},t({id:"global.save",defaultMessage:"Save"})),title:t({id:"Settings.roles.create.title",defaultMessage:"Create a role"}),subtitle:t({id:"Settings.roles.create.description",defaultMessage:"Define the rights given to the role"})}),e.createElement(B.D,null,e.createElement(E.k,{background:"neutral0",direction:"column",alignItems:"stretch",gap:7,hasRadius:!0,paddingTop:6,paddingBottom:6,paddingLeft:7,paddingRight:7,shadow:"filterShadow"},e.createElement(E.k,{direction:"column",alignItems:"stretch"},e.createElement(p.Z,{variant:"delta",as:"h2"},t({id:(0,$.Z)("EditPage.form.roles"),defaultMessage:"Role details"})),e.createElement(A.r,{gap:4},e.createElement(S.P,{col:6},e.createElement(K.o,{name:"name",value:C.name||"",onChange:N,label:t({id:"global.name",defaultMessage:"Name"}),error:R?.name?t({id:R.name}):!1,required:!0})),e.createElement(S.P,{col:6},e.createElement(J.g,{id:"description",value:C.description||"",onChange:N,label:t({id:"global.description",defaultMessage:"Description"}),error:R?.description?t({id:R.description}):!1,required:!0})))),!l&&e.createElement(de,{ref:g,permissions:d,routes:u}))))))},nt=()=>e.createElement(a.O4,{permissions:P._.createRole},e.createElement(st,null));var at=s(29439);const ot=()=>{const{formatMessage:t}=(0,b.Z)(),n=(0,a.lm)(),{lockApp:o,unlockApp:r}=(0,a.o1)(),{params:{id:c}}=(0,T.$B)("/settings/users-permissions/roles/:id"),{get:l}=(0,a.kY)(),{isLoading:d,routes:u}=ue(),{data:m,isLoading:g,refetch:h}=(0,I.useQuery)(["users-permissions","role",c],async()=>{const{data:{role:R}}=await l(`/users-permissions/roles/${c}`);return R}),f=e.useRef(),{put:i}=(0,a.kY)(),{formatAPIError:v}=(0,a.So)(),C=(0,I.useMutation)(R=>i(`/users-permissions/roles/${c}`,R),{onError(R){n({type:"warning",message:v(R)})},async onSuccess(){n({type:"success",message:{id:(0,$.Z)("Settings.roles.created"),defaultMessage:"Role edited"}}),await h()}}),N=async R=>{o();const D=f.current.getPermissions();await C.mutate({...R,...D,users:[]}),r()};return g?e.createElement(a.dO,null):e.createElement(k.o,null,e.createElement(a.SL,{name:"Roles"}),e.createElement(q.J9,{enableReinitialize:!0,initialValues:{name:m.name,description:m.description},onSubmit:N,validationSchema:me},({handleSubmit:R,values:D,handleChange:V,errors:j})=>e.createElement(a.l0,{noValidate:!0,onSubmit:R},e.createElement(x.T,{primaryAction:!d&&e.createElement(O.z,{disabled:m.code==="strapi-super-admin",type:"submit",loading:C.isLoading,startIcon:e.createElement(w.Z,null)},t({id:"global.save",defaultMessage:"Save"})),title:m.name,subtitle:m.description,navigationAction:e.createElement(a.rU,{startIcon:e.createElement(at.Z,null),to:"/settings/users-permissions/roles"},t({id:"global.back",defaultMessage:"Back"}))}),e.createElement(B.D,null,e.createElement(E.k,{background:"neutral0",direction:"column",alignItems:"stretch",gap:7,hasRadius:!0,paddingTop:6,paddingBottom:6,paddingLeft:7,paddingRight:7,shadow:"filterShadow"},e.createElement(E.k,{direction:"column",alignItems:"stretch",gap:4},e.createElement(p.Z,{variant:"delta",as:"h2"},t({id:(0,$.Z)("EditPage.form.roles"),defaultMessage:"Role details"})),e.createElement(A.r,{gap:4},e.createElement(S.P,{col:6},e.createElement(K.o,{name:"name",value:D.name||"",onChange:V,label:t({id:"global.name",defaultMessage:"Name"}),error:j?.name?t({id:j.name}):!1,required:!0})),e.createElement(S.P,{col:6},e.createElement(J.g,{id:"description",value:D.description||"",onChange:V,label:t({id:"global.description",defaultMessage:"Description"}),error:j?.description?t({id:j.description}):!1,required:!0})))),!d&&e.createElement(de,{ref:f,permissions:m.permissions,routes:u}))))))},rt=()=>e.createElement(a.O4,{permissions:P._.updateRole},e.createElement(ot,null));var lt=s(94638),it=s(96709),ct=s(99223),dt=s(56755),mt=s(33827),ge=s(94547),M=s(19786),ut=s(19406),gt=s(50428),pt=s(35658),ht=s(50563),Et=s(68625),ft=s(4038);const vt=(0,U.ZP)(gt.r)`
31
+ align-items: center;
32
+ height: ${(0,a.Q1)(32)};
33
+ display: flex;
34
+ justify-content: center;
35
+ padding: ${({theme:t})=>`${t.spaces[2]}}`};
36
+ width: ${(0,a.Q1)(32)};
37
+
38
+ svg {
39
+ height: ${(0,a.Q1)(12)};
40
+ width: ${(0,a.Q1)(12)};
41
+
42
+ path {
43
+ fill: ${({theme:t})=>t.colors.neutral500};
44
+ }
45
+ }
46
+
47
+ &:hover,
48
+ &:focus {
49
+ svg {
50
+ path {
51
+ fill: ${({theme:t})=>t.colors.neutral800};
52
+ }
53
+ }
54
+ }
55
+ `,z=({sortedRoles:t,canDelete:n,permissions:o,setRoleToDelete:r,onDelete:c})=>{const{formatMessage:l}=(0,b.Z)(),{push:d}=(0,T.k6)(),[u,m]=c,g=i=>n&&!["public","authenticated"].includes(i.type),h=i=>{r(i),m(!u)},f=i=>{d(`/settings/users-permissions/roles/${i}`)};return e.createElement(pt.p,null,t?.map(i=>e.createElement(ge.Tr,{key:i.name,...(0,a.X7)({fn:()=>f(i.id)})},e.createElement(M.Td,{width:"20%"},e.createElement(p.Z,null,i.name)),e.createElement(M.Td,{width:"50%"},e.createElement(p.Z,null,i.description)),e.createElement(M.Td,{width:"30%"},e.createElement(p.Z,null,l({id:"Roles.RoleRow.user-count",defaultMessage:"{number, plural, =0 {# user} one {# user} other {# users}}"},{number:i.nb_users}))),e.createElement(M.Td,null,e.createElement(E.k,{justifyContent:"end",...a.UW},e.createElement(a.jW,{permissions:o.updateRole},e.createElement(vt,{to:`/settings/users-permissions/roles/${i.id}`,"aria-label":l({id:"app.component.table.edit",defaultMessage:"Edit {target}"},{target:`${i.name}`})},e.createElement(Et.Z,null))),g(i)&&e.createElement(a.jW,{permissions:o.deleteRole},e.createElement(ht.h,{onClick:()=>h(i.id),noBorder:!0,icon:e.createElement(ft.Z,null),label:l({id:"global.delete-target",defaultMessage:"Delete {target}"},{target:`${i.name}`})})))))))};var yt=z;z.defaultProps={canDelete:!1},z.propTypes={onDelete:y().array.isRequired,permissions:y().object.isRequired,setRoleToDelete:y().func.isRequired,sortedRoles:y().array.isRequired,canDelete:y().bool};const Rt=async(t,n)=>{try{const{get:o}=(0,a.tg)(),{data:r}=await o("/users-permissions/roles");return n("The roles have loaded successfully"),r}catch(o){throw t({type:"warning",message:{id:"notification.error"}}),new Error(o)}},Ct=async(t,n)=>{try{const{del:o}=(0,a.tg)();await o(`/users-permissions/roles/${t}`)}catch{n({type:"warning",message:{id:"notification.error",defaultMessage:"An error occured"}})}},Pt=()=>{const{trackUsage:t}=(0,a.rS)(),{formatMessage:n,locale:o}=(0,b.Z)(),r=(0,a.lm)(),{notifyStatus:c}=(0,lt.G)(),[{query:l}]=(0,a.Kx)(),d=l?._q||"",[u,m]=(0,e.useState)(!1),[g,h]=(0,e.useState)(!1),[f,i]=(0,e.useState)();(0,a.go)();const{isLoading:v,allowedActions:{canRead:C,canDelete:N}}=(0,a.ss)({create:P._.createRole,read:P._.readRoles,update:P._.updateRole,delete:P._.deleteRole}),{isLoading:R,data:{roles:D},isFetching:V,refetch:j}=(0,I.useQuery)("get-roles",()=>Rt(r,c),{initialData:{},enabled:C}),{includes:pe}=(0,a.L0)(o,{sensitivity:"base"}),he=(0,a.Xe)(o,{sensitivity:"base"}),Ee=R||V,bt=()=>{m(!u)},At={roles:{id:(0,W.OB)("Roles.empty"),defaultMessage:"You don't have any roles yet."},search:{id:(0,W.OB)("Roles.empty.search"),defaultMessage:"No roles match the search."}},Mt=n({id:"global.roles",defaultMessage:"Roles"}),Lt=(0,I.useMutation)(Z=>Ct(Z,r),{async onSuccess(){await j()}}),Dt=async()=>{h(!0),await Lt.mutateAsync(f),m(!u),h(!1)},H=(D||[]).filter(Z=>pe(Z.name,d)||pe(Z.description,d)).sort((Z,fe)=>he.compare(Z.name,fe.name)||he.compare(Z.description,fe.description)),Zt=d&&!H.length?"search":"roles",xt=4,Ot=(D?.length||0)+1;return e.createElement(it.A,null,e.createElement(a.SL,{name:Mt}),e.createElement(k.o,{"aria-busy":Ee},e.createElement(x.T,{title:n({id:"global.roles",defaultMessage:"Roles"}),subtitle:n({id:"Settings.roles.list.description",defaultMessage:"List of roles"}),primaryAction:e.createElement(a.jW,{permissions:P._.createRole},e.createElement(a.Qj,{to:"/settings/users-permissions/roles/new",onClick:()=>t("willCreateRole"),startIcon:e.createElement(ut.Z,null),size:"S"},n({id:(0,W.OB)("List.button.roles"),defaultMessage:"Add new role"})))}),e.createElement(ct.Z,{startActions:e.createElement(a.m,{label:n({id:"app.component.search.label",defaultMessage:"Search"})})}),e.createElement(B.D,null,!C&&e.createElement(a.ZF,null),(Ee||v)&&e.createElement(a.dO,null),C&&H&&H?.length?e.createElement(dt.i,{colCount:xt,rowCount:Ot},e.createElement(mt.h,null,e.createElement(ge.Tr,null,e.createElement(M.Th,null,e.createElement(p.Z,{variant:"sigma",textColor:"neutral600"},n({id:"global.name",defaultMessage:"Name"}))),e.createElement(M.Th,null,e.createElement(p.Z,{variant:"sigma",textColor:"neutral600"},n({id:"global.description",defaultMessage:"Description"}))),e.createElement(M.Th,null,e.createElement(p.Z,{variant:"sigma",textColor:"neutral600"},n({id:"global.users",defaultMessage:"Users"}))),e.createElement(M.Th,null,e.createElement(ne.T,null,n({id:"global.actions",defaultMessage:"Actions"}))))),e.createElement(yt,{sortedRoles:H,canDelete:N,permissions:P._,setRoleToDelete:i,onDelete:[u,m]})):e.createElement(a.x7,{content:At[Zt]})),e.createElement(a.QH,{isConfirmButtonLoading:g,onConfirm:Dt,onToggleDialog:bt,isOpen:u})))},St=()=>e.createElement(a.O4,{permissions:P._.accessRoles},e.createElement(Pt,null));var Tt=()=>e.createElement(a.O4,{permissions:P._.accessRoles},e.createElement(T.rs,null,e.createElement(T.AW,{path:"/settings/users-permissions/roles/new",component:nt,exact:!0}),e.createElement(T.AW,{path:"/settings/users-permissions/roles/:id",component:rt,exact:!0}),e.createElement(T.AW,{path:"/settings/users-permissions/roles",component:St,exact:!0}),e.createElement(T.AW,{path:"",component:a.Hn})))},55733:function(ve,G,s){s.d(G,{YX:function(){return P},OB:function(){return k.Z}});var e=s(86834),a=s.n(e),P=x=>Object.keys(x).reduce((O,B)=>{const E=x[B].controllers,p=Object.keys(E).reduce((A,S)=>(a()(E[S])||(A[S]=E[S]),A),{});return a()(p)||(O[B]={controllers:p}),O},{}),k=s(48395)}}]);
@@ -23,11 +23,11 @@
23
23
  */
24
24
  padding-inline-start: ${({theme:s})=>s.spaces[2]};
25
25
  }
26
- `,oe=s=>{const r=[{id:"Settings.webhooks.events.create",defaultMessage:"Create"},{id:"Settings.webhooks.events.update",defaultMessage:"Update"},{id:"app.utils.delete",defaultMessage:"Delete"}];return s&&(r.push({id:"app.utils.publish",defaultMessage:"Publish"}),r.push({id:"app.utils.unpublish",defaultMessage:"Unpublish"})),r},Y=s=>{const r=["entry.create","entry.update","entry.delete"];return s&&r.push("entry.publish","entry.unpublish"),{entry:r,media:["media.create","media.update","media.delete"]}},J=e.createContext(),le=({children:s})=>{const{formatMessage:r}=(0,_.Z)(),{collectionTypes:d,isLoading:M}=(0,de.G)(),y=e.useMemo(()=>d.some(L=>L.options.draftAndPublish===!0),[d]),v=r({id:"Settings.webhooks.form.events",defaultMessage:"Events"});return e.createElement(J.Provider,{value:{isDraftAndPublish:y}},e.createElement(g.k,{direction:"column",alignItems:"stretch",gap:1},e.createElement(b.Q,{"aria-hidden":!0},v),M&&e.createElement(W.a,null,r({id:"Settings.webhooks.events.isLoading",defaultMessage:"Events loading"})),e.createElement(B,{"aria-label":v},s)))};le.propTypes={children:f().oneOfType([f().arrayOf(f().node),f().node]).isRequired};const q=({getHeaders:s=oe})=>{const{isDraftAndPublish:r}=e.useContext(J),{formatMessage:d}=(0,_.Z)(),M=s(r);return e.createElement(K.S,null,e.createElement(U.Z,null,e.createElement(i.g,null,e.createElement(se.T,null,d({id:"Settings.webhooks.event.select",defaultMessage:"Select event"}))),M.map(y=>["app.utils.publish","app.utils.unpublish"].includes(y.id)?e.createElement(i.g,{key:y.id,title:d({id:"Settings.webhooks.event.publish-tooltip",defaultMessage:"This event only exists for content with draft & publish enabled"})},e.createElement(re.Z,{variant:"sigma",textColor:"neutral600"},d(y))):e.createElement(i.g,{key:y.id},e.createElement(re.Z,{variant:"sigma",textColor:"neutral600"},d(y))))))};q.defaultProps={getHeaders:oe},q.propTypes={getHeaders:f().func};const ee=({providedEvents:s})=>{const{isDraftAndPublish:r}=e.useContext(J),d=s||Y(r),{values:M,handleChange:y}=(0,Q.u6)(),v="events",L=M.events,w=[],te=u(L),A=({target:{name:E,value:m}})=>{let C=new Set(L);m?C.add(E):C.delete(E),y({target:{name:v,value:Array.from(C)}})},$=({target:{name:E,value:m}})=>{let C=new Set(L);m?d[E].forEach(N=>{w.includes(N)||C.add(N)}):d[E].forEach(N=>C.delete(N)),y({target:{name:v,value:Array.from(C)}})};return e.createElement(j.X,null,Object.entries(d).map(([E,m])=>e.createElement(F,{disabledEvents:w,key:E,name:E,events:m,inputValue:te[E],handleSelect:A,handleSelectAll:$})))};ee.defaultProps={providedEvents:null},ee.propTypes={providedEvents:f().object};const ce=s=>s.replace(/-/g," ").split(" ").map(r=>r.charAt(0).toUpperCase()+r.slice(1).toLowerCase()).join(" "),F=({disabledEvents:s,name:r,events:d,inputValue:M,handleSelect:y,handleSelectAll:v})=>{const{formatMessage:L}=(0,_.Z)(),w=d.filter(m=>!s.includes(m)),te=M.length>0,A=M.length===w.length,$=({target:{name:m}})=>{v({target:{name:m,value:!A}})},E=5;return e.createElement(U.Z,null,e.createElement(i.f,null,e.createElement(X.X,{indeterminate:te&&!A,"aria-label":L({id:"global.select-all-entries",defaultMessage:"Select all entries"}),name:r,onChange:$,value:A},ce(r))),d.map(m=>e.createElement(i.f,{key:m},e.createElement(S.C,{disabled:s.includes(m),"aria-label":m,name:m,value:M.includes(m),onValueChange:C=>y({target:{name:m,value:C}})}))),d.length<E&&e.createElement(i.f,{colSpan:E-d.length}))};F.defaultProps={disabledEvents:[],events:[],inputValue:[],handleSelect(){},handleSelectAll(){}},F.propTypes={disabledEvents:f().array,events:f().array,inputValue:f().array,handleSelect:f().func,handleSelectAll:f().func,name:f().string.isRequired},P.Z={Root:le,Headers:q,Body:ee,EventRow:F}},77476:function(G,P,t){t.d(P,{Z:function(){return fe}});var e=t(32735),T=t(27649),g=t(19565),b=t(20108),W=t(53038),K=t(90769),U=t(82055),i=t(87933),se=t(41415),re=t(17e3),j=t(72850),X=t(15335),S=t(5803),Q=t(10369),ie=t(2438),f=t(66456),_=t(29439),D=t(92802),de=t(60216),u=t.n(de),B=t(67879),oe=t(9592),Y=t(36795);function J(){return e.createElement(Y.Z.Root,null,e.createElement(Y.Z.Headers,null),e.createElement(Y.Z.Body,null))}var le=t(76437),q=t(7563),ee=t(19406),ce=t(21428),F=t(90333);const s=["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"],r=({name:n,onChange:a,value:o,...c})=>{const{values:{headers:h}}=(0,D.u6)(),[O,l]=(0,e.useState)(s);(0,e.useEffect)(()=>{l(s.filter(p=>!h?.some(x=>x.key!==o&&x.key===p)))},[h,o]);const H=p=>{a({target:{name:n,value:p}})},z=p=>{l(x=>[...x,p]),H(p)};return e.createElement(ce.XU,{...c,onClear:()=>H(""),onChange:H,onCreateOption:z,placeholder:"",value:o},O.map(p=>e.createElement(F.O,{value:p,key:p},p)))};r.defaultProps={value:void 0},r.propTypes={name:u().string.isRequired,onChange:u().func.isRequired,value:u().string};var d=r,y=()=>{const{formatMessage:n}=(0,B.Z)(),{values:a,errors:o}=(0,D.u6)();return e.createElement(i.k,{direction:"column",alignItems:"stretch",gap:1},e.createElement(le.Q,null,n({id:"Settings.webhooks.form.headers",defaultMessage:"Headers"})),e.createElement(j.x,{padding:8,background:"neutral100",hasRadius:!0},e.createElement(D.F2,{validateOnChange:!1,name:"headers",render:({push:c,remove:h})=>e.createElement(X.r,{gap:4},a.headers.map((O,l)=>e.createElement(e.Fragment,{key:`${l}.${O.key}`},e.createElement(S.P,{col:6},e.createElement(D.gN,{as:d,name:`headers.${l}.key`,"aria-label":`row ${l+1} key`,label:n({id:"Settings.webhooks.key",defaultMessage:"Key"}),error:o.headers?.[l]?.key&&o.headers[l].key})),e.createElement(S.P,{col:6},e.createElement(i.k,{alignItems:"flex-end"},e.createElement(j.x,{style:{flex:1}},e.createElement(D.gN,{as:Q.o,name:`headers.${l}.value`,"aria-label":`row ${l+1} value`,label:n({id:"Settings.webhooks.value",defaultMessage:"Value"}),error:o.headers?.[l]?.value&&o.headers[l].value})),e.createElement(i.k,{paddingLeft:2,style:{alignSelf:"center"},paddingTop:o.headers?.[l]?.value?0:5},e.createElement(g.fG,{disabled:a.headers.length===1,onClick:()=>h(l),label:n({id:"Settings.webhooks.headers.remove",defaultMessage:"Remove header row {number}"},{number:l+1})})))))),e.createElement(S.P,{col:12},e.createElement(q.A,{type:"button",onClick:()=>{c({key:"",value:""})},startIcon:e.createElement(ee.Z,null)},n({id:"Settings.webhooks.create.header",defaultMessage:"Create new header"}))))})))},v=t(49372),L=t(27169),w=t(35331),te=t(8471);const A=te.ZP.svg(({theme:n,color:a})=>`
26
+ `,oe=s=>{const r=[{id:"Settings.webhooks.events.create",defaultMessage:"Create"},{id:"Settings.webhooks.events.update",defaultMessage:"Update"},{id:"app.utils.delete",defaultMessage:"Delete"}];return s&&(r.push({id:"app.utils.publish",defaultMessage:"Publish"}),r.push({id:"app.utils.unpublish",defaultMessage:"Unpublish"})),r},Y=s=>{const r=["entry.create","entry.update","entry.delete"];return s&&r.push("entry.publish","entry.unpublish"),{entry:r,media:["media.create","media.update","media.delete"]}},J=e.createContext(),le=({children:s})=>{const{formatMessage:r}=(0,_.Z)(),{collectionTypes:d,isLoading:M}=(0,de.G)(),y=e.useMemo(()=>d.some(L=>L.options.draftAndPublish===!0),[d]),v=r({id:"Settings.webhooks.form.events",defaultMessage:"Events"});return e.createElement(J.Provider,{value:{isDraftAndPublish:y}},e.createElement(g.k,{direction:"column",alignItems:"stretch",gap:1},e.createElement(b.Q,{"aria-hidden":!0},v),M&&e.createElement(W.a,null,r({id:"Settings.webhooks.events.isLoading",defaultMessage:"Events loading"})),e.createElement(B,{"aria-label":v},s)))};le.propTypes={children:f().oneOfType([f().arrayOf(f().node),f().node]).isRequired};const q=({getHeaders:s=oe})=>{const{isDraftAndPublish:r}=e.useContext(J),{formatMessage:d}=(0,_.Z)(),M=s(r);return e.createElement(K.S,null,e.createElement(U.Z,null,e.createElement(i.g,null,e.createElement(se.T,null,d({id:"Settings.webhooks.event.select",defaultMessage:"Select event"}))),M.map(y=>["app.utils.publish","app.utils.unpublish"].includes(y.id)?e.createElement(i.g,{key:y.id,title:d({id:"Settings.webhooks.event.publish-tooltip",defaultMessage:"This event only exists for content with draft & publish enabled"})},e.createElement(re.Z,{variant:"sigma",textColor:"neutral600"},d(y))):e.createElement(i.g,{key:y.id},e.createElement(re.Z,{variant:"sigma",textColor:"neutral600"},d(y))))))};q.defaultProps={getHeaders:oe},q.propTypes={getHeaders:f().func};const ee=({providedEvents:s})=>{const{isDraftAndPublish:r}=e.useContext(J),d=s||Y(r),{values:M,handleChange:y}=(0,Q.u6)(),v="events",L=M.events,w=[],te=u(L),A=({target:{name:E,value:m}})=>{let C=new Set(L);m?C.add(E):C.delete(E),y({target:{name:v,value:Array.from(C)}})},$=({target:{name:E,value:m}})=>{let C=new Set(L);m?d[E].forEach(N=>{w.includes(N)||C.add(N)}):d[E].forEach(N=>C.delete(N)),y({target:{name:v,value:Array.from(C)}})};return e.createElement(j.X,null,Object.entries(d).map(([E,m])=>e.createElement(F,{disabledEvents:w,key:E,name:E,events:m,inputValue:te[E],handleSelect:A,handleSelectAll:$})))};ee.defaultProps={providedEvents:null},ee.propTypes={providedEvents:f().object};const ce=s=>s.replace(/-/g," ").split(" ").map(r=>r.charAt(0).toUpperCase()+r.slice(1).toLowerCase()).join(" "),F=({disabledEvents:s,name:r,events:d,inputValue:M,handleSelect:y,handleSelectAll:v})=>{const{formatMessage:L}=(0,_.Z)(),w=d.filter(m=>!s.includes(m)),te=M.length>0,A=M.length===w.length,$=({target:{name:m}})=>{v({target:{name:m,value:!A}})},E=5;return e.createElement(U.Z,null,e.createElement(i.f,null,e.createElement(X.X,{indeterminate:te&&!A,"aria-label":L({id:"global.select-all-entries",defaultMessage:"Select all entries"}),name:r,onChange:$,value:A},ce(r))),d.map(m=>e.createElement(i.f,{key:m},e.createElement(S.C,{disabled:s.includes(m),"aria-label":m,name:m,value:M.includes(m),onValueChange:C=>y({target:{name:m,value:C}})}))),d.length<E&&e.createElement(i.f,{colSpan:E-d.length}))};F.defaultProps={disabledEvents:[],events:[],inputValue:[],handleSelect(){},handleSelectAll(){}},F.propTypes={disabledEvents:f().array,events:f().array,inputValue:f().array,handleSelect:f().func,handleSelectAll:f().func,name:f().string.isRequired},P.Z={Root:le,Headers:q,Body:ee,EventRow:F}},77476:function(G,P,t){t.d(P,{Z:function(){return fe}});var e=t(32735),T=t(27649),g=t(45509),b=t(20108),W=t(53038),K=t(90769),U=t(82055),i=t(87933),se=t(41415),re=t(17e3),j=t(72850),X=t(15335),S=t(5803),Q=t(10369),ie=t(2438),f=t(66456),_=t(29439),D=t(92802),de=t(60216),u=t.n(de),B=t(67879),oe=t(9592),Y=t(36795);function J(){return e.createElement(Y.Z.Root,null,e.createElement(Y.Z.Headers,null),e.createElement(Y.Z.Body,null))}var le=t(76437),q=t(7563),ee=t(19406),ce=t(21428),F=t(90333);const s=["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"],r=({name:n,onChange:a,value:o,...c})=>{const{values:{headers:h}}=(0,D.u6)(),[O,l]=(0,e.useState)(s);(0,e.useEffect)(()=>{l(s.filter(p=>!h?.some(x=>x.key!==o&&x.key===p)))},[h,o]);const H=p=>{a({target:{name:n,value:p}})},z=p=>{l(x=>[...x,p]),H(p)};return e.createElement(ce.XU,{...c,onClear:()=>H(""),onChange:H,onCreateOption:z,placeholder:"",value:o},O.map(p=>e.createElement(F.O,{value:p,key:p},p)))};r.defaultProps={value:void 0},r.propTypes={name:u().string.isRequired,onChange:u().func.isRequired,value:u().string};var d=r,y=()=>{const{formatMessage:n}=(0,B.Z)(),{values:a,errors:o}=(0,D.u6)();return e.createElement(i.k,{direction:"column",alignItems:"stretch",gap:1},e.createElement(le.Q,null,n({id:"Settings.webhooks.form.headers",defaultMessage:"Headers"})),e.createElement(j.x,{padding:8,background:"neutral100",hasRadius:!0},e.createElement(D.F2,{validateOnChange:!1,name:"headers",render:({push:c,remove:h})=>e.createElement(X.r,{gap:4},a.headers.map((O,l)=>e.createElement(e.Fragment,{key:`${l}.${O.key}`},e.createElement(S.P,{col:6},e.createElement(D.gN,{as:d,name:`headers.${l}.key`,"aria-label":`row ${l+1} key`,label:n({id:"Settings.webhooks.key",defaultMessage:"Key"}),error:o.headers?.[l]?.key&&o.headers[l].key})),e.createElement(S.P,{col:6},e.createElement(i.k,{alignItems:"flex-end"},e.createElement(j.x,{style:{flex:1}},e.createElement(D.gN,{as:Q.o,name:`headers.${l}.value`,"aria-label":`row ${l+1} value`,label:n({id:"Settings.webhooks.value",defaultMessage:"Value"}),error:o.headers?.[l]?.value&&o.headers[l].value})),e.createElement(i.k,{paddingLeft:2,style:{alignSelf:"center"},paddingTop:o.headers?.[l]?.value?0:5},e.createElement(g.fG,{disabled:a.headers.length===1,onClick:()=>h(l),label:n({id:"Settings.webhooks.headers.remove",defaultMessage:"Remove header row {number}"},{number:l+1})})))))),e.createElement(S.P,{col:12},e.createElement(q.A,{type:"button",onClick:()=>{c({key:"",value:""})},startIcon:e.createElement(ee.Z,null)},n({id:"Settings.webhooks.create.header",defaultMessage:"Create new header"}))))})))},v=t(49372),L=t(27169),w=t(35331),te=t(8471);const A=te.ZP.svg(({theme:n,color:a})=>`
27
27
  width: ${12/16}rem;
28
28
  height: ${12/16}rem;
29
29
 
30
30
  path {
31
31
  fill: ${n.colors[a]};
32
32
  }
33
- `),$=({isPending:n,statusCode:a})=>{const{formatMessage:o}=(0,B.Z)();return n?e.createElement(i.k,{gap:2,alignItems:"center"},e.createElement(A,{as:L.Z}),e.createElement(v.Z,null,o({id:"Settings.webhooks.trigger.pending",defaultMessage:"pending"}))):a>=200&&a<300?e.createElement(i.k,{gap:2,alignItems:"center"},e.createElement(A,{as:f.Z,color:"success700"}),e.createElement(v.Z,null,o({id:"Settings.webhooks.trigger.success",defaultMessage:"success"}))):a>=300?e.createElement(i.k,{gap:2,alignItems:"center"},e.createElement(A,{as:w.Z,color:"danger700"}),e.createElement(v.Z,null,o({id:"Settings.error",defaultMessage:"error"})," ",a)):null};$.propTypes={isPending:u().bool.isRequired,statusCode:u().number},$.defaultProps={statusCode:void 0};const E=({statusCode:n,message:a})=>{const{formatMessage:o}=(0,B.Z)();return n>=200&&n<300?e.createElement(i.k,{justifyContent:"flex-end"},e.createElement(v.Z,{textColor:"neutral600",ellipsis:!0},o({id:"Settings.webhooks.trigger.success.label",defaultMessage:"Trigger succeeded"}))):n>=300?e.createElement(i.k,{justifyContent:"flex-end"},e.createElement(i.k,{maxWidth:(0,g.Q1)(250),justifyContent:"flex-end",title:a},e.createElement(v.Z,{ellipsis:!0,textColor:"neutral600"},a))):null};E.propTypes={statusCode:u().number,message:u().string},E.defaultProps={statusCode:void 0,message:void 0};const m=({onCancel:n})=>{const{formatMessage:a}=(0,B.Z)();return e.createElement(i.k,{justifyContent:"flex-end"},e.createElement("button",{onClick:n,type:"button"},e.createElement(i.k,{gap:2,alignItems:"center"},e.createElement(v.Z,{textColor:"neutral400"},a({id:"Settings.webhooks.trigger.cancel",defaultMessage:"cancel"})),e.createElement(A,{as:w.Z,color:"neutral400"}))))};m.propTypes={onCancel:u().func.isRequired};const C=({isPending:n,onCancel:a,response:o})=>{const{statusCode:c,message:h}=o,{formatMessage:O}=(0,B.Z)();return e.createElement(j.x,{background:"neutral0",padding:5,shadow:"filterShadow",hasRadius:!0},e.createElement(X.r,{gap:4,style:{alignItems:"center"}},e.createElement(S.P,{col:3},e.createElement(v.Z,null,O({id:"Settings.webhooks.trigger.test",defaultMessage:"Test-trigger"}))),e.createElement(S.P,{col:3},e.createElement($,{isPending:n,statusCode:c})),e.createElement(S.P,{col:6},n?e.createElement(m,{onCancel:a}):e.createElement(E,{statusCode:c,message:h}))))};C.defaultProps={isPending:!1,onCancel(){},response:{}},C.propTypes={isPending:u().bool,onCancel:u().func,response:u().object};var N=C,k=t(24346);const ge=/(^$)|(^[A-Za-z][_0-9A-Za-z ]*$)/,Ee=/(^$)|((https?:\/\/.*)(d*)\/?(.*))/,he=({formatMessage:n})=>k.Ry().shape({name:k.Z_().required(n({id:"Settings.webhooks.validation.name.required",defaultMessage:"Name is required"})).matches(ge,n({id:"Settings.webhooks.validation.name.regex",defaultMessage:"The name must start with a letter and only contain letters, numbers, spaces and underscores"})),url:k.Z_().required(n({id:"Settings.webhooks.validation.url.required",defaultMessage:"Url is required"})).matches(Ee,n({id:"Settings.webhooks.validation.url.regex",defaultMessage:"The value must be a valid Url"})),headers:k.Vo(a=>{let o=k.IX();if(a.length===1){const{key:c,value:h}=a[0];if(!c&&!h)return o}return o.of(k.Ry().shape({key:k.Z_().required(n({id:"Settings.webhooks.validation.key",defaultMessage:"Key is required"})),value:k.Z_().required(n({id:"Settings.webhooks.validation.value",defaultMessage:"Value is required"}))}))}),events:k.IX()}),ue=({handleSubmit:n,triggerWebhook:a,isCreating:o,isTriggering:c,triggerResponse:h,data:O})=>{const{formatMessage:l}=(0,B.Z)(),[H,z]=(0,e.useState)(!1),p=(0,oe.c)(J,async()=>(await t.e(7030).then(t.bind(t,61442))).EventTableEE),x=Z=>Object.keys(Z).length?Object.entries(Z).map(([ne,ae])=>({key:ne,value:ae})):[{key:"",value:""}],R=(0,D.TA)({initialValues:{name:O?.name||"",url:O?.url||"",headers:x(O?.headers||{}),events:O?.events||[]},onSubmit(Z,{resetForm:ne,setSubmitting:ae}){n(Z),ne({values:Z}),ae(!1)},validationSchema:he({formatMessage:l}),validateOnChange:!1,validateOnBlur:!1});return p?e.createElement(D.Hy,{value:R},e.createElement(g.l0,{onSubmit:R.handleSubmit},e.createElement(U.T,{primaryAction:e.createElement(i.k,{gap:2},e.createElement(se.z,{onClick:()=>{a(),z(!0)},variant:"tertiary",startIcon:e.createElement(ie.Z,null),disabled:o||c,size:"L"},l({id:"Settings.webhooks.trigger",defaultMessage:"Trigger"})),e.createElement(se.z,{startIcon:e.createElement(f.Z,null),type:"submit",size:"L",disabled:!R.dirty,loading:R.isSubmitting},l({id:"global.save",defaultMessage:"Save"}))),title:o?l({id:"Settings.webhooks.create",defaultMessage:"Create a webhook"}):O?.name,navigationAction:e.createElement(g.rU,{startIcon:e.createElement(_.Z,null),to:"/settings/webhooks"},l({id:"global.back",defaultMessage:"Back"}))}),e.createElement(re.D,null,e.createElement(i.k,{direction:"column",alignItems:"stretch",gap:4},H&&e.createElement(N,{isPending:c,response:h,onCancel:()=>z(!1)}),e.createElement(j.x,{background:"neutral0",padding:8,shadow:"filterShadow",hasRadius:!0},e.createElement(i.k,{direction:"column",alignItems:"stretch",gap:6},e.createElement(X.r,{gap:6},e.createElement(S.P,{col:6},e.createElement(D.gN,{as:Q.o,name:"name",error:R?.errors?.name&&R.errors.name,label:l({id:"global.name",defaultMessage:"Name"}),required:!0})),e.createElement(S.P,{col:12},e.createElement(D.gN,{as:Q.o,name:"url",error:R?.errors?.url&&R.errors.url,label:l({id:"Settings.roles.form.input.url",defaultMessage:"Url"}),required:!0}))),e.createElement(y,null),e.createElement(p,null))))))):null};ue.propTypes={data:u().object,handleSubmit:u().func.isRequired,triggerWebhook:u().func.isRequired,isCreating:u().bool.isRequired,isTriggering:u().bool.isRequired,triggerResponse:u().object},ue.defaultProps={data:void 0,triggerResponse:void 0};var pe=ue;const me=n=>({...n,headers:n.headers.reduce((a,{key:o,value:c})=>(o!==""&&(a[o]=c),a),{})});var fe=()=>{const{params:{id:n}}=(0,W.$B)("/settings/webhooks/:id"),a=n==="create",{replace:o}=(0,W.k6)(),c=(0,g.lm)(),{formatAPIError:h}=(0,g.So)(),O=(0,b.useQueryClient)(),{isLoading:l}=(0,K.G)(),{put:H,get:z,post:p}=(0,g.kY)(),{isLoading:x,data:R,error:Z}=(0,b.useQuery)(["webhooks",n],async()=>{const{data:{data:I}}=await z(`/admin/webhooks/${n}`);return I},{enabled:!a});e.useEffect(()=>{Z&&c({type:"warning",message:h(Z)})},[Z,c,h]);const{isLoading:ne,data:ae,isIdle:ve,mutate:Me}=(0,b.useMutation)(()=>p(`/admin/webhooks/${n}/trigger`)),ye=()=>Me(null,{onError(I){c({type:"warning",message:h(I)})}}),Ce=(0,b.useMutation)(I=>p("/admin/webhooks",I)),Pe=(0,b.useMutation)(({id:I,body:V})=>H(`/admin/webhooks/${I}`,V)),be=async I=>{if(a){Ce.mutate(me(I),{onSuccess({data:V}){c({type:"success",message:{id:"Settings.webhooks.created"}}),o(`/settings/webhooks/${V.data.id}`)},onError(V){c({type:"warning",message:h(V)})}});return}Pe.mutate({id:n,body:me(I)},{onSuccess(){O.invalidateQueries(["webhooks",n]),c({type:"success",message:{id:"notification.form.success.fields"}})},onError(V){c({type:"warning",message:h(V)})}})};return x||l?e.createElement(g.dO,null):e.createElement(T.o,null,e.createElement(g.SL,{name:"Webhooks"}),e.createElement(pe,{data:R,handleSubmit:be,triggerWebhook:ye,isCreating:a,isTriggering:ne,isTriggerIdle:ve,triggerResponse:ae?.data.data}))}},5722:function(G,P,t){t.r(P);var e=t(32735),T=t(19565),g=t(15062),b=t(30305),W=t(77476);const K=()=>{const U=(0,g.v9)(b._);return e.createElement(T.O4,{permissions:U.settings.webhooks.create},e.createElement(W.Z,null))};P.default=K},63939:function(G,P,t){t.r(P);var e=t(32735),T=t(19565),g=t(15062),b=t(30305),W=t(77476);const K=()=>{const U=(0,g.v9)(b._);return e.createElement(T.O4,{permissions:U.settings.webhooks.update},e.createElement(W.Z,null))};P.default=K},90333:function(G,P,t){t.d(P,{O:function(){return T}});var e=t(21428);const T=e.Wx},29439:function(G,P,t){t.d(P,{Z:function(){return g}});var e=t(74512);const T=b=>(0,e.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1rem",height:"1rem",fill:"none",viewBox:"0 0 24 24",...b,children:(0,e.jsx)("path",{fill:"#212134",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"})}),g=T}}]);
33
+ `),$=({isPending:n,statusCode:a})=>{const{formatMessage:o}=(0,B.Z)();return n?e.createElement(i.k,{gap:2,alignItems:"center"},e.createElement(A,{as:L.Z}),e.createElement(v.Z,null,o({id:"Settings.webhooks.trigger.pending",defaultMessage:"pending"}))):a>=200&&a<300?e.createElement(i.k,{gap:2,alignItems:"center"},e.createElement(A,{as:f.Z,color:"success700"}),e.createElement(v.Z,null,o({id:"Settings.webhooks.trigger.success",defaultMessage:"success"}))):a>=300?e.createElement(i.k,{gap:2,alignItems:"center"},e.createElement(A,{as:w.Z,color:"danger700"}),e.createElement(v.Z,null,o({id:"Settings.error",defaultMessage:"error"})," ",a)):null};$.propTypes={isPending:u().bool.isRequired,statusCode:u().number},$.defaultProps={statusCode:void 0};const E=({statusCode:n,message:a})=>{const{formatMessage:o}=(0,B.Z)();return n>=200&&n<300?e.createElement(i.k,{justifyContent:"flex-end"},e.createElement(v.Z,{textColor:"neutral600",ellipsis:!0},o({id:"Settings.webhooks.trigger.success.label",defaultMessage:"Trigger succeeded"}))):n>=300?e.createElement(i.k,{justifyContent:"flex-end"},e.createElement(i.k,{maxWidth:(0,g.Q1)(250),justifyContent:"flex-end",title:a},e.createElement(v.Z,{ellipsis:!0,textColor:"neutral600"},a))):null};E.propTypes={statusCode:u().number,message:u().string},E.defaultProps={statusCode:void 0,message:void 0};const m=({onCancel:n})=>{const{formatMessage:a}=(0,B.Z)();return e.createElement(i.k,{justifyContent:"flex-end"},e.createElement("button",{onClick:n,type:"button"},e.createElement(i.k,{gap:2,alignItems:"center"},e.createElement(v.Z,{textColor:"neutral400"},a({id:"Settings.webhooks.trigger.cancel",defaultMessage:"cancel"})),e.createElement(A,{as:w.Z,color:"neutral400"}))))};m.propTypes={onCancel:u().func.isRequired};const C=({isPending:n,onCancel:a,response:o})=>{const{statusCode:c,message:h}=o,{formatMessage:O}=(0,B.Z)();return e.createElement(j.x,{background:"neutral0",padding:5,shadow:"filterShadow",hasRadius:!0},e.createElement(X.r,{gap:4,style:{alignItems:"center"}},e.createElement(S.P,{col:3},e.createElement(v.Z,null,O({id:"Settings.webhooks.trigger.test",defaultMessage:"Test-trigger"}))),e.createElement(S.P,{col:3},e.createElement($,{isPending:n,statusCode:c})),e.createElement(S.P,{col:6},n?e.createElement(m,{onCancel:a}):e.createElement(E,{statusCode:c,message:h}))))};C.defaultProps={isPending:!1,onCancel(){},response:{}},C.propTypes={isPending:u().bool,onCancel:u().func,response:u().object};var N=C,k=t(24346);const ge=/(^$)|(^[A-Za-z][_0-9A-Za-z ]*$)/,Ee=/(^$)|((https?:\/\/.*)(d*)\/?(.*))/,he=({formatMessage:n})=>k.Ry().shape({name:k.Z_().required(n({id:"Settings.webhooks.validation.name.required",defaultMessage:"Name is required"})).matches(ge,n({id:"Settings.webhooks.validation.name.regex",defaultMessage:"The name must start with a letter and only contain letters, numbers, spaces and underscores"})),url:k.Z_().required(n({id:"Settings.webhooks.validation.url.required",defaultMessage:"Url is required"})).matches(Ee,n({id:"Settings.webhooks.validation.url.regex",defaultMessage:"The value must be a valid Url"})),headers:k.Vo(a=>{let o=k.IX();if(a.length===1){const{key:c,value:h}=a[0];if(!c&&!h)return o}return o.of(k.Ry().shape({key:k.Z_().required(n({id:"Settings.webhooks.validation.key",defaultMessage:"Key is required"})),value:k.Z_().required(n({id:"Settings.webhooks.validation.value",defaultMessage:"Value is required"}))}))}),events:k.IX()}),ue=({handleSubmit:n,triggerWebhook:a,isCreating:o,isTriggering:c,triggerResponse:h,data:O})=>{const{formatMessage:l}=(0,B.Z)(),[H,z]=(0,e.useState)(!1),p=(0,oe.c)(J,async()=>(await t.e(7030).then(t.bind(t,61442))).EventTableEE),x=Z=>Object.keys(Z).length?Object.entries(Z).map(([ne,ae])=>({key:ne,value:ae})):[{key:"",value:""}],R=(0,D.TA)({initialValues:{name:O?.name||"",url:O?.url||"",headers:x(O?.headers||{}),events:O?.events||[]},onSubmit(Z,{resetForm:ne,setSubmitting:ae}){n(Z),ne({values:Z}),ae(!1)},validationSchema:he({formatMessage:l}),validateOnChange:!1,validateOnBlur:!1});return p?e.createElement(D.Hy,{value:R},e.createElement(g.l0,{onSubmit:R.handleSubmit},e.createElement(U.T,{primaryAction:e.createElement(i.k,{gap:2},e.createElement(se.z,{onClick:()=>{a(),z(!0)},variant:"tertiary",startIcon:e.createElement(ie.Z,null),disabled:o||c,size:"L"},l({id:"Settings.webhooks.trigger",defaultMessage:"Trigger"})),e.createElement(se.z,{startIcon:e.createElement(f.Z,null),type:"submit",size:"L",disabled:!R.dirty,loading:R.isSubmitting},l({id:"global.save",defaultMessage:"Save"}))),title:o?l({id:"Settings.webhooks.create",defaultMessage:"Create a webhook"}):O?.name,navigationAction:e.createElement(g.rU,{startIcon:e.createElement(_.Z,null),to:"/settings/webhooks"},l({id:"global.back",defaultMessage:"Back"}))}),e.createElement(re.D,null,e.createElement(i.k,{direction:"column",alignItems:"stretch",gap:4},H&&e.createElement(N,{isPending:c,response:h,onCancel:()=>z(!1)}),e.createElement(j.x,{background:"neutral0",padding:8,shadow:"filterShadow",hasRadius:!0},e.createElement(i.k,{direction:"column",alignItems:"stretch",gap:6},e.createElement(X.r,{gap:6},e.createElement(S.P,{col:6},e.createElement(D.gN,{as:Q.o,name:"name",error:R?.errors?.name&&R.errors.name,label:l({id:"global.name",defaultMessage:"Name"}),required:!0})),e.createElement(S.P,{col:12},e.createElement(D.gN,{as:Q.o,name:"url",error:R?.errors?.url&&R.errors.url,label:l({id:"Settings.roles.form.input.url",defaultMessage:"Url"}),required:!0}))),e.createElement(y,null),e.createElement(p,null))))))):null};ue.propTypes={data:u().object,handleSubmit:u().func.isRequired,triggerWebhook:u().func.isRequired,isCreating:u().bool.isRequired,isTriggering:u().bool.isRequired,triggerResponse:u().object},ue.defaultProps={data:void 0,triggerResponse:void 0};var pe=ue;const me=n=>({...n,headers:n.headers.reduce((a,{key:o,value:c})=>(o!==""&&(a[o]=c),a),{})});var fe=()=>{const{params:{id:n}}=(0,W.$B)("/settings/webhooks/:id"),a=n==="create",{replace:o}=(0,W.k6)(),c=(0,g.lm)(),{formatAPIError:h}=(0,g.So)(),O=(0,b.useQueryClient)(),{isLoading:l}=(0,K.G)(),{put:H,get:z,post:p}=(0,g.kY)(),{isLoading:x,data:R,error:Z}=(0,b.useQuery)(["webhooks",n],async()=>{const{data:{data:I}}=await z(`/admin/webhooks/${n}`);return I},{enabled:!a});e.useEffect(()=>{Z&&c({type:"warning",message:h(Z)})},[Z,c,h]);const{isLoading:ne,data:ae,isIdle:ve,mutate:Me}=(0,b.useMutation)(()=>p(`/admin/webhooks/${n}/trigger`)),ye=()=>Me(null,{onError(I){c({type:"warning",message:h(I)})}}),Ce=(0,b.useMutation)(I=>p("/admin/webhooks",I)),Pe=(0,b.useMutation)(({id:I,body:V})=>H(`/admin/webhooks/${I}`,V)),be=async I=>{if(a){Ce.mutate(me(I),{onSuccess({data:V}){c({type:"success",message:{id:"Settings.webhooks.created"}}),o(`/settings/webhooks/${V.data.id}`)},onError(V){c({type:"warning",message:h(V)})}});return}Pe.mutate({id:n,body:me(I)},{onSuccess(){O.invalidateQueries(["webhooks",n]),c({type:"success",message:{id:"notification.form.success.fields"}})},onError(V){c({type:"warning",message:h(V)})}})};return x||l?e.createElement(g.dO,null):e.createElement(T.o,null,e.createElement(g.SL,{name:"Webhooks"}),e.createElement(pe,{data:R,handleSubmit:be,triggerWebhook:ye,isCreating:a,isTriggering:ne,isTriggerIdle:ve,triggerResponse:ae?.data.data}))}},5722:function(G,P,t){t.r(P);var e=t(32735),T=t(45509),g=t(15062),b=t(30305),W=t(77476);const K=()=>{const U=(0,g.v9)(b._);return e.createElement(T.O4,{permissions:U.settings.webhooks.create},e.createElement(W.Z,null))};P.default=K},63939:function(G,P,t){t.r(P);var e=t(32735),T=t(45509),g=t(15062),b=t(30305),W=t(77476);const K=()=>{const U=(0,g.v9)(b._);return e.createElement(T.O4,{permissions:U.settings.webhooks.update},e.createElement(W.Z,null))};P.default=K},90333:function(G,P,t){t.d(P,{O:function(){return T}});var e=t(21428);const T=e.Wx},29439:function(G,P,t){t.d(P,{Z:function(){return g}});var e=t(74512);const T=b=>(0,e.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"1rem",height:"1rem",fill:"none",viewBox:"0 0 24 24",...b,children:(0,e.jsx)("path",{fill:"#212134",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"})}),g=T}}]);
@@ -1,4 +1,4 @@
1
- "use strict";(self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[]).push([[4121],{93826:function(I,h,t){t.r(h),t.d(h,{default:function(){return me}});var e=t(32735),s=t(19565),c=t(15062),m=t(30305),g=t(94638),T=t(96709),D=t(27649),S=t(82055),P=t(99223),l=t(49372),y=t(41415),j=t(17e3),U=t(72850),_=t(56755),ee=t(73269),te=t(33827),K=t(94547),i=t(19786),V=t(82884),ne=t(3685),ae=t(35658),k=t(87933),E=t(74512),F=t(8471);const $=F.ZP.div`
1
+ "use strict";(self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[]).push([[4121],{93826:function(I,h,t){t.r(h),t.d(h,{default:function(){return me}});var e=t(32735),s=t(45509),c=t(15062),m=t(30305),g=t(94638),T=t(96709),D=t(27649),S=t(82055),P=t(99223),l=t(49372),y=t(41415),j=t(17e3),U=t(72850),_=t(56755),ee=t(73269),te=t(33827),K=t(94547),i=t(19786),V=t(82884),ne=t(3685),ae=t(35658),k=t(87933),E=t(74512),F=t(8471);const $=F.ZP.div`
2
2
  background: ${({theme:o})=>o.colors.danger500};
3
3
  border: none;
4
4
  border-radius: 16px;
@@ -0,0 +1,42 @@
1
+ import React from 'react';
2
+
3
+ import { Combobox, ComboboxOption } from '@strapi/design-system';
4
+ import PropTypes from 'prop-types';
5
+ import { useIntl } from 'react-intl';
6
+
7
+ import { getDisplayName } from '../../../../../../../admin/src/content-manager/utils/getDisplayName';
8
+ import { useAdminUsers } from '../../../../../../../admin/src/hooks/useAdminUsers';
9
+
10
+ export const AssigneeFilter = ({ value, onChange }) => {
11
+ const { formatMessage } = useIntl();
12
+ const { users, isLoading } = useAdminUsers();
13
+
14
+ return (
15
+ <Combobox
16
+ value={value}
17
+ aria-label={formatMessage({
18
+ id: 'content-manager.components.Filters.usersSelect.label',
19
+ defaultMessage: 'Search and select an user to filter',
20
+ })}
21
+ onChange={onChange}
22
+ loading={isLoading}
23
+ >
24
+ {users.map((user) => {
25
+ return (
26
+ <ComboboxOption key={user.id} value={user.id.toString()}>
27
+ {getDisplayName(user, formatMessage)}
28
+ </ComboboxOption>
29
+ );
30
+ })}
31
+ </Combobox>
32
+ );
33
+ };
34
+
35
+ AssigneeFilter.propTypes = {
36
+ onChange: PropTypes.func.isRequired,
37
+ value: PropTypes.string,
38
+ };
39
+
40
+ AssigneeFilter.defaultProps = {
41
+ value: '',
42
+ };
@@ -0,0 +1,70 @@
1
+ import * as React from 'react';
2
+
3
+ import { Flex, Loader, SingleSelect, SingleSelectOption, Typography } from '@strapi/design-system';
4
+ import PropTypes from 'prop-types';
5
+ import { useIntl } from 'react-intl';
6
+
7
+ import { useReviewWorkflows } from '../../../../../pages/SettingsPage/pages/ReviewWorkflows/hooks/useReviewWorkflows';
8
+ import { getStageColorByHex } from '../../../../../pages/SettingsPage/pages/ReviewWorkflows/utils/colors';
9
+
10
+ export const StageFilter = ({ value, onChange, uid }) => {
11
+ const { formatMessage } = useIntl();
12
+ const {
13
+ workflows: [workflow],
14
+ isLoading,
15
+ } = useReviewWorkflows({ filters: { contentTypes: uid } });
16
+
17
+ return (
18
+ <SingleSelect
19
+ aria-label={formatMessage({
20
+ id: 'content-manager.components.Filters.reviewWorkflows.label',
21
+ defaultMessage: 'Search and select an workflow stage to filter',
22
+ })}
23
+ value={value}
24
+ onChange={onChange}
25
+ loading={isLoading}
26
+ // eslint-disable-next-line react/no-unstable-nested-components
27
+ customizeContent={() => (
28
+ <Flex as="span" justifyContent="space-between" alignItems="center" width="100%">
29
+ <Typography textColor="neutral800" ellipsis>
30
+ {value}
31
+ </Typography>
32
+ {isLoading ? <Loader small style={{ display: 'flex' }} /> : null}
33
+ </Flex>
34
+ )}
35
+ >
36
+ {(workflow?.stages ?? []).map(({ id, color, name }) => {
37
+ const { themeColorName } = getStageColorByHex(color);
38
+
39
+ return (
40
+ <SingleSelectOption
41
+ key={id}
42
+ startIcon={
43
+ <Flex
44
+ height={2}
45
+ background={color}
46
+ borderColor={themeColorName === 'neutral0' ? 'neutral150' : 'transparent'}
47
+ hasRadius
48
+ shrink={0}
49
+ width={2}
50
+ />
51
+ }
52
+ value={name}
53
+ >
54
+ {name}
55
+ </SingleSelectOption>
56
+ );
57
+ })}
58
+ </SingleSelect>
59
+ );
60
+ };
61
+
62
+ StageFilter.defaultProps = {
63
+ value: '',
64
+ };
65
+
66
+ StageFilter.propTypes = {
67
+ onChange: PropTypes.func.isRequired,
68
+ uid: PropTypes.string.isRequired,
69
+ value: PropTypes.string,
70
+ };
@@ -0,0 +1,71 @@
1
+ import { getTrad } from '../../../../../../../admin/src/content-manager/utils';
2
+
3
+ import { AssigneeFilter } from './AssigneeFilter';
4
+ import { StageFilter } from './StageFilter';
5
+
6
+ export const REVIEW_WORKFLOW_FILTERS = [
7
+ {
8
+ fieldSchema: {
9
+ type: 'relation',
10
+ mainField: {
11
+ name: 'name',
12
+
13
+ schema: {
14
+ type: 'string',
15
+ },
16
+ },
17
+ },
18
+
19
+ metadatas: {
20
+ customInput: StageFilter,
21
+
22
+ label: {
23
+ id: getTrad(`containers.ListPage.table-headers.reviewWorkflows.stage`),
24
+ defaultMessage: 'Review stage',
25
+ },
26
+ },
27
+
28
+ name: 'strapi_stage',
29
+ },
30
+
31
+ {
32
+ fieldSchema: {
33
+ type: 'relation',
34
+ mainField: {
35
+ name: 'id',
36
+
37
+ schema: {
38
+ type: 'int',
39
+ },
40
+ },
41
+ },
42
+
43
+ metadatas: {
44
+ customInput: AssigneeFilter,
45
+
46
+ customOperators: [
47
+ {
48
+ intlLabel: {
49
+ id: 'components.FilterOptions.FILTER_TYPES.$eq',
50
+ defaultMessage: 'is',
51
+ },
52
+ value: '$eq',
53
+ },
54
+ {
55
+ intlLabel: {
56
+ id: 'components.FilterOptions.FILTER_TYPES.$ne',
57
+ defaultMessage: 'is not',
58
+ },
59
+ value: '$ne',
60
+ },
61
+ ],
62
+
63
+ label: {
64
+ id: getTrad(`containers.ListPage.table-headers.reviewWorkflows.assignee.label`),
65
+ defaultMessage: 'Assignee',
66
+ },
67
+ },
68
+
69
+ name: 'strapi_assignee',
70
+ },
71
+ ];
@@ -1,238 +1,30 @@
1
1
  import React from 'react';
2
2
 
3
- import { Flex, Loader, SingleSelect, SingleSelectOption, Typography } from '@strapi/design-system';
4
- import {
5
- useAPIErrorHandler,
6
- useCMEditViewDataManager,
7
- useFetchClient,
8
- useNotification,
9
- } from '@strapi/helper-plugin';
10
- import { useIntl } from 'react-intl';
11
- import { useMutation } from 'react-query';
3
+ import { useCMEditViewDataManager } from '@strapi/helper-plugin';
12
4
 
13
5
  import { Information } from '../../../../../../admin/src/content-manager/pages/EditView/Information';
14
- import { useLicenseLimits } from '../../../../hooks/useLicenseLimits';
15
- import * as LimitsModal from '../../../../pages/SettingsPage/pages/ReviewWorkflows/components/LimitsModal';
16
- import {
17
- CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME,
18
- CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME,
19
- } from '../../../../pages/SettingsPage/pages/ReviewWorkflows/constants';
20
- import { useReviewWorkflows } from '../../../../pages/SettingsPage/pages/ReviewWorkflows/hooks/useReviewWorkflows';
21
- import { getStageColorByHex } from '../../../../pages/SettingsPage/pages/ReviewWorkflows/utils/colors';
22
6
 
23
- const ATTRIBUTE_NAME = 'strapi_stage';
7
+ import { AssigneeSelect } from './components/AssigneeSelect';
8
+ import { StageSelect } from './components/StageSelect';
24
9
 
25
10
  export function InformationBoxEE() {
26
11
  const {
27
- initialData,
28
12
  isCreatingEntry,
29
- layout: { uid, options },
30
- isSingleType,
31
- onChange,
13
+ layout: { options },
32
14
  } = useCMEditViewDataManager();
33
- const { put } = useFetchClient();
34
- // it is possible to rely on initialData here, because it always will
35
- // be updated at the same time when modifiedData is updated, otherwise
36
- // the entity is flagged as modified
37
- const activeWorkflowStage = initialData?.[ATTRIBUTE_NAME] ?? null;
38
- const hasReviewWorkflowsEnabled = options?.reviewWorkflows ?? false;
39
- const { formatMessage } = useIntl();
40
- const { formatAPIError } = useAPIErrorHandler();
41
- const toggleNotification = useNotification();
42
- const { getFeature } = useLicenseLimits();
43
- const [showLimitModal, setShowLimitModal] = React.useState(false);
44
-
45
- const {
46
- meta,
47
- workflows: [workflow],
48
- isLoading: isWorkflowLoading,
49
- } = useReviewWorkflows({ filters: { contentTypes: uid } });
50
-
51
- const { error, isLoading, mutateAsync } = useMutation(
52
- async ({ entityId, stageId, uid }) => {
53
- const typeSlug = isSingleType ? 'single-types' : 'collection-types';
54
-
55
- const {
56
- data: { data: createdEntity },
57
- } = await put(`/admin/content-manager/${typeSlug}/${uid}/${entityId}/stage`, {
58
- data: { id: stageId },
59
- });
60
-
61
- // initialData and modifiedData have to stay in sync, otherwise the entity would be flagged
62
- // as modified, which is what the boolean flag is for
63
- onChange({ target: { name: ATTRIBUTE_NAME, value: createdEntity[ATTRIBUTE_NAME] } }, true);
64
-
65
- return createdEntity;
66
- },
67
- {
68
- onSuccess() {
69
- toggleNotification({
70
- type: 'success',
71
- message: {
72
- id: 'content-manager.reviewWorkflows.stage.notification.saved',
73
- defaultMessage: 'Review stage updated',
74
- },
75
- });
76
- },
77
- }
78
- );
79
-
80
- const limits = getFeature('review-workflows');
81
- const formattedError = (error && formatAPIError(error)) || null;
82
-
83
- const handleStageChange = async ({ value: stageId }) => {
84
- try {
85
- /**
86
- * If the current license has a limit:
87
- * check if the total count of workflows exceeds that limit and display
88
- * the limits modal.
89
- *
90
- * If the current license does not have a limit (e.g. offline license):
91
- * do nothing (for now).
92
- *
93
- */
94
15
 
95
- if (
96
- limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME] &&
97
- parseInt(limits[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME], 10) < meta.workflowCount
98
- ) {
99
- setShowLimitModal('workflow');
100
-
101
- /**
102
- * If the current license has a limit:
103
- * check if the total count of stages exceeds that limit and display
104
- * the limits modal.
105
- *
106
- * If the current license does not have a limit (e.g. offline license):
107
- * do nothing (for now).
108
- *
109
- */
110
- } else if (
111
- limits?.[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME] &&
112
- parseInt(limits[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME], 10) <
113
- workflow.stages.length
114
- ) {
115
- setShowLimitModal('stage');
116
- } else {
117
- await mutateAsync({
118
- entityId: initialData.id,
119
- stageId,
120
- uid,
121
- });
122
- }
123
- } catch (error) {
124
- // react-query@v3: the error doesn't have to be handled here
125
- // see: https://github.com/TanStack/query/issues/121
126
- }
127
- };
128
-
129
- const { themeColorName } = activeWorkflowStage?.color
130
- ? getStageColorByHex(activeWorkflowStage?.color)
131
- : {};
16
+ const hasReviewWorkflowsEnabled = options?.reviewWorkflows ?? false;
132
17
 
133
18
  return (
134
19
  <Information.Root>
135
20
  <Information.Title />
136
-
137
21
  {hasReviewWorkflowsEnabled && !isCreatingEntry && (
138
- <SingleSelect
139
- error={formattedError}
140
- name={ATTRIBUTE_NAME}
141
- id={ATTRIBUTE_NAME}
142
- value={activeWorkflowStage?.id}
143
- onChange={(value) => handleStageChange({ value })}
144
- label={formatMessage({
145
- id: 'content-manager.reviewWorkflows.stage.label',
146
- defaultMessage: 'Review stage',
147
- })}
148
- startIcon={
149
- <Flex
150
- as="span"
151
- height={2}
152
- background={activeWorkflowStage?.color}
153
- borderColor={themeColorName === 'neutral0' ? 'neutral150' : 'transparent'}
154
- hasRadius
155
- shrink={0}
156
- width={2}
157
- marginRight="-3px"
158
- />
159
- }
160
- // eslint-disable-next-line react/no-unstable-nested-components
161
- customizeContent={() => (
162
- <Flex as="span" justifyContent="space-between" alignItems="center" width="100%">
163
- <Typography textColor="neutral800" ellipsis>
164
- {activeWorkflowStage?.name}
165
- </Typography>
166
- {isWorkflowLoading || isLoading ? <Loader small style={{ display: 'flex' }} /> : null}
167
- </Flex>
168
- )}
169
- >
170
- {workflow
171
- ? workflow.stages.map(({ id, color, name }) => {
172
- const { themeColorName } = getStageColorByHex(color);
173
-
174
- return (
175
- <SingleSelectOption
176
- startIcon={
177
- <Flex
178
- height={2}
179
- background={color}
180
- borderColor={themeColorName === 'neutral0' ? 'neutral150' : 'transparent'}
181
- hasRadius
182
- shrink={0}
183
- width={2}
184
- />
185
- }
186
- value={id}
187
- textValue={name}
188
- >
189
- {name}
190
- </SingleSelectOption>
191
- );
192
- })
193
- : []}
194
- </SingleSelect>
22
+ <>
23
+ <StageSelect />
24
+ <AssigneeSelect />
25
+ </>
195
26
  )}
196
-
197
27
  <Information.Body />
198
-
199
- <LimitsModal.Root
200
- isOpen={showLimitModal === 'workflow'}
201
- onClose={() => setShowLimitModal(false)}
202
- >
203
- <LimitsModal.Title>
204
- {formatMessage({
205
- id: 'content-manager.reviewWorkflows.workflows.limit.title',
206
- defaultMessage: 'You’ve reached the limit of workflows in your plan',
207
- })}
208
- </LimitsModal.Title>
209
-
210
- <LimitsModal.Body>
211
- {formatMessage({
212
- id: 'content-manager.reviewWorkflows.workflows.limit.body',
213
- defaultMessage: 'Delete a workflow or contact Sales to enable more workflows.',
214
- })}
215
- </LimitsModal.Body>
216
- </LimitsModal.Root>
217
-
218
- <LimitsModal.Root
219
- isOpen={showLimitModal === 'stage'}
220
- onClose={() => setShowLimitModal(false)}
221
- >
222
- <LimitsModal.Title>
223
- {formatMessage({
224
- id: 'content-manager.reviewWorkflows.stages.limit.title',
225
- defaultMessage: 'You have reached the limit of stages for this workflow in your plan',
226
- })}
227
- </LimitsModal.Title>
228
-
229
- <LimitsModal.Body>
230
- {formatMessage({
231
- id: 'content-manager.reviewWorkflows.stages.limit.body',
232
- defaultMessage: 'Try deleting some stages or contact Sales to enable more stages.',
233
- })}
234
- </LimitsModal.Body>
235
- </LimitsModal.Root>
236
28
  </Information.Root>
237
29
  );
238
30
  }