UNPKG

stream-chat-react-native-core

Version:

The official React Native and Expo components for Stream Chat, a service for building chat applications

42 lines 1.7 kB
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.useStreamingMessage = void 0; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _react = require("react"); var DEFAULT_LETTER_INTERVAL = 0; var DEFAULT_RENDERING_LETTER_COUNT = 2; var useStreamingMessage = ({ letterInterval = DEFAULT_LETTER_INTERVAL, renderingLetterCount = DEFAULT_RENDERING_LETTER_COUNT, text }) => { var _useState = (0, _react.useState)(text), _useState2 = (0, _slicedToArray2.default)(_useState, 2), streamedMessageText = _useState2[0], setStreamedMessageText = _useState2[1]; var textCursor = (0, _react.useRef)(text.length); (0, _react.useEffect)(() => { var textLength = text.length; var interval = setInterval(() => { if (!text || textCursor.current >= textLength) { clearInterval(interval); } var newCursorValue = textCursor.current + renderingLetterCount; var newText = text.substring(0, newCursorValue); textCursor.current += newText.length - textCursor.current; var codeBlockCounts = (newText.match(/```/g) || []).length; var shouldOptimisticallyCloseCodeBlock = codeBlockCounts > 0 && codeBlockCounts % 2 > 0; setStreamedMessageText(shouldOptimisticallyCloseCodeBlock ? newText + '```' : newText); }, letterInterval); return () => { clearInterval(interval); }; }, [letterInterval, renderingLetterCount, text]); return { streamedMessageText }; }; exports.useStreamingMessage = useStreamingMessage; //# sourceMappingURL=useStreamingMessage.js.map