gitscope
← marzneshin / v0.3.0-alpha9 / dashboard/src/features/hosts/dialogs/mutation/fields/security.tsx
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/features/hosts/dialogs/mutation/fields/security.tsx · TypeScript
Blame Raw
 1
 2import {
 3    FormControl,
 4    FormField,
 5    FormItem,
 6    FormLabel,
 7    FormMessage,
 8    Select,
 9    SelectContent,
10    SelectItem,
11    SelectTrigger,
12    SelectValue
13} from "@marzneshin/components";
14import { useEffect, useState } from "react";
15import { useFormContext } from "react-hook-form";
16import { useTranslation } from "react-i18next";
17import { AllowInsecureField, AlpnField, FingerprintField, SniField } 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>(["tls", "inbound_default"].includes(security))
25    useEffect(() => {
26        setExtraSecurity(["tls", "inbound_default"].includes(security))
27    }, [security, setExtraSecurity])
28    return (
29        <>
30            <FormField
31                control={form.control}
32                name="security"
33                render={({ field }) => (
34                    <FormItem>
35                        <FormLabel>{t('security')}</FormLabel>
36                        <Select onValueChange={field.onChange} defaultValue={field.value}>
37                            <FormControl>
38                                <SelectTrigger>
39                                    <SelectValue placeholder="Select a verified email to display" />
40                                </SelectTrigger>
41                            </FormControl>
42                            <SelectContent>
43                                <SelectItem value="none">None</SelectItem>
44                                <SelectItem value="tls">TLS</SelectItem>
45                                <SelectItem value="inbound_default">Inbound Default</SelectItem>
46                            </SelectContent>
47                        </Select>
48                        <FormMessage />
49                    </FormItem>
50                )}
51            />
52            {extraSecurity &&
53                <>
54                    <SniField />
55                    <AlpnField />
56                    <FingerprintField />
57                    <AllowInsecureField />
58                </>
59            }
60        </>
61    )
62}