@atlaskit/media-ui 28.3.3 → 28.4.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 (36) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/cjs/customMediaPlayer/index.js +1 -1
  3. package/dist/cjs/customMediaPlayer/mediaPlayer/captions/apiFeedback.js +29 -23
  4. package/dist/cjs/customMediaPlayer/mediaPlayer/captionsSelectControls.js +2 -1
  5. package/dist/cjs/customMediaPlayer/mediaPlayer/mediaPlayer.js +17 -12
  6. package/dist/cjs/customMediaPlayer/mediaPlayer/mediaPlayerBase.js +311 -213
  7. package/dist/cjs/customMediaPlayer/mediaPlayer/testHelpers/_MockedMediaProvider.js +153 -0
  8. package/dist/cjs/customMediaPlayer/mediaPlayer/testHelpers/_helpers.js +22 -0
  9. package/dist/cjs/customMediaPlayer/mediaPlayer/useTextTracks.js +13 -7
  10. package/dist/es2019/customMediaPlayer/index.js +1 -1
  11. package/dist/es2019/customMediaPlayer/mediaPlayer/captions/apiFeedback.js +29 -23
  12. package/dist/es2019/customMediaPlayer/mediaPlayer/captionsSelectControls.js +2 -1
  13. package/dist/es2019/customMediaPlayer/mediaPlayer/mediaPlayer.js +17 -11
  14. package/dist/es2019/customMediaPlayer/mediaPlayer/mediaPlayerBase.js +232 -166
  15. package/dist/es2019/customMediaPlayer/mediaPlayer/testHelpers/_MockedMediaProvider.js +126 -0
  16. package/dist/es2019/customMediaPlayer/mediaPlayer/testHelpers/_helpers.js +14 -0
  17. package/dist/es2019/customMediaPlayer/mediaPlayer/useTextTracks.js +25 -18
  18. package/dist/esm/customMediaPlayer/index.js +1 -1
  19. package/dist/esm/customMediaPlayer/mediaPlayer/captions/apiFeedback.js +29 -23
  20. package/dist/esm/customMediaPlayer/mediaPlayer/captionsSelectControls.js +2 -1
  21. package/dist/esm/customMediaPlayer/mediaPlayer/mediaPlayer.js +16 -11
  22. package/dist/esm/customMediaPlayer/mediaPlayer/mediaPlayerBase.js +310 -212
  23. package/dist/esm/customMediaPlayer/mediaPlayer/testHelpers/_MockedMediaProvider.js +146 -0
  24. package/dist/esm/customMediaPlayer/mediaPlayer/testHelpers/_helpers.js +16 -0
  25. package/dist/esm/customMediaPlayer/mediaPlayer/useTextTracks.js +13 -7
  26. package/dist/types/customMediaPlayer/analytics/utils/playbackAttributes.d.ts +1 -1
  27. package/dist/types/customMediaPlayer/mediaPlayer/mediaPlayer.d.ts +2 -1
  28. package/dist/types/customMediaPlayer/mediaPlayer/mediaPlayerBase.d.ts +15 -6
  29. package/dist/types/customMediaPlayer/mediaPlayer/testHelpers/_MockedMediaProvider.d.ts +46 -0
  30. package/dist/types/customMediaPlayer/mediaPlayer/testHelpers/_helpers.d.ts +2 -0
  31. package/dist/types-ts4.5/customMediaPlayer/analytics/utils/playbackAttributes.d.ts +1 -1
  32. package/dist/types-ts4.5/customMediaPlayer/mediaPlayer/mediaPlayer.d.ts +2 -1
  33. package/dist/types-ts4.5/customMediaPlayer/mediaPlayer/mediaPlayerBase.d.ts +15 -6
  34. package/dist/types-ts4.5/customMediaPlayer/mediaPlayer/testHelpers/_MockedMediaProvider.d.ts +46 -0
  35. package/dist/types-ts4.5/customMediaPlayer/mediaPlayer/testHelpers/_helpers.d.ts +2 -0
  36. package/package.json +5 -4
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.createMockedMediaProvider = void 0;
8
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
+ var _react = _interopRequireDefault(require("react"));
11
+ var _mediaClient = require("@atlaskit/media-client");
12
+ var _testHelpers = require("@atlaskit/media-client/test-helpers");
13
+ var _mediaState = require("@atlaskit/media-state");
14
+ var _testHelpers2 = require("@atlaskit/media-client-react/test-helpers");
15
+ var _helpers = require("./_helpers");
16
+ var createSubscribeFileItem = function createSubscribeFileItem(_ref) {
17
+ var mediaApi = _ref.mediaApi,
18
+ mediaStore = _ref.mediaStore;
19
+ var mediaClient = new _mediaClient.MediaClient({
20
+ authProvider: function () {
21
+ var _authProvider = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
22
+ return _regenerator.default.wrap(function _callee$(_context) {
23
+ while (1) switch (_context.prev = _context.next) {
24
+ case 0:
25
+ return _context.abrupt("return", {
26
+ clientId: 'MockedMediaProvider-uploader-client-id',
27
+ token: 'MockedMediaProvider-uploader-token',
28
+ baseUrl: 'MockedMediaProvider-uploader-service-host'
29
+ });
30
+ case 1:
31
+ case "end":
32
+ return _context.stop();
33
+ }
34
+ }, _callee);
35
+ }));
36
+ function authProvider() {
37
+ return _authProvider.apply(this, arguments);
38
+ }
39
+ return authProvider;
40
+ }()
41
+ }, mediaStore, mediaApi);
42
+ return function (fileId, collectionName) {
43
+ mediaClient.file.getFileState(fileId, {
44
+ collectionName: collectionName
45
+ });
46
+ };
47
+ };
48
+ var createGetLocalPreviewHelper = function createGetLocalPreviewHelper(mediaStore) {
49
+ return function (fileId) {
50
+ var fileState = mediaStore.getState().files[fileId];
51
+ return (0, _mediaClient.isUploadingFileState)(fileState) ? fileState.preview : undefined;
52
+ };
53
+ };
54
+ var createUploadHelper = function createUploadHelper(_ref2) {
55
+ var setItems = _ref2.setItems,
56
+ mediaStore = _ref2.mediaStore,
57
+ subscribeToFileState = _ref2.subscribeToFileState;
58
+ return function (fileItem, progress, binary) {
59
+ if (progress === 'error') {
60
+ mediaStore.setState(function (state) {
61
+ state.files[fileItem.id] = (0, _testHelpers.createErrorFileState)(fileItem);
62
+ });
63
+ } else if (progress === 1) {
64
+ // Complete Upload
65
+ var uploadedFileItem = (0, _testHelpers.createProcessingFileItem)(fileItem, 0);
66
+ setItems(uploadedFileItem);
67
+ // TODO: This set state is probaly unneeded
68
+ mediaStore.setState(function (state) {
69
+ state.files[fileItem.id] = (0, _testHelpers.createFileState)(uploadedFileItem);
70
+ });
71
+
72
+ // A subscription to file state is required after the upload is complete to start polling from the mocked backend
73
+ // TODO: This subscription is removing the local preview from the store
74
+ subscribeToFileState(fileItem.id, fileItem.collection);
75
+ } else {
76
+ setItems((0, _testHelpers.createEmptyFileItem)(fileItem.id, fileItem.collection));
77
+ var localBinary = typeof binary === 'string' ? (0, _helpers.dataURItoBlob)(binary) : binary;
78
+ var uploadingFileState = (0, _testHelpers.createUploadingFileState)(fileItem, progress, localBinary);
79
+ mediaStore.setState(function (state) {
80
+ state.files[fileItem.id] = uploadingFileState;
81
+ });
82
+ }
83
+ };
84
+ };
85
+ var createProcessHelper = function createProcessHelper(_ref3) {
86
+ var setItems = _ref3.setItems;
87
+ return function (fileItem, progress) {
88
+ setItems((0, _testHelpers.createProcessingFileItem)(fileItem, progress));
89
+ };
90
+ };
91
+ var createMockedMediaProviderWithApi = function createMockedMediaProviderWithApi(_ref4) {
92
+ var mediaApi = _ref4.mediaApi,
93
+ mediaStore = _ref4.mediaStore,
94
+ mediaClientConfig = _ref4.mediaClientConfig,
95
+ mediaSettings = _ref4.mediaSettings;
96
+ return function (_ref5) {
97
+ var children = _ref5.children;
98
+ return /*#__PURE__*/_react.default.createElement(_testHelpers2.MockedMediaProvider, {
99
+ mediaStore: mediaStore,
100
+ mockedMediaApi: mediaApi,
101
+ mediaClientConfig: mediaClientConfig,
102
+ mediaSettings: mediaSettings
103
+ }, children);
104
+ };
105
+ };
106
+ /**
107
+ * Creates a MockedMediaProvider with the given optional parameters mediaStore, initialItems and mediaClientConfig.
108
+ * NOTE:
109
+ * If mediaStore is skipped, this function will create a new default one.
110
+ * This is useful to keep stores in isolation when running unit tests.
111
+ * Skipping mediaStore is not recommended when using this method in React components,
112
+ * since it will recreate a default store on every rerender.
113
+ */
114
+ var createMockedMediaProvider = exports.createMockedMediaProvider = function createMockedMediaProvider(_ref6) {
115
+ var _ref6$mediaStore = _ref6.mediaStore,
116
+ mediaStore = _ref6$mediaStore === void 0 ? (0, _mediaState.createMediaStore)() : _ref6$mediaStore,
117
+ initialItems = _ref6.initialItems,
118
+ mediaClientConfig = _ref6.mediaClientConfig,
119
+ mediaSettings = _ref6.mediaSettings;
120
+ var _createMockedMediaApi = (0, _testHelpers.createMockedMediaApi)(initialItems),
121
+ mediaApi = _createMockedMediaApi.mediaApi,
122
+ setItems = _createMockedMediaApi.setItems,
123
+ getItem = _createMockedMediaApi.getItem;
124
+ var subscribeToFileState = createSubscribeFileItem({
125
+ mediaStore: mediaStore,
126
+ mediaApi: mediaApi
127
+ });
128
+ var uploadItem = createUploadHelper({
129
+ setItems: setItems,
130
+ mediaStore: mediaStore,
131
+ subscribeToFileState: subscribeToFileState
132
+ });
133
+ var processItem = createProcessHelper({
134
+ setItems: setItems
135
+ });
136
+ var getLocalPreview = createGetLocalPreviewHelper(mediaStore);
137
+ var MockedMediaProvider = createMockedMediaProviderWithApi({
138
+ mediaStore: mediaStore,
139
+ mediaApi: mediaApi,
140
+ mediaClientConfig: mediaClientConfig,
141
+ mediaSettings: mediaSettings
142
+ });
143
+ return {
144
+ mediaApi: mediaApi,
145
+ mediaStore: mediaStore,
146
+ setItems: setItems,
147
+ getItem: getItem,
148
+ uploadItem: uploadItem,
149
+ processItem: processItem,
150
+ getLocalPreview: getLocalPreview,
151
+ MockedMediaProvider: MockedMediaProvider
152
+ };
153
+ };
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.normaliseInput = exports.dataURItoBlob = void 0;
7
+ var normaliseInput = exports.normaliseInput = function normaliseInput(input) {
8
+ return !input ? [] : input instanceof Array ? input : [input];
9
+ };
10
+ var dataURItoBlob = exports.dataURItoBlob = function dataURItoBlob(dataURI) {
11
+ var byteString = atob(dataURI.split(',')[1]);
12
+ var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
13
+ var ab = new ArrayBuffer(byteString.length);
14
+ var ia = new Uint8Array(ab);
15
+ for (var i = 0; i < byteString.length; i++) {
16
+ ia[i] = byteString.charCodeAt(i);
17
+ }
18
+ var blob = new Blob([ab], {
19
+ type: mimeString
20
+ });
21
+ return blob;
22
+ };
@@ -44,19 +44,20 @@ var useTextTracks = exports.useTextTracks = function useTextTracks(fileState, me
44
44
  while (1) switch (_context.prev = _context.next) {
45
45
  case 0:
46
46
  _ref3 = (0, _slicedToArray2.default)(_ref, 2), artifactName = _ref3[0], mimeType = _ref3[1].mimeType;
47
+ _context.prev = 1;
47
48
  artifacts = fileState.artifacts;
48
49
  _context.t0 = artifacts;
49
50
  if (!_context.t0) {
50
- _context.next = 7;
51
+ _context.next = 8;
51
52
  break;
52
53
  }
53
- _context.next = 6;
54
+ _context.next = 7;
54
55
  return mediaClient === null || mediaClient === void 0 ? void 0 : mediaClient.mediaStore.getArtifactBinary(artifacts, artifactName, {
55
56
  collectionName: collectionName
56
57
  });
57
- case 6:
58
- _context.t0 = _context.sent;
59
58
  case 7:
59
+ _context.t0 = _context.sent;
60
+ case 8:
60
61
  baseUrl = _context.t0;
61
62
  src = baseUrl && URL.createObjectURL(baseUrl) || '';
62
63
  _decodeMimetype = decodeMimetype(mimeType), lang = _decodeMimetype.lang, label = _decodeMimetype.label;
@@ -66,11 +67,14 @@ var useTextTracks = exports.useTextTracks = function useTextTracks(fileState, me
66
67
  label: label,
67
68
  artifactName: artifactName
68
69
  });
69
- case 11:
70
+ case 14:
71
+ _context.prev = 14;
72
+ _context.t1 = _context["catch"](1);
73
+ case 16:
70
74
  case "end":
71
75
  return _context.stop();
72
76
  }
