@strapi/content-manager 5.61.0 → 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 +1 @@
1
- {"version":3,"file":"Filters.mjs","sources":["../../../../../admin/src/pages/ListView/components/Filters.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Filters,\n useField,\n useAuth,\n useTracking,\n useQueryParams,\n useAdminUsers,\n useStrapiApp,\n} from '@strapi/admin/strapi-admin';\nimport { Combobox, ComboboxOption, useCollator } from '@strapi/design-system';\nimport { type MessageDescriptor, useIntl } from 'react-intl';\n\nimport { CREATOR_FIELDS } from '../../../constants/attributes';\nimport { HOOKS } from '../../../constants/hooks';\nimport { useContentTypeSchema } from '../../../hooks/useContentTypeSchema';\nimport { useDebounce } from '../../../hooks/useDebounce';\nimport { Schema } from '../../../hooks/useDocument';\nimport { getMainField } from '../../../utils/attributes';\nimport { getTranslation } from '../../../utils/translations';\nimport { getDisplayName } from '../../../utils/users';\n\nimport type { InjectableListViewFilter } from '../../../constants/hooks';\nimport type { ListLayout } from '../../../hooks/useDocumentLayout';\n\nconst { INJECT_LIST_VIEW_FILTERS } = HOOKS;\n\n/**\n * If new attributes are added, this list needs to be updated.\n */\nconst NOT_ALLOWED_FILTERS = new Set([\n 'json',\n 'component',\n 'media',\n 'richtext',\n 'dynamiczone',\n 'password',\n 'blocks',\n]);\nconst DEFAULT_ALLOWED_FILTERS = ['createdAt', 'updatedAt'];\nconst USER_FILTER_ATTRIBUTES = new Set([...CREATOR_FIELDS, 'strapi_assignee']);\n\n/* -------------------------------------------------------------------------------------------------\n * Filters\n * -----------------------------------------------------------------------------------------------*/\ninterface FiltersProps {\n disabled?: boolean;\n schema: Schema;\n layout: ListLayout;\n children: React.ReactNode;\n}\n\nconst Root = ({ disabled, schema, layout, children }: FiltersProps) => {\n const { attributes, uid: model, options } = schema;\n const { formatMessage, locale } = useIntl();\n const { trackUsage } = useTracking();\n const allPermissions = useAuth('FiltersImpl', (state) => state.permissions);\n const [{ query }] = useQueryParams<Filters.Query>();\n const { schemas } = useContentTypeSchema();\n const runHookWaterfall = useStrapiApp('FiltersImpl', ({ runHookWaterfall }) => runHookWaterfall);\n\n const canReadAdminUsers = React.useMemo(\n () =>\n allPermissions.filter(\n (permission) => permission.action === 'admin::users.read' && permission.subject === null\n ).length > 0,\n [allPermissions]\n );\n\n const selectedUserIds = (query?.filters?.$and ?? []).reduce<string[]>((acc, filter) => {\n const [key, value] = Object.entries(filter)[0];\n if (typeof value.id !== 'object') {\n return acc;\n }\n\n const id = value.id.$eq || value.id.$ne;\n\n // Check if the attribute is a relation to admin::user\n const attribute = attributes[key];\n const isAdminUserRelation =\n attribute?.type === 'relation' && 'target' in attribute && attribute.target === 'admin::user';\n\n if (id && (isAdminUserRelation || USER_FILTER_ATTRIBUTES.has(key)) && !acc.includes(id)) {\n acc.push(id);\n }\n\n return acc;\n }, []);\n\n const { data: userData } = useAdminUsers(\n { filters: { id: { $in: selectedUserIds } } },\n {\n // fetch the list of admin users only if the filter contains users and the\n // current user has permissions to display users\n skip: selectedUserIds.length === 0 || !canReadAdminUsers,\n }\n );\n\n const { users = [] } = userData ?? {};\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const displayedFilters = React.useMemo(() => {\n // An absent read permission for this model yields no filterable fields.\n // The empty object lets the defaults below apply instead of throwing.\n const { properties: { fields = [] } = { fields: [] } } =\n allPermissions.find(\n (permission) =>\n permission.action === 'plugin::content-manager.explorer.read' &&\n permission.subject === model\n ) ?? {};\n\n const allowedFields = fields.filter((field) => {\n const attribute = attributes[field] ?? {};\n\n return attribute.type && !NOT_ALLOWED_FILTERS.has(attribute.type);\n });\n\n const baseFilters = [\n 'id',\n 'documentId',\n ...allowedFields,\n ...DEFAULT_ALLOWED_FILTERS,\n ...(canReadAdminUsers ? CREATOR_FIELDS : []),\n ...(options?.draftAndPublish === true ? ['__status'] : []),\n ]\n .map((name) => {\n if (name === '__status') {\n return {\n name: '__status',\n type: 'enumeration',\n label: formatMessage({\n id: getTranslation('containers.list.filters.status'),\n defaultMessage: 'Status',\n }),\n operators: [\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n }),\n value: '$eq',\n },\n ],\n options: [\n {\n label: formatMessage({\n id: getTranslation('containers.List.statusFilter.draft'),\n defaultMessage: 'Draft (never published)',\n }),\n value: 'draft',\n },\n {\n label: formatMessage({\n id: getTranslation('containers.List.statusFilter.published'),\n defaultMessage: 'Published (all)',\n }),\n value: 'published',\n },\n {\n label: formatMessage({\n id: getTranslation('containers.List.statusFilter.publishedModified'),\n defaultMessage: 'Published (modified)',\n }),\n value: 'published-modified',\n },\n {\n label: formatMessage({\n id: getTranslation('containers.List.statusFilter.publishedUnmodified'),\n defaultMessage: 'Published (unmodified)',\n }),\n value: 'published-unmodified',\n },\n ],\n } satisfies Filters.Filter;\n }\n\n const attribute = attributes[name];\n\n if (!attribute || NOT_ALLOWED_FILTERS.has(attribute.type)) {\n return null;\n }\n\n const fieldMetadata = layout.metadatas?.[name];\n if (!fieldMetadata) {\n return null;\n }\n\n const { mainField: mainFieldName = '', label } = fieldMetadata;\n\n let filter: Filters.Filter = {\n name,\n label: label ?? '',\n mainField: getMainField(attribute, mainFieldName, { schemas, components: {} }),\n type: attribute.type as Filters.Filter['type'],\n };\n\n if (\n attribute.type === 'relation' &&\n 'target' in attribute &&\n attribute.target === 'admin::user'\n ) {\n filter = {\n ...filter,\n input: AdminUsersFilter,\n options: users.map((user) => ({\n label: getDisplayName(user),\n value: user.id.toString(),\n })),\n operators: [\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n }),\n value: '$eq',\n },\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$ne',\n defaultMessage: 'is not',\n }),\n value: '$ne',\n },\n ],\n mainField: {\n name: 'id',\n type: 'integer',\n },\n };\n }\n\n if (attribute.type === 'enumeration') {\n filter = {\n ...filter,\n options: attribute.enum.map((value) => ({\n label: formatMessage({ id: value, defaultMessage: value }),\n value,\n })),\n };\n }\n\n return filter;\n })\n .filter(Boolean) as Filters.Filter[];\n\n // Let plugins inject their own filters.\n // `layout.options` is a merge of schema/pluginOptions/contentType options —\n // mirrors the column-injection hook contract.\n const { displayedFilters: extendedFilters } = runHookWaterfall(INJECT_LIST_VIEW_FILTERS, {\n displayedFilters: baseFilters as InjectableListViewFilter[],\n layout,\n });\n\n const resolveLabel = (label: string | MessageDescriptor): string =>\n typeof label === 'string' ? label : formatMessage(label);\n\n const userOptions = users.map((user) => ({\n label: getDisplayName(user),\n value: user.id.toString(),\n }));\n\n const formatted = extendedFilters.map<Filters.Filter>((filter) => {\n const next: Filters.Filter = {\n ...filter,\n label: resolveLabel(filter.label),\n operators: filter.operators?.map((op) => ({ ...op, label: resolveLabel(op.label) })),\n };\n\n // User-typed filters need user options so the chip can render the display name instead of the id.\n if (USER_FILTER_ATTRIBUTES.has(filter.name) && !next.options?.length) {\n next.options = userOptions;\n }\n\n return next;\n });\n\n return formatted.toSorted((a, b) => formatter.compare(a.label, b.label));\n }, [\n allPermissions,\n canReadAdminUsers,\n model,\n attributes,\n schemas,\n layout,\n users,\n formatMessage,\n formatter,\n options?.draftAndPublish,\n runHookWaterfall,\n ]);\n\n const onOpenChange = (isOpen: boolean) => {\n if (isOpen) {\n trackUsage('willFilterEntries');\n }\n };\n\n const handleFilterChange: Filters.Props['onChange'] = (data) => {\n const attribute = attributes[data.name];\n\n if (attribute) {\n trackUsage('didFilterEntries', {\n useRelation: attribute.type === 'relation',\n });\n }\n };\n\n return (\n <Filters.Root\n disabled={disabled}\n options={displayedFilters}\n onOpenChange={onOpenChange}\n onChange={handleFilterChange}\n >\n {children}\n </Filters.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AdminUsersFilter\n * -----------------------------------------------------------------------------------------------*/\n\nconst AdminUsersFilter = ({ name }: Filters.ValueInputProps) => {\n const [pageSize, setPageSize] = React.useState(10);\n const [search, setSearch] = React.useState('');\n const { formatMessage } = useIntl();\n\n const debouncedSearch = useDebounce(search, 300);\n\n const { data, isLoading } = useAdminUsers({\n pageSize,\n _q: debouncedSearch,\n });\n const field = useField<string>(name);\n\n const handleOpenChange = (isOpen?: boolean) => {\n if (!isOpen) {\n setPageSize(10);\n }\n };\n\n const { users = [], pagination } = data ?? {};\n const { pageCount = 1, page = 1 } = pagination ?? {};\n\n return (\n <Combobox\n value={field.value}\n aria-label={formatMessage({\n id: 'content-manager.components.Filters.usersSelect.label',\n defaultMessage: 'Search and select a user to filter',\n })}\n onOpenChange={handleOpenChange}\n onChange={(value) => field.onChange(name, value)}\n loading={isLoading}\n onLoadMore={() => setPageSize(pageSize + 10)}\n hasMoreItems={page < pageCount}\n onInputChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(e.currentTarget.value);\n }}\n >\n {users.map((user) => {\n return (\n <ComboboxOption key={user.id} value={user.id.toString()}>\n {getDisplayName(user)}\n </ComboboxOption>\n );\n })}\n </Combobox>\n );\n};\n\nconst listViewFilters = {\n Root,\n Trigger: Filters.Trigger,\n Popover: Filters.Popover,\n List: Filters.List,\n};\n\nexport { listViewFilters };\nexport type { FiltersProps };\n"],"names":["INJECT_LIST_VIEW_FILTERS","HOOKS","NOT_ALLOWED_FILTERS","Set","DEFAULT_ALLOWED_FILTERS","USER_FILTER_ATTRIBUTES","CREATOR_FIELDS","Root","disabled","schema","layout","children","attributes","uid","model","options","formatMessage","locale","useIntl","trackUsage","useTracking","allPermissions","useAuth","state","permissions","query","useQueryParams","schemas","useContentTypeSchema","runHookWaterfall","useStrapiApp","canReadAdminUsers","React","useMemo","filter","permission","action","subject","length","selectedUserIds","filters","$and","reduce","acc","key","value","Object","entries","id","$eq","$ne","attribute","isAdminUserRelation","type","target","has","includes","push","data","userData","useAdminUsers","$in","skip","users","formatter","useCollator","sensitivity","displayedFilters","properties","fields","find","allowedFields","field","baseFilters","draftAndPublish","map","name","label","getTranslation","defaultMessage","operators","fieldMetadata","metadatas","mainField","mainFieldName","getMainField","components","input","AdminUsersFilter","user","getDisplayName","toString","enum","Boolean","extendedFilters","resolveLabel","userOptions","formatted","next","op","toSorted","a","b","compare","onOpenChange","isOpen","handleFilterChange","useRelation","_jsx","Filters","onChange","pageSize","setPageSize","useState","search","setSearch","debouncedSearch","useDebounce","isLoading","_q","useField","handleOpenChange","pagination","pageCount","page","Combobox","aria-label","loading","onLoadMore","hasMoreItems","onInputChange","e","currentTarget","ComboboxOption","listViewFilters","Trigger","Popover","List"],"mappings":";;;;;;;;;;;;;AA0BA,MAAM,EAAEA,wBAAwB,EAAE,GAAGC,KAAAA;AAErC;;IAGA,MAAMC,mBAAAA,GAAsB,IAAIC,GAAAA,CAAI;AAClC,IAAA,MAAA;AACA,IAAA,WAAA;AACA,IAAA,OAAA;AACA,IAAA,UAAA;AACA,IAAA,aAAA;AACA,IAAA,UAAA;AACA,IAAA;AACD,CAAA,CAAA;AACD,MAAMC,uBAAAA,GAA0B;AAAC,IAAA,WAAA;AAAa,IAAA;AAAY,CAAA;AAC1D,MAAMC,sBAAAA,GAAyB,IAAIF,GAAAA,CAAI;AAAIG,IAAAA,GAAAA,cAAAA;AAAgB,IAAA;AAAkB,CAAA,CAAA;AAY7E,MAAMC,IAAAA,GAAO,CAAC,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAgB,GAAA;IAChE,MAAM,EAAEC,UAAU,EAAEC,GAAAA,EAAKC,KAAK,EAAEC,OAAO,EAAE,GAAGN,MAAAA;AAC5C,IAAA,MAAM,EAAEO,aAAa,EAAEC,MAAM,EAAE,GAAGC,OAAAA,EAAAA;IAClC,MAAM,EAAEC,UAAU,EAAE,GAAGC,WAAAA,EAAAA;AACvB,IAAA,MAAMC,iBAAiBC,OAAAA,CAAQ,aAAA,EAAe,CAACC,KAAAA,GAAUA,MAAMC,WAAW,CAAA;AAC1E,IAAA,MAAM,CAAC,EAAEC,KAAK,EAAE,CAAC,GAAGC,cAAAA,EAAAA;IACpB,MAAM,EAAEC,OAAO,EAAE,GAAGC,oBAAAA,EAAAA;AACpB,IAAA,MAAMC,mBAAmBC,YAAAA,CAAa,aAAA,EAAe,CAAC,EAAED,gBAAgB,EAAE,GAAKA,gBAAAA,CAAAA;IAE/E,MAAME,iBAAAA,GAAoBC,MAAMC,OAAO,CACrC,IACEZ,cAAAA,CAAea,MAAM,CACnB,CAACC,UAAAA,GAAeA,WAAWC,MAAM,KAAK,uBAAuBD,UAAAA,CAAWE,OAAO,KAAK,IAAA,CAAA,CACpFC,MAAM,GAAG,CAAA,EACb;AAACjB,QAAAA;AAAe,KAAA,CAAA;AAGlB,IAAA,MAAMkB,eAAAA,GAAmBd,CAAAA,KAAAA,EAAOe,OAAAA,EAASC,IAAAA,IAAQ,EAAC,EAAGC,MAAM,CAAW,CAACC,GAAAA,EAAKT,MAAAA,GAAAA;QAC1E,MAAM,CAACU,KAAKC,KAAAA,CAAM,GAAGC,OAAOC,OAAO,CAACb,MAAAA,CAAO,CAAC,CAAA,CAAE;AAC9C,QAAA,IAAI,OAAOW,KAAAA,CAAMG,EAAE,KAAK,QAAA,EAAU;YAChC,OAAOL,GAAAA;AACT,QAAA;QAEA,MAAMK,EAAAA,GAAKH,MAAMG,EAAE,CAACC,GAAG,IAAIJ,KAAAA,CAAMG,EAAE,CAACE,GAAG;;QAGvC,MAAMC,SAAAA,GAAYvC,UAAU,CAACgC,GAAAA,CAAI;QACjC,MAAMQ,mBAAAA,GACJD,WAAWE,IAAAA,KAAS,UAAA,IAAc,YAAYF,SAAAA,IAAaA,SAAAA,CAAUG,MAAM,KAAK,aAAA;AAElF,QAAA,IAAIN,EAAAA,KAAOI,mBAAAA,IAAuB/C,sBAAAA,CAAuBkD,GAAG,CAACX,GAAAA,CAAG,CAAA,IAAM,CAACD,GAAAA,CAAIa,QAAQ,CAACR,EAAAA,CAAAA,EAAK;AACvFL,YAAAA,GAAAA,CAAIc,IAAI,CAACT,EAAAA,CAAAA;AACX,QAAA;QAEA,OAAOL,GAAAA;AACT,IAAA,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,MAAM,EAAEe,IAAAA,EAAMC,QAAQ,EAAE,GAAGC,aAAAA,CACzB;QAAEpB,OAAAA,EAAS;YAAEQ,EAAAA,EAAI;gBAAEa,GAAAA,EAAKtB;AAAgB;AAAE;KAAE,EAC5C;;;AAGEuB,QAAAA,IAAAA,EAAMvB,eAAAA,CAAgBD,MAAM,KAAK,CAAA,IAAK,CAACP;AACzC,KAAA,CAAA;AAGF,IAAA,MAAM,EAAEgC,KAAAA,GAAQ,EAAE,EAAE,GAAGJ,YAAY,EAAC;IAEpC,MAAMK,SAAAA,GAAYC,YAAYhD,MAAAA,EAAQ;QACpCiD,WAAAA,EAAa;AACf,KAAA,CAAA;IAEA,MAAMC,gBAAAA,GAAmBnC,KAAAA,CAAMC,OAAO,CAAC,IAAA;;;AAGrC,QAAA,MAAM,EAAEmC,UAAAA,EAAY,EAAEC,MAAAA,GAAS,EAAE,EAAE,GAAG;AAAEA,YAAAA,MAAAA,EAAQ;AAAG,SAAC,EAAE,GACpDhD,cAAAA,CAAeiD,IAAI,CACjB,CAACnC,UAAAA,GACCA,UAAAA,CAAWC,MAAM,KAAK,uCAAA,IACtBD,UAAAA,CAAWE,OAAO,KAAKvB,UACtB,EAAC;AAER,QAAA,MAAMyD,aAAAA,GAAgBF,MAAAA,CAAOnC,MAAM,CAAC,CAACsC,KAAAA,GAAAA;AACnC,YAAA,MAAMrB,SAAAA,GAAYvC,UAAU,CAAC4D,KAAAA,CAAM,IAAI,EAAC;YAExC,OAAOrB,SAAAA,CAAUE,IAAI,IAAI,CAACnD,oBAAoBqD,GAAG,CAACJ,UAAUE,IAAI,CAAA;AAClE,QAAA,CAAA,CAAA;AAEA,QAAA,MAAMoB,WAAAA,GAAc;AAClB,YAAA,IAAA;AACA,YAAA,YAAA;AACGF,YAAAA,GAAAA,aAAAA;AACAnE,YAAAA,GAAAA,uBAAAA;AACC2B,YAAAA,GAAAA,iBAAAA,GAAoBzB,iBAAiB,EAAE;AACvCS,YAAAA,GAAAA,OAAAA,EAAS2D,oBAAoB,IAAA,GAAO;AAAC,gBAAA;AAAW,aAAA,GAAG;SACxD,CACEC,GAAG,CAAC,CAACC,IAAAA,GAAAA;AACJ,YAAA,IAAIA,SAAS,UAAA,EAAY;gBACvB,OAAO;oBACLA,IAAAA,EAAM,UAAA;oBACNvB,IAAAA,EAAM,aAAA;AACNwB,oBAAAA,KAAAA,EAAO7D,aAAAA,CAAc;AACnBgC,wBAAAA,EAAAA,EAAI8B,cAAAA,CAAe,gCAAA,CAAA;wBACnBC,cAAAA,EAAgB;AAClB,qBAAA,CAAA;oBACAC,SAAAA,EAAW;AACT,wBAAA;AACEH,4BAAAA,KAAAA,EAAO7D,aAAAA,CAAc;gCACnBgC,EAAAA,EAAI,2CAAA;gCACJ+B,cAAAA,EAAgB;AAClB,6BAAA,CAAA;4BACAlC,KAAAA,EAAO;AACT;AACD,qBAAA;oBACD9B,OAAAA,EAAS;AACP,wBAAA;AACE8D,4BAAAA,KAAAA,EAAO7D,aAAAA,CAAc;AACnBgC,gCAAAA,EAAAA,EAAI8B,cAAAA,CAAe,oCAAA,CAAA;gCACnBC,cAAAA,EAAgB;AAClB,6BAAA,CAAA;4BACAlC,KAAAA,EAAO;AACT,yBAAA;AACA,wBAAA;AACEgC,4BAAAA,KAAAA,EAAO7D,aAAAA,CAAc;AACnBgC,gCAAAA,EAAAA,EAAI8B,cAAAA,CAAe,wCAAA,CAAA;gCACnBC,cAAAA,EAAgB;AAClB,6BAAA,CAAA;4BACAlC,KAAAA,EAAO;AACT,yBAAA;AACA,wBAAA;AACEgC,4BAAAA,KAAAA,EAAO7D,aAAAA,CAAc;AACnBgC,gCAAAA,EAAAA,EAAI8B,cAAAA,CAAe,gDAAA,CAAA;gCACnBC,cAAAA,EAAgB;AAClB,6BAAA,CAAA;4BACAlC,KAAAA,EAAO;AACT,yBAAA;AACA,wBAAA;AACEgC,4BAAAA,KAAAA,EAAO7D,aAAAA,CAAc;AACnBgC,gCAAAA,EAAAA,EAAI8B,cAAAA,CAAe,kDAAA,CAAA;gCACnBC,cAAAA,EAAgB;AAClB,6BAAA,CAAA;4BACAlC,KAAAA,EAAO;AACT;AACD;AACH,iBAAA;AACF,YAAA;YAEA,MAAMM,SAAAA,GAAYvC,UAAU,CAACgE,IAAAA,CAAK;AAElC,YAAA,IAAI,CAACzB,SAAAA,IAAajD,mBAAAA,CAAoBqD,GAAG,CAACJ,SAAAA,CAAUE,IAAI,CAAA,EAAG;gBACzD,OAAO,IAAA;AACT,YAAA;AAEA,YAAA,MAAM4B,aAAAA,GAAgBvE,MAAAA,CAAOwE,SAAS,GAAGN,IAAAA,CAAK;AAC9C,YAAA,IAAI,CAACK,aAAAA,EAAe;gBAClB,OAAO,IAAA;AACT,YAAA;AAEA,YAAA,MAAM,EAAEE,SAAAA,EAAWC,aAAAA,GAAgB,EAAE,EAAEP,KAAK,EAAE,GAAGI,aAAAA;AAEjD,YAAA,IAAI/C,MAAAA,GAAyB;AAC3B0C,gBAAAA,IAAAA;AACAC,gBAAAA,KAAAA,EAAOA,KAAAA,IAAS,EAAA;gBAChBM,SAAAA,EAAWE,YAAAA,CAAalC,WAAWiC,aAAAA,EAAe;AAAEzD,oBAAAA,OAAAA;AAAS2D,oBAAAA,UAAAA,EAAY;AAAG,iBAAA,CAAA;AAC5EjC,gBAAAA,IAAAA,EAAMF,UAAUE;AAClB,aAAA;YAEA,IACEF,SAAAA,CAAUE,IAAI,KAAK,UAAA,IACnB,YAAYF,SAAAA,IACZA,SAAAA,CAAUG,MAAM,KAAK,aAAA,EACrB;gBACApB,MAAAA,GAAS;AACP,oBAAA,GAAGA,MAAM;oBACTqD,KAAAA,EAAOC,gBAAAA;AACPzE,oBAAAA,OAAAA,EAASgD,KAAAA,CAAMY,GAAG,CAAC,CAACc,QAAU;AAC5BZ,4BAAAA,KAAAA,EAAOa,cAAAA,CAAeD,IAAAA,CAAAA;4BACtB5C,KAAAA,EAAO4C,IAAAA,CAAKzC,EAAE,CAAC2C,QAAQ;yBACzB,CAAA,CAAA;oBACAX,SAAAA,EAAW;AACT,wBAAA;AACEH,4BAAAA,KAAAA,EAAO7D,aAAAA,CAAc;gCACnBgC,EAAAA,EAAI,2CAAA;gCACJ+B,cAAAA,EAAgB;AAClB,6BAAA,CAAA;4BACAlC,KAAAA,EAAO;AACT,yBAAA;AACA,wBAAA;AACEgC,4BAAAA,KAAAA,EAAO7D,aAAAA,CAAc;gCACnBgC,EAAAA,EAAI,2CAAA;gCACJ+B,cAAAA,EAAgB;AAClB,6BAAA,CAAA;4BACAlC,KAAAA,EAAO;AACT;AACD,qBAAA;oBACDsC,SAAAA,EAAW;wBACTP,IAAAA,EAAM,IAAA;wBACNvB,IAAAA,EAAM;AACR;AACF,iBAAA;AACF,YAAA;YAEA,IAAIF,SAAAA,CAAUE,IAAI,KAAK,aAAA,EAAe;gBACpCnB,MAAAA,GAAS;AACP,oBAAA,GAAGA,MAAM;AACTnB,oBAAAA,OAAAA,EAASoC,UAAUyC,IAAI,CAACjB,GAAG,CAAC,CAAC9B,SAAW;AACtCgC,4BAAAA,KAAAA,EAAO7D,aAAAA,CAAc;gCAAEgC,EAAAA,EAAIH,KAAAA;gCAAOkC,cAAAA,EAAgBlC;AAAM,6BAAA,CAAA;AACxDA,4BAAAA;yBACF,CAAA;AACF,iBAAA;AACF,YAAA;YAEA,OAAOX,MAAAA;AACT,QAAA,CAAA,CAAA,CACCA,MAAM,CAAC2D,OAAAA,CAAAA;;;;AAKV,QAAA,MAAM,EAAE1B,gBAAAA,EAAkB2B,eAAe,EAAE,GAAGjE,iBAAiB7B,wBAAAA,EAA0B;YACvFmE,gBAAAA,EAAkBM,WAAAA;AAClB/D,YAAAA;AACF,SAAA,CAAA;AAEA,QAAA,MAAMqF,eAAe,CAAClB,KAAAA,GACpB,OAAOA,KAAAA,KAAU,QAAA,GAAWA,QAAQ7D,aAAAA,CAAc6D,KAAAA,CAAAA;AAEpD,QAAA,MAAMmB,cAAcjC,KAAAA,CAAMY,GAAG,CAAC,CAACc,QAAU;AACvCZ,gBAAAA,KAAAA,EAAOa,cAAAA,CAAeD,IAAAA,CAAAA;gBACtB5C,KAAAA,EAAO4C,IAAAA,CAAKzC,EAAE,CAAC2C,QAAQ;aACzB,CAAA,CAAA;AAEA,QAAA,MAAMM,SAAAA,GAAYH,eAAAA,CAAgBnB,GAAG,CAAiB,CAACzC,MAAAA,GAAAA;AACrD,YAAA,MAAMgE,IAAAA,GAAuB;AAC3B,gBAAA,GAAGhE,MAAM;gBACT2C,KAAAA,EAAOkB,YAAAA,CAAa7D,OAAO2C,KAAK,CAAA;AAChCG,gBAAAA,SAAAA,EAAW9C,OAAO8C,SAAS,EAAEL,GAAAA,CAAI,CAACwB,MAAQ;AAAE,wBAAA,GAAGA,EAAE;wBAAEtB,KAAAA,EAAOkB,YAAAA,CAAaI,GAAGtB,KAAK;qBAAE,CAAA;AACnF,aAAA;;YAGA,IAAIxE,sBAAAA,CAAuBkD,GAAG,CAACrB,MAAAA,CAAO0C,IAAI,KAAK,CAACsB,IAAAA,CAAKnF,OAAO,EAAEuB,MAAAA,EAAQ;AACpE4D,gBAAAA,IAAAA,CAAKnF,OAAO,GAAGiF,WAAAA;AACjB,YAAA;YAEA,OAAOE,IAAAA;AACT,QAAA,CAAA,CAAA;AAEA,QAAA,OAAOD,SAAAA,CAAUG,QAAQ,CAAC,CAACC,CAAAA,EAAGC,CAAAA,GAAMtC,SAAAA,CAAUuC,OAAO,CAACF,CAAAA,CAAExB,KAAK,EAAEyB,EAAEzB,KAAK,CAAA,CAAA;IACxE,CAAA,EAAG;AACDxD,QAAAA,cAAAA;AACAU,QAAAA,iBAAAA;AACAjB,QAAAA,KAAAA;AACAF,QAAAA,UAAAA;AACAe,QAAAA,OAAAA;AACAjB,QAAAA,MAAAA;AACAqD,QAAAA,KAAAA;AACA/C,QAAAA,aAAAA;AACAgD,QAAAA,SAAAA;QACAjD,OAAAA,EAAS2D,eAAAA;AACT7C,QAAAA;AACD,KAAA,CAAA;AAED,IAAA,MAAM2E,eAAe,CAACC,MAAAA,GAAAA;AACpB,QAAA,IAAIA,MAAAA,EAAQ;YACVtF,UAAAA,CAAW,mBAAA,CAAA;AACb,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMuF,qBAAgD,CAAChD,IAAAA,GAAAA;AACrD,QAAA,MAAMP,SAAAA,GAAYvC,UAAU,CAAC8C,IAAAA,CAAKkB,IAAI,CAAC;AAEvC,QAAA,IAAIzB,SAAAA,EAAW;AACbhC,YAAAA,UAAAA,CAAW,kBAAA,EAAoB;gBAC7BwF,WAAAA,EAAaxD,SAAAA,CAAUE,IAAI,KAAK;AAClC,aAAA,CAAA;AACF,QAAA;AACF,IAAA,CAAA;IAEA,qBACEuD,GAAA,CAACC,QAAQtG,IAAI,EAAA;QACXC,QAAAA,EAAUA,QAAAA;QACVO,OAAAA,EAASoD,gBAAAA;QACTqC,YAAAA,EAAcA,YAAAA;QACdM,QAAAA,EAAUJ,kBAAAA;AAET/F,QAAAA,QAAAA,EAAAA;;AAGP,CAAA;AAEA;;AAEkG,qGAElG,MAAM6E,gBAAAA,GAAmB,CAAC,EAAEZ,IAAI,EAA2B,GAAA;AACzD,IAAA,MAAM,CAACmC,QAAAA,EAAUC,WAAAA,CAAY,GAAGhF,KAAAA,CAAMiF,QAAQ,CAAC,EAAA,CAAA;AAC/C,IAAA,MAAM,CAACC,MAAAA,EAAQC,SAAAA,CAAU,GAAGnF,KAAAA,CAAMiF,QAAQ,CAAC,EAAA,CAAA;IAC3C,MAAM,EAAEjG,aAAa,EAAE,GAAGE,OAAAA,EAAAA;IAE1B,MAAMkG,eAAAA,GAAkBC,YAAYH,MAAAA,EAAQ,GAAA,CAAA;AAE5C,IAAA,MAAM,EAAExD,IAAI,EAAE4D,SAAS,EAAE,GAAG1D,aAAAA,CAAc;AACxCmD,QAAAA,QAAAA;QACAQ,EAAAA,EAAIH;AACN,KAAA,CAAA;AACA,IAAA,MAAM5C,QAAQgD,QAAAA,CAAiB5C,IAAAA,CAAAA;AAE/B,IAAA,MAAM6C,mBAAmB,CAAChB,MAAAA,GAAAA;AACxB,QAAA,IAAI,CAACA,MAAAA,EAAQ;YACXO,WAAAA,CAAY,EAAA,CAAA;AACd,QAAA;AACF,IAAA,CAAA;IAEA,MAAM,EAAEjD,QAAQ,EAAE,EAAE2D,UAAU,EAAE,GAAGhE,QAAQ,EAAC;IAC5C,MAAM,EAAEiE,YAAY,CAAC,EAAEC,OAAO,CAAC,EAAE,GAAGF,UAAAA,IAAc,EAAC;AAEnD,IAAA,qBACEd,GAAA,CAACiB,QAAAA,EAAAA;AACChF,QAAAA,KAAAA,EAAO2B,MAAM3B,KAAK;AAClBiF,QAAAA,YAAAA,EAAY9G,aAAAA,CAAc;YACxBgC,EAAAA,EAAI,sDAAA;YACJ+B,cAAAA,EAAgB;AAClB,SAAA,CAAA;QACAyB,YAAAA,EAAciB,gBAAAA;AACdX,QAAAA,QAAAA,EAAU,CAACjE,KAAAA,GAAU2B,KAAAA,CAAMsC,QAAQ,CAAClC,IAAAA,EAAM/B,KAAAA,CAAAA;QAC1CkF,OAAAA,EAAST,SAAAA;QACTU,UAAAA,EAAY,IAAMhB,YAAYD,QAAAA,GAAW,EAAA,CAAA;AACzCkB,QAAAA,YAAAA,EAAcL,IAAAA,GAAOD,SAAAA;AACrBO,QAAAA,aAAAA,EAAe,CAACC,CAAAA,GAAAA;YACdhB,SAAAA,CAAUgB,CAAAA,CAAEC,aAAa,CAACvF,KAAK,CAAA;AACjC,QAAA,CAAA;kBAECkB,KAAAA,CAAMY,GAAG,CAAC,CAACc,IAAAA,GAAAA;AACV,YAAA,qBACEmB,GAAA,CAACyB,cAAAA,EAAAA;gBAA6BxF,KAAAA,EAAO4C,IAAAA,CAAKzC,EAAE,CAAC2C,QAAQ,EAAA;0BAClDD,cAAAA,CAAeD,IAAAA;AADGA,aAAAA,EAAAA,IAAAA,CAAKzC,EAAE,CAAA;AAIhC,QAAA,CAAA;;AAGN,CAAA;AAEA,MAAMsF,eAAAA,GAAkB;AACtB/H,IAAAA,IAAAA;AACAgI,IAAAA,OAAAA,EAAS1B,QAAQ0B,OAAO;AACxBC,IAAAA,OAAAA,EAAS3B,QAAQ2B,OAAO;AACxBC,IAAAA,IAAAA,EAAM5B,QAAQ4B;AAChB;;;;"}
1
+ {"version":3,"file":"Filters.mjs","sources":["../../../../../admin/src/pages/ListView/components/Filters.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Filters,\n useField,\n useAuth,\n useTracking,\n useQueryParams,\n useAdminUsers,\n useStrapiApp,\n} from '@strapi/admin/strapi-admin';\nimport { Combobox, ComboboxOption, useCollator } from '@strapi/design-system';\nimport { type MessageDescriptor, useIntl } from 'react-intl';\n\nimport { CREATOR_FIELDS } from '../../../constants/attributes';\nimport { HOOKS } from '../../../constants/hooks';\nimport { useContentTypeSchema } from '../../../hooks/useContentTypeSchema';\nimport { useDebounce } from '../../../hooks/useDebounce';\nimport { Schema } from '../../../hooks/useDocument';\nimport { getMainField } from '../../../utils/attributes';\nimport { getTranslation } from '../../../utils/translations';\nimport { getDisplayName } from '../../../utils/users';\n\nimport type { InjectableListViewFilter } from '../../../constants/hooks';\nimport type { ListLayout } from '../../../hooks/useDocumentLayout';\n\nconst { INJECT_LIST_VIEW_FILTERS } = HOOKS;\n\n/**\n * If new attributes are added, this list needs to be updated.\n */\nconst NOT_ALLOWED_FILTERS = new Set([\n 'json',\n 'component',\n 'media',\n 'richtext',\n 'dynamiczone',\n 'password',\n 'blocks',\n]);\nconst DEFAULT_ALLOWED_FILTERS = ['createdAt', 'updatedAt'];\nconst USER_FILTER_ATTRIBUTES = new Set([...CREATOR_FIELDS, 'strapi_assignee']);\n\n/* -------------------------------------------------------------------------------------------------\n * Filters\n * -----------------------------------------------------------------------------------------------*/\ninterface FiltersProps {\n disabled?: boolean;\n schema: Schema;\n /**\n * From `useListViewFilterOptions`. The list page computes them once: its API query reads them\n * too (`toApiFilters`).\n */\n options: Filters.Filter[];\n children: React.ReactNode;\n}\n\nconst NO_ATTRIBUTES: Schema['attributes'] = {};\n\n/**\n * The filters of the list view. The API query reads them too (`toApiFilters`): a filter can take\n * a value the API doesn't read as it is.\n */\nconst useListViewFilterOptions = (schema: Schema | undefined, layout: ListLayout) => {\n const attributes = schema?.attributes ?? NO_ATTRIBUTES;\n const model = schema?.uid;\n const options = schema?.options;\n const { formatMessage, locale } = useIntl();\n const allPermissions = useAuth('FiltersImpl', (state) => state.permissions);\n const [{ query }] = useQueryParams<Filters.Query>();\n const { schemas } = useContentTypeSchema();\n const runHookWaterfall = useStrapiApp('FiltersImpl', ({ runHookWaterfall }) => runHookWaterfall);\n\n const canReadAdminUsers = React.useMemo(\n () =>\n allPermissions.filter(\n (permission) => permission.action === 'admin::users.read' && permission.subject === null\n ).length > 0,\n [allPermissions]\n );\n\n const selectedUserIds = (query?.filters?.$and ?? []).reduce<string[]>((acc, filter) => {\n const [key, value] = Object.entries(filter)[0];\n if (typeof value.id !== 'object') {\n return acc;\n }\n\n const id = value.id.$eq || value.id.$ne;\n\n // Check if the attribute is a relation to admin::user\n const attribute = attributes[key];\n const isAdminUserRelation =\n attribute?.type === 'relation' && 'target' in attribute && attribute.target === 'admin::user';\n\n if (id && (isAdminUserRelation || USER_FILTER_ATTRIBUTES.has(key)) && !acc.includes(id)) {\n acc.push(id);\n }\n\n return acc;\n }, []);\n\n const { data: userData } = useAdminUsers(\n { filters: { id: { $in: selectedUserIds } } },\n {\n // fetch the list of admin users only if the filter contains users and the\n // current user has permissions to display users\n skip: selectedUserIds.length === 0 || !canReadAdminUsers,\n }\n );\n\n const { users = [] } = userData ?? {};\n\n const formatter = useCollator(locale, {\n sensitivity: 'base',\n });\n\n const displayedFilters = React.useMemo(() => {\n // An absent read permission for this model yields no filterable fields.\n // The empty object lets the defaults below apply instead of throwing.\n const { properties: { fields = [] } = { fields: [] } } =\n allPermissions.find(\n (permission) =>\n permission.action === 'plugin::content-manager.explorer.read' &&\n permission.subject === model\n ) ?? {};\n\n const allowedFields = fields.filter((field) => {\n const attribute = attributes[field] ?? {};\n\n return attribute.type && !NOT_ALLOWED_FILTERS.has(attribute.type);\n });\n\n const baseFilters = [\n 'id',\n 'documentId',\n ...allowedFields,\n ...DEFAULT_ALLOWED_FILTERS,\n ...(canReadAdminUsers ? CREATOR_FIELDS : []),\n ...(options?.draftAndPublish === true ? ['__status'] : []),\n ]\n .map((name) => {\n if (name === '__status') {\n return {\n name: '__status',\n type: 'enumeration',\n label: formatMessage({\n id: getTranslation('containers.list.filters.status'),\n defaultMessage: 'Status',\n }),\n operators: [\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n }),\n value: '$eq',\n },\n ],\n options: [\n {\n label: formatMessage({\n id: getTranslation('containers.List.statusFilter.draft'),\n defaultMessage: 'Draft (never published)',\n }),\n value: 'draft',\n },\n {\n label: formatMessage({\n id: getTranslation('containers.List.statusFilter.published'),\n defaultMessage: 'Published (all)',\n }),\n value: 'published',\n },\n {\n label: formatMessage({\n id: getTranslation('containers.List.statusFilter.publishedModified'),\n defaultMessage: 'Published (modified)',\n }),\n value: 'published-modified',\n },\n {\n label: formatMessage({\n id: getTranslation('containers.List.statusFilter.publishedUnmodified'),\n defaultMessage: 'Published (unmodified)',\n }),\n value: 'published-unmodified',\n },\n ],\n } satisfies Filters.Filter;\n }\n\n const attribute = attributes[name];\n\n if (!attribute || NOT_ALLOWED_FILTERS.has(attribute.type)) {\n return null;\n }\n\n const fieldMetadata = layout.metadatas?.[name];\n if (!fieldMetadata) {\n return null;\n }\n\n const { mainField: mainFieldName = '', label } = fieldMetadata;\n\n let filter: Filters.Filter = {\n name,\n label: label ?? '',\n mainField: getMainField(attribute, mainFieldName, { schemas, components: {} }),\n type: attribute.type as Filters.Filter['type'],\n };\n\n if (\n attribute.type === 'relation' &&\n 'target' in attribute &&\n attribute.target === 'admin::user'\n ) {\n filter = {\n ...filter,\n input: AdminUsersFilter,\n options: users.map((user) => ({\n label: getDisplayName(user),\n value: user.id.toString(),\n })),\n operators: [\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n }),\n value: '$eq',\n },\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$ne',\n defaultMessage: 'is not',\n }),\n value: '$ne',\n },\n ],\n mainField: {\n name: 'id',\n type: 'integer',\n },\n };\n }\n\n if (attribute.type === 'enumeration') {\n filter = {\n ...filter,\n options: attribute.enum.map((value) => ({\n label: formatMessage({ id: value, defaultMessage: value }),\n value,\n })),\n };\n }\n\n return filter;\n })\n .filter(Boolean) as Filters.Filter[];\n\n // Let plugins inject their own filters.\n // `layout.options` is a merge of schema/pluginOptions/contentType options —\n // mirrors the column-injection hook contract.\n const { displayedFilters: extendedFilters } = runHookWaterfall(INJECT_LIST_VIEW_FILTERS, {\n displayedFilters: baseFilters as InjectableListViewFilter[],\n layout,\n });\n\n const resolveLabel = (label: string | MessageDescriptor): string =>\n typeof label === 'string' ? label : formatMessage(label);\n\n const userOptions = users.map((user) => ({\n label: getDisplayName(user),\n value: user.id.toString(),\n }));\n\n const formatted = extendedFilters.map<Filters.Filter>((filter) => {\n const next: Filters.Filter = {\n ...filter,\n label: resolveLabel(filter.label),\n operators: filter.operators?.map((op) => ({ ...op, label: resolveLabel(op.label) })),\n };\n\n // User-typed filters need user options so the chip can render the display name instead of the id.\n if (USER_FILTER_ATTRIBUTES.has(filter.name) && !next.options?.length) {\n next.options = userOptions;\n }\n\n return next;\n });\n\n return formatted.toSorted((a, b) => formatter.compare(a.label, b.label));\n }, [\n allPermissions,\n canReadAdminUsers,\n model,\n attributes,\n schemas,\n layout,\n users,\n formatMessage,\n formatter,\n options?.draftAndPublish,\n runHookWaterfall,\n ]);\n\n return displayedFilters;\n};\n\nconst Root = ({ disabled, schema, options, children }: FiltersProps) => {\n const { trackUsage } = useTracking();\n\n const onOpenChange = (isOpen: boolean) => {\n if (isOpen) {\n trackUsage('willFilterEntries');\n }\n };\n\n const handleFilterChange: Filters.Props['onChange'] = (data) => {\n const attribute = schema.attributes[data.name];\n\n if (attribute) {\n trackUsage('didFilterEntries', {\n useRelation: attribute.type === 'relation',\n });\n }\n };\n\n return (\n <Filters.Root\n disabled={disabled}\n options={options}\n onOpenChange={onOpenChange}\n onChange={handleFilterChange}\n >\n {children}\n </Filters.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AdminUsersFilter\n * -----------------------------------------------------------------------------------------------*/\n\nconst AdminUsersFilter = ({ name }: Filters.ValueInputProps) => {\n const [pageSize, setPageSize] = React.useState(10);\n const [search, setSearch] = React.useState('');\n const { formatMessage } = useIntl();\n\n const debouncedSearch = useDebounce(search, 300);\n\n const { data, isLoading } = useAdminUsers({\n pageSize,\n _q: debouncedSearch,\n });\n const field = useField<string>(name);\n\n const handleOpenChange = (isOpen?: boolean) => {\n if (!isOpen) {\n setPageSize(10);\n }\n };\n\n const { users = [], pagination } = data ?? {};\n const { pageCount = 1, page = 1 } = pagination ?? {};\n\n return (\n <Combobox\n value={field.value}\n aria-label={formatMessage({\n id: 'content-manager.components.Filters.usersSelect.label',\n defaultMessage: 'Search and select a user to filter',\n })}\n onOpenChange={handleOpenChange}\n onChange={(value) => field.onChange(name, value)}\n loading={isLoading}\n onLoadMore={() => setPageSize(pageSize + 10)}\n hasMoreItems={page < pageCount}\n onInputChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n setSearch(e.currentTarget.value);\n }}\n >\n {users.map((user) => {\n return (\n <ComboboxOption key={user.id} value={user.id.toString()}>\n {getDisplayName(user)}\n </ComboboxOption>\n );\n })}\n </Combobox>\n );\n};\n\nconst listViewFilters = {\n Root,\n Trigger: Filters.Trigger,\n Popover: Filters.Popover,\n List: Filters.List,\n};\n\nexport { listViewFilters, useListViewFilterOptions };\nexport type { FiltersProps };\n"],"names":["INJECT_LIST_VIEW_FILTERS","HOOKS","NOT_ALLOWED_FILTERS","Set","DEFAULT_ALLOWED_FILTERS","USER_FILTER_ATTRIBUTES","CREATOR_FIELDS","NO_ATTRIBUTES","useListViewFilterOptions","schema","layout","attributes","model","uid","options","formatMessage","locale","useIntl","allPermissions","useAuth","state","permissions","query","useQueryParams","schemas","useContentTypeSchema","runHookWaterfall","useStrapiApp","canReadAdminUsers","React","useMemo","filter","permission","action","subject","length","selectedUserIds","filters","$and","reduce","acc","key","value","Object","entries","id","$eq","$ne","attribute","isAdminUserRelation","type","target","has","includes","push","data","userData","useAdminUsers","$in","skip","users","formatter","useCollator","sensitivity","displayedFilters","properties","fields","find","allowedFields","field","baseFilters","draftAndPublish","map","name","label","getTranslation","defaultMessage","operators","fieldMetadata","metadatas","mainField","mainFieldName","getMainField","components","input","AdminUsersFilter","user","getDisplayName","toString","enum","Boolean","extendedFilters","resolveLabel","userOptions","formatted","next","op","toSorted","a","b","compare","Root","disabled","children","trackUsage","useTracking","onOpenChange","isOpen","handleFilterChange","useRelation","_jsx","Filters","onChange","pageSize","setPageSize","useState","search","setSearch","debouncedSearch","useDebounce","isLoading","_q","useField","handleOpenChange","pagination","pageCount","page","Combobox","aria-label","loading","onLoadMore","hasMoreItems","onInputChange","e","currentTarget","ComboboxOption","listViewFilters","Trigger","Popover","List"],"mappings":"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"}
@@ -5,6 +5,8 @@ var React = require('react');
5
5
  var strapiAdmin = require('@strapi/admin/strapi-admin');
