@atlaskit/smart-card 44.9.9 → 44.9.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.
Files changed (76) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/analytics.spec.yaml +0 -8
  3. package/dist/cjs/__tests__/vr-tests/__snapshots__/inline-card/inline-card-with-all-card-examples-in-text--default--jfp-magma-platform-lozenge-jump-fix-false.png +0 -0
  4. package/dist/cjs/__tests__/vr-tests/__snapshots__/inline-card/inline-card-with-all-card-examples-in-text--default--jfp-magma-platform-lozenge-jump-fix-true.png +0 -0
  5. package/dist/cjs/__tests__/vr-tests/__snapshots__/link-url-connect-button/linkurl-default-state--default.png +0 -0
  6. package/dist/cjs/state/hooks/use-intersection-observer/index.js +2 -1
  7. package/dist/cjs/state/hooks/use-smart-link-seen-event/index.js +66 -0
  8. package/dist/cjs/state/hooks/use-social-proof-experiment/index.js +3 -41
  9. package/dist/cjs/utils/analytics/SmartLinkAnalyticsContext.js +31 -8
  10. package/dist/cjs/view/BlockCard/views/UnauthorisedView.js +9 -18
  11. package/dist/cjs/view/CardWithUrl/card-intersection-observer/index.js +25 -20
  12. package/dist/cjs/view/CardWithUrl/component-lazy/LazyIntersectionObserverCard.js +24 -4
  13. package/dist/cjs/view/CardWithUrl/component.js +4 -47
  14. package/dist/cjs/view/InlineCard/Frame/index.js +3 -2
  15. package/dist/cjs/view/LinkUrl/HyperlinkResolver/index.js +0 -41
  16. package/dist/es2019/__tests__/vr-tests/__snapshots__/inline-card/inline-card-with-all-card-examples-in-text--default--jfp-magma-platform-lozenge-jump-fix-false.png +0 -0
  17. package/dist/es2019/__tests__/vr-tests/__snapshots__/inline-card/inline-card-with-all-card-examples-in-text--default--jfp-magma-platform-lozenge-jump-fix-true.png +0 -0
  18. package/dist/es2019/__tests__/vr-tests/__snapshots__/link-url-connect-button/linkurl-default-state--default.png +0 -0
  19. package/dist/es2019/state/hooks/use-intersection-observer/index.js +2 -1
  20. package/dist/es2019/state/hooks/use-smart-link-seen-event/index.js +60 -0
  21. package/dist/es2019/state/hooks/use-social-proof-experiment/index.js +2 -38
  22. package/dist/es2019/utils/analytics/SmartLinkAnalyticsContext.js +28 -6
  23. package/dist/es2019/view/BlockCard/views/UnauthorisedView.js +9 -18
  24. package/dist/es2019/view/CardWithUrl/card-intersection-observer/index.js +28 -11
  25. package/dist/es2019/view/CardWithUrl/component-lazy/LazyIntersectionObserverCard.js +25 -4
  26. package/dist/es2019/view/CardWithUrl/component.js +3 -48
  27. package/dist/es2019/view/InlineCard/Frame/index.js +3 -2
  28. package/dist/es2019/view/LinkUrl/HyperlinkResolver/index.js +1 -40
  29. package/dist/esm/__tests__/vr-tests/__snapshots__/inline-card/inline-card-with-all-card-examples-in-text--default--jfp-magma-platform-lozenge-jump-fix-false.png +0 -0
  30. package/dist/esm/__tests__/vr-tests/__snapshots__/inline-card/inline-card-with-all-card-examples-in-text--default--jfp-magma-platform-lozenge-jump-fix-true.png +0 -0
  31. package/dist/esm/__tests__/vr-tests/__snapshots__/link-url-connect-button/linkurl-default-state--default.png +0 -0
  32. package/dist/esm/state/hooks/use-intersection-observer/index.js +2 -1
  33. package/dist/esm/state/hooks/use-smart-link-seen-event/index.js +60 -0
  34. package/dist/esm/state/hooks/use-social-proof-experiment/index.js +2 -40
  35. package/dist/esm/utils/analytics/SmartLinkAnalyticsContext.js +31 -8
  36. package/dist/esm/view/BlockCard/views/UnauthorisedView.js +9 -18
  37. package/dist/esm/view/CardWithUrl/card-intersection-observer/index.js +26 -21
  38. package/dist/esm/view/CardWithUrl/component-lazy/LazyIntersectionObserverCard.js +24 -4
  39. package/dist/esm/view/CardWithUrl/component.js +5 -48
  40. package/dist/esm/view/InlineCard/Frame/index.js +3 -2
  41. package/dist/esm/view/LinkUrl/HyperlinkResolver/index.js +1 -42
  42. package/dist/types/common/analytics/generated/analytics.types.d.ts +0 -1
  43. package/dist/types/state/hooks/use-smart-link-seen-event/index.d.ts +14 -0
  44. package/dist/types/state/hooks/use-social-proof-experiment/index.d.ts +0 -22
  45. package/dist/types/utils/analytics/SmartLinkAnalyticsContext.d.ts +10 -0
  46. package/dist/types/view/CardWithUrl/card-intersection-observer/index.d.ts +3 -5
  47. package/dist/types/view/CardWithUrl/types.d.ts +0 -1
  48. package/dist/types-ts4.5/common/analytics/generated/analytics.types.d.ts +0 -1
  49. package/dist/types-ts4.5/state/hooks/use-smart-link-seen-event/index.d.ts +14 -0
  50. package/dist/types-ts4.5/state/hooks/use-social-proof-experiment/index.d.ts +0 -22
  51. package/dist/types-ts4.5/utils/analytics/SmartLinkAnalyticsContext.d.ts +10 -0
  52. package/dist/types-ts4.5/view/CardWithUrl/card-intersection-observer/index.d.ts +3 -5
  53. package/dist/types-ts4.5/view/CardWithUrl/types.d.ts +0 -1
  54. package/package.json +8 -5
  55. package/dist/cjs/__tests__/vr-tests/__snapshots__/link-url-connect-button/linkurl-default-state-without-connect-button-functionality--default.png +0 -0
  56. package/dist/cjs/__tests__/vr-tests/__snapshots__/link-url-connect-button/linkurl-resolved-state-with-feature-flag-enabled-should-show-no-connect-button---default--platform-editor-resolve-hyperlinks-killswitch-false.png +0 -0
  57. package/dist/cjs/__tests__/vr-tests/__snapshots__/link-url-connect-button/linkurl-resolved-state-with-feature-flag-enabled-should-show-no-connect-button---default--platform-editor-resolve-hyperlinks-killswitch-true.png +0 -0
  58. package/dist/cjs/__tests__/vr-tests/__snapshots__/link-url-connect-button/linkurl-unauthorized-state-with-connect-button-direct-render---always-visible---default.png +0 -0
  59. package/dist/cjs/view/CardWithUrl/experiment-meta-event-attributes/index.js +0 -39
  60. package/dist/cjs/view/LinkUrl/HyperlinkResolver/unauthorize-view.js +0 -30
  61. package/dist/es2019/__tests__/vr-tests/__snapshots__/link-url-connect-button/linkurl-default-state-without-connect-button-functionality--default.png +0 -0
  62. package/dist/es2019/__tests__/vr-tests/__snapshots__/link-url-connect-button/linkurl-resolved-state-with-feature-flag-enabled-should-show-no-connect-button---default--platform-editor-resolve-hyperlinks-killswitch-false.png +0 -0
  63. package/dist/es2019/__tests__/vr-tests/__snapshots__/link-url-connect-button/linkurl-resolved-state-with-feature-flag-enabled-should-show-no-connect-button---default--platform-editor-resolve-hyperlinks-killswitch-true.png +0 -0
  64. package/dist/es2019/__tests__/vr-tests/__snapshots__/link-url-connect-button/linkurl-unauthorized-state-with-connect-button-direct-render---always-visible---default.png +0 -0
  65. package/dist/es2019/view/CardWithUrl/experiment-meta-event-attributes/index.js +0 -40
  66. package/dist/es2019/view/LinkUrl/HyperlinkResolver/unauthorize-view.js +0 -22
  67. package/dist/esm/__tests__/vr-tests/__snapshots__/link-url-connect-button/linkurl-default-state-without-connect-button-functionality--default.png +0 -0
  68. package/dist/esm/__tests__/vr-tests/__snapshots__/link-url-connect-button/linkurl-resolved-state-with-feature-flag-enabled-should-show-no-connect-button---default--platform-editor-resolve-hyperlinks-killswitch-false.png +0 -0
  69. package/dist/esm/__tests__/vr-tests/__snapshots__/link-url-connect-button/linkurl-resolved-state-with-feature-flag-enabled-should-show-no-connect-button---default--platform-editor-resolve-hyperlinks-killswitch-true.png +0 -0
  70. package/dist/esm/__tests__/vr-tests/__snapshots__/link-url-connect-button/linkurl-unauthorized-state-with-connect-button-direct-render---always-visible---default.png +0 -0
  71. package/dist/esm/view/CardWithUrl/experiment-meta-event-attributes/index.js +0 -32
  72. package/dist/esm/view/LinkUrl/HyperlinkResolver/unauthorize-view.js +0 -23
  73. package/dist/types/view/CardWithUrl/experiment-meta-event-attributes/index.d.ts +0 -9
  74. package/dist/types/view/LinkUrl/HyperlinkResolver/unauthorize-view.d.ts +0 -10
  75. package/dist/types-ts4.5/view/CardWithUrl/experiment-meta-event-attributes/index.d.ts +0 -9
  76. package/dist/types-ts4.5/view/LinkUrl/HyperlinkResolver/unauthorize-view.d.ts +0 -10
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @atlaskit/smart-card
2
2
 
