@bundle-stats/ui 3.1.4-alpha.0 → 3.2.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (276) hide show
  1. package/.babelrc.js +3 -3
  2. package/CHANGELOG.md +18 -1
  3. package/lib/app/app.js +2 -1
  4. package/lib/app/app.stories.js +2 -1
  5. package/lib/assets/icons/arrow.svg +1 -0
  6. package/lib/assets/icons/cancel.svg +1 -0
  7. package/lib/assets/icons/clock.svg +1 -0
  8. package/lib/assets/icons/close.svg +1 -0
  9. package/lib/assets/icons/commit.svg +1 -0
  10. package/lib/assets/icons/filter.svg +1 -0
  11. package/lib/assets/icons/help.svg +1 -0
  12. package/lib/assets/icons/menu.svg +1 -0
  13. package/lib/{ui/icon/assets → assets/icons}/sort.svg +0 -0
  14. package/lib/assets/icons/warning.svg +1 -0
  15. package/lib/assets/icons.svg +1 -0
  16. package/lib/components/bundle-assets/bundle-assets.constants.js +1 -1
  17. package/lib/components/bundle-assets/bundle-assets.js +3 -3
  18. package/lib/components/bundle-assets/bundle-assets.stories.js +19 -7
  19. package/lib/components/bundle-assets/bundle-assets.utils.js +95 -28
  20. package/lib/components/bundle-assets/index.js +115 -4
  21. package/lib/components/bundle-modules/bundle-modules.constants.js +1 -1
  22. package/lib/components/bundle-modules/bundle-modules.js +3 -3
  23. package/lib/components/bundle-modules/bundle-modules.utils.js +152 -0
  24. package/lib/components/bundle-modules/index.js +135 -4
  25. package/lib/components/bundle-packages/bundle-packages.constants.js +1 -1
  26. package/lib/components/bundle-packages/bundle-packages.js +27 -7
  27. package/lib/components/bundle-packages/bundle-packages.module.css +5 -0
  28. package/lib/components/bundle-packages/{bundle-packages.container.js → bundle-packages.utils.js} +8 -42
  29. package/lib/components/bundle-packages/index.js +111 -3
  30. package/lib/components/duplicate-packages-warning/duplicate-packages-warning.js +7 -4
  31. package/lib/components/duplicate-packages-warning/duplicate-packages-warning.stories.js +4 -3
  32. package/lib/components/index.js +18 -18
  33. package/lib/components/metrics-table/metrics-table.js +3 -7
  34. package/lib/components/metrics-table-search/metrics-table-search.js +2 -1
  35. package/lib/components/metrics-table-search/metrics-table-search.module.css +2 -1
  36. package/lib/constants.js +1 -1
  37. package/lib/hooks/rows-filter.js +28 -0
  38. package/lib/hooks/rows-sort.js +54 -0
  39. package/lib/{hocs/with-search.js → hooks/search-params.js} +15 -64
  40. package/lib/layout/index.js +8 -8
  41. package/lib/ui/icon/icon.js +4 -191
  42. package/lib/ui/logo/logo.constants.js +1 -1
  43. package/lib/ui/popover/popover.js +3 -1
  44. package/lib/ui/popover/popover.module.css +3 -3
  45. package/lib/ui/sort-dropdown/sort-dropdown.js +12 -13
  46. package/lib/ui/sort-dropdown/sort-dropdown.stories.js +2 -2
  47. package/lib/ui/tooltip/tooltip.js +2 -1
  48. package/lib-esm/app/app.js +89 -108
  49. package/lib-esm/app/app.stories.js +50 -70
  50. package/lib-esm/app/header/header.js +19 -20
  51. package/lib-esm/assets/icons/arrow.svg +1 -0
  52. package/lib-esm/assets/icons/cancel.svg +1 -0
  53. package/lib-esm/assets/icons/clock.svg +1 -0
  54. package/lib-esm/assets/icons/close.svg +1 -0
  55. package/lib-esm/assets/icons/commit.svg +1 -0
  56. package/lib-esm/assets/icons/filter.svg +1 -0
  57. package/lib-esm/assets/icons/help.svg +1 -0
  58. package/lib-esm/assets/icons/menu.svg +1 -0
  59. package/lib-esm/{ui/icon/assets → assets/icons}/sort.svg +0 -0
  60. package/lib-esm/assets/icons/warning.svg +1 -0
  61. package/lib-esm/assets/icons.svg +1 -0
  62. package/lib-esm/components/asset-info/asset-info.js +20 -18
  63. package/lib-esm/components/asset-info/asset-info.stories.js +29 -33
  64. package/lib-esm/components/browsertime-table/browsertime-table.js +6 -4
  65. package/lib-esm/components/browsertime-table/browsertime-table.stories.js +9 -13
  66. package/lib-esm/components/bundle-assets/bundle-assets.constants.js +17 -15
  67. package/lib-esm/components/bundle-assets/bundle-assets.js +148 -151
  68. package/lib-esm/components/bundle-assets/bundle-assets.stories.js +58 -63
  69. package/lib-esm/components/bundle-assets/bundle-assets.utils.js +65 -21
  70. package/lib-esm/components/bundle-assets/index.js +89 -2
  71. package/lib-esm/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.js +46 -51
  72. package/lib-esm/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.stories.js +9 -13
  73. package/lib-esm/components/bundle-assets-totals-table/bundle-assets-totals-table.js +13 -13
  74. package/lib-esm/components/bundle-assets-totals-table/bundle-assets-totals-table.stories.js +13 -19
  75. package/lib-esm/components/bundle-modules/bundle-modules.constants.js +17 -15
  76. package/lib-esm/components/bundle-modules/bundle-modules.js +120 -133
  77. package/lib-esm/components/bundle-modules/bundle-modules.stories.js +46 -58
  78. package/lib-esm/components/bundle-modules/bundle-modules.utils.js +95 -0
  79. package/lib-esm/components/bundle-modules/index.js +111 -3
  80. package/lib-esm/components/bundle-packages/bundle-packages.constants.js +17 -15
  81. package/lib-esm/components/bundle-packages/bundle-packages.js +81 -77
  82. package/lib-esm/components/bundle-packages/bundle-packages.module.css +5 -0
  83. package/lib-esm/components/bundle-packages/bundle-packages.stories.js +34 -46
  84. package/lib-esm/components/bundle-packages/bundle-packages.utils.js +44 -0
  85. package/lib-esm/components/bundle-packages/index.js +87 -2
  86. package/lib-esm/components/component-link.js +9 -13
  87. package/lib-esm/components/delta/delta.js +7 -6
  88. package/lib-esm/components/delta/delta.stories.js +26 -38
  89. package/lib-esm/components/duplicate-packages-warning/duplicate-packages-warning.js +15 -10
  90. package/lib-esm/components/duplicate-packages-warning/duplicate-packages-warning.stories.js +20 -25
  91. package/lib-esm/components/job-header/job-header.js +14 -11
  92. package/lib-esm/components/job-header/job-header.stories.js +12 -18
  93. package/lib-esm/components/job-meta/job-meta.js +14 -18
  94. package/lib-esm/components/job-meta/job-meta.stories.js +10 -12
  95. package/lib-esm/components/job-name/job-name.js +11 -17
  96. package/lib-esm/components/job-name/job-name.stories.js +15 -23
  97. package/lib-esm/components/jobs-header/jobs-header.js +12 -12
  98. package/lib-esm/components/jobs-header/jobs-header.stories.js +80 -86
  99. package/lib-esm/components/lighthouse-table/lighthouse-table.js +6 -4
  100. package/lib-esm/components/lighthouse-table/lighthouse-table.stories.js +10 -14
  101. package/lib-esm/components/metric/metric.js +14 -19
  102. package/lib-esm/components/metric/metric.stories.js +36 -58
  103. package/lib-esm/components/metrics-table/metrics-table.js +128 -143
  104. package/lib-esm/components/metrics-table/metrics-table.stories.js +27 -35
  105. package/lib-esm/components/metrics-table-options/metrics-table-options.js +15 -20
  106. package/lib-esm/components/metrics-table-options/metrics-table-options.stories.js +6 -12
  107. package/lib-esm/components/metrics-table-search/metrics-table-search.js +17 -18
  108. package/lib-esm/components/metrics-table-search/metrics-table-search.module.css +2 -1
  109. package/lib-esm/components/metrics-table-search/metrics-table-search.stories.js +4 -9
  110. package/lib-esm/components/metrics-table-title/metrics-table-title.js +9 -7
  111. package/lib-esm/components/module-info/module-info.js +15 -13
  112. package/lib-esm/components/module-info/module-info.stories.js +20 -22
  113. package/lib-esm/components/summary/summary.js +38 -52
  114. package/lib-esm/components/summary/summary.stories.js +28 -46
  115. package/lib-esm/components/summary-item/summary-item.js +25 -29
  116. package/lib-esm/components/summary-item/summary-item.stories.js +40 -50
  117. package/lib-esm/components/total-size-type-title/total-size-type-title.js +14 -15
  118. package/lib-esm/constants.js +25 -30
  119. package/lib-esm/hooks/rows-filter.js +19 -0
  120. package/lib-esm/hooks/rows-sort.js +21 -0
  121. package/lib-esm/hooks/search-params.js +166 -0
  122. package/lib-esm/layout/box/box.js +12 -19
  123. package/lib-esm/layout/box/box.stories.js +34 -46
  124. package/lib-esm/layout/flex-stack/flex-stack.js +9 -12
  125. package/lib-esm/layout/flex-stack/flex-stack.stories.js +39 -49
  126. package/lib-esm/layout/footer/footer.js +34 -37
  127. package/lib-esm/layout/footer/footer.stories.js +7 -11
  128. package/lib-esm/layout/header/header.js +17 -24
  129. package/lib-esm/layout/header/header.stories.js +34 -43
  130. package/lib-esm/layout/stack/stack.js +8 -6
  131. package/lib-esm/layout/stack/stack.stories.js +39 -49
  132. package/lib-esm/layout/sub-header/sub-header.js +14 -12
  133. package/lib-esm/layout/sub-header/sub-header.stories.js +57 -69
  134. package/lib-esm/prototypes/typography.stories.js +48 -58
  135. package/lib-esm/query-state.js +13 -16
  136. package/lib-esm/stories/wrapper.js +14 -26
  137. package/lib-esm/ui/alert/alert.js +6 -4
  138. package/lib-esm/ui/alert/alert.stories.js +14 -24
  139. package/lib-esm/ui/container/container.js +9 -15
  140. package/lib-esm/ui/container/container.stories.js +15 -17
  141. package/lib-esm/ui/dropdown/dropdown.js +13 -11
  142. package/lib-esm/ui/dropdown/dropdown.stories.js +19 -26
  143. package/lib-esm/ui/empty-set/empty-set.js +12 -12
  144. package/lib-esm/ui/empty-set/empty-set.stories.js +11 -19
  145. package/lib-esm/ui/file-name/file-name.js +7 -8
  146. package/lib-esm/ui/file-name/file-name.stories.js +12 -16
  147. package/lib-esm/ui/filters/filters.container.js +52 -77
  148. package/lib-esm/ui/filters/filters.js +61 -89
  149. package/lib-esm/ui/filters/filters.stories.js +81 -100
  150. package/lib-esm/ui/filters/filters.utils.js +24 -28
  151. package/lib-esm/ui/filters/index.js +1 -1
  152. package/lib-esm/ui/horizontal-bar-chart/horizontal-bar-chart.js +67 -78
  153. package/lib-esm/ui/horizontal-bar-chart/horizontal-bar-chart.stories.js +67 -77
  154. package/lib-esm/ui/icon/icon.js +14 -206
  155. package/lib-esm/ui/icon/icon.stories.js +16 -24
  156. package/lib-esm/ui/input/input.js +6 -10
  157. package/lib-esm/ui/input/input.stories.js +8 -12
  158. package/lib-esm/ui/loader/loader.js +7 -13
  159. package/lib-esm/ui/loader/loader.stories.js +5 -9
  160. package/lib-esm/ui/logo/logo.constants.js +6 -6
  161. package/lib-esm/ui/logo/logo.js +14 -15
  162. package/lib-esm/ui/logo/logo.stories.js +14 -28
  163. package/lib-esm/ui/panels/panels.js +14 -27
  164. package/lib-esm/ui/panels/panels.stories.js +14 -16
  165. package/lib-esm/ui/popover/popover.js +13 -10
  166. package/lib-esm/ui/popover/popover.module.css +3 -3
  167. package/lib-esm/ui/popover/popover.stories.js +7 -11
  168. package/lib-esm/ui/skeleton/skeleton.js +6 -9
  169. package/lib-esm/ui/skeleton/skeleton.stories.js +2 -4
  170. package/lib-esm/ui/sort-dropdown/sort-dropdown.js +36 -39
  171. package/lib-esm/ui/sort-dropdown/sort-dropdown.stories.js +14 -16
  172. package/lib-esm/ui/table/table.js +25 -31
  173. package/lib-esm/ui/table/table.stories.js +84 -102
  174. package/lib-esm/ui/tabs/tabs.js +14 -25
  175. package/lib-esm/ui/tabs/tabs.stories.js +4 -6
  176. package/lib-esm/ui/toolbar/toolbar.js +7 -5
  177. package/lib-esm/ui/toolbar/toolbar.stories.js +11 -16
  178. package/lib-esm/ui/tooltip/tooltip.js +15 -17
  179. package/lib-esm/ui/tooltip/tooltip.stories.js +8 -12
  180. package/lib-esm/utils.js +15 -28
  181. package/package.json +19 -27
  182. package/src/app/app.jsx +4 -1
  183. package/src/assets/icons/arrow.svg +1 -0
  184. package/src/assets/icons/cancel.svg +1 -0
  185. package/src/assets/icons/clock.svg +1 -0
  186. package/src/assets/icons/close.svg +1 -0
  187. package/src/assets/icons/commit.svg +1 -0
  188. package/src/assets/icons/filter.svg +1 -0
  189. package/src/assets/icons/help.svg +1 -0
  190. package/src/assets/icons/menu.svg +1 -0
  191. package/src/{ui/icon/assets → assets/icons}/sort.svg +0 -0
  192. package/src/assets/icons/warning.svg +1 -0
  193. package/src/assets/icons.svg +1 -0
  194. package/src/components/bundle-assets/bundle-assets.jsx +3 -3
  195. package/src/components/bundle-assets/bundle-assets.utils.js +96 -17
  196. package/src/components/bundle-assets/index.jsx +89 -0
  197. package/src/components/bundle-modules/bundle-modules.jsx +3 -3
  198. package/src/components/bundle-modules/bundle-modules.utils.js +101 -0
  199. package/src/components/bundle-modules/index.jsx +107 -0
  200. package/src/components/bundle-packages/bundle-packages.jsx +21 -8
  201. package/src/components/bundle-packages/bundle-packages.module.css +5 -0
  202. package/src/components/bundle-packages/bundle-packages.utils.js +47 -0
  203. package/src/components/bundle-packages/index.jsx +84 -0
  204. package/src/components/duplicate-packages-warning/duplicate-packages-warning.jsx +9 -2
  205. package/src/components/metrics-table/metrics-table.jsx +2 -7
  206. package/src/components/metrics-table-search/metrics-table-search.jsx +1 -0
  207. package/src/components/metrics-table-search/metrics-table-search.module.css +2 -1
  208. package/src/hooks/rows-filter.js +16 -0
  209. package/src/hooks/rows-sort.js +24 -0
  210. package/src/hooks/search-params.js +153 -0
  211. package/src/ui/icon/icon.jsx +7 -42
  212. package/src/ui/popover/popover.jsx +1 -1
  213. package/src/ui/popover/popover.module.css +3 -3
  214. package/src/ui/sort-dropdown/sort-dropdown.jsx +11 -11
  215. package/src/ui/tooltip/tooltip.jsx +1 -1
  216. package/lib/components/bundle-assets/bundle-assets.container.js +0 -140
  217. package/lib/components/bundle-modules/bundle-modules.container.js +0 -222
  218. package/lib/hocs/with-custom-sort.js +0 -75
  219. package/lib/hocs/with-filtered-items.js +0 -54
  220. package/lib/ui/icon/assets/arrow.svg +0 -4
  221. package/lib/ui/icon/assets/branch.svg +0 -3
  222. package/lib/ui/icon/assets/cancel.svg +0 -4
  223. package/lib/ui/icon/assets/clock.svg +0 -3
  224. package/lib/ui/icon/assets/close.svg +0 -4
  225. package/lib/ui/icon/assets/commit.svg +0 -3
  226. package/lib/ui/icon/assets/filter.svg +0 -4
  227. package/lib/ui/icon/assets/help.svg +0 -4
  228. package/lib/ui/icon/assets/job.svg +0 -3
  229. package/lib/ui/icon/assets/menu.svg +0 -4
  230. package/lib/ui/icon/assets/package.svg +0 -3
  231. package/lib/ui/icon/assets/pull-request.svg +0 -3
  232. package/lib/ui/icon/assets/repository.svg +0 -3
  233. package/lib/ui/icon/assets/warning.svg +0 -4
  234. package/lib-esm/components/bundle-assets/bundle-assets.container.js +0 -119
  235. package/lib-esm/components/bundle-modules/bundle-modules.container.js +0 -175
  236. package/lib-esm/components/bundle-packages/bundle-packages.container.js +0 -91
  237. package/lib-esm/hocs/with-custom-sort.js +0 -43
  238. package/lib-esm/hocs/with-filtered-items.js +0 -35
  239. package/lib-esm/hocs/with-search.js +0 -214
  240. package/lib-esm/ui/icon/assets/arrow.svg +0 -4
  241. package/lib-esm/ui/icon/assets/branch.svg +0 -3
  242. package/lib-esm/ui/icon/assets/cancel.svg +0 -4
  243. package/lib-esm/ui/icon/assets/clock.svg +0 -3
  244. package/lib-esm/ui/icon/assets/close.svg +0 -4
  245. package/lib-esm/ui/icon/assets/commit.svg +0 -3
  246. package/lib-esm/ui/icon/assets/filter.svg +0 -4
  247. package/lib-esm/ui/icon/assets/help.svg +0 -4
  248. package/lib-esm/ui/icon/assets/job.svg +0 -3
  249. package/lib-esm/ui/icon/assets/menu.svg +0 -4
  250. package/lib-esm/ui/icon/assets/package.svg +0 -3
  251. package/lib-esm/ui/icon/assets/pull-request.svg +0 -3
  252. package/lib-esm/ui/icon/assets/repository.svg +0 -3
  253. package/lib-esm/ui/icon/assets/warning.svg +0 -4
  254. package/src/components/bundle-assets/bundle-assets.container.js +0 -146
  255. package/src/components/bundle-assets/index.js +0 -4
  256. package/src/components/bundle-modules/bundle-modules.container.js +0 -158
  257. package/src/components/bundle-modules/index.js +0 -4
  258. package/src/components/bundle-packages/bundle-packages.container.js +0 -93
  259. package/src/components/bundle-packages/index.js +0 -4
  260. package/src/hocs/with-custom-sort.jsx +0 -35
  261. package/src/hocs/with-filtered-items.jsx +0 -34
  262. package/src/hocs/with-search.jsx +0 -184
  263. package/src/ui/icon/assets/arrow.svg +0 -4
  264. package/src/ui/icon/assets/branch.svg +0 -3
  265. package/src/ui/icon/assets/cancel.svg +0 -4
  266. package/src/ui/icon/assets/clock.svg +0 -3
  267. package/src/ui/icon/assets/close.svg +0 -4
  268. package/src/ui/icon/assets/commit.svg +0 -3
  269. package/src/ui/icon/assets/filter.svg +0 -4
  270. package/src/ui/icon/assets/help.svg +0 -4
  271. package/src/ui/icon/assets/job.svg +0 -3
  272. package/src/ui/icon/assets/menu.svg +0 -4
  273. package/src/ui/icon/assets/package.svg +0 -3
  274. package/src/ui/icon/assets/pull-request.svg +0 -3
  275. package/src/ui/icon/assets/repository.svg +0 -3
  276. package/src/ui/icon/assets/warning.svg +0 -4
