import { Group, Tabs, Center, Space, Box, Input, SegmentedControl, Stack, Select, } from "@mantine/core"; import { IconChartAreaFilled, IconChartGridDots, IconChartLine, IconGraph, IconTable, } from "@tabler/icons-react"; import { FC, useState } from "react"; import { useAppDispatch, useAppSelector } from "../../state/hooks"; import { GraphDisplayMode, removePanel, setExpr, setVisualizer, } from "../../state/queryPageSlice"; import DataTable from "./DataTable"; import TimeInput from "./TimeInput"; import RangeInput from "./RangeInput"; import ExpressionInput from "./ExpressionInput"; import Graph from "./Graph"; export interface PanelProps { idx: number; metricNames: string[]; } // TODO: This is duplicated everywhere, unify it. const iconStyle = { width: "0.9rem", height: "0.9rem" }; const QueryPanel: FC = ({ idx, metricNames }) => { // Used to indicate to the selected display component that it should retrigger // the query, even if the expression has not changed (e.g. when the user presses // the "Execute" button or hits again). const [retriggerIdx, setRetriggerIdx] = useState(0); const panel = useAppSelector((state) => state.queryPage.panels[idx]); const dispatch = useAppDispatch(); return ( { setRetriggerIdx((idx) => idx + 1); dispatch(setExpr({ idx, expr })); }} removePanel={() => { dispatch(removePanel(idx)); }} /> }> Table }> Graph dispatch( setVisualizer({ idx, visualizer: { ...panel.visualizer, endTime: time }, }) ) } /> dispatch( setVisualizer({ idx, visualizer: { ...panel.visualizer, range }, }) ) } /> dispatch( setVisualizer({ idx, visualizer: { ...panel.visualizer, endTime: time }, }) ) } />