@bundle-stats/ui 4.17.0 → 4.18.0-beta.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 (48) hide show
  1. package/lib/components/asset-info/asset-info.js +8 -9
  2. package/lib/components/asset-info/asset-info.js.map +1 -1
  3. package/lib/components/bundle-assets/bundle-assets.js +7 -110
  4. package/lib/components/bundle-assets/bundle-assets.js.map +1 -1
  5. package/lib/components/bundle-assets/bundle-assets.utils.js +101 -23
  6. package/lib/components/bundle-assets/bundle-assets.utils.js.map +1 -1
  7. package/lib/components/bundle-assets/index.js +8 -26
  8. package/lib/components/bundle-assets/index.js.map +1 -1
  9. package/lib/components/metrics-table/metrics-table.js.map +1 -1
  10. package/lib/components/metrics-table-header/metrics-table-header.js.map +1 -1
  11. package/lib/hooks/rows-sort.js +14 -2
  12. package/lib/hooks/rows-sort.js.map +1 -1
  13. package/lib/hooks/search-params.js.map +1 -1
  14. package/lib-esm/components/asset-info/asset-info.js +9 -10
  15. package/lib-esm/components/asset-info/asset-info.js.map +1 -1
  16. package/lib-esm/components/bundle-assets/bundle-assets.js +8 -111
  17. package/lib-esm/components/bundle-assets/bundle-assets.js.map +1 -1
  18. package/lib-esm/components/bundle-assets/bundle-assets.utils.js +98 -22
  19. package/lib-esm/components/bundle-assets/bundle-assets.utils.js.map +1 -1
  20. package/lib-esm/components/bundle-assets/index.js +9 -24
  21. package/lib-esm/components/bundle-assets/index.js.map +1 -1
  22. package/lib-esm/components/metrics-table/metrics-table.js.map +1 -1
  23. package/lib-esm/components/metrics-table-header/metrics-table-header.js.map +1 -1
  24. package/lib-esm/hooks/rows-sort.js +14 -2
  25. package/lib-esm/hooks/rows-sort.js.map +1 -1
  26. package/lib-esm/hooks/search-params.js.map +1 -1
  27. package/package.json +3 -3
  28. package/src/components/asset-info/asset-info.tsx +31 -28
  29. package/src/components/bundle-assets/__tests__/add-metric-report-asset-row-data.ts +2 -2
  30. package/src/components/bundle-assets/bundle-assets.stories.tsx +99 -0
  31. package/src/components/bundle-assets/{bundle-assets.jsx → bundle-assets.tsx} +65 -147
  32. package/src/components/bundle-assets/bundle-assets.utils.ts +260 -0
  33. package/src/components/bundle-assets/{index.jsx → index.tsx} +43 -29
  34. package/src/components/metrics-table/metrics-table.tsx +3 -3
  35. package/src/components/metrics-table-header/metrics-table-header.tsx +4 -4
  36. package/src/components/sort-button/sort-button.tsx +1 -1
  37. package/src/hooks/rows-sort.ts +21 -3
  38. package/src/hooks/search-params.js +0 -1
  39. package/src/types.d.ts +5 -1
  40. package/types/components/asset-info/asset-info.d.ts +4 -13
  41. package/types/components/bundle-assets/bundle-assets.d.ts +24 -55
  42. package/types/components/bundle-assets/bundle-assets.utils.d.ts +17 -5
  43. package/types/components/bundle-assets/index.d.ts +10 -22
  44. package/types/components/metrics-table/metrics-table.d.ts +3 -2
  45. package/types/components/metrics-table-header/metrics-table-header.d.ts +1 -2
  46. package/types/components/sort-button/sort-button.d.ts +1 -2
  47. package/types/hooks/rows-sort.d.ts +1 -1
  48. package/src/components/bundle-assets/bundle-assets.utils.js +0 -149
@@ -2,14 +2,26 @@ import { useState, useMemo, useCallback } from 'react';
2
2
  import get from 'lodash/get';
3
3
  import orderBy from 'lodash/orderBy';
4
4
  import { SORT } from '../constants';
5
+ const getSortDirection = (directionParam) => {
6
+ if (typeof directionParam === 'undefined') {
7
+ return '';
8
+ }
9
+ if (['asc', 'desc'].includes(directionParam)) {
10
+ return directionParam;
11
+ }
12
+ return '';
13
+ };
5
14
  export const getSortFn = (fieldPath, getCustomSort) => (item) => {
6
15
  if (!fieldPath) {
7
16
  return getCustomSort(item);
8
17
  }
9
18
  return get(item, fieldPath) || 0;
10
19
  };
