import { useEffect, useRef, useState } from 'react' // import { Link } from 'react-router-dom' import { useRecoilValue } from 'recoil' import { sessionStore } from '../../stores' import { generateRecoveryKit } from '../../lib/account-settings' import Download from '../icons/Download' type Props = { handleToggleModal: () => void } const RecoveryKitModal = ({ handleToggleModal }: Props) => { const session = useRecoilValue(sessionStore) const [fileURL, setFileURL] = useState(null) const downloadLinkRef = useRef(null); const prepareRecoveryKitDownload = async () => { const recoveryKit = await generateRecoveryKit() const data = new Blob([recoveryKit], { type: 'text/plain' }) // If we are replacing a previously generated file we need to // manually revoke the object URL to avoid memory leaks. if (fileURL !== null) { window.URL.revokeObjectURL(fileURL) } const localFileURL = window.URL.createObjectURL(data) setFileURL(localFileURL) } const useMountEffect = () => useEffect(() => { prepareRecoveryKitDownload(); }, []); useMountEffect(); useEffect(() => { if (downloadLinkRef && fileURL) { downloadLinkRef.current.setAttribute( "download", `ODD-RecoveryKit-${session.username.trimmed}.txt` ); downloadLinkRef.current.href = fileURL; } }, [downloadLinkRef, fileURL]); return ( <> <input type="checkbox" id="recovery-kit-modal" defaultChecked className="modal-toggle" /> <div className="modal !z-max"> <div className="modal-box w-narrowModal sm:w-wideModal relative text-center sm:!pr-11 sm:!pb-11 sm:!pl-11"> <button className="btn btn-xs btn-circle absolute right-2 top-2" onClick={handleToggleModal} > ✕ </button> <div> {!fileURL ? ( <> <h3 className="mb-7 text-base"> Creating your recovery kit... </h3> <div className="flex items-center justify-center text-base-content"> <span className="rounded-lg border-t-2 border-l-2 border-base-content w-4 h-4 inline-block animate-spin mr-2" /> </div> </> ) : ( <> <h3 className="mb-7 text-base"> Your recovery kit has been created! </h3> <div className="text-left mb-6"> <p className="mb-2"> Please store it somewhere safe for two reasons: </p> <ol className="list-decimal mb-2 pl-6"> <li> <strong>It is powerful:</strong> Anyone with this recovery kit will have access to all of your private data. </li> <li> <strong>It's your backup plan:</strong> If you lose access to your connected devices, this kit will help you recover your private data. </li> </ol> <p> So, keep it somewhere you keep things you don't want to lose or have stolen. </p> </div> <a className="btn btn-primary w-[227px] gap-2" ref={downloadLinkRef} > <Download /> Download recovery kit </a> </> )} </div> </div> </div> </> ); } export default RecoveryKitModal