Skip to content
Snippets Groups Projects
Commit 411675c3 authored by danieldeng2's avatar danieldeng2
Browse files

Separate component for Event cards

parent 8246e5c6
No related branches found
No related tags found
No related merge requests found
import React from "react"; import React from "react";
import styles from "./style.module.scss"; import styles from "./style.module.scss";
export interface ModuleHeadingprops {
numWeeks: number; export interface DayIndicatorGridProps {
activeDay: Date; numWeeks: number;
termStart: Date; activeDay: Date;
activeColumn: number;
} }
const DayIndicatorGrid: React.FC<ModuleHeadingprops> = ({ const DayIndicatorGrid: React.FC<DayIndicatorGridProps> = ({
numWeeks, numWeeks,
activeDay, activeDay,
termStart, activeColumn,
}) => { }) => {
const activeColumn =
Math.ceil(
((activeDay.getTime() - termStart.getTime()) / 86400000 / 7) * 6
) + 1;
return ( return (
<div <div
className={styles.dayIndicatorGrid} className={styles.dayIndicatorGrid}
......
import React from "react"; import React from "react";
import styles from "./style.module.scss"; import styles from "./style.module.scss";
import { TimelineEvent } from "../..";
import TimelineEventCard from "../TimelineEventCard";
export interface EventGridProps { export interface EventGridProps {
numWeeks: number; numWeeks: number;
trackHeight: number; trackHeight: number;
events: TimelineEvent[];
} }
const EventGrid: React.FC<EventGridProps> = ({ numWeeks, trackHeight }) => { const EventGrid: React.FC<EventGridProps> = ({
numWeeks,
trackHeight,
events,
}) => {
return ( return (
<div <div
className={styles.timelineCardGrid} className={styles.timelineCardGrid}
...@@ -14,15 +21,14 @@ const EventGrid: React.FC<EventGridProps> = ({ numWeeks, trackHeight }) => { ...@@ -14,15 +21,14 @@ const EventGrid: React.FC<EventGridProps> = ({ numWeeks, trackHeight }) => {
gridTemplateRows: `${trackHeight}rem ${trackHeight}rem 0.3125rem repeat(${7}, ${trackHeight}rem ${trackHeight}rem 0.625rem) ${trackHeight}rem ${trackHeight}rem 0.3125rem`, gridTemplateRows: `${trackHeight}rem ${trackHeight}rem 0.3125rem repeat(${7}, ${trackHeight}rem ${trackHeight}rem 0.625rem) ${trackHeight}rem ${trackHeight}rem 0.3125rem`,
}} }}
> >
<div className={styles.timelineEvent} style={{ gridColumn: `1 / 9` }}> {events.map(({ title }, i) => (
<span className={styles.eventTitle}>Title of the first event</span> <TimelineEventCard
</div> title={title}
<div startColumn={i + 1}
className={styles.timelineEvent} endColumn={i + 8}
style={{ gridColumn: `3 / 24`, gridRow: `2` }} rowNumber={2 * i}
> />
<span className={styles.eventTitle}>Title of the second event</span> ))}
</div>
</div> </div>
); );
}; };
......
...@@ -3,18 +3,4 @@ ...@@ -3,18 +3,4 @@
display: grid; display: grid;
grid-area: background; grid-area: background;
z-index: 3; z-index: 3;
} }
\ No newline at end of file
.timelineEvent {
background: red;
margin: 0.5rem;
border-radius: 0.5rem;
padding: 0.5rem;
display: flex;
align-items: center;
}
.eventTitle {
color: var(--primary-text-color);
font-size: 1rem;
}
import React from "react";
import styles from "./style.module.scss";
export interface TimelineEventProps {
title: string;
startColumn: number;
endColumn: number;
rowNumber: number;
}
const TimelineEventCard: React.FC<TimelineEventProps> = ({
title,
startColumn,
endColumn,
rowNumber,
}) => {
return (
<div
className={styles.timelineEvent}
style={{ gridColumn: `${startColumn} / ${endColumn}`, gridRow: `${rowNumber}` }}
>
<span className={styles.eventTitle}>{title}</span>
</div>
);
};
export default TimelineEventCard;
.timelineEvent {
background: red;
margin: 0.5rem;
border-radius: 0.5rem;
padding: 0.5rem;
display: flex;
align-items: center;
}
.eventTitle {
color: var(--primary-text-color);
font-size: 1rem;
}
import { TimelineEvent } from ".";
export const eventsData : TimelineEvent[] = [
{
title: "Logic Exercise",
id: 0,
startDate: new Date("2020-10-01"),
endDate: new Date("2020-10-08"),
moduleCode: "CO140"
},
{
title: "Circuit Analysis",
id: 0,
startDate: new Date("2020-10-04"),
endDate: new Date("2020-10-09"),
moduleCode: "CO112"
}
]
\ No newline at end of file
...@@ -7,18 +7,23 @@ import WeekRow from "./components/WeekRow"; ...@@ -7,18 +7,23 @@ import WeekRow from "./components/WeekRow";
import ModuleRows from "./components/ModuleRows"; import ModuleRows from "./components/ModuleRows";
import DayIndicatorGrid from "./components/DayIndicatorGrid"; import DayIndicatorGrid from "./components/DayIndicatorGrid";
import EventGrid from "./components/EventGrid"; import EventGrid from "./components/EventGrid";
import { eventsData } from "./eventsData";
interface TimelineProps { interface TimelineProps {
initSideBar: () => void; initSideBar: () => void;
revertSideBar: () => void; revertSideBar: () => void;
} }
interface Event { export interface TimelineEvent {
title: string; title: string;
id: number;
moduleCode: string;
startDate: Date;
endDate: Date;
} }
export type ModuleTracks = { export type ModuleTracks = {
[index: string]: Event[][]; [index: string]: TimelineEvent[][];
}; };
interface TimelineState { interface TimelineState {
...@@ -44,6 +49,12 @@ class Timeline extends React.Component<TimelineProps, TimelineState> { ...@@ -44,6 +49,12 @@ class Timeline extends React.Component<TimelineProps, TimelineState> {
this.props.revertSideBar(); this.props.revertSideBar();
} }
dateToColumn(day: Date, termStart: Date) {
return (
Math.ceil(((day.getTime() - termStart.getTime()) / 86400000 / 7) * 6) + 1
);
}
render() { render() {
const termStart = new Date("2020-09-28"); const termStart = new Date("2020-09-28");
const activeDay = new Date("2020-10-12"); const activeDay = new Date("2020-10-12");
...@@ -68,12 +79,12 @@ class Timeline extends React.Component<TimelineProps, TimelineState> { ...@@ -68,12 +79,12 @@ class Timeline extends React.Component<TimelineProps, TimelineState> {
/> />
<DayIndicatorGrid <DayIndicatorGrid
numWeeks={numWeeks} numWeeks={numWeeks}
activeDay={activeDay} activeDay={activeDay}
termStart={termStart} activeColumn={this.dateToColumn(activeDay, termStart)}
/> />
<EventGrid numWeeks={numWeeks} trackHeight={trackHeight} /> <EventGrid numWeeks={numWeeks} trackHeight={trackHeight} events={eventsData}/>
</div> </div>
</div> </div>
); );
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment