Skip to content

Commit 7db71e7

Browse files
committed
first try
1 parent 7a44721 commit 7db71e7

File tree

4 files changed

+94
-33
lines changed

4 files changed

+94
-33
lines changed

package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
"antd": "3.26.7",
99
"markdown-to-jsx": "6.10.3",
1010
"query-string": "6.10.1",
11+
"ramda": "^0.26.1",
1112
"react": "16.12.0",
1213
"react-content-loader": "4.3.4",
1314
"react-diff-view": "2.4.1",
@@ -51,4 +52,4 @@
5152
"last 1 safari version"
5253
]
5354
}
54-
}
55+
}

src/components/common/VersionSelector.js

+42-32
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import styled from 'styled-components'
33
import { Button, Popover } from 'antd'
44
import semver from 'semver/preload'
55
import queryString from 'query-string'
6+
import R from 'ramda'
7+
68
import { RELEASES_URL } from '../../utils'
79
import { Select } from './'
810

@@ -106,23 +108,43 @@ const getReleasedVersionsWithCandidates = ({
106108
})
107109
}
108110

109-
const getReleasedVersions = ({ releasedVersions, minVersion, maxVersion }) => {
110-
const latestMajorReleaseVersion = getLatestMajorReleaseVersion(
111-
releasedVersions
112-
)
113-
114-
const isVersionAReleaseAndOfLatest = version =>
115-
version.includes('rc') &&
116-
semver.valid(semver.coerce(version)) === latestMajorReleaseVersion
111+
export const isRC = release => release.includes('rc')
112+
113+
export const filterReleases = (
114+
releases,
115+
{ showRCs = 'all', minVersion, maxVersion } // defaults should be whatever will return the same results as the input
116+
) => {
117+
let filteredReleases = releases
118+
119+
switch (showRCs) {
120+
case 'all':
121+
break
122+
case 'latest': {
123+
let latestRelease = filteredReleases[0]
124+
let earliestLatestReleaseIndex = R.findIndex(
125+
release =>
126+
semver.compare(
127+
semver.coerce(release),
128+
semver.coerce(latestRelease)
129+
) !== 0
130+
)(filteredReleases)
131+
132+
let [latest, rest] = R.splitAt(
133+
earliestLatestReleaseIndex,
134+
filteredReleases
135+
)
136+
rest = R.reject(isRC)(rest)
137+
filteredReleases = R.concat(latest, rest)
138+
break
139+
}
140+
case 'none':
141+
filteredReleases = R.reject(isRC)(filteredReleases)
142+
break
143+
default:
144+
break
145+
}
117146

118-
return releasedVersions.filter(
119-
releasedVersion =>
120-
releasedVersion.length > 0 &&
121-
((maxVersion && semver.lt(releasedVersion, maxVersion)) ||
122-
(minVersion &&
123-
semver.gt(releasedVersion, minVersion) &&
124-
!isVersionAReleaseAndOfLatest(releasedVersion)))
125-
)
147+
return filteredReleases
126148
}
127149

128150
// Finds the first minor release (which in react-native is the major) when compared to another version
@@ -214,16 +236,10 @@ const VersionSelector = ({ showDiff, showReleaseCandidates }) => {
214236
})
215237

216238
setFromVersionList(
217-
getReleasedVersions({
218-
releasedVersions: sanitizedVersions,
219-
maxVersion: toVersionToBeSet
220-
})
239+
filterReleases(sanitizedVersions, { maxVersion: toVersionToBeSet })
221240
)
222241
setToVersionList(
223-
getReleasedVersions({
224-
releasedVersions: sanitizedVersions,
225-
minVersion: fromVersionToBeSet
226-
})
242+
filterReleases(sanitizedVersions, { minVersion: fromVersionToBeSet })
227243
)
228244

229245
setLocalFromVersion(fromVersionToBeSet)
@@ -249,16 +265,10 @@ const VersionSelector = ({ showDiff, showReleaseCandidates }) => {
249265
}
250266

251267
setFromVersionList(
252-
getReleasedVersions({
253-
releasedVersions: allVersions,
254-
maxVersion: localToVersion
255-
})
268+
filterReleases(allVersions, { maxVersion: localToVersion })
256269
)
257270
setToVersionList(
258-
getReleasedVersions({
259-
releasedVersions: allVersions,
260-
minVersion: localFromVersion
261-
})
271+
filterReleases(allVersions, { minVersion: localFromVersion })
262272
)
263273
}, [
264274
isLoading,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import R from 'ramda'
2+
3+
import { filterReleases, isRC } from './VersionSelector'
4+
5+
describe('rc checker', () => {
6+
it('should detect rc releases correctly', () => {
7+
expect(isRC('0.62.0')).toBe(false)
8+
expect(isRC('0.62.0-rc.0')).toBe(true)
9+
})
10+
})
11+
12+
const releases = [
13+
'0.63.2-rc.1',
14+
'0.63.2-rc.0',
15+
'0.63.1',
16+
'0.63.0',
17+
'0.62.4',
18+
'0.62.4-rc.1',
19+
'0.62.4-rc.0',
20+
'0.62.3',
21+
'0.62.1',
22+
'0.62.0',
23+
'0.62.0-rc.1',
24+
'0.61.3'
25+
]
26+
const releasesNoRCs = R.reject(isRC)(releases)
27+
// console.log(releasesNoRCs)
28+
const releasesNoRCsWithLatestReleaseRCs = [
29+
'0.63.2-rc.1',
30+
'0.63.2-rc.0',
31+
...releasesNoRCs
32+
]
33+
34+
describe('release filtering', () => {
35+
it('should return the correct releases', () => {
36+
// expect(filterReleases(releasesWithRCs)).toBe(releasesWithRCs)
37+
expect(filterReleases(releases, {})).toEqual(releases)
38+
39+
expect(filterReleases(releases, { showRCs: 'all' })).toEqual(releases)
40+
expect(filterReleases(releases, { showRCs: 'none' })).toEqual(releasesNoRCs)
41+
expect(filterReleases(releases, { showRCs: 'latest' })).toEqual(
42+
releasesNoRCsWithLatestReleaseRCs
43+
)
44+
})
45+
})

yarn.lock

+5
Original file line numberDiff line numberDiff line change
@@ -8648,6 +8648,11 @@ raf@^3.4.0, raf@^3.4.1:
86488648
dependencies:
86498649
performance-now "^2.1.0"
86508650

8651+
ramda@^0.26.1:
8652+
version "0.26.1"
8653+
resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06"
8654+
integrity sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==
8655+
86518656
randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
86528657
version "2.1.0"
86538658
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"

0 commit comments

Comments
 (0)