Files
Marcus Andersson df4a5aeaf1 PluginExtensions: Logs panel takes full height/width (#95825)
Making the log panel taking full space of page.
2024-11-07 09:54:50 +01:00

68 lines
1.8 KiB
TypeScript

import { nanoid } from 'nanoid';
import { ReactElement, useState } from 'react';
import AutoSizer from 'react-virtualized-auto-sizer';
import { sceneUtils, VizConfigBuilders } from '@grafana/scenes';
import {
SceneContextProvider,
useDataTransformer,
useQueryRunner,
VizGridLayout,
VizPanel,
} from '@grafana/scenes-react';
import { Page } from 'app/core/components/Page/Page';
import { LogFilter, LogViewFilters } from './LogViewFilters';
import { ExtensionsLogDataSource } from './dataSource';
import { createFilterTransformation } from './filterTransformation';
import { log } from './log';
const DATASOURCE_REF = {
uid: nanoid(),
type: 'grafana-extensionslog-datasource',
};
const logsViz = VizConfigBuilders.logs().setOption('wrapLogMessage', true).build();
sceneUtils.registerRuntimeDataSource({
dataSource: new ExtensionsLogDataSource(DATASOURCE_REF.type, DATASOURCE_REF.uid, log),
});
export default function LogViewer(): ReactElement {
return (
<SceneContextProvider>
<LogViewScene />
</SceneContextProvider>
);
}
function LogViewScene(): ReactElement | null {
const [filter, setFilter] = useState<LogFilter>({});
const data = useQueryRunner({
datasource: DATASOURCE_REF,
queries: [{ refId: 'A' }],
liveStreaming: true,
});
const filteredData = useDataTransformer({
transformations: [createFilterTransformation(filter)],
data: data,
});
return (
<Page
navId="extensions"
actions={<LogViewFilters provider={data} filteredProvider={filteredData} filter={filter} onChange={setFilter} />}
>
<AutoSizer>
{({ height, width }) => (
<VizGridLayout minHeight={height} minWidth={width}>
<VizPanel title="" viz={logsViz} dataProvider={filteredData} />
</VizGridLayout>
)}
</AutoSizer>
</Page>
);
}