@strapi/content-manager 5.12.3 → 5.12.4

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 (82) hide show
  1. package/dist/admin/content-manager.js.map +1 -1
  2. package/dist/admin/content-manager.mjs.map +1 -1
  3. package/dist/admin/history/pages/History.js +1 -9
  4. package/dist/admin/history/pages/History.js.map +1 -1
  5. package/dist/admin/history/pages/History.mjs +1 -9
  6. package/dist/admin/history/pages/History.mjs.map +1 -1
  7. package/dist/admin/hooks/useDocumentActions.js +8 -1
  8. package/dist/admin/hooks/useDocumentActions.js.map +1 -1
  9. package/dist/admin/hooks/useDocumentActions.mjs +8 -1
  10. package/dist/admin/hooks/useDocumentActions.mjs.map +1 -1
  11. package/dist/admin/hooks/useDocumentContext.js +57 -0
  12. package/dist/admin/hooks/useDocumentContext.js.map +1 -0
  13. package/dist/admin/hooks/useDocumentContext.mjs +36 -0
  14. package/dist/admin/hooks/useDocumentContext.mjs.map +1 -0
  15. package/dist/admin/pages/EditView/EditViewPage.js +85 -93
  16. package/dist/admin/pages/EditView/EditViewPage.js.map +1 -1
  17. package/dist/admin/pages/EditView/EditViewPage.mjs +86 -94
  18. package/dist/admin/pages/EditView/EditViewPage.mjs.map +1 -1
  19. package/dist/admin/pages/EditView/components/DocumentActions.js +28 -32
  20. package/dist/admin/pages/EditView/components/DocumentActions.js.map +1 -1
  21. package/dist/admin/pages/EditView/components/DocumentActions.mjs +32 -36
  22. package/dist/admin/pages/EditView/components/DocumentActions.mjs.map +1 -1
  23. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js +2 -2
  24. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.js.map +1 -1
  25. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs +2 -2
  26. package/dist/admin/pages/EditView/components/FormInputs/Component/Input.mjs.map +1 -1
  27. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js +2 -2
  28. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.js.map +1 -1
  29. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs +2 -2
  30. package/dist/admin/pages/EditView/components/FormInputs/Component/NonRepeatable.mjs.map +1 -1
  31. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js +2 -2
  32. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.js.map +1 -1
  33. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs +2 -2
  34. package/dist/admin/pages/EditView/components/FormInputs/Component/Repeatable.mjs.map +1 -1
  35. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js +5 -16
  36. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.js.map +1 -1
  37. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs +5 -16
  38. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/DynamicComponent.mjs.map +1 -1
  39. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js +2 -3
  40. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.js.map +1 -1
  41. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs +2 -3
  42. package/dist/admin/pages/EditView/components/FormInputs/DynamicZone/Field.mjs.map +1 -1
  43. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js +432 -344
  44. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.js.map +1 -1
  45. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs +432 -346
  46. package/dist/admin/pages/EditView/components/FormInputs/Relations/RelationModal.mjs.map +1 -1
  47. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js +55 -37
  48. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.js.map +1 -1
  49. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs +57 -39
  50. package/dist/admin/pages/EditView/components/FormInputs/Relations/Relations.mjs.map +1 -1
  51. package/dist/admin/pages/EditView/components/FormInputs/UID.js +7 -7
  52. package/dist/admin/pages/EditView/components/FormInputs/UID.js.map +1 -1
  53. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs +7 -7
  54. package/dist/admin/pages/EditView/components/FormInputs/UID.mjs.map +1 -1
  55. package/dist/admin/pages/EditView/components/InputRenderer.js +3 -10
  56. package/dist/admin/pages/EditView/components/InputRenderer.js.map +1 -1
  57. package/dist/admin/pages/EditView/components/InputRenderer.mjs +3 -10
  58. package/dist/admin/pages/EditView/components/InputRenderer.mjs.map +1 -1
  59. package/dist/admin/preview/components/PreviewHeader.js +2 -5
  60. package/dist/admin/preview/components/PreviewHeader.js.map +1 -1
  61. package/dist/admin/preview/components/PreviewHeader.mjs +2 -5
  62. package/dist/admin/preview/components/PreviewHeader.mjs.map +1 -1
  63. package/dist/admin/preview/pages/Preview.js +94 -102
  64. package/dist/admin/preview/pages/Preview.js.map +1 -1
  65. package/dist/admin/preview/pages/Preview.mjs +94 -102
  66. package/dist/admin/preview/pages/Preview.mjs.map +1 -1
  67. package/dist/admin/src/content-manager.d.ts +0 -3
  68. package/dist/admin/src/features/DocumentRBAC.d.ts +1 -1
  69. package/dist/admin/src/history/pages/History.d.ts +1 -1
  70. package/dist/admin/src/hooks/useDocumentContext.d.ts +30 -0
  71. package/dist/admin/src/pages/EditView/components/FormInputs/ComponentContext.d.ts +1 -1
  72. package/dist/admin/src/pages/EditView/components/FormInputs/DynamicZone/Field.d.ts +1 -1
  73. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/RelationModal.d.ts +50 -5
  74. package/dist/admin/src/pages/EditView/components/FormInputs/Relations/Relations.d.ts +1 -0
  75. package/dist/admin/src/pages/EditView/components/InputRenderer.d.ts +1 -1
  76. package/dist/admin/src/preview/pages/Preview.d.ts +2 -1
  77. package/package.json +8 -8
  78. package/dist/admin/features/DocumentContext.js +0 -71
  79. package/dist/admin/features/DocumentContext.js.map +0 -1
  80. package/dist/admin/features/DocumentContext.mjs +0 -49
  81. package/dist/admin/features/DocumentContext.mjs.map +0 -1
  82. package/dist/admin/src/features/DocumentContext.d.ts +0 -53
