@strapi/content-type-builder 5.31.3 → 5.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/dist/admin/components/AIChat/Chat.js +3 -1
  2. package/dist/admin/components/AIChat/Chat.js.map +1 -1
  3. package/dist/admin/components/AIChat/Chat.mjs +4 -2
  4. package/dist/admin/components/AIChat/Chat.mjs.map +1 -1
  5. package/dist/admin/components/AIChat/hooks/useFeedback.js +4 -1
  6. package/dist/admin/components/AIChat/hooks/useFeedback.js.map +1 -1
  7. package/dist/admin/components/AIChat/hooks/useFeedback.mjs +5 -2
  8. package/dist/admin/components/AIChat/hooks/useFeedback.mjs.map +1 -1
  9. package/dist/admin/components/AIChat/providers/ChatProvider.js +3 -2
  10. package/dist/admin/components/AIChat/providers/ChatProvider.js.map +1 -1
  11. package/dist/admin/components/AIChat/providers/ChatProvider.mjs +3 -2
  12. package/dist/admin/components/AIChat/providers/ChatProvider.mjs.map +1 -1
  13. package/dist/admin/components/CTBSession/CTBSessionProvider.js +49 -0
  14. package/dist/admin/components/CTBSession/CTBSessionProvider.js.map +1 -0
  15. package/dist/admin/components/CTBSession/CTBSessionProvider.mjs +46 -0
  16. package/dist/admin/components/CTBSession/CTBSessionProvider.mjs.map +1 -0
  17. package/dist/admin/components/CTBSession/sessionContext.js +8 -0
  18. package/dist/admin/components/CTBSession/sessionContext.js.map +1 -0
  19. package/dist/admin/components/CTBSession/sessionContext.mjs +6 -0
  20. package/dist/admin/components/CTBSession/sessionContext.mjs.map +1 -0
  21. package/dist/admin/components/CTBSession/useCTBSession.js +25 -0
  22. package/dist/admin/components/CTBSession/useCTBSession.js.map +1 -0
  23. package/dist/admin/components/CTBSession/useCTBSession.mjs +23 -0
  24. package/dist/admin/components/CTBSession/useCTBSession.mjs.map +1 -0
  25. package/dist/admin/components/CTBSession/useCTBTracking.js +37 -0
  26. package/dist/admin/components/CTBSession/useCTBTracking.js.map +1 -0
  27. package/dist/admin/components/CTBSession/useCTBTracking.mjs +35 -0
  28. package/dist/admin/components/CTBSession/useCTBTracking.mjs.map +1 -0
  29. package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.js +4 -2
  30. package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.js.map +1 -1
  31. package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.mjs +4 -2
  32. package/dist/admin/components/ContentTypeBuilderNav/useContentTypeBuilderMenu.mjs.map +1 -1
  33. package/dist/admin/components/DataManager/DataManagerProvider.js +40 -3
  34. package/dist/admin/components/DataManager/DataManagerProvider.js.map +1 -1
  35. package/dist/admin/components/DataManager/DataManagerProvider.mjs +41 -4
  36. package/dist/admin/components/DataManager/DataManagerProvider.mjs.map +1 -1
  37. package/dist/admin/components/FormModal/FormModal.js +3 -1
  38. package/dist/admin/components/FormModal/FormModal.js.map +1 -1
  39. package/dist/admin/components/FormModal/FormModal.mjs +4 -2
  40. package/dist/admin/components/FormModal/FormModal.mjs.map +1 -1
  41. package/dist/admin/components/FormModalNavigation/FormModalNavigationProvider.js +14 -1
  42. package/dist/admin/components/FormModalNavigation/FormModalNavigationProvider.js.map +1 -1
  43. package/dist/admin/components/FormModalNavigation/FormModalNavigationProvider.mjs +14 -1
  44. package/dist/admin/components/FormModalNavigation/FormModalNavigationProvider.mjs.map +1 -1
  45. package/dist/admin/components/List.js +3 -1
  46. package/dist/admin/components/List.js.map +1 -1
  47. package/dist/admin/components/List.mjs +4 -2
  48. package/dist/admin/components/List.mjs.map +1 -1
  49. package/dist/admin/pages/App/index.js +40 -37
  50. package/dist/admin/pages/App/index.js.map +1 -1
  51. package/dist/admin/pages/App/index.mjs +40 -37
  52. package/dist/admin/pages/App/index.mjs.map +1 -1
  53. package/dist/admin/pages/ListView/ListView.js +10 -1
  54. package/dist/admin/pages/ListView/ListView.js.map +1 -1
  55. package/dist/admin/pages/ListView/ListView.mjs +11 -2
  56. package/dist/admin/pages/ListView/ListView.mjs.map +1 -1
  57. package/dist/admin/src/components/CTBSession/CTBSessionProvider.d.ts +26 -0
  58. package/dist/admin/src/components/CTBSession/ctbSession.d.ts +5 -0
  59. package/dist/admin/src/components/CTBSession/sessionContext.d.ts +25 -0
  60. package/dist/admin/src/components/CTBSession/useCTBSession.d.ts +12 -0
  61. package/dist/admin/src/components/CTBSession/useCTBTracking.d.ts +13 -0
  62. package/dist/server/controllers/content-types.js +6 -0
  63. package/dist/server/controllers/content-types.js.map +1 -1
  64. package/dist/server/controllers/content-types.mjs +6 -0
  65. package/dist/server/controllers/content-types.mjs.map +1 -1
  66. package/dist/server/controllers/validation/types.js +1 -1
  67. package/dist/server/controllers/validation/types.js.map +1 -1
  68. package/dist/server/controllers/validation/types.mjs +1 -1
  69. package/dist/server/controllers/validation/types.mjs.map +1 -1
  70. package/dist/server/src/controllers/content-types.d.ts.map +1 -1
  71. package/package.json +8 -8
@@ -8,6 +8,9 @@ var upperFirst = require('lodash/upperFirst');
8
8
  var reactIntl = require('react-intl');
9
9
  var reactRouterDom = require('react-router-dom');
10
10
  var styledComponents = require('styled-components');
11
+ require('react');
12
+ require('../../components/CTBSession/sessionContext.js');
13
+ var useCTBTracking = require('../../components/CTBSession/useCTBTracking.js');
11
14
  var useDataManager = require('../../components/DataManager/useDataManager.js');
12
15
  var useFormModalNavigation = require('../../components/FormModalNavigation/useFormModalNavigation.js');
13
16
  var List = require('../../components/List.js');
