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