@atlaskit/reactions 22.2.6 → 22.2.7
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/CHANGELOG.md +7 -0
- package/dist/cjs/components/ReactionPicker/ReactionPicker.js +44 -34
- package/dist/cjs/components/ReactionPicker/RepositionOnUpdate.js +34 -0
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/components/ReactionPicker/ReactionPicker.js +38 -26
- package/dist/es2019/components/ReactionPicker/RepositionOnUpdate.js +24 -0
- package/dist/es2019/version.json +1 -1
- package/dist/esm/components/ReactionPicker/ReactionPicker.js +43 -33
- package/dist/esm/components/ReactionPicker/RepositionOnUpdate.js +23 -0
- package/dist/esm/version.json +1 -1
- package/dist/types/components/ReactionPicker/RepositionOnUpdate.d.ts +13 -0
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# @atlaskit/reactions
|
|
2
2
|
|
|
3
|
+
## 22.2.7
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`419eaff2c03`](https://bitbucket.org/atlassian/atlassian-frontend/commits/419eaff2c03) - fix focus trap not deactivated issue in reaction picker
|
|
8
|
+
- Updated dependencies
|
|
9
|
+
|
|
3
10
|
## 22.2.6
|
|
4
11
|
|
|
5
12
|
### Patch Changes
|
|
@@ -21,6 +21,7 @@ var _shared = require("../../shared");
|
|
|
21
21
|
var _hooks = require("../../hooks");
|
|
22
22
|
var styles = _interopRequireWildcard(require("./styles"));
|
|
23
23
|
var _useFocusTrap = require("../../hooks/useFocusTrap");
|
|
24
|
+
var _RepositionOnUpdate = require("./RepositionOnUpdate");
|
|
24
25
|
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); }
|
|
25
26
|
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; }
|
|
26
27
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
@@ -92,16 +93,13 @@ var ReactionPicker = /*#__PURE__*/_react.default.memo(function (props) {
|
|
|
92
93
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
93
94
|
triggerRef = _useState2[0],
|
|
94
95
|
setTriggerRef = _useState2[1];
|
|
95
|
-
|
|
96
|
-
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
97
|
-
popupRef = _useState4[0],
|
|
98
|
-
setPopupRef = _useState4[1];
|
|
96
|
+
|
|
99
97
|
/**
|
|
100
98
|
* Container <div /> reference (used by custom hook to detect click outside)
|
|
101
99
|
*/
|
|
102
100
|
var wrapperRef = (0, _react.useRef)(null);
|
|
103
101
|
var updatePopper = (0, _react.useRef)();
|
|
104
|
-
var
|
|
102
|
+
var _useState3 = (0, _react.useState)({
|
|
105
103
|
/**
|
|
106
104
|
* Show the picker floating panel
|
|
107
105
|
*/
|
|
@@ -111,9 +109,9 @@ var ReactionPicker = /*#__PURE__*/_react.default.memo(function (props) {
|
|
|
111
109
|
*/
|
|
112
110
|
showFullPicker: !!allowAllEmojis && Array.isArray(pickerQuickReactionEmojiIds) && pickerQuickReactionEmojiIds.length === 0
|
|
113
111
|
}),
|
|
114
|
-
|
|
115
|
-
settings =
|
|
116
|
-
setSettings =
|
|
112
|
+
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
113
|
+
settings = _useState4[0],
|
|
114
|
+
setSettings = _useState4[1];
|
|
117
115
|
|
|
118
116
|
/**
|
|
119
117
|
* Custom hook triggers when user clicks outside the reactions picker
|
|
@@ -128,14 +126,6 @@ var ReactionPicker = /*#__PURE__*/_react.default.memo(function (props) {
|
|
|
128
126
|
}
|
|
129
127
|
}, true, settings.isOpen);
|
|
130
128
|
|
|
131
|
-
/**
|
|
132
|
-
* add focus lock to popup
|
|
133
|
-
*/
|
|
134
|
-
(0, _useFocusTrap.useFocusTrap)({
|
|
135
|
-
initialFocusRef: null,
|
|
136
|
-
targetRef: popupRef
|
|
137
|
-
});
|
|
138
|
-
|
|
139
129
|
/**
|
|
140
130
|
* Event callback when the picker is closed
|
|
141
131
|
* @param _id Optional id if an emoji button was selected or undefineed if was clicked outside the picker
|
|
@@ -229,14 +219,44 @@ var ReactionPicker = /*#__PURE__*/_react.default.memo(function (props) {
|
|
|
229
219
|
tooltipContent: settings.isOpen ? null : tooltipContent
|
|
230
220
|
})
|
|
231
221
|
);
|
|
232
|
-
}), settings.isOpen && (0, _react2.jsx)(
|
|
222
|
+
}), settings.isOpen && (0, _react2.jsx)(PopperWrapper, {
|
|
223
|
+
settings: settings
|
|
224
|
+
}, settings.showFullPicker ? (0, _react2.jsx)(_picker.EmojiPicker, {
|
|
225
|
+
emojiProvider: emojiProvider,
|
|
226
|
+
onSelection: onEmojiSelected,
|
|
227
|
+
size: emojiPickerSize
|
|
228
|
+
}) : (0, _react2.jsx)("div", {
|
|
229
|
+
css: styles.contentStyle
|
|
230
|
+
}, (0, _react2.jsx)(_Selector.Selector, {
|
|
231
|
+
emojiProvider: emojiProvider,
|
|
232
|
+
onSelection: onEmojiSelected,
|
|
233
|
+
showMore: allowAllEmojis,
|
|
234
|
+
onMoreClick: onSelectMoreClick,
|
|
235
|
+
pickerQuickReactionEmojiIds: pickerQuickReactionEmojiIds
|
|
236
|
+
})))));
|
|
237
|
+
});
|
|
238
|
+
exports.ReactionPicker = ReactionPicker;
|
|
239
|
+
var PopperWrapper = function PopperWrapper(props) {
|
|
240
|
+
var settings = props.settings,
|
|
241
|
+
children = props.children;
|
|
242
|
+
var _useState5 = (0, _react.useState)(null),
|
|
243
|
+
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
|
|
244
|
+
popupRef = _useState6[0],
|
|
245
|
+
setPopupRef = _useState6[1];
|
|
246
|
+
/**
|
|
247
|
+
* add focus lock to popup
|
|
248
|
+
*/
|
|
249
|
+
(0, _useFocusTrap.useFocusTrap)({
|
|
250
|
+
initialFocusRef: null,
|
|
251
|
+
targetRef: popupRef
|
|
252
|
+
});
|
|
253
|
+
return (0, _react2.jsx)(_popper.Popper, {
|
|
233
254
|
placement: "bottom-start",
|
|
234
255
|
modifiers: popperModifiers
|
|
235
256
|
}, function (_ref3) {
|
|
236
257
|
var _ref4 = _ref3.ref,
|
|
237
258
|
style = _ref3.style,
|
|
238
259
|
update = _ref3.update;
|
|
239
|
-
updatePopper.current = update;
|
|
240
260
|
return (0, _react2.jsx)("div", {
|
|
241
261
|
id: PICKER_CONTROL_ID,
|
|
242
262
|
"data-testid": RENDER_REACTIONPICKERPANEL_TESTID,
|
|
@@ -255,21 +275,11 @@ var ReactionPicker = /*#__PURE__*/_react.default.memo(function (props) {
|
|
|
255
275
|
},
|
|
256
276
|
css: styles.popupWrapperStyle,
|
|
257
277
|
tabIndex: 0
|
|
278
|
+
}, (0, _react2.jsx)(_RepositionOnUpdate.RepositionOnUpdate, {
|
|
279
|
+
update: update,
|
|
280
|
+
settings: settings
|
|
258
281
|
}, (0, _react2.jsx)("div", {
|
|
259
282
|
css: styles.popupStyle
|
|
260
|
-
},
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
size: emojiPickerSize
|
|
264
|
-
}) : (0, _react2.jsx)("div", {
|
|
265
|
-
css: styles.contentStyle
|
|
266
|
-
}, (0, _react2.jsx)(_Selector.Selector, {
|
|
267
|
-
emojiProvider: emojiProvider,
|
|
268
|
-
onSelection: onEmojiSelected,
|
|
269
|
-
showMore: allowAllEmojis,
|
|
270
|
-
onMoreClick: onSelectMoreClick,
|
|
271
|
-
pickerQuickReactionEmojiIds: pickerQuickReactionEmojiIds
|
|
272
|
-
}))));
|
|
273
|
-
})));
|
|
274
|
-
});
|
|
275
|
-
exports.ReactionPicker = ReactionPicker;
|
|
283
|
+
}, children)));
|
|
284
|
+
});
|
|
285
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.RepositionOnUpdate = void 0;
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
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); }
|
|
10
|
+
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; }
|
|
11
|
+
/**
|
|
12
|
+
* Copied from ADS popup component with some tweeks for our use
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
// eslint-disable-next-line @repo/internal/react/require-jsdoc
|
|
16
|
+
var RepositionOnUpdate = function RepositionOnUpdate(_ref) {
|
|
17
|
+
var children = _ref.children,
|
|
18
|
+
update = _ref.update,
|
|
19
|
+
settings = _ref.settings;
|
|
20
|
+
// Ref used here to skip update on first render (when refs haven't been set)
|
|
21
|
+
var isFirstRenderRef = (0, _react.useRef)(true);
|
|
22
|
+
(0, _react.useLayoutEffect)(function () {
|
|
23
|
+
if (isFirstRenderRef.current) {
|
|
24
|
+
isFirstRenderRef.current = false;
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
// callback function from popper that repositions pop-up on content Update
|
|
28
|
+
update();
|
|
29
|
+
}, [update, settings]);
|
|
30
|
+
|
|
31
|
+
// wrapping in fragment to make TS happy (known issue with FC returning children)
|
|
32
|
+
return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, children);
|
|
33
|
+
};
|
|
34
|
+
exports.RepositionOnUpdate = RepositionOnUpdate;
|
package/dist/cjs/version.json
CHANGED
|
@@ -12,6 +12,7 @@ import { i18n } from '../../shared';
|
|
|
12
12
|
import { useCloseManager } from '../../hooks';
|
|
13
13
|
import * as styles from './styles';
|
|
14
14
|
import { useFocusTrap } from '../../hooks/useFocusTrap';
|
|
15
|
+
import { RepositionOnUpdate } from './RepositionOnUpdate';
|
|
15
16
|
|
|
16
17
|
/**
|
|
17
18
|
* Test id for wrapper ReactionPicker div
|
|
@@ -73,7 +74,7 @@ export const ReactionPicker = /*#__PURE__*/React.memo(props => {
|
|
|
73
74
|
emojiPickerSize
|
|
74
75
|
} = props;
|
|
75
76
|
const [triggerRef, setTriggerRef] = useState(null);
|
|
76
|
-
|
|
77
|
+
|
|
77
78
|
/**
|
|
78
79
|
* Container <div /> reference (used by custom hook to detect click outside)
|
|
79
80
|
*/
|
|
@@ -101,14 +102,6 @@ export const ReactionPicker = /*#__PURE__*/React.memo(props => {
|
|
|
101
102
|
}
|
|
102
103
|
}, true, settings.isOpen);
|
|
103
104
|
|
|
104
|
-
/**
|
|
105
|
-
* add focus lock to popup
|
|
106
|
-
*/
|
|
107
|
-
useFocusTrap({
|
|
108
|
-
initialFocusRef: null,
|
|
109
|
-
targetRef: popupRef
|
|
110
|
-
});
|
|
111
|
-
|
|
112
105
|
/**
|
|
113
106
|
* Event callback when the picker is closed
|
|
114
107
|
* @param _id Optional id if an emoji button was selected or undefineed if was clicked outside the picker
|
|
@@ -201,7 +194,36 @@ export const ReactionPicker = /*#__PURE__*/React.memo(props => {
|
|
|
201
194
|
miniMode: miniMode,
|
|
202
195
|
disabled: disabled,
|
|
203
196
|
tooltipContent: settings.isOpen ? null : tooltipContent
|
|
204
|
-
})), settings.isOpen && jsx(
|
|
197
|
+
})), settings.isOpen && jsx(PopperWrapper, {
|
|
198
|
+
settings: settings
|
|
199
|
+
}, settings.showFullPicker ? jsx(EmojiPicker, {
|
|
200
|
+
emojiProvider: emojiProvider,
|
|
201
|
+
onSelection: onEmojiSelected,
|
|
202
|
+
size: emojiPickerSize
|
|
203
|
+
}) : jsx("div", {
|
|
204
|
+
css: styles.contentStyle
|
|
205
|
+
}, jsx(Selector, {
|
|
206
|
+
emojiProvider: emojiProvider,
|
|
207
|
+
onSelection: onEmojiSelected,
|
|
208
|
+
showMore: allowAllEmojis,
|
|
209
|
+
onMoreClick: onSelectMoreClick,
|
|
210
|
+
pickerQuickReactionEmojiIds: pickerQuickReactionEmojiIds
|
|
211
|
+
})))));
|
|
212
|
+
});
|
|
213
|
+
const PopperWrapper = props => {
|
|
214
|
+
const {
|
|
215
|
+
settings,
|
|
216
|
+
children
|
|
217
|
+
} = props;
|
|
218
|
+
const [popupRef, setPopupRef] = useState(null);
|
|
219
|
+
/**
|
|
220
|
+
* add focus lock to popup
|
|
221
|
+
*/
|
|
222
|
+
useFocusTrap({
|
|
223
|
+
initialFocusRef: null,
|
|
224
|
+
targetRef: popupRef
|
|
225
|
+
});
|
|
226
|
+
return jsx(Popper, {
|
|
205
227
|
placement: "bottom-start",
|
|
206
228
|
modifiers: popperModifiers
|
|
207
229
|
}, ({
|
|
@@ -209,7 +231,6 @@ export const ReactionPicker = /*#__PURE__*/React.memo(props => {
|
|
|
209
231
|
style,
|
|
210
232
|
update
|
|
211
233
|
}) => {
|
|
212
|
-
updatePopper.current = update;
|
|
213
234
|
return jsx("div", {
|
|
214
235
|
id: PICKER_CONTROL_ID,
|
|
215
236
|
"data-testid": RENDER_REACTIONPICKERPANEL_TESTID,
|
|
@@ -229,20 +250,11 @@ export const ReactionPicker = /*#__PURE__*/React.memo(props => {
|
|
|
229
250
|
},
|
|
230
251
|
css: styles.popupWrapperStyle,
|
|
231
252
|
tabIndex: 0
|
|
253
|
+
}, jsx(RepositionOnUpdate, {
|
|
254
|
+
update: update,
|
|
255
|
+
settings: settings
|
|
232
256
|
}, jsx("div", {
|
|
233
257
|
css: styles.popupStyle
|
|
234
|
-
},
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
size: emojiPickerSize
|
|
238
|
-
}) : jsx("div", {
|
|
239
|
-
css: styles.contentStyle
|
|
240
|
-
}, jsx(Selector, {
|
|
241
|
-
emojiProvider: emojiProvider,
|
|
242
|
-
onSelection: onEmojiSelected,
|
|
243
|
-
showMore: allowAllEmojis,
|
|
244
|
-
onMoreClick: onSelectMoreClick,
|
|
245
|
-
pickerQuickReactionEmojiIds: pickerQuickReactionEmojiIds
|
|
246
|
-
}))));
|
|
247
|
-
})));
|
|
248
|
-
});
|
|
258
|
+
}, children)));
|
|
259
|
+
});
|
|
260
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copied from ADS popup component with some tweeks for our use
|
|
3
|
+
*/
|
|
4
|
+
import React, { Fragment, useLayoutEffect, useRef } from 'react';
|
|
5
|
+
// eslint-disable-next-line @repo/internal/react/require-jsdoc
|
|
6
|
+
export const RepositionOnUpdate = ({
|
|
7
|
+
children,
|
|
8
|
+
update,
|
|
9
|
+
settings
|
|
10
|
+
}) => {
|
|
11
|
+
// Ref used here to skip update on first render (when refs haven't been set)
|
|
12
|
+
const isFirstRenderRef = useRef(true);
|
|
13
|
+
useLayoutEffect(() => {
|
|
14
|
+
if (isFirstRenderRef.current) {
|
|
15
|
+
isFirstRenderRef.current = false;
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
// callback function from popper that repositions pop-up on content Update
|
|
19
|
+
update();
|
|
20
|
+
}, [update, settings]);
|
|
21
|
+
|
|
22
|
+
// wrapping in fragment to make TS happy (known issue with FC returning children)
|
|
23
|
+
return /*#__PURE__*/React.createElement(Fragment, null, children);
|
|
24
|
+
};
|
package/dist/es2019/version.json
CHANGED
|
@@ -16,6 +16,7 @@ import { i18n } from '../../shared';
|
|
|
16
16
|
import { useCloseManager } from '../../hooks';
|
|
17
17
|
import * as styles from './styles';
|
|
18
18
|
import { useFocusTrap } from '../../hooks/useFocusTrap';
|
|
19
|
+
import { RepositionOnUpdate } from './RepositionOnUpdate';
|
|
19
20
|
|
|
20
21
|
/**
|
|
21
22
|
* Test id for wrapper ReactionPicker div
|
|
@@ -82,16 +83,13 @@ export var ReactionPicker = /*#__PURE__*/React.memo(function (props) {
|
|
|
82
83
|
_useState2 = _slicedToArray(_useState, 2),
|
|
83
84
|
triggerRef = _useState2[0],
|
|
84
85
|
setTriggerRef = _useState2[1];
|
|
85
|
-
|
|
86
|
-
_useState4 = _slicedToArray(_useState3, 2),
|
|
87
|
-
popupRef = _useState4[0],
|
|
88
|
-
setPopupRef = _useState4[1];
|
|
86
|
+
|
|
89
87
|
/**
|
|
90
88
|
* Container <div /> reference (used by custom hook to detect click outside)
|
|
91
89
|
*/
|
|
92
90
|
var wrapperRef = useRef(null);
|
|
93
91
|
var updatePopper = useRef();
|
|
94
|
-
var
|
|
92
|
+
var _useState3 = useState({
|
|
95
93
|
/**
|
|
96
94
|
* Show the picker floating panel
|
|
97
95
|
*/
|
|
@@ -101,9 +99,9 @@ export var ReactionPicker = /*#__PURE__*/React.memo(function (props) {
|
|
|
101
99
|
*/
|
|
102
100
|
showFullPicker: !!allowAllEmojis && Array.isArray(pickerQuickReactionEmojiIds) && pickerQuickReactionEmojiIds.length === 0
|
|
103
101
|
}),
|
|
104
|
-
|
|
105
|
-
settings =
|
|
106
|
-
setSettings =
|
|
102
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
103
|
+
settings = _useState4[0],
|
|
104
|
+
setSettings = _useState4[1];
|
|
107
105
|
|
|
108
106
|
/**
|
|
109
107
|
* Custom hook triggers when user clicks outside the reactions picker
|
|
@@ -118,14 +116,6 @@ export var ReactionPicker = /*#__PURE__*/React.memo(function (props) {
|
|
|
118
116
|
}
|
|
119
117
|
}, true, settings.isOpen);
|
|
120
118
|
|
|
121
|
-
/**
|
|
122
|
-
* add focus lock to popup
|
|
123
|
-
*/
|
|
124
|
-
useFocusTrap({
|
|
125
|
-
initialFocusRef: null,
|
|
126
|
-
targetRef: popupRef
|
|
127
|
-
});
|
|
128
|
-
|
|
129
119
|
/**
|
|
130
120
|
* Event callback when the picker is closed
|
|
131
121
|
* @param _id Optional id if an emoji button was selected or undefineed if was clicked outside the picker
|
|
@@ -219,14 +209,43 @@ export var ReactionPicker = /*#__PURE__*/React.memo(function (props) {
|
|
|
219
209
|
tooltipContent: settings.isOpen ? null : tooltipContent
|
|
220
210
|
})
|
|
221
211
|
);
|
|
222
|
-
}), settings.isOpen && jsx(
|
|
212
|
+
}), settings.isOpen && jsx(PopperWrapper, {
|
|
213
|
+
settings: settings
|
|
214
|
+
}, settings.showFullPicker ? jsx(EmojiPicker, {
|
|
215
|
+
emojiProvider: emojiProvider,
|
|
216
|
+
onSelection: onEmojiSelected,
|
|
217
|
+
size: emojiPickerSize
|
|
218
|
+
}) : jsx("div", {
|
|
219
|
+
css: styles.contentStyle
|
|
220
|
+
}, jsx(Selector, {
|
|
221
|
+
emojiProvider: emojiProvider,
|
|
222
|
+
onSelection: onEmojiSelected,
|
|
223
|
+
showMore: allowAllEmojis,
|
|
224
|
+
onMoreClick: onSelectMoreClick,
|
|
225
|
+
pickerQuickReactionEmojiIds: pickerQuickReactionEmojiIds
|
|
226
|
+
})))));
|
|
227
|
+
});
|
|
228
|
+
var PopperWrapper = function PopperWrapper(props) {
|
|
229
|
+
var settings = props.settings,
|
|
230
|
+
children = props.children;
|
|
231
|
+
var _useState5 = useState(null),
|
|
232
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
233
|
+
popupRef = _useState6[0],
|
|
234
|
+
setPopupRef = _useState6[1];
|
|
235
|
+
/**
|
|
236
|
+
* add focus lock to popup
|
|
237
|
+
*/
|
|
238
|
+
useFocusTrap({
|
|
239
|
+
initialFocusRef: null,
|
|
240
|
+
targetRef: popupRef
|
|
241
|
+
});
|
|
242
|
+
return jsx(Popper, {
|
|
223
243
|
placement: "bottom-start",
|
|
224
244
|
modifiers: popperModifiers
|
|
225
245
|
}, function (_ref3) {
|
|
226
246
|
var _ref4 = _ref3.ref,
|
|
227
247
|
style = _ref3.style,
|
|
228
248
|
update = _ref3.update;
|
|
229
|
-
updatePopper.current = update;
|
|
230
249
|
return jsx("div", {
|
|
231
250
|
id: PICKER_CONTROL_ID,
|
|
232
251
|
"data-testid": RENDER_REACTIONPICKERPANEL_TESTID,
|
|
@@ -245,20 +264,11 @@ export var ReactionPicker = /*#__PURE__*/React.memo(function (props) {
|
|
|
245
264
|
},
|
|
246
265
|
css: styles.popupWrapperStyle,
|
|
247
266
|
tabIndex: 0
|
|
267
|
+
}, jsx(RepositionOnUpdate, {
|
|
268
|
+
update: update,
|
|
269
|
+
settings: settings
|
|
248
270
|
}, jsx("div", {
|
|
249
271
|
css: styles.popupStyle
|
|
250
|
-
},
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
size: emojiPickerSize
|
|
254
|
-
}) : jsx("div", {
|
|
255
|
-
css: styles.contentStyle
|
|
256
|
-
}, jsx(Selector, {
|
|
257
|
-
emojiProvider: emojiProvider,
|
|
258
|
-
onSelection: onEmojiSelected,
|
|
259
|
-
showMore: allowAllEmojis,
|
|
260
|
-
onMoreClick: onSelectMoreClick,
|
|
261
|
-
pickerQuickReactionEmojiIds: pickerQuickReactionEmojiIds
|
|
262
|
-
}))));
|
|
263
|
-
})));
|
|
264
|
-
});
|
|
272
|
+
}, children)));
|
|
273
|
+
});
|
|
274
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copied from ADS popup component with some tweeks for our use
|
|
3
|
+
*/
|
|
4
|
+
import React, { Fragment, useLayoutEffect, useRef } from 'react';
|
|
5
|
+
// eslint-disable-next-line @repo/internal/react/require-jsdoc
|
|
6
|
+
export var RepositionOnUpdate = function RepositionOnUpdate(_ref) {
|
|
7
|
+
var children = _ref.children,
|
|
8
|
+
update = _ref.update,
|
|
9
|
+
settings = _ref.settings;
|
|
10
|
+
// Ref used here to skip update on first render (when refs haven't been set)
|
|
11
|
+
var isFirstRenderRef = useRef(true);
|
|
12
|
+
useLayoutEffect(function () {
|
|
13
|
+
if (isFirstRenderRef.current) {
|
|
14
|
+
isFirstRenderRef.current = false;
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
// callback function from popper that repositions pop-up on content Update
|
|
18
|
+
update();
|
|
19
|
+
}, [update, settings]);
|
|
20
|
+
|
|
21
|
+
// wrapping in fragment to make TS happy (known issue with FC returning children)
|
|
22
|
+
return /*#__PURE__*/React.createElement(Fragment, null, children);
|
|
23
|
+
};
|
package/dist/esm/version.json
CHANGED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copied from ADS popup component with some tweeks for our use
|
|
3
|
+
*/
|
|
4
|
+
import { FC } from 'react';
|
|
5
|
+
import { PopperChildrenProps } from '@atlaskit/popper';
|
|
6
|
+
export declare type RepositionOnUpdateProps = {
|
|
7
|
+
update: PopperChildrenProps['update'];
|
|
8
|
+
settings: {
|
|
9
|
+
isOpen: boolean;
|
|
10
|
+
showFullPicker: boolean;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
export declare const RepositionOnUpdate: FC<RepositionOnUpdateProps>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/reactions",
|
|
3
|
-
"version": "22.2.
|
|
3
|
+
"version": "22.2.7",
|
|
4
4
|
"description": "Reactions component",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"registry": "https://registry.npmjs.org/"
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"@atlaskit/analytics-next": "^9.0.0",
|
|
31
31
|
"@atlaskit/avatar": "^21.2.0",
|
|
32
32
|
"@atlaskit/button": "^16.6.0",
|
|
33
|
-
"@atlaskit/emoji": "^67.
|
|
33
|
+
"@atlaskit/emoji": "^67.3.0",
|
|
34
34
|
"@atlaskit/icon": "^21.11.0",
|
|
35
35
|
"@atlaskit/modal-dialog": "^12.2.0",
|
|
36
36
|
"@atlaskit/motion": "^1.3.0",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"devDependencies": {
|
|
55
55
|
"@atlaskit/analytics-viewer": "^0.4.5",
|
|
56
56
|
"@atlaskit/docs": "^9.0.0",
|
|
57
|
-
"@atlaskit/editor-test-helpers": "^18.
|
|
57
|
+
"@atlaskit/editor-test-helpers": "^18.2.0",
|
|
58
58
|
"@atlaskit/elements-test-helpers": "^0.7.0",
|
|
59
59
|
"@atlaskit/section-message": "^6.3.0",
|
|
60
60
|
"@atlaskit/tooltip": "^17.7.0",
|