import { useState, useEffect } from "react"; import { Button, Flex, Label } from "theme-ui"; import Modal from "../components/Modal"; import TokenSettings from "../components/token/TokenSettings"; import TokenPreview from "../components/token/TokenPreview"; import LoadingOverlay from "../components/LoadingOverlay"; import { useTokenData } from "../contexts/TokenDataContext"; import { isEmpty } from "../helpers/shared"; import useResponsiveLayout from "../hooks/useResponsiveLayout"; import { Token } from "../tokens"; type EditModalProps = { isOpen: boolean, onDone: () => void, tokenId: string, }; function EditTokenModal({ isOpen, onDone, tokenId }: EditModalProps) { const { updateToken, getTokenFromDB } = useTokenData(); const [isLoading, setIsLoading] = useState(true); const [token, setToken] = useState(); useEffect(() => { async function loadToken() { setIsLoading(true); setToken(await getTokenFromDB(tokenId)); setIsLoading(false); } if (isOpen && tokenId) { loadToken(); } else { setToken(undefined); } }, [isOpen, tokenId, getTokenFromDB]); function handleClose() { setTokenSettingChanges({}); onDone(); } async function handleSave() { await applyTokenChanges(); onDone(); } const [tokenSettingChanges, setTokenSettingChanges] = useState({}); function handleTokenSettingsChange(key: any, value: any) { setTokenSettingChanges((prevChanges: any) => ({ ...prevChanges, [key]: value, })); } async function applyTokenChanges() { if (token && !isEmpty(tokenSettingChanges)) { // Ensure size value is positive let verifiedChanges = { ...tokenSettingChanges }; if ("defaultSize" in verifiedChanges) { verifiedChanges.defaultSize = verifiedChanges.defaultSize || 1; } await updateToken(token.id, verifiedChanges); setTokenSettingChanges({}); } } const selectedTokenWithChanges = { ...token, ...tokenSettingChanges, }; const layout = useResponsiveLayout(); return ( {isLoading || !token ? ( ) : ( )} ); } export default EditTokenModal;