From ccea0b4192b104665d9569cd1b0cac0373935520 Mon Sep 17 00:00:00 2001 From: Nicole Date: Fri, 20 Sep 2024 17:51:07 -0400 Subject: [PATCH 01/97] SCRUM-75 implemented display settings and selected button --- frontend/src/assets/Icons/DarkMode.svg | 15 +++++++ frontend/src/assets/Icons/DisplaySettings.svg | 10 +++++ frontend/src/assets/Icons/LightMode.svg | 15 +++++++ .../DisplaySettings/DisplaySettings.css | 30 ++++++++++++++ .../DisplaySettings/DisplaySettings.jsx | 41 +++++++++++++++++++ frontend/src/pages/Settings/Settings.css | 30 +++++++++++--- frontend/src/pages/Settings/Settings.jsx | 26 +++++++++++- 7 files changed, 161 insertions(+), 6 deletions(-) create mode 100644 frontend/src/assets/Icons/DarkMode.svg create mode 100644 frontend/src/assets/Icons/DisplaySettings.svg create mode 100644 frontend/src/assets/Icons/LightMode.svg create mode 100644 frontend/src/components/DisplaySettings/DisplaySettings.css create mode 100644 frontend/src/components/DisplaySettings/DisplaySettings.jsx diff --git a/frontend/src/assets/Icons/DarkMode.svg b/frontend/src/assets/Icons/DarkMode.svg new file mode 100644 index 00000000..4f7293fe --- /dev/null +++ b/frontend/src/assets/Icons/DarkMode.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/frontend/src/assets/Icons/DisplaySettings.svg b/frontend/src/assets/Icons/DisplaySettings.svg new file mode 100644 index 00000000..764b60a8 --- /dev/null +++ b/frontend/src/assets/Icons/DisplaySettings.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/src/assets/Icons/LightMode.svg b/frontend/src/assets/Icons/LightMode.svg new file mode 100644 index 00000000..e9ede3f3 --- /dev/null +++ b/frontend/src/assets/Icons/LightMode.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/frontend/src/components/DisplaySettings/DisplaySettings.css b/frontend/src/components/DisplaySettings/DisplaySettings.css new file mode 100644 index 00000000..2181de95 --- /dev/null +++ b/frontend/src/components/DisplaySettings/DisplaySettings.css @@ -0,0 +1,30 @@ + +.display-settings.settings-right{ + .settings-left .display{ + display: flex; + flex-direction: row; + align-items: center; + padding: 10px 18px; + gap: 10px; + /* height:43px; */ + width:100%; + box-sizing: border-box; + font-family: 'Satoshi'; + font-size: 14px; + color: var(--text); + transition: all 0.3s; + border-radius: 10px; + cursor:pointer; + } + + .settings-left .display button { + background: none; + border: none; + } + + img { + flex-direction: row; + border-radius: 0%; + } + +} \ No newline at end of file diff --git a/frontend/src/components/DisplaySettings/DisplaySettings.jsx b/frontend/src/components/DisplaySettings/DisplaySettings.jsx new file mode 100644 index 00000000..fcbfbb7c --- /dev/null +++ b/frontend/src/components/DisplaySettings/DisplaySettings.jsx @@ -0,0 +1,41 @@ +import React, { useEffect, useState } from 'react'; +import './DisplaySettings.css'; +import light from '../../assets/Icons/LightMode.svg'; +import dark from '../../assets/Icons/DarkMode.svg'; + + + +const DisplaySettings = ( {settingsRightSide, width, handleBackClick, rightarrow} ) => { + + return( +
+
+

Display Settings

+ {width <= 700 && settingsRightSide && ( + + )} +
+ +
+

light-dark mode preference

+
+ +
+ + + +
+ +
+ +
+ + + ); +} + + + +export default DisplaySettings; diff --git a/frontend/src/pages/Settings/Settings.css b/frontend/src/pages/Settings/Settings.css index 9c56e064..2aa10423 100644 --- a/frontend/src/pages/Settings/Settings.css +++ b/frontend/src/pages/Settings/Settings.css @@ -34,7 +34,7 @@ height:100%; border-right: 1px solid var(--lightborder); position: relative; - + /* gap:10px; */ } .settings-right{ @@ -71,7 +71,7 @@ display: flex; flex-direction: column; /* height: 37px; */ - width: 128px; + /* width: 128px; */ padding-left: 10px; } @@ -87,6 +87,7 @@ .settings-left .header p{ display: flex; flex-direction: column; + overflow:hidden; font-family: 'Satoshi'; font-size: 14px; color: var(--border); @@ -117,6 +118,24 @@ transition: all 0.3s; border-radius: 10px; cursor:pointer; + position: relative; +} + +.settings-left .preferences::before{ + content:''; + position: absolute; + height:80%; + left:1px; + width:5px; + border-radius: 0 5px 5px 0; + background-color: transparent; + transition: 0.3s; +} + +.settings-left .preferences.selected::before{ + content:''; + position: absolute; + background-color: var(--red); } .settings-right .header{ @@ -345,7 +364,6 @@ @media (max-width:700px) { .settings-left{ - display:block; width:100%; border-right:none; } @@ -388,15 +406,17 @@ .settings-left .header p{ font-size: 17px; - + } .settings-left .preferences{ font-size: 17px; - padding: 0px 24px; + /* padding: 0px 24px; */ position: relative; } + + .settings-left .preferences img{ width: 25px; } diff --git a/frontend/src/pages/Settings/Settings.jsx b/frontend/src/pages/Settings/Settings.jsx index 0c71f960..c0d0c00b 100644 --- a/frontend/src/pages/Settings/Settings.jsx +++ b/frontend/src/pages/Settings/Settings.jsx @@ -2,10 +2,12 @@ import React, { useEffect, useState } from 'react'; import Header from '../../components/Header/Header'; import AccountSettings from '../../components/AcccountSettings/AccountSettings.jsx'; import StudyPreferences from '../../components/StudyPreferences/StudyPreferences.jsx'; +import DisplaySettings from '../../components/DisplaySettings/DisplaySettings.jsx'; import './Settings.css'; import pfp from '../../assets/defaultAvatar.svg'; import preferences from '../../assets/Icons/Preferences.svg'; import rightarrow from '../../assets/Icons/RightArrow.svg'; +import display from '../../assets/Icons/DisplaySettings.svg' import useAuth from '../../hooks/useAuth.js'; import { useNavigate } from 'react-router-dom'; import axios from 'axios'; @@ -105,7 +107,7 @@ function Settings() { )} -
{handleArrowClick('StudyPreferences')}}> +
{handleArrowClick('StudyPreferences')}}>

Study Preferences

{width <= 700 && ( @@ -114,6 +116,16 @@ function Settings() { )}
+
{handleArrowClick('DisplaySettings')}}> + +

Display Settings

+ {width <= 700 && ( + + )} +
+ { isDeveloper !== null && !isDeveloper && ( ) } +
@@ -144,6 +157,17 @@ function Settings() { /> ) } + { + (width < 700 || currentPage === "DisplaySettings" ) && ( + + ) + } +
From 4d47ed4c6c7573b252ef82f42dc097c606d0ec18 Mon Sep 17 00:00:00 2001 From: Nicole Date: Tue, 24 Sep 2024 17:47:45 -0400 Subject: [PATCH 02/97] SCRUM-75 displayed light and dark images and added border, working on selecting the img and having border display --- .../DisplaySettings/DisplaySettings.css | 34 +++++++++++++++++-- .../DisplaySettings/DisplaySettings.jsx | 27 +++++++++++---- 2 files changed, 52 insertions(+), 9 deletions(-) diff --git a/frontend/src/components/DisplaySettings/DisplaySettings.css b/frontend/src/components/DisplaySettings/DisplaySettings.css index 2181de95..201b3306 100644 --- a/frontend/src/components/DisplaySettings/DisplaySettings.css +++ b/frontend/src/components/DisplaySettings/DisplaySettings.css @@ -21,10 +21,40 @@ background: none; border: none; } - - img { + + .profile .mode{ + display: flex; flex-direction: row; + } + .profile .light-mode{ + margin: 10px; + align-items: center; + } + + .profile .dark-mode{ + margin: 10px; + align-items: center; + } + + img { border-radius: 0%; + width: 100px; + height: 70px; + margin-left: 0px; + } + + .profile .mode button { + background: none; + /* border-radius: 10px; */ + /* border-color: red; */ + padding: 3px; + border: none; + } + .profile .mode img.selected { + border-radius: 10%; + border: 2px; + border-color: red; + } } \ No newline at end of file diff --git a/frontend/src/components/DisplaySettings/DisplaySettings.jsx b/frontend/src/components/DisplaySettings/DisplaySettings.jsx index fcbfbb7c..c35d1ed8 100644 --- a/frontend/src/components/DisplaySettings/DisplaySettings.jsx +++ b/frontend/src/components/DisplaySettings/DisplaySettings.jsx @@ -6,6 +6,12 @@ import dark from '../../assets/Icons/DarkMode.svg'; const DisplaySettings = ( {settingsRightSide, width, handleBackClick, rightarrow} ) => { + const [selectedMode, setSelectedMode] = useState(light); + + const handleModeSelect = (mode) => { + setSelectedMode(mode); + }; + return(
@@ -22,17 +28,24 @@ const DisplaySettings = ( {settingsRightSide, width, handleBackClick, rightarrow

light-dark mode preference


-
- - - +
+
+ +
+ +
+ + +
+
-
- - ); } From a4fcdf74dce8b8f6c7111a073ebd505c713954f8 Mon Sep 17 00:00:00 2001 From: Nicole Date: Sat, 28 Sep 2024 21:13:44 -0400 Subject: [PATCH 03/97] SCRUM-75 selected dark and light img border display --- .../DisplaySettings/DisplaySettings.css | 28 ++++++++++++++----- .../DisplaySettings/DisplaySettings.jsx | 11 ++++---- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/frontend/src/components/DisplaySettings/DisplaySettings.css b/frontend/src/components/DisplaySettings/DisplaySettings.css index 201b3306..64f189f9 100644 --- a/frontend/src/components/DisplaySettings/DisplaySettings.css +++ b/frontend/src/components/DisplaySettings/DisplaySettings.css @@ -29,11 +29,13 @@ .profile .light-mode{ margin: 10px; align-items: center; + position: relative; } .profile .dark-mode{ margin: 10px; align-items: center; + position: relative; } img { @@ -45,16 +47,28 @@ .profile .mode button { background: none; - /* border-radius: 10px; */ - /* border-color: red; */ - padding: 3px; + /* padding: 3px; */ border: none; } - .profile .mode img.selected { - border-radius: 10%; - border: 2px; - border-color: red; + .profile .mode .img::before{ + + + } + + .mode .selected::before{ + content:''; + border-radius: 10px; + border: 2px solid var(--red); + position: absolute; + top:-3px; + right:-2px; + width:calc(100%); + height: calc(100%); + } + + .profile .mode img.selected::before { + } } \ No newline at end of file diff --git a/frontend/src/components/DisplaySettings/DisplaySettings.jsx b/frontend/src/components/DisplaySettings/DisplaySettings.jsx index c35d1ed8..8e6e5179 100644 --- a/frontend/src/components/DisplaySettings/DisplaySettings.jsx +++ b/frontend/src/components/DisplaySettings/DisplaySettings.jsx @@ -6,7 +6,7 @@ import dark from '../../assets/Icons/DarkMode.svg'; const DisplaySettings = ( {settingsRightSide, width, handleBackClick, rightarrow} ) => { - const [selectedMode, setSelectedMode] = useState(light); + const [selectedMode, setSelectedMode] = useState("light"); const handleModeSelect = (mode) => { setSelectedMode(mode); @@ -29,15 +29,16 @@ const DisplaySettings = ( {settingsRightSide, width, handleBackClick, rightarrow
-
+
-
+
+
From f5a9cf031195ca8db9f0924c3b1f6460c27e3ddd Mon Sep 17 00:00:00 2001 From: Nicole Date: Fri, 4 Oct 2024 16:33:30 -0400 Subject: [PATCH 04/97] SCRUM-75 basic function for dark mode --- frontend/src/DarkModeContext.js | 223 ++++++++++++++++++ .../DisplaySettings/DisplaySettings.jsx | 26 +- 2 files changed, 247 insertions(+), 2 deletions(-) create mode 100644 frontend/src/DarkModeContext.js diff --git a/frontend/src/DarkModeContext.js b/frontend/src/DarkModeContext.js new file mode 100644 index 00000000..9f22ea58 --- /dev/null +++ b/frontend/src/DarkModeContext.js @@ -0,0 +1,223 @@ +import React, { createContext, useContext } from 'react'; +import axios from 'axios'; + +/** +documentation: +https://incongruous-reply-44a.notion.site/Frontend-CacheProvider-Component-CacheContext-64296ab287fc4347be59ca848cc632b0 +*/ +export const CacheContext = createContext(); + +export const CacheProvider = ({children}) =>{ + let cache = {}; + + const getRooms = async () => { + try { + if(cache['/getrooms']){ + return cache['/getrooms']; + } else{ + const response = await fetch(`/getrooms`); + const responseBody = await response.json(); + if (!response.ok) { + // Log the error if the response status is not OK + console.error("Error fetching data:", responseBody.message); + return; + } + + if (!responseBody.success) { + // Log the error if success is false + console.error("Error fetching room names:", responseBody.message); + return; + } + cache['/getrooms'] = responseBody.data; + return responseBody.data; + } + + } catch (error) { + console.error("Error:", error); + + } + + }; + + const getRoom = async (id) => { + try { + const queryString = `/getroom/${id}`; + if(cache[queryString]){ + // console.log('returning cached'); + return cache[queryString]; + } else { + const response = await fetch(`/getroom/${id}`); + const data = await response.json(); + //console.log(data.data); + cache[queryString] = data; + return data; + } + } catch (error) { + console.error("Error fetching data: ", error); + } + }; + + const getRoomUpdate = async (id) => { + try { + const queryString = `/getroom/${id}`; + const response = await fetch(`/getroom/${id}`); + const data = await response.json(); + //console.log(data.data); + cache[queryString] = data; + return data; + + } catch (error) { + console.error("Error fetching data: ", error); + } + }; + + const getFreeRooms = async (query) => { + try { + const queryString = `/free/${JSON.stringify(query)}`; + + if(cache[queryString]){ + setTimeout(() => { // this is for asynchronous nature of useState, else useEffect won't trigger + return cache[queryString]; + }, 100); + } + const response = await axios.post('/free', { query }); + const responseBody = response.data; + + if (!responseBody.success) { + // Log the error message if the operation was not successful + console.error("Error fetching free rooms:", responseBody.message); + return; + } + + //exclude entries including "alumni" + // responseBody.data = responseBody.data.filter(room => !room.name.toLowerCase().includes('alumni')); + + const roomNames = responseBody.data.filter(room => !room.toLowerCase().includes('alumni')); // Extract the room names from the response data + cache[queryString] = responseBody.data; + //console.log(roomNames); // Log the room names or process them as needed + return roomNames; + } catch (error) { + console.error('Error fetching free rooms:', error); + return []; // Return an empty array or handle the error as needed + } + }; + + const getBatch = async (queries) => { + if (queries.length === 0) { + return []; + } + + const fetchQueries = []; + const results = []; + const cacheMisses = []; + + // check which queries are already cached + queries.forEach((query, index) => { + const cacheKey = `/getroom/${query}`; + if (cache[cacheKey]) { + results[index] = cache[cacheKey]; + } else { + fetchQueries.push(query); + cacheMisses.push(index); + } + }); + + // if all queries are cached, return the results + if (fetchQueries.length === 0) { + return results.filter(result => result); + } + + // fetch missing data from the backend + try { + const response = await axios.post('/getbatch', { queries: fetchQueries, exhaustive: true }); + const responseBody = response.data; + if (!responseBody.success) { + console.error('Error fetching batch data:', responseBody.message); + return; + } + + // update cache and results with fetched data + responseBody.data.forEach((data, i) => { + const cacheKey = `/getroom/${fetchQueries[i]}`; + cache[cacheKey] = data; + results[cacheMisses[i]] = data; // insert data into the correct position + }); + + return results.filter(result => result); + } catch (error) { + console.error('Error fetching data:', error); + } + }; + + const search = async (query, attributes, sort) => { + try{ + if(`${query}${attributes}${sort}` in cache){ + return cache[`${query}${attributes}${sort}`]; + } + const response = await axios.get('/search', { + params: { + query: query, + attributes: attributes, + sort: sort + }, headers: { + 'Authorization': `Bearer ${localStorage.getItem('token')}` + } + }); + const responseBody = response.data; + if(!responseBody.success){ + console.error('Error fetching search data:', responseBody.message); + return; + } + cache[`${query}${attributes}${sort}`] = responseBody.data; + return responseBody.data; + } catch (error){ + console.error('Error fetching search data:', error); + throw error; + } + }; + + const allSearch = async (nameQuery, timeQuery, attributes, sort) => { + try{ + // add cacheing logic + const response = await axios.get('/all-purpose-search', { + params:{ + query : nameQuery, + timePeriod : timeQuery, + attributes : attributes, + sort : sort, + }, headers: { + 'Authorization' : `Bearer ${localStorage.getItem('token')}` + } + }); + const responseBody = response.data; + if(!responseBody.success){ + console.error('Error fetching search data:', responseBody.message); + return; + } + return responseBody.data; + } catch (error){ + throw error; + } + } + + function debounce(func, wait) { //move logic to other file + let timeout; + return function executedFunction(...args) { + const later = () => { + clearTimeout(timeout); + func(...args); + }; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + }; + } + + + return ( + + {children} + + ); +}; + +export const useCache = () => useContext(CacheContext); \ No newline at end of file diff --git a/frontend/src/components/DisplaySettings/DisplaySettings.jsx b/frontend/src/components/DisplaySettings/DisplaySettings.jsx index 8e6e5179..b3ac3d90 100644 --- a/frontend/src/components/DisplaySettings/DisplaySettings.jsx +++ b/frontend/src/components/DisplaySettings/DisplaySettings.jsx @@ -3,11 +3,33 @@ import './DisplaySettings.css'; import light from '../../assets/Icons/LightMode.svg'; import dark from '../../assets/Icons/DarkMode.svg'; - - const DisplaySettings = ( {settingsRightSide, width, handleBackClick, rightarrow} ) => { const [selectedMode, setSelectedMode] = useState("light"); + useEffect(() => { + const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)'); + setSelectedMode(mediaQuery.matches ? 'dark' : 'light'); + + const handleChange = (e) => { + setSelectedMode(e.matches ? 'dark' : 'light'); + }; + + mediaQuery.addEventListener('change', handleChange); + + return () => { + mediaQuery.removeEventListener('change', handleChange); + }; + }, []); + + + useEffect( () => { + if (selectedMode === 'dark'){ + document.documentElement.classList.add('dark-mode'); + } else { + document.documentElement.classList.remove('dark-mode'); + } + }, [selectedMode] ); + const handleModeSelect = (mode) => { setSelectedMode(mode); }; From 449885175d8798cf6cc55d3ecb1d648b7e4239ef Mon Sep 17 00:00:00 2001 From: Nicole Date: Tue, 8 Oct 2024 18:31:44 -0400 Subject: [PATCH 05/97] SCRUM-75 added dark mode contect --- frontend/src/App.js | 51 ++--- frontend/src/DarkModeContext.js | 246 +++-------------------- frontend/src/pages/Settings/Settings.jsx | 1 + 3 files changed, 61 insertions(+), 237 deletions(-) diff --git a/frontend/src/App.js b/frontend/src/App.js index a824fa59..c8f20c8e 100644 --- a/frontend/src/App.js +++ b/frontend/src/App.js @@ -22,6 +22,7 @@ import { NotificationProvider } from './NotificationContext'; import { ErrorProvider } from './ErrorContext'; import { ProfileCreationProvider } from './ProfileCreationContext'; import { WebSocketProvider } from './WebSocketContext'; +import { DarkModeProvider } from './DarkModeContext'; import Layout from './pages/Layout/Layout'; import axios from 'axios'; @@ -53,30 +54,32 @@ function App() { - - - - }> - }/> - }/> - }/> - }/> - }/> - }/> - }/> - }/> - }/> - }/> - }/> - }/> - }/> - }/> - }/> - }/> - - - - + + + + + }> + }/> + }/> + }/> + }/> + }/> + }/> + }/> + }/> + }/> + }/> + }/> + }/> + }/> + }/> + }/> + }/> + + + + + diff --git a/frontend/src/DarkModeContext.js b/frontend/src/DarkModeContext.js index 9f22ea58..54ef37f8 100644 --- a/frontend/src/DarkModeContext.js +++ b/frontend/src/DarkModeContext.js @@ -1,223 +1,43 @@ -import React, { createContext, useContext } from 'react'; -import axios from 'axios'; +import React, { createContext, useContext, useState, useEffect } from 'react'; +import useAuth from './hooks/useAuth'; -/** -documentation: -https://incongruous-reply-44a.notion.site/Frontend-CacheProvider-Component-CacheContext-64296ab287fc4347be59ca848cc632b0 -*/ -export const CacheContext = createContext(); +// Create the context +const DarkModeContext = createContext(); -export const CacheProvider = ({children}) =>{ - let cache = {}; +// Function to use the dark mode context +export const useDarkMode = () => useContext(DarkModeContext); - const getRooms = async () => { - try { - if(cache['/getrooms']){ - return cache['/getrooms']; - } else{ - const response = await fetch(`/getrooms`); - const responseBody = await response.json(); - if (!response.ok) { - // Log the error if the response status is not OK - console.error("Error fetching data:", responseBody.message); - return; - } - - if (!responseBody.success) { - // Log the error if success is false - console.error("Error fetching room names:", responseBody.message); - return; - } - cache['/getrooms'] = responseBody.data; - return responseBody.data; - } - - } catch (error) { - console.error("Error:", error); - - } - - }; - - const getRoom = async (id) => { - try { - const queryString = `/getroom/${id}`; - if(cache[queryString]){ - // console.log('returning cached'); - return cache[queryString]; - } else { - const response = await fetch(`/getroom/${id}`); - const data = await response.json(); - //console.log(data.data); - cache[queryString] = data; - return data; - } - } catch (error) { - console.error("Error fetching data: ", error); - } - }; +// Dark Mode provider component +export const DarkModeProvider = ({ children }) => { + const [notifications, setNotifications] = useState([]); - const getRoomUpdate = async (id) => { - try { - const queryString = `/getroom/${id}`; - const response = await fetch(`/getroom/${id}`); - const data = await response.json(); - //console.log(data.data); - cache[queryString] = data; - return data; - - } catch (error) { - console.error("Error fetching data: ", error); - } - }; - - const getFreeRooms = async (query) => { - try { - const queryString = `/free/${JSON.stringify(query)}`; - - if(cache[queryString]){ - setTimeout(() => { // this is for asynchronous nature of useState, else useEffect won't trigger - return cache[queryString]; - }, 100); - } - const response = await axios.post('/free', { query }); - const responseBody = response.data; - - if (!responseBody.success) { - // Log the error message if the operation was not successful - console.error("Error fetching free rooms:", responseBody.message); - return; - } - - //exclude entries including "alumni" - // responseBody.data = responseBody.data.filter(room => !room.name.toLowerCase().includes('alumni')); - - const roomNames = responseBody.data.filter(room => !room.toLowerCase().includes('alumni')); // Extract the room names from the response data - cache[queryString] = responseBody.data; - //console.log(roomNames); // Log the room names or process them as needed - return roomNames; - } catch (error) { - console.error('Error fetching free rooms:', error); - return []; // Return an empty array or handle the error as needed - } - }; - - const getBatch = async (queries) => { - if (queries.length === 0) { - return []; - } - - const fetchQueries = []; - const results = []; - const cacheMisses = []; - - // check which queries are already cached - queries.forEach((query, index) => { - const cacheKey = `/getroom/${query}`; - if (cache[cacheKey]) { - results[index] = cache[cacheKey]; - } else { - fetchQueries.push(query); - cacheMisses.push(index); - } - }); - - // if all queries are cached, return the results - if (fetchQueries.length === 0) { - return results.filter(result => result); - } - - // fetch missing data from the backend - try { - const response = await axios.post('/getbatch', { queries: fetchQueries, exhaustive: true }); - const responseBody = response.data; - if (!responseBody.success) { - console.error('Error fetching batch data:', responseBody.message); - return; - } - - // update cache and results with fetched data - responseBody.data.forEach((data, i) => { - const cacheKey = `/getroom/${fetchQueries[i]}`; - cache[cacheKey] = data; - results[cacheMisses[i]] = data; // insert data into the correct position - }); - - return results.filter(result => result); - } catch (error) { - console.error('Error fetching data:', error); - } - }; - - const search = async (query, attributes, sort) => { - try{ - if(`${query}${attributes}${sort}` in cache){ - return cache[`${query}${attributes}${sort}`]; - } - const response = await axios.get('/search', { - params: { - query: query, - attributes: attributes, - sort: sort - }, headers: { - 'Authorization': `Bearer ${localStorage.getItem('token')}` - } - }); - const responseBody = response.data; - if(!responseBody.success){ - console.error('Error fetching search data:', responseBody.message); - return; - } - cache[`${query}${attributes}${sort}`] = responseBody.data; - return responseBody.data; - } catch (error){ - console.error('Error fetching search data:', error); - throw error; - } - }; + // check for auth + const { isAuthenticating, isAuthenticated, user, getDeveloper } = useAuth(); - const allSearch = async (nameQuery, timeQuery, attributes, sort) => { - try{ - // add cacheing logic - const response = await axios.get('/all-purpose-search', { - params:{ - query : nameQuery, - timePeriod : timeQuery, - attributes : attributes, - sort : sort, - }, headers: { - 'Authorization' : `Bearer ${localStorage.getItem('token')}` - } - }); - const responseBody = response.data; - if(!responseBody.success){ - console.error('Error fetching search data:', responseBody.message); - return; - } - return responseBody.data; - } catch (error){ - throw error; + useEffect(() => { + if (isAuthenticating) { + return; } - } - function debounce(func, wait) { //move logic to other file - let timeout; - return function executedFunction(...args) { - const later = () => { - clearTimeout(timeout); - func(...args); - }; - clearTimeout(timeout); - timeout = setTimeout(later, wait); - }; - } + // if (!isAuthenticated) { + // // navigate("/login"); + // } + // if (!user) { + // return; + // } else { + // console.log(user); + // } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [isAuthenticating, isAuthenticated, user]) + + // check for user system preference + // use code from dusplay settings + + return ( + + {children} - return ( - - {children} - - ); + + ); }; - -export const useCache = () => useContext(CacheContext); \ No newline at end of file diff --git a/frontend/src/pages/Settings/Settings.jsx b/frontend/src/pages/Settings/Settings.jsx index ce00a3b9..22c2eef5 100644 --- a/frontend/src/pages/Settings/Settings.jsx +++ b/frontend/src/pages/Settings/Settings.jsx @@ -2,6 +2,7 @@ import React, { useEffect, useState } from 'react'; import Header from '../../components/Header/Header'; import AccountSettings from '../../components/AcccountSettings/AccountSettings.jsx'; import StudyPreferences from '../../components/StudyPreferences/StudyPreferences.jsx'; +import DisplaySettings from '../../components/DisplaySettings/DisplaySettings.jsx'; import './Settings.scss'; import pfp from '../../assets/defaultAvatar.svg'; import preferences from '../../assets/Icons/Preferences.svg'; From 1df5d5e8614d1ef3f05a7e100b32f49aff296d92 Mon Sep 17 00:00:00 2001 From: Nicole Date: Tue, 15 Oct 2024 18:14:25 -0400 Subject: [PATCH 06/97] SCRUM-75 edit dark mode context --- frontend/src/DarkModeContext.js | 51 ++++++++++++------- .../DisplaySettings/DisplaySettings.jsx | 26 ++++++---- 2 files changed, 49 insertions(+), 28 deletions(-) diff --git a/frontend/src/DarkModeContext.js b/frontend/src/DarkModeContext.js index 54ef37f8..78771f53 100644 --- a/frontend/src/DarkModeContext.js +++ b/frontend/src/DarkModeContext.js @@ -11,31 +11,48 @@ export const useDarkMode = () => useContext(DarkModeContext); export const DarkModeProvider = ({ children }) => { const [notifications, setNotifications] = useState([]); - // check for auth - const { isAuthenticating, isAuthenticated, user, getDeveloper } = useAuth(); + // check for auth + const { isAuthenticating, isAuthenticated, user, getDeveloper } = useAuth(); + + const [darkMode, setDarkMode] = useState(() => { + const systemPrefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches; + return systemPrefersDark; + }); useEffect(() => { - if (isAuthenticating) { - return; - } + const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)'); + const handleChange = () => setDarkMode(mediaQuery.matches); + + // Listen for changes in system preference + mediaQuery.addEventListener('change', handleChange); + + // Clean up event listener + return () => mediaQuery.removeEventListener('change', handleChange); + }, []); + + useEffect(() => { + if (isAuthenticating) { + return; + } - // if (!isAuthenticated) { - // // navigate("/login"); - // } - // if (!user) { - // return; - // } else { - // console.log(user); - // } - // eslint-disable-next-line react-hooks/exhaustive-deps + if (isAuthenticated && user) { + const userPreference = user.darkModePreference; + + if (userPreference !== undefined) { + setDarkMode(userPreference); + } + } }, [isAuthenticating, isAuthenticated, user]) // check for user system preference - // use code from dusplay settings + // use code from display settings - + const toggleDarkMode = () => { + setDarkMode(prevMode => !prevMode); + }; + return ( - + {children} diff --git a/frontend/src/components/DisplaySettings/DisplaySettings.jsx b/frontend/src/components/DisplaySettings/DisplaySettings.jsx index b3ac3d90..4b0bfcc8 100644 --- a/frontend/src/components/DisplaySettings/DisplaySettings.jsx +++ b/frontend/src/components/DisplaySettings/DisplaySettings.jsx @@ -2,24 +2,27 @@ import React, { useEffect, useState } from 'react'; import './DisplaySettings.css'; import light from '../../assets/Icons/LightMode.svg'; import dark from '../../assets/Icons/DarkMode.svg'; +import { useDarkMode } from '../../DarkModeContext'; const DisplaySettings = ( {settingsRightSide, width, handleBackClick, rightarrow} ) => { - const [selectedMode, setSelectedMode] = useState("light"); + const {darkMode, toggleDarkMode} = useDarkMode(); + const [selectedMode, setSelectedMode] = useState(darkMode ? "dark" : "light"); useEffect(() => { - const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)'); - setSelectedMode(mediaQuery.matches ? 'dark' : 'light'); + // const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)'); + setSelectedMode(darkMode ? 'dark' : 'light'); + }, [darkMode] ); - const handleChange = (e) => { - setSelectedMode(e.matches ? 'dark' : 'light'); - }; + // const handleChange = (e) => { + // setSelectedMode(e.matches ? 'dark' : 'light'); + // }; - mediaQuery.addEventListener('change', handleChange); + // mediaQuery.addEventListener('change', handleChange); - return () => { - mediaQuery.removeEventListener('change', handleChange); - }; - }, []); + // return () => { + // mediaQuery.removeEventListener('change', handleChange); + // }; + // }, []); useEffect( () => { @@ -32,6 +35,7 @@ const DisplaySettings = ( {settingsRightSide, width, handleBackClick, rightarrow const handleModeSelect = (mode) => { setSelectedMode(mode); + toggleDarkMode(); }; From 9473f823851fb7dbf4d14477c70c75c263122235 Mon Sep 17 00:00:00 2001 From: Nicole Date: Tue, 22 Oct 2024 17:48:24 -0400 Subject: [PATCH 07/97] SCRUM-75 finish dark mode context --- backend/routes/userRoutes.js | 3 +- frontend/src/App.js | 2 +- frontend/src/DBInteractions.js | 5 ++- frontend/src/DarkModeContext.js | 32 ++++++++++++------- .../DisplaySettings/DisplaySettings.jsx | 7 ++-- frontend/src/pages/Layout/Layout.jsx | 3 ++ 6 files changed, 33 insertions(+), 19 deletions(-) diff --git a/backend/routes/userRoutes.js b/backend/routes/userRoutes.js index 06306494..b979f6e9 100644 --- a/backend/routes/userRoutes.js +++ b/backend/routes/userRoutes.js @@ -14,7 +14,7 @@ const { sendDiscordMessage } = require('../services/discordWebookService'); const router = express.Router(); router.post("/update-user", verifyToken, async (req, res) =>{ - const { name, username, classroom, recommendation, onboarded } = req.body + const { name, username, classroom, recommendation, onboarded, darkModePreference } = req.body try{ const user = await User.findById(req.user.userId); if (!user) { @@ -26,6 +26,7 @@ router.post("/update-user", verifyToken, async (req, res) =>{ user.classroomPreferences = classroom ? classroom : user.classroomPreferences; user.recommendationPreferences = recommendation ? recommendation : user.recommendationPreferences; user.onboarded = onboarded ? onboarded : user.onboarded; + user.darkModePreference = darkModePreference ? darkModePreference : user.darkModePreference; await user.save(); console.log(`POST: /update-user ${req.user.userId} successful`); diff --git a/frontend/src/App.js b/frontend/src/App.js index c8f20c8e..6142fd80 100644 --- a/frontend/src/App.js +++ b/frontend/src/App.js @@ -22,7 +22,7 @@ import { NotificationProvider } from './NotificationContext'; import { ErrorProvider } from './ErrorContext'; import { ProfileCreationProvider } from './ProfileCreationContext'; import { WebSocketProvider } from './WebSocketContext'; -import { DarkModeProvider } from './DarkModeContext'; +import { DarkModeProvider, useDarkMode } from './DarkModeContext'; import Layout from './pages/Layout/Layout'; import axios from 'axios'; diff --git a/frontend/src/DBInteractions.js b/frontend/src/DBInteractions.js index f5cbdf5a..ec29acf4 100644 --- a/frontend/src/DBInteractions.js +++ b/frontend/src/DBInteractions.js @@ -66,9 +66,9 @@ const save = async (roomId, userId, operation) => { } }; -const saveUser = async (name, username, email, password, recommendation, classroom) => { +const saveUser = async (name, username, email, password, recommendation, classroom, darkModePreference) => { try{ - const response = await axios.post('/update-user', {name, email, username, classroom, recommendation, onboarded :null}, {headers: {'Authorization': `Bearer ${localStorage.getItem('token')}`}}); + const response = await axios.post('/update-user', {name, email, username, classroom, recommendation, onboarded :null, darkModePreference}, {headers: {'Authorization': `Bearer ${localStorage.getItem('token')}`}}); const responseBody = response.body; console.log(response); if (response.data.success) { @@ -80,7 +80,6 @@ const saveUser = async (name, username, email, password, recommendation, classro console.error("Error saving user"); throw error; } - } const checkUsername = async (username) => { diff --git a/frontend/src/DarkModeContext.js b/frontend/src/DarkModeContext.js index 78771f53..40961b62 100644 --- a/frontend/src/DarkModeContext.js +++ b/frontend/src/DarkModeContext.js @@ -13,11 +13,11 @@ export const DarkModeProvider = ({ children }) => { // check for auth const { isAuthenticating, isAuthenticated, user, getDeveloper } = useAuth(); - - const [darkMode, setDarkMode] = useState(() => { - const systemPrefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches; - return systemPrefersDark; - }); + + const [darkMode, setDarkMode] = useState(() => { + const systemPrefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches; + return systemPrefersDark; + }); useEffect(() => { const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)'); @@ -25,9 +25,11 @@ export const DarkModeProvider = ({ children }) => { // Listen for changes in system preference mediaQuery.addEventListener('change', handleChange); + console.log("hello from dark mode"); // Clean up event listener return () => mediaQuery.removeEventListener('change', handleChange); + }, []); useEffect(() => { @@ -37,22 +39,30 @@ export const DarkModeProvider = ({ children }) => { if (isAuthenticated && user) { const userPreference = user.darkModePreference; - if (userPreference !== undefined) { - setDarkMode(userPreference); + if(userPreference === true){ + setDarkMode(true); + document.documentElement.classList.add('dark-mode'); + } } + } }, [isAuthenticating, isAuthenticated, user]) // check for user system preference - // use code from display settings + // use code from display settings + + // const toggleDarkMode = () => { + // setDarkMode(prevMode => !prevMode); + // }; - const toggleDarkMode = () => { - setDarkMode(prevMode => !prevMode); + const setSpecificMode = (mode) => { + setDarkMode(mode); }; + return ( - + {children} diff --git a/frontend/src/components/DisplaySettings/DisplaySettings.jsx b/frontend/src/components/DisplaySettings/DisplaySettings.jsx index 4b0bfcc8..44e6034e 100644 --- a/frontend/src/components/DisplaySettings/DisplaySettings.jsx +++ b/frontend/src/components/DisplaySettings/DisplaySettings.jsx @@ -3,9 +3,10 @@ import './DisplaySettings.css'; import light from '../../assets/Icons/LightMode.svg'; import dark from '../../assets/Icons/DarkMode.svg'; import { useDarkMode } from '../../DarkModeContext'; +import { saveUser } from '../../DBInteractions'; const DisplaySettings = ( {settingsRightSide, width, handleBackClick, rightarrow} ) => { - const {darkMode, toggleDarkMode} = useDarkMode(); + const {darkMode, setSpecificMode} = useDarkMode(); const [selectedMode, setSelectedMode] = useState(darkMode ? "dark" : "light"); useEffect(() => { @@ -35,8 +36,8 @@ const DisplaySettings = ( {settingsRightSide, width, handleBackClick, rightarrow const handleModeSelect = (mode) => { setSelectedMode(mode); - toggleDarkMode(); - }; + setSpecificMode(mode === 'dark'); + }; return( diff --git a/frontend/src/pages/Layout/Layout.jsx b/frontend/src/pages/Layout/Layout.jsx index 5f2bf24d..51df2876 100644 --- a/frontend/src/pages/Layout/Layout.jsx +++ b/frontend/src/pages/Layout/Layout.jsx @@ -5,7 +5,10 @@ import Banner from '../../components/Banner/Banner'; // Import your Banner compo function Layout() { const [visible, setVisible] = useState(false); + const [viewport, setViewport] = useState("100vh"); + + useEffect(() => { let height = window.innerHeight; setViewport(height + 'px'); From 413412a6314cf74ce872436f591136a63c704559 Mon Sep 17 00:00:00 2001 From: Nicole Date: Fri, 25 Oct 2024 16:24:42 -0400 Subject: [PATCH 08/97] SCRUM-75 edited disply preference page --- .../components/AcccountSettings/AccountSettings.jsx | 4 ++-- .../components/DisplaySettings/DisplaySettings.css | 8 ++++++++ .../components/DisplaySettings/DisplaySettings.jsx | 11 +++++++++++ .../components/StudyPreferences/StudyPreferences.jsx | 2 -- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/frontend/src/components/AcccountSettings/AccountSettings.jsx b/frontend/src/components/AcccountSettings/AccountSettings.jsx index 3df3c4a5..f12e3318 100644 --- a/frontend/src/components/AcccountSettings/AccountSettings.jsx +++ b/frontend/src/components/AcccountSettings/AccountSettings.jsx @@ -24,7 +24,7 @@ function AccountSettings({ settingsRightSide, width, handleBackClick, userInfo } // } ); const handleNameChange = (e) => { - // setName(e.target.value); + // setName(e.target.value); }; const handleUsernameChange = (e) => { @@ -37,7 +37,7 @@ function AccountSettings({ settingsRightSide, width, handleBackClick, userInfo } const saveUsername = () => { if (editUsername){ - saveUser(name, username, email, null, null, null); + saveUser(name, username, email, null, null, null, null); } setEditUsername(!editUsername); diff --git a/frontend/src/components/DisplaySettings/DisplaySettings.css b/frontend/src/components/DisplaySettings/DisplaySettings.css index 64f189f9..3970fac3 100644 --- a/frontend/src/components/DisplaySettings/DisplaySettings.css +++ b/frontend/src/components/DisplaySettings/DisplaySettings.css @@ -37,6 +37,12 @@ align-items: center; position: relative; } + + .profile .button{ + display: flex; + border: none; + border-radius: 6px; + } img { border-radius: 0%; @@ -71,4 +77,6 @@ } + + } \ No newline at end of file diff --git a/frontend/src/components/DisplaySettings/DisplaySettings.jsx b/frontend/src/components/DisplaySettings/DisplaySettings.jsx index 44e6034e..870097ee 100644 --- a/frontend/src/components/DisplaySettings/DisplaySettings.jsx +++ b/frontend/src/components/DisplaySettings/DisplaySettings.jsx @@ -38,6 +38,14 @@ const DisplaySettings = ( {settingsRightSide, width, handleBackClick, rightarrow setSelectedMode(mode); setSpecificMode(mode === 'dark'); }; + + // database takes pritority over system + const saveUsername = () => { + if (selectedMode === 'dark'){ + saveUser(null, null, null, null, null, null, true); + } + + } return( @@ -71,6 +79,9 @@ const DisplaySettings = ( {settingsRightSide, width, handleBackClick, rightarrow
+ + +
diff --git a/frontend/src/components/StudyPreferences/StudyPreferences.jsx b/frontend/src/components/StudyPreferences/StudyPreferences.jsx index 34f98318..38e1f792 100644 --- a/frontend/src/components/StudyPreferences/StudyPreferences.jsx +++ b/frontend/src/components/StudyPreferences/StudyPreferences.jsx @@ -101,8 +101,6 @@ const StudyPreferences = ({ settingsRightSide, width, handleBackClick, userInfo disabled={!active && (sliderValue == initialSliderValue)} > save - - From 06fc5a5bd76054925a94ed291ef2366fb83fa483 Mon Sep 17 00:00:00 2001 From: Nicole Date: Fri, 25 Oct 2024 16:57:41 -0400 Subject: [PATCH 09/97] SCRUM-75 added save disply preference page --- .../DisplaySettings/DisplaySettings.css | 15 ++++++++++++--- .../DisplaySettings/DisplaySettings.jsx | 10 ++++------ 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/frontend/src/components/DisplaySettings/DisplaySettings.css b/frontend/src/components/DisplaySettings/DisplaySettings.css index 3970fac3..f851505a 100644 --- a/frontend/src/components/DisplaySettings/DisplaySettings.css +++ b/frontend/src/components/DisplaySettings/DisplaySettings.css @@ -38,8 +38,17 @@ position: relative; } - .profile .button{ + .profile button{ display: flex; + background: darkgray; + font-family: "Inter"; + font-weight: 500; + color: var(--text); + font-size: 13px; + padding: 5px 9px; + height: -moz-fit-content; + height: fit-content; + outline: none; border: none; border-radius: 6px; } @@ -67,8 +76,8 @@ border-radius: 10px; border: 2px solid var(--red); position: absolute; - top:-3px; - right:-2px; + top:-2px; + right: -2px; width:calc(100%); height: calc(100%); } diff --git a/frontend/src/components/DisplaySettings/DisplaySettings.jsx b/frontend/src/components/DisplaySettings/DisplaySettings.jsx index 870097ee..c6a9b567 100644 --- a/frontend/src/components/DisplaySettings/DisplaySettings.jsx +++ b/frontend/src/components/DisplaySettings/DisplaySettings.jsx @@ -40,11 +40,9 @@ const DisplaySettings = ( {settingsRightSide, width, handleBackClick, rightarrow }; // database takes pritority over system - const saveUsername = () => { - if (selectedMode === 'dark'){ - saveUser(null, null, null, null, null, null, true); - } - + const savePreference = () => { + const isDarkMode = selectedMode === 'dark'; + saveUser(null, null, null, null, null, null, isDarkMode) } @@ -80,7 +78,7 @@ const DisplaySettings = ( {settingsRightSide, width, handleBackClick, rightarrow - + From 0f55c5bb66f70ef7033f5a1d34b1c2eb6827bd23 Mon Sep 17 00:00:00 2001 From: Nicole Date: Tue, 29 Oct 2024 17:43:16 -0400 Subject: [PATCH 10/97] SCRUM-75 finished save button functionality and created a new page --- backend/routes/userRoutes.js | 2 +- frontend/src/App.js | 2 ++ .../DisplaySettings/DisplaySettings.css | 11 ----------- .../DisplaySettings/DisplaySettings.jsx | 8 +++++--- frontend/src/pages/Club/Club.jsx | 18 ++++++++++++++++++ frontend/src/pages/Club/Club.scss | 0 6 files changed, 26 insertions(+), 15 deletions(-) create mode 100644 frontend/src/pages/Club/Club.jsx create mode 100644 frontend/src/pages/Club/Club.scss diff --git a/backend/routes/userRoutes.js b/backend/routes/userRoutes.js index b979f6e9..79b28b9d 100644 --- a/backend/routes/userRoutes.js +++ b/backend/routes/userRoutes.js @@ -26,7 +26,7 @@ router.post("/update-user", verifyToken, async (req, res) =>{ user.classroomPreferences = classroom ? classroom : user.classroomPreferences; user.recommendationPreferences = recommendation ? recommendation : user.recommendationPreferences; user.onboarded = onboarded ? onboarded : user.onboarded; - user.darkModePreference = darkModePreference ? darkModePreference : user.darkModePreference; + user.darkModePreference = darkModePreference !== null ? darkModePreference : user.darkModePreference; await user.save(); console.log(`POST: /update-user ${req.user.userId} successful`); diff --git a/frontend/src/App.js b/frontend/src/App.js index 6142fd80..3ff6341b 100644 --- a/frontend/src/App.js +++ b/frontend/src/App.js @@ -11,6 +11,7 @@ import Settings from './pages/Settings/Settings'; import Friends from './pages/Friends/Friends'; import Profile from './pages/Profile/Profile'; import Landing from './pages/Landing/Landing'; +import Club from './pages/Club/Club'; import DeveloperOnboard from './pages/DeveloperOnboarding/DeveloperOnboarding'; import QR from './pages/QR/QR'; import Admin from './pages/Admin/Admin'; @@ -71,6 +72,7 @@ function App() { }/> }/> }/> + }/> }/> }/> }/> diff --git a/frontend/src/components/DisplaySettings/DisplaySettings.css b/frontend/src/components/DisplaySettings/DisplaySettings.css index f851505a..49642969 100644 --- a/frontend/src/components/DisplaySettings/DisplaySettings.css +++ b/frontend/src/components/DisplaySettings/DisplaySettings.css @@ -66,11 +66,6 @@ border: none; } - .profile .mode .img::before{ - - - } - .mode .selected::before{ content:''; border-radius: 10px; @@ -82,10 +77,4 @@ height: calc(100%); } - .profile .mode img.selected::before { - - } - - - } \ No newline at end of file diff --git a/frontend/src/components/DisplaySettings/DisplaySettings.jsx b/frontend/src/components/DisplaySettings/DisplaySettings.jsx index c6a9b567..5183bcb2 100644 --- a/frontend/src/components/DisplaySettings/DisplaySettings.jsx +++ b/frontend/src/components/DisplaySettings/DisplaySettings.jsx @@ -40,9 +40,11 @@ const DisplaySettings = ( {settingsRightSide, width, handleBackClick, rightarrow }; // database takes pritority over system - const savePreference = () => { + const savePreference = async () => { const isDarkMode = selectedMode === 'dark'; - saveUser(null, null, null, null, null, null, isDarkMode) + const response = await saveUser(null, null, null, null, null, null, isDarkMode); + console.log(response); + console.log(isDarkMode); } @@ -78,7 +80,7 @@ const DisplaySettings = ( {settingsRightSide, width, handleBackClick, rightarrow - + diff --git a/frontend/src/pages/Club/Club.jsx b/frontend/src/pages/Club/Club.jsx new file mode 100644 index 00000000..26bd4ec5 --- /dev/null +++ b/frontend/src/pages/Club/Club.jsx @@ -0,0 +1,18 @@ +import React, { useEffect, useState } from 'react'; +import './Club.scss'; + + +const Club = ({}) => { + + return( +
+ +
+ + ); +}; + + + + +export default Club; \ No newline at end of file diff --git a/frontend/src/pages/Club/Club.scss b/frontend/src/pages/Club/Club.scss new file mode 100644 index 00000000..e69de29b From ec9aad07423c393d8b4677e6457d742065de866e Mon Sep 17 00:00:00 2001 From: Nicole Date: Fri, 8 Nov 2024 17:46:16 -0500 Subject: [PATCH 11/97] SCRUM-75 editing the header of club page --- frontend/src/pages/Club/Club.jsx | 48 +++++++++++++------ frontend/src/pages/Club/Club.scss | 76 +++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+), 13 deletions(-) diff --git a/frontend/src/pages/Club/Club.jsx b/frontend/src/pages/Club/Club.jsx index 26bd4ec5..7892c9c7 100644 --- a/frontend/src/pages/Club/Club.jsx +++ b/frontend/src/pages/Club/Club.jsx @@ -1,18 +1,40 @@ -import React, { useEffect, useState } from 'react'; +import React from 'react'; import './Club.scss'; - - -const Club = ({}) => { - - return( -
- +import Header from '../../components/Header/Header'; +// import rpiLogo from "./assets/Icon/rpiLogo.svg"; + + +const Club = () => { + return ( +
+
+
+
+ +
+
+ +
+

Club Name

+ Union Recognized +
+ +

+ description of the club blah blah blah blah blah +

+
+ + +
+
+ 250 followers • 50 members +
+
+
+ +
- ); }; - - - -export default Club; \ No newline at end of file +export default Club; diff --git a/frontend/src/pages/Club/Club.scss b/frontend/src/pages/Club/Club.scss index e69de29b..12cd24ca 100644 --- a/frontend/src/pages/Club/Club.scss +++ b/frontend/src/pages/Club/Club.scss @@ -0,0 +1,76 @@ +.club-page { + padding: 20px; + color: black; + font-family: satoshi; +} + +.top-header-box { + display: flex; + align-items: center; + max-width: 900px; + width: 100%; + padding: 20px; + background-color: #9d8484; + border-radius: 10px; + margin: 0 auto 20px; + color: #fff; + +} + +.club-logo { + display: flex; + justify-content: center; + align-items: center; + width: 120px; + height: 120px; + background-color: #ccc; + border-radius: 50%; + margin-right: 20px; + +} + +.club-header { + display: flex; + flex-direction: row; + align-items: center; + gap: 10px; +} + +.name { + font-size: 24px; + font-weight: bold; + margin: 0; +} + +.status { + color: #ff5c5c; + font-weight: bold; + font-size: 12px; + padding-left: 10px; + +} + +.description { + margin: 10px 0; +} + +.actions { + display: flex; + gap: 10px; + margin: 10px 0; + + button{ + padding: 6px 20px; + border: none; + border-radius: 5px; + font-weight: bold; + cursor: pointer; + background-color: var(--red); + } + +} +.club-stats { + margin-top: 10px; + color: #666; +} + From 33502c667be24672b48fcc0b30ca0e7fb580124f Mon Sep 17 00:00:00 2001 From: Nicole Date: Tue, 12 Nov 2024 17:50:06 -0500 Subject: [PATCH 12/97] SCRUM-75 edited club header --- frontend/src/assets/Icons/rpiLogo.svg | 10 ++++++++++ frontend/src/pages/Club/Club.jsx | 10 +++++----- frontend/src/pages/Club/Club.scss | 11 +++++++++++ 3 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 frontend/src/assets/Icons/rpiLogo.svg diff --git a/frontend/src/assets/Icons/rpiLogo.svg b/frontend/src/assets/Icons/rpiLogo.svg new file mode 100644 index 00000000..1351cd0f --- /dev/null +++ b/frontend/src/assets/Icons/rpiLogo.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/frontend/src/pages/Club/Club.jsx b/frontend/src/pages/Club/Club.jsx index 7892c9c7..bc743113 100644 --- a/frontend/src/pages/Club/Club.jsx +++ b/frontend/src/pages/Club/Club.jsx @@ -1,7 +1,7 @@ import React from 'react'; import './Club.scss'; import Header from '../../components/Header/Header'; -// import rpiLogo from "./assets/Icon/rpiLogo.svg"; +import rpiLogo from "../../assets/Icons/rpiLogo.svg"; const Club = () => { @@ -10,13 +10,14 @@ const Club = () => {
- +
+

Club Name

- Union Recognized +
Union Recognized

@@ -27,10 +28,9 @@ const Club = () => {

- 250 followers • 50 members +
250 followers • 50 members
- diff --git a/frontend/src/pages/Club/Club.scss b/frontend/src/pages/Club/Club.scss index 12cd24ca..87413585 100644 --- a/frontend/src/pages/Club/Club.scss +++ b/frontend/src/pages/Club/Club.scss @@ -17,6 +17,10 @@ } +.club-info{ + padding-left: 170px; +} + .club-logo { display: flex; justify-content: center; @@ -26,6 +30,13 @@ background-color: #ccc; border-radius: 50%; margin-right: 20px; + transform: translate(80px) img; + + img{ + width: 120%; + // height: 100px; + padding-top: 170px; + } } From 35cb6e67fac49b8d2904caa33fe26df7fddbcdb9 Mon Sep 17 00:00:00 2001 From: Nicole Date: Fri, 15 Nov 2024 17:42:13 -0500 Subject: [PATCH 13/97] SCRUM-75 completed club section --- frontend/src/pages/Club/Club.jsx | 27 +++++++++++++------- frontend/src/pages/Club/Club.scss | 42 ++++++++++++++++++++++--------- 2 files changed, 48 insertions(+), 21 deletions(-) diff --git a/frontend/src/pages/Club/Club.jsx b/frontend/src/pages/Club/Club.jsx index bc743113..d98baa5e 100644 --- a/frontend/src/pages/Club/Club.jsx +++ b/frontend/src/pages/Club/Club.jsx @@ -6,13 +6,16 @@ import rpiLogo from "../../assets/Icons/rpiLogo.svg"; const Club = () => { return ( -
+
-
-
- +
+ +
+
+ +
-
+
@@ -23,16 +26,22 @@ const Club = () => {

description of the club blah blah blah blah blah

+

+ 250 followers • 50 members +

-
-
250 followers • 50 members
-
+
- +
+ + +
+ +
); }; diff --git a/frontend/src/pages/Club/Club.scss b/frontend/src/pages/Club/Club.scss index 87413585..cf7bdfc9 100644 --- a/frontend/src/pages/Club/Club.scss +++ b/frontend/src/pages/Club/Club.scss @@ -1,24 +1,34 @@ .club-page { - padding: 20px; color: black; font-family: satoshi; } + +.club-content{ + display: flex; + flex-direction: column; + align-items: center; + width: calc(100% - 200px); + height: 100%; + max-height: calc(100% - 80px); + max-width: 1400px; +} + + .top-header-box { display: flex; align-items: center; - max-width: 900px; width: 100%; padding: 20px; background-color: #9d8484; border-radius: 10px; - margin: 0 auto 20px; color: #fff; + box-sizing: border-box; } .club-info{ - padding-left: 170px; + width:100%; } .club-logo { @@ -27,7 +37,6 @@ align-items: center; width: 120px; height: 120px; - background-color: #ccc; border-radius: 50%; margin-right: 20px; transform: translate(80px) img; @@ -35,7 +44,7 @@ img{ width: 120%; // height: 100px; - padding-top: 170px; + padding-top: 185px; } } @@ -45,6 +54,8 @@ flex-direction: row; align-items: center; gap: 10px; + position: relative; + padding-left: 200px; } .name { @@ -63,25 +74,32 @@ .description { margin: 10px 0; + padding-left: 200px; +} + +.stats { + position: relative; + margin-top: 40px; + color: #666; } .actions { display: flex; gap: 10px; margin: 10px 0; + // padding-left: 0px; + // padding-top: 40px; + position: relative; button{ - padding: 6px 20px; + padding: 6px 30px; border: none; border-radius: 5px; - font-weight: bold; cursor: pointer; background-color: var(--red); + font-family: satoshi; + color: white; } } -.club-stats { - margin-top: 10px; - color: #666; -} From faab449ec8d60a3301e0d9ac40c12411fd989ea8 Mon Sep 17 00:00:00 2001 From: Nicole Date: Tue, 19 Nov 2024 17:49:02 -0500 Subject: [PATCH 14/97] SCRUM-75 added meeting schedule --- frontend/src/assets/Icons/Person.svg | 14 +++++ frontend/src/pages/Club/Club.jsx | 28 ++++++++++ frontend/src/pages/Club/Club.scss | 80 ++++++++++++++++++++++++++-- 3 files changed, 117 insertions(+), 5 deletions(-) create mode 100644 frontend/src/assets/Icons/Person.svg diff --git a/frontend/src/assets/Icons/Person.svg b/frontend/src/assets/Icons/Person.svg new file mode 100644 index 00000000..e41573b8 --- /dev/null +++ b/frontend/src/assets/Icons/Person.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/frontend/src/pages/Club/Club.jsx b/frontend/src/pages/Club/Club.jsx index d98baa5e..4e6afa27 100644 --- a/frontend/src/pages/Club/Club.jsx +++ b/frontend/src/pages/Club/Club.jsx @@ -2,6 +2,7 @@ import React from 'react'; import './Club.scss'; import Header from '../../components/Header/Header'; import rpiLogo from "../../assets/Icons/rpiLogo.svg"; +import person from "../../assets/Icons/Person.svg" const Club = () => { @@ -27,6 +28,7 @@ const Club = () => { description of the club blah blah blah blah blah

+ 250 followers • 50 members

@@ -37,10 +39,36 @@ const Club = () => {
+
+ +
+
+ + {/*
+

meetings schedule

+
+

YDSA Weekly GBM

+ +
+ +
*/} + + {/* Meeting Schedule Section */} +
+

Meetings Schedule

+
+

YDSA Weekly GBM

+
+

Weekly on Thursday at 5:00

+

Phalanx

+ {/*

Next Meeting: Thursday 10/24

*/} +
+
+
); diff --git a/frontend/src/pages/Club/Club.scss b/frontend/src/pages/Club/Club.scss index cf7bdfc9..d2ef3cfe 100644 --- a/frontend/src/pages/Club/Club.scss +++ b/frontend/src/pages/Club/Club.scss @@ -55,7 +55,7 @@ align-items: center; gap: 10px; position: relative; - padding-left: 200px; + padding-left: 180px; } .name { @@ -74,21 +74,26 @@ .description { margin: 10px 0; - padding-left: 200px; + padding-left: 180px; } .stats { + display: flex; + flex-direction: row; position: relative; margin-top: 40px; - color: #666; + font-size: 12px; + + img{ + height: 15px; + padding-right: 10px; + } } .actions { display: flex; gap: 10px; margin: 10px 0; - // padding-left: 0px; - // padding-top: 40px; position: relative; button{ @@ -103,3 +108,68 @@ } +.event-info{ + display: flex; + align-items: center; + width: calc(100%); + height: 100%; + max-height: calc(100%); + max-width: 1400px; +} + +.upcoming{ + // height: 100px; + // width: 100px; +} + +// .meeting-schedule{ +// display: flex; +// flex-direction: column; +// width: calc(100%); +// height: 100%; +// max-height: calc(100%); +// max-width: 1400px; + +// h1{ +// font: satoshi; +// font-size: 18px; +// } + +// p{ +// font: satoshi; +// font-size: 15px; +// } +// } + +.meeting-schedule{ + display: flex; + flex-direction: column; + width: calc(100%); + height: 100%; + max-height: calc(100%); + max-width: 1400px; + + h3{ + font-size: 18px; + } + + .meeting-card{ + padding: 15px; + border-radius: 10px; + box-shadow: var(--shadow); + + .info{ + display: flex; + flex-direction: row; + gap: 20px; + h4{ + font-size: 12px; + } + p{ + color: #666; + font-size: 10px; + } + + } + } +} From 1d1e0890c45a38db6eb6c7ec08af8871146b9661 Mon Sep 17 00:00:00 2001 From: Nicole Date: Fri, 22 Nov 2024 17:26:17 -0500 Subject: [PATCH 15/97] SCRUM-75 fixed meeting schedule --- frontend/src/assets/Icons/Locate.svg | 3 +++ frontend/src/pages/Club/Club.jsx | 15 +++++++++------ frontend/src/pages/Club/Club.scss | 22 +++++++++++++++++++--- 3 files changed, 31 insertions(+), 9 deletions(-) create mode 100644 frontend/src/assets/Icons/Locate.svg diff --git a/frontend/src/assets/Icons/Locate.svg b/frontend/src/assets/Icons/Locate.svg new file mode 100644 index 00000000..9abbee3f --- /dev/null +++ b/frontend/src/assets/Icons/Locate.svg @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/pages/Club/Club.jsx b/frontend/src/pages/Club/Club.jsx index 4e6afa27..e9c9a57c 100644 --- a/frontend/src/pages/Club/Club.jsx +++ b/frontend/src/pages/Club/Club.jsx @@ -2,8 +2,9 @@ import React from 'react'; import './Club.scss'; import Header from '../../components/Header/Header'; import rpiLogo from "../../assets/Icons/rpiLogo.svg"; -import person from "../../assets/Icons/Person.svg" - +import person from "../../assets/Icons/Person.svg"; +import calendar from "../../assets/Icons/Calendar.svg"; +import locate from "../../assets/Icons/Locate.svg"; const Club = () => { return ( @@ -54,21 +55,23 @@ const Club = () => {
*/} - {/* Meeting Schedule Section */}

Meetings Schedule

-

YDSA Weekly GBM

+
+ +

YDSA Weekly GBM

+
+

Weekly on Thursday at 5:00

+

Phalanx

{/*

Next Meeting: Thursday 10/24

*/}
- - ); diff --git a/frontend/src/pages/Club/Club.scss b/frontend/src/pages/Club/Club.scss index d2ef3cfe..c45f5c78 100644 --- a/frontend/src/pages/Club/Club.scss +++ b/frontend/src/pages/Club/Club.scss @@ -1,5 +1,4 @@ .club-page { - color: black; font-family: satoshi; } @@ -154,22 +153,39 @@ } .meeting-card{ + display: flex; + flex-direction: column; padding: 15px; border-radius: 10px; box-shadow: var(--shadow); + border: 1px solid var(--lightborder); + + .title{ + display: flex; + flex-direction: row; + gap: 10px; + } .info{ display: flex; flex-direction: row; - gap: 20px; + padding-left: 47px; + margin-left: 47px; h4{ font-size: 12px; } p{ color: #666; font-size: 10px; + } - + img{ + width: 20px; + } + + } + img{ + width: 10%; } } } From bd05dd49aa9f6bdd0c068e6dcfd1c69a82f7dfb4 Mon Sep 17 00:00:00 2001 From: Nicole Date: Mon, 30 Dec 2024 19:24:39 -0500 Subject: [PATCH 16/97] SCRUM-75 edited meeting schedule --- frontend/src/pages/Club/Club.jsx | 12 +++++++----- frontend/src/pages/Club/Club.scss | 18 +++++++++++++++--- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/frontend/src/pages/Club/Club.jsx b/frontend/src/pages/Club/Club.jsx index e9c9a57c..79163407 100644 --- a/frontend/src/pages/Club/Club.jsx +++ b/frontend/src/pages/Club/Club.jsx @@ -59,14 +59,16 @@ const Club = () => {

Meetings Schedule

- +

YDSA Weekly GBM

- -

Weekly on Thursday at 5:00

- -

Phalanx

+
+ +

Weekly on Thursday at 5:00

+ +

Phalanx

+
{/*

Next Meeting: Thursday 10/24

*/}
diff --git a/frontend/src/pages/Club/Club.scss b/frontend/src/pages/Club/Club.scss index c45f5c78..3c9e53fc 100644 --- a/frontend/src/pages/Club/Club.scss +++ b/frontend/src/pages/Club/Club.scss @@ -162,15 +162,27 @@ .title{ display: flex; - flex-direction: row; + flex-direction: center; gap: 10px; + .logo{ + width: 50px; + height: 50px; + border-radius: 50%; + + } + } .info{ display: flex; - flex-direction: row; - padding-left: 47px; + flex-direction: column; + padding-left: 11px; margin-left: 47px; + .item{ + display: flex; + flex-direction: center; + gap: 5px; + } h4{ font-size: 12px; } From 50f854cbba4666f292d0dffa58ec00b25e8440b9 Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Fri, 15 Nov 2024 15:18:10 -0500 Subject: [PATCH 17/97] SCRUM-12 adding tabs to full event --- backend/app.js | 20 +++---- backend/routes/eventRoutes.js | 41 +++++++++++++++ .../components/CreateEvent/Review/Review.jsx | 2 +- .../components/CreateEvent/Review/Review.scss | 4 +- .../EventsColumn/CreateEvent/CreateEvent.scss | 8 ++- frontend/src/components/Popup/Popup.jsx | 20 ++++++- frontend/src/components/Popup/Popup.scss | 30 +++++++++++ .../src/pages/CreateEvent/CreateEvent.jsx | 2 - frontend/src/pages/OIEDash/Dash/Dash.jsx | 2 +- frontend/src/pages/OIEDash/Dash/Dash.scss | 8 ++- frontend/src/pages/OIEDash/OIEDash.scss | 1 + .../OIEEventsComponents/Event/OIEEvent.jsx | 2 +- .../OIEEventsComponents/Event/OIEEvent.scss | 1 + .../FullEvent/OIEFullEvent.jsx | 32 ++++++++---- .../FullEvent/OIEFullEvent.scss | 52 ++++++++++++++++++- 15 files changed, 193 insertions(+), 32 deletions(-) diff --git a/backend/app.js b/backend/app.js index ad126a76..e7f99956 100644 --- a/backend/app.js +++ b/backend/app.js @@ -77,6 +77,17 @@ app.use(ratingRoutes); app.use(searchRoutes); app.use(eventRoutes); + +// Serve static files from the React app in production +if (process.env.NODE_ENV === 'production') { + app.use(express.static(path.join(__dirname, '../frontend/build'))); + + // The "catchall" handler: for any request that doesn't match one above, send back React's index.html file. + app.get('*', (req, res) => { + res.sendFile(path.join(__dirname, '../frontend/build/index.html')); + }); +} + //deprecated, should lowk invest in this // app.get('/update-database', (req, res) => { // const pythonProcess = spawn('python3', ['courseScraper.py']); @@ -129,15 +140,6 @@ app.post('/upload-image/:classroomName', upload.single('image'), async (req, res } }); -// Serve static files from the React app in production -if (process.env.NODE_ENV === 'production') { - app.use(express.static(path.join(__dirname, '../frontend/build'))); - - // The "catchall" handler: for any request that doesn't match one above, send back React's index.html file. - app.get('*', (req, res) => { - res.sendFile(path.join(__dirname, '../frontend/build/index.html')); - }); -} // Socket.io functionality io.on('connection', (socket) => { diff --git a/backend/routes/eventRoutes.js b/backend/routes/eventRoutes.js index 7f3a5a80..7418aa00 100644 --- a/backend/routes/eventRoutes.js +++ b/backend/routes/eventRoutes.js @@ -183,6 +183,47 @@ router.get('/oie/get-pending-events', verifyToken, async (req, res) => { } }); +router.post('/approve-event', verifyToken, async (req, res) => { + const user_id = req.user.userId; + const { event_id } = req.body; + + try { + const user = await User.findById(user_id); + if(!user || !user.admin) { + return res.status(403).json({ + success: false, + message: 'You are not authorized to approve events.' + }); + } + const event = await Event.findById(event_id); + if (!event) { + return res.status(404).json({ + success: false, + message: 'Event not found.' + }); + } + if (event.OIEStatus !== 'Pending') { + return res.status(400).json({ + success: false, + message: 'Event is not pending approval.' + }); + } + event.OIEStatus = 'Approved'; + await event.save(); + console.log('POST: /approve-event successful'); + res.status(200).json({ + success: true, + message: 'Event approved successfully.' + }); + } catch (error) { + console.log('POST: /approve-event failed', error); + res.status(500).json({ + success: false, + message: error.message + }); + } +}); + module.exports = router; diff --git a/frontend/src/components/CreateEvent/Review/Review.jsx b/frontend/src/components/CreateEvent/Review/Review.jsx index e6f315e0..7383ef75 100644 --- a/frontend/src/components/CreateEvent/Review/Review.jsx +++ b/frontend/src/components/CreateEvent/Review/Review.jsx @@ -78,7 +78,7 @@ function Review({info, visible, setInfo, onSubmit}){ {visible &&
-

{pspeak || catering ? "request OIE approval" : "publish event"}

+

{pspeak || catering || info.expectedAttendance > 199 ? "request OIE approval" : "publish event"}

diff --git a/frontend/src/components/CreateEvent/Review/Review.scss b/frontend/src/components/CreateEvent/Review/Review.scss index b09741b2..52df3ddc 100644 --- a/frontend/src/components/CreateEvent/Review/Review.scss +++ b/frontend/src/components/CreateEvent/Review/Review.scss @@ -8,8 +8,8 @@ } .preview{ display:flex; - max-width:400px; - width:400px; + max-width:300px; + width:3 00px; } .oie-acknowledgement{ color:var(--text); diff --git a/frontend/src/components/EventsViewer/EventsGrid/EventsColumn/CreateEvent/CreateEvent.scss b/frontend/src/components/EventsViewer/EventsGrid/EventsColumn/CreateEvent/CreateEvent.scss index 87742893..c21efb4e 100644 --- a/frontend/src/components/EventsViewer/EventsGrid/EventsColumn/CreateEvent/CreateEvent.scss +++ b/frontend/src/components/EventsViewer/EventsGrid/EventsColumn/CreateEvent/CreateEvent.scss @@ -24,7 +24,7 @@ } &:hover{ - border:1px solid transparent; + } &:hover::after{ @@ -69,10 +69,16 @@ transition: all 0.5s; } + iconify-icon{ + transition: all 0.5s; + } } &:hover .info{ color: var(--background); + iconify-icon{ + color: var(--background); + } h1{ color: var(--background); } diff --git a/frontend/src/components/Popup/Popup.jsx b/frontend/src/components/Popup/Popup.jsx index 7efb2b78..d0adf4c9 100644 --- a/frontend/src/components/Popup/Popup.jsx +++ b/frontend/src/components/Popup/Popup.jsx @@ -4,10 +4,13 @@ import './Popup.scss'; // Assuming this contains your animation and styling import useOutsideClick from '../../hooks/useClickOutside'; import X from '../../assets/x.svg'; -const Popup = ({ children, isOpen, onClose, defaultStyling=true, customClassName="" }) => { +const Popup = ({ children, isOpen, onClose, defaultStyling=true, customClassName="", popout=false }) => { const [render, setRender] = useState(isOpen); const [show, setShow] = useState(false); + const [topPosition, setTopPosition] = useState(null); + const [rightPosition, setRightPosition] = useState(null); + const ref = useRef(); useOutsideClick(ref, ()=>{ @@ -26,6 +29,18 @@ const Popup = ({ children, isOpen, onClose, defaultStyling=true, customClassName }, 100); },[render]); + useEffect(() => { + setTimeout(() => { + if(ref.current){ + const rect = ref.current.getBoundingClientRect(); + setTopPosition(rect.top); + setRightPosition(rect.right); + } + }, 300); + + }, [show, ref.current]); + + const handleClose = () => { setShow(false); setTimeout(() => { @@ -47,8 +62,9 @@ const Popup = ({ children, isOpen, onClose, defaultStyling=true, customClassName return ReactDOM.createPortal(
+ {popout && }
- + {!popout && } {renderChildrenWithClose()} {/* Render children with handleClose prop */}
, diff --git a/frontend/src/components/Popup/Popup.scss b/frontend/src/components/Popup/Popup.scss index 7e41c841..85c6e04a 100644 --- a/frontend/src/components/Popup/Popup.scss +++ b/frontend/src/components/Popup/Popup.scss @@ -12,6 +12,26 @@ opacity: 0; } + .popup-content-overlay{ + background-color: white; + padding: 20px; + border-radius: 20px; + position: absolute; + max-width:500px; + box-sizing: border-box; + display:flex; + flex-direction: column; + height:fit-content; + /* opacity: 0; */ + margin: 0 20px; + overflow:hidden; + + &.wide-content{ + max-width: 1000px; + width:95%; + } + } + .popup-overlay .popup-content { background-color: white; @@ -43,6 +63,16 @@ height:15px; top:15px; right:15px; + z-index: 100; + } + + .close-popup.popout{ + width:15px; + height:15px; + background-color: var(--background); + padding:7px; + border-radius:50%; + position: absolute; } /* Entry and Exit Animations */ diff --git a/frontend/src/pages/CreateEvent/CreateEvent.jsx b/frontend/src/pages/CreateEvent/CreateEvent.jsx index 2e00b211..9a1194c1 100644 --- a/frontend/src/pages/CreateEvent/CreateEvent.jsx +++ b/frontend/src/pages/CreateEvent/CreateEvent.jsx @@ -49,8 +49,6 @@ function CreateEvent(){ console.log(location1); const formattedInfo = { ...info, - location : location1[0], - classroomId : location1[1], image:null } const response = await createEvent(formattedInfo); diff --git a/frontend/src/pages/OIEDash/Dash/Dash.jsx b/frontend/src/pages/OIEDash/Dash/Dash.jsx index ba73d1ef..dcae02a5 100644 --- a/frontend/src/pages/OIEDash/Dash/Dash.jsx +++ b/frontend/src/pages/OIEDash/Dash/Dash.jsx @@ -45,7 +45,7 @@ function Dash({expandedClass}){
{ pendingEvents.map((event, index) => { - if(index < 3){ + if(index < 5){ return ( ) diff --git a/frontend/src/pages/OIEDash/Dash/Dash.scss b/frontend/src/pages/OIEDash/Dash/Dash.scss index 8f910e6a..a9595697 100644 --- a/frontend/src/pages/OIEDash/Dash/Dash.scss +++ b/frontend/src/pages/OIEDash/Dash/Dash.scss @@ -35,16 +35,20 @@ .needs-approval{ display: flex; flex-direction: column; - gap:10px; h1{ font-size: 20px; margin-left:10px; margin-bottom:5px; } .content{ + padding: 10px 0 20px 0; display:flex; gap:10px; - + overflow-x: scroll; + + &::-webkit-scrollbar { + height:6px; + } } } } \ No newline at end of file diff --git a/frontend/src/pages/OIEDash/OIEDash.scss b/frontend/src/pages/OIEDash/OIEDash.scss index da463584..b992c32d 100644 --- a/frontend/src/pages/OIEDash/OIEDash.scss +++ b/frontend/src/pages/OIEDash/OIEDash.scss @@ -95,6 +95,7 @@ } } .dash-right{ + overflow: hidden; position: relative; flex-grow: 1; display:flex; diff --git a/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.jsx b/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.jsx index c5dc6cc6..789c5156 100644 --- a/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.jsx +++ b/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.jsx @@ -23,7 +23,7 @@ function OIEEvent({event}){ return(
- +
diff --git a/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.scss b/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.scss index 5d91dcbb..5c3fcd97 100644 --- a/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.scss +++ b/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.scss @@ -2,6 +2,7 @@ display:flex; flex-direction: column; width:250px; + min-width:250px; gap:10px; padding:10px; box-sizing: border-box; diff --git a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx index 3b62dd1b..b768824e 100644 --- a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx +++ b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx @@ -12,21 +12,33 @@ function OIEFullEvent({ event }){ const handleEventClick = () => { navigate(`/create-event`); } - const date = new Date(event.date); + const date = new Date(event.start_time); + const dateEnd = new Date(event.end_time); return( -
+
+
+
+ +

info

+
+
- +
-

{event.name}

- {/*

{event.location }

*/} - {/* display date in day of the week, month/day */} -

{date.toLocaleString('default', {weekday: 'long'})}, {date.toLocaleString('default', {month: 'long'})} {date.getDate()}

- {/* time */} -

{date.toLocaleString('default', {hour: 'numeric', minute: 'numeric', hour12: true})}

- +

{event.name}

+
+ +
+

{date.toLocaleString('default', {weekday: 'long'})}, {date.toLocaleString('default', {month: 'long'})} {date.getDate()}

+

{date.toLocaleString('default', {hour: 'numeric', minute: 'numeric', hour12: true})} - {dateEnd.toLocaleString('default', {hour: 'numeric', minute: 'numeric', hour12: true})}

+
+
+
+ +

{event.location}

+
diff --git a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss index ac266794..0dbe917b 100644 --- a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss +++ b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss @@ -1,26 +1,76 @@ -.full-event{ +.full-event.oie{ display:flex; width:100%; height:100%; gap:20px; + box-sizing: border-box; + padding-top:30px; + + iconify-icon{ + font-size: 20px; + color: var(--text); + } + .image{ max-width: 35%; img{ width:100%; border-radius: 10px; + box-shadow: var(--shadow); } } .content{ flex-grow: 1; padding-top:5px; box-sizing: border-box; + gap:10px; + display:flex; + flex-direction: column; h1{ font-size: 25px; + margin-bottom:0; } } .gradient{ position: absolute; bottom:0; right:0; + height:110px; + height:30%; + } + + .tabs{ + background-color: var(--background); + position:absolute; + border-bottom: 1px solid var(--lighterborder); + display:flex; + top:-0px; + left:0px; + height:40px; + width:100%; + align-items: center; + .tab{ + display:flex; + transform:none; + margin:0; + align-items: center; + background-color: var(--background); + border:1px soldi var(--lightborder); + height:80%; + padding:5px 10px; + box-sizing: border-box; + border-radius: 10px 10px 0 0; + gap:10px; + iconify-icon{ + color: var(--text); + font-size: 17px; + } + p{ + font-size: 15px; + font-family: 'Inter'; + font-weight: 600; + color: var(--text); + } + } } } \ No newline at end of file From 93dc1841fb82be8fdbbf618c8737b4e6013e0437 Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Fri, 15 Nov 2024 15:22:28 -0500 Subject: [PATCH 18/97] SCRUM-54 adding quicky analytics --- backend/routes/searchRoutes.js | 14 ++++++++++++++ backend/schemas/search.js | 9 +++++++++ 2 files changed, 23 insertions(+) create mode 100644 backend/schemas/search.js diff --git a/backend/routes/searchRoutes.js b/backend/routes/searchRoutes.js index d6283e98..3da554e5 100644 --- a/backend/routes/searchRoutes.js +++ b/backend/routes/searchRoutes.js @@ -11,6 +11,7 @@ const path = require('path'); const s3 = require('../aws-config'); const mongoose = require('mongoose'); const { clean } = require('../services/profanityFilterService'); +const search = require('../schemas/search.js'); const router = express.Router(); @@ -243,6 +244,19 @@ router.get('/all-purpose-search', verifyTokenOptional, async (req, res) => { // Extract only the names from the result set const names = sortedClassrooms.map(classroom => classroom.name); + //analytics + const search = new Search({ + query: { + query: query, + attributes: attributes, + timePeriod: timePeriod + }, + user_id: userId ? userId : null, + }); + + search.save(); + + res.json({ success: true, message: "Rooms found", data: names }); diff --git a/backend/schemas/search.js b/backend/schemas/search.js new file mode 100644 index 00000000..0f87f6a2 --- /dev/null +++ b/backend/schemas/search.js @@ -0,0 +1,9 @@ +const mongoose = require('mongoose'); + +const SearchSchema = new mongoose.Schema({ + timestamp: { type: Date, default: Date.now }, + query: { type: Object, required: true }, + user_id: { type: ObjectId, required: false, ref: 'User' } +}); + +module.exports = mongoose.model('Search', SearchSchema); From fb8affdc4cfb772ac53f9b175ba2c049f9404a9b Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Fri, 15 Nov 2024 15:38:49 -0500 Subject: [PATCH 19/97] repeated visits --- backend/routes/analytics.js | 21 ++++++++++++++++++++ backend/routes/searchRoutes.js | 4 +--- backend/schemas/repeatedVisit.js | 9 +++++++++ backend/schemas/search.js | 4 +++- frontend/src/App.js | 34 ++++++++++++++++++++++++++++++++ 5 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 backend/schemas/repeatedVisit.js diff --git a/backend/routes/analytics.js b/backend/routes/analytics.js index a7065c1f..152287a0 100644 --- a/backend/routes/analytics.js +++ b/backend/routes/analytics.js @@ -4,6 +4,9 @@ const { isValid, formatISO, parseISO, setHours, startOfWeek, endOfWeek, setMinut const Visit = require('../schemas/visit'); const User = require('../schemas/user'); const QR = require('../schemas/qr'); +const RepeatedVisit = require('../schemas/repeatedVisit'); +const { verifyToken, verifyTokenOptional } = require('../middlewares/verifyToken'); + // Route to log a visit router.post('/log-visit', async (req, res) => { @@ -16,6 +19,24 @@ router.post('/log-visit', async (req, res) => { } }); +router.post('/log-repeated-visit', verifyTokenOptional, async (req, res) => { + const { hash } = req.body; + try { + console.log('Logging repeated visit'); + let repeatedVisit = await RepeatedVisit.findOne({hash: hash}); + if(!repeatedVisit){ + repeatedVisit = new RepeatedVisit({ visits: [new Date()], hash: hash, user_id: req.user ? req.user._id : null }); + } + repeatedVisit.visits.push(new Date()); + await repeatedVisit.save(); + console.log('Repeated visit logged'); + res.status(200).json({ message: 'Visit logged' }); + } catch (error) { + console.error(error); + res.status(500).json({ message: 'Failed to log visit' }); + } +}); + router.get('/visits-by-day', async (req, res) => { try { const { startDate, endDate } = req.query; diff --git a/backend/routes/searchRoutes.js b/backend/routes/searchRoutes.js index 3da554e5..f378d0a1 100644 --- a/backend/routes/searchRoutes.js +++ b/backend/routes/searchRoutes.js @@ -11,7 +11,7 @@ const path = require('path'); const s3 = require('../aws-config'); const mongoose = require('mongoose'); const { clean } = require('../services/profanityFilterService'); -const search = require('../schemas/search.js'); +const Search = require('../schemas/search.js'); const router = express.Router(); @@ -255,8 +255,6 @@ router.get('/all-purpose-search', verifyTokenOptional, async (req, res) => { }); search.save(); - - res.json({ success: true, message: "Rooms found", data: names }); diff --git a/backend/schemas/repeatedVisit.js b/backend/schemas/repeatedVisit.js new file mode 100644 index 00000000..f83e851f --- /dev/null +++ b/backend/schemas/repeatedVisit.js @@ -0,0 +1,9 @@ +const mongoose = require('mongoose'); + +const RepeatedVisitSchema = new mongoose.Schema({ + visits: { type: Array, required: true }, + user_id: { type: mongoose.Schema.Types.ObjectId, required: false, ref: 'User' }, + hash: { type: String, required: true }, +}); + +module.exports = mongoose.model('RepeatedVisit', RepeatedVisitSchema); diff --git a/backend/schemas/search.js b/backend/schemas/search.js index 0f87f6a2..f82f77a8 100644 --- a/backend/schemas/search.js +++ b/backend/schemas/search.js @@ -1,9 +1,11 @@ const mongoose = require('mongoose'); +const Schema = mongoose.Schema; + const SearchSchema = new mongoose.Schema({ timestamp: { type: Date, default: Date.now }, query: { type: Object, required: true }, - user_id: { type: ObjectId, required: false, ref: 'User' } + user_id: { type: Schema.Types.ObjectId, required: false, ref: 'User' } }); module.exports = mongoose.model('Search', SearchSchema); diff --git a/frontend/src/App.js b/frontend/src/App.js index 1d40159d..ae6a3857 100644 --- a/frontend/src/App.js +++ b/frontend/src/App.js @@ -48,7 +48,41 @@ function App() { .catch(error => { console.error('Error logging visit', error); }); + } else { + // console.log('User has already visited'); + // generate 10 char hash + // store in local storage + // send to backend + console.log('User has already visited'); + let hash = localStorage.getItem('hash'); + let timestamp = localStorage.getItem('timestamp'); + if (!hash) { + // generate hash + hash = Math.random().toString(36).substring(2, 12); + // store hash + localStorage.setItem('hash', hash); + } + if (!timestamp) { + timestamp = new Date().toISOString(); + localStorage.setItem('timestamp', timestamp); + } + //if 20 minutes from last timestamp + if (new Date().getTime() - new Date(timestamp).getTime() > 20 * 60 * 1000) { + //send to backend + localStorage.setItem('timestamp', new Date().toISOString()); + axios.post('/log-repeated-visit', { + hash: hash + }) + .then(response => { + localStorage.setItem('timestamp', new Date().toISOString()); + }) + .catch(error => { + console.error('Error logging visit', error); + }); + } } + + }, []); // document.documentElement.classList.add('dark-mode'); return ( From 3c9ad2a204bab8d3854c0c801d6e825b975727d6 Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Sat, 16 Nov 2024 20:04:30 -0500 Subject: [PATCH 20/97] SCRUM-146 finished tab styling --- frontend/public/MockPoster.png | Bin 0 -> 206486 bytes frontend/src/assets/Icons/RPI.svg | 3 + .../EventsColumn/FullEvent/FullEvent.scss | 5 + frontend/src/components/Popup/Popup.scss | 5 + frontend/src/pages/OIEDash/OIEDash.jsx | 8 +- frontend/src/pages/OIEDash/OIEDash.scss | 19 ++- .../OIEEventsComponents/Event/OIEEvent.jsx | 2 +- .../FullEvent/OIEFullEvent.jsx | 51 +++--- .../FullEvent/OIEFullEvent.scss | 145 +++++++++++++----- 9 files changed, 175 insertions(+), 63 deletions(-) create mode 100644 frontend/public/MockPoster.png create mode 100644 frontend/src/assets/Icons/RPI.svg diff --git a/frontend/public/MockPoster.png b/frontend/public/MockPoster.png new file mode 100644 index 0000000000000000000000000000000000000000..5d9c9ec41efa6d68938f41ff458b5365caf2d5ef GIT binary patch literal 206486 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 rBaa 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 z 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 + + diff --git a/frontend/src/components/EventsViewer/EventsGrid/EventsColumn/FullEvent/FullEvent.scss b/frontend/src/components/EventsViewer/EventsGrid/EventsColumn/FullEvent/FullEvent.scss index 50af0eeb..ef52c6ed 100644 --- a/frontend/src/components/EventsViewer/EventsGrid/EventsColumn/FullEvent/FullEvent.scss +++ b/frontend/src/components/EventsViewer/EventsGrid/EventsColumn/FullEvent/FullEvent.scss @@ -28,6 +28,11 @@ font-size: 25px; margin-bottom:0; } + p{ + font-size: 15px; + font-weight: 500; + font-family: 'Inter'; + } } .gradient{ diff --git a/frontend/src/components/Popup/Popup.scss b/frontend/src/components/Popup/Popup.scss index 85c6e04a..3c9c4f0f 100644 --- a/frontend/src/components/Popup/Popup.scss +++ b/frontend/src/components/Popup/Popup.scss @@ -57,6 +57,11 @@ background-color: transparent; padding: 0; } + + + .popup-overlay .popup-content.no-padding { + padding: 0; + } .popup-content .close-popup{ position: absolute; width:15px; diff --git a/frontend/src/pages/OIEDash/OIEDash.jsx b/frontend/src/pages/OIEDash/OIEDash.jsx index 8c92ace4..1997b22c 100644 --- a/frontend/src/pages/OIEDash/OIEDash.jsx +++ b/frontend/src/pages/OIEDash/OIEDash.jsx @@ -72,9 +72,11 @@ function OIEDash(){
- -
- +
+ +
+ +
diff --git a/frontend/src/pages/OIEDash/OIEDash.scss b/frontend/src/pages/OIEDash/OIEDash.scss index b992c32d..5f5dd145 100644 --- a/frontend/src/pages/OIEDash/OIEDash.scss +++ b/frontend/src/pages/OIEDash/OIEDash.scss @@ -94,8 +94,8 @@ animation: hide 1s forwards; } } + .dash-right{ - overflow: hidden; position: relative; flex-grow: 1; display:flex; @@ -104,6 +104,17 @@ border-radius: 15px; border: 1px solid var(--lightborder); box-shadow: var(--shadow); + width:calc(100% - 200px); + + &.maximized{ + width:100%; + } + + .dash-content{ + position: relative; + max-width:100%; + width:100%; + } .expand{ position: absolute; @@ -126,7 +137,7 @@ } - &::after{ + &::before{ content: ''; position: absolute; width:100%; @@ -138,10 +149,10 @@ border-radius: 20px; transition: all 1s; } - &.minimized::after{ + &.minimized::before{ transform:scale(1); } - &.maximized::after{ + &.maximized::before{ transform:scale(1.2); } } diff --git a/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.jsx b/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.jsx index 789c5156..f71161f3 100644 --- a/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.jsx +++ b/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.jsx @@ -23,7 +23,7 @@ function OIEEvent({event}){ return(
- +
diff --git a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx index b768824e..7abc6274 100644 --- a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx +++ b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx @@ -15,32 +15,47 @@ function OIEFullEvent({ event }){ const date = new Date(event.start_time); const dateEnd = new Date(event.end_time); + const [tab, setTab] = useState("info"); + + return(
-
- -

info

+
setTab('info')} > +
+ +

info

+
-
-
- -
-
-

{event.name}

-
- -
-

{date.toLocaleString('default', {weekday: 'long'})}, {date.toLocaleString('default', {month: 'long'})} {date.getDate()}

-

{date.toLocaleString('default', {hour: 'numeric', minute: 'numeric', hour12: true})} - {dateEnd.toLocaleString('default', {hour: 'numeric', minute: 'numeric', hour12: true})}

+
setTab('check')}> +
+ +

check

-
- -

{event.location}

+
+
+
+
+ +
+
+

{event.name}

+
+ +
+

{date.toLocaleString('default', {weekday: 'long'})}, {date.toLocaleString('default', {month: 'long'})} {date.getDate()}

+

{date.toLocaleString('default', {hour: 'numeric', minute: 'numeric', hour12: true})} - {dateEnd.toLocaleString('default', {hour: 'numeric', minute: 'numeric', hour12: true})}

+
+
+
+ +

{event.location}

+
+
+
-
); diff --git a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss index 0dbe917b..b5270395 100644 --- a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss +++ b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss @@ -1,11 +1,12 @@ .full-event.oie{ display:flex; + flex-direction: column; width:100%; height:100%; - gap:20px; box-sizing: border-box; - padding-top:30px; - + gap:0; + background-color: var(--oie-background); + iconify-icon{ font-size: 20px; color: var(--text); @@ -19,16 +20,39 @@ box-shadow: var(--shadow); } } - .content{ - flex-grow: 1; - padding-top:5px; - box-sizing: border-box; - gap:10px; - display:flex; - flex-direction: column; - h1{ - font-size: 25px; - margin-bottom:0; + + .event-info{ + border-radius: 20px; + background-color: var(--background); + + & > div{ + display:flex; + gap:20px; + padding:20px; + + opacity: 0; + transition: all 0.5s; + + &.visible{ + opacity: 1; + } + } + + .content{ + flex-grow: 1; + padding-top:5px; + box-sizing: border-box; + gap:10px; + display:flex; + flex-direction: column; + h1{ + font-size: 25px; + margin-bottom:0; + } + } + + &.visible{ + opacity: 1; } } .gradient{ @@ -40,37 +64,84 @@ } .tabs{ - background-color: var(--background); - position:absolute; - border-bottom: 1px solid var(--lighterborder); + background-color: var(--oie-background); display:flex; - top:-0px; - left:0px; - height:40px; width:100%; + padding: 0 7px; align-items: center; .tab{ - display:flex; - transform:none; - margin:0; - align-items: center; - background-color: var(--background); - border:1px soldi var(--lightborder); - height:80%; - padding:5px 10px; + padding: 10px 10px; box-sizing: border-box; - border-radius: 10px 10px 0 0; - gap:10px; - iconify-icon{ - color: var(--text); - font-size: 17px; + height:100%; + display: flex; + align-items: center; + margin:0; + .tab-content{ + display:flex; + transform:none; + cursor:pointer; + margin:0; + align-items: center; + border:1px soldi var(--lightborder); + height:80%; + padding:5px 10px; + box-sizing: border-box; + border-radius: 10px; + gap:10px; + transition: all 0.3s; + iconify-icon{ + color: var(--text); + font-size: 17px; + transition: inherit; + } + p{ + font-size: 15px; + font-family: 'Inter'; + font-weight: 600; + color: var(--text); + transition: inherit; + + } + + &:hover{ + background-color: var(--background); + } } - p{ - font-size: 15px; - font-family: 'Inter'; - font-weight: 600; - color: var(--text); + + &::after{ + content: ''; + position: absolute; + bottom:0; + left:50%; + width:0%; + height:3px; + background-color: transparent; + transition: all 0.3s; + border-radius: 3px 3px 0 0; } + + &.selected{ + &::after{ + content: ''; + position: absolute; + bottom:0; + left:10%; + width:80%; + height:3px; + background-color: var(--red); + + } + .tab-content{ + p{ + color: var(--red); + } + iconify-icon{ + color: var(--red); + } + } + } + + } } } \ No newline at end of file From 4e93410b83ef6aff6929008da46b2e52e3505604 Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Sat, 16 Nov 2024 20:19:41 -0500 Subject: [PATCH 21/97] SCRUM-146 added popout animation --- .../EventsGrid/EventsColumn/Event/Event.jsx | 2 +- .../EventsColumn/FullEvent/FullEvent.scss | 9 ++++++- frontend/src/components/Popup/Popup.scss | 25 +++++++++++++++++++ .../OIEEventsComponents/Event/OIEEvent.jsx | 2 +- .../FullEvent/OIEFullEvent.scss | 8 +++++- 5 files changed, 42 insertions(+), 4 deletions(-) diff --git a/frontend/src/components/EventsViewer/EventsGrid/EventsColumn/Event/Event.jsx b/frontend/src/components/EventsViewer/EventsGrid/EventsColumn/Event/Event.jsx index a16048da..6b5460d3 100644 --- a/frontend/src/components/EventsViewer/EventsGrid/EventsColumn/Event/Event.jsx +++ b/frontend/src/components/EventsViewer/EventsGrid/EventsColumn/Event/Event.jsx @@ -22,7 +22,7 @@ function Event({event}){ return(
handleEventClick(event)}> - + {event.image && } diff --git a/frontend/src/components/EventsViewer/EventsGrid/EventsColumn/FullEvent/FullEvent.scss b/frontend/src/components/EventsViewer/EventsGrid/EventsColumn/FullEvent/FullEvent.scss index ef52c6ed..8661fa6b 100644 --- a/frontend/src/components/EventsViewer/EventsGrid/EventsColumn/FullEvent/FullEvent.scss +++ b/frontend/src/components/EventsViewer/EventsGrid/EventsColumn/FullEvent/FullEvent.scss @@ -1,8 +1,15 @@ .full-event{ display:flex; - width:100%; + width:calc(100% - 50px); height:100%; gap:20px; + position: relative; + margin-right:50px; + background-color: var(--background); + border-radius: 20px; + overflow:hidden; + padding:20px; + box-sizing: border-box; iconify-icon{ font-size: 20px; diff --git a/frontend/src/components/Popup/Popup.scss b/frontend/src/components/Popup/Popup.scss index 3c9c4f0f..681fac30 100644 --- a/frontend/src/components/Popup/Popup.scss +++ b/frontend/src/components/Popup/Popup.scss @@ -29,6 +29,7 @@ &.wide-content{ max-width: 1000px; width:95%; + } } @@ -50,6 +51,29 @@ &.wide-content{ max-width: 1000px; width:95%; + .close-popup{ + background-color: var(--background); + padding:7px; + top:5px; + right:10px; + border-radius:50%; + animation: popout 0.3s forwards cubic-bezier(0.075, 0.82, 0.165, 1); + animation-delay:0.1s; + transform:translateX(-50px); + opacity:0; + } + @keyframes popout { + from { + transform:translateX(-50px); + opacity: 0; + } + to { + transform:translateX(0); + opacity: 1; + } + + } + } } @@ -69,6 +93,7 @@ top:15px; right:15px; z-index: 100; + cursor: pointer; } .close-popup.popout{ diff --git a/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.jsx b/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.jsx index f71161f3..3eeb82d3 100644 --- a/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.jsx +++ b/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.jsx @@ -23,7 +23,7 @@ function OIEEvent({event}){ return(
- +
diff --git a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss index b5270395..091aa0a6 100644 --- a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss +++ b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss @@ -1,11 +1,16 @@ .full-event.oie{ display:flex; flex-direction: column; - width:100%; + width:calc(100% - 50px); + position: relative; + border-radius: 20px; + overflow: hidden; height:100%; box-sizing: border-box; gap:0; background-color: var(--oie-background); + margin-right:50px; + padding:0; iconify-icon{ font-size: 20px; @@ -69,6 +74,7 @@ width:100%; padding: 0 7px; align-items: center; + box-sizing: border-box; .tab{ padding: 10px 10px; box-sizing: border-box; From f7effedb4bbae4ecb1d2397cea3eb605aea542d3 Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Sat, 16 Nov 2024 20:35:12 -0500 Subject: [PATCH 22/97] SCRUM-146 added fade-in and fade-out --- frontend/src/pages/OIEDash/OIEDash.jsx | 30 +++++++++++++++++++------ frontend/src/pages/OIEDash/OIEDash.scss | 14 +++++++++++- 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/frontend/src/pages/OIEDash/OIEDash.jsx b/frontend/src/pages/OIEDash/OIEDash.jsx index 1997b22c..5a508f79 100644 --- a/frontend/src/pages/OIEDash/OIEDash.jsx +++ b/frontend/src/pages/OIEDash/OIEDash.jsx @@ -8,6 +8,7 @@ import { getAllEvents } from '../../components/EventsViewer/EventHelpers'; import {Icon} from '@iconify-icon/react'; import Dash from './Dash/Dash'; +import { set } from 'mongoose'; function OIEDash(){ const [expanded, setExpanded] = useState(false); @@ -16,6 +17,9 @@ function OIEDash(){ const navigate = useNavigate(); const [userInfo, setUserInfo] = useState({}); + const [currentPage, setCurrentPage] = useState(0); + const [currentDisplay, setCurrentDisplay] = useState(0); + useEffect(()=>{ if(isAuthenticating){ return; @@ -49,6 +53,11 @@ function OIEDash(){ } } + useEffect(() => { + setCurrentPage(currentPage); + + }, [currentDisplay]); + return (
@@ -58,11 +67,11 @@ function OIEDash(){
-
- -
- -
+ { + (currentPage === 0 || currentDisplay === 0) && +
+ +
+ } + { + (currentPage === 1 || currentDisplay === 1) && +
Page 1
+ } +
+
diff --git a/frontend/src/pages/OIEDash/OIEDash.scss b/frontend/src/pages/OIEDash/OIEDash.scss index 5f5dd145..2dbb0d93 100644 --- a/frontend/src/pages/OIEDash/OIEDash.scss +++ b/frontend/src/pages/OIEDash/OIEDash.scss @@ -111,10 +111,22 @@ } .dash-content{ - position: relative; + position: absolute; + top:0; + left:0; max-width:100%; width:100%; + opacity: 0; + pointer-events:none; + transition: all 0.5s; + &.visible{ + opacity: 1; + pointer-events:all; + } + + } + .expand{ position: absolute; From faf911a5a33d2228c6f691900a71eb1eb4fc74f0 Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Sun, 17 Nov 2024 13:20:25 -0500 Subject: [PATCH 23/97] SCRUM-146 menu select --- frontend/src/pages/OIEDash/OIEDash.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/pages/OIEDash/OIEDash.jsx b/frontend/src/pages/OIEDash/OIEDash.jsx index 5a508f79..144380e8 100644 --- a/frontend/src/pages/OIEDash/OIEDash.jsx +++ b/frontend/src/pages/OIEDash/OIEDash.jsx @@ -67,11 +67,11 @@ function OIEDash(){

Event Calendar

+
  • setCurrentDisplay(1)}> +
    + +
    +

    Configuration

    +
  • diff --git a/frontend/src/pages/OIEDash/OIEDash.scss b/frontend/src/pages/OIEDash/OIEDash.scss index 2dbb0d93..0dfc4c33 100644 --- a/frontend/src/pages/OIEDash/OIEDash.scss +++ b/frontend/src/pages/OIEDash/OIEDash.scss @@ -57,6 +57,7 @@ justify-content: flex-start; gap:10px; padding:5px 10px; + border:1px solid var(--oie-background); &.selected{ background-color: var(--background); border-radius: 10px; diff --git a/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.jsx b/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.jsx index 3eeb82d3..24d82f43 100644 --- a/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.jsx +++ b/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.jsx @@ -23,7 +23,7 @@ function OIEEvent({event}){ return(
    - +
    diff --git a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx index 7abc6274..c2307953 100644 --- a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx +++ b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect } from 'react'; +import React, { useState, useEffect, useRef } from 'react'; import { useNavigate } from 'react-router-dom'; import './OIEFullEvent.scss'; import {Icon} from '@iconify-icon/react'; From 5dff541c721676d65a9864f149ea8832cc4ceb40 Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Mon, 18 Nov 2024 02:05:09 -0500 Subject: [PATCH 26/97] SCRUM-146 added config --- backend/routes/oie-routes.js | 1 + frontend/src/App.css | 9 ++ frontend/src/hooks/useFetch.js | 38 ++++++ .../OIEDash/Configuration/Configuration.jsx | 117 ++++++++++++++++++ .../OIEDash/Configuration/Configuration.scss | 74 +++++++++++ frontend/src/pages/OIEDash/OIEDash.jsx | 9 +- frontend/src/pages/OIEDash/OIEDash.scss | 3 + .../FullEvent/OIEFullEvent.jsx | 13 ++ .../FullEvent/OIEFullEvent.scss | 11 +- 9 files changed, 273 insertions(+), 2 deletions(-) create mode 100644 frontend/src/hooks/useFetch.js create mode 100644 frontend/src/pages/OIEDash/Configuration/Configuration.jsx create mode 100644 frontend/src/pages/OIEDash/Configuration/Configuration.scss diff --git a/backend/routes/oie-routes.js b/backend/routes/oie-routes.js index 0bf9ffc0..3974f3d4 100644 --- a/backend/routes/oie-routes.js +++ b/backend/routes/oie-routes.js @@ -29,6 +29,7 @@ router.post('/config', verifyToken, async (req, res) => { await newConfig.save(); res.json(newConfig); } catch (error) { + console.log(error); res.status(500).json({ message: error.message }); } }); diff --git a/frontend/src/App.css b/frontend/src/App.css index 6b7436d1..00cf7e90 100644 --- a/frontend/src/App.css +++ b/frontend/src/App.css @@ -322,6 +322,15 @@ button.active{ } } +@keyframes fromLeft{ + from{ + transform: translateX(-100%); + } + to{ + transform: translateX(0); + } +} + .row{ display:flex; flex-direction:row; diff --git a/frontend/src/hooks/useFetch.js b/frontend/src/hooks/useFetch.js new file mode 100644 index 00000000..9a3c31da --- /dev/null +++ b/frontend/src/hooks/useFetch.js @@ -0,0 +1,38 @@ +import { useState, useEffect } from "react"; +import axios from "axios"; + +export const useFetch = (url, options = { method: "GET", data: null }) => { + const [data, setData] = useState(null); + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + + useEffect(() => { + console.log(options); + let isMounted = true; //track whether component is mounted + const fetchData = async () => { + setLoading(true); + setError(null); + try { + const response = await axios({ + url, + method: options.method || "GET", + data: options.data || null, + headers: options.headers || {"Authorization": `Bearer ${localStorage.getItem("token")}`}, + }); + if (isMounted) setData(response.data); + } catch (err) { + if (isMounted) setError(err.message); + } finally { + if (isMounted) setLoading(false); + } + }; + + fetchData(); + + return () => { + isMounted = false; //avoid setting state on unmounted component + }; + }, [url, options.method, options.data, options.headers]); + + return { data, loading, error }; +}; diff --git a/frontend/src/pages/OIEDash/Configuration/Configuration.jsx b/frontend/src/pages/OIEDash/Configuration/Configuration.jsx new file mode 100644 index 00000000..d7f29e41 --- /dev/null +++ b/frontend/src/pages/OIEDash/Configuration/Configuration.jsx @@ -0,0 +1,117 @@ +import React, { useEffect, useState } from 'react'; +import './Configuration.scss'; +import { Icon } from '@iconify-icon/react'; +import { useNavigate } from 'react-router-dom'; +import { useNotification } from '../../../NotificationContext'; +import { useAuth } from '../../../AuthContext'; + +import { useFetch } from '../../../hooks/useFetch'; + +import Loader from '../../../components/Loader/Loader'; +import axios from 'axios'; + +function CheckItem({ item, index, handleCheck }) { + const [edit, setEdit] = useState(false); + const [title, setTitle] = useState(item.title); + const [description, setDescription] = useState(item.description); + + const toggleEdit = () => { + if(edit) { + handleCheck((prev) => { + const checkList = prev.config.checklist; + const newChecklist = [...checkList]; + newChecklist[index] = { title, description }; + return {config: {checklist:newChecklist}}; + }); + } + setEdit(!edit); + } + + return ( +
    +
    +
    + { edit ? + ( + setTitle(e.target.value)} /> + ) : +

    {item.title}

    + } + {item.description && + edit ? + ( + setDescription(e.target.value)} /> + ) : +

    {item.description}

    + } +
    + +
    +
    + ); +} + +function Configuration() { + const { data, loading, error } = useFetch('/config'); + const { addNotification } = useNotification(); + + const [clientData, setClientData] = useState(null); + + useEffect(() => { + if (error) { + addNotification({ title: 'Error', message: error, type: 'error' }); + } + } + , [error, addNotification]); + + useEffect(() => { + if (data) { + setClientData(data); + } + }, [data]); + + const handleSave = async () => { + try { + console.log(clientData); + await axios.post('/config', clientData, {headers: {"Authorization": `Bearer ${localStorage.getItem("token")}`}}); + addNotification({ title: 'Success', message: 'Configuration saved', type: 'success' }); + } catch (error) { + addNotification({ title: 'Error', message: error.message, type: 'error' }); + } + } + + if (error) { + return ( +
    +

    Configuration

    +
    +

    {error}

    +
    +
    + ) + } + + return ( +
    +

    Configuration

    +
    +
    +

    checklist items

    +
    + { + !loading && clientData && clientData.config.checklist.map((config, index) => { + return ( + + ); + }) + } + { + loading && + } +
    + +
    + ); +} + +export default Configuration; \ No newline at end of file diff --git a/frontend/src/pages/OIEDash/Configuration/Configuration.scss b/frontend/src/pages/OIEDash/Configuration/Configuration.scss new file mode 100644 index 00000000..31241962 --- /dev/null +++ b/frontend/src/pages/OIEDash/Configuration/Configuration.scss @@ -0,0 +1,74 @@ +.configuration{ + padding:20px; + height:100%; + flex-grow:1; + min-height:100%; + display:flex; + flex-direction: column; + gap:10px; + .content{ + width:300px; + max-width:300px; + padding:5px; + max-height:100%; + border-radius:13px; + background-color: var(--oie-background); + align-items: center; + display:flex; + flex-direction: column; + flex-grow:1; + .col-header{ + width:100%; + justify-content: space-between; + display:flex; + + } + h2{ + margin:7px 10px 10px 10px; + padding:0; + font-size:16px; + font-weight:800; + font-family: 'Inter'; + } + .check-item{ + width:100%; + display:flex; + margin-bottom:5px; + padding:7px 15px; + box-sizing: border-box; + border: 1px solid var(--lighterborder); + border-radius: 10px; + flex-direction: column; + background-color: var(--background); + opacity: 0; + transform:translateX(-100%); + animation: fromLeft 0.3s forwards cubic-bezier(0.075, 0.82, 0.165, 1), fadeIn 0.3s forwards; + .row{ + justify-content: space-between; + } + + input{ + border:none; + outline:none; + background-color: var(--oie-background); + font-family: 'Inter'; + font-size: 13px; + font-weight: 600; + color: var(--text); + padding: 5px; + box-sizing: border-box; + border-radius: 5px; + overflow-x:scroll; + width:fit-content; + } + + h2{ + margin:0; + padding:0; + font-size:16px; + font-weight:600; + font-family: 'Inter'; + } + } + } +} \ No newline at end of file diff --git a/frontend/src/pages/OIEDash/OIEDash.jsx b/frontend/src/pages/OIEDash/OIEDash.jsx index 402f2a27..ae2f903b 100644 --- a/frontend/src/pages/OIEDash/OIEDash.jsx +++ b/frontend/src/pages/OIEDash/OIEDash.jsx @@ -5,6 +5,7 @@ import { useNavigate } from 'react-router-dom'; import Dashboard from '../../assets/Icons/Dashboard.svg'; import logo from '../../assets/red_logo.svg'; import { getAllEvents } from '../../components/EventsViewer/EventHelpers'; +import Configuration from './Configuration/Configuration'; import {Icon} from '@iconify-icon/react'; import Dash from './Dash/Dash'; @@ -77,7 +78,7 @@ function OIEDash(){

    Event Calendar

    -
  • setCurrentDisplay(1)}> +
  • setCurrentDisplay(2)}>
    @@ -97,6 +98,12 @@ function OIEDash(){ (currentPage === 1 || currentDisplay === 1) &&
    Page 1
    } + { + (currentPage === 2 || currentDisplay === 2) && +
    + +
    + }
    diff --git a/frontend/src/pages/OIEDash/OIEDash.scss b/frontend/src/pages/OIEDash/OIEDash.scss index 0dfc4c33..6438e0d6 100644 --- a/frontend/src/pages/OIEDash/OIEDash.scss +++ b/frontend/src/pages/OIEDash/OIEDash.scss @@ -120,6 +120,9 @@ opacity: 0; pointer-events:none; transition: all 0.5s; + display:flex; + flex-direction: column; + min-height:100%; &.visible{ opacity: 1; pointer-events:all; diff --git a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx index c2307953..f8f4edcb 100644 --- a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx +++ b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx @@ -4,9 +4,11 @@ import './OIEFullEvent.scss'; import {Icon} from '@iconify-icon/react'; import StarGradient from '../../../../assets/OIE-Gradient2.png'; import MockPoster from '../../../../assets/MockPoster.png'; +import { useFetch } from '../../../../hooks/useFetch'; function OIEFullEvent({ event }){ + const { data, loading, error } = useFetch('/config'); const navigate = useNavigate(); const handleEventClick = () => { @@ -55,6 +57,17 @@ function OIEFullEvent({ event }){
  • +
    +

    Checklist

    +
    + {!loading && data.config.checklist.map((item, index) => ( +
    +

    {item.title}

    +

    {item.description}

    +
    + ))} +
    +
    ); diff --git a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss index 091aa0a6..e6aa79af 100644 --- a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss +++ b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss @@ -29,15 +29,24 @@ .event-info{ border-radius: 20px; background-color: var(--background); + position: relative; & > div{ display:flex; gap:20px; - padding:20px; + padding:20px; opacity: 0; transition: all 0.5s; + &.check{ + position: absolute; + height:100%; + width: 100%; + top:0; + left:0; + } + &.visible{ opacity: 1; } From a2779bab22704de18b72e2b5daa400952da20f30 Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Mon, 18 Nov 2024 15:30:50 -0500 Subject: [PATCH 27/97] SCRUM-146 finished dynamic updating for checklist items --- backend/routes/eventRoutes.js | 10 +- backend/routes/oie-routes.js | 25 +++- frontend/src/hooks/useFetch.js | 2 +- .../FullEvent/OIEFullEvent.jsx | 75 +++++++++-- .../FullEvent/OIEFullEvent.scss | 120 ++++++++++++++++++ 5 files changed, 216 insertions(+), 16 deletions(-) diff --git a/backend/routes/eventRoutes.js b/backend/routes/eventRoutes.js index 2f10933d..b5f4faf4 100644 --- a/backend/routes/eventRoutes.js +++ b/backend/routes/eventRoutes.js @@ -13,7 +13,6 @@ router.post('/create-event', verifyToken, async (req, res) => { ...req.body, hostingId : user_id, hostingType : 'User', - }); let OIE = null; @@ -23,7 +22,7 @@ router.post('/create-event', verifyToken, async (req, res) => { OIE = new OIEStatus({ eventRef: event._id, status: 'Pending', - checkListItems: event.OIEAcknowledgementItems + checkListItems: [], }); } @@ -202,14 +201,15 @@ router.get('/get-event/:event_id', verifyTokenOptional, async (req, res) => { success: false, message: 'You are not authorized to view this page.' }); - } else { + } else { const OIE = await OIEStatus.findOne({ eventRef: event_id }); if (OIE) { //attach to event object - OIE.oieObject = OIE; + let newEvent = event.toObject(); + newEvent["OIE"] = OIE; return res.status(202).json({ success: true, - event + event: newEvent }); } return res.status(200).json({ diff --git a/backend/routes/oie-routes.js b/backend/routes/oie-routes.js index 3974f3d4..07625019 100644 --- a/backend/routes/oie-routes.js +++ b/backend/routes/oie-routes.js @@ -10,8 +10,10 @@ router.get('/config', verifyToken, async (req, res) => { if (!config) { return res.status(404).json({ message: 'Config not found' }); } + console.log('GET: /config successful'); res.json(config); } catch (error) { + console.log('GET: /config failed', error); res.status(500).json({ message: error.message }); } }); @@ -27,9 +29,30 @@ router.post('/config', verifyToken, async (req, res) => { } const newConfig = new OIEConfig(req.body); await newConfig.save(); + console.log('POST: /config successful'); res.json(newConfig); } catch (error) { - console.log(error); + console.log("POST: /config failed", error); + res.status(500).json({ message: error.message }); + } +}); + +router.post('/oie-status', verifyToken, async (req, res) => { + try { + const { eventRef, status, checkListItems } = req.body; + const oieStatus = await OIEStatus.findOne({ eventRef }); + if (oieStatus) { + oieStatus.status = status; + oieStatus.checkListItems = checkListItems; + await oieStatus.save(); + return res.json(oieStatus); + } + const newOIEStatus = new OIEStatus(req.body); + await newOIEStatus.save(); + console.log('POST: /oie-status successful'); + res.json(newOIEStatus); + } catch (error) { + console.log('POST: /oie-status failed', error); res.status(500).json({ message: error.message }); } }); diff --git a/frontend/src/hooks/useFetch.js b/frontend/src/hooks/useFetch.js index 9a3c31da..b599ff78 100644 --- a/frontend/src/hooks/useFetch.js +++ b/frontend/src/hooks/useFetch.js @@ -7,7 +7,6 @@ export const useFetch = (url, options = { method: "GET", data: null }) => { const [error, setError] = useState(null); useEffect(() => { - console.log(options); let isMounted = true; //track whether component is mounted const fetchData = async () => { setLoading(true); @@ -19,6 +18,7 @@ export const useFetch = (url, options = { method: "GET", data: null }) => { data: options.data || null, headers: options.headers || {"Authorization": `Bearer ${localStorage.getItem("token")}`}, }); + console.log(response); if (isMounted) setData(response.data); } catch (err) { if (isMounted) setError(err.message); diff --git a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx index f8f4edcb..a2d4e384 100644 --- a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx +++ b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx @@ -5,20 +5,71 @@ import {Icon} from '@iconify-icon/react'; import StarGradient from '../../../../assets/OIE-Gradient2.png'; import MockPoster from '../../../../assets/MockPoster.png'; import { useFetch } from '../../../../hooks/useFetch'; +import { useNotification } from '../../../../NotificationContext'; +import axios from 'axios'; +function OIEFullEvent({ event, eventId = null }){ + const { addNotification } = useNotification(); -function OIEFullEvent({ event }){ const { data, loading, error } = useFetch('/config'); - const navigate = useNavigate(); + const fullEvent = useFetch(`/get-event/${eventId ? eventId :event._id}`); - const handleEventClick = () => { - navigate(`/create-event`); - } const date = new Date(event.start_time); const dateEnd = new Date(event.end_time); const [tab, setTab] = useState("info"); + const [checked, setChecked] = useState({}); + + const handleCheck = async (index) => { + console.log(index); + const newChecked = {...checked}; + newChecked[index] = !newChecked[index]; + setChecked(newChecked); + let newOIE = {...fullEvent.data.event.OIE}; + const checkedItems = []; + for(const key in newChecked){ + if(newChecked[key]){ + checkedItems.push(data.config.checklist[key].title); + } + } + newOIE.checkListItems = checkedItems; + changeOIE(newOIE); + } + const handleApproved = async () => { + const newOIE = {...fullEvent.data.event.OIE}; + newOIE.status = "Approved"; + changeOIE(newOIE); + } + + const changeOIE = async (newOIE) => { + try{ + console.log(newOIE); + const auth = {headers: {"Authorization": `Bearer ${localStorage.getItem("token")}`}}; + const response = await axios.post(`/oie-status`, newOIE, auth); + console.log(response); + } catch(err){ + console.log(err); + addNotification({title: "Internal Error", content: "Failed to update checklist", type: "error"}); + } + } + + useEffect(() => { + if(fullEvent.data){ + const check = {}; + fullEvent.data.event.OIE.checkListItems.forEach((item)=>{ + //find index of item in config, then set checked to true + const index = data.config.checklist.findIndex((configItem) => configItem.title.toLowerCase() === item.toLowerCase()); + check[index] = true; + + }); + setChecked(check); + } + }, [fullEvent.data]); + + if(!event){ + return ""; + } return(
    @@ -54,16 +105,22 @@ function OIEFullEvent({ event }){

    {event.location}

    -
    +
    +

    Status

    Checklist

    {!loading && data.config.checklist.map((item, index) => ( -
    -

    {item.title}

    -

    {item.description}

    +
    handleCheck(index)} > +
    + +
    +

    {item.title}

    +

    {item.description}

    +
    +
    ))}
    diff --git a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss index e6aa79af..f030bccc 100644 --- a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss +++ b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss @@ -40,15 +40,132 @@ transition: all 0.5s; &.check{ + position: absolute; height:100%; width: 100%; top:0; left:0; + display: flex; + flex-direction: column; + gap: 10px; + box-sizing: border-box; + pointer-events: none; + h1{ + font-size:24px; + } + .checklist{ + display: flex; + flex-direction: column; + gap: 10px; + .check-item{ + cursor: pointer; + display: flex; + flex-direction: column; + padding: 5px 10px; + border:1px solid var(--lightborder); + border-radius: 10px; + transition: all 0.3s; + iconify-icon{ + font-size:20px; + transition: all 0.3s; + height:20px; + width:20px; + border-radius: 50%; + } + h2{ + font-size:16px; + font-weight:600; + margin: 0; + -webkit-user-select: none; + user-select: none; + } + p{ + -webkit-user-select: none; + user-select: none; + } + + h2{ + position:relative; + width:fit-content; + &::after{ + content: ''; + position: absolute; + width:0; + background-color: var(--green); + left:-20px; + height:2px; + top: 50%; + transition: all 0.1s ease-out; + border-radius: 2px; + } + + } + + .row{ + gap:10px; + } + + .row > :first-child{ + margin-top:2px; + } + + .col{ + gap:2px; + } + + &.checked{ + background-color: var(--translucent); + + iconify-icon{ + color: var(--green); + animation: radiate 0.5s forwards; + } + h2{ + color: var(--darkborder); + animation: bounce 0.5s forwards ease-in-out; + &::after{ + content: ''; + width:105%; + background-color: var(--darkborder); + left:-2%; + + } + } + p{ + color: var(--darkborder); + } + + @keyframes bounce { + 0% { + transform: translateX(0); + } + 50% { + transform: translateX(5px); + } + 100% { + transform: translateX(0); + } + } + @keyframes radiate { + // green glow + 0% { + box-shadow: 0 0 0 0 var(--green); + } + 100% { + box-shadow: 0 0 0 10px rgba(0, 255, 0, 0); + } + + + } + } + } + } } &.visible{ opacity: 1; + pointer-events:all; } } @@ -77,6 +194,9 @@ height:30%; } + + + .tabs{ background-color: var(--oie-background); display:flex; From 106df452e3bda67d9ec62552e0181354ce0dbb28 Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Tue, 19 Nov 2024 10:02:31 -0500 Subject: [PATCH 28/97] SCRUM-146 added approval and rejection, as well as status representation --- backend/routes/oie-routes.js | 9 ++ frontend/src/App.css | 10 ++- frontend/src/hooks/useFetch.js | 48 +++++------ .../OIEDash/Configuration/Configuration.jsx | 86 +++++++++++++++++-- .../OIEDash/Configuration/Configuration.scss | 49 ++++++++++- .../FullEvent/OIEFullEvent.jsx | 35 +++++++- .../FullEvent/OIEFullEvent.scss | 86 ++++++++++++++++++- 7 files changed, 281 insertions(+), 42 deletions(-) diff --git a/backend/routes/oie-routes.js b/backend/routes/oie-routes.js index 07625019..1955c55c 100644 --- a/backend/routes/oie-routes.js +++ b/backend/routes/oie-routes.js @@ -3,6 +3,7 @@ const router = express.Router(); const { verifyToken, verifyTokenOptional } = require('../middlewares/verifyToken'); const OIEConfig = require('../schemas/OIEConfig'); const OIEStatus = require('../schemas/OIE'); +const Event = require('../schemas/event'); router.get('/config', verifyToken, async (req, res) => { try { @@ -45,10 +46,18 @@ router.post('/oie-status', verifyToken, async (req, res) => { oieStatus.status = status; oieStatus.checkListItems = checkListItems; await oieStatus.save(); + const event = await Event.findById(eventRef); + event.OIEStatus = status; + await event.save(); + console.log('POST: /oie-status successful'); return res.json(oieStatus); } const newOIEStatus = new OIEStatus(req.body); await newOIEStatus.save(); + const event = await Event.findById(eventRef); + event.OIEStatus = status; + await event.save(); + console.log(event); console.log('POST: /oie-status successful'); res.json(newOIEStatus); } catch (error) { diff --git a/frontend/src/App.css b/frontend/src/App.css index 00cf7e90..56c6d8ae 100644 --- a/frontend/src/App.css +++ b/frontend/src/App.css @@ -341,4 +341,12 @@ button.active{ display:flex; flex-direction:column; gap:5px; - } \ No newline at end of file + } + + +button{ + outline:none; + border:none; + border-radius:5px; + +} \ No newline at end of file diff --git a/frontend/src/hooks/useFetch.js b/frontend/src/hooks/useFetch.js index b599ff78..3a94d6f7 100644 --- a/frontend/src/hooks/useFetch.js +++ b/frontend/src/hooks/useFetch.js @@ -1,4 +1,4 @@ -import { useState, useEffect } from "react"; +import { useState, useEffect, useCallback } from "react"; import axios from "axios"; export const useFetch = (url, options = { method: "GET", data: null }) => { @@ -6,33 +6,27 @@ export const useFetch = (url, options = { method: "GET", data: null }) => { const [loading, setLoading] = useState(true); const [error, setError] = useState(null); - useEffect(() => { - let isMounted = true; //track whether component is mounted - const fetchData = async () => { - setLoading(true); - setError(null); - try { - const response = await axios({ - url, - method: options.method || "GET", - data: options.data || null, - headers: options.headers || {"Authorization": `Bearer ${localStorage.getItem("token")}`}, - }); - console.log(response); - if (isMounted) setData(response.data); - } catch (err) { - if (isMounted) setError(err.message); - } finally { - if (isMounted) setLoading(false); - } - }; + const fetchData = useCallback(async () => { + setLoading(true); + setError(null); + try { + const response = await axios({ + url, + method: options.method || "GET", + data: options.data || null, + headers: options.headers || { Authorization: `Bearer ${localStorage.getItem("token")}` }, + }); + setData(response.data); + } catch (err) { + setError(err.message); + } finally { + setLoading(false); + } + }, [url, options.method, options.data, options.headers]); + useEffect(() => { fetchData(); + }, [fetchData]); - return () => { - isMounted = false; //avoid setting state on unmounted component - }; - }, [url, options.method, options.data, options.headers]); - - return { data, loading, error }; + return { data, loading, error, refetch: fetchData }; }; diff --git a/frontend/src/pages/OIEDash/Configuration/Configuration.jsx b/frontend/src/pages/OIEDash/Configuration/Configuration.jsx index d7f29e41..4b137f3f 100644 --- a/frontend/src/pages/OIEDash/Configuration/Configuration.jsx +++ b/frontend/src/pages/OIEDash/Configuration/Configuration.jsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react'; +import React, { useEffect, useState, useRef } from 'react'; import './Configuration.scss'; import { Icon } from '@iconify-icon/react'; import { useNavigate } from 'react-router-dom'; @@ -9,43 +9,92 @@ import { useFetch } from '../../../hooks/useFetch'; import Loader from '../../../components/Loader/Loader'; import axios from 'axios'; +import { set } from 'mongoose'; -function CheckItem({ item, index, handleCheck }) { +function CheckItem({ item, index, handleCheck, editOnLoad=false, editing, setEditing }) { + const {addNotification} = useNotification(); const [edit, setEdit] = useState(false); const [title, setTitle] = useState(item.title); const [description, setDescription] = useState(item.description); - const toggleEdit = () => { + const editRef = useRef(); + + const toggleEdit = (del = false) => { + if(editing && !edit){ + addNotification({title: "Error", message: "Finish editing current item first", type: "error"}); + return; + } if(edit) { + if(!title && !del){ + addNotification({title: "Error", message: "Title cannot be empty", type: "error"}); + return; + } handleCheck((prev) => { const checkList = prev.config.checklist; const newChecklist = [...checkList]; newChecklist[index] = { title, description }; return {config: {checklist:newChecklist}}; }); + setEditing(false); + } else { + setTimeout(() => { + if(editRef.current){ + editRef.current.focus(); + } + }, 100); + setEditing(true); } setEdit(!edit); } + const cancelEdit = () => { + setTitle(item.title); + setDescription(item.description); + setEdit(false); + setEditing(false); + } + + const deleteItem = () => { + toggleEdit(true); + handleCheck((prev) => { + const checkList = prev.config.checklist; + const newChecklist = [...checkList]; + newChecklist.splice(index, 1); + return {config: {checklist:newChecklist}}; + }); + } + + useEffect(() => { + if(item.title === ""){ + toggleEdit(); + } + }, []); + return ( -
    +
    { edit ? ( - setTitle(e.target.value)} /> + setTitle(e.target.value)} ref={editRef} /> ) :

    {item.title}

    } - {item.description && + { edit ? ( setDescription(e.target.value)} /> ) : + item.description &&

    {item.description}

    } + {edit && } +
    +
    + + {edit && }
    - +
    ); @@ -56,6 +105,10 @@ function Configuration() { const { addNotification } = useNotification(); const [clientData, setClientData] = useState(null); + const [editing, setEditing] = useState(false); + + let editOnLoad = true; + const navigate = useNavigate(); useEffect(() => { if (error) { @@ -77,8 +130,22 @@ function Configuration() { addNotification({ title: 'Success', message: 'Configuration saved', type: 'success' }); } catch (error) { addNotification({ title: 'Error', message: error.message, type: 'error' }); + navigate('/'); } } + + const onAdd = () => { + if(editing){ + addNotification({title: "Error", message: "Finish editing current item first", type: "error"}); + return; + } + setClientData((prev) => { + const checkList = prev.config.checklist; + const newChecklist = [...checkList]; + newChecklist.push({ title: '', description: '' }); + return {config: {checklist:newChecklist}}; + }); + } if (error) { return ( @@ -97,11 +164,14 @@ function Configuration() {

    checklist items

    +
    + +
    { !loading && clientData && clientData.config.checklist.map((config, index) => { return ( - + ); }) } diff --git a/frontend/src/pages/OIEDash/Configuration/Configuration.scss b/frontend/src/pages/OIEDash/Configuration/Configuration.scss index 31241962..25275cc7 100644 --- a/frontend/src/pages/OIEDash/Configuration/Configuration.scss +++ b/frontend/src/pages/OIEDash/Configuration/Configuration.scss @@ -17,14 +17,20 @@ display:flex; flex-direction: column; flex-grow:1; + overflow-x:hidden; .col-header{ width:100%; justify-content: space-between; display:flex; - + align-items: center; + padding-right:15px; + iconify-icon{ + font-size:18px; + color: var(--text); + } } h2{ - margin:7px 10px 10px 10px; + margin:7px 10px 10px 15px; padding:0; font-size:16px; font-weight:800; @@ -42,9 +48,35 @@ background-color: var(--background); opacity: 0; transform:translateX(-100%); + justify-content: center; animation: fromLeft 0.3s forwards cubic-bezier(0.075, 0.82, 0.165, 1), fadeIn 0.3s forwards; .row{ justify-content: space-between; + .col{ + gap:2px; + button{ + background-color: var(--red); + color: white; + border:none; + padding: 5px; + width:100%; + font-family: 'Inter'; + font-weight:500; + height:fit-content; + margin-top:10px; + } + } + .edit-container{ + display:flex; + flex-direction: column; + gap: 10px; + .trash{ + iconify-icon{ + + color:var(--red); + } + } + } } input{ @@ -69,6 +101,19 @@ font-weight:600; font-family: 'Inter'; } + button{ + background-color: transparent; + height:16px; + width:16px; + iconify-icon{ + color: var(--darkborder); + font-size: 18px; + } + + } + &.edit{ + border: 1px dashed var(--darkborder); + } } } } \ No newline at end of file diff --git a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx index a2d4e384..fea94df6 100644 --- a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx +++ b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx @@ -27,6 +27,7 @@ function OIEFullEvent({ event, eventId = null }){ setChecked(newChecked); let newOIE = {...fullEvent.data.event.OIE}; const checkedItems = []; + console.log(data.config); for(const key in newChecked){ if(newChecked[key]){ checkedItems.push(data.config.checklist[key].title); @@ -36,10 +37,11 @@ function OIEFullEvent({ event, eventId = null }){ changeOIE(newOIE); } - const handleApproved = async () => { + const handleApproved = async (status) => { const newOIE = {...fullEvent.data.event.OIE}; - newOIE.status = "Approved"; + newOIE.status = status ? "Approved" : "Rejected"; changeOIE(newOIE); + fullEvent.refetch(); } const changeOIE = async (newOIE) => { @@ -48,6 +50,7 @@ function OIEFullEvent({ event, eventId = null }){ const auth = {headers: {"Authorization": `Bearer ${localStorage.getItem("token")}`}}; const response = await axios.post(`/oie-status`, newOIE, auth); console.log(response); + return response.data; } catch(err){ console.log(err); addNotification({title: "Internal Error", content: "Failed to update checklist", type: "error"}); @@ -60,6 +63,9 @@ function OIEFullEvent({ event, eventId = null }){ fullEvent.data.event.OIE.checkListItems.forEach((item)=>{ //find index of item in config, then set checked to true const index = data.config.checklist.findIndex((configItem) => configItem.title.toLowerCase() === item.toLowerCase()); + if(index === -1){ + return; + } check[index] = true; }); @@ -109,7 +115,30 @@ function OIEFullEvent({ event, eventId = null }){
    -

    Status

    +

    Approval Status

    +
    + {!fullEvent.loading && + <> +
    +
    +

    {fullEvent.data.event.OIE.status}

    + + +
    +
    +
    +

    OIE requirements met

    +
    + {event.OIEAcknowledgementItems.map((item, index) => ( +
    +

    {item}

    +
    + ))} +
    +

    Approval requested {new Date(fullEvent.data.event.createdAt).toLocaleString('default', {weekday: 'long'})}, {new Date(fullEvent.data.event.createdAt).toLocaleString('default', {month: 'long'})} {new Date(fullEvent.data.event.createdAt).getDate()}

    + + } +

    Checklist

    {!loading && data.config.checklist.map((item, index) => ( diff --git a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss index f030bccc..1d08d4c2 100644 --- a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss +++ b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss @@ -53,6 +53,90 @@ pointer-events: none; h1{ font-size:24px; + margin-bottom:0; + } + .status{ + display: flex; + gap:10px; + flex-direction: column; + width:100%; + border:1px solid var(--lighterborder); + box-shadow: var(--shadow); + padding: 10px 15px; + box-sizing: border-box; + border-radius: 10px; + .row{ + align-items: center; + gap:10px; + + .accept,.reject{ + display:flex; + align-items: center; + gap:5px; + + background-color: var(--green); + color: white; + border-radius: 5px; + cursor: pointer; + font-family: 'Inter'; + font-weight: 400; + iconify-icon{ + font-size: 14px; + color: white; + } + } + .reject{ + background-color: var(--red); + } + h2{ + margin: 0; + font-size: 18px; + font-weight: 600; + font-family: 'Inter'; + } + + + .status-dot{ + width: 13px; + height: 13px; + border-radius: 50%; + &.pending{ + background-color: var(--yellow); + } + &.approved{ + background-color: var(--green); + } + &.rejected{ + background-color: var(--red); + } + } + } + + .requirements{ + background-color: var(--oie-background); + padding:2px; + border-radius: 5px; + width:fit-content; + min-width:200px; + .requirement-header{ + padding:2px 8px; + p{ + font-size: 15px; + font-weight: 600; + font-family: 'Inter'; + } + } + .requirement{ + border-radius: 3px; + padding: 2px 5px; + background-color: var(--background); + } + } + p{ + font-size: 15px; + font-weight: 400; + font-family: "Inter"; + } } .checklist{ display: flex; @@ -96,7 +180,7 @@ left:-20px; height:2px; top: 50%; - transition: all 0.1s ease-out; + transition: all 0.1s ease-out, background-color 0.3s; border-radius: 2px; } From cde8e0a132903f8c351b4dda56286a7fee9ecb76 Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Wed, 20 Nov 2024 14:32:41 -0500 Subject: [PATCH 29/97] SCRUM-146 adapting useFetch hook to oie dash --- frontend/src/App.css | 5 +- .../OIEDash/Configuration/Configuration.jsx | 63 +++++++++++-------- .../OIEDash/Configuration/Configuration.scss | 48 ++++++++------ frontend/src/pages/OIEDash/Dash/Dash.jsx | 53 +++++++++------- frontend/src/pages/OIEDash/OIEDash.scss | 3 + .../OIEEventsComponents/Event/OIEEvent.jsx | 24 ++++++- .../OIEEventsComponents/Event/OIEEvent.scss | 20 ++++++ .../FullEvent/OIEFullEvent.jsx | 4 +- .../FullEvent/OIEFullEvent.scss | 2 +- 9 files changed, 145 insertions(+), 77 deletions(-) diff --git a/frontend/src/App.css b/frontend/src/App.css index 56c6d8ae..83615761 100644 --- a/frontend/src/App.css +++ b/frontend/src/App.css @@ -18,6 +18,7 @@ --lighterborder:#E4E5E6; /* --green: #4DAA57; */ --green: #64AB6C; + --dark-blue: #6D8EFA; --shadow: 0px 7px 29px 0px rgba(100, 100, 111, 0.1); --lighter: #F5F5F5; --offwhite: #F6F6F6; @@ -27,7 +28,7 @@ --rating-yellow : #FFC700; --yellow: #FBBC05; --offwhite: #F6F6F6; - --offwhite: #F6F6F6; + --developerBlue: #45A1FC; --developerPurple: #8052FB; @@ -348,5 +349,5 @@ button{ outline:none; border:none; border-radius:5px; - + } \ No newline at end of file diff --git a/frontend/src/pages/OIEDash/Configuration/Configuration.jsx b/frontend/src/pages/OIEDash/Configuration/Configuration.jsx index 4b137f3f..60f06f79 100644 --- a/frontend/src/pages/OIEDash/Configuration/Configuration.jsx +++ b/frontend/src/pages/OIEDash/Configuration/Configuration.jsx @@ -70,25 +70,32 @@ function CheckItem({ item, index, handleCheck, editOnLoad=false, editing, setEdi } }, []); + const onSubmit = (e) => { + e.preventDefault(); + + } + return ( -
    +
    - { edit ? - ( - setTitle(e.target.value)} ref={editRef} /> - ) : -

    {item.title}

    - } - { - edit ? - ( - setDescription(e.target.value)} /> - ) : - item.description && -

    {item.description}

    - } - {edit && } +
    + { edit ? + ( + setTitle(e.target.value)} ref={editRef} /> + ) : +

    {item.title}

    + } + { + edit ? + ( + setDescription(e.target.value)} /> + ) : + item.description && +

    {item.description}

    + } + {edit && } +
    @@ -163,21 +170,23 @@ function Configuration() {

    Configuration

    -

    checklist items

    +

    Checklist Items

    - { - !loading && clientData && clientData.config.checklist.map((config, index) => { - return ( - - ); - }) - } - { - loading && - } +
    + { + !loading && clientData && clientData.config.checklist.map((config, index) => { + return ( + + ); + }) + } + { + loading && + } +
    diff --git a/frontend/src/pages/OIEDash/Configuration/Configuration.scss b/frontend/src/pages/OIEDash/Configuration/Configuration.scss index 25275cc7..412f879c 100644 --- a/frontend/src/pages/OIEDash/Configuration/Configuration.scss +++ b/frontend/src/pages/OIEDash/Configuration/Configuration.scss @@ -7,17 +7,19 @@ flex-direction: column; gap:10px; .content{ - width:300px; - max-width:300px; - padding:5px; - max-height:100%; - border-radius:13px; - background-color: var(--oie-background); - align-items: center; - display:flex; - flex-direction: column; - flex-grow:1; - overflow-x:hidden; + border: 1px solid var(--lightborder); + border-radius: 15px; + width:fit-content; + box-sizing: border-box; + padding: 10px; + h2{ + margin:7px 10px; + padding:0; + font-size:20px; + font-weight:800; + font-family: 'Inter'; + } + .col-header{ width:100%; justify-content: space-between; @@ -29,13 +31,23 @@ color: var(--text); } } - h2{ - margin:7px 10px 10px 15px; - padding:0; - font-size:16px; - font-weight:800; - font-family: 'Inter'; - } + } + .check-items{ + width:300px; + max-width:300px; + padding:5px; + max-height:calc(100vh - 200px); + height: calc(100vh - 200px); + border-radius:13px; + background-color: var(--oie-background); + align-items: center; + display:flex; + flex-direction: column; + flex-grow:1; + overflow-x:hidden; + overflow-y: auto; + + .check-item{ width:100%; display:flex; diff --git a/frontend/src/pages/OIEDash/Dash/Dash.jsx b/frontend/src/pages/OIEDash/Dash/Dash.jsx index dcae02a5..12f596c5 100644 --- a/frontend/src/pages/OIEDash/Dash/Dash.jsx +++ b/frontend/src/pages/OIEDash/Dash/Dash.jsx @@ -3,36 +3,41 @@ import './Dash.scss'; import OIEGradient from '../../../assets/OIE-Gradient.png'; import { getAllEvents, getOIEEvents } from '../../../components/EventsViewer/EventHelpers'; import OIEEvent from '../OIEEventsComponents/Event/OIEEvent'; +import { useFetch } from '../../../hooks/useFetch'; function Dash({expandedClass}){ const [events, setEvents] = useState([]); const [pendingEvents, setPendingEvents] = useState([]); - useEffect(() => { - const fetchEvents = async (pending) => { - try{ - const allEvents = pending ? await getOIEEvents() : await getAllEvents(); - //sort by dates - allEvents.sort((a, b) => { - return new Date(a.date) - new Date(b.date); - }); - allEvents.reverse(); - if(pending){ - setPendingEvents(allEvents); - } else { - setEvents(allEvents); - } - console.log(allEvents); - } catch (error){ - console.log("Failed to fetch events", error); - } + const fetchEvents = useFetch('/get-all-events'); + const fetchPendingEvents = useFetch('/oie/get-pending-events'); + useEffect(() => { + if(fetchEvents.data){ + const allEvents = fetchEvents.data.events; + //sort by dates + allEvents.sort((a, b) => { + return new Date(a.date) - new Date(b.date); + }); + allEvents.reverse(); + setEvents(allEvents); } - fetchEvents(true); - fetchEvents(false); - }, []); + if(fetchPendingEvents.data){ + const allEvents = fetchPendingEvents.data.events; + //sort by dates + allEvents.sort((a, b) => { + return new Date(a.date) - new Date(b.date); + }); + allEvents.reverse(); + setPendingEvents(allEvents); + } + }, [fetchEvents.data, fetchPendingEvents.data]); + const refetch = () => { + fetchEvents.refetch(); + fetchPendingEvents.refetch(); + } return (
    @@ -47,7 +52,7 @@ function Dash({expandedClass}){ pendingEvents.map((event, index) => { if(index < 5){ return ( - + ) } }) @@ -59,9 +64,9 @@ function Dash({expandedClass}){
    { events.map((event, index) => { - if(index < 3){ + if(index < 5){ return ( - + ) } }) diff --git a/frontend/src/pages/OIEDash/OIEDash.scss b/frontend/src/pages/OIEDash/OIEDash.scss index 6438e0d6..a1f30ad5 100644 --- a/frontend/src/pages/OIEDash/OIEDash.scss +++ b/frontend/src/pages/OIEDash/OIEDash.scss @@ -106,6 +106,9 @@ border: 1px solid var(--lightborder); box-shadow: var(--shadow); width:calc(100% - 200px); + height: calc(100vh - 20px); + max-height: calc(100vh - 20px); + overflow: hidden; &.maximized{ width:100%; diff --git a/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.jsx b/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.jsx index 24d82f43..ccf98f77 100644 --- a/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.jsx +++ b/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.jsx @@ -4,10 +4,13 @@ import { useNavigate } from 'react-router-dom'; import Popup from '../../../../components/Popup/Popup'; import OIEFullEvent from '../FullEvent/OIEFullEvent'; import { Icon } from '@iconify-icon/react/dist/iconify.mjs'; +import FullEvent from '../../../../components/EventsViewer/EventsGrid/EventsColumn/FullEvent/FullEvent'; + import defaultAvatar from '../../../../assets/defaultAvatar.svg'; -function OIEEvent({event}){ +function OIEEvent({event, showStatus=false, refetch}){ const [popupOpen, setPopupOpen] = useState(false); + const [edited, setEdited] = useState(false); const navigate = useNavigate(); const handleEventClick = (event) => { @@ -16,17 +19,32 @@ function OIEEvent({event}){ const onPopupClose = () => { setPopupOpen(false); + if(edited){ + refetch(); + setEdited(false); + } } const date = new Date(event.start_time); - + + const statusMessages = { + 'Not Applicable' : ["Doesnt meet approval criteria","not-applicable"], + "Approved" : ["OIE Approved", "approved"] + } return(
    - + {event.OIEStatus === "Pending" ? + + : + + }
    + { + showStatus &&

    {statusMessages[event.OIEStatus][0]}

    + }

    {event.name}

    {/*

    {event.location }

    */} {/* display date in day of the week, month/day */} diff --git a/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.scss b/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.scss index 5c3fcd97..bf015c24 100644 --- a/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.scss +++ b/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.scss @@ -22,6 +22,26 @@ display:flex; flex-direction: column; gap:5px; + .oie-status{ + padding:1px 12px; + border-radius: 5px; + width:fit-content; + background-color: var(--green); + &.approved{ + background-color: var(--green); + } + &.not-applicable{ + background-color: var(--dark-blue); + } + p{ + font-size:11px; + color:var(--background); + margin:0; + font-family: 'Inter'; + font-weight:500; + } + } + h1{ font-size: 15px; font-weight: 600; diff --git a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx index fea94df6..f16c22f1 100644 --- a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx +++ b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx @@ -8,7 +8,7 @@ import { useFetch } from '../../../../hooks/useFetch'; import { useNotification } from '../../../../NotificationContext'; import axios from 'axios'; -function OIEFullEvent({ event, eventId = null }){ +function OIEFullEvent({ event, eventId = null, setEdited }){ const { addNotification } = useNotification(); const { data, loading, error } = useFetch('/config'); @@ -46,10 +46,10 @@ function OIEFullEvent({ event, eventId = null }){ const changeOIE = async (newOIE) => { try{ - console.log(newOIE); const auth = {headers: {"Authorization": `Bearer ${localStorage.getItem("token")}`}}; const response = await axios.post(`/oie-status`, newOIE, auth); console.log(response); + setEdited(true); return response.data; } catch(err){ console.log(err); diff --git a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss index 1d08d4c2..06affe89 100644 --- a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss +++ b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss @@ -40,7 +40,6 @@ transition: all 0.5s; &.check{ - position: absolute; height:100%; width: 100%; @@ -51,6 +50,7 @@ gap: 10px; box-sizing: border-box; pointer-events: none; + overflow-y:auto; h1{ font-size:24px; margin-bottom:0; From b19b59ab9cdb67863f57d76c6042023043b0f2c3 Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Thu, 21 Nov 2024 14:27:48 -0500 Subject: [PATCH 30/97] SCRUM-146 making events view --- backend/routes/eventRoutes.js | 50 +++++++++++ .../OIEDash/ManageEvents/ManageEvents.jsx | 86 +++++++++++++++++++ .../OIEDash/ManageEvents/ManageEvents.scss | 31 +++++++ frontend/src/pages/OIEDash/OIEDash.jsx | 15 +++- 4 files changed, 181 insertions(+), 1 deletion(-) create mode 100644 frontend/src/pages/OIEDash/ManageEvents/ManageEvents.jsx create mode 100644 frontend/src/pages/OIEDash/ManageEvents/ManageEvents.scss diff --git a/backend/routes/eventRoutes.js b/backend/routes/eventRoutes.js index b5f4faf4..6fd1b597 100644 --- a/backend/routes/eventRoutes.js +++ b/backend/routes/eventRoutes.js @@ -182,6 +182,56 @@ router.get('/oie/get-pending-events', verifyToken, async (req, res) => { } }); +//get all oie-unapproved events +router.get('/oie/get-accepted-events', verifyToken, async (req, res) => { + try { + const user = await User.findById(req.user.userId); + if (!user || !user.admin) { + return res.status(403).json({ + success: false, + message: 'You are not authorized to view this page.' + }); + } + const events = await Event.find({ OIEStatus: 'approved' }).populate('classroom_id').populate('hostingId'); + console.log('GET: /oie/get-pending-events successful'); + res.status(200).json({ + success: true, + events + }); + } catch (error) { + console.log('GET: /oie/get-pending-events failed', error); + res.status(500).json({ + success: false, + message: error.message + }); + } +}); + +//get all oie-unapproved events +router.get('/oie/get-rejected-events', verifyToken, async (req, res) => { + try { + const user = await User.findById(req.user.userId); + if (!user || !user.admin) { + return res.status(403).json({ + success: false, + message: 'You are not authorized to view this page.' + }); + } + const events = await Event.find({ OIEStatus: 'Rejected' }).populate('classroom_id').populate('hostingId'); + console.log('GET: /oie/get-pending-events successful'); + res.status(200).json({ + success: true, + events + }); + } catch (error) { + console.log('GET: /oie/get-pending-events failed', error); + res.status(500).json({ + success: false, + message: error.message + }); + } +}); + router.get('/get-event/:event_id', verifyTokenOptional, async (req, res) => { const { event_id } = req.params; const user_id = req.user ? req.user.userId : null; diff --git a/frontend/src/pages/OIEDash/ManageEvents/ManageEvents.jsx b/frontend/src/pages/OIEDash/ManageEvents/ManageEvents.jsx new file mode 100644 index 00000000..d371f869 --- /dev/null +++ b/frontend/src/pages/OIEDash/ManageEvents/ManageEvents.jsx @@ -0,0 +1,86 @@ +import React, { useEffect, useState } from 'react'; +import './ManageEvents.scss'; +import OIEGradient from '../../../assets/OIE-Gradient.png'; +import { getAllEvents, getOIEEvents } from '../../../components/EventsViewer/EventHelpers'; +import OIEEvent from '../OIEEventsComponents/Event/OIEEvent'; +import { useFetch } from '../../../hooks/useFetch'; + +function ManageEvents({expandedClass}){ + + const [events, setEvents] = useState([]); + const [pendingEvents, setPendingEvents] = useState([]); + + const fetchEvents = useFetch('/get-all-events'); + const fetchPendingEvents = useFetch('/oie/get-pending-events'); + const fetchRejectedEvents = useFetch('/oie/get-rejected-events'); + const fetchApprovedEvents = useFetch('/oie/get-approved-events'); + + useEffect(() => { + if(fetchEvents.data){ + const allEvents = fetchEvents.data.events; + //sort by dates + allEvents.sort((a, b) => { + return new Date(a.date) - new Date(b.date); + }); + allEvents.reverse(); + setEvents(allEvents); + } + if(fetchPendingEvents.data){ + const allEvents = fetchPendingEvents.data.events; + //sort by dates + allEvents.sort((a, b) => { + return new Date(a.date) - new Date(b.date); + }); + allEvents.reverse(); + setPendingEvents(allEvents); + } + }, [fetchEvents.data, fetchPendingEvents.data]); + + const refetch = () => { + fetchEvents.refetch(); + fetchPendingEvents.refetch(); + } + + return ( +
    +
    +
    +

    events pending approval

    +
    +
    + { + pendingEvents.map((event, index) => { + if(index < 5){ + return ( + + ) + } + }) + } +
    +
    +
    +
    +

    approved events

    +
    +
    + { + events.map((event, index) => { + if(index < 5){ + return ( + + ) + } + }) + } +
    +
    +
    + +
    +
    + ) +} + + +export default ManageEvents; \ No newline at end of file diff --git a/frontend/src/pages/OIEDash/ManageEvents/ManageEvents.scss b/frontend/src/pages/OIEDash/ManageEvents/ManageEvents.scss new file mode 100644 index 00000000..fa658a59 --- /dev/null +++ b/frontend/src/pages/OIEDash/ManageEvents/ManageEvents.scss @@ -0,0 +1,31 @@ +.manage-events{ + display: flex; + flex-direction: row; + justify-content: flex-start; + padding: 20px; + box-sizing: border-box; + width: 100%; + gap:10px; + .events-col{ + display: flex; + flex-direction:column; + align-items: center; + background-color: var(--offwhite); + padding:5px; + box-sizing: border-box; + max-height: calc(100vh - 50px); + border-radius: 10px; + border: 1px solid var(--lightborder); + + .header{ + h1{ + font-size:20px; + } + + } + .content{ + overflow-y: auto; + max-height:100%; + } + } +} \ No newline at end of file diff --git a/frontend/src/pages/OIEDash/OIEDash.jsx b/frontend/src/pages/OIEDash/OIEDash.jsx index ae2f903b..8955afd4 100644 --- a/frontend/src/pages/OIEDash/OIEDash.jsx +++ b/frontend/src/pages/OIEDash/OIEDash.jsx @@ -9,6 +9,7 @@ import Configuration from './Configuration/Configuration'; import {Icon} from '@iconify-icon/react'; import Dash from './Dash/Dash'; +import ManageEvents from './ManageEvents/ManageEvents'; import { set } from 'mongoose'; function OIEDash(){ @@ -79,6 +80,12 @@ function OIEDash(){

    Event Calendar

  • setCurrentDisplay(2)}> +
    + +
    +

    Events

    +
  • +
  • setCurrentDisplay(3)}>
    @@ -96,11 +103,17 @@ function OIEDash(){ } { (currentPage === 1 || currentDisplay === 1) && -
    Page 1
    +
    } { (currentPage === 2 || currentDisplay === 2) &&
    + +
    + } + { + (currentPage === 3 || currentDisplay === 3) && +
    } From 723c0b69614d1305c146ee664aca93df78e2a385 Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Thu, 21 Nov 2024 15:33:57 -0500 Subject: [PATCH 31/97] SCRUM-89 adding role-based auth --- backend/migrations/version1.10.py | 31 +++++++++++++++++++++++++++++++ backend/routes/authRoutes.js | 2 +- backend/schemas/user.js | 5 +++++ backend/services/userServices.js | 6 +++--- 4 files changed, 40 insertions(+), 4 deletions(-) create mode 100644 backend/migrations/version1.10.py diff --git a/backend/migrations/version1.10.py b/backend/migrations/version1.10.py new file mode 100644 index 00000000..7c202ecb --- /dev/null +++ b/backend/migrations/version1.10.py @@ -0,0 +1,31 @@ +from pymongo.mongo_client import MongoClient +from pymongo.server_api import ServerApi +import os +from dotenv import load_dotenv + +from helpers.datamigration import addNewField, updateVersion + + +# ============================== starter code ========================================== + +VERSION = 1.10 # set version here + +load_dotenv() +uri = os.environ.get('MONGO_URL_LOCAL') +database = input("Indicate which database you would like to update (d for development or p for production): ").strip() +if(database == "d"): + pass +elif (database == "p"): + sure = input("WARNING: This will effect a production database, type 'studycompass' to proceed: ").strip() + if(sure.lower() == 'studycompass'): + uri = os.environ.get('MONGO_URL') + else: + exit(1) +else: + print(f"Improper usage: invalid input {database}") + +# ===================================================================================== + +addNewField(uri, "users", {"roles" : ["user"]}) + +updateVersion(uri, VERSION) \ No newline at end of file diff --git a/backend/routes/authRoutes.js b/backend/routes/authRoutes.js index 8ed6a525..ec417e30 100644 --- a/backend/routes/authRoutes.js +++ b/backend/routes/authRoutes.js @@ -78,7 +78,7 @@ router.post('/register', async (req, res) => { await user.save(); // Generate a token for the new user - const token = jwt.sign({ userId: user._id }, process.env.JWT_SECRET, { expiresIn: '1h' }); + const token = jwt.sign({ userId: user._id, roles: user.roles }, process.env.JWT_SECRET, { expiresIn: '1h' }); console.log(`POST: /register new user ${username}`); sendDiscordMessage(`New user registered`, `user ${username} registered`, "newUser"); // Send the token to the client diff --git a/backend/schemas/user.js b/backend/schemas/user.js index b1eafb3d..01ccc10f 100644 --- a/backend/schemas/user.js +++ b/backend/schemas/user.js @@ -87,6 +87,11 @@ const userSchema = new mongoose.Schema({ type: Boolean, default: false, }, + roles: { + type: [String], + default: ['user'], + enum: ['user', 'admin', 'moderator', 'developer'], // Adjust roles as needed + }, // you can add more fields here if needed, like 'createdAt', 'updatedAt', etc. }, { diff --git a/backend/services/userServices.js b/backend/services/userServices.js index 2261f502..c365554b 100644 --- a/backend/services/userServices.js +++ b/backend/services/userServices.js @@ -52,7 +52,7 @@ async function registerUser({ username, email, password }) { }); await user.save(); - const token = jwt.sign({ userId: user._id }, process.env.JWT_SECRET, { expiresIn: '1h' }); + const token = jwt.sign({ userId: user._id, roles:user.roles }, process.env.JWT_SECRET, { expiresIn: '12h' }); return { user, token }; } @@ -77,7 +77,7 @@ async function loginUser({ email, password }) { throw new Error('Invalid credentials'); } delete user.password; - const token = jwt.sign({ userId: user._id }, process.env.JWT_SECRET, { expiresIn: '12h' }); + const token = jwt.sign({ userId: user._id, roles: user.roles }, process.env.JWT_SECRET, { expiresIn: '12h' }); return { user, token }; } @@ -124,7 +124,7 @@ async function authenticateWithGoogle(code, isRegister = false, url) { sendDiscordMessage(`New user registered`, `user ${user.username} registered`, "newUser"); } - const jwtToken = jwt.sign({ userId: user._id }, process.env.JWT_SECRET, { expiresIn: '12h' }); + const jwtToken = jwt.sign({ userId: user._id, roles: user.roles }, process.env.JWT_SECRET, { expiresIn: '12h' }); return { user, token: jwtToken }; } From 0f4ff2501e146b164331bbdcbc17852b7852af88 Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Thu, 21 Nov 2024 16:03:39 -0500 Subject: [PATCH 32/97] SCRUM-89 incorporating role based auth --- backend/middlewares/verifyToken.js | 20 ++++++++++++++----- backend/routes/authRoutes.js | 1 - backend/routes/classroomChangeRoutes.js | 6 +++--- backend/routes/eventRoutes.js | 18 ++++++++--------- backend/routes/oie-routes.js | 8 ++++---- backend/schemas/user.js | 2 +- .../src/components/Classroom/Classroom.jsx | 6 +++--- .../EditAttributes/EditAttributes.jsx | 2 +- .../ProfilePicture/ProfilePicture.jsx | 8 +++++++- frontend/src/pages/OIEDash/OIEDash.jsx | 2 +- 10 files changed, 44 insertions(+), 29 deletions(-) diff --git a/backend/middlewares/verifyToken.js b/backend/middlewares/verifyToken.js index 01f2db49..3d51cffc 100644 --- a/backend/middlewares/verifyToken.js +++ b/backend/middlewares/verifyToken.js @@ -6,13 +6,23 @@ const verifyToken = (req, res, next) => { if (token == null) return res.sendStatus(401); // if there's no token - jwt.verify(token, process.env.JWT_SECRET, (err, user) => { + jwt.verify(token, process.env.JWT_SECRET, (err, decodedToken) => { if (err) return res.sendStatus(403); // if the token is not valid - req.user = user; + req.user = decodedToken; next(); }); }; +function authorizeRoles(...allowedRoles) { + return (req, res, next) => { + const { roles } = req.user; + if (!roles || !allowedRoles.some(role => roles.includes(role))) { + return res.status(403).json({ message: 'Forbidden' }); + } + next(); + }; +} + const verifyTokenOptional = (req, res, next) => { const authHeader = req.headers['authorization']; const token = authHeader && authHeader.split(' ')[1]; // Bearer TOKEN @@ -22,13 +32,13 @@ const verifyTokenOptional = (req, res, next) => { return next(); } - jwt.verify(token, process.env.JWT_SECRET, (err, user) => { + jwt.verify(token, process.env.JWT_SECRET, (err, decodedToken) => { if (!err) { - req.user = user; // Set the user if the token is valid + req.user = decodedToken; // Set the user if the token is valid } // Proceed regardless of token validity next(); }); }; -module.exports = { verifyToken, verifyTokenOptional }; \ No newline at end of file +module.exports = { verifyToken, verifyTokenOptional, authorizeRoles }; \ No newline at end of file diff --git a/backend/routes/authRoutes.js b/backend/routes/authRoutes.js index ec417e30..5c91a010 100644 --- a/backend/routes/authRoutes.js +++ b/backend/routes/authRoutes.js @@ -148,7 +148,6 @@ router.get('/validate-token', verifyToken, async (req, res) => { // email: user.email, // name: user.name, // picture : user.picture, - // admin : user.admin, // saved: user.saved, // visited: user.visited, // partners: user.partners, diff --git a/backend/routes/classroomChangeRoutes.js b/backend/routes/classroomChangeRoutes.js index 55be5a40..c4b85f21 100644 --- a/backend/routes/classroomChangeRoutes.js +++ b/backend/routes/classroomChangeRoutes.js @@ -4,7 +4,7 @@ const Schedule = require('../schemas/schedule.js'); const Rating = require('../schemas/rating.js'); const User = require('../schemas/user.js'); const Report = require('../schemas/report.js'); -const { verifyToken, verifyTokenOptional } = require('../middlewares/verifyToken'); +const { verifyToken, authorizeRoles } = require('../middlewares/verifyToken'); const { sortByAvailability } = require('../helpers.js'); const multer = require('multer'); const path = require('path'); @@ -122,7 +122,7 @@ router.post('/upload-image/:classroomName', upload.single('image'), async (req, } }); -router.post('/main-search-change', verifyToken, async (req, res) => { +router.post('/main-search-change', verifyToken, authorizeRoles('admin'), async (req, res) => { const userId = req.user.userId; const classroomId = req.body.classroomId; try{ @@ -131,7 +131,7 @@ router.post('/main-search-change', verifyToken, async (req, res) => { console.log(`POST: /main-search-change/${userId} failed`); return res.status(404).json({ success: false, message: "User not found" }); } - if(!user.admin){ + if(!user.roles.includes('admin')) { console.log(`POST: /main-search-change/${userId} failed`); return res.status(403).json({ success: false, message: "User not authorized" }); } diff --git a/backend/routes/eventRoutes.js b/backend/routes/eventRoutes.js index 6fd1b597..588b7fc2 100644 --- a/backend/routes/eventRoutes.js +++ b/backend/routes/eventRoutes.js @@ -1,6 +1,6 @@ const express = require('express'); const router = express.Router(); -const { verifyToken, verifyTokenOptional } = require('../middlewares/verifyToken'); +const { verifyToken, verifyTokenOptional, authorizeRoles } = require('../middlewares/verifyToken'); const Event = require('../schemas/event'); const User = require('../schemas/user'); const Classroom = require('../schemas/classroom'); @@ -158,10 +158,10 @@ router.delete('/delete-event/:event_id', verifyToken, async (req, res) => { }); //get all oie-unapproved events -router.get('/oie/get-pending-events', verifyToken, async (req, res) => { +router.get('/oie/get-pending-events', verifyToken, authorizeRoles('oie'), async (req, res) => { try { const user = await User.findById(req.user.userId); - if (!user || !user.admin) { + if (!user) { return res.status(403).json({ success: false, message: 'You are not authorized to view this page.' @@ -183,10 +183,10 @@ router.get('/oie/get-pending-events', verifyToken, async (req, res) => { }); //get all oie-unapproved events -router.get('/oie/get-accepted-events', verifyToken, async (req, res) => { +router.get('/oie/get-accepted-events', verifyToken, authorizeRoles('oie'), async (req, res) => { try { const user = await User.findById(req.user.userId); - if (!user || !user.admin) { + if (!user ) { return res.status(403).json({ success: false, message: 'You are not authorized to view this page.' @@ -208,10 +208,10 @@ router.get('/oie/get-accepted-events', verifyToken, async (req, res) => { }); //get all oie-unapproved events -router.get('/oie/get-rejected-events', verifyToken, async (req, res) => { +router.get('/oie/get-rejected-events', verifyToken, authorizeRoles('oie'), async (req, res) => { try { const user = await User.findById(req.user.userId); - if (!user || !user.admin) { + if (!user) { return res.status(403).json({ success: false, message: 'You are not authorized to view this page.' @@ -246,7 +246,7 @@ router.get('/get-event/:event_id', verifyTokenOptional, async (req, res) => { }); } if (event.OIEStatus === 'Pending') { - if (!user || !user.admin){ + if (!user){ return res.status(403).json({ success: false, message: 'You are not authorized to view this page.' @@ -288,7 +288,7 @@ router.post('/approve-event', verifyToken, async (req, res) => { try { const user = await User.findById(user_id); - if(!user || !user.admin) { + if(!user) { return res.status(403).json({ success: false, message: 'You are not authorized to approve events.' diff --git a/backend/routes/oie-routes.js b/backend/routes/oie-routes.js index 1955c55c..3b410e59 100644 --- a/backend/routes/oie-routes.js +++ b/backend/routes/oie-routes.js @@ -1,11 +1,11 @@ const express = require('express'); const router = express.Router(); -const { verifyToken, verifyTokenOptional } = require('../middlewares/verifyToken'); +const { verifyToken, authorizeRoles } = require('../middlewares/verifyToken'); const OIEConfig = require('../schemas/OIEConfig'); const OIEStatus = require('../schemas/OIE'); const Event = require('../schemas/event'); -router.get('/config', verifyToken, async (req, res) => { +router.get('/config', verifyToken, authorizeRoles('oie'), async (req, res) => { try { const config = await OIEConfig.findOne({}); if (!config) { @@ -19,7 +19,7 @@ router.get('/config', verifyToken, async (req, res) => { } }); -router.post('/config', verifyToken, async (req, res) => { +router.post('/config', verifyToken, authorizeRoles('oie'), async (req, res) => { try { const config = await OIEConfig.findOne({}); if (config) { @@ -38,7 +38,7 @@ router.post('/config', verifyToken, async (req, res) => { } }); -router.post('/oie-status', verifyToken, async (req, res) => { +router.post('/oie-status', verifyToken, authorizeRoles('oie'), async (req, res) => { try { const { eventRef, status, checkListItems } = req.body; const oieStatus = await OIEStatus.findOne({ eventRef }); diff --git a/backend/schemas/user.js b/backend/schemas/user.js index 01ccc10f..c202692f 100644 --- a/backend/schemas/user.js +++ b/backend/schemas/user.js @@ -90,7 +90,7 @@ const userSchema = new mongoose.Schema({ roles: { type: [String], default: ['user'], - enum: ['user', 'admin', 'moderator', 'developer'], // Adjust roles as needed + enum: ['user', 'admin', 'moderator', 'developer', 'oie'], // Adjust roles as needed }, // you can add more fields here if needed, like 'createdAt', 'updatedAt', etc. diff --git a/frontend/src/components/Classroom/Classroom.jsx b/frontend/src/components/Classroom/Classroom.jsx index 352f3937..726d88c0 100644 --- a/frontend/src/components/Classroom/Classroom.jsx +++ b/frontend/src/components/Classroom/Classroom.jsx @@ -357,11 +357,11 @@ function Classroom({ room, state, setState, schedule, roomName, width, setShowMo
  • ); })} - {user && user.admin ?
    { setEdit(!edit) }}>
    : ""} + {user && user.roles.includes("admin") ?
    { setEdit(!edit) }}>
    : ""}
    {userRating && } { - defaultImage && (!isAuthenticating) && isAuthenticated && user.admin ? : "" + defaultImage && (!isAuthenticating) && isAuthenticated && user.roles.includes('admin') ? : "" }
    @@ -390,7 +390,7 @@ function Classroom({ room, state, setState, schedule, roomName, width, setShowMo
    - {user && user.admin ? room ? edit ? : "" : "" : ""} + {user && user.roles.includes('admin') ? room ? edit ? : "" : "" : ""}
    diff --git a/frontend/src/components/Classroom/EditAttributes/EditAttributes.jsx b/frontend/src/components/Classroom/EditAttributes/EditAttributes.jsx index 888c9d2b..50227226 100644 --- a/frontend/src/components/Classroom/EditAttributes/EditAttributes.jsx +++ b/frontend/src/components/Classroom/EditAttributes/EditAttributes.jsx @@ -83,7 +83,7 @@ function EditAttributes({room, attributes, setEdit}){ {attribute in attributeIcons ? {attribute}: ""} {attribute}
    - {user && user.admin && delete { + {user && user.roles.includes('admin') && delete { const newAttributes = attributesAdmin.filter((item) => item !== attribute); console.log(newAttributes); setAttributes(newAttributes); diff --git a/frontend/src/components/ProfilePicture/ProfilePicture.jsx b/frontend/src/components/ProfilePicture/ProfilePicture.jsx index f2480584..972874d8 100644 --- a/frontend/src/components/ProfilePicture/ProfilePicture.jsx +++ b/frontend/src/components/ProfilePicture/ProfilePicture.jsx @@ -75,7 +75,7 @@ function ProfilePicture(){
    { - user && user.admin && + user && user.roles.includes('admin') && <>
    @@ -85,6 +85,12 @@ function ProfilePicture(){

    Admin

    + + } + { + user && user.roles.includes('oie') && + <> +
    log out diff --git a/frontend/src/pages/OIEDash/OIEDash.jsx b/frontend/src/pages/OIEDash/OIEDash.jsx index 8955afd4..c2d1efe0 100644 --- a/frontend/src/pages/OIEDash/OIEDash.jsx +++ b/frontend/src/pages/OIEDash/OIEDash.jsx @@ -32,7 +32,7 @@ function OIEDash(){ if(!user){ return; } else { - if(!user.admin){ + if(!user.roles.includes('oie')){ navigate('/'); } setUserInfo(user); From 770044bd68ae4dc503319236e499355ab40fc3ff Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Sun, 17 Nov 2024 13:28:09 -0500 Subject: [PATCH 33/97] SCRUM-54 adding new analytics --- backend/routes/analytics.js | 211 ++++++++++++++++++ .../src/components/Analytics/Analytics.jsx | 2 + 2 files changed, 213 insertions(+) diff --git a/backend/routes/analytics.js b/backend/routes/analytics.js index 152287a0..3f713128 100644 --- a/backend/routes/analytics.js +++ b/backend/routes/analytics.js @@ -2,6 +2,7 @@ const express = require('express'); const router = express.Router(); const { isValid, formatISO, parseISO, setHours, startOfWeek, endOfWeek, setMinutes, setSeconds, setMilliseconds, eachHourOfInterval, eachDayOfInterval } = require('date-fns'); const Visit = require('../schemas/visit'); +const Search = require('../schemas/search') const User = require('../schemas/user'); const QR = require('../schemas/qr'); const RepeatedVisit = require('../schemas/repeatedVisit'); @@ -484,5 +485,215 @@ router.post('/qr', async (req, res) => { } }); +router.get('/searches-by-day', async (req, res) => { + try { + const { startDate, endDate } = req.query; + + // Validate the dates + if (!startDate || !isValid(parseISO(startDate))) { + return res.status(400).json({ error: 'Invalid startDate' }); + } + + const parsedStartDate = parseISO(startDate); + const parsedEndDate = endDate && isValid(parseISO(endDate)) ? parseISO(endDate) : new Date(); + + const startOfWeekDate = startOfWeek(parsedStartDate, { weekStartsOn: 0 }); // 1 = Monday + const endOfWeekDate = endOfWeek(parsedStartDate, { weekStartsOn: 0 }); //print for debugging + + + // Query visits within the week range and group by day + const visitsByDay = await Search.aggregate([ + { + $match: { + timestamp: { + $gte: startOfWeekDate, + $lt: endOfWeekDate + } + } + }, + { + $group: { + _id: { + year: { $year: "$timestamp" }, + month: { $month: "$timestamp" }, + day: { $dayOfMonth: "$timestamp" } + }, + count: { $sum: 1 } + } + }, + { + $sort: { "_id.year": 1, "_id.month": 1, "_id.day": 1 } + } + ]); + + // Generate an array with all days within the week range + const daysInRange = eachDayOfInterval({ + start: startOfWeekDate, + end: endOfWeekDate, + }); + + // Format and pad the result + const formattedResult = daysInRange.map((day) => { + const formattedDate = formatISO(day, { representation: 'date' }); + + // Find the matching day in the database result + const visitForDay = visitsByDay.find(item => + item._id.year === day.getFullYear() && + item._id.month === day.getMonth() + 1 && + item._id.day === day.getDate() + ); + + // Return either the actual count or 0 if there was no visit for this day + return { + date: formattedDate, + count: visitForDay ? visitForDay.count : 0 + }; + }); + + res.json(formattedResult); + } catch (err) { + console.error(err); + res.status(500).json({ error: 'An error occurred while fetching visits by day' }); + } +}); + +// `/visits-by-hour` route: Fetches visits grouped by hour within the specified range and pads missing hours with 0 visits +router.get('/searches-by-hour', async (req, res) => { + try { + const { startDate } = req.query; + + // Validate the startDate + if (!startDate || !isValid(parseISO(startDate))) { + return res.status(400).json({ error: 'Invalid startDate' }); + } + + const parsedDate = parseISO(startDate); + + // Define the start and end of the day explicitly using setHours, setMinutes, etc. + const startOfDay = setMilliseconds(setSeconds(setMinutes(setHours(parsedDate, 0), 0), 0), 0); // 00:00 of the given day + const endOfDay = setMilliseconds(setSeconds(setMinutes(setHours(parsedDate, 23), 59), 59), 999); // 23:59:59.999 of the same day + // Query visits within the day range and group by hour + const visitsByHour = await Search.aggregate([ + { + $match: { + timestamp: { + $gte: startOfDay, + $lte: endOfDay + } + } + }, + { + $group: { + _id: { + year: { $year: "$timestamp" }, + month: { $month: "$timestamp" }, + day: { $dayOfMonth: "$timestamp" }, + hour: { $hour: "$timestamp" } + }, + count: { $sum: 1 } + } + }, + { + $sort: { + "_id.year": 1, "_id.month": 1, "_id.day": 1, "_id.hour": 1 + } + } + ]); + + // Generate an array with all hours from 00:00 to 23:00 + const hoursInRange = eachHourOfInterval({ + start: startOfDay, + end: endOfDay + }); + + // Format and pad the result + const formattedResult = hoursInRange.map((hour) => { + const formattedHour = `${hour.getFullYear()}-${String(hour.getMonth() + 1).padStart(2, '0')}-${String(hour.getDate()).padStart(2, '0')} ${String(hour.getHours()).padStart(2, '0')}:00`; + + // Find the matching hour in the database result + const visitForHour = visitsByHour.find(item => + item._id.year === hour.getFullYear() && + item._id.month === hour.getMonth() + 1 && + item._id.day === hour.getDate() && + item._id.hour === hour.getHours() + ); + + // Return either the actual count or 0 if there was no visit for this hour + return { + hour: formattedHour, + count: visitForHour ? visitForHour.count : 0 + }; + }); + + res.json(formattedResult); + } catch (err) { + console.error(err); + res.status(500).json({ error: 'An error occurred while fetching visits by hour' }); + } +}); + + +router.get('/searches-by-all', async (req, res) => { + try { + // Query to get the earliest and latest visit dates for padding the result + const firstVisit = await Visit.findOne().sort({ timestamp: 1 }); + const lastVisit = await Visit.findOne().sort({ timestamp: -1 }); + + if (!firstVisit || !lastVisit) { + return res.json([]); // No visits in the database + } + + // Get the date range (from the first to the last visit) + const startDate = new Date(firstVisit.timestamp); + const endDate = new Date(lastVisit.timestamp); + + // Query to get all visits within the range, grouped by day + const visitsByAll = await Search.aggregate([ + { + $group: { + _id: { + year: { $year: "$timestamp" }, + month: { $month: "$timestamp" }, + day: { $dayOfMonth: "$timestamp" } + }, + count: { $sum: 1 } + } + }, + { + $sort: { "_id.year": 1, "_id.month": 1, "_id.day": 1 } + } + ]); + + // Generate an array with all days in the date range + const daysInRange = eachDayOfInterval({ + start: startDate, + end: endDate, + }); + + // Format and pad the result + const formattedResult = daysInRange.map((day) => { + const formattedDate = formatISO(day, { representation: 'date' }); + + // Find the matching day in the database result + const visitForDay = visitsByAll.find(item => + item._id.year === day.getFullYear() && + item._id.month === day.getMonth() + 1 && + item._id.day === day.getDate() + ); + + // Return either the actual count or 0 if there was no visit for this day + return { + date: formattedDate, + count: visitForDay ? visitForDay.count : 0 + }; + }); + + res.json(formattedResult); + } catch (err) { + console.error(err); + res.status(500).json({ error: 'An error occurred while fetching all-time visits' }); + } +}); + module.exports = router; diff --git a/frontend/src/components/Analytics/Analytics.jsx b/frontend/src/components/Analytics/Analytics.jsx index 40c39d07..c140fd72 100644 --- a/frontend/src/components/Analytics/Analytics.jsx +++ b/frontend/src/components/Analytics/Analytics.jsx @@ -26,6 +26,8 @@ function Analytics() {
    + +
    ); } From 6aabe391e1c40380fcfbf9022aacaaac86126c54 Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Sun, 17 Nov 2024 13:40:20 -0500 Subject: [PATCH 34/97] SCRUM-54 editing anayltics a little bit + login changes --- backend/routes/analytics.js | 1 + frontend/src/App.js | 5 +++++ frontend/src/pages/Login.scss | 1 + 3 files changed, 7 insertions(+) diff --git a/backend/routes/analytics.js b/backend/routes/analytics.js index 3f713128..79f4075c 100644 --- a/backend/routes/analytics.js +++ b/backend/routes/analytics.js @@ -28,6 +28,7 @@ router.post('/log-repeated-visit', verifyTokenOptional, async (req, res) => { if(!repeatedVisit){ repeatedVisit = new RepeatedVisit({ visits: [new Date()], hash: hash, user_id: req.user ? req.user._id : null }); } + repeatedVisit.user_id = req.user ? req.user.userId : null; repeatedVisit.visits.push(new Date()); await repeatedVisit.save(); console.log('Repeated visit logged'); diff --git a/frontend/src/App.js b/frontend/src/App.js index ae6a3857..890e2357 100644 --- a/frontend/src/App.js +++ b/frontend/src/App.js @@ -66,6 +66,11 @@ function App() { timestamp = new Date().toISOString(); localStorage.setItem('timestamp', timestamp); } + + //log how many minutes it has been since last visit + console.log("minutes since last visit: ", (new Date().getTime() - new Date(timestamp).getTime()) / 1000 / 60); + + //if 20 minutes from last timestamp if (new Date().getTime() - new Date(timestamp).getTime() > 20 * 60 * 1000) { //send to backend diff --git a/frontend/src/pages/Login.scss b/frontend/src/pages/Login.scss index f25b9370..71848d46 100644 --- a/frontend/src/pages/Login.scss +++ b/frontend/src/pages/Login.scss @@ -44,6 +44,7 @@ .main-login{ .login-container{ width:100%; + padding: 0 30px; } width:100%; padding:0; From ce4f7941d9aa59e49972b9bd826e451f7f55b044 Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Sat, 16 Nov 2024 17:52:27 -0500 Subject: [PATCH 35/97] refining anayltics --- backend/routes/analytics.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/backend/routes/analytics.js b/backend/routes/analytics.js index 79f4075c..df50b974 100644 --- a/backend/routes/analytics.js +++ b/backend/routes/analytics.js @@ -26,10 +26,13 @@ router.post('/log-repeated-visit', verifyTokenOptional, async (req, res) => { console.log('Logging repeated visit'); let repeatedVisit = await RepeatedVisit.findOne({hash: hash}); if(!repeatedVisit){ - repeatedVisit = new RepeatedVisit({ visits: [new Date()], hash: hash, user_id: req.user ? req.user._id : null }); + repeatedVisit = new RepeatedVisit({ visits: [new Date()], hash: hash, user_id: req.user ? req.user.userId : null }); } repeatedVisit.user_id = req.user ? req.user.userId : null; repeatedVisit.visits.push(new Date()); + if(req.user && req.user.userId){ + repeatedVisit.user_id = req.user.userId; + } await repeatedVisit.save(); console.log('Repeated visit logged'); res.status(200).json({ message: 'Visit logged' }); From 4f5627ad7bd5672c7fd1bbae3a5756b3f345c7ad Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Thu, 21 Nov 2024 17:01:06 -0500 Subject: [PATCH 36/97] SCRUM-146 finished simlified events view --- backend/routes/eventRoutes.js | 14 +++--- .../EventsGrid/EventsColumn/Event/Event.scss | 2 - frontend/src/components/Header/Header.jsx | 2 +- .../src/pages/CreateEvent/CreateEvent.jsx | 19 +++++++ frontend/src/pages/Events/Events.jsx | 18 +++++++ .../OIEDash/Configuration/Configuration.scss | 6 +-- frontend/src/pages/OIEDash/Dash/Dash.jsx | 4 +- .../OIEDash/ManageEvents/ManageEvents.jsx | 49 ++++++++++++++++--- .../OIEDash/ManageEvents/ManageEvents.scss | 1 + .../OIEEventsComponents/Event/OIEEvent.jsx | 6 +-- 10 files changed, 96 insertions(+), 25 deletions(-) diff --git a/backend/routes/eventRoutes.js b/backend/routes/eventRoutes.js index 588b7fc2..01bbc2f6 100644 --- a/backend/routes/eventRoutes.js +++ b/backend/routes/eventRoutes.js @@ -183,7 +183,7 @@ router.get('/oie/get-pending-events', verifyToken, authorizeRoles('oie'), async }); //get all oie-unapproved events -router.get('/oie/get-accepted-events', verifyToken, authorizeRoles('oie'), async (req, res) => { +router.get('/oie/get-approved-events', verifyToken, authorizeRoles('oie'), async (req, res) => { try { const user = await User.findById(req.user.userId); if (!user ) { @@ -192,14 +192,14 @@ router.get('/oie/get-accepted-events', verifyToken, authorizeRoles('oie'), async message: 'You are not authorized to view this page.' }); } - const events = await Event.find({ OIEStatus: 'approved' }).populate('classroom_id').populate('hostingId'); - console.log('GET: /oie/get-pending-events successful'); + const events = await Event.find({ OIEStatus: 'Approved' }).populate('classroom_id').populate('hostingId'); + console.log('GET: /oie/get-approved-events successful'); res.status(200).json({ success: true, events }); } catch (error) { - console.log('GET: /oie/get-pending-events failed', error); + console.log('GET: /oie/get-approved-events failed', error); res.status(500).json({ success: false, message: error.message @@ -218,13 +218,13 @@ router.get('/oie/get-rejected-events', verifyToken, authorizeRoles('oie'), async }); } const events = await Event.find({ OIEStatus: 'Rejected' }).populate('classroom_id').populate('hostingId'); - console.log('GET: /oie/get-pending-events successful'); + console.log('GET: /oie/get-rejected-events successful'); res.status(200).json({ success: true, events }); } catch (error) { - console.log('GET: /oie/get-pending-events failed', error); + console.log('GET: /oie/get-rejected-events failed', error); res.status(500).json({ success: false, message: error.message @@ -245,7 +245,7 @@ router.get('/get-event/:event_id', verifyTokenOptional, async (req, res) => { message: 'Event not found.' }); } - if (event.OIEStatus === 'Pending') { + if (event.OIEStatus !== 'Not Applicable') { if (!user){ return res.status(403).json({ success: false, diff --git a/frontend/src/components/EventsViewer/EventsGrid/EventsColumn/Event/Event.scss b/frontend/src/components/EventsViewer/EventsGrid/EventsColumn/Event/Event.scss index 2f100737..bb90c0ff 100644 --- a/frontend/src/components/EventsViewer/EventsGrid/EventsColumn/Event/Event.scss +++ b/frontend/src/components/EventsViewer/EventsGrid/EventsColumn/Event/Event.scss @@ -14,8 +14,6 @@ font-size: 16px; color: var(--text); } - - img{ width:calc(100%); border-radius: 5px; diff --git a/frontend/src/components/Header/Header.jsx b/frontend/src/components/Header/Header.jsx index dae6351d..36080b9f 100644 --- a/frontend/src/components/Header/Header.jsx +++ b/frontend/src/components/Header/Header.jsx @@ -65,7 +65,7 @@ const Header = React.memo(()=>{
    diff --git a/frontend/src/pages/CreateEvent/CreateEvent.jsx b/frontend/src/pages/CreateEvent/CreateEvent.jsx index 9a1194c1..2b7c17b2 100644 --- a/frontend/src/pages/CreateEvent/CreateEvent.jsx +++ b/frontend/src/pages/CreateEvent/CreateEvent.jsx @@ -9,11 +9,30 @@ import GenInfo from '../../components/CreateEvent/GenInfo/GenInfo'; import Review from '../../components/CreateEvent/Review/Review'; import { useNotification } from '../../NotificationContext'; import { createEvent } from './CreateEventHelpers'; +import { useNavigate } from 'react-router-dom'; +import useAuth from '../../hooks/useAuth'; function CreateEvent(){ const [step, setStep] = useState(0); const [info, setInfo] = useState({}); const [finishedStep, setFinishedStep] = useState(0); + const {isAuthenticated, isAuthenticating, user} = useAuth(); + const { navigate } = useNavigate(); + + useEffect(()=>{ + if(isAuthenticating){ + return; + } + if(!isAuthenticated){ + navigate('/'); + } + if(!user){ + return; + } + if(!(user.roles.includes('oie') || user.roles.includes('admin') || user.roles.includes('developer'))){ + navigate('/'); + } + }, [isAuthenticating, isAuthenticated, user]); const {addNotification} = useNotification(); diff --git a/frontend/src/pages/Events/Events.jsx b/frontend/src/pages/Events/Events.jsx index 05917204..1b3a0a4d 100644 --- a/frontend/src/pages/Events/Events.jsx +++ b/frontend/src/pages/Events/Events.jsx @@ -18,6 +18,24 @@ function Events(){ const [tlLoaded, setTlLoaded] = useState(false); const [brLoaded, setBrLoaded] = useState(false); + const { isAuthenticated, isAuthenticating, user } = useAuth(); + const navigate = useNavigate(); + + useEffect(() => { + if(isAuthenticating){ + return; + } + if(!isAuthenticated){ + navigate('/'); + } + if(!user){ + return; + } + if(!(user.roles.includes('oie') || user.roles.includes('admin') || user.roles.includes('developer'))){ + navigate('/'); + } + }, [isAuthenticating, isAuthenticated, user]); + const onBannerElementLoad = (e) => { if(e.target.className === "tl"){ setTlLoaded(true); diff --git a/frontend/src/pages/OIEDash/Configuration/Configuration.scss b/frontend/src/pages/OIEDash/Configuration/Configuration.scss index 412f879c..fa7492ac 100644 --- a/frontend/src/pages/OIEDash/Configuration/Configuration.scss +++ b/frontend/src/pages/OIEDash/Configuration/Configuration.scss @@ -46,7 +46,6 @@ flex-grow:1; overflow-x:hidden; overflow-y: auto; - .check-item{ width:100%; @@ -58,10 +57,9 @@ border-radius: 10px; flex-direction: column; background-color: var(--background); - opacity: 0; - transform:translateX(-100%); justify-content: center; - animation: fromLeft 0.3s forwards cubic-bezier(0.075, 0.82, 0.165, 1), fadeIn 0.3s forwards; + opacity: 0; + animation: fadeIn 0.5s forwards; .row{ justify-content: space-between; .col{ diff --git a/frontend/src/pages/OIEDash/Dash/Dash.jsx b/frontend/src/pages/OIEDash/Dash/Dash.jsx index 12f596c5..546c3ad5 100644 --- a/frontend/src/pages/OIEDash/Dash/Dash.jsx +++ b/frontend/src/pages/OIEDash/Dash/Dash.jsx @@ -52,7 +52,7 @@ function Dash({expandedClass}){ pendingEvents.map((event, index) => { if(index < 5){ return ( - + ) } }) @@ -66,7 +66,7 @@ function Dash({expandedClass}){ events.map((event, index) => { if(index < 5){ return ( - + ) } }) diff --git a/frontend/src/pages/OIEDash/ManageEvents/ManageEvents.jsx b/frontend/src/pages/OIEDash/ManageEvents/ManageEvents.jsx index d371f869..21f472a9 100644 --- a/frontend/src/pages/OIEDash/ManageEvents/ManageEvents.jsx +++ b/frontend/src/pages/OIEDash/ManageEvents/ManageEvents.jsx @@ -9,6 +9,8 @@ function ManageEvents({expandedClass}){ const [events, setEvents] = useState([]); const [pendingEvents, setPendingEvents] = useState([]); + const [approvedEvents, setApprovedEvents] = useState([]); + const [rejectedEvents, setRejectedEvents] = useState([]); const fetchEvents = useFetch('/get-all-events'); const fetchPendingEvents = useFetch('/oie/get-pending-events'); @@ -36,6 +38,30 @@ function ManageEvents({expandedClass}){ } }, [fetchEvents.data, fetchPendingEvents.data]); + useEffect(() => { + if(fetchRejectedEvents.data){ + const allEvents = fetchRejectedEvents.data.events; + console.log(allEvents); + //sort by dates + allEvents.sort((a, b) => { + return new Date(a.date) - new Date(b.date); + } + ); + allEvents.reverse(); + setRejectedEvents(allEvents); + } + if(fetchApprovedEvents.data){ + const allEvents = fetchApprovedEvents.data.events; + //sort by dates + allEvents.sort((a, b) => { + return new Date(a.date) - new Date(b.date); + } + ); + allEvents.reverse(); + setApprovedEvents(allEvents); + } + }, [fetchRejectedEvents.data, fetchApprovedEvents.data]); + const refetch = () => { fetchEvents.refetch(); fetchPendingEvents.refetch(); @@ -52,7 +78,7 @@ function ManageEvents({expandedClass}){ pendingEvents.map((event, index) => { if(index < 5){ return ( - + ) } }) @@ -65,19 +91,30 @@ function ManageEvents({expandedClass}){
    { - events.map((event, index) => { + approvedEvents.map((event, index) => { + return ( + + ) + }) + } +
    +
    +
    +
    +

    rejected events

    +
    +
    + { + rejectedEvents.map((event, index) => { if(index < 5){ return ( - + ) } }) }
    -
    - -
    ) } diff --git a/frontend/src/pages/OIEDash/ManageEvents/ManageEvents.scss b/frontend/src/pages/OIEDash/ManageEvents/ManageEvents.scss index fa658a59..2c30078b 100644 --- a/frontend/src/pages/OIEDash/ManageEvents/ManageEvents.scss +++ b/frontend/src/pages/OIEDash/ManageEvents/ManageEvents.scss @@ -16,6 +16,7 @@ max-height: calc(100vh - 50px); border-radius: 10px; border: 1px solid var(--lightborder); + min-width:260px; .header{ h1{ diff --git a/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.jsx b/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.jsx index ccf98f77..0c66d1cf 100644 --- a/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.jsx +++ b/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.jsx @@ -8,7 +8,7 @@ import FullEvent from '../../../../components/EventsViewer/EventsGrid/EventsColu import defaultAvatar from '../../../../assets/defaultAvatar.svg'; -function OIEEvent({event, showStatus=false, refetch}){ +function OIEEvent({event, showStatus=false, refetch, showOIE=false}){ const [popupOpen, setPopupOpen] = useState(false); const [edited, setEdited] = useState(false); const navigate = useNavigate(); @@ -35,10 +35,10 @@ function OIEEvent({event, showStatus=false, refetch}){ return(
    - {event.OIEStatus === "Pending" ? + {showOIE && !(event.OIEStatus === "Not Applicable") ? : - + }
    From 47328f0e9b925b949ac4dd4e26915a0b40d1c1d8 Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Fri, 22 Nov 2024 13:45:04 -0500 Subject: [PATCH 37/97] SCRUM-146 adding loading --- frontend/src/App.css | 2 +- .../OIEDash/ManageEvents/ManageEvents.jsx | 31 ++++++++++---- .../OIEDash/ManageEvents/ManageEvents.scss | 42 ++++++++++++++++++- frontend/src/pages/OIEDash/OIEDash.jsx | 5 +-- .../OIEEventsComponents/Event/OIEEvent.jsx | 4 +- .../OIEEventsComponents/Event/OIEEvent.scss | 2 + 6 files changed, 70 insertions(+), 16 deletions(-) diff --git a/frontend/src/App.css b/frontend/src/App.css index 83615761..b07dad62 100644 --- a/frontend/src/App.css +++ b/frontend/src/App.css @@ -143,7 +143,7 @@ a:hover{ .shimmer { animation: shimmering 2s linear infinite; background: var(--dark); - background: linear-gradient(90deg, var(--dark) 9%, var(--light) 18%, var(--dark) 31%); + background: linear-gradient(90deg, var(--lightborder) 9%, var(--light) 18%, var(--lightborder) 31%); background-size: 1300px 100%; opacity: 0.8; } diff --git a/frontend/src/pages/OIEDash/ManageEvents/ManageEvents.jsx b/frontend/src/pages/OIEDash/ManageEvents/ManageEvents.jsx index 21f472a9..dc245834 100644 --- a/frontend/src/pages/OIEDash/ManageEvents/ManageEvents.jsx +++ b/frontend/src/pages/OIEDash/ManageEvents/ManageEvents.jsx @@ -65,10 +65,15 @@ function ManageEvents({expandedClass}){ const refetch = () => { fetchEvents.refetch(); fetchPendingEvents.refetch(); + fetchRejectedEvents.refetch(); + fetchApprovedEvents.refetch(); } return (
    +
    +

    Event Board

    +

    events pending approval

    @@ -78,11 +83,15 @@ function ManageEvents({expandedClass}){ pendingEvents.map((event, index) => { if(index < 5){ return ( - + ) } }) } + { + pendingEvents.length === 0 &&
    +
    + }
    @@ -93,26 +102,32 @@ function ManageEvents({expandedClass}){ { approvedEvents.map((event, index) => { return ( - + ) }) } + { + approvedEvents.length === 0 &&
    +
    + }

    rejected events

    -
    +
    { rejectedEvents.map((event, index) => { - if(index < 5){ - return ( - - ) - } + return ( + + ) }) } + { + rejectedEvents.length === 0 &&
    +
    + }
    diff --git a/frontend/src/pages/OIEDash/ManageEvents/ManageEvents.scss b/frontend/src/pages/OIEDash/ManageEvents/ManageEvents.scss index 2c30078b..412eb764 100644 --- a/frontend/src/pages/OIEDash/ManageEvents/ManageEvents.scss +++ b/frontend/src/pages/OIEDash/ManageEvents/ManageEvents.scss @@ -3,9 +3,23 @@ flex-direction: row; justify-content: flex-start; padding: 20px; + padding-bottom:10px; box-sizing: border-box; width: 100%; gap:10px; + overflow-x: auto; + + &::-webkit-scrollbar { + height: 10px; + } + &::-webkit-scrollbar-thumb { + height:10px; + } + + .panel{ + min-width:220px; + } + .events-col{ display: flex; flex-direction:column; @@ -13,11 +27,19 @@ background-color: var(--offwhite); padding:5px; box-sizing: border-box; - max-height: calc(100vh - 50px); + max-height: calc(100vh - 65px); + height: calc(100vh - 65px); border-radius: 10px; border: 1px solid var(--lightborder); - min-width:260px; + + + &::-webkit-scrollbar { + width: 8px; + } + &::-webkit-scrollbar-thumb { + width: 8px; + } .header{ h1{ font-size:20px; @@ -27,6 +49,22 @@ .content{ overflow-y: auto; max-height:100%; + gap:5px; + display:flex; + flex-direction: column; + &::-webkit-scrollbar { + width: 5px; + } + &::-webkit-scrollbar-thumb { + width: 5px; + border-radius: 5px; + } + + .no-events{ + width:250px; + height:130px; + border-radius: 10px; + } } } } \ No newline at end of file diff --git a/frontend/src/pages/OIEDash/OIEDash.jsx b/frontend/src/pages/OIEDash/OIEDash.jsx index c2d1efe0..a22f44bf 100644 --- a/frontend/src/pages/OIEDash/OIEDash.jsx +++ b/frontend/src/pages/OIEDash/OIEDash.jsx @@ -57,7 +57,6 @@ function OIEDash(){ useEffect(() => { setCurrentPage(currentPage); - }, [currentDisplay]); return ( @@ -81,9 +80,9 @@ function OIEDash(){
  • setCurrentDisplay(2)}>
    - +
    -

    Events

    +

    Events Board

  • setCurrentDisplay(3)}>
    diff --git a/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.jsx b/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.jsx index 0c66d1cf..bdd0ce27 100644 --- a/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.jsx +++ b/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.jsx @@ -8,7 +8,7 @@ import FullEvent from '../../../../components/EventsViewer/EventsGrid/EventsColu import defaultAvatar from '../../../../assets/defaultAvatar.svg'; -function OIEEvent({event, showStatus=false, refetch, showOIE=false}){ +function OIEEvent({event, showStatus=false, refetch, showOIE=false, index}){ const [popupOpen, setPopupOpen] = useState(false); const [edited, setEdited] = useState(false); const navigate = useNavigate(); @@ -33,7 +33,7 @@ function OIEEvent({event, showStatus=false, refetch, showOIE=false}){ } return( -
    +
    {showOIE && !(event.OIEStatus === "Not Applicable") ? diff --git a/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.scss b/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.scss index bf015c24..f92409cd 100644 --- a/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.scss +++ b/frontend/src/pages/OIEDash/OIEEventsComponents/Event/OIEEvent.scss @@ -11,6 +11,8 @@ border-radius: 10px; border: 1px solid var(--lightborder); justify-content: space-between; + animation: fadeIn 0.5s forwards; + opacity: 0; img{ width:calc(100%); From a00838c597b8ca61e046aaca90d5113911d888ab Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Mon, 25 Nov 2024 21:35:58 -0800 Subject: [PATCH 38/97] SCRUM-54 enforcing https --- backend/app.js | 2 ++ backend/package-lock.json | 7 +++++++ backend/package.json | 1 + 3 files changed, 10 insertions(+) diff --git a/backend/app.js b/backend/app.js index 76d959fb..697c3aa1 100644 --- a/backend/app.js +++ b/backend/app.js @@ -7,6 +7,7 @@ const multer = require('multer'); require('dotenv').config(); const { createServer } = require('http'); const { Server } = require('socket.io'); +const enforce = require('express-sslify'); const app = express(); const port = process.env.PORT || 5001; @@ -25,6 +26,7 @@ const io = new Server(server, { }); if (process.env.NODE_ENV === 'production') { + app.use(enforce.HTTPS({ trustProtoHeader: true })); const corsOptions = { origin: ['https://www.study-compass.com', 'https://studycompass.com'], optionsSuccessStatus: 200 // for legacy browser support diff --git a/backend/package-lock.json b/backend/package-lock.json index 4f3747c7..9bb27617 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -18,6 +18,7 @@ "date-fns": "^4.1.0", "dotenv": "^16.3.2", "express": "^4.18.2", + "express-sslify": "^1.2.0", "google-auth-library": "^9.4.2", "googleapis": "^131.0.0", "jsonwebtoken": "^9.0.2", @@ -892,6 +893,12 @@ "node": ">= 0.10.0" } }, + "node_modules/express-sslify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/express-sslify/-/express-sslify-1.2.0.tgz", + "integrity": "sha512-OOf2B3MxAVjEXPPWl4Z19wA2oMH+RCULJVhejPwuhiDDClr9QczZz5ycABLSnnN+oY8JcLs32ghs9cxOj0vi+w==", + "license": "MIT" + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", diff --git a/backend/package.json b/backend/package.json index d5e1770d..07f614d6 100644 --- a/backend/package.json +++ b/backend/package.json @@ -9,6 +9,7 @@ "date-fns": "^4.1.0", "dotenv": "^16.3.2", "express": "^4.18.2", + "express-sslify": "^1.2.0", "google-auth-library": "^9.4.2", "googleapis": "^131.0.0", "jsonwebtoken": "^9.0.2", From 09b3494ed902f03ae47936bd2d33108a099277a9 Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Sat, 30 Nov 2024 17:51:55 -0800 Subject: [PATCH 39/97] SCRUM-144 Events Calendar Setup --- .../OIEDash/EventsCalendar/EventsCalendar.jsx | 34 ++++++++++++++++ .../EventsCalendar/EventsCalendar.scss | 24 +++++++++++ .../OIEDash/EventsCalendar/Month/Month.jsx | 40 +++++++++++++++++++ .../OIEDash/EventsCalendar/Month/Month.scss | 7 ++++ frontend/src/pages/OIEDash/OIEDash.jsx | 18 +++++++-- 5 files changed, 120 insertions(+), 3 deletions(-) create mode 100644 frontend/src/pages/OIEDash/EventsCalendar/EventsCalendar.jsx create mode 100644 frontend/src/pages/OIEDash/EventsCalendar/EventsCalendar.scss create mode 100644 frontend/src/pages/OIEDash/EventsCalendar/Month/Month.jsx create mode 100644 frontend/src/pages/OIEDash/EventsCalendar/Month/Month.scss diff --git a/frontend/src/pages/OIEDash/EventsCalendar/EventsCalendar.jsx b/frontend/src/pages/OIEDash/EventsCalendar/EventsCalendar.jsx new file mode 100644 index 00000000..806b3fc7 --- /dev/null +++ b/frontend/src/pages/OIEDash/EventsCalendar/EventsCalendar.jsx @@ -0,0 +1,34 @@ +import React, { useEffect, useState, useRef } from 'react'; +import Switch from '../../../components/Switch/Switch'; +import './EventsCalendar.scss'; +import Month from './Month/Month'; + + +function EventsCalendar({expandedClass}){ + const [view, setView] = useState(0); //0: month, 1: week:, 2: day, 3: list + const [contentHeight, setContentHeight] = useState(100); + const contentRef = useRef(null); + + useEffect(() => { + if(contentRef.current){ + setContentHeight(contentRef.current.clientHeight); + } + },[contentRef.current]); + + return ( +
    +
    +

    Events Calendar

    + + +
    +
    + { + view === 0 && + } +
    +
    + ) +} + +export default EventsCalendar; \ No newline at end of file diff --git a/frontend/src/pages/OIEDash/EventsCalendar/EventsCalendar.scss b/frontend/src/pages/OIEDash/EventsCalendar/EventsCalendar.scss new file mode 100644 index 00000000..ba5c78d1 --- /dev/null +++ b/frontend/src/pages/OIEDash/EventsCalendar/EventsCalendar.scss @@ -0,0 +1,24 @@ +.events-calendar{ + display:flex; + box-sizing: border-box; + padding: 20px; + flex-direction: column; + height:100%; + flex-grow:1; + .header{ + display:flex; + width:100%; + align-items: center; + justify-content: space-between; + .view-select{ + display:flex; + gap:10px; + .view{ + + } + } + } + .content{ + flex-grow:1; + } +} \ No newline at end of file diff --git a/frontend/src/pages/OIEDash/EventsCalendar/Month/Month.jsx b/frontend/src/pages/OIEDash/EventsCalendar/Month/Month.jsx new file mode 100644 index 00000000..f740b77e --- /dev/null +++ b/frontend/src/pages/OIEDash/EventsCalendar/Month/Month.jsx @@ -0,0 +1,40 @@ +import React, { useEffect, useState } from 'react'; +import './Month.scss'; + +const getDaysInMonth = (month, year) => { + return new Date(year, month, 0).getDate(); +}; + +const getFirstDayOfWeek = (month, year) => { + return new Date(year, month, 1).getDay(); // 0 (Sun) to 6 (Sat) +}; + +function Month({height, month=11, year=2024}){ + const daysInMonth = getDaysInMonth(month, year); // Total days in the given month + const firstDayOfWeek = getFirstDayOfWeek(month, year); // Starting weekday + + const emptyCells = Array.from({ length: firstDayOfWeek }, (_, i) => ( +
    + )); + + const dayCells = Array.from({ length: daysInMonth }, (_, i) => ( +
    + {i + 1} +
    + )); + + return( +
    + {/* Headers */} + {["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"].map((day) => ( +
    + {day} +
    + ))} + {/* Days */} + {emptyCells.concat(dayCells)} +
    + ) +} + +export default Month; \ No newline at end of file diff --git a/frontend/src/pages/OIEDash/EventsCalendar/Month/Month.scss b/frontend/src/pages/OIEDash/EventsCalendar/Month/Month.scss new file mode 100644 index 00000000..23f3d274 --- /dev/null +++ b/frontend/src/pages/OIEDash/EventsCalendar/Month/Month.scss @@ -0,0 +1,7 @@ +.month{ + height:100%; + max-height:100%; + display:grid; + grid-template-columns: repeat(7, 1fr); + +} \ No newline at end of file diff --git a/frontend/src/pages/OIEDash/OIEDash.jsx b/frontend/src/pages/OIEDash/OIEDash.jsx index a22f44bf..700df3d7 100644 --- a/frontend/src/pages/OIEDash/OIEDash.jsx +++ b/frontend/src/pages/OIEDash/OIEDash.jsx @@ -1,18 +1,20 @@ import React, { useEffect, useState } from 'react'; import './OIEDash.scss'; import useAuth from '../../hooks/useAuth'; -import { useNavigate } from 'react-router-dom'; +import { useNavigate, useSearchParams, useHistory } from 'react-router-dom'; import Dashboard from '../../assets/Icons/Dashboard.svg'; import logo from '../../assets/red_logo.svg'; import { getAllEvents } from '../../components/EventsViewer/EventHelpers'; import Configuration from './Configuration/Configuration'; +import EventsCalendar from './EventsCalendar/EventsCalendar'; import {Icon} from '@iconify-icon/react'; import Dash from './Dash/Dash'; import ManageEvents from './ManageEvents/ManageEvents'; -import { set } from 'mongoose'; + function OIEDash(){ + const [searchParams, setSearchParams] = useSearchParams(); const [expanded, setExpanded] = useState(false); const [expandedClass, setExpandedClass] = useState(""); const {isAuthenticated, isAuthenticating, user} = useAuth(); @@ -22,6 +24,13 @@ function OIEDash(){ const [currentPage, setCurrentPage] = useState(0); const [currentDisplay, setCurrentDisplay] = useState(0); + useEffect(()=>{ + const pageFromUrl = searchParams.get("page"); + if(pageFromUrl){ + setCurrentDisplay(parseInt(pageFromUrl)); + } + },[]); + useEffect(()=>{ if(isAuthenticating){ return; @@ -57,6 +66,7 @@ function OIEDash(){ useEffect(() => { setCurrentPage(currentPage); + setSearchParams({page: currentDisplay}); }, [currentDisplay]); return ( @@ -102,7 +112,9 @@ function OIEDash(){ } { (currentPage === 1 || currentDisplay === 1) && -
    +
    + +
    } { (currentPage === 2 || currentDisplay === 2) && From 8346715f5dfc0bdb583f59807f731afed9ada6e7 Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Mon, 2 Dec 2024 15:54:06 -0500 Subject: [PATCH 40/97] SCRUM-164 finished new badge routing --- frontend/src/App.js | 4 ++- frontend/src/NotificationContext.js | 2 +- .../components/Forms/LoginForm/LoginForm.jsx | 9 +++--- .../Forms/RegisterForm/RegisterForm.jsx | 7 ++-- frontend/src/pages/NewBadge/NewBadge.jsx | 32 +++++++++++++++++++ frontend/src/pages/NewBadge/NewBadge.scss | 0 frontend/src/pages/OnBoarding/Onboard.jsx | 10 ++++-- 7 files changed, 51 insertions(+), 13 deletions(-) create mode 100644 frontend/src/pages/NewBadge/NewBadge.jsx create mode 100644 frontend/src/pages/NewBadge/NewBadge.scss diff --git a/frontend/src/App.js b/frontend/src/App.js index 890e2357..0bf51010 100644 --- a/frontend/src/App.js +++ b/frontend/src/App.js @@ -17,6 +17,7 @@ import DeveloperOnboard from './pages/DeveloperOnboarding/DeveloperOnboarding'; import QR from './pages/QR/QR'; import Admin from './pages/Admin/Admin'; import OIEDash from './pages/OIEDash/OIEDash'; +import NewBadge from './pages/NewBadge/NewBadge'; import { BrowserRouter as Router, Routes, Route } from 'react-router-dom'; import { AuthProvider } from './AuthContext'; import { CacheProvider } from './CacheContext'; @@ -119,7 +120,8 @@ function App() { }/> }/> }/> - + }/> + diff --git a/frontend/src/NotificationContext.js b/frontend/src/NotificationContext.js index c043b79c..cab2f577 100644 --- a/frontend/src/NotificationContext.js +++ b/frontend/src/NotificationContext.js @@ -31,7 +31,7 @@ export const NotificationProvider = ({ children }) => { const savedNotification = localStorage.getItem('notifications'); if (savedNotification) { addNotification(JSON.parse(savedNotification)); - setTimeout(() => localStorage.removeItem('notifications'), 3000); + setTimeout(() => localStorage.removeItem('notifications'), 100); } }, []); diff --git a/frontend/src/components/Forms/LoginForm/LoginForm.jsx b/frontend/src/components/Forms/LoginForm/LoginForm.jsx index 3fe3a03b..3c643cd5 100644 --- a/frontend/src/components/Forms/LoginForm/LoginForm.jsx +++ b/frontend/src/components/Forms/LoginForm/LoginForm.jsx @@ -23,7 +23,8 @@ function LoginForm() { const location = useLocation(); const googleLogo = generalIcons.google; - + const from = location.state?.from?.pathname || '/room/none'; + console.log(from); useEffect(() => { if (isAuthenticated){ console.log("logged in already"); @@ -51,7 +52,7 @@ function LoginForm() { try { await login(formData); console.log("logged in"); - navigate('/room/none',{ replace: true }) + navigate(from,{ replace: true }) // Handle success (e.g., store the token and redirect to a protected page) } catch (error) { console.error('Login failed:', error); @@ -143,7 +144,7 @@ function LoginForm() { -

    Don’t have an account? Register

    +

    Don’t have an account? Register

    @@ -156,7 +157,7 @@ function LoginForm() {
    -

    Don’t have an account? Register

    +

    Don’t have an account? Register

    diff --git a/frontend/src/components/Forms/RegisterForm/RegisterForm.jsx b/frontend/src/components/Forms/RegisterForm/RegisterForm.jsx index 4b9842ff..5462ae26 100644 --- a/frontend/src/components/Forms/RegisterForm/RegisterForm.jsx +++ b/frontend/src/components/Forms/RegisterForm/RegisterForm.jsx @@ -8,8 +8,6 @@ import circleWarning from '../../../assets/circle-warning.svg'; import { generalIcons } from '../../../Icons'; import Flag from '../../Flag/Flag'; - - function RegisterForm() { const { isAuthenticated, googleLogin, login } = useAuth(); const [valid, setValid] = useState(false); @@ -28,6 +26,7 @@ function RegisterForm() { let navigate = useNavigate(); const location = useLocation(); + const from = location.state?.from?.pathname || '/room/none'; useEffect(() => { async function google(code) { @@ -98,7 +97,7 @@ function RegisterForm() { console.log(response.data); // Handle success (e.g., redirect to login page or auto-login) await login(formData); - navigate('/onboard', { replace: true }); + navigate('/onboard', { state: {from:location.state?.from} }); } catch (error) { if(error.response.status === 400){ setErrorText("Username or Email already exists"); @@ -136,7 +135,7 @@ function RegisterForm() { {errorText !== "" && } - +

    diff --git a/frontend/src/pages/NewBadge/NewBadge.jsx b/frontend/src/pages/NewBadge/NewBadge.jsx new file mode 100644 index 00000000..022c536d --- /dev/null +++ b/frontend/src/pages/NewBadge/NewBadge.jsx @@ -0,0 +1,32 @@ +import React from 'react'; +import { Navigate, useLocation } from 'react-router-dom'; +import useAuth from '../../hooks/useAuth'; +import './NewBadge.scss'; +import { useNotification } from '../../NotificationContext'; + +const NewBadge = () => { + const { user, isAuthenticating, isAuthenticated } = useAuth(); + const location = useLocation(); + const {reloadNotification} = useNotification(); + + if(isAuthenticating){ + return
    Loading...
    + } + + if (!user) { + reloadNotification({title: "Please login to access this page", message: "You will be redirected to the login page", type: "error"}); + setTimeout(() => { + window.location.reload(); + }, 100); + return ; + } + + + return ( +
    +

    NewBadge

    +
    + ); +}; + +export default NewBadge; \ No newline at end of file diff --git a/frontend/src/pages/NewBadge/NewBadge.scss b/frontend/src/pages/NewBadge/NewBadge.scss new file mode 100644 index 00000000..e69de29b diff --git a/frontend/src/pages/OnBoarding/Onboard.jsx b/frontend/src/pages/OnBoarding/Onboard.jsx index 1aa7044b..e7435011 100644 --- a/frontend/src/pages/OnBoarding/Onboard.jsx +++ b/frontend/src/pages/OnBoarding/Onboard.jsx @@ -6,7 +6,7 @@ import Loader from '../../components/Loader/Loader.jsx'; import DragList from './DragList/DragList.jsx'; import useAuth from '../../hooks/useAuth.js'; import Recommendation from './Recommendation/Recommendation.jsx'; -import { useNavigate } from 'react-router-dom'; +import { useNavigate, useLocation } from 'react-router-dom'; import { onboardUser } from './OnboardHelpers.js'; import { useError } from '../../ErrorContext.js'; import { useNotification } from '../../NotificationContext.js'; @@ -47,6 +47,10 @@ function Onboard(){ const containerRef = useRef(null); const contentRefs = useRef([]); + const location = useLocation(); + const from = location.state?.from?.pathname || '/room/none'; + + const [items, setItems] = useState(["outlets", "classroom type", "printer", "table type", "windows"]); const details = { "outlets": "having outlet access from a majority of seats", @@ -99,7 +103,7 @@ function Onboard(){ } else { if(user){ if(user.onboarded && (!onboarded)){ - navigate('/room/none'); + navigate(from, {replace: true}); } setUserInfo(user); setIsGoogle(user.googleId); @@ -167,7 +171,7 @@ function Onboard(){ } if(current === 4){ - navigate('/room/none'); + navigate(from, {replace: true}); } setButtonActive(false); From ace9d0008be4b887fa9ae57375bc848f4efdfa87 Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Mon, 2 Dec 2024 16:49:10 -0500 Subject: [PATCH 41/97] SCRUM-164 initializing new badge grant system --- frontend/src/App.js | 2 +- frontend/src/pages/NewBadge/NewBadge.jsx | 54 +++++++++++++++++++---- frontend/src/pages/NewBadge/NewBadge.scss | 39 ++++++++++++++++ frontend/src/pages/OnBoarding/Onboard.jsx | 2 - frontend/src/utils/postRequest.js | 39 ++++++++++++++++ 5 files changed, 125 insertions(+), 11 deletions(-) create mode 100644 frontend/src/utils/postRequest.js diff --git a/frontend/src/App.js b/frontend/src/App.js index 0bf51010..a2e677cc 100644 --- a/frontend/src/App.js +++ b/frontend/src/App.js @@ -120,7 +120,7 @@ function App() { }/> }/> }/> - }/> + }/> diff --git a/frontend/src/pages/NewBadge/NewBadge.jsx b/frontend/src/pages/NewBadge/NewBadge.jsx index 022c536d..a966480e 100644 --- a/frontend/src/pages/NewBadge/NewBadge.jsx +++ b/frontend/src/pages/NewBadge/NewBadge.jsx @@ -1,16 +1,49 @@ -import React from 'react'; -import { Navigate, useLocation } from 'react-router-dom'; +import React, { useState, useEffect } from 'react'; +import { Navigate, useLocation, useParams } from 'react-router-dom'; import useAuth from '../../hooks/useAuth'; import './NewBadge.scss'; import { useNotification } from '../../NotificationContext'; +import PurpleGradient from '../../assets/PurpleGrad.svg'; +import YellowRedGradient from '../../assets/YellowRedGrad.svg'; +import postRequest from '../../utils/postRequest'; const NewBadge = () => { + const { hash } = useParams(); const { user, isAuthenticating, isAuthenticated } = useAuth(); const location = useLocation(); const {reloadNotification} = useNotification(); + const [redLoaded, setRedLoaded] = useState(false); + const [yellowLoaded, setYellowLoaded] = useState(false); + const [show, setShow] = useState(false); + const [start, setStart] = useState(false); + + useEffect(() => { + setTimeout(() => { + setStart(true); + }, 500); + }, []); + useEffect(() => { + if(redLoaded && yellowLoaded){ + setShow(true); + } + }, [redLoaded, yellowLoaded]); + + useEffect(() => { + if(isAuthenticated){ + const response = postRequest('/verify-new-badge', {hash: hash}); + if(response.error){ + console.log(response.error); + } else { + console.log(response); + } + } else { + return; + } + }, [isAuthenticated, user ]); + if(isAuthenticating){ - return
    Loading...
    + return null; } if (!user) { @@ -19,12 +52,17 @@ const NewBadge = () => { window.location.reload(); }, 100); return ; - } - - + } + + return ( -
    -

    NewBadge

    +
    + {setYellowLoaded(true)}}/> + {setRedLoaded(true)}}/> +
    + +
    +
    ); }; diff --git a/frontend/src/pages/NewBadge/NewBadge.scss b/frontend/src/pages/NewBadge/NewBadge.scss index e69de29b..ca84e847 100644 --- a/frontend/src/pages/NewBadge/NewBadge.scss +++ b/frontend/src/pages/NewBadge/NewBadge.scss @@ -0,0 +1,39 @@ +.new-badge{ + position: relative; + overflow:hidden; + height:100vh; + width:100vw; + display:flex; + align-items: center; + justify-content: center ; + flex-direction: column; + opacity: 0; + transition: all 0.5s ease-in-out; +} + +.new-badge.visible{ + opacity:1; +} + +.new-badge .content h2{ + font-family: 'Satoshi'; + color: var(--text); + text-align: center; + margin:0; +} + +.new-badge .yellow-red{ + position: absolute; + top:0; + right:0; + pointer-events: none; + z-index: -1; +} + +.new-badge .purple{ + position:absolute; + bottom:0; + left:0; + pointer-events: none; + z-index: -1; +} diff --git a/frontend/src/pages/OnBoarding/Onboard.jsx b/frontend/src/pages/OnBoarding/Onboard.jsx index e7435011..e94703f3 100644 --- a/frontend/src/pages/OnBoarding/Onboard.jsx +++ b/frontend/src/pages/OnBoarding/Onboard.jsx @@ -18,7 +18,6 @@ import waiting from '../../assets/Icons/Waiting.svg'; import error from '../../assets/circle-warning.svg'; import unavailable from '../../assets/Icons/Circle-X.svg'; import CardHeader from '../../components/ProfileCard/CardHeader/CardHeader.jsx'; -import { set } from 'mongoose'; function Onboard(){ const [start, setStart] = useState(false); @@ -42,7 +41,6 @@ function Onboard(){ const { newError } = useError(); const [buttonActive, setButtonActive] = useState(true); - const containerRef = useRef(null); const contentRefs = useRef([]); diff --git a/frontend/src/utils/postRequest.js b/frontend/src/utils/postRequest.js new file mode 100644 index 00000000..6a54c9ae --- /dev/null +++ b/frontend/src/utils/postRequest.js @@ -0,0 +1,39 @@ +import axios from 'axios'; + +/** + * helper function to make POST requests using axios. + * + * @param {string} url - The endpoint URL to which the POST request is sent. + * @param {object} body - The request payload. + * @param {object} options - Additional axios options (optional). + * @returns {Promise} - The response data or an error message. + */ +const postRequest = async (url, body, options = {}) => { + try { + const token = localStorage.getItem('token'); + + const headers = { + 'Content-Type': 'application/json', + ...(token && { Authorization: `Bearer ${token}` }), + ...options.headers, + }; + const response = await axios.post(url, body, { + headers, + ...options, + }); + + return response.data; + } catch (error) { + console.error('POST request error:', error.message); + + if (error.response) { + return { error: error.response.data.message || 'An error occurred' }; + } else if (error.request) { + return { error: 'No response received from server' }; + } else { + return { error: error.message }; + } + } +}; + +export default postRequest; From c144272c4b1e61eef5a6b31e71551523d9fe1e80 Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Mon, 2 Dec 2024 17:46:36 -0500 Subject: [PATCH 42/97] SCRUM-164-wrapping up badge adding --- backend/routes/userRoutes.js | 178 +++++++++++++----- backend/schemas/badgeGrant.js | 14 ++ frontend/src/components/Badges/Badges.scss | 5 + .../ProfileCard/CardHeader/CardHeader.scss | 1 + frontend/src/index.js | 2 - frontend/src/pages/NewBadge/NewBadge.jsx | 55 +++++- frontend/src/pages/NewBadge/NewBadge.scss | 105 ++++++++++- frontend/src/utils/postRequest.js | 2 +- 8 files changed, 297 insertions(+), 65 deletions(-) create mode 100644 backend/schemas/badgeGrant.js diff --git a/backend/routes/userRoutes.js b/backend/routes/userRoutes.js index 79b28b9d..c095081b 100644 --- a/backend/routes/userRoutes.js +++ b/backend/routes/userRoutes.js @@ -1,15 +1,16 @@ const express = require('express'); const User = require('../schemas/user.js'); const Developer = require('../schemas/developer.js'); -const { verifyToken, verifyTokenOptional } = require('../middlewares/verifyToken'); +const { verifyToken, verifyTokenOptional, authorizeRoles } = require('../middlewares/verifyToken'); const Classroom = require('../schemas/classroom.js'); const Schedule = require('../schemas/schedule.js'); const cron = require('node-cron'); const axios = require('axios'); -const { isProfane } = require('../services/profanityFilterService'); -const StudyHistory = require('../schemas/studyHistory.js'); +const { isProfane } = require('../services/profanityFilterService'); +const StudyHistory = require('../schemas/studyHistory.js'); const { findNext } = require('../helpers.js'); const { sendDiscordMessage } = require('../services/discordWebookService'); +const BadgeGrant = require('../schemas/badgeGrant'); const router = express.Router(); @@ -23,7 +24,7 @@ router.post("/update-user", verifyToken, async (req, res) =>{ } user.name = name ? name : user.name; user.username = username ? username : user.username; - user.classroomPreferences = classroom ? classroom : user.classroomPreferences; + user.classroomPreferences = classroom ? classroom : user.classroomPreferences; user.recommendationPreferences = recommendation ? recommendation : user.recommendationPreferences; user.onboarded = onboarded ? onboarded : user.onboarded; user.darkModePreference = darkModePreference !== null ? darkModePreference : user.darkModePreference; @@ -31,58 +32,58 @@ router.post("/update-user", verifyToken, async (req, res) =>{ await user.save(); console.log(`POST: /update-user ${req.user.userId} successful`); return res.status(200).json({ success: true, message: 'User updated successfully' }); - } catch(error){ + } catch (error) { console.log(`POST: /update-user ${req.user.userId} failed`) return res.status(500).json({ success: false, message: error.message }); } }); // check if username is available -router.post("/check-username", verifyToken, async (req, res) =>{ +router.post("/check-username", verifyToken, async (req, res) => { const { username } = req.body; const userId = req.user.userId; - try{ + try { //check if username is taken, regardless of casing - if(isProfane(username)){ + if (isProfane(username)) { console.log(`POST: /check-username ${username} is profane`) return res.status(200).json({ success: false, message: 'Username does not abide by community standards' }); } const reqUser = await User.findById(userId); const user = await User.findOne({ username: { $regex: new RegExp(username, "i") } }); - if(user && user._id.toString() !== userId){ + if (user && user._id.toString() !== userId) { console.log(`POST: /check-username ${username} is taken`) return res.status(200).json({ success: false, message: 'Username is taken' }); } console.log(`POST: /check-username ${username} is available`) return res.status(200).json({ success: true, message: 'Username is available' }); - } catch(error){ + } catch (error) { console.log(`POST: /check-username ${username} failed`) return res.status(500).json({ success: false, message: 'Internal server error', error }); } }); -router.post("/check-in", verifyToken, async (req, res) =>{ +router.post("/check-in", verifyToken, async (req, res) => { const { classroomId } = req.body; - try{ + try { //check if user is checked in elsewhere in the checked_in array - const classrooms = await Classroom.find({checked_in: { $in: [req.user.userId] }}); - + const classrooms = await Classroom.find({ checked_in: { $in: [req.user.userId] } }); + // const classrooms = await Classroom.find({ checkIns: req.user.userId }); - if(classrooms.length > 0){ + if (classrooms.length > 0) { console.log(`POST: /check-in ${req.user.userId} is already checked in`) return res.status(400).json({ success: false, message: 'User is already checked in' }); } const classroom = await Classroom.findOne({ _id: classroomId }); classroom.checked_in.push(req.user.userId); await classroom.save(); - if(req.user.userId !== "65f474445dca7aca4fb5acaf"){ - sendDiscordMessage(`User check-in`,`user ${req.user.userId} checked in to ${classroom.name}`,"normal"); + if (req.user.userId !== "65f474445dca7aca4fb5acaf") { + sendDiscordMessage(`User check-in`, `user ${req.user.userId} checked in to ${classroom.name}`, "normal"); } //create history object, preempt end time using findnext const schedule = await Schedule.findOne({ classroom_id: classroomId }); - if(schedule){ + if (schedule) { let endTime = findNext(schedule.weekly_schedule); //time in minutes from midnight - endTime = new Date(new Date().setHours(Math.floor(endTime/60), endTime%60, 0, 0)); + endTime = new Date(new Date().setHours(Math.floor(endTime / 60), endTime % 60, 0, 0)); const history = new StudyHistory({ user_id: req.user.userId, classroom_id: classroomId, @@ -97,39 +98,39 @@ router.post("/check-in", verifyToken, async (req, res) =>{ console.log(`POST: /check-in ${req.user.userId} into ${classroom.name} successful`); return res.status(200).json({ success: true, message: 'Checked in successfully' }); - } catch(error){ + } catch (error) { console.log(`POST: /check-in ${req.user.userId} failed`); console.log(error); return res.status(500).json({ success: false, message: 'Internal server error', error }); } }); -router.get("/checked-in", verifyToken, async (req, res) =>{ - try{ +router.get("/checked-in", verifyToken, async (req, res) => { + try { const classrooms = await Classroom.find({ checked_in: { $in: [req.user.userId] } }); console.log(`GET: /checked-in ${req.user.userId} successful`) return res.status(200).json({ success: true, message: 'Checked in classrooms retrieved', classrooms }); - } catch(error){ + } catch (error) { console.log(`GET: /checked-in ${req.user.userId} failed`) return res.status(500).json({ success: false, message: 'Internal server error', error }); } }); -router.post("/check-out", verifyToken, async (req, res) =>{ +router.post("/check-out", verifyToken, async (req, res) => { const { classroomId } = req.body; - try{ + try { const classroom = await Classroom.findOne({ _id: classroomId }); classroom.checked_in = classroom.checked_in.filter(userId => userId !== req.user.userId); await classroom.save(); const schedule = await Schedule.findOne({ classroom_id: classroomId }); - if(schedule){ + if (schedule) { //find latest history object const history = await StudyHistory.findOne({ user_id: req.user.userId, classroom_id: classroomId }).sort({ start_time: -1 }); const endTime = new Date(); //if time spent is less than 5 minutes, delete history object - if(history){ + if (history) { const timeDiff = endTime - history.start_time; - if(timeDiff < 300000){ + if (timeDiff < 300000) { await history.deleteOne(); } else { //else update end time @@ -137,10 +138,10 @@ router.post("/check-out", verifyToken, async (req, res) =>{ await history.save(); //update user stats const user = await User.findOne({ _id: req.user.userId }); - user.hours += timeDiff/3600000; + user.hours += timeDiff / 3600000; //find if new classroom visited const pastHistory = await StudyHistory.findOne({ user_id: req.user.userId, classroom_id: classroomId }); - if(!pastHistory){ + if (!pastHistory) { user.visited.push(classroomId); } } @@ -149,43 +150,43 @@ router.post("/check-out", verifyToken, async (req, res) =>{ const io = req.app.get('io'); io.to(classroomId).emit('check-out', { classroomId, userId: req.user.userId }); console.log(`POST: /check-out ${req.user.userId} from ${classroom.name} successful`); - if(req.user.userId !== "65f474445dca7aca4fb5acaf"){ - sendDiscordMessage(`User check-out`,`user ${req.user.userId} checked out of ${classroom.name}`,"normal"); + if (req.user.userId !== "65f474445dca7aca4fb5acaf") { + sendDiscordMessage(`User check-out`, `user ${req.user.userId} checked out of ${classroom.name}`, "normal"); } return res.status(200).json({ success: true, message: 'Checked out successfully' }); - } catch(error){ + } catch (error) { console.log(`POST: /check-out ${req.user.userId} failed`); console.log(error); return res.status(500).json({ success: false, message: 'Internal server error', error }); } }); -router.get("/get-developer", verifyToken, async (req, res) =>{ - try{ +router.get("/get-developer", verifyToken, async (req, res) => { + try { const developer = await Developer.findOne({ user_id: req.user.userId }); console.log(`GET: /get-developer ${req.user.userId} successful`); - if(!developer){ + if (!developer) { return res.status(204).json({ success: false, message: 'Developer not found' }); } return res.status(200).json({ success: true, message: 'Developer retrieved', developer }); - } catch(error){ + } catch (error) { console.log(`GET: /get-developer ${req.user.userId} failed`) return res.status(500).json({ success: false, message: 'Internal server error', error }); } }); -router.post("/update-developer", verifyToken, async (req, res) =>{ +router.post("/update-developer", verifyToken, async (req, res) => { const { type, commitment, goals, skills } = req.body; - try{ + try { const developer = await Developer.findOne({ userId: req.user.userId }); const user = await User.findById(req.user.userId); - - if(!developer){ + + if (!developer) { //craete developer const newDeveloper = new Developer({ user_id: req.user.userId, - name : user.name, + name: user.name, type, commitment, goals, @@ -206,35 +207,114 @@ router.post("/update-developer", verifyToken, async (req, res) =>{ await developer.save(); console.log(`POST: /update-developer ${req.user.userId} successful`); return res.status(200).json({ success: true, message: 'Developer updated successfully' }); - } catch(error){ + } catch (error) { console.log(`POST: /update-developer ${req.user.userId} failed`) return res.status(500).json({ success: false, message: 'Internal server error', error }); } }); -router.get("/get-user", async (req, res) =>{ +router.get("/get-user", async (req, res) => { const userId = req.query.userId; - try{ + try { const user = await User.findById(userId); console.log(`GET: /get-user ${req.query.userId} successful`); return res.status(200).json({ success: true, message: 'User retrieved', user }); - } catch(error){ + } catch (error) { console.log(`GET: /get-user ${req.query.userId} failed`) return res.status(500).json({ success: false, message: 'Internal server error', error }); } }); //route to get mulitple users, specified in array -router.get("/get-users", async (req, res) =>{ +router.get("/get-users", async (req, res) => { const userIds = req.query.userIds; - try{ + try { const users = await User.find({ _id: { $in: userIds } }); console.log(`GET: /get-users ${req.query.userId} successful`); return res.status(200).json({ success: true, message: 'Users retrieved', users }); - } catch(error){ + } catch (error) { console.log(`GET: /get-users ${req.query.userId} failed`) return res.status(500).json({ success: false, message: 'Internal server error', error }); } }); +router.post('/create-badge-grant', verifyToken, authorizeRoles('admin'), async (req, res) => { + try { + const { badgeContent, badgeColor, daysValid } = req.body; + + // Input validation + if (!badgeContent || !badgeColor || !daysValid) { + return res.status(400).json({ error: 'All fields are required' }); + } + + const validFrom = new Date(); + const validTo = new Date(); + validTo.setDate(validTo.getDate() + daysValid); + + const badgeGrant = new BadgeGrant({ + badgeContent, + badgeColor, + validFrom, + validTo, + }); + + await badgeGrant.save(); + + res.status(201).json({ + message: 'Badge grant created successfully', + hash: badgeGrant.hash, + validFrom, + validTo, + }); + } catch (error) { + console.error('Error creating badge grant:', error); + res.status(500).json({ error: 'Server error' }); + } +}); + +router.post('/grant-badge', verifyToken, async (req, res) => { + try { + const { hash } = req.body; + const userId = req.user.userId; + + if (!hash) { + return res.status(400).json({ error: 'Hash is required' }); + } + + const badgeGrant = await BadgeGrant.findOne({ hash }); + + if (!badgeGrant) { + return res.status(404).json({ error: 'Invalid badge grant' }); + } + + const currentDate = new Date(); + + //check if the today's date is within the valid period + if (currentDate < badgeGrant.validFrom || currentDate > badgeGrant.validTo) { + return res.status(400).json({ error: 'Badge grant is not valid at this time' }); + } + + const user = await User.findById(userId); + + if (!user) { + return res.status(404).json({ error: 'User not found' }); + } + if(user.tags.includes(badgeGrant.badgeContent)){ + return res.status(406).json({ error: 'You\'ve already been granted this badge' }); + } + + // Append the badge to the user's badges array + user.tags.push(badgeGrant.badgeContent); + + await user.save(); + console.log(`POST: /grant-badge ${req.user.userId} successful`); + + res.status(200).json({ message: 'Badge granted successfully', badges: user.badges, badge: {badgeContent:badgeGrant.badgeContent, badgeColor: badgeGrant.badgeColor} }); + } catch (error) { + console.error('Error granting badge:', error); + res.status(500).json({ error: 'Server error' }); + } +}); + + module.exports = router; diff --git a/backend/schemas/badgeGrant.js b/backend/schemas/badgeGrant.js new file mode 100644 index 00000000..665ba2a1 --- /dev/null +++ b/backend/schemas/badgeGrant.js @@ -0,0 +1,14 @@ +const mongoose = require('mongoose'); +const { v4: uuidv4 } = require('uuid'); + +const BadgeGrantSchema = new mongoose.Schema({ + badgeContent: { type: String, required: true }, + badgeColor: { type: String, required: true }, + validFrom: { type: Date, required: true }, + validTo: { type: Date, required: true }, + hash: { type: String, required: true, unique: true, default: uuidv4 }, +}); + +const BadgeGrant = mongoose.model('BadgeGrant', BadgeGrantSchema); + +module.exports = BadgeGrant; diff --git a/frontend/src/components/Badges/Badges.scss b/frontend/src/components/Badges/Badges.scss index 81d962ca..646c97cd 100644 --- a/frontend/src/components/Badges/Badges.scss +++ b/frontend/src/components/Badges/Badges.scss @@ -19,6 +19,7 @@ } + .badge.normal p{ margin:0 7px !important; color:white !important; @@ -49,4 +50,8 @@ .badge.developer{ background-color: var(--developerBlue); +} + +.badge.RCOS{ + background-color: #D51F2B; } \ No newline at end of file diff --git a/frontend/src/components/ProfileCard/CardHeader/CardHeader.scss b/frontend/src/components/ProfileCard/CardHeader/CardHeader.scss index a843093a..4c750736 100644 --- a/frontend/src/components/ProfileCard/CardHeader/CardHeader.scss +++ b/frontend/src/components/ProfileCard/CardHeader/CardHeader.scss @@ -68,6 +68,7 @@ flex-direction: column; align-items: flex-start; justify-content: center; + gap:5px; } .card-header p.user{ diff --git a/frontend/src/index.js b/frontend/src/index.js index 7400e9bc..d2c34ea4 100644 --- a/frontend/src/index.js +++ b/frontend/src/index.js @@ -6,9 +6,7 @@ import reportWebVitals from './reportWebVitals'; const root = ReactDOM.createRoot(document.getElementById('root')); root.render( - - ); // If you want to start measuring performance in your app, pass a function diff --git a/frontend/src/pages/NewBadge/NewBadge.jsx b/frontend/src/pages/NewBadge/NewBadge.jsx index a966480e..5a172c73 100644 --- a/frontend/src/pages/NewBadge/NewBadge.jsx +++ b/frontend/src/pages/NewBadge/NewBadge.jsx @@ -1,21 +1,26 @@ import React, { useState, useEffect } from 'react'; -import { Navigate, useLocation, useParams } from 'react-router-dom'; +import { Navigate, useLocation, useParams, useNavigate } from 'react-router-dom'; import useAuth from '../../hooks/useAuth'; import './NewBadge.scss'; import { useNotification } from '../../NotificationContext'; import PurpleGradient from '../../assets/PurpleGrad.svg'; import YellowRedGradient from '../../assets/YellowRedGrad.svg'; import postRequest from '../../utils/postRequest'; +import CardHeader from '../../components/ProfileCard/CardHeader/CardHeader'; const NewBadge = () => { const { hash } = useParams(); - const { user, isAuthenticating, isAuthenticated } = useAuth(); + const { user, isAuthenticating, isAuthenticated, validateToken } = useAuth(); const location = useLocation(); + const navigate = useNavigate(); const {reloadNotification} = useNotification(); const [redLoaded, setRedLoaded] = useState(false); const [yellowLoaded, setYellowLoaded] = useState(false); const [show, setShow] = useState(false); const [start, setStart] = useState(false); + const [error, setError] = useState(null); + const [badge, setBadge] = useState(null); + const [claimed, setClaimed] = useState(false); useEffect(() => { setTimeout(() => { @@ -29,13 +34,20 @@ const NewBadge = () => { }, [redLoaded, yellowLoaded]); useEffect(() => { - if(isAuthenticated){ - const response = postRequest('/verify-new-badge', {hash: hash}); + + const grantBadge = async () => { + const response = await postRequest('/grant-badge', {hash: hash}); if(response.error){ console.log(response.error); + setError(response.error); } else { console.log(response); + setBadge(response.badge); } + } + + if(isAuthenticated){ + grantBadge(); } else { return; } @@ -54,13 +66,48 @@ const NewBadge = () => { return ; } + const onClaim = async () => { + await validateToken(); + setClaimed(true); + } + return (
    {setYellowLoaded(true)}}/> {setRedLoaded(true)}}/>
    + {claimed ? +
    +

    badge claimed!

    +

    your badge has been added to your profile. Check it out!

    + + +
    + : + <> + { + error ? +
    +

    Oops! Looks like there's been an error

    +

    {error}

    + +
    + : +
    + {badge && +
    + {badge.badgeContent} +
    + } +

    claim your new badge!

    +

    Thank you for attending the RCOS expo 🎉. To express our thanks, we’d like to gift you a limited RCOS badge, wear it proudly on your profile!

    + +
    + } + + }
    diff --git a/frontend/src/pages/NewBadge/NewBadge.scss b/frontend/src/pages/NewBadge/NewBadge.scss index ca84e847..e8a3029a 100644 --- a/frontend/src/pages/NewBadge/NewBadge.scss +++ b/frontend/src/pages/NewBadge/NewBadge.scss @@ -1,3 +1,35 @@ + +@mixin shimmer-effect($angle: 130deg, $duration: 2s) { + position: relative; + overflow: hidden; + + &::after { + content: ''; + position: absolute; + top: 0; + left: -150%; + width: 150%; + height: 100%; + background-image: linear-gradient( + $angle, + rgba(255, 255, 255, 0) 25%, /* Start transparent earlier */ + rgba(255, 255, 255, 0.3) 80%, /* Peak opacity reduced */ + rgba(255, 255, 255, 0) 75% + ); + animation: shimmer $duration infinite; + } + } + + @keyframes shimmer { + 0% { + transform: translateX(0%); + } + 100% { + transform: translateX(150%); + } + } + + .new-badge{ position: relative; overflow:hidden; @@ -9,19 +41,70 @@ flex-direction: column; opacity: 0; transition: all 0.5s ease-in-out; -} + &.visible{ + opacity:1; + } -.new-badge.visible{ - opacity:1; -} + .content{ + max-width:400px; + + & > div{ + display:flex; + flex-direction: column; + align-items: center; + & > h2,p{ + font-family: 'Satoshi'; + color: var(--text); + text-align: center; + margin:0; + } + + & > p{ + font-weight:500; + font-family: 'Inter'; + } + } -.new-badge .content h2{ - font-family: 'Satoshi'; - color: var(--text); - text-align: center; - margin:0; + button{ + font-family: 'Satoshi'; + font-size: 15px; + outline:none; + border-radius: 8px; + background-color: var(--red); + border:none; + padding:5px 20px; + margin-top: 20px; + color: white; + cursor:pointer; + transition: all 0.5s; + } + + button:hover{ + cursor:pointer; + filter: brightness(0.9); + } + + .mock-badge{ + font-family: 'Inter'; + font-size: 40px; + color:white; + padding:10px 28px; + border-radius: 20px; + font-weight:800; + margin-bottom:20px; + @include shimmer-effect(130deg,2s ); + } + .card-header{ + margin-top:20px + } + } + .claimed{ + animation: fadeIn 0.5s ease-in-out; + } } + + .new-badge .yellow-red{ position: absolute; top:0; @@ -37,3 +120,7 @@ pointer-events: none; z-index: -1; } + + + + \ No newline at end of file diff --git a/frontend/src/utils/postRequest.js b/frontend/src/utils/postRequest.js index 6a54c9ae..c6775058 100644 --- a/frontend/src/utils/postRequest.js +++ b/frontend/src/utils/postRequest.js @@ -27,7 +27,7 @@ const postRequest = async (url, body, options = {}) => { console.error('POST request error:', error.message); if (error.response) { - return { error: error.response.data.message || 'An error occurred' }; + return { error: error.response.data.error }; } else if (error.request) { return { error: 'No response received from server' }; } else { From 2bfbaa252fbe3e5ccea39962c157676e8bba5260 Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Mon, 2 Dec 2024 17:50:25 -0500 Subject: [PATCH 43/97] SCRUM-164 adjusting styling --- frontend/src/components/ProfileCard/CardHeader/CardHeader.scss | 1 - frontend/src/pages/NewBadge/NewBadge.scss | 1 - 2 files changed, 2 deletions(-) diff --git a/frontend/src/components/ProfileCard/CardHeader/CardHeader.scss b/frontend/src/components/ProfileCard/CardHeader/CardHeader.scss index 4c750736..a843093a 100644 --- a/frontend/src/components/ProfileCard/CardHeader/CardHeader.scss +++ b/frontend/src/components/ProfileCard/CardHeader/CardHeader.scss @@ -68,7 +68,6 @@ flex-direction: column; align-items: flex-start; justify-content: center; - gap:5px; } .card-header p.user{ diff --git a/frontend/src/pages/NewBadge/NewBadge.scss b/frontend/src/pages/NewBadge/NewBadge.scss index e8a3029a..6d8cb84d 100644 --- a/frontend/src/pages/NewBadge/NewBadge.scss +++ b/frontend/src/pages/NewBadge/NewBadge.scss @@ -56,7 +56,6 @@ font-family: 'Satoshi'; color: var(--text); text-align: center; - margin:0; } & > p{ From 889ee2f0851c8a093213c0adb133248e06eb745e Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Tue, 3 Dec 2024 01:35:40 -0500 Subject: [PATCH 44/97] SCRUM-164 more appealing + responsive styling --- frontend/src/pages/NewBadge/NewBadge.jsx | 17 ++++++++++--- frontend/src/pages/NewBadge/NewBadge.scss | 31 +++++++++++++++++++++-- 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/frontend/src/pages/NewBadge/NewBadge.jsx b/frontend/src/pages/NewBadge/NewBadge.jsx index 5a172c73..f4dc0176 100644 --- a/frontend/src/pages/NewBadge/NewBadge.jsx +++ b/frontend/src/pages/NewBadge/NewBadge.jsx @@ -22,7 +22,16 @@ const NewBadge = () => { const [badge, setBadge] = useState(null); const [claimed, setClaimed] = useState(false); + const [badgeVisible, setBadgeVisible] = useState(false); + const [contentVisible, setContentVisible] = useState(false); + useEffect(() => { + setTimeout(() => { + setBadgeVisible(true); + }, 100); + setTimeout(() => { + setContentVisible(true); + }, 1000); setTimeout(() => { setStart(true); }, 500); @@ -96,13 +105,13 @@ const NewBadge = () => { :
    {badge && -
    +
    {badge.badgeContent}
    } -

    claim your new badge!

    -

    Thank you for attending the RCOS expo 🎉. To express our thanks, we’d like to gift you a limited RCOS badge, wear it proudly on your profile!

    - +

    claim your new badge!

    +

    Thank you for attending the RCOS expo 🎉. To express our thanks, we’d like to gift you a limited RCOS badge, wear it proudly on your profile!

    +
    } diff --git a/frontend/src/pages/NewBadge/NewBadge.scss b/frontend/src/pages/NewBadge/NewBadge.scss index 6d8cb84d..e86fd307 100644 --- a/frontend/src/pages/NewBadge/NewBadge.scss +++ b/frontend/src/pages/NewBadge/NewBadge.scss @@ -47,6 +47,11 @@ .content{ max-width:400px; + margin:0 50px; + + h1,h2,p{ + transition: opacity 0.5s ease-in-out; + } & > div{ display:flex; @@ -91,7 +96,15 @@ border-radius: 20px; font-weight:800; margin-bottom:20px; + opacity: 0; + transition: opacity 0.5s ease-in-out; @include shimmer-effect(130deg,2s ); + //box shadow red + // box-shadow: 4px 4px 4px #D51F2B; + + &.visible{ + opacity: 1; + } } .card-header{ margin-top:20px @@ -102,7 +115,9 @@ } } - +.invis{ + opacity:0; +} .new-badge .yellow-red{ position: absolute; @@ -121,5 +136,17 @@ } +@media (max-width: 1000px) { + .yellow-red, + .purple{ + height:400px; + } +} + +@media (max-width: 500px){ + .yellow-red, + .purple{ + height:300px; + } +} - \ No newline at end of file From 9016055499c274c04f015aece43bf2f34c9bb5ee Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Tue, 3 Dec 2024 01:40:30 -0500 Subject: [PATCH 45/97] SCRUM-54-fixing minor bug: --- frontend/src/components/Classroom/Classroom.jsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/Classroom/Classroom.jsx b/frontend/src/components/Classroom/Classroom.jsx index 726d88c0..523dd5b7 100644 --- a/frontend/src/components/Classroom/Classroom.jsx +++ b/frontend/src/components/Classroom/Classroom.jsx @@ -53,7 +53,8 @@ function Classroom({ room, state, setState, schedule, roomName, width, setShowMo //get all users currently checked in const getCheckedInUsers = async () => { try { - if (room.checked_in.length === 0) { + + if (room.name !== null && room.checked_in.length === 0) { return; } const users = await getUsers(room.checked_in); From a8f3755cdda3b6c9fe182929819d3f0a328cbcfa Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Tue, 3 Dec 2024 02:07:14 -0500 Subject: [PATCH 46/97] SCRUM-54 quick bug fix --- frontend/src/components/Forms/LoginForm/LoginForm.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/Forms/LoginForm/LoginForm.jsx b/frontend/src/components/Forms/LoginForm/LoginForm.jsx index 3c643cd5..c74c2e40 100644 --- a/frontend/src/components/Forms/LoginForm/LoginForm.jsx +++ b/frontend/src/components/Forms/LoginForm/LoginForm.jsx @@ -144,7 +144,7 @@ function LoginForm() { -

    Don’t have an account? Register

    +

    Don’t have an account? Register

    @@ -157,7 +157,7 @@ function LoginForm() {
    -

    Don’t have an account? Register

    +

    Don’t have an account? Register

    From 062d38694b6ba8d5182582d996fc46fd22dec02a Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Tue, 3 Dec 2024 15:10:10 -0500 Subject: [PATCH 47/97] SCRUM-164 google login support --- .../components/Forms/RegisterForm/RegisterForm.jsx | 12 +++++++++--- frontend/src/pages/NewBadge/NewBadge.jsx | 2 ++ frontend/src/pages/Room/Room1.jsx | 3 +++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/frontend/src/components/Forms/RegisterForm/RegisterForm.jsx b/frontend/src/components/Forms/RegisterForm/RegisterForm.jsx index 5462ae26..d9f691b4 100644 --- a/frontend/src/components/Forms/RegisterForm/RegisterForm.jsx +++ b/frontend/src/components/Forms/RegisterForm/RegisterForm.jsx @@ -60,8 +60,13 @@ function RegisterForm() { useEffect(() => { if (isAuthenticated && isAuthenticated !== null) { - console.log("logged in already"); - navigate('/room/none', { replace: true }) + // console.log("logged in already"); + // const redirectto = localStorage.getItem('redirectto'); + // if(redirectto){ + // navigate(redirectto, { replace: true }); + // } else { + navigate('/room/none', { replace: true }); + // } } }, [isAuthenticated, navigate]); @@ -114,7 +119,8 @@ function RegisterForm() { flow: 'auth-code', ux_mode: 'redirect', onFailure: () => { console.log("failed") }, - }) + }); + function failed(message){ navigate('/login'); diff --git a/frontend/src/pages/NewBadge/NewBadge.jsx b/frontend/src/pages/NewBadge/NewBadge.jsx index f4dc0176..99464e0f 100644 --- a/frontend/src/pages/NewBadge/NewBadge.jsx +++ b/frontend/src/pages/NewBadge/NewBadge.jsx @@ -52,6 +52,7 @@ const NewBadge = () => { } else { console.log(response); setBadge(response.badge); + localStorage.removeItem('badge'); } } @@ -72,6 +73,7 @@ const NewBadge = () => { setTimeout(() => { window.location.reload(); }, 100); + localStorage.setItem('badge', location.pathname); return ; } diff --git a/frontend/src/pages/Room/Room1.jsx b/frontend/src/pages/Room/Room1.jsx index 0171ee30..d752343e 100644 --- a/frontend/src/pages/Room/Room1.jsx +++ b/frontend/src/pages/Room/Room1.jsx @@ -292,6 +292,9 @@ function Room() { } getRecommendationData(); + + const newBadgeRedirect = localStorage.getItem('badge'); + },[]); From 5dc59a18cc69bef3dda3d0e36224fc1fe38ebbb2 Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Tue, 3 Dec 2024 15:11:25 -0500 Subject: [PATCH 48/97] SCRUM-164 google login support1 --- frontend/src/pages/Room/Room1.jsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/frontend/src/pages/Room/Room1.jsx b/frontend/src/pages/Room/Room1.jsx index d752343e..33199307 100644 --- a/frontend/src/pages/Room/Room1.jsx +++ b/frontend/src/pages/Room/Room1.jsx @@ -294,6 +294,10 @@ function Room() { getRecommendationData(); const newBadgeRedirect = localStorage.getItem('badge'); + if(newBadgeRedirect){ + navigate(newBadgeRedirect); + localStorage.removeItem('badge'); + } },[]); From 508ba08f39ac63b7776f05cf3971d3b1860c4b6b Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Wed, 4 Dec 2024 11:32:26 -0500 Subject: [PATCH 49/97] SCRUM-144 styling calendar: --- frontend/src/App.css | 1 + .../EventsCalendar/EventsCalendar.scss | 4 +- .../OIEDash/EventsCalendar/Month/Month.jsx | 30 +++++--- .../OIEDash/EventsCalendar/Month/Month.scss | 77 ++++++++++++++++++- 4 files changed, 99 insertions(+), 13 deletions(-) diff --git a/frontend/src/App.css b/frontend/src/App.css index b07dad62..032c5d5b 100644 --- a/frontend/src/App.css +++ b/frontend/src/App.css @@ -28,6 +28,7 @@ --rating-yellow : #FFC700; --yellow: #FBBC05; --offwhite: #F6F6F6; + --lightest: #FBFBFB; --developerBlue: #45A1FC; diff --git a/frontend/src/pages/OIEDash/EventsCalendar/EventsCalendar.scss b/frontend/src/pages/OIEDash/EventsCalendar/EventsCalendar.scss index ba5c78d1..afd4e761 100644 --- a/frontend/src/pages/OIEDash/EventsCalendar/EventsCalendar.scss +++ b/frontend/src/pages/OIEDash/EventsCalendar/EventsCalendar.scss @@ -1,10 +1,11 @@ -.events-calendar{ + .events-calendar{ display:flex; box-sizing: border-box; padding: 20px; flex-direction: column; height:100%; flex-grow:1; + gap:20px; .header{ display:flex; width:100%; @@ -20,5 +21,6 @@ } .content{ flex-grow:1; + } } \ No newline at end of file diff --git a/frontend/src/pages/OIEDash/EventsCalendar/Month/Month.jsx b/frontend/src/pages/OIEDash/EventsCalendar/Month/Month.jsx index f740b77e..c92252d2 100644 --- a/frontend/src/pages/OIEDash/EventsCalendar/Month/Month.jsx +++ b/frontend/src/pages/OIEDash/EventsCalendar/Month/Month.jsx @@ -6,10 +6,10 @@ const getDaysInMonth = (month, year) => { }; const getFirstDayOfWeek = (month, year) => { - return new Date(year, month, 1).getDay(); // 0 (Sun) to 6 (Sat) + return new Date(year, month - 1, 1).getDay(); // Subtract 1 from the month }; -function Month({height, month=11, year=2024}){ +function Month({ height, month=11, year=2024 }){ const daysInMonth = getDaysInMonth(month, year); // Total days in the given month const firstDayOfWeek = getFirstDayOfWeek(month, year); // Starting weekday @@ -19,20 +19,30 @@ function Month({height, month=11, year=2024}){ const dayCells = Array.from({ length: daysInMonth }, (_, i) => (
    - {i + 1} +
    +

    {i + 1}

    +
    +
    + +
    )); return(
    {/* Headers */} - {["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"].map((day) => ( -
    - {day} -
    - ))} - {/* Days */} - {emptyCells.concat(dayCells)} +
    + {["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"].map((day) => ( +
    +

    {day}

    +
    + ))} +
    +
    + + {/* Days */} + {emptyCells.concat(dayCells)} +
    ) } diff --git a/frontend/src/pages/OIEDash/EventsCalendar/Month/Month.scss b/frontend/src/pages/OIEDash/EventsCalendar/Month/Month.scss index 23f3d274..6d864903 100644 --- a/frontend/src/pages/OIEDash/EventsCalendar/Month/Month.scss +++ b/frontend/src/pages/OIEDash/EventsCalendar/Month/Month.scss @@ -1,7 +1,80 @@ .month{ height:100%; max-height:100%; - display:grid; - grid-template-columns: repeat(7, 1fr); + .calendar-header{ + display:grid; + grid-template-columns: repeat(7, 1fr); + width:100%; + height:30px; + box-sizing: border-box; + border-right: 1px solid var(--lighterborder); + border-bottom: 1px solid var(--lighterborder); + border-radius: 0 10px 0 0 ; + & > div:first-child{ + border-radius: 10px 0 0 0; + } + + & > div:last-child{ + border-radius: 0 10px 0 0 ; + + } + + + .day{ + box-sizing: border-box; + display:flex; + align-items: center; + justify-content: center; + border-top: 1px solid var(--lighterborder); + border-left: 1px solid var(--lighterborder); + } + + p{ + font-family: 'Inter'; + font-size: 16px; + color: var(--text); + font-weight:500; + margin:0; + text-align: center; + } + } + .calendar{ + height:calc(100% - 30px); + max-height:calc(100% - 30px); + display:grid; + grid-template-columns: repeat(7, 1fr); + box-sizing: border-box; + // border-top: 1px solid var(--lightborder); + border-left: 1px solid var(--lighterborder); + + &__day{ + display:flex; + box-sizing: border-box; + padding:5px; + border-bottom: 1px solid var(--lighterborder); + border-right: 1px solid var(--lighterborder); + background-color: var(--lightest); + + .day-header{ + width:100%; + display:flex; + height: fit-content; + p{ + font-family: 'Inter'; + font-weight:400; + font-size: 15px; + color: var(--text); + } + } + &.is-disabled{ + background-color: var(--light); + } + } + + &__day:last-child{ + border-radius: 0 0 10px 0; + } + + } } \ No newline at end of file From 60aa8ce81c51cafe3056faf97c58307cf9f9f687 Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Wed, 4 Dec 2024 11:34:28 -0500 Subject: [PATCH 50/97] SCRUM-144 backend event route --- backend/routes/eventRoutes.js | 38 +++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/backend/routes/eventRoutes.js b/backend/routes/eventRoutes.js index 01bbc2f6..6c89a7b8 100644 --- a/backend/routes/eventRoutes.js +++ b/backend/routes/eventRoutes.js @@ -323,6 +323,44 @@ router.post('/approve-event', verifyToken, async (req, res) => { } }); +router.get('/get-events-by-month', verifyToken, authorizeRoles('oie'), async (req, res) => { + const { month, year } = req.query; + + if (!month || !year) { + return res.status(400).json({ + success: false, + message: 'Month and year are required parameters.', + }); + } + + try { + // Parse month and year into integers + const parsedMonth = parseInt(month, 10) - 1; // JavaScript months are 0-indexed + const parsedYear = parseInt(year, 10); + + // Construct the start and end of the month + const startOfMonth = new Date(parsedYear, parsedMonth, 1); // First day of the month + const endOfMonth = new Date(parsedYear, parsedMonth + 1, 0, 23, 59, 59, 999); // Last day of the month + + // Query events with dates within the range + const events = await Event.find({ + start_time: { $gte: startOfMonth, $lte: endOfMonth } + }).populate('classroom_id'); + + console.log('GET: /get-events-by-month successful'); + res.status(200).json({ + success: true, + events + }); + } catch (error) { + console.log('GET: /get-events-by-month failed', error); + res.status(500).json({ + success: false, + message: error.message + }); + } +}); + module.exports = router; From 656dc467e516df02ee42f9ba4a1514d9226cd77e Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Wed, 4 Dec 2024 12:00:24 -0500 Subject: [PATCH 51/97] SCRUM-144 enabling events rendering --- .../OIEDash/EventsCalendar/EventsCalendar.jsx | 2 +- .../OIEDash/EventsCalendar/Month/Month.jsx | 35 +++++++++++++++++-- .../OIEDash/EventsCalendar/Month/Month.scss | 19 +++++++--- 3 files changed, 49 insertions(+), 7 deletions(-) diff --git a/frontend/src/pages/OIEDash/EventsCalendar/EventsCalendar.jsx b/frontend/src/pages/OIEDash/EventsCalendar/EventsCalendar.jsx index 806b3fc7..16faa99f 100644 --- a/frontend/src/pages/OIEDash/EventsCalendar/EventsCalendar.jsx +++ b/frontend/src/pages/OIEDash/EventsCalendar/EventsCalendar.jsx @@ -18,7 +18,7 @@ function EventsCalendar({expandedClass}){ return (
    -

    Events Calendar

    +

    December 2024

    diff --git a/frontend/src/pages/OIEDash/EventsCalendar/Month/Month.jsx b/frontend/src/pages/OIEDash/EventsCalendar/Month/Month.jsx index c92252d2..51e38956 100644 --- a/frontend/src/pages/OIEDash/EventsCalendar/Month/Month.jsx +++ b/frontend/src/pages/OIEDash/EventsCalendar/Month/Month.jsx @@ -1,5 +1,6 @@ import React, { useEffect, useState } from 'react'; import './Month.scss'; +import { useFetch } from '../../../../hooks/useFetch'; const getDaysInMonth = (month, year) => { return new Date(year, month, 0).getDate(); @@ -9,13 +10,25 @@ const getFirstDayOfWeek = (month, year) => { return new Date(year, month - 1, 1).getDay(); // Subtract 1 from the month }; -function Month({ height, month=11, year=2024 }){ +function Month({ height, month=12, year=2024 }){ + const url = `/get-events-by-month?month=${month}&year=${year}`; + const events = useFetch(url); const daysInMonth = getDaysInMonth(month, year); // Total days in the given month const firstDayOfWeek = getFirstDayOfWeek(month, year); // Starting weekday const emptyCells = Array.from({ length: firstDayOfWeek }, (_, i) => (
    )); + + //takes in a day as an integer and returns all events that occur on that day + const getEventByDay = (day) => { + if(events.loading || !events.data) return []; + return events.data.events.filter((event) => { + const eventDate = new Date(event.start_time); + console.log(eventDate.getDate()); + return eventDate.getDate() === day; + }); + } const dayCells = Array.from({ length: daysInMonth }, (_, i) => (
    @@ -23,11 +36,28 @@ function Month({ height, month=11, year=2024 }){

    {i + 1}

    - + {getEventByDay(i + 1).map((event) => ( +
    +

    {event.name}

    +
    + ))}
    )); + + + //fill in the rest of the month with empty cells + const totalCells = emptyCells.length + dayCells.length; + const remainingCells = 35 - totalCells; //refactor to be dynamic + const remainingEmptyCells = Array.from({ length: remainingCells }, (_, i) => ( +
    + )); + + useEffect(() => { + console.log(events); + }, [events]); + return(
    {/* Headers */} @@ -42,6 +72,7 @@ function Month({ height, month=11, year=2024 }){ {/* Days */} {emptyCells.concat(dayCells)} + {remainingEmptyCells}
    ) diff --git a/frontend/src/pages/OIEDash/EventsCalendar/Month/Month.scss b/frontend/src/pages/OIEDash/EventsCalendar/Month/Month.scss index 6d864903..b244fbe2 100644 --- a/frontend/src/pages/OIEDash/EventsCalendar/Month/Month.scss +++ b/frontend/src/pages/OIEDash/EventsCalendar/Month/Month.scss @@ -5,7 +5,7 @@ display:grid; grid-template-columns: repeat(7, 1fr); width:100%; - height:30px; + height:40px; box-sizing: border-box; border-right: 1px solid var(--lighterborder); border-bottom: 1px solid var(--lighterborder); @@ -19,7 +19,6 @@ border-radius: 0 10px 0 0 ; } - .day{ box-sizing: border-box; @@ -28,6 +27,7 @@ justify-content: center; border-top: 1px solid var(--lighterborder); border-left: 1px solid var(--lighterborder); + } p{ @@ -40,8 +40,8 @@ } } .calendar{ - height:calc(100% - 30px); - max-height:calc(100% - 30px); + height:calc(100% - 40px); + max-height:calc(100% - 40px); display:grid; grid-template-columns: repeat(7, 1fr); box-sizing: border-box; @@ -55,6 +55,8 @@ border-bottom: 1px solid var(--lighterborder); border-right: 1px solid var(--lighterborder); background-color: var(--lightest); + flex-direction: column; + gap:5px; .day-header{ width:100%; @@ -67,6 +69,15 @@ color: var(--text); } } + + .events{ + display: flex; + flex-direction: column; + gap:3px; + .event{ + margin:0; + } + } &.is-disabled{ background-color: var(--light); } From 26f1523eee1a3f34b28dc14c166ff0a26dc9adb1 Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Wed, 4 Dec 2024 12:22:49 -0500 Subject: [PATCH 52/97] SCRUM-144 event row restructure --- frontend/src/components/Switch/Switch.jsx | 8 +++- .../OIEDash/EventsCalendar/EventsCalendar.jsx | 9 ++++- .../OIEDash/EventsCalendar/Month/Month.jsx | 40 +++++++++---------- .../OIEDash/EventsCalendar/Month/Month.scss | 28 +++++++++++-- .../OIEDash/EventsCalendar/Week/Week.jsx | 0 .../OIEDash/EventsCalendar/Week/Week.scss | 0 6 files changed, 58 insertions(+), 27 deletions(-) create mode 100644 frontend/src/pages/OIEDash/EventsCalendar/Week/Week.jsx create mode 100644 frontend/src/pages/OIEDash/EventsCalendar/Week/Week.scss diff --git a/frontend/src/components/Switch/Switch.jsx b/frontend/src/components/Switch/Switch.jsx index f4d50d75..66523e3e 100644 --- a/frontend/src/components/Switch/Switch.jsx +++ b/frontend/src/components/Switch/Switch.jsx @@ -1,7 +1,7 @@ import React, { useState, useRef, useEffect } from 'react'; import './Switch.css'; -function Switch({ options, onChange }) { +function Switch({ options, onChange, selectedPass, setSelectedPass}) { const [selected, setSelected] = useState(0); const optionRefs = useRef([]); const containerRef = useRef(null); @@ -22,15 +22,21 @@ function Switch({ options, onChange }) { } }, [selected]); + useEffect(() => { + setSelected(selectedPass); + }, [selectedPass]); + const handleClick = (index) => { if(options.length === 2){ if(index === selected){ setSelected(selected === 0 ? 1 : 0); onChange(selected === 0 ? 1 : 0); + setSelectedPass(selected === 0 ? 1 : 0); return; } } setSelected(index); + setSelectedPass(index); onChange(index); if (optionRefs.current[index] && containerRef.current) { const containerRect = containerRef.current.getBoundingClientRect(); diff --git a/frontend/src/pages/OIEDash/EventsCalendar/EventsCalendar.jsx b/frontend/src/pages/OIEDash/EventsCalendar/EventsCalendar.jsx index 16faa99f..5260abaa 100644 --- a/frontend/src/pages/OIEDash/EventsCalendar/EventsCalendar.jsx +++ b/frontend/src/pages/OIEDash/EventsCalendar/EventsCalendar.jsx @@ -15,16 +15,21 @@ function EventsCalendar({expandedClass}){ } },[contentRef.current]); + const changeToWeek = (week) => { + console.log(week); + setView(1); + } + return (

    December 2024

    - +
    { - view === 0 && + view === 0 && }
    diff --git a/frontend/src/pages/OIEDash/EventsCalendar/Month/Month.jsx b/frontend/src/pages/OIEDash/EventsCalendar/Month/Month.jsx index 51e38956..cf37bfa2 100644 --- a/frontend/src/pages/OIEDash/EventsCalendar/Month/Month.jsx +++ b/frontend/src/pages/OIEDash/EventsCalendar/Month/Month.jsx @@ -10,7 +10,7 @@ const getFirstDayOfWeek = (month, year) => { return new Date(year, month - 1, 1).getDay(); // Subtract 1 from the month }; -function Month({ height, month=12, year=2024 }){ +function Month({ height, month = 12, year = 2024, changeToWeek }) { const url = `/get-events-by-month?month=${month}&year=${year}`; const events = useFetch(url); const daysInMonth = getDaysInMonth(month, year); // Total days in the given month @@ -20,16 +20,14 @@ function Month({ height, month=12, year=2024 }){
    )); - //takes in a day as an integer and returns all events that occur on that day const getEventByDay = (day) => { - if(events.loading || !events.data) return []; + if (events.loading || !events.data) return []; return events.data.events.filter((event) => { const eventDate = new Date(event.start_time); - console.log(eventDate.getDate()); return eventDate.getDate() === day; }); - } - + }; + const dayCells = Array.from({ length: daysInMonth }, (_, i) => (
    @@ -45,21 +43,22 @@ function Month({ height, month=12, year=2024 }){
    )); - - - //fill in the rest of the month with empty cells + // Fill in remaining empty cells const totalCells = emptyCells.length + dayCells.length; - const remainingCells = 35 - totalCells; //refactor to be dynamic + const remainingCells = Math.ceil(totalCells / 7) * 7 - totalCells; // Ensure a complete grid const remainingEmptyCells = Array.from({ length: remainingCells }, (_, i) => (
    )); - useEffect(() => { - console.log(events); - }, [events]); + // Group cells into rows + const allCells = [...emptyCells, ...dayCells, ...remainingEmptyCells]; + const rows = []; + for (let i = 0; i < allCells.length; i += 7) { + rows.push(allCells.slice(i, i + 7)); + } - return( -
    + return ( +
    {/* Headers */}
    {["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"].map((day) => ( @@ -69,13 +68,14 @@ function Month({ height, month=12, year=2024 }){ ))}
    - - {/* Days */} - {emptyCells.concat(dayCells)} - {remainingEmptyCells} + {rows.map((row, rowIndex) => ( +
    changeToWeek(rowIndex)}> + {row} +
    + ))}
    - ) + ); } export default Month; \ No newline at end of file diff --git a/frontend/src/pages/OIEDash/EventsCalendar/Month/Month.scss b/frontend/src/pages/OIEDash/EventsCalendar/Month/Month.scss index b244fbe2..cc12cf8b 100644 --- a/frontend/src/pages/OIEDash/EventsCalendar/Month/Month.scss +++ b/frontend/src/pages/OIEDash/EventsCalendar/Month/Month.scss @@ -43,10 +43,21 @@ height:calc(100% - 40px); max-height:calc(100% - 40px); display:grid; - grid-template-columns: repeat(7, 1fr); box-sizing: border-box; // border-top: 1px solid var(--lightborder); border-left: 1px solid var(--lighterborder); + grid-template-rows: repeat(5, 1fr); + + &__row{ + display:grid; + grid-template-columns: repeat(7, 1fr); + cursor: pointer; + &:hover{ + .calendar__day{ + background-color: var(--lighter); + } + } + } &__day{ display:flex; @@ -75,7 +86,11 @@ flex-direction: column; gap:3px; .event{ + padding: 3px 10px; margin:0; + p{ + font-weight: 400; + } } } &.is-disabled{ @@ -83,9 +98,14 @@ } } - &__day:last-child{ - border-radius: 0 0 10px 0; + &__row:last-child{ + .calendar__day:first-child{ + border-radius: 0 0 0 10px; + } + .calendar__day:last-child{ + border-radius: 0 0 10px 0; + } + } - } } \ No newline at end of file diff --git a/frontend/src/pages/OIEDash/EventsCalendar/Week/Week.jsx b/frontend/src/pages/OIEDash/EventsCalendar/Week/Week.jsx new file mode 100644 index 00000000..e69de29b diff --git a/frontend/src/pages/OIEDash/EventsCalendar/Week/Week.scss b/frontend/src/pages/OIEDash/EventsCalendar/Week/Week.scss new file mode 100644 index 00000000..e69de29b From 5fe4391aceb88929e5586ac5279e8eaff2f92b49 Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Wed, 4 Dec 2024 12:44:50 -0500 Subject: [PATCH 53/97] small tweak --- backend/schemas/event.js | 7 +++- .../components/CreateEvent/Review/Review.jsx | 15 ++++++- .../components/CreateEvent/Review/Review.scss | 2 +- frontend/src/pages/OIEDash/Dash/Dash.jsx | 12 ++++-- frontend/src/pages/OIEDash/Dash/Dash.scss | 19 ++++++++- .../OIEDash/ManageEvents/ManageEvents.jsx | 40 +++++++++++++++++-- frontend/src/pages/OIEDash/OIEDash.jsx | 2 +- .../FullEvent/OIEFullEvent.jsx | 6 ++- .../FullEvent/OIEFullEvent.scss | 3 ++ 9 files changed, 91 insertions(+), 15 deletions(-) diff --git a/backend/schemas/event.js b/backend/schemas/event.js index d98a390c..260ce77c 100644 --- a/backend/schemas/event.js +++ b/backend/schemas/event.js @@ -70,7 +70,12 @@ const eventSchema = new mongoose.Schema({ OIEAcknowledgementItems: { type: Array, default: [] - } + }, + contact:{ + type:String, + required:true, + }, + }, { timestamps: true // automatically adds 'createdAt' and 'updatedAt' fields diff --git a/frontend/src/components/CreateEvent/Review/Review.jsx b/frontend/src/components/CreateEvent/Review/Review.jsx index 7383ef75..66455888 100644 --- a/frontend/src/components/CreateEvent/Review/Review.jsx +++ b/frontend/src/components/CreateEvent/Review/Review.jsx @@ -12,6 +12,7 @@ function Review({info, visible, setInfo, onSubmit}){ const [pspeak, setPspeak] = useState(false); const [catering, setCatering] = useState(false); + const [alumni, setAlumni] = useState(false); const handleChange = (e) => { const {name} = e.target; @@ -22,6 +23,9 @@ function Review({info, visible, setInfo, onSubmit}){ case "pspeak": setPspeak(!pspeak); break; + case "alumni": + setAlumni(!alumni); + break; default: break; } @@ -70,6 +74,15 @@ function Review({info, visible, setInfo, onSubmit}){
    +
    + + +
    @@ -78,7 +91,7 @@ function Review({info, visible, setInfo, onSubmit}){ {visible &&
    -

    {pspeak || catering || info.expectedAttendance > 199 ? "request OIE approval" : "publish event"}

    +

    {pspeak || catering || info.expectedAttendance > 99 || alumni ? "request OIE approval" : "publish event"}

    diff --git a/frontend/src/components/CreateEvent/Review/Review.scss b/frontend/src/components/CreateEvent/Review/Review.scss index 52df3ddc..f38bda9d 100644 --- a/frontend/src/components/CreateEvent/Review/Review.scss +++ b/frontend/src/components/CreateEvent/Review/Review.scss @@ -57,6 +57,7 @@ label{ font-family: 'Inter'; font-weight:500; + -webkit-user-select: none; user-select: none; cursor: pointer; } @@ -146,7 +147,6 @@ transition: all 0.5s; margin:0; font-size:18px; - } } diff --git a/frontend/src/pages/OIEDash/Dash/Dash.jsx b/frontend/src/pages/OIEDash/Dash/Dash.jsx index 546c3ad5..947208bf 100644 --- a/frontend/src/pages/OIEDash/Dash/Dash.jsx +++ b/frontend/src/pages/OIEDash/Dash/Dash.jsx @@ -5,7 +5,7 @@ import { getAllEvents, getOIEEvents } from '../../../components/EventsViewer/Eve import OIEEvent from '../OIEEventsComponents/Event/OIEEvent'; import { useFetch } from '../../../hooks/useFetch'; -function Dash({expandedClass}){ +function Dash({expandedClass, change}){ const [events, setEvents] = useState([]); const [pendingEvents, setPendingEvents] = useState([]); @@ -46,7 +46,10 @@ function Dash({expandedClass}){

    OIE Dashboard

    -

    events pending approval

    +
    +

    events pending approval

    + +
    { pendingEvents.map((event, index) => { @@ -60,7 +63,10 @@ function Dash({expandedClass}){
    -

    events coming up

    +
    +

    events coming up

    + +
    { events.map((event, index) => { diff --git a/frontend/src/pages/OIEDash/Dash/Dash.scss b/frontend/src/pages/OIEDash/Dash/Dash.scss index a9595697..cec9fb60 100644 --- a/frontend/src/pages/OIEDash/Dash/Dash.scss +++ b/frontend/src/pages/OIEDash/Dash/Dash.scss @@ -6,7 +6,7 @@ z-index: 1; display: flex; flex-direction: column; - gap:30px; + gap:10px; transition: padding 1s ease-in-out; &.maximized{ @@ -40,8 +40,23 @@ margin-left:10px; margin-bottom:5px; } + .approval-header{ + display: flex; + gap: 15px; + button{ + font-family: 'Inter'; + font-size: 14px; + outline:none; + border-radius: 8px; + border:none; + font-weight: 600; + padding: 5px 25px; + cursor: pointer; + height:fit-content; + } + } .content{ - padding: 10px 0 20px 0; + padding: 10px 0 10px 0; display:flex; gap:10px; overflow-x: scroll; diff --git a/frontend/src/pages/OIEDash/ManageEvents/ManageEvents.jsx b/frontend/src/pages/OIEDash/ManageEvents/ManageEvents.jsx index dc245834..3b378596 100644 --- a/frontend/src/pages/OIEDash/ManageEvents/ManageEvents.jsx +++ b/frontend/src/pages/OIEDash/ManageEvents/ManageEvents.jsx @@ -76,7 +76,7 @@ function ManageEvents({expandedClass}){
    -

    events pending approval

    +

    pending events

    { @@ -89,7 +89,7 @@ function ManageEvents({expandedClass}){ }) } { - pendingEvents.length === 0 &&
    + fetchPendingEvents.loading &&
    }
    @@ -107,7 +107,11 @@ function ManageEvents({expandedClass}){ }) } { - approvedEvents.length === 0 &&
    + fetchApprovedEvents.loading &&
    +
    + } + { + approvedEvents.length === 0 && !fetchApprovedEvents.loading &&
    }
    @@ -125,9 +129,37 @@ function ManageEvents({expandedClass}){ }) } { - rejectedEvents.length === 0 &&
    + fetchRejectedEvents.loading &&
    +
    + } + { + rejectedEvents.length === 0 && !fetchRejectedEvents.loading &&
    +
    + } + +
    +
    +
    +
    +

    other events

    +
    +
    + { + events.map((event, index) => { + return ( + + ) + }) + } + { + fetchEvents.loading &&
    +
    + } + { + events.length === 0 && !fetchRejectedEvents.loading &&
    } +
    diff --git a/frontend/src/pages/OIEDash/OIEDash.jsx b/frontend/src/pages/OIEDash/OIEDash.jsx index 700df3d7..c5bfec28 100644 --- a/frontend/src/pages/OIEDash/OIEDash.jsx +++ b/frontend/src/pages/OIEDash/OIEDash.jsx @@ -107,7 +107,7 @@ function OIEDash(){ { (currentPage === 0 || currentDisplay === 0) &&
    - +
    } { diff --git a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx index f16c22f1..085a8e6d 100644 --- a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx +++ b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.jsx @@ -136,10 +136,12 @@ function OIEFullEvent({ event, eventId = null, setEdited }){ ))}

    Approval requested {new Date(fullEvent.data.event.createdAt).toLocaleString('default', {weekday: 'long'})}, {new Date(fullEvent.data.event.createdAt).toLocaleString('default', {month: 'long'})} {new Date(fullEvent.data.event.createdAt).getDate()}

    +

    contact: jbliu88@gmail.com

    + }
    -

    Checklist

    + {/*

    Checklist

    {!loading && data.config.checklist.map((item, index) => (
    handleCheck(index)} > @@ -152,7 +154,7 @@ function OIEFullEvent({ event, eventId = null, setEdited }){
    ))} -
    + */} diff --git a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss index 06affe89..75cf6dc3 100644 --- a/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss +++ b/frontend/src/pages/OIEDash/OIEEventsComponents/FullEvent/OIEFullEvent.scss @@ -137,6 +137,9 @@ font-weight: 400; font-family: "Inter"; } + .contact{ + font-weight:600; + } } .checklist{ display: flex; From 7e39f28eecf7ba3d439570004de312ec40e5d9be Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Wed, 4 Dec 2024 13:21:33 -0500 Subject: [PATCH 54/97] fixing small error --- backend/schemas/event.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/backend/schemas/event.js b/backend/schemas/event.js index 260ce77c..eac0e3c1 100644 --- a/backend/schemas/event.js +++ b/backend/schemas/event.js @@ -75,8 +75,6 @@ const eventSchema = new mongoose.Schema({ type:String, required:true, }, - - }, { timestamps: true // automatically adds 'createdAt' and 'updatedAt' fields }); From dd16036f58524b5461f5dfbda924794d36a071f0 Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Wed, 4 Dec 2024 13:26:04 -0500 Subject: [PATCH 55/97] small fix --- backend/schemas/event.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/schemas/event.js b/backend/schemas/event.js index eac0e3c1..ec14a9a7 100644 --- a/backend/schemas/event.js +++ b/backend/schemas/event.js @@ -73,7 +73,7 @@ const eventSchema = new mongoose.Schema({ }, contact:{ type:String, - required:true, + required:false, }, }, { timestamps: true // automatically adds 'createdAt' and 'updatedAt' fields From 652c7ee3a7eddf27660730c172dafd546461fd91 Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Thu, 5 Dec 2024 12:39:51 -0500 Subject: [PATCH 56/97] SCRUM-54 extending session length --- backend/middlewares/verifyToken.js | 7 +++++++ backend/routes/authRoutes.js | 2 +- backend/services/userServices.js | 6 +++--- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/backend/middlewares/verifyToken.js b/backend/middlewares/verifyToken.js index 3d51cffc..fdff18fd 100644 --- a/backend/middlewares/verifyToken.js +++ b/backend/middlewares/verifyToken.js @@ -8,6 +8,13 @@ const verifyToken = (req, res, next) => { jwt.verify(token, process.env.JWT_SECRET, (err, decodedToken) => { if (err) return res.sendStatus(403); // if the token is not valid + if (decodedToken && decodedToken.exp) { + const currentTime = Math.floor(Date.now() / 1000); // Current time in seconds + const timeLeft = decodedToken.exp - currentTime; // Time left in seconds + const hoursLeft = (timeLeft / 3600).toFixed(2); // Convert to hours and format to 2 decimal places + + console.debug(`Token has ${hoursLeft} hours left until expiration.`); + } req.user = decodedToken; next(); }); diff --git a/backend/routes/authRoutes.js b/backend/routes/authRoutes.js index 5c91a010..0a9e9ad4 100644 --- a/backend/routes/authRoutes.js +++ b/backend/routes/authRoutes.js @@ -78,7 +78,7 @@ router.post('/register', async (req, res) => { await user.save(); // Generate a token for the new user - const token = jwt.sign({ userId: user._id, roles: user.roles }, process.env.JWT_SECRET, { expiresIn: '1h' }); + const token = jwt.sign({ userId: user._id, roles: user.roles }, process.env.JWT_SECRET, { expiresIn: '5d' }); console.log(`POST: /register new user ${username}`); sendDiscordMessage(`New user registered`, `user ${username} registered`, "newUser"); // Send the token to the client diff --git a/backend/services/userServices.js b/backend/services/userServices.js index c365554b..f24babe7 100644 --- a/backend/services/userServices.js +++ b/backend/services/userServices.js @@ -52,7 +52,7 @@ async function registerUser({ username, email, password }) { }); await user.save(); - const token = jwt.sign({ userId: user._id, roles:user.roles }, process.env.JWT_SECRET, { expiresIn: '12h' }); + const token = jwt.sign({ userId: user._id, roles:user.roles }, process.env.JWT_SECRET, { expiresIn: '5d' }); return { user, token }; } @@ -77,7 +77,7 @@ async function loginUser({ email, password }) { throw new Error('Invalid credentials'); } delete user.password; - const token = jwt.sign({ userId: user._id, roles: user.roles }, process.env.JWT_SECRET, { expiresIn: '12h' }); + const token = jwt.sign({ userId: user._id, roles: user.roles }, process.env.JWT_SECRET, { expiresIn: '5d' }); return { user, token }; } @@ -124,7 +124,7 @@ async function authenticateWithGoogle(code, isRegister = false, url) { sendDiscordMessage(`New user registered`, `user ${user.username} registered`, "newUser"); } - const jwtToken = jwt.sign({ userId: user._id, roles: user.roles }, process.env.JWT_SECRET, { expiresIn: '12h' }); + const jwtToken = jwt.sign({ userId: user._id, roles: user.roles }, process.env.JWT_SECRET, { expiresIn: '5d' }); return { user, token: jwtToken }; } From 4a35b773675655dbd7e5f039240c696fc15d9be1 Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Thu, 5 Dec 2024 12:40:11 -0500 Subject: [PATCH 57/97] SCRUM-54 removing debug steps --- backend/middlewares/verifyToken.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/backend/middlewares/verifyToken.js b/backend/middlewares/verifyToken.js index fdff18fd..eeb7f33c 100644 --- a/backend/middlewares/verifyToken.js +++ b/backend/middlewares/verifyToken.js @@ -8,13 +8,13 @@ const verifyToken = (req, res, next) => { jwt.verify(token, process.env.JWT_SECRET, (err, decodedToken) => { if (err) return res.sendStatus(403); // if the token is not valid - if (decodedToken && decodedToken.exp) { - const currentTime = Math.floor(Date.now() / 1000); // Current time in seconds - const timeLeft = decodedToken.exp - currentTime; // Time left in seconds - const hoursLeft = (timeLeft / 3600).toFixed(2); // Convert to hours and format to 2 decimal places + // if (decodedToken && decodedToken.exp) { + // const currentTime = Math.floor(Date.now() / 1000); // Current time in seconds + // const timeLeft = decodedToken.exp - currentTime; // Time left in seconds + // const hoursLeft = (timeLeft / 3600).toFixed(2); // Convert to hours and format to 2 decimal places - console.debug(`Token has ${hoursLeft} hours left until expiration.`); - } + // console.debug(`Token has ${hoursLeft} hours left until expiration.`); + // } req.user = decodedToken; next(); }); From 89f1b58dcf573707f5905037b527204149760290 Mon Sep 17 00:00:00 2001 From: Phoenix Keck Date: Tue, 22 Oct 2024 16:21:17 -0400 Subject: [PATCH 58/97] SCRUM-116 added get history and delete history routes --- backend/routes/dataRoutes.js | 44 +++++++++++++++++++++++++++++++++ backend/schemas/studyHistory.js | 2 +- 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/backend/routes/dataRoutes.js b/backend/routes/dataRoutes.js index 43f8b48a..40a82f66 100644 --- a/backend/routes/dataRoutes.js +++ b/backend/routes/dataRoutes.js @@ -3,6 +3,7 @@ const Classroom = require('../schemas/classroom.js'); const Schedule = require('../schemas/schedule.js'); const Rating = require('../schemas/rating.js'); const User = require('../schemas/user.js'); +const History = require('../schemas/studyHistory.js'); const Report = require('../schemas/report.js'); const { verifyToken, verifyTokenOptional } = require('../middlewares/verifyToken'); const { sortByAvailability } = require('../helpers.js'); @@ -261,5 +262,48 @@ router.get('/get-recommendation', verifyTokenOptional, async (req, res) => { } }); +router.get("/get-history", verifyToken, async (req,res) => { + const userId = req.user.userId; + try{ + //takes in user id, returns all study history objects associated with user + const getHistory = await History.find({ user_id : userId }); + + if(getHistory){ + console.log(`GET: /get-history`); + return res.status(200).json({success: true, message: 'History grabbed', data: getHistory}); + } else { + return res.status(404).json({ success: false, message: 'Could not get history' }); + } + + } catch(error){ + console.log(`GET: /get-history failed`, error); + return res.status(500).json({ success: false, message: 'Error finding user', error: error.message }); + } +}); + + +router.delete("/delete-history",verifyToken, async (req,res)=>{ + // takes in study history id and deletes object + const histId = req.body.histId; + try{ + const deleteHist = await History.deleteOne({ _id: histId}); + //check if successful, if success, return success status, if not, return 404 + //if deleted acount =0 then return 404 + + if (deleteHist.deletedCount!==0){ + console.log(`DELETE: /delete-history`); + return res.status(200).json({success: true, message: 'History sucessfully deleted', data: deleteHist}); + } else { + return res.status(404).json({ success: false, message: 'Could not delete history' }); + } + + + }catch(error){ + console.log(`DELETE: /delete-history failed`, error); + return res.status(500).json({ success: false, message: 'Error finding user', error: error.message }); + } +}); + + module.exports = router; diff --git a/backend/schemas/studyHistory.js b/backend/schemas/studyHistory.js index eda6bd7b..ba7ec065 100644 --- a/backend/schemas/studyHistory.js +++ b/backend/schemas/studyHistory.js @@ -10,7 +10,7 @@ const studyHistory = new Schema({ user_id: { type: Schema.Types.ObjectId, required: true, - ref: 'User' + ref: 'User' }, start_time: { type: Date, From d829206b9675e23c39e9f0ef0fe400253bc120af Mon Sep 17 00:00:00 2001 From: Phoenix Keck Date: Fri, 25 Oct 2024 17:23:25 -0400 Subject: [PATCH 59/97] SCRUM-125 Club, Members, Followers Schema Created --- backend/schemas/club.js | Bin 0 -> 1452 bytes backend/schemas/clubFollowers.js | Bin 0 -> 876 bytes backend/schemas/clubMember.js | 25 +++++++++++++++++++++++++ 3 files changed, 25 insertions(+) create mode 100644 backend/schemas/club.js create mode 100644 backend/schemas/clubFollowers.js create mode 100644 backend/schemas/clubMember.js diff --git a/backend/schemas/club.js b/backend/schemas/club.js new file mode 100644 index 0000000000000000000000000000000000000000..987685f2958637938ff8d95221352104cfefc763 GIT binary patch literal 1452 zcmc&!O;5r=5PfG8|3h!Z#Nb`S!N|qL#6-GYRhY1;12 z&c~a#GxPHuA;Sy>N(7ji^@QJyl9-YX-<+!tERdL03*nAlh%;Q_6en=KJ#zO-+bM=? zPfh=AxH`3mrk4mQW50NsLN%l3CI7C67QPIMfO0+7c7QptXBabwly(FDg=)g}Wy8kW zmZ)f@bHylWpD^YG=UxP>?Q=9TRpgEF#utA_m+;fR_A5i8D|@e*?v|BKE=J~uUy zY>*WuN1tz-rOVwlGs?+z#moa-@CneTBqo;&-o}t?ortZNyMj`!YN@JFoWwkrW`$>u zPa9Dh+Zy%x-+yD`drY6gP%@W3>sns6s6yfjP1UGwBA(^k`|<64x=byp8RMOPD^}Xn z>~x>1o@4Iwp4I+FtBANPXFb}>Q$b0WsKtiP9*8gFNq{^4BXd$$j*I9JOX46k-R@fK z%PV8Qsq6A1Z{F?9HhSxRD$s_T;VnkY#EpFjt?jA5Eyf02h$oYiZp`()GCN6Do0+AZ zUUzogkP}TEO~Bo$C5h@Mg{Gm^RlV4Lc5_!1S$V;=ot27Ndr}R?M!FLF~NeU$oVCj`0c;$udwP>39L)+9OOBLy>t7kWf>~8b{BqVIk z&YU?jbG|+cD)uzAB<$SzQQt~PDP*Cy*69_)vpZ#^qqvkQbIv)#XS>zklX7?5_e?Q= zjvv!8#4HsWH*YeImd^W=8 z%USj}4LLVrdQnuNnO%!-7StNJ!l`vtTj@8-{5xagYNuTGiqnAm6lEH>rTQQBwdxiB z-q-2JN7eQ)GA6_hnrMp22=(_plgHz%M%dtTtE{VGRHKw9 RO5Wt0O8afq;exT&Ip6wjg}(p* literal 0 HcmV?d00001 diff --git a/backend/schemas/clubMember.js b/backend/schemas/clubMember.js new file mode 100644 index 00000000..d67003eb --- /dev/null +++ b/backend/schemas/clubMember.js @@ -0,0 +1,25 @@ +const mongoose = require('mongoose'); +const Schema = mongoose.Schema; + +const memberSchema = new Schema({ + club_id: { + type: Schema.Types.ObjectId, + required: true, + ref: 'Club' + }, + user_id: { + type: Schema.Types.ObjectId, + required: true, + ref: 'User' + }, + status: { + //Ranking in club + type: Number, + required:true, + } +}); + + +const ClubMember = mongoose.model('Ratings', memberSchema, 'ratings'); + +module.exports = ClubMember; \ No newline at end of file From 10663e4ccc15fd9245ca3b5041c9a8414afb424a Mon Sep 17 00:00:00 2001 From: Phoenix Keck Date: Mon, 4 Nov 2024 16:09:38 -0500 Subject: [PATCH 60/97] Get/Create/Edit/Delete Clubs --- backend/routes/clubRoutes.js | Bin 0 -> 13012 bytes backend/schemas/clubFollowers.js | Bin 876 -> 878 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 backend/routes/clubRoutes.js diff --git a/backend/routes/clubRoutes.js b/backend/routes/clubRoutes.js new file mode 100644 index 0000000000000000000000000000000000000000..69ce2942a9933eefcf0281a906001caee6425a46 GIT binary patch literal 13012 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 delta 10 ScmaFI_J(c3p^ZmYF#!M`rUhC6 From ad83732ca5507ba220a1bda934394118583d4ac8 Mon Sep 17 00:00:00 2001 From: Phoenix Keck Date: Mon, 4 Nov 2024 16:13:37 -0500 Subject: [PATCH 61/97] SCRUM-125 Get/Create/Edit/Delete Clubs --- backend/routes/clubRoutes.js | Bin 13012 -> 13058 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/backend/routes/clubRoutes.js b/backend/routes/clubRoutes.js index 69ce2942a9933eefcf0281a906001caee6425a46..5c0f3a4fd38abba7854866fe53b98f1398c575fe 100644 GIT binary patch delta 78 zcmcbT+LX58AG0Yh0~don5IQq>Ft`FqZw3VhPX;$I83H838T=W7fTF<+x?r9ogAarE W=C91zf|E-WL?%hFZ0->Ckp%#C>JUNz delta 25 hcmZolyOO%$AM<7#mL$Q+*VqLnUt*WoyiL?c766h*3M2pk From 6c436ad819e908733f7871fc536e0824af7ec804 Mon Sep 17 00:00:00 2001 From: Phoenix Keck Date: Wed, 6 Nov 2024 09:47:39 -0500 Subject: [PATCH 62/97] SCRUM-125 Get/Create/Edit/Delete Clubs fixed errors --- backend/app.js | 1 + backend/routes/clubRoutes.js | Bin 13058 -> 7166 bytes backend/schemas/club.js | Bin 1452 -> 755 bytes backend/schemas/clubFollowers.js | Bin 878 -> 420 bytes backend/schemas/clubMember.js | 2 +- 5 files changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/app.js b/backend/app.js index 697c3aa1..e4d87217 100644 --- a/backend/app.js +++ b/backend/app.js @@ -68,6 +68,7 @@ const ratingRoutes = require('./routes/ratingRoutes.js'); const searchRoutes = require('./routes/searchRoutes.js'); const eventRoutes = require('./routes/eventRoutes.js'); const oieRoutes = require('./routes/oie-routes.js'); +const clubRoutes = require('./routes/clubRoutes.js'); app.use(authRoutes); app.use(dataRoutes); diff --git a/backend/routes/clubRoutes.js b/backend/routes/clubRoutes.js index 5c0f3a4fd38abba7854866fe53b98f1398c575fe..25402f37f06b496cad870e9cbbed9a8e14279a54 100644 GIT binary patch literal 7166 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 Rm;mwou;;G$-xNdXe*kGg0RR91 diff --git a/backend/schemas/club.js b/backend/schemas/club.js index 987685f2958637938ff8d95221352104cfefc763..fcac4f62e3a5041ad4945c74f756e75279d09b71 100644 GIT binary patch literal 755 zcmb7C!A`?4488X&e9Mrc?%t^f1Q#SEBsNYHnzGdG0!dSxRHH)scammfY=gska-UzG z{cKCyIuFLSjkOM;1j3JA5l+|vV>h!*j;y)dpb>#{NaYEcWqX3u{W?J8$OaExbL7Uz*CPSyi3_pq9a=?jVonDbD;%SidE<&sm?3g zp0{;{)YxNZor*fHfHQ+|OC$yk(CB=mxY*MDYkoK1zb=(R7F zY%jz(vvsW`5=*bcs7947;=3MJ2GNJ-GYRhY1;12 z&c~a#GxPHuA;Sy>N(7ji^@QJyl9-YX-<+!tERdL03*nAlh%;Q_6en=KJ#zO-+bM=? zPfh=AxH`3mrk4mQW50NsLN%l3CI7C67QPIMfO0+7c7QptXBabwly(FDg=)g}Wy8kW zmZ)f@bHylWpD^YG=UxP>?Q=9TRpgEF#utA_m+;fR_A5i8D|@e*?v|BKE=J~uUy zY>*WuN1tz-rOVwlGs?+z#moa-@CneTBqo;&-o}t?ortZNyMj`!YN@JFoWwkrW`$>u zPa9Dh+Zy%x-+yD`drY6gP%@W3>sns6s6yfjP1UGwBA(^k`|<64x=byp8RMOPD^}Xn z>~x>1o@4Iwp4I+FtBANPXFb}>Q$b0WsKtiP9*8gFNq{^4BXd$$j*I9JOX46k-R@fK z%PV8Qsq6A1Z{F?9HhSxRD$s_T;VnkY#EpFjt?jA5Eyf02h$oYiZp`()GCN6Do0+AZ zUUzogkP}TEO~Bo$C5h@Mg{Gm^RlV4Lc5_!1S$V;=ot27Ndr}R?0;kRAZy%EZK#3w3Rz42mff`x7*VyF1X9Z~(jNy!ra3^MvY* zrLF4jN*SPAs^R4t4JnHn+Z061)JZ&`y&)4@+$#kMK&_-y1Ly_pV4%K8zl7ou(v{by z%Be3W$$oms1I5o+7=A3DAnc*a<~I`*euWRMcCgm#oU$FdvY8!y%NfxBA9F$1Wz2}N q#J%@nZ?n#(RTaoIiJ2rBjaQ#Y#$s)zhzase0*806v_+@IwD1lCrHb^`)o(Y6>~8b{BqVIk z&YU?jbG|+cRobgjt3*3@e&kz$lpqVJ>48J)g8_>l@eSEdiACjqxl0fW(l?&xBz3y|=Bh->w(1AI2Z z=gYP1ZyM#gf$4>)f~j4@Hw$VFT;bfhsx2KDGXKulxZ0^Md&OzMeTp)T+f)6I`damh zfA8z`<0R{Y*b7&Y7aF!?9Xj@vMb^xDt4tHc9-1)4WQ6+rp5gL1s{tE)Zk2U43^htT SQR)rnRP48 Date: Wed, 6 Nov 2024 17:12:31 -0500 Subject: [PATCH 63/97] SCRUM-125 Added Profanity Blockers --- backend/routes/clubRoutes.js | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/backend/routes/clubRoutes.js b/backend/routes/clubRoutes.js index 25402f37..46bc541d 100644 --- a/backend/routes/clubRoutes.js +++ b/backend/routes/clubRoutes.js @@ -7,11 +7,9 @@ const Club = require('../schemas/club.js'); const Follower = require('../schemas/clubFollowers.js'); const Member = require('../schemas/clubMember.js'); const { cloudiot_v1 } = require('googleapis'); -const { clean } = require('../services/profanityFilterService'); +const { clean, isProfane } = require('../services/profanityFilterService'); -//CHECK IF IT WORKS- WALK - //Route to get a specific club by name router.get("/get-club/:id", verifyToken, async(req,res)=>{ //May eventually change login permissions @@ -40,10 +38,9 @@ try{ }); - - -router.post("/create-club", verifyToken, async(req,res)=>{ // Create a new club and store it into database +router.post("/create-club", verifyToken, async(req,res)=>{ + try { const{clubId, club_profile_image, club_description, positions, weekly_meeting } = req.body; @@ -51,26 +48,28 @@ router.post("/create-club", verifyToken, async(req,res)=>{ const userId = req.user.userId; //if club name exist fail to create - const clubExist = await Club.findOne({club_name: req.body.club_name }); - + //Check to verify if the club already exists if (clubExist){ return res.status(400).json({ success: false, message: 'Club name already exists'}); } - // Sanitize club name and description verify this right - const cleanClubName = clean(req.body.club_name); - if (!cleanClubName) { + //Check if Bad Words + if (isProfane(req.body.club_name)) { return res.status(400).json({ success: false, message: 'Club name contains inappropriate language' }); } - const cleanClubDescription = clean(req.body.club_description); + // Sanitize club name and description verify this right + const cleanClubName = clean(req.body.club_name); - if (!cleanClubDescription) { - return res.status(400).json({ success: false, message: 'Contains inappropriate language' }); + //Check if Bad Words + if (isProfane(req.body.club_description)) { + return res.status(400).json({ success: false, message: 'Description contains inappropriate language' }); } + const cleanClubDescription = clean(req.body.club_description); + const newClub = new Club({ club_name: cleanClubName, @@ -110,6 +109,7 @@ router.post("/edit-club", verifyToken, async (req, res) => { const club = await Club.findById(clubId); // Check if the club exists + console.log if (!club) { return res.status(404).json({ success: false, message: "Club not found" }); } @@ -121,8 +121,10 @@ router.post("/edit-club", verifyToken, async (req, res) => { // If club_name is provided, clean it and check for inappropriate language if (club_name) { + const cleanClubName = clean(club_name); - if (!cleanClubName) { + + if (isProfane(club_name)) { return res.status(400).json({ success: false, message: "Club name contains inappropriate language" }); } @@ -139,7 +141,8 @@ router.post("/edit-club", verifyToken, async (req, res) => { // If club_description is provided, clean it if (club_description) { const cleanClubDescription = clean(club_description); - if (!cleanClubDescription) { + + if (isProfane(club_description)) { return res.status(400).json({ success: false, message: "Description contains inappropriate language" }); } club.club_description = cleanClubDescription; From 73b9813ab74fbace14aa0e29c89c9aad0098cec0 Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Sat, 23 Nov 2024 14:06:29 -0500 Subject: [PATCH 64/97] SCRUM-125 adding small fix to add first member to club --- backend/routes/clubRoutes.js | 39 ++++++++++++++++++++--------------- backend/routes/dataRoutes.js | 1 - backend/schemas/club.js | 4 +--- backend/schemas/clubMember.js | 2 +- backend/schemas/user.js | 4 ++++ 5 files changed, 28 insertions(+), 22 deletions(-) diff --git a/backend/routes/clubRoutes.js b/backend/routes/clubRoutes.js index 46bc541d..ec6eb46c 100644 --- a/backend/routes/clubRoutes.js +++ b/backend/routes/clubRoutes.js @@ -41,14 +41,15 @@ try{ // Create a new club and store it into database router.post("/create-club", verifyToken, async(req,res)=>{ - try { - const{clubId, club_profile_image, club_description, positions, weekly_meeting } = req.body; + const{ club_name, club_profile_image, club_description, positions, weekly_meeting } = req.body; + try { + //Verify user and have their clubs saved under them const userId = req.user.userId; //if club name exist fail to create - const clubExist = await Club.findOne({club_name: req.body.club_name }); + const clubExist = await Club.findOne({club_name: club_name }); //Check to verify if the club already exists if (clubExist){ @@ -61,29 +62,34 @@ router.post("/create-club", verifyToken, async(req,res)=>{ } // Sanitize club name and description verify this right - const cleanClubName = clean(req.body.club_name); + const cleanClubName = clean(club_name); //Check if Bad Words - if (isProfane(req.body.club_description)) { + if (isProfane(club_description)) { return res.status(400).json({ success: false, message: 'Description contains inappropriate language' }); } - const cleanClubDescription = clean(req.body.club_description); + const cleanClubDescription = clean(club_description); const newClub = new Club({ - - club_name: cleanClubName, - club_profile_image: req.body.club_profile_image, - club_description: cleanClubDescription, - positions: req.body.positions || ['regular', 'officer'], - weekly_meeting: req.body.weekly_meeting || null, - //Owner is the user - owner: userId - + club_name: cleanClubName, + club_profile_image: club_profile_image, + club_description: cleanClubDescription, + positions: positions || ['chair', 'officer', 'regular'], + weekly_meeting: weekly_meeting || null, + //Owner is the user + owner: userId + }); + //add new member to the club + const newMember = new Member({ + club_id: newClub._id, + user_id: userId, + role: positions[0] || 'chair', }); + const saveMember = await newMember.save(); //Save the club - const saveClub= await newClub.save(); + const saveClub = await newClub.save(); console.log(`POST: /create-club`); return res.status(200).json({ success: true, message: "Club created successfully", club: saveClub }); @@ -95,7 +101,6 @@ router.post("/create-club", verifyToken, async(req,res)=>{ }); - router.post("/edit-club", verifyToken, async (req, res) => { try { const { clubId, club_profile_image, club_description, positions, weekly_meeting, club_name } = req.body; diff --git a/backend/routes/dataRoutes.js b/backend/routes/dataRoutes.js index 40a82f66..b22a0b44 100644 --- a/backend/routes/dataRoutes.js +++ b/backend/routes/dataRoutes.js @@ -184,7 +184,6 @@ router.post('/getbatch', async (req, res) => { }); - router.get('/get-recommendation', verifyTokenOptional, async (req, res) => { const userId = req.user ? req.user.userId : null; try { diff --git a/backend/schemas/club.js b/backend/schemas/club.js index fcac4f62..a45a9f27 100644 --- a/backend/schemas/club.js +++ b/backend/schemas/club.js @@ -14,13 +14,11 @@ const clubSchema= new Schema({ type: String, required: true }, - positions: { type: Array, // [regular, treasurer, secretary] required: true, - default:['regular','officer'] + default:['chair', 'officer', 'regular'] //add more complex roles, include permissions }, - weekly_meeting:{ type: Object, //Times,Data, Room Location required: false diff --git a/backend/schemas/clubMember.js b/backend/schemas/clubMember.js index 08faf67c..c35d7abf 100644 --- a/backend/schemas/clubMember.js +++ b/backend/schemas/clubMember.js @@ -13,7 +13,7 @@ const memberSchema = new Schema({ ref: 'User' }, status: { - //Ranking in club + //role index, see club schema for roles type: Number, required:true, } diff --git a/backend/schemas/user.js b/backend/schemas/user.js index c202692f..26a25fab 100644 --- a/backend/schemas/user.js +++ b/backend/schemas/user.js @@ -87,6 +87,10 @@ const userSchema = new mongoose.Schema({ type: Boolean, default: false, }, + clubAssociations: { + type: Array, + default: [], + }, roles: { type: [String], default: ['user'], From 1de85805852ff562f4c788f6d9ed3344b18389be Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Sat, 23 Nov 2024 14:13:57 -0500 Subject: [PATCH 65/97] SCRUM-125 adding club interactions --- backend/routes/clubRoutes.js | 109 +++++++++++++++++++++++++++++------ backend/schemas/user.js | 2 +- 2 files changed, 93 insertions(+), 18 deletions(-) diff --git a/backend/routes/clubRoutes.js b/backend/routes/clubRoutes.js index ec6eb46c..edc0d04a 100644 --- a/backend/routes/clubRoutes.js +++ b/backend/routes/clubRoutes.js @@ -47,25 +47,22 @@ router.post("/create-club", verifyToken, async(req,res)=>{ //Verify user and have their clubs saved under them const userId = req.user.userId; - - //if club name exist fail to create - const clubExist = await Club.findOne({club_name: club_name }); - + const user = await User.find({_id: userId}); + if(!user){ + return res.status(404).json({ success: false, message: 'User not found' }); + } + + const clubExist = await Club.findOne({club_name: club_name }); //Check to verify if the club already exists if (clubExist){ return res.status(400).json({ success: false, message: 'Club name already exists'}); } - - //Check if Bad Words - if (isProfane(req.body.club_name)) { + if (isProfane(req.body.club_name)) { //Check if Bad Words return res.status(400).json({ success: false, message: 'Club name contains inappropriate language' }); } - // Sanitize club name and description verify this right - const cleanClubName = clean(club_name); - - //Check if Bad Words - if (isProfane(club_description)) { + const cleanClubName = clean(club_name); // Sanitize club name and description verify this right + if (isProfane(club_description)) { //Check if Bad Words return res.status(400).json({ success: false, message: 'Description contains inappropriate language' }); } @@ -80,16 +77,19 @@ router.post("/create-club", verifyToken, async(req,res)=>{ //Owner is the user owner: userId }); - //add new member to the club - const newMember = new Member({ + + const newMember = new Member({ //add new member to the club club_id: newClub._id, user_id: userId, role: positions[0] || 'chair', }); - const saveMember = await newMember.save(); - //Save the club - const saveClub = await newClub.save(); + await newMember.save(); + + user.clubsAssociations.push(newClub._id); + await user.save(); + + const saveClub = await newClub.save(); //Save the club console.log(`POST: /create-club`); return res.status(200).json({ success: true, message: "Club created successfully", club: saveClub }); @@ -209,5 +209,80 @@ try { } }); +router.post("/follow-club/:clubId", verifyToken, async(req,res)=>{ + try { + const { clubId } = req.params; + const userId = req.user.userId; + + const club = await Club.findById(clubId); + + //Check if the club exists + if (!club) { + return res.status(404).json({ success: false, message: "Club not found" }); + } + + const alreadyFollowing = await Follower.findOne({ user_id: userId, club_id: clubId }); //Check if the user is already following the club + if (alreadyFollowing) { + return res.status(400).json({ success: false, message: "You are already following this club" }); + } + + const newFollower = new Follower({ + user_id: userId, + club_id: clubId + }); + await newFollower.save(); + + console.log(`POST: /follow-club`); + res.json({ success: true, message: "Club followed successfully" }); + + } catch (error) { + console.log(`POST: /follow-club failed`, error); + return res.status(500).json({ success: false, message: "Error following club", error: error.message }); + } +}); + +router.post("/unfollow-club/:clubId", verifyToken, async(req,res)=>{ + try { + const { clubId } = req.params; + const userId = req.user.userId; + + const club = await Club.findById(clubId); + + //Check if the club exists + if (!club) { + return res.status(404).json({ success: false, message: "Club not found" }); + } + + const follower = await Follower.findOne({ user_id: userId, club_id: clubId }); //Check if the user is already following the club + if (!follower) { + return res.status(400).json({ success: false, message: "You are not following this club" }); + } + + await Follower.findByIdAndDelete(follower._id); + + console.log(`POST: /unfollow-club`); + res.json({ success: true, message: "Club unfollowed successfully" }); + + } catch (error) { + console.log(`POST: /unfollow-club failed`, error); + return res.status(500).json({ success: false, message: "Error unfollowing club", error: error.message }); + } +}); + +router.get("/get-followed-clubs", verifyToken, async(req,res)=>{ + try { + const userId = req.user.userId; + + const followedClubs = await Follower.find({ user_id: userId }).populate('club_id'); + console.log(`GET: /get-followed-clubs`); + res.json({ success: true, message: "Followed clubs retrieved successfully", clubs: followedClubs }); + + } catch (error) { + console.log(`GET: /get-followed-clubs failed`, error); + return res.status(500).json({ success: false, message: "Error retrieving followed clubs", error: error.message }); + } +}); + + module.exports = router; diff --git a/backend/schemas/user.js b/backend/schemas/user.js index 26a25fab..07569fdf 100644 --- a/backend/schemas/user.js +++ b/backend/schemas/user.js @@ -87,7 +87,7 @@ const userSchema = new mongoose.Schema({ type: Boolean, default: false, }, - clubAssociations: { + clubAssociations: { //clubs that this user has management role in type: Array, default: [], }, From 2f00edc576e617d2e9a090133ad838f346648ac8 Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Sat, 23 Nov 2024 14:16:39 -0500 Subject: [PATCH 66/97] SCRUM-125 adding member club interactions --- backend/routes/clubRoutes.js | 137 +++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) diff --git a/backend/routes/clubRoutes.js b/backend/routes/clubRoutes.js index edc0d04a..2d686bf3 100644 --- a/backend/routes/clubRoutes.js +++ b/backend/routes/clubRoutes.js @@ -283,6 +283,143 @@ router.get("/get-followed-clubs", verifyToken, async(req,res)=>{ } }); +router.get("/get-club-members/:clubId", verifyToken, async(req,res)=>{ + try { + const { clubId } = req.params; + const userId = req.user.userId; + + const club = await Club.findById(clubId); + + //Check if the club exists + if (!club) { + return res.status(404).json({ success: false, message: "Club not found" }); + } + + // Check if the user is a member of the club + const member = await Member.findOne({ club_id: clubId, user_id: userId }); + if (!member) { + return res.status(400).json({ success: false, message: "You are not a member of this club" }); + } + + const members = await Member.find({ club_id: clubId }).populate('user_id'); + console.log(`GET: /get-club-members`); + res.json({ success: true, message: "Club members retrieved successfully", members }); + + } catch (error) { + console.log(`GET: /get-club-members failed`, error); + return res.status(500).json({ success: false, message: "Error retrieving club members", error: error.message }); + } +}); + +router.post("/add-club-member/:clubId", verifyToken, async(req,res)=>{ + try { + const { clubId } = req.params; + const userId = req.user.userId; + const { user_id, role } = req.body; + + const club = await Club.findById(clubId); + //Check if the club exists + if (!club) { + return res.status(404).json({ success: false, message: "Club not found" }); + } + + // Check if the user is the owner of the club + if (club.owner.toString() !== userId) { + return res.status(400).json({ success: false, message: "You are not authorized to add members to this club" }); + } + + // Check if the user to be added is already a member + const member = await Member.findOne({ club_id: clubId, user_id: user_id }); + if (member) { + return res.status(400).json({ success: false, message: "User is already a member of this club" }); + } + + const newMember = new Member({ + club_id: clubId, + user_id, + role + }); + await newMember.save(); + + console.log(`POST: /add-club-member`); + res.json({ success: true, message: "Member added successfully" }); + + } catch (error) { + console.log(`POST: /add-club-member failed`, error); + return res.status(500).json({ success: false, message: "Error adding member", error: error.message }); + } +}); + +router.delete("/remove-club-member/:clubId", verifyToken, async(req,res)=>{ + try { + const { clubId } = req.params; + const userId = req.user.userId; + const { user_id } = req.body; + + const club = await Club.findById(clubId); + + //Check if the club exists + if (!club) { + return res.status(404).json({ success: false, message: "Club not found" }); + } + + // Check if the user is the owner of the club + if (club.owner.toString() !== userId) { + return res.status(400).json({ success: false, message: "You are not authorized to remove members from this club" }); + } + + // Check if the user to be removed is a member + const member = await Member.findOne({ club_id: clubId, user_id }); + if (!member) { + return res.status(400).json({ success: false, message: "User is not a member of this club" }); + } + + await Member.findByIdAndDelete(member._id); + + console.log(`DELETE: /remove-club-member`); + res.json({ success: true, message: "Member removed successfully" }); + + } catch (error) { + console.log(`DELETE: /remove-club-member failed`, error); + return res.status(500).json({ success: false, message: "Error removing member", error: error.message }); + } +}); + +router.post("/update-club-member/:clubId", verifyToken, async(req,res)=>{ + try { + const { clubId } = req.params; + const userId = req.user.userId; + const { user_id, role } = req.body; + + const club = await Club.findById(clubId); + + //Check if the club exists + if (!club) { + return res.status(404).json({ success: false, message: "Club not found" }); + } + + // Check if the user is the owner of the club + if (club.owner.toString() !== userId) { + return res.status(400).json({ success: false, message: "You are not authorized to update members of this club" }); + } + + // Check if the user to be updated is a member + const member = await Member.findOne({ club_id: clubId, user_id }); + if (!member) { + return res.status(400).json({ success: false, message: "User is not a member of this club" }); + } + + member.role = role; + await member.save(); + + console.log(`POST: /update-club-member`); + res.json({ success: true, message: "Member updated successfully" }); + + } catch (error) { + console.log(`POST: /update-club-member failed`, error); + return res.status(500).json({ success: false, message: "Error updating member", error: error.message }); + } +}); module.exports = router; From 45edfe695b8a74c788b0839405cc9cebced14460 Mon Sep 17 00:00:00 2001 From: AZ0228 <53315675+AZ0228@users.noreply.github.com> Date: Sat, 23 Nov 2024 19:24:42 -0500 Subject: [PATCH 67/97] SCRUM-125 finsihed club creation --- backend/migrations/version1.12.py | 31 +++ backend/routes/clubRoutes.js | 7 +- frontend/src/App.css | 26 +- frontend/src/App.js | 3 + .../assets/Inter-VariableFont_opsz,wght.ttf | Bin 0 -> 874708 bytes frontend/src/assets/fonts.css | 10 +- frontend/src/components/Report/Report.scss | 2 +- frontend/src/pages/CreateClub/CreateClub.jsx | 246 ++++++++++++++++++ frontend/src/pages/CreateClub/CreateClub.scss | 13 + 9 files changed, 332 insertions(+), 6 deletions(-) create mode 100644 backend/migrations/version1.12.py create mode 100644 frontend/src/assets/Inter-VariableFont_opsz,wght.ttf create mode 100644 frontend/src/pages/CreateClub/CreateClub.jsx create mode 100644 frontend/src/pages/CreateClub/CreateClub.scss diff --git a/backend/migrations/version1.12.py b/backend/migrations/version1.12.py new file mode 100644 index 00000000..d3fd46af --- /dev/null +++ b/backend/migrations/version1.12.py @@ -0,0 +1,31 @@ +from pymongo.mongo_client import MongoClient +from pymongo.server_api import ServerApi +import os +from dotenv import load_dotenv + +from helpers.datamigration import addNewField, updateVersion + + +# ============================== starter code ========================================== + +VERSION = 1.10 # set version here + +load_dotenv() +uri = os.environ.get('MONGO_URL_LOCAL') +database = input("Indicate which database you would like to update (d for development or p for production): ").strip() +if(database == "d"): + pass +elif (database == "p"): + sure = input("WARNING: This will effect a production database, type 'studycompass' to proceed: ").strip() + if(sure.lower() == 'studycompass'): + uri = os.environ.get('MONGO_URL') + else: + exit(1) +else: + print(f"Improper usage: invalid input {database}") + +# ===================================================================================== + +addNewField(uri, "users", {"clubAssociations" : []}) + +updateVersion(uri, VERSION) \ No newline at end of file diff --git a/backend/routes/clubRoutes.js b/backend/routes/clubRoutes.js index 2d686bf3..2f689508 100644 --- a/backend/routes/clubRoutes.js +++ b/backend/routes/clubRoutes.js @@ -47,7 +47,8 @@ router.post("/create-club", verifyToken, async(req,res)=>{ //Verify user and have their clubs saved under them const userId = req.user.userId; - const user = await User.find({_id: userId}); + const user = await User.findById({_id: userId}); + console.log(user); if(!user){ return res.status(404).json({ success: false, message: 'User not found' }); } @@ -81,12 +82,12 @@ router.post("/create-club", verifyToken, async(req,res)=>{ const newMember = new Member({ //add new member to the club club_id: newClub._id, user_id: userId, - role: positions[0] || 'chair', + status: 0, }); await newMember.save(); - user.clubsAssociations.push(newClub._id); + user.clubAssociations.push(newClub._id); await user.save(); const saveClub = await newClub.save(); //Save the club diff --git a/frontend/src/App.css b/frontend/src/App.css index 032c5d5b..b6b0c96b 100644 --- a/frontend/src/App.css +++ b/frontend/src/App.css @@ -1,4 +1,4 @@ -@import url('https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800&display=swap'); +/* @import url('https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800&display=swap'); */ :root{ --light:rgba(238, 238, 238, 1); @@ -351,4 +351,28 @@ button{ border:none; border-radius:5px; +} + +input{ + outline:none; + border:none; + padding:5px 15px; + font-family: 'Satoshi'; + font-weight:normal; + background-color: var(--light); + font-size:15px; + border-radius: 8px; +} + +textarea{ + outline:none; + border:none; + padding:5px 15px; + font-family: 'Satoshi'; + font-weight:normal; + background-color: var(--light); + font-size:15px; + border-radius: 8px; + resize:none; + } \ No newline at end of file diff --git a/frontend/src/App.js b/frontend/src/App.js index a2e677cc..b6adda8b 100644 --- a/frontend/src/App.js +++ b/frontend/src/App.js @@ -1,5 +1,6 @@ import React, { useEffect } from 'react'; import './App.css'; +import './assets/fonts.css'; import Room from './pages/Room/Room'; import Room1 from './pages/Room/Room1'; import Login from './pages/Login'; @@ -18,6 +19,7 @@ import QR from './pages/QR/QR'; import Admin from './pages/Admin/Admin'; import OIEDash from './pages/OIEDash/OIEDash'; import NewBadge from './pages/NewBadge/NewBadge'; +import CreateClub from './pages/CreateClub/CreateClub'; import { BrowserRouter as Router, Routes, Route } from 'react-router-dom'; import { AuthProvider } from './AuthContext'; import { CacheProvider } from './CacheContext'; @@ -121,6 +123,7 @@ function App() { }/> }/> }/> + }/> diff --git a/frontend/src/assets/Inter-VariableFont_opsz,wght.ttf b/frontend/src/assets/Inter-VariableFont_opsz,wght.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e31b51e3e9388ae61767c692885e5d77ff7b5346 GIT binary patch literal 874708 zcmd?ScU)A*`aeEr&hFXW!@9Jk2#AP^*iaF%D>m$1V`A*RYizM3(HL8z(Zs~W7-Niy z#*(Nps3;axR4kxkLji?F5OC?R^qt>(b{9*MdvEUjeD3%2$B%hE@8_A`o|!XqcIH3? zLWm1MK?e2g-XnBm=r8XRq6;I$r*qFi1Bb5P{QDlFa9&C1hzUK14)1z*+lJYM9QPq) z?3caX=rSZawsRXo0*VM}e5^n03FAEsgoyAb`vwke7U=fQ^aH0{@_iv&YZt|LJ%6L~ud=lRlXOf6eO0j)?yr{C}D{e!)C& z2ZWyluAVw;>6C*_KXxTT*?K~2nx-QBJg0**i8SLWk+SoqO&&ifFnZ)~2>%q}gQvm4 zb+z{>*f+vnZ`$mIOR|n+JtSo0FN8D=pEY;lc)RvWg zIpb$fp84}OS2UK95KZ*FxeFHFoH?eH2+KkUSnW0l0|R)>xE?ktEXM8$v>O zG@DHuW4ET}b~o8?itpx@Et~&j@#S$8r0cjbYknJR-=Ua@)^rVv*L}v50ROJst!ftX zOM+D-)Rv1vSzGvwC<#%vRK&n%yOq-zvXOp|ULi^mu9PT}31v>?2L_wvZ^+R8LwSK1 zv(`tQM88BcAPx#LMi~d@gI3_>azK1a^h86nbLTBsMs#rFp&;)XzO-4MSrA>yG3PDzxz6rUNO+F1d*eY|)6ImX;T-%ZjEEDT|eGP1U(dD@u-IC-m==Qz8tIF zU%H^*1fBvAeNGhY0*}KItTA_wB3@+U?SS2V;4h$*yg&2=BZf2~l((mV(aGCTfdBM` z<7WvWNXM51kai@L3?XC446>N4BAdu|a)2Bs7f395MADHK>L;|dw6diIgm!$~S=@=x z-jajWy#s;1+T1%L?`pXdaepCqMk%>FVxaHPYc{z#L9f~57QEL`eqK+?dz+$HYH1+F~2^{*X0%kxlZVEs&5W|IXXOY>|pB|2$> zO%};0NwUcb;-NI!WF-k!9=FL7+;`Yy6&a@NWs}uJtqifr8sek$vB`FjE%ihhw6DlD z1Yhy7EsTx?i~DSH&6j0ECEUf&tnTPfEoy10i=Zd2;vAdoLcGKwHrbUl68&wm8wsHq zHrbujqfs`wCgfc<*#q)>HrbPSP+L0)UXX3|5^51A8f**WO&qA7O|A`hy-oHZO@!*a z>JWF~md)Ll_zH(?a$OQ2thCAXh!RJ(1P7b!51ljH0CrduzTy(C<%dax0{>$|eURuX#4PHPV@4 zliNVQ2iWAc2p?*b+d-}_e|yN)ZPfvCfGtc%$kpxE39`4%y)$H2n;e3&$u_wQB!ba8 zm&_*P$sE#~ECioLrjv=NeH)Z-A$X9DH@EN>Hun~!wap%E9?dMs_wh%50$sb*&Sn4nbxz9q% zO%Z<~;>;&Y5qdmAk4H)`Q|}4acP;j5kQTsi5yFOAYQGS%d0d|JLX=`Y(wj_%!#>Ya z=BAdiE`aQV6kbn<*J(PmGC@MRmtXB;tnP6AOvr7UNbJwMg1qEbzb-3Z8ZmN zu+S2EA@bqzUk$@+GSSw5T$`+Yy#T#19jQ;W^w2*F(;Z=``kMyl0V*yGSY7585J|ZVtO2y021fkxr#O8J2rSu^! zP%=(FuaxZdl5^eXr5TSEgjE~IqsREzdv!#Nhb}KWw2tw(ET4J{uGO zoQ!rJV(HV_&=+2+E~tgIMHax$>r@@SH)N|m`e01=wv@}NEwB1i*NwL)p96VXTx;fI zX7sW2i_eP`1CUB}noUuT$ri2U^XU9PwQCT{+Z?6^X>Zf2rg%nh6NH(1B77#myiCvM z59$5A`0WvEDCrMs|4LeaEZZOLub2E~8Td>)5A!IW*{pNB51u!?4#8*(uDQI=UxxP~ zgAjHu)|Qh|BR*SqL9g(cleEO_7UF%zAa7yP8AmcmxxP&%f;ou_r))PUx^0bQ?VRa zDOO>nNfZ)LtxyAHg$#61)C2k{{DF-XO@IN47Qi4yYhYUi*7AyeihjTWiXp&ZirK)q zin+jd6!U=#706xjuHpmWO2yZ}ZxjcChZMg7k0~w#uPIW1X^LmSOhpbbPmu>KP?(9J z6qG2B(oSgy)G2j92c;v>S?L0FQ+fgGE9(OrDH{QsD4PLWC{a#jure6fM%feF;Wchwsa4eASD2wNjXGR5f%1Vs$r^Oz}c#Gz>ihX9M$Kl&w*d4z5pIjT>@TF zMFVfDZUS$sZUZw^CSZxG1p8@G4Xsd5RUn+0s3mt+L{I$XoaSQ2JNhAr9nGu+H26xnogQdzz|IrU^h)SU{6g? zU|&sNV1EtTTr*HJ5I9&f82FY3ZLXQEnFn01Spob|vj(_MgF0$9YxV<=YM>{YYnmIt zo0>S_1I+_qf+iLCOorad1Lb#!C@++k12@Qzfdz5_uvErd4?AKqT&neIA?9BX1O zA_j7?KMOD)5+;(9!!5!F@*7-OfASOgaEe9P!-dx7Jfw4^D;F@W?rX}Ekv%m>y0dr|g@!mVh$Yj$gj8+CYX^(VszF3X@HS+ZH}pG2|uX0<~o_Uju_j-em zCi@FJvQEs0WGxM~@SLSx!CS)K$-;A&b!H)~2}yc4h;?U;NOD0v7RnlvxpW}<%1IDb z)MI_j$wKG%{aGJ2m~5LJWZ~b~c;w_J7W;V%e~+xHY6tsT^03T}^<#eI)^cAqfCZ6d zlV`Gl%%8+9scqr+mw2+laKE&;1{=z{l4I|Q7M`@Qf(`*p>`I5wGZk!8>arW#j=0P$)sA410tB)t^E!;5Kfpb9`t+jA@v>LoM>55@HYc|yQVTD8yPS<Rug59<$LQ&@=LH)aN#3e~;6 zq%E7vR*~O^k6?@8KBRvywuH4M7w5ZL`12V$@Q&oo_S>*bsbSRr6=svX%#ApcqVp(mr zgdE(e5z#qazAmZ7{Djc2OB~pnB<`DHH|9(dw`X)>?MdQ}0@R$`-BExBA@Ms39N27b z(}F$RQCNdbBB|femPoqYcV-8qneiRkl$(VhR}X zuu(tuw&3>YnTwUVvI)fWDBYU{lcxBHCChrbLyhs;etSvo` z?1CZWDQG2IiBhk`m|sagV(+u}$=7T;rpsfjFY8Orux_jyiDqpugD-R-@E%^QBuo_Ls4_l7Q z4apv0eX?##s?dO}x8RpwUQoM{PqzN-;VyLkZk1Ui*S`;|lu69)<7Fyx8z@4)TEsLX|Iy8gAtX!1$ymZGQR!`P%84fzU~O$u(_ zY@i`q@2nOxNYcFxRUYKt{VkOh9?=bx7YgXYwp;)Nc7)fi1iQMk?GGm?b3!e zs#f~lzbvk5wELH3RernAEw1w2eQvqA?oZ*A*sX?jo}c*nMB9epU%cmWH+)}s8~^arW7I+62~FgNCy#em zcQ~1rTD$kj%v8_br;;0#C{KACLpyL76mhjjWygrvf%W!AJP8)lB8*jQTAhA;)UV0u zba$_^(^)(H8gpoJI@`25=yXB5-0r7MfzSJ$Hnn@+jYId- z@N7yGWz)0iHMLG>wU4{@IrrVj+Ue&a+SE>u3?JpyB=Y>*a+An-Euf+qTA zd;OE>xGqJ_qaU{`bBRu`Q`tP)SX(ki7c?qp7A?tb+FVU&C>LF=s!`G4s$Affebp|c zM0G8xjWX?;(MOSe{Y20F`q$5ouB>(aMpvJh>*;Rhyz3ct#q8_3&Sl=$3!RH=ae(9k zC~?mBzV6Je{&k9K+%P=Jt9K(~AWOMn^vr8|!#J=anFFi?E1usl4u+IBuq5S1k-yO= z=3-0MASS7vu0hP>Mowul$-%jvF@}+4>X=kJ!7(P&v!qT;wr8Q9g9`^A4i>itG1;{s z<@7?}oIZej&s-M{bz({a@|`*8V=4l&^|43C>r!Hq#^=xzK7Q5xwx>+(NzwD+9q+2JONw;rB`_-*~E8a)#a4W-8_PqUV z>$-t)nWA5DTxJWu^ti(QMPgi0Ku(Rg(hfN_?u2&~Gwxhz6I1ify=JbtcOEvTPwymn zX}s?gx6jwzDejoBy;IUYzs8-i_SqKD-6`w9rH*Ox>NT zj+xp!tbJyUJ6iW_`#U;^eEU024u}DOVT8s)pLVushfbM+GLEV>sTtV_C=@~qJF-cvu7>%FvR@JP!9WIlWDdC#PW zZ$-Q3G6%bR7pI(p?{&?PqX(6zfrsJ-X8q)<*&9-j5QxJac)J(BqlYqbIGNyFN;71uFnjYYuJU zk=8oh<jy!kt#PRSEZ+rMV>B<1rq37P}-o+X|29OIoc2qZ?8&)=YEfP&2{k3CMOv(XtyMT&{hgTS8vVl$r_o&MCDM z3M;bfClpq3XqxSkP!gJEpHNYOa21^Zs#XBE;8QLM1IyDEBwiSi=8~A)P_5)3C8jh~ zD-sQjU`=oRRG*mT^wcLY%L`Jr)+i?yNKb2X@JTdD$v%lCp-*dY&?T12PdyS#>%=*6 za89fUP1Yq=Qbf}wX9Okc8p6#f`Dswn#Sy7`4lYSCeIccFOmR$l?vm=3lnAV;PiOFErZh&{?vW)q`gUe zlGZfI15oDjq()kbv% zT@#ZXlHE)+C)qz5Qs~BHhZLmSCdJ_Tq;*PVzhsSJU5HCx!`VSKn;N2a_r0s2;p-f9`DWs((hCWoLCASh(X+rbo{nGjL zm43TfhC_NnEeFnSB1s z)Vy`&N>)na%IxR&nMU{gLCdFw&!0bcsl%bc^E`K@z47uWIm#G4UfJ75q=zYWlz+`S5 zq&FC|@A(&3W+%40UyyAWl+qykx#mt0hvMv9&CTMR*hWr@oV)$9PUbuql2eqE7?Ksv z;bcy7a6(Z|a!C5goHSpxBKO>iE{?g8-LBQn&64jG=04ZlF5pm@n-QfYFXOU~QpW%N=$;gFnX>?I`URXua4pI4RXP&ZGglq&N)jA}*xGq)@=2bPag z<>%+ufMia#ua|E&*!vcQdnCIToc2g`FL>gaEEWhQIbIxU74n5wq0!Jdw=g$R=~{@) za|`o4lvzcWf>?P`iCR%mT%2oXS6o~Skd1ae#d40Fw<$^v^*6>B&9asncH(6 z2m6w&zVLYN_RPMdFi~(SQKj3dOHX$+t4nWpHa9PQ;-hvgEi6>kD6KHcg=P6ltyor3 z0jMfB)h-jt3%of%sst#@b846Km0)>Zres%M>|H69^JBpG8kk3@*tXxR+Q)LO2<#hz1 zveL)mCEyRSm8CjIs#cpzsds#W9}P6zb`sNSrBX$sj{$ZzNl1`SE!_vu{W}%a+BIDm6xh3C55W8OqJ8;dY-DF`}HCf zW12Fx;2oZ?VM0-%Mp?6@Sl(+0^p_70H@b7EDWB+!gjG5k!jzD7Zz?9KHiaBpn192j^t9?$SVqg}$=P{TBP zeU6=-V{x(eYD*zs+rfB6UE{W2p{B-d|3a0H&rLe1{Pzm`XH##)*yoQ1`0FY%9PW0` z%X3H`2jJ@~2Yn6WGsp0br5OM*!_mLobjyhe6; zJ!o@%JaiUX8x;>dKD9#+l{V-xf5hv(F_Y*qiC}W+us2p8XgYPoMP*EhbB!Jw{(~zL z*yZY!=;%~4rjL`ehq^{?l4o0&gaohjCQu=HH^h5;dm9Ws zF5XY>`o{FBDc5zclNjf3FvwB<`ar`Gf9~73UQ(s5sj2R@bAj9w z@E)1JGuUxt(vm$FecI1ytjPH5ZWOkqDPNN@q!Q)FB4wEC{qXd z>c-afVs8evzgg76^{!M^aPK4krVo-DHjV$$zg4`^UmveG#3nw{n-giWKKX{vu;gUf z$B_BdJGHb{t@JNFywa0BDluX9gri0G9^??Fe@K*&rA$51YKw@jJ|*@AG6`rH2dW@F zdPI=HgAbF@qkqI`E)`W(B~lIdY*qb}1+odXf?9Khmi7Jy9X7qry6kK{isF`;>E>2y zSLIf2SK*Oqa;s}^OoFq?-#dP9u&L|gc8xDz?qCQsbue{^@7ORt1=&Op4_m8R-o$K^ z+dny_4>Vq20=YoVB+A<;-$)LEf^_gs)tSrjDAXF`$r0W=M!igodVQ>=wz9WeRVJ1R zRjgQ1R#A>=83Pi%DnoA(%-b7n?2o?GN0C7P*m%5*xAvvwJ@YC?LpC2B)&Khg3!5G> zg-$y9&5~P@aJ#1U^NkHO$hYq|eR?n7PKf_Kv`uB_qU$SJwqD9-MOxbZt-Z9Dh$I+vI8a3*`8}UctjTl`=2I-Fs z8uZ)1fyevw3GdY_s)Hd`Z@3vR-?huadLbTd2hdQjaz;6Mo#7^tu$&Wvd{*jEv_=?DO zjvyFho$ixH@$vrg7-uG9dcJ*@nHCdW1yNRBzEN4FsCpzaq7yRtb3~9B%@Zj#Q_)OS z_z{axXS3+c6e>ZXs;5lBiP%avk{LkadJqiY2vP^R^8>7kAL-uML%%(aGsvlpQ`@DP z(!4WrGpW&3Ov@!R74WKGfr(w)-r4N(+|^tw)hD?w^Eb4*-Xmi0;URlQ|2XZG<$xtm zOI*3~)BHoJkx5B*sYzKnqp={hKvQH_%f41EztkQ*MvunfVV)~S1DYQVOU-y>l<19? zBbSzU&=Dxz1@i@Rp;Npmo)|DfiX<~ZIe1a=N=+(PLCN$+|M(tc@Zk}u_(cUjuHh8# zT+18O&&k(h8`(`xk?SM_zmD<4wmd(&EA({m9q+sPWSt=}$1BGtr=7{QTsAYwBnR0J ze=2_5^Gk#w%~-^!wyuBsjy-w~8a)Z`Y%T9me~frwC}y(GJD^2ikHMpH&dQ?HA8**W zKjPBmxO+*DQ`0jtjoBsTm1aq;vD4Z+>fLJj_|^?*)vibA;1Q#zEnI|>;GJLy%&ULZ zM`x{WR$q?Q?k`<K+sSHq3gBX6&i($)?I6__0`r@+pE2toV4BP`ailN`~roN zE}#qKg&hB(X-XGpLl9P_cGtRTwc6TRA9W422M_P$$bH~n^KTeYtI|qZq7}4MtI(=> z3i;kk-pAAiv{b@Wc`$tA6(6z4{ z$)5JMx%8oL;H=HRXWl>@t9dLnwU}notEQ0zBfH8g!2{(cQsAG=2q{q8MG92c)Yj0} zQF~hbxr_ASpN+zSw*Fr-&8gJ{(Eo|?qug|{pdW2OYt!2DR*tV3Yp4JoO4i!KLUxkX z)JdkR;nE1Eu?4yG@0+_$I!fsvI-F8%2ZbZOt8jGEY1>j?>MIZ7_=*`%$I@V%X+zu4 zUNjgdcc#5?tM&_~^XNRa9ml_6=2NTTakOeBoi9(5r`g=*tF^S}pUjI?52@j+26cF8f?ts>u4)ynL0xR7?hC2fmeLs!sjJo)WKKN?Lhiw&ht(ps@5Esu|Lh{wk|oK;R(LB0V+nLUk?WN|DN@^oI@im_GJ`JSa z)LYb0lc*Kj(pl7Zue+)p)D8~L z4h~umZ7r>z+EwkKttEBVhHC3OX{?-X)OJ-nshykzCl%)~8Y{{o49p@`<}K0#(tLv?g_?&XSte zrxU3cwen816YWSl=wzKnXZPRF!KsGWT5KkYqL)}#tcN46jbR)_cd;Fs*2ltw#WrFq z8cSo<3JHp=Q~mofw5_y_9qhHuwB58pPFig*xrVm4gQK>AgPk@&>+ev*L8}ecHqd%G zNlu~@bx=4E2hl-rplV6$sg~rPw2iEjme9r8j?(829#VVh18Iq@k;l@Q>oRwmX2J98~T)#eZohI6g=i~Ty+ z1kBHvx3Sl*-dodmMK|nExv}j_ZM#6e=ff`VRJ@LKL>-!<>kg&_K z?r`|t#=4)uPDQL;y>oqSe}Yv$o;MtAYkI8HeQi(f7wcckD!HdTo3DNOy4JFSeYw)) zYgRwodhx|7(Yp3~eGMSJitz}tVSyobfvGm#=XC9^2HMMP(_}bb|nnzoSD!M?d zDLdd9$6KhO)PSzj_QdYGk?d)CKD*%A%Ad4q^bn8D*AbRftbN4MNl@#hEfxuL{Y#xz zJIRZWZUQ!;RXJ z8?A=!mK?5uex+TCiTdeG@|X!}~MiW|w!VhyPk#=>wqO`1-Z(RZYo zY8O#s@#i|a7H?-9Xeb?E?N_*?N2Nw$9kGUW^<`ak$=;GTt&kSsH2)IXLh`|SsT4cf zkNFy2ena-eN(*{y(}KyCy_7{0q}sF_Esz7O@4s+Aqz`qq?SRiqb>yLRrCdwyD|Mk) zu@)xKTCOoJTxT5g^c>7S{tn5>PTO8;s%@`zc2a8FNsYAav`#eNGNPN&WVM}xMlI3@ z@(iu)q|mmOMrm7X9WiEVOOvFAa;Vf%_Qe_Ue)3yVU%46mmM-PmCry^U)Ec@}8Y+#1 zX+xLF?s5xxraY70mWN4$@wVikJc*u>dP}|0#-G#ca(}v6?L;4mILJq@;g-=^dRE#< z?>RU*IMJWw2~vNlzdV74NmJ$VbTgg%!t9_wP@}vYc??m%(Cq(xL2Sy6yi|Ti?j?Ij zpGcqJ3951MlGo$;n*P6^-+w1XZ71B>x+k}m8)1Ymk=kPh7{kXlAMaeo+F%T?jog#3 z9PkQVl9o%$iDWroDp|^8Cu?XM?k6_K#)#if(cwn6PTSFP0GNpU3k6uV!tevZcD5O1 zr9(|VgV1#ObLk6}8R^dw3IJ)kF%&}t`V`2*2Y45E{y zk8$T^9Sx$ju=|)NkCuDO?}{xYNN{Obm4QbS&gyEI#*4bo`&ZT`+%{~`C)zlHbtwFs&4G1>yI8bAEXRgCq|RuJ3; zu4?@D{A;&gDh9!oD2^zOm`AZMsf_y?4(89zO2JcTCbTt2n3v#YOtxTej$mzthqzAg zvH1b3BaFwLlF!X)=I3MuuCJt-Gg!DViallH%vtP|@B!||3^12h$)Yb=OV%{zGUG;9^$$~XA+3e zwXmfKBwg7XLI-vi2j9E1S%Mdf!zuY+*kke)8-!~KwJg7XSblZjy=ZRBdI(x_RB0Z_ zI^ZHsabxovxGa%Ga`om(>?0I^kHL`;E1^+$tIt^$J&{*k$_D_igpyU4PMC+q0PZsB5;Gkd=_>K{fXu@8(anXN=Gukt}l4Z$6xagij5EfeOj zA&De}MS?<-39h7Bh5`R^2)`<^2Dmi5=2!$y=yxR_?XCe%$+o;7(WEWOx|BoUOUP>D zZFIP69W2nx9~T*buh=VF62<^GVpFBKkqGbqWPInFTT6^ ziTRk|J7=uffU6dlQ%8b#6KXwaZ7yIsp_6MoQ?j|j%yr|LjB69Ale@8+xQHN*8EfJF z=e5H9sM93e^F8K?dnc)*x`1~h*C%-~FBU9}IU2(1uogm#Pu~XbEwudTZRQ6>dobA1 z!dY((^T+*~;<0Adi0R4m(QQ~0sLu7bJy^=~g*8VyOASWwsU+T^JMQ^}k(3pU zSs>isPR?RMxR3KhYQkDE2U60fDd$4%uJtW^`mhS9kRN%_%ih9S2riUBfs@8OVC||N z(>Ft>unxGNGWbRo3&9}SwrnKs`8bdRLqfrulgz$1I2RndMX?^Z*YaVHh0wbJg3q8) zxDU~dlz5M2{h3VWj~R#iIwILOu`}-JxR8{keK;31?_eMye80}^*xR_YHhXdxHrAX> z_RJs7#^M^-f-w`=WLBH(n*9du&&(ou8SZQvem#tN?1)EDwYz}S?&6z)h&BKtKH*XM|&jt$ey)L*Y7D}=oH04}qohh=V=8s8#RZk54 zx5??@!Qi7v%sqSX=_KjyS+>l4MA#&SvSq9%ZafTN%Tb?w!O(wvjp&Ox-S8{sYxi=@ z4+X!qjY3#0q2AgXPPl6FWNrKnwt^hxjvj*iS>;_8LY{4@EMh}R@fX?Cac$(mR;dpz z)@DH{n@*M<3YDFoWPp=%hM|J zM7sRfJ1ud^i2d5i6L+Xi{n|&3D#rX;$J0E4t~wMKXf_F7fw5tN$Dz0Y^O4} zrX7t9z}=`(oCOH;ISUnZoH>%T-(#AxY2^3cpW36G6T)sZ!L6ztVX@8GBBAH8>owVO zl6fpQmt=xnZ)`p*tUrFO5mO6GIMWL6apoaR;;f0#owF$OyM-6sc_Fc}Qwj_;5pFteF#JayR*m#yC8te!BAvqr+3oOKoSoJ|l`aW;u; z;%pJ=cFM~hm0r(n6Up?5OZ8Et;haq)+ag$f++}JHn>kK+?{ri>q&bDN31sH!@(lJK zvDnsNXnoD^>@V!v#RgQ6uIkwEle{V=c(--xB(x zqH&+poz4c5sy%1gvSDPyBd5!_1ozoyV+ZyY`C(r`V-z_3!cX0CJ#%yMkKND+JEAMk zfo;ES@6=XMd(Q$ph*HC9r_(-~aK0*5u>;-_+VgA`fi2A56jye&g;=b{{-{ zuPOQd;Jte_$>D`QMZ=d^V1#->1%~OIr019n=Qz(-*3k>CFNo3^YX~1u)Q~$kWa#l zH+;ywV;`2~lC8(qTyISFANv^i;Mg~qx;Sdd<>MQ3a>(lAyRJ1Nr;h&wynOtq#U%{# zq43qf!{O_rYhmKq80}AvhJOiM8@@Z*Ulwur0{2G{c zvh~HjBj`+%z~xF_Q4OZCad(|e=pk=3Vv0j}jJtU6r@ zdDm%@D3fo_e1EYnW|RFF>td$(>VhxXdv+V}%d@+IYtJ44eqzDZXAeP6JZr`TGXLxl z$hXdYQr3<{oeL{*B$p%CNBWQ_kw4(W8|xzvMCyQt;IcCEC~#BcsmNr(DKZZ7s>sA- zANFP>!4&e71>-o9k-!0h&f+pB@(uV-h#Uj=Bj+?RV97oEFwrjN{&Xg`kkaH!88V$*>{AmkA!Fo>$7W@_c{ktq;$Pkdszz8&xpnqhFWRJF&WGaaN!8mq(Qj z`}q76=Sv&YyXU5FKDDsw$Yw0>`+mM|$wR--zh0Ev_w$p>9a?TF_b?6k;^cB&i!bAQ z*xlOt^R&7*x1Jo<;KtUQ-BpQSt((&6#@DBY_{DC!AC%F3o9py!mu*2KQhI&!uziD` z+Ye9Dg>8@Y%!&N=yQPlfzP%FKDCygWt<$>faO-=#+jqyhxVHQ5Sa;XfJ5LU+6T9G-(Ua0zVogfi#-nSitO$l%%RP$sD<$%y9^zYLw02~f7*PP4EQ0ehgyaj#yR*zxDz<~Sbu`Pfj$+W@EAKOg5%zs|#&`@)CTirW|6 z&mmyn)3JBk?2jK**m!@T{hihaid^G@57d+5IviZJ_*~P25$|}mI(TJ7OwV6##3cs) zx^rQ{#b0+9918q3rD>Agq1gU$frlQ2#Q7fHxaeHhBdZrnU61Tqe5?79#9lX=A3YFy zx5d%3lYeS()G7X}Ccl68ZcNkPe_s&OH0*~Nss~{|yptUic63TX^RVzYZ#afsZW7ll zEOy3?CSeaI)}mp?AXtl?i?zqXCrRPQ&d#HIkDc#)z45Wz?*i^DKgf>Zbaue8%mvr$ zAIp6oZpFm_!TEaQ%mk1oCzef;zrkgmCXGZ~I-7d?gZa2tsJQWud=W*)M61Zh}0Lm*b`$eo-bg6#C z5AOhe1CKrvoD90?v;GTzngF>G`D@5tk-Iis=G)z=J&FzC!y;^-pgc6;Pt1Kd6WH0%Lr-Tz|Bna&~4JkIoOcCp#nZL==;o()?9I6V!JM=vxw z+bQIN@42I8zID%?d+S2|bLah3P0w9@>wKNa9|k|E6M1|Yrn1vxB7-6$r$M?f2@o{_ z5IqiXZ6x5vQ$Q@)rii>X0McD=z@rer<8~Z6M0!Ui2SLi>vtm{~fN3>{<&o;ha&p-x zvQiBz;l55z0B<~gBAbjoTYUb*chA+na6r0DFWd?|>vSQ}KW@l{g5tBv3*{tkNK}HZ zaAZ_rpVK!kJ)M4zUjAaNx%~3i3p{);hfRvky?lPGSr;7@7(Vvu*?JfJuIBdtz2>!@ z6O4PWotSg3-?jJ|$K$R!_=fq#oSHylV$O^sw_>>zcgEMb@J`(9)LM7qXGJ*NeKhNr zVRw_<%ZA1ucXlNYPfS1e?9mP8@0EDg>#oD&gR`$0pL{bczQz-S*MrLBUuNujnjGF) ze>3^M@2;%mc>m)~lM`LxmKd<>1|A1_BstG3XHFRrZuS)!_r@L&GcN~T zcgp%=siD5{$>>v!bMxwcZp=@5|HmZLFW&yDl2mMpN^gd!OYx^xm;Kh=^>O9FnND>o zWBVx-Rfbt7uT_ocf%^a(gK-Qx*}brerMMSV2q*jL?rW237MAONpZHagi=kU~Ov|sm zV=62sd-*96yw#D))um23?in8G-Ugp!zhwX9CdmQGfyqJ1ZIZ1E>ktxxN6pJWtQcNe z;1>cL$7=VNF7Qx>2)z_Xz}JwV|8x4COi+TPEHXhw!E-<+P;V=}Qa+7E=HXv0_uq`K zDkMR#lClE{`vd8vVWh(gw|KHl`LAi7CCp_KCOt-6@V}%KqL*8cFiwh_|4(Tx&rg|w zwrmJ$fi}k1AXRHX?|_z~Ek9zbx&NQabrR(~$(|`JoUBxqqCNfwNjicPWB;0z1t?bm z*=yrmevPDHlnri@gVkMSAYp1-7?mB$-VZd4Oi+IY+6Vd)v;%IrR+9Fz)jS+e<6nj4 zVW=PK+mCa04Rn(pC9dGbaJS=rkmEpkATuZ*Zusq&d}VX*4Q_ya7U&xqM0SFQiJi#= zxL*@jk_qB^v~d(D5flx&1*&T$YkElc5nFAIV=afcj*R-xh?Tz@Pl>+A7w0BO=z9r$ zkFUT@ka*wUuu^qcMSIpk0bO`u|C~%xaC%_lkd@=mAAdp8aip~uezUFqinVCZKM^y( zaJxVP6+aL?zC{YZW^qDvFwUilQUMssTu3E+z^+NkslOFX9!n_2#^!>{?O6ca_B5#CS z2MQqWN?)?@-=<#>w-NN>pHVXsqHG{UzZRwl@p3?%|2K)}@h4*CuRdQe?*#oLQZ6EG zU(k1uIdQi+c&>(#HWtq1e@1T-iTkTmXeZ7Gp|5`eZG#Rxx4Ln6NnuW}4ufw_F8fT#TX%?=qg*gEJe@ByO7RjKv?nr;a^XmxsIB>|)Eb!H!EYjJ+5k`t2 zdORzpal-S!!mI6n;_s0miVL6!v~L7i57JoZ6zm|?cNX`Z_mjg*wR}8 zdpaoWCGmXN5#;k8JwrNke|p(UkWbi%$4Td9QA~Q3Q2y8K#EaW)Whz1(p3g&W7f0a# z4K!ybsHHxZFuiEFg};w5sWv)eSzAm%-y8zXA$oBLs2=);uQ`Iqdb+JzW~s2(r9rI9 zl71rEnf_zq{qQO&%ekFhv9$Rg{9X;mW$6IfsdPg48_wUU9ooD3Ekkd1G>?j-IXR;>4dfI_fdc@M<*VA$)Z zvDZ;0SV{VUeeo~D@bqdUudzt;0@gg>D2HCz7<&kmMR6L>n@vdX5NWHrPueQ-$@@ya z2N@2+{y|x3UE3?KTplqy?&&VvNhb3EN;uN23#hcK$%L&N`(pe??yfm*uU+^^Ka1q8^Zo^r=?GS z!MxND^8}~0Hr|g+fjmvQ1-#ntuedYf{vF-^pM=4C0_*dLU9s`Q;44A%@H~nJ?R$ma zg?t}=L#>=Yx7gdDd!R7vIf51V|0&pmHhg^!#+p8Zy}TLeR%%7YNi;DHN`lK+cc>i+Ab7vjw3wAh~g~%zZ3S2mNoPg z;;l#}b3||O^B9*qNI#65qCy0BCY*S-jujKE_@3QAF-s5TUtnEU^;Vb^zEyU-J#$<`&9LDhz zj9(M>NbA50!69S)xeTXPKj7uJg!>upAZ2s136ugl1NsWI6m%5yHRw2Kn@z3`_de`A z%vny<`fdpK_eeF(5`72*%>xawa{TWqtNkzCmCc0#RwCzY>2l8Lu8qRLFTO(D&sHu$ zg8U!EBbQNTQccPR7;l)1X@9Z{y0?pStS@#c+{h4h02u;#2;?aW9k`B6q0h-9&^VC6 zM$5sMi_^(xpylZIWw5^*<~2Y3Hw9n3r&>Y{SWoR2B-)Tfa#=h?K2z{_+0Dr~e$bYa zVx>?`L6FDbxv>Sb1G4)c!~e6e)D`vOgmYCGGjZZtvdcna$Pyt3WpO2gU>_tzlPTgS zWQr1VuL^a2)h^_cP2vNxi4MTLHvnyvg*MuOG$FsB8CE}w9kS?5CV>XwnKB79NZFSh z0%e0@ZDauFbP*Ky3UU9RL3=^}Nt|SHFK!g(kogw6gubI>KHeK%R1PDP@J?c1HDO#1 zQN)rV$}d6bn46xFF?i;V5%-W);t!;om`DZ)TgjXFUmoKWabylCOtBH`hW9ZyIFa2- zXT*ypr>K#oD>aw{mLZL4(Enf(DtiWV0BoPr16C$D_IVvIw!g;G_x(WL4z0cjxKKDNNta;wlSP^;LC+ zUenmfb3QL)pX2b?5-O6n*_;#Kb$*!wbzmN}wmQowtBZ``JpKO);Nj!8{@QCe9kDQgDEB~KglpVGrhfgZNPcByXJgh_n2GD~0l_uwh|;p()!4CQ%u z%phn317ZCCku<)PTFwrsA$oI`oGz`O(@h2l!{&R{T~}EBc3ix+U)wpP5UDw=VwsTBZ*)|F5Yzs|J4GDD*A9Uw(qf|MNCV zapJYAn)b;!-QWB2 z_iM~py0yP1*qiy1zg}lq(%Y;TX|vwLx($tdCT)Ixf?uzG7FWjRG_PlOAXQJ$8 z-NEc(-MUY8=l)Z$r}Q7~4+VQj^l{AJL+oJRhJ6(~AhD-n^d9Vg2IpJ%FK&~AH9@l< za4f+c>-T0o-Cqx1e`722xanpt$9n7x)^oST@ny3n?XNqV`c13>Pcv)2!J4gEXZ5+c zzIt;#)2w?Mck+Wh7^WHiX&q6|XP-K;J{Zm`|7oso*4m6aYg4zbX+?tdt6SE+BEkAn zpo2Tkro4JF`N~7t{B>&P_=9e2#a^cyoBa>-VbQ*Z2}v^I0-aQdBu|llCCS`YjXm;QA2O(~_eZ=~o63ZYKR4{hpcE zJGE$+cd_5RM>@L?GpEVGTqHH|rDpEYNE#V;+G%p6sWh=amyR~!6YX!l{jqe5JjI-% z5o;@rrHPqmM6y%&&2cw2q0yUJn=st)&;3|~Xl5VB4jRZ*zpa|^@i_YU=iqx|8Scl2 z4V!f-I~Qfm%9`&e<~jJW@1gHK##pbfKB?lbpPDsPpBsOe{@CxUP5)~8cGHiV^xGzyBtRqDW68>o!Xx4tsx@T-2Ya(VHB?zDBL(TdqX(pTYY1U-@b=O&PRx8GA5u+w?NrnMnQZ#&-G6ys?s58}`>@O@D$v`j{Pl+KF;HtS>V5pJAZR zni>7!KiTPq9^XvV!<$knx=%_a{Z5_C!Ohgw94Q<9kbZEupHKfD?Q(y`9=clWRk9v7 z!093bu&YA$b}8gNE2U#~(PJIo?S9Ucy$Vv<>_6yc- z4od-p^~#Owl(mtuZ}NMDc~2jsD{QwJ?V-63GIqR(dtql?KuY*BX{vUtFFcOlB{G>X zL;UMMNH=Y$>c@YXHnZPA8f|nQ@_Gxz-N%~Yr&q&|^8|aQcXE`uS*077@Yja5uJn{+ zru`-Lds6x^2V*{F_-hE~op2a-!{&rsj%!s=U4exAb-q_Z#{C-8qmUKIhGbX*#PwG< zVEV>CNXWJAFcP@#yRGBgk?&u_WLPTlXGXXWxe;*fua>X~xdcoFp7N9eYBg(B3G_Uv zr#HfJI1kmBFM^qa8n{0VP$ki$nZGjce@ioU=d*Fn)V*u@Vr!U+#x+PX|@v zTy0J|aIJR2tqy({z=6aW`I^ShF|K>axL+fW*WL%xx>fQ0H$PF>40?_x-Zi=-e{5meTs3&Uqv+cMb5-=owEMb1}L}hcY(#a1^GV$$8hUm+8=Q(0i(as zas2D}`6~-!lmfvRg=a_#8OZO31V8G2TxSgg8vEx;w6j~FzuE5VC_nexI3wvF2U;^( zQv#zq)qy^rdn z$!2_YV+~=Os4kMpNk?D(pj0yVRh#`mA&>N9-A5}59B?%ncw7S351IgE=IW6 z7B~ohiX;sJeybye4K3h1;CsrHkQeA@Qa%ZtU?|YHrCblxMk)oFp*Yk8!l&vBjO$aq z0UyFQa8V?66mmgXcpRRGQLqr!!ag`Dl14#hC=U2bLwV9{g#&O#BrQ5mn+-|<&hHo_Nho;MDY*DT!MvXIv-PeE^(0q?>!Uz@XQjTg zQr}tW$FgDrS-*x0BH273KiSAnHu96L4GaYImks@8+YX1}vdBH?@16`$1gb$Z=mq0p z383qHz65lg9lzPLLunx1?CqcrP~Pm6B|BxwPPuc?&E?1n*liB%HV1Z_1G~*ZJ?D56 z&{vLc;a8EINpLSb2v0x<7z%UX9ry%(f~z9A?t;SbFgye3G8g*KH4o5HF7%iiJ?2JF zx$^^cn43DxO&#XOE^_|>e~8>$85+au@E%}y_hNT>u)93iT^{T%PXp)(!(cY7guNnp zNjER)=A{nvQipjdcivCoJD}|Os>8F;8zum0ggMMjAfrL09M zYf;Ks6ulIE3fjU;fUb&_1>!D7+{Jc_6vtkR*MR15Ql!Kr!0t+7cO|jAlGt6zI?x6N z!gN>zdqhgr1oCx%en6M^qs#lzWoZl0W$BWDE=#w9{xAjJfsaHUcoH_i5x62!CJhvT zO3(BVXmnS2^-kZUtbB9BA? zn|lPicm%t61Uq_U6f6Yl_K|&XQly#!{8htWHT+e39$tcJ@Fq~F)xL#aMXD#kz3?F5 zw>o~S4~AK=3W&2haaJdPHPAgjP zg_2MUT0wunUoHIA!e6bQ;17}7=&*KPcnGk$+MNI!syz?h1^m{=Z|$ohkKF}@;bCYD z=lA5?&bK>t&(B5W0TybTP5>97K}!(pHd^$Ax$J5cxamy0}64}KMC z&{yP1?kP`Fzfbmq$*>Hzz(M$h|4|kR3_`W$r|oJ5lCNbAfVnq8y!V$O^@wI&1^(lbwGP>5>HZ!h`TM zbcZo82e7HGMd5(R3w7X2I43N%0BLq>4}*ZdqdVp8L0joD5@y0m*a=5~dh3}63IOHl z*$DaodFxdYYQnS7Q=~U>_a^S%l&3do_NF|&DNpaofWCX9@7~1O`?5%%RFDVCL46=U zeaKIr>98E|+vgzsBGNYoxdFd@@!Pi>jD|(9j;TIn?)NHu2>alqNPh*H0loDnkNsOf zUqJ8uUl$p05Bv+T!2#%Qz}Ij=?`ot_IlCVCr@V z`WZrbhl~U2W(fX32h6z;32*f-gm8knb7fdj|QQLB3~@?-}HK z2KtzZoy^2eX7&K|I`f*ytfqhs&vv0FU^la0gZ1z^oMvgvf~-&yY65wgL%!#X0P-@2 zH0GuU>R~SRGM6~#lEz%>V(w8Ooq5>GywxJ}(eZqAJij751(az%@yve(eiM0xGQC21 zU-F;1Nd_nZ=w!){@TbV@wEx%1-|J)G9FMvb1I4Z2-}?%o>nO)M!mT5o^=SYdug4zNlg@h5Sw9je*ZTKiFPvbxO&~jzhbGVmXhR#4VLx0D z*_aCQKouaajXmHDzr2$dXv3SHfDSMiW&rx%v;(MvP1L~$DdAoy3y;I|fZq>h!77o> z=ymgEkq@!S56R<)lJ&lYUTLW?So(@tc0C#1g?neNCO3+5>VzHU11{NZ^vG^AhI(J z6oY!u6(+(`AfBDX^RYmC9(9U97nlI+;A@dj2=~cwm@l$B2aw0z_}Psee2Tt5%?BM} zHT){FCkfEuo{~@to`&wQM&vW}_SwJS31|hRy|*EB2GZC|8hek!4YqeP0_|oWcD9ea z?z<+kKRxsYYhBBk@&$GNL%g4ckP%ZUaX}zQGp0 z;rl__*+F!1@U+Oc*vhvjL=N2p_XGXdAg2#<9w<9LVqS(ohF}6giO_W{R97-IMRaw<4#eh@3`G zrW&a zLm$~X!7@?zgQsq&Gxd_MvCVa-$J z&kThDUFEL}EucHR43s55I?cZxK85e$qA0e_RDrvJaug^F*iwOKpbHF!`EXKH!Ky(1 z3zB}pv!V)hfW4v$li$KsfIQt-1hB39-WT;R>XNlfRiq|RhebvM8Fisk|GSClx4 zVnaobz%QbTMF3kVRshg>vD(lK2w!XnOa*jYjQES~0_wlmIZ<>Cs(3me-r}X91~h@; zun3Z2JCIHZ4frcj4cYw-Ogbl_Z{$rJy170qnEn1~@GK)>x_BoU1}-QTOAo z^kbqPSPS34AEL@+hO*EY&{rAsQHDH}Sq)o6mHih`KV=D57Co2k1TVrkmXP)C)p$I8XvOHr&#sw%|&a3xqEs;U6~AGr(Wi>ijbReJ!c18t*P zTfoMvjR0)5+UxKh?0~P}IQ%ZEx(k`1Fgyg`|k2Mrk2VK{B1+d#X*F@E&&g)Ktjc{F5 zJ>q|S8SEETpS;yC3h3bp>hOsNVUwr^glRzj8vG^d$wu%Rd?u=4I;al)U=^GY^;8ac z3dX|$QH>~TBkG`W1t1@d--ZtWoisi#stIW}Axx78pf0q9mtY3qx5*Cp9)1_~bZW>C z72zr90wdrRcn>~<<8VV%(~M9Qs>8F;8z#W(@Bw@U=S4l^LJoKU>Oxz131-0Cumiq_ z-$gY`4f&xWJSFPcqEKB_^Ym~ZVC&7BLJt@Vi(vzxhvw+NMFg@zDX0ytVE{~p<**eF z!6i{GQ$QXl4-KFr41>9l47=edToctQJ=_OXp(*r$v9K66zyUbJmUslRK`E#WtziI6 zh2^jn4#6c+&!vDoP#zjUM;HckMYW+$+Z2aaf&RG7=Wtq7Tl(U*S)nA*w%fLX{xAjJ zgpc4`_*GQ9B)AtIgvSBBw?psku+4V#A?@(n4m*B62awkD#P|Gr@EIHz)t)rk4+Q$r z4o?E%JJ8>=7O6UX2!!o$QB=n$YO;1PHRdcruMop-0N=}w(>r_Op%XFaI19@JTnC!hlig;_wHJw68F z>}dgM_j~~A0(H}qy6yQ2P=`IK!=A?94N<+Q-(L3v_1miz^oJ?%27CzLz(rBLQ$v2J z2(-Q4U0?#d4j;f*a8^_w((aQLibHjvJbfrnAIj6`Rag(7!)Z}{@!OYt_Qh{s{Puko zdIRzHCEmU};5eY8es@7(co?3B?l1<3v)@PXE&M8~e-h+^2cRxI2mN6ZP^SKrsXuw` ze_qr87byP#{0_kHfVS`w%z(Fn^aqgsfE%J-q>f&sj$S1F7aId*dXe;BTnNPZB6@le zJq;wzf%gD99rzfug1$id1Ig>awQyS0OBQ5>2LV4XanE~+{(De9psyZ8KR>7)^nr=6 z6uAEnqJJ37J!SC2@C3XIU&94aL%2r{DFpN_Ll|ESp?wbFJ}_iGd=8{L1YHhI3FL8T zQ6Qb6V_`mU4;p$@)UbPj{11B`(A}^%VIzD7*G0YD61oBR#g`YsIw0)Jr$i0ckOfLW z4QK}3Ux$;%@Wp`N;d@1mP>>c1LS=Xw$m@s&Kwd|X*O3pwlh6S+!2waD$kQnFIqEl2 zqtV-F@;Ca7s4<+!Oabyb<|Fu4)L3*k7Tt{{U*jHy^`gd;r|}y^O^5>ZHZdj>)}6O(_7xF_pTXIt$(qHLWnL0P-{)|I@LV>0FzE9nGMOGb_NyqGsg= z^e}6>sM(AaW_O1%fSs`3s^*}FIVVKTCBC`DHLp0J=lRb7Wq743ppyl}vEWrv3-5s* zq823q*I%74YVnJ(4}K8!S|RvG)RJs)AGClkM7{nL5bsjrUAjlq8|3ee5r7_+q5EaD zk!8C9+hQG4y_p)YjW2D}dM0e12h;Z{@! z{H&n7Z`TH{t*iv-dDU!K23z1Dp!3x+KxeFdD%L&~YoBU$Hy90z0NYu;A5MvSM?)6C z?>qGY_vE_J7G47Kll(U90P>RjyQp{D0Qz223#gy>>cACI@4o?SfqcJz9BznOn-TIu zMR*Fjzz87TwQs>Tz{b{6wskI0H|xp*d02-&*S!qH&3dR>KNx6N8<012g^@55mIC?O z_&i(_wP^xS#t&?GN7Uv=0Nehsy{IkdWeYaG1smV;CQ$!dz5&wzCT@r3u(un`hGf_ZUy9nt^?h95$Mt=qfH?Qx1$lw;?tcV`Yrk>-Nz~^a6a~uoIXe2B zcs@TV>Og9s9u7PUBY^T8!2Z6-3H<>1%Lq{3uWXVL+#cX`_eH&-c&3W>H6IA4iDiNL3gHpNe9wQ~f|* zfB0F{k52*p+K;=Hq;raVoazLBiaLEa!W#+Jb0)5fmEZ*+e;20#b#alhU;ItfFU8>_ zI05AGSN#6k7&^cXQI}Febs+qu*{}f)i~8+Bm?i3R9w0xLY0sA@!8`DSsNYiqb@BT^ zSO(`sUC9T1;jE}Xo(A&pXFb6F{v_?IBZ0bQO;TN3C+aWi;jf;eu9tvqqHffNX0TYa znD^IJf!XjqoQE5tRca^=&0rnu7Oib~7S@Zl(nB{m2xs8B=tvsK2_=9yBgDzGvYKBZ z(GlXcd3l%J3UIfV!zS1(+KIqZ@I3T~rSLxN0^(;aP`kwIHipTt6L5Dg32*m>Oi&0O z2jcg7!U*^dNSFU?*U`J6EVPH$;eu%MTJu<2plnHvpdD-h%AcYdj1ip@KPd^9vMX#5 zo$6kw0QG>lQjwoj9|7s4eiW7fc~AX0{46>Rc}r6O&_^2blQtJT1P!4JjDlsb3-F(g za;78Rbi?5d_z(_>z6*WdbszMGRq%!A^u=H-%!TDZ{?b#H^!QJI2Cj*|I|bYi^`SGo zBRWG2n!{^=4l~w-mjRt-LRXoxKuKr{gvm4=Ho|A3GiL*2}`a>}O1>ekLF?d#WlET?2(#rlTiCj{vUZ`TuB z%$pWHiSp*bBuODDC6%O>G?G@*$z76OGD;@NELkM0WRrU&yX26Zl1p;Sy^=@rNeN+#*{WBu z;(80m5_$#4l6p4BQhGSY`*k;trFAoo59miZmeHj-mesji^(tOWr{Y*#{mHQeU3ahI zCDne8rPQX@9iMNj*0k>2rIT9Ordx|vYI4Uetvaf){&Bc}9MrjIr*5iWmu{^)t8QKS zqB?dbZ>mlA=R3Di&AWFmR$MjYSVGn2SW;EtSW1=Qc)u#bv9!v=@d1^EV;PmEd(W2L zRjhl@uH99n2eI)lInQ`T>= zGWk+9q>R4w2vP=LGE0Pa`x5&+D!m_T8vn>%5plEYjO|vG%Ko>s{xQivrtps`Ii|#R z@5XjBW4HHUv$?R>yx3|%VNZ)V*kL1%`=zX(P9vNO;u8Fs5tB2rXJNJ(VvyEcCE z&&Su)t6eW&#r+jmR-9hGO!;i(b=llyV`XDyc9vOMX5<6A9_aW$hEj)0?J2dQ)WA~Z zA$zHTC9lIFcpoN1d#D8IOARcs_kj#0R+Ly!{8Y}RIZNcsl;d*trgz8EH@K^Gx@+l9 zrTa47*avo{E0A_{nwe?Zq)C_hLh3y!cBUwuG%$80);wCmlSsKp3hSV?)aqqb)z|cJ z-A!FryVXopKsmg`ll!%wbH;w+xQq(edoxEaSl`F{k&Ez-@?yHUE}={EuG#x}Yw`oSjCpUheo&X!59tcL z!Mu{Ltnc+^db7OQriRp2&0ed{th2~HI-AZWIlMYvJ<4!1y=?UCGi0XBVzeqFv9a>hyHRIZNEp zj0kR~@+fzOQ*v6)$XPkZc;R;}7{$uCf#Qmt2<{M(Ii`OGT8e z9OWucMZFpx_i*k>+xUp=kgtgUkerlsUPdpYn$#XLAFEgBrlpY-v{qZ| ztk0~EtYqs$>mBPo>l5o;YmfD@^{KVS`oLOmZL~I7Ypq?@25X=7zO~odZEd!;SX-^_ z)(&f@war`Xz2+_PUiX%IZ+OeRH$Cq1)cPcADz!e{S|t&0h&TE+9p{nM`nY~-95ln&#q=Sop zbmwiwi`~iYUOz;6yN*-Y>BbwWUv)>i+iwpMO&7f@nkJeynmU>)nm&3r8qoGm`(qJ% zx4n;VVUE-hIqTWHGuiVZp5;Zon3v?G@KSoIy)?YdJr!^DzRSDrRrhXqcY7JU^jJeC zFSC~gd#K^n^d9wUdGANX%NkW)Ht!xUyO$%Xy_{Yy?_RHfm(R=X<@X9kEw7MQ*t;(p z@rrmwy?=Sdyy9L7ucTMTE9I5;9`Nq>9`wq3<-GFVLtX{1qF33g$QtIrq;drQP8dk4L5yuIE&Z@2e}_nG&p_l38|+wbji7C39Y zW8MkxxOXU;(mU;K^3Hgld*6EBd5694y(8Wa-jCi--cj#o?-%ciciFq@UGjeO{_uYF ze)rCL=e+aY1@EGF&HIabKFe4$HFxB!w3#aMu+-uH+DKYS8+k$c$QYR{Q~ZAEHU1az zb=v(-*-zU)>Gvj=c>pA;(x|(5ll46+yUM5X^G53uijj+Is2ZzhRcqB(4N=2cj2x*Z zt0`)#nyzN3SJVRamU>sMQSYhu)q3@T+N`##UFtKnSM5`us{`tgI;@VUU(|2vhIVw4 zPQkPz6+Lp1u=lN|tLu8YseVSc)tz-;J&1mN0{!_6{ia^7-_omevVK=@*4y-FdY}GA zAEH&C)Ti|sdVtHO^;?z|u~J%Tth81}tFTqXDrJ?m>RQiOEv%MSE332B#p-IkV0E*) zTZ643)=+DB;*K-Xnrtnw7Fvs}SFI)1GV4ui6@A)zdMwj-eL#P;jb7^u>nrP!^__LZ z`oa3yI&Gbc=!hMe8(9;1&wj>kW}mG5_96Q_`+NI{{iFSpebkxnyyqNr zzIA?ZjylJkv(b-Y>0)=sio{;#o#Z28V|Xw5^4NQ^wXt=vqp{<$6S0%A)3GzLv$1or z3rQ+TCuK^?oRlT$9)3kCY{lG1YPieXH{Ip#TkZ3;0)azAl*yPvvy+|S&-?mlj&El}FvDDy!aVpcuoH|}GMZyZ5@qTvjZ?o_MNMcRRVA-7aod_XW3`+uiNq_H=u>z1==;U$>vz-yPt- z=niyWatFDC-68H!cbNOKJKP;XZ##&zFCWv)YhkHc(A+hHa{`-Nb&H(a$4{O&(TJ5_D(|Gy6tKDd+|L&+iKCk$XZ1|t%E&tuo@GX5_BRi;} zDq$UU4{K>mSWk#9!G8|UaAQd_f-JX&UBmE&X%mN`M@ zVx5y^9u_*CUnhFic~xG)R+sSWH%nQWU5L%TDT|!9owvn|wMWWgW5MzoHat#V$BrlR zTe{mBgTG-cT9#qcpU86VqkH5ne|ERRpF_Rv&kk2ILVa4^@n;{&%wR{$8h>uJh53Da z7OYtNV@?1O=LU113^qFpOxf<^7|fHI={gylj0WS6)#}RXs%2JjnB=fN7-Q6@q!gI- z789-#M||POT*-3h6|P++q(!g6niBO;8JRZi&+~#*%?ydY$f@MK;EZw>`F)a^y*y|? z=2UdLIwPHh^fauuhxr^N577hFvFrMMLw#znf&C;k*w}7qx3b&VZSB_fb9OuXdAp3VushpbZW%vywO_Ei+1>3Pc2B#P-P`VC_qF@k{p|tvK>H4*)Q9} z?Gg4!dz3xee$gIdkG03y<0((tzn6y|ucpN8IrcnBvR|=ZkyQ3Vdy%BJ7u#>(f0eyT zGBUE*$osJvxk+X-a+9o#-F}pN>{E`#4+KP=n3QqOI~Sy!bJe-Zy4dX{{-^OvO@AC1 z9|g{_=bAL_d8EJCe$8HLzhN)2Uk^t#XY8|#YR-q_noIU?_GKsPk8l34|747FEga?W z6HJcf#7u6;iK)TIXdi-x8&k?>&_dG9+~vJ4g`K=kJ}19Zz$xeyatb^5IsbBsI7OXe zPI0G%Q_?Br-0zfj9&pMyWu0=)gHCzpA*TYhTiJQo@7HV4&T2WeX=invdd}lcedkH% z38w)zXe`!H8u>m}Br>s{jcxjSAM7z9&0-eHPEW#({o91wG+&xzPhnhVT;nlm<|kIX z-@WO^s-)JVHG5>CFVt}wS`ndHQZyPh*?LMwihpHrXH8o9z$nE%rzDR(qSh z-QK~>#*DoGjb$?S&f(^CbGf-0gXeMcy7}DvZc+C>_g`)iw}4yFE#wwPk1^|e>wE0h zv`gi;%Lr}cRk3Lm$@DR6><#?1%lG#8au=h1eu0x#7?oU%@iS6Krr&!cnuV2$quwrW zCF=xDxzm+kokEzC>|y@1fU$c!w}D%M^iyzeDP(7`BausyA0vAr??)Cy#zzK3+C}QK zewmXM%*)ncR-;yOZyIQ|wrW_ZSX(-X_7=0E*`$&pqs9-_ObSSD}<{#$Nh%Z z6l;)hGb?)RU5aC7V2S&H_U{8WW0Betr7v$tkJ-p>${N2Vu5EZm3pN|c@bH&d`vzZW3|CG+fI&u{Cu3cTgG_7m%=NX)F!=)D?AZl&Ixy|mgv>E(37hraXGv)R%5l=?6&(-=-xvQ z!W|nn=Y(tgzj2BYOEc9>-(tbKKK?QhM>QjbzPTf74e>j($vY)dtoo{R@sBPL`ZiY% zu$q6seE2P~AQt1kffP6JxqO@J64G0uj@;%p8Q(k!66An&G^GaNZxGKCuyjqzo#P+w zJ4$tirM`QFl{7x=3n-3CP4rzYRY_Hnk$kTN{d_mg2#}t@j0060-$e;`1orrpV&982 zl&T6bON+;mfQX9i^40<37!;3rjrjTu)r%o5?%-(B?|^aE~K5dmL4C zYss(M=$9ov)^D%J>2cD5b-C62T6MC1kN2Rg)th80J>@o;&3)!$S-@T9GkKLYy2G-R zS;0A3!@kfp*`}{s4P?93&}yRYv6@=FRBrBu!_`A(R-kH|S%Ip@J@K;YXkCpsYEtA0 zJCmAcXR)*BR&K%fFB0^zS3N2$|D_rtC?qsd;9-N~SXRIVo#dw;Cmf)L8YZYN}qt zih8IE>QA-F`rZ0NeN2YxtKD{1yNu4nn6s%aZBMW#=titn&DM?W74{0<%E{tn(XE|z z&U*cvv(ee8+d3aOn{_*9yR%)lcXm3T=nl>v=L_A%x#8TX1~QG&Fbl0r-#arJG*Vgq_P3zwP=Xxq-;Rl{NmA8h!|6?h)aY zWd92HL_f@PGo^(oC$B=||hrQm_YKN2*FWo;t}uY$@2kEy#HOihn$vaN)ThT+Hz_@kCs9 zo)Qw{b|gy<%a^hXT`reJ?2C?P+F)RNQnQIJSPobULj2XwHZY8%g^PSx6 zMWk{g&Y#TGk2!~&{q*>ooMgtj3s`v?>kMJVwX@UOX~Mj^8e`HD%+a$u=^3Aiec3+4 z3dGl}LvOX$*(;fm&9x`9-Z7Ask@oB~HDp($ie1JoV&~xwnZ|Y^*CM|}PDBnz4n%fE zHnS_WJhCVxy;GI?B@!`{9xk{*x2_S10_hPWWG)@K3Mn`(K^#zdGT6Rl@(Ogn!za z?~hq<;v6q8>r`$|`U&(yh(OvDN*hBdIh0n1QV`Z?D<0P9E0BV)MrVOr5Z34|?q)O> zNI_Vmy}&I9Ycv?R1!0XA<8DTeffR%_x(wWcutuM8H>1%&3c?z#25v!EquIbM2y3(( zcQg78q#&%(ao`q&4fKqr5@C%L4{M}&SR=*58Yv#uNbz*hZ5TGtvvCW;26{GbLD)dg z_zJ@s8#VbeZb8_MVY-2y&D9{?K+mKQhBX!&k0sEvxf-M!=$V{^=^EROhY0j+t_I}| z^laRMbOSw8iZHCPYwbQar4Y;(9hx5H`>= zr47RddNyuB*g((5EeIRv8U2J|13eqJAZ(y#;}(P^4}Kk?(J*YFXX6%x4fJf>g0O*} zxfX^E^laRMuz{Y9TM#zTGqHtX13eqJAZ(y#;}#D~s);-sDXwQD#r15YcvvIF^=zad zY@lay9EJ__Y}|sdfu4<95H`>=WemdxdNyuB*g((5EeIRv8Lfn213eqJAZ(y#;}(P^ z|9%~z$1rT5XX6%x4fJf>g0O*}aS6i)dNyuB*g((5EgqJTiFAz=*Rzr0dNxu#tdZh+ zHc}8a&@-uqVFNuIw;*hwXX6%x4fISt!?1y#jav{l(6ez1!UlS#WMSAq&&DkX8|c}% z1z`g{ql++Xpl9P2gbnm;+=8%_-LE6G7lsY=Y}|sdfu4=qDrRL%)LfqP8p%^TJyd(u zoRzEEJPTGv72$cFEIdcy@Qmp%a)Mdj0of&+S?e7}cC*7nyv+5>15md)@ z8TBRm$JHDyzqIjl@O_oWaYFnSSc8-U(x6EQO4?f^>)31k@`|S zUr%M6K1lb{9T}xJ(sguI#^}X(LOPpH$73_sSrI2C9aXVP)_aeL^4B2bf80)@yjuZ;_s<$LnFtBD%8j*pxX$4W7j=#S9{+ z&cJhnT3ul+?x;G*vxVEq;cA{Fo6nxiXjWc(5qC?~h!wA@tYDPliL*Q^n@Z0LRs=ik zBi-CQ*x(hH{}^JfT}BVoJ(#I9*9~=T<|$=(8Zi&Elr-8=*LYU(1kWrUV8>@O&owSr zi+HAeyc(wZsjjLG`LC~Ps0yS}Naa)+NP+iBvJ!Tb9ihFlT{h7YR2?C%Wp zQ@__wJ;|g_PRv~9ihtgeIB!gxlN0CFiSsJXDf||5+CQ%*y!pP0b6)I#o)8~#$;1_x zOl)z<#21%LjB&}tX(W2WPzu7*6NYX?-rZdZ#?aXoJI`eokZ{00%pfTQO5~Jnc z`C0C#THtoS)^#z@I^X^oW{Iq24F<9GX{|z76@9%*4$Z-*^8FYpU}n!KfvyVVx8 zm=Q=vdfYN9C;Iw@r_#)S7A<0Be-LZQEg4>K)QJ?;$Mqjy(!g+)&UxNx?{siFI-OWG?!wb|-JBl&6SsYN)^ULIBF{Pwat5=i zJk%NP40B$l1clknt->1YlZ>QBusS=Rr-MG@*`y=v#oCMyYgv!;bW&UPVJETk`Xx`~ z9JQ|f+uWO{*W$Xlx!+*+$czO>qGn|E6O!UTPygY%J|0}xN5ZzwYsqPW`TTxCtIS*> zCiL#dhwyzM9-!4Bmd{d zdnyBanyYydXg<5gqv@5*4$K?u^>py1rJ?j%C@l`9S3~LbP+Ag7i$ZB(D7_L&^FwJ~ zD9sHe_AC=Q;QtpB(t=Rp>AZy7%ut#UO8iHB;_9?eni@(|LdpDELA;ccLTO?sO$a5P z&P@0l7fNG8iQgeeTpb-sqe5w9D2)iE;i2?$C=Cmxp`kP+lm>^=pip`#lm>p3 z%YaboA4>f~sc$It2_^osArZD$DD@1b9--7dl)8n|3!&6Cl=%IGM0`9Ch7`6eYYUd; zw>-C#f5lF;2+OnwYbotUc&>r=cxx#A_5bUwf_}j5=(mbvq4ZNI{TNC=gwoHUbTpKX zgc47$CF1)oln#Z`x1n?}l)ee2uS4l@D18-5Uxv~bp>!aWJ`bh+p~Qb$Ci1d3l=v@> zgxj7_`ZSbwhtemZv@4W84yB!;v?G+ZhtjrC+8Rn9h0>N#`Y@C>htdb3v?-J}hSG*m zS|3X5LTPO%y&p>Nh0>Z(dN-7kL+PDRS{+I&L+R~MS`kW&0TP;A9!hT}q=){;{*US{ z=4QA3*V%3VXJ-D#ENqkJiM>RdT;}KNwl>Ll)U-)|9O#!r(Ne>(skcg%R7X;MnQCjQ zWvTk4s+Mw4%3dkUr;Mc-o?<|X`YAFcT~A8(_rfQ#2VOpUEV`Wk4Nd01Q@irtuPOLX zy)ryqo6XhEUPe0cJ>)(1RGyvB#NP0s$n40(NUz9!{@!jw_H?!0tOv3#GnVVMVS;4n=5A{ z5qyn{&NN=5z0x3B(ny{IK2uZ_0l{gQHa@7cFAO&!OukNwDD=3!slu00>?Af zd0Zx0=S-Z|S&k>IlemoIIcaiX{mF5m^Ydw*0kKy3?pP`L!$Qd))=5|_ zlYHf(p$WPDnk{ZJkK7&>qqXSK)W#6QH)+E2HoA43a2 zhUOfvSkK~e%4&u@-g?H5t*IYF+z#scKI`}{x7J-*T+Ui$IG(W{z|SPBH1bL7e%~jy zZk6+;^#8TmlR{Qu@|WEzL|hlGf*j9VriF~P@^L(C<>h$A%0rx|tlY@cty~<(TSYle zvWnn-*2;`L%gV{|l9hww1S>o4r>%_0W2{WbXRLdW$648sPgq$wp5(4xm8Yi4Ft-oe zpmi6%u3PDRjitrcSt|`LW3ALCgp~?;ypJEuS5ctvj^^eO$JA8sqh zNj#H^HuXl_PiyW&&Kb>}CpJcJ;5g3wx|ef8uj6t6W3uDf%brfGL*gs~(V>Cf?u?uW}H-52?+rah8=7mm|) zXO3gFX_XT+?U6jTMINL5R;m3~sh`LF-pE~avZ1Y5aNWcg*;0?#&KF$4>kN4tNSrlGa(XIK`SALw4sD`(mG-jvETnv zUn_+)Z7nISPHAG)v=ej`Bd$|AHS&2)tB9S|rUi`G3ZIW^S`k`H<>wMhI~S&;dqDcc&;3Mso%JAR$cP_{>pK@`i0|I zb<{)}eY+hicz3jNMazv{SG3lo^lCjv z{}=jVSJYbKJEcrp91s8{OKKIziE1Us3F>XGp61OTCSPyiGDa=u zI8M=KDIaZ?JboaSbDArgIG@4weX(L=aDUI7Nrz{2`F=vZ>z_~G*)OoBZSuO%uh|8} zcviiF%UCs!<9Icf<1{rN_v6%ToqwoV`hlb@YN{V{iXU>4A9At@!~X}E@Dn(WQ{!oi=$EzkBC#lA`pXI+D=r5G%H7=<~IZjYDaX+o9AdgWG zBmXbn-UG~vqHEW#)YVfx3`mZ%_Y5%PoHIzyNrL1Y3?LZ;3L*-K0xDUN3?c}Kk`*w5 z!@uXB}Sk|{c-d}?}{(YTK~(P2-kmX7I747-$jc*%1RujJz)eHq#QlHQC1jF z25AuoF`WThKq-m+`0ICq?kU&tZ3W6o?8WqTfjbLQx*OB0u$jnJ_V+szEC^3qu`II9 zQml7FEW!M1Vlk$Z#Ue~!|K~iyyEh#T&sFRjR~6QK3-gy@hqNVKTT}3MPFv#4#iYp6 z>}a+5M~m(M`0g&AisZvUY`b(B%WBE|5?@2j|r zlBNEWS0?C5d>>v1ojb0d*mNjSN=thze+_R{l%l`+aROH#mNk$3ovy*xQT~*gR+yhH znqZ214!<+veT?=<*W3;GbhO9FQwDFQbVfBJ+fn`o_}f(YiKk&Nd&HNhC;b?GL>B*V zJ-5kjGh%!}+B@tP`I`~@y#_y;(wPm@H!#u>r63OTGw_t7JdKT{z+u}wxHr<#HKvo0 z7Ah4V^Yn&B=jCB~6;>a){!yz;7Wf^!QXNdep5saJ_dF53f^&%64=~ap=YEdJ@2m7( zWF+?`Ed81rYnM#n63_1W4a;Oi0PK#6HK=TJ22f9oW%5Wa2nII!C6eN2WaI9ehPlZH1c(A zaF3#31rK78j#wRwmb+LNis@pqc6=R^z_+>KKY-ZFU=bC(pijNI^6CtQ1wS| zpU&v((h@B~bS7R z_bjHu!&?!)iho*I`!ZU?XM6W;8*e0jjYAvvEbpFu#2bM%e)ooB*(+%Ip5y&y+j_&W z>{k!Z0emHo=K#Kz$8!K*^$bFXEd(Su|lrprA% zUGN2eZ|wIaZ<%fF^~2m)Z>eqN^+h^gL_0mc2eU1`UidWzE&OkLi){-JPayAn%t=g> zW4^`oT+9hfPsbd?^i<4or0oUt3YcMO#0d{Aj;qikqp8;x^P|vXV47{>wZZ(e=s$qb zSul2sXP?2>E^pX|UTe&c#ONwhY<-OE;-TGgDf)HP^;%+n82TN&X6tw@Fh2yn5MH$p zd(AOF2raG?Y)#zJ6xuuKxiZjJ$8>MpB>%*AG4J( z|C7Vh2Q8-+G5@2(69Mh06)^2<%VXNd;yYoqua?D_D$4)C#o$*jwDXq1-+J28Sa!?d zY2knG=xNczmcsl^N6(Dzwj|c=W=q8MLB4jyeV}*@J+ZskVwiTeMKSGUi(uN(7RI!L zErjW#wjieMZ2@fC4x@75`Q@iMJeB+#4);_4y2HK1|BlA;_OIcSROMfdd4TDa82Uyp zdbd`u%Gx&D|2TqUga15wV@&QpMsB2W8*TQ#j@-!OHp(~upN`wuBRXp1RT{C8$7}p! zw8noPtC2@))C2!9Qloy6M{4}PGfpE$QTca00~%33gvcG}|N00nF$ZEB#vH^*8-E=W z=iiOF@f1dk#8{F4WgMJIe~cj+^Bs?e^S?6^M`WzY|D%y6$?L+i?Z1yT`3~OK|I;{= zng1MPl17+(_-|uO@(7bt|DTR9`N#N@2P0!k^2m~Zj4S!iqe}LOj4Ao#U&fRi9UW7W z#xVZ>KB8o!|1ydajiA&QBPo%^&@tq&w+t+k{9KMRo;6LPN z^fURH{VaY~KbxODGAic($(WcT@@9&6tmdb2kEFL$^sJ@(C4OsoAM~3>D;Lda)C~Ny zlUXBEy00cM=#MBcB1Qy^T15T!B6z!@`512nG(Y3zh9)s~AG84DO@S6jiZGT&94N|o-$Q9!2H+u9uPDx-Kevc{fm;I0>D)>(-UrZ9pbVDNNbod1czMj% zgjN8RF<%E-g~7MoLeP4^I}feK;5%IbUnPQ<2Bi_^0eYkg_-_%s>Cjq?w+Q-h6nf{a z9fg+B@rXvCZWJ1$qF$74(E3p(LK{SR9g5NFBP@W@_QY49F(U(L6Gmo$Hf7KkNYI$; zk#X0lOqw&2^0EaZDQztoITDI7-wAxOD>L5_i9%=pN-@su7)H;`{bG3I<^+<6+i z1EXvaawimH))R6!^if70f_7l!2`EO1A|#b>C&t4V6{zcs;H`mnVKAbCz`Jz>8v~{M z0@j0eXDscr2ZOQO1nLVSC@P0ujG{d2%_vHHA4c_sMp5H2-;YsmLi;o7UFc&BJR^Y` zjR^341nM{Kl8I=qjz^MDsfsCd!KgH;5&_Rr*G91ikDu*GAru-htXiC>GMn4T5 z&geIwBN&XDB~TL*K_7$CdVofg!nj!x^hGF*q5|~q(B~MBY-|+ct%5$!cnhIq6TrI- zozGY*JK6?Nzi71WM)2}L7cpK4x|s1+LYFXJJaj4Jt%fdRENx5n1njra<%~@SeV@U* zp%5z=?+TRm3#@@sx`B;_(td$G3nhC3HY=3M4|qR8*Mg6*oUYH08B6)Lj?vSh>lvF1 zx`FX7KsPcr6}pMB4?{OIcyktF3*%jde!|#o&`%jlf8Wa3?NIs~@Mb~j_ve6Y=8GtF zj$cO6(66GzK);Ss9l9e5+0{<48*~SIz&=2~_eY_14=|3-@gO6ML&=_w;5w}jJ<6ai zS)evE0^V~3>Ng{JKR{0~vM%%_IE`(o+|Dp)a}oF+DuVH$WS2mXfF?6&8xkUgk-tOF zGiW~&;sS#fC4uirBA|^)2r2`hvOzB~Dh$2MD7qJttz5%8bRB=ksD9AvAPvi@+-@>x z5fvE0EP|o?-z`R4D4i#4N9TtA%%DA5pq?lKTBwD%!+1YJ?=oo77UCE18@8PZrE>%N zP3S!ay*3c|ol%XT4;b|9h`KrWjq{a~L5mxzX&8EvOV~sN>`x-U2&%i19;32AaSjAM zD7n4S=GI3A$$^YD)yP*HSE(2z39Z=O3Y- zg2Gk^x|gFBAc7hM&BLI+I}(QkZ3aT&dY2&vwc(LCCK7g}W?(*nL0!3!iHt%y%DfC} ze}v4(s9Dhb4BZQ55`#8yAqy~cZ<7TX^&YekL)WJ)%&7IyA`D%xvM7VrdjvLT=-Q=g zl|b9RkR=$pj%7(kZHJa(=$b~GO9ZtRT843S9%UJ|7g{a~m3eta(Y6($JOr)CppSx( zl^E9&S~&{keHBJsfmV$|(_8bO;e=$C?E z+)-$|77Ti=ARu=X+D9u!lO45=G6MPtqv`lJ5o1$~S`e=H#>t;A|T=>vKWl+r}30hA7)--Zs1@*(so zMpN1bMIk#M%xFs6kSHHPhcfzI=&&ezpu-vTeiM?)i8uvDGU#(B&?3y7hCUPJ7W7%h zNa%A>et?c*(EASoexv*drMv*>8;HQY3`Ua^lJX8HvTL#lK)wR%n zt`PKP#-Z%xD-6BYqwPBa`4Dmfqnbh|GV~5EUu7ci_meOWTu$g~j3Qg3^Z~@xLl9hs z-YFxt1^aUGm?wJzE;p2H2%zsDg5feAT_aT9K#)yNV@zQv-HU-*44uKy`-Pmzh;N{? zqGX58X3&otL2(&%9{M)pT0zMsfGY|mJ0L0mDtn+~q4T1UUCfVC54wQSxu6RfR{*+* zagRVLtpt_%5=J+JE@fO1=&~r3-uDj3pFfIn68bTtFG1HuxeHy-=zGu&j0-_GGA;qS32a8* z)`4zeyc*C?7_T<;Q^s|KZe?6!=r+bZ3Ed7p$9^dPzhK-D=vNH+g6LBdLG^;}U|c@v z&L}ib_5su}=q|?5x$llr3%ZBVS)h9vksi8_Q5w3RL2EvOyE5uC=)ovWp@$fq2&MH1 z%F81R`lKRQYZS^?N)ymzU&o_R9+T|?^k+rD)+m(U-!hu)?o<@Y`_l~i!Xj`hqh5xd zWl#etVGx9P(Vn zGp;!_#8BM>`GFDMhbAztIFz;_I)c26D*=W55e~MbC@%onh@$fc8fB{rFzA0FRKX~e ze}x#T6HC=prSMZP5YyC0D3o6B^gcoF2&G$qAJa3I!+me z?g6SSqpv~BMZvYI$}^hmq5`9zgI0{P16m1G#<_QelDz_|XH``hsvlIxGmg%wHsiWO>oB4ov@S#Ubw$5{qw}uMP(7Av5T!q~Aw#|> z`OFc%fi`C7eM(VUfu{Uy%Fw%vYR2ex(B=%?|H$tp^krzvC}ekZ{wOO)c}e>sD2-Ge zz_o?azS>856bc;WWd{ITbCge=Kxe$~4TF-M0W%Ux`3}qoXtyXkp_E6&Tc8KyC=Yr@ zc?a5yG3TMZ8AoN?C(06NU(gRM1eABgCP3u`%xvi6QT9Qfh(dYtWRz6sfG8KC0~tp) z{1h03d=t>YQK;O9Fgkz^WwZ~a^9P#l4Z|5t`AO#wG?gdi3vkF^^)%xskI4>zZV!Ey zaWqdh4K(Hb3yem-E3yNiJ3z;P7cozHGnUbm7cVicDs&v<$QE8<9NGSOMn4aoz-T)D zL`Khmz6vHG&6Jm9XFwl@zRu_q(8-Lx4V}X1-=I?&LwWcn<7z>v?18HdoyNF^(CLgL zTc%?J*AzOFah0I67#};O=QQESj^;3i%H-`RbD?BUz){)KZ{i?$H_BP)yeRje^BGMx zuz+z?c4TM3;o4J+qV$9=j?x>tlyRM*%NR#x_a381L6=8)1NuJW$WB&(mDoS+^8?1! zhpqyv0quJYgZ>AC>h1{#yP>)d!j^!3#MlbZj~Pd0x{h&AL)SA7wx~8Rmh5CBW2-|q zfz3jAC!t%I*y7Mn81EbCr%WuRXDbt14!VtrEeqWaJ`*CA()Ky{62Y|#Lcd~y0?@A+ zdm6ffv2>m8WMWH0>3F-b?K$WkCbm3uFB4k^x{rx11>MiY7KR>RVv9l#GO)*rZPbtC>6V!)Z zWrDiUYv4PqPsh0qZeX7BKaKGyzi%=D<>&X{4%VTvzRLtu*1v!USPr|=g0VP`mW;*m zwPMgyQ)sM2SR7Lu#v&b5Pfei5r=a^RfqtTb>aYm(_!RUWK%h6Lp!+g`{-A>D%Lw!$ z74+^)Se&2E%mi;jvogV3(A*6AH41unCoImN-fswtJfL?PdVfJ5S)q$D!AvO1Ls!D` zS`4(4&)>H452=I20rfu}Iv0y+!~$2=Wp1ViRg8HNO6Ly@ogbA4Ft|_a z4;j-2x)!X%@_|tL+Xl>&Eo=mvFi-innQ?oeTNp!W`2>6lTiOTR${0%5wkTDh+rekp z52f*Q@D=9im|rty2lNjvV16g~2I~O5i!oFtyBUM@={-@ZK`BkZP)b>mmDyw_o0gi?IFj$r9O~orv6{R&)Gj0?V zD@AAu^%$xPG#2>S_6jtHk?Elh1fU*>jZzbuj&ZODvSUJ4hSD~`je};0QUUr9BT7Lt zM!~tzwM~cy(9Dc`4w@xOacEXXybR42r35s46xwGFhT2k0PDWON=894pnmbB4XdZ^z zg-kp{ZO$gdP@T641KiKt7%1+WCO@bMP&S04^uSgk(76|k0^2r)Krv7Y&^eR@bdHo( zK)$!3G?fLgZ9{1yDF4ed^qy@f?})2_j!ozH9iZa@w+u?>Nu&WfHUV2R)uP;nR*!NQ zT7#iyg`u(}U`LU(BE7mL<{xIrH#4=P+=td-$i7Y8C=a0Z7=0c}`vo4^Ae}St$nF|~ zMws`ZjX@L4lWmbL0*`F18EAp|hoF>>R>-TdP_kn{@5lz%1K}1!DSf~r8)?hXv(B^w z?XmuD=%Wn1TbT}^Bi1K7?Zl}0(9Voo4(-CY_n=)Fx{ggZ#-r=0JL6t~_F&xm(4LGN z5ADTxanRn3n*i;@xE0X8jGGAU$GDZy{)~GS`WWLrfIiN+Nzf-4w+i|s<6eUfVBBix zK*qfeeTs2wpo17U8A`Se+=tL1QOE{|GMdVn@{~Y%nBj~^*VYKeO@WSN+*;_lovpfEz|iEHvpY8aEqXHp1?~7 zrE>$+rer96KsSX_nuwy{jVPC(Z!+!$=v$0i3Y`{((m$Q?GDBxXDG8k!lpk~q;68?~WE|xU9Rs*^&{d41d|J)8_0TnpqdfbN zaT}m(8F>^+`2su%rDG6P0PPoe*`c&Ag6?OuJ@7o}#wcVDn;6eRH%FoS+!jVrT0V)= z9QrBa<$!Kw+zjY8#?ijFgU@h|Goha|j*jz1l(Nt-quhjk#W*VSucQ0~CHn?~@^xpF z-=NMNRHAHn!`Nxucy8lx%ysq6v0-chvanD2P7{JjrP5T9IK9u$a9NFEkQHnu-i$dr9J0qz)?=hZ$-e=qb z=mW;VX1$UOr6YY!#;YtuJhma+0B9WJo`U9P+#qNj#wJ0L*MuzqZ3r4+9(EhwjIl+b zEf|Yq#-qFm3%iYP%~)Jt@$DE}4%!|(ighYMJ2AEjv?pV`LVGc`AG9~mNy(7L;rpfeQLZ2TcCr*(0C z#UsCiF3{slfa^H^1h|alJ)p2dBG?Os4HEd)QN+Ur3_^~f`ub472;_YzmQgt0 zP&!6D3WYro3g;V2&xj7t42(j#gdSoghw77=iK(WoA@&D4iz|PeQXYRNo!S z#)tvX>JX_Sle-bl!~^O?lOrp?-X! zCJfc*g_<(5EwmYCirm9t`cv$QjUnj2;5*&&Zk3#~3{n`Zz;< zi$YH@dMxxwM$U&0VDwASfeiII3Q_t1)merpO@R6zg(w|>>MuidY#_Hl>3D$Z-a^9| z`3ZD5Lv?VW5sds4I+CF}xe%2TkXxZtHh}8sLeDaC8}vDb>g__K80u#edY;iopf50T z7j!g3^-!TP4E41My~yZqp_CUu?t{|#1APig=M3b2D4i$J$Dw2&KpudSO#rIL3XvTE zc@Rov52!vX^eQ6{Lnkph8TuL{Db24lIt4nJp?)->DUALOI+c+>LEm7g9xC)EBY%dz z#ZbLeXc{ALL&=5!)lr4WZh%@1C0hYh_Z*tVXgcm}Mqh`{VWlu*%-N48P(2a~34Bf;~yK-nVBk0=N!caSNh^{3daE*mN zWvIP5w3QLVpxYQV3c8&U!=axs>Urqrj2Hp^f}!^6(3gxD3H^$pcI(jBjCdNlgHdCk zI~j2d`VB+vg(153fH)4_%~1PcXb&ShK)JhdW50A#i65&E(4|X0qSQQqBH?r7J7oAe#fDcj4lWLmXY0|rx;xxdYX|v zpl29e0eY5^J)!3qYF`Q^GqM*ng`qa5(0NAEwR3^dm7y0IxgDCyP`gCv5+kV$FEi9e z5xT-iD$lD7wO53$G1P}KME4FrZ5JWBo`Iw?y1`HzMktMuR7N)$YR?FL&qyl&TMV^t zgnnSCe_!ZFM$`U&VkDjS&y1#h-)1D`!5v1^aqcqI2Qc&tLv{b5Ul~Vb`Wxf=LVsr* zmFYdk^@HAL9F^$<#`PC;8H%uv`(8UJ?hD}zSdb6;5Xg$;aZ>`^0qp(A!vrYrQ@~)?XmtQXa`23+`_P9LSBJ( zVI;~e+>Mbaw{UlWbE0~SFzxFp%x8uUVyHefJeYB?&F~P$yZ{}_I7%Dt1q9Xig@-fl z40HrT^;_YQj5`aZya3b=8h(ax$xz&P2&%^kKgT$fV|Wxp^&jEq83$Vqj{)PcKAqD9 zFhvM~atTibGqHRUbQYM0<)1+3gJoEL6#5=mjrly#HQ-~+BQL`1!3NAf3Ec=bW80$8 zEsQ`pg=t?vRE2)Z1eC6=jKj4R-o^x@pxc>%@`uh11W0!n*HReQ2i0GOVfW!3n4baN z32=`SFF|*K-I%BHrE&rS+l2Qr!D#3{CU_CLp9yH&1K<$$xfFVsap$1Nz;P^J4m|-* zVV{&{Dl-s_fl@hvfb5gD0l_$EGQc%Nb!=fO1K{vGOxxo=LUoGaOW-o*agB$s0NfKK z2w!I;UJN=cR_M-4_47FK> ze`ly2D146zCPMEs!3#np2oQ_9g&(000c;n9pqUu&BWPyETMNwsa4mbVm4s|e5D(4H z1lVCh4v-V;pbQgo0i?@AnIz-^*tduBO9(UGK`3pLh%{JeUdCGw&Bu5s_XL~+5m364 z81F2!0OKLA5(+W_&LN>BV{buAfzsGNrJ)Qchcq05mIoCv4_ip6#02S~l|dCOM;Rtm zWdb_yYK-?Lv^wL>hSp#L%BPx4KzUP(2`FD5W`YdR+Ds4!t;2X5p>-LH>ms2Z=Snv|or{j!cEbSZDQo<`(j$Gru+i79rO*xc7(pk*xt~$7&`z;c?}$$>vYC;fl_(E7HoIu9LDy6z75{N z^8QdNKMC{-D;X~@^aI8#2weqM!)8iDKV-ZD(6x+L9QqOX80!>)u4AY!Hi7IIc=@55 z7>};w&5V}-{elAM8LuLA8{<`ho?-&p-)Sb;06hcF3gJHiy}|@^obMTo zo34?&T?gv|g&J`#qOBkvN6BK-;qJ0N^YR~bgYUK4TuA#5fn?1r!hp)DD^1KJ9- z#_~PTM?f3QBVQBSf{vK~4B82F#r#faH^w5b61#)Zu;Paa1B_4Qd5H0;ypAwFl_%N9Ijr9odJ&{z zzBiQe0{G3L*BBr7rMxI7!lKOcqMQhu4~p|AsP9Q$lrdpZ{&_PpHVj4i5#B9mF2?4C z(!PL=hr$*J3%kjSYnbp-pbZ)CXDH5}@NPnp*1UZ%e;tav%!_>V--XU(`~}cij6WZ* z;+pYWK@H=>Uh?5Q2){KHl1f_F#P2OMyO&-w29)Bm62t6wJ){rJ&gvzcjQRper-Y9(E{gLbeBAGf z;<_nH>(qkgVf@FT$VbBOFGR6XjKzJR*l0%LIK>|@7y(n1$iaAXgjhO{37!#R8P*}( z2qBi^9!vzWLL>{uuLo5C%fw75&NI0v=C47E0pyd)2Ss@hY9q8MqqaeD4utv|ihBy7 zc0pS(3iqmHTyM#pu^joEjBA6?ZK1ek2#xD58RtyskKidSWf$%!FaHjWICTkSbhge+XEXwmw=_1N1i1w1MguT_l@M`UwC<1KXY|jnBSea2f{Rex>xlr{q#(bD*!s|PAU&32A1N7_*apyy05%+4 zg=PoH*Wfxd5#+^u8Zd=D+cVC+|sQWR8#o#Wh7DgoT9e4JNG6;K`XOQAJDJIsFt zMcJfu#5~S91!a>0`|&Bwy%<{_`UT_dfF1%^*AGFFCq!&RDDvh!{vM;D$mjDXFnz2x82u|0`AO*UP@f5YfFfTBALW)t`vT%? zDDsw&i=lAi_ZFh&0bw%>dADT*;bWBGyR9P#A2Efqu0k2c zC`tq+;{~x2QK!F9ZPas!kUbTn``%P{w9x?~eP_^_byl5Q=hKCBFazGggnhs5WOuM^)WzFBL zyW$VUACJEre>MK+_y?i4Ll44!I72vVI6ho3TrylSTr*rR+$`Ka+#%d4+$G#C+%No8 z`1$bo@Rab(@VxM{@api#;V;97!^gv?!Z*V|h3_ZCCKOC)o6tU?Tf*Rk$qDZytWH>$ zusLB{!r6o?3EwBmM4f08U1H|M?1_033nUgzERk3yv1($o#BPbB6JJT3m^eLgcH;Yq zA11C#+>&@8@lfKC#B+(MiI)?v9eFANxPHwCtXUqi9xSzfocVM z6zEf6e!i~A2Az~b;PLChDcWMlai#&do_y@HX#mm)&@U2Xqn2?byY6?JWl z6WvP>)6eR0u!PBakv^@z*T3lB%@{NPZW+GinLj;&;a%jz1B9CH`9c z?;*6tg;B#DekhzHoDeP)E)}j6t`%+=ZuzGrbPx9r4+@V7PY6#9&kD~EzZYH;ULXEC zd@Ot-d?x%u_;vzn+Y(AfEMZW>u!N}z^AkQy*qHE1!l{TQz*kN5B9@RXF$7B}@~0)V zOzfWc5-eeA;*7-QiE9!+O57Z^gtLhkqn6;o5;FeH5_;#Io=?LPlK!-WeXxY?`Pah| z=ED-!Caq7}oU}dZ%cNa@T7vg4mM{jE@N?7>GW}aiP|4|%izPQnZkgN#mheRKi^&s` z-%OsFyf}Gh^6BIsVF@lJT}sB3>?w&6ODLLBDWyhA`;<-*OE{DQQ#il#{K+(#=F-wd zEFnIv04$+l+7MX6gtVz?bJFIfElWF`b|URu)DrLn`qzK-9*eupSbfSL?Z4nZqj%xg z6Mhdwh-+i<+@*i_aBu(nzXxC6{`LBR>picxy>ecNE4T+-eh>sqIp7r}j_jliD+7V(NgD#TV|KPe^_2{N(empMUNAq|_%b;$7+Dx#SfW ze@n@qTK?j&iyLUGi-+kw;o^5fT*7@DdwJo~Tcm&eclFTKwA3T1_wd)dS1Zw9&RV(uWsr^#>T+D+bWCSr69$dJ6 zVa0_HE=;+ArwEo{Zx>5mIC5eCg*`|?;R}V%Z#X|UWo~jN`s*M6Ql30_Fy+~l1}XJZ zg5=A|7nA2C$0z4HcjMfpt=@O@#pRRlI!qMl>R6IVm*S9@Jc0W_F zUc&T*vx#`}@dYLn zn3(@iev{O+aK8eH1(FIp#A(SgFU!uXPh@>9d(P~+gvj%G&Ov!LLpSDWhUu$9Jd{6{ zqALpwTK>8E)};5~p<}%3VHh`iB}%;-`KJH)N1p8;|NO>&bE+-yd-@an@BJVA`*_6s z>dO7`cT(zI=dMJ##(!~8cOOqtL%#zR8z~?D+kcwIe*5>o#9m5=N171na)2tJVLH4& zK)0sbp6;i(ba6%E%EVQOt47P{UmVuKv=S@L)4w=8U*lSXcG2G*S^qkXYl^>vzy6D> z6;~fi8~(8@uI?Xmq;XXcb+JZV-MISyyxm{dimX}cpO^gW?>L-cTzv4zkw!$=S4FBEU#3;VIy%k<=yU&~A?V?eutwXHr zQy4k_G@@w#yRog$MaIrg!|3@K{Z}aQuxKROh;Cw{cwH*fsxF#{ z?xKh2DSCcDP)!xU4T5;QgtNtnK|E>&o}#3Pd>gKz?g{JwiPse^*B3La3>1 zh{DlKJ*FO4PpE!~AH4<96h1bO;Mtm6=h5*xhtBT(sB`L>dX}E8-_%!BBb|y^5t&6g zc~8WtETXAuE}E$pqPc1*TBuf{o$BOrsCJ^adQ$XJ14LgnQ1nwziT-Mkn5w3WH`EOA zrkW|eCz1WZMs1K;E;-K0t4ym;+ui7hP)gk$iI_X-YB^1F3UufB1`CWvZRiarF42(QOC$eIwTwGuxz3erWMdWNf+~slA^)qsj>mZlN<$9V)a)sqdeM#Qc z_gu&&xH_(`SHr9AI=aU0NjKCDbHg!$QdiZ><&*i;F_$E3X~ZT~S{zoN$)-9{eyr!o zb$Y&BuNTM-dZFB?7pa#;29-`cq%w#aDnU$E)5J72TV_<>%4RyRY_9XUuzOe?#`rs3 zR1Yy-%@M0yF=&h&ZA?7f00>vW3nsTk0e^ zPIr?p>+W)sUMx53CGt%@P`;~QbcqF4o=Im12f zp3sN&3HTbn8R2TV+ODB%=9;=nzHvRwP&L;LL}Zk+>Yi@x8o4HjNz&VOc8}^&>J3-V z^>n>leZ0#qv&GyqwuG(Vo^?;Vk+!O>?w$0$jVtOd(=@cy_Z4Fcgx*-`Ug+D zSKRw3oF-jp%7WLEQo zSb?uQJ}|$UCSDfP%**E9bRWC7+&VYSt#{Mi26@zzriz!{RP#Jj9TAyps5Pd!m&46) z8{JGd%WX1c%}qDk{3PDTHz6y{?{1FUEDM=C>UU9E#fvg3Bx>Pnp9yN5Y2miGx7{c1 z9rvl5>$aMfUQSunZIjj9b~!{hki*<(a=824z3aZvcl3{lF7y+;y`SAY_oaK@EphYR zSEiV`ERT7@EpT7k0=AGXY)jhGww$eGDlj<&> z#5Vy0(EooR`uabmMv6h|X)#Gn6*JV^VhQ@;FGZjGW$0hOP|XwXq2K&2^pW4G*2zrj zl+3J7%Pi`Qj91^ukh(6z>V`~EX);MGSwL%9P#alBKP1cQjIx~0B+Ki}vaK#6+v%dR zy)Gsn)y3u0y19Htw~(*s9&)_yDJSS&a-!}n-_lRXX?l>Ht_RB*dWf8x9Fwv6TM7+s^61a^>VpQzc0VhN8~PjRPNQ^%6(z1NyW)sL#m5 zI$0jkDe|oTPX1(!{MmT&wy|openp?v*HuZLUz<8WhY%qcGjh37hOhn)n#QjT~2n_bxif78{SGB3E( z=2dsbEOBRb9hYoAb1CMCyI`I)1JHM>m?$nvimJi$?qV=1cr_Sr-ZIn7bTh-u6fcQ! zVw2b`z6?eOF9t7}rDmCV&z%d#1Y?77=5zCf`O=*?tIZnomHAqJC$GyJh*0%>@N)1< zFu^376gf~1GPzAglRubc6^ zChx3wCdg=S+5Pr_cgQ>J9r2EN$GsCldhe2VImqI@>CFx@2iby$f(${Nx6zLG-u32t zGrXCIsXo=_rdSw3_8@DJBgh#v4{`;$gFLpTEpF@EhPIJyVw>7#_7U60wzVy6OIrr9 zjE2A~8;%%A&mcb1D8x>B0THBLM#QKwh{n_oae{i=0d6oN2z5uKp`M6C)CYdtV?i^o zgjdR|Ad+$Y!(|><+uf?zNxVt@bnfx&6X^X}_{x+nx3syUXsjn*-lH z7Q_S&F*|Y~T1QUA=g94M_j~!>Y(C>`*t_Mw>(BES`1Ac%{v&>CzpdZN@9cN=yZB}O zihg;&a)dH|1-~3>9EjR}U7H`isE^nmSrG#ygP&b(j7Fq8pxf$Bh=IlNzIs@Ssg~2W zvaJy(=~2W@>V#-YeG%(vAR<7GwJ*W1eHF2yUPm0MHxOfL8sbmQK$NIOh#<8T(WTx; zfem`$Upi&`9J%&{M*5gv2FZ2v9%FX zu6t~c7}N{Lq9zyKQ{>C*!FgB4*Wi#1awva7FA$U`L#7?nGwvw&oBeIQbE8EHT@=@7Ac9flD zXW2z|mEB}_*+ce}y<~6MNA{KdWPkaXd|W;upOgb|#Xcnm$-#06-uj2h;i9k{0l)HT zQA9o?pOw#vyK4V7sOHyq53f%YldHr&xmvD~ABz3t zBO>12NAhF2PW&p@%MFNsw@Gf6TjVG5Q$)ktCb!GaBd+-{kM|p1dy~z`)KciDyA6rQxl5 zsQ2+HB%CM>pAwZZDxHc$G`|e$A(c^OQkfCkFDv}n>?()K3Ewt1#IOD}( zaR8oW2;OdjN>q7OK9yf3AtGQwRY(<9MO0B$OchrpR7q7zl}4<S0w|)lqd-Jyl;dPz_Zh)fn%-WmOZ^6uxwG)dHSyIe5b5RcpL; zwoz?SZw+5Wbx<8uCqyOeA}Xk^cvJXITvXjv4|oN=RBzQs^@RuCUsQ~G<4>vqYM^>b z4N`;E5H%EU6qWEsaZDT$N8wA4P$SjT>KXMcT1Q5y=TR>{T8&XJM&1|4sh3epKK?IP z`s-@4nj$Kr73B?41@-4|scC9Dq9x80Rn;stTg_2#t9L{-HCKG6-W6NaJT+e}i11X$xk|@4&$u}aU|6-bzIDc z*L)HY9#0`c)fxCu=MZNxMV*JQb`jp%C3RU{LEOb_iegvYP-$o#`d-~aRLCFIPwHpH zW4xmf&q~x&zpCHV@9G{RMm`W}qCWX};wf=oE4)kLn>_7dT&)ID!sm;D#~C2dW;z|G z)1!@v;$US$OH&q|RWuYsbv7|r3=%_hcGQaGL|js?AqnZQPSA-uug<6Q>m*%37euR6 zVO>NQMTTqo^%_@*6oC*4_h z5yQnWF#<6&yXo$_2U^8?>E02)wV&<}-}!O@8-o~@WA#gDPk9+{bmI}7b0S*VCZToZb+oTcLHw^b zP%rcrB6m*LGotlGb3{x1HllgX)$i(gdcJ5So<^(OLbS##)=TtKy-dHSmm}im3cXT) zpjYYDs7D!vZv__UHR4(EjCf9esMqR`^v8M~VuNnb8}%l=S#Lq4&`|uRGA4QbWTkt|`jkE`9zomS zS$z)iM^i)_eO_M>ZS_T+iio6_^%Z?pU(??qKIsjerf;I<=oX@t{s^DqXVDH`{vG%i zzlh&ODxRpn>EHD|#4~+hgpp#RQKG%k#u(37ZXRN`4 zdfWZeM;~H_M(S5apoZmXw75Pix|rw8DD%8|f&6!I8D9NZ^OCq>#+jGRD`vczU?!SZ z%_Q@hdEHDlQ_NKJhI#WJZ_4EHn>nZncn7Vw@0xjLzFA-vnnh-@S;BA4X1RIatS~Dh zbpiCo{NbN90_)8N)B|iXo6Q#UiTTuQHQUT~^BKQi)0?%~VRlC940fA6X0O>Nu9^Mj zfH`OmnZxFYIckoXgJ-rRsUe-pm( zE%O7s`k&0t@a*rHyXF`8$G@51%{_A;EzrV~@a{GId(X2GAKyj1{B&L%`Sa}Sdzrl~ zURE!gm)*P8m*6GhEjXW--%G+>gjvYBlbo7HBs*&|*?E}L7d7aP!L#}glmb>b`WC0ZTg(SjDX2{zH@ zwfSs*#Az)cGKh>~g)J!Jsis7P#22=REh@H(ZDP52UxZP&H%&|z31W&!FK&wO#YXX# zSSEVdV(Q>4i&TKhb-c~@ZVg3)Ov&3vMM>5+)% z*)Hlsb&PmXT~M#n&32D^m%VKt+t>CZACu~O;9(7j_*jGNV0fxSBfjbgc&krG{MF~8 z9_#3cw>lPn*tm%AIv)PmM0jMAB0kw5~XycThkKSqq=^@xSM(QdMv(Z=&h#An@RxBty= z-SMaAx(8nEKJw@7LHN9f?Gby_9<#^o342of6p2WATKp_-qyG0S>VlIawZRwcMYJPb zvX>Fb{3_awzP8uwcc|mNVbknQw11rwb?o z?9cYLy<_j%U+k~;Hw;JmyS-=c+XuezrLTPL8{hliiGB%RJExxuo^~ET{@+GzE#w#W zi}*$TVt#SIgkRDx<(Kx$z~e3lZ@U8g?n>~xtN2ynWmorW_%;1n{=@LQ>-cs3dVYPs zf#1+?gcjc>epA00+I?I2E#bYlhX39M{(C#Wz5l4+!S5LH=E`Mv!< zeqX|FRR0bCP5&)_nm^s2;m`DE`Lq2w{@eaL z{@h6Y!hF;)ER6W=OaAcO{rCM9{!0G?f0e)5UjrX~t^bk#vA@n=?{Dxo`kVaC{ucie z|5Jafzs=w7f98Mgf8l@Wf8~Ge@9=l}-}t-y-ToebufNaV?;r3F`iK0({t^GEf6PDb zpYTum-}w`j`5Eo2U)Ag*NjaBlQ8d{X70$ z|Cj&8+MB>xQ62l^x9{4wdlrV(B`$z4E|J`AHZ{V`+}nVnAd9G|ILn0@7-q&<*n&b_ z(8#c8+!OaiNnB!-m}nB@C7Kwsyu`%i8Izd2L{ZF(Pm?@^nLGdQsjAc6GYsnQ^Z9>1 zFx{v6be%eNs_N9KI;U^!K;nk%gp8^{4(6%p1%tW}ms$ z+-7b!cbGStH<@2HZ#Hi+Z#8c-Z#VBS?=-(+e$~9oyqkXg`9AtZ=dYPxHy<<~GIyHa zFu!R&Y(8Q>YCdLu%Y5AYw)uqlq`Axdj`@`NUGsb9)8;eg_st)eKg2H@KWpwW|HJ%| z`D61r^Lg_p=1X7)#wW!m$4|hoxx5pf8ZSp?^`!X8 z@l)cTjh~8K;pgHB#9>p2!Ddu$FJ2X|j@KZwcY6Gc_~%uA51F@G(ZXU9)^WzJU&s!8fKfXAALHt7GQkNhXcZtd`#xILEP&TePo=3cQ zdAudws&aeCwXTY{$2;Pk@yp{~l6PGlUxO^&I^^oU5Z{0t!CakdV5u-~cd7_wr>hs9ry|33ak{15Rz#{U$5GydoJ zU*i8A|0^c7_{$Bj=@&AecBmRE;f8!s-KaBq~{;&AISgqCyYo*m@t+Lv!4y)6;TxH38IkR=vdg}{_@n3;R{6@s^zlbRQ z)z&o>t-sE?9ufK*kT>nKwp!beL*0Q4>P^;{t(z%_dYg5-b%%AQ^%d)@)?L=!);-p} z)_vCf)&thptgl-SS`S$}t#4T0v>vt|u^zP^v%Y0LZhhN&!g|u$Wqrqb%K9#HR8L#a zxEU)iU-g{zy!8|7r`8MB&#V`%pHtTASJr=8zqWp3y=48?`knQ%^@{bX^_ulx*6Y^q ztv9ScSbyYPGUbE+YW)+P@S^KSz ztOM3TtKS;13f7<jy=uB z_IdVvdx5>sUSywdFSakRFSIYRm)IBEm)MtbT-$E6o9t#gZ!fc#+bwphigMd+_A0yG z?yx)U%k3_^+wQS@?bY@gd#zR5)!M$ip{chgZ_{nZ@{acW%2@5HhNiBL_GoQmSAKOq zRx9A%_SQtQJ{zNJHpkaog088AzNWaGs#Moxj^W8%Ej`DTp5vO~=e1I=wpz-ya;=vu zwUf-%$@_Kkex1BuR~e~o>uhPT=xMIlIRLlF-@_x0vS1s*VOZ(N*ezmk;t=q4U z&S_ZH*xaDVNhEWrSZ$7miprU+^gki|Na!;0Gm*-q`Mv5S*H5Oxb@?7aR$XP+H??*( z^{!ghmS1btH+S?jG&SYhdsJPF8Ig{zau<`;j5F;}R}#tU+Gw_^0TLqBxo5eA44H5; z$DB##lBr0xv7w6zNjfPryPn=&8q0~G&nKVArl0_a?T|1Rh z&k3^zIT^l#%qFG@!KrF{mPZ{?oJtDcQ^N0*rb)&zRU4kAyO*i2V$QJrNMtm}*p4KU zPGu<9(_rGiZ#YCkoRkblN`@mP!;umlOv!MhLmQJOmQ`*q66-YX1 z=~P-em6lGWrBhjXKP&HNg(+EKo~UgmQ5Bj!Eoslzt-HdK(*jge<-+PAU9*>WHLT97 z8?t|p&e@(QDKK#guL!RcNCXxgrYQ}gJKI$V-AuhBcVM7HB9o|OEVu(}?6bV?vnFL&0Mb<~ z5E&7OWLnHdj)x|f77LdajZ2fpB{DoYCo(L@5X0)o*$thY4VZzHb3lzG({<4~t_4Zv z7&opOw+J7L2__E`6F3a|Ig3j!BQ#`)1}Jhicup_1kah?KrqufAxxR)o7149uhN0<# zFeBz7Bj$pckj!OjBj>hsbgT^J+LsgF3|nO|k4eg~bxve3rz(q=$q5^HicX}fDud@T zNy+-U$lR6=*!;PohjU4?is!cU!gK2CUDejm+r#|H$^@6=UO<8fp5kc{+Q~YeVk4AD zvGKuG;CgT}tY^85FswotRw08{FVE}cIXfQ7TvncI&w%F)z=dC;kGZV8&mLSd#~vK6 zDSK{rTSIpXvwrTXR^Zd)LALyRSJ2PGVWE>AUIK9q@)JXl_xU1%t&OM`cQpKEAcW}m$onT@C$#XkJY*8h14FS z*Y1@gT@n>YL8ljq^C(x+t5PWpq0y-j{i+bXst|pukO^1#0`6BAP zb&)&wF?ls2t2IJ>4UG^?Q6_v5G%IS0}<-C+=Mxi3nV3 z5fN>hYN?F(nDm?$`dTJASIfRZO8nepmM5@OO7Pcen=0+pvM8n!=~x3xajd};)nu-w z)@tz9v~=r#oJd9*$b%=d&jvS<5yPF)a-IY7yk|x-*@{pDe2NAFsT=KF2uoy!2UFa; zqoTCEU?IZE9LXVo1uj}a^G!X^<@;ZJ#d){hl6W`j6m;YMxJlhrb46(S@U zJmMT%LM%7go}|QcNLE+dO&)iwreVU%3wlf^B)o}CCK+q?o4g7!Pom1HR5IG^&H`wS zwJ9g-{+z7$b4d}gBvT7FjWt|EE?Hk0XN77Z6XE3$3wyb5c$W`(A(2d_qsu*(B^~KPDj8lr zt-HxmnwzRj;Fg7mS%|K%CCRXtgeqitaTRH(sfe_wF52|BjhqFG?v>k+3b!b_T0FX# z;G{4%B@9hzYGj~fA(^Y;)-rWMkwRckYIvdypb>>Od$kqNh7bQUhsbpY$#rqZ5J!`Sl~*p9n&kZ)nKhV8ebrt8KTmPE2JVW$wd}}(BbO1aW%HKI z>4}G9*H937&J#aYNFsCW;G!)3l1N659bCZ0+_IMfhg4XbOWPg3l~aeToaE|XIkDg6 z$e1|121YQB32?-tb%eoAm8==6(%}xRwHc1PV1-l_>BwtI$W*ajWjK6{)qspqg}$=B zWqA3WNMXr;xhPPVUy(A|NEg{j`pZv>x|X$ewbv;eG&^$clOrjXj|NRMJkxJQpcvN9d*@pqF1 z6V2$W2uh_0T9uGjQx)prsZ_P5?<(PRnT$?AsiY1i0i~XMD_y6sQU{Q7RpQpcH-oDe z?Ip_?=_S2Ws+ACjJf*S_qKCbthml@d_Vo_c#v#)TFA9=6_RMhvOh2@2!Qcj-dFIB3Yt;X@QO|Dk!EKW z;pgIBPf|4hs>B&q6vJ)q)r&3nJsph8RcU`1eRZEoNDuv%U>qm}9@i-S4^n5RAuUt({be(@8Ekfc*vpRMp>8%XMYG4dWNU&aKgOhR6k#)MecuJ82 zJZ0x3gQWvpd6nx7uYuh)v5Vh0cDvqWq?+k)tN>bTqi5(#oDc@!Oq2svVI9FC(V9m%OWx~WP-nu@KP%+6Lnfv%IRz-N_`fli?z>icmeEYOOcVlP=*6T2s4YfoUB5axoKS&u`I($ z69j~bp@;(WY@gvU5&~y3#O#YFGMp~LRr}s7Wf_hgAcUjgGKoq8H^c5S-V?Z9K}cLS z!#+Kpvwh2mo1Nk83gEFb@(wdT>C{z)8=(S`0sU*jrCTi?LxDD&NOwNf8Mc_w7n97#DlvY2-y)a!`<;Yh03kp;I?l?ty1i6Q(q z@!!YvlrSsBQ@0~YN=H_LjwCA`SrIz2-@%c{l_NnC{(6dX%9Fx57M?sXyADQ)l7|LU%>}XUr|hI5^@zJCYW1 z#3nnO9zrBUXp@wWBP%FJ0=kZ5ARO_h9mzyEl7VotRalRytqj4nt)VVAYA@o(egNV* ztRLz6RHU2CWluwIte1shtXzlmt#lZ$NXouZl-!9UD*;DxD2}WM9LX*?;w3x0_(jk` ztBzPq$&onX@jIM3Lgs;N46aq7&X!ga|Cg&gYY0?FI+Rtn=&z3=NfS8Yu{x42aKv+U zByHe`2kS`sz!6W@kzltY`)M4GkiwRWGIO{JW#O)@1030B<46S7;pkb?;dMH$QePt0 zj#CvSy%p2WB9h3kh~O$ln#CHXUW~QQC`#rr!(xp3#86zt=(4+jvP=;y)|eUu4`vi031eL78a6$&2UZ(^~Bh7ZVY9iU%N*<+z4CA`<#P9J!zkle<%x`Y#zW5X`clb zWqDux{0v6~;qeIH*a=67i1>_aHk|A2qP!Uj^fIp1(awA~jEFJ|DAK#wO+d8ZS`%(- z?a~iv;8BU>1rLcqD5r{>IuHwN>h0>vw>Pa5RAf0&i=-1*nlo{wZsDq*Yx0O~fYWdR zE6=ex9xjxb9ZA`Im8`3`*5|uArqSx#ghQtSCCOM%3$zff^0JOzEGq#qyIa@NO}xET zSE3htmPOTDxb&>)z{TWOdzQuMU3G26-UB>W81TFsJL1~aO}=$`OAl^hgt2E?vEXA` zY{p7$T0#yg7YSB^+l-R#iv$Z5%%%>^n5Z7_%y+eRG^^%_xwv62PisPeR^jW;BiNw$ zt_ld==G)uy%M@9~ROk{SiyE;=&+A82(2q(~X=NTkOM0(Viu!Sxhg8}e?ZYgfG7r73 z5w*V#f$E|EKV5L1Cw^v!~iZRp8&sXi-E{_@_2HWW$)uFIyr zvD-U(^nI+etydv2SGBg&jlHV3t*5oKZ5@E|=GN7%&BR$%O;;(wW{9qiwHifn0|F5o z&&4}-LpNw??Ous{B1aF7CP$acJX&@4hY&2lVs1uCqg>JjP(<|Wx=f+2>-IzdCDI)! zmU(>=$QXae1UA~&I{}SyyC?v&yA$$+4pTfnQJaukYy+*vEh~SfHlAPGgqa^f7J-Pt zVJnIaeWK=UwNtrdHA#|4A}Tie=3`$dF7B|~MhbeKSn8ZKxWDa*9#0tr3qgDR5H zV+@r>t8%P?uhz2G<-J|`W^9V!4kRnAj?R30V{cnqzDN3$F6rrNZD?QKmLCEZOU4F0 zRZ&}O`-Is>m=;K>u~M%QD%<&0?lYTFay_qQDyz^mSeT~5n4vWIE7bc7NI0N>^eRZA zLhca||I`6(0aT%6s9u#F zqEwcrQN=^lDemf$gp3-5O13Mv>L6I5lO=3O56JL^pW!Q?6 z2%(R}QEad>(REa+bZ=^-t<&0jS9L|(=^_$WXXaOR_N>E<9c`G_4X-!a$d@L*H1h?M zp?bEAFUX#$QVU;@*HNVvd|AmCe9)V%lU#?RRO#Cg1m<+_3{M) zTvb}b7fidVgfNS`tfxzy=WGB<-8=sjjt9jwm*a*fL^U}p1TvMX+ftrY)h*SL$sWZL zp7y;5Y6e&J*bBf-F}VY}g2i(>;pbUh-HNAxyAt*pbakKgQT6=RN0osN$l!f{PkeT-2!IqDB=LHLAF%QN=}#DlTeNaZ#g+ ziyBp26gzQIql$|fRb14l;-W?s7d5K5s8Pj5jVdl`RB=(Gii;XmT-2yGcI#1XbVs!j znACm2^cK6fRL#3pqmV8gTCQT5QWlVTrtW+^Q$^w#!!^%TNqDAig=cOZ=9wxo z&wLLQ&s33krf!I5ZUy0)DhtolE%Qv>G0)uU%rmOZJfmCY8CCaqriy-^sj}u7y~T{7 zYTm7%XX=qE(*hAG4w+~;PLDFL+mgI+M44A!Nsf4+tlwjoEXfN~zG?bNR%`*H)C6RH*{u2 zzNsfd!4r70yjOi1wOx#;F?_?;CeA7Ahi;rDkxs#XPOzO7>o7Fbw((QT8w0RNU}UYWfU!rTN$X5sY8ikTy`D5t@qRwPJQk)K?G z^+}g-YS%xI0M>ZX#>LwKhVHFizVun9v-<|4$ zo!*PsyYDY>3sQ|~w3^$OH!f{z$v3SmqT9xXwziI*wMc%qHY^AK=-S&!16+YaQB>|? zIjP_PQ>uakWT^_?a)vSwX=QD~Rw+I#hOiB0rQEM+Y3;$8WN2)@xv^s{W9HBvRz_?Y z>Nr-Ps!OJenp+!Ib*S7tP(bs&!qT<+8KKnAsIYWxsJoX(zfu&lvN9QI$wT*8SUI+e z-D7NPD#iBHX&c0uXq-!`9n*=X^Bv1t+m+gO_aGq6nA4neNu>n`YzW~_b8;n>=6paZ z%}EnnMRO$pCy^`EV>s*-zt4FC?15yvovzQ7V1t1g5fGp=nb;Q~W}I^|D6{2BN;nRu z9|&ENgX*ayZ}P{L(bjR=B2~fpQZQSVsl2rXJ8n2YC&{x^Mus)RXXj96P0mPnu;Go` zljIhjvsuq@;0|SOH^XP^QW+7K45u|v=Kf?j{);jXO@`yVD6?2e{1#T1Sh{xfU%iKVut}%*yRo^RR?2h^%B^*3)-?+S28E-`Tq}9=w@f)#bhiGb$8!sab zY?f#g7rbZ`mvxwlOBN$lE-VdbN=$XCrn-b5=~Xd3u1#079qjGYZHuLXN!E~3WocoW zb(w3hRpnOMGKyIgkY}Crdt?1pN(1BAlBcFs%w*UqCwJIqCwJH}CwDpb&T;Q%>N^{U zAN75FmU}nby*tajJKMdR4aDf%o7uxXXW@M2kAafyS`Qmu&M-1;4oPI*UG$5JBa&TW*1mLK^Q zL-2TtApln~r0i1+{fes?x{9Y50?~@0-*6Q}0Di^LuSo1oimVt?a1}$!q8Pd=uj-`t zvasXQsAY(plSWG2QCdede{}p+w?q>?R7T1^mC-e{$_%MNDkBiT%4m>JWdt--Wdx|a z0PL?$(W;?D7a;#wc=5AzrN2O1P~}Oc!uO=YS1pyS_C4VZtr{C`drg;7OR@*nS2yFs zg5`(z1pc7Ez+@1;nD3OnYI-qwQUSq3l`m275-%a5t06`T&BwDc9ol4m0y0`d*aQ&* z0=YFxspviCH*{>2(2jGFNC=gnV+h)fqg8EcGyPBkT!>;jw!Km}sq*gC# zsL11!g)zf3Dx|pc`mKcf1V?inI+z_VBcGU(szW{dsy%9LfYSRmS(|^qr2Wa z89%o&{&zA=2J?U=R1n~-u0l{UcL+mdC_Ea}c}`zT^?sh_hP33b#u_CpRrpD*@KD34 z^JA;@^HQCN5XrzcRDU~_er%O~Y`k;5s$|ijJxXRtABCVQ4&-7sAha67ar0L>{j$M8Q&#PJSz20!}%Jk z;Xao6#Fi{g)hJIQ8K5kYIrdFENI;2@92?t)hZs7n673A~_6;yCr1Rc9H{Y0g?Dfb|T2qI5O zy5N5ykO1z!Yx+0|1ua4L+?R(;>H>!Dx zih^ICv3FX(lgwdfv{%5^W?zB%Q{wJY_C2fiQ;v<`-dojv4plS0l68j+8SI0f{fG%E z6s6uyUmr?*6-7N{v0j7$-=+Ym3}JfJ;Q${(b*8{ybjkNd+Ivo8?G=->JKlX8Pqm#R4^54@ zSDD7#EAozc_gxxy|5LT8ou1OHijUv;3*KPk#I8@qGJYA$_&p?i*TIJ%=YJ>XlS}Lh z_f?Zgf+=uV%Bg4c=?z~+|J0YsdIAUPJfXryEKkl+@I)I0|2rak(yS-T3GA_^Mu%+e zB*^eRkpw&v=|lBxA}#9_5qGJ^7e~CQ90iZ3*uv<4;S2NXCe9?Y<)fnD5ptd@x ztpij6i6hml3a4`0?#?MHa!?;TQ*=pHmQtBVra(sfkO_zeCMEJP`f%L!4JjDv^F5q; zpDd@bM@Ds&aHjD^7q8%R{Sb@ugcJo&bnqn+Mo_HjAPm@jAqNzwIL3V_i+;4|Kgmg~ z9(rPz-YeFL5Gs`+wB>HnAjky7V^vJFwVPy1-~?%FqI#p~ z+!TP*4gvIXjUzSXZURSF9pTCFcL=+`J@*~&$?$jF^w1&gcu(Y=qcm-N9LL|#NRRYe zTwA|OZ#A)!95uotVa$<~oEq}d;h#uLBvZ1+r^$*I{668sH-TsvxMJFqszlP~^(2rN z^s31kp9MDQbEpz>w6#i2MY`bG5uo&8ku^SJku|<9Fd1ZL-8H`Ghb$RKSWj2G3wpht z_8@uzUw!BjzZ&T{+E|4Bj!=T?VM}~@!@tC@9&w3JsXBZNkJ1-79Gk>P@wz%1DAxdR zota}(Op#`s_oK))9#BL&k(3?8m=je*6=lYkO4bKwpT(g1s_+~riWF*tb7zMa>XS;z z>Wq0lHrsY1`x?A(zPYNYp;M;`Kn#V=;e}G-5?3ZN#RpH}I8&G%6EJ0Waiuf>t~owA zR)f_|47-`IfvX4m8|kXB#~T|O*U`Rkv#GlWiHW9`I34Uz55q7EtBKf@{^Ub-rIqh) zY3u0dbRWr%XXJgjDj$fz;a}!UiVsGBAHpv=wo@U;4lA-*bGh_e5M)Z0BY)M?&<2at z3I3D~E#gS&FbHVzzcQ=>o&v(SlUaL(I$Z+82E;`xRqD094aY`Xo8o+=0pLiR`Yr^$ zkgUZ~V72d`52-Mcii|oK(1tH#wA*y577UeR+Bk>HBbDUM*621RFd!y0LU>LI2#g>l zC~&}C#Dq_;V&uACr&IO*dPL}+X^4?6d% z&IvcDb8^^b)D*_1m8LLMr%63aC2)X+r}AXDv$ZoHQ-8oNORgfXwN;K|%~w)_4Nmzk zLR*omu;^4Vfh=N;_cS9P;>d8u4M9BSL`DQABj44^@HZN89*bo?!zXr7X3k{fyIUDK z+9xTXgrt6OrIZ=2f?t2AiBH`DPP&0BD{4l*yOiP6FNuskq|M1}Y{_TA&hQAJEbnp3 z4o3#0%qcM(O<)5dsV|f%rKOx);u8E@xypO;U9k+G*Z^NxA~KFV=S(E_*2;Ul^8@u* z(lVl88Ihn2pTWja1l>=ehf`qax4fs%Q1dB7z*$l=eCiNDt8DifUML$&bO1p&UQqRzkR zX7sf(O6ZbdoP-jXeB{KDbK;I1p?2g5wIfHU9r;j!!-xH0<*BQ1HHj4{Q_DDc$D)vy zFKlJ&9J33bVQ7al$2ahxErO757^hp6qm(<$DO?Z97_LW2Aikvx5LZ;G89|tbZBtEP z!!EV}@qN!4Y(mNNTgzIP^{gwRDmZeE4L;4IxK*?zfMNpRYZSfRu&|29IQq;xZ<5Rz zlu4;^r5@ud`EEJql4PX>oP-uvQVv{c@Np%j!j<#JNgg|tiF3FT=Wx|#QQBd13`dBJ z1UBSQ{n{En1d7igaD7-EqC3H68cP-$VO$e(ssZzPk>975>fCICzeS=}Is(^dMkmnk{Ym6FfKrSt?ZpN~t) zcLlJhB77-1RGgAS#wq>%MEx}o{nN3Kc)1Cn#3NaMBh`IKJ5#M{-@+ra!QV@ zrR3aUO7uP@dY=+Ik;-QHqeEE9H?_+xw$*m$7{%% z3U4cS5_?@}hZt?`myI#*ZZr9mQCiN5rDdW@i(yX7gq0QpotB9!ErvQR6Ifadc3LK~ zv>5KROlWC2HlCHQ-DbtgWaUGWS@|qVR*rLK<%5!0`8-NiJ}jA)&!lAK1Cv?#TuN3x zG?|sprex(XWmXPTX5}ztR;*Z7z6Y3<4@6|;kY!dr6p_`2p1<7(LoSA0oX!lNV+NdE zsEmBRI>TFXYAe|lN~FbgO6#w$$XB!+cENBYl9UcdY{jZde;oO^og@8n{w0P8u=}8 zlhX1TjbC!%W?L!oWx9vBbk;Hj%kt8w47v2%SpzxoM24L3C6UXY)s2Z z#k8DMOv_2dw0v7E%_b_5)>15PNLo%VrsY#CY5Cq%T0YyBmJddyWu1_gbwXM`@Rb%f zB`t1CTD}00<~^B-H1F`iRpwUN;e%)jjYd{>8X=&f$|{y3aGGflzvR)%%E9Zb9K6oT zx74z7@H)#olTcs3Pg007&&gT&Olwx8Co58u6=})Jq3Ns~n$F6h>8yNwD68p`uR3Ps zvnW~l8fI3cEGtr$73s>dnM4{%`XL8>vvSZkD+hhE;&WtW>6aC$%!<@!WnqxeW>-Go zm68**DREO%OkX0Es~f9B75=zQ5rthODpZ8oPrhT))-+C69}-G&k$9mOR2?x$QcUp? zY7BuJ_eC$xGa|5e#D;sl_dV)+n?|_=Q_RL!%OkJ1smvops?jt7g`L*h6z32umZn97 z8S|~GR6+&XSfGmhOxT1Cp-nBQr@2O(oUtZV6>(Gz4i*YS9!deH6k3~?`<@mvKpvMi z!LRCSXl!k7?p3(T)Xpyc4FI=>+DQRV0F9^`qwojYg?ZVg00?~!kN&BEp+{^nF-C=7 zRP`b%3Gy=6dM(8>93bo&r673P*?>i-s;>cvEOd1!fUUk-AnzBo!QE8uje1b33&Kyg zER~B{WONB8lieL^#VyIpW7M~h6wNISZOh~pY~^iVPUGVP+6pKYu+^ktISv9!v515K zU#C+oa6wn}oGtYXu`-|Ur6A^7a9rJ#vV^z+Q=4QN{Dpjb_q|O;iVUiY2fhO2bEKHz z2*BQ^(M&J>(uZmrn1(jr)Q*!&;5W5HH8jMNeGMU8QfIs;RsL6fVE_B$yxK|_4#nX| zJqC|g;XAA`Npou=CEs#Q>2D-TI3*4G>@HNja!NH%YE9uPZ^Ak$7*)PRD z5%n!fRlxU2v2|4nII@|df;!!(;(<$*_YZfrq^+R~o0HX{S=D5zob{y*ph&|IRs?6J zsU~do4jdW$uW=1E8OEjUv?&e?5_n2ZZW;l(gsi!*gcO^vgm38jO33>8O8Bn7uY_!z zuY|8`QArtS%+-~UdbU`4sESEub;*=3Y}M+Ux%y_2zG=`md41ENZ`N7zI=)+0L??tr z&r2{OuoOr_Ems0>YI!NVE|UikKb9i(mg6_hD*~qnW(ESr#IlLTxQP{$t12drONYuPmc=Glqzzmrk4smi z$4#y%S5L=HQ6*JnTp6AdjGqWJw0~e;@bQ9a%y{+H!k*V&GiJ=#vu7}1%-DmQ87K_~ z_G~Kb*)(IuCS%5?J;sb3I|_R`3zwO1?hnkEv9WfBu?e+N$53wtHlfa@8E@XZX~w-X zW?W_*f7y&TXP_|SGW-h!1DQY|a$e*m>QEqUq>ahO)T!m^Xf$Sw0g;*DF>eGh+aAN+vEV|`%U7zpTg%|B?k{TU4}%!%9* z)Ah@_ejsKq4&CCt7n`Zyi|z~jm#-bK{q4r*8Lsd}Uefi4;qmHk^V4g({IK2*tnl#r z;BOhf^58KSPxReDqYwUoZr9px9P5Lxap8TMe*^EUfp+1Q#(mu1!jd8IKI2y(Ihuc7 zyVi}ycRl>(s~V4ef-z}C_>{xIrw)NX>EbEZa7B;XZaI%LW?nP2)4VNA3v3ELYN%sTe^s;tC!eFPw~8*Z(;X2n8~Ob%1WeowAex z!iJ@NE~AR){!yK3VN?S# z)T$>r18q_N=&JY6ruSu(@!UVkQ!R|LdOvu#`@Vm)@xFQjX_HY$?|k+l{#WC5JT){= zF+mKQ9uA!vhK>|ZF0oaZTuSj<-*|iCI82f9f3i$3zX&%DWP*1OGzMSo@4jTOna z2f{Cak}-i}An$>6*~HZN@#Dr~nj3d)P+ccanV71q$V{C&d13|b)a~SnyMm*>`tzo2 zN3FBvlI3qaUbxG+^sz6`*>YLoc4OAOtL9vHW8sO&ODmsTb=ehXjV=jaaDQ*-uGXEK z8_vFR&b`yS&uQ2U!l~hyGRL)waG0?^B5+q>i6Y1czm3f9uEG{S9MjJO1Ru*C(Dm(_ z!S@P341@z`K>6N8$87xI_ep_tATXu^2fg5JOp1;hH|EoI^Nc(1ym(3dj6Z&IZ^IXz zb^EOk)y`X2PT~mtjLT$A)PulIAQX%5NOAk zj2@p(of)i3mxMy4&lX;O_+jIeXD|QRy(`D=9(7K~=GmKHyK>`e*UsMDan7jSV^-e# zv$0Pbi{JaZvG|#~jo;}$r)S=Y*B3r|c6Z^U>rR^6JEv>crh3RD+QcuE-vW88fM}P2 zQK|70#$n9CtTN*hs0crE^R|gKrK655UU=@nL!W}8(13BrhN~mtTY|x4rm+0rKR$^< zaA|#Ef#M2=c{Yj5Ey3{MzZ6_?i{zZ((Y?VVNQ{QTFrQ9H!Bx=0II^OG=Ma1*C|0=JC$!CN03SYb@~6pY#(o3nq{H$RCxkeNfW~>E!<#S{kl={^#=<-Dp`N6VOtXQ4Swrz4f?e9aBZ`KM&^(REF{s}7I=;=mFh29Fowf^ zX$z+K01?yhP1=I_;jmzR0v|I3{W}J zEEMfzUW8{8FP5rSqVEL$ta&j6zSp>ZBslu;nh&lV4Z?#(5j)GfV9jUKbjJAi1#b1# zSJN5S-yS&NgDZ7rc%N>!FeltcW5DoRgWEJW{B&B|hS1~U$713*AAYr%U_AQ+zh`*i z(lEH@!f!EpJ^bW^Q+<13;5HAB2e-bb;e}a4@N5nINn~QVACAT0MuDSUm;W$Fs$Gnx z%MZ++e!BXME&Lww)$Jb^Eh4J~SBoy97wxQf>237rwND8A$%W7M!KWMsK6MCOEoPV> zdKRD1cLIwQUeAJ{@{mu zWc3kw04o>;zlh*hjDADvKTNBPr3T(b{VUy7#@h@RztUU93<~@ys_(60_6hucf_tl& z4+Z{Bf|Gwccnvx_00jpjy9X*dCCQ`FhGq=L*L#r9PaJy7gK3#FW&4V{!5$ z#gyy{T{}<{yn5gYH8{bY0~-Rt!M6*G!m47ankhmRV<5WEIsa^d9-*F+3>TZ~m~Qw`bUFA*F1j7>%l$l3%3MVKs4 z62g)GF9d%&a7FNHmV(00;5DeL+=jK7NZ|?}-uZ$PJOR?AX4%lVpB8?%bEk3Qv#Wo3 z|H`q?O_ zHG7sH^|_VbF)lc+uqOEV!w&c5zuCTJ$rCp%9&7Zz^x(jlA!B}Zm(0vLX%1Tg$i2_X0g62SEjl>n}Ps01*aC4ju1 z$eFMSwlY=ld+>iU{_ffxD%rie|AWX&0~>x&*q;yI!|qaHPc+~%HfEm@M&pVY@N<)|E9HIy zVw(mwZ|a}s4%NN)szrj=o|=gU-!m8D{bQ7RPn}u;?VT)L7)!H_OgGVJ$Cv+f1$qHw zduCm~^s=k7yT9=Jv7K++|AT=Qz}XhOx!-Kxp3QD=4_-BJ<=5V5*W*spC&mS3@IAU1 zjg<%P8}2AXZzo6LzTu8S^j@0C?;GwY#NJ@|a7Q8bPk|3}6k=}*e3+vU+beLNqoC-F zolfD-`-}mSV>jFhxC(b_I0e3xV-fj)9E?DP#CMgS~8OfaORZd~e`0)apxsFZAHn*13LY3&m}7j$r88>X`duYXw}Q$W z$-yHmR^MT$*(TH=!V@$+?9q1%Pg1LY0X!R1i#o=$f3SmEZ3F(DUVZDvfJyK>3QLTe zU20&U1IH29?jGD9#1bPI4gQ0znc|`i>ca#`D7sM(}r} z(9aJy7~xS2A8s(hCklL+!3d8P_%MSJ{*1tf8H`W|8I0$L8w|je!O(Cv7>60n!NZL{ z3`}q;8JOn}H83M_PSx^rcw|mO!La@bodV9Q=^eITIqUd4?qVZe_`l$P7WNzF&hS+` zcOJY_E&Ql5sn)wn<*Y4(%W2pNPO8Q5zp_|q_y zSBoXWg2mNT4?77P!}kV$IT9QZlVf~vrCMD7y}@UFaFqaH_`X4oPz-Aqi?r!nzc44% z?$K%8YIKsYa((5U5FQBm$n^up+5Y`9Yf;%|z`Te{5 zy1V*z|KHfXugsfw{r2tGhfh5C+ADj35pRZ{Rby;eXjgf-uhN()_*%y!B@D93y8z^DNFW>g@Jfsi?QccBT`B~oP=mFfJ7YU76=4P0Xt#_kS< zg1;O1+v?zE?O9oyH{`=@!_ z0{B7f0&Fb(8(IYh6KGE38aD@7N^}*6Lilu`E1y?=+;VEZ0 z+7aIX?QHSC2bNzgLov$_hk^V#!Ba38mnjw+M?#mP_R5qJVTf6HIz#=z^1`K&{%AMUKMikIeYE<**J;K?H{-2SDUxLz8=8R3NfkCSO)krD>MaKTPYbC8%eb;#Mv2i; zJaNjT;*(1z;jgj6DE+<>3K^rueeTo~OA1eZz3^Dc)Ke2jjt+)`!N^Pf3nw=9bSI}> z-n(p4=n-rgS}<+(Rhy^hwqM(RLjR+o1(R1^edFxvtFHY*vj0&YwdiIVh!c1qg7<3~ z1{@aKAUM{I0xv94#QWf17sl<0Wj(lkMuY>MkP50FRd{rJs5fF+WO4zR1AZ!5r_^Ln zh3~)-m2wJ#BX0&TJt8}I>d|pCxce^yf1PsnWiuy7Ohn=OXHMz4X~Fq-T{A6o6M8=H z^eY~|vf~GRC-y%k^0`2{j|Sp05QX;wgSw}Y1;hb{?+q4^yYUeR%fD68}<7#t2LN5y=Ss*0HiNx*s6&HO@u~ORw9`lghoMz z)Xsy+G%Z9HJR6CJC(pd>tf>Qk{mbs489%!G+}woVrEiAjpV;?I&;`IK{1vm9f2|ew~keaiqNrr}wu?xrMosGV+S7wOo@00Cl%2qB=ULnJgp?XMUZclVP z$)c)X&Uj$4&rp_Iw@=!G=R?YnEmbaD8oPo_kCHW*o@h+bY4t_bmKu&tehm@mQtVss z#h^KVTJ9!uc_Tn*6tc*VJc11X&l)Eqsr$;a*S@-Oz2f+068ewdyVot``AhK-}Yx$yk*`pfRR z;$!+1S+OB%Mn~^{YSE&iQAG!?()saE?xq@j?#??#mvl#U--GWBvVXvAapBP9R$qN3 zEsSR$oEPQY4zIu6*fJ74`l@l_NN`vv!H-Ro7=4Z3z97in`FaJX$x^jj&TutZj@&-- zmyi3}fj7?dVlyNy)R|tjsZ!u?2fpXk_u%$%#wZU?a}D(yme9v1ufFwGkOBmP|5X?N zyM8?8JsNHwGX(C|w-@^Pq}E_U=l3)mewvR@pocB+@Nu{?81d-$@L+Rh=ZNqrhk;KW z0!KcR>9NZ-T+!pok=mSz@l;xU2wiIJptg_r_($(C{7|_hxHY67G(&QIS1nch(fdIc z*Z10mx_Wepx(;g}@)lM7fgCqtBhX5f|3dkvpwvxz0{)0vjTyCuZ2jY;C*Zrdz5x%| zTa69A7ki)K!8rt%)ffV^rofvCE|EIa|EIv`5nNVdfcFdh0)lhWbCNP!YHOv)#q|ZO zN3|J3{SZ9n$>NcJg5`-6^#_9CkFhtQ>U;0)-}Py%%;C64Qt9I|OR1V$Seu3zU8>hX zqv5^hE0eKC8PY}XsW}6MYcR2^jrW0xy1$5dOp^U#6UQODK_L(o1_@1guJ97JjZJ&b zIKJ@aj@Q?(e|?8>{46h<{(WQaAOCF3eP-vj!oas5D-3Mk>CdcVW(;F5VqgL}$Fg0} z+Z~AQf$)e6kNtVosy81i+-6+1dPi;TjcW=oMqb+Z%C**TSzY%t~@e=V{rgDCkCkP5M?P0EQ8#gd_yS+on}niTzIJv7>Sb5?n2^x zIV%mFt95D%V!FhIaaPna-fa(Q`754CKs8txthU;4>|C-48s{U`7K81Xh< zdi}J*Q?FOw`H2#)2q`Rz)`AeVpQsXq;H1W6>=8wdMQv29qHSgTEW$(_5m+aizcgH(bMTHsn{bWhQPwu$>#g48QL-}nt@0z`!_}EdU*d}mb z+P*JbfBAnJpZVs4#`s@!Ufc7x125iX6hHWYQFPDkg?~TtRN>z{2A;lV!^00}lEL7u z;fTn|UXoE-rRYtqLkDgm*6E(4t~B~qZ?CJ{0Z9$sS-AZb15vUyzrOa`Uvz&Xw{h`> zSI<81a`2vk1{t-zB($4EXm4hr#mX3sLTDNOwsAeXd=PS9eQY}Vt1IL_I412=d~h{s z6CP`S;B6mVDFws(4BhS$f4fkYZ_9E7aB><{eYL^{TsaK^y-?iZe-H2<;yJ=Jg?sVd z5eN$$qYR1xA7e_@;S^0VG4#iQJzc>Q3(uWc=yA2+P<}>l-d}V??AA-$_Jd0!uvRq< z%0X6XNwrqS&KKHU zU0#kfC00V%csqW=WZHQfMVxN@gb9c+U{Msj@xH%rj{n$fykl|xzDv*BJa5;o7p~vC zpKcdnAwT{;<8BgWuK%8{Zy#^0Amt*sd9MpUGVp=W z2|VPnD*Q_Lfk$~{x*Z-1cs}a+A!Ada;yhJn!m80&s5Pk?8Vp4&R)S5~oJCga*5Hkg ze6VrRH8-AdOVu?E^L8{``&98Wk*ogl3#VNZf}bH*u3t&qq?43 z-?IIZ>QN_^RxCZ&Sv7sls>`2jY5C!mH}6iT$Del5thsCJDpoDL;`=QUXQ_s4PEzwM zwq#EnhgB7C&Yz3}aR3{?l)RE(=JysU8Q z?#RhIcOG~pas>+d5q!Kn-VEY<+hb1~(AT_tCxP=O- ztGP|T7P@fT&AVqWu#Yb-{e1s_6GID&uGwImTX-UKYA|?bI1+uC`3t%m2R|2nA^HH! z5HeO1ltq=se;qu~HxNBQum2|2v%fEL&>IvUI7qN!CZZ~Xdm}SI77i6*@0w7h$db(t z;o!l?3m@&+z4Y<*>%VpB?j41LN8IrK9idnIt5-gB*<}x{4872Q(jD*Lpk_~C`ZpHy zma@SHL`~N5I0-NU+VJLGYS}*Utzpq~l8_lpcS=nE!q4A7dv^ zDm@DKqxU^mX!*ln;K*s?PaJ>pF@q`~JNve;%%A_2+h&Ju^4}xe|M>;L}698P5H|^q}ytaGi#F zNc~ML8zNn0O1$1M%2Vf@H0PvqKW9w+{lFW+#!zSBxbwc;*>%e~#-ICl4BU-*0TJy; zUt})?AJZ%51#rnQ&J1!w60>XY{u2heUNgRCoR$3IO=qPlFD)<;!%niPCx;LPAD z^B2Y@-7(>)83XGE?g}=E$eujG1u=K89yc-j>cu6DqxYu17GpSWPrF`6%A%QHyV%l+Es>w+kG$a1Vt&L zpmRQ0&3vM)@KASIJnkt3vsvIL6WrYf5&N#%?qIwYyn^7o-C;P3 zwi_uQiw+r@0=8&Geyz4Upg-8x1-o>8f#vqFJ;SW(ADml_C3p{8_TdI?11I2%A@Trw zIROC)tmDQRNF|kHMKy8URlz$?U6vkq@iP|>{3~2E(3x0SG4A5;UK}jh9QsrJb#-S( zLp!hUPtM$yQ+Hr4p(MF{Uy%m6+)ABcxH2gOhkW?qN!?DHz$!`5V z;|7wm^>BB6aJaj-l3R#?9SV7gyMfNbaX?at4?Ik#DL#%L z9=&!;;0Gjx!g>g$>Nkc0r>^e7P+;4wF=<*@Ely}4j*TcURC&kYBhLBa>Yk0aT-*^l zuK)FLQUB`~-?Tb^@ud}?`P@lkjy$6Q*L_v{Oax3F8+4Wn1!2XG~Y1GK5OZPN7Y`QJ)`BQd3Uy7wl+7( zDlVCHQq*b4q|Pp{S=OC6dfr`E4;*)U`GV?u&b=c0mEv)u?2uW0_KefcJrR;aG*Vpp zph!*?acUSGyRqPE==!lHNCMTjCkC*;Rly5OLT|cwkY!Z$Y4WZiNg;f`_a^E06pwuH zvxdOWblaKihr8|IRAAsbk1ij4s|OF4`S70*;B$4u>81J~L+=#*-Y|Nn4uMa1=`Hue zUAm&tcYoz_F&dQGQESU@Jm|k%=-aP&(2&Lq9hMPN91pko;66@AHI|t5mT}rh9Kyc7 z9V5ZvWFm~LM>_gB7ytgi4IVu5TTNwjUyf=Q&JR!asIe~!!cB9reAUJBuv+_#0N)Y7 z4sQ*Q_38Td(HgGsM>U>ui|Qkb?Y1-U{t#|d8buzyh~`E#`rb(@XMOkJ2jLUKYgsc5 zic!E-LYTyjlT0WHsw^;8%Hz^-7$!w=2>;BG#8-k3iDou!{CuYMobxW9RR+!c)?%%h z*G+HQ!kSsv3C#?z)v8%kI`QOat}&CGQ(lwrA=M22`Sug%Lp3+#ST*BQ=S=shCRiF( zs-{`vijq1)=~Ky}!UWR>g^PX&FkNqS3S0@>7FI|4Ub$j^_-eh z7kzQ|{F^QdR?J^pd-~O{eC6zu7S33FA&i%?6uc9&HhJaBfeSvjVEPHnndpZ~B!lpU zG5zf`p3xkOeyBJm@V&uDJh{-O{!xJG%7ACq|8)dDS_~`ex1STfSo3%vsxx*k**E__h)1n|blEPaeGg(c>GU}8#X-Mvg-T2z0Y0_qN!0L4*EuOb|(=x431%j`=jeCOBSU1u)J?G9CPz57mu>M z%3V@%!!EMCgwOZhB>kT1v=4sP5I8Kav@_WcciT~xcaKMx55Cn0Kg);z1eKpv{TN0s z)&CfJr|9>F(K~er9F|w;E%(D+x?p)@E*F)uP;FRV%Y(v72=whz4+_i6n88sQA=LwA z>s+{x)5`J+{4JwXBBKSMcl){Mdt&m@5g0M)zGwwP6{zc+|im za;TH#2o_VYJZ${V!=fyyz;_sMqjjsw@-o~$TEhq4AJW@Om9f|Lm1U*+u&nTdm1W%< zz7iglR;8)slab2BwmS+(s}DUy$<6Vr($`m9<%}8o*shW>*-fkZUS7BM<%e3g&UCh} zSl%~t*486tUvk`|*dqF0$1a)GhxG0fh5l{#UH)uu&-dF~p5Cxw_e#)WajT%EPRYLA zFnDF~b6Cx2YC?gd0$3D`DTkA-@)(~;)4@wZxx$Y=maa(69d{h~)+Z4sM68ayNh|@Y zDUm`1sF?*;W<;h8KR_A$>Pp3=uYHr4wDpyBYhSs4<&N32wy$d4Hv6pYg^hP^n^;|1 zdR)=MbHT7<9|>Rj#4$@|Z7mEu{_VoSZFhG6XwB-~ovlB-^2+~M73?>fyrZ&rfqlfL z=npmfAn4x+sP9MJ4ME3X`r!AFNx2(tzYh+#|6y|b??%*p*x+N4{V4{&WY@?SI>}>2J56w`0xu6CN!}&Ahm( zbBE*X=&ZhUcB<%+@r&2qbi@uL{K&VA$c~fecF#_pGOOa4-rb$;KkPZSYR;+2vwIhu z0x54nN2fu`LjkxGV^mOKlAbh1ZudLE7jGD-G^T!H>)33Ept*6wry&B}UK=?c@sSEF zU&^PdRGfSRXTpR}A}F*YH+{`*lRj5G?$ol1sYlEzoc@WVg+B9xN4^>f-5d(lWq;ZK z?N6dmnFz%uGEHaElyr+)0V}u~Ffz>q$8xoOBsj7pyu#-C$`CW2zQfetrt7PAUHs~! z6KI#FSYJCd{{x?lAn6>2CVEKV*j~;i)Y;g$Mzu)6I1aFYGAx@@@nDHVRu@-E`9S>?sWedab z{EaJmaL}M@BhwdtY}-vw%vxA)BqfdoB$iA zX*}eMOju zP;TI(k7XKWg9GC=5g*4WY~=qCgLxcwqc|$+fT#e*j1RbErj}2Q;;2M<73I~DyZv+& zhF|E~GJV(lNv-*FzBzu|%V```aqstcE1`sH(s^9#4mI(tU))7 z2U0U#%=)RlMqIljVbO}cMpb&S4l7A+jq*jneyoj!Ubb5+;sLO zH!q&E^M=*NhJhuxISb#n{E75jZ20WKMT5r#j71v^DkkC z&I)#fPccXuZZA=vNFAZoZT?nWDzPLx=+#!s9mc*t@Lk4&S=@&mv-koJJ1s1Uc6(vB zi^YRl-(x7OgdfM&!1u+fEce5a8RiVI@>o1RD$fCJVsYwn0v@p+U!SpDTOHqfF)Zcg zd9>0ZiTV8A`G?XP!^f(=@6~qu5VNNo20nENTrGWxb9T9gD=J++V{^CSKP|C+)RMo0 z_YNJeVN#_Q%S64>hC^#JZ=kZx2&&bES5wGeRy7ntQ#(Vd^j9qWq3>X&(u}{{p;R{1 z+&`dI_Ri&^vfm4@-ccw#@^Im!VLE%oBc!v7HqJu3d!eGg!VENuw;hoi9FtE$?p<=z zc{3J{O_iKFb-|qQhYeTNjf>wIDOz;i!3ya0SiJcP-VD*THj4qxJjvo=W>0 zLvUPr=bZ=dKLpd=z@%nD7gOjEObZKl&ifRYKvU=j>J9GHHmV`?z}%1fA7D8;G3ID% ze93}2g|5(Qq9z=EAQ)8r3O#q{o#-1V3Y~UXJZihn-5Sq?;stXq4rUKUgTbbb#l8a( zxSmBQFxPlO!QqrDrVBh|8s8>S(u{}(H$SC>WjYTI-rtP(qxOpF3MyFfHfkxs6s$BL z)Ec7t1iz138;f1M$53ko51BzcCd2H6&!UxI1^ZIvRWv(RsC3F?%D52!*y+Ts#E|S> z#CJkzT^MZI@SU}jZ#rV;y2j0qmW|1Mv2F7!8&p{Di_Vy`Z(a3=t-hFE!I|Fj`Ad&K zw`$W3ZytX^{l(N1u?_Im&yXObnF8S8_HQ!mj>Z#7|$D5SHQE(zt$tA7`AYw9n zL9aZ&|5s{5w|Wk8;mA)<`7m$!zzd(gBN!~zkt#5GYVamCC^$U*rNOfq9zKh#48dV# zFqR|0w+A=_3_Pf>W)ZI6XNdJ7IFgitf0fZPBA#s{Lqp1D=I$CGzs1fk`?yU3 z6OLCgVQoa^0+(>d$TPXC&PMLcZC1LX=>5guNNR46bO*|aI1-EUCRXK5V<1+K>DqpN zxRRhYbVxr7+3BBA5}q9jEuO-&(=IL_Tl?2PV#rALq|PvAY=|exJA;rN@^xbq(gLZH zK@%2OUES63Le}C}BTubP^3R?`S)Jj5%h;Y1{(6yiq;O_MsXIl4ixwb!>BN3RAW$j#4Um)1 z2zgLO(q>A|`zp4DC9g)XWuL62Ktbw!C*3;LjI_PcXJTzZ6mYbBjvVDip{qW^IuKzF zMOJgdG!U$Bwb4?9{ChnzK@&h%>Kdh0Un3oVAvEd{!KP`P>d`{gr`|fbQ3SyfI246A zD6`&NMv!qq;R8+&3*6kNu!k~*x3j=Lep^8;{XFk*Onz!mj(2r+o8G%}5)VhY&g?gR zYxtS9zgb1!*d?zlcF&9ABk|?**s#~v%a1cx4&067d_y*GmS2%4-+*wI%Y{;BDMH~z zaH0jStKe!|za$?LA)fCt>|#1tJj%`7x}C;yu${~Nz=8Qm{#lbw$q~Ydo!O|Ly%Opo z2tt`g?B$ans@8X9Wm$r z5t09KCyk&Invy%@Er2yGb*A7DE~Q9{QODE1JqIsR;AZK(Jn3VSYMPvtv~T1MHcC5f zFwG^~x9%7(kN7WL`2tx<`&KTy)+@i>?5n@MfG2s6P3pl)KZ)DWI>m%tIsAok%R%K7 zK3|;V+NBVaK388XP>O(9@kDs#)l$T>Jya{~oe6+D2vk}loTLyBV0RpL!UVpe<8aup zJ2?Cl;2zx8R^UI#yE*(*z&mk^ox{~X%YShAe~^i)y8#;q#8#pey#1TgfWMU@Km+|( z3LG<{FuLJa(1?BO<^i|g(V;*-gDPL$uT%V^=nJbez|}Z>Nj*7>x<(qHG>(BBvmXF& z&F4L(mWOq)gi-!8z+W;czrGF=BH(`_SJfs1uEdf7=4Ushx&uQo6Fm7vR!tt!o=WlmXeor-fs7QHoK zOWX)J$a7bYU_lsfZ1Y<>TG&ANlp_W^Pq9g*3wn0<^#o%C&fDU@e_9Yw!YOuPB(Da$ zkbH-zcinD1oHtHz_#x^5r;an~NE2T*#+oSI1goKg5n?Qzpy$k?unx}A8)CA+24HNm zlrzzx78DjnUR*i@>1gfp)?0$h)vMdYzT39de!30KP|uSMD05U1;|r*0hR>B_L3+~{ zOE3L)K6f*=7LdKcf;F3-;~uysfc+}B8#Zp_K$n*fIZTQlg5J8PP6}E!VGkQOsNa~F zfhXM3S6b==`;f-{m@s5#T8>sg! zjZg!+VRnW3A!ofB(f_SMNZiy!x09foJUx#`clPx++GkdBX|>Qs4$c-VS?M?I7ws=v zTPdWksMECZT5)liz0g~;d1@8uanD>~)LYw4xHApsBT+E5T`-S={V(8~B7!TEO= zWKY4x2#1oHLNfuZSDw`n!%W-12D(vLE!&!zQEfk>bC*^<+q*Ygy-fP@S&)y5ByG`{ z13@c%NLjrdg#SX|!DCjGC6}Pv6lerNXXaD3Jc3SFpa|wvx0ru}fx`e5iNknw0j=ou zCnBwJNgTI5Icr#p4e?rrHK~puVFA zc}yJC&!<#d(GY*?xH5eI#c*hh!w2|FeE2xrFnsxtV@m&s{wl-Qkq;kAE5pZ28-@?& zo=IsMzKMq6dx;Mpm8anY+&Fw@b{IY%Ln}0_e*8NvhA+zq$M7lli&Sa05@o zgm298RbDOhmLh6B_bVDh9U~>uwmY^u=>P~V;Phu5Ar{7!i~g_jW3099tX$8uGMn~R z^U9{ptca}6pYFY2RQ2-6@k`vLh^I4BMsH3FPMZ*XC`a2`_+?p~%R&#WgHRWqI3{(P zcATO~c(ZLNlK1(A>x&_xnqXYTKE3(RSk+s^u~%OJNs@z~fn)^H2HKPke_$!4`(+dh zpdG;^c|oEsK#wO;r#yY>R zsp+n^=kqxI)9fdWYZS}6x5-PRr;TL;=M)&au^}03l<1AmVbRbh_1u6EcaR5-c4DM# zJ*P^Yh=Vz|&_NExw^@$!$w1BkzsJTkRvtl_SaIsP&ZM6EW*1H1kOZZEEOYer&oHfD zzqSW{1*UN0S{?gpCiuYji%bkkf7F9%sl)51JcWqFrGM}Qf^zHrR=*kQT0c=yr^3m08X zQi8wGHQo$45=5v4+8S;~gyv8#-W;m_If|e`bstM9Qh~l~i}4IrBrltz3WaaDo7rGc zqkhV<9xxL0fkus^KC6FlNJzgP2ZBSVy*Wh**LtoS;$O**48Lby^3_MT%5ZT3>&-yeG_n=dtA>O8tgeM{luQLt{%e2FsiiY4BjBg zH^D21zwgL-&6KB1;if!j0$2Khg*x>wNA;&ph&=!AVq}S99oXg2a6doaEp&#vSa=cP zdTj6E;$+#egODlu`S+SI(y2p-j;eGq=*5Lj+R~wWhoPOPCwJ`L(V<@iV&0Xb>;J4J#Rs*2 zvD_xKqp)n_M(v^(Qj5>gwh_&**$&)vf*{0-aB^bR5{Jp5AEr24?uw(!dXeD_D?`3C zgg=fp9eLmqE)Iu}uRF|T+Ks23eIaPmSIbiWvylbJ2g6o-PFf8YXImj%t3K%{^u!V8 z^i5BiRACF&1k?^hA2$QgUGRmt=Lh=y^uRS63GY!lq zKas9oeb6ObOjsYhKfyfNU<>ZojG61)uOt{>u+O``g$YWpdtnUvsVvTYF8s^3@zZ5u{ASiTS@ zVxe(cv)R8O^&E9y1ji6n7YKnqNZHgWLy2&V_SZiIDNCnK0;%WzV~}!_fz(X}DRbwC z@QJjL9G38JSSx$4x}bjKOe#Oxvg@uGE9bV&#`W~if&=z&$Q*&45}Hj+nyhtI7I^&o zHaa(AgLUQeHJZ9W`|3R3|+p!!$-3Z8}jha15)vWo%WN+a-Ix^F;#1;C}%!sBBcbN{TZ>bp+5v)iRs`go)OxbX)r9@A^Qo}A$(Zi z|EuP6EZnyy!=-oMBFI?y*-%<-UL?VusQZqF)&SM0AJjp=KtH7cew()T_>im3pYT(4 zaIl~>X(!$ye1b}gZ~>dNNIpdF0w&k6@Ci5GsXX}*0Vm`AGPO+(U=y}d9Kb{;Y&wkN zYy~=DduJ$RH&ZeslCza|FdSJqyYSU#pM51CWZvsDGK*`4Zt~4*Y=ji?){gBpWwBx5 zakVb&sjPm!J_wwWq6{I%O4TCOS5;e_nXz6z#imfbo!HR#<#*tYbcqWOi!H0!zT+(+ zhS$f;=GXlsehmH6PYI*w<*eKj3IDxmt~_06p%pUaDY?;vj!UYRTD{snHzuhdAn4qd zjq_hmS+aX}hrPD(^J8+SM<3i$y6Elp6IVs`2@8#J8|h=&zh_x;)P^9pWqy4}M~AtO z^|tNZvusK9)~V>ze8>&qU_sZYliXN1>w+Gft+Dw>Q~e8~#fpkH9t;Xa5wpkC*ftY_qicc;`4TmiWPo;0uZLS9}oRA0VD zdsb*{SJU4B?_gG-!xQyzfu{N)pi~cE&6)I%n;rC?nZ<(j-viqruFFyvFGPt4^?T3G z{5U<|9&yIm7G-Nhljd;gaO&&xH*Pr>7*x1)?h2bDmWfr#E8kwUe*3}b>A5lS^KHfO zlr2FUqLRyc_P6vI=^is}szc-|x2fA^F5Y6_+tz!md)Uk|Xdc=|N>kk>$ulTm%6w@3 zeD*=^_*S-NEUFh>&CYy#X;ys6$@y1T?c2AsVB5+SGd$hfdu zty^E+mV9nr<=XhgrH8zdCd^r%JMY_NMZe4e$-=dNQ6SlQM-Uf=4 z|3m3Jn|Jz$!%?SG`V8;mJ}1^a`b2VcWq-FG^QOk7y2s6R@BebY?67$WlKr#)NcP`; z=UtxR9qlopzmu=m)U@d_>%0bc+hH{%*n4E?O;`n+= zxlvJ{=#O&DKpP05+L{B^V>~RJZ0tLE*p*=R*tU(CKRf5`)=b)BZoYL5zO|Brg;!Av z?VDoNWvTdyd-Za(wV_IA6^4)tC74N9?*l~VB~G!jIbqXn_t|bQv+xGZ$l(ajn-Uf? ztLP1tTGg;gATIj~OLR>tYRjYnS{kum*Bq+$m~3GWygg-=;3fN3YyH|hqh6BDQeiTA=s$18Nm=#`~RBqF3Y2;<$Z#e)jxTZ*&gxBS_fe` zkGr<2`w2Hh#+i*Zn^4ai*)ZZ%F9dv-#^@18h6≷9WK0CApUWn4bB=meh;stxvU@ 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 z

    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 z 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

    Bd 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≠1AU|K%)`OS25Z{|o%e%0D+5{>04U9*Q*1!q^8U;HJTG%Y?XTKK#Ml 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 literal 0 HcmV?d00001 diff --git a/frontend/src/assets/fonts.css b/frontend/src/assets/fonts.css index e35dec92..176c2062 100644 --- a/frontend/src/assets/fonts.css +++ b/frontend/src/assets/fonts.css @@ -8,4 +8,12 @@ font-family: 'Satoshi'; font-weight: normal; src: url(Satoshi-Bold.otf); -} \ No newline at end of file +} + +@font-face{ + font-family:'Inter'; + src:url(Inter-VariableFont_opsz\,wght.ttf); + font-weight:100 900; + font-style:normal; +} + diff --git a/frontend/src/components/Report/Report.scss b/frontend/src/components/Report/Report.scss index 9c619e9d..e201ee6c 100644 --- a/frontend/src/components/Report/Report.scss +++ b/frontend/src/components/Report/Report.scss @@ -25,7 +25,7 @@ margin-bottom: 15px; } -textarea{ +.whole_page textarea{ padding: 8px 20px; background-color: var(--lighter); border: none; diff --git a/frontend/src/pages/CreateClub/CreateClub.jsx b/frontend/src/pages/CreateClub/CreateClub.jsx new file mode 100644 index 00000000..47a7aff0 --- /dev/null +++ b/frontend/src/pages/CreateClub/CreateClub.jsx @@ -0,0 +1,246 @@ +import React, { useState, useEffect, useRef, useCallback } from 'react'; +import '../OnBoarding/Onboard.scss'; +import './CreateClub.scss'; +import PurpleGradient from '../../assets/BlueGrad2.png'; +import YellowRedGradient from '../../assets/BlueGrad1.png'; +import Loader from '../../components/Loader/Loader.jsx'; +import useAuth from '../../hooks/useAuth.js'; +import { useNavigate } from 'react-router-dom'; +import { useError } from '../../ErrorContext.js'; +import { useNotification } from '../../NotificationContext.js'; +import { checkUsername } from '../../DBInteractions.js'; +import { useCache } from '../../CacheContext.js'; +import { debounce} from '../../Query.js'; +import CardHeader from '../../components/ProfileCard/CardHeader/CardHeader.jsx'; +import ImageUpload from '../../components/ImageUpload/ImageUpload'; +import axios from 'axios'; + +function CreateClub(){ + const [start, setStart] = useState(false); + const [current, setCurrent] = useState(0); + const [show, setShow] = useState(0); + const [currentTransition, setCurrentTransition] = useState(0); + const [containerHeight, setContainerHeight] = useState(250); + const { isAuthenticated, isAuthenticating, user } = useAuth(); + const [userInfo, setUserInfo] = useState(null); + const [name, setName] = useState(""); + const [timeCommitment, setTimeCommitment] = useState(null); + const [description, setDescription] = useState(""); + const [club, setClub] = useState(null); + + const navigate = useNavigate(); + const {addNotification} = useNotification(); + const { newError } = useError(); + + const [buttonActive, setButtonActive] = useState(true); + const [validNext, setValidNext] = useState(true); + + + const containerRef = useRef(null); + const contentRefs = useRef([]); + + + useEffect(()=>{ + if (containerRef.current) { + setContainerHeight(contentRefs.current[0].clientHeight+10); + } + }, []); + + useEffect(() => { + setTimeout(() => { + setStart(true); + }, 500); + },[]); + + useEffect(() => { + if(isAuthenticating){ + return; + } + if (!isAuthenticated) { + navigate('/login'); + } else { + if(user){ + if(user.developer === 0){ + navigate('/settings'); + + } + setUserInfo(user); + } + } + }, [isAuthenticating, isAuthenticated, user]); + + useEffect(()=>{ + if(current === 0){return;} + setTimeout(() => { + setCurrentTransition(currentTransition+1); + }, 500); + if (contentRefs.current[current] && current !== 0) { + setTimeout(() => { + setContainerHeight(contentRefs.current[current].offsetHeight); + }, 500); + console.log(contentRefs.current[current].offsetHeight); + console.log(current); + } + + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [current]); + + async function handleClubCreation(name, description){ + try { + const response = await axios.post('/create-club', {club_name: name, club_profile_image: '/Logo.svg', club_description: description}, {headers: {"Authorization": `Bearer ${localStorage.getItem("token")}`}}); + setClub(response.data.club); + } catch (error) { + addNotification({ title: 'Error', message: error.message, type: 'error' }); + navigate('/'); + } + } + + useEffect(()=>{ + if(current === 0 || current===3 || current === 4){ + return; + } + if(current === 1){ + if(name === ""){ + setValidNext(false); + } else { + setValidNext(true); + } + return; + } + if(current === 2){ + if(description === ""){ + setValidNext(false); + } else { + setValidNext(true); + } + return; + } + if(current === 3){ + if(timeCommitment === null){ + setValidNext(false); + } else { + setValidNext(true); + } + return; + } + if(current === 4){ + if("" === ""){ + setValidNext(false); + } else { + setValidNext(true); + } + return; + } + + + },[current, name, description]); + + useEffect(()=>{ + if(show === 0){return;} + setTimeout(() => { + setCurrent(current+1); + }, 500); + + if(current === 4){ + try{ + handleClubCreation(name, description); + } catch (error){ + newError(error, navigate); + } + } + if(current === 5){ + navigate('/room/none'); + } + setButtonActive(false); + setTimeout(() => { + setButtonActive(true); + }, 1000); + }, [show]); + + const [viewport, setViewport] = useState("100vh"); + + useEffect(() => { + setViewport((window.innerHeight) + 'px'); + },[]); + + if(isAuthenticating || !userInfo){ + return( +

    + ) + } + + const handleNameChange = (e) => { + setName(e.target.value); + } + + const handleDescChange = (e) => { + setDescription(e.target.value); + } + + return ( +
    + + + +
    +
    + { current === 0 && +
    contentRefs.current[0] = el}> + +

    let's set up your study compass organization!

    +

    Study Compass provides a variety of tools designed to make the management of your organization as smooth as possible. We'll just need some information from you before you get started.

    +
    + } + { current === 1 && +
    contentRefs.current[1] = el}> + +

    what should we call your organization?

    +

    This name will be publicly visible to users, and should be unique as well

    + +
    + } + { current === 2 && +
    contentRefs.current[2] = el}> + +

    tell us a little bit about your organization

    +

    Give users a description of what your org is about, feel free to be descriptive!

    +