1 | "use strict";
|
2 |
|
3 | var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4 |
|
5 | exports.__esModule = true;
|
6 | exports.toModifierMap = toModifierMap;
|
7 | exports.toModifierArray = toModifierArray;
|
8 | exports["default"] = void 0;
|
9 |
|
10 | var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
11 |
|
12 | var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
13 |
|
14 | var _react = require("react");
|
15 |
|
16 | var _useSafeState2 = _interopRequireDefault(require("@restart/hooks/useSafeState"));
|
17 |
|
18 | var _popper = require("./popper");
|
19 |
|
20 | var initialPopperStyles = {
|
21 | position: 'absolute',
|
22 | top: '0',
|
23 | left: '0',
|
24 | opacity: '0',
|
25 | pointerEvents: 'none'
|
26 | };
|
27 | var initialArrowStyles = {};
|
28 |
|
29 | function toModifierMap(modifiers) {
|
30 | var result = {};
|
31 |
|
32 | if (!Array.isArray(modifiers)) {
|
33 | return modifiers || result;
|
34 | }
|
35 |
|
36 |
|
37 | modifiers == null ? void 0 : modifiers.forEach(function (m) {
|
38 | result[m.name] = m;
|
39 | });
|
40 | return result;
|
41 | }
|
42 |
|
43 | function toModifierArray(map) {
|
44 | if (map === void 0) {
|
45 | map = {};
|
46 | }
|
47 |
|
48 | if (Array.isArray(map)) return map;
|
49 | return Object.keys(map).map(function (k) {
|
50 | map[k].name = k;
|
51 | return map[k];
|
52 | });
|
53 | }
|
54 |
|
55 |
|
56 |
|
57 |
|
58 |
|
59 |
|
60 |
|
61 |
|
62 |
|
63 |
|
64 |
|
65 |
|
66 |
|
67 |
|
68 |
|
69 |
|
70 |
|
71 | function usePopper(referenceElement, popperElement, _temp) {
|
72 | var _ref = _temp === void 0 ? {} : _temp,
|
73 | _ref$enabled = _ref.enabled,
|
74 | enabled = _ref$enabled === void 0 ? true : _ref$enabled,
|
75 | _ref$placement = _ref.placement,
|
76 | placement = _ref$placement === void 0 ? 'bottom' : _ref$placement,
|
77 | _ref$strategy = _ref.strategy,
|
78 | strategy = _ref$strategy === void 0 ? 'absolute' : _ref$strategy,
|
79 | _ref$eventsEnabled = _ref.eventsEnabled,
|
80 | eventsEnabled = _ref$eventsEnabled === void 0 ? true : _ref$eventsEnabled,
|
81 | userModifiers = _ref.modifiers,
|
82 | popperOptions = (0, _objectWithoutPropertiesLoose2["default"])(_ref, ["enabled", "placement", "strategy", "eventsEnabled", "modifiers"]);
|
83 |
|
84 | var popperInstanceRef = (0, _react.useRef)();
|
85 | var scheduleUpdate = (0, _react.useCallback)(function () {
|
86 | if (popperInstanceRef.current) {
|
87 | popperInstanceRef.current.update();
|
88 | }
|
89 | }, []);
|
90 |
|
91 | var _useSafeState = (0, _useSafeState2["default"])((0, _react.useState)({
|
92 | placement: placement,
|
93 | scheduleUpdate: scheduleUpdate,
|
94 | outOfBoundaries: false,
|
95 | styles: initialPopperStyles,
|
96 | arrowStyles: initialArrowStyles
|
97 | })),
|
98 | state = _useSafeState[0],
|
99 | setState = _useSafeState[1];
|
100 |
|
101 | var updateModifier = (0, _react.useMemo)(function () {
|
102 | return {
|
103 | name: 'updateStateModifier',
|
104 | enabled: true,
|
105 | phase: 'afterWrite',
|
106 | requires: ['computeStyles'],
|
107 | fn: function fn(data) {
|
108 | var _data$state$modifiers, _data$state$styles, _data$state$styles2;
|
109 |
|
110 | setState({
|
111 | scheduleUpdate: scheduleUpdate,
|
112 | outOfBoundaries: !!((_data$state$modifiers = data.state.modifiersData.hide) == null ? void 0 : _data$state$modifiers.isReferenceHidden),
|
113 | placement: data.state.placement,
|
114 | styles: (0, _extends2["default"])({}, (_data$state$styles = data.state.styles) == null ? void 0 : _data$state$styles.popper),
|
115 | arrowStyles: (0, _extends2["default"])({}, (_data$state$styles2 = data.state.styles) == null ? void 0 : _data$state$styles2.arrow),
|
116 | state: data.state
|
117 | });
|
118 | }
|
119 | };
|
120 | }, [scheduleUpdate, setState]);
|
121 | var modifiers = toModifierArray(userModifiers);
|
122 | var eventsModifier = modifiers.find(function (m) {
|
123 | return m.name === 'eventListeners';
|
124 | });
|
125 |
|
126 | if (!eventsModifier && eventsEnabled) {
|
127 | eventsModifier = {
|
128 | name: 'eventListeners',
|
129 | enabled: true
|
130 | };
|
131 | modifiers = [].concat(modifiers, [eventsModifier]);
|
132 | }
|
133 |
|
134 |
|
135 |
|
136 |
|
137 |
|
138 | (0, _react.useEffect)(function () {
|
139 | scheduleUpdate();
|
140 | }, [state.placement, scheduleUpdate]);
|
141 | (0, _react.useEffect)(function () {
|
142 | if (!popperInstanceRef.current || !enabled) return;
|
143 | popperInstanceRef.current.setOptions({
|
144 | placement: placement,
|
145 | strategy: strategy,
|
146 | modifiers: [].concat(modifiers, [updateModifier])
|
147 | });
|
148 |
|
149 | }, [strategy, placement, eventsModifier.enabled, updateModifier, enabled]);
|
150 | (0, _react.useEffect)(function () {
|
151 | if (!enabled || referenceElement == null || popperElement == null) {
|
152 | return undefined;
|
153 | }
|
154 |
|
155 | popperInstanceRef.current = (0, _popper.createPopper)(referenceElement, popperElement, (0, _extends2["default"])({}, popperOptions, {
|
156 | placement: placement,
|
157 | strategy: strategy,
|
158 | modifiers: [].concat(modifiers, [updateModifier])
|
159 | }));
|
160 | return function () {
|
161 | if (popperInstanceRef.current != null) {
|
162 | popperInstanceRef.current.destroy();
|
163 | popperInstanceRef.current = undefined;
|
164 | setState(function (s) {
|
165 | return (0, _extends2["default"])({}, s, {
|
166 | styles: initialPopperStyles,
|
167 | arrowStyles: initialArrowStyles
|
168 | });
|
169 | });
|
170 | }
|
171 | };
|
172 |
|
173 | }, [enabled, referenceElement, popperElement]);
|
174 | return state;
|
175 | }
|
176 |
|
177 | var _default = usePopper;
|
178 | exports["default"] = _default; |
\ | No newline at end of file |