@strapi/admin 4.12.0-beta.4 → 4.12.0-beta.5

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.
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[]).push([[8936],{80252:function(ue,y,t){t.r(y),t.d(y,{default:function(){return K}});var e=t(32735),i=t(19565),g=t(15062),E=t(30305),F=t(41415),m=t(87933),V=t(23866),k=t(49372),X=t(66456),d=t(92802),Y=t(3040),Z=t.n(Y),z=t(67879),B=t(20108),H=t(53038),N=t(90769),P=t(61234),j=t(50337),S=t(77061),u=t(27187),c=t(90562),J=t(45594),Q=t(165),n=t(2121),G=t(32329),C=t(79989),U=t(82920);function $(){const{formatMessage:s}=(0,z.Z)(),{post:b}=(0,i.kY)(),{push:q}=(0,H.k6)(),{formatAPIError:_}=(0,i.So)(),w=(0,g.I0)(),ee=(0,g.v9)(E._),T=(0,i.lm)(),{collectionTypes:te,singleTypes:oe,isLoading:se}=(0,N.G)(),{isLoading:M,meta:v,workflows:I}=(0,G.n)(),{clientState:{currentWorkflow:{data:l,isDirty:ne}}}=(0,g.v9)(o=>o?.[n.sN]??C.E),{allowedActions:{canCreate:ae}}=(0,i.ss)(ee.settings["review-workflows"]),[L,f]=e.useState(!1),{isLoading:W,getFeature:le}=(0,j.q5)(),[re,ie]=e.useState(null),[A,h]=e.useState({}),a=le("review-workflows"),R=I.flatMap(o=>o.contentTypes),{mutateAsync:ce,isLoading:D}=(0,B.useMutation)(async({workflow:o})=>{const{data:{data:r}}=await b("/admin/review-workflows/workflows",{data:o});return r},{onSuccess(){T({type:"success",message:{id:"Settings.review-workflows.create.page.notification.success",defaultMessage:"Workflow successfully created"}})}}),O=async()=>{h({});try{const o=await ce({workflow:l});return q(`/settings/review-workflows/${o.id}`),o}catch(o){return o.response.data?.error?.name==="ValidationError"&&o.response.data?.error?.details?.errors?.length>0&&ie(o.response.data?.error?.details?.errors.reduce((r,x)=>(Z()(r,x.path,x.message),r),{})),T({type:"warning",message:_(o)}),null}},fe=async()=>{await O()},ge=()=>{h({})},p=(0,d.TA)({enableReinitialize:!0,initialErrors:re,initialValues:l,async onSubmit(){const o=l.contentTypes.some(r=>R.includes(r));a?.[n.Ef]&&v?.workflowCount>=parseInt(a[n.Ef],10)?f("workflow"):a?.[n._X]&&l.stages.length>=parseInt(a[n._X],10)?f("stage"):o?h(r=>({...r,hasReassignedContentTypes:!0})):O()},validate(o){return(0,U.V)({values:o,formatMessage:s})}});return(0,P.v)(n.sN,C.I),e.useEffect(()=>{w((0,S.Js)()),w((0,S.CI)({name:""}))},[w]),e.useEffect(()=>{!M&&!W&&(a?.[n.Ef]&&v?.workflowsTotal>=parseInt(a[n.Ef],10)?f("workflow"):a?.[n._X]&&l.stages.length>=parseInt(a[n._X],10)&&f("stage"))},[W,M,a,v?.workflowsTotal,l.stages.length]),e.createElement(e.Fragment,null,e.createElement(u.lx,null),e.createElement(d.Hy,{value:p},e.createElement(d.l0,{onSubmit:p.handleSubmit},e.createElement(u.h4,{navigationAction:e.createElement(u.eJ,{href:"/settings/review-workflows"}),primaryAction:e.createElement(F.z,{startIcon:e.createElement(X.Z,null),type:"submit",size:"M",disabled:!ne||!ae,isLoading:D},s({id:"global.save",defaultMessage:"Save"})),title:s({id:"Settings.review-workflows.create.page.title",defaultMessage:"Create Review Workflow"}),subtitle:s({id:"Settings.review-workflows.page.subtitle",defaultMessage:"{count, plural, one {# stage} other {# stages}}"},{count:l?.stages?.length??0})}),e.createElement(u.fC,null,e.createElement(m.k,{alignItems:"stretch",direction:"column",gap:7},se?e.createElement(V.a,null,s({id:"Settings.review-workflows.page.isLoading",defaultMessage:"Workflow is loading"})):e.createElement(m.k,{alignItems:"stretch",direction:"column",gap:7},e.createElement(Q.Y,{contentTypes:{collectionTypes:te,singleTypes:oe},workflows:I}),e.createElement(J.U,{stages:p.values?.stages})))))),e.createElement(i.QH.Root,{isConfirmButtonLoading:D,isOpen:Object.keys(A).length>0,onToggleDialog:ge,onConfirm:fe},e.createElement(i.QH.Body,null,e.createElement(m.k,{direction:"column",gap:5},A.hasReassignedContentTypes&&e.createElement(k.Z,{textAlign:"center",variant:"omega"},s({id:"Settings.review-workflows.page.delete.confirm.contentType.body",defaultMessage:"{count} {count, plural, one {content-type} other {content-types}} {count, plural, one {is} other {are}} already mapped to {count, plural, one {another workflow} other {other workflows}}. If you save changes, {count, plural, one {this} other {these}} {count, plural, one {content-type} other {{count} content-types}} will no more be mapped to the {count, plural, one {another workflow} other {other workflows}} and all corresponding information will be removed."},{count:R.filter(o=>l.contentTypes.includes(o)).length})),e.createElement(k.Z,{textAlign:"center",variant:"omega"},s({id:"Settings.review-workflows.page.delete.confirm.confirm",defaultMessage:"Are you sure you want to save?"}))))),e.createElement(c.fC,{isOpen:L==="workflow",onClose:()=>f(!1)},e.createElement(c.Dx,null,s({id:"Settings.review-workflows.create.page.workflows.limit.title",defaultMessage:"You\u2019ve reached the limit of workflows in your plan"})),e.createElement(c.uT,null,s({id:"Settings.review-workflows.create.page.workflows.limit.body",defaultMessage:"Delete a workflow or contact Sales to enable more workflows."}))),e.createElement(c.fC,{isOpen:L==="stage",onClose:()=>f(!1)},e.createElement(c.Dx,null,s({id:"Settings.review-workflows.create.page.stages.limit.title",defaultMessage:"You have reached the limit of stages for this workflow in your plan"})),e.createElement(c.uT,null,s({id:"Settings.review-workflows.create.page.stages.limit.body",defaultMessage:"Try deleting some stages or contact Sales to enable more stages."}))))}function K(){const s=(0,g.v9)(E._);return e.createElement(i.O4,{permissions:s.settings["review-workflows"].create},e.createElement($,null))}}}]);
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[]).push([[4409],{45696:function(Ee,M,t){t.r(M),t.d(M,{default:function(){return oe}});var e=t(32735),i=t(19565),d=t(15062),T=t(30305),B=t(41415),h=t(87933),H=t(23866),p=t(49372),N=t(66456),y=t(92802),P=t(3040),U=t.n(P),J=t(67879),Q=t(20108),G=t(53038),$=t(90769),K=t(61234),b=t(50337),I=t(77061),g=t(27187),c=t(90562),q=t(45594),_=t(165),l=t(2121),ee=t(32329),L=t(79989),te=t(82920);function se(){const{workflowId:u}=(0,G.UO)(),ne=(0,d.v9)(T._),{formatMessage:n}=(0,J.Z)(),E=(0,d.I0)(),{put:ae}=(0,i.kY)(),{formatAPIError:le}=(0,i.So)(),A=(0,i.lm)(),{isLoading:D,meta:m,workflows:k,status:W,refetch:re}=(0,ee.n)(),{collectionTypes:ie,singleTypes:ce,isLoading:fe}=(0,$.G)(),{status:de,clientState:{currentWorkflow:{data:a,isDirty:ge,hasDeletedServerStages:O}}}=(0,d.v9)(s=>s?.[l.sN]??L.E),{allowedActions:{canDelete:ue,canUpdate:S}}=(0,i.ss)(ne.settings["review-workflows"]),[w,v]=e.useState({}),{getFeature:me,isLoading:R}=(0,b.q5)(),[x,f]=e.useState(!1),[we,F]=e.useState(null),V=k.find(s=>s.id===parseInt(u,10)),Z=k.filter(s=>s.id!==parseInt(u,10)).flatMap(s=>s.contentTypes),{mutateAsync:ve,isLoading:j}=(0,Q.useMutation)(async({workflow:s})=>{const{data:{data:o}}=await ae(`/admin/review-workflows/workflows/${s.id}`,{data:s});return o},{onSuccess(){A({type:"success",message:{id:"notification.success.saved",defaultMessage:"Saved"}})}}),he=async s=>{F(null);try{return await ve({workflow:s})}catch(o){return o.response.data?.error?.name==="ValidationError"&&o.response.data?.error?.details?.errors?.length>0&&F(o.response.data?.error?.details?.errors.reduce((Y,z)=>(U()(Y,z.path,z.message),Y),{})),A({type:"warning",message:le(o)}),null}},X=async()=>{await he(a),await re(),v({})},pe=async()=>{await X()},ye=()=>{v({})},C=(0,y.TA)({enableReinitialize:!0,initialErrors:we,initialValues:a,async onSubmit(){const s=a.contentTypes.some(o=>Z.includes(o));r?.[l.Ef]&&m?.workflowCount>parseInt(r[l.Ef],10)?f("workflow"):r?.[l._X]&&a.stages.length>parseInt(r[l._X],10)?f("stage"):O||s?(O&&v(o=>({...o,hasDeletedServerStages:!0})),s&&v(o=>({...o,hasReassignedContentTypes:!0}))):X()},validate(s){return(0,te.V)({values:s,formatMessage:n})}});(0,K.v)(l.sN,L.I);const r=me("review-workflows");return e.useEffect(()=>(E((0,I.fC)({status:W,data:V})),()=>{E((0,I.Js)())}),[W,V,E]),e.useEffect(()=>{!D&&!R&&(r?.[l.Ef]&&m?.workflowCount>parseInt(r[l.Ef],10)?f("workflow"):r?.[l._X]&&a.stages.length>parseInt(r[l._X],10)&&f("stage"))},[a.stages.length,R,D,r,m?.workflowCount,m.workflowsTotal]),e.createElement(e.Fragment,null,e.createElement(g.lx,null),e.createElement(y.Hy,{value:C},e.createElement(y.l0,{onSubmit:C.handleSubmit},e.createElement(g.h4,{navigationAction:e.createElement(g.eJ,{href:"/settings/review-workflows"}),primaryAction:e.createElement(B.z,{startIcon:e.createElement(N.Z,null),type:"submit",size:"M",disabled:!ge||!S,loading:!Object.keys(w).length>0&&j},n({id:"global.save",defaultMessage:"Save"})),subtitle:a.stages.length>0&&n({id:"Settings.review-workflows.page.subtitle",defaultMessage:"{count, plural, one {# stage} other {# stages}}"},{count:a.stages.length}),title:a.name}),e.createElement(g.fC,null,fe||de==="loading"?e.createElement(h.k,{justifyContent:"center"},e.createElement(H.a,null,n({id:"Settings.review-workflows.page.isLoading",defaultMessage:"Workflow is loading"}))):e.createElement(h.k,{alignItems:"stretch",direction:"column",gap:7},e.createElement(_.Y,{canUpdate:S,contentTypes:{collectionTypes:ie,singleTypes:ce},currentWorkflow:a,workflows:k}),e.createElement(q.U,{canDelete:ue,canUpdate:S,stages:C.values?.stages}))))),e.createElement(i.QH.Root,{isConfirmButtonLoading:j,isOpen:Object.keys(w).length>0,onToggleDialog:ye,onConfirm:pe},e.createElement(i.QH.Body,null,e.createElement(h.k,{direction:"column",gap:5},w.hasDeletedServerStages&&e.createElement(p.Z,{textAlign:"center",variant:"omega"},n({id:"Settings.review-workflows.page.delete.confirm.stages.body",defaultMessage:"All entries assigned to deleted stages will be moved to the previous stage."})),w.hasReassignedContentTypes&&e.createElement(p.Z,{textAlign:"center",variant:"omega"},n({id:"Settings.review-workflows.page.delete.confirm.contentType.body",defaultMessage:"{count} {count, plural, one {content-type} other {content-types}} {count, plural, one {is} other {are}} already mapped to {count, plural, one {another workflow} other {other workflows}}. If you save changes, {count, plural, one {this} other {these}} {count, plural, one {content-type} other {{count} content-types}} will no more be mapped to the {count, plural, one {another workflow} other {other workflows}} and all corresponding information will be removed."},{count:Z.filter(s=>a.contentTypes.includes(s)).length})),e.createElement(p.Z,{textAlign:"center",variant:"omega"},n({id:"Settings.review-workflows.page.delete.confirm.confirm",defaultMessage:"Are you sure you want to save?"}))))),e.createElement(c.fC,{isOpen:x==="workflow",onClose:()=>f(!1)},e.createElement(c.Dx,null,n({id:"Settings.review-workflows.edit.page.workflows.limit.title",defaultMessage:"You\u2019ve reached the limit of workflows in your plan"})),e.createElement(c.uT,null,n({id:"Settings.review-workflows.edit.page.workflows.limit.body",defaultMessage:"Delete a workflow or contact Sales to enable more workflows."}))),e.createElement(c.fC,{isOpen:x==="stage",onClose:()=>f(!1)},e.createElement(c.Dx,null,n({id:"Settings.review-workflows.edit.page.stages.limit.title",defaultMessage:"You have reached the limit of stages for this workflow in your plan"})),e.createElement(c.uT,null,n({id:"Settings.review-workflows.edit.page.stages.limit.body",defaultMessage:"Try deleting some stages or contact Sales to enable more stages."}))))}function oe(){const u=(0,d.v9)(T._);return e.createElement(i.O4,{permissions:u.settings["review-workflows"].main},e.createElement(se,null))}}}]);
@@ -1,2 +1,2 @@
1
- (function(){"use strict";var j={},m={};function e(n){var i=m[n];if(i!==void 0)return i.exports;var t=m[n]={id:n,loaded:!1,exports:{}};return j[n].call(t.exports,t,t.exports,e),t.loaded=!0,t.exports}e.m=j,function(){var n=[];e.O=function(i,t,o,r){if(t){r=r||0;for(var s=n.length;s>0&&n[s-1][2]>r;s--)n[s]=n[s-1];n[s]=[t,o,r];return}for(var a=1/0,s=0;s<n.length;s++){for(var t=n[s][0],o=n[s][1],r=n[s][2],d=!0,l=0;l<t.length;l++)(r&!1||a>=r)&&Object.keys(e.O).every(function(p){return e.O[p](t[l])})?t.splice(l--,1):(d=!1,r<a&&(a=r));if(d){n.splice(s--,1);var c=o();c!==void 0&&(i=c)}}return i}}(),function(){e.n=function(n){var i=n&&n.__esModule?function(){return n.default}:function(){return n};return e.d(i,{a:i}),i}}(),function(){var n=Object.getPrototypeOf?function(t){return Object.getPrototypeOf(t)}:function(t){return t.__proto__},i;e.t=function(t,o){if(o&1&&(t=this(t)),o&8||typeof t=="object"&&t&&(o&4&&t.__esModule||o&16&&typeof t.then=="function"))return t;var r=Object.create(null);e.r(r);var s={};i=i||[null,n({}),n([]),n(n)];for(var a=o&2&&t;typeof a=="object"&&!~i.indexOf(a);a=n(a))Object.getOwnPropertyNames(a).forEach(function(d){s[d]=function(){return t[d]}});return s.default=function(){return t},e.d(r,s),r}}(),function(){e.d=function(n,i){for(var t in i)e.o(i,t)&&!e.o(n,t)&&Object.defineProperty(n,t,{enumerable:!0,get:i[t]})}}(),function(){e.f={},e.e=function(n){return Promise.all(Object.keys(e.f).reduce(function(i,t){return e.f[t](n,i),i},[]))}}(),function(){e.u=function(n){return""+({46:"content-type-builder-translation-zh-Hans-json",90:"i18n-translation-de-json",92:"api-tokens-edit-page",96:"email-translation-de-json",123:"ru-json",129:"i18n-translation-es-json",302:"sso-settings-page",320:"en-json",349:"review-workflows-settings-list-view",395:"tr-json",435:"email-translation-it-json",562:"no-json",585:"upload-translation-pt-json",606:"sk-json",615:"upload-translation-uk-json",695:"upload-settings",742:"content-type-builder-translation-th-json",744:"email-translation-cs-json",749:"th-json",801:"Admin-authenticatedApp",830:"he-json",931:"content-type-builder-translation-en-json",994:"content-manager",1001:"content-type-builder-translation-nl-json",1009:"upload-translation-ms-json",1011:"zh-json",1018:"email-translation-ko-json",1023:"content-type-builder-translation-it-json",1056:"upload-translation-tr-json",1157:"email-translation-pt-BR-json",1167:"users-permissions-translation-ko-json",1180:"i18n-translation-tr-json",1312:"ja-json",1331:"upload-translation-es-json",1375:"upload-translation-pt-BR-json",1377:"ko-json",1442:"users-permissions-translation-cs-json",1495:"email-settings-page",1674:"users-permissions-translation-ru-json",1930:"users-permissions-translation-pt-json",2137:"i18n-translation-fr-json",2151:"content-type-builder-translation-id-json",2246:"content-type-builder-translation-dk-json",2248:"gu-json",2282:"users-providers-settings-page",2380:"users-permissions-translation-tr-json",2411:"email-translation-tr-json",2464:"users-permissions-translation-de-json",2489:"upload-translation-ko-json",2492:"transfer-tokens-edit-page",2544:"admin-edit-roles-page",2553:"zh-Hans-json",2567:"content-type-builder-translation-ko-json",2603:"email-translation-en-json",2648:"email-translation-ar-json",2657:"content-type-builder-translation-cs-json",2671:"nl-json",2742:"users-permissions-translation-zh-Hans-json",2812:"audit-logs-settings-page",3025:"ms-json",3038:"upload-translation-sk-json",3043:"email-translation-zh-Hans-json",3095:"users-permissions-translation-sk-json",3098:"users-permissions-translation-fr-json",3166:"email-translation-pt-json",3206:"email-translation-nl-json",3278:"vi-json",3304:"content-type-builder-translation-tr-json",3340:"pt-json",3455:"admin-roles-list",3516:"ca-json",3530:"users-permissions-translation-vi-json",3552:"i18n-settings-page",3650:"upload",3677:"Admin_pluginsPage",3702:"users-permissions-translation-pl-json",3825:"email-translation-dk-json",3948:"content-type-builder-translation-pl-json",3964:"content-type-builder-translation-ms-json",3981:"Admin_homePage",4021:"upload-translation-de-json",4121:"webhook-list-page",4179:"users-permissions-translation-id-json",4263:"admin-edit-users",4299:"api-tokens-create-page",4302:"content-type-builder-translation-zh-json",4409:"review-workflows-settings-edit-view",4587:"email-translation-th-json",4693:"email-translation-fr-json",4804:"upload-translation-ru-json",4816:"transfer-tokens-create-page",4987:"upload-translation-pl-json",5053:"upload-translation-zh-json",5162:"webhook-edit-page",5199:"admin-users",5222:"upload-translation-it-json",5296:"i18n-translation-dk-json",5388:"email-translation-ru-json",5396:"users-permissions-translation-zh-json",5516:"Admin_marketplace",5538:"admin-app",5751:"email-translation-es-json",5880:"upload-translation-ja-json",5894:"hu-json",5895:"Admin_settingsPage",5905:"content-type-builder-list-view",5906:"content-type-builder-translation-pt-BR-json",6232:"upload-translation-th-json",6280:"i18n-translation-ko-json",6332:"hi-json",6377:"users-permissions-translation-dk-json",6434:"upload-translation-en-json",6460:"users-permissions-translation-en-json",6745:"email-translation-uk-json",6784:"email-translation-ms-json",6817:"it-json",6831:"upload-translation-zh-Hans-json",6836:"users-permissions-translation-uk-json",6848:"email-translation-zh-json",6901:"de-json",7048:"users-permissions-translation-nl-json",7094:"users-permissions-translation-ar-json",7155:"content-type-builder-translation-de-json",7186:"content-type-builder-translation-ru-json",7327:"email-translation-vi-json",7347:"highlight.js",7403:"uk-json",7465:"upload-translation-dk-json",7519:"cs-json",7663:"email-translation-id-json",7808:"i18n-translation-zh-json",7817:"users-permissions-translation-es-json",7828:"users-permissions-translation-th-json",7833:"upload-translation-fr-json",7846:"pl-json",7898:"dk-json",7934:"content-type-builder-translation-pt-json",7958:"ar-json",7997:"content-type-builder-translation-sk-json",8006:"fr-json",8056:"api-tokens-list-page",8175:"i18n-translation-en-json",8178:"email-translation-ja-json",8329:"content-type-builder-translation-sv-json",8342:"content-type-builder-translation-es-json",8360:"eu-json",8367:"es-json",8418:"users-email-settings-page",8423:"upload-translation-ca-json",8467:"users-permissions-translation-sv-json",8481:"email-translation-pl-json",8573:"content-type-builder-translation-uk-json",8736:"users-permissions-translation-pt-BR-json",8853:"users-roles-settings-page",8880:"content-type-builder",8897:"id-json",8907:"content-type-builder-translation-ja-json",8936:"review-workflows-settings-create-view",8965:"content-type-builder-translation-fr-json",9220:"users-permissions-translation-ms-json",9303:"sv-json",9366:"i18n-translation-pl-json",9412:"email-translation-sk-json",9460:"users-advanced-settings-page",9497:"Admin_profilePage",9501:"Admin_InternalErrorPage",9502:"users-permissions-translation-ja-json",9511:"content-type-builder-translation-ar-json",9514:"Upload_ConfigureTheView",9600:"transfer-tokens-list-page",9647:"pt-BR-json",9726:"sa-json",9737:"i18n-translation-ru-json",9762:"i18n-translation-zh-Hans-json",9797:"upload-translation-he-json",9903:"ml-json",9905:"users-permissions-translation-it-json"}[n]||n)+"."+{46:"6ff57db6",90:"362384a6",92:"58139df9",96:"1b334230",123:"8193d8c4",129:"87b494d1",302:"3a1ed8c9",311:"cb0884bb",320:"4c733bd1",349:"3ee9190d",395:"56c32cf6",435:"a2ed8c78",448:"829e1344",502:"8ae8ef60",562:"19a2dbfa",585:"6b937fdf",606:"bf2f057a",615:"9950466a",695:"cac210a0",742:"122277cc",744:"6eaeec6a",749:"5f659396",801:"24998de8",830:"3cf0b48a",918:"54414509",931:"ed29ff4d",994:"8772445b",1001:"997fe8cc",1009:"74f6d746",1011:"1cc86ff0",1018:"4de49b23",1023:"e268ab74",1049:"758a01f5",1056:"74117e5c",1157:"81cca553",1167:"357d7a33",1180:"10f0600d",1312:"91286391",1331:"ba2eb03a",1375:"d1704f0b",1377:"fcf3ec4b",1386:"762d6eb8",1387:"a86ac314",1442:"7e23424a",1495:"d494d1eb",1674:"8e883c67",1727:"b49f0713",1930:"a7eda429",2137:"57ddc77e",2151:"65255f93",2225:"15d1df72",2246:"fd626b67",2248:"5bd62812",2282:"8876c1ee",2379:"0ca87a89",2380:"2bd7ff98",2395:"df7a044a",2411:"e6c0f8fc",2464:"a6fb670f",2489:"a52eab64",2492:"8741529f",2544:"a49b9f4f",2553:"36d81cdc",2567:"04cb309d",2603:"4211d4d0",2648:"88304564",2657:"1ef9e106",2671:"b2b16eea",2742:"6ab714ee",2801:"b1140c9b",2812:"4b422831",3025:"0eddffd9",3038:"483a18f6",3043:"c6841563",3095:"7f37180f",3098:"7e55bbbb",3100:"2ba4df95",3166:"2a2a0643",3206:"377bdd9f",3278:"ee4c5537",3304:"41f44f77",3340:"ee554a41",3455:"0c129e98",3483:"e2ee2547",3516:"a53c10b6",3530:"6722a8a2",3552:"47f78016",3650:"cbfeefa5",3677:"8728ff6e",3702:"0a7287d1",3739:"63e352f1",3825:"85402492",3948:"634f638b",3964:"f6b743b9",3981:"ac9dfb86",3984:"dda474f7",4021:"420c943b",4121:"65e1b5bb",4179:"a5a0fb59",4263:"67704088",4299:"46c2ea84",4302:"3532b962",4409:"77299c63",4546:"ff9fdf30",4587:"660fa9a8",4628:"9cbb6df5",4693:"78be2787",4804:"675f6b93",4816:"1597e6ab",4987:"426f31c9",5053:"e1dd6eb2",5162:"a91f27a1",5199:"3279ffb0",5222:"e87d7966",5296:"89401417",5388:"6bce37dd",5396:"7978eaa6",5483:"6dd2e776",5516:"f0b87fce",5538:"c2e4e128",5542:"2415a393",5751:"0b6b1006",5880:"44b88e7a",5894:"9f4aae42",5895:"8c600d1a",5905:"bf9be456",5906:"6a95dc71",6158:"c974fd83",6232:"98d35574",6280:"ef4f9471",6332:"9104eb78",6377:"60e50f48",6434:"8b7573ce",6460:"4b302272",6691:"f880a0b6",6745:"bd1fb6bf",6784:"7390477e",6817:"bfe27ed8",6831:"db163b6b",6836:"6a0a1572",6848:"7a2232ea",6901:"b3be02c7",7030:"b98dcedf",7048:"c9f92a3c",7065:"99ca8ab1",7094:"7d87d54d",7155:"63fcff7b",7186:"3af65503",7327:"9fb7e6d7",7347:"28a1547e",7403:"b7e38370",7464:"8a6c1e6c",7465:"bbb2fa05",7519:"4b44411c",7663:"c97239fe",7808:"bef2dc07",7817:"35007573",7828:"1e9c0247",7833:"baab9911",7846:"f094a417",7898:"842aa391",7934:"ddb44f8c",7958:"f530bc3f",7997:"c6078082",8006:"aa8839d2",8056:"505bf7e0",8175:"1ec7becf",8178:"63eebd02",8276:"6c7b8e6e",8329:"a6df2462",8342:"a4a361a9",8360:"633025f0",8367:"f57b5335",8418:"a87978e5",8423:"57954414",8467:"17187818",8481:"97d0db97",8573:"e1315acd",8736:"1b6d2920",8853:"0431f48c",8880:"40534de5",8897:"41e07c46",8907:"9be0d5b2",8936:"d4b5dbb8",8965:"499c3a46",9220:"c83f87c4",9303:"fd0e86c6",9366:"dfac513d",9412:"53da2fcd",9460:"18379a56",9497:"a968035f",9501:"f45f2462",9502:"891fe76e",9511:"3e808e2f",9514:"345ac1e0",9600:"22147d2c",9647:"dec7fb01",9726:"a56836f1",9737:"401bc498",9762:"757ce62d",9797:"0a830937",9806:"91360bb6",9903:"557aa14c",9905:"0705465d",9944:"7af075a5"}[n]+".chunk.js"}}(),function(){e.miniCssF=function(n){}}(),function(){e.g=function(){if(typeof globalThis=="object")return globalThis;try{return this||new Function("return this")()}catch{if(typeof window=="object")return window}}()}(),function(){e.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)}}(),function(){var n={},i="@strapi/admin:";e.l=function(t,o,r,s){if(n[t]){n[t].push(o);return}var a,d;if(r!==void 0)for(var l=document.getElementsByTagName("script"),c=0;c<l.length;c++){var f=l[c];if(f.getAttribute("src")==t||f.getAttribute("data-webpack")==i+r){a=f;break}}a||(d=!0,a=document.createElement("script"),a.charset="utf-8",a.timeout=120,e.nc&&a.setAttribute("nonce",e.nc),a.setAttribute("data-webpack",i+r),a.src=t),n[t]=[o];var u=function(g,p){a.onerror=a.onload=null,clearTimeout(b);var h=n[t];if(delete n[t],a.parentNode&&a.parentNode.removeChild(a),h&&h.forEach(function(v){return v(p)}),g)return g(p)},b=setTimeout(u.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=u.bind(null,a.onerror),a.onload=u.bind(null,a.onload),d&&document.head.appendChild(a)}}(),function(){e.r=function(n){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})}}(),function(){e.nmd=function(n){return n.paths=[],n.children||(n.children=[]),n}}(),function(){e.p="/admin/"}(),function(){e.b=document.baseURI||self.location.href;var n={1303:0};e.f.j=function(o,r){var s=e.o(n,o)?n[o]:void 0;if(s!==0)if(s)r.push(s[2]);else if(o!=1303){var a=new Promise(function(f,u){s=n[o]=[f,u]});r.push(s[2]=a);var d=e.p+e.u(o),l=new Error,c=function(f){if(e.o(n,o)&&(s=n[o],s!==0&&(n[o]=void 0),s)){var u=f&&(f.type==="load"?"missing":f.type),b=f&&f.target&&f.target.src;l.message="Loading chunk "+o+` failed.
2
- (`+u+": "+b+")",l.name="ChunkLoadError",l.type=u,l.request=b,s[1](l)}};e.l(d,c,"chunk-"+o,o)}else n[o]=0},e.O.j=function(o){return n[o]===0};var i=function(o,r){var s=r[0],a=r[1],d=r[2],l,c,f=0;if(s.some(function(b){return n[b]!==0})){for(l in a)e.o(a,l)&&(e.m[l]=a[l]);if(d)var u=d(e)}for(o&&o(r);f<s.length;f++)c=s[f],e.o(n,c)&&n[c]&&n[c][0](),n[c]=0;return e.O(u)},t=self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[];t.forEach(i.bind(null,0)),t.push=i.bind(null,t.push.bind(t))}(),function(){e.nc=void 0}()})();
1
+ (function(){"use strict";var j={},m={};function e(n){var i=m[n];if(i!==void 0)return i.exports;var t=m[n]={id:n,loaded:!1,exports:{}};return j[n].call(t.exports,t,t.exports,e),t.loaded=!0,t.exports}e.m=j,function(){var n=[];e.O=function(i,t,o,r){if(t){r=r||0;for(var s=n.length;s>0&&n[s-1][2]>r;s--)n[s]=n[s-1];n[s]=[t,o,r];return}for(var a=1/0,s=0;s<n.length;s++){for(var t=n[s][0],o=n[s][1],r=n[s][2],c=!0,l=0;l<t.length;l++)(r&!1||a>=r)&&Object.keys(e.O).every(function(p){return e.O[p](t[l])})?t.splice(l--,1):(c=!1,r<a&&(a=r));if(c){n.splice(s--,1);var d=o();d!==void 0&&(i=d)}}return i}}(),function(){e.n=function(n){var i=n&&n.__esModule?function(){return n.default}:function(){return n};return e.d(i,{a:i}),i}}(),function(){var n=Object.getPrototypeOf?function(t){return Object.getPrototypeOf(t)}:function(t){return t.__proto__},i;e.t=function(t,o){if(o&1&&(t=this(t)),o&8||typeof t=="object"&&t&&(o&4&&t.__esModule||o&16&&typeof t.then=="function"))return t;var r=Object.create(null);e.r(r);var s={};i=i||[null,n({}),n([]),n(n)];for(var a=o&2&&t;typeof a=="object"&&!~i.indexOf(a);a=n(a))Object.getOwnPropertyNames(a).forEach(function(c){s[c]=function(){return t[c]}});return s.default=function(){return t},e.d(r,s),r}}(),function(){e.d=function(n,i){for(var t in i)e.o(i,t)&&!e.o(n,t)&&Object.defineProperty(n,t,{enumerable:!0,get:i[t]})}}(),function(){e.f={},e.e=function(n){return Promise.all(Object.keys(e.f).reduce(function(i,t){return e.f[t](n,i),i},[]))}}(),function(){e.u=function(n){return""+({46:"content-type-builder-translation-zh-Hans-json",90:"i18n-translation-de-json",92:"api-tokens-edit-page",96:"email-translation-de-json",123:"ru-json",129:"i18n-translation-es-json",302:"sso-settings-page",320:"en-json",349:"review-workflows-settings-list-view",395:"tr-json",435:"email-translation-it-json",562:"no-json",585:"upload-translation-pt-json",606:"sk-json",615:"upload-translation-uk-json",695:"upload-settings",742:"content-type-builder-translation-th-json",744:"email-translation-cs-json",749:"th-json",801:"Admin-authenticatedApp",830:"he-json",931:"content-type-builder-translation-en-json",994:"content-manager",1001:"content-type-builder-translation-nl-json",1009:"upload-translation-ms-json",1011:"zh-json",1018:"email-translation-ko-json",1023:"content-type-builder-translation-it-json",1056:"upload-translation-tr-json",1157:"email-translation-pt-BR-json",1167:"users-permissions-translation-ko-json",1180:"i18n-translation-tr-json",1312:"ja-json",1331:"upload-translation-es-json",1375:"upload-translation-pt-BR-json",1377:"ko-json",1442:"users-permissions-translation-cs-json",1495:"email-settings-page",1674:"users-permissions-translation-ru-json",1930:"users-permissions-translation-pt-json",2137:"i18n-translation-fr-json",2151:"content-type-builder-translation-id-json",2246:"content-type-builder-translation-dk-json",2248:"gu-json",2282:"users-providers-settings-page",2380:"users-permissions-translation-tr-json",2411:"email-translation-tr-json",2464:"users-permissions-translation-de-json",2489:"upload-translation-ko-json",2492:"transfer-tokens-edit-page",2544:"admin-edit-roles-page",2553:"zh-Hans-json",2567:"content-type-builder-translation-ko-json",2603:"email-translation-en-json",2648:"email-translation-ar-json",2657:"content-type-builder-translation-cs-json",2671:"nl-json",2742:"users-permissions-translation-zh-Hans-json",2812:"audit-logs-settings-page",3025:"ms-json",3038:"upload-translation-sk-json",3043:"email-translation-zh-Hans-json",3095:"users-permissions-translation-sk-json",3098:"users-permissions-translation-fr-json",3166:"email-translation-pt-json",3206:"email-translation-nl-json",3278:"vi-json",3304:"content-type-builder-translation-tr-json",3340:"pt-json",3455:"admin-roles-list",3516:"ca-json",3530:"users-permissions-translation-vi-json",3552:"i18n-settings-page",3650:"upload",3677:"Admin_pluginsPage",3702:"users-permissions-translation-pl-json",3825:"email-translation-dk-json",3948:"content-type-builder-translation-pl-json",3964:"content-type-builder-translation-ms-json",3981:"Admin_homePage",4021:"upload-translation-de-json",4121:"webhook-list-page",4179:"users-permissions-translation-id-json",4263:"admin-edit-users",4299:"api-tokens-create-page",4302:"content-type-builder-translation-zh-json",4409:"review-workflows-settings-edit-view",4587:"email-translation-th-json",4693:"email-translation-fr-json",4804:"upload-translation-ru-json",4816:"transfer-tokens-create-page",4987:"upload-translation-pl-json",5053:"upload-translation-zh-json",5162:"webhook-edit-page",5199:"admin-users",5222:"upload-translation-it-json",5296:"i18n-translation-dk-json",5388:"email-translation-ru-json",5396:"users-permissions-translation-zh-json",5516:"Admin_marketplace",5538:"admin-app",5751:"email-translation-es-json",5880:"upload-translation-ja-json",5894:"hu-json",5895:"Admin_settingsPage",5905:"content-type-builder-list-view",5906:"content-type-builder-translation-pt-BR-json",6232:"upload-translation-th-json",6280:"i18n-translation-ko-json",6332:"hi-json",6377:"users-permissions-translation-dk-json",6434:"upload-translation-en-json",6460:"users-permissions-translation-en-json",6745:"email-translation-uk-json",6784:"email-translation-ms-json",6817:"it-json",6831:"upload-translation-zh-Hans-json",6836:"users-permissions-translation-uk-json",6848:"email-translation-zh-json",6901:"de-json",7048:"users-permissions-translation-nl-json",7094:"users-permissions-translation-ar-json",7155:"content-type-builder-translation-de-json",7186:"content-type-builder-translation-ru-json",7327:"email-translation-vi-json",7347:"highlight.js",7403:"uk-json",7465:"upload-translation-dk-json",7519:"cs-json",7663:"email-translation-id-json",7808:"i18n-translation-zh-json",7817:"users-permissions-translation-es-json",7828:"users-permissions-translation-th-json",7833:"upload-translation-fr-json",7846:"pl-json",7898:"dk-json",7934:"content-type-builder-translation-pt-json",7958:"ar-json",7997:"content-type-builder-translation-sk-json",8006:"fr-json",8056:"api-tokens-list-page",8175:"i18n-translation-en-json",8178:"email-translation-ja-json",8329:"content-type-builder-translation-sv-json",8342:"content-type-builder-translation-es-json",8360:"eu-json",8367:"es-json",8418:"users-email-settings-page",8423:"upload-translation-ca-json",8467:"users-permissions-translation-sv-json",8481:"email-translation-pl-json",8573:"content-type-builder-translation-uk-json",8736:"users-permissions-translation-pt-BR-json",8853:"users-roles-settings-page",8880:"content-type-builder",8897:"id-json",8907:"content-type-builder-translation-ja-json",8936:"review-workflows-settings-create-view",8965:"content-type-builder-translation-fr-json",9220:"users-permissions-translation-ms-json",9303:"sv-json",9366:"i18n-translation-pl-json",9412:"email-translation-sk-json",9460:"users-advanced-settings-page",9497:"Admin_profilePage",9501:"Admin_InternalErrorPage",9502:"users-permissions-translation-ja-json",9511:"content-type-builder-translation-ar-json",9514:"Upload_ConfigureTheView",9600:"transfer-tokens-list-page",9647:"pt-BR-json",9726:"sa-json",9737:"i18n-translation-ru-json",9762:"i18n-translation-zh-Hans-json",9797:"upload-translation-he-json",9903:"ml-json",9905:"users-permissions-translation-it-json"}[n]||n)+"."+{46:"6ff57db6",90:"362384a6",92:"58139df9",96:"1b334230",123:"8193d8c4",129:"87b494d1",302:"7c9b2fd9",311:"cb0884bb",320:"4c733bd1",349:"3ee9190d",395:"56c32cf6",435:"a2ed8c78",448:"829e1344",502:"8ae8ef60",562:"19a2dbfa",585:"6b937fdf",606:"bf2f057a",615:"9950466a",695:"cac210a0",742:"122277cc",744:"6eaeec6a",749:"5f659396",801:"6b8dfa45",830:"3cf0b48a",918:"54414509",931:"ed29ff4d",994:"8772445b",1001:"997fe8cc",1009:"74f6d746",1011:"1cc86ff0",1018:"4de49b23",1023:"e268ab74",1049:"758a01f5",1056:"74117e5c",1157:"81cca553",1167:"357d7a33",1180:"10f0600d",1312:"91286391",1331:"ba2eb03a",1375:"d1704f0b",1377:"fcf3ec4b",1386:"762d6eb8",1387:"a86ac314",1442:"7e23424a",1495:"d494d1eb",1674:"8e883c67",1727:"b49f0713",1930:"a7eda429",2137:"57ddc77e",2151:"65255f93",2225:"15d1df72",2246:"fd626b67",2248:"5bd62812",2282:"8876c1ee",2379:"0ca87a89",2380:"2bd7ff98",2395:"df7a044a",2411:"e6c0f8fc",2464:"a6fb670f",2489:"a52eab64",2492:"8741529f",2544:"a49b9f4f",2553:"36d81cdc",2567:"04cb309d",2603:"4211d4d0",2648:"88304564",2657:"1ef9e106",2671:"b2b16eea",2742:"6ab714ee",2801:"b1140c9b",2812:"4b422831",3025:"0eddffd9",3038:"483a18f6",3043:"c6841563",3095:"7f37180f",3098:"7e55bbbb",3100:"2ba4df95",3166:"2a2a0643",3206:"377bdd9f",3278:"ee4c5537",3304:"41f44f77",3340:"ee554a41",3455:"0c129e98",3483:"e2ee2547",3516:"a53c10b6",3530:"6722a8a2",3552:"47f78016",3650:"cbfeefa5",3677:"8728ff6e",3702:"0a7287d1",3739:"63e352f1",3825:"85402492",3948:"634f638b",3964:"f6b743b9",3981:"ac9dfb86",3984:"dda474f7",4021:"420c943b",4121:"65e1b5bb",4179:"a5a0fb59",4263:"67704088",4299:"46c2ea84",4302:"3532b962",4409:"c33f7c58",4546:"ff9fdf30",4587:"660fa9a8",4628:"9cbb6df5",4693:"78be2787",4804:"675f6b93",4816:"1597e6ab",4987:"426f31c9",5053:"e1dd6eb2",5162:"a91f27a1",5199:"3279ffb0",5222:"e87d7966",5296:"89401417",5388:"6bce37dd",5396:"7978eaa6",5483:"6dd2e776",5516:"f0b87fce",5538:"c2e4e128",5542:"2415a393",5751:"0b6b1006",5880:"44b88e7a",5894:"9f4aae42",5895:"8c600d1a",5905:"bf9be456",5906:"6a95dc71",6158:"c974fd83",6232:"98d35574",6280:"ef4f9471",6332:"9104eb78",6377:"60e50f48",6434:"8b7573ce",6460:"4b302272",6691:"f880a0b6",6745:"bd1fb6bf",6784:"7390477e",6817:"bfe27ed8",6831:"db163b6b",6836:"6a0a1572",6848:"7a2232ea",6901:"b3be02c7",7030:"b98dcedf",7048:"c9f92a3c",7065:"ec811562",7094:"7d87d54d",7155:"63fcff7b",7186:"3af65503",7327:"9fb7e6d7",7347:"28a1547e",7403:"b7e38370",7464:"8a6c1e6c",7465:"bbb2fa05",7519:"4b44411c",7663:"c97239fe",7808:"bef2dc07",7817:"35007573",7828:"1e9c0247",7833:"baab9911",7846:"f094a417",7898:"842aa391",7934:"ddb44f8c",7958:"f530bc3f",7997:"c6078082",8006:"aa8839d2",8056:"505bf7e0",8175:"1ec7becf",8178:"63eebd02",8276:"6c7b8e6e",8329:"a6df2462",8342:"a4a361a9",8360:"633025f0",8367:"f57b5335",8418:"a87978e5",8423:"57954414",8467:"17187818",8481:"97d0db97",8573:"e1315acd",8736:"1b6d2920",8853:"0431f48c",8880:"40534de5",8897:"41e07c46",8907:"9be0d5b2",8936:"05758184",8965:"499c3a46",9220:"c83f87c4",9303:"fd0e86c6",9366:"dfac513d",9412:"53da2fcd",9460:"18379a56",9497:"a968035f",9501:"f45f2462",9502:"891fe76e",9511:"3e808e2f",9514:"345ac1e0",9600:"22147d2c",9647:"dec7fb01",9726:"a56836f1",9737:"401bc498",9762:"757ce62d",9797:"0a830937",9806:"aa25371d",9903:"557aa14c",9905:"0705465d",9944:"7af075a5"}[n]+".chunk.js"}}(),function(){e.miniCssF=function(n){}}(),function(){e.g=function(){if(typeof globalThis=="object")return globalThis;try{return this||new Function("return this")()}catch{if(typeof window=="object")return window}}()}(),function(){e.o=function(n,i){return Object.prototype.hasOwnProperty.call(n,i)}}(),function(){var n={},i="@strapi/admin:";e.l=function(t,o,r,s){if(n[t]){n[t].push(o);return}var a,c;if(r!==void 0)for(var l=document.getElementsByTagName("script"),d=0;d<l.length;d++){var f=l[d];if(f.getAttribute("src")==t||f.getAttribute("data-webpack")==i+r){a=f;break}}a||(c=!0,a=document.createElement("script"),a.charset="utf-8",a.timeout=120,e.nc&&a.setAttribute("nonce",e.nc),a.setAttribute("data-webpack",i+r),a.src=t),n[t]=[o];var u=function(g,p){a.onerror=a.onload=null,clearTimeout(b);var h=n[t];if(delete n[t],a.parentNode&&a.parentNode.removeChild(a),h&&h.forEach(function(v){return v(p)}),g)return g(p)},b=setTimeout(u.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=u.bind(null,a.onerror),a.onload=u.bind(null,a.onload),c&&document.head.appendChild(a)}}(),function(){e.r=function(n){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})}}(),function(){e.nmd=function(n){return n.paths=[],n.children||(n.children=[]),n}}(),function(){e.p="/admin/"}(),function(){e.b=document.baseURI||self.location.href;var n={1303:0};e.f.j=function(o,r){var s=e.o(n,o)?n[o]:void 0;if(s!==0)if(s)r.push(s[2]);else if(o!=1303){var a=new Promise(function(f,u){s=n[o]=[f,u]});r.push(s[2]=a);var c=e.p+e.u(o),l=new Error,d=function(f){if(e.o(n,o)&&(s=n[o],s!==0&&(n[o]=void 0),s)){var u=f&&(f.type==="load"?"missing":f.type),b=f&&f.target&&f.target.src;l.message="Loading chunk "+o+` failed.
2
+ (`+u+": "+b+")",l.name="ChunkLoadError",l.type=u,l.request=b,s[1](l)}};e.l(c,d,"chunk-"+o,o)}else n[o]=0},e.O.j=function(o){return n[o]===0};var i=function(o,r){var s=r[0],a=r[1],c=r[2],l,d,f=0;if(s.some(function(b){return n[b]!==0})){for(l in a)e.o(a,l)&&(e.m[l]=a[l]);if(c)var u=c(e)}for(o&&o(r);f<s.length;f++)d=s[f],e.o(n,d)&&n[d]&&n[d][0](),n[d]=0;return e.O(u)},t=self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[];t.forEach(i.bind(null,0)),t.push=i.bind(null,t.push.bind(t))}(),function(){e.nc=void 0}()})();
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[]).push([[302],{68951:function(J,m,e){e.r(m),e.d(m,{SingleSignOn:function(){return R},default:function(){return k}});var t=e(32735),E=e(96709),M=e(27649),y=e(82055),C=e(41415),I=e(17e3),O=e(87933),b=e(49372),A=e(15335),u=e(5803),P=e(71842),D=e(68465),T=e(84967),f=e(6407),o=e(19565),x=e(66456),F=e(89793),B=e.n(F),G=e(67879),h=e(15062),v=e(2160),S=e(30305),H=e(86209),i=e(24346),Z=i.Ry().shape({autoRegister:i.Xg().required(o.I0.required),defaultRole:i.nK().when("autoRegister",(a,l)=>a?l.required(o.I0.required):l.nullable()),ssoLockedRoles:i.IX().nullable().of(i.nK().when("ssoLockedRoles",(a,l)=>a?l.required(o.I0.required):l.nullable()))});const R=()=>{const{formatMessage:a}=(0,G.Z)(),l=(0,h.v9)(S._),{isLoading:z,allowedActions:{canUpdate:g,canReadRoles:K}}=(0,o.ss)({...l.settings.sso,readRoles:l.settings.roles.read}),[{formErrors:n,initialData:U,isLoading:X,modifiedData:r,showHeaderButtonLoader:N},Y,{handleChange:d,handleSubmit:W}]=(0,v.G4)((0,H.IF)("providers/options"),Z,()=>{},["autoRegister","defaultRole","ssoLockedRoles"]),{roles:L}=(0,v.bF)(K);(0,o.go)();const j=z||X,p=B()(U,r);return t.createElement(E.A,null,t.createElement(o.SL,{name:"SSO"}),t.createElement(M.o,{tabIndex:-1},t.createElement("form",{onSubmit:s=>{if(p){s.preventDefault();return}W(s)}},t.createElement(y.T,{primaryAction:t.createElement(C.z,{"data-testid":"save-button",disabled:p,loading:N,startIcon:t.createElement(x.Z,null),type:"submit",size:"L"},a({id:"global.save",defaultMessage:"Save"})),title:a({id:"Settings.sso.title",defaultMessage:"Single Sign-On"}),subtitle:a({id:"Settings.sso.description",defaultMessage:"Configure the settings for the Single Sign-On feature."})}),t.createElement(I.D,null,j?t.createElement(o.dO,null):t.createElement(O.k,{direction:"column",alignItems:"stretch",gap:4,background:"neutral0",padding:6,shadow:"filterShadow",hasRadius:!0},t.createElement(b.Z,{variant:"delta",as:"h2"},a({id:"global.settings",defaultMessage:"Settings"})),t.createElement(A.r,{gap:4},t.createElement(u.P,{col:6,m:6,s:12},t.createElement(P.s,{"aria-label":"autoRegister","data-testid":"autoRegister",disabled:!g,checked:r.autoRegister,hint:a({id:"Settings.sso.form.registration.description",defaultMessage:"Create new user on SSO login if no account exists"}),label:a({id:"Settings.sso.form.registration.label",defaultMessage:"Auto-registration"}),name:"autoRegister",offLabel:a({id:"app.components.ToggleCheckbox.off-label",defaultMessage:"Off"}),onLabel:a({id:"app.components.ToggleCheckbox.on-label",defaultMessage:"On"}),onChange:s=>{d({target:{name:"autoRegister",value:s.target.checked}})}})),t.createElement(u.P,{col:6,m:6,s:12},t.createElement(D.P,{disabled:!g,hint:a({id:"Settings.sso.form.defaultRole.description",defaultMessage:"It will attach the new authenticated user to the selected role"}),error:n.defaultRole?a({id:n.defaultRole.id,defaultMessage:n.defaultRole.id}):"",label:a({id:"Settings.sso.form.defaultRole.label",defaultMessage:"Default role"}),name:"defaultRole",onChange:s=>{d({target:{name:"defaultRole",value:s}})},placeholder:a({id:"components.InputSelect.option.placeholder",defaultMessage:"Choose here"}),value:r.defaultRole},L.map(({id:s,name:c})=>t.createElement(T.W,{key:s,value:s.toString()},c)))),t.createElement(u.P,{col:6,m:6,s:12},t.createElement(f.NU,{disabled:!g,hint:a({id:"Settings.sso.form.localAuthenticationLock.description",defaultMessage:"Select the roles for which you want to disable the local authentication"}),error:n.ssoLockedRoles?a({id:n.ssoLockedRoles.id,defaultMessage:n.ssoLockedRoles.id}):"",label:a({id:"Settings.sso.form.localAuthenticationLock.label",defaultMessage:"Local authentication lock-out"}),name:"ssoLockedRoles",onChange:s=>{d({target:{name:"ssoLockedRoles",value:s}})},placeholder:a({id:"components.InputSelect.option.placeholder",defaultMessage:"Choose here"}),onClear:()=>{d({target:{name:"ssoLockedRoles",emptyArray:[]}})},value:r.ssoLockedRoles||[],withTags:!0},L.map(({id:s,name:c})=>t.createElement(f.ML,{key:s,value:s.toString()},c))))))))))};var k=()=>{const a=(0,h.v9)(S._);return t.createElement(o.O4,{permissions:a.settings.sso.main},t.createElement(R,null))}}}]);
@@ -1,15 +1,37 @@
1
1
  import * as React from 'react';
