/* * << * 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 React from 'react' import { Tree, Icon, Popover } from 'antd' const { TreeNode } = Tree import { NodeKeyPrefix } from './constants' import { IPortal, IDashboard, IDisplayFormed, ISlideFormed } from 'containers/Viz/types' import { IScheduleVizConfigItem } from './types' import IconFont from 'app/components/IconFont' export const splitNodeKeyWithPrefix = ( nodeKey: string ): [NodeKeyPrefix, number] => { const nodePrefix = [ NodeKeyPrefix.Portal, NodeKeyPrefix.Dashboard, NodeKeyPrefix.Display, NodeKeyPrefix.Slide ].find((prefix) => nodeKey.includes(prefix)) const nodeId = +nodeKey.slice(nodePrefix.length) return [nodePrefix, nodeId] } const getDashboardChildNodes = ( portalId: number, mapDashboards: { [parentId: number]: IDashboard[] }, ancestorIds: number[] = [0] ): [JSX.Element[], number[]] => { const currentDashboardId = ancestorIds[ancestorIds.length - 1] const childDashboards = mapDashboards[currentDashboardId] if (!Array.isArray(childDashboards)) { return [null, [currentDashboardId]] } let descendantIds = [] const descendantNodes = childDashboards.map((child) => { const [childNodes, childIds] = getDashboardChildNodes( portalId, mapDashboards, ancestorIds.concat(child.id) ) descendantIds = descendantIds.concat(child.id).concat(childIds) return ( } key={`${NodeKeyPrefix.Dashboard}${child.id}`} isLeaf={!childNodes} dataRef={[portalId, ancestorIds, childIds]} > {childNodes} ) }) return [descendantNodes, descendantIds] } export const renderPortalDashboardsTreeNodes = ( portalId: number, dashboards: IDashboard[] ) => { if (!Array.isArray(dashboards)) { return null } const mapDashboards = dashboards.reduce<{ [parentId: number]: IDashboard[] }>( (map, dashboard) => { if (!map[dashboard.parentId]) { map[dashboard.parentId] = [] } map[dashboard.parentId].push(dashboard) return map }, {} ) const [dashboardNodes] = getDashboardChildNodes(portalId, mapDashboards) return dashboardNodes } const slideIcon = export const renderDisplaySlidesTreeNodes = ( displayId: number, slides: ISlideFormed[] ) => { if (!Array.isArray(slides)) { return null } const childNodes = slides.map(({ id: slideId, config }, idx) => { const { slideParams: { avatar } } = config const icon = avatar ? ( }>{slideIcon} ) : ( slideIcon ) return ( ) }) return childNodes } export const getCheckedVizKeys = ( value: IScheduleVizConfigItem[], type: IScheduleVizConfigItem['contentType'], vizs: IPortal[] | IDisplayFormed[], vizPrefix: string, vizItemPrefix: string ) => { if (!Array.isArray(vizs)) { return [] } const checkedVizKeys = value .filter(({ contentType }) => contentType === type) .reduce((acc, { id, items }) => { // checked all viz items under this viz if (!Array.isArray(items)) { if (~vizs.findIndex((viz) => viz.id === id)) { acc.push(`${vizPrefix}${id}`) } } else { // check the partial viz item under this viz items.forEach((vizItemId) => { acc.push(`${vizItemPrefix}${vizItemId}`) }) } return acc }, []) return checkedVizKeys }