gitscope
← marzneshin / v0.3.0 / 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
 1import {
 2	FormControl,
 3	FormField,
 4	FormItem,
 5	FormLabel,
 6	FormMessage,
 7	Select,
 8	SelectContent,
 9	SelectItem,
10	SelectTrigger,
11	SelectValue,
12} from "@marzneshin/components";
13import { useEffect, useState } from "react";
14import { useFormContext } from "react-hook-form";
15import { useTranslation } from "react-i18next";
16import { AllowInsecureField, AlpnField, FingerprintField, SniField } from ".";
17
18export const SecurityFields = () => {
19	const { t } = useTranslation();
20	const form = useFormContext();
21	const security = form.watch().security;
22
23	const [extraSecurity, setExtraSecurity] = useState<boolean>(
24		["tls", "inbound_default"].includes(security),
25	);
26	useEffect(() => {
27		setExtraSecurity(["tls", "inbound_default"].includes(security));
28	}, [security, setExtraSecurity]);
29	return (
30		<>
31			<FormField
32				control={form.control}
33				name="security"
34				render={({ field }) => (
35					<FormItem>
36						<FormLabel>{t("security")}</FormLabel>
37						<Select onValueChange={field.onChange} defaultValue={field.value}>
38							<FormControl>
39								<SelectTrigger>
40									<SelectValue placeholder="Select a verified email to display" />
41								</SelectTrigger>
42							</FormControl>
43							<SelectContent>
44								<SelectItem value="none">None</SelectItem>
45								<SelectItem value="tls">TLS</SelectItem>
46								<SelectItem value="inbound_default">Inbound Default</SelectItem>
47							</SelectContent>
48						</Select>
49						<FormMessage />
50					</FormItem>
51				)}
52			/>
53			{extraSecurity && (
54				<>
55					<SniField />
56					<div className="flex flex-row w-full gap-2">
57						<AlpnField />
58						<FingerprintField />
59					</div>
60					<AllowInsecureField />
61				</>
62			)}
63		</>
64	);
65};