@strapi/content-manager 5.61.1 → 5.62.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 (260) hide show
  1. package/dist/admin/components/ConfigurationForm/Fields.js +1 -1
  2. package/dist/admin/components/ConfigurationForm/Fields.js.map +1 -1
  3. package/dist/admin/components/ConfigurationForm/Fields.mjs +3 -3
  4. package/dist/admin/components/ConfigurationForm/Fields.mjs.map +1 -1
  5. package/dist/admin/features/I18nSharedFieldsLock.js +54 -0
  6. package/dist/admin/features/I18nSharedFieldsLock.js.map +1 -0
  7. package/dist/admin/features/I18nSharedFieldsLock.mjs +31 -0
  8. package/dist/admin/features/I18nSharedFieldsLock.mjs.map +1 -0
  9. package/dist/admin/history/components/VersionInputRenderer.js +7 -2
  10. package/dist/admin/history/components/VersionInputRenderer.js.map +1 -1
  11. package/dist/admin/history/components/VersionInputRenderer.mjs +7 -3
  12. package/dist/admin/history/components/VersionInputRenderer.mjs.map +1 -1
  13. package/dist/admin/hooks/useContentManagerInitData.js +27 -8
  14. package/dist/admin/hooks/useContentManagerInitData.js.map +1 -1
  15. package/dist/admin/hooks/useContentManagerInitData.mjs +29 -10
  16. package/dist/admin/hooks/useContentManagerInitData.mjs.map +1 -1
  17. package/dist/admin/hooks/useDocument.js +11 -13
  18. package/dist/admin/hooks/useDocument.js.map +1 -1
  19. package/dist/admin/hooks/useDocument.mjs +11 -13
  20. package/dist/admin/hooks/useDocument.mjs.map +1 -1
  21. package/dist/admin/hooks/useI18nFieldLock.js +169 -0
  22. package/dist/admin/hooks/useI18nFieldLock.js.map +1 -0
  23. package/dist/admin/hooks/useI18nFieldLock.mjs +140 -0
  24. package/dist/admin/hooks/useI18nFieldLock.mjs.map +1 -0
  25. package/dist/admin/hooks/usePersistentQueryParams.js +16 -3
  26. package/dist/admin/hooks/usePersistentQueryParams.js.map +1 -1
  27. package/dist/admin/hooks/usePersistentQueryParams.mjs +16 -3
  28. package/dist/admin/hooks/usePersistentQueryParams.mjs.map +1 -1
  29. package/dist/admin/index.js +5 -0
  30. package/dist/admin/index.js.map +1 -1
  31. package/dist/admin/index.mjs +2 -0
  32. package/dist/admin/index.mjs.map +1 -1
  33. package/dist/admin/modules/app.js +8 -1
  34. package/dist/admin/modules/app.js.map +1 -1
  35. package/dist/admin/modules/app.mjs +8 -2
  36. package/dist/admin/modules/app.mjs.map +1 -1
  37. package/dist/admin/pages/EditView/EditViewPage.js +129 -127
  38. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  39. package/dist/admin/pages/EditView/EditViewPage.mjs +129 -127
  40. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  41. package/dist/admin/pages/EditView/components/DocumentActions.js +11 -4
  42. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  43. package/dist/admin/pages/EditView/components/DocumentActions.mjs +12 -5
  44. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js +31 -21
  46. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.js.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs +32 -22
  48. package/dist/admin/pages/EditView/components/FormInputs/BlocksInput/EditorLayout.mjs.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/Component/AddComponentMenu.js +98 -0
  50. package/dist/admin/pages/EditView/components/FormInputs/Component/AddComponentMenu.js.map +1 -0
  51. package/dist/admin/pages/EditView/components/FormInputs/Component/AddComponentMenu.mjs +96 -0
  52. package/dist/admin/pages/EditView/components/FormInputs/Component/AddComponentMenu.mjs.map +1 -0
  53. package/dist/admin/pages/EditView/components/FormInputs/Component/ComponentCopyModal.js +1103 -0
  54. package/dist/admin/pages/EditView/components/FormInputs/Component/ComponentCopyModal.js.map +1 -0
  55. package/dist/admin/pages/EditView/components/FormInputs/Component/ComponentCopyModal.mjs +1077 -0
  56. package/dist/admin/pages/EditView/components/FormInputs/Component/ComponentCopyModal.mjs.map +1 -0
  57. package/dist/admin/pages/EditView/components/FormInputs/Component/CopiedComponents.js +211 -0
  58. package/dist/admin/pages/EditView/components/FormInputs/Component/CopiedComponents.js.map +1 -0
  59. package/dist/admin/pages/EditView/components/FormInputs/Component/CopiedComponents.mjs +183 -0
  60. package/dist/admin/pages/EditView/components/FormInputs/Component/CopiedComponents.mjs.map +1 -0
  61. package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.js +84 -41
  62. package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.js.map +1 -1
  63. package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.mjs +86 -43
  64. package/dist/admin/pages/EditView/components/FormInputs/Component/Initializer.mjs.map +1 -1
  65. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +86 -20
  66. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
  67. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +89 -23
  68. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
  69. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +5 -2
  70. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  71. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +5 -2
  72. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  73. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +142 -22
  74. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  75. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +143 -23
  76. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  77. package/dist/admin/pages/EditView/components/FormInputs/Component/utils/componentCopy.js +402 -0
  78. package/dist/admin/pages/EditView/components/FormInputs/Component/utils/componentCopy.js.map +1 -0
  79. package/dist/admin/pages/EditView/components/FormInputs/Component/utils/componentCopy.mjs +389 -0
  80. package/dist/admin/pages/EditView/components/FormInputs/Component/utils/componentCopy.mjs.map +1 -0
  81. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js +84 -33
  82. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.js.map +1 -1
  83. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs +85 -34
  84. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.mjs.map +1 -1
  85. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.js +5 -1
  86. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.js.map +1 -1
  87. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.mjs +5 -1
  88. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.mjs.map +1 -1
  89. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +17 -4
  90. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  91. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +18 -5
  92. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  93. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +54 -6
  94. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  95. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +54 -6
  96. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  97. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +11 -9
  98. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  99. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +12 -10
  100. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  101. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +9 -4
  102. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  103. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +9 -4
  104. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  105. package/dist/admin/pages/EditView/components/FormLayout.js +66 -63
  106. package/dist/admin/pages/EditView/components/FormLayout.js.map +1 -1
  107. package/dist/admin/pages/EditView/components/FormLayout.mjs +66 -63
  108. package/dist/admin/pages/EditView/components/FormLayout.mjs.map +1 -1
  109. package/dist/admin/pages/EditView/components/InputRenderer.js +7 -1
  110. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  111. package/dist/admin/pages/EditView/components/InputRenderer.mjs +7 -1
  112. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  113. package/dist/admin/pages/EditView/utils/data.js +14 -9
  114. package/dist/admin/pages/EditView/utils/data.js.map +1 -1
  115. package/dist/admin/pages/EditView/utils/data.mjs +14 -9
  116. package/dist/admin/pages/EditView/utils/data.mjs.map +1 -1
  117. package/dist/admin/pages/EditView/utils/forms.js +34 -0
  118. package/dist/admin/pages/EditView/utils/forms.js.map +1 -1
  119. package/dist/admin/pages/EditView/utils/forms.mjs +34 -1
  120. package/dist/admin/pages/EditView/utils/forms.mjs.map +1 -1
  121. package/dist/admin/pages/ListConfiguration/components/DraggableCard.js +2 -1
  122. package/dist/admin/pages/ListConfiguration/components/DraggableCard.js.map +1 -1
  123. package/dist/admin/pages/ListConfiguration/components/DraggableCard.mjs +2 -1
  124. package/dist/admin/pages/ListConfiguration/components/DraggableCard.mjs.map +1 -1
  125. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js +7 -6
  126. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.js.map +1 -1
  127. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.mjs +7 -6
  128. package/dist/admin/pages/ListConfiguration/components/EditFieldForm.mjs.map +1 -1
  129. package/dist/admin/pages/ListView/ListViewPage.js +11 -2
  130. package/dist/admin/pages/ListView/ListViewPage.js.map +1 -1
  131. package/dist/admin/pages/ListView/ListViewPage.mjs +13 -4
  132. package/dist/admin/pages/ListView/ListViewPage.mjs.map +1 -1
  133. package/dist/admin/pages/ListView/components/Filters.js +15 -5
  134. package/dist/admin/pages/ListView/components/Filters.js.map +1 -1
  135. package/dist/admin/pages/ListView/components/Filters.mjs +16 -7
  136. package/dist/admin/pages/ListView/components/Filters.mjs.map +1 -1
  137. package/dist/admin/preview/components/InputPopover.js +18 -8
  138. package/dist/admin/preview/components/InputPopover.js.map +1 -1
  139. package/dist/admin/preview/components/InputPopover.mjs +19 -9
  140. package/dist/admin/preview/components/InputPopover.mjs.map +1 -1
  141. package/dist/admin/preview/pages/Preview.js +5 -16
  142. package/dist/admin/preview/pages/Preview.js.map +1 -1
  143. package/dist/admin/preview/pages/Preview.mjs +5 -16
  144. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  145. package/dist/admin/preview/utils/fieldUtils.js +2 -0
  146. package/dist/admin/preview/utils/fieldUtils.js.map +1 -1
  147. package/dist/admin/preview/utils/fieldUtils.mjs +2 -1
  148. package/dist/admin/preview/utils/fieldUtils.mjs.map +1 -1
  149. package/dist/admin/services/api.js +2 -1
  150. package/dist/admin/services/api.js.map +1 -1
  151. package/dist/admin/services/api.mjs +2 -1
  152. package/dist/admin/services/api.mjs.map +1 -1
  153. package/dist/admin/services/documents.js +21 -1
  154. package/dist/admin/services/documents.js.map +1 -1
  155. package/dist/admin/services/documents.mjs +21 -2
  156. package/dist/admin/services/documents.mjs.map +1 -1
  157. package/dist/admin/services/relations.js +47 -1
  158. package/dist/admin/services/relations.js.map +1 -1
  159. package/dist/admin/services/relations.mjs +47 -2
  160. package/dist/admin/services/relations.mjs.map +1 -1
  161. package/dist/admin/src/exports.d.ts +2 -0
  162. package/dist/admin/src/features/I18nSharedFieldsLock.d.ts +22 -0
  163. package/dist/admin/src/history/components/VersionInputRenderer.d.ts +7 -1
  164. package/dist/admin/src/history/services/historyVersion.d.ts +1 -1
  165. package/dist/admin/src/hooks/useI18nFieldLock.d.ts +61 -0
  166. package/dist/admin/src/modules/app.d.ts +4 -1
  167. package/dist/admin/src/pages/EditView/components/FormInputs/Component/AddComponentMenu.d.ts +15 -0
  168. package/dist/admin/src/pages/EditView/components/FormInputs/Component/ComponentCopyModal.d.ts +58 -0
  169. package/dist/admin/src/pages/EditView/components/FormInputs/Component/CopiedComponents.d.ts +41 -0
  170. package/dist/admin/src/pages/EditView/components/FormInputs/Component/Initializer.d.ts +7 -3
  171. package/dist/admin/src/pages/EditView/components/FormInputs/Component/NonRepeatable.d.ts +1 -1
  172. package/dist/admin/src/pages/EditView/components/FormInputs/Component/Repeatable.d.ts +2 -2
  173. package/dist/admin/src/pages/EditView/components/FormInputs/Component/utils/componentCopy.d.ts +115 -0
  174. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/ComponentCategory.d.ts +6 -3
  175. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/ComponentPicker.d.ts +2 -1
  176. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.d.ts +5 -1
  177. package/dist/admin/src/pages/EditView/utils/forms.d.ts +13 -2
  178. package/dist/admin/src/pages/ListView/components/Filters.d.ts +12 -3
  179. package/dist/admin/src/preview/services/preview.d.ts +1 -1
  180. package/dist/admin/src/preview/utils/fieldUtils.d.ts +1 -0
  181. package/dist/admin/src/services/api.d.ts +1 -1
  182. package/dist/admin/src/services/components.d.ts +2 -2
  183. package/dist/admin/src/services/contentTypes.d.ts +3 -3
  184. package/dist/admin/src/services/documents.d.ts +25 -21
  185. package/dist/admin/src/services/homepage.d.ts +1 -1
  186. package/dist/admin/src/services/init.d.ts +1 -1
  187. package/dist/admin/src/services/relations.d.ts +5 -3
  188. package/dist/admin/src/services/uid.d.ts +3 -3
  189. package/dist/admin/translations/en.json.js +41 -0
  190. package/dist/admin/translations/en.json.js.map +1 -1
  191. package/dist/admin/translations/en.json.mjs +41 -0
  192. package/dist/admin/translations/en.json.mjs.map +1 -1
  193. package/dist/server/controllers/relations.js +4 -2
  194. package/dist/server/controllers/relations.js.map +1 -1
  195. package/dist/server/controllers/relations.mjs +4 -2
  196. package/dist/server/controllers/relations.mjs.map +1 -1
  197. package/dist/server/controllers/utils/metadata.js +3 -1
  198. package/dist/server/controllers/utils/metadata.js.map +1 -1
  199. package/dist/server/controllers/utils/metadata.mjs +3 -1
  200. package/dist/server/controllers/utils/metadata.mjs.map +1 -1
  201. package/dist/server/history/services/utils.js +3 -1
  202. package/dist/server/history/services/utils.js.map +1 -1
  203. package/dist/server/history/services/utils.mjs +3 -1
  204. package/dist/server/history/services/utils.mjs.map +1 -1
  205. package/dist/server/homepage/services/homepage-query-utils.js +14 -0
  206. package/dist/server/homepage/services/homepage-query-utils.js.map +1 -1
  207. package/dist/server/homepage/services/homepage-query-utils.mjs +14 -1
  208. package/dist/server/homepage/services/homepage-query-utils.mjs.map +1 -1
  209. package/dist/server/homepage/services/homepage.js +1 -1
  210. package/dist/server/homepage/services/homepage.js.map +1 -1
  211. package/dist/server/homepage/services/homepage.mjs +2 -2
  212. package/dist/server/homepage/services/homepage.mjs.map +1 -1
  213. package/dist/server/mcp/sanitizers/shape-relations.js +1 -3
  214. package/dist/server/mcp/sanitizers/shape-relations.js.map +1 -1
  215. package/dist/server/mcp/sanitizers/shape-relations.mjs +1 -3
  216. package/dist/server/mcp/sanitizers/shape-relations.mjs.map +1 -1
  217. package/dist/server/mcp/schemas/output-schemas.js +2 -1
  218. package/dist/server/mcp/schemas/output-schemas.js.map +1 -1
  219. package/dist/server/mcp/schemas/output-schemas.mjs +2 -1
  220. package/dist/server/mcp/schemas/output-schemas.mjs.map +1 -1
  221. package/dist/server/services/document-manager.js +3 -2
  222. package/dist/server/services/document-manager.js.map +1 -1
  223. package/dist/server/services/document-manager.mjs +3 -2
  224. package/dist/server/services/document-manager.mjs.map +1 -1
  225. package/dist/server/services/document-metadata.js +92 -4
  226. package/dist/server/services/document-metadata.js.map +1 -1
  227. package/dist/server/services/document-metadata.mjs +92 -4
  228. package/dist/server/services/document-metadata.mjs.map +1 -1
  229. package/dist/server/services/permission-checker.js +20 -8
  230. package/dist/server/services/permission-checker.js.map +1 -1
  231. package/dist/server/services/permission-checker.mjs +20 -8
  232. package/dist/server/services/permission-checker.mjs.map +1 -1
  233. package/dist/server/services/uid.js +2 -1
  234. package/dist/server/services/uid.js.map +1 -1
  235. package/dist/server/services/uid.mjs +2 -1
  236. package/dist/server/services/uid.mjs.map +1 -1
  237. package/dist/server/src/controllers/relations.d.ts.map +1 -1
  238. package/dist/server/src/controllers/utils/metadata.d.ts +1 -0
  239. package/dist/server/src/controllers/utils/metadata.d.ts.map +1 -1
  240. package/dist/server/src/history/services/utils.d.ts.map +1 -1
  241. package/dist/server/src/homepage/services/homepage-query-utils.d.ts +6 -0
  242. package/dist/server/src/homepage/services/homepage-query-utils.d.ts.map +1 -1
  243. package/dist/server/src/homepage/services/homepage.d.ts.map +1 -1
  244. package/dist/server/src/index.d.ts +21 -7
  245. package/dist/server/src/index.d.ts.map +1 -1
  246. package/dist/server/src/mcp/sanitizers/shape-relations.d.ts.map +1 -1
  247. package/dist/server/src/mcp/schemas/output-schemas.d.ts.map +1 -1
  248. package/dist/server/src/services/document-manager.d.ts.map +1 -1
  249. package/dist/server/src/services/document-metadata.d.ts +5 -1
  250. package/dist/server/src/services/document-metadata.d.ts.map +1 -1
  251. package/dist/server/src/services/index.d.ts +21 -7
  252. package/dist/server/src/services/index.d.ts.map +1 -1
  253. package/dist/server/src/services/permission-checker.d.ts +6 -5
  254. package/dist/server/src/services/permission-checker.d.ts.map +1 -1
  255. package/dist/server/src/services/uid.d.ts.map +1 -1
  256. package/dist/shared/contracts/collection-types.d.ts +7 -0
  257. package/dist/shared/contracts/collection-types.d.ts.map +1 -1
  258. package/dist/shared/contracts/single-types.d.ts +4 -0
  259. package/dist/shared/contracts/single-types.d.ts.map +1 -1
  260. package/package.json +9 -9
