import generatePassphrase, { PassphraseProps } from "@/utils/generators/generatePassphrase"; import infoLabel from "@/utils/infoLabel"; import { Checkbox, Field, Input, InputOnChangeData } from "@fluentui/react-components"; import { ReactElement } from "react"; import GeneratorForm from "../components/GeneratorForm"; import { GeneratorProps } from "../Page"; import { useStyles } from "./PassphraseSection.styles"; export default function PassphraseSection(props: GeneratorProps): ReactElement { const [wordCount, private_setWordCount] = useState(2); const [swapCharacters, setSwapCharacters] = useState(false); const [separate, setSeparate] = useState(true); const [separator, setSeparator] = useState(""); const [allowRepeating, setAllowRepeating] = useState(false); const [randomizeCase, setRandomizeCase] = useState(false); const config = useMemo(() => ({ wordCount: wordCount ?? 2, allowRepeating, swapCharacters, randomizeCase, separator: separate ? (separator ? separator : " ") : "" }), [wordCount, allowRepeating, swapCharacters, randomizeCase, separate, separator]); const cls = useStyles(); const setWordCount = useCallback((_: any, e: InputOnChangeData) => { const n = parseInt(e.value ?? ""); private_setWordCount(isNaN(n) || n < 1 ? null : Math.min(n, 100)); }, []); const saveConfiguration = useCallback( async () => await browser.storage.sync.set({ AdvancedPassphraseOptions: config }), [config] ); const generate = useCallback((count: number) => { const passwords: string[] = []; for (let i = 0; i < count; i++) passwords.push(generatePassphrase(config)); props.onGenerated(passwords); }, [config, props.onGenerated]); useEffect(() => { browser.storage.sync.get("AdvancedPassphraseOptions").then(({ AdvancedPassphraseOptions }) => { if (!AdvancedPassphraseOptions) return; private_setWordCount(AdvancedPassphraseOptions.wordCount ?? 2); setAllowRepeating(AdvancedPassphraseOptions.allowRepeating); setSwapCharacters(AdvancedPassphraseOptions.swapCharacters); setRandomizeCase(AdvancedPassphraseOptions.randomizeCase); setSeparate(!!AdvancedPassphraseOptions.separator); setSeparator(AdvancedPassphraseOptions.separator ?? ""); }); }, []); return (
setSwapCharacters(e.checked as boolean) } /> setRandomizeCase(e.checked as boolean) } /> setAllowRepeating(e.checked as boolean) } />
setSeparate(e.checked as boolean) } /> setSeparator(e.value) } />
); }