Skip to content

Commit b88d005

Browse files
committed
Add edit rider modal to student page
1 parent 6ec90b3 commit b88d005

3 files changed

Lines changed: 90 additions & 68 deletions

File tree

frontend/src/components/Modal/RiderModal.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,13 @@ const RiderModal = ({
7171
return (
7272
<>
7373
<Modal
74-
title={!existingRider ? 'Add a Student' : 'Edit a Student'}
74+
title={
75+
!existingRider
76+
? 'Add a Student'
77+
: isRiderWeb
78+
? 'Edit Profile'
79+
: 'Edit a Student'
80+
}
7581
isOpen={isOpen}
7682
currentPage={0}
7783
onClose={closeModal}

frontend/src/components/Modal/RiderModalInfo.tsx

Lines changed: 70 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -251,23 +251,24 @@ const RiderModalInfo: React.FC<ModalFormProps> = ({
251251
)}
252252
</div>
253253

254-
<div className={cn(styles.gridR1, styles.gridCSmall3)}>
255-
<Label className={styles.label} htmlFor="netid">
256-
NetID:{' '}
257-
</Label>
258-
<Input
259-
id="netid"
260-
{...register('netid', {
261-
required: true,
262-
pattern: /^[a-zA-Z]+[0-9]+$/,
263-
})}
264-
type="text"
265-
disabled={isStudentEditing}
266-
className={styles.firstRow}
267-
aria-required="true"
268-
/>
269-
{errors.netid && <p className={styles.error}>Invalid NetID</p>}
270-
</div>
254+
{!isStudentEditing && (
255+
<div className={cn(styles.gridR1, styles.gridCSmall3)}>
256+
<Label className={styles.label} htmlFor="netid">
257+
NetID:{' '}
258+
</Label>
259+
<Input
260+
id="netid"
261+
{...register('netid', {
262+
required: true,
263+
pattern: /^[a-zA-Z]+[0-9]+$/,
264+
})}
265+
type="text"
266+
className={styles.firstRow}
267+
aria-required="true"
268+
/>
269+
{errors.netid && <p className={styles.error}>Invalid NetID</p>}
270+
</div>
271+
)}
271272

272273
<div className={cn(styles.gridR2, styles.gridCBig1)}>
273274
<Label className={styles.label} htmlFor="phoneNumber">
@@ -354,55 +355,55 @@ const RiderModalInfo: React.FC<ModalFormProps> = ({
354355
</div>
355356
</div>
356357

357-
<div className={cn(styles.gridR3, styles.gridCAll)}>
358-
<p>Duration</p>
359-
<div className={styles.lastRow}>
360-
<div>
361-
<Label className={styles.label} htmlFor="joinDate">
362-
Join Date:{' '}
363-
</Label>
364-
<Input
365-
id="joinDate"
366-
{...register('joinDate', { required: true })}
367-
type="date"
368-
aria-required="true"
369-
disabled={isStudentEditing}
370-
className={styles.riderDate}
371-
/>
372-
{errors.joinDate && (
373-
<p className={styles.error}>Please enter a join date</p>
374-
)}
375-
</div>
376-
<div className={styles.to}>
377-
<p></p>
378-
</div>
379-
<div>
380-
<Label className={styles.label} htmlFor="endDate">
381-
End Date:{' '}
382-
</Label>
383-
<Input
384-
id="endDate"
385-
{...register('endDate', {
386-
required: true,
387-
validate: (endDate) => {
388-
const joinDate = getValues('joinDate');
389-
return joinDate < endDate;
390-
},
391-
})}
392-
type="date"
393-
aria-required="true"
394-
disabled={isStudentEditing}
395-
className={styles.riderDate}
396-
/>
397-
{errors.endDate?.type === 'required' && (
398-
<p className={styles.error}>Please enter an end date</p>
399-
)}
400-
{errors.endDate?.type === 'validate' && (
401-
<p className={styles.error}>Invalid end time</p>
402-
)}
358+
{!isStudentEditing && (
359+
<div className={cn(styles.gridR3, styles.gridCAll)}>
360+
<p>Duration</p>
361+
<div className={styles.lastRow}>
362+
<div>
363+
<Label className={styles.label} htmlFor="joinDate">
364+
Join Date:{' '}
365+
</Label>
366+
<Input
367+
id="joinDate"
368+
{...register('joinDate', { required: true })}
369+
type="date"
370+
aria-required="true"
371+
className={styles.riderDate}
372+
/>
373+
{errors.joinDate && (
374+
<p className={styles.error}>Please enter a join date</p>
375+
)}
376+
</div>
377+
<div className={styles.to}>
378+
<p></p>
379+
</div>
380+
<div>
381+
<Label className={styles.label} htmlFor="endDate">
382+
End Date:{' '}
383+
</Label>
384+
<Input
385+
id="endDate"
386+
{...register('endDate', {
387+
required: true,
388+
validate: (endDate) => {
389+
const joinDate = getValues('joinDate');
390+
return joinDate < endDate;
391+
},
392+
})}
393+
type="date"
394+
aria-required="true"
395+
className={styles.riderDate}
396+
/>
397+
{errors.endDate?.type === 'required' && (
398+
<p className={styles.error}>Please enter an end date</p>
399+
)}
400+
{errors.endDate?.type === 'validate' && (
401+
<p className={styles.error}>Invalid end time</p>
402+
)}
403+
</div>
403404
</div>
404405
</div>
405-
</div>
406+
)}
406407
</div>
407408

408409
<div className={styles.buttonContainer}>
@@ -415,7 +416,11 @@ const RiderModalInfo: React.FC<ModalFormProps> = ({
415416
Cancel
416417
</Button>
417418
<Button type="submit" className={styles.submit}>
418-
{isEditing ? 'Edit a Student' : 'Add a Student'}
419+
{isStudentEditing
420+
? 'Save Changes'
421+
: isEditing
422+
? 'Edit a Student'
423+
: 'Add a Student'}
419424
</Button>
420425
</div>
421426
</form>

frontend/src/pages/Rider/Settings.tsx

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
1-
import { useContext, useEffect } from 'react';
1+
import { useContext, useEffect, useState } from 'react';
22
import UserDetail, {
33
UserContactInfo,
44
} from '../../components/UserDetail/legacy/UserDetail';
55
import { phone, mail } from '../../icons/userInfo/index';
66
import AuthContext from '../../context/auth';
77
import pageStyles from '../Admin/page.module.css';
88
import { RiderType } from '@carriage-web/shared/types/rider';
9+
import RiderModal from '../../components/Modal/RiderModal';
10+
import { Button } from '../../components/FormElements/FormElements';
911

1012
const Settings = () => {
1113
const { user } = useContext(AuthContext);
1214
const netId = user?.email.split('@')[0] || '';
15+
const [isEditOpen, setIsEditOpen] = useState(false);
1316

1417
useEffect(() => {
1518
document.title = 'Settings - Carriage';
@@ -19,7 +22,9 @@ const Settings = () => {
1922
<main id="main">
2023
<div className={pageStyles.pageTitle}>
2124
<h1 className={pageStyles.header}>Settings</h1>
22-
<div className={pageStyles.rightSection}></div>
25+
<div className={pageStyles.rightSection}>
26+
<Button onClick={() => setIsEditOpen(true)}>Edit Profile</Button>
27+
</div>
2328
</div>
2429
<UserDetail
2530
firstName={user?.firstName || ''}
@@ -36,6 +41,12 @@ const Settings = () => {
3641
/>
3742
<UserContactInfo icon={mail} alt="Email" text={user?.email || ''} />
3843
</UserDetail>
44+
<RiderModal
45+
existingRider={user as RiderType}
46+
isRiderWeb={true}
47+
isOpen={isEditOpen}
48+
setIsOpen={setIsEditOpen}
49+
/>
3950
</main>
4051
);
4152
};

0 commit comments

Comments
 (0)