73
- }, _callee);
77
+ }, _callee, null, [[1, 14]]);
74
78
  }));
75
79
  return function (_x) {
76
80
  return _ref2.apply(this, arguments);
@@ -80,11 +84,13 @@ var useTextTracks = exports.useTextTracks = function useTextTracks(fileState, me
80
84
  captions: {
81
85
  selectedTrackIndex: 1,
82
86
  tracks: tracks.filter(function (track) {
83
- return !!track.src;
87
+ return !!(track !== null && track !== void 0 && track.src);
84
88
  })
85
89
  }
86
90
  });
87
91
  });
92
+ } else {
93
+ setTextTracks(undefined);
88
94
  }
89
95
  }, [fileState, collectionName, mediaClient]);
90
96
  return textTracks;
@@ -7,7 +7,7 @@ import { fg } from '@atlaskit/platform-feature-flags';
7
7
  import { withMediaAnalyticsContext } from '@atlaskit/media-common';
8
8
  export const CustomMediaPlayerBase = props => fg('platform_media_compiled') ? /*#__PURE__*/React.createElement(CompiledCustomMediaPlayerBase, props) : /*#__PURE__*/React.createElement(EmotionCustomMediaPlayerBase, props);
9
9
  const packageName = "@atlaskit/media-ui";
