import { GeneratorOptions, useStorage } from "@/utils/storage"; import * as fui from "@fluentui/react-components"; import * as ic from "@fluentui/react-icons"; import React from "react"; import { useStyles } from "./QuickOptions.styles"; const QuickOptions: React.FC = ({ onChange }) => { const { extOptions, generatorOptions } = useStorage(); const [quickOpts, setOptions] = useState(generatorOptions); const checkedOptions = useMemo( () => Object.keys(quickOpts).filter(k => quickOpts[k as keyof GeneratorOptions] as boolean), [quickOpts] ); const onCheckedValueChange = useCallback((_: unknown, e: fui.MenuCheckedValueChangeData): void => { const opts: Partial> = {}; let keys = Object.keys(quickOpts).filter(i => i !== "Length") as (keyof Omit)[]; if (e.name === "include") keys = keys.filter(i => !i.startsWith("Exclude")); else keys = keys.filter(i => i.startsWith("Exclude")); for (const key of keys) opts[key] = e.checkedItems.includes(key); setOptions({ ...generatorOptions, ...quickOpts, ...opts }); }, [quickOpts]); useEffect(() => onChange(quickOpts), [onChange, quickOpts]); const IncludeIcon: ic.FluentIcon = ic.bundleIcon(ic.AddCircleFilled, ic.AddCircleRegular); const ExcludeIcon: ic.FluentIcon = ic.bundleIcon(ic.SubtractCircleFilled, ic.SubtractCircleRegular); const cls = useStyles(); return (
{ i18n.t("generator.options.title") }
setOptions({ ...quickOpts, Length: e.value }) } /> { quickOpts.Length }
}> { i18n.t("generator.options.include") } }> { i18n.t("settings.include.uppercase") } }> { i18n.t("settings.include.lowercase") } }> { i18n.t("settings.include.numeric") } }> { i18n.t("settings.include.special") } }> { i18n.t("generator.options.exclude") } { i18n.t("settings.exclude.similar") } { i18n.t("settings.exclude.ambiguous") } { i18n.t("settings.exclude.repeating.title") } } onClick={ () => setOptions(generatorOptions) } />
); }; export default QuickOptions; interface IProps { onChange: (value: GeneratorOptions) => void; }