react-awesome-query-builder
Version:
User-friendly query builder for React. Please migrate to new @react-awesome-query-builder/* See https://github.com/ukrbublik/react-awesome-query-builder#migration-to-600
160 lines (147 loc) • 4.25 kB
JavaScript
import MaterialWidgets from "../../components/widgets/material";
import BasicConfig, {stringifyForDisplay} from "../basic";
import React from "react";
import {SqlString, spelEscape} from "../../utils/export";
const {
MaterialBooleanWidget,
MaterialTextWidget,
MaterialTextAreaWidget,
MaterialDateWidget,
MaterialTimeWidget,
MaterialDateTimeWidget,
MaterialMultiSelectWidget,
MaterialSelectWidget,
MaterialNumberWidget,
MaterialSliderWidget,
MaterialRangeWidget,
MaterialAutocompleteWidget,
MaterialFieldSelect,
MaterialFieldAutocomplete,
MaterialConjs,
MaterialSwitch,
MaterialButton,
MaterialButtonGroup,
MaterialValueSources,
MaterialProvider,
MaterialConfirm,
MaterialUseConfirm,
} = MaterialWidgets;
const settings = {
...BasicConfig.settings,
renderField: (props) => props?.customProps?.showSearch
? <MaterialFieldAutocomplete {...props} />
: <MaterialFieldSelect {...props} />,
renderOperator: (props) => <MaterialFieldSelect {...props} />,
renderFunc: (props) => <MaterialFieldSelect {...props} />,
renderConjs: (props) => <MaterialConjs {...props} />,
renderSwitch: (props) => <MaterialSwitch {...props} />,
renderButton: (props) => <MaterialButton {...props} />,
renderButtonGroup: (props) => <MaterialButtonGroup {...props} />,
renderValueSources: (props) => <MaterialValueSources {...props} />,
renderProvider: (props) => <MaterialProvider {...props} />,
renderConfirm: MaterialConfirm,
useConfirm: MaterialUseConfirm,
};
const widgets = {
...BasicConfig.widgets,
text: {
...BasicConfig.widgets.text,
factory: (props) => <MaterialTextWidget {...props} />,
},
textarea: {
...BasicConfig.widgets.textarea,
factory: (props) => <MaterialTextAreaWidget {...props} />,
},
number: {
...BasicConfig.widgets.number,
factory: (props) => <MaterialNumberWidget {...props} />,
},
multiselect: {
...BasicConfig.widgets.multiselect,
factory: (props) => {
return (props.asyncFetch || props.showSearch)
? <MaterialAutocompleteWidget multiple {...props} />
: <MaterialMultiSelectWidget {...props} />;
},
},
select: {
...BasicConfig.widgets.select,
factory: (props) => {
return (props.asyncFetch || props.showSearch)
? <MaterialAutocompleteWidget {...props} />
: <MaterialSelectWidget {...props} />;
},
},
slider: {
...BasicConfig.widgets.slider,
factory: (props) => <MaterialSliderWidget {...props} />,
},
boolean: {
...BasicConfig.widgets.boolean,
factory: (props) => <MaterialBooleanWidget {...props} />,
},
date: {
...BasicConfig.widgets.date,
factory: (props) => <MaterialDateWidget {...props} />,
},
time: {
...BasicConfig.widgets.time,
factory: (props) => <MaterialTimeWidget {...props} />,
},
datetime: {
...BasicConfig.widgets.datetime,
factory: (props) => <MaterialDateTimeWidget {...props} />,
},
rangeslider: {
type: "number",
jsType: "number",
valueSrc: "value",
factory: (props) => <MaterialRangeWidget {...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);
},
spelFormatValue: (val) => spelEscape(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_null",
"is_not_null",
],
}
},
},
};
export default {
...BasicConfig,
types,
widgets,
settings,
};