vj4/ui/components/scratchpad/reducers/ui.js

Summary

Maintainability
B
4 hrs
Test Coverage
import Notification from 'vj/components/notification';

export default function reducer(state = {
  main: {
    size: '50%',
  },
  pretest: {
    visible: false,
    size: 200,
  },
  records: {
    visible: true,
    size: 200,
    isLoading: false,
  },
  isPosting: false,
}, action) {
  switch (action.type) {
  case 'SCRATCHPAD_UI_CHANGE_SIZE': {
    const { uiElement, size } = action.payload;
    return {
      ...state,
      [uiElement]: {
        ...state[uiElement],
        size,
      },
    };
  }
  case 'SCRATCHPAD_UI_SET_VISIBILITY': {
    const { uiElement, visibility } = action.payload;
    return {
      ...state,
      [uiElement]: {
        ...state[uiElement],
        visible: visibility,
      },
    };
  }
  case 'SCRATCHPAD_UI_TOGGLE_VISIBILITY': {
    const { uiElement } = action.payload;
    return {
      ...state,
      [uiElement]: {
        ...state[uiElement],
        visible: !state[uiElement].visible,
      },
    };
  }
  case 'SCRATCHPAD_POST_PRETEST_PENDING':
  case 'SCRATCHPAD_POST_SUBMIT_PENDING': {
    return {
      ...state,
      isPosting: true,
    };
  }
  case 'SCRATCHPAD_POST_PRETEST_FULFILLED':
  case 'SCRATCHPAD_POST_SUBMIT_FULFILLED': {
    return {
      ...state,
      isPosting: false,
    };
  }
  case 'SCRATCHPAD_POST_PRETEST_REJECTED':
  case 'SCRATCHPAD_POST_SUBMIT_REJECTED': {
    Notification.error(action.payload.message);
    return {
      ...state,
      isPosting: false,
    };
  }
  case 'SCRATCHPAD_RECORDS_LOAD_SUBMISSIONS_PENDING': {
    return {
      ...state,
      records: {
        ...state.records,
        isLoading: true,
      },
    };
  }
  case 'SCRATCHPAD_RECORDS_LOAD_SUBMISSIONS_REJECTED': {
    Notification.error(action.payload.message);
    return {
      ...state,
      records: {
        ...state.records,
        isLoading: false,
      },
    };
  }
  case 'SCRATCHPAD_RECORDS_LOAD_SUBMISSIONS_FULFILLED': {
    return {
      ...state,
      records: {
        ...state.records,
        isLoading: false,
      },
    };
  }
  default:
    return state;
  }
}