@atlaskit/mention 24.2.18 → 24.3.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.
Files changed (30) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/cjs/components/MentionItem/index.js +12 -4
  3. package/dist/cjs/components/MentionList/index.js +60 -21
  4. package/dist/cjs/components/MentionPicker/index.js +2 -2
  5. package/dist/cjs/components/Popup/index.js +81 -23
  6. package/dist/cjs/components/Scrollable/index.js +14 -1
  7. package/dist/cjs/util/analytics.js +1 -1
  8. package/dist/es2019/components/MentionItem/index.js +11 -3
  9. package/dist/es2019/components/MentionList/index.js +54 -21
  10. package/dist/es2019/components/MentionPicker/index.js +2 -2
  11. package/dist/es2019/components/Popup/index.js +77 -21
  12. package/dist/es2019/components/Scrollable/index.js +14 -1
  13. package/dist/es2019/util/analytics.js +1 -1
  14. package/dist/esm/components/MentionItem/index.js +11 -3
  15. package/dist/esm/components/MentionList/index.js +58 -21
  16. package/dist/esm/components/MentionPicker/index.js +2 -2
  17. package/dist/esm/components/Popup/index.js +79 -23
  18. package/dist/esm/components/Scrollable/index.js +14 -1
  19. package/dist/esm/util/analytics.js +1 -1
  20. package/dist/types/components/MentionItem/index.d.ts +2 -0
  21. package/dist/types/components/MentionList/index.d.ts +3 -0
  22. package/dist/types/components/MentionPicker/index.d.ts +1 -1
  23. package/dist/types/components/Popup/index.d.ts +4 -1
  24. package/dist/types/components/Scrollable/index.d.ts +1 -0
  25. package/dist/types-ts4.5/components/MentionItem/index.d.ts +2 -0
  26. package/dist/types-ts4.5/components/MentionList/index.d.ts +3 -0
  27. package/dist/types-ts4.5/components/MentionPicker/index.d.ts +1 -1
  28. package/dist/types-ts4.5/components/Popup/index.d.ts +4 -1
  29. package/dist/types-ts4.5/components/Scrollable/index.d.ts +1 -0
  30. package/package.json +9 -6
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # @atlaskit/mention
2
2
 
3
+ ## 24.3.1
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies
8
+
9
+ ## 24.3.0
10
+
11
+ ### Minor Changes
12
+
13
+ - [`af63bbf99740e`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/af63bbf99740e) -
14
+ Migrate deprecated react-dom APIs to React 19 compatible: findDOMNode and unmountComponentAtNode
15
+ behind FG(mentions-migrate-react-dom)
16
+
3
17
  ## 24.2.18
4
18
 
5
19
  ### Patch Changes
@@ -10,7 +10,8 @@ Object.defineProperty(exports, "MENTION_ITEM_HEIGHT", {
10
10
  return _styles.MENTION_ITEM_HEIGHT;
11
11
  }
12
12
  });
13
- exports.default = void 0;
13
+ exports.default = exports.MentionItemWithRef = void 0;
14
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
14
15
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
15
16
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
16
17
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
@@ -88,7 +89,8 @@ var MentionItem = exports.default = /*#__PURE__*/function (_React$PureComponent)
88
89
  value: function render() {
89
90
  var _this$props = this.props,
90
91
  mention = _this$props.mention,
91
- selected = _this$props.selected;
92
+ selected = _this$props.selected,
93
+ forwardedRef = _this$props.forwardedRef;
92
94
  var id = mention.id,
93
95
  highlight = mention.highlight,
94
96
  avatarUrl = mention.avatarUrl,
@@ -114,7 +116,8 @@ var MentionItem = exports.default = /*#__PURE__*/function (_React$PureComponent)
114
116
  "data-testid": "mention-item-".concat(id),
115
117
  "data-mention-id": id,
116
118
  "data-mention-name": mentionName,
117
- "data-selected": selected
119
+ "data-selected": selected,
120
+ ref: forwardedRef
118
121
  }, /*#__PURE__*/_react.default.createElement(_styles.RowStyle, null, /*#__PURE__*/_react.default.createElement(_styles.AvatarStyle, {
119
122
  restricted: restricted
120
123
  }, (0, _platformFeatureFlags.fg)('team-avatar-in-mention-picker') ? /*#__PURE__*/_react.default.createElement(_MentionAvatar.MentionAvatar, {
@@ -145,4 +148,9 @@ var MentionItem = exports.default = /*#__PURE__*/function (_React$PureComponent)
145
148
  }))));
