import { Button, Input, InputOnChangeData, MessageBar, MessageBarBody, MessageBarTitle, Text, Toast, ToastTitle, useToastController } from "@fluentui/react-components"; import { bundleIcon, Key24Regular, Save20Filled, Save20Regular } from "@fluentui/react-icons"; import { PropsWithChildren, ReactElement } from "react"; import { useStyles } from "./GeneratorForm.styles"; export default function GeneratorForm(props: GeneratorFormProps): ReactElement { const [passwordCount, private_setPasswordCount] = useState(5); const [error, setError] = useState(null); const toaster = useToastController(); const cls = useStyles(); const SaveIcon = bundleIcon(Save20Filled, Save20Regular); const setPasswordCount = useCallback((_: any, e: InputOnChangeData) => { const n = parseInt(e.value ?? "1"); private_setPasswordCount(isNaN(n) || n < 1 ? null : Math.min(n, 1000)); }, []); const onSubmit = useCallback((args: React.FormEvent) => { args.preventDefault(); try { setError(null); props.onGenerate(passwordCount ?? 1); } catch (ex) { setError((ex as Error).message); } }, [props.onGenerate, passwordCount]); const onSave = useCallback(async () => { props.onSave(); await browser.storage.sync.set({ AdvancedBulkCount: passwordCount ?? 5 }); toaster.dispatchToast( { i18n.t("advanced.saved_msg") } , { intent: "success", timeout: 1000 } ); }, [props.onSave, toaster, passwordCount]); useEffect(() => { browser.storage.sync.get("AdvancedBulkCount").then(({ AdvancedBulkCount }) => private_setPasswordCount(AdvancedBulkCount as number ?? 5) ); }, []); return (
{ props.children } { error && { error } }
x
); } export type GeneratorFormProps = PropsWithChildren & { onSave: () => void; onGenerate: (count: number) => void; };