import { createReducer } from "utils/AppsmithUtils"; import { ReduxActionTypes, ReduxAction, ReduxActionErrorTypes, } from "constants/ReduxActionConstants"; import { Datasource } from "api/DatasourcesApi"; export interface DatasourceDataState { list: Datasource[]; loading: boolean; isTesting: boolean; isDeleting: boolean; } const initialState: DatasourceDataState = { list: [], loading: false, isTesting: false, isDeleting: false, }; const datasourceReducer = createReducer(initialState, { [ReduxActionTypes.FETCH_DATASOURCES_INIT]: (state: DatasourceDataState) => { return { ...state, loading: true }; }, [ReduxActionTypes.CREATE_DATASOURCE_INIT]: (state: DatasourceDataState) => { return { ...state, loading: true }; }, [ReduxActionTypes.CREATE_DATASOURCE_FROM_FORM_INIT]: ( state: DatasourceDataState, ) => { return { ...state, loading: true }; }, [ReduxActionTypes.UPDATE_DATASOURCE_INIT]: (state: DatasourceDataState) => { return { ...state, loading: true }; }, [ReduxActionTypes.TEST_DATASOURCE_INIT]: (state: DatasourceDataState) => { return { ...state, isTesting: true }; }, [ReduxActionTypes.DELETE_DATASOURCE_INIT]: (state: DatasourceDataState) => { return { ...state, isDeleting: true }; }, [ReduxActionTypes.FETCH_DATASOURCES_SUCCESS]: ( state: DatasourceDataState, action: ReduxAction, ) => { return { ...state, loading: false, list: action.payload, }; }, [ReduxActionTypes.TEST_DATASOURCE_SUCCESS]: (state: DatasourceDataState) => { return { ...state, isTesting: false, }; }, [ReduxActionTypes.DELETE_DATASOURCE_SUCCESS]: ( state: DatasourceDataState, action: ReduxAction, ) => { return { ...state, isDeleting: false, list: state.list.filter( datasource => datasource.id !== action.payload.id, ), }; }, [ReduxActionTypes.CREATE_DATASOURCE_SUCCESS]: ( state: DatasourceDataState, action: ReduxAction, ) => { return { ...state, loading: false, list: state.list.concat(action.payload), }; }, [ReduxActionTypes.UPDATE_DATASOURCE_SUCCESS]: ( state: DatasourceDataState, action: ReduxAction, ): DatasourceDataState => { return { ...state, loading: false, list: state.list.map(datasource => { if (datasource.id === action.payload.id) return action.payload; return datasource; }), }; }, [ReduxActionTypes.SAVE_DATASOURCE_NAME_SUCCESS]: ( state: DatasourceDataState, action: ReduxAction, ): DatasourceDataState => { return { ...state, loading: false, list: state.list.map(datasource => { if (datasource.id === action.payload.id) return action.payload; return datasource; }), }; }, [ReduxActionErrorTypes.CREATE_DATASOURCE_ERROR]: ( state: DatasourceDataState, ) => { return { ...state, loading: false, }; }, [ReduxActionErrorTypes.DELETE_DATASOURCE_ERROR]: ( state: DatasourceDataState, ) => { return { ...state, isDeleting: false }; }, [ReduxActionErrorTypes.TEST_DATASOURCE_ERROR]: ( state: DatasourceDataState, ) => { return { ...state, isTesting: false, }; }, [ReduxActionErrorTypes.UPDATE_DATASOURCE_ERROR]: ( state: DatasourceDataState, ): DatasourceDataState => { return { ...state, loading: false, }; }, }); export default datasourceReducer;