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