diff --git a/src/components/settings-modal/settings-modal.module.css b/src/components/settings-modal/settings-modal.module.css index 8d189221..2a772514 100644 --- a/src/components/settings-modal/settings-modal.module.css +++ b/src/components/settings-modal/settings-modal.module.css @@ -72,6 +72,14 @@ background-image: var(--settings-modal-close-button-background-image); } +.languageSettings { + display: inline-block; +} + +.setting { + margin-bottom: 8px; +} + @media (max-width: 640px) { .settingsModal { width: 350px !important; diff --git a/src/components/settings-modal/settings-modal.tsx b/src/components/settings-modal/settings-modal.tsx index f63f1c4b..f3fb68ec 100644 --- a/src/components/settings-modal/settings-modal.tsx +++ b/src/components/settings-modal/settings-modal.tsx @@ -1,12 +1,72 @@ -import styles from './settings-modal.module.css'; +import { useState } from 'react'; import { useNavigate } from 'react-router-dom'; -import useTheme from '../../hooks/use-theme'; import { useTranslation } from 'react-i18next'; +import styles from './settings-modal.module.css'; +import useTheme from '../../hooks/use-theme'; import packageJson from '../../../package.json'; -const commitRef = process.env.REACT_APP_COMMIT_REF; -// TODO: remove theme and languages selectors for debugging -const ThemeSettings = () => { +const commitRef = process.env.REACT_APP_COMMIT_REF; +const isElectron = window.isElectron === true; + +const CheckForUpdates = () => { + const { t } = useTranslation(); + const [loading, setLoading] = useState(false); + + const checkForUpdates = async () => { + try { + setLoading(true); + const packageRes = await fetch('https://raw.githubusercontent.com/plebbit/plebchan/master/package.json', { cache: 'no-cache' }); + const packageData = await packageRes.json(); + let updateAvailable = false; + + if (packageJson.version !== packageData.version) { + const newVersionText = t('new_stable_version', { newVersion: packageData.version, oldVersion: packageJson.version }); + const updateActionText = isElectron + ? t('download_latest_desktop', { link: 'https://github.com/plebbit/plebchan/releases/latest', interpolation: { escapeValue: false } }) + : t('refresh_to_update'); + alert(newVersionText + ' ' + updateActionText); + updateAvailable = true; + } + + if (commitRef && 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 newVersionText = + t('new_development_version', { newCommit: latestCommitHash.slice(0, 7), oldCommit: commitRef.slice(0, 7) }) + ' ' + t('refresh_to_update'); + alert(newVersionText); + updateAvailable = true; + } + } + + if (!updateAvailable) { + alert( + commitRef + ? `${t('latest_development_version', { commit: commitRef.slice(0, 7), link: 'https://plebchan.eth.limo/#/', interpolation: { escapeValue: false } })}` + : `${t('latest_stable_version', { version: packageJson.version })}`, + ); + } + } catch (error) { + alert('Failed to fetch latest version info: ' + error); + } finally { + setLoading(false); + } + }; + + return ( +