instantjob-recruiter-client
Version:
a set of tools for creating an instantjob recruiter react client
44 lines (40 loc) • 1.5 kB
JSX
import {tolerant_selector} from './base'
import {get_missions_workplace_id} from 'selectors/mission_workplace'
import {
create_hash, hash_each, map_hash, array_from_set, set_from_array, split_array,
} from 'common/utilities'
const get_raw_mission_users = (state) => state.missions.users
const get_raw_users = (state) => state.users.users
export const get_user_assigned_mission_ids = tolerant_selector(
[get_raw_mission_users, get_raw_users],
(mission_users, users) => {
const user_assigned_mission_ids = create_hash(
Object.keys(users),
(user_id) => []
)
hash_each(mission_users, (mission_id, user_statuses) => {
hash_each(user_statuses, (user_id, status) => {
if (status == 'assigned') {
if (!user_assigned_mission_ids[user_id]) {
user_assigned_mission_ids[user_id] = []
}
user_assigned_mission_ids[user_id].push(mission_id)
}
})
})
return user_assigned_mission_ids
}
)
export const get_user_workplaces_count = tolerant_selector(
[get_user_assigned_mission_ids, get_missions_workplace_id],
(user_assigned_mission_ids, missions_workplace_id) => map_hash(
user_assigned_mission_ids,
(mission_ids) => {
const workplace_ids = mission_ids.map((mission_id) => missions_workplace_id[mission_id]).filter(Boolean)
return map_hash(
split_array(workplace_ids, (workplace_id) => workplace_id),
(workplace_ids) => workplace_ids.length,
)
}
)
)