123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- /*
- * <<
- * 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 omit from 'lodash/omit'
- import { call, select, put, all, takeLatest, takeEvery } from 'redux-saga/effects'
- import { message } from 'antd'
- import request from 'utils/request'
- import api from 'utils/api'
- import { ActionTypes } from './constants'
- import ShareDisplayActions, { ShareDisplayActionType } from './actions'
- import { getPasswordUrl } from 'share/util'
- import {
- makeSelectShareType
- } from 'share/containers/App/selectors'
- import { displayParamsMigrationRecorder, widgetConfigMigrationRecorder } from 'app/utils/migrationRecorders'
- import { SecondaryGraphTypes } from 'app/containers/Display/components/Setting'
- import { ILayerRaw, ILayerParams } from 'app/containers/Display/components/types'
- import { IWidgetConfig } from 'app/containers/Widget/components/Widget'
- export function* getDisplay (action: ShareDisplayActionType) {
- if (action.type !== ActionTypes.LOAD_SHARE_DISPLAY) { return }
- const { token, resolve, reject } = action.payload
- const { loadDisplayFail, displayLoaded } = ShareDisplayActions
- const shareType = yield select(makeSelectShareType())
- const baseUrl = `${api.share}/display/${token}`
- const requestUrl = getPasswordUrl(shareType, token, baseUrl)
- try {
- const asyncData = yield call(request, requestUrl)
- const { header, payload } = asyncData
- if (header.code === 401) {
- reject(header.msg)
- yield put(loadDisplayFail(header.msg))
- return
- }
- const { slides, widgets, views, ...display } = payload
- display.config = JSON.parse(display.config || '{}')
- slides.sort((s1, s2) => s1.index - s2.index).forEach((slide) => {
- slide.config = JSON.parse(slide.config)
- slide.relations.forEach((layer: ILayerRaw) => {
- const { subType } = layer
- const parsedParams: ILayerParams = JSON.parse(layer.params)
- layer.params = SecondaryGraphTypes.Label === subType ? displayParamsMigrationRecorder(parsedParams) : parsedParams
- })
- })
- const formedWidgets = widgets.map((widget) => {
- const { config, ...rest } = widget
- const parsedConfig: IWidgetConfig = JSON.parse(config)
- return {
- ...rest,
- config: widgetConfigMigrationRecorder(parsedConfig, {
- viewId: widget.viewId
- })
- }
- })
- const formedViews = views.reduce(
- (obj, { id, model, variable }) => ({
- ...obj,
- [id]: {
- model: JSON.parse(model),
- variable: JSON.parse(variable)
- }
- }),
- {}
- )
- yield put(displayLoaded(display, slides, formedWidgets, formedViews))
- resolve(display, slides, widgets)
- } catch (err) {
- message.destroy()
- yield put(loadDisplayFail(err))
- message.error('获取 大屏 信息失败,请刷新重试')
- reject(err)
- }
- }
- export function* getData (action: ShareDisplayActionType) {
- if (action.type !== ActionTypes.LOAD_LAYER_DATA) { return }
- const { renderType, slideNumber, layerId, dataToken, requestParams } = action.payload
- const {
- filters,
- tempFilters, // @TODO combine widget static filters with local filters
- linkageFilters,
- globalFilters,
- variables,
- linkageVariables,
- globalVariables,
- pagination,
- ...rest
- } = requestParams
- const { pageSize, pageNo } = pagination || { pageSize: 0, pageNo: 0 }
- const { layerDataLoaded, loadLayerDataFail } = ShareDisplayActions
- try {
- const response = yield call(request, {
- method: 'post',
- url: `${api.share}/data/${dataToken}`,
- data: {
- ...omit(rest, 'customOrders'),
- filters: filters.concat(tempFilters).concat(linkageFilters).concat(globalFilters),
- params: variables.concat(linkageVariables).concat(globalVariables),
- pageSize,
- pageNo
- }
- })
- const responsePayload = response.payload || { resultList: [] }
- responsePayload.resultList = responsePayload.resultList || []
- yield put(layerDataLoaded(renderType, slideNumber, layerId, responsePayload, requestParams))
- } catch (err) {
- yield put(loadLayerDataFail(slideNumber, layerId, err))
- }
- }
- export default function* rootDisplaySaga () {
- yield all([
- takeLatest(ActionTypes.LOAD_SHARE_DISPLAY, getDisplay),
- takeEvery(ActionTypes.LOAD_LAYER_DATA, getData)
- ])
- }
|