@@ -3,6 +3,8 @@ import styled from 'styled-components'
3
3
import { Button , Popover } from 'antd'
4
4
import semver from 'semver/preload'
5
5
import queryString from 'query-string'
6
+ import R from 'ramda'
7
+
6
8
import { RELEASES_URL } from '../../utils'
7
9
import { Select } from './'
8
10
@@ -108,23 +110,43 @@ const getReleasedVersionsWithCandidates = ({
108
110
} )
109
111
}
110
112
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
+ }
119
148
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
128
150
}
129
151
130
152
// 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 }) => {
216
238
} )
217
239
218
240
setFromVersionList (
219
- getReleasedVersions ( {
220
- releasedVersions : sanitizedVersions ,
221
- maxVersion : toVersionToBeSet
222
- } )
241
+ filterReleases ( sanitizedVersions , { maxVersion : toVersionToBeSet } )
223
242
)
224
243
setToVersionList (
225
- getReleasedVersions ( {
226
- releasedVersions : sanitizedVersions ,
227
- minVersion : fromVersionToBeSet
228
- } )
244
+ filterReleases ( sanitizedVersions , { minVersion : fromVersionToBeSet } )
229
245
)
230
246
231
247
setLocalFromVersion ( fromVersionToBeSet )
@@ -251,16 +267,10 @@ const VersionSelector = ({ showDiff, showReleaseCandidates }) => {
251
267
}
252
268
253
269
setFromVersionList (
254
- getReleasedVersions ( {
255
- releasedVersions : allVersions ,
256
- maxVersion : localToVersion
257
- } )
270
+ filterReleases ( allVersions , { maxVersion : localToVersion } )
258
271
)
259
272
setToVersionList (
260
- getReleasedVersions ( {
261
- releasedVersions : allVersions ,
262
- minVersion : localFromVersion
263
- } )
273
+ filterReleases ( allVersions , { minVersion : localFromVersion } )
264
274
)
265
275
} , [
266
276
isLoading ,
0 commit comments