// Copyright 2023 The Casdoor Authors. All Rights Reserved. // // 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 {ArrowUpOutlined} from "@ant-design/icons"; import {Card, Col, Row, Spin, Statistic, Tour} from "antd"; import * as echarts from "echarts"; import i18next from "i18next"; import React from "react"; import * as DashboardBackend from "../backend/DashboardBackend"; import * as Setting from "../Setting"; import * as TourConfig from "../TourConfig"; const Dashboard = (props) => { const [dashboardData, setDashboardData] = React.useState(null); const [isTourVisible, setIsTourVisible] = React.useState(TourConfig.getTourVisible()); const nextPathName = TourConfig.getNextUrl("home"); React.useEffect(() => { window.addEventListener("storageTourChanged", handleTourChange); return () => window.removeEventListener("storageTourChanged", handleTourChange); }, []); React.useEffect(() => { window.addEventListener("storageOrganizationChanged", handleOrganizationChange); return () => window.removeEventListener("storageOrganizationChanged", handleOrganizationChange); }, [props.owner]); React.useEffect(() => { if (!Setting.isLocalAdminUser(props.account)) { props.history.push("/apps"); } }, [props.account]); const getOrganizationName = () => { let organization = localStorage.getItem("organization") === "All" ? "" : localStorage.getItem("organization"); if (!Setting.isAdminUser(props.account) && Setting.isLocalAdminUser(props.account)) { organization = props.account.owner; } return organization; }; React.useEffect(() => { if (!Setting.isLocalAdminUser(props.account)) { return; } const organization = getOrganizationName(); DashboardBackend.getDashboard(organization).then((res) => { if (res.status === "ok") { setDashboardData(res.data); } else { Setting.showMessage("error", res.msg); } }); }, [props.owner]); const handleTourChange = () => { setIsTourVisible(TourConfig.getTourVisible()); }; const handleOrganizationChange = () => { if (!Setting.isLocalAdminUser(props.account)) { return; } setDashboardData(null); const organization = getOrganizationName(); DashboardBackend.getDashboard(organization).then((res) => { if (res.status === "ok") { setDashboardData(res.data); } else { Setting.showMessage("error", res.msg); } }); }; const setIsTourToLocal = () => { TourConfig.setIsTourVisible(false); setIsTourVisible(false); }; const handleTourComplete = () => { if (nextPathName !== "") { props.history.push("/" + nextPathName); TourConfig.setIsTourVisible(true); } }; const getSteps = () => { const steps = TourConfig.TourObj["home"]; steps.map((item, index) => { item.target = () => document.getElementById(item.id) || null; if (index === steps.length - 1) { item.nextButtonProps = { children: TourConfig.getNextButtonChild(nextPathName), }; } }); return steps; }; const renderEChart = () => { const chartDom = document.getElementById("echarts-chart"); if (dashboardData === null) { if (chartDom) { const instance = echarts.getInstanceByDom(chartDom); if (instance) { instance.dispose(); } } return (