From 04cc3869c2844bb82ac6975ee218141104385c35 Mon Sep 17 00:00:00 2001 From: Parker Date: Fri, 15 Nov 2024 00:30:43 -0600 Subject: Extra route + Much more UI --- app/src/components/Dashboard.tsx | 204 +++++++++++++++++++++------------------ 1 file changed, 112 insertions(+), 92 deletions(-) (limited to 'app/src/components/Dashboard.tsx') diff --git a/app/src/components/Dashboard.tsx b/app/src/components/Dashboard.tsx index f3442e0..1b728d1 100644 --- a/app/src/components/Dashboard.tsx +++ b/app/src/components/Dashboard.tsx @@ -31,6 +31,8 @@ function Dashboard() { const [links, setLinks] = useState([]); const [logs, setLogs] = useState([]); const [visibleLog, setVisibleLog] = useState(null); + const [loadingLinks, setLoadingLinks] = useState(true); // Track loading state for links + const [loadingLogs, setLoadingLogs] = useState(true); // Track loading state for logs const navigate = useNavigate(); // Fetch links from API @@ -44,13 +46,15 @@ function Dashboard() { navigate('/login'); } }) - .catch((error: unknown) => { if (axios.isAxiosError(error)) { - if (error.response?.status != 404) { + if (error.response?.status !== 404) { navigate('/login'); } } + }) + .finally(() => { + setLoadingLinks(false); // Set loadingLinks to false once done }); }, []); @@ -67,10 +71,13 @@ function Dashboard() { }) .catch((error: unknown) => { if (axios.isAxiosError(error)) { - if (error.response?.status != 404) { + if (error.response?.status !== 404) { navigate('/login'); } } + }) + .finally(() => { + setLoadingLogs(false); // Set loadingLogs to false once done }); }, []); @@ -112,104 +119,117 @@ function Dashboard() { }); }; + // Loading spinner component + const LoadingSpinner = () => ( +
+
+

Loading...

+
+ ); + return ( <> - - - - - - - - - - - {/* If there are no links, put a special message */} - {links.length === 0 && ( - - + {/* Show loading spinner if either links or logs are still loading */} + {loadingLinks || loadingLogs ? ( + + ) : ( +
LinkVisitsRedirectExpire Date
-
- You do not have any shortened links - try creating one. -
-
+ + + + + + - )} - - {/* For every link and its logs */} - {links.map((link) => ( - - - - + + {/* If there are no links, put a special message */} + {links.length === 0 && ( + + - - + )} - {/* Conditionally render logs for this link */} - {visibleLog === link.link && ( - - + + + + - )} - - ))} - -
LinkVisitsRedirectExpire Date
- - - {logs.filter((log) => log.link === link.link).length || 0} +
+
+ You do not have any shortened links - try creating one. +
{link.redirect_link}{link.expire_date}
- - - - - - - - - - - - {/* Render all logs for the link */} - {logs - .filter((log) => log.link === link.link) - .map((log, index, filteredLogs) => ( - - - - - - - - - ))} - {/* If the link has no logs, put a special message */} - {logs.filter((log) => log.link === link.link).length === - 0 && ( - - - - )} - -
IDTimestampIPLocationISP
{filteredLogs.length - index}{log.timestamp}{log.ip}{log.location}{log.isp} - -
-
- No logs for this link -
-
+ {/* For every link and its logs */} + {links.map((link) => ( + +
+ + {logs.filter((log) => log.link === link.link).length || 0} + {link.redirect_link}{link.expire_date}
+ + {/* Conditionally render logs for this link */} + {visibleLog === link.link && ( + + + + + + + + + + + + + + {/* Render all logs for the link */} + {logs + .filter((log) => log.link === link.link) + .map((log, index, filteredLogs) => ( + + + + + + + + + ))} + {/* If the link has no logs, put a special message */} + {logs.filter((log) => log.link === link.link) + .length === 0 && ( + + + + )} + +
IDTimestampIPLocationISP
{filteredLogs.length - index}{log.timestamp}{log.ip}{log.location}{log.isp} + +
+
+ No logs for this link +
+
+ + + )} + + ))} + + + )} ); } -- cgit v1.2.3-70-g09d2