2
2
 
3
- import { Grid, GridItem, MultiSelectNested, TextInput } from '@strapi/design-system';
3
+ import {
4
+ Grid,
5
+ GridItem,
6
+ MultiSelect,
7
+ MultiSelectGroup,
8
+ MultiSelectOption,
9
+ TextInput,
10
+ Typography,
11
+ } from '@strapi/design-system';
4
12
  import { useCollator } from '@strapi/helper-plugin';
5
13
  import { useField } from 'formik';
6
14
  import PropTypes from 'prop-types';
7
15
  import { useIntl } from 'react-intl';
8
16
  import { useDispatch } from 'react-redux';
17
+ import styled from 'styled-components';
9
18
 
10
19
  import { updateWorkflow } from '../../actions';
11
20
 
12
- export function WorkflowAttributes({ canUpdate, contentTypes: { collectionTypes, singleTypes } }) {
21
+ const NestedOption = styled(MultiSelectOption)`
22
+ padding-left: ${({ theme }) => theme.spaces[7]};
23
+ `;
24
+
25
+ const ContentTypeTakeNotice = styled(Typography)`
26
+ font-style: italic;
27
+ `;
28
+
29
+ export function WorkflowAttributes({
30
+ canUpdate,
31
+ contentTypes: { collectionTypes, singleTypes },
32
+ currentWorkflow,
33
+ workflows,
34
+ }) {
13
35
  const { formatMessage, locale } = useIntl();
14
36
  const dispatch = useDispatch();
15
37
  const [nameField, nameMeta, nameHelper] = useField('name');
@@ -39,7 +61,7 @@ export function WorkflowAttributes({ canUpdate, contentTypes: { collectionTypes,
39
61
  </GridItem>
40
62
 
41
63
  <GridItem col={6}>
42
- <MultiSelectNested
64
+ <MultiSelect
43
65
  {...contentTypesField}
44
66
  customizeContent={(value) =>
45
67
  formatMessage(
@@ -62,7 +84,12 @@ export function WorkflowAttributes({ canUpdate, contentTypes: { collectionTypes,
62
84
  dispatch(updateWorkflow({ contentTypes: values }));
63
85
  contentTypesHelper.setValue(values);
64
86
  }}
65
- options={[
87
+ placeholder={formatMessage({
88
+ id: 'Settings.review-workflows.workflow.contentTypes.placeholder',
89
+ defaultMessage: 'Select',
90
+ })}
91
+ >
92
+ {[
66
93
  ...(collectionTypes.length > 0
67
94
  ? [
68
95
  {
@@ -94,12 +121,58 @@ export function WorkflowAttributes({ canUpdate, contentTypes: { collectionTypes,
94
121
  },
95
122
  ]
96
123
  : []),
97
- ]}
98
- placeholder={formatMessage({
99
- id: 'Settings.review-workflows.workflow.contentTypes.placeholder',
100
- defaultMessage: 'Select',
124
+ ].map((opt) => {
125
+ if ('children' in opt) {
126
+ return (
127
+ <MultiSelectGroup
128
+ key={opt.label}
129
+ label={opt.label}
130
+ values={opt.children.map((child) => child.value.toString())}
131
+ >
132
+ {opt.children.map((child) => {
133
+ const { name: assignedWorkflowName } =
134
+ workflows.find(
135
+ (workflow) =>
136
+ ((currentWorkflow && workflow.id !== currentWorkflow.id) ||
137
+ !currentWorkflow) &&
138
+ workflow.contentTypes.includes(child.value)
139
+ ) ?? {};
140
+
141
+ return (
142
+ <NestedOption key={child.value} value={child.value}>
143
+ {formatMessage(
144
+ {
145
+ id: 'Settings.review-workflows.workflow.contentTypes.assigned.notice',
146
+ defaultMessage:
147
+ '{label} {name, select, undefined {} other {<i>(assigned to <em>{name}</em> workflow)</i>}}',
148
+ },
149
+ {
150
+ label: child.label,
151
+ name: assignedWorkflowName,
152
+ em: (...children) => (
153
+ <Typography as="em" fontWeight="bold">
154
+ {children}
155
+ </Typography>
156
+ ),
157
+ i: (...children) => (
158
+ <ContentTypeTakeNotice>{children}</ContentTypeTakeNotice>
159
+ ),
160
+ }
161
+ )}
162
+ </NestedOption>
163
+ );
164
+ })}
165
+ </MultiSelectGroup>
166
+ );
167
+ }
168
+
169
+ return (
170
+ <MultiSelectOption key={opt.value} value={opt.value}>
171
+ {opt.label}
172
+ </MultiSelectOption>
173
+ );
101
174
  })}
102
- />
175
+ </MultiSelect>
103
176
  </GridItem>
104
177
  </Grid>
105
178
  );
@@ -114,6 +187,7 @@ const ContentTypeType = PropTypes.shape({
114
187
 
115
188
  WorkflowAttributes.defaultProps = {
116
189
  canUpdate: true,
190
+ currentWorkflow: undefined,
117
191
  };
118
192
 
119
193
  WorkflowAttributes.propTypes = {
@@ -122,4 +196,6 @@ WorkflowAttributes.propTypes = {
122
196
  collectionTypes: PropTypes.arrayOf(ContentTypeType).isRequired,
123
197
  singleTypes: PropTypes.arrayOf(ContentTypeType).isRequired,
124
198
  }).isRequired,
199
+ currentWorkflow: PropTypes.object,
200
+ workflows: PropTypes.array.isRequired,
125
201
  };
@@ -1,7 +1,8 @@
1
1
  import * as React from 'react';
2
2
 
3
- import { Button, Flex, Loader } from '@strapi/design-system';
3
+ import { Button, Flex, Loader, Typography } from '@strapi/design-system';
4
4
  import {
5
+ ConfirmDialog,
5
6
  useAPIErrorHandler,
6
7
  useFetchClient,
7
8
  useNotification,
@@ -42,6 +43,7 @@ export function ReviewWorkflowsCreateView() {
42
43
  const permissions = useSelector(selectAdminPermissions);
43
44
  const toggleNotification = useNotification();
44
45
  const { collectionTypes, singleTypes, isLoading: isLoadingModels } = useContentTypes();
46
+ const { isLoading: isWorkflowLoading, meta, workflows } = useReviewWorkflows();
45
47
  const {
46
48
  clientState: {
47
49
  currentWorkflow: { data: currentWorkflow, isDirty: currentWorkflowIsDirty },
@@ -52,8 +54,11 @@ export function ReviewWorkflowsCreateView() {
52
54
  } = useRBAC(permissions.settings['review-workflows']);
53
55
  const [showLimitModal, setShowLimitModal] = React.useState(false);
54
56
  const { isLoading: isLicenseLoading, getFeature } = useLicenseLimits();
55
- const { meta, isLoading: isWorkflowLoading } = useReviewWorkflows();
56
57
  const [initialErrors, setInitialErrors] = React.useState(null);
58
+ const [savePrompts, setSavePrompts] = React.useState({});
59
+
60
+ const limits = getFeature('review-workflows');
61
+ const contentTypesFromOtherWorkflows = workflows.flatMap((workflow) => workflow.contentTypes);
57
62
 
58
63
  const { mutateAsync, isLoading } = useMutation(
59
64
  async ({ workflow }) => {
@@ -79,6 +84,8 @@ export function ReviewWorkflowsCreateView() {
79
84
  );
80
85
 
81
86
  const submitForm = async () => {
87
+ setSavePrompts({});
88
+
82
89
  try {
83
90
  const workflow = await mutateAsync({ workflow: currentWorkflow });
84
91
 
@@ -110,13 +117,23 @@ export function ReviewWorkflowsCreateView() {
110
117
  }
111
118
  };
112
119
 
113
- const limits = getFeature('review-workflows');
120
+ const handleConfirmDeleteDialog = async () => {
121
+ await submitForm();
122
+ };
123
+
124
+ const handleConfirmClose = () => {
125
+ setSavePrompts({});
126
+ };
114
127
 
115
128
  const formik = useFormik({
116
129
  enableReinitialize: true,
117
130
  initialErrors,
118
131
  initialValues: currentWorkflow,
119
132
  async onSubmit() {
133
+ const isContentTypeReassignment = currentWorkflow.contentTypes.some((contentType) =>
134
+ contentTypesFromOtherWorkflows.includes(contentType)
135
+ );
136
+
120
137
  /**
121
138
  * If the current license has a limit, check if the total count of workflows
122
139
  * exceeds that limit and display the limits modal instead of sending the
@@ -140,6 +157,8 @@ export function ReviewWorkflowsCreateView() {
140
157
  parseInt(limits[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME], 10)
141
158
  ) {
142
159
  setShowLimitModal('stage');
160
+ } else if (isContentTypeReassignment) {
161
+ setSavePrompts((prev) => ({ ...prev, hasReassignedContentTypes: true }));
143
162
  } else {
144
163
  submitForm();
145
164
  }
@@ -243,7 +262,10 @@ export function ReviewWorkflowsCreateView() {
243
262
  </Loader>
244
263
  ) : (
245
264
  <Flex alignItems="stretch" direction="column" gap={7}>
246
- <WorkflowAttributes contentTypes={{ collectionTypes, singleTypes }} />
265
+ <WorkflowAttributes
266
+ contentTypes={{ collectionTypes, singleTypes }}
267
+ workflows={workflows}
268
+ />
247
269
  <Stages stages={formik.values?.stages} />
248
270
  </Flex>
249
271
  )}
@@ -252,6 +274,41 @@ export function ReviewWorkflowsCreateView() {
252
274
  </Form>
253
275
  </FormikProvider>
254
276
 
277
+ <ConfirmDialog.Root
278
+ isConfirmButtonLoading={isLoading}
279
+ isOpen={Object.keys(savePrompts).length > 0}
280
+ onToggleDialog={handleConfirmClose}
281
+ onConfirm={handleConfirmDeleteDialog}
282
+ >
283
+ <ConfirmDialog.Body>
284
+ <Flex direction="column" gap={5}>
285
+ {savePrompts.hasReassignedContentTypes && (
286
+ <Typography textAlign="center" variant="omega">
287
+ {formatMessage(
288
+ {
289
+ id: 'Settings.review-workflows.page.delete.confirm.contentType.body',
290
+ defaultMessage:
291
+ '{count} {count, plural, one {content-type} other {content-types}} {count, plural, one {is} other {are}} already mapped to {count, plural, one {another workflow} other {other workflows}}. If you save changes, {count, plural, one {this} other {these}} {count, plural, one {content-type} other {{count} content-types}} will no more be mapped to the {count, plural, one {another workflow} other {other workflows}} and all corresponding information will be removed.',
292
+ },
293
+ {
294
+ count: contentTypesFromOtherWorkflows.filter((contentType) =>
295
+ currentWorkflow.contentTypes.includes(contentType)
296
+ ).length,
297
+ }
298
+ )}
299
+ </Typography>
300
+ )}
301
+
302
+ <Typography textAlign="center" variant="omega">
303
+ {formatMessage({
304
+ id: 'Settings.review-workflows.page.delete.confirm.confirm',
305
+ defaultMessage: 'Are you sure you want to save?',
306
+ })}
307
+ </Typography>
308
+ </Flex>
309
+ </ConfirmDialog.Body>
310
+ </ConfirmDialog.Root>
311
+
255
312
  <LimitsModal.Root
256
313
  isOpen={showLimitModal === 'workflow'}
257
314
  onClose={() => setShowLimitModal(false)}
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
2
 
3
- import { Button, Flex, Loader } from '@strapi/design-system';
3
+ import { Button, Flex, Loader, Typography } from '@strapi/design-system';
4
4
  import {
5
5
  ConfirmDialog,
6
6
  useAPIErrorHandler,
@@ -45,10 +45,10 @@ export function ReviewWorkflowsEditView() {
45
45
  const {
46
46
  isLoading: isWorkflowLoading,
47
47
  meta,
48
- workflows: [workflow],
48
+ workflows,
49
49
  status: workflowStatus,
50
50
  refetch,
51
- } = useReviewWorkflows({ id: workflowId });
51
+ } = useReviewWorkflows();
52
52
  const { collectionTypes, singleTypes, isLoading: isLoadingModels } = useContentTypes();
53
53
  const {
54
54
  status,
@@ -56,18 +56,23 @@ export function ReviewWorkflowsEditView() {
56
56
  currentWorkflow: {
57
57
  data: currentWorkflow,
58
58
  isDirty: currentWorkflowIsDirty,
59
- hasDeletedServerStages: currentWorkflowHasDeletedServerStages,
59
+ hasDeletedServerStages,
60
60
  },
61
61
  },
62
62
  } = useSelector((state) => state?.[REDUX_NAMESPACE] ?? initialState);
63
63
  const {
64
64
  allowedActions: { canDelete, canUpdate },
65
65
  } = useRBAC(permissions.settings['review-workflows']);
66
- const [isConfirmDeleteDialogOpen, setIsConfirmDeleteDialogOpen] = React.useState(false);
66
+ const [savePrompts, setSavePrompts] = React.useState({});
67
67
  const { getFeature, isLoading: isLicenseLoading } = useLicenseLimits();
68
68
  const [showLimitModal, setShowLimitModal] = React.useState(false);
69
69
  const [initialErrors, setInitialErrors] = React.useState(null);
70
70
 
71
+ const workflow = workflows.find((workflow) => workflow.id === parseInt(workflowId, 10));
72
+ const contentTypesFromOtherWorkflows = workflows
73
+ .filter((workflow) => workflow.id !== parseInt(workflowId, 10))
74
+ .flatMap((workflow) => workflow.contentTypes);
75
+
71
76
  const { mutateAsync, isLoading } = useMutation(
72
77
  async ({ workflow }) => {
73
78
  const {
@@ -125,15 +130,15 @@ export function ReviewWorkflowsEditView() {
125
130
  await updateWorkflow(currentWorkflow);
126
131
  await refetch();
127
132
 
128
- setIsConfirmDeleteDialogOpen(false);
133
+ setSavePrompts({});
129
134
  };
130
135
 
131
136
  const handleConfirmDeleteDialog = async () => {
132
137
  await submitForm();
133
138
  };
134
139
 
135
- const toggleConfirmDeleteDialog = () => {
136
- setIsConfirmDeleteDialogOpen((prev) => !prev);
140
+ const handleConfirmClose = () => {
141
+ setSavePrompts({});
137
142
  };
138
143
 
139
144
  const formik = useFormik({
@@ -141,9 +146,11 @@ export function ReviewWorkflowsEditView() {
141
146
  initialErrors,
142
147
  initialValues: currentWorkflow,
143
148
  async onSubmit() {
144
- if (currentWorkflowHasDeletedServerStages) {
145
- setIsConfirmDeleteDialogOpen(true);
146
- } else if (
149
+ const isContentTypeReassignment = currentWorkflow.contentTypes.some((contentType) =>
150
+ contentTypesFromOtherWorkflows.includes(contentType)
151
+ );
152
+
153
+ if (
147
154
  limits?.[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME] &&
148
155
  meta?.workflowCount > parseInt(limits[CHARGEBEE_WORKFLOW_ENTITLEMENT_NAME], 10)
149
156
  ) {
@@ -165,6 +172,14 @@ export function ReviewWorkflowsEditView() {
165
172
  parseInt(limits[CHARGEBEE_STAGES_PER_WORKFLOW_ENTITLEMENT_NAME], 10)
166
173
  ) {
167
174
  setShowLimitModal('stage');
175
+ } else if (hasDeletedServerStages || isContentTypeReassignment) {
176
+ if (hasDeletedServerStages) {
177
+ setSavePrompts((prev) => ({ ...prev, hasDeletedServerStages: true }));
178
+ }
179
+
180
+ if (isContentTypeReassignment) {
181
+ setSavePrompts((prev) => ({ ...prev, hasReassignedContentTypes: true }));
182
+ }
168
183
  } else {
169
184
  submitForm();
170
185
  }
@@ -243,7 +258,7 @@ export function ReviewWorkflowsEditView() {
243
258
  disabled={!currentWorkflowIsDirty || !canUpdate}
244
259
  // if the confirm dialog is open the loading state is on
245
260
  // the confirm button already
246
- loading={!isConfirmDeleteDialogOpen && isLoading}
261
+ loading={!Object.keys(savePrompts).length > 0 && isLoading}
247
262
  >
248
263
  {formatMessage({
249
264
  id: 'global.save',
@@ -279,6 +294,8 @@ export function ReviewWorkflowsEditView() {
279
294
  <WorkflowAttributes
280
295
  canUpdate={canUpdate}
281
296
  contentTypes={{ collectionTypes, singleTypes }}
297
+ currentWorkflow={currentWorkflow}
298
+ workflows={workflows}
282
299
  />
283
300
  <Stages
284
301
  canDelete={canDelete}
@@ -291,17 +308,50 @@ export function ReviewWorkflowsEditView() {
291
308
  </Form>
292
309
  </FormikProvider>
293
310
 
294
- <ConfirmDialog
295
- bodyText={{
296
- id: 'Settings.review-workflows.page.delete.confirm.body',
297
- defaultMessage:
298
- 'All entries assigned to deleted stages will be moved to the previous stage. Are you sure you want to save?',
299
- }}
311
+ <ConfirmDialog.Root
300
312
  isConfirmButtonLoading={isLoading}
301
- isOpen={isConfirmDeleteDialogOpen}
302
- onToggleDialog={toggleConfirmDeleteDialog}
313
+ isOpen={Object.keys(savePrompts).length > 0}
314
+ onToggleDialog={handleConfirmClose}
303
315
  onConfirm={handleConfirmDeleteDialog}
304
- />
316
+ >
317
+ <ConfirmDialog.Body>
318
+ <Flex direction="column" gap={5}>
319
+ {savePrompts.hasDeletedServerStages && (
320
+ <Typography textAlign="center" variant="omega">
321
+ {formatMessage({
322
+ id: 'Settings.review-workflows.page.delete.confirm.stages.body',
323
+ defaultMessage:
324
+ 'All entries assigned to deleted stages will be moved to the previous stage.',
325
+ })}
326
+ </Typography>
327
+ )}
328
+
329
+ {savePrompts.hasReassignedContentTypes && (
330
+ <Typography textAlign="center" variant="omega">
331
+ {formatMessage(
332
+ {
333
+ id: 'Settings.review-workflows.page.delete.confirm.contentType.body',
334
+ defaultMessage:
335
+ '{count} {count, plural, one {content-type} other {content-types}} {count, plural, one {is} other {are}} already mapped to {count, plural, one {another workflow} other {other workflows}}. If you save changes, {count, plural, one {this} other {these}} {count, plural, one {content-type} other {{count} content-types}} will no more be mapped to the {count, plural, one {another workflow} other {other workflows}} and all corresponding information will be removed.',
336
+ },
337
+ {
338
+ count: contentTypesFromOtherWorkflows.filter((contentType) =>
339
+ currentWorkflow.contentTypes.includes(contentType)
340
+ ).length,
341
+ }
342
+ )}
343
+ </Typography>
344
+ )}
345
+
346
+ <Typography textAlign="center" variant="omega">
347
+ {formatMessage({
348
+ id: 'Settings.review-workflows.page.delete.confirm.confirm',
349
+ defaultMessage: 'Are you sure you want to save?',
350
+ })}
351
+ </Typography>
352
+ </Flex>
353
+ </ConfirmDialog.Body>
354
+ </ConfirmDialog.Root>
305
355
 
306
356
  <LimitsModal.Root
307
357
  isOpen={showLimitModal === 'workflow'}
@@ -73,7 +73,7 @@ export function reducer(state = initialState, action) {
73
73
 
74
74
  if (!currentWorkflow.hasDeletedServerStages) {
75
75
  draft.clientState.currentWorkflow.hasDeletedServerStages = !!(
76
- state.serverState.currentWorkflow?.stages ?? []
76
+ state.serverState.workflow?.stages ?? []
77
77
  ).find((stage) => stage.id === stageId);
78
78
  }
79
79
 
@@ -1,4 +1,4 @@
1
- import React, { useEffect } from 'react';
1
+ import React from 'react';
2
2
 
3
3
  import {
4
4
  Button,
@@ -62,13 +62,7 @@ export const SingleSignOn = () => {
62
62
 
63
63
  const showLoader = isLoadingForPermissions || isLoading;
64
64
 
65
- useEffect(() => {
66
- if (formErrors.defaultRole) {
67
- const selector = `[name="defaultRole"]`;
68
-
69
- document.querySelector(selector).focus();
70
- }
71
- }, [formErrors]);
65
+ // TODO: focus() first error field, but it looks like that requires refactoring from useSettingsForm to Formik
72
66
 
73
67
  const isHeaderButtonDisabled = isEqual(initialData, modifiedData);
74
68
 
@@ -6,8 +6,13 @@ const providerOptionsUpdateSchema = yup.object().shape({
6
6
  autoRegister: yup.boolean().required(),
7
7
  defaultRole: yup
8
8
  .strapiID()
9
- .required()
9
+ .when('autoRegister', (value, initSchema) => {
10
+ return value ? initSchema.required() : initSchema.nullable();
11
+ })
10
12
  .test('is-valid-role', 'You must submit a valid default role', (roleId) => {
13
+ if (roleId === null) {
14
+ return true;
15
+ }
11
16
  return strapi.admin.services.role.exists({ id: roleId });
12
17
  }),
13
18
  ssoLockedRoles: yup