- {interest}
+
+
+
{roomObj.name}
+
{roomObj.description}
- )
+ );
}
-export function ProfileRoom({room}) {
- return (
-
-
-
-
-
-
{room.name}
-
{room.description}
-
Created on {new Date(room.timestamp).toLocaleString(dateOptions)}
-
Open Room
-
-
- )
-}
\ No newline at end of file
+// This will be removed once dateOptions is no longer used in this file
+export { dateOptions };
diff --git a/frontend-next/src/components/app/header.js b/frontend-next/src/components/app/header.js
index 5a8cd1f..5cd8b9c 100644
--- a/frontend-next/src/components/app/header.js
+++ b/frontend-next/src/components/app/header.js
@@ -1,144 +1,153 @@
import { auth, database } from "../../../firebase-config";
import { ref, set, remove } from "firebase/database";
-import {signOut} from "firebase/auth";
-import { Popover } from '@headlessui/react'
+import { signOut } from "firebase/auth";
+import { Popover } from "@headlessui/react";
-
- function logout() {
- signOut(auth)
- }
+function logout() {
+ signOut(auth);
+}
- // Closes chat room
- function closeChatRoom(roomObj, setChatRoomObj, setMainTab, user) {
- var path = roomObj.path + "/" + roomObj.name + "-" + roomObj.timestamp;
- var payload = {
- body: "left",
- user: user.username,
- isSystem: true,
- timestamp: new Date().getTime(),
- uid: user.uid
- };
- set(
- ref(
- database,
- `/rooms/${path}/chats/${new Date().getTime()}-${user.username}`
- ),
- payload
- );
- remove(ref(database, `/rooms/${path}/users/online/${user.uid}`));
- setChatRoomObj(null);
- setMainTab("home");
- }
+// Closes chat room
+function closeChatRoom(roomObj, setChatRoomObj, setMainTab, user) {
+ var path = roomObj.path + "/" + roomObj.name + "-" + roomObj.timestamp;
+ var payload = {
+ body: "left",
+ user: user.username,
+ isSystem: true,
+ timestamp: new Date().getTime(),
+ uid: user.uid,
+ };
+ set(
+ ref(
+ database,
+ `/rooms/${path}/chats/${new Date().getTime()}-${user.username}`
+ ),
+ payload
+ );
+ remove(ref(database, `/rooms/${path}/users/online/${user.uid}`));
+ setChatRoomObj(null);
+ setMainTab("home");
+}
- // Adds room to myRooms
- function addToMyRooms(chatRoomObj, setIsMyRoom, user) {
- set(
- ref(
- database,
- `/users/${user.uid}/rooms/${chatRoomObj.name}-${chatRoomObj.timestamp}`
- ),
- {
- name: chatRoomObj.name,
- path: chatRoomObj.path,
- timestamp: chatRoomObj.timestamp,
- description: chatRoomObj.description,
- longitude: chatRoomObj.longitude,
- latitude: chatRoomObj.latitude,
- }
- );
- var path =
- chatRoomObj.path +
- "/" +
- chatRoomObj.name +
- "-" +
- chatRoomObj.timestamp;
- set(ref(database, `/rooms/${path}/users/all/${user.uid}`), user);
- setIsMyRoom(true);
- }
+// Adds room to myRooms
+function addToMyRooms(chatRoomObj, setIsMyRoom, user) {
+ set(
+ ref(
+ database,
+ `/users/${user.uid}/rooms/${chatRoomObj.name}-${chatRoomObj.timestamp}`
+ ),
+ {
+ name: chatRoomObj.name,
+ path: chatRoomObj.path,
+ timestamp: chatRoomObj.timestamp,
+ description: chatRoomObj.description,
+ longitude: chatRoomObj.longitude,
+ latitude: chatRoomObj.latitude,
+ }
+ );
+ var path =
+ chatRoomObj.path + "/" + chatRoomObj.name + "-" + chatRoomObj.timestamp;
+ set(ref(database, `/rooms/${path}/users/all/${user.uid}`), user);
+ setIsMyRoom(true);
+}
- // Deletes saved room from myRooms
- function removeFromMyRooms(chatRoomObj, setIsMyRoom, user) {
- var path =
- chatRoomObj.path +
- "/" +
- chatRoomObj.name +
- "-" +
- chatRoomObj.timestamp;
- remove(
- ref(
- database,
- `/users/${user.uid}/rooms/${chatRoomObj.name}-${chatRoomObj.timestamp}`
- )
- );
- remove(ref(database, `/rooms/${path}/users/all/${user.uid}`));
- setIsMyRoom(false);
- }
-
-export function Header({mainTab, isMyRoom, chatRoomObj, setChatRoomObj, setMainTab, setIsMyRoom, user}) {
- return (
-
+// Deletes saved room from myRooms
+function removeFromMyRooms(chatRoomObj, setIsMyRoom, user) {
+ var path =
+ chatRoomObj.path + "/" + chatRoomObj.name + "-" + chatRoomObj.timestamp;
+ remove(
+ ref(
+ database,
+ `/users/${user.uid}/rooms/${chatRoomObj.name}-${chatRoomObj.timestamp}`
)
-}
\ No newline at end of file
+ );
+ remove(ref(database, `/rooms/${path}/users/all/${user.uid}`));
+ setIsMyRoom(false);
+}
+
+export function Header({
+ mainTab,
+ isMyRoom,
+ chatRoomObj,
+ setChatRoomObj,
+ setMainTab,
+ setIsMyRoom,
+ user,
+}) {
+ return (
+
+ );
+}
diff --git a/frontend-next/src/components/app/main_tab/chat.js b/frontend-next/src/components/app/main_tab/chat.js
index dfdc5d3..5559f77 100644
--- a/frontend-next/src/components/app/main_tab/chat.js
+++ b/frontend-next/src/components/app/main_tab/chat.js
@@ -1,95 +1,94 @@
-import { Chat, SystemMessage} from "../datatypes"
+import { Chat, SystemMessage } from "../datatypes";
import { useState, useEffect } from "react";
import { Form, useForm } from "react-hook-form";
-import { ref, onValue, set} from "firebase/database";
+import { ref, onValue, set } from "firebase/database";
import { database } from "../../../../firebase-config";
-
- // Chatroom Module for Primary Tab
+// Chatroom Module for Primary Tab
export function MainTabChatRoom({ roomObj, user }) {
- var { register, control, reset, handleSubmit } = useForm();
- const [chats, setData] = useState(null);
- const [isLoading, setLoading] = useState(true);
-
- // Message updater
- useEffect(() => {
- onValue(
- ref(
- database,
- `/rooms/${
- roomObj.path + "/" + roomObj.name + "-" + roomObj.timestamp
- }/chats`
- ),
- (snapshot) => {
- var chatsArr = [];
- var messages = snapshot.val();
- for (var message in messages) {
- if (messages[message].isSystem) {
- chatsArr.push(
-
- );
- } else {
- chatsArr.push(
-
- );
- }
+ var { register, control, reset, handleSubmit } = useForm();
+ const [chats, setData] = useState(null);
+ const [isLoading, setLoading] = useState(true);
+
+ // Message updater
+ useEffect(() => {
+ onValue(
+ ref(
+ database,
+ `/rooms/${
+ roomObj.path + "/" + roomObj.name + "-" + roomObj.timestamp
+ }/chats`
+ ),
+ (snapshot) => {
+ var chatsArr = [];
+ var messages = snapshot.val();
+ for (var message in messages) {
+ if (messages[message].isSystem) {
+ chatsArr.push(
+
+ );
+ } else {
+ chatsArr.push(
+
+ );
}
- setData(chatsArr.reverse());
- setLoading(false);
}
- );
- });
-
- function sendMessage(data) {
- reset();
- var payload = {
- body: data.message,
- user: user.username,
- uid: user.uid,
- isSystem: false,
- timestamp: new Date().getTime(),
- };
- set(
- ref(
- database,
- `/rooms/${
- roomObj.path + "/" + roomObj.name + "-" + roomObj.timestamp
- }/chats/${new Date().getTime()}-${user.username}`
- ),
- payload
- );
- }
-
- if (isLoading) return
Loading
;
- if (!chats) return
No Chats
;
- return (
-
+ setData(chatsArr.reverse());
+ setLoading(false);
+ }
);
- }
\ No newline at end of file
+ });
+
+ function sendMessage(data) {
+ reset();
+ var payload = {
+ body: data.message,
+ user: user.username,
+ uid: user.uid,
+ isSystem: false,
+ timestamp: new Date().getTime(),
+ };
+ set(
+ ref(
+ database,
+ `/rooms/${
+ roomObj.path + "/" + roomObj.name + "-" + roomObj.timestamp
+ }/chats/${new Date().getTime()}-${user.username}`
+ ),
+ payload
+ );
+ }
+
+ if (isLoading) return
Loading
;
+ if (!chats) return
No Chats
;
+ return (
+
+ );
+}
diff --git a/frontend-next/src/components/app/main_tab/home.js b/frontend-next/src/components/app/main_tab/home.js
index c492063..ce93d35 100644
--- a/frontend-next/src/components/app/main_tab/home.js
+++ b/frontend-next/src/components/app/main_tab/home.js
@@ -1,31 +1,31 @@
-import {Geo} from "../datatypes"
+import { Geo } from "../map/geo";
// Module for Welcome Message on main tab landing page
-function WelcomeMessage({user}) {
- return (
-
-
- Welcome, {user.firstName} {user.lastName} ({user.username})
-
-
Lets see what's happening in your area.
+function WelcomeMessage({ user }) {
+ return (
+
+
+ Welcome, {user.firstName} {user.lastName} ({user.username})
- );
- }
+
Lets see what's happening in your area.
+
+ );
+}
// Primary App Landing Page
export function MainTabHome({ loc, markers, user }) {
- return (
- <>
-
-
-
-
- >
- );
- }
\ No newline at end of file
+ return (
+ <>
+
+
+
+
+ >
+ );
+}
diff --git a/frontend-next/src/components/app/map/geo.js b/frontend-next/src/components/app/map/geo.js
new file mode 100644
index 0000000..5e621ee
--- /dev/null
+++ b/frontend-next/src/components/app/map/geo.js
@@ -0,0 +1,26 @@
+import { Map, Marker, ZoomControl } from "pigeon-maps";
+
+// Map module for main page and chat room sidebar (and eventually user profile)
+// Constructs Map and Markers
+// TODO: Need to get rest of marker handling here or in marker file.
+export function Geo({ loc, zoom, locMarker, markers }) {
+ if (loc) {
+ return (
+
+ );
+ } else {
+ return (
+
+ );
+ }
+}
diff --git a/frontend-next/src/components/app/map/marker.js b/frontend-next/src/components/app/map/marker.js
new file mode 100644
index 0000000..e69de29
diff --git a/frontend-next/src/components/app/profile/Interest.js b/frontend-next/src/components/app/profile/Interest.js
new file mode 100644
index 0000000..ef5c28d
--- /dev/null
+++ b/frontend-next/src/components/app/profile/Interest.js
@@ -0,0 +1,9 @@
+// Interests for Profile
+// Making this its own file since we could do a bit more with this in the future
+export function Interest({ interest }) {
+ return (
+
+ );
+}
diff --git a/frontend-next/src/components/app/profile/ProfileEdit.js b/frontend-next/src/components/app/profile/ProfileEdit.js
new file mode 100644
index 0000000..5efe0bd
--- /dev/null
+++ b/frontend-next/src/components/app/profile/ProfileEdit.js
@@ -0,0 +1,127 @@
+import { useForm, Form } from "react-hook-form";
+import { database, storage } from "../../../../firebase-config";
+import { ref as sRef, getDownloadURL } from "firebase/storage";
+import { ref, update } from "firebase/database";
+import { uploadBytes } from "firebase/storage";
+
+export function ProfileEdit({ profileData, user, onSave }) {
+ var { register, control } = useForm();
+
+ const handleEditState = () => {
+ onSave(false);
+ };
+
+ // Handles clicking save button
+ function save({ data }) {
+
+ // Profile pic handling
+ if (data.pfp[0]) {
+ // image stuff
+ uploadBytes(sRef(storage, `users/${user.uid}/pfp`), data.pfp[0]).then(
+ () => {
+ getDownloadURL(sRef(storage, `users/${user.uid}/pfp`)).then((url) => {
+ data.pfp = url;
+ for (var key in data) {
+ if (data[key] == "") {
+ data[key] = profileData[key];
+ }
+ }
+
+ handleEditState(false);
+ update(ref(database, `users/${user.uid}`), data);
+ });
+ }
+ );
+ } else {
+ for (var key in data) {
+ if (data[key] == "") {
+ data[key] = profileData[key];
+ }
+ }
+ data.pfp = profileData.pfp;
+ handleEditState(false);
+ update(ref(database, `users/${user.uid}`), data);
+ }
+ }
+
+ return (
+
+ );
+}
diff --git a/frontend-next/src/components/app/profile/ProfileRoom.js b/frontend-next/src/components/app/profile/ProfileRoom.js
new file mode 100644
index 0000000..269c6e6
--- /dev/null
+++ b/frontend-next/src/components/app/profile/ProfileRoom.js
@@ -0,0 +1,32 @@
+import { Geo } from "../map/geo";
+import { dateOptions } from "../datatypes";
+
+// Display of Rooms on user profile
+export function ProfileRoom({ room }) {
+ return (
+
+
+
+
+
+
{room.name}
+
{room.description}
+
+ Created on {new Date(room.timestamp).toLocaleString(dateOptions)}
+
+
+ Open Room
+
+
+
+ );
+}
diff --git a/frontend-next/src/components/app/sidebar/chat.js b/frontend-next/src/components/app/sidebar/chat.js
index 01cc6e3..36660c9 100644
--- a/frontend-next/src/components/app/sidebar/chat.js
+++ b/frontend-next/src/components/app/sidebar/chat.js
@@ -1,38 +1,42 @@
-import { Geo } from "../datatypes";
+import { Geo } from "../map/geo";
-export function Chat_Sidebar({chatRoomObj, chatroomOnline, chatroomUsersLoading, chatroomUsers, setTab}) {
- return (
-
-
-
-
-
-
-
-
- {chatRoomObj.name}
-
-
- {chatRoomObj.description}
-
-
-
-
Online Members
- {chatroomOnline}
-
-
-
All Members
- {!chatroomUsersLoading && chatroomUsers}
-
+// Sidebar when in a Chatrooms
+export function Chat_Sidebar({
+ chatRoomObj,
+ chatroomOnline,
+ chatroomUsersLoading,
+ chatroomUsers,
+}) {
+ return (
+
+
+
+
+
+
+
+ {chatRoomObj.name}
+
+ {chatRoomObj.description}
- )
-}
\ No newline at end of file
+
+
Online Members
+ {chatroomOnline}
+
+
+
All Members
+ {!chatroomUsersLoading && chatroomUsers}
+
+
+
+ );
+}
diff --git a/frontend-next/src/components/app/sidebar/home.js b/frontend-next/src/components/app/sidebar/home.js
index 42f6920..97c9ba1 100644
--- a/frontend-next/src/components/app/sidebar/home.js
+++ b/frontend-next/src/components/app/sidebar/home.js
@@ -2,125 +2,132 @@ import { Form, useForm } from "react-hook-form";
import { database } from "../../../../firebase-config";
import { ref, set } from "firebase/database";
+// Sidebar on Home Page, with various functionality (create, nearby, my rooms)
+
// CreateRoom Module for Sidebar Create Tab
function CreateRoom({ loc }) {
- var { register, control, reset, handleSubmit } = useForm();
+ var { register, control, reset, handleSubmit } = useForm();
- function createRoom(data) {
- reset();
- var path =
- String(loc.latitude.toFixed(2)).replace(".", "") +
- "/" +
- String(loc.longitude.toFixed(2)).replace(".", "");
- var timestamp = new Date().getTime();
- var payload = {
- name: data.name,
- description: data.description,
- timestamp: timestamp,
- latitude: loc.latitude,
- longitude: loc.longitude,
- path: path,
- };
- set(ref(database, `/rooms/${path}/${data.name}-${timestamp}`), payload);
- }
-
- return (
-
- );
+ function createRoom(data) {
+ reset();
+ var path =
+ String(loc.latitude.toFixed(2)).replace(".", "") +
+ "/" +
+ String(loc.longitude.toFixed(2)).replace(".", "");
+ var timestamp = new Date().getTime();
+ var payload = {
+ name: data.name,
+ description: data.description,
+ timestamp: timestamp,
+ latitude: loc.latitude,
+ longitude: loc.longitude,
+ path: path,
+ };
+ set(ref(database, `/rooms/${path}/${data.name}-${timestamp}`), payload);
}
-export function Home_Sidebar({tab, nearby, loadingNearby, setTab, isRoomLoading, myRooms, loadingLoc, location}) {
- return (
-
-
-
-
-
{
- setTab("nearby");
- }}
- >
- Nearby
-
-
{
- setTab("rooms");
- }}
- >
- My Rooms
-
-
{
- setTab("create");
- }}
- >
- Create
-
-
+ return (
+
+ );
+}
+
+export function Home_Sidebar({
+ tab,
+ nearby,
+ loadingNearby,
+ setTab,
+ isRoomLoading,
+ myRooms,
+ loadingLoc,
+ location,
+}) {
+ return (
+
+
+
+
+
{
+ setTab("nearby");
+ }}
+ >
+ Nearby
+
+
{
+ setTab("rooms");
+ }}
+ >
+ My Rooms
+
+
{
+ setTab("create");
+ }}
+ >
+ Create
- {tab == "nearby" && (
-
-
- {!nearby && !loadingNearby && (
-
- No Nearby Rooms
-
- Create One?
-
- )}
- {loadingNearby &&
Loading...
}
- {nearby}
-
-
- )}
- {tab == "rooms" && (
-
-
- {isRoomLoading &&
Loading
}
- {!myRooms && !isRoomLoading &&
No User Saved Rooms
}
- {myRooms}
-
-
- )}
- {tab == "create" && !loadingLoc &&
}
- {tab == "create" && loadingLoc &&
Loading...
}
- )
-}
\ No newline at end of file
+ {tab == "nearby" && (
+
+
+ {!nearby && !loadingNearby && (
+
+ No Nearby Rooms
+
+ Create One?
+
+ )}
+ {loadingNearby &&
Loading...
}
+ {nearby}
+
+
+ )}
+ {tab == "rooms" && (
+
+
+ {isRoomLoading &&
Loading
}
+ {!myRooms && !isRoomLoading &&
No User Saved Rooms
}
+ {myRooms}
+
+
+ )}
+ {tab == "create" && !loadingLoc &&
}
+ {tab == "create" && loadingLoc &&
Loading...
}
+
+
+ );
+}
diff --git a/frontend-next/src/components/app/sidebar/profile.js b/frontend-next/src/components/app/sidebar/profile.js
index 6d8a869..593a4a6 100644
--- a/frontend-next/src/components/app/sidebar/profile.js
+++ b/frontend-next/src/components/app/sidebar/profile.js
@@ -1,7 +1,7 @@
export function Profile_Sidebar() {
- return (
-
- )
-}
\ No newline at end of file
+ return (
+
+ );
+}
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index e48b872..0000000
--- a/package-lock.json
+++ /dev/null
@@ -1,102 +0,0 @@
-{
- "name": "ChatMaps",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "dependencies": {
- "react-router-dom": "^6.22.3"
- }
- },
- "node_modules/@remix-run/router": {
- "version": "1.15.3",
- "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.3.tgz",
- "integrity": "sha512-Oy8rmScVrVxWZVOpEF57ovlnhpZ8CCPlnIIumVcV9nFdiSIrus99+Lw78ekXyGvVDlIsFJbSfmSovJUhCWYV3w==",
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "peer": true
- },
- "node_modules/loose-envify": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
- "peer": true,
- "dependencies": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- },
- "bin": {
- "loose-envify": "cli.js"
- }
- },
- "node_modules/react": {
- "version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
- "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
- "peer": true,
- "dependencies": {
- "loose-envify": "^1.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-dom": {
- "version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
- "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
- "peer": true,
- "dependencies": {
- "loose-envify": "^1.1.0",
- "scheduler": "^0.23.0"
- },
- "peerDependencies": {
- "react": "^18.2.0"
- }
- },
- "node_modules/react-router": {
- "version": "6.22.3",
- "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.22.3.tgz",
- "integrity": "sha512-dr2eb3Mj5zK2YISHK++foM9w4eBnO23eKnZEDs7c880P6oKbrjz/Svg9+nxqtHQK+oMW4OtjZca0RqPglXxguQ==",
- "dependencies": {
- "@remix-run/router": "1.15.3"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "peerDependencies": {
- "react": ">=16.8"
- }
- },
- "node_modules/react-router-dom": {
- "version": "6.22.3",
- "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.22.3.tgz",
- "integrity": "sha512-7ZILI7HjcE+p31oQvwbokjk6OA/bnFxrhJ19n82Ex9Ph8fNAq+Hm/7KchpMGlTgWhUxRHMMCut+vEtNpWpowKw==",
- "dependencies": {
- "@remix-run/router": "1.15.3",
- "react-router": "6.22.3"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "peerDependencies": {
- "react": ">=16.8",
- "react-dom": ">=16.8"
- }
- },
- "node_modules/scheduler": {
- "version": "0.23.0",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
- "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
- "peer": true,
- "dependencies": {
- "loose-envify": "^1.1.0"
- }
- }
- }
-}
diff --git a/package.json b/package.json
deleted file mode 100644
index 6d86765..0000000
--- a/package.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "dependencies": {
- "react-router-dom": "^6.22.3"
- }
-}