amis-rpc-design/node_modules/rc-picker/lib/hooks/useRangeOpen.js

118 lines
5.4 KiB
JavaScript
Raw Normal View History

2023-10-07 19:42:30 +08:00
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = useRangeOpen;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _rcUtil = require("rc-util");
var _useEvent = _interopRequireDefault(require("rc-util/lib/hooks/useEvent"));
var _raf = _interopRequireDefault(require("rc-util/lib/raf"));
var React = _interopRequireWildcard(require("react"));
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; }
/**
* 1. Click input to show picker
* 2. Calculate next open index
*
* If click `confirm`:
* 3. Hide current picker
* 4. Open next index picker if exist
*
* If not `changeOnBlur` and click outside:
* 3. Hide picker
*
* If `changeOnBlur` and click outside:
* 3. Hide current picker
* 4. Open next index picker if exist
*/
/**
* Auto control of open state
*/
function useRangeOpen(defaultOpen, open, activePickerIndex, changeOnBlur, needConfirmButton, startInputRef, endInputRef, startSelectedValue, endSelectedValue, disabled, onOpenChange) {
var _React$useState = React.useState(false),
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
firstTimeOpen = _React$useState2[0],
setFirstTimeOpen = _React$useState2[1];
var _useMergedState = (0, _rcUtil.useMergedState)(defaultOpen || false, {
value: open
}),
_useMergedState2 = (0, _slicedToArray2.default)(_useMergedState, 2),
afferentOpen = _useMergedState2[0],
setAfferentOpen = _useMergedState2[1];
var _useMergedState3 = (0, _rcUtil.useMergedState)(defaultOpen || false, {
value: open,
onChange: function onChange(nextOpen) {
onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(nextOpen);
}
}),
_useMergedState4 = (0, _slicedToArray2.default)(_useMergedState3, 2),
mergedOpen = _useMergedState4[0],
setMergedOpen = _useMergedState4[1];
var _useMergedState5 = (0, _rcUtil.useMergedState)(0, {
value: activePickerIndex
}),
_useMergedState6 = (0, _slicedToArray2.default)(_useMergedState5, 2),
mergedActivePickerIndex = _useMergedState6[0],
setMergedActivePickerIndex = _useMergedState6[1];
var _React$useState3 = React.useState(null),
_React$useState4 = (0, _slicedToArray2.default)(_React$useState3, 2),
nextActiveIndex = _React$useState4[0],
setNextActiveIndex = _React$useState4[1];
React.useEffect(function () {
if (mergedOpen) {
setFirstTimeOpen(true);
}
}, [mergedOpen]);
var queryNextIndex = function queryNextIndex(index) {
return index === 0 ? 1 : 0;
};
var triggerOpen = (0, _useEvent.default)(function (nextOpen, index, source) {
if (index === false) {
// Only when `nextOpen` is false and no need open to next index
setMergedOpen(nextOpen);
} else if (nextOpen) {
setMergedActivePickerIndex(index);
setMergedOpen(nextOpen);
var nextIndex = queryNextIndex(index);
// Record next open index
if (!mergedOpen ||
// Also set next index if next is empty
![startSelectedValue, endSelectedValue][nextIndex]) {
setNextActiveIndex(nextIndex);
} else {
setFirstTimeOpen(false);
if (nextActiveIndex !== null) {
setNextActiveIndex(null);
}
}
} else if (source === 'confirm' || source === 'blur' && changeOnBlur) {
// dateTime mode does not need help getting the index
var customNextActiveIndex = afferentOpen && !needConfirmButton ? queryNextIndex(index) : nextActiveIndex;
if (customNextActiveIndex !== null) {
setFirstTimeOpen(false);
setMergedActivePickerIndex(customNextActiveIndex);
}
setNextActiveIndex(null);
// Focus back
if (customNextActiveIndex !== null && !disabled[customNextActiveIndex]) {
(0, _raf.default)(function () {
var _ref$current;
var ref = [startInputRef, endInputRef][customNextActiveIndex];
(_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.focus();
});
} else {
setMergedOpen(false);
}
} else {
setMergedOpen(false);
setAfferentOpen(false);
}
});
return [mergedOpen, mergedActivePickerIndex, firstTimeOpen, triggerOpen];
}