Skip to content

Commit

Permalink
Merge pull request #913 from novasamatech/rc/1.0.1-111
Browse files Browse the repository at this point in the history
Release candidate - 1.0.1
  • Loading branch information
pgolovkin authored Jun 29, 2023
2 parents e3f594a + ac06326 commit 171b636
Show file tree
Hide file tree
Showing 11 changed files with 70 additions and 53 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "nova-spektr",
"description": "Polkadot Enterprise application",
"version": "1.0.0",
"version": "1.0.1",
"main": "./release/build/main.js",
"license": "MIT",
"author": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ const QrSignatureReader = ({
cameraId,
className,
onCameraList,
bgVideo,
bgVideo = true,
bgVideoClassName,
onResult,
onStart,
Expand Down Expand Up @@ -67,6 +67,7 @@ const QrSignatureReader = ({
if (cameras.length === 0) {
throw QR_READER_ERRORS[QrError.NO_VIDEO_INPUT];
}

if (cameras.length > 0) {
onCameraList?.(cameras);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import { useEffect, useState } from 'react';

import cnTw from '@renderer/shared/utils/twMerge';
import AccountAddress, {
getAddress,
Expand All @@ -20,8 +18,8 @@ type Props<T extends any> = {
explorers?: Explorer[];
value: T;
onSelected: (value: T) => void;
chainId?: ChainId;
asset?: Asset;
chainId: ChainId;
asset: Asset;
} & AccountAddressProps;

const SelectableSignatory = <T extends any>({
Expand All @@ -36,18 +34,10 @@ const SelectableSignatory = <T extends any>({
}: Props<T>) => {
const address = getAddress(addressProps);

const { getBalance } = useBalance();
const { getLiveBalance } = useBalance();
const popoverItems = useAddressInfo(address, explorers, true);

const [balance, setBalance] = useState('');

useEffect(() => {
if (chainId && asset) {
getBalance(toAccountId(address), chainId, asset.assetId.toString()).then((b) =>
setBalance(transferableAmount(b)),
);
}
}, [chainId, asset, address]);
const balance = getLiveBalance(toAccountId(address), chainId, asset.assetId.toString());

return (
<button
Expand All @@ -58,7 +48,9 @@ const SelectableSignatory = <T extends any>({
<InfoPopover data={popoverItems}>
<Icon name="info" size={14} className="text-icon-default ml-2 mr-auto" />
</InfoPopover>
{balance && asset && <BalanceNew value={balance} asset={asset} className="text-body text-inherit ml-auto mr-6" />}
{balance && asset && (
<BalanceNew value={transferableAmount(balance)} asset={asset} className="text-body text-inherit ml-auto mr-6" />
)}
<Icon name="right" className={cnTw('text-icon-default', !balance && 'ml-auto')} size={20} />
</button>
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,13 @@ const OperationFullInfo = ({ tx, account }: Props) => {
{signatoriesList.map(({ accountId, name }) => {
return (
<li key={accountId}>
<SignatoryCard accountId={accountId} type="short" name={name} status={getSignatoryStatus(accountId)} />
<SignatoryCard
addressPrefix={connection.addressPrefix}
accountId={accountId}
type="short"
name={name}
status={getSignatoryStatus(accountId)}
/>
</li>
);
})}
Expand Down
11 changes: 5 additions & 6 deletions src/renderer/screens/Operations/components/modals/ApproveTx.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import { ExtendedChain } from '@renderer/services/network/common/types';
import { MultisigTransaction, Transaction, TransactionType } from '@renderer/domain/transaction';
import { Address, HexString, Timepoint } from '@renderer/domain/shared-kernel';
import { toAddress } from '@renderer/shared/utils/address';
import { getAssetById } from '@renderer/shared/utils/assets';
import { useAccount } from '@renderer/services/account/accountService';
import { getTransactionTitle } from '../../common/utils';
import { Submit } from '../ActionSteps/Submit';
Expand Down Expand Up @@ -111,7 +110,7 @@ const ApproveTx = ({ tx, account, connection }: Props) => {
});
}, [tx.transaction, connection.api]);

const asset = getAssetById(tx.transaction?.args.assetId, connection.assets);
const nativeAsset = connection.assets[0];

const getMultisigTx = (signer: Address): Transaction => {
const chainId = tx.chainId;
Expand Down Expand Up @@ -148,11 +147,11 @@ const ApproveTx = ({ tx, account, connection }: Props) => {
};

const validateBalanceForFee = async (signAccount: AccountDS): Promise<boolean> => {
if (!connection.api || !feeTx || !signAccount.accountId || !asset) return false;
if (!connection.api || !feeTx || !signAccount.accountId || !nativeAsset) return false;

const fee = await getTransactionFee(feeTx, connection.api);

const balance = await getBalance(signAccount.accountId, connection.chainId, asset.assetId.toString());
const balance = await getBalance(signAccount.accountId, connection.chainId, nativeAsset.assetId.toString());

if (!balance) return false;

Expand Down Expand Up @@ -242,7 +241,7 @@ const ApproveTx = ({ tx, account, connection }: Props) => {
chainId={tx.chainId}
transaction={approveTx}
countdown={countdown}
assetId={asset?.assetId.toString() || '0'}
assetId={nativeAsset?.assetId.toString() || '0'}
onGoBack={goBack}
onStartOver={() => {}}
onResult={onSignResult}
Expand All @@ -256,7 +255,7 @@ const ApproveTx = ({ tx, account, connection }: Props) => {
accounts={unsignedAccounts}
explorers={connection.explorers}
chainId={connection.chainId}
asset={asset}
asset={nativeAsset}
onClose={toggleSelectAccountModal}
onSelect={handleAccountSelect}
/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import { ExtendedChain } from '@renderer/services/network/common/types';
import { Transaction, TransactionType } from '@renderer/domain/transaction';
import { Address, HexString, Timepoint } from '@renderer/domain/shared-kernel';
import { toAddress } from '@renderer/shared/utils/address';
import { getAssetById } from '@renderer/shared/utils/assets';
import { useAccount } from '@renderer/services/account/accountService';
import { getTransactionTitle } from '../../common/utils';
import { Submit } from '../ActionSteps/Submit';
Expand Down Expand Up @@ -83,7 +82,7 @@ const RejectTx = ({ tx, account, connection }: Props) => {
setRejectTx(multisigTx);
}, [tx, accounts.length, signAccount?.accountId]);

const asset = getAssetById(tx.transaction?.args.assetId, connection.assets);
const nativeAsset = connection.assets[0];

const getMultisigTx = (signer: Address): Transaction => {
const otherSignatories = account.signatories.reduce<Address[]>((acc, s) => {
Expand Down Expand Up @@ -114,10 +113,10 @@ const RejectTx = ({ tx, account, connection }: Props) => {
};

const validateBalanceForFee = async (signAccount: AccountDS): Promise<boolean> => {
if (!connection.api || !rejectTx || !signAccount.accountId || !asset) return false;
if (!connection.api || !rejectTx || !signAccount.accountId || !nativeAsset) return false;

const fee = await getTransactionFee(rejectTx, connection.api);
const balance = await getBalance(signAccount.accountId, connection.chainId, asset.assetId.toString());
const balance = await getBalance(signAccount.accountId, connection.chainId, nativeAsset.assetId.toString());

if (!balance) return false;

Expand Down Expand Up @@ -201,7 +200,7 @@ const RejectTx = ({ tx, account, connection }: Props) => {
chainId={tx.chainId}
transaction={rejectTx}
countdown={countdown}
assetId={asset?.assetId.toString() || '0'}
assetId={nativeAsset?.assetId.toString() || '0'}
onGoBack={goBack}
onStartOver={() => {}}
onResult={onSignResult}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,19 +28,21 @@ const SignatorySelectModal = ({ isOpen, onClose, onSelect, accounts, asset, chai
onClose={onClose}
>
<ul className="mt-1">
{accounts.map((a) => (
<li key={a.id}>
<SelectableSignatory
accountId={a.accountId}
name={a.name}
asset={asset}
chainId={chainId}
explorers={explorers}
value={a}
onSelected={onSelect}
/>
</li>
))}
{asset &&
chainId &&
accounts.map((a) => (
<li key={a.id}>
<SelectableSignatory
accountId={a.accountId}
name={a.name}
asset={asset}
chainId={chainId}
explorers={explorers}
value={a}
onSelected={onSelect}
/>
</li>
))}
</ul>
</BaseModal>
);
Expand Down
11 changes: 6 additions & 5 deletions src/renderer/screens/Signing/QrReaderWrapper/QrReaderWrapper.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,11 @@ const QrReaderWrapper = ({ className, onResult, countdown, validationError, isMu
}));

setAvailableCameras(formattedCameras);
if (formattedCameras[0]) {

if (formattedCameras.length > 1) {
// if multiple cameras are available we set first one as active
setActiveCamera(formattedCameras[0]);
setIsLoading(false);
}
};

Expand All @@ -77,20 +80,18 @@ const QrReaderWrapper = ({ className, onResult, countdown, validationError, isMu
};

const onError = (error: ErrorObject) => {
setIsLoading(false);

if (error.code === QrError.USER_DENY) {
setError(CameraError.DENY_ERROR);
} else if (error.code === QrError.DECODE_ERROR) {
setError(CameraError.DECODE_ERROR);
} else {
setError(CameraError.UNKNOWN_ERROR);
}
setIsLoading(false);
};

const qrReaderProps: QrReaderProps = {
size: 240,
bgVideo: true,
bgVideoClassName: 'w-[440px] h-[532px]',
className: cnTw(
'z-10 w-[440px] h-[532px] top-[-124px]',
Expand All @@ -105,7 +106,7 @@ const QrReaderWrapper = ({ className, onResult, countdown, validationError, isMu

return (
<div className="flex flex-col items-center flex-1 w-full relative pt-[52px] overflow-y-hidden">
<SmallTitleText as="h3" className={cnTw('z-10', activeCamera && 'text-white')}>
<SmallTitleText as="h3" className={cnTw('z-10', isCameraOn && 'text-white')}>
{t('signing.scanQrTitle')}
</SmallTitleText>

Expand Down
16 changes: 13 additions & 3 deletions src/renderer/screens/Transfer/common/utils.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ type Params = {
deposit?: string;
amount?: string;
balance?: Balance;
nativeBalance?: Balance;
};

const getBalance = (balance: string, asset: Asset, isCorrect = true): ReactNode => {
Expand All @@ -39,7 +40,11 @@ const validateSignatoryBalance = (balance: string, fee: string, deposit: string)
return new BN(deposit).add(new BN(fee)).lte(new BN(balance));
};

const validateAccountBalance = (balance: string, amount: string, fee: string): boolean => {
const validateAccountBalance = (balance: string, nativeBalance: string, amount: string, fee: string): boolean => {
if (nativeBalance) {
return new BN(amount).lte(new BN(balance)) && new BN(fee).lte(new BN(nativeBalance));
}

return new BN(amount).add(new BN(fee)).lte(new BN(balance));
};

Expand All @@ -63,14 +68,19 @@ export const getSignatoryOption = (

export const getAccountOption = <T extends Account | MultisigAccount>(
account: T,
{ balance, asset, fee, addressPrefix, amount }: Params,
{ balance, asset, fee, addressPrefix, amount, nativeBalance }: Params,
): DropdownOption<T> => {
const address = toAddress(account.accountId, { prefix: addressPrefix });
const canValidateBalance = balance && fee && amount;

let balanceIsCorrect = true;
if (canValidateBalance) {
balanceIsCorrect = validateAccountBalance(transferableAmount(balance), amount, fee);
balanceIsCorrect = validateAccountBalance(
transferableAmount(balance),
transferableAmount(nativeBalance),
amount,
fee,
);
}

const balanceContent = getBalance(transferableAmount(balance), asset, balanceIsCorrect);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,23 +57,29 @@ const InitOperation = ({

const accountIds = accounts.map((account) => account.accountId);
const balances = getLiveAssetBalances(accountIds, chainId, asset?.assetId.toString() || '');
const nativeBalances = getLiveAssetBalances(accountIds, chainId, nativeToken?.assetId.toString() || '');

const accountIsMultisig = activeAccount && isMultisig(activeAccount.value);
const signatoryIds = accountIsMultisig
? (activeAccount.value as MultisigAccount).signatories.map((s) => s.accountId)
: [];
const signatoriesBalances = getLiveAssetBalances(signatoryIds, chainId, asset?.assetId.toString() || '');
const signatoriesBalances = getLiveAssetBalances(
signatoryIds,
chainId,
nativeToken?.assetId.toString() || asset?.assetId.toString() || '',
);

useEffect(() => {
if (!asset) return;

const options = accounts.reduce<any[]>((acc, account) => {
const balance = balances.find((b) => b.accountId === account.accountId);
const nativeBalance = nativeBalances.find((b) => b.accountId === account.accountId);

const isSameChain = !account.chainId || account.chainId === chainId;

if (isSameChain) {
acc.push(getAccountOption(account, { addressPrefix, asset, amount, balance, fee, deposit }));
acc.push(getAccountOption(account, { addressPrefix, asset, amount, balance, nativeBalance, fee, deposit }));
}

return acc;
Expand Down Expand Up @@ -104,7 +110,7 @@ const InitOperation = ({
if (signatoryIds.includes(signer.accountId)) {
const balance = signatoriesBalances.find((b) => b.accountId === signer.accountId);

acc.push(getSignatoryOption(signer, { addressPrefix, asset, balance, fee, deposit }));
acc.push(getSignatoryOption(signer, { addressPrefix, asset: nativeToken || asset, balance, fee, deposit }));
}

return acc;
Expand Down
1 change: 1 addition & 0 deletions src/renderer/screens/Transfer/components/TransferForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,7 @@ export const TransferForm = ({
if (nativeTokenBalance) {
return new BN(fee).lte(new BN(nativeTokenBalance));
}

if (isMultisig(account)) {
return new BN(fee).lte(new BN(balance));
}
Expand Down

0 comments on commit 171b636

Please sign in to comment.