refactor: update NumberInput usage to utilize defaultValue and improve field handling in forms

This commit is contained in:
Marco Pedone 2025-11-21 14:09:06 +01:00
parent 5df7e8cef8
commit 70e24b5abe
4 changed files with 59 additions and 47 deletions

View file

@ -152,6 +152,7 @@ export const NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(
className="h-1/2 rounded-l-none rounded-br-none border-input border-b-[0.5px] border-l-0 px-2 focus-visible:relative" className="h-1/2 rounded-l-none rounded-br-none border-input border-b-[0.5px] border-l-0 px-2 focus-visible:relative"
disabled={value === max} disabled={value === max}
onClick={handleIncrement} onClick={handleIncrement}
type="button"
variant="outline" variant="outline"
> >
<ChevronUp size={15} /> <ChevronUp size={15} />
@ -161,6 +162,7 @@ export const NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(
className="h-1/2 rounded-l-none rounded-tr-none border-input border-t-[0.5px] border-l-0 px-2 focus-visible:relative" className="h-1/2 rounded-l-none rounded-tr-none border-input border-t-[0.5px] border-l-0 px-2 focus-visible:relative"
disabled={value === min} disabled={value === min}
onClick={handleDecrement} onClick={handleDecrement}
type="button"
variant="outline" variant="outline"
> >
<ChevronDown size={15} /> <ChevronDown size={15} />

View file

@ -620,6 +620,7 @@ const StabileSection = () => {
<span className="font-semibold">Budget (da preferenze servizio):</span> <span className="font-semibold">Budget (da preferenze servizio):</span>
<NumberInput <NumberInput
allowNegative={false} allowNegative={false}
defaultValue={value}
min={0} min={0}
onValueChange={(val) => { onValueChange={(val) => {
if (val !== undefined) { if (val !== undefined) {
@ -628,7 +629,6 @@ const StabileSection = () => {
}} }}
stepper={50} stepper={50}
suffix=" €" suffix=" €"
value={value}
/> />
</div> </div>
<p> <p>

View file

@ -1004,7 +1004,10 @@ export const AnnuncioEditForm = ({ data }: { data: AnnunciWithMedia }) => {
<FormField <FormField
control={form.control} control={form.control}
name="prezzo" name="prezzo"
render={({ field }) => ( render={({ field }) => {
const { value, onChange, ...rest } = field;
return (
<FormItem> <FormItem>
<div className="flex flex-wrap items-center gap-x-2"> <div className="flex flex-wrap items-center gap-x-2">
<FormLabel htmlFor="prezzo">Prezzo</FormLabel>{" "} <FormLabel htmlFor="prezzo">Prezzo</FormLabel>{" "}
@ -1013,21 +1016,22 @@ export const AnnuncioEditForm = ({ data }: { data: AnnunciWithMedia }) => {
<FormControl> <FormControl>
<NumberInput <NumberInput
suffix=" €"
{...field}
decimalScale={2} decimalScale={2}
{...rest}
decimalSeparator="," decimalSeparator=","
defaultValue={Number(value) / 100}
fixedDecimalScale fixedDecimalScale
id="prezzo" id="prezzo"
min={0} min={0}
onValueChange={(v) => { onValueChange={(v) => {
field.onChange((v || 0) * 100); onChange((Number(v) || 0) * 100);
}} }}
value={Number(field.value) / 100} suffix=" €"
/> />
</FormControl> </FormControl>
</FormItem> </FormItem>
)} );
}}
/> />
} }
children2={ children2={

View file

@ -409,30 +409,36 @@ export const FormPrezzo = ({
<FormField <FormField
control={form.control} control={form.control}
name="prezzo_cent" name="prezzo_cent"
render={({ field }) => ( render={({ field }) => {
const { value, onChange, ...rest } = field;
return (
<FormItem> <FormItem>
<div className="flex flex-wrap items-center gap-x-2"> <div className="flex flex-wrap items-center gap-x-2">
<FormLabel htmlFor="prezzo">Prezzo</FormLabel> <FormLabel htmlFor="prezzo">Prezzo</FormLabel>{" "}
<FormMessage /> <FormMessage />
</div> </div>
<FormControl> <FormControl>
<NumberInput <NumberInput
suffix=" €"
{...field}
decimalScale={2} decimalScale={2}
{...rest}
decimalSeparator="," decimalSeparator=","
defaultValue={Number(value) / 100}
fixedDecimalScale fixedDecimalScale
id="prezzo" id="prezzo"
min={0} min={0}
onValueChange={(v) => { onValueChange={(v) => {
field.onChange((v || 0) * 100); onChange((Number(v) || 0) * 100);
}} }}
value={Number(field.value) / 100} suffix=" €"
/> />
</FormControl> </FormControl>
</FormItem> </FormItem>
)} );
}}
/> />
<FormField <FormField
control={form.control} control={form.control}
name="sconto" name="sconto"