mirror of
https://github.com/bitsocialnet/5chan.git
synced 2026-08-03 07:41:04 +02:00
fix(app): new version info toast should only appear once
This commit is contained in:
+10
-37
@@ -1,4 +1,4 @@
|
|||||||
import React, { useEffect, useState } from 'react';
|
import React, { useEffect, useRef } from 'react';
|
||||||
import { Route, Routes, useLocation } from 'react-router-dom';
|
import { Route, Routes, useLocation } from 'react-router-dom';
|
||||||
import { Helmet } from 'react-helmet-async';
|
import { Helmet } from 'react-helmet-async';
|
||||||
import 'react-tooltip/dist/react-tooltip.css';
|
import 'react-tooltip/dist/react-tooltip.css';
|
||||||
@@ -21,6 +21,7 @@ import Thread from './components/views/Thread';
|
|||||||
import CaptchaModal from './components/modals/CaptchaModal';
|
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 showNewVersionToast from './utils/showNewVersionToast';
|
||||||
import useError from './hooks/useError';
|
import useError from './hooks/useError';
|
||||||
import useInfo from './hooks/useInfo';
|
import useInfo from './hooks/useInfo';
|
||||||
import useSuccess from './hooks/useSuccess';
|
import useSuccess from './hooks/useSuccess';
|
||||||
@@ -48,8 +49,6 @@ export default function App() {
|
|||||||
const [, setNewSuccessMessage] = useSuccess();
|
const [, setNewSuccessMessage] = useSuccess();
|
||||||
const [, setNewInfoMessage] = useInfo();
|
const [, setNewInfoMessage] = useInfo();
|
||||||
|
|
||||||
const [infoMessageShown, setInfoMessageShown] = useState(false);
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const successToast = localStorage.getItem('successToast');
|
const successToast = localStorage.getItem('successToast');
|
||||||
const errorToast = localStorage.getItem('errorToast');
|
const errorToast = localStorage.getItem('errorToast');
|
||||||
@@ -64,41 +63,15 @@ export default function App() {
|
|||||||
}
|
}
|
||||||
}, [setNewErrorMessage, setNewSuccessMessage]);
|
}, [setNewErrorMessage, setNewSuccessMessage]);
|
||||||
|
|
||||||
// check for new version
|
// TODO: delete this code and toast when v1.0.0 is released (minor updates expected)
|
||||||
// TODO: delete this code and toast when v1.0.0 is released
|
let hasRun = useRef(false);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const fetchVersionInfo = async () => {
|
if (!hasRun.current) {
|
||||||
try {
|
showNewVersionToast(setNewInfoMessage, isElectron, packageJson, commitRef);
|
||||||
const packageRes = await fetch('https://raw.githubusercontent.com/plebbit/plebchan/master/package.json', { cache: 'no-cache' });
|
hasRun.current = true;
|
||||||
const packageData = await packageRes.json();
|
}
|
||||||
|
}, [setNewInfoMessage, isElectron]);
|
||||||
if (packageJson.version !== packageData.version && !infoMessageShown) {
|
|
||||||
const newVersionInfo = isElectron
|
|
||||||
? `New version available, plebchan v${packageData.version}. You are using v${packageJson.version}. Download the latest version here: https://github.com/plebbit/plebchan/releases/latest`
|
|
||||||
: `New version available, plebchan v${packageData.version}. You are using v${packageJson.version}. Refresh to update.`;
|
|
||||||
setNewInfoMessage(newVersionInfo);
|
|
||||||
setInfoMessageShown(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (commitRef.length > 0) {
|
|
||||||
const commitRes = await fetch('https://api.github.com/repos/plebbit/plebchan/commits?per_page=1&sha=development', { cache: 'no-cache' });
|
|
||||||
const commitData = await commitRes.json();
|
|
||||||
|
|
||||||
const latestCommitHash = commitData[0].sha;
|
|
||||||
|
|
||||||
if (latestCommitHash.trim() !== commitRef.trim() && !infoMessageShown) {
|
|
||||||
const newVersionInfo = `New dev version available, commit ${latestCommitHash.slice(0, 7)}. You are using commit ${commitRef.slice(0, 7)}. Refresh to update.`;
|
|
||||||
setNewInfoMessage(newVersionInfo);
|
|
||||||
setInfoMessageShown(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
console.error('Failed to fetch latest version info:', error);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
fetchVersionInfo();
|
|
||||||
}, [setNewInfoMessage, isElectron, infoMessageShown]);
|
|
||||||
|
|
||||||
// preload banners
|
// preload banners
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
export const showNewVersionToast = async (setNewInfoMessage, isElectron, packageJson, commitRef) => {
|
||||||
|
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 = isElectron
|
||||||
|
? `New version available, plebchan v${packageData.version}. You are using v${packageJson.version}. Download the latest version here: https://github.com/plebbit/plebchan/releases/latest`
|
||||||
|
: `New version available, plebchan v${packageData.version}. You are using v${packageJson.version}. Refresh to update.`;
|
||||||
|
setNewInfoMessage(newVersionInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (commitRef.length > 0) {
|
||||||
|
const commitRes = await fetch('https://api.github.com/repos/plebbit/plebchan/commits?per_page=1&sha=development', { cache: 'no-cache' });
|
||||||
|
const commitData = await commitRes.json();
|
||||||
|
|
||||||
|
const latestCommitHash = commitData[0].sha;
|
||||||
|
|
||||||
|
if (latestCommitHash.trim() !== commitRef.trim()) {
|
||||||
|
const newVersionInfo = `New dev version available, commit ${latestCommitHash.slice(0, 7)}. You are using commit ${commitRef.slice(0, 7)}. Refresh to update.`;
|
||||||
|
setNewInfoMessage(newVersionInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Failed to fetch latest version info:', error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export default showNewVersionToast;
|
||||||
Reference in New Issue
Block a user