@atlaskit/media-common 2.9.0 → 2.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,38 @@
1
1
  # @atlaskit/media-common
2
2
 
3
+ ## 2.10.2
4
+
5
+ ### Patch Changes
6
+
7
+ - [`19d72473dfb`](https://bitbucket.org/atlassian/atlassian-frontend/commits/19d72473dfb) - Switched as false default value for FF "Timestamp on video"
8
+ - [`19d72473dfb`](https://bitbucket.org/atlassian/atlassian-frontend/commits/19d72473dfb) - Adding a feature flag for TimestampOnVideo
9
+
10
+ ## 2.10.1
11
+
12
+ ### Patch Changes
13
+
14
+ - [`c55c736ecea`](https://bitbucket.org/atlassian/atlassian-frontend/commits/c55c736ecea) - Patch VULN AFP-3486 AFP-3487 AFP-3488 AFP-3489
15
+
16
+ ## 2.10.0
17
+
18
+ ### Minor Changes
19
+
20
+ - [`f461edcfd05`](https://bitbucket.org/atlassian/atlassian-frontend/commits/f461edcfd05) - Added a comparer helper for Media Feature Flags objects
21
+
22
+ ### Patch Changes
23
+
24
+ - [`fc70978492a`](https://bitbucket.org/atlassian/atlassian-frontend/commits/fc70978492a) - Using type for SSR prop to reduce dependency on media-common
25
+ - [`2b24fcc59f2`](https://bitbucket.org/atlassian/atlassian-frontend/commits/2b24fcc59f2) - Removed Code Viewer and Zip Previews Feature Flags
26
+ - [`f461edcfd05`](https://bitbucket.org/atlassian/atlassian-frontend/commits/f461edcfd05) - Update CardLoader to use react-loadable
27
+ Add SSR feature prop to be passed in renderer and media card
28
+ - [`01a41e75803`](https://bitbucket.org/atlassian/atlassian-frontend/commits/01a41e75803) - Removes `allowMediaInline` media prop and replaces with Inline Files feature flag for editor and mobile bridge
29
+
30
+ ## 2.9.1
31
+
32
+ ### Patch Changes
33
+
34
+ - [`fe9ced0cd70`](https://bitbucket.org/atlassian/atlassian-frontend/commits/fe9ced0cd70) - Removed feature flags for polling settings
35
+
3
36
  ## 2.9.0
4
37
 
5
38
  ### Minor Changes
@@ -3,16 +3,16 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- Object.defineProperty(exports, "withMediaAnalyticsContext", {
6
+ Object.defineProperty(exports, "ANALYTICS_MEDIA_CHANNEL", {
7
7
  enumerable: true,
8
8
  get: function get() {
9
- return _withMediaAnalyticsContext.withMediaAnalyticsContext;
9
+ return _constants.ANALYTICS_MEDIA_CHANNEL;
10
10
  }
11
11
  });
12
- Object.defineProperty(exports, "ANALYTICS_MEDIA_CHANNEL", {
12
+ Object.defineProperty(exports, "withMediaAnalyticsContext", {
13
13
  enumerable: true,
14
14
  get: function get() {
15
- return _constants.ANALYTICS_MEDIA_CHANNEL;
15
+ return _withMediaAnalyticsContext.withMediaAnalyticsContext;
16
16
  }
17
17
  });
18
18
 
@@ -25,9 +25,9 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
25
25
 
26
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
27
 
28
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
28
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
29
29
 
30
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
30
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
31
31
 
32
32
  var getFilteredFeatureFlags = function getFilteredFeatureFlags(keys, featureFlags) {
33
33
  return keys.reduce(function (result, key) {
package/dist/cjs/index.js CHANGED
@@ -3,16 +3,16 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- Object.defineProperty(exports, "downloadUrl", {
6
+ Object.defineProperty(exports, "ANALYTICS_MEDIA_CHANNEL", {
7
7
  enumerable: true,
8
8
  get: function get() {
9
- return _downloadUrl.downloadUrl;
9
+ return _constants.ANALYTICS_MEDIA_CHANNEL;
10
10
  }
11
11
  });
12
- Object.defineProperty(exports, "getMediaFeatureFlag", {
12
+ Object.defineProperty(exports, "areEqualFeatureFlags", {
13
13
  enumerable: true,
14
14
  get: function get() {
15
- return _mediaFeatureFlags.getMediaFeatureFlag;
15
+ return _mediaFeatureFlags.areEqualFeatureFlags;
16
16
  }
17
17
  });
18
18
  Object.defineProperty(exports, "defaultMediaFeatureFlags", {
@@ -21,16 +21,16 @@ Object.defineProperty(exports, "defaultMediaFeatureFlags", {
21
21
  return _mediaFeatureFlags.defaultMediaFeatureFlags;
22
22
  }
23
23
  });
24
- Object.defineProperty(exports, "withMediaAnalyticsContext", {
24
+ Object.defineProperty(exports, "downloadUrl", {
25
25
  enumerable: true,
26
26
  get: function get() {
27
- return _withMediaAnalyticsContext.withMediaAnalyticsContext;
27
+ return _downloadUrl.downloadUrl;
28
28
  }
29
29
  });
30
- Object.defineProperty(exports, "ANALYTICS_MEDIA_CHANNEL", {
30
+ Object.defineProperty(exports, "getMediaFeatureFlag", {
31
31
  enumerable: true,
32
32
  get: function get() {
33
- return _constants.ANALYTICS_MEDIA_CHANNEL;
33
+ return _mediaFeatureFlags.getMediaFeatureFlag;
34
34
  }
35
35
  });
36
36
  Object.defineProperty(exports, "getMediaTypeFromMimeType", {
@@ -39,10 +39,10 @@ Object.defineProperty(exports, "getMediaTypeFromMimeType", {
39
39
  return _mediaTypeUtils.getMediaTypeFromMimeType;
40
40
  }
41
41
  });
42
- Object.defineProperty(exports, "isImageMimeTypeSupportedByBrowser", {
42
+ Object.defineProperty(exports, "isAudioMimeTypeSupportedByServer", {
43
43
  enumerable: true,
44
44
  get: function get() {
45
- return _mediaTypeUtils.isImageMimeTypeSupportedByBrowser;
45
+ return _mediaTypeUtils.isAudioMimeTypeSupportedByServer;
46
46
  }
47
47
  });
48
48
  Object.defineProperty(exports, "isDocumentMimeTypeSupportedByBrowser", {
@@ -51,10 +51,16 @@ Object.defineProperty(exports, "isDocumentMimeTypeSupportedByBrowser", {
51
51
  return _mediaTypeUtils.isDocumentMimeTypeSupportedByBrowser;
52
52
  }
53
53
  });
54
- Object.defineProperty(exports, "isMimeTypeSupportedByBrowser", {
54
+ Object.defineProperty(exports, "isDocumentMimeTypeSupportedByServer", {
55
55
  enumerable: true,
56
56
  get: function get() {
57
- return _mediaTypeUtils.isMimeTypeSupportedByBrowser;
57
+ return _mediaTypeUtils.isDocumentMimeTypeSupportedByServer;
58
+ }
59
+ });
60
+ Object.defineProperty(exports, "isImageMimeTypeSupportedByBrowser", {
61
+ enumerable: true,
62
+ get: function get() {
63
+ return _mediaTypeUtils.isImageMimeTypeSupportedByBrowser;
58
64
  }
59
65
  });
60
66
  Object.defineProperty(exports, "isImageMimeTypeSupportedByServer", {
@@ -63,16 +69,22 @@ Object.defineProperty(exports, "isImageMimeTypeSupportedByServer", {
63
69
  return _mediaTypeUtils.isImageMimeTypeSupportedByServer;
64
70
  }
65
71
  });
66
- Object.defineProperty(exports, "isDocumentMimeTypeSupportedByServer", {
72
+ Object.defineProperty(exports, "isMimeTypeSupportedByBrowser", {
67
73
  enumerable: true,
68
74
  get: function get() {
69
- return _mediaTypeUtils.isDocumentMimeTypeSupportedByServer;
75
+ return _mediaTypeUtils.isMimeTypeSupportedByBrowser;
70
76
  }
71
77
  });
72
- Object.defineProperty(exports, "isAudioMimeTypeSupportedByServer", {
78
+ Object.defineProperty(exports, "isMimeTypeSupportedByServer", {
73
79
  enumerable: true,
74
80
  get: function get() {
75
- return _mediaTypeUtils.isAudioMimeTypeSupportedByServer;
81
+ return _mediaTypeUtils.isMimeTypeSupportedByServer;
82
+ }
83
+ });
84
+ Object.defineProperty(exports, "isUnknownMimeTypeSupportedByServer", {
85
+ enumerable: true,
86
+ get: function get() {
87
+ return _mediaTypeUtils.isUnknownMimeTypeSupportedByServer;
76
88
  }
77
89
  });
78
90
  Object.defineProperty(exports, "isVideoMimeTypeSupportedByServer", {
@@ -81,16 +93,16 @@ Object.defineProperty(exports, "isVideoMimeTypeSupportedByServer", {
81
93
  return _mediaTypeUtils.isVideoMimeTypeSupportedByServer;
82
94
  }
83
95
  });
84
- Object.defineProperty(exports, "isUnknownMimeTypeSupportedByServer", {
96
+ Object.defineProperty(exports, "useMemoizeFeatureFlags", {
85
97
  enumerable: true,
86
98
  get: function get() {
87
- return _mediaTypeUtils.isUnknownMimeTypeSupportedByServer;
99
+ return _mediaFeatureFlags.useMemoizeFeatureFlags;
88
100
  }
89
101
  });
90
- Object.defineProperty(exports, "isMimeTypeSupportedByServer", {
102
+ Object.defineProperty(exports, "withMediaAnalyticsContext", {
91
103
  enumerable: true,
92
104
  get: function get() {
93
- return _mediaTypeUtils.isMimeTypeSupportedByServer;
105
+ return _withMediaAnalyticsContext.withMediaAnalyticsContext;
94
106
  }
95
107
  });
96
108
 
@@ -3,22 +3,23 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.defaultMediaFeatureFlags = exports.areEqualFeatureFlags = void 0;
6
7
  exports.getMediaFeatureFlag = getMediaFeatureFlag;
7
- exports.defaultMediaFeatureFlags = void 0;
8
+ exports.useMemoizeFeatureFlags = void 0;
9
+
10
+ var _react = require("react");
8
11
 
9
12
  var _mediaFeatureFlagLocal = require("./mediaFeatureFlag-local");
10
13
 
11
14
  // default values defined here, not necessary for components to know directly as they should use the function below
12
15
  var defaultMediaFeatureFlags = {
13
16
  newCardExperience: false,
14
- zipPreviews: false,
15
17
  captions: false,
18
+ mediaInline: false,
19
+ // We can't yet switch this feature on
20
+ // TODO https://product-fabric.atlassian.net/browse/MEX-104
16
21
  folderUploads: false,
17
- codeViewer: false,
18
- poll_intervalMs: 3000,
19
- poll_maxAttempts: 30,
20
- poll_backoffFactor: 1.25,
21
- poll_maxIntervalMs: 200000
22
+ timestampOnVideo: false
22
23
  };
23
24
  /**
24
25
  * Public accessor from components to fallback to defaults if flags not passed,
@@ -60,4 +61,40 @@ Object.keys(defaultMediaFeatureFlags).forEach(function (flagName) {
60
61
  // eslint-disable-next-line no-console
61
62
  console.info("%c* LOCAL * MediaFeatureFlag.".concat(flagName, " = ").concat(localOverride), 'font-weight:bold;color:cyan');
62
63
  }
63
- });
64
+ });
65
+
66
+ var areEqualFeatureFlags = function areEqualFeatureFlags(ffA, ffB) {
67
+ if (!ffA && !ffB) {
68
+ return true;
69
+ }
70
+
71
+ if (!ffA || !ffB) {
72
+ return false;
73
+ } // With this type we ensure this object will compare all the flags
74
+
75
+
76
+ var results = {
77
+ newCardExperience: ffA.newCardExperience === ffB.newCardExperience,
78
+ captions: ffA.captions === ffB.captions,
79
+ mediaInline: ffA.mediaInline === ffB.mediaInline,
80
+ folderUploads: ffA.folderUploads === ffB.folderUploads,
81
+ timestampOnVideo: ffA.timestampOnVideo === ffB.timestampOnVideo
82
+ };
83
+ return Object.values(results).every(function (result) {
84
+ return result;
85
+ });
86
+ };
87
+
88
+ exports.areEqualFeatureFlags = areEqualFeatureFlags;
89
+
90
+ var useMemoizeFeatureFlags = function useMemoizeFeatureFlags(featureFlags) {
91
+ var ref = (0, _react.useRef)();
92
+
93
+ if (!areEqualFeatureFlags(featureFlags, ref.current)) {
94
+ ref.current = featureFlags;
95
+ }
96
+
97
+ return ref.current;
98
+ };
99
+
100
+ exports.useMemoizeFeatureFlags = useMemoizeFeatureFlags;
@@ -3,34 +3,35 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- Object.defineProperty(exports, "isImageMimeTypeSupportedByBrowser", {
6
+ exports.getMediaTypeFromMimeType = void 0;
7
+ Object.defineProperty(exports, "isAudioMimeTypeSupportedByBrowser", {
7
8
  enumerable: true,
8
9
  get: function get() {
9
- return _isMimeTypeSupportedByBrowser.isImageMimeTypeSupportedByBrowser;
10
+ return _isMimeTypeSupportedByBrowser.isAudioMimeTypeSupportedByBrowser;
10
11
  }
11
12
  });
12
- Object.defineProperty(exports, "isDocumentMimeTypeSupportedByBrowser", {
13
+ Object.defineProperty(exports, "isAudioMimeTypeSupportedByServer", {
13
14
  enumerable: true,
14
15
  get: function get() {
15
- return _isMimeTypeSupportedByBrowser.isDocumentMimeTypeSupportedByBrowser;
16
+ return _isMimeTypeSupportedByServer.isAudioMimeTypeSupportedByServer;
16
17
  }
17
18
  });
18
- Object.defineProperty(exports, "isAudioMimeTypeSupportedByBrowser", {
19
+ Object.defineProperty(exports, "isDocumentMimeTypeSupportedByBrowser", {
19
20
  enumerable: true,
20
21
  get: function get() {
21
- return _isMimeTypeSupportedByBrowser.isAudioMimeTypeSupportedByBrowser;
22
+ return _isMimeTypeSupportedByBrowser.isDocumentMimeTypeSupportedByBrowser;
22
23
  }
23
24
  });
24
- Object.defineProperty(exports, "isVideoMimeTypeSupportedByBrowser", {
25
+ Object.defineProperty(exports, "isDocumentMimeTypeSupportedByServer", {
25
26
  enumerable: true,
26
27
  get: function get() {
27
- return _isMimeTypeSupportedByBrowser.isVideoMimeTypeSupportedByBrowser;
28
+ return _isMimeTypeSupportedByServer.isDocumentMimeTypeSupportedByServer;
28
29
  }
29
30
  });
30
- Object.defineProperty(exports, "isMimeTypeSupportedByBrowser", {
31
+ Object.defineProperty(exports, "isImageMimeTypeSupportedByBrowser", {
31
32
  enumerable: true,
32
33
  get: function get() {
33
- return _isMimeTypeSupportedByBrowser.isMimeTypeSupportedByBrowser;
34
+ return _isMimeTypeSupportedByBrowser.isImageMimeTypeSupportedByBrowser;
34
35
  }
35
36
  });
36
37
  Object.defineProperty(exports, "isImageMimeTypeSupportedByServer", {
@@ -39,37 +40,36 @@ Object.defineProperty(exports, "isImageMimeTypeSupportedByServer", {
39
40
  return _isMimeTypeSupportedByServer.isImageMimeTypeSupportedByServer;
40
41
  }
41
42
  });
42
- Object.defineProperty(exports, "isDocumentMimeTypeSupportedByServer", {
43
+ Object.defineProperty(exports, "isMimeTypeSupportedByBrowser", {
43
44
  enumerable: true,
44
45
  get: function get() {
45
- return _isMimeTypeSupportedByServer.isDocumentMimeTypeSupportedByServer;
46
+ return _isMimeTypeSupportedByBrowser.isMimeTypeSupportedByBrowser;
46
47
  }
47
48
  });
48
- Object.defineProperty(exports, "isAudioMimeTypeSupportedByServer", {
49
+ Object.defineProperty(exports, "isMimeTypeSupportedByServer", {
49
50
  enumerable: true,
50
51
  get: function get() {
51
- return _isMimeTypeSupportedByServer.isAudioMimeTypeSupportedByServer;
52
+ return _isMimeTypeSupportedByServer.isMimeTypeSupportedByServer;
52
53
  }
53
54
  });
54
- Object.defineProperty(exports, "isVideoMimeTypeSupportedByServer", {
55
+ Object.defineProperty(exports, "isUnknownMimeTypeSupportedByServer", {
55
56
  enumerable: true,
56
57
  get: function get() {
57
- return _isMimeTypeSupportedByServer.isVideoMimeTypeSupportedByServer;
58
+ return _isMimeTypeSupportedByServer.isUnknownMimeTypeSupportedByServer;
58
59
  }
59
60
  });
60
- Object.defineProperty(exports, "isUnknownMimeTypeSupportedByServer", {
61
+ Object.defineProperty(exports, "isVideoMimeTypeSupportedByBrowser", {
61
62
  enumerable: true,
62
63
  get: function get() {
63
- return _isMimeTypeSupportedByServer.isUnknownMimeTypeSupportedByServer;
64
+ return _isMimeTypeSupportedByBrowser.isVideoMimeTypeSupportedByBrowser;
64
65
  }
65
66
  });
66
- Object.defineProperty(exports, "isMimeTypeSupportedByServer", {
67
+ Object.defineProperty(exports, "isVideoMimeTypeSupportedByServer", {
67
68
  enumerable: true,
68
69
  get: function get() {
69
- return _isMimeTypeSupportedByServer.isMimeTypeSupportedByServer;
70
+ return _isMimeTypeSupportedByServer.isVideoMimeTypeSupportedByServer;
70
71
  }
71
72
  });
72
- exports.getMediaTypeFromMimeType = void 0;
73
73
 
74
74
  var _isArchive = require("./isArchive");
75
75
 
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.isMimeTypeSupportedByBrowser = exports.isVideoMimeTypeSupportedByBrowser = exports.isAudioMimeTypeSupportedByBrowser = exports.isDocumentMimeTypeSupportedByBrowser = exports.isImageMimeTypeSupportedByBrowser = void 0;
6
+ exports.isVideoMimeTypeSupportedByBrowser = exports.isMimeTypeSupportedByBrowser = exports.isImageMimeTypeSupportedByBrowser = exports.isDocumentMimeTypeSupportedByBrowser = exports.isAudioMimeTypeSupportedByBrowser = void 0;
7
7
 
8
8
  // Based on https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types
9
9
  var isImageMimeTypeSupportedByBrowser = function isImageMimeTypeSupportedByBrowser(mimeType) {
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.isMimeTypeSupportedByServer = exports.isUnknownMimeTypeSupportedByServer = exports.isVideoMimeTypeSupportedByServer = exports.isAudioMimeTypeSupportedByServer = exports.isDocumentMimeTypeSupportedByServer = exports.isImageMimeTypeSupportedByServer = void 0;
6
+ exports.isVideoMimeTypeSupportedByServer = exports.isUnknownMimeTypeSupportedByServer = exports.isMimeTypeSupportedByServer = exports.isImageMimeTypeSupportedByServer = exports.isDocumentMimeTypeSupportedByServer = exports.isAudioMimeTypeSupportedByServer = void 0;
7
7
 
8
8
  // Based on https://developer.atlassian.com/platform/media/learning/file-previews/
9
9
  var isImageMimeTypeSupportedByServer = function isImageMimeTypeSupportedByServer(mimeType) {
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/media-common",
3
- "version": "2.9.0",
3
+ "version": "2.10.2",
4
4
  "sideEffects": false
5
5
  }
@@ -2,7 +2,7 @@ export { downloadUrl } from './downloadUrl'; // Warning! You can't add new media
2
2
  // See packages/media/media-core/src/__tests__/cache-backward-compatibility.spec.ts
3
3
 
4
4
  // Media Feature Flags
5
- export { getMediaFeatureFlag, defaultMediaFeatureFlags } from './mediaFeatureFlags';
5
+ export { getMediaFeatureFlag, defaultMediaFeatureFlags, areEqualFeatureFlags, useMemoizeFeatureFlags } from './mediaFeatureFlags';
6
6
  // Analytics context
7
7
  export { withMediaAnalyticsContext } from './analytics/withMediaAnalyticsContext'; // Analytics constants
8
8
 
@@ -1,15 +1,15 @@
1
- import { getLocalMediaFeatureFlag } from './mediaFeatureFlag-local';
1
+ import { useRef } from 'react';
2
+ import { getLocalMediaFeatureFlag } from './mediaFeatureFlag-local'; // Media feature flags - type and defaults defined here in one source of truth
3
+
2
4
  // default values defined here, not necessary for components to know directly as they should use the function below
3
5
  export const defaultMediaFeatureFlags = {
4
6
  newCardExperience: false,
5
- zipPreviews: false,
6
7
  captions: false,
8
+ mediaInline: false,
9
+ // We can't yet switch this feature on
10
+ // TODO https://product-fabric.atlassian.net/browse/MEX-104
7
11
  folderUploads: false,
8
- codeViewer: false,
9
- poll_intervalMs: 3000,
10
- poll_maxAttempts: 30,
11
- poll_backoffFactor: 1.25,
12
- poll_maxIntervalMs: 200000
12
+ timestampOnVideo: false
13
13
  };
14
14
  /**
15
15
  * Public accessor from components to fallback to defaults if flags not passed,
@@ -48,4 +48,32 @@ Object.keys(defaultMediaFeatureFlags).forEach(flagName => {
48
48
  // eslint-disable-next-line no-console
49
49
  console.info(`%c* LOCAL * MediaFeatureFlag.${flagName} = ${localOverride}`, 'font-weight:bold;color:cyan');
50
50
  }
51
- });
51
+ });
52
+ export const areEqualFeatureFlags = (ffA, ffB) => {
53
+ if (!ffA && !ffB) {
54
+ return true;
55
+ }
56
+
57
+ if (!ffA || !ffB) {
58
+ return false;
59
+ } // With this type we ensure this object will compare all the flags
60
+
61
+
62
+ const results = {
63
+ newCardExperience: ffA.newCardExperience === ffB.newCardExperience,
64
+ captions: ffA.captions === ffB.captions,
65
+ mediaInline: ffA.mediaInline === ffB.mediaInline,
66
+ folderUploads: ffA.folderUploads === ffB.folderUploads,
67
+ timestampOnVideo: ffA.timestampOnVideo === ffB.timestampOnVideo
68
+ };
69
+ return Object.values(results).every(result => result);
70
+ };
71
+ export const useMemoizeFeatureFlags = featureFlags => {
72
+ const ref = useRef();
73
+
74
+ if (!areEqualFeatureFlags(featureFlags, ref.current)) {
75
+ ref.current = featureFlags;
76
+ }
77
+
78
+ return ref.current;
79
+ };
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/media-common",
3
- "version": "2.9.0",
3
+ "version": "2.10.2",
4
4
  "sideEffects": false
5
5
  }
@@ -1,9 +1,9 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
3
 
4
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
4
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
5
5
 
6
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
6
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7
7
 
8
8
  import React, { forwardRef, useMemo } from 'react';
9
9
  import { AnalyticsContext } from '@atlaskit/analytics-next';
package/dist/esm/index.js CHANGED
@@ -2,7 +2,7 @@ export { downloadUrl } from './downloadUrl'; // Warning! You can't add new media
2
2
  // See packages/media/media-core/src/__tests__/cache-backward-compatibility.spec.ts
3
3
 
4
4
  // Media Feature Flags
5
- export { getMediaFeatureFlag, defaultMediaFeatureFlags } from './mediaFeatureFlags';
5
+ export { getMediaFeatureFlag, defaultMediaFeatureFlags, areEqualFeatureFlags, useMemoizeFeatureFlags } from './mediaFeatureFlags';
6
6
  // Analytics context
7
7
  export { withMediaAnalyticsContext } from './analytics/withMediaAnalyticsContext'; // Analytics constants
8
8
 
@@ -1,15 +1,15 @@
1
- import { getLocalMediaFeatureFlag } from './mediaFeatureFlag-local';
1
+ import { useRef } from 'react';
2
+ import { getLocalMediaFeatureFlag } from './mediaFeatureFlag-local'; // Media feature flags - type and defaults defined here in one source of truth
3
+
2
4
  // default values defined here, not necessary for components to know directly as they should use the function below
3
5
  export var defaultMediaFeatureFlags = {
4
6
  newCardExperience: false,
5
- zipPreviews: false,
6
7
  captions: false,
8
+ mediaInline: false,
9
+ // We can't yet switch this feature on
10
+ // TODO https://product-fabric.atlassian.net/browse/MEX-104
7
11
  folderUploads: false,
8
- codeViewer: false,
9
- poll_intervalMs: 3000,
10
- poll_maxAttempts: 30,
11
- poll_backoffFactor: 1.25,
12
- poll_maxIntervalMs: 200000
12
+ timestampOnVideo: false
13
13
  };
14
14
  /**
15
15
  * Public accessor from components to fallback to defaults if flags not passed,
@@ -48,4 +48,34 @@ Object.keys(defaultMediaFeatureFlags).forEach(function (flagName) {
48
48
  // eslint-disable-next-line no-console
49
49
  console.info("%c* LOCAL * MediaFeatureFlag.".concat(flagName, " = ").concat(localOverride), 'font-weight:bold;color:cyan');
50
50
  }
51
- });
51
+ });
52
+ export var areEqualFeatureFlags = function areEqualFeatureFlags(ffA, ffB) {
53
+ if (!ffA && !ffB) {
54
+ return true;
55
+ }
56
+
57
+ if (!ffA || !ffB) {
58
+ return false;
59
+ } // With this type we ensure this object will compare all the flags
60
+
61
+
62
+ var results = {
63
+ newCardExperience: ffA.newCardExperience === ffB.newCardExperience,
64
+ captions: ffA.captions === ffB.captions,
65
+ mediaInline: ffA.mediaInline === ffB.mediaInline,
66
+ folderUploads: ffA.folderUploads === ffB.folderUploads,
67
+ timestampOnVideo: ffA.timestampOnVideo === ffB.timestampOnVideo
68
+ };
69
+ return Object.values(results).every(function (result) {
70
+ return result;
71
+ });
72
+ };
73
+ export var useMemoizeFeatureFlags = function useMemoizeFeatureFlags(featureFlags) {
74
+ var ref = useRef();
75
+
76
+ if (!areEqualFeatureFlags(featureFlags, ref.current)) {
77
+ ref.current = featureFlags;
78
+ }
79
+
80
+ return ref.current;
81
+ };
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/media-common",
3
- "version": "2.9.0",
3
+ "version": "2.10.2",
4
4
  "sideEffects": false
5
5
  }
@@ -1 +1,2 @@
1
+ /// <reference types="react" />
1
2
  export declare function createRxjsNotice(componentName: string): JSX.Element;
@@ -1,7 +1,7 @@
1
1
  export { downloadUrl } from './downloadUrl';
2
2
  export declare type MediaType = 'doc' | 'audio' | 'video' | 'image' | 'archive' | 'unknown';
3
3
  export declare type FileStatus = 'uploading' | 'processing' | 'processed' | 'error' | 'failed-processing';
4
- export { getMediaFeatureFlag, defaultMediaFeatureFlags, } from './mediaFeatureFlags';
4
+ export { getMediaFeatureFlag, defaultMediaFeatureFlags, areEqualFeatureFlags, useMemoizeFeatureFlags, } from './mediaFeatureFlags';
5
5
  export type { MediaFeatureFlags, WithMediaFeatureFlags, } from './mediaFeatureFlags';
6
6
  export interface NumericalCardDimensions {
7
7
  width: number;
@@ -11,3 +11,4 @@ export type { PackageAttributes, WithFileAttributes, WithPerformanceAttributes,
11
11
  export { withMediaAnalyticsContext } from './analytics/withMediaAnalyticsContext';
12
12
  export { ANALYTICS_MEDIA_CHANNEL } from './analytics/constants';
13
13
  export { getMediaTypeFromMimeType, isImageMimeTypeSupportedByBrowser, isDocumentMimeTypeSupportedByBrowser, isMimeTypeSupportedByBrowser, isImageMimeTypeSupportedByServer, isDocumentMimeTypeSupportedByServer, isAudioMimeTypeSupportedByServer, isVideoMimeTypeSupportedByServer, isUnknownMimeTypeSupportedByServer, isMimeTypeSupportedByServer, } from './mediaTypeUtils';
14
+ export declare type SSR = 'client' | 'server';
@@ -1,15 +1,9 @@
1
- export interface PollingOptions {
2
- poll_intervalMs?: number;
3
- poll_maxAttempts?: number;
4
- poll_backoffFactor?: number;
5
- poll_maxIntervalMs?: number;
6
- }
7
- export interface MediaFeatureFlags extends PollingOptions {
1
+ export interface MediaFeatureFlags {
8
2
  newCardExperience?: boolean;
9
- zipPreviews?: boolean;
10
3
  captions?: boolean;
4
+ mediaInline?: boolean;
11
5
  folderUploads?: boolean;
12
- codeViewer?: boolean;
6
+ timestampOnVideo?: boolean;
13
7
  }
14
8
  export interface WithMediaFeatureFlags {
15
9
  featureFlags?: MediaFeatureFlags;
@@ -26,3 +20,5 @@ export declare const defaultMediaFeatureFlags: Required<MediaFeatureFlags>;
26
20
  * (you will see a warning in console if override used)
27
21
  * */
28
22
  export declare function getMediaFeatureFlag<T = boolean>(flagName: keyof MediaFeatureFlags, featureFlags?: MediaFeatureFlags): T;
23
+ export declare const areEqualFeatureFlags: (ffA?: MediaFeatureFlags | undefined, ffB?: MediaFeatureFlags | undefined) => boolean;
24
+ export declare const useMemoizeFeatureFlags: (featureFlags?: MediaFeatureFlags | undefined) => MediaFeatureFlags | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/media-common",
3
- "version": "2.9.0",
3
+ "version": "2.10.2",
4
4
  "description": "Includes common utilities used by other media packages",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -44,10 +44,10 @@
44
44
  },
45
45
  "devDependencies": {
46
46
  "@atlaskit/docs": "*",
47
- "@atlaskit/media-test-helpers": "^28.6.0",
47
+ "@atlaskit/media-test-helpers": "^29.0.0",
48
48
  "@atlassian/atlassian-frontend-prettier-config-1.0.1": "npm:@atlassian/atlassian-frontend-prettier-config@1.0.1",
49
49
  "enzyme": "^3.10.0",
50
- "lodash": "^4.17.15",
50
+ "lodash": "^4.17.21",
51
51
  "react": "^16.8.0",
52
52
  "react-dom": "^16.8.0",
53
53
  "typescript": "3.9.6"