Skip to content

Commit e06fafa

Browse files
authored
Merge pull request #4223 from Northeastern-Electric-Racing/4204-Responsive-Availability-Filler-Outer
#4204 responsive availability filler outer
2 parents 839cd4e + 303dc1b commit e06fafa

3 files changed

Lines changed: 86 additions & 17 deletions

File tree

src/frontend/src/pages/CalendarPage/Components/EventAvailabilityPage.tsx

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
import React, { useState, useEffect, useMemo } from 'react';
77
import { useQuery as useQueryParam } from '../../../hooks/utils.hooks';
8-
import { Box, Grid, Typography, useTheme } from '@mui/material';
8+
import { Box, Grid, Typography, useMediaQuery, useTheme } from '@mui/material';
99
import {
1010
Availability,
1111
getMostRecentAvailabilities,
@@ -157,13 +157,15 @@ export const EventAvailabilityPage: React.FC = () => {
157157
}
158158
}, [userScheduleSettings, displayDate]);
159159

160+
const isMobile = useMediaQuery('(max-width:480px)');
161+
160162
// Auto-open modal for users who haven't confirmed (runs once when event loads)
161163
useEffect(() => {
162-
if (!hasAutoOpened && event && !hasConfirmed) {
164+
if (!hasAutoOpened && event && !hasConfirmed && !isMobile) {
163165
setEditAvailabilityOpen(true);
164166
setHasAutoOpened(true);
165167
}
166-
}, [event, hasAutoOpened, hasConfirmed]);
168+
}, [event, hasAutoOpened, hasConfirmed, isMobile]);
167169

168170
if (eventLoading || !event) return <LoadingIndicator />;
169171
if (eventError) return <ErrorPage error={eventErrorMsg} message={eventErrorMsg?.message} />;
@@ -225,7 +227,24 @@ export const EventAvailabilityPage: React.FC = () => {
225227
return `${hour}:00 AM`;
226228
};
227229

