Use DataHandler
s for tokens too
This commit is contained in:
parent
2363d42c15
commit
aecb5051ae
3 changed files with 16 additions and 43 deletions
|
@ -1,7 +1,7 @@
|
|||
import React, {useState, useEffect} from "react";
|
||||
|
||||
/** Takes care of getting data regularly */
|
||||
export default function DataHandler<T extends unknown | undefined>(url: string, updateEveryXSeconds: number) {
|
||||
export default function DataHandler<T extends unknown | undefined>(url: string, updateEveryXSeconds: number, expectData = true) {
|
||||
const [data, setData]: [T | undefined, React.Dispatch<React.SetStateAction<T | undefined>>] = useState();
|
||||
const [error, setError] = useState(false);
|
||||
const [count, setCount] = useState(0);
|
||||
|
@ -9,7 +9,9 @@ export default function DataHandler<T extends unknown | undefined>(url: string,
|
|||
// Try to get and set data
|
||||
const updateData = async () => {
|
||||
try {
|
||||
setData(await fetch(url).then(async r => r.json()));
|
||||
const response = await fetch(url);
|
||||
if (!response.ok) {throw "failed";};
|
||||
setData(expectData ? await response.json() : true);
|
||||
setError(false);
|
||||
} catch {
|
||||
setError(true);
|
||||
|
|
|
@ -3,37 +3,21 @@ import Info from "../Info.js";
|
|||
|
||||
import Osu from "./Osu.js";
|
||||
import { Ruleset } from "osu-api-v2-js";
|
||||
import DataHandler from "#Infos/DataHandler.js";
|
||||
|
||||
export default function RhythmGames() {
|
||||
const [token, setToken] = useState(false);
|
||||
const {data, error} = DataHandler<boolean>("/.netlify/functions/token?service=osu", 60 * 60 * 8, false);
|
||||
const [websites, setWebsites] = useState([] as React.JSX.Element[]);
|
||||
const [error, setError] = useState(false);
|
||||
|
||||
const getToken = async () => {
|
||||
await fetch("/.netlify/functions/token?service=osu").then((r) => {
|
||||
if (r.ok) {
|
||||
setToken(true);
|
||||
} else {
|
||||
setError(true);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
getToken().catch(() => {
|
||||
setError(true);
|
||||
});
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
if (token) {
|
||||
if (data) {
|
||||
const osu = <Osu ruleset={Ruleset.osu} key={"osu"}/>;
|
||||
const taiko = <Osu ruleset={Ruleset.taiko} key={"taiko"}/>;
|
||||
const fruits = <Osu ruleset={Ruleset.fruits} key={"fruits"}/>;
|
||||
const mania = <Osu ruleset={Ruleset.mania} key={"mania"}/>;
|
||||
setWebsites([osu, taiko, fruits, mania]);
|
||||
}
|
||||
}, [token]);
|
||||
}, [data]);
|
||||
|
||||
return (
|
||||
<Info
|
||||
|
|
|
@ -1,40 +1,27 @@
|
|||
import React, {useEffect, useState} from "react";
|
||||
import Info from "../Info.js";
|
||||
import Umami from "./Umami.js";
|
||||
import DataHandler from "#Infos/DataHandler.js";
|
||||
|
||||
export default function Website() {
|
||||
const [token, setToken] = useState(false);
|
||||
const {data} = DataHandler<boolean>("/.netlify/functions/token?service=umami", 60 * 60 * 8, false);
|
||||
const [websites, setWebsites] = useState([] as React.JSX.Element[]);
|
||||
const [error, setError] = useState(false);
|
||||
|
||||
const getToken = async () => {
|
||||
await fetch("/.netlify/functions/token?service=umami").then((r) => {
|
||||
if (r.ok) {
|
||||
setToken(true);
|
||||
} else {
|
||||
setError(true);
|
||||
}
|
||||
});
|
||||
};
|
||||
// useEffect(() => {
|
||||
// setWebsites([<aWebsite key={"awebsite"}/>]);
|
||||
// }, []);
|
||||
|
||||
useEffect(() => {
|
||||
getToken().catch(() => {
|
||||
setError(true);
|
||||
});
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
if (token) {
|
||||
if (data) {
|
||||
const umami = <Umami key={"umami"}/>;
|
||||
setWebsites([umami]);
|
||||
setWebsites(websites.concat([umami]));
|
||||
}
|
||||
}, [token]);
|
||||
}, [data]);
|
||||
|
||||
return (
|
||||
<Info
|
||||
type="Website"
|
||||
websites={websites}
|
||||
error={error}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue