import { useEffect, useState } from "react"; import { compare } from "semver"; import * as api from "@/helpers/api"; import * as storage from "@/helpers/storage"; import { useGlobalStore } from "@/store/module"; import Icon from "./Icon"; interface State { latestVersion: string; show: boolean; } const UpgradeVersionBanner: React.FC = () => { const globalStore = useGlobalStore(); const profile = globalStore.state.systemStatus.profile; const [state, setState] = useState({ latestVersion: "", show: false, }); useEffect(() => { if (globalStore.state.systemStatus.ignoreUpgrade) { return; } 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 UpgradeVersionBanner;