UNPKG

instantjob-recruiter-client

Version:

a set of tools for creating an instantjob recruiter react client

71 lines (65 loc) 2.62 kB
import {tolerant_selector} from './base' import {get_users} from './users' import moment from '../common/moment' import {with_recipient} from '../common/messages' import {array_from_hash} from '../common/utilities' const get_recruiter_users = (state) => state.users.recruiter_users const get_muted_users = (state) => state.mutes.muted_users const get_raw_messages = (state) => state.messages.messages const get_raw_recruiters = (state) => state.recruiters.recruiters const get_raw_users = (state) => state.users.users export const get_messages = tolerant_selector( [get_raw_messages, get_raw_recruiters, get_raw_users], (messages, recruiters, users) => array_from_hash(messages).map((message) => ({ ...message, sender: message.sender_type == 'User' ? users[message.sender_id] : recruiters[message.sender_id], })) ) const get_conversations = tolerant_selector( [get_messages], (messages) => messages.reduce((conversations, message) => { let user = message.recipient_type == 'User' ? message.recipient_id : message.sender_id let conversation = conversations[user] if (!conversation) { conversation = [] } return { ...conversations, [user]: [ ...conversation, message, ], } }, {}) ) export const get_recipients = tolerant_selector( [get_users, get_recruiter_users, get_messages], (users, recruiter_users, messages) => ( recruiter_users.filter((user) => users[user]).map((user_id) => { let agency_messages = messages.filter((message) => with_recipient(message, user_id)) let last_message if (agency_messages.length == 0) { last_message = {} } else { last_message = agency_messages.reduce((last_message, message) => moment(message.created_at).isAfter(last_message.created_at) ? message : last_message) } let unread_messages = agency_messages.reduce((unread_messages, message) => { if (message.recipient_type === 'Agency' && message.read_at == null) { return unread_messages + 1 } else { return unread_messages } }, 0) return { ...users[user_id], last_message, unread_messages } }) .sort((u1, u2) => u2.last_message.created_at && u1.last_message.created_at ? (moment(u2.last_message.created_at).isAfter(u1.last_message.created_at) ? 1 : -1) : (u2.last_message.created_at ? 1 : -1)) ) ) export const get_unread_messages = tolerant_selector( [get_recipients], (recipients) => recipients.reduce((unread_messages, recipient) => unread_messages + recipient.unread_messages, 0) )