UNPKG

@liveblocks/react

Version:

A set of React hooks and providers to use Liveblocks declaratively. Liveblocks is the all-in-one toolkit to build collaborative products like Figma, Notion, and more.

180 lines (112 loc) 6.83 kB
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _chunkWH55MUS4cjs = require('./chunk-WH55MUS4.cjs'); // src/lib/use-layout-effect.ts var _react = require('react'); var useLayoutEffect = typeof window !== "undefined" ? _react.useLayoutEffect : _react.useEffect; // src/use-group.ts var _core = require('@liveblocks/core'); function selectorFor_useGroup(state) { if (state === void 0 || _optionalChain([state, 'optionalAccess', _ => _.isLoading])) { return _nullishCoalesce(state, () => ( { isLoading: true })); } if (state.error) { return state; } return { isLoading: false, group: state.data }; } function useGroup(groupId) { const client = _chunkWH55MUS4cjs.useClient.call(void 0, ); const store = client[_core.kInternal].httpClient.groupsStore; const getGroupState = _react.useCallback.call(void 0, () => store.getItemState(groupId), [store, groupId] ); _react.useEffect.call(void 0, () => { void store.enqueue(groupId); }, [store, groupId]); return _chunkWH55MUS4cjs.useSyncExternalStoreWithSelector.call(void 0, store.subscribe, getGroupState, getGroupState, selectorFor_useGroup, _core.shallow ); } // src/use-mention-suggestions.ts var MENTION_SUGGESTIONS_DEBOUNCE = 500; function normalizeMentionSuggestions(suggestions) { return suggestions.map( (suggestion) => typeof suggestion === "string" ? { kind: "user", id: suggestion } : suggestion ); } function useMentionSuggestions(roomId, search) { const [mentionSuggestions, setMentionSuggestions] = _react.useState.call(void 0, ); const lastInvokedAt = _react.useRef.call(void 0, ); const resolveMentionSuggestions = _chunkWH55MUS4cjs.useResolveMentionSuggestions.call(void 0, ); const mentionSuggestionsCache = _chunkWH55MUS4cjs.useMentionSuggestionsCache.call(void 0, ); _react.useEffect.call(void 0, () => { if (search === void 0 || !resolveMentionSuggestions) { return; } const resolveMentionSuggestionsArgs = { text: search, roomId }; const mentionSuggestionsCacheKey = _core.stableStringify.call(void 0, resolveMentionSuggestionsArgs ); let debounceTimeout; let isCanceled = false; const getMentionSuggestions = async () => { try { lastInvokedAt.current = performance.now(); const rawMentionSuggestions = await resolveMentionSuggestions( resolveMentionSuggestionsArgs ); if (!isCanceled) { const normalizedSuggestions = normalizeMentionSuggestions( rawMentionSuggestions ); setMentionSuggestions(normalizedSuggestions); mentionSuggestionsCache.set( mentionSuggestionsCacheKey, normalizedSuggestions ); } } catch (error) { console.error(_optionalChain([error, 'optionalAccess', _2 => _2.message])); } }; if (mentionSuggestionsCache.has(mentionSuggestionsCacheKey)) { const cachedSuggestions = mentionSuggestionsCache.get( mentionSuggestionsCacheKey ); setMentionSuggestions(cachedSuggestions); } else if (!lastInvokedAt.current || Math.abs(performance.now() - lastInvokedAt.current) > MENTION_SUGGESTIONS_DEBOUNCE) { void getMentionSuggestions(); } else { debounceTimeout = window.setTimeout(() => { void getMentionSuggestions(); }, MENTION_SUGGESTIONS_DEBOUNCE); } return () => { isCanceled = true; window.clearTimeout(debounceTimeout); }; }, [search, roomId, resolveMentionSuggestions, mentionSuggestionsCache]); return mentionSuggestions; } // src/use-sync-source.ts function useSyncSource() { const client = _chunkWH55MUS4cjs.useClient.call(void 0, ); const createSyncSource = client[_core.kInternal].createSyncSource; const [syncSource, setSyncSource] = _react.useState.call(void 0, ); _react.useEffect.call(void 0, () => { const newSyncSource = createSyncSource(); setSyncSource(newSyncSource); return () => newSyncSource.destroy(); }, [createSyncSource]); return syncSource; } exports.getUmbrellaStoreForClient = _chunkWH55MUS4cjs.getUmbrellaStoreForClient; exports.useAddRoomCommentReaction = _chunkWH55MUS4cjs.useAddRoomCommentReaction; exports.useClientOrNull = _chunkWH55MUS4cjs.useClientOrNull; exports.useCreateRoomComment = _chunkWH55MUS4cjs.useCreateRoomComment; exports.useCreateRoomThread = _chunkWH55MUS4cjs.useCreateRoomThread; exports.useCreateTextMention = _chunkWH55MUS4cjs.useCreateTextMention; exports.useDeleteRoomComment = _chunkWH55MUS4cjs.useDeleteRoomComment; exports.useDeleteRoomThread = _chunkWH55MUS4cjs.useDeleteRoomThread; exports.useDeleteTextMention = _chunkWH55MUS4cjs.useDeleteTextMention; exports.useEditRoomComment = _chunkWH55MUS4cjs.useEditRoomComment; exports.useEditRoomThreadMetadata = _chunkWH55MUS4cjs.useEditRoomThreadMetadata; exports.useGroup = useGroup; exports.useLatest = _chunkWH55MUS4cjs.useLatest; exports.useLayoutEffect = useLayoutEffect; exports.useMarkRoomThreadAsRead = _chunkWH55MUS4cjs.useMarkRoomThreadAsRead; exports.useMarkRoomThreadAsResolved = _chunkWH55MUS4cjs.useMarkRoomThreadAsResolved; exports.useMarkRoomThreadAsUnresolved = _chunkWH55MUS4cjs.useMarkRoomThreadAsUnresolved; exports.useMentionSuggestions = useMentionSuggestions; exports.useMentionSuggestionsCache = _chunkWH55MUS4cjs.useMentionSuggestionsCache; exports.useRemoveRoomCommentReaction = _chunkWH55MUS4cjs.useRemoveRoomCommentReaction; exports.useReportTextEditor = _chunkWH55MUS4cjs.useReportTextEditor; exports.useResolveMentionSuggestions = _chunkWH55MUS4cjs.useResolveMentionSuggestions; exports.useRoomAttachmentUrl = _chunkWH55MUS4cjs.useRoomAttachmentUrl; exports.useRoomPermissions = _chunkWH55MUS4cjs.useRoomPermissions; exports.useRoomThreadSubscription = _chunkWH55MUS4cjs.useRoomThreadSubscription; exports.useSignal = _chunkWH55MUS4cjs.useSignal; exports.useSyncExternalStoreWithSelector = _chunkWH55MUS4cjs.useSyncExternalStoreWithSelector; exports.useSyncSource = useSyncSource; exports.useYjsProvider = _chunkWH55MUS4cjs.useYjsProvider; //# sourceMappingURL=_private.cjs.map