Skip to content

Commit c0e8cdf

Browse files
committed
first try
1 parent 051e4e2 commit c0e8cdf

File tree

4 files changed

+94
-33
lines changed

4 files changed

+94
-33
lines changed

package.json

Lines changed: 2 additions & 1 deletion
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

Lines changed: 42 additions & 32 deletions
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

@@ -108,23 +110,43 @@ const getReleasedVersionsWithCandidates = ({
108110
})
109111
}
110112

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

120-
return releasedVersions.filter(
121-
releasedVersion =>
122-
releasedVersion.length > 0 &&
123-
((maxVersion && semver.lt(releasedVersion, maxVersion)) ||
124-
(minVersion &&
125-
semver.gt(releasedVersion, minVersion) &&
126-
!isVersionAReleaseAndOfLatest(releasedVersion)))
127-
)
149+
return filteredReleases
128150
}
129151

130152
// Finds the first minor release (which in react-native is the major) when compared to another version
@@ -216,16 +238,10 @@ const VersionSelector = ({ showDiff, showReleaseCandidates }) => {
216238
})
217239

218240
setFromVersionList(
219-
getReleasedVersions({
220-
releasedVersions: sanitizedVersions,
221-
maxVersion: toVersionToBeSet
222-
})
241+
filterReleases(sanitizedVersions, { maxVersion: toVersionToBeSet })
223242
)
224243
setToVersionList(
225-
getReleasedVersions({
226-
releasedVersions: sanitizedVersions,
227-
minVersion: fromVersionToBeSet
228-
})
244+
filterReleases(sanitizedVersions, { minVersion: fromVersionToBeSet })
229245
)
230246

231247
setLocalFromVersion(fromVersionToBeSet)
@@ -251,16 +267,10 @@ const VersionSelector = ({ showDiff, showReleaseCandidates }) => {
251267
}
252268

253269
setFromVersionList(
254-
getReleasedVersions({
255-
releasedVersions: allVersions,
256-
maxVersion: localToVersion
257-
})
270+
filterReleases(allVersions, { maxVersion: localToVersion })
258271
)
259272
setToVersionList(
260-
getReleasedVersions({
261-
releasedVersions: allVersions,
262-
minVersion: localFromVersion
263-
})
273+
filterReleases(allVersions, { minVersion: localFromVersion })
264274
)
265275
}, [
266276
isLoading,
Lines changed: 45 additions & 0 deletions
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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8662,6 +8662,11 @@ raf@^3.4.0, raf@^3.4.1:
86628662
dependencies:
86638663
performance-now "^2.1.0"
86648664

8665+
ramda@^0.26.1:
8666+
version "0.26.1"
8667+
resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06"
8668+
integrity sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==
8669+
86658670
randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
86668671
version "2.1.0"
86678672
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"

0 commit comments

Comments
 (0)