@@ -22,7 +25,7 @@ const LayoutsHeaderCustom = styledComponents.styled(strapiAdmin.Layouts.Header)`
22
25
  const ListView = ()=>{
23
26
  const { isInDevelopmentMode, contentTypes, components, isLoading } = useDataManager.useDataManager();
24
27
  const { formatMessage } = reactIntl.useIntl();
25
- const { trackUsage } = strapiAdmin.useTracking();
28
+ const { trackUsage } = useCTBTracking.useCTBTracking();
26
29
  const { contentTypeUid, componentUid } = reactRouterDom.useParams();
27
30
  const { onOpenModalAddComponentsToDZ, onOpenModalAddField, onOpenModalEditSchema } = useFormModalNavigation.useFormModalNavigation();
28
31
  const type = contentTypeUid ? contentTypes[contentTypeUid] : componentUid ? components[componentUid] : null;
@@ -40,6 +43,12 @@ const ListView = ()=>{
40
43
  to: "/plugins/content-type-builder/content-types/create-content-type"
41
44
  });
42
45
  }
46
+ if (contentTypeUid && type.modelType === 'contentType' && type.visible === false) {
47
+ return /*#__PURE__*/ jsxRuntime.jsx(reactRouterDom.Navigate, {
48
+ to: "/plugins/content-type-builder/content-types/create-content-type",
49
+ replace: true
50
+ });
51
+ }
43
52
  const isFromPlugin = 'plugin' in type && type?.plugin !== undefined;
44
53
  const forTarget = contentTypeUid ? 'contentType' : 'component';
45
54
  const label = type?.info?.displayName ?? '';
@@ -1 +1 @@
1
- {"version":3,"file":"ListView.js","sources":["../../../../admin/src/pages/ListView/ListView.tsx"],"sourcesContent":["/* eslint-disable import/no-default-export */\nimport { useTracking, Layouts, tours } from '@strapi/admin/strapi-admin';\nimport { Box, Button, Flex, Typography } from '@strapi/design-system';\nimport { Information, Pencil, Plus } from '@strapi/icons';\nimport upperFirst from 'lodash/upperFirst';\nimport { useIntl } from 'react-intl';\nimport { Navigate, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useDataManager } from '../../components/DataManager/useDataManager';\nimport { useFormModalNavigation } from '../../components/FormModalNavigation/useFormModalNavigation';\nimport { List } from '../../components/List';\nimport { getTrad } from '../../utils/getTrad';\n\nimport { LinkToCMSettingsView } from './LinkToCMSettingsView';\n\nimport type { Internal } from '@strapi/types';\n\nconst LayoutsHeaderCustom = styled(Layouts.Header)`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst ListView = () => {\n const { isInDevelopmentMode, contentTypes, components, isLoading } = useDataManager();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const { contentTypeUid, componentUid } = useParams<{\n contentTypeUid: Internal.UID.ContentType;\n componentUid: Internal.UID.Component;\n }>();\n\n const { onOpenModalAddComponentsToDZ, onOpenModalAddField, onOpenModalEditSchema } =\n useFormModalNavigation();\n\n const type = contentTypeUid\n ? contentTypes[contentTypeUid]\n : componentUid\n ? components[componentUid]\n : null;\n\n if (isLoading) {\n return null;\n }\n\n if (!type) {\n const allowedEndpoints = Object.values(contentTypes)\n .filter((ct) => ct.visible === true && !ct.plugin)\n .map((ct) => ct.uid)\n .sort();\n\n if (allowedEndpoints.length > 0) {\n return <Navigate to={`/plugins/content-type-builder/content-types/${allowedEndpoints[0]}`} />;\n }\n\n return <Navigate to=\"/plugins/content-type-builder/content-types/create-content-type\" />;\n }\n\n const isFromPlugin = 'plugin' in type && type?.plugin !== undefined;\n\n const forTarget = contentTypeUid ? 'contentType' : 'component';\n\n const label = type?.info?.displayName ?? '';\n\n const canEdit = isInDevelopmentMode && !isFromPlugin;\n\n const handleClickAddComponentToDZ = (dynamicZoneTarget?: string) => {\n onOpenModalAddComponentsToDZ({ dynamicZoneTarget, targetUid: type.uid });\n };\n\n const onEdit = () => {\n if ('kind' in type) {\n if (type?.kind === 'collectionType') {\n trackUsage('willEditNameOfContentType');\n }\n\n if (type?.kind === 'singleType') {\n trackUsage('willEditNameOfSingleType');\n }\n\n onOpenModalEditSchema({\n modalType: forTarget,\n forTarget: forTarget,\n targetUid: type.uid,\n kind: type?.kind,\n });\n\n return;\n }\n\n onOpenModalEditSchema({\n modalType: forTarget,\n forTarget: forTarget,\n targetUid: type.uid,\n });\n };\n\n const addNewFieldLabel = formatMessage({\n id: getTrad('table.button.no-fields'),\n defaultMessage: 'Add new field',\n });\n\n const addAnotherFieldLabel = formatMessage({\n id: getTrad('button.attributes.add.another'),\n defaultMessage: 'Add another field',\n });\n\n const isDeleted = type.status === 'REMOVED';\n\n const primaryAction = isInDevelopmentMode && (\n <Flex gap={2}>\n <LinkToCMSettingsView\n key=\"link-to-cm-settings-view\"\n type={type}\n disabled={type.status === 'NEW' || isDeleted}\n />\n <Button\n startIcon={<Pencil />}\n variant=\"tertiary\"\n onClick={onEdit}\n disabled={!canEdit || isDeleted}\n >\n {formatMessage({\n id: 'app.utils.edit',\n defaultMessage: 'Edit',\n })}\n </Button>\n\n <Button\n startIcon={<Plus />}\n variant=\"secondary\"\n minWidth=\"max-content\"\n onClick={() => {\n onOpenModalAddField({ forTarget, targetUid: type.uid });\n }}\n disabled={isDeleted}\n >\n {type.attributes.length === 0 ? addNewFieldLabel : addAnotherFieldLabel}\n </Button>\n </Flex>\n );\n\n return (\n <>\n <tours.contentTypeBuilder.Introduction>\n {/* Invisible Anchor */}\n <Box />\n </tours.contentTypeBuilder.Introduction>\n {isDeleted && (\n <Flex background=\"danger100\" justifyContent={'center'} padding={4}>\n <Flex gap={2}>\n <Information fill=\"danger600\" height=\"2rem\" width=\"2rem\" />\n <Typography>\n {formatMessage(\n {\n id: getTrad('table.warning.deleted'),\n defaultMessage: `This {kind} has been deleted`,\n },\n {\n kind: type.modelType === 'contentType' ? 'Content Type' : 'Component',\n }\n )}\n </Typography>\n </Flex>\n </Flex>\n )}\n <LayoutsHeaderCustom id=\"title\" primaryAction={primaryAction} title={upperFirst(label)} />\n <Layouts.Content>\n <Box\n background=\"neutral0\"\n shadow=\"filterShadow\"\n hasRadius\n overflow=\"auto\"\n borderColor=\"neutral150\"\n >\n <List type={type} addComponentToDZ={handleClickAddComponentToDZ} isMain />\n </Box>\n </Layouts.Content>\n </>\n );\n};\n\nexport default ListView;\n"],"names":["LayoutsHeaderCustom","styled","Layouts","Header","ListView","isInDevelopmentMode","contentTypes","components","isLoading","useDataManager","formatMessage","useIntl","trackUsage","useTracking","contentTypeUid","componentUid","useParams","onOpenModalAddComponentsToDZ","onOpenModalAddField","onOpenModalEditSchema","useFormModalNavigation","type","allowedEndpoints","Object","values","filter","ct","visible","plugin","map","uid","sort","length","_jsx","Navigate","to","isFromPlugin","undefined","forTarget","label","info","displayName","canEdit","handleClickAddComponentToDZ","dynamicZoneTarget","targetUid","onEdit","kind","modalType","addNewFieldLabel","id","getTrad","defaultMessage","addAnotherFieldLabel","isDeleted","status","primaryAction","_jsxs","Flex","gap","LinkToCMSettingsView","disabled","Button","startIcon","Pencil","variant","onClick","Plus","minWidth","attributes","_Fragment","tours","contentTypeBuilder","Introduction","Box","background","justifyContent","padding","Information","fill","height","width","Typography","modelType","title","upperFirst","Content","shadow","hasRadius","overflow","borderColor","List","addComponentToDZ","isMain"],"mappings":"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"}
1
+ {"version":3,"file":"ListView.js","sources":["../../../../admin/src/pages/ListView/ListView.tsx"],"sourcesContent":["/* eslint-disable import/no-default-export */\nimport { Layouts, tours } from '@strapi/admin/strapi-admin';\nimport { Box, Button, Flex, Typography } from '@strapi/design-system';\nimport { Information, Pencil, Plus } from '@strapi/icons';\nimport upperFirst from 'lodash/upperFirst';\nimport { useIntl } from 'react-intl';\nimport { Navigate, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useCTBTracking } from '../../components/CTBSession/ctbSession';\nimport { useDataManager } from '../../components/DataManager/useDataManager';\nimport { useFormModalNavigation } from '../../components/FormModalNavigation/useFormModalNavigation';\nimport { List } from '../../components/List';\nimport { getTrad } from '../../utils/getTrad';\n\nimport { LinkToCMSettingsView } from './LinkToCMSettingsView';\n\nimport type { Internal } from '@strapi/types';\n\nconst LayoutsHeaderCustom = styled(Layouts.Header)`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst ListView = () => {\n const { isInDevelopmentMode, contentTypes, components, isLoading } = useDataManager();\n const { formatMessage } = useIntl();\n const { trackUsage } = useCTBTracking();\n\n const { contentTypeUid, componentUid } = useParams<{\n contentTypeUid: Internal.UID.ContentType;\n componentUid: Internal.UID.Component;\n }>();\n\n const { onOpenModalAddComponentsToDZ, onOpenModalAddField, onOpenModalEditSchema } =\n useFormModalNavigation();\n\n const type = contentTypeUid\n ? contentTypes[contentTypeUid]\n : componentUid\n ? components[componentUid]\n : null;\n\n if (isLoading) {\n return null;\n }\n\n if (!type) {\n const allowedEndpoints = Object.values(contentTypes)\n .filter((ct) => ct.visible === true && !ct.plugin)\n .map((ct) => ct.uid)\n .sort();\n\n if (allowedEndpoints.length > 0) {\n return <Navigate to={`/plugins/content-type-builder/content-types/${allowedEndpoints[0]}`} />;\n }\n\n return <Navigate to=\"/plugins/content-type-builder/content-types/create-content-type\" />;\n }\n\n if (contentTypeUid && type.modelType === 'contentType' && type.visible === false) {\n return (\n <Navigate to=\"/plugins/content-type-builder/content-types/create-content-type\" replace />\n );\n }\n\n const isFromPlugin = 'plugin' in type && type?.plugin !== undefined;\n\n const forTarget = contentTypeUid ? 'contentType' : 'component';\n\n const label = type?.info?.displayName ?? '';\n\n const canEdit = isInDevelopmentMode && !isFromPlugin;\n\n const handleClickAddComponentToDZ = (dynamicZoneTarget?: string) => {\n onOpenModalAddComponentsToDZ({ dynamicZoneTarget, targetUid: type.uid });\n };\n\n const onEdit = () => {\n if ('kind' in type) {\n if (type?.kind === 'collectionType') {\n trackUsage('willEditNameOfContentType');\n }\n\n if (type?.kind === 'singleType') {\n trackUsage('willEditNameOfSingleType');\n }\n\n onOpenModalEditSchema({\n modalType: forTarget,\n forTarget: forTarget,\n targetUid: type.uid,\n kind: type?.kind,\n });\n\n return;\n }\n\n onOpenModalEditSchema({\n modalType: forTarget,\n forTarget: forTarget,\n targetUid: type.uid,\n });\n };\n\n const addNewFieldLabel = formatMessage({\n id: getTrad('table.button.no-fields'),\n defaultMessage: 'Add new field',\n });\n\n const addAnotherFieldLabel = formatMessage({\n id: getTrad('button.attributes.add.another'),\n defaultMessage: 'Add another field',\n });\n\n const isDeleted = type.status === 'REMOVED';\n\n const primaryAction = isInDevelopmentMode && (\n <Flex gap={2}>\n <LinkToCMSettingsView\n key=\"link-to-cm-settings-view\"\n type={type}\n disabled={type.status === 'NEW' || isDeleted}\n />\n <Button\n startIcon={<Pencil />}\n variant=\"tertiary\"\n onClick={onEdit}\n disabled={!canEdit || isDeleted}\n >\n {formatMessage({\n id: 'app.utils.edit',\n defaultMessage: 'Edit',\n })}\n </Button>\n\n <Button\n startIcon={<Plus />}\n variant=\"secondary\"\n minWidth=\"max-content\"\n onClick={() => {\n onOpenModalAddField({ forTarget, targetUid: type.uid });\n }}\n disabled={isDeleted}\n >\n {type.attributes.length === 0 ? addNewFieldLabel : addAnotherFieldLabel}\n </Button>\n </Flex>\n );\n\n return (\n <>\n <tours.contentTypeBuilder.Introduction>\n {/* Invisible Anchor */}\n <Box />\n </tours.contentTypeBuilder.Introduction>\n {isDeleted && (\n <Flex background=\"danger100\" justifyContent={'center'} padding={4}>\n <Flex gap={2}>\n <Information fill=\"danger600\" height=\"2rem\" width=\"2rem\" />\n <Typography>\n {formatMessage(\n {\n id: getTrad('table.warning.deleted'),\n defaultMessage: `This {kind} has been deleted`,\n },\n {\n kind: type.modelType === 'contentType' ? 'Content Type' : 'Component',\n }\n )}\n </Typography>\n </Flex>\n </Flex>\n )}\n <LayoutsHeaderCustom id=\"title\" primaryAction={primaryAction} title={upperFirst(label)} />\n <Layouts.Content>\n <Box\n background=\"neutral0\"\n shadow=\"filterShadow\"\n hasRadius\n overflow=\"auto\"\n borderColor=\"neutral150\"\n >\n <List type={type} addComponentToDZ={handleClickAddComponentToDZ} isMain />\n </Box>\n </Layouts.Content>\n </>\n );\n};\n\nexport default ListView;\n"],"names":["LayoutsHeaderCustom","styled","Layouts","Header","ListView","isInDevelopmentMode","contentTypes","components","isLoading","useDataManager","formatMessage","useIntl","trackUsage","useCTBTracking","contentTypeUid","componentUid","useParams","onOpenModalAddComponentsToDZ","onOpenModalAddField","onOpenModalEditSchema","useFormModalNavigation","type","allowedEndpoints","Object","values","filter","ct","visible","plugin","map","uid","sort","length","_jsx","Navigate","to","modelType","replace","isFromPlugin","undefined","forTarget","label","info","displayName","canEdit","handleClickAddComponentToDZ","dynamicZoneTarget","targetUid","onEdit","kind","modalType","addNewFieldLabel","id","getTrad","defaultMessage","addAnotherFieldLabel","isDeleted","status","primaryAction","_jsxs","Flex","gap","LinkToCMSettingsView","disabled","Button","startIcon","Pencil","variant","onClick","Plus","minWidth","attributes","_Fragment","tours","contentTypeBuilder","Introduction","Box","background","justifyContent","padding","Information","fill","height","width","Typography","title","upperFirst","Content","shadow","hasRadius","overflow","borderColor","List","addComponentToDZ","isMain"],"mappings":";;;;;;;;;;;;;;;;;;;AAmBA,MAAMA,mBAAsBC,GAAAA,uBAAAA,CAAOC,mBAAQC,CAAAA,MAAM,CAAC;;;;AAIlD,CAAC;AAED,MAAMC,QAAW,GAAA,IAAA;IACf,MAAM,EAAEC,mBAAmB,EAAEC,YAAY,EAAEC,UAAU,EAAEC,SAAS,EAAE,GAAGC,6BAAAA,EAAAA;IACrE,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEC,UAAU,EAAE,GAAGC,6BAAAA,EAAAA;AAEvB,IAAA,MAAM,EAAEC,cAAc,EAAEC,YAAY,EAAE,GAAGC,wBAAAA,EAAAA;AAKzC,IAAA,MAAM,EAAEC,4BAA4B,EAAEC,mBAAmB,EAAEC,qBAAqB,EAAE,GAChFC,6CAAAA,EAAAA;IAEF,MAAMC,IAAAA,GAAOP,cACTR,GAAAA,YAAY,CAACQ,cAAAA,CAAe,GAC5BC,YACER,GAAAA,UAAU,CAACQ,YAAAA,CAAa,GACxB,IAAA;AAEN,IAAA,IAAIP,SAAW,EAAA;QACb,OAAO,IAAA;AACT;AAEA,IAAA,IAAI,CAACa,IAAM,EAAA;QACT,MAAMC,gBAAAA,GAAmBC,MAAOC,CAAAA,MAAM,CAAClB,YAAAA,CAAAA,CACpCmB,MAAM,CAAC,CAACC,EAAOA,GAAAA,EAAAA,CAAGC,OAAO,KAAK,QAAQ,CAACD,EAAAA,CAAGE,MAAM,CAAA,CAChDC,GAAG,CAAC,CAACH,EAAOA,GAAAA,EAAAA,CAAGI,GAAG,CAAA,CAClBC,IAAI,EAAA;QAEP,IAAIT,gBAAAA,CAAiBU,MAAM,GAAG,CAAG,EAAA;AAC/B,YAAA,qBAAOC,cAACC,CAAAA,uBAAAA,EAAAA;AAASC,gBAAAA,EAAAA,EAAI,CAAC,4CAA4C,EAAEb,gBAAgB,CAAC,EAAE,CAAE;;AAC3F;AAEA,QAAA,qBAAOW,cAACC,CAAAA,uBAAAA,EAAAA;YAASC,EAAG,EAAA;;AACtB;IAEA,IAAIrB,cAAAA,IAAkBO,KAAKe,SAAS,KAAK,iBAAiBf,IAAKM,CAAAA,OAAO,KAAK,KAAO,EAAA;AAChF,QAAA,qBACEM,cAACC,CAAAA,uBAAAA,EAAAA;YAASC,EAAG,EAAA,iEAAA;YAAkEE,OAAO,EAAA;;AAE1F;AAEA,IAAA,MAAMC,YAAe,GAAA,QAAA,IAAYjB,IAAQA,IAAAA,IAAAA,EAAMO,MAAWW,KAAAA,SAAAA;IAE1D,MAAMC,SAAAA,GAAY1B,iBAAiB,aAAgB,GAAA,WAAA;IAEnD,MAAM2B,KAAAA,GAAQpB,IAAMqB,EAAAA,IAAAA,EAAMC,WAAe,IAAA,EAAA;IAEzC,MAAMC,OAAAA,GAAUvC,uBAAuB,CAACiC,YAAAA;AAExC,IAAA,MAAMO,8BAA8B,CAACC,iBAAAA,GAAAA;QACnC7B,4BAA6B,CAAA;AAAE6B,YAAAA,iBAAAA;AAAmBC,YAAAA,SAAAA,EAAW1B,KAAKS;AAAI,SAAA,CAAA;AACxE,KAAA;AAEA,IAAA,MAAMkB,MAAS,GAAA,IAAA;AACb,QAAA,IAAI,UAAU3B,IAAM,EAAA;YAClB,IAAIA,IAAAA,EAAM4B,SAAS,gBAAkB,EAAA;gBACnCrC,UAAW,CAAA,2BAAA,CAAA;AACb;YAEA,IAAIS,IAAAA,EAAM4B,SAAS,YAAc,EAAA;gBAC/BrC,UAAW,CAAA,0BAAA,CAAA;AACb;YAEAO,qBAAsB,CAAA;gBACpB+B,SAAWV,EAAAA,SAAAA;gBACXA,SAAWA,EAAAA,SAAAA;AACXO,gBAAAA,SAAAA,EAAW1B,KAAKS,GAAG;AACnBmB,gBAAAA,IAAAA,EAAM5B,IAAM4B,EAAAA;AACd,aAAA,CAAA;AAEA,YAAA;AACF;QAEA9B,qBAAsB,CAAA;YACpB+B,SAAWV,EAAAA,SAAAA;YACXA,SAAWA,EAAAA,SAAAA;AACXO,YAAAA,SAAAA,EAAW1B,KAAKS;AAClB,SAAA,CAAA;AACF,KAAA;AAEA,IAAA,MAAMqB,mBAAmBzC,aAAc,CAAA;AACrC0C,QAAAA,EAAAA,EAAIC,eAAQ,CAAA,wBAAA,CAAA;QACZC,cAAgB,EAAA;AAClB,KAAA,CAAA;AAEA,IAAA,MAAMC,uBAAuB7C,aAAc,CAAA;AACzC0C,QAAAA,EAAAA,EAAIC,eAAQ,CAAA,+BAAA,CAAA;QACZC,cAAgB,EAAA;AAClB,KAAA,CAAA;IAEA,MAAME,SAAAA,GAAYnC,IAAKoC,CAAAA,MAAM,KAAK,SAAA;IAElC,MAAMC,aAAAA,GAAgBrD,qCACpBsD,eAACC,CAAAA,iBAAAA,EAAAA;QAAKC,GAAK,EAAA,CAAA;;0BACT5B,cAAC6B,CAAAA,yCAAAA,EAAAA;gBAECzC,IAAMA,EAAAA,IAAAA;gBACN0C,QAAU1C,EAAAA,IAAAA,CAAKoC,MAAM,KAAK,KAASD,IAAAA;AAF/B,aAAA,EAAA,0BAAA,CAAA;0BAINvB,cAAC+B,CAAAA,mBAAAA,EAAAA;AACCC,gBAAAA,SAAAA,gBAAWhC,cAACiC,CAAAA,YAAAA,EAAAA,EAAAA,CAAAA;gBACZC,OAAQ,EAAA,UAAA;gBACRC,OAASpB,EAAAA,MAAAA;AACTe,gBAAAA,QAAAA,EAAU,CAACnB,OAAWY,IAAAA,SAAAA;0BAErB9C,aAAc,CAAA;oBACb0C,EAAI,EAAA,gBAAA;oBACJE,cAAgB,EAAA;AAClB,iBAAA;;0BAGFrB,cAAC+B,CAAAA,mBAAAA,EAAAA;AACCC,gBAAAA,SAAAA,gBAAWhC,cAACoC,CAAAA,UAAAA,EAAAA,EAAAA,CAAAA;gBACZF,OAAQ,EAAA,WAAA;gBACRG,QAAS,EAAA,aAAA;gBACTF,OAAS,EAAA,IAAA;oBACPlD,mBAAoB,CAAA;AAAEsB,wBAAAA,SAAAA;AAAWO,wBAAAA,SAAAA,EAAW1B,KAAKS;AAAI,qBAAA,CAAA;AACvD,iBAAA;gBACAiC,QAAUP,EAAAA,SAAAA;AAETnC,gBAAAA,QAAAA,EAAAA,IAAAA,CAAKkD,UAAU,CAACvC,MAAM,KAAK,IAAImB,gBAAmBI,GAAAA;;;;IAKzD,qBACEI,eAAA,CAAAa,mBAAA,EAAA;;0BACEvC,cAACwC,CAAAA,iBAAAA,CAAMC,kBAAkB,CAACC,YAAY,EAAA;AAEpC,gBAAA,QAAA,gBAAA1C,cAAC2C,CAAAA,gBAAAA,EAAAA,EAAAA;;AAEFpB,YAAAA,SAAAA,kBACCvB,cAAC2B,CAAAA,iBAAAA,EAAAA;gBAAKiB,UAAW,EAAA,WAAA;gBAAYC,cAAgB,EAAA,QAAA;gBAAUC,OAAS,EAAA,CAAA;AAC9D,gBAAA,QAAA,gBAAApB,eAACC,CAAAA,iBAAAA,EAAAA;oBAAKC,GAAK,EAAA,CAAA;;sCACT5B,cAAC+C,CAAAA,iBAAAA,EAAAA;4BAAYC,IAAK,EAAA,WAAA;4BAAYC,MAAO,EAAA,MAAA;4BAAOC,KAAM,EAAA;;sCAClDlD,cAACmD,CAAAA,uBAAAA,EAAAA;sCACE1E,aACC,CAAA;AACE0C,gCAAAA,EAAAA,EAAIC,eAAQ,CAAA,uBAAA,CAAA;gCACZC,cAAgB,EAAA,CAAC,4BAA4B;6BAE/C,EAAA;AACEL,gCAAAA,IAAAA,EAAM5B,IAAKe,CAAAA,SAAS,KAAK,aAAA,GAAgB,cAAiB,GAAA;AAC5D,6BAAA;;;;;0BAMVH,cAACjC,CAAAA,mBAAAA,EAAAA;gBAAoBoD,EAAG,EAAA,OAAA;gBAAQM,aAAeA,EAAAA,aAAAA;AAAe2B,gBAAAA,KAAAA,EAAOC,UAAW7C,CAAAA,KAAAA;;AAChF,0BAAAR,cAAA,CAAC/B,oBAAQqF,OAAO,EAAA;AACd,gBAAA,QAAA,gBAAAtD,cAAC2C,CAAAA,gBAAAA,EAAAA;oBACCC,UAAW,EAAA,UAAA;oBACXW,MAAO,EAAA,cAAA;oBACPC,SAAS,EAAA,IAAA;oBACTC,QAAS,EAAA,MAAA;oBACTC,WAAY,EAAA,YAAA;AAEZ,oBAAA,QAAA,gBAAA1D,cAAC2D,CAAAA,SAAAA,EAAAA;wBAAKvE,IAAMA,EAAAA,IAAAA;wBAAMwE,gBAAkBhD,EAAAA,2BAAAA;wBAA6BiD,MAAM,EAAA;;;;;;AAKjF;;;;"}
@@ -1,11 +1,14 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
- import { Layouts, useTracking, tours } from '@strapi/admin/strapi-admin';
2
+ import { Layouts, tours } from '@strapi/admin/strapi-admin';
3
3
  import { Flex, Button, Box, Typography } from '@strapi/design-system';
