Files
payload/src/admin/hooks/useThumbnail.ts
2023-03-21 09:33:16 -04:00

55 lines
1.3 KiB
TypeScript

import { useConfig } from '../components/utilities/Config';
import { SanitizedCollectionConfig } from '../../collections/config/types';
import isImage from '../../uploads/isImage';
const absoluteURLPattern = new RegExp('^(?:[a-z]+:)?//', 'i');
const base64Pattern = new RegExp(/^data:image\/[a-z]+;base64,/);
const useThumbnail = (collection: SanitizedCollectionConfig, doc: Record<string, unknown>): string | false => {
const {
upload: {
staticURL,
adminThumbnail,
},
} = collection;
const {
mimeType,
sizes,
filename,
url,
} = doc;
const { serverURL } = useConfig();
if (isImage(mimeType as string)) {
if (typeof adminThumbnail === 'undefined' && url) {
return url as string;
}
if (typeof adminThumbnail === 'function') {
const thumbnailURL = adminThumbnail({ doc });
if (absoluteURLPattern.test(thumbnailURL) || base64Pattern.test(thumbnailURL)) {
return thumbnailURL;
}
return `${serverURL}${thumbnailURL}`;
}
if (sizes?.[adminThumbnail]?.url) {
return sizes[adminThumbnail].url;
}
if (sizes?.[adminThumbnail]?.filename) {
return `${serverURL}${staticURL}/${sizes[adminThumbnail].filename}`;
}
return `${serverURL}${staticURL}/${filename}`;
}
return false;
};
export default useThumbnail;