Files
kiss-translator/src/views/Options/index.js

89 lines
2.3 KiB
JavaScript
Raw Normal View History

2023-08-05 20:11:02 +08:00
import { Routes, Route, HashRouter } from "react-router-dom";
2023-07-20 13:45:41 +08:00
import About from "./About";
import Rules from "./Rules";
import Setting from "./Setting";
import Layout from "./Layout";
2023-07-31 15:08:51 +08:00
import SyncSetting from "./SyncSetting";
2023-08-05 20:11:02 +08:00
import { StoragesProvider } from "../../hooks/Storage";
import ThemeProvider from "../../hooks/Theme";
2023-08-09 17:33:51 +08:00
import { useEffect, useState } from "react";
import { isGm } from "../../libs/browser";
import { sleep } from "../../libs/utils";
2023-08-09 20:51:43 +08:00
import CircularProgress from "@mui/material/CircularProgress";
2023-08-26 14:31:13 +08:00
import { trySyncAll } from "../../libs/sync";
2023-08-20 23:30:08 +08:00
import { AlertProvider } from "../../hooks/Alert";
2023-07-20 13:45:41 +08:00
export default function Options() {
2023-08-09 17:33:51 +08:00
const [error, setError] = useState(false);
const [ready, setReady] = useState(false);
useEffect(() => {
(async () => {
2023-08-17 13:27:22 +08:00
if (isGm) {
// 等待GM注入
let i = 0;
for (;;) {
if (window.APP_NAME === process.env.REACT_APP_NAME) {
setReady(true);
break;
}
2023-08-09 17:33:51 +08:00
2023-08-17 13:27:22 +08:00
if (++i > 8) {
setError(true);
break;
}
2023-08-09 20:53:37 +08:00
2023-08-17 13:27:22 +08:00
await sleep(1000);
}
2023-08-09 17:33:51 +08:00
}
2023-08-17 13:27:22 +08:00
// 同步数据
2023-08-26 14:31:13 +08:00
trySyncAll();
2023-08-09 17:33:51 +08:00
})();
}, []);
if (error) {
return (
<center>
<h2>
Please confirm whether to install or enable{" "}
2023-08-09 20:51:43 +08:00
<a href={process.env.REACT_APP_HOMEPAGE}>KISS Translator</a>{" "}
2023-08-09 17:33:51 +08:00
GreaseMonkey script?
</h2>
<h2>
2023-08-09 20:51:43 +08:00
<a href={process.env.REACT_APP_USERSCRIPT_DOWNLOADURL}>Click here</a>{" "}
to install, or <a href={process.env.REACT_APP_HOMEPAGE}>click here</a>{" "}
for help.
2023-08-09 17:33:51 +08:00
</h2>
</center>
);
}
if (isGm && !ready) {
return (
<center>
2023-08-09 20:51:43 +08:00
<CircularProgress />
2023-08-09 17:33:51 +08:00
</center>
);
}
2023-07-20 13:45:41 +08:00
return (
2023-08-05 20:11:02 +08:00
<StoragesProvider>
<ThemeProvider>
2023-08-20 23:30:08 +08:00
<AlertProvider>
<HashRouter>
<Routes>
<Route path="/" element={<Layout />}>
<Route index element={<Setting />} />
<Route path="rules" element={<Rules />} />
<Route path="sync" element={<SyncSetting />} />
<Route path="about" element={<About />} />
</Route>
</Routes>
</HashRouter>
</AlertProvider>
2023-08-05 20:11:02 +08:00
</ThemeProvider>
</StoragesProvider>
2023-07-20 13:45:41 +08:00
);
}