4
4
  import { Pencil, Plus, Information } from '@strapi/icons';
5
5
  import upperFirst from 'lodash/upperFirst';
6
6
  import { useIntl } from 'react-intl';
7
7
  import { useParams, Navigate } from 'react-router-dom';
8
8
  import { styled } from 'styled-components';
9
+ import 'react';
10
+ import '../../components/CTBSession/sessionContext.mjs';
11
+ import { useCTBTracking } from '../../components/CTBSession/useCTBTracking.mjs';
9
12
  import { useDataManager } from '../../components/DataManager/useDataManager.mjs';
10
13
  import { useFormModalNavigation } from '../../components/FormModalNavigation/useFormModalNavigation.mjs';
11
14
  import { List } from '../../components/List.mjs';
@@ -20,7 +23,7 @@ const LayoutsHeaderCustom = styled(Layouts.Header)`
20
23
  const ListView = ()=>{
21
24
  const { isInDevelopmentMode, contentTypes, components, isLoading } = useDataManager();
22
25
  const { formatMessage } = useIntl();
23
- const { trackUsage } = useTracking();
26
+ const { trackUsage } = useCTBTracking();
24
27
  const { contentTypeUid, componentUid } = useParams();
25
28
  const { onOpenModalAddComponentsToDZ, onOpenModalAddField, onOpenModalEditSchema } = useFormModalNavigation();
26
29
  const type = contentTypeUid ? contentTypes[contentTypeUid] : componentUid ? components[componentUid] : null;
@@ -38,6 +41,12 @@ const ListView = ()=>{
38
41
  to: "/plugins/content-type-builder/content-types/create-content-type"
39
42
  });
40
43
  }
44
+ if (contentTypeUid && type.modelType === 'contentType' && type.visible === false) {
45
+ return /*#__PURE__*/ jsx(Navigate, {
46
+ to: "/plugins/content-type-builder/content-types/create-content-type",
47
+ replace: true
48
+ });
49
+ }
41
50
  const isFromPlugin = 'plugin' in type && type?.plugin !== undefined;
42
51
  const forTarget = contentTypeUid ? 'contentType' : 'component';
43
52
  const label = type?.info?.displayName ?? '';
@@ -1 +1 @@
1
- {"version":3,"file":"ListView.mjs","sources":["../../../../admin/src/pages/ListView/ListView.tsx"],"sourcesContent":["/* eslint-disable import/no-default-export */\nimport { useTracking, Layouts, tours } from '@strapi/admin/strapi-admin';\nimport { Box, Button, Flex, Typography } from '@strapi/design-system';\nimport { Information, Pencil, Plus } from '@strapi/icons';\nimport upperFirst from 'lodash/upperFirst';\nimport { useIntl } from 'react-intl';\nimport { Navigate, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useDataManager } from '../../components/DataManager/useDataManager';\nimport { useFormModalNavigation } from '../../components/FormModalNavigation/useFormModalNavigation';\nimport { List } from '../../components/List';\nimport { getTrad } from '../../utils/getTrad';\n\nimport { LinkToCMSettingsView } from './LinkToCMSettingsView';\n\nimport type { Internal } from '@strapi/types';\n\nconst LayoutsHeaderCustom = styled(Layouts.Header)`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst ListView = () => {\n const { isInDevelopmentMode, contentTypes, components, isLoading } = useDataManager();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const { contentTypeUid, componentUid } = useParams<{\n contentTypeUid: Internal.UID.ContentType;\n componentUid: Internal.UID.Component;\n }>();\n\n const { onOpenModalAddComponentsToDZ, onOpenModalAddField, onOpenModalEditSchema } =\n useFormModalNavigation();\n\n const type = contentTypeUid\n ? contentTypes[contentTypeUid]\n : componentUid\n ? components[componentUid]\n : null;\n\n if (isLoading) {\n return null;\n }\n\n if (!type) {\n const allowedEndpoints = Object.values(contentTypes)\n .filter((ct) => ct.visible === true && !ct.plugin)\n .map((ct) => ct.uid)\n .sort();\n\n if (allowedEndpoints.length > 0) {\n return <Navigate to={`/plugins/content-type-builder/content-types/${allowedEndpoints[0]}`} />;\n }\n\n return <Navigate to=\"/plugins/content-type-builder/content-types/create-content-type\" />;\n }\n\n const isFromPlugin = 'plugin' in type && type?.plugin !== undefined;\n\n const forTarget = contentTypeUid ? 'contentType' : 'component';\n\n const label = type?.info?.displayName ?? '';\n\n const canEdit = isInDevelopmentMode && !isFromPlugin;\n\n const handleClickAddComponentToDZ = (dynamicZoneTarget?: string) => {\n onOpenModalAddComponentsToDZ({ dynamicZoneTarget, targetUid: type.uid });\n };\n\n const onEdit = () => {\n if ('kind' in type) {\n if (type?.kind === 'collectionType') {\n trackUsage('willEditNameOfContentType');\n }\n\n if (type?.kind === 'singleType') {\n trackUsage('willEditNameOfSingleType');\n }\n\n onOpenModalEditSchema({\n modalType: forTarget,\n forTarget: forTarget,\n targetUid: type.uid,\n kind: type?.kind,\n });\n\n return;\n }\n\n onOpenModalEditSchema({\n modalType: forTarget,\n forTarget: forTarget,\n targetUid: type.uid,\n });\n };\n\n const addNewFieldLabel = formatMessage({\n id: getTrad('table.button.no-fields'),\n defaultMessage: 'Add new field',\n });\n\n const addAnotherFieldLabel = formatMessage({\n id: getTrad('button.attributes.add.another'),\n defaultMessage: 'Add another field',\n });\n\n const isDeleted = type.status === 'REMOVED';\n\n const primaryAction = isInDevelopmentMode && (\n <Flex gap={2}>\n <LinkToCMSettingsView\n key=\"link-to-cm-settings-view\"\n type={type}\n disabled={type.status === 'NEW' || isDeleted}\n />\n <Button\n startIcon={<Pencil />}\n variant=\"tertiary\"\n onClick={onEdit}\n disabled={!canEdit || isDeleted}\n >\n {formatMessage({\n id: 'app.utils.edit',\n defaultMessage: 'Edit',\n })}\n </Button>\n\n <Button\n startIcon={<Plus />}\n variant=\"secondary\"\n minWidth=\"max-content\"\n onClick={() => {\n onOpenModalAddField({ forTarget, targetUid: type.uid });\n }}\n disabled={isDeleted}\n >\n {type.attributes.length === 0 ? addNewFieldLabel : addAnotherFieldLabel}\n </Button>\n </Flex>\n );\n\n return (\n <>\n <tours.contentTypeBuilder.Introduction>\n {/* Invisible Anchor */}\n <Box />\n </tours.contentTypeBuilder.Introduction>\n {isDeleted && (\n <Flex background=\"danger100\" justifyContent={'center'} padding={4}>\n <Flex gap={2}>\n <Information fill=\"danger600\" height=\"2rem\" width=\"2rem\" />\n <Typography>\n {formatMessage(\n {\n id: getTrad('table.warning.deleted'),\n defaultMessage: `This {kind} has been deleted`,\n },\n {\n kind: type.modelType === 'contentType' ? 'Content Type' : 'Component',\n }\n )}\n </Typography>\n </Flex>\n </Flex>\n )}\n <LayoutsHeaderCustom id=\"title\" primaryAction={primaryAction} title={upperFirst(label)} />\n <Layouts.Content>\n <Box\n background=\"neutral0\"\n shadow=\"filterShadow\"\n hasRadius\n overflow=\"auto\"\n borderColor=\"neutral150\"\n >\n <List type={type} addComponentToDZ={handleClickAddComponentToDZ} isMain />\n </Box>\n </Layouts.Content>\n </>\n );\n};\n\nexport default ListView;\n"],"names":["LayoutsHeaderCustom","styled","Layouts","Header","ListView","isInDevelopmentMode","contentTypes","components","isLoading","useDataManager","formatMessage","useIntl","trackUsage","useTracking","contentTypeUid","componentUid","useParams","onOpenModalAddComponentsToDZ","onOpenModalAddField","onOpenModalEditSchema","useFormModalNavigation","type","allowedEndpoints","Object","values","filter","ct","visible","plugin","map","uid","sort","length","_jsx","Navigate","to","isFromPlugin","undefined","forTarget","label","info","displayName","canEdit","handleClickAddComponentToDZ","dynamicZoneTarget","targetUid","onEdit","kind","modalType","addNewFieldLabel","id","getTrad","defaultMessage","addAnotherFieldLabel","isDeleted","status","primaryAction","_jsxs","Flex","gap","LinkToCMSettingsView","disabled","Button","startIcon","Pencil","variant","onClick","Plus","minWidth","attributes","_Fragment","tours","contentTypeBuilder","Introduction","Box","background","justifyContent","padding","Information","fill","height","width","Typography","modelType","title","upperFirst","Content","shadow","hasRadius","overflow","borderColor","List","addComponentToDZ","isMain"],"mappings":"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"}
1
+ {"version":3,"file":"ListView.mjs","sources":["../../../../admin/src/pages/ListView/ListView.tsx"],"sourcesContent":["/* eslint-disable import/no-default-export */\nimport { Layouts, tours } from '@strapi/admin/strapi-admin';\nimport { Box, Button, Flex, Typography } from '@strapi/design-system';\nimport { Information, Pencil, Plus } from '@strapi/icons';\nimport upperFirst from 'lodash/upperFirst';\nimport { useIntl } from 'react-intl';\nimport { Navigate, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { useCTBTracking } from '../../components/CTBSession/ctbSession';\nimport { useDataManager } from '../../components/DataManager/useDataManager';\nimport { useFormModalNavigation } from '../../components/FormModalNavigation/useFormModalNavigation';\nimport { List } from '../../components/List';\nimport { getTrad } from '../../utils/getTrad';\n\nimport { LinkToCMSettingsView } from './LinkToCMSettingsView';\n\nimport type { Internal } from '@strapi/types';\n\nconst LayoutsHeaderCustom = styled(Layouts.Header)`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst ListView = () => {\n const { isInDevelopmentMode, contentTypes, components, isLoading } = useDataManager();\n const { formatMessage } = useIntl();\n const { trackUsage } = useCTBTracking();\n\n const { contentTypeUid, componentUid } = useParams<{\n contentTypeUid: Internal.UID.ContentType;\n componentUid: Internal.UID.Component;\n }>();\n\n const { onOpenModalAddComponentsToDZ, onOpenModalAddField, onOpenModalEditSchema } =\n useFormModalNavigation();\n\n const type = contentTypeUid\n ? contentTypes[contentTypeUid]\n : componentUid\n ? components[componentUid]\n : null;\n\n if (isLoading) {\n return null;\n }\n\n if (!type) {\n const allowedEndpoints = Object.values(contentTypes)\n .filter((ct) => ct.visible === true && !ct.plugin)\n .map((ct) => ct.uid)\n .sort();\n\n if (allowedEndpoints.length > 0) {\n return <Navigate to={`/plugins/content-type-builder/content-types/${allowedEndpoints[0]}`} />;\n }\n\n return <Navigate to=\"/plugins/content-type-builder/content-types/create-content-type\" />;\n }\n\n if (contentTypeUid && type.modelType === 'contentType' && type.visible === false) {\n return (\n <Navigate to=\"/plugins/content-type-builder/content-types/create-content-type\" replace />\n );\n }\n\n const isFromPlugin = 'plugin' in type && type?.plugin !== undefined;\n\n const forTarget = contentTypeUid ? 'contentType' : 'component';\n\n const label = type?.info?.displayName ?? '';\n\n const canEdit = isInDevelopmentMode && !isFromPlugin;\n\n const handleClickAddComponentToDZ = (dynamicZoneTarget?: string) => {\n onOpenModalAddComponentsToDZ({ dynamicZoneTarget, targetUid: type.uid });\n };\n\n const onEdit = () => {\n if ('kind' in type) {\n if (type?.kind === 'collectionType') {\n trackUsage('willEditNameOfContentType');\n }\n\n if (type?.kind === 'singleType') {\n trackUsage('willEditNameOfSingleType');\n }\n\n onOpenModalEditSchema({\n modalType: forTarget,\n forTarget: forTarget,\n targetUid: type.uid,\n kind: type?.kind,\n });\n\n return;\n }\n\n onOpenModalEditSchema({\n modalType: forTarget,\n forTarget: forTarget,\n targetUid: type.uid,\n });\n };\n\n const addNewFieldLabel = formatMessage({\n id: getTrad('table.button.no-fields'),\n defaultMessage: 'Add new field',\n });\n\n const addAnotherFieldLabel = formatMessage({\n id: getTrad('button.attributes.add.another'),\n defaultMessage: 'Add another field',\n });\n\n const isDeleted = type.status === 'REMOVED';\n\n const primaryAction = isInDevelopmentMode && (\n <Flex gap={2}>\n <LinkToCMSettingsView\n key=\"link-to-cm-settings-view\"\n type={type}\n disabled={type.status === 'NEW' || isDeleted}\n />\n <Button\n startIcon={<Pencil />}\n variant=\"tertiary\"\n onClick={onEdit}\n disabled={!canEdit || isDeleted}\n >\n {formatMessage({\n id: 'app.utils.edit',\n defaultMessage: 'Edit',\n })}\n </Button>\n\n <Button\n startIcon={<Plus />}\n variant=\"secondary\"\n minWidth=\"max-content\"\n onClick={() => {\n onOpenModalAddField({ forTarget, targetUid: type.uid });\n }}\n disabled={isDeleted}\n >\n {type.attributes.length === 0 ? addNewFieldLabel : addAnotherFieldLabel}\n </Button>\n </Flex>\n );\n\n return (\n <>\n <tours.contentTypeBuilder.Introduction>\n {/* Invisible Anchor */}\n <Box />\n </tours.contentTypeBuilder.Introduction>\n {isDeleted && (\n <Flex background=\"danger100\" justifyContent={'center'} padding={4}>\n <Flex gap={2}>\n <Information fill=\"danger600\" height=\"2rem\" width=\"2rem\" />\n <Typography>\n {formatMessage(\n {\n id: getTrad('table.warning.deleted'),\n defaultMessage: `This {kind} has been deleted`,\n },\n {\n kind: type.modelType === 'contentType' ? 'Content Type' : 'Component',\n }\n )}\n </Typography>\n </Flex>\n </Flex>\n )}\n <LayoutsHeaderCustom id=\"title\" primaryAction={primaryAction} title={upperFirst(label)} />\n <Layouts.Content>\n <Box\n background=\"neutral0\"\n shadow=\"filterShadow\"\n hasRadius\n overflow=\"auto\"\n borderColor=\"neutral150\"\n >\n <List type={type} addComponentToDZ={handleClickAddComponentToDZ} isMain />\n </Box>\n </Layouts.Content>\n </>\n );\n};\n\nexport default ListView;\n"],"names":["LayoutsHeaderCustom","styled","Layouts","Header","ListView","isInDevelopmentMode","contentTypes","components","isLoading","useDataManager","formatMessage","useIntl","trackUsage","useCTBTracking","contentTypeUid","componentUid","useParams","onOpenModalAddComponentsToDZ","onOpenModalAddField","onOpenModalEditSchema","useFormModalNavigation","type","allowedEndpoints","Object","values","filter","ct","visible","plugin","map","uid","sort","length","_jsx","Navigate","to","modelType","replace","isFromPlugin","undefined","forTarget","label","info","displayName","canEdit","handleClickAddComponentToDZ","dynamicZoneTarget","targetUid","onEdit","kind","modalType","addNewFieldLabel","id","getTrad","defaultMessage","addAnotherFieldLabel","isDeleted","status","primaryAction","_jsxs","Flex","gap","LinkToCMSettingsView","disabled","Button","startIcon","Pencil","variant","onClick","Plus","minWidth","attributes","_Fragment","tours","contentTypeBuilder","Introduction","Box","background","justifyContent","padding","Information","fill","height","width","Typography","title","upperFirst","Content","shadow","hasRadius","overflow","borderColor","List","addComponentToDZ","isMain"],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { type ReactNode } from 'react';
2
+ interface CTBSessionProviderProps {
3
+ children: ReactNode;
4
+ }
5
+ /**
6
+ * Generates a unique session identifier for CTB tracking
7
+ * Uses crypto.randomUUID() for guaranteed uniqueness and readability
8
+ *
9
+ * @returns Session ID in format: ctb-{uuid}
10
+ */
11
+ export declare const generateSessionId: () => string | undefined;
12
+ /**
13
+ * Provider for CTB session tracking context.
14
+ *
15
+ * This provider should wrap components that need to track CTB events with session IDs.
16
+ * It manages the session ID lifecycle and provides methods to regenerate it when needed.
17
+ *
18
+ * Usage:
19
+ * ```tsx
20
+ * <CTBSessionProvider>
21
+ * {children}
22
+ * </CTBSessionProvider>
23
+ * ```
24
+ */
25
+ export declare const CTBSessionProvider: ({ children }: CTBSessionProviderProps) => import("react/jsx-runtime").JSX.Element;
26
+ export {};
@@ -0,0 +1,5 @@
1
+ export { CTBSessionProvider, generateSessionId } from './CTBSessionProvider';
2
+ export { CTBSessionContext } from './sessionContext';
3
+ export { useCTBSession } from './useCTBSession';
4
+ export { useCTBTracking } from './useCTBTracking';
5
+ export type { CTBSessionContextValue } from './sessionContext';
@@ -0,0 +1,25 @@
1
+ /// <reference types="react" />
2
+ /**
3
+ * Context for managing CTB (Content Type Builder) session tracking.
4
+ *
5
+ * Session Lifecycle:
6
+ * - Created: When CTBSessionProvider mounts
7
+ * - Regenerated: After server restart, when navigating back to CTB from another page
8
+ * - Used: Automatically attached to all CTB tracking events
9
+ *
10
+ * The session ID groups related tracking events together to understand user workflows
11
+ * within a single CTB session.
12
+ */
13
+ export interface CTBSessionContextValue {
14
+ /**
15
+ * Unique identifier for the current CTB session
16
+ * Format: ctb-{uuid}
17
+ */
18
+ sessionId: string | undefined;
19
+ /**
20
+ * Generates and sets a new session ID
21
+ * Called when starting a new CTB session (e.g., after navigation or server restart)
22
+ */
23
+ regenerateSessionId: () => void;
24
+ }
25
+ export declare const CTBSessionContext: import("react").Context<CTBSessionContextValue | null>;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Hook to access the current CTB session context.
3
+ *
4
+ * @throws Error if used outside of CTBSessionProvider
5
+ * @returns The CTB session context containing sessionId and regenerateSessionId
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * const { sessionId, regenerateSessionId } = useCTBSession();
10
+ * ```
11
+ */
12
+ export declare const useCTBSession: () => import("./sessionContext").CTBSessionContextValue;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Hook that provides tracking functionality with automatic CTB session ID inclusion.
3
+ * This version accepts arbitrary event names (string) to allow feature-specific
4
+ * events that are not yet declared in the central tracking typings.
5
+ *
6
+ * Note: this intentionally relaxes TypeScript restrictions so callers can
7
+ * emit new tracking event names without needing to update the upstream
8
+ * tracking type definitions. The session ID is merged into the properties
9
+ * object before forwarding to the original tracking implementation.
10
+ */
11
+ export declare const useCTBTracking: () => {
12
+ trackUsage: (event: string, properties?: Record<string, unknown>) => any;
13
+ };
@@ -3,6 +3,7 @@
3
3
  var _ = require('lodash');
4
4
  var index = require('../utils/index.js');
5
5
  var contentType = require('./validation/content-type.js');
6
+ var contentTypes$1 = require('../services/content-types.js');
6
7
 
7
8
  var contentTypes = {
8
9
  async getContentTypes (ctx) {
@@ -28,6 +29,11 @@ var contentTypes = {
28
29
  error: 'contentType.notFound'
29
30
  }, 404);
30
31
  }
32
+ if (!contentTypes$1.isContentTypeVisible(contentType)) {
33
+ return ctx.send({
34
+ error: 'contentType.notFound'
35
+ }, 404);
36
+ }
31
37
  const contentTypeService = index.getService('content-types');
32
38
  ctx.send({
33
39
  data: contentTypeService.formatContentType(contentType)
@@ -1 +1 @@
1
- {"version":3,"file":"content-types.js","sources":["../../../server/src/controllers/content-types.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { Context } from 'koa';\nimport type {} from 'koa-body';\nimport type { Internal } from '@strapi/types';\nimport { getService } from '../utils';\nimport {\n validateContentTypeInput,\n validateUpdateContentTypeInput,\n validateKind,\n} from './validation/content-type';\n\nexport default {\n async getContentTypes(ctx: Context) {\n const { kind } = ctx.query;\n\n try {\n await validateKind(kind);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n const contentTypeService = getService('content-types');\n\n const contentTypes = Object.keys(strapi.contentTypes)\n .filter(\n (uid) =>\n !kind ||\n _.get(strapi.contentTypes[uid as Internal.UID.ContentType], 'kind', 'collectionType') ===\n kind\n )\n .map((uid) =>\n contentTypeService.formatContentType(strapi.contentTypes[uid as Internal.UID.ContentType])\n );\n\n ctx.send({\n data: contentTypes,\n });\n },\n\n getContentType(ctx: Context) {\n const { uid } = ctx.params;\n\n const contentType = strapi.contentTypes[uid];\n\n if (!contentType) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n const contentTypeService = getService('content-types');\n\n ctx.send({ data: contentTypeService.formatContentType(contentType) });\n },\n\n async createContentType(ctx: Context) {\n const body = ctx.request.body as any;\n\n try {\n await validateContentTypeInput(body);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const contentTypeService = getService('content-types');\n\n const contentType = await contentTypeService.createContentType({\n contentType: body.contentType,\n components: body.components,\n });\n\n const metricsPayload = {\n eventProperties: {\n kind: contentType.kind,\n },\n };\n\n if (_.isEmpty(strapi.apis)) {\n await strapi.telemetry.send('didCreateFirstContentType', metricsPayload);\n } else {\n await strapi.telemetry.send('didCreateContentType', metricsPayload);\n }\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: contentType.uid } }, 201);\n } catch (err) {\n strapi.log.error(err);\n await strapi.telemetry.send('didNotCreateContentType', {\n eventProperties: { error: (err as Error).message || err },\n });\n ctx.send({ error: (err as Error).message || 'Unknown error' }, 400);\n }\n },\n\n async updateContentType(ctx: Context) {\n const { uid } = ctx.params;\n const body = ctx.request.body as any;\n\n if (!_.has(strapi.contentTypes, uid)) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n try {\n await validateUpdateContentTypeInput(body);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const contentTypeService = getService('content-types');\n\n const component = await contentTypeService.editContentType(uid, {\n contentType: body.contentType,\n components: body.components,\n });\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: component.uid } }, 201);\n } catch (error) {\n strapi.log.error(error);\n ctx.send({ error: (error as Error)?.message || 'Unknown error' }, 400);\n }\n },\n\n async deleteContentType(ctx: Context) {\n const { uid } = ctx.params;\n\n if (!_.has(strapi.contentTypes, uid)) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const contentTypeService = getService('content-types');\n\n const component = await contentTypeService.deleteContentType(uid);\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: component.uid } });\n } catch (error) {\n strapi.log.error(error);\n ctx.send({ error: (error as Error)?.message || 'Unknown error' }, 400);\n }\n },\n};\n"],"names":["getContentTypes","ctx","kind","query","validateKind","error","send","contentTypeService","getService","contentTypes","Object","keys","strapi","filter","uid","_","get","map","formatContentType","data","getContentType","params","contentType","createContentType","body","request","validateContentTypeInput","reload","isWatching","components","metricsPayload","eventProperties","isEmpty","apis","telemetry","setImmediate","err","log","message","updateContentType","has","validateUpdateContentTypeInput","component","editContentType","deleteContentType"],"mappings":"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"}
1
+ {"version":3,"file":"content-types.js","sources":["../../../server/src/controllers/content-types.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { Context } from 'koa';\nimport type {} from 'koa-body';\nimport type { Internal } from '@strapi/types';\nimport { getService } from '../utils';\nimport {\n validateContentTypeInput,\n validateUpdateContentTypeInput,\n validateKind,\n} from './validation/content-type';\nimport { isContentTypeVisible } from '../services/content-types';\n\nexport default {\n async getContentTypes(ctx: Context) {\n const { kind } = ctx.query;\n\n try {\n await validateKind(kind);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n const contentTypeService = getService('content-types');\n\n const contentTypes = Object.keys(strapi.contentTypes)\n .filter(\n (uid) =>\n !kind ||\n _.get(strapi.contentTypes[uid as Internal.UID.ContentType], 'kind', 'collectionType') ===\n kind\n )\n .map((uid) =>\n contentTypeService.formatContentType(strapi.contentTypes[uid as Internal.UID.ContentType])\n );\n\n ctx.send({\n data: contentTypes,\n });\n },\n\n getContentType(ctx: Context) {\n const { uid } = ctx.params;\n\n const contentType = strapi.contentTypes[uid];\n\n if (!contentType) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n if (!isContentTypeVisible(contentType)) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n const contentTypeService = getService('content-types');\n\n ctx.send({ data: contentTypeService.formatContentType(contentType) });\n },\n\n async createContentType(ctx: Context) {\n const body = ctx.request.body as any;\n\n try {\n await validateContentTypeInput(body);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const contentTypeService = getService('content-types');\n\n const contentType = await contentTypeService.createContentType({\n contentType: body.contentType,\n components: body.components,\n });\n\n const metricsPayload = {\n eventProperties: {\n kind: contentType.kind,\n },\n };\n\n if (_.isEmpty(strapi.apis)) {\n await strapi.telemetry.send('didCreateFirstContentType', metricsPayload);\n } else {\n await strapi.telemetry.send('didCreateContentType', metricsPayload);\n }\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: contentType.uid } }, 201);\n } catch (err) {\n strapi.log.error(err);\n await strapi.telemetry.send('didNotCreateContentType', {\n eventProperties: { error: (err as Error).message || err },\n });\n ctx.send({ error: (err as Error).message || 'Unknown error' }, 400);\n }\n },\n\n async updateContentType(ctx: Context) {\n const { uid } = ctx.params;\n const body = ctx.request.body as any;\n\n if (!_.has(strapi.contentTypes, uid)) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n try {\n await validateUpdateContentTypeInput(body);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const contentTypeService = getService('content-types');\n\n const component = await contentTypeService.editContentType(uid, {\n contentType: body.contentType,\n components: body.components,\n });\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: component.uid } }, 201);\n } catch (error) {\n strapi.log.error(error);\n ctx.send({ error: (error as Error)?.message || 'Unknown error' }, 400);\n }\n },\n\n async deleteContentType(ctx: Context) {\n const { uid } = ctx.params;\n\n if (!_.has(strapi.contentTypes, uid)) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const contentTypeService = getService('content-types');\n\n const component = await contentTypeService.deleteContentType(uid);\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: component.uid } });\n } catch (error) {\n strapi.log.error(error);\n ctx.send({ error: (error as Error)?.message || 'Unknown error' }, 400);\n }\n },\n};\n"],"names":["getContentTypes","ctx","kind","query","validateKind","error","send","contentTypeService","getService","contentTypes","Object","keys","strapi","filter","uid","_","get","map","formatContentType","data","getContentType","params","contentType","isContentTypeVisible","createContentType","body","request","validateContentTypeInput","reload","isWatching","components","metricsPayload","eventProperties","isEmpty","apis","telemetry","setImmediate","err","log","message","updateContentType","has","validateUpdateContentTypeInput","component","editContentType","deleteContentType"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import _ from 'lodash';
2
2
  import { getService } from '../utils/index.mjs';
3
3
  import { validateKind, validateContentTypeInput, validateUpdateContentTypeInput } from './validation/content-type.mjs';
4
+ import { isContentTypeVisible } from '../services/content-types.mjs';
4
5
 
5
6
  var contentTypes = {
6
7
  async getContentTypes (ctx) {
@@ -26,6 +27,11 @@ var contentTypes = {
26
27
  error: 'contentType.notFound'
27
28
  }, 404);
28
29
  }
30
+ if (!isContentTypeVisible(contentType)) {
31
+ return ctx.send({
32
+ error: 'contentType.notFound'
33
+ }, 404);
34
+ }
29
35
  const contentTypeService = getService('content-types');
30
36
  ctx.send({
31
37
  data: contentTypeService.formatContentType(contentType)
@@ -1 +1 @@
1
- {"version":3,"file":"content-types.mjs","sources":["../../../server/src/controllers/content-types.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { Context } from 'koa';\nimport type {} from 'koa-body';\nimport type { Internal } from '@strapi/types';\nimport { getService } from '../utils';\nimport {\n validateContentTypeInput,\n validateUpdateContentTypeInput,\n validateKind,\n} from './validation/content-type';\n\nexport default {\n async getContentTypes(ctx: Context) {\n const { kind } = ctx.query;\n\n try {\n await validateKind(kind);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n const contentTypeService = getService('content-types');\n\n const contentTypes = Object.keys(strapi.contentTypes)\n .filter(\n (uid) =>\n !kind ||\n _.get(strapi.contentTypes[uid as Internal.UID.ContentType], 'kind', 'collectionType') ===\n kind\n )\n .map((uid) =>\n contentTypeService.formatContentType(strapi.contentTypes[uid as Internal.UID.ContentType])\n );\n\n ctx.send({\n data: contentTypes,\n });\n },\n\n getContentType(ctx: Context) {\n const { uid } = ctx.params;\n\n const contentType = strapi.contentTypes[uid];\n\n if (!contentType) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n const contentTypeService = getService('content-types');\n\n ctx.send({ data: contentTypeService.formatContentType(contentType) });\n },\n\n async createContentType(ctx: Context) {\n const body = ctx.request.body as any;\n\n try {\n await validateContentTypeInput(body);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const contentTypeService = getService('content-types');\n\n const contentType = await contentTypeService.createContentType({\n contentType: body.contentType,\n components: body.components,\n });\n\n const metricsPayload = {\n eventProperties: {\n kind: contentType.kind,\n },\n };\n\n if (_.isEmpty(strapi.apis)) {\n await strapi.telemetry.send('didCreateFirstContentType', metricsPayload);\n } else {\n await strapi.telemetry.send('didCreateContentType', metricsPayload);\n }\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: contentType.uid } }, 201);\n } catch (err) {\n strapi.log.error(err);\n await strapi.telemetry.send('didNotCreateContentType', {\n eventProperties: { error: (err as Error).message || err },\n });\n ctx.send({ error: (err as Error).message || 'Unknown error' }, 400);\n }\n },\n\n async updateContentType(ctx: Context) {\n const { uid } = ctx.params;\n const body = ctx.request.body as any;\n\n if (!_.has(strapi.contentTypes, uid)) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n try {\n await validateUpdateContentTypeInput(body);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const contentTypeService = getService('content-types');\n\n const component = await contentTypeService.editContentType(uid, {\n contentType: body.contentType,\n components: body.components,\n });\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: component.uid } }, 201);\n } catch (error) {\n strapi.log.error(error);\n ctx.send({ error: (error as Error)?.message || 'Unknown error' }, 400);\n }\n },\n\n async deleteContentType(ctx: Context) {\n const { uid } = ctx.params;\n\n if (!_.has(strapi.contentTypes, uid)) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const contentTypeService = getService('content-types');\n\n const component = await contentTypeService.deleteContentType(uid);\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: component.uid } });\n } catch (error) {\n strapi.log.error(error);\n ctx.send({ error: (error as Error)?.message || 'Unknown error' }, 400);\n }\n },\n};\n"],"names":["getContentTypes","ctx","kind","query","validateKind","error","send","contentTypeService","getService","contentTypes","Object","keys","strapi","filter","uid","_","get","map","formatContentType","data","getContentType","params","contentType","createContentType","body","request","validateContentTypeInput","reload","isWatching","components","metricsPayload","eventProperties","isEmpty","apis","telemetry","setImmediate","err","log","message","updateContentType","has","validateUpdateContentTypeInput","component","editContentType","deleteContentType"],"mappings":"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"}
1
+ {"version":3,"file":"content-types.mjs","sources":["../../../server/src/controllers/content-types.ts"],"sourcesContent":["import _ from 'lodash';\nimport type { Context } from 'koa';\nimport type {} from 'koa-body';\nimport type { Internal } from '@strapi/types';\nimport { getService } from '../utils';\nimport {\n validateContentTypeInput,\n validateUpdateContentTypeInput,\n validateKind,\n} from './validation/content-type';\nimport { isContentTypeVisible } from '../services/content-types';\n\nexport default {\n async getContentTypes(ctx: Context) {\n const { kind } = ctx.query;\n\n try {\n await validateKind(kind);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n const contentTypeService = getService('content-types');\n\n const contentTypes = Object.keys(strapi.contentTypes)\n .filter(\n (uid) =>\n !kind ||\n _.get(strapi.contentTypes[uid as Internal.UID.ContentType], 'kind', 'collectionType') ===\n kind\n )\n .map((uid) =>\n contentTypeService.formatContentType(strapi.contentTypes[uid as Internal.UID.ContentType])\n );\n\n ctx.send({\n data: contentTypes,\n });\n },\n\n getContentType(ctx: Context) {\n const { uid } = ctx.params;\n\n const contentType = strapi.contentTypes[uid];\n\n if (!contentType) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n if (!isContentTypeVisible(contentType)) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n const contentTypeService = getService('content-types');\n\n ctx.send({ data: contentTypeService.formatContentType(contentType) });\n },\n\n async createContentType(ctx: Context) {\n const body = ctx.request.body as any;\n\n try {\n await validateContentTypeInput(body);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const contentTypeService = getService('content-types');\n\n const contentType = await contentTypeService.createContentType({\n contentType: body.contentType,\n components: body.components,\n });\n\n const metricsPayload = {\n eventProperties: {\n kind: contentType.kind,\n },\n };\n\n if (_.isEmpty(strapi.apis)) {\n await strapi.telemetry.send('didCreateFirstContentType', metricsPayload);\n } else {\n await strapi.telemetry.send('didCreateContentType', metricsPayload);\n }\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: contentType.uid } }, 201);\n } catch (err) {\n strapi.log.error(err);\n await strapi.telemetry.send('didNotCreateContentType', {\n eventProperties: { error: (err as Error).message || err },\n });\n ctx.send({ error: (err as Error).message || 'Unknown error' }, 400);\n }\n },\n\n async updateContentType(ctx: Context) {\n const { uid } = ctx.params;\n const body = ctx.request.body as any;\n\n if (!_.has(strapi.contentTypes, uid)) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n try {\n await validateUpdateContentTypeInput(body);\n } catch (error) {\n return ctx.send({ error }, 400);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const contentTypeService = getService('content-types');\n\n const component = await contentTypeService.editContentType(uid, {\n contentType: body.contentType,\n components: body.components,\n });\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: component.uid } }, 201);\n } catch (error) {\n strapi.log.error(error);\n ctx.send({ error: (error as Error)?.message || 'Unknown error' }, 400);\n }\n },\n\n async deleteContentType(ctx: Context) {\n const { uid } = ctx.params;\n\n if (!_.has(strapi.contentTypes, uid)) {\n return ctx.send({ error: 'contentType.notFound' }, 404);\n }\n\n try {\n strapi.reload.isWatching = false;\n\n const contentTypeService = getService('content-types');\n\n const component = await contentTypeService.deleteContentType(uid);\n\n setImmediate(() => strapi.reload());\n\n ctx.send({ data: { uid: component.uid } });\n } catch (error) {\n strapi.log.error(error);\n ctx.send({ error: (error as Error)?.message || 'Unknown error' }, 400);\n }\n },\n};\n"],"names":["getContentTypes","ctx","kind","query","validateKind","error","send","contentTypeService","getService","contentTypes","Object","keys","strapi","filter","uid","_","get","map","formatContentType","data","getContentType","params","contentType","isContentTypeVisible","createContentType","body","request","validateContentTypeInput","reload","isWatching","components","metricsPayload","eventProperties","isEmpty","apis","telemetry","setImmediate","err","log","message","updateContentType","has","validateUpdateContentTypeInput","component","editContentType","deleteContentType"],"mappings":"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"}
@@ -197,7 +197,7 @@ const getTypeShape = (attribute, { attributes } = {})=>{
197
197
  case 'boolean':
198
198
  {
199
199
  return {
200
- default: utils.yup.boolean(),
200
+ default: utils.yup.boolean().nullable(),
201
201
  required: common.validators.required
202
202
  };
203
203
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sources":["../../../../server/src/controllers/validation/types.ts"],"sourcesContent":["import _ from 'lodash';\nimport { yup } from '@strapi/utils';\n\nimport type { TestContext } from 'yup';\nimport type { Schema, Struct } from '@strapi/types';\n\nimport { modelTypes, VALID_UID_TARGETS } from '../../services/constants';\nimport {\n validators,\n areEnumValuesUnique,\n isValidDefaultJSON,\n isValidName,\n isValidEnum,\n isValidRegExpPattern,\n UID_REGEX,\n} from './common';\n\nexport type GetTypeValidatorOptions = {\n types: ReadonlyArray<string>;\n attributes?: Struct.SchemaAttributes;\n modelType?: (typeof modelTypes)[keyof typeof modelTypes];\n};\n\nconst maxLengthIsGreaterThanOrEqualToMinLength = {\n name: 'isGreaterThanMin',\n message: 'maxLength must be greater or equal to minLength',\n test(this: TestContext, value: unknown) {\n const { minLength } = this.parent;\n return !(!_.isUndefined(minLength) && !_.isUndefined(value) && (value as number) < minLength);\n },\n};\n\nexport const getTypeValidator = (\n attribute: Schema.Attribute.AnyAttribute,\n { types, modelType, attributes }: GetTypeValidatorOptions\n) => {\n return yup.object({\n type: yup\n .string()\n .oneOf([...types])\n .required(),\n configurable: yup.boolean().nullable(),\n private: yup.boolean().nullable(),\n pluginOptions: yup.object(),\n ...getTypeShape(attribute, { modelType, attributes }),\n } as any);\n};\n\nconst getTypeShape = (attribute: Schema.Attribute.AnyAttribute, { attributes }: any = {}) => {\n switch (attribute.type) {\n /**\n * complex types\n */\n\n case 'media': {\n return {\n multiple: yup.boolean(),\n required: validators.required,\n allowedTypes: yup\n .array()\n .of(yup.string().oneOf(['images', 'videos', 'files', 'audios']))\n .min(1),\n };\n }\n\n case 'uid': {\n return {\n required: validators.required,\n targetField: yup\n .string()\n .oneOf(\n Object.keys(attributes!).filter((key) =>\n VALID_UID_TARGETS.includes(_.get(attributes![key] as any, 'type'))\n )\n )\n .nullable(),\n default: yup\n .string()\n .test(\n 'isValidDefaultUID',\n 'cannot define a default UID if the targetField is set',\n function (value) {\n const { targetField } = this.parent;\n return !!(_.isNil(targetField) || _.isNil(value));\n }\n )\n .test(\n 'isValidDefaultRegexUID',\n `\\${path} must match the custom regex or the default one \"${UID_REGEX}\"`,\n function (value) {\n const { regex } = this.parent;\n\n if (regex) {\n return !_.isNil(value) && (value === '' || new RegExp(regex).test(value));\n }\n\n return value === '' || UID_REGEX.test(value as string);\n }\n ),\n minLength: validators.minLength,\n maxLength: validators.maxLength.max(256).test(maxLengthIsGreaterThanOrEqualToMinLength),\n options: yup.object().shape({\n separator: yup.string(),\n lowercase: yup.boolean(),\n decamelize: yup.boolean(),\n customReplacements: yup.array().of(yup.array().of(yup.string()).min(2).max(2)),\n preserveLeadingUnderscore: yup.boolean(),\n }),\n regex: yup.string().test(isValidRegExpPattern),\n };\n }\n\n /**\n * scalar types\n */\n case 'string': {\n return {\n default: yup.string(),\n required: validators.required,\n unique: validators.unique,\n minLength: validators.minLength,\n maxLength: validators.maxLength.max(255).test(maxLengthIsGreaterThanOrEqualToMinLength),\n regex: yup.string().test(isValidRegExpPattern),\n };\n }\n case 'text': {\n return {\n default: yup.string(),\n required: validators.required,\n unique: validators.unique,\n minLength: validators.minLength,\n maxLength: validators.maxLength,\n regex: yup.string().test(isValidRegExpPattern),\n };\n }\n case 'richtext': {\n return {\n default: yup.string(),\n required: validators.required,\n minLength: validators.minLength,\n maxLength: validators.maxLength,\n };\n }\n case 'blocks': {\n return {\n required: validators.required,\n };\n }\n case 'json': {\n return {\n default: yup.mixed().test(isValidDefaultJSON),\n required: validators.required,\n };\n }\n case 'enumeration': {\n return {\n enum: yup\n .array()\n .of(yup.string().test(isValidEnum).required())\n .min(1)\n .test(areEnumValuesUnique)\n .required(),\n default: yup.string().when('enum', (enumVal) => yup.string().oneOf(enumVal)),\n enumName: yup.string().test(isValidName),\n required: validators.required,\n };\n }\n case 'password': {\n return {\n required: validators.required,\n minLength: validators.minLength,\n maxLength: validators.maxLength,\n };\n }\n case 'email': {\n return {\n default: yup.string().email(),\n required: validators.required,\n unique: validators.unique,\n minLength: validators.minLength,\n maxLength: validators.maxLength,\n };\n }\n case 'integer': {\n return {\n default: yup.number().integer(),\n required: validators.required,\n unique: validators.unique,\n min: yup.number().integer(),\n max: yup.number().integer(),\n };\n }\n case 'biginteger': {\n return {\n default: yup.string().nullable().matches(/^\\d*$/),\n required: validators.required,\n unique: validators.unique,\n min: yup.string().nullable().matches(/^\\d*$/),\n max: yup.string().nullable().matches(/^\\d*$/),\n };\n }\n case 'float': {\n return {\n default: yup.number(),\n required: validators.required,\n unique: validators.unique,\n min: yup.number(),\n max: yup.number(),\n };\n }\n case 'decimal': {\n return {\n default: yup.number(),\n required: validators.required,\n unique: validators.unique,\n min: yup.number(),\n max: yup.number(),\n };\n }\n case 'time':\n case 'datetime':\n case 'date': {\n return {\n default: yup.string(),\n required: validators.required,\n unique: validators.unique,\n };\n }\n case 'boolean': {\n return {\n default: yup.boolean(),\n required: validators.required,\n };\n }\n\n case 'component': {\n return {\n required: validators.required,\n repeatable: yup.boolean(),\n // TODO: Add correct server validation for nested components\n component: yup.string().required(),\n min: yup.number(),\n max: yup.number(),\n };\n }\n\n case 'dynamiczone': {\n return {\n required: validators.required,\n components: yup\n .array()\n .of(yup.string().required())\n .test('isArray', '${path} must be an array', (value) => Array.isArray(value))\n .min(1),\n min: yup.number(),\n max: yup.number(),\n };\n }\n\n default: {\n return {};\n }\n }\n};\n"],"names":["maxLengthIsGreaterThanOrEqualToMinLength","name","message","test","value","minLength","parent","_","isUndefined","getTypeValidator","attribute","types","modelType","attributes","yup","object","type","string","oneOf","required","configurable","boolean","nullable","private","pluginOptions","getTypeShape","multiple","validators","allowedTypes","array","of","min","targetField","Object","keys","filter","key","VALID_UID_TARGETS","includes","get","default","isNil","UID_REGEX","regex","RegExp","maxLength","max","options","shape","separator","lowercase","decamelize","customReplacements","preserveLeadingUnderscore","isValidRegExpPattern","unique","mixed","isValidDefaultJSON","enum","isValidEnum","areEnumValuesUnique","when","enumVal","enumName","isValidName","email","number","integer","matches","repeatable","component","components","Array","isArray"],"mappings":"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"}
1
+ {"version":3,"file":"types.js","sources":["../../../../server/src/controllers/validation/types.ts"],"sourcesContent":["import _ from 'lodash';\nimport { yup } from '@strapi/utils';\n\nimport type { TestContext } from 'yup';\nimport type { Schema, Struct } from '@strapi/types';\n\nimport { modelTypes, VALID_UID_TARGETS } from '../../services/constants';\nimport {\n validators,\n areEnumValuesUnique,\n isValidDefaultJSON,\n isValidName,\n isValidEnum,\n isValidRegExpPattern,\n UID_REGEX,\n} from './common';\n\nexport type GetTypeValidatorOptions = {\n types: ReadonlyArray<string>;\n attributes?: Struct.SchemaAttributes;\n modelType?: (typeof modelTypes)[keyof typeof modelTypes];\n};\n\nconst maxLengthIsGreaterThanOrEqualToMinLength = {\n name: 'isGreaterThanMin',\n message: 'maxLength must be greater or equal to minLength',\n test(this: TestContext, value: unknown) {\n const { minLength } = this.parent;\n return !(!_.isUndefined(minLength) && !_.isUndefined(value) && (value as number) < minLength);\n },\n};\n\nexport const getTypeValidator = (\n attribute: Schema.Attribute.AnyAttribute,\n { types, modelType, attributes }: GetTypeValidatorOptions\n) => {\n return yup.object({\n type: yup\n .string()\n .oneOf([...types])\n .required(),\n configurable: yup.boolean().nullable(),\n private: yup.boolean().nullable(),\n pluginOptions: yup.object(),\n ...getTypeShape(attribute, { modelType, attributes }),\n } as any);\n};\n\nconst getTypeShape = (attribute: Schema.Attribute.AnyAttribute, { attributes }: any = {}) => {\n switch (attribute.type) {\n /**\n * complex types\n */\n\n case 'media': {\n return {\n multiple: yup.boolean(),\n required: validators.required,\n allowedTypes: yup\n .array()\n .of(yup.string().oneOf(['images', 'videos', 'files', 'audios']))\n .min(1),\n };\n }\n\n case 'uid': {\n return {\n required: validators.required,\n targetField: yup\n .string()\n .oneOf(\n Object.keys(attributes!).filter((key) =>\n VALID_UID_TARGETS.includes(_.get(attributes![key] as any, 'type'))\n )\n )\n .nullable(),\n default: yup\n .string()\n .test(\n 'isValidDefaultUID',\n 'cannot define a default UID if the targetField is set',\n function (value) {\n const { targetField } = this.parent;\n return !!(_.isNil(targetField) || _.isNil(value));\n }\n )\n .test(\n 'isValidDefaultRegexUID',\n `\\${path} must match the custom regex or the default one \"${UID_REGEX}\"`,\n function (value) {\n const { regex } = this.parent;\n\n if (regex) {\n return !_.isNil(value) && (value === '' || new RegExp(regex).test(value));\n }\n\n return value === '' || UID_REGEX.test(value as string);\n }\n ),\n minLength: validators.minLength,\n maxLength: validators.maxLength.max(256).test(maxLengthIsGreaterThanOrEqualToMinLength),\n options: yup.object().shape({\n separator: yup.string(),\n lowercase: yup.boolean(),\n decamelize: yup.boolean(),\n customReplacements: yup.array().of(yup.array().of(yup.string()).min(2).max(2)),\n preserveLeadingUnderscore: yup.boolean(),\n }),\n regex: yup.string().test(isValidRegExpPattern),\n };\n }\n\n /**\n * scalar types\n */\n case 'string': {\n return {\n default: yup.string(),\n required: validators.required,\n unique: validators.unique,\n minLength: validators.minLength,\n maxLength: validators.maxLength.max(255).test(maxLengthIsGreaterThanOrEqualToMinLength),\n regex: yup.string().test(isValidRegExpPattern),\n };\n }\n case 'text': {\n return {\n default: yup.string(),\n required: validators.required,\n unique: validators.unique,\n minLength: validators.minLength,\n maxLength: validators.maxLength,\n regex: yup.string().test(isValidRegExpPattern),\n };\n }\n case 'richtext': {\n return {\n default: yup.string(),\n required: validators.required,\n minLength: validators.minLength,\n maxLength: validators.maxLength,\n };\n }\n case 'blocks': {\n return {\n required: validators.required,\n };\n }\n case 'json': {\n return {\n default: yup.mixed().test(isValidDefaultJSON),\n required: validators.required,\n };\n }\n case 'enumeration': {\n return {\n enum: yup\n .array()\n .of(yup.string().test(isValidEnum).required())\n .min(1)\n .test(areEnumValuesUnique)\n .required(),\n default: yup.string().when('enum', (enumVal) => yup.string().oneOf(enumVal)),\n enumName: yup.string().test(isValidName),\n required: validators.required,\n };\n }\n case 'password': {\n return {\n required: validators.required,\n minLength: validators.minLength,\n maxLength: validators.maxLength,\n };\n }\n case 'email': {\n return {\n default: yup.string().email(),\n required: validators.required,\n unique: validators.unique,\n minLength: validators.minLength,\n maxLength: validators.maxLength,\n };\n }\n case 'integer': {\n return {\n default: yup.number().integer(),\n required: validators.required,\n unique: validators.unique,\n min: yup.number().integer(),\n max: yup.number().integer(),\n };\n }\n case 'biginteger': {\n return {\n default: yup.string().nullable().matches(/^\\d*$/),\n required: validators.required,\n unique: validators.unique,\n min: yup.string().nullable().matches(/^\\d*$/),\n max: yup.string().nullable().matches(/^\\d*$/),\n };\n }\n case 'float': {\n return {\n default: yup.number(),\n required: validators.required,\n unique: validators.unique,\n min: yup.number(),\n max: yup.number(),\n };\n }\n case 'decimal': {\n return {\n default: yup.number(),\n required: validators.required,\n unique: validators.unique,\n min: yup.number(),\n max: yup.number(),\n };\n }\n case 'time':\n case 'datetime':\n case 'date': {\n return {\n default: yup.string(),\n required: validators.required,\n unique: validators.unique,\n };\n }\n case 'boolean': {\n return {\n default: yup.boolean().nullable(),\n required: validators.required,\n };\n }\n\n case 'component': {\n return {\n required: validators.required,\n repeatable: yup.boolean(),\n // TODO: Add correct server validation for nested components\n component: yup.string().required(),\n min: yup.number(),\n max: yup.number(),\n };\n }\n\n case 'dynamiczone': {\n return {\n required: validators.required,\n components: yup\n .array()\n .of(yup.string().required())\n .test('isArray', '${path} must be an array', (value) => Array.isArray(value))\n .min(1),\n min: yup.number(),\n max: yup.number(),\n };\n }\n\n default: {\n return {};\n }\n }\n};\n"],"names":["maxLengthIsGreaterThanOrEqualToMinLength","name","message","test","value","minLength","parent","_","isUndefined","getTypeValidator","attribute","types","modelType","attributes","yup","object","type","string","oneOf","required","configurable","boolean","nullable","private","pluginOptions","getTypeShape","multiple","validators","allowedTypes","array","of","min","targetField","Object","keys","filter","key","VALID_UID_TARGETS","includes","get","default","isNil","UID_REGEX","regex","RegExp","maxLength","max","options","shape","separator","lowercase","decamelize","customReplacements","preserveLeadingUnderscore","isValidRegExpPattern","unique","mixed","isValidDefaultJSON","enum","isValidEnum","areEnumValuesUnique","when","enumVal","enumName","isValidName","email","number","integer","matches","repeatable","component","components","Array","isArray"],"mappings":"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"}
@@ -195,7 +195,7 @@ const getTypeShape = (attribute, { attributes } = {})=>{
195
195
  case 'boolean':
196
196
  {
197
197
  return {
198
- default: yup.boolean(),
198
+ default: yup.boolean().nullable(),
199
199
  required: validators.required
200
200
  };
201
201
  }