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

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 (266) hide show
  1. package/.babelrc.js +3 -3
  2. package/CHANGELOG.md +11 -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/browsertime-table/browsertime-table.stories.js +1 -0
  15. package/lib/components/bundle-assets/bundle-assets.js +3 -3
  16. package/lib/components/bundle-assets/bundle-assets.stories.js +19 -7
  17. package/lib/components/bundle-assets/bundle-assets.utils.js +95 -28
  18. package/lib/components/bundle-assets/index.js +115 -4
  19. package/lib/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.js +17 -18
  20. package/lib/components/bundle-modules/bundle-modules.js +3 -3
  21. package/lib/components/bundle-modules/bundle-modules.utils.js +152 -0
  22. package/lib/components/bundle-modules/index.js +135 -4
  23. package/lib/components/bundle-packages/bundle-packages.js +3 -3
  24. package/lib/components/bundle-packages/{bundle-packages.container.js → bundle-packages.utils.js} +8 -42
  25. package/lib/components/bundle-packages/index.js +111 -3
  26. package/lib/components/job-meta/job-meta.js +1 -1
  27. package/lib/components/metrics-table/metrics-table.js +3 -7
  28. package/lib/components/metrics-table-search/metrics-table-search.js +2 -1
  29. package/lib/components/metrics-table-search/metrics-table-search.module.css +2 -1
  30. package/lib/components/summary/summary.js +52 -34
  31. package/lib/hooks/rows-filter.js +28 -0
  32. package/lib/hooks/rows-sort.js +54 -0
  33. package/lib/{hocs/with-search.js → hooks/search-params.js} +16 -65
  34. package/lib/layout/box/box.js +2 -2
  35. package/lib/layout/stack/stack.js +13 -3
  36. package/lib/ui/icon/icon.js +4 -191
  37. package/lib/ui/sort-dropdown/sort-dropdown.js +12 -13
  38. package/lib/ui/sort-dropdown/sort-dropdown.stories.js +2 -2
  39. package/lib/utils.js +6 -3
  40. package/lib-esm/app/app.js +60 -70
  41. package/lib-esm/app/app.stories.js +50 -71
  42. package/lib-esm/app/header/header.js +5 -3
  43. package/lib-esm/assets/icons/arrow.svg +1 -0
  44. package/lib-esm/assets/icons/cancel.svg +1 -0
  45. package/lib-esm/assets/icons/clock.svg +1 -0
  46. package/lib-esm/assets/icons/close.svg +1 -0
  47. package/lib-esm/assets/icons/commit.svg +1 -0
  48. package/lib-esm/assets/icons/filter.svg +1 -0
  49. package/lib-esm/assets/icons/help.svg +1 -0
  50. package/lib-esm/assets/icons/menu.svg +1 -0
  51. package/lib-esm/{ui/icon/assets → assets/icons}/sort.svg +0 -0
  52. package/lib-esm/assets/icons/warning.svg +1 -0
  53. package/lib-esm/assets/icons.svg +1 -0
  54. package/lib-esm/components/asset-info/asset-info.js +21 -17
  55. package/lib-esm/components/asset-info/asset-info.stories.js +29 -33
  56. package/lib-esm/components/browsertime-table/browsertime-table.js +6 -4
  57. package/lib-esm/components/browsertime-table/browsertime-table.stories.js +11 -14
  58. package/lib-esm/components/bundle-assets/bundle-assets.constants.js +17 -15
  59. package/lib-esm/components/bundle-assets/bundle-assets.js +107 -97
  60. package/lib-esm/components/bundle-assets/bundle-assets.stories.js +58 -63
  61. package/lib-esm/components/bundle-assets/bundle-assets.utils.js +65 -21
  62. package/lib-esm/components/bundle-assets/index.js +89 -2
  63. package/lib-esm/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.js +51 -53
  64. package/lib-esm/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.stories.js +9 -13
  65. package/lib-esm/components/bundle-assets-totals-table/bundle-assets-totals-table.js +14 -13
  66. package/lib-esm/components/bundle-assets-totals-table/bundle-assets-totals-table.stories.js +13 -19
  67. package/lib-esm/components/bundle-modules/bundle-modules.constants.js +17 -15
  68. package/lib-esm/components/bundle-modules/bundle-modules.js +112 -110
  69. package/lib-esm/components/bundle-modules/bundle-modules.stories.js +46 -58
  70. package/lib-esm/components/bundle-modules/bundle-modules.utils.js +98 -0
  71. package/lib-esm/components/bundle-modules/index.js +114 -3
  72. package/lib-esm/components/bundle-packages/bundle-packages.constants.js +17 -15
  73. package/lib-esm/components/bundle-packages/bundle-packages.js +71 -69
  74. package/lib-esm/components/bundle-packages/bundle-packages.stories.js +34 -46
  75. package/lib-esm/components/bundle-packages/bundle-packages.utils.js +44 -0
  76. package/lib-esm/components/bundle-packages/index.js +87 -2
  77. package/lib-esm/components/component-link.js +10 -13
  78. package/lib-esm/components/delta/delta.js +8 -6
  79. package/lib-esm/components/delta/delta.stories.js +26 -38
  80. package/lib-esm/components/duplicate-packages-warning/duplicate-packages-warning.js +11 -9
  81. package/lib-esm/components/duplicate-packages-warning/duplicate-packages-warning.stories.js +20 -26
  82. package/lib-esm/components/job-header/job-header.js +14 -11
  83. package/lib-esm/components/job-header/job-header.stories.js +12 -18
  84. package/lib-esm/components/job-meta/job-meta.js +15 -18
  85. package/lib-esm/components/job-meta/job-meta.stories.js +10 -12
  86. package/lib-esm/components/job-name/job-name.js +9 -12
  87. package/lib-esm/components/job-name/job-name.stories.js +15 -23
  88. package/lib-esm/components/jobs-header/jobs-header.js +12 -12
  89. package/lib-esm/components/jobs-header/jobs-header.stories.js +80 -86
  90. package/lib-esm/components/lighthouse-table/lighthouse-table.js +6 -4
  91. package/lib-esm/components/lighthouse-table/lighthouse-table.stories.js +10 -14
  92. package/lib-esm/components/metric/metric.js +15 -19
  93. package/lib-esm/components/metric/metric.stories.js +36 -58
  94. package/lib-esm/components/metrics-table/metrics-table.js +128 -139
  95. package/lib-esm/components/metrics-table/metrics-table.stories.js +27 -35
  96. package/lib-esm/components/metrics-table-options/metrics-table-options.js +16 -19
  97. package/lib-esm/components/metrics-table-options/metrics-table-options.stories.js +6 -12
  98. package/lib-esm/components/metrics-table-search/metrics-table-search.js +17 -18
  99. package/lib-esm/components/metrics-table-search/metrics-table-search.module.css +2 -1
  100. package/lib-esm/components/metrics-table-search/metrics-table-search.stories.js +4 -9
  101. package/lib-esm/components/metrics-table-title/metrics-table-title.js +9 -7
  102. package/lib-esm/components/module-info/module-info.js +15 -13
  103. package/lib-esm/components/module-info/module-info.stories.js +20 -22
  104. package/lib-esm/components/summary/summary.js +52 -36
  105. package/lib-esm/components/summary/summary.stories.js +31 -46
  106. package/lib-esm/components/summary-item/summary-item.js +27 -28
  107. package/lib-esm/components/summary-item/summary-item.stories.js +40 -50
  108. package/lib-esm/components/total-size-type-title/total-size-type-title.js +4 -2
  109. package/lib-esm/constants.js +25 -30
  110. package/lib-esm/hooks/rows-filter.js +20 -0
  111. package/lib-esm/hooks/rows-sort.js +22 -0
  112. package/lib-esm/hooks/search-params.js +170 -0
  113. package/lib-esm/layout/box/box.js +14 -21
  114. package/lib-esm/layout/box/box.stories.js +34 -46
  115. package/lib-esm/layout/flex-stack/flex-stack.js +9 -12
  116. package/lib-esm/layout/flex-stack/flex-stack.stories.js +39 -49
  117. package/lib-esm/layout/footer/footer.js +11 -11
  118. package/lib-esm/layout/footer/footer.stories.js +7 -11
  119. package/lib-esm/layout/header/header.js +10 -14
  120. package/lib-esm/layout/header/header.stories.js +50 -44
  121. package/lib-esm/layout/stack/stack.js +13 -8
  122. package/lib-esm/layout/stack/stack.stories.js +39 -49
  123. package/lib-esm/layout/sub-header/sub-header.js +14 -12
  124. package/lib-esm/layout/sub-header/sub-header.stories.js +57 -69
  125. package/lib-esm/prototypes/typography.stories.js +49 -58
  126. package/lib-esm/query-state.js +13 -16
  127. package/lib-esm/stories/wrapper.js +6 -12
  128. package/lib-esm/ui/alert/alert.js +6 -4
  129. package/lib-esm/ui/alert/alert.stories.js +14 -24
  130. package/lib-esm/ui/container/container.js +6 -9
  131. package/lib-esm/ui/container/container.stories.js +15 -17
  132. package/lib-esm/ui/dropdown/dropdown.js +13 -11
  133. package/lib-esm/ui/dropdown/dropdown.stories.js +22 -26
  134. package/lib-esm/ui/empty-set/empty-set.js +12 -12
  135. package/lib-esm/ui/empty-set/empty-set.stories.js +11 -19
  136. package/lib-esm/ui/file-name/file-name.js +6 -4
  137. package/lib-esm/ui/file-name/file-name.stories.js +12 -16
  138. package/lib-esm/ui/filters/filters.container.js +57 -76
  139. package/lib-esm/ui/filters/filters.js +71 -77
  140. package/lib-esm/ui/filters/filters.stories.js +82 -100
  141. package/lib-esm/ui/filters/filters.utils.js +26 -24
  142. package/lib-esm/ui/filters/index.js +1 -1
  143. package/lib-esm/ui/horizontal-bar-chart/horizontal-bar-chart.js +68 -78
  144. package/lib-esm/ui/horizontal-bar-chart/horizontal-bar-chart.stories.js +67 -77
  145. package/lib-esm/ui/icon/icon.js +13 -202
  146. package/lib-esm/ui/icon/icon.stories.js +16 -24
  147. package/lib-esm/ui/input/input.js +7 -10
  148. package/lib-esm/ui/input/input.stories.js +8 -12
  149. package/lib-esm/ui/loader/loader.js +6 -9
  150. package/lib-esm/ui/loader/loader.stories.js +5 -9
  151. package/lib-esm/ui/logo/logo.constants.js +6 -6
  152. package/lib-esm/ui/logo/logo.js +15 -15
  153. package/lib-esm/ui/logo/logo.stories.js +14 -22
  154. package/lib-esm/ui/panels/panels.js +13 -23
  155. package/lib-esm/ui/panels/panels.stories.js +14 -16
  156. package/lib-esm/ui/popover/popover.js +11 -9
  157. package/lib-esm/ui/popover/popover.stories.js +7 -11
  158. package/lib-esm/ui/skeleton/skeleton.js +6 -9
  159. package/lib-esm/ui/skeleton/skeleton.stories.js +2 -4
  160. package/lib-esm/ui/sort-dropdown/sort-dropdown.js +38 -38
  161. package/lib-esm/ui/sort-dropdown/sort-dropdown.stories.js +14 -16
  162. package/lib-esm/ui/table/table.js +26 -31
  163. package/lib-esm/ui/table/table.stories.js +84 -102
  164. package/lib-esm/ui/tabs/tabs.js +13 -21
  165. package/lib-esm/ui/tabs/tabs.stories.js +4 -6
  166. package/lib-esm/ui/toolbar/toolbar.js +7 -5
  167. package/lib-esm/ui/toolbar/toolbar.stories.js +14 -16
  168. package/lib-esm/ui/tooltip/tooltip.js +13 -16
  169. package/lib-esm/ui/tooltip/tooltip.stories.js +8 -12
  170. package/lib-esm/utils.js +20 -24
  171. package/package.json +30 -33
  172. package/src/assets/icons/arrow.svg +1 -0
  173. package/src/assets/icons/cancel.svg +1 -0
  174. package/src/assets/icons/clock.svg +1 -0
  175. package/src/assets/icons/close.svg +1 -0
  176. package/src/assets/icons/commit.svg +1 -0
  177. package/src/assets/icons/filter.svg +1 -0
  178. package/src/assets/icons/help.svg +1 -0
  179. package/src/assets/icons/menu.svg +1 -0
  180. package/src/{ui/icon/assets → assets/icons}/sort.svg +0 -0
  181. package/src/assets/icons/warning.svg +1 -0
  182. package/src/assets/icons.svg +1 -0
  183. package/src/components/bundle-assets/bundle-assets.jsx +3 -3
  184. package/src/components/bundle-assets/bundle-assets.utils.js +96 -17
  185. package/src/components/bundle-assets/index.jsx +89 -0
  186. package/src/components/bundle-assets-totals-chart-bars/bundle-assets-totals-chart-bars.jsx +15 -15
  187. package/src/components/bundle-modules/bundle-modules.jsx +3 -3
  188. package/src/components/bundle-modules/bundle-modules.utils.js +101 -0
  189. package/src/components/bundle-modules/index.jsx +107 -0
  190. package/src/components/bundle-packages/bundle-packages.jsx +3 -3
  191. package/src/components/bundle-packages/bundle-packages.utils.js +47 -0
  192. package/src/components/bundle-packages/index.jsx +84 -0
  193. package/src/components/job-meta/job-meta.jsx +1 -3
  194. package/src/components/metrics-table/metrics-table.jsx +2 -7
  195. package/src/components/metrics-table-search/metrics-table-search.jsx +1 -0
  196. package/src/components/metrics-table-search/metrics-table-search.module.css +2 -1
  197. package/src/components/summary/summary.jsx +26 -10
  198. package/src/hooks/rows-filter.js +16 -0
  199. package/src/hooks/rows-sort.js +24 -0
  200. package/src/hooks/search-params.js +153 -0
  201. package/src/layout/box/box.jsx +1 -1
  202. package/src/layout/stack/stack.jsx +2 -2
  203. package/src/ui/icon/icon.jsx +7 -42
  204. package/src/ui/sort-dropdown/sort-dropdown.jsx +11 -11
  205. package/src/utils.jsx +5 -3
  206. package/lib/components/bundle-assets/bundle-assets.container.js +0 -140
  207. package/lib/components/bundle-modules/bundle-modules.container.js +0 -222
  208. package/lib/hocs/with-custom-sort.js +0 -75
  209. package/lib/hocs/with-filtered-items.js +0 -54
  210. package/lib/ui/icon/assets/arrow.svg +0 -4
  211. package/lib/ui/icon/assets/branch.svg +0 -3
  212. package/lib/ui/icon/assets/cancel.svg +0 -4
  213. package/lib/ui/icon/assets/clock.svg +0 -3
  214. package/lib/ui/icon/assets/close.svg +0 -4
  215. package/lib/ui/icon/assets/commit.svg +0 -3
  216. package/lib/ui/icon/assets/filter.svg +0 -4
  217. package/lib/ui/icon/assets/help.svg +0 -4
  218. package/lib/ui/icon/assets/job.svg +0 -3
  219. package/lib/ui/icon/assets/menu.svg +0 -4
  220. package/lib/ui/icon/assets/package.svg +0 -3
  221. package/lib/ui/icon/assets/pull-request.svg +0 -3
  222. package/lib/ui/icon/assets/repository.svg +0 -3
  223. package/lib/ui/icon/assets/warning.svg +0 -4
  224. package/lib-esm/components/bundle-assets/bundle-assets.container.js +0 -119
  225. package/lib-esm/components/bundle-modules/bundle-modules.container.js +0 -175
  226. package/lib-esm/components/bundle-packages/bundle-packages.container.js +0 -91
  227. package/lib-esm/hocs/with-custom-sort.js +0 -43
  228. package/lib-esm/hocs/with-filtered-items.js +0 -35
  229. package/lib-esm/hocs/with-search.js +0 -214
  230. package/lib-esm/ui/icon/assets/arrow.svg +0 -4
  231. package/lib-esm/ui/icon/assets/branch.svg +0 -3
  232. package/lib-esm/ui/icon/assets/cancel.svg +0 -4
  233. package/lib-esm/ui/icon/assets/clock.svg +0 -3
  234. package/lib-esm/ui/icon/assets/close.svg +0 -4
  235. package/lib-esm/ui/icon/assets/commit.svg +0 -3
  236. package/lib-esm/ui/icon/assets/filter.svg +0 -4
  237. package/lib-esm/ui/icon/assets/help.svg +0 -4
  238. package/lib-esm/ui/icon/assets/job.svg +0 -3
  239. package/lib-esm/ui/icon/assets/menu.svg +0 -4
  240. package/lib-esm/ui/icon/assets/package.svg +0 -3
  241. package/lib-esm/ui/icon/assets/pull-request.svg +0 -3
  242. package/lib-esm/ui/icon/assets/repository.svg +0 -3
  243. package/lib-esm/ui/icon/assets/warning.svg +0 -4
  244. package/src/components/bundle-assets/bundle-assets.container.js +0 -146
  245. package/src/components/bundle-assets/index.js +0 -4
  246. package/src/components/bundle-modules/bundle-modules.container.js +0 -158
  247. package/src/components/bundle-modules/index.js +0 -4
  248. package/src/components/bundle-packages/bundle-packages.container.js +0 -93
  249. package/src/components/bundle-packages/index.js +0 -4
  250. package/src/hocs/with-custom-sort.jsx +0 -35
  251. package/src/hocs/with-filtered-items.jsx +0 -34
  252. package/src/hocs/with-search.jsx +0 -184
  253. package/src/ui/icon/assets/arrow.svg +0 -4
  254. package/src/ui/icon/assets/branch.svg +0 -3
  255. package/src/ui/icon/assets/cancel.svg +0 -4
  256. package/src/ui/icon/assets/clock.svg +0 -3
  257. package/src/ui/icon/assets/close.svg +0 -4
  258. package/src/ui/icon/assets/commit.svg +0 -3
  259. package/src/ui/icon/assets/filter.svg +0 -4
  260. package/src/ui/icon/assets/help.svg +0 -4
  261. package/src/ui/icon/assets/job.svg +0 -3
  262. package/src/ui/icon/assets/menu.svg +0 -4
  263. package/src/ui/icon/assets/package.svg +0 -3
  264. package/src/ui/icon/assets/pull-request.svg +0 -3
  265. package/src/ui/icon/assets/repository.svg +0 -3
  266. package/src/ui/icon/assets/warning.svg +0 -4
