Files
riwa-ionic/src/store/wallet.ts

100 lines
2.8 KiB
TypeScript

import type { BalancesData, BalancesSummaryData, BankAccountsData, SupportBanksData, TotalAssetValue } from "@/api/types";
import { defineStore } from "pinia";
import { client, safeClient } from "@/api";
interface USDTBalance {
available: string;
frozen: string;
total: string;
}
interface State {
totalAssetValue: TotalAssetValue;
balances: BalancesSummaryData;
fundingBalances: BalancesData;
tradingBalances: BalancesData;
bankAccounts: BankAccountsData[];
supportBanks: SupportBanksData["data"];
USDTBalance: USDTBalance | null;
}
export const useWalletStore = defineStore("wallet", () => {
const state = reactive<State>({
totalAssetValue: {
fundingValueUsd: "0",
tradingValueUsd: "0",
totalValueUsd: "0",
},
balances: [],
fundingBalances: [],
tradingBalances: [],
bankAccounts: [],
supportBanks: [],
USDTBalance: null,
});
async function initializeWallet() {
syncTotalAssetValue();
syncBalances();
syncBankAccounts();
syncSupportBanks();
}
async function syncTotalAssetValue() {
const { data } = await safeClient(() => client.api.wallet.total_value.get(), { silent: true });
if (data.value)
state.totalAssetValue = data.value;
}
async function syncBalances() {
const { data: balances } = await safeClient(() => client.api.wallet.balances.summary.get(), { silent: true });
state.balances = balances.value || [];
}
async function syncFundingBalances() {
const { data: balances } = await safeClient(() => client.api.wallet.balances.get({
query: { accountType: "funding" },
}), { silent: true });
state.fundingBalances = balances.value || [];
}
async function syncTradingBalances() {
const { data: balances } = await safeClient(() => client.api.wallet.balances.get({
query: { accountType: "trading" },
}), { silent: true });
state.tradingBalances = balances.value || [];
}
async function syncBankAccounts(data?: BankAccountsData[]) {
if (data) {
state.bankAccounts = data;
return;
}
const { data: bankAccounts } = await safeClient(() => client.api.bank_account.get(), { silent: true });
state.bankAccounts = bankAccounts.value?.data || [];
}
async function syncSupportBanks() {
const { data: banks } = await safeClient(() => client.api.bank_account.banks.get(), { silent: true });
state.supportBanks = banks.value?.data || [];
}
async function syncUSDTBalance() {
const { data } = await safeClient(client.api.wallet.balance({ assetCode: "USDT" }).get({
query: { accountType: "funding" },
}), { silent: true });
state.USDTBalance = data.value || null;
}
return {
...toRefs(state),
initializeWallet,
syncBalances,
syncFundingBalances,
syncTradingBalances,
syncBankAccounts,
syncSupportBanks,
syncUSDTBalance,
};
});