123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- /*
- * <<
- * Davinci
- * ==
- * Copyright (C) 2016 - 2017 EDP
- * ==
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * >>
- */
- import { call, put, all, takeLatest, takeEvery } from 'redux-saga/effects'
- import { ActionTypes } from './constants'
- import omit from 'lodash/omit'
- import { WidgetActions, WidgetActionType } from './actions'
- import { IWidgetRaw, IWidgetFormed } from './types'
- import request from 'utils/request'
- import api from 'utils/api'
- import { errorHandler } from 'utils/util'
- import { widgetConfigMigrationRecorder } from 'app/utils/migrationRecorders'
- export function* getWidgets(action: WidgetActionType) {
- if (action.type !== ActionTypes.LOAD_WIDGETS) {
- return
- }
- const { projectId } = action.payload
- try {
- const result = yield call(request, `${api.widget}?projectId=${projectId}`)
- const formedWidgets: IWidgetFormed[] = result.payload.map(
- (widget: IWidgetRaw) => {
- const parsedConfig = JSON.parse(widget.config)
- return {
- ...widget,
- config: widgetConfigMigrationRecorder(parsedConfig, {
- viewId: widget.viewId
- })
- }
- }
- )
- yield put(WidgetActions.widgetsLoaded(formedWidgets))
- } catch (err) {
- yield put(WidgetActions.widgetsLoadedFail())
- errorHandler(err)
- }
- }
- export function* addWidget(action: WidgetActionType) {
- if (action.type !== ActionTypes.ADD_WIDGET) {
- return
- }
- const { widget, resolve } = action.payload
- try {
- const result = yield call(request, {
- method: 'post',
- url: api.widget,
- data: widget
- })
- const addedWidget: IWidgetRaw = result.payload
- const formdWidget: IWidgetFormed = {
- ...addedWidget,
- config: JSON.parse(addedWidget.config)
- }
- yield put(WidgetActions.widgetAdded(formdWidget))
- resolve()
- } catch (err) {
- yield put(WidgetActions.addWidgetFail())
- errorHandler(err)
- }
- }
- export function* deleteWidget(action: WidgetActionType) {
- if (action.type !== ActionTypes.DELETE_WIDGET) {
- return
- }
- const { id } = action.payload
- try {
- yield call(request, {
- method: 'delete',
- url: `${api.widget}/${id}`
- })
- yield put(WidgetActions.widgetDeleted(id))
- } catch (err) {
- yield put(WidgetActions.deleteWidgetFail())
- errorHandler(err)
- }
- }
- export function* getWidgetDetail(action: WidgetActionType) {
- if (action.type !== ActionTypes.LOAD_WIDGET_DETAIL) {
- return
- }
- const { id } = action.payload
- try {
- const widgetResult = yield call(request, `${api.widget}/${id}`)
- const widget: IWidgetRaw = widgetResult.payload
- const parsedConfig = JSON.parse(widget.config)
- const formedWidget: IWidgetFormed = {
- ...widget,
- config: widgetConfigMigrationRecorder(parsedConfig, {
- viewId: widget.viewId
- })
- }
- const viewResult = yield call(request, `${api.view}/${widget.viewId}`)
- yield put(
- WidgetActions.widgetDetailLoaded(formedWidget, viewResult.payload)
- )
- } catch (err) {
- yield put(WidgetActions.loadWidgetDetailFail(err))
- errorHandler(err)
- }
- }
- export function* editWidget(action: WidgetActionType) {
- if (action.type !== ActionTypes.EDIT_WIDGET) {
- return
- }
- const { widget, resolve } = action.payload
- try {
- yield call(request, {
- method: 'put',
- url: `${api.widget}/${widget.id}`,
- data: widget
- })
- yield put(WidgetActions.widgetEdited())
- resolve()
- } catch (err) {
- yield put(WidgetActions.editWidgetFail())
- errorHandler(err)
- }
- }
- export function* copyWidget(action: WidgetActionType) {
- if (action.type !== ActionTypes.COPY_WIDGET) {
- return
- }
- const { widget, resolve } = action.payload
- try {
- const result = yield call(request, {
- method: 'post',
- url: api.widget,
- data: omit(widget, 'id')
- })
- const copiedWidget: IWidgetRaw = result.payload
- const formdWidget: IWidgetFormed = {
- ...copiedWidget,
- config: JSON.parse(copiedWidget.config)
- }
- yield put(WidgetActions.widgetCopied(widget.id, formdWidget))
- resolve()
- } catch (err) {
- yield put(WidgetActions.copyWidgetFail())
- errorHandler(err)
- }
- }
- export function* executeComputed(action: WidgetActionType) {
- if (action.type !== ActionTypes.EXECUTE_COMPUTED_SQL) {
- return
- }
- const { sql } = action.payload
- try {
- const result = yield call(request, {
- method: 'post',
- // url: api.widget,
- data: sql
- })
- // todo 返回sql校验结果
- } catch (err) {
- errorHandler(err)
- }
- }
- export default function* rootWidgetSaga() {
- yield all([
- takeLatest(ActionTypes.LOAD_WIDGETS, getWidgets),
- takeEvery(ActionTypes.ADD_WIDGET, addWidget),
- takeEvery(ActionTypes.DELETE_WIDGET, deleteWidget),
- takeLatest(ActionTypes.LOAD_WIDGET_DETAIL, getWidgetDetail),
- takeEvery(ActionTypes.EDIT_WIDGET, editWidget),
- takeEvery(ActionTypes.COPY_WIDGET, copyWidget),
- takeEvery(ActionTypes.EXECUTE_COMPUTED_SQL, executeComputed)
- ])
- }
|