import { useState } from "react"; import { Button, Flex, Label, useThemeUI } from "theme-ui"; import SimpleBar from "simplebar-react"; import Modal from "../components/Modal"; import TokenSettings from "../components/token/TokenSettings"; import TokenPreview from "../components/token/TokenPreview"; import { isEmpty } from "../helpers/shared"; import useResponsiveLayout from "../hooks/useResponsiveLayout"; import { Token } from "../types/Token"; import { UpdateTokenEventHandler } from "../contexts/TokenDataContext"; type EditModalProps = { isOpen: boolean; onDone: () => void; token: Token; onUpdateToken: UpdateTokenEventHandler; }; function EditTokenModal({ isOpen, onDone, token, onUpdateToken, }: EditModalProps) { const { theme } = useThemeUI(); function handleClose() { setTokenSettingChanges({}); onDone(); } async function handleSave() { await applyTokenChanges(); onDone(); } const [tokenSettingChanges, setTokenSettingChanges] = useState< Partial >({}); // TODO: CHANGE MAP BACK? OR CHANGE THIS TO PARTIAL function handleTokenSettingsChange(key: string, value: Pick) { setTokenSettingChanges((prevChanges) => ({ ...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 onUpdateToken(token.id, verifiedChanges); setTokenSettingChanges({}); } } const selectedTokenWithChanges = { ...token, ...tokenSettingChanges, }; const layout = useResponsiveLayout(); if (!token) { return null; } return ( ); } export default EditTokenModal;