Skip to content

Commit

Permalink
analytics tab (wip) (#507)
Browse files Browse the repository at this point in the history
* hope this works

* Run Prettier

---------

Co-authored-by: Stanley Zheng <[email protected]>
Co-authored-by: szheng31 <[email protected]>
Co-authored-by: Isaac Liu <[email protected]>
  • Loading branch information
4 people authored Sep 17, 2024
1 parent 293f7f5 commit f299ac7
Show file tree
Hide file tree
Showing 6 changed files with 92 additions and 2 deletions.
42 changes: 42 additions & 0 deletions components/Organizer/AnalyticsTab/AnalyticsTab.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import { Table } from 'antd';

import useSWR from 'swr';
import { DietaryData, ResponseError } from '../../../types/database';
import { RequestType, useCustomSWR } from '../../../utils/request-utils';
import React, { useState, useRef, useEffect } from 'react';

export default function Analytics() {
const { data: dietaryData, error: dietaryError } = useCustomSWR<DietaryData[]>({
url: '/api/dietary-restrictions',
method: RequestType.GET,
errorMessage: 'Failed to get list of dietary data.',
});
console.log('dietaryData:', dietaryData); // Add this to debug

const columns = [
{
title: 'Dietary Restriction',
dataIndex: '_id', // Corresponds to the _id field in the data
key: '_id',
},
{
title: 'Count',
dataIndex: 'count', // Corresponds to the count field in the data
key: 'count',
},
];

// Format the dietary data to add a unique 'key' for each row
const formattedDietaryData = dietaryData
? dietaryData.map((restriction: DietaryData) => ({
...restriction,
key: restriction._id, // Use _id as key or fallback to index
}))
: undefined;

return (
<>
<Table columns={columns} dataSource={formattedDietaryData}></Table>
</>
);
}
10 changes: 8 additions & 2 deletions components/Organizer/OrganizerDash.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import ManageUsersTab from './ManageUsersTab/ManageUsersTab';
import PreAddUsersTab from './PreAddUsersTab/PreAddUsersTab';
import ApplicantsTab from './ApplicantsTab/ApplicantsTab';
import EventsTab from './EventsTab/EventsTab';
import AnalyticsTab from './AnalyticsTab/AnalyticsTab';
import styles from '../../styles/Organizer.module.css';
import { AccentColor, Theme, ThemeContext, getAccentColor, getThemedClass } from '../../theme/themeProvider';
import { useContext, useEffect } from 'react';
Expand Down Expand Up @@ -100,13 +101,18 @@ export default function OrganizerDash() {
children: <EventsTab />,
},
{
label: 'Bug Reports',
label: `Analytics`,
key: '7',
children: <AnalyticsTab />,
},
{
label: 'Bug Reports',
key: '8',
children: <BugReportsTab />,
},
{
label: `Settings`,
key: '8',
key: '9',
children: <SettingsTab />,
},
]}
Expand Down
31 changes: 31 additions & 0 deletions pages/api/dietary-restrictions.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import type { NextApiRequest, NextApiResponse } from 'next';
import dbConnect from '../../middleware/database';
import { getSession } from 'next-auth/react';
import Application from '../../models/application';

export default async function handler(req: NextApiRequest, res: NextApiResponse<any>) {
const session = await getSession({ req });

await dbConnect();

switch (req.method) {
case 'GET':
const count = await Application.aggregate([
{
$unwind: '$dietaryRestrictions',
},
{
$group: {
_id: '$dietaryRestrictions',
count: { $sum: 1 },
},
},
{
$sort: { count: -1 },
},
]);
return res.status(200).send(JSON.stringify(count));
default:
return res.status(405).send('Method not supported brother');
}
}
3 changes: 3 additions & 0 deletions public/darkmode.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions public/noun-light-mode-6724406.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions types/database.ts
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,11 @@ export interface JudgingSessionData {
time: String;
}

export interface DietaryData {
_id: mongoose.Schema.Types.ObjectId;
count: number;
}

export interface HackathonSettingsData {
_id: mongoose.Schema.Types.ObjectId;
HACKATHON_START: string; // MM/DD/YYYY HH:mm A
Expand Down

0 comments on commit f299ac7

Please sign in to comment.