import { absolutifyLink } from "../helpers/utils"; import { getResourceUrl } from "../utils/resource"; import SquareDiv from "./common/SquareDiv"; import showPreviewImageDialog from "./PreviewImageDialog"; import MemoResource from "./MemoResource"; import "../less/memo-resources.less"; interface Props { resourceList: Resource[]; className?: string; } const getDefaultProps = (): Props => { return { className: "", resourceList: [], }; }; const MemoResources: React.FC = (props: Props) => { const { className, resourceList } = { ...getDefaultProps(), ...props, }; const availableResourceList = resourceList.filter((resource) => resource.type.startsWith("image") || resource.type.startsWith("video")); const otherResourceList = resourceList.filter((resource) => !availableResourceList.includes(resource)); const imgUrls = availableResourceList .filter((resource) => resource.type.startsWith("image")) .map((resource) => { return getResourceUrl(resource); }); const handleImageClick = (imgUrl: string) => { const index = imgUrls.findIndex((url) => url === imgUrl); showPreviewImageDialog(imgUrls, index); }; return ( <>
{availableResourceList.length > 0 && (
{availableResourceList.map((resource) => { const url = getResourceUrl(resource); if (resource.type.startsWith("image")) { return ( handleImageClick(url)} decoding="async" loading="lazy" /> ); } else if (resource.type.startsWith("video")) { return ( ); } else { return null; } })}
)}
{otherResourceList.length > 0 && (
{otherResourceList.map((resource) => { return ; })}
)} ); }; export default MemoResources;