import Uploader from "./uploader"; import { useCallback, useContext, useEffect, useMemo, useState } from "react"; import SearchImageAndVideo from "./search-unsplash"; import Tabs from "./tabs"; import Grid from "./grid"; import { CMSContext } from "../../cms-provider"; import type { AssetDescriptor } from "../../types"; export default function Modal({ isVideo, onClose, onImageSelected, }: { isVideo?: boolean; onClose: () => void; onImageSelected: (url: string) => void; }) { const { assetSource } = useContext(CMSContext); const [images, setImages] = useState<{ thumb: string; full: string }[]>([]); const [activeTab, setActiveTab] = useState<"Public" | "Upload">("Public"); const availableTabs = useMemo(() => { return assetSource?.uploadAsset ? (["Public", "Upload"] as ("Public" | "Upload")[]) : ([ "Public", ] as ("Public" | "Upload")[]); }, [assetSource]); // useEffect(() => { // const result = import.meta.glob("/public/*"); // setImages( // Object.keys(result).map((key) => { // const path = key.replace(/\/public/, ""); // return { thumb: path, full: path }; // }) // ); // }, []); const fetchImages = useCallback( async (payload?: AssetDescriptor) => { if (payload) { setImages((current) => [ ...current, { thumb: payload.thumbUrl ?? payload.url, full: payload.url }, ]); return; } if (!assetSource) { setImages([]); return; } const uploads = await assetSource.listAssets(); setImages( uploads.map((upload) => ({ thumb: upload.thumbUrl ?? upload.url, full: upload.url, })) ); }, [assetSource] ); useEffect(() => { if (assetSource) { fetchImages(); } }, [assetSource, fetchImages]); useEffect(() => { if (!assetSource && activeTab === "Upload") { setActiveTab("Public"); } }, [assetSource, activeTab]); return (
{}} >

Select Image

{activeTab === "Upload" ? ( assetSource?.uploadAsset ? ( ) : (

Uploading is disabled. Provide an assetSource.uploadAsset implementation to enable uploads.

) ) : ( <> { onImageSelected(_); onClose(); }} /> )}
); }