PromucFlow_constructor/app/client/src/sagas/DatasourcesSagas.ts

70 lines
2.0 KiB
TypeScript
Raw Normal View History

2019-11-07 09:32:38 +00:00
import { all, put, takeEvery } from "redux-saga/effects";
import { change } from "redux-form";
import {
ReduxAction,
ReduxActionErrorTypes,
ReduxActionTypes,
2019-11-25 05:07:27 +00:00
} from "constants/ReduxActionConstants";
import { GenericApiResponse } from "api/ApiResponses";
2019-11-07 09:32:38 +00:00
import DatasourcesApi, {
CreateDatasourceConfig,
Datasource,
2019-11-25 05:07:27 +00:00
} from "api/DatasourcesApi";
import { API_EDITOR_FORM_NAME } from "constants/forms";
2019-11-13 07:34:59 +00:00
import { validateResponse } from "./ErrorSagas";
2020-03-06 04:59:24 +00:00
import AnalyticsUtil from "utils/AnalyticsUtil";
2019-11-07 09:32:38 +00:00
function* fetchDatasourcesSaga() {
2019-11-13 07:34:59 +00:00
try {
const response: GenericApiResponse<Datasource[]> = yield DatasourcesApi.fetchDatasources();
2019-11-13 07:34:59 +00:00
const isValidResponse = yield validateResponse(response);
if (isValidResponse) {
yield put({
type: ReduxActionTypes.FETCH_DATASOURCES_SUCCESS,
payload: response.data,
});
}
} catch (error) {
2019-11-07 09:32:38 +00:00
yield put({
type: ReduxActionErrorTypes.FETCH_DATASOURCES_ERROR,
2019-11-13 07:34:59 +00:00
payload: { error },
2019-11-07 09:32:38 +00:00
});
}
}
function* createDatasourceSaga(
actionPayload: ReduxAction<CreateDatasourceConfig>,
) {
2019-11-13 07:34:59 +00:00
try {
const response: GenericApiResponse<Datasource> = yield DatasourcesApi.createDatasource(
actionPayload.payload,
);
2020-01-27 13:53:33 +00:00
const isValidResponse = yield validateResponse(response);
if (isValidResponse) {
2020-03-06 04:59:24 +00:00
AnalyticsUtil.logEvent("SAVE_DATA_SOURCE", {
dataSourceName: actionPayload.payload.name,
appName: actionPayload.payload.appName,
});
2019-11-13 07:34:59 +00:00
yield put({
type: ReduxActionTypes.CREATE_DATASOURCE_SUCCESS,
payload: response.data,
});
yield put(
change(API_EDITOR_FORM_NAME, "datasource.id", response.data.id),
);
}
} catch (error) {
2019-11-07 09:32:38 +00:00
yield put({
2020-01-27 13:53:33 +00:00
type: ReduxActionErrorTypes.CREATE_DATASOURCE_ERROR,
2019-11-13 07:34:59 +00:00
payload: { error },
2019-11-07 09:32:38 +00:00
});
}
}
export function* watchDatasourcesSagas() {
yield all([
takeEvery(ReduxActionTypes.FETCH_DATASOURCES_INIT, fetchDatasourcesSaga),
takeEvery(ReduxActionTypes.CREATE_DATASOURCE_INIT, createDatasourceSaga),
]);
}