import { useEditor, useValue } from '@tldraw/editor' import { useCallback, useRef, useState } from 'react' import { useUiEvents } from '../../context/events' import { useTranslation } from '../../hooks/useTranslation/useTranslation' import { TldrawUiButton } from '../primitives/Button/TldrawUiButton' import { TldrawUiButtonIcon } from '../primitives/Button/TldrawUiButtonIcon' import { TldrawUiInput } from '../primitives/TldrawUiInput' import { UserPresenceColorPicker } from './UserPresenceColorPicker' /** @public @react */ export function DefaultUserPresenceEditor() { const editor = useEditor() const trackEvent = useUiEvents() const userName = useValue('userName', () => editor.user.getName(), []) const msg = useTranslation() const rOriginalName = useRef(userName) const rCurrentName = useRef(userName) // Whether the user is editing their name or not const [isEditingName, setIsEditingName] = useState(false) const toggleEditingName = useCallback(() => { setIsEditingName((s) => !s) }, []) const handleValueChange = useCallback( (value: string) => { rCurrentName.current = value editor.user.updateUserPreferences({ name: value }) }, [editor] ) const handleBlur = useCallback(() => { if (rOriginalName.current === rCurrentName.current) return trackEvent('change-user-name', { source: 'people-menu' }) rOriginalName.current = rCurrentName.current }, [trackEvent]) const handleCancel = useCallback(() => { setIsEditingName(false) editor.user.updateUserPreferences({ name: rOriginalName.current }) editor.menus.clearOpenMenus() }, [editor]) return (
{isEditingName ? ( ) : ( <>
{ if (!isEditingName) setIsEditingName(true) }} > {userName || msg('people-menu.anonymous-user')}
{!userName ? (
{msg('people-menu.user')}
) : null} )}
) }