228-
// RENDER
230+
// MOBILE EDIT OPEN RENDER
231+
if (isMobile && editAvailabilityOpen) {
232+
return (
233+
<AvailabilityEditModal
234+
open={editAvailabilityOpen}
235+
onHide={() => setEditAvailabilityOpen(false)}
236+
header={editModalTitle}
237+
confirmedAvailabilities={confirmedAvailabilities}
238+
setConfirmedAvailabilities={setConfirmedAvailabilities}
239+
totalAvailabilities={deeplyCopy(userScheduleSettings.availabilities, availabilityTransformer) as Availability[]}
240+
initialDate={displayDate}
241+
onSubmit={handleConfirm}
242+
canChangeDateRange={false}
243+
/>
244+
);
245+
}
246+
247+
// RENDER NORMALLY
229248
return (
230249
<PageLayout
231250
title={workPackageNames}
@@ -356,15 +375,13 @@ export const EventAvailabilityPage: React.FC = () => {
356375
)}
357376
</Box>
358377
</Box>
359-
360378
<SingleAvailabilityModal
361379
open={viewAvailabilityOpen}
362380
onHide={() => setViewAvailabilityOpen(false)}
363381
header="My Availability"
364382
availabilites={userScheduleSettings.availabilities}
365383
initialDate={displayDate}
366384
/>
367-
368385
<AvailabilityEditModal
369386
open={editAvailabilityOpen}
370387
onHide={() => setEditAvailabilityOpen(false)}
@@ -376,7 +393,6 @@ export const EventAvailabilityPage: React.FC = () => {
376393
onSubmit={handleConfirm}
377394
canChangeDateRange={false}
378395
/>
379-
380396
{selectedSlot && (
381397
<ScheduleEventModal
382398
open={scheduleModalOpen}

src/frontend/src/pages/SettingsPage/UserScheduleSettings/Availability/AvailabilityEditModal.tsx

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import { Availability } from 'shared';
22
import NERModal from '../../../../components/NERModal';
33
import EditAvailability from './EditAvailability';
4+
import { Box, useMediaQuery } from '@mui/system';
5+
import PageLayout from '../../../../components/PageLayout';
6+
import NERFailButton from '../../../../components/NERFailButton';
7+
import NERSuccessButton from '../../../../components/NERSuccessButton';
48

59
interface DRCEditModalProps {
610
open: boolean;
@@ -30,6 +34,41 @@ const AvailabilityEditModal: React.FC<DRCEditModalProps> = ({
3034
onHide();
3135
};
3236

37+
const isMobile = useMediaQuery('(max-width:480px)');
38+
39+
if (isMobile && open) {
40+
return (
41+
<PageLayout title={header}>
42+
<EditAvailability
43+
editedAvailabilities={confirmedAvailabilities}
44+
setEditedAvailabilities={setConfirmedAvailabilities}
45+
totalAvailabilities={totalAvailabilities}
46+
canChangeDateRange={canChangeDateRange}
47+
initialDate={initialDate}
48+
/>
49+
50+
<Box
51+
sx={{
52+
position: 'fixed',
53+
bottom: 0,
54+
left: 0,
55+
right: 0,
56+
p: 2,
57+
display: 'flex',
58+
gap: 2,
59+
backgroundColor: 'background.paper'
60+
}}
61+
>
62+
<NERFailButton sx={{ flex: 1 }} onClick={onCancel}>
63+
CANCEL
64+
</NERFailButton>
65+
<NERSuccessButton sx={{ flex: 1 }} onClick={onSubmit}>
66+
SAVE
67+
</NERSuccessButton>
68+
</Box>
69+
</PageLayout>
70+
);
71+
}
3372
return (
3473
<NERModal
3574
open={open}
@@ -49,5 +88,4 @@ const AvailabilityEditModal: React.FC<DRCEditModalProps> = ({
4988
</NERModal>
5089
);
5190
};
52-
5391
export default AvailabilityEditModal;

src/frontend/src/pages/SettingsPage/UserScheduleSettings/Availability/EditAvailability.tsx

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,14 @@
1-
import { Box, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Typography } from '@mui/material';
1+
import {
2+
Box,
3+
Table,
4+
TableBody,
5+
TableCell,
6+
TableContainer,
7+
TableHead,
8+
TableRow,
9+
Typography,
10+
useMediaQuery
11+
} from '@mui/material';
212
import { useEffect, useState } from 'react';
313
import { HeatmapColors, enumToArray, REVIEW_TIMES } from '../../../../utils/design-review.utils';
414
import { addDaysToDate, Availability, getDayOfWeek, getMostRecentAvailabilities } from 'shared';
@@ -116,6 +126,8 @@ const EditAvailability: React.FC<EditAvailabilityProps> = ({
116126
bgcolor: 'background.paper'
117127
};
118128

129+
const isMobile = useMediaQuery('(max-width:480px)');
130+
119131
return (
120132
<Box sx={{ display: 'flex', flexDirection: 'column', height: '100%' }}>
121133
<Box display="flex" justifyContent="space-between" mb={1}>
@@ -128,8 +140,10 @@ const EditAvailability: React.FC<EditAvailabilityProps> = ({
128140
<TableContainer
129141
sx={{
130142
overflowX: 'auto',
131-
overflowY: 'hidden',
143+
overflowY: 'auto',
132144
maxWidth: '100%',
145+
maxHeight: '100%',
146+
scrollSnapType: 'x mandatory',
133147
flex: 1
134148
}}
135149
>
@@ -158,13 +172,15 @@ const EditAvailability: React.FC<EditAvailabilityProps> = ({
158172
>
159173
<TableHead>
160174
<TableRow>
161-
<TableCell sx={stickyLeft}></TableCell>
175+
<TableCell sx={{ ...stickyLeft, scrollSnapAlign: 'start' }}></TableCell>
162176
{currentlyDisplayedAvailabilities.map((availability, idx) => (
163-
<TableCell key={idx}>
177+
<TableCell key={idx} sx={{ scrollSnapAlign: 'start' }}>
164178
<Typography variant="body1" align="center" fontWeight="bold" sx={{ fontSize: 15 }}>
165-
{getDayOfWeek(availability.dateSet)}
179+
{!isMobile && getDayOfWeek(availability.dateSet)}
180+
{isMobile && getDayOfWeek(availability.dateSet).slice(0, 3)}
166181
<br />
167-
{datePipe(availability.dateSet)}
182+
{!isMobile && datePipe(availability.dateSet)}
183+
{isMobile && datePipe(availability.dateSet, false)}
168184
</Typography>
169185
</TableCell>
170186
))}
@@ -173,15 +189,15 @@ const EditAvailability: React.FC<EditAvailabilityProps> = ({
173189
<TableBody>
174190
{enumToArray(REVIEW_TIMES).map((time, timeIndex) => (
175191
<TableRow key={time}>
176-
<TableCell sx={{ ...stickyLeft, zIndex: 1 }}>
192+
<TableCell sx={{ ...stickyLeft, zIndex: 1, scrollSnapAlign: 'start' }}>
177193
<Typography variant="body1" align="center" sx={{ fontSize: 15 }}>
178194
{time}
179195
</Typography>
180196
</TableCell>
181197
{currentlyDisplayedAvailabilities.map((availability, dayIndex) => {
182198
const isAvailable = availability.availability.includes(timeIndex);
183199
return (
184-
<TableCell key={dayIndex} sx={{ p: 0 }}>
200+
<TableCell key={dayIndex} sx={{ p: 0, scrollSnapAlign: 'start' }}>
185201
<EventTimeSlot
186202
backgroundColor={isAvailable ? HeatmapColors[3] : HeatmapColors[0]}
187203
selected={false}
@@ -206,5 +222,4 @@ const EditAvailability: React.FC<EditAvailabilityProps> = ({
206222
</Box>
207223
);
208224
};
209-
210225
export default EditAvailability;

0 commit comments

Comments
 (0)