@@ -1 +1 @@
1
- {"version":3,"file":"UID.mjs","sources":["../../../../../../admin/src/pages/EditView/components/FormInputs/UID.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n type InputProps,\n useField,\n useForm,\n useNotification,\n useAPIErrorHandler,\n useQueryParams,\n useFocusInputField,\n} from '@strapi/admin/strapi-admin';\nimport {\n Field,\n Flex,\n FlexComponent,\n TextInput,\n Typography,\n useComposedRefs,\n} from '@strapi/design-system';\nimport { CheckCircle, WarningCircle, Loader, ArrowClockwise } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useMatch } from 'react-router-dom';\nimport { styled, keyframes } from 'styled-components';\n\nimport { useDebounce } from '../../../../hooks/useDebounce';\nimport { useDoc } from '../../../../hooks/useDocument';\nimport { CLONE_PATH } from '../../../../router';\nimport {\n useGenerateUIDMutation,\n useGetAvailabilityQuery,\n useGetDefaultUIDQuery,\n} from '../../../../services/uid';\nimport { buildValidParams } from '../../../../utils/api';\n\nimport type { CheckUIDAvailability } from '../../../../../../shared/contracts/uid';\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * InputUID\n * -----------------------------------------------------------------------------------------------*/\n\nconst UID_REGEX = /^[A-Za-z0-9-_.~]*$/;\n\ninterface UIDInputProps extends Omit<InputProps, 'type'> {\n type: Schema.Attribute.TypeOf<Schema.Attribute.UID>;\n}\n\nconst UIDInput = React.forwardRef<any, UIDInputProps>(\n ({ hint, label, labelAction, name, required, ...props }, ref) => {\n const { model, id } = useDoc();\n const allFormValues = useForm('InputUID', (form) => form.values);\n const [availability, setAvailability] = React.useState<CheckUIDAvailability.Response>();\n const [showRegenerate, setShowRegenerate] = React.useState(false);\n const isCloning = useMatch(CLONE_PATH) !== null;\n const field = useField(name);\n const debouncedValue = useDebounce(field.value, 300);\n const hasChanged = debouncedValue !== field.initialValue;\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { formatMessage } = useIntl();\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n const {\n data: defaultGeneratedUID,\n isLoading: isGeneratingDefaultUID,\n error: apiError,\n } = useGetDefaultUIDQuery(\n {\n contentTypeUID: model,\n field: name,\n data: {\n id: id ?? '',\n ...allFormValues,\n },\n params,\n },\n {\n skip: field.value || !required,\n }\n );\n\n React.useEffect(() => {\n if (apiError) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(apiError),\n });\n }\n }, [apiError, formatAPIError, toggleNotification]);\n\n /**\n * If the defaultGeneratedUID is available, then we set it as the value,\n * but we also want to set it as the initialValue too.\n */\n React.useEffect(() => {\n if (defaultGeneratedUID && field.value === undefined) {\n field.onChange(name, defaultGeneratedUID);\n }\n }, [defaultGeneratedUID, field, name]);\n\n const [generateUID, { isLoading: isGeneratingUID }] = useGenerateUIDMutation();\n\n const handleRegenerateClick = async () => {\n try {\n const res = await generateUID({\n contentTypeUID: model,\n field: name,\n data: { id: id ?? '', ...allFormValues },\n params,\n });\n\n if ('data' in res) {\n field.onChange(name, res.data);\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred.',\n }),\n });\n }\n };\n\n const {\n data: availabilityData,\n isLoading: isCheckingAvailability,\n error: availabilityError,\n } = useGetAvailabilityQuery(\n {\n contentTypeUID: model,\n field: name,\n value: debouncedValue ? debouncedValue.trim() : '',\n params,\n },\n {\n // Don't check availability if the value is empty or wasn't changed\n skip: !Boolean(\n (hasChanged || isCloning) && debouncedValue && UID_REGEX.test(debouncedValue.trim())\n ),\n }\n );\n\n React.useEffect(() => {\n if (availabilityError) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(availabilityError),\n });\n }\n }, [availabilityError, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n /**\n * always store the data in state because that way as seen below\n * we can then remove the data to stop showing the label.\n */\n setAvailability(availabilityData);\n\n let timer: number;\n\n if (availabilityData?.isAvailable) {\n timer = window.setTimeout(() => {\n setAvailability(undefined);\n }, 4000);\n }\n\n return () => {\n if (timer) {\n clearTimeout(timer);\n }\n };\n }, [availabilityData]);\n\n const isLoading = isGeneratingDefaultUID || isGeneratingUID || isCheckingAvailability;\n\n const fieldRef = useFocusInputField(name);\n const composedRefs = useComposedRefs(ref, fieldRef);\n\n const shouldShowAvailability =\n (hasChanged || isCloning) && debouncedValue != null && availability && !showRegenerate;\n\n return (\n <Field.Root hint={hint} name={name} error={field.error} required={required}>\n <Field.Label action={labelAction}>{label}</Field.Label>\n <TextInput\n ref={composedRefs}\n disabled={props.disabled}\n endAction={\n <Flex position=\"relative\" gap={1}>\n {shouldShowAvailability && (\n <TextValidation\n alignItems=\"center\"\n gap={1}\n justifyContent=\"flex-end\"\n $available={!!availability?.isAvailable}\n data-not-here-outer\n position=\"absolute\"\n pointerEvents=\"none\"\n right={6}\n width=\"100px\"\n >\n {availability?.isAvailable ? <CheckCircle /> : <WarningCircle />}\n\n <Typography\n textColor={availability.isAvailable ? 'success600' : 'danger600'}\n variant=\"pi\"\n >\n {formatMessage(\n availability.isAvailable\n ? {\n id: 'content-manager.components.uid.available',\n defaultMessage: 'Available',\n }\n : {\n id: 'content-manager.components.uid.unavailable',\n defaultMessage: 'Unavailable',\n }\n )}\n </Typography>\n </TextValidation>\n )}\n\n {!props.disabled && (\n <>\n {showRegenerate && (\n <TextValidation alignItems=\"center\" justifyContent=\"flex-end\" gap={1}>\n <Typography textColor=\"primary600\" variant=\"pi\">\n {formatMessage({\n id: 'content-manager.components.uid.regenerate',\n defaultMessage: 'Regenerate',\n })}\n </Typography>\n </TextValidation>\n )}\n\n <FieldActionWrapper\n onClick={handleRegenerateClick}\n label={formatMessage({\n id: 'content-manager.components.uid.regenerate',\n defaultMessage: 'Regenerate',\n })}\n onMouseEnter={() => setShowRegenerate(true)}\n onMouseLeave={() => setShowRegenerate(false)}\n >\n {isLoading ? (\n <LoadingWrapper data-testid=\"loading-wrapper\">\n <Loader />\n </LoadingWrapper>\n ) : (\n <ArrowClockwise />\n )}\n </FieldActionWrapper>\n </>\n )}\n </Flex>\n }\n onChange={field.onChange}\n value={field.value ?? ''}\n {...props}\n />\n <Field.Error />\n <Field.Hint />\n </Field.Root>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * FieldActionWrapper\n * -----------------------------------------------------------------------------------------------*/\n\nconst FieldActionWrapper = styled(Field.Action)`\n width: 1.6rem;\n\n svg {\n height: 1.6rem;\n width: 1.6rem;\n path {\n fill: ${({ theme }) => theme.colors.neutral400};\n }\n }\n\n svg:hover {\n path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * TextValidation\n * -----------------------------------------------------------------------------------------------*/\n\nconst TextValidation = styled<FlexComponent>(Flex)<{ $available?: boolean }>`\n svg {\n height: 1.2rem;\n width: 1.2rem;\n\n path {\n fill: ${({ theme, $available }) =>\n $available ? theme.colors.success600 : theme.colors.danger600};\n }\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * LoadingWrapper\n * -----------------------------------------------------------------------------------------------*/\n\nconst rotation = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(359deg);\n }\n`;\n\nconst LoadingWrapper = styled<FlexComponent>(Flex)`\n animation: ${rotation} 2s infinite linear;\n`;\n\nconst MemoizedUIDInput = React.memo(UIDInput);\n\nexport { MemoizedUIDInput as UIDInput };\nexport type { UIDInputProps };\n"],"names":["UID_REGEX","UIDInput","React","forwardRef","hint","label","labelAction","name","required","props","ref","model","id","useDoc","allFormValues","useForm","form","values","availability","setAvailability","useState","showRegenerate","setShowRegenerate","isCloning","useMatch","CLONE_PATH","field","useField","debouncedValue","useDebounce","value","hasChanged","initialValue","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","formatMessage","useIntl","query","useQueryParams","params","useMemo","buildValidParams","data","defaultGeneratedUID","isLoading","isGeneratingDefaultUID","error","apiError","useGetDefaultUIDQuery","contentTypeUID","skip","useEffect","type","message","undefined","onChange","generateUID","isGeneratingUID","useGenerateUIDMutation","handleRegenerateClick","res","err","defaultMessage","availabilityData","isCheckingAvailability","availabilityError","useGetAvailabilityQuery","trim","Boolean","test","timer","isAvailable","window","setTimeout","clearTimeout","fieldRef","useFocusInputField","composedRefs","useComposedRefs","shouldShowAvailability","_jsxs","Field","Root","_jsx","Label","action","TextInput","disabled","endAction","Flex","position","gap","TextValidation","alignItems","justifyContent","$available","data-not-here-outer","pointerEvents","right","width","CheckCircle","WarningCircle","Typography","textColor","variant","_Fragment","FieldActionWrapper","onClick","onMouseEnter","onMouseLeave","LoadingWrapper","data-testid","Loader","ArrowClockwise","Error","Hint","styled","Action","theme","colors","neutral400","primary600","success600","danger600","rotation","keyframes","MemoizedUIDInput","memo"],"mappings":"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"}
1
+ {"version":3,"file":"UID.mjs","sources":["../../../../../../admin/src/pages/EditView/components/FormInputs/UID.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n type InputProps,\n useField,\n useForm,\n useNotification,\n useAPIErrorHandler,\n useQueryParams,\n useFocusInputField,\n} from '@strapi/admin/strapi-admin';\nimport {\n Field,\n Flex,\n FlexComponent,\n TextInput,\n Typography,\n useComposedRefs,\n} from '@strapi/design-system';\nimport { CheckCircle, WarningCircle, Loader, ArrowClockwise } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useMatch } from 'react-router-dom';\nimport { styled, keyframes } from 'styled-components';\n\nimport { useDebounce } from '../../../../hooks/useDebounce';\nimport { useDocumentContext } from '../../../../hooks/useDocumentContext';\nimport { CLONE_PATH } from '../../../../router';\nimport {\n useGenerateUIDMutation,\n useGetAvailabilityQuery,\n useGetDefaultUIDQuery,\n} from '../../../../services/uid';\nimport { buildValidParams } from '../../../../utils/api';\n\nimport type { CheckUIDAvailability } from '../../../../../../shared/contracts/uid';\nimport type { Schema } from '@strapi/types';\n\n/* -------------------------------------------------------------------------------------------------\n * InputUID\n * -----------------------------------------------------------------------------------------------*/\n\nconst UID_REGEX = /^[A-Za-z0-9-_.~]*$/;\n\ninterface UIDInputProps extends Omit<InputProps, 'type'> {\n type: Schema.Attribute.TypeOf<Schema.Attribute.UID>;\n}\n\nconst UIDInput = React.forwardRef<any, UIDInputProps>(\n ({ hint, label, labelAction, name, required, ...props }, ref) => {\n const { currentDocumentMeta } = useDocumentContext('UIDInput');\n const allFormValues = useForm('InputUID', (form) => form.values);\n const [availability, setAvailability] = React.useState<CheckUIDAvailability.Response>();\n const [showRegenerate, setShowRegenerate] = React.useState(false);\n const isCloning = useMatch(CLONE_PATH) !== null;\n const field = useField(name);\n const debouncedValue = useDebounce(field.value, 300);\n const hasChanged = debouncedValue !== field.initialValue;\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const { formatMessage } = useIntl();\n const [{ query }] = useQueryParams();\n const params = React.useMemo(() => buildValidParams(query), [query]);\n\n const {\n data: defaultGeneratedUID,\n isLoading: isGeneratingDefaultUID,\n error: apiError,\n } = useGetDefaultUIDQuery(\n {\n contentTypeUID: currentDocumentMeta.model,\n field: name,\n data: {\n id: currentDocumentMeta.documentId ?? '',\n ...allFormValues,\n },\n params,\n },\n {\n skip: field.value || !required,\n }\n );\n\n React.useEffect(() => {\n if (apiError) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(apiError),\n });\n }\n }, [apiError, formatAPIError, toggleNotification]);\n\n /**\n * If the defaultGeneratedUID is available, then we set it as the value,\n * but we also want to set it as the initialValue too.\n */\n React.useEffect(() => {\n if (defaultGeneratedUID && field.value === undefined) {\n field.onChange(name, defaultGeneratedUID);\n }\n }, [defaultGeneratedUID, field, name]);\n\n const [generateUID, { isLoading: isGeneratingUID }] = useGenerateUIDMutation();\n\n const handleRegenerateClick = async () => {\n try {\n const res = await generateUID({\n contentTypeUID: currentDocumentMeta.model,\n field: name,\n data: { id: currentDocumentMeta.documentId ?? '', ...allFormValues },\n params,\n });\n\n if ('data' in res) {\n field.onChange(name, res.data);\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred.',\n }),\n });\n }\n };\n\n const {\n data: availabilityData,\n isLoading: isCheckingAvailability,\n error: availabilityError,\n } = useGetAvailabilityQuery(\n {\n contentTypeUID: currentDocumentMeta.model,\n field: name,\n value: debouncedValue ? debouncedValue.trim() : '',\n params,\n },\n {\n // Don't check availability if the value is empty or wasn't changed\n skip: !Boolean(\n (hasChanged || isCloning) && debouncedValue && UID_REGEX.test(debouncedValue.trim())\n ),\n }\n );\n\n React.useEffect(() => {\n if (availabilityError) {\n toggleNotification({\n type: 'warning',\n message: formatAPIError(availabilityError),\n });\n }\n }, [availabilityError, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n /**\n * always store the data in state because that way as seen below\n * we can then remove the data to stop showing the label.\n */\n setAvailability(availabilityData);\n\n let timer: number;\n\n if (availabilityData?.isAvailable) {\n timer = window.setTimeout(() => {\n setAvailability(undefined);\n }, 4000);\n }\n\n return () => {\n if (timer) {\n clearTimeout(timer);\n }\n };\n }, [availabilityData]);\n\n const isLoading = isGeneratingDefaultUID || isGeneratingUID || isCheckingAvailability;\n\n const fieldRef = useFocusInputField(name);\n const composedRefs = useComposedRefs(ref, fieldRef);\n\n const shouldShowAvailability =\n (hasChanged || isCloning) && debouncedValue != null && availability && !showRegenerate;\n\n return (\n <Field.Root hint={hint} name={name} error={field.error} required={required}>\n <Field.Label action={labelAction}>{label}</Field.Label>\n <TextInput\n ref={composedRefs}\n disabled={props.disabled}\n endAction={\n <Flex position=\"relative\" gap={1}>\n {shouldShowAvailability && (\n <TextValidation\n alignItems=\"center\"\n gap={1}\n justifyContent=\"flex-end\"\n $available={!!availability?.isAvailable}\n data-not-here-outer\n position=\"absolute\"\n pointerEvents=\"none\"\n right={6}\n width=\"100px\"\n >\n {availability?.isAvailable ? <CheckCircle /> : <WarningCircle />}\n\n <Typography\n textColor={availability.isAvailable ? 'success600' : 'danger600'}\n variant=\"pi\"\n >\n {formatMessage(\n availability.isAvailable\n ? {\n id: 'content-manager.components.uid.available',\n defaultMessage: 'Available',\n }\n : {\n id: 'content-manager.components.uid.unavailable',\n defaultMessage: 'Unavailable',\n }\n )}\n </Typography>\n </TextValidation>\n )}\n\n {!props.disabled && (\n <>\n {showRegenerate && (\n <TextValidation alignItems=\"center\" justifyContent=\"flex-end\" gap={1}>\n <Typography textColor=\"primary600\" variant=\"pi\">\n {formatMessage({\n id: 'content-manager.components.uid.regenerate',\n defaultMessage: 'Regenerate',\n })}\n </Typography>\n </TextValidation>\n )}\n\n <FieldActionWrapper\n onClick={handleRegenerateClick}\n label={formatMessage({\n id: 'content-manager.components.uid.regenerate',\n defaultMessage: 'Regenerate',\n })}\n onMouseEnter={() => setShowRegenerate(true)}\n onMouseLeave={() => setShowRegenerate(false)}\n >\n {isLoading ? (\n <LoadingWrapper data-testid=\"loading-wrapper\">\n <Loader />\n </LoadingWrapper>\n ) : (\n <ArrowClockwise />\n )}\n </FieldActionWrapper>\n </>\n )}\n </Flex>\n }\n onChange={field.onChange}\n value={field.value ?? ''}\n {...props}\n />\n <Field.Error />\n <Field.Hint />\n </Field.Root>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * FieldActionWrapper\n * -----------------------------------------------------------------------------------------------*/\n\nconst FieldActionWrapper = styled(Field.Action)`\n width: 1.6rem;\n\n svg {\n height: 1.6rem;\n width: 1.6rem;\n path {\n fill: ${({ theme }) => theme.colors.neutral400};\n }\n }\n\n svg:hover {\n path {\n fill: ${({ theme }) => theme.colors.primary600};\n }\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * TextValidation\n * -----------------------------------------------------------------------------------------------*/\n\nconst TextValidation = styled<FlexComponent>(Flex)<{ $available?: boolean }>`\n svg {\n height: 1.2rem;\n width: 1.2rem;\n\n path {\n fill: ${({ theme, $available }) =>\n $available ? theme.colors.success600 : theme.colors.danger600};\n }\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * LoadingWrapper\n * -----------------------------------------------------------------------------------------------*/\n\nconst rotation = keyframes`\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(359deg);\n }\n`;\n\nconst LoadingWrapper = styled<FlexComponent>(Flex)`\n animation: ${rotation} 2s infinite linear;\n`;\n\nconst MemoizedUIDInput = React.memo(UIDInput);\n\nexport { MemoizedUIDInput as UIDInput };\nexport type { UIDInputProps };\n"],"names":["UID_REGEX","UIDInput","React","forwardRef","hint","label","labelAction","name","required","props","ref","currentDocumentMeta","useDocumentContext","allFormValues","useForm","form","values","availability","setAvailability","useState","showRegenerate","setShowRegenerate","isCloning","useMatch","CLONE_PATH","field","useField","debouncedValue","useDebounce","value","hasChanged","initialValue","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","formatMessage","useIntl","query","useQueryParams","params","useMemo","buildValidParams","data","defaultGeneratedUID","isLoading","isGeneratingDefaultUID","error","apiError","useGetDefaultUIDQuery","contentTypeUID","model","id","documentId","skip","useEffect","type","message","undefined","onChange","generateUID","isGeneratingUID","useGenerateUIDMutation","handleRegenerateClick","res","err","defaultMessage","availabilityData","isCheckingAvailability","availabilityError","useGetAvailabilityQuery","trim","Boolean","test","timer","isAvailable","window","setTimeout","clearTimeout","fieldRef","useFocusInputField","composedRefs","useComposedRefs","shouldShowAvailability","_jsxs","Field","Root","_jsx","Label","action","TextInput","disabled","endAction","Flex","position","gap","TextValidation","alignItems","justifyContent","$available","data-not-here-outer","pointerEvents","right","width","CheckCircle","WarningCircle","Typography","textColor","variant","_Fragment","FieldActionWrapper","onClick","onMouseEnter","onMouseLeave","LoadingWrapper","data-testid","Loader","ArrowClockwise","Error","Hint","styled","Action","theme","colors","neutral400","primary600","success600","danger600","rotation","keyframes","MemoizedUIDInput","memo"],"mappings":"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"}
@@ -5,9 +5,8 @@ var React = require('react');
5
5
  var strapiAdmin = require('@strapi/admin/strapi-admin');
