feat: server transfer rotation

This commit is contained in:
naiba
2026-05-25 10:15:24 +00:00
parent 142fc19469
commit b23a6c0be1
60 changed files with 4488 additions and 1359 deletions
+39 -26
View File
@@ -46,27 +46,28 @@ const natFormSchema = z.object({
domain: z.string(),
})
type NatFormData = z.infer<typeof natFormSchema>
type NatFormInput = z.input<typeof natFormSchema>
type NatFormData = z.output<typeof natFormSchema>
export const NATCard: React.FC<NATCardProps> = ({ data, mutate }) => {
const { t } = useTranslation()
const form = useForm<NatFormData>({
resolver: zodResolver(natFormSchema as any),
const form = useForm<NatFormInput, unknown, NatFormData>({
resolver: zodResolver(natFormSchema),
defaultValues: data
? {
name: data.name ?? "",
enabled: (data as any).enabled ?? false,
server_id: data.server_id ?? 0,
host: data.host ?? "",
domain: data.domain ?? "",
}
name: data.name ?? "",
enabled: data.enabled ?? false,
server_id: data.server_id ?? 0,
host: data.host ?? "",
domain: data.domain ?? "",
}
: {
name: "",
enabled: false,
server_id: 0,
host: "",
domain: "",
},
name: "",
enabled: false,
server_id: 0,
host: "",
domain: "",
},
resetOptions: {
keepDefaultValues: false,
},
@@ -76,7 +77,11 @@ export const NATCard: React.FC<NATCardProps> = ({ data, mutate }) => {
const onSubmit = async (values: NatFormData) => {
try {
data?.id ? await updateNAT(data.id, values) : await createNAT(values)
if (data?.id) {
await updateNAT(data.id, values)
} else {
await createNAT(values)
}
} catch (e) {
console.error(e)
toast(t("Error"), {
@@ -119,15 +124,23 @@ export const NATCard: React.FC<NATCardProps> = ({ data, mutate }) => {
<FormField
control={form.control}
name="server_id"
render={({ field }) => (
<FormItem>
<FormLabel>{t("Server")} ID</FormLabel>
<FormControl>
<Input type="number" placeholder="1" {...field} />
</FormControl>
<FormMessage />
</FormItem>
)}
render={({ field }) => {
const { value, ...fieldProps } = field
return (
<FormItem>
<FormLabel>{t("Server")} ID</FormLabel>
<FormControl>
<Input
type="number"
placeholder="1"
value={String(value ?? "")}
{...fieldProps}
/>
</FormControl>
<FormMessage />
</FormItem>
)
}}
/>
<FormField
control={form.control}
@@ -169,7 +182,7 @@ export const NATCard: React.FC<NATCardProps> = ({ data, mutate }) => {
<FormControl>
<div className="flex items-center gap-2">
<Checkbox
checked={field.value}
checked={field.value === true}
onCheckedChange={field.onChange}
/>
<Label className="text-sm">{t("Enable")}</Label>