import React from 'react'; import { ArrowLeft, ArrowRight, Clear } from '@material-ui/icons'; import { TextField, InputAdornment, TextFieldProps } from '@material-ui/core'; import { DatePicker as DatePickerMaterial, DatePickerProps as DatePickerPropsMaterial } from '@material-ui/pickers'; import { DatePicker, DatePickerProps } from 'formik-material-ui-pickers'; import { FieldProps, Field, useFormikContext } from 'formik'; import { Moment, DATE_FORMAT_DMY } from '@energyweb/origin-ui-core'; import { useSelector } from 'react-redux'; import { getEnvironment, IEnvironment } from '../../features/general'; interface ITextFieldWithArrowsEventHandlers { onLeftArrowClick: () => void; onRightArrowClick: () => void; onClearClick?: () => void; showClearButton: boolean; } type TextFieldWithArrowsProps = TextFieldProps & ITextFieldWithArrowsEventHandlers; const TextFieldWithArrows = ({ onLeftArrowClick, onRightArrowClick, onClearClick, showClearButton, ...rest }: TextFieldWithArrowsProps) => ( {showClearButton && ( { event.stopPropagation(); onClearClick(); }} /> )} { event.stopPropagation(); onLeftArrowClick(); }} /> { event.stopPropagation(); onRightArrowClick(); }} /> ) }} /> ); export const FormikDatePickerWithArrows = ({ onLeftArrowClick, onRightArrowClick, onClearClick, showClearButton, ...rest }: DatePickerProps & ITextFieldWithArrowsEventHandlers) => ( ( )} {...rest} /> ); export const FormikDatePicker = ({ form, field, ...rest }: FieldProps) => { const setFieldValue = form?.setFieldValue; const name = field?.name; const value = field?.value; return ( setFieldValue(name, newValue)} value={value} format={DATE_FORMAT_DMY} {...rest} /> ); }; export const FormikDatePickerWithMonthArrowsFilled = ({ name, label, disabled, required }: { name: string; label: string; disabled: boolean; required: boolean; }) => { const environment: IEnvironment = useSelector(getEnvironment); const setFieldValue = useFormikContext()?.setFieldValue; const values = useFormikContext()?.values; return ( setFieldValue(name, null)} onLeftArrowClick={() => setFieldValue( name, (values[name] as Moment) .clone() .utcOffset(Number(environment.MARKET_UTC_OFFSET), true) .subtract(1, 'month') .startOf('month') ) } onRightArrowClick={() => values[name] && setFieldValue( name, (values[name] as Moment) .clone() .utcOffset(Number(environment.MARKET_UTC_OFFSET), true) .add(1, 'month') .endOf('month') ) } /> ); };