177 lines
4.7 KiB
Vue
177 lines
4.7 KiB
Vue
<script setup lang="ts">
|
|
import blockchain from "@/utils/blockchain";
|
|
import { ref, onUpdated } from "vue";
|
|
|
|
// props
|
|
const props = defineProps<{
|
|
walletTransactions: any[];
|
|
isManageMode: boolean;
|
|
}>();
|
|
|
|
const itemsToShow = ref<any[]>([]);
|
|
|
|
itemsToShow.value =
|
|
props.walletTransactions?.length > 3
|
|
? props.walletTransactions.slice(0, 3)
|
|
: props.walletTransactions;
|
|
|
|
// Methods
|
|
const formatEventsAmount = (amount: any) => {
|
|
try {
|
|
const formated = blockchain.formatBigNumber(amount);
|
|
return formated;
|
|
} catch {
|
|
return "";
|
|
}
|
|
};
|
|
|
|
const openEtherscanUrl = (url: string) => {
|
|
window.open(url, "_blank");
|
|
};
|
|
|
|
const loadMore = () => {
|
|
const itemsShowing = itemsToShow.value.length;
|
|
if (props.walletTransactions?.length > itemsShowing + 3)
|
|
itemsToShow.value?.push(
|
|
...props.walletTransactions.slice(itemsShowing, itemsShowing + 3)
|
|
);
|
|
else itemsToShow.value = props.walletTransactions;
|
|
};
|
|
|
|
// lifecycle methods
|
|
|
|
onUpdated(() => {
|
|
if (itemsToShow.value.length == 0) {
|
|
itemsToShow.value =
|
|
props.walletTransactions?.length > 3
|
|
? props.walletTransactions.slice(0, 3)
|
|
: props.walletTransactions;
|
|
}
|
|
});
|
|
|
|
//emits
|
|
const emit = defineEmits(["cancelDeposit", "withdrawDeposit"]);
|
|
</script>
|
|
|
|
<template>
|
|
<div class="blur-container">
|
|
<div
|
|
class="grid grid-cols-4 grid-flow-row w-full px-6"
|
|
v-if="props.walletTransactions?.length != 0"
|
|
>
|
|
<span class="text-xs text-gray-50 font-medium justify-self-center"
|
|
>Valor</span
|
|
>
|
|
<span class="text-xs text-gray-50 font-medium justify-self-center"
|
|
>Data</span
|
|
>
|
|
<span class="text-xs text-gray-50 font-medium justify-self-center">{{
|
|
props.isManageMode ? "Cancelar oferta" : "Tipo de transação"
|
|
}}</span>
|
|
<span class="text-xs text-gray-50 font-medium justify-self-center">{{
|
|
props.isManageMode ? "Retirar tokens" : "Checar transação"
|
|
}}</span>
|
|
</div>
|
|
<div
|
|
class="grid grid-cols-4 grid-flow-row w-full bg-white px-6 py-4 rounded-lg"
|
|
v-for="item in itemsToShow"
|
|
:key="item?.blockNumber"
|
|
>
|
|
<span class="last-release-info">
|
|
{{ formatEventsAmount(item?.args.amount) }} BRZ
|
|
</span>
|
|
|
|
<span class="last-release-info"> 20 out 2022 </span>
|
|
|
|
<div
|
|
v-if="props.isManageMode"
|
|
class="flex gap-2 cursor-pointer items-center justify-self-center"
|
|
@click="emit('cancelDeposit')"
|
|
>
|
|
<span class="last-release-info">Cancelar</span>
|
|
<img alt="Cancel image" src="@/assets/cancel.svg" />
|
|
</div>
|
|
|
|
<span class="last-release-info" v-if="!props.isManageMode">
|
|
{{ "Compra" }}
|
|
</span>
|
|
|
|
<div
|
|
v-if="props.isManageMode"
|
|
class="flex gap-2 cursor-pointer items-center justify-self-center"
|
|
@click="emit('withdrawDeposit')"
|
|
>
|
|
<span class="last-release-info">Retirar</span>
|
|
<img alt="Cancel image" src="@/assets/withdraw.svg" />
|
|
</div>
|
|
|
|
<div
|
|
v-if="!props.isManageMode"
|
|
class="flex gap-2 cursor-pointer items-center justify-self-center"
|
|
@click="
|
|
openEtherscanUrl(`https://etherscan.io/tx/${item?.transactionHash}`)
|
|
"
|
|
>
|
|
<span class="last-release-info">Etherscan</span>
|
|
<img alt="Redirect image" src="@/assets/redirect.svg" />
|
|
</div>
|
|
</div>
|
|
<div
|
|
class="flex justify-center w-full mt-2"
|
|
v-if="props.walletTransactions?.length != 0"
|
|
>
|
|
<button type="button" class="text-white" @click="loadMore()">
|
|
Carregar mais
|
|
</button>
|
|
</div>
|
|
<span
|
|
class="font-bold text-gray-900"
|
|
v-if="props.walletTransactions?.length == 0"
|
|
>
|
|
Não há nenhuma transação anterior
|
|
</span>
|
|
</div>
|
|
</template>
|
|
|
|
<style scoped>
|
|
.page {
|
|
@apply flex flex-col items-center justify-center w-full mt-16;
|
|
}
|
|
|
|
p {
|
|
@apply text-gray-900;
|
|
}
|
|
|
|
.text-container {
|
|
@apply flex flex-col items-center justify-center gap-4;
|
|
}
|
|
|
|
.text {
|
|
@apply text-gray-800 text-center;
|
|
}
|
|
.blur-container-row {
|
|
@apply flex flex-row justify-center items-center px-8 py-6 gap-2 rounded-lg shadow-md shadow-gray-600 backdrop-blur-md mt-8 w-1/3;
|
|
}
|
|
|
|
.blur-container {
|
|
@apply flex flex-col justify-center items-center px-8 py-6 gap-4 rounded-lg shadow-md shadow-gray-600 backdrop-blur-md w-auto;
|
|
}
|
|
|
|
.grid-container {
|
|
@apply grid grid-cols-4 grid-flow-row items-center px-8 py-6 gap-4 rounded-lg shadow-md shadow-gray-600 backdrop-blur-md mt-10 w-auto;
|
|
}
|
|
|
|
.last-release-info {
|
|
@apply font-medium text-base text-gray-900 justify-self-center;
|
|
}
|
|
|
|
input[type="number"] {
|
|
-moz-appearance: textfield;
|
|
}
|
|
|
|
input[type="number"]::-webkit-inner-spin-button,
|
|
input[type="number"]::-webkit-outer-spin-button {
|
|
-webkit-appearance: none;
|
|
}
|
|
</style>
|