// Copyright 2022 The Pigweed Authors // // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy of // the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the // License for the specific language governing permissions and limitations under // the License. import Button from '@mui/material/Button'; import {Alert} from '@mui/material'; import {useState, useRef} from 'react'; interface Props { onUpload: (db: string) => void } export default function BtnUploadDB({onUpload}: Props) { const [uploaded, setUploaded] = useState(false); const [error, setError] = useState(""); const uploadInputRef = useRef(null); if (uploaded) return (DB Loaded) return ( <> { const tokenCsv = await readFile(e.target.files![0]); try { onUpload(tokenCsv); setUploaded(true); setError(""); } catch (e: any) { if (e instanceof Error) setError(e.message); else setError("Error loading token database."); } }} /> {error && {error}} ) } function readFile(file: Blob): Promise { return new Promise((resolve, reject) => { if (!file) return resolve(''); const reader = new FileReader(); reader.onload = function (e) { resolve(String(e.target!.result)); }; reader.readAsText(file); }); }