import React, { useEffect, useState, ChangeEvent } from 'react'; import { getBackendSrv } from '@grafana/runtime'; import { Input, Tag, useStyles } from '@grafana/ui'; import Page from 'app/core/components/Page/Page'; import { useNavModel } from 'app/core/hooks/useNavModel'; import { css } from '@emotion/css'; import { GrafanaTheme } from '@grafana/data'; import { Rule, Output } from './types'; import { RuleModal } from './RuleModal'; function renderOutputTags(key: string, output?: Output): React.ReactNode { if (!output?.type) { return null; } if (output.multiple?.outputs?.length) { return output.multiple?.outputs.map((v, i) => renderOutputTags(`${key}-${i}`, v)); } return ; } export default function PipelineAdminPage() { const [rules, setRules] = useState([]); const [isOpen, setOpen] = useState(false); const [selectedRule, setSelectedRule] = useState(); const [defaultRules, setDefaultRules] = useState([]); const navModel = useNavModel('live-pipeline'); const [error, setError] = useState(); const styles = useStyles(getStyles); useEffect(() => { getBackendSrv() .get(`api/live/channel-rules`) .then((data) => { setRules(data.rules); setDefaultRules(data.rules); }) .catch((e) => { if (e.data) { setError(JSON.stringify(e.data, null, 2)); } }); }, []); const onRowClick = (event: any) => { const pattern = event.target.getAttribute('data-pattern'); const column = event.target.getAttribute('data-column'); console.log('show:', column); // setActiveTab(column); setSelectedRule(rules.filter((rule) => rule.pattern === pattern)[0]); setOpen(true); }; const onSearchQueryChange = (e: ChangeEvent) => { if (e.target.value) { setRules(rules.filter((rule) => rule.pattern.toLowerCase().includes(e.target.value.toLowerCase()))); console.log(e.target.value, rules); } else { setRules(defaultRules); } }; return ( {error && {error}} Pattern Converter Processor Output {rules.map((rule) => ( {rule.pattern} {rule.settings?.converter?.type} {rule.settings?.processor?.type} {renderOutputTags('out', rule.settings?.output)} ))} {isOpen && selectedRule && setOpen(false)} />} ); } const getStyles = (theme: GrafanaTheme) => { return { row: css` cursor: pointer; `, }; };
{error}