🐛 fix(forms): Add step attribute to number inputs for better value control

This commit is contained in:
web@ppanel 2025-03-17 22:47:42 +07:00
parent aa1d42651d
commit b8f4f1e694
4 changed files with 20 additions and 5 deletions

View File

@ -307,6 +307,7 @@ export default function CouponForm<T extends Record<string, any>>({
<EnhancedInput
placeholder={t('form.countPlaceholder')}
type='number'
step={1}
{...field}
onValueChange={(value) => {
form.setValue(field.name, value);
@ -327,6 +328,7 @@ export default function CouponForm<T extends Record<string, any>>({
<EnhancedInput
placeholder={t('form.userLimitPlaceholder')}
type='number'
step={1}
{...field}
onValueChange={(value) => {
form.setValue(field.name, value);

View File

@ -319,7 +319,8 @@ export default function PaymentForm<T>({
}}
defaultValue={field.value}
value={field.value}
disabled={isEdit}
// @ts-expect-error
disabled={isEdit && Boolean(initialValues?.platform)}
>
<FormControl>
<SelectTrigger>

View File

@ -298,6 +298,7 @@ export default function SubscribeForm<T extends Record<string, any>>({
<EnhancedInput
placeholder={t('form.noLimit')}
type='number'
step={1}
{...field}
onValueChange={(value) => {
form.setValue(field.name, value);
@ -321,7 +322,8 @@ export default function SubscribeForm<T extends Record<string, any>>({
<EnhancedInput
placeholder={t('form.noLimit')}
type='number'
value={field.value === -1 ? 0 : field.value}
step={1}
value={field.value}
min={0}
onValueChange={(value) => {
form.setValue(field.name, value);
@ -343,6 +345,7 @@ export default function SubscribeForm<T extends Record<string, any>>({
<EnhancedInput
placeholder={t('form.noLimit')}
type='number'
step={1}
{...field}
onValueChange={(value) => {
form.setValue(field.name, value);
@ -545,6 +548,7 @@ export default function SubscribeForm<T extends Record<string, any>>({
{
name: 'quantity',
type: 'number',
step: 1,
min: 1,
suffix: unit_time && t(`form.${unit_time}`),
},
@ -569,7 +573,6 @@ export default function SubscribeForm<T extends Record<string, any>>({
name: 'price',
placeholder: t('form.discount_price'),
type: 'number',
min: 0,
formatInput: (value) => unitConversion('centsToDollars', value),
formatOutput: (value) => unitConversion('dollarsToCents', value),
internal: true,
@ -586,6 +589,7 @@ export default function SubscribeForm<T extends Record<string, any>>({
]}
value={field.value}
onChange={(value) => {
console.log(value);
form.setValue(field.name, value);
}}
/>

View File

@ -33,8 +33,16 @@ export function ObjectInput<T extends Record<string, any>>({
const [internalState, setInternalState] = useState<T>(value);
useEffect(() => {
setInternalState(value);
}, [value]);
let updatedState = { ...internalState, ...value };
fields.forEach((field) => {
if (field.calculateValue) {
updatedState = field.calculateValue(updatedState);
}
});
setInternalState(updatedState);
}, [value, fields]);
const updateField = (key: keyof T, fieldValue: string | number | boolean) => {
let updatedInternalState = { ...internalState, [key]: fieldValue };