b27fa51092
* Chore/browser extension bootstrap (#3257) * init package * set up TS and Webpack * add eslint config * add prettier config * add react and mui theme * add CI * update mui theme version number * Chore/browser extension routes (#3327) * start routes * create layouts * add initial app routes * add initial app pages * add global types * create reuseable components * move password and mnemonic fields to shared react components package * refactor register routes * move client address component to shared package * move components to ui folder * create menu and appbar components * adjust layout components * add readme * use memory router * Feature/nym browser extension login and send (#3373) * init package * set up TS and Webpack * add eslint config * add prettier config * add react and mui theme * add CI * update mui theme version number * Chore/browser extension routes (#3327) * start routes * create layouts * add initial app routes * add initial app pages * add global types * create reuseable components * move password and mnemonic fields to shared react components package * refactor register routes * move client address component to shared package * move components to ui folder * create menu and appbar components * adjust layout components * add readme * use memory router * add extension to mono-repo config * fix webpack build * util functions * add TX type * refactor routes * refactor pages + add send page * add page layout for app pages * set up app context * app components * set up connection config * fix lint errors * Chore/browser extension bootstrap (#3257) * init package * set up TS and Webpack * add eslint config * add prettier config * add react and mui theme * add CI * update mui theme version number * Chore/browser extension routes (#3327) * start routes * create layouts * add initial app routes * add initial app pages * add global types * create reuseable components * move password and mnemonic fields to shared react components package * refactor register routes * move client address component to shared package * move components to ui folder * create menu and appbar components * adjust layout components * add readme * use memory router * add extension to mono-repo config * util functions * add TX type * refactor routes * refactor pages + add send page * add page layout for app pages * set up app context * app components * set up connection config * use fee simulation when sending tokens * use object argument for simulate send api * login validation + fee refinements * use components from shared components lib * add receive modal (#3408) * account storage via wasm * method to get all storage keys * Feature/nym browser extension password encryption (single account) (#3442) * build wasm * reuse components and state for password pages * refactor registration pages * use login with password * import storage as local package * add yarn preinstall script to ts lint gh action * install wasm-pack for CI * use @nym scope for ext storage package * introduced a call to check if database was already initialised (#3465) * introduced a call to check if database was already initialised * use extension storage method to check for db existance --------- Co-authored-by: fmtabbara <fmtabbara@hotmail.co.uk> * introduced mnemonic key existence check (#3462) * Browser extension - Multi-accounts + view mnemonic action (#3488) * add UI for multi-accounts + add view mnemonic for accounts * refactor routes * set up import account * add account to existing wallet * check if account name exists before creating new one * handle password errors * add token to currency conversion * fixed ClientStorageError import path * fix CI * fix CI --------- Co-authored-by: Jędrzej Stuczyński <jedrzej.stuczynski@gmail.com>
41 lines
1.0 KiB
TypeScript
41 lines
1.0 KiB
TypeScript
import Big from 'big.js';
|
|
import { useState } from 'react';
|
|
import { unymToNym } from 'src/utils/coin';
|
|
|
|
export type Fee = { nym: number; unym: number };
|
|
|
|
export function useGetFee() {
|
|
const [fee, setFee] = useState<Fee>();
|
|
const [isLoading, setIsLoading] = useState(false);
|
|
const [error, setError] = useState<string>();
|
|
|
|
async function getFee<T>(txReq: (args: T) => Promise<number | undefined>, args: T) {
|
|
setError(undefined);
|
|
setIsLoading(true);
|
|
|
|
try {
|
|
const txFee = await txReq(args);
|
|
|
|
if (txFee) {
|
|
const feeWithMultiplyer = Big(txFee).mul(1);
|
|
console.log(fee);
|
|
|
|
const txFeeInNyms = unymToNym(feeWithMultiplyer);
|
|
|
|
setFee({ nym: Number(txFeeInNyms), unym: Number(feeWithMultiplyer) });
|
|
}
|
|
|
|
if (!txFee) {
|
|
setError('Unable to calculate fee');
|
|
}
|
|
} catch (e) {
|
|
console.error(e);
|
|
setError(`Unable to get estimated fee: ${e}`);
|
|
} finally {
|
|
setIsLoading(false);
|
|
}
|
|
}
|
|
|
|
return { fee, getFee, isLoading, error };
|
|
}
|