import { all, put, takeEvery } from "redux-saga/effects"; import { change } from "redux-form"; import { ReduxAction, ReduxActionErrorTypes, ReduxActionTypes, } from "constants/ReduxActionConstants"; import { GenericApiResponse } from "api/ApiResponses"; import DatasourcesApi, { CreateDatasourceConfig, Datasource, } from "api/DatasourcesApi"; import { API_EDITOR_FORM_NAME } from "constants/forms"; import { validateResponse } from "./ErrorSagas"; import AnalyticsUtil from "utils/AnalyticsUtil"; function* fetchDatasourcesSaga() { try { const response: GenericApiResponse = yield DatasourcesApi.fetchDatasources(); const isValidResponse = yield validateResponse(response); if (isValidResponse) { yield put({ type: ReduxActionTypes.FETCH_DATASOURCES_SUCCESS, payload: response.data, }); } } catch (error) { yield put({ type: ReduxActionErrorTypes.FETCH_DATASOURCES_ERROR, payload: { error }, }); } } function* createDatasourceSaga( actionPayload: ReduxAction, ) { try { const response: GenericApiResponse = yield DatasourcesApi.createDatasource( actionPayload.payload, ); const isValidResponse = yield validateResponse(response); if (isValidResponse) { AnalyticsUtil.logEvent("SAVE_DATA_SOURCE", { dataSourceName: actionPayload.payload.name, appName: actionPayload.payload.appName, }); yield put({ type: ReduxActionTypes.CREATE_DATASOURCE_SUCCESS, payload: response.data, }); yield put( change(API_EDITOR_FORM_NAME, "datasource.id", response.data.id), ); } } catch (error) { yield put({ type: ReduxActionErrorTypes.CREATE_DATASOURCE_ERROR, payload: { error }, }); } } export function* watchDatasourcesSagas() { yield all([ takeEvery(ReduxActionTypes.FETCH_DATASOURCES_INIT, fetchDatasourcesSaga), takeEvery(ReduxActionTypes.CREATE_DATASOURCE_INIT, createDatasourceSaga), ]); }