mirror of
https://github.com/bitsocialnet/5chan.git
synced 2026-08-03 07:41:04 +02:00
add info toast when a new version is available
This commit is contained in:
+30
-2
@@ -22,8 +22,9 @@ import CaptchaModal from './components/modals/CaptchaModal';
|
|||||||
import { importAll } from './components/ImageBanner';
|
import { importAll } from './components/ImageBanner';
|
||||||
import preloadImages from './utils/preloadImages';
|
import preloadImages from './utils/preloadImages';
|
||||||
import useError from "./hooks/useError";
|
import useError from "./hooks/useError";
|
||||||
|
import useInfo from "./hooks/useInfo";
|
||||||
import useSuccess from "./hooks/useSuccess";
|
import useSuccess from "./hooks/useSuccess";
|
||||||
|
import packageJson from '../package.json';
|
||||||
|
|
||||||
export default function App() {
|
export default function App() {
|
||||||
const {
|
const {
|
||||||
@@ -41,21 +42,48 @@ export default function App() {
|
|||||||
|
|
||||||
const [, setNewErrorMessage] = useError();
|
const [, setNewErrorMessage] = useError();
|
||||||
const [, setNewSuccessMessage] = useSuccess();
|
const [, setNewSuccessMessage] = useSuccess();
|
||||||
|
const [, setNewInfoMessage] = useInfo();
|
||||||
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const successToast = localStorage.getItem("successToast");
|
const successToast = localStorage.getItem("successToast");
|
||||||
const errorToast = localStorage.getItem("errorToast");
|
const errorToast = localStorage.getItem("errorToast");
|
||||||
|
const infoToast = localStorage.getItem("infoToast");
|
||||||
if (successToast) {
|
if (successToast) {
|
||||||
setNewSuccessMessage(successToast);
|
setNewSuccessMessage(successToast);
|
||||||
localStorage.removeItem("successToast");
|
localStorage.removeItem("successToast");
|
||||||
} else if (errorToast) {
|
} else if (errorToast) {
|
||||||
setNewErrorMessage(errorToast);
|
setNewErrorMessage(errorToast);
|
||||||
localStorage.removeItem("errorToast");
|
localStorage.removeItem("errorToast");
|
||||||
|
} else if (infoToast) {
|
||||||
|
setNewInfoMessage(infoToast);
|
||||||
|
localStorage.removeItem("infoToast");
|
||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}, [setNewErrorMessage, setNewSuccessMessage]);
|
}, [setNewErrorMessage, setNewSuccessMessage, setNewInfoMessage]);
|
||||||
|
|
||||||
|
|
||||||
|
// check for new version
|
||||||
|
useEffect(() => {
|
||||||
|
const fetchVersionInfo = async () => {
|
||||||
|
try {
|
||||||
|
const packageRes = await fetch('https://raw.githubusercontent.com/plebbit/plebchan/master/package.json', { cache: 'no-cache' });
|
||||||
|
const packageData = await packageRes.json();
|
||||||
|
|
||||||
|
if (packageJson.version !== packageData.version) {
|
||||||
|
const newVersionInfo = `New version available, plebchan v${packageData.version}. Refresh the page to update.`;
|
||||||
|
localStorage.setItem('infoToast', newVersionInfo);;
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Failed to fetch latest version info:', error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
fetchVersionInfo();
|
||||||
|
}, [setNewInfoMessage]);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// preload banners
|
// preload banners
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|||||||
@@ -0,0 +1,43 @@
|
|||||||
|
import { useEffect, useState } from "react";
|
||||||
|
import { toast } from "react-toastify";
|
||||||
|
|
||||||
|
const useInfo = () => {
|
||||||
|
const [infoMessage, setInfoMessage] = useState('');
|
||||||
|
const [renderCount, setRenderCount] = useState(0);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (infoMessage && infoMessage.length > 0) {
|
||||||
|
const showInfoToast = () => {
|
||||||
|
const toastId = toast.info(infoMessage.toString(), {
|
||||||
|
position: "top-right",
|
||||||
|
autoClose: false,
|
||||||
|
hideProgressBar: false,
|
||||||
|
closeOnClick: false,
|
||||||
|
pauseOnHover: false,
|
||||||
|
draggable: false,
|
||||||
|
progress: undefined,
|
||||||
|
theme: "dark",
|
||||||
|
});
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
toast.dismiss(toastId);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const timeoutId = setTimeout(showInfoToast, 500);
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
clearTimeout(timeoutId);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}, [infoMessage, renderCount]);
|
||||||
|
|
||||||
|
const setNewInfoMessage = (message) => {
|
||||||
|
setInfoMessage(message);
|
||||||
|
setRenderCount(prevCount => prevCount + 1);
|
||||||
|
};
|
||||||
|
|
||||||
|
return [infoMessage, setNewInfoMessage];
|
||||||
|
};
|
||||||
|
|
||||||
|
export default useInfo;
|
||||||
Reference in New Issue
Block a user