Skip to content

Commit 328f66a

Browse files
Merge branch 'dev' into feat/events-ui
2 parents 10f2cb6 + 229ff95 commit 328f66a

5 files changed

Lines changed: 38 additions & 18 deletions

File tree

client/src/components/controls/CustomEvent.tsx

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,13 @@ import { StyledControlsButton } from '../../styles/ControlStyles';
1414
import { DropdownButton, ExecuteButton, StyledTabPanel } from '../../styles/CustomEventStyles';
1515
import { StyledList } from '../../styles/DroppedCardStyles';
1616
import { parseAndCreateEventObj } from '../../utils/createEvent';
17-
import { areValidEventTimes, createDateWithTime, resizeWeekArray } from '../../utils/eventTimes';
17+
import {
18+
areValidEventTimes,
19+
createDateWithTime,
20+
getEventEndTimeValue,
21+
getTimeValue,
22+
resizeWeekArray,
23+
} from '../../utils/eventTimes';
1824
import ColorPicker from './ColorPicker';
1925
import CustomEventGeneral from './CustomEventGeneral';
2026
import CustomEventTutoring from './CustomEventTutoring';
@@ -211,10 +217,8 @@ const CustomEvent: React.FC = () => {
211217
[newEvent.event.id]: newEvent,
212218
});
213219

214-
setEarliestStartTime(
215-
Math.min(Math.floor(earliestStartTime), Math.floor(startTime.getHours() + startTime.getMinutes() / 60)),
216-
);
217-
setLatestEndTime(Math.max(Math.ceil(latestEndTime), Math.ceil(endTime.getHours() + endTime.getMinutes() / 60)));
220+
setEarliestStartTime(Math.min(Math.floor(earliestStartTime), Math.floor(getTimeValue(startTime))));
221+
setLatestEndTime(Math.max(Math.ceil(latestEndTime), Math.ceil(getEventEndTimeValue(endTime))));
218222

219223
// Update displayed days on timetable if new event time out of current displayed days
220224
if (daysShort.indexOf(day) === 5 || daysShort.indexOf(day) === 6) {

client/src/components/timetable/CreateEventPopover.tsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { CreateEventPopoverProps } from '../../interfaces/PropTypes';
1010
import { ExecuteButton } from '../../styles/CustomEventStyles';
1111
import { StyledList } from '../../styles/DroppedCardStyles';
1212
import { parseAndCreateEventObj } from '../../utils/createEvent';
13-
import { areValidEventTimes } from '../../utils/eventTimes';
13+
import { areValidEventTimes, getEventEndTimeValue, getTimeValue } from '../../utils/eventTimes';
1414
import ColorPicker from '../controls/ColorPicker';
1515
import CustomEventGeneral from '../controls/CustomEventGeneral';
1616

@@ -51,10 +51,8 @@ const CreateEventPopover: React.FC<CreateEventPopoverProps> = ({
5151
const { createdEvents, setCreatedEvents } = useContext(CourseContext);
5252

5353
const createEvent = (day: string) => {
54-
setEarliestStartTime(
55-
Math.min(Math.floor(earliestStartTime), Math.floor(startTime.getHours() + startTime.getMinutes() / 60)),
56-
);
57-
setLatestEndTime(Math.max(Math.ceil(latestEndTime), Math.ceil(endTime.getHours() + endTime.getMinutes() / 60)));
54+
setEarliestStartTime(Math.min(Math.floor(earliestStartTime), Math.floor(getTimeValue(startTime))));
55+
setLatestEndTime(Math.max(Math.ceil(latestEndTime), Math.ceil(getEventEndTimeValue(endTime))));
5856

5957
// Updating the days of the week must be handled here otherwise
6058
// DroppedCards will not have the updated days and it will crash

client/src/components/timetable/ExpandedEventView.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ import { ColorDivider } from '../../styles/ExpandedViewStyles';
4343
import { to24Hour } from '../../utils/convertTo24Hour';
4444
import { parseAndCreateEventObj } from '../../utils/createEvent';
4545
import { useEventDrag } from '../../utils/Drag';
46-
import { areValidEventTimes, createDateWithTime } from '../../utils/eventTimes';
46+
import { areValidEventTimes, createDateWithTime, getEventEndTimeValue, getTimeValue } from '../../utils/eventTimes';
4747
import ColorPicker from '../controls/ColorPicker';
4848
import DiscardDialog from './DiscardDialog';
4949
import DropdownOption from './DropdownOption';
@@ -154,8 +154,8 @@ const ExpandedEventView: React.FC<ExpandedEventViewProps> = ({
154154

155155
const newEventTime = {
156156
day: daysShort.indexOf(newDays.toString()) + 1,
157-
start: newStartTime.getHours() + newStartTime.getMinutes() / 60,
158-
end: newEndTime.getHours() + newEndTime.getMinutes() / 60,
157+
start: getTimeValue(newStartTime),
158+
end: getEventEndTimeValue(newEndTime),
159159
};
160160
setCreatedEvents({
161161
...createdEvents,

client/src/utils/createEvent.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { v4 as uuidv4 } from 'uuid';
22

33
import { daysShort } from '../constants/timetable';
44
import { EventPeriod, EventSubtype } from '../interfaces/Periods';
5+
import { getEventEndTimeValue, getTimeValue } from './eventTimes';
56

67
/**
78
* Returns an event object with all the event info
@@ -67,10 +68,9 @@ export const parseAndCreateEventObj = (
6768
endTime: Date,
6869
subtype: EventSubtype,
6970
): EventPeriod => {
70-
const isMidnight = endTime.getHours() + endTime.getMinutes() / 60 === 0;
7171
const eventDay = daysShort.indexOf(day) + 1;
72-
const eventStart = startTime.getHours() + startTime.getMinutes() / 60;
73-
const eventEnd = isMidnight ? 24.0 : endTime.getHours() + endTime.getMinutes() / 60;
72+
const eventStart = getTimeValue(startTime);
73+
const eventEnd = getEventEndTimeValue(endTime);
7474

7575
return createEventObj(name, location, description, color, eventDay, eventStart, eventEnd, subtype);
7676
};

client/src/utils/eventTimes.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,32 @@
1+
/**
2+
* @param time The time to convert
3+
* @returns The time as a decimal hour in the range 0-23.99
4+
*/
5+
export const getTimeValue = (time: Date) => time.getHours() + time.getMinutes() / 60;
6+
7+
/**
8+
* @param time The event end time to convert
9+
* @returns The event end time as a decimal hour, using 24 for midnight
10+
*/
11+
export const getEventEndTimeValue = (time: Date) => {
12+
const timeValue = getTimeValue(time);
13+
return timeValue === 0 ? 24 : timeValue;
14+
};
15+
116
/**
217
* @param start The starting time of the event
318
* @param end The ending time of the event
419
* @returns Whether the start and end times represent a valid event
520
*/
621
export const areValidEventTimes = (start: Date, end: Date) => {
22+
const startTime = getTimeValue(start);
23+
const endTime = getTimeValue(end);
24+
725
// Return true if the event ends at midnight
8-
if (end.getHours() + end.getMinutes() / 60 === 0) {
26+
if (endTime === 0) {
927
return true;
1028
} else {
11-
return start.getHours() + start.getMinutes() / 60 < end.getHours() + end.getMinutes() / 60;
29+
return startTime < endTime;
1230
}
1331
};
1432

0 commit comments

Comments
 (0)