{"version":3,"file":"static/js/55221.5af8c930.chunk.js","mappings":"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","sources":["services/get-permissible-odds.ts","utils/betslip/odd-formats-helper.ts"],"sourcesContent":["import { CommandNames } from 'utils/constants/swarm/swarm-command-names';\nimport RidGenerator from 'utils/swarm/rid-generator';\nimport { WebsocketEnhanced } from 'interfaces/spring-websocket-interfaces';\nimport { connectingWS } from 'hooks/useSpringConnect';\n\nconst permissibleOddsCommand = async (\n commandObj: any,\n rid: string,\n callback: Function,\n updateCallback: Function,\n callbackError: Function | null\n) => {\n connectingWS.then((socket: WebsocketEnhanced) => {\n socket.sendCommand(\n commandObj,\n rid,\n callback,\n updateCallback,\n callbackError\n );\n });\n};\n\nexport const getPermissibleOdds = (\n callback: Function,\n callbackError: Function | null\n): void => {\n const command = {\n command: CommandNames.GET_PERMISSIBLE_ODDS,\n params: {},\n rid: RidGenerator.gForCommand()\n };\n\n permissibleOddsCommand(command, '', callback, () => undefined, callbackError);\n};\n","import { CALCULATE_POWER_OF_10 } from 'utils/constants/app/general';\nimport { ODD_FORMATS } from 'utils/constants/betslip/odd-formats';\nimport SpringConfigs from 'utils/constants/swarm/spring-configs';\nimport { Ladder, PermissibleOdds } from 'interfaces/bet-data';\nimport { getPermissibleOdds } from 'services/get-permissible-odds';\nimport Store from 'store';\nimport { ladderIsLoaded, updateOddFormat } from 'store/actions/betslip';\n\n/*eslint no-magic-numbers:*/\n// TODO check after betslip refactor\n\nconst Config = {\n decimalFormatRemove3Digit: false,\n roundDecimalCoeficients: SpringConfigs.ODD_ROUNDING,\n useLadderForFractionalFormat: true\n};\n\nconst cache: { [key: string]: string } = {};\n\nconst {\n oddFormat,\n ladderLoaded\n}: { oddFormat: number; ladderLoaded: boolean } = Store.getState().betSlip;\n\nlet priceDecimal: number | undefined;\n\nlet ladder: Ladder[] | boolean = false;\n\nexport async function loadLadder(id = 0): Promise {\n Store.dispatch(ladderIsLoaded());\n getPermissibleOdds(\n (response: PermissibleOdds) => {\n if (response?.details) {\n ladder = response.details;\n Store.dispatch(updateOddFormat(id));\n } else {\n ladder = [];\n }\n },\n () => {\n ladder = [];\n }\n );\n}\n\nif (!ladderLoaded) {\n loadLadder(oddFormat);\n}\n\n/**\n * Odd converter\n * returns a function to convert decimal odds to corresponding format\n * Usage:\n * convert(odd, formatID)\n * e.g. const coeficient = convert(1.01, 2)\n */\nexport function convert(\n val: string | number,\n formatID: number | string,\n type = ''\n): string {\n if (isNaN(+val) || +val === Infinity) {\n return '-';\n }\n\n if ((formatID === 1 || formatID === 'fractional') && !ladder) {\n return '-';\n }\n\n const format =\n ODD_FORMATS.find(\n format => format.value === formatID || format.id === formatID\n )?.value || 'decimal';\n\n const value = parseFloat(`${val}`);\n const cacheKey = `${format}${value}`;\n\n if (isNaN(value)) {\n return '';\n }\n\n if (cache[cacheKey] === undefined) {\n if (\n format === 'fractional' &&\n Config.useLadderForFractionalFormat &&\n type === 'fictional' &&\n value !== undefined\n ) {\n // use it to calculate express odds as you see on bet365 :)\n cache[cacheKey] = `${Math.round((value - 1) * 100 || 0) / 100}/1`;\n } else {\n const converted = convertLog(value, format, ladder as Ladder[]);\n let roundedConverted = String(converted) || '';\n\n if (converted && format === 'decimal') {\n if (!priceDecimal) {\n const partnerConfigs = Store.getState().socket.partnerConfigs;\n priceDecimal = partnerConfigs?.price_decimals;\n }\n\n if (\n priceDecimal &&\n converted &&\n String(converted)?.split('.')?.[1]?.length > priceDecimal\n ) {\n roundedConverted = Number(converted).toFixed(priceDecimal);\n }\n }\n\n cache[cacheKey] = roundedConverted;\n }\n }\n\n return cache[cacheKey];\n}\n\nfunction convertLog(value: number, format: string, ladder: Ladder[]) {\n const fValue = value;\n const iValue = Math.floor(value);\n const rValue =\n value !== undefined ? Math.round(fValue * 100 || 0) / 100 : value;\n\n switch (format) {\n case 'decimal':\n return decimalValue(value, iValue, fValue);\n\n case 'fractional':\n return fractionalValue(value, fValue, rValue, ladder);\n\n case 'american':\n return americanValue(value, rValue);\n\n case 'hongkong':\n return hongKongValue(value, iValue, fValue);\n\n case 'malay':\n return malayValue(fValue);\n\n case 'indo':\n return indoValue(fValue);\n\n default:\n return rValue;\n }\n}\n\nfunction decimalValue(value: number, iValue: number, fValue: number) {\n return value !== undefined\n ? iValue !== fValue &&\n value.toString().split('.')[1] &&\n value.toString().split('.')[1].length > 2 &&\n !Config.decimalFormatRemove3Digit\n ? Math.round(\n value *\n Math.pow(CALCULATE_POWER_OF_10, Config.roundDecimalCoeficients)\n ) / Math.pow(CALCULATE_POWER_OF_10, Config.roundDecimalCoeficients)\n : fValue.toFixed(2)\n : value;\n}\n\nfunction fractionalValue(\n value: number,\n fValue: number,\n rValue: number,\n ladder: Ladder[]\n) {\n if (value && Config.useLadderForFractionalFormat) {\n const fracFL = dec2fracFromLadder(fValue, ladder);\n\n if (fracFL) {\n return fracFL;\n } else {\n const frac = dec2frac(rValue);\n\n if (frac) {\n return frac;\n }\n }\n\n return value;\n } else {\n return '-';\n }\n}\n\nfunction americanValue(value: number, rValue: number) {\n return value\n ? rValue > 2\n ? `+${(100 * (rValue - 1)).toString().split('.')[0]}`\n : rValue !== 1\n ? (-100 / (rValue - 1)).toString().split('.')[0]\n : '-'\n : rValue;\n}\n\nfunction hongKongValue(value: number, iValue: number, fValue: number) {\n return value !== undefined\n ? iValue !== fValue && value.toString().split('.')[1].length > 2\n ? Math.round(\n (value - 1) *\n Math.pow(CALCULATE_POWER_OF_10, Config.roundDecimalCoeficients)\n ) / Math.pow(CALCULATE_POWER_OF_10, Config.roundDecimalCoeficients)\n : (fValue - 1.0).toFixed(2)\n : value;\n}\n\nfunction malayValue(fValue: number) {\n if (fValue === 2) {\n return '0.000';\n } else if (fValue > 2) {\n return (\n Math.round(\n +(1 / (1 - fValue)).toFixed(Config.roundDecimalCoeficients + 1) *\n Math.pow(CALCULATE_POWER_OF_10, Config.roundDecimalCoeficients)\n ) / Math.pow(CALCULATE_POWER_OF_10, Config.roundDecimalCoeficients)\n ).toFixed(Config.roundDecimalCoeficients);\n } else {\n return (fValue - 1).toFixed(Config.roundDecimalCoeficients);\n }\n}\n\nfunction indoValue(fValue: number) {\n if (fValue === 2) {\n return '0.000';\n } else if (fValue > 2) {\n return (fValue - 1).toFixed(Config.roundDecimalCoeficients);\n } else {\n return (\n Math.round(\n +(1 / (1 - fValue)).toFixed(Config.roundDecimalCoeficients + 1) *\n Math.pow(CALCULATE_POWER_OF_10, Config.roundDecimalCoeficients)\n ) / Math.pow(CALCULATE_POWER_OF_10, Config.roundDecimalCoeficients)\n ).toFixed(Config.roundDecimalCoeficients);\n }\n}\n\nfunction dec2fracFromLadder(dec: number, ladder: Ladder[]) {\n let frac = '';\n\n if (ladder.length) {\n let price = 0;\n let issetPriceArray = ladder.find(({ Price }) => Price === dec);\n\n if (issetPriceArray) {\n frac = `${issetPriceArray.Numerator}/${issetPriceArray.Denominator}`;\n } else {\n for (let i = 0; i < ladder.length; i++) {\n if (ladder[i].Price > price && ladder[i].Price < dec) {\n price = ladder[i].Price;\n }\n }\n\n issetPriceArray = ladder.find(({ Price }) => Price === price);\n\n if (issetPriceArray) {\n frac = `${issetPriceArray.Numerator}/${issetPriceArray.Denominator}`;\n }\n }\n }\n\n return frac;\n}\n\nfunction dec2frac(decVal: number) {\n let Znxt: number;\n let Dnxt: number;\n let Nnxt: number;\n\n function recCalc(Zcur: number, Dcur?: number, Dprev?: number): string {\n Dcur = Dcur !== undefined ? Dcur : 1;\n Dprev = Dprev !== undefined ? Dprev : 0;\n Znxt = 1 / (Zcur - Math.floor(Zcur));\n Dnxt = Dcur * Math.floor(Znxt) + Dprev;\n Nnxt = Math.round(decVal * Dnxt);\n\n return Nnxt / Dnxt === decVal\n ? `${Nnxt.toString()}/${Dnxt.toString()}`\n : recCalc(Znxt, Dnxt, Dcur);\n }\n\n // Use this casting method because of JS number bug for example \"2.2 - 1 = 1.1999(9)\"\n if (decVal !== Math.floor(decVal)) {\n decVal = parseFloat(\n `${(Math.floor(decVal) - 1).toString()}.${String(decVal).split('.')[1]}`\n );\n } else {\n decVal = decVal - 1;\n }\n\n return decVal % 1 === 0 ? `${String(decVal)}/1` : String(recCalc(decVal));\n}\n"],"names":["getPermissibleOdds","callback","callbackError","async","commandObj","rid","updateCallback","connectingWS","then","socket","sendCommand","permissibleOddsCommand","command","CommandNames","GET_PERMISSIBLE_ODDS","params","RidGenerator","gForCommand","Config","decimalFormatRemove3Digit","roundDecimalCoeficients","SpringConfigs","ODD_ROUNDING","useLadderForFractionalFormat","cache","oddFormat","ladderLoaded","Store","getState","betSlip","priceDecimal","ladder","loadLadder","id","arguments","length","undefined","dispatch","ladderIsLoaded","response","details","updateOddFormat","convert","val","formatID","_ODD_FORMATS$find","type","isNaN","Infinity","format","ODD_FORMATS","find","value","parseFloat","cacheKey","Math","round","converted","fValue","iValue","floor","rValue","toString","split","pow","CALCULATE_POWER_OF_10","toFixed","decimalValue","fracFL","dec","frac","price","issetPriceArray","_ref","Price","Numerator","Denominator","i","_ref2","dec2fracFromLadder","decVal","Znxt","Dnxt","Nnxt","recCalc","Zcur","Dcur","Dprev","String","dec2frac","fractionalValue","americanValue","hongKongValue","malayValue","indoValue","convertLog","roundedConverted","_String","_String$split","_String$split$","partnerConfigs","price_decimals","Number"],"sourceRoot":""}