import React, { useState } from 'react'; import { css } from 'emotion'; import cx from 'classnames'; import { LegacyForms } from '@grafana/ui'; const { FormField } = LegacyForms; import { DerivedFieldConfig } from '../types'; import { getLinksFromLogsField } from '../../../../features/panel/panellinks/linkSuppliers'; import { ArrayVector, Field, FieldType, LinkModel } from '@grafana/data'; type Props = { derivedFields: DerivedFieldConfig[]; className?: string; }; export const DebugSection = (props: Props) => { const { derivedFields, className } = props; const [debugText, setDebugText] = useState(''); let debugFields: DebugField[] = []; if (debugText && derivedFields) { debugFields = makeDebugFields(derivedFields, debugText); } return (
setDebugText(event.currentTarget.value)} /> } /> {!!debugFields.length && }
); }; type DebugFieldItemProps = { fields: DebugField[]; }; const DebugFields = ({ fields }: DebugFieldItemProps) => { return ( {fields.map(field => { let value: any = field.value; if (field.error) { value = field.error.message; } else if (field.href) { value = {value}; } return ( ); })}
Name Value Url
{field.name} {value} {field.href ? {field.href} : ''}
); }; type DebugField = { name: string; error?: any; value?: string; href?: string; }; function makeDebugFields(derivedFields: DerivedFieldConfig[], debugText: string): DebugField[] { return derivedFields .filter(field => field.name && field.matcherRegex) .map(field => { try { const testMatch = debugText.match(field.matcherRegex); const value = testMatch && testMatch[1]; let link: LinkModel; if (field.url && value) { link = getLinksFromLogsField( { name: '', type: FieldType.string, values: new ArrayVector([value]), config: { links: [{ title: '', url: field.url }], }, }, 0 )[0].linkModel; } return { name: field.name, value: value || '', href: link && link.href, } as DebugField; } catch (error) { return { name: field.name, error, } as DebugField; } }); }