frequi_origin/src/components/ftbot/BotBalance.vue

126 lines
4.0 KiB
Vue
Raw Normal View History

2020-05-14 05:15:18 +00:00
<template>
2020-05-22 18:04:27 +00:00
<div>
<div class="mb-2">
2022-10-30 13:26:23 +00:00
<label class="me-auto h3">Balance</label>
2022-12-24 09:53:01 +00:00
<div class="float-end d-flex flex-row">
<b-button
v-if="canUseBotBalance"
2022-12-24 09:53:01 +00:00
size="sm"
:title="!showBotOnly ? 'Showing Account balance' : 'Showing Bot balance'"
@click="showBotOnly = !showBotOnly"
>
2023-05-09 16:25:28 +00:00
<i-mdi-robot v-if="showBotOnly" />
<i-mdi-bank v-else />
</b-button>
<b-button
size="sm"
:title="!hideSmallBalances ? 'Hide small balances' : 'Show all balances'"
2022-12-24 09:53:01 +00:00
@click="hideSmallBalances = !hideSmallBalances"
>
2023-05-09 16:25:28 +00:00
<i-mdi-eye-off v-if="hideSmallBalances" />
<i-mdi-eye v-else />
2022-12-24 09:53:01 +00:00
</b-button>
<b-button class="float-end" size="sm" @click="botStore.activeBot.getBalance">
<i-mdi-refresh />
</b-button>
2022-12-24 09:53:01 +00:00
</div>
</div>
<BalanceChart v-if="balanceCurrencies" :currencies="chartValues" />
2020-05-22 18:04:27 +00:00
<div>
<p v-if="botStore.activeBot.balance.note">
<strong>{{ botStore.activeBot.balance.note }}</strong>
2020-05-14 05:22:27 +00:00
</p>
<b-table class="table-sm" :items="balanceCurrencies" :fields="tableFields">
2022-12-17 14:03:04 +00:00
<template #custom-foot>
2023-09-01 18:37:21 +00:00
<td class="pt-1"><strong>Total</strong></td>
<td class="pt-1">
<span
class="font-italic"
:title="`Increase over initial capital of ${formatCurrency(
botStore.activeBot.balance.starting_capital,
)} ${botStore.activeBot.balance.stake}`"
>
2023-09-01 18:37:21 +00:00
{{ formatPercent(botStore.activeBot.balance.starting_capital_ratio) }}
</span>
</td>
2020-05-14 05:15:18 +00:00
<!-- this is a computed prop that adds up all the expenses in the visible rows -->
2023-09-01 18:37:21 +00:00
<td class="pt-1">
<strong>
{{
showBotOnly && canUseBotBalance
? formatCurrency(botStore.activeBot.balance.total_bot)
: formatCurrency(botStore.activeBot.balance.total)
}}
</strong>
2020-05-14 05:16:07 +00:00
</td>
2020-05-14 05:15:18 +00:00
</template>
</b-table>
</div>
</div>
</template>
2023-03-18 16:14:14 +00:00
<script setup lang="ts">
2023-03-18 16:47:23 +00:00
import { formatPercent, formatPrice } from '@/shared/formatters';
import { useBotStore } from '@/stores/ftbotwrapper';
import { BalanceValues } from '@/types';
import { TableField } from 'bootstrap-vue-next';
2020-08-09 13:07:09 +00:00
2023-03-18 16:14:14 +00:00
const botStore = useBotStore();
const hideSmallBalances = ref(true);
const showBotOnly = ref(true);
2020-08-09 13:07:09 +00:00
const smallBalance = computed<number>(() => {
return Number((1.1 ** botStore.activeBot.stakeCurrencyDecimals).toFixed(8));
2023-03-18 16:14:14 +00:00
});
const canUseBotBalance = computed(() => {
return botStore.activeBot.botApiVersion >= 2.26;
});
2023-03-18 16:14:14 +00:00
const balanceCurrencies = computed(() => {
return botStore.activeBot.balance.currencies?.filter(
(v) =>
(!hideSmallBalances.value || v.est_stake >= smallBalance.value) &&
(!canUseBotBalance.value || !showBotOnly.value || (v.is_bot_managed ?? true) === true),
);
2023-03-18 16:14:14 +00:00
});
2023-03-18 16:14:14 +00:00
const formatCurrency = (value) => {
return value ? formatPrice(value, botStore.activeBot.stakeCurrencyDecimals) : '';
2023-03-18 16:14:14 +00:00
};
const chartValues = computed<BalanceValues[]>(() => {
return balanceCurrencies.value?.map((v) => {
return {
balance:
showBotOnly.value && canUseBotBalance.value && v.bot_owned != undefined
? v.bot_owned
: v.balance,
currency: v.currency,
est_stake:
showBotOnly.value && canUseBotBalance.value ? v.est_stake_bot ?? v.est_stake : v.est_stake,
free: showBotOnly.value && canUseBotBalance.value ? v.bot_owned ?? v.free : v.free,
used: v.used,
stake: v.stake,
};
});
});
const tableFields = computed<TableField[]>(() => {
2023-03-18 16:14:14 +00:00
return [
{ key: 'currency', label: 'Currency' },
{
key: showBotOnly.value && canUseBotBalance.value ? 'bot_owned' : 'free',
label: 'Available',
formatter: formatCurrency,
},
{
key: showBotOnly.value && canUseBotBalance.value ? 'est_stake_bot' : 'est_stake',
2023-03-18 16:14:14 +00:00
label: `in ${botStore.activeBot.balance.stake}`,
formatter: formatCurrency,
},
];
2022-04-15 18:02:27 +00:00
});
2020-05-14 05:15:18 +00:00
</script>