import React, { FC, useState } from 'react'; import { css, cx } from '@emotion/css'; import { GrafanaTheme2 } from '@grafana/data'; import { Button, Field, FieldArray, Form, HorizontalGroup, IconButton, Input, InputControl, MultiSelect, Select, Switch, useStyles2, } from '@grafana/ui'; import { AmRouteReceiver, FormAmRoute } from '../../types/amroutes'; import { emptyArrayFieldMatcher, mapMultiSelectValueToStrings, mapSelectValueToString, optionalPositiveInteger, stringToSelectableValue, stringsToSelectableValues, } from '../../utils/amroutes'; import { timeOptions } from '../../utils/time'; import { getFormStyles } from './formStyles'; import { matcherFieldOptions } from '../../utils/alertmanager'; export interface AmRoutesExpandedFormProps { onCancel: () => void; onSave: (data: FormAmRoute) => void; receivers: AmRouteReceiver[]; routes: FormAmRoute; } export const AmRoutesExpandedForm: FC = ({ onCancel, onSave, receivers, routes }) => { const styles = useStyles2(getStyles); const formStyles = useStyles2(getFormStyles); const [overrideGrouping, setOverrideGrouping] = useState(routes.groupBy.length > 0); const [overrideTimings, setOverrideTimings] = useState( !!routes.groupWaitValue || !!routes.groupIntervalValue || !!routes.repeatIntervalValue ); const [groupByOptions, setGroupByOptions] = useState(stringsToSelectableValues(routes.groupBy)); return (
{({ control, register, errors, setValue }) => ( <> {/* @ts-ignore-check: react-hook-form made me do this */} {/* @ts-ignore-check: react-hook-form made me do this */} {({ fields, append, remove }) => ( <>
Matching labels
{fields.map((field, index) => { const localPath = `object_matchers[${index}]`; return ( ( remove(index)} > Remove ); })}
)}
{/* @ts-ignore-check: react-hook-form made me do this */} ( )} control={control} name="groupWaitValue" rules={{ validate: optionalPositiveInteger, }} /> ( )} control={control} name="groupIntervalValue" rules={{ validate: optionalPositiveInteger, }} /> ( )} control={control} name="repeatIntervalValue" rules={{ validate: optionalPositiveInteger, }} /> (