UNPKG

@appbuckets/react-ui

Version:
262 lines (255 loc) 7.13 kB
'use strict'; var tslib = require('tslib'); var React = require('react'); var clsx = require('clsx'); var RCSlider = require('rc-slider'); var reactUiCore = require('@appbuckets/react-ui-core'); var useField = require('../hooks/useField.js'); var Popup = require('../Popup/Popup.js'); var customHook = require('../utils/customHook.js'); require('../BucketTheme/BucketTheme.js'); var BucketContext = require('../BucketTheme/BucketContext.js'); var Field = require('../Field/Field.js'); function _interopDefaultLegacy(e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; } function _interopNamespace(e) { if (e && e.__esModule) return e; var n = Object.create(null); if (e) { Object.keys(e).forEach(function (k) { if (k !== 'default') { var d = Object.getOwnPropertyDescriptor(e, k); Object.defineProperty( n, k, d.get ? d : { enumerable: true, get: function () { return e[k]; }, } ); } }); } n['default'] = e; return Object.freeze(n); } var React__namespace = /*#__PURE__*/ _interopNamespace(React); var clsx__default = /*#__PURE__*/ _interopDefaultLegacy(clsx); var RCSlider__default = /*#__PURE__*/ _interopDefaultLegacy(RCSlider); /* -------- * Component Definition * -------- */ var Slider = function (receivedProps) { /** Get component props */ var props = BucketContext.useWithDefaultProps('slider', receivedProps); var _a = customHook.useSharedClassName(props), className = _a.className, _b = _a.rest, /** Strict Slider Props */ userDefinedDefaultValue = _b.defaultValue, userDefinedOnAfterChangeHandler = _b.onAfterChange, userDefinedOnBeforeChangeHandler = _b.onBeforeChange, userDefinedOnBlurHandler = _b.onBlur, userDefinedOnChangeHandler = _b.onChange, userDefinedOnFocusHandler = _b.onFocus; _b.tabIndex; var tooltip = _b.tooltip, userDefinedValue = _b.value, /** Ported props */ draggableTrack = _b.draggableTrack, dots = _b.dots, min = _b.min, marks = _b.marks, max = _b.max, step = _b.step, vertical = _b.vertical, included = _b.included, reverse = _b.reverse, startPoint = _b.startPoint, /** All other slider props */ rawRest = tslib.__rest(_b, [ 'defaultValue', 'onAfterChange', 'onBeforeChange', 'onBlur', 'onChange', 'onFocus', 'tabIndex', 'tooltip', 'value', 'draggableTrack', 'dots', 'min', 'marks', 'max', 'step', 'vertical', 'included', 'reverse', 'startPoint', ]); var _c = tslib.__read(customHook.useSplitStateClassName(rawRest), 1), stateClassName = _c[0]; // ---- // Build Field and Helpers // ---- var _d = useField.useField(rawRest), fieldRef = _d.fieldRef, fieldProps = _d.fieldProps; _d.addClassesToField; _d.removeClassesFromField; var helpers = tslib.__rest(_d, [ 'fieldRef', 'fieldProps', 'addClassesToField', 'removeClassesFromField', ]); var disabled = fieldProps.disabled, readOnly = fieldProps.readOnly, required = fieldProps.required; // ---- // AutoControlled Value State // ---- var _e = tslib.__read( reactUiCore.useAutoControlledValue(0, { prop: userDefinedValue, defaultProp: userDefinedDefaultValue, }), 2 ), value = _e[0], trySetValue = _e[1]; // ---- // Build Component Classes // ---- var classes = clsx__default['default']( { required: required, disabled: disabled, 'max-reached': value === max, 'min-reached': value === min, }, stateClassName, className ); // ---- // Internal Props // ---- var canSlide = !disabled && !readOnly; // ---- // Internal Handlers // ---- var handleSliderBeforeChange = function () { /** If slider can't move, return */ if (!canSlide) { return; } /** Set helpers */ helpers.setFieldClicked(); /** Call user defined handler if exists */ if (typeof userDefinedOnBeforeChangeHandler === 'function') { userDefinedOnBeforeChangeHandler( null, tslib.__assign(tslib.__assign({}, props), { value: value }) ); } }; var handleSliderChange = function (newValue) { /** If slider can't move, return */ if (!canSlide || Array.isArray(newValue)) { return; } /** Call user defined handler */ if (typeof userDefinedOnChangeHandler === 'function') { userDefinedOnChangeHandler( null, tslib.__assign(tslib.__assign({}, props), { value: newValue }) ); } /** Try to set the new value */ trySetValue(newValue); }; var handleSliderAfterChange = function (newValue) { /** If slider can't move, return */ if (!canSlide || Array.isArray(newValue)) { return; } /** If value has changed, set helpers */ if (newValue !== value) { helpers.setFieldChanged(); } /** Call user defined handler */ if (typeof userDefinedOnAfterChangeHandler === 'function') { userDefinedOnAfterChangeHandler( null, tslib.__assign(tslib.__assign({}, props), { value: newValue }) ); } /** Try to set the new value */ trySetValue(newValue); }; var handleSliderFocus = function (e) { helpers.setFieldFocused(); if (typeof userDefinedOnFocusHandler === 'function') { userDefinedOnFocusHandler(e, props); } }; var handleSliderBlur = function (e) { helpers.setFieldBlurred(); if (typeof userDefinedOnBlurHandler === 'function') { userDefinedOnBlurHandler(e, props); } }; // ---- // Build Component Handler // ---- var handle = function (node, renderProps) { /** If no tooltip exists, return the handler */ if (!tooltip || renderProps.dragging) { return node; } /** Set tooltip text */ var tooltipText = typeof tooltip === 'function' ? tooltip(renderProps.value) : value; /** Return wrapped handler */ return React__namespace.createElement(Popup, { content: tooltipText, trigger: node, updateDependencies: [renderProps.value], }); }; // ---- // Component Render // ---- return React__namespace.createElement( Field, tslib.__assign({ ref: fieldRef }, fieldProps, { contentType: 'slider' }), React__namespace.createElement(RCSlider__default['default'], { draggableTrack: draggableTrack, dots: dots, min: min, marks: marks, max: max, step: step, vertical: vertical, included: included, reverse: reverse, startPoint: startPoint, className: classes, value: value, handleRender: handle, onAfterChange: handleSliderAfterChange, onBeforeChange: handleSliderBeforeChange, onBlur: handleSliderBlur, onChange: handleSliderChange, onFocus: handleSliderFocus, }) ); }; Slider.displayName = 'Slider'; module.exports = Slider;