- fixed freezing form;
This commit is contained in:
@@ -1,10 +1,30 @@
|
||||
import React from 'react';
|
||||
import React, { useMemo } from 'react';
|
||||
import { classNames } from 'primereact/utils';
|
||||
import { Controller } from 'react-hook-form';
|
||||
import { is, isEmpty } from 'ramda';
|
||||
|
||||
import { Calendar } from 'primereact/calendar';
|
||||
|
||||
const DatepickerField = ({ field, fieldState, disabled, timeOnly, minDate, maxDate }) => {
|
||||
const dateValue = useMemo(
|
||||
() => is(String, field.value) && !isEmpty(field.value) ? new Date(field.value) : field.value,
|
||||
[field.value]
|
||||
);
|
||||
return (
|
||||
<Calendar id={field.name}
|
||||
disabled={disabled}
|
||||
value={dateValue}
|
||||
onChange={(e) => field.onChange(e.value)}
|
||||
dateFormat="dd/mm/yy"
|
||||
hourFormat="24"
|
||||
timeOnly={timeOnly}
|
||||
showIcon
|
||||
minDate={minDate}
|
||||
maxDate={maxDate}
|
||||
className={classNames({ 'p-invalid': fieldState.invalid })}/>
|
||||
);
|
||||
};
|
||||
|
||||
const Datepicker = ({
|
||||
fieldName,
|
||||
label,
|
||||
@@ -28,17 +48,15 @@ const Datepicker = ({
|
||||
control={control}
|
||||
defaultValue={defaultValue}
|
||||
rules={config}
|
||||
render={({ field, fieldState }) => (<Calendar id={field.name}
|
||||
disabled={disabled}
|
||||
value={is(String, field.value) && !isEmpty(field.value) ? new Date(field.value) : field.value}
|
||||
onChange={(e) => field.onChange(e.value)}
|
||||
dateFormat="dd/mm/yy"
|
||||
hourFormat="24"
|
||||
timeOnly={timeOnly}
|
||||
showIcon
|
||||
minDate={minDate}
|
||||
maxDate={maxDate}
|
||||
className={classNames({ 'p-invalid': fieldState.invalid })}/>
|
||||
render={({ field, fieldState }) => (
|
||||
<DatepickerField
|
||||
field={field}
|
||||
fieldState={fieldState}
|
||||
disabled={disabled}
|
||||
timeOnly={timeOnly}
|
||||
minDate={minDate}
|
||||
maxDate={maxDate}
|
||||
/>
|
||||
)}/>
|
||||
{infoText ? <small>{infoText}</small> : null}
|
||||
</>)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import React from 'react';
|
||||
import React, { useMemo } from 'react';
|
||||
import { classNames } from 'primereact/utils';
|
||||
import { isNil } from 'ramda';
|
||||
|
||||
@@ -18,9 +18,12 @@ const DatepickerRange = ({
|
||||
maxDate = null,
|
||||
disabled = false
|
||||
}) => {
|
||||
const datesDefaultValue = !isNil(defaultValue) && defaultValue.length
|
||||
? defaultValue.map(v => new Date(v))
|
||||
: [];
|
||||
const datesDefaultValue = useMemo(
|
||||
() => !isNil(defaultValue) && defaultValue.length
|
||||
? defaultValue.map(v => new Date(v))
|
||||
: [],
|
||||
[defaultValue]
|
||||
);
|
||||
return (
|
||||
<>
|
||||
<label htmlFor={fieldName} className={classNames({ 'p-error': errors[fieldName] })}>
|
||||
|
||||
@@ -39,8 +39,8 @@ const NumberInput = ({
|
||||
readOnly={readOnly}
|
||||
value={is(Number, field.value) || (!is(Number, field.value) && !isNaN(parseFloat(field.value))) ? field.value : ''}
|
||||
onValueChange={(e) => field.onChange(e.value)}
|
||||
min={minAttr}
|
||||
max={maxAttr}
|
||||
min={readOnly ? undefined : minAttr}
|
||||
max={readOnly ? undefined : maxAttr}
|
||||
mode="decimal"
|
||||
locale={locale}
|
||||
showButtons
|
||||
|
||||
Reference in New Issue
Block a user