instantjob-recruiter-client
Version:
a set of tools for creating an instantjob recruiter react client
61 lines (55 loc) • 2.5 kB
JSX
import store from 'common/store'
import request from 'common/request'
import {array_contains, property_getter, array_from_hash} from 'common/utilities'
import {is_valid_email} from 'common/users'
import {update_recruiter, store_teams, store_recruiters} from 'actions/recruiters'
import {update_profile} from 'actions/profile'
import {show_popover, dismiss_popover, alert_success, alert_warning, alert_failure} from 'actions/display'
import NewRecruiter from 'components/popovers/new_recruiter'
export function recruiter_full_name({first_name, last_name, email}) {
first_name = first_name ? first_name.trim() : ""
last_name = last_name ? last_name.trim() : ""
return `${first_name} ${last_name}`.trim() || email
}
export function action_update_recruiter(recruiter) {
store.dispatch(update_recruiter(recruiter))
request.delayed_put(`recruiters/${recruiter.id}`, {recruiter})
}
export function action_create_team(name) {
const {profile: {agency: {id}}} = store.getState()
return request.post(`agencies/${id}/teams`, {team: {name}})
.then((team) => {
store.dispatch(store_teams([team]))
return team.id
})
}
export function action_invite_recruiter() {
store.dispatch(show_popover(
NewRecruiter,
{invite_recruiter(recruiter) {
const email = recruiter.email
if (!email) {
store.dispatch(alert_failure("Veuillez renseigner une adresse mail."))
} else if (array_contains(array_from_hash(store.getState().recruiters.recruiters).map(property_getter('email')), email)) {
store.dispatch(alert_failure("Vous avez déjà invité ce recruteur."))
} else if (!is_valid_email(email)) {
store.dispatch(alert_failure("Ce n'est pas une adresse mail valide."))
} else {
request.post('recruiters', {recruiter})
.then((recruiter) => {
store.dispatch(alert_success(`Nous avons envoyé un mail d'invitation à ${recruiter_full_name(recruiter)}`))
store.dispatch(store_recruiters([recruiter]))
}, () => {
store.dispatch(alert_warning(`Ce recruteur fait déjà partie d'une autre agence, par conséquent nous n'avons pas envoyé de mail à ${recruiter_full_name(recruiter)}.`))
})
store.dispatch(dismiss_popover())
}
}},
'Ajouter un collaborateur'
))
}
export function action_update_profile(profile) {
store.dispatch(update_profile(profile))
const {id} = store.getState().profile
return request.put(`recruiters/${id}`, {recruiter: profile})
}