@bundle-stats/ui 4.0.0-rc.6 → 4.0.0-rc.7

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 (29) hide show
  1. package/lib/components/bundle-assets/bundle-assets.js +64 -49
  2. package/lib/components/bundle-modules/bundle-modules.js +94 -79
  3. package/lib/components/bundle-packages/bundle-packages.js +60 -45
  4. package/lib/components/metrics-table-title/metrics-table-title.js +10 -7
  5. package/lib/components/metrics-table-title/metrics-table-title.module.css +9 -3
  6. package/lib/ui/filters/filters.js +5 -7
  7. package/lib/ui/filters/filters.utils.js +40 -2
  8. package/lib/ui/filters/index.js +96 -3
  9. package/lib-esm/components/bundle-assets/bundle-assets.js +63 -50
  10. package/lib-esm/components/bundle-modules/bundle-modules.js +78 -64
  11. package/lib-esm/components/bundle-packages/bundle-packages.js +44 -31
  12. package/lib-esm/components/metrics-table-title/metrics-table-title.js +10 -7
  13. package/lib-esm/components/metrics-table-title/metrics-table-title.module.css +9 -3
  14. package/lib-esm/ui/filters/filters.js +3 -4
  15. package/lib-esm/ui/filters/filters.utils.js +18 -0
  16. package/lib-esm/ui/filters/index.js +65 -3
  17. package/package.json +4 -4
  18. package/src/components/bundle-assets/bundle-assets.jsx +54 -45
  19. package/src/components/bundle-modules/bundle-modules.jsx +72 -65
  20. package/src/components/bundle-packages/bundle-packages.jsx +36 -26
  21. package/src/components/metrics-table-title/metrics-table-title.jsx +20 -18
  22. package/src/components/metrics-table-title/metrics-table-title.module.css +9 -3
  23. package/src/ui/filters/filters.jsx +4 -4
  24. package/src/ui/filters/filters.utils.js +21 -0
  25. package/src/ui/filters/index.jsx +72 -0
  26. package/lib/ui/filters/filters.container.js +0 -187
  27. package/lib-esm/ui/filters/filters.container.js +0 -111
  28. package/src/ui/filters/filters.container.jsx +0 -108
  29. package/src/ui/filters/index.js +0 -4
@@ -102,17 +102,45 @@ var getFileTypeFilters = function getFileTypeFilters(filters) {
102
102
  }, {});
103
103
  };
104
104
 
105
- var TooltipNotPredictive = function TooltipNotPredictive(_ref4) {
106
- var runs = _ref4.runs;
105
+ var getFilters = function getFilters(_ref4) {
106
+ var _ASSET_ENTRY_TYPE, _ref5;
107
+
108
+ var compareMode = _ref4.compareMode,
109
+ filters = _ref4.filters;
110
+ return _ref5 = {}, _defineProperty(_ref5, _utils.ASSET_FILTERS.CHANGED, {
111
+ label: 'Changed',
112
+ defaultValue: filters[_utils.ASSET_FILTERS.CHANGED],
113
+ disabled: !compareMode
114
+ }), _defineProperty(_ref5, _utils.ASSET_ENTRY_TYPE, (_ASSET_ENTRY_TYPE = {
115
+ label: 'Entry type'
116
+ }, _defineProperty(_ASSET_ENTRY_TYPE, _utils.ASSET_FILTERS.ENTRY, {
117
+ label: 'Entry',
118
+ defaultValue: (0, _get2["default"])(filters, "".concat(_utils.ASSET_ENTRY_TYPE, ".").concat(_utils.ASSET_FILTERS.ENTRY), true)
119
+ }), _defineProperty(_ASSET_ENTRY_TYPE, _utils.ASSET_FILTERS.INITIAL, {
120
+ label: 'Initial',
121
+ defaultValue: (0, _get2["default"])(filters, "".concat(_utils.ASSET_ENTRY_TYPE, ".").concat(_utils.ASSET_FILTERS.INITIAL), true)
122
+ }), _defineProperty(_ASSET_ENTRY_TYPE, _utils.ASSET_FILTERS.CHUNK, {
123
+ label: 'Chunk',
124
+ defaultValue: (0, _get2["default"])(filters, "".concat(_utils.ASSET_ENTRY_TYPE, ".").concat(_utils.ASSET_FILTERS.CHUNK), true)
125
+ }), _defineProperty(_ASSET_ENTRY_TYPE, _utils.ASSET_FILTERS.ASSET, {
126
+ label: 'Asset',
127
+ defaultValue: (0, _get2["default"])(filters, "".concat(_utils.ASSET_ENTRY_TYPE, ".").concat(_utils.ASSET_FILTERS.ASSET), true)
128
+ }), _ASSET_ENTRY_TYPE)), _defineProperty(_ref5, _utils.ASSET_FILE_TYPE, _objectSpread({
129
+ label: 'File type'
130
+ }, getFileTypeFilters(filters))), _ref5;
131
+ };
132
+
133
+ var TooltipNotPredictive = function TooltipNotPredictive(_ref6) {
134
+ var runs = _ref6.runs;
107
135
  return /*#__PURE__*/_react["default"].createElement("div", {
108
136
  className: _bundleAssetsModule["default"].tooltipNotPredictive
109
137
  }, /*#__PURE__*/_react["default"].createElement("p", {
110
138
  className: _bundleAssetsModule["default"].tooltipNotPredictiveText
111
139
  }, "File name is the same, but the size has changed:"), /*#__PURE__*/_react["default"].createElement("table", {
112
140
  className: _bundleAssetsModule["default"].tooltipTable
113
- }, /*#__PURE__*/_react["default"].createElement("tr", null, runs.map(function (_ref5, index) {
114
- var name = _ref5.name,
115
- value = _ref5.value;
141
+ }, /*#__PURE__*/_react["default"].createElement("tr", null, runs.map(function (_ref7, index) {
142
+ var name = _ref7.name,
143
+ value = _ref7.value;
116
144
  var key = index;
117
145
  return /*#__PURE__*/_react["default"].createElement("tr", {
118
146
  key: key
@@ -128,11 +156,11 @@ TooltipNotPredictive.propTypes = {
128
156
 
129
157
  };
130
158
 
131
- var RowHeader = function RowHeader(_ref6) {
132
- var row = _ref6.row,
133
- labels = _ref6.labels,
134
- chunks = _ref6.chunks,
135
- CustomComponentLink = _ref6.CustomComponentLink;
159
+ var RowHeader = function RowHeader(_ref8) {
160
+ var row = _ref8.row,
161
+ labels = _ref8.labels,
162
+ chunks = _ref8.chunks,
163
+ CustomComponentLink = _ref8.CustomComponentLink;
136
164
  var label = row.label,
137
165
  isNotPredictive = row.isNotPredictive,
138
166
  runs = row.runs,
@@ -221,8 +249,6 @@ RowHeader.defaultProps = {
221
249
  };
222
250
 
223
251
  var BundleAssets = function BundleAssets(props) {
224
- var _ASSET_ENTRY_TYPE, _ref8;
225
-
226
252
  var className = props.className,
227
253
  jobs = props.jobs,
228
254
  items = props.items,
@@ -238,14 +264,20 @@ var BundleAssets = function BundleAssets(props) {
238
264
  search = props.search,
239
265
  updateSearch = props.updateSearch,
240
266
  CustomComponentLink = props.customComponentLink;
241
-
242
- var emptyMessage = /*#__PURE__*/_react["default"].createElement(_emptySet.EmptySet, {
243
- resources: "assets",
244
- filtered: totalRowCount !== 0,
245
- handleResetFilters: resetFilters,
246
- handleViewAll: resetAllFilters
247
- });
248
-
267
+ var dropdownFilters = (0, _react.useMemo)(function () {
268
+ return getFilters({
269
+ compareMode: (jobs === null || jobs === void 0 ? void 0 : jobs.length) > 1,
270
+ filters: filters
271
+ });
272
+ }, [jobs, filters]);
273
+ var metricsTableTitle = (0, _react.useMemo)(function () {
274
+ return /*#__PURE__*/_react["default"].createElement(_metricsTableTitle.MetricsTableTitle, {
275
+ title: _i18n["default"].ASSETS,
276
+ info: "".concat(items.length, "/").concat(totalRowCount),
277
+ popoverInfo: _i18n["default"].ASSETS_INFO,
278
+ popoverHref: _config["default"].documentation.assets
279
+ });
280
+ }, [items, totalRowCount]);
249
281
  var renderRowHeader = (0, _react.useCallback)(function (row) {
250
282
  var _jobs$, _jobs$$meta, _jobs$$meta$webpack;
251
283
 
@@ -256,12 +288,20 @@ var BundleAssets = function BundleAssets(props) {
256
288
  CustomComponentLink: CustomComponentLink
257
289
  });
258
290
  }, [jobs, CustomComponentLink]);
291
+ var emptyMessage = (0, _react.useMemo)(function () {
292
+ return /*#__PURE__*/_react["default"].createElement(_emptySet.EmptySet, {
293
+ resources: "assets",
294
+ filtered: totalRowCount !== 0,
295
+ handleResetFilters: resetFilters,
296
+ handleViewAll: resetAllFilters
297
+ });
298
+ }, [totalRowCount, resetFilters, resetAllFilters]);
259
299
  return /*#__PURE__*/_react["default"].createElement("section", {
260
300
  className: (0, _classnames["default"])(_bundleAssetsModule["default"].root, className)
261
301
  }, /*#__PURE__*/_react["default"].createElement(_toolbar.Toolbar, {
262
302
  className: _bundleAssetsModule["default"].toolbar,
263
- renderActions: function renderActions(_ref7) {
264
- var actionClassName = _ref7.actionClassName;
303
+ renderActions: function renderActions(_ref9) {
304
+ var actionClassName = _ref9.actionClassName;
265
305
  return /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
266
306
  space: "xxsmall",
267
307
  className: (0, _classnames["default"])(_bundleAssetsModule["default"].dropdown, actionClassName)
@@ -283,27 +323,7 @@ var BundleAssets = function BundleAssets(props) {
283
323
  updateSearch: updateSearch
284
324
  }), /*#__PURE__*/_react["default"].createElement(_filters.Filters, {
285
325
  className: _bundleAssetsModule["default"].toolbarFilters,
286
- filters: (_ref8 = {}, _defineProperty(_ref8, _utils.ASSET_FILTERS.CHANGED, {
287
- label: 'Changed',
288
- defaultValue: filters[_utils.ASSET_FILTERS.CHANGED],
289
- disabled: jobs.length <= 1
290
- }), _defineProperty(_ref8, _utils.ASSET_ENTRY_TYPE, (_ASSET_ENTRY_TYPE = {
291
- label: 'Entry type'
292
- }, _defineProperty(_ASSET_ENTRY_TYPE, _utils.ASSET_FILTERS.ENTRY, {
293
- label: 'Entry',
294
- defaultValue: (0, _get2["default"])(filters, "".concat(_utils.ASSET_ENTRY_TYPE, ".").concat(_utils.ASSET_FILTERS.ENTRY), true)
295
- }), _defineProperty(_ASSET_ENTRY_TYPE, _utils.ASSET_FILTERS.INITIAL, {
296
- label: 'Initial',
297
- defaultValue: (0, _get2["default"])(filters, "".concat(_utils.ASSET_ENTRY_TYPE, ".").concat(_utils.ASSET_FILTERS.INITIAL), true)
298
- }), _defineProperty(_ASSET_ENTRY_TYPE, _utils.ASSET_FILTERS.CHUNK, {
299
- label: 'Chunk',
300
- defaultValue: (0, _get2["default"])(filters, "".concat(_utils.ASSET_ENTRY_TYPE, ".").concat(_utils.ASSET_FILTERS.CHUNK), true)
301
- }), _defineProperty(_ASSET_ENTRY_TYPE, _utils.ASSET_FILTERS.ASSET, {
302
- label: 'Asset',
303
- defaultValue: (0, _get2["default"])(filters, "".concat(_utils.ASSET_ENTRY_TYPE, ".").concat(_utils.ASSET_FILTERS.ASSET), true)
304
- }), _ASSET_ENTRY_TYPE)), _defineProperty(_ref8, _utils.ASSET_FILE_TYPE, _objectSpread({
305
- label: 'File type'
306
- }, getFileTypeFilters(filters))), _ref8),
326
+ filters: dropdownFilters,
307
327
  hasActiveFilters: hasActiveFilters,
308
328
  onChange: updateFilters
309
329
  }))), /*#__PURE__*/_react["default"].createElement("main", null, /*#__PURE__*/_react["default"].createElement(_metricsTable.MetricsTable, {
@@ -312,12 +332,7 @@ var BundleAssets = function BundleAssets(props) {
312
332
  renderRowHeader: renderRowHeader,
313
333
  emptyMessage: emptyMessage,
314
334
  showHeaderSum: true,
315
- title: /*#__PURE__*/_react["default"].createElement(_metricsTableTitle.MetricsTableTitle, {
316
- title: _i18n["default"].ASSETS,
317
- info: "(".concat(items.length, "/").concat(totalRowCount, ")"),
318
- popoverInfo: _i18n["default"].ASSETS_INFO,
319
- popoverHref: _config["default"].documentation.assets
320
- })
335
+ title: metricsTableTitle
321
336
  })));
322
337
  };
323
338
 
@@ -63,12 +63,6 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
63
63
 
64
64
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
65
65
 
66
- 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; }
67
-
68
- 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; }
69
-
70
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
71
-
72
66
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
73
67
 
74
68
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -81,11 +75,57 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
81
75
 
82
76
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
83
77
 
84
- var RowHeader = function RowHeader(_ref) {
85
- var row = _ref.row,
86
- chunks = _ref.chunks,
87
- labels = _ref.labels,
88
- CustomComponentLink = _ref.CustomComponentLink;
78
+ 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; }
79
+
80
+ 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; }
81
+
82
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
83
+
84
+ var getFilters = function getFilters(_ref) {
85
+ var _MODULE_SOURCE_TYPE, _objectSpread2;
86
+
87
+ var filters = _ref.filters,
88
+ compareMode = _ref.compareMode,
89
+ chunks = _ref.chunks;
90
+ return _objectSpread(_objectSpread((_objectSpread2 = {}, _defineProperty(_objectSpread2, _utils.MODULE_FILTERS.CHANGED, {
91
+ label: 'Changed',
92
+ defaultValue: filters.changed,
93
+ disabled: !compareMode
94
+ }), _defineProperty(_objectSpread2, _utils.MODULE_FILTERS.DUPLICATED, {
95
+ label: 'Duplicate',
96
+ defaultValue: filters[_utils.MODULE_FILTERS.DUPLICATED]
97
+ }), _defineProperty(_objectSpread2, _utils.MODULE_SOURCE_TYPE, (_MODULE_SOURCE_TYPE = {
98
+ label: 'Source'
99
+ }, _defineProperty(_MODULE_SOURCE_TYPE, _utils.MODULE_FILTERS.FIRST_PARTY, {
100
+ label: 'First party',
101
+ defaultValue: (0, _get2["default"])(filters, "".concat(_utils.MODULE_SOURCE_TYPE, ".").concat(_utils.MODULE_FILTERS.FIRST_PARTY), true)
102
+ }), _defineProperty(_MODULE_SOURCE_TYPE, _utils.MODULE_FILTERS.THIRD_PARTY, {
103
+ label: 'Third party',
104
+ defaultValue: (0, _get2["default"])(filters, "".concat(_utils.MODULE_SOURCE_TYPE, ".").concat(_utils.MODULE_FILTERS.THIRD_PARTY), true)
105
+ }), _MODULE_SOURCE_TYPE)), _objectSpread2), !(0, _isEmpty2["default"])(chunks) && _defineProperty({}, _utils.MODULE_CHUNK, _objectSpread({
106
+ label: 'Chunk'
107
+ }, chunks.reduce(function (chunkFilters, _ref2) {
108
+ var id = _ref2.id,
109
+ name = _ref2.name;
110
+ return _objectSpread(_objectSpread({}, chunkFilters), {}, _defineProperty({}, id, {
111
+ label: name,
112
+ defaultValue: (0, _get2["default"])(filters, "".concat(_utils.MODULE_CHUNK, ".").concat(id), true)
113
+ }));
114
+ }, {})))), {}, _defineProperty({}, _utils.MODULE_FILE_TYPE, _objectSpread({
115
+ label: 'File type'
116
+ }, _utils.MODULE_SOURCE_FILE_TYPES.reduce(function (agg, fileType) {
117
+ return _objectSpread(_objectSpread({}, agg), {}, _defineProperty({}, fileType, {
118
+ label: _utils.FILE_TYPE_LABELS[fileType],
119
+ defaultValue: (0, _get2["default"])(filters, "".concat(_utils.MODULE_FILE_TYPE, ".").concat(fileType), true)
120
+ }));
121
+ }, {}))));
122
+ };
123
+
124
+ var RowHeader = function RowHeader(_ref4) {
125
+ var row = _ref4.row,
126
+ chunks = _ref4.chunks,
127
+ labels = _ref4.labels,
128
+ CustomComponentLink = _ref4.CustomComponentLink;
89
129
  var chunkIds = (0, _map2["default"])(chunks, 'id');
90
130
 
91
131
  var _useState = (0, _react.useState)(false),
@@ -143,26 +183,39 @@ RowHeader.defaultProps = {
143
183
  chunks: []
144
184
  };
145
185
 
146
- var BundleModules = function BundleModules(_ref2) {
147
- var _MODULE_SOURCE_TYPE, _objectSpread2;
148
-
149
- var className = _ref2.className,
150
- jobs = _ref2.jobs,
151
- items = _ref2.items,
152
- chunks = _ref2.chunks,
153
- totalRowCount = _ref2.totalRowCount,
154
- updateFilters = _ref2.updateFilters,
155
- resetFilters = _ref2.resetFilters,
156
- resetAllFilters = _ref2.resetAllFilters,
157
- filters = _ref2.filters,
158
- sortFields = _ref2.sortFields,
159
- sort = _ref2.sort,
160
- updateSort = _ref2.updateSort,
161
- search = _ref2.search,
162
- updateSearch = _ref2.updateSearch,
163
- hasActiveFilters = _ref2.hasActiveFilters,
164
- CustomComponentLink = _ref2.customComponentLink;
186
+ var BundleModules = function BundleModules(_ref5) {
187
+ var className = _ref5.className,
188
+ jobs = _ref5.jobs,
189
+ items = _ref5.items,
190
+ chunks = _ref5.chunks,
191
+ totalRowCount = _ref5.totalRowCount,
192
+ updateFilters = _ref5.updateFilters,
193
+ resetFilters = _ref5.resetFilters,
194
+ resetAllFilters = _ref5.resetAllFilters,
195
+ filters = _ref5.filters,
196
+ sortFields = _ref5.sortFields,
197
+ sort = _ref5.sort,
198
+ updateSort = _ref5.updateSort,
199
+ search = _ref5.search,
200
+ updateSearch = _ref5.updateSearch,
201
+ hasActiveFilters = _ref5.hasActiveFilters,
202
+ CustomComponentLink = _ref5.customComponentLink;
165
203
  var rootClassName = (0, _classnames["default"])(_bundleModulesModule["default"].root, className);
204
+ var dropdownFilters = (0, _react.useMemo)(function () {
205
+ return getFilters({
206
+ filters: filters,
207
+ chunks: chunks,
208
+ compareMode: jobs.length > 1
209
+ });
210
+ }, [jobs, filters, chunks]);
211
+ var metricsTableTitle = (0, _react.useMemo)(function () {
212
+ return /*#__PURE__*/_react["default"].createElement(_metricsTableTitle.MetricsTableTitle, {
213
+ title: _i18n["default"].MODULES,
214
+ info: "".concat(items.length, "/").concat(totalRowCount),
215
+ popoverInfo: _i18n["default"].MODULES_INFO,
216
+ popoverHref: _config["default"].documentation.modules
217
+ });
218
+ }, [items, totalRowCount]);
166
219
  var renderRowHeader = (0, _react.useCallback)(function (row) {
167
220
  return /*#__PURE__*/_react["default"].createElement(RowHeader, {
168
221
  row: row,
@@ -171,53 +224,20 @@ var BundleModules = function BundleModules(_ref2) {
171
224
  CustomComponentLink: CustomComponentLink
172
225
  });
173
226
  }, [jobs, chunks, CustomComponentLink]);
174
-
175
- var emptyMessage = /*#__PURE__*/_react["default"].createElement(_emptySet.EmptySet, {
176
- resources: "modules",
177
- filtered: totalRowCount !== 0,
178
- handleResetFilters: resetFilters,
179
- handleViewAll: resetAllFilters
180
- });
181
-
182
- var dropdownFilters = _objectSpread(_objectSpread((_objectSpread2 = {}, _defineProperty(_objectSpread2, _utils.MODULE_FILTERS.CHANGED, {
183
- label: 'Changed',
184
- defaultValue: filters.changed,
185
- disabled: jobs.length <= 1
186
- }), _defineProperty(_objectSpread2, _utils.MODULE_FILTERS.DUPLICATED, {
187
- label: 'Duplicate',
188
- defaultValue: filters[_utils.MODULE_FILTERS.DUPLICATED]
189
- }), _defineProperty(_objectSpread2, _utils.MODULE_SOURCE_TYPE, (_MODULE_SOURCE_TYPE = {
190
- label: 'Source'
191
- }, _defineProperty(_MODULE_SOURCE_TYPE, _utils.MODULE_FILTERS.FIRST_PARTY, {
192
- label: 'First party',
193
- defaultValue: (0, _get2["default"])(filters, "".concat(_utils.MODULE_SOURCE_TYPE, ".").concat(_utils.MODULE_FILTERS.FIRST_PARTY), true)
194
- }), _defineProperty(_MODULE_SOURCE_TYPE, _utils.MODULE_FILTERS.THIRD_PARTY, {
195
- label: 'Third party',
196
- defaultValue: (0, _get2["default"])(filters, "".concat(_utils.MODULE_SOURCE_TYPE, ".").concat(_utils.MODULE_FILTERS.THIRD_PARTY), true)
197
- }), _MODULE_SOURCE_TYPE)), _objectSpread2), !(0, _isEmpty2["default"])(chunks) && _defineProperty({}, _utils.MODULE_CHUNK, _objectSpread({
198
- label: 'Chunk'
199
- }, chunks.reduce(function (chunkFilters, _ref3) {
200
- var id = _ref3.id,
201
- name = _ref3.name;
202
- return _objectSpread(_objectSpread({}, chunkFilters), {}, _defineProperty({}, id, {
203
- label: name,
204
- defaultValue: (0, _get2["default"])(filters, "".concat(_utils.MODULE_CHUNK, ".").concat(id), true)
205
- }));
206
- }, {})))), {}, _defineProperty({}, _utils.MODULE_FILE_TYPE, _objectSpread({
207
- label: 'File type'
208
- }, _utils.MODULE_SOURCE_FILE_TYPES.reduce(function (agg, fileType) {
209
- return _objectSpread(_objectSpread({}, agg), {}, _defineProperty({}, fileType, {
210
- label: _utils.FILE_TYPE_LABELS[fileType],
211
- defaultValue: (0, _get2["default"])(filters, "".concat(_utils.MODULE_FILE_TYPE, ".").concat(fileType), true)
212
- }));
213
- }, {}))));
214
-
227
+ var emptyMessage = (0, _react.useMemo)(function () {
228
+ return /*#__PURE__*/_react["default"].createElement(_emptySet.EmptySet, {
229
+ resources: "modules",
230
+ filtered: totalRowCount !== 0,
231
+ handleResetFilters: resetFilters,
232
+ handleViewAll: resetAllFilters
233
+ });
234
+ }, [totalRowCount, resetFilters, resetAllFilters]);
215
235
  return /*#__PURE__*/_react["default"].createElement("div", {
216
236
  className: rootClassName
217
237
  }, /*#__PURE__*/_react["default"].createElement(_toolbar.Toolbar, {
218
238
  className: _bundleModulesModule["default"].toolbar,
219
- renderActions: function renderActions(_ref5) {
220
- var actionClassName = _ref5.actionClassName;
239
+ renderActions: function renderActions(_ref6) {
240
+ var actionClassName = _ref6.actionClassName;
221
241
  return /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
222
242
  space: "xxsmall",
223
243
  className: (0, _classnames["default"])(_bundleModulesModule["default"].dropdown, actionClassName)
@@ -249,12 +269,7 @@ var BundleModules = function BundleModules(_ref2) {
249
269
  renderRowHeader: renderRowHeader,
250
270
  emptyMessage: emptyMessage,
251
271
  showHeaderSum: true,
252
- title: /*#__PURE__*/_react["default"].createElement(_metricsTableTitle.MetricsTableTitle, {
253
- title: _i18n["default"].MODULES,
254
- info: "(".concat(items.length, "/").concat(totalRowCount, ")"),
255
- popoverInfo: _i18n["default"].MODULES_INFO,
256
- popoverHref: _config["default"].documentation.modules
257
- })
272
+ title: metricsTableTitle
258
273
  }));
259
274
  };
260
275
 
@@ -55,8 +55,6 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
55
55
 
56
56
  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; }
57
57
 
58
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
59
-
60
58
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
61
59
 
62
60
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
@@ -71,12 +69,29 @@ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Sy
71
69
 
72
70
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
73
71
 
74
- var PackagePopoverContent = function PackagePopoverContent(_ref) {
75
- var name = _ref.name,
76
- fullName = _ref.fullName,
77
- path = _ref.path,
78
- duplicate = _ref.duplicate,
79
- CustomComponentLink = _ref.CustomComponentLink;
72
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
73
+
74
+ var getDropdownFilters = function getDropdownFilters(_ref) {
75
+ var _ref2;
76
+
77
+ var compareMode = _ref.compareMode,
78
+ filters = _ref.filters;
79
+ return _ref2 = {}, _defineProperty(_ref2, _utils.PACKAGE_FILTERS.CHANGED, {
80
+ label: 'Changed',
81
+ defaultValue: filters[_utils.PACKAGE_FILTERS.CHANGED],
82
+ disabled: !compareMode
83
+ }), _defineProperty(_ref2, _utils.PACKAGE_FILTERS.DUPLICATE, {
84
+ label: 'Duplicate',
85
+ defaultValue: filters[_utils.PACKAGE_FILTERS.DUPLICATE]
86
+ }), _ref2;
87
+ };
88
+
89
+ var PackagePopoverContent = function PackagePopoverContent(_ref3) {
90
+ var name = _ref3.name,
91
+ fullName = _ref3.fullName,
92
+ path = _ref3.path,
93
+ duplicate = _ref3.duplicate,
94
+ CustomComponentLink = _ref3.CustomComponentLink;
80
95
  var fallbackPackagePath = "node_modules/".concat(fullName.split(_utils.PACKAGES_SEPARATOR).join('/node_modules/'));
81
96
  var normalizedPackagePath = "".concat(path || fallbackPackagePath, "/");
82
97
 
@@ -130,12 +145,12 @@ PackagePopoverContent.defaultProps = {
130
145
  path: ''
131
146
  };
132
147
 
133
- var PackageName = function PackageName(_ref2) {
134
- var packageName = _ref2.packageName,
135
- path = _ref2.path,
136
- showDuplicateFlag = _ref2.showDuplicateFlag,
137
- row = _ref2.row,
138
- CustomComponentLink = _ref2.CustomComponentLink;
148
+ var PackageName = function PackageName(_ref4) {
149
+ var packageName = _ref4.packageName,
150
+ path = _ref4.path,
151
+ showDuplicateFlag = _ref4.showDuplicateFlag,
152
+ row = _ref4.row,
153
+ CustomComponentLink = _ref4.CustomComponentLink;
139
154
 
140
155
  var _useState = (0, _react.useState)(false),
141
156
  _useState2 = _slicedToArray(_useState, 2),
@@ -191,13 +206,13 @@ PackageName.propTypes = {
191
206
  CustomComponentLink: _propTypes["default"].elementType.isRequired
192
207
  };
193
208
 
194
- var RowHeader = function RowHeader(_ref3) {
195
- var row = _ref3.row,
196
- CustomComponentLink = _ref3.CustomComponentLink;
209
+ var RowHeader = function RowHeader(_ref5) {
210
+ var row = _ref5.row,
211
+ CustomComponentLink = _ref5.CustomComponentLink;
197
212
  var packageNames = row.label.split(_utils.PACKAGES_SEPARATOR);
198
213
 
199
- var _ref4 = row.runs[0] || {},
200
- path = _ref4.path;
214
+ var _ref6 = row.runs[0] || {},
215
+ path = _ref6.path;
201
216
 
202
217
  return /*#__PURE__*/_react["default"].createElement("span", {
203
218
  className: _bundlePackagesModule["default"].packageNames
@@ -225,8 +240,6 @@ RowHeader.propTypes = {
225
240
  };
226
241
 
227
242
  var BundlePackages = function BundlePackages(props) {
228
- var _ref6;
229
-
230
243
  var className = props.className,
231
244
  jobs = props.jobs,
232
245
  items = props.items,
@@ -242,26 +255,40 @@ var BundlePackages = function BundlePackages(props) {
242
255
  updateSearch = props.updateSearch,
243
256
  hasActiveFilters = props.hasActiveFilters,
244
257
  CustomComponentLink = props.customComponentLink;
245
-
246
- var emptyMessage = /*#__PURE__*/_react["default"].createElement(_emptySet.EmptySet, {
247
- resources: "packages",
248
- filtered: totalRowCount !== 0,
249
- handleResetFilters: resetFilters,
250
- handleViewAll: resetAllFilters
251
- });
252
-
258
+ var dropdownFilters = (0, _react.useMemo)(function () {
259
+ return getDropdownFilters({
260
+ compareMode: (jobs === null || jobs === void 0 ? void 0 : jobs.length) > 1,
261
+ filters: filters
262
+ });
263
+ }, [jobs, filters]);
264
+ var metricsTableTitle = (0, _react.useMemo)(function () {
265
+ return /*#__PURE__*/_react["default"].createElement(_metricsTableTitle.MetricsTableTitle, {
266
+ title: _i18n["default"].PACKAGES,
267
+ info: "".concat(items.length, "/").concat(totalRowCount),
268
+ popoverInfo: _i18n["default"].PACKAGES_INFO,
269
+ popoverHref: _config["default"].documentation.packages
270
+ });
271
+ }, [items, totalRowCount]);
253
272
  var renderRowHeader = (0, _react.useCallback)(function (row) {
254
273
  return /*#__PURE__*/_react["default"].createElement(RowHeader, {
255
274
  row: row,
256
275
  CustomComponentLink: CustomComponentLink
257
276
  });
258
277
  }, [CustomComponentLink]);
278
+ var emptyMessage = (0, _react.useMemo)(function () {
279
+ return /*#__PURE__*/_react["default"].createElement(_emptySet.EmptySet, {
280
+ resources: "packages",
281
+ filtered: totalRowCount !== 0,
282
+ handleResetFilters: resetFilters,
283
+ handleViewAll: resetAllFilters
284
+ });
285
+ }, [totalRowCount, resetFilters, resetAllFilters]);
259
286
  return /*#__PURE__*/_react["default"].createElement("section", {
260
287
  className: (0, _classnames["default"])(_bundlePackagesModule["default"].root, className)
261
288
  }, /*#__PURE__*/_react["default"].createElement(_toolbar.Toolbar, {
262
289
  className: _bundlePackagesModule["default"].toolbar,
263
- renderActions: function renderActions(_ref5) {
264
- var actionClassName = _ref5.actionClassName;
290
+ renderActions: function renderActions(_ref7) {
291
+ var actionClassName = _ref7.actionClassName;
265
292
  return /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
266
293
  space: "xxsmall",
267
294
  className: (0, _classnames["default"])(_bundlePackagesModule["default"].dropdown, actionClassName)
@@ -282,14 +309,7 @@ var BundlePackages = function BundlePackages(props) {
282
309
  search: search,
283
310
  updateSearch: updateSearch
284
311
  }), /*#__PURE__*/_react["default"].createElement(_filters.Filters, {
285
- filters: (_ref6 = {}, _defineProperty(_ref6, _utils.PACKAGE_FILTERS.CHANGED, {
286
- label: 'Changed',
287
- defaultValue: filters[_utils.PACKAGE_FILTERS.CHANGED],
288
- disabled: jobs.length <= 1
289
- }), _defineProperty(_ref6, _utils.PACKAGE_FILTERS.DUPLICATE, {
290
- label: 'Duplicate',
291
- defaultValue: filters[_utils.PACKAGE_FILTERS.DUPLICATE]
292
- }), _ref6),
312
+ filters: dropdownFilters,
293
313
  label: "Filters (".concat(items.length, "/").concat(totalRowCount, ")"),
294
314
  onChange: updateFilters,
295
315
  hasActiveFilters: hasActiveFilters
@@ -299,12 +319,7 @@ var BundlePackages = function BundlePackages(props) {
299
319
  emptyMessage: emptyMessage,
300
320
  renderRowHeader: renderRowHeader,
301
321
  showHeaderSum: true,
302
- title: /*#__PURE__*/_react["default"].createElement(_metricsTableTitle.MetricsTableTitle, {
303
- title: _i18n["default"].PACKAGES,
304
- info: "(".concat(items.length, "/").concat(totalRowCount, ")"),
305
- popoverInfo: _i18n["default"].PACKAGES_INFO,
306
- popoverHref: _config["default"].documentation.packages
307
- })
322
+ title: metricsTableTitle
308
323
  })));
309
324
  };
310
325
 
@@ -32,15 +32,16 @@ var MetricsTableTitle = function MetricsTableTitle(props) {
32
32
  popoverInfo = props.popoverInfo,
33
33
  popoverHref = props.popoverHref;
34
34
  var rootClassName = (0, _classnames["default"])(_metricsTableTitleModule["default"].root, className);
35
- return /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
36
- space: "xxxsmall",
35
+ return /*#__PURE__*/_react["default"].createElement(_stack.Stack, {
37
36
  className: rootClassName
38
- }, /*#__PURE__*/_react["default"].createElement("span", null, title), info && /*#__PURE__*/_react["default"].createElement("span", {
39
- className: _metricsTableTitleModule["default"].info
40
- }, info), (popoverInfo || popoverHref) && /*#__PURE__*/_react["default"].createElement(_hoverCard.HoverCard, {
37
+ }, /*#__PURE__*/_react["default"].createElement(_flexStack.FlexStack, {
38
+ space: "xxxsmall",
39
+ className: _metricsTableTitleModule["default"].title
40
+ }, /*#__PURE__*/_react["default"].createElement("span", null, title), (popoverInfo || popoverHref) && /*#__PURE__*/_react["default"].createElement(_hoverCard.HoverCard, {
41
41
  label: /*#__PURE__*/_react["default"].createElement(_icon.Icon, {
42
42
  glyph: "help"
43
- })
43
+ }),
44
+ className: _metricsTableTitleModule["default"].hoverCard
44
45
  }, /*#__PURE__*/_react["default"].createElement(_stack.Stack, {
45
46
  space: "xxxsmall"
46
47
  }, popoverInfo && /*#__PURE__*/_react["default"].createElement("p", null, popoverInfo), popoverHref && /*#__PURE__*/_react["default"].createElement("p", null, /*#__PURE__*/_react["default"].createElement("button", {
@@ -49,7 +50,9 @@ var MetricsTableTitle = function MetricsTableTitle(props) {
49
50
  return window.open(popoverHref);
50
51
  },
51
52
  className: _metricsTableTitleModule["default"].readMoreLink
52
- }, _i18n["default"].READ_MORE)))));
53
+ }, _i18n["default"].READ_MORE))))), info && /*#__PURE__*/_react["default"].createElement("p", {
54
+ className: _metricsTableTitleModule["default"].info
55
+ }, info));
53
56
  };
54
57
 
55
58
  exports.MetricsTableTitle = MetricsTableTitle;
@@ -1,14 +1,20 @@
1
1
  .root {
2
+ }
3
+
4
+ .title {
5
+ color: var(--color-text-light);
2
6
  align-items: center;
3
7
  font-weight: bold;
4
- line-height: var(--space-small);
5
8
  text-transform: uppercase;
6
- color: var(--color-text-light);
9
+ }
10
+
11
+ .hoverCard {
12
+ line-height: 1;
7
13
  }
8
14
 
9
15
  .info {
16
+ font-size: var(--size-xsmall);
10
17
  font-weight: normal;
11
- text-transform: none;
12
18
  }
13
19
 
14
20
  .readMoreLink {