3
+ ## 44.9.11
4
+
5
+ ### Patch Changes
6
+
7
+ - [`657813a2d7397`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/657813a2d7397) -
8
+ Use useRef to prevent CardSSR to re-render on intersecting into viewport
9
+
10
+ ## 44.9.10
11
+
12
+ ### Patch Changes
13
+
14
+ - [`ebab8f80bfc40`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/ebab8f80bfc40) -
15
+ Clean up the platform_linking_bluelink_connect_CONFLUENCE and
16
+ platform_linking_bluelink_connect_jira no ship code
17
+ - [`ebab8f80bfc40`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/ebab8f80bfc40) -
18
+ NAVX-3611 Fixing the role for inline card when it's an anchor
19
+ - Updated dependencies
20
+
3
21
  ## 44.9.9
4
22
 
5
23
  ### Patch Changes
@@ -847,14 +847,6 @@ events:
847
847
  required: false
848
848
  type: boolean
849
849
  description: Whether the Rovo Actions CTA (inline nudge) was shown for this Smart Link
850
- experimentMeta:
851
- required: false
852
- type: object
853
- description: |
854
- Optional experiment metadata attached to the Smart Link render success event. Root keys
855
- should be Statsig experiment keys. Each experiment entry can contain metadata specific
856
- to that experiment, derived from no-exposure eligibility data only unless explicitly
857
- documented otherwise.
858
850
  - smartLink renderFailed:
