diff --git a/app/dashboard/sites/SitesPage.tsx b/app/dashboard/sites/SitesPage.tsx index 41be392..6751236 100644 --- a/app/dashboard/sites/SitesPage.tsx +++ b/app/dashboard/sites/SitesPage.tsx @@ -6,6 +6,7 @@ import Sites from "@/components/cards/Sites"; import Pagination from "@/components/Pagination"; import useSites from "@/hooks/useSites"; import SearchAndLayout from "@/components/SearchAndLayout"; +import Loading from "@/components/Loading"; interface SitesPageProps { username: string; @@ -22,7 +23,8 @@ export default function SitesPage({ username, name }: SitesPageProps) { setSearch, handlePageChange, setItemPerPage, - loadSites + loadSites, + loading } = useSites(); return ( - {sites.length > 0 ? ( -
- {sites.map((site: any) => ( - - ))} + + {loading ? ( +
+
) : ( -
-
-

No Sites Found

-

No sites match your current search criteria

-
-
+ <> + {sites.length > 0 ? ( +
+ {sites.map((site: any) => ( + + ))} +
+ ) : ( +
+
+

No Sites Found

+

No sites match your current search criteria

+
+
+ )} + + + )} - - ) diff --git a/app/dashboard/sites/[siteId]/SitePage.tsx b/app/dashboard/sites/[siteId]/SitePage.tsx index b85c60a..3a622bb 100644 --- a/app/dashboard/sites/[siteId]/SitePage.tsx +++ b/app/dashboard/sites/[siteId]/SitePage.tsx @@ -2,6 +2,7 @@ import Sidebar from "@/components/Sidebar" import useSite from "@/hooks/useSite" import { useEffect, useState } from "react" +import Loading from "@/components/Loading" import { EditModeToggle } from "@/components/EditModeToggle" import AddNetwork from "@/components/dialogues/AddNetwork" import { Plus, Pencil, Trash, Info, Building2, Network as NetworkIcon, Globe, Cpu } from "lucide-react" @@ -17,7 +18,7 @@ interface SitesPageProps { } export default function SitesPage({ username, name, siteId }: SitesPageProps) { - const { site, loadSite, setSiteId } = useSite() + const { site, loadSite, setSiteId, loading } = useSite() const [isEditMode, setIsEditMode] = useState(false) useEffect(() => { @@ -29,6 +30,11 @@ export default function SitesPage({ username, name, siteId }: SitesPageProps) { return (
+ {loading ? ( +
+ +
+ ) : (
@@ -153,6 +159,7 @@ export default function SitesPage({ username, name, siteId }: SitesPageProps) {
+ )}
) diff --git a/hooks/useSite.ts b/hooks/useSite.ts index 1b36ba5..3748c00 100644 --- a/hooks/useSite.ts +++ b/hooks/useSite.ts @@ -10,13 +10,16 @@ const useSite = () => { networks: [] }); const [siteId, setSiteId] = useState(""); + const [loading, setLoading] = useState(false); const loadSite = useCallback(() => { if (!siteId) return; + setLoading(true); axios.get('/api/sites/get', { params: { siteId } }).then((response) => { setSite(response.data.site); + setLoading(false); }); }, [siteId]); @@ -58,6 +61,7 @@ const useSite = () => { setSiteId, editSite, deleteSite, + loading }; }; diff --git a/hooks/useSites.ts b/hooks/useSites.ts index d17c58a..5d611b8 100644 --- a/hooks/useSites.ts +++ b/hooks/useSites.ts @@ -11,13 +11,16 @@ const useSites = () => { const [itemPerPage, setItemPerPage] = useState(defaultLayout); const [total, setTotal] = useState(0); const [search, setSearch] = useState(""); + const [loading, setLoading] = useState(false); const loadSites = useCallback(() => { + setLoading(true); axios.get('/api/sites/get_all', { params: { currentPage, itemPerPage, search } }).then((response) => { setSites(response.data.sites); setTotal(response.data.total); + setLoading(false); }); }, [currentPage, itemPerPage, search]); @@ -41,7 +44,8 @@ const useSites = () => { setSearch, handlePageChange, setItemPerPage, - loadSites + loadSites, + loading }; };