Skip to content

Commit d9a8c1d

Browse files
committed
Merge remote-tracking branch 'origin/master'
2 parents c6cd638 + 4f02bea commit d9a8c1d

File tree

2 files changed

+72
-63
lines changed

2 files changed

+72
-63
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import React, { useEffect, useState } from 'react';
2+
import { MoreData } from './elements';
3+
4+
const formatSize = (value: number) => {
5+
let unit: string;
6+
let size: number;
7+
if (Math.log10(value) < 3) {
8+
unit = 'B';
9+
size = value;
10+
} else if (Math.log10(value) < 6) {
11+
unit = 'kB';
12+
size = value / 1024;
13+
} else {
14+
unit = 'mB';
15+
size = value / 1024 / 1024;
16+
}
17+
18+
return `${size.toFixed(1)}${unit}`;
19+
};
20+
21+
type Props = {
22+
dependency: string;
23+
version: string;
24+
};
25+
26+
export const BundleSizes = ({ dependency, version = '' }: Props) => {
27+
const [size, setSize] = useState(null);
28+
const [error, setError] = useState(null);
29+
30+
useEffect(() => {
31+
const cleanVersion = version.split('^');
32+
getSizeForPKG(`${dependency}@${cleanVersion[cleanVersion.length - 1]}`);
33+
}, [dependency, version]);
34+
35+
const getSizeForPKG = (pkg: string) => {
36+
fetch(`https://bundlephobia.com/api/size?package=${pkg}`)
37+
.then(rsp => rsp.json())
38+
.then(setSize)
39+
.catch(setError);
40+
};
41+
42+
if (error) {
43+
return (
44+
<MoreData>There was a problem getting the size for {dependency}</MoreData>
45+
);
46+
}
47+
48+
return size ? (
49+
<MoreData>
50+
<li>
51+
<span>Gzip:</span> {formatSize(size.gzip)}
52+
</li>
53+
<li>
54+
<span>Size:</span> {formatSize(size.size)}
55+
</li>
56+
</MoreData>
57+
) : null;
58+
};

packages/app/src/app/pages/Sandbox/Editor/Workspace/Dependencies/VersionEntry/index.js

Lines changed: 14 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -9,24 +9,8 @@ import Tooltip from '@codesandbox/common/lib/components/Tooltip';
99

1010
import { EntryContainer, IconArea, Icon } from '../../elements';
1111
import { Link } from '../elements';
12-
import { Version, MoreData, VersionSelect } from './elements';
13-
14-
const formatSize = value => {
15-
let unit;
16-
let size;
17-
if (Math.log10(value) < 3) {
18-
unit = 'B';
19-
size = value;
20-
} else if (Math.log10(value) < 6) {
21-
unit = 'kB';
22-
size = value / 1024;
23-
} else {
24-
unit = 'mB';
25-
size = value / 1024 / 1024;
26-
}
27-
28-
return { unit, size: parseFloat(size).toFixed(1) };
29-
};
12+
import { Version, VersionSelect } from './elements';
13+
import { BundleSizes } from './BundleSizes';
3014

3115
export default class VersionEntry extends React.PureComponent {
3216
state = {
@@ -49,27 +33,6 @@ export default class VersionEntry extends React.PureComponent {
4933
});
5034
}
5135

52-
getSizeForPKG(pkg) {
53-
fetch(`https://bundlephobia.com/api/size?package=${pkg}`)
54-
.then(response => {
55-
if (!response.ok) {
56-
throw new Error('Bad request');
57-
}
58-
59-
return response.json();
60-
})
61-
.then(size =>
62-
this.setState({
63-
size,
64-
})
65-
)
66-
.catch(err => {
67-
if (process.env.NODE_ENV === 'development') {
68-
console.error(err); // eslint-disable-line no-console
69-
}
70-
});
71-
}
72-
7336
UNSAFE_componentWillMount() {
7437
const { dependencies, dependency } = this.props;
7538
const client = algoliasearch(
@@ -93,10 +56,6 @@ export default class VersionEntry extends React.PureComponent {
9356
try {
9457
const versionRegex = /^\d{1,3}\.\d{1,3}.\d{1,3}$/;
9558
const version = dependencies[dependency];
96-
const cleanVersion = version.split('^');
97-
this.getSizeForPKG(
98-
`${dependency}@${cleanVersion[cleanVersion.length - 1]}`
99-
);
10059
if (!versionRegex.test(version)) {
10160
this.setVersionsForLatestPkg(`${dependency}@${version}`);
10261
}
@@ -160,16 +119,14 @@ export default class VersionEntry extends React.PureComponent {
160119

161120
{hovering && (
162121
<IconArea>
163-
{size.size ? (
164-
<Tooltip
165-
content={open ? 'Hide sizes' : 'Show sizes'}
166-
style={{ outline: 'none' }}
167-
>
168-
<Icon onClick={this.handleOpen}>
169-
{open ? <ArrowDropUp /> : <ArrowDropDown />}
170-
</Icon>
171-
</Tooltip>
172-
) : null}
122+
<Tooltip
123+
content={open ? 'Hide sizes' : 'Show sizes'}
124+
style={{ outline: 'none' }}
125+
>
126+
<Icon onClick={this.handleOpen}>
127+
{open ? <ArrowDropUp /> : <ArrowDropDown />}
128+
</Icon>
129+
</Tooltip>
173130
<Tooltip content="Update to latest" style={{ outline: 'none' }}>
174131
<Icon onClick={this.handleRefresh}>
175132
<RefreshIcon />
@@ -184,16 +141,10 @@ export default class VersionEntry extends React.PureComponent {
184141
)}
185142
</EntryContainer>
186143
{open ? (
187-
<MoreData>
188-
<li>
189-
<span>Gzip:</span> {formatSize(size.gzip).size}
190-
{formatSize(size.gzip).unit}
191-
</li>
192-
<li>
193-
<span>Size:</span> {formatSize(size.size).size}
194-
{formatSize(size.size).unit}
195-
</li>
196-
</MoreData>
144+
<BundleSizes
145+
dependency={dependency}
146+
version={dependencies[dependency]}
147+
/>
197148
) : null}
198149
</Fragment>
199150
);

0 commit comments

Comments
 (0)