import {SubmitHandler, useForm} from 'react-hook-form'; import {__} from '@wordpress/i18n'; import styles from './EventFormModal.module.scss'; import FormModal from '../FormModal'; import EventTicketsApi from '../api'; /** * Get the next sharp hour * * @since 3.6.0 */ const getNextSharpHour = (hoursToAdd: number) => { const date = new Date(); date.setHours(date.getHours() + hoursToAdd, 0, 0, 0); return date; }; /** * Format a given date to be used in datetime inputs * * @since 3.6.0 */ const getDateString = (date: Date) => { const offsetInMilliseconds = date.getTimezoneOffset() * 60 * 1000; const dateWithOffset = new Date(date.getTime() - offsetInMilliseconds); return removeTimezoneFromDateISOString(dateWithOffset.toISOString()); }; /** * Remove timezone from date string * * @since 3.6.0 */ const removeTimezoneFromDateISOString = (date: string) => { return date.slice(0, -5); }; /** * Event Form Modal component * * @since 3.20.0 Added placeholder to event description field * @since 3.6.0 */ export default function EventFormModal({isOpen, handleClose, apiSettings, title, event}: EventModalProps) { const API = new EventTicketsApi(apiSettings); const { register, handleSubmit, formState: {errors, isDirty}, } = useForm({ defaultValues: { title: event?.title ?? '', description: event?.description ?? '', startDateTime: getDateString( event?.startDateTime?.date ? new Date(event?.startDateTime?.date) : getNextSharpHour(1) ), endDateTime: getDateString( event?.endDateTime?.date ? new Date(event?.endDateTime?.date) : getNextSharpHour(2) ), }, }); const onSubmit: SubmitHandler = async (inputs) => { try { inputs.startDateTime = getDateString(new Date(inputs.startDateTime)); inputs.endDateTime = getDateString(new Date(inputs.endDateTime)); const endpoint = event?.id ? `/event/${event.id}` : ''; const response = await API.fetchWithArgs(endpoint, inputs, 'POST'); handleClose(response); } catch (error) { console.error('Error submitting event event', error); } }; return (