11
- export const useRowsSort = ({ rows, initialField = 'runs[0].delta', initialDirection = 'desc', getCustomSort, setQueryState, }) => {
12
- const [sort, setSort] = useState({ field: initialField, direction: initialDirection });
20
+ export const useRowsSort = ({ rows, initialField = 'runs[0].delta', initialDirection, getCustomSort, setQueryState, }) => {
21
+ const [sort, setSort] = useState({
22
+ field: initialField,
23
+ direction: getSortDirection(initialDirection),
24
+ });
13
25
  const updateSort = useCallback((newState) => {
14
26
  setSort(newState);
15
27
  setQueryState({ sortBy: newState.field, direction: newState.direction });
@@ -1 +1 @@
1
- {"version":3,"file":"rows-sort.js","sourceRoot":"","sources":["../../src/hooks/rows-sort.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,GAAG,MAAM,YAAY,CAAC;AAC7B,OAAO,OAAO,MAAM,gBAAgB,CAAC;AAGrC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,MAAM,CAAC,MAAM,SAAS,GACpB,CAAO,SAAiB,EAAE,aAAuD,EAAE,EAAE,CACrF,CAAC,IAAU,EAAE,EAAE;IACb,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC,CAAC;AAmBJ,MAAM,CAAC,MAAM,WAAW,GAAG,CAAO,EAChC,IAAI,EACJ,YAAY,GAAG,eAAe,EAC9B,gBAAgB,GAAG,MAAM,EACzB,aAAa,EACb,aAAa,GACW,EAAqB,EAAE;IAC/C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAEvF,MAAM,UAAU,GAAG,WAAW,CAC5B,CAAC,QAAoB,EAAE,EAAE;QAEvB,OAAO,CAAC,QAAQ,CAAC,CAAC;QAElB,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IAC3E,CAAC,EACD,CAAC,aAAa,EAAE,OAAO,CAAC,CACzB,CAAC;IAEF,MAAM,WAAW,GAAG,OAAO,CACzB,GAAG,EAAE,CACH,OAAO,CACP,IAAI,EACJ,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,EAEpC,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAE,IAAI,CAAC,GAAW,CAC3D,EACD,CAAC,IAAI,EAAE,IAAI,CAAC,CACb,CAAC;IAEF,OAAO;QACL,IAAI;QACJ,UAAU;QACV,KAAK,EAAE,WAAW;KACnB,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"rows-sort.js","sourceRoot":"","sources":["../../src/hooks/rows-sort.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,GAAG,MAAM,YAAY,CAAC;AAC7B,OAAO,OAAO,MAAM,gBAAgB,CAAC;AAGrC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAKpC,MAAM,gBAAgB,GAAG,CAAC,cAAkC,EAA2B,EAAE;IACvF,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE,CAAC;QAC1C,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QAC7C,OAAO,cAAyC,CAAC;IACnD,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GACpB,CAAO,SAAiB,EAAE,aAAuD,EAAE,EAAE,CACrF,CAAC,IAAU,EAAE,EAAE;IACb,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC,CAAC;AAmBJ,MAAM,CAAC,MAAM,WAAW,GAAG,CAAO,EAChC,IAAI,EACJ,YAAY,GAAG,eAAe,EAC9B,gBAAgB,EAChB,aAAa,EACb,aAAa,GACW,EAAqB,EAAE;IAC/C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC;QAC/B,KAAK,EAAE,YAAY;QACnB,SAAS,EAAE,gBAAgB,CAAC,gBAAgB,CAAC;KAC9C,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,WAAW,CAC5B,CAAC,QAAoB,EAAE,EAAE;QAEvB,OAAO,CAAC,QAAQ,CAAC,CAAC;QAElB,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IAC3E,CAAC,EACD,CAAC,aAAa,EAAE,OAAO,CAAC,CACzB,CAAC;IAEF,MAAM,WAAW,GAAG,OAAO,CACzB,GAAG,EAAE,CACH,OAAO,CACP,IAAI,EACJ,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,EAEpC,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAE,IAAI,CAAC,GAAW,CAC3D,EACD,CAAC,IAAI,EAAE,IAAI,CAAC,CACb,CAAC;IAEF,OAAO;QACL,IAAI;QACJ,UAAU;QACV,KAAK,EAAE,WAAW;KACnB,CAAC;AACJ,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"search-params.js","sourceRoot":"","sources":["../../src/hooks/search-params.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC1E,OAAO,OAAO,MAAM,gBAAgB,CAAC;AACrC,OAAO,KAAK,MAAM,cAAc,CAAC;AAEjC,MAAM,kBAAkB,GAAG,aAAa,CAAC;AACzC,MAAM,iBAAiB,GAAG,YAAY,CAAC;AACvC,MAAM,oBAAoB,GAAG,eAAe,CAAC;AAC7C,MAAM,gBAAgB,GAAG,WAAW,CAAC;AACrC,MAAM,UAAU,GAAG,KAAK,CAAC;AAEzB,MAAM,cAAc,GAAG,EAAE,CAAC;AAC1B,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAEpC,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,EAAE;IAClC,IAAI,aAAa,GAAG,sBAAsB,CAAC;IAE3C,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9B,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,IAAI,CAAC;QACH,aAAa,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QAEb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,gBAAgB,GACpB,CAAC,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,EAAE,EAAE,CAC1D,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;IAChB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;IAEjC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,MAAM,QAAQ,GAAG;gBACf,OAAO,EAAE,OAAO;gBAChB,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,aAAa,EAAE,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC;aAC9C,CAAC;YACF,cAAc,CAAC,QAAQ,CAAC,CAAC;YACzB,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,MAAM,QAAQ,GAAG;gBACf,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,MAAM,EAAE,OAAO;aAChB,CAAC;YAEF,cAAc,CAAC,QAAQ,CAAC,CAAC;YAEzB,OAAO;gBACL,GAAG,QAAQ;gBACX,aAAa,EAAE,gBAAgB,CAAC,OAAO,CAAC;aACzC,CAAC;QACJ,CAAC;QAED,KAAK,oBAAoB,CAAC,CAAC,CAAC;YAC1B,MAAM,QAAQ,GAAG;gBACf,OAAO,EAAE,cAAc;gBACvB,MAAM,EAAE,cAAc;aACvB,CAAC;YAEF,cAAc,CAAC,QAAQ,CAAC,CAAC;YAEzB,OAAO;gBACL,GAAG,QAAQ;gBACX,aAAa,EAAE,gBAAgB,EAAE;aAClC,CAAC;QACJ,CAAC;QAED,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,MAAM,QAAQ,GAAG;gBACf,OAAO,EAAE,iBAAiB;gBAC1B,MAAM,EAAE,cAAc;aACvB,CAAC;YACF,cAAc,CAAC,QAAQ,CAAC,CAAC;YAEzB,OAAO;gBACL,GAAG,QAAQ;gBACX,aAAa,EAAE,gBAAgB,EAAE;aAClC,CAAC;QACJ,CAAC;QAED,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,OAAO,OAAO,CAAC;QACjB,CAAC;QAED;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC,CAAC;AAEJ,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IACjD,OAAO;IACP,MAAM;IACN,aAAa,EAAE,gBAAgB,CAAC,MAAM,CAAC;CACxC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAC9B,MAAM,EAAE,YAAY,GAAG,cAAc,EAErC,OAAO,EAAE,aAAa,EACtB,cAAc,EACd,iBAAiB,EACjB,QAAQ,EAAE,cAAc,GACzB,EAAE,EAAE;IAEH,MAAM,cAAc,GAAG,aAAa;QAClC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,iBAAiB,EAAE,aAAa,CAAC;QAC7C,CAAC,CAAC,cAAc,CAAC;IAEnB,MAAM,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,GAAG,UAAU,CAC/D,gBAAgB,CAAC,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,CAAC,EACvE,aAAa,CAAC,cAAc,EAAE,YAAY,CAAC,CAC5C,CAAC;IAGF,eAAe,CAAC,GAAG,EAAE;QAEnB,IAAI,YAAY,KAAK,MAAM,IAAI,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,CAAC;YAChE,OAAO;QACT,CAAC;QAED,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,CAAC,cAAc,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;IACvF,CAAC,EAAE,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC;IAGlC,MAAM,kBAAkB,GAAG,WAAW,CACpC,CAAC,QAAQ,EAAE,EAAE;QACX,QAAQ,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC3D,CAAC,EACD,CAAC,QAAQ,CAAC,CACX,CAAC;IAEF,MAAM,mBAAmB,GAAG,WAAW,CACrC,CAAC,UAAU,EAAE,EAAE;QACb,QAAQ,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;IAC9D,CAAC,EACD,CAAC,QAAQ,CAAC,CACX,CAAC;IAEF,MAAM,kBAAkB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC1C,QAAQ,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAC3C,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,MAAM,qBAAqB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7C,QAAQ,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACvC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,OAAO,OAAO,CACZ,GAAG,EAAE,CAAC,CAAC;QACL,MAAM;QACN,aAAa;QACb,OAAO;QACP,gBAAgB,EAAE,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC;QACtD,YAAY,EAAE,kBAAkB;QAChC,aAAa,EAAE,mBAAmB;QAClC,YAAY,EAAE,kBAAkB;QAChC,eAAe,EAAE,qBAAqB;KACvC,CAAC,EACF;QACE,MAAM;QACN,aAAa;QACb,OAAO;QACP,iBAAiB;QACjB,kBAAkB;QAClB,mBAAmB;QACnB,kBAAkB;QAClB,qBAAqB;KACtB,CACF,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"search-params.js","sourceRoot":"","sources":["../../src/hooks/search-params.js"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bundle-stats/ui",
3
- "version": "4.17.0",
3
+ "version": "4.18.0-beta.0",
4
4
  "description": "UI components for BundleStats projects.",
5
5
  "main": "lib/index.js",
6
6
  "module": "lib-esm/index.js",
@@ -74,7 +74,7 @@
74
74
  "react-router-dom": "^5.0.0"
75
75
  },
76
76
  "dependencies": {
77
- "@bundle-stats/utils": "^4.17.0",
77
+ "@bundle-stats/utils": "^4.18.0-beta.0",
78
78
  "ariakit": "2.0.0-next.44",
79
79
  "d3": "7.9.0",
80
80
  "modern-css-reset": "1.4.0",
@@ -82,5 +82,5 @@
82
82
  "snarkdown": "2.0.0",
83
83
  "use-query-params": "2.2.1"
84
84
  },
85
- "gitHead": "b24d870b9d317c63f3eaf9fb3ace65a5c42e32c6"
85
+ "gitHead": "dba19d987f23eb3c299573cabbc6a051846d7e2a"
86
86
  }
@@ -2,15 +2,15 @@ import type { ComponentProps, ElementType, ReactNode } from 'react';
2
2
  import React, { useMemo } from 'react';
3
3
  import cx from 'classnames';
4
4
  import noop from 'lodash/noop';
5
+ import type { WebpackChunk } from '@bundle-stats/utils';
5
6
  import {
6
7
  FILE_TYPE_LABELS,
7
- MetricRunInfo,
8
8
  getBundleModulesByChunk,
9
9
  getBundleAssetsByEntryType,
10
10
  getBundleAssetsFileTypeComponentLink,
11
11
  getModuleFileType,
12
+ getBundleAssetsByChunk,
12
13
  } from '@bundle-stats/utils';
13
- import type { AssetMetricRun, MetaChunk } from '@bundle-stats/utils/types/webpack';
14
14
 
15
15
  import type { ReportMetricAssetRow } from '../../types';
16
16
  import { FlexStack } from '../../layout/flex-stack';
@@ -21,31 +21,24 @@ import css from './asset-info.module.css';
21
21
 
22
22
  interface ChunkModulesLinkProps {
23
23
  as: ElementType;
24
- chunks: Array<MetaChunk>;
25
- chunkId: string;
24
+ chunk: WebpackChunk;
25
+ chunkIds: Array<string>;
26
26
  name: string;
27
27
  }
28
28
 
29
29
  const ChunkModulesLink = ({
30
30
  as: Component,
31
- chunks,
32
- chunkId,
31
+ chunk,
32
+ chunkIds,
33
33
  name,
34
34
  onClick,
35
35
  }: ChunkModulesLinkProps & ComponentProps<'a'>) => {
36
- const chunk = chunks?.find(({ id }) => id === chunkId);
37
-
38
- if (!chunk) {
39
- return null;
40
- }
41
-
42
- const chunkIds = chunks.map(({ id }) => id);
43
36
  const fileType = getModuleFileType(name);
44
37
 
45
38
  return (
46
39
  <Component
47
40
  className={css.viewModules}
48
- {...getBundleModulesByChunk(chunkIds, chunkId, fileType)}
41
+ {...getBundleModulesByChunk(chunkIds, chunk.id, fileType)}
49
42
  onClick={onClick}
50
43
  >
51
44
  View chunk modules
@@ -74,17 +67,8 @@ const AssetRunName = (props: AssetRunNameProps) => {
74
67
  };
75
68
 
76
69
  interface AssetInfoProps {
77
- item: {
78
- label: string;
79
- changed?: boolean;
80
- isChunk?: boolean;
81
- isEntry?: boolean;
82
- isInitial?: boolean;
83
- isNotPredictive?: boolean;
84
- fileType?: string;
85
- runs: Array<AssetMetricRun & MetricRunInfo>;
86
- };
87
- chunks?: Array<MetaChunk>;
70
+ item: ReportMetricAssetRow;
71
+ chunks?: Array<WebpackChunk>;
88
72
  labels: Array<string>;
89
73
  customComponentLink?: ElementType;
90
74
  onClose: () => void;
@@ -154,6 +138,10 @@ export const AssetInfo = (props: AssetInfoProps & ComponentProps<'div'>) => {
154
138
  }, [item]);
155
139
 
156
140
  const fileTypeLabel = FILE_TYPE_LABELS[item.fileType as keyof typeof FILE_TYPE_LABELS];
141
+ const currentChunk = chunks?.find(
142
+ (chunk) => currentRun?.chunkId && currentRun.chunkId === chunk.id,
143
+ );
144
+ const chunkIds: Array<string> = chunks?.filter(Boolean).map((chunk) => chunk.id) || [];
157
145
 
158
146
  return (
159
147
  <EntryInfo
@@ -179,12 +167,27 @@ export const AssetInfo = (props: AssetInfoProps & ComponentProps<'div'>) => {
179
167
  </EntryInfo.Meta>
180
168
  )}
181
169
 
182
- {currentRun?.chunkId && chunks && (
170
+ {currentChunk && (
171
+ <EntryInfo.Meta
172
+ label="Chunk"
173
+ tooltip="The bundler's chunk from witch the assets was originated"
174
+ >
175
+ <EntryInfoMetaLink
176
+ as={CustomComponentLink}
177
+ {...getBundleAssetsByChunk(chunkIds, currentRun.chunkId)}
178
+ onClick={onClick}
179
+ >
180
+ {currentChunk.name}
181
+ </EntryInfoMetaLink>
182
+ </EntryInfo.Meta>
183
+ )}
184
+
185
+ {currentChunk && (
183
186
  <div>
184
187
  <ChunkModulesLink
185
188
  as={CustomComponentLink}
186
- chunks={chunks}
187
- chunkId={currentRun?.chunkId}
189
+ chunk={currentChunk}
190
+ chunkIds={chunkIds}
188
191
  name={currentRun?.name}
189
192
  onClick={onClick}
190
193
  />
@@ -41,7 +41,7 @@ describe('BundleAssets / addMetricReportAssetRowData', () => {
41
41
  });
42
42
  });
43
43
 
44
- test('should add add data when baseline run is null', () => {
44
+ test('should add data when baseline run is null', () => {
45
45
  expect(
46
46
  addMetricReportAssetRowData({
47
47
  key: 'assets/main.js',
@@ -83,7 +83,7 @@ describe('BundleAssets / addMetricReportAssetRowData', () => {
83
83
  });
84
84
  });
85
85
 
86
- test('should add add data when curent run is null', () => {
86
+ test('should add data when current run is null', () => {
87
87
  expect(
88
88
  addMetricReportAssetRowData({
89
89
  key: 'assets/main.js',
@@ -0,0 +1,99 @@
1
+ import React from 'react';
2
+ import {
3
+ ASSET_ENTRY_TYPE,
4
+ ASSET_FILE_TYPE,
5
+ ASSET_FILTERS,
6
+ FILE_TYPE_JS,
7
+ createJobs,
8
+ } from '@bundle-stats/utils';
9
+ import merge from 'lodash/merge';
10
+ import set from 'lodash/set';
11
+ import type { Meta, StoryObj } from '@storybook/react';
12
+ import { action } from '@storybook/addon-actions';
13
+
14
+ /* eslint-disable import/no-relative-packages */
15
+ import baselineStats from '../../../../../fixtures/webpack-stats.baseline.json';
16
+ import currentStats from '../../../../../fixtures/webpack-stats.current.json';
17
+ /* eslint-enable import/no-relative-packages */
18
+ import { getWrapperDecorator } from '../../stories';
19
+ import { BundleAssets } from '.';
20
+
21
+ const JOBS = createJobs([{ webpack: currentStats }, { webpack: baselineStats }]);
22
+ const [currentJob, baselineJob] = JOBS;
23
+ const setState = (params) => console.info(params);
24
+
25
+ const meta: Meta<typeof BundleAssets> = {
26
+ title: 'Components/BundleAssets',
27
+ component: BundleAssets,
28
+ decorators: [getWrapperDecorator()],
29
+ args: {
30
+ setState: action('STATE'),
31
+ },
32
+ };
33
+
34
+ export default meta;
35
+
36
+ type Story = StoryObj<typeof BundleAssets>;
37
+
38
+ export const Default: Story = {
39
+ args: {
40
+ jobs: [baselineJob],
41
+ },
42
+ };
43
+
44
+ export const MultipleJobs: Story = {
45
+ args: {
46
+ jobs: JOBS,
47
+ },
48
+ };
49
+
50
+ export const CustomFilters: Story = {
51
+ args: {
52
+ jobs: JOBS,
53
+ filters: {
54
+ [`${ASSET_ENTRY_TYPE}.${ASSET_FILTERS.ENTRY}`]: true,
55
+ [`${ASSET_FILE_TYPE}.${FILE_TYPE_JS}`]: true,
56
+ },
57
+ },
58
+ };
59
+
60
+ export const EmptyBaseline: Story = {
61
+ args: {
62
+ jobs: createJobs([{ webpack: currentStats }, {}]),
63
+ },
64
+ };
65
+
66
+ export const NoAssets: Story = {
67
+ args: {
68
+ jobs: JOBS.map((job) => set(merge({}, job), 'metrics.webpack.assets', {})),
69
+ },
70
+ };
71
+
72
+ export const EmptyFilteredData: Story = {
73
+ args: {
74
+ jobs: [
75
+ set(merge({}, currentJob), 'metrics.webpack.assets', { 'main.js': { value: 100 } }),
76
+ set(merge({}, baselineJob), 'metrics.webpack.assets', { 'main.js': { value: 100 } }),
77
+ ],
78
+ search: 'vendors',
79
+ },
80
+ };
81
+
82
+ export const NotPredictive: Story = {
83
+ args: {
84
+ jobs: [
85
+ set(merge({}, currentJob), 'metrics.webpack.assets', {
86
+ 'static/js/not-predictive.js': {
87
+ name: 'static/js/not-predictive.93191a1.js',
88
+ value: 2989,
89
+ },
90
+ }),
91
+ set(merge({}, baselineJob), 'metrics.webpack.assets', {
92
+ 'static/js/not-predictive.js': {
93
+ name: 'static/js/not-predictive.93191a1.js',
94
+ value: 2988,
95
+ },
96
+ }),
97
+ ],
98
+ },
99
+ };
@@ -1,17 +1,11 @@
1
- import React, { useCallback, useMemo, useState } from 'react';
2
- import PropTypes from 'prop-types';
1
+ import type { ElementType, ReactNode } from 'react';
2
+ import React, { ComponentProps, useCallback, useMemo, useState } from 'react';
3
3
  import cx from 'classnames';
4
- import get from 'lodash/get';
5
4
  import escapeRegExp from 'lodash/escapeRegExp';
6
- import {
7
- ASSET_ENTRY_TYPE,
8
- ASSET_FILE_TYPE,
9
- ASSET_FILTERS,
10
- COMPONENT,
11
- FILE_TYPE_LABELS,
12
- SECTIONS,
13
- } from '@bundle-stats/utils';
5
+ import type { Job, ReportMetricRow, WebpackChunk } from '@bundle-stats/utils';
6
+ import { COMPONENT, SECTIONS } from '@bundle-stats/utils';
14
7
 
8
+ import type { ReportMetricAssetRow, SortAction } from '../../types';
15
9
  import config from '../../config.json';
16
10
  import I18N from '../../i18n';
17
11
  import { MetricsDisplayType } from '../../constants';
@@ -26,6 +20,7 @@ import { Filters } from '../../ui/filters';
26
20
  import { EmptySet } from '../../ui/empty-set';
27
21
  import { Toolbar } from '../../ui/toolbar';
28
22
  import { AssetInfo } from '../asset-info';
23
+ import { AssetName } from '../asset-name';
29
24
  import { ComponentLink } from '../component-link';
30
25
  import { MetricsTable } from '../metrics-table';
31
26
  import { MetricsTableExport } from '../metrics-table-export';
@@ -35,58 +30,25 @@ import { MetricsDisplaySelector } from '../metrics-display-selector';
35
30
  import { MetricsTableHeader } from '../metrics-table-header';
36
31
  import { MetricsTreemap, getTreemapNodes, getTreemapNodesGroupedByPath } from '../metrics-treemap';
37
32
  import { SEARCH_PLACEHOLDER } from './bundle-assets.i18n';
33
+ import { getFilters } from './bundle-assets.utils';
38
34
  import css from './bundle-assets.module.css';
39
- import { AssetName } from '../asset-name';
40
35
 
41
36
  const DISPLAY_TYPE_GROUPS = {
42
37
  [MetricsDisplayType.TREEMAP]: ['folder'],
43
38
  };
44
39
 
45
- const getFileTypeFilters = (filters) =>
46
- Object.entries(FILE_TYPE_LABELS).map(([key, label]) => ({
47
- key,
48
- label,
49
- defaultValue: get(filters, `${ASSET_FILE_TYPE}.${key}`, true),
50
- }));
51
-
52
- const getFilters = ({ compareMode, filters }) => ({
53
- [ASSET_FILTERS.CHANGED]: {
54
- label: 'Changed',
55
- defaultValue: filters[ASSET_FILTERS.CHANGED],
56
- disabled: !compareMode,
57
- },
58
- [ASSET_ENTRY_TYPE]: {
59
- label: 'Type',
60
- children: [
61
- {
62
- key: ASSET_FILTERS.ENTRY,
63
- label: 'Entry',
64
- defaultValue: get(filters, `${ASSET_ENTRY_TYPE}.${ASSET_FILTERS.ENTRY}`, true),
65
- },
66
- {
67
- key: ASSET_FILTERS.INITIAL,
68
- label: 'Initial',
69
- defaultValue: get(filters, `${ASSET_ENTRY_TYPE}.${ASSET_FILTERS.INITIAL}`, true),
70
- },
71
- {
72
- key: ASSET_FILTERS.CHUNK,
73
- label: 'Chunk',
74
- defaultValue: get(filters, `${ASSET_ENTRY_TYPE}.${ASSET_FILTERS.CHUNK}`, true),
75
- },
76
- {
77
- key: ASSET_FILTERS.OTHER,
78
- label: 'Other',
79
- defaultValue: get(filters, `${ASSET_ENTRY_TYPE}.${ASSET_FILTERS.OTHER}`, true),
80
- },
81
- ],
82
- },
83
- [ASSET_FILE_TYPE]: {
84
- label: 'File type',
85
- children: getFileTypeFilters(filters),
86
- },
87
- });
40
+ interface ViewMetricsTreemapProps {
41
+ metricsTableTitle: ReactNode;
42
+ jobs: Array<Job>;
43
+ items: Array<ReportMetricAssetRow>;
44
+ displayType: { value: MetricsDisplayType; groupBy?: string };
45
+ emptyMessage: ReactNode;
46
+ showEntryInfo: (entryId: string) => void;
47
+ updateSearch: (search: string) => void;
48
+ search: string;
49
+ }
88
50
 
89
- const ViewMetricsTreemap = (props) => {
51
+ const ViewMetricsTreemap = (props: ViewMetricsTreemapProps) => {
90
52
  const {
91
53
  metricsTableTitle,
92
54
  jobs,
@@ -109,7 +71,7 @@ const ViewMetricsTreemap = (props) => {
109
71
 
110
72
  // Search based on the group path on group title click
111
73
  const onGroupClick = useCallback(
112
- (groupPath) => {
74
+ (groupPath: string) => {
113
75
  // Clear seach when groupPath is emty (root)
114
76
  if (groupPath === '') {
115
77
  updateSearch('');
@@ -147,22 +109,29 @@ const ViewMetricsTreemap = (props) => {
147
109
  );
148
110
  };
149
111
 
150
- ViewMetricsTreemap.propTypes = {
151
- jobs: PropTypes.arrayOf(PropTypes.object).isRequired, // eslint-disable-line react/forbid-prop-types
152
- items: PropTypes.arrayOf(PropTypes.object).isRequired, // eslint-disable-line react/forbid-prop-types
153
- metricsTableTitle: PropTypes.node.isRequired,
154
- displayType: PropTypes.shape({
155
- groupBy: PropTypes.string,
156
- }).isRequired,
157
- emptyMessage: PropTypes.node.isRequired,
158
- showEntryInfo: PropTypes.func.isRequired,
159
- updateSearch: PropTypes.func.isRequired,
160
- search: PropTypes.string.isRequired,
161
- };
112
+ export interface BundleAssetsProps extends ComponentProps<typeof Stack> {
113
+ jobs: Array<Job>;
114
+ chunks: Array<WebpackChunk>;
115
+ items: Array<ReportMetricAssetRow>;
116
+ allItems: Array<ReportMetricAssetRow>;
117
+ filters: Record<string, boolean>;
118
+ updateFilters: (newFilters: Record<string, boolean>) => void;
119
+ resetFilters: () => void;
120
+ resetAllFilters: () => void;
121
+ totalRowCount?: number;
122
+ entryId?: string;
123
+ sort: SortAction;
124
+ updateSort: (params: SortAction) => void;
125
+ search: string;
126
+ updateSearch: (search: string) => void;
127
+ customComponentLink?: ElementType;
128
+ hideEntryInfo: () => void;
129
+ showEntryInfo: (entryId: string) => void;
130
+ }
162
131
 
163
- export const BundleAssets = (props) => {
132
+ export const BundleAssets = (props: BundleAssetsProps) => {
164
133
  const {
165
- className,
134
+ className = '',
166
135
  jobs,
167
136
  chunks,
168
137
  items,
@@ -170,15 +139,14 @@ export const BundleAssets = (props) => {
170
139
  updateFilters,
171
140
  resetFilters,
172
141
  resetAllFilters,
173
- totalRowCount,
142
+ totalRowCount = 0,
174
143
  filters,
175
- entryId,
176
- hasActiveFilters,
144
+ entryId = '',
177
145
  sort,
178
146
  updateSort,
179
147
  search,
180
148
  updateSearch,
181
- customComponentLink: CustomComponentLink,
149
+ customComponentLink: CustomComponentLink = ComponentLink,
182
150
  hideEntryInfo,
183
151
  showEntryInfo,
184
152
  } = props;
@@ -187,9 +155,9 @@ export const BundleAssets = (props) => {
187
155
 
188
156
  const [displayType, setDisplayType] = useMetricsDisplayType(DISPLAY_TYPE_GROUPS);
189
157
 
190
- const dropdownFilters = useMemo(
191
- () => getFilters({ compareMode: jobs?.length > 1, filters }),
192
- [jobs, filters],
158
+ const filterFieldsData = useMemo(
159
+ () => getFilters({ compareMode: jobs?.length > 1, filters, chunks }),
160
+ [jobs, filters, chunks],
193
161
  );
194
162
 
195
163
  const metricsTableTitle = useMemo(
@@ -205,7 +173,10 @@ export const BundleAssets = (props) => {
205
173
  );
206
174
 
207
175
  const EntryComponentLink = useCallback(
208
- ({ entryId: assetEntryId, ...assetNameRestProps }) => (
176
+ ({
177
+ entryId: assetEntryId,
178
+ ...assetNameRestProps
179
+ }: { entryId: string } & ComponentProps<typeof CustomComponentLink>) => (
209
180
  <CustomComponentLink
210
181
  section={SECTIONS.ASSETS}
211
182
  params={{
@@ -224,8 +195,12 @@ export const BundleAssets = (props) => {
224
195
  );
225
196
 
226
197
  const renderRowHeader = useCallback(
227
- (row) => (
228
- <AssetName row={row} EntryComponentLink={EntryComponentLink} className={css.assetName} />
198
+ (row: ReportMetricRow) => (
199
+ <AssetName
200
+ row={row as ReportMetricAssetRow}
201
+ EntryComponentLink={EntryComponentLink}
202
+ className={css.assetName}
203
+ />
229
204
  ),
230
205
  [EntryComponentLink],
231
206
  );
@@ -251,12 +226,15 @@ export const BundleAssets = (props) => {
251
226
  }, [allItems, entryId]);
252
227
 
253
228
  const exportDialog = useDialogState();
254
- const [exportSourceType, setExportSourceType] = useState(undefined);
229
+ const [exportSourceType, setExportSourceType] = useState<string>();
255
230
 
256
- const handleExportClick = useCallback((sourceType) => {
257
- setExportSourceType(sourceType);
258
- exportDialog.toggle();
259
- }, []);
231
+ const handleExportClick = useCallback(
232
+ (sourceType: string) => {
233
+ setExportSourceType(sourceType);
234
+ exportDialog.toggle();
235
+ },
236
+ [exportDialog, setExportSourceType],
237
+ );
260
238
 
261
239
  return (
262
240
  <>
@@ -287,8 +265,7 @@ export const BundleAssets = (props) => {
287
265
  />
288
266
  <Filters
289
267
  className={css.toolbarFilters}
290
- filters={dropdownFilters}
291
- hasActiveFilters={hasActiveFilters}
268
+ filters={filterFieldsData}
292
269
  onChange={updateFilters}
293
270
  />
294
271
  </FlexStack>
@@ -344,62 +321,3 @@ export const BundleAssets = (props) => {
344
321
  </>
345
322
  );
346
323
  };
347
-
348
- BundleAssets.defaultProps = {
349
- className: '',
350
- totalRowCount: 0,
351
- hasActiveFilters: false,
352
- customComponentLink: ComponentLink,
353
- entryId: '',
354
- };
355
-
356
- BundleAssets.propTypes = {
357
- className: PropTypes.string,
358
- jobs: PropTypes.arrayOf(
359
- PropTypes.shape({
360
- internalBuildNumber: PropTypes.number,
361
- label: PropTypes.string,
362
- }),
363
- ).isRequired,
364
- chunks: PropTypes.arrayOf({
365
- id: PropTypes.string,
366
- name: PropTypes.string,
367
- }).isRequired,
368
- items: PropTypes.arrayOf(
369
- PropTypes.shape({
370
- key: PropTypes.string,
371
- label: PropTypes.string,
372
- runs: PropTypes.arrayOf(
373
- PropTypes.shape({
374
- displayValue: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
375
- displayDelta: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
376
- }),
377
- ),
378
- }),
379
- ).isRequired,
380
- updateFilters: PropTypes.func.isRequired,
381
- resetFilters: PropTypes.func.isRequired,
382
- resetAllFilters: PropTypes.func.isRequired,
383
- totalRowCount: PropTypes.number,
384
- filters: PropTypes.shape({
385
- changed: PropTypes.bool,
386
- id: PropTypes.string,
387
- }).isRequired,
388
- entryId: PropTypes.string,
389
- hasActiveFilters: PropTypes.bool,
390
- search: PropTypes.string.isRequired,
391
- updateSearch: PropTypes.func.isRequired,
392
- sort: PropTypes.shape({
393
- field: PropTypes.string,
394
- direction: PropTypes.string,
395
- }).isRequired,
396
- updateSort: PropTypes.func.isRequired,
397
- allItems: PropTypes.arrayOf(
398
- PropTypes.shape({
399
- key: PropTypes.string,
400
- }),
401
- ).isRequired,
402
- customComponentLink: PropTypes.elementType,
403
- hideEntryInfo: PropTypes.func.isRequired,
404
- showEntryInfo: PropTypes.func.isRequired,
405
- };