instantjob-recruiter-client
Version:
a set of tools for creating an instantjob recruiter react client
64 lines (58 loc) • 2.22 kB
JSX
import {tolerant_selector} from 'selectors/base'
import {get_fields_by_user} from 'selectors/fields'
import {map_hash, array_from_hash} from 'common/utilities'
import {
get_user_status, action_update_user, action_toggle_blacklist_user, action_open_chat,
} from 'common/users'
import {instant_job_users_fields} from 'common/constants'
const get_raw_users = (state) => state.users.users
const get_current_recipient_id = (state) => state.users.current_recipient
const get_current_user_id = (state) => state.users.current_user
const get_raw_mission_users = (state) => state.missions.users
export const get_users = tolerant_selector(
[get_raw_users, get_fields_by_user, get_raw_mission_users],
(users, fields_by_user, mission_users) => map_hash(users, (user) => {
const {id} = user
const fields = array_from_hash(fields_by_user[id]) || []
const instant_job_users_fields_filled = instant_job_users_fields.filter(({id: field_name}) => user[field_name]).length
const profile_rate = (fields.filter(({empty}) => !empty).length + instant_job_users_fields_filled) / (fields.length + instant_job_users_fields.length)
let missions_count = 0
map_hash(mission_users, (users_status) => {
if (users_status) {
switch (users_status[id]) {
case 'assigned':
missions_count += 1
break
}
}
})
return {
...user,
full_name: `${user.last_name || ""} ${user.first_name || ""}`.trim() || user.email,
status: get_user_status(user),
fields,
missions_count,
profile_rate,
update(user) {
action_update_user({...user, id})
},
toggle_blacklist() {
action_toggle_blacklist_user(user)
},
open_chat() {
action_open_chat(user)
},
}
})
)
function make_user(users, id, empty) {
return (id && users[id]) || empty
}
export const get_current_recipient = tolerant_selector(
[get_users, get_current_recipient_id],
(users, current_recipient_id) => make_user(users, current_recipient_id, null)
)
export const get_current_user = tolerant_selector(
[get_users, get_current_user_id],
(users, current_user_id) => make_user(users, current_user_id, {})
)