UNPKG

@react-awesome-query-builder/mui

Version:
165 lines (163 loc) 5.7 kB
import _extends from "@babel/runtime/helpers/extends"; import _typeof from "@babel/runtime/helpers/typeof"; import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties"; import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray"; import _slicedToArray from "@babel/runtime/helpers/slicedToArray"; var _excluded = ["width"]; import React, { useEffect } from "react"; import Slider from "@mui/material/Slider"; import TextField from "@mui/material/TextField"; import FormControl from "@mui/material/FormControl"; export default (function (props) { var config = props.config, placeholders = props.placeholders, customProps = props.customProps, value = props.value, setValue = props.setValue, min = props.min, max = props.max, step = props.step, marks = props.marks, readonly = props.readonly, textSeparators = props.textSeparators; var defaultSliderWidth = config.settings.defaultSliderWidth; useEffect(function () { var _ref = props.value || [undefined, undefined], _ref2 = _slicedToArray(_ref, 2), valueFrom = _ref2[0], valueTo = _ref2[1]; if (props.value && (valueFrom == undefined || valueTo == undefined)) { // happens if we changed op from '==' to 'between' // (I know, timeout is dirty hack..) setTimeout(function () { var oneValue = valueFrom || valueTo; var value = [oneValue, oneValue]; setValue(value); }, 1); } }, []); var handleSliderChange = function handleSliderChange(_e, newValues) { setValue(newValues); }; var handleInputChangeFrom = function handleInputChangeFrom(e) { // TIP: need to use props.value instead of value var valueFrom = e.target.value; if (valueFrom === "" || valueFrom == null) valueFrom = undefined;else valueFrom = Number(valueFrom); var value = props.value ? _toConsumableArray(props.value) : [undefined, undefined]; value[0] = valueFrom; setValue(value); }; var handleInputChangeTo = function handleInputChangeTo(e) { var valueTo = e.target.value; if (valueTo === "" || valueTo == null) valueTo = undefined;else valueTo = Number(valueTo); var value = props.value ? _toConsumableArray(props.value) : [undefined, undefined]; value[1] = valueTo; setValue(value); }; var handleInputBlur = function handleInputBlur() { // TIP: Fix if typed value out of range in inputs if (!value) return; if (value[0] < min) { setValue([min, value[1]]); } else if (value[1] > max) { setValue([value[0], max]); } }; var _ref3 = customProps || {}, width = _ref3.width, rest = _objectWithoutProperties(_ref3, _excluded); var customInputProps = rest.input || {}; var customSliderProps = rest.slider || rest; // marks example: { 0: "0%", 100: React.createElement('strong', null, "100%") } var muiMarks = marks ? Object.keys(marks).map(function (v) { return { value: Number(v), label: _typeof(marks[v]) === "object" || typeof marks[v] === "undefined" ? marks[v] : /*#__PURE__*/React.createElement("p", null, marks[v]) }; }) : false; // TIP: Can't pass undefined to MUI, cause it means uncontrolled component use. // For empty value input needs "", slider needs null or 0, but null will cause problems with range mode var sliderValue = value ? _toConsumableArray(value) : [undefined, undefined]; var _sliderValue = _slicedToArray(sliderValue, 2), valueFrom = _sliderValue[0], valueTo = _sliderValue[1]; if (valueFrom == undefined) { valueFrom = ""; sliderValue[0] = 0; } if (valueTo == undefined) { valueTo = ""; sliderValue[1] = 0; } var FromInputCmp = /*#__PURE__*/React.createElement(TextField, _extends({ variant: "standard", type: "number", value: valueFrom, placeholder: placeholders[0], InputProps: { readOnly: readonly }, inputProps: { min: min, max: max, step: step }, disabled: readonly, onChange: handleInputChangeFrom, onBlur: handleInputBlur, size: "small" }, customInputProps)); var ToInputCmp = /*#__PURE__*/React.createElement(TextField, _extends({ variant: "standard", type: "number", value: valueTo, placeholder: placeholders[1], InputProps: { readOnly: readonly }, inputProps: { min: min, max: max, step: step }, disabled: readonly, onChange: handleInputChangeTo, onBlur: handleInputBlur, size: "small" }, customInputProps)); var SliderCmp = /*#__PURE__*/React.createElement(Slider, _extends({ value: sliderValue, onChange: handleSliderChange, disabled: readonly, min: min, max: max, step: step, marks: muiMarks, valueLabelDisplay: "auto", size: "small" }, customSliderProps)); var stylesWrapper = { display: "inline-flex", flexWrap: "wrap" }; var stylesInputWrapper = { marginLeft: "5px" }; var stylesSliderWrapper = { marginLeft: "5px", paddingLeft: "12px", marginBottom: muiMarks && "-16px", width: width || defaultSliderWidth }; return /*#__PURE__*/React.createElement(FormControl, null, /*#__PURE__*/React.createElement("div", { style: stylesWrapper }, /*#__PURE__*/React.createElement("div", { style: stylesInputWrapper }, FromInputCmp), /*#__PURE__*/React.createElement("div", { className: "widget--sep" }, /*#__PURE__*/React.createElement("span", null, textSeparators[1])), /*#__PURE__*/React.createElement("div", { style: stylesInputWrapper }, ToInputCmp), /*#__PURE__*/React.createElement("div", { style: stylesSliderWrapper }, SliderCmp))); });