UNPKG

stream-chat-react-native-core

Version:

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

50 lines 2.43 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 _client$user2, _client$user4; 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 => { var _event$user, _client$user; if (channel.cid !== event.cid || ((_event$user = event.user) == null ? void 0 : _event$user.id) === (client == null || (_client$user = client.user) == null ? void 0 : _client$user.id)) return; setUsersTyping(prev => { if (!event.user) return prev; if (prev.some(user => { var _event$user2; return user.id === ((_event$user2 = event.user) == null ? void 0 : _event$user2.id); })) return prev; return [...prev, event.user]; }); }, [channel.cid, client == null || (_client$user2 = client.user) == null ? void 0 : _client$user2.id]); var handleTypingStop = (0, _react.useCallback)(event => { var _event$user3, _client$user3; if (channel.cid !== event.cid || ((_event$user3 = event.user) == null ? void 0 : _event$user3.id) === (client == null || (_client$user3 = client.user) == null ? void 0 : _client$user3.id)) return; setUsersTyping(prev => prev.filter(user => { var _event$user4; return user.id !== ((_event$user4 = event.user) == null ? void 0 : _event$user4.id); })); }, [channel.cid, client == null || (_client$user4 = client.user) == null ? void 0 : _client$user4.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