@@ -3,6 +3,8 @@ import styled from 'styled-components'
33import { Button , Popover } from 'antd'
44import semver from 'semver/preload'
55import queryString from 'query-string'
6+ import R from 'ramda'
7+
68import { RELEASES_URL } from '../../utils'
79import { 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 ,
0 commit comments