@atlaskit/media-card 77.2.3 → 77.3.0

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 (42) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/cjs/card/card.js +1 -1
  3. package/dist/cjs/card/media-card-analytics-error-boundary.js +1 -1
  4. package/dist/cjs/card/ui/imageRenderer/imageRenderer.js +6 -3
  5. package/dist/cjs/card/v2/cardV2.js +18 -1037
  6. package/dist/cjs/card/v2/externalImageCard.js +299 -0
  7. package/dist/cjs/card/v2/fileCard.js +1001 -0
  8. package/dist/cjs/inline/loader.js +1 -1
  9. package/dist/cjs/utils/ufoExperiences.js +1 -1
  10. package/dist/cjs/utils/useCurrentValueRef.js +12 -0
  11. package/dist/cjs/utils/usePrevious.js +14 -0
  12. package/dist/es2019/card/card.js +1 -1
  13. package/dist/es2019/card/media-card-analytics-error-boundary.js +1 -1
  14. package/dist/es2019/card/ui/imageRenderer/imageRenderer.js +6 -3
  15. package/dist/es2019/card/v2/cardV2.js +17 -1021
  16. package/dist/es2019/card/v2/externalImageCard.js +261 -0
  17. package/dist/es2019/card/v2/fileCard.js +881 -0
  18. package/dist/es2019/inline/loader.js +1 -1
  19. package/dist/es2019/utils/ufoExperiences.js +1 -1
  20. package/dist/es2019/utils/useCurrentValueRef.js +6 -0
  21. package/dist/es2019/utils/usePrevious.js +8 -0
  22. package/dist/esm/card/card.js +1 -1
  23. package/dist/esm/card/media-card-analytics-error-boundary.js +1 -1
  24. package/dist/esm/card/ui/imageRenderer/imageRenderer.js +6 -3
  25. package/dist/esm/card/v2/cardV2.js +19 -1036
  26. package/dist/esm/card/v2/externalImageCard.js +289 -0
  27. package/dist/esm/card/v2/fileCard.js +991 -0
  28. package/dist/esm/inline/loader.js +1 -1
  29. package/dist/esm/utils/ufoExperiences.js +1 -1
  30. package/dist/esm/utils/useCurrentValueRef.js +6 -0
  31. package/dist/esm/utils/usePrevious.js +8 -0
  32. package/dist/types/card/v2/cardV2.d.ts +4 -60
  33. package/dist/types/card/v2/externalImageCard.d.ts +14 -0
  34. package/dist/types/card/v2/fileCard.d.ts +19 -0
  35. package/dist/types/utils/useCurrentValueRef.d.ts +2 -0
  36. package/dist/types/utils/usePrevious.d.ts +1 -0
  37. package/dist/types-ts4.5/card/v2/cardV2.d.ts +4 -60
  38. package/dist/types-ts4.5/card/v2/externalImageCard.d.ts +14 -0
  39. package/dist/types-ts4.5/card/v2/fileCard.d.ts +19 -0
  40. package/dist/types-ts4.5/utils/useCurrentValueRef.d.ts +2 -0
  41. package/dist/types-ts4.5/utils/usePrevious.d.ts +1 -0
  42. package/package.json +2 -2