146
149
  }
147
150
  }]);
148
- }(_react.default.PureComponent);
151
+ }(_react.default.PureComponent);
152
+ var MentionItemWithRef = exports.MentionItemWithRef = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
153
+ return /*#__PURE__*/_react.default.createElement(MentionItem, (0, _extends2.default)({}, props, {
154
+ forwardedRef: ref
155
+ }));
156
+ });
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
@@ -12,13 +13,15 @@ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/ge
12
13
  var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
13
14
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
14
15
  var _react = _interopRequireDefault(require("react"));
16
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
15
17
  var _logger = _interopRequireDefault(require("../../util/logger"));
16
18
  var _mouse = require("../../util/mouse");
17
- var _MentionItem = _interopRequireDefault(require("../MentionItem"));
19
+ var _MentionItem = _interopRequireWildcard(require("../MentionItem"));
18
20
  var _MentionListError = _interopRequireDefault(require("../MentionListError"));
19
21
  var _MessagesIntlProvider = _interopRequireDefault(require("../MessagesIntlProvider"));
20
22
  var _Scrollable = _interopRequireDefault(require("../Scrollable"));
21
23
  var _styles = require("./styles");
24
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
22
25
  function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
23
26
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
24
27
  function wrapIndex(mentions, index) {
@@ -109,11 +112,24 @@ var MentionList = exports.default = /*#__PURE__*/function (_React$PureComponent)
109
112
  (0, _defineProperty2.default)(_this, "handleScrollableRef", function (ref) {
110
113
  _this.scrollable = ref;
111
114
  });
115
+ _this.itemsRefs = new Map();
112
116
  _this.setDefaultSelectionState();
113
117
  return _this;
114
118
  }
115
119
  (0, _inherits2.default)(MentionList, _React$PureComponent);
116
120
  return (0, _createClass2.default)(MentionList, [{
121
+ key: "createItemRef",
122
+ value: function createItemRef(key) {
123
+ var itemRef = /*#__PURE__*/_react.default.createRef();
124
+ this.itemsRefs.set(key, itemRef);
125
+ return itemRef;
126
+ }
127
+ }, {
128
+ key: "getItemRef",
129
+ value: function getItemRef(key) {
130
+ return this.itemsRefs.get(key);
131
+ }
132
+ }, {
117
133
  key: "UNSAFE_componentWillReceiveProps",
118
134
  value: function UNSAFE_componentWillReceiveProps(nextProps) {
119
135
  // adjust selection
@@ -154,9 +170,16 @@ var MentionList = exports.default = /*#__PURE__*/function (_React$PureComponent)
154
170
  value:
155
171
  // Internal
156
172
  function revealItem(key) {
157
- var item = this.items[key];
158
- if (item && this.scrollable) {
159
- this.scrollable.reveal(item);
173
+ if ((0, _platformFeatureFlags.fg)('mentions-migrate-react-dom')) {
174
+ var itemRef = this.getItemRef(key);
175
+ if (itemRef && this.scrollable) {
176
+ itemRef && this.scrollable.revealRef(itemRef);
177
+ }
178
+ } else {
179
+ var item = this.items[key];
180
+ if (item && this.scrollable) {
181
+ this.scrollable.reveal(item);
182
+ }
160
183
  }
161
184
  }
162
185
 
@@ -180,24 +203,40 @@ var MentionList = exports.default = /*#__PURE__*/function (_React$PureComponent)
180
203
  this.items = {};
181
204
  return /*#__PURE__*/_react.default.createElement("div", null, this.props.initialHighlightElement, mentions.map(function (mention, idx) {
182
205
  var key = mention.id;
183
- var item = /*#__PURE__*/_react.default.createElement(_MentionItem.default, {
184
- mention: mention,
185
- selected: _this2.isSelectedMention(mention, idx),
186
- key: key,
187
- onMouseMove: _this2.selectIndexOnHover
188
- /* Cannot use onclick, as onblur will close the element, and prevent
189
- * onClick from firing.
190
- */,
191
- onSelection: _this2.itemSelected,
192
- ref: function ref(_ref) {
193
- if (_ref) {
194
- _this2.items[key] = _ref;
195
- } else {
196
- delete _this2.items[key];
206
+ var ref = _this2.createItemRef(key);
207
+ if ((0, _platformFeatureFlags.fg)('mentions-migrate-react-dom')) {
208
+ var item = /*#__PURE__*/_react.default.createElement(_MentionItem.MentionItemWithRef, {
209
+ mention: mention,
210
+ selected: _this2.isSelectedMention(mention, idx),
211
+ key: key,
212
+ onMouseMove: _this2.selectIndexOnHover
213
+ /* Cannot use onclick, as onblur will close the element, and prevent
214
+ * onClick from firing.
215
+ */,
216
+ onSelection: _this2.itemSelected,
217
+ ref: ref
218
+ });
219
+ return item;
220
+ } else {
221
+ var _item = /*#__PURE__*/_react.default.createElement(_MentionItem.default, {
222
+ mention: mention,
223
+ selected: _this2.isSelectedMention(mention, idx),
224
+ key: key,
225
+ onMouseMove: _this2.selectIndexOnHover
226
+ /* Cannot use onclick, as onblur will close the element, and prevent
227
+ * onClick from firing.
228
+ */,
229
+ onSelection: _this2.itemSelected,
230
+ ref: function ref(_ref) {
231
+ if (_ref) {
232
+ _this2.items[key] = _ref;
233
+ } else {
234
+ delete _this2.items[key];
235
+ }
197
236
  }
198
- }
199
- });
200
- return item;
237
+ });
238
+ return _item;
239
+ }
201
240
  }));
202
241
  }
203
242
  return null;
@@ -11,10 +11,10 @@ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime
11
11
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
12
12
  var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
13
13
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
14
- var _compiled = require("@atlaskit/primitives/compiled");
15
- var _withAnalyticsEvents = _interopRequireDefault(require("@atlaskit/analytics-next/withAnalyticsEvents"));
16
14
  var _react = _interopRequireDefault(require("react"));
17
15
  var _reactIntlNext = require("react-intl-next");
16
+ var _compiled = require("@atlaskit/primitives/compiled");
17
+ var _withAnalyticsEvents = _interopRequireDefault(require("@atlaskit/analytics-next/withAnalyticsEvents"));
18
18
  var _analytics = require("../../util/analytics");
19
19
  var _id = _interopRequireDefault(require("../../util/id"));
20
20
  var _logger = _interopRequireDefault(require("../../util/logger"));
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
@@ -12,24 +13,44 @@ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/ge
12
13
  var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
13
14
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
14
15
  var _react = _interopRequireDefault(require("react"));
15
- var _reactDom = _interopRequireDefault(require("react-dom"));
16
+ var _reactDom = _interopRequireWildcard(require("react-dom"));
17
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
18
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
19
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
20
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
16
21
  function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
17
22
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
18
23
  /*
19
24
  * Simple implementation of popup while waiting for ak-inline-dialog
20
25
  */
21
26
  var Popup = exports.default = /*#__PURE__*/function (_React$PureComponent) {
22
- function Popup() {
27
+ function Popup(props) {
28
+ var _this;
23
29
  (0, _classCallCheck2.default)(this, Popup);
24
- return _callSuper(this, Popup, arguments);
30
+ _this = _callSuper(this, Popup, [props]);
31
+ _this.portalStyles = {
32
+ position: 'absolute',
33
+ top: null,
34
+ bottom: null,
35
+ left: null,
36
+ zIndex: null
37
+ };
38
+ return _this;
25
39
  }
26
40
  (0, _inherits2.default)(Popup, _React$PureComponent);
27
41
  return (0, _createClass2.default)(Popup, [{
42
+ key: "setPortalStyles",
43
+ value: function setPortalStyles(styles) {
44
+ this.portalStyles = _objectSpread(_objectSpread({}, this.portalStyles), styles);
45
+ }
46
+ }, {
28
47
  key: "componentDidMount",
29
48
  value: function componentDidMount() {
30
- this.popup = document.createElement('div');
31
- document.body.appendChild(this.popup);
32
- this.popup.style.position = 'absolute';
49
+ if (!(0, _platformFeatureFlags.fg)('mentions-migrate-react-dom')) {
50
+ this.popup = document.createElement('div');
51
+ document.body.appendChild(this.popup);
52
+ this.popup.style.position = 'absolute';
53
+ }
33
54
  this._applyAbsolutePosition();
34
55
  this._renderContent();
35
56
  }
@@ -41,9 +62,11 @@ var Popup = exports.default = /*#__PURE__*/function (_React$PureComponent) {
41
62
  }, {
42
63
  key: "componentWillUnmount",
43
64
  value: function componentWillUnmount() {
44
- if (this.popup) {
45
- _reactDom.default.unmountComponentAtNode(this.popup);
46
- document.body.removeChild(this.popup);
65
+ if (!(0, _platformFeatureFlags.fg)('mentions-migrate-react-dom')) {
66
+ if (this.popup) {
67
+ _reactDom.default.unmountComponentAtNode(this.popup);
68
+ document.body.removeChild(this.popup);
69
+ }
47
70
  }
48
71
  }
49
72
  }, {
@@ -54,10 +77,18 @@ var Popup = exports.default = /*#__PURE__*/function (_React$PureComponent) {
54
77
  var box = targetNode.getBoundingClientRect();
55
78
  var top = box.bottom + (this.props.offsetY || 0);
56
79
  var left = box.left + (this.props.offsetX || 0);
57
- if (this.popup) {
58
- this.popup.style.top = "".concat(top, "px");
59
- this.popup.style.bottom = '';
60
- this.popup.style.left = "".concat(left, "px");
80
+ if ((0, _platformFeatureFlags.fg)('mentions-migrate-react-dom')) {
81
+ this.setPortalStyles({
82
+ top: "".concat(top, "px"),
83
+ bottom: '',
84
+ left: "".concat(left, "px")
85
+ });
86
+ } else {
87
+ if (this.popup) {
88
+ this.popup.style.top = "".concat(top, "px");
89
+ this.popup.style.bottom = '';
90
+ this.popup.style.left = "".concat(left, "px");
91
+ }
61
92
  }
62
93
  }
63
94
  }
@@ -69,10 +100,18 @@ var Popup = exports.default = /*#__PURE__*/function (_React$PureComponent) {
69
100
  var box = targetNode.getBoundingClientRect();
70
101
  var bottom = window.innerHeight - box.top + (this.props.offsetY || 0);
71
102
  var left = box.left + (this.props.offsetX || 0);
72
- if (this.popup) {
73
- this.popup.style.top = '';
74
- this.popup.style.bottom = "".concat(bottom, "px");
75
- this.popup.style.left = "".concat(left, "px");
103
+ if ((0, _platformFeatureFlags.fg)('mentions-migrate-react-dom')) {
104
+ this.setPortalStyles({
105
+ top: '',
106
+ bottom: "".concat(bottom, "px"),
107
+ left: "".concat(left, "px")
108
+ });
109
+ } else {
110
+ if (this.popup) {
111
+ this.popup.style.top = '';
112
+ this.popup.style.bottom = "".concat(bottom, "px");
113
+ this.popup.style.left = "".concat(left, "px");
114
+ }
76
115
  }
77
116
  }
78
117
  }
@@ -95,22 +134,41 @@ var Popup = exports.default = /*#__PURE__*/function (_React$PureComponent) {
95
134
  }
96
135
  }
97
136
  }
98
- if (this.props.zIndex && this.popup) {
99
- this.popup.style.zIndex = "".concat(this.props.zIndex);
137
+ if ((0, _platformFeatureFlags.fg)('mentions-migrate-react-dom')) {
138
+ if (this.props.zIndex) {
139
+ this.setPortalStyles({
140
+ zIndex: this.props.zIndex
141
+ });
142
+ }
143
+ } else {
144
+ if (this.props.zIndex && this.popup) {
145
+ this.popup.style.zIndex = "".concat(this.props.zIndex);
146
+ }
100
147
  }
101
148
  }
102
149
  }, {
103
150
  key: "_renderContent",
104
151
  value: function _renderContent() {
105
- if (this.popup) {
106
- _reactDom.default.render(this.props.children, this.popup);
152
+ if (!(0, _platformFeatureFlags.fg)('mentions-migrate-react-dom')) {
153
+ if (this.popup) {
154
+ _reactDom.default.render(this.props.children, this.popup);
155
+ }
107
156
  }
108
157
  }
109
158
  }, {
110
159
  key: "render",
111
160
  value: function render() {
112
- // Placeholder element for react to render inplace
113
- return /*#__PURE__*/_react.default.createElement("div", null);
161
+ if ((0, _platformFeatureFlags.fg)('mentions-migrate-react-dom')) {
162
+ // https://atlassian.design/components/eslint-plugin-ui-styling-standard/migration-guide#dynamic-styles
163
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop
164
+ var content = /*#__PURE__*/_react.default.createElement("div", {
165
+ style: this.portalStyles
166
+ }, this.props.children);
167
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/(0, _reactDom.createPortal)(content, document.body));
168
+ } else {
169
+ // Placeholder element for react to render inplace
170
+ /*#__PURE__*/_react.default.createElement("div", null);
171
+ }
114
172
  }
115
173
  }]);
116
174
  }(_react.default.PureComponent);
@@ -24,7 +24,7 @@ var Scrollable = exports.default = /*#__PURE__*/function (_React$PureComponent)
24
24
  args[_key] = arguments[_key];
25
25
  }
26
26
  _this = _callSuper(this, Scrollable, [].concat(args));
27
- // API
27
+ // Cleanup when removing mentions-migrate-react-dom
28
28
  (0, _defineProperty2.default)(_this, "reveal", function (child) {
29
29
  if (child && _this.scrollableDiv) {
30
30
  var childNode = (0, _reactDom.findDOMNode)(child);
@@ -39,6 +39,19 @@ var Scrollable = exports.default = /*#__PURE__*/function (_React$PureComponent)
39
39
  }
40
40
  }
41
41
  });
42
+ (0, _defineProperty2.default)(_this, "revealRef", function (ref) {
43
+ if (ref && ref.current && _this.scrollableDiv) {
44
+ // Not using Element.scrollIntoView as it scrolls even to top/bottom of view even if
45
+ // already visible
46
+ var scrollableRect = _this.scrollableDiv.getBoundingClientRect();
47
+ var elementRect = ref.current.getBoundingClientRect();
48
+ if (elementRect.top < scrollableRect.top) {
49
+ _this.scrollableDiv.scrollTop += elementRect.top - scrollableRect.top;
50
+ } else if (elementRect.bottom > scrollableRect.bottom) {
51
+ _this.scrollableDiv.scrollTop += elementRect.bottom - scrollableRect.bottom;
52
+ }
53
+ }
54
+ });
42
55
  (0, _defineProperty2.default)(_this, "handleRef", function (ref) {
43
56
  _this.scrollableDiv = ref;
44
57
  });
@@ -12,7 +12,7 @@ var _types = require("../types");
12
12
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
13
13
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
14
14
  var packageName = "@atlaskit/mention";
15
- var packageVersion = "24.2.17";
15
+ var packageVersion = "0.0.0-development";
16
16
  var SLI_EVENT_TYPE = exports.SLI_EVENT_TYPE = 'sli';
17
17
  var SMART_EVENT_TYPE = exports.SMART_EVENT_TYPE = 'smart';
18
18
  var fireAnalyticsMentionTypeaheadEvent = exports.fireAnalyticsMentionTypeaheadEvent = function fireAnalyticsMentionTypeaheadEvent(props) {
@@ -1,3 +1,4 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
1
2
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
3
  import Avatar from '@atlaskit/avatar';
3
4
  import Lozenge from '@atlaskit/lozenge';
@@ -61,7 +62,8 @@ export default class MentionItem extends React.PureComponent {
61
62
  render() {
62
63
  const {
63
64
  mention,
64
- selected
65
+ selected,
66
+ forwardedRef
65
67
  } = this.props;
66
68
  const {
67
69
  id,
@@ -91,7 +93,8 @@ export default class MentionItem extends React.PureComponent {
91
93
  "data-testid": `mention-item-${id}`,
92
94
  "data-mention-id": id,
93
95
  "data-mention-name": mentionName,
94
- "data-selected": selected
96
+ "data-selected": selected,
97
+ ref: forwardedRef
95
98
  }, /*#__PURE__*/React.createElement(RowStyle, null, /*#__PURE__*/React.createElement(AvatarStyle, {
96
99
  restricted: restricted
97
100
  }, fg('team-avatar-in-mention-picker') ? /*#__PURE__*/React.createElement(MentionAvatar, {
@@ -119,4 +122,9 @@ export default class MentionItem extends React.PureComponent {
119
122
  label: ''
120
123
  }))));
121
124
  }
122
- }
125
+ }
126
+ export const MentionItemWithRef = /*#__PURE__*/React.forwardRef((props, ref) => {
127
+ return /*#__PURE__*/React.createElement(MentionItem, _extends({}, props, {
128
+ forwardedRef: ref
129
+ }));
130
+ });
@@ -1,8 +1,9 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
2
  import React from 'react';
3
+ import { fg } from '@atlaskit/platform-feature-flags';
3
4
  import debug from '../../util/logger';
4
5
  import { actualMouseMove, mouseLocation } from '../../util/mouse';
5
- import MentionItem from '../MentionItem';
6
+ import MentionItem, { MentionItemWithRef } from '../MentionItem';
6
7
  import MentionListError from '../MentionListError';
7
8
  import MessagesIntlProvider from '../MessagesIntlProvider';
8
9
  import Scrollable from '../Scrollable';
@@ -102,8 +103,17 @@ export default class MentionList extends React.PureComponent {
102
103
  _defineProperty(this, "handleScrollableRef", ref => {
103
104
  this.scrollable = ref;
104
105
  });
106
+ this.itemsRefs = new Map();
105
107
  this.setDefaultSelectionState();
106
108
  }
109
+ createItemRef(key) {
110
+ const itemRef = /*#__PURE__*/React.createRef();
111
+ this.itemsRefs.set(key, itemRef);
112
+ return itemRef;
113
+ }
114
+ getItemRef(key) {
115
+ return this.itemsRefs.get(key);
116
+ }
107
117
  UNSAFE_componentWillReceiveProps(nextProps) {
108
118
  // adjust selection
109
119
  const {
@@ -147,9 +157,16 @@ export default class MentionList extends React.PureComponent {
147
157
 
148
158
  // Internal
149
159
  revealItem(key) {
150
- const item = this.items[key];
151
- if (item && this.scrollable) {
152
- this.scrollable.reveal(item);
160
+ if (fg('mentions-migrate-react-dom')) {
161
+ const itemRef = this.getItemRef(key);
162
+ if (itemRef && this.scrollable) {
163
+ itemRef && this.scrollable.revealRef(itemRef);
164
+ }
165
+ } else {
166
+ const item = this.items[key];
167
+ if (item && this.scrollable) {
168
+ this.scrollable.reveal(item);
169
+ }
153
170
  }
154
171
  }
155
172
 
@@ -170,24 +187,40 @@ export default class MentionList extends React.PureComponent {
170
187
  this.items = {};
171
188
  return /*#__PURE__*/React.createElement("div", null, this.props.initialHighlightElement, mentions.map((mention, idx) => {
172
189
  const key = mention.id;
173
- const item = /*#__PURE__*/React.createElement(MentionItem, {
174
- mention: mention,
175
- selected: this.isSelectedMention(mention, idx),
176
- key: key,
177
- onMouseMove: this.selectIndexOnHover
178
- /* Cannot use onclick, as onblur will close the element, and prevent
179
- * onClick from firing.
180
- */,
181
- onSelection: this.itemSelected,
182
- ref: ref => {
183
- if (ref) {
184
- this.items[key] = ref;
185
- } else {
186
- delete this.items[key];
190
+ const ref = this.createItemRef(key);
191
+ if (fg('mentions-migrate-react-dom')) {
192
+ const item = /*#__PURE__*/React.createElement(MentionItemWithRef, {
193
+ mention: mention,
194
+ selected: this.isSelectedMention(mention, idx),
195
+ key: key,
196
+ onMouseMove: this.selectIndexOnHover
197
+ /* Cannot use onclick, as onblur will close the element, and prevent
198
+ * onClick from firing.
199
+ */,
200
+ onSelection: this.itemSelected,
201
+ ref: ref
202
+ });
203
+ return item;
204
+ } else {
205
+ const item = /*#__PURE__*/React.createElement(MentionItem, {
206
+ mention: mention,
207
+ selected: this.isSelectedMention(mention, idx),
208
+ key: key,
209
+ onMouseMove: this.selectIndexOnHover
210
+ /* Cannot use onclick, as onblur will close the element, and prevent
211
+ * onClick from firing.
212
+ */,
213
+ onSelection: this.itemSelected,
214
+ ref: ref => {
215
+ if (ref) {
216
+ this.items[key] = ref;
217
+ } else {
218
+ delete this.items[key];
219
+ }
187
220
  }
188
- }
189
- });
190
- return item;
221
+ });
222
+ return item;
223
+ }
191
224
  }));
192
225
  }
193
226
  return null;
@@ -1,8 +1,8 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
- import { Text } from '@atlaskit/primitives/compiled';
3
- import withAnalyticsEvents from '@atlaskit/analytics-next/withAnalyticsEvents';
4
2
  import React from 'react';
5
3
  import { IntlProvider, injectIntl } from 'react-intl-next';
4
+ import { Text } from '@atlaskit/primitives/compiled';
5
+ import withAnalyticsEvents from '@atlaskit/analytics-next/withAnalyticsEvents';
6
6
  import { fireAnalyticsMentionTypeaheadEvent } from '../../util/analytics';
7
7
  import uniqueId from '../../util/id';
8
8
  import debug from '../../util/logger';