mirror of
https://github.com/crocofied/CoreControl.git
synced 2025-12-18 07:56:57 +00:00
Loading on Sites & Site load
This commit is contained in:
parent
62d8c1c1b2
commit
59a32e0407
@ -6,6 +6,7 @@ import Sites from "@/components/cards/Sites";
|
|||||||
import Pagination from "@/components/Pagination";
|
import Pagination from "@/components/Pagination";
|
||||||
import useSites from "@/hooks/useSites";
|
import useSites from "@/hooks/useSites";
|
||||||
import SearchAndLayout from "@/components/SearchAndLayout";
|
import SearchAndLayout from "@/components/SearchAndLayout";
|
||||||
|
import Loading from "@/components/Loading";
|
||||||
|
|
||||||
interface SitesPageProps {
|
interface SitesPageProps {
|
||||||
username: string;
|
username: string;
|
||||||
@ -22,7 +23,8 @@ export default function SitesPage({ username, name }: SitesPageProps) {
|
|||||||
setSearch,
|
setSearch,
|
||||||
handlePageChange,
|
handlePageChange,
|
||||||
setItemPerPage,
|
setItemPerPage,
|
||||||
loadSites
|
loadSites,
|
||||||
|
loading
|
||||||
} = useSites();
|
} = useSites();
|
||||||
return (
|
return (
|
||||||
<Sidebar
|
<Sidebar
|
||||||
@ -56,6 +58,13 @@ export default function SitesPage({ username, name }: SitesPageProps) {
|
|||||||
setItemPerPage={setItemPerPage}
|
setItemPerPage={setItemPerPage}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|
||||||
|
{loading ? (
|
||||||
|
<div className="flex justify-center items-center h-48 mt-4">
|
||||||
|
<Loading />
|
||||||
|
</div>
|
||||||
|
) : (
|
||||||
|
<>
|
||||||
{sites.length > 0 ? (
|
{sites.length > 0 ? (
|
||||||
<div className={
|
<div className={
|
||||||
itemPerPage === 5
|
itemPerPage === 5
|
||||||
@ -87,6 +96,8 @@ export default function SitesPage({ username, name }: SitesPageProps) {
|
|||||||
itemsPerPage={itemPerPage}
|
itemsPerPage={itemPerPage}
|
||||||
onPageChange={handlePageChange}
|
onPageChange={handlePageChange}
|
||||||
/>
|
/>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
</main>
|
</main>
|
||||||
</Sidebar>
|
</Sidebar>
|
||||||
)
|
)
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
import Sidebar from "@/components/Sidebar"
|
import Sidebar from "@/components/Sidebar"
|
||||||
import useSite from "@/hooks/useSite"
|
import useSite from "@/hooks/useSite"
|
||||||
import { useEffect, useState } from "react"
|
import { useEffect, useState } from "react"
|
||||||
|
import Loading from "@/components/Loading"
|
||||||
import { EditModeToggle } from "@/components/EditModeToggle"
|
import { EditModeToggle } from "@/components/EditModeToggle"
|
||||||
import AddNetwork from "@/components/dialogues/AddNetwork"
|
import AddNetwork from "@/components/dialogues/AddNetwork"
|
||||||
import { Plus, Pencil, Trash, Info, Building2, Network as NetworkIcon, Globe, Cpu } from "lucide-react"
|
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) {
|
export default function SitesPage({ username, name, siteId }: SitesPageProps) {
|
||||||
const { site, loadSite, setSiteId } = useSite()
|
const { site, loadSite, setSiteId, loading } = useSite()
|
||||||
const [isEditMode, setIsEditMode] = useState(false)
|
const [isEditMode, setIsEditMode] = useState(false)
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@ -29,6 +30,11 @@ export default function SitesPage({ username, name, siteId }: SitesPageProps) {
|
|||||||
return (
|
return (
|
||||||
<Sidebar username={username} fullName={name} breadcrumbPath={["/", "Dashboard", "Resources", "Sites", site.name]}>
|
<Sidebar username={username} fullName={name} breadcrumbPath={["/", "Dashboard", "Resources", "Sites", site.name]}>
|
||||||
<main className="w-full">
|
<main className="w-full">
|
||||||
|
{loading ? (
|
||||||
|
<div className="flex justify-center items-center h-64 w-full">
|
||||||
|
<Loading />
|
||||||
|
</div>
|
||||||
|
) : (
|
||||||
<div className="flex flex-col gap-4 w-full">
|
<div className="flex flex-col gap-4 w-full">
|
||||||
<div className="card bg-base-100 shadow-xl rounded-xl overflow-hidden border border-base-200 w-full">
|
<div className="card bg-base-100 shadow-xl rounded-xl overflow-hidden border border-base-200 w-full">
|
||||||
<div className="card-body p-6">
|
<div className="card-body p-6">
|
||||||
@ -153,6 +159,7 @@ export default function SitesPage({ username, name, siteId }: SitesPageProps) {
|
|||||||
<EditSite site={site} onSiteEdited={loadSite} />
|
<EditSite site={site} onSiteEdited={loadSite} />
|
||||||
<DeleteSite siteId={site.id} />
|
<DeleteSite siteId={site.id} />
|
||||||
</div>
|
</div>
|
||||||
|
)}
|
||||||
</main>
|
</main>
|
||||||
</Sidebar>
|
</Sidebar>
|
||||||
)
|
)
|
||||||
|
|||||||
@ -10,13 +10,16 @@ const useSite = () => {
|
|||||||
networks: []
|
networks: []
|
||||||
});
|
});
|
||||||
const [siteId, setSiteId] = useState("");
|
const [siteId, setSiteId] = useState("");
|
||||||
|
const [loading, setLoading] = useState(false);
|
||||||
|
|
||||||
const loadSite = useCallback(() => {
|
const loadSite = useCallback(() => {
|
||||||
if (!siteId) return;
|
if (!siteId) return;
|
||||||
|
setLoading(true);
|
||||||
axios.get('/api/sites/get', {
|
axios.get('/api/sites/get', {
|
||||||
params: { siteId }
|
params: { siteId }
|
||||||
}).then((response) => {
|
}).then((response) => {
|
||||||
setSite(response.data.site);
|
setSite(response.data.site);
|
||||||
|
setLoading(false);
|
||||||
});
|
});
|
||||||
}, [siteId]);
|
}, [siteId]);
|
||||||
|
|
||||||
@ -58,6 +61,7 @@ const useSite = () => {
|
|||||||
setSiteId,
|
setSiteId,
|
||||||
editSite,
|
editSite,
|
||||||
deleteSite,
|
deleteSite,
|
||||||
|
loading
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -11,13 +11,16 @@ const useSites = () => {
|
|||||||
const [itemPerPage, setItemPerPage] = useState(defaultLayout);
|
const [itemPerPage, setItemPerPage] = useState(defaultLayout);
|
||||||
const [total, setTotal] = useState(0);
|
const [total, setTotal] = useState(0);
|
||||||
const [search, setSearch] = useState("");
|
const [search, setSearch] = useState("");
|
||||||
|
const [loading, setLoading] = useState(false);
|
||||||
|
|
||||||
const loadSites = useCallback(() => {
|
const loadSites = useCallback(() => {
|
||||||
|
setLoading(true);
|
||||||
axios.get('/api/sites/get_all', {
|
axios.get('/api/sites/get_all', {
|
||||||
params: { currentPage, itemPerPage, search }
|
params: { currentPage, itemPerPage, search }
|
||||||
}).then((response) => {
|
}).then((response) => {
|
||||||
setSites(response.data.sites);
|
setSites(response.data.sites);
|
||||||
setTotal(response.data.total);
|
setTotal(response.data.total);
|
||||||
|
setLoading(false);
|
||||||
});
|
});
|
||||||
}, [currentPage, itemPerPage, search]);
|
}, [currentPage, itemPerPage, search]);
|
||||||
|
|
||||||
@ -41,7 +44,8 @@ const useSites = () => {
|
|||||||
setSearch,
|
setSearch,
|
||||||
handlePageChange,
|
handlePageChange,
|
||||||
setItemPerPage,
|
setItemPerPage,
|
||||||
loadSites
|
loadSites,
|
||||||
|
loading
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user