{"version":3,"file":"chunk-ieched7r.js","sources":["packages/sports/libs/odds/feature/native-price/src/native-price-formatter.service.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\n\nimport { BetslipConfig } from '@frontend/sports/common/client-config-data-access';\nimport { OddsDisplayFormat } from '@frontend/sports/types/models/user-settings';\nimport { UserOddsFormatSettingsService } from '@frontend/sports/user/feature';\nimport { Decimal } from 'decimal.js';\nimport { min } from 'lodash-es';\n\nimport { NativePrice } from './native-price';\n\n@Injectable({ providedIn: 'root' })\nexport class NativePriceFormatterService {\n private CUT_OFF_DECIMAL_PLACES_LIMIT = 1.01;\n private readonly DECIMAL_PLACES = 2;\n\n private betslipConfig = inject(BetslipConfig);\n private readonly userOddsFormatSettingsService = inject(UserOddsFormatSettingsService);\n format(\n price: NativePrice | string | number | null | undefined,\n cutOff: boolean = false,\n cutZero: boolean = false,\n maxDecimalPlaces: number = 3,\n ): string {\n if (!price) {\n return this.formatInvalidOdds();\n }\n\n if (typeof price === 'string') {\n return price;\n }\n\n if (typeof price === 'number') {\n price = NativePrice.fromDecimals(price);\n }\n\n if (price.isEmpty()) {\n return this.formatInvalidOdds();\n }\n\n return this.getFormattedOdds(price, cutOff, cutZero, maxDecimalPlaces);\n }\n\n private getFormattedOdds(price: NativePrice, cutOff: boolean = false, cutZero: boolean = false, maxDecimalPlaces = 3): string {\n switch (this.userOddsFormatSettingsService.oddsFormat) {\n case OddsDisplayFormat.UK:\n return price.numerator.greaterThan(0) && price.denominator.greaterThan(0)\n ? this.toUKOdds(price, maxDecimalPlaces)\n : this.formatInvalidOdds();\n case OddsDisplayFormat.US:\n return this.toUSOdds(price);\n default:\n return this.toEUOdds(price, cutOff, cutZero, maxDecimalPlaces);\n }\n }\n\n private toUSOdds(price: NativePrice): string {\n if (price.americanOdds.equals(0)) {\n return this.formatInvalidOdds();\n }\n\n const usOddsString = price.americanOdds.toString();\n\n return price.americanOdds.greaterThan(0) ? '+' + usOddsString : usOddsString;\n }\n\n private toEUOdds(price: NativePrice, cutOff: boolean, cutZero: boolean, maxDecimalPlaces = 3): string {\n const formatPrice = cutOff ? NativePrice.fromDecimals(this.cutOff(price.odds).toNumber()) : price;\n\n // calculated values ending with multiple 0 decimals\n if (cutZero && formatPrice.odds.decimalPlaces() > this.DECIMAL_PLACES) {\n const result = formatPrice.odds.toFixed(\n formatPrice.odds.decimalPlaces() > this.DECIMAL_PLACES ? maxDecimalPlaces : this.DECIMAL_PLACES,\n Decimal.ROUND_DOWN,\n );\n\n return result.endsWith('0') ? formatPrice.odds.toFixed(this.DECIMAL_PLACES, Decimal.ROUND_DOWN) : result;\n }\n\n return formatPrice.odds.toFixed(\n formatPrice.odds.decimalPlaces() > this.DECIMAL_PLACES ? maxDecimalPlaces : this.DECIMAL_PLACES,\n Decimal.ROUND_DOWN,\n );\n }\n\n private toUKOdds(price: NativePrice, maxDecimalPlaces = 3): string {\n const numerator = price.numerator.toFixed(min([price.numerator.decimalPlaces(), maxDecimalPlaces]) || 0, Decimal.ROUND_DOWN);\n\n return `${numerator}/${price.denominator.toNumber()}`;\n }\n\n private cutOff(value: Decimal, maxDecimalPlaces = 3): Decimal {\n const decimalPlaces = value.lessThan(this.CUT_OFF_DECIMAL_PLACES_LIMIT) ? maxDecimalPlaces : this.DECIMAL_PLACES;\n\n return this.betslipConfig.roundValues ? value.toDecimalPlaces(decimalPlaces) : value.toDecimalPlaces(decimalPlaces, Decimal.ROUND_UP);\n }\n\n private formatInvalidOdds(): string {\n switch (this.userOddsFormatSettingsService.oddsFormat) {\n case OddsDisplayFormat.US:\n return '---';\n case OddsDisplayFormat.UK:\n return '-/-';\n default:\n return '-.--';\n }\n }\n}\n"],"names":["NativePriceFormatterService","constructor","CUT_OFF_DECIMAL_PLACES_LIMIT","DECIMAL_PLACES","betslipConfig","inject","BetslipConfig","userOddsFormatSettingsService","UserOddsFormatSettingsService","format","price","cutOff","cutZero","maxDecimalPlaces","NativePrice","fromDecimals","isEmpty","formatInvalidOdds","getFormattedOdds","oddsFormat","numerator","greaterThan","denominator","toUKOdds","toUSOdds","toEUOdds","americanOdds","equals","usOddsString","toString","formatPrice","odds","toNumber","decimalPlaces","result","toFixed","Decimal","ROUND_DOWN","endsWith","min","value","lessThan","roundValues","toDecimalPlaces","ROUND_UP","u","factory","ɵfac","providedIn","_NativePriceFormatterService"],"mappings":"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"}