@strapi/admin 4.6.0 → 4.7.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.browserslistrc +2 -1
- package/admin/src/assets/images/onboarding-preview.png +0 -0
- package/admin/src/components/AuthenticatedApp/utils/api.js +5 -4
- package/admin/src/components/LeftMenu/index.js +9 -3
- package/admin/src/content-manager/components/CollectionTypeFormWrapper/index.js +18 -16
- package/admin/src/content-manager/components/DynamicTable/CellContent/RelationMultiple/index.js +5 -5
- package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/findLeafByPathAndReplace.js +1 -3
- package/admin/src/content-manager/components/EditViewDataManagerProvider/utils/schema.js +6 -5
- package/admin/src/content-manager/components/InputUID/index.js +4 -4
- package/admin/src/content-manager/components/Inputs/index.js +0 -2
- package/admin/src/content-manager/components/SingleTypeFormWrapper/index.js +35 -14
- package/admin/src/content-manager/hooks/useFetchContentTypeLayout/index.js +4 -3
- package/admin/src/content-manager/hooks/useLazyComponents/index.js +9 -13
- package/admin/src/content-manager/hooks/useRelation/useRelation.js +4 -4
- package/admin/src/content-manager/pages/App/useModels.js +8 -3
- package/admin/src/content-manager/pages/App/utils/getContentTypeLinks.js +3 -2
- package/admin/src/content-manager/pages/ComponentSetttingsView/index.js +4 -4
- package/admin/src/content-manager/pages/EditSettingsView/utils/api.js +4 -2
- package/admin/src/content-manager/pages/ListSettingsView/utils/api.js +4 -2
- package/admin/src/content-manager/pages/ListView/index.js +9 -9
- package/admin/src/core/utils/index.js +0 -1
- package/admin/src/hooks/useFetchEnabledPlugins/utils/api.js +3 -2
- package/admin/src/hooks/useInjectReducer/index.js +1 -0
- package/admin/src/hooks/useInjectReducer/useInjectReducer.js +19 -0
- package/admin/src/hooks/useRegenerate/index.js +4 -4
- package/admin/src/hooks/useRolesList/index.js +5 -3
- package/admin/src/hooks/useSettingsMenu/utils/defaultGlobalLinks.js +7 -0
- package/admin/src/index.js +4 -3
- package/admin/src/pages/Admin/Onboarding/constants.js +46 -0
- package/admin/src/pages/Admin/Onboarding/index.js +161 -89
- package/admin/src/pages/Admin/index.js +5 -2
- package/admin/src/pages/ProfilePage/utils/api.js +5 -3
- package/admin/src/pages/SettingsPage/{pages/Users/ListPage → components}/Filters/index.js +0 -0
- package/admin/src/pages/SettingsPage/{pages/ApiTokens/EditView/components → components/Tokens}/FormHead/index.js +36 -19
- package/admin/src/pages/SettingsPage/components/Tokens/FormiTokenContainer/LifeSpanInput.js +96 -0
- package/admin/src/pages/SettingsPage/components/Tokens/LifeSpanInput/index.js +98 -0
- package/admin/src/pages/SettingsPage/components/Tokens/Regenerate/index.js +73 -0
- package/admin/src/pages/SettingsPage/{pages/ApiTokens/ListView/DynamicTable → components/Tokens/Table}/DefaultButton/index.js +1 -1
- package/admin/src/pages/SettingsPage/{pages/ApiTokens/ListView/DynamicTable → components/Tokens/Table}/DeleteButton/index.js +1 -1
- package/admin/src/pages/SettingsPage/{pages/ApiTokens/ListView/DynamicTable → components/Tokens/Table}/ReadButton/index.js +0 -0
- package/admin/src/pages/SettingsPage/{pages/ApiTokens/ListView/DynamicTable → components/Tokens/Table}/UpdateButton/index.js +0 -0
- package/admin/src/pages/SettingsPage/components/Tokens/Table/index.js +135 -0
- package/admin/src/pages/SettingsPage/{pages/ApiTokens/EditView/components/ContentBox → components/Tokens/TokenBox}/index.js +17 -17
- package/admin/src/pages/SettingsPage/components/Tokens/TokenDescription/index.js +51 -0
- package/admin/src/pages/SettingsPage/components/Tokens/TokenName/index.js +46 -0
- package/admin/src/pages/SettingsPage/components/Tokens/TokenTypeSelect/index.js +69 -0
- package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/CollapsableContentType/index.js +5 -3
- package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/FormApiTokenContainer/index.js +52 -142
- package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/Regenerate/index.js +5 -1
- package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/index.js +43 -19
- package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/index.js +9 -16
- package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/api.js +5 -3
- package/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/components/FormTransferTokenContainer/index.js +105 -0
- package/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/components/LoadingView/index.js +50 -0
- package/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/index.js +201 -0
- package/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/utils/getDateOfExpiration.js +16 -0
- package/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/utils/index.js +4 -0
- package/admin/src/pages/SettingsPage/pages/TransferTokens/EditView/utils/schema.js +10 -0
- package/admin/src/pages/SettingsPage/pages/TransferTokens/ListView/index.js +182 -0
- package/admin/src/pages/SettingsPage/pages/TransferTokens/ListView/utils/tableHeaders.js +48 -0
- package/admin/src/pages/SettingsPage/pages/TransferTokens/ProtectedCreateView/index.js +14 -0
- package/admin/src/pages/SettingsPage/pages/TransferTokens/ProtectedEditView/index.js +14 -0
- package/admin/src/pages/SettingsPage/pages/TransferTokens/ProtectedListView/index.js +12 -0
- package/admin/src/pages/SettingsPage/pages/Users/EditPage/utils/api.js +6 -3
- package/admin/src/pages/SettingsPage/pages/Users/ListPage/ModalForm/index.js +9 -3
- package/admin/src/pages/SettingsPage/pages/Users/ListPage/index.js +1 -1
- package/admin/src/pages/SettingsPage/pages/Users/ListPage/utils/api.js +6 -3
- package/admin/src/pages/SettingsPage/pages/Users/components/SelectRoles/index.js +3 -2
- package/admin/src/pages/SettingsPage/pages/Webhooks/EditView/index.js +3 -2
- package/admin/src/pages/SettingsPage/utils/defaultRoutes.js +33 -0
- package/admin/src/permissions/defaultPermissions.js +8 -0
- package/admin/src/translations/en.json +25 -6
- package/admin/src/translations/eu.json +796 -0
- package/admin/src/translations/languageNativeNames.js +1 -0
- package/admin/src/translations/ru.json +9 -9
- package/build/1412.936ed920.chunk.js +159 -0
- package/build/1683.c8aa7b7c.chunk.js +268 -0
- package/build/19eb2dfcf2603eb55733.png +0 -0
- package/build/2607.2e48dbf8.chunk.js +66 -0
- package/build/2743.6d1632f9.chunk.js +45 -0
- package/build/3075.dc3894fe.chunk.js +108 -0
- package/build/3632.0317b618.chunk.js +138 -0
- package/build/4649.15cc0afe.chunk.js +30 -0
- package/build/{5910.a5374848.chunk.js → 4855.bd092921.chunk.js} +65 -65
- package/build/7259.aa68d808.chunk.js +1 -0
- package/build/7407.883fb1f5.chunk.js +1 -0
- package/build/9707.7290fd92.chunk.js +96 -0
- package/build/Admin-authenticatedApp.f29f6021.chunk.js +79 -0
- package/build/{Admin_homePage.79ab880c.chunk.js → Admin_homePage.b1730882.chunk.js} +1 -1
- package/build/{Admin_marketplace.eabf21b2.chunk.js → Admin_marketplace.ea0316c2.chunk.js} +2 -2
- package/build/Admin_pluginsPage.5c24f963.chunk.js +6 -0
- package/build/Admin_profilePage.59af1978.chunk.js +15 -0
- package/build/Admin_settingsPage.178dc6e3.chunk.js +178 -0
- package/build/admin-app.77a50e1f.chunk.js +112 -0
- package/build/admin-edit-roles-page.446b69dc.chunk.js +1 -0
- package/build/admin-edit-users.2ed69bfd.chunk.js +10 -0
- package/build/admin-users.fc003b10.chunk.js +11 -0
- package/build/{api-tokens-create-page.0e686c30.chunk.js → api-tokens-create-page.0db3aec1.chunk.js} +1 -1
- package/build/{api-tokens-edit-page.d6c7487b.chunk.js → api-tokens-edit-page.671e0e26.chunk.js} +1 -1
- package/build/api-tokens-list-page.7387102c.chunk.js +16 -0
- package/build/audit-logs-settings-page.c3dce30d.chunk.js +1 -0
- package/build/content-manager.42b24d46.chunk.js +1139 -0
- package/build/{content-type-builder-list-view.4243b2b1.chunk.js → content-type-builder-list-view.79e84b36.chunk.js} +1 -6
- package/build/{content-type-builder.365b6bf4.chunk.js → content-type-builder.855db321.chunk.js} +16 -15
- package/build/{email-settings-page.379552b1.chunk.js → email-settings-page.d1fcc7a3.chunk.js} +4 -9
- package/build/en-json.b0748970.chunk.js +1 -0
- package/build/eu-json.fceecd8b.chunk.js +1 -0
- package/build/i18n-settings-page.b8d8753e.chunk.js +60 -0
- package/build/index.html +1 -1
- package/build/main.1022ed01.js +4393 -0
- package/build/ru-json.aa5cd123.chunk.js +1 -0
- package/build/runtime~main.84941a97.js +2 -0
- package/build/sso-settings-page.b85ad080.chunk.js +41 -0
- package/build/transfer-tokens-create-page.16e23791.chunk.js +1 -0
- package/build/transfer-tokens-edit-page.3886c973.chunk.js +1 -0
- package/build/transfer-tokens-list-page.e8010a89.chunk.js +16 -0
- package/build/upload-settings.ef64bbf9.chunk.js +84 -0
- package/build/upload.c5730dfa.chunk.js +33 -0
- package/build/users-advanced-settings-page.fce9908e.chunk.js +8 -0
- package/build/users-email-settings-page.343d0ad2.chunk.js +23 -0
- package/build/users-providers-settings-page.e5a9a3f1.chunk.js +99 -0
- package/build/users-roles-settings-page.66312f31.chunk.js +30 -0
- package/build/webhook-edit-page.73e51e64.chunk.js +75 -0
- package/build/{webhook-list-page.f75ba3f2.chunk.js → webhook-list-page.1134f130.chunk.js} +1 -1
- package/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/ComboboxFilter/index.js +41 -0
- package/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/Modal/ActionBody.js +1 -3
- package/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/TableRows/index.js +1 -1
- package/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/hooks/useAuditLogsData.js +47 -0
- package/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/index.js +30 -31
- package/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/utils/getActionTypesDefaultMessages.js +7 -9
- package/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/utils/getDisplayedFilters.js +88 -0
- package/ee/admin/pages/SettingsPage/pages/Roles/ListPage/index.js +4 -2
- package/ee/server/migrations/audit-logs-table.js +45 -0
- package/ee/server/register.js +2 -0
- package/ee/server/services/audit-logs.js +11 -1
- package/package.json +30 -30
- package/server/bootstrap.js +2 -0
- package/server/config/admin-actions.js +48 -0
- package/server/content-types/index.js +2 -0
- package/server/content-types/transfer-token-permission.js +36 -0
- package/server/content-types/transfer-token.js +66 -0
- package/server/controllers/admin.js +16 -0
- package/server/controllers/api-token.js +4 -5
- package/server/controllers/index.js +1 -0
- package/server/controllers/transfer/index.js +13 -0
- package/server/controllers/transfer/runner.js +24 -0
- package/server/controllers/transfer/token.js +131 -0
- package/server/register.js +2 -9
- package/server/routes/index.js +2 -0
- package/server/routes/transfer.js +95 -0
- package/server/services/api-token.js +2 -3
- package/server/services/constants.js +6 -0
- package/server/services/index.js +1 -0
- package/server/services/transfer/index.js +6 -0
- package/server/services/transfer/permission.js +22 -0
- package/server/services/transfer/token.js +409 -0
- package/server/strategies/api-token.js +4 -2
- package/server/strategies/data-transfer.js +107 -0
- package/server/strategies/index.js +1 -0
- package/server/utils/index.d.ts +2 -0
- package/server/validation/api-tokens.js +1 -6
- package/server/validation/transfer/index.js +5 -0
- package/server/validation/transfer/token.js +34 -0
- package/admin/src/content-manager/components/InputJSON/FieldWrapper.js +0 -40
- package/admin/src/content-manager/components/InputJSON/Label.js +0 -35
- package/admin/src/content-manager/components/InputJSON/components.js +0 -36
- package/admin/src/content-manager/components/InputJSON/index.js +0 -223
- package/admin/src/content-manager/components/InputJSON/jsonlint.js +0 -680
- package/admin/src/core/utils/axiosInstance.js +0 -40
- package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/FormBody/index.js +0 -78
- package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/DynamicTable/index.js +0 -112
- package/build/2607.ce06608e.chunk.js +0 -66
- package/build/2743.dea372fb.chunk.js +0 -42
- package/build/3075.03ebe93d.chunk.js +0 -115
- package/build/3632.963ac97d.chunk.js +0 -138
- package/build/4318.8cb388a5.chunk.js +0 -30
- package/build/4656.a0d43cca.chunk.js +0 -159
- package/build/8633.4af74a50.chunk.js +0 -1
- package/build/9641.a311b612.chunk.js +0 -276
- package/build/9707.62831b4d.chunk.js +0 -101
- package/build/Admin-authenticatedApp.50dc27f9.chunk.js +0 -75
- package/build/Admin_pluginsPage.953e796b.chunk.js +0 -6
- package/build/Admin_profilePage.5c2efda5.chunk.js +0 -15
- package/build/Admin_settingsPage.19cfb9ca.chunk.js +0 -178
- package/build/admin-app.34295b50.chunk.js +0 -112
- package/build/admin-edit-roles-page.d50d9654.chunk.js +0 -1
- package/build/admin-edit-users.912b856d.chunk.js +0 -10
- package/build/admin-users.e36e7111.chunk.js +0 -11
- package/build/api-tokens-list-page.1cd86136.chunk.js +0 -16
- package/build/audit-logs-settings-page.308a6250.chunk.js +0 -1
- package/build/codemirror-addon-closebrackets.71aa4bbd.chunk.js +0 -2
- package/build/codemirror-addon-lint-js.405f70fb.chunk.js +0 -1
- package/build/codemirror-addon-lint.8487ad3d.chunk.js +0 -1
- package/build/codemirror-addon-mark-selection.1928c849.chunk.js +0 -1
- package/build/codemirror-css.359a2a4b.chunk.js +0 -345
- package/build/codemirror-javacript.af237b68.chunk.js +0 -1
- package/build/codemirror-theme.2fe63a16.chunk.js +0 -33
- package/build/content-manager.851f40ce.chunk.js +0 -1170
- package/build/en-json.38d182e5.chunk.js +0 -1
- package/build/i18n-settings-page.3ab28b1a.chunk.js +0 -65
- package/build/main.9f31732e.js +0 -4454
- package/build/ru-json.3b411a39.chunk.js +0 -1
- package/build/runtime~main.2b8e2318.js +0 -2
- package/build/sso-settings-page.b64a44e8.chunk.js +0 -41
- package/build/upload-settings.6c26ff37.chunk.js +0 -89
- package/build/upload.2c69d238.chunk.js +0 -38
- package/build/users-advanced-settings-page.c4270682.chunk.js +0 -13
- package/build/users-email-settings-page.60422a2f.chunk.js +0 -28
- package/build/users-providers-settings-page.e1834060.chunk.js +0 -104
- package/build/users-roles-settings-page.3ef35132.chunk.js +0 -30
- package/build/webhook-edit-page.c0080dc1.chunk.js +0 -75
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[]).push([[5162],{41513:function(re,x,t){t.d(x,{Z:function(){return We}});var e=t(32735),n=t(88425),D=t(27649),O=t(84968),S=t(5141),f=t(8888),u=t(60216),i=t.n(u),X=t(29439),m=t(66456),$=t(74512);function Te(a){return(0,$.jsx)("svg",{width:"1em",height:"1em",viewBox:"0 0 8 8",fill:"none",xmlns:"http://www.w3.org/2000/svg",...a,children:(0,$.jsx)("path",{d:"M2 .93c0-.4.45-.63.78-.41l4.6 3.06c.3.2.3.64 0 .84l-4.6 3.06A.5.5 0 012 7.07V.93z",fill:"#212134"})})}var ye=t(28356),Me=t(17e3),le=t(72850),Pe=t(41415),B=t(27677),ue=t(10369),Q=t(15335),U=t(5803),w=t(83281),j=t(5636),xe=t(76437),K=t(49372),Oe=t(83292),Ae=t(44426),G=t(8284),me=t(23940),s=t.n(me);const I=({disabledEvents:a,name:r,events:l,inputValue:o,handleChange:g,handleChangeAll:h})=>{const c=l.filter(M=>!a.includes(M)),p=o.length===c.length,E=o.length>0,v=({target:{name:M}})=>{h({target:{name:M,value:!p}})};return e.createElement("tr",null,e.createElement("td",null,e.createElement(G.X,{indeterminate:E&&!p,"aria-label":"Select all entries",name:r,onChange:v,value:p},s()(r))),l.map(M=>e.createElement("td",{key:M},e.createElement(Ae.C,{disabled:a.includes(M),"aria-label":M,name:M,value:o.includes(M),onValueChange:L=>g({target:{name:M,value:L}})}))))};I.defaultProps={disabledEvents:[],events:[],inputValue:[],handleChange(){},handleChangeAll(){}},I.propTypes={disabledEvents:i().array,events:i().array,inputValue:i().array,handleChange:i().func,handleChangeAll:i().func,name:i().string.isRequired};var k=I,T=a=>a.reduce((r,l)=>{const o=l.split(".")[0];return r[o]||(r[o]=[]),r[o].push(l),r},{});const oe=Oe.default.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:a})=>a.colors.neutral100};
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
tbody tr td:first-child {
|
|
14
|
+
padding-left: ${({theme:a})=>a.spaces[7]};
|
|
15
|
+
}
|
|
16
|
+
`,se={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"]}}},ie=({isDraftAndPublish:a})=>{const r=a?se.headers.draftAndPublish:se.headers.default,l=a?se.events.draftAndPublish:se.events.default,{formatMessage:o}=(0,j.useIntl)(),{values:g,handleChange:h}=(0,w.useFormikContext)(),c="events",p=g.events,E=[],v=T(p),M=({target:{name:b,value:ae}})=>{let F=new Set(p);ae?F.add(b):F.delete(b),h({target:{name:c,value:Array.from(F)}})},L=({target:{name:b,value:ae}})=>{let F=new Set(p);ae?l[b].forEach(z=>{E.includes(z)||F.add(z)}):l[b].forEach(z=>F.delete(z)),h({target:{name:c,value:Array.from(F)}})};return e.createElement(B.K,{spacing:1},e.createElement(xe.Q,null,o({id:"Settings.webhooks.form.events",defaultMessage:"Events"})),e.createElement(oe,null,e.createElement("thead",null,e.createElement("tr",null,e.createElement("td",null),r.map(b=>b==="app.utils.publish"||b==="app.utils.unpublish"?e.createElement("td",{key:b.id,title:o({id:"Settings.webhooks.event.publish-tooltip",defaultMessage:"This event only exists for content with draft & publish enabled"})},e.createElement(K.Z,{variant:"sigma",textColor:"neutral600"},o(b))):e.createElement("td",{key:b.id},e.createElement(K.Z,{variant:"sigma",textColor:"neutral600"},o(b)))))),e.createElement("tbody",null,Object.keys(l).map(b=>e.createElement(k,{disabledEvents:E,key:b,name:b,events:l[b],inputValue:v[b],handleChange:M,handleChangeAll:L})))))};ie.propTypes={isDraftAndPublish:i().bool.isRequired};var De=ie,ee=t(19406),J=t(87933),ge=t(7563),ke=t(42623),$e=t(90333),pe=["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 fe=({name:a,onChange:r,value:l,...o})=>{const[g,h]=(0,e.useState)(l?[...pe,l]:pe),c=E=>{r({target:{name:a,value:E}})},p=E=>{h(v=>[...v,E]),r({target:{name:a,value:E}})};return e.createElement(ke.X,{...o,onChange:c,onCreateOption:p,placeholder:"",value:l},g.map(E=>e.createElement($e.O,{value:E,key:E},E)))};fe.defaultProps={value:void 0},fe.propTypes={name:i().string.isRequired,onChange:i().func.isRequired,value:i().string};var Se=fe,Ke=()=>{const{formatMessage:a}=(0,j.useIntl)(),{values:r,errors:l}=(0,w.useFormikContext)();return e.createElement(B.K,{spacing:1},e.createElement(xe.Q,null,a({id:"Settings.webhooks.form.headers",defaultMessage:"Headers"})),e.createElement(le.x,{padding:8,background:"neutral100",hasRadius:!0},e.createElement(w.FieldArray,{validateOnChange:!1,name:"headers",render:({push:o,remove:g})=>e.createElement(Q.r,{gap:4},r.headers?.map((h,c)=>e.createElement(e.Fragment,{key:c},e.createElement(U.P,{col:6},e.createElement(w.Field,{as:Se,name:`headers.${c}.key`,"aria-label":`row ${c+1} key`,label:a({id:"Settings.webhooks.key",defaultMessage:"Key"}),error:l.headers?.[c]?.key&&a({id:l.headers[c]?.key,defaultMessage:l.headers[c]?.key})})),e.createElement(U.P,{col:6},e.createElement(J.k,{alignItems:"flex-end"},e.createElement(le.x,{style:{flex:1}},e.createElement(w.Field,{as:ue.o,"aria-label":`row ${c+1} value`,label:a({id:"Settings.webhooks.value",defaultMessage:"Value"}),name:`headers.${c}.value`,error:l.headers?.[c]?.value&&a({id:l.headers[c]?.value,defaultMessage:l.headers[c]?.value})})),e.createElement(J.k,{paddingLeft:2,style:{alignSelf:"center"},paddingTop:l.headers?.[c]?.value?0:5},e.createElement(n.RemoveRoundedButton,{onClick:()=>r.headers.length!==1&&g(c),label:a({id:"Settings.webhooks.headers.remove",defaultMessage:"Remove header row {number}"},{number:c+1})})))))),e.createElement(U.P,{col:12},e.createElement(ge.A,{type:"button",onClick:()=>{o({key:"",value:""})},startIcon:e.createElement(ee.default,null)},a({id:"Settings.webhooks.create.header",defaultMessage:"Create new header"}))))})))},he=t(35331),Z=t(27169);const de=Oe.default.svg(({theme:a,color:r})=>`
|
|
17
|
+
width: ${12/16}rem;
|
|
18
|
+
height: ${12/16}rem;
|
|
19
|
+
|
|
20
|
+
path {
|
|
21
|
+
fill: ${a.colors[r]};
|
|
22
|
+
}
|
|
23
|
+
`),Ee=({isPending:a,statusCode:r})=>{const{formatMessage:l}=(0,j.useIntl)();return a?e.createElement(B.K,{horizontal:!0,spacing:2,style:{alignItems:"center"}},e.createElement(de,{as:Z.Z}),e.createElement(K.Z,null,l({id:"Settings.webhooks.trigger.pending",defaultMessage:"pending"}))):r>=200&&r<300?e.createElement(B.K,{horizontal:!0,spacing:2,style:{alignItems:"center"}},e.createElement(de,{as:m.Z,color:"success700"}),e.createElement(K.Z,null,l({id:"Settings.webhooks.trigger.success",defaultMessage:"success"}))):r>=300?e.createElement(B.K,{horizontal:!0,spacing:2,style:{alignItems:"center"}},e.createElement(de,{as:he.default,color:"danger700"}),e.createElement(K.Z,null,l({id:"Settings.error",defaultMessage:"error"})," ",r)):null};Ee.propTypes={isPending:i().bool.isRequired,statusCode:i().number},Ee.defaultProps={statusCode:void 0};const P=({statusCode:a,message:r})=>{const{formatMessage:l}=(0,j.useIntl)();return a>=200&&a<300?e.createElement(J.k,{justifyContent:"flex-end"},e.createElement(K.Z,{textColor:"neutral600",ellipsis:!0},l({id:"Settings.webhooks.trigger.success.label",defaultMessage:"Trigger succeeded"}))):a>=300?e.createElement(J.k,{justifyContent:"flex-end"},e.createElement(J.k,{maxWidth:(0,n.pxToRem)(250),justifyContent:"flex-end",title:r},e.createElement(K.Z,{ellipsis:!0,textColor:"neutral600"},r))):null};P.propTypes={statusCode:i().number,message:i().string},P.defaultProps={statusCode:void 0,message:void 0};const ve=({onCancel:a})=>{const{formatMessage:r}=(0,j.useIntl)();return e.createElement(J.k,{justifyContent:"flex-end"},e.createElement("button",{onClick:a,type:"button"},e.createElement(B.K,{horizontal:!0,spacing:2,style:{alignItems:"center"}},e.createElement(K.Z,{textColor:"neutral400"},r({id:"Settings.webhooks.trigger.cancel",defaultMessage:"cancel"})),e.createElement(de,{as:he.default,color:"neutral400"}))))};ve.propTypes={onCancel:i().func.isRequired};const be=({isPending:a,onCancel:r,response:l})=>{const{statusCode:o,message:g}=l,{formatMessage:h}=(0,j.useIntl)();return e.createElement(le.x,{background:"neutral0",padding:5,shadow:"filterShadow",hasRadius:!0},e.createElement(Q.r,{gap:4,style:{alignItems:"center"}},e.createElement(U.P,{col:3},e.createElement(K.Z,null,h({id:"Settings.webhooks.trigger.test",defaultMessage:"Test-trigger"}))),e.createElement(U.P,{col:3},e.createElement(Ee,{isPending:a,statusCode:o})),e.createElement(U.P,{col:6},a?e.createElement(ve,{onCancel:r}):e.createElement(P,{statusCode:o,message:g}))))};be.defaultProps={isPending:!1,onCancel(){},response:{}},be.propTypes={isPending:i().bool,onCancel:i().func,response:i().object};var Fe=be,y=t(5173);const Ie=/(^$)|(^[A-Za-z][_0-9A-Za-z ]*$)/,N=/(^$)|((https?:\/\/.*)(d*)\/?(.*))/;var R=y.Ry().shape({name:y.Z_(n.translatedErrors.string).required(n.translatedErrors.required).matches(Ie,n.translatedErrors.regex),url:y.Z_(n.translatedErrors.string).required(n.translatedErrors.required).matches(N,n.translatedErrors.regex),headers:y.Vo(a=>{let r=y.IX();if(a.length===1){const{key:l,value:o}=a[0];if(!l&&!o)return r}return r.of(y.Ry().shape({key:y.Z_().required(n.translatedErrors.required),value:y.Z_().required(n.translatedErrors.required)}))}),events:y.IX()});const Y=({handleSubmit:a,data:r,triggerWebhook:l,isCreating:o,isTriggering:g,triggerResponse:h,isDraftAndPublishEvents:c})=>{const{formatMessage:p}=(0,j.useIntl)(),[E,v]=(0,e.useState)(!1);return e.createElement(w.Formik,{onSubmit:a,initialValues:{name:r?.name||"",url:r?.url||"",headers:Object.keys(r?.headers||[]).length?Object.entries(r.headers).map(([M,L])=>({key:M,value:L})):[{key:"",value:""}],events:r?.events||[]},validationSchema:R,validateOnChange:!1,validateOnBlur:!1},({handleSubmit:M,errors:L})=>e.createElement(n.Form,{noValidate:!0},e.createElement(ye.T,{primaryAction:e.createElement(B.K,{horizontal:!0,spacing:2},e.createElement(Pe.z,{onClick:()=>{l(),v(!0)},variant:"tertiary",startIcon:e.createElement(Te,null),disabled:o||g,size:"L"},p({id:"Settings.webhooks.trigger",defaultMessage:"Trigger"})),e.createElement(Pe.z,{startIcon:e.createElement(m.Z,null),onClick:M,type:"submit",size:"L"},p({id:"global.save",defaultMessage:"Save"}))),title:o?p({id:"Settings.webhooks.create",defaultMessage:"Create a webhook"}):r?.name,navigationAction:e.createElement(n.Link,{startIcon:e.createElement(X.Z,null),to:"/settings/webhooks"},p({id:"global.back",defaultMessage:"Back"}))}),e.createElement(Me.D,null,e.createElement(B.K,{spacing:4},E&&e.createElement("div",{className:"trigger-wrapper"},e.createElement(Fe,{isPending:g,response:h,onCancel:()=>v(!1)})),e.createElement(le.x,{background:"neutral0",padding:8,shadow:"filterShadow",hasRadius:!0},e.createElement(B.K,{spacing:6},e.createElement(Q.r,{gap:6},e.createElement(U.P,{col:6},e.createElement(w.Field,{as:ue.o,name:"name",error:L.name&&p({id:L.name}),label:p({id:"global.name",defaultMessage:"Name"}),required:!0})),e.createElement(U.P,{col:12},e.createElement(w.Field,{as:ue.o,name:"url",error:L.url&&p({id:L.url}),label:p({id:"Settings.roles.form.input.url",defaultMessage:"Url"}),required:!0}))),e.createElement(Ke,null),e.createElement(De,{isDraftAndPublish:c})))))))};Y.propTypes={data:i().object,handleSubmit:i().func.isRequired,triggerWebhook:i().func.isRequired,isCreating:i().bool.isRequired,isDraftAndPublishEvents:i().bool.isRequired,isTriggering:i().bool.isRequired,triggerResponse:i().object},Y.defaultProps={data:void 0,triggerResponse:void 0};var te=Y,ce=t(92891);const ne=a=>{const r={...a};return(0,ce.set)(r,"headers",Re(a.headers)),r},Re=a=>a.reduce((r,l)=>{const{key:o,value:g}=l;return o!==""?{...r,[o]:g}:r},{});var Le=ne,Ce=t(98399),We=()=>{const{params:{id:a}}=(0,S.useRouteMatch)("/settings/webhooks/:id"),{replace:r}=(0,S.useHistory)(),{lockApp:l,unlockApp:o}=(0,n.useOverlayBlocker)(),g=(0,n.useNotification)(),h=(0,O.useQueryClient)(),{isLoading:c,collectionTypes:p}=(0,f.bP)(),{post:E}=(0,n.useFetchClient)(),v=a==="create",M=(0,e.useCallback)(async V=>{const[H,{data:Ve}]=await(0,n.to)((0,n.request)(`/admin/webhooks/${V}`,{method:"GET"}));return H?(g({type:"warning",message:{id:"notification.error"}}),null):Ve},[g]),{isLoading:L,data:b}=(0,O.useQuery)(["get-webhook",a],()=>M(a),{enabled:!v}),{isLoading:ae,data:F,isIdle:z,mutate:d}=(0,O.useMutation)(()=>E(`/admin/webhooks/${a}/trigger`)),C=()=>d(null,{onError(){g({type:"warning",message:{id:"notification.error"}})}}),W=(0,O.useMutation)(V=>(0,n.request)("/admin/webhooks",{method:"POST",body:V})),q=(0,O.useMutation)(({id:V,body:H})=>(0,n.request)(`/admin/webhooks/${V}`,{method:"PUT",body:H})),Ze=async V=>{v?(l(),W.mutate(Le(V),{onSuccess(H){g({type:"success",message:{id:"Settings.webhooks.created"}}),r(`/settings/webhooks/${H.data.id}`),o()},onError(H){g({type:"warning",message:{id:"notification.error"}}),Ce.log(H),o()}})):(l(),q.mutate({id:a,body:Le(V)},{onSuccess(){h.invalidateQueries(["get-webhook",a]),g({type:"success",message:{id:"notification.form.success.fields"}}),o()},onError(H){g({type:"warning",message:{id:"notification.error"}}),Ce.log(H),o()}}))},ze=(0,e.useMemo)(()=>p.some(V=>V.options.draftAndPublish===!0),[p]);return L||c?e.createElement(n.LoadingIndicatorPage,null):e.createElement(D.o,null,e.createElement(n.SettingsPageTitle,{name:"Webhooks"}),e.createElement(te,{handleSubmit:Ze,data:b,triggerWebhook:C,isCreating:v,isTriggering:ae,isTriggerIdle:z,triggerResponse:F?.data.data,isDraftAndPublishEvents:ze}))}},33238:function(re,x,t){t.r(x);var e=t(32735),n=t(88425),D=t.n(n),O=t(72041),S=t(41513);const f=()=>e.createElement(n.CheckPagePermissions,{permissions:O.Z.settings.webhooks.create},e.createElement(S.Z,null));x.default=f},59021:function(re,x,t){t.r(x);var e=t(32735),n=t(88425),D=t.n(n),O=t(72041),S=t(41513);const f=()=>e.createElement(n.CheckPagePermissions,{permissions:O.Z.settings.webhooks.update},e.createElement(S.Z,null));x.default=f},42623:function(re,x,t){t.d(x,{h:function(){return G},X:function(){return me}});var e=t(32735),n=t(60216),D=t(57269),O=t(66436),S=t(96892),f=t(94486);const u={Close:"Close",CloseSelect:"CloseSelect",First:"First",Last:"Last",Next:"Next",Open:"Open",PageDown:"PageDown",PageUp:"PageUp",Previous:"Previous",Select:"Select",Space:"Space",Type:"Type"},i={Close:"Close",First:"First",Last:"Last",Next:"Next",Open:"Open",Previous:"Previous",Select:"Select",UpLevel:"UpLevel"};function X(s=[],I=null,k=[]){const _=String(I??"").toLowerCase();return _?s.filter(T=>T.props.children.toString().toLowerCase().includes(_)&&k.indexOf(T)<0):s}function m(s,I){if(!I&&s===f.y.DOWN)return u.Open;if(s===f.y.DOWN)return u.Next;if(s===f.y.UP)return u.Previous;if(s===f.y.HOME)return u.First;if(s===f.y.END)return u.Last;if(s===f.y.ESCAPE)return u.Close;if(s===f.y.ENTER)return u.CloseSelect;if(s===f.y.BACKSPACE||s===f.y.CLEAR||s.length===1)return u.Type}function $(s,I,k){switch(k){case u.First:return 0;case u.Last:return I;case u.Previous:return Math.max(0,s-1);case u.Next:return Math.min(I,s+1);default:return s}}function Te(s){S(s,{scrollMode:"if-needed",block:"nearest",inline:"nearest"}).forEach(({el:I,top:k,left:_})=>{I.scrollTop=k,I.scrollLeft=_})}var ye=t(87933),Me=t(93958),le=t(46406),Pe=t(72850),B=t(49372),ue=t(97405),Q=t(91225),U=t(90333),w=t(87107),j=t(76437),xe=t(67014),K=t(47851),Oe=t(27677),Ae=t(3685);const G=({children:s,clearLabel:I,creatable:k,createMessage:_,disabled:T,error:oe,hasMoreItems:se,hint:ie,id:De,label:ee,labelAction:J,loading:ge,loadingMessage:ke,noOptionsMessage:$e,onChange:Be,onClear:pe,onCreateOption:fe,onInputChange:Se,onLoadMore:Ue,placeholder:Ke,required:he,value:Z,...de})=>{const Ee=()=>s.find(d=>d.props?.value.toLowerCase()===Z.toLowerCase()).props?.children,[P,ve]=(0,e.useState)(0),[be,Fe]=(0,e.useState)(null),[y,Ie]=(0,e.useState)(s),[N,we]=(0,e.useState)(!1),[R,Y]=(0,e.useState)(""),te=(0,e.useRef)(),ce=(0,e.useRef)(!1),ne=(0,e.useRef)(),Re=(0,e.useRef)(),Le=(0,e.useRef)(),Ce=(0,e.useRef)(!0),A=(0,O.M)(De),We=`${A}-label`;if(!ee&&!de["aria-label"])throw new Error('The Combobox component needs a "label" or an "aria-label" props');(0,e.useEffect)(()=>{Ie(X(s,R))},[R,s]),(0,e.useEffect)(()=>{N&&te.current&&Te(te.current)},[P,N]),(0,e.useLayoutEffect)(()=>{Ce.current&&(Ce.current=!1)},[Z]);const a=N?`${A}-${P}`:"",r=()=>{Be(null),Y("")},l=d=>{Se&&Se(d);const C=ne.current.value;Ie(X(s,C)),ve(0),Fe(null),R!==C&&Y(C),N||v(!0,!1)},o=d=>{const{key:C}=d,W=k&&R?y.length:y.length-1,q=m(C,N);switch(Z&&!R&&C===f.y.BACKSPACE&&r(),q){case u.Next:{if(P===W){h(0);break}h($(P,W,q));break}case u.Previous:{if(P===0){h(W);break}h($(P,W,q));break}case u.Last:case u.First:{if(P===W){h(0);break}h($(P,W,q));break}case u.CloseSelect:d.preventDefault(),E(P);break;case u.Close:d.preventDefault(),v(!1);break;case u.Open:v(!0);break}},g=d=>{if(d.preventDefault(),Z&&!ce.current&&Y(""),ce.current){ce.current=!1;return}v(!1,!1)},h=d=>{ve(d)},c=d=>{h(d),E(d)},p=()=>{ce.current=!0},E=d=>{const C=y[d];if(Y(""),C){Be(C.props.value),v(!1);return}k&&(fe(R),v(!1))},v=(d,C=!0)=>{we(d),C&&ne.current.focus()},M=e.Children.toArray(y).map((d,C)=>{const W=P===C;return(0,e.cloneElement)(d,{id:`${A}-${C}`,"aria-selected":be===C,"aria-posinset":C+1,"aria-setsize":e.Children.toArray(y).length,ref(q){W&&(te.current=q)},onClick:()=>c(C),onMouseDown:p,isSelected:W})}),L=()=>{ne.current.focus(),pe&&pe(),r()},b=()=>{ne.current.focus(),v(!0)},ae=()=>{const d=y.findIndex(C=>C.props?.children===R);return R&&d===-1},F=d=>{d.preventDefault(),v(d,!0)};let z;return oe?z=`${A}-error`:ie&&(z=`${A}-hint`),e.createElement(w.g,{hint:ie,error:oe,id:A,required:he},e.createElement(Ae.T,{"aria-live":"polite","aria-atomic":"false","aria-relevant":"additions text"},Z),e.createElement(Oe.K,{spacing:ee||ie||oe?1:0},ee&&e.createElement(j.Q,{action:J},ee),e.createElement(Q.d8,{ref:Re,$disabled:T,hasError:oe},e.createElement(Q.fv,{wrap:"wrap"},!R&&Z&&e.createElement(Q.K7,{id:`${A}-selected-value`},e.createElement(B.Z,null,Ee())),e.createElement(Q.II,{"aria-activedescendant":a,"aria-autocomplete":"list","aria-controls":`${A}-listbox`,"aria-disabled":T,"aria-expanded":N,"aria-haspopup":"listbox","aria-describedby":z,autoComplete:"off",autoCorrect:"off",id:A,onBlur:T?void 0:g,onClick:T?void 0:F,onInput:T?void 0:l,onKeyDown:T?void 0:o,placeholder:Z?"":Ke,readOnly:T,ref:ne,required:he,role:"combobox",spellCheck:"off",type:"text",value:R})),e.createElement(ye.k,null,(Z||R)&&e.createElement(Me.zb,{id:`${A}-clear`,"aria-label":I,disabled:T,paddingLeft:3,as:"button",onClick:L,type:"button"},e.createElement(D.Cross,null)),e.createElement(Me.AV,{disabled:T,paddingLeft:3,"aria-hidden":!0,as:"button",onClick:b,tabIndex:-1,type:"button"},e.createElement(D.CarretDown,null)))),e.createElement(xe.J,null),e.createElement(K.c,null)),N&&e.createElement(le.J2,{id:`${A}-popover`,source:Re,spacing:4,fullWidth:!0,intersectionId:`${A}-listbox-popover-intersection`,onReachEnd:se&&!ge?Ue:void 0},e.createElement("div",{role:"listbox",ref:Le,id:`${A}-listbox`,"aria-labelledby":ee?We:void 0},(Boolean(y.length)||k)&&e.createElement(e.Fragment,null,M,ae()&&k&&e.createElement(U.O,{isSelected:P===y.length,ref:d=>{P===y.length&&(te.current=d)},onMouseDown:p,onClick:()=>E(),taindex:0},_(R))),!y.length&&!k&&!ge&&e.createElement(Pe.x,{paddingLeft:4,paddingRight:4,paddingTop:2,paddingBottom:2,ref:te},e.createElement(B.Z,{textColor:"neutral800"},$e(R))),ge&&e.createElement(ye.k,{justifyContent:"center",alignItems:"center",paddingTop:2,paddingBottom:2},e.createElement(ue.a,{small:!0},ke)))))},me=s=>e.createElement(G,{...s,creatable:!0});G.defaultProps={"aria-label":void 0,clearLabel:"clear",creatable:!1,createMessage:s=>`Create "${s}"`,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},me.defaultProps=G.defaultProps,G.propTypes={"aria-label":n.string,children:n.oneOfType([n.arrayOf(n.node),n.node]),clearLabel:n.string,creatable:n.bool,createMessage:n.func,disabled:n.bool,error:n.string,hasMoreItems:n.bool,id:n.string,hint:n.oneOfType([n.string,n.node,n.arrayOf(n.node)]),label:n.string,labelAction:n.element,loading:n.bool,loadingMessage:n.string,noOptionsMessage:n.func,onChange:n.func.isRequired,onClear:n.func,onCreateOption:n.func,onInputChange:n.func,onLoadMore:n.func,placeholder:n.string,value:n.string},me.propTypes={...G.propTypes,onCreateOption:n.func.isRequired}},90333:function(re,x,t){t.d(x,{O:function(){return S}});var e=t(32735),n=t(60216),D=t(49372),O=t(91225);const S=(0,e.forwardRef)(({isSelected:f,children:u,...i},X)=>e.createElement(O.Zq,{hasRadius:!0,paddingLeft:4,paddingRight:4,paddingTop:2,paddingBottom:2,role:"option",background:"neutral0",isSelected:f,ref:X,...i},e.createElement(D.Z,{textColor:f?"primary600":"neutral800",fontWeight:f?"bold":null},u)));S.defaultProps={isSelected:!1},S.propTypes={children:n.oneOfType([n.string,n.number]).isRequired,isSelected:n.bool},S.displayName="ComboboxOption"},91225:function(re,x,t){t.d(x,{II:function(){return i},K7:function(){return f},Zq:function(){return X},d8:function(){return S},fv:function(){return u}});var e=t(83292),n=t(72850),D=t(87933),O=t(30350);const S=(0,e.default)(D.k)`
|
|
24
|
+
position: relative;
|
|
25
|
+
border: 1px solid ${({theme:m,hasError:$})=>$?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:$})=>$?`
|
|
32
|
+
color: ${m.colors.neutral600};
|
|
33
|
+
background: ${m.colors.neutral150};
|
|
34
|
+
`:void 0}
|
|
35
|
+
|
|
36
|
+
${(0,O.k3)()}
|
|
37
|
+
`,f=e.default.div`
|
|
38
|
+
padding: 1px 2px;
|
|
39
|
+
grid-area: 1 / 1 / 2 / 3;
|
|
40
|
+
`,u=(0,e.default)(D.k)`
|
|
41
|
+
display: grid;
|
|
42
|
+
flex: 1 1 0%;
|
|
43
|
+
position: relative;
|
|
44
|
+
`,i=e.default.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
|
+
`,X=(0,e.default)(n.x)`
|
|
66
|
+
width: 100%;
|
|
67
|
+
border: none;
|
|
68
|
+
text-align: left;
|
|
69
|
+
outline-offset: -3px;
|
|
70
|
+
${({isSelected:m,theme:$})=>m&&`background: ${$.colors.primary100};`}
|
|
71
|
+
|
|
72
|
+
&:hover {
|
|
73
|
+
background: ${({theme:m})=>m.colors.primary100};
|
|
74
|
+
}
|
|
75
|
+
`},27169:function(re,x,t){t.d(x,{Z:function(){return n}});var e=t(74512);function n(D){return(0,e.jsx)("svg",{width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...D,children:(0,e.jsx)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12.057 18c.552 0 1 .451 1 .997v4.006a1 1 0 01-.941.995l-.059.002c-.552 0-1-.451-1-.997v-4.006a1 1 0 01.941-.995l.06-.002zm-3.06-.736l.055.03c.478.276.64.89.367 1.364l-2.002 3.468a1 1 0 01-1.31.394l-.055-.03a1.002 1.002 0 01-.368-1.363l2.003-3.469a1 1 0 011.31-.394zm7.42.394l2.002 3.468a1 1 0 01-.314 1.331l-.053.033a1.002 1.002 0 01-1.365-.363l-2.003-3.469a1 1 0 01.314-1.33l.054-.034a1.002 1.002 0 011.364.364zm-9.548-2.66l.033.054c.276.478.11 1.091-.364 1.364L3.07 18.42a1 1 0 01-1.331-.314l-.033-.053a1.001 1.001 0 01.364-1.365l3.468-2.003a1 1 0 011.33.314zm11.79-.313l3.468 2.002a1 1 0 01.393 1.31l-.03.055c-.276.478-.89.64-1.363.367l-3.469-2.003a1 1 0 01-.394-1.309l.03-.055c.276-.479.89-.64 1.364-.367zm4.344-3.628a1 1 0 01.995.941l.002.06c0 .551-.451 1-.997 1h-4.006a1 1 0 01-.995-.942L18 12.057c0-.552.451-1 .997-1h4.006zm-18 0a1 1 0 01.995.941l.002.06c0 .551-.451 1-.998 1H.998a1 1 0 01-.996-.942L0 12.057c0-.552.451-1 .998-1h4.004zm17.454-5.059l.033.054c.277.478.11 1.091-.363 1.365l-3.469 2.002a1 1 0 01-1.33-.314l-.034-.053a1.002 1.002 0 01.364-1.365l3.468-2.003a1 1 0 011.331.314zM3.07 5.684l3.468 2.003a1 1 0 01.394 1.31l-.03.055c-.276.478-.89.64-1.364.367L2.07 7.417a1 1 0 01-.394-1.31l.03-.055c.276-.479.89-.64 1.364-.368zm14.926-4.008l.056.03c.478.276.64.89.367 1.364l-2.003 3.468a1 1 0 01-1.309.394l-.055-.03a1.002 1.002 0 01-.367-1.364l2.002-3.468a1 1 0 011.31-.394zm-10.58.394L9.42 5.538a1 1 0 01-.314 1.33l-.053.034a1.002 1.002 0 01-1.365-.364L5.684 3.07a1 1 0 01.314-1.331l.054-.033a1.002 1.002 0 011.365.364zM12.058 0c.552 0 1 .451 1 .998v4.004a1 1 0 01-.941.996L12.057 6c-.552 0-1-.451-1-.998V.998a1 1 0 01.941-.996l.06-.002z",fill:"#212134"})})}}}]);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[]).push([[4121],{74767:function(We,S,t){t.r(S),t.d(S,{default:function(){return ge}});var e=t(32735),s=t(88425),W=t(
|
|
1
|
+
"use strict";(self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[]).push([[4121],{74767:function(We,S,t){t.r(S),t.d(S,{default:function(){return ge}});var e=t(32735),s=t(88425),W=t(72041),B=t(5141),U=t(5636),F=t(96709),X=t(28356),j=t(99223),J=t(17e3),Q=t(9695),M=t(87933),Y=t(27677),A=t(50563),x=t(44426),q=t(94745),_=t(73269),ee=t(76330),$=t(29005),d=t(66735),te=t(3594),g=t(49372),H=t(41415),ne=t(3685),b=t(60216),P=t(83292),K=t(72850);const y=P.default.div`
|
|
2
2
|
background: ${({theme:a})=>a.colors.danger500};
|
|
3
3
|
border: none;
|
|
4
4
|
border-radius: 16px;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
3
|
+
import { useIntl } from 'react-intl';
|
|
4
|
+
import { Combobox, ComboboxOption } from '@strapi/design-system';
|
|
5
|
+
|
|
6
|
+
const ComboboxFilter = ({ value, options, onChange }) => {
|
|
7
|
+
const { formatMessage } = useIntl();
|
|
8
|
+
const ariaLabel = formatMessage({
|
|
9
|
+
id: 'Settings.permissions.auditLogs.filter.aria-label',
|
|
10
|
+
defaultMessage: 'Search and select an option to filter',
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
return (
|
|
14
|
+
<Combobox aria-label={ariaLabel} value={value} onChange={onChange}>
|
|
15
|
+
{options.map(({ label, customValue }) => {
|
|
16
|
+
return (
|
|
17
|
+
<ComboboxOption key={customValue} value={customValue}>
|
|
18
|
+
{label}
|
|
19
|
+
</ComboboxOption>
|
|
20
|
+
);
|
|
21
|
+
})}
|
|
22
|
+
</Combobox>
|
|
23
|
+
);
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
ComboboxFilter.defaultProps = {
|
|
27
|
+
value: null,
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
ComboboxFilter.propTypes = {
|
|
31
|
+
value: PropTypes.string,
|
|
32
|
+
options: PropTypes.arrayOf(
|
|
33
|
+
PropTypes.shape({
|
|
34
|
+
label: PropTypes.string.isRequired,
|
|
35
|
+
customValue: PropTypes.string.isRequired,
|
|
36
|
+
}).isRequired
|
|
37
|
+
).isRequired,
|
|
38
|
+
onChange: PropTypes.func.isRequired,
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export default ComboboxFilter;
|
|
@@ -7,8 +7,7 @@ import { Box } from '@strapi/design-system/Box';
|
|
|
7
7
|
import { Flex } from '@strapi/design-system/Flex';
|
|
8
8
|
import { Typography } from '@strapi/design-system/Typography';
|
|
9
9
|
import { JSONInput } from '@strapi/design-system/JSONInput';
|
|
10
|
-
import {
|
|
11
|
-
import getDefaultMessage from '../utils/getActionTypesDefaultMessages';
|
|
10
|
+
import { getDefaultMessage } from '../utils/getActionTypesDefaultMessages';
|
|
12
11
|
import ActionItem from './ActionItem';
|
|
13
12
|
|
|
14
13
|
const ActionBody = ({ status, data, formattedDate }) => {
|
|
@@ -83,7 +82,6 @@ const ActionBody = ({ status, data, formattedDate }) => {
|
|
|
83
82
|
<JSONInput
|
|
84
83
|
value={JSON.stringify(payload, null, 2)}
|
|
85
84
|
disabled
|
|
86
|
-
height={pxToRem(150)}
|
|
87
85
|
label={formatMessage({
|
|
88
86
|
id: 'Settings.permissions.auditLogs.payload',
|
|
89
87
|
defaultMessage: 'Payload',
|
|
@@ -8,7 +8,7 @@ import { Tbody, Td, Tr } from '@strapi/design-system/Table';
|
|
|
8
8
|
import Eye from '@strapi/icons/Eye';
|
|
9
9
|
import { onRowClick, stopPropagation } from '@strapi/helper-plugin';
|
|
10
10
|
import useFormatTimeStamp from '../hooks/useFormatTimeStamp';
|
|
11
|
-
import getDefaultMessage from '../utils/getActionTypesDefaultMessages';
|
|
11
|
+
import { getDefaultMessage } from '../utils/getActionTypesDefaultMessages';
|
|
12
12
|
|
|
13
13
|
const TableRows = ({ headers, rows, onOpenModal }) => {
|
|
14
14
|
const { formatMessage } = useIntl();
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { useQuery } from 'react-query';
|
|
2
|
+
import { useNotification, useFetchClient } from '@strapi/helper-plugin';
|
|
3
|
+
import { useLocation } from 'react-router-dom';
|
|
4
|
+
|
|
5
|
+
const useAuditLogsData = ({ canRead }) => {
|
|
6
|
+
const { get } = useFetchClient();
|
|
7
|
+
const { search } = useLocation();
|
|
8
|
+
const toggleNotification = useNotification();
|
|
9
|
+
|
|
10
|
+
const fetchAuditLogsPage = async ({ queryKey }) => {
|
|
11
|
+
const search = queryKey[1];
|
|
12
|
+
const { data } = await get(`/admin/audit-logs${search}`);
|
|
13
|
+
|
|
14
|
+
return data;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const fetchAllUsers = async () => {
|
|
18
|
+
const { data } = await get(`/admin/users`);
|
|
19
|
+
|
|
20
|
+
return data;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const queryOptions = {
|
|
24
|
+
enabled: canRead,
|
|
25
|
+
keepPreviousData: true,
|
|
26
|
+
retry: false,
|
|
27
|
+
staleTime: 1000 * 20, // 20 seconds
|
|
28
|
+
onError: (error) => toggleNotification({ type: 'warning', message: error.message }),
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const {
|
|
32
|
+
data: auditLogs,
|
|
33
|
+
isLoading,
|
|
34
|
+
isError: isAuditLogsError,
|
|
35
|
+
} = useQuery(['auditLogs', search], fetchAuditLogsPage, queryOptions);
|
|
36
|
+
|
|
37
|
+
const { data: users, isError: isUsersError } = useQuery(['auditLogsUsers'], fetchAllUsers, {
|
|
38
|
+
...queryOptions,
|
|
39
|
+
staleTime: 2 * (1000 * 60), // 2 minutes
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
const hasError = isAuditLogsError || isUsersError;
|
|
43
|
+
|
|
44
|
+
return { auditLogs, users: users?.data, isLoading, hasError };
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export default useAuditLogsData;
|
|
@@ -4,52 +4,38 @@ import {
|
|
|
4
4
|
SettingsPageTitle,
|
|
5
5
|
DynamicTable,
|
|
6
6
|
useRBAC,
|
|
7
|
-
useNotification,
|
|
8
7
|
useFocusWhenNavigate,
|
|
9
|
-
useFetchClient,
|
|
10
8
|
useQueryParams,
|
|
9
|
+
AnErrorOccurred,
|
|
11
10
|
} from '@strapi/helper-plugin';
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
import {
|
|
12
|
+
Box,
|
|
13
|
+
HeaderLayout,
|
|
14
|
+
ContentLayout,
|
|
15
|
+
ActionLayout,
|
|
16
|
+
Layout,
|
|
17
|
+
Main,
|
|
18
|
+
} from '@strapi/design-system';
|
|
16
19
|
import adminPermissions from '../../../../../../../admin/src/permissions';
|
|
17
20
|
import TableRows from './TableRows';
|
|
18
21
|
import tableHeaders from './utils/tableHeaders';
|
|
19
22
|
import PaginationFooter from './PaginationFooter';
|
|
20
23
|
import Modal from './Modal';
|
|
24
|
+
import Filters from '../../../../../../../admin/src/pages/SettingsPage/components/Filters';
|
|
25
|
+
import getDisplayedFilters from './utils/getDisplayedFilters';
|
|
26
|
+
import useAuditLogsData from './hooks/useAuditLogsData';
|
|
21
27
|
|
|
22
28
|
const ListView = () => {
|
|
23
29
|
const { formatMessage } = useIntl();
|
|
24
|
-
const toggleNotification = useNotification();
|
|
25
30
|
const {
|
|
26
31
|
allowedActions: { canRead },
|
|
27
32
|
} = useRBAC(adminPermissions.settings.auditLogs);
|
|
28
|
-
const { get } = useFetchClient();
|
|
29
|
-
const { search } = useLocation();
|
|
30
33
|
const [{ query }, setQuery] = useQueryParams();
|
|
34
|
+
const { auditLogs, users, isLoading, hasError } = useAuditLogsData({ canRead });
|
|
31
35
|
|
|
32
36
|
useFocusWhenNavigate();
|
|
33
37
|
|
|
34
|
-
const
|
|
35
|
-
const search = queryKey[1];
|
|
36
|
-
const { data } = await get(`/admin/audit-logs${search}`);
|
|
37
|
-
|
|
38
|
-
return data;
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
const { data, isLoading } = useQuery(['auditLogs', search], fetchAuditLogsPage, {
|
|
42
|
-
enabled: canRead,
|
|
43
|
-
keepPreviousData: true,
|
|
44
|
-
retry: false,
|
|
45
|
-
staleTime: 1000 * 10,
|
|
46
|
-
onError() {
|
|
47
|
-
toggleNotification({
|
|
48
|
-
type: 'warning',
|
|
49
|
-
message: { id: 'notification.error', defaultMessage: 'An error occured' },
|
|
50
|
-
});
|
|
51
|
-
},
|
|
52
|
-
});
|
|
38
|
+
const displayedFilters = getDisplayedFilters({ formatMessage, users });
|
|
53
39
|
|
|
54
40
|
const title = formatMessage({
|
|
55
41
|
id: 'global.auditLogs',
|
|
@@ -64,6 +50,18 @@ const ListView = () => {
|
|
|
64
50
|
},
|
|
65
51
|
}));
|
|
66
52
|
|
|
53
|
+
if (hasError) {
|
|
54
|
+
return (
|
|
55
|
+
<Layout>
|
|
56
|
+
<ContentLayout>
|
|
57
|
+
<Box paddingTop={8}>
|
|
58
|
+
<AnErrorOccurred />
|
|
59
|
+
</Box>
|
|
60
|
+
</ContentLayout>
|
|
61
|
+
</Layout>
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
|
|
67
65
|
return (
|
|
68
66
|
<Main aria-busy={isLoading}>
|
|
69
67
|
<SettingsPageTitle name={title} />
|
|
@@ -74,21 +72,22 @@ const ListView = () => {
|
|
|
74
72
|
defaultMessage: 'Logs of all the activities that happened in your environment',
|
|
75
73
|
})}
|
|
76
74
|
/>
|
|
75
|
+
<ActionLayout startActions={<Filters displayedFilters={displayedFilters} />} />
|
|
77
76
|
<ContentLayout canRead={canRead}>
|
|
78
77
|
<DynamicTable
|
|
79
78
|
contentType="Audit logs"
|
|
80
79
|
headers={headers}
|
|
81
|
-
rows={
|
|
80
|
+
rows={auditLogs?.results || []}
|
|
82
81
|
withBulkActions
|
|
83
82
|
isLoading={isLoading}
|
|
84
83
|
>
|
|
85
84
|
<TableRows
|
|
86
85
|
headers={headers}
|
|
87
|
-
rows={
|
|
86
|
+
rows={auditLogs?.results || []}
|
|
88
87
|
onOpenModal={(id) => setQuery({ id })}
|
|
89
88
|
/>
|
|
90
89
|
</DynamicTable>
|
|
91
|
-
<PaginationFooter pagination={
|
|
90
|
+
<PaginationFooter pagination={auditLogs?.pagination} />
|
|
92
91
|
</ContentLayout>
|
|
93
92
|
{query?.id && <Modal handleClose={() => setQuery({ id: null }, 'remove')} logId={query.id} />}
|
|
94
93
|
</Main>
|
package/ee/admin/pages/SettingsPage/pages/AuditLogs/ListView/utils/getActionTypesDefaultMessages.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
const actionTypes = {
|
|
2
|
-
'entry.create': 'Create entry ({model})',
|
|
3
|
-
'entry.update': 'Update entry ({model})',
|
|
4
|
-
'entry.delete': 'Delete entry ({model})',
|
|
5
|
-
'entry.publish': 'Publish entry ({model})',
|
|
6
|
-
'entry.unpublish': 'Unpublish entry ({model})',
|
|
1
|
+
export const actionTypes = {
|
|
2
|
+
'entry.create': 'Create entry{model, select, undefined {} other { ({model})}}',
|
|
3
|
+
'entry.update': 'Update entry{model, select, undefined {} other { ({model})}}',
|
|
4
|
+
'entry.delete': 'Delete entry{model, select, undefined {} other { ({model})}}',
|
|
5
|
+
'entry.publish': 'Publish entry{model, select, undefined {} other { ({model})}}',
|
|
6
|
+
'entry.unpublish': 'Unpublish entry{model, select, undefined {} other { ({model})}}',
|
|
7
7
|
'media.create': 'Create media',
|
|
8
8
|
'media.update': 'Update media',
|
|
9
9
|
'media.delete': 'Delete media',
|
|
@@ -29,8 +29,6 @@ const actionTypes = {
|
|
|
29
29
|
'permission.delete': 'Delete permission',
|
|
30
30
|
};
|
|
31
31
|
|
|
32
|
-
const getDefaultMessage = (value) => {
|
|
32
|
+
export const getDefaultMessage = (value) => {
|
|
33
33
|
return actionTypes[value] || value;
|
|
34
34
|
};
|
|
35
|
-
|
|
36
|
-
export default getDefaultMessage;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import ComboboxFilter from '../ComboboxFilter';
|
|
2
|
+
import { getDefaultMessage, actionTypes } from './getActionTypesDefaultMessages';
|
|
3
|
+
|
|
4
|
+
const customOperators = [
|
|
5
|
+
{
|
|
6
|
+
intlLabel: { id: 'components.FilterOptions.FILTER_TYPES.$eq', defaultMessage: 'is' },
|
|
7
|
+
value: '$eq',
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
intlLabel: { id: 'components.FilterOptions.FILTER_TYPES.$ne', defaultMessage: 'is not' },
|
|
11
|
+
value: '$ne',
|
|
12
|
+
},
|
|
13
|
+
];
|
|
14
|
+
|
|
15
|
+
const getDisplayedFilters = ({ formatMessage, users }) => {
|
|
16
|
+
const actionOptions = Object.keys(actionTypes).map((action) => {
|
|
17
|
+
return {
|
|
18
|
+
label: formatMessage(
|
|
19
|
+
{
|
|
20
|
+
id: `Settings.permissions.auditLogs.${action}`,
|
|
21
|
+
defaultMessage: getDefaultMessage(action),
|
|
22
|
+
},
|
|
23
|
+
{ model: undefined }
|
|
24
|
+
),
|
|
25
|
+
customValue: action,
|
|
26
|
+
};
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
const userOptions =
|
|
30
|
+
users &&
|
|
31
|
+
users.results.map((user) => {
|
|
32
|
+
return {
|
|
33
|
+
label: formatMessage(
|
|
34
|
+
{
|
|
35
|
+
id: 'Settings.permissions.auditLogs.user.fullname',
|
|
36
|
+
defaultMessage: '{firstname} {lastname}',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
firstname: user.firstname,
|
|
40
|
+
lastname: user.lastname,
|
|
41
|
+
}
|
|
42
|
+
),
|
|
43
|
+
// Combobox expects a string value
|
|
44
|
+
customValue: user.id.toString(),
|
|
45
|
+
};
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
return [
|
|
49
|
+
{
|
|
50
|
+
name: 'action',
|
|
51
|
+
metadatas: {
|
|
52
|
+
customOperators,
|
|
53
|
+
label: formatMessage({
|
|
54
|
+
id: 'Settings.permissions.auditLogs.action',
|
|
55
|
+
defaultMessage: 'Action',
|
|
56
|
+
}),
|
|
57
|
+
options: actionOptions,
|
|
58
|
+
customInput: ComboboxFilter,
|
|
59
|
+
},
|
|
60
|
+
fieldSchema: { type: 'enumeration' },
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
name: 'date',
|
|
64
|
+
metadatas: {
|
|
65
|
+
label: formatMessage({
|
|
66
|
+
id: 'Settings.permissions.auditLogs.date',
|
|
67
|
+
defaultMessage: 'Date',
|
|
68
|
+
}),
|
|
69
|
+
},
|
|
70
|
+
fieldSchema: { type: 'datetime' },
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
name: 'user',
|
|
74
|
+
metadatas: {
|
|
75
|
+
customOperators,
|
|
76
|
+
label: formatMessage({
|
|
77
|
+
id: 'Settings.permissions.auditLogs.user',
|
|
78
|
+
defaultMessage: 'User',
|
|
79
|
+
}),
|
|
80
|
+
options: userOptions,
|
|
81
|
+
customInput: ComboboxFilter,
|
|
82
|
+
},
|
|
83
|
+
fieldSchema: { type: 'relation', mainField: { name: 'id' } },
|
|
84
|
+
},
|
|
85
|
+
];
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
export default getDisplayedFilters;
|
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
LoadingIndicatorPage,
|
|
5
5
|
SearchURLQuery,
|
|
6
6
|
SettingsPageTitle,
|
|
7
|
+
getFetchClient,
|
|
7
8
|
useNotification,
|
|
8
9
|
useQueryParams,
|
|
9
10
|
useRBAC,
|
|
@@ -23,7 +24,6 @@ import { get } from 'lodash';
|
|
|
23
24
|
import matchSorter from 'match-sorter';
|
|
24
25
|
import { useIntl } from 'react-intl';
|
|
25
26
|
import { useHistory } from 'react-router-dom';
|
|
26
|
-
import { axiosInstance } from '../../../../../../../admin/src/core/utils';
|
|
27
27
|
import { useRolesList } from '../../../../../../../admin/src/hooks';
|
|
28
28
|
import adminPermissions from '../../../../../../../admin/src/permissions';
|
|
29
29
|
import EmptyRole from '../../../../../../../admin/src/pages/SettingsPage/pages/Roles/ListPage/components/EmptyRole';
|
|
@@ -72,13 +72,15 @@ const useRoleActions = ({ getData, canCreate, canDelete, canUpdate }) => {
|
|
|
72
72
|
initialState
|
|
73
73
|
);
|
|
74
74
|
|
|
75
|
+
const { post } = getFetchClient();
|
|
76
|
+
|
|
75
77
|
const handleDeleteData = async () => {
|
|
76
78
|
try {
|
|
77
79
|
dispatch({
|
|
78
80
|
type: 'ON_REMOVE_ROLES',
|
|
79
81
|
});
|
|
80
82
|
|
|
81
|
-
await
|
|
83
|
+
await post('/admin/roles/batch-delete', {
|
|
82
84
|
ids: [roleToDelete],
|
|
83
85
|
});
|
|
84
86
|
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Migrate the audit logs table name for users coming from v4.6.0
|
|
5
|
+
*/
|
|
6
|
+
async function migrateAuditLogsTable({ oldContentTypes, contentTypes }) {
|
|
7
|
+
// Check if the audit logs table name was changed
|
|
8
|
+
const oldName = oldContentTypes?.['admin::audit-log']?.collectionName;
|
|
9
|
+
const newName = contentTypes['admin::audit-log']?.collectionName;
|
|
10
|
+
const hasRenamedAuditLogsTable = oldName === 'audit_logs' && newName === 'strapi_audit_logs';
|
|
11
|
+
|
|
12
|
+
if (!hasRenamedAuditLogsTable) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// Check if the previous audit log tables exist
|
|
17
|
+
const hasAuditLogsTable = await strapi.db.getSchemaConnection().hasTable('audit_logs');
|
|
18
|
+
const hasLinkTable = await strapi.db.getSchemaConnection().hasTable('audit_logs_user_links');
|
|
19
|
+
|
|
20
|
+
if (!hasAuditLogsTable || !hasLinkTable) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Check if the existing tables match the expected schema
|
|
25
|
+
const auditLogsColumnInfo = await strapi.db.connection('audit_logs').columnInfo();
|
|
26
|
+
const linkColumnInfo = await strapi.db.connection('audit_logs_user_links').columnInfo();
|
|
27
|
+
|
|
28
|
+
if (
|
|
29
|
+
!auditLogsColumnInfo.action ||
|
|
30
|
+
!auditLogsColumnInfo.date ||
|
|
31
|
+
!auditLogsColumnInfo.payload ||
|
|
32
|
+
!linkColumnInfo.audit_log_id ||
|
|
33
|
+
!linkColumnInfo.user_id
|
|
34
|
+
) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Do the actual migrations
|
|
39
|
+
await strapi.db.getSchemaConnection().renameTable('audit_logs', 'strapi_audit_logs');
|
|
40
|
+
await strapi.db
|
|
41
|
+
.getSchemaConnection()
|
|
42
|
+
.renameTable('audit_logs_user_links', 'strapi_audit_logs_user_links');
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
module.exports = migrateAuditLogsTable;
|
package/ee/server/register.js
CHANGED
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
const { features } = require('@strapi/strapi/lib/utils/ee');
|
|
4
4
|
const executeCERegister = require('../../server/register');
|
|
5
|
+
const migrateAuditLogsTable = require('./migrations/audit-logs-table');
|
|
5
6
|
const createAuditLogsService = require('./services/audit-logs');
|
|
6
7
|
|
|
7
8
|
module.exports = async ({ strapi }) => {
|
|
8
9
|
if (features.isEnabled('audit-logs')) {
|
|
10
|
+
strapi.hook('strapi::content-types.beforeSync').register(migrateAuditLogsTable);
|
|
9
11
|
const auditLogsService = createAuditLogsService(strapi);
|
|
10
12
|
strapi.container.register('audit-logs', auditLogsService);
|
|
11
13
|
await auditLogsService.register();
|
|
@@ -58,6 +58,16 @@ const createAuditLogsService = (strapi) => {
|
|
|
58
58
|
const eventMap = getEventMap(defaultEvents);
|
|
59
59
|
|
|
60
60
|
const processEvent = (name, ...args) => {
|
|
61
|
+
const state = strapi.requestContext.get()?.state;
|
|
62
|
+
|
|
63
|
+
// Ignore events with auth strategies different from admin
|
|
64
|
+
const isUsingAdminAuth = state?.auth?.strategy.name === 'admin';
|
|
65
|
+
const user = state?.user;
|
|
66
|
+
|
|
67
|
+
if (!isUsingAdminAuth || !user) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
|
|
61
71
|
const getPayload = eventMap[name];
|
|
62
72
|
|
|
63
73
|
// Ignore the event if it's not in the map
|
|
@@ -75,7 +85,7 @@ const createAuditLogsService = (strapi) => {
|
|
|
75
85
|
action: name,
|
|
76
86
|
date: new Date().toISOString(),
|
|
77
87
|
payload: getPayload(...args) || {},
|
|
78
|
-
userId:
|
|
88
|
+
userId: user.id,
|
|
79
89
|
};
|
|
80
90
|
};
|
|
81
91
|
|