import type { ChangeEvent } from "react" import { type Control, type Path, type UseControllerReturn, useController, } from "react-hook-form" import { ProductCode } from "@/lib/base" import { Field, FieldError, FieldGroup, FieldLabel, FieldLegend, } from "../ui/field" import { Input } from "../ui/input" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "../ui/select" export function ProductCodeField< T extends { code: string }, >(props: { control: Control; name: Path; code: ProductCode }) { const rt = useController(props) switch (props.code) { case ProductCode.Short: return case ProductCode.Long: return } return null } function ProductShortCode( props: UseControllerReturn, ) { const { field, fieldState } = props const params = new URLSearchParams(field.value) const mode = params.get("mode") || "quota" const live = params.get("live") || "0" const expire = params.get("expire") || "0" const setParams = (data: { mode?: string live?: string expire?: string }) => { const newParams = new URLSearchParams() newParams.set("mode", data.mode || mode) newParams.set("live", data.live || live) newParams.set("expire", data.expire || expire) console.log(newParams.toString()) field.onChange(newParams.toString()) } const onModeChange = (value: string) => { setParams({ mode: value }) } const onLiveChange = (e: ChangeEvent) => { let value = e.target.value || "0" if (value.length > 1 && value[0] === "0") { value = value.substring(1, value.length) } if (!/^([0-9]+)$/.test(value)) return setParams({ live: value }) } const onExpireChange = (e: ChangeEvent) => { let value = e.target.value || "0" if (value.length > 1 && value[0] === "0") { value = value.substring(1, value.length) } if (!/^([0-9]+)$/.test(value)) return setParams({ expire: value }) } return ( 短效套餐详情 套餐类型 有效期(分钟) {params.get("mode") === "time" && ( 过期时间(天) )} {fieldState.error && } ) } function ProductLongCode( props: UseControllerReturn, ) { const { field, fieldState } = props const params = new URLSearchParams(field.value) const mode = params.get("mode") || "quota" const live = params.get("live") || "0" const expire = params.get("expire") || "0" const setParams = (data: { mode?: string live?: string expire?: string }) => { const newParams = new URLSearchParams() newParams.set("mode", data.mode || mode) newParams.set("live", data.live || live) newParams.set("expire", data.expire || expire) console.log(newParams.toString()) field.onChange(newParams.toString()) } const onModeChange = (value: string) => { if (value === "quota") { setParams({ mode: value, expire: "0" }) } else { setParams({ mode: value }) } } const onLiveChange = (e: ChangeEvent) => { let value = e.target.value || "0" if (value.length > 1 && value[0] === "0") { value = value.substring(1, value.length) } if (!/^([0-9]+)$/.test(value)) return setParams({ live: value }) } const onExpireChange = (e: ChangeEvent) => { let value = e.target.value || "0" if (value.length > 1 && value[0] === "0") { value = value.substring(1, value.length) } if (!/^([0-9]+)$/.test(value)) return setParams({ expire: value }) } return ( 长效套餐详情 套餐类型 有效期(分钟) {params.get("mode") === "time" && ( 过期时间(天) )} {fieldState.error && } ) }