|
@@ -1,202 +0,0 @@
|
|
|
-/*
|
|
|
- * <<
|
|
|
- * 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, { useEffect, useCallback, useState } from 'react'
|
|
|
-import { createStructuredSelector } from 'reselect'
|
|
|
-import { useDispatch, useSelector } from 'react-redux'
|
|
|
-import {
|
|
|
- makeSelectDownloadList
|
|
|
-} from 'containers/App/selectors'
|
|
|
-import {
|
|
|
- makeSelectPortals,
|
|
|
- makeSelectCurrentPortal,
|
|
|
- makeSelectCurrentDashboards
|
|
|
-} from './selectors'
|
|
|
-
|
|
|
-import {
|
|
|
- hideNavigator,
|
|
|
- loadDownloadList,
|
|
|
- downloadFile
|
|
|
-} from 'containers/App/actions'
|
|
|
-import { VizActions } from './actions'
|
|
|
-
|
|
|
-import { Route } from 'react-router-dom'
|
|
|
-import { RouteComponentWithParams } from 'utils/types'
|
|
|
-
|
|
|
-import {
|
|
|
- Layout,
|
|
|
- Result,
|
|
|
- PageHeader,
|
|
|
- Tree,
|
|
|
- Icon,
|
|
|
- Button,
|
|
|
- Menu,
|
|
|
- Dropdown
|
|
|
-} from 'antd'
|
|
|
-const { Header, Sider, Content } = Layout
|
|
|
-const { DirectoryTree } = Tree
|
|
|
-import SplitPane from 'components/SplitPane'
|
|
|
-import DownloadList from 'components/DownloadList'
|
|
|
-import useDashboardConfigMenu from './hooks/dashboardConfigMenu'
|
|
|
-import { Grid } from 'containers/Dashboard/Loadable'
|
|
|
-import useDashboardTreeNodes from './hooks/dashboardTreeNodes'
|
|
|
-import { AntTreeNodeMouseEvent } from 'antd/lib/tree'
|
|
|
-
|
|
|
-const mapStateToProps = createStructuredSelector({
|
|
|
- downloadList: makeSelectDownloadList(),
|
|
|
- portals: makeSelectPortals(),
|
|
|
- currentPortal: makeSelectCurrentPortal(),
|
|
|
- currentDashboards: makeSelectCurrentDashboards()
|
|
|
-})
|
|
|
-
|
|
|
-interface IVizPortalProps extends RouteComponentWithParams {}
|
|
|
-
|
|
|
-const VizPortal: React.FC<IVizPortalProps> = (props) => {
|
|
|
- const dispatch = useDispatch()
|
|
|
- const {
|
|
|
- portals,
|
|
|
- currentPortal,
|
|
|
- currentDashboards,
|
|
|
- downloadList
|
|
|
- } = useSelector(mapStateToProps)
|
|
|
- const {
|
|
|
- history,
|
|
|
- match: { params }
|
|
|
- } = props
|
|
|
- const portalId = +params.portalId
|
|
|
- const projectId = +params.projectId
|
|
|
-
|
|
|
- useEffect(() => {
|
|
|
- dispatch(hideNavigator())
|
|
|
- if (!portals.length) {
|
|
|
- dispatch(VizActions.loadPortals(projectId))
|
|
|
- }
|
|
|
- }, [])
|
|
|
-
|
|
|
- useEffect(() => {
|
|
|
- dispatch(VizActions.loadPortalDashboards(portalId))
|
|
|
- }, [portalId])
|
|
|
-
|
|
|
- const goToViz = useCallback(() => {
|
|
|
- // eslint-disable-next-line react/prop-types
|
|
|
- history.replace(`/project/${projectId}/dataShareService/vizs`)
|
|
|
- // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
|
- }, [])
|
|
|
-
|
|
|
- const onLoadDownloadList = useCallback(() => dispatch(loadDownloadList()), [])
|
|
|
- const onDownloadFile = useCallback((id) => dispatch(downloadFile(id)), [])
|
|
|
-
|
|
|
- const [dashboardTreeNodes, firstDashboardKey] = useDashboardTreeNodes(currentDashboards)
|
|
|
- const [dashboardMenuVisible, setDashboardMenuVisible] = useState(false)
|
|
|
- const [dashboardMenuStyle, setDashboardMenuStyle] = useState({})
|
|
|
- const dashboardConfigMenu = useDashboardConfigMenu(dashboardMenuStyle)
|
|
|
-
|
|
|
- const closeDashboardMenu = useCallback(() => {
|
|
|
- setDashboardMenuVisible(false)
|
|
|
- }, [])
|
|
|
-
|
|
|
- useEffect(() => {
|
|
|
- document.addEventListener('click', closeDashboardMenu, false)
|
|
|
- return () => {
|
|
|
- document.removeEventListener('click', closeDashboardMenu, false)
|
|
|
- }
|
|
|
- }, [])
|
|
|
-
|
|
|
- const showDashboardContextMenu = useCallback((options: AntTreeNodeMouseEvent) => {
|
|
|
- const { node, event } = options
|
|
|
- const { pageX, pageY } = event
|
|
|
- const menuStyle: React.CSSProperties = {
|
|
|
- position: 'absolute',
|
|
|
- left: pageX,
|
|
|
- top: pageY
|
|
|
- }
|
|
|
- setDashboardMenuStyle(menuStyle)
|
|
|
- setDashboardMenuVisible(true)
|
|
|
- }, [])
|
|
|
-
|
|
|
- return (
|
|
|
- <Layout>
|
|
|
- <PageHeader
|
|
|
- ghost={false}
|
|
|
- title={currentPortal.name}
|
|
|
- subTitle={currentPortal.description}
|
|
|
- onBack={goToViz}
|
|
|
- extra={
|
|
|
- <DownloadList
|
|
|
- downloadList={downloadList}
|
|
|
- onLoadDownloadList={onLoadDownloadList}
|
|
|
- onDownloadFile={onDownloadFile}
|
|
|
- />
|
|
|
- }
|
|
|
- />
|
|
|
- {dashboardMenuVisible && dashboardConfigMenu}
|
|
|
- {Array.isArray(currentDashboards) &&
|
|
|
- (currentDashboards.length ? (
|
|
|
- <SplitPane
|
|
|
- spliter
|
|
|
- className="ant-layout-content"
|
|
|
- type="horizontal"
|
|
|
- initialSize={150}
|
|
|
- minSize={150}
|
|
|
- >
|
|
|
- <DirectoryTree
|
|
|
- defaultExpandAll
|
|
|
- blockNode
|
|
|
- defaultSelectedKeys={firstDashboardKey}
|
|
|
- onRightClick={showDashboardContextMenu}
|
|
|
- >
|
|
|
- {dashboardTreeNodes}
|
|
|
- </DirectoryTree>
|
|
|
- <Route
|
|
|
- path="/project/:projectId/dataShareService/portal/:portalId/dashboard/:dashboardId"
|
|
|
- component={Grid}
|
|
|
- />
|
|
|
- </SplitPane>
|
|
|
- ) : (
|
|
|
- <Content
|
|
|
- style={{
|
|
|
- display: 'flex',
|
|
|
- flexDirection: 'column',
|
|
|
- alignItems: 'center',
|
|
|
- justifyContent: 'center'
|
|
|
- }}
|
|
|
- >
|
|
|
- <Result
|
|
|
- icon={<img src={require('assets/images/noDashboard.png')} />}
|
|
|
- extra={
|
|
|
- <p>
|
|
|
- 请
|
|
|
- <Button size="small" type="link">
|
|
|
- 创建文件夹
|
|
|
- </Button>
|
|
|
- 或
|
|
|
- <Button size="small" type="link">
|
|
|
- 创建 Dashboard
|
|
|
- </Button>
|
|
|
- </p>
|
|
|
- }
|
|
|
- />
|
|
|
- </Content>
|
|
|
- ))}
|
|
|
- </Layout>
|
|
|
- )
|
|
|
-}
|
|
|
-
|
|
|
-export default VizPortal
|