@atlaskit/smart-card 19.1.13 → 19.1.16

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 (79) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/dist/cjs/extractors/common/actions/extractPreviewAction.js +1 -1
  3. package/dist/cjs/index.js +6 -0
  4. package/dist/cjs/state/analytics/useSmartLinkAnalytics.js +257 -36
  5. package/dist/cjs/state/hooks/useSmartLink.js +1 -1
  6. package/dist/cjs/state/hooks-external/useSmartLinkActions.js +1 -1
  7. package/dist/cjs/state/hooks-external/useSmartLinkReload.js +1 -1
  8. package/dist/cjs/state/index.js +9 -1
  9. package/dist/cjs/utils/analytics/analytics.js +26 -14
  10. package/dist/cjs/utils/analytics/types.js +5 -0
  11. package/dist/cjs/version.json +1 -1
  12. package/dist/cjs/view/CardWithData/loader.js +2 -0
  13. package/dist/cjs/view/CardWithUrl/component.js +12 -8
  14. package/dist/cjs/view/CardWithUrl/loader.js +5 -3
  15. package/dist/cjs/view/FlexibleCard/components/elements/date-time/index.js +3 -2
  16. package/dist/cjs/view/HoverCard/index.js +5 -3
  17. package/dist/cjs/view/HoverCard/utils.js +3 -1
  18. package/dist/cjs/view/InlineCard/ResolvedView/index.js +2 -0
  19. package/dist/cjs/view/InlineCard/index.js +3 -1
  20. package/dist/es2019/extractors/common/actions/extractPreviewAction.js +1 -1
  21. package/dist/es2019/index.js +1 -1
  22. package/dist/es2019/state/analytics/useSmartLinkAnalytics.js +196 -30
  23. package/dist/es2019/state/hooks/useSmartLink.js +1 -1
  24. package/dist/es2019/state/hooks-external/useSmartLinkActions.js +1 -1
  25. package/dist/es2019/state/hooks-external/useSmartLinkReload.js +1 -1
  26. package/dist/es2019/state/index.js +2 -1
  27. package/dist/es2019/utils/analytics/analytics.js +26 -14
  28. package/dist/es2019/utils/analytics/types.js +1 -0
  29. package/dist/es2019/version.json +1 -1
  30. package/dist/es2019/view/CardWithData/loader.js +2 -0
  31. package/dist/es2019/view/CardWithUrl/component.js +12 -8
  32. package/dist/es2019/view/CardWithUrl/loader.js +5 -3
  33. package/dist/es2019/view/FlexibleCard/components/elements/date-time/index.js +3 -2
  34. package/dist/es2019/view/HoverCard/index.js +5 -3
  35. package/dist/es2019/view/HoverCard/utils.js +1 -1
  36. package/dist/es2019/view/InlineCard/ResolvedView/index.js +2 -0
  37. package/dist/es2019/view/InlineCard/index.js +2 -0
  38. package/dist/esm/extractors/common/actions/extractPreviewAction.js +1 -1
  39. package/dist/esm/index.js +1 -1
  40. package/dist/esm/state/analytics/useSmartLinkAnalytics.js +256 -37
  41. package/dist/esm/state/hooks/useSmartLink.js +1 -1
  42. package/dist/esm/state/hooks-external/useSmartLinkActions.js +1 -1
  43. package/dist/esm/state/hooks-external/useSmartLinkReload.js +1 -1
  44. package/dist/esm/state/index.js +2 -1
  45. package/dist/esm/utils/analytics/analytics.js +26 -14
  46. package/dist/esm/utils/analytics/types.js +1 -0
  47. package/dist/esm/version.json +1 -1
  48. package/dist/esm/view/CardWithData/loader.js +2 -0
  49. package/dist/esm/view/CardWithUrl/component.js +12 -8
  50. package/dist/esm/view/CardWithUrl/loader.js +5 -3
  51. package/dist/esm/view/FlexibleCard/components/elements/date-time/index.js +3 -2
  52. package/dist/esm/view/HoverCard/index.js +5 -3
  53. package/dist/esm/view/HoverCard/utils.js +3 -1
  54. package/dist/esm/view/InlineCard/ResolvedView/index.js +2 -0
  55. package/dist/esm/view/InlineCard/index.js +3 -1
  56. package/dist/types/index.d.ts +1 -1
  57. package/dist/types/state/analytics/useSmartLinkAnalytics.d.ts +146 -13
  58. package/dist/types/state/helpers.d.ts +2 -2
  59. package/dist/types/state/hooks/useSmartLink.d.ts +10 -12
  60. package/dist/types/state/index.d.ts +1 -0
  61. package/dist/types/utils/analytics/analytics.d.ts +8 -8
  62. package/dist/types/utils/analytics/types.d.ts +1 -0
  63. package/dist/types/utils/performance.d.ts +1 -1
  64. package/dist/types/utils/types.d.ts +1 -1
  65. package/dist/types/view/BlockCard/types.d.ts +1 -0
  66. package/dist/types/view/Card/index.d.ts +1 -1
  67. package/dist/types/view/Card/types.d.ts +3 -0
  68. package/dist/types/view/CardWithData/types.d.ts +1 -0
  69. package/dist/types/view/CardWithUrl/component.d.ts +1 -1
  70. package/dist/types/view/CardWithUrl/types.d.ts +2 -0
  71. package/dist/types/view/EmbedCard/types.d.ts +1 -0
  72. package/dist/types/view/FlexibleCard/components/elements/date-time/types.d.ts +4 -0
  73. package/dist/types/view/FlexibleCard/types.d.ts +4 -0
  74. package/dist/types/view/HoverCard/index.d.ts +1 -1
  75. package/dist/types/view/HoverCard/types.d.ts +1 -0
  76. package/dist/types/view/HoverCard/utils.d.ts +1 -1
  77. package/dist/types/view/InlineCard/ResolvedView/index.d.ts +2 -0
  78. package/dist/types/view/InlineCard/types.d.ts +1 -0
  79. package/package.json +1 -1
