diff --git a/src/components/NewUI/Event.tsx b/src/components/NewUI/Event.tsx index e98a50f..5949c70 100644 --- a/src/components/NewUI/Event.tsx +++ b/src/components/NewUI/Event.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState } from 'react'; +import { useState } from 'react'; import UIButton from './UIButton'; import UIPlacesAutocomplete from './UIPlacesAutocomplete'; import UISecondaryBox from './UISecondaryBox'; @@ -9,26 +9,57 @@ const green = '#60f760'; const lightgrey = '#e0e0e0'; export type IEvent = { - title: string; + name: string; group: string; - location: string; - time: string; + address: string; + startTime: string; + endTime: string; }; -export default function Event({ title, group, location, time }: IEvent) { +function formatStartAndEndTime( + startDatetimeString: string, + endDatetimeString: string +) { + const startDatetime = new Date(startDatetimeString); + const endDatetime = new Date(endDatetimeString); + + if (isNaN(startDatetime.valueOf())) { + console.error('Invalid datetime:', startDatetimeString); + return '(invalid)'; + } + if (isNaN(endDatetime.valueOf())) { + console.error('Invalid datetime:', startDatetimeString); + return '(invalid)'; + } + + const startDateString = startDatetime.toLocaleDateString(); + const endDateString = endDatetime.toLocaleDateString(); + + if (startDateString === endDateString) { + const startTimeString = startDatetime.toLocaleTimeString(); + const endTimeString = endDatetime.toLocaleTimeString(); + return `${startDateString}, ${startTimeString} - ${endTimeString}`; + } else { + return `${startDatetime.toLocaleString()} - ${endDatetime.toLocaleString()}`; + } +} + +export default function Event({ + name, + group, + address, + startTime, + endTime, +}: IEvent) { const [needRideThere, setNeedRideThere] = useState(false); const [needRideBack, setNeedRideBack] = useState(false); const [rideTherePickupPlaceID, setRideTherePickupPlaceID] = useState(''); const [rideBackDropoffPlaceID, setRideBackDropoffPlaceID] = useState(''); const [confirmed, setConfirmed] = useState(false); - useEffect(() => { - console.log({ rideTherePickupPlaceID, rideBackDropoffPlaceID }); - }, [rideTherePickupPlaceID, rideBackDropoffPlaceID]); - return ( - {title} + {name} - Time: - {time} + When: + {formatStartAndEndTime(startTime, endTime)}
- Location: - {location} + Where: + {address}
{events && events.length > 0 ? ( - events.map((event) => ) + events.map((event) => ) ) : ( There are no events yet. Click 'create event' above to add one! diff --git a/src/components/NewUI/Events.tsx b/src/components/NewUI/Events.tsx new file mode 100644 index 0000000..633e691 --- /dev/null +++ b/src/components/NewUI/Events.tsx @@ -0,0 +1,20 @@ +import { useEffect, useState } from 'react'; +import { IEvent } from './Event'; +import EventStream from './EventStream'; + +export default function Events() { + const [events, setEvents] = useState([]); + + useEffect(() => { + fetch('http://localhost:5000/api/events') + .then((res) => res.json()) + .then(setEvents); + }, []); + + return ( + <> +

Events

+ + + ); +} diff --git a/src/components/NewUI/GroupCreatorLink.tsx b/src/components/NewUI/GroupCreatorLink.tsx new file mode 100644 index 0000000..3ff8e62 --- /dev/null +++ b/src/components/NewUI/GroupCreatorLink.tsx @@ -0,0 +1,29 @@ +import { useCallback, useState } from 'react'; +import GroupCreator from './GroupCreator'; + +export default function GroupCreatorLink() { + const [open, setOpen] = useState(false); + const toggle = useCallback(() => { + setOpen((open) => !open); + }, []); + + return ( +
+
+ Create Group +
+ {open && ( + <> +
+ + + )} +
+ ); +} diff --git a/src/components/NewUI/Groups.tsx b/src/components/NewUI/Groups.tsx new file mode 100644 index 0000000..edb37dc --- /dev/null +++ b/src/components/NewUI/Groups.tsx @@ -0,0 +1,23 @@ +import { useState, useEffect } from 'react'; +import { IGroup } from './Group'; +import GroupCreatorLink from './GroupCreatorLink'; +import GroupList from './GroupList'; + +export default function Groups() { + const [groups, setGroups] = useState([]); + + useEffect(() => { + fetch('http://localhost:5000/api/groups') + .then((res) => res.json()) + .then(setGroups); + }, []); + + return ( + <> +

Groups

+ +
+ + + ); +} diff --git a/src/components/NewUI/WheelShare.tsx b/src/components/NewUI/WheelShare.tsx index 8435c47..beb3508 100644 --- a/src/components/NewUI/WheelShare.tsx +++ b/src/components/NewUI/WheelShare.tsx @@ -1,19 +1,8 @@ -import { useEffect, useState } from 'react'; -import EventStream from './EventStream'; -import { IGroup } from './Group'; -import GroupCreator from './GroupCreator'; -import GroupList from './GroupList'; +import Events from './Events'; +import Groups from './Groups'; import UIPrimaryTitle from './UIPrimaryTitle'; export default function WheelShare() { - const [groups, setGroups] = useState([]); - - useEffect(() => { - fetch('http://localhost:5000/api/groups') - .then((res) => res.json()) - .then(setGroups); - }, []); - return (
WheelShare - -

Groups

- -

Events

- + + +
); }