theforeman/foreman

View on GitHub
webpack/assets/javascripts/react_app/components/Editor/EditorReducer.js

Summary

Maintainability
D
1 day
Test Coverage
import Immutable from 'seamless-immutable';

import {
  EDITOR_CHANGE_DIFF_VIEW,
  EDITOR_CHANGE_SETTING,
  EDITOR_CHANGE_TAB,
  EDITOR_CHANGE_VALUE,
  EDITOR_DISMISS_ERROR,
  EDITOR_SHOW_ERROR,
  EDITOR_EXEC_PREVIEW,
  EDITOR_SHOW_LOADING,
  EDITOR_HIDE_LOADING,
  EDITOR_IMPORT_FILE,
  EDITOR_INITIALIZE,
  EDITOR_MODAL_TOGGLE,
  EDITOR_REVERT_CHANGES,
  EDITOR_TOGGLE_MASK,
  EDITOR_TOGGLE_RENDER_VIEW,
  EDITOR_HOST_SELECT_CLEAR,
  EDITOR_HOST_SELECT_TOGGLE,
  EDITOR_FETCH_HOST_PENDING,
  EDITOR_HOST_SELECT_RESET,
  EDITOR_FETCH_HOST_RESOLVED,
  EDITOR_HOST_INITIAL_FETCH,
  EDITOR_HOST_ARR,
  EDITOR_HOST_FILTERED_ARR,
  EDITOR_CHANGE_KIND,
} from './EditorConstants';

const initialState = Immutable({
  [EDITOR_HOST_ARR]: [],
  [EDITOR_HOST_FILTERED_ARR]: [],
  diffViewType: 'split',
  editorName: 'editor',
  errorText: '',
  isFetchingHosts: false,
  isLoading: false,
  isMasked: false,
  isMaximized: false,
  isRendering: false,
  isSearchingHosts: false,
  isSelectOpen: false,
  keyBinding: 'Default',
  mode: 'Ruby',
  previewResult: '',
  renderedEditorValue: '',
  readOnly: false,
  searchQuery: '',
  selectedHost: {
    id: '',
    name: '',
  },
  selectedView: 'input',
  showError: false,
  templateClass: '',
  theme: 'Monokai',
  autocompletion: true,
  liveAutocompletion: false,
  value: '',
  kind: '',
});

export default (state = initialState, action) => {
  const { payload } = action;

  switch (action.type) {
    case EDITOR_INITIALIZE: {
      return state.merge(payload);
    }

    case EDITOR_REVERT_CHANGES: {
      return state.merge(payload);
    }

    case EDITOR_IMPORT_FILE: {
      return state.set('value', payload.value);
    }

    case EDITOR_EXEC_PREVIEW: {
      return state.merge(payload);
    }

    case EDITOR_HOST_SELECT_CLEAR: {
      return state.set('searchQuery', '').set('isSearchingHosts', false);
    }

    case EDITOR_MODAL_TOGGLE: {
      return state.set('isMaximized', !state.isMaximized);
    }

    case EDITOR_CHANGE_DIFF_VIEW: {
      return state.set('diffViewType', payload);
    }

    case EDITOR_CHANGE_VALUE: {
      return state.set('value', payload);
    }

    case EDITOR_SHOW_ERROR: {
      return state.merge(payload);
    }

    case EDITOR_DISMISS_ERROR: {
      return state.merge(payload);
    }

    case EDITOR_CHANGE_TAB: {
      return state.set('selectedView', payload);
    }

    case EDITOR_CHANGE_SETTING: {
      return state.merge(payload);
    }

    case EDITOR_TOGGLE_MASK: {
      return state.set('isMasked', !state.isMasked);
    }

    case EDITOR_TOGGLE_RENDER_VIEW: {
      return state.set('isRendering', !state.isRendering);
    }

    case EDITOR_SHOW_LOADING: {
      return state.set('isLoading', true);
    }

    case EDITOR_HIDE_LOADING: {
      return state.set('isLoading', false);
    }

    case EDITOR_FETCH_HOST_PENDING: {
      return state.merge(payload);
    }

    case EDITOR_FETCH_HOST_RESOLVED: {
      return state.set('isFetchingHosts', false).merge(payload);
    }

    case EDITOR_HOST_INITIAL_FETCH: {
      return state.set('hosts', payload);
    }

    case EDITOR_HOST_SELECT_TOGGLE: {
      return state
        .set('isSelectOpen', !state.isSelectOpen)
        .set('searchQuery', '');
    }

    case EDITOR_HOST_SELECT_RESET: {
      return state
        .set('searchQuery', '')
        .set('isFetchingHosts', false)
        .set('isSearchingHosts', false);
    }

    case EDITOR_CHANGE_KIND: {
      return state.set('templateKindId', payload);
    }

    default:
      return state;
  }
};