859
851
  type: ui
860
852
  description: fires an event that represents when a Smart Link renders unsuccessfully.
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var _react = require("react");
8
+ var _utils = require("../../../utils");
8
9
  // This property enables the intersection observer to be run once the
9
10
  // HTML element being observed is within `X` px of the target container it is
10
11
  // being compared to. Since the default container is the `document`, we set this
@@ -33,7 +34,7 @@ var useIntersectionObserver = function useIntersectionObserver(_ref) {
33
34
  }
34
35
  }, []);
35
36
  (0, _react.useEffect)(function () {
36
- if (!ref.current) {
37
+ if (!(0, _utils.isIntersectionObserverSupported)() || !ref.current) {
37
38
  return;
38
39
  }
39
40
  var intersectionObserver = new IntersectionObserver(onIntersection, {
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useSmartLinkSeenEvent = useSmartLinkSeenEvent;
7
+ var _react = require("react");
8
+ var _useAnalyticsEvents2 = require("../../../common/analytics/generated/use-analytics-events");
9
+ var _SmartLinkAnalyticsContext = require("../../../utils/analytics/SmartLinkAnalyticsContext");
10
+ var _flexible = require("../../../utils/flexible");
11
+ /**
12
+ * Fires `ui.smartLink.seen` once when a smart link with status `unauthorized`
13
+ * enters the viewport. Uses refs internally so it never causes re-renders,
14
+ * which is important for SSR.
15
+ */
16
+ function useSmartLinkSeenEvent(_ref) {
17
+ var appearance = _ref.appearance,
18
+ children = _ref.children,
19
+ id = _ref.id,
20
+ ui = _ref.ui,
21
+ _ref$url = _ref.url,
22
+ url = _ref$url === void 0 ? '' : _ref$url;
23
+ var _useAnalyticsEvents = (0, _useAnalyticsEvents2.useAnalyticsEvents)(),
24
+ fireEvent = _useAnalyticsEvents.fireEvent;
25
+ var _useSmartLinkAnalytic = (0, _SmartLinkAnalyticsContext.useSmartLinkAnalyticsUtils)(),
26
+ getByUrl = _useSmartLinkAnalytic.getByUrl;
27
+ var getAnalyticsProps = (0, _react.useCallback)(function () {
28
+ var isFlexibleUi = (0, _flexible.isFlexibleUiCard)(children, ui);
29
+ var display = isFlexibleUi ? 'flexible' : appearance;
30
+ return {
31
+ display: display,
32
+ id: id
33
+ };
34
+ }, [appearance, children, id, ui]);
35
+ var statusRef = (0, _react.useRef)();
36
+ var analyticsPropsRef = (0, _react.useRef)(null);
37
+ var hasIntersectedRef = (0, _react.useRef)(false);
38
+ var hasFiredSeenRef = (0, _react.useRef)(false);
39
+ (0, _react.useEffect)(function () {
40
+ analyticsPropsRef.current = getAnalyticsProps();
41
+ }, [getAnalyticsProps]);
42
+ var maybeFireSeenEvent = (0, _react.useCallback)(function () {
43
+ if (!hasFiredSeenRef.current && hasIntersectedRef.current && statusRef.current === 'unauthorized') {
44
+ var payload = getByUrl(url, analyticsPropsRef.current);
45
+ fireEvent('ui.smartLink.seen', payload === null || payload === void 0 ? void 0 : payload.attributes);
46
+ hasFiredSeenRef.current = true;
47
+ }
48
+ }, [fireEvent, getByUrl, url]);
49
+ var onIntersecting = (0, _react.useCallback)(function () {
50
+ if (hasIntersectedRef.current) {
51
+ return;
52
+ }
53
+ hasIntersectedRef.current = true;
54
+ maybeFireSeenEvent();
55
+ }, [maybeFireSeenEvent]);
56
+ var onStatusSettled = (0, _react.useCallback)(function (status) {
57
+ statusRef.current = status;
58
+ maybeFireSeenEvent();
59
+ }, [maybeFireSeenEvent]);
60
+ return (0, _react.useMemo)(function () {
61
+ return {
62
+ onIntersecting: onIntersecting,
63
+ onStatusSettled: onStatusSettled
64
+ };
65
+ }, [onIntersecting, onStatusSettled]);
66
+ }
@@ -4,48 +4,11 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.getSocialProofTier = exports.getSocialProofExperimentMeta = exports.getInlineSocialProofExperimentMeta = exports.default = exports.SOCIAL_PROOF_TIER_THRESHOLD = exports.SOCIAL_PROOF_3P_UNAUTH_BLOCK_EXPERIMENT_KEY = exports.INLINE_SOCIAL_PROOF_EXPERIMENT_KEY = void 0;
8
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
7
+ exports.default = void 0;
9
8
  var _react = require("react");
10
9
  var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
11
- var _currentSiteCloudId = require("../../services/current-site-cloud-id");
12
- var _personalization = require("../../services/personalization");
13
10
  var _useSocialProof2 = _interopRequireDefault(require("../use-social-proof"));
14
- 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; }
15
- 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
- var SOCIAL_PROOF_3P_UNAUTH_BLOCK_EXPERIMENT_KEY = exports.SOCIAL_PROOF_3P_UNAUTH_BLOCK_EXPERIMENT_KEY = 'social_proof_3p_unauth_block_exp';
17
- var INLINE_SOCIAL_PROOF_EXPERIMENT_KEY = exports.INLINE_SOCIAL_PROOF_EXPERIMENT_KEY = 'platform_sl_3p_preauth_social_proof_inline_cta';
18
- var SOCIAL_PROOF_TIER_THRESHOLD = exports.SOCIAL_PROOF_TIER_THRESHOLD = 30;
19
- var getSocialProofTier = exports.getSocialProofTier = function getSocialProofTier(connectedPct) {
20
- if (connectedPct === undefined) {
21
- return undefined;
22
- }
23
- return connectedPct >= SOCIAL_PROOF_TIER_THRESHOLD ? 'not-low' : 'low';
24
- };
25
- var getSocialProofExperimentMetadata = function getSocialProofExperimentMetadata(_ref) {
26
- var extensionKey = _ref.extensionKey,
27
- _ref$baseUriWithNoTra = _ref.baseUriWithNoTrailingSlash,
28
- baseUriWithNoTrailingSlash = _ref$baseUriWithNoTra === void 0 ? '' : _ref$baseUriWithNoTra;
29
- if (!extensionKey) {
30
- return {
31
- isEligible: false
32
- };
33
- }
34
- var cloudId = (0, _currentSiteCloudId.getCurrentSiteCloudIdSync)(baseUriWithNoTrailingSlash);
35
- var providerPctMap = (0, _personalization.getProviderPctMapSync)(cloudId, _personalization.SOCIAL_PROOF_TRAIT_NAME);
36
- var tier = getSocialProofTier(providerPctMap === null || providerPctMap === void 0 ? void 0 : providerPctMap[extensionKey]);
37
- return _objectSpread({
38
- isEligible: tier !== undefined
39
- }, tier ? {
40
- tier: tier
41
- } : {});
42
- };
43
- var getSocialProofExperimentMeta = exports.getSocialProofExperimentMeta = function getSocialProofExperimentMeta(params) {
44
- return (0, _defineProperty2.default)({}, SOCIAL_PROOF_3P_UNAUTH_BLOCK_EXPERIMENT_KEY, getSocialProofExperimentMetadata(params));
45
- };
46
- var getInlineSocialProofExperimentMeta = exports.getInlineSocialProofExperimentMeta = function getInlineSocialProofExperimentMeta(params) {
47
- return (0, _defineProperty2.default)({}, INLINE_SOCIAL_PROOF_EXPERIMENT_KEY, getSocialProofExperimentMetadata(params));
48
- };
11
+ var TIER_THRESHOLD = 30;
49
12
 
50
13
  /**
51
14
  * Returns enrollment and treatment state for the social proof unauth block card experiment.
@@ -69,12 +32,11 @@ var useSocialProofExperiment = function useSocialProofExperiment(extensionKey) {
69
32
  isEnabled = _useSocialProof.isEnabled,
70
33
  isLoading = _useSocialProof.isLoading;
71
34
  return (0, _react.useMemo)(function () {
72
- var _getSocialProofTier;
73
35
  var hasSocialProofData = connectedPct !== undefined;
74
36
 
75
37
  // Only fire exposure when data has loaded (prevents exposure inflation)
76
38
  var isTreatment = isEnabled && !isLoading && hasSocialProofData ? (0, _experiments.editorExperiment)('social_proof_3p_unauth_block_exp', true) : false;
77
- var tier = (_getSocialProofTier = getSocialProofTier(connectedPct)) !== null && _getSocialProofTier !== void 0 ? _getSocialProofTier : 'low';
39
+ var tier = connectedPct !== undefined && connectedPct >= TIER_THRESHOLD ? 'not-low' : 'low';
78
40
  return {
79
41
  isTreatment: isTreatment,
80
42
  tier: tier,
@@ -5,11 +5,10 @@ var _typeof = require("@babel/runtime/helpers/typeof");
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.useSmartLinkAnalyticsContext = exports.SmartLinkAnalyticsContext = void 0;
8
+ exports.useSmartLinkAnalyticsUtils = exports.useSmartLinkAnalyticsContext = exports.SmartLinkAnalyticsContext = void 0;
9
9
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
10
  var _react = _interopRequireWildcard(require("react"));
11
11
  var _analyticsNext = require("@atlaskit/analytics-next");
12
- var _featureGateJsClient = _interopRequireDefault(require("@atlaskit/feature-gate-js-client"));
13
12
  var _resolvedAttributes = require("@atlaskit/link-analytics/resolved-attributes");
14
13
  var _linkProvider = require("@atlaskit/link-provider");
15
14
  var _linkingCommon = require("@atlaskit/linking-common");
@@ -34,12 +33,9 @@ var getSmartLinkAnalyticsContext = function getSmartLinkAnalyticsContext(_ref) {
34
33
  status = _ref.status,
35
34
  url = _ref.url,
36
35
  error = _ref.error;
37
- var isHyperlinkConnectExperimentEnabled = _featureGateJsClient.default.getExperimentValue('platform_linking_bluelink_connect_confluence', 'isEnabled', false) || _featureGateJsClient.default.getExperimentValue('platform_linking_bluelink_connect_jira', 'isEnabled', false);
38
- var resolvedAttributes = isHyperlinkConnectExperimentEnabled ? getExtendedResolvedAttributes({
36
+ var resolvedAttributes = getExtendedResolvedAttributes({
39
37
  url: url,
40
38
  displayCategory: display === 'url' ? 'link' : 'smartLink'
41
- }, response, status, error) : getExtendedResolvedAttributes({
42
- url: url
43
39
  }, response, status, error);
44
40
  return {
45
41
  source: source,
@@ -53,13 +49,40 @@ var getSmartLinkAnalyticsContext = function getSmartLinkAnalyticsContext(_ref) {
53
49
  * Provides an analytics context data to supply attributes to events based on a URL
54
50
  * and the link state in the store
55
51
  */
52
+ var useSmartLinkAnalyticsUtils = exports.useSmartLinkAnalyticsUtils = function useSmartLinkAnalyticsUtils() {
53
+ var _useSmartLinkContext = (0, _linkProvider.useSmartLinkContext)(),
54
+ store = _useSmartLinkContext.store;
55
+ var getByUrl = (0, _react.useCallback)(function (url, props) {
56
+ var state = store ? (0, _linkingCommon.getUrl)(store, url) : undefined;
57
+ return getSmartLinkAnalyticsContext({
58
+ display: props === null || props === void 0 ? void 0 : props.display,
59
+ id: props === null || props === void 0 ? void 0 : props.id,
60
+ response: state === null || state === void 0 ? void 0 : state.details,
61
+ source: props === null || props === void 0 ? void 0 : props.source,
62
+ status: state === null || state === void 0 ? void 0 : state.status,
63
+ url: url,
64
+ error: state === null || state === void 0 ? void 0 : state.error
65
+ });
66
+ }, [store]);
67
+ return (0, _react.useMemo)(function () {
68
+ return {
69
+ getByUrl: getByUrl
70
+ };
71
+ }, [getByUrl]);
72
+ };
73
+
74
+ /**
75
+ * Provides an analytics context data to supply attributes to events based on a URL
76
+ * and the link state in the store
77
+ * @deprecated Use useSmartLinkAnalyticsUtils instead
78
+ */
56
79
  var useSmartLinkAnalyticsContext = exports.useSmartLinkAnalyticsContext = function useSmartLinkAnalyticsContext(_ref2) {
57
80
  var display = _ref2.display,
58
81
  id = _ref2.id,
59
82
  source = _ref2.source,
60
83
  url = _ref2.url;
61
- var _useSmartLinkContext = (0, _linkProvider.useSmartLinkContext)(),
62
- store = _useSmartLinkContext.store;
84
+ var _useSmartLinkContext2 = (0, _linkProvider.useSmartLinkContext)(),
85
+ store = _useSmartLinkContext2.store;
63
86
  var state = store ? (0, _linkingCommon.getUrl)(store, url) : undefined;
64
87
  return (0, _react.useMemo)(function () {
65
88
  return getSmartLinkAnalyticsContext({
@@ -25,7 +25,7 @@ var _constants = require("../../../constants");
25
25
  var _messages = require("../../../messages");
26
26
  var _flexibleUiContext = require("../../../state/flexible-ui-context");
27
27
  var _helpers = require("../../../state/helpers");
28
- var _useSocialProofExperiment = _interopRequireWildcard(require("../../../state/hooks/use-social-proof-experiment"));
28
+ var _useSocialProofExperiment = _interopRequireDefault(require("../../../state/hooks/use-social-proof-experiment"));
29
29
  var _UnauthorisedViewContent = _interopRequireDefault(require("../../common/UnauthorisedViewContent"));
30
30
  var _FlexibleCard = _interopRequireDefault(require("../../FlexibleCard"));
31
31
  var _actionGroup = _interopRequireDefault(require("../../FlexibleCard/components/blocks/action-group"));
@@ -256,28 +256,19 @@ var UnauthorisedViewWithExperiment = function UnauthorisedViewWithExperiment(_re
256
256
  isTreatment = _useSocialProofExperi.isTreatment,
257
257
  tier = _useSocialProofExperi.tier,
258
258
  connectedPct = _useSocialProofExperi.connectedPct;
259
- var socialProofExperimentMeta = (0, _useSocialProofExperiment.getSocialProofExperimentMeta)({
260
- extensionKey: extensionKey,
261
- baseUriWithNoTrailingSlash: connections.client.baseUrlOverride
262
- });
263
- var analyticsContextData = {
264
- attributes: {
265
- experiment: 'social_proof_3p_unauth_block_exp',
266
- cohort: isTreatment ? 'treatment' : 'control',
267
- tier: tier,
268
- experimentMeta: socialProofExperimentMeta
269
- }
270
- };
271
259
  if (!isTreatment || !providerName) {
272
- var fallbackView = /*#__PURE__*/React.createElement(UnauthorisedViewBase, (0, _extends2.default)({}, props, {
260
+ return /*#__PURE__*/React.createElement(UnauthorisedViewBase, (0, _extends2.default)({}, props, {
273
261
  testId: testId
274
262
  }));
275
- return connectedPct !== undefined ? /*#__PURE__*/React.createElement(_analyticsNext.AnalyticsContext, {
276
- data: analyticsContextData
277
- }, fallbackView) : fallbackView;
278
263
  }
279
264
  return /*#__PURE__*/React.createElement(_analyticsNext.AnalyticsContext, {
280
- data: analyticsContextData
265
+ data: {
266
+ attributes: {
267
+ experiment: 'social_proof_3p_unauth_block_exp',
268
+ cohort: 'treatment',
269
+ tier: tier
270
+ }
271
+ }
281
272
  }, /*#__PURE__*/React.createElement(UnauthorisedViewFrame, (0, _extends2.default)({}, props, {
282
273
  content: /*#__PURE__*/React.createElement(_SocialProofMessage.default, {
283
274
  tier: tier,
@@ -7,22 +7,36 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.default = void 0;
9
9
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
10
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
10
  var _react = _interopRequireWildcard(require("react"));
12
11
  var _useIntersectionObserver = _interopRequireDefault(require("../../../state/hooks/use-intersection-observer"));
13
- var _utils = require("../../../utils");
12
+ var _useSmartLinkSeenEvent = require("../../../state/hooks/use-smart-link-seen-event");
14
13
  var _cardLoaderWrapper = _interopRequireDefault(require("../card-loader-wrapper"));
15
14
  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); }
16
15
  var withCardIntersectionObserver = function withCardIntersectionObserver(Component) {
17
16
  return function (props) {
18
17
  // TODO: NAVX-4682: Add feature parity to LazyIntersectionObserverCard for no lazy loading
19
- var _useState = (0, _react.useState)(false),
20
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
21
- isIntersected = _useState2[0],
22
- setIsIntersected = _useState2[1];
23
- var onIntersecting = (0, _react.useCallback)(function () {
24
- setIsIntersected(true);
25
- }, []);
18
+ var appearance = props.appearance,
19
+ children = props.children,
20
+ id = props.id,
21
+ onErrorCallback = props.onError,
22
+ ui = props.ui,
23
+ _props$url = props.url,
24
+ url = _props$url === void 0 ? '' : _props$url;
25
+ var _useSmartLinkSeenEven = (0, _useSmartLinkSeenEvent.useSmartLinkSeenEvent)({
26
+ appearance: appearance,
27
+ children: children,
28
+ id: id,
29
+ ui: ui,
30
+ url: url
31
+ }),
32
+ onIntersecting = _useSmartLinkSeenEven.onIntersecting,
33
+ onStatusSettled = _useSmartLinkSeenEven.onStatusSettled;
34
+ var onError = (0, _react.useCallback)(function (data) {
35
+ if (data !== null && data !== void 0 && data.status) {
36
+ onStatusSettled(data.status);
37
+ }
38
+ onErrorCallback === null || onErrorCallback === void 0 || onErrorCallback(data);
39
+ }, [onStatusSettled, onErrorCallback]);
26
40
  var ref = (0, _useIntersectionObserver.default)({
27
41
  onIntersecting: onIntersecting
28
42
  });
@@ -30,17 +44,8 @@ var withCardIntersectionObserver = function withCardIntersectionObserver(Compone
30
44
  appearance: props.appearance,
31
45
  ref: ref
32
46
  }, /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, props, {
33
- isIntersected: isIntersected
47
+ onError: onError
34
48
  })));
35
49
  };
36
50
  };
37
- var withCardIntersectionObserverFallback = function withCardIntersectionObserverFallback(Component) {
38
- return function (props) {
39
- return /*#__PURE__*/_react.default.createElement(_cardLoaderWrapper.default, {
40
- appearance: props.appearance
41
- }, /*#__PURE__*/_react.default.createElement(Component, props));
42
- };
43
- };
44
- var _default = exports.default = function _default(Component) {
45
- return (0, _utils.isIntersectionObserverSupported)() ? withCardIntersectionObserver(Component) : withCardIntersectionObserverFallback(Component);
46
- };
51
+ var _default = exports.default = withCardIntersectionObserver;
@@ -13,6 +13,7 @@ var _platformFeatureFlagsReact = require("@atlaskit/platform-feature-flags-react
13
13
  var _state = require("../../../state");
14
14
  var _ufoExperiences = require("../../../state/analytics/ufoExperiences");
15
15
  var _useIntersectionObserver = _interopRequireDefault(require("../../../state/hooks/use-intersection-observer"));
16
+ var _useSmartLinkSeenEvent = require("../../../state/hooks/use-smart-link-seen-event");
16
17
  var _shouldSample = require("../../../utils/shouldSample");
17
18
  var _cardLoaderWrapper = _interopRequireDefault(require("../card-loader-wrapper"));
18
19
  var _component = require("../component");
@@ -82,25 +83,44 @@ var LazyIntersectionObserverCardNew = function LazyIntersectionObserverCardNew(p
82
83
  _useState8 = (0, _slicedToArray2.default)(_useState7, 1),
83
84
  shouldSendRenderedUFOEvent = _useState8[0];
84
85
  var appearance = props.appearance,
85
- url = props.url,
86
- id = props.id;
86
+ children = props.children,
87
+ id = props.id,
88
+ onErrorCallback = props.onError,
89
+ ui = props.ui,
90
+ url = props.url;
87
91
  var prefetch = (0, _state.usePrefetch)(url);
88
92
  var ComponentObserver = appearance === 'inline' ? 'span' : 'div';
93
+ var _useSmartLinkSeenEven = (0, _useSmartLinkSeenEvent.useSmartLinkSeenEvent)({
94
+ appearance: appearance,
95
+ children: children,
96
+ id: id,
97
+ ui: ui,
98
+ url: url
99
+ }),
100
+ onSeenIntersecting = _useSmartLinkSeenEven.onIntersecting,
101
+ onStatusSettled = _useSmartLinkSeenEven.onStatusSettled;
102
+ var onError = (0, _react.useCallback)(function (data) {
103
+ if (data !== null && data !== void 0 && data.status) {
104
+ onStatusSettled(data.status);
105
+ }
106
+ onErrorCallback === null || onErrorCallback === void 0 || onErrorCallback(data);
107
+ }, [onStatusSettled, onErrorCallback]);
89
108
  var onIntersection = (0, _react.useCallback)(function (isIntersecting) {
90
109
  if (isIntersecting) {
91
110
  if (shouldSendRenderedUFOEvent) {
92
111
  (0, _ufoExperiences.startUfoExperience)('smart-link-rendered', id);
93
112
  }
113
+ onSeenIntersecting();
94
114
  setIsIntersected(true);
95
115
  } else {
96
116
  prefetch();
97
117
  }
98
- }, [id, prefetch, shouldSendRenderedUFOEvent]);
118
+ }, [id, onSeenIntersecting, prefetch, shouldSendRenderedUFOEvent]);
99
119
  var ref = (0, _useIntersectionObserver.default)({
100
120
  onIntersection: onIntersection
101
121
  });
102
122
  var content = isIntersected ? /*#__PURE__*/_react.default.createElement(_component.CardWithUrlContent, (0, _extends2.default)({}, props, {
103
- isIntersected: true
123
+ onError: onError
104
124
  })) : /*#__PURE__*/_react.default.createElement(ComponentObserver, {
105
125
  ref: ref
106
126
  }, /*#__PURE__*/_react.default.createElement(_LoadingCardLink.LoadingCardLink, props));
@@ -33,7 +33,6 @@ var _FlexibleCard = _interopRequireDefault(require("../FlexibleCard"));
33
33
  var _InlineCard = require("../InlineCard");
34
34
  var _useSmartLinkEvents = require("../SmartLinkEvents/useSmartLinkEvents");
35
35
  var _cardIntersectionObserver = _interopRequireDefault(require("./card-intersection-observer"));
36
- var _experimentMetaEventAttributes = _interopRequireDefault(require("./experiment-meta-event-attributes"));
37
36
  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); }
38
37
  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; }
39
38
  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; }
@@ -44,7 +43,6 @@ function Component(_ref) {
44
43
  url = _ref.url,
45
44
  isSelected = _ref.isSelected,
46
45
  isHovered = _ref.isHovered,
47
- isIntersected = _ref.isIntersected,
48
46
  frameStyle = _ref.frameStyle,
49
47
  platform = _ref.platform,
50
48
  onClick = _ref.onClick,
@@ -72,7 +70,6 @@ function Component(_ref) {
72
70
  createAnalyticsEvent = _useAnalyticsEventsNe.createAnalyticsEvent;
73
71
  var _useAnalyticsEvents = (0, _useAnalyticsEvents3.useAnalyticsEvents)(),
74
72
  fireEvent = _useAnalyticsEvents.fireEvent;
75
- var hasFiredSeenRef = (0, _react.useRef)(false);
76
73
  var isFlexibleUi = (0, _react.useMemo)(function () {
77
74
  return (0, _flexible.isFlexibleUiCard)(children, ui);
78
75
  }, [children, ui]);
@@ -180,10 +177,6 @@ function Component(_ref) {
180
177
  var handleInvoke = (0, _react.useCallback)(function (opts) {
181
178
  return actions.invoke(opts, appearance);
182
179
  }, [actions, appearance]);
183
- var experimentMetaEventAttributes = (0, _experimentMetaEventAttributes.default)({
184
- appearance: appearance,
185
- state: state
186
- });
187
180
 
188
181
  // NB: for each status change in a Smart Link, a performance mark is created.
189
182
  // Measures are sent relative to the first mark, matching what a user sees.
@@ -227,28 +220,13 @@ function Component(_ref) {
227
220
  (0, _analytics.succeedUfoExperience)('smart-link-authenticated', id || 'NULL', {
228
221
  display: isFlexibleUi ? 'flexible' : appearance
229
222
  });
230
- fireEvent('ui.smartLink.renderSuccess', _objectSpread(_objectSpread({
223
+ fireEvent('ui.smartLink.renderSuccess', _objectSpread({
231
224
  display: isFlexibleUi ? 'flexible' : appearance
232
225
  }, appearance === 'inline' && {
233
226
  rovoActionsCtaShown: rovoActionsCtaShown
234
- }), experimentMetaEventAttributes && {
235
- experimentMeta: experimentMetaEventAttributes
236
227
  }));
237
228
  }
238
- }, [appearance, extensionKey, fireEvent, id, isFlexibleUi, rovoActionsCtaShown, state.status, experimentMetaEventAttributes]);
239
-
240
- // Fire smartLink seen event once on a successful render card is in the viewport
241
- (0, _react.useEffect)(function () {
242
- if ((0, _platformFeatureFlags.fg)('platform_sl_event_ui_seen')) {
243
- if (state.status !== 'unauthorized') return;
244
- if (isIntersected && !hasFiredSeenRef.current) {
245
- fireEvent('ui.smartLink.seen', {
246
- display: appearance
247
- });
248
- hasFiredSeenRef.current = true;
249
- }
250
- }
251
- }, [state.status, isIntersected, fireEvent, appearance]);
229
+ }, [appearance, extensionKey, fireEvent, id, isFlexibleUi, rovoActionsCtaShown, state.status]);
252
230
  var onIframeDwell = (0, _react.useCallback)(function (dwellTime, dwellPercentVisible) {
253
231
  fireEvent('ui.smartLinkIframe.dwelled', {
254
232
  id: id,
@@ -371,7 +349,6 @@ function ComponentUpdated(_ref2) {
371
349
  url = _ref2.url,
372
350
  isSelected = _ref2.isSelected,
373
351
  isHovered = _ref2.isHovered,
374
- isIntersected = _ref2.isIntersected,
375
352
  frameStyle = _ref2.frameStyle,
376
353
  platform = _ref2.platform,
377
354
  onClick = _ref2.onClick,
@@ -399,7 +376,6 @@ function ComponentUpdated(_ref2) {
399
376
  createAnalyticsEvent = _useAnalyticsEventsNe2.createAnalyticsEvent;
400
377
  var _useAnalyticsEvents2 = (0, _useAnalyticsEvents3.useAnalyticsEvents)(),
401
378
  fireEvent = _useAnalyticsEvents2.fireEvent;
402
- var hasFiredSeenRef = (0, _react.useRef)(false);
403
379
  var isFlexibleUi = (0, _react.useMemo)(function () {
404
380
  return (0, _flexible.isFlexibleUiCard)(children, ui);
405
381
  }, [children, ui]);
@@ -507,10 +483,6 @@ function ComponentUpdated(_ref2) {
507
483
  var handleInvoke = (0, _react.useCallback)(function (opts) {
508
484
  return actions.invoke(opts, appearance);
509
485
  }, [actions, appearance]);
510
- var experimentMetaEventAttributes = (0, _experimentMetaEventAttributes.default)({
511
- appearance: appearance,
512
- state: state
513
- });
514
486
 
515
487
  // NB: for each status change in a Smart Link, a performance mark is created.
516
488
  // Measures are sent relative to the first mark, matching what a user sees.
@@ -554,28 +526,13 @@ function ComponentUpdated(_ref2) {
554
526
  (0, _analytics.succeedUfoExperience)('smart-link-authenticated', id || 'NULL', {
555
527
  display: isFlexibleUi ? 'flexible' : appearance
556
528
  });
557
- fireEvent('ui.smartLink.renderSuccess', _objectSpread(_objectSpread({
529
+ fireEvent('ui.smartLink.renderSuccess', _objectSpread({
558
530
  display: isFlexibleUi ? 'flexible' : appearance
559
531
  }, appearance === 'inline' && {
560
532
  rovoActionsCtaShown: rovoActionsCtaShown
561
- }), experimentMetaEventAttributes && {
562
- experimentMeta: experimentMetaEventAttributes
563
533
  }));
564
534
  }
565
- }, [appearance, extensionKey, fireEvent, id, isFlexibleUi, rovoActionsCtaShown, state.status, experimentMetaEventAttributes]);
566
-
567
- // Fire smartLink seen event once on a successful render card is in the viewport
568
- (0, _react.useEffect)(function () {
569
- if ((0, _platformFeatureFlags.fg)('platform_sl_event_ui_seen')) {
570
- if (state.status !== 'unauthorized') return;
571
- if (isIntersected && !hasFiredSeenRef.current) {
572
- fireEvent('ui.smartLink.seen', {
573
- display: appearance
574
- });
575
- hasFiredSeenRef.current = true;
576
- }
577
- }
578
- }, [state.status, isIntersected, fireEvent, appearance]);
535
+ }, [appearance, extensionKey, fireEvent, id, isFlexibleUi, rovoActionsCtaShown, state.status]);
579
536
  var onIframeDwell = (0, _react.useCallback)(function (dwellTime, dwellPercentVisible) {
580
537
  fireEvent('ui.smartLinkIframe.dwelled', {
581
538
  id: id,
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.Frame = void 0;
8
8
  var _react = _interopRequireWildcard(require("react"));
9
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
9
10
  var _useLinkClicked = require("../../../state/analytics/useLinkClicked");
10
11
  var _styled = require("./styled");
11
12
  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); }
@@ -48,8 +49,8 @@ var Frame = exports.Frame = /*#__PURE__*/(0, _react.forwardRef)(function (props,
48
49
  withoutBackground: withoutBackground,
49
50
  isSelected: isSelected,
50
51
  isInteractive: isInteractive,
51
- tabIndex: isInteractive ? 0 : undefined,
52
- role: isInteractive ? 'button' : undefined,
52
+ tabIndex: isInteractive && ((0, _platformFeatureFlags.fg)('navx-3611-inline-card-a11y-role-fix') ? !link : true) ? 0 : undefined,
53
+ role: isInteractive && ((0, _platformFeatureFlags.fg)('navx-3611-inline-card-a11y-role-fix') ? !link : true) ? 'button' : undefined,
53
54
  onClick: handleClick,
54
55
  onMouseDown: handleMouseDown,
55
56
  onKeyPress: handleKeyPress,