2019-11-25 05:07:27 +00:00
|
|
|
import { createReducer } from "utils/AppsmithUtils";
|
2020-01-27 13:53:33 +00:00
|
|
|
import {
|
|
|
|
|
ReduxActionTypes,
|
|
|
|
|
ReduxAction,
|
|
|
|
|
ReduxActionErrorTypes,
|
|
|
|
|
} from "constants/ReduxActionConstants";
|
2021-07-07 03:46:16 +00:00
|
|
|
import {
|
|
|
|
|
Datasource,
|
|
|
|
|
DatasourceStructure,
|
|
|
|
|
MockDatasource,
|
|
|
|
|
} from "entities/Datasource";
|
2019-10-22 14:59:58 +00:00
|
|
|
|
2019-11-07 09:32:38 +00:00
|
|
|
export interface DatasourceDataState {
|
|
|
|
|
list: Datasource[];
|
2019-10-22 14:59:58 +00:00
|
|
|
loading: boolean;
|
2020-04-28 06:52:53 +00:00
|
|
|
isTesting: boolean;
|
2020-04-29 10:03:56 +00:00
|
|
|
isDeleting: boolean;
|
2020-09-21 09:11:42 +00:00
|
|
|
fetchingDatasourceStructure: boolean;
|
2020-09-29 04:17:25 +00:00
|
|
|
isRefreshingStructure: boolean;
|
2020-09-21 09:11:42 +00:00
|
|
|
structure: Record<string, DatasourceStructure>;
|
2021-07-07 03:46:16 +00:00
|
|
|
isFetchingMockDataSource: false;
|
|
|
|
|
mockDatasourceList: any[];
|
2019-10-22 14:59:58 +00:00
|
|
|
}
|
|
|
|
|
|
2019-11-07 09:32:38 +00:00
|
|
|
const initialState: DatasourceDataState = {
|
2019-10-22 14:59:58 +00:00
|
|
|
list: [],
|
|
|
|
|
loading: false,
|
2020-04-28 06:52:53 +00:00
|
|
|
isTesting: false,
|
2020-04-29 10:03:56 +00:00
|
|
|
isDeleting: false,
|
2020-09-21 09:11:42 +00:00
|
|
|
fetchingDatasourceStructure: false,
|
2020-09-29 04:17:25 +00:00
|
|
|
isRefreshingStructure: false,
|
2020-09-21 09:11:42 +00:00
|
|
|
structure: {},
|
2021-07-07 03:46:16 +00:00
|
|
|
isFetchingMockDataSource: false,
|
|
|
|
|
mockDatasourceList: [],
|
2019-10-22 14:59:58 +00:00
|
|
|
};
|
|
|
|
|
|
2019-11-07 09:32:38 +00:00
|
|
|
const datasourceReducer = createReducer(initialState, {
|
2021-07-07 03:46:16 +00:00
|
|
|
[ReduxActionTypes.FETCH_MOCK_DATASOURCES_INIT]: (
|
|
|
|
|
state: DatasourceDataState,
|
|
|
|
|
) => {
|
|
|
|
|
return { ...state, isFetchingMockDataSource: true };
|
|
|
|
|
},
|
|
|
|
|
[ReduxActionTypes.FETCH_MOCK_DATASOURCES_SUCCESS]: (
|
|
|
|
|
state: DatasourceDataState,
|
|
|
|
|
action: ReduxAction<any>,
|
|
|
|
|
) => {
|
2021-07-08 05:59:11 +00:00
|
|
|
const mockDatasourceList = action.payload as MockDatasource[];
|
2021-07-07 03:46:16 +00:00
|
|
|
return { ...state, isFetchingMockDataSource: false, mockDatasourceList };
|
|
|
|
|
},
|
|
|
|
|
[ReduxActionErrorTypes.FETCH_MOCK_DATASOURCES_ERROR]: (
|
|
|
|
|
state: DatasourceDataState,
|
|
|
|
|
) => {
|
|
|
|
|
return { ...state, isFetchingMockDataSource: false };
|
|
|
|
|
},
|
|
|
|
|
[ReduxActionTypes.ADD_MOCK_DATASOURCES_INIT]: (
|
|
|
|
|
state: DatasourceDataState,
|
|
|
|
|
) => {
|
|
|
|
|
return { ...state, loading: true };
|
|
|
|
|
},
|
|
|
|
|
[ReduxActionTypes.ADD_MOCK_DATASOURCES_SUCCESS]: (
|
|
|
|
|
state: DatasourceDataState,
|
|
|
|
|
action: ReduxAction<Datasource>,
|
|
|
|
|
) => {
|
|
|
|
|
return {
|
|
|
|
|
...state,
|
|
|
|
|
loading: false,
|
|
|
|
|
list: state.list.concat(action.payload),
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
[ReduxActionErrorTypes.FETCH_MOCK_DATASOURCES_ERROR]: (
|
|
|
|
|
state: DatasourceDataState,
|
|
|
|
|
) => {
|
|
|
|
|
return { ...state, loading: false };
|
|
|
|
|
},
|
2019-11-07 09:32:38 +00:00
|
|
|
[ReduxActionTypes.FETCH_DATASOURCES_INIT]: (state: DatasourceDataState) => {
|
2019-10-22 14:59:58 +00:00
|
|
|
return { ...state, loading: true };
|
|
|
|
|
},
|
2019-11-07 09:32:38 +00:00
|
|
|
[ReduxActionTypes.CREATE_DATASOURCE_INIT]: (state: DatasourceDataState) => {
|
2019-10-22 14:59:58 +00:00
|
|
|
return { ...state, loading: true };
|
|
|
|
|
},
|
2020-05-07 04:44:52 +00:00
|
|
|
[ReduxActionTypes.CREATE_DATASOURCE_FROM_FORM_INIT]: (
|
|
|
|
|
state: DatasourceDataState,
|
|
|
|
|
) => {
|
|
|
|
|
return { ...state, loading: true };
|
|
|
|
|
},
|
2020-04-28 06:52:53 +00:00
|
|
|
[ReduxActionTypes.UPDATE_DATASOURCE_INIT]: (state: DatasourceDataState) => {
|
|
|
|
|
return { ...state, loading: true };
|
|
|
|
|
},
|
|
|
|
|
[ReduxActionTypes.TEST_DATASOURCE_INIT]: (state: DatasourceDataState) => {
|
|
|
|
|
return { ...state, isTesting: true };
|
|
|
|
|
},
|
2020-04-29 10:03:56 +00:00
|
|
|
[ReduxActionTypes.DELETE_DATASOURCE_INIT]: (state: DatasourceDataState) => {
|
|
|
|
|
return { ...state, isDeleting: true };
|
|
|
|
|
},
|
2020-09-29 04:17:25 +00:00
|
|
|
[ReduxActionTypes.REFRESH_DATASOURCE_STRUCTURE_INIT]: (
|
|
|
|
|
state: DatasourceDataState,
|
|
|
|
|
) => {
|
|
|
|
|
return { ...state, isRefreshingStructure: true };
|
|
|
|
|
},
|
2020-09-21 09:11:42 +00:00
|
|
|
[ReduxActionTypes.FETCH_DATASOURCE_STRUCTURE_INIT]: (
|
|
|
|
|
state: DatasourceDataState,
|
|
|
|
|
) => {
|
|
|
|
|
return { ...state, fetchingDatasourceStructure: true };
|
|
|
|
|
},
|
|
|
|
|
[ReduxActionTypes.FETCH_DATASOURCE_STRUCTURE_SUCCESS]: (
|
|
|
|
|
state: DatasourceDataState,
|
2020-09-29 04:17:25 +00:00
|
|
|
action: ReduxAction<{ data: DatasourceStructure; datasourceId: string }>,
|
2020-09-21 09:11:42 +00:00
|
|
|
) => {
|
|
|
|
|
return {
|
|
|
|
|
...state,
|
|
|
|
|
fetchingDatasourceStructure: false,
|
|
|
|
|
structure: {
|
|
|
|
|
...state.structure,
|
|
|
|
|
[action.payload.datasourceId]: action.payload.data,
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
},
|
2020-09-29 04:17:25 +00:00
|
|
|
[ReduxActionTypes.REFRESH_DATASOURCE_STRUCTURE_SUCCESS]: (
|
|
|
|
|
state: DatasourceDataState,
|
|
|
|
|
action: ReduxAction<{ data: DatasourceStructure; datasourceId: string }>,
|
|
|
|
|
) => {
|
|
|
|
|
return {
|
|
|
|
|
...state,
|
|
|
|
|
isRefreshingStructure: false,
|
|
|
|
|
structure: {
|
|
|
|
|
...state.structure,
|
|
|
|
|
[action.payload.datasourceId]: action.payload.data,
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
},
|
2020-09-21 09:11:42 +00:00
|
|
|
[ReduxActionErrorTypes.FETCH_DATASOURCE_STRUCTURE_ERROR]: (
|
|
|
|
|
state: DatasourceDataState,
|
|
|
|
|
) => {
|
|
|
|
|
return {
|
|
|
|
|
...state,
|
|
|
|
|
fetchingDatasourceStructure: false,
|
|
|
|
|
};
|
|
|
|
|
},
|
2019-11-07 09:32:38 +00:00
|
|
|
[ReduxActionTypes.FETCH_DATASOURCES_SUCCESS]: (
|
|
|
|
|
state: DatasourceDataState,
|
|
|
|
|
action: ReduxAction<Datasource[]>,
|
2019-10-22 14:59:58 +00:00
|
|
|
) => {
|
|
|
|
|
return {
|
|
|
|
|
...state,
|
|
|
|
|
loading: false,
|
2019-11-29 05:22:49 +00:00
|
|
|
list: action.payload,
|
2019-10-22 14:59:58 +00:00
|
|
|
};
|
|
|
|
|
},
|
2021-04-26 12:17:38 +00:00
|
|
|
[ReduxActionTypes.TEST_DATASOURCE_SUCCESS]: (
|
|
|
|
|
state: DatasourceDataState,
|
|
|
|
|
action: ReduxAction<{
|
|
|
|
|
show: boolean;
|
|
|
|
|
id?: string;
|
|
|
|
|
messages?: Array<string>;
|
|
|
|
|
error?: any;
|
|
|
|
|
}>,
|
|
|
|
|
): DatasourceDataState => {
|
|
|
|
|
if (action.payload.id) {
|
|
|
|
|
const list = state.list.map((datasource) => {
|
|
|
|
|
if (datasource.id === action.payload.id) {
|
|
|
|
|
return { ...datasource, messages: action.payload.messages };
|
|
|
|
|
}
|
|
|
|
|
return datasource;
|
|
|
|
|
});
|
|
|
|
|
return {
|
|
|
|
|
...state,
|
|
|
|
|
isTesting: false,
|
|
|
|
|
list: list,
|
|
|
|
|
};
|
|
|
|
|
}
|
2020-04-28 06:52:53 +00:00
|
|
|
return {
|
|
|
|
|
...state,
|
|
|
|
|
isTesting: false,
|
|
|
|
|
};
|
|
|
|
|
},
|
2020-04-29 10:03:56 +00:00
|
|
|
[ReduxActionTypes.DELETE_DATASOURCE_SUCCESS]: (
|
|
|
|
|
state: DatasourceDataState,
|
|
|
|
|
action: ReduxAction<Datasource>,
|
|
|
|
|
) => {
|
|
|
|
|
return {
|
|
|
|
|
...state,
|
|
|
|
|
isDeleting: false,
|
|
|
|
|
list: state.list.filter(
|
2020-12-24 04:32:25 +00:00
|
|
|
(datasource) => datasource.id !== action.payload.id,
|
2020-04-29 10:03:56 +00:00
|
|
|
),
|
|
|
|
|
};
|
|
|
|
|
},
|
2019-11-07 09:32:38 +00:00
|
|
|
[ReduxActionTypes.CREATE_DATASOURCE_SUCCESS]: (
|
|
|
|
|
state: DatasourceDataState,
|
|
|
|
|
action: ReduxAction<Datasource>,
|
2019-10-22 14:59:58 +00:00
|
|
|
) => {
|
|
|
|
|
return {
|
|
|
|
|
...state,
|
|
|
|
|
loading: false,
|
|
|
|
|
list: state.list.concat(action.payload),
|
|
|
|
|
};
|
|
|
|
|
},
|
2020-04-28 06:52:53 +00:00
|
|
|
[ReduxActionTypes.UPDATE_DATASOURCE_SUCCESS]: (
|
|
|
|
|
state: DatasourceDataState,
|
|
|
|
|
action: ReduxAction<Datasource>,
|
|
|
|
|
): DatasourceDataState => {
|
|
|
|
|
return {
|
|
|
|
|
...state,
|
|
|
|
|
loading: false,
|
2020-12-24 04:32:25 +00:00
|
|
|
list: state.list.map((datasource) => {
|
2020-04-28 06:52:53 +00:00
|
|
|
if (datasource.id === action.payload.id) return action.payload;
|
|
|
|
|
|
|
|
|
|
return datasource;
|
|
|
|
|
}),
|
|
|
|
|
};
|
|
|
|
|
},
|
2020-08-26 05:24:44 +00:00
|
|
|
[ReduxActionTypes.SAVE_DATASOURCE_NAME_SUCCESS]: (
|
|
|
|
|
state: DatasourceDataState,
|
|
|
|
|
action: ReduxAction<Datasource>,
|
|
|
|
|
): DatasourceDataState => {
|
|
|
|
|
return {
|
|
|
|
|
...state,
|
|
|
|
|
loading: false,
|
2020-12-24 04:32:25 +00:00
|
|
|
list: state.list.map((datasource) => {
|
2020-08-26 05:24:44 +00:00
|
|
|
if (datasource.id === action.payload.id) return action.payload;
|
|
|
|
|
|
|
|
|
|
return datasource;
|
|
|
|
|
}),
|
|
|
|
|
};
|
|
|
|
|
},
|
2020-01-27 13:53:33 +00:00
|
|
|
[ReduxActionErrorTypes.CREATE_DATASOURCE_ERROR]: (
|
|
|
|
|
state: DatasourceDataState,
|
|
|
|
|
) => {
|
|
|
|
|
return {
|
|
|
|
|
...state,
|
|
|
|
|
loading: false,
|
|
|
|
|
};
|
|
|
|
|
},
|
2020-04-29 10:03:56 +00:00
|
|
|
[ReduxActionErrorTypes.DELETE_DATASOURCE_ERROR]: (
|
|
|
|
|
state: DatasourceDataState,
|
|
|
|
|
) => {
|
|
|
|
|
return { ...state, isDeleting: false };
|
|
|
|
|
},
|
2020-04-28 06:52:53 +00:00
|
|
|
[ReduxActionErrorTypes.TEST_DATASOURCE_ERROR]: (
|
|
|
|
|
state: DatasourceDataState,
|
2021-04-26 12:17:38 +00:00
|
|
|
action: ReduxAction<{
|
|
|
|
|
show: boolean;
|
|
|
|
|
id?: string;
|
|
|
|
|
messages?: Array<string>;
|
|
|
|
|
error?: any;
|
|
|
|
|
}>,
|
|
|
|
|
): DatasourceDataState => {
|
|
|
|
|
if (action.payload.id) {
|
|
|
|
|
const list = state.list.map((datasource) => {
|
|
|
|
|
if (datasource.id === action.payload.id) {
|
|
|
|
|
return { ...datasource, messages: action.payload.messages };
|
|
|
|
|
}
|
|
|
|
|
return datasource;
|
|
|
|
|
});
|
|
|
|
|
return {
|
|
|
|
|
...state,
|
|
|
|
|
isTesting: false,
|
|
|
|
|
list: list,
|
|
|
|
|
};
|
|
|
|
|
}
|
2020-04-28 06:52:53 +00:00
|
|
|
return {
|
|
|
|
|
...state,
|
|
|
|
|
isTesting: false,
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
[ReduxActionErrorTypes.UPDATE_DATASOURCE_ERROR]: (
|
|
|
|
|
state: DatasourceDataState,
|
|
|
|
|
): DatasourceDataState => {
|
|
|
|
|
return {
|
|
|
|
|
...state,
|
|
|
|
|
loading: false,
|
|
|
|
|
};
|
|
|
|
|
},
|
2020-09-29 04:17:25 +00:00
|
|
|
[ReduxActionErrorTypes.REFRESH_DATASOURCE_STRUCTURE_ERROR]: (
|
|
|
|
|
state: DatasourceDataState,
|
|
|
|
|
) => {
|
|
|
|
|
return {
|
|
|
|
|
...state,
|
|
|
|
|
isRefreshingStructure: false,
|
|
|
|
|
};
|
|
|
|
|
},
|
2019-10-22 14:59:58 +00:00
|
|
|
});
|
|
|
|
|
|
2019-11-07 09:32:38 +00:00
|
|
|
export default datasourceReducer;
|