@bundle-stats/ui 3.2.0-beta.1 → 3.2.1-beta.3

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 (255) hide show
  1. package/.babelrc.js +3 -3
  2. package/CHANGELOG.md +20 -4
  3. package/lib/assets/icons/arrow.svg +1 -0
  4. package/lib/assets/icons/cancel.svg +1 -0
  5. package/lib/assets/icons/clock.svg +1 -0
  6. package/lib/assets/icons/close.svg +1 -0
  7. package/lib/assets/icons/commit.svg +1 -0
  8. package/lib/assets/icons/filter.svg +1 -0
  9. package/lib/assets/icons/help.svg +1 -0
  10. package/lib/assets/icons/menu.svg +1 -0
  11. package/lib/{ui/icon/assets → assets/icons}/sort.svg +0 -0
  12. package/lib/assets/icons/warning.svg +1 -0
  13. package/lib/assets/icons.svg +1 -0
  14. package/lib/components/bundle-assets/bundle-assets.js +3 -3
  15. package/lib/components/bundle-assets/bundle-assets.stories.js +19 -7
  16. package/lib/components/bundle-assets/bundle-assets.utils.js +95 -28
  17. package/lib/components/bundle-assets/index.js +115 -4
  18. package/lib/components/bundle-modules/bundle-modules.js +3 -3
  19. package/lib/components/bundle-modules/bundle-modules.utils.js +152 -0
  20. package/lib/components/bundle-modules/index.js +135 -4
  21. package/lib/components/bundle-packages/bundle-packages.js +3 -3
  22. package/lib/components/bundle-packages/{bundle-packages.container.js → bundle-packages.utils.js} +8 -42
  23. package/lib/components/bundle-packages/index.js +111 -3
  24. package/lib/components/metrics-table/metrics-table.js +3 -7
  25. package/lib/components/metrics-table-search/metrics-table-search.js +2 -1
  26. package/lib/components/metrics-table-search/metrics-table-search.module.css +2 -1
  27. package/lib/hooks/rows-filter.js +28 -0
  28. package/lib/hooks/rows-sort.js +54 -0
  29. package/lib/{hocs/with-search.js → hooks/search-params.js} +15 -64
  30. package/lib/ui/icon/icon.js +4 -191
  31. package/lib/ui/sort-dropdown/sort-dropdown.js +12 -13
  32. package/lib/ui/sort-dropdown/sort-dropdown.stories.js +2 -2
  33. package/lib/utils.js +6 -3
  34. package/lib-esm/app/app.js +60 -70
  35. package/lib-esm/app/app.stories.js +50 -71
  36. package/lib-esm/app/header/header.js +5 -3
  37. package/lib-esm/assets/icons/arrow.svg +1 -0
  38. package/lib-esm/assets/icons/cancel.svg +1 -0
  39. package/lib-esm/assets/icons/clock.svg +1 -0
  40. package/lib-esm/assets/icons/close.svg +1 -0
  41. package/lib-esm/assets/icons/commit.svg +1 -0
  42. package/lib-esm/assets/icons/filter.svg +1 -0
  43. package/lib-esm/assets/icons/help.svg +1 -0
  44. package/lib-esm/assets/icons/menu.svg +1 -0
  45. package/lib-esm/{ui/icon/assets → assets/icons}/sort.svg +0 -0
  46. package/lib-esm/assets/icons/warning.svg +1 -0
  47. package/lib-esm/assets/icons.svg +1 -0
  48. package/lib-esm/components/asset-info/asset-info.js +21 -17
  49. package/lib-esm/components/asset-info/asset-info.stories.js +29 -33
  50. package/lib-esm/components/browsertime-table/browsertime-table.js +6 -4
  51. package/lib-esm/components/browsertime-table/browsertime-table.stories.js +9 -13
  52. package/lib-esm/components/bundle-assets/bundle-assets.constants.js +17 -15
  53. package/lib-esm/components/bundle-assets/bundle-assets.js +107 -97
  54. package/lib-esm/components/bundle-assets/bundle-assets.stories.js +58 -63
  55. package/lib-esm/components/bundle-assets/bundle-assets.utils.js +65 -21
  56. package/lib-esm/components/bundle-assets/index.js +89 -2
  57. package/lib-esm/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.js +49 -51
  58. package/lib-esm/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.stories.js +9 -13
  59. package/lib-esm/components/bundle-assets-totals-table/bundle-assets-totals-table.js +14 -13
  60. package/lib-esm/components/bundle-assets-totals-table/bundle-assets-totals-table.stories.js +13 -19
  61. package/lib-esm/components/bundle-modules/bundle-modules.constants.js +17 -15
  62. package/lib-esm/components/bundle-modules/bundle-modules.js +112 -110
  63. package/lib-esm/components/bundle-modules/bundle-modules.stories.js +46 -58
  64. package/lib-esm/components/bundle-modules/bundle-modules.utils.js +98 -0
  65. package/lib-esm/components/bundle-modules/index.js +114 -3
  66. package/lib-esm/components/bundle-packages/bundle-packages.constants.js +17 -15
  67. package/lib-esm/components/bundle-packages/bundle-packages.js +71 -69
  68. package/lib-esm/components/bundle-packages/bundle-packages.stories.js +34 -46
  69. package/lib-esm/components/bundle-packages/bundle-packages.utils.js +44 -0
  70. package/lib-esm/components/bundle-packages/index.js +87 -2
  71. package/lib-esm/components/component-link.js +10 -13
  72. package/lib-esm/components/delta/delta.js +8 -6
  73. package/lib-esm/components/delta/delta.stories.js +26 -38
  74. package/lib-esm/components/duplicate-packages-warning/duplicate-packages-warning.js +11 -9
  75. package/lib-esm/components/duplicate-packages-warning/duplicate-packages-warning.stories.js +20 -26
  76. package/lib-esm/components/job-header/job-header.js +14 -11
  77. package/lib-esm/components/job-header/job-header.stories.js +12 -18
  78. package/lib-esm/components/job-meta/job-meta.js +15 -18
  79. package/lib-esm/components/job-meta/job-meta.stories.js +10 -12
  80. package/lib-esm/components/job-name/job-name.js +9 -12
  81. package/lib-esm/components/job-name/job-name.stories.js +15 -23
  82. package/lib-esm/components/jobs-header/jobs-header.js +12 -12
  83. package/lib-esm/components/jobs-header/jobs-header.stories.js +80 -86
  84. package/lib-esm/components/lighthouse-table/lighthouse-table.js +6 -4
  85. package/lib-esm/components/lighthouse-table/lighthouse-table.stories.js +10 -14
  86. package/lib-esm/components/metric/metric.js +15 -19
  87. package/lib-esm/components/metric/metric.stories.js +36 -58
  88. package/lib-esm/components/metrics-table/metrics-table.js +128 -139
  89. package/lib-esm/components/metrics-table/metrics-table.stories.js +27 -35
  90. package/lib-esm/components/metrics-table-options/metrics-table-options.js +16 -19
  91. package/lib-esm/components/metrics-table-options/metrics-table-options.stories.js +6 -12
  92. package/lib-esm/components/metrics-table-search/metrics-table-search.js +17 -18
  93. package/lib-esm/components/metrics-table-search/metrics-table-search.module.css +2 -1
  94. package/lib-esm/components/metrics-table-search/metrics-table-search.stories.js +4 -9
  95. package/lib-esm/components/metrics-table-title/metrics-table-title.js +9 -7
  96. package/lib-esm/components/module-info/module-info.js +15 -13
  97. package/lib-esm/components/module-info/module-info.stories.js +20 -22
  98. package/lib-esm/components/summary/summary.js +25 -27
  99. package/lib-esm/components/summary/summary.stories.js +31 -46
  100. package/lib-esm/components/summary-item/summary-item.js +27 -28
  101. package/lib-esm/components/summary-item/summary-item.stories.js +40 -50
  102. package/lib-esm/components/total-size-type-title/total-size-type-title.js +4 -2
  103. package/lib-esm/constants.js +25 -30
  104. package/lib-esm/hooks/rows-filter.js +20 -0
  105. package/lib-esm/hooks/rows-sort.js +22 -0
  106. package/lib-esm/hooks/search-params.js +170 -0
  107. package/lib-esm/layout/box/box.js +12 -19
  108. package/lib-esm/layout/box/box.stories.js +34 -46
  109. package/lib-esm/layout/flex-stack/flex-stack.js +9 -12
  110. package/lib-esm/layout/flex-stack/flex-stack.stories.js +39 -49
  111. package/lib-esm/layout/footer/footer.js +11 -11
  112. package/lib-esm/layout/footer/footer.stories.js +7 -11
  113. package/lib-esm/layout/header/header.js +10 -14
  114. package/lib-esm/layout/header/header.stories.js +50 -44
  115. package/lib-esm/layout/stack/stack.js +8 -6
  116. package/lib-esm/layout/stack/stack.stories.js +39 -49
  117. package/lib-esm/layout/sub-header/sub-header.js +14 -12
  118. package/lib-esm/layout/sub-header/sub-header.stories.js +57 -69
  119. package/lib-esm/prototypes/typography.stories.js +49 -58
  120. package/lib-esm/query-state.js +13 -16
  121. package/lib-esm/stories/wrapper.js +6 -12
  122. package/lib-esm/ui/alert/alert.js +6 -4
  123. package/lib-esm/ui/alert/alert.stories.js +14 -24
  124. package/lib-esm/ui/container/container.js +6 -9
  125. package/lib-esm/ui/container/container.stories.js +15 -17
  126. package/lib-esm/ui/dropdown/dropdown.js +13 -11
  127. package/lib-esm/ui/dropdown/dropdown.stories.js +22 -26
  128. package/lib-esm/ui/empty-set/empty-set.js +12 -12
  129. package/lib-esm/ui/empty-set/empty-set.stories.js +11 -19
  130. package/lib-esm/ui/file-name/file-name.js +6 -4
  131. package/lib-esm/ui/file-name/file-name.stories.js +12 -16
  132. package/lib-esm/ui/filters/filters.container.js +57 -76
  133. package/lib-esm/ui/filters/filters.js +71 -77
  134. package/lib-esm/ui/filters/filters.stories.js +82 -100
  135. package/lib-esm/ui/filters/filters.utils.js +26 -24
  136. package/lib-esm/ui/filters/index.js +1 -1
  137. package/lib-esm/ui/horizontal-bar-chart/horizontal-bar-chart.js +68 -78
  138. package/lib-esm/ui/horizontal-bar-chart/horizontal-bar-chart.stories.js +67 -77
  139. package/lib-esm/ui/icon/icon.js +13 -202
  140. package/lib-esm/ui/icon/icon.stories.js +16 -24
  141. package/lib-esm/ui/input/input.js +7 -10
  142. package/lib-esm/ui/input/input.stories.js +8 -12
  143. package/lib-esm/ui/loader/loader.js +6 -9
  144. package/lib-esm/ui/loader/loader.stories.js +5 -9
  145. package/lib-esm/ui/logo/logo.constants.js +6 -6
  146. package/lib-esm/ui/logo/logo.js +15 -15
  147. package/lib-esm/ui/logo/logo.stories.js +14 -22
  148. package/lib-esm/ui/panels/panels.js +13 -23
  149. package/lib-esm/ui/panels/panels.stories.js +14 -16
  150. package/lib-esm/ui/popover/popover.js +11 -9
  151. package/lib-esm/ui/popover/popover.stories.js +7 -11
  152. package/lib-esm/ui/skeleton/skeleton.js +6 -9
  153. package/lib-esm/ui/skeleton/skeleton.stories.js +2 -4
  154. package/lib-esm/ui/sort-dropdown/sort-dropdown.js +38 -38
  155. package/lib-esm/ui/sort-dropdown/sort-dropdown.stories.js +14 -16
  156. package/lib-esm/ui/table/table.js +26 -31
  157. package/lib-esm/ui/table/table.stories.js +84 -102
  158. package/lib-esm/ui/tabs/tabs.js +13 -21
  159. package/lib-esm/ui/tabs/tabs.stories.js +4 -6
  160. package/lib-esm/ui/toolbar/toolbar.js +7 -5
  161. package/lib-esm/ui/toolbar/toolbar.stories.js +14 -16
  162. package/lib-esm/ui/tooltip/tooltip.js +13 -16
  163. package/lib-esm/ui/tooltip/tooltip.stories.js +8 -12
  164. package/lib-esm/utils.js +20 -24
  165. package/package.json +25 -33
  166. package/src/assets/icons/arrow.svg +1 -0
  167. package/src/assets/icons/cancel.svg +1 -0
  168. package/src/assets/icons/clock.svg +1 -0
  169. package/src/assets/icons/close.svg +1 -0
  170. package/src/assets/icons/commit.svg +1 -0
  171. package/src/assets/icons/filter.svg +1 -0
  172. package/src/assets/icons/help.svg +1 -0
  173. package/src/assets/icons/menu.svg +1 -0
  174. package/src/{ui/icon/assets → assets/icons}/sort.svg +0 -0
  175. package/src/assets/icons/warning.svg +1 -0
  176. package/src/assets/icons.svg +1 -0
  177. package/src/components/bundle-assets/bundle-assets.jsx +3 -3
  178. package/src/components/bundle-assets/bundle-assets.utils.js +96 -17
  179. package/src/components/bundle-assets/index.jsx +89 -0
  180. package/src/components/bundle-modules/bundle-modules.jsx +3 -3
  181. package/src/components/bundle-modules/bundle-modules.utils.js +101 -0
  182. package/src/components/bundle-modules/index.jsx +107 -0
  183. package/src/components/bundle-packages/bundle-packages.jsx +3 -3
  184. package/src/components/bundle-packages/bundle-packages.utils.js +47 -0
  185. package/src/components/bundle-packages/index.jsx +84 -0
  186. package/src/components/metrics-table/metrics-table.jsx +2 -7
  187. package/src/components/metrics-table-search/metrics-table-search.jsx +1 -0
  188. package/src/components/metrics-table-search/metrics-table-search.module.css +2 -1
  189. package/src/hooks/rows-filter.js +16 -0
  190. package/src/hooks/rows-sort.js +24 -0
  191. package/src/hooks/search-params.js +153 -0
  192. package/src/ui/icon/icon.jsx +7 -42
  193. package/src/ui/sort-dropdown/sort-dropdown.jsx +11 -11
  194. package/src/utils.jsx +5 -3
  195. package/lib/components/bundle-assets/bundle-assets.container.js +0 -140
  196. package/lib/components/bundle-modules/bundle-modules.container.js +0 -222
  197. package/lib/hocs/with-custom-sort.js +0 -75
  198. package/lib/hocs/with-filtered-items.js +0 -54
  199. package/lib/ui/icon/assets/arrow.svg +0 -4
  200. package/lib/ui/icon/assets/branch.svg +0 -3
  201. package/lib/ui/icon/assets/cancel.svg +0 -4
  202. package/lib/ui/icon/assets/clock.svg +0 -3
  203. package/lib/ui/icon/assets/close.svg +0 -4
  204. package/lib/ui/icon/assets/commit.svg +0 -3
  205. package/lib/ui/icon/assets/filter.svg +0 -4
  206. package/lib/ui/icon/assets/help.svg +0 -4
  207. package/lib/ui/icon/assets/job.svg +0 -3
  208. package/lib/ui/icon/assets/menu.svg +0 -4
  209. package/lib/ui/icon/assets/package.svg +0 -3
  210. package/lib/ui/icon/assets/pull-request.svg +0 -3
  211. package/lib/ui/icon/assets/repository.svg +0 -3
  212. package/lib/ui/icon/assets/warning.svg +0 -4
  213. package/lib-esm/components/bundle-assets/bundle-assets.container.js +0 -119
  214. package/lib-esm/components/bundle-modules/bundle-modules.container.js +0 -175
  215. package/lib-esm/components/bundle-packages/bundle-packages.container.js +0 -91
  216. package/lib-esm/hocs/with-custom-sort.js +0 -43
  217. package/lib-esm/hocs/with-filtered-items.js +0 -35
  218. package/lib-esm/hocs/with-search.js +0 -214
  219. package/lib-esm/ui/icon/assets/arrow.svg +0 -4
  220. package/lib-esm/ui/icon/assets/branch.svg +0 -3
  221. package/lib-esm/ui/icon/assets/cancel.svg +0 -4
  222. package/lib-esm/ui/icon/assets/clock.svg +0 -3
  223. package/lib-esm/ui/icon/assets/close.svg +0 -4
  224. package/lib-esm/ui/icon/assets/commit.svg +0 -3
  225. package/lib-esm/ui/icon/assets/filter.svg +0 -4
  226. package/lib-esm/ui/icon/assets/help.svg +0 -4
  227. package/lib-esm/ui/icon/assets/job.svg +0 -3
  228. package/lib-esm/ui/icon/assets/menu.svg +0 -4
  229. package/lib-esm/ui/icon/assets/package.svg +0 -3
  230. package/lib-esm/ui/icon/assets/pull-request.svg +0 -3
  231. package/lib-esm/ui/icon/assets/repository.svg +0 -3
  232. package/lib-esm/ui/icon/assets/warning.svg +0 -4
  233. package/src/components/bundle-assets/bundle-assets.container.js +0 -146
  234. package/src/components/bundle-assets/index.js +0 -4
  235. package/src/components/bundle-modules/bundle-modules.container.js +0 -158
  236. package/src/components/bundle-modules/index.js +0 -4
  237. package/src/components/bundle-packages/bundle-packages.container.js +0 -93
  238. package/src/components/bundle-packages/index.js +0 -4
  239. package/src/hocs/with-custom-sort.jsx +0 -35
  240. package/src/hocs/with-filtered-items.jsx +0 -34
  241. package/src/hocs/with-search.jsx +0 -184
  242. package/src/ui/icon/assets/arrow.svg +0 -4
  243. package/src/ui/icon/assets/branch.svg +0 -3
  244. package/src/ui/icon/assets/cancel.svg +0 -4
  245. package/src/ui/icon/assets/clock.svg +0 -3
  246. package/src/ui/icon/assets/close.svg +0 -4
  247. package/src/ui/icon/assets/commit.svg +0 -3
  248. package/src/ui/icon/assets/filter.svg +0 -4
  249. package/src/ui/icon/assets/help.svg +0 -4
  250. package/src/ui/icon/assets/job.svg +0 -3
  251. package/src/ui/icon/assets/menu.svg +0 -4
  252. package/src/ui/icon/assets/package.svg +0 -3
  253. package/src/ui/icon/assets/pull-request.svg +0 -3
  254. package/src/ui/icon/assets/repository.svg +0 -3
  255. package/src/ui/icon/assets/warning.svg +0 -4