10
- const packageVersion = "28.3.2";
10
+ const packageVersion = "28.3.4";
11
11
 
12
12
  // @ts-ignore: [PIT-1685] Fails in post-office due to backwards incompatibility issue with React 18
13
13
  export const CustomMediaPlayer = withMediaAnalyticsContext({
@@ -11,30 +11,36 @@ function ApiFeedback({
11
11
  errorDescription,
12
12
  intl
13
13
  }) {
14
+ let flag;
15
+ if (notificationType === 'success') {
16
+ flag = /*#__PURE__*/React.createElement(AutoDismissFlag, {
17
+ id: 'success',
18
+ icon: /*#__PURE__*/React.createElement(SuccessIcon, {
19
+ label: "Success",
20
+ color: "var(--ds-icon-success, #22A06B)",
21
+ LEGACY_size: "medium",
22
+ spacing: "spacious"
23
+ }),
24
+ key: 'success',
25
+ title: intl.formatMessage(messages.success),
26
+ description: successDescription
27
+ });
28
+ } else if (notificationType === 'error') {
29
+ flag = /*#__PURE__*/React.createElement(AutoDismissFlag, {
30
+ id: 'error',
31
+ icon: /*#__PURE__*/React.createElement(ErrorIcon, {
32
+ label: "Error",
33
+ color: "var(--ds-icon-danger, #C9372C)",
34
+ LEGACY_size: "medium",
35
+ spacing: "spacious"
36
+ }),
37
+ key: 'error',
38
+ title: intl.formatMessage(messages.error),
39
+ description: errorDescription
40
+ });
41
+ }
14
42
  return /*#__PURE__*/React.createElement(FlagGroup, {
15
43
  onDismissed: onDismissed
16
- }, notificationType === 'success' ? /*#__PURE__*/React.createElement(AutoDismissFlag, {
17
- id: 'success',
18
- icon: /*#__PURE__*/React.createElement(SuccessIcon, {
19
- label: "Success",
20
- color: "var(--ds-icon-success, #22A06B)",
21
- LEGACY_size: "medium",
22
- spacing: "spacious"
23
- }),
24
- key: 'success',
25
- title: intl.formatMessage(messages.success),
26
- description: successDescription
27
- }) : /*#__PURE__*/React.createElement(React.Fragment, null), notificationType === 'error' ? /*#__PURE__*/React.createElement(AutoDismissFlag, {
28
- id: 'error',
29
- icon: /*#__PURE__*/React.createElement(ErrorIcon, {
30
- label: "Error",
31
- color: "var(--ds-icon-danger, #C9372C)",
32
- LEGACY_size: "medium",
33
- spacing: "spacious"
34
- }),
35
- key: 'error',
36
- title: intl.formatMessage(messages.error),
37
- description: errorDescription
38
- }) : /*#__PURE__*/React.createElement(React.Fragment, null));
44
+ }, flag);
39
45
  }
