@@ -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
@@ -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 ,
0 commit comments