UNPKG

stream-chat-react-native-core

Version:

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

81 lines 4.06 kB
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.useMessageDeliveryStatus = exports.MessageDeliveryStatus = void 0; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _react = require("react"); var _ChatContext = require("../../contexts/chatContext/ChatContext"); var MessageDeliveryStatus = exports.MessageDeliveryStatus = function (MessageDeliveryStatus) { MessageDeliveryStatus["NOT_SENT_BY_CURRENT_USER"] = "not_sent_by_current_user"; MessageDeliveryStatus["DELIVERED"] = "delivered"; MessageDeliveryStatus["READ"] = "read"; MessageDeliveryStatus["SENT"] = "sent"; return MessageDeliveryStatus; }({}); var useMessageDeliveryStatus = ({ channel, lastMessage, isReadEventsEnabled = true }) => { var _client$user3; var _useChatContext = (0, _ChatContext.useChatContext)(), client = _useChatContext.client; var _useState = (0, _react.useState)(undefined), _useState2 = (0, _slicedToArray2.default)(_useState, 2), status = _useState2[0], setStatus = _useState2[1]; var isOwnMessage = (0, _react.useCallback)(message => { var _message$user; return client.user && message && ((_message$user = message.user) == null ? void 0 : _message$user.id) === client.user.id; }, [client]); (0, _react.useEffect)(() => { var _client$user, _client$user2; if (!lastMessage) { setStatus(undefined); } if (!isReadEventsEnabled) { setStatus(MessageDeliveryStatus.NOT_SENT_BY_CURRENT_USER); return; } if (!(lastMessage != null && lastMessage.created_at) || !isOwnMessage(lastMessage)) { return; } var msgRef = { msgId: lastMessage.id, timestampMs: new Date(lastMessage.created_at).getTime() }; var readerOfMessage = channel.messageReceiptsTracker.readersForMessage(msgRef); var deliveredForMessage = channel.messageReceiptsTracker.deliveredForMessage(msgRef); setStatus(readerOfMessage.length > 1 || readerOfMessage.length === 1 && readerOfMessage[0].id !== ((_client$user = client.user) == null ? void 0 : _client$user.id) ? MessageDeliveryStatus.READ : deliveredForMessage.length > 1 || deliveredForMessage.length === 1 && deliveredForMessage[0].id !== ((_client$user2 = client.user) == null ? void 0 : _client$user2.id) ? MessageDeliveryStatus.DELIVERED : MessageDeliveryStatus.SENT); }, [channel, (_client$user3 = client.user) == null ? void 0 : _client$user3.id, isOwnMessage, isReadEventsEnabled, lastMessage]); (0, _react.useEffect)(() => { var handleMessageNew = event => { if (event.message && !isOwnMessage(event.message)) { return setStatus(undefined); } return setStatus(MessageDeliveryStatus.SENT); }; var _channel$on = channel.on('message.new', handleMessageNew), unsubscribe = _channel$on.unsubscribe; return unsubscribe; }, [channel, isOwnMessage]); (0, _react.useEffect)(() => { if (!isOwnMessage(lastMessage)) return; var handleMessageDelivered = event => { var _event$user, _client$user4; if (((_event$user = event.user) == null ? void 0 : _event$user.id) !== ((_client$user4 = client.user) == null ? void 0 : _client$user4.id) && lastMessage && lastMessage.id === event.last_delivered_message_id) setStatus(MessageDeliveryStatus.DELIVERED); }; var handleMarkRead = event => { var _event$user2, _client$user5; if (((_event$user2 = event.user) == null ? void 0 : _event$user2.id) !== ((_client$user5 = client.user) == null ? void 0 : _client$user5.id)) setStatus(MessageDeliveryStatus.READ); }; var listeners = [channel.on('message.delivered', handleMessageDelivered), channel.on('message.read', handleMarkRead)]; return () => listeners.forEach(l => l.unsubscribe()); }, [channel, client, isOwnMessage, lastMessage]); return { status }; }; exports.useMessageDeliveryStatus = useMessageDeliveryStatus; //# sourceMappingURL=useMessageDeliveryStatus.js.map