From fa26115d44cfeae196a1687cffdafc264687ca63 Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Mon, 2 Aug 2021 14:30:25 -0400 Subject: [PATCH 1/2] Refactor queue fetch code into function --- src/components/AppView/AppView.js | 94 ++++++++++++++++--------------- 1 file changed, 48 insertions(+), 46 deletions(-) diff --git a/src/components/AppView/AppView.js b/src/components/AppView/AppView.js index 635cdf9..e0bf4d5 100644 --- a/src/components/AppView/AppView.js +++ b/src/components/AppView/AppView.js @@ -31,58 +31,60 @@ export default function AppView({ setDarkMode }) { const setLogin = useLoginSetter(); const [cookies, removeCookie] = useCookies(["csrf_refresh_token"]); - // Get Queues from API. - useEffect(_ => { - (async function getQueues() { - if (access_token === null) { - return undefined; - } + const getQueues = async _ => { + if (access_token === null) { + return undefined; + } - if (queueSelectorOpen) { - return undefined; - } + if (queueSelectorOpen) { + return undefined; + } - if (selectedQueues.length === 0) { - setQueues([]) - return undefined; - } + if (selectedQueues.length === 0) { + setQueues([]) + return undefined; + } - setIsLoading(true); - let queuesToLoad = ""; + setIsLoading(true); + let queuesToLoad = ""; - if (selectedQueues.length === 1) { - queuesToLoad = selectedQueues[0].name; - } - else { - selectedQueues.forEach((queue, index) => ( - index === 0 - ? queuesToLoad += queue.name - : queuesToLoad += `+${queue.name}` - )); - } + if (selectedQueues.length === 1) { + queuesToLoad = selectedQueues[0].name; + } + else { + selectedQueues.forEach((queue, index) => ( + index === 0 + ? queuesToLoad += queue.name + : queuesToLoad += `+${queue.name}` + )); + } - let myHeaders = new Headers(); - myHeaders.append("Authorization", `Bearer ${access_token}`); - let requestOptions = { headers: myHeaders }; - - const apiResponse = await fetch(`${process.env.PUBLIC_URL}/api/data/${queuesToLoad}`, requestOptions); - - if (!apiResponse.ok) { - console.error(`Fetching queues failed. Got code ${apiResponse.status} (${apiResponse.statusText})`); - const errorMessageJSON = await apiResponse.json(); - setErrorResponse({ - code: apiResponse.status, - description: apiResponse.statusText, - message: errorMessageJSON.message ? errorMessageJSON.message : "" - }) - setError(true); - return undefined; - } + let myHeaders = new Headers(); + myHeaders.append("Authorization", `Bearer ${access_token}`); + let requestOptions = { headers: myHeaders }; + + const apiResponse = await fetch(`${process.env.PUBLIC_URL}/api/data/${queuesToLoad}`, requestOptions); + + if (!apiResponse.ok) { + console.error(`Fetching queues failed. Got code ${apiResponse.status} (${apiResponse.statusText})`); + const errorMessageJSON = await apiResponse.json(); + setErrorResponse({ + code: apiResponse.status, + description: apiResponse.statusText, + message: errorMessageJSON.message ? errorMessageJSON.message : "" + }) + setError(true); + return undefined; + } + + const queueJson = await apiResponse.json(); + setQueues(queueJson); + setIsLoading(false) + }; - const queueJson = await apiResponse.json(); - setQueues(queueJson); - setIsLoading(false) - })(); + // Get Queues from API. + useEffect(_ => { + getQueues(); }, [selectedQueues, access_token, queueSelectorOpen]); // Populate items array. From baaeea5acfa55554b9b9076d026285b723b5969f Mon Sep 17 00:00:00 2001 From: Justin Campbell Date: Mon, 2 Aug 2021 14:48:51 -0400 Subject: [PATCH 2/2] Add 60 second interval to update items --- src/components/AppView/AppView.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/components/AppView/AppView.js b/src/components/AppView/AppView.js index e0bf4d5..884e59a 100644 --- a/src/components/AppView/AppView.js +++ b/src/components/AppView/AppView.js @@ -96,6 +96,16 @@ export default function AppView({ setDarkMode }) { setItems(tempItems); }, [queues]); + // Auto refresh items. + useEffect( _ => { + const timer = setInterval(_ => { + getQueues(); + }, 1000 * 60) + return _ => { + clearInterval(timer); + } + }, [selectedQueues]) + const theme = useTheme(); const transitionWidth = theme.transitions.create(["width"], { duration: theme.transitions.duration.enteringScreen,