export default function resultsState()

in app/addons/documents/index-results/reducers.js [83:234]


export default function resultsState(state = initialState, action) {
  switch (action.type) {

    case ActionTypes.INDEX_RESULTS_SET_STYLE:
      const newStyle = {
        ...state.resultsStyle,
        ...action.resultsStyle
      };
      storeStyle(newStyle);
      return {
        ...state,
        resultsStyle: newStyle
      };

    case ActionTypes.INDEX_RESULTS_REDUX_RESET_STATE:
      return {
        ...initialState,
        executionStats: state.executionStats,
        warning: state.warning,
        noResultsWarning: state.noResultsWarning,
        selectedLayout: state.selectedLayout,
        selectedDocs: [],
        fetchParams: {
          limit: getDefaultPerPage() + 1,
          skip: 0
        },
        pagination: Object.assign({}, initialState.pagination, {
          perPage: state.pagination.perPage
        }),
        queryOptionsPanel: Object.assign({}, initialState.queryOptionsPanel,
          state.queryOptionsPanel, {reduce: false, groupLevel: 'exact', showReduce: false}),
        isLoading: false,
        resultsStyle: state.resultsStyle
      };

    case ActionTypes.INDEX_RESULTS_REDUX_IS_LOADING:
      return {
        ...state,
        isLoading: true
      };

    case ActionTypes.INDEX_RESULTS_REDUX_PARTITION_PARAM_NOT_SUPPORTED:
      return Object.assign({}, state, {
        noResultsWarning: 'The selected index does not support partitions. Switch back to global mode.'
      });

    case ActionTypes.INDEX_RESULTS_REDUX_PARTITION_PARAM_MANDATORY:
      return Object.assign({}, state, {
        noResultsWarning: 'The selected index requires a partition key. Use the selector at the top to enter a partition key.'
      });

    case ActionTypes.INDEX_RESULTS_REDUX_NEW_SELECTED_DOCS:
      return {
        ...state,
        selectedDocs: action.selectedDocs
      };

    case ActionTypes.INDEX_RESULTS_REDUX_NEW_RESULTS:
      let selectedLayout = state.selectedLayout;
      // Change layout if it's set to METADATA because this option is not available for Mango queries
      if (action.docType === Constants.INDEX_RESULTS_DOC_TYPE.MANGO_QUERY) {
        if (state.selectedLayout === Constants.LAYOUT_ORIENTATION.METADATA) {
          selectedLayout = Constants.LAYOUT_ORIENTATION.TABLE;
        }
      }
      return {
        ...state,
        docs: action.docs,
        isLoading: false,
        noResultsWarning: '',
        isEditable: true, //TODO: determine logic for this
        fetchParams: Object.assign({}, state.fetchParams, action.params),
        pagination: Object.assign({}, state.pagination, {
          canShowNext: action.canShowNext
        }),
        docType: action.docType,
        selectedLayout: selectedLayout,
        executionStats: action.executionStats,
        warning: action.warning
      };

    case ActionTypes.INDEX_RESULTS_REDUX_CHANGE_LAYOUT:
      return {
        ...state,
        selectedLayout: action.layout
      };

    case ActionTypes.INDEX_RESULTS_REDUX_TOGGLE_SHOW_ALL_COLUMNS:
      return {
        ...state,
        tableView: Object.assign({}, state.tableView, {
          showAllFieldsTableView: !state.tableView.showAllFieldsTableView,
          cachedFieldsTableView: state.tableView.selectedFieldsTableView
        })
      };

    case ActionTypes.INDEX_RESULTS_REDUX_CHANGE_TABLE_HEADER_ATTRIBUTE:
      return {
        ...state,
        tableView: Object.assign({}, state.tableView, {
          selectedFieldsTableView: action.selectedFieldsTableView
        })
      };

    case ActionTypes.INDEX_RESULTS_REDUX_SET_PER_PAGE:
      app.utils.localStorageSet('fauxton:perpageredux', action.perPage);
      return {
        ...state,
        pagination: Object.assign({}, initialState.pagination, {
          perPage: action.perPage
        })
      };

    case ActionTypes.INDEX_RESULTS_REDUX_PAGINATE_NEXT:
      return {
        ...state,
        pagination: Object.assign({}, state.pagination, {
          pageStart: state.pagination.pageStart + state.pagination.perPage,
          currentPage: state.pagination.currentPage + 1
        })
      };

    case ActionTypes.INDEX_RESULTS_REDUX_PAGINATE_PREVIOUS:
      return {
        ...state,
        pagination: Object.assign({}, state.pagination, {
          pageStart: state.pagination.pageStart - state.pagination.perPage,
          currentPage: state.pagination.currentPage - 1
        })
      };

    case ActionTypes.INDEX_RESULTS_REDUX_NEW_QUERY_OPTIONS:
      // includeDocs or reduce should be mutually exclusive
      if (action.options.includeDocs && action.options.reduce) {
        // includeDocs has precedence if both are set at the same time
        action.options.reduce = false;
      } else if (action.options.includeDocs && state.queryOptionsPanel.reduce) {
        // Switch off reduce when includeDocs is being set to true
        action.options.reduce = false;
      } else if (action.options.reduce && state.queryOptionsPanel.includeDocs) {
        // Switch off includeDocs when reduce is being set to true
        action.options.includeDocs = false;
      }
      return {
        ...state,
        queryOptionsPanel: Object.assign({}, state.queryOptionsPanel, action.options)
      };

    default:
      return state;
  }
}