@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.
140 lines (81 loc) • 5.76 kB
JavaScript
;Object.defineProperty(exports, "__esModule", {value: true}); 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 _chunkKDGCCWHHcjs = require('./chunk-KDGCCWHH.cjs');
// src/lib/use-layout-effect.ts
var _react = require('react');
var useLayoutEffect = typeof window !== "undefined" ? _react.useLayoutEffect : _react.useEffect;
// src/use-mention-suggestions.ts
var _core = require('@liveblocks/core');
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 = _chunkKDGCCWHHcjs.useResolveMentionSuggestions.call(void 0, );
const mentionSuggestionsCache = _chunkKDGCCWHHcjs.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', _ => _.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 = _chunkKDGCCWHHcjs.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 = _chunkKDGCCWHHcjs.getUmbrellaStoreForClient; exports.useAddRoomCommentReaction = _chunkKDGCCWHHcjs.useAddRoomCommentReaction; exports.useClientOrNull = _chunkKDGCCWHHcjs.useClientOrNull; exports.useCreateRoomComment = _chunkKDGCCWHHcjs.useCreateRoomComment; exports.useCreateRoomThread = _chunkKDGCCWHHcjs.useCreateRoomThread; exports.useCreateTextMention = _chunkKDGCCWHHcjs.useCreateTextMention; exports.useDeleteRoomComment = _chunkKDGCCWHHcjs.useDeleteRoomComment; exports.useDeleteRoomThread = _chunkKDGCCWHHcjs.useDeleteRoomThread; exports.useDeleteTextMention = _chunkKDGCCWHHcjs.useDeleteTextMention; exports.useEditRoomComment = _chunkKDGCCWHHcjs.useEditRoomComment; exports.useEditRoomThreadMetadata = _chunkKDGCCWHHcjs.useEditRoomThreadMetadata; exports.useLayoutEffect = useLayoutEffect; exports.useMarkRoomThreadAsRead = _chunkKDGCCWHHcjs.useMarkRoomThreadAsRead; exports.useMarkRoomThreadAsResolved = _chunkKDGCCWHHcjs.useMarkRoomThreadAsResolved; exports.useMarkRoomThreadAsUnresolved = _chunkKDGCCWHHcjs.useMarkRoomThreadAsUnresolved; exports.useMentionSuggestions = useMentionSuggestions; exports.useMentionSuggestionsCache = _chunkKDGCCWHHcjs.useMentionSuggestionsCache; exports.useRemoveRoomCommentReaction = _chunkKDGCCWHHcjs.useRemoveRoomCommentReaction; exports.useReportTextEditor = _chunkKDGCCWHHcjs.useReportTextEditor; exports.useResolveMentionSuggestions = _chunkKDGCCWHHcjs.useResolveMentionSuggestions; exports.useRoomAttachmentUrl = _chunkKDGCCWHHcjs.useRoomAttachmentUrl; exports.useRoomPermissions = _chunkKDGCCWHHcjs.useRoomPermissions; exports.useRoomThreadSubscription = _chunkKDGCCWHHcjs.useRoomThreadSubscription; exports.useSignal = _chunkKDGCCWHHcjs.useSignal; exports.useSyncExternalStoreWithSelector = _chunkKDGCCWHHcjs.useSyncExternalStoreWithSelector; exports.useSyncSource = useSyncSource; exports.useYjsProvider = _chunkKDGCCWHHcjs.useYjsProvider;
//# sourceMappingURL=_private.cjs.map