/
githubmirror
/
tldraw
Обзор
Документация
Войти
/
githubmirror
/
tldraw
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
packages/editor/src/lib/config/createTLCurrentUser.ts
57 строк
2 KB
Mime Čuvalo
feat(editor): add shape attribution, TLUserStore, and extensible user records (#8147)
26 мар 2026, 17:19
Не верифицирован
26 мар 2026, 17:19
839e118
Код
Авторство
О чём код?
import { Signal, computed, isSignal } from '@tldraw/state' import { useAtom } from '@tldraw/state-react' import { useEffect, useMemo } from 'react' import { useShallowObjectIdentity } from '../hooks/useIdentity' import { TLUserPreferences, getUserPreferences, setUserPreferences } from './TLUserPreferences' /** @public */ export interface TLCurrentUser { readonly userPreferences: Signal<TLUserPreferences> // eslint-disable-next-line tldraw/method-signature-style readonly setUserPreferences: (userPreferences: TLUserPreferences) => void } const defaultLocalStorageUserPrefs = computed('defaultLocalStorageUserPrefs', () => getUserPreferences() ) /** @public */ export function createTLCurrentUser( opts = {} as { userPreferences?: Signal<TLUserPreferences> // eslint-disable-next-line tldraw/method-signature-style setUserPreferences?: (userPreferences: TLUserPreferences) => void } ): TLCurrentUser { return { userPreferences: opts.userPreferences ?? defaultLocalStorageUserPrefs, setUserPreferences: opts.setUserPreferences ?? setUserPreferences, } } /** * @public */ export function useTldrawCurrentUser(opts: { userPreferences?: Signal<TLUserPreferences> | TLUserPreferences // eslint-disable-next-line tldraw/method-signature-style setUserPreferences?: (userPreferences: TLUserPreferences) => void }): TLCurrentUser { const prefs = useShallowObjectIdentity(opts.userPreferences ?? defaultLocalStorageUserPrefs) const userAtom = useAtom<TLUserPreferences | Signal<TLUserPreferences>>('userAtom', prefs) useEffect(() => { userAtom.set(prefs) }, [prefs, userAtom]) return useMemo( () => createTLCurrentUser({ userPreferences: computed('userPreferences', () => { const userStuff = userAtom.get() return isSignal(userStuff) ? userStuff.get() : userStuff }), setUserPreferences: opts.setUserPreferences, }), [userAtom, opts.setUserPreferences] ) }