{"version":3,"sources":["webpack:///./src/routes/faq/faq.ts?8c00","webpack:///./src/routes/dashboard/dashboard.ts"],"names":["module","exports","cb","require","Dashboard","dialogService","ts","store","toast","controllerFactory","i18n","taskQueue","ss","loading","chartDataBuy","chartDataSell","dswapEnabled","dswapPaused","maxSlippageInputToken","maxSlippageOutputToken","this","validationController","createForCurrentScope","renderer","addRenderer","storeSubscription","state","subscribe","user","firebaseUser","loggedIn","symbol","transactionType","tokens","getDSwapTokens","Hive","refreshTokenLists","createValidationRules","buyTokenSymbol","buyTokenSelected","sellTokenSymbol","sellTokenSelected","activePageId","currentChainId","baseTokenSymbol","queueTask","call","$","selectpicker","refreshSelectPicker","validationResult","validate","result","results","valid","message","tr","rule","messageKey","buyTokenAmount","sellTokenAmount","sellTokenBalance","sellToken","userBalance","balance","ns","error","swapRequestModel","Account","account","name","Chain","ChainTransactionId","TokenOutput","TokenOutputAmount","TokenInput","TokenInputAmount","SwapSourceId","DSWAP_SOURCE_ID","BaseTokenAmount","baseTokenAmount","MaxSlippageInputToken","MaxSlippageOutputToken","TokenInputMemo","open","viewModel","model","whenClosed","response","console","log","buyTokens","sellTokens","filter","x","isCrypto","precision","buyToken","splice","indexOf","find","chartRefBuy","detached","loadTokenHistoryData","attached","fillPeggedTokenMetrics","getTokenBalance","calcUnitEstimateRate","token","getDSwapTokenBalances","tradePercentage","unitEstimateRate","toFixed","updateTradeValueUsd","metrics","tradeValueUsd","parseFloat","lastPriceUsd","getTokenSymbolToCheck","peggedTokenPrice","lastPrice","chartRefSell","percentage","ohlcData","slice","map","t","unix","timestamp","format","o","openPrice","h","highestPrice","l","lowestPrice","c","closePrice","num","fixed","re","RegExp","toString","match","event","swapCalcRequestModel","swapCalcResponse","CalculateSwapOutput","CalculateSwapInput","tokenSymbol","tokenSymbolToCheck","tokenToCheck","rules","ensure","required","withMessageKey","then","satisfies","value","object","addObject"],"mappings":"iGAAAA,EAAOC,QAAU,SAASC,GACzB,4CAA4BC,GAC3BD,EAAG,EAAQ,oBACX,4B,g0BCoBF,gBAAaE,EAAb,MAiCI,YAAoBC,EACRC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GAPQ,KAAAP,gBACR,KAAAC,KACA,KAAAC,QACA,KAAAC,QACA,KAAAC,oBACA,KAAAC,OACA,KAAAC,YACA,KAAAC,KAzBF,KAAAC,SAAU,EAKZ,KAAAC,aAAoB,GACpB,KAAAC,cAAqB,GAIrB,KAAAC,cAAe,EACf,KAAAC,aAAc,EAId,KAAAC,sBAAwB,EACxB,KAAAC,uBAAyB,EAU7BC,KAAKC,qBAAuBZ,EAAkBa,wBAE9CF,KAAKG,SAAW,IAAI,IACpBH,KAAKC,qBAAqBG,YAAYJ,KAAKG,UAC3CH,KAAKK,kBAAoBL,KAAKb,MAAMmB,MAAMC,UAAUD,IAC5CA,IACAN,KAAKM,MAAQA,EAEbN,KAAKQ,KAAO,IAAKF,EAAMG,cACvBT,KAAKU,SAAWJ,EAAMI,YAKlC,mBAAkB,OAAEC,EAAM,gBAAEC,IACxB,IACSZ,KAAKM,MAAMO,cACNb,KAAKd,GAAG4B,gBAAe,EAAM,IAAMC,YAEvC,sBAAY,IAAZ,SACA,sBAAY,IAAZ,GAENf,KAAKgB,oBACLhB,KAAKiB,wBAEDN,GAAUC,IACc,QAApBA,GACAZ,KAAKkB,eAAiBP,QAChBX,KAAKmB,oBACgB,SAApBP,IACPZ,KAAKoB,gBAAkBT,QACjBX,KAAKqB,sBAInBrB,KAAKM,MAAMgB,aAAe,YAC1BtB,KAAKuB,qBAAuB,YAAgBvB,KAAKM,OACjDN,KAAKwB,sBAAwB,YAA4BxB,KAAKuB,gBAChE,SACE,OAAO,IAAI,IAAS,KAI5B,4BACIvB,KAAKT,UAAUkC,UAAU,CACrBC,KAAM,IAAMC,EAAE,iBAAiBC,aAAa,aAIpD,iBACI5B,KAAK6B,sBACL7B,KAAKJ,aAAe,IAAYA,aAChCI,KAAKH,YAAc,IAAYA,YAGnC,mBACI,MAAMiC,QAAmD9B,KAAKC,qBAAqB8B,WAEnF,IAAK,MAAMC,KAAUF,EAAiBG,QAClC,IAAKD,EAAOE,MAAO,CACf,MAAM9C,EAAQ,IAAI,IAElBA,EAAM+C,QAAUnC,KAAKV,KAAK8C,GAAGJ,EAAOK,KAAKC,WAAY,CACjDpB,eAAgBlB,KAAKkB,eACrBE,gBAAiBpB,KAAKoB,gBACtBmB,eAAgBvC,KAAKuC,eACrBC,gBAAiBxC,KAAKwC,gBACtBC,iBAAoC,MAAlBzC,KAAK0C,UAAoB1C,KAAK0C,UAAUC,YAAYC,QAAU,GAChFC,GAAI,WAGR7C,KAAKZ,MAAM0D,MAAM1D,GAIzB,GAAI0C,EAAiBI,MAAO,CACxB,IAAIa,EAAsC,CACtCC,QAAShD,KAAKM,MAAM2C,QAAQC,KAC5BC,MAAO,IAAMpC,KACbqC,mBAAoB,GACpBC,YAAarD,KAAKkB,eAClBoC,kBAAmBtD,KAAKuC,eACxBgB,WAAYvD,KAAKoB,gBACjBoC,iBAAkBxD,KAAKwC,gBACvBiB,aAAc,IAAYC,gBAC1BC,gBAAiB3D,KAAK4D,gBACtBC,sBAAuB7D,KAAKF,sBAC5BgE,uBAAwB9D,KAAKD,uBAC7BgE,eAAgB,IAGpB/D,KAAKP,SAAU,EACfO,KAAKf,cAAc+E,KAAK,CAAEC,UAAW,IAAiBC,MAAOnB,IAAoBoB,WAAWC,IACxFC,QAAQC,IAAIF,GACZpE,KAAKP,SAAU,KAK3B,0BACSO,KAAKM,MAAMO,cACNb,KAAKd,GAAG4B,gBAAe,EAAM,IAAMC,MAG7Cf,KAAKuE,UAAY,IAAIvE,KAAKM,MAAMO,QAChCb,KAAKwE,WAAa,IAAIxE,KAAKM,MAAMO,QAIjCb,KAAKuE,UAAYvE,KAAKuE,UAAUE,OAAOC,IAAMA,EAAEC,UAA2B,GAAfD,EAAEE,WAC7D5E,KAAKwE,WAAaxE,KAAKwE,WAAWC,OAAOC,GAAoB,GAAfA,EAAEE,WAE5C5E,KAAK6E,UACL7E,KAAKwE,WAAWM,OAAO9E,KAAKwE,WAAWO,QAAQ/E,KAAKwE,WAAWQ,KAAKN,GAAKA,EAAE/D,QAAUX,KAAK6E,SAASlE,SAAU,GAE7GX,KAAK0C,WACL1C,KAAKuE,UAAUO,OAAO9E,KAAKuE,UAAUQ,QAAQ/E,KAAKuE,UAAUS,KAAKN,GAAKA,EAAE/D,QAAUX,KAAK0C,UAAU/B,SAAU,SAEzGX,KAAK6B,sBAGf,6BACQ7B,KAAK6E,UAAY7E,KAAK0C,UAO9B,yBACQ1C,KAAKiF,aACLjF,KAAKiF,YAAYC,WAErBlF,KAAKN,mBAAqBM,KAAKmF,qBAAqBnF,KAAKkB,gBAErDlB,KAAKiF,aACLjF,KAAKiF,YAAYG,WAErBpF,KAAK6E,SAAW7E,KAAKM,MAAMO,OAAOmE,KAAKN,GAAKA,EAAE/D,QAAUX,KAAKkB,gBAC7DlB,KAAKqF,uBAAuBrF,KAAK6E,UACjC7E,KAAKgB,0BAGChB,KAAKsF,gBAAgBtF,KAAK6E,UAE5B7E,KAAKuC,gBAAkBvC,KAAKuC,eAAiB,IAC7CvC,KAAKuC,eAAiB,SAEpBvC,KAAKuF,uBAGf,sBAAsBC,SAEZxF,KAAKd,GAAGuG,sBAAsB,IAAM1E,MAI9C,+BACQf,KAAK6E,UAAY7E,KAAK0C,YACtB1C,KAAKwC,gBAAmBxC,KAAK0F,gBAAkB,IAAO1F,KAAK0C,UAAUC,YAAYC,QACjF5C,KAAKuC,gBAAkBvC,KAAKwC,gBAAkBxC,KAAK2F,kBAAkBC,QAAQ,SAEvE5F,KAAK6F,uBAInB,4BACQ7F,KAAK0C,UAAUoD,UACf9F,KAAK+F,eAAiB/F,KAAKwC,gBAAkBwD,WAAWhG,KAAK0C,UAAUoD,QAAQG,eAAeL,QAAQ,IAG9G,6BAA6BJ,GAEzB,SAD0BxF,KAAKkG,sBAAsBV,EAAM7E,SACtCX,KAAKwB,gBAAiB,CACvC,IAAI2E,QAAyB,YAA2BnG,KAAKuB,gBAC7DiE,EAAMM,QAAU,CAAEG,aAAcE,EAAkBC,UAAWD,IAIrE,0BACQnG,KAAKqG,cACLrG,KAAKqG,aAAanB,WAEtBlF,KAAKL,oBAAsBK,KAAKmF,qBAAqBnF,KAAKoB,iBAEtDpB,KAAKqG,cACLrG,KAAKqG,aAAajB,WAEtBpF,KAAK0C,UAAY1C,KAAKM,MAAMO,OAAOmE,KAAKN,GAAKA,EAAE/D,QAAUX,KAAKoB,iBAC9DpB,KAAKqF,uBAAuBrF,KAAK0C,WACjC1C,KAAKgB,0BAGChB,KAAKsF,gBAAgBtF,KAAK0C,WAE5B1C,KAAKwC,iBAAmBxC,KAAKwC,gBAAkB,IAC/CxC,KAAKwC,gBAAkB,SAErBxC,KAAKuF,uBAGf,cAAce,GACVtG,KAAK0F,gBAAkBY,EAG3B,2BAA2Bd,GAcvB,MAAO,CAAEe,gBAbkB,YAAuBf,IAGbgB,MAAM,EAFlB,IAEuCC,IAAI/B,IACzD,CACHgC,EAAG,IAAOC,KAAKjC,EAAEkC,WAAWC,OAAO,uBACnCC,EAAGpC,EAAEqC,UACLC,EAAGtC,EAAEuC,aACLC,EAAGxC,EAAEyC,YACLC,EAAG1C,EAAE2C,eAOV,QAAQC,EAAKC,GAChB,IAAIC,EAAK,IAAIC,OAAO,qBAAwBF,IAAU,GAAK,OAC3D,OAAOD,EAAII,WAAWC,MAAMH,GAAI,GAG7B,mCAAmCI,GAEtC,GADA5H,KAAKP,SAAU,EACXO,KAAK0C,UACL,GAAI,YAAU1C,KAAKwC,iBAAkB,CACjC,IAAIqF,EAA6C,CAC7C1E,MAAO,IAAMpC,KACbwC,WAAYvD,KAAKoB,gBACjBoC,iBAAkBxD,KAAKwC,gBACvBa,YAAarD,KAAKkB,gBAGlB4G,QAAyB9H,KAAKR,GAAGuI,oBAAoBF,GACrDC,IACA9H,KAAK4D,gBAAkBkE,EAAiBnE,gBACxC3D,KAAKuC,eAAiBvC,KAAK4F,QAAQkC,EAAiBxE,kBAAmBtD,KAAK6E,SAASD,kBAGnF5E,KAAK6F,2BAEX7F,KAAKuC,eAAiB,eAG9BvC,KAAKP,SAAU,EAGZ,kCAAkCmI,GAErC,GADA5H,KAAKP,SAAU,EACXO,KAAK6E,SACL,GAAI,YAAU7E,KAAKuC,gBAAiB,CAChC,IAAIsF,EAA6C,CAC7C1E,MAAO,IAAMpC,KACbwC,WAAYvD,KAAKoB,gBACjBiC,YAAarD,KAAKkB,eAClBoC,kBAAmBtD,KAAKuC,gBAGxBuF,QAAyB9H,KAAKR,GAAGwI,mBAAmBH,GACpDC,IACA9H,KAAK4D,gBAAkBkE,EAAiBnE,gBACxC3D,KAAKwC,gBAAkBsF,EAAiBtE,iBAAiBoC,QAAQ5F,KAAK0C,UAAUkC,kBAG9E5E,KAAK6F,2BAEX7F,KAAKwC,gBAAkB,eAG/BxC,KAAKP,SAAU,EAGnB,4BAA4BwI,GACxB,IAAIC,EAAqBD,EACrBE,EAAenI,KAAKM,MAAMO,OAAOmE,KAAKN,GAAKA,EAAE/D,QAAUsH,GAI3D,OAHIE,GAAgBA,EAAaxD,WAC7BuD,EAAqB,YAAqBD,IAEvCC,EAGH,wBACJ,MAAME,EAAQ,kBACTC,OAAO,kBACPC,WACAC,eAAe,0CACfF,OAAO,mBACPC,WACAC,eAAe,2CACfF,OAAO,kBACPC,WACAC,eAAe,0CACfC,OACAC,UAAU,CAACC,EAAYC,IAAgB3C,WAAW0C,GAAS,GAC3DH,eAAe,+CACfF,OAAO,mBACPC,WACAC,eAAe,2CACfC,OACAC,UAAU,CAACC,EAAYC,IAAgB3C,WAAW0C,GAAS,GAC3DH,eAAe,+CACfE,UAAU,CAACC,EAAYC,IAAgB3I,KAAK0C,UAAUiC,UAAYqB,WAAW0C,IAAU1I,KAAK0C,UAAUC,YAAYC,SAClH2F,eAAe,uCACfH,MAELpI,KAAKC,qBAAqB2I,UAAU5I,KAAMoI,KAElD,OA7VgB,GAAX,c,yDAGW,GAAX,c,+DACW,GAAX,c,8DAMW,GAAX,c,+DACS,GAAT,I,uDAfQpJ,EAAS,GAFrB,cACA,YAAc,a,uBAkCwB,gBACnB,IACG,QACA,IACY,8BACb,OACK,IACP,OAxCPA,GAiWb,GAjWA,I","file":"app~c94864d7.7d98a4c7b50bc9a4872a.chunk.js","sourcesContent":["module.exports = function(cb) {\n\trequire.ensure([], function(require) {\n\t\tcb(require(\"!!../../../node_modules/ts-loader/index.js!./faq.ts\"));\n\t}, \"faq\");\n}","import { Redirect } from 'aurelia-router';\r\nimport { ToFixedValueConverter } from 'resources/value-converters/to-fixed';\r\nimport { Subscription } from 'rxjs';\r\nimport { customElement, autoinject, bindable, TaskQueue } from 'aurelia-framework';\r\nimport { DswapOrderModal } from 'modals/dswap-order';\r\nimport { DialogService } from 'aurelia-dialog';\r\nimport { Store, dispatchify } from 'aurelia-store';\r\nimport { ChartComponent } from 'components/chart/chart';\r\nimport { loadTokenMarketHistory, loadBuyBook, loadSellBook } from 'common/hive-engine-api';\r\nimport moment from 'moment';\r\nimport { getPrices, usdFormat, getChainByState, getPeggedTokenSymbolByChain, getSwapTokenByCrypto, getPeggedTokenPriceByChain, isNumeric } from 'common/functions';\r\nimport { getCurrentFirebaseUser, getMarketMakerUser } from 'store/actions';\r\nimport { TokenService } from 'services/token-service';\r\nimport { ValidationControllerFactory, ControllerValidateResult, ValidationRules } from 'aurelia-validation';\r\nimport { ToastService, ToastMessage } from 'services/toast-service';\r\nimport { BootstrapFormRenderer } from 'resources/bootstrap-form-renderer';\r\nimport { I18N } from 'aurelia-i18n';\r\nimport { environment } from 'environment';\r\nimport { Chain } from 'common/enums';\r\nimport { SwapService } from 'services/swap-service';\r\n\r\n@autoinject()\r\n@customElement('dashboard')\r\nexport class Dashboard {\r\n public storeSubscription: Subscription;\r\n public state: IState;\r\n public buyTokens: IToken[];\r\n @bindable() sellTokens: IToken[];\r\n public buyTokenSymbol;\r\n public sellTokenSymbol;\r\n @bindable() sellTokenAmount;\r\n @bindable() buyTokenAmount;\r\n public buyToken: IToken;\r\n public sellToken: IToken;\r\n private unitEstimateRate;\r\n private tradeValueUsd;\r\n private loggedIn;\r\n @bindable() tradePercentage;\r\n @bindable loading = false;\r\n\r\n private chartRefBuy: ChartComponent;\r\n private chartRefSell: ChartComponent;\r\n\r\n private chartDataBuy: any = {};\r\n private chartDataSell: any = {};\r\n private user;\r\n private validationController;\r\n private renderer;\r\n private dswapEnabled = false;\r\n private dswapPaused = false;\r\n private currentChainId;\r\n private baseTokenSymbol;\r\n private baseTokenAmount;\r\n private maxSlippageInputToken = 5.00;\r\n private maxSlippageOutputToken = 5.00;\r\n\r\n constructor(private dialogService: DialogService,\r\n private ts: TokenService,\r\n private store: Store,\r\n private toast: ToastService,\r\n private controllerFactory: ValidationControllerFactory,\r\n private i18n: I18N,\r\n private taskQueue: TaskQueue,\r\n private ss: SwapService) {\r\n this.validationController = controllerFactory.createForCurrentScope();\r\n\r\n this.renderer = new BootstrapFormRenderer();\r\n this.validationController.addRenderer(this.renderer);\r\n this.storeSubscription = this.store.state.subscribe(state => {\r\n if (state) {\r\n this.state = state;\r\n\r\n this.user = { ...state.firebaseUser };\r\n this.loggedIn = state.loggedIn;\r\n }\r\n });\r\n }\r\n\r\n async canActivate({ symbol, transactionType }) {\r\n try {\r\n if (!this.state.tokens) {\r\n await this.ts.getDSwapTokens(true, Chain.Hive);\r\n }\r\n await dispatchify(getCurrentFirebaseUser)();\r\n await dispatchify(getMarketMakerUser)();\r\n\r\n this.refreshTokenLists();\r\n this.createValidationRules();\r\n\r\n if (symbol && transactionType) {\r\n if (transactionType === \"buy\") {\r\n this.buyTokenSymbol = symbol;\r\n await this.buyTokenSelected();\r\n } else if (transactionType === \"sell\") {\r\n this.sellTokenSymbol = symbol;\r\n await this.sellTokenSelected();\r\n }\r\n }\r\n\r\n this.state.activePageId = \"dashboard\";\r\n this.currentChainId = await getChainByState(this.state);\r\n this.baseTokenSymbol = await getPeggedTokenSymbolByChain(this.currentChainId);\r\n } catch {\r\n return new Redirect('');\r\n }\r\n }\r\n\r\n async refreshSelectPicker() {\r\n this.taskQueue.queueTask({\r\n call: () => $('.selectpicker').selectpicker(\"refresh\")\r\n });\r\n }\r\n\r\n async attached() {\r\n this.refreshSelectPicker();\r\n this.dswapEnabled = environment.dswapEnabled;\r\n this.dswapPaused = environment.dswapPaused;\r\n }\r\n\r\n async startTrade() {\r\n const validationResult: ControllerValidateResult = await this.validationController.validate();\r\n\r\n for (const result of validationResult.results) {\r\n if (!result.valid) {\r\n const toast = new ToastMessage();\r\n\r\n toast.message = this.i18n.tr(result.rule.messageKey, {\r\n buyTokenSymbol: this.buyTokenSymbol,\r\n sellTokenSymbol: this.sellTokenSymbol,\r\n buyTokenAmount: this.buyTokenAmount,\r\n sellTokenAmount: this.sellTokenAmount,\r\n sellTokenBalance: this.sellToken != null ? this.sellToken.userBalance.balance : \"\",\r\n ns: 'errors'\r\n });\r\n\r\n this.toast.error(toast);\r\n }\r\n }\r\n\r\n if (validationResult.valid) {\r\n let swapRequestModel: ISwapRequestModel = {\r\n Account: this.state.account.name,\r\n Chain: Chain.Hive,\r\n ChainTransactionId: \"\",\r\n TokenOutput: this.buyTokenSymbol,\r\n TokenOutputAmount: this.buyTokenAmount,\r\n TokenInput: this.sellTokenSymbol,\r\n TokenInputAmount: this.sellTokenAmount,\r\n SwapSourceId: environment.DSWAP_SOURCE_ID,\r\n BaseTokenAmount: this.baseTokenAmount,\r\n MaxSlippageInputToken: this.maxSlippageInputToken,\r\n MaxSlippageOutputToken: this.maxSlippageOutputToken,\r\n TokenInputMemo: \"\"\r\n };\r\n\r\n this.loading = true;\r\n this.dialogService.open({ viewModel: DswapOrderModal, model: swapRequestModel }).whenClosed(response => {\r\n console.log(response);\r\n this.loading = false;\r\n });\r\n }\r\n }\r\n\r\n async refreshTokenLists() {\r\n if (!this.state.tokens) {\r\n await this.ts.getDSwapTokens(true, Chain.Hive);\r\n }\r\n\r\n this.buyTokens = [...this.state.tokens];\r\n this.sellTokens = [...this.state.tokens];\r\n\r\n // filter out crypto from buy token list for now\r\n // filter out 0 precision tokens to prevent loss\r\n this.buyTokens = this.buyTokens.filter(x => !x.isCrypto && x.precision != 0);\r\n this.sellTokens = this.sellTokens.filter(x => x.precision != 0);\r\n\r\n if (this.buyToken)\r\n this.sellTokens.splice(this.sellTokens.indexOf(this.sellTokens.find(x => x.symbol == this.buyToken.symbol)), 1);\r\n\r\n if (this.sellToken)\r\n this.buyTokens.splice(this.buyTokens.indexOf(this.buyTokens.find(x => x.symbol == this.sellToken.symbol)), 1);\r\n\r\n await this.refreshSelectPicker();\r\n }\r\n\r\n async calcUnitEstimateRate() {\r\n if (this.buyToken && this.sellToken) {\r\n //this.unitEstimateRate = (this.buyToken.metrics.lastPrice / this.sellToken.metrics.lastPrice).toFixed(8);\r\n\r\n //await this.updateTradeValueUsd(); \r\n }\r\n }\r\n\r\n async buyTokenSelected() {\r\n if (this.chartRefBuy)\r\n this.chartRefBuy.detached();\r\n\r\n this.chartDataBuy = await this.loadTokenHistoryData(this.buyTokenSymbol);\r\n\r\n if (this.chartRefBuy)\r\n this.chartRefBuy.attached();\r\n\r\n this.buyToken = this.state.tokens.find(x => x.symbol == this.buyTokenSymbol);\r\n this.fillPeggedTokenMetrics(this.buyToken);\r\n this.refreshTokenLists();\r\n\r\n //if (!this.buyToken.userBalance)\r\n await this.getTokenBalance(this.buyToken);\r\n\r\n if (this.buyTokenAmount && this.buyTokenAmount > 0)\r\n this.buyTokenAmount = 0;\r\n\r\n await this.calcUnitEstimateRate();\r\n }\r\n\r\n async getTokenBalance(token) {\r\n //if (!token || !token.loadUserBalances) {\r\n await this.ts.getDSwapTokenBalances(Chain.Hive);\r\n //} \r\n }\r\n\r\n async tradePercentageChanged() {\r\n if (this.buyToken && this.sellToken) {\r\n this.sellTokenAmount = (this.tradePercentage / 100) * this.sellToken.userBalance.balance;\r\n this.buyTokenAmount = (this.sellTokenAmount / this.unitEstimateRate).toFixed(8);\r\n\r\n await this.updateTradeValueUsd();\r\n }\r\n }\r\n\r\n async updateTradeValueUsd() {\r\n if (this.sellToken.metrics)\r\n this.tradeValueUsd = (this.sellTokenAmount * parseFloat(this.sellToken.metrics.lastPriceUsd)).toFixed(4);\r\n }\r\n\r\n async fillPeggedTokenMetrics(token) {\r\n let symbolToCheck = await this.getTokenSymbolToCheck(token.symbol);\r\n if (symbolToCheck == this.baseTokenSymbol) {\r\n let peggedTokenPrice = await getPeggedTokenPriceByChain(this.currentChainId);\r\n token.metrics = { lastPriceUsd: peggedTokenPrice, lastPrice: peggedTokenPrice };\r\n }\r\n }\r\n\r\n async sellTokenSelected() {\r\n if (this.chartRefSell)\r\n this.chartRefSell.detached();\r\n\r\n this.chartDataSell = await this.loadTokenHistoryData(this.sellTokenSymbol);\r\n\r\n if (this.chartRefSell)\r\n this.chartRefSell.attached();\r\n\r\n this.sellToken = this.state.tokens.find(x => x.symbol == this.sellTokenSymbol);\r\n this.fillPeggedTokenMetrics(this.sellToken);\r\n this.refreshTokenLists();\r\n\r\n //if (!this.sellToken.userBalance)\r\n await this.getTokenBalance(this.sellToken);\r\n\r\n if (this.sellTokenAmount && this.sellTokenAmount > 0)\r\n this.sellTokenAmount = 0;\r\n\r\n await this.calcUnitEstimateRate();\r\n }\r\n\r\n async slideTo(percentage) {\r\n this.tradePercentage = percentage;\r\n }\r\n\r\n async loadTokenHistoryData(token) {\r\n const tokenHistory = await loadTokenMarketHistory(token);\r\n const limitCandleStick = 30; // show last 30 days\r\n\r\n const candleStickData = tokenHistory.slice(0, limitCandleStick).map(x => {\r\n return {\r\n t: moment.unix(x.timestamp).format('YYYY-MM-DD HH:mm:ss'), //x.timestamp * 1000,\r\n o: x.openPrice,\r\n h: x.highestPrice,\r\n l: x.lowestPrice,\r\n c: x.closePrice,\r\n };\r\n });\r\n\r\n return { ohlcData: candleStickData };\r\n }\r\n\r\n public toFixed(num, fixed) {\r\n var re = new RegExp('^-?\\\\d+(?:\\.\\\\d{0,' + (fixed || -1) + '})?');\r\n return num.toString().match(re)[0];\r\n }\r\n\r\n public async sellTokenAmountInViewChanged(event) {\r\n this.loading = true;\r\n if (this.sellToken) {\r\n if (isNumeric(this.sellTokenAmount)) {\r\n let swapCalcRequestModel: ISwapCalcValuesModel = {\r\n Chain: Chain.Hive,\r\n TokenInput: this.sellTokenSymbol,\r\n TokenInputAmount: this.sellTokenAmount,\r\n TokenOutput: this.buyTokenSymbol\r\n };\r\n\r\n let swapCalcResponse = await this.ss.CalculateSwapOutput(swapCalcRequestModel);\r\n if (swapCalcResponse) {\r\n this.baseTokenAmount = swapCalcResponse.BaseTokenAmount;\r\n this.buyTokenAmount = this.toFixed(swapCalcResponse.TokenOutputAmount, this.buyToken.precision);\r\n }\r\n\r\n await this.updateTradeValueUsd();\r\n } else {\r\n this.buyTokenAmount = \"Not a number\";\r\n }\r\n }\r\n this.loading = false;\r\n }\r\n\r\n public async buyTokenAmountInViewChanged(event) {\r\n this.loading = true;\r\n if (this.buyToken) {\r\n if (isNumeric(this.buyTokenAmount)) {\r\n let swapCalcRequestModel: ISwapCalcValuesModel = {\r\n Chain: Chain.Hive,\r\n TokenInput: this.sellTokenSymbol,\r\n TokenOutput: this.buyTokenSymbol,\r\n TokenOutputAmount: this.buyTokenAmount\r\n };\r\n\r\n let swapCalcResponse = await this.ss.CalculateSwapInput(swapCalcRequestModel);\r\n if (swapCalcResponse) {\r\n this.baseTokenAmount = swapCalcResponse.BaseTokenAmount;\r\n this.sellTokenAmount = swapCalcResponse.TokenInputAmount.toFixed(this.sellToken.precision);\r\n }\r\n\r\n await this.updateTradeValueUsd();\r\n } else {\r\n this.sellTokenAmount = \"Not a number\";\r\n }\r\n }\r\n this.loading = false;\r\n }\r\n\r\n async getTokenSymbolToCheck(tokenSymbol) {\r\n let tokenSymbolToCheck = tokenSymbol;\r\n let tokenToCheck = this.state.tokens.find(x => x.symbol == tokenSymbol);\r\n if (tokenToCheck && tokenToCheck.isCrypto)\r\n tokenSymbolToCheck = getSwapTokenByCrypto(tokenSymbol);\r\n\r\n return tokenSymbolToCheck;\r\n }\r\n\r\n private createValidationRules() {\r\n const rules = ValidationRules\r\n .ensure('buyTokenSymbol')\r\n .required()\r\n .withMessageKey('errors:dashboardBuyTokenSymbolRequired')\r\n .ensure('sellTokenSymbol')\r\n .required()\r\n .withMessageKey('errors:dashboardSellTokenSymbolRequired')\r\n .ensure('buyTokenAmount')\r\n .required()\r\n .withMessageKey(\"errors:dashboardBuyTokenAmountRequired\")\r\n .then()\r\n .satisfies((value: any, object: any) => parseFloat(value) > 0)\r\n .withMessageKey('errors:dashboardAmountMustBeGreaterThanZero')\r\n .ensure('sellTokenAmount')\r\n .required()\r\n .withMessageKey(\"errors:dashboardSellTokenAmountRequired\")\r\n .then()\r\n .satisfies((value: any, object: any) => parseFloat(value) > 0)\r\n .withMessageKey('errors:dashboardAmountMustBeGreaterThanZero')\r\n .satisfies((value: any, object: any) => this.sellToken.isCrypto || parseFloat(value) <= this.sellToken.userBalance.balance)\r\n .withMessageKey('errors:dashboardInsufficientBalance')\r\n .rules;\r\n\r\n this.validationController.addObject(this, rules);\r\n }\r\n}\r\n"],"sourceRoot":""}