import * as React from "react";
import { DatePicker as $DatePicker } from "antd";
import { Field, FieldProps } from "formik";
import {
DatePickerProps as $DatePickerProps,
MonthPickerProps as $MonthPickerProps,
RangePickerProps as $RangePickerProps,
WeekPickerProps as $WeekPickerProps,
} from "antd/lib/date-picker/interface";
import moment from "moment";
import { FormikFieldProps } from "../FieldProps";
const { MonthPicker: $MonthPicker, RangePicker: $RangePicker, WeekPicker: $WeekPicker, } = $DatePicker;
export type DatePickerProps = FormikFieldProps & $DatePickerProps;
export const DatePicker = ({ name, validate, onChange, ...restProps }: DatePickerProps) => (
{({ field: { value }, form: { setFieldValue, setFieldTouched } }: FieldProps) => (
<$DatePicker
value={value ? moment(value) : undefined}
onChange={(date, dateString) => {
setFieldValue(name, date ? date.toISOString() : null);
setFieldTouched(name, true)
onChange && onChange(date, dateString)
}}
{...restProps}
/>
)}
);
export default DatePicker
export type MonthPickerProps = FormikFieldProps & $MonthPickerProps;
DatePicker.MonthPicker = ({ name, validate, onChange, ...restProps }: MonthPickerProps) => (
{({ field: { value }, form: { setFieldValue, setFieldTouched } }: FieldProps) => (
<$MonthPicker
value={value ? moment(value) : undefined}
onChange={(date, dateString) => {
setFieldValue(name, date ? date.toISOString() : null);
setFieldTouched(name, true)
onChange && onChange(date, dateString)
}}
{...restProps}
/>
)}
);
export type RangePickerProps = FormikFieldProps & $RangePickerProps;
DatePicker.RangePicker = ({ name, validate, onChange, ...restProps }: RangePickerProps) => (
{({ field: { value }, form: { setFieldValue, setFieldTouched } }: FieldProps) => (
<$RangePicker
name={name}
value={value}
onChange={(dates, dateStrings) => {
setFieldValue(name, dates);
setFieldTouched(name, true)
onChange && onChange(dates, dateStrings)
}}
{...restProps}
/>
)}
);
export type WeekPickerProps = FormikFieldProps & $WeekPickerProps;
DatePicker.WeekPicker = ({ name, validate, onChange, ...restProps }: WeekPickerProps) => (
{({ field: { value }, form: { setFieldValue, setFieldTouched } }: FieldProps) => (
<$WeekPicker
name={name}
value={value}
onChange={(date, dateString) => {
setFieldValue(name, date);
setFieldTouched(name, true)
onChange && onChange(date, dateString)
}}
{...restProps}
/>
)}
);