@@ -2,16 +2,8 @@ import _map from "lodash/map";
2
2
  import _isEmpty from "lodash/isEmpty";
3
3
  import _get from "lodash/get";
4
4
 
5
- var _PropTypes$shape;
6
-
7
5
  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); }
8
6
 
9
- 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; }
10
-
11
- 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; }
12
-
13
- 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; }
14
-
15
7
  import React, { useCallback, useMemo, useState } from 'react';
16
8
  import PropTypes from 'prop-types';
17
9
  import cx from 'classnames';
@@ -33,22 +25,17 @@ import { MetricsTableTitle } from '../metrics-table-title';
33
25
  import { ModuleInfo } from '../module-info';
34
26
  import css from './bundle-modules.module.css';
35
27
 
36
- var RowHeader = function RowHeader(_ref) {
37
- var row = _ref.row,
38
- chunks = _ref.chunks,
39
- labels = _ref.labels,
40
- CustomComponentLink = _ref.CustomComponentLink;
41
-
42
- var chunkIds = _map(chunks, 'id');
28
+ const RowHeader = ({
29
+ row,
30
+ chunks,
31
+ labels,
32
+ CustomComponentLink
33
+ }) => {
34
+ const chunkIds = _map(chunks, 'id');
43
35
 
44
- var _useState = useState(false),
45
- showPopopver = _useState[0],
46
- setPopover = _useState[1];
47
-
48
- var handleOnMouseEnter = useCallback(function () {
49
- return setPopover(true);
50
- }, [showPopopver]);
51
- var content = /*#__PURE__*/React.createElement(FileName, {
36
+ const [showPopopver, setPopover] = useState(false);
37
+ const handleOnMouseEnter = useCallback(() => setPopover(true), [showPopopver]);
38
+ const content = /*#__PURE__*/React.createElement(FileName, {
52
39
  name: row.label
53
40
  });
54
41
  return /*#__PURE__*/React.createElement("div", {
@@ -56,18 +43,17 @@ var RowHeader = function RowHeader(_ref) {
56
43
  }, !showPopopver ? content : /*#__PURE__*/React.createElement(Popover, {
57
44
  ariaLabel: "View module info",
58
45
  label: content
59
- }, function (_ref2) {
60
- var popoverToggle = _ref2.popoverToggle;
61
- return /*#__PURE__*/React.createElement(ModuleInfo, {
62
- className: css.namePopover,
63
- item: row,
64
- chunks: chunks,
65
- chunkIds: chunkIds,
66
- labels: labels,
67
- customComponentLink: CustomComponentLink,
68
- onClick: popoverToggle
69
- });
70
- }));
46
+ }, ({
47
+ popoverToggle
48
+ }) => /*#__PURE__*/React.createElement(ModuleInfo, {
49
+ className: css.namePopover,
50
+ item: row,
51
+ chunks: chunks,
52
+ chunkIds: chunkIds,
53
+ labels: labels,
54
+ customComponentLink: CustomComponentLink,
55
+ onClick: popoverToggle
56
+ })));
71
57
  };
72
58
 
73
59
  RowHeader.propTypes = {
@@ -85,109 +71,108 @@ RowHeader.defaultProps = {
85
71
  chunks: []
86
72
  };
87
73
 
88
- var getRenderRowHeader = function getRenderRowHeader(_ref3) {
89
- var labels = _ref3.labels,
90
- chunks = _ref3.chunks,
91
- CustomComponentLink = _ref3.CustomComponentLink;
92
- return function (row) {
93
- return /*#__PURE__*/React.createElement(RowHeader, {
94
- row: row,
95
- chunks: chunks,
96
- labels: labels,
97
- CustomComponentLink: CustomComponentLink
98
- });
99
- };
100
- };
101
-
102
- export var BundleModules = function BundleModules(_ref4) {
103
- var _MODULE_SOURCE_TYPE, _objectSpread2, _ref6, _objectSpread5;
74
+ const getRenderRowHeader = ({
75
+ labels,
76
+ chunks,
77
+ CustomComponentLink
78
+ }) => row => /*#__PURE__*/React.createElement(RowHeader, {
79
+ row: row,
80
+ chunks: chunks,
81
+ labels: labels,
82
+ CustomComponentLink: CustomComponentLink
83
+ });
104
84
 
105
- var className = _ref4.className,
106
- jobs = _ref4.jobs,
107
- items = _ref4.items,
108
- chunks = _ref4.chunks,
109
- totalRowCount = _ref4.totalRowCount,
110
- updateFilters = _ref4.updateFilters,
111
- resetFilters = _ref4.resetFilters,
112
- resetAllFilters = _ref4.resetAllFilters,
113
- filters = _ref4.filters,
114
- sortItems = _ref4.sortItems,
115
- sort = _ref4.sort,
116
- updateSort = _ref4.updateSort,
117
- search = _ref4.search,
118
- updateSearch = _ref4.updateSearch,
119
- hasActiveFilters = _ref4.hasActiveFilters,
120
- CustomComponentLink = _ref4.customComponentLink;
121
- var rootClassName = cx(css.root, className);
122
- var labels = useMemo(function () {
123
- return _map(jobs, 'label');
124
- }, [jobs]);
125
- var renderRowHeader = useMemo(function () {
126
- return getRenderRowHeader({
127
- labels: labels,
128
- chunks: chunks,
129
- CustomComponentLink: CustomComponentLink
130
- });
131
- }, [labels, chunks]);
132
- var emptyMessage = /*#__PURE__*/React.createElement(EmptySet, {
85
+ export const BundleModules = ({
86
+ className,
87
+ jobs,
88
+ items,
89
+ chunks,
90
+ totalRowCount,
91
+ updateFilters,
92
+ resetFilters,
93
+ resetAllFilters,
94
+ filters,
95
+ sortFields,
96
+ sort,
97
+ updateSort,
98
+ search,
99
+ updateSearch,
100
+ hasActiveFilters,
101
+ customComponentLink: CustomComponentLink
102
+ }) => {
103
+ const rootClassName = cx(css.root, className);
104
+ const labels = useMemo(() => _map(jobs, 'label'), [jobs]);
105
+ const renderRowHeader = useMemo(() => getRenderRowHeader({
106
+ labels,
107
+ chunks,
108
+ CustomComponentLink
109
+ }), [labels, chunks]);
110
+ const emptyMessage = /*#__PURE__*/React.createElement(EmptySet, {
133
111
  resources: "modules",
134
112
  filtered: totalRowCount !== 0,
135
113
  handleResetFilters: resetFilters,
136
114
  handleViewAll: resetAllFilters
137
115
  });
138
-
139
- var dropdownFilters = _objectSpread(_objectSpread((_objectSpread2 = {}, _objectSpread2[MODULE_FILTERS.CHANGED] = {
140
- label: 'Changed',
141
- defaultValue: filters.changed,
142
- disabled: jobs.length <= 1
143
- }, _objectSpread2[MODULE_SOURCE_TYPE] = (_MODULE_SOURCE_TYPE = {
144
- label: 'Source'
145
- }, _MODULE_SOURCE_TYPE[MODULE_FILTERS.FIRST_PARTY] = {
146
- label: 'First party',
147
- defaultValue: _get(filters, MODULE_SOURCE_TYPE + "." + MODULE_FILTERS.FIRST_PARTY, true)
148
- }, _MODULE_SOURCE_TYPE[MODULE_FILTERS.THIRD_PARTY] = {
149
- label: 'Third party',
150
- defaultValue: _get(filters, MODULE_SOURCE_TYPE + "." + MODULE_FILTERS.THIRD_PARTY, true)
151
- }, _MODULE_SOURCE_TYPE), _objectSpread2), !_isEmpty(chunks) && (_ref6 = {}, _ref6[MODULE_CHUNK] = _objectSpread({
152
- label: 'Chunk'
153
- }, chunks.reduce(function (chunkFilters, _ref5) {
154
- var _objectSpread3;
155
-
156
- var id = _ref5.id,
157
- name = _ref5.name;
158
- return _objectSpread(_objectSpread({}, chunkFilters), {}, (_objectSpread3 = {}, _objectSpread3[id] = {
159
- label: name,
160
- defaultValue: _get(filters, MODULE_CHUNK + "." + id, true)
161
- }, _objectSpread3));
162
- }, {})), _ref6)), {}, (_objectSpread5 = {}, _objectSpread5[MODULE_FILE_TYPE] = _objectSpread({
163
- label: 'File type'
164
- }, MODULE_SOURCE_FILE_TYPES.reduce(function (agg, fileType) {
165
- var _objectSpread4;
166
-
167
- return _objectSpread(_objectSpread({}, agg), {}, (_objectSpread4 = {}, _objectSpread4[fileType] = {
168
- label: FILE_TYPE_LABELS[fileType],
169
- defaultValue: _get(filters, MODULE_FILE_TYPE + "." + fileType, true)
170
- }, _objectSpread4));
171
- }, {})), _objectSpread5));
172
-
116
+ const dropdownFilters = {
117
+ [MODULE_FILTERS.CHANGED]: {
118
+ label: 'Changed',
119
+ defaultValue: filters.changed,
120
+ disabled: jobs.length <= 1
121
+ },
122
+ [MODULE_SOURCE_TYPE]: {
123
+ label: 'Source',
124
+ [MODULE_FILTERS.FIRST_PARTY]: {
125
+ label: 'First party',
126
+ defaultValue: _get(filters, `${MODULE_SOURCE_TYPE}.${MODULE_FILTERS.FIRST_PARTY}`, true)
127
+ },
128
+ [MODULE_FILTERS.THIRD_PARTY]: {
129
+ label: 'Third party',
130
+ defaultValue: _get(filters, `${MODULE_SOURCE_TYPE}.${MODULE_FILTERS.THIRD_PARTY}`, true)
131
+ }
132
+ },
133
+ // When chunks data available, list available chunks as filters
134
+ ...(!_isEmpty(chunks) && {
135
+ [MODULE_CHUNK]: {
136
+ label: 'Chunk',
137
+ ...chunks.reduce((chunkFilters, {
138
+ id,
139
+ name
140
+ }) => ({ ...chunkFilters,
141
+ [id]: {
142
+ label: name,
143
+ defaultValue: _get(filters, `${MODULE_CHUNK}.${id}`, true)
144
+ }
145
+ }), {})
146
+ }
147
+ }),
148
+ // Module source types
149
+ [MODULE_FILE_TYPE]: {
150
+ label: 'File type',
151
+ ...MODULE_SOURCE_FILE_TYPES.reduce((agg, fileType) => ({ ...agg,
152
+ [fileType]: {
153
+ label: FILE_TYPE_LABELS[fileType],
154
+ defaultValue: _get(filters, `${MODULE_FILE_TYPE}.${fileType}`, true)
155
+ }
156
+ }), {})
157
+ }
158
+ };
173
159
  return /*#__PURE__*/React.createElement("div", {
174
160
  className: rootClassName
175
161
  }, /*#__PURE__*/React.createElement(Toolbar, {
176
162
  className: css.toolbar,
177
- renderActions: function renderActions(_ref7) {
178
- var actionClassName = _ref7.actionClassName;
179
- return /*#__PURE__*/React.createElement(FlexStack, {
180
- space: "xxsmall",
181
- className: cx(css.dropdown, actionClassName)
182
- }, /*#__PURE__*/React.createElement(SortDropdown, _extends({
183
- className: css.tableDropdown,
184
- items: sortItems,
185
- onChange: updateSort
186
- }, sort)), /*#__PURE__*/React.createElement(MetricsTableOptions, {
187
- handleViewAll: resetAllFilters,
188
- handleResetFilters: resetFilters
189
- }));
190
- }
163
+ renderActions: ({
164
+ actionClassName
165
+ }) => /*#__PURE__*/React.createElement(FlexStack, {
166
+ space: "xxsmall",
167
+ className: cx(css.dropdown, actionClassName)
168
+ }, /*#__PURE__*/React.createElement(SortDropdown, _extends({
169
+ className: css.tableDropdown,
170
+ fields: sortFields,
171
+ onChange: updateSort
172
+ }, sort)), /*#__PURE__*/React.createElement(MetricsTableOptions, {
173
+ handleViewAll: resetAllFilters,
174
+ handleResetFilters: resetFilters
175
+ }))
191
176
  }, /*#__PURE__*/React.createElement(FlexStack, null, /*#__PURE__*/React.createElement(MetricsTableSearch, {
192
177
  className: css.toolbarSearch,
193
178
  search: search,
@@ -207,7 +192,7 @@ export var BundleModules = function BundleModules(_ref4) {
207
192
  showHeaderSum: true,
208
193
  title: /*#__PURE__*/React.createElement(MetricsTableTitle, {
209
194
  title: I18N.MODULES,
210
- info: "(" + items.length + "/" + totalRowCount + ")",
195
+ info: `(${items.length}/${totalRowCount})`,
211
196
  popoverInfo: I18N.MODULES_INFO,
212
197
  popoverHref: config.documentation.modules
213
198
  })
@@ -254,10 +239,12 @@ BundleModules.propTypes = {
254
239
  changed: PropTypes.bool
255
240
  }).isRequired,
256
241
  hasActiveFilters: PropTypes.bool,
257
- sortItems: PropTypes.shape((_PropTypes$shape = {}, _PropTypes$shape[PropTypes.string] = PropTypes.shape({
258
- label: PropTypes.string,
259
- defaultDirection: PropTypes.bool
260
- }), _PropTypes$shape)).isRequired,
242
+ sortFields: PropTypes.shape({
243
+ [PropTypes.string]: PropTypes.shape({
244
+ label: PropTypes.string,
245
+ defaultDirection: PropTypes.bool
246
+ })
247
+ }).isRequired,
261
248
  sort: PropTypes.shape({
262
249
  sortBy: PropTypes.string,
263
250
  direction: PropTypes.string
@@ -6,7 +6,10 @@ import currentStatsFixtures from '../../../__mocks__/webpack-stats.current.json'
6
6
  import { getWrapperDecorator } from '../../stories';
7
7
  import { BundleModules } from '.'; // Limit the side of the modules when not in dev mode (chromatic limit, snapshot too large)
8
8
 
9
- var _ref = process.env.NODE_ENV !== 'development' ? {
9
+ const {
10
+ baselineStats,
11
+ currentStats
12
+ } = process.env.NODE_ENV !== 'development' ? {
10
13
  // eslint-disable-next-line prefer-object-spread
11
14
  baselineStats: Object.assign({}, baselineStatsFixtures, {
12
15
  modules: baselineStatsFixtures.modules.slice(0, 100)
@@ -18,37 +21,28 @@ var _ref = process.env.NODE_ENV !== 'development' ? {
18
21
  } : {
19
22
  baselineStats: baselineStatsFixtures,
20
23
  currentStats: currentStatsFixtures
21
- },
22
- baselineStats = _ref.baselineStats,
23
- currentStats = _ref.currentStats;
24
-
25
- var JOBS = createJobs([{
24
+ };
25
+ const JOBS = createJobs([{
26
26
  webpack: currentStats
27
27
  }, {
28
28
  webpack: baselineStats
29
29
  }]);
30
- var stories = storiesOf('Components/BundleModules', module);
30
+ const stories = storiesOf('Components/BundleModules', module);
31
31
  stories.addDecorator(getWrapperDecorator());
32
- stories.add('default', function () {
33
- return /*#__PURE__*/React.createElement(BundleModules, {
34
- jobs: [JOBS[1]]
35
- });
36
- });
37
- stories.add('multiple jobs', function () {
38
- return /*#__PURE__*/React.createElement(BundleModules, {
39
- jobs: JOBS
40
- });
41
- });
42
- var JOBS_EMPTY_BASELINE = createJobs([{
32
+ stories.add('default', () => /*#__PURE__*/React.createElement(BundleModules, {
33
+ jobs: [JOBS[1]]
34
+ }));
35
+ stories.add('multiple jobs', () => /*#__PURE__*/React.createElement(BundleModules, {
36
+ jobs: JOBS
37
+ }));
38
+ const JOBS_EMPTY_BASELINE = createJobs([{
43
39
  webpack: currentStats
44
40
  }, null]);
45
- stories.add('empty baseline', function () {
46
- return /*#__PURE__*/React.createElement(BundleModules, {
47
- jobs: JOBS_EMPTY_BASELINE
48
- });
49
- }); // Module moved between chunks
41
+ stories.add('empty baseline', () => /*#__PURE__*/React.createElement(BundleModules, {
42
+ jobs: JOBS_EMPTY_BASELINE
43
+ })); // Module moved between chunks
50
44
 
51
- var JOBS_MOVED_MODULE = createJobs([{
45
+ const JOBS_MOVED_MODULE = createJobs([{
52
46
  webpack: {
53
47
  chunks: [{
54
48
  id: 1,
@@ -118,38 +112,32 @@ var JOBS_MOVED_MODULE = createJobs([{
118
112
  }]
119
113
  }
120
114
  }]);
121
- var chunkFiltersStories = storiesOf('Components/BundleModules/chunk filters', module);
115
+ const chunkFiltersStories = storiesOf('Components/BundleModules/chunk filters', module);
122
116
  chunkFiltersStories.addDecorator(getWrapperDecorator());
123
- chunkFiltersStories.add('chunk with module moved in', function () {
124
- return /*#__PURE__*/React.createElement(BundleModules, {
125
- filters: {
126
- changed: false,
127
- 'c.1': true,
128
- 'c.2': false,
129
- 'c.3': false
130
- },
131
- jobs: [].concat(JOBS_MOVED_MODULE)
132
- });
133
- });
134
- chunkFiltersStories.add('chunk with module moved out', function () {
135
- return /*#__PURE__*/React.createElement(BundleModules, {
136
- filters: {
137
- changed: false,
138
- 'c.1': false,
139
- 'c.2': true,
140
- 'c.3': false
141
- },
142
- jobs: [].concat(JOBS_MOVED_MODULE)
143
- });
144
- });
145
- chunkFiltersStories.add('removed chunk', function () {
146
- return /*#__PURE__*/React.createElement(BundleModules, {
147
- filters: {
148
- changed: false,
149
- 'c.1': false,
150
- 'c.2': false,
151
- 'c.3': true
152
- },
153
- jobs: [].concat(JOBS_MOVED_MODULE)
154
- });
155
- });
117
+ chunkFiltersStories.add('chunk with module moved in', () => /*#__PURE__*/React.createElement(BundleModules, {
118
+ filters: {
119
+ changed: false,
120
+ 'c.1': true,
121
+ 'c.2': false,
122
+ 'c.3': false
123
+ },
124
+ jobs: [...JOBS_MOVED_MODULE]
125
+ }));
126
+ chunkFiltersStories.add('chunk with module moved out', () => /*#__PURE__*/React.createElement(BundleModules, {
127
+ filters: {
128
+ changed: false,
129
+ 'c.1': false,
130
+ 'c.2': true,
131
+ 'c.3': false
132
+ },
133
+ jobs: [...JOBS_MOVED_MODULE]
134
+ }));
135
+ chunkFiltersStories.add('removed chunk', () => /*#__PURE__*/React.createElement(BundleModules, {
136
+ filters: {
137
+ changed: false,
138
+ 'c.1': false,
139
+ 'c.2': false,
140
+ 'c.3': true
141
+ },
142
+ jobs: [...JOBS_MOVED_MODULE]
143
+ }));
@@ -0,0 +1,95 @@
1
+ import _merge from "lodash/merge";
2
+ import _intersection from "lodash/intersection";
3
+ import _get from "lodash/get";
4
+ import { useMemo } from 'react';
5
+ import { MODULE_PATH_PACKAGES } from '@bundle-stats/utils/lib-esm/webpack';
6
+ import { MODULE_CHUNK, MODULE_FILTERS, MODULE_FILE_TYPE, MODULE_SOURCE_TYPE, getModuleSourceFileType } from '@bundle-stats/utils';
7
+ import { SORT_BY_NAME, SORT_BY_SIZE, SORT_BY_DELTA } from './bundle-modules.constants';
8
+ export const addRowSourceFlag = row => {
9
+ const {
10
+ key
11
+ } = row;
12
+ const thirdParty = Boolean(key.match(MODULE_PATH_PACKAGES));
13
+ return { ...row,
14
+ thirdParty
15
+ };
16
+ };
17
+ export const getCustomSort = sortBy => item => {
18
+ if (sortBy === SORT_BY_NAME) {
19
+ return item.key;
20
+ }
21
+
22
+ if (sortBy === SORT_BY_SIZE) {
23
+ return _get(item, 'runs[0].value', 0);
24
+ }
25
+
26
+ if (sortBy === SORT_BY_DELTA) {
27
+ return _get(item, 'runs[0].deltaPercentage', 0);
28
+ }
29
+
30
+ return [!item.changed, item.key];
31
+ };
32
+ export const getRowFilter = filters => row => {
33
+ // Skip not changed rows
34
+ if (filters[MODULE_FILTERS.CHANGED] && !row.changed) {
35
+ return false;
36
+ } // Skip not matching source type
37
+
38
+
39
+ if (!(filters[`${MODULE_SOURCE_TYPE}.${MODULE_FILTERS.FIRST_PARTY}`] && row.thirdParty === false || filters[`${MODULE_SOURCE_TYPE}.${MODULE_FILTERS.THIRD_PARTY}`] && row.thirdParty === true)) {
40
+ return false;
41
+ } // Skip not matching source file types
42
+
43
+
44
+ const fileType = getModuleSourceFileType(row.key);
45
+
46
+ if (!filters[`${MODULE_FILE_TYPE}.${fileType}`]) {
47
+ return false;
48
+ }
49
+
50
+ return true;
51
+ };
52
+ export const useModuleFilterByChunk = ({
53
+ jobs,
54
+ filters,
55
+ chunkIds
56
+ }) => {
57
+ const filteredJobs = useMemo(() => {
58
+ // List of chunkIds with filter value set to `true`
59
+ const includedChunkIds = chunkIds.reduce((agg, chunkId) => {
60
+ if (_get(filters, `${MODULE_CHUNK}.${chunkId}`)) {
61
+ return [...agg, chunkId];
62
+ }
63
+
64
+ return agg;
65
+ }, []); // If all the filters are included, return jobs as they are
66
+
67
+ if (includedChunkIds.length === chunkIds.length) {
68
+ return jobs;
69
+ }
70
+
71
+ const jobsWithFilteredData = jobs.map(job => {
72
+ var _job$metrics;
73
+
74
+ const {
75
+ modules
76
+ } = (job == null ? void 0 : (_job$metrics = job.metrics) == null ? void 0 : _job$metrics.webpack) || {};
77
+ const filteredModules = Object.entries(modules).reduce((agg, [moduleId, moduleEntry]) => {
78
+ const match = _intersection(moduleEntry.chunkIds, includedChunkIds);
79
+
80
+ if (match.length > 0) {
81
+ agg[moduleId] = moduleEntry; // eslint-disable-line no-param-reassign
82
+ }
83
+
84
+ return agg;
85
+ }, {}); // Copy job data into a new object to prevent mutations of the original data
86
+
87
+ const newJob = _merge({}, job);
88
+
89
+ newJob.metrics.webpack.modules = filteredModules;
90
+ return newJob;
91
+ });
92
+ return jobsWithFilteredData;
93
+ }, [jobs, filters, chunkIds]);
94
+ return filteredJobs;
95
+ };
@@ -1,3 +1,111 @@
1
- import enhance from './bundle-modules.container';
2
- import { BundleModules as Component } from './bundle-modules';
3
- export var BundleModules = enhance(Component);
1
+ import _map from "lodash/map";
2
+ import _uniqBy from "lodash/uniqBy";
3
+
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); }
5
+
6
+ import React, { useMemo } from 'react';
7
+ import PropTypes from 'prop-types';
8
+ import { getModuleChunkFilters, getModuleSourceTypeFilters, getModuleFileTypeFilters } from '@bundle-stats/utils';
9
+ import * as webpack from '@bundle-stats/utils/lib-esm/webpack';
10
+ import { useRowsFilter } from '../../hooks/rows-filter';
11
+ import { useRowsSort } from '../../hooks/rows-sort';
12
+ import { useSearchParams } from '../../hooks/search-params';
13
+ import { BundleModules as BundleModulesComponent } from './bundle-modules';
14
+ import { addRowSourceFlag, getRowFilter, getCustomSort, useModuleFilterByChunk } from './bundle-modules.utils';
15
+ import { SORT_BY } from './bundle-modules.constants';
16
+ export const BundleModules = props => {
17
+ const {
18
+ jobs,
19
+ filters,
20
+ search,
21
+ setState,
22
+ sortBy,
23
+ direction,
24
+ ...restProps
25
+ } = props;
26
+
27
+ const chunks = _uniqBy(jobs.map(job => {
28
+ var _job$meta, _job$meta$webpack;
29
+
30
+ return (job == null ? void 0 : (_job$meta = job.meta) == null ? void 0 : (_job$meta$webpack = _job$meta.webpack) == null ? void 0 : _job$meta$webpack.chunks) || [];
31
+ }).flat(), ({
32
+ id
33
+ }) => id);
34
+
35
+ const chunkIds = _map(chunks, 'id');
36
+
37
+ const {
38
+ defaultFilters,
39
+ allEntriesFilters
40
+ } = useMemo(() => ({
41
+ defaultFilters: {
42
+ changed: (jobs == null ? void 0 : jobs.length) > 1,
43
+ ...getModuleSourceTypeFilters(true),
44
+ ...getModuleChunkFilters(chunkIds, true),
45
+ ...getModuleFileTypeFilters(true)
46
+ },
47
+ allEntriesFilters: {
48
+ changed: false,
49
+ ...getModuleSourceTypeFilters(true),
50
+ ...getModuleChunkFilters(chunkIds, true),
51
+ ...getModuleFileTypeFilters(true)
52
+ }
53
+ }), [jobs]);
54
+ const searchParams = useSearchParams({
55
+ search,
56
+ filters,
57
+ defaultFilters,
58
+ allEntriesFilters,
59
+ setState
60
+ });
61
+ const filteredJobsByChunkIds = useModuleFilterByChunk({
62
+ jobs,
63
+ filters: searchParams.filters,
64
+ chunkIds
65
+ });
66
+ const {
67
+ rows,
68
+ totalRowCount
69
+ } = useMemo(() => {
70
+ const result = webpack.compareBySection.modules(filteredJobsByChunkIds, [addRowSourceFlag]);
71
+ return {
72
+ rows: result,
73
+ totalRowCount: result.length
74
+ };
75
+ }, [filteredJobsByChunkIds]);
76
+ const filteredRows = useRowsFilter({
77
+ rows,
78
+ searchPattern: searchParams.searchPattern,
79
+ filters: searchParams.filters,
80
+ getRowFilter
81
+ });
82
+ const sortParams = useRowsSort({
83
+ rows: filteredRows,
84
+ sortFields: SORT_BY,
85
+ sortBy,
86
+ sortDirection: direction,
87
+ getCustomSort
88
+ });
89
+ return /*#__PURE__*/React.createElement(BundleModulesComponent, _extends({
90
+ jobs: jobs,
91
+ chunks: chunks
92
+ }, restProps, searchParams, sortParams, {
93
+ totalRowCount: totalRowCount
94
+ }));
95
+ };
96
+ BundleModules.propTypes = {
97
+ jobs: PropTypes.arrayOf(PropTypes.object).isRequired,
98
+ // eslint-disable-line react/forbid-prop-types
99
+ filters: PropTypes.object,
100
+ // eslint-disable-line react/forbid-prop-types
101
+ search: PropTypes.string,
102
+ sortBy: PropTypes.string,
103
+ direction: PropTypes.string,
104
+ setState: PropTypes.func.isRequired
105
+ };
106
+ BundleModules.defaultProps = {
107
+ filters: undefined,
108
+ search: undefined,
109
+ sortBy: undefined,
110
+ direction: undefined
111
+ };