@@ -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
+ };
@@ -17,78 +17,76 @@ import { getColors } from '../../utils';
17
17
  import { Stack } from '../../layout/stack';
18
18
  import { SummaryItem } from '../summary-item';
19
19
  import css from './bundle-assets-totals-chart-bars.module.css';
20
- export var BundleAssetsTotalsChartBars = function BundleAssetsTotalsChartBars(_ref) {
21
- var className = _ref.className,
22
- jobs = _ref.jobs,
23
- CustomComponentLink = _ref.customComponentLink;
24
- var rootClassName = cx(css.root, className);
25
- var items = webpack.compareBySection.sizes(jobs);
26
- var dataGraphs = [];
27
- items.forEach(function (_ref2) {
28
- var runs = _ref2.runs;
29
- runs.forEach(function (run, runIndex) {
30
- dataGraphs[runIndex] = [].concat(dataGraphs[runIndex] || [], [_get(run, 'value', 0)]);
20
+
21
+ const getTooltip = (items, jobs, itemIndex, runIndex) => () => /*#__PURE__*/React.createElement(SummaryItem, {
22
+ className: css.itemTooltip,
23
+ id: _get(items, [itemIndex, 'key']),
24
+ data: {
25
+ current: _get(items, [itemIndex, 'runs', runIndex, 'value'], 0),
26
+ baseline: _get(items, [itemIndex, 'runs', runIndex + 1, 'value'], 0)
27
+ },
28
+ showDelta: runIndex < jobs.length - 1,
29
+ showBaselineValue: runIndex < jobs.length - 1,
30
+ size: "large"
31
+ });
32
+
33
+ export const BundleAssetsTotalsChartBars = _ref => {
34
+ let {
35
+ className,
36
+ jobs,
37
+ customComponentLink: CustomComponentLink
38
+ } = _ref;
39
+ const rootClassName = cx(css.root, className);
40
+ const items = webpack.compareBySection.sizes(jobs);
41
+ const dataGraphs = [];
42
+ items.forEach(_ref2 => {
43
+ let {
44
+ runs
45
+ } = _ref2;
46
+ runs.forEach((run, runIndex) => {
47
+ dataGraphs[runIndex] = [...(dataGraphs[runIndex] || []), _get(run, 'value', 0)];
31
48
  });
32
49
  });
33
50
 
34
- var maxValues = _max(_map(dataGraphs, function (values) {
35
- return _sum(values);
36
- }));
51
+ const maxValues = _max(_map(dataGraphs, values => _sum(values)));
37
52
 
38
- var maxValue = _max(maxValues);
53
+ const maxValue = _max(maxValues);
39
54
 
40
- var labels = items.map(function (_ref3) {
41
- var key = _ref3.key,
42
- label = _ref3.label;
43
- var fileType = ASSETS_SIZES_FILE_TYPE_MAP[key];
44
- var componentData = getBundleAssetsFileTypeComponentLink(fileType, label);
55
+ const labels = items.map(_ref3 => {
56
+ let {
57
+ key,
58
+ label
59
+ } = _ref3;
60
+ const fileType = ASSETS_SIZES_FILE_TYPE_MAP[key];
61
+ const componentData = getBundleAssetsFileTypeComponentLink(fileType, label);
45
62
  return /*#__PURE__*/React.createElement(CustomComponentLink, _extends({
46
63
  className: css.itemLink
47
64
  }, componentData), label);
48
65
  });
49
- var colors = getColors(_max(_map(dataGraphs, function (values) {
50
- return values.length;
51
- })));
52
-
53
- var getTooltip = function getTooltip(itemIndex, runIndex) {
54
- return function () {
55
- return /*#__PURE__*/React.createElement(SummaryItem, {
56
- className: css.itemTooltip,
57
- id: _get(items, [itemIndex, 'key']),
58
- data: {
59
- current: _get(items, [itemIndex, 'runs', runIndex, 'value'], 0),
60
- baseline: _get(items, [itemIndex, 'runs', runIndex + 1, 'value'], 0)
61
- },
62
- showDelta: runIndex < jobs.length - 1,
63
- showBaselineValue: runIndex < jobs.length - 1,
64
- size: "large"
65
- });
66
- };
67
- };
68
-
66
+ const colors = getColors(_max(_map(dataGraphs, values => values.length)));
69
67
  return /*#__PURE__*/React.createElement(Stack, {
70
68
  className: rootClassName,
71
69
  space: "medium"
72
- }, dataGraphs.map(function (data, runIndex) {
73
- var internalBuildNumber = jobs[runIndex].internalBuildNumber;
74
- var values = data.map(function (value, valueIndex) {
75
- return {
76
- value: value,
77
- color: colors[valueIndex],
78
- label: labels[valueIndex],
79
- getItemTooltip: getTooltip(valueIndex, runIndex)
80
- };
81
- });
70
+ }, dataGraphs.map((data, runIndex) => {
71
+ const {
72
+ internalBuildNumber
73
+ } = jobs[runIndex];
74
+ const values = data.map((value, valueIndex) => ({
75
+ value,
76
+ color: colors[valueIndex],
77
+ label: labels[valueIndex],
78
+ getItemTooltip: getTooltip(items, jobs, valueIndex, runIndex)
79
+ }));
82
80
  return /*#__PURE__*/React.createElement("div", {
83
81
  key: internalBuildNumber || runIndex,
84
82
  className: css.item
85
83
  }, /*#__PURE__*/React.createElement("h3", {
86
84
  className: css.itemTitle
87
- }, "Job #" + internalBuildNumber), /*#__PURE__*/React.createElement(HorizontalBarChart, {
85
+ }, `Job #${internalBuildNumber}`), /*#__PURE__*/React.createElement(HorizontalBarChart, {
88
86
  className: css.itemChart,
89
87
  data: {
90
- labels: labels,
91
- values: values
88
+ labels,
89
+ values
92
90
  },
93
91
  maxValue: maxValue
94
92
  }));
@@ -5,25 +5,21 @@ import currentData from '../../../__mocks__/webpack-stats.current.json';
5
5
  import baselineData from '../../../__mocks__/webpack-stats.baseline.json';
6
6
  import { getWrapperDecorator } from '../../stories';
7
7
  import { BundleAssetsTotalsChartBars } from './bundle-assets-totals-chart-bars';
8
- var JOBS = createJobs([{
8
+ const JOBS = createJobs([{
9
9
  webpack: currentData
10
10
  }, {
11
11
  webpack: baselineData
12
12
  }]);
13
- var EMPTY_BASELINE = createJobs([{
13
+ const EMPTY_BASELINE = createJobs([{
14
14
  webpack: currentData
15
15
  }, {
16
16
  webpack: null
17
17
  }]);
18
- var stories = storiesOf('Components/BundleAssetsTotalsChartBars', module);
18
+ const stories = storiesOf('Components/BundleAssetsTotalsChartBars', module);
19
19
  stories.addDecorator(getWrapperDecorator());
20
- stories.add('component', function () {
21
- return /*#__PURE__*/React.createElement(BundleAssetsTotalsChartBars, {
22
- jobs: JOBS
23
- });
24
- });
25
- stories.add('empty baseline', function () {
26
- return /*#__PURE__*/React.createElement(BundleAssetsTotalsChartBars, {
27
- jobs: EMPTY_BASELINE
28
- });
29
- });
20
+ stories.add('component', () => /*#__PURE__*/React.createElement(BundleAssetsTotalsChartBars, {
21
+ jobs: JOBS
22
+ }));
23
+ stories.add('empty baseline', () => /*#__PURE__*/React.createElement(BundleAssetsTotalsChartBars, {
24
+ jobs: EMPTY_BASELINE
25
+ }));
@@ -5,20 +5,21 @@ import * as webpack from '@bundle-stats/utils/lib-esm/webpack';
5
5
  import { ASSETS_SIZES_FILE_TYPE_MAP } from '../../constants';
6
6
  import { MetricsTable } from '../metrics-table';
7
7
  import { ComponentLink } from '../component-link';
8
- export var BundleAssetsTotalsTable = function BundleAssetsTotalsTable(_ref) {
9
- var className = _ref.className,
10
- jobs = _ref.jobs,
11
- CustomComponentLink = _ref.customComponentLink;
12
- var items = webpack.compareBySection.sizes(jobs);
13
-
14
- var renderRowHeader = function renderRowHeader(item) {
15
- var fileType = ASSETS_SIZES_FILE_TYPE_MAP[item.key];
16
-
17
- var _getBundleAssetsFileT = getBundleAssetsFileTypeComponentLink(fileType, item.label),
18
- section = _getBundleAssetsFileT.section,
19
- title = _getBundleAssetsFileT.title,
20
- params = _getBundleAssetsFileT.params;
8
+ export const BundleAssetsTotalsTable = _ref => {
9
+ let {
10
+ className,
11
+ jobs,
12
+ customComponentLink: CustomComponentLink
13
+ } = _ref;
14
+ const items = webpack.compareBySection.sizes(jobs);
21
15
 
16
+ const renderRowHeader = item => {
17
+ const fileType = ASSETS_SIZES_FILE_TYPE_MAP[item.key];
18
+ const {
19
+ section,
20
+ title,
21
+ params
22
+ } = getBundleAssetsFileTypeComponentLink(fileType, item.label);
22
23
  return /*#__PURE__*/React.createElement(CustomComponentLink, {
23
24
  section: section,
24
25
  title: title,
@@ -5,29 +5,23 @@ import baselineStats from '../../../__mocks__/webpack-stats.baseline.json';
5
5
  import currentStats from '../../../__mocks__/webpack-stats.current.json';
6
6
  import { getWrapperDecorator } from '../../stories';
7
7
  import { BundleAssetsTotalsTable } from '.';
8
- var JOBS = createJobs([{
8
+ const JOBS = createJobs([{
9
9
  webpack: currentStats
10
10
  }, {
11
11
  webpack: baselineStats
12
12
  }]);
13
- var currentJob = JOBS[0];
14
- var stories = storiesOf('Components/BundleAssetsTotalsTable', module);
13
+ const [currentJob] = JOBS;
14
+ const stories = storiesOf('Components/BundleAssetsTotalsTable', module);
15
15
  stories.addDecorator(getWrapperDecorator());
16
- stories.add('default', function () {
17
- return /*#__PURE__*/React.createElement(BundleAssetsTotalsTable, {
18
- jobs: [currentJob]
19
- });
20
- });
21
- stories.add('multiple jobs', function () {
22
- return /*#__PURE__*/React.createElement(BundleAssetsTotalsTable, {
23
- jobs: JOBS
24
- });
25
- });
26
- var JOBS_EMPTY_BASELINE = createJobs([{
16
+ stories.add('default', () => /*#__PURE__*/React.createElement(BundleAssetsTotalsTable, {
17
+ jobs: [currentJob]
18
+ }));
19
+ stories.add('multiple jobs', () => /*#__PURE__*/React.createElement(BundleAssetsTotalsTable, {
20
+ jobs: JOBS
21
+ }));
22
+ const JOBS_EMPTY_BASELINE = createJobs([{
27
23
  webpack: currentStats
28
24
  }, null]);
29
- stories.add('empty baseline', function () {
30
- return /*#__PURE__*/React.createElement(BundleAssetsTotalsTable, {
31
- jobs: JOBS_EMPTY_BASELINE
32
- });
33
- });
25
+ stories.add('empty baseline', () => /*#__PURE__*/React.createElement(BundleAssetsTotalsTable, {
26
+ jobs: JOBS_EMPTY_BASELINE
27
+ }));
@@ -1,15 +1,17 @@
1
- var _SORT_BY;
2
-
3
- export var SORT_BY_NAME = 'name';
4
- export var SORT_BY_SIZE = 'size';
5
- export var SORT_BY_DELTA = 'delta';
6
- export var SORT_BY = (_SORT_BY = {}, _SORT_BY[SORT_BY_NAME] = {
7
- label: 'Name',
8
- defaultDirection: 'asc'
9
- }, _SORT_BY[SORT_BY_DELTA] = {
10
- label: 'Delta',
11
- defaultDirection: 'desc'
12
- }, _SORT_BY[SORT_BY_SIZE] = {
13
- label: 'Size',
14
- defaultDirection: 'desc'
15
- }, _SORT_BY);
1
+ export const SORT_BY_NAME = 'name';
2
+ export const SORT_BY_SIZE = 'size';
3
+ export const SORT_BY_DELTA = 'delta';
4
+ export const SORT_BY = {
5
+ [SORT_BY_NAME]: {
6
+ label: 'Name',
7
+ defaultDirection: 'asc'
8
+ },
9
+ [SORT_BY_DELTA]: {
10
+ label: 'Delta',
11
+ defaultDirection: 'desc'
12
+ },
13
+ [SORT_BY_SIZE]: {
14
+ label: 'Size',
15
+ defaultDirection: 'desc'
16
+ }
17
+ };
@@ -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,19 @@ 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 = _ref => {
29
+ let {
30
+ row,
31
+ chunks,
32
+ labels,
33
+ CustomComponentLink
34
+ } = _ref;
43
35
 
44
- var _useState = useState(false),
45
- showPopopver = _useState[0],
46
- setPopover = _useState[1];
36
+ const chunkIds = _map(chunks, 'id');
47
37
 
48
- var handleOnMouseEnter = useCallback(function () {
49
- return setPopover(true);
50
- }, [showPopopver]);
51
- var content = /*#__PURE__*/React.createElement(FileName, {
38
+ const [showPopopver, setPopover] = useState(false);
39
+ const handleOnMouseEnter = useCallback(() => setPopover(true), [showPopopver]);
40
+ const content = /*#__PURE__*/React.createElement(FileName, {
52
41
  name: row.label
53
42
  });
54
43
  return /*#__PURE__*/React.createElement("div", {
@@ -56,8 +45,10 @@ var RowHeader = function RowHeader(_ref) {
56
45
  }, !showPopopver ? content : /*#__PURE__*/React.createElement(Popover, {
57
46
  ariaLabel: "View module info",
58
47
  label: content
59
- }, function (_ref2) {
60
- var popoverToggle = _ref2.popoverToggle;
48
+ }, _ref2 => {
49
+ let {
50
+ popoverToggle
51
+ } = _ref2;
61
52
  return /*#__PURE__*/React.createElement(ModuleInfo, {
62
53
  className: css.namePopover,
63
54
  item: row,
@@ -85,103 +76,112 @@ RowHeader.defaultProps = {
85
76
  chunks: []
86
77
  };
87
78
 
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
- };
79
+ const getRenderRowHeader = _ref3 => {
80
+ let {
81
+ labels,
82
+ chunks,
83
+ CustomComponentLink
84
+ } = _ref3;
85
+ return row => /*#__PURE__*/React.createElement(RowHeader, {
86
+ row: row,
87
+ chunks: chunks,
88
+ labels: labels,
89
+ CustomComponentLink: CustomComponentLink
90
+ });
100
91
  };
101
92
 
102
- export var BundleModules = function BundleModules(_ref4) {
103
- var _MODULE_SOURCE_TYPE, _objectSpread2, _ref6, _objectSpread5;
104
-
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, {
93
+ export const BundleModules = _ref4 => {
94
+ let {
95
+ className,
96
+ jobs,
97
+ items,
98
+ chunks,
99
+ totalRowCount,
100
+ updateFilters,
101
+ resetFilters,
102
+ resetAllFilters,
103
+ filters,
104
+ sortFields,
105
+ sort,
106
+ updateSort,
107
+ search,
108
+ updateSearch,
109
+ hasActiveFilters,
110
+ customComponentLink: CustomComponentLink
111
+ } = _ref4;
112
+ const rootClassName = cx(css.root, className);
113
+ const labels = useMemo(() => _map(jobs, 'label'), [jobs]);
114
+ const renderRowHeader = useMemo(() => getRenderRowHeader({
115
+ labels,
116
+ chunks,
117
+ CustomComponentLink
118
+ }), [labels, chunks]);
119
+ const emptyMessage = /*#__PURE__*/React.createElement(EmptySet, {
133
120
  resources: "modules",
134
121
  filtered: totalRowCount !== 0,
135
122
  handleResetFilters: resetFilters,
136
123
  handleViewAll: resetAllFilters
137
124
  });
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
-
125
+ const dropdownFilters = {
126
+ [MODULE_FILTERS.CHANGED]: {
127
+ label: 'Changed',
128
+ defaultValue: filters.changed,
129
+ disabled: jobs.length <= 1
130
+ },
131
+ [MODULE_SOURCE_TYPE]: {
132
+ label: 'Source',
133
+ [MODULE_FILTERS.FIRST_PARTY]: {
134
+ label: 'First party',
135
+ defaultValue: _get(filters, `${MODULE_SOURCE_TYPE}.${MODULE_FILTERS.FIRST_PARTY}`, true)
136
+ },
137
+ [MODULE_FILTERS.THIRD_PARTY]: {
138
+ label: 'Third party',
139
+ defaultValue: _get(filters, `${MODULE_SOURCE_TYPE}.${MODULE_FILTERS.THIRD_PARTY}`, true)
140
+ }
141
+ },
142
+ // When chunks data available, list available chunks as filters
143
+ ...(!_isEmpty(chunks) && {
144
+ [MODULE_CHUNK]: {
145
+ label: 'Chunk',
146
+ ...chunks.reduce((chunkFilters, _ref5) => {
147
+ let {
148
+ id,
149
+ name
150
+ } = _ref5;
151
+ return { ...chunkFilters,
152
+ [id]: {
153
+ label: name,
154
+ defaultValue: _get(filters, `${MODULE_CHUNK}.${id}`, true)
155
+ }
156
+ };
157
+ }, {})
158
+ }
159
+ }),
160
+ // Module source types
161
+ [MODULE_FILE_TYPE]: {
162
+ label: 'File type',
163
+ ...MODULE_SOURCE_FILE_TYPES.reduce((agg, fileType) => ({ ...agg,
164
+ [fileType]: {
165
+ label: FILE_TYPE_LABELS[fileType],
166
+ defaultValue: _get(filters, `${MODULE_FILE_TYPE}.${fileType}`, true)
167
+ }
168
+ }), {})
169
+ }
170
+ };
173
171
  return /*#__PURE__*/React.createElement("div", {
174
172
  className: rootClassName
175
173
  }, /*#__PURE__*/React.createElement(Toolbar, {
176
174
  className: css.toolbar,
177
- renderActions: function renderActions(_ref7) {
178
- var actionClassName = _ref7.actionClassName;
175
+ renderActions: _ref6 => {
176
+ let {
177
+ actionClassName
178
+ } = _ref6;
179
179
  return /*#__PURE__*/React.createElement(FlexStack, {
180
180
  space: "xxsmall",
181
181
  className: cx(css.dropdown, actionClassName)
182
182
  }, /*#__PURE__*/React.createElement(SortDropdown, _extends({
183
183
  className: css.tableDropdown,
184
- items: sortItems,
184
+ fields: sortFields,
185
185
  onChange: updateSort
186
186
  }, sort)), /*#__PURE__*/React.createElement(MetricsTableOptions, {
187
187
  handleViewAll: resetAllFilters,
@@ -207,7 +207,7 @@ export var BundleModules = function BundleModules(_ref4) {
207
207
  showHeaderSum: true,
208
208
  title: /*#__PURE__*/React.createElement(MetricsTableTitle, {
209
209
  title: I18N.MODULES,
210
- info: "(" + items.length + "/" + totalRowCount + ")",
210
+ info: `(${items.length}/${totalRowCount})`,
211
211
  popoverInfo: I18N.MODULES_INFO,
212
212
  popoverHref: config.documentation.modules
213
213
  })
@@ -254,10 +254,12 @@ BundleModules.propTypes = {
254
254
  changed: PropTypes.bool
255
255
  }).isRequired,
256
256
  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,
257
+ sortFields: PropTypes.shape({
258
+ [PropTypes.string]: PropTypes.shape({
259
+ label: PropTypes.string,
260
+ defaultDirection: PropTypes.bool
261
+ })
262
+ }).isRequired,
261
263
  sort: PropTypes.shape({
262
264
  sortBy: PropTypes.string,
263
265
  direction: PropTypes.string