UNPKG

@ant-design/react-native

Version:

基于蚂蚁金服移动设计规范的 React Native 组件库

1 lines 8.84 kB
"use client";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");var _typeof=require("@babel/runtime/helpers/typeof");Object.defineProperty(exports,"__esModule",{value:true});exports.Stepper=void 0;var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _miniDecimal=_interopRequireWildcard(require("@rc-component/mini-decimal"));var _useMergedState3=_interopRequireDefault(require("rc-util/es/hooks/useMergedState"));var _react=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _input=_interopRequireDefault(require("../input"));var _DisabledContext=_interopRequireDefault(require("../provider/DisabledContext"));var _HapticsContext=_interopRequireDefault(require("../provider/HapticsContext"));var _style=require("../style");var _style2=_interopRequireDefault(require("./style"));function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap();var cacheNodeInterop=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj;}if(obj===null||_typeof(obj)!=="object"&&typeof obj!=="function"){return{default:obj};}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj);}var newObj={};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc);}else{newObj[key]=obj[key];}}}newObj.default=obj;if(cache){cache.set(obj,newObj);}return newObj;}var __rest=this&&this.__rest||function(s,e){var t={};for(var p in s){if(Object.prototype.hasOwnProperty.call(s,p)&&e.indexOf(p)<0)t[p]=s[p];}if(s!=null&&typeof Object.getOwnPropertySymbols==="function")for(var i=0,p=Object.getOwnPropertySymbols(s);i<p.length;i++){if(e.indexOf(p[i])<0&&Object.prototype.propertyIsEnumerable.call(s,p[i]))t[p[i]]=s[p[i]];}return t;};function InnerStepper(props,ref){var contextDisabled=(0,_react.useContext)(_DisabledContext.default);var _a=props,inputValue=_a.value,_a$defaultValue=_a.defaultValue,defaultValue=_a$defaultValue===void 0?0:_a$defaultValue,onChange=_a.onChange,_a$disabled=_a.disabled,disabled=_a$disabled===void 0?contextDisabled:_a$disabled,_a$step=_a.step,step=_a$step===void 0?1:_a$step,max=_a.max,min=_a.min,digits=_a.digits,stringMode=_a.stringMode,formatter=_a.formatter,parser=_a.parser,allowEmpty=_a.allowEmpty,inputStyle=_a.inputStyle,styles=_a.styles,minusButtonProps=_a.minusButtonProps,plusButtonProps=_a.plusButtonProps,restInputProps=__rest(_a,["value","defaultValue","onChange","disabled","step","max","min","digits","stringMode","formatter","parser","allowEmpty","inputStyle","styles","minusButtonProps","plusButtonProps"]);var fixedValue=(0,_react.useCallback)(function(value){return(digits!==undefined?(0,_miniDecimal.toFixed)(value.toString(),'.',digits):value).toString();},[digits]);var getValueAsType=function getValueAsType(value){return stringMode?value.toString():value.toNumber();};var parseValue=function parseValue(text){if(text===''){return null;}if(parser){return String(parser(text));}var decimal=(0,_miniDecimal.default)(text);return decimal.isInvalidate()?null:decimal.toString();};var formatValue=(0,_react.useCallback)(function(value){if(value===null){return'';}return formatter?formatter(value):fixedValue(value);},[fixedValue,formatter]);var _useMergedState=(0,_useMergedState3.default)(defaultValue,{value:inputValue,onChange:onChange}),_useMergedState2=(0,_slicedToArray2.default)(_useMergedState,2),mergedValue=_useMergedState2[0],setMergedValue=_useMergedState2[1];function setValueWithCheck(nextValue){if(nextValue.isNaN()){return;}var target=nextValue;if(min!==undefined){var minDecimal=(0,_miniDecimal.default)(min);if(target.lessEquals(minDecimal)){target=minDecimal;}}if(max!==undefined){var maxDecimal=(0,_miniDecimal.default)(max);if(maxDecimal.lessEquals(target)){target=maxDecimal;}}if(digits!==undefined){target=(0,_miniDecimal.default)(fixedValue(getValueAsType(target)));}setMergedValue(getValueAsType(target));}var onHaptics=(0,_react.useContext)(_HapticsContext.default);var plusDisabled=(0,_react.useMemo)(function(){if(disabled){return true;}if(mergedValue===null){return false;}if(max!==undefined){return mergedValue>=max;}return false;},[disabled,max,mergedValue]);var minusDisabled=(0,_react.useMemo)(function(){if(disabled){return true;}if(mergedValue===null){return false;}if(min!==undefined){return mergedValue<=min;}return false;},[disabled,min,mergedValue]);var reducer=function reducer(state,action){if(action.type==='setInputValue'){return{value:action.payload};}if(action.type==='plus'&&plusDisabled||action.type==='minus'&&minusDisabled){return state;}onHaptics===null||onHaptics===void 0?void 0:onHaptics('stepper');var stepValue=(0,_miniDecimal.default)(step);if(action.type==='minus'){stepValue=stepValue.negate();}setValueWithCheck((0,_miniDecimal.default)(mergedValue!==null&&mergedValue!==void 0?mergedValue:0).add(stepValue.toString()));return state;};var _useReducer=(0,_react.useReducer)(reducer,{value:formatValue(mergedValue)}),_useReducer2=(0,_slicedToArray2.default)(_useReducer,2),state=_useReducer2[0],dispatch=_useReducer2[1];var handleInputChange=function handleInputChange(v){dispatch({type:'setInputValue',payload:v});var valueStr=parseValue(v);if(valueStr===null){if(allowEmpty){setMergedValue(null);}else{setMergedValue(defaultValue);}}else{setValueWithCheck((0,_miniDecimal.default)(valueStr));}};var _useState=(0,_react.useState)(false),_useState2=(0,_slicedToArray2.default)(_useState,2),focused=_useState2[0],setFocused=_useState2[1];function triggerFocus(nextFocus){setFocused(nextFocus);if(nextFocus){dispatch({type:'setInputValue',payload:mergedValue!==null&&mergedValue!==undefined?String(mergedValue):''});}}(0,_react.useEffect)(function(){if(!focused){dispatch({type:'setInputValue',payload:formatValue(mergedValue)});}},[focused,mergedValue,digits,formatValue,dispatch]);var handleMinus=function handleMinus(){dispatch({type:'minus'});};var handlePlus=function handlePlus(){dispatch({type:'plus'});};var timer=(0,_react.useRef)();var onLongPressMinus=function onLongPressMinus(){var time=arguments.length>0&&arguments[0]!==undefined?arguments[0]:1000;dispatch({type:'minus'});timer.current=setTimeout(function(){return onLongPressMinus(time-400);},Math.max(time,100));};var onLongPressPlus=function onLongPressPlus(){var time=arguments.length>0&&arguments[0]!==undefined?arguments[0]:1000;dispatch({type:'plus'});timer.current=setTimeout(function(){return onLongPressPlus(time-400);},Math.max(time,100));};var onPressOut=function onPressOut(){timer.current&&clearTimeout(timer.current);};(0,_react.useEffect)(function(){return function(){onPressOut();};},[]);var ss=(0,_style.useTheme)({styles:styles,themeStyles:_style2.default});var theme=(0,_react.useContext)(_style.ThemeContext);return _react.default.createElement(_input.default,(0,_extends2.default)({ref:ref,inputStyle:[inputStyle,disabled&&ss.inputDisabled],styles:ss,selectTextOnFocus:true},restInputProps,{disabled:disabled,value:state.value,onChangeText:function onChangeText(val){disabled||handleInputChange(val);},onFocus:function onFocus(e){var _a;triggerFocus(true);(_a=props.onFocus)===null||_a===void 0?void 0:_a.call(props,e);},onBlur:function onBlur(e){var _a;triggerFocus(false);(_a=props.onBlur)===null||_a===void 0?void 0:_a.call(props,e);},prefix:_react.default.createElement(_reactNative.TouchableHighlight,(0,_extends2.default)({style:[ss.stepWrap,minusDisabled&&ss.stepDisabled],onPress:handleMinus,onLongPress:function onLongPress(){return onLongPressMinus();},onPressOut:onPressOut,disabled:minusDisabled,activeOpacity:1,underlayColor:theme.fill_tap,children:_react.default.createElement(_reactNative.Text,{style:[ss.stepText,minusDisabled&&ss.disabledStepTextColor]},"-")},minusButtonProps)),suffix:_react.default.createElement(_reactNative.TouchableHighlight,(0,_extends2.default)({style:[ss.stepWrap,plusDisabled&&ss.stepDisabled],onPress:handlePlus,onLongPress:function onLongPress(){return onLongPressPlus();},onPressOut:onPressOut,disabled:plusDisabled,activeOpacity:1,underlayColor:theme.fill_tap,children:_react.default.createElement(_reactNative.Text,{style:[ss.stepText,plusDisabled&&ss.disabledStepTextColor]},"+")},plusButtonProps))}));}var Stepper=(0,_react.forwardRef)(InnerStepper);exports.Stepper=Stepper;