import { Group, Tabs, Center, Space, Box, SegmentedControl, Stack, } 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, GraphResolution, 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"; import ResolutionInput from "./ResolutionInput"; 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)); }} /> dispatch( setVisualizer({ idx, visualizer: { ...panel.visualizer, activeTab: v as "table" | "graph", }, }) ) } keepMounted={false} > }> 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 }, }) ) } /> { dispatch( setVisualizer({ idx, visualizer: { ...panel.visualizer, resolution: res, }, }) ); }} /> dispatch( setVisualizer({ idx, visualizer: { ...panel.visualizer, displayMode: value as GraphDisplayMode, }, }) ) } value={panel.visualizer.displayMode} data={[ { value: GraphDisplayMode.Lines, label: (
Unstacked
), }, { value: GraphDisplayMode.Stacked, label: (
Stacked
), }, { value: GraphDisplayMode.Heatmap, label: (
Heatmap
), }, ]} /> {/* */} {/* dispatch( setVisualizer({ idx, visualizer: { ...panel.visualizer, showExemplars: event.currentTarget.checked, }, }) ) } color={"rgba(34,139,230,.1)"} size="md" label="Show exemplars" thumbIcon={ panel.visualizer.showExemplars ? ( ) : ( ) } /> */}
dispatch( setVisualizer({ idx, visualizer: { ...panel.visualizer, range: (end - start) * 1000, endTime: end * 1000, }, }) ) } />
); }; export default QueryPanel;