import { useState } from 'react';
import UIButton from './UIButton';
import UIPlacesAutocomplete from './UIPlacesAutocomplete';
import UISecondaryBox from './UISecondaryBox';
import UISecondaryHeader from './UISecondaryHeader';
import useThrottle from './useThrottle';
import useToggle from './useToggle';
const green = '#60f760';
const lightgrey = '#e0e0e0';
export type IEvent = {
id: number;
name: string;
group: string;
formattedAddress: string;
startTime: string;
endTime: string;
};
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()}`;
}
}
function GroupName({ name }: { name: string }) {
return (
{name}
);
}
function Details({
startTime,
endTime,
formattedAddress,
}: {
startTime: string;
endTime: string;
formattedAddress: string;
}) {
return (
When:
{formatStartAndEndTime(startTime, endTime)}
Where:
{formattedAddress}
);
}
export type ICarpool = {
driver: {
id: number;
name: string;
};
startTime: string;
endTime: string;
extraDistance: number;
};
function CarpoolRow({ carpool }: { carpool: ICarpool }) {
const PADDING = '1rem';
return (
{carpool.driver.name}
Time:{' '}
{carpool.startTime} - {carpool.endTime}
Offset from route: {carpool.extraDistance} miles
Request to join
);
}
const dummyCarpoolData: ICarpool[] = [
{
driver: {
id: 0,
name: 'Michael Fatemi',
},
startTime: '10:00',
endTime: '10:10',
extraDistance: 6.9,
},
{
driver: {
id: 1,
name: 'Joshua Hsueh',
},
startTime: '10:05',
endTime: '10:10',
extraDistance: 420,
},
];
function Carpools({ event }: { event: IEvent }) {
// eslint-disable-next-line
const [carpools, _setCarpools] = useState(dummyCarpoolData);
return (
Carpools
{carpools.map((carpool) => (
))}
);
}
export type IPerson = {
id: number;
name: string;
extraDistance: number;
};
const dummyPeopleData: IPerson[] = [
{
id: 0,
name: 'Rushil Umaretiya',
extraDistance: 10,
},
{
id: 1,
name: 'Nitin Kanchinadam',
extraDistance: 12,
},
];
function People({ event }: { event: IEvent }) {
const PADDING = '1rem';
// eslint-disable-next-line
const [people, setPeople] = useState(dummyPeopleData);
return (
People
{people.map(({ name, extraDistance, id }) => (
{name}: +{extraDistance} miles
Invite to carpool
))}
);
}
export default function Event({ event }: { event: IEvent }) {
const { name, group, formattedAddress, startTime, endTime } = event;
const [haveRide, toggleHaveRide] = useToggle(false);
const [locationPlaceId, setLocationPlaceId] = useState(null!);
const [interested, toggleInterested] = useToggle(false);
const toggleInterestedThrottled = useThrottle(toggleInterested, 500);
return (
{name}
{interested ? 'Interested' : 'Not interested'}
{interested && (
<>
{
setLocationPlaceId(placeID);
}}
style={
locationPlaceId != null ? { border: '2px solid ' + green } : {}
}
/>
{false && (
I don't have any way to get there yet
)}
>
)}
);
}