diff --git a/package.json b/package.json index 0cd06b1..a49ba8e 100644 --- a/package.json +++ b/package.json @@ -81,4 +81,4 @@ "resolutions": { "pdfjs-dist": "^4.8.69" } -} +} \ No newline at end of file diff --git a/src/common/orgs.ts b/src/common/orgs.ts index ba1091e..31d0bb9 100644 --- a/src/common/orgs.ts +++ b/src/common/orgs.ts @@ -27,4 +27,5 @@ export const CommitteeList = [ "Corporate Committee", "Marketing Committee", ] as const; -export const OrganizationList = ["ACM", ...SIGList, ...CommitteeList]; + +export const OrganizationList = ["ACM", ...SIGList, ...CommitteeList] as const; diff --git a/src/common/types/iam.ts b/src/common/types/iam.ts index 48756a5..32ba09c 100644 --- a/src/common/types/iam.ts +++ b/src/common/types/iam.ts @@ -1,3 +1,4 @@ +import { OrganizationList } from "../orgs.js"; import { AppRoles } from "../roles.js"; import { z } from "zod"; @@ -75,3 +76,4 @@ export const entraProfilePatchRequest = z.object({ }); export type ProfilePatchRequest = z.infer; + diff --git a/src/ui/Router.tsx b/src/ui/Router.tsx index 5e8528e..a06ee09 100644 --- a/src/ui/Router.tsx +++ b/src/ui/Router.tsx @@ -17,6 +17,7 @@ import { ScanTicketsPage } from './pages/tickets/ScanTickets.page'; import { SelectTicketsPage } from './pages/tickets/SelectEventId.page'; import { ViewTicketsPage } from './pages/tickets/ViewTickets.page'; import { ManageIamPage } from './pages/iam/ManageIam.page'; +import { ScreenPage } from './pages/screen/Screen.page'; import { ManageProfilePage } from './pages/profile/ManageProfile.page'; import { ManageStripeLinksPage } from './pages/stripe/ViewLinks.page'; @@ -158,6 +159,10 @@ const authenticatedRouter = createBrowserRouter([ path: '/tickets/manage/:eventId', element: , }, + { + path: '/iam/leads', + element: , + }, { path: '/stripe', element: , diff --git a/src/ui/package.json b/src/ui/package.json index 3a63ed1..f84bcde 100644 --- a/src/ui/package.json +++ b/src/ui/package.json @@ -21,19 +21,22 @@ "dependencies": { "@azure/msal-browser": "^3.20.0", "@azure/msal-react": "^2.0.22", - "@mantine/core": "^7.12.0", - "@mantine/dates": "^7.12.0", + "@emotion/react": "^11.14.0", + "@mantine/core": "^7.16.3", + "@mantine/dates": "^7.16.3", "@mantine/form": "^7.12.0", - "@mantine/hooks": "^7.12.0", + "@mantine/hooks": "^7.16.3", "@mantine/notifications": "^7.12.0", - "@tabler/icons-react": "^3.29.0", + "@tabler/icons-react": "^3.30.0", "@ungap/with-resolvers": "^0.1.0", "axios": "^1.7.3", - "dayjs": "^1.11.12", + "clsx": "^2.1.1", + "dayjs": "^1.11.13", "dotenv": "^16.4.5", "dotenv-cli": "^8.0.0", "html5-qrcode": "^2.3.8", "jsqr": "^1.4.0", + "mantine-react-table": "^2.0.0-beta.8", "pdfjs-dist": "^4.5.136", "pluralize": "^8.0.0", "react": "^18.3.1", diff --git a/src/ui/pages/screen/Screen.page.tsx b/src/ui/pages/screen/Screen.page.tsx new file mode 100644 index 0000000..b76910d --- /dev/null +++ b/src/ui/pages/screen/Screen.page.tsx @@ -0,0 +1,412 @@ +// import { Text, Button, Table, Modal, Group, Transition, ButtonGroup } from '@mantine/core'; +import { useDisclosure } from '@mantine/hooks'; +import { notifications } from '@mantine/notifications'; +import { IconPlus, IconTrash } from '@tabler/icons-react'; +// import dayjs from 'dayjs'; +import React, { useEffect, useState } from 'react'; +// import { useNavigate } from 'react-router-dom'; +import { z } from 'zod'; + +// import { capitalizeFirstLetter } from './ManageEvent.page.js'; +import FullScreenLoader from '@ui/components/AuthContext/LoadingScreen'; +import { AuthGuard } from '@ui/components/AuthGuard'; +import { AppRoles } from '@common/roles.js'; +import { OrganizationList } from '@common/orgs'; +// import { User, UserName, UserOrg } from '@common/types/iam'; +import { useApi } from '@ui/util/api'; +import { UserProfileDataBase } from '@common/types/msGraphApi'; +import { ScreenComponent } from './ScreenComponent'; +import { Button, ButtonGroup, Group, Modal, Table, Transition } from '@mantine/core'; + +// const repeatOptions = ['weekly', 'biweekly'] as const; + +// export type EventGetResponse = z.infer; +// const getEventsSchema = z.array(getEventSchema); +// export type EventsGetResponse = z.infer; +const userSchema = z.object({ + netid: z.string().min(1), + org: z.enum(OrganizationList), + firstName: z.string().min(1), + middleName: z.string().optional(), + lastName: z.string().min(1), +}); +export type User = z.infer; + +export const ScreenPage: React.FC = () => { + // const graphApi = useApi('msGraphApi'); + // const [userList, setUserList] = useState([]); + // const [opened, { open, close }] = useDisclosure(false); + // const [userRemoved, setRemoveUser] = useState(null); + + // // const renderTableRow = (user: User) => { + + // const renderTableRow = (user: UserProfileDataBase) => { + // return ( + // + // {(styles) => ( + // + // {user.displayName} + // {user.givenName} + // {user.surname} + // {user.mail} + // {user.otherMails} + // {user.userPrincipalName} + // + // )} + // + // ); + // }; + + // useEffect(() => { + // const getUsers = async () => { + // const raw = (await graphApi.get('/v1.0/me?$select=userPrincipalName,givenName,surname,displayName,org,mail')).data as UserProfileDataBase; + // // const raw = (await graphApi.get('/v1.0/me?$select=userPrincipalName,givenName,surname,displayName,organizations,mail')).data; + // // console.log(raw); + // // print(raw); + // setUserList([raw]); + // // const response = await api.get('/api/v1/events'); + // // const upcomingEvents = await api.get('/api/v1/events?upcomingOnly=true'); + // // const upcomingEventsSet = new Set(upcomingEvents.data.map((x: EventGetResponse) => x.id)); + // // const events = response.data; + // // events.sort((a: User, b: User) => { + // // return a.start.localeCompare(b.start); + // // }); + // // const enrichedResponse = response.data.map((item: EventGetResponse) => { + // // if (upcomingEventsSet.has(item.id)) { + // // return { ...item, upcoming: true }; + // // } + // // return { ...item, upcoming: false }; + // // }); + + // // get request for user orgs + // // const userOrgsResponse: UserOrg[] = [ + // // // { netid: 'johnd01', org: 'SIGMusic' }, + // // // { netid: 'miker44', org: 'SIGPLAN' }, + // // // { netid: 'chrisb19', org: 'SIGCHI' }, + // // // { netid: 'ethanw12', org: 'SIGecom' }, + // // // { netid: 'emilyh54', org: 'SIGRobotics' }, + // // // { netid: 'juliel08', org: 'SIGGRAPH' }, + // // // { netid: 'rachelb03', org: 'GameBuilders' }, + // // // { netid: 'ashleyc28', org: 'SIGNLL' }, + // // // { netid: 'briand77', org: 'SIGma' }, + // // // { netid: 'meganf65', org: 'SIGPolicy' }, + // // // { netid: 'danielh04', org: 'SIGARCH' }, + // // // { netid: 'lindam29', org: 'SIGMobile' }, + // // // { netid: 'paulf31', org: 'SIGMusic' }, + // // // { netid: 'markl13', org: 'SIGCHI' }, + // // // { netid: 'carolynb59', org: 'ACM' }, + // // // { netid: 'nataliep71', org: 'SIGPolicy' }, + + // // { netid: 'ethanc12', org: 'Infrastructure Committee' }, + // // // { netid: 'sarahg23', org: 'SIGQuantum' }, + // // // { netid: 'annaw02', org: 'SIGMobile' }, + // // // { netid: 'laurenp87', org: 'SIGPwny' }, + // // // { netid: 'kevink11', org: 'Infrastructure Committee' }, + // // // { netid: 'mattt92', org: 'SIGtricity' }, + // // // { netid: 'stephenj45', org: 'SIGAIDA' }, + // // // { netid: 'victorc16', org: 'GLUG' }, + // // // { netid: 'susana80', org: 'SIGPwny' }, + // // // { netid: 'patrickh37', org: 'SIGQuantum' }, + // // ]; + + // // // // retrieve from azure active directory (aad) + // // const userNamesResponse: UserName[] = [ + // // // { netid: 'johnd01', firstName: 'John', lastName: 'Doe' }, + // // // { netid: 'miker44', firstName: 'Michael', lastName: 'Roberts' }, + // // // { netid: 'chrisb19', firstName: 'Christopher', lastName: 'Brown' }, + // // // { netid: 'ethanw12', firstName: 'Ethan', lastName: 'Wong' }, + // // // { netid: 'emilyh54', firstName: 'Emily', lastName: 'Hernandez' }, + // // // { netid: 'juliel08', firstName: 'Julie', lastName: 'Lopez' }, + // // // { netid: 'rachelb03', firstName: 'Rachel', lastName: 'Bell' }, + // // // { netid: 'ashleyc28', firstName: 'Ashley', lastName: 'Clark' }, + // // // { netid: 'briand77', firstName: 'Brian', lastName: 'Davis' }, + // // // { netid: 'meganf65', firstName: 'Megan', lastName: 'Flores' }, + // // // { netid: 'danielh04', firstName: 'Daniel', lastName: 'Hughes' }, + // // // { netid: 'lindam29', firstName: 'Linda', lastName: 'Martinez' }, + // // // { netid: 'paulf31', firstName: 'Paul', lastName: 'Fisher' }, + // // // { netid: 'markl13', firstName: 'Mark', lastName: 'Lewis' }, + // // // { netid: 'carolynb59', firstName: 'Carolyn', lastName: 'Barnes' }, + // // // { netid: 'nataliep71', firstName: 'Natalie', lastName: 'Price' }, + + // // { netid: 'ethanc12', firstName: 'Ethan', middleName: 'Yuting', lastName: 'Chang' }, + // // // { netid: 'sarahg23', firstName: 'Sarah', middleName: 'Grace', lastName: 'Gonzalez' }, + // // // { netid: 'annaw02', firstName: 'Anna', middleName: 'Marie', lastName: 'Williams' }, + // // // { netid: 'laurenp87', firstName: 'Lauren', middleName: 'Patricia', lastName: 'Perez' }, + // // // { netid: 'kevink11', firstName: 'Kevin', middleName: 'Lee', lastName: 'Kim' }, + // // // { netid: 'mattt92', firstName: 'Matthew', middleName: 'Thomas', lastName: 'Taylor' }, + // // // { netid: 'stephenj45', firstName: 'Stephen', middleName: 'James', lastName: 'Johnson' }, + // // // { netid: 'victorc16', firstName: 'Victor', middleName: 'Charles', lastName: 'Carter' }, + // // // { netid: 'susana80', firstName: 'Susan', middleName: 'Ann', lastName: 'Anderson' }, + // // // { netid: 'patrickh37', firstName: 'Patrick', middleName: 'Henry', lastName: 'Hill' }, + // // ]; + + // // const mergedResponse: User[] = userOrgsResponse.map((orgObj) => { + // // const nameObj = userNamesResponse.find((name) => name.netid === orgObj.netid); + // // return { ...orgObj, ...nameObj } as User; + // // }); + + // // setUserList(mergedResponse); + // }; + // getUsers(); + // }, []); + + // return ( + // + // {/* {userRemoved && ( + // { + // setRemoveUser(null); + // close(); + // }} + // title="Confirm action" + // > + // + // Are you sure you want to remove the user {userRemoved?.netid}? + // + //
+ // + // + // + //
+ // )} */} + // + // + // + // NetID + // First Name + // Middle Name + // Last Name + // Organization + // Actions + // + // + // {userList.map(renderTableRow)} + //
+ //
+ // ); + + return ; +}; + +// const [userList, setUserList] = useState([]); +// const [opened, { open, close }] = useDisclosure(false); +// // const [showPrevious, { toggle: togglePrevious }] = useDisclosure(false); // Changed default to false +// const [userRemoved, setRemoveUser] = useState(null); +// // const navigate = useNavigate(); + +// const renderTableRow = (user: User) => { +// // const shouldShow = event.upcoming || (!event.upcoming && showPrevious); + +// return ( +// // +// +// {(styles) => ( +// // +// +// {user.netid} +// {user.firstName} +// {user.middleName} +// {user.lastName} +// {user.org} +// {/* {dayjs(event.start).format('MMM D YYYY hh:mm')} +// {event.end ? dayjs(event.end).format('MMM D YYYY hh:mm') : 'N/A'} +// {event.location} +// {event.description} +// {event.host} +// {event.featured ? 'Yes' : 'No'} */} +// {/* {capitalizeFirstLetter(event.repeats || 'Never')} */} +// +// +// {/* */} +// +// +// +// +// )} +// +// ); +// }; + +// useEffect(() => { +// const getUsers = async () => { +// // const response = await api.get('/api/v1/events'); +// // const upcomingEvents = await api.get('/api/v1/events?upcomingOnly=true'); +// // const upcomingEventsSet = new Set(upcomingEvents.data.map((x: EventGetResponse) => x.id)); +// // const events = response.data; +// // events.sort((a: User, b: User) => { +// // return a.start.localeCompare(b.start); +// // }); +// // const enrichedResponse = response.data.map((item: EventGetResponse) => { +// // if (upcomingEventsSet.has(item.id)) { +// // return { ...item, upcoming: true }; +// // } +// // return { ...item, upcoming: false }; +// // }); + +// // get request for user orgs +// const userOrgsResponse = [ +// { netid: 'johnd01', org: 'SIGMusic' }, +// { netid: 'miker44', org: 'SIGPLAN' }, +// { netid: 'chrisb19', org: 'SIGCHI' }, +// { netid: 'ethanw12', org: 'SIGecom' }, +// { netid: 'emilyh54', org: 'SIGRobotics' }, +// { netid: 'juliel08', org: 'SIGGRAPH' }, +// { netid: 'rachelb03', org: 'GameBuilders' }, +// { netid: 'ashleyc28', org: 'SIGNLL' }, +// { netid: 'briand77', org: 'SIGma' }, +// { netid: 'meganf65', org: 'SIGPolicy' }, +// { netid: 'danielh04', org: 'SIGARCH' }, +// { netid: 'lindam29', org: 'SIGMobile' }, +// { netid: 'paulf31', org: 'SIGMusic' }, +// { netid: 'markl13', org: 'SIGCHI' }, +// { netid: 'carolynb59', org: 'ACM' }, +// { netid: 'nataliep71', org: 'SIGPolicy' }, + +// { netid: 'ethanc12', org: 'Infrastructure Committee' }, +// { netid: 'sarahg23', org: 'SIGQuantum' }, +// { netid: 'annaw02', org: 'SIGMobile' }, +// { netid: 'laurenp87', org: 'SIGPwny' }, +// { netid: 'kevink11', org: 'Infrastructure Committee' }, +// { netid: 'mattt92', org: 'SIGtricity' }, +// { netid: 'stephenj45', org: 'SIGAIDA' }, +// { netid: 'victorc16', org: 'GLUG' }, +// { netid: 'susana80', org: 'SIGPwny' }, +// { netid: 'patrickh37', org: 'SIGQuantum' }, +// ]; + +// // retrieve from azure active directory (aad) +// const userNamesResponse = [ +// { netid: 'johnd01', firstName: 'John', lastName: 'Doe' }, +// { netid: 'miker44', firstName: 'Michael', lastName: 'Roberts' }, +// { netid: 'chrisb19', firstName: 'Christopher', lastName: 'Brown' }, +// { netid: 'ethanw12', firstName: 'Ethan', lastName: 'Wong' }, +// { netid: 'emilyh54', firstName: 'Emily', lastName: 'Hernandez' }, +// { netid: 'juliel08', firstName: 'Julie', lastName: 'Lopez' }, +// { netid: 'rachelb03', firstName: 'Rachel', lastName: 'Bell' }, +// { netid: 'ashleyc28', firstName: 'Ashley', lastName: 'Clark' }, +// { netid: 'briand77', firstName: 'Brian', lastName: 'Davis' }, +// { netid: 'meganf65', firstName: 'Megan', lastName: 'Flores' }, +// { netid: 'danielh04', firstName: 'Daniel', lastName: 'Hughes' }, +// { netid: 'lindam29', firstName: 'Linda', lastName: 'Martinez' }, +// { netid: 'paulf31', firstName: 'Paul', lastName: 'Fisher' }, +// { netid: 'markl13', firstName: 'Mark', lastName: 'Lewis' }, +// { netid: 'carolynb59', firstName: 'Carolyn', lastName: 'Barnes' }, +// { netid: 'nataliep71', firstName: 'Natalie', lastName: 'Price' }, + +// { netid: 'ethanc12', firstName: 'Ethan', middleName: 'Yuting', lastName: 'Chang' }, +// { netid: 'sarahg23', firstName: 'Sarah', middleName: 'Grace', lastName: 'Gonzalez' }, +// { netid: 'annaw02', firstName: 'Anna', middleName: 'Marie', lastName: 'Williams' }, +// { netid: 'laurenp87', firstName: 'Lauren', middleName: 'Patricia', lastName: 'Perez' }, +// { netid: 'kevink11', firstName: 'Kevin', middleName: 'Lee', lastName: 'Kim' }, +// { netid: 'mattt92', firstName: 'Matthew', middleName: 'Thomas', lastName: 'Taylor' }, +// { netid: 'stephenj45', firstName: 'Stephen', middleName: 'James', lastName: 'Johnson' }, +// { netid: 'victorc16', firstName: 'Victor', middleName: 'Charles', lastName: 'Carter' }, +// { netid: 'susana80', firstName: 'Susan', middleName: 'Ann', lastName: 'Anderson' }, +// { netid: 'patrickh37', firstName: 'Patrick', middleName: 'Henry', lastName: 'Hill' }, +// ]; + +// const mergedResponse: User[] = userOrgsResponse.map((orgObj) => { +// const nameObj = userNamesResponse.find((name) => name.netid === orgObj.netid); +// return { ...orgObj, ...nameObj } as User; +// }); + +// setUserList(mergedResponse); +// }; +// getUsers(); +// }, []); + +// const removeUser = async (netid: string) => { +// try { +// // await api.delete(`/api/v1/events/${eventId}`); +// setUserList((prevUsers) => prevUsers.filter((u) => u.netid !== netid)); +// notifications.show({ +// title: 'User removed', +// message: 'The user was successfully removed.', +// }); +// close(); +// } catch (error) { +// console.error(error); +// notifications.show({ +// title: 'Error removing user', +// message: `${error}`, +// color: 'red', +// }); +// } +// }; + +// if (userList.length === 0) { +// return ; +// } + +// return ( +// +// {userRemoved && ( +// { +// setRemoveUser(null); +// close(); +// }} +// title="Confirm action" +// > +// +// Are you sure you want to remove the user {userRemoved?.netid}? +// +//
+// +// +// +//
+// )} +// {/*
+// +// +//
*/} +// +// +// +// NetID +// First Name +// Middle Name +// Last Name +// Organization +// Actions +// +// +// {userList.map(renderTableRow)} +//
+//
+// ); +// }; diff --git a/src/ui/pages/screen/ScreenComponent.tsx b/src/ui/pages/screen/ScreenComponent.tsx new file mode 100644 index 0000000..a200bd7 --- /dev/null +++ b/src/ui/pages/screen/ScreenComponent.tsx @@ -0,0 +1,264 @@ +// import { useDisclosure } from "@mantine/hooks"; +import { useEffect, useMemo, useState } from 'react'; +import { MantineReactTable, type MRT_ColumnDef } from 'mantine-react-table'; +import { z } from 'zod'; +import { OrganizationList } from '@common/orgs'; + +const OrganizationListEnum = z.enum(OrganizationList); + +const userSchema = z.object({ + netid: z.string().min(1), + org: OrganizationListEnum, + firstName: z.string().min(1), + middleName: z.string().optional(), + lastName: z.string().min(1), +}); + +const orgSuperRowSchema = userSchema.extend({ + netid: z.string().max(0), + firstName: z.string().max(0), + lastName: z.string().max(0), + subRows: userSchema.omit({ org: true }).array(), // redundant so omit org +}); + +export type Org = z.infer; +export type User = z.infer; +export type OrgSuperRow = z.infer; + +function groupUsersByOrg(users: User[]): OrgSuperRow[] { + const grouped: Record = {} as Record; + + // Group users by organization + users.forEach((user) => { + if (!grouped[user.org]) { + grouped[user.org] = []; + } + grouped[user.org].push(user); + }); + + // Transform into the desired structure + const reformatted = Object.entries(grouped).map(([org, subRows]) => + orgSuperRowSchema.parse({ + netid: '', + org, + firstName: '', + lastName: '', + subRows, + }) + ); + + return reformatted; +} + +export const ScreenComponent: React.FC = () => { + const [userList, setUserList] = useState([]); + const columns = useMemo[]>( + () => [ + { + accessorKey: 'org', + header: 'Organization', + }, + { + accessorKey: 'netid', + header: 'NetID', + }, + { + accessorKey: 'firstName', + header: 'First Name', + }, + { + accessorKey: 'lastName', + header: 'Last Name', + }, + ], + [] + ); + useEffect(() => { + const getUsers = async () => { + // const response = await api.get('/api/v1/events'); + // const upcomingEvents = await api.get('/api/v1/events?upcomingOnly=true'); + // const upcomingEventsSet = new Set(upcomingEvents.data.map((x: EventGetResponse) => x.id)); + // const events = response.data; + // events.sort((a: User, b: User) => { + // return a.start.localeCompare(b.start); + // }); + // const enrichedResponse = response.data.map((item: EventGetResponse) => { + // if (upcomingEventsSet.has(item.id)) { + // return { ...item, upcoming: true }; + // } + // return { ...item, upcoming: false }; + // }); + + // mock data + const userOrgsResponse = [ + { netid: 'johnd01', org: 'SIGMusic' }, + { netid: 'miker44', org: 'SIGPLAN' }, + { netid: 'chrisb19', org: 'SIGCHI' }, + { netid: 'ethanw12', org: 'SIGecom' }, + { netid: 'emilyh54', org: 'SIGRobotics' }, + { netid: 'juliel08', org: 'SIGGRAPH' }, + { netid: 'rachelb03', org: 'GameBuilders' }, + { netid: 'ashleyc28', org: 'SIGNLL' }, + { netid: 'briand77', org: 'SIGma' }, + { netid: 'meganf65', org: 'SIGPolicy' }, + { netid: 'danielh04', org: 'SIGARCH' }, + { netid: 'lindam29', org: 'SIGMobile' }, + { netid: 'paulf31', org: 'SIGMusic' }, + { netid: 'markl13', org: 'SIGCHI' }, + { netid: 'carolynb59', org: 'ACM' }, + { netid: 'nataliep71', org: 'SIGPolicy' }, + + { netid: 'ethanc12', org: 'Infrastructure Committee' }, + { netid: 'sarahg23', org: 'SIGQuantum' }, + { netid: 'annaw02', org: 'SIGMobile' }, + { netid: 'laurenp87', org: 'SIGPwny' }, + { netid: 'kevink11', org: 'Infrastructure Committee' }, + { netid: 'mattt92', org: 'SIGtricity' }, + { netid: 'stephenj45', org: 'SIGAIDA' }, + { netid: 'victorc16', org: 'GLUG' }, + { netid: 'susana80', org: 'SIGPwny' }, + { netid: 'patrickh37', org: 'SIGQuantum' }, + ]; + + // retrieve from azure active directory (aad) + const userNamesResponse = [ + { netid: 'johnd01', firstName: 'John', lastName: 'Doe' }, + { netid: 'miker44', firstName: 'Michael', lastName: 'Roberts' }, + { netid: 'chrisb19', firstName: 'Christopher', lastName: 'Brown' }, + { netid: 'ethanw12', firstName: 'Ethan', lastName: 'Wong' }, + { netid: 'emilyh54', firstName: 'Emily', lastName: 'Hernandez' }, + { netid: 'juliel08', firstName: 'Julie', lastName: 'Lopez' }, + { netid: 'rachelb03', firstName: 'Rachel', lastName: 'Bell' }, + { netid: 'ashleyc28', firstName: 'Ashley', lastName: 'Clark' }, + { netid: 'briand77', firstName: 'Brian', lastName: 'Davis' }, + { netid: 'meganf65', firstName: 'Megan', lastName: 'Flores' }, + { netid: 'danielh04', firstName: 'Daniel', lastName: 'Hughes' }, + { netid: 'lindam29', firstName: 'Linda', lastName: 'Martinez' }, + { netid: 'paulf31', firstName: 'Paul', lastName: 'Fisher' }, + { netid: 'markl13', firstName: 'Mark', lastName: 'Lewis' }, + { netid: 'carolynb59', firstName: 'Carolyn', lastName: 'Barnes' }, + { netid: 'nataliep71', firstName: 'Natalie', lastName: 'Price' }, + + { netid: 'ethanc12', firstName: 'Ethan', middleName: 'Yuting', lastName: 'Chang' }, + { netid: 'sarahg23', firstName: 'Sarah', middleName: 'Grace', lastName: 'Gonzalez' }, + { netid: 'annaw02', firstName: 'Anna', middleName: 'Marie', lastName: 'Williams' }, + { netid: 'laurenp87', firstName: 'Lauren', middleName: 'Patricia', lastName: 'Perez' }, + { netid: 'kevink11', firstName: 'Kevin', middleName: 'Lee', lastName: 'Kim' }, + { netid: 'mattt92', firstName: 'Matthew', middleName: 'Thomas', lastName: 'Taylor' }, + { netid: 'stephenj45', firstName: 'Stephen', middleName: 'James', lastName: 'Johnson' }, + { netid: 'victorc16', firstName: 'Victor', middleName: 'Charles', lastName: 'Carter' }, + { netid: 'susana80', firstName: 'Susan', middleName: 'Ann', lastName: 'Anderson' }, + { netid: 'patrickh37', firstName: 'Patrick', middleName: 'Henry', lastName: 'Hill' }, + ]; + + const mergedResponse: User[] = userOrgsResponse.map((orgObj) => { + const nameObj = userNamesResponse.find((name) => name.netid === orgObj.netid); + return { ...orgObj, ...nameObj } as User; + }); + + // console.log(mergedResponse); + setUserList(groupUsersByOrg(mergedResponse)); + }; + getUsers(); + }, []); + + // const removeUser = async (netid: string) => { + // try { + // // await api.delete(`/api/v1/events/${eventId}`); + // setUserList((prevUsers) => prevUsers.filter((u) => u.netid !== netid)); + // notifications.show({ + // title: 'User removed', + // message: 'The user was successfully removed.', + // }); + // close(); + // } catch (error) { + // console.error(error); + // notifications.show({ + // title: 'Error removing user', + // message: `${error}`, + // color: 'red', + // }); + // } + // }; + + // if (userList.length === 0) { + // return ; + // } + + // return ( + // + // {userRemoved && ( + // { + // setRemoveUser(null); + // close(); + // }} + // title="Confirm action" + // > + // + // Are you sure you want to remove the user {userRemoved?.netid}? + // + //
+ // + // + // + //
+ // )} + // {/*
+ // + // + //
*/} + // + // + // + // NetID + // First Name + // Middle Name + // Last Name + // Organization + // Actions + // + // + // {userList.map(renderTableRow)} + //
+ //
+ // ); + + // const table = useMantineReactTable({ + // columns, + // data, + // enableExpanding: true, + // getSubRows: (originalRow) => originalRow.subRows, //default, can customize + // }); + + return ( + ({ + // className: row.original.subRows ? 'super-row' : 'sub-row', + style: row.original.subRows + ? { fontWeight: 'bold' } // Super row styling + : { fontWeight: 'lighter' }, // Sub-row styling + })} + /> + ); +}; diff --git a/yarn.lock b/yarn.lock index c811a58..e1cab37 100644 --- a/yarn.lock +++ b/yarn.lock @@ -739,7 +739,7 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-module-imports@^7.25.9": +"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== @@ -805,7 +805,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.25.9" -"@babel/runtime@^7.12.5", "@babel/runtime@^7.17.8", "@babel/runtime@^7.20.13", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": +"@babel/runtime@^7.12.5", "@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.13", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": version "7.26.7" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.7.tgz#f4e7fe527cd710f8dc0618610b61b4b060c3c341" integrity sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ== @@ -950,6 +950,94 @@ resolved "https://registry.yarnpkg.com/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz#519c1549b0e147759e7825701ecffd25e5819f7b" integrity sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg== +"@emotion/babel-plugin@^11.13.5": + version "11.13.5" + resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz#eab8d65dbded74e0ecfd28dc218e75607c4e7bc0" + integrity sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/runtime" "^7.18.3" + "@emotion/hash" "^0.9.2" + "@emotion/memoize" "^0.9.0" + "@emotion/serialize" "^1.3.3" + babel-plugin-macros "^3.1.0" + convert-source-map "^1.5.0" + escape-string-regexp "^4.0.0" + find-root "^1.1.0" + source-map "^0.5.7" + stylis "4.2.0" + +"@emotion/cache@^11.14.0": + version "11.14.0" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.14.0.tgz#ee44b26986eeb93c8be82bb92f1f7a9b21b2ed76" + integrity sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA== + dependencies: + "@emotion/memoize" "^0.9.0" + "@emotion/sheet" "^1.4.0" + "@emotion/utils" "^1.4.2" + "@emotion/weak-memoize" "^0.4.0" + stylis "4.2.0" + +"@emotion/hash@^0.9.2": + version "0.9.2" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.2.tgz#ff9221b9f58b4dfe61e619a7788734bd63f6898b" + integrity sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g== + +"@emotion/memoize@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.9.0.tgz#745969d649977776b43fc7648c556aaa462b4102" + integrity sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ== + +"@emotion/react@^11.14.0": + version "11.14.0" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.14.0.tgz#cfaae35ebc67dd9ef4ea2e9acc6cd29e157dd05d" + integrity sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA== + dependencies: + "@babel/runtime" "^7.18.3" + "@emotion/babel-plugin" "^11.13.5" + "@emotion/cache" "^11.14.0" + "@emotion/serialize" "^1.3.3" + "@emotion/use-insertion-effect-with-fallbacks" "^1.2.0" + "@emotion/utils" "^1.4.2" + "@emotion/weak-memoize" "^0.4.0" + hoist-non-react-statics "^3.3.1" + +"@emotion/serialize@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.3.3.tgz#d291531005f17d704d0463a032fe679f376509e8" + integrity sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA== + dependencies: + "@emotion/hash" "^0.9.2" + "@emotion/memoize" "^0.9.0" + "@emotion/unitless" "^0.10.0" + "@emotion/utils" "^1.4.2" + csstype "^3.0.2" + +"@emotion/sheet@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.4.0.tgz#c9299c34d248bc26e82563735f78953d2efca83c" + integrity sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg== + +"@emotion/unitless@^0.10.0": + version "0.10.0" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.10.0.tgz#2af2f7c7e5150f497bdabd848ce7b218a27cf745" + integrity sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg== + +"@emotion/use-insertion-effect-with-fallbacks@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz#8a8cb77b590e09affb960f4ff1e9a89e532738bf" + integrity sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg== + +"@emotion/utils@^1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.4.2.tgz#6df6c45881fcb1c412d6688a311a98b7f59c1b52" + integrity sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA== + +"@emotion/weak-memoize@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz#5e13fac887f08c44f76b0ccaf3370eb00fec9bb6" + integrity sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg== + "@esbuild/aix-ppc64@0.21.5": version "0.21.5" resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f" @@ -1532,10 +1620,10 @@ dependencies: buffer "^6.0.3" -"@mantine/core@^7.12.0": - version "7.16.2" - resolved "https://registry.yarnpkg.com/@mantine/core/-/core-7.16.2.tgz#feffc178adfdae0b073c24fd758a7793d0cf95e3" - integrity sha512-6dwFz+8HrOqFan7GezgpoWyZSCxedh10S8iILGVsc3GXiD4gzo+3VZndZKccktkYZ3GVC9E3cCS3SxbiyKSAVw== +"@mantine/core@^7.16.3": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@mantine/core/-/core-7.16.3.tgz#a6e985ae3a2473ba238e0b748ab4d8cbe79e5ca2" + integrity sha512-cxhIpfd2i0Zmk9TKdejYAoIvWouMGhzK3OOX+VRViZ5HEjnTQCGl2h3db56ThqB6NfVPCno6BPbt5lwekTtmuQ== dependencies: "@floating-ui/react" "^0.26.28" clsx "^2.1.1" @@ -1544,10 +1632,10 @@ react-textarea-autosize "8.5.6" type-fest "^4.27.0" -"@mantine/dates@^7.12.0": - version "7.16.2" - resolved "https://registry.yarnpkg.com/@mantine/dates/-/dates-7.16.2.tgz#ebad52ab06910506362e29a2cc5f9fd8f5ad0d85" - integrity sha512-TmAEqMwC1wKpQnxgfDQK7Ao3p9SdSAYbm2orN9wqzDiqZI9NGepWMa1VJWfykDu4XAkVIjjznAdLOzXpuXhouQ== +"@mantine/dates@^7.16.3": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@mantine/dates/-/dates-7.16.3.tgz#7dcd5e43416e3754b21c75dad5a8d69742f14ccf" + integrity sha512-YI8aW3GFBmLJz0eu9Q6tFFXaubZIZMccA+6Jla8K8K8KMdx5wEPBrCCOHZnL3r0RcVLhARLa0VEmEyaQB+DTjQ== dependencies: clsx "^2.1.1" @@ -1559,10 +1647,10 @@ fast-deep-equal "^3.1.3" klona "^2.0.6" -"@mantine/hooks@^7.12.0": - version "7.16.2" - resolved "https://registry.yarnpkg.com/@mantine/hooks/-/hooks-7.16.2.tgz#24163bcb7b7f862bdd984e26180dbda12bae1588" - integrity sha512-ZFHQhDi9T+r6VR5NEeE47gigPPIAHVIKDOCWsCsbCqHc3yz5l8kiO2RdfUmsTKV2KD/AiXnAw4b6pjQEP58GOg== +"@mantine/hooks@^7.16.3": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@mantine/hooks/-/hooks-7.16.3.tgz#b4873110acfe6e2dd76da274c623a11ccb86db48" + integrity sha512-B94FBWk5Sc81tAjV+B3dGh/gKzfqzpzVC/KHyBRWOOyJRqeeRbI/FAaJo4zwppyQo1POSl5ArdyjtDRrRIj2SQ== "@mantine/notifications@^7.12.0": version "7.16.2" @@ -1606,71 +1694,71 @@ resolved "https://registry.yarnpkg.com/@middy/util/-/util-6.0.0.tgz#dddada0cfa40dcdfc0b41bd116a58ae14a3212a8" integrity sha512-V2/gJ4wE6TtMJNAnUTm3VRdgNyLI6zdNLy3MzhrJOwxiUslG1OSShE1IUYR0cmzMOm5w/Y2p3+OIRXRqKUVHYQ== -"@napi-rs/canvas-android-arm64@0.1.66": - version "0.1.66" - resolved "https://registry.yarnpkg.com/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.66.tgz#c5205cecc525502799690d01f821c4156c1c2dc0" - integrity sha512-77Yq9yaUYN90zCovYOpw7LhidJiswU9wLIWWBGF6iiEJyQdt6tkiXpGRZpOMJVO70afkcdc4T7532cxMIBhk0Q== - -"@napi-rs/canvas-darwin-arm64@0.1.66": - version "0.1.66" - resolved "https://registry.yarnpkg.com/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.66.tgz#e619321dd611cceaa1f75d018881f03b01aa21d7" - integrity sha512-cz3aJ06b8BZGtwRxKTiE0OVUlB17MH8j+BnE4A5+wD9aD1guCCqECsz+k7tpXdAdTAYKRIz2pq6ZuiJ76NyUbQ== - -"@napi-rs/canvas-darwin-x64@0.1.66": - version "0.1.66" - resolved "https://registry.yarnpkg.com/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.66.tgz#e39d4ac4d427c698a074609d85d8e6b1d53a2e16" - integrity sha512-szIWqJgFm2OTyGzM+hSiJOaOtjI73VYRC2KN30zZTt7i1+0sgpm5exK5ltDBPOmCdnLt7SbUfpInLj8VvxYlKA== - -"@napi-rs/canvas-linux-arm-gnueabihf@0.1.66": - version "0.1.66" - resolved "https://registry.yarnpkg.com/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.66.tgz#4db919baa52b21700fad1beaaaf100f25c87505b" - integrity sha512-h/TZJFc6JLvp8FwbA5mu+yXiblN0iKqshU7xzd6L+ks5uNYgjS7XWLkNiyPQkMaXQgVczOJfZy7r4NSPK3V8Hg== - -"@napi-rs/canvas-linux-arm64-gnu@0.1.66": - version "0.1.66" - resolved "https://registry.yarnpkg.com/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.66.tgz#815bd721ad44e8133930a7ded016cf855833031c" - integrity sha512-RGFUdBdi0Xmf+TfwZcB89Ap6hDYh4nzyJhXhNJIgve6ELrIPFhf7sDHvUHxjgW0YzczGoo+ophyCm03cJggu+w== - -"@napi-rs/canvas-linux-arm64-musl@0.1.66": - version "0.1.66" - resolved "https://registry.yarnpkg.com/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.66.tgz#0e95d8f3cb58cdbba5c8b99ddc03506476694cfb" - integrity sha512-2cFViDIZ0xQlAHyJmyym+rj3p04V16vgAiz64sCAfwOOiW6e19agv1HQWHUsro3G2lF3PaHGAnp0WRPXGqLOfg== - -"@napi-rs/canvas-linux-riscv64-gnu@0.1.66": - version "0.1.66" - resolved "https://registry.yarnpkg.com/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.66.tgz#9b01db989a66b06981ed19b3d67e3f27cb74d2a9" - integrity sha512-Vm5ZWS2RDPeBpnfx83eJpZfJT07xl0jqp8d83PklKqiDNa3BmDZZ/uuI40/ICgejGLymXXYo5N21b7oAxhRTSA== - -"@napi-rs/canvas-linux-x64-gnu@0.1.66": - version "0.1.66" - resolved "https://registry.yarnpkg.com/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.66.tgz#a2f0ba9fee3bcd769c25a22e85863a6c90c34913" - integrity sha512-/ptGBhErNBCgWff3khtuEjhiiYWf70oWvBPRj8y5EMB0nLYpve7RxxFnavVvxN49kJ0MQHRIwgfyd47RSOOKPw== - -"@napi-rs/canvas-linux-x64-musl@0.1.66": - version "0.1.66" - resolved "https://registry.yarnpkg.com/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.66.tgz#44703f1deb47b6040c14edec952a4711ad52672c" - integrity sha512-XunvXisTkIG+bpq6BcXmsUstoLX3RLS6N9Uz9Pg9RpWIMeM6ObR5shr3NgpGRJq93769I1hS4mJW0DX2Au3WBw== - -"@napi-rs/canvas-win32-x64-msvc@0.1.66": - version "0.1.66" - resolved "https://registry.yarnpkg.com/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.66.tgz#a14e48c2173eb3b445da7eaf4f6a33bac8825ee4" - integrity sha512-3n34watNFqpwACDA+pt4jfQD6zR8PzfK86FBajdsgDVVZhSp6ohgbbJv+eUrXM08VUtjxTq7+U4sWspTu9+4Ug== +"@napi-rs/canvas-android-arm64@0.1.67": + version "0.1.67" + resolved "https://registry.yarnpkg.com/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.67.tgz#7e1e4c9395c67af98d61c53a822f45697bc7272c" + integrity sha512-W+3DFG5h0WU8Vqqb3W5fNmm5/TPH5ECZRinQDK4CAKFSUkc4iZcDwrmyFG9sB4KdHazf1mFVHCpEeVMO6Mk6Zg== + +"@napi-rs/canvas-darwin-arm64@0.1.67": + version "0.1.67" + resolved "https://registry.yarnpkg.com/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.67.tgz#a7aa4c12371bad46df90129042a76e7f6312e7f7" + integrity sha512-xzrv7QboI47yhIHR5P5u/9KGswokuOKLiKSukr1Ku03RRJxP6lGuVtrAZAgdRg7F9FsuF2REf2yK53YVb6pMlA== + +"@napi-rs/canvas-darwin-x64@0.1.67": + version "0.1.67" + resolved "https://registry.yarnpkg.com/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.67.tgz#00a57ecbd868cc499b09806166ed4805ec73868c" + integrity sha512-SNk9lYBr84N0gW8MZ2IrjygFtbFBILr3SEqMdHzHHuph20SQmssFvJGPZwSSCMEyKAvyqhogbmlew0te5Z4w9Q== + +"@napi-rs/canvas-linux-arm-gnueabihf@0.1.67": + version "0.1.67" + resolved "https://registry.yarnpkg.com/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.67.tgz#3be76f08a0ee4b35842b0f1d7f88d1bdbb7ef8c3" + integrity sha512-qmBlSvUpl567bzH8tNXi82u5FrL4d0qINqd6K9O7GWGGGFmKMJdrgi2/SW3wwCTxqHBasIDdVWc4KSJfwyaoDQ== + +"@napi-rs/canvas-linux-arm64-gnu@0.1.67": + version "0.1.67" + resolved "https://registry.yarnpkg.com/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.67.tgz#bdcfcd8f7cd50c3c7d6da681da37657d0f313757" + integrity sha512-k3nAPQefkMeFuJ65Rqdnx92KX1JXQhEKjjWeKsCJB+7sIBgQUWtHo9c3etfVLv5pkWJJDFi/Zc2soNkH3E8dRA== + +"@napi-rs/canvas-linux-arm64-musl@0.1.67": + version "0.1.67" + resolved "https://registry.yarnpkg.com/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.67.tgz#64517c4562e95ebf8e7dfbbfbf3608e39d45e9bb" + integrity sha512-lZwHWR1cCP408l86n3Qbs3X1oFeAYMjJIQvQl1VMZh6wo5PfI+jaZSKBUOd8x44TnVllX9yhLY9unNRztk/sUQ== + +"@napi-rs/canvas-linux-riscv64-gnu@0.1.67": + version "0.1.67" + resolved "https://registry.yarnpkg.com/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.67.tgz#382d231c7fbef121936dad4adc0b00fe54db8b48" + integrity sha512-PdBC9p6bLHA1W3OdA0vTHj701SB/kioGQ1uCFBRMs5KBCaMLb/H4aNi8uaIUIEvBWnxeAjoNcLU7//q0FxEosw== + +"@napi-rs/canvas-linux-x64-gnu@0.1.67": + version "0.1.67" + resolved "https://registry.yarnpkg.com/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.67.tgz#267c033c70367226923ab3b5c53d38ea3113a9c3" + integrity sha512-kJJX6eWzjipL/LdKOWCJctc88e5yzuXri8+s0V/lN06OwuLGW62TWS3lvi8qlUrGMOfRGabSWWlB4omhASSB8w== + +"@napi-rs/canvas-linux-x64-musl@0.1.67": + version "0.1.67" + resolved "https://registry.yarnpkg.com/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.67.tgz#b4cbdb998b63d2b8ae9bcd3894309d92cbc24db7" + integrity sha512-jLKiPWGeN6ZzhnaLG7ex7eexsiHJ1mdtPK1qKvETIcu45dApMXyUIHvdL6XWB5gFFtj5ScHzLUxv1vkfPZsoxA== + +"@napi-rs/canvas-win32-x64-msvc@0.1.67": + version "0.1.67" + resolved "https://registry.yarnpkg.com/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.67.tgz#ee608ad9fe751c897c2ad8a1d81798732753ab41" + integrity sha512-K/JmkOFbc4iRZYUqJhj0jwqfHA/wNQEmTiGNsgZ6d59yF/IBNp5T0D5eg3B8ghjI8GxDYCiSJ6DNX8mC3Oh2EQ== "@napi-rs/canvas@^0.1.65": - version "0.1.66" - resolved "https://registry.yarnpkg.com/@napi-rs/canvas/-/canvas-0.1.66.tgz#71c9dff25a89fc8aadd1e65b9ae4ef4500ffd5b8" - integrity sha512-NE/eQKLbUS+LCbMHRa5HnR7cc1Q4ibg/qfLUN4Ukl3CC0lq6LfHE0YbvFm/l4i5RyyS+aUjL+8IuZDD9EH3amg== + version "0.1.67" + resolved "https://registry.yarnpkg.com/@napi-rs/canvas/-/canvas-0.1.67.tgz#8b6993910d7865ddcab0e6d9b1b199707d3945b7" + integrity sha512-VA4Khm/5Kg2bQGx3jXotTC4MloOG8b1Ung80exafUK0k5u6yJmIz3Q2iXeeWZs5weV+LQOEB+CPKsYwEYaGAjw== optionalDependencies: - "@napi-rs/canvas-android-arm64" "0.1.66" - "@napi-rs/canvas-darwin-arm64" "0.1.66" - "@napi-rs/canvas-darwin-x64" "0.1.66" - "@napi-rs/canvas-linux-arm-gnueabihf" "0.1.66" - "@napi-rs/canvas-linux-arm64-gnu" "0.1.66" - "@napi-rs/canvas-linux-arm64-musl" "0.1.66" - "@napi-rs/canvas-linux-riscv64-gnu" "0.1.66" - "@napi-rs/canvas-linux-x64-gnu" "0.1.66" - "@napi-rs/canvas-linux-x64-musl" "0.1.66" - "@napi-rs/canvas-win32-x64-msvc" "0.1.66" + "@napi-rs/canvas-android-arm64" "0.1.67" + "@napi-rs/canvas-darwin-arm64" "0.1.67" + "@napi-rs/canvas-darwin-x64" "0.1.67" + "@napi-rs/canvas-linux-arm-gnueabihf" "0.1.67" + "@napi-rs/canvas-linux-arm64-gnu" "0.1.67" + "@napi-rs/canvas-linux-arm64-musl" "0.1.67" + "@napi-rs/canvas-linux-riscv64-gnu" "0.1.67" + "@napi-rs/canvas-linux-x64-gnu" "0.1.67" + "@napi-rs/canvas-linux-x64-musl" "0.1.67" + "@napi-rs/canvas-win32-x64-msvc" "0.1.67" "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -2575,17 +2663,48 @@ resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-8.5.3.tgz#44462cc59a0ce66d2e714330399fae4672afda2e" integrity sha512-Jvzw+gT1HNarkJo21WZBq5pU89qDN8u/pD3woSh/1c2h5RS6UylWjQHotPFpcBIQiUSrDFtvCU9xugJm4MD0+w== -"@tabler/icons-react@^3.29.0": - version "3.29.0" - resolved "https://registry.yarnpkg.com/@tabler/icons-react/-/icons-react-3.29.0.tgz#5853e1a8318c7ecfffbb6c38a3b1b17862855dba" - integrity sha512-jaa3b3j91CplY7TPgx/Gj/e+PcOnQgYiK6c5qtp1P0ytfKM5WPc1qtXyRLE3NcYlfxS2Pcst4YGy1vUML7SjbQ== +"@tabler/icons-react@^3.30.0": + version "3.30.0" + resolved "https://registry.yarnpkg.com/@tabler/icons-react/-/icons-react-3.30.0.tgz#38159e19aa0c743182796193dd0bef6595de9a29" + integrity sha512-9KZ9D1UNAyjlLkkYp2HBPHdf6lAJ2aelDqh8YYAnnmLF3xwprWKxxW8+zw5jlI0IwdfN4XFFuzqePkaw+DpIOg== + dependencies: + "@tabler/icons" "3.30.0" + +"@tabler/icons@3.30.0": + version "3.30.0" + resolved "https://registry.yarnpkg.com/@tabler/icons/-/icons-3.30.0.tgz#4f80f52cc6355b440a4ee0dadd4c3e3775e50663" + integrity sha512-c8OKLM48l00u9TFbh2qhSODMONIzML8ajtCyq95rW8vzkWcBrKRPM61tdkThz2j4kd5u17srPGIjqdeRUZdfdw== + +"@tanstack/match-sorter-utils@8.19.4": + version "8.19.4" + resolved "https://registry.yarnpkg.com/@tanstack/match-sorter-utils/-/match-sorter-utils-8.19.4.tgz#dacf772b5d94f4684f10dbeb2518cf72dccab8a5" + integrity sha512-Wo1iKt2b9OT7d+YGhvEPD3DXvPv2etTusIMhMUoG7fbhmxcXCtIjJDEygy91Y2JFlwGyjqiBPRozme7UD8hoqg== + dependencies: + remove-accents "0.5.0" + +"@tanstack/react-table@8.20.5": + version "8.20.5" + resolved "https://registry.yarnpkg.com/@tanstack/react-table/-/react-table-8.20.5.tgz#19987d101e1ea25ef5406dce4352cab3932449d8" + integrity sha512-WEHopKw3znbUZ61s9i0+i9g8drmDo6asTWbrQh8Us63DAk/M0FkmIqERew6P71HI75ksZ2Pxyuf4vvKh9rAkiA== + dependencies: + "@tanstack/table-core" "8.20.5" + +"@tanstack/react-virtual@3.11.2": + version "3.11.2" + resolved "https://registry.yarnpkg.com/@tanstack/react-virtual/-/react-virtual-3.11.2.tgz#d6b9bd999c181f0a2edce270c87a2febead04322" + integrity sha512-OuFzMXPF4+xZgx8UzJha0AieuMihhhaWG0tCqpp6tDzlFwOmNBPYMuLOtMJ1Tr4pXLHmgjcWhG6RlknY2oNTdQ== dependencies: - "@tabler/icons" "3.29.0" + "@tanstack/virtual-core" "3.11.2" -"@tabler/icons@3.29.0": - version "3.29.0" - resolved "https://registry.yarnpkg.com/@tabler/icons/-/icons-3.29.0.tgz#f78d0bb098641088ccfe3e727fc296502eb8a930" - integrity sha512-VWNINymdmhay3MDvWVREmRwuWLSrX3YiInKvs5L4AHRF4bAfJabLlEReE0BW/XFsBt22ff8/C8Eam/LXlF97mA== +"@tanstack/table-core@8.20.5": + version "8.20.5" + resolved "https://registry.yarnpkg.com/@tanstack/table-core/-/table-core-8.20.5.tgz#3974f0b090bed11243d4107283824167a395cf1d" + integrity sha512-P9dF7XbibHph2PFRz8gfBKEXEY/HJPOhym8CHmjF8y3q5mWpKx9xtZapXQUWCgkqvsK0R46Azuz+VaxD4Xl+Tg== + +"@tanstack/virtual-core@3.11.2": + version "3.11.2" + resolved "https://registry.yarnpkg.com/@tanstack/virtual-core/-/virtual-core-3.11.2.tgz#00409e743ac4eea9afe5b7708594d5fcebb00212" + integrity sha512-vTtpNt7mKCiZ1pwU9hfKPhpdVO2sVzFQsxoVBGtOSHxlrRRzYr8iQ2TlwbAcRYCcEiZ9ECAM8kBzH0v2+VzfKw== "@testing-library/dom@10.4.0", "@testing-library/dom@^10.4.0": version "10.4.0" @@ -2806,6 +2925,11 @@ dependencies: undici-types "~6.20.0" +"@types/parse-json@^4.0.0": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" + integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== + "@types/pluralize@^0.0.33": version "0.0.33" resolved "https://registry.yarnpkg.com/@types/pluralize/-/pluralize-0.0.33.tgz#8ad9018368c584d268667dd9acd5b3b806e8c82a" @@ -3545,6 +3669,15 @@ babel-eslint@^10.0.1: eslint-visitor-keys "^1.0.0" resolve "^1.12.0" +babel-plugin-macros@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" + integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== + dependencies: + "@babel/runtime" "^7.12.5" + cosmiconfig "^7.0.0" + resolve "^1.19.0" + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -3954,6 +4087,11 @@ content-disposition@0.5.2: resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" integrity sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA== +convert-source-map@^1.5.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + convert-source-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" @@ -3974,6 +4112,17 @@ core-util-is@1.0.2: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== +cosmiconfig@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + cosmiconfig@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz#34c3fc58287b915f3ae905ab6dc3de258b55ad9d" @@ -4094,7 +4243,7 @@ data-view-byte-offset@^1.0.1: es-errors "^1.3.0" is-data-view "^1.0.1" -dayjs@^1.11.12: +dayjs@^1.11.13: version "1.11.13" resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c" integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg== @@ -5213,6 +5362,11 @@ find-my-way@^9.0.0: fast-querystring "^1.0.0" safe-regex2 "^4.0.0" +find-root@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== + find-up@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" @@ -5588,6 +5742,13 @@ hexoid@^2.0.0: resolved "https://registry.yarnpkg.com/hexoid/-/hexoid-2.0.0.tgz#fb36c740ebbf364403fa1ec0c7efd268460ec5b9" integrity sha512-qlspKUK7IlSQv2o+5I7yhUd7TxlOG2Vr5LTa3ve2XSNVKAL/n/u/7KLvKmFNimomDIKvZFXWHv0T12mv7rT8Aw== +hoist-non-react-statics@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + hookified@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/hookified/-/hookified-1.7.0.tgz#d1eb2a1d099fd4eeb3c43e5f75f3fe2ae82aae13" @@ -6488,6 +6649,15 @@ make-event-props@^1.6.0: resolved "https://registry.yarnpkg.com/make-event-props/-/make-event-props-1.6.2.tgz#c8e0e48eb28b9b808730de38359f6341de7ec5a2" integrity sha512-iDwf7mA03WPiR8QxvcVHmVWEPfMY1RZXerDVNCRYW7dUr2ppH3J58Rwb39/WG39yTZdRSxr3x+2v22tvI0VEvA== +mantine-react-table@^2.0.0-beta.8: + version "2.0.0-beta.8" + resolved "https://registry.yarnpkg.com/mantine-react-table/-/mantine-react-table-2.0.0-beta.8.tgz#216e78f57a77b55548f1283699a33099f89ce753" + integrity sha512-3Ey0jbLtqcN89n24kDRiOeYwhR5zcfHzzCz7KOip5fXvvrtn6N7vj+Fw2jYFFbPQr7TLzBviSSQkPcVyQbs+/w== + dependencies: + "@tanstack/match-sorter-utils" "8.19.4" + "@tanstack/react-table" "8.20.5" + "@tanstack/react-virtual" "3.11.2" + map-or-similar@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/map-or-similar/-/map-or-similar-1.5.0.tgz#6de2653174adfb5d9edc33c69d3e92a1b76faf08" @@ -6954,7 +7124,7 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-json@^5.2.0: +parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== @@ -7363,7 +7533,7 @@ react-docgen@^7.0.0: loose-envify "^1.1.0" scheduler "^0.23.2" -react-is@^16.13.1: +react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -7564,6 +7734,11 @@ registry-url@3.1.0: dependencies: rc "^1.0.1" +remove-accents@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/remove-accents/-/remove-accents-0.5.0.tgz#77991f37ba212afba162e375b627631315bed687" + integrity sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A== + request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" @@ -7620,7 +7795,7 @@ resolve-pkg-maps@^1.0.0: resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== -resolve@^1.12.0, resolve@^1.22.1, resolve@^1.22.4, resolve@^1.22.8: +resolve@^1.12.0, resolve@^1.19.0, resolve@^1.22.1, resolve@^1.22.4, resolve@^1.22.8: version "1.22.10" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== @@ -8060,6 +8235,11 @@ source-map-js@^1.0.1, source-map-js@^1.2.1: resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== +source-map@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -8384,6 +8564,11 @@ stylelint@^16.8.1: table "^6.9.0" write-file-atomic "^5.0.1" +stylis@4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" + integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== + sugarss@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-4.0.1.tgz#128a783ed71ee0fc3b489ce1f7d5a89bc1e24383" @@ -9247,6 +9432,11 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yaml@^1.10.0: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"