@atlaskit/media-common 2.12.1 → 2.13.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.
- package/CHANGELOG.md +8 -0
- package/analytics/package.json +1 -0
- package/dist/cjs/index.js +6 -0
- package/dist/cjs/mediaFeatureFlags/index.js +43 -0
- package/dist/cjs/{mediaFeatureFlags.js → mediaFeatureFlags/mediaFeatureFlags.js} +102 -48
- package/dist/cjs/mediaFeatureFlags/types.js +5 -0
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/index.js +1 -1
- package/dist/es2019/mediaFeatureFlags/index.js +1 -0
- package/dist/es2019/{mediaFeatureFlags.js → mediaFeatureFlags/mediaFeatureFlags.js} +65 -27
- package/dist/es2019/mediaFeatureFlags/types.js +1 -0
- package/dist/es2019/version.json +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/mediaFeatureFlags/index.js +1 -0
- package/dist/esm/{mediaFeatureFlags.js → mediaFeatureFlags/mediaFeatureFlags.js} +86 -40
- package/dist/esm/mediaFeatureFlags/types.js +1 -0
- package/dist/esm/version.json +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/mediaFeatureFlags/index.d.ts +2 -0
- package/dist/types/{mediaFeatureFlags.d.ts → mediaFeatureFlags/mediaFeatureFlags.d.ts} +14 -14
- package/dist/types/mediaFeatureFlags/types.d.ts +14 -0
- package/downloadUrl/package.json +1 -0
- package/mediaFeatureFlags/package.json +5 -4
- package/mediaTypeUtils/package.json +1 -0
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# @atlaskit/media-common
|
|
2
2
|
|
|
3
|
+
## 2.13.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`501240ef964`](https://bitbucket.org/atlassian/atlassian-frontend/commits/501240ef964) - Export `filterFeatureFlagKeysAllProducts`
|
|
8
|
+
- [`a09f961b9b2`](https://bitbucket.org/atlassian/atlassian-frontend/commits/a09f961b9b2) - Add filterFeatureFlagNamesWithAllProducts for returning the feature flags for all the products
|
|
9
|
+
- [`a4f822c2d5d`](https://bitbucket.org/atlassian/atlassian-frontend/commits/a4f822c2d5d) - Add MediaFeatureFlagMap for Confluence and Jira
|
|
10
|
+
|
|
3
11
|
## 2.12.1
|
|
4
12
|
|
|
5
13
|
### Patch Changes
|
package/analytics/package.json
CHANGED
package/dist/cjs/index.js
CHANGED
|
@@ -33,6 +33,12 @@ Object.defineProperty(exports, "downloadUrl", {
|
|
|
33
33
|
return _downloadUrl.downloadUrl;
|
|
34
34
|
}
|
|
35
35
|
});
|
|
36
|
+
Object.defineProperty(exports, "filterFeatureFlagKeysAllProducts", {
|
|
37
|
+
enumerable: true,
|
|
38
|
+
get: function get() {
|
|
39
|
+
return _mediaFeatureFlags.filterFeatureFlagKeysAllProducts;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
36
42
|
Object.defineProperty(exports, "filterFeatureFlagNames", {
|
|
37
43
|
enumerable: true,
|
|
38
44
|
get: function get() {
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "areEqualFeatureFlags", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function get() {
|
|
9
|
+
return _mediaFeatureFlags.areEqualFeatureFlags;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "defaultMediaFeatureFlags", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function get() {
|
|
15
|
+
return _mediaFeatureFlags.defaultMediaFeatureFlags;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(exports, "filterFeatureFlagKeysAllProducts", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function get() {
|
|
21
|
+
return _mediaFeatureFlags.filterFeatureFlagKeysAllProducts;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(exports, "filterFeatureFlagNames", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
get: function get() {
|
|
27
|
+
return _mediaFeatureFlags.filterFeatureFlagNames;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
Object.defineProperty(exports, "getMediaFeatureFlag", {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
get: function get() {
|
|
33
|
+
return _mediaFeatureFlags.getMediaFeatureFlag;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
Object.defineProperty(exports, "useMemoizeFeatureFlags", {
|
|
37
|
+
enumerable: true,
|
|
38
|
+
get: function get() {
|
|
39
|
+
return _mediaFeatureFlags.useMemoizeFeatureFlags;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
var _mediaFeatureFlags = require("./mediaFeatureFlags");
|
|
@@ -5,17 +5,113 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.filterFeatureFlagNames = exports.defaultMediaFeatureFlags = exports.areEqualFeatureFlags = void 0;
|
|
8
|
+
exports.filterFeatureFlagNames = exports.filterFeatureFlagKeysAllProducts = exports.defaultMediaFeatureFlags = exports.areEqualFeatureFlags = void 0;
|
|
9
9
|
exports.getMediaFeatureFlag = getMediaFeatureFlag;
|
|
10
|
-
exports.useMemoizeFeatureFlags = void 0;
|
|
10
|
+
exports.useMemoizeFeatureFlags = exports.mediaFeatureFlagsProductToLaunchDarklyMap = exports.mapAndFilterFeatureFlagNames = void 0;
|
|
11
11
|
|
|
12
12
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
13
|
|
|
14
14
|
var _react = require("react");
|
|
15
15
|
|
|
16
|
-
var _mediaFeatureFlagLocal = require("
|
|
16
|
+
var _mediaFeatureFlagLocal = require("../mediaFeatureFlag-local");
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
var areEqualFeatureFlags = function areEqualFeatureFlags(ffA, ffB) {
|
|
19
|
+
if (!ffA && !ffB) {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (!ffA || !ffB) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
var results = {
|
|
28
|
+
newCardExperience: ffA.newCardExperience === ffB.newCardExperience,
|
|
29
|
+
captions: ffA.captions === ffB.captions,
|
|
30
|
+
mediaInline: ffA.mediaInline === ffB.mediaInline,
|
|
31
|
+
folderUploads: ffA.folderUploads === ffB.folderUploads,
|
|
32
|
+
timestampOnVideo: ffA.timestampOnVideo === ffB.timestampOnVideo,
|
|
33
|
+
observedWidth: ffA.observedWidth === ffB.observedWidth
|
|
34
|
+
};
|
|
35
|
+
return Object.values(results).every(function (result) {
|
|
36
|
+
return result;
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
exports.areEqualFeatureFlags = areEqualFeatureFlags;
|
|
41
|
+
|
|
42
|
+
var filterFeatureFlagNames = function filterFeatureFlagNames(flags) {
|
|
43
|
+
var pairs = Object.entries(flags);
|
|
44
|
+
return pairs.filter(function (_ref) {
|
|
45
|
+
var _ref2 = (0, _slicedToArray2.default)(_ref, 2),
|
|
46
|
+
_key = _ref2[0],
|
|
47
|
+
value = _ref2[1];
|
|
48
|
+
|
|
49
|
+
return !!value;
|
|
50
|
+
}).map(function (_ref3) {
|
|
51
|
+
var _ref4 = (0, _slicedToArray2.default)(_ref3, 1),
|
|
52
|
+
key = _ref4[0];
|
|
53
|
+
|
|
54
|
+
return key;
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Takes a record of {Media Feature Flag Names → boolean} and a supported product name.
|
|
59
|
+
* Returns the corresponding product’s Launch Darkly Keys for each of the flags set as true in the input record.
|
|
60
|
+
* */
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
exports.filterFeatureFlagNames = filterFeatureFlagNames;
|
|
64
|
+
|
|
65
|
+
var mapAndFilterFeatureFlagNames = function mapAndFilterFeatureFlagNames(flags, product) {
|
|
66
|
+
var mediaFeatureFlags = filterFeatureFlagNames(flags);
|
|
67
|
+
return mediaFeatureFlags.map(function (key) {
|
|
68
|
+
return mediaFeatureFlagsProductToLaunchDarklyMap[product][key];
|
|
69
|
+
});
|
|
70
|
+
}; // TODO(MEX-1547): This is temporary solution to just return the launch darkly feature flags for all products.
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Takes a record of {Media Feature Flag Names → boolean}.
|
|
74
|
+
* Returns the Launch Darkly Keys from all products for each of the flags set as true in the input record.
|
|
75
|
+
* */
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
exports.mapAndFilterFeatureFlagNames = mapAndFilterFeatureFlagNames;
|
|
79
|
+
|
|
80
|
+
var filterFeatureFlagKeysAllProducts = function filterFeatureFlagKeysAllProducts(flags) {
|
|
81
|
+
var filteredFlags = filterFeatureFlagNames(flags);
|
|
82
|
+
var supportedProducts = Object.keys(mediaFeatureFlagsProductToLaunchDarklyMap);
|
|
83
|
+
var ldFeatureFlags = [];
|
|
84
|
+
filteredFlags.forEach(function (flag) {
|
|
85
|
+
return supportedProducts.forEach(function (product) {
|
|
86
|
+
return ldFeatureFlags.push(mediaFeatureFlagsProductToLaunchDarklyMap[product][flag]);
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
return ldFeatureFlags.filter(function (flag) {
|
|
90
|
+
return flag !== '';
|
|
91
|
+
});
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
exports.filterFeatureFlagKeysAllProducts = filterFeatureFlagKeysAllProducts;
|
|
95
|
+
var mediaFeatureFlagsProductToLaunchDarklyMap = {
|
|
96
|
+
confluence: {
|
|
97
|
+
newCardExperience: 'confluence.media.cards.new.experience',
|
|
98
|
+
captions: 'confluence.frontend.fabric.editor.media.captions',
|
|
99
|
+
mediaInline: 'confluence.frontend.fabric.editor.media.inline',
|
|
100
|
+
folderUploads: 'confluence.media.picker.folder.uploads',
|
|
101
|
+
timestampOnVideo: '',
|
|
102
|
+
observedWidth: ''
|
|
103
|
+
},
|
|
104
|
+
jira: {
|
|
105
|
+
newCardExperience: 'issue.details.media-cards-new-experience',
|
|
106
|
+
captions: 'issue.details.editor.media.captions',
|
|
107
|
+
mediaInline: '',
|
|
108
|
+
folderUploads: '',
|
|
109
|
+
timestampOnVideo: '',
|
|
110
|
+
observedWidth: ''
|
|
111
|
+
}
|
|
112
|
+
}; // default values defined here, not necessary for components to know directly as they should use the function below
|
|
113
|
+
|
|
114
|
+
exports.mediaFeatureFlagsProductToLaunchDarklyMap = mediaFeatureFlagsProductToLaunchDarklyMap;
|
|
19
115
|
var defaultMediaFeatureFlags = {
|
|
20
116
|
newCardExperience: false,
|
|
21
117
|
captions: false,
|
|
@@ -66,31 +162,7 @@ Object.keys(defaultMediaFeatureFlags).forEach(function (flagName) {
|
|
|
66
162
|
// eslint-disable-next-line no-console
|
|
67
163
|
console.info("%c* LOCAL * MediaFeatureFlag.".concat(flagName, " = ").concat(localOverride), 'font-weight:bold;color:cyan');
|
|
68
164
|
}
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
var areEqualFeatureFlags = function areEqualFeatureFlags(ffA, ffB) {
|
|
72
|
-
if (!ffA && !ffB) {
|
|
73
|
-
return true;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
if (!ffA || !ffB) {
|
|
77
|
-
return false;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
var results = {
|
|
81
|
-
newCardExperience: ffA.newCardExperience === ffB.newCardExperience,
|
|
82
|
-
captions: ffA.captions === ffB.captions,
|
|
83
|
-
mediaInline: ffA.mediaInline === ffB.mediaInline,
|
|
84
|
-
folderUploads: ffA.folderUploads === ffB.folderUploads,
|
|
85
|
-
timestampOnVideo: ffA.timestampOnVideo === ffB.timestampOnVideo,
|
|
86
|
-
observedWidth: ffA.observedWidth === ffB.observedWidth
|
|
87
|
-
};
|
|
88
|
-
return Object.values(results).every(function (result) {
|
|
89
|
-
return result;
|
|
90
|
-
});
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
exports.areEqualFeatureFlags = areEqualFeatureFlags;
|
|
165
|
+
});
|
|
94
166
|
|
|
95
167
|
var useMemoizeFeatureFlags = function useMemoizeFeatureFlags(featureFlags) {
|
|
96
168
|
var ref = (0, _react.useRef)();
|
|
@@ -102,22 +174,4 @@ var useMemoizeFeatureFlags = function useMemoizeFeatureFlags(featureFlags) {
|
|
|
102
174
|
return ref.current;
|
|
103
175
|
};
|
|
104
176
|
|
|
105
|
-
exports.useMemoizeFeatureFlags = useMemoizeFeatureFlags;
|
|
106
|
-
|
|
107
|
-
var filterFeatureFlagNames = function filterFeatureFlagNames(flags) {
|
|
108
|
-
var pairs = Object.entries(flags);
|
|
109
|
-
return pairs.filter(function (_ref) {
|
|
110
|
-
var _ref2 = (0, _slicedToArray2.default)(_ref, 2),
|
|
111
|
-
_key = _ref2[0],
|
|
112
|
-
value = _ref2[1];
|
|
113
|
-
|
|
114
|
-
return !!value;
|
|
115
|
-
}).map(function (_ref3) {
|
|
116
|
-
var _ref4 = (0, _slicedToArray2.default)(_ref3, 1),
|
|
117
|
-
key = _ref4[0];
|
|
118
|
-
|
|
119
|
-
return key;
|
|
120
|
-
});
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
exports.filterFeatureFlagNames = filterFeatureFlagNames;
|
|
177
|
+
exports.useMemoizeFeatureFlags = useMemoizeFeatureFlags;
|
package/dist/cjs/version.json
CHANGED
package/dist/es2019/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, areEqualFeatureFlags, useMemoizeFeatureFlags, filterFeatureFlagNames } from './mediaFeatureFlags';
|
|
5
|
+
export { getMediaFeatureFlag, defaultMediaFeatureFlags, areEqualFeatureFlags, useMemoizeFeatureFlags, filterFeatureFlagNames, filterFeatureFlagKeysAllProducts } from './mediaFeatureFlags';
|
|
6
6
|
// Analytics context
|
|
7
7
|
export { withMediaAnalyticsContext } from './analytics/withMediaAnalyticsContext'; // Analytics constants
|
|
8
8
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { getMediaFeatureFlag, useMemoizeFeatureFlags, defaultMediaFeatureFlags, areEqualFeatureFlags, filterFeatureFlagNames, filterFeatureFlagKeysAllProducts } from './mediaFeatureFlags';
|
|
@@ -1,7 +1,69 @@
|
|
|
1
1
|
import { useRef } from 'react';
|
|
2
|
-
import { getLocalMediaFeatureFlag } from '
|
|
2
|
+
import { getLocalMediaFeatureFlag } from '../mediaFeatureFlag-local';
|
|
3
|
+
export const areEqualFeatureFlags = (ffA, ffB) => {
|
|
4
|
+
if (!ffA && !ffB) {
|
|
5
|
+
return true;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
if (!ffA || !ffB) {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const results = {
|
|
13
|
+
newCardExperience: ffA.newCardExperience === ffB.newCardExperience,
|
|
14
|
+
captions: ffA.captions === ffB.captions,
|
|
15
|
+
mediaInline: ffA.mediaInline === ffB.mediaInline,
|
|
16
|
+
folderUploads: ffA.folderUploads === ffB.folderUploads,
|
|
17
|
+
timestampOnVideo: ffA.timestampOnVideo === ffB.timestampOnVideo,
|
|
18
|
+
observedWidth: ffA.observedWidth === ffB.observedWidth
|
|
19
|
+
};
|
|
20
|
+
return Object.values(results).every(result => result);
|
|
21
|
+
};
|
|
22
|
+
export const filterFeatureFlagNames = flags => {
|
|
23
|
+
const pairs = Object.entries(flags);
|
|
24
|
+
return pairs.filter(([_key, value]) => !!value).map(([key]) => key);
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Takes a record of {Media Feature Flag Names → boolean} and a supported product name.
|
|
28
|
+
* Returns the corresponding product’s Launch Darkly Keys for each of the flags set as true in the input record.
|
|
29
|
+
* */
|
|
30
|
+
|
|
31
|
+
export const mapAndFilterFeatureFlagNames = (flags, product) => {
|
|
32
|
+
const mediaFeatureFlags = filterFeatureFlagNames(flags);
|
|
33
|
+
return mediaFeatureFlags.map(key => mediaFeatureFlagsProductToLaunchDarklyMap[product][key]);
|
|
34
|
+
}; // TODO(MEX-1547): This is temporary solution to just return the launch darkly feature flags for all products.
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Takes a record of {Media Feature Flag Names → boolean}.
|
|
38
|
+
* Returns the Launch Darkly Keys from all products for each of the flags set as true in the input record.
|
|
39
|
+
* */
|
|
40
|
+
|
|
41
|
+
export const filterFeatureFlagKeysAllProducts = flags => {
|
|
42
|
+
const filteredFlags = filterFeatureFlagNames(flags);
|
|
43
|
+
const supportedProducts = Object.keys(mediaFeatureFlagsProductToLaunchDarklyMap);
|
|
44
|
+
const ldFeatureFlags = [];
|
|
45
|
+
filteredFlags.forEach(flag => supportedProducts.forEach(product => ldFeatureFlags.push(mediaFeatureFlagsProductToLaunchDarklyMap[product][flag])));
|
|
46
|
+
return ldFeatureFlags.filter(flag => flag !== '');
|
|
47
|
+
};
|
|
48
|
+
export const mediaFeatureFlagsProductToLaunchDarklyMap = {
|
|
49
|
+
confluence: {
|
|
50
|
+
newCardExperience: 'confluence.media.cards.new.experience',
|
|
51
|
+
captions: 'confluence.frontend.fabric.editor.media.captions',
|
|
52
|
+
mediaInline: 'confluence.frontend.fabric.editor.media.inline',
|
|
53
|
+
folderUploads: 'confluence.media.picker.folder.uploads',
|
|
54
|
+
timestampOnVideo: '',
|
|
55
|
+
observedWidth: ''
|
|
56
|
+
},
|
|
57
|
+
jira: {
|
|
58
|
+
newCardExperience: 'issue.details.media-cards-new-experience',
|
|
59
|
+
captions: 'issue.details.editor.media.captions',
|
|
60
|
+
mediaInline: '',
|
|
61
|
+
folderUploads: '',
|
|
62
|
+
timestampOnVideo: '',
|
|
63
|
+
observedWidth: ''
|
|
64
|
+
}
|
|
65
|
+
}; // default values defined here, not necessary for components to know directly as they should use the function below
|
|
3
66
|
|
|
4
|
-
// default values defined here, not necessary for components to know directly as they should use the function below
|
|
5
67
|
export const defaultMediaFeatureFlags = {
|
|
6
68
|
newCardExperience: false,
|
|
7
69
|
captions: false,
|
|
@@ -49,27 +111,7 @@ Object.keys(defaultMediaFeatureFlags).forEach(flagName => {
|
|
|
49
111
|
// eslint-disable-next-line no-console
|
|
50
112
|
console.info(`%c* LOCAL * MediaFeatureFlag.${flagName} = ${localOverride}`, 'font-weight:bold;color:cyan');
|
|
51
113
|
}
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
export const areEqualFeatureFlags = (ffA, ffB) => {
|
|
55
|
-
if (!ffA && !ffB) {
|
|
56
|
-
return true;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
if (!ffA || !ffB) {
|
|
60
|
-
return false;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
const results = {
|
|
64
|
-
newCardExperience: ffA.newCardExperience === ffB.newCardExperience,
|
|
65
|
-
captions: ffA.captions === ffB.captions,
|
|
66
|
-
mediaInline: ffA.mediaInline === ffB.mediaInline,
|
|
67
|
-
folderUploads: ffA.folderUploads === ffB.folderUploads,
|
|
68
|
-
timestampOnVideo: ffA.timestampOnVideo === ffB.timestampOnVideo,
|
|
69
|
-
observedWidth: ffA.observedWidth === ffB.observedWidth
|
|
70
|
-
};
|
|
71
|
-
return Object.values(results).every(result => result);
|
|
72
|
-
};
|
|
114
|
+
});
|
|
73
115
|
export const useMemoizeFeatureFlags = featureFlags => {
|
|
74
116
|
const ref = useRef();
|
|
75
117
|
|
|
@@ -78,8 +120,4 @@ export const useMemoizeFeatureFlags = featureFlags => {
|
|
|
78
120
|
}
|
|
79
121
|
|
|
80
122
|
return ref.current;
|
|
81
|
-
};
|
|
82
|
-
export const filterFeatureFlagNames = flags => {
|
|
83
|
-
const pairs = Object.entries(flags);
|
|
84
|
-
return pairs.filter(([_key, value]) => !!value).map(([key]) => key);
|
|
85
123
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/es2019/version.json
CHANGED
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, areEqualFeatureFlags, useMemoizeFeatureFlags, filterFeatureFlagNames } from './mediaFeatureFlags';
|
|
5
|
+
export { getMediaFeatureFlag, defaultMediaFeatureFlags, areEqualFeatureFlags, useMemoizeFeatureFlags, filterFeatureFlagNames, filterFeatureFlagKeysAllProducts } from './mediaFeatureFlags';
|
|
6
6
|
// Analytics context
|
|
7
7
|
export { withMediaAnalyticsContext } from './analytics/withMediaAnalyticsContext'; // Analytics constants
|
|
8
8
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { getMediaFeatureFlag, useMemoizeFeatureFlags, defaultMediaFeatureFlags, areEqualFeatureFlags, filterFeatureFlagNames, filterFeatureFlagKeysAllProducts } from './mediaFeatureFlags';
|
|
@@ -1,8 +1,91 @@
|
|
|
1
1
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
2
|
import { useRef } from 'react';
|
|
3
|
-
import { getLocalMediaFeatureFlag } from '
|
|
3
|
+
import { getLocalMediaFeatureFlag } from '../mediaFeatureFlag-local';
|
|
4
|
+
export var areEqualFeatureFlags = function areEqualFeatureFlags(ffA, ffB) {
|
|
5
|
+
if (!ffA && !ffB) {
|
|
6
|
+
return true;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
if (!ffA || !ffB) {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
var results = {
|
|
14
|
+
newCardExperience: ffA.newCardExperience === ffB.newCardExperience,
|
|
15
|
+
captions: ffA.captions === ffB.captions,
|
|
16
|
+
mediaInline: ffA.mediaInline === ffB.mediaInline,
|
|
17
|
+
folderUploads: ffA.folderUploads === ffB.folderUploads,
|
|
18
|
+
timestampOnVideo: ffA.timestampOnVideo === ffB.timestampOnVideo,
|
|
19
|
+
observedWidth: ffA.observedWidth === ffB.observedWidth
|
|
20
|
+
};
|
|
21
|
+
return Object.values(results).every(function (result) {
|
|
22
|
+
return result;
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
export var filterFeatureFlagNames = function filterFeatureFlagNames(flags) {
|
|
26
|
+
var pairs = Object.entries(flags);
|
|
27
|
+
return pairs.filter(function (_ref) {
|
|
28
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
29
|
+
_key = _ref2[0],
|
|
30
|
+
value = _ref2[1];
|
|
31
|
+
|
|
32
|
+
return !!value;
|
|
33
|
+
}).map(function (_ref3) {
|
|
34
|
+
var _ref4 = _slicedToArray(_ref3, 1),
|
|
35
|
+
key = _ref4[0];
|
|
36
|
+
|
|
37
|
+
return key;
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Takes a record of {Media Feature Flag Names → boolean} and a supported product name.
|
|
42
|
+
* Returns the corresponding product’s Launch Darkly Keys for each of the flags set as true in the input record.
|
|
43
|
+
* */
|
|
44
|
+
|
|
45
|
+
export var mapAndFilterFeatureFlagNames = function mapAndFilterFeatureFlagNames(flags, product) {
|
|
46
|
+
var mediaFeatureFlags = filterFeatureFlagNames(flags);
|
|
47
|
+
return mediaFeatureFlags.map(function (key) {
|
|
48
|
+
return mediaFeatureFlagsProductToLaunchDarklyMap[product][key];
|
|
49
|
+
});
|
|
50
|
+
}; // TODO(MEX-1547): This is temporary solution to just return the launch darkly feature flags for all products.
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Takes a record of {Media Feature Flag Names → boolean}.
|
|
54
|
+
* Returns the Launch Darkly Keys from all products for each of the flags set as true in the input record.
|
|
55
|
+
* */
|
|
56
|
+
|
|
57
|
+
export var filterFeatureFlagKeysAllProducts = function filterFeatureFlagKeysAllProducts(flags) {
|
|
58
|
+
var filteredFlags = filterFeatureFlagNames(flags);
|
|
59
|
+
var supportedProducts = Object.keys(mediaFeatureFlagsProductToLaunchDarklyMap);
|
|
60
|
+
var ldFeatureFlags = [];
|
|
61
|
+
filteredFlags.forEach(function (flag) {
|
|
62
|
+
return supportedProducts.forEach(function (product) {
|
|
63
|
+
return ldFeatureFlags.push(mediaFeatureFlagsProductToLaunchDarklyMap[product][flag]);
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
return ldFeatureFlags.filter(function (flag) {
|
|
67
|
+
return flag !== '';
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
export var mediaFeatureFlagsProductToLaunchDarklyMap = {
|
|
71
|
+
confluence: {
|
|
72
|
+
newCardExperience: 'confluence.media.cards.new.experience',
|
|
73
|
+
captions: 'confluence.frontend.fabric.editor.media.captions',
|
|
74
|
+
mediaInline: 'confluence.frontend.fabric.editor.media.inline',
|
|
75
|
+
folderUploads: 'confluence.media.picker.folder.uploads',
|
|
76
|
+
timestampOnVideo: '',
|
|
77
|
+
observedWidth: ''
|
|
78
|
+
},
|
|
79
|
+
jira: {
|
|
80
|
+
newCardExperience: 'issue.details.media-cards-new-experience',
|
|
81
|
+
captions: 'issue.details.editor.media.captions',
|
|
82
|
+
mediaInline: '',
|
|
83
|
+
folderUploads: '',
|
|
84
|
+
timestampOnVideo: '',
|
|
85
|
+
observedWidth: ''
|
|
86
|
+
}
|
|
87
|
+
}; // default values defined here, not necessary for components to know directly as they should use the function below
|
|
4
88
|
|
|
5
|
-
// default values defined here, not necessary for components to know directly as they should use the function below
|
|
6
89
|
export var defaultMediaFeatureFlags = {
|
|
7
90
|
newCardExperience: false,
|
|
8
91
|
captions: false,
|
|
@@ -50,29 +133,7 @@ Object.keys(defaultMediaFeatureFlags).forEach(function (flagName) {
|
|
|
50
133
|
// eslint-disable-next-line no-console
|
|
51
134
|
console.info("%c* LOCAL * MediaFeatureFlag.".concat(flagName, " = ").concat(localOverride), 'font-weight:bold;color:cyan');
|
|
52
135
|
}
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
export var areEqualFeatureFlags = function areEqualFeatureFlags(ffA, ffB) {
|
|
56
|
-
if (!ffA && !ffB) {
|
|
57
|
-
return true;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
if (!ffA || !ffB) {
|
|
61
|
-
return false;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
var results = {
|
|
65
|
-
newCardExperience: ffA.newCardExperience === ffB.newCardExperience,
|
|
66
|
-
captions: ffA.captions === ffB.captions,
|
|
67
|
-
mediaInline: ffA.mediaInline === ffB.mediaInline,
|
|
68
|
-
folderUploads: ffA.folderUploads === ffB.folderUploads,
|
|
69
|
-
timestampOnVideo: ffA.timestampOnVideo === ffB.timestampOnVideo,
|
|
70
|
-
observedWidth: ffA.observedWidth === ffB.observedWidth
|
|
71
|
-
};
|
|
72
|
-
return Object.values(results).every(function (result) {
|
|
73
|
-
return result;
|
|
74
|
-
});
|
|
75
|
-
};
|
|
136
|
+
});
|
|
76
137
|
export var useMemoizeFeatureFlags = function useMemoizeFeatureFlags(featureFlags) {
|
|
77
138
|
var ref = useRef();
|
|
78
139
|
|
|
@@ -81,19 +142,4 @@ export var useMemoizeFeatureFlags = function useMemoizeFeatureFlags(featureFlags
|
|
|
81
142
|
}
|
|
82
143
|
|
|
83
144
|
return ref.current;
|
|
84
|
-
};
|
|
85
|
-
export var filterFeatureFlagNames = function filterFeatureFlagNames(flags) {
|
|
86
|
-
var pairs = Object.entries(flags);
|
|
87
|
-
return pairs.filter(function (_ref) {
|
|
88
|
-
var _ref2 = _slicedToArray(_ref, 2),
|
|
89
|
-
_key = _ref2[0],
|
|
90
|
-
value = _ref2[1];
|
|
91
|
-
|
|
92
|
-
return !!value;
|
|
93
|
-
}).map(function (_ref3) {
|
|
94
|
-
var _ref4 = _slicedToArray(_ref3, 1),
|
|
95
|
-
key = _ref4[0];
|
|
96
|
-
|
|
97
|
-
return key;
|
|
98
|
-
});
|
|
99
145
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/esm/version.json
CHANGED
package/dist/types/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
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, areEqualFeatureFlags, useMemoizeFeatureFlags, filterFeatureFlagNames, } from './mediaFeatureFlags';
|
|
5
|
-
export type { MediaFeatureFlags, WithMediaFeatureFlags,
|
|
4
|
+
export { getMediaFeatureFlag, defaultMediaFeatureFlags, areEqualFeatureFlags, useMemoizeFeatureFlags, filterFeatureFlagNames, filterFeatureFlagKeysAllProducts, } from './mediaFeatureFlags';
|
|
5
|
+
export type { MediaFeatureFlags, WithMediaFeatureFlags, } from './mediaFeatureFlags';
|
|
6
6
|
export interface NumericalCardDimensions {
|
|
7
7
|
width: number;
|
|
8
8
|
height: number;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { getMediaFeatureFlag, useMemoizeFeatureFlags, defaultMediaFeatureFlags, areEqualFeatureFlags, filterFeatureFlagNames, filterFeatureFlagKeysAllProducts, } from './mediaFeatureFlags';
|
|
2
|
+
export type { MediaFeatureFlags, WithMediaFeatureFlags, SupportedProduct, } from './types';
|
|
@@ -1,14 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
import { RequiredMediaFeatureFlags, MediaFeatureFlags, MediaFeatureFlagsMap, SupportedProduct } from './types';
|
|
2
|
+
export declare const areEqualFeatureFlags: (ffA?: MediaFeatureFlags | undefined, ffB?: MediaFeatureFlags | undefined) => boolean;
|
|
3
|
+
export declare const filterFeatureFlagNames: (flags: RequiredMediaFeatureFlags) => Array<keyof MediaFeatureFlags>;
|
|
4
|
+
/**
|
|
5
|
+
* Takes a record of {Media Feature Flag Names → boolean} and a supported product name.
|
|
6
|
+
* Returns the corresponding product’s Launch Darkly Keys for each of the flags set as true in the input record.
|
|
7
|
+
* */
|
|
8
|
+
export declare const mapAndFilterFeatureFlagNames: (flags: RequiredMediaFeatureFlags, product: SupportedProduct) => Array<string>;
|
|
9
|
+
/**
|
|
10
|
+
* Takes a record of {Media Feature Flag Names → boolean}.
|
|
11
|
+
* Returns the Launch Darkly Keys from all products for each of the flags set as true in the input record.
|
|
12
|
+
* */
|
|
13
|
+
export declare const filterFeatureFlagKeysAllProducts: (flags: RequiredMediaFeatureFlags) => Array<string>;
|
|
14
|
+
export declare const mediaFeatureFlagsProductToLaunchDarklyMap: Record<SupportedProduct, MediaFeatureFlagsMap>;
|
|
12
15
|
export declare const defaultMediaFeatureFlags: Required<MediaFeatureFlags>;
|
|
13
16
|
/**
|
|
14
17
|
* Public accessor from components to fallback to defaults if flags not passed,
|
|
@@ -21,7 +24,4 @@ export declare const defaultMediaFeatureFlags: Required<MediaFeatureFlags>;
|
|
|
21
24
|
* (you will see a warning in console if override used)
|
|
22
25
|
* */
|
|
23
26
|
export declare function getMediaFeatureFlag<T = boolean>(flagName: keyof MediaFeatureFlags, featureFlags?: MediaFeatureFlags): T;
|
|
24
|
-
export declare type RequiredMediaFeatureFlags = Record<keyof Required<MediaFeatureFlags>, boolean>;
|
|
25
|
-
export declare const areEqualFeatureFlags: (ffA?: MediaFeatureFlags | undefined, ffB?: MediaFeatureFlags | undefined) => boolean;
|
|
26
27
|
export declare const useMemoizeFeatureFlags: (featureFlags?: MediaFeatureFlags | undefined) => MediaFeatureFlags | undefined;
|
|
27
|
-
export declare const filterFeatureFlagNames: (flags: RequiredMediaFeatureFlags) => Array<keyof MediaFeatureFlags>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface MediaFeatureFlags {
|
|
2
|
+
newCardExperience?: boolean;
|
|
3
|
+
captions?: boolean;
|
|
4
|
+
mediaInline?: boolean;
|
|
5
|
+
folderUploads?: boolean;
|
|
6
|
+
timestampOnVideo?: boolean;
|
|
7
|
+
observedWidth?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface WithMediaFeatureFlags {
|
|
10
|
+
featureFlags?: MediaFeatureFlags;
|
|
11
|
+
}
|
|
12
|
+
export declare type RequiredMediaFeatureFlags = Record<keyof Required<MediaFeatureFlags>, boolean>;
|
|
13
|
+
export declare type MediaFeatureFlagsMap = Record<keyof Required<MediaFeatureFlags>, string>;
|
|
14
|
+
export declare type SupportedProduct = 'confluence' | 'jira';
|
package/downloadUrl/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/media-common/mediaFeatureFlags",
|
|
3
|
-
"main": "../dist/cjs/mediaFeatureFlags.js",
|
|
4
|
-
"module": "../dist/esm/mediaFeatureFlags.js",
|
|
5
|
-
"module:es2019": "../dist/es2019/mediaFeatureFlags.js",
|
|
6
|
-
"
|
|
3
|
+
"main": "../dist/cjs/mediaFeatureFlags/index.js",
|
|
4
|
+
"module": "../dist/esm/mediaFeatureFlags/index.js",
|
|
5
|
+
"module:es2019": "../dist/es2019/mediaFeatureFlags/index.js",
|
|
6
|
+
"sideEffects": false,
|
|
7
|
+
"types": "../dist/types/mediaFeatureFlags/index.d.ts"
|
|
7
8
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/media-common",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.13.0",
|
|
4
4
|
"description": "Includes common utilities used by other media packages",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"registry": "https://registry.npmjs.org/"
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"atlaskit:src": "src/index.ts",
|
|
17
17
|
"af:exports": {
|
|
18
18
|
"./downloadUrl": "./src/downloadUrl.ts",
|
|
19
|
-
"./mediaFeatureFlags": "./src/mediaFeatureFlags.ts",
|
|
19
|
+
"./mediaFeatureFlags": "./src/mediaFeatureFlags/index.ts",
|
|
20
20
|
"./analytics": "./src/analytics/index.ts",
|
|
21
21
|
"./docs": "./src/docs/index.ts",
|
|
22
22
|
"./mediaTypeUtils": "./src/mediaTypeUtils/index.ts",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@atlaskit/docs": "*",
|
|
47
|
-
"@atlaskit/media-test-helpers": "^
|
|
47
|
+
"@atlaskit/media-test-helpers": "^30.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
50
|
"react": "^16.8.0",
|