diff --git a/src/common/comparatorWithPriorities.js b/src/common/comparatorWithPriorities.js new file mode 100644 index 000000000..143d73351 --- /dev/null +++ b/src/common/comparatorWithPriorities.js @@ -0,0 +1,23 @@ +const comparatorWithPriorities = (priorities) => { + return (a, b) => { + if (isNaN(priorities[a]) && isNaN(priorities[b])) { + return a.localeCompare(b); + } else if (isNaN(priorities[a])) { + if (priorities[b] === Number.NEGATIVE_INFINITY) { + return -1; + } else { + return 1; + } + } else if (isNaN(priorities[b])) { + if (priorities[a] === Number.NEGATIVE_INFINITY) { + return 1; + } else { + return -1; + } + } else { + return priorities[b] - priorities[a]; + } + }; +}; + +module.exports = comparatorWithPriorities; diff --git a/src/common/index.js b/src/common/index.js index 9ea4d923c..81b0c1d16 100644 --- a/src/common/index.js +++ b/src/common/index.js @@ -18,6 +18,7 @@ const SharePrompt = require('./SharePrompt'); const Slider = require('./Slider'); const TextInput = require('./TextInput'); const { ToastProvider, useToast } = require('./Toast'); +const comparatorWithPriorities = require('./comparatorWithPriorities'); const CONSTANTS = require('./CONSTANTS'); const languageNames = require('./languageNames'); const routesRegexp = require('./routesRegexp'); @@ -55,6 +56,7 @@ module.exports = { TextInput, ToastProvider, useToast, + comparatorWithPriorities, CONSTANTS, languageNames, routesRegexp,