@@ -1,65 +1,130 @@
1
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
- import { useField } from '@strapi/admin/strapi-admin';
4
- import { Field, Flex, IconButton } from '@strapi/design-system';
5
- import { Trash } from '@strapi/icons';
3
+ import { useField, useForm } from '@strapi/admin/strapi-admin';
4
+ import { Field, Flex, Badge, Button, IconButton } from '@strapi/design-system';
5
+ import { Duplicate, Trash } from '@strapi/icons';
6
6
  import { useIntl } from 'react-intl';
7
+ import { COLLECTION_TYPES } from '../../../../../constants/collections.mjs';
7
8
  import { useDocumentContext } from '../../../../../hooks/useDocumentContext.mjs';
8
9
  import { getTranslation } from '../../../../../utils/translations.mjs';
9
10
  import { transformDocument } from '../../../utils/data.mjs';
10
11
  import { createDefaultForm } from '../../../utils/forms.mjs';
12
+ import { ComponentCopyModal } from './ComponentCopyModal.mjs';
13
+ import { useCopiedComponent } from './CopiedComponents.mjs';
11
14
  import { Initializer } from './Initializer.mjs';
12
15
  import { NonRepeatableComponent as MemoizedNonRepeatableComponent } from './NonRepeatable.mjs';
13
16
  import { RepeatableComponent as MemoizedRepeatableComponent } from './Repeatable.mjs';
