From 01faa86c737799da14f5942391f2041edb8ae2b5 Mon Sep 17 00:00:00 2001 From: Dane Everitt Date: Sun, 12 Jul 2020 11:15:54 -0700 Subject: [PATCH] swr for servers on dash; fix whatever is going on with the spinner --- .../dashboard/DashboardContainer.tsx | 44 +++++++------------ .../components/dashboard/ServerRow.tsx | 11 +++-- 2 files changed, 21 insertions(+), 34 deletions(-) diff --git a/resources/scripts/components/dashboard/DashboardContainer.tsx b/resources/scripts/components/dashboard/DashboardContainer.tsx index 6daf78f0d..692ac2ed1 100644 --- a/resources/scripts/components/dashboard/DashboardContainer.tsx +++ b/resources/scripts/components/dashboard/DashboardContainer.tsx @@ -1,44 +1,34 @@ -import React, { useEffect, useState } from 'react'; +import React, { useEffect } from 'react'; import { Server } from '@/api/server/getServer'; import getServers from '@/api/getServers'; import ServerRow from '@/components/dashboard/ServerRow'; import Spinner from '@/components/elements/Spinner'; import PageContentBlock from '@/components/elements/PageContentBlock'; import useFlash from '@/plugins/useFlash'; -import { httpErrorToHuman } from '@/api/http'; -import FlashMessageRender from '@/components/FlashMessageRender'; import { useStoreState } from 'easy-peasy'; import { usePersistedState } from '@/plugins/usePersistedState'; import Switch from '@/components/elements/Switch'; import tw from 'twin.macro'; +import useSWR from 'swr'; +import { PaginatedResult } from '@/api/http'; export default () => { - const { addError, clearFlashes } = useFlash(); - const [ servers, setServers ] = useState([]); - const [ loading, setLoading ] = useState(true); + const { clearFlashes, clearAndAddHttpError } = useFlash(); const { rootAdmin } = useStoreState(state => state.user.data!); const [ showAdmin, setShowAdmin ] = usePersistedState('show_all_servers', false); - const loadServers = () => { - clearFlashes(); - setLoading(true); - - getServers(undefined, showAdmin) - .then(data => setServers(data.items)) - .catch(error => { - console.error(error); - addError({ message: httpErrorToHuman(error) }); - }) - .then(() => setLoading(false)); - }; + const { data: servers, error } = useSWR>( + [ '/api/client/servers', showAdmin ], + () => getServers(undefined, showAdmin) + ); useEffect(() => { - loadServers(); - }, [ showAdmin ]); + if (error) clearAndAddHttpError({ key: 'dashboard', error }); + if (!error) clearFlashes('dashboard'); + }, [ error ]); return ( - - + {rootAdmin &&

@@ -51,14 +41,12 @@ export default () => { />

} - {loading ? + {!servers ? : - servers.length > 0 ? - servers.map((server, index) => ( -
0 ? tw`mt-2` : undefined}> - -
+ servers.items.length > 0 ? + servers.items.map((server, index) => ( + 0 ? tw`mt-2` : undefined}/> )) :

diff --git a/resources/scripts/components/dashboard/ServerRow.tsx b/resources/scripts/components/dashboard/ServerRow.tsx index f6f3a07b4..39d2278f5 100644 --- a/resources/scripts/components/dashboard/ServerRow.tsx +++ b/resources/scripts/components/dashboard/ServerRow.tsx @@ -8,6 +8,7 @@ import getServerResourceUsage, { ServerStats } from '@/api/server/getServerResou import { bytesToHuman, megabytesToHuman } from '@/helpers'; import tw from 'twin.macro'; import GreyRowBox from '@/components/elements/GreyRowBox'; +import Spinner from '@/components/elements/Spinner'; // Determines if the current value is in an alarm threshold so we can show it in red rather // than the more faded default style. @@ -17,7 +18,7 @@ const isAlarmState = (current: number, limit: number): boolean => { return current / limitInBytes >= 0.90; }; -export default ({ server }: { server: Server }) => { +export default ({ server, className }: { server: Server; className?: string }) => { const interval = useRef(null); const [ stats, setStats ] = useState(null); const [ statsError, setStatsError ] = useState(false); @@ -54,7 +55,7 @@ export default ({ server }: { server: Server }) => { const memorylimit = server.limits.memory !== 0 ? megabytesToHuman(server.limits.memory) : 'Unlimited'; return ( - +

@@ -73,10 +74,10 @@ export default ({ server }: { server: Server }) => {

-
+
{!stats ? !statsError ? - + : server.isInstalling ?
@@ -129,7 +130,6 @@ export default ({ server }: { server: Server }) => { {bytesToHuman(stats.memoryUsageInBytes)}

-

of {memorylimit}

@@ -151,7 +151,6 @@ export default ({ server }: { server: Server }) => { {bytesToHuman(stats.diskUsageInBytes)}

-

of {disklimit}