Browse Source

Merge pull request 'panel: display tasks from the api' (#3) from display-tasks-from-api into master

Reviewed-on: #3
pull/6/head
rozetko 1 year ago
parent
commit
050bf23e8c
  1. 61
      src/panels/corpglory-dataexporter-panel/components/Panel.tsx

61
src/panels/corpglory-dataexporter-panel/components/Panel.tsx

@ -1,7 +1,8 @@
import { PanelOptions, TableRowConfig } from '../types'; import { PanelOptions, TableRowConfig } from '../types';
import { Table, Button, HorizontalGroup } from '@grafana/ui'; import { makeRequest } from 'services/network_service';
import { Table, Button, HorizontalGroup, LoadingPlaceholder } from '@grafana/ui';
import { import {
PanelProps, PanelProps,
toDataFrame, toDataFrame,
@ -12,36 +13,62 @@ import {
DataLinkClickEvent, DataLinkClickEvent,
} from '@grafana/data'; } from '@grafana/data';
import React, { useState } from 'react'; import React, { useState, useEffect } from 'react';
import * as _ from 'lodash'; import * as _ from 'lodash';
interface Props extends PanelProps<PanelOptions> {} interface Props extends PanelProps<PanelOptions> {}
export function Panel({ options, data, width, height, timeRange, onChangeTimeRange }: Props) { export function Panel({ options, data, width, height, timeRange, onChangeTimeRange }: Props) {
console.log('panel', data); console.log('panel', data);
const configs: TableRowConfig[] = [];
const [tasks, setTasks] = useState(configs); const [tasks, setTasks] = useState<TableRowConfig[] | null>(null);
const dataFrame = getDataFrameForTable(tasks, setTasks); const [dataFrame, setDataFrame] = useState<DataFrame | null>(null);
useEffect(() => {
if(tasks === null) {
return;
}
const dataFrame = getDataFrameForTable(tasks, setTasks);
setDataFrame(dataFrame)
}, [tasks]);
useEffect(() => {
// TODO: move this function to Network Service
async function getTasks(): Promise<TableRowConfig[]> {
return makeRequest<TableRowConfig[]>('/tasks', {});
}
getTasks().then(tasks => setTasks(tasks)).catch(err => console.error(err));
}, []);
function onAddTaskClick(): void { function onAddTaskClick(): void {
if(tasks === null) {
return;
}
const configs = [...tasks, createConfigItem()]; const configs = [...tasks, createConfigItem()];
setTasks(configs); setTasks(configs);
} }
return ( return (
<div> <div>
<Table width={width} height={height - 40} data={dataFrame} /> {dataFrame === null ?
<HorizontalGroup justify="flex-end"> // TODO: if datasource responds with error, display the error
<Button <LoadingPlaceholder text="Loading..."></LoadingPlaceholder> :
variant="primary" <div>
aria-label="Rich history button" <Table width={width} height={height - 40} data={dataFrame} />
icon="plus" <HorizontalGroup justify="flex-end">
style={{ marginTop: '8px' }} <Button
onClick={onAddTaskClick} variant="primary"
> aria-label="Rich history button"
Add Task icon="plus"
</Button> style={{ marginTop: '8px' }}
</HorizontalGroup> onClick={onAddTaskClick}
>
Add Task
</Button>
</HorizontalGroup>
</div>
}
</div> </div>
); );
} }

Loading…
Cancel
Save