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;
}
}