import { List } from 'immutable'; import { isString } from 'lodash'; import React from 'react'; import { BasicConfig, Config, JsonItem, JsonTree, Operator, Settings, SimpleField, Utils, ValueSource, Widgets, } from 'react-awesome-query-builder'; import { dateTime, toOption } from '@grafana/data'; import { Button, DateTimePicker, Input, Select } from '@grafana/ui'; const buttonLabels = { add: 'Add', remove: 'Remove', }; export const emptyInitValue: JsonItem = { id: Utils.uuid(), type: 'group' as const, children1: { [Utils.uuid()]: { type: 'rule', properties: { field: null, operator: null, value: [], valueSrc: [], }, }, }, }; export const emptyInitTree: JsonTree = { id: Utils.uuid(), type: 'group' as const, children1: { [Utils.uuid()]: { type: 'rule', properties: { field: null, operator: null, value: [], valueSrc: [], }, }, }, }; export const widgets: Widgets = { ...BasicConfig.widgets, text: { ...BasicConfig.widgets.text, factory: function TextInput(props) { return ( props?.setValue(e.currentTarget.value)} /> ); }, }, number: { ...BasicConfig.widgets.number, factory: function NumberInput(props) { return ( props?.setValue(Number.parseInt(e.currentTarget.value, 10))} /> ); }, }, datetime: { ...BasicConfig.widgets.datetime, factory: function DateTimeInput(props) { return ( { props?.setValue(e.format(BasicConfig.widgets.datetime.valueFormat)); }} date={dateTime(props?.value).utc()} /> ); }, }, }; export const settings: Settings = { ...BasicConfig.settings, canRegroup: false, maxNesting: 1, canReorder: false, showNot: false, addRuleLabel: buttonLabels.add, deleteLabel: buttonLabels.remove, renderConjs: function Conjunctions(conjProps) { return ( { // @ts-ignore const icon = fields[f.key].mainWidgetProps?.customProps?.icon; return { label: f.label, value: f.key, icon, }; })} value={fieldProps?.selectedKey} onChange={(val) => { fieldProps?.setField(val.label!); }} /> ); }, renderButton: function RAQBButton(buttonProps) { return (