in src/mixins/apiChangesHelpers.js [49:92]
getOptionsForDiffAvailabilities(diffAvailabilities = []) {
// create a diff availability hash composed of lists of the availability
// hash for each topic
const allDiffAvailabilities = diffAvailabilities.reduce((memo, diffAvailability = {}) => (
Object.keys(diffAvailability).reduce((result, key) => (
{ ...result, [key]: (result[key] || []).concat(diffAvailability[key]) }
), memo)
), {});
const diffKeys = Object.keys(allDiffAvailabilities);
// reduce each list into a single option for each key ("gm, "beta", etc),
// preferring the "Xcode" platform when possible
const diffAvailability = diffKeys.reduce((memo, key) => {
const diffs = allDiffAvailabilities[key];
return {
...memo,
[key]: diffs.find(d => d.platform === Platforms.xcode.label) || diffs[0],
};
}, {});
// create a list of value/label pairs for each item in the diff availability
// with the preferred order of "sdk", "beta", "minor", "major", (any others)
const toOption = key => ({
label: this.toVersionRange(diffAvailability[key]),
value: this.toOptionValue(key),
platform: diffAvailability[key].platform,
});
const {
sdk,
beta,
minor,
major,
...others
} = diffAvailability;
const sortedOptions = []
.concat(sdk ? toOption('sdk') : [])
.concat(beta ? toOption('beta') : [])
.concat(minor ? toOption('minor') : [])
.concat(major ? toOption('major') : [])
.concat(Object.keys(others).map(toOption));
return this.splitOptionsPerPlatform(sortedOptions);
},