instantjob-recruiter-client
Version:
a set of tools for creating an instantjob recruiter react client
81 lines (68 loc) • 2.08 kB
JSX
import {hash_with_key, create_hash, filter_hash} from '../common/utilities'
export function store_items(state, items_name, items) {
return {
...state,
[items_name]: {
...state[items_name],
...hash_with_key(items),
},
}
}
export function update_item(state, items_name, item) {
return {
...state,
[items_name]: {
...state[items_name],
[item.id]: {
...(state[items_name][item.id] || {}),
...item,
},
},
}
}
export function update_items(state, items_name, items) {
return items.reduce((state, item) => update_item(state, items_name, item), state)
}
export function remove_item(state, items_name, item_id) {
let items = {...state[items_name]}
if (items[item_id]) {
delete items[item_id]
}
return {
...state,
[items_name]: items,
}
}
export function filter_items(state, items_name, filter) {
return {
...state,
[items_name]: filter_hash(state[items_name], filter),
}
}
export function create_item(state, items_name, item) {
return store_items({...state, idGenerator: state.idGenerator - 1}, items_name, [item])
}
export function update_item_id(state, items_name, item, temp_id) {
return store_items(remove_item(state, items_name, temp_id), items_name, [{...state[items_name][temp_id], ...item}])
}
export function add_item_id(state, items_name, item_id) {
return update_item_id_in_set(state, items_name, item_id, true)
}
export function remove_item_id(state, items_name, item_id) {
return update_item_id_in_set(state, items_name, item_id, false)
}
export function toggle_item_id(state, items_name, item_id) {
return update_item_id_in_set(state, items_name, item_id, !state[items_name][item_id])
}
export function update_item_ids_in_set(state, items_name, item_ids, status) {
return {
...state,
[items_name]: {
...state[items_name],
...create_hash(item_ids, () => status),
},
}
}
export function update_item_id_in_set(state, items_name, item_id, status) {
return update_item_ids_in_set(state, items_name, [item_id], status)
}