runtime/shared/formatNumber.js (49 lines of code) (raw):

/** * (c) Meta Platforms, Inc. and affiliates. Confidential and proprietary. * * This file is shared between www and fbsource and www is the source of truth. * When you make change to this file on www, please make sure you test it on * fbsource and send a diff to update the files too so that the 2 versions are * kept in sync. * * Run the following command to sync the change from www to fbsource. * js1 upgrade www-shared -p fbt --local ~/www * * @format * @flow strict-local * @emails oncall+i18n_fbt_js */ 'use strict'; const fbs = require('fbs'); const intlNumUtils = require('intlNumUtils'); function formatNumber(value: number, decimals?: ?number): string { return intlNumUtils.formatNumber(value, decimals); } function getAtLeastString(maxNumber: number, decimals?: ?number): Fbs { // after we start using CLDR data, it will not be fbt anymore. return ( <fbs desc="Label with meaning 'at least number'" project="locale_data"> <fbs:param name="number" number={maxNumber}> {intlNumUtils.formatNumberWithThousandDelimiters(maxNumber, decimals)} </fbs:param> {'+'} </fbs> ); } function getLessThanString(minNumber: number, decimals?: ?number): Fbs { // after we start using CLDR data, it will not be fbt anymore. return ( <fbs desc="Label with meaning 'less than number'" project="locale_data"> {'<'} <fbs:param name="number" number={minNumber}> {intlNumUtils.formatNumberWithThousandDelimiters(minNumber, decimals)} </fbs:param> </fbs> ); } function formatNumberWithMaxLimit( value: number, maxvalue: number, decimals?: ?number, ): Fbs | string { return value > maxvalue ? getAtLeastString(maxvalue, decimals) : intlNumUtils.formatNumberWithThousandDelimiters(value, decimals); } function formatNumberWithMinLimit( value: number, minvalue: number, decimals?: ?number, ): Fbs | string { return value < minvalue ? getLessThanString(minvalue, decimals) : intlNumUtils.formatNumberWithThousandDelimiters(value, decimals); } formatNumber.withThousandDelimiters = intlNumUtils.formatNumberWithThousandDelimiters; formatNumber.withMaxLimit = formatNumberWithMaxLimit; formatNumber.withMinLimit = formatNumberWithMinLimit; module.exports = formatNumber;