100 lines
2.8 KiB
TypeScript
100 lines
2.8 KiB
TypeScript
import { all, call, put, takeLatest } from "redux-saga/effects";
|
|
import {
|
|
ReduxActionTypes,
|
|
ReduxActionErrorTypes,
|
|
} from "constants/ReduxActionConstants";
|
|
import { WidgetType } from "constants/WidgetConstants";
|
|
import { PropertyConfig } from "reducers/entityReducers/propertyPaneConfigReducer";
|
|
import { generateReactKey } from "utils/generators";
|
|
import ConfigsApi, { PropertyPaneConfigsResponse } from "api/ConfigsApi";
|
|
import LOCAL_CONFIG from "mockResponses/PropertyPaneConfigResponse";
|
|
|
|
import { validateResponse } from "./ErrorSagas";
|
|
|
|
const generateConfigWithIds = (config: PropertyConfig) => {
|
|
const addObjectId = (obj: any) => {
|
|
obj.id = generateReactKey();
|
|
if (obj.hasOwnProperty("children")) {
|
|
obj.children = obj.children.map(addObjectId);
|
|
}
|
|
return obj;
|
|
};
|
|
Object.keys(config).forEach((widgetType: string) => {
|
|
config[widgetType as WidgetType] = config[widgetType as WidgetType].map(
|
|
addObjectId,
|
|
);
|
|
});
|
|
return config;
|
|
};
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
function* getLocalPropertyPaneConfigSaga() {
|
|
// FOR DEV WORK ONLY
|
|
try {
|
|
const localConfig = LOCAL_CONFIG;
|
|
const config = generateConfigWithIds(localConfig.config);
|
|
yield put({
|
|
type: ReduxActionTypes.FETCH_PROPERTY_PANE_CONFIGS_SUCCESS,
|
|
payload: {
|
|
config,
|
|
},
|
|
});
|
|
} catch (error) {
|
|
yield put({
|
|
type: ReduxActionErrorTypes.FETCH_PROPERTY_PANE_CONFIGS_ERROR,
|
|
payload: {
|
|
error,
|
|
},
|
|
});
|
|
}
|
|
}
|
|
|
|
export function* fetchPropertyPaneConfigsSaga() {
|
|
try {
|
|
const response: PropertyPaneConfigsResponse = yield call(
|
|
ConfigsApi.fetchPropertyPane,
|
|
);
|
|
const isValidResponse = yield validateResponse(response);
|
|
if (isValidResponse) {
|
|
const config = generateConfigWithIds(response.data.config);
|
|
yield put({
|
|
type: ReduxActionTypes.FETCH_PROPERTY_PANE_CONFIGS_SUCCESS,
|
|
payload: {
|
|
config,
|
|
},
|
|
});
|
|
}
|
|
} catch (error) {
|
|
yield put({
|
|
type: ReduxActionErrorTypes.FETCH_PROPERTY_PANE_CONFIGS_ERROR,
|
|
payload: {
|
|
error,
|
|
},
|
|
});
|
|
}
|
|
}
|
|
|
|
export function* configsSaga() {
|
|
try {
|
|
const sagasToCall = [];
|
|
// Uncomment bellow to use local config instead
|
|
// sagasToCall.push(call(getLocalPropertyPaneConfigSaga));
|
|
sagasToCall.push(call(fetchPropertyPaneConfigsSaga));
|
|
|
|
// sagasToCall.push(call(fetchWidgetCardsConfigsSaga, widgetCardsPaneId));
|
|
// sagasToCall.push(call(fetchWidgetConfigsSaga, widgetConfigsId));
|
|
yield all(sagasToCall);
|
|
} catch (error) {
|
|
yield put({
|
|
type: ReduxActionErrorTypes.FETCH_CONFIGS_ERROR,
|
|
payload: {
|
|
error,
|
|
},
|
|
});
|
|
}
|
|
}
|
|
|
|
export default function* configsSagas() {
|
|
yield takeLatest(ReduxActionTypes.FETCH_CONFIGS_INIT, configsSaga);
|
|
}
|