@rc-component/trigger 3.7.0 → 3.7.1

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.
package/es/index.js CHANGED
@@ -16,6 +16,7 @@ import useWatch from "./hooks/useWatch";
16
16
  import useWinClick from "./hooks/useWinClick";
17
17
  import { getAlignPopupClassName } from "./util";
18
18
  import UniqueProvider from "./UniqueProvider";
19
+ import { useControlledState } from '@rc-component/util';
19
20
  export { UniqueProvider };
20
21
 
21
22
  // Removed Props List
@@ -138,10 +139,8 @@ export function generateTrigger(PortalComponent = Portal) {
138
139
  } : null;
139
140
 
140
141
  // ============================ Open ============================
141
- const [internalOpen, setInternalOpen] = React.useState(defaultPopupVisible || false);
142
-
143
- // Render still use props as first priority
144
- const mergedOpen = popupVisible ?? internalOpen;
142
+ const [internalOpen, setInternalOpen] = useControlledState(defaultPopupVisible || false, popupVisible);
143
+ const mergedOpen = internalOpen || false;
145
144
 
146
145
  // ========================== Children ==========================
147
146
  const child = React.useMemo(() => {
@@ -152,18 +151,8 @@ export function generateTrigger(PortalComponent = Portal) {
152
151
  }, [children, mergedOpen]);
153
152
  const originChildProps = child?.props || {};
154
153
 
155
- // We use effect sync here in case `popupVisible` back to `undefined`
156
- const setMergedOpen = useEvent(nextOpen => {
157
- if (openUncontrolled) {
158
- setInternalOpen(nextOpen);
159
- }
160
- });
161
-
162
154
  // Support ref
163
155
  const isOpen = useEvent(() => mergedOpen);
164
- useLayoutEffect(() => {
165
- setInternalOpen(popupVisible || false);
166
- }, [popupVisible]);
167
156
 
168
157
  // Extract common options for UniqueProvider
169
158
  const getUniqueOptions = useEvent((delay = 0) => ({
@@ -206,7 +195,7 @@ export function generateTrigger(PortalComponent = Portal) {
206
195
  const lastTriggerRef = React.useRef([]);
207
196
  lastTriggerRef.current = [];
208
197
  const internalTriggerOpen = useEvent(nextOpen => {
209
- setMergedOpen(nextOpen);
198
+ setInternalOpen(nextOpen);
210
199
 
211
200
  // Enter or Pointer will both trigger open state change
212
201
  // We only need take one to avoid duplicated change event trigger
package/lib/index.js CHANGED
@@ -29,6 +29,7 @@ var _useWatch = _interopRequireDefault(require("./hooks/useWatch"));
29
29
  var _useWinClick = _interopRequireDefault(require("./hooks/useWinClick"));
30
30
  var _util = require("./util");
31
31
  var _UniqueProvider = _interopRequireDefault(require("./UniqueProvider"));
32
+ var _util2 = require("@rc-component/util");
32
33
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
33
34
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
34
35
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -152,10 +153,8 @@ function generateTrigger(PortalComponent = _portal.default) {
152
153
  } : null;
153
154
 
154
155
  // ============================ Open ============================
155
- const [internalOpen, setInternalOpen] = React.useState(defaultPopupVisible || false);
156
-
157
- // Render still use props as first priority
158
- const mergedOpen = popupVisible ?? internalOpen;
156
+ const [internalOpen, setInternalOpen] = (0, _util2.useControlledState)(defaultPopupVisible || false, popupVisible);
157
+ const mergedOpen = internalOpen || false;
159
158
 
160
159
  // ========================== Children ==========================
161
160
  const child = React.useMemo(() => {
@@ -166,18 +165,8 @@ function generateTrigger(PortalComponent = _portal.default) {
166
165
  }, [children, mergedOpen]);
167
166
  const originChildProps = child?.props || {};
168
167
 
169
- // We use effect sync here in case `popupVisible` back to `undefined`
170
- const setMergedOpen = (0, _useEvent.default)(nextOpen => {
171
- if (openUncontrolled) {
172
- setInternalOpen(nextOpen);
173
- }
174
- });
175
-
176
168
  // Support ref
177
169
  const isOpen = (0, _useEvent.default)(() => mergedOpen);
178
- (0, _useLayoutEffect.default)(() => {
179
- setInternalOpen(popupVisible || false);
180
- }, [popupVisible]);
181
170
 
182
171
  // Extract common options for UniqueProvider
183
172
  const getUniqueOptions = (0, _useEvent.default)((delay = 0) => ({
@@ -220,7 +209,7 @@ function generateTrigger(PortalComponent = _portal.default) {
220
209
  const lastTriggerRef = React.useRef([]);
221
210
  lastTriggerRef.current = [];
222
211
  const internalTriggerOpen = (0, _useEvent.default)(nextOpen => {
223
- setMergedOpen(nextOpen);
212
+ setInternalOpen(nextOpen);
224
213
 
225
214
  // Enter or Pointer will both trigger open state change
226
215
  // We only need take one to avoid duplicated change event trigger
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rc-component/trigger",
3
- "version": "3.7.0",
3
+ "version": "3.7.1",
4
4
  "description": "base abstract trigger component for react",
5
5
  "engines": {
6
6
  "node": ">=8.x"