@strapi/admin 4.13.0-alpha.0 → 4.13.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,6 +7,7 @@ import take from 'lodash/take';
7
7
  import uniqBy from 'lodash/uniqBy';
8
8
  import unset from 'lodash/unset';
9
9
 
10
+ import { CREATOR_FIELDS } from '../../constants/attributes';
10
11
  import { getMaxTempKey } from '../../utils';
11
12
 
12
13
  import { findAllAndReplace, moveFields } from './utils';
@@ -236,17 +237,14 @@ const reducer = (state, action) =>
236
237
 
237
238
  const findAllRelationsAndReplaceWithEmptyArray = findAllAndReplace(
238
239
  components,
239
- (value) => {
240
- return value.type === 'relation';
241
- },
242
240
  (value, { path }) => {
243
- const relationFieldName = path[path.length - 1];
244
-
245
- // When editing, we don't want to fetch the relations with creator fields because we already have it
246
- if (value && (relationFieldName === 'createdBy' || relationFieldName === 'updatedBy')) {
247
- return value;
248
- }
241
+ const fieldName = path[path.length - 1];
242
+ // We don't replace creator fields because we already return them without need to populate them separately
243
+ const isCreatorField = CREATOR_FIELDS.includes(fieldName);
249
244
 
245
+ return value.type === 'relation' && !isCreatorField;
246
+ },
247
+ (_, { path }) => {
250
248
  if (state.modifiedData?.id === data.id && get(state.modifiedData, path)) {
251
249
  return get(state.modifiedData, path);
252
250
  }
@@ -2,6 +2,7 @@ import get from 'lodash/get';
2
2
  import isArray from 'lodash/isArray';
3
3
  import isObject from 'lodash/isObject';
4
4
 
5
+ import { CREATOR_FIELDS } from '../../../constants/attributes';
5
6
  import { getInitialDataPathUsingTempKeys } from '../../../utils/paths';
6
7
 
7
8
  /* eslint-disable indent */
@@ -29,6 +30,11 @@ const cleanData = ({ browserState, serverState }, currentSchema, componentsSchem
29
30
  */
30
31
  const recursiveCleanData = (browserState, serverState, schema, pathToParent) => {
31
32
  return Object.keys(browserState).reduce((acc, current) => {
33
+ // Creator attributes can be safely ignored because they are handle on the backend
34
+ if (CREATOR_FIELDS.includes(current)) {
35
+ return acc;
36
+ }
37
+
32
38
  const path = pathToParent ? `${pathToParent}.${current}` : current;
33
39
  const attrType = getType(schema, current);
34
40
 
@@ -0,0 +1,3 @@
1
+ const CREATOR_FIELDS = ['createdBy', 'updatedBy'];
2
+
3
+ export { CREATOR_FIELDS };
@@ -1,8 +1,9 @@
1
1
  import { useRBACProvider, findMatchingPermissions } from '@strapi/helper-plugin';
2
2
 
3
+ import { CREATOR_FIELDS } from '../constants/attributes';
4
+
3
5
  const NOT_ALLOWED_FILTERS = ['json', 'component', 'media', 'richtext', 'dynamiczone', 'password'];
4
6
  const TIMESTAMPS = ['createdAt', 'updatedAt'];
5
- const CREATOR_ATTRIBUTES = ['createdBy', 'updatedBy'];
6
7
 
7
8
  export const useAllowedAttributes = (contentType, slug) => {
8
9
  const { allPermissions } = useRBACProvider();
@@ -38,10 +39,5 @@ export const useAllowedAttributes = (contentType, slug) => {
38
39
  return true;
39
40
  });
40
41
 
41
- return [
42
- 'id',
43
- ...allowedAttributes,
44
- ...TIMESTAMPS,
45
- ...(canReadAdminUsers ? CREATOR_ATTRIBUTES : []),
46
- ];
42
+ return ['id', ...allowedAttributes, ...TIMESTAMPS, ...(canReadAdminUsers ? CREATOR_FIELDS : [])];
47
43
  };
@@ -49,6 +49,7 @@ import { useEnterprise } from '../../../hooks/useEnterprise';
49
49
  import { InjectionZone } from '../../../shared/components';
50
50
  import { Filter } from '../../components/Filter';
51
51
  import { AdminUsersFilter } from '../../components/Filter/CustomInputs/AdminUsersFilter';
52
+ import { CREATOR_FIELDS } from '../../constants/attributes';
52
53
  import { useAllowedAttributes } from '../../hooks/useAllowedAttributes';
53
54
  import { getTrad, getDisplayName } from '../../utils';
54
55
 
@@ -63,8 +64,7 @@ import { buildValidGetParams } from './utils';
63
64
  const REVIEW_WORKFLOW_COLUMNS_CE = null;
64
65
  const REVIEW_WORKFLOW_COLUMNS_CELL_CE = () => null;
65
66
  const REVIEW_WORKFLOW_FILTER_CE = [];
66
- const CREATOR_ATTRIBUTES = ['createdBy', 'updatedBy'];
67
- const USER_FILTER_ATTRIBUTES = [...CREATOR_ATTRIBUTES, 'strapi_assignee'];
67
+ const USER_FILTER_ATTRIBUTES = [...CREATOR_FIELDS, 'strapi_assignee'];
68
68
 
69
69
  function ListView({
70
70
  canCreate,
@@ -1,4 +1,4 @@
1
- "use strict";(self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[]).push([[801],{63546:function(K,T,n){n.r(T),n.d(T,{default:function(){return jt}});var e=n(32735),s=n(45509),b=n(33795),Z=n.n(b),y=n(20108),M=JSON.parse('{"i8":"4.13.0-alpha.0"}'),S=n(79652),L=n(90869),P=n(74506),F=n(51968),D=n(15062),f=n(53038),Re=n(88311),ee=n.n(Re),Ae=n(75974),m=n(87933),te=n(71933),ne=n(67563),Le=n(50563),v=n(72850),V=n(41415),ae=n(35331),Oe=n(60216),r=n.n(Oe),B=n(67879),C=n(8471);const xe=(0,C.ZP)(m.k)`
1
+ "use strict";(self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[]).push([[801],{63546:function(K,T,n){n.r(T),n.d(T,{default:function(){return jt}});var e=n(32735),s=n(45509),b=n(33795),Z=n.n(b),y=n(20108),M=JSON.parse('{"i8":"4.13.0-alpha.1"}'),S=n(79652),L=n(90869),P=n(74506),F=n(51968),D=n(15062),f=n(53038),Re=n(88311),ee=n.n(Re),Ae=n(75974),m=n(87933),te=n(71933),ne=n(67563),Le=n(50563),v=n(72850),V=n(41415),ae=n(35331),Oe=n(60216),r=n.n(Oe),B=n(67879),C=n(8471);const xe=(0,C.ZP)(m.k)`
2
2
  position: fixed;
3
3
  z-index: 4;
4
4
  inset: 0;
@@ -76,4 +76,4 @@
76
76
  :hover {
77
77
  text-decoration: underline;
78
78
  }
79
- `;var yt=()=>{const t=(0,e.useRef)(),[a,o]=(0,e.useState)(!1),{formatMessage:i}=(0,B.Z)(),{communityEdition:d}=(0,s.L7)(),u=()=>{o(p=>!p)},h=[...mt,{label:{id:"Settings.application.get-help",defaultMessage:"Get help"},icon:rt.Z,href:d?"https://discord.strapi.io":"https://support.strapi.io/support/home"}];return e.createElement(v.x,{as:"aside",position:"fixed",bottom:2,right:2},e.createElement(gt,{"aria-label":i(a?{id:"app.components.Onboarding.help.button-close",defaultMessage:"Close help menu"}:{id:"app.components.Onboarding.help.button",defaultMessage:"Open help menu"}),onClick:u,ref:t},e.createElement(X.J,{as:a?ae.Z:it.Z,color:"buttonNeutral0"})),a&&e.createElement(te.h,null,e.createElement(ot.VY,{padding:0,onDimiss:u,source:t,placement:"top-end",spacing:12},e.createElement(m.k,{justifyContent:"space-between",paddingBottom:5,paddingRight:6,paddingLeft:6,paddingTop:6},e.createElement(fe,{fontWeight:"bold"},i({id:"app.components.Onboarding.title",defaultMessage:"Get started videos"})),e.createElement(Ee,{as:"a",href:he.href,target:"_blank",rel:"noreferrer noopener",variant:"pi",textColor:"primary600"},i(he.label))),e.createElement(de.i,null),pt.map(({href:p,duration:g,label:l},I)=>e.createElement(ft,{as:"a",href:p,target:"_blank",rel:"noreferrer noopener",key:p,hasRadius:!0,paddingTop:4,paddingBottom:4,paddingLeft:6,paddingRight:11},e.createElement(v.x,{paddingRight:5},e.createElement(E.Z,{textColor:"neutral200",variant:"alpha"},I+1)),e.createElement(v.x,{position:"relative"},e.createElement(Et,{src:ct,alt:""}),e.createElement(ht,{position:"absolute",top:"50%",left:"50%",background:"primary600",borderRadius:"50%",justifyContent:"center",width:6,height:6},e.createElement(X.J,{as:lt.Z,color:"buttonNeutral0",width:3,height:3}))),e.createElement(m.k,{direction:"column",alignItems:"start",paddingLeft:4},e.createElement(E.Z,{fontWeight:"bold"},i(l)),e.createElement(st.T,null,":"),e.createElement(E.Z,{textColor:"neutral600",variant:"pi"},g)))),e.createElement(m.k,{direction:"column",alignItems:"stretch",gap:2,paddingLeft:5,paddingTop:2,paddingBottom:5},h.map(({label:p,href:g,icon:l})=>e.createElement(m.k,{gap:3,key:g},e.createElement(X.J,{as:l,color:"primary600"}),e.createElement(Ee,{as:"a",href:g,target:"_blank",rel:"noreferrer noopener",variant:"sigma",textColor:"primary700"},i(p))))))))};const vt=(0,e.lazy)(()=>Promise.all([n.e(3739),n.e(9806),n.e(4546),n.e(994)]).then(n.bind(n,33653))),Ct=(0,e.lazy)(()=>n.e(3981).then(n.bind(n,83555))),Tt=(0,e.lazy)(()=>n.e(3677).then(n.bind(n,91534))),Mt=(0,e.lazy)(()=>n.e(5516).then(n.bind(n,95018))),ye=(0,e.lazy)(()=>Promise.resolve().then(n.bind(n,33248))),St=(0,e.lazy)(()=>n.e(9501).then(n.bind(n,7703))),Pt=(0,e.lazy)(()=>n.e(9497).then(n.bind(n,94987))),ve=(0,e.lazy)(()=>n.e(5895).then(n.bind(n,87211)).then(t=>({default:t.SettingsPage}))),It=()=>{const{trackUsage:t}=(0,s.rS)(),a=(0,D.I0)(),o=(0,D.v9)(i=>i.admin_app.status);(0,e.useEffect)(()=>{o==="init"&&(t("didAccessAuthenticatedAdministration"),a({type:at.eb}))},[o])};var Rt=()=>{It();const{isLoading:t,generalSectionLinks:a,pluginsSectionLinks:o}=(0,S.H9)(),{menu:i}=(0,s.j1)(),{showTutorials:d}=(0,S.um)(),u=(0,e.useMemo)(()=>i.filter(h=>h.Component).map(({to:h,Component:p,exact:g})=>(0,L.ot)(p,h,g)),[i]);return t?e.createElement(s.dO,null):e.createElement(P.DndProvider,{backend:F.PD},e.createElement(nt,{sideNav:e.createElement(_e,{generalSectionLinks:a,pluginsSectionLinks:o})},e.createElement(e.Suspense,{fallback:e.createElement(s.dO,null)},e.createElement(f.rs,null,e.createElement(f.AW,{path:"/",component:Ct,exact:!0}),e.createElement(f.AW,{path:"/me",component:Pt,exact:!0}),e.createElement(f.AW,{path:"/content-manager",component:vt}),u,e.createElement(f.AW,{path:"/settings/:settingId",component:ve}),e.createElement(f.AW,{path:"/settings",component:ve,exact:!0}),e.createElement(f.AW,{path:"/marketplace"},e.createElement(Mt,null)),e.createElement(f.AW,{path:"/list-plugins",exact:!0},e.createElement(Tt,null)),e.createElement(f.AW,{path:"/404",component:ye}),e.createElement(f.AW,{path:"/500",component:St}),e.createElement(f.AW,{path:"",component:ye}))),e.createElement(Qe,null),d&&e.createElement(yt,null)))},At=t=>({plugins:Object.keys(t).reduce((a,o)=>(a[o]={...t[o]},a),{})}),Lt=n(3040),Ot=n.n(Lt);const Ce={plugins:null};var xt=(t=Ce,a)=>(0,le.ZP)(t,o=>{switch(a.type){case"SET_PLUGIN_READY":{Ot()(o,["plugins",a.pluginId,"isReady"],!0);break}default:return o}}),bt=()=>{const{plugins:t}=(0,s.j1)(),[{plugins:a},o]=(0,e.useReducer)(xt,Ce,()=>At(t)),i=(0,e.useRef)(u=>{o({type:"SET_PLUGIN_READY",pluginId:u})});if(Object.keys(a).some(u=>a[u].isReady===!1)){const u=Object.keys(a).reduce((h,p)=>{const g=a[p].initializer;if(g){const l=a[p].pluginId;h.push(e.createElement(g,{key:l,setPlugin:i.current}))}return h},[]);return e.createElement(e.Fragment,null,u,e.createElement(s.dO,null))}return e.createElement(Rt,null)},Te=n(82702);const Dt=()=>({type:Te.l}),kt=t=>({type:Te.m,permissions:t}),Me=({children:t,permissions:a,refetchPermissions:o})=>{const{allPermissions:i}=(0,D.v9)(u=>u.rbacProvider),d=(0,D.I0)();return(0,e.useEffect)(()=>(d(kt(a)),()=>{d(Dt())}),[a,d]),i?e.createElement(s.oL.Provider,{value:{allPermissions:i,refetchPermissions:o}},t):e.createElement(s.dO,null)};Me.propTypes={children:r().element.isRequired,permissions:r().array.isRequired,refetchPermissions:r().func.isRequired};var Zt=Me,Bt=n(54770),q=n.n(Bt),Se=(t,a)=>!q().valid(t)||!q().valid(a)?!1:q().lt(t,a);const Pe=M.i8,Wt=!JSON.parse(localStorage.getItem("STRAPI_UPDATE_NOTIF")),{get:_}=(0,s.tg)(),Gt=async t=>{try{const a=await fetch("https://api.github.com/repos/strapi/strapi/releases/latest");if(!a.ok)throw new Error("Failed to fetch latest Strapi version.");const{tag_name:o}=await a.json();return Se(Pe,o)&&Wt&&t({type:"info",message:{id:"notification.version.update.message"},link:{url:`https://github.com/strapi/strapi/releases/tag/${o}`,label:{id:"global.see-more"}},blockTransition:!0,onClose:()=>localStorage.setItem("STRAPI_UPDATE_NOTIF",!0)}),o}catch{return Pe}},Nt=async()=>{try{const{data:t,headers:a}=await _("/admin/information");if(!a["content-type"].includes("application/json"))throw new Error("Not found");return t.data}catch(t){throw new Error(t)}},Ut=async()=>{try{const{data:t,headers:a}=await _("/admin/users/me/permissions");if(!a["content-type"].includes("application/json"))throw new Error("Not found");return t.data}catch(t){throw new Error(t)}},Ft=async()=>{try{const{data:{data:{roles:t}}}=await _("/admin/users/me");return t}catch(t){throw new Error(t)}},Ie=M.i8;var jt=()=>{const{setGuidedTourVisibility:t}=(0,s.c1)(),a=(0,s.lm)(),o=s.I8.getUserInfo(),i=Z()(o,"username")||(0,L.Pp)(o.firstname,o.lastname),[d,u]=(0,e.useState)(i),[h,p]=(0,e.useState)(null),{showReleaseNotification:g}=(0,S.um)(),[{data:l,status:I},{data:k,isLoading:$},{data:Q,status:G,refetch:R,isFetching:z},{data:A}]=(0,y.useQueries)([{queryKey:"app-infos",queryFn:Nt},{queryKey:"strapi-release",queryFn:()=>Gt(a),enabled:g,initialData:Ie},{queryKey:"admin-users-permission",queryFn:Ut,initialData:[]},{queryKey:"user-roles",queryFn:Ft}]),O=Se(Ie,k);return(0,e.useEffect)(()=>{A&&A.find(({code:U})=>U==="strapi-super-admin")&&l?.autoReload&&t(!0)},[A,l,t]),(0,e.useEffect)(()=>{(async()=>{const U=await(0,L.Qy)(o);p(U)})()},[o]),$||(z||I==="loading"||G==="loading")?e.createElement(s.dO,null):I==="error"?e.createElement("div",null,"error..."):e.createElement(s.iq,{...l,userId:h,latestStrapiReleaseTag:k,setUserDisplayName:u,shouldUpdateStrapi:O,userDisplayName:d},e.createElement(Zt,{permissions:Q,refetchPermissions:R},e.createElement(bt,null)))}},79348:function(K,T,n){var e=n(32735),s=n(72850),b=n(45509),Z=n(60216),y=n.n(Z),M=n(47806);const S=({type:L,...P})=>e.createElement(s.x,{width:(0,b.Q1)(2),height:"100%",background:L===M.VM?"neutral300":"primary500",hasRadius:!0,...P});S.defaultProps={type:M.VM},S.propTypes={type:y().oneOf([M.lW,M.hx,M.VM])},T.Z=S},13856:function(K,T,n){var e=n(32735),s=n(87933),b=n(99140),Z=n(49372),y=n(45509),M=n(66456),S=n(60216),L=n.n(S),P=n(47806);const F=({type:D,number:f})=>D===P.hx?e.createElement(s.k,{background:"primary600",padding:2,borderRadius:"50%",width:(0,y.Q1)(30),height:(0,y.Q1)(30),justifyContent:"center"},e.createElement(b.J,{as:M.Z,"aria-hidden":!0,width:(0,y.Q1)(16),color:"neutral0"})):D===P.lW?e.createElement(s.k,{background:"primary600",padding:2,borderRadius:"50%",width:(0,y.Q1)(30),height:(0,y.Q1)(30),justifyContent:"center"},e.createElement(Z.Z,{fontWeight:"semiBold",textColor:"neutral0"},f)):e.createElement(s.k,{borderColor:"neutral500",borderWidth:"1px",borderStyle:"solid",padding:2,borderRadius:"50%",width:(0,y.Q1)(30),height:(0,y.Q1)(30),justifyContent:"center"},e.createElement(Z.Z,{fontWeight:"semiBold",textColor:"neutral600"},f));F.defaultProps={number:void 0,type:P.VM},F.propTypes={number:L().number,type:L().oneOf([P.lW,P.hx,P.VM])},T.Z=F},47806:function(K,T,n){n.d(T,{VM:function(){return b},hx:function(){return s},lW:function(){return e}});const e="isActive",s="isDone",b="isNotDone"},75974:function(K,T){const n={contentTypeBuilder:{home:{title:{id:"app.components.GuidedTour.home.CTB.title",defaultMessage:"\u{1F9E0} Build the content structure"},cta:{title:{id:"app.components.GuidedTour.home.CTB.cta.title",defaultMessage:"Go to the Content type Builder"},type:"REDIRECT",target:"/plugins/content-type-builder"},trackingEvent:"didClickGuidedTourHomepageContentTypeBuilder"},create:{title:{id:"app.components.GuidedTour.CTB.create.title",defaultMessage:"\u{1F9E0} Create a first Collection type"},content:{id:"app.components.GuidedTour.CTB.create.content",defaultMessage:"<p>Collection types help you manage several entries, Single types are suitable to manage only one entry.</p> <p>Ex: For a Blog website, Articles would be a Collection type whereas a Homepage would be a Single type.</p>"},cta:{title:{id:"app.components.GuidedTour.CTB.create.cta.title",defaultMessage:"Build a Collection type"},type:"CLOSE"},trackingEvent:"didClickGuidedTourStep1CollectionType"},success:{title:{id:"app.components.GuidedTour.CTB.success.title",defaultMessage:"Step 1: Completed \u2705"},content:{id:"app.components.GuidedTour.CTB.success.content",defaultMessage:"<p>Good going!</p><b>\u26A1\uFE0F What would you like to share with the world?</b>"},cta:{title:{id:"app.components.GuidedTour.create-content",defaultMessage:"Create content"},type:"REDIRECT",target:"/content-manager"},trackingEvent:"didCreateGuidedTourCollectionType"}},contentManager:{home:{title:{id:"app.components.GuidedTour.home.CM.title",defaultMessage:"\u26A1\uFE0F What would you like to share with the world?"},cta:{title:{id:"app.components.GuidedTour.create-content",defaultMessage:"Create content"},type:"REDIRECT",target:"/content-manager"},trackingEvent:"didClickGuidedTourHomepageContentManager"},create:{title:{id:"app.components.GuidedTour.CM.create.title",defaultMessage:"\u26A1\uFE0F Create content"},content:{id:"app.components.GuidedTour.CM.create.content",defaultMessage:"<p>Create and manage all the content here in the Content Manager.</p><p>Ex: Taking the Blog website example further, one can write an Article, save and publish it as they like.</p><p>\u{1F4A1} Quick tip - Don't forget to hit publish on the content you create.</p>"},cta:{title:{id:"app.components.GuidedTour.create-content",defaultMessage:"Create content"},type:"CLOSE"},trackingEvent:"didClickGuidedTourStep2ContentManager"},success:{title:{id:"app.components.GuidedTour.CM.success.title",defaultMessage:"Step 2: Completed \u2705"},content:{id:"app.components.GuidedTour.CM.success.content",defaultMessage:"<p>Awesome, one last step to go!</p><b>\u{1F680} See content in action</b>"},cta:{title:{id:"app.components.GuidedTour.CM.success.cta.title",defaultMessage:"Test the API"},type:"REDIRECT",target:"/settings/api-tokens"},trackingEvent:"didCreateGuidedTourEntry"}},apiTokens:{home:{title:{id:"app.components.GuidedTour.apiTokens.create.title",defaultMessage:"\u{1F680} See content in action"},cta:{title:{id:"app.components.GuidedTour.home.apiTokens.cta.title",defaultMessage:"Test the API"},type:"REDIRECT",target:"/settings/api-tokens"},trackingEvent:"didClickGuidedTourHomepageApiTokens"},create:{title:{id:"app.components.GuidedTour.apiTokens.create.title",defaultMessage:"\u{1F680} See content in action"},content:{id:"app.components.GuidedTour.apiTokens.create.content",defaultMessage:"<p>Generate an authentication token here and retrieve the content you just created.</p>"},cta:{title:{id:"app.components.GuidedTour.apiTokens.create.cta.title",defaultMessage:"Generate an API Token"},type:"CLOSE"},trackingEvent:"didClickGuidedTourStep3ApiTokens"},success:{title:{id:"app.components.GuidedTour.apiTokens.success.title",defaultMessage:"Step 3: Completed \u2705"},content:{id:"app.components.GuidedTour.apiTokens.success.content",defaultMessage:"<p>See content in action by making an HTTP request:</p><ul><li><p>To this URL: <light>https://'<'YOUR_DOMAIN'>'/api/'<'YOUR_CT'>'</light></p></li><li><p>With the header: <light>Authorization: bearer '<'YOUR_API_TOKEN'>'</light></p></li></ul><p>For more ways to interact with content, see the <documentationLink>documentation</documentationLink>.</p>"},trackingEvent:"didGenerateGuidedTourApiTokens"}}};T.Z=n}}]);
79
+ `;var yt=()=>{const t=(0,e.useRef)(),[a,o]=(0,e.useState)(!1),{formatMessage:i}=(0,B.Z)(),{communityEdition:d}=(0,s.L7)(),u=()=>{o(p=>!p)},h=[...mt,{label:{id:"Settings.application.get-help",defaultMessage:"Get help"},icon:rt.Z,href:d?"https://discord.strapi.io":"https://support.strapi.io/support/home"}];return e.createElement(v.x,{as:"aside",position:"fixed",bottom:2,right:2},e.createElement(gt,{"aria-label":i(a?{id:"app.components.Onboarding.help.button-close",defaultMessage:"Close help menu"}:{id:"app.components.Onboarding.help.button",defaultMessage:"Open help menu"}),onClick:u,ref:t},e.createElement(X.J,{as:a?ae.Z:it.Z,color:"buttonNeutral0"})),a&&e.createElement(te.h,null,e.createElement(ot.VY,{padding:0,onDimiss:u,source:t,placement:"top-end",spacing:12},e.createElement(m.k,{justifyContent:"space-between",paddingBottom:5,paddingRight:6,paddingLeft:6,paddingTop:6},e.createElement(fe,{fontWeight:"bold"},i({id:"app.components.Onboarding.title",defaultMessage:"Get started videos"})),e.createElement(Ee,{as:"a",href:he.href,target:"_blank",rel:"noreferrer noopener",variant:"pi",textColor:"primary600"},i(he.label))),e.createElement(de.i,null),pt.map(({href:p,duration:g,label:l},I)=>e.createElement(ft,{as:"a",href:p,target:"_blank",rel:"noreferrer noopener",key:p,hasRadius:!0,paddingTop:4,paddingBottom:4,paddingLeft:6,paddingRight:11},e.createElement(v.x,{paddingRight:5},e.createElement(E.Z,{textColor:"neutral200",variant:"alpha"},I+1)),e.createElement(v.x,{position:"relative"},e.createElement(Et,{src:ct,alt:""}),e.createElement(ht,{position:"absolute",top:"50%",left:"50%",background:"primary600",borderRadius:"50%",justifyContent:"center",width:6,height:6},e.createElement(X.J,{as:lt.Z,color:"buttonNeutral0",width:3,height:3}))),e.createElement(m.k,{direction:"column",alignItems:"start",paddingLeft:4},e.createElement(E.Z,{fontWeight:"bold"},i(l)),e.createElement(st.T,null,":"),e.createElement(E.Z,{textColor:"neutral600",variant:"pi"},g)))),e.createElement(m.k,{direction:"column",alignItems:"stretch",gap:2,paddingLeft:5,paddingTop:2,paddingBottom:5},h.map(({label:p,href:g,icon:l})=>e.createElement(m.k,{gap:3,key:g},e.createElement(X.J,{as:l,color:"primary600"}),e.createElement(Ee,{as:"a",href:g,target:"_blank",rel:"noreferrer noopener",variant:"sigma",textColor:"primary700"},i(p))))))))};const vt=(0,e.lazy)(()=>Promise.all([n.e(3739),n.e(9806),n.e(4546),n.e(994)]).then(n.bind(n,4639))),Ct=(0,e.lazy)(()=>n.e(3981).then(n.bind(n,83555))),Tt=(0,e.lazy)(()=>n.e(3677).then(n.bind(n,91534))),Mt=(0,e.lazy)(()=>n.e(5516).then(n.bind(n,95018))),ye=(0,e.lazy)(()=>Promise.resolve().then(n.bind(n,33248))),St=(0,e.lazy)(()=>n.e(9501).then(n.bind(n,7703))),Pt=(0,e.lazy)(()=>n.e(9497).then(n.bind(n,94987))),ve=(0,e.lazy)(()=>n.e(5895).then(n.bind(n,87211)).then(t=>({default:t.SettingsPage}))),It=()=>{const{trackUsage:t}=(0,s.rS)(),a=(0,D.I0)(),o=(0,D.v9)(i=>i.admin_app.status);(0,e.useEffect)(()=>{o==="init"&&(t("didAccessAuthenticatedAdministration"),a({type:at.eb}))},[o])};var Rt=()=>{It();const{isLoading:t,generalSectionLinks:a,pluginsSectionLinks:o}=(0,S.H9)(),{menu:i}=(0,s.j1)(),{showTutorials:d}=(0,S.um)(),u=(0,e.useMemo)(()=>i.filter(h=>h.Component).map(({to:h,Component:p,exact:g})=>(0,L.ot)(p,h,g)),[i]);return t?e.createElement(s.dO,null):e.createElement(P.DndProvider,{backend:F.PD},e.createElement(nt,{sideNav:e.createElement(_e,{generalSectionLinks:a,pluginsSectionLinks:o})},e.createElement(e.Suspense,{fallback:e.createElement(s.dO,null)},e.createElement(f.rs,null,e.createElement(f.AW,{path:"/",component:Ct,exact:!0}),e.createElement(f.AW,{path:"/me",component:Pt,exact:!0}),e.createElement(f.AW,{path:"/content-manager",component:vt}),u,e.createElement(f.AW,{path:"/settings/:settingId",component:ve}),e.createElement(f.AW,{path:"/settings",component:ve,exact:!0}),e.createElement(f.AW,{path:"/marketplace"},e.createElement(Mt,null)),e.createElement(f.AW,{path:"/list-plugins",exact:!0},e.createElement(Tt,null)),e.createElement(f.AW,{path:"/404",component:ye}),e.createElement(f.AW,{path:"/500",component:St}),e.createElement(f.AW,{path:"",component:ye}))),e.createElement(Qe,null),d&&e.createElement(yt,null)))},At=t=>({plugins:Object.keys(t).reduce((a,o)=>(a[o]={...t[o]},a),{})}),Lt=n(3040),Ot=n.n(Lt);const Ce={plugins:null};var xt=(t=Ce,a)=>(0,le.ZP)(t,o=>{switch(a.type){case"SET_PLUGIN_READY":{Ot()(o,["plugins",a.pluginId,"isReady"],!0);break}default:return o}}),bt=()=>{const{plugins:t}=(0,s.j1)(),[{plugins:a},o]=(0,e.useReducer)(xt,Ce,()=>At(t)),i=(0,e.useRef)(u=>{o({type:"SET_PLUGIN_READY",pluginId:u})});if(Object.keys(a).some(u=>a[u].isReady===!1)){const u=Object.keys(a).reduce((h,p)=>{const g=a[p].initializer;if(g){const l=a[p].pluginId;h.push(e.createElement(g,{key:l,setPlugin:i.current}))}return h},[]);return e.createElement(e.Fragment,null,u,e.createElement(s.dO,null))}return e.createElement(Rt,null)},Te=n(82702);const Dt=()=>({type:Te.l}),kt=t=>({type:Te.m,permissions:t}),Me=({children:t,permissions:a,refetchPermissions:o})=>{const{allPermissions:i}=(0,D.v9)(u=>u.rbacProvider),d=(0,D.I0)();return(0,e.useEffect)(()=>(d(kt(a)),()=>{d(Dt())}),[a,d]),i?e.createElement(s.oL.Provider,{value:{allPermissions:i,refetchPermissions:o}},t):e.createElement(s.dO,null)};Me.propTypes={children:r().element.isRequired,permissions:r().array.isRequired,refetchPermissions:r().func.isRequired};var Zt=Me,Bt=n(54770),q=n.n(Bt),Se=(t,a)=>!q().valid(t)||!q().valid(a)?!1:q().lt(t,a);const Pe=M.i8,Wt=!JSON.parse(localStorage.getItem("STRAPI_UPDATE_NOTIF")),{get:_}=(0,s.tg)(),Gt=async t=>{try{const a=await fetch("https://api.github.com/repos/strapi/strapi/releases/latest");if(!a.ok)throw new Error("Failed to fetch latest Strapi version.");const{tag_name:o}=await a.json();return Se(Pe,o)&&Wt&&t({type:"info",message:{id:"notification.version.update.message"},link:{url:`https://github.com/strapi/strapi/releases/tag/${o}`,label:{id:"global.see-more"}},blockTransition:!0,onClose:()=>localStorage.setItem("STRAPI_UPDATE_NOTIF",!0)}),o}catch{return Pe}},Nt=async()=>{try{const{data:t,headers:a}=await _("/admin/information");if(!a["content-type"].includes("application/json"))throw new Error("Not found");return t.data}catch(t){throw new Error(t)}},Ut=async()=>{try{const{data:t,headers:a}=await _("/admin/users/me/permissions");if(!a["content-type"].includes("application/json"))throw new Error("Not found");return t.data}catch(t){throw new Error(t)}},Ft=async()=>{try{const{data:{data:{roles:t}}}=await _("/admin/users/me");return t}catch(t){throw new Error(t)}},Ie=M.i8;var jt=()=>{const{setGuidedTourVisibility:t}=(0,s.c1)(),a=(0,s.lm)(),o=s.I8.getUserInfo(),i=Z()(o,"username")||(0,L.Pp)(o.firstname,o.lastname),[d,u]=(0,e.useState)(i),[h,p]=(0,e.useState)(null),{showReleaseNotification:g}=(0,S.um)(),[{data:l,status:I},{data:k,isLoading:$},{data:Q,status:G,refetch:R,isFetching:z},{data:A}]=(0,y.useQueries)([{queryKey:"app-infos",queryFn:Nt},{queryKey:"strapi-release",queryFn:()=>Gt(a),enabled:g,initialData:Ie},{queryKey:"admin-users-permission",queryFn:Ut,initialData:[]},{queryKey:"user-roles",queryFn:Ft}]),O=Se(Ie,k);return(0,e.useEffect)(()=>{A&&A.find(({code:U})=>U==="strapi-super-admin")&&l?.autoReload&&t(!0)},[A,l,t]),(0,e.useEffect)(()=>{(async()=>{const U=await(0,L.Qy)(o);p(U)})()},[o]),$||(z||I==="loading"||G==="loading")?e.createElement(s.dO,null):I==="error"?e.createElement("div",null,"error..."):e.createElement(s.iq,{...l,userId:h,latestStrapiReleaseTag:k,setUserDisplayName:u,shouldUpdateStrapi:O,userDisplayName:d},e.createElement(Zt,{permissions:Q,refetchPermissions:R},e.createElement(bt,null)))}},79348:function(K,T,n){var e=n(32735),s=n(72850),b=n(45509),Z=n(60216),y=n.n(Z),M=n(47806);const S=({type:L,...P})=>e.createElement(s.x,{width:(0,b.Q1)(2),height:"100%",background:L===M.VM?"neutral300":"primary500",hasRadius:!0,...P});S.defaultProps={type:M.VM},S.propTypes={type:y().oneOf([M.lW,M.hx,M.VM])},T.Z=S},13856:function(K,T,n){var e=n(32735),s=n(87933),b=n(99140),Z=n(49372),y=n(45509),M=n(66456),S=n(60216),L=n.n(S),P=n(47806);const F=({type:D,number:f})=>D===P.hx?e.createElement(s.k,{background:"primary600",padding:2,borderRadius:"50%",width:(0,y.Q1)(30),height:(0,y.Q1)(30),justifyContent:"center"},e.createElement(b.J,{as:M.Z,"aria-hidden":!0,width:(0,y.Q1)(16),color:"neutral0"})):D===P.lW?e.createElement(s.k,{background:"primary600",padding:2,borderRadius:"50%",width:(0,y.Q1)(30),height:(0,y.Q1)(30),justifyContent:"center"},e.createElement(Z.Z,{fontWeight:"semiBold",textColor:"neutral0"},f)):e.createElement(s.k,{borderColor:"neutral500",borderWidth:"1px",borderStyle:"solid",padding:2,borderRadius:"50%",width:(0,y.Q1)(30),height:(0,y.Q1)(30),justifyContent:"center"},e.createElement(Z.Z,{fontWeight:"semiBold",textColor:"neutral600"},f));F.defaultProps={number:void 0,type:P.VM},F.propTypes={number:L().number,type:L().oneOf([P.lW,P.hx,P.VM])},T.Z=F},47806:function(K,T,n){n.d(T,{VM:function(){return b},hx:function(){return s},lW:function(){return e}});const e="isActive",s="isDone",b="isNotDone"},75974:function(K,T){const n={contentTypeBuilder:{home:{title:{id:"app.components.GuidedTour.home.CTB.title",defaultMessage:"\u{1F9E0} Build the content structure"},cta:{title:{id:"app.components.GuidedTour.home.CTB.cta.title",defaultMessage:"Go to the Content type Builder"},type:"REDIRECT",target:"/plugins/content-type-builder"},trackingEvent:"didClickGuidedTourHomepageContentTypeBuilder"},create:{title:{id:"app.components.GuidedTour.CTB.create.title",defaultMessage:"\u{1F9E0} Create a first Collection type"},content:{id:"app.components.GuidedTour.CTB.create.content",defaultMessage:"<p>Collection types help you manage several entries, Single types are suitable to manage only one entry.</p> <p>Ex: For a Blog website, Articles would be a Collection type whereas a Homepage would be a Single type.</p>"},cta:{title:{id:"app.components.GuidedTour.CTB.create.cta.title",defaultMessage:"Build a Collection type"},type:"CLOSE"},trackingEvent:"didClickGuidedTourStep1CollectionType"},success:{title:{id:"app.components.GuidedTour.CTB.success.title",defaultMessage:"Step 1: Completed \u2705"},content:{id:"app.components.GuidedTour.CTB.success.content",defaultMessage:"<p>Good going!</p><b>\u26A1\uFE0F What would you like to share with the world?</b>"},cta:{title:{id:"app.components.GuidedTour.create-content",defaultMessage:"Create content"},type:"REDIRECT",target:"/content-manager"},trackingEvent:"didCreateGuidedTourCollectionType"}},contentManager:{home:{title:{id:"app.components.GuidedTour.home.CM.title",defaultMessage:"\u26A1\uFE0F What would you like to share with the world?"},cta:{title:{id:"app.components.GuidedTour.create-content",defaultMessage:"Create content"},type:"REDIRECT",target:"/content-manager"},trackingEvent:"didClickGuidedTourHomepageContentManager"},create:{title:{id:"app.components.GuidedTour.CM.create.title",defaultMessage:"\u26A1\uFE0F Create content"},content:{id:"app.components.GuidedTour.CM.create.content",defaultMessage:"<p>Create and manage all the content here in the Content Manager.</p><p>Ex: Taking the Blog website example further, one can write an Article, save and publish it as they like.</p><p>\u{1F4A1} Quick tip - Don't forget to hit publish on the content you create.</p>"},cta:{title:{id:"app.components.GuidedTour.create-content",defaultMessage:"Create content"},type:"CLOSE"},trackingEvent:"didClickGuidedTourStep2ContentManager"},success:{title:{id:"app.components.GuidedTour.CM.success.title",defaultMessage:"Step 2: Completed \u2705"},content:{id:"app.components.GuidedTour.CM.success.content",defaultMessage:"<p>Awesome, one last step to go!</p><b>\u{1F680} See content in action</b>"},cta:{title:{id:"app.components.GuidedTour.CM.success.cta.title",defaultMessage:"Test the API"},type:"REDIRECT",target:"/settings/api-tokens"},trackingEvent:"didCreateGuidedTourEntry"}},apiTokens:{home:{title:{id:"app.components.GuidedTour.apiTokens.create.title",defaultMessage:"\u{1F680} See content in action"},cta:{title:{id:"app.components.GuidedTour.home.apiTokens.cta.title",defaultMessage:"Test the API"},type:"REDIRECT",target:"/settings/api-tokens"},trackingEvent:"didClickGuidedTourHomepageApiTokens"},create:{title:{id:"app.components.GuidedTour.apiTokens.create.title",defaultMessage:"\u{1F680} See content in action"},content:{id:"app.components.GuidedTour.apiTokens.create.content",defaultMessage:"<p>Generate an authentication token here and retrieve the content you just created.</p>"},cta:{title:{id:"app.components.GuidedTour.apiTokens.create.cta.title",defaultMessage:"Generate an API Token"},type:"CLOSE"},trackingEvent:"didClickGuidedTourStep3ApiTokens"},success:{title:{id:"app.components.GuidedTour.apiTokens.success.title",defaultMessage:"Step 3: Completed \u2705"},content:{id:"app.components.GuidedTour.apiTokens.success.content",defaultMessage:"<p>See content in action by making an HTTP request:</p><ul><li><p>To this URL: <light>https://'<'YOUR_DOMAIN'>'/api/'<'YOUR_CT'>'</light></p></li><li><p>With the header: <light>Authorization: bearer '<'YOUR_API_TOKEN'>'</light></p></li></ul><p>For more ways to interact with content, see the <documentationLink>documentation</documentationLink>.</p>"},trackingEvent:"didGenerateGuidedTourApiTokens"}}};T.Z=n}}]);