import { Shuffle } from "lucide-react"; import { Fragment, useEffect, useState } from "react"; import { FormProvider, type UseFormReturn } from "react-hook-form"; import { useTranslation } from "react-i18next"; import { FormField, FormFieldItem, FormFieldLabel } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; import { Switch } from "@/components/ui/switch"; import type { MemShellFormSchema } from "@/types/schema"; export function OptionalClassFormField({ form, }: Readonly<{ form: UseFormReturn }>) { const { t } = useTranslation(["memshell", "common"]); const initialShellClassName = form.getValues("shellClassName") ?? ""; const initialInjectorClassName = form.getValues("injectorClassName") ?? ""; const [useRandomClassName, setUseRandomClassName] = useState( () => !(initialShellClassName?.trim() || initialInjectorClassName?.trim()), ); const [savedShellClassName, setSavedShellClassName] = useState( initialShellClassName, ); const [savedInjectorClassName, setSavedInjectorClassName] = useState( initialInjectorClassName, ); const shellClassName = form.watch("shellClassName"); const injectorClassName = form.watch("injectorClassName"); useEffect(() => { if (!useRandomClassName) { setSavedShellClassName(shellClassName ?? ""); } }, [shellClassName, useRandomClassName]); useEffect(() => { if (!useRandomClassName) { setSavedInjectorClassName(injectorClassName ?? ""); } }, [injectorClassName, useRandomClassName]); useEffect(() => { if ( useRandomClassName && (shellClassName?.trim() || injectorClassName?.trim()) ) { setUseRandomClassName(false); } }, [injectorClassName, shellClassName, useRandomClassName]); const handleToggleRandomClass = (checked: boolean) => { setUseRandomClassName(checked); if (checked) { setSavedShellClassName(form.getValues("shellClassName") ?? ""); setSavedInjectorClassName(form.getValues("injectorClassName") ?? ""); form.setValue("shellClassName", ""); form.setValue("injectorClassName", ""); } else { form.setValue("shellClassName", savedShellClassName ?? ""); form.setValue("injectorClassName", savedInjectorClassName ?? ""); } }; return (
{t("mainConfig.randomClassName")}
{!useRandomClassName && ( ( {t("mainConfig.shellClassName")} {t("common:optional")} )} /> )} {!useRandomClassName && ( ( {t("mainConfig.injectorClassName")} {t("common:optional")} )} /> )}
); }