import { useNavigate } from 'react-router-dom' import { RECOVERY_STATES } from '../../../lib/auth/account' import RightArrow from '../../icons/RightArrow' import Upload from '../../icons/Upload' type Props = { handleFileInput: (files: FileList) => Promise<void>; state: RECOVERY_STATES } const RecoveryKitButton = ({ handleFileInput, state }: Props) => { const navigate = useNavigate() const buttonData = { [RECOVERY_STATES.Processing]: { text: 'Processing recovery kit...', props: { disabled: state === RECOVERY_STATES.Processing, // eslint-disable-next-line @typescript-eslint/no-empty-function on_click: () => {}, } }, [RECOVERY_STATES.Done]: { text: 'Continue to the app', props: { on_click: () => navigate('/') } } } if (state === RECOVERY_STATES.Ready || state === RECOVERY_STATES.Error) { return ( <> <label htmlFor="upload-recovery-kit" className="btn btn-primary !btn-lg !h-[56px] !min-h-0 w-fit gap-2" > <Upload /> Upload your recovery kit </label> <input onChange={(e) => handleFileInput(e.target.files)} id="upload-recovery-kit" type="file" accept=".txt" className="hidden" /> </> ) } const { on_click, ...props } = buttonData[state].props return ( <button className="btn btn-primary !btn-lg !h-[56px] !min-h-0 w-fit gap-2" {...props} onClick={on_click} > {state === RECOVERY_STATES.Processing && ( <span className="animate-spin ease-linear rounded-full border-2 border-t-2 border-t-orange-500 border-neutral-900 w-[16px] h-[16px] text-sm" /> )} {buttonData[state].text} {state === RECOVERY_STATES.Done && <RightArrow />} </button> ); } export default RecoveryKitButton;