Skip to content

Commit 7c166dd

Browse files
authored
Add a nice view for the version of a csb ci dependency (codesandbox#2397)
1 parent c40b25e commit 7c166dd

File tree

5 files changed

+41
-27
lines changed

5 files changed

+41
-27
lines changed

packages/app/src/app/pages/Sandbox/Editor/Workspace/Dependencies/VersionEntry/elements.js renamed to packages/app/src/app/pages/Sandbox/Editor/Workspace/Dependencies/VersionEntry/elements.ts

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,11 @@ import styled, { css } from 'styled-components';
22
import Select from '@codesandbox/common/lib/components/Select';
33
import { EntryContainer } from '../../elements';
44

5-
const getRight = (hovering, withSize) => {
6-
if (hovering) {
7-
if (withSize) {
8-
return 5;
9-
}
10-
return 3.5;
11-
}
12-
13-
return 1;
14-
};
15-
16-
export const Version = styled.div`
17-
${({ hovering, theme, withSize }) => css`
5+
export const Version = styled.div<{ hovering?: boolean }>`
6+
${({ hovering, theme }) => css`
187
transition: 0.3s ease all;
198
position: absolute;
20-
right: ${getRight(hovering, withSize)}rem;
9+
right: ${hovering ? 3.5 : 1}rem;
2110
color: ${theme.background.lighten(2).clearer(0.5)};
2211
display: ${hovering ? 'none' : 'block'};
2312
`};
@@ -41,7 +30,7 @@ export const MoreData = styled(EntryContainer)`
4130
}
4231
`;
4332

44-
export const VersionSelect = styled(Select)`
33+
export const VersionSelect = styled(Select)<{ hovering?: boolean }>`
4534
${({ hovering, theme }) => css`
4635
visibility: ${hovering ? 'visible' : 'hidden'};
4736
width: 60px;

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

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,47 @@ import ArrowDropUp from 'react-icons/lib/md/keyboard-arrow-up';
66
import algoliasearch from 'algoliasearch/lite';
77
import compareVersions from 'compare-versions';
88
import Tooltip from '@codesandbox/common/lib/components/Tooltip';
9+
import { CSB_PKG_PROTOCOL } from '@codesandbox/common/lib/utils/ci';
910

1011
import { EntryContainer, IconArea, Icon } from '../../elements';
1112
import { Link } from '../elements';
1213
import { Version, VersionSelect } from './elements';
1314
import { BundleSizes } from './BundleSizes';
1415

15-
export default class VersionEntry extends React.PureComponent {
16-
state = {
16+
interface Props {
17+
dependencies: { [dep: string]: string };
18+
dependency: string;
19+
onRemove: (dep: string) => void;
20+
onRefresh: (dep: string, version?: string) => void;
21+
}
22+
23+
interface State {
24+
hovering: boolean;
25+
version: null | string;
26+
open: boolean;
27+
versions: string[];
28+
}
29+
30+
function formatVersion(version: string) {
31+
if (CSB_PKG_PROTOCOL.test(version)) {
32+
const commitSha = version.match(/commit\/(.*)\//);
33+
if (commitSha && commitSha[1]) {
34+
return `csb:${commitSha[1]}`;
35+
}
36+
}
37+
38+
return version;
39+
}
40+
41+
export class VersionEntry extends React.PureComponent<Props, State> {
42+
state: State = {
1743
hovering: false,
1844
version: null,
1945
open: false,
20-
size: {},
2146
versions: [],
2247
};
2348

24-
setVersionsForLatestPkg(pkg) {
49+
setVersionsForLatestPkg(pkg: string) {
2550
const that = this;
2651
fetch(`/api/v1/dependencies/${pkg}`)
2752
.then(response => response.json())
@@ -89,7 +114,7 @@ export default class VersionEntry extends React.PureComponent {
89114
return null;
90115
}
91116

92-
const { hovering, version, size, open, versions } = this.state;
117+
const { hovering, version, open, versions } = this.state;
93118
return (
94119
<Fragment>
95120
<EntryContainer
@@ -112,9 +137,9 @@ export default class VersionEntry extends React.PureComponent {
112137
</option>
113138
))}
114139
</VersionSelect>
115-
<Version withSize={!!size.size} hovering={hovering}>
116-
{dependencies[dependency]}{' '}
117-
{hovering && version && <span>({version})</span>}
140+
<Version hovering={hovering}>
141+
{formatVersion(dependencies[dependency])}{' '}
142+
{hovering && version && <span>({formatVersion(version)})</span>}
118143
</Version>
119144

120145
{hovering && (

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import getDefinition from '@codesandbox/common/lib/templates';
77
import { WorkspaceSubtitle } from '../elements';
88

99
import AddVersion from './AddVersion';
10-
import VersionEntry from './VersionEntry';
10+
import { VersionEntry } from './VersionEntry';
1111
import AddResource from './AddResource';
1212
import ExternalResource from './ExternalResource';
1313

packages/app/src/sandbox/eval/npm/fetch-npm-module.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import * as pathUtils from '@codesandbox/common/lib/utils/path';
2+
import { CSB_PKG_PROTOCOL } from '@codesandbox/common/lib/utils/ci';
23
import resolve from 'browser-resolve';
34
import DependencyNotFoundError from 'sandbox-hooks/errors/dependency-not-found-error';
45

@@ -123,10 +124,8 @@ export function setCombinedMetas(givenCombinedMetas: Meta) {
123124
combinedMetas = givenCombinedMetas;
124125
}
125126

126-
const CSB_DRAFT_PROTOCOL = /https:\/\/pkg(-staging)?\.csb.dev/;
127-
128127
const getFetchProtocol = (depVersion: string, useFallback = false) => {
129-
const isDraftProtocol = CSB_DRAFT_PROTOCOL.test(depVersion);
128+
const isDraftProtocol = CSB_PKG_PROTOCOL.test(depVersion);
130129

131130
if (isDraftProtocol) {
132131
return urlProtocols.csbGH;

packages/common/src/utils/ci.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export const CSB_PKG_PROTOCOL = /https:\/\/pkg(-staging)?\.csb.dev/;

0 commit comments

Comments
 (0)