mirror of
https://github.com/bitsocialnet/5chan.git
synced 2026-08-03 07:41:04 +02:00
fix: show new version info toast only once
This commit is contained in:
+6
-6
@@ -128,26 +128,26 @@
|
|||||||
"@babel/plugin-proposal-private-property-in-object": "^7.21.11",
|
"@babel/plugin-proposal-private-property-in-object": "^7.21.11",
|
||||||
"@capacitor/cli": "3.6.0",
|
"@capacitor/cli": "3.6.0",
|
||||||
"concurrently": "8.0.1",
|
"concurrently": "8.0.1",
|
||||||
|
"conventional-changelog-cli": "4.1.0",
|
||||||
"cordova-res": "0.15.4",
|
"cordova-res": "0.15.4",
|
||||||
"cross-env": "7.0.3",
|
"cross-env": "7.0.3",
|
||||||
|
"cz-conventional-changelog": "^3.3.0",
|
||||||
"decompress": "4.2.1",
|
"decompress": "4.2.1",
|
||||||
"electron": "19.1.8",
|
"electron": "19.1.8",
|
||||||
"electron-builder": "23.0.9",
|
"electron-builder": "23.0.9",
|
||||||
|
"husky": "4.3.8",
|
||||||
|
"lint-staged": "12.3.8",
|
||||||
"prettier": "2.3.2",
|
"prettier": "2.3.2",
|
||||||
"source-map-explorer": "2.5.3",
|
"source-map-explorer": "2.5.3",
|
||||||
"typescript": "5.0.2",
|
"typescript": "5.0.2",
|
||||||
"wait-on": "7.0.1",
|
"wait-on": "7.0.1"
|
||||||
"conventional-changelog-cli": "4.1.0",
|
|
||||||
"cz-conventional-changelog": "3.3.0",
|
|
||||||
"husky": "4.3.8",
|
|
||||||
"lint-staged": "12.3.8"
|
|
||||||
},
|
},
|
||||||
"resolutions": {
|
"resolutions": {
|
||||||
"styled-components": "^5"
|
"styled-components": "^5"
|
||||||
},
|
},
|
||||||
"lint-staged": {
|
"lint-staged": {
|
||||||
"{src,test,config}/**/*.{cjs,js,jsx,ts,tsx}": [
|
"{src,test,config}/**/*.{cjs,js,jsx,ts,tsx}": [
|
||||||
"prettier --config config/prettier.config.js --write"
|
"prettier --config prettier.config.js --write"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"husky": {
|
"husky": {
|
||||||
|
|||||||
+36
-44
@@ -1,4 +1,4 @@
|
|||||||
import React, { useEffect } from 'react';
|
import React, { useEffect, useState } 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,47 +21,50 @@ 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 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';
|
||||||
import packageJson from '../package.json';
|
import packageJson from '../package.json';
|
||||||
const commitRef = process?.env?.REACT_APP_COMMIT_REF || '';
|
const commitRef = process?.env?.REACT_APP_COMMIT_REF || '';
|
||||||
|
|
||||||
export default function App() {
|
export default function App() {
|
||||||
const {
|
const {
|
||||||
bodyStyle, setBodyStyle,
|
bodyStyle,
|
||||||
|
setBodyStyle,
|
||||||
setDefaultSubplebbits,
|
setDefaultSubplebbits,
|
||||||
isCaptchaOpen, setIsCaptchaOpen,
|
isCaptchaOpen,
|
||||||
|
setIsCaptchaOpen,
|
||||||
setIsSettingsOpen,
|
setIsSettingsOpen,
|
||||||
selectedStyle, setSelectedStyle,
|
selectedStyle,
|
||||||
|
setSelectedStyle,
|
||||||
setShowPostForm,
|
setShowPostForm,
|
||||||
setShowPostFormLink,
|
setShowPostFormLink,
|
||||||
} = useGeneralStore(state => state);
|
} = useGeneralStore((state) => state);
|
||||||
|
|
||||||
const location = useLocation();
|
const location = useLocation();
|
||||||
const isHomeRoute = location.pathname === "/";
|
const isHomeRoute = location.pathname === '/';
|
||||||
const isElectron = window.electron && window.electron.isElectron;
|
const isElectron = window.electron && window.electron.isElectron;
|
||||||
|
|
||||||
const [, setNewErrorMessage] = useError();
|
const [, setNewErrorMessage] = useError();
|
||||||
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');
|
||||||
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 {
|
} else {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}, [setNewErrorMessage, setNewSuccessMessage]);
|
}, [setNewErrorMessage, setNewSuccessMessage]);
|
||||||
|
|
||||||
|
|
||||||
// check for new version
|
// check for new version
|
||||||
// TODO: delete this code and toast when v1.0.0 is released
|
// TODO: delete this code and toast when v1.0.0 is released
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -70,11 +73,12 @@ export default function App() {
|
|||||||
const packageRes = await fetch('https://raw.githubusercontent.com/plebbit/plebchan/master/package.json', { cache: 'no-cache' });
|
const packageRes = await fetch('https://raw.githubusercontent.com/plebbit/plebchan/master/package.json', { cache: 'no-cache' });
|
||||||
const packageData = await packageRes.json();
|
const packageData = await packageRes.json();
|
||||||
|
|
||||||
if (packageJson.version !== packageData.version) {
|
if (packageJson.version !== packageData.version && !infoMessageShown) {
|
||||||
const newVersionInfo = isElectron
|
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}. 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.`;
|
: `New version available, plebchan v${packageData.version}. You are using v${packageJson.version}. Refresh to update.`;
|
||||||
setNewInfoMessage(newVersionInfo);
|
setNewInfoMessage(newVersionInfo);
|
||||||
|
setInfoMessageShown(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (commitRef.length > 0) {
|
if (commitRef.length > 0) {
|
||||||
@@ -83,9 +87,10 @@ export default function App() {
|
|||||||
|
|
||||||
const latestCommitHash = commitData[0].sha;
|
const latestCommitHash = commitData[0].sha;
|
||||||
|
|
||||||
if (latestCommitHash.trim() !== commitRef.trim()) {
|
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.`;
|
const newVersionInfo = `New dev version available, commit ${latestCommitHash.slice(0, 7)}. You are using commit ${commitRef.slice(0, 7)}. Refresh to update.`;
|
||||||
setNewInfoMessage(newVersionInfo);
|
setNewInfoMessage(newVersionInfo);
|
||||||
|
setInfoMessageShown(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@@ -94,8 +99,7 @@ export default function App() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
fetchVersionInfo();
|
fetchVersionInfo();
|
||||||
}, [setNewInfoMessage, isElectron]);
|
}, [setNewInfoMessage, isElectron, infoMessageShown]);
|
||||||
|
|
||||||
|
|
||||||
// preload banners
|
// preload banners
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -108,7 +112,6 @@ export default function App() {
|
|||||||
loadImages();
|
loadImages();
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
|
||||||
// automatic dark mode without interefering with user's selected style
|
// automatic dark mode without interefering with user's selected style
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (isHomeRoute) return;
|
if (isHomeRoute) return;
|
||||||
@@ -121,7 +124,7 @@ export default function App() {
|
|||||||
setBodyStyle({
|
setBodyStyle({
|
||||||
background: '#1d1f21 none',
|
background: '#1d1f21 none',
|
||||||
color: '#c5c8c6',
|
color: '#c5c8c6',
|
||||||
fontFamily: 'Arial, Helvetica, sans-serif'
|
fontFamily: 'Arial, Helvetica, sans-serif',
|
||||||
});
|
});
|
||||||
localStorage.setItem('selectedStyle', 'Tomorrow');
|
localStorage.setItem('selectedStyle', 'Tomorrow');
|
||||||
}
|
}
|
||||||
@@ -132,7 +135,7 @@ export default function App() {
|
|||||||
setBodyStyle({
|
setBodyStyle({
|
||||||
background: '#1d1f21 none',
|
background: '#1d1f21 none',
|
||||||
color: '#c5c8c6',
|
color: '#c5c8c6',
|
||||||
fontFamily: 'Arial, Helvetica, sans-serif'
|
fontFamily: 'Arial, Helvetica, sans-serif',
|
||||||
});
|
});
|
||||||
localStorage.setItem('selectedStyle', 'Tomorrow');
|
localStorage.setItem('selectedStyle', 'Tomorrow');
|
||||||
}
|
}
|
||||||
@@ -148,12 +151,9 @@ export default function App() {
|
|||||||
// fetch default subplebbits
|
// fetch default subplebbits
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
let didCancel = false;
|
let didCancel = false;
|
||||||
fetch(
|
fetch('https://raw.githubusercontent.com/plebbit/temporary-default-subplebbits/master/subplebbits.json', { cache: 'no-cache' })
|
||||||
"https://raw.githubusercontent.com/plebbit/temporary-default-subplebbits/master/subplebbits.json",
|
|
||||||
{ cache: "no-cache" }
|
|
||||||
)
|
|
||||||
.then((res) => res.json())
|
.then((res) => res.json())
|
||||||
.then(res => {
|
.then((res) => {
|
||||||
if (!didCancel) {
|
if (!didCancel) {
|
||||||
setDefaultSubplebbits(res);
|
setDefaultSubplebbits(res);
|
||||||
}
|
}
|
||||||
@@ -179,24 +179,19 @@ export default function App() {
|
|||||||
} else {
|
} else {
|
||||||
setIsSettingsOpen(false);
|
setIsSettingsOpen(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
}, [location.pathname, setIsSettingsOpen, setShowPostForm, setShowPostFormLink]);
|
}, [location.pathname, setIsSettingsOpen, setShowPostForm, setShowPostFormLink]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<Helmet>
|
<Helmet>
|
||||||
<link rel="apple-touch-icon" sizes="180x180" href="assets/logo/apple-touch-icon.png" />
|
<link rel='apple-touch-icon' sizes='180x180' href='assets/logo/apple-touch-icon.png' />
|
||||||
<link rel="icon" type="image/png" sizes="32x32" href="assets/logo/favicon-32x32.png" />
|
<link rel='icon' type='image/png' sizes='32x32' href='assets/logo/favicon-32x32.png' />
|
||||||
<link rel="icon" type="image/png" sizes="16x16" href="assets/logo/favicon-16x16.png" />
|
<link rel='icon' type='image/png' sizes='16x16' href='assets/logo/favicon-16x16.png' />
|
||||||
<link rel="manifest" href="site.webmanifest" />
|
<link rel='manifest' href='site.webmanifest' />
|
||||||
<meta name="msapplication-TileColor" content="#fee9cd" />
|
<meta name='msapplication-TileColor' content='#fee9cd' />
|
||||||
<meta name="theme-color" content="#ffffff" />
|
<meta name='theme-color' content='#ffffff' />
|
||||||
</Helmet>
|
</Helmet>
|
||||||
<GlobalStyle
|
<GlobalStyle background={bodyStyle.background} color={bodyStyle.color} fontFamily={bodyStyle.fontFamily} />
|
||||||
background={bodyStyle.background}
|
|
||||||
color={bodyStyle.color}
|
|
||||||
fontFamily={bodyStyle.fontFamily}
|
|
||||||
/>
|
|
||||||
<Routes>
|
<Routes>
|
||||||
<Route exact path='/' element={<Home setBodyStyle={setBodyStyle} />} />
|
<Route exact path='/' element={<Home setBodyStyle={setBodyStyle} />} />
|
||||||
<Route path={`/p/:subplebbitAddress`} element={<Board setBodyStyle={setBodyStyle} />}>
|
<Route path={`/p/:subplebbitAddress`} element={<Board setBodyStyle={setBodyStyle} />}>
|
||||||
@@ -235,10 +230,7 @@ export default function App() {
|
|||||||
<Route path='*' element={<NotFound setBodyStyle={setBodyStyle} />} />
|
<Route path='*' element={<NotFound setBodyStyle={setBodyStyle} />} />
|
||||||
</Routes>
|
</Routes>
|
||||||
<Toast />
|
<Toast />
|
||||||
<CaptchaModal
|
<CaptchaModal selectedStyle={selectedStyle} isOpen={isCaptchaOpen} closeModal={() => setIsCaptchaOpen(false)} />
|
||||||
selectedStyle={selectedStyle}
|
|
||||||
isOpen={isCaptchaOpen}
|
|
||||||
closeModal={() => setIsCaptchaOpen(false)}
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
)}
|
);
|
||||||
|
}
|
||||||
|
|||||||
@@ -6198,7 +6198,7 @@ csstype@^3.0.2:
|
|||||||
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b"
|
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b"
|
||||||
integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
|
integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==
|
||||||
|
|
||||||
cz-conventional-changelog@3.3.0:
|
cz-conventional-changelog@3.3.0, cz-conventional-changelog@^3.3.0:
|
||||||
version "3.3.0"
|
version "3.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz#9246947c90404149b3fe2cf7ee91acad3b7d22d2"
|
resolved "https://registry.yarnpkg.com/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz#9246947c90404149b3fe2cf7ee91acad3b7d22d2"
|
||||||
integrity sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==
|
integrity sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==
|
||||||
|
|||||||
Reference in New Issue
Block a user