{"version":3,"file":"index-CbJa8E8W.js","sources":["../../../app/assets/javascripts/app/numbers/formatter/index.ts"],"sourcesContent":["\n// region JS Imports\n\n// region External Modules\nimport _compact from \"lodash/compact\"\n\nimport numeral from \"numeral\"\n// endregion External Modules\n\n// region Private Modules\nimport DataRetriever from \"app/data_retriever\"\n\nimport I18n from \"plugins/i18n-js\"\n// endregion Private Modules\n\n// region Public Components\n// endregion Public Components\n\n// region Private Components\n// endregion Private Components\n\n// endregion JS Imports\n\n\ninterface INumberWithCommasAndSuffixOptions {\n use_short_form_for_chinese: boolean,\n}\nconst default_options: INumberWithCommasAndSuffixOptions = {\n use_short_form_for_chinese: true,\n}\n\nconst default_number_format = \"0,0.[00]\"\nconst zh_number_format = \"0,0\"\nconst zh_small_number_format = \"0,0.[0]\"\n\nconst Formatter = {\n phoneNumber(value: string, country_code: string): string | null {\n if (value && !value.includes(country_code)){\n return `${country_code}${value.replace(/\\s+/g, \"\")}`\n }\n\n return value\n },\n\n\n // region to be deprecated\n\n numberWithCommas(value: number | string): string | undefined {\n if ( typeof value === \"string\" && value.length === 0){\n return\n }\n const parts = value.toString().split(\".\")\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\")\n return parts.join(\".\")\n },\n numberWithCommasAndSuffix(value: number, options?: INumberWithCommasAndSuffixOptions): string | undefined {\n const opts = Object.assign({}, options, default_options)\n\n let final_value = value.toString()\n\n switch (I18n.locale){\n case \"zh-TW\":\n case \"zh-HK\":\n if (value >= 100000000 && opts.use_short_form_for_chinese) {\n const value_at_100_000_000 = Math.floor(value / 100000000)\n const value_at_10_000 = Math.round((value - (100000000.0 * value_at_100_000_000)) / 10000)\n\n return [\n `${value_at_100_000_000}億`,\n (value_at_10_000 > 0) ? `${value_at_10_000}萬` : ``,\n ].join(\"\")\n }\n\n if (value >= 10000 && opts.use_short_form_for_chinese) {\n final_value = (value / 10000).toFixed(1).replace(/\\.0$/, \"\")\n\n return `${Formatter.numberWithCommas(final_value)}萬`\n }\n\n return Formatter.numberWithCommas(final_value)\n case \"zh-CN\":\n if (value >= 100000000 && opts.use_short_form_for_chinese) {\n const value_at_100_000_000 = Math.floor(value / 100000000)\n const value_at_10_000 = Math.round((value - (100000000.0 * value_at_100_000_000)) / 10000)\n\n return [\n `${value_at_100_000_000}亿`,\n (value_at_10_000 > 0) ? `${value_at_10_000}万` : ``,\n ].join(\"\")\n }\n\n if (value >= 10000 && opts.use_short_form_for_chinese) {\n final_value = (value / 10000).toFixed(1).replace(/\\.0$/, \"\")\n\n return `${Formatter.numberWithCommas(final_value)}万`\n }\n\n return Formatter.numberWithCommas(final_value)\n default:\n if (value >= 1000000) {\n final_value = (value / 1000000).toFixed(1).replace(/\\.0$/, \"\")\n\n return `${Formatter.numberWithCommas(final_value)}M`\n }\n\n if (value >= 1000) {\n final_value = (value / 1000).toFixed(1).replace(/\\.0$/, \"\")\n\n return `${Formatter.numberWithCommas(final_value)}K`\n }\n\n return final_value\n }\n },\n numberAlwaysWithCommasAndSuffix(value: number): string | undefined {\n let final_value = value.toString()\n\n switch (I18n.locale){\n case \"zh-TW\":\n case \"zh-HK\":\n if (value >= 100000000) {\n const value_at_100_000_000 = Math.floor(value / 100000000)\n const value_at_10_000 = Math.round((value - (100000000.0 * value_at_100_000_000)) / 10000)\n\n return [\n `${value_at_100_000_000}億`,\n (value_at_10_000 > 0) ? `${Formatter.numberWithCommas(value_at_10_000)}萬` : \"\",\n ].join(\"\")\n }\n\n if (value > 0) {\n final_value = (value / 10000).toFixed(1).replace(/\\.0$/, \"\")\n\n return `${Formatter.numberWithCommas(final_value)}萬`\n }\n\n return Formatter.numberWithCommas(final_value)\n case \"zh-CN\":\n if (value >= 100000000) {\n const value_at_100_000_000 = Math.floor(value / 100000000)\n const value_at_10_000 = Math.round((value - (100000000.0 * value_at_100_000_000)) / 10000)\n\n return [\n `${value_at_100_000_000}亿`,\n (value_at_10_000 > 0) ? `${Formatter.numberWithCommas(value_at_10_000)}万` : \"\",\n ].join(\"\")\n }\n\n if (value > 0) {\n final_value = (value / 10000).toFixed(1).replace(/\\.0$/, \"\")\n\n return `${Formatter.numberWithCommas(final_value)}万`\n }\n\n return Formatter.numberWithCommas(final_value)\n default:\n if (value >= 1000000000) {\n final_value = (value / 1000000000).toFixed(2).replace(/\\.0$/, \"\")\n\n return `${Formatter.numberWithCommas(final_value)}B`\n }\n\n if (value >= 1000000) {\n final_value = (value / 1000000).toFixed(2).replace(/\\.0$/, \"\")\n\n return `${Formatter.numberWithCommas(final_value)}M`\n }\n\n if (value > 0) {\n final_value = (value / 1000).toFixed(2).replace(/\\.0$/, \"\")\n\n return `${Formatter.numberWithCommas(final_value)}K`\n }\n\n return final_value\n }\n },\n\n numberWithoutCommas(value: string | number): number | null {\n if ( typeof value === \"string\" && value.length === 0){\n return null\n }\n\n return parseFloat(value.toString().replace(/,/g, \"\"))\n },\n\n numberWithCommasAndCurrency(value: string | number, precision = 2) {\n if ( typeof value === \"string\" && value.length === 0){\n return\n }\n const currency_unit = DataRetriever.get(\"currency-unit\") || \"$\"\n const number_without_comma = Formatter.numberWithoutCommas(value)\n if ( number_without_comma == null ){ return }\n const sanitized_value = Math.abs(number_without_comma)\n\n return [currency_unit, Formatter.numberWithCommas(sanitized_value.toFixed(precision))].join(\"\")\n },\n\n // endregion to be deprecated\n\n formattedNumberLabelForDisplay(input_hash: {value: number | null, prefix: string | null, use_exact_value: boolean} ) {\n const original_value = input_hash.value\n const prefix = input_hash.prefix\n const use_exact_value = input_hash.use_exact_value\n\n if ( original_value == null || isNaN(original_value) ) {\n return null\n }\n else if ( original_value === 0 ) {\n return _compact([prefix, \"0\"]).join(\"\")\n }\n else {\n let formattedNumberString = original_value.toString()\n let rounded_value = original_value\n\n switch (I18n.locale) {\n case \"zh-TW\":\n case \"zh-HK\":\n rounded_value = parseFloat(original_value.toFixed(0))\n\n if ( use_exact_value ) {\n formattedNumberString = numeral(rounded_value).format(zh_number_format)\n }\n else if ( original_value < 10000 ) {\n formattedNumberString = `${numeral(rounded_value / 10000).format(zh_small_number_format)}萬`\n }\n else if ( Math.round(rounded_value / 10000) * 10000 < 100000000 ) {\n formattedNumberString = `${numeral(rounded_value / 10000).format(zh_number_format)}萬`\n }\n else if ( Math.round(rounded_value / 100000000) * 100000000 < 1000000000000 ) {\n formattedNumberString = `${numeral(rounded_value / 100000000).format(default_number_format)}億`\n }\n else {\n formattedNumberString = `${numeral(rounded_value / 1000000000000).format(default_number_format)}萬億`\n }\n\n break;\n\n case \"zh-CN\":\n if ( use_exact_value ) {\n formattedNumberString = numeral(rounded_value).format(zh_number_format)\n }\n else if ( original_value < 10000 ) {\n formattedNumberString = `${numeral(rounded_value / 10000).format(zh_small_number_format)}万`\n }\n else if ( Math.round(rounded_value / 10000) * 10000 < 100000000 ) {\n formattedNumberString = `${numeral(rounded_value / 10000).format(zh_number_format)}万`\n }\n else if ( Math.round(rounded_value / 100000000) * 100000000 < 1000000000000 ) {\n formattedNumberString = `${numeral(rounded_value / 100000000).format(default_number_format)}亿`\n }\n else {\n formattedNumberString = `${numeral(rounded_value / 1000000000000).format(default_number_format)}万亿`\n }\n\n break;\n\n default:\n rounded_value = parseFloat(original_value.toFixed(2))\n\n if ( use_exact_value ) {\n formattedNumberString = numeral(rounded_value).format(default_number_format)\n }\n else if ( Math.round(rounded_value / 1000) * 1000 < 1000000 ) {\n formattedNumberString = `${numeral(original_value / 1000).format(default_number_format)}K`\n }\n else if ( Math.round(rounded_value / 1000000) * 1000000 < 1000000000 ) {\n formattedNumberString = `${numeral(rounded_value / 1000000).format(default_number_format)}M`\n }\n else if ( Math.round(rounded_value / 1000000000) * 1000000000 < 1000000000000 ) {\n formattedNumberString = `${numeral(rounded_value / 1000000000).format(default_number_format)}B`\n }\n else {\n formattedNumberString = `${numeral(rounded_value / 1000000000000).format(default_number_format)}T`\n }\n }\n\n return _compact([prefix, formattedNumberString]).join(\"\")\n }\n },\n}\n\nexport default Formatter\n"],"names":["default_options","default_number_format","zh_number_format","zh_small_number_format","Formatter","value","country_code","parts","options","opts","final_value","I18n","value_at_100_000_000","value_at_10_000","precision","currency_unit","DataRetriever","number_without_comma","sanitized_value","input_hash","original_value","prefix","use_exact_value","_compact","formattedNumberString","rounded_value","numeral"],"mappings":"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"}