import { compareSemVersions, StatusServiceEvent } from '@standardnotes/snjs' import { keyboardStringForShortcut, OPEN_PREFERENCES_COMMAND } from '@standardnotes/ui-services' import { useCallback, useEffect, useMemo, useState } from 'react' import { useApplication } from '../ApplicationProvider' import { useKeyboardService } from '../KeyboardServiceProvider' import Icon from '../Icon/Icon' import StyledTooltip from '../StyledTooltip/StyledTooltip' import { MutuallyExclusiveMediaQueryBreakpoints, useMediaQuery } from '@/Hooks/useMediaQuery' import RoundIconButton from '../Button/RoundIconButton' import CountBubble from '../Preferences/PreferencesComponents/CountBubble' type Props = { openPreferences: (openWhatsNew: boolean) => void } const PreferencesButton = ({ openPreferences }: Props) => { const application = useApplication() const keyboardService = useKeyboardService() const shortcut = useMemo( () => keyboardStringForShortcut(keyboardService.keyboardShortcutForCommand(OPEN_PREFERENCES_COMMAND)), [keyboardService], ) const [changelogLastReadVersion, setChangelogLastReadVersion] = useState(() => application.changelogService.getLastReadVersion(), ) const isChangelogUnread = useMemo(() => { return changelogLastReadVersion && !application.isNativeMobileWeb() ? compareSemVersions(application.version, changelogLastReadVersion) > 0 : false }, [application, changelogLastReadVersion]) useEffect( () => application.changelogService.addLastReadChangeListener(setChangelogLastReadVersion), [application.changelogService], ) const onClick = useCallback(() => { openPreferences(isChangelogUnread) }, [isChangelogUnread, openPreferences]) const [bubbleCount, setBubbleCount] = useState() useEffect(() => { return application.status.addEventObserver((event, message) => { if (event !== StatusServiceEvent.PreferencesBubbleCountChanged) { return } setBubbleCount(message) }) }, [application.status]) const isMobileScreen = useMediaQuery(MutuallyExclusiveMediaQueryBreakpoints.sm) if (isMobileScreen) { return (
) } return ( ) } export default PreferencesButton