import React, { useState } from 'react' import { useQuery, QueryClientProvider, QueryClient } from 'react-query' import Head from 'next/head' import Layout from '../components/layout' import '../defaultStyles.css' import constants from '../constants.json' export const queryClient = new QueryClient({ defaultOptions: { queries: { staleTime: Infinity, refetchOnWindowFocus: 'always', }, }, }) const getGlobalProps = () => { return new Promise((resolve) => { fetch(`${constants.apiUrl}infos?motd=true`, { credentials: 'include', Accept: 'application/json', 'Content-Type': 'application/json', }) .then((resp) => resp.json()) .then((data) => { fetch(`${constants.apiUrl}hasNewMsg?userid=${data.uid}`, { credentials: 'include', Accept: 'application/json', 'Content-Type': 'application/json', }) .then((resp) => resp.json()) .then((hasNewMsg) => { resolve({ ...data, ...hasNewMsg }) }) .catch((err) => { resolve({ ...data }) console.error('Error getting unreads') console.error(err) }) }) }) } function App({ Component, pageProps, router }) { const [globalState, setGlobalState] = useState({}) const { data } = useQuery(['infos'], () => getGlobalProps(), { refetchOnWindowFocus: 'always', }) const { motd, uid: userId, unreads } = data || {} const updateGlobalState = (newState) => { setGlobalState({ ...globalState, ...newState, }) } const globalData = { userId: userId, motd: motd, unreads: unreads, } return ( queryClient.invalidateQueries(['infos'])} setGlobalState={updateGlobalState} globalState={globalState} > queryClient.invalidateQueries(['infos'])} setGlobalState={updateGlobalState} globalState={globalState} /> ) } export default function Root(props) { return ( ) }