@@ -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
@@ -106,23 +108,43 @@ const getReleasedVersionsWithCandidates = ({
106
108
} )
107
109
}
108
110
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
+ }
117
146
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
126
148
}
127
149
128
150
// 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 }) => {
214
236
} )
215
237
216
238
setFromVersionList (
217
- getReleasedVersions ( {
218
- releasedVersions : sanitizedVersions ,
219
- maxVersion : toVersionToBeSet
220
- } )
239
+ filterReleases ( sanitizedVersions , { maxVersion : toVersionToBeSet } )
221
240
)
222
241
setToVersionList (
223
- getReleasedVersions ( {
224
- releasedVersions : sanitizedVersions ,
225
- minVersion : fromVersionToBeSet
226
- } )
242
+ filterReleases ( sanitizedVersions , { minVersion : fromVersionToBeSet } )
227
243
)
228
244
229
245
setLocalFromVersion ( fromVersionToBeSet )
@@ -249,16 +265,10 @@ const VersionSelector = ({ showDiff, showReleaseCandidates }) => {
249
265
}
250
266
251
267
setFromVersionList (
252
- getReleasedVersions ( {
253
- releasedVersions : allVersions ,
254
- maxVersion : localToVersion
255
- } )
268
+ filterReleases ( allVersions , { maxVersion : localToVersion } )
256
269
)
257
270
setToVersionList (
258
- getReleasedVersions ( {
259
- releasedVersions : allVersions ,
260
- minVersion : localFromVersion
261
- } )
271
+ filterReleases ( allVersions , { minVersion : localFromVersion } )
262
272
)
263
273
} , [
264
274
isLoading ,
0 commit comments