UNPKG

stream-chat-react-native-core

Version:

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

41 lines 1.75 kB
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.useChannelTypingState = void 0; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _react = require("react"); var _ChatContext = require("../../../contexts/chatContext/ChatContext"); var useChannelTypingState = ({ channel }) => { var _useChatContext = (0, _ChatContext.useChatContext)(), client = _useChatContext.client; var _useState = (0, _react.useState)([]), _useState2 = (0, _slicedToArray2.default)(_useState, 2), usersTyping = _useState2[0], setUsersTyping = _useState2[1]; var handleTypingStart = (0, _react.useCallback)(event => { if (channel.cid !== event.cid || event.user?.id === client?.user?.id) return; setUsersTyping(prev => { if (!event.user) return prev; if (prev.some(user => user.id === event.user?.id)) return prev; return [...prev, event.user]; }); }, [channel.cid, client?.user?.id]); var handleTypingStop = (0, _react.useCallback)(event => { if (channel.cid !== event.cid || event.user?.id === client?.user?.id) return; setUsersTyping(prev => prev.filter(user => user.id !== event.user?.id)); }, [channel.cid, client?.user?.id]); (0, _react.useEffect)(() => { var listeners = [channel.on('typing.start', handleTypingStart), channel.on('typing.stop', handleTypingStop)]; return () => { listeners.forEach(listener => listener.unsubscribe()); }; }, [channel, handleTypingStart, handleTypingStop]); return { usersTyping }; }; exports.useChannelTypingState = useChannelTypingState; //# sourceMappingURL=useChannelTypingState.js.map