fix(default): improve billing settings forms

This commit is contained in:
CaIon
2026-05-06 20:14:35 +08:00
parent 446a8420f5
commit dede1e2968
17 changed files with 1291 additions and 832 deletions
@@ -1,4 +1,5 @@
import * as z from 'zod'
import type { ChangeEvent } from 'react'
import type { Resolver } from 'react-hook-form'
import { zodResolver } from '@hookform/resolvers/zod'
import { useTranslation } from 'react-i18next'
@@ -25,9 +26,13 @@ const quotaSchema = z.object({
PreConsumedQuota: z.coerce.number().min(0),
QuotaForInviter: z.coerce.number().min(0),
QuotaForInvitee: z.coerce.number().min(0),
TopUpLink: z.string().url().optional().or(z.literal('')),
'general_setting.docs_link': z.string().url().optional().or(z.literal('')),
'quota_setting.enable_free_model_pre_consume': z.boolean(),
TopUpLink: z.string(),
general_setting: z.object({
docs_link: z.string(),
}),
quota_setting: z.object({
enable_free_model_pre_consume: z.boolean(),
}),
})
type QuotaFormValues = z.infer<typeof quotaSchema>
@@ -41,6 +46,13 @@ export function QuotaSettingsSection({
}: QuotaSettingsSectionProps) {
const { t } = useTranslation()
const updateOption = useUpdateOption()
const handleNumberChange =
(onChange: (value: number | string) => void) =>
(event: ChangeEvent<HTMLInputElement>) => {
onChange(
event.target.value === '' ? '' : event.currentTarget.valueAsNumber
)
}
const { form, handleSubmit, isDirty, isSubmitting } =
useSettingsForm<QuotaFormValues>({
@@ -79,8 +91,8 @@ export function QuotaSettingsSection({
<FormControl>
<Input
type='number'
value={field.value as number}
onChange={(e) => field.onChange(e.target.valueAsNumber)}
value={field.value ?? ''}
onChange={handleNumberChange(field.onChange)}
name={field.name}
onBlur={field.onBlur}
ref={field.ref}
@@ -103,8 +115,8 @@ export function QuotaSettingsSection({
<FormControl>
<Input
type='number'
value={field.value as number}
onChange={(e) => field.onChange(e.target.valueAsNumber)}
value={field.value ?? ''}
onChange={handleNumberChange(field.onChange)}
name={field.name}
onBlur={field.onBlur}
ref={field.ref}
@@ -127,8 +139,8 @@ export function QuotaSettingsSection({
<FormControl>
<Input
type='number'
value={field.value as number}
onChange={(e) => field.onChange(e.target.valueAsNumber)}
value={field.value ?? ''}
onChange={handleNumberChange(field.onChange)}
name={field.name}
onBlur={field.onBlur}
ref={field.ref}
@@ -151,8 +163,8 @@ export function QuotaSettingsSection({
<FormControl>
<Input
type='number'
value={field.value as number}
onChange={(e) => field.onChange(e.target.valueAsNumber)}
value={field.value ?? ''}
onChange={handleNumberChange(field.onChange)}
name={field.name}
onBlur={field.onBlur}
ref={field.ref}