diff --git a/src/App.jsx b/src/App.jsx index d6a23fb..de4bdfb 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1,15 +1,14 @@ import React, { useState } from 'react'; +import Footer from '@components/common/Footer'; +import Header from '@components/common/Header'; +import GroupsPage from '@components/GroupsPage'; +import HomePage from '@components/HomePage'; +import EditProfile from '@components/Profile/EditProfile'; +import ProfilePage from '@components/Profile/ProfilePage'; import { ThemeProvider } from '@mui/material/styles'; +import { theme } from '@utils/theme'; import { BrowserRouter, Routes, Route, useLocation } from 'react-router-dom'; - -import Footer from './components/common/Footer'; -import Header from './components/common/Header'; -import EditProfile from './components/EditProfile'; -import GroupsPage from './components/GroupsPage'; -import HomePage from './components/HomePage'; -import ProfilePage from './components/ProfilePage'; -import { theme } from './utils/theme'; import './App.css'; const AppContent = ({ currentPage, setCurrentPage }) => { diff --git a/src/components/GroupsPage.jsx b/src/components/GroupsPage.jsx index cd2b1d4..f1ce2ff 100644 --- a/src/components/GroupsPage.jsx +++ b/src/components/GroupsPage.jsx @@ -1,14 +1,13 @@ import { useState, useEffect } from 'react'; +import { useAuthState } from '@auth/useAuthState'; +import ProfileCard from '@components/Profile/ProfileCard'; +import StudentCard from '@components/Profile/UserCard'; +import useUserProfile from '@data/useUserProfile'; +import { resolveMatchRequest, getUserMatches } from '@firestore/matches'; +import { fetchUserProfile } from '@firestore/userProfile'; import { Box, Stack, Typography } from '@mui/material'; -import ProfileCard from './ProfileCard'; -import StudentCard from './UserCard'; -import { useAuthState } from '../hooks/useAuthState'; -import useUserProfile from '../hooks/useUserProfile'; -import { resolveMatchRequest, getUserMatches } from '../utils/firestore/matches'; -import { fetchUserProfile } from '../utils/firestore/userProfile'; - function GroupsPage() { const [user] = useAuthState(); const { userProfile, loading } = useUserProfile(user); diff --git a/src/components/Home/StudentFilter.jsx b/src/components/Home/StudentFilter.jsx index 7f87686..ab2fb9e 100644 --- a/src/components/Home/StudentFilter.jsx +++ b/src/components/Home/StudentFilter.jsx @@ -1,5 +1,6 @@ import React from 'react'; +import useMajors from '@data/useMajors'; import { Box, Autocomplete, @@ -12,8 +13,6 @@ import { OutlinedInput, } from '@mui/material'; -import useMajors from '../../hooks/useMajors'; - export default function StudentFilter({ selectedMajors, setSelectedMajors, diff --git a/src/components/Home/StudentList.jsx b/src/components/Home/StudentList.jsx index 8cfe024..c2e6b52 100644 --- a/src/components/Home/StudentList.jsx +++ b/src/components/Home/StudentList.jsx @@ -1,12 +1,11 @@ import React from 'react'; +import CustomPagination from '@components/common/CustomPagination'; +import StudentCard from '@components/Profile/UserCard'; +import useStudentData from '@data/useStudentData'; +import usePagination from '@hooks/utils/usePagination'; import { Box, Stack, Typography } from '@mui/material'; - -import usePagination from '../../hooks/usePagination'; -import useStudentData from '../../hooks/useStudentData'; -import { createMatch } from '../../utils/firestore/matches'; -import CustomPagination from '../common/CustomPagination'; -import StudentCard from '../UserCard'; +import { createMatch } from '@utils/firestore/matches'; export default function StudentList({ userProfile, diff --git a/src/components/HomePage.jsx b/src/components/HomePage.jsx index b6565ee..65de340 100644 --- a/src/components/HomePage.jsx +++ b/src/components/HomePage.jsx @@ -1,13 +1,12 @@ import React, { useState, useEffect } from 'react'; +import { useAuthState } from '@auth/useAuthState'; +import StudentFilter from '@components/Home/StudentFilter'; +import StudentList from '@components/Home/StudentList'; +import useUserProfile from '@data/useUserProfile'; import { Box, CircularProgress, Typography } from '@mui/material'; import { useNavigate } from 'react-router-dom'; -import StudentFilter from './Home/StudentFilter'; -import StudentList from './Home/StudentList'; -import { useAuthState } from '../hooks/useAuthState'; -import useUserProfile from '../hooks/useUserProfile'; - export default function HomePage() { const [user] = useAuthState(); const { userProfile, requestedUsers, setRequestedUsers, matchedUserUids, loading } = diff --git a/src/components/EditProfile.jsx b/src/components/Profile/EditProfile.jsx similarity index 97% rename from src/components/EditProfile.jsx rename to src/components/Profile/EditProfile.jsx index d0333d0..0fd57a0 100644 --- a/src/components/EditProfile.jsx +++ b/src/components/Profile/EditProfile.jsx @@ -1,5 +1,7 @@ import React from 'react'; +import { useAuthState } from '@auth/useAuthState'; +import useEditProfileForm from '@hooks/useEditProfileForm'; import ArrowBackIcon from '@mui/icons-material/ArrowBack'; import { TextField, @@ -11,9 +13,6 @@ import { } from '@mui/material'; import { useNavigate } from 'react-router-dom'; -import { useAuthState } from '../hooks/useAuthState'; -import useEditProfileForm from '../hooks/useEditProfileForm'; - const EditProfile = () => { const [user] = useAuthState(); const { diff --git a/src/components/ProfileCard.jsx b/src/components/Profile/ProfileCard.jsx similarity index 97% rename from src/components/ProfileCard.jsx rename to src/components/Profile/ProfileCard.jsx index 143c3df..ab3ff0f 100644 --- a/src/components/ProfileCard.jsx +++ b/src/components/Profile/ProfileCard.jsx @@ -1,10 +1,9 @@ import React from 'react'; +import { useCopyToClipboard } from '@hooks/utils/useCopyToClipboard'; import { Avatar, Box, Card, CardContent, CardHeader, Modal, Typography } from '@mui/material'; import { useTheme, lighten } from '@mui/system'; -import { useCopyToClipboard } from '../hooks/useCopyToClipboard'; - export default function ProfileCard({ profileData, open, onClose }) { const theme = useTheme(); const { handleCopyToClipboard, SnackbarComponent } = useCopyToClipboard(); diff --git a/src/components/ProfilePage.jsx b/src/components/Profile/ProfilePage.jsx similarity index 98% rename from src/components/ProfilePage.jsx rename to src/components/Profile/ProfilePage.jsx index 543bd31..4989d64 100755 --- a/src/components/ProfilePage.jsx +++ b/src/components/Profile/ProfilePage.jsx @@ -1,5 +1,6 @@ import React, { useState } from 'react'; +import useUserProfile from '@data/useUserProfile'; import { Email, Phone, School, CalendarToday, ListAlt } from '@mui/icons-material'; import { Avatar, @@ -16,7 +17,6 @@ import { import { useParams, useNavigate } from 'react-router-dom'; import SignOutDialog from './SignOutDialog'; -import useUserProfile from '../hooks/useUserProfile'; export default function ProfilePage() { const { id } = useParams(); diff --git a/src/components/SignOutDialog.jsx b/src/components/Profile/SignOutDialog.jsx similarity index 94% rename from src/components/SignOutDialog.jsx rename to src/components/Profile/SignOutDialog.jsx index 0bbb90d..c91351d 100644 --- a/src/components/SignOutDialog.jsx +++ b/src/components/Profile/SignOutDialog.jsx @@ -8,10 +8,9 @@ import { DialogTitle, Button, } from '@mui/material'; +import { handleSignOut } from '@utils/auth'; import { useNavigate } from 'react-router-dom'; -import { handleSignOut } from '../utils/auth'; - export default function SignOutDialog({ open, onClose }) { const navigate = useNavigate(); diff --git a/src/components/UserCard.jsx b/src/components/Profile/UserCard.jsx similarity index 100% rename from src/components/UserCard.jsx rename to src/components/Profile/UserCard.jsx diff --git a/src/components/common/Footer.jsx b/src/components/common/Footer.jsx index 81976d1..4e86e07 100644 --- a/src/components/common/Footer.jsx +++ b/src/components/common/Footer.jsx @@ -4,10 +4,10 @@ import GroupsIcon from '@mui/icons-material/Groups'; import HomeIcon from '@mui/icons-material/Home'; import { Box, BottomNavigation, BottomNavigationAction } from '@mui/material'; import { useTheme } from '@mui/material/styles'; +import { navigateToPage } from '@utils/navigateToPage'; import { useNavigate } from 'react-router-dom'; // import MessageIcon from '@mui/icons-material/Message'; -import { navigateToPage } from '../../utils/navigateToPage'; export default function Footer({ currentPage, setCurrentPage }) { const navigate = useNavigate(); diff --git a/src/components/common/Header.jsx b/src/components/common/Header.jsx index 5332f9f..30db1a1 100644 --- a/src/components/common/Header.jsx +++ b/src/components/common/Header.jsx @@ -1,12 +1,11 @@ import React from 'react'; +import { useAuthNavigation } from '@auth/useAuthNavigation'; import { ArrowBack } from '@mui/icons-material'; import { AppBar, Toolbar, Typography, IconButton, Avatar, Button, Box } from '@mui/material'; import { useTheme } from '@mui/material/styles'; import { useNavigate, useLocation } from 'react-router-dom'; -import { useAuthNavigation } from '../../hooks/useAuthNavigation'; - export default function Header() { const { user, handleProfileClick, signInAndCheckFirstTimeUser } = useAuthNavigation(); const theme = useTheme(); diff --git a/src/hooks/useAuthNavigation.js b/src/hooks/auth/useAuthNavigation.js similarity index 83% rename from src/hooks/useAuthNavigation.js rename to src/hooks/auth/useAuthNavigation.js index c94f82b..02919fa 100644 --- a/src/hooks/useAuthNavigation.js +++ b/src/hooks/auth/useAuthNavigation.js @@ -1,8 +1,7 @@ +import { useAuthState } from '@auth/useAuthState'; +import { handleSignIn } from '@utils/auth'; import { useNavigate } from 'react-router-dom'; -import { useAuthState } from './useAuthState'; -import { handleSignIn } from '../utils/auth'; - export const useAuthNavigation = () => { const [user] = useAuthState(); const navigate = useNavigate(); diff --git a/src/hooks/useAuthState.js b/src/hooks/auth/useAuthState.js similarity index 90% rename from src/hooks/useAuthState.js rename to src/hooks/auth/useAuthState.js index fb4154d..0d6c496 100644 --- a/src/hooks/useAuthState.js +++ b/src/hooks/auth/useAuthState.js @@ -1,9 +1,8 @@ import { useEffect, useState } from 'react'; +import { auth } from '@utils/firebaseConfig'; import { onAuthStateChanged } from 'firebase/auth'; -import { auth } from '../utils/firebaseConfig'; - // Hook to get the current user export const useAuthState = () => { const [user, setUser] = useState(null); diff --git a/src/hooks/useMajors.js b/src/hooks/data/useMajors.js similarity index 88% rename from src/hooks/useMajors.js rename to src/hooks/data/useMajors.js index 695cf2c..9ee7daa 100644 --- a/src/hooks/useMajors.js +++ b/src/hooks/data/useMajors.js @@ -1,6 +1,6 @@ import { useEffect, useState } from 'react'; -import { getMajors } from '../utils/firestore/general'; +import { getMajors } from '@firestore/general'; export default function useMajors() { const [majorsList, setMajorsList] = useState([]); diff --git a/src/hooks/useStudentData.js b/src/hooks/data/useStudentData.js similarity index 88% rename from src/hooks/useStudentData.js rename to src/hooks/data/useStudentData.js index e494379..1f28bd9 100644 --- a/src/hooks/useStudentData.js +++ b/src/hooks/data/useStudentData.js @@ -1,6 +1,6 @@ import { useEffect, useState } from 'react'; -import { getAllUsers } from '../utils/firestore/general'; +import { getAllUsers } from '@firestore/general'; export default function useStudentData() { const [studentData, setStudentData] = useState(null); diff --git a/src/hooks/useUserProfile.js b/src/hooks/data/useUserProfile.js similarity index 91% rename from src/hooks/useUserProfile.js rename to src/hooks/data/useUserProfile.js index 0cad24b..9f5697d 100644 --- a/src/hooks/useUserProfile.js +++ b/src/hooks/data/useUserProfile.js @@ -1,7 +1,7 @@ import { useEffect, useState } from 'react'; -import { getMatchedUserUids } from '../utils/firestore/matches'; -import { fetchUserProfile } from '../utils/firestore/userProfile'; +import { getMatchedUserUids } from '@firestore/matches'; +import { fetchUserProfile } from '@firestore/userProfile'; export default function useUserProfile(user) { const [userProfile, setUserProfile] = useState(null); diff --git a/src/hooks/useEditProfileForm.js b/src/hooks/useEditProfileForm.js index 76d95a9..0e1d42a 100644 --- a/src/hooks/useEditProfileForm.js +++ b/src/hooks/useEditProfileForm.js @@ -1,7 +1,7 @@ import { useEffect, useState } from 'react'; -import { getMajors } from '../utils/firestore/general'; -import { getUserProfile, updateUserProfile } from '../utils/firestore/userProfile'; +import { getMajors } from '@firestore/general'; +import { getUserProfile, updateUserProfile } from '@firestore/userProfile'; const useEditProfileForm = (user) => { const [loading, setLoading] = useState(true); diff --git a/src/hooks/useCopyToClipboard.jsx b/src/hooks/utils/useCopyToClipboard.jsx similarity index 100% rename from src/hooks/useCopyToClipboard.jsx rename to src/hooks/utils/useCopyToClipboard.jsx diff --git a/src/hooks/usePagination.js b/src/hooks/utils/usePagination.js similarity index 100% rename from src/hooks/usePagination.js rename to src/hooks/utils/usePagination.js diff --git a/src/utils/auth.js b/src/utils/auth.js index 1a8965c..0f07c45 100644 --- a/src/utils/auth.js +++ b/src/utils/auth.js @@ -1,9 +1,8 @@ +import { fetchAndStoreClassData } from '@firestore/classData'; +import { checkUserProfile } from '@firestore/userProfile'; +import { auth } from '@utils/firebaseConfig'; import { GoogleAuthProvider, signInWithPopup, signOut } from 'firebase/auth'; -import { auth } from './firebaseConfig'; -import { fetchAndStoreClassData } from './firestore/classData'; -import { checkUserProfile } from './firestore/userProfile'; - const provider = new GoogleAuthProvider(); // Google Sign-In diff --git a/src/utils/firestore/classData.js b/src/utils/firestore/classData.js index 60201f1..c0a2709 100644 --- a/src/utils/firestore/classData.js +++ b/src/utils/firestore/classData.js @@ -1,8 +1,7 @@ // Functions for fetching and storing class data in Firestore +import { db } from '@utils/firebaseConfig'; import { collection, doc, getDoc, setDoc, updateDoc } from 'firebase/firestore'; -import { db } from '../firebaseConfig'; - // Get latest term from APi and update if necessary const checkAndInsertLatestTerm = async () => { try { diff --git a/src/utils/firestore/general.js b/src/utils/firestore/general.js index c62fefe..2815838 100644 --- a/src/utils/firestore/general.js +++ b/src/utils/firestore/general.js @@ -1,8 +1,7 @@ // General Firestore functions (shared utilities) +import { db } from '@utils/firebaseConfig'; import { collection, getDocs, doc, getDoc } from 'firebase/firestore'; -import { db } from '../firebaseConfig'; - // Get all users from Firestore export const getAllUsers = async () => { try { diff --git a/src/utils/firestore/matches.js b/src/utils/firestore/matches.js index 9f7bcf0..ae17dbb 100644 --- a/src/utils/firestore/matches.js +++ b/src/utils/firestore/matches.js @@ -1,3 +1,5 @@ +import { fetchUserProfile } from '@firestore/userProfile'; +import { db } from '@utils/firebaseConfig'; import { doc, getDoc, @@ -7,9 +9,6 @@ import { arrayRemove, } from 'firebase/firestore'; -import { fetchUserProfile } from './userProfile'; -import { db } from '../firebaseConfig'; - // Utility function to fetch a match document by ID const fetchMatchDocument = async (matchId) => { try { diff --git a/src/utils/firestore/userProfile.js b/src/utils/firestore/userProfile.js index 7a59b20..900a7f6 100644 --- a/src/utils/firestore/userProfile.js +++ b/src/utils/firestore/userProfile.js @@ -1,8 +1,7 @@ // User profile operations (get, update, check) +import { db } from '@utils/firebaseConfig'; import { doc, setDoc, getDoc, updateDoc } from 'firebase/firestore'; -import { db } from '../firebaseConfig'; - // Unified function to fetch user profile by UID // (supports both regular and transaction-based fetches) export const fetchUserProfile = async (uid, transaction) => {