40
46
  export default injectIntl(ApiFeedback);
@@ -32,7 +32,8 @@ export const _CaptionsSelectControls = /*#__PURE__*/memo(({
32
32
  position: "top"
33
33
  }, /*#__PURE__*/React.createElement(Button, {
34
34
  appearance: areCaptionsEnabled ? 'default' : 'subtle',
35
- onClick: () => onCaptionsEnabledChange(!areCaptionsEnabled)
35
+ onClick: () => onCaptionsEnabledChange(!areCaptionsEnabled),
36
+ "aria-label": closedCaptions
36
37
  }, "CC")), /*#__PURE__*/React.createElement(DropdownMenu, {
37
38
  placement: "top",
38
39
  shouldRenderToParent: true,
@@ -4,15 +4,13 @@ import { withMediaAnalyticsContext } from '@atlaskit/media-common';
4
4
  import { useFileState, useMediaClient, useMediaSettings } from '@atlaskit/media-client-react';
5
5
  import { MediaPlayerBase } from './mediaPlayerBase';
6
6
  import { useTextTracks } from './useTextTracks';
7
+ import { useAnalyticsEvents } from '@atlaskit/analytics-next';
7
8
  const packageName = "@atlaskit/media-ui";
8
- const packageVersion = "28.3.2";
9
- const MediaPlayerBaseWithContext = withMediaAnalyticsContext({
10
- packageVersion,
11
- packageName,
12
- componentName: 'MediaPlayer',
13
- component: 'MediaPlayer'
14
- })(MediaPlayerBase);
15
- export const MediaPlayer = props => {
9
+ const packageVersion = "28.3.4";
10
+ export const MediaPlayerWihtoutContext = props => {
11
+ const {
12
+ createAnalyticsEvent
13
+ } = useAnalyticsEvents();
16
14
  const mediaSettings = useMediaSettings();
17
15
  const mediaClient = useMediaClient();
18
16
  const {
@@ -25,8 +23,16 @@ export const MediaPlayer = props => {
25
23
  collectionName
26
24
  });
27
25
  const textTracks = useTextTracks(fileState, mediaClient, collectionName);
28
- return /*#__PURE__*/React.createElement(MediaPlayerBaseWithContext, _extends({}, props, {
26
+ return /*#__PURE__*/React.createElement(MediaPlayerBase, _extends({}, props, {
27
+ fileState: fileState,
29
28
  mediaSettings: mediaSettings,
30
- textTracks: textTracks
29
+ textTracks: textTracks,
30
+ createAnalyticsEvent: createAnalyticsEvent
31
31
  }));
32
- };
32
+ };
33
+ export const MediaPlayer = withMediaAnalyticsContext({
34
+ packageVersion,
35
+ packageName,
36
+ componentName: 'MediaPlayer',
37
+ component: 'MediaPlayer'
38
+ })(MediaPlayerWihtoutContext);