diff --git a/src/ui/Router.tsx b/src/ui/Router.tsx index b0091e19..ba324a84 100644 --- a/src/ui/Router.tsx +++ b/src/ui/Router.tsx @@ -21,6 +21,7 @@ import { ManageIamPage } from './pages/iam/ManageIam.page'; import { ManageProfilePage } from './pages/profile/ManageProfile.page'; import { ManageStripeLinksPage } from './pages/stripe/ViewLinks.page'; import { ManageSigLeadsPage } from './pages/siglead/ManageSigLeads.page'; +import { ViewSigLeadPage } from './pages/siglead/ViewSigLead.page'; import { ManageRoomRequestsPage } from './pages/roomRequest/RoomRequestLanding.page'; import { ViewRoomRequest } from './pages/roomRequest/ViewRoomRequest.page'; @@ -182,6 +183,10 @@ const authenticatedRouter = createBrowserRouter([ path: '/siglead-management', element: , }, + { + path: '/siglead-management/:sigId', + element: , + }, { path: '/roomRequests', element: , diff --git a/src/ui/pages/siglead/ViewSigLead.page.tsx b/src/ui/pages/siglead/ViewSigLead.page.tsx new file mode 100644 index 00000000..d0902e83 --- /dev/null +++ b/src/ui/pages/siglead/ViewSigLead.page.tsx @@ -0,0 +1,204 @@ +import { + Title, + Box, + TextInput, + Textarea, + Switch, + Select, + Button, + Loader, + Container, + Transition, + useMantineColorScheme, + Table, + Group, + Stack, +} from '@mantine/core'; +import { DateTimePicker } from '@mantine/dates'; +import { useForm, zodResolver } from '@mantine/form'; +import { notifications } from '@mantine/notifications'; +import dayjs from 'dayjs'; +import React, { useEffect, useState } from 'react'; +import { useNavigate, useParams } from 'react-router-dom'; +import { z } from 'zod'; +import { AuthGuard } from '@ui/components/AuthGuard'; +import { getRunEnvironmentConfig } from '@ui/config'; +import { useApi } from '@ui/util/api'; +import { AppRoles } from '@common/roles'; + +const baseSigSchema = z.object({ + sigid: z.string().min(1), + signame: z.string().min(1), + description: z.string().optional(), +}); + +const baseSigMemberSchema = z.object({ + sigGroupId: z.string().min(1), + email: z.string().email('Invalid email'), + designation: z.enum(['L', 'M']), + id: z.string().optional(), + memberName: z.string(), +}); + +type sigDetails = z.infer; +type sigMemberDetails = z.infer; + +export const ViewSigLeadPage: React.FC = () => { + const [isSubmitting, setIsSubmitting] = useState(false); + const navigate = useNavigate(); + const api = useApi('core'); + const { colorScheme } = useMantineColorScheme(); + const { sigId } = useParams(); + const [sigMembers, setSigMembers] = useState([ + { + sigGroupId: sigId || '', + email: 'alice1@illinois.edu', + designation: 'L', + memberName: 'Alice', + }, + { + sigGroupId: sigId || '', + email: 'bob2@illinois.edu', + designation: 'M', + memberName: 'Bob', + }, + ]); + const [sigDetails, setSigDetails] = useState({ + sigid: sigId || '', + signame: 'Default Sig', + description: + 'A cool Sig with a lot of money and members. Founded in 1999 by Sir Charlie of Edinburgh. Focuses on making money and helping others earn more money via education.', + }); + + useEffect(() => { + // Fetch sig data and populate form / for now dummy data... + const getSig = async () => { + try { + /*const formValues = { + }; + form.setValues(formValues);*/ + } catch (error) { + console.error('Error fetching sig data:', error); + notifications.show({ + message: 'Failed to fetch sig data, please try again.', + }); + } + }; + getSig(); + }, [sigId]); + + const renderSigMember = (members: sigMemberDetails, index: number) => { + const shouldShow = true; + return ( + + {(styles) => ( + + {members.memberName} + {members.email} + {members.designation} + + )} + + ); + }; + + /* + const form = useForm({ + validate: zodResolver(requestBodySchema), + initialValues: { + title: '', + description: '', + start: new Date(), + end: new Date(new Date().valueOf() + 3.6e6), // 1 hr later + location: 'ACM Room (Siebel CS 1104)', + locationLink: 'https://maps.app.goo.gl/dwbBBBkfjkgj8gvA8', + host: 'ACM', + featured: false, + repeats: undefined, + repeatEnds: undefined, + paidEventId: undefined, + }, + }); + /* + const handleSubmit = async (values: EventPostRequest) => { + try { + setIsSubmitting(true); + const realValues = { + ...values, + start: dayjs(values.start).format('YYYY-MM-DD[T]HH:mm:00'), + end: values.end ? dayjs(values.end).format('YYYY-MM-DD[T]HH:mm:00') : undefined, + repeatEnds: + values.repeatEnds && values.repeats + ? dayjs(values.repeatEnds).format('YYYY-MM-DD[T]HH:mm:00') + : undefined, + repeats: values.repeats ? values.repeats : undefined, + }; + + const eventURL = isEditing ? `/api/v1/events/${eventId}` : '/api/v1/events'; + const response = await api.post(eventURL, realValues); + notifications.show({ + title: isEditing ? 'Event updated!' : 'Event created!', + message: isEditing ? undefined : `The event ID is "${response.data.id}".`, + }); + navigate('/events/manage'); + } catch (error) { + setIsSubmitting(false); + console.error('Error creating/editing event:', error); + notifications.show({ + message: 'Failed to create/edit event, please try again.', + }); + } + };*/ + + return ( + + + + + {sigDetails.sigid} + {sigDetails.description || ''} + + + + + + + + + + +
+ + + + Name + Email + Roles + + + {sigMembers.map(renderSigMember)} +
+
+
+
+ ); +};