import { useEffect, useState } from "react"; import { compare } from "semver"; import * as api from "../helpers/api"; import * as storage from "../helpers/storage"; import Icon from "./Icon"; import "../less/about-site-dialog.less"; import { useGlobalStore } from "../store/module"; interface State { latestVersion: string; show: boolean; } const UpdateVersionBanner: React.FC = () => { const globalStore = useGlobalStore(); const profile = globalStore.state.systemStatus.profile; const [state, setState] = useState({ latestVersion: "", show: false, }); useEffect(() => { api.getRepoLatestTag().then((latestTag) => { const { skippedVersion } = storage.get(["skippedVersion"]); const latestVersion = latestTag.slice(1) || "0.0.0"; const currentVersion = profile.version; const skipped = skippedVersion ? skippedVersion === latestVersion : false; setState({ latestVersion, show: !skipped && compare(currentVersion, latestVersion) === -1, }); }); }, []); const onSkip = () => { storage.set({ skippedVersion: state.latestVersion }); setState((s) => ({ ...s, show: false, })); }; if (!state.show) return null; return (
New Update {state.latestVersion}
); }; export default UpdateVersionBanner;