import React, { useState } from "react"; import { Dialog } from "../../packages/excalidraw/components/Dialog"; import { Island } from "../../packages/excalidraw/components/Island"; import { TextField } from "../../packages/excalidraw/components/TextField"; import { FilledButton } from "../../packages/excalidraw/components/FilledButton"; import { useAtom } from "jotai"; import { storageConfigAtom } from "../app-jotai"; export type StorageType = "default" | "kv" | "s3" | "indexed-db"; const StorageSettingsDialog = ({ onClose }: { onClose: () => void }) => { const [config, setConfig] = useAtom(storageConfigAtom); const [storageType, setStorageType] = useState(config.type); // Local state for form inputs const [kvUrl, setKvUrl] = useState(config.kvUrl || ""); const [kvApiToken, setKvApiToken] = useState(config.kvApiToken || ""); const [s3AccessKeyId, setS3AccessKeyId] = useState( config.s3AccessKeyId || "", ); const [s3SecretAccessKey, setS3SecretAccessKey] = useState( config.s3SecretAccessKey || "", ); const [s3Region, setS3Region] = useState(config.s3Region || ""); const [s3BucketName, setS3BucketName] = useState(config.s3BucketName || ""); const handleSave = () => { setConfig({ type: storageType, kvUrl, kvApiToken, s3AccessKeyId, s3SecretAccessKey, s3Region, s3BucketName, }); onClose(); }; const renderForm = () => { switch (storageType) { case "kv": return ( <> ); case "s3": return ( <> ); case "indexed-db": return (

Your canvases are stored securely in your browser's local database. They are not synced online.

); case "default": default: return (

Your data is stored on the default backend of this Excalidraw instance. This requires you to be logged in.

); } }; return (

Security Warning: Sensitive keys are stored only in your browser's session storage and are cleared when you close the tab.

{renderForm()}
); }; export default StorageSettingsDialog;