6
6
  var designSystem = require('@strapi/design-system');
7
7
  var reactIntl = require('react-intl');
8
+ var useI18nFieldLock = require('../../hooks/useI18nFieldLock.js');
9
+ var ComponentContext = require('../../pages/EditView/components/FormInputs/ComponentContext.js');
8
10
  var InputRenderer = require('../../pages/EditView/components/InputRenderer.js');
9
11
  var Preview = require('../pages/Preview.js');
10
12
  var constants = require('../utils/constants.js');
@@ -50,6 +52,10 @@ function usePreviewPopoverBlockIndex() {
50
52
  const components = Preview.usePreviewContext('InputPopover', (state)=>state.components);
51
53
  const { toggleNotification } = strapiAdmin.useNotification();
52
54
  const { formatMessage } = reactIntl.useIntl();
55
+ // Nested fields have no parent component input in the popover to inherit a
56
+ // lock from, so lock them when their root attribute is shared.
57
+ const rootAttributeName = popoverField ? fieldUtils.parsePathWithIndices(popoverField.path)[0]?.name : undefined;
58
+ const isRootAttributeLocked = useI18nFieldLock.useShouldLockNonLocalizedField(rootAttributeName ? schema?.attributes[rootAttributeName] : undefined);
53
59
  React__namespace.useEffect(()=>{
54
60
  /**
55
61
  * We receive window events sent from the user's preview via the injected script.
@@ -188,14 +194,18 @@ function usePreviewPopoverBlockIndex() {
188
194
  overflow: 'hidden',
189
195
  minHeight: 0
190
196
  },
191
- children: /*#__PURE__*/ jsxRuntime.jsx(InputRenderer.InputRenderer, {
192
- document: documentResponse,
193
- attribute: popoverField.attribute,
194
- // TODO: retrieve the proper label from the layout
195
- label: popoverField.path,
196
- name: popoverField.path,
197
- type: popoverField.attribute.type,
198
- visible: true
197
+ children: /*#__PURE__*/ jsxRuntime.jsx(ComponentContext.ComponentProvider, {
198
+ level: fieldUtils.getComponentLevelFromPath(popoverField.path),
199
+ children: /*#__PURE__*/ jsxRuntime.jsx(InputRenderer.InputRenderer, {
200
+ document: documentResponse,
201
+ attribute: popoverField.attribute,
202
+ // TODO: retrieve the proper label from the layout
203
+ label: popoverField.path,
204
+ name: popoverField.path,
205
+ type: popoverField.attribute.type,
206
+ disabled: isRootAttributeLocked,
207
+ visible: true
208
+ })
199
209
  })
200
210
  })
201
211
  })
@@ -1 +1 @@
1
- {"version":3,"file":"InputPopover.js","sources":["../../../../admin/src/preview/components/InputPopover.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { createContext, useNotification } from '@strapi/admin/strapi-admin';\nimport { Box, Flex, Popover } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { type UseDocument } from '../../hooks/useDocument';\nimport { InputRenderer } from '../../pages/EditView/components/InputRenderer';\nimport { usePreviewContext } from '../pages/Preview';\nimport { INTERNAL_EVENTS, PREVIEW_ERROR_MESSAGES } from '../utils/constants';\nimport {\n parseFieldMetaData,\n getAttributeSchemaFromPath,\n PreviewFieldError,\n} from '../utils/fieldUtils';\n\n/* -------------------------------------------------------------------------------------------------\n * Context utils\n * -----------------------------------------------------------------------------------------------*/\n\ninterface InputPopoverContextValue {\n blockIndex: number | null;\n}\n\nconst [InputPopoverProvider, useInputPopoverContext] =\n createContext<InputPopoverContextValue>('InputPopover');\n\nfunction useHasInputPopoverParent() {\n const context = useInputPopoverContext('useHasInputPopoverParent', () => true, false);\n return context !== undefined;\n}\n\nfunction usePreviewPopoverBlockIndex() {\n const blockIndex = useInputPopoverContext(\n 'usePreviewPopoverBlockIndex',\n (ctx) => ctx.blockIndex,\n false\n );\n return blockIndex ?? null;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * InputPopover\n * -----------------------------------------------------------------------------------------------*/\n\nconst InputPopover = ({ documentResponse }: { documentResponse: ReturnType<UseDocument> }) => {\n const iframeRef = usePreviewContext('InputPopover', (state) => state.iframeRef);\n const popoverField = usePreviewContext('InputPopover', (state) => state.popoverField);\n const setPopoverField = usePreviewContext('InputPopover', (state) => state.setPopoverField);\n const document = usePreviewContext('InputPopover', (state) => state.document);\n const schema = usePreviewContext('InputPopover', (state) => state.schema);\n const components = usePreviewContext('InputPopover', (state) => state.components);\n\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n\n React.useEffect(() => {\n /**\n * We receive window events sent from the user's preview via the injected script.\n * We listen to the ones here that target a specific field.\n */\n const handleMessage = (event: MessageEvent) => {\n // Only listen to events from the preview iframe\n if (iframeRef.current) {\n const previewOrigin = new URL(iframeRef.current?.src).origin;\n if (event.origin !== previewOrigin) {\n return;\n }\n }\n\n if (event.data?.type === INTERNAL_EVENTS.STRAPI_FIELD_FOCUS_INTENT) {\n const fieldMetaData = parseFieldMetaData(event.data.payload.path);\n\n if (!fieldMetaData) {\n const { type, message } = PREVIEW_ERROR_MESSAGES.INCOMPLETE_STRAPI_SOURCE;\n toggleNotification({ type, message: formatMessage(message) });\n return;\n }\n\n /**\n * Ignore (for now) content that comes from separate API requests than the one for the\n * current document. This doesn't do anything about fields that may come from relations to\n * the current document however.\n */\n if (fieldMetaData.documentId !== document.documentId) {\n const { type, message } = PREVIEW_ERROR_MESSAGES.DIFFERENT_DOCUMENT;\n toggleNotification({ type, message: formatMessage(message) });\n return;\n }\n\n try {\n const attribute = getAttributeSchemaFromPath({\n path: fieldMetaData.path,\n components,\n schema,\n document,\n });\n\n // We're able to handle the field, set it in context so the popover can pick it up\n const resolvedBlockIndex =\n typeof event.data.payload.blockIndex === 'number' && event.data.payload.blockIndex >= 0\n ? event.data.payload.blockIndex\n : null;\n setPopoverField({\n ...fieldMetaData,\n position: event.data.payload.position,\n attribute,\n blockIndex: resolvedBlockIndex,\n });\n } catch (error) {\n if (error instanceof PreviewFieldError) {\n // Relation fields can't be inline-edited. Silently ignore rather than showing\n // a notification — the user may have double-clicked a relation element by\n // accident, and showing an error is confusing when no action is needed.\n if (error.messageKey === 'RELATIONS_NOT_HANDLED') {\n return;\n }\n const { type, message } = PREVIEW_ERROR_MESSAGES[error.messageKey];\n toggleNotification({ type, message: formatMessage(message) });\n } else if (error instanceof Error) {\n toggleNotification({ type: 'danger', message: error.message });\n }\n }\n }\n\n if (event.data?.type === INTERNAL_EVENTS.STRAPI_FIELD_SINGLE_CLICK_HINT) {\n toggleNotification({\n type: 'info',\n message: formatMessage({\n id: 'content-manager.preview.info.single-click-hint',\n defaultMessage: 'Double click to edit',\n }),\n });\n }\n\n if (event.data?.type === INTERNAL_EVENTS.STRAPI_IFRAME_CLICK) {\n setPopoverField(null);\n }\n };\n\n window.addEventListener('message', handleMessage);\n\n return () => {\n window.removeEventListener('message', handleMessage);\n };\n }, [components, document, iframeRef, schema, setPopoverField, toggleNotification, formatMessage]);\n if (!popoverField || !iframeRef.current) {\n return null;\n }\n\n const iframeRect = iframeRef.current.getBoundingClientRect();\n\n return (\n <>\n <InputPopoverProvider blockIndex={popoverField.blockIndex}>\n <Popover.Root open={true} onOpenChange={(open) => !open && setPopoverField(null)}>\n <Popover.Trigger>\n <Box\n position=\"fixed\"\n width={popoverField.position.width + 'px'}\n height={popoverField.position.height + 'px'}\n top={0}\n left={0}\n transform={`translate(${iframeRect.left + popoverField.position.left}px, ${iframeRect.top + popoverField.position.top}px)`}\n />\n </Popover.Trigger>\n <Popover.Content\n sideOffset={4}\n collisionPadding={{ top: 8, bottom: 8, left: 4, right: 4 }}\n style={{ zIndex: 5 }}\n >\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n padding={4}\n width=\"400px\"\n style={{\n maxHeight: 'var(--radix-popover-content-available-height)',\n overflow: 'hidden',\n minHeight: 0,\n }}\n >\n {/* @ts-expect-error the types of `attribute` clash for some reason */}\n <InputRenderer\n document={documentResponse}\n attribute={popoverField.attribute}\n // TODO: retrieve the proper label from the layout\n label={popoverField.path}\n name={popoverField.path}\n type={popoverField.attribute.type}\n visible={true}\n />\n </Flex>\n </Popover.Content>\n </Popover.Root>\n </InputPopoverProvider>\n </>\n );\n};\n\nexport { InputPopover, useHasInputPopoverParent, usePreviewPopoverBlockIndex };\n"],"names":["InputPopoverProvider","useInputPopoverContext","createContext","useHasInputPopoverParent","context","undefined","usePreviewPopoverBlockIndex","blockIndex","ctx","InputPopover","documentResponse","iframeRef","usePreviewContext","state","popoverField","setPopoverField","document","schema","components","toggleNotification","useNotification","formatMessage","useIntl","React","useEffect","handleMessage","event","current","previewOrigin","URL","src","origin","data","type","INTERNAL_EVENTS","STRAPI_FIELD_FOCUS_INTENT","fieldMetaData","parseFieldMetaData","payload","path","message","PREVIEW_ERROR_MESSAGES","INCOMPLETE_STRAPI_SOURCE","documentId","DIFFERENT_DOCUMENT","attribute","getAttributeSchemaFromPath","resolvedBlockIndex","position","error","PreviewFieldError","messageKey","Error","STRAPI_FIELD_SINGLE_CLICK_HINT","id","defaultMessage","STRAPI_IFRAME_CLICK","window","addEventListener","removeEventListener","iframeRect","getBoundingClientRect","_jsx","_Fragment","_jsxs","Popover","Root","open","onOpenChange","Trigger","Box","width","height","top","left","transform","Content","sideOffset","collisionPadding","bottom","right","style","zIndex","Flex","direction","alignItems","padding","maxHeight","overflow","minHeight","InputRenderer","label","name","visible"],"mappings":"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"}
1
+ {"version":3,"file":"InputPopover.js","sources":["../../../../admin/src/preview/components/InputPopover.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { createContext, useNotification } from '@strapi/admin/strapi-admin';\nimport { Box, Flex, Popover } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { type UseDocument } from '../../hooks/useDocument';\nimport { useShouldLockNonLocalizedField } from '../../hooks/useI18nFieldLock';\nimport { ComponentProvider } from '../../pages/EditView/components/FormInputs/ComponentContext';\nimport { InputRenderer } from '../../pages/EditView/components/InputRenderer';\nimport { usePreviewContext } from '../pages/Preview';\nimport { INTERNAL_EVENTS, PREVIEW_ERROR_MESSAGES } from '../utils/constants';\nimport {\n parseFieldMetaData,\n getAttributeSchemaFromPath,\n getComponentLevelFromPath,\n parsePathWithIndices,\n PreviewFieldError,\n} from '../utils/fieldUtils';\n\n/* -------------------------------------------------------------------------------------------------\n * Context utils\n * -----------------------------------------------------------------------------------------------*/\n\ninterface InputPopoverContextValue {\n blockIndex: number | null;\n}\n\nconst [InputPopoverProvider, useInputPopoverContext] =\n createContext<InputPopoverContextValue>('InputPopover');\n\nfunction useHasInputPopoverParent() {\n const context = useInputPopoverContext('useHasInputPopoverParent', () => true, false);\n return context !== undefined;\n}\n\nfunction usePreviewPopoverBlockIndex() {\n const blockIndex = useInputPopoverContext(\n 'usePreviewPopoverBlockIndex',\n (ctx) => ctx.blockIndex,\n false\n );\n return blockIndex ?? null;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * InputPopover\n * -----------------------------------------------------------------------------------------------*/\n\nconst InputPopover = ({ documentResponse }: { documentResponse: ReturnType<UseDocument> }) => {\n const iframeRef = usePreviewContext('InputPopover', (state) => state.iframeRef);\n const popoverField = usePreviewContext('InputPopover', (state) => state.popoverField);\n const setPopoverField = usePreviewContext('InputPopover', (state) => state.setPopoverField);\n const document = usePreviewContext('InputPopover', (state) => state.document);\n const schema = usePreviewContext('InputPopover', (state) => state.schema);\n const components = usePreviewContext('InputPopover', (state) => state.components);\n\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n\n // Nested fields have no parent component input in the popover to inherit a\n // lock from, so lock them when their root attribute is shared.\n const rootAttributeName = popoverField\n ? parsePathWithIndices(popoverField.path)[0]?.name\n : undefined;\n const isRootAttributeLocked = useShouldLockNonLocalizedField(\n rootAttributeName ? schema?.attributes[rootAttributeName] : undefined\n );\n\n React.useEffect(() => {\n /**\n * We receive window events sent from the user's preview via the injected script.\n * We listen to the ones here that target a specific field.\n */\n const handleMessage = (event: MessageEvent) => {\n // Only listen to events from the preview iframe\n if (iframeRef.current) {\n const previewOrigin = new URL(iframeRef.current?.src).origin;\n if (event.origin !== previewOrigin) {\n return;\n }\n }\n\n if (event.data?.type === INTERNAL_EVENTS.STRAPI_FIELD_FOCUS_INTENT) {\n const fieldMetaData = parseFieldMetaData(event.data.payload.path);\n\n if (!fieldMetaData) {\n const { type, message } = PREVIEW_ERROR_MESSAGES.INCOMPLETE_STRAPI_SOURCE;\n toggleNotification({ type, message: formatMessage(message) });\n return;\n }\n\n /**\n * Ignore (for now) content that comes from separate API requests than the one for the\n * current document. This doesn't do anything about fields that may come from relations to\n * the current document however.\n */\n if (fieldMetaData.documentId !== document.documentId) {\n const { type, message } = PREVIEW_ERROR_MESSAGES.DIFFERENT_DOCUMENT;\n toggleNotification({ type, message: formatMessage(message) });\n return;\n }\n\n try {\n const attribute = getAttributeSchemaFromPath({\n path: fieldMetaData.path,\n components,\n schema,\n document,\n });\n\n // We're able to handle the field, set it in context so the popover can pick it up\n const resolvedBlockIndex =\n typeof event.data.payload.blockIndex === 'number' && event.data.payload.blockIndex >= 0\n ? event.data.payload.blockIndex\n : null;\n setPopoverField({\n ...fieldMetaData,\n position: event.data.payload.position,\n attribute,\n blockIndex: resolvedBlockIndex,\n });\n } catch (error) {\n if (error instanceof PreviewFieldError) {\n // Relation fields can't be inline-edited. Silently ignore rather than showing\n // a notification — the user may have double-clicked a relation element by\n // accident, and showing an error is confusing when no action is needed.\n if (error.messageKey === 'RELATIONS_NOT_HANDLED') {\n return;\n }\n const { type, message } = PREVIEW_ERROR_MESSAGES[error.messageKey];\n toggleNotification({ type, message: formatMessage(message) });\n } else if (error instanceof Error) {\n toggleNotification({ type: 'danger', message: error.message });\n }\n }\n }\n\n if (event.data?.type === INTERNAL_EVENTS.STRAPI_FIELD_SINGLE_CLICK_HINT) {\n toggleNotification({\n type: 'info',\n message: formatMessage({\n id: 'content-manager.preview.info.single-click-hint',\n defaultMessage: 'Double click to edit',\n }),\n });\n }\n\n if (event.data?.type === INTERNAL_EVENTS.STRAPI_IFRAME_CLICK) {\n setPopoverField(null);\n }\n };\n\n window.addEventListener('message', handleMessage);\n\n return () => {\n window.removeEventListener('message', handleMessage);\n };\n }, [components, document, iframeRef, schema, setPopoverField, toggleNotification, formatMessage]);\n if (!popoverField || !iframeRef.current) {\n return null;\n }\n\n const iframeRect = iframeRef.current.getBoundingClientRect();\n\n return (\n <>\n <InputPopoverProvider blockIndex={popoverField.blockIndex}>\n <Popover.Root open={true} onOpenChange={(open) => !open && setPopoverField(null)}>\n <Popover.Trigger>\n <Box\n position=\"fixed\"\n width={popoverField.position.width + 'px'}\n height={popoverField.position.height + 'px'}\n top={0}\n left={0}\n transform={`translate(${iframeRect.left + popoverField.position.left}px, ${iframeRect.top + popoverField.position.top}px)`}\n />\n </Popover.Trigger>\n <Popover.Content\n sideOffset={4}\n collisionPadding={{ top: 8, bottom: 8, left: 4, right: 4 }}\n style={{ zIndex: 5 }}\n >\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n padding={4}\n width=\"400px\"\n style={{\n maxHeight: 'var(--radix-popover-content-available-height)',\n overflow: 'hidden',\n minHeight: 0,\n }}\n >\n <ComponentProvider level={getComponentLevelFromPath(popoverField.path)}>\n {/* @ts-expect-error the types of `attribute` clash for some reason */}\n <InputRenderer\n document={documentResponse}\n attribute={popoverField.attribute}\n // TODO: retrieve the proper label from the layout\n label={popoverField.path}\n name={popoverField.path}\n type={popoverField.attribute.type}\n disabled={isRootAttributeLocked}\n visible={true}\n />\n </ComponentProvider>\n </Flex>\n </Popover.Content>\n </Popover.Root>\n </InputPopoverProvider>\n </>\n );\n};\n\nexport { InputPopover, useHasInputPopoverParent, usePreviewPopoverBlockIndex };\n"],"names":["InputPopoverProvider","useInputPopoverContext","createContext","useHasInputPopoverParent","context","undefined","usePreviewPopoverBlockIndex","blockIndex","ctx","InputPopover","documentResponse","iframeRef","usePreviewContext","state","popoverField","setPopoverField","document","schema","components","toggleNotification","useNotification","formatMessage","useIntl","rootAttributeName","parsePathWithIndices","path","name","isRootAttributeLocked","useShouldLockNonLocalizedField","attributes","React","useEffect","handleMessage","event","current","previewOrigin","URL","src","origin","data","type","INTERNAL_EVENTS","STRAPI_FIELD_FOCUS_INTENT","fieldMetaData","parseFieldMetaData","payload","message","PREVIEW_ERROR_MESSAGES","INCOMPLETE_STRAPI_SOURCE","documentId","DIFFERENT_DOCUMENT","attribute","getAttributeSchemaFromPath","resolvedBlockIndex","position","error","PreviewFieldError","messageKey","Error","STRAPI_FIELD_SINGLE_CLICK_HINT","id","defaultMessage","STRAPI_IFRAME_CLICK","window","addEventListener","removeEventListener","iframeRect","getBoundingClientRect","_jsx","_Fragment","_jsxs","Popover","Root","open","onOpenChange","Trigger","Box","width","height","top","left","transform","Content","sideOffset","collisionPadding","bottom","right","style","zIndex","Flex","direction","alignItems","padding","maxHeight","overflow","minHeight","ComponentProvider","level","getComponentLevelFromPath","InputRenderer","label","disabled","visible"],"mappings":"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"}
@@ -3,10 +3,12 @@ import * as React from 'react';
3
3
  import { createContext, useNotification } from '@strapi/admin/strapi-admin';
4
4
  import { Popover, Box, Flex } from '@strapi/design-system';
5
5
  import { useIntl } from 'react-intl';
6
+ import { useShouldLockNonLocalizedField } from '../../hooks/useI18nFieldLock.mjs';
7
+ import { ComponentProvider } from '../../pages/EditView/components/FormInputs/ComponentContext.mjs';
6
8
  import { InputRenderer as MemoizedInputRenderer } from '../../pages/EditView/components/InputRenderer.mjs';
7
9
  import { usePreviewContext } from '../pages/Preview.mjs';
8
10
  import { INTERNAL_EVENTS, PREVIEW_ERROR_MESSAGES } from '../utils/constants.mjs';
9
- import { parseFieldMetaData, getAttributeSchemaFromPath, PreviewFieldError } from '../utils/fieldUtils.mjs';
11
+ import { parsePathWithIndices, getComponentLevelFromPath, parseFieldMetaData, getAttributeSchemaFromPath, PreviewFieldError } from '../utils/fieldUtils.mjs';
10
12
 
11
13
  const [InputPopoverProvider, useInputPopoverContext] = createContext('InputPopover');
12
14
  function useHasInputPopoverParent() {
@@ -28,6 +30,10 @@ function usePreviewPopoverBlockIndex() {
28
30
  const components = usePreviewContext('InputPopover', (state)=>state.components);
29
31
  const { toggleNotification } = useNotification();
30
32
  const { formatMessage } = useIntl();
33
+ // Nested fields have no parent component input in the popover to inherit a
34
+ // lock from, so lock them when their root attribute is shared.
35
+ const rootAttributeName = popoverField ? parsePathWithIndices(popoverField.path)[0]?.name : undefined;
36
+ const isRootAttributeLocked = useShouldLockNonLocalizedField(rootAttributeName ? schema?.attributes[rootAttributeName] : undefined);
31
37
  React.useEffect(()=>{
32
38
  /**
33
39
  * We receive window events sent from the user's preview via the injected script.
@@ -166,14 +172,18 @@ function usePreviewPopoverBlockIndex() {
166
172
  overflow: 'hidden',
167
173
  minHeight: 0
168
174
  },
169
- children: /*#__PURE__*/ jsx(MemoizedInputRenderer, {
170
- document: documentResponse,
171
- attribute: popoverField.attribute,
172
- // TODO: retrieve the proper label from the layout
173
- label: popoverField.path,
174
- name: popoverField.path,
175
- type: popoverField.attribute.type,
176
- visible: true
175
+ children: /*#__PURE__*/ jsx(ComponentProvider, {
176
+ level: getComponentLevelFromPath(popoverField.path),
177
+ children: /*#__PURE__*/ jsx(MemoizedInputRenderer, {
178
+ document: documentResponse,
179
+ attribute: popoverField.attribute,
180
+ // TODO: retrieve the proper label from the layout
181
+ label: popoverField.path,
182
+ name: popoverField.path,
183
+ type: popoverField.attribute.type,
184
+ disabled: isRootAttributeLocked,
185
+ visible: true
186
+ })
177
187
  })
178
188
  })
179
189
  })
@@ -1 +1 @@
1
- {"version":3,"file":"InputPopover.mjs","sources":["../../../../admin/src/preview/components/InputPopover.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { createContext, useNotification } from '@strapi/admin/strapi-admin';\nimport { Box, Flex, Popover } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { type UseDocument } from '../../hooks/useDocument';\nimport { InputRenderer } from '../../pages/EditView/components/InputRenderer';\nimport { usePreviewContext } from '../pages/Preview';\nimport { INTERNAL_EVENTS, PREVIEW_ERROR_MESSAGES } from '../utils/constants';\nimport {\n parseFieldMetaData,\n getAttributeSchemaFromPath,\n PreviewFieldError,\n} from '../utils/fieldUtils';\n\n/* -------------------------------------------------------------------------------------------------\n * Context utils\n * -----------------------------------------------------------------------------------------------*/\n\ninterface InputPopoverContextValue {\n blockIndex: number | null;\n}\n\nconst [InputPopoverProvider, useInputPopoverContext] =\n createContext<InputPopoverContextValue>('InputPopover');\n\nfunction useHasInputPopoverParent() {\n const context = useInputPopoverContext('useHasInputPopoverParent', () => true, false);\n return context !== undefined;\n}\n\nfunction usePreviewPopoverBlockIndex() {\n const blockIndex = useInputPopoverContext(\n 'usePreviewPopoverBlockIndex',\n (ctx) => ctx.blockIndex,\n false\n );\n return blockIndex ?? null;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * InputPopover\n * -----------------------------------------------------------------------------------------------*/\n\nconst InputPopover = ({ documentResponse }: { documentResponse: ReturnType<UseDocument> }) => {\n const iframeRef = usePreviewContext('InputPopover', (state) => state.iframeRef);\n const popoverField = usePreviewContext('InputPopover', (state) => state.popoverField);\n const setPopoverField = usePreviewContext('InputPopover', (state) => state.setPopoverField);\n const document = usePreviewContext('InputPopover', (state) => state.document);\n const schema = usePreviewContext('InputPopover', (state) => state.schema);\n const components = usePreviewContext('InputPopover', (state) => state.components);\n\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n\n React.useEffect(() => {\n /**\n * We receive window events sent from the user's preview via the injected script.\n * We listen to the ones here that target a specific field.\n */\n const handleMessage = (event: MessageEvent) => {\n // Only listen to events from the preview iframe\n if (iframeRef.current) {\n const previewOrigin = new URL(iframeRef.current?.src).origin;\n if (event.origin !== previewOrigin) {\n return;\n }\n }\n\n if (event.data?.type === INTERNAL_EVENTS.STRAPI_FIELD_FOCUS_INTENT) {\n const fieldMetaData = parseFieldMetaData(event.data.payload.path);\n\n if (!fieldMetaData) {\n const { type, message } = PREVIEW_ERROR_MESSAGES.INCOMPLETE_STRAPI_SOURCE;\n toggleNotification({ type, message: formatMessage(message) });\n return;\n }\n\n /**\n * Ignore (for now) content that comes from separate API requests than the one for the\n * current document. This doesn't do anything about fields that may come from relations to\n * the current document however.\n */\n if (fieldMetaData.documentId !== document.documentId) {\n const { type, message } = PREVIEW_ERROR_MESSAGES.DIFFERENT_DOCUMENT;\n toggleNotification({ type, message: formatMessage(message) });\n return;\n }\n\n try {\n const attribute = getAttributeSchemaFromPath({\n path: fieldMetaData.path,\n components,\n schema,\n document,\n });\n\n // We're able to handle the field, set it in context so the popover can pick it up\n const resolvedBlockIndex =\n typeof event.data.payload.blockIndex === 'number' && event.data.payload.blockIndex >= 0\n ? event.data.payload.blockIndex\n : null;\n setPopoverField({\n ...fieldMetaData,\n position: event.data.payload.position,\n attribute,\n blockIndex: resolvedBlockIndex,\n });\n } catch (error) {\n if (error instanceof PreviewFieldError) {\n // Relation fields can't be inline-edited. Silently ignore rather than showing\n // a notification — the user may have double-clicked a relation element by\n // accident, and showing an error is confusing when no action is needed.\n if (error.messageKey === 'RELATIONS_NOT_HANDLED') {\n return;\n }\n const { type, message } = PREVIEW_ERROR_MESSAGES[error.messageKey];\n toggleNotification({ type, message: formatMessage(message) });\n } else if (error instanceof Error) {\n toggleNotification({ type: 'danger', message: error.message });\n }\n }\n }\n\n if (event.data?.type === INTERNAL_EVENTS.STRAPI_FIELD_SINGLE_CLICK_HINT) {\n toggleNotification({\n type: 'info',\n message: formatMessage({\n id: 'content-manager.preview.info.single-click-hint',\n defaultMessage: 'Double click to edit',\n }),\n });\n }\n\n if (event.data?.type === INTERNAL_EVENTS.STRAPI_IFRAME_CLICK) {\n setPopoverField(null);\n }\n };\n\n window.addEventListener('message', handleMessage);\n\n return () => {\n window.removeEventListener('message', handleMessage);\n };\n }, [components, document, iframeRef, schema, setPopoverField, toggleNotification, formatMessage]);\n if (!popoverField || !iframeRef.current) {\n return null;\n }\n\n const iframeRect = iframeRef.current.getBoundingClientRect();\n\n return (\n <>\n <InputPopoverProvider blockIndex={popoverField.blockIndex}>\n <Popover.Root open={true} onOpenChange={(open) => !open && setPopoverField(null)}>\n <Popover.Trigger>\n <Box\n position=\"fixed\"\n width={popoverField.position.width + 'px'}\n height={popoverField.position.height + 'px'}\n top={0}\n left={0}\n transform={`translate(${iframeRect.left + popoverField.position.left}px, ${iframeRect.top + popoverField.position.top}px)`}\n />\n </Popover.Trigger>\n <Popover.Content\n sideOffset={4}\n collisionPadding={{ top: 8, bottom: 8, left: 4, right: 4 }}\n style={{ zIndex: 5 }}\n >\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n padding={4}\n width=\"400px\"\n style={{\n maxHeight: 'var(--radix-popover-content-available-height)',\n overflow: 'hidden',\n minHeight: 0,\n }}\n >\n {/* @ts-expect-error the types of `attribute` clash for some reason */}\n <InputRenderer\n document={documentResponse}\n attribute={popoverField.attribute}\n // TODO: retrieve the proper label from the layout\n label={popoverField.path}\n name={popoverField.path}\n type={popoverField.attribute.type}\n visible={true}\n />\n </Flex>\n </Popover.Content>\n </Popover.Root>\n </InputPopoverProvider>\n </>\n );\n};\n\nexport { InputPopover, useHasInputPopoverParent, usePreviewPopoverBlockIndex };\n"],"names":["InputPopoverProvider","useInputPopoverContext","createContext","useHasInputPopoverParent","context","undefined","usePreviewPopoverBlockIndex","blockIndex","ctx","InputPopover","documentResponse","iframeRef","usePreviewContext","state","popoverField","setPopoverField","document","schema","components","toggleNotification","useNotification","formatMessage","useIntl","React","useEffect","handleMessage","event","current","previewOrigin","URL","src","origin","data","type","INTERNAL_EVENTS","STRAPI_FIELD_FOCUS_INTENT","fieldMetaData","parseFieldMetaData","payload","path","message","PREVIEW_ERROR_MESSAGES","INCOMPLETE_STRAPI_SOURCE","documentId","DIFFERENT_DOCUMENT","attribute","getAttributeSchemaFromPath","resolvedBlockIndex","position","error","PreviewFieldError","messageKey","Error","STRAPI_FIELD_SINGLE_CLICK_HINT","id","defaultMessage","STRAPI_IFRAME_CLICK","window","addEventListener","removeEventListener","iframeRect","getBoundingClientRect","_jsx","_Fragment","_jsxs","Popover","Root","open","onOpenChange","Trigger","Box","width","height","top","left","transform","Content","sideOffset","collisionPadding","bottom","right","style","zIndex","Flex","direction","alignItems","padding","maxHeight","overflow","minHeight","InputRenderer","label","name","visible"],"mappings":"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"}
1
+ {"version":3,"file":"InputPopover.mjs","sources":["../../../../admin/src/preview/components/InputPopover.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { createContext, useNotification } from '@strapi/admin/strapi-admin';\nimport { Box, Flex, Popover } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\n\nimport { type UseDocument } from '../../hooks/useDocument';\nimport { useShouldLockNonLocalizedField } from '../../hooks/useI18nFieldLock';\nimport { ComponentProvider } from '../../pages/EditView/components/FormInputs/ComponentContext';\nimport { InputRenderer } from '../../pages/EditView/components/InputRenderer';\nimport { usePreviewContext } from '../pages/Preview';\nimport { INTERNAL_EVENTS, PREVIEW_ERROR_MESSAGES } from '../utils/constants';\nimport {\n parseFieldMetaData,\n getAttributeSchemaFromPath,\n getComponentLevelFromPath,\n parsePathWithIndices,\n PreviewFieldError,\n} from '../utils/fieldUtils';\n\n/* -------------------------------------------------------------------------------------------------\n * Context utils\n * -----------------------------------------------------------------------------------------------*/\n\ninterface InputPopoverContextValue {\n blockIndex: number | null;\n}\n\nconst [InputPopoverProvider, useInputPopoverContext] =\n createContext<InputPopoverContextValue>('InputPopover');\n\nfunction useHasInputPopoverParent() {\n const context = useInputPopoverContext('useHasInputPopoverParent', () => true, false);\n return context !== undefined;\n}\n\nfunction usePreviewPopoverBlockIndex() {\n const blockIndex = useInputPopoverContext(\n 'usePreviewPopoverBlockIndex',\n (ctx) => ctx.blockIndex,\n false\n );\n return blockIndex ?? null;\n}\n\n/* -------------------------------------------------------------------------------------------------\n * InputPopover\n * -----------------------------------------------------------------------------------------------*/\n\nconst InputPopover = ({ documentResponse }: { documentResponse: ReturnType<UseDocument> }) => {\n const iframeRef = usePreviewContext('InputPopover', (state) => state.iframeRef);\n const popoverField = usePreviewContext('InputPopover', (state) => state.popoverField);\n const setPopoverField = usePreviewContext('InputPopover', (state) => state.setPopoverField);\n const document = usePreviewContext('InputPopover', (state) => state.document);\n const schema = usePreviewContext('InputPopover', (state) => state.schema);\n const components = usePreviewContext('InputPopover', (state) => state.components);\n\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n\n // Nested fields have no parent component input in the popover to inherit a\n // lock from, so lock them when their root attribute is shared.\n const rootAttributeName = popoverField\n ? parsePathWithIndices(popoverField.path)[0]?.name\n : undefined;\n const isRootAttributeLocked = useShouldLockNonLocalizedField(\n rootAttributeName ? schema?.attributes[rootAttributeName] : undefined\n );\n\n React.useEffect(() => {\n /**\n * We receive window events sent from the user's preview via the injected script.\n * We listen to the ones here that target a specific field.\n */\n const handleMessage = (event: MessageEvent) => {\n // Only listen to events from the preview iframe\n if (iframeRef.current) {\n const previewOrigin = new URL(iframeRef.current?.src).origin;\n if (event.origin !== previewOrigin) {\n return;\n }\n }\n\n if (event.data?.type === INTERNAL_EVENTS.STRAPI_FIELD_FOCUS_INTENT) {\n const fieldMetaData = parseFieldMetaData(event.data.payload.path);\n\n if (!fieldMetaData) {\n const { type, message } = PREVIEW_ERROR_MESSAGES.INCOMPLETE_STRAPI_SOURCE;\n toggleNotification({ type, message: formatMessage(message) });\n return;\n }\n\n /**\n * Ignore (for now) content that comes from separate API requests than the one for the\n * current document. This doesn't do anything about fields that may come from relations to\n * the current document however.\n */\n if (fieldMetaData.documentId !== document.documentId) {\n const { type, message } = PREVIEW_ERROR_MESSAGES.DIFFERENT_DOCUMENT;\n toggleNotification({ type, message: formatMessage(message) });\n return;\n }\n\n try {\n const attribute = getAttributeSchemaFromPath({\n path: fieldMetaData.path,\n components,\n schema,\n document,\n });\n\n // We're able to handle the field, set it in context so the popover can pick it up\n const resolvedBlockIndex =\n typeof event.data.payload.blockIndex === 'number' && event.data.payload.blockIndex >= 0\n ? event.data.payload.blockIndex\n : null;\n setPopoverField({\n ...fieldMetaData,\n position: event.data.payload.position,\n attribute,\n blockIndex: resolvedBlockIndex,\n });\n } catch (error) {\n if (error instanceof PreviewFieldError) {\n // Relation fields can't be inline-edited. Silently ignore rather than showing\n // a notification — the user may have double-clicked a relation element by\n // accident, and showing an error is confusing when no action is needed.\n if (error.messageKey === 'RELATIONS_NOT_HANDLED') {\n return;\n }\n const { type, message } = PREVIEW_ERROR_MESSAGES[error.messageKey];\n toggleNotification({ type, message: formatMessage(message) });\n } else if (error instanceof Error) {\n toggleNotification({ type: 'danger', message: error.message });\n }\n }\n }\n\n if (event.data?.type === INTERNAL_EVENTS.STRAPI_FIELD_SINGLE_CLICK_HINT) {\n toggleNotification({\n type: 'info',\n message: formatMessage({\n id: 'content-manager.preview.info.single-click-hint',\n defaultMessage: 'Double click to edit',\n }),\n });\n }\n\n if (event.data?.type === INTERNAL_EVENTS.STRAPI_IFRAME_CLICK) {\n setPopoverField(null);\n }\n };\n\n window.addEventListener('message', handleMessage);\n\n return () => {\n window.removeEventListener('message', handleMessage);\n };\n }, [components, document, iframeRef, schema, setPopoverField, toggleNotification, formatMessage]);\n if (!popoverField || !iframeRef.current) {\n return null;\n }\n\n const iframeRect = iframeRef.current.getBoundingClientRect();\n\n return (\n <>\n <InputPopoverProvider blockIndex={popoverField.blockIndex}>\n <Popover.Root open={true} onOpenChange={(open) => !open && setPopoverField(null)}>\n <Popover.Trigger>\n <Box\n position=\"fixed\"\n width={popoverField.position.width + 'px'}\n height={popoverField.position.height + 'px'}\n top={0}\n left={0}\n transform={`translate(${iframeRect.left + popoverField.position.left}px, ${iframeRect.top + popoverField.position.top}px)`}\n />\n </Popover.Trigger>\n <Popover.Content\n sideOffset={4}\n collisionPadding={{ top: 8, bottom: 8, left: 4, right: 4 }}\n style={{ zIndex: 5 }}\n >\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n padding={4}\n width=\"400px\"\n style={{\n maxHeight: 'var(--radix-popover-content-available-height)',\n overflow: 'hidden',\n minHeight: 0,\n }}\n >\n <ComponentProvider level={getComponentLevelFromPath(popoverField.path)}>\n {/* @ts-expect-error the types of `attribute` clash for some reason */}\n <InputRenderer\n document={documentResponse}\n attribute={popoverField.attribute}\n // TODO: retrieve the proper label from the layout\n label={popoverField.path}\n name={popoverField.path}\n type={popoverField.attribute.type}\n disabled={isRootAttributeLocked}\n visible={true}\n />\n </ComponentProvider>\n </Flex>\n </Popover.Content>\n </Popover.Root>\n </InputPopoverProvider>\n </>\n );\n};\n\nexport { InputPopover, useHasInputPopoverParent, usePreviewPopoverBlockIndex };\n"],"names":["InputPopoverProvider","useInputPopoverContext","createContext","useHasInputPopoverParent","context","undefined","usePreviewPopoverBlockIndex","blockIndex","ctx","InputPopover","documentResponse","iframeRef","usePreviewContext","state","popoverField","setPopoverField","document","schema","components","toggleNotification","useNotification","formatMessage","useIntl","rootAttributeName","parsePathWithIndices","path","name","isRootAttributeLocked","useShouldLockNonLocalizedField","attributes","React","useEffect","handleMessage","event","current","previewOrigin","URL","src","origin","data","type","INTERNAL_EVENTS","STRAPI_FIELD_FOCUS_INTENT","fieldMetaData","parseFieldMetaData","payload","message","PREVIEW_ERROR_MESSAGES","INCOMPLETE_STRAPI_SOURCE","documentId","DIFFERENT_DOCUMENT","attribute","getAttributeSchemaFromPath","resolvedBlockIndex","position","error","PreviewFieldError","messageKey","Error","STRAPI_FIELD_SINGLE_CLICK_HINT","id","defaultMessage","STRAPI_IFRAME_CLICK","window","addEventListener","removeEventListener","iframeRect","getBoundingClientRect","_jsx","_Fragment","_jsxs","Popover","Root","open","onOpenChange","Trigger","Box","width","height","top","left","transform","Content","sideOffset","collisionPadding","bottom","right","style","zIndex","Flex","direction","alignItems","padding","maxHeight","overflow","minHeight","ComponentProvider","level","getComponentLevelFromPath","InputRenderer","label","disabled","visible"],"mappings":"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"}
@@ -15,6 +15,7 @@ var useDocumentLayout = require('../../hooks/useDocumentLayout.js');
15
15
  var Blocker = require('../../pages/EditView/components/Blocker.js');
16
16
  var FormLayout = require('../../pages/EditView/components/FormLayout.js');
17
17
  var data = require('../../pages/EditView/utils/data.js');
18
+ var forms = require('../../pages/EditView/utils/forms.js');
18
19
  var api = require('../../utils/api.js');
19
20
  var validation = require('../../utils/validation.js');
20
21
  var InputPopover = require('../components/InputPopover.js');
@@ -212,21 +213,6 @@ const PreviewPage = ()=>{
212
213
  return /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.NoData, {});
213
214
  }
214
215
  const documentTitle = documentResponse.getTitle(documentLayoutResponse.edit.settings.mainField);
215
- const validateSync = (values, options)=>{
216
- const { data: cleanedValues, removedAttributes } = data.handleInvisibleAttributes(values, {
217
- schema: documentResponse.schema,
218
- initialValues,
219
- components: documentResponse.components
220
- });
221
- const yupSchema = validation.createYupSchema(documentResponse.schema?.attributes, documentResponse.components, {
222
- status: documentResponse.document?.status,
223
- removedAttributes,
224
- ...options
225
- });
226
- return yupSchema.validateSync(cleanedValues, {
227
- abortEarly: false
228
- });
229
- };
230
216
  const previewUrl = previewUrlResponse.data.data.url;
231
217
  const onPreview = ()=>{
232
218
  iframeRef?.current?.contentWindow?.postMessage({
@@ -261,7 +247,10 @@ const PreviewPage = ()=>{
261
247
  method: "PUT",
262
248
  disabled: query.status === 'published' && documentResponse && documentResponse.document.status !== 'draft',
263
249
  initialValues: documentResponse.getInitialFormValues(),
264
- initialErrors: location?.state?.forceValidation ? validateSync(initialValues, {}) : {},
250
+ initialErrors: location?.state?.forceValidation ? forms.getPublishValidationErrors(initialValues, {
251
+ schema: documentResponse.schema,
252
+ components: documentResponse.components
253
+ }) : {},
265
254
  height: "100%",
266
255
  validate: (values, options)=>{
267
256
  const { data: cleanedValues, removedAttributes } = data.handleInvisibleAttributes(values, {