mirror of https://github.com/grafana/grafana
TestData: support raw results in the raw frames editor (#44609)
parent
133e34d52a
commit
6a72d97265
@ -1,21 +1,67 @@ |
||||
import React from 'react'; |
||||
import { InlineField, TextArea } from '@grafana/ui'; |
||||
import React, { useState } from 'react'; |
||||
import { Alert, CodeEditor } from '@grafana/ui'; |
||||
import { EditorProps } from '../QueryEditor'; |
||||
import { isArray } from 'lodash'; |
||||
import { toDataQueryResponse } from '@grafana/runtime'; |
||||
import { dataFrameToJSON, toDataFrame, toDataFrameDTO } from '@grafana/data'; |
||||
|
||||
export const RawFrameEditor = ({ onChange, query }: EditorProps) => { |
||||
const onContent = (rawFrameContent: string) => { |
||||
onChange({ ...query, rawFrameContent }); |
||||
const [error, setError] = useState<string>(); |
||||
const [warning, setWarning] = useState<string>(); |
||||
|
||||
const onSaveFrames = (rawFrameContent: string) => { |
||||
try { |
||||
const json = JSON.parse(rawFrameContent); |
||||
if (isArray(json)) { |
||||
setError(undefined); |
||||
setWarning(undefined); |
||||
onChange({ ...query, rawFrameContent }); |
||||
return; |
||||
} |
||||
|
||||
let data: any = undefined; |
||||
|
||||
// Copy paste from panel json
|
||||
if (isArray(json.series) && json.state) { |
||||
data = json.series.map((v: any) => toDataFrameDTO(toDataFrame(v))); |
||||
} else { |
||||
// Chek if it is a copy of the raw resuls
|
||||
const v = toDataQueryResponse({ data: json }); |
||||
if (v.data?.length && !v.error) { |
||||
data = v.data.map((f) => dataFrameToJSON(f)); |
||||
} |
||||
} |
||||
|
||||
if (data) { |
||||
console.log('Original', json); |
||||
console.log('Save', data); |
||||
setError(undefined); |
||||
setWarning('Converted to direct frame result'); |
||||
onChange({ ...query, rawFrameContent: JSON.stringify(data, null, 2) }); |
||||
return; |
||||
} |
||||
|
||||
setError('Unable to read dataframes in text'); |
||||
} catch (e) { |
||||
console.log('Error parsing json', e); |
||||
setError('Enter JSON array of data frames (or raw query results body)'); |
||||
setWarning(undefined); |
||||
} |
||||
}; |
||||
|
||||
return ( |
||||
<InlineField label="Frames" labelWidth={14}> |
||||
<TextArea |
||||
width="100%" |
||||
rows={10} |
||||
onBlur={(e) => onContent(e.currentTarget.value)} |
||||
placeholder="frames array (JSON)" |
||||
defaultValue={query.rawFrameContent ?? '[]'} |
||||
<> |
||||
{error && <Alert title={error} severity="error" />} |
||||
{warning && <Alert title={warning} severity="warning" />} |
||||
<CodeEditor |
||||
height={300} |
||||
language="json" |
||||
value={query.rawFrameContent ?? '[]'} |
||||
onBlur={onSaveFrames} |
||||
onSave={onSaveFrames} |
||||
showMiniMap={true} |
||||
showLineNumbers={true} |
||||
/> |
||||
</InlineField> |
||||
</> |
||||
); |
||||
}; |
||||
|
Loading…
Reference in new issue