Skip to content

Commit

Permalink
liaison dashboard
Browse files Browse the repository at this point in the history
  • Loading branch information
lucia-gomez committed Sep 30, 2024
1 parent 23bcb46 commit 198e100
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,11 @@ export default function BookingActions({
return options;
}, [status]);

const liaisonOptions = useMemo(
() => [Actions.FIRST_APPROVE, Actions.DECLINE],
[status]
);

const paOptions = useMemo(() => {
let options = [];

Expand Down Expand Up @@ -236,6 +241,8 @@ export default function BookingActions({
return userOptions;
case PageContextLevel.PA:
return paOptions;
case PageContextLevel.LIAISON:
return liaisonOptions;
default:
return adminOptions;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import {
fetchAllFutureBookingStatus,
} from "@/components/src/server/db";

import { Liaisons } from "../admin/components/Liaisons";
import { TableNames } from "@/components/src/policy";
import { clientFetchAllDataFromCollection } from "@/lib/firebase/firebase";
import { useAuth } from "@/components/src/client/routes/components/AuthProvider";
Expand Down Expand Up @@ -106,10 +107,11 @@ export const DatabaseProvider = ({
// page permission updates with respect to user email, admin list, PA list
const pagePermission = useMemo<PagePermission>(() => {
if (!userEmail) return PagePermission.BOOKING;

if (adminUsers.map((admin) => admin.email).includes(userEmail))
return PagePermission.ADMIN;
else if (paUsers.map((pa) => pa.email).includes(userEmail))
if (liaisonUsers.map((liaison) => liaison.email).includes(userEmail)) {
return PagePermission.LIAISON;
} else if (paUsers.map((pa) => pa.email).includes(userEmail))
return PagePermission.PA;
else return PagePermission.BOOKING;
}, [userEmail, adminUsers, paUsers]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ export const Bookings: React.FC<BookingsProps> = ({ pageContext }) => {
bookings,
bookingsLoading,
bookingStatuses,
liaisonUsers,
userEmail,
reloadBookings,
reloadBookingStatuses,
Expand Down Expand Up @@ -73,15 +74,16 @@ export const Bookings: React.FC<BookingsProps> = ({ pageContext }) => {
}, []);

const allowedStatuses: BookingStatusLabel[] = useMemo(() => {
const paViewStatuses = [
BookingStatusLabel.APPROVED,
BookingStatusLabel.CHECKED_IN,
BookingStatusLabel.CHECKED_OUT,
BookingStatusLabel.NO_SHOW,
BookingStatusLabel.WALK_IN,
];
if (pageContext === PageContextLevel.PA) {
return paViewStatuses;
return [
BookingStatusLabel.APPROVED,
BookingStatusLabel.CHECKED_IN,
BookingStatusLabel.CHECKED_OUT,
BookingStatusLabel.NO_SHOW,
BookingStatusLabel.WALK_IN,
];
} else if (pageContext === PageContextLevel.LIAISON) {
return [BookingStatusLabel.REQUESTED];
} else {
return Object.values(BookingStatusLabel);
}
Expand All @@ -106,12 +108,24 @@ export const Bookings: React.FC<BookingsProps> = ({ pageContext }) => {
);

// filter based on user view
if (pageContext === PageContextLevel.USER)
if (pageContext === PageContextLevel.USER) {
filtered = rows.filter((row) => row.email === userEmail);
else if (pageContext === PageContextLevel.PA) {
filtered = rows.filter((row) => allowedStatuses.includes(row.status));
} else if (pageContext === PageContextLevel.LIAISON) {
const liaisonMatches = liaisonUsers.filter(
(user) => user.email === userEmail
);
if (liaisonMatches.length > 0) {
const liaisonDepartments = liaisonMatches.map(
(user) => user.department
);
filtered = rows.filter((row) =>
liaisonDepartments.includes(row.department)
);
}
}

filtered = filtered.filter((row) => allowedStatuses.includes(row.status));

if (pageContext >= PageContextLevel.PA) {
// PA and Admin
// filter by selected PA date range
Expand Down Expand Up @@ -154,6 +168,22 @@ export const Bookings: React.FC<BookingsProps> = ({ pageContext }) => {
</Box>
);
}

if (pageContext === PageContextLevel.LIAISON) {
return (
<Box
sx={{
color: "rgba(0,0,0,0.6)",
display: "flex",
justifyContent: "flex-start",
paddingLeft: "16px",
}}
>
Department Requests
</Box>
);
}

return (
<BookingTableFilters
selectedStatuses={statusFilters}
Expand Down
29 changes: 20 additions & 9 deletions booking-app/components/src/client/routes/components/navBar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,9 @@ export default function NavBar() {
case PagePermission.ADMIN:
router.push("/admin");
break;
case PagePermission.LIAISON:
router.push("/liaison");
break;
}
};

Expand All @@ -100,6 +103,8 @@ export default function NavBar() {
setSelectedView(PagePermission.PA);
} else if (pathname.includes("/admin")) {
setSelectedView(PagePermission.ADMIN);
} else if (pathname.includes("/liaison")) {
setSelectedView(PagePermission.LIAISON);
}
}, [pathname]);

Expand All @@ -117,22 +122,28 @@ export default function NavBar() {
const dropdown = useMemo(() => {
if (
pagePermission !== PagePermission.ADMIN &&
pagePermission !== PagePermission.PA
pagePermission !== PagePermission.PA &&
pagePermission !== PagePermission.LIAISON
) {
return null;
}

const showPA =
pagePermission === PagePermission.PA ||
pagePermission === PagePermission.ADMIN;
const showLiaison =
pagePermission === PagePermission.LIAISON ||
pagePermission === PagePermission.ADMIN;
const showAdmin = pagePermission === PagePermission.ADMIN;

return (
<Select size="small" value={selectedView} onChange={handleRoleChange}>
<MenuItem value={PagePermission.BOOKING}>
{PagePermission.BOOKING}
</MenuItem>
<MenuItem value={PagePermission.PA}>{PagePermission.PA}</MenuItem>
{pagePermission === PagePermission.ADMIN && (
<MenuItem value={PagePermission.ADMIN}>
{PagePermission.ADMIN}
</MenuItem>
<MenuItem value={PagePermission.BOOKING}>User</MenuItem>
{showPA && <MenuItem value={PagePermission.PA}>PA</MenuItem>}
{showLiaison && (
<MenuItem value={PagePermission.LIAISON}>Liaison</MenuItem>
)}
{showAdmin && <MenuItem value={PagePermission.ADMIN}>Admin</MenuItem>}
</Select>
);
}, [pagePermission, selectedView]);
Expand Down
7 changes: 4 additions & 3 deletions booking-app/components/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -160,9 +160,10 @@ export type PaUser = {
};

export enum PagePermission {
ADMIN = "Admin",
BOOKING = "User",
PA = "PA",
BOOKING = 0,
PA,
LIAISON,
ADMIN,
}

export enum PageContextLevel {
Expand Down

0 comments on commit 198e100

Please sign in to comment.