- Leaderboard: useState - User: useReducer - Games: useContext [...in progress] - usePolling giveup on internal cache in favour of onResponce() callback
26 lines
774 B
JavaScript
26 lines
774 B
JavaScript
import { useState } from "react";
|
|
import usePolling from "../util/Polling";
|
|
|
|
export default function useLeaderboardApi() {
|
|
const [leaderboard, setLeaderboard] = useState(null);
|
|
|
|
const usePoll = (pollingReducer) => {
|
|
const [polling, dispatchPolling] = pollingReducer;
|
|
|
|
const mode = (polling.enabled === true)
|
|
? { interval_sec: 300 } // update leaderbord stats every 5 min
|
|
: { interval_stop: true } // user has fliped OfflineToggel
|
|
|
|
const isPolling = usePolling('/api/leaderboard', setLeaderboard, mode);
|
|
|
|
if (isPolling !== polling.leaderboard) {
|
|
dispatchPolling({ type: 'next', leaderboard: isPolling });
|
|
}
|
|
|
|
return leaderboard;
|
|
}
|
|
|
|
return {
|
|
poll: usePoll
|
|
}
|
|
} |