gitscope
← marzneshin / nightly / dashboard/src/modules/hosts/dialogs/mutation/fields/security.tsx
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/modules/hosts/dialogs/mutation/fields/security.tsx · TypeScript
Blame Raw
 1import {
 2    ClearableTextField,
 3    FormControl,
 4    FormField,
 5    FormItem,
 6    FormLabel,
 7    FormMessage,
 8    Select,
 9    SelectContent,
10    SelectItem,
11    SelectTrigger,
12    SelectValue,
13} from "@marzneshin/common/components";
14import { useEffect, useState } from "react";
15import { useFormContext } from "react-hook-form";
16import { useTranslation } from "react-i18next";
17import { AllowInsecureField, AlpnField, FingerprintField } from ".";
18
19export const SecurityFields = () => {
20    const { t } = useTranslation();
21    const form = useFormContext();
22    const security = form.watch().security;
23
24    const [extraSecurity, setExtraSecurity] = useState<boolean>(
25        ["tls", "inbound_default"].includes(security),
26    );
27    useEffect(() => {
28        setExtraSecurity(["tls", "inbound_default"].includes(security));
29    }, [security, setExtraSecurity]);
30
31    return (
32        <>
33            <FormField
34                control={form.control}
35                name="security"
36                render={({ field }) => (
37                    <FormItem>
38                        <FormLabel>{t("security")}</FormLabel>
39                        <Select
40                            onValueChange={field.onChange}
41                            defaultValue={field.value}
42                        >
43                            <FormControl>
44                                <SelectTrigger>
45                                    <SelectValue placeholder="Select a verified email to display" />
46                                </SelectTrigger>
47                            </FormControl>
48                            <SelectContent>
49                                <SelectItem value="none">None</SelectItem>
50                                <SelectItem value="tls">TLS</SelectItem>
51                                <SelectItem value="inbound_default">
52                                    Inbound Default
53                                </SelectItem>
54                            </SelectContent>
55                        </Select>
56                        <FormMessage />
57                    </FormItem>
58                )}
59            />
60            {extraSecurity && (
61                <div className="w-full flex flex-col gap-2">
62                    <ClearableTextField name="sni" label={t("sni")} />
63                    <div className="flex flex-row w-full gap-2">
64                        <AlpnField />
65                        <FingerprintField />
66                    </div>
67                    <AllowInsecureField />
68                </div>
69            )}
70        </>
71    );
72};