import React, { useState } from 'react'; import { Checkbox, CollapsableSection, ColorValueEditor, Field, HorizontalGroup, Input } from '@grafana/ui'; import { DashboardModel } from '../../state/DashboardModel'; import { AnnotationQuery, DataSourceInstanceSettings } from '@grafana/data'; import { DataSourcePicker, getDataSourceSrv } from '@grafana/runtime'; import { useAsync } from 'react-use'; import StandardAnnotationQueryEditor from 'app/features/annotations/components/StandardAnnotationQueryEditor'; import { AngularEditorLoader } from './AngularEditorLoader'; import { selectors } from '@grafana/e2e-selectors'; export const newAnnotation: AnnotationQuery = { name: 'New annotation', enable: true, datasource: null, iconColor: 'red', }; type Props = { editIdx: number; dashboard: DashboardModel; }; export const AnnotationSettingsEdit: React.FC = ({ editIdx, dashboard }) => { const [annotation, setAnnotation] = useState(editIdx !== null ? dashboard.annotations.list[editIdx] : newAnnotation); const { value: ds } = useAsync(() => { return getDataSourceSrv().get(annotation.datasource); }, [annotation.datasource]); const onUpdate = (annotation: AnnotationQuery) => { const list = [...dashboard.annotations.list]; list.splice(editIdx, 1, annotation); setAnnotation(annotation); dashboard.annotations.list = list; }; const onNameChange = (ev: React.FocusEvent) => { onUpdate({ ...annotation, name: ev.currentTarget.value, }); }; const onDataSourceChange = (ds: DataSourceInstanceSettings) => { onUpdate({ ...annotation, datasource: ds.name, }); }; const onChange = (ev: React.FocusEvent) => { const target = ev.currentTarget; onUpdate({ ...annotation, [target.name]: target.type === 'checkbox' ? target.checked : target.value, }); }; const onColorChange = (color: string) => { onUpdate({ ...annotation, iconColor: color, }); }; const isNewAnnotation = annotation.name === newAnnotation.name; return (
{ds?.annotations && ( )} {ds && !ds.annotations && }
); }; AnnotationSettingsEdit.displayName = 'AnnotationSettingsEdit';