/** * Copyright (c) 2018 - present Zilliqa Research Pte. Ltd. * * This program is free software: you can redistribute it and/or modify it under the * terms of the GNU General Public License as published by the Free Software * Foundation, either version 3 of the License, or (at your option) any later * version. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR * A PARTICULAR PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with * this program. If not, see . */ import { BN, units } from '@zilliqa-js/util'; export const setValIfWholeNum = (fn) => (e: React.ChangeEvent): void => { e.preventDefault(); const value = e.target.value; const isWholeNumber = /^\d*\.?\d*$/.test(value) && !isNaN(Number(value)); const isEmptyString = value === ''; return isEmptyString || isWholeNumber ? fn(value) : undefined; }; export const getInputValidationState = (key: string, value: string, testVal: RegExp | boolean) => { const isInvalid: boolean = typeof testVal === 'boolean' ? testVal : testVal.test(value); const keyValid = key + 'Valid'; const keyInvalid = key + 'Invalid'; const state = {}; if (!value) { state[keyValid] = false; state[keyInvalid] = false; return state; } if (isInvalid) { state[keyValid] = true; state[keyInvalid] = false; return state; } else { state[keyValid] = false; state[keyInvalid] = true; return state; } }; export const downloadObjectAsJson = (exportObj, exportName) => { const dataStr = 'data:text/json;charset=utf-8,' + encodeURIComponent(JSON.stringify(exportObj)); const downloadAnchorNode = document.createElement('a'); downloadAnchorNode.setAttribute('href', dataStr); downloadAnchorNode.setAttribute('download', exportName + '.json'); document.body.appendChild(downloadAnchorNode); // required for firefox downloadAnchorNode.click(); downloadAnchorNode.remove(); }; export const formatSendAmountInZil = ( amountInZil: string, balanceInZil: string, minGasPriceInZil: string ): string => { const amountInQaBN: BN = units.toQa(amountInZil, units.Units.Zil); const balanceInQaBN: BN = units.toQa(balanceInZil, units.Units.Zil); const minGasPriceInQaBN: BN = units.toQa(minGasPriceInZil, units.Units.Zil); const maxAmountInQaBN = balanceInQaBN.sub(minGasPriceInQaBN); if (amountInQaBN.lte(minGasPriceInQaBN)) { return units.fromQa(minGasPriceInQaBN, units.Units.Zil).toString(); } else if (amountInQaBN.gt(maxAmountInQaBN)) { return units.fromQa(maxAmountInQaBN, units.Units.Zil).toString(); } else { return units.fromQa(amountInQaBN, units.Units.Zil).toString(); } };