import { ElementIds } from '@/Constants/ElementIDs' import { classNames } from '@standardnotes/utils' import { ReactNode, useCallback, useState } from 'react' import { IconType, PrefKey, PrefDefaults } from '@standardnotes/snjs' import Icon from '../Icon/Icon' import { useApplication } from '../ApplicationProvider' export type NoteStatus = { type: 'saving' | 'saved' | 'error' message: string desc?: string } const IndicatorWithTooltip = ({ className, onClick, onBlur, icon, isTooltipVisible, children, animateIcon = false, }: { className: string onClick: () => void onBlur: () => void icon: IconType isTooltipVisible: boolean children: ReactNode animateIcon?: boolean }) => (
{children}
) type Props = { status: NoteStatus | undefined syncTakingTooLong: boolean updateSavingIndicator?: boolean } const NoteStatusIndicator = ({ status, syncTakingTooLong, updateSavingIndicator = PrefDefaults[PrefKey.UpdateSavingStatusIndicator], }: Props) => { const application = useApplication() const [isTooltipVisible, setIsTooltipVisible] = useState(false) const onBlur = () => setIsTooltipVisible(false) const toggleShowPreference = useCallback(() => { void application.setPreference(PrefKey.UpdateSavingStatusIndicator, !updateSavingIndicator) }, [application, updateSavingIndicator]) if (updateSavingIndicator && !status) { return null } if (status && status.type === 'error') { return (
{status.message}
{status.desc &&
{status.desc}
}
) } if (syncTakingTooLong) { return ( {status ? ( <>
{status.message}
{status.desc &&
{status.desc}
} ) : (
Sync taking too long
)}
) } if (updateSavingIndicator && status) { return (
{status.message}
{status.desc &&
{status.desc}
}
) } return (
Note status updates are disabled
Click to enable.
) } export default NoteStatusIndicator