useBubbleLock.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.default = useBubbleLock;
  7. var _react = _interopRequireDefault(require("react"));
  8. var _raf = _interopRequireDefault(require("rc-util/lib/raf"));
  9. /**
  10. * When click on the label,
  11. * the event will be stopped to prevent the label from being clicked twice.
  12. * label click -> input click -> label click again
  13. */
  14. function useBubbleLock(onOriginInputClick) {
  15. const labelClickLockRef = _react.default.useRef(null);
  16. const clearLock = () => {
  17. _raf.default.cancel(labelClickLockRef.current);
  18. labelClickLockRef.current = null;
  19. };
  20. const onLabelClick = () => {
  21. clearLock();
  22. labelClickLockRef.current = (0, _raf.default)(() => {
  23. labelClickLockRef.current = null;
  24. });
  25. };
  26. const onInputClick = e => {
  27. if (labelClickLockRef.current) {
  28. e.stopPropagation();
  29. clearLock();
  30. }
  31. onOriginInputClick === null || onOriginInputClick === void 0 ? void 0 : onOriginInputClick(e);
  32. };
  33. return [onLabelClick, onInputClick];
  34. }