UNPKG

4.94 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5var _typeof = require("@babel/runtime/helpers/typeof");
6
7Object.defineProperty(exports, "__esModule", {
8 value: true
9});
10exports["default"] = SingleNumber;
11
12var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
14var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
16var React = _interopRequireWildcard(require("react"));
17
18var _classnames = _interopRequireDefault(require("classnames"));
19
20function _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); }
21
22function _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; }
23
24function UnitNumber(_ref) {
25 var prefixCls = _ref.prefixCls,
26 value = _ref.value,
27 current = _ref.current,
28 _ref$offset = _ref.offset,
29 offset = _ref$offset === void 0 ? 0 : _ref$offset;
30 var style;
31
32 if (offset) {
33 style = {
34 position: 'absolute',
35 top: "".concat(offset, "00%"),
36 left: 0
37 };
38 }
39
40 return /*#__PURE__*/React.createElement("p", {
41 style: style,
42 className: (0, _classnames["default"])("".concat(prefixCls, "-only-unit"), {
43 current: current
44 })
45 }, value);
46}
47
48function getOffset(start, end, unit) {
49 var index = start;
50 var offset = 0;
51
52 while ((index + 10) % 10 !== end) {
53 index += unit;
54 offset += unit;
55 }
56
57 return offset;
58}
59
60function SingleNumber(props) {
61 var prefixCls = props.prefixCls,
62 originCount = props.count,
63 originValue = props.value;
64 var value = Number(originValue);
65 var count = Math.abs(originCount);
66
67 var _React$useState = React.useState(value),
68 _React$useState2 = (0, _slicedToArray2["default"])(_React$useState, 2),
69 prevValue = _React$useState2[0],
70 setPrevValue = _React$useState2[1];
71
72 var _React$useState3 = React.useState(count),
73 _React$useState4 = (0, _slicedToArray2["default"])(_React$useState3, 2),
74 prevCount = _React$useState4[0],
75 setPrevCount = _React$useState4[1]; // ============================= Events =============================
76
77
78 var onTransitionEnd = function onTransitionEnd() {
79 setPrevValue(value);
80 setPrevCount(count);
81 }; // Fallback if transition event not support
82
83
84 React.useEffect(function () {
85 var timeout = setTimeout(function () {
86 onTransitionEnd();
87 }, 1000);
88 return function () {
89 clearTimeout(timeout);
90 };
91 }, [value]); // ============================= Render =============================
92 // Render unit list
93
94 var unitNodes;
95 var offsetStyle;
96
97 if (prevValue === value || Number.isNaN(value) || Number.isNaN(prevValue)) {
98 // Nothing to change
99 unitNodes = [/*#__PURE__*/React.createElement(UnitNumber, (0, _extends2["default"])({}, props, {
100 key: value,
101 current: true
102 }))];
103 offsetStyle = {
104 transition: 'none'
105 };
106 } else {
107 unitNodes = []; // Fill basic number units
108
109 var end = value + 10;
110 var unitNumberList = [];
111
112 for (var index = value; index <= end; index += 1) {
113 unitNumberList.push(index);
114 } // Fill with number unit nodes
115
116
117 var prevIndex = unitNumberList.findIndex(function (n) {
118 return n % 10 === prevValue;
119 });
120 unitNodes = unitNumberList.map(function (n, index) {
121 var singleUnit = n % 10;
122 return /*#__PURE__*/React.createElement(UnitNumber, (0, _extends2["default"])({}, props, {
123 key: n,
124 value: singleUnit,
125 offset: index - prevIndex,
126 current: index === prevIndex
127 }));
128 }); // Calculate container offset value
129
130 var unit = prevCount < count ? 1 : -1;
131 offsetStyle = {
132 transform: "translateY(".concat(-getOffset(prevValue, value, unit), "00%)")
133 };
134 }
135
136 return /*#__PURE__*/React.createElement("span", {
137 className: "".concat(prefixCls, "-only"),
138 style: offsetStyle,
139 onTransitionEnd: onTransitionEnd
140 }, unitNodes);
141}
\No newline at end of file