123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288 |
- /*
- * <<
- * 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 produce from 'immer'
- import { ActionTypes, DashboardItemStatus } from './constants'
- import { DashboardActionType } from './actions'
- import { DownloadStatus } from 'containers/App/constants'
- import { fieldGroupedSort } from 'containers/Widget/components/Config/Sort'
- import { IShareDashboardState } from './types'
- import {
- getShareInitialItemInfo,
- initDefaultValuesFromShareParams
- } from './util'
- import { getGlobalControlInitialValues } from 'app/containers/Dashboard/util'
- const initialState: IShareDashboardState = {
- dashboard: null,
- title: '',
- widgets: null,
- formedViews: {},
- items: null,
- itemsInfo: null,
- downloadListLoading: false,
- downloadList: null,
- downloadListInfo: null,
- shareParams: null,
- fullScreenPanelItemId: null
- }
- const shareReducer = (state = initialState, action: DashboardActionType) =>
- produce(state, (draft) => {
- let itemInfo
- let drillHistory
- switch (action.type) {
- case ActionTypes.SEND_SHARE_PARAMS:
- draft.shareParams = action.payload.params
- break
- case ActionTypes.LOAD_SHARE_DASHBOARD_SUCCESS:
- const { dashboard, items, widgets, formedViews } = action.payload
- initDefaultValuesFromShareParams(
- dashboard.config.filters,
- draft.shareParams
- )
- const globalControlsInitialValue = getGlobalControlInitialValues(
- dashboard.config.filters,
- formedViews
- )
- draft.title = dashboard.name
- draft.dashboard = dashboard
- draft.widgets = widgets
- draft.formedViews = formedViews
- draft.items = items
- draft.itemsInfo = items.reduce((info, item) => {
- const relatedWidget = widgets.find((w) => w.id === item.widgetId)
- const initialItemInfo = getShareInitialItemInfo(
- relatedWidget,
- formedViews
- )
- if (globalControlsInitialValue[item.id]) {
- const {
- globalFilters,
- globalVariables
- } = globalControlsInitialValue[item.id]
- initialItemInfo.queryConditions = {
- ...initialItemInfo.queryConditions,
- globalFilters,
- globalVariables
- }
- }
- info[item.id] = initialItemInfo
- return info
- }, {})
- break
- case ActionTypes.SET_INDIVIDUAL_DASHBOARD:
- draft.title = action.payload.widget.name
- draft.items = [
- {
- id: 1,
- x: 0,
- y: 0,
- width: 12,
- height: 12,
- polling: false,
- frequency: 0,
- widgetId: action.payload.widget.id,
- dashboardId: 0,
- config: ''
- }
- ]
- draft.itemsInfo = {
- 1: getShareInitialItemInfo(
- action.payload.widget,
- action.payload.formedViews
- )
- }
- break
- case ActionTypes.LOAD_SHARE_WIDGET_SUCCESS:
- if (!draft.widgets) {
- draft.widgets = []
- }
- draft.widgets = draft.widgets.concat(action.payload.widget)
- draft.formedViews = action.payload.formedViews
- break
- case ActionTypes.SELECT_DASHBOARD_ITEM_CHART:
- draft.itemsInfo[action.payload.itemId].renderType =
- action.payload.renderType
- draft.itemsInfo[action.payload.itemId].selectedItems =
- action.payload.selectedItems
- break
- case ActionTypes.LOAD_SHARE_RESULTSET:
- draft.itemsInfo[action.payload.itemId].status =
- DashboardItemStatus.Pending
- draft.itemsInfo[action.payload.itemId].loading = true
- draft.itemsInfo[action.payload.itemId].errorMessage = ''
- break
- case ActionTypes.DRILL_DASHBOARDITEM:
- drillHistory =
- draft.itemsInfo[action.payload.itemId].queryConditions.drillHistory
- if (!drillHistory) {
- draft.itemsInfo[
- action.payload.itemId
- ].queryConditions.drillHistory = []
- }
- draft.itemsInfo[
- action.payload.itemId
- ].queryConditions.drillHistory.push(action.payload.drillHistory)
- break
- case ActionTypes.DELETE_DRILL_HISTORY:
- drillHistory =
- draft.itemsInfo[action.payload.itemId].queryConditions.drillHistory
- if (Array.isArray(drillHistory)) {
- drillHistory.splice(action.payload.index + 1)
- }
- break
- case ActionTypes.LOAD_SHARE_RESULTSET_SUCCESS:
- const {
- tempFilters,
- linkageFilters,
- globalFilters,
- variables,
- linkageVariables,
- globalVariables,
- pagination,
- nativeQuery,
- customOrders
- } = action.payload.requestParams
- fieldGroupedSort(action.payload.result.resultList, customOrders)
- draft.itemsInfo[action.payload.itemId] = {
- ...draft.itemsInfo[action.payload.itemId],
- status: DashboardItemStatus.Fulfilled,
- loading: false,
- datasource: action.payload.result,
- renderType: action.payload.renderType,
- queryConditions: {
- ...draft.itemsInfo[action.payload.itemId].queryConditions,
- tempFilters,
- linkageFilters,
- globalFilters,
- variables,
- linkageVariables,
- globalVariables,
- pagination,
- nativeQuery
- },
- selectedItems: []
- }
- break
- case ActionTypes.LOAD_SHARE_RESULTSET_FAILURE:
- draft.itemsInfo[action.payload.itemId] = {
- ...draft.itemsInfo[action.payload.itemId],
- status: DashboardItemStatus.Error,
- loading: false,
- errorMessage: action.payload.errorMessage
- }
- break
- case ActionTypes.LOAD_BATCH_DATA_WITH_CONTROL_VALUES:
- action.payload.relatedItems.forEach((itemId) => {
- draft.itemsInfo[itemId].status = DashboardItemStatus.Pending
- draft.itemsInfo[itemId].loading = true
- draft.itemsInfo[itemId].errorMessage = ''
- })
- break
- case ActionTypes.LOAD_WIDGET_CSV:
- draft.itemsInfo[action.payload.itemId].downloadCsvLoading = true
- break
- case ActionTypes.LOAD_WIDGET_CSV_SUCCESS:
- case ActionTypes.LOAD_WIDGET_CSV_FAILURE:
- draft.itemsInfo[action.payload.itemId].downloadCsvLoading = false
- break
- case ActionTypes.INITIATE_DOWNLOAD_TASK:
- draft.itemsInfo[action.payload.itemId].downloadCsvLoading = true
- break
- case ActionTypes.INITIATE_DOWNLOAD_TASK_SUCCESS:
- case ActionTypes.INITIATE_DOWNLOAD_TASK_FAILURE:
- draft.itemsInfo[action.payload.itemId].downloadCsvLoading = false
- break
- case ActionTypes.RESIZE_DASHBOARDITEM:
- itemInfo = draft.itemsInfo[action.payload.itemId]
- itemInfo.renderType = 'resize'
- itemInfo.datasource = { ...itemInfo.datasource }
- break
- case ActionTypes.RESIZE_ALL_DASHBOARDITEM:
- Object.values(draft.itemsInfo).forEach((itemInfo: any) => {
- itemInfo.renderType = 'resize'
- itemInfo.datasource = { ...itemInfo.datasource }
- })
- break
- case ActionTypes.RENDER_CHART_ERROR:
- draft.itemsInfo[
- action.payload.itemId
- ].errorMessage = action.payload.error.toString()
- break
- case ActionTypes.LOAD_DOWNLOAD_LIST:
- draft.downloadListLoading = true
- break
- case ActionTypes.LOAD_DOWNLOAD_LIST_SUCCESS:
- draft.downloadListLoading = false
- draft.downloadList = action.payload.list
- draft.downloadListInfo = action.payload.list.reduce((info, item) => {
- info[item.id] = {
- loading: false
- }
- return info
- }, {})
- break
- case ActionTypes.LOAD_DOWNLOAD_LIST_FAILURE:
- draft.downloadListLoading = false
- break
- case ActionTypes.DOWNLOAD_FILE_SUCCESS:
- draft.downloadList.find(({ id }) => id === action.payload.id).status =
- DownloadStatus.Downloaded
- break
- case ActionTypes.SET_FULL_SCREEN_PANEL_ITEM_ID:
- draft.fullScreenPanelItemId = action.payload.itemId
- break
- }
- })
- export default shareReducer
|