diff --git a/frontend-next/src/app/app/page.js b/frontend-next/src/app/app/page.js index e65d286..ad74268 100644 --- a/frontend-next/src/app/app/page.js +++ b/frontend-next/src/app/app/page.js @@ -17,7 +17,7 @@ function Chat({chatObj}) { minute: '2-digit' }; return ( -
+
{chatObj.user}: {chatObj.body}
@@ -33,7 +33,7 @@ return (
{roomObj.name}
-
x Members
+
{roomObj.description}
) @@ -68,23 +68,11 @@ function WelcomeMessage() { } -function Geo() { - const [isLoading, setLoading] = useState(true) - const [data, setData] = useState(); - useEffect(() => { - if('geolocation' in navigator) { - // Retrieve latitude & longitude coordinates from `navigator.geolocation` Web API - navigator.geolocation.getCurrentPosition(({ coords }) => { - const { latitude, longitude } = coords; - setData(coords) - setLoading(false) - }) - } - }, []); - if (!isLoading) { +function Geo({loc}) { + if (loc) { return ( - - + + ) @@ -99,12 +87,12 @@ function Geo() { // Main Tabs -function MainTabHome() { +function MainTabHome({loc}) { return ( <>
- +
) @@ -114,21 +102,23 @@ function MainTabChatRoom({room}) { var { register, control, reset, handleSubmit} = useForm() const [chats, setData] = useState(null) const [isLoading, setLoading] = useState(true) + var user fetch('/api/user') .then((res) => res.json()) .then((data) => { user = data }) + var unsubscribeUpdater useEffect(() => { - unsubscribeUpdater = onValue(ref(database, `/rooms/${room}`), (snapshot) => { - var chatsarr = [] + unsubscribeUpdater = onValue(ref(database, `/rooms/${room}/chats`), (snapshot) => { + var chatsArr = [] var messages = snapshot.val() for (var message in messages) { - chatsarr.push() + chatsArr.push() } - setData(chatsarr) + setData(chatsArr.reverse()) setLoading(false) }) }, []) @@ -140,7 +130,7 @@ function MainTabChatRoom({room}) { user: user.username, timestamp: new Date().getTime() } - set(ref(database,`/rooms/${room}/${user.username}-${new Date().getTime()}`), payload) + set(ref(database,`/rooms/${room}/chats/${user.username}-${new Date().getTime()}`), payload) } @@ -148,25 +138,57 @@ function MainTabChatRoom({room}) { if (!chats) return
No Chats
return (
-
+
{chats}
-
- - + + +
) } +function CreateRoom({loc}) { + 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 ( +
+
+ +
+
+ Creating room near ({loc.latitude.toFixed(2)}, {loc.longitude.toFixed(2)}) +
+ +
+
+ ) +} + function Home() { var [tab, setTab] = useState("nearby") var [mainTab, setMainTab] = useState("home") var [chatRoom, setChatRoom] = useState("Dev") - const [myrooms, setRoomData] = useState(null) + const [myRooms, setRoomData] = useState(null) const [isRoomLoading, setRoomLoading] = useState(true) useEffect(() => { fetch('/api/user').then((res) => res.json()) @@ -175,7 +197,7 @@ function Home() { var rooms = snapshot.val() var roomArr = [] for (var room in rooms) { - roomArr.push( {setChatRoom(rooms[room].name);setMainTab("chat")}}/>) + roomArr.push( {setChatRoom(rooms[room].path+"/"+rooms[room].name+"-"+rooms[room].timestamp);setMainTab("chat")}}/>) } setRoomData(roomArr) setRoomLoading(false) @@ -183,6 +205,36 @@ function Home() { }) }, []) + + const [location, setLocation] = useState(null); + const [loadingLoc, setLoadingLoc] = useState(true) + const [nearby, setNearby] = useState(null); + const [loadingNearby, setLoadingNearby] = useState(true); + useEffect(() => { + if('geolocation' in navigator) { + // Retrieve latitude & longitude coordinates from `navigator.geolocation` Web API + navigator.geolocation.getCurrentPosition(({ coords }) => { + setLocation(coords) + setLoadingLoc(false) + var nearbyArr = [] + var path = String(coords.latitude.toFixed(2)).replace(".","")+"/"+String(coords.longitude.toFixed(2)).replace(".","") + get(ref(database, `/rooms/${path}`)).then((snapshot) => { + if (snapshot.exists()) { + var data = snapshot.val() + for (var room in data) { + nearbyArr.push( {setChatRoom(data[room].path+"/"+data[room].name+"-"+data[room].timestamp);setMainTab("chat")}}/>) + } + setLoadingNearby(false) + setNearby(nearbyArr) + } else { + setLoadingNearby(false) + } + }) + }) + } + }, []); + + return (
@@ -196,7 +248,8 @@ function Home() {
- {mainTab == "home" && } + {(mainTab == "home" && !loadingLoc) && } + {(mainTab == "home" && loadingLoc) && } {mainTab == "chat" && }
@@ -210,19 +263,21 @@ function Home() {
{tab == "nearby" &&
- Nearby -
} - {tab == "rooms" &&
- My Rooms
- {isRoomLoading &&
Loading
} - {!myrooms &&
No User Saved Rooms
} - {myrooms} + {(!nearby && !loadingNearby) &&
No Nearby Rooms
Create One?
} + {loadingNearby &&
Loading...
} + {nearby}
} - {tab == "create" &&
- Create Room + {tab == "rooms" &&
+
+ {isRoomLoading &&
Loading
} + {(!myRooms && !isRoomLoading) &&
No User Saved Rooms
} + {myRooms} +
} + {(tab == "create" && !loadingLoc) && } + {(tab == "create" && loadingLoc) &&
Loading...
}