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
JavaScript
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