@@ -1,34 +1,149 @@
1
1
  import { useMemo } from 'react';
2
- import { uiAuthEvent, uiAuthAlternateAccountEvent, uiCardClickedEvent, uiActionClickedEvent, uiClosedAuthEvent, uiRenderSuccessEvent, uiHoverCardViewedEvent, uiHoverCardDismissedEvent, uiHoverCardOpenLinkClickedEvent, resolvedEvent as _resolvedEvent, unresolvedEvent as _unresolvedEvent, invokeSucceededEvent as _invokeSucceededEvent, invokeFailedEvent as _invokeFailedEvent, connectSucceededEvent as _connectSucceededEvent, connectFailedEvent as _connectFailedEvent, trackAppAccountConnected, screenAuthPopupEvent, instrumentEvent } from '../../utils/analytics';
2
+ import { getUrl } from '@atlaskit/linking-common';
3
+ import { uiAuthEvent, uiAuthAlternateAccountEvent, uiCardClickedEvent, uiActionClickedEvent, uiClosedAuthEvent, uiRenderSuccessEvent, uiHoverCardViewedEvent, uiHoverCardDismissedEvent, uiHoverCardOpenLinkClickedEvent, invokeSucceededEvent as _invokeSucceededEvent, invokeFailedEvent as _invokeFailedEvent, connectSucceededEvent as _connectSucceededEvent, connectFailedEvent as _connectFailedEvent, trackAppAccountConnected, screenAuthPopupEvent, instrumentEvent } from '../../utils/analytics';
3
4
  import { failUfoExperience, startUfoExperience, succeedUfoExperience } from './ufoExperiences';
