harb/web-app/src/components/chart/ChartComplete.vue
openhands 8c43d3890c fix: Move BigInt formatting functions from helper.ts to kraiken-lib/format (#246)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-24 23:00:58 +00:00

59 lines
2.3 KiB
Vue

<template>
<ChartJs :snatchedPositions="snatchPositions.map(obj => obj.id)" :positions="activePositions" :dark="darkTheme"></ChartJs>
</template>
<script setup lang="ts">
import ChartJs from '@/components/chart/ChartJs.vue';
import { weiToNumber } from 'kraiken-lib/format';
import { computed, ref } from 'vue';
import { useStatCollection } from '@/composables/useStatCollection';
import { useStake } from '@/composables/useStake';
import { usePositions, type Position } from '@/composables/usePositions';
import { useDark } from '@/composables/useDark';
import { useWallet } from '@/composables/useWallet';
import { DEFAULT_CHAIN_ID } from '@/config';
const { darkTheme } = useDark();
const wallet = useWallet();
const initialChainId = wallet.account.chainId ?? DEFAULT_CHAIN_ID;
const { activePositions } = usePositions(initialChainId);
const stake = useStake();
const statCollection = useStatCollection(initialChainId);
const minStake = computed(() => statCollection.minStake ?? 0n);
const minStakeAmount = computed(() => {
return weiToNumber(minStake.value, 18);
});
const ignoreOwner = ref(false);
const taxRate = ref<number>(1.0);
const snatchPositions = computed(() => {
if (
weiToNumber(statCollection.outstandingStake, 18) + stake.stakingAmountNumber <=
weiToNumber(statCollection.kraikenTotalSupply, 18) * 0.2
) {
return [];
}
//Differenz aus outstandingSupply und totalSupply bestimmen, wie viel HARB kann zum Snatch verwendet werden
const difference =
weiToNumber(statCollection.outstandingStake, 18) +
stake.stakingAmountNumber -
weiToNumber(statCollection.kraikenTotalSupply, 18) * 0.2;
//Division ohne Rest, um zu schauen wie viele Positionen gesnatched werden könnten
const snatchAblePositionsCount = Math.floor(difference / minStakeAmount.value);
//wenn mehr als 0 Positionen gesnatched werden könnten, wird geschaut wie viele Positionen in Frage kommen
if (snatchAblePositionsCount > 0) {
const snatchAblePositions = activePositions.value.filter((obj: Position) => {
if (ignoreOwner.value) {
return obj.taxRatePercentage < taxRate.value;
}
return obj.taxRatePercentage < taxRate.value && !obj.iAmOwner;
});
const slicedArray = snatchAblePositions.slice(0, snatchAblePositionsCount);
return slicedArray;
}
return [];
});
</script>