diff --git a/website/src/components/Dashboard/SideMenu.tsx b/website/src/components/Dashboard/SideMenu.tsx index 30a45777..499117a2 100644 --- a/website/src/components/Dashboard/SideMenu.tsx +++ b/website/src/components/Dashboard/SideMenu.tsx @@ -1,6 +1,6 @@ import { Box, Button, Link, Text, Tooltip, useColorMode } from "@chakra-ui/react"; import { useRouter } from "next/router"; -import { FiLayout, FiSun } from "react-icons/fi"; +import { FiLayout, FiSun, FiMessageSquare } from "react-icons/fi"; import { colors } from "styles/Theme/colors"; export function SideMenu() { @@ -13,6 +13,12 @@ export function SideMenu() { desc: "Dashboard Home", icon: FiLayout, }, + { + label: "Messages", + pathname: "/messages", + desc: "Messages Dashboard", + icon: FiMessageSquare, + }, // { // label: "Leaderboard", // pathname: "#", diff --git a/website/src/pages/api/messages.ts b/website/src/pages/api/messages.ts new file mode 100644 index 00000000..a6a6d981 --- /dev/null +++ b/website/src/pages/api/messages.ts @@ -0,0 +1,34 @@ +import { boolean } from "boolean"; +import { getToken } from "next-auth/jwt"; + + +const handler = async (req, res) => { + const token = await getToken({ req }); + + // Return nothing if the user isn't registered. + if (!token) { + res.status(401).end(); + return; + } + + //TODO: add params if needed + const reqParams = req.query; + console.log(reqParams); + const params = new URLSearchParams({ + username: boolean(reqParams.allUsers)? "" : token.sub, + }); +console.log(params); + const messagesRes = await fetch(`${process.env.FASTAPI_URL}/api/v1/messages?${params}`, { + method: "GET", + headers: { + "X-API-Key": process.env.FASTAPI_KEY, + "Content-Type": "application/json", + }, + },); + const messages = await messagesRes.json(); + + // Send recieved messages to the client. + res.status(200).json(messages); +} + +export default handler; diff --git a/website/src/pages/messages.tsx b/website/src/pages/messages.tsx new file mode 100644 index 00000000..f8512ae3 --- /dev/null +++ b/website/src/pages/messages.tsx @@ -0,0 +1,106 @@ +import { Box, CircularProgress, HStack, Image, SimpleGrid, Stack, StackDivider, Text, useColorMode, useColorModeValue } from "@chakra-ui/react"; +import Head from "next/head"; +import { useState } from "react"; +import useSWRImmutable from "swr/immutable"; + +import fetcher from "src/lib/fetcher"; +import { SideMenu } from "src/components/Dashboard"; +import { FlaggableElement } from "src/components/FlaggableElement"; +import { Header } from "src/components/Header"; +import { colors } from "styles/Theme/colors"; + +const MessageTable = ({ messages, isLoading }) => { + const backgroundColor = useColorModeValue("white", "gray.700"); + const accentColor = useColorModeValue("gray.200", "gray.900"); + + return ( + + {isLoading ? + : + } spacing="4"> + {messages.map((item, idx) => + + )} + + } + + ); +} + +const MesssageTableEntry = ({ item, idx }) => { + const bgColor = useColorModeValue(idx % 2 === 0 ? "bg-slate-800" : "bg-black", "bg-sky-900"); + + return ( + + + {item.isAssistant ? + Profile Picture + : Profile Picture} + + {item.text} + + + + ) +} + +const MessagesDashboard = () => { + const bgColor = useColorModeValue(colors.light.bg, colors.dark.bg); + + const [messages, setMessages] = useState([]); + const [userMessages, setUserMessages] = useState([]); + + const { isLoading: isLoadingAll } = useSWRImmutable("/api/messages?allUsers=true", fetcher, { + onSuccess: (data) => { + setMessages(data); + }, + }); + + const { isLoading: isLoadingUser } = useSWRImmutable(`/api/messages`, fetcher, { + onSuccess: (data) => { + setUserMessages(data); + }, + }); + + return ( + <> + + Messages - Open Assistant + + + + + + + + + + + Most recent messages + + + + Your most recent messages + + + + + + + + ); +}; + +MessagesDashboard.getLayout = (page) => ( +
+
+ {page} +
+); + +export default MessagesDashboard;