diff --git a/package-lock.json b/package-lock.json index 28f5890..ec9886b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,6 +24,7 @@ "react-dom": "^18.2.0", "react-google-recaptcha": "^3.1.0", "react-hotkeys-hook": "^4.4.1", + "react-icons": "^4.12.0", "react-router": "^6.21.0", "react-router-dom": "^6.21.0", "socket.io-client": "^4.7.2", @@ -4698,6 +4699,14 @@ "react-dom": ">=16.8.1" } }, + "node_modules/react-icons": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.12.0.tgz", + "integrity": "sha512-IBaDuHiShdZqmfc/TwHu6+d6k2ltNCf3AszxNmjJc1KUfXdEeRJOKyNvLmAHaarhzGmTSVygNdyu8/opXv2gaw==", + "peerDependencies": { + "react": "*" + } + }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", diff --git a/package.json b/package.json index 2ad4a68..4c3508e 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "react-dom": "^18.2.0", "react-google-recaptcha": "^3.1.0", "react-hotkeys-hook": "^4.4.1", + "react-icons": "^4.12.0", "react-router": "^6.21.0", "react-router-dom": "^6.21.0", "socket.io-client": "^4.7.2", diff --git a/src/pages/Dashboard.jsx b/src/pages/Dashboard.jsx index 7c77618..90bfd31 100644 --- a/src/pages/Dashboard.jsx +++ b/src/pages/Dashboard.jsx @@ -1,5 +1,92 @@ +import { useEffect, useState } from "react"; +import { useCookies } from "react-cookie"; +import logo_light from "../assets/logo_light_46.png"; +import logo_dark from "../assets/logo_dark_46.png"; + +const Page = { + MY_FILES: 0, + SHARED: 1, + TEMPLATES: 2, + TODOS: 3, + SETTINGS: 4, +}; + export default function Dashboard() { + const [cookies] = useCookies(["username"]); + const [theme, setTheme] = useState(""); + const [currentPage, setCurrentPage] = useState(Page.MY_FILES); + + const buttons = [ + { + icon: "fa-regular fa-folder-closed", + label: "My files", + onClick: () => setCurrentPage(Page.MY_FILES), + }, + { + icon: "fa-solid fa-share-from-square", + label: "Shared", + onClick: () => setCurrentPage(Page.SHARED), + }, + { + icon: "fa-solid fa-book", + label: "Templates", + onClick: () => setCurrentPage(Page.TEMPLATES), + }, + { + icon: "fa-solid fa-list", + label: "My to-dos", + onClick: () => setCurrentPage(Page.TODOS), + }, + { + icon: "fa-solid fa-diagram-project", + label: "Editor", + onClick: () => window.open("/editor"), + }, + { + icon: "bi bi-gear", + label: "Settings", + onClick: () => setCurrentPage(Page.SETTINGS), + }, + ]; + + const pages = [ +
My files
, +
Shared
, +
Templates
, +
Todos
, +
Settings
, + ]; + + useEffect(() => { + const t = localStorage.getItem("theme"); + setTheme(t); + if (t) document.body.setAttribute("theme-mode", t); + document.title = cookies.username + "'s Dashboard | drawDB"; + document.body.setAttribute("class", "theme"); + }, [setTheme, cookies]); + return ( -
Dashboard
- ) +
+
+ logo +
+ {buttons.map((b, i) => ( + + ))} +
+
+
{pages[currentPage]}
+
+ ); } diff --git a/src/pages/login.jsx b/src/pages/login.jsx index bad4752..93af42a 100644 --- a/src/pages/login.jsx +++ b/src/pages/login.jsx @@ -35,10 +35,13 @@ export default function Login() { { withCredentials: true } ) .then((res) => { - setCookie("logged_in", true, { path: "/", maxAge: 1000 * 60 * 60 }); + setCookie("logged_in", true, { + path: "/", + expires: new Date(Date.parse(res.data.session.cookie.expires)), + }); setCookie("username", res.data.username, { path: "/", - maxAge: 1000 * 60 * 60, + expires: new Date(Date.parse(res.data.session.cookie.expires)), }); navigate("/"); })