@@ -0,0 +1,299 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.ExternalImageCard = void 0;
9
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
+ var _mediaClient = require("@atlaskit/media-client");
12
+ var _mediaCommon = require("@atlaskit/media-common");
13
+ var _mediaViewer = require("@atlaskit/media-viewer");
14
+ var _react = _interopRequireWildcard(require("react"));
15
+ var _reactDom = _interopRequireDefault(require("react-dom"));
16
+ var _errors = require("../../errors");
17
+ var _document = _interopRequireDefault(require("../../utils/document"));
18
+ var _generateUniqueId = require("../../utils/generateUniqueId");
19
+ var _getMediaCardCursor = require("../../utils/getMediaCardCursor");
20
+ var _ufoExperiences = require("../../utils/ufoExperiences");
21
+ var _useCurrentValueRef = require("../../utils/useCurrentValueRef");
22
+ var _usePrevious = require("../../utils/usePrevious");
23
+ var _cardAnalytics = require("../cardAnalytics");
24
+ var _cardViewV = require("./cardViewV2");
25
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
26
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
27
+ 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; }
28
+ 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; }
29
+ var ExternalImageCard = exports.ExternalImageCard = function ExternalImageCard(_ref) {
30
+ var mediaClient = _ref.mediaClient,
31
+ _ref$appearance = _ref.appearance,
32
+ appearance = _ref$appearance === void 0 ? 'auto' : _ref$appearance,
33
+ _ref$resizeMode = _ref.resizeMode,
34
+ resizeMode = _ref$resizeMode === void 0 ? 'crop' : _ref$resizeMode,
35
+ _ref$disableOverlay = _ref.disableOverlay,
36
+ disableOverlay = _ref$disableOverlay === void 0 ? false : _ref$disableOverlay,
37
+ _ref$featureFlags = _ref.featureFlags,
38
+ featureFlags = _ref$featureFlags === void 0 ? {} : _ref$featureFlags,
39
+ identifier = _ref.identifier,
40
+ dimensions = _ref.dimensions,
41
+ contextId = _ref.contextId,
42
+ alt = _ref.alt,
43
+ actions = _ref.actions,
44
+ shouldOpenMediaViewer = _ref.shouldOpenMediaViewer,
45
+ selectable = _ref.selectable,
46
+ selected = _ref.selected,
47
+ testId = _ref.testId,
48
+ titleBoxBgColor = _ref.titleBoxBgColor,
49
+ titleBoxIcon = _ref.titleBoxIcon,
50
+ shouldHideTooltip = _ref.shouldHideTooltip,
51
+ mediaViewerItems = _ref.mediaViewerItems,
52
+ _onClick = _ref.onClick,
53
+ _onMouseEnter = _ref.onMouseEnter,
54
+ createAnalyticsEvent = _ref.createAnalyticsEvent;
55
+ var internalOccurrenceKey = (0, _react.useMemo)(function () {
56
+ return (0, _generateUniqueId.generateUniqueId)();
57
+ }, []);
58
+ var timeElapsedTillCommenced = (0, _react.useMemo)(function () {
59
+ return performance.now();
60
+ }, []);
61
+
62
+ // Generate unique traceId for file
63
+ var traceContext = (0, _react.useMemo)(function () {
64
+ return {
65
+ traceId: (0, _mediaCommon.getRandomHex)(8)
66
+ };
67
+ }, []);
68
+ var _useState = (0, _react.useState)(null),
69
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
70
+ cardElement = _useState2[0],
71
+ setCardElement = _useState2[1];
72
+ var fileStateFlagsRef = (0, _react.useRef)({
73
+ wasStatusUploading: false,
74
+ wasStatusProcessing: false
75
+ });
76
+ var fireCommencedEventRef = (0, _useCurrentValueRef.useCurrentValueRef)(function () {
77
+ createAnalyticsEvent && (0, _cardAnalytics.fireCommencedEvent)(createAnalyticsEvent, fileAttributes, {
78
+ overall: {
79
+ durationSincePageStart: timeElapsedTillCommenced
80
+ }
81
+ }, traceContext);
82
+ (0, _ufoExperiences.startUfoExperience)(internalOccurrenceKey);
83
+ });
84
+ var _useState3 = (0, _react.useState)('loading-preview'),
85
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
86
+ status = _useState4[0],
87
+ setStatus = _useState4[1];
88
+ (0, _react.useEffect)(function () {
89
+ fireCommencedEventRef.current();
90
+ setStatus('loading-preview');
91
+ }, [fireCommencedEventRef, identifier]);
92
+ var cardPreview = (0, _react.useMemo)(function () {
93
+ return {
94
+ dataURI: identifier.dataURI,
95
+ orientation: 1,
96
+ source: 'external'
97
+ };
98
+ }, [identifier.dataURI]);
99
+ var metadata = {
100
+ id: identifier.mediaItemType,
101
+ name: identifier.name || identifier.dataURI,
102
+ mediaType: 'image'
103
+ };
104
+ var fileAttributes = {
105
+ fileMediatype: 'image',
106
+ fileId: metadata.id
107
+ };
108
+
109
+ // for analytics
110
+ var ssrReliability = {
111
+ server: {
112
+ status: 'unknown'
113
+ },
114
+ client: {
115
+ status: 'unknown'
116
+ }
117
+ };
118
+ var _useState5 = (0, _react.useState)(false),
119
+ _useState6 = (0, _slicedToArray2.default)(_useState5, 2),
120
+ previewDidRender = _useState6[0],
121
+ setPreviewDidRender = _useState6[1];
122
+ var _useState7 = (0, _react.useState)(),
123
+ _useState8 = (0, _slicedToArray2.default)(_useState7, 2),
124
+ error = _useState8[0],
125
+ setError = _useState8[1];
126
+ var _useState9 = (0, _react.useState)(null),
127
+ _useState10 = (0, _slicedToArray2.default)(_useState9, 2),
128
+ mediaViewerSelectedItem = _useState10[0],
129
+ setMediaViewerSelectedItem = _useState10[1];
130
+
131
+ //----------------------------------------------------------------//
132
+ //---------------------- Analytics ------------------------------//
133
+ //----------------------------------------------------------------//
134
+
135
+ var fireOperationalEventRef = (0, _useCurrentValueRef.useCurrentValueRef)(function () {
136
+ var timeElapsedTillEvent = performance.now();
137
+ var durationSinceCommenced = timeElapsedTillEvent - timeElapsedTillCommenced;
138
+ var performanceAttributes = {
139
+ overall: {
140
+ durationSincePageStart: timeElapsedTillEvent,
141
+ durationSinceCommenced: durationSinceCommenced
142
+ }
143
+ };
144
+ createAnalyticsEvent && (0, _cardAnalytics.fireOperationalEvent)(createAnalyticsEvent, status, fileAttributes, performanceAttributes, ssrReliability, error, traceContext, undefined);
145
+ (0, _ufoExperiences.completeUfoExperience)(internalOccurrenceKey, status, fileAttributes, fileStateFlagsRef.current, ssrReliability, error);
146
+ });
147
+ var fireScreenEventRef = (0, _useCurrentValueRef.useCurrentValueRef)(function () {
148
+ createAnalyticsEvent && (0, _cardAnalytics.fireScreenEvent)(createAnalyticsEvent, fileAttributes);
149
+ });
150
+ var fireAbortedEventRef = (0, _useCurrentValueRef.useCurrentValueRef)(function () {
151
+ // UFO won't abort if it's already in a final state (succeeded, failed, aborted, etc)
152
+ (0, _ufoExperiences.abortUfoExperience)(internalOccurrenceKey, {
153
+ fileAttributes: fileAttributes,
154
+ fileStateFlags: fileStateFlagsRef === null || fileStateFlagsRef === void 0 ? void 0 : fileStateFlagsRef.current,
155
+ ssrReliability: ssrReliability
156
+ });
157
+ });
158
+
159
+ //----------------------------------------------------------------//
160
+ //------------------------ useEffects ----------------------------//
161
+ //----------------------------------------------------------------//
162
+
163
+ (0, _react.useEffect)(function () {
164
+ var _getDocument;
165
+ var fireCopiedCardEvent = function fireCopiedCardEvent() {
166
+ cardElement && createAnalyticsEvent && (0, _cardAnalytics.fireCopiedEvent)(createAnalyticsEvent, metadata.id, cardElement);
167
+ };
168
+
169
+ // we add a listener for each of the cards on the page
170
+ // and then check if the triggered listener is from the card
171
+ // that contains a div in current window.getSelection()
172
+ // won't work in IE11
173
+ (_getDocument = (0, _document.default)()) === null || _getDocument === void 0 || _getDocument.addEventListener('copy', fireCopiedCardEvent);
174
+ return function () {
175
+ var _getDocument2;
176
+ (_getDocument2 = (0, _document.default)()) === null || _getDocument2 === void 0 || _getDocument2.removeEventListener('copy', fireCopiedCardEvent);
177
+ };
178
+ }, [cardElement, createAnalyticsEvent, metadata.id]);
179
+ var prevStatus = (0, _usePrevious.usePrevious)(status);
180
+ (0, _react.useEffect)(function () {
181
+ if (prevStatus !== undefined && status !== prevStatus) {
182
+ fireOperationalEventRef.current();
183
+ }
184
+ }, [fireOperationalEventRef, prevStatus, status]);
185
+ (0, _react.useEffect)(function () {
186
+ if (previewDidRender && status === 'loading-preview') {
187
+ setStatus('complete');
188
+ }
189
+ }, [previewDidRender, status]);
190
+ (0, _react.useEffect)(function () {
191
+ if (prevStatus !== undefined && status !== prevStatus) {
192
+ if (status === 'complete') {
193
+ fireScreenEventRef.current();
194
+ }
195
+ }
196
+ }, [fireScreenEventRef, prevStatus, status]);
197
+ (0, _react.useEffect)(function () {
198
+ return function () {
199
+ // eslint-disable-next-line react-hooks/exhaustive-deps
200
+ fireAbortedEventRef.current();
201
+ };
202
+ }, [fireAbortedEventRef]);
203
+
204
+ //----------------------------------------------------------------//
205
+ //---------------------- Render Functions ------------------------//
206
+ //----------------------------------------------------------------//
207
+
208
+ var renderMediaViewer = function renderMediaViewer() {
209
+ if (!mediaViewerSelectedItem) {
210
+ return;
211
+ }
212
+ return /*#__PURE__*/_reactDom.default.createPortal( /*#__PURE__*/_react.default.createElement(_mediaViewer.MediaViewer, {
213
+ collectionName: '',
214
+ items: mediaViewerItems || [],
215
+ mediaClientConfig: mediaClient.config,
216
+ selectedItem: mediaViewerSelectedItem,
217
+ onClose: function onClose() {
218
+ setMediaViewerSelectedItem(null);
219
+ },
220
+ contextId: contextId,
221
+ featureFlags: featureFlags
222
+ }), document.body);
223
+ };
224
+
225
+ //----------------------------------------------------------------//
226
+ //-------------------------- RENDER ------------------------------//
227
+ //----------------------------------------------------------------//
228
+
229
+ var mediaCardCursor = (0, _getMediaCardCursor.getMediaCardCursor)(false, !!shouldOpenMediaViewer, status === 'error', !!cardPreview, metadata.mediaType);
230
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_cardViewV.CardViewV2, {
231
+ status: status,
232
+ error: error,
233
+ mediaItemType: identifier.mediaItemType,
234
+ metadata: metadata,
235
+ cardPreview: cardPreview,
236
+ alt: alt,
237
+ appearance: appearance,
238
+ resizeMode: resizeMode,
239
+ dimensions: dimensions,
240
+ actions: actions,
241
+ selectable: selectable,
242
+ selected: selected,
243
+ onClick: function onClick(event, analyticsEvent) {
244
+ if (_onClick) {
245
+ var cardEvent = {
246
+ event: event,
247
+ mediaItemDetails: metadata
248
+ };
249
+ _onClick(cardEvent, analyticsEvent);
250
+ }
251
+ if (shouldOpenMediaViewer) {
252
+ setMediaViewerSelectedItem({
253
+ mediaItemType: 'external-image',
254
+ dataURI: identifier.dataURI,
255
+ name: identifier.name
256
+ });
257
+ }
258
+ },
259
+ onMouseEnter: function onMouseEnter(event) {
260
+ _onMouseEnter === null || _onMouseEnter === void 0 || _onMouseEnter({
261
+ event: event,
262
+ mediaItemDetails: metadata
263
+ });
264
+ },
265
+ disableOverlay: disableOverlay,
266
+ onDisplayImage: function onDisplayImage() {
267
+ var payloadPart = {
268
+ fileId: identifier.dataURI,
269
+ isUserCollection: false
270
+ };
271
+ _mediaClient.globalMediaEventEmitter.emit('media-viewed', _objectSpread({
272
+ viewingLevel: 'minimal'
273
+ }, payloadPart));
274
+ },
275
+ innerRef: setCardElement,
276
+ testId: testId,
277
+ featureFlags: featureFlags,
278
+ titleBoxBgColor: titleBoxBgColor,
279
+ titleBoxIcon: titleBoxIcon,
280
+ onImageError: function onImageError(newCardPreview) {
281
+ // If the dataURI has been replaced, we can dismiss this error
282
+ if ((newCardPreview === null || newCardPreview === void 0 ? void 0 : newCardPreview.dataURI) !== (cardPreview === null || cardPreview === void 0 ? void 0 : cardPreview.dataURI)) {
283
+ return;
284
+ }
285
+ var error = new _errors.ImageLoadError(newCardPreview === null || newCardPreview === void 0 ? void 0 : newCardPreview.source);
286
+ setStatus('error');
287
+ setError(error);
288
+ },
289
+ onImageLoad: function onImageLoad(newCardPreview) {
290
+ // If the dataURI has been replaced, we can dismiss this callback
291
+ if ((newCardPreview === null || newCardPreview === void 0 ? void 0 : newCardPreview.dataURI) !== (cardPreview === null || cardPreview === void 0 ? void 0 : cardPreview.dataURI)) {
292
+ return;
293
+ }
294
+ setPreviewDidRender(true);
295
+ },
296
+ mediaCardCursor: mediaCardCursor,
297
+ shouldHideTooltip: shouldHideTooltip
298
+ }), mediaViewerSelectedItem ? renderMediaViewer() : null);
299
+ };