Skip to content
Snippets Groups Projects
editors.js 2.11 KiB
Newer Older
import { get } from 'lodash'
import {
  get as apiGet,
  create,
  remove,
  update,
} from 'pubsweet-client/src/helpers/api'
const EDITORS_REQUEST = 'EDITORS_REQUEST'
const EDITORS_DONE = 'EDITORS_DONE'
const SET_HANDLING_EDITORS = 'SET_HANDLING_EDITORS'

const setHandlingEditors = editors => ({
  type: SET_HANDLING_EDITORS,
export const selectFetching = state => get(state, 'editors.isFetching')
export const selectHandlingEditors = state => get(state, 'editors.editors')

const editorsRequest = () => ({ type: EDITORS_REQUEST })
const editorsDone = () => ({ type: EDITORS_DONE })

export const getHandlingEditors = () => dispatch =>
  apiGet(`/users?handlingEditor=true`).then(res =>
    dispatch(setHandlingEditors(res.users)),
  )
export const assignHandlingEditor = (email, collectionId) => dispatch => {
  dispatch(editorsRequest())
  return create(`/collections/${collectionId}/invitations`, {
    email,
    role: 'handlingEditor',
  }).then(
    res => {
      dispatch(editorsDone())
      return res
    },
    err => {
      dispatch(editorsDone())
export const revokeHandlingEditor = (
  invitationId,
  collectionId,
) => dispatch => {
  dispatch(editorsRequest())
  return remove(
    `/collections/${collectionId}/invitations/${invitationId}`,
  ).then(
    res => {
      dispatch(editorsDone())
      return res
    },
    err => {
      dispatch(editorsDone())
Alexandru Munteanu's avatar
Alexandru Munteanu committed
export const handlingEditorDecision = (
  invitationId,
  collectionId,
  isAccepted,
  reason,
) =>
  update(`/collections/${collectionId}/invitations/${invitationId}`, {
    isAccepted,
const initialState = {
  isFetching: false,
  editors: [],
}

export default (state = initialState, action = {}) => {
  switch (action.type) {
    case EDITORS_REQUEST:
      return {
        ...state,
        isFetching: true,
      }
    case EDITORS_DONE:
      return {
        ...state,
        isFetching: false,
      }
    case SET_HANDLING_EDITORS:
      return {
        ...state,
        editors: action.payload.editors,
      }