UNPKG

@coocoon/react-awesome-query-builder

Version:

User-friendly query builder for React. Demo: https://ukrbublik.github.io/react-awesome-query-builder

158 lines (146 loc) 3.94 kB
import MuiWidgets from "../../components/widgets/mui"; import BasicConfig, {stringifyForDisplay} from "../basic"; import React from "react"; import {SqlString} from "../../utils/export"; const { MuiBooleanWidget, MuiTextWidget, MuiTextAreaWidget, MuiDateWidget, MuiTimeWidget, MuiDateTimeWidget, MuiMultiSelectWidget, MuiSelectWidget, MuiNumberWidget, MuiSliderWidget, MuiRangeWidget, MuiAutocompleteWidget, MuiFieldSelect, MuiFieldAutocomplete, MuiConjs, MuiSwitch, MuiButton, MuiButtonGroup, MuiValueSources, MuiProvider, MuiConfirm, MuiUseConfirm, } = MuiWidgets; const settings = { ...BasicConfig.settings, renderField: (props) => props?.customProps?.showSearch ? <MuiFieldAutocomplete {...props} /> : <MuiFieldSelect {...props} />, renderOperator: (props) => <MuiFieldSelect {...props} />, renderFunc: (props) => <MuiFieldSelect {...props} />, renderConjs: (props) => <MuiConjs {...props} />, renderSwitch: (props) => <MuiSwitch {...props} />, renderButton: (props) => <MuiButton {...props} />, renderButtonGroup: (props) => <MuiButtonGroup {...props} />, renderValueSources: (props) => <MuiValueSources {...props} />, renderProvider: (props) => <MuiProvider {...props} />, renderConfirm: MuiConfirm, useConfirm: MuiUseConfirm, }; const widgets = { ...BasicConfig.widgets, text: { ...BasicConfig.widgets.text, factory: (props) => <MuiTextWidget {...props} />, }, textarea: { ...BasicConfig.widgets.textarea, factory: (props) => <MuiTextAreaWidget {...props} />, }, number: { ...BasicConfig.widgets.number, factory: (props) => <MuiNumberWidget {...props} />, }, multiselect: { ...BasicConfig.widgets.multiselect, factory: (props) => { return (props.asyncFetch || props.showSearch) ? <MuiAutocompleteWidget multiple {...props} /> : <MuiMultiSelectWidget {...props} />; }, }, select: { ...BasicConfig.widgets.select, factory: (props) => { return (props.asyncFetch || props.showSearch) ? <MuiAutocompleteWidget {...props} /> : <MuiSelectWidget {...props} />; }, }, slider: { ...BasicConfig.widgets.slider, factory: (props) => <MuiSliderWidget {...props} />, }, boolean: { ...BasicConfig.widgets.boolean, factory: (props) => <MuiBooleanWidget {...props} />, }, date: { ...BasicConfig.widgets.date, factory: (props) => <MuiDateWidget {...props} />, }, time: { ...BasicConfig.widgets.time, factory: (props) => <MuiTimeWidget {...props} />, }, datetime: { ...BasicConfig.widgets.datetime, factory: (props) => <MuiDateTimeWidget {...props} />, }, rangeslider: { type: "number", jsType: "number", valueSrc: "value", factory: (props) => <MuiRangeWidget {...props} />, valueLabel: "Range", valuePlaceholder: "Select range", valueLabels: [ { label: "Number from", placeholder: "Enter number from" }, { label: "Number to", placeholder: "Enter number to" }, ], formatValue: (val, fieldDef, wgtDef, isForDisplay) => { return isForDisplay ? stringifyForDisplay(val) : JSON.stringify(val); }, sqlFormatValue: (val, fieldDef, wgtDef, op, opDef) => { return SqlString.escape(val); }, singleWidget: "slider", toJS: (val, fieldSettings) => (val), }, }; const types = { ...BasicConfig.types, number: { ...BasicConfig.types.number, widgets: { ...BasicConfig.types.number.widgets, rangeslider: { opProps: { between: { isSpecialRange: true, }, not_between: { isSpecialRange: true, } }, operators: [ "between", "not_between", "is_empty", "is_not_empty", ], } }, }, }; export default { ...BasicConfig, types, widgets, settings, };