70 lines
2.0 KiB
TypeScript
70 lines
2.0 KiB
TypeScript
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<Datasource[]> = 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<CreateDatasourceConfig>,
|
|
) {
|
|
try {
|
|
const response: GenericApiResponse<Datasource> = 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),
|
|
]);
|
|
}
|