gitscope
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/modules/hosts/dialogs/mutation/fields/mux-settings/index.tsx · master
Source
1 4056c66 Dawsh 1y ago import {
2 4056c66 Dawsh 1y ago CheckboxField,
3 4056c66 Dawsh 1y ago FormControl,
4 4056c66 Dawsh 1y ago FormField,
5 4056c66 Dawsh 1y ago FormItem,
6 4056c66 Dawsh 1y ago FormLabel,
7 4056c66 Dawsh 1y ago Input,
8 4056c66 Dawsh 1y ago Switch,
9 4056c66 Dawsh 1y ago } from "@marzneshin/common/components";
10 4056c66 Dawsh 1y ago import { useFormContext, useWatch } from "react-hook-form";
11 4056c66 Dawsh 1y ago import { useTranslation } from "react-i18next";
12 4056c66 Dawsh 1y ago import { ProtocolField } from "./protocol";
13 4056c66 Dawsh 1y ago import { XudpProxy443Field } from "./xudp-proxy-443";
14 4056c66 Dawsh 1y ago
15 4056c66 Dawsh 1y ago export const MuxSettingsFields = () => {
16 4056c66 Dawsh 1y ago const { t } = useTranslation();
17 4056c66 Dawsh 1y ago const form = useFormContext();
18 4056c66 Dawsh 1y ago const mux_settings = useWatch({ name: "mux_settings" });
19 4056c66 Dawsh 1y ago const protocol = useWatch({ name: "mux_settings.protocol" });
20 4056c66 Dawsh 1y ago const isMuxCool = protocol === "mux_cool";
21 4056c66 Dawsh 1y ago const isMuxSettingsDisabled = mux_settings === null;
22 4056c66 Dawsh 1y ago
23 4056c66 Dawsh 1y ago const updateFieldValue = (path: string, value: any) => {
24 4056c66 Dawsh 1y ago form.setValue(path, value === "" ? null : value, {
25 4056c66 Dawsh 1y ago shouldDirty: true,
26 4056c66 Dawsh 1y ago shouldValidate: true,
27 4056c66 Dawsh 1y ago });
28 4056c66 Dawsh 1y ago };
29 4056c66 Dawsh 1y ago
30 4056c66 Dawsh 1y ago return (
31 4056c66 Dawsh 1y ago <FormField
32 4056c66 Dawsh 1y ago control={form.control}
33 4056c66 Dawsh 1y ago name="mux_settings"
34 4056c66 Dawsh 1y ago render={() => (
35 4056c66 Dawsh 1y ago <>
36 4056c66 Dawsh 1y ago <FormLabel className="flex items-center justify-between">
37 4056c66 Dawsh 1y ago {t("page.hosts.mux-settings")}
38 4056c66 Dawsh 1y ago <Switch
39 4056c66 Dawsh 1y ago checked={!isMuxSettingsDisabled}
40 4056c66 Dawsh 1y ago onCheckedChange={(checked) =>
41 4056c66 Dawsh 1y ago form.setValue(
42 4056c66 Dawsh 1y ago "mux_settings",
43 4056c66 Dawsh 1y ago checked
44 4056c66 Dawsh 1y ago ? {
45 4056c66 Dawsh 1y ago protocol: "mux_cool",
46 4056c66 Dawsh 1y ago mux_cool_settings: {
47 4056c66 Dawsh 1y ago xudp_proxy_443: "reject",
48 4056c66 Dawsh 1y ago },
49 4056c66 Dawsh 1y ago }
50 4056c66 Dawsh 1y ago : null,
51 4056c66 Dawsh 1y ago )
52 4056c66 Dawsh 1y ago }
53 4056c66 Dawsh 1y ago />
54 4056c66 Dawsh 1y ago </FormLabel>
55 4056c66 Dawsh 1y ago
56 4056c66 Dawsh 1y ago {!isMuxSettingsDisabled && (
57 4056c66 Dawsh 1y ago <>
58 4056c66 Dawsh 1y ago <ProtocolField updater={updateFieldValue} />
59 4056c66 Dawsh 1y ago <FormItem className="my-2 w-full">
60 4056c66 Dawsh 1y ago {isMuxCool ? (
61 4056c66 Dawsh 1y ago <div className="grid grid-cols-2 w-full gap-3">
62 4056c66 Dawsh 1y ago {[
63 4056c66 Dawsh 1y ago "concurrency",
64 4056c66 Dawsh 1y ago "xudp_concurrency",
65 4056c66 Dawsh 1y ago ].map((fieldName) => (
66 4056c66 Dawsh 1y ago <FormField
67 4056c66 Dawsh 1y ago key={fieldName}
68 4056c66 Dawsh 1y ago name={`mux_settings.mux_cool_settings.${fieldName}`}
69 4056c66 Dawsh 1y ago render={({ field }) => (
70 4056c66 Dawsh 1y ago <FormItem className="w-full">
71 4056c66 Dawsh 1y ago <FormLabel className="flex items-center justify-between capitalize">
72 4056c66 Dawsh 1y ago {t(
73 4056c66 Dawsh 1y ago `${fieldName.replace(/_/g, " ")}`,
74 4056c66 Dawsh 1y ago )}
75 4056c66 Dawsh 1y ago </FormLabel>
76 4056c66 Dawsh 1y ago <FormControl>
77 4056c66 Dawsh 1y ago <Input
78 4056c66 Dawsh 1y ago value={
79 4056c66 Dawsh 1y ago field.value
80 4056c66 Dawsh 1y ago }
81 4056c66 Dawsh 1y ago type="number"
82 4056c66 Dawsh 1y ago onChange={(e) =>
83 4056c66 Dawsh 1y ago updateFieldValue(
84 4056c66 Dawsh 1y ago `mux_settings.mux_cool_settings.${fieldName}`,
85 4056c66 Dawsh 1y ago e.target
86 4056c66 Dawsh 1y ago .value ===
87 4056c66 Dawsh 1y ago ""
88 4056c66 Dawsh 1y ago ? null
89 4056c66 Dawsh 1y ago : Number.parseInt(
90 4056c66 Dawsh 1y ago e
91 4056c66 Dawsh 1y ago .target
92 4056c66 Dawsh 1y ago .value,
93 4056c66 Dawsh 1y ago ),
94 4056c66 Dawsh 1y ago )
95 4056c66 Dawsh 1y ago }
96 4056c66 Dawsh 1y ago className="w-full"
97 4056c66 Dawsh 1y ago />
98 4056c66 Dawsh 1y ago </FormControl>
99 4056c66 Dawsh 1y ago </FormItem>
100 4056c66 Dawsh 1y ago )}
101 4056c66 Dawsh 1y ago />
102 4056c66 Dawsh 1y ago ))}
103 4056c66 Dawsh 1y ago <XudpProxy443Field
104 4056c66 Dawsh 1y ago updater={updateFieldValue}
105 4056c66 Dawsh 1y ago />
106 4056c66 Dawsh 1y ago </div>
107 4056c66 Dawsh 1y ago ) : (
108 4056c66 Dawsh 1y ago <div className="flex flex-col w-full">
109 4056c66 Dawsh 1y ago <div className="grid grid-cols-2 gap-3 w-full">
110 4056c66 Dawsh 1y ago {[
111 4056c66 Dawsh 1y ago "max_connections",
112 4056c66 Dawsh 1y ago "max_streams",
113 4056c66 Dawsh 1y ago "min_streams",
114 4056c66 Dawsh 1y ago ].map((fieldName) => (
115 4056c66 Dawsh 1y ago <FormField
116 4056c66 Dawsh 1y ago key={fieldName}
117 4056c66 Dawsh 1y ago name={`mux_settings.sing_box_mux_settings.${fieldName}`}
118 4056c66 Dawsh 1y ago render={({ field }) => (
119 4056c66 Dawsh 1y ago <FormItem>
120 4056c66 Dawsh 1y ago <FormLabel className="flex items-center justify-between capitalize">
121 4056c66 Dawsh 1y ago {t(
122 4056c66 Dawsh 1y ago `${fieldName.replace(/_/g, " ")}`,
123 4056c66 Dawsh 1y ago )}
124 4056c66 Dawsh 1y ago </FormLabel>
125 4056c66 Dawsh 1y ago <FormControl>
126 4056c66 Dawsh 1y ago <Input
127 4056c66 Dawsh 1y ago value={
128 4056c66 Dawsh 1y ago field.value
129 4056c66 Dawsh 1y ago }
130 4056c66 Dawsh 1y ago type="number"
131 4056c66 Dawsh 1y ago onChange={(
132 4056c66 Dawsh 1y ago e,
133 4056c66 Dawsh 1y ago ) =>
134 4056c66 Dawsh 1y ago updateFieldValue(
135 4056c66 Dawsh 1y ago `mux_settings.sing_box_mux_settings.${fieldName}`,
136 4056c66 Dawsh 1y ago e
137 4056c66 Dawsh 1y ago .target
138 4056c66 Dawsh 1y ago .value ===
139 4056c66 Dawsh 1y ago ""
140 4056c66 Dawsh 1y ago ? null
141 4056c66 Dawsh 1y ago : Number.parseInt(
142 4056c66 Dawsh 1y ago e
143 4056c66 Dawsh 1y ago .target
144 4056c66 Dawsh 1y ago .value,
145 4056c66 Dawsh 1y ago ),
146 4056c66 Dawsh 1y ago )
147 4056c66 Dawsh 1y ago }
148 4056c66 Dawsh 1y ago className="w-full"
149 4056c66 Dawsh 1y ago />
150 4056c66 Dawsh 1y ago </FormControl>
151 4056c66 Dawsh 1y ago </FormItem>
152 4056c66 Dawsh 1y ago )}
153 4056c66 Dawsh 1y ago />
154 4056c66 Dawsh 1y ago ))}
155 4056c66 Dawsh 1y ago </div>
156 4056c66 Dawsh 1y ago <CheckboxField
157 4056c66 Dawsh 1y ago name="mux_settings.sing_box_mux_settings.padding"
158 4056c66 Dawsh 1y ago label={t("page.hosts.padding")}
159 4056c66 Dawsh 1y ago />
160 4056c66 Dawsh 1y ago </div>
161 4056c66 Dawsh 1y ago )}
162 4056c66 Dawsh 1y ago </FormItem>
163 4056c66 Dawsh 1y ago </>
164 4056c66 Dawsh 1y ago )}
165 4056c66 Dawsh 1y ago </>
166 4056c66 Dawsh 1y ago )}
167 4056c66 Dawsh 1y ago />
168 4056c66 Dawsh 1y ago );
169 4056c66 Dawsh 1y ago };