From f5f4706123c4810b6645f05405b529e55264c523 Mon Sep 17 00:00:00 2001 From: Nicholas Pease Date: Mon, 22 Apr 2024 23:38:05 -0400 Subject: [PATCH 1/5] Bug Fix - Remove Persistent Online from Added Members in Rooms --- frontend-next/src/components/app/header.js | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend-next/src/components/app/header.js b/frontend-next/src/components/app/header.js index 42d82eb..671eb0a 100644 --- a/frontend-next/src/components/app/header.js +++ b/frontend-next/src/components/app/header.js @@ -49,6 +49,7 @@ function addToMyRooms(chatRoomObj, user) { ); var path = chatRoomObj.path + "/" + chatRoomObj.name + "-" + chatRoomObj.timestamp; + user.lastOnline = serverTimestamp(); set(ref(database, `/rooms/${path}/users/all/${user.uid}`), user); } From a58579e753150f8e73e9e886e9de7f9ec16d1287 Mon Sep 17 00:00:00 2001 From: Nicholas Pease Date: Tue, 23 Apr 2024 00:07:33 -0400 Subject: [PATCH 2/5] Bug Fix - Room Live Updates, Initial Account PFP, Initial Account Online Status --- frontend-next/src/app/chat/page.js | 4 ++-- frontend-next/src/app/dm/page.js | 6 +++--- frontend-next/src/app/onboarding/page.js | 14 ++++++++++---- frontend-next/src/app/user/page.js | 2 +- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/frontend-next/src/app/chat/page.js b/frontend-next/src/app/chat/page.js index 1aa692b..6f79da2 100644 --- a/frontend-next/src/app/chat/page.js +++ b/frontend-next/src/app/chat/page.js @@ -39,7 +39,7 @@ function Chat() { // Authentication Verification / Redirection if Profile Data not Filled out useEffect(() => { if (authUser && authLoading === false && !user) { - get(ref(database, `users/${authUser.uid}`)).then((userData) => { + onValue(ref(database, `users/${authUser.uid}`),(userData) => { userData = userData.val(); if (userData) { setUser(userData); @@ -91,7 +91,7 @@ function Chat() { })*/ // Room Object Load - get(ref(database, `/rooms/${path}`)).then((roomData) => { + onValue(ref(database, `/rooms/${path}`), (roomData) => { roomData = roomData.val(); setChatRoomObj(roomData) if (!doneLoading) { diff --git a/frontend-next/src/app/dm/page.js b/frontend-next/src/app/dm/page.js index f339609..3936965 100644 --- a/frontend-next/src/app/dm/page.js +++ b/frontend-next/src/app/dm/page.js @@ -5,7 +5,7 @@ import { useState, useEffect } from "react"; // Firebase Imports import { auth, database } from "../../../firebase-config"; -import { ref, onValue, set, onDisconnect, get, onChildAdded, onChildRemoved} from "firebase/database"; +import { ref, onValue, set, onDisconnect} from "firebase/database"; import { useAuthState } from "react-firebase-hooks/auth" // Component Imports @@ -40,7 +40,7 @@ function Chat() { // Authentication Verification / Redirection if Profile Data not Filled out useEffect(() => { if (authUser && authLoading === false) { - get(ref(database, `users/${authUser.uid}`)).then((userData) => { + onValue(ref(database, `users/${authUser.uid}`), (userData) => { userData = userData.val(); if (userData) { setUser(userData); @@ -95,7 +95,7 @@ function Chat() { })*/ // Room Object Load - get(ref(database, `/dms/${path}`)).then((roomData) => { + onValue(ref(database, `/dms/${path}`), (roomData) => { roomData = roomData.val(); setChatRoomObj(roomData) if (!doneLoading) { diff --git a/frontend-next/src/app/onboarding/page.js b/frontend-next/src/app/onboarding/page.js index 9ab96fa..576756b 100644 --- a/frontend-next/src/app/onboarding/page.js +++ b/frontend-next/src/app/onboarding/page.js @@ -6,8 +6,9 @@ import { useRouter } from "next/navigation"; // Firebase Imports import { ref, set } from "firebase/database"; -import { auth, database } from "../../../firebase-config"; +import { auth, database, storage } from "../../../firebase-config"; import { onAuthStateChanged } from "firebase/auth"; +import { ref as sRef, getDownloadURL } from "firebase/storage"; /** * Creates user data in Firebase DB @@ -19,9 +20,14 @@ function createUser(data) { if (user.uid) { data.uid = user.uid; data.defined = true; - data.email = user.email; - set(ref(database, `users/${user.uid}`), data); - return true; + data.invisibleStatus = false; + getDownloadURL(sRef(storage, `/default.png`)).then((url) => { + data.pfp = url; + data.email = user.email; + set(ref(database, `users/${user.uid}`), data); + return true; + }) + } else { return false; } diff --git a/frontend-next/src/app/user/page.js b/frontend-next/src/app/user/page.js index 7e2b9b2..8355d76 100644 --- a/frontend-next/src/app/user/page.js +++ b/frontend-next/src/app/user/page.js @@ -127,7 +127,7 @@ function UserProfile() {
{profileData.lastOnline == true && }{profileData.firstName} {profileData.lastName} From 577dddd7855572afa71859837a5a09d4d4f9f44d Mon Sep 17 00:00:00 2001 From: Nicholas Pease Date: Tue, 23 Apr 2024 00:17:37 -0400 Subject: [PATCH 3/5] Bug Fix - Readd Updating Friend / Friend Requests --- frontend-next/src/app/app/page.js | 6 +++--- frontend-next/src/components/app/sidebar/home.js | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend-next/src/app/app/page.js b/frontend-next/src/app/app/page.js index 1ac9d45..b45788a 100644 --- a/frontend-next/src/app/app/page.js +++ b/frontend-next/src/app/app/page.js @@ -7,7 +7,7 @@ import Drawer from '@mui/material/Drawer'; // Firebase Imports import { auth, database } from "../../../firebase-config"; -import { ref, get, set } from "firebase/database"; +import { ref, onValue, set } from "firebase/database"; import { useAuthState } from "react-firebase-hooks/auth" // Component Imports @@ -43,10 +43,10 @@ function Home() { // Authentication Verification / Redirection if Profile Data not Filled out useEffect(() => { if (authUser && authLoading === false) { - get(ref(database, `users/${authUser.uid}`)).then((userData) => { + onValue(ref(database, `users/${authUser.uid}`), (userData) => { userData = userData.val(); if (userData) { - setUser({...userData}); + setUser(userData); } else { window.location.href = "/onboarding"; } diff --git a/frontend-next/src/components/app/sidebar/home.js b/frontend-next/src/components/app/sidebar/home.js index 5638e46..b027b25 100644 --- a/frontend-next/src/components/app/sidebar/home.js +++ b/frontend-next/src/components/app/sidebar/home.js @@ -156,7 +156,7 @@ export function Sidebar({user,location,loadingLoc}) { } }) - }, []) + }, [user.friends]) return (
From 19466dd98f01de5a069add16f770b6be25f351d5 Mon Sep 17 00:00:00 2001 From: Nicholas Pease Date: Tue, 23 Apr 2024 00:46:29 -0400 Subject: [PATCH 4/5] Bug Fix - Fix DM Online Not Removing On Close, Fix Onboarded Users Unable to Selectively Edit Profile Fields, Fix DM Online User Updates --- frontend-next/src/app/dm/page.js | 5 ++- frontend-next/src/app/onboarding/page.js | 44 ++++++++----------- frontend-next/src/components/app/header.js | 9 ++-- .../src/components/app/sidebar/dm.js | 22 +++++----- 4 files changed, 37 insertions(+), 43 deletions(-) diff --git a/frontend-next/src/app/dm/page.js b/frontend-next/src/app/dm/page.js index 3936965..57ccd3c 100644 --- a/frontend-next/src/app/dm/page.js +++ b/frontend-next/src/app/dm/page.js @@ -58,10 +58,11 @@ function Chat() { if (user) { const searchParams = new URLSearchParams(document.location.search); var path = searchParams.get("dm") - if (path.includes(user.uid)) + if (path.includes(user.uid)) { setIsUserAuthed(true) - else + } else { location.href = "/app" + } /*// Send entered message var payload = { body: "entered", diff --git a/frontend-next/src/app/onboarding/page.js b/frontend-next/src/app/onboarding/page.js index 576756b..2f7f4d9 100644 --- a/frontend-next/src/app/onboarding/page.js +++ b/frontend-next/src/app/onboarding/page.js @@ -10,30 +10,6 @@ import { auth, database, storage } from "../../../firebase-config"; import { onAuthStateChanged } from "firebase/auth"; import { ref as sRef, getDownloadURL } from "firebase/storage"; -/** - * Creates user data in Firebase DB - * @param {JSON} data - User data to be stored in Firebase DB ( from form ) - * @return {Boolean} - True if user data is stored, False if user data is not stored - */ -function createUser(data) { - onAuthStateChanged(auth, (user) => { - if (user.uid) { - data.uid = user.uid; - data.defined = true; - data.invisibleStatus = false; - getDownloadURL(sRef(storage, `/default.png`)).then((url) => { - data.pfp = url; - data.email = user.email; - set(ref(database, `users/${user.uid}`), data); - return true; - }) - - } else { - return false; - } - }); -} - /** * Onboarding Page * @returns {Object} - Onboarding Page @@ -43,8 +19,24 @@ function Onboarding() { var { register, handleSubmit } = useForm(); function Onboard(data) { - createUser(data); - router.push("/app"); + onAuthStateChanged(auth, (user) => { + if (user.uid) { + data.uid = user.uid; + data.defined = true; + data.invisibleStatus = false; + data.bio = " "; + data.interests = " , , " + getDownloadURL(sRef(storage, `/default.png`)).then((url) => { + data.pfp = url; + data.email = user.email; + set(ref(database, `users/${user.uid}`), data); + router.push("/app"); + }) + + } else { + return false; + } + }); } return (
diff --git a/frontend-next/src/components/app/header.js b/frontend-next/src/components/app/header.js index 671eb0a..d12b66d 100644 --- a/frontend-next/src/components/app/header.js +++ b/frontend-next/src/components/app/header.js @@ -21,8 +21,12 @@ import CloseIcon from '@mui/icons-material/Close'; * @param {JSON} user - User Object * @returns {void} */ -function closeChat(chatRoomObj, user) { +function closeChat(chatRoomObj, user, mainTab) { + if (mainTab == "chat") { remove(ref(database, `/rooms/${chatRoomObj.path}/${chatRoomObj.name}-${chatRoomObj.timestamp}/users/online/${user.uid}`)) + } else { + remove(ref(database, `/dms/${chatRoomObj.room}/users/online/${user.uid}`)) + } } @@ -125,7 +129,6 @@ export function Header({mainTab,chatRoomObj,user,sidebarControl}) { { removeFromMyRooms(chatRoomObj, user); - }} className="p-2 cursor-pointer bg-cyan-500 text-white font-bold rounded-full mr-2 flex items-center" > @@ -136,7 +139,7 @@ export function Header({mainTab,chatRoomObj,user,sidebarControl}) { {closeChat(chatRoomObj,user)}} + onClick={() => {closeChat(chatRoomObj,user, mainTab)}} > diff --git a/frontend-next/src/components/app/sidebar/dm.js b/frontend-next/src/components/app/sidebar/dm.js index c32e99c..5c4c20e 100644 --- a/frontend-next/src/components/app/sidebar/dm.js +++ b/frontend-next/src/components/app/sidebar/dm.js @@ -1,24 +1,22 @@ import { Member } from "../datatypes" import { database } from "../../../../firebase-config" -import {ref, get, onValue} from "firebase/database" +import {ref, get} from "firebase/database" import { useState, useEffect } from "react" export function Sidebar({user, chatRoomObj}) { const [profileData, setProfileData] = useState(null) const [chatroomOnline, setChatroomOnline] = useState(null) - - var path = chatRoomObj.UIDs[0] < chatRoomObj.UIDs[1] ? chatRoomObj.UIDs[0] + "-" + chatRoomObj.UIDs[1] : chatRoomObj.UIDs[1] + "-" + chatRoomObj.UIDs[0]; - var activeUsers = [] - get(ref(database, `/dms/${path}/users/online`)).then((snapshot) => { - if (snapshot.exists()) { - var activeUsersJSON = snapshot.val(); - for (var activeUser in activeUsersJSON) - activeUsers.push(); - } - }) + useEffect(() => { + if (chatRoomObj.users && chatRoomObj.users.online) { + var activeUsers = [] + for (var activeUser in chatRoomObj.users.online) + activeUsers.push(); + } + setChatroomOnline(activeUsers) + }, [chatRoomObj]) useEffect(() => { if (user) { // Profile Information @@ -49,7 +47,7 @@ export function Sidebar({user, chatRoomObj}) {
In The Chat
- {activeUsers} + {chatroomOnline}
From 97325623fe65a12d617a1518bee5425fd93531bb Mon Sep 17 00:00:00 2001 From: Nicholas Pease Date: Tue, 23 Apr 2024 00:53:06 -0400 Subject: [PATCH 5/5] Bug Fix - Remove unused Jsdoc dependency (Breaks Deployment Actions) --- .github/workflows/jsdoc.yaml | 27 --------------------------- 1 file changed, 27 deletions(-) delete mode 100644 .github/workflows/jsdoc.yaml diff --git a/.github/workflows/jsdoc.yaml b/.github/workflows/jsdoc.yaml deleted file mode 100644 index 840df6e..0000000 --- a/.github/workflows/jsdoc.yaml +++ /dev/null @@ -1,27 +0,0 @@ -name: JSDoc to GH Pages - -on: - push: - branches: - - main - -jobs: - deploy: - runs-on: ubuntu-latest - steps: - - name: Checkout Code - uses: actions/checkout@v2 - - - name: Build - uses: andstor/jsdoc-action@v1 - with: - source_dir: ./frontend-next - output_dir: ./jsdoc - recurse: true - template: minami - - - name: Deploy - uses: peaceiris/actions-gh-pages@v3 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./jsdoc