6
6
  var reactIntl = require('react-intl');
7
7
  var collections = require('../../../constants/collections.js');
8
- var DocumentContext = require('../../../features/DocumentContext.js');
9
8
  var DocumentRBAC = require('../../../features/DocumentRBAC.js');
10
- var useDocument = require('../../../hooks/useDocument.js');
9
+ var useDocumentContext = require('../../../hooks/useDocumentContext.js');
11
10
  var useDocumentLayout = require('../../../hooks/useDocumentLayout.js');
12
11
  var useLazyComponents = require('../../../hooks/useLazyComponents.js');
13
12
  var BlocksInput = require('./FormInputs/BlocksInput/BlocksInput.js');
@@ -45,14 +44,8 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
45
44
  * the complete EditFieldLayout and will handle RBAC conditions and rendering CM specific
46
45
  * components such as Blocks / Relations.
47
46
  */ const InputRenderer = ({ visible, hint: providedHint, document, ...props })=>{
48
- const { model: rootModel } = useDocument.useDoc();
49
- const rootDocumentMeta = DocumentContext.useDocumentContext('DynamicComponent', (state)=>state.rootDocumentMeta);
50
- const { edit: { components: rootComponents } } = useDocumentLayout.useDocumentLayout(rootDocumentMeta.model);
51
- const { edit: { components: relatedComponents } } = useDocumentLayout.useDocumentLayout(document.schema?.uid ?? rootModel);
52
- const components = {
53
- ...rootComponents,
54
- ...relatedComponents
55
- };
47
+ const { currentDocumentMeta } = useDocumentContext.useDocumentContext('DynamicComponent');
48
+ const { edit: { components } } = useDocumentLayout.useDocumentLayout(currentDocumentMeta.model);
56
49
  const collectionType = document.schema?.kind === 'collectionType' ? 'collection-types' : 'single-types';
57
50
  const isInDynamicZone = Field.useDynamicZone('isInDynamicZone', (state)=>state.isInDynamicZone);
58
51
  const isFormDisabled = strapiAdmin.useForm('InputRenderer', (state)=>state.disabled);
@@ -1 +1 @@
1
- {"version":3,"file":"InputRenderer.js","sources":["../../../../../admin/src/pages/EditView/components/InputRenderer.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useStrapiApp,\n useForm,\n InputRenderer as FormInputRenderer,\n useField,\n} from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\n\nimport { SINGLE_TYPES } from '../../../constants/collections';\nimport { useDocumentContext } from '../../../features/DocumentContext';\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { useDoc, UseDocument } from '../../../hooks/useDocument';\nimport { useDocumentLayout } from '../../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../../hooks/useLazyComponents';\n\nimport { BlocksInput } from './FormInputs/BlocksInput/BlocksInput';\nimport { ComponentInput } from './FormInputs/Component/Input';\nimport { DynamicZone, useDynamicZone } from './FormInputs/DynamicZone/Field';\nimport { NotAllowedInput } from './FormInputs/NotAllowed';\nimport { RelationsInput } from './FormInputs/Relations/Relations';\nimport { UIDInput } from './FormInputs/UID';\nimport { Wysiwyg } from './FormInputs/Wysiwyg/Field';\n\nimport type { EditFieldLayout } from '../../../hooks/useDocumentLayout';\nimport type { Schema } from '@strapi/types';\nimport type { DistributiveOmit } from 'react-redux';\n\ntype InputRendererProps = DistributiveOmit<EditFieldLayout, 'size'> & {\n document: ReturnType<UseDocument>;\n};\n\n/**\n * @internal\n *\n * @description An abstraction around the regular form input renderer designed\n * specifically to be used in the EditView of the content-manager this understands\n * the complete EditFieldLayout and will handle RBAC conditions and rendering CM specific\n * components such as Blocks / Relations.\n */\nconst InputRenderer = ({ visible, hint: providedHint, document, ...props }: InputRendererProps) => {\n const { model: rootModel } = useDoc();\n const rootDocumentMeta = useDocumentContext(\n 'DynamicComponent',\n (state) => state.rootDocumentMeta\n );\n const {\n edit: { components: rootComponents },\n } = useDocumentLayout(rootDocumentMeta.model);\n const {\n edit: { components: relatedComponents },\n } = useDocumentLayout(document.schema?.uid ?? rootModel);\n const components = { ...rootComponents, ...relatedComponents };\n\n const collectionType =\n document.schema?.kind === 'collectionType' ? 'collection-types' : 'single-types';\n\n const isInDynamicZone = useDynamicZone('isInDynamicZone', (state) => state.isInDynamicZone);\n\n const isFormDisabled = useForm('InputRenderer', (state) => state.disabled);\n const canCreateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canCreateFields);\n const canReadFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canReadFields);\n const canUpdateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUpdateFields);\n const canUserAction = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUserAction);\n\n let idToCheck = document.document?.documentId;\n if (collectionType === SINGLE_TYPES) {\n idToCheck = document?.document?.documentId;\n }\n\n const editableFields = idToCheck ? canUpdateFields : canCreateFields;\n const readableFields = idToCheck ? canReadFields : canCreateFields;\n\n /**\n * Component fields are always readable and editable,\n * however the fields within them may not be.\n */\n const canUserReadField = canUserAction(props.name, readableFields, props.type);\n const canUserEditField = canUserAction(props.name, editableFields, props.type);\n\n const fields = useStrapiApp('InputRenderer', (app) => app.fields);\n const { lazyComponentStore } = useLazyComponents(\n attributeHasCustomFieldProperty(props.attribute) ? [props.attribute.customField] : undefined\n );\n\n const hint = useFieldHint(providedHint, props.attribute);\n\n // We pass field in case of Custom Fields to keep backward compatibility\n const field = useField(props.name);\n\n if (!visible) {\n return null;\n }\n\n /**\n * If the user can't read the field then we don't want to ever render it.\n */\n if (!canUserReadField && !isInDynamicZone) {\n return <NotAllowedInput hint={hint} {...props} />;\n }\n\n const fieldIsDisabled =\n (!canUserEditField && !isInDynamicZone) || props.disabled || isFormDisabled;\n\n /**\n * Because a custom field has a unique prop but the type could be confused with either\n * the useField hook or the type of the field we need to handle it separately and first.\n */\n if (attributeHasCustomFieldProperty(props.attribute)) {\n const CustomInput = lazyComponentStore[props.attribute.customField];\n\n if (CustomInput) {\n // @ts-expect-error – TODO: fix this type error in the useLazyComponents hook.\n return <CustomInput {...props} {...field} hint={hint} disabled={fieldIsDisabled} />;\n }\n\n return (\n <FormInputRenderer\n {...props}\n hint={hint}\n // @ts-expect-error – this workaround lets us display that the custom field is missing.\n type={props.attribute.customField}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * This is where we handle ONLY the fields from the `useLibrary` hook.\n */\n const addedInputTypes = Object.keys(fields);\n if (!attributeHasCustomFieldProperty(props.attribute) && addedInputTypes.includes(props.type)) {\n const CustomInput = fields[props.type];\n // @ts-expect-error – TODO: fix this type error in the useLibrary hook.\n return <CustomInput {...props} hint={hint} disabled={fieldIsDisabled} />;\n }\n\n /**\n * These include the content-manager specific fields, failing that we fall back\n * to the more generic form input renderer.\n */\n switch (props.type) {\n case 'blocks':\n return <BlocksInput {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n case 'component':\n return (\n <ComponentInput\n {...props}\n hint={hint}\n layout={components[props.attribute.component].layout}\n disabled={fieldIsDisabled}\n >\n {(inputProps) => <InputRenderer {...inputProps} />}\n </ComponentInput>\n );\n case 'dynamiczone':\n return <DynamicZone {...props} hint={hint} disabled={fieldIsDisabled} />;\n case 'relation':\n return <RelationsInput {...props} hint={hint} disabled={fieldIsDisabled} />;\n case 'richtext':\n return <Wysiwyg {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n case 'uid':\n return <UIDInput {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n /**\n * Enumerations are a special case because they require options.\n */\n case 'enumeration':\n return (\n <FormInputRenderer\n {...props}\n hint={hint}\n options={props.attribute.enum.map((value) => ({ value }))}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n default:\n // These props are not needed for the generic form input renderer.\n const { unique: _unique, mainField: _mainField, ...restProps } = props;\n return (\n <FormInputRenderer\n {...restProps}\n hint={hint}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n }\n};\n\nconst attributeHasCustomFieldProperty = (\n attribute: Schema.Attribute.AnyAttribute\n): attribute is Schema.Attribute.AnyAttribute & Schema.Attribute.CustomField<string> =>\n 'customField' in attribute && typeof attribute.customField === 'string';\n\nconst useFieldHint = (\n hint: React.ReactNode = undefined,\n attribute: Schema.Attribute.AnyAttribute\n) => {\n const { formatMessage } = useIntl();\n\n const { maximum, minimum } = getMinMax(attribute);\n\n if (!maximum && !minimum) {\n return hint;\n }\n\n const units = !['biginteger', 'integer', 'number', 'dynamiczone', 'component'].includes(\n attribute.type\n )\n ? formatMessage(\n {\n id: 'content-manager.form.Input.hint.character.unit',\n defaultMessage: '{maxValue, plural, one { character} other { characters}}',\n },\n {\n maxValue: Math.max(minimum || 0, maximum || 0),\n }\n )\n : null;\n\n const hasMinAndMax = typeof minimum === 'number' && typeof maximum === 'number';\n\n return formatMessage(\n {\n id: 'content-manager.form.Input.hint.text',\n defaultMessage:\n '{min, select, undefined {} other {min. {min}}}{divider}{max, select, undefined {} other {max. {max}}}{unit}{br}{description}',\n },\n {\n min: minimum,\n max: maximum,\n description: hint,\n unit: units,\n divider: hasMinAndMax\n ? formatMessage({\n id: 'content-manager.form.Input.hint.minMaxDivider',\n defaultMessage: ' / ',\n })\n : null,\n br: <br />,\n }\n );\n};\n\nconst getMinMax = (attribute: Schema.Attribute.AnyAttribute) => {\n if ('min' in attribute || 'max' in attribute) {\n return {\n maximum: !Number.isNaN(Number(attribute.max)) ? Number(attribute.max) : undefined,\n minimum: !Number.isNaN(Number(attribute.min)) ? Number(attribute.min) : undefined,\n };\n } else if ('maxLength' in attribute || 'minLength' in attribute) {\n return { maximum: attribute.maxLength, minimum: attribute.minLength };\n } else {\n return { maximum: undefined, minimum: undefined };\n }\n};\n\nconst MemoizedInputRenderer = React.memo(InputRenderer);\n\nexport type { InputRendererProps };\nexport { MemoizedInputRenderer as InputRenderer, useFieldHint };\n"],"names":["InputRenderer","visible","hint","providedHint","document","props","model","rootModel","useDoc","rootDocumentMeta","useDocumentContext","state","edit","components","rootComponents","useDocumentLayout","relatedComponents","schema","uid","collectionType","kind","isInDynamicZone","useDynamicZone","isFormDisabled","useForm","disabled","canCreateFields","useDocumentRBAC","rbac","canReadFields","canUpdateFields","canUserAction","idToCheck","documentId","SINGLE_TYPES","editableFields","readableFields","canUserReadField","name","type","canUserEditField","fields","useStrapiApp","app","lazyComponentStore","useLazyComponents","attributeHasCustomFieldProperty","attribute","customField","undefined","useFieldHint","field","useField","_jsx","NotAllowedInput","fieldIsDisabled","CustomInput","FormInputRenderer","addedInputTypes","Object","keys","includes","BlocksInput","ComponentInput","layout","component","inputProps","DynamicZone","RelationsInput","Wysiwyg","UIDInput","options","enum","map","value","unique","_unique","mainField","_mainField","restProps","formatMessage","useIntl","maximum","minimum","getMinMax","units","id","defaultMessage","maxValue","Math","max","hasMinAndMax","min","description","unit","divider","br","Number","isNaN","maxLength","minLength","MemoizedInputRenderer","React","memo"],"mappings":"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"}
1
+ {"version":3,"file":"InputRenderer.js","sources":["../../../../../admin/src/pages/EditView/components/InputRenderer.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useStrapiApp,\n useForm,\n InputRenderer as FormInputRenderer,\n useField,\n} from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\n\nimport { SINGLE_TYPES } from '../../../constants/collections';\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { type UseDocument } from '../../../hooks/useDocument';\nimport { useDocumentContext } from '../../../hooks/useDocumentContext';\nimport { useDocumentLayout } from '../../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../../hooks/useLazyComponents';\n\nimport { BlocksInput } from './FormInputs/BlocksInput/BlocksInput';\nimport { ComponentInput } from './FormInputs/Component/Input';\nimport { DynamicZone, useDynamicZone } from './FormInputs/DynamicZone/Field';\nimport { NotAllowedInput } from './FormInputs/NotAllowed';\nimport { RelationsInput } from './FormInputs/Relations/Relations';\nimport { UIDInput } from './FormInputs/UID';\nimport { Wysiwyg } from './FormInputs/Wysiwyg/Field';\n\nimport type { EditFieldLayout } from '../../../hooks/useDocumentLayout';\nimport type { Schema } from '@strapi/types';\nimport type { DistributiveOmit } from 'react-redux';\n\ntype InputRendererProps = DistributiveOmit<EditFieldLayout, 'size'> & {\n document: ReturnType<UseDocument>;\n};\n\n/**\n * @internal\n *\n * @description An abstraction around the regular form input renderer designed\n * specifically to be used in the EditView of the content-manager this understands\n * the complete EditFieldLayout and will handle RBAC conditions and rendering CM specific\n * components such as Blocks / Relations.\n */\nconst InputRenderer = ({ visible, hint: providedHint, document, ...props }: InputRendererProps) => {\n const { currentDocumentMeta } = useDocumentContext('DynamicComponent');\n const {\n edit: { components },\n } = useDocumentLayout(currentDocumentMeta.model);\n\n const collectionType =\n document.schema?.kind === 'collectionType' ? 'collection-types' : 'single-types';\n\n const isInDynamicZone = useDynamicZone('isInDynamicZone', (state) => state.isInDynamicZone);\n\n const isFormDisabled = useForm('InputRenderer', (state) => state.disabled);\n const canCreateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canCreateFields);\n const canReadFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canReadFields);\n const canUpdateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUpdateFields);\n const canUserAction = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUserAction);\n\n let idToCheck = document.document?.documentId;\n if (collectionType === SINGLE_TYPES) {\n idToCheck = document?.document?.documentId;\n }\n\n const editableFields = idToCheck ? canUpdateFields : canCreateFields;\n const readableFields = idToCheck ? canReadFields : canCreateFields;\n\n /**\n * Component fields are always readable and editable,\n * however the fields within them may not be.\n */\n const canUserReadField = canUserAction(props.name, readableFields, props.type);\n const canUserEditField = canUserAction(props.name, editableFields, props.type);\n\n const fields = useStrapiApp('InputRenderer', (app) => app.fields);\n const { lazyComponentStore } = useLazyComponents(\n attributeHasCustomFieldProperty(props.attribute) ? [props.attribute.customField] : undefined\n );\n\n const hint = useFieldHint(providedHint, props.attribute);\n\n // We pass field in case of Custom Fields to keep backward compatibility\n const field = useField(props.name);\n\n if (!visible) {\n return null;\n }\n\n /**\n * If the user can't read the field then we don't want to ever render it.\n */\n if (!canUserReadField && !isInDynamicZone) {\n return <NotAllowedInput hint={hint} {...props} />;\n }\n\n const fieldIsDisabled =\n (!canUserEditField && !isInDynamicZone) || props.disabled || isFormDisabled;\n\n /**\n * Because a custom field has a unique prop but the type could be confused with either\n * the useField hook or the type of the field we need to handle it separately and first.\n */\n if (attributeHasCustomFieldProperty(props.attribute)) {\n const CustomInput = lazyComponentStore[props.attribute.customField];\n\n if (CustomInput) {\n // @ts-expect-error – TODO: fix this type error in the useLazyComponents hook.\n return <CustomInput {...props} {...field} hint={hint} disabled={fieldIsDisabled} />;\n }\n\n return (\n <FormInputRenderer\n {...props}\n hint={hint}\n // @ts-expect-error – this workaround lets us display that the custom field is missing.\n type={props.attribute.customField}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * This is where we handle ONLY the fields from the `useLibrary` hook.\n */\n const addedInputTypes = Object.keys(fields);\n if (!attributeHasCustomFieldProperty(props.attribute) && addedInputTypes.includes(props.type)) {\n const CustomInput = fields[props.type];\n // @ts-expect-error – TODO: fix this type error in the useLibrary hook.\n return <CustomInput {...props} hint={hint} disabled={fieldIsDisabled} />;\n }\n\n /**\n * These include the content-manager specific fields, failing that we fall back\n * to the more generic form input renderer.\n */\n switch (props.type) {\n case 'blocks':\n return <BlocksInput {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n case 'component':\n return (\n <ComponentInput\n {...props}\n hint={hint}\n layout={components[props.attribute.component].layout}\n disabled={fieldIsDisabled}\n >\n {(inputProps) => <InputRenderer {...inputProps} />}\n </ComponentInput>\n );\n case 'dynamiczone':\n return <DynamicZone {...props} hint={hint} disabled={fieldIsDisabled} />;\n case 'relation':\n return <RelationsInput {...props} hint={hint} disabled={fieldIsDisabled} />;\n case 'richtext':\n return <Wysiwyg {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n case 'uid':\n return <UIDInput {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n /**\n * Enumerations are a special case because they require options.\n */\n case 'enumeration':\n return (\n <FormInputRenderer\n {...props}\n hint={hint}\n options={props.attribute.enum.map((value) => ({ value }))}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n default:\n // These props are not needed for the generic form input renderer.\n const { unique: _unique, mainField: _mainField, ...restProps } = props;\n return (\n <FormInputRenderer\n {...restProps}\n hint={hint}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n }\n};\n\nconst attributeHasCustomFieldProperty = (\n attribute: Schema.Attribute.AnyAttribute\n): attribute is Schema.Attribute.AnyAttribute & Schema.Attribute.CustomField<string> =>\n 'customField' in attribute && typeof attribute.customField === 'string';\n\nconst useFieldHint = (\n hint: React.ReactNode = undefined,\n attribute: Schema.Attribute.AnyAttribute\n) => {\n const { formatMessage } = useIntl();\n\n const { maximum, minimum } = getMinMax(attribute);\n\n if (!maximum && !minimum) {\n return hint;\n }\n\n const units = !['biginteger', 'integer', 'number', 'dynamiczone', 'component'].includes(\n attribute.type\n )\n ? formatMessage(\n {\n id: 'content-manager.form.Input.hint.character.unit',\n defaultMessage: '{maxValue, plural, one { character} other { characters}}',\n },\n {\n maxValue: Math.max(minimum || 0, maximum || 0),\n }\n )\n : null;\n\n const hasMinAndMax = typeof minimum === 'number' && typeof maximum === 'number';\n\n return formatMessage(\n {\n id: 'content-manager.form.Input.hint.text',\n defaultMessage:\n '{min, select, undefined {} other {min. {min}}}{divider}{max, select, undefined {} other {max. {max}}}{unit}{br}{description}',\n },\n {\n min: minimum,\n max: maximum,\n description: hint,\n unit: units,\n divider: hasMinAndMax\n ? formatMessage({\n id: 'content-manager.form.Input.hint.minMaxDivider',\n defaultMessage: ' / ',\n })\n : null,\n br: <br />,\n }\n );\n};\n\nconst getMinMax = (attribute: Schema.Attribute.AnyAttribute) => {\n if ('min' in attribute || 'max' in attribute) {\n return {\n maximum: !Number.isNaN(Number(attribute.max)) ? Number(attribute.max) : undefined,\n minimum: !Number.isNaN(Number(attribute.min)) ? Number(attribute.min) : undefined,\n };\n } else if ('maxLength' in attribute || 'minLength' in attribute) {\n return { maximum: attribute.maxLength, minimum: attribute.minLength };\n } else {\n return { maximum: undefined, minimum: undefined };\n }\n};\n\nconst MemoizedInputRenderer = React.memo(InputRenderer);\n\nexport type { InputRendererProps };\nexport { MemoizedInputRenderer as InputRenderer, useFieldHint };\n"],"names":["InputRenderer","visible","hint","providedHint","document","props","currentDocumentMeta","useDocumentContext","edit","components","useDocumentLayout","model","collectionType","schema","kind","isInDynamicZone","useDynamicZone","state","isFormDisabled","useForm","disabled","canCreateFields","useDocumentRBAC","rbac","canReadFields","canUpdateFields","canUserAction","idToCheck","documentId","SINGLE_TYPES","editableFields","readableFields","canUserReadField","name","type","canUserEditField","fields","useStrapiApp","app","lazyComponentStore","useLazyComponents","attributeHasCustomFieldProperty","attribute","customField","undefined","useFieldHint","field","useField","_jsx","NotAllowedInput","fieldIsDisabled","CustomInput","FormInputRenderer","addedInputTypes","Object","keys","includes","BlocksInput","ComponentInput","layout","component","inputProps","DynamicZone","RelationsInput","Wysiwyg","UIDInput","options","enum","map","value","unique","_unique","mainField","_mainField","restProps","formatMessage","useIntl","maximum","minimum","getMinMax","units","id","defaultMessage","maxValue","Math","max","hasMinAndMax","min","description","unit","divider","br","Number","isNaN","maxLength","minLength","MemoizedInputRenderer","React","memo"],"mappings":"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"}
@@ -3,9 +3,8 @@ import * as React from 'react';
3
3
  import { useForm, useStrapiApp, useField, InputRenderer as InputRenderer$1 } from '@strapi/admin/strapi-admin';
4
4
  import { useIntl } from 'react-intl';
5
5
  import { SINGLE_TYPES } from '../../../constants/collections.mjs';
6
- import { useDocumentContext } from '../../../features/DocumentContext.mjs';
7
6
  import { useDocumentRBAC } from '../../../features/DocumentRBAC.mjs';
8
- import { useDoc } from '../../../hooks/useDocument.mjs';
7
+ import { useDocumentContext } from '../../../hooks/useDocumentContext.mjs';
9
8
  import { useDocumentLayout } from '../../../hooks/useDocumentLayout.mjs';
10
9
  import { useLazyComponents } from '../../../hooks/useLazyComponents.mjs';
11
10
  import { BlocksInput as MemoizedBlocksInput } from './FormInputs/BlocksInput/BlocksInput.mjs';
@@ -24,14 +23,8 @@ import { Wysiwyg as MemoizedWysiwyg } from './FormInputs/Wysiwyg/Field.mjs';
24
23
  * the complete EditFieldLayout and will handle RBAC conditions and rendering CM specific
25
24
  * components such as Blocks / Relations.
26
25
  */ const InputRenderer = ({ visible, hint: providedHint, document, ...props })=>{
27
- const { model: rootModel } = useDoc();
28
- const rootDocumentMeta = useDocumentContext('DynamicComponent', (state)=>state.rootDocumentMeta);
29
- const { edit: { components: rootComponents } } = useDocumentLayout(rootDocumentMeta.model);
30
- const { edit: { components: relatedComponents } } = useDocumentLayout(document.schema?.uid ?? rootModel);
31
- const components = {
32
- ...rootComponents,
33
- ...relatedComponents
34
- };
26
+ const { currentDocumentMeta } = useDocumentContext('DynamicComponent');
27
+ const { edit: { components } } = useDocumentLayout(currentDocumentMeta.model);
35
28
  const collectionType = document.schema?.kind === 'collectionType' ? 'collection-types' : 'single-types';
36
29
  const isInDynamicZone = useDynamicZone('isInDynamicZone', (state)=>state.isInDynamicZone);
37
30
  const isFormDisabled = useForm('InputRenderer', (state)=>state.disabled);
@@ -1 +1 @@
1
- {"version":3,"file":"InputRenderer.mjs","sources":["../../../../../admin/src/pages/EditView/components/InputRenderer.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useStrapiApp,\n useForm,\n InputRenderer as FormInputRenderer,\n useField,\n} from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\n\nimport { SINGLE_TYPES } from '../../../constants/collections';\nimport { useDocumentContext } from '../../../features/DocumentContext';\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { useDoc, UseDocument } from '../../../hooks/useDocument';\nimport { useDocumentLayout } from '../../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../../hooks/useLazyComponents';\n\nimport { BlocksInput } from './FormInputs/BlocksInput/BlocksInput';\nimport { ComponentInput } from './FormInputs/Component/Input';\nimport { DynamicZone, useDynamicZone } from './FormInputs/DynamicZone/Field';\nimport { NotAllowedInput } from './FormInputs/NotAllowed';\nimport { RelationsInput } from './FormInputs/Relations/Relations';\nimport { UIDInput } from './FormInputs/UID';\nimport { Wysiwyg } from './FormInputs/Wysiwyg/Field';\n\nimport type { EditFieldLayout } from '../../../hooks/useDocumentLayout';\nimport type { Schema } from '@strapi/types';\nimport type { DistributiveOmit } from 'react-redux';\n\ntype InputRendererProps = DistributiveOmit<EditFieldLayout, 'size'> & {\n document: ReturnType<UseDocument>;\n};\n\n/**\n * @internal\n *\n * @description An abstraction around the regular form input renderer designed\n * specifically to be used in the EditView of the content-manager this understands\n * the complete EditFieldLayout and will handle RBAC conditions and rendering CM specific\n * components such as Blocks / Relations.\n */\nconst InputRenderer = ({ visible, hint: providedHint, document, ...props }: InputRendererProps) => {\n const { model: rootModel } = useDoc();\n const rootDocumentMeta = useDocumentContext(\n 'DynamicComponent',\n (state) => state.rootDocumentMeta\n );\n const {\n edit: { components: rootComponents },\n } = useDocumentLayout(rootDocumentMeta.model);\n const {\n edit: { components: relatedComponents },\n } = useDocumentLayout(document.schema?.uid ?? rootModel);\n const components = { ...rootComponents, ...relatedComponents };\n\n const collectionType =\n document.schema?.kind === 'collectionType' ? 'collection-types' : 'single-types';\n\n const isInDynamicZone = useDynamicZone('isInDynamicZone', (state) => state.isInDynamicZone);\n\n const isFormDisabled = useForm('InputRenderer', (state) => state.disabled);\n const canCreateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canCreateFields);\n const canReadFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canReadFields);\n const canUpdateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUpdateFields);\n const canUserAction = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUserAction);\n\n let idToCheck = document.document?.documentId;\n if (collectionType === SINGLE_TYPES) {\n idToCheck = document?.document?.documentId;\n }\n\n const editableFields = idToCheck ? canUpdateFields : canCreateFields;\n const readableFields = idToCheck ? canReadFields : canCreateFields;\n\n /**\n * Component fields are always readable and editable,\n * however the fields within them may not be.\n */\n const canUserReadField = canUserAction(props.name, readableFields, props.type);\n const canUserEditField = canUserAction(props.name, editableFields, props.type);\n\n const fields = useStrapiApp('InputRenderer', (app) => app.fields);\n const { lazyComponentStore } = useLazyComponents(\n attributeHasCustomFieldProperty(props.attribute) ? [props.attribute.customField] : undefined\n );\n\n const hint = useFieldHint(providedHint, props.attribute);\n\n // We pass field in case of Custom Fields to keep backward compatibility\n const field = useField(props.name);\n\n if (!visible) {\n return null;\n }\n\n /**\n * If the user can't read the field then we don't want to ever render it.\n */\n if (!canUserReadField && !isInDynamicZone) {\n return <NotAllowedInput hint={hint} {...props} />;\n }\n\n const fieldIsDisabled =\n (!canUserEditField && !isInDynamicZone) || props.disabled || isFormDisabled;\n\n /**\n * Because a custom field has a unique prop but the type could be confused with either\n * the useField hook or the type of the field we need to handle it separately and first.\n */\n if (attributeHasCustomFieldProperty(props.attribute)) {\n const CustomInput = lazyComponentStore[props.attribute.customField];\n\n if (CustomInput) {\n // @ts-expect-error – TODO: fix this type error in the useLazyComponents hook.\n return <CustomInput {...props} {...field} hint={hint} disabled={fieldIsDisabled} />;\n }\n\n return (\n <FormInputRenderer\n {...props}\n hint={hint}\n // @ts-expect-error – this workaround lets us display that the custom field is missing.\n type={props.attribute.customField}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * This is where we handle ONLY the fields from the `useLibrary` hook.\n */\n const addedInputTypes = Object.keys(fields);\n if (!attributeHasCustomFieldProperty(props.attribute) && addedInputTypes.includes(props.type)) {\n const CustomInput = fields[props.type];\n // @ts-expect-error – TODO: fix this type error in the useLibrary hook.\n return <CustomInput {...props} hint={hint} disabled={fieldIsDisabled} />;\n }\n\n /**\n * These include the content-manager specific fields, failing that we fall back\n * to the more generic form input renderer.\n */\n switch (props.type) {\n case 'blocks':\n return <BlocksInput {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n case 'component':\n return (\n <ComponentInput\n {...props}\n hint={hint}\n layout={components[props.attribute.component].layout}\n disabled={fieldIsDisabled}\n >\n {(inputProps) => <InputRenderer {...inputProps} />}\n </ComponentInput>\n );\n case 'dynamiczone':\n return <DynamicZone {...props} hint={hint} disabled={fieldIsDisabled} />;\n case 'relation':\n return <RelationsInput {...props} hint={hint} disabled={fieldIsDisabled} />;\n case 'richtext':\n return <Wysiwyg {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n case 'uid':\n return <UIDInput {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n /**\n * Enumerations are a special case because they require options.\n */\n case 'enumeration':\n return (\n <FormInputRenderer\n {...props}\n hint={hint}\n options={props.attribute.enum.map((value) => ({ value }))}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n default:\n // These props are not needed for the generic form input renderer.\n const { unique: _unique, mainField: _mainField, ...restProps } = props;\n return (\n <FormInputRenderer\n {...restProps}\n hint={hint}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n }\n};\n\nconst attributeHasCustomFieldProperty = (\n attribute: Schema.Attribute.AnyAttribute\n): attribute is Schema.Attribute.AnyAttribute & Schema.Attribute.CustomField<string> =>\n 'customField' in attribute && typeof attribute.customField === 'string';\n\nconst useFieldHint = (\n hint: React.ReactNode = undefined,\n attribute: Schema.Attribute.AnyAttribute\n) => {\n const { formatMessage } = useIntl();\n\n const { maximum, minimum } = getMinMax(attribute);\n\n if (!maximum && !minimum) {\n return hint;\n }\n\n const units = !['biginteger', 'integer', 'number', 'dynamiczone', 'component'].includes(\n attribute.type\n )\n ? formatMessage(\n {\n id: 'content-manager.form.Input.hint.character.unit',\n defaultMessage: '{maxValue, plural, one { character} other { characters}}',\n },\n {\n maxValue: Math.max(minimum || 0, maximum || 0),\n }\n )\n : null;\n\n const hasMinAndMax = typeof minimum === 'number' && typeof maximum === 'number';\n\n return formatMessage(\n {\n id: 'content-manager.form.Input.hint.text',\n defaultMessage:\n '{min, select, undefined {} other {min. {min}}}{divider}{max, select, undefined {} other {max. {max}}}{unit}{br}{description}',\n },\n {\n min: minimum,\n max: maximum,\n description: hint,\n unit: units,\n divider: hasMinAndMax\n ? formatMessage({\n id: 'content-manager.form.Input.hint.minMaxDivider',\n defaultMessage: ' / ',\n })\n : null,\n br: <br />,\n }\n );\n};\n\nconst getMinMax = (attribute: Schema.Attribute.AnyAttribute) => {\n if ('min' in attribute || 'max' in attribute) {\n return {\n maximum: !Number.isNaN(Number(attribute.max)) ? Number(attribute.max) : undefined,\n minimum: !Number.isNaN(Number(attribute.min)) ? Number(attribute.min) : undefined,\n };\n } else if ('maxLength' in attribute || 'minLength' in attribute) {\n return { maximum: attribute.maxLength, minimum: attribute.minLength };\n } else {\n return { maximum: undefined, minimum: undefined };\n }\n};\n\nconst MemoizedInputRenderer = React.memo(InputRenderer);\n\nexport type { InputRendererProps };\nexport { MemoizedInputRenderer as InputRenderer, useFieldHint };\n"],"names":["InputRenderer","visible","hint","providedHint","document","props","model","rootModel","useDoc","rootDocumentMeta","useDocumentContext","state","edit","components","rootComponents","useDocumentLayout","relatedComponents","schema","uid","collectionType","kind","isInDynamicZone","useDynamicZone","isFormDisabled","useForm","disabled","canCreateFields","useDocumentRBAC","rbac","canReadFields","canUpdateFields","canUserAction","idToCheck","documentId","SINGLE_TYPES","editableFields","readableFields","canUserReadField","name","type","canUserEditField","fields","useStrapiApp","app","lazyComponentStore","useLazyComponents","attributeHasCustomFieldProperty","attribute","customField","undefined","useFieldHint","field","useField","_jsx","NotAllowedInput","fieldIsDisabled","CustomInput","FormInputRenderer","addedInputTypes","Object","keys","includes","BlocksInput","ComponentInput","layout","component","inputProps","DynamicZone","RelationsInput","Wysiwyg","UIDInput","options","enum","map","value","unique","_unique","mainField","_mainField","restProps","formatMessage","useIntl","maximum","minimum","getMinMax","units","id","defaultMessage","maxValue","Math","max","hasMinAndMax","min","description","unit","divider","br","Number","isNaN","maxLength","minLength","MemoizedInputRenderer","React","memo"],"mappings":"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"}
1
+ {"version":3,"file":"InputRenderer.mjs","sources":["../../../../../admin/src/pages/EditView/components/InputRenderer.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n useStrapiApp,\n useForm,\n InputRenderer as FormInputRenderer,\n useField,\n} from '@strapi/admin/strapi-admin';\nimport { useIntl } from 'react-intl';\n\nimport { SINGLE_TYPES } from '../../../constants/collections';\nimport { useDocumentRBAC } from '../../../features/DocumentRBAC';\nimport { type UseDocument } from '../../../hooks/useDocument';\nimport { useDocumentContext } from '../../../hooks/useDocumentContext';\nimport { useDocumentLayout } from '../../../hooks/useDocumentLayout';\nimport { useLazyComponents } from '../../../hooks/useLazyComponents';\n\nimport { BlocksInput } from './FormInputs/BlocksInput/BlocksInput';\nimport { ComponentInput } from './FormInputs/Component/Input';\nimport { DynamicZone, useDynamicZone } from './FormInputs/DynamicZone/Field';\nimport { NotAllowedInput } from './FormInputs/NotAllowed';\nimport { RelationsInput } from './FormInputs/Relations/Relations';\nimport { UIDInput } from './FormInputs/UID';\nimport { Wysiwyg } from './FormInputs/Wysiwyg/Field';\n\nimport type { EditFieldLayout } from '../../../hooks/useDocumentLayout';\nimport type { Schema } from '@strapi/types';\nimport type { DistributiveOmit } from 'react-redux';\n\ntype InputRendererProps = DistributiveOmit<EditFieldLayout, 'size'> & {\n document: ReturnType<UseDocument>;\n};\n\n/**\n * @internal\n *\n * @description An abstraction around the regular form input renderer designed\n * specifically to be used in the EditView of the content-manager this understands\n * the complete EditFieldLayout and will handle RBAC conditions and rendering CM specific\n * components such as Blocks / Relations.\n */\nconst InputRenderer = ({ visible, hint: providedHint, document, ...props }: InputRendererProps) => {\n const { currentDocumentMeta } = useDocumentContext('DynamicComponent');\n const {\n edit: { components },\n } = useDocumentLayout(currentDocumentMeta.model);\n\n const collectionType =\n document.schema?.kind === 'collectionType' ? 'collection-types' : 'single-types';\n\n const isInDynamicZone = useDynamicZone('isInDynamicZone', (state) => state.isInDynamicZone);\n\n const isFormDisabled = useForm('InputRenderer', (state) => state.disabled);\n const canCreateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canCreateFields);\n const canReadFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canReadFields);\n const canUpdateFields = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUpdateFields);\n const canUserAction = useDocumentRBAC('InputRenderer', (rbac) => rbac.canUserAction);\n\n let idToCheck = document.document?.documentId;\n if (collectionType === SINGLE_TYPES) {\n idToCheck = document?.document?.documentId;\n }\n\n const editableFields = idToCheck ? canUpdateFields : canCreateFields;\n const readableFields = idToCheck ? canReadFields : canCreateFields;\n\n /**\n * Component fields are always readable and editable,\n * however the fields within them may not be.\n */\n const canUserReadField = canUserAction(props.name, readableFields, props.type);\n const canUserEditField = canUserAction(props.name, editableFields, props.type);\n\n const fields = useStrapiApp('InputRenderer', (app) => app.fields);\n const { lazyComponentStore } = useLazyComponents(\n attributeHasCustomFieldProperty(props.attribute) ? [props.attribute.customField] : undefined\n );\n\n const hint = useFieldHint(providedHint, props.attribute);\n\n // We pass field in case of Custom Fields to keep backward compatibility\n const field = useField(props.name);\n\n if (!visible) {\n return null;\n }\n\n /**\n * If the user can't read the field then we don't want to ever render it.\n */\n if (!canUserReadField && !isInDynamicZone) {\n return <NotAllowedInput hint={hint} {...props} />;\n }\n\n const fieldIsDisabled =\n (!canUserEditField && !isInDynamicZone) || props.disabled || isFormDisabled;\n\n /**\n * Because a custom field has a unique prop but the type could be confused with either\n * the useField hook or the type of the field we need to handle it separately and first.\n */\n if (attributeHasCustomFieldProperty(props.attribute)) {\n const CustomInput = lazyComponentStore[props.attribute.customField];\n\n if (CustomInput) {\n // @ts-expect-error – TODO: fix this type error in the useLazyComponents hook.\n return <CustomInput {...props} {...field} hint={hint} disabled={fieldIsDisabled} />;\n }\n\n return (\n <FormInputRenderer\n {...props}\n hint={hint}\n // @ts-expect-error – this workaround lets us display that the custom field is missing.\n type={props.attribute.customField}\n disabled={fieldIsDisabled}\n />\n );\n }\n\n /**\n * This is where we handle ONLY the fields from the `useLibrary` hook.\n */\n const addedInputTypes = Object.keys(fields);\n if (!attributeHasCustomFieldProperty(props.attribute) && addedInputTypes.includes(props.type)) {\n const CustomInput = fields[props.type];\n // @ts-expect-error – TODO: fix this type error in the useLibrary hook.\n return <CustomInput {...props} hint={hint} disabled={fieldIsDisabled} />;\n }\n\n /**\n * These include the content-manager specific fields, failing that we fall back\n * to the more generic form input renderer.\n */\n switch (props.type) {\n case 'blocks':\n return <BlocksInput {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n case 'component':\n return (\n <ComponentInput\n {...props}\n hint={hint}\n layout={components[props.attribute.component].layout}\n disabled={fieldIsDisabled}\n >\n {(inputProps) => <InputRenderer {...inputProps} />}\n </ComponentInput>\n );\n case 'dynamiczone':\n return <DynamicZone {...props} hint={hint} disabled={fieldIsDisabled} />;\n case 'relation':\n return <RelationsInput {...props} hint={hint} disabled={fieldIsDisabled} />;\n case 'richtext':\n return <Wysiwyg {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n case 'uid':\n return <UIDInput {...props} hint={hint} type={props.type} disabled={fieldIsDisabled} />;\n /**\n * Enumerations are a special case because they require options.\n */\n case 'enumeration':\n return (\n <FormInputRenderer\n {...props}\n hint={hint}\n options={props.attribute.enum.map((value) => ({ value }))}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n default:\n // These props are not needed for the generic form input renderer.\n const { unique: _unique, mainField: _mainField, ...restProps } = props;\n return (\n <FormInputRenderer\n {...restProps}\n hint={hint}\n // @ts-expect-error – Temp workaround so we don't forget custom-fields don't work!\n type={props.customField ? 'custom-field' : props.type}\n disabled={fieldIsDisabled}\n />\n );\n }\n};\n\nconst attributeHasCustomFieldProperty = (\n attribute: Schema.Attribute.AnyAttribute\n): attribute is Schema.Attribute.AnyAttribute & Schema.Attribute.CustomField<string> =>\n 'customField' in attribute && typeof attribute.customField === 'string';\n\nconst useFieldHint = (\n hint: React.ReactNode = undefined,\n attribute: Schema.Attribute.AnyAttribute\n) => {\n const { formatMessage } = useIntl();\n\n const { maximum, minimum } = getMinMax(attribute);\n\n if (!maximum && !minimum) {\n return hint;\n }\n\n const units = !['biginteger', 'integer', 'number', 'dynamiczone', 'component'].includes(\n attribute.type\n )\n ? formatMessage(\n {\n id: 'content-manager.form.Input.hint.character.unit',\n defaultMessage: '{maxValue, plural, one { character} other { characters}}',\n },\n {\n maxValue: Math.max(minimum || 0, maximum || 0),\n }\n )\n : null;\n\n const hasMinAndMax = typeof minimum === 'number' && typeof maximum === 'number';\n\n return formatMessage(\n {\n id: 'content-manager.form.Input.hint.text',\n defaultMessage:\n '{min, select, undefined {} other {min. {min}}}{divider}{max, select, undefined {} other {max. {max}}}{unit}{br}{description}',\n },\n {\n min: minimum,\n max: maximum,\n description: hint,\n unit: units,\n divider: hasMinAndMax\n ? formatMessage({\n id: 'content-manager.form.Input.hint.minMaxDivider',\n defaultMessage: ' / ',\n })\n : null,\n br: <br />,\n }\n );\n};\n\nconst getMinMax = (attribute: Schema.Attribute.AnyAttribute) => {\n if ('min' in attribute || 'max' in attribute) {\n return {\n maximum: !Number.isNaN(Number(attribute.max)) ? Number(attribute.max) : undefined,\n minimum: !Number.isNaN(Number(attribute.min)) ? Number(attribute.min) : undefined,\n };\n } else if ('maxLength' in attribute || 'minLength' in attribute) {\n return { maximum: attribute.maxLength, minimum: attribute.minLength };\n } else {\n return { maximum: undefined, minimum: undefined };\n }\n};\n\nconst MemoizedInputRenderer = React.memo(InputRenderer);\n\nexport type { InputRendererProps };\nexport { MemoizedInputRenderer as InputRenderer, useFieldHint };\n"],"names":["InputRenderer","visible","hint","providedHint","document","props","currentDocumentMeta","useDocumentContext","edit","components","useDocumentLayout","model","collectionType","schema","kind","isInDynamicZone","useDynamicZone","state","isFormDisabled","useForm","disabled","canCreateFields","useDocumentRBAC","rbac","canReadFields","canUpdateFields","canUserAction","idToCheck","documentId","SINGLE_TYPES","editableFields","readableFields","canUserReadField","name","type","canUserEditField","fields","useStrapiApp","app","lazyComponentStore","useLazyComponents","attributeHasCustomFieldProperty","attribute","customField","undefined","useFieldHint","field","useField","_jsx","NotAllowedInput","fieldIsDisabled","CustomInput","FormInputRenderer","addedInputTypes","Object","keys","includes","BlocksInput","ComponentInput","layout","component","inputProps","DynamicZone","RelationsInput","Wysiwyg","UIDInput","options","enum","map","value","unique","_unique","mainField","_mainField","restProps","formatMessage","useIntl","maximum","minimum","getMinMax","units","id","defaultMessage","maxValue","Math","max","hasMinAndMax","min","description","unit","divider","br","Number","isNaN","maxLength","minLength","MemoizedInputRenderer","React","memo"],"mappings":"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"}
@@ -10,7 +10,6 @@ var reactIntl = require('react-intl');
10
10
  var reactRouterDom = require('react-router-dom');
11
11
  var styledComponents = require('styled-components');
12
12
  var InjectionZone = require('../../components/InjectionZone.js');
13
- var DocumentContext = require('../../features/DocumentContext.js');
14
13
  var DocumentActions = require('../../pages/EditView/components/DocumentActions.js');
15
14
  var DocumentStatus = require('../../pages/EditView/components/DocumentStatus.js');
16
15
  var EditViewPage = require('../../pages/EditView/EditViewPage.js');
@@ -132,8 +131,8 @@ const PreviewTabs = ()=>{
132
131
  const document = Preview.usePreviewContext('PreviewHeader', (state)=>state.document);
133
132
  const schema = Preview.usePreviewContext('PreviewHeader', (state)=>state.schema);
134
133
  const meta = Preview.usePreviewContext('PreviewHeader', (state)=>state.meta);
134
+ Preview.usePreviewContext('PreviewHeader', (state)=>state.onPreview);
135
135
  const plugins = strapiAdmin.useStrapiApp('PreviewHeader', (state)=>state.plugins);
136
- const onPreview = DocumentContext.useDocumentContext('PreviewHeader', (state)=>state.onPreview);
137
136
  const [{ query }] = strapiAdmin.useQueryParams();
138
137
  const { formatMessage } = reactIntl.useIntl();
139
138
  const { toggleNotification } = strapiAdmin.useNotification();
@@ -155,9 +154,7 @@ const PreviewTabs = ()=>{
155
154
  model: schema.uid,
156
155
  documentId: document.documentId,
157
156
  document,
158
- meta,
159
- onPreview,
160
- fromPreview: true
157
+ meta
161
158
  };
162
159
  return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
163
160
  height: "48px",
@@ -1 +1 @@
1
- {"version":3,"file":"PreviewHeader.js","sources":["../../../../admin/src/preview/components/PreviewHeader.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n DescriptionComponentRenderer,\n useClipboard,\n useHistory,\n useNotification,\n useQueryParams,\n useStrapiApp,\n} from '@strapi/admin/strapi-admin';\nimport { IconButton, Tabs, Typography, Flex } from '@strapi/design-system';\nimport { Cross, Link as LinkIcon } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, type To } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { InjectionZone } from '../../components/InjectionZone';\nimport { useDocumentContext } from '../../features/DocumentContext';\nimport { DocumentActionButton } from '../../pages/EditView/components/DocumentActions';\nimport { DocumentStatus } from '../../pages/EditView/components/DocumentStatus';\nimport { getDocumentStatus } from '../../pages/EditView/EditViewPage';\nimport { usePreviewContext } from '../pages/Preview';\n\nimport type { ContentManagerPlugin, DocumentActionProps } from '../../content-manager';\n\n/* -------------------------------------------------------------------------------------------------\n * ClosePreviewButton\n * -----------------------------------------------------------------------------------------------*/\n\nconst ClosePreviewButton = () => {\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n }>();\n const { formatMessage } = useIntl();\n\n const canGoBack = useHistory('BackButton', (state) => state.canGoBack);\n const goBack = useHistory('BackButton', (state) => state.goBack);\n const history = useHistory('BackButton', (state) => state.history);\n const locationIndex = useHistory('BackButton', (state) => state.currentLocationIndex);\n\n /**\n * Get the link destination from the history.\n * Rely on a fallback (the parent edit view page) if there's no page to go back .\n */\n const historyTo = canGoBack ? history.at(locationIndex - 2) : undefined;\n const fallback = {\n pathname: '..',\n search: stringify(query, { encode: false }),\n } satisfies To;\n const toWithFallback = historyTo ?? fallback;\n\n const handleClick = (e: React.MouseEvent) => {\n if (canGoBack) {\n // Prevent normal link behavior, go back in the history stack instead\n e.preventDefault();\n goBack();\n return;\n }\n\n // Otherwise rely on native link behavior to go back to the edit view. We don't use navigate()\n // here in order to get the relative=\"path\" functionality from the Link component.\n };\n\n return (\n <IconButton\n variant=\"ghost\"\n tag={Link}\n relative=\"path\"\n to={toWithFallback}\n onClick={handleClick}\n label={formatMessage({\n id: 'content-manager.preview.header.close',\n defaultMessage: 'Close preview',\n })}\n >\n <Cross />\n </IconButton>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Status\n * -----------------------------------------------------------------------------------------------*/\n\nconst Status = () => {\n // Get status\n const document = usePreviewContext('PreviewHeader', (state) => state.document);\n const schema = usePreviewContext('PreviewHeader', (state) => state.schema);\n const meta = usePreviewContext('PreviewHeader', (state) => state.meta);\n const hasDraftAndPublished = schema?.options?.draftAndPublish ?? false;\n\n if (!hasDraftAndPublished) {\n return null;\n }\n\n const status = getDocumentStatus(document, meta);\n\n return <DocumentStatus status={status} size=\"XS\" />;\n};\n\nconst PreviewTabs = () => {\n const { formatMessage } = useIntl();\n\n // URL query params\n const [{ query }, setQuery] = useQueryParams<{ status: 'draft' | 'published' }>();\n\n // Get status\n const document = usePreviewContext('PreviewHeader', (state) => state.document);\n const schema = usePreviewContext('PreviewHeader', (state) => state.schema);\n const meta = usePreviewContext('PreviewHeader', (state) => state.meta);\n const hasDraftAndPublish = schema?.options?.draftAndPublish ?? false;\n const documentStatus = getDocumentStatus(document, meta);\n\n const handleTabChange = (status: string) => {\n if (status === 'published' || status === 'draft') {\n setQuery({ status }, 'push', true);\n }\n };\n\n if (!hasDraftAndPublish) {\n return null;\n }\n\n return (\n <Tabs.Root variant=\"simple\" value={query.status || 'draft'} onValueChange={handleTabChange}>\n <Tabs.List\n aria-label={formatMessage({\n id: 'preview.tabs.label',\n defaultMessage: 'Document status',\n })}\n >\n <StatusTab value=\"draft\">\n {formatMessage({\n id: 'content-manager.containers.List.draft',\n defaultMessage: 'draft',\n })}\n </StatusTab>\n <StatusTab value=\"published\" disabled={documentStatus === 'draft'}>\n {formatMessage({\n id: 'content-manager.containers.List.published',\n defaultMessage: 'published',\n })}\n </StatusTab>\n </Tabs.List>\n </Tabs.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PreviewHeader\n * -----------------------------------------------------------------------------------------------*/\n\nconst PreviewHeader = () => {\n const title = usePreviewContext('PreviewHeader', (state) => state.title);\n const document = usePreviewContext('PreviewHeader', (state) => state.document);\n const schema = usePreviewContext('PreviewHeader', (state) => state.schema);\n const meta = usePreviewContext('PreviewHeader', (state) => state.meta);\n const plugins = useStrapiApp('PreviewHeader', (state) => state.plugins);\n const onPreview = useDocumentContext('PreviewHeader', (state) => state.onPreview);\n\n const [{ query }] = useQueryParams<{\n status?: 'draft' | 'published';\n }>();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { copy } = useClipboard();\n\n const handleCopyLink = () => {\n copy(window.location.href);\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.preview.copy.success',\n defaultMessage: 'Copied preview link',\n }),\n type: 'success',\n });\n };\n\n const hasDraftAndPublish = schema.options?.draftAndPublish ?? false;\n const documentActionProps = {\n activeTab: query.status ?? null,\n collectionType: schema.kind === 'collectionType' ? 'collection-types' : 'single-types',\n model: schema.uid,\n documentId: document.documentId,\n document,\n meta,\n onPreview,\n fromPreview: true,\n } satisfies DocumentActionProps;\n\n return (\n <Flex height=\"48px\" gap={4} background=\"neutral0\" borderColor=\"neutral150\" tag=\"header\">\n {/* Title and status */}\n <TitleContainer height=\"100%\" paddingLeft={2} paddingRight={4}>\n <ClosePreviewButton />\n <PreviewTitle\n tag=\"h1\"\n title={title}\n maxWidth=\"200px\"\n fontSize={2}\n paddingLeft={2}\n paddingRight={3}\n fontWeight={600}\n >\n {title}\n </PreviewTitle>\n <Status />\n </TitleContainer>\n\n {/* Tabs and actions */}\n <Flex\n flex={1}\n paddingRight={2}\n gap={2}\n justifyContent={hasDraftAndPublish ? 'space-between' : 'flex-end'}\n >\n <Flex flex=\"1 1 70%\">\n <PreviewTabs />\n </Flex>\n <Flex gap={2}>\n <IconButton\n type=\"button\"\n label={formatMessage({\n id: 'preview.copy.label',\n defaultMessage: 'Copy preview link',\n })}\n onClick={handleCopyLink}\n >\n <LinkIcon />\n </IconButton>\n <InjectionZone area=\"preview.actions\" />\n <DescriptionComponentRenderer\n props={documentActionProps}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getDocumentActions('preview')}\n >\n {(actions) => {\n const filteredActions = actions.filter((action) =>\n [action.position].flat().includes('preview')\n );\n const [primaryAction, secondaryAction] = filteredActions;\n\n if (!primaryAction && !secondaryAction) return null;\n\n // Both actions are available when draft and publish enabled\n if (primaryAction && secondaryAction) {\n return (\n <>\n {/* Save */}\n <DocumentActionButton\n {...secondaryAction}\n variant={secondaryAction.variant || 'secondary'}\n />\n {/* Publish */}\n <DocumentActionButton\n {...primaryAction}\n variant={primaryAction.variant || 'default'}\n />\n </>\n );\n }\n\n // Otherwise we just have the save action\n return (\n <DocumentActionButton\n {...primaryAction}\n variant={primaryAction.variant || 'secondary'}\n />\n );\n }}\n </DescriptionComponentRenderer>\n </Flex>\n </Flex>\n </Flex>\n );\n};\n\nconst PreviewTitle = styled(Typography)`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst StatusTab = styled(Tabs.Trigger)`\n text-transform: uppercase;\n`;\n\nconst TitleContainer = styled(Flex)`\n border-right: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nexport { PreviewHeader };\n"],"names":["ClosePreviewButton","query","useQueryParams","formatMessage","useIntl","canGoBack","useHistory","state","goBack","history","locationIndex","currentLocationIndex","historyTo","at","undefined","fallback","pathname","search","stringify","encode","toWithFallback","handleClick","e","preventDefault","_jsx","IconButton","variant","tag","Link","relative","to","onClick","label","id","defaultMessage","Cross","Status","document","usePreviewContext","schema","meta","hasDraftAndPublished","options","draftAndPublish","status","getDocumentStatus","DocumentStatus","size","PreviewTabs","setQuery","hasDraftAndPublish","documentStatus","handleTabChange","Tabs","Root","value","onValueChange","_jsxs","List","aria-label","StatusTab","disabled","PreviewHeader","title","plugins","useStrapiApp","onPreview","useDocumentContext","toggleNotification","useNotification","copy","useClipboard","handleCopyLink","window","location","href","message","type","documentActionProps","activeTab","collectionType","kind","model","uid","documentId","fromPreview","Flex","height","gap","background","borderColor","TitleContainer","paddingLeft","paddingRight","PreviewTitle","maxWidth","fontSize","fontWeight","flex","justifyContent","LinkIcon","InjectionZone","area","DescriptionComponentRenderer","props","descriptions","apis","getDocumentActions","actions","filteredActions","filter","action","position","flat","includes","primaryAction","secondaryAction","_Fragment","DocumentActionButton","styled","Typography","Trigger","theme","colors","neutral150"],"mappings":"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"}
1
+ {"version":3,"file":"PreviewHeader.js","sources":["../../../../admin/src/preview/components/PreviewHeader.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n DescriptionComponentRenderer,\n useClipboard,\n useHistory,\n useNotification,\n useQueryParams,\n useStrapiApp,\n} from '@strapi/admin/strapi-admin';\nimport { IconButton, Tabs, Typography, Flex } from '@strapi/design-system';\nimport { Cross, Link as LinkIcon } from '@strapi/icons';\nimport { stringify } from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, type To } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { InjectionZone } from '../../components/InjectionZone';\nimport { DocumentActionButton } from '../../pages/EditView/components/DocumentActions';\nimport { DocumentStatus } from '../../pages/EditView/components/DocumentStatus';\nimport { getDocumentStatus } from '../../pages/EditView/EditViewPage';\nimport { usePreviewContext } from '../pages/Preview';\n\nimport type { ContentManagerPlugin, DocumentActionProps } from '../../content-manager';\n\n/* -------------------------------------------------------------------------------------------------\n * ClosePreviewButton\n * -----------------------------------------------------------------------------------------------*/\n\nconst ClosePreviewButton = () => {\n const [{ query }] = useQueryParams<{\n plugins?: Record<string, unknown>;\n }>();\n const { formatMessage } = useIntl();\n\n const canGoBack = useHistory('BackButton', (state) => state.canGoBack);\n const goBack = useHistory('BackButton', (state) => state.goBack);\n const history = useHistory('BackButton', (state) => state.history);\n const locationIndex = useHistory('BackButton', (state) => state.currentLocationIndex);\n\n /**\n * Get the link destination from the history.\n * Rely on a fallback (the parent edit view page) if there's no page to go back .\n */\n const historyTo = canGoBack ? history.at(locationIndex - 2) : undefined;\n const fallback = {\n pathname: '..',\n search: stringify(query, { encode: false }),\n } satisfies To;\n const toWithFallback = historyTo ?? fallback;\n\n const handleClick = (e: React.MouseEvent) => {\n if (canGoBack) {\n // Prevent normal link behavior, go back in the history stack instead\n e.preventDefault();\n goBack();\n return;\n }\n\n // Otherwise rely on native link behavior to go back to the edit view. We don't use navigate()\n // here in order to get the relative=\"path\" functionality from the Link component.\n };\n\n return (\n <IconButton\n variant=\"ghost\"\n tag={Link}\n relative=\"path\"\n to={toWithFallback}\n onClick={handleClick}\n label={formatMessage({\n id: 'content-manager.preview.header.close',\n defaultMessage: 'Close preview',\n })}\n >\n <Cross />\n </IconButton>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Status\n * -----------------------------------------------------------------------------------------------*/\n\nconst Status = () => {\n // Get status\n const document = usePreviewContext('PreviewHeader', (state) => state.document);\n const schema = usePreviewContext('PreviewHeader', (state) => state.schema);\n const meta = usePreviewContext('PreviewHeader', (state) => state.meta);\n const hasDraftAndPublished = schema?.options?.draftAndPublish ?? false;\n\n if (!hasDraftAndPublished) {\n return null;\n }\n\n const status = getDocumentStatus(document, meta);\n\n return <DocumentStatus status={status} size=\"XS\" />;\n};\n\nconst PreviewTabs = () => {\n const { formatMessage } = useIntl();\n\n // URL query params\n const [{ query }, setQuery] = useQueryParams<{ status: 'draft' | 'published' }>();\n\n // Get status\n const document = usePreviewContext('PreviewHeader', (state) => state.document);\n const schema = usePreviewContext('PreviewHeader', (state) => state.schema);\n const meta = usePreviewContext('PreviewHeader', (state) => state.meta);\n const hasDraftAndPublish = schema?.options?.draftAndPublish ?? false;\n const documentStatus = getDocumentStatus(document, meta);\n\n const handleTabChange = (status: string) => {\n if (status === 'published' || status === 'draft') {\n setQuery({ status }, 'push', true);\n }\n };\n\n if (!hasDraftAndPublish) {\n return null;\n }\n\n return (\n <Tabs.Root variant=\"simple\" value={query.status || 'draft'} onValueChange={handleTabChange}>\n <Tabs.List\n aria-label={formatMessage({\n id: 'preview.tabs.label',\n defaultMessage: 'Document status',\n })}\n >\n <StatusTab value=\"draft\">\n {formatMessage({\n id: 'content-manager.containers.List.draft',\n defaultMessage: 'draft',\n })}\n </StatusTab>\n <StatusTab value=\"published\" disabled={documentStatus === 'draft'}>\n {formatMessage({\n id: 'content-manager.containers.List.published',\n defaultMessage: 'published',\n })}\n </StatusTab>\n </Tabs.List>\n </Tabs.Root>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PreviewHeader\n * -----------------------------------------------------------------------------------------------*/\n\nconst PreviewHeader = () => {\n const title = usePreviewContext('PreviewHeader', (state) => state.title);\n const document = usePreviewContext('PreviewHeader', (state) => state.document);\n const schema = usePreviewContext('PreviewHeader', (state) => state.schema);\n const meta = usePreviewContext('PreviewHeader', (state) => state.meta);\n const onPreview = usePreviewContext('PreviewHeader', (state) => state.onPreview);\n const plugins = useStrapiApp('PreviewHeader', (state) => state.plugins);\n\n const [{ query }] = useQueryParams<{\n status?: 'draft' | 'published';\n }>();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { copy } = useClipboard();\n\n const handleCopyLink = () => {\n copy(window.location.href);\n toggleNotification({\n message: formatMessage({\n id: 'content-manager.preview.copy.success',\n defaultMessage: 'Copied preview link',\n }),\n type: 'success',\n });\n };\n\n const hasDraftAndPublish = schema.options?.draftAndPublish ?? false;\n const documentActionProps = {\n activeTab: query.status ?? null,\n collectionType: schema.kind === 'collectionType' ? 'collection-types' : 'single-types',\n model: schema.uid,\n documentId: document.documentId,\n document,\n meta,\n } satisfies DocumentActionProps;\n\n return (\n <Flex height=\"48px\" gap={4} background=\"neutral0\" borderColor=\"neutral150\" tag=\"header\">\n {/* Title and status */}\n <TitleContainer height=\"100%\" paddingLeft={2} paddingRight={4}>\n <ClosePreviewButton />\n <PreviewTitle\n tag=\"h1\"\n title={title}\n maxWidth=\"200px\"\n fontSize={2}\n paddingLeft={2}\n paddingRight={3}\n fontWeight={600}\n >\n {title}\n </PreviewTitle>\n <Status />\n </TitleContainer>\n\n {/* Tabs and actions */}\n <Flex\n flex={1}\n paddingRight={2}\n gap={2}\n justifyContent={hasDraftAndPublish ? 'space-between' : 'flex-end'}\n >\n <Flex flex=\"1 1 70%\">\n <PreviewTabs />\n </Flex>\n <Flex gap={2}>\n <IconButton\n type=\"button\"\n label={formatMessage({\n id: 'preview.copy.label',\n defaultMessage: 'Copy preview link',\n })}\n onClick={handleCopyLink}\n >\n <LinkIcon />\n </IconButton>\n <InjectionZone area=\"preview.actions\" />\n <DescriptionComponentRenderer\n props={documentActionProps}\n descriptions={(\n plugins['content-manager'].apis as ContentManagerPlugin['config']['apis']\n ).getDocumentActions('preview')}\n >\n {(actions) => {\n const filteredActions = actions.filter((action) =>\n [action.position].flat().includes('preview')\n );\n const [primaryAction, secondaryAction] = filteredActions;\n\n if (!primaryAction && !secondaryAction) return null;\n\n // Both actions are available when draft and publish enabled\n if (primaryAction && secondaryAction) {\n return (\n <>\n {/* Save */}\n <DocumentActionButton\n {...secondaryAction}\n variant={secondaryAction.variant || 'secondary'}\n />\n {/* Publish */}\n <DocumentActionButton\n {...primaryAction}\n variant={primaryAction.variant || 'default'}\n />\n </>\n );\n }\n\n // Otherwise we just have the save action\n return (\n <DocumentActionButton\n {...primaryAction}\n variant={primaryAction.variant || 'secondary'}\n />\n );\n }}\n </DescriptionComponentRenderer>\n </Flex>\n </Flex>\n </Flex>\n );\n};\n\nconst PreviewTitle = styled(Typography)`\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst StatusTab = styled(Tabs.Trigger)`\n text-transform: uppercase;\n`;\n\nconst TitleContainer = styled(Flex)`\n border-right: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nexport { PreviewHeader };\n"],"names":["ClosePreviewButton","query","useQueryParams","formatMessage","useIntl","canGoBack","useHistory","state","goBack","history","locationIndex","currentLocationIndex","historyTo","at","undefined","fallback","pathname","search","stringify","encode","toWithFallback","handleClick","e","preventDefault","_jsx","IconButton","variant","tag","Link","relative","to","onClick","label","id","defaultMessage","Cross","Status","document","usePreviewContext","schema","meta","hasDraftAndPublished","options","draftAndPublish","status","getDocumentStatus","DocumentStatus","size","PreviewTabs","setQuery","hasDraftAndPublish","documentStatus","handleTabChange","Tabs","Root","value","onValueChange","_jsxs","List","aria-label","StatusTab","disabled","PreviewHeader","title","onPreview","plugins","useStrapiApp","toggleNotification","useNotification","copy","useClipboard","handleCopyLink","window","location","href","message","type","documentActionProps","activeTab","collectionType","kind","model","uid","documentId","Flex","height","gap","background","borderColor","TitleContainer","paddingLeft","paddingRight","PreviewTitle","maxWidth","fontSize","fontWeight","flex","justifyContent","LinkIcon","InjectionZone","area","DescriptionComponentRenderer","props","descriptions","apis","getDocumentActions","actions","filteredActions","filter","action","position","flat","includes","primaryAction","secondaryAction","_Fragment","DocumentActionButton","styled","Typography","Trigger","theme","colors","neutral150"],"mappings":"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"}
@@ -8,7 +8,6 @@ import { useIntl } from 'react-intl';
8
8
  import { Link as Link$1 } from 'react-router-dom';
9
9
  import { styled } from 'styled-components';
10
10
  import { InjectionZone } from '../../components/InjectionZone.mjs';
11
- import { useDocumentContext } from '../../features/DocumentContext.mjs';
12
11
  import { DocumentActionButton } from '../../pages/EditView/components/DocumentActions.mjs';
13
12
  import { DocumentStatus } from '../../pages/EditView/components/DocumentStatus.mjs';
14
13
  import { getDocumentStatus } from '../../pages/EditView/EditViewPage.mjs';
@@ -130,8 +129,8 @@ const PreviewTabs = ()=>{
130
129
  const document = usePreviewContext('PreviewHeader', (state)=>state.document);
131
130
  const schema = usePreviewContext('PreviewHeader', (state)=>state.schema);
132
131
  const meta = usePreviewContext('PreviewHeader', (state)=>state.meta);
132
+ usePreviewContext('PreviewHeader', (state)=>state.onPreview);
133
133
  const plugins = useStrapiApp('PreviewHeader', (state)=>state.plugins);
134
- const onPreview = useDocumentContext('PreviewHeader', (state)=>state.onPreview);
135
134
  const [{ query }] = useQueryParams();
136
135
  const { formatMessage } = useIntl();
137
136
  const { toggleNotification } = useNotification();
@@ -153,9 +152,7 @@ const PreviewTabs = ()=>{
153
152
  model: schema.uid,
154
153
  documentId: document.documentId,
155
154
  document,
156
- meta,
157
- onPreview,
158
- fromPreview: true
155
+ meta
159
156
  };
160
157
  return /*#__PURE__*/ jsxs(Flex, {
161
158
  height: "48px",