17
+ import { getSavedComponent, isComponentBlank } from './utils/componentCopy.mjs';
14
18
 
15
19
  const ComponentInput = ({ label, required, name, attribute, disabled, labelAction, ...props })=>{
16
20
  const { formatMessage } = useIntl();
17
21
  const field = useField(name);
18
- const showResetComponent = !attribute.repeatable && field.value !== undefined && field.value !== null && !disabled;
19
- const { currentDocument: { components } } = useDocumentContext('ComponentInput');
22
+ const [isCopyModalOpen, setIsCopyModalOpen] = React.useState(false);
23
+ const { isCopied, insertCopy } = useCopiedComponent(name);
24
+ const { currentDocumentMeta, currentDocument: { components, document } } = useDocumentContext('ComponentInput');
25
+ // A reference into the document: it only changes when the document is refetched
26
+ const savedComponent = useForm('ComponentInput', (state)=>getSavedComponent(document, state.values, name));
27
+ const canCopyFromExisting = currentDocumentMeta.collectionType === COLLECTION_TYPES;
28
+ const hasComponent = !attribute.repeatable && field.value !== undefined && field.value !== null;
29
+ const showResetComponent = hasComponent && !disabled;
30
+ /**
31
+ * A component that was just added is blank: copying into it fills it. Once it holds content,
32
+ * copying into it replaces that content and the user is warned.
33
+ */ const hasContent = hasComponent && !isComponentBlank(field.value, attribute.component, components, savedComponent);
20
34
  const handleInitialisationClick = ()=>{
21
35
  const schema = components[attribute.component];
22
36
  const form = createDefaultForm(schema, components);
23
37
  const data = transformDocument(schema, components)(form);
24
38
  field.onChange(name, data);
25
39
  };
40
+ /**
41
+ * The copy replaces the component in place. It has no id, so the inputs holding server data for
42
+ * the replaced component (relations) drop it, see `RelationsField`.
43
+ */ const handleCopyComponent = ([componentData])=>{
44
+ insertCopy(componentData);
45
+ return true;
46
+ };
26
47
  return /*#__PURE__*/ jsxs(Field.Root, {
27
48
  error: field.error,
28
49
  required: required,
29
50
  children: [
30
51
  /*#__PURE__*/ jsxs(Flex, {
31
52
  justifyContent: "space-between",
53
+ alignItems: "center",
54
+ gap: 2,
32
55
  children: [
33
- /*#__PURE__*/ jsxs(Field.Label, {
34
- action: labelAction,
56
+ /*#__PURE__*/ jsxs(Flex, {
57
+ gap: 2,
35
58
  children: [
36
- label,
37
- attribute.repeatable && /*#__PURE__*/ jsxs(Fragment, {
59
+ /*#__PURE__*/ jsxs(Field.Label, {
60
+ action: labelAction,
38
61
  children: [
39
- " (",
40
- Array.isArray(field.value) ? field.value.length : 0,
41
- ")"
62
+ label,
63
+ attribute.repeatable && /*#__PURE__*/ jsxs(Fragment, {
64
+ children: [
65
+ " (",
66
+ Array.isArray(field.value) ? field.value.length : 0,
67
+ ")"
68
+ ]
69
+ })
42
70
  ]
71
+ }),
72
+ hasComponent && isCopied && /*#__PURE__*/ jsx(Badge, {
73
+ variant: "success",
74
+ size: "S",
75
+ children: formatMessage({
76
+ id: getTranslation('components.Component.copied'),
77
+ defaultMessage: 'Copied'
78
+ })
43
79
  })
44
80
  ]
45
81
  }),
46
- showResetComponent && /*#__PURE__*/ jsx(IconButton, {
47
- label: formatMessage({
48
- id: getTranslation('components.reset-entry'),
49
- defaultMessage: 'Reset Entry'
50
- }),
51
- variant: "ghost",
52
- onClick: ()=>{
53
- field.onChange(name, null);
54
- },
55
- children: /*#__PURE__*/ jsx(Trash, {})
82
+ showResetComponent && /*#__PURE__*/ jsxs(Flex, {
83
+ gap: 1,
84
+ children: [
85
+ canCopyFromExisting && /*#__PURE__*/ jsx(Button, {
86
+ variant: "ghost",
87
+ size: "S",
88
+ startIcon: /*#__PURE__*/ jsx(Duplicate, {}),
89
+ onClick: ()=>setIsCopyModalOpen(true),
90
+ children: hasContent ? formatMessage({
91
+ id: getTranslation('components.Component.replace-content'),
92
+ defaultMessage: 'Replace content…'
93
+ }) : formatMessage({
94
+ id: getTranslation('components.AddComponentMenu.copy'),
95
+ defaultMessage: 'Use existing content…'
96
+ })
97
+ }),
98
+ /*#__PURE__*/ jsx(IconButton, {
99
+ label: formatMessage({
100
+ id: getTranslation('components.reset-entry'),
101
+ defaultMessage: 'Reset Entry'
102
+ }),
103
+ variant: "ghost",
104
+ onClick: ()=>{
105
+ field.onChange(name, null);
106
+ },
107
+ children: /*#__PURE__*/ jsx(Trash, {})
108
+ })
109
+ ]
56
110
  })
57
111
  ]
58
112
  }),
59
113
  !attribute.repeatable && !field.value && /*#__PURE__*/ jsx(Initializer, {
60
114
  disabled: disabled,
61
115
  name: name,
62
- onClick: handleInitialisationClick
116
+ onClick: handleInitialisationClick,
117
+ onCopyClick: canCopyFromExisting ? ()=>setIsCopyModalOpen(true) : undefined
118
+ }),
119
+ !attribute.repeatable && isCopyModalOpen && /*#__PURE__*/ jsx(ComponentCopyModal, {
120
+ componentUid: attribute.component,
121
+ fieldLabel: label,
122
+ mode: "component",
123
+ onClose: ()=>setIsCopyModalOpen(false),
124
+ onInsert: handleCopyComponent,
125
+ replacesContent: hasContent,
126
+ selection: "single",
127
+ sourceFieldName: name
63
128
  }),
64
129
  !attribute.repeatable && field.value ? /*#__PURE__*/ jsx(MemoizedNonRepeatableComponent, {
65
130
  attribute: attribute,
@@ -70,6 +135,7 @@ const ComponentInput = ({ label, required, name, attribute, disabled, labelActio
70
135
  }) : null,
71
136
  attribute.repeatable && /*#__PURE__*/ jsx(MemoizedRepeatableComponent, {
72
137
  attribute: attribute,
138
+ label: label,
73
139
  name: name,
74
140
  disabled: disabled,
75
141
  ...props,
@@ -1 +1 @@
1
- {"version":3,"file":"Input.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/Component/Input.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { InputProps, useField } from '@strapi/admin/strapi-admin';\nimport { Field, Flex, IconButton } from '@strapi/design-system';\nimport { Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { EditFieldLayout } from '../../../../../hooks/useDocumentLayout';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { type AnyData, transformDocument } from '../../../utils/data';\nimport { createDefaultForm } from '../../../utils/forms';\nimport { type InputRendererProps } from '../../InputRenderer';\n\nimport { Initializer } from './Initializer';\nimport { NonRepeatableComponent } from './NonRepeatable';\nimport { RepeatableComponent } from './Repeatable';\n\ninterface ComponentInputProps\n extends\n Omit<Extract<EditFieldLayout, { type: 'component' }>, 'size' | 'hint'>,\n Pick<InputProps, 'hint'> {\n labelAction?: React.ReactNode;\n children: (props: InputRendererProps) => React.ReactNode;\n /**\n * We need layout to come from the props, and not via a hook, because Content History needs\n * a way to modify the normal component layout to add hidden fields.\n */\n layout: ReadonlyArray<ReadonlyArray<EditFieldLayout>>;\n}\n\nconst ComponentInput = ({\n label,\n required,\n name,\n attribute,\n disabled,\n labelAction,\n ...props\n}: ComponentInputProps) => {\n const { formatMessage } = useIntl();\n const field = useField<AnyData | AnyData[] | null>(name);\n\n const showResetComponent =\n !attribute.repeatable && field.value !== undefined && field.value !== null && !disabled;\n\n const {\n currentDocument: { components },\n } = useDocumentContext('ComponentInput');\n\n const handleInitialisationClick = () => {\n const schema = components[attribute.component];\n const form = createDefaultForm(schema, components);\n const data = transformDocument(schema, components)(form);\n\n field.onChange(name, data);\n };\n\n return (\n <Field.Root error={field.error} required={required}>\n <Flex justifyContent=\"space-between\">\n <Field.Label action={labelAction}>\n {label}\n {attribute.repeatable && (\n <>&nbsp;({Array.isArray(field.value) ? field.value.length : 0})</>\n )}\n </Field.Label>\n\n {showResetComponent && (\n <IconButton\n label={formatMessage({\n id: getTranslation('components.reset-entry'),\n defaultMessage: 'Reset Entry',\n })}\n variant=\"ghost\"\n onClick={() => {\n field.onChange(name, null);\n }}\n >\n <Trash />\n </IconButton>\n )}\n </Flex>\n {/**\n * if the field isn't repeatable then we display a button to start the field\n * TODO: should this just live in the `NonRepeatableComponent`?\n */}\n {!attribute.repeatable && !field.value && (\n <Initializer disabled={disabled} name={name} onClick={handleInitialisationClick} />\n )}\n {!attribute.repeatable && field.value ? (\n <NonRepeatableComponent attribute={attribute} name={name} disabled={disabled} {...props}>\n {props.children}\n </NonRepeatableComponent>\n ) : null}\n {attribute.repeatable && (\n <RepeatableComponent attribute={attribute} name={name} disabled={disabled} {...props}>\n {props.children}\n </RepeatableComponent>\n )}\n <Field.Error />\n </Field.Root>\n );\n};\n\nconst MemoizedComponentInput = React.memo(ComponentInput);\n\nexport { MemoizedComponentInput as ComponentInput };\nexport type { ComponentInputProps };\n"],"names":["ComponentInput","label","required","name","attribute","disabled","labelAction","props","formatMessage","useIntl","field","useField","showResetComponent","repeatable","value","undefined","currentDocument","components","useDocumentContext","handleInitialisationClick","schema","component","form","createDefaultForm","data","transformDocument","onChange","_jsxs","Field","Root","error","Flex","justifyContent","Label","action","_Fragment","Array","isArray","length","_jsx","IconButton","id","getTranslation","defaultMessage","variant","onClick","Trash","Initializer","NonRepeatableComponent","children","RepeatableComponent","Error","MemoizedComponentInput","React","memo"],"mappings":"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"}
1
+ {"version":3,"file":"Input.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/Component/Input.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { InputProps, useField, useForm } from '@strapi/admin/strapi-admin';\nimport { Badge, Button, Field, Flex, IconButton } from '@strapi/design-system';\nimport { Duplicate, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { COLLECTION_TYPES } from '../../../../../constants/collections';\nimport { useDocumentContext } from '../../../../../hooks/useDocumentContext';\nimport { EditFieldLayout } from '../../../../../hooks/useDocumentLayout';\nimport { getTranslation } from '../../../../../utils/translations';\nimport { type AnyData, transformDocument } from '../../../utils/data';\nimport { createDefaultForm } from '../../../utils/forms';\nimport { type InputRendererProps } from '../../InputRenderer';\n\nimport { ComponentCopyModal } from './ComponentCopyModal';\nimport { useCopiedComponent } from './CopiedComponents';\nimport { Initializer } from './Initializer';\nimport { NonRepeatableComponent } from './NonRepeatable';\nimport { RepeatableComponent } from './Repeatable';\nimport { getSavedComponent, isComponentBlank } from './utils/componentCopy';\n\ninterface ComponentInputProps\n extends\n Omit<Extract<EditFieldLayout, { type: 'component' }>, 'size' | 'hint'>,\n Pick<InputProps, 'hint'> {\n labelAction?: React.ReactNode;\n children: (props: InputRendererProps) => React.ReactNode;\n /**\n * We need layout to come from the props, and not via a hook, because Content History needs\n * a way to modify the normal component layout to add hidden fields.\n */\n layout: ReadonlyArray<ReadonlyArray<EditFieldLayout>>;\n}\n\nconst ComponentInput = ({\n label,\n required,\n name,\n attribute,\n disabled,\n labelAction,\n ...props\n}: ComponentInputProps) => {\n const { formatMessage } = useIntl();\n const field = useField<AnyData | AnyData[] | null>(name);\n const [isCopyModalOpen, setIsCopyModalOpen] = React.useState(false);\n const { isCopied, insertCopy } = useCopiedComponent(name);\n\n const {\n currentDocumentMeta,\n currentDocument: { components, document },\n } = useDocumentContext('ComponentInput');\n // A reference into the document: it only changes when the document is refetched\n const savedComponent = useForm('ComponentInput', (state) =>\n getSavedComponent(document, state.values, name)\n );\n const canCopyFromExisting = currentDocumentMeta.collectionType === COLLECTION_TYPES;\n\n const hasComponent = !attribute.repeatable && field.value !== undefined && field.value !== null;\n const showResetComponent = hasComponent && !disabled;\n /**\n * A component that was just added is blank: copying into it fills it. Once it holds content,\n * copying into it replaces that content and the user is warned.\n */\n const hasContent =\n hasComponent && !isComponentBlank(field.value, attribute.component, components, savedComponent);\n\n const handleInitialisationClick = () => {\n const schema = components[attribute.component];\n const form = createDefaultForm(schema, components);\n const data = transformDocument(schema, components)(form);\n\n field.onChange(name, data);\n };\n\n /**\n * The copy replaces the component in place. It has no id, so the inputs holding server data for\n * the replaced component (relations) drop it, see `RelationsField`.\n */\n const handleCopyComponent = ([componentData]: AnyData[]) => {\n insertCopy(componentData);\n\n return true;\n };\n\n return (\n <Field.Root error={field.error} required={required}>\n <Flex justifyContent=\"space-between\" alignItems=\"center\" gap={2}>\n <Flex gap={2}>\n <Field.Label action={labelAction}>\n {label}\n {attribute.repeatable && (\n <>&nbsp;({Array.isArray(field.value) ? field.value.length : 0})</>\n )}\n </Field.Label>\n {hasComponent && isCopied && (\n <Badge variant=\"success\" size=\"S\">\n {formatMessage({\n id: getTranslation('components.Component.copied'),\n defaultMessage: 'Copied',\n })}\n </Badge>\n )}\n </Flex>\n\n {showResetComponent && (\n <Flex gap={1}>\n {canCopyFromExisting && (\n <Button\n variant=\"ghost\"\n size=\"S\"\n startIcon={<Duplicate />}\n onClick={() => setIsCopyModalOpen(true)}\n >\n {hasContent\n ? formatMessage({\n id: getTranslation('components.Component.replace-content'),\n defaultMessage: 'Replace content…',\n })\n : formatMessage({\n id: getTranslation('components.AddComponentMenu.copy'),\n defaultMessage: 'Use existing content…',\n })}\n </Button>\n )}\n <IconButton\n label={formatMessage({\n id: getTranslation('components.reset-entry'),\n defaultMessage: 'Reset Entry',\n })}\n variant=\"ghost\"\n onClick={() => {\n field.onChange(name, null);\n }}\n >\n <Trash />\n </IconButton>\n </Flex>\n )}\n </Flex>\n {/**\n * if the field isn't repeatable then we display a button to start the field\n * TODO: should this just live in the `NonRepeatableComponent`?\n */}\n {!attribute.repeatable && !field.value && (\n <Initializer\n disabled={disabled}\n name={name}\n onClick={handleInitialisationClick}\n onCopyClick={canCopyFromExisting ? () => setIsCopyModalOpen(true) : undefined}\n />\n )}\n {!attribute.repeatable && isCopyModalOpen && (\n <ComponentCopyModal\n componentUid={attribute.component}\n fieldLabel={label}\n mode=\"component\"\n onClose={() => setIsCopyModalOpen(false)}\n onInsert={handleCopyComponent}\n replacesContent={hasContent}\n selection=\"single\"\n sourceFieldName={name}\n />\n )}\n {!attribute.repeatable && field.value ? (\n <NonRepeatableComponent attribute={attribute} name={name} disabled={disabled} {...props}>\n {props.children}\n </NonRepeatableComponent>\n ) : null}\n {attribute.repeatable && (\n <RepeatableComponent\n attribute={attribute}\n label={label}\n name={name}\n disabled={disabled}\n {...props}\n >\n {props.children}\n </RepeatableComponent>\n )}\n <Field.Error />\n </Field.Root>\n );\n};\n\nconst MemoizedComponentInput = React.memo(ComponentInput);\n\nexport { MemoizedComponentInput as ComponentInput };\nexport type { ComponentInputProps };\n"],"names":["ComponentInput","label","required","name","attribute","disabled","labelAction","props","formatMessage","useIntl","field","useField","isCopyModalOpen","setIsCopyModalOpen","React","useState","isCopied","insertCopy","useCopiedComponent","currentDocumentMeta","currentDocument","components","document","useDocumentContext","savedComponent","useForm","state","getSavedComponent","values","canCopyFromExisting","collectionType","COLLECTION_TYPES","hasComponent","repeatable","value","undefined","showResetComponent","hasContent","isComponentBlank","component","handleInitialisationClick","schema","form","createDefaultForm","data","transformDocument","onChange","handleCopyComponent","componentData","_jsxs","Field","Root","error","Flex","justifyContent","alignItems","gap","Label","action","_Fragment","Array","isArray","length","_jsx","Badge","variant","size","id","getTranslation","defaultMessage","Button","startIcon","Duplicate","onClick","IconButton","Trash","Initializer","onCopyClick","ComponentCopyModal","componentUid","fieldLabel","mode","onClose","onInsert","replacesContent","selection","sourceFieldName","NonRepeatableComponent","children","RepeatableComponent","Error","MemoizedComponentInput","memo"],"mappings":"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"}
@@ -29,7 +29,7 @@ function _interopNamespace(e) {
29
29
 
30
30
  var React__namespace = /*#__PURE__*/_interopNamespace(React);
31
31
 
32
- const NonRepeatableComponent = ({ attribute, name, children, layout })=>{
32
+ const NonRepeatableComponent = ({ attribute, name, children, layout, disabled })=>{
33
33
  const componentId = strapiAdmin.useForm('NonRepeatableComponent', (state)=>objects.getIn(state.values, `${name}.id`));
34
34
  const level = ComponentContext.useComponent('NonRepeatableComponent', (state)=>state.level);
35
35
  const isNested = level > 0;
@@ -51,12 +51,13 @@ const NonRepeatableComponent = ({ attribute, name, children, layout })=>{
51
51
  attribute: attribute,
52
52
  name: name,
53
53
  layout: layout,
54
+ disabled: disabled,
54
55
  children: children
55
56
  })
56
57
  })
57
58
  });
58
59
  };
59
- const NonRepeatableComponentFields = /*#__PURE__*/ React__namespace.memo(({ attribute, children, layout, name })=>{
60
+ const NonRepeatableComponentFields = /*#__PURE__*/ React__namespace.memo(({ attribute, children, layout, name, disabled })=>{
60
61
  const { formatMessage } = reactIntl.useIntl();
61
62
  return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
62
63
  direction: "column",
@@ -87,6 +88,8 @@ const NonRepeatableComponentFields = /*#__PURE__*/ React__namespace.memo(({ attr
87
88
  alignItems: "stretch",
88
89
  children: children({
89
90
  ...field,
91
+ // Inherit parent disable (e.g. locked non-localized component on a secondary locale)
92
+ disabled: field.disabled || disabled,
90
93
  size,
91
94
  label: translatedLabel,
92
95
  name: completeFieldName
@@ -1 +1 @@
1
- {"version":3,"file":"NonRepeatable.js","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/Component/NonRepeatable.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useForm, useIsMobile } from '@strapi/admin/strapi-admin';\nimport { Box, Flex } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { getIn } from '../../../../../utils/objects';\nimport { ResponsiveGridItem, ResponsiveGridRoot } from '../../FormLayout';\nimport { ComponentProvider, useComponent } from '../ComponentContext';\n\nimport type { ComponentInputProps } from './Input';\n\ntype NonRepeatableComponentProps = Omit<ComponentInputProps, 'required' | 'label'>;\n\nconst NonRepeatableComponent = ({\n attribute,\n name,\n children,\n layout,\n}: NonRepeatableComponentProps) => {\n const componentId = useForm(\n 'NonRepeatableComponent',\n (state) => getIn(state.values, `${name}.id`) as number | undefined\n );\n const level = useComponent('NonRepeatableComponent', (state) => state.level);\n const isNested = level > 0;\n const isMobile = useIsMobile();\n\n return (\n <ComponentProvider\n id={componentId}\n uid={attribute.component}\n level={level + 1}\n type=\"component\"\n >\n <Box\n background={'neutral100'}\n padding={{ initial: 4, medium: 6 }}\n hasRadius={isNested}\n borderColor={isNested || isMobile ? 'neutral200' : undefined}\n >\n <NonRepeatableComponentFields attribute={attribute} name={name} layout={layout}>\n {children}\n </NonRepeatableComponentFields>\n </Box>\n </ComponentProvider>\n );\n};\n\ninterface NonRepeatableComponentFieldsProps extends Pick<\n NonRepeatableComponentProps,\n 'attribute' | 'children' | 'layout' | 'name'\n> {}\n\nconst NonRepeatableComponentFields = React.memo(\n ({ attribute, children, layout, name }: NonRepeatableComponentFieldsProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {layout.map((row) => {\n return (\n <ResponsiveGridRoot\n gap={{ initial: 3, medium: 4 }}\n key={row.map((field) => field.name).join('.')}\n >\n {row.map(({ size, ...field }) => {\n /**\n * Layouts are built from schemas so they don't understand the complete\n * schema tree, for components we append the parent name to the field name\n * because this is the structure for the data & permissions also understand\n * the nesting involved.\n */\n const completeFieldName = `${name}.${field.name}`;\n\n const translatedLabel = formatMessage({\n id: `content-manager.components.${attribute.component}.${field.name}`,\n defaultMessage: field.label,\n });\n\n return (\n <ResponsiveGridItem\n col={size}\n key={completeFieldName}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n {children({\n ...field,\n size,\n label: translatedLabel,\n name: completeFieldName,\n })}\n </ResponsiveGridItem>\n );\n })}\n </ResponsiveGridRoot>\n );\n })}\n </Flex>\n );\n }\n);\n\nNonRepeatableComponentFields.displayName = 'NonRepeatableComponentFields';\n\nconst MemoizedNonRepeatableComponent = React.memo(NonRepeatableComponent);\n\nexport { MemoizedNonRepeatableComponent as NonRepeatableComponent };\nexport type { NonRepeatableComponentProps };\n"],"names":["NonRepeatableComponent","attribute","name","children","layout","componentId","useForm","state","getIn","values","level","useComponent","isNested","isMobile","useIsMobile","_jsx","ComponentProvider","id","uid","component","type","Box","background","padding","initial","medium","hasRadius","borderColor","undefined","NonRepeatableComponentFields","React","memo","formatMessage","useIntl","Flex","direction","alignItems","gap","map","row","ResponsiveGridRoot","size","field","completeFieldName","translatedLabel","defaultMessage","label","ResponsiveGridItem","col","s","xs","join","displayName","MemoizedNonRepeatableComponent"],"mappings":"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"}
1
+ {"version":3,"file":"NonRepeatable.js","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/Component/NonRepeatable.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useForm, useIsMobile } from '@strapi/admin/strapi-admin';\nimport { Box, Flex } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { getIn } from '../../../../../utils/objects';\nimport { ResponsiveGridItem, ResponsiveGridRoot } from '../../FormLayout';\nimport { ComponentProvider, useComponent } from '../ComponentContext';\n\nimport type { ComponentInputProps } from './Input';\n\ntype NonRepeatableComponentProps = Omit<ComponentInputProps, 'required' | 'label'>;\n\nconst NonRepeatableComponent = ({\n attribute,\n name,\n children,\n layout,\n disabled,\n}: NonRepeatableComponentProps) => {\n const componentId = useForm(\n 'NonRepeatableComponent',\n (state) => getIn(state.values, `${name}.id`) as number | undefined\n );\n const level = useComponent('NonRepeatableComponent', (state) => state.level);\n const isNested = level > 0;\n const isMobile = useIsMobile();\n\n return (\n <ComponentProvider\n id={componentId}\n uid={attribute.component}\n level={level + 1}\n type=\"component\"\n >\n <Box\n background={'neutral100'}\n padding={{ initial: 4, medium: 6 }}\n hasRadius={isNested}\n borderColor={isNested || isMobile ? 'neutral200' : undefined}\n >\n <NonRepeatableComponentFields\n attribute={attribute}\n name={name}\n layout={layout}\n disabled={disabled}\n >\n {children}\n </NonRepeatableComponentFields>\n </Box>\n </ComponentProvider>\n );\n};\n\ninterface NonRepeatableComponentFieldsProps extends Pick<\n NonRepeatableComponentProps,\n 'attribute' | 'children' | 'layout' | 'name' | 'disabled'\n> {}\n\nconst NonRepeatableComponentFields = React.memo(\n ({ attribute, children, layout, name, disabled }: NonRepeatableComponentFieldsProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {layout.map((row) => {\n return (\n <ResponsiveGridRoot\n gap={{ initial: 3, medium: 4 }}\n key={row.map((field) => field.name).join('.')}\n >\n {row.map(({ size, ...field }) => {\n /**\n * Layouts are built from schemas so they don't understand the complete\n * schema tree, for components we append the parent name to the field name\n * because this is the structure for the data & permissions also understand\n * the nesting involved.\n */\n const completeFieldName = `${name}.${field.name}`;\n\n const translatedLabel = formatMessage({\n id: `content-manager.components.${attribute.component}.${field.name}`,\n defaultMessage: field.label,\n });\n\n return (\n <ResponsiveGridItem\n col={size}\n key={completeFieldName}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n {children({\n ...field,\n // Inherit parent disable (e.g. locked non-localized component on a secondary locale)\n disabled: field.disabled || disabled,\n size,\n label: translatedLabel,\n name: completeFieldName,\n })}\n </ResponsiveGridItem>\n );\n })}\n </ResponsiveGridRoot>\n );\n })}\n </Flex>\n );\n }\n);\n\nNonRepeatableComponentFields.displayName = 'NonRepeatableComponentFields';\n\nconst MemoizedNonRepeatableComponent = React.memo(NonRepeatableComponent);\n\nexport { MemoizedNonRepeatableComponent as NonRepeatableComponent };\nexport type { NonRepeatableComponentProps };\n"],"names":["NonRepeatableComponent","attribute","name","children","layout","disabled","componentId","useForm","state","getIn","values","level","useComponent","isNested","isMobile","useIsMobile","_jsx","ComponentProvider","id","uid","component","type","Box","background","padding","initial","medium","hasRadius","borderColor","undefined","NonRepeatableComponentFields","React","memo","formatMessage","useIntl","Flex","direction","alignItems","gap","map","row","ResponsiveGridRoot","size","field","completeFieldName","translatedLabel","defaultMessage","label","ResponsiveGridItem","col","s","xs","join","displayName","MemoizedNonRepeatableComponent"],"mappings":"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"}
@@ -7,7 +7,7 @@ import { getIn } from '../../../../../utils/objects.mjs';
7
7
  import { ResponsiveGridRoot, ResponsiveGridItem } from '../../FormLayout.mjs';
8
8
  import { useComponent, ComponentProvider } from '../ComponentContext.mjs';
9
9
 
10
- const NonRepeatableComponent = ({ attribute, name, children, layout })=>{
10
+ const NonRepeatableComponent = ({ attribute, name, children, layout, disabled })=>{
11
11
  const componentId = useForm('NonRepeatableComponent', (state)=>getIn(state.values, `${name}.id`));
12
12
  const level = useComponent('NonRepeatableComponent', (state)=>state.level);
13
13
  const isNested = level > 0;
@@ -29,12 +29,13 @@ const NonRepeatableComponent = ({ attribute, name, children, layout })=>{
29
29
  attribute: attribute,
30
30
  name: name,
31
31
  layout: layout,
32
+ disabled: disabled,
32
33
  children: children
33
34
  })
34
35
  })
35
36
  });
36
37
  };
37
- const NonRepeatableComponentFields = /*#__PURE__*/ React.memo(({ attribute, children, layout, name })=>{
38
+ const NonRepeatableComponentFields = /*#__PURE__*/ React.memo(({ attribute, children, layout, name, disabled })=>{
38
39
  const { formatMessage } = useIntl();
39
40
  return /*#__PURE__*/ jsx(Flex, {
40
41
  direction: "column",
@@ -65,6 +66,8 @@ const NonRepeatableComponentFields = /*#__PURE__*/ React.memo(({ attribute, chil
65
66
  alignItems: "stretch",
66
67
  children: children({
67
68
  ...field,
69
+ // Inherit parent disable (e.g. locked non-localized component on a secondary locale)
70
+ disabled: field.disabled || disabled,
68
71
  size,
69
72
  label: translatedLabel,
70
73
  name: completeFieldName
@@ -1 +1 @@
1
- {"version":3,"file":"NonRepeatable.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/Component/NonRepeatable.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useForm, useIsMobile } from '@strapi/admin/strapi-admin';\nimport { Box, Flex } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { getIn } from '../../../../../utils/objects';\nimport { ResponsiveGridItem, ResponsiveGridRoot } from '../../FormLayout';\nimport { ComponentProvider, useComponent } from '../ComponentContext';\n\nimport type { ComponentInputProps } from './Input';\n\ntype NonRepeatableComponentProps = Omit<ComponentInputProps, 'required' | 'label'>;\n\nconst NonRepeatableComponent = ({\n attribute,\n name,\n children,\n layout,\n}: NonRepeatableComponentProps) => {\n const componentId = useForm(\n 'NonRepeatableComponent',\n (state) => getIn(state.values, `${name}.id`) as number | undefined\n );\n const level = useComponent('NonRepeatableComponent', (state) => state.level);\n const isNested = level > 0;\n const isMobile = useIsMobile();\n\n return (\n <ComponentProvider\n id={componentId}\n uid={attribute.component}\n level={level + 1}\n type=\"component\"\n >\n <Box\n background={'neutral100'}\n padding={{ initial: 4, medium: 6 }}\n hasRadius={isNested}\n borderColor={isNested || isMobile ? 'neutral200' : undefined}\n >\n <NonRepeatableComponentFields attribute={attribute} name={name} layout={layout}>\n {children}\n </NonRepeatableComponentFields>\n </Box>\n </ComponentProvider>\n );\n};\n\ninterface NonRepeatableComponentFieldsProps extends Pick<\n NonRepeatableComponentProps,\n 'attribute' | 'children' | 'layout' | 'name'\n> {}\n\nconst NonRepeatableComponentFields = React.memo(\n ({ attribute, children, layout, name }: NonRepeatableComponentFieldsProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {layout.map((row) => {\n return (\n <ResponsiveGridRoot\n gap={{ initial: 3, medium: 4 }}\n key={row.map((field) => field.name).join('.')}\n >\n {row.map(({ size, ...field }) => {\n /**\n * Layouts are built from schemas so they don't understand the complete\n * schema tree, for components we append the parent name to the field name\n * because this is the structure for the data & permissions also understand\n * the nesting involved.\n */\n const completeFieldName = `${name}.${field.name}`;\n\n const translatedLabel = formatMessage({\n id: `content-manager.components.${attribute.component}.${field.name}`,\n defaultMessage: field.label,\n });\n\n return (\n <ResponsiveGridItem\n col={size}\n key={completeFieldName}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n {children({\n ...field,\n size,\n label: translatedLabel,\n name: completeFieldName,\n })}\n </ResponsiveGridItem>\n );\n })}\n </ResponsiveGridRoot>\n );\n })}\n </Flex>\n );\n }\n);\n\nNonRepeatableComponentFields.displayName = 'NonRepeatableComponentFields';\n\nconst MemoizedNonRepeatableComponent = React.memo(NonRepeatableComponent);\n\nexport { MemoizedNonRepeatableComponent as NonRepeatableComponent };\nexport type { NonRepeatableComponentProps };\n"],"names":["NonRepeatableComponent","attribute","name","children","layout","componentId","useForm","state","getIn","values","level","useComponent","isNested","isMobile","useIsMobile","_jsx","ComponentProvider","id","uid","component","type","Box","background","padding","initial","medium","hasRadius","borderColor","undefined","NonRepeatableComponentFields","React","memo","formatMessage","useIntl","Flex","direction","alignItems","gap","map","row","ResponsiveGridRoot","size","field","completeFieldName","translatedLabel","defaultMessage","label","ResponsiveGridItem","col","s","xs","join","displayName","MemoizedNonRepeatableComponent"],"mappings":"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"}
1
+ {"version":3,"file":"NonRepeatable.mjs","sources":["../../../../../../../admin/src/pages/EditView/components/FormInputs/Component/NonRepeatable.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useForm, useIsMobile } from '@strapi/admin/strapi-admin';\nimport { Box, Flex } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { getIn } from '../../../../../utils/objects';\nimport { ResponsiveGridItem, ResponsiveGridRoot } from '../../FormLayout';\nimport { ComponentProvider, useComponent } from '../ComponentContext';\n\nimport type { ComponentInputProps } from './Input';\n\ntype NonRepeatableComponentProps = Omit<ComponentInputProps, 'required' | 'label'>;\n\nconst NonRepeatableComponent = ({\n attribute,\n name,\n children,\n layout,\n disabled,\n}: NonRepeatableComponentProps) => {\n const componentId = useForm(\n 'NonRepeatableComponent',\n (state) => getIn(state.values, `${name}.id`) as number | undefined\n );\n const level = useComponent('NonRepeatableComponent', (state) => state.level);\n const isNested = level > 0;\n const isMobile = useIsMobile();\n\n return (\n <ComponentProvider\n id={componentId}\n uid={attribute.component}\n level={level + 1}\n type=\"component\"\n >\n <Box\n background={'neutral100'}\n padding={{ initial: 4, medium: 6 }}\n hasRadius={isNested}\n borderColor={isNested || isMobile ? 'neutral200' : undefined}\n >\n <NonRepeatableComponentFields\n attribute={attribute}\n name={name}\n layout={layout}\n disabled={disabled}\n >\n {children}\n </NonRepeatableComponentFields>\n </Box>\n </ComponentProvider>\n );\n};\n\ninterface NonRepeatableComponentFieldsProps extends Pick<\n NonRepeatableComponentProps,\n 'attribute' | 'children' | 'layout' | 'name' | 'disabled'\n> {}\n\nconst NonRepeatableComponentFields = React.memo(\n ({ attribute, children, layout, name, disabled }: NonRepeatableComponentFieldsProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {layout.map((row) => {\n return (\n <ResponsiveGridRoot\n gap={{ initial: 3, medium: 4 }}\n key={row.map((field) => field.name).join('.')}\n >\n {row.map(({ size, ...field }) => {\n /**\n * Layouts are built from schemas so they don't understand the complete\n * schema tree, for components we append the parent name to the field name\n * because this is the structure for the data & permissions also understand\n * the nesting involved.\n */\n const completeFieldName = `${name}.${field.name}`;\n\n const translatedLabel = formatMessage({\n id: `content-manager.components.${attribute.component}.${field.name}`,\n defaultMessage: field.label,\n });\n\n return (\n <ResponsiveGridItem\n col={size}\n key={completeFieldName}\n s={12}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n {children({\n ...field,\n // Inherit parent disable (e.g. locked non-localized component on a secondary locale)\n disabled: field.disabled || disabled,\n size,\n label: translatedLabel,\n name: completeFieldName,\n })}\n </ResponsiveGridItem>\n );\n })}\n </ResponsiveGridRoot>\n );\n })}\n </Flex>\n );\n }\n);\n\nNonRepeatableComponentFields.displayName = 'NonRepeatableComponentFields';\n\nconst MemoizedNonRepeatableComponent = React.memo(NonRepeatableComponent);\n\nexport { MemoizedNonRepeatableComponent as NonRepeatableComponent };\nexport type { NonRepeatableComponentProps };\n"],"names":["NonRepeatableComponent","attribute","name","children","layout","disabled","componentId","useForm","state","getIn","values","level","useComponent","isNested","isMobile","useIsMobile","_jsx","ComponentProvider","id","uid","component","type","Box","background","padding","initial","medium","hasRadius","borderColor","undefined","NonRepeatableComponentFields","React","memo","formatMessage","useIntl","Flex","direction","alignItems","gap","map","row","ResponsiveGridRoot","size","field","completeFieldName","translatedLabel","defaultMessage","label","ResponsiveGridItem","col","s","xs","join","displayName","MemoizedNonRepeatableComponent"],"mappings":";;;;;;;;;AAcA,MAAMA,sBAAAA,GAAyB,CAAC,EAC9BC,SAAS,EACTC,IAAI,EACJC,QAAQ,EACRC,MAAM,EACNC,QAAQ,EACoB,GAAA;AAC5B,IAAA,MAAMC,WAAAA,GAAcC,OAAAA,CAClB,wBAAA,EACA,CAACC,KAAAA,GAAUC,KAAAA,CAAMD,KAAAA,CAAME,MAAM,EAAE,CAAA,EAAGR,IAAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAE7C,IAAA,MAAMS,QAAQC,YAAAA,CAAa,wBAAA,EAA0B,CAACJ,KAAAA,GAAUA,MAAMG,KAAK,CAAA;AAC3E,IAAA,MAAME,WAAWF,KAAAA,GAAQ,CAAA;AACzB,IAAA,MAAMG,QAAAA,GAAWC,WAAAA,EAAAA;AAEjB,IAAA,qBACEC,GAAA,CAACC,iBAAAA,EAAAA;QACCC,EAAAA,EAAIZ,WAAAA;AACJa,QAAAA,GAAAA,EAAKlB,UAAUmB,SAAS;AACxBT,QAAAA,KAAAA,EAAOA,KAAAA,GAAQ,CAAA;QACfU,IAAAA,EAAK,WAAA;AAEL,QAAA,QAAA,gBAAAL,GAAA,CAACM,GAAAA,EAAAA;YACCC,UAAAA,EAAY,YAAA;YACZC,OAAAA,EAAS;gBAAEC,OAAAA,EAAS,CAAA;gBAAGC,MAAAA,EAAQ;AAAE,aAAA;YACjCC,SAAAA,EAAWd,QAAAA;YACXe,WAAAA,EAAaf,QAAAA,IAAYC,WAAW,YAAA,GAAee,SAAAA;AAEnD,YAAA,QAAA,gBAAAb,GAAA,CAACc,4BAAAA,EAAAA;gBACC7B,SAAAA,EAAWA,SAAAA;gBACXC,IAAAA,EAAMA,IAAAA;gBACNE,MAAAA,EAAQA,MAAAA;gBACRC,QAAAA,EAAUA,QAAAA;AAETF,gBAAAA,QAAAA,EAAAA;;;;AAKX,CAAA;AAOA,MAAM2B,4BAAAA,iBAA+BC,KAAAA,CAAMC,IAAI,CAC7C,CAAC,EAAE/B,SAAS,EAAEE,QAAQ,EAAEC,MAAM,EAAEF,IAAI,EAAEG,QAAQ,EAAqC,GAAA;IACjF,MAAM,EAAE4B,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAE1B,IAAA,qBACElB,GAAA,CAACmB,IAAAA,EAAAA;QAAKC,SAAAA,EAAU,QAAA;QAASC,UAAAA,EAAW,SAAA;QAAUC,GAAAA,EAAK,CAAA;kBAChDlC,MAAAA,CAAOmC,GAAG,CAAC,CAACC,GAAAA,GAAAA;AACX,YAAA,qBACExB,GAAA,CAACyB,kBAAAA,EAAAA;gBACCH,GAAAA,EAAK;oBAAEb,OAAAA,EAAS,CAAA;oBAAGC,MAAAA,EAAQ;AAAE,iBAAA;AAG5Bc,gBAAAA,QAAAA,EAAAA,GAAAA,CAAID,GAAG,CAAC,CAAC,EAAEG,IAAI,EAAE,GAAGC,KAAAA,EAAO,GAAA;AAC1B;;;;;oBAMA,MAAMC,oBAAoB,CAAA,EAAG1C,IAAAA,CAAK,CAAC,EAAEyC,KAAAA,CAAMzC,IAAI,CAAA,CAAE;AAEjD,oBAAA,MAAM2C,kBAAkBZ,aAAAA,CAAc;wBACpCf,EAAAA,EAAI,CAAC,2BAA2B,EAAEjB,SAAAA,CAAUmB,SAAS,CAAC,CAAC,EAAEuB,KAAAA,CAAMzC,IAAI,CAAA,CAAE;AACrE4C,wBAAAA,cAAAA,EAAgBH,MAAMI;AACxB,qBAAA,CAAA;AAEA,oBAAA,qBACE/B,GAAA,CAACgC,kBAAAA,EAAAA;wBACCC,GAAAA,EAAKP,IAAAA;wBAELQ,CAAAA,EAAG,EAAA;wBACHC,EAAAA,EAAI,EAAA;wBACJf,SAAAA,EAAU,QAAA;wBACVC,UAAAA,EAAW,SAAA;kCAEVlC,QAAAA,CAAS;AACR,4BAAA,GAAGwC,KAAK;;4BAERtC,QAAAA,EAAUsC,KAAAA,CAAMtC,QAAQ,IAAIA,QAAAA;AAC5BqC,4BAAAA,IAAAA;4BACAK,KAAAA,EAAOF,eAAAA;4BACP3C,IAAAA,EAAM0C;AACR,yBAAA;AAbKA,qBAAAA,EAAAA,iBAAAA,CAAAA;AAgBX,gBAAA,CAAA;eAnCKJ,GAAAA,CAAID,GAAG,CAAC,CAACI,KAAAA,GAAUA,MAAMzC,IAAI,CAAA,CAAEkD,IAAI,CAAC,GAAA,CAAA,CAAA;AAsC/C,QAAA,CAAA;;AAGN,CAAA,CAAA;AAGFtB,4BAAAA,CAA6BuB,WAAW,GAAG,8BAAA;AAE3C,MAAMC,8BAAAA,iBAAiCvB,KAAAA,CAAMC,IAAI,CAAChC,sBAAAA;;;;"}