@strapi/content-type-builder 5.31.3 → 5.33.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 (75) 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/admin/translations/ru.json.js +74 -30
  63. package/dist/admin/translations/ru.json.js.map +1 -1
  64. package/dist/admin/translations/ru.json.mjs +74 -30
  65. package/dist/admin/translations/ru.json.mjs.map +1 -1
  66. package/dist/server/controllers/content-types.js +6 -0
  67. package/dist/server/controllers/content-types.js.map +1 -1
  68. package/dist/server/controllers/content-types.mjs +6 -0
  69. package/dist/server/controllers/content-types.mjs.map +1 -1
  70. package/dist/server/controllers/validation/types.js +1 -1
  71. package/dist/server/controllers/validation/types.js.map +1 -1
  72. package/dist/server/controllers/validation/types.mjs +1 -1
  73. package/dist/server/controllers/validation/types.mjs.map +1 -1
  74. package/dist/server/src/controllers/content-types.d.ts.map +1 -1
  75. 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":"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"}
@@ -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
+ };
@@ -11,7 +11,6 @@ var ru = {
11
11
  "attribute.component.description": "Компонент - группа полей, доступных для повторения или повторного использования",
12
12
  "attribute.date": "Date",
13
13
  "attribute.date.description": "Элемент управления датой и временем",
14
- "attribute.datetime": "Datetime",
15
14
  "attribute.dynamiczone": "Dynamic zone",
16
15
  "attribute.dynamiczone.description": "Компоненты с динамическим редактированием",
17
16
  "attribute.email": "Email",
@@ -29,8 +28,6 @@ var ru = {
29
28
  "attribute.password.description": "Поле пароля с шифрованием",
30
29
  "attribute.relation": "Relation",
31
30
  "attribute.relation.description": "Ссылка на какой-либо тип контента",
32
- "attribute.richtext": "Rich text",
33
- "attribute.richtext.description": "Элемент управления для редактирования текста с форматированием",
34
31
  "attribute.text": "Text",
35
32
  "attribute.text.description": "Маленький или длинный текст, например заголовок или описание",
36
33
  "attribute.time": "Time",
@@ -43,10 +40,7 @@ var ru = {
43
40
  "button.model.create": "Создать новый тип контента",
44
41
  "button.single-types.create": "Создать новый единичный тип",
45
42
  "component.repeatable": "(повторяется)",
46
- "components.componentSelect.no-component-available": "Вы уже добавили все имеющиеся группы полей",
47
43
  "components.componentSelect.no-component-available.with-search": "Подходящих групп полей не найдено",
48
- "components.componentSelect.value-component": "Выбрано компонентов - {number} (наберите для поиска)",
49
- "components.componentSelect.value-components": "Компонентов выбрано - {number}",
50
44
  configurations: configurations,
51
45
  "contentType.collectionName.description": "Полезно, когда имя вашего типа контента и имя вашей таблицы различаются",
52
46
  "contentType.collectionName.label": "Название коллекции",
@@ -163,31 +157,81 @@ var ru = {
163
157
  "relation.oneToMany": "принадлежит многим",
164
158
  "relation.oneToOne": "имеет один и принадлежит одному",
165
159
  "relation.oneWay": "имеет один",
160
+ "attribute.customField": "Пользовательское поле",
161
+ "attribute.blocks": "Богатый текст (Блоки)",
162
+ "attribute.blocks.description": "Новый редактор богатого текста на основе JSON",
163
+ "media.multiple": "Множественные",
164
+ "components.SelectComponents.displayed-value": "{number, plural, =0 {# компонентов} one {# компонент} other {# компонентов}} выбрано",
165
+ "contentType.apiId-plural.description": "Множественное API ID",
166
+ "contentType.apiId-plural.label": "API ID (Множественное)",
167
+ "contentType.apiId-singular.description": "UID используется для генерации API маршрутов и таблиц/коллекций базы данных",
168
+ "contentType.apiId-singular.label": "API ID (Единственное)",
169
+ "error.contentType.pluralName-used": "Это значение не может быть таким же, как единственное",
170
+ "error.contentType.singularName-used": "Это значение не может быть таким же, как множественное",
171
+ "error.contentType.singularName-equals-pluralName": "Это значение не может быть таким же, как множественное API ID другого типа контента.",
172
+ "error.contentType.pluralName-equals-singularName": "Это значение не может быть таким же, как единственное API ID другого типа контента.",
173
+ "error.contentType.pluralName-equals-collectionName": "Это значение уже используется другим типом контента.",
174
+ "error.validation.enum-regex": "По крайней мере одно значение недействительно. Значения должны иметь хотя бы один буквенный символ перед первым появлением числа.",
175
+ "error.validation.positive": "Должно быть положительным числом",
176
+ "form.attribute.item.date.type.date": "дата (напр.: 01/01/{currentYear})",
177
+ "form.attribute.item.date.type.datetime": "дата и время (напр.: 01/01/{currentYear} 00:00 AM)",
178
+ "form.attribute.item.date.type.time": "время (напр.: 00:00 AM)",
179
+ "form.attribute.item.maximumComponents": "Максимальное количество компонентов",
180
+ "form.attribute.item.minimumComponents": "Минимальное количество компонентов",
181
+ "form.attribute.item.uniqueField.v5.willBeDisabled'": "В настоящее время уникальные поля не работают корректно в компонентах. Если вы отключите эту функцию, поле будет отключено до исправления.",
182
+ "form.attribute.item.uniqueField.v5.disabled": "В настоящее время уникальные поля не работают корректно в компонентах. Это поле было отключено до исправления.",
183
+ "form.attribute.condition.title": "Условие",
184
+ "form.attribute.condition.description": "Переключение настроек поля в зависимости от значения другого булевого или перечисляемого поля.",
185
+ "form.attribute.condition.label": "Условия",
186
+ "form.attribute.condition.field": "Поле",
187
+ "form.attribute.condition.operator": "Оператор",
188
+ "form.attribute.condition.value": "Значение",
189
+ "form.attribute.condition.operator.is": "равно",
190
+ "form.attribute.condition.operator.isNot": "не равно",
191
+ "form.attribute.condition.value.true": "истина",
192
+ "form.attribute.condition.value.false": "ложь",
193
+ "form.attribute.condition.apply": "Применить условие",
194
+ "form.attribute.condition.then": "Тогда",
195
+ "form.attribute.condition.action": "Действие",
196
+ "form.attribute.condition.action.show": "Показать",
197
+ "form.attribute.condition.action.hide": "Скрыть",
198
+ "form.attribute.condition.no-fields": "Нет доступных булевых или перечисляемых полей для установки условий.",
199
+ "form.attribute.condition.enum-change-warning": "Следующие поля имеют условия, которые зависят от этого поля: {fieldNames}. Изменение или удаление значений перечисления {values} нарушит эти условия. Вы хотите продолжить?",
200
+ "form.attribute.condition.enum-change-warning-values": ". Изменение или удаление значений перечисления ",
201
+ "form.attribute.condition.enum-change-warning-end": " нарушит эти условия. Вы хотите продолжить?",
202
+ "form.attribute.condition.field-change-warning": "Следующие поля имеют условия, которые зависят от этого поля: {fieldNames}. Переименование нарушит эти условия. Вы хотите продолжить?",
203
+ "form.attribute.condition.field-change-warning-end": ". Переименование нарушит эти условия. Вы хотите продолжить?",
204
+ "form.button.collection-type.name": "Тип коллекции",
205
+ "form.button.single-type.name": "Единичный тип",
206
+ "menu.section.components.name": "Компоненты",
207
+ "menu.section.models.name": "Типы коллекций",
208
+ "menu.section.single-types.name": "Единичные типы",
209
+ "modalForm.collectionType.header-create": "Создать тип коллекции",
210
+ "modalForm.empty.button": "Добавить пользовательские поля",
211
+ "modalForm.empty.heading": "Пока ничего нет.",
212
+ "modalForm.empty.sub-heading": "Найдите то, что ищете, через широкий спектр расширений.",
213
+ "modalForm.custom-fields.advanced.settings.extended": "Расширенные настройки",
214
+ "modalForm.tabs.custom": "Пользовательские",
215
+ "modalForm.tabs.custom.howToLink": "Как добавить пользовательские поля",
216
+ "modalForm.tabs.default": "По умолчанию",
217
+ "modalForm.tabs.label": "Вкладки типов по умолчанию и пользовательских",
218
+ "modelPage.attribute.with": "с",
219
+ "notification.error.dynamiczone-min.validation": "В динамической зоне требуется хотя бы один компонент для сохранения типа контента",
220
+ "popUpWarning.discardAll.message": "Вы уверены, что хотите отменить все изменения?",
221
+ "popUpWarning.bodyMessage.delete-condition": "Вы уверены, что хотите удалить это условие?",
222
+ "popUpWarning.bodyMessage.delete-attribute-with-conditions": "Следующие поля имеют условия, которые зависят от этого поля: ",
223
+ "popUpWarning.bodyMessage.delete-attribute-with-conditions-end": ". Вы уверены, что хотите удалить его?",
166
224
  "table.button.no-fields": "Добавить новое поле",
167
- "table.content.create-first-content-type.title": "Нет типов контента",
168
- "table.content.create-first-content-type.description": "Создавайте типы коллекций, единичные типы и компоненты для построения вашей схемы.",
169
- "table.content.create-first-content-type.start-with-prompt": "Начать с подсказки",
170
- "table.content.no-fields.collection-type": "Добавьте первое поле в этот тип коллекции",
171
- "table.content.no-fields.component": "Добавьте первое поле в этот компонент",
172
- "chat.tooltips.close-chat": "Закрыть чат",
173
- "chat.tooltips.create-chat": "Новый диалог",
174
- "chat.tooltips.open-chat": "Открыть чат",
175
- "chat.tooltips.send-message": "Отправить",
176
- "chat.tooltips.stop-generation": "Остановить",
177
- "chat.header.default-title": "Новый диалог",
178
- "chat.input.defaults.title": "Чем я могу вам помочь?",
179
- "chat.input.defaults.generate": "Сгенерировать schema продукта",
180
- "chat.input.defaults.ctb": "Расскажите мне о Content-Type Builder",
181
- "chat.input.defaults.strapi": "Расскажите мне о Strapi",
182
- "chat.input.thinking": "Strapi AI думает...",
183
- "chat.input.placeholder": "Спросите Strapi AI...",
184
- "chat.input.strapi-ai-can-make-errors": "Strapi AI может делать ошибки.",
185
- "chat.messages.error": "Что-то пошло не так.",
186
- "chat.code-upload.header": "Импортировать приложение Next.js",
187
- "chat.code-upload.title": "Импортировать приложение Next.js",
188
- "chat.code-upload.description": "Ваше приложение будет проанализировано AI. Перед импортом удалите все конфиденциальные данные.",
189
- "chat.code-upload.drop-zone": "Перетащите .zip файл сюда или",
190
- "chat.code-upload.drop-zone-browse": "выберите файлы"
225
+ "table.content.create-first-content-type": "Создайте ваш первый тип коллекции",
226
+ "table.content.no-fields.collection-type": "Добавьте ваше первое поле в этот тип коллекции",
227
+ "table.content.no-fields.component": "Добавьте ваше первое поле в этот компонент",
228
+ "IconPicker.search.placeholder.label": "Поиск иконки",
229
+ "IconPicker.search.clear.label": "Очистить поиск иконки",
230
+ "IconPicker.search.button.label": "Кнопка поиска иконки",
231
+ "IconPicker.remove.tooltip": "Удалить выбранную иконку",
232
+ "IconPicker.remove.button": "Кнопка удаления выбранной иконки",
233
+ "IconPicker.emptyState.label": "Иконка не найдена",
234
+ "IconPicker.icon.label": "Выбрать иконку {icon}"
191
235
  };
192
236
 
193
237
  exports.configurations = configurations;
@@ -1 +1 @@
1
- {"version":3,"file":"ru.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"ru.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -7,7 +7,6 @@ var ru = {
7
7
  "attribute.component.description": "Компонент - группа полей, доступных для повторения или повторного использования",
8
8
  "attribute.date": "Date",
9
9
  "attribute.date.description": "Элемент управления датой и временем",
10
- "attribute.datetime": "Datetime",
11
10
  "attribute.dynamiczone": "Dynamic zone",
12
11
  "attribute.dynamiczone.description": "Компоненты с динамическим редактированием",
13
12
  "attribute.email": "Email",
@@ -25,8 +24,6 @@ var ru = {
25
24
  "attribute.password.description": "Поле пароля с шифрованием",
26
25
  "attribute.relation": "Relation",
27
26
  "attribute.relation.description": "Ссылка на какой-либо тип контента",
28
- "attribute.richtext": "Rich text",
29
- "attribute.richtext.description": "Элемент управления для редактирования текста с форматированием",
30
27
  "attribute.text": "Text",
31
28
  "attribute.text.description": "Маленький или длинный текст, например заголовок или описание",
32
29
  "attribute.time": "Time",
@@ -39,10 +36,7 @@ var ru = {
39
36
  "button.model.create": "Создать новый тип контента",
40
37
  "button.single-types.create": "Создать новый единичный тип",
41
38
  "component.repeatable": "(повторяется)",
42
- "components.componentSelect.no-component-available": "Вы уже добавили все имеющиеся группы полей",
43
39
  "components.componentSelect.no-component-available.with-search": "Подходящих групп полей не найдено",
44
- "components.componentSelect.value-component": "Выбрано компонентов - {number} (наберите для поиска)",
45
- "components.componentSelect.value-components": "Компонентов выбрано - {number}",
46
40
  configurations: configurations,
47
41
  "contentType.collectionName.description": "Полезно, когда имя вашего типа контента и имя вашей таблицы различаются",
48
42
  "contentType.collectionName.label": "Название коллекции",
@@ -159,31 +153,81 @@ var ru = {
159
153
  "relation.oneToMany": "принадлежит многим",
160
154
  "relation.oneToOne": "имеет один и принадлежит одному",
161
155
  "relation.oneWay": "имеет один",
156
+ "attribute.customField": "Пользовательское поле",
157
+ "attribute.blocks": "Богатый текст (Блоки)",
158
+ "attribute.blocks.description": "Новый редактор богатого текста на основе JSON",
159
+ "media.multiple": "Множественные",
160
+ "components.SelectComponents.displayed-value": "{number, plural, =0 {# компонентов} one {# компонент} other {# компонентов}} выбрано",
161
+ "contentType.apiId-plural.description": "Множественное API ID",
162
+ "contentType.apiId-plural.label": "API ID (Множественное)",
163
+ "contentType.apiId-singular.description": "UID используется для генерации API маршрутов и таблиц/коллекций базы данных",
164
+ "contentType.apiId-singular.label": "API ID (Единственное)",
165
+ "error.contentType.pluralName-used": "Это значение не может быть таким же, как единственное",
166
+ "error.contentType.singularName-used": "Это значение не может быть таким же, как множественное",
167
+ "error.contentType.singularName-equals-pluralName": "Это значение не может быть таким же, как множественное API ID другого типа контента.",
168
+ "error.contentType.pluralName-equals-singularName": "Это значение не может быть таким же, как единственное API ID другого типа контента.",
169
+ "error.contentType.pluralName-equals-collectionName": "Это значение уже используется другим типом контента.",
170
+ "error.validation.enum-regex": "По крайней мере одно значение недействительно. Значения должны иметь хотя бы один буквенный символ перед первым появлением числа.",
171
+ "error.validation.positive": "Должно быть положительным числом",
172
+ "form.attribute.item.date.type.date": "дата (напр.: 01/01/{currentYear})",
173
+ "form.attribute.item.date.type.datetime": "дата и время (напр.: 01/01/{currentYear} 00:00 AM)",
174
+ "form.attribute.item.date.type.time": "время (напр.: 00:00 AM)",
175
+ "form.attribute.item.maximumComponents": "Максимальное количество компонентов",
176
+ "form.attribute.item.minimumComponents": "Минимальное количество компонентов",
177
+ "form.attribute.item.uniqueField.v5.willBeDisabled'": "В настоящее время уникальные поля не работают корректно в компонентах. Если вы отключите эту функцию, поле будет отключено до исправления.",
178
+ "form.attribute.item.uniqueField.v5.disabled": "В настоящее время уникальные поля не работают корректно в компонентах. Это поле было отключено до исправления.",
179
+ "form.attribute.condition.title": "Условие",
180
+ "form.attribute.condition.description": "Переключение настроек поля в зависимости от значения другого булевого или перечисляемого поля.",
181
+ "form.attribute.condition.label": "Условия",
182
+ "form.attribute.condition.field": "Поле",
183
+ "form.attribute.condition.operator": "Оператор",
184
+ "form.attribute.condition.value": "Значение",
185
+ "form.attribute.condition.operator.is": "равно",
186
+ "form.attribute.condition.operator.isNot": "не равно",
187
+ "form.attribute.condition.value.true": "истина",
188
+ "form.attribute.condition.value.false": "ложь",
189
+ "form.attribute.condition.apply": "Применить условие",
190
+ "form.attribute.condition.then": "Тогда",
191
+ "form.attribute.condition.action": "Действие",
192
+ "form.attribute.condition.action.show": "Показать",
193
+ "form.attribute.condition.action.hide": "Скрыть",
194
+ "form.attribute.condition.no-fields": "Нет доступных булевых или перечисляемых полей для установки условий.",
195
+ "form.attribute.condition.enum-change-warning": "Следующие поля имеют условия, которые зависят от этого поля: {fieldNames}. Изменение или удаление значений перечисления {values} нарушит эти условия. Вы хотите продолжить?",
196
+ "form.attribute.condition.enum-change-warning-values": ". Изменение или удаление значений перечисления ",
197
+ "form.attribute.condition.enum-change-warning-end": " нарушит эти условия. Вы хотите продолжить?",
198
+ "form.attribute.condition.field-change-warning": "Следующие поля имеют условия, которые зависят от этого поля: {fieldNames}. Переименование нарушит эти условия. Вы хотите продолжить?",
199
+ "form.attribute.condition.field-change-warning-end": ". Переименование нарушит эти условия. Вы хотите продолжить?",
200
+ "form.button.collection-type.name": "Тип коллекции",
201
+ "form.button.single-type.name": "Единичный тип",
202
+ "menu.section.components.name": "Компоненты",
203
+ "menu.section.models.name": "Типы коллекций",
204
+ "menu.section.single-types.name": "Единичные типы",
205
+ "modalForm.collectionType.header-create": "Создать тип коллекции",
206
+ "modalForm.empty.button": "Добавить пользовательские поля",
207
+ "modalForm.empty.heading": "Пока ничего нет.",
208
+ "modalForm.empty.sub-heading": "Найдите то, что ищете, через широкий спектр расширений.",
209
+ "modalForm.custom-fields.advanced.settings.extended": "Расширенные настройки",
210
+ "modalForm.tabs.custom": "Пользовательские",
211
+ "modalForm.tabs.custom.howToLink": "Как добавить пользовательские поля",
212
+ "modalForm.tabs.default": "По умолчанию",
213
+ "modalForm.tabs.label": "Вкладки типов по умолчанию и пользовательских",
214
+ "modelPage.attribute.with": "с",
215
+ "notification.error.dynamiczone-min.validation": "В динамической зоне требуется хотя бы один компонент для сохранения типа контента",
216
+ "popUpWarning.discardAll.message": "Вы уверены, что хотите отменить все изменения?",
217
+ "popUpWarning.bodyMessage.delete-condition": "Вы уверены, что хотите удалить это условие?",
218
+ "popUpWarning.bodyMessage.delete-attribute-with-conditions": "Следующие поля имеют условия, которые зависят от этого поля: ",
219
+ "popUpWarning.bodyMessage.delete-attribute-with-conditions-end": ". Вы уверены, что хотите удалить его?",
162
220
  "table.button.no-fields": "Добавить новое поле",
163
- "table.content.create-first-content-type.title": "Нет типов контента",
164
- "table.content.create-first-content-type.description": "Создавайте типы коллекций, единичные типы и компоненты для построения вашей схемы.",
165
- "table.content.create-first-content-type.start-with-prompt": "Начать с подсказки",
166
- "table.content.no-fields.collection-type": "Добавьте первое поле в этот тип коллекции",
167
- "table.content.no-fields.component": "Добавьте первое поле в этот компонент",
168
- "chat.tooltips.close-chat": "Закрыть чат",
169
- "chat.tooltips.create-chat": "Новый диалог",
170
- "chat.tooltips.open-chat": "Открыть чат",
171
- "chat.tooltips.send-message": "Отправить",
172
- "chat.tooltips.stop-generation": "Остановить",
173
- "chat.header.default-title": "Новый диалог",
174
- "chat.input.defaults.title": "Чем я могу вам помочь?",
175
- "chat.input.defaults.generate": "Сгенерировать schema продукта",
176
- "chat.input.defaults.ctb": "Расскажите мне о Content-Type Builder",
177
- "chat.input.defaults.strapi": "Расскажите мне о Strapi",
178
- "chat.input.thinking": "Strapi AI думает...",
179
- "chat.input.placeholder": "Спросите Strapi AI...",
180
- "chat.input.strapi-ai-can-make-errors": "Strapi AI может делать ошибки.",
181
- "chat.messages.error": "Что-то пошло не так.",
182
- "chat.code-upload.header": "Импортировать приложение Next.js",
183
- "chat.code-upload.title": "Импортировать приложение Next.js",
184
- "chat.code-upload.description": "Ваше приложение будет проанализировано AI. Перед импортом удалите все конфиденциальные данные.",
185
- "chat.code-upload.drop-zone": "Перетащите .zip файл сюда или",
186
- "chat.code-upload.drop-zone-browse": "выберите файлы"
221
+ "table.content.create-first-content-type": "Создайте ваш первый тип коллекции",
222
+ "table.content.no-fields.collection-type": "Добавьте ваше первое поле в этот тип коллекции",
223
+ "table.content.no-fields.component": "Добавьте ваше первое поле в этот компонент",
224
+ "IconPicker.search.placeholder.label": "Поиск иконки",
225
+ "IconPicker.search.clear.label": "Очистить поиск иконки",
226
+ "IconPicker.search.button.label": "Кнопка поиска иконки",
227
+ "IconPicker.remove.tooltip": "Удалить выбранную иконку",
228
+ "IconPicker.remove.button": "Кнопка удаления выбранной иконки",
229
+ "IconPicker.emptyState.label": "Иконка не найдена",
230
+ "IconPicker.icon.label": "Выбрать иконку {icon}"
187
231
  };
188
232
 
189
233
  export { configurations, ru as default, from };
@@ -1 +1 @@
1
- {"version":3,"file":"ru.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"ru.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -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)