4
- export var useSmartLinkAnalytics = function useSmartLinkAnalytics(dispatchAnalytics) {
5
+ import { getDefinitionId, getExtensionKey, getResourceType } from '../helpers';
6
+ import { useSmartLinkContext } from '@atlaskit/link-provider';
7
+ /**
8
+ * This hook provides usage of Smart Link analytics outside of the Card component.
9
+ * Can be provided to Card via the analyticsEvents prop to change the analytics events.
10
+ * @param url URL of the link
11
+ * @param dispatchAnalytics dispatchAnalytics function
12
+ * @param id fallback id of the events sent if no id is available
13
+ * @param defaultLocation location attribute to be used
14
+ * @returns
15
+ */
16
+
17
+ export var useSmartLinkAnalytics = function useSmartLinkAnalytics(url, dispatchAnalytics, id, defaultLocation) {
18
+ var defaultId = id || 'NULL'; // We don't want to trigger a re-render by using useSmartCardState
19
+
20
+ var _useSmartLinkContext = useSmartLinkContext(),
21
+ store = _useSmartLinkContext.store;
22
+
23
+ var state = getUrl(store, url);
24
+ var extractedDefinitionId = getDefinitionId(state.details);
25
+ var extractedExtensionKey = getExtensionKey(state.details);
26
+ var extractedResourceType = getResourceType(state.details);
27
+ /** Contains all ui analytics events */
28
+
5
29
  var ui = useMemo(function () {
6
30
  return {
7
- authEvent: function authEvent(display, definitionId, extensionKey) {
31
+ /**
32
+ * This fires an event that represents when a user clicks on the authentication
33
+ * call to action with no current authenticated account. (i.e. Connect to Preview).
34
+ * @param display Whether the card was an Inline, Block, Embed or Flexible UI.
35
+ * @param definitionId The definitionId of the Smart Link resolver invoked.
36
+ * @param extensionKey The extensionKey of the Smart Link resovler invoked.
37
+ * @returns
38
+ */
39
+ authEvent: function authEvent(display) {
40
+ var definitionId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : extractedDefinitionId;
41
+ var extensionKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : extractedExtensionKey;
8
42
  return dispatchAnalytics(uiAuthEvent(display, definitionId, extensionKey));
9
43
  },
10
- authAlternateAccountEvent: function authAlternateAccountEvent(display, definitionId, extensionKey) {
44
+
45
+ /**
46
+ * This fires an event that represents when a user clicks on the authentication
47
+ * call to action with a forbidden authenticated account. (i.e. Try another account).
48
+ * @param display Whether the card was an Inline, Block, Embed or Flexible UI.
49
+ * @param definitionId The definitionId of the Smart Link resolver invoked.
50
+ * @param extensionKey The extensionKey of the Smart Link resovler invoked.
51
+ * @returns
52
+ */
53
+ authAlternateAccountEvent: function authAlternateAccountEvent(display) {
54
+ var definitionId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : extractedDefinitionId;
55
+ var extensionKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : extractedExtensionKey;
11
56
  return dispatchAnalytics(uiAuthAlternateAccountEvent(display, definitionId, extensionKey));
12
57
  },
13
- cardClickedEvent: function cardClickedEvent(display, definitionId, extensionKey, isModifierKeyPressed) {
14
- return dispatchAnalytics(uiCardClickedEvent(display, definitionId, extensionKey, isModifierKeyPressed));
58
+
59
+ /**
60
+ * This fires an event that represents when a user clicks on a Smart Link.
61
+ * @param id The unique ID for this Smart Link.
62
+ * @param display Whether the card was an Inline, Block, Embed or Flexible UI.
63
+ * @param definitionId The definitionId of the Smart Link resolver invoked.
64
+ * @param extensionKey The extensionKey of the Smart Link resovler invoked.
65
+ * @param isModifierKeyPressed Whether a modifier key was pressed when clicking the Smart Link.
66
+ * @param location Where the Smart Link is currently rendered.
67
+ * @param destinationProduct The product the Smart Link is linked to.
68
+ * @returns
69
+ */
70
+ cardClickedEvent: function cardClickedEvent() {
71
+ var id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultId;
72
+ var display = arguments.length > 1 ? arguments[1] : undefined;
73
+ var status = arguments.length > 2 ? arguments[2] : undefined;
74
+ var definitionId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : extractedDefinitionId;
75
+ var extensionKey = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : extractedExtensionKey;
76
+ var isModifierKeyPressed = arguments.length > 5 ? arguments[5] : undefined;
77
+ var location = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : defaultLocation;
78
+ var destinationProduct = arguments.length > 7 ? arguments[7] : undefined;
79
+ return dispatchAnalytics(uiCardClickedEvent(id, display, status, definitionId, extensionKey, isModifierKeyPressed, location, destinationProduct));
15
80
  },
16
- actionClickedEvent: function actionClickedEvent(id, extensionKey, actionType, display, invokeType) {
81
+
82
+ /**
83
+ * This fires an event that represents when a user clicks on a Smart Link action.
84
+ * Note: This also starts the UFO smart-link-action-invocation experience.
85
+ * @param id The unique ID for this Smart Link.
86
+ * @param extensionKey The extensionKey of the Smart Link resovler invoked.
87
+ * @param actionType The type of the action that was clicked, e.g. PreviewAction
88
+ * @param display Whether the card was an Inline, Block, Embed or Flexible UI.
89
+ * @param invokeType Whether the action invoked made a call to a server.
90
+ * @returns
91
+ */
92
+ actionClickedEvent: function actionClickedEvent() {
93
+ var id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultId;
94
+ var extensionKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : extractedExtensionKey;
95
+ var actionType = arguments.length > 2 ? arguments[2] : undefined;
96
+ var display = arguments.length > 3 ? arguments[3] : undefined;
97
+ var invokeType = arguments.length > 4 ? arguments[4] : undefined;
17
98
  startUfoExperience('smart-link-action-invocation', id, {
18
99
  actionType: actionType,
19
100
  display: display,
20
101
  extensionKey: extensionKey,
21
102
  invokeType: invokeType
22
103
  });
23
- dispatchAnalytics(uiActionClickedEvent(extensionKey, actionType, display));
104
+ dispatchAnalytics(uiActionClickedEvent(actionType, extensionKey, display));
24
105
  },
25
- hoverCardOpenLinkClickedEvent: function hoverCardOpenLinkClickedEvent(previewDisplay, definitionId, extensionKey, previewInvokeMethod) {
106
+
107
+ /**
108
+ * This fires an event that represents when a user clicks on a hover preview's "navigate to link" button.
109
+ * https://product-fabric.atlassian.net/wiki/spaces/EM/pages/3206743323/Analytics+Metrics+-+Hover+Previews
110
+ * @param previewDisplay What format the preview is in.
111
+ * @param definitionId The definitionId of the Smart Link resolver invoked.
112
+ * @param extensionKey The extensionKey of the Smart Link resovler invoked.
113
+ * @param previewInvokeMethod How the preview was triggered.
114
+ */
115
+ hoverCardOpenLinkClickedEvent: function hoverCardOpenLinkClickedEvent(previewDisplay) {
116
+ var definitionId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : extractedDefinitionId;
117
+ var extensionKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : extractedExtensionKey;
118
+ var previewInvokeMethod = arguments.length > 3 ? arguments[3] : undefined;
26
119
  dispatchAnalytics(uiHoverCardOpenLinkClickedEvent(previewDisplay, definitionId, extensionKey, previewInvokeMethod));
27
120
  },
28
- closedAuthEvent: function closedAuthEvent(display, definitionId, extensionKey) {
121
+
122
+ /**
123
+ * This fires an event that represents when a user closed the authentication window without authenticating after opening it.
124
+ * @param display Whether the card was an Inline, Block, Embed or Flexible UI.
125
+ * @param definitionId The definitionId of the Smart Link resolver invoked.
126
+ * @param extensionKey The extensionKey of the Smart Link resovler invoked.
127
+ * @returns
128
+ */
129
+ closedAuthEvent: function closedAuthEvent(display) {
130
+ var definitionId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : extractedDefinitionId;
131
+ var extensionKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : extractedExtensionKey;
29
132
  return dispatchAnalytics(uiClosedAuthEvent(display, definitionId, extensionKey));
30
133
  },
31
- renderSuccessEvent: function renderSuccessEvent(display, id, definitionId, extensionKey) {
134
+
135
+ /**
136
+ * This fires an event that represents when a Smart Link was rendered successfully.
137
+ * Note: this fires even if the Smart Link request errored out.
138
+ * @param display Whether the card was an Inline, Block, Embed or Flexible UI.
139
+ * @param id The unique ID for this Smart Link.
140
+ * @param definitionId The definitionId of the Smart Link resolver invoked.
141
+ * @param extensionKey The extensionKey of the Smart Link resovler invoked.
142
+ */
143
+ renderSuccessEvent: function renderSuccessEvent(display, status) {
144
+ var id = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultId;
145
+ var definitionId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : extractedDefinitionId;
146
+ var extensionKey = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : extractedExtensionKey;
32
147
  succeedUfoExperience('smart-link-rendered', id, {
33
148
  extensionKey: extensionKey,
34
149
  display: display
@@ -37,47 +152,131 @@ export var useSmartLinkAnalytics = function useSmartLinkAnalytics(dispatchAnalyt
37
152
  succeedUfoExperience('smart-link-authenticated', id, {
38
153
  display: display
39
154
  });
40
- dispatchAnalytics(uiRenderSuccessEvent(display, definitionId, extensionKey));
155
+ dispatchAnalytics(uiRenderSuccessEvent(display, status, definitionId, extensionKey));
41
156
  },
42
- hoverCardViewedEvent: function hoverCardViewedEvent(hoverDisplay, definitionId, extensionKey, previewInvokeMethod) {
43
- return dispatchAnalytics(uiHoverCardViewedEvent(hoverDisplay, definitionId, extensionKey, previewInvokeMethod));
157
+
158
+ /**
159
+ * This fires an event that represents a hover preview being opened.
160
+ * @param hoverDisplay Whether the hover preview was displayed as a card or embed.
161
+ * @param definitionId The definitionId of the Smart Link resolver invoked.
162
+ * @param extensionKey The extensionKey of the Smart Link resovler invoked.
163
+ * @param previewInvokeMethod How the preview was triggered.
164
+ * @returns
165
+ */
166
+ hoverCardViewedEvent: function hoverCardViewedEvent(previewDisplay) {
167
+ var definitionId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : extractedDefinitionId;
168
+ var extensionKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : extractedExtensionKey;
169
+ var previewInvokeMethod = arguments.length > 3 ? arguments[3] : undefined;
170
+ return dispatchAnalytics(uiHoverCardViewedEvent(previewDisplay, definitionId, extensionKey, previewInvokeMethod));
44
171
  },
45
- hoverCardDismissedEvent: function hoverCardDismissedEvent(hoverDisplay, hoverTime, definitionId, extensionKey, previewInvokeMethod) {
46
- return dispatchAnalytics(uiHoverCardDismissedEvent(hoverDisplay, hoverTime, definitionId, extensionKey, previewInvokeMethod));
172
+
173
+ /**
174
+ * This fires an event that represents a hover preview being dismissed.
175
+ * @param hoverDisplay Whether the hover preview was displayed as a card or embed.
176
+ * @param hoverTime The duration that the user hovered over a Smart Link before the preview was dismissed.
177
+ * @param definitionId The definitionId of the Smart Link resolver invoked.
178
+ * @param extensionKey The extensionKey of the Smart Link resovler invoked.
179
+ * @param previewInvokeMethod How the preview was triggered.
180
+ * @returns
181
+ */
182
+ hoverCardDismissedEvent: function hoverCardDismissedEvent(previewDisplay, hoverTime) {
183
+ var definitionId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : extractedDefinitionId;
184
+ var extensionKey = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : extractedExtensionKey;
185
+ var previewInvokeMethod = arguments.length > 4 ? arguments[4] : undefined;
186
+ return dispatchAnalytics(uiHoverCardDismissedEvent(previewDisplay, hoverTime, definitionId, extensionKey, previewInvokeMethod));
47
187
  }
48
188
  };
49
- }, [dispatchAnalytics]);
189
+ }, [defaultId, defaultLocation, extractedDefinitionId, extractedExtensionKey, dispatchAnalytics]);
190
+ /** Contains all operational analytics events */
191
+
50
192
  var operational = useMemo(function () {
51
193
  return {
52
- resolvedEvent: function resolvedEvent(id, definitionId, extensionKey, resourceType) {
53
- return dispatchAnalytics(_resolvedEvent(id, definitionId, extensionKey, resourceType));
54
- },
55
- unresolvedEvent: function unresolvedEvent(id, status, definitionId, extensionKey, resourceType) {
56
- return dispatchAnalytics(_unresolvedEvent(id, status, definitionId, extensionKey, resourceType));
57
- },
58
- invokeSucceededEvent: function invokeSucceededEvent(id, providerKey, actionType, display) {
194
+ /**
195
+ * This fires an event that represents an action being successfully invoked.
196
+ * @param id The unique ID for this Smart Link.
197
+ * @param extensionKey The extensionKey of the Smart Link resovler invoked.
198
+ * @param actionType The type of action invoked, e.g. PreviewAction
199
+ * @param display Whether the card was an Inline, Block, Embed or Flexible UI.
200
+ */
201
+ invokeSucceededEvent: function invokeSucceededEvent() {
202
+ var id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultId;
203
+ var extensionKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : extractedExtensionKey;
204
+ var actionType = arguments.length > 2 ? arguments[2] : undefined;
205
+ var display = arguments.length > 3 ? arguments[3] : undefined;
59
206
  succeedUfoExperience('smart-link-action-invocation', id);
60
- dispatchAnalytics(_invokeSucceededEvent(id, providerKey, actionType, display));
207
+ dispatchAnalytics(_invokeSucceededEvent(id, actionType, display, extensionKey));
61
208
  },
62
- invokeFailedEvent: function invokeFailedEvent(id, providerKey, actionType, display, reason) {
209
+
210
+ /**
211
+ * This fires an event that represents an action being unsuccessfully invoked.
212
+ * @param id The unique ID for this Smart Link.
213
+ * @param extensionKey The extensionKey of the Smart Link resovler invoked.
214
+ * @param actionType The type of action invoked, e.g. PreviewAction
215
+ * @param display Whether the card was an Inline, Block, Embed or Flexible UI.
216
+ * @param reason The reason the invocation failed.
217
+ */
218
+ invokeFailedEvent: function invokeFailedEvent() {
219
+ var id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultId;
220
+ var providerKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : extractedExtensionKey;
221
+ var actionType = arguments.length > 2 ? arguments[2] : undefined;
222
+ var display = arguments.length > 3 ? arguments[3] : undefined;
223
+ var reason = arguments.length > 4 ? arguments[4] : undefined;
63
224
  failUfoExperience('smart-link-action-invocation', id);
64
- dispatchAnalytics(_invokeFailedEvent(id, providerKey, actionType, display, reason));
225
+ dispatchAnalytics(_invokeFailedEvent(id, actionType, display, reason, providerKey));
65
226
  },
66
- connectSucceededEvent: function connectSucceededEvent(id, definitionId, extensionKey) {
227
+
228
+ /**
229
+ * This fires an event that represents an account successfully being connected via a Smart Link.
230
+ * @param id The unique ID for this Smart Link.
231
+ * @param definitionId The definitionId of the Smart Link resolver invoked.
232
+ * @param extensionKey The extensionKey of the Smart Link resovler invoked.
233
+ */
234
+ connectSucceededEvent: function connectSucceededEvent() {
235
+ var id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultId;
236
+ var definitionId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : extractedDefinitionId;
237
+ var extensionKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : extractedExtensionKey;
67
238
  startUfoExperience('smart-link-authenticated', id, {
68
239
  extensionKey: extensionKey,
69
240
  status: 'success'
70
241
  });
71
242
  dispatchAnalytics(_connectSucceededEvent(definitionId, extensionKey));
72
243
  },
73
- connectFailedEvent: function connectFailedEvent(id, definitionId, extensionKey, status) {
244
+
245
+ /**
246
+ * This fires an event that represents an account unsuccessfully being connected.
247
+ * @param id The unique ID for this Smart Link.
248
+ * @param definitionId The definitionId of the Smart Link resolver invoked.
249
+ * @param extensionKey The extensionKey of the Smart Link resovler invoked.
250
+ * @param reason The reason why the Smart Link connect account failed.
251
+ */
252
+ connectFailedEvent: function connectFailedEvent() {
253
+ var id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultId;
254
+ var definitionId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : extractedDefinitionId;
255
+ var extensionKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : extractedExtensionKey;
256
+ var reason = arguments.length > 3 ? arguments[3] : undefined;
74
257
  startUfoExperience('smart-link-authenticated', id, {
75
258
  extensionKey: extensionKey,
76
- status: status
259
+ status: reason
77
260
  });
78
- dispatchAnalytics(_connectFailedEvent(definitionId, extensionKey, status));
261
+ dispatchAnalytics(_connectFailedEvent(definitionId, extensionKey, reason));
79
262
  },
80
- instrument: function instrument(id, status, definitionId, extensionKey, resourceType, error) {
263
+
264
+ /**
265
+ * This fires an event which represents a Smart Link request succeeding or failing based on the status.
266
+ * @param id The unique ID for this Smart Link.
267
+ * @param status The status of the Smart Link.
268
+ * @param definitionId The definitionId of the Smart Link resolver invoked.
269
+ * @param extensionKey The extensionKey of the Smart Link resovler invoked.
270
+ * @param resourceType The type of resource that was invoked. This is provider specific (e.g. File, PullRequest).
271
+ * @param error An error representing why the Smart Link request failed.
272
+ */
273
+ instrument: function instrument() {
274
+ var id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultId;
275
+ var status = arguments.length > 1 ? arguments[1] : undefined;
276
+ var definitionId = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : extractedDefinitionId;
277
+ var extensionKey = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : extractedExtensionKey;
278
+ var resourceType = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : extractedResourceType;
279
+ var error = arguments.length > 5 ? arguments[5] : undefined;
81
280
  var event = instrumentEvent(id, status, definitionId, extensionKey, resourceType, error);
82
281
 
83
282
  if (event) {
@@ -85,21 +284,41 @@ export var useSmartLinkAnalytics = function useSmartLinkAnalytics(dispatchAnalyt
85
284
  }
86
285
  }
87
286
  };
88
- }, [dispatchAnalytics]);
287
+ }, [defaultId, extractedResourceType, extractedDefinitionId, extractedExtensionKey, dispatchAnalytics]);
288
+ /** Contains all track analytics events */
289
+
89
290
  var track = useMemo(function () {
90
291
  return {
91
- appAccountConnected: function appAccountConnected(definitionId, extensionKey) {
292
+ /**
293
+ * This fires an event which represents a user starting the Smart Link connect account process.
294
+ * @param definitionId The definitionId of the Smart Link resolver invoked.
295
+ * @param extensionKey The extensionKey of the Smart Link resovler invoked.
296
+ * @returns
297
+ */
298
+ appAccountConnected: function appAccountConnected() {
299
+ var definitionId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : extractedDefinitionId;
300
+ var extensionKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : extractedExtensionKey;
92
301
  return dispatchAnalytics(trackAppAccountConnected(definitionId, extensionKey));
93
302
  }
94
303
  };
95
- }, [dispatchAnalytics]);
304
+ }, [extractedDefinitionId, extractedExtensionKey, dispatchAnalytics]);
305
+ /** Contains all screen analytics events */
306
+
96
307
  var screen = useMemo(function () {
97
308
  return {
98
- authPopupEvent: function authPopupEvent(definitionId, extensionKey) {
309
+ /**
310
+ * This fires an event which represents the connect account page being opened.
311
+ * @param definitionId The definitionId of the Smart Link resolver invoked.
312
+ * @param extensionKey The extensionKey of the Smart Link resovler invoked.
313
+ * @returns
314
+ */
315
+ authPopupEvent: function authPopupEvent() {
316
+ var definitionId = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : extractedDefinitionId;
317
+ var extensionKey = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : extractedExtensionKey;
99
318
  return dispatchAnalytics(screenAuthPopupEvent(definitionId, extensionKey));
100
319
  }
101
320
  };
102
- }, [dispatchAnalytics]);
321
+ }, [extractedDefinitionId, extractedExtensionKey, dispatchAnalytics]);
103
322
  return useMemo(function () {
104
323
  return {
105
324
  ui: ui,
@@ -7,7 +7,7 @@ import { useSmartLinkAnalytics } from '../analytics';
7
7
  import { useSmartLinkRenderers } from '../renderers';
8
8
  export function useSmartLink(id, url, dispatchAnalytics) {
9
9
  var state = useSmartLinkState(url);
10
- var analytics = useSmartLinkAnalytics(dispatchAnalytics);
10
+ var analytics = useSmartLinkAnalytics(url, dispatchAnalytics, id);
11
11
  var actions = useSmartLinkActions(id, url, analytics);
12
12
  var config = useSmartLinkConfig();
13
13
  var renderers = useSmartLinkRenderers(); // NB: used to propagate errors from hooks to error boundaries.
@@ -22,7 +22,7 @@ export function useSmartLinkActions(_ref) {
22
22
  setActions = _useState2[1];
23
23
 
24
24
  var linkState = useLinkState(url);
25
- var linkAnalytics = useLinkAnalytics(analyticsHandler);
25
+ var linkAnalytics = useLinkAnalytics(url, analyticsHandler, id);
26
26
  var linkActions = useLinkActions(id, url, linkAnalytics);
27
27
  useEffect(function () {
28
28
  if (!linkState.details) {
@@ -14,7 +14,7 @@ export function useSmartLinkReload(_ref) {
14
14
  var id = useMemo(function () {
15
15
  return uuid();
16
16
  }, []);
17
- var linkAnalytics = useLinkAnalytics(analyticsHandler);
17
+ var linkAnalytics = useLinkAnalytics(url, analyticsHandler, id);
18
18
  var linkActions = useLinkActions(id, url, linkAnalytics);
19
19
  return linkActions.reload;
20
20
  }
@@ -1,2 +1,3 @@
1
1
  export { SmartCardContext, SmartCardProvider, useSmartLinkContext } from '@atlaskit/link-provider';
2
- export { useSmartLink, usePrefetch } from './hooks';
2
+ export { useSmartLink, usePrefetch } from './hooks';
3
+ export { useSmartLinkAnalytics } from './analytics';
@@ -14,6 +14,11 @@ export var context = {
14
14
  packageName: packageName,
15
15
  packageVersion: packageVersion
16
16
  };
17
+ var uiActionSubjectIds = {
18
+ DownloadAction: 'downloadDocument',
19
+ PreviewAction: 'invokePreviewScreen',
20
+ ViewAction: 'shortcutGoToLink'
21
+ };
17
22
  export var SmartLinkEvents = /*#__PURE__*/function () {
18
23
  function SmartLinkEvents() {
19
24
  _classCallCheck(this, SmartLinkEvents);
@@ -82,7 +87,7 @@ export var unresolvedEvent = function unresolvedEvent(id, status, definitionId,
82
87
  })
83
88
  };
84
89
  };
85
- export var invokeSucceededEvent = function invokeSucceededEvent(id, extensionKey, actionType, display) {
90
+ export var invokeSucceededEvent = function invokeSucceededEvent(id, actionType, display, extensionKey) {
86
91
  var measure = getMeasure(id, 'resolved') || {
87
92
  duration: undefined
88
93
  };
@@ -94,12 +99,12 @@ export var invokeSucceededEvent = function invokeSucceededEvent(id, extensionKey
94
99
  id: id,
95
100
  actionType: actionType,
96
101
  display: display,
97
- extensionKey: extensionKey,
102
+ extensionKey: extensionKey || '',
98
103
  duration: measure.duration
99
104
  })
100
105
  };
101
106
  };
102
- export var invokeFailedEvent = function invokeFailedEvent(id, extensionKey, actionType, display, reason) {
107
+ export var invokeFailedEvent = function invokeFailedEvent(id, actionType, display, reason, extensionKey) {
103
108
  var measure = getMeasure(id, 'errored') || {
104
109
  duration: undefined
105
110
  };
@@ -111,7 +116,7 @@ export var invokeFailedEvent = function invokeFailedEvent(id, extensionKey, acti
111
116
  id: id,
112
117
  actionType: actionType,
113
118
  display: display,
114
- extensionKey: extensionKey,
119
+ extensionKey: extensionKey || '',
115
120
  duration: measure.duration,
116
121
  reason: reason
117
122
  })
@@ -182,27 +187,33 @@ export var uiAuthAlternateAccountEvent = function uiAuthAlternateAccountEvent(di
182
187
  })
183
188
  };
184
189
  };
185
- export var uiCardClickedEvent = function uiCardClickedEvent(display, definitionId, extensionKey, isModifierKeyPressed) {
190
+ export var uiCardClickedEvent = function uiCardClickedEvent(id, display, status, definitionId, extensionKey, isModifierKeyPressed, location, destinationProduct) {
186
191
  return {
187
192
  action: 'clicked',
188
193
  actionSubject: 'smartLink',
194
+ actionSubjectId: 'titleGoToLink',
189
195
  eventType: 'ui',
190
196
  attributes: _objectSpread(_objectSpread({}, context), {}, {
197
+ id: id,
198
+ status: status,
191
199
  definitionId: definitionId || '',
192
200
  extensionKey: extensionKey || '',
193
201
  display: display,
194
- isModifierKeyPressed: isModifierKeyPressed
202
+ isModifierKeyPressed: isModifierKeyPressed,
203
+ location: location,
204
+ destinationProduct: destinationProduct
195
205
  })
196
206
  };
197
207
  };
198
- export var uiActionClickedEvent = function uiActionClickedEvent(extensionKey, actionType, display) {
208
+ export var uiActionClickedEvent = function uiActionClickedEvent(actionType, extensionKey, display) {
199
209
  return {
200
210
  action: 'clicked',
201
- actionSubject: 'smartLinkAction',
211
+ actionSubject: 'button',
212
+ actionSubjectId: uiActionSubjectIds[actionType],
202
213
  eventType: 'ui',
203
214
  attributes: _objectSpread(_objectSpread({}, context), {}, {
204
215
  display: display,
205
- extensionKey: extensionKey,
216
+ extensionKey: extensionKey || '',
206
217
  actionType: actionType
207
218
  })
208
219
  };
@@ -229,12 +240,13 @@ export var screenAuthPopupEvent = function screenAuthPopupEvent(definitionId, ex
229
240
  })
230
241
  };
231
242
  };
232
- export var uiRenderSuccessEvent = function uiRenderSuccessEvent(display, definitionId, extensionKey) {
243
+ export var uiRenderSuccessEvent = function uiRenderSuccessEvent(display, status, definitionId, extensionKey) {
233
244
  return {
234
245
  action: 'renderSuccess',
235
246
  actionSubject: 'smartLink',
236
247
  eventType: 'ui',
237
248
  attributes: _objectSpread(_objectSpread({}, context), {}, {
249
+ status: status,
238
250
  definitionId: definitionId || '',
239
251
  extensionKey: extensionKey || '',
240
252
  display: display
@@ -253,7 +265,7 @@ export var uiRenderFailedEvent = function uiRenderFailedEvent(display, error, er
253
265
  }
254
266
  };
255
267
  };
256
- export var uiHoverCardViewedEvent = function uiHoverCardViewedEvent(hoverDisplay, definitionId, extensionKey, previewInvokeMethod) {
268
+ export var uiHoverCardViewedEvent = function uiHoverCardViewedEvent(previewDisplay, definitionId, extensionKey, previewInvokeMethod) {
257
269
  return {
258
270
  action: 'viewed',
259
271
  actionSubject: 'hoverCard',
@@ -261,12 +273,12 @@ export var uiHoverCardViewedEvent = function uiHoverCardViewedEvent(hoverDisplay
261
273
  attributes: _objectSpread(_objectSpread({}, context), {}, {
262
274
  definitionId: definitionId || '',
263
275
  extensionKey: extensionKey || '',
264
- hoverDisplay: hoverDisplay,
276
+ previewDisplay: previewDisplay,
265
277
  previewInvokeMethod: previewInvokeMethod
266
278
  })
267
279
  };
268
280
  };
269
- export var uiHoverCardDismissedEvent = function uiHoverCardDismissedEvent(hoverDisplay, hoverTime, definitionId, extensionKey, previewInvokeMethod) {
281
+ export var uiHoverCardDismissedEvent = function uiHoverCardDismissedEvent(previewDisplay, hoverTime, definitionId, extensionKey, previewInvokeMethod) {
270
282
  return {
271
283
  action: 'dismissed',
272
284
  actionSubject: 'hoverCard',
@@ -275,7 +287,7 @@ export var uiHoverCardDismissedEvent = function uiHoverCardDismissedEvent(hoverD
275
287
  definitionId: definitionId || '',
276
288
  extensionKey: extensionKey || '',
277
289
  hoverTime: hoverTime,
278
- hoverDisplay: hoverDisplay,
290
+ previewDisplay: previewDisplay,
279
291
  previewInvokeMethod: previewInvokeMethod
280
292
  })
281
293
  };
@@ -0,0 +1 @@
1
+ export {};
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/smart-card",
3
- "version": "19.1.13",
3
+ "version": "19.1.16",
4
4
  "sideEffects": false
5
5
  }
@@ -32,6 +32,7 @@ export var CardWithDataRenderer = /*#__PURE__*/function (_React$PureComponent) {
32
32
  key: "render",
33
33
  value: function render() {
34
34
  var _this$props = this.props,
35
+ id = _this$props.id,
35
36
  appearance = _this$props.appearance,
36
37
  data = _this$props.data,
37
38
  isSelected = _this$props.isSelected,
@@ -47,6 +48,7 @@ export var CardWithDataRenderer = /*#__PURE__*/function (_React$PureComponent) {
47
48
 
48
49
  if (CardWithDataRenderer.CardContent) {
49
50
  return /*#__PURE__*/React.createElement(CardWithDataRenderer.CardContent, {
51
+ id: id,
50
52
  inlinePreloaderStyle: inlinePreloaderStyle,
51
53
  appearance: appearance,
52
54
  data: data,
@@ -26,17 +26,19 @@ export function CardWithUrlContent(_ref) {
26
26
  inlinePreloaderStyle = _ref.inlinePreloaderStyle,
27
27
  ui = _ref.ui,
28
28
  children = _ref.children,
29
- showHoverPreview = _ref.showHoverPreview;
29
+ showHoverPreview = _ref.showHoverPreview,
30
+ analyticsEvents = _ref.analyticsEvents;
30
31
 
31
32
  // Get state, actions for this card.
32
33
  var _useSmartLink = useSmartLink(id, url, dispatchAnalytics),
33
34
  state = _useSmartLink.state,
34
35
  actions = _useSmartLink.actions,
36
+ defaultAnalytics = _useSmartLink.analytics,
35
37
  config = _useSmartLink.config,
36
- analytics = _useSmartLink.analytics,
37
38
  renderers = _useSmartLink.renderers,
38
39
  error = _useSmartLink.error;
39
40
 
41
+ var analytics = analyticsEvents || defaultAnalytics;
40
42
  var definitionId = getDefinitionId(state.details);
41
43
  var extensionKey = getExtensionKey(state.details);
42
44
  var resourceType = getResourceType(state.details);
@@ -50,17 +52,15 @@ export function CardWithUrlContent(_ref) {
50
52
  isSpecialEvent(event) ? window.open(clickUrl, '_blank') : window.open(clickUrl, '_self');
51
53
  }, [state.details, url]);
52
54
  var handleClickWrapper = useCallback(function (event) {
53
- if (state.status === 'resolved') {
54
- var isModifierKeyPressed = isSpecialEvent(event);
55
- analytics.ui.cardClickedEvent(isFlexibleUi ? 'flexible' : appearance, definitionId, extensionKey, isModifierKeyPressed);
56
- }
55
+ var isModifierKeyPressed = isSpecialEvent(event);
56
+ analytics.ui.cardClickedEvent(id, isFlexibleUi ? 'flexible' : appearance, state.status, definitionId, extensionKey, isModifierKeyPressed);
57
57
 
58
58
  if (onClick) {
59
59
  onClick(event);
60
60
  } else if (!isFlexibleUi) {
61
61
  handleClick(event);
62
62
  }
63
- }, [state.status, analytics.ui, appearance, definitionId, extensionKey, onClick, handleClick, isFlexibleUi]);
63
+ }, [id, state.status, analytics.ui, appearance, definitionId, extensionKey, onClick, handleClick, isFlexibleUi]);
64
64
  var handleAuthorize = useCallback(function () {
65
65
  return actions.authorize(appearance);
66
66
  }, [actions, appearance]);
@@ -86,7 +86,7 @@ export function CardWithUrlContent(_ref) {
86
86
 
87
87
  useEffect(function () {
88
88
  if (isFinalState(state.status)) {
89
- analytics.ui.renderSuccessEvent(appearance, id, definitionId, extensionKey);
89
+ analytics.ui.renderSuccessEvent(appearance, state.status, id, definitionId, extensionKey);
90
90
  }
91
91
  }, [appearance, state.details, state.status, url, definitionId, extensionKey, analytics.ui, id]);
92
92
 
@@ -104,6 +104,7 @@ export function CardWithUrlContent(_ref) {
104
104
  }
105
105
 
106
106
  return /*#__PURE__*/React.createElement(FlexibleCard, {
107
+ id: id,
107
108
  cardState: cardState,
108
109
  onAuthorize: services.length && handleAuthorize || undefined,
109
110
  onClick: handleClickWrapper,
@@ -123,6 +124,7 @@ export function CardWithUrlContent(_ref) {
123
124
  switch (appearance) {
124
125
  case 'inline':
125
126
  return /*#__PURE__*/React.createElement(InlineCard, {
127
+ id: id,
126
128
  url: url,
127
129
  renderers: renderers,
128
130
  cardState: state,
@@ -137,6 +139,7 @@ export function CardWithUrlContent(_ref) {
137
139
 
138
140
  case 'block':
139
141
  return /*#__PURE__*/React.createElement(BlockCard, {
142
+ id: id,
140
143
  url: url,
141
144
  renderers: renderers,
142
145
  authFlow: config && config.authFlow,
@@ -155,6 +158,7 @@ export function CardWithUrlContent(_ref) {
155
158
 
156
159
  case 'embed':
157
160
  return /*#__PURE__*/React.createElement(EmbedCard, {
161
+ id: id,
158
162
  url: url,
159
163
  cardState: state,
160
164
  handleAuthorize: services.length && handleAuthorize || undefined,