Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

S23 user privacy setting #1931

Closed
wants to merge 69 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
d3fe8db
implementing the dialog box for changing the office location - progre…
antoniavonto Jun 13, 2023
fee7cdc
restore the .env.development file
ArabellaJi Jun 13, 2023
e865d0d
implemented the dialog box for the editing office location for staff
antoniavonto Jun 14, 2023
8b89e66
fixed some previous issues wwith design
antoniavonto Jun 15, 2023
afb937a
implemented the dialog box for changing the fac/staff office hours
antoniavonto Jun 15, 2023
2a9cc2e
fixed a minor design issue
antoniavonto Jun 15, 2023
d4e2578
remove go.gordon link since fac do not need to change their office in…
Jun 16, 2023
2491ec4
progress on passing json object
antoniavonto Jun 16, 2023
cfbef08
Merge branch 'develop' into s23-allow-staff-edit-office-location
antoniavonto Jun 16, 2023
ec204ca
Turned the put request into patch and turned the parameter a json object
antoniavonto Jun 16, 2023
41f9705
turned the request from a put into a patch
antoniavonto Jun 16, 2023
231d8d8
changed back from a format only for testing
antoniavonto Jun 16, 2023
387eb17
Merge branch 'develop' into s23-edit-office-hours
antoniavonto Jun 20, 2023
5e0bb3c
Merge branch 'develop' into s23-allow-staff-edit-office-location
antoniavonto Jun 20, 2023
aa19407
remove value from office hours url
Jun 23, 2023
9fe778d
Merge branch 'develop' into s23-allow-staff-edit-office-location
antoniavonto Jun 23, 2023
961a633
Merge branch 'develop' into s23-edit-office-hours
antoniavonto Jun 23, 2023
1fb92f0
implemented searchField selector for the involvements
antoniavonto Jun 26, 2023
cfe54c3
removed comments and changed icon
antoniavonto Jun 26, 2023
ff1ada4
Merge branch 'develop' into s23-people-search-involvements
antoniavonto Jun 26, 2023
11b9742
changed env.develop back
antoniavonto Jun 26, 2023
a5fed05
remove unnecessary curly braces
antoniavonto Jun 26, 2023
8e1ad3e
Merge branch 'develop' into s23-people-search-involvements
antoniavonto Jun 26, 2023
62c3edf
continue project from MyProfile-Involvments-Clutter - resolved merge …
antoniavonto Jun 27, 2023
1b6331f
changed env.develop back
antoniavonto Jun 27, 2023
ad18733
changing put to patch of setMembershipPrivacy and changed toggleMembe…
antoniavonto Jun 27, 2023
e6e3390
porgress stoped due to error in testing
antoniavonto Jun 27, 2023
22a2a22
try to implement callBackFunction
antoniavonto Jun 28, 2023
3240588
remove the overall taggle and add a taggle for home phone
Jun 28, 2023
ac9b148
bug with the first involvement
antoniavonto Jun 28, 2023
6d94cf0
removed useEffect - now the visual updates
antoniavonto Jun 29, 2023
ad03263
Merge branch 'develop' into s23-clutter-involvements-profile
antoniavonto Jun 29, 2023
404c6c5
brought back changes removed only for testing
antoniavonto Jun 29, 2023
e6c5f23
fixed styling grid
antoniavonto Jun 29, 2023
43a6636
Merge branch 'develop' into s23-edit-office-hours
antoniavonto Jun 29, 2023
5f424d1
Merge branch 's23-edit-office-hours' of https://github.com/gordon-cs/…
antoniavonto Jun 29, 2023
96dd86f
Merge branch 'develop' into s23-allow-staff-edit-office-location
antoniavonto Jun 29, 2023
b9f6cbc
removed function createSanackbar
antoniavonto Jun 29, 2023
5946c2b
removed createSnackbar function for clarity
antoniavonto Jun 29, 2023
0ce40a1
changed handleUpdate to clean params when checkboxes are unchecked
antoniavonto Jun 29, 2023
38169b4
Merge pull request #1866 from gordon-cs/s23-allow-staff-edit-office-l…
antoniavonto Jun 29, 2023
f9e70fc
fix bug where the event info panel closes when you click on the add-t…
Jun 29, 2023
942f274
Merge branch 'develop' into s23-edit-office-hours
antoniavonto Jun 29, 2023
fe3bcc4
Update src/components/Profile/components/MembershipsList/components/M…
antoniavonto Jun 29, 2023
6774f8f
Merge branch 'develop' into s23-search-options-without-student-checkbox
antoniavonto Jun 29, 2023
f9e0153
Merge branch 'develop' into s23-people-search-involvements
antoniavonto Jun 29, 2023
83fafec
same package-lock.json as develop
antoniavonto Jun 29, 2023
266d525
addressed requested changes
antoniavonto Jun 29, 2023
5839829
Merge pull request #1904 from gordon-cs/s23-people-search-involvements
antoniavonto Jun 29, 2023
ff67717
Merge branch 'develop' into s23-clutter-involvements-profile
antoniavonto Jun 29, 2023
8fa7005
Merge pull request #1918 from gordon-cs/s23-clutter-involvements-profile
antoniavonto Jun 29, 2023
437f2a3
Merge branch 'develop' into s23-search-options-without-student-checkbox
antoniavonto Jun 29, 2023
93cce25
Merge pull request #1936 from gordon-cs/s23-search-options-without-st…
antoniavonto Jun 29, 2023
cbefb7d
Merge branch 'develop' into s23-edit-office-hours
antoniavonto Jun 29, 2023
61118e0
Merge pull request #1871 from gordon-cs/s23-edit-office-hours
antoniavonto Jun 29, 2023
41c6cc2
Merge branch 'develop' into s23-add-event-to-calendar-button-bug
mla04762 Jun 30, 2023
d79bf89
Merge pull request #1938 from gordon-cs/s23-add-event-to-calendar-but…
mla04762 Jun 30, 2023
661510b
remove the overall taggle and add a taggle for home phone
Jun 28, 2023
e2e190c
adding updateUserPrivacyDialog - not working yet
Jul 6, 2023
e083924
fix merge conflicts
Jul 6, 2023
f3514f0
using updateUserPrivacy function to update user privacy
Jul 7, 2023
192f155
debugging..
Jul 8, 2023
b609d96
finished select field
Jul 10, 2023
67d4188
working on get privacy setting
Jul 11, 2023
c02b89c
due with json object
Jul 11, 2023
99ba223
finished get privacy setting
Jul 11, 2023
40f6023
clean up code
Jul 11, 2023
73adf6a
students' homephones are always private
Jul 11, 2023
8949483
completed privacy settings for Home field
Jul 14, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/components/EventList/components/EventItem/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ const EventItem = ({ event }) => {
endTime={format(new Date(event.EndDate), 'HH:mm')}
timeZone="America/New_York"
description={event.Description}
onClick={() => setExpanded((e) => !e)}
></add-to-calendar-button>
)}
</CardContent>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
-ms-hyphens: auto;
-moz-hyphens: auto;
-webkit-hyphens: auto;
word-break: break-word;
word-break: keep-all;
flex-wrap: wrap;
a {
color: $primary-blue;
&:hover {
Expand Down Expand Up @@ -40,7 +41,7 @@
margin-right: 0.5rem;
}

@media (max-width: 500px) {
@media (max-width: $break-sm) {
.membership_info_card {
padding: 1.5rem 0rem;
flex-direction: column-reverse;
Expand All @@ -50,7 +51,6 @@
flex-direction: row-reverse;
padding: 0.5rem;
&_text {
// padding-right: 0rem !important;
border-left: 2px solid $primary-blue;
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,34 +1,83 @@
import { Divider, Grid, List, ListItem, Switch, Typography } from '@mui/material/';
import LockIcon from '@mui/icons-material/Lock';
import {
Divider,
Grid,
List,
ListItem,
Switch,
Typography,
Accordion,
AccordionSummary,
AccordionDetails,
} from '@mui/material/';
import useNetworkStatus from 'hooks/useNetworkStatus';
import { Link } from 'react-router-dom';
import styles from './MembershipInfoCard.module.css';
import membershipService from 'services/membership';
import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';

const MembershipInfoCard = ({ myProf, membership, onTogglePrivacy }) => {
const isOnline = useNetworkStatus();

const OnlineOnlyLink = ({ children }) => {
const showPrivate = membership.IsInvolvementPrivate || membership.Privacy;
if (isOnline) {
return (
<Link
className={`gc360_text_link ${
showPrivate ? styles.private_membership : styles.public_membership
}`}
to={`/activity/${membership.SessionCode}/${membership.ActivityCode}`}
>
{children}
</Link>
);
} else {
return (
<div className={`${showPrivate ? styles.private_membership : styles.public_membership}`}>
{children}
</div>
const PrivacyToggle = ({ element, createSnackbar }) => {
const toggleMembershipPrivacy = async (element) => {
try {
const update = await membershipService.setMembershipPrivacy(
element.MembershipID,
!element.Privacy,
);
element.Privacy = !element.Privacy;

if (update.Privacy === element.Privacy) {
createSnackbar(element.Privacy ? 'Membership Hidden' : 'Membership Shown', 'success');
} else {
createSnackbar(
element.Privacy ? 'Failed to Show Membership' : 'Failed to Hide Membership',
'error',
);
}
} catch {
createSnackbar('Privacy Change Failed', 'error');
}
};

return (
<Grid container item xs={4} alignItems="center">
<Grid item xs={12} align="center">
<Switch
onChange={() => toggleMembershipPrivacy(element)}
checked={!element.Privacy}
key={element.ActivityDescription + element.ActivityCode}
/>
</Grid>
<Grid item xs={12} align="center">
<Typography>{element.Privacy ? 'Private' : 'Public'}</Typography>
</Grid>
</Grid>
);
};

const OnlineOnlyLink = ({ element, children }) => {
const isOnline = useNetworkStatus();
const showPrivate = element.IsInvolvementPrivate || element.Privacy;
if (isOnline) {
return (
<Link
className={`gc360_text_link ${
showPrivate ? styles.private_membership : styles.public_membership
}`}
to={`/activity/${element.SessionCode}/${element.ActivityCode}`}
>
{children}
</Link>
);
} else {
return (
<div className={`${showPrivate ? styles.private_membership : styles.public_membership}`}>
{children}
</div>
);
}
};

const MembershipInfoCard = ({ myProf, membershipHistory, createSnackbar }) => {
const isOnline = useNetworkStatus();
return (
<>
<Grid
Expand All @@ -38,69 +87,57 @@ const MembershipInfoCard = ({ myProf, membership, onTogglePrivacy }) => {
className={styles.membership_info_card}
>
<Grid
container
item
xs={8}
sm={9}
lg={8}
xl={9}
justifyContent="flex-start"
alignItems="center"
xs={9}
sm={10}
lg={9}
xl={10}
className={styles.membership_info_card_description}
>
<Grid item xs={8}>
<List>
<ListItem className={styles.my_profile_info_card_description_text}>
<OnlineOnlyLink>
<Typography fontWeight="fontWeightBold">
{membership.ActivityDescription}
</Typography>
<Typography>{membership.SessionDescription}</Typography>
<Typography>{membership.ParticipationDescription}</Typography>
</OnlineOnlyLink>
</ListItem>
</List>
</Grid>

{myProf && (
<Grid container item xs={4} alignItems="center">
<Grid item xs={12} align="center">
{isOnline &&
(membership.IsInvolvementPrivate ? (
<LockIcon className={styles.lock_icon} />
) : (
<Switch
onChange={() => {
onTogglePrivacy(membership);
}}
checked={!membership.Privacy}
/>
))}
</Grid>
<Grid item xs={12} align="center">
<Typography>
{membership.Privacy || membership.IsInvolvementPrivate ? 'Private' : 'Public'}
</Typography>
</Grid>
</Grid>
)}
<Accordion>
<AccordionSummary expandIcon={<KeyboardArrowDownIcon />}>
<Typography fontWeight="fontWeightBold">
{membershipHistory.ActivityDescription}
</Typography>
</AccordionSummary>
<AccordionDetails>
<List>
{membershipHistory.Memberships.map((session) => (
<ListItem key={membershipHistory.ActivityCode}>
<Grid container xs={12} className={styles.membership_info_card_description}>
<Grid item xs={7}>
<OnlineOnlyLink element={session}>
<Typography>{session.SessionDescription}</Typography>
<Typography>{session.ParticipationDescription}</Typography>
</OnlineOnlyLink>
</Grid>
<Grid item xs={4}>
{myProf && (
<PrivacyToggle element={session} createSnackbar={createSnackbar} />
)}
</Grid>
</Grid>
</ListItem>
))}
</List>
</AccordionDetails>
</Accordion>
</Grid>

<Grid
container
item
xs={4}
sm={3}
lg={4}
xl={3}
xs={3}
sm={2}
lg={3}
xl={2}
className={styles.membership_info_card_image}
alignItems="center"
container
>
<OnlineOnlyLink>
<OnlineOnlyLink element={membershipHistory.Memberships[0]}>
<img
src={membership.ActivityImagePath}
src={membershipHistory.ActivityImagePath}
alt=""
className={isOnline ? styles.active : ''}
className={isOnline ? 'active' : ''}
/>
</OnlineOnlyLink>
</Grid>
Expand Down
52 changes: 11 additions & 41 deletions src/components/Profile/components/MembershipsList/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import { Button, Card, CardContent, CardHeader, Grid, List, Typography } from '@
import GordonLoader from 'components/Loader';
import { useEffect, useState } from 'react';
import { Link } from 'react-router-dom';
import activity from 'services/activity';
import membershipService from 'services/membership';
import MembershipInfoCard from './components/MembershipInfoCard';
import styles from './MembershipsList.module.css';
Expand All @@ -19,6 +18,7 @@ import styles from './MembershipsList.module.css';
const MembershipsList = ({ username, myProf, createSnackbar }) => {
const [memberships, setMemberships] = useState([]);
const [loading, setLoading] = useState(true);
const [membershipHistories, setMembershipHistories] = useState([]);

useEffect(() => {
async function loadMemberships() {
Expand All @@ -27,22 +27,19 @@ const MembershipsList = ({ username, myProf, createSnackbar }) => {
const memberships = await membershipService.get({ username, sessionCode: '*' });

if (myProf) {
await Promise.all(
memberships.map(async (membership) => {
const involvement = await activity.get(membership.ActivityCode);
membership.IsInvolvementPrivate = involvement.Privacy;
}),
);
const myMemberships = await membershipService.groupByActivityCode(username);
setMembershipHistories(myMemberships);
} else {
const publicMemberships = await membershipService.getPublicMemberships(username);
setMembershipHistories(publicMemberships);
}

setMemberships(memberships);
setLoading(false);
}
loadMemberships();
}, [myProf, username]);

const MembershipsList = () => {
if (memberships.length === 0) {
if (membershipHistories.length === 0) {
return (
<Link to={`/involvements`}>
<Typography variant="body2" className={styles.noMemberships}>
Expand All @@ -51,44 +48,17 @@ const MembershipsList = ({ username, myProf, createSnackbar }) => {
</Link>
);
} else {
return memberships.map((membership) => (
return membershipHistories.map((membership) => (
<MembershipInfoCard
myProf={myProf}
membership={membership}
key={membership.MembershipID}
onTogglePrivacy={toggleMembershipPrivacy}
membershipHistory={membership}
key={membership.ActivityCode}
createSnackbar={createSnackbar}
/>
));
}
};

const toggleMembershipPrivacy = async (membership) => {
try {
let updated = await membershipService.setMembershipPrivacy(
membership.MembershipID,
!membership.Privacy,
);
if (updated.Privacy !== membership.Privacy) {
createSnackbar(membership.Privacy ? 'Membership Shown' : 'Membership Hidden', 'success');
} else {
createSnackbar(
membership.Privacy ? 'Failed to Show Membership' : 'Failed to Hide Membership',
'error',
);
}
setMemberships(
memberships.map((m) => {
if (m.MembershipID === membership.MembershipID) {
m.Privacy = !m.Privacy;
}
return m;
}),
);
} catch {
createSnackbar('Privacy Change Failed', 'error');
}
};

if (loading) {
return <GordonLoader />;
}
Expand Down
Loading
Loading