import React, { FC, useMemo, useState } from 'react'; import { useObservable } from 'react-use'; import AutoSizer from 'react-virtualized-auto-sizer'; import { ApplyFieldOverrideOptions, DataTransformerConfig, dateMath, FieldColorModeId, NavModelItem, PanelData, } from '@grafana/data'; import { Button, Table } from '@grafana/ui'; import { config } from 'app/core/config'; import { useAppNotification } from 'app/core/copy/appNotification'; import { QueryGroupOptions } from 'app/types'; import Page from '../../core/components/Page/Page'; import { PanelRenderer } from '../panel/components/PanelRenderer'; import { QueryGroup } from '../query/components/QueryGroup'; import { PanelQueryRunner } from '../query/state/PanelQueryRunner'; interface State { queryRunner: PanelQueryRunner; queryOptions: QueryGroupOptions; data?: PanelData; } export const TestStuffPage: FC = () => { const [state, setState] = useState(getDefaultState()); const { queryOptions, queryRunner } = state; const onRunQueries = () => { const timeRange = { from: 'now-1h', to: 'now' }; queryRunner.run({ queries: queryOptions.queries, datasource: queryOptions.dataSource, timezone: 'browser', timeRange: { from: dateMath.parse(timeRange.from)!, to: dateMath.parse(timeRange.to)!, raw: timeRange }, maxDataPoints: queryOptions.maxDataPoints ?? 100, minInterval: queryOptions.minInterval, }); }; const onOptionsChange = (queryOptions: QueryGroupOptions) => { setState({ ...state, queryOptions }); }; /** * Subscribe to data */ const observable = useMemo(() => queryRunner.getData({ withFieldConfig: true, withTransforms: true }), [queryRunner]); const data = useObservable(observable); const node: NavModelItem = { id: 'test-page', text: 'Test page', icon: 'dashboard', subTitle: 'FOR TESTING!', url: 'sandbox/test', }; const notifyApp = useAppNotification(); return ( {data && ( {({ width }) => { return (
); }} )}
); }; export function getDefaultState(): State { const options: ApplyFieldOverrideOptions = { fieldConfig: { defaults: { color: { mode: FieldColorModeId.PaletteClassic, }, }, overrides: [], }, replaceVariables: (v: string) => v, theme: config.theme2, }; const dataConfig = { getTransformations: () => [] as DataTransformerConfig[], getFieldOverrideOptions: () => options, getDataSupport: () => ({ annotations: false, alertStates: false }), }; return { queryRunner: new PanelQueryRunner(dataConfig), queryOptions: { queries: [], dataSource: { name: 'gdev-testdata', }, maxDataPoints: 100, }, }; } export default TestStuffPage;