@atlaskit/smart-card 26.1.4 → 26.1.5

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,11 @@
1
1
  # @atlaskit/smart-card
2
2
 
3
+ ## 26.1.5
4
+
5
+ ### Patch Changes
6
+
7
+ - [`6fa208a0d81`](https://bitbucket.org/atlassian/atlassian-frontend/commits/6fa208a0d81) - Fixes internal useSmartCardState to internally use useSyncExternalStore to fix bugs relating to syncronous updates to the store in the same phase that the store is subscribed to.
8
+
3
9
  ## 26.1.4
4
10
 
5
11
  ### Patch Changes
@@ -1,33 +1,19 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
7
6
  exports.useSmartCardState = useSmartCardState;
8
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
- var _react = require("react");
7
+ var _withSelector = require("use-sync-external-store/shim/with-selector");
10
8
  var _linkProvider = require("@atlaskit/link-provider");
11
- var _linkingCommon = require("@atlaskit/linking-common");
9
+ var PENDING_STATE = {
10
+ status: 'pending'
11
+ };
12
12
  function useSmartCardState(url) {
13
13
  var _useSmartLinkContext = (0, _linkProvider.useSmartLinkContext)(),
14
14
  store = _useSmartLinkContext.store;
15
- // Initially, card state should be pending and 'empty'.
16
- var newCardState = (0, _linkingCommon.getUrl)(store, url);
17
- var _useState = (0, _react.useState)(newCardState),
18
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
19
- setCardState = _useState2[1];
20
- // Selector for initial and subsequent states.
21
- (0, _react.useEffect)(function () {
22
- var unsubscribe = store.subscribe(function () {
23
- // forcing re-renders when the store changes
24
- setCardState((0, _linkingCommon.getUrl)(store, url));
25
- });
26
- return function () {
27
- return unsubscribe();
28
- };
29
- }, [url, store]);
30
-
31
- // Returning fresh state for use in view components. Added as a part of the fix in EDM-4422.
32
- return newCardState;
15
+ var cardState = (0, _withSelector.useSyncExternalStoreWithSelector)(store.subscribe, store.getState, store.getState, function (state) {
16
+ return state[url];
17
+ });
18
+ return cardState !== null && cardState !== void 0 ? cardState : PENDING_STATE;
33
19
  }
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/smart-card",
3
- "version": "26.1.4",
3
+ "version": "26.1.5",
4
4
  "sideEffects": false
5
5
  }
@@ -1,22 +1,12 @@
1
- import { useEffect, useState } from 'react';
1
+ import { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';
2
2
  import { useSmartLinkContext } from '@atlaskit/link-provider';
3
- import { getUrl } from '@atlaskit/linking-common';
3
+ const PENDING_STATE = {
4
+ status: 'pending'
5
+ };
4
6
  export function useSmartCardState(url) {
5
7
  const {
6
8
  store
7
9
  } = useSmartLinkContext();
8
- // Initially, card state should be pending and 'empty'.
9
- const newCardState = getUrl(store, url);
10
- const [, setCardState] = useState(newCardState);
11
- // Selector for initial and subsequent states.
12
- useEffect(() => {
13
- const unsubscribe = store.subscribe(() => {
14
- // forcing re-renders when the store changes
15
- setCardState(getUrl(store, url));
16
- });
17
- return () => unsubscribe();
18
- }, [url, store]);
19
-
20
- // Returning fresh state for use in view components. Added as a part of the fix in EDM-4422.
21
- return newCardState;
10
+ const cardState = useSyncExternalStoreWithSelector(store.subscribe, store.getState, store.getState, state => state[url]);
11
+ return cardState !== null && cardState !== void 0 ? cardState : PENDING_STATE;
22
12
  }
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/smart-card",
3
- "version": "26.1.4",
3
+ "version": "26.1.5",
4
4
  "sideEffects": false
5
5
  }
@@ -1,26 +1,13 @@
1
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
- import { useEffect, useState } from 'react';
1
+ import { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';
3
2
  import { useSmartLinkContext } from '@atlaskit/link-provider';
4
- import { getUrl } from '@atlaskit/linking-common';
3
+ var PENDING_STATE = {
4
+ status: 'pending'
5
+ };
5
6
  export function useSmartCardState(url) {
6
7
  var _useSmartLinkContext = useSmartLinkContext(),
7
8
  store = _useSmartLinkContext.store;
8
- // Initially, card state should be pending and 'empty'.
9
- var newCardState = getUrl(store, url);
10
- var _useState = useState(newCardState),
11
- _useState2 = _slicedToArray(_useState, 2),
12
- setCardState = _useState2[1];
13
- // Selector for initial and subsequent states.
14
- useEffect(function () {
15
- var unsubscribe = store.subscribe(function () {
16
- // forcing re-renders when the store changes
17
- setCardState(getUrl(store, url));
18
- });
19
- return function () {
20
- return unsubscribe();
21
- };
22
- }, [url, store]);
23
-
24
- // Returning fresh state for use in view components. Added as a part of the fix in EDM-4422.
25
- return newCardState;
9
+ var cardState = useSyncExternalStoreWithSelector(store.subscribe, store.getState, store.getState, function (state) {
10
+ return state[url];
11
+ });
12
+ return cardState !== null && cardState !== void 0 ? cardState : PENDING_STATE;
26
13
  }
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/smart-card",
3
- "version": "26.1.4",
3
+ "version": "26.1.5",
4
4
  "sideEffects": false
5
5
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/smart-card",
3
- "version": "26.1.4",
3
+ "version": "26.1.5",
4
4
  "description": "Smart card component",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -42,7 +42,7 @@
42
42
  "@atlaskit/icon-priority": "^6.3.0",
43
43
  "@atlaskit/in-product-testing": "^0.2.0",
44
44
  "@atlaskit/link-client-extension": "^1.1.0",
45
- "@atlaskit/linking-common": "^2.9.0",
45
+ "@atlaskit/linking-common": "^2.10.0",
46
46
  "@atlaskit/linking-types": "^1.5.0",
47
47
  "@atlaskit/logo": "^13.14.0",
48
48
  "@atlaskit/lozenge": "^11.4.0",
@@ -65,6 +65,7 @@
65
65
  "react-lazily-render": "^1.2.0",
66
66
  "react-loadable": "^5.1.0",
67
67
  "react-render-image": "^1.1.3",
68
+ "use-sync-external-store": "^1.2.0",
68
69
  "uuid": "^3.1.0"
69
70
  },
70
71
  "peerDependencies": {
@@ -106,6 +107,7 @@
106
107
  "@types/lorem-ipsum": "^1.0.2",
107
108
  "@types/react": "^16.8.0",
108
109
  "@types/react-loadable": "^5.4.1",
110
+ "@types/use-sync-external-store": "^0.0.3",
109
111
  "abortcontroller-polyfill": "^1.1.9",
110
112
  "brace": "^0.11.1",
111
113
  "fetch-mock": "^8.0.0",