import { Card, Select } from 'antd'; import React, { createContext, useEffect, useState } from 'react'; import VisibleObserver from '../VisibleObserver'; import { createFetchPrometheusClient, createDataHandler } from './utils'; import style from './style.less'; export const PrometheusContext = createContext({ data: [], device: '', devices: [], }); function getChartData(data, device, devices) { if (device && devices.length !== 0) { return data.filter((d) => d.device === device); } return data; } const BaseCard = (props) => { const { fetchPrometheusFunc, createFetchParams, handleDataParams, fetchDataParams, title, visibleHeight, extra, renderContent, } = props; const [initData, setInitData] = useState([]); const [chartData, setChartData] = useState([]); const [device, setDevice] = useState(''); const [devices, setDevices] = useState([]); const [isLoading, setIsLoading] = useState(true); const fetchData = createFetchPrometheusClient( createFetchParams, fetchPrometheusFunc ); const dataHandler = createDataHandler(handleDataParams); const passedContext = { data: chartData, device, devices, modifyKeys: handleDataParams.modifyKeys, }; useEffect(() => { (async () => { setIsLoading(true); const data = await fetchData(fetchDataParams); const { retData: handledData, device: newDevice, devices: newDevices, } = dataHandler(data); // save base response setInitData(handledData); // save device information setDevice(newDevice); setDevices(newDevices); // refresh component const newChartData = getChartData(handledData, newDevice, newDevices); setChartData(newChartData); // setLoading setIsLoading(false); })(); }, []); const handleDeviceChange = (newDevice) => { setIsLoading(true); // refresh component const newChartData = getChartData(initData, newDevice, devices); setDevice(newDevice); setChartData(newChartData); setIsLoading(false); }; const filterChartData = (filter) => { setIsLoading(true); // refresh component const newChartData = initData.filter(filter); setChartData(newChartData); setIsLoading(false); }; const extraRender = ( <> {!isLoading && device && devices.length !== 0 && (