mirror of
https://github.com/apache/superset.git
synced 2026-04-16 22:55:52 +00:00
81 lines
2.8 KiB
JavaScript
81 lines
2.8 KiB
JavaScript
/* eslint camelcase: 0 */
|
|
import { getControlsState, getFormDataFromControls } from '../stores/store';
|
|
import * as actions from '../actions/exploreActions';
|
|
|
|
export default function exploreReducer(state = {}, action) {
|
|
const actionHandlers = {
|
|
[actions.TOGGLE_FAVE_STAR]() {
|
|
return Object.assign({}, state, { isStarred: action.isStarred });
|
|
},
|
|
[actions.FETCH_DATASOURCE_STARTED]() {
|
|
return Object.assign({}, state, { isDatasourceMetaLoading: true });
|
|
},
|
|
[actions.FETCH_DATASOURCE_SUCCEEDED]() {
|
|
return Object.assign({}, state, { isDatasourceMetaLoading: false });
|
|
},
|
|
[actions.FETCH_DATASOURCE_FAILED]() {
|
|
// todo(alanna) handle failure/error state
|
|
return Object.assign({}, state,
|
|
{
|
|
isDatasourceMetaLoading: false,
|
|
controlPanelAlert: action.error,
|
|
});
|
|
},
|
|
[actions.SET_DATASOURCE]() {
|
|
return Object.assign({}, state, { datasource: action.datasource });
|
|
},
|
|
[actions.FETCH_DATASOURCES_STARTED]() {
|
|
return Object.assign({}, state, { isDatasourcesLoading: true });
|
|
},
|
|
[actions.FETCH_DATASOURCES_SUCCEEDED]() {
|
|
return Object.assign({}, state, { isDatasourcesLoading: false });
|
|
},
|
|
[actions.FETCH_DATASOURCES_FAILED]() {
|
|
// todo(alanna) handle failure/error state
|
|
return Object.assign({}, state,
|
|
{
|
|
isDatasourcesLoading: false,
|
|
controlPanelAlert: action.error,
|
|
});
|
|
},
|
|
[actions.SET_DATASOURCES]() {
|
|
return Object.assign({}, state, { datasources: action.datasources });
|
|
},
|
|
[actions.REMOVE_CONTROL_PANEL_ALERT]() {
|
|
return Object.assign({}, state, { controlPanelAlert: null });
|
|
},
|
|
[actions.SET_FIELD_VALUE]() {
|
|
const controls = Object.assign({}, state.controls);
|
|
const control = Object.assign({}, controls[action.controlName]);
|
|
control.value = action.value;
|
|
control.validationErrors = action.validationErrors;
|
|
controls[action.controlName] = control;
|
|
const changes = { controls };
|
|
if (control.renderTrigger) {
|
|
changes.triggerRender = true;
|
|
}
|
|
return Object.assign({}, state, changes);
|
|
},
|
|
[actions.TRIGGER_QUERY]() {
|
|
return Object.assign({}, state, {
|
|
triggerQuery: action.value,
|
|
});
|
|
},
|
|
[actions.UPDATE_CHART_TITLE]() {
|
|
const updatedSlice = Object.assign({}, state.slice, { slice_name: action.slice_name });
|
|
return Object.assign({}, state, { slice: updatedSlice });
|
|
},
|
|
[actions.RESET_FIELDS]() {
|
|
const controls = getControlsState(state, getFormDataFromControls(state.controls));
|
|
return Object.assign({}, state, { controls });
|
|
},
|
|
[actions.RENDER_TRIGGERED]() {
|
|
return Object.assign({}, state, { triggerRender: false });
|
|
},
|
|
};
|
|
if (action.type in actionHandlers) {
|
|
return actionHandlers[action.type]();
|
|
}
|
|
return state;
|
|
}
|