import { useEffect, useCallback, useState } from 'react'; import { Button, AlertBanner, Flexbox } from '@umami/react-zen'; import { setItem } from '@/lib/storage'; import useStore, { checkVersion } from '@/store/version'; import { REPO_URL, VERSION_CHECK } from '@/lib/constants'; import { useMessages } from '@/components/hooks'; import { usePathname } from 'next/navigation'; export function UpdateNotice({ user, config }) { const { formatMessage, labels, messages } = useMessages(); const { latest, checked, hasUpdate, releaseUrl } = useStore(); const pathname = usePathname(); const [dismissed, setDismissed] = useState(checked); const allowUpdate = process.env.NODE_ENV === 'production' && user?.isAdmin && !config?.updatesDisabled && !pathname.includes('/share/') && !process.env.cloudMode && !process.env.privateMode && !dismissed; const updateCheck = useCallback(() => { setItem(VERSION_CHECK, { version: latest, time: Date.now() }); }, [latest]); function handleViewClick() { updateCheck(); setDismissed(true); open(releaseUrl || REPO_URL, '_blank'); } function handleDismissClick() { updateCheck(); setDismissed(true); } useEffect(() => { if (allowUpdate) { checkVersion(); } }, [allowUpdate]); if (!allowUpdate || !hasUpdate) { return null; } return ( ); } export default UpdateNotice;