Skip to content

Commit f668404

Browse files
committed
fix(date-input): ability to update date input externally when it is passed a valid date
1 parent 00e8ad2 commit f668404

File tree

3 files changed

+42
-50
lines changed

3 files changed

+42
-50
lines changed

packages/ui-components/src/lib/inputs/InputDate/InputDate.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,11 @@ export const InputDate: FC<InputDateProps> = ({
3434
const formContext = useFormContext();
3535
if (!formikProps && formContext) formikProps = formContext;
3636
const fieldValue = formikProps ? _get(formikProps?.values, props.name, '') : value;
37-
const fieldDateTime = valueFormat ? DateTime.fromFormat(fieldValue, valueFormat) : DateTime.fromISO(fieldValue);
37+
const fieldDateTime = valueFormat ? DateTime.fromFormat(fieldValue, valueFormat) : DateTime.fromJSDate(fieldValue);
3838
const [inputValue, setInputValue] = React.useState<DateTime | null>(fieldValue);
3939

4040
useEffect(() => {
41-
if (fieldDateTime.isValid) setInputValue(fieldDateTime);
41+
if (fieldDateTime.isValid) setInputValue(fieldValue);
4242
}, [fieldValue]);
4343

4444
return (
Lines changed: 20 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,26 @@
11
import React, { FC } from 'react';
2-
import { FormikProps, useFormik } from 'formik';
3-
import { InputDate } from '../../..';
2+
import { Form, InputDate } from '../../..';
43

54
export const inputDateExample1: FC<any> = () => {
6-
// eslint-disable-next-line react-hooks/rules-of-hooks
7-
const formikProps: FormikProps<any> = useFormik({
8-
initialValues: {
9-
sampleDate: new Date(),
10-
formattedDate: '',
11-
onChangeDate: new Date()
12-
},
13-
onSubmit: () => undefined
14-
});
15-
165
return (
17-
<>
18-
Value: {JSON.stringify(formikProps.values.sampleDate)}
19-
<InputDate name="sampleDate" formikProps={formikProps} />
20-
Value: {formikProps.values.formattedDate}
21-
<InputDate name="formattedDate" valueFormat={'LL/dd/yyyy'} formikProps={formikProps} />
22-
Value:{' '}
23-
{formikProps.values.onChangeDate instanceof Date ? formikProps.values.onChangeDate.toLocaleDateString() : ''}
24-
<InputDate
25-
name="onChangeDate"
26-
formikProps={formikProps}
27-
onChange={(date: string | Date | null) => console.log(date)}
28-
/>
29-
</>
6+
<Form
7+
initialValues={{
8+
sampleDate: new Date(),
9+
formattedDate: '',
10+
onChangeDate: new Date()
11+
}}
12+
>
13+
{formikProps => (
14+
<>
15+
Value: {JSON.stringify(formikProps.values.sampleDate)}
16+
<InputDate name="sampleDate" />
17+
Value: {formikProps.values.formattedDate}
18+
<InputDate name="formattedDate" valueFormat={'LL/dd/yyyy'} />
19+
Value:{' '}
20+
{formikProps.values.onChangeDate instanceof Date ? formikProps.values.onChangeDate.toLocaleDateString() : ''}
21+
<InputDate name="onChangeDate" onChange={(date: string | Date | null) => console.log(date)} />
22+
</>
23+
)}
24+
</Form>
3025
);
3126
};

packages/ui-components/src/lib/inputs/InputDate/input-date-documentation/input-date.stories.mdx

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -14,29 +14,26 @@ import { inputDateExample1 } from './input-date.examples.tsx';
1414
docs: {
1515
source: {
1616
code: dedent`
17-
const formikProps: FormikProps<any> = useFormik({
18-
initialValues: {
19-
sampleDate: new Date(),
20-
formattedDate: '',
21-
onChangeDate: new Date()
22-
},
23-
onSubmit: () => undefined
24-
});
25-
return (
26-
<>
27-
Value: {JSON.stringify(formikProps.values.sampleDate)}
28-
<InputDate name="sampleDate" formikProps={formikProps} />
29-
Value: {formikProps.values.formattedDate}
30-
<InputDate name="formattedDate" valueFormat={'LL/dd/yyyy'} formikProps={formikProps} />
31-
Value:{' '}
32-
{formikProps.values.onChangeDate instanceof Date ? formikProps.values.onChangeDate.toLocaleDateString() : ''}
33-
<InputDate
34-
name="onChangeDate"
35-
formikProps={formikProps}
36-
onChange={(date: string | Date | null) => console.log(date)}
37-
/>
38-
</>
39-
);`
17+
<Form
18+
initialValues={{
19+
sampleDate: new Date(),
20+
formattedDate: '',
21+
onChangeDate: new Date()
22+
}}
23+
>
24+
{formikProps => (
25+
<>
26+
Value: {JSON.stringify(formikProps.values.sampleDate)}
27+
<InputDate name="sampleDate" />
28+
Value: {formikProps.values.formattedDate}
29+
<InputDate name="formattedDate" valueFormat={'LL/dd/yyyy'} />
30+
Value:{' '}
31+
{formikProps.values.onChangeDate instanceof Date ? formikProps.values.onChangeDate.toLocaleDateString() : ''}
32+
<InputDate name="onChangeDate" onChange={(date: string | Date | null) => console.log(date)} />
33+
</>
34+
)}
35+
</Form>
36+
`
4037
}
4138
}
4239
}}

0 commit comments

Comments
 (0)