| 1 |
4056c66 |
Dawsh |
1y ago |
import { |
| 2 |
4056c66 |
Dawsh |
1y ago |
FormControl, |
| 3 |
4056c66 |
Dawsh |
1y ago |
FormField, |
| 4 |
4056c66 |
Dawsh |
1y ago |
FormItem, |
| 5 |
4056c66 |
Dawsh |
1y ago |
FormLabel, |
| 6 |
4056c66 |
Dawsh |
1y ago |
Input, |
| 7 |
4056c66 |
Dawsh |
1y ago |
Switch, |
| 8 |
4056c66 |
Dawsh |
1y ago |
} from "@marzneshin/common/components"; |
| 9 |
4056c66 |
Dawsh |
1y ago |
import { useFormContext, useWatch } from "react-hook-form"; |
| 10 |
4056c66 |
Dawsh |
1y ago |
import { useTranslation } from "react-i18next"; |
| 11 |
4056c66 |
Dawsh |
1y ago |
|
| 12 |
4056c66 |
Dawsh |
1y ago |
export const SplitHttpXmuxFields = () => { |
| 13 |
4056c66 |
Dawsh |
1y ago |
const { t } = useTranslation(); |
| 14 |
4056c66 |
Dawsh |
1y ago |
const form = useFormContext(); |
| 15 |
4056c66 |
Dawsh |
1y ago |
const xmux = useWatch({ name: "splithttp_settings.xmux" }); |
| 16 |
4056c66 |
Dawsh |
1y ago |
const isXMuxDisabled = xmux === null; |
| 17 |
4056c66 |
Dawsh |
1y ago |
|
| 18 |
4056c66 |
Dawsh |
1y ago |
const updateFieldValue = (path: string, value: any) => { |
| 19 |
4056c66 |
Dawsh |
1y ago |
form.setValue(path, value === "" ? null : value, { |
| 20 |
4056c66 |
Dawsh |
1y ago |
shouldDirty: true, |
| 21 |
4056c66 |
Dawsh |
1y ago |
shouldValidate: true, |
| 22 |
4056c66 |
Dawsh |
1y ago |
}); |
| 23 |
4056c66 |
Dawsh |
1y ago |
}; |
| 24 |
4056c66 |
Dawsh |
1y ago |
|
| 25 |
4056c66 |
Dawsh |
1y ago |
return ( |
| 26 |
4056c66 |
Dawsh |
1y ago |
<div> |
| 27 |
4056c66 |
Dawsh |
1y ago |
<FormLabel className="flex items-center justify-between"> |
| 28 |
4056c66 |
Dawsh |
1y ago |
{t("page.hosts.xmux-settings")} |
| 29 |
4056c66 |
Dawsh |
1y ago |
<Switch |
| 30 |
4056c66 |
Dawsh |
1y ago |
checked={!isXMuxDisabled} |
| 31 |
4056c66 |
Dawsh |
1y ago |
onCheckedChange={(checked) => |
| 32 |
4056c66 |
Dawsh |
1y ago |
form.setValue( |
| 33 |
4056c66 |
Dawsh |
1y ago |
"splithttp_settings.xmux", |
| 34 |
4056c66 |
Dawsh |
1y ago |
checked ? { xmux: {} } : null, |
| 35 |
4056c66 |
Dawsh |
1y ago |
) |
| 36 |
4056c66 |
Dawsh |
1y ago |
} |
| 37 |
4056c66 |
Dawsh |
1y ago |
/> |
| 38 |
4056c66 |
Dawsh |
1y ago |
</FormLabel> |
| 39 |
4056c66 |
Dawsh |
1y ago |
{!isXMuxDisabled && ( |
| 40 |
4056c66 |
Dawsh |
1y ago |
<div className="grid grid-cols-2 gap-3"> |
| 41 |
4056c66 |
Dawsh |
1y ago |
{[ |
| 42 |
4056c66 |
Dawsh |
1y ago |
"max_concurrency", |
| 43 |
4056c66 |
Dawsh |
1y ago |
"max_connections", |
| 44 |
4056c66 |
Dawsh |
1y ago |
"max_reuse_times", |
| 45 |
4056c66 |
Dawsh |
1y ago |
"max_lifetime", |
| 46 |
4056c66 |
Dawsh |
1y ago |
"max_request_times", |
| 47 |
4056c66 |
Dawsh |
1y ago |
].map((fieldName) => ( |
| 48 |
4056c66 |
Dawsh |
1y ago |
<FormField |
| 49 |
4056c66 |
Dawsh |
1y ago |
key={fieldName} |
| 50 |
4056c66 |
Dawsh |
1y ago |
name={`splithttp_settings.xmux.${fieldName}`} |
| 51 |
4056c66 |
Dawsh |
1y ago |
render={({ field }) => ( |
| 52 |
4056c66 |
Dawsh |
1y ago |
<FormItem> |
| 53 |
4056c66 |
Dawsh |
1y ago |
<FormLabel className="flex items-center justify-between capitalize"> |
| 54 |
4056c66 |
Dawsh |
1y ago |
{t(`${fieldName.replace(/_/g, " ")}`)} |
| 55 |
4056c66 |
Dawsh |
1y ago |
</FormLabel> |
| 56 |
4056c66 |
Dawsh |
1y ago |
<FormControl> |
| 57 |
4056c66 |
Dawsh |
1y ago |
<Input |
| 58 |
4056c66 |
Dawsh |
1y ago |
value={field.value} |
| 59 |
4056c66 |
Dawsh |
1y ago |
onChange={(e) => |
| 60 |
4056c66 |
Dawsh |
1y ago |
updateFieldValue( |
| 61 |
4056c66 |
Dawsh |
1y ago |
`splithttp_settings.xmux.${fieldName}`, |
| 62 |
4056c66 |
Dawsh |
1y ago |
e.target.value, |
| 63 |
4056c66 |
Dawsh |
1y ago |
) |
| 64 |
4056c66 |
Dawsh |
1y ago |
} |
| 65 |
4056c66 |
Dawsh |
1y ago |
className="w-full" |
| 66 |
4056c66 |
Dawsh |
1y ago |
/> |
| 67 |
4056c66 |
Dawsh |
1y ago |
</FormControl> |
| 68 |
4056c66 |
Dawsh |
1y ago |
</FormItem> |
| 69 |
4056c66 |
Dawsh |
1y ago |
)} |
| 70 |
4056c66 |
Dawsh |
1y ago |
/> |
| 71 |
4056c66 |
Dawsh |
1y ago |
))} |
| 72 |
4056c66 |
Dawsh |
1y ago |
<FormField |
| 73 |
4056c66 |
Dawsh |
1y ago |
key="keep_alive_period" |
| 74 |
4056c66 |
Dawsh |
1y ago |
name={`splithttp_settings.xmux.keep_alive_period`} |
| 75 |
4056c66 |
Dawsh |
1y ago |
render={({ field }) => ( |
| 76 |
4056c66 |
Dawsh |
1y ago |
<FormItem> |
| 77 |
4056c66 |
Dawsh |
1y ago |
<FormLabel className="flex items-center justify-between capitalize"> |
| 78 |
4056c66 |
Dawsh |
1y ago |
Keep Alive Period |
| 79 |
4056c66 |
Dawsh |
1y ago |
</FormLabel> |
| 80 |
4056c66 |
Dawsh |
1y ago |
<FormControl> |
| 81 |
4056c66 |
Dawsh |
1y ago |
<Input |
| 82 |
4056c66 |
Dawsh |
1y ago |
value={field.value} |
| 83 |
4056c66 |
Dawsh |
1y ago |
type="number" |
| 84 |
4056c66 |
Dawsh |
1y ago |
onChange={(e) => |
| 85 |
4056c66 |
Dawsh |
1y ago |
updateFieldValue( |
| 86 |
4056c66 |
Dawsh |
1y ago |
`splithttp_settings.xmux.keep_alive_period`, |
| 87 |
4056c66 |
Dawsh |
1y ago |
e.target.value === "" |
| 88 |
4056c66 |
Dawsh |
1y ago |
? null |
| 89 |
4056c66 |
Dawsh |
1y ago |
: Number.parseInt( |
| 90 |
4056c66 |
Dawsh |
1y ago |
e.target.value, |
| 91 |
4056c66 |
Dawsh |
1y ago |
), |
| 92 |
4056c66 |
Dawsh |
1y ago |
) |
| 93 |
4056c66 |
Dawsh |
1y ago |
} |
| 94 |
4056c66 |
Dawsh |
1y ago |
className="w-full" |
| 95 |
4056c66 |
Dawsh |
1y ago |
/> |
| 96 |
4056c66 |
Dawsh |
1y ago |
</FormControl> |
| 97 |
4056c66 |
Dawsh |
1y ago |
</FormItem> |
| 98 |
4056c66 |
Dawsh |
1y ago |
)} |
| 99 |
4056c66 |
Dawsh |
1y ago |
/> |
| 100 |
4056c66 |
Dawsh |
1y ago |
</div> |
| 101 |
4056c66 |
Dawsh |
1y ago |
)} |
| 102 |
4056c66 |
Dawsh |
1y ago |
</div> |
| 103 |
4056c66 |
Dawsh |
1y ago |
); |
| 104 |
4056c66 |
Dawsh |
1y ago |
}; |