import React, { FC, useEffect, useRef, useState } from 'react'; import Form from '../../blocks/Form'; import Input from '../../blocks/Input'; import css from './index.module.css'; import booking from '../../templates/BookingFunnel/index.module.css'; import { checkIfDateIsSame } from '../../templates/BookingFunnel'; import Textarea from '../../blocks/Textarea'; import Button from '../../blocks/Button'; import Checkbox from '../../blocks/Checkbox'; import { MilaDatePicker } from '../../index'; import CheckIconSVG from '../../assets/icons/icon_check.svg'; import { getYear } from 'date-fns'; export interface FormServiceDetailsValues { date: Date; description: string; isFlexibleCheckbox: boolean; voucher: string; } export interface FormServiceDetailsLabels { chooseDateTime: string; date: string; isFlexibleCheckbox: string; voucher: string; time: string; additionalInfo: string; problem: string; voucherVerify: string; voucherVerified: string; } export interface FormServiceDetailsErrors { date: string; description: string; isFlexibleCheckbox: string; voucher: string; } export interface FormServiceDetailsTouched { [key: string]: unknown; } export interface FormServiceDetailsProps { values: FormServiceDetailsValues; touched: FormServiceDetailsTouched; errors: FormServiceDetailsErrors; labels: FormServiceDetailsLabels; handleChange: (e) => void; handleBlur: (e) => void; handleSubmit: (e) => void; verifyVoucher: (code: string) => Promise; removeVoucher: (code: string) => void; setFieldError: (field: string, errorMsg: string) => void; setFieldTouched: ( field: string, isTouched?: boolean, shouldValidate?: boolean, ) => void; setFieldValue: ( field: string, value: string, shouldValidate?: boolean, ) => void; isSubmitting?: boolean; wrapperClass?: string; status?: { msg: string; }; isVerifying: boolean; locale: string; initialVouchers?: string[]; checkIfKeyBoardOpen?: (e) => void; campaign?: string; } export function roundMinutes(minutes: number): number { return 30 * Math.ceil(minutes / 30); } export function keep2020great(date: Date | number): boolean { return getYear(date) === 2020; } const FormServiceDetails: FC = ({ values, errors, handleChange, handleBlur, handleSubmit, setFieldTouched, setFieldValue, setFieldError, labels, status, wrapperClass, verifyVoucher, isVerifying, locale, removeVoucher, initialVouchers, checkIfKeyBoardOpen, campaign, }) => { const isUk = locale.slice(3, 5).toLowerCase() === 'gb'; const inputEl = useRef(null); // 24 Hours = 86400000 const minDate = new Date(new Date().getTime() + 86400000); minDate.setMinutes(roundMinutes(minDate.getMinutes())); const [isFlexible, setFlexible] = useState(false); const [vouchers, setVouchers] = useState([]); const [date, setDate] = useState(); const [minTime, setMinTime] = useState(minDate); const [isVerified, setVerified] = useState(false); const handleDateChange = (date): void => { if (date && checkIfDateIsSame(date, minDate)) { if ( minDate.getHours() * 60 + minDate.getMinutes() > date.getHours() * 60 + date.getMinutes() ) { date.setMinutes(roundMinutes(minDate.getMinutes())); setMinTime(date); } } else { setMinTime(new Date(new Date().setHours(0, 0, 0, 0))); } setFieldValue('date', date != null ? date : ''); setDate(date); }; useEffect(() => { if (values.date) { const date = new Date(values.date); setDate(date); } else { setDate(minDate); // eslint-disable-next-line setFieldValue('date', minDate as any); } setFieldTouched('date', true); }, [values.date]); useEffect(() => { setFlexible(values.isFlexibleCheckbox); }, [values.isFlexibleCheckbox]); useEffect(() => { setVouchers(initialVouchers || []); }, [initialVouchers]); return (
{labels.additionalInfo}