@rc-component/trigger 1.18.0 → 1.18.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -118,6 +118,7 @@ export default function useAlign(open, popupEle, target, placement, builtinPlace
118
118
  var originTop = popupElement.style.top;
119
119
  var originRight = popupElement.style.right;
120
120
  var originBottom = popupElement.style.bottom;
121
+ var originOverflow = popupElement.style.overflow;
121
122
 
122
123
  // Placement
123
124
  var placementInfo = _objectSpread(_objectSpread({}, builtinPlacements[placement]), popupAlign);
@@ -136,6 +137,7 @@ export default function useAlign(open, popupEle, target, placement, builtinPlace
136
137
  popupElement.style.top = '0';
137
138
  popupElement.style.right = 'auto';
138
139
  popupElement.style.bottom = 'auto';
140
+ popupElement.style.overflow = 'hidden';
139
141
 
140
142
  // Calculate align style, we should consider `transform` case
141
143
  var targetRect;
@@ -208,6 +210,7 @@ export default function useAlign(open, popupEle, target, placement, builtinPlace
208
210
  popupElement.style.top = originTop;
209
211
  popupElement.style.right = originRight;
210
212
  popupElement.style.bottom = originBottom;
213
+ popupElement.style.overflow = originOverflow;
211
214
  (_popupElement$parentE2 = popupElement.parentElement) === null || _popupElement$parentE2 === void 0 || _popupElement$parentE2.removeChild(placeholderElement);
212
215
 
213
216
  // Calculate scale
package/es/index.js CHANGED
@@ -12,7 +12,6 @@ import useId from "rc-util/es/hooks/useId";
12
12
  import useLayoutEffect from "rc-util/es/hooks/useLayoutEffect";
13
13
  import isMobile from "rc-util/es/isMobile";
14
14
  import * as React from 'react';
15
- import { flushSync } from 'react-dom';
16
15
  import Popup from "./Popup";
17
16
  import TriggerWrapper from "./TriggerWrapper";
18
17
  import TriggerContext from "./context";
@@ -164,15 +163,19 @@ export function generateTrigger() {
164
163
  }, [popupVisible]);
165
164
  var openRef = React.useRef(mergedOpen);
166
165
  openRef.current = mergedOpen;
166
+ var lastTriggerRef = React.useRef([]);
167
+ lastTriggerRef.current = [];
167
168
  var internalTriggerOpen = useEvent(function (nextOpen) {
169
+ var _lastTriggerRef$curre;
170
+ setMergedOpen(nextOpen);
171
+
168
172
  // Enter or Pointer will both trigger open state change
169
173
  // We only need take one to avoid duplicated change event trigger
170
- flushSync(function () {
171
- if (mergedOpen !== nextOpen) {
172
- setMergedOpen(nextOpen);
173
- onPopupVisibleChange === null || onPopupVisibleChange === void 0 || onPopupVisibleChange(nextOpen);
174
- }
175
- });
174
+ // Use `lastTriggerRef` to record last open type
175
+ if (((_lastTriggerRef$curre = lastTriggerRef.current[lastTriggerRef.current.length - 1]) !== null && _lastTriggerRef$curre !== void 0 ? _lastTriggerRef$curre : mergedOpen) !== nextOpen) {
176
+ lastTriggerRef.current.push(nextOpen);
177
+ onPopupVisibleChange === null || onPopupVisibleChange === void 0 || onPopupVisibleChange(nextOpen);
178
+ }
176
179
  });
177
180
 
178
181
  // Trigger for delay
@@ -126,6 +126,7 @@ function useAlign(open, popupEle, target, placement, builtinPlacements, popupAli
126
126
  var originTop = popupElement.style.top;
127
127
  var originRight = popupElement.style.right;
128
128
  var originBottom = popupElement.style.bottom;
129
+ var originOverflow = popupElement.style.overflow;
129
130
 
130
131
  // Placement
131
132
  var placementInfo = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, builtinPlacements[placement]), popupAlign);
@@ -144,6 +145,7 @@ function useAlign(open, popupEle, target, placement, builtinPlacements, popupAli
144
145
  popupElement.style.top = '0';
145
146
  popupElement.style.right = 'auto';
146
147
  popupElement.style.bottom = 'auto';
148
+ popupElement.style.overflow = 'hidden';
147
149
 
148
150
  // Calculate align style, we should consider `transform` case
149
151
  var targetRect;
@@ -216,6 +218,7 @@ function useAlign(open, popupEle, target, placement, builtinPlacements, popupAli
216
218
  popupElement.style.top = originTop;
217
219
  popupElement.style.right = originRight;
218
220
  popupElement.style.bottom = originBottom;
221
+ popupElement.style.overflow = originOverflow;
219
222
  (_popupElement$parentE2 = popupElement.parentElement) === null || _popupElement$parentE2 === void 0 || _popupElement$parentE2.removeChild(placeholderElement);
220
223
 
221
224
  // Calculate scale
package/lib/index.js CHANGED
@@ -20,7 +20,6 @@ var _useId = _interopRequireDefault(require("rc-util/lib/hooks/useId"));
20
20
  var _useLayoutEffect = _interopRequireDefault(require("rc-util/lib/hooks/useLayoutEffect"));
21
21
  var _isMobile = _interopRequireDefault(require("rc-util/lib/isMobile"));
22
22
  var React = _interopRequireWildcard(require("react"));
23
- var _reactDom = require("react-dom");
24
23
  var _Popup = _interopRequireDefault(require("./Popup"));
25
24
  var _TriggerWrapper = _interopRequireDefault(require("./TriggerWrapper"));
26
25
  var _context = _interopRequireDefault(require("./context"));
@@ -174,15 +173,19 @@ function generateTrigger() {
174
173
  }, [popupVisible]);
175
174
  var openRef = React.useRef(mergedOpen);
176
175
  openRef.current = mergedOpen;
176
+ var lastTriggerRef = React.useRef([]);
177
+ lastTriggerRef.current = [];
177
178
  var internalTriggerOpen = (0, _useEvent.default)(function (nextOpen) {
179
+ var _lastTriggerRef$curre;
180
+ setMergedOpen(nextOpen);
181
+
178
182
  // Enter or Pointer will both trigger open state change
179
183
  // We only need take one to avoid duplicated change event trigger
180
- (0, _reactDom.flushSync)(function () {
181
- if (mergedOpen !== nextOpen) {
182
- setMergedOpen(nextOpen);
183
- onPopupVisibleChange === null || onPopupVisibleChange === void 0 || onPopupVisibleChange(nextOpen);
184
- }
185
- });
184
+ // Use `lastTriggerRef` to record last open type
185
+ if (((_lastTriggerRef$curre = lastTriggerRef.current[lastTriggerRef.current.length - 1]) !== null && _lastTriggerRef$curre !== void 0 ? _lastTriggerRef$curre : mergedOpen) !== nextOpen) {
186
+ lastTriggerRef.current.push(nextOpen);
187
+ onPopupVisibleChange === null || onPopupVisibleChange === void 0 || onPopupVisibleChange(nextOpen);
188
+ }
186
189
  });
187
190
 
188
191
  // Trigger for delay
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rc-component/trigger",
3
- "version": "1.18.0",
3
+ "version": "1.18.2",
4
4
  "description": "base abstract trigger component for react",
5
5
  "engines": {
6
6
  "node": ">=8.x"