@payloadcms/ui 4.0.0-canary.26 → 4.0.0-canary.28
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/elements/BulkUpload/AddFilesView/index.css +10 -4
- package/dist/elements/BulkUpload/AddFilesView/index.d.ts.map +1 -1
- package/dist/elements/BulkUpload/AddFilesView/index.js +71 -51
- package/dist/elements/BulkUpload/AddFilesView/index.js.map +1 -1
- package/dist/elements/Button/index.d.ts.map +1 -1
- package/dist/elements/Button/index.js +2 -0
- package/dist/elements/Button/index.js.map +1 -1
- package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.d.ts.map +1 -1
- package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js +10 -3
- package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js.map +1 -1
- package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js +345 -1
- package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js.map +1 -1
- package/dist/elements/Dropzone/index.css +10 -4
- package/dist/elements/FileManager/index.css +0 -30
- package/dist/elements/FileManager/index.d.ts.map +1 -1
- package/dist/elements/FileManager/index.js +379 -287
- package/dist/elements/FileManager/index.js.map +1 -1
- package/dist/elements/Upload/UploadFromURLModal/index.d.ts +1 -1
- package/dist/elements/Upload/UploadFromURLModal/index.d.ts.map +1 -1
- package/dist/elements/Upload/UploadFromURLModal/index.js.map +1 -1
- package/dist/elements/Upload/index.css +39 -32
- package/dist/elements/Upload/index.d.ts.map +1 -1
- package/dist/elements/Upload/index.js +37 -99
- package/dist/elements/Upload/index.js.map +1 -1
- package/dist/elements/Upload/usePasteFromClipboard.d.ts +14 -0
- package/dist/elements/Upload/usePasteFromClipboard.d.ts.map +1 -0
- package/dist/elements/Upload/usePasteFromClipboard.js +93 -0
- package/dist/elements/Upload/usePasteFromClipboard.js.map +1 -0
- package/dist/elements/Upload/useUploadFromUrl.d.ts +20 -0
- package/dist/elements/Upload/useUploadFromUrl.d.ts.map +1 -0
- package/dist/elements/Upload/useUploadFromUrl.js +201 -0
- package/dist/elements/Upload/useUploadFromUrl.js.map +1 -0
- package/dist/elements/UploadDropzoneContent/index.css +31 -0
- package/dist/elements/UploadDropzoneContent/index.d.ts +17 -0
- package/dist/elements/UploadDropzoneContent/index.d.ts.map +1 -0
- package/dist/elements/UploadDropzoneContent/index.js +62 -0
- package/dist/elements/UploadDropzoneContent/index.js.map +1 -0
- package/dist/elements/WhereBuilder/conditionValue.d.ts +32 -0
- package/dist/elements/WhereBuilder/conditionValue.d.ts.map +1 -0
- package/dist/elements/WhereBuilder/conditionValue.js +32 -0
- package/dist/elements/WhereBuilder/conditionValue.js.map +1 -0
- package/dist/elements/WhereBuilder/conditionValue.spec.js +65 -0
- package/dist/elements/WhereBuilder/conditionValue.spec.js.map +1 -0
- package/dist/elements/WhereBuilder/index.d.ts.map +1 -1
- package/dist/elements/WhereBuilder/index.js +15 -4
- package/dist/elements/WhereBuilder/index.js.map +1 -1
- package/dist/fields/Upload/Input.d.ts.map +1 -1
- package/dist/fields/Upload/Input.js +26 -0
- package/dist/fields/Upload/Input.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/utilities/formatMetadata.d.ts.map +1 -1
- package/dist/utilities/formatMetadata.js +0 -5
- package/dist/utilities/formatMetadata.js.map +1 -1
- package/dist/utilities/getFilesFromClipboard.d.ts +10 -0
- package/dist/utilities/getFilesFromClipboard.d.ts.map +1 -0
- package/dist/utilities/getFilesFromClipboard.js +49 -0
- package/dist/utilities/getFilesFromClipboard.js.map +1 -0
- package/dist/utilities/slugify.d.ts.map +1 -1
- package/dist/utilities/slugify.js +1 -0
- package/dist/utilities/slugify.js.map +1 -1
- package/dist/views/Root/getCustomCollectionViewByRoute.d.ts.map +1 -1
- package/dist/views/Root/getCustomCollectionViewByRoute.js.map +1 -1
- package/dist/views/Root/getCustomGlobalViewByRoute.d.ts.map +1 -1
- package/dist/views/Root/getCustomGlobalViewByRoute.js.map +1 -1
- package/dist/views/Root/getCustomViewByKey.d.ts.map +1 -1
- package/dist/views/Root/getCustomViewByKey.js.map +1 -1
- package/dist/views/Version/generateVersionViewMetadata.js.map +1 -1
- package/dist/views/Versions/generateVersionsViewMetadata.js.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["useModal","formatAdminURL","formatFilesize","isImage","React","Fragment","useCallback","useEffect","useRef","useState","toast","FieldError","fieldBaseClass","TextInput","useForm","useField","useConfig","useDocumentInfo","EditDepthProvider","useTranslation","useUploadControls","useUploadEdits","Button","Drawer","Dropzone","EditUpload","PreviewSizes","Thumbnail","editDrawerSlug","sizePreviewSlug","pasteURLDrawerSlug","UploadFromURLModal","AudioPreview","FilePreview","PdfPreview","VideoPreview","FileToolbar","baseClass","validate","value","undefined","name","FileManager","collectionSlug","initialState","resetUploadEdits","resetUploadEditsFromProps","updateUploadEdits","updateUploadEditsFromProps","uploadConfig","UploadControls","uploadEdits","uploadEditsFromProps","UploadFilePreview","closeModal","openModal","t","setModified","id","data","setUploadStatus","errorMessage","setValue","showError","path","config","routes","api","setUploadControlFile","setUploadControlFileName","setUploadControlFileUrl","uploadControlFile","uploadControlFileName","uploadControlFileUrl","uploadEditsContext","fileSrc","setFileSrc","removedFile","setRemovedFile","filename","setFilename","fileUrl","setFileUrl","selectedSize","setSelectedSize","inputRef","useServerSideFetch","pasteURL","allowList","length","acceptMimeTypes","mimeTypes","join","imageCacheTag","cacheTags","updatedAt","hasImageSizes","imageSizes","hasResizeOptions","Boolean","resizeOptions","focalPointEnabled","focalPoint","crop","showCrop","showFocalPoint","selectedSizeData","sizes","sidePanelFileSrc","url","thumbnailURL","sidePanelMimeType","mimeType","fileTypeIsAdjustable","renameFile","fileToChange","newName","File","type","lastModified","handleFileChange","file","isNewFile","URL","createObjectURL","handleFileNameChange","e","updatedFileName","target","handleFileRemoval","handleFileSelection","files","isValidUrl","canParse","handleUrlSubmit","clientResponse","fetch","ok","Error","status","blob","rawSegment","split","pop","fileName","decodeURIComponent","_clientError","error","encodeURIComponent","serverResponse","apiRoute","_serverError","onEditsSave","args","startsWith","revokeObjectURL","handleControlFileUrl","renderSelectedFilePreview","src","fileType","_jsx","className","title","size","drawers","_jsxs","initialCrop","initialFocalPoint","x","focalX","y","focalY","onSave","hoverTitle","slug","label","doc","showUploadInput","hideFileInputOnCreate","filter","message","hideRemoveFile","isAdjustable","onEditImage","onReplace","buttonStyle","icon","onClick","round","tooltip","onChange","current","click","accept","hidden","ref"],"sources":["../../../src/elements/FileManager/index.tsx"],"sourcesContent":["'use client'\nimport type { SanitizedCollectionConfig, UploadEdits } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { formatAdminURL, formatFilesize, isImage } from 'payload/shared'\nimport React, { Fragment, useCallback, useEffect, useRef, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport { FieldError } from '../../fields/FieldError/index.js'\nimport { fieldBaseClass } from '../../fields/shared/index.js'\nimport { TextInput } from '../../fields/Text/Input.js'\nimport { useForm } from '../../forms/Form/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { EditDepthProvider } from '../../providers/EditDepth/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { useUploadControls } from '../../providers/UploadControls/index.js'\nimport { useUploadEdits } from '../../providers/UploadEdits/index.js'\nimport { Button } from '../Button/index.js'\nimport { Drawer } from '../Drawer/index.js'\nimport { Dropzone } from '../Dropzone/index.js'\nimport { EditUpload } from '../EditUpload/index.js'\nimport { PreviewSizes } from '../PreviewSizes/index.js'\nimport { Thumbnail } from '../Thumbnail/index.js'\nimport { editDrawerSlug, sizePreviewSlug } from '../Upload/index.js'\nimport { pasteURLDrawerSlug, UploadFromURLModal } from '../Upload/UploadFromURLModal/index.js'\nimport { AudioPreview } from './FilePreview/AudioPreview/index.js'\nimport { FilePreview } from './FilePreview/index.js'\nimport { PdfPreview } from './FilePreview/PdfPreview/index.js'\nimport { VideoPreview } from './FilePreview/VideoPreview/index.js'\nimport { FileToolbar } from './FileToolbar/index.js'\nimport './index.css'\n\nconst baseClass = 'file-manager'\n\nconst validate = (value) => {\n if (!value && value !== undefined) {\n return 'A file is required.'\n }\n if (value && (!value.name || value.name === '')) {\n return 'A file name is required.'\n }\n return true\n}\n\nexport type FileManagerProps = {\n readonly collectionSlug: string\n readonly initialState?: import('payload').FormState\n /**\n * When provided, upload edits are sourced from these props instead of the `useUploadEdits`\n * context. The bulk upload drawer uses this to drive per-file edits from its FormsManager.\n */\n readonly resetUploadEdits?: () => void\n readonly updateUploadEdits?: (args: UploadEdits) => void\n readonly uploadConfig: Omit<SanitizedCollectionConfig['upload'], 'uploadInstructions'>\n readonly UploadControls?: React.ReactNode\n readonly uploadEdits?: UploadEdits\n readonly UploadFilePreview?: React.ReactNode\n}\n\nexport const FileManager: React.FC<FileManagerProps> = ({\n collectionSlug,\n initialState,\n resetUploadEdits: resetUploadEditsFromProps,\n updateUploadEdits: updateUploadEditsFromProps,\n uploadConfig,\n UploadControls,\n uploadEdits: uploadEditsFromProps,\n UploadFilePreview,\n}) => {\n const { closeModal, openModal } = useModal()\n const { t } = useTranslation()\n const { setModified } = useForm()\n const { id, data, setUploadStatus } = useDocumentInfo()\n const { errorMessage, setValue, showError, value } = useField<File>({\n path: 'file',\n validate,\n })\n const {\n config: {\n routes: { api },\n },\n } = useConfig()\n const {\n setUploadControlFile,\n setUploadControlFileName,\n setUploadControlFileUrl,\n uploadControlFile,\n uploadControlFileName,\n uploadControlFileUrl,\n } = useUploadControls()\n const uploadEditsContext = useUploadEdits()\n const resetUploadEdits = resetUploadEditsFromProps ?? uploadEditsContext.resetUploadEdits\n const updateUploadEdits = updateUploadEditsFromProps ?? uploadEditsContext.updateUploadEdits\n const uploadEdits = uploadEditsFromProps ?? uploadEditsContext.uploadEdits\n\n const [fileSrc, setFileSrc] = useState<null | string>(null)\n const [removedFile, setRemovedFile] = useState(false)\n const [filename, setFilename] = useState<string>(value?.name || '')\n const [fileUrl, setFileUrl] = useState<string>('')\n const [selectedSize, setSelectedSize] = useState<null | string>(null)\n\n const inputRef = useRef<HTMLInputElement>(null)\n\n const useServerSideFetch =\n typeof uploadConfig?.pasteURL === 'object' && uploadConfig.pasteURL.allowList?.length > 0\n\n const acceptMimeTypes = uploadConfig.mimeTypes?.join(', ')\n const imageCacheTag = uploadConfig?.cacheTags && data?.updatedAt\n\n const hasImageSizes = uploadConfig?.imageSizes?.length > 0\n const hasResizeOptions = Boolean(uploadConfig?.resizeOptions)\n const focalPointEnabled = uploadConfig?.focalPoint === true\n const { crop: showCrop = true, focalPoint = true } = uploadConfig\n const showFocalPoint = focalPoint && (hasImageSizes || hasResizeOptions || focalPointEnabled)\n\n const selectedSizeData = selectedSize\n ? (data?.sizes?.[selectedSize] as Record<string, unknown>)\n : null\n const sidePanelFileSrc = (selectedSizeData?.url ?? data?.thumbnailURL ?? data?.url ?? null) as\n | null\n | string\n const sidePanelMimeType = data?.mimeType as string | undefined\n const fileTypeIsAdjustable =\n !!sidePanelMimeType &&\n isImage(sidePanelMimeType) &&\n sidePanelMimeType !== 'image/svg+xml' &&\n sidePanelMimeType !== 'image/jxl'\n\n const renameFile = (fileToChange: File, newName: string): File =>\n new File([fileToChange], newName, {\n type: fileToChange.type,\n lastModified: fileToChange.lastModified,\n })\n\n const handleFileChange = useCallback(\n ({ file, isNewFile = true }: { file: File | null; isNewFile?: boolean }) => {\n if (isNewFile && file instanceof File) {\n setFileSrc(URL.createObjectURL(file))\n }\n setValue(file)\n setUploadControlFileUrl('')\n setUploadControlFileName(null)\n setUploadControlFile(null)\n },\n [setValue, setUploadControlFile, setUploadControlFileName, setUploadControlFileUrl],\n )\n\n const handleFileNameChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const updatedFileName = e.target.value\n if (value) {\n handleFileChange({ file: renameFile(value, updatedFileName), isNewFile: false })\n setFilename(updatedFileName)\n }\n },\n [handleFileChange, value],\n )\n\n const handleFileRemoval = useCallback(() => {\n setRemovedFile(true)\n handleFileChange({ file: null })\n setFileSrc('')\n setFileUrl('')\n setSelectedSize(null)\n resetUploadEdits()\n setUploadControlFileUrl('')\n setUploadControlFileName(null)\n setUploadControlFile(null)\n }, [\n handleFileChange,\n resetUploadEdits,\n setUploadControlFile,\n setUploadControlFileName,\n setUploadControlFileUrl,\n ])\n\n const handleFileSelection = useCallback(\n (files: FileList) => handleFileChange({ file: files?.[0] }),\n [handleFileChange],\n )\n\n const isValidUrl = Boolean(fileUrl && URL.canParse(fileUrl))\n\n const handleUrlSubmit = useCallback(async () => {\n if (!fileUrl || !URL.canParse(fileUrl) || uploadConfig?.pasteURL === false) {\n return\n }\n setUploadStatus('uploading')\n try {\n const clientResponse = await fetch(fileUrl)\n if (!clientResponse.ok) {\n throw new Error(`Fetch failed: ${clientResponse.status}`)\n }\n const blob = await clientResponse.blob()\n const rawSegment = fileUrl.split('/').pop() || ''\n const fileName = uploadControlFileName || decodeURIComponent(rawSegment.split('?')[0])\n handleFileChange({ file: new File([blob], fileName, { type: blob.type }) })\n setUploadStatus('idle')\n closeModal(pasteURLDrawerSlug)\n setFileUrl('')\n return\n } catch (_clientError) {\n if (!useServerSideFetch) {\n toast.error('Failed to fetch the file.')\n setUploadStatus('failed')\n return\n }\n }\n try {\n const pasteURL: `/${string}` = `/${collectionSlug}/paste-url${id ? `/${id}?` : '?'}src=${encodeURIComponent(fileUrl)}`\n const serverResponse = await fetch(formatAdminURL({ apiRoute: api, path: pasteURL }))\n if (!serverResponse.ok) {\n throw new Error(`Fetch failed: ${serverResponse.status}`)\n }\n const blob = await serverResponse.blob()\n const rawSegment = fileUrl.split('/').pop() || ''\n const fileName = decodeURIComponent(rawSegment.split('?')[0])\n handleFileChange({ file: new File([blob], fileName, { type: blob.type }) })\n setUploadStatus('idle')\n closeModal(pasteURLDrawerSlug)\n setFileUrl('')\n } catch (_serverError) {\n toast.error('The provided URL is not allowed.')\n setUploadStatus('failed')\n }\n }, [\n api,\n closeModal,\n collectionSlug,\n fileUrl,\n handleFileChange,\n id,\n setUploadStatus,\n uploadConfig,\n uploadControlFileName,\n useServerSideFetch,\n ])\n\n const onEditsSave = useCallback(\n (args: UploadEdits) => {\n setModified(true)\n updateUploadEdits(args)\n },\n [setModified, updateUploadEdits],\n )\n\n // Reset states for when replacing the file with a new upload\n useEffect(() => {\n setSelectedSize(null)\n setRemovedFile(false)\n setFileSrc('')\n }, [data?.url, data?.filename])\n\n useEffect(() => {\n if (initialState?.file?.value instanceof File) {\n setFileSrc(URL.createObjectURL(initialState.file.value))\n setRemovedFile(false)\n }\n }, [initialState])\n\n useEffect(() => {\n return () => {\n if (fileSrc?.startsWith('blob:')) {\n URL.revokeObjectURL(fileSrc)\n }\n }\n }, [fileSrc])\n\n useEffect(() => {\n const handleControlFileUrl = async () => {\n if (uploadControlFileUrl) {\n setFileUrl(uploadControlFileUrl)\n await handleUrlSubmit()\n }\n }\n void handleControlFileUrl()\n }, [uploadControlFileUrl, handleUrlSubmit])\n\n useEffect(() => {\n if (uploadControlFile) {\n handleFileChange({ file: uploadControlFile })\n }\n }, [uploadControlFile, handleFileChange])\n\n // Preview a freshly-selected (not-yet-saved) file from its local object URL, so video/audio/PDF\n // are playable/viewable just like images. Sizing is capped in CSS so large files stay contained.\n const renderSelectedFilePreview = (src: string) => {\n const fileType = value?.type ?? ''\n\n if (fileType.startsWith('video/')) {\n return (\n <div className={`${baseClass}__selected-preview`}>\n <VideoPreview fileSrc={src} />\n </div>\n )\n }\n\n if (fileType.startsWith('audio/')) {\n return (\n <div className={`${baseClass}__selected-preview ${baseClass}__selected-preview--audio`}>\n <AudioPreview fileSrc={src} />\n </div>\n )\n }\n\n if (fileType === 'application/pdf') {\n return (\n <div className={`${baseClass}__selected-preview`}>\n <PdfPreview fileSrc={src} title={value?.name} />\n </div>\n )\n }\n\n return (\n <div className={`${baseClass}__selected-preview`}>\n <Thumbnail\n collectionSlug={collectionSlug}\n fileSrc={isImage(fileType) ? src : null}\n size=\"expand\"\n />\n </div>\n )\n }\n\n const drawers = (\n <Fragment>\n {(value || data?.filename) && (\n <EditDepthProvider>\n <EditUpload\n fileName={value?.name || (data?.filename as string)}\n fileSrc={(data?.url as string) || fileSrc}\n imageCacheTag={imageCacheTag}\n initialCrop={uploadEdits?.crop ?? undefined}\n initialFocalPoint={{\n x: uploadEdits?.focalPoint?.x || (data?.focalX as number) || 50,\n y: uploadEdits?.focalPoint?.y || (data?.focalY as number) || 50,\n }}\n onSave={onEditsSave}\n showCrop={showCrop}\n showFocalPoint={showFocalPoint}\n />\n </EditDepthProvider>\n )}\n {data && hasImageSizes && (\n <Drawer\n className={`${baseClass}__preview-drawer`}\n hoverTitle\n slug={sizePreviewSlug}\n title={t('upload:sizesFor', { label: data.filename })}\n >\n <PreviewSizes doc={data} imageCacheTag={imageCacheTag} uploadConfig={uploadConfig} />\n </Drawer>\n )}\n {uploadConfig?.pasteURL !== false && (\n <UploadFromURLModal\n fileUrl={fileUrl}\n handleUrlSubmit={handleUrlSubmit}\n isValidUrl={isValidUrl}\n setFileUrl={setFileUrl}\n />\n )}\n </Fragment>\n )\n\n // Hide the create file input when the collection opts out of it (unless the user has explicitly\n // removed an existing file or already selected a new one).\n const showUploadInput = Boolean(value) || removedFile || !uploadConfig?.hideFileInputOnCreate\n\n return (\n <div className={[fieldBaseClass, baseClass].filter(Boolean).join(' ')}>\n <FieldError message={errorMessage} path=\"filename\" showError={showError} />\n <div className={`${baseClass}__panel`}>\n {data?.filename && !removedFile && (\n <FileToolbar\n filename={data.filename as string}\n fileSrc={sidePanelFileSrc}\n fileUrl={data?.url as string}\n hideRemoveFile={uploadConfig?.hideRemoveFile}\n isAdjustable={fileTypeIsAdjustable}\n onEditImage={() => openModal(editDrawerSlug)}\n onReplace={handleFileRemoval}\n />\n )}\n <div className={`${baseClass}__content`}>\n {data?.filename && !removedFile ? (\n <FilePreview\n collectionSlug={collectionSlug}\n data={data as Record<string, unknown>}\n imageCacheTag={imageCacheTag}\n selectedSize={selectedSize}\n selectedSizeData={selectedSizeData}\n setSelectedSize={setSelectedSize}\n uploadConfig={uploadConfig}\n UploadFilePreview={UploadFilePreview}\n />\n ) : showUploadInput ? (\n <div className={`${baseClass}__upload`}>\n {!value && removedFile && data?.filename && (\n <Button\n buttonStyle=\"secondary\"\n className={`${baseClass}__remove`}\n icon=\"x\"\n onClick={() => setRemovedFile(false)}\n round\n tooltip={t('general:cancel')}\n />\n )}\n {!value && (\n <Dropzone onChange={handleFileSelection}>\n <div className={`${baseClass}__dropzone-content`}>\n <div className={`${baseClass}__dropzone-buttons`}>\n <Button\n buttonStyle=\"secondary\"\n onClick={() => inputRef.current?.click()}\n size=\"medium\"\n >\n {t('upload:selectFile')}\n </Button>\n <input\n accept={acceptMimeTypes}\n aria-hidden=\"true\"\n className={`${baseClass}__hidden-input`}\n hidden\n onChange={(e) => {\n if (e.target.files && e.target.files.length > 0) {\n handleFileSelection(e.target.files)\n }\n }}\n ref={inputRef}\n type=\"file\"\n />\n {uploadConfig?.pasteURL !== false && (\n <Fragment>\n <span className={`${baseClass}__or-text`}>{t('general:or')}</span>\n <Button\n buttonStyle=\"secondary\"\n onClick={() => {\n openModal(pasteURLDrawerSlug)\n setUploadControlFileUrl('')\n setUploadControlFile(null)\n setUploadControlFileName(null)\n }}\n size=\"medium\"\n >\n {t('upload:pasteURL')}\n </Button>\n </Fragment>\n )}\n {UploadControls ?? null}\n </div>\n <p className={`${baseClass}__drag-text`}>\n {t('general:or')} {t('upload:dragAndDrop')}\n </p>\n </div>\n </Dropzone>\n )}\n {value && fileSrc && (\n <Fragment>\n <Button\n buttonStyle=\"secondary\"\n className={`${baseClass}__remove`}\n icon=\"x\"\n onClick={handleFileRemoval}\n round\n tooltip={t('general:cancel')}\n />\n {renderSelectedFilePreview(fileSrc)}\n <div className={`${baseClass}__file-adjustments`}>\n {/* Custom id so this editor doesn't collide with the hidden auto `filename` field. */}\n <TextInput\n id=\"field-filemanager-filename\"\n label={t('upload:fileName')}\n onChange={handleFileNameChange}\n path=\"filename\"\n value={filename || value.name}\n />\n {(value.size || value.type) && (\n <span className={`${baseClass}__selected-meta`}>\n {[value.size ? formatFilesize(value.size) : null, value.type]\n .filter(Boolean)\n .join(' – ')}\n </span>\n )}\n </div>\n </Fragment>\n )}\n </div>\n ) : null}\n </div>\n </div>\n {drawers}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["c","_c","useModal","formatFilesize","isImage","React","Fragment","useCallback","useEffect","useState","FieldError","fieldBaseClass","TextInput","useForm","useField","useDocumentInfo","EditDepthProvider","useTranslation","useUploadControls","useUploadEdits","Button","Drawer","Dropzone","EditUpload","PreviewSizes","Thumbnail","editDrawerSlug","sizePreviewSlug","UploadFromURLModal","usePasteFromClipboard","useUploadFromUrl","UploadDropzoneContent","AudioPreview","FilePreview","PdfPreview","VideoPreview","FileToolbar","baseClass","validate","value","undefined","name","FileManager","t0","$","collectionSlug","initialState","resetUploadEdits","resetUploadEditsFromProps","updateUploadEdits","updateUploadEditsFromProps","uploadConfig","UploadControls","uploadEdits","uploadEditsFromProps","UploadFilePreview","openModal","t","setModified","data","t1","Symbol","for","path","errorMessage","setValue","showError","setUploadControlFile","setUploadControlFileName","setUploadControlFileUrl","uploadControlFile","uploadControlFileUrl","uploadEditsContext","fileSrc","setFileSrc","removedFile","setRemovedFile","filename","setFilename","selectedSize","setSelectedSize","acceptMimeTypes","mimeTypes","join","imageCacheTag","cacheTags","updatedAt","hasImageSizes","imageSizes","length","hasResizeOptions","Boolean","resizeOptions","focalPointEnabled","focalPoint","crop","t2","t3","showCrop","showFocalPoint","selectedSizeData","sizes","sidePanelFileSrc","url","thumbnailURL","sidePanelMimeType","mimeType","fileTypeIsAdjustable","renameFile","_temp","t4","t5","file","isNewFile","t6","File","URL","createObjectURL","handleFileChange","e","updatedFileName","target","handleFileNameChange","files","handleFileSelection","t7","file_0","handleFileFetchedFromUrl","t8","onFileFetched","fileUrl","handleUrlSubmit","isValidUrl","setFileUrl","t9","handlePasteFromClipboard","t10","handleFileRemoval","t11","args","onEditsSave","t12","t13","t14","t15","t16","t17","t18","t19","startsWith","revokeObjectURL","t20","t21","handleControlFileUrl","t22","t23","t24","type","src","fileType","_jsx","className","children","title","size","renderSelectedFilePreview","drawers","_jsxs","fileName","initialCrop","initialFocalPoint","x","focalX","y","focalY","onSave","hoverTitle","slug","label","doc","pasteURL","showUploadInput","hideFileInputOnCreate","t25","filter","message","hideRemoveFile","isAdjustable","onEditImage","onReplace","buttonStyle","icon","onClick","round","tooltip","onChange","extraControls","onFilesSelected","onPasteFromClipboard","pasteButtonClassName","pasteTooltip","id","fileToChange","newName","lastModified"],"sources":["../../../src/elements/FileManager/index.tsx"],"sourcesContent":["'use client'\nimport type { SanitizedCollectionConfig, UploadEdits } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { formatFilesize, isImage } from 'payload/shared'\nimport React, { Fragment, useCallback, useEffect, useState } from 'react'\n\nimport { FieldError } from '../../fields/FieldError/index.js'\nimport { fieldBaseClass } from '../../fields/shared/index.js'\nimport { TextInput } from '../../fields/Text/Input.js'\nimport { useForm } from '../../forms/Form/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { EditDepthProvider } from '../../providers/EditDepth/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { useUploadControls } from '../../providers/UploadControls/index.js'\nimport { useUploadEdits } from '../../providers/UploadEdits/index.js'\nimport { Button } from '../Button/index.js'\nimport { Drawer } from '../Drawer/index.js'\nimport { Dropzone } from '../Dropzone/index.js'\nimport { EditUpload } from '../EditUpload/index.js'\nimport { PreviewSizes } from '../PreviewSizes/index.js'\nimport { Thumbnail } from '../Thumbnail/index.js'\nimport { editDrawerSlug, sizePreviewSlug } from '../Upload/index.js'\nimport { UploadFromURLModal } from '../Upload/UploadFromURLModal/index.js'\nimport { usePasteFromClipboard } from '../Upload/usePasteFromClipboard.js'\nimport { useUploadFromUrl } from '../Upload/useUploadFromUrl.js'\nimport { UploadDropzoneContent } from '../UploadDropzoneContent/index.js'\nimport { AudioPreview } from './FilePreview/AudioPreview/index.js'\nimport { FilePreview } from './FilePreview/index.js'\nimport { PdfPreview } from './FilePreview/PdfPreview/index.js'\nimport { VideoPreview } from './FilePreview/VideoPreview/index.js'\nimport { FileToolbar } from './FileToolbar/index.js'\nimport './index.css'\n\nconst baseClass = 'file-manager'\n\nconst validate = (value) => {\n if (!value && value !== undefined) {\n return 'A file is required.'\n }\n if (value && (!value.name || value.name === '')) {\n return 'A file name is required.'\n }\n return true\n}\n\nexport type FileManagerProps = {\n readonly collectionSlug: string\n readonly initialState?: import('payload').FormState\n /**\n * When provided, upload edits are sourced from these props instead of the `useUploadEdits`\n * context. The bulk upload drawer uses this to drive per-file edits from its FormsManager.\n */\n readonly resetUploadEdits?: () => void\n readonly updateUploadEdits?: (args: UploadEdits) => void\n readonly uploadConfig: Omit<SanitizedCollectionConfig['upload'], 'uploadInstructions'>\n readonly UploadControls?: React.ReactNode\n readonly uploadEdits?: UploadEdits\n readonly UploadFilePreview?: React.ReactNode\n}\n\nexport const FileManager: React.FC<FileManagerProps> = ({\n collectionSlug,\n initialState,\n resetUploadEdits: resetUploadEditsFromProps,\n updateUploadEdits: updateUploadEditsFromProps,\n uploadConfig,\n UploadControls,\n uploadEdits: uploadEditsFromProps,\n UploadFilePreview,\n}) => {\n const { openModal } = useModal()\n const { t } = useTranslation()\n const { setModified } = useForm()\n const { data } = useDocumentInfo()\n const { errorMessage, setValue, showError, value } = useField<File>({\n path: 'file',\n validate,\n })\n const {\n setUploadControlFile,\n setUploadControlFileName,\n setUploadControlFileUrl,\n uploadControlFile,\n uploadControlFileUrl,\n } = useUploadControls()\n const uploadEditsContext = useUploadEdits()\n const resetUploadEdits = resetUploadEditsFromProps ?? uploadEditsContext.resetUploadEdits\n const updateUploadEdits = updateUploadEditsFromProps ?? uploadEditsContext.updateUploadEdits\n const uploadEdits = uploadEditsFromProps ?? uploadEditsContext.uploadEdits\n\n const [fileSrc, setFileSrc] = useState<null | string>(null)\n const [removedFile, setRemovedFile] = useState(false)\n const [filename, setFilename] = useState<string>(value?.name || '')\n const [selectedSize, setSelectedSize] = useState<null | string>(null)\n\n const acceptMimeTypes = uploadConfig.mimeTypes?.join(', ')\n const imageCacheTag = uploadConfig?.cacheTags && data?.updatedAt\n\n const hasImageSizes = uploadConfig?.imageSizes?.length > 0\n const hasResizeOptions = Boolean(uploadConfig?.resizeOptions)\n const focalPointEnabled = uploadConfig?.focalPoint === true\n const { crop: showCrop = true, focalPoint = true } = uploadConfig\n const showFocalPoint = focalPoint && (hasImageSizes || hasResizeOptions || focalPointEnabled)\n\n const selectedSizeData = selectedSize\n ? (data?.sizes?.[selectedSize] as Record<string, unknown>)\n : null\n const sidePanelFileSrc = (selectedSizeData?.url ?? data?.thumbnailURL ?? data?.url ?? null) as\n | null\n | string\n const sidePanelMimeType = data?.mimeType as string | undefined\n const fileTypeIsAdjustable =\n !!sidePanelMimeType &&\n isImage(sidePanelMimeType) &&\n sidePanelMimeType !== 'image/svg+xml' &&\n sidePanelMimeType !== 'image/jxl'\n\n const renameFile = (fileToChange: File, newName: string): File =>\n new File([fileToChange], newName, {\n type: fileToChange.type,\n lastModified: fileToChange.lastModified,\n })\n\n const handleFileChange = useCallback(\n ({ file, isNewFile = true }: { file: File | null; isNewFile?: boolean }) => {\n if (isNewFile && file instanceof File) {\n setFileSrc(URL.createObjectURL(file))\n }\n setValue(file)\n setUploadControlFileUrl('')\n setUploadControlFileName(null)\n setUploadControlFile(null)\n },\n [setValue, setUploadControlFile, setUploadControlFileName, setUploadControlFileUrl],\n )\n\n const handleFileNameChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const updatedFileName = e.target.value\n if (value) {\n handleFileChange({ file: renameFile(value, updatedFileName), isNewFile: false })\n setFilename(updatedFileName)\n }\n },\n [handleFileChange, value],\n )\n\n const handleFileSelection = useCallback(\n (files: FileList) => handleFileChange({ file: files?.[0] }),\n [handleFileChange],\n )\n\n const handleFileFetchedFromUrl = useCallback(\n (file: File) => handleFileChange({ file }),\n [handleFileChange],\n )\n\n const { fileUrl, handleUrlSubmit, isValidUrl, setFileUrl } = useUploadFromUrl({\n collectionSlug,\n onFileFetched: handleFileFetchedFromUrl,\n uploadConfig,\n })\n\n const handlePasteFromClipboard = usePasteFromClipboard({\n handleFileSelection,\n handleUrlSubmit,\n setFileUrl,\n uploadConfig,\n })\n\n const handleFileRemoval = useCallback(() => {\n setRemovedFile(true)\n handleFileChange({ file: null })\n setFileSrc('')\n setFileUrl('')\n setSelectedSize(null)\n resetUploadEdits()\n setUploadControlFileUrl('')\n setUploadControlFileName(null)\n setUploadControlFile(null)\n }, [\n handleFileChange,\n resetUploadEdits,\n setFileUrl,\n setUploadControlFile,\n setUploadControlFileName,\n setUploadControlFileUrl,\n ])\n\n const onEditsSave = useCallback(\n (args: UploadEdits) => {\n setModified(true)\n updateUploadEdits(args)\n },\n [setModified, updateUploadEdits],\n )\n\n // Reset states for when replacing the file with a new upload\n useEffect(() => {\n setSelectedSize(null)\n setRemovedFile(false)\n setFileSrc('')\n }, [data?.url, data?.filename])\n\n useEffect(() => {\n if (initialState?.file?.value instanceof File) {\n setFileSrc(URL.createObjectURL(initialState.file.value))\n setRemovedFile(false)\n }\n }, [initialState])\n\n useEffect(() => {\n return () => {\n if (fileSrc?.startsWith('blob:')) {\n URL.revokeObjectURL(fileSrc)\n }\n }\n }, [fileSrc])\n\n useEffect(() => {\n const handleControlFileUrl = async () => {\n if (uploadControlFileUrl) {\n setFileUrl(uploadControlFileUrl)\n await handleUrlSubmit()\n }\n }\n void handleControlFileUrl()\n }, [uploadControlFileUrl, handleUrlSubmit, setFileUrl])\n\n useEffect(() => {\n if (uploadControlFile) {\n handleFileChange({ file: uploadControlFile })\n }\n }, [uploadControlFile, handleFileChange])\n\n // Preview a freshly-selected (not-yet-saved) file from its local object URL, so video/audio/PDF\n // are playable/viewable just like images. Sizing is capped in CSS so large files stay contained.\n const renderSelectedFilePreview = (src: string) => {\n const fileType = value?.type ?? ''\n\n if (fileType.startsWith('video/')) {\n return (\n <div className={`${baseClass}__selected-preview`}>\n <VideoPreview fileSrc={src} />\n </div>\n )\n }\n\n if (fileType.startsWith('audio/')) {\n return (\n <div className={`${baseClass}__selected-preview ${baseClass}__selected-preview--audio`}>\n <AudioPreview fileSrc={src} />\n </div>\n )\n }\n\n if (fileType === 'application/pdf') {\n return (\n <div className={`${baseClass}__selected-preview`}>\n <PdfPreview fileSrc={src} title={value?.name} />\n </div>\n )\n }\n\n return (\n <div className={`${baseClass}__selected-preview`}>\n <Thumbnail\n collectionSlug={collectionSlug}\n fileSrc={isImage(fileType) ? src : null}\n size=\"expand\"\n />\n </div>\n )\n }\n\n const drawers = (\n <Fragment>\n {(value || data?.filename) && (\n <EditDepthProvider>\n <EditUpload\n fileName={value?.name || (data?.filename as string)}\n fileSrc={(data?.url as string) || fileSrc}\n imageCacheTag={imageCacheTag}\n initialCrop={uploadEdits?.crop ?? undefined}\n initialFocalPoint={{\n x: uploadEdits?.focalPoint?.x || (data?.focalX as number) || 50,\n y: uploadEdits?.focalPoint?.y || (data?.focalY as number) || 50,\n }}\n onSave={onEditsSave}\n showCrop={showCrop}\n showFocalPoint={showFocalPoint}\n />\n </EditDepthProvider>\n )}\n {data && hasImageSizes && (\n <Drawer\n className={`${baseClass}__preview-drawer`}\n hoverTitle\n slug={sizePreviewSlug}\n title={t('upload:sizesFor', { label: data.filename })}\n >\n <PreviewSizes doc={data} imageCacheTag={imageCacheTag} uploadConfig={uploadConfig} />\n </Drawer>\n )}\n {uploadConfig?.pasteURL !== false && (\n <UploadFromURLModal\n fileUrl={fileUrl}\n handleUrlSubmit={handleUrlSubmit}\n isValidUrl={isValidUrl}\n setFileUrl={setFileUrl}\n />\n )}\n </Fragment>\n )\n\n // Hide the create file input when the collection opts out of it (unless the user has explicitly\n // removed an existing file or already selected a new one).\n const showUploadInput = Boolean(value) || removedFile || !uploadConfig?.hideFileInputOnCreate\n\n return (\n <div className={[fieldBaseClass, baseClass].filter(Boolean).join(' ')}>\n <FieldError message={errorMessage} path=\"filename\" showError={showError} />\n <div className={`${baseClass}__panel`}>\n {data?.filename && !removedFile && (\n <FileToolbar\n filename={data.filename as string}\n fileSrc={sidePanelFileSrc}\n fileUrl={data?.url as string}\n hideRemoveFile={uploadConfig?.hideRemoveFile}\n isAdjustable={fileTypeIsAdjustable}\n onEditImage={() => openModal(editDrawerSlug)}\n onReplace={handleFileRemoval}\n />\n )}\n <div className={`${baseClass}__content`}>\n {data?.filename && !removedFile ? (\n <FilePreview\n collectionSlug={collectionSlug}\n data={data as Record<string, unknown>}\n imageCacheTag={imageCacheTag}\n selectedSize={selectedSize}\n selectedSizeData={selectedSizeData}\n setSelectedSize={setSelectedSize}\n uploadConfig={uploadConfig}\n UploadFilePreview={UploadFilePreview}\n />\n ) : showUploadInput ? (\n <div className={`${baseClass}__upload`}>\n {!value && removedFile && data?.filename && (\n <Button\n buttonStyle=\"secondary\"\n className={`${baseClass}__remove`}\n icon=\"x\"\n onClick={() => setRemovedFile(false)}\n round\n tooltip={t('general:cancel')}\n />\n )}\n {!value && (\n <Dropzone onChange={handleFileSelection}>\n <UploadDropzoneContent\n acceptMimeTypes={acceptMimeTypes}\n extraControls={UploadControls}\n onFilesSelected={handleFileSelection}\n onPasteFromClipboard={handlePasteFromClipboard}\n pasteButtonClassName={`${baseClass}__pasteFromClipboard`}\n pasteTooltip={t('upload:pasteURL')}\n />\n </Dropzone>\n )}\n {value && fileSrc && (\n <Fragment>\n <Button\n buttonStyle=\"secondary\"\n className={`${baseClass}__remove`}\n icon=\"x\"\n onClick={handleFileRemoval}\n round\n tooltip={t('general:cancel')}\n />\n {renderSelectedFilePreview(fileSrc)}\n <div className={`${baseClass}__file-adjustments`}>\n {/* Custom id so this editor doesn't collide with the hidden auto `filename` field. */}\n <TextInput\n id=\"field-filemanager-filename\"\n label={t('upload:fileName')}\n onChange={handleFileNameChange}\n path=\"filename\"\n value={filename || value.name}\n />\n {(value.size || value.type) && (\n <span className={`${baseClass}__selected-meta`}>\n {[value.size ? formatFilesize(value.size) : null, value.type]\n .filter(Boolean)\n .join(' – ')}\n </span>\n )}\n </div>\n </Fragment>\n )}\n </div>\n ) : null}\n </div>\n </div>\n {drawers}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -2,7 +2,7 @@ import React from 'react';
|
|
|
2
2
|
export declare const pasteURLDrawerSlug = "upload-paste-url";
|
|
3
3
|
type Props = {
|
|
4
4
|
readonly fileUrl: string;
|
|
5
|
-
readonly handleUrlSubmit: () => Promise<
|
|
5
|
+
readonly handleUrlSubmit: () => Promise<boolean>;
|
|
6
6
|
readonly isValidUrl: boolean;
|
|
7
7
|
readonly setFileUrl: (url: string) => void;
|
|
8
8
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/Upload/UploadFromURLModal/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAOzB,eAAO,MAAM,kBAAkB,qBAAqB,CAAA;AAEpD,KAAK,KAAK,GAAG;IACX,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,eAAe,EAAE,MAAM,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/Upload/UploadFromURLModal/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAOzB,eAAO,MAAM,kBAAkB,qBAAqB,CAAA;AAEpD,KAAK,KAAK,GAAG;IACX,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,eAAe,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IAChD,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CAC3C,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAkC9C,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["c","_c","React","TextInput","useTranslation","Button","DialogBody","DialogFooter","DialogHeader","DialogModal","pasteURLDrawerSlug","UploadFromURLModal","t0","$","fileUrl","handleUrlSubmit","isValidUrl","setFileUrl","t","t1","t2","e","preventDefault","t3","e_0","target","value","t4","_jsxs","closeOnBlur","slug","children","_jsx","showClose","title","onSubmit","label","onChange","path","placeholder","buttonStyle","disabled","onClick"],"sources":["../../../../src/elements/Upload/UploadFromURLModal/index.tsx"],"sourcesContent":["'use client'\nimport React from 'react'\n\nimport { TextInput } from '../../../fields/Text/Input.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { Button } from '../../Button/index.js'\nimport { DialogBody, DialogFooter, DialogHeader, DialogModal } from '../../Dialog/index.js'\n\nexport const pasteURLDrawerSlug = 'upload-paste-url'\n\ntype Props = {\n readonly fileUrl: string\n readonly handleUrlSubmit: () => Promise<
|
|
1
|
+
{"version":3,"file":"index.js","names":["c","_c","React","TextInput","useTranslation","Button","DialogBody","DialogFooter","DialogHeader","DialogModal","pasteURLDrawerSlug","UploadFromURLModal","t0","$","fileUrl","handleUrlSubmit","isValidUrl","setFileUrl","t","t1","t2","e","preventDefault","t3","e_0","target","value","t4","_jsxs","closeOnBlur","slug","children","_jsx","showClose","title","onSubmit","label","onChange","path","placeholder","buttonStyle","disabled","onClick"],"sources":["../../../../src/elements/Upload/UploadFromURLModal/index.tsx"],"sourcesContent":["'use client'\nimport React from 'react'\n\nimport { TextInput } from '../../../fields/Text/Input.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { Button } from '../../Button/index.js'\nimport { DialogBody, DialogFooter, DialogHeader, DialogModal } from '../../Dialog/index.js'\n\nexport const pasteURLDrawerSlug = 'upload-paste-url'\n\ntype Props = {\n readonly fileUrl: string\n readonly handleUrlSubmit: () => Promise<boolean>\n readonly isValidUrl: boolean\n readonly setFileUrl: (url: string) => void\n}\n\nexport const UploadFromURLModal: React.FC<Props> = ({\n fileUrl,\n handleUrlSubmit,\n isValidUrl,\n setFileUrl,\n}) => {\n const { t } = useTranslation()\n\n return (\n <DialogModal closeOnBlur slug={pasteURLDrawerSlug}>\n <DialogHeader showClose title={t('upload:fromURL')} />\n <DialogBody>\n <form\n onSubmit={(e) => {\n e.preventDefault()\n void handleUrlSubmit()\n }}\n >\n <TextInput\n label={t('upload:linkToFile')}\n onChange={(e) => setFileUrl(e.target.value)}\n path=\"url\"\n placeholder=\"https://\"\n value={fileUrl}\n />\n </form>\n </DialogBody>\n <DialogFooter>\n <Button buttonStyle=\"primary\" disabled={!isValidUrl} onClick={() => void handleUrlSubmit()}>\n {t('upload:addFile')}\n </Button>\n </DialogFooter>\n </DialogModal>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AACA,OAAOC,KAAA,MAAW;AAElB,SAASC,SAAS,QAAQ;AAC1B,SAASC,cAAc,QAAQ;AAC/B,SAASC,MAAM,QAAQ;AACvB,SAASC,UAAU,EAAEC,YAAY,EAAEC,YAAY,EAAEC,WAAW,QAAQ;AAEpE,OAAO,MAAMC,kBAAA,GAAqB;AASlC,OAAO,MAAMC,kBAAA,GAAsCC,EAAA;EAAA,MAAAC,CAAA,GAAAZ,EAAA;EAAC;IAAAa,OAAA;IAAAC,eAAA;IAAAC,UAAA;IAAAC;EAAA,IAAAL,EAKnD;EACC;IAAAM;EAAA,IAAcd,cAAA;EAAA,IAAAe,EAAA;EAAA,IAAAN,CAAA,QAAAC,OAAA,IAAAD,CAAA,QAAAE,eAAA,IAAAF,CAAA,QAAAG,UAAA,IAAAH,CAAA,QAAAI,UAAA,IAAAJ,CAAA,QAAAK,CAAA;IAAA,IAAAE,EAAA;IAAA,IAAAP,CAAA,QAAAE,eAAA;MAOIK,EAAA,GAAAC,CAAA;QACRA,CAAA,CAAAC,cAAA,CAAgB;QACXP,eAAA;MAAA;MACPF,CAAA,MAAAE,eAAA;MAAAF,CAAA,MAAAO,EAAA;IAAA;MAAAA,EAAA,GAAAP,CAAA;IAAA;IAAA,IAAAU,EAAA;IAAA,IAAAV,CAAA,QAAAI,UAAA;MAIYM,EAAA,GAAAC,GAAA,IAAOP,UAAA,CAAWI,GAAA,CAAAI,MAAA,CAAAC,KAAc;MAAAb,CAAA,MAAAI,UAAA;MAAAJ,CAAA,MAAAU,EAAA;IAAA;MAAAA,EAAA,GAAAV,CAAA;IAAA;IAAA,IAAAc,EAAA;IAAA,IAAAd,CAAA,SAAAE,eAAA;MAQgBY,EAAA,GAAAA,CAAA,UAAWZ,eAAA;MAAAF,CAAA,OAAAE,eAAA;MAAAF,CAAA,OAAAc,EAAA;IAAA;MAAAA,EAAA,GAAAd,CAAA;IAAA;IAnB7EM,EAAA,GAAAS,KAAA,CAAAnB,WAAA;MAAAoB,WAAA;MAAAC,IAAA,EAAApB,kBAAA;MAAAqB,QAAA,GACEC,IAAA,CAAAxB,YAAA;QAAAyB,SAAA;QAAAC,KAAA,EAA+BhB,CAAA,CAAE;MAAA,C,GACjCc,IAAA,CAAA1B,UAAA;QAAAyB,QAAA,EACEC,IAAA,CAAC;UAAAG,QAAA,EACWf,EAGV;UAAAW,QAAA,EAEAC,IAAA,CAAA7B,SAAA;YAAAiC,KAAA,EACSlB,CAAA,CAAE;YAAAmB,QAAA,EACCd,EAAgC;YAAAe,IAAA,EACrC;YAAAC,WAAA,EACO;YAAAb,KAAA,EACLZ;UAAA,C;;UAIbkB,IAAA,CAAAzB,YAAA;QAAAwB,QAAA,EACEC,IAAA,CAAA3B,MAAA;UAAAmC,WAAA,EAAoB;UAAAC,QAAA,GAAqBzB,UAAA;UAAA0B,OAAA,EAAqBf,EAAW;UAAAI,QAAA,EACtEb,CAAA,CAAE;QAAA,C;;;;;;;;;;;;SApBTC,E;CAyBJ","ignoreList":[]}
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
.file-field__upload {
|
|
10
10
|
display: flex;
|
|
11
11
|
position: relative;
|
|
12
|
+
flex-wrap: wrap;
|
|
13
|
+
justify-content: space-between;
|
|
12
14
|
}
|
|
13
15
|
|
|
14
16
|
.file-field__file-selected {
|
|
@@ -17,7 +19,7 @@
|
|
|
17
19
|
|
|
18
20
|
.file-field__thumbnail-wrap {
|
|
19
21
|
position: relative;
|
|
20
|
-
width:
|
|
22
|
+
width: 50%;
|
|
21
23
|
|
|
22
24
|
.thumbnail {
|
|
23
25
|
position: relative;
|
|
@@ -32,16 +34,19 @@
|
|
|
32
34
|
position: absolute;
|
|
33
35
|
top: var(--spacer-2);
|
|
34
36
|
right: var(--spacer-2);
|
|
35
|
-
margin:
|
|
37
|
+
margin: var(--spacer-3);
|
|
36
38
|
z-index: 1;
|
|
39
|
+
order: 2;
|
|
37
40
|
}
|
|
38
41
|
|
|
39
42
|
.file-field__file-adjustments {
|
|
40
|
-
padding: var(--spacer-
|
|
43
|
+
padding: var(--spacer-2);
|
|
41
44
|
width: 100%;
|
|
42
45
|
display: flex;
|
|
43
46
|
flex-direction: column;
|
|
44
|
-
gap:
|
|
47
|
+
gap: 0;
|
|
48
|
+
order: 3;
|
|
49
|
+
border-top: var(--stroke-width-medium) solid var(--color-bg-primary);
|
|
45
50
|
}
|
|
46
51
|
|
|
47
52
|
.file-field__upload-actions {
|
|
@@ -96,21 +101,28 @@
|
|
|
96
101
|
text-transform: lowercase;
|
|
97
102
|
align-self: center;
|
|
98
103
|
color: var(--color-text-tertiary);
|
|
104
|
+
display: none;
|
|
99
105
|
}
|
|
100
106
|
|
|
101
107
|
.file-field--side-panel {
|
|
102
108
|
position: relative;
|
|
103
109
|
flex: 1 0 0;
|
|
104
110
|
width: 100%;
|
|
105
|
-
min-height:
|
|
111
|
+
min-height: 400px;
|
|
106
112
|
margin-bottom: 0;
|
|
107
113
|
border-radius: 0;
|
|
108
114
|
background: var(--color-bg-secondary);
|
|
109
115
|
}
|
|
110
116
|
|
|
117
|
+
.file-field__side-panel {
|
|
118
|
+
position: static;
|
|
119
|
+
height: auto;
|
|
120
|
+
min-height: 400px;
|
|
121
|
+
}
|
|
122
|
+
|
|
111
123
|
.file-field__side-panel__content {
|
|
112
124
|
display: flex;
|
|
113
|
-
flex-direction:
|
|
125
|
+
flex-direction: column;
|
|
114
126
|
flex: 1 1 0;
|
|
115
127
|
min-height: 0;
|
|
116
128
|
overflow: hidden;
|
|
@@ -125,6 +137,7 @@
|
|
|
125
137
|
padding: var(--spacer-3) var(--spacer-4);
|
|
126
138
|
gap: var(--spacer-3);
|
|
127
139
|
overflow: hidden;
|
|
140
|
+
height: auto;
|
|
128
141
|
}
|
|
129
142
|
|
|
130
143
|
.file-field__side-panel__info {
|
|
@@ -197,55 +210,49 @@
|
|
|
197
210
|
}
|
|
198
211
|
}
|
|
199
212
|
|
|
200
|
-
@media (
|
|
213
|
+
@media (min-width: 1024px) {
|
|
201
214
|
.file-field--side-panel {
|
|
202
|
-
min-height:
|
|
215
|
+
min-height: max(500px, calc(100dvh - var(--doc-controls-height) - var(--app-header-height)));
|
|
203
216
|
}
|
|
204
217
|
|
|
205
218
|
.file-field__side-panel {
|
|
206
|
-
|
|
207
|
-
height: auto;
|
|
208
|
-
min-height: 400px;
|
|
219
|
+
min-height: auto;
|
|
209
220
|
}
|
|
210
221
|
|
|
211
222
|
.file-field__side-panel__content {
|
|
212
|
-
flex-direction:
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
.file-field__side-panel__preview {
|
|
216
|
-
height: auto;
|
|
223
|
+
flex-direction: row;
|
|
217
224
|
}
|
|
218
225
|
}
|
|
219
226
|
|
|
220
|
-
@media (
|
|
227
|
+
@media (min-width: 768px) {
|
|
221
228
|
.file-field__upload {
|
|
222
|
-
flex-wrap:
|
|
223
|
-
justify-content:
|
|
229
|
+
flex-wrap: nowrap;
|
|
230
|
+
justify-content: normal;
|
|
224
231
|
}
|
|
225
232
|
|
|
226
233
|
.file-field__remove {
|
|
227
|
-
margin:
|
|
228
|
-
order:
|
|
234
|
+
margin: 0;
|
|
235
|
+
order: 0;
|
|
229
236
|
}
|
|
230
237
|
|
|
231
238
|
.file-field__file-adjustments {
|
|
232
|
-
order:
|
|
233
|
-
border-top:
|
|
234
|
-
padding: var(--spacer-
|
|
235
|
-
gap:
|
|
239
|
+
order: 0;
|
|
240
|
+
border-top: none;
|
|
241
|
+
padding: var(--spacer-3);
|
|
242
|
+
gap: var(--spacer-2);
|
|
236
243
|
}
|
|
237
244
|
|
|
238
245
|
.file-field__thumbnail-wrap {
|
|
239
|
-
order:
|
|
240
|
-
width:
|
|
241
|
-
|
|
242
|
-
.thumbnail {
|
|
243
|
-
width: 100%;
|
|
244
|
-
}
|
|
246
|
+
order: 0;
|
|
247
|
+
width: 150px;
|
|
245
248
|
}
|
|
246
249
|
|
|
247
250
|
.file-field__edit {
|
|
248
|
-
display:
|
|
251
|
+
/* display: revert; */
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
.file-field__dragAndDropText {
|
|
255
|
+
display: block;
|
|
249
256
|
}
|
|
250
257
|
}
|
|
251
258
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Upload/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,yBAAyB,EAAe,MAAM,SAAS,CAAA;AAIhF,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Upload/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,yBAAyB,EAAe,MAAM,SAAS,CAAA;AAIhF,OAAO,KAAmD,MAAM,OAAO,CAAA;AAevE,OAAO,aAAa,CAAA;AAKpB,OAAO,EAAE,kBAAkB,EAAsB,MAAM,+BAA+B,CAAA;AAItF,OAAO,EAAE,kBAAkB,EAAE,CAAA;AAG7B,eAAO,MAAM,cAAc,gBAAgB,CAAA;AAC3C,eAAO,MAAM,eAAe,kBAAkB,CAAA;AAc9C,KAAK,iBAAiB,GAAG;IACvB,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;IAC1C,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAA;IACnC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAA;IACpC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,eAAO,MAAM,aAAa,wEAKvB,iBAAiB,sBAkDnB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;IAC1C,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,CAAA;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,IAAI,CAAA;IACzC,QAAQ,CAAC,YAAY,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAA;IAC1D,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1C,CAAA;AAED,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAYxC,CAAA"}
|
|
@@ -3,15 +3,13 @@
|
|
|
3
3
|
import { c as _c } from "react/compiler-runtime";
|
|
4
4
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
5
5
|
import { useModal } from '@faceless-ui/modal';
|
|
6
|
-
import {
|
|
7
|
-
import React, {
|
|
8
|
-
import { toast } from 'sonner';
|
|
6
|
+
import { isImage } from 'payload/shared';
|
|
7
|
+
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
|
9
8
|
import { FieldError } from '../../fields/FieldError/index.js';
|
|
10
9
|
import { fieldBaseClass } from '../../fields/shared/index.js';
|
|
11
10
|
import { TextInput } from '../../fields/Text/Input.js';
|
|
12
11
|
import { useForm, useFormProcessing } from '../../forms/Form/index.js';
|
|
13
12
|
import { useField } from '../../forms/useField/index.js';
|
|
14
|
-
import { useConfig } from '../../providers/Config/index.js';
|
|
15
13
|
import { useDocumentInfo } from '../../providers/DocumentInfo/index.js';
|
|
16
14
|
import { EditDepthProvider } from '../../providers/EditDepth/index.js';
|
|
17
15
|
import { useTranslation } from '../../providers/Translation/index.js';
|
|
@@ -20,12 +18,14 @@ import { useUploadEdits } from '../../providers/UploadEdits/index.js';
|
|
|
20
18
|
import { Button } from '../Button/index.js';
|
|
21
19
|
import { Drawer } from '../Drawer/index.js';
|
|
22
20
|
import { Dropzone } from '../Dropzone/index.js';
|
|
23
|
-
import { EditUpload } from '../EditUpload/index.js';
|
|
24
21
|
import './index.css';
|
|
22
|
+
import { EditUpload } from '../EditUpload/index.js';
|
|
25
23
|
import { FileDetails } from '../FileDetails/index.js';
|
|
26
24
|
import { PreviewSizes } from '../PreviewSizes/index.js';
|
|
27
25
|
import { Thumbnail } from '../Thumbnail/index.js';
|
|
28
26
|
import { pasteURLDrawerSlug, UploadFromURLModal } from './UploadFromURLModal/index.js';
|
|
27
|
+
import { usePasteFromClipboard } from './usePasteFromClipboard.js';
|
|
28
|
+
import { useUploadFromUrl } from './useUploadFromUrl.js';
|
|
29
29
|
export { pasteURLDrawerSlug };
|
|
30
30
|
const baseClass = 'file-field';
|
|
31
31
|
export const editDrawerSlug = 'edit-upload';
|
|
@@ -149,31 +149,17 @@ const UploadComponent = props => {
|
|
|
149
149
|
setUploadControlFileName,
|
|
150
150
|
setUploadControlFileUrl,
|
|
151
151
|
uploadControlFile,
|
|
152
|
-
uploadControlFileName,
|
|
153
152
|
uploadControlFileUrl
|
|
154
153
|
} = useUploadControls();
|
|
155
|
-
const {
|
|
156
|
-
config: {
|
|
157
|
-
routes: {
|
|
158
|
-
api
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
} = useConfig();
|
|
162
154
|
const {
|
|
163
155
|
t
|
|
164
156
|
} = useTranslation();
|
|
165
|
-
const {
|
|
166
|
-
closeModal,
|
|
167
|
-
openModal
|
|
168
|
-
} = useModal();
|
|
169
157
|
const {
|
|
170
158
|
setModified
|
|
171
159
|
} = useForm();
|
|
172
160
|
const {
|
|
173
|
-
id,
|
|
174
161
|
data,
|
|
175
|
-
docPermissions
|
|
176
|
-
setUploadStatus
|
|
162
|
+
docPermissions
|
|
177
163
|
} = useDocumentInfo();
|
|
178
164
|
const isFormSubmitting = useFormProcessing();
|
|
179
165
|
const {
|
|
@@ -188,9 +174,7 @@ const UploadComponent = props => {
|
|
|
188
174
|
const [fileSrc, setFileSrc] = useState(null);
|
|
189
175
|
const [removedFile, setRemovedFile] = useState(false);
|
|
190
176
|
const [filename, setFilename] = useState(value?.name || '');
|
|
191
|
-
const [fileUrl, setFileUrl] = useState('');
|
|
192
177
|
const inputRef = useRef(null);
|
|
193
|
-
const useServerSideFetch = typeof uploadConfig?.pasteURL === 'object' && uploadConfig.pasteURL.allowList?.length > 0;
|
|
194
178
|
const handleFileChange = useCallback(({
|
|
195
179
|
file,
|
|
196
180
|
isNewFile = true
|
|
@@ -230,6 +214,25 @@ const UploadComponent = props => {
|
|
|
230
214
|
file: fileToUpload
|
|
231
215
|
});
|
|
232
216
|
}, [handleFileChange]);
|
|
217
|
+
const handleFileFetchedFromUrl = useCallback(file_0 => handleFileChange({
|
|
218
|
+
file: file_0
|
|
219
|
+
}), [handleFileChange]);
|
|
220
|
+
const {
|
|
221
|
+
fileUrl,
|
|
222
|
+
handleUrlSubmit,
|
|
223
|
+
isValidUrl,
|
|
224
|
+
setFileUrl
|
|
225
|
+
} = useUploadFromUrl({
|
|
226
|
+
collectionSlug,
|
|
227
|
+
onFileFetched: handleFileFetchedFromUrl,
|
|
228
|
+
uploadConfig
|
|
229
|
+
});
|
|
230
|
+
const handlePasteFromClipboard = usePasteFromClipboard({
|
|
231
|
+
handleFileSelection,
|
|
232
|
+
handleUrlSubmit,
|
|
233
|
+
setFileUrl,
|
|
234
|
+
uploadConfig
|
|
235
|
+
});
|
|
233
236
|
const handleFileRemoval = useCallback(() => {
|
|
234
237
|
setRemovedFile(true);
|
|
235
238
|
handleFileChange({
|
|
@@ -241,71 +244,11 @@ const UploadComponent = props => {
|
|
|
241
244
|
setUploadControlFileUrl('');
|
|
242
245
|
setUploadControlFileName(null);
|
|
243
246
|
setUploadControlFile(null);
|
|
244
|
-
}, [handleFileChange, resetUploadEdits, setUploadControlFile, setUploadControlFileName, setUploadControlFileUrl]);
|
|
247
|
+
}, [handleFileChange, resetUploadEdits, setFileUrl, setUploadControlFile, setUploadControlFileName, setUploadControlFileUrl]);
|
|
245
248
|
const onEditsSave = useCallback(args => {
|
|
246
249
|
setModified(true);
|
|
247
250
|
updateUploadEdits(args);
|
|
248
251
|
}, [setModified, updateUploadEdits]);
|
|
249
|
-
const isValidUrl = Boolean(fileUrl && URL.canParse(fileUrl));
|
|
250
|
-
const handleUrlSubmit = useCallback(async () => {
|
|
251
|
-
if (!fileUrl || !URL.canParse(fileUrl) || uploadConfig?.pasteURL === false) {
|
|
252
|
-
return;
|
|
253
|
-
}
|
|
254
|
-
setUploadStatus('uploading');
|
|
255
|
-
try {
|
|
256
|
-
// Attempt client-side fetch
|
|
257
|
-
const clientResponse = await fetch(fileUrl);
|
|
258
|
-
if (!clientResponse.ok) {
|
|
259
|
-
throw new Error(`Fetch failed with status: ${clientResponse.status}`);
|
|
260
|
-
}
|
|
261
|
-
const blob = await clientResponse.blob();
|
|
262
|
-
const rawSegment = fileUrl.split('/').pop() || '';
|
|
263
|
-
const fileName = uploadControlFileName || decodeURIComponent(rawSegment.split('?')[0]);
|
|
264
|
-
const file_0 = new File([blob], fileName, {
|
|
265
|
-
type: blob.type
|
|
266
|
-
});
|
|
267
|
-
handleFileChange({
|
|
268
|
-
file: file_0
|
|
269
|
-
});
|
|
270
|
-
setUploadStatus('idle');
|
|
271
|
-
closeModal(pasteURLDrawerSlug);
|
|
272
|
-
setFileUrl('');
|
|
273
|
-
return; // Exit if client-side fetch succeeds
|
|
274
|
-
} catch (_clientError) {
|
|
275
|
-
if (!useServerSideFetch) {
|
|
276
|
-
// If server-side fetch is not enabled, show client-side error
|
|
277
|
-
toast.error('Failed to fetch the file.');
|
|
278
|
-
setUploadStatus('failed');
|
|
279
|
-
return;
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
// Attempt server-side fetch if client-side fetch fails and useServerSideFetch is true
|
|
283
|
-
try {
|
|
284
|
-
const pasteURL = `/${collectionSlug}/paste-url${id ? `/${id}?` : '?'}src=${encodeURIComponent(fileUrl)}`;
|
|
285
|
-
const serverResponse = await fetch(formatAdminURL({
|
|
286
|
-
apiRoute: api,
|
|
287
|
-
path: pasteURL
|
|
288
|
-
}));
|
|
289
|
-
if (!serverResponse.ok) {
|
|
290
|
-
throw new Error(`Fetch failed with status: ${serverResponse.status}`);
|
|
291
|
-
}
|
|
292
|
-
const blob_0 = await serverResponse.blob();
|
|
293
|
-
const rawSegment_0 = fileUrl.split('/').pop() || '';
|
|
294
|
-
const fileName_0 = decodeURIComponent(rawSegment_0.split('?')[0]);
|
|
295
|
-
const file_1 = new File([blob_0], fileName_0, {
|
|
296
|
-
type: blob_0.type
|
|
297
|
-
});
|
|
298
|
-
handleFileChange({
|
|
299
|
-
file: file_1
|
|
300
|
-
});
|
|
301
|
-
setUploadStatus('idle');
|
|
302
|
-
closeModal(pasteURLDrawerSlug);
|
|
303
|
-
setFileUrl('');
|
|
304
|
-
} catch (_serverError) {
|
|
305
|
-
toast.error('The provided URL is not allowed.');
|
|
306
|
-
setUploadStatus('failed');
|
|
307
|
-
}
|
|
308
|
-
}, [api, closeModal, collectionSlug, fileUrl, handleFileChange, id, setUploadStatus, uploadConfig, uploadControlFileName, useServerSideFetch]);
|
|
309
252
|
useEffect(() => {
|
|
310
253
|
if (initialState?.file?.value instanceof File) {
|
|
311
254
|
setFileSrc(URL.createObjectURL(initialState.file.value));
|
|
@@ -344,7 +287,7 @@ const UploadComponent = props => {
|
|
|
344
287
|
}
|
|
345
288
|
};
|
|
346
289
|
void handleControlFileUrl();
|
|
347
|
-
}, [uploadControlFileUrl, handleUrlSubmit]);
|
|
290
|
+
}, [uploadControlFileUrl, handleUrlSubmit, setFileUrl]);
|
|
348
291
|
useEffect(() => {
|
|
349
292
|
const handleControlFile = () => {
|
|
350
293
|
if (uploadControlFile) {
|
|
@@ -433,21 +376,16 @@ const UploadComponent = props => {
|
|
|
433
376
|
},
|
|
434
377
|
ref: inputRef,
|
|
435
378
|
type: "file"
|
|
436
|
-
}),
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
setUploadControlFileName(null);
|
|
447
|
-
},
|
|
448
|
-
size: "medium",
|
|
449
|
-
children: t('upload:pasteURL')
|
|
450
|
-
})]
|
|
379
|
+
}), /*#__PURE__*/_jsx("span", {
|
|
380
|
+
className: `${baseClass}__orText`,
|
|
381
|
+
children: t('general:or')
|
|
382
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
383
|
+
buttonStyle: "pill",
|
|
384
|
+
className: `${baseClass}__pasteFromClipboard`,
|
|
385
|
+
icon: "clipboard",
|
|
386
|
+
onClick: handlePasteFromClipboard,
|
|
387
|
+
size: "medium",
|
|
388
|
+
tooltip: t('upload:pasteURL')
|
|
451
389
|
}), UploadControls ? UploadControls : null]
|
|
452
390
|
}), /*#__PURE__*/_jsxs("p", {
|
|
453
391
|
className: `${baseClass}__dragAndDropText`,
|