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