@atlaskit/emoji 72.3.9 → 72.3.11

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 CHANGED
@@ -1,5 +1,21 @@
1
1
  # @atlaskit/emoji
2
2
 
3
+ ## 72.3.11
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies
8
+
9
+ ## 72.3.10
10
+
11
+ ### Patch Changes
12
+
13
+ - [`590c70ad5d166`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/590c70ad5d166) -
14
+ Behind the `platform_emoji_fetch_in_effect` experiment, `ResourcedEmoji` resolves its emoji from a
15
+ layout effect instead of a `useMemo` that ran during render. A render React discards (for example
16
+ a pass that suspends) no longer creates a fetch whose promise callbacks set state and schedule
17
+ another render. With the experiment off the fetch still happens during render as before.
18
+
3
19
  ## 72.3.9
4
20
 
5
21
  ### Patch Changes
@@ -14,6 +14,7 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
14
14
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
15
15
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
16
16
  var _react = _interopRequireWildcard(require("react"));
17
+ var _isExperimentEnabled = require("@atlaskit/platform-feature-experiments/is-experiment-enabled");
17
18
  var _fg = require("@atlaskit/platform-feature-flags/fg");
18
19
  var _expValEqualsNoExposure = require("@atlaskit/tmp-editor-statsig/exp-val-equals-no-exposure");
19
20
  var _EmojiCommonProvider = require("../../context/EmojiCommonProvider");
@@ -176,8 +177,19 @@ var ResourcedEmojiComponent = exports.ResourcedEmojiComponent = function Resourc
176
177
  (0, _sampledUfoRenderedEmoji.sampledUfoRenderedEmoji)(emojiId).markFMP();
177
178
  }
178
179
  }, [emojiId]);
180
+
181
+ // Fetching from `useMemo` runs during render, so a render React later discards (for example a
182
+ // pass that suspends) still creates a promise whose callbacks set state and schedule yet another
183
+ // render. The layout effect only runs for committed renders, and being pre-paint it keeps the
184
+ // synchronous cache-hit path from flashing the placeholder.
179
185
  (0, _react.useMemo)(function () {
180
- if (!resolvedEmojiProvider || !emojiId) {
186
+ if (!resolvedEmojiProvider || !emojiId || (0, _isExperimentEnabled.isExperimentEnabled)('platform_emoji_fetch_in_effect')) {
187
+ return;
188
+ }
189
+ fetchOrGetEmoji(resolvedEmojiProvider, emojiId, optimistic);
190
+ }, [resolvedEmojiProvider, emojiId, optimistic, fetchOrGetEmoji]);
191
+ (0, _react.useLayoutEffect)(function () {
192
+ if (!resolvedEmojiProvider || !emojiId || !(0, _isExperimentEnabled.isExperimentEnabled)('platform_emoji_fetch_in_effect')) {
181
193
  return;
182
194
  }
183
195
  fetchOrGetEmoji(resolvedEmojiProvider, emojiId, optimistic);
@@ -19,7 +19,7 @@ var createEvent = exports.createEvent = function createEvent(eventType, action,
19
19
  actionSubjectId: actionSubjectId,
20
20
  attributes: _objectSpread({
21
21
  packageName: "@atlaskit/emoji",
22
- packageVersion: "72.3.8"
22
+ packageVersion: "72.3.10"
23
23
  }, attributes)
24
24
  };
25
25
  };
@@ -1,7 +1,8 @@
1
1
  /* ResourcedEmojiComponent.tsx generated by @compiled/babel-plugin v2.0.0 */
2
2
  import "./ResourcedEmojiComponent.compiled.css";
3
3
  import { ax, ix } from "@compiled/react/runtime";
4
- import React, { useCallback, useEffect, useMemo, useState } from 'react';
4
+ import React, { useCallback, useEffect, useLayoutEffect, useMemo, useState } from 'react';
5
+ import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
5
6
  import { fg } from '@atlaskit/platform-feature-flags/fg';
6
7
  import { expValEqualsNoExposure } from '@atlaskit/tmp-editor-statsig/exp-val-equals-no-exposure';
7
8
  import { EmojiCommonProvider } from '../../context/EmojiCommonProvider';
@@ -125,8 +126,19 @@ export const ResourcedEmojiComponent = ({
125
126
  sampledUfoRenderedEmoji(emojiId).markFMP();
126
127
  }
127
128
  }, [emojiId]);
129
+
130
+ // Fetching from `useMemo` runs during render, so a render React later discards (for example a
131
+ // pass that suspends) still creates a promise whose callbacks set state and schedule yet another
132
+ // render. The layout effect only runs for committed renders, and being pre-paint it keeps the
133
+ // synchronous cache-hit path from flashing the placeholder.
128
134
  useMemo(() => {
129
- if (!resolvedEmojiProvider || !emojiId) {
135
+ if (!resolvedEmojiProvider || !emojiId || isExperimentEnabled('platform_emoji_fetch_in_effect')) {
136
+ return;
137
+ }
138
+ fetchOrGetEmoji(resolvedEmojiProvider, emojiId, optimistic);
139
+ }, [resolvedEmojiProvider, emojiId, optimistic, fetchOrGetEmoji]);
140
+ useLayoutEffect(() => {
141
+ if (!resolvedEmojiProvider || !emojiId || !isExperimentEnabled('platform_emoji_fetch_in_effect')) {
130
142
  return;
131
143
  }
132
144
  fetchOrGetEmoji(resolvedEmojiProvider, emojiId, optimistic);
@@ -7,7 +7,7 @@ export const createEvent = (eventType, action, actionSubject, actionSubjectId, a
7
7
  actionSubjectId,
8
8
  attributes: {
9
9
  packageName: "@atlaskit/emoji",
10
- packageVersion: "72.3.8",
10
+ packageVersion: "72.3.10",
11
11
  ...attributes
12
12
  }
13
13
  });
@@ -7,7 +7,8 @@ import { ax, ix } from "@compiled/react/runtime";
7
7
  import _regeneratorRuntime from "@babel/runtime/regenerator";
8
8
  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; }
9
9
  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) { _defineProperty(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; }
10
- import React, { useCallback, useEffect, useMemo, useState } from 'react';
10
+ import React, { useCallback, useEffect, useLayoutEffect, useMemo, useState } from 'react';
11
+ import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
11
12
  import { fg } from '@atlaskit/platform-feature-flags/fg';
12
13
  import { expValEqualsNoExposure } from '@atlaskit/tmp-editor-statsig/exp-val-equals-no-exposure';
13
14
  import { EmojiCommonProvider } from '../../context/EmojiCommonProvider';
@@ -167,8 +168,19 @@ export var ResourcedEmojiComponent = function ResourcedEmojiComponent(_ref) {
167
168
  sampledUfoRenderedEmoji(emojiId).markFMP();
168
169
  }
169
170
  }, [emojiId]);
171
+
172
+ // Fetching from `useMemo` runs during render, so a render React later discards (for example a
173
+ // pass that suspends) still creates a promise whose callbacks set state and schedule yet another
174
+ // render. The layout effect only runs for committed renders, and being pre-paint it keeps the
175
+ // synchronous cache-hit path from flashing the placeholder.
170
176
  useMemo(function () {
171
- if (!resolvedEmojiProvider || !emojiId) {
177
+ if (!resolvedEmojiProvider || !emojiId || isExperimentEnabled('platform_emoji_fetch_in_effect')) {
178
+ return;
179
+ }
180
+ fetchOrGetEmoji(resolvedEmojiProvider, emojiId, optimistic);
181
+ }, [resolvedEmojiProvider, emojiId, optimistic, fetchOrGetEmoji]);
182
+ useLayoutEffect(function () {
183
+ if (!resolvedEmojiProvider || !emojiId || !isExperimentEnabled('platform_emoji_fetch_in_effect')) {
172
184
  return;
173
185
  }
174
186
  fetchOrGetEmoji(resolvedEmojiProvider, emojiId, optimistic);
@@ -12,7 +12,7 @@ export var createEvent = function createEvent(eventType, action, actionSubject,
12
12
  actionSubjectId: actionSubjectId,
13
13
  attributes: _objectSpread({
14
14
  packageName: "@atlaskit/emoji",
15
- packageVersion: "72.3.8"
15
+ packageVersion: "72.3.10"
16
16
  }, attributes)
17
17
  };
18
18
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/emoji",
3
- "version": "72.3.9",
3
+ "version": "72.3.11",
4
4
  "description": "Fabric emoji React components",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -41,7 +41,7 @@
41
41
  "@atlaskit/icon-lab": "^7.8.0",
42
42
  "@atlaskit/image": "^5.2.0",
43
43
  "@atlaskit/logo": "^21.6.0",
44
- "@atlaskit/media-client": "^38.0.0",
44
+ "@atlaskit/media-client": "^38.1.0",
45
45
  "@atlaskit/media-client-react": "^6.4.0",
46
46
  "@atlaskit/platform-feature-experiments": "^0.3.0",
47
47
  "@atlaskit/platform-feature-flags": "^2.2.0",
@@ -51,7 +51,7 @@
51
51
  "@atlaskit/spinner": "^20.4.0",
52
52
  "@atlaskit/textfield": "^10.2.0",
53
53
  "@atlaskit/theme": "^28.2.0",
54
- "@atlaskit/tmp-editor-statsig": "^182.0.0",
54
+ "@atlaskit/tmp-editor-statsig": "^183.0.0",
55
55
  "@atlaskit/tokens": "^16.11.0",
56
56
  "@atlaskit/tooltip": "^24.3.0",
57
57
  "@atlaskit/ufo": "^1.2.0",
@@ -88,11 +88,9 @@
88
88
  "@testing-library/jest-dom": "^6.4.5",
89
89
  "@testing-library/react": "^16.3.0",
90
90
  "@testing-library/user-event": "^14.4.3",
91
- "@types/enzyme": "3.1.15",
92
91
  "@types/js-search": "^1.4.0",
93
92
  "@types/react-test-renderer": "^18.0.6",
94
93
  "dotenv": "^12.0.4",
95
- "enzyme": "^3.10.0",
96
94
  "es6-promise": "^4.0.5",
97
95
  "fetch-mock": "^8.0.0",
98
96
  "jest-axe": "^10.0.0",