import React, { useState, useContext } from "react"; import { Label, Flex, Button, useColorMode, Checkbox, Slider, Divider, } from "theme-ui"; import Modal from "../components/Modal"; import AuthContext from "../contexts/AuthContext"; import DatabaseContext from "../contexts/DatabaseContext"; import useSetting from "../helpers/useSetting"; import ConfirmModal from "./ConfirmModal"; function SettingsModal({ isOpen, onRequestClose }) { const { database } = useContext(DatabaseContext); const { userId } = useContext(AuthContext); const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false); const [labelSize, setLabelSize] = useSetting("map.labelSize"); async function handleEraseAllData() { localStorage.clear(); await database.delete(); window.location.reload(); } async function handleClearCache() { // Clear saved settings localStorage.clear(); // Clear map cache await database.table("maps").where("owner").notEqual(userId).delete(); // Find all other peoples tokens who aren't benig used in a map state and delete them const tokens = await database .table("tokens") .where("owner") .notEqual(userId) .toArray(); const states = await database.table("states").toArray(); for (let token of tokens) { let inUse = false; for (let state of states) { for (let tokenState of Object.values(state.tokens)) { if (token.id === tokenState.tokenId) { inUse = true; } } } if (!inUse) { database.table("tokens").delete(token.id); } } window.location.reload(); } const [colorMode, setColorMode] = useColorMode(); return ( <> setIsDeleteModalOpen(false)} onConfirm={handleEraseAllData} label="Erase All Content?" description="This will remove all data including saved maps and tokens." confirmText="Erase" /> ); } export default SettingsModal;