import { Alert, Button, MenuItem, Select, Slider, TextField, Typography } from '@mui/material'; import Grid from '@mui/material/Unstable_Grid2' import { DatePicker } from '@mui/x-date-pickers'; import { useEffect, useState } from 'react'; import { useNavigate } from "react-router-dom" import { Event, EventTypes, createEvent } from '../types/Event'; import utils from '../utils'; import toast from 'react-hot-toast'; import dayjs from 'dayjs'; export default function NewEventPage() { const navigate = useNavigate(); const [event, setEvent] = useState(createEvent()); const [isEventValid, setEventValid] = useState(false); useEffect(() => { validateEvent(); }, [event]) function validateEvent(): void { var valid: boolean = true; let today = dayjs().hour(0).minute(0).second(0).millisecond(0); valid &&= !utils.isNullOrUndefined(event.name) && event.name !== ""; valid &&= event.eventType !== EventTypes.UNKNOWN && event.eventType !== null; if (event.eventType === EventTypes.DATE_RANGE) { valid &&= !utils.isNullOrUndefined(event.fromDate) && !utils.isNullOrUndefined(event.toDate); valid &&= !utils.isNullOrUndefined(event.toDate) && event.toDate!.unix() > today.unix(); valid &&= !utils.isNullOrUndefined(event.fromDate) && event.fromDate!.unix() >= today.unix(); valid &&= !utils.isNullOrUndefined(event.fromDate) && !utils.isNullOrUndefined(event.toDate) && event.toDate!.unix() > event.fromDate!.unix(); valid &&= !utils.isNullOrUndefined(event.fromDate) && !utils.isNullOrUndefined(event.toDate) && event.toDate!.diff(event.fromDate!, "days") >= 1; valid &&= !utils.isNullOrUndefined(event.fromDate) && !utils.isNullOrUndefined(event.toDate) && event.toDate!.diff(event.fromDate!, "days") <= 14; } if (event.eventType === EventTypes.SPECIFIC_DATE) { valid &&= !utils.isNullOrUndefined(event.fromDate); valid &&= !utils.isNullOrUndefined(event.fromDate) && event.fromDate!.unix() >= today.unix(); } setEventValid(valid); } function saveEvent() { utils.showSpinner(); utils.performRequest("/api/events", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ from_date: event.fromDate?.utc().format(), to_date: event.toDate?.utc().format(), name: event.name, description: event.description, event_type: event.eventType, duration: event.duration }) }) .then(resp => { navigate(resp.snowflake_id) }) .catch(err => { toast.error(err) }) .finally(() => utils.hideSpinner()); } return (

Create New Event

{ event.name = e.target.value; setEvent({...event}); }} label="I'm organizing a(n)..." /> { event.description = e.target.value; setEvent({...event}); }} label="More details... ( Optional )" /> Duration utils.formatMinutesAsHoursMinutes(val)} marks={ [ { value: 30, label: "30m" }, { value: 120, label: "2h" }, { value: 240, label: "4h" }, { value: 360, label: "6h" }, { value: 480, label: "8h" } ] } min={30} max={480} value={event.duration} onChange={(_, val) => { event.duration = val as number; setEvent({...event}); }} /> { event.eventType == EventTypes.SPECIFIC_DATE && { event.fromDate = value ?? null; setEvent({...event}); }} label="When" /> } { event.eventType == EventTypes.DATE_RANGE && { event.fromDate = value ?? null; setEvent({...event}); }} label="From" /> } { event.eventType == EventTypes.DATE_RANGE && { event.toDate = value ?? null; setEvent({...event}); }} label="To" /> } { (event.eventType == EventTypes.DAY || event.eventType == EventTypes.WEEK || event.eventType == EventTypes.MONTH) && Selecting the Day type will allow attendees to select their availability during an unspecified {event.eventType} }
); }