Skip to content

Commit

Permalink
Merge branch 'main' into bugfix/token-data-from-add-token-are-consistent
Browse files Browse the repository at this point in the history
  • Loading branch information
AntonioVentilii-DFINITY authored Jun 21, 2024
2 parents ae267e8 + 3141c6c commit 008e96e
Show file tree
Hide file tree
Showing 5 changed files with 109 additions and 125 deletions.
82 changes: 15 additions & 67 deletions src/frontend/src/eth/components/tokens/AddTokenModal.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,14 @@
import AddTokenReview from '$eth/components/tokens/AddTokenReview.svelte';
import AddTokenForm from '$eth/components/tokens/AddTokenForm.svelte';
import type { Erc20Metadata } from '$eth/types/erc20';
import { isNullishOrEmpty } from '$lib/utils/input.utils';
import { toastsError } from '$lib/stores/toasts.store';
import { i18n } from '$lib/stores/i18n.store';
import { isNullish } from '@dfinity/utils';
import { authStore } from '$lib/stores/auth.store';
import { nullishSignOut } from '$lib/services/auth.services';
import { ProgressStepsAddToken } from '$lib/enums/progress-steps';
import { addUserToken } from '$lib/api/backend.api';
import { selectedChainId, selectedEthereumNetwork } from '$eth/derived/network.derived';
import { erc20TokensStore } from '$eth/stores/erc20.store';
import { mapErc20Token } from '$eth/utils/erc20.utils';
import { modalStore } from '$lib/stores/modal.store';
import InProgressWizard from '$lib/components/ui/InProgressWizard.svelte';
import { addTokenSteps } from '$lib/constants/steps.constants';
import { saveErc20Contract } from '$eth/services/erc20.services';
const steps: WizardSteps = [
{
Expand All @@ -34,73 +27,28 @@
}
];
let saveProgressStep: string = ProgressStepsAddToken.INITIALIZATION;
let saveProgressStep: ProgressStepsAddToken = ProgressStepsAddToken.INITIALIZATION;
let currentStep: WizardStep | undefined;
let modal: WizardModal;
let contractAddress = '';
let metadata: Erc20Metadata | undefined;
const save = async () => {
if (isNullishOrEmpty(contractAddress)) {
toastsError({
msg: { text: $i18n.tokens.error.invalid_contract_address }
});
return;
}
if (isNullish(metadata)) {
toastsError({
msg: { text: $i18n.tokens.error.no_metadata }
});
return;
}
if (isNullish($authStore.identity)) {
await nullishSignOut();
return;
}
modal.next();
const updateSaveProgressStep = (step: ProgressStepsAddToken) => (saveProgressStep = step);
try {
saveProgressStep = ProgressStepsAddToken.SAVE;
await addUserToken({
identity: $authStore.identity,
token: {
chain_id: $selectedChainId,
contract_address: contractAddress,
symbol: [],
decimals: [],
version: []
}
});
saveProgressStep = ProgressStepsAddToken.UPDATE_UI;
erc20TokensStore.add(
mapErc20Token({
address: contractAddress,
exchange: 'ethereum',
category: 'custom',
network: $selectedEthereumNetwork,
...metadata
})
);
saveProgressStep = ProgressStepsAddToken.DONE;
setTimeout(() => close(), 750);
} catch (err: unknown) {
toastsError({
msg: { text: $i18n.tokens.error.unexpected },
err
});
modal.back();
}
const save = async () => {
await saveErc20Contract({
contractAddress,
metadata,
chainId: $selectedChainId,
network: $selectedEthereumNetwork,
updateSaveProgressStep,
modalNext: modal.next,
onSuccess: close,
onError: modal.back,
identity: $authStore.identity
});
};
const close = () => {
Expand Down
91 changes: 89 additions & 2 deletions src/frontend/src/eth/services/erc20.services.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,16 @@ import { ERC20_CONTRACTS, ERC20_TWIN_TOKENS } from '$env/tokens.erc20.env';
import { infuraErc20Providers } from '$eth/providers/infura-erc20.providers';
import { erc20TokensStore } from '$eth/stores/erc20.store';
import type { Erc20Contract, Erc20Metadata, Erc20Token } from '$eth/types/erc20';
import type { EthereumNetwork } from '$eth/types/network';
import type { EthereumChainId, EthereumNetwork } from '$eth/types/network';
import { mapErc20Token } from '$eth/utils/erc20.utils';
import { listUserTokens } from '$lib/api/backend.api';
import { addUserToken, listUserTokens } from '$lib/api/backend.api';
import { ProgressStepsAddToken } from '$lib/enums/progress-steps';
import { nullishSignOut } from '$lib/services/auth.services';
import { authStore } from '$lib/stores/auth.store';
import { i18n } from '$lib/stores/i18n.store';
import { toastsError } from '$lib/stores/toasts.store';
import type { OptionIdentity } from '$lib/types/identity';
import { isNullishOrEmpty } from '$lib/utils/input.utils';
import { isNullish } from '@dfinity/utils';
import { get } from 'svelte/store';

Expand Down Expand Up @@ -83,3 +87,86 @@ export const loadErc20Contracts = async (): Promise<{ success: boolean }> => {

return { success: true };
};

export const saveErc20Contract = async ({
contractAddress,
metadata,
chainId,
network,
updateSaveProgressStep,
modalNext,
onSuccess,
onError,
identity
}: {
contractAddress: string;
metadata: Erc20Metadata | undefined;
chainId: EthereumChainId;
network: EthereumNetwork;
updateSaveProgressStep: (step: ProgressStepsAddToken) => void;
modalNext: () => void;
onSuccess: () => void;
onError: () => void;
identity: OptionIdentity;
}): Promise<void> => {
const $i18n = get(i18n);

if (isNullishOrEmpty(contractAddress)) {
toastsError({
msg: { text: $i18n.tokens.error.invalid_contract_address }
});
return;
}

if (isNullish(metadata)) {
toastsError({
msg: { text: $i18n.tokens.error.no_metadata }
});
return;
}

if (isNullish(identity)) {
await nullishSignOut();
return;
}

modalNext();

try {
updateSaveProgressStep(ProgressStepsAddToken.SAVE);

await addUserToken({
identity,
token: {
chain_id: chainId,
contract_address: contractAddress,
symbol: [],
decimals: [],
version: []
}
});

updateSaveProgressStep(ProgressStepsAddToken.UPDATE_UI);

erc20TokensStore.add(
mapErc20Token({
address: contractAddress,
exchange: 'ethereum',
category: 'custom',
network: network,
...metadata
})
);

updateSaveProgressStep(ProgressStepsAddToken.DONE);

setTimeout(() => onSuccess(), 750);
} catch (err: unknown) {
toastsError({
msg: { text: $i18n.tokens.error.unexpected },
err
});

onError();
}
};
Loading

0 comments on commit 008e96e

Please sign in to comment.