191 lines
4.9 KiB
TypeScript
191 lines
4.9 KiB
TypeScript
// REQ0042/event-detail
|
|
//
|
|
// PURPOSE:
|
|
// - Provides functionality view event detail
|
|
//
|
|
// RULES:
|
|
// - T.B.A.
|
|
//
|
|
import React, { useEffect, useState } from 'react';
|
|
import {
|
|
IonHeader,
|
|
IonToolbar,
|
|
IonContent,
|
|
IonPage,
|
|
IonButtons,
|
|
IonMenuButton,
|
|
IonButton,
|
|
IonIcon,
|
|
IonDatetime,
|
|
IonSelectOption,
|
|
IonList,
|
|
IonItem,
|
|
IonLabel,
|
|
IonSelect,
|
|
IonPopover,
|
|
IonText,
|
|
IonFooter,
|
|
useIonRouter,
|
|
} from '@ionic/react';
|
|
import './style.scss';
|
|
import {
|
|
chevronBackOutline,
|
|
ellipsisHorizontal,
|
|
ellipsisVertical,
|
|
heart,
|
|
logoIonic,
|
|
} from 'ionicons/icons';
|
|
import AboutPopover from '../../components/AboutPopover';
|
|
import { format, parseISO } from 'date-fns';
|
|
import { TestContent } from './TestContent';
|
|
import { Helloworld } from '../../api/Helloworld';
|
|
import { getEventById } from '../../api/getEventById';
|
|
|
|
interface AboutProps {}
|
|
|
|
interface Event {
|
|
eventDate: Date;
|
|
joinMembers: undefined;
|
|
title: string;
|
|
price: number;
|
|
currency: string;
|
|
duration_m: number;
|
|
ageBottom: number;
|
|
ageTop: number;
|
|
location: string;
|
|
avatar: string;
|
|
}
|
|
|
|
const EventDetail: React.FC<AboutProps> = () => {
|
|
const [showPopover, setShowPopover] = useState(false);
|
|
const [popoverEvent, setPopoverEvent] = useState<MouseEvent>();
|
|
const [location, setLocation] = useState<'madison' | 'austin' | 'chicago' | 'seattle'>('madison');
|
|
const [conferenceDate, setConferenceDate] = useState('2047-05-17T00:00:00-05:00');
|
|
|
|
const selectOptions = {
|
|
header: 'Select a Location',
|
|
};
|
|
|
|
const presentPopover = (e: React.MouseEvent) => {
|
|
setPopoverEvent(e.nativeEvent);
|
|
setShowPopover(true);
|
|
};
|
|
|
|
function displayDate(date: string, dateFormat: string) {
|
|
return format(parseISO(date), dateFormat);
|
|
}
|
|
|
|
const [eventDetail, setEventDetail] = useState<Event | null>(null);
|
|
useEffect(() => {
|
|
Helloworld();
|
|
getEventById('1').then(({ data }) => {
|
|
console.log({ data });
|
|
setEventDetail(data);
|
|
});
|
|
}, []);
|
|
|
|
const router = useIonRouter();
|
|
function handleBackOnClick() {
|
|
router.goBack();
|
|
}
|
|
|
|
if (!eventDetail) return <>loading</>;
|
|
|
|
return (
|
|
<IonPage id="about-page">
|
|
<IonContent>
|
|
<IonHeader className="ion-no-border">
|
|
<IonToolbar>
|
|
<IonButtons slot="start">
|
|
{/* <IonMenuButton></IonMenuButton> */}
|
|
<IonButton shape="round" onClick={() => handleBackOnClick()}>
|
|
<IonIcon slot="icon-only" icon={chevronBackOutline}></IonIcon>
|
|
</IonButton>
|
|
</IonButtons>
|
|
<IonButtons slot="end">
|
|
<IonButton onClick={presentPopover}>
|
|
<IonIcon slot="icon-only" ios={ellipsisHorizontal} md={ellipsisVertical}></IonIcon>
|
|
</IonButton>
|
|
</IonButtons>
|
|
</IonToolbar>
|
|
</IonHeader>
|
|
|
|
<div className="about-header">
|
|
<div className="about-image madison" style={{ opacity: 1 }}></div>
|
|
</div>
|
|
|
|
<div>{eventDetail.avatar}</div>
|
|
|
|
<div>
|
|
<div>{format(new Date(eventDetail.eventDate), 'yyyy-MM-dd')}</div>
|
|
<h1>{eventDetail.title}</h1>
|
|
|
|
<div style={{ display: 'flex', gap: '1rem', alignItems: 'center' }}>
|
|
<div>members place holder</div>
|
|
<IonButton shape="round">More</IonButton>
|
|
</div>
|
|
<div
|
|
style={{
|
|
marginBottom: '1rem',
|
|
paddingTop: '1rem',
|
|
borderBottom: '1px solid black',
|
|
}}
|
|
></div>
|
|
</div>
|
|
<div style={{ display: 'flex', flexDirection: 'column', gap: '1rem' }}>
|
|
<div style={{ display: 'flex', gap: '1rem' }}>
|
|
<div>{eventDetail.currency}</div>
|
|
<div>{eventDetail.price}</div>
|
|
per person
|
|
</div>
|
|
|
|
<div>{eventDetail.duration_m}</div>
|
|
|
|
<div style={{ display: 'flex', gap: '1rem' }}>
|
|
<div>{eventDetail.ageBottom}</div>
|
|
<div>{eventDetail.ageTop}</div>
|
|
<div>years old</div>
|
|
</div>
|
|
|
|
<div>{eventDetail.location}</div>
|
|
<div style={{ display: 'flex', gap: '1rem' }}>
|
|
<IonIcon icon={logoIonic}></IonIcon>
|
|
<div>40</div>
|
|
|
|
<IonIcon icon={logoIonic}></IonIcon>
|
|
<div>20</div>
|
|
|
|
<IonIcon icon={logoIonic}></IonIcon>
|
|
<div>20</div>
|
|
</div>
|
|
</div>
|
|
</IonContent>
|
|
|
|
<IonFooter>
|
|
<div
|
|
style={{
|
|
display: 'flex',
|
|
flexDirection: 'column',
|
|
justifyContent: 'center',
|
|
margin: '1rem',
|
|
}}
|
|
>
|
|
<IonButton expand="full" shape="round">
|
|
Join
|
|
</IonButton>
|
|
</div>
|
|
</IonFooter>
|
|
|
|
<IonPopover
|
|
isOpen={showPopover}
|
|
event={popoverEvent}
|
|
onDidDismiss={() => setShowPopover(false)}
|
|
>
|
|
<AboutPopover dismiss={() => setShowPopover(false)} />
|
|
</IonPopover>
|
|
</IonPage>
|
|
);
|
|
};
|
|
|
|
export default React.memo(EventDetail);
|