JSFiddle - React, Tailwind, and code Playground
by Vladymyr Shevchuk
JavaScript
export default (action$, state$) => action$.pipe(
ofType(MESSAGE_MARK_READ_REQUEST),
mergeMap(({ payload: { conversationId } }) => {
const { userId } = state$.value.authentication;
const { messages: { byHash, byId } } = state$.value.conversations.byHash[conversationId];
const allowedTypes = ['message', 'secret', 'set_members', 'leave', 'title'];
const lastMessageId = byId.find(id => {
const { type } = byHash[id];
return allowedTypes.includes(type);
});
const lastMessage = get(byHash, lastMessageId, {});
const lastMessageRead = get(lastMessage, 'read', []);
const topic = `futurechat/conversation/${conversationId}/${userId}/member/read`;
const message = {
id: lastMessageId,
type: 'read',
sentAt: (new Date()).toISOString(),
createdAt: lastMessage.createdAt,
};
return
lastMessageRead.includes(userId)
? []
: [
mqttMessagePublishRequest(topic, message, conversationId),
messageMarkReadSuccess(conversationId),
];
}),
);
===