@strapi/upload 5.50.1 → 5.51.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/ai/components/AIAssetCard.js +7 -1
- package/dist/admin/ai/components/AIAssetCard.js.map +1 -1
- package/dist/admin/ai/components/AIAssetCard.mjs +7 -1
- package/dist/admin/ai/components/AIAssetCard.mjs.map +1 -1
- package/dist/admin/components/AssetCard/AssetCard.js +6 -0
- package/dist/admin/components/AssetCard/AssetCard.js.map +1 -1
- package/dist/admin/components/AssetCard/AssetCard.mjs +6 -0
- package/dist/admin/components/AssetCard/AssetCard.mjs.map +1 -1
- package/dist/admin/components/AssetCard/ImageAssetCard.js +3 -2
- package/dist/admin/components/AssetCard/ImageAssetCard.js.map +1 -1
- package/dist/admin/components/AssetCard/ImageAssetCard.mjs +3 -2
- package/dist/admin/components/AssetCard/ImageAssetCard.mjs.map +1 -1
- package/dist/admin/components/EditAssetDialog/EditAssetContent.js +2 -2
- package/dist/admin/components/EditAssetDialog/EditAssetContent.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs +2 -2
- package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs.map +1 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.js +8 -0
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.js.map +1 -1
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.mjs +8 -0
- package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.mjs.map +1 -1
- package/dist/admin/components/TableList/PreviewCell.js +5 -1
- package/dist/admin/components/TableList/PreviewCell.js.map +1 -1
- package/dist/admin/components/TableList/PreviewCell.mjs +5 -1
- package/dist/admin/components/TableList/PreviewCell.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/AssetsPage.js +6 -11
- package/dist/admin/future/pages/Assets/AssetsPage.js.map +1 -1
- package/dist/admin/future/pages/Assets/AssetsPage.mjs +6 -11
- package/dist/admin/future/pages/Assets/AssetsPage.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetPreview.js +6 -3
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetPreview.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetPreview.mjs +6 -3
- package/dist/admin/future/pages/Assets/components/AssetDetails/AssetPreview.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetsGrid.js +8 -12
- package/dist/admin/future/pages/Assets/components/AssetsGrid.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs +10 -14
- package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetsTable.js +15 -27
- package/dist/admin/future/pages/Assets/components/AssetsTable.js.map +1 -1
- package/dist/admin/future/pages/Assets/components/AssetsTable.mjs +16 -28
- package/dist/admin/future/pages/Assets/components/AssetsTable.mjs.map +1 -1
- package/dist/admin/future/pages/Assets/components/EmptyState.js +63 -0
- package/dist/admin/future/pages/Assets/components/EmptyState.js.map +1 -0
- package/dist/admin/future/pages/Assets/components/EmptyState.mjs +61 -0
- package/dist/admin/future/pages/Assets/components/EmptyState.mjs.map +1 -0
- package/dist/admin/future/services/uploadFileViaXHR.js +23 -2
- package/dist/admin/future/services/uploadFileViaXHR.js.map +1 -1
- package/dist/admin/future/services/uploadFileViaXHR.mjs +23 -2
- package/dist/admin/future/services/uploadFileViaXHR.mjs.map +1 -1
- package/dist/admin/hooks/useUpload.js +15 -9
- package/dist/admin/hooks/useUpload.js.map +1 -1
- package/dist/admin/hooks/useUpload.mjs +17 -11
- package/dist/admin/hooks/useUpload.mjs.map +1 -1
- package/dist/admin/src/components/AssetCard/ImageAssetCard.d.ts +2 -1
- package/dist/admin/src/future/pages/Assets/components/AssetsGrid.d.ts +1 -1
- package/dist/admin/src/future/pages/Assets/components/AssetsTable.d.ts +1 -1
- package/dist/admin/src/future/pages/Assets/components/EmptyState.d.ts +11 -0
- package/dist/admin/src/future/services/uploadFileViaXHR.d.ts +1 -17
- package/dist/admin/src/hooks/useAiAvailability.d.ts +1 -1
- package/dist/admin/src/hooks/useEditAsset.d.ts +4 -4
- package/dist/admin/src/hooks/useEditFolder.d.ts +4 -4
- package/dist/admin/src/hooks/useUpload.d.ts +1 -1
- package/dist/admin/translations/en.json.js +3 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +3 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/admin/translations/ko.json.js +183 -1
- package/dist/admin/translations/ko.json.js.map +1 -1
- package/dist/admin/translations/ko.json.mjs +183 -1
- package/dist/admin/translations/ko.json.mjs.map +1 -1
- package/dist/server/src/controllers/index.d.ts +1 -1
- package/dist/server/src/index.d.ts +11 -11
- package/dist/server/src/routes/index.d.ts +1 -1
- package/dist/server/src/services/image-manipulation.d.ts +3 -3
- package/dist/server/src/services/index.d.ts +9 -9
- package/package.json +17 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditAssetContent.js","sources":["../../../../admin/src/components/EditAssetDialog/EditAssetContent.tsx"],"sourcesContent":["/**\n *\n * EditAssetDialog\n *\n */\nimport * as React from 'react';\n\nimport {\n Button,\n Field,\n Flex,\n Grid,\n Loader,\n Modal,\n TextInput,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Form, Formik } from 'formik';\nimport isEqual from 'lodash/isEqual';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\nimport * as yup from 'yup';\n\nimport { useEditAsset } from '../../hooks/useEditAsset';\nimport { useFolderStructure } from '../../hooks/useFolderStructure';\nimport { useTracking } from '../../hooks/useTracking';\nimport { findRecursiveFolderByValue, getTrad, getFileExtension, formatBytes } from '../../utils';\nimport { ContextInfo } from '../ContextInfo/ContextInfo';\nimport { SelectTree } from '../SelectTree/SelectTree';\n\nimport { DialogHeader } from './DialogHeader';\nimport { PreviewBox } from './PreviewBox/PreviewBox';\nimport { ReplaceMediaButton } from './ReplaceMediaButton';\n\nimport type {\n File as FileDefinition,\n RawFile,\n FocalPoint,\n} from '../../../../shared/contracts/files';\n\nconst LoadingBody = styled(Flex)`\n /* 80px are coming from the Tabs component that is not included in the ModalBody */\n min-height: ${() => `calc(60dvh + 8rem)`};\n`;\n\nconst focalPointSchema = yup\n .object({\n x: yup.number().min(0).max(100).required(),\n y: yup.number().min(0).max(100).required(),\n })\n .nullable()\n .default(null);\n\nconst fileInfoSchema = yup.object({\n name: yup.string().required(),\n alternativeText: yup.string(),\n caption: yup.string(),\n focalPoint: focalPointSchema,\n folder: yup.number(),\n});\n\nexport interface Asset extends Omit<FileDefinition, 'folder'> {\n isLocal?: boolean;\n rawFile?: RawFile;\n folder?: FileDefinition['folder'] & { id: number };\n}\n\ninterface EditAssetContentProps {\n asset?: Asset;\n initialFolderId?: string | number | null;\n canUpdate?: boolean;\n canCopyLink?: boolean;\n canDownload?: boolean;\n trackedLocation?: string;\n onClose: (arg?: Asset | null | boolean) => void;\n omitFields?: ('caption' | 'alternativeText')[];\n omitActions?: 'replace'[];\n}\n\ninterface FormInitialData {\n name?: string;\n alternativeText?: string;\n caption?: string;\n focalPoint?: FocalPoint | null;\n parent?: {\n value?: number;\n label: string;\n };\n}\n\nconst toFolderId = (value: string | number | null | undefined): number | undefined => {\n if (value === null || value === undefined) {\n return undefined;\n }\n\n if (typeof value === 'number') {\n return Number.isFinite(value) ? value : undefined;\n }\n\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n};\n\nexport const EditAssetContent = ({\n onClose,\n asset,\n initialFolderId = null,\n canUpdate = false,\n canCopyLink = false,\n canDownload = false,\n trackedLocation,\n omitFields = [],\n omitActions = [],\n}: EditAssetContentProps) => {\n const { formatMessage, formatDate } = useIntl();\n const { trackUsage } = useTracking();\n const submitButtonRef = React.useRef<HTMLButtonElement>(null);\n const [isCropping, setIsCropping] = React.useState(false);\n const [isFocalPointMode, setIsFocalPointMode] = React.useState(false);\n const [replacementFile, setReplacementFile] = React.useState<File | undefined>();\n const { editAsset, isLoading } = useEditAsset();\n\n const { data: folderStructure, isLoading: folderStructureIsLoading } = useFolderStructure({\n enabled: true,\n });\n\n const handleSubmit = async (values: FormInitialData) => {\n const nextAsset = { ...asset, ...values, folder: values.parent?.value } as Asset;\n\n if (asset?.isLocal) {\n onClose(nextAsset);\n } else {\n const editedAsset = (await editAsset(nextAsset, replacementFile!)) as Asset;\n\n const assetType = asset?.mime?.split('/')[0];\n // if the folder parent was the root of Media Library, its id is null\n // we know it changed location if the new parent value exists\n const didChangeLocation = asset?.folder?.id\n ? asset.folder.id !== values.parent?.value\n : asset?.folder === null && !!values.parent?.value;\n\n trackUsage('didEditMediaLibraryElements', {\n location: trackedLocation,\n type: assetType,\n changeLocation: didChangeLocation,\n });\n\n onClose(editedAsset);\n }\n };\n\n const handleStartCropping = () => {\n setIsCropping(true);\n };\n\n const handleCancelCropping = () => {\n setIsCropping(false);\n };\n\n const handleFinishCropping = () => {\n setIsCropping(false);\n onClose();\n };\n\n const handleFocalPointStart = () => {\n setIsFocalPointMode(true);\n };\n\n const handleFocalPointCancel = () => {\n setIsFocalPointMode(false);\n };\n\n const formDisabled = !canUpdate || isCropping || isFocalPointMode;\n\n const handleConfirmClose = () => {\n // eslint-disable-next-line no-alert\n const confirm = window.confirm(\n formatMessage({\n id: 'window.confirm.close-modal.file',\n defaultMessage: 'Are you sure? Your changes will be lost.',\n })\n );\n\n if (confirm) {\n onClose();\n }\n };\n\n const activeFolderId = asset?.folder?.id ?? toFolderId(initialFolderId);\n const initialFormData = !folderStructureIsLoading && {\n name: asset?.name,\n alternativeText: asset?.alternativeText ?? undefined,\n caption: asset?.caption ?? undefined,\n focalPoint: asset?.focalPoint ?? null,\n parent: {\n value: activeFolderId ?? undefined,\n label:\n findRecursiveFolderByValue(folderStructure!, activeFolderId!)?.label ??\n folderStructure![0].label,\n },\n };\n\n const handleClose = (values?: { [key: string]: unknown }) => {\n if (!isEqual(initialFormData, values)) {\n handleConfirmClose();\n } else {\n onClose();\n }\n };\n\n if (folderStructureIsLoading) {\n return (\n <>\n <DialogHeader />\n <LoadingBody minHeight=\"60vh\" justifyContent=\"center\" paddingTop={4} paddingBottom={4}>\n <Loader>\n {formatMessage({\n id: getTrad('content.isLoading'),\n defaultMessage: 'Content is loading.',\n })}\n </Loader>\n </LoadingBody>\n <Modal.Footer>\n <Button onClick={() => handleClose()} variant=\"tertiary\">\n {formatMessage({ id: 'cancel', defaultMessage: 'Cancel' })}\n </Button>\n </Modal.Footer>\n </>\n );\n }\n\n return (\n <Formik\n validationSchema={fileInfoSchema}\n validateOnChange={false}\n onSubmit={handleSubmit}\n initialValues={initialFormData}\n >\n {({ values, errors, handleChange, setFieldValue }) => (\n <>\n <DialogHeader />\n <Modal.Body>\n <Grid.Root gap={4}>\n <Grid.Item xs={12} col={6} direction=\"column\" alignItems=\"stretch\">\n <PreviewBox\n asset={asset!}\n canUpdate={canUpdate}\n canCopyLink={canCopyLink}\n canDownload={canDownload}\n onDelete={onClose}\n onCropFinish={handleFinishCropping}\n onCropStart={handleStartCropping}\n onCropCancel={handleCancelCropping}\n replacementFile={replacementFile}\n trackedLocation={trackedLocation}\n formFocalPoint={values.focalPoint}\n onFocalPointStart={handleFocalPointStart}\n onFocalPointFinish={(focalPoint) => {\n setIsFocalPointMode(false);\n setFieldValue('focalPoint', focalPoint);\n }}\n onFocalPointCancel={handleFocalPointCancel}\n />\n </Grid.Item>\n <Grid.Item xs={12} col={6} direction=\"column\" alignItems=\"stretch\">\n <Form noValidate>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={3}>\n <ContextInfo\n blocks={[\n {\n label: formatMessage({\n id: getTrad('modal.file-details.size'),\n defaultMessage: 'Size',\n }),\n value: formatBytes(asset?.size ? asset.size : 0),\n },\n\n {\n label: formatMessage({\n id: getTrad('modal.file-details.dimensions'),\n defaultMessage: 'Dimensions',\n }),\n value:\n asset?.height && asset.width ? `${asset.width}✕${asset.height}` : null,\n },\n\n {\n label: formatMessage({\n id: getTrad('modal.file-details.date'),\n defaultMessage: 'Date',\n }),\n value: formatDate(new Date(asset?.createdAt ? asset.createdAt : '')),\n },\n\n {\n label: formatMessage({\n id: getTrad('modal.file-details.extension'),\n defaultMessage: 'Extension',\n }),\n value: getFileExtension(asset?.ext)!,\n },\n\n {\n label: formatMessage({\n id: getTrad('modal.file-details.id'),\n defaultMessage: 'Asset ID',\n }),\n value: asset?.id ? asset.id : null,\n },\n\n ...(values.focalPoint\n ? [\n {\n label: formatMessage({\n id: getTrad('modal.file-details.focal-point'),\n defaultMessage: 'Focal point',\n }),\n value: `x: ${values.focalPoint.x}% - y: ${values.focalPoint.y}%`,\n },\n ]\n : []),\n ]}\n />\n <Field.Root name=\"name\" error={errors.name}>\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.file-name'),\n defaultMessage: 'File name',\n })}\n </Field.Label>\n <TextInput\n value={values.name}\n onChange={handleChange}\n disabled={formDisabled}\n type=\"text\"\n />\n <Field.Error />\n </Field.Root>\n\n {!omitFields?.includes('alternativeText') && (\n <Field.Root\n name=\"alternativeText\"\n hint={formatMessage({\n id: getTrad('form.input.description.file-alt'),\n defaultMessage:\n 'This text will be displayed if the asset can’t be shown.',\n })}\n error={errors.alternativeText}\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.file-alt'),\n defaultMessage: 'Alternative text',\n })}\n </Field.Label>\n <TextInput\n value={values.alternativeText}\n onChange={handleChange}\n disabled={formDisabled}\n type=\"text\"\n />\n <Field.Hint />\n <Field.Error />\n </Field.Root>\n )}\n\n {!omitFields?.includes('caption') && (\n <Field.Root name=\"caption\" error={errors.caption}>\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.file-caption'),\n defaultMessage: 'Caption',\n })}\n </Field.Label>\n <TextInput\n value={values.caption}\n onChange={handleChange}\n disabled={formDisabled}\n type=\"text\"\n />\n </Field.Root>\n )}\n\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <Field.Root name=\"parent\" id=\"asset-folder\">\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.file-location'),\n defaultMessage: 'Location',\n })}\n </Field.Label>\n\n <SelectTree\n name=\"parent\"\n defaultValue={values.parent}\n options={folderStructure!}\n onChange={(value) => {\n setFieldValue('parent', value);\n }}\n menuPortalTarget={document.querySelector('body')}\n inputId=\"asset-folder\"\n isDisabled={formDisabled}\n error={errors?.parent}\n ariaErrorMessage=\"folder-parent-error\"\n />\n </Field.Root>\n </Flex>\n </Flex>\n\n <VisuallyHidden>\n <button\n type=\"submit\"\n tabIndex={-1}\n ref={submitButtonRef}\n disabled={formDisabled}\n >\n {formatMessage({ id: 'submit', defaultMessage: 'Submit' })}\n </button>\n </VisuallyHidden>\n </Form>\n </Grid.Item>\n </Grid.Root>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={() => handleClose({ ...values })} variant=\"tertiary\">\n {formatMessage({ id: 'global.cancel', defaultMessage: 'Cancel' })}\n </Button>\n <Flex gap={2}>\n {!omitActions?.includes('replace') && (\n <ReplaceMediaButton\n onSelectMedia={setReplacementFile}\n acceptedMime={asset?.mime ?? ''}\n disabled={formDisabled}\n trackedLocation={trackedLocation}\n />\n )}\n\n <Button\n onClick={() => submitButtonRef.current?.click()}\n loading={isLoading}\n disabled={formDisabled}\n >\n {formatMessage({ id: 'global.finish', defaultMessage: 'Finish' })}\n </Button>\n </Flex>\n </Modal.Footer>\n </>\n )}\n </Formik>\n );\n};\n\ninterface EditAssetDialogProps {\n asset: Asset;\n canUpdate?: boolean;\n canCopyLink?: boolean;\n canDownload?: boolean;\n trackedLocation?: string;\n open: boolean;\n onClose: (arg?: Asset | null | boolean) => void;\n}\n\nexport const EditAssetDialog = ({\n open,\n onClose,\n canUpdate = false,\n canCopyLink = false,\n canDownload = false,\n ...restProps\n}: EditAssetDialogProps) => {\n return (\n <Modal.Root open={open} onOpenChange={onClose}>\n <Modal.Content>\n <EditAssetContent\n onClose={onClose}\n canUpdate={canUpdate}\n canCopyLink={canCopyLink}\n canDownload={canDownload}\n {...restProps}\n />\n </Modal.Content>\n </Modal.Root>\n );\n};\n"],"names":["LoadingBody","styled","Flex","focalPointSchema","yup","object","x","number","min","max","required","y","nullable","default","fileInfoSchema","name","string","alternativeText","caption","focalPoint","folder","toFolderId","value","undefined","Number","isFinite","parsed","EditAssetContent","onClose","asset","initialFolderId","canUpdate","canCopyLink","canDownload","trackedLocation","omitFields","omitActions","formatMessage","formatDate","useIntl","trackUsage","useTracking","submitButtonRef","React","useRef","isCropping","setIsCropping","useState","isFocalPointMode","setIsFocalPointMode","replacementFile","setReplacementFile","editAsset","isLoading","useEditAsset","data","folderStructure","folderStructureIsLoading","useFolderStructure","enabled","handleSubmit","values","nextAsset","parent","isLocal","editedAsset","assetType","mime","split","didChangeLocation","id","location","type","changeLocation","handleStartCropping","handleCancelCropping","handleFinishCropping","handleFocalPointStart","handleFocalPointCancel","formDisabled","handleConfirmClose","confirm","window","defaultMessage","activeFolderId","initialFormData","label","findRecursiveFolderByValue","handleClose","isEqual","_jsxs","_Fragment","_jsx","DialogHeader","minHeight","justifyContent","paddingTop","paddingBottom","Loader","getTrad","Modal","Footer","Button","onClick","variant","Formik","validationSchema","validateOnChange","onSubmit","initialValues","errors","handleChange","setFieldValue","Body","Grid","Root","gap","Item","xs","col","direction","alignItems","PreviewBox","onDelete","onCropFinish","onCropStart","onCropCancel","formFocalPoint","onFocalPointStart","onFocalPointFinish","onFocalPointCancel","Form","noValidate","ContextInfo","blocks","formatBytes","size","height","width","Date","createdAt","getFileExtension","ext","Field","error","Label","TextInput","onChange","disabled","Error","includes","hint","Hint","SelectTree","defaultValue","options","menuPortalTarget","document","querySelector","inputId","isDisabled","ariaErrorMessage","VisuallyHidden","button","tabIndex","ref","ReplaceMediaButton","onSelectMedia","acceptedMime","current","click","loading","EditAssetDialog","open","restProps","onOpenChange","Content"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EditAssetContent.js","sources":["../../../../admin/src/components/EditAssetDialog/EditAssetContent.tsx"],"sourcesContent":["/**\n *\n * EditAssetDialog\n *\n */\nimport * as React from 'react';\n\nimport {\n Button,\n Field,\n Flex,\n Grid,\n Loader,\n Modal,\n TextInput,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Form, Formik } from 'formik';\nimport isEqual from 'lodash/isEqual';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\nimport * as yup from 'yup';\n\nimport { useEditAsset } from '../../hooks/useEditAsset';\nimport { useFolderStructure } from '../../hooks/useFolderStructure';\nimport { useTracking } from '../../hooks/useTracking';\nimport { findRecursiveFolderByValue, getTrad, getFileExtension, formatBytes } from '../../utils';\nimport { ContextInfo } from '../ContextInfo/ContextInfo';\nimport { SelectTree } from '../SelectTree/SelectTree';\n\nimport { DialogHeader } from './DialogHeader';\nimport { PreviewBox } from './PreviewBox/PreviewBox';\nimport { ReplaceMediaButton } from './ReplaceMediaButton';\n\nimport type {\n File as FileDefinition,\n RawFile,\n FocalPoint,\n} from '../../../../shared/contracts/files';\n\nconst LoadingBody = styled(Flex)`\n /* 80px are coming from the Tabs component that is not included in the ModalBody */\n min-height: ${() => `calc(60dvh + 8rem)`};\n`;\n\nconst focalPointSchema = yup\n .object({\n x: yup.number().min(0).max(100).required(),\n y: yup.number().min(0).max(100).required(),\n })\n .nullable()\n .default(null);\n\nconst fileInfoSchema = yup.object({\n name: yup.string().required(),\n alternativeText: yup.string(),\n caption: yup.string(),\n focalPoint: focalPointSchema,\n folder: yup.number(),\n});\n\nexport interface Asset extends Omit<FileDefinition, 'folder'> {\n isLocal?: boolean;\n rawFile?: RawFile;\n folder?: FileDefinition['folder'] & { id: number };\n}\n\ninterface EditAssetContentProps {\n asset?: Asset;\n initialFolderId?: string | number | null;\n canUpdate?: boolean;\n canCopyLink?: boolean;\n canDownload?: boolean;\n trackedLocation?: string;\n onClose: (arg?: Asset | null | boolean) => void;\n omitFields?: ('caption' | 'alternativeText')[];\n omitActions?: 'replace'[];\n}\n\ninterface FormInitialData {\n name?: string;\n alternativeText?: string;\n caption?: string;\n focalPoint?: FocalPoint | null;\n parent?: {\n value?: number;\n label: string;\n };\n}\n\nconst toFolderId = (value: string | number | null | undefined): number | undefined => {\n if (value === null || value === undefined) {\n return undefined;\n }\n\n if (typeof value === 'number') {\n return Number.isFinite(value) ? value : undefined;\n }\n\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n};\n\nexport const EditAssetContent = ({\n onClose,\n asset,\n initialFolderId = null,\n canUpdate = false,\n canCopyLink = false,\n canDownload = false,\n trackedLocation,\n omitFields = [],\n omitActions = [],\n}: EditAssetContentProps) => {\n const { formatMessage, formatDate } = useIntl();\n const { trackUsage } = useTracking();\n const submitButtonRef = React.useRef<HTMLButtonElement>(null);\n const [isCropping, setIsCropping] = React.useState(false);\n const [isFocalPointMode, setIsFocalPointMode] = React.useState(false);\n const [replacementFile, setReplacementFile] = React.useState<File | undefined>();\n const { editAsset, isLoading } = useEditAsset();\n\n const { data: folderStructure, isLoading: folderStructureIsLoading } = useFolderStructure({\n enabled: true,\n });\n\n const handleSubmit = async (values: FormInitialData) => {\n const nextAsset = { ...asset, ...values, folder: values.parent?.value } as Asset;\n\n if (asset?.isLocal) {\n onClose(nextAsset);\n } else {\n const editedAsset = (await editAsset(nextAsset, replacementFile!)) as Asset;\n\n const assetType = asset?.mime?.split('/')[0];\n // if the folder parent was the root of Media Library, its id is null\n // we know it changed location if the new parent value exists\n const didChangeLocation = asset?.folder?.id\n ? asset.folder.id !== values.parent?.value\n : asset?.folder === null && !!values.parent?.value;\n\n trackUsage('didEditMediaLibraryElements', {\n location: trackedLocation,\n type: assetType,\n changeLocation: didChangeLocation,\n });\n\n onClose(editedAsset);\n }\n };\n\n const handleStartCropping = () => {\n setIsCropping(true);\n };\n\n const handleCancelCropping = () => {\n setIsCropping(false);\n };\n\n const handleFinishCropping = () => {\n setIsCropping(false);\n onClose();\n };\n\n const handleFocalPointStart = () => {\n setIsFocalPointMode(true);\n };\n\n const handleFocalPointCancel = () => {\n setIsFocalPointMode(false);\n };\n\n const formDisabled = !canUpdate || isCropping || isFocalPointMode;\n\n const handleConfirmClose = () => {\n // eslint-disable-next-line no-alert\n const confirm = window.confirm(\n formatMessage({\n id: 'window.confirm.close-modal.file',\n defaultMessage: 'Are you sure? Your changes will be lost.',\n })\n );\n\n if (confirm) {\n onClose();\n }\n };\n\n const activeFolderId = asset?.folder?.id ?? toFolderId(initialFolderId);\n const initialFormData: FormInitialData = !folderStructureIsLoading\n ? {\n name: asset?.name,\n alternativeText: asset?.alternativeText ?? undefined,\n caption: asset?.caption ?? undefined,\n focalPoint: asset?.focalPoint ?? null,\n parent: {\n value: activeFolderId ?? undefined,\n label:\n findRecursiveFolderByValue(folderStructure!, activeFolderId!)?.label ??\n folderStructure![0].label,\n },\n }\n : {};\n\n const handleClose = (values?: { [key: string]: unknown }) => {\n if (!isEqual(initialFormData, values)) {\n handleConfirmClose();\n } else {\n onClose();\n }\n };\n\n if (folderStructureIsLoading) {\n return (\n <>\n <DialogHeader />\n <LoadingBody minHeight=\"60vh\" justifyContent=\"center\" paddingTop={4} paddingBottom={4}>\n <Loader>\n {formatMessage({\n id: getTrad('content.isLoading'),\n defaultMessage: 'Content is loading.',\n })}\n </Loader>\n </LoadingBody>\n <Modal.Footer>\n <Button onClick={() => handleClose()} variant=\"tertiary\">\n {formatMessage({ id: 'cancel', defaultMessage: 'Cancel' })}\n </Button>\n </Modal.Footer>\n </>\n );\n }\n\n return (\n <Formik\n validationSchema={fileInfoSchema}\n validateOnChange={false}\n onSubmit={handleSubmit}\n initialValues={initialFormData}\n >\n {({ values, errors, handleChange, setFieldValue }) => (\n <>\n <DialogHeader />\n <Modal.Body>\n <Grid.Root gap={4}>\n <Grid.Item xs={12} col={6} direction=\"column\" alignItems=\"stretch\">\n <PreviewBox\n asset={asset!}\n canUpdate={canUpdate}\n canCopyLink={canCopyLink}\n canDownload={canDownload}\n onDelete={onClose}\n onCropFinish={handleFinishCropping}\n onCropStart={handleStartCropping}\n onCropCancel={handleCancelCropping}\n replacementFile={replacementFile}\n trackedLocation={trackedLocation}\n formFocalPoint={values.focalPoint}\n onFocalPointStart={handleFocalPointStart}\n onFocalPointFinish={(focalPoint) => {\n setIsFocalPointMode(false);\n setFieldValue('focalPoint', focalPoint);\n }}\n onFocalPointCancel={handleFocalPointCancel}\n />\n </Grid.Item>\n <Grid.Item xs={12} col={6} direction=\"column\" alignItems=\"stretch\">\n <Form noValidate>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={3}>\n <ContextInfo\n blocks={[\n {\n label: formatMessage({\n id: getTrad('modal.file-details.size'),\n defaultMessage: 'Size',\n }),\n value: formatBytes(asset?.size ? asset.size : 0),\n },\n\n {\n label: formatMessage({\n id: getTrad('modal.file-details.dimensions'),\n defaultMessage: 'Dimensions',\n }),\n value:\n asset?.height && asset.width ? `${asset.width}✕${asset.height}` : null,\n },\n\n {\n label: formatMessage({\n id: getTrad('modal.file-details.date'),\n defaultMessage: 'Date',\n }),\n value: formatDate(new Date(asset?.createdAt ? asset.createdAt : '')),\n },\n\n {\n label: formatMessage({\n id: getTrad('modal.file-details.extension'),\n defaultMessage: 'Extension',\n }),\n value: getFileExtension(asset?.ext)!,\n },\n\n {\n label: formatMessage({\n id: getTrad('modal.file-details.id'),\n defaultMessage: 'Asset ID',\n }),\n value: asset?.id ? asset.id : null,\n },\n\n ...(values.focalPoint\n ? [\n {\n label: formatMessage({\n id: getTrad('modal.file-details.focal-point'),\n defaultMessage: 'Focal point',\n }),\n value: `x: ${values.focalPoint.x}% - y: ${values.focalPoint.y}%`,\n },\n ]\n : []),\n ]}\n />\n <Field.Root name=\"name\" error={errors.name}>\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.file-name'),\n defaultMessage: 'File name',\n })}\n </Field.Label>\n <TextInput\n value={values.name}\n onChange={handleChange}\n disabled={formDisabled}\n type=\"text\"\n />\n <Field.Error />\n </Field.Root>\n\n {!omitFields?.includes('alternativeText') && (\n <Field.Root\n name=\"alternativeText\"\n hint={formatMessage({\n id: getTrad('form.input.description.file-alt'),\n defaultMessage:\n 'This text will be displayed if the asset can’t be shown.',\n })}\n error={errors.alternativeText}\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.file-alt'),\n defaultMessage: 'Alternative text',\n })}\n </Field.Label>\n <TextInput\n value={values.alternativeText}\n onChange={handleChange}\n disabled={formDisabled}\n type=\"text\"\n />\n <Field.Hint />\n <Field.Error />\n </Field.Root>\n )}\n\n {!omitFields?.includes('caption') && (\n <Field.Root name=\"caption\" error={errors.caption}>\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.file-caption'),\n defaultMessage: 'Caption',\n })}\n </Field.Label>\n <TextInput\n value={values.caption}\n onChange={handleChange}\n disabled={formDisabled}\n type=\"text\"\n />\n </Field.Root>\n )}\n\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <Field.Root name=\"parent\" id=\"asset-folder\">\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.file-location'),\n defaultMessage: 'Location',\n })}\n </Field.Label>\n\n <SelectTree\n name=\"parent\"\n defaultValue={values.parent}\n options={folderStructure!}\n onChange={(value) => {\n setFieldValue('parent', value);\n }}\n menuPortalTarget={document.querySelector('body')}\n inputId=\"asset-folder\"\n isDisabled={formDisabled}\n error={errors?.parent}\n ariaErrorMessage=\"folder-parent-error\"\n />\n </Field.Root>\n </Flex>\n </Flex>\n\n <VisuallyHidden>\n <button\n type=\"submit\"\n tabIndex={-1}\n ref={submitButtonRef}\n disabled={formDisabled}\n >\n {formatMessage({ id: 'submit', defaultMessage: 'Submit' })}\n </button>\n </VisuallyHidden>\n </Form>\n </Grid.Item>\n </Grid.Root>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={() => handleClose({ ...values })} variant=\"tertiary\">\n {formatMessage({ id: 'global.cancel', defaultMessage: 'Cancel' })}\n </Button>\n <Flex gap={2}>\n {!omitActions?.includes('replace') && (\n <ReplaceMediaButton\n onSelectMedia={setReplacementFile}\n acceptedMime={asset?.mime ?? ''}\n disabled={formDisabled}\n trackedLocation={trackedLocation}\n />\n )}\n\n <Button\n onClick={() => submitButtonRef.current?.click()}\n loading={isLoading}\n disabled={formDisabled}\n >\n {formatMessage({ id: 'global.finish', defaultMessage: 'Finish' })}\n </Button>\n </Flex>\n </Modal.Footer>\n </>\n )}\n </Formik>\n );\n};\n\ninterface EditAssetDialogProps {\n asset: Asset;\n canUpdate?: boolean;\n canCopyLink?: boolean;\n canDownload?: boolean;\n trackedLocation?: string;\n open: boolean;\n onClose: (arg?: Asset | null | boolean) => void;\n}\n\nexport const EditAssetDialog = ({\n open,\n onClose,\n canUpdate = false,\n canCopyLink = false,\n canDownload = false,\n ...restProps\n}: EditAssetDialogProps) => {\n return (\n <Modal.Root open={open} onOpenChange={onClose}>\n <Modal.Content>\n <EditAssetContent\n onClose={onClose}\n canUpdate={canUpdate}\n canCopyLink={canCopyLink}\n canDownload={canDownload}\n {...restProps}\n />\n </Modal.Content>\n </Modal.Root>\n );\n};\n"],"names":["LoadingBody","styled","Flex","focalPointSchema","yup","object","x","number","min","max","required","y","nullable","default","fileInfoSchema","name","string","alternativeText","caption","focalPoint","folder","toFolderId","value","undefined","Number","isFinite","parsed","EditAssetContent","onClose","asset","initialFolderId","canUpdate","canCopyLink","canDownload","trackedLocation","omitFields","omitActions","formatMessage","formatDate","useIntl","trackUsage","useTracking","submitButtonRef","React","useRef","isCropping","setIsCropping","useState","isFocalPointMode","setIsFocalPointMode","replacementFile","setReplacementFile","editAsset","isLoading","useEditAsset","data","folderStructure","folderStructureIsLoading","useFolderStructure","enabled","handleSubmit","values","nextAsset","parent","isLocal","editedAsset","assetType","mime","split","didChangeLocation","id","location","type","changeLocation","handleStartCropping","handleCancelCropping","handleFinishCropping","handleFocalPointStart","handleFocalPointCancel","formDisabled","handleConfirmClose","confirm","window","defaultMessage","activeFolderId","initialFormData","label","findRecursiveFolderByValue","handleClose","isEqual","_jsxs","_Fragment","_jsx","DialogHeader","minHeight","justifyContent","paddingTop","paddingBottom","Loader","getTrad","Modal","Footer","Button","onClick","variant","Formik","validationSchema","validateOnChange","onSubmit","initialValues","errors","handleChange","setFieldValue","Body","Grid","Root","gap","Item","xs","col","direction","alignItems","PreviewBox","onDelete","onCropFinish","onCropStart","onCropCancel","formFocalPoint","onFocalPointStart","onFocalPointFinish","onFocalPointCancel","Form","noValidate","ContextInfo","blocks","formatBytes","size","height","width","Date","createdAt","getFileExtension","ext","Field","error","Label","TextInput","onChange","disabled","Error","includes","hint","Hint","SelectTree","defaultValue","options","menuPortalTarget","document","querySelector","inputId","isDisabled","ariaErrorMessage","VisuallyHidden","button","tabIndex","ref","ReplaceMediaButton","onSelectMedia","acceptedMime","current","click","loading","EditAssetDialog","open","restProps","onOpenChange","Content"],"mappings":"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"}
|
|
@@ -108,7 +108,7 @@ const EditAssetContent = ({ onClose, asset, initialFolderId = null, canUpdate =
|
|
|
108
108
|
}
|
|
109
109
|
};
|
|
110
110
|
const activeFolderId = asset?.folder?.id ?? toFolderId(initialFolderId);
|
|
111
|
-
const initialFormData = !folderStructureIsLoading
|
|
111
|
+
const initialFormData = !folderStructureIsLoading ? {
|
|
112
112
|
name: asset?.name,
|
|
113
113
|
alternativeText: asset?.alternativeText ?? undefined,
|
|
114
114
|
caption: asset?.caption ?? undefined,
|
|
@@ -117,7 +117,7 @@ const EditAssetContent = ({ onClose, asset, initialFolderId = null, canUpdate =
|
|
|
117
117
|
value: activeFolderId ?? undefined,
|
|
118
118
|
label: findRecursiveFolderByValue(folderStructure, activeFolderId)?.label ?? folderStructure[0].label
|
|
119
119
|
}
|
|
120
|
-
};
|
|
120
|
+
} : {};
|
|
121
121
|
const handleClose = (values)=>{
|
|
122
122
|
if (!isEqual(initialFormData, values)) {
|
|
123
123
|
handleConfirmClose();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditAssetContent.mjs","sources":["../../../../admin/src/components/EditAssetDialog/EditAssetContent.tsx"],"sourcesContent":["/**\n *\n * EditAssetDialog\n *\n */\nimport * as React from 'react';\n\nimport {\n Button,\n Field,\n Flex,\n Grid,\n Loader,\n Modal,\n TextInput,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Form, Formik } from 'formik';\nimport isEqual from 'lodash/isEqual';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\nimport * as yup from 'yup';\n\nimport { useEditAsset } from '../../hooks/useEditAsset';\nimport { useFolderStructure } from '../../hooks/useFolderStructure';\nimport { useTracking } from '../../hooks/useTracking';\nimport { findRecursiveFolderByValue, getTrad, getFileExtension, formatBytes } from '../../utils';\nimport { ContextInfo } from '../ContextInfo/ContextInfo';\nimport { SelectTree } from '../SelectTree/SelectTree';\n\nimport { DialogHeader } from './DialogHeader';\nimport { PreviewBox } from './PreviewBox/PreviewBox';\nimport { ReplaceMediaButton } from './ReplaceMediaButton';\n\nimport type {\n File as FileDefinition,\n RawFile,\n FocalPoint,\n} from '../../../../shared/contracts/files';\n\nconst LoadingBody = styled(Flex)`\n /* 80px are coming from the Tabs component that is not included in the ModalBody */\n min-height: ${() => `calc(60dvh + 8rem)`};\n`;\n\nconst focalPointSchema = yup\n .object({\n x: yup.number().min(0).max(100).required(),\n y: yup.number().min(0).max(100).required(),\n })\n .nullable()\n .default(null);\n\nconst fileInfoSchema = yup.object({\n name: yup.string().required(),\n alternativeText: yup.string(),\n caption: yup.string(),\n focalPoint: focalPointSchema,\n folder: yup.number(),\n});\n\nexport interface Asset extends Omit<FileDefinition, 'folder'> {\n isLocal?: boolean;\n rawFile?: RawFile;\n folder?: FileDefinition['folder'] & { id: number };\n}\n\ninterface EditAssetContentProps {\n asset?: Asset;\n initialFolderId?: string | number | null;\n canUpdate?: boolean;\n canCopyLink?: boolean;\n canDownload?: boolean;\n trackedLocation?: string;\n onClose: (arg?: Asset | null | boolean) => void;\n omitFields?: ('caption' | 'alternativeText')[];\n omitActions?: 'replace'[];\n}\n\ninterface FormInitialData {\n name?: string;\n alternativeText?: string;\n caption?: string;\n focalPoint?: FocalPoint | null;\n parent?: {\n value?: number;\n label: string;\n };\n}\n\nconst toFolderId = (value: string | number | null | undefined): number | undefined => {\n if (value === null || value === undefined) {\n return undefined;\n }\n\n if (typeof value === 'number') {\n return Number.isFinite(value) ? value : undefined;\n }\n\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n};\n\nexport const EditAssetContent = ({\n onClose,\n asset,\n initialFolderId = null,\n canUpdate = false,\n canCopyLink = false,\n canDownload = false,\n trackedLocation,\n omitFields = [],\n omitActions = [],\n}: EditAssetContentProps) => {\n const { formatMessage, formatDate } = useIntl();\n const { trackUsage } = useTracking();\n const submitButtonRef = React.useRef<HTMLButtonElement>(null);\n const [isCropping, setIsCropping] = React.useState(false);\n const [isFocalPointMode, setIsFocalPointMode] = React.useState(false);\n const [replacementFile, setReplacementFile] = React.useState<File | undefined>();\n const { editAsset, isLoading } = useEditAsset();\n\n const { data: folderStructure, isLoading: folderStructureIsLoading } = useFolderStructure({\n enabled: true,\n });\n\n const handleSubmit = async (values: FormInitialData) => {\n const nextAsset = { ...asset, ...values, folder: values.parent?.value } as Asset;\n\n if (asset?.isLocal) {\n onClose(nextAsset);\n } else {\n const editedAsset = (await editAsset(nextAsset, replacementFile!)) as Asset;\n\n const assetType = asset?.mime?.split('/')[0];\n // if the folder parent was the root of Media Library, its id is null\n // we know it changed location if the new parent value exists\n const didChangeLocation = asset?.folder?.id\n ? asset.folder.id !== values.parent?.value\n : asset?.folder === null && !!values.parent?.value;\n\n trackUsage('didEditMediaLibraryElements', {\n location: trackedLocation,\n type: assetType,\n changeLocation: didChangeLocation,\n });\n\n onClose(editedAsset);\n }\n };\n\n const handleStartCropping = () => {\n setIsCropping(true);\n };\n\n const handleCancelCropping = () => {\n setIsCropping(false);\n };\n\n const handleFinishCropping = () => {\n setIsCropping(false);\n onClose();\n };\n\n const handleFocalPointStart = () => {\n setIsFocalPointMode(true);\n };\n\n const handleFocalPointCancel = () => {\n setIsFocalPointMode(false);\n };\n\n const formDisabled = !canUpdate || isCropping || isFocalPointMode;\n\n const handleConfirmClose = () => {\n // eslint-disable-next-line no-alert\n const confirm = window.confirm(\n formatMessage({\n id: 'window.confirm.close-modal.file',\n defaultMessage: 'Are you sure? Your changes will be lost.',\n })\n );\n\n if (confirm) {\n onClose();\n }\n };\n\n const activeFolderId = asset?.folder?.id ?? toFolderId(initialFolderId);\n const initialFormData = !folderStructureIsLoading && {\n name: asset?.name,\n alternativeText: asset?.alternativeText ?? undefined,\n caption: asset?.caption ?? undefined,\n focalPoint: asset?.focalPoint ?? null,\n parent: {\n value: activeFolderId ?? undefined,\n label:\n findRecursiveFolderByValue(folderStructure!, activeFolderId!)?.label ??\n folderStructure![0].label,\n },\n };\n\n const handleClose = (values?: { [key: string]: unknown }) => {\n if (!isEqual(initialFormData, values)) {\n handleConfirmClose();\n } else {\n onClose();\n }\n };\n\n if (folderStructureIsLoading) {\n return (\n <>\n <DialogHeader />\n <LoadingBody minHeight=\"60vh\" justifyContent=\"center\" paddingTop={4} paddingBottom={4}>\n <Loader>\n {formatMessage({\n id: getTrad('content.isLoading'),\n defaultMessage: 'Content is loading.',\n })}\n </Loader>\n </LoadingBody>\n <Modal.Footer>\n <Button onClick={() => handleClose()} variant=\"tertiary\">\n {formatMessage({ id: 'cancel', defaultMessage: 'Cancel' })}\n </Button>\n </Modal.Footer>\n </>\n );\n }\n\n return (\n <Formik\n validationSchema={fileInfoSchema}\n validateOnChange={false}\n onSubmit={handleSubmit}\n initialValues={initialFormData}\n >\n {({ values, errors, handleChange, setFieldValue }) => (\n <>\n <DialogHeader />\n <Modal.Body>\n <Grid.Root gap={4}>\n <Grid.Item xs={12} col={6} direction=\"column\" alignItems=\"stretch\">\n <PreviewBox\n asset={asset!}\n canUpdate={canUpdate}\n canCopyLink={canCopyLink}\n canDownload={canDownload}\n onDelete={onClose}\n onCropFinish={handleFinishCropping}\n onCropStart={handleStartCropping}\n onCropCancel={handleCancelCropping}\n replacementFile={replacementFile}\n trackedLocation={trackedLocation}\n formFocalPoint={values.focalPoint}\n onFocalPointStart={handleFocalPointStart}\n onFocalPointFinish={(focalPoint) => {\n setIsFocalPointMode(false);\n setFieldValue('focalPoint', focalPoint);\n }}\n onFocalPointCancel={handleFocalPointCancel}\n />\n </Grid.Item>\n <Grid.Item xs={12} col={6} direction=\"column\" alignItems=\"stretch\">\n <Form noValidate>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={3}>\n <ContextInfo\n blocks={[\n {\n label: formatMessage({\n id: getTrad('modal.file-details.size'),\n defaultMessage: 'Size',\n }),\n value: formatBytes(asset?.size ? asset.size : 0),\n },\n\n {\n label: formatMessage({\n id: getTrad('modal.file-details.dimensions'),\n defaultMessage: 'Dimensions',\n }),\n value:\n asset?.height && asset.width ? `${asset.width}✕${asset.height}` : null,\n },\n\n {\n label: formatMessage({\n id: getTrad('modal.file-details.date'),\n defaultMessage: 'Date',\n }),\n value: formatDate(new Date(asset?.createdAt ? asset.createdAt : '')),\n },\n\n {\n label: formatMessage({\n id: getTrad('modal.file-details.extension'),\n defaultMessage: 'Extension',\n }),\n value: getFileExtension(asset?.ext)!,\n },\n\n {\n label: formatMessage({\n id: getTrad('modal.file-details.id'),\n defaultMessage: 'Asset ID',\n }),\n value: asset?.id ? asset.id : null,\n },\n\n ...(values.focalPoint\n ? [\n {\n label: formatMessage({\n id: getTrad('modal.file-details.focal-point'),\n defaultMessage: 'Focal point',\n }),\n value: `x: ${values.focalPoint.x}% - y: ${values.focalPoint.y}%`,\n },\n ]\n : []),\n ]}\n />\n <Field.Root name=\"name\" error={errors.name}>\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.file-name'),\n defaultMessage: 'File name',\n })}\n </Field.Label>\n <TextInput\n value={values.name}\n onChange={handleChange}\n disabled={formDisabled}\n type=\"text\"\n />\n <Field.Error />\n </Field.Root>\n\n {!omitFields?.includes('alternativeText') && (\n <Field.Root\n name=\"alternativeText\"\n hint={formatMessage({\n id: getTrad('form.input.description.file-alt'),\n defaultMessage:\n 'This text will be displayed if the asset can’t be shown.',\n })}\n error={errors.alternativeText}\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.file-alt'),\n defaultMessage: 'Alternative text',\n })}\n </Field.Label>\n <TextInput\n value={values.alternativeText}\n onChange={handleChange}\n disabled={formDisabled}\n type=\"text\"\n />\n <Field.Hint />\n <Field.Error />\n </Field.Root>\n )}\n\n {!omitFields?.includes('caption') && (\n <Field.Root name=\"caption\" error={errors.caption}>\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.file-caption'),\n defaultMessage: 'Caption',\n })}\n </Field.Label>\n <TextInput\n value={values.caption}\n onChange={handleChange}\n disabled={formDisabled}\n type=\"text\"\n />\n </Field.Root>\n )}\n\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <Field.Root name=\"parent\" id=\"asset-folder\">\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.file-location'),\n defaultMessage: 'Location',\n })}\n </Field.Label>\n\n <SelectTree\n name=\"parent\"\n defaultValue={values.parent}\n options={folderStructure!}\n onChange={(value) => {\n setFieldValue('parent', value);\n }}\n menuPortalTarget={document.querySelector('body')}\n inputId=\"asset-folder\"\n isDisabled={formDisabled}\n error={errors?.parent}\n ariaErrorMessage=\"folder-parent-error\"\n />\n </Field.Root>\n </Flex>\n </Flex>\n\n <VisuallyHidden>\n <button\n type=\"submit\"\n tabIndex={-1}\n ref={submitButtonRef}\n disabled={formDisabled}\n >\n {formatMessage({ id: 'submit', defaultMessage: 'Submit' })}\n </button>\n </VisuallyHidden>\n </Form>\n </Grid.Item>\n </Grid.Root>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={() => handleClose({ ...values })} variant=\"tertiary\">\n {formatMessage({ id: 'global.cancel', defaultMessage: 'Cancel' })}\n </Button>\n <Flex gap={2}>\n {!omitActions?.includes('replace') && (\n <ReplaceMediaButton\n onSelectMedia={setReplacementFile}\n acceptedMime={asset?.mime ?? ''}\n disabled={formDisabled}\n trackedLocation={trackedLocation}\n />\n )}\n\n <Button\n onClick={() => submitButtonRef.current?.click()}\n loading={isLoading}\n disabled={formDisabled}\n >\n {formatMessage({ id: 'global.finish', defaultMessage: 'Finish' })}\n </Button>\n </Flex>\n </Modal.Footer>\n </>\n )}\n </Formik>\n );\n};\n\ninterface EditAssetDialogProps {\n asset: Asset;\n canUpdate?: boolean;\n canCopyLink?: boolean;\n canDownload?: boolean;\n trackedLocation?: string;\n open: boolean;\n onClose: (arg?: Asset | null | boolean) => void;\n}\n\nexport const EditAssetDialog = ({\n open,\n onClose,\n canUpdate = false,\n canCopyLink = false,\n canDownload = false,\n ...restProps\n}: EditAssetDialogProps) => {\n return (\n <Modal.Root open={open} onOpenChange={onClose}>\n <Modal.Content>\n <EditAssetContent\n onClose={onClose}\n canUpdate={canUpdate}\n canCopyLink={canCopyLink}\n canDownload={canDownload}\n {...restProps}\n />\n </Modal.Content>\n </Modal.Root>\n );\n};\n"],"names":["LoadingBody","styled","Flex","focalPointSchema","yup","object","x","number","min","max","required","y","nullable","default","fileInfoSchema","name","string","alternativeText","caption","focalPoint","folder","toFolderId","value","undefined","Number","isFinite","parsed","EditAssetContent","onClose","asset","initialFolderId","canUpdate","canCopyLink","canDownload","trackedLocation","omitFields","omitActions","formatMessage","formatDate","useIntl","trackUsage","useTracking","submitButtonRef","React","useRef","isCropping","setIsCropping","useState","isFocalPointMode","setIsFocalPointMode","replacementFile","setReplacementFile","editAsset","isLoading","useEditAsset","data","folderStructure","folderStructureIsLoading","useFolderStructure","enabled","handleSubmit","values","nextAsset","parent","isLocal","editedAsset","assetType","mime","split","didChangeLocation","id","location","type","changeLocation","handleStartCropping","handleCancelCropping","handleFinishCropping","handleFocalPointStart","handleFocalPointCancel","formDisabled","handleConfirmClose","confirm","window","defaultMessage","activeFolderId","initialFormData","label","findRecursiveFolderByValue","handleClose","isEqual","_jsxs","_Fragment","_jsx","DialogHeader","minHeight","justifyContent","paddingTop","paddingBottom","Loader","getTrad","Modal","Footer","Button","onClick","variant","Formik","validationSchema","validateOnChange","onSubmit","initialValues","errors","handleChange","setFieldValue","Body","Grid","Root","gap","Item","xs","col","direction","alignItems","PreviewBox","onDelete","onCropFinish","onCropStart","onCropCancel","formFocalPoint","onFocalPointStart","onFocalPointFinish","onFocalPointCancel","Form","noValidate","ContextInfo","blocks","formatBytes","size","height","width","Date","createdAt","getFileExtension","ext","Field","error","Label","TextInput","onChange","disabled","Error","includes","hint","Hint","SelectTree","defaultValue","options","menuPortalTarget","document","querySelector","inputId","isDisabled","ariaErrorMessage","VisuallyHidden","button","tabIndex","ref","ReplaceMediaButton","onSelectMedia","acceptedMime","current","click","loading","EditAssetDialog","open","restProps","onOpenChange","Content"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EditAssetContent.mjs","sources":["../../../../admin/src/components/EditAssetDialog/EditAssetContent.tsx"],"sourcesContent":["/**\n *\n * EditAssetDialog\n *\n */\nimport * as React from 'react';\n\nimport {\n Button,\n Field,\n Flex,\n Grid,\n Loader,\n Modal,\n TextInput,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Form, Formik } from 'formik';\nimport isEqual from 'lodash/isEqual';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\nimport * as yup from 'yup';\n\nimport { useEditAsset } from '../../hooks/useEditAsset';\nimport { useFolderStructure } from '../../hooks/useFolderStructure';\nimport { useTracking } from '../../hooks/useTracking';\nimport { findRecursiveFolderByValue, getTrad, getFileExtension, formatBytes } from '../../utils';\nimport { ContextInfo } from '../ContextInfo/ContextInfo';\nimport { SelectTree } from '../SelectTree/SelectTree';\n\nimport { DialogHeader } from './DialogHeader';\nimport { PreviewBox } from './PreviewBox/PreviewBox';\nimport { ReplaceMediaButton } from './ReplaceMediaButton';\n\nimport type {\n File as FileDefinition,\n RawFile,\n FocalPoint,\n} from '../../../../shared/contracts/files';\n\nconst LoadingBody = styled(Flex)`\n /* 80px are coming from the Tabs component that is not included in the ModalBody */\n min-height: ${() => `calc(60dvh + 8rem)`};\n`;\n\nconst focalPointSchema = yup\n .object({\n x: yup.number().min(0).max(100).required(),\n y: yup.number().min(0).max(100).required(),\n })\n .nullable()\n .default(null);\n\nconst fileInfoSchema = yup.object({\n name: yup.string().required(),\n alternativeText: yup.string(),\n caption: yup.string(),\n focalPoint: focalPointSchema,\n folder: yup.number(),\n});\n\nexport interface Asset extends Omit<FileDefinition, 'folder'> {\n isLocal?: boolean;\n rawFile?: RawFile;\n folder?: FileDefinition['folder'] & { id: number };\n}\n\ninterface EditAssetContentProps {\n asset?: Asset;\n initialFolderId?: string | number | null;\n canUpdate?: boolean;\n canCopyLink?: boolean;\n canDownload?: boolean;\n trackedLocation?: string;\n onClose: (arg?: Asset | null | boolean) => void;\n omitFields?: ('caption' | 'alternativeText')[];\n omitActions?: 'replace'[];\n}\n\ninterface FormInitialData {\n name?: string;\n alternativeText?: string;\n caption?: string;\n focalPoint?: FocalPoint | null;\n parent?: {\n value?: number;\n label: string;\n };\n}\n\nconst toFolderId = (value: string | number | null | undefined): number | undefined => {\n if (value === null || value === undefined) {\n return undefined;\n }\n\n if (typeof value === 'number') {\n return Number.isFinite(value) ? value : undefined;\n }\n\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n};\n\nexport const EditAssetContent = ({\n onClose,\n asset,\n initialFolderId = null,\n canUpdate = false,\n canCopyLink = false,\n canDownload = false,\n trackedLocation,\n omitFields = [],\n omitActions = [],\n}: EditAssetContentProps) => {\n const { formatMessage, formatDate } = useIntl();\n const { trackUsage } = useTracking();\n const submitButtonRef = React.useRef<HTMLButtonElement>(null);\n const [isCropping, setIsCropping] = React.useState(false);\n const [isFocalPointMode, setIsFocalPointMode] = React.useState(false);\n const [replacementFile, setReplacementFile] = React.useState<File | undefined>();\n const { editAsset, isLoading } = useEditAsset();\n\n const { data: folderStructure, isLoading: folderStructureIsLoading } = useFolderStructure({\n enabled: true,\n });\n\n const handleSubmit = async (values: FormInitialData) => {\n const nextAsset = { ...asset, ...values, folder: values.parent?.value } as Asset;\n\n if (asset?.isLocal) {\n onClose(nextAsset);\n } else {\n const editedAsset = (await editAsset(nextAsset, replacementFile!)) as Asset;\n\n const assetType = asset?.mime?.split('/')[0];\n // if the folder parent was the root of Media Library, its id is null\n // we know it changed location if the new parent value exists\n const didChangeLocation = asset?.folder?.id\n ? asset.folder.id !== values.parent?.value\n : asset?.folder === null && !!values.parent?.value;\n\n trackUsage('didEditMediaLibraryElements', {\n location: trackedLocation,\n type: assetType,\n changeLocation: didChangeLocation,\n });\n\n onClose(editedAsset);\n }\n };\n\n const handleStartCropping = () => {\n setIsCropping(true);\n };\n\n const handleCancelCropping = () => {\n setIsCropping(false);\n };\n\n const handleFinishCropping = () => {\n setIsCropping(false);\n onClose();\n };\n\n const handleFocalPointStart = () => {\n setIsFocalPointMode(true);\n };\n\n const handleFocalPointCancel = () => {\n setIsFocalPointMode(false);\n };\n\n const formDisabled = !canUpdate || isCropping || isFocalPointMode;\n\n const handleConfirmClose = () => {\n // eslint-disable-next-line no-alert\n const confirm = window.confirm(\n formatMessage({\n id: 'window.confirm.close-modal.file',\n defaultMessage: 'Are you sure? Your changes will be lost.',\n })\n );\n\n if (confirm) {\n onClose();\n }\n };\n\n const activeFolderId = asset?.folder?.id ?? toFolderId(initialFolderId);\n const initialFormData: FormInitialData = !folderStructureIsLoading\n ? {\n name: asset?.name,\n alternativeText: asset?.alternativeText ?? undefined,\n caption: asset?.caption ?? undefined,\n focalPoint: asset?.focalPoint ?? null,\n parent: {\n value: activeFolderId ?? undefined,\n label:\n findRecursiveFolderByValue(folderStructure!, activeFolderId!)?.label ??\n folderStructure![0].label,\n },\n }\n : {};\n\n const handleClose = (values?: { [key: string]: unknown }) => {\n if (!isEqual(initialFormData, values)) {\n handleConfirmClose();\n } else {\n onClose();\n }\n };\n\n if (folderStructureIsLoading) {\n return (\n <>\n <DialogHeader />\n <LoadingBody minHeight=\"60vh\" justifyContent=\"center\" paddingTop={4} paddingBottom={4}>\n <Loader>\n {formatMessage({\n id: getTrad('content.isLoading'),\n defaultMessage: 'Content is loading.',\n })}\n </Loader>\n </LoadingBody>\n <Modal.Footer>\n <Button onClick={() => handleClose()} variant=\"tertiary\">\n {formatMessage({ id: 'cancel', defaultMessage: 'Cancel' })}\n </Button>\n </Modal.Footer>\n </>\n );\n }\n\n return (\n <Formik\n validationSchema={fileInfoSchema}\n validateOnChange={false}\n onSubmit={handleSubmit}\n initialValues={initialFormData}\n >\n {({ values, errors, handleChange, setFieldValue }) => (\n <>\n <DialogHeader />\n <Modal.Body>\n <Grid.Root gap={4}>\n <Grid.Item xs={12} col={6} direction=\"column\" alignItems=\"stretch\">\n <PreviewBox\n asset={asset!}\n canUpdate={canUpdate}\n canCopyLink={canCopyLink}\n canDownload={canDownload}\n onDelete={onClose}\n onCropFinish={handleFinishCropping}\n onCropStart={handleStartCropping}\n onCropCancel={handleCancelCropping}\n replacementFile={replacementFile}\n trackedLocation={trackedLocation}\n formFocalPoint={values.focalPoint}\n onFocalPointStart={handleFocalPointStart}\n onFocalPointFinish={(focalPoint) => {\n setIsFocalPointMode(false);\n setFieldValue('focalPoint', focalPoint);\n }}\n onFocalPointCancel={handleFocalPointCancel}\n />\n </Grid.Item>\n <Grid.Item xs={12} col={6} direction=\"column\" alignItems=\"stretch\">\n <Form noValidate>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={3}>\n <ContextInfo\n blocks={[\n {\n label: formatMessage({\n id: getTrad('modal.file-details.size'),\n defaultMessage: 'Size',\n }),\n value: formatBytes(asset?.size ? asset.size : 0),\n },\n\n {\n label: formatMessage({\n id: getTrad('modal.file-details.dimensions'),\n defaultMessage: 'Dimensions',\n }),\n value:\n asset?.height && asset.width ? `${asset.width}✕${asset.height}` : null,\n },\n\n {\n label: formatMessage({\n id: getTrad('modal.file-details.date'),\n defaultMessage: 'Date',\n }),\n value: formatDate(new Date(asset?.createdAt ? asset.createdAt : '')),\n },\n\n {\n label: formatMessage({\n id: getTrad('modal.file-details.extension'),\n defaultMessage: 'Extension',\n }),\n value: getFileExtension(asset?.ext)!,\n },\n\n {\n label: formatMessage({\n id: getTrad('modal.file-details.id'),\n defaultMessage: 'Asset ID',\n }),\n value: asset?.id ? asset.id : null,\n },\n\n ...(values.focalPoint\n ? [\n {\n label: formatMessage({\n id: getTrad('modal.file-details.focal-point'),\n defaultMessage: 'Focal point',\n }),\n value: `x: ${values.focalPoint.x}% - y: ${values.focalPoint.y}%`,\n },\n ]\n : []),\n ]}\n />\n <Field.Root name=\"name\" error={errors.name}>\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.file-name'),\n defaultMessage: 'File name',\n })}\n </Field.Label>\n <TextInput\n value={values.name}\n onChange={handleChange}\n disabled={formDisabled}\n type=\"text\"\n />\n <Field.Error />\n </Field.Root>\n\n {!omitFields?.includes('alternativeText') && (\n <Field.Root\n name=\"alternativeText\"\n hint={formatMessage({\n id: getTrad('form.input.description.file-alt'),\n defaultMessage:\n 'This text will be displayed if the asset can’t be shown.',\n })}\n error={errors.alternativeText}\n >\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.file-alt'),\n defaultMessage: 'Alternative text',\n })}\n </Field.Label>\n <TextInput\n value={values.alternativeText}\n onChange={handleChange}\n disabled={formDisabled}\n type=\"text\"\n />\n <Field.Hint />\n <Field.Error />\n </Field.Root>\n )}\n\n {!omitFields?.includes('caption') && (\n <Field.Root name=\"caption\" error={errors.caption}>\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.file-caption'),\n defaultMessage: 'Caption',\n })}\n </Field.Label>\n <TextInput\n value={values.caption}\n onChange={handleChange}\n disabled={formDisabled}\n type=\"text\"\n />\n </Field.Root>\n )}\n\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <Field.Root name=\"parent\" id=\"asset-folder\">\n <Field.Label>\n {formatMessage({\n id: getTrad('form.input.label.file-location'),\n defaultMessage: 'Location',\n })}\n </Field.Label>\n\n <SelectTree\n name=\"parent\"\n defaultValue={values.parent}\n options={folderStructure!}\n onChange={(value) => {\n setFieldValue('parent', value);\n }}\n menuPortalTarget={document.querySelector('body')}\n inputId=\"asset-folder\"\n isDisabled={formDisabled}\n error={errors?.parent}\n ariaErrorMessage=\"folder-parent-error\"\n />\n </Field.Root>\n </Flex>\n </Flex>\n\n <VisuallyHidden>\n <button\n type=\"submit\"\n tabIndex={-1}\n ref={submitButtonRef}\n disabled={formDisabled}\n >\n {formatMessage({ id: 'submit', defaultMessage: 'Submit' })}\n </button>\n </VisuallyHidden>\n </Form>\n </Grid.Item>\n </Grid.Root>\n </Modal.Body>\n <Modal.Footer>\n <Button onClick={() => handleClose({ ...values })} variant=\"tertiary\">\n {formatMessage({ id: 'global.cancel', defaultMessage: 'Cancel' })}\n </Button>\n <Flex gap={2}>\n {!omitActions?.includes('replace') && (\n <ReplaceMediaButton\n onSelectMedia={setReplacementFile}\n acceptedMime={asset?.mime ?? ''}\n disabled={formDisabled}\n trackedLocation={trackedLocation}\n />\n )}\n\n <Button\n onClick={() => submitButtonRef.current?.click()}\n loading={isLoading}\n disabled={formDisabled}\n >\n {formatMessage({ id: 'global.finish', defaultMessage: 'Finish' })}\n </Button>\n </Flex>\n </Modal.Footer>\n </>\n )}\n </Formik>\n );\n};\n\ninterface EditAssetDialogProps {\n asset: Asset;\n canUpdate?: boolean;\n canCopyLink?: boolean;\n canDownload?: boolean;\n trackedLocation?: string;\n open: boolean;\n onClose: (arg?: Asset | null | boolean) => void;\n}\n\nexport const EditAssetDialog = ({\n open,\n onClose,\n canUpdate = false,\n canCopyLink = false,\n canDownload = false,\n ...restProps\n}: EditAssetDialogProps) => {\n return (\n <Modal.Root open={open} onOpenChange={onClose}>\n <Modal.Content>\n <EditAssetContent\n onClose={onClose}\n canUpdate={canUpdate}\n canCopyLink={canCopyLink}\n canDownload={canDownload}\n {...restProps}\n />\n </Modal.Content>\n </Modal.Root>\n );\n};\n"],"names":["LoadingBody","styled","Flex","focalPointSchema","yup","object","x","number","min","max","required","y","nullable","default","fileInfoSchema","name","string","alternativeText","caption","focalPoint","folder","toFolderId","value","undefined","Number","isFinite","parsed","EditAssetContent","onClose","asset","initialFolderId","canUpdate","canCopyLink","canDownload","trackedLocation","omitFields","omitActions","formatMessage","formatDate","useIntl","trackUsage","useTracking","submitButtonRef","React","useRef","isCropping","setIsCropping","useState","isFocalPointMode","setIsFocalPointMode","replacementFile","setReplacementFile","editAsset","isLoading","useEditAsset","data","folderStructure","folderStructureIsLoading","useFolderStructure","enabled","handleSubmit","values","nextAsset","parent","isLocal","editedAsset","assetType","mime","split","didChangeLocation","id","location","type","changeLocation","handleStartCropping","handleCancelCropping","handleFinishCropping","handleFocalPointStart","handleFocalPointCancel","formDisabled","handleConfirmClose","confirm","window","defaultMessage","activeFolderId","initialFormData","label","findRecursiveFolderByValue","handleClose","isEqual","_jsxs","_Fragment","_jsx","DialogHeader","minHeight","justifyContent","paddingTop","paddingBottom","Loader","getTrad","Modal","Footer","Button","onClick","variant","Formik","validationSchema","validateOnChange","onSubmit","initialValues","errors","handleChange","setFieldValue","Body","Grid","Root","gap","Item","xs","col","direction","alignItems","PreviewBox","onDelete","onCropFinish","onCropStart","onCropCancel","formFocalPoint","onFocalPointStart","onFocalPointFinish","onFocalPointCancel","Form","noValidate","ContextInfo","blocks","formatBytes","size","height","width","Date","createdAt","getFileExtension","ext","Field","error","Label","TextInput","onChange","disabled","Error","includes","hint","Hint","SelectTree","defaultValue","options","menuPortalTarget","document","querySelector","inputId","isDisabled","ariaErrorMessage","VisuallyHidden","button","tabIndex","ref","ReplaceMediaButton","onSelectMedia","acceptedMime","current","click","loading","EditAssetDialog","open","restProps","onOpenChange","Content"],"mappings":"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"}
|
|
@@ -54,8 +54,16 @@ const CarouselAsset = ({ asset })=>{
|
|
|
54
54
|
// Adding a param to the url to bust the cache and force the refresh of the image when replaced
|
|
55
55
|
// Only add updatedAt parameter if the URL is not signed to prevent signature invalidation
|
|
56
56
|
const cacheBustedUrl = asset.isUrlSigned ? assetUrl : `${assetUrl}${assetUrl.includes('?') ? '&' : '?'}updatedAt=${asset.updatedAt}`;
|
|
57
|
+
// Only set crossOrigin for signed remote URLs. Signed URLs are loaded
|
|
58
|
+
// without a cache-buster (see cacheBustedUrl above), so the thumbnail and
|
|
59
|
+
// preview hit the identical URL and would collide in the browser's cache
|
|
60
|
+
// unless both opt into CORS. Public/unsigned remote URLs get the
|
|
61
|
+
// ?updatedAt= buster, so they never collide and must NOT require a bucket
|
|
62
|
+
// CORS rule just to render a plain <img>. See #26581.
|
|
63
|
+
const crossOrigin = !asset.isLocal && asset.isUrlSigned ? 'anonymous' : undefined;
|
|
57
64
|
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
58
65
|
tag: "img",
|
|
66
|
+
crossOrigin: crossOrigin,
|
|
59
67
|
maxHeight: "100%",
|
|
60
68
|
maxWidth: "100%",
|
|
61
69
|
src: cacheBustedUrl,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CarouselAsset.js","sources":["../../../../../admin/src/components/MediaLibraryInput/Carousel/CarouselAsset.tsx"],"sourcesContent":["import { Box, Flex } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { ASSET_TYPES } from '../../../enums';\nimport { createAssetUrl } from '../../../utils';\nimport { getFileIconComponent } from '../../../utils/icons';\nimport { AudioPreview } from '../../AssetCard/AudioPreview';\nimport { VideoPreview } from '../../AssetCard/VideoPreview';\n\nimport type { File as FileAsset } from '../../../../../shared/contracts/files';\n\nconst DocAsset = styled(Flex)`\n background: linear-gradient(180deg, #ffffff 0%, #f6f6f9 121.48%);\n`;\n\nconst VideoPreviewWrapper = styled(Box)`\n canvas,\n video {\n max-width: 100%;\n height: 124px;\n }\n`;\n\nconst AudioPreviewWrapper = styled(Box)`\n canvas,\n audio {\n max-width: 100%;\n }\n`;\n\nexport const CarouselAsset = ({ asset }: { asset: FileAsset }) => {\n if (asset.mime?.includes(ASSET_TYPES.Video)) {\n return (\n <VideoPreviewWrapper height=\"100%\">\n <VideoPreview\n url={createAssetUrl(asset, true)!}\n mime={asset.mime}\n alt={asset.alternativeText || asset.name}\n />\n </VideoPreviewWrapper>\n );\n }\n\n if (asset.mime?.includes(ASSET_TYPES.Audio)) {\n return (\n <AudioPreviewWrapper>\n <AudioPreview\n url={createAssetUrl(asset, true)!}\n alt={asset.alternativeText || asset.name}\n />\n </AudioPreviewWrapper>\n );\n }\n\n if (asset.mime?.includes(ASSET_TYPES.Image)) {\n const assetUrl = createAssetUrl(asset, true);\n if (!assetUrl) return null;\n\n // Adding a param to the url to bust the cache and force the refresh of the image when replaced\n // Only add updatedAt parameter if the URL is not signed to prevent signature invalidation\n const cacheBustedUrl = asset.isUrlSigned\n ? assetUrl\n : `${assetUrl}${assetUrl.includes('?') ? '&' : '?'}updatedAt=${asset.updatedAt}`;\n\n return (\n <Box\n tag=\"img\"\n maxHeight=\"100%\"\n maxWidth=\"100%\"\n src={cacheBustedUrl}\n alt={asset.alternativeText || asset.name}\n />\n );\n }\n\n const IconComponent = getFileIconComponent(asset.ext);\n\n return (\n <DocAsset width=\"100%\" height=\"100%\" justifyContent=\"center\" hasRadius>\n <IconComponent aria-label={asset.alternativeText || asset.name} width=\"24px\" height=\"32px\" />\n </DocAsset>\n );\n};\n"],"names":["DocAsset","styled","Flex","VideoPreviewWrapper","Box","AudioPreviewWrapper","CarouselAsset","asset","mime","includes","ASSET_TYPES","Video","_jsx","height","VideoPreview","url","createAssetUrl","alt","alternativeText","name","Audio","AudioPreview","Image","assetUrl","cacheBustedUrl","isUrlSigned","updatedAt","tag","maxHeight","maxWidth","src","IconComponent","getFileIconComponent","ext","width","justifyContent","hasRadius","aria-label"],"mappings":";;;;;;;;;;;;;;;AAWA,MAAMA,QAAAA,GAAWC,uBAAAA,CAAOC,iBAAAA,CAAK;;AAE7B,CAAC;AAED,MAAMC,mBAAAA,GAAsBF,uBAAAA,CAAOG,gBAAAA,CAAI;;;;;;AAMvC,CAAC;AAED,MAAMC,mBAAAA,GAAsBJ,uBAAAA,CAAOG,gBAAAA,CAAI;;;;;AAKvC,CAAC;AAEM,MAAME,aAAAA,GAAgB,CAAC,EAAEC,KAAK,EAAwB,GAAA;AAC3D,IAAA,IAAIA,MAAMC,IAAI,EAAEC,QAAAA,CAASC,iBAAAA,CAAYC,KAAK,CAAA,EAAG;AAC3C,QAAA,qBACEC,cAAA,CAACT,mBAAAA,EAAAA;YAAoBU,MAAAA,EAAO,MAAA;AAC1B,YAAA,QAAA,gBAAAD,cAAA,CAACE,yBAAAA,EAAAA;AACCC,gBAAAA,GAAAA,EAAKC,8BAAeT,KAAAA,EAAO,IAAA,CAAA;AAC3BC,gBAAAA,IAAAA,EAAMD,MAAMC,IAAI;AAChBS,gBAAAA,GAAAA,EAAKV,KAAAA,CAAMW,eAAe,IAAIX,KAAAA,CAAMY;;;AAI5C,IAAA;AAEA,IAAA,IAAIZ,MAAMC,IAAI,EAAEC,QAAAA,CAASC,iBAAAA,CAAYU,KAAK,CAAA,EAAG;AAC3C,QAAA,qBACER,cAAA,CAACP,mBAAAA,EAAAA;AACC,YAAA,QAAA,gBAAAO,cAAA,CAACS,yBAAAA,EAAAA;AACCN,gBAAAA,GAAAA,EAAKC,8BAAeT,KAAAA,EAAO,IAAA,CAAA;AAC3BU,gBAAAA,GAAAA,EAAKV,KAAAA,CAAMW,eAAe,IAAIX,KAAAA,CAAMY;;;AAI5C,IAAA;AAEA,IAAA,IAAIZ,MAAMC,IAAI,EAAEC,QAAAA,CAASC,iBAAAA,CAAYY,KAAK,CAAA,EAAG;QAC3C,MAAMC,QAAAA,GAAWP,8BAAeT,KAAAA,EAAO,IAAA,CAAA;QACvC,IAAI,CAACgB,UAAU,OAAO,IAAA;;;AAItB,QAAA,MAAMC,iBAAiBjB,KAAAA,CAAMkB,WAAW,GACpCF,QAAAA,GACA,GAAGA,QAAAA,CAAAA,EAAWA,QAAAA,CAASd,QAAQ,CAAC,OAAO,GAAA,GAAM,GAAA,CAAI,UAAU,EAAEF,KAAAA,CAAMmB,SAAS,CAAA,CAAE;
|
|
1
|
+
{"version":3,"file":"CarouselAsset.js","sources":["../../../../../admin/src/components/MediaLibraryInput/Carousel/CarouselAsset.tsx"],"sourcesContent":["import { Box, Flex } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { ASSET_TYPES } from '../../../enums';\nimport { createAssetUrl } from '../../../utils';\nimport { getFileIconComponent } from '../../../utils/icons';\nimport { AudioPreview } from '../../AssetCard/AudioPreview';\nimport { VideoPreview } from '../../AssetCard/VideoPreview';\n\nimport type { File as FileAsset } from '../../../../../shared/contracts/files';\n\nconst DocAsset = styled(Flex)`\n background: linear-gradient(180deg, #ffffff 0%, #f6f6f9 121.48%);\n`;\n\nconst VideoPreviewWrapper = styled(Box)`\n canvas,\n video {\n max-width: 100%;\n height: 124px;\n }\n`;\n\nconst AudioPreviewWrapper = styled(Box)`\n canvas,\n audio {\n max-width: 100%;\n }\n`;\n\nexport const CarouselAsset = ({ asset }: { asset: FileAsset }) => {\n if (asset.mime?.includes(ASSET_TYPES.Video)) {\n return (\n <VideoPreviewWrapper height=\"100%\">\n <VideoPreview\n url={createAssetUrl(asset, true)!}\n mime={asset.mime}\n alt={asset.alternativeText || asset.name}\n />\n </VideoPreviewWrapper>\n );\n }\n\n if (asset.mime?.includes(ASSET_TYPES.Audio)) {\n return (\n <AudioPreviewWrapper>\n <AudioPreview\n url={createAssetUrl(asset, true)!}\n alt={asset.alternativeText || asset.name}\n />\n </AudioPreviewWrapper>\n );\n }\n\n if (asset.mime?.includes(ASSET_TYPES.Image)) {\n const assetUrl = createAssetUrl(asset, true);\n if (!assetUrl) return null;\n\n // Adding a param to the url to bust the cache and force the refresh of the image when replaced\n // Only add updatedAt parameter if the URL is not signed to prevent signature invalidation\n const cacheBustedUrl = asset.isUrlSigned\n ? assetUrl\n : `${assetUrl}${assetUrl.includes('?') ? '&' : '?'}updatedAt=${asset.updatedAt}`;\n\n // Only set crossOrigin for signed remote URLs. Signed URLs are loaded\n // without a cache-buster (see cacheBustedUrl above), so the thumbnail and\n // preview hit the identical URL and would collide in the browser's cache\n // unless both opt into CORS. Public/unsigned remote URLs get the\n // ?updatedAt= buster, so they never collide and must NOT require a bucket\n // CORS rule just to render a plain <img>. See #26581.\n const crossOrigin = !asset.isLocal && asset.isUrlSigned ? 'anonymous' : undefined;\n\n return (\n <Box\n tag=\"img\"\n crossOrigin={crossOrigin}\n maxHeight=\"100%\"\n maxWidth=\"100%\"\n src={cacheBustedUrl}\n alt={asset.alternativeText || asset.name}\n />\n );\n }\n\n const IconComponent = getFileIconComponent(asset.ext);\n\n return (\n <DocAsset width=\"100%\" height=\"100%\" justifyContent=\"center\" hasRadius>\n <IconComponent aria-label={asset.alternativeText || asset.name} width=\"24px\" height=\"32px\" />\n </DocAsset>\n );\n};\n"],"names":["DocAsset","styled","Flex","VideoPreviewWrapper","Box","AudioPreviewWrapper","CarouselAsset","asset","mime","includes","ASSET_TYPES","Video","_jsx","height","VideoPreview","url","createAssetUrl","alt","alternativeText","name","Audio","AudioPreview","Image","assetUrl","cacheBustedUrl","isUrlSigned","updatedAt","crossOrigin","isLocal","undefined","tag","maxHeight","maxWidth","src","IconComponent","getFileIconComponent","ext","width","justifyContent","hasRadius","aria-label"],"mappings":";;;;;;;;;;;;;;;AAWA,MAAMA,QAAAA,GAAWC,uBAAAA,CAAOC,iBAAAA,CAAK;;AAE7B,CAAC;AAED,MAAMC,mBAAAA,GAAsBF,uBAAAA,CAAOG,gBAAAA,CAAI;;;;;;AAMvC,CAAC;AAED,MAAMC,mBAAAA,GAAsBJ,uBAAAA,CAAOG,gBAAAA,CAAI;;;;;AAKvC,CAAC;AAEM,MAAME,aAAAA,GAAgB,CAAC,EAAEC,KAAK,EAAwB,GAAA;AAC3D,IAAA,IAAIA,MAAMC,IAAI,EAAEC,QAAAA,CAASC,iBAAAA,CAAYC,KAAK,CAAA,EAAG;AAC3C,QAAA,qBACEC,cAAA,CAACT,mBAAAA,EAAAA;YAAoBU,MAAAA,EAAO,MAAA;AAC1B,YAAA,QAAA,gBAAAD,cAAA,CAACE,yBAAAA,EAAAA;AACCC,gBAAAA,GAAAA,EAAKC,8BAAeT,KAAAA,EAAO,IAAA,CAAA;AAC3BC,gBAAAA,IAAAA,EAAMD,MAAMC,IAAI;AAChBS,gBAAAA,GAAAA,EAAKV,KAAAA,CAAMW,eAAe,IAAIX,KAAAA,CAAMY;;;AAI5C,IAAA;AAEA,IAAA,IAAIZ,MAAMC,IAAI,EAAEC,QAAAA,CAASC,iBAAAA,CAAYU,KAAK,CAAA,EAAG;AAC3C,QAAA,qBACER,cAAA,CAACP,mBAAAA,EAAAA;AACC,YAAA,QAAA,gBAAAO,cAAA,CAACS,yBAAAA,EAAAA;AACCN,gBAAAA,GAAAA,EAAKC,8BAAeT,KAAAA,EAAO,IAAA,CAAA;AAC3BU,gBAAAA,GAAAA,EAAKV,KAAAA,CAAMW,eAAe,IAAIX,KAAAA,CAAMY;;;AAI5C,IAAA;AAEA,IAAA,IAAIZ,MAAMC,IAAI,EAAEC,QAAAA,CAASC,iBAAAA,CAAYY,KAAK,CAAA,EAAG;QAC3C,MAAMC,QAAAA,GAAWP,8BAAeT,KAAAA,EAAO,IAAA,CAAA;QACvC,IAAI,CAACgB,UAAU,OAAO,IAAA;;;AAItB,QAAA,MAAMC,iBAAiBjB,KAAAA,CAAMkB,WAAW,GACpCF,QAAAA,GACA,GAAGA,QAAAA,CAAAA,EAAWA,QAAAA,CAASd,QAAQ,CAAC,OAAO,GAAA,GAAM,GAAA,CAAI,UAAU,EAAEF,KAAAA,CAAMmB,SAAS,CAAA,CAAE;;;;;;;QAQlF,MAAMC,WAAAA,GAAc,CAACpB,KAAAA,CAAMqB,OAAO,IAAIrB,KAAAA,CAAMkB,WAAW,GAAG,WAAA,GAAcI,SAAAA;AAExE,QAAA,qBACEjB,cAAA,CAACR,gBAAAA,EAAAA;YACC0B,GAAAA,EAAI,KAAA;YACJH,WAAAA,EAAaA,WAAAA;YACbI,SAAAA,EAAU,MAAA;YACVC,QAAAA,EAAS,MAAA;YACTC,GAAAA,EAAKT,cAAAA;AACLP,YAAAA,GAAAA,EAAKV,KAAAA,CAAMW,eAAe,IAAIX,KAAAA,CAAMY;;AAG1C,IAAA;IAEA,MAAMe,aAAAA,GAAgBC,0BAAAA,CAAqB5B,KAAAA,CAAM6B,GAAG,CAAA;AAEpD,IAAA,qBACExB,cAAA,CAACZ,QAAAA,EAAAA;QAASqC,KAAAA,EAAM,MAAA;QAAOxB,MAAAA,EAAO,MAAA;QAAOyB,cAAAA,EAAe,QAAA;QAASC,SAAS,EAAA,IAAA;AACpE,QAAA,QAAA,gBAAA3B,cAAA,CAACsB,aAAAA,EAAAA;AAAcM,YAAAA,YAAAA,EAAYjC,KAAAA,CAAMW,eAAe,IAAIX,KAAAA,CAAMY,IAAI;YAAEkB,KAAAA,EAAM,MAAA;YAAOxB,MAAAA,EAAO;;;AAG1F;;;;"}
|
|
@@ -52,8 +52,16 @@ const CarouselAsset = ({ asset })=>{
|
|
|
52
52
|
// Adding a param to the url to bust the cache and force the refresh of the image when replaced
|
|
53
53
|
// Only add updatedAt parameter if the URL is not signed to prevent signature invalidation
|
|
54
54
|
const cacheBustedUrl = asset.isUrlSigned ? assetUrl : `${assetUrl}${assetUrl.includes('?') ? '&' : '?'}updatedAt=${asset.updatedAt}`;
|
|
55
|
+
// Only set crossOrigin for signed remote URLs. Signed URLs are loaded
|
|
56
|
+
// without a cache-buster (see cacheBustedUrl above), so the thumbnail and
|
|
57
|
+
// preview hit the identical URL and would collide in the browser's cache
|
|
58
|
+
// unless both opt into CORS. Public/unsigned remote URLs get the
|
|
59
|
+
// ?updatedAt= buster, so they never collide and must NOT require a bucket
|
|
60
|
+
// CORS rule just to render a plain <img>. See #26581.
|
|
61
|
+
const crossOrigin = !asset.isLocal && asset.isUrlSigned ? 'anonymous' : undefined;
|
|
55
62
|
return /*#__PURE__*/ jsx(Box, {
|
|
56
63
|
tag: "img",
|
|
64
|
+
crossOrigin: crossOrigin,
|
|
57
65
|
maxHeight: "100%",
|
|
58
66
|
maxWidth: "100%",
|
|
59
67
|
src: cacheBustedUrl,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CarouselAsset.mjs","sources":["../../../../../admin/src/components/MediaLibraryInput/Carousel/CarouselAsset.tsx"],"sourcesContent":["import { Box, Flex } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { ASSET_TYPES } from '../../../enums';\nimport { createAssetUrl } from '../../../utils';\nimport { getFileIconComponent } from '../../../utils/icons';\nimport { AudioPreview } from '../../AssetCard/AudioPreview';\nimport { VideoPreview } from '../../AssetCard/VideoPreview';\n\nimport type { File as FileAsset } from '../../../../../shared/contracts/files';\n\nconst DocAsset = styled(Flex)`\n background: linear-gradient(180deg, #ffffff 0%, #f6f6f9 121.48%);\n`;\n\nconst VideoPreviewWrapper = styled(Box)`\n canvas,\n video {\n max-width: 100%;\n height: 124px;\n }\n`;\n\nconst AudioPreviewWrapper = styled(Box)`\n canvas,\n audio {\n max-width: 100%;\n }\n`;\n\nexport const CarouselAsset = ({ asset }: { asset: FileAsset }) => {\n if (asset.mime?.includes(ASSET_TYPES.Video)) {\n return (\n <VideoPreviewWrapper height=\"100%\">\n <VideoPreview\n url={createAssetUrl(asset, true)!}\n mime={asset.mime}\n alt={asset.alternativeText || asset.name}\n />\n </VideoPreviewWrapper>\n );\n }\n\n if (asset.mime?.includes(ASSET_TYPES.Audio)) {\n return (\n <AudioPreviewWrapper>\n <AudioPreview\n url={createAssetUrl(asset, true)!}\n alt={asset.alternativeText || asset.name}\n />\n </AudioPreviewWrapper>\n );\n }\n\n if (asset.mime?.includes(ASSET_TYPES.Image)) {\n const assetUrl = createAssetUrl(asset, true);\n if (!assetUrl) return null;\n\n // Adding a param to the url to bust the cache and force the refresh of the image when replaced\n // Only add updatedAt parameter if the URL is not signed to prevent signature invalidation\n const cacheBustedUrl = asset.isUrlSigned\n ? assetUrl\n : `${assetUrl}${assetUrl.includes('?') ? '&' : '?'}updatedAt=${asset.updatedAt}`;\n\n return (\n <Box\n tag=\"img\"\n maxHeight=\"100%\"\n maxWidth=\"100%\"\n src={cacheBustedUrl}\n alt={asset.alternativeText || asset.name}\n />\n );\n }\n\n const IconComponent = getFileIconComponent(asset.ext);\n\n return (\n <DocAsset width=\"100%\" height=\"100%\" justifyContent=\"center\" hasRadius>\n <IconComponent aria-label={asset.alternativeText || asset.name} width=\"24px\" height=\"32px\" />\n </DocAsset>\n );\n};\n"],"names":["DocAsset","styled","Flex","VideoPreviewWrapper","Box","AudioPreviewWrapper","CarouselAsset","asset","mime","includes","ASSET_TYPES","Video","_jsx","height","VideoPreview","url","createAssetUrl","alt","alternativeText","name","Audio","AudioPreview","Image","assetUrl","cacheBustedUrl","isUrlSigned","updatedAt","tag","maxHeight","maxWidth","src","IconComponent","getFileIconComponent","ext","width","justifyContent","hasRadius","aria-label"],"mappings":";;;;;;;;;;;;;AAWA,MAAMA,QAAAA,GAAWC,MAAAA,CAAOC,IAAAA,CAAK;;AAE7B,CAAC;AAED,MAAMC,mBAAAA,GAAsBF,MAAAA,CAAOG,GAAAA,CAAI;;;;;;AAMvC,CAAC;AAED,MAAMC,mBAAAA,GAAsBJ,MAAAA,CAAOG,GAAAA,CAAI;;;;;AAKvC,CAAC;AAEM,MAAME,aAAAA,GAAgB,CAAC,EAAEC,KAAK,EAAwB,GAAA;AAC3D,IAAA,IAAIA,MAAMC,IAAI,EAAEC,QAAAA,CAASC,WAAAA,CAAYC,KAAK,CAAA,EAAG;AAC3C,QAAA,qBACEC,GAAA,CAACT,mBAAAA,EAAAA;YAAoBU,MAAAA,EAAO,MAAA;AAC1B,YAAA,QAAA,gBAAAD,GAAA,CAACE,YAAAA,EAAAA;AACCC,gBAAAA,GAAAA,EAAKC,eAAeT,KAAAA,EAAO,IAAA,CAAA;AAC3BC,gBAAAA,IAAAA,EAAMD,MAAMC,IAAI;AAChBS,gBAAAA,GAAAA,EAAKV,KAAAA,CAAMW,eAAe,IAAIX,KAAAA,CAAMY;;;AAI5C,IAAA;AAEA,IAAA,IAAIZ,MAAMC,IAAI,EAAEC,QAAAA,CAASC,WAAAA,CAAYU,KAAK,CAAA,EAAG;AAC3C,QAAA,qBACER,GAAA,CAACP,mBAAAA,EAAAA;AACC,YAAA,QAAA,gBAAAO,GAAA,CAACS,YAAAA,EAAAA;AACCN,gBAAAA,GAAAA,EAAKC,eAAeT,KAAAA,EAAO,IAAA,CAAA;AAC3BU,gBAAAA,GAAAA,EAAKV,KAAAA,CAAMW,eAAe,IAAIX,KAAAA,CAAMY;;;AAI5C,IAAA;AAEA,IAAA,IAAIZ,MAAMC,IAAI,EAAEC,QAAAA,CAASC,WAAAA,CAAYY,KAAK,CAAA,EAAG;QAC3C,MAAMC,QAAAA,GAAWP,eAAeT,KAAAA,EAAO,IAAA,CAAA;QACvC,IAAI,CAACgB,UAAU,OAAO,IAAA;;;AAItB,QAAA,MAAMC,iBAAiBjB,KAAAA,CAAMkB,WAAW,GACpCF,QAAAA,GACA,GAAGA,QAAAA,CAAAA,EAAWA,QAAAA,CAASd,QAAQ,CAAC,OAAO,GAAA,GAAM,GAAA,CAAI,UAAU,EAAEF,KAAAA,CAAMmB,SAAS,CAAA,CAAE;
|
|
1
|
+
{"version":3,"file":"CarouselAsset.mjs","sources":["../../../../../admin/src/components/MediaLibraryInput/Carousel/CarouselAsset.tsx"],"sourcesContent":["import { Box, Flex } from '@strapi/design-system';\nimport { styled } from 'styled-components';\n\nimport { ASSET_TYPES } from '../../../enums';\nimport { createAssetUrl } from '../../../utils';\nimport { getFileIconComponent } from '../../../utils/icons';\nimport { AudioPreview } from '../../AssetCard/AudioPreview';\nimport { VideoPreview } from '../../AssetCard/VideoPreview';\n\nimport type { File as FileAsset } from '../../../../../shared/contracts/files';\n\nconst DocAsset = styled(Flex)`\n background: linear-gradient(180deg, #ffffff 0%, #f6f6f9 121.48%);\n`;\n\nconst VideoPreviewWrapper = styled(Box)`\n canvas,\n video {\n max-width: 100%;\n height: 124px;\n }\n`;\n\nconst AudioPreviewWrapper = styled(Box)`\n canvas,\n audio {\n max-width: 100%;\n }\n`;\n\nexport const CarouselAsset = ({ asset }: { asset: FileAsset }) => {\n if (asset.mime?.includes(ASSET_TYPES.Video)) {\n return (\n <VideoPreviewWrapper height=\"100%\">\n <VideoPreview\n url={createAssetUrl(asset, true)!}\n mime={asset.mime}\n alt={asset.alternativeText || asset.name}\n />\n </VideoPreviewWrapper>\n );\n }\n\n if (asset.mime?.includes(ASSET_TYPES.Audio)) {\n return (\n <AudioPreviewWrapper>\n <AudioPreview\n url={createAssetUrl(asset, true)!}\n alt={asset.alternativeText || asset.name}\n />\n </AudioPreviewWrapper>\n );\n }\n\n if (asset.mime?.includes(ASSET_TYPES.Image)) {\n const assetUrl = createAssetUrl(asset, true);\n if (!assetUrl) return null;\n\n // Adding a param to the url to bust the cache and force the refresh of the image when replaced\n // Only add updatedAt parameter if the URL is not signed to prevent signature invalidation\n const cacheBustedUrl = asset.isUrlSigned\n ? assetUrl\n : `${assetUrl}${assetUrl.includes('?') ? '&' : '?'}updatedAt=${asset.updatedAt}`;\n\n // Only set crossOrigin for signed remote URLs. Signed URLs are loaded\n // without a cache-buster (see cacheBustedUrl above), so the thumbnail and\n // preview hit the identical URL and would collide in the browser's cache\n // unless both opt into CORS. Public/unsigned remote URLs get the\n // ?updatedAt= buster, so they never collide and must NOT require a bucket\n // CORS rule just to render a plain <img>. See #26581.\n const crossOrigin = !asset.isLocal && asset.isUrlSigned ? 'anonymous' : undefined;\n\n return (\n <Box\n tag=\"img\"\n crossOrigin={crossOrigin}\n maxHeight=\"100%\"\n maxWidth=\"100%\"\n src={cacheBustedUrl}\n alt={asset.alternativeText || asset.name}\n />\n );\n }\n\n const IconComponent = getFileIconComponent(asset.ext);\n\n return (\n <DocAsset width=\"100%\" height=\"100%\" justifyContent=\"center\" hasRadius>\n <IconComponent aria-label={asset.alternativeText || asset.name} width=\"24px\" height=\"32px\" />\n </DocAsset>\n );\n};\n"],"names":["DocAsset","styled","Flex","VideoPreviewWrapper","Box","AudioPreviewWrapper","CarouselAsset","asset","mime","includes","ASSET_TYPES","Video","_jsx","height","VideoPreview","url","createAssetUrl","alt","alternativeText","name","Audio","AudioPreview","Image","assetUrl","cacheBustedUrl","isUrlSigned","updatedAt","crossOrigin","isLocal","undefined","tag","maxHeight","maxWidth","src","IconComponent","getFileIconComponent","ext","width","justifyContent","hasRadius","aria-label"],"mappings":";;;;;;;;;;;;;AAWA,MAAMA,QAAAA,GAAWC,MAAAA,CAAOC,IAAAA,CAAK;;AAE7B,CAAC;AAED,MAAMC,mBAAAA,GAAsBF,MAAAA,CAAOG,GAAAA,CAAI;;;;;;AAMvC,CAAC;AAED,MAAMC,mBAAAA,GAAsBJ,MAAAA,CAAOG,GAAAA,CAAI;;;;;AAKvC,CAAC;AAEM,MAAME,aAAAA,GAAgB,CAAC,EAAEC,KAAK,EAAwB,GAAA;AAC3D,IAAA,IAAIA,MAAMC,IAAI,EAAEC,QAAAA,CAASC,WAAAA,CAAYC,KAAK,CAAA,EAAG;AAC3C,QAAA,qBACEC,GAAA,CAACT,mBAAAA,EAAAA;YAAoBU,MAAAA,EAAO,MAAA;AAC1B,YAAA,QAAA,gBAAAD,GAAA,CAACE,YAAAA,EAAAA;AACCC,gBAAAA,GAAAA,EAAKC,eAAeT,KAAAA,EAAO,IAAA,CAAA;AAC3BC,gBAAAA,IAAAA,EAAMD,MAAMC,IAAI;AAChBS,gBAAAA,GAAAA,EAAKV,KAAAA,CAAMW,eAAe,IAAIX,KAAAA,CAAMY;;;AAI5C,IAAA;AAEA,IAAA,IAAIZ,MAAMC,IAAI,EAAEC,QAAAA,CAASC,WAAAA,CAAYU,KAAK,CAAA,EAAG;AAC3C,QAAA,qBACER,GAAA,CAACP,mBAAAA,EAAAA;AACC,YAAA,QAAA,gBAAAO,GAAA,CAACS,YAAAA,EAAAA;AACCN,gBAAAA,GAAAA,EAAKC,eAAeT,KAAAA,EAAO,IAAA,CAAA;AAC3BU,gBAAAA,GAAAA,EAAKV,KAAAA,CAAMW,eAAe,IAAIX,KAAAA,CAAMY;;;AAI5C,IAAA;AAEA,IAAA,IAAIZ,MAAMC,IAAI,EAAEC,QAAAA,CAASC,WAAAA,CAAYY,KAAK,CAAA,EAAG;QAC3C,MAAMC,QAAAA,GAAWP,eAAeT,KAAAA,EAAO,IAAA,CAAA;QACvC,IAAI,CAACgB,UAAU,OAAO,IAAA;;;AAItB,QAAA,MAAMC,iBAAiBjB,KAAAA,CAAMkB,WAAW,GACpCF,QAAAA,GACA,GAAGA,QAAAA,CAAAA,EAAWA,QAAAA,CAASd,QAAQ,CAAC,OAAO,GAAA,GAAM,GAAA,CAAI,UAAU,EAAEF,KAAAA,CAAMmB,SAAS,CAAA,CAAE;;;;;;;QAQlF,MAAMC,WAAAA,GAAc,CAACpB,KAAAA,CAAMqB,OAAO,IAAIrB,KAAAA,CAAMkB,WAAW,GAAG,WAAA,GAAcI,SAAAA;AAExE,QAAA,qBACEjB,GAAA,CAACR,GAAAA,EAAAA;YACC0B,GAAAA,EAAI,KAAA;YACJH,WAAAA,EAAaA,WAAAA;YACbI,SAAAA,EAAU,MAAA;YACVC,QAAAA,EAAS,MAAA;YACTC,GAAAA,EAAKT,cAAAA;AACLP,YAAAA,GAAAA,EAAKV,KAAAA,CAAMW,eAAe,IAAIX,KAAAA,CAAMY;;AAG1C,IAAA;IAEA,MAAMe,aAAAA,GAAgBC,oBAAAA,CAAqB5B,KAAAA,CAAM6B,GAAG,CAAA;AAEpD,IAAA,qBACExB,GAAA,CAACZ,QAAAA,EAAAA;QAASqC,KAAAA,EAAM,MAAA;QAAOxB,MAAAA,EAAO,MAAA;QAAOyB,cAAAA,EAAe,QAAA;QAASC,SAAS,EAAA,IAAA;AACpE,QAAA,QAAA,gBAAA3B,GAAA,CAACsB,aAAAA,EAAAA;AAAcM,YAAAA,YAAAA,EAAYjC,KAAAA,CAAMW,eAAe,IAAIX,KAAAA,CAAMY,IAAI;YAAEkB,KAAAA,EAAM,MAAA;YAAOxB,MAAAA,EAAO;;;AAG1F;;;;"}
|
|
@@ -50,13 +50,17 @@ const PreviewCell = ({ type, content })=>{
|
|
|
50
50
|
})
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
|
-
const { alternativeText, ext, formats, mime, name, url } = content;
|
|
53
|
+
const { alternativeText, ext, formats, isLocal, isUrlSigned, mime, name, url } = content;
|
|
54
54
|
const fileExtension = getFileExtension.getFileExtension(ext);
|
|
55
55
|
if (mime?.includes(enums.ASSET_TYPES.Image)) {
|
|
56
56
|
const mediaURL = prefixFileUrlWithBackendUrl.prefixFileUrlWithBackendUrl(formats?.thumbnail?.url) ?? prefixFileUrlWithBackendUrl.prefixFileUrlWithBackendUrl(url);
|
|
57
57
|
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Avatar.Item, {
|
|
58
58
|
src: mediaURL,
|
|
59
59
|
alt: alternativeText || undefined,
|
|
60
|
+
// Only signed remote URLs need crossOrigin (cache collision with the
|
|
61
|
+
// preview). Public/unsigned remote thumbnails must render without a
|
|
62
|
+
// bucket CORS rule. See #26581.
|
|
63
|
+
crossOrigin: !isLocal && isUrlSigned ? 'anonymous' : undefined,
|
|
60
64
|
preview: true,
|
|
61
65
|
fallback: alternativeText
|
|
62
66
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PreviewCell.js","sources":["../../../../admin/src/components/TableList/PreviewCell.tsx"],"sourcesContent":["import { Avatar, Box, Flex } from '@strapi/design-system';\nimport {\n File as FileIcon,\n FileCsv,\n FilePdf,\n FileXls,\n FileZip,\n Folder,\n VolumeUp,\n} from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { ASSET_TYPES } from '../../enums';\nimport {\n createAssetUrl,\n getFileExtension,\n getTrad,\n prefixFileUrlWithBackendUrl,\n} from '../../utils';\nimport { VideoPreview } from '../AssetCard/VideoPreview';\n\nimport type { File } from '../../../../shared/contracts/files';\n\nconst VideoPreviewWrapper = styled(Box)`\n figure {\n width: ${({ theme }) => theme.spaces[7]};\n height: ${({ theme }) => theme.spaces[7]};\n }\n\n canvas,\n video {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 50%;\n }\n`;\n\ninterface PreviewCellProps {\n content: File;\n type?: string;\n}\n\nexport const PreviewCell = ({ type, content }: PreviewCellProps) => {\n const { formatMessage } = useIntl();\n if (type === 'folder') {\n return (\n <Flex\n justifyContent=\"center\"\n background=\"secondary100\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n borderRadius=\"50%\"\n >\n <Folder\n aria-label={formatMessage({\n id: getTrad('header.actions.add-assets.folder'),\n defaultMessage: 'folder',\n })}\n fill=\"secondary500\"\n width=\"1.6rem\"\n height=\"1.6rem\"\n />\n </Flex>\n );\n }\n\n const { alternativeText, ext, formats, mime, name, url } = content;\n\n const fileExtension = getFileExtension(ext);\n\n if (mime?.includes(ASSET_TYPES.Image)) {\n const mediaURL =\n prefixFileUrlWithBackendUrl(formats?.thumbnail?.url) ?? prefixFileUrlWithBackendUrl(url);\n\n return (\n <Avatar.Item\n src={mediaURL}\n alt={alternativeText || undefined}\n preview\n fallback={alternativeText}\n />\n );\n }\n\n if (mime?.includes(ASSET_TYPES.Video)) {\n return (\n <VideoPreviewWrapper>\n <VideoPreview\n url={createAssetUrl(content, true) || ''}\n mime={mime}\n alt={alternativeText ?? name}\n />\n </VideoPreviewWrapper>\n );\n }\n\n if (mime?.includes(ASSET_TYPES.Audio)) {\n return (\n <Flex\n background=\"neutral100\"\n borderRadius=\"100%\"\n color=\"neutral500\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n justifyContent=\"center\"\n >\n <VolumeUp width={16} height={16} />\n </Flex>\n );\n }\n\n type IconComponent = typeof FileIcon;\n const DOC_ICON_MAP: Record<string, IconComponent> = {\n pdf: FilePdf,\n csv: FileCsv,\n xls: FileXls,\n zip: FileZip,\n };\n\n const DocIcon = fileExtension ? DOC_ICON_MAP[fileExtension] || FileIcon : FileIcon;\n const testId =\n fileExtension && DOC_ICON_MAP[fileExtension] ? `file-${fileExtension}-icon` : 'file-icon';\n\n return (\n <Flex\n justifyContent=\"center\"\n borderRadius=\"100%\"\n background=\"neutral100\"\n color=\"neutral500\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n >\n <DocIcon width={16} height={16} data-testid={testId} />\n </Flex>\n );\n};\n"],"names":["VideoPreviewWrapper","styled","Box","theme","spaces","PreviewCell","type","content","formatMessage","useIntl","_jsx","Flex","justifyContent","background","width","height","borderRadius","Folder","aria-label","id","getTrad","defaultMessage","fill","alternativeText","ext","formats","mime","name","url","fileExtension","getFileExtension","includes","ASSET_TYPES","Image","mediaURL","prefixFileUrlWithBackendUrl","thumbnail","Avatar","Item","src","alt","undefined","preview","fallback","Video","VideoPreview","createAssetUrl","Audio","color","VolumeUp","DOC_ICON_MAP","pdf","FilePdf","csv","FileCsv","xls","FileXls","zip","FileZip","DocIcon","FileIcon","testId","data-testid"],"mappings":";;;;;;;;;;;;;;;;;;AAwBA,MAAMA,mBAAAA,GAAsBC,uBAAAA,CAAOC,gBAAAA,CAAI;;WAE5B,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAAC,CAAA,CAAE,CAAC;YAChC,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAAC,CAAA,CAAE,CAAC;;;;;;;;;;AAU7C,CAAC;MAOYC,WAAAA,GAAc,CAAC,EAAEC,IAAI,EAAEC,OAAO,EAAoB,GAAA;IAC7D,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,IAAIH,SAAS,QAAA,EAAU;AACrB,QAAA,qBACEI,cAAA,CAACC,iBAAAA,EAAAA;YACCC,cAAAA,EAAe,QAAA;YACfC,UAAAA,EAAW,cAAA;YACXC,KAAAA,EAAM,QAAA;YACNC,MAAAA,EAAO,QAAA;YACPC,YAAAA,EAAa,KAAA;AAEb,YAAA,QAAA,gBAAAN,cAAA,CAACO,YAAAA,EAAAA;AACCC,gBAAAA,YAAAA,EAAYV,aAAAA,CAAc;AACxBW,oBAAAA,EAAAA,EAAIC,eAAAA,CAAQ,kCAAA,CAAA;oBACZC,cAAAA,EAAgB;AAClB,iBAAA,CAAA;gBACAC,IAAAA,EAAK,cAAA;gBACLR,KAAAA,EAAM,QAAA;gBACNC,MAAAA,EAAO;;;AAIf,IAAA;AAEA,IAAA,MAAM,EAAEQ,eAAe,EAAEC,GAAG,EAAEC,OAAO,EAAEC,IAAI,EAAEC,IAAI,EAAEC,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"PreviewCell.js","sources":["../../../../admin/src/components/TableList/PreviewCell.tsx"],"sourcesContent":["import { Avatar, Box, Flex } from '@strapi/design-system';\nimport {\n File as FileIcon,\n FileCsv,\n FilePdf,\n FileXls,\n FileZip,\n Folder,\n VolumeUp,\n} from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { ASSET_TYPES } from '../../enums';\nimport {\n createAssetUrl,\n getFileExtension,\n getTrad,\n prefixFileUrlWithBackendUrl,\n} from '../../utils';\nimport { VideoPreview } from '../AssetCard/VideoPreview';\n\nimport type { File } from '../../../../shared/contracts/files';\n\nconst VideoPreviewWrapper = styled(Box)`\n figure {\n width: ${({ theme }) => theme.spaces[7]};\n height: ${({ theme }) => theme.spaces[7]};\n }\n\n canvas,\n video {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 50%;\n }\n`;\n\ninterface PreviewCellProps {\n content: File;\n type?: string;\n}\n\nexport const PreviewCell = ({ type, content }: PreviewCellProps) => {\n const { formatMessage } = useIntl();\n if (type === 'folder') {\n return (\n <Flex\n justifyContent=\"center\"\n background=\"secondary100\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n borderRadius=\"50%\"\n >\n <Folder\n aria-label={formatMessage({\n id: getTrad('header.actions.add-assets.folder'),\n defaultMessage: 'folder',\n })}\n fill=\"secondary500\"\n width=\"1.6rem\"\n height=\"1.6rem\"\n />\n </Flex>\n );\n }\n\n const { alternativeText, ext, formats, isLocal, isUrlSigned, mime, name, url } = content;\n\n const fileExtension = getFileExtension(ext);\n\n if (mime?.includes(ASSET_TYPES.Image)) {\n const mediaURL =\n prefixFileUrlWithBackendUrl(formats?.thumbnail?.url) ?? prefixFileUrlWithBackendUrl(url);\n\n return (\n <Avatar.Item\n src={mediaURL}\n alt={alternativeText || undefined}\n // Only signed remote URLs need crossOrigin (cache collision with the\n // preview). Public/unsigned remote thumbnails must render without a\n // bucket CORS rule. See #26581.\n crossOrigin={!isLocal && isUrlSigned ? 'anonymous' : undefined}\n preview\n fallback={alternativeText}\n />\n );\n }\n\n if (mime?.includes(ASSET_TYPES.Video)) {\n return (\n <VideoPreviewWrapper>\n <VideoPreview\n url={createAssetUrl(content, true) || ''}\n mime={mime}\n alt={alternativeText ?? name}\n />\n </VideoPreviewWrapper>\n );\n }\n\n if (mime?.includes(ASSET_TYPES.Audio)) {\n return (\n <Flex\n background=\"neutral100\"\n borderRadius=\"100%\"\n color=\"neutral500\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n justifyContent=\"center\"\n >\n <VolumeUp width={16} height={16} />\n </Flex>\n );\n }\n\n type IconComponent = typeof FileIcon;\n const DOC_ICON_MAP: Record<string, IconComponent> = {\n pdf: FilePdf,\n csv: FileCsv,\n xls: FileXls,\n zip: FileZip,\n };\n\n const DocIcon = fileExtension ? DOC_ICON_MAP[fileExtension] || FileIcon : FileIcon;\n const testId =\n fileExtension && DOC_ICON_MAP[fileExtension] ? `file-${fileExtension}-icon` : 'file-icon';\n\n return (\n <Flex\n justifyContent=\"center\"\n borderRadius=\"100%\"\n background=\"neutral100\"\n color=\"neutral500\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n >\n <DocIcon width={16} height={16} data-testid={testId} />\n </Flex>\n );\n};\n"],"names":["VideoPreviewWrapper","styled","Box","theme","spaces","PreviewCell","type","content","formatMessage","useIntl","_jsx","Flex","justifyContent","background","width","height","borderRadius","Folder","aria-label","id","getTrad","defaultMessage","fill","alternativeText","ext","formats","isLocal","isUrlSigned","mime","name","url","fileExtension","getFileExtension","includes","ASSET_TYPES","Image","mediaURL","prefixFileUrlWithBackendUrl","thumbnail","Avatar","Item","src","alt","undefined","crossOrigin","preview","fallback","Video","VideoPreview","createAssetUrl","Audio","color","VolumeUp","DOC_ICON_MAP","pdf","FilePdf","csv","FileCsv","xls","FileXls","zip","FileZip","DocIcon","FileIcon","testId","data-testid"],"mappings":"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"}
|
|
@@ -48,13 +48,17 @@ const PreviewCell = ({ type, content })=>{
|
|
|
48
48
|
})
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
|
-
const { alternativeText, ext, formats, mime, name, url } = content;
|
|
51
|
+
const { alternativeText, ext, formats, isLocal, isUrlSigned, mime, name, url } = content;
|
|
52
52
|
const fileExtension = getFileExtension(ext);
|
|
53
53
|
if (mime?.includes(ASSET_TYPES.Image)) {
|
|
54
54
|
const mediaURL = prefixFileUrlWithBackendUrl(formats?.thumbnail?.url) ?? prefixFileUrlWithBackendUrl(url);
|
|
55
55
|
return /*#__PURE__*/ jsx(Avatar.Item, {
|
|
56
56
|
src: mediaURL,
|
|
57
57
|
alt: alternativeText || undefined,
|
|
58
|
+
// Only signed remote URLs need crossOrigin (cache collision with the
|
|
59
|
+
// preview). Public/unsigned remote thumbnails must render without a
|
|
60
|
+
// bucket CORS rule. See #26581.
|
|
61
|
+
crossOrigin: !isLocal && isUrlSigned ? 'anonymous' : undefined,
|
|
58
62
|
preview: true,
|
|
59
63
|
fallback: alternativeText
|
|
60
64
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PreviewCell.mjs","sources":["../../../../admin/src/components/TableList/PreviewCell.tsx"],"sourcesContent":["import { Avatar, Box, Flex } from '@strapi/design-system';\nimport {\n File as FileIcon,\n FileCsv,\n FilePdf,\n FileXls,\n FileZip,\n Folder,\n VolumeUp,\n} from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { ASSET_TYPES } from '../../enums';\nimport {\n createAssetUrl,\n getFileExtension,\n getTrad,\n prefixFileUrlWithBackendUrl,\n} from '../../utils';\nimport { VideoPreview } from '../AssetCard/VideoPreview';\n\nimport type { File } from '../../../../shared/contracts/files';\n\nconst VideoPreviewWrapper = styled(Box)`\n figure {\n width: ${({ theme }) => theme.spaces[7]};\n height: ${({ theme }) => theme.spaces[7]};\n }\n\n canvas,\n video {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 50%;\n }\n`;\n\ninterface PreviewCellProps {\n content: File;\n type?: string;\n}\n\nexport const PreviewCell = ({ type, content }: PreviewCellProps) => {\n const { formatMessage } = useIntl();\n if (type === 'folder') {\n return (\n <Flex\n justifyContent=\"center\"\n background=\"secondary100\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n borderRadius=\"50%\"\n >\n <Folder\n aria-label={formatMessage({\n id: getTrad('header.actions.add-assets.folder'),\n defaultMessage: 'folder',\n })}\n fill=\"secondary500\"\n width=\"1.6rem\"\n height=\"1.6rem\"\n />\n </Flex>\n );\n }\n\n const { alternativeText, ext, formats, mime, name, url } = content;\n\n const fileExtension = getFileExtension(ext);\n\n if (mime?.includes(ASSET_TYPES.Image)) {\n const mediaURL =\n prefixFileUrlWithBackendUrl(formats?.thumbnail?.url) ?? prefixFileUrlWithBackendUrl(url);\n\n return (\n <Avatar.Item\n src={mediaURL}\n alt={alternativeText || undefined}\n preview\n fallback={alternativeText}\n />\n );\n }\n\n if (mime?.includes(ASSET_TYPES.Video)) {\n return (\n <VideoPreviewWrapper>\n <VideoPreview\n url={createAssetUrl(content, true) || ''}\n mime={mime}\n alt={alternativeText ?? name}\n />\n </VideoPreviewWrapper>\n );\n }\n\n if (mime?.includes(ASSET_TYPES.Audio)) {\n return (\n <Flex\n background=\"neutral100\"\n borderRadius=\"100%\"\n color=\"neutral500\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n justifyContent=\"center\"\n >\n <VolumeUp width={16} height={16} />\n </Flex>\n );\n }\n\n type IconComponent = typeof FileIcon;\n const DOC_ICON_MAP: Record<string, IconComponent> = {\n pdf: FilePdf,\n csv: FileCsv,\n xls: FileXls,\n zip: FileZip,\n };\n\n const DocIcon = fileExtension ? DOC_ICON_MAP[fileExtension] || FileIcon : FileIcon;\n const testId =\n fileExtension && DOC_ICON_MAP[fileExtension] ? `file-${fileExtension}-icon` : 'file-icon';\n\n return (\n <Flex\n justifyContent=\"center\"\n borderRadius=\"100%\"\n background=\"neutral100\"\n color=\"neutral500\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n >\n <DocIcon width={16} height={16} data-testid={testId} />\n </Flex>\n );\n};\n"],"names":["VideoPreviewWrapper","styled","Box","theme","spaces","PreviewCell","type","content","formatMessage","useIntl","_jsx","Flex","justifyContent","background","width","height","borderRadius","Folder","aria-label","id","getTrad","defaultMessage","fill","alternativeText","ext","formats","mime","name","url","fileExtension","getFileExtension","includes","ASSET_TYPES","Image","mediaURL","prefixFileUrlWithBackendUrl","thumbnail","Avatar","Item","src","alt","undefined","preview","fallback","Video","VideoPreview","createAssetUrl","Audio","color","VolumeUp","DOC_ICON_MAP","pdf","FilePdf","csv","FileCsv","xls","FileXls","zip","FileZip","DocIcon","FileIcon","testId","data-testid"],"mappings":";;;;;;;;;;;;;;;;AAwBA,MAAMA,mBAAAA,GAAsBC,MAAAA,CAAOC,GAAAA,CAAI;;WAE5B,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAAC,CAAA,CAAE,CAAC;YAChC,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAAC,CAAA,CAAE,CAAC;;;;;;;;;;AAU7C,CAAC;MAOYC,WAAAA,GAAc,CAAC,EAAEC,IAAI,EAAEC,OAAO,EAAoB,GAAA;IAC7D,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,IAAIH,SAAS,QAAA,EAAU;AACrB,QAAA,qBACEI,GAAA,CAACC,IAAAA,EAAAA;YACCC,cAAAA,EAAe,QAAA;YACfC,UAAAA,EAAW,cAAA;YACXC,KAAAA,EAAM,QAAA;YACNC,MAAAA,EAAO,QAAA;YACPC,YAAAA,EAAa,KAAA;AAEb,YAAA,QAAA,gBAAAN,GAAA,CAACO,MAAAA,EAAAA;AACCC,gBAAAA,YAAAA,EAAYV,aAAAA,CAAc;AACxBW,oBAAAA,EAAAA,EAAIC,OAAAA,CAAQ,kCAAA,CAAA;oBACZC,cAAAA,EAAgB;AAClB,iBAAA,CAAA;gBACAC,IAAAA,EAAK,cAAA;gBACLR,KAAAA,EAAM,QAAA;gBACNC,MAAAA,EAAO;;;AAIf,IAAA;AAEA,IAAA,MAAM,EAAEQ,eAAe,EAAEC,GAAG,EAAEC,OAAO,EAAEC,IAAI,EAAEC,IAAI,EAAEC,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"PreviewCell.mjs","sources":["../../../../admin/src/components/TableList/PreviewCell.tsx"],"sourcesContent":["import { Avatar, Box, Flex } from '@strapi/design-system';\nimport {\n File as FileIcon,\n FileCsv,\n FilePdf,\n FileXls,\n FileZip,\n Folder,\n VolumeUp,\n} from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { ASSET_TYPES } from '../../enums';\nimport {\n createAssetUrl,\n getFileExtension,\n getTrad,\n prefixFileUrlWithBackendUrl,\n} from '../../utils';\nimport { VideoPreview } from '../AssetCard/VideoPreview';\n\nimport type { File } from '../../../../shared/contracts/files';\n\nconst VideoPreviewWrapper = styled(Box)`\n figure {\n width: ${({ theme }) => theme.spaces[7]};\n height: ${({ theme }) => theme.spaces[7]};\n }\n\n canvas,\n video {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 50%;\n }\n`;\n\ninterface PreviewCellProps {\n content: File;\n type?: string;\n}\n\nexport const PreviewCell = ({ type, content }: PreviewCellProps) => {\n const { formatMessage } = useIntl();\n if (type === 'folder') {\n return (\n <Flex\n justifyContent=\"center\"\n background=\"secondary100\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n borderRadius=\"50%\"\n >\n <Folder\n aria-label={formatMessage({\n id: getTrad('header.actions.add-assets.folder'),\n defaultMessage: 'folder',\n })}\n fill=\"secondary500\"\n width=\"1.6rem\"\n height=\"1.6rem\"\n />\n </Flex>\n );\n }\n\n const { alternativeText, ext, formats, isLocal, isUrlSigned, mime, name, url } = content;\n\n const fileExtension = getFileExtension(ext);\n\n if (mime?.includes(ASSET_TYPES.Image)) {\n const mediaURL =\n prefixFileUrlWithBackendUrl(formats?.thumbnail?.url) ?? prefixFileUrlWithBackendUrl(url);\n\n return (\n <Avatar.Item\n src={mediaURL}\n alt={alternativeText || undefined}\n // Only signed remote URLs need crossOrigin (cache collision with the\n // preview). Public/unsigned remote thumbnails must render without a\n // bucket CORS rule. See #26581.\n crossOrigin={!isLocal && isUrlSigned ? 'anonymous' : undefined}\n preview\n fallback={alternativeText}\n />\n );\n }\n\n if (mime?.includes(ASSET_TYPES.Video)) {\n return (\n <VideoPreviewWrapper>\n <VideoPreview\n url={createAssetUrl(content, true) || ''}\n mime={mime}\n alt={alternativeText ?? name}\n />\n </VideoPreviewWrapper>\n );\n }\n\n if (mime?.includes(ASSET_TYPES.Audio)) {\n return (\n <Flex\n background=\"neutral100\"\n borderRadius=\"100%\"\n color=\"neutral500\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n justifyContent=\"center\"\n >\n <VolumeUp width={16} height={16} />\n </Flex>\n );\n }\n\n type IconComponent = typeof FileIcon;\n const DOC_ICON_MAP: Record<string, IconComponent> = {\n pdf: FilePdf,\n csv: FileCsv,\n xls: FileXls,\n zip: FileZip,\n };\n\n const DocIcon = fileExtension ? DOC_ICON_MAP[fileExtension] || FileIcon : FileIcon;\n const testId =\n fileExtension && DOC_ICON_MAP[fileExtension] ? `file-${fileExtension}-icon` : 'file-icon';\n\n return (\n <Flex\n justifyContent=\"center\"\n borderRadius=\"100%\"\n background=\"neutral100\"\n color=\"neutral500\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n >\n <DocIcon width={16} height={16} data-testid={testId} />\n </Flex>\n );\n};\n"],"names":["VideoPreviewWrapper","styled","Box","theme","spaces","PreviewCell","type","content","formatMessage","useIntl","_jsx","Flex","justifyContent","background","width","height","borderRadius","Folder","aria-label","id","getTrad","defaultMessage","fill","alternativeText","ext","formats","isLocal","isUrlSigned","mime","name","url","fileExtension","getFileExtension","includes","ASSET_TYPES","Image","mediaURL","prefixFileUrlWithBackendUrl","thumbnail","Avatar","Item","src","alt","undefined","crossOrigin","preview","fallback","Video","VideoPreview","createAssetUrl","Audio","color","VolumeUp","DOC_ICON_MAP","pdf","FilePdf","csv","FileCsv","xls","FileXls","zip","FileZip","DocIcon","FileIcon","testId","data-testid"],"mappings":"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"}
|