@@ -1,16 +1,8 @@
1
1
  import _map from "lodash/map";
2
2
  import _get from "lodash/get";
3
3
 
4
- var _PropTypes$shape;
5
-
6
4
  function _extends() { _extends = Object.assign || 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); }
7
5
 
8
- 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; }
9
-
10
- 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; }
11
-
12
- 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; }
13
-
14
6
  import React, { useMemo } from 'react';
15
7
  import PropTypes from 'prop-types';
16
8
  import cx from 'classnames';
@@ -33,37 +25,38 @@ import { MetricsTableSearch } from '../metrics-table-search';
33
25
  import { MetricsTableOptions } from '../metrics-table-options';
34
26
  import { MetricsTableTitle } from '../metrics-table-title';
35
27
  import css from './bundle-assets.module.css';
36
- var RUN_TITLE_CURRENT = 'Current';
37
- var RUN_TITLE_BASELINE = 'Baseline';
38
- var RUNS_LABELS = [RUN_TITLE_CURRENT, RUN_TITLE_BASELINE];
39
-
40
- var getFileTypeFilters = function getFileTypeFilters(filters) {
41
- return Object.entries(FILE_TYPE_LABELS).map(function (_ref) {
42
- var _ref2;
28
+ const RUN_TITLE_CURRENT = 'Current';
29
+ const RUN_TITLE_BASELINE = 'Baseline';
30
+ const RUNS_LABELS = [RUN_TITLE_CURRENT, RUN_TITLE_BASELINE];
43
31
 
44
- var id = _ref[0],
45
- label = _ref[1];
46
- return _ref2 = {}, _ref2[id] = {
47
- label: label,
48
- defaultValue: _get(filters, ASSET_FILE_TYPE + "." + id, true)
49
- }, _ref2;
50
- }).reduce(function (agg, current) {
51
- return _objectSpread(_objectSpread({}, agg), current);
52
- }, {});
53
- };
32
+ const getFileTypeFilters = filters => Object.entries(FILE_TYPE_LABELS).map(_ref => {
33
+ let [id, label] = _ref;
34
+ return {
35
+ [id]: {
36
+ label,
37
+ defaultValue: _get(filters, `${ASSET_FILE_TYPE}.${id}`, true)
38
+ }
39
+ };
40
+ }).reduce((agg, current) => ({ ...agg,
41
+ ...current
42
+ }), {});
54
43
 
55
- var TooltipNotPredictive = function TooltipNotPredictive(_ref3) {
56
- var runs = _ref3.runs;
44
+ const TooltipNotPredictive = _ref2 => {
45
+ let {
46
+ runs
47
+ } = _ref2;
57
48
  return /*#__PURE__*/React.createElement("div", {
58
49
  className: css.tooltipNotPredictive
59
50
  }, /*#__PURE__*/React.createElement("p", {
60
51
  className: css.tooltipNotPredictiveText
61
52
  }, "File name is the same, but the size has changed:"), /*#__PURE__*/React.createElement("table", {
62
53
  className: css.tooltipTable
63
- }, /*#__PURE__*/React.createElement("tr", null, runs.map(function (_ref4, index) {
64
- var name = _ref4.name,
65
- value = _ref4.value;
66
- var key = index;
54
+ }, /*#__PURE__*/React.createElement("tr", null, runs.map((_ref3, index) => {
55
+ let {
56
+ name,
57
+ value
58
+ } = _ref3;
59
+ const key = index;
67
60
  return /*#__PURE__*/React.createElement("tr", {
68
61
  key: key
69
62
  }, /*#__PURE__*/React.createElement("th", null, RUNS_LABELS[index]), /*#__PURE__*/React.createElement("td", null, name), /*#__PURE__*/React.createElement("td", null, value));
@@ -78,17 +71,21 @@ TooltipNotPredictive.propTypes = {
78
71
 
79
72
  };
80
73
 
81
- var getRenderRowHeader = function getRenderRowHeader(_ref5) {
82
- var labels = _ref5.labels,
83
- CustomComponentLink = _ref5.CustomComponentLink,
84
- chunks = _ref5.chunks;
85
- return function (item) {
86
- var label = item.label,
87
- isNotPredictive = item.isNotPredictive,
88
- runs = item.runs,
89
- isChunk = item.isChunk,
90
- isEntry = item.isEntry,
91
- isInitial = item.isInitial;
74
+ const getRenderRowHeader = _ref4 => {
75
+ let {
76
+ labels,
77
+ CustomComponentLink,
78
+ chunks
79
+ } = _ref4;
80
+ return item => {
81
+ const {
82
+ label,
83
+ isNotPredictive,
84
+ runs,
85
+ isChunk,
86
+ isEntry,
87
+ isInitial
88
+ } = item;
92
89
  return /*#__PURE__*/React.createElement(Popover, {
93
90
  label: /*#__PURE__*/React.createElement(FileName, {
94
91
  name: label
@@ -123,49 +120,51 @@ var getRenderRowHeader = function getRenderRowHeader(_ref5) {
123
120
  };
124
121
  };
125
122
 
126
- export var BundleAssets = function BundleAssets(props) {
127
- var _jobs$, _jobs$$meta, _jobs$$meta$webpack, _ASSET_ENTRY_TYPE, _ref7;
123
+ export const BundleAssets = props => {
124
+ var _jobs$, _jobs$$meta, _jobs$$meta$webpack;
128
125
 
129
- var className = props.className,
130
- jobs = props.jobs,
131
- items = props.items,
132
- updateFilters = props.updateFilters,
133
- resetFilters = props.resetFilters,
134
- resetAllFilters = props.resetAllFilters,
135
- totalRowCount = props.totalRowCount,
136
- filters = props.filters,
137
- hasActiveFilters = props.hasActiveFilters,
138
- sortItems = props.sortItems,
139
- sort = props.sort,
140
- updateSort = props.updateSort,
141
- search = props.search,
142
- updateSearch = props.updateSearch,
143
- CustomComponentLink = props.customComponentLink;
144
- var emptyMessage = /*#__PURE__*/React.createElement(EmptySet, {
126
+ const {
127
+ className,
128
+ jobs,
129
+ items,
130
+ updateFilters,
131
+ resetFilters,
132
+ resetAllFilters,
133
+ totalRowCount,
134
+ filters,
135
+ hasActiveFilters,
136
+ sortFields,
137
+ sort,
138
+ updateSort,
139
+ search,
140
+ updateSearch,
141
+ customComponentLink: CustomComponentLink
142
+ } = props;
143
+ const emptyMessage = /*#__PURE__*/React.createElement(EmptySet, {
145
144
  resources: "assets",
146
145
  filtered: totalRowCount !== 0,
147
146
  handleResetFilters: resetFilters,
148
147
  handleViewAll: resetAllFilters
149
148
  });
150
- var chunks = ((_jobs$ = jobs[0]) == null ? void 0 : (_jobs$$meta = _jobs$.meta) == null ? void 0 : (_jobs$$meta$webpack = _jobs$$meta.webpack) == null ? void 0 : _jobs$$meta$webpack.chunks) || [];
151
- var renderRowHeader = useMemo(function () {
152
- return getRenderRowHeader({
153
- labels: _map(jobs, 'label'),
154
- CustomComponentLink: CustomComponentLink,
155
- chunks: chunks
156
- });
157
- }, [jobs, chunks]);
149
+ const chunks = ((_jobs$ = jobs[0]) == null ? void 0 : (_jobs$$meta = _jobs$.meta) == null ? void 0 : (_jobs$$meta$webpack = _jobs$$meta.webpack) == null ? void 0 : _jobs$$meta$webpack.chunks) || [];
150
+ const renderRowHeader = useMemo(() => getRenderRowHeader({
151
+ labels: _map(jobs, 'label'),
152
+ CustomComponentLink,
153
+ chunks
154
+ }), [jobs, chunks]);
158
155
  return /*#__PURE__*/React.createElement("section", {
159
156
  className: cx(css.root, className)
160
157
  }, /*#__PURE__*/React.createElement(Toolbar, {
161
158
  className: css.toolbar,
162
- renderActions: function renderActions(_ref6) {
163
- var actionClassName = _ref6.actionClassName;
159
+ renderActions: _ref5 => {
160
+ let {
161
+ actionClassName
162
+ } = _ref5;
164
163
  return /*#__PURE__*/React.createElement(FlexStack, {
165
164
  space: "xsmall",
166
165
  className: cx(css.dropdown, actionClassName)
167
166
  }, /*#__PURE__*/React.createElement(SortDropdown, _extends({
168
- items: sortItems
167
+ fields: sortFields
169
168
  }, sort, {
170
169
  onChange: updateSort
171
170
  })), /*#__PURE__*/React.createElement(MetricsTableOptions, {
@@ -180,27 +179,36 @@ export var BundleAssets = function BundleAssets(props) {
180
179
  updateSearch: updateSearch
181
180
  }), /*#__PURE__*/React.createElement(Filters, {
182
181
  className: css.toolbarFilters,
183
- filters: (_ref7 = {}, _ref7[ASSET_FILTERS.CHANGED] = {
184
- label: 'Changed',
185
- defaultValue: filters[ASSET_FILTERS.CHANGED],
186
- disabled: jobs.length <= 1
187
- }, _ref7[ASSET_ENTRY_TYPE] = (_ASSET_ENTRY_TYPE = {
188
- label: 'Entry type'
189
- }, _ASSET_ENTRY_TYPE[ASSET_FILTERS.ENTRY] = {
190
- label: 'Entry',
191
- defaultValue: _get(filters, ASSET_ENTRY_TYPE + "." + ASSET_FILTERS.ENTRY, true)
192
- }, _ASSET_ENTRY_TYPE[ASSET_FILTERS.INITIAL] = {
193
- label: 'Initial',
194
- defaultValue: _get(filters, ASSET_ENTRY_TYPE + "." + ASSET_FILTERS.INITIAL, true)
195
- }, _ASSET_ENTRY_TYPE[ASSET_FILTERS.CHUNK] = {
196
- label: 'Chunk',
197
- defaultValue: _get(filters, ASSET_ENTRY_TYPE + "." + ASSET_FILTERS.CHUNK, true)
198
- }, _ASSET_ENTRY_TYPE[ASSET_FILTERS.ASSET] = {
199
- label: 'Asset',
200
- defaultValue: _get(filters, ASSET_ENTRY_TYPE + "." + ASSET_FILTERS.ASSET, true)
201
- }, _ASSET_ENTRY_TYPE), _ref7[ASSET_FILE_TYPE] = _objectSpread({
202
- label: 'File type'
203
- }, getFileTypeFilters(filters)), _ref7),
182
+ filters: {
183
+ [ASSET_FILTERS.CHANGED]: {
184
+ label: 'Changed',
185
+ defaultValue: filters[ASSET_FILTERS.CHANGED],
186
+ disabled: jobs.length <= 1
187
+ },
188
+ [ASSET_ENTRY_TYPE]: {
189
+ label: 'Entry type',
190
+ [ASSET_FILTERS.ENTRY]: {
191
+ label: 'Entry',
192
+ defaultValue: _get(filters, `${ASSET_ENTRY_TYPE}.${ASSET_FILTERS.ENTRY}`, true)
193
+ },
194
+ [ASSET_FILTERS.INITIAL]: {
195
+ label: 'Initial',
196
+ defaultValue: _get(filters, `${ASSET_ENTRY_TYPE}.${ASSET_FILTERS.INITIAL}`, true)
197
+ },
198
+ [ASSET_FILTERS.CHUNK]: {
199
+ label: 'Chunk',
200
+ defaultValue: _get(filters, `${ASSET_ENTRY_TYPE}.${ASSET_FILTERS.CHUNK}`, true)
201
+ },
202
+ [ASSET_FILTERS.ASSET]: {
203
+ label: 'Asset',
204
+ defaultValue: _get(filters, `${ASSET_ENTRY_TYPE}.${ASSET_FILTERS.ASSET}`, true)
205
+ }
206
+ },
207
+ [ASSET_FILE_TYPE]: {
208
+ label: 'File type',
209
+ ...getFileTypeFilters(filters)
210
+ }
211
+ },
204
212
  hasActiveFilters: hasActiveFilters,
205
213
  onChange: updateFilters
206
214
  }))), /*#__PURE__*/React.createElement("main", null, /*#__PURE__*/React.createElement(MetricsTable, {
@@ -211,7 +219,7 @@ export var BundleAssets = function BundleAssets(props) {
211
219
  showHeaderSum: true,
212
220
  title: /*#__PURE__*/React.createElement(MetricsTableTitle, {
213
221
  title: I18N.ASSETS,
214
- info: "(" + items.length + "/" + totalRowCount + ")",
222
+ info: `(${items.length}/${totalRowCount})`,
215
223
  popoverInfo: I18N.ASSETS_INFO,
216
224
  popoverHref: config.documentation.assets
217
225
  })
@@ -251,10 +259,12 @@ BundleAssets.propTypes = {
251
259
  changed: PropTypes.bool
252
260
  }).isRequired,
253
261
  hasActiveFilters: PropTypes.bool,
254
- sortItems: PropTypes.shape((_PropTypes$shape = {}, _PropTypes$shape[PropTypes.string] = PropTypes.shape({
255
- label: PropTypes.string,
256
- defaultDirection: PropTypes.bool
257
- }), _PropTypes$shape)).isRequired,
262
+ sortFields: PropTypes.shape({
263
+ [PropTypes.string]: PropTypes.shape({
264
+ label: PropTypes.string,
265
+ defaultDirection: PropTypes.bool
266
+ })
267
+ }).isRequired,
258
268
  search: PropTypes.string.isRequired,
259
269
  updateSearch: PropTypes.func.isRequired,
260
270
  sort: PropTypes.shape({
@@ -7,73 +7,68 @@ import baselineStats from '../../../__mocks__/webpack-stats.baseline.json';
7
7
  import currentStats from '../../../__mocks__/webpack-stats.current.json';
8
8
  import { getWrapperDecorator } from '../../stories';
9
9
  import { BundleAssets } from '.';
10
- var JOBS = createJobs([{
10
+ const JOBS = createJobs([{
11
11
  webpack: currentStats
12
12
  }, {
13
13
  webpack: baselineStats
14
14
  }]);
15
- var currentJob = JOBS[0],
16
- baselineJob = JOBS[1];
17
- var stories = storiesOf('Components/BundleAssets', module);
18
- stories.addDecorator(getWrapperDecorator());
19
- stories.add('default', function () {
20
- return /*#__PURE__*/React.createElement(BundleAssets, {
21
- jobs: [baselineJob]
22
- });
23
- });
24
- stories.add('multiple jobs', function () {
25
- return /*#__PURE__*/React.createElement(BundleAssets, {
26
- jobs: JOBS
27
- });
28
- });
29
- stories.add('custom filters', function () {
30
- var _ref;
15
+ const [currentJob, baselineJob] = JOBS;
16
+
17
+ const setState = params => console.info(params);
31
18
 
32
- return /*#__PURE__*/React.createElement(BundleAssets, {
33
- jobs: JOBS,
34
- filters: (_ref = {}, _ref[ASSET_ENTRY_TYPE + "." + ASSET_FILTERS.ENTRY] = true, _ref[ASSET_FILE_TYPE + "." + FILE_TYPE_JS] = true, _ref)
35
- });
36
- });
37
- var JOBS_EMPTY_BASELINE = createJobs([{
19
+ const stories = storiesOf('Components/BundleAssets', module);
20
+ stories.addDecorator(getWrapperDecorator());
21
+ stories.add('default', () => /*#__PURE__*/React.createElement(BundleAssets, {
22
+ jobs: [baselineJob],
23
+ setState: setState
24
+ }));
25
+ stories.add('multiple jobs', () => /*#__PURE__*/React.createElement(BundleAssets, {
26
+ jobs: JOBS,
27
+ setState: setState
28
+ }));
29
+ stories.add('custom filters', () => /*#__PURE__*/React.createElement(BundleAssets, {
30
+ jobs: JOBS,
31
+ filters: {
32
+ [`${ASSET_ENTRY_TYPE}.${ASSET_FILTERS.ENTRY}`]: true,
33
+ [`${ASSET_FILE_TYPE}.${FILE_TYPE_JS}`]: true
34
+ },
35
+ setState: setState
36
+ }));
37
+ const JOBS_EMPTY_BASELINE = createJobs([{
38
38
  webpack: currentStats
39
39
  }, null]);
40
- stories.add('empty baseline', function () {
41
- return /*#__PURE__*/React.createElement(BundleAssets, {
42
- jobs: JOBS_EMPTY_BASELINE
43
- });
44
- });
45
- stories.add('no assets', function () {
46
- return /*#__PURE__*/React.createElement(BundleAssets, {
47
- jobs: JOBS.map(function (job) {
48
- return _set(_merge({}, job), 'metrics.webpack.assets', {});
49
- })
50
- });
51
- });
52
- stories.add('empty filtered data', function () {
53
- return /*#__PURE__*/React.createElement(BundleAssets, {
54
- jobs: [_set(_merge({}, currentJob), 'metrics.webpack.assets', {
55
- 'main.js': {
56
- value: 100
57
- }
58
- }), _set(_merge({}, baselineJob), 'metrics.webpack.assets', {
59
- 'main.js': {
60
- value: 100
61
- }
62
- })]
63
- });
64
- });
65
- stories.add('not predictive', function () {
66
- return /*#__PURE__*/React.createElement(BundleAssets, {
67
- jobs: [_set(_merge({}, currentJob), 'metrics.webpack.assets', {
68
- 'static/js/not-predictive.js': {
69
- name: 'static/js/not-predictive.93191a1.js',
70
- value: 2989
71
- }
72
- }), _set(_merge({}, baselineJob), 'metrics.webpack.assets', {
73
- 'static/js/not-predictive.js': {
74
- name: 'static/js/not-predictive.93191a1.js',
75
- value: 2988
76
- }
77
- })]
78
- });
79
- });
40
+ stories.add('empty baseline', () => /*#__PURE__*/React.createElement(BundleAssets, {
41
+ jobs: JOBS_EMPTY_BASELINE,
42
+ setState: setState
43
+ }));
44
+ stories.add('no assets', () => /*#__PURE__*/React.createElement(BundleAssets, {
45
+ jobs: JOBS.map(job => _set(_merge({}, job), 'metrics.webpack.assets', {})),
46
+ setState: setState
47
+ }));
48
+ stories.add('empty filtered data', () => /*#__PURE__*/React.createElement(BundleAssets, {
49
+ jobs: [_set(_merge({}, currentJob), 'metrics.webpack.assets', {
50
+ 'main.js': {
51
+ value: 100
52
+ }
53
+ }), _set(_merge({}, baselineJob), 'metrics.webpack.assets', {
54
+ 'main.js': {
55
+ value: 100
56
+ }
57
+ })],
58
+ search: "vendors",
59
+ setState: setState
60
+ }));
61
+ stories.add('not predictive', () => /*#__PURE__*/React.createElement(BundleAssets, {
62
+ jobs: [_set(_merge({}, currentJob), 'metrics.webpack.assets', {
63
+ 'static/js/not-predictive.js': {
64
+ name: 'static/js/not-predictive.93191a1.js',
65
+ value: 2989
66
+ }
67
+ }), _set(_merge({}, baselineJob), 'metrics.webpack.assets', {
68
+ 'static/js/not-predictive.js': {
69
+ name: 'static/js/not-predictive.93191a1.js',
70
+ value: 2988
71
+ }
72
+ })],
73
+ setState: setState
74
+ }));
@@ -1,22 +1,66 @@
1
- /**
2
- * Get a list of all chunkIds across assets and runs
3
- *
4
- * @param {Array<Object>} items
5
- * @return {Array<string|number>}
6
- */
7
- export var getAllChunkIds = function getAllChunkIds(items) {
8
- return items.reduce(function (agg, item) {
9
- var itemChunkIds = item.runs.map(function (run) {
10
- return run == null ? void 0 : run.chunkId;
11
- }).filter(function (chunkId) {
12
- return typeof chunkId !== 'undefined';
13
- });
14
- return itemChunkIds.reduce(function (itemAgg, chunkId) {
15
- if (itemAgg.includes(chunkId)) {
16
- return itemAgg;
17
- }
18
-
19
- return [].concat(itemAgg, [chunkId]);
20
- }, agg);
21
- }, []);
1
+ import _get from "lodash/get";
2
+ import { ASSET_ENTRY_TYPE, ASSET_FILE_TYPE, ASSET_FILTERS, getFileType } from '@bundle-stats/utils';
3
+ import { SORT_BY_NAME, SORT_BY_DELTA, SORT_BY_SIZE } from './bundle-assets.constants';
4
+ export const addRowAssetFlags = row => {
5
+ const {
6
+ runs
7
+ } = row;
8
+ const isEntry = runs.map(run => run == null ? void 0 : run.isEntry).includes(true);
9
+ const isInitial = runs.map(run => run == null ? void 0 : run.isInitial).includes(true);
10
+ const isChunk = runs.map(run => run == null ? void 0 : run.isChunk).includes(true);
11
+ const isAsset = !(isEntry || isInitial || isChunk);
12
+ return { ...row,
13
+ isEntry,
14
+ isInitial,
15
+ isChunk,
16
+ isAsset
17
+ };
18
+ };
19
+ export const getIsNotPredictive = (key, runs) => runs.reduce((agg, current, index) => {
20
+ if (agg) {
21
+ return agg;
22
+ }
23
+
24
+ if (index + 1 === runs.length) {
25
+ return agg;
26
+ }
27
+
28
+ if (current && runs[index + 1] && current.delta !== 0 && key !== current.name && current.name === runs[index + 1].name) {
29
+ return true;
30
+ }
31
+
32
+ return agg;
33
+ }, false);
34
+ export const addRowIsNotPredictive = row => ({ ...row,
35
+ isNotPredictive: getIsNotPredictive(row.key, row.runs)
36
+ });
37
+ export const getRowFilter = filters => item => {
38
+ if (filters[ASSET_FILTERS.CHANGED] && !item.changed) {
39
+ return false;
40
+ }
41
+
42
+ if (!(filters[`${ASSET_ENTRY_TYPE}.${ASSET_FILTERS.ENTRY}`] && item.isEntry || filters[`${ASSET_ENTRY_TYPE}.${ASSET_FILTERS.INITIAL}`] && item.isInitial || filters[`${ASSET_ENTRY_TYPE}.${ASSET_FILTERS.CHUNK}`] && item.isChunk || filters[`${ASSET_ENTRY_TYPE}.${ASSET_FILTERS.ASSET}`] && item.isAsset)) {
43
+ return false;
44
+ }
45
+
46
+ if (!filters[`${ASSET_FILE_TYPE}.${getFileType(item.key)}`]) {
47
+ return false;
48
+ }
49
+
50
+ return true;
51
+ };
52
+ export const getCustomSort = sortId => item => {
53
+ if (sortId === SORT_BY_NAME) {
54
+ return item.key;
55
+ }
56
+
57
+ if (sortId === SORT_BY_DELTA) {
58
+ return _get(item, 'runs[0].deltaPercentage', 0);
59
+ }
60
+
61
+ if (sortId === SORT_BY_SIZE) {
62
+ return _get(item, 'runs[0].value', 0);
63
+ }
64
+
65
+ return [!item.isNotPredictive, !item.changed, !item.isInitial, !item.isEntry, !item.isChunk, item.key];
22
66
  };
@@ -1,3 +1,90 @@
1
- import { enhance } from './bundle-assets.container';
1
+ function _extends() { _extends = Object.assign || 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); }
2
+
3
+ import React, { useMemo } from 'react';
4
+ import PropTypes from 'prop-types';
5
+ import * as webpack from '@bundle-stats/utils/lib-esm/webpack';
6
+ import { ASSET_FILTERS } from '@bundle-stats/utils';
7
+ import { getAssetEntryTypeFilters, getAssetFileTypeFilters } from '@bundle-stats/utils/lib-esm/utils/component-links';
8
+ import { useRowsFilter } from '../../hooks/rows-filter';
9
+ import { useRowsSort } from '../../hooks/rows-sort';
10
+ import { useSearchParams } from '../../hooks/search-params';
2
11
  import { BundleAssets as BundleAssetsComponent } from './bundle-assets';
3
- export var BundleAssets = enhance(BundleAssetsComponent);
12
+ import { addRowAssetFlags, addRowIsNotPredictive, getRowFilter, getCustomSort } from './bundle-assets.utils';
13
+ import { SORT_BY } from './bundle-assets.constants';
14
+ export const BundleAssets = props => {
15
+ const {
16
+ jobs,
17
+ filters,
18
+ search,
19
+ setState,
20
+ sortBy,
21
+ direction,
22
+ ...restProps
23
+ } = props;
24
+ const {
25
+ defaultFilters,
26
+ allEntriesFilters
27
+ } = useMemo(() => ({
28
+ defaultFilters: {
29
+ [ASSET_FILTERS.CHANGED]: (jobs == null ? void 0 : jobs.length) > 1,
30
+ ...getAssetEntryTypeFilters(true),
31
+ ...getAssetFileTypeFilters(true)
32
+ },
33
+ allEntriesFilters: {
34
+ [ASSET_FILTERS.CHANGED]: false,
35
+ ...getAssetEntryTypeFilters(true),
36
+ ...getAssetFileTypeFilters(true)
37
+ }
38
+ }), [jobs]);
39
+ const searchParams = useSearchParams({
40
+ search,
41
+ filters,
42
+ defaultFilters,
43
+ allEntriesFilters,
44
+ setState
45
+ });
46
+ const {
47
+ rows,
48
+ totalRowCount
49
+ } = useMemo(() => {
50
+ const result = webpack.compareBySection.assets(jobs, [addRowAssetFlags, addRowIsNotPredictive]);
51
+ return {
52
+ rows: result,
53
+ totalRowCount: result.length
54
+ };
55
+ }, [jobs]);
56
+ const filteredRows = useRowsFilter({
57
+ rows,
58
+ searchPattern: searchParams.searchPattern,
59
+ filters: searchParams.filters,
60
+ getRowFilter
61
+ });
62
+ const sortParams = useRowsSort({
63
+ rows: filteredRows,
64
+ sortFields: SORT_BY,
65
+ sortBy,
66
+ sortDirection: direction,
67
+ getCustomSort
68
+ });
69
+ return /*#__PURE__*/React.createElement(BundleAssetsComponent, _extends({
70
+ jobs: jobs
71
+ }, restProps, searchParams, sortParams, {
72
+ totalRowCount: totalRowCount
73
+ }));
74
+ };
75
+ BundleAssets.propTypes = {
76
+ jobs: PropTypes.arrayOf(PropTypes.object).isRequired,
77
+ // eslint-disable-line react/forbid-prop-types
78
+ filters: PropTypes.object,
79
+ // eslint-disable-line react/forbid-prop-types
80
+ search: PropTypes.string,
81
+ sortBy: PropTypes.string,
82
+ direction: PropTypes.string,
83
+ setState: PropTypes.func.isRequired
84
+ };
85
+ BundleAssets.defaultProps = {
86
+ filters: undefined,
87
+ search: undefined,
88
+ sortBy: undefined,
89
+ direction: undefined
90
+ };