refactor: standardize quote styles to single quotes across all files

This commit is contained in:
2026-05-04 20:39:10 -03:00
committed by hueso
parent af897e7dd4
commit 9c948d7da4
69 changed files with 1839 additions and 1828 deletions

View File

@@ -1,7 +1,7 @@
module.exports = { module.exports = {
presets: [ presets: [
[ [
"@babel/preset-env", '@babel/preset-env',
{ {
modules: false, modules: false,
}, },
@@ -10,8 +10,8 @@ module.exports = {
env: { env: {
test: { test: {
presets: [ presets: [
["@babel/preset-env", { targets: { node: "current" } }], ['@babel/preset-env', { targets: { node: 'current' } }],
"@babel/preset-typescript", '@babel/preset-typescript',
], ],
}, },
}, },

View File

@@ -1,34 +1,44 @@
import pluginVue from "eslint-plugin-vue"; import pluginVue from 'eslint-plugin-vue';
import vueTsConfig from "@vue/eslint-config-typescript"; import vueTsConfig from '@vue/eslint-config-typescript';
import vuePrettierConfig from "@vue/eslint-config-prettier"; import vuePrettierConfig from '@vue/eslint-config-prettier';
export default [ export default [
{ {
ignores: [ ignores: [
"node_modules/**", 'node_modules/**',
"dist/**", 'dist/**',
"coverage/**", 'coverage/**',
"public/**", 'public/**',
"p2pix-smart-contracts/**", 'p2pix-smart-contracts/**',
"vendor/**", 'vendor/**',
"src/generated.ts", 'src/generated.ts',
], ],
}, },
...pluginVue.configs["flat/essential"], ...pluginVue.configs['flat/essential'],
...vueTsConfig(), ...vueTsConfig(),
// 1. Mantemos a config base do Prettier
vuePrettierConfig, vuePrettierConfig,
{ {
rules: { rules: {
"@typescript-eslint/no-unused-vars": [ // 2. Forçamos o ESLint a exigir aspas simples
"warn", quotes: ['error', 'single', { avoidEscape: true }],
// 3. IMPORTANTÍSSIMO: Forçamos o PRETTIER a também usar aspas simples
// Isso evita que um atropele o outro
'prettier/prettier': ['error', { singleQuote: true }],
'@typescript-eslint/no-unused-vars': [
'warn',
{ {
argsIgnorePattern: "^_", argsIgnorePattern: '^_',
varsIgnorePattern: "^_", varsIgnorePattern: '^_',
caughtErrorsIgnorePattern: "^_", caughtErrorsIgnorePattern: '^_',
destructuredArrayIgnorePattern: "^_", destructuredArrayIgnorePattern: '^_',
}, },
], ],
"@typescript-eslint/no-explicit-any": "warn", '@typescript-eslint/no-explicit-any': 'warn',
}, },
}, },
]; ];

View File

@@ -1,13 +1,13 @@
<script setup lang="ts"> <script setup lang="ts">
import { useRoute } from "vue-router"; import { useRoute } from 'vue-router';
import TopBar from "@/components/TopBar/TopBar.vue"; import TopBar from '@/components/TopBar/TopBar.vue';
import SpinnerComponent from "@/components/ui/SpinnerComponent.vue"; import SpinnerComponent from '@/components/ui/SpinnerComponent.vue';
import ToasterComponent from "@/components/ui/ToasterComponent.vue"; import ToasterComponent from '@/components/ui/ToasterComponent.vue';
import VersionFooter from "@/components/ui/VersionFooter.vue"; import VersionFooter from '@/components/ui/VersionFooter.vue';
import { init, useOnboard } from "@web3-onboard/vue"; import { init, useOnboard } from '@web3-onboard/vue';
import injectedModule from "@web3-onboard/injected-wallets"; import injectedModule from '@web3-onboard/injected-wallets';
import { Networks, DEFAULT_NETWORK } from "@/config/networks"; import { Networks, DEFAULT_NETWORK } from '@/config/networks';
import { ref } from "vue"; import { ref } from 'vue';
const route = useRoute(); const route = useRoute();
const injected = injectedModule(); const injected = injectedModule();

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
import { getContract } from "./provider"; import { getContract } from './provider';
import { ChainContract } from "viem"; import { ChainContract } from 'viem';
import { parseEther, type Address, type TransactionReceipt } from "viem"; import { parseEther, type Address, type TransactionReceipt } from 'viem';
export const addLock = async ( export const addLock = async (
sellerAddress: Address, sellerAddress: Address,
@@ -11,13 +11,13 @@ export const addLock = async (
const parsedAmount = parseEther(amount.toString()); const parsedAmount = parseEther(amount.toString());
if (!wallet) { if (!wallet) {
throw new Error("Wallet not connected"); throw new Error('Wallet not connected');
} }
const { result, request } = await client.simulateContract({ const { result, request } = await client.simulateContract({
address, address,
abi, abi,
functionName: "lock", functionName: 'lock',
args: [sellerAddress, tokenAddress, parsedAmount, [], []], args: [sellerAddress, tokenAddress, parsedAmount, [], []],
account, account,
}); });
@@ -25,7 +25,7 @@ export const addLock = async (
const receipt = await client.waitForTransactionReceipt({ hash }); const receipt = await client.waitForTransactionReceipt({ hash });
if (!receipt.status) if (!receipt.status)
throw new Error("Transaction failed: " + receipt.transactionHash); throw new Error('Transaction failed: ' + receipt.transactionHash);
return result; return result;
}; };
@@ -37,13 +37,13 @@ export const withdrawDeposit = async (
const { address, abi, wallet, client, account } = await getContract(); const { address, abi, wallet, client, account } = await getContract();
if (!wallet) { if (!wallet) {
throw new Error("Wallet not connected"); throw new Error('Wallet not connected');
} }
const { request } = await client.simulateContract({ const { request } = await client.simulateContract({
address, address,
abi, abi,
functionName: "withdraw", functionName: 'withdraw',
args: [token, parseEther(amount), []], args: [token, parseEther(amount), []],
account, account,
}); });
@@ -51,7 +51,7 @@ export const withdrawDeposit = async (
const hash = await wallet.writeContract(request); const hash = await wallet.writeContract(request);
const receipt = await client.waitForTransactionReceipt({ hash }); const receipt = await client.waitForTransactionReceipt({ hash });
return receipt.status === "success"; return receipt.status === 'success';
}; };
export const releaseLock = async ( export const releaseLock = async (
@@ -62,13 +62,13 @@ export const releaseLock = async (
const { address, abi, wallet, client, account } = await getContract(); const { address, abi, wallet, client, account } = await getContract();
if (!wallet) { if (!wallet) {
throw new Error("Wallet not connected"); throw new Error('Wallet not connected');
} }
const { request } = await client.simulateContract({ const { request } = await client.simulateContract({
address, address,
abi, abi,
functionName: "release", functionName: 'release',
args: [BigInt(lockID), pixTimestamp, signature], args: [BigInt(lockID), pixTimestamp, signature],
account, account,
}); });

View File

@@ -1,13 +1,13 @@
import { useUser } from "@/composables/useUser"; import { useUser } from '@/composables/useUser';
import { formatEther, toHex, stringToHex } from "viem"; import { formatEther, toHex, stringToHex } from 'viem';
import type { PublicClient, Address } from "viem"; import type { PublicClient, Address } from 'viem';
import { Networks } from "@/config/networks"; import { Networks } from '@/config/networks';
import { getContract } from "./provider"; import { getContract } from './provider';
import { p2PixAbi } from "./abi"; import { p2PixAbi } from './abi';
import type { ValidDeposit } from "@/model/ValidDeposit"; import type { ValidDeposit } from '@/model/ValidDeposit';
import type { NetworkConfig } from "@/model/NetworkEnum"; import type { NetworkConfig } from '@/model/NetworkEnum';
import type { UnreleasedLock } from "@/model/UnreleasedLock"; import type { UnreleasedLock } from '@/model/UnreleasedLock';
import { ChainContract } from "viem"; import { ChainContract } from 'viem';
const getNetworksLiquidity = async (): Promise<void> => { const getNetworksLiquidity = async (): Promise<void> => {
const user = useUser(); const user = useUser();
@@ -37,16 +37,16 @@ const getParticipantID = async (
const participantIDHex = await client.readContract({ const participantIDHex = await client.readContract({
address, address,
abi, abi,
functionName: "getPixTarget", functionName: 'getPixTarget',
args: [seller, token], args: [seller, token],
}); });
// Remove '0x' prefix and convert hex to UTF-8 string // Remove '0x' prefix and convert hex to UTF-8 string
const hexString = const hexString =
typeof participantIDHex === "string" typeof participantIDHex === 'string'
? participantIDHex ? participantIDHex
: toHex(participantIDHex as bigint); : toHex(participantIDHex as bigint);
if (!hexString) throw new Error("Participant ID not found"); if (!hexString) throw new Error('Participant ID not found');
const bytes = new Uint8Array( const bytes = new Uint8Array(
hexString hexString
.slice(2) .slice(2)
@@ -54,7 +54,7 @@ const getParticipantID = async (
.map((byte: string) => parseInt(byte, 16)), .map((byte: string) => parseInt(byte, 16)),
); );
// Remove null bytes from the end of the string // Remove null bytes from the end of the string
return new TextDecoder().decode(bytes).replace(/\0/g, ""); return new TextDecoder().decode(bytes).replace(/\0/g, '');
}; };
const getValidDeposits = async ( const getValidDeposits = async (
@@ -85,9 +85,9 @@ const getValidDeposits = async (
}; };
const depositLogs = await fetch(network.subgraphUrls[0], { const depositLogs = await fetch(network.subgraphUrls[0], {
method: "POST", method: 'POST',
headers: { headers: {
"Content-Type": "application/json", 'Content-Type': 'application/json',
}, },
body: JSON.stringify(body), body: JSON.stringify(body),
}); });
@@ -95,7 +95,7 @@ const getValidDeposits = async (
// remove doubles from sellers list // remove doubles from sellers list
const depositData = await depositLogs.json(); const depositData = await depositLogs.json();
if (!depositData.data) { if (!depositData.data) {
console.error("Error fetching deposit logs"); console.error('Error fetching deposit logs');
return []; return [];
} }
const depositAddeds = depositData.data.depositAddeds; const depositAddeds = depositData.data.depositAddeds;
@@ -119,7 +119,7 @@ const getValidDeposits = async (
const balanceCalls = sellersList.map((seller) => ({ const balanceCalls = sellersList.map((seller) => ({
address: (network.contracts?.p2pix as ChainContract).address, address: (network.contracts?.p2pix as ChainContract).address,
abi, abi,
functionName: "getBalance", functionName: 'getBalance',
args: [seller, token], args: [seller, token],
})); }));
@@ -138,7 +138,7 @@ const getValidDeposits = async (
remaining: Number(formatEther(mappedBalance.result as bigint)), remaining: Number(formatEther(mappedBalance.result as bigint)),
seller, seller,
network, network,
participantID: "", participantID: '',
}; };
depositList[seller + token] = validDeposit; depositList[seller + token] = validDeposit;
} }
@@ -154,7 +154,7 @@ const getUnreleasedLockById = async (
const [, , , amount, token, seller] = await client.readContract({ const [, , , amount, token, seller] = await client.readContract({
address, address,
abi, abi,
functionName: "mapLocks", functionName: 'mapLocks',
args: [lockID], args: [lockID],
}); });

View File

@@ -1,5 +1,5 @@
import { p2PixAbi } from "./abi"; import { p2PixAbi } from './abi';
import { updateWalletStatus } from "./wallet"; import { updateWalletStatus } from './wallet';
import { import {
createPublicClient, createPublicClient,
createWalletClient, createWalletClient,
@@ -7,10 +7,10 @@ import {
http, http,
PublicClient, PublicClient,
WalletClient, WalletClient,
} from "viem"; } from 'viem';
import { useUser } from "@/composables/useUser"; import { useUser } from '@/composables/useUser';
import type { NetworkConfig } from "@/model/NetworkEnum"; import type { NetworkConfig } from '@/model/NetworkEnum';
import type { ChainContract } from "viem"; import type { ChainContract } from 'viem';
let walletClient: WalletClient | null = null; let walletClient: WalletClient | null = null;
@@ -38,7 +38,7 @@ const getContract = async (onlyRpcProvider = false) => {
const wallet = onlyRpcProvider ? null : getWalletClient(); const wallet = onlyRpcProvider ? null : getWalletClient();
if (!client) { if (!client) {
throw new Error("Public client not initialized"); throw new Error('Public client not initialized');
} }
const [account] = wallet ? await wallet.getAddresses() : [null]; const [account] = wallet ? await wallet.getAddresses() : [null];
@@ -50,7 +50,7 @@ const connectProvider = async (p: any): Promise<void> => {
const user = useUser(); const user = useUser();
const chain = user.network.value; const chain = user.network.value;
const [account] = await p!.request({ method: "eth_requestAccounts" }); const [account] = await p!.request({ method: 'eth_requestAccounts' });
walletClient = createWalletClient({ walletClient = createWalletClient({
account, account,

View File

@@ -1,10 +1,10 @@
import { getContract, getPublicClient, getWalletClient } from "./provider"; import { getContract, getPublicClient, getWalletClient } from './provider';
import { parseEther, toHex, ChainContract } from "viem"; import { parseEther, toHex, ChainContract } from 'viem';
import { mockTokenAbi } from "./abi"; import { mockTokenAbi } from './abi';
import { useUser } from "@/composables/useUser"; import { useUser } from '@/composables/useUser';
import { createParticipant } from "@/utils/bbPay"; import { createParticipant } from '@/utils/bbPay';
import type { Participant } from "@/utils/bbPay"; import type { Participant } from '@/utils/bbPay';
import type { Address } from "viem"; import type { Address } from 'viem';
const getP2PixAddress = (): Address => { const getP2PixAddress = (): Address => {
const user = useUser(); const user = useUser();
@@ -17,7 +17,7 @@ const approveTokens = async (participant: Participant): Promise<any> => {
const walletClient = getWalletClient(); const walletClient = getWalletClient();
if (!publicClient || !walletClient) { if (!publicClient || !walletClient) {
throw new Error("Clients not initialized"); throw new Error('Clients not initialized');
} }
user.setSeller(participant); user.setSeller(participant);
@@ -31,7 +31,7 @@ const approveTokens = async (participant: Participant): Promise<any> => {
const allowance = await publicClient.readContract({ const allowance = await publicClient.readContract({
address: tokenAddress, address: tokenAddress,
abi: mockTokenAbi, abi: mockTokenAbi,
functionName: "allowance", functionName: 'allowance',
args: [account, getP2PixAddress()], args: [account, getP2PixAddress()],
}); });
@@ -41,7 +41,7 @@ const approveTokens = async (participant: Participant): Promise<any> => {
const hash = await walletClient.writeContract({ const hash = await walletClient.writeContract({
address: tokenAddress, address: tokenAddress,
abi: mockTokenAbi, abi: mockTokenAbi,
functionName: "approve", functionName: 'approve',
args: [getP2PixAddress(), parseEther(participant.offer.toString())], args: [getP2PixAddress(), parseEther(participant.offer.toString())],
account, account,
chain, chain,
@@ -59,7 +59,7 @@ const addDeposit = async (): Promise<any> => {
const user = useUser(); const user = useUser();
if (!walletClient) { if (!walletClient) {
throw new Error("Wallet client not initialized"); throw new Error('Wallet client not initialized');
} }
const [account] = await walletClient.getAddresses(); const [account] = await walletClient.getAddresses();
@@ -67,16 +67,16 @@ const addDeposit = async (): Promise<any> => {
const sellerId = await createParticipant(user.seller.value); const sellerId = await createParticipant(user.seller.value);
user.setSellerId(sellerId.id); user.setSellerId(sellerId.id);
if (!sellerId.id) { if (!sellerId.id) {
throw new Error("Failed to create participant"); throw new Error('Failed to create participant');
} }
const chain = user.network.value; const chain = user.network.value;
const hash = await walletClient.writeContract({ const hash = await walletClient.writeContract({
address, address,
abi, abi,
functionName: "deposit", functionName: 'deposit',
args: [ args: [
user.network.value.id + "-" + sellerId.id, user.network.value.id + '-' + sellerId.id,
toHex("", { size: 32 }), toHex('', { size: 32 }),
user.network.value.tokens[user.selectedToken.value].address, user.network.value.tokens[user.selectedToken.value].address,
parseEther(user.seller.value.offer.toString()), parseEther(user.seller.value.offer.toString()),
true, true,

View File

@@ -1,14 +1,14 @@
import { formatEther, type Address } from "viem"; import { formatEther, type Address } from 'viem';
import { useUser } from "@/composables/useUser"; import { useUser } from '@/composables/useUser';
import { getPublicClient, getWalletClient, getContract } from "./provider"; import { getPublicClient, getWalletClient, getContract } from './provider';
import { getValidDeposits, getUnreleasedLockById } from "./events"; import { getValidDeposits, getUnreleasedLockById } from './events';
import type { ValidDeposit } from "@/model/ValidDeposit"; import type { ValidDeposit } from '@/model/ValidDeposit';
import type { WalletTransaction } from "@/model/WalletTransaction"; import type { WalletTransaction } from '@/model/WalletTransaction';
import type { UnreleasedLock } from "@/model/UnreleasedLock"; import type { UnreleasedLock } from '@/model/UnreleasedLock';
import { LockStatus } from "@/model/LockStatus"; import { LockStatus } from '@/model/LockStatus';
export const updateWalletStatus = async (): Promise<void> => { export const updateWalletStatus = async (): Promise<void> => {
const user = useUser(); const user = useUser();
@@ -17,7 +17,7 @@ export const updateWalletStatus = async (): Promise<void> => {
const walletClient = getWalletClient(); const walletClient = getWalletClient();
if (!publicClient || !walletClient) { if (!publicClient || !walletClient) {
console.error("Client not initialized"); console.error('Client not initialized');
return; return;
} }
@@ -53,7 +53,7 @@ const getLockStatus = async (id: bigint): Promise<LockStatus> => {
const [sortedIDs, status] = await client.readContract({ const [sortedIDs, status] = await client.readContract({
address, address,
abi, abi,
functionName: "getLocksStatus", functionName: 'getLocksStatus',
args: [[id]], args: [[id]],
}); });
return status[0]; return status[0];
@@ -109,9 +109,9 @@ export const listAllTransactionByWalletAddress = async (
}; };
const response = await fetch(network.subgraphUrls[0], { const response = await fetch(network.subgraphUrls[0], {
method: "POST", method: 'POST',
headers: { headers: {
"Content-Type": "application/json", 'Content-Type': 'application/json',
}, },
body: JSON.stringify(subgraphQuery), body: JSON.stringify(subgraphQuery),
}); });
@@ -129,8 +129,8 @@ export const listAllTransactionByWalletAddress = async (
blockTimestamp: parseInt(deposit.blockTimestamp), blockTimestamp: parseInt(deposit.blockTimestamp),
amount: parseFloat(formatEther(BigInt(deposit.amount))), amount: parseFloat(formatEther(BigInt(deposit.amount))),
seller: deposit.seller, seller: deposit.seller,
buyer: "", buyer: '',
event: "DepositAdded", event: 'DepositAdded',
lockStatus: undefined, lockStatus: undefined,
transactionHash: deposit.transactionHash, transactionHash: deposit.transactionHash,
}); });
@@ -150,7 +150,7 @@ export const listAllTransactionByWalletAddress = async (
amount: parseFloat(formatEther(BigInt(lock.amount))), amount: parseFloat(formatEther(BigInt(lock.amount))),
seller: lock.seller, seller: lock.seller,
buyer: lock.buyer, buyer: lock.buyer,
event: "LockAdded", event: 'LockAdded',
lockStatus: lockStatus, lockStatus: lockStatus,
transactionHash: lock.transactionHash, transactionHash: lock.transactionHash,
transactionID: lock.lockID.toString(), transactionID: lock.lockID.toString(),
@@ -166,9 +166,9 @@ export const listAllTransactionByWalletAddress = async (
blockNumber: parseInt(release.blockNumber), blockNumber: parseInt(release.blockNumber),
blockTimestamp: parseInt(release.blockTimestamp), blockTimestamp: parseInt(release.blockTimestamp),
amount: -1, // Amount not available in this event amount: -1, // Amount not available in this event
seller: "", seller: '',
buyer: release.buyer, buyer: release.buyer,
event: "LockReleased", event: 'LockReleased',
lockStatus: undefined, lockStatus: undefined,
transactionHash: release.transactionHash, transactionHash: release.transactionHash,
transactionID: release.lockId.toString(), transactionID: release.lockId.toString(),
@@ -185,8 +185,8 @@ export const listAllTransactionByWalletAddress = async (
blockTimestamp: parseInt(withdrawal.blockTimestamp), blockTimestamp: parseInt(withdrawal.blockTimestamp),
amount: parseFloat(formatEther(BigInt(withdrawal.amount))), amount: parseFloat(formatEther(BigInt(withdrawal.amount))),
seller: withdrawal.seller, seller: withdrawal.seller,
buyer: "", buyer: '',
event: "DepositWithdrawn", event: 'DepositWithdrawn',
lockStatus: undefined, lockStatus: undefined,
transactionHash: withdrawal.transactionHash, transactionHash: withdrawal.transactionHash,
}); });
@@ -222,9 +222,9 @@ export const listReleaseTransactionByWalletAddress = async (
// Fetch data from subgraph // Fetch data from subgraph
const response = await fetch(network.subgraphUrls[0], { const response = await fetch(network.subgraphUrls[0], {
method: "POST", method: 'POST',
headers: { headers: {
"Content-Type": "application/json", 'Content-Type': 'application/json',
}, },
body: JSON.stringify(subgraphQuery), body: JSON.stringify(subgraphQuery),
}); });
@@ -245,7 +245,7 @@ export const listReleaseTransactionByWalletAddress = async (
try { try {
// Create a structure similar to the decoded event log // Create a structure similar to the decoded event log
return { return {
eventName: "LockReleased", eventName: 'LockReleased',
args: { args: {
buyer: release.buyer, buyer: release.buyer,
lockID: BigInt(release.lockId), lockID: BigInt(release.lockId),
@@ -256,7 +256,7 @@ export const listReleaseTransactionByWalletAddress = async (
transactionHash: release.transactionHash, transactionHash: release.transactionHash,
}; };
} catch (error) { } catch (error) {
console.error("Error processing subgraph data", error); console.error('Error processing subgraph data', error);
return null; return null;
} }
}) })
@@ -287,9 +287,9 @@ const listLockTransactionByWalletAddress = async (walletAddress: Address) => {
try { try {
// Fetch data from subgraph // Fetch data from subgraph
const response = await fetch(network.subgraphUrls[0], { const response = await fetch(network.subgraphUrls[0], {
method: "POST", method: 'POST',
headers: { headers: {
"Content-Type": "application/json", 'Content-Type': 'application/json',
}, },
body: JSON.stringify(subgraphQuery), body: JSON.stringify(subgraphQuery),
}); });
@@ -309,7 +309,7 @@ const listLockTransactionByWalletAddress = async (walletAddress: Address) => {
try { try {
// Create a structure similar to the decoded event log // Create a structure similar to the decoded event log
return { return {
eventName: "LockAdded", eventName: 'LockAdded',
args: { args: {
buyer: lock.buyer, buyer: lock.buyer,
lockID: BigInt(lock.lockID), lockID: BigInt(lock.lockID),
@@ -322,13 +322,13 @@ const listLockTransactionByWalletAddress = async (walletAddress: Address) => {
transactionHash: lock.transactionHash, transactionHash: lock.transactionHash,
}; };
} catch (error) { } catch (error) {
console.error("Error processing subgraph data", error); console.error('Error processing subgraph data', error);
return null; return null;
} }
}) })
.filter((decoded: any) => decoded !== null); .filter((decoded: any) => decoded !== null);
} catch (error) { } catch (error) {
console.error("Error fetching from subgraph:", error); console.error('Error fetching from subgraph:', error);
} }
}; };
@@ -356,9 +356,9 @@ const listLockTransactionBySellerAddress = async (sellerAddress: Address) => {
try { try {
// Fetch data from subgraph // Fetch data from subgraph
const response = await fetch(network.subgraphUrls[0], { const response = await fetch(network.subgraphUrls[0], {
method: "POST", method: 'POST',
headers: { headers: {
"Content-Type": "application/json", 'Content-Type': 'application/json',
}, },
body: JSON.stringify(subgraphQuery), body: JSON.stringify(subgraphQuery),
}); });
@@ -378,7 +378,7 @@ const listLockTransactionBySellerAddress = async (sellerAddress: Address) => {
try { try {
// Create a structure similar to the decoded event log // Create a structure similar to the decoded event log
return { return {
eventName: "LockAdded", eventName: 'LockAdded',
args: { args: {
buyer: lock.buyer, buyer: lock.buyer,
lockID: BigInt(lock.lockID), lockID: BigInt(lock.lockID),
@@ -391,13 +391,13 @@ const listLockTransactionBySellerAddress = async (sellerAddress: Address) => {
transactionHash: lock.transactionHash, transactionHash: lock.transactionHash,
}; };
} catch (error) { } catch (error) {
console.error("Error processing subgraph data", error); console.error('Error processing subgraph data', error);
return null; return null;
} }
}) })
.filter((decoded: any) => decoded !== null); .filter((decoded: any) => decoded !== null);
} catch (error) { } catch (error) {
console.error("Error fetching from subgraph:", error); console.error('Error fetching from subgraph:', error);
return []; return [];
} }
}; };
@@ -415,7 +415,7 @@ export const checkUnreleasedLock = async (
const [sortedIDs, status] = await client.readContract({ const [sortedIDs, status] = await client.readContract({
address, address,
abi, abi,
functionName: "getLocksStatus", functionName: 'getLocksStatus',
args: [lockIds], args: [lockIds],
}); });
@@ -440,7 +440,7 @@ export const getActiveLockAmount = async (
const [sortedIDs, status] = await client.readContract({ const [sortedIDs, status] = await client.readContract({
address, address,
abi, abi,
functionName: "getLocksStatus", functionName: 'getLocksStatus',
args: [lockIds], args: [lockIds],
}); });
@@ -448,7 +448,7 @@ export const getActiveLockAmount = async (
client.readContract({ client.readContract({
address: address, address: address,
abi, abi,
functionName: "mapLocks", functionName: 'mapLocks',
args: [BigInt(id)], args: [BigInt(id)],
}), }),
); );

View File

@@ -1,16 +1,16 @@
<script setup lang="ts"> <script setup lang="ts">
import { withdrawDeposit } from "@/blockchain/buyerMethods"; import { withdrawDeposit } from '@/blockchain/buyerMethods';
import { import {
getActiveLockAmount, getActiveLockAmount,
listAllTransactionByWalletAddress, listAllTransactionByWalletAddress,
listValidDepositTransactionsByWalletAddress, listValidDepositTransactionsByWalletAddress,
} from "@/blockchain/wallet"; } from '@/blockchain/wallet';
import CustomButton from "@/components/ui/CustomButton.vue"; import CustomButton from '@/components/ui/CustomButton.vue';
import type { ValidDeposit } from "@/model/ValidDeposit"; import type { ValidDeposit } from '@/model/ValidDeposit';
import type { WalletTransaction } from "@/model/WalletTransaction"; import type { WalletTransaction } from '@/model/WalletTransaction';
import { useUser } from "@/composables/useUser"; import { useUser } from '@/composables/useUser';
import { onMounted, ref, watch } from "vue"; import { onMounted, ref, watch } from 'vue';
import ListingComponent from "@/components/ListingComponent/ListingComponent.vue"; import ListingComponent from '@/components/ListingComponent/ListingComponent.vue';
// props // props
const props = defineProps<{ const props = defineProps<{
@@ -58,17 +58,17 @@ const callWithdraw = async (amount: string) => {
user.network.value.tokens[user.selectedToken.value].address, user.network.value.tokens[user.selectedToken.value].address,
); );
if (withdraw) { if (withdraw) {
console.log("Saque realizado!"); console.log('Saque realizado!');
await getWalletTransactions(); await getWalletTransactions();
} else { } else {
console.log("Não foi possível realizar o saque!"); console.log('Não foi possível realizar o saque!');
} }
user.setLoadingWalletTransactions(false); user.setLoadingWalletTransactions(false);
} }
}; };
// Emits // Emits
const emit = defineEmits(["makeAnotherTransaction"]); const emit = defineEmits(['makeAnotherTransaction']);
// observer // observer
watch(props, async (): Promise<void> => { watch(props, async (): Promise<void> => {
@@ -153,8 +153,8 @@ p {
@apply font-medium text-base text-gray-900; @apply font-medium text-base text-gray-900;
} }
input[type="number"]::-webkit-inner-spin-button, input[type='number']::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button { input[type='number']::-webkit-outer-spin-button {
-webkit-appearance: none; -webkit-appearance: none;
} }
</style> </style>

View File

@@ -1,19 +1,19 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, watch, computed } from "vue"; import { ref, watch, computed } from 'vue';
import { useUser } from "@/composables/useUser"; import { useUser } from '@/composables/useUser';
import SpinnerComponent from "@/components/ui/SpinnerComponent.vue"; import SpinnerComponent from '@/components/ui/SpinnerComponent.vue';
import CustomButton from "@/components/ui/CustomButton.vue"; import CustomButton from '@/components/ui/CustomButton.vue';
import { debounce } from "@/utils/debounce"; import { debounce } from '@/utils/debounce';
import { verifyNetworkLiquidity } from "@/utils/networkLiquidity"; import { verifyNetworkLiquidity } from '@/utils/networkLiquidity';
import type { ValidDeposit } from "@/model/ValidDeposit"; import type { ValidDeposit } from '@/model/ValidDeposit';
import { decimalCount } from "@/utils/decimalCount"; import { decimalCount } from '@/utils/decimalCount';
import { getTokenImage, getNetworkImage } from "@/utils/imagesPath"; import { getTokenImage, getNetworkImage } from '@/utils/imagesPath';
import { onClickOutside } from "@vueuse/core"; import { onClickOutside } from '@vueuse/core';
import { Networks } from "@/config/networks"; import { Networks } from '@/config/networks';
import { TokenEnum } from "@/model/NetworkEnum"; import { TokenEnum } from '@/model/NetworkEnum';
import { getContract } from "@/blockchain/provider"; import { getContract } from '@/blockchain/provider';
import { reputationAbi } from "@/blockchain/abi"; import { reputationAbi } from '@/blockchain/abi';
import { type Address } from "viem"; import { type Address } from 'viem';
// Store reference // Store reference
const user = useUser(); const user = useUser();
@@ -35,17 +35,17 @@ const tokenValue = ref<number>(0);
const enableConfirmButton = ref<boolean>(false); const enableConfirmButton = ref<boolean>(false);
const hasLiquidity = ref<boolean>(true); const hasLiquidity = ref<boolean>(true);
const validDecimals = ref<boolean>(true); const validDecimals = ref<boolean>(true);
const identification = ref<string>(""); const identification = ref<string>('');
const selectedDeposits = ref<ValidDeposit[]>(); const selectedDeposits = ref<ValidDeposit[]>();
const reputationLimit = ref<number | null>(null); const reputationLimit = ref<number | null>(null);
const exceedsReputationLimit = ref<boolean>(false); const exceedsReputationLimit = ref<boolean>(false);
import ChevronDown from "@/assets/chevronDown.svg"; import ChevronDown from '@/assets/chevronDown.svg';
import { useOnboard } from "@web3-onboard/vue"; import { useOnboard } from '@web3-onboard/vue';
import { getParticipantID } from "@/blockchain/events"; import { getParticipantID } from '@/blockchain/events';
// Emits // Emits
const emit = defineEmits(["tokenBuy"]); const emit = defineEmits(['tokenBuy']);
const castAddrToKey = (address: Address): bigint => { const castAddrToKey = (address: Address): bigint => {
return BigInt(address) << BigInt(12); return BigInt(address) << BigInt(12);
@@ -59,13 +59,13 @@ const getUserCredit = async (userAddress: Address): Promise<bigint> => {
const userCredit = await client.readContract({ const userCredit = await client.readContract({
address, address,
abi, abi,
functionName: "userRecord", functionName: 'userRecord',
args: [userKey], args: [userKey],
}); });
return userCredit as bigint; return userCredit as bigint;
} catch (error) { } catch (error) {
console.error("Error fetching user credit:", error); console.error('Error fetching user credit:', error);
return BigInt(0); return BigInt(0);
} }
}; };
@@ -77,12 +77,12 @@ const getReputationAddress = async (): Promise<Address | null> => {
const reputationAddr = await client.readContract({ const reputationAddr = await client.readContract({
address, address,
abi, abi,
functionName: "reputation", functionName: 'reputation',
}); });
return reputationAddr as Address; return reputationAddr as Address;
} catch (error) { } catch (error) {
console.error("Error fetching reputation address:", error); console.error('Error fetching reputation address:', error);
return null; return null;
} }
}; };
@@ -97,13 +97,13 @@ const getSpendLimit = async (userCredit: bigint): Promise<bigint> => {
const spendLimit = await client.readContract({ const spendLimit = await client.readContract({
address: reputationAddr, address: reputationAddr,
abi: reputationAbi, abi: reputationAbi,
functionName: "limiter", functionName: 'limiter',
args: [userCredit], args: [userCredit],
}); });
return spendLimit as bigint; return spendLimit as bigint;
} catch (error) { } catch (error) {
console.error("Error fetching spend limit:", error); console.error('Error fetching spend limit:', error);
return BigInt(0); return BigInt(0);
} }
}; };
@@ -130,7 +130,7 @@ const checkReputationLimit = async (inputValue: number): Promise<void> => {
exceedsReputationLimit.value = spendLimitNumber < inputValue; exceedsReputationLimit.value = spendLimitNumber < inputValue;
enableConfirmButton.value = !exceedsReputationLimit.value; enableConfirmButton.value = !exceedsReputationLimit.value;
} catch (error) { } catch (error) {
console.error("Error checking reputation limit:", error); console.error('Error checking reputation limit:', error);
reputationLimit.value = null; reputationLimit.value = null;
exceedsReputationLimit.value = false; exceedsReputationLimit.value = false;
} }
@@ -148,7 +148,7 @@ const emitConfirmButton = async (): Promise<void> => {
); );
if (!deposit) return; if (!deposit) return;
deposit.participantID = await getParticipantID(deposit.seller, deposit.token); deposit.participantID = await getParticipantID(deposit.seller, deposit.token);
emit("tokenBuy", deposit, tokenValue.value); emit('tokenBuy', deposit, tokenValue.value);
}; };
// Debounce methods // Debounce methods
@@ -440,12 +440,12 @@ const handleSubmit = async (e: Event): Promise<void> => {
@apply text-white text-center; @apply text-white text-center;
} }
input[type="number"] { input[type='number'] {
-moz-appearance: textfield; -moz-appearance: textfield;
} }
input[type="number"]::-webkit-inner-spin-button, input[type='number']::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button { input[type='number']::-webkit-outer-spin-button {
-webkit-appearance: none; -webkit-appearance: none;
} }

View File

@@ -1,12 +1,12 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted, onUnmounted } from "vue"; import { ref, onMounted, onUnmounted } from 'vue';
import CustomButton from "@/components/ui/CustomButton.vue"; import CustomButton from '@/components/ui/CustomButton.vue';
import CustomModal from "@/components/ui/CustomModal.vue"; import CustomModal from '@/components/ui/CustomModal.vue';
import SpinnerComponent from "@/components/ui/SpinnerComponent.vue"; import SpinnerComponent from '@/components/ui/SpinnerComponent.vue';
import { createSolicitation, getSolicitation, type Offer } from "@/utils/bbPay"; import { createSolicitation, getSolicitation, type Offer } from '@/utils/bbPay';
import { getParticipantID } from "@/blockchain/events"; import { getParticipantID } from '@/blockchain/events';
import { getUnreleasedLockById } from "@/blockchain/events"; import { getUnreleasedLockById } from '@/blockchain/events';
import QRCode from "qrcode"; import QRCode from 'qrcode';
// Props // Props
interface Props { interface Props {
@@ -15,11 +15,11 @@ interface Props {
const props = defineProps<Props>(); const props = defineProps<Props>();
const qrCode = ref<string>(""); const qrCode = ref<string>('');
const qrCodeSvg = ref<string>(""); const qrCodeSvg = ref<string>('');
const showWarnModal = ref<boolean>(true); const showWarnModal = ref<boolean>(true);
const pixTimestamp = ref<string>(""); const pixTimestamp = ref<string>('');
const releaseSignature = ref<string>(""); const releaseSignature = ref<string>('');
const solicitationData = ref<any>(null); const solicitationData = ref<any>(null);
const pollingInterval = ref<NodeJS.Timeout | null>(null); const pollingInterval = ref<NodeJS.Timeout | null>(null);
const copyFeedback = ref<boolean>(false); const copyFeedback = ref<boolean>(false);
@@ -29,22 +29,22 @@ const copyFeedbackTimeout = ref<NodeJS.Timeout | null>(null);
const generateQrCodeSvg = async (text: string) => { const generateQrCodeSvg = async (text: string) => {
try { try {
const svgString = await QRCode.toString(text, { const svgString = await QRCode.toString(text, {
type: "svg", type: 'svg',
width: 192, // 48 * 4 for better quality width: 192, // 48 * 4 for better quality
margin: 2, margin: 2,
color: { color: {
dark: "#000000", dark: '#000000',
light: "#FFFFFF", light: '#FFFFFF',
}, },
}); });
qrCodeSvg.value = svgString; qrCodeSvg.value = svgString;
} catch (error) { } catch (error) {
console.error("Error generating QR code SVG:", error); console.error('Error generating QR code SVG:', error);
} }
}; };
// Emits // Emits
const emit = defineEmits(["pixValidated"]); const emit = defineEmits(['pixValidated']);
// Function to check solicitation status // Function to check solicitation status
const checkSolicitationStatus = async () => { const checkSolicitationStatus = async () => {
@@ -67,7 +67,7 @@ const checkSolicitationStatus = async () => {
} }
} }
} catch (error) { } catch (error) {
console.error("Error checking solicitation status:", error); console.error('Error checking solicitation status:', error);
} }
}; };
@@ -100,7 +100,7 @@ const copyToClipboard = async () => {
copyFeedback.value = false; copyFeedback.value = false;
}, 2000); }, 2000);
} catch (error) { } catch (error) {
console.error("Error copying to clipboard:", error); console.error('Error copying to clipboard:', error);
} }
}; };
@@ -130,7 +130,7 @@ onMounted(async () => {
// Start polling for solicitation status // Start polling for solicitation status
startPolling(); startPolling();
} catch (error) { } catch (error) {
console.error("Error creating solicitation:", error); console.error('Error creating solicitation:', error);
} }
}); });
@@ -268,13 +268,13 @@ h2 {
@apply flex flex-col justify-center items-center px-8 py-6 gap-2 rounded-lg shadow-md shadow-gray-600 backdrop-blur-md mt-6 max-w-screen-sm; @apply flex flex-col justify-center items-center px-8 py-6 gap-2 rounded-lg shadow-md shadow-gray-600 backdrop-blur-md mt-6 max-w-screen-sm;
} }
input[type="number"] { input[type='number'] {
appearance: textfield; appearance: textfield;
-moz-appearance: textfield; -moz-appearance: textfield;
} }
input[type="number"]::-webkit-inner-spin-button, input[type='number']::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button { input[type='number']::-webkit-outer-spin-button {
-webkit-appearance: none; -webkit-appearance: none;
} }

View File

@@ -3,13 +3,13 @@ interface Props {
title: string; title: string;
value: string; value: string;
change?: string; change?: string;
changeType?: "positive" | "negative" | "neutral"; changeType?: 'positive' | 'negative' | 'neutral';
icon?: string; icon?: string;
loading?: boolean; loading?: boolean;
} }
const props = withDefaults(defineProps<Props>(), { const props = withDefaults(defineProps<Props>(), {
changeType: "neutral", changeType: 'neutral',
loading: false, loading: false,
}); });
</script> </script>

View File

@@ -1,9 +1,9 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref } from "vue"; import { ref } from 'vue';
interface Transaction { interface Transaction {
id: string; id: string;
type: "deposit" | "lock" | "release" | "return"; type: 'deposit' | 'lock' | 'release' | 'return';
timestamp: string; timestamp: string;
seller?: string; seller?: string;
buyer?: string | null; buyer?: string | null;
@@ -25,27 +25,27 @@ const copyFeedbackTimeout = ref<{ [key: string]: NodeJS.Timeout | null }>({});
const getTransactionTypeInfo = (type: string) => { const getTransactionTypeInfo = (type: string) => {
const typeMap = { const typeMap = {
deposit: { label: "Depósito", status: "completed" as const }, deposit: { label: 'Depósito', status: 'completed' as const },
lock: { label: "Bloqueio", status: "open" as const }, lock: { label: 'Bloqueio', status: 'open' as const },
release: { label: "Liberação", status: "completed" as const }, release: { label: 'Liberação', status: 'completed' as const },
return: { label: "Retorno", status: "expired" as const }, return: { label: 'Retorno', status: 'expired' as const },
}; };
return ( return (
typeMap[type as keyof typeof typeMap] || { typeMap[type as keyof typeof typeMap] || {
label: type, label: type,
status: "pending" as const, status: 'pending' as const,
} }
); );
}; };
const getTransactionTypeColor = (type: string) => { const getTransactionTypeColor = (type: string) => {
const colorMap = { const colorMap = {
deposit: "text-emerald-600", deposit: 'text-emerald-600',
lock: "text-amber-600", lock: 'text-amber-600',
release: "text-emerald-600", release: 'text-emerald-600',
return: "text-gray-600", return: 'text-gray-600',
}; };
return colorMap[type as keyof typeof colorMap] || "text-gray-600"; return colorMap[type as keyof typeof colorMap] || 'text-gray-600';
}; };
const formatAddress = (address: string) => { const formatAddress = (address: string) => {
@@ -79,7 +79,7 @@ const copyToClipboard = async (address: string, key: string) => {
copyFeedback.value[key] = false; copyFeedback.value[key] = false;
}, 2000); }, 2000);
} catch (error) { } catch (error) {
console.error("Error copying to clipboard:", error); console.error('Error copying to clipboard:', error);
} }
}; };
</script> </script>

View File

@@ -1,11 +1,11 @@
<script setup lang="ts"> <script setup lang="ts">
import type { ValidDeposit } from "@/model/ValidDeposit"; import type { ValidDeposit } from '@/model/ValidDeposit';
import { ref, watch, onMounted, computed } from "vue"; import { ref, watch, onMounted, computed } from 'vue';
import { debounce } from "@/utils/debounce"; import { debounce } from '@/utils/debounce';
import { decimalCount } from "@/utils/decimalCount"; import { decimalCount } from '@/utils/decimalCount';
import { useFloating, arrow, offset, flip, shift } from "@floating-ui/vue"; import { useFloating, arrow, offset, flip, shift } from '@floating-ui/vue';
import IconButton from "../ui/IconButton.vue"; import IconButton from '../ui/IconButton.vue';
import withdrawIcon from "@/assets/withdraw.svg?url"; import withdrawIcon from '@/assets/withdraw.svg?url';
const props = defineProps<{ const props = defineProps<{
validDeposits: ValidDeposit[]; validDeposits: ValidDeposit[];
@@ -17,7 +17,7 @@ const emit = defineEmits<{
withdraw: [amount: string]; withdraw: [amount: string];
}>(); }>();
const withdrawAmount = ref<string>(""); const withdrawAmount = ref<string>('');
const isCollapsibleOpen = ref<boolean>(false); const isCollapsibleOpen = ref<boolean>(false);
const validDecimals = ref<boolean>(true); const validDecimals = ref<boolean>(true);
const validWithdrawAmount = ref<boolean>(true); const validWithdrawAmount = ref<boolean>(true);
@@ -58,9 +58,9 @@ const handleInputEvent = (event: any): void => {
const callWithdraw = () => { const callWithdraw = () => {
if (enableConfirmButton.value && withdrawAmount.value) { if (enableConfirmButton.value && withdrawAmount.value) {
emit("withdraw", withdrawAmount.value); emit('withdraw', withdrawAmount.value);
// Reset form after withdraw // Reset form after withdraw
withdrawAmount.value = ""; withdrawAmount.value = '';
isCollapsibleOpen.value = false; isCollapsibleOpen.value = false;
} }
}; };
@@ -71,7 +71,7 @@ const openWithdrawForm = () => {
const cancelWithdraw = () => { const cancelWithdraw = () => {
isCollapsibleOpen.value = false; isCollapsibleOpen.value = false;
withdrawAmount.value = ""; withdrawAmount.value = '';
validDecimals.value = true; validDecimals.value = true;
validWithdrawAmount.value = true; validWithdrawAmount.value = true;
enableConfirmButton.value = false; enableConfirmButton.value = false;
@@ -79,7 +79,7 @@ const cancelWithdraw = () => {
onMounted(() => { onMounted(() => {
useFloating(reference, floating, { useFloating(reference, floating, {
placement: "right", placement: 'right',
middleware: [ middleware: [
offset(10), offset(10),
flip(), flip(),
@@ -194,13 +194,13 @@ p {
@apply bg-white text-gray-900 font-medium text-xs md:text-base px-3 py-2 rounded border-2 border-emerald-500 left-5 top-[-3rem]; @apply bg-white text-gray-900 font-medium text-xs md:text-base px-3 py-2 rounded border-2 border-emerald-500 left-5 top-[-3rem];
} }
input[type="number"] { input[type='number'] {
appearance: textfield; appearance: textfield;
-moz-appearance: textfield; -moz-appearance: textfield;
} }
input[type="number"]::-webkit-inner-spin-button, input[type='number']::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button { input[type='number']::-webkit-outer-spin-button {
-webkit-appearance: none; -webkit-appearance: none;
} }

View File

@@ -1,11 +1,11 @@
<script setup lang="ts"> <script setup lang="ts">
import type { ValidDeposit } from "@/model/ValidDeposit"; import type { ValidDeposit } from '@/model/ValidDeposit';
import type { WalletTransaction } from "@/model/WalletTransaction"; import type { WalletTransaction } from '@/model/WalletTransaction';
import { useUser } from "@/composables/useUser"; import { useUser } from '@/composables/useUser';
import { ref, watch } from "vue"; import { ref, watch } from 'vue';
import SpinnerComponent from "../ui/SpinnerComponent.vue"; import SpinnerComponent from '../ui/SpinnerComponent.vue';
import BalanceCard from "./BalanceCard.vue"; import BalanceCard from './BalanceCard.vue';
import TransactionCard from "./TransactionCard.vue"; import TransactionCard from './TransactionCard.vue';
const user = useUser(); const user = useUser();
@@ -16,14 +16,14 @@ const props = defineProps<{
activeLockAmount: number; activeLockAmount: number;
}>(); }>();
const emit = defineEmits(["depositWithdrawn"]); const emit = defineEmits(['depositWithdrawn']);
const { loadingWalletTransactions } = user; const { loadingWalletTransactions } = user;
const itemsToShow = ref<WalletTransaction[]>([]); const itemsToShow = ref<WalletTransaction[]>([]);
const callWithdraw = (amount: string) => { const callWithdraw = (amount: string) => {
emit("depositWithdrawn", amount); emit('depositWithdrawn', amount);
}; };
const showInitialItems = (): void => { const showInitialItems = (): void => {
@@ -33,7 +33,7 @@ const showInitialItems = (): void => {
const openEtherscanUrl = (transactionHash: string): void => { const openEtherscanUrl = (transactionHash: string): void => {
const networkUrl = user.network.value.blockExplorers?.default.url; const networkUrl = user.network.value.blockExplorers?.default.url;
const url = `https://${networkUrl}/tx/${transactionHash}`; const url = `https://${networkUrl}/tx/${transactionHash}`;
window.open(url, "_blank"); window.open(url, '_blank');
}; };
const loadMore = (): void => { const loadMore = (): void => {

View File

@@ -1,9 +1,9 @@
<script setup lang="ts"> <script setup lang="ts">
import type { WalletTransaction } from "@/model/WalletTransaction"; import type { WalletTransaction } from '@/model/WalletTransaction';
import { TokenEnum } from "@/model/NetworkEnum"; import { TokenEnum } from '@/model/NetworkEnum';
import { computed } from "vue"; import { computed } from 'vue';
import StatusBadge, { type StatusType } from "../ui/StatusBadge.vue"; import StatusBadge, { type StatusType } from '../ui/StatusBadge.vue';
import { Networks } from "@/config/networks"; import { Networks } from '@/config/networks';
const props = defineProps<{ const props = defineProps<{
transaction: WalletTransaction; transaction: WalletTransaction;
@@ -16,16 +16,16 @@ const emit = defineEmits<{
}>(); }>();
const eventName = computed(() => { const eventName = computed(() => {
if (!props.transaction.event) return "Desconhecido"; if (!props.transaction.event) return 'Desconhecido';
const possibleEventName: { [key: string]: string } = { const possibleEventName: { [key: string]: string } = {
DepositAdded: "Oferta", DepositAdded: 'Oferta',
LockAdded: "Reserva", LockAdded: 'Reserva',
LockReleased: "Compra", LockReleased: 'Compra',
DepositWithdrawn: "Retirada", DepositWithdrawn: 'Retirada',
}; };
return possibleEventName[props.transaction.event] || "Desconhecido"; return possibleEventName[props.transaction.event] || 'Desconhecido';
}); });
const explorerName = computed(() => { const explorerName = computed(() => {
@@ -34,46 +34,46 @@ const explorerName = computed(() => {
}); });
const statusType = computed((): StatusType => { const statusType = computed((): StatusType => {
if (eventName.value === "Reserva") { if (eventName.value === 'Reserva') {
switch (props.transaction.lockStatus) { switch (props.transaction.lockStatus) {
case 1: case 1:
return "open"; return 'open';
case 2: case 2:
return "expired"; return 'expired';
case 3: case 3:
return "completed"; return 'completed';
default: default:
return "completed"; return 'completed';
} }
} }
return "completed"; return 'completed';
}); });
const showExplorerLink = computed(() => { const showExplorerLink = computed(() => {
return eventName.value !== "Reserva" || props.transaction.lockStatus !== 1; return eventName.value !== 'Reserva' || props.transaction.lockStatus !== 1;
}); });
const showContinueButton = computed(() => { const showContinueButton = computed(() => {
return eventName.value === "Reserva" && props.transaction.lockStatus === 1; return eventName.value === 'Reserva' && props.transaction.lockStatus === 1;
}); });
const formattedDate = computed(() => { const formattedDate = computed(() => {
if (!props.transaction.blockTimestamp) return ""; if (!props.transaction.blockTimestamp) return '';
const timestamp = props.transaction.blockTimestamp; const timestamp = props.transaction.blockTimestamp;
const date = new Date(timestamp * 1000); const date = new Date(timestamp * 1000);
const day = String(date.getDate()).padStart(2, "0"); const day = String(date.getDate()).padStart(2, '0');
const month = String(date.getMonth() + 1).padStart(2, "0"); const month = String(date.getMonth() + 1).padStart(2, '0');
const year = date.getFullYear(); const year = date.getFullYear();
const hours = String(date.getHours()).padStart(2, "0"); const hours = String(date.getHours()).padStart(2, '0');
const minutes = String(date.getMinutes()).padStart(2, "0"); const minutes = String(date.getMinutes()).padStart(2, '0');
return `${day}/${month}/${year} ${hours}:${minutes}`; return `${day}/${month}/${year} ${hours}:${minutes}`;
}); });
const handleExplorerClick = () => { const handleExplorerClick = () => {
emit("openExplorer", props.transaction.transactionHash); emit('openExplorer', props.transaction.transactionHash);
}; };
</script> </script>

View File

@@ -1,16 +1,16 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, computed } from "vue"; import { ref, computed } from 'vue';
import { useUser } from "@/composables/useUser"; import { useUser } from '@/composables/useUser';
import CustomButton from "@/components/ui/CustomButton.vue"; import CustomButton from '@/components/ui/CustomButton.vue';
import { postProcessKey } from "@/utils/pixKeyFormat"; import { postProcessKey } from '@/utils/pixKeyFormat';
import { TokenEnum } from "@/model/NetworkEnum"; import { TokenEnum } from '@/model/NetworkEnum';
import { getTokenImage } from "@/utils/imagesPath"; import { getTokenImage } from '@/utils/imagesPath';
import { useOnboard } from "@web3-onboard/vue"; import { useOnboard } from '@web3-onboard/vue';
import ChevronDown from "@/assets/chevron.svg"; import ChevronDown from '@/assets/chevron.svg';
// Import the bank list // Import the bank list
import bankList from "@/utils/files/isbpList.json"; import bankList from '@/utils/files/isbpList.json';
import type { Participant } from "@/utils/bbPay"; import type { Participant } from '@/utils/bbPay';
// Define Bank interface // Define Bank interface
interface Bank { interface Bank {
@@ -26,17 +26,17 @@ const formRef = ref<HTMLFormElement | null>(null);
const user = useUser(); const user = useUser();
const { walletAddress, selectedToken } = user; const { walletAddress, selectedToken } = user;
const offer = ref<string>(""); const offer = ref<string>('');
const identification = ref<string>(""); const identification = ref<string>('');
const account = ref<string>(""); const account = ref<string>('');
const branch = ref<string>(""); const branch = ref<string>('');
const accountType = ref<string>(""); const accountType = ref<string>('');
const selectTokenToggle = ref<boolean>(false); const selectTokenToggle = ref<boolean>(false);
const savingsVariation = ref<string>(""); const savingsVariation = ref<string>('');
const errors = ref<{ [key: string]: string }>({}); const errors = ref<{ [key: string]: string }>({});
// Bank selection // Bank selection
const bankSearchQuery = ref<string>(""); const bankSearchQuery = ref<string>('');
const showBankList = ref<boolean>(false); const showBankList = ref<boolean>(false);
const selectedBank = ref<Bank | null>(null); const selectedBank = ref<Bank | null>(null);
@@ -56,7 +56,7 @@ const handleBankSelect = (bank: Bank) => {
}; };
// Emits // Emits
const emit = defineEmits(["approveTokens"]); const emit = defineEmits(['approveTokens']);
// Methods // Methods
const connectAccount = async (): Promise<void> => { const connectAccount = async (): Promise<void> => {
@@ -77,10 +77,10 @@ const handleSubmit = (e: Event): void => {
accountType: accountType.value, accountType: accountType.value,
account: account.value, account: account.value,
branch: branch.value, branch: branch.value,
savingsVariation: savingsVariation.value || "", savingsVariation: savingsVariation.value || '',
}; };
emit("approveTokens", data); emit('approveTokens', data);
}; };
// Token selection // Token selection
@@ -328,13 +328,13 @@ const handleSelectedToken = (token: TokenEnum): void => {
@apply text-white text-center; @apply text-white text-center;
} }
input[type="number"] { input[type='number'] {
-moz-appearance: textfield; -moz-appearance: textfield;
appearance: textfield; appearance: textfield;
} }
input[type="number"]::-webkit-inner-spin-button, input[type='number']::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button { input[type='number']::-webkit-outer-spin-button {
-webkit-appearance: none; -webkit-appearance: none;
} }

View File

@@ -1,11 +1,11 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref } from "vue"; import { ref } from 'vue';
import { useUser } from "@/composables/useUser"; import { useUser } from '@/composables/useUser';
import CustomButton from "@/components/ui/CustomButton.vue"; import CustomButton from '@/components/ui/CustomButton.vue';
import { debounce } from "@/utils/debounce"; import { debounce } from '@/utils/debounce';
import { decimalCount } from "@/utils/decimalCount"; import { decimalCount } from '@/utils/decimalCount';
import { getTokenImage } from "@/utils/imagesPath"; import { getTokenImage } from '@/utils/imagesPath';
import { useOnboard } from "@web3-onboard/vue"; import { useOnboard } from '@web3-onboard/vue';
// Store // Store
const user = useUser(); const user = useUser();
@@ -18,7 +18,7 @@ const hasLiquidity = ref<boolean>(true);
const validDecimals = ref<boolean>(true); const validDecimals = ref<boolean>(true);
// Emits // Emits
const emit = defineEmits(["tokenBuy"]); const emit = defineEmits(['tokenBuy']);
// Blockchain methods // Blockchain methods
const connectAccount = async (): Promise<void> => { const connectAccount = async (): Promise<void> => {
@@ -152,8 +152,8 @@ const handleInputEvent = (event: any): void => {
@apply text-white text-center; @apply text-white text-center;
} }
input[type="number"]::-webkit-inner-spin-button, input[type='number']::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button { input[type='number']::-webkit-outer-spin-button {
-webkit-appearance: none; -webkit-appearance: none;
} }
</style> </style>

View File

@@ -1,8 +1,8 @@
<script setup lang="ts"> <script setup lang="ts">
import CustomButton from "@/components/ui/CustomButton.vue"; import CustomButton from '@/components/ui/CustomButton.vue';
// Emits // Emits
const emit = defineEmits(["sendNetwork"]); const emit = defineEmits(['sendNetwork']);
// props and store references // props and store references
const props = defineProps({ const props = defineProps({
@@ -80,8 +80,8 @@ p {
@apply font-medium text-base; @apply font-medium text-base;
} }
input[type="number"]::-webkit-inner-spin-button, input[type='number']::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button { input[type='number']::-webkit-outer-spin-button {
-webkit-appearance: none; -webkit-appearance: none;
} }
</style> </style>

View File

@@ -1,18 +1,18 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, watch } from "vue"; import { ref, watch } from 'vue';
import { useUser } from "@/composables/useUser"; import { useUser } from '@/composables/useUser';
import { onClickOutside } from "@vueuse/core"; import { onClickOutside } from '@vueuse/core';
import { getNetworkImage } from "@/utils/imagesPath"; import { getNetworkImage } from '@/utils/imagesPath';
import { Networks } from "@/config/networks"; import { Networks } from '@/config/networks';
import { useOnboard } from "@web3-onboard/vue"; import { useOnboard } from '@web3-onboard/vue';
import ChevronDown from "@/assets/chevronDown.svg"; import ChevronDown from '@/assets/chevronDown.svg';
import TwitterIcon from "@/assets/twitterIcon.svg"; import TwitterIcon from '@/assets/twitterIcon.svg';
import LinkedinIcon from "@/assets/linkedinIcon.svg"; import LinkedinIcon from '@/assets/linkedinIcon.svg';
import GithubIcon from "@/assets/githubIcon.svg"; import GithubIcon from '@/assets/githubIcon.svg';
import { connectProvider } from "@/blockchain/provider"; import { connectProvider } from '@/blockchain/provider';
import { DEFAULT_NETWORK } from "@/config/networks"; import { DEFAULT_NETWORK } from '@/config/networks';
import type { NetworkConfig } from "@/model/NetworkEnum"; import type { NetworkConfig } from '@/model/NetworkEnum';
interface MenuOption { interface MenuOption {
label: string; label: string;
@@ -47,7 +47,7 @@ const connnectWallet = async (): Promise<void> => {
watch(connectedWallet, async (newVal: any) => { watch(connectedWallet, async (newVal: any) => {
connectProvider(newVal.provider); connectProvider(newVal.provider);
const addresses = await newVal.provider.request({ method: "eth_accounts" }); const addresses = await newVal.provider.request({ method: 'eth_accounts' });
user.setWalletAddress(addresses.shift()); user.setWalletAddress(addresses.shift());
}); });
@@ -58,7 +58,7 @@ watch(connectedChain, (newVal: any) => {
!Object.values(Networks).some((network) => network.id === Number(newVal.id)) !Object.values(Networks).some((network) => network.id === Number(newVal.id))
) { ) {
console.log( console.log(
"Invalid or unsupported network detected, defaulting to Sepolia", 'Invalid or unsupported network detected, defaulting to Sepolia',
); );
user.setNetwork(DEFAULT_NETWORK); user.setNetwork(DEFAULT_NETWORK);
return; return;
@@ -67,7 +67,7 @@ watch(connectedChain, (newVal: any) => {
}); });
const formatWalletAddress = (): string => { const formatWalletAddress = (): string => {
if (!walletAddress.value) throw new Error("Wallet not connected"); if (!walletAddress.value) throw new Error('Wallet not connected');
const walletAddressLength = walletAddress.value.length; const walletAddressLength = walletAddress.value.length;
const initialText = walletAddress.value.substring(0, 5); const initialText = walletAddress.value.substring(0, 5);
const finalText = walletAddress.value.substring( const finalText = walletAddress.value.substring(
@@ -79,7 +79,7 @@ const formatWalletAddress = (): string => {
const disconnectUser = async (): Promise<void> => { const disconnectUser = async (): Promise<void> => {
user.setWalletAddress(null); user.setWalletAddress(null);
await disconnectWallet({ label: connectedWallet.value?.label || "" }); await disconnectWallet({ label: connectedWallet.value?.label || '' });
closeMenu(); closeMenu();
}; };
@@ -100,7 +100,7 @@ const networkChange = async (network: NetworkConfig): Promise<void> => {
}); });
user.setNetwork(network); user.setNetwork(network);
} catch (error) { } catch (error) {
console.log("Error changing network", error); console.log('Error changing network', error);
} }
} else { } else {
// If no wallet connected, just update the network state // If no wallet connected, just update the network state
@@ -122,20 +122,20 @@ onClickOutside(infoMenuRef, () => {
const infoMenuOptions: MenuOption[] = [ const infoMenuOptions: MenuOption[] = [
{ {
label: "Explorar Transações", label: 'Explorar Transações',
route: "/explore", route: '/explore',
showInDesktop: true, showInDesktop: true,
showInMobile: false, showInMobile: false,
}, },
{ {
label: "Perguntas frequentes", label: 'Perguntas frequentes',
route: "/faq", route: '/faq',
showInDesktop: true, showInDesktop: true,
showInMobile: false, showInMobile: false,
}, },
{ {
label: "Versões", label: 'Versões',
route: "/versions", route: '/versions',
showInDesktop: true, showInDesktop: true,
showInMobile: false, showInMobile: false,
}, },
@@ -143,40 +143,40 @@ const infoMenuOptions: MenuOption[] = [
const walletMenuOptions: MenuOption[] = [ const walletMenuOptions: MenuOption[] = [
{ {
label: "Quero vender", label: 'Quero vender',
isDynamic: true, isDynamic: true,
dynamicLabel: () => (sellerView.value ? "Quero comprar" : "Quero vender"), dynamicLabel: () => (sellerView.value ? 'Quero comprar' : 'Quero vender'),
dynamicRoute: () => (sellerView.value ? "/" : "/seller"), dynamicRoute: () => (sellerView.value ? '/' : '/seller'),
showInDesktop: false, showInDesktop: false,
showInMobile: true, showInMobile: true,
}, },
{ {
label: "Explorar Transações", label: 'Explorar Transações',
route: "/explore", route: '/explore',
showInDesktop: false, showInDesktop: false,
showInMobile: true, showInMobile: true,
}, },
{ {
label: "Gerenciar Ofertas", label: 'Gerenciar Ofertas',
route: "/manage_bids", route: '/manage_bids',
showInDesktop: true, showInDesktop: true,
showInMobile: true, showInMobile: true,
}, },
{ {
label: "Perguntas frequentes", label: 'Perguntas frequentes',
route: "/faq", route: '/faq',
showInDesktop: false, showInDesktop: false,
showInMobile: true, showInMobile: true,
}, },
{ {
label: "Versões", label: 'Versões',
route: "/versions", route: '/versions',
showInDesktop: false, showInDesktop: false,
showInMobile: true, showInMobile: true,
}, },
{ {
label: "Desconectar", label: 'Desconectar',
route: "/", route: '/',
action: disconnectUser, action: disconnectUser,
showInDesktop: true, showInDesktop: true,
showInMobile: true, showInMobile: true,
@@ -330,7 +330,7 @@ const handleMenuOptionClick = (option: MenuOption): void => {
class="default-button whitespace-nowrap w-40 sm:w-44 md:w-36 hidden md:inline-block" class="default-button whitespace-nowrap w-40 sm:w-44 md:w-36 hidden md:inline-block"
> >
<div class="topbar-text topbar-link text-center mx-auto inline-block"> <div class="topbar-text topbar-link text-center mx-auto inline-block">
{{ sellerView ? "Quero comprar" : "Quero vender" }} {{ sellerView ? 'Quero comprar' : 'Quero vender' }}
</div> </div>
</RouterLink> </RouterLink>
<div class="flex flex-col relative"> <div class="flex flex-col relative">
@@ -354,7 +354,7 @@ const handleMenuOptionClick = (option: MenuOption): void => {
class="default-text hidden sm:inline-block text-gray-50 group-hover:text-gray-900 transition-all duration-500 ease-in-out whitespace-nowrap text-ellipsis overflow-hidden" class="default-text hidden sm:inline-block text-gray-50 group-hover:text-gray-900 transition-all duration-500 ease-in-out whitespace-nowrap text-ellipsis overflow-hidden"
:class="{ '!text-gray-900': currencyMenuOpenToggle }" :class="{ '!text-gray-900': currencyMenuOpenToggle }"
> >
{{ user.network.value.name || "Invalid Chain" }} {{ user.network.value.name || 'Invalid Chain' }}
</span> </span>
<div <div
class="transition-all duration-500 ease-in-out mt-1" class="transition-all duration-500 ease-in-out mt-1"

View File

@@ -1,10 +1,10 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, watch, computed } from "vue"; import { ref, watch, computed } from 'vue';
import { TokenEnum } from "@/model/NetworkEnum"; import { TokenEnum } from '@/model/NetworkEnum';
import { decimalCount } from "@/utils/decimalCount"; import { decimalCount } from '@/utils/decimalCount';
import { debounce } from "@/utils/debounce"; import { debounce } from '@/utils/debounce';
import TokenSelector from "./TokenSelector.vue"; import TokenSelector from './TokenSelector.vue';
import ErrorMessage from "./ErrorMessage.vue"; import ErrorMessage from './ErrorMessage.vue';
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
@@ -20,7 +20,7 @@ const props = withDefaults(
required?: boolean; required?: boolean;
}>(), }>(),
{ {
placeholder: "0", placeholder: '0',
showTokenSelector: true, showTokenSelector: true,
showConversion: true, showConversion: true,
conversionRate: 1, conversionRate: 1,
@@ -31,13 +31,13 @@ const props = withDefaults(
); );
const emit = defineEmits<{ const emit = defineEmits<{
"update:modelValue": [value: number]; 'update:modelValue': [value: number];
"update:selectedToken": [token: TokenEnum]; 'update:selectedToken': [token: TokenEnum];
error: [message: string | null]; error: [message: string | null];
valid: [isValid: boolean]; valid: [isValid: boolean];
}>(); }>();
const inputValue = ref<string>(String(props.modelValue || "")); const inputValue = ref<string>(String(props.modelValue || ''));
const validDecimals = ref(true); const validDecimals = ref(true);
const validRange = ref(true); const validRange = ref(true);
@@ -47,7 +47,7 @@ const convertedValue = computed(() => {
const errorMessage = computed(() => { const errorMessage = computed(() => {
if (!validDecimals.value) { if (!validDecimals.value) {
return "Por favor utilize no máximo 2 casas decimais"; return 'Por favor utilize no máximo 2 casas decimais';
} }
if (!validRange.value) { if (!validRange.value) {
if (props.minValue && props.modelValue < props.minValue) { if (props.minValue && props.modelValue < props.minValue) {
@@ -74,8 +74,8 @@ const handleInput = (event: Event) => {
// Validar decimais // Validar decimais
if (decimalCount(value) > 2) { if (decimalCount(value) > 2) {
validDecimals.value = false; validDecimals.value = false;
emit("error", "Por favor utilize no máximo 2 casas decimais"); emit('error', 'Por favor utilize no máximo 2 casas decimais');
emit("valid", false); emit('valid', false);
return; return;
} }
validDecimals.value = true; validDecimals.value = true;
@@ -83,34 +83,34 @@ const handleInput = (event: Event) => {
// Validar range // Validar range
if (props.minValue !== undefined && numValue < props.minValue) { if (props.minValue !== undefined && numValue < props.minValue) {
validRange.value = false; validRange.value = false;
emit("error", `Valor mínimo: ${props.minValue}`); emit('error', `Valor mínimo: ${props.minValue}`);
emit("valid", false); emit('valid', false);
return; return;
} }
if (props.maxValue !== undefined && numValue > props.maxValue) { if (props.maxValue !== undefined && numValue > props.maxValue) {
validRange.value = false; validRange.value = false;
emit("error", `Valor máximo: ${props.maxValue}`); emit('error', `Valor máximo: ${props.maxValue}`);
emit("valid", false); emit('valid', false);
return; return;
} }
validRange.value = true; validRange.value = true;
emit("update:modelValue", numValue); emit('update:modelValue', numValue);
emit("error", null); emit('error', null);
emit("valid", true); emit('valid', true);
}; };
const debouncedHandleInput = debounce(handleInput, 500); const debouncedHandleInput = debounce(handleInput, 500);
const handleTokenChange = (token: TokenEnum) => { const handleTokenChange = (token: TokenEnum) => {
emit("update:selectedToken", token); emit('update:selectedToken', token);
}; };
watch( watch(
() => props.modelValue, () => props.modelValue,
(newVal) => { (newVal) => {
if (newVal !== Number(inputValue.value)) { if (newVal !== Number(inputValue.value)) {
inputValue.value = String(newVal || ""); inputValue.value = String(newVal || '');
} }
}, },
); );

View File

@@ -1,6 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
import { computed } from "vue"; import { computed } from 'vue';
import bankList from "@/utils/files/isbpList.json"; import bankList from '@/utils/files/isbpList.json';
export interface Bank { export interface Bank {
ISPB: string; ISPB: string;
@@ -15,12 +15,12 @@ const props = withDefaults(
}>(), }>(),
{ {
disabled: false, disabled: false,
placeholder: "Busque e selecione seu banco", placeholder: 'Busque e selecione seu banco',
}, },
); );
const emit = defineEmits<{ const emit = defineEmits<{
"update:modelValue": [value: string]; 'update:modelValue': [value: string];
change: [bank: Bank]; change: [bank: Bank];
}>(); }>();
@@ -38,7 +38,7 @@ const selectedItem = computed(() => {
}); });
const searchQuery = computed({ const searchQuery = computed({
get: () => selectedItem.value?.label || "", get: () => selectedItem.value?.label || '',
set: (value: string) => { set: (value: string) => {
// Handled by input // Handled by input
}, },
@@ -58,8 +58,8 @@ const showBankList = computed(() => {
}); });
const selectBank = (bank: Bank) => { const selectBank = (bank: Bank) => {
emit("update:modelValue", bank.ISPB); emit('update:modelValue', bank.ISPB);
emit("change", bank); emit('change', bank);
}; };
</script> </script>

View File

@@ -1,36 +1,36 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref } from "vue"; import { ref } from 'vue';
const props = defineProps<{ const props = defineProps<{
type: string; type: string;
}>(); }>();
const alertText = ref<string>(""); const alertText = ref<string>('');
const alertPaddingLeft = ref<string>("18rem"); const alertPaddingLeft = ref<string>('18rem');
if (props.type === "sell") { if (props.type === 'sell') {
alertPaddingLeft.value = "30%"; alertPaddingLeft.value = '30%';
} else if (props.type === "buy") { } else if (props.type === 'buy') {
alertPaddingLeft.value = "30%"; alertPaddingLeft.value = '30%';
} else if (props.type === "withdraw") { } else if (props.type === 'withdraw') {
alertPaddingLeft.value = "40%"; alertPaddingLeft.value = '40%';
} else if (props.type === "redirect") { } else if (props.type === 'redirect') {
alertPaddingLeft.value = "35%"; alertPaddingLeft.value = '35%';
} }
switch (props.type) { switch (props.type) {
case "buy": case 'buy':
alertText.value = alertText.value =
"Tudo certo! Os tokens já foram retirados da oferta e estão disponíveis na sua carteira."; 'Tudo certo! Os tokens já foram retirados da oferta e estão disponíveis na sua carteira.';
break; break;
case "sell": case 'sell':
alertText.value = alertText.value =
"Tudo certo! Os tokens já foram reservados e sua oferta está disponível."; 'Tudo certo! Os tokens já foram reservados e sua oferta está disponível.';
break; break;
case "redirect": case 'redirect':
alertText.value = "Existe uma compra em aberto. Continuar?"; alertText.value = 'Existe uma compra em aberto. Continuar?';
break; break;
case "withdraw": case 'withdraw':
alertText.value = "Tudo certo! Saque realizado com sucesso!"; alertText.value = 'Tudo certo! Saque realizado com sucesso!';
break; break;
} }
</script> </script>

View File

@@ -1,6 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
export type ButtonVariant = "primary" | "secondary" | "outline" | "ghost"; export type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost';
export type ButtonSize = "sm" | "md" | "lg" | "xl"; export type ButtonSize = 'sm' | 'md' | 'lg' | 'xl';
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
@@ -9,25 +9,25 @@ const props = withDefaults(
variant?: ButtonVariant; variant?: ButtonVariant;
size?: ButtonSize; size?: ButtonSize;
icon?: string; icon?: string;
iconPosition?: "left" | "right"; iconPosition?: 'left' | 'right';
fullWidth?: boolean; fullWidth?: boolean;
loading?: boolean; loading?: boolean;
}>(), }>(),
{ {
isDisabled: false, isDisabled: false,
variant: "primary", variant: 'primary',
size: "xl", size: 'xl',
iconPosition: "left", iconPosition: 'left',
fullWidth: true, fullWidth: true,
loading: false, loading: false,
}, },
); );
const emit = defineEmits(["buttonClicked"]); const emit = defineEmits(['buttonClicked']);
const handleClick = () => { const handleClick = () => {
if (!props.isDisabled && !props.loading) { if (!props.isDisabled && !props.loading) {
emit("buttonClicked"); emit('buttonClicked');
} }
}; };
</script> </script>

View File

@@ -1,18 +1,18 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref } from "vue"; import { ref } from 'vue';
const props = defineProps({ const props = defineProps({
isRedirectModal: Boolean, isRedirectModal: Boolean,
}); });
const modalColor = ref<string>("white"); const modalColor = ref<string>('white');
const modalHeight = ref<string>("250px"); const modalHeight = ref<string>('250px');
const pFontSize = ref<string>("16px"); const pFontSize = ref<string>('16px');
if (props.isRedirectModal) { if (props.isRedirectModal) {
modalColor.value = "rgba(251, 191, 36, 1)"; modalColor.value = 'rgba(251, 191, 36, 1)';
modalHeight.value = "150px"; modalHeight.value = '150px';
pFontSize.value = "20px"; pFontSize.value = '20px';
} }
</script> </script>

View File

@@ -1,9 +1,9 @@
<script setup lang="ts" generic="T"> <script setup lang="ts" generic="T">
import { ref, computed } from "vue"; import { ref, computed } from 'vue';
import { onClickOutside } from "@vueuse/core"; import { onClickOutside } from '@vueuse/core';
import ChevronDown from "@/assets/chevronDown.svg"; import ChevronDown from '@/assets/chevronDown.svg';
defineOptions({ name: "UiDropdown" }); defineOptions({ name: 'UiDropdown' });
export interface DropdownItem<T = any> { export interface DropdownItem<T = any> {
value: T; value: T;
@@ -19,25 +19,25 @@ const props = withDefaults(
placeholder?: string; placeholder?: string;
searchable?: boolean; searchable?: boolean;
disabled?: boolean; disabled?: boolean;
size?: "sm" | "md" | "lg"; size?: 'sm' | 'md' | 'lg';
showIcon?: boolean; showIcon?: boolean;
}>(), }>(),
{ {
placeholder: "Selecione...", placeholder: 'Selecione...',
searchable: false, searchable: false,
disabled: false, disabled: false,
size: "md", size: 'md',
showIcon: true, showIcon: true,
}, },
); );
const emit = defineEmits<{ const emit = defineEmits<{
"update:modelValue": [value: T]; 'update:modelValue': [value: T];
change: [value: T]; change: [value: T];
}>(); }>();
const isOpen = ref(false); const isOpen = ref(false);
const searchQuery = ref(""); const searchQuery = ref('');
const dropdownRef = ref<HTMLElement | null>(null); const dropdownRef = ref<HTMLElement | null>(null);
const selectedItem = computed(() => { const selectedItem = computed(() => {
@@ -57,23 +57,23 @@ const toggleDropdown = () => {
if (!props.disabled) { if (!props.disabled) {
isOpen.value = !isOpen.value; isOpen.value = !isOpen.value;
if (!isOpen.value) { if (!isOpen.value) {
searchQuery.value = ""; searchQuery.value = '';
} }
} }
}; };
const selectItem = (item: DropdownItem<T>) => { const selectItem = (item: DropdownItem<T>) => {
if (!item.disabled) { if (!item.disabled) {
emit("update:modelValue", item.value); emit('update:modelValue', item.value);
emit("change", item.value); emit('change', item.value);
isOpen.value = false; isOpen.value = false;
searchQuery.value = ""; searchQuery.value = '';
} }
}; };
onClickOutside(dropdownRef, () => { onClickOutside(dropdownRef, () => {
isOpen.value = false; isOpen.value = false;
searchQuery.value = ""; searchQuery.value = '';
}); });
</script> </script>

View File

@@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
export type ErrorType = "error" | "warning" | "info"; export type ErrorType = 'error' | 'warning' | 'info';
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
@@ -9,16 +9,16 @@ const props = withDefaults(
icon?: boolean; icon?: boolean;
}>(), }>(),
{ {
type: "error", type: 'error',
centered: true, centered: true,
icon: false, icon: false,
}, },
); );
const colorClasses = { const colorClasses = {
error: "text-red-500", error: 'text-red-500',
warning: "text-amber-500", warning: 'text-amber-500',
info: "text-blue-500", info: 'text-blue-500',
}; };
</script> </script>

View File

@@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
export type FormCardPadding = "sm" | "md" | "lg"; export type FormCardPadding = 'sm' | 'md' | 'lg';
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
@@ -8,7 +8,7 @@ const props = withDefaults(
noBorder?: boolean; noBorder?: boolean;
}>(), }>(),
{ {
padding: "md", padding: 'md',
fullWidth: true, fullWidth: true,
noBorder: false, noBorder: false,
}, },

View File

@@ -1,7 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
export type IconButtonVariant = "primary" | "secondary" | "outline" | "ghost"; export type IconButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost';
export type IconButtonSize = "sm" | "md" | "lg"; export type IconButtonSize = 'sm' | 'md' | 'lg';
export type IconPosition = "left" | "right"; export type IconPosition = 'left' | 'right';
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
@@ -14,9 +14,9 @@ const props = withDefaults(
fullWidth?: boolean; fullWidth?: boolean;
}>(), }>(),
{ {
variant: "outline", variant: 'outline',
size: "md", size: 'md',
iconPosition: "left", iconPosition: 'left',
disabled: false, disabled: false,
fullWidth: false, fullWidth: false,
}, },
@@ -28,7 +28,7 @@ const emit = defineEmits<{
const handleClick = () => { const handleClick = () => {
if (!props.disabled) { if (!props.disabled) {
emit("click"); emit('click');
} }
}; };
</script> </script>

View File

@@ -1,17 +1,17 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted } from "vue"; import { ref, onMounted } from 'vue';
import { useFloating, arrow, offset, flip, shift } from "@floating-ui/vue"; import { useFloating, arrow, offset, flip, shift } from '@floating-ui/vue';
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
text: string; text: string;
placement?: "top" | "bottom" | "left" | "right"; placement?: 'top' | 'bottom' | 'left' | 'right';
iconSrc?: string; iconSrc?: string;
showOnHover?: boolean; showOnHover?: boolean;
}>(), }>(),
{ {
placement: "right", placement: 'right',
iconSrc: "", iconSrc: '',
showOnHover: true, showOnHover: true,
}, },
); );

View File

@@ -12,7 +12,7 @@ const props = defineProps({
<span <span
class="text font-bold sm:text-3xl text-2xl sm:max-w-[29rem] max-w-[20rem]" class="text font-bold sm:text-3xl text-2xl sm:max-w-[29rem] max-w-[20rem]"
> >
{{ props.title ? props.title : "Confirme em sua carteira" }} {{ props.title ? props.title : 'Confirme em sua carteira' }}
</span> </span>
</div> </div>
<div class="main-container max-w-md"> <div class="main-container max-w-md">
@@ -61,12 +61,12 @@ const props = defineProps({
@apply text-white text-center; @apply text-white text-center;
} }
input[type="number"] { input[type='number'] {
-moz-appearance: textfield; -moz-appearance: textfield;
} }
input[type="number"]::-webkit-inner-spin-button, input[type='number']::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button { input[type='number']::-webkit-outer-spin-button {
-webkit-appearance: none; -webkit-appearance: none;
} }
</style> </style>

View File

@@ -1,25 +1,25 @@
<script setup lang="ts"> <script setup lang="ts">
import SpinnerComponent from "./SpinnerComponent.vue"; import SpinnerComponent from './SpinnerComponent.vue';
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
message?: string; message?: string;
size?: "sm" | "md" | "lg"; size?: 'sm' | 'md' | 'lg';
centered?: boolean; centered?: boolean;
inline?: boolean; inline?: boolean;
}>(), }>(),
{ {
message: "Carregando...", message: 'Carregando...',
size: "md", size: 'md',
centered: true, centered: true,
inline: false, inline: false,
}, },
); );
const sizeMap = { const sizeMap = {
sm: { spinner: "4", text: "text-sm" }, sm: { spinner: '4', text: 'text-sm' },
md: { spinner: "6", text: "text-base" }, md: { spinner: '6', text: 'text-base' },
lg: { spinner: "8", text: "text-lg" }, lg: { spinner: '8', text: 'text-lg' },
}; };
</script> </script>

View File

@@ -1,16 +1,16 @@
<script setup lang="ts"> <script setup lang="ts">
import { computed } from "vue"; import { computed } from 'vue';
import { getNetworkImage } from "@/utils/imagesPath"; import { getNetworkImage } from '@/utils/imagesPath';
import type { NetworkConfig } from "@/model/NetworkEnum"; import type { NetworkConfig } from '@/model/NetworkEnum';
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
networks: NetworkConfig[]; networks: NetworkConfig[];
size?: "sm" | "md" | "lg"; size?: 'sm' | 'md' | 'lg';
showLabel?: boolean; showLabel?: boolean;
}>(), }>(),
{ {
size: "md", size: 'md',
showLabel: false, showLabel: false,
}, },
); );

View File

@@ -1,25 +1,25 @@
<script setup lang="ts"> <script setup lang="ts">
import { computed } from "vue"; import { computed } from 'vue';
import { Networks } from "@/config/networks"; import { Networks } from '@/config/networks';
import type { NetworkConfig } from "@/model/NetworkEnum"; import type { NetworkConfig } from '@/model/NetworkEnum';
import { getNetworkImage } from "@/utils/imagesPath"; import { getNetworkImage } from '@/utils/imagesPath';
import Dropdown, { type DropdownItem } from "./Dropdown.vue"; import Dropdown, { type DropdownItem } from './Dropdown.vue';
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
modelValue: NetworkConfig; modelValue: NetworkConfig;
disabled?: boolean; disabled?: boolean;
size?: "sm" | "md" | "lg"; size?: 'sm' | 'md' | 'lg';
availableNetworks?: NetworkConfig[]; availableNetworks?: NetworkConfig[];
}>(), }>(),
{ {
disabled: false, disabled: false,
size: "md", size: 'md',
}, },
); );
const emit = defineEmits<{ const emit = defineEmits<{
"update:modelValue": [value: NetworkConfig]; 'update:modelValue': [value: NetworkConfig];
change: [value: NetworkConfig]; change: [value: NetworkConfig];
}>(); }>();
@@ -32,8 +32,8 @@ const networkItems = computed((): DropdownItem<NetworkConfig>[] => {
}); });
const handleChange = (value: NetworkConfig) => { const handleChange = (value: NetworkConfig) => {
emit("update:modelValue", value); emit('update:modelValue', value);
emit("change", value); emit('change', value);
}; };
</script> </script>

View File

@@ -1,5 +1,5 @@
<script setup lang="ts"> <script setup lang="ts">
export type HeaderSize = "sm" | "md" | "lg"; export type HeaderSize = 'sm' | 'md' | 'lg';
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
@@ -9,7 +9,7 @@ const props = withDefaults(
centered?: boolean; centered?: boolean;
}>(), }>(),
{ {
size: "lg", size: 'lg',
centered: true, centered: true,
}, },
); );

View File

@@ -10,10 +10,10 @@ const getCustomClass = () => {
return [ return [
`w-${props.width}`, `w-${props.width}`,
`h-${props.height}`, `h-${props.height}`,
`fill-white`, 'fill-white',
"text-gray-200", 'text-gray-200',
"animate-spin", 'animate-spin',
"dark:text-gray-600", 'dark:text-gray-600',
]; ];
}; };
</script> </script>

View File

@@ -1,7 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { computed } from "vue"; import { computed } from 'vue';
export type StatusType = "open" | "expired" | "completed" | "pending"; export type StatusType = 'open' | 'expired' | 'completed' | 'pending';
const props = defineProps<{ const props = defineProps<{
status: StatusType; status: StatusType;
@@ -11,20 +11,20 @@ const props = defineProps<{
const statusConfig = computed(() => { const statusConfig = computed(() => {
const configs: Record<StatusType, { text: string; color: string }> = { const configs: Record<StatusType, { text: string; color: string }> = {
open: { open: {
text: "Em Aberto", text: 'Em Aberto',
color: "bg-amber-300", color: 'bg-amber-300',
}, },
expired: { expired: {
text: "Expirado", text: 'Expirado',
color: "bg-[#94A3B8]", color: 'bg-[#94A3B8]',
}, },
completed: { completed: {
text: "Finalizado", text: 'Finalizado',
color: "bg-emerald-300", color: 'bg-emerald-300',
}, },
pending: { pending: {
text: "Pendente", text: 'Pendente',
color: "bg-gray-300", color: 'bg-gray-300',
}, },
}; };

View File

@@ -1,8 +1,8 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, computed, watch, onMounted } from "vue"; import { ref, computed, watch, onMounted } from 'vue';
import { useOnboard } from "@web3-onboard/vue"; import { useOnboard } from '@web3-onboard/vue';
import { Networks } from "@/config/networks"; import { Networks } from '@/config/networks';
import { useUser } from "@/composables/useUser"; import { useUser } from '@/composables/useUser';
const { connectedWallet } = useOnboard(); const { connectedWallet } = useOnboard();
const user = useUser(); const user = useUser();
@@ -25,7 +25,7 @@ const switchNetwork = async () => {
if (connectedWallet.value && connectedWallet.value.provider) { if (connectedWallet.value && connectedWallet.value.provider) {
const chainId = network.value.id.toString(16); const chainId = network.value.id.toString(16);
await connectedWallet.value.provider.request({ await connectedWallet.value.provider.request({
method: "wallet_switchEthereumChain", method: 'wallet_switchEthereumChain',
params: [ params: [
{ {
chainId: `0x${chainId}`, chainId: `0x${chainId}`,
@@ -34,7 +34,7 @@ const switchNetwork = async () => {
}); });
} }
} catch (error) { } catch (error) {
console.error("Failed to switch network:", error); console.error('Failed to switch network:', error);
} }
}; };

View File

@@ -1,23 +1,23 @@
<script setup lang="ts"> <script setup lang="ts">
import { computed } from "vue"; import { computed } from 'vue';
import { TokenEnum } from "@/model/NetworkEnum"; import { TokenEnum } from '@/model/NetworkEnum';
import { getTokenImage } from "@/utils/imagesPath"; import { getTokenImage } from '@/utils/imagesPath';
import Dropdown, { type DropdownItem } from "./Dropdown.vue"; import Dropdown, { type DropdownItem } from './Dropdown.vue';
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
modelValue: TokenEnum; modelValue: TokenEnum;
disabled?: boolean; disabled?: boolean;
size?: "sm" | "md" | "lg"; size?: 'sm' | 'md' | 'lg';
}>(), }>(),
{ {
disabled: false, disabled: false,
size: "md", size: 'md',
}, },
); );
const emit = defineEmits<{ const emit = defineEmits<{
"update:modelValue": [value: TokenEnum]; 'update:modelValue': [value: TokenEnum];
change: [value: TokenEnum]; change: [value: TokenEnum];
}>(); }>();
@@ -30,8 +30,8 @@ const tokenItems = computed((): DropdownItem<TokenEnum>[] => {
}); });
const handleChange = (value: TokenEnum) => { const handleChange = (value: TokenEnum) => {
emit("update:modelValue", value); emit('update:modelValue', value);
emit("change", value); emit('change', value);
}; };
</script> </script>

View File

@@ -1,5 +1,6 @@
<script setup lang="ts"> <script setup lang="ts">
const version = typeof __APP_VERSION__ !== "undefined" ? __APP_VERSION__ : "dev"; const version =
typeof __APP_VERSION__ !== 'undefined' ? __APP_VERSION__ : 'dev';
</script> </script>
<template> <template>

View File

@@ -1,16 +1,16 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, computed } from "vue"; import { ref, computed } from 'vue';
import { onClickOutside } from "@vueuse/core"; import { onClickOutside } from '@vueuse/core';
import CustomButton from "./CustomButton.vue"; import CustomButton from './CustomButton.vue';
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
walletAddress: string | null; walletAddress: string | null;
variant?: "primary" | "secondary" | "outline"; variant?: 'primary' | 'secondary' | 'outline';
showMenu?: boolean; showMenu?: boolean;
}>(), }>(),
{ {
variant: "primary", variant: 'primary',
showMenu: true, showMenu: true,
}, },
); );
@@ -29,7 +29,7 @@ const isConnected = computed(() => {
}); });
const formattedAddress = computed(() => { const formattedAddress = computed(() => {
if (!props.walletAddress) return ""; if (!props.walletAddress) return '';
const address = props.walletAddress; const address = props.walletAddress;
const length = address.length; const length = address.length;
@@ -40,17 +40,17 @@ const formattedAddress = computed(() => {
}); });
const handleConnect = () => { const handleConnect = () => {
emit("connect"); emit('connect');
}; };
const handleDisconnect = () => { const handleDisconnect = () => {
menuOpen.value = false; menuOpen.value = false;
emit("disconnect"); emit('disconnect');
}; };
const handleViewTransactions = () => { const handleViewTransactions = () => {
menuOpen.value = false; menuOpen.value = false;
emit("viewTransactions"); emit('viewTransactions');
}; };
const toggleMenu = () => { const toggleMenu = () => {

View File

@@ -1,11 +1,11 @@
import { NetworkConfig } from "@/model/NetworkEnum"; import { NetworkConfig } from '@/model/NetworkEnum';
import { ref, computed, type Ref } from "vue"; import { ref, computed, type Ref } from 'vue';
import { isTestnetEnvironment } from "@/config/networks"; import { isTestnetEnvironment } from '@/config/networks';
import { sepolia, rootstock, rootstockTestnet } from "viem/chains"; import { sepolia, rootstock, rootstockTestnet } from 'viem/chains';
export interface Transaction { export interface Transaction {
id: string; id: string;
type: "deposit" | "lock" | "release" | "return"; type: 'deposit' | 'lock' | 'release' | 'return';
timestamp: string; timestamp: string;
blockTimestamp: string; blockTimestamp: string;
seller?: string; seller?: string;
@@ -25,19 +25,19 @@ export interface AnalyticsData {
} }
export function useGraphQL(network: Ref<NetworkConfig>) { export function useGraphQL(network: Ref<NetworkConfig>) {
const searchAddress = ref(""); const searchAddress = ref('');
const selectedType = ref("all"); const selectedType = ref('all');
const loading = ref(false); const loading = ref(false);
const error = ref<string | null>(null); const error = ref<string | null>(null);
const analyticsLoading = ref(false); const analyticsLoading = ref(false);
const transactionsData = ref<Transaction[]>([]); const transactionsData = ref<Transaction[]>([]);
const analyticsData = ref<AnalyticsData>({ const analyticsData = ref<AnalyticsData>({
totalVolume: "0", totalVolume: '0',
totalTransactions: "0", totalTransactions: '0',
totalLocks: "0", totalLocks: '0',
totalDeposits: "0", totalDeposits: '0',
totalReleases: "0", totalReleases: '0',
}); });
const executeQuery = async (query: string, variables: any = {}) => { const executeQuery = async (query: string, variables: any = {}) => {
@@ -45,9 +45,9 @@ export function useGraphQL(network: Ref<NetworkConfig>) {
try { try {
const response = await fetch(url, { const response = await fetch(url, {
method: "POST", method: 'POST',
headers: { headers: {
"Content-Type": "application/json", 'Content-Type': 'application/json',
}, },
body: JSON.stringify({ body: JSON.stringify({
query, query,
@@ -62,12 +62,12 @@ export function useGraphQL(network: Ref<NetworkConfig>) {
const data = await response.json(); const data = await response.json();
if (data.errors) { if (data.errors) {
throw new Error(data.errors[0]?.message || "GraphQL error"); throw new Error(data.errors[0]?.message || 'GraphQL error');
} }
return data.data; return data.data;
} catch (err) { } catch (err) {
console.error("GraphQL query error:", err); console.error('GraphQL query error:', err);
throw err; throw err;
} }
}; };
@@ -131,7 +131,7 @@ export function useGraphQL(network: Ref<NetworkConfig>) {
transactionsData.value = processActivityData(data); transactionsData.value = processActivityData(data);
} catch (err) { } catch (err) {
error.value = error.value =
err instanceof Error ? err.message : "Failed to fetch transactions"; err instanceof Error ? err.message : 'Failed to fetch transactions';
} finally { } finally {
loading.value = false; loading.value = false;
} }
@@ -198,7 +198,7 @@ export function useGraphQL(network: Ref<NetworkConfig>) {
error.value = error.value =
err instanceof Error err instanceof Error
? err.message ? err.message
: "Failed to fetch user transactions"; : 'Failed to fetch user transactions';
} finally { } finally {
loading.value = false; loading.value = false;
} }
@@ -207,11 +207,11 @@ export function useGraphQL(network: Ref<NetworkConfig>) {
const clearData = () => { const clearData = () => {
transactionsData.value = []; transactionsData.value = [];
analyticsData.value = { analyticsData.value = {
totalVolume: "0", totalVolume: '0',
totalTransactions: "0", totalTransactions: '0',
totalLocks: "0", totalLocks: '0',
totalDeposits: "0", totalDeposits: '0',
totalReleases: "0", totalReleases: '0',
}; };
}; };
@@ -246,7 +246,7 @@ export function useGraphQL(network: Ref<NetworkConfig>) {
const data = await executeQuery(query); const data = await executeQuery(query);
analyticsData.value = processAnalyticsData(data); analyticsData.value = processAnalyticsData(data);
} catch (err) { } catch (err) {
console.error("Failed to fetch analytics:", err); console.error('Failed to fetch analytics:', err);
} finally { } finally {
analyticsLoading.value = false; analyticsLoading.value = false;
} }
@@ -264,7 +264,7 @@ export function useGraphQL(network: Ref<NetworkConfig>) {
blockNumber: deposit.blockNumber, blockNumber: deposit.blockNumber,
blockTimestamp: deposit.blockTimestamp, blockTimestamp: deposit.blockTimestamp,
transactionHash: deposit.transactionHash, transactionHash: deposit.transactionHash,
type: "deposit", type: 'deposit',
seller: deposit.seller, seller: deposit.seller,
buyer: undefined, buyer: undefined,
amount: deposit.amount, amount: deposit.amount,
@@ -281,7 +281,7 @@ export function useGraphQL(network: Ref<NetworkConfig>) {
blockNumber: withdrawal.blockNumber, blockNumber: withdrawal.blockNumber,
blockTimestamp: withdrawal.blockTimestamp, blockTimestamp: withdrawal.blockTimestamp,
transactionHash: withdrawal.transactionHash, transactionHash: withdrawal.transactionHash,
type: "deposit", // Treat as deposit withdrawal type: 'deposit', // Treat as deposit withdrawal
seller: withdrawal.seller, seller: withdrawal.seller,
buyer: undefined, buyer: undefined,
amount: withdrawal.amount, amount: withdrawal.amount,
@@ -298,7 +298,7 @@ export function useGraphQL(network: Ref<NetworkConfig>) {
blockNumber: lock.blockNumber, blockNumber: lock.blockNumber,
blockTimestamp: lock.blockTimestamp, blockTimestamp: lock.blockTimestamp,
transactionHash: lock.transactionHash, transactionHash: lock.transactionHash,
type: "lock", type: 'lock',
seller: lock.seller, seller: lock.seller,
buyer: lock.buyer, buyer: lock.buyer,
amount: lock.amount, amount: lock.amount,
@@ -315,11 +315,11 @@ export function useGraphQL(network: Ref<NetworkConfig>) {
blockNumber: release.blockNumber, blockNumber: release.blockNumber,
blockTimestamp: release.blockTimestamp, blockTimestamp: release.blockTimestamp,
transactionHash: release.transactionHash, transactionHash: release.transactionHash,
type: "release", type: 'release',
seller: undefined, // Release doesn't have seller info seller: undefined, // Release doesn't have seller info
buyer: release.buyer, buyer: release.buyer,
amount: release.amount, amount: release.amount,
token: "BRZ", // Default token token: 'BRZ', // Default token
timestamp: formatTimestamp(release.blockTimestamp), timestamp: formatTimestamp(release.blockTimestamp),
}); });
}); });
@@ -332,11 +332,11 @@ export function useGraphQL(network: Ref<NetworkConfig>) {
blockNumber: returnTx.blockNumber, blockNumber: returnTx.blockNumber,
blockTimestamp: returnTx.blockTimestamp, blockTimestamp: returnTx.blockTimestamp,
transactionHash: returnTx.transactionHash, transactionHash: returnTx.transactionHash,
type: "return", type: 'return',
seller: undefined, // Return doesn't have seller info seller: undefined, // Return doesn't have seller info
buyer: returnTx.buyer, buyer: returnTx.buyer,
amount: "0", // Return doesn't have amount amount: '0', // Return doesn't have amount
token: "BRZ", // Default token token: 'BRZ', // Default token
timestamp: formatTimestamp(returnTx.blockTimestamp), timestamp: formatTimestamp(returnTx.blockTimestamp),
}); });
}); });
@@ -351,7 +351,7 @@ export function useGraphQL(network: Ref<NetworkConfig>) {
const now = Date.now() / 1000; const now = Date.now() / 1000;
const diff = now - parseInt(timestamp); const diff = now - parseInt(timestamp);
if (diff < 60) return "Just now"; if (diff < 60) return 'Just now';
if (diff < 3600) return `${Math.floor(diff / 60)} minutes ago`; if (diff < 3600) return `${Math.floor(diff / 60)} minutes ago`;
if (diff < 86400) return `${Math.floor(diff / 3600)} hours ago`; if (diff < 86400) return `${Math.floor(diff / 3600)} hours ago`;
return `${Math.floor(diff / 86400)} days ago`; return `${Math.floor(diff / 86400)} days ago`;
@@ -372,11 +372,11 @@ export function useGraphQL(network: Ref<NetworkConfig>) {
const processAnalyticsData = (data: any): AnalyticsData => { const processAnalyticsData = (data: any): AnalyticsData => {
if (!data) { if (!data) {
return { return {
totalVolume: "0", totalVolume: '0',
totalTransactions: "0", totalTransactions: '0',
totalLocks: "0", totalLocks: '0',
totalDeposits: "0", totalDeposits: '0',
totalReleases: "0", totalReleases: '0',
}; };
} }
@@ -388,7 +388,7 @@ export function useGraphQL(network: Ref<NetworkConfig>) {
if (data.depositAddeds) { if (data.depositAddeds) {
data.depositAddeds.forEach((deposit: any) => { data.depositAddeds.forEach((deposit: any) => {
totalVolume += parseFloat(deposit.amount || "0"); totalVolume += parseFloat(deposit.amount || '0');
totalTransactions++; totalTransactions++;
totalDeposits++; totalDeposits++;
}); });
@@ -396,14 +396,14 @@ export function useGraphQL(network: Ref<NetworkConfig>) {
if (data.depositWithdrawns) { if (data.depositWithdrawns) {
data.depositWithdrawns.forEach((withdrawal: any) => { data.depositWithdrawns.forEach((withdrawal: any) => {
totalVolume += parseFloat(withdrawal.amount || "0"); totalVolume += parseFloat(withdrawal.amount || '0');
totalTransactions++; totalTransactions++;
}); });
} }
if (data.lockAddeds) { if (data.lockAddeds) {
data.lockAddeds.forEach((lock: any) => { data.lockAddeds.forEach((lock: any) => {
totalVolume += parseFloat(lock.amount || "0"); totalVolume += parseFloat(lock.amount || '0');
totalTransactions++; totalTransactions++;
totalLocks++; totalLocks++;
}); });
@@ -411,7 +411,7 @@ export function useGraphQL(network: Ref<NetworkConfig>) {
if (data.lockReleaseds) { if (data.lockReleaseds) {
data.lockReleaseds.forEach((release: any) => { data.lockReleaseds.forEach((release: any) => {
totalVolume += parseFloat(release.amount || "0"); totalVolume += parseFloat(release.amount || '0');
totalTransactions++; totalTransactions++;
totalReleases++; totalReleases++;
}); });
@@ -437,7 +437,7 @@ export function useGraphQL(network: Ref<NetworkConfig>) {
const filteredTransactions = computed(() => { const filteredTransactions = computed(() => {
let filtered = transactionsData.value; let filtered = transactionsData.value;
if (selectedType.value !== "all") { if (selectedType.value !== 'all') {
filtered = filtered.filter((tx) => tx.type === selectedType.value); filtered = filtered.filter((tx) => tx.type === selectedType.value);
} }

View File

@@ -1,12 +1,12 @@
import { ref } from "vue"; import { ref } from 'vue';
import type { ValidDeposit } from "@/model/ValidDeposit"; import type { ValidDeposit } from '@/model/ValidDeposit';
import type { Participant } from "../utils/bbPay"; import type { Participant } from '../utils/bbPay';
import type { Address } from "viem"; import type { Address } from 'viem';
import { DEFAULT_NETWORK, Networks } from "@/config/networks"; import { DEFAULT_NETWORK, Networks } from '@/config/networks';
import { TokenEnum, NetworkConfig } from "@/model/NetworkEnum"; import { TokenEnum, NetworkConfig } from '@/model/NetworkEnum';
const walletAddress = ref<Address | null>(null); const walletAddress = ref<Address | null>(null);
const balance = ref(""); const balance = ref('');
const network = ref(DEFAULT_NETWORK); const network = ref(DEFAULT_NETWORK);
const selectedToken = ref<TokenEnum>(TokenEnum.BRZ); const selectedToken = ref<TokenEnum>(TokenEnum.BRZ);
const loadingLock = ref(false); const loadingLock = ref(false);
@@ -15,7 +15,7 @@ const depositsValidList = ref<ValidDeposit[]>([]);
const loadingWalletTransactions = ref(false); const loadingWalletTransactions = ref(false);
const loadingNetworkLiquidity = ref(false); const loadingNetworkLiquidity = ref(false);
const seller = ref<Participant>({} as Participant); const seller = ref<Participant>({} as Participant);
const sellerId = ref(""); const sellerId = ref('');
export function useUser() { export function useUser() {
// Actions become regular functions // Actions become regular functions
@@ -38,9 +38,9 @@ export function useUser() {
const setNetworkById = (id: string | number) => { const setNetworkById = (id: string | number) => {
let chainId: number; let chainId: number;
if (typeof id === "string") { if (typeof id === 'string') {
// Parse hex string or number string to number // Parse hex string or number string to number
if (id.startsWith("0x")) { if (id.startsWith('0x')) {
chainId = parseInt(id, 16); chainId = parseInt(id, 16);
} else { } else {
chainId = parseInt(id, 10); chainId = parseInt(id, 10);

View File

@@ -1,5 +1,5 @@
import { mainnet, sepolia, rootstock, rootstockTestnet } from "viem/chains"; import { mainnet, sepolia, rootstock, rootstockTestnet } from 'viem/chains';
import { NetworkConfig } from "@/model/NetworkEnum"; import { NetworkConfig } from '@/model/NetworkEnum';
// TODO: import addresses from p2pix-smart-contracts deployments // TODO: import addresses from p2pix-smart-contracts deployments
export const Networks: { [key: string]: NetworkConfig } = { export const Networks: { [key: string]: NetworkConfig } = {

View File

@@ -1,12 +1,12 @@
import { createApp } from "vue"; import { createApp } from 'vue';
import App from "./App.vue"; import App from './App.vue';
import router from "./router"; import router from './router';
import "./assets/main.css"; import './assets/main.css';
import "./assets/transitions.css"; import './assets/transitions.css';
const app = createApp(App); const app = createApp(App);
app.use(router); app.use(router);
app.mount("#app"); app.mount('#app');

View File

@@ -1,4 +1,4 @@
import type { Address } from "viem"; import type { Address } from 'viem';
export enum LockStatus { export enum LockStatus {
// from DataTypes.sol // from DataTypes.sol

View File

@@ -1,7 +1,7 @@
import type { Chain, ChainContract } from "viem"; import type { Chain, ChainContract } from 'viem';
export enum TokenEnum { export enum TokenEnum {
BRZ = "BRZ", BRZ = 'BRZ',
// BRX = 'BRX' // BRX = 'BRX'
} }
export type NetworkConfig = Chain & { export type NetworkConfig = Chain & {

View File

@@ -1,4 +1,4 @@
import { Address } from "viem"; import { Address } from 'viem';
export type UnreleasedLock = { export type UnreleasedLock = {
lockID: bigint; lockID: bigint;

View File

@@ -1,5 +1,5 @@
import type { Address } from "viem"; import type { Address } from 'viem';
import type { NetworkConfig } from "@/model/NetworkEnum"; import type { NetworkConfig } from '@/model/NetworkEnum';
export type ValidDeposit = { export type ValidDeposit = {
token: Address; token: Address;

View File

@@ -1,5 +1,5 @@
import type { LockStatus } from "@/model/LockStatus"; import type { LockStatus } from '@/model/LockStatus';
import type { Address } from "viem"; import type { Address } from 'viem';
export type WalletTransaction = { export type WalletTransaction = {
token?: Address; token?: Address;

View File

@@ -2,54 +2,54 @@ import {
createRouter, createRouter,
createWebHistory, createWebHistory,
createWebHashHistory, createWebHashHistory,
} from "vue-router"; } from 'vue-router';
import HomeView from "@/views/HomeView.vue"; import HomeView from '@/views/HomeView.vue';
import FaqView from "@/views/FaqView.vue"; import FaqView from '@/views/FaqView.vue';
import ManageBidsView from "@/views/ManageBidsView.vue"; import ManageBidsView from '@/views/ManageBidsView.vue';
import SellerView from "@/views/SellerView.vue"; import SellerView from '@/views/SellerView.vue';
import ExploreView from "@/views/ExploreView.vue"; import ExploreView from '@/views/ExploreView.vue';
import VersionsView from "@/views/VersionsView.vue"; import VersionsView from '@/views/VersionsView.vue';
const router = createRouter({ const router = createRouter({
history: history:
import.meta.env.MODE === "production" && import.meta.env.BASE_URL === "./" import.meta.env.MODE === 'production' && import.meta.env.BASE_URL === './'
? createWebHashHistory() ? createWebHashHistory()
: createWebHistory(import.meta.env.BASE_URL), : createWebHistory(import.meta.env.BASE_URL),
routes: [ routes: [
{ {
path: "/", path: '/',
name: "home", name: 'home',
component: HomeView, component: HomeView,
props: true, props: true,
}, },
{ {
path: "/:lockID", path: '/:lockID',
name: "redirect buy", name: 'redirect buy',
component: HomeView, component: HomeView,
}, },
{ {
path: "/seller", path: '/seller',
name: "seller", name: 'seller',
component: SellerView, component: SellerView,
}, },
{ {
path: "/manage_bids", path: '/manage_bids',
name: "manage bids", name: 'manage bids',
component: ManageBidsView, component: ManageBidsView,
}, },
{ {
path: "/faq", path: '/faq',
name: "faq", name: 'faq',
component: FaqView, component: FaqView,
}, },
{ {
path: "/explore", path: '/explore',
name: "explore", name: 'explore',
component: ExploreView, component: ExploreView,
}, },
{ {
path: "/versions", path: '/versions',
name: "versions", name: 'versions',
component: VersionsView, component: VersionsView,
}, },
], ],

4
src/shims-vue.d.ts vendored
View File

@@ -1,5 +1,5 @@
declare module "*.vue" { declare module '*.vue' {
import { DefineComponent } from "vue"; import { DefineComponent } from 'vue';
const component: DefineComponent; const component: DefineComponent;
export default component; export default component;
} }

View File

@@ -1,11 +1,11 @@
module.exports = { module.exports = {
process() { process() {
return { return {
code: `module.exports = {};`, code: 'module.exports = {};',
}; };
}, },
getCacheKey() { getCacheKey() {
// The output is always the same. // The output is always the same.
return "svgTransform"; return 'svgTransform';
}, },
}; };

View File

@@ -23,9 +23,9 @@ export interface Offer {
export const createParticipant = async (participant: Participant) => { export const createParticipant = async (participant: Participant) => {
const response = await fetch(`${import.meta.env.VITE_APP_API_URL}/register`, { const response = await fetch(`${import.meta.env.VITE_APP_API_URL}/register`, {
method: "POST", method: 'POST',
headers: { headers: {
"Content-Type": "application/json", 'Content-Type': 'application/json',
}, },
body: JSON.stringify({ body: JSON.stringify({
chainID: participant.chainID, chainID: participant.chainID,
@@ -49,13 +49,13 @@ export const createParticipant = async (participant: Participant) => {
export const createSolicitation = async (offer: Offer) => { export const createSolicitation = async (offer: Offer) => {
const response = await fetch(`${import.meta.env.VITE_APP_API_URL}/request`, { const response = await fetch(`${import.meta.env.VITE_APP_API_URL}/request`, {
method: "POST", method: 'POST',
headers: { headers: {
"Content-Type": "application/json", 'Content-Type': 'application/json',
}, },
body: JSON.stringify({ body: JSON.stringify({
amount: offer.amount, amount: offer.amount,
pixTarget: offer.sellerId.split("-").pop(), pixTarget: offer.sellerId.split('-').pop(),
}), }),
}); });
return response.json(); return response.json();

View File

@@ -1,6 +1,6 @@
export const decimalCount = (numStr: string): number => { export const decimalCount = (numStr: string): number => {
if (numStr.includes(".")) { if (numStr.includes('.')) {
return numStr.split(".")[1].length; return numStr.split('.')[1].length;
} }
return 0; return 0;
}; };

View File

@@ -1,8 +1,8 @@
import type { TokenEnum } from "@/model/NetworkEnum"; import type { TokenEnum } from '@/model/NetworkEnum';
import { Networks } from "@/config/networks"; import { Networks } from '@/config/networks';
export const getNetworkImage = (networkName: string): string => { export const getNetworkImage = (networkName: string): string => {
const normalizedName = networkName.toLowerCase().replace(/[^a-z0-9]/g, "-"); const normalizedName = networkName.toLowerCase().replace(/[^a-z0-9]/g, '-');
return new URL(`../assets/networks/${normalizedName}.svg`, import.meta.url) return new URL(`../assets/networks/${normalizedName}.svg`, import.meta.url)
.href; .href;
}; };

View File

@@ -1,5 +1,5 @@
import type { ValidDeposit } from "@/model/ValidDeposit"; import type { ValidDeposit } from '@/model/ValidDeposit';
import type { Address } from "viem"; import type { Address } from 'viem';
const verifyNetworkLiquidity = ( const verifyNetworkLiquidity = (
tokenValue: number, tokenValue: number,

View File

@@ -11,6 +11,6 @@ export const pixFormatValidation = (pixKey: string): boolean => {
}; };
export const postProcessKey = (pixKey: string): string => { export const postProcessKey = (pixKey: string): string => {
pixKey = pixKey.replace(/[-.()/]/g, ""); pixKey = pixKey.replace(/[-.()/]/g, '');
return pixKey; return pixKey;
}; };

View File

@@ -1,17 +1,17 @@
import type { AppVersion } from "@/model/AppVersion"; import type { AppVersion } from '@/model/AppVersion';
export const appVersions: AppVersion[] = [ export const appVersions: AppVersion[] = [
{ {
tag: "1.1.0", tag: '1.1.0',
ipfsHash: "bafybeiaffdxrxoex3qh7kirnkkufnvpafb4gmkt7mjxufnnpbrq6tmqoha", ipfsHash: 'bafybeiaffdxrxoex3qh7kirnkkufnvpafb4gmkt7mjxufnnpbrq6tmqoha',
releaseDate: "2025-11-06", releaseDate: '2025-11-06',
description: "Explorer and versioning features added", description: 'Explorer and versioning features added',
}, },
{ {
tag: "1.0.0", tag: '1.0.0',
ipfsHash: "bafybeiagfqnxnb5zdrks6dicfm7kxjdtzzzzm2ouluxgdseg2hrrotayzi", ipfsHash: 'bafybeiagfqnxnb5zdrks6dicfm7kxjdtzzzzm2ouluxgdseg2hrrotayzi',
releaseDate: "2023-01-28", releaseDate: '2023-01-28',
description: "Initial release", description: 'Initial release',
}, },
]; ];

View File

@@ -1,11 +1,11 @@
<script setup lang="ts"> <script setup lang="ts">
import { onMounted, watch } from "vue"; import { onMounted, watch } from 'vue';
import { useUser } from "@/composables/useUser"; import { useUser } from '@/composables/useUser';
import { useGraphQL } from "@/composables/useGraphQL"; import { useGraphQL } from '@/composables/useGraphQL';
import FormCard from "@/components/ui/FormCard.vue"; import FormCard from '@/components/ui/FormCard.vue';
import LoadingComponent from "@/components/ui/LoadingComponent.vue"; import LoadingComponent from '@/components/ui/LoadingComponent.vue';
import AnalyticsCard from "@/components/Explorer/AnalyticsCard.vue"; import AnalyticsCard from '@/components/Explorer/AnalyticsCard.vue';
import TransactionTable from "@/components/Explorer/TransactionTable.vue"; import TransactionTable from '@/components/Explorer/TransactionTable.vue';
const user = useUser(); const user = useUser();
const { network } = user; const { network } = user;
@@ -25,11 +25,11 @@ const {
} = useGraphQL(network); } = useGraphQL(network);
const transactionTypes = [ const transactionTypes = [
{ key: "all", label: "Todas" }, { key: 'all', label: 'Todas' },
{ key: "deposit", label: "Depósitos" }, { key: 'deposit', label: 'Depósitos' },
{ key: "lock", label: "Bloqueios" }, { key: 'lock', label: 'Bloqueios' },
{ key: "release", label: "Liberações" }, { key: 'release', label: 'Liberações' },
{ key: "return", label: "Retornos" }, { key: 'return', label: 'Retornos' },
]; ];
const handleTypeFilter = (type: string) => { const handleTypeFilter = (type: string) => {

View File

@@ -1,8 +1,8 @@
<script setup lang="ts"> <script setup lang="ts">
import type { Faq } from "@/model/Faq"; import type { Faq } from '@/model/Faq';
import { ref } from "vue"; import { ref } from 'vue';
import { marked } from "marked"; import { marked } from 'marked';
import faqContent from "@/utils/files/faqContent.json"; import faqContent from '@/utils/files/faqContent.json';
const faq = ref<Faq>(faqContent); const faq = ref<Faq>(faqContent);

View File

@@ -1,18 +1,18 @@
<script setup lang="ts"> <script setup lang="ts">
import SearchComponent from "@/components/BuyerSteps/BuyerSearchComponent.vue"; import SearchComponent from '@/components/BuyerSteps/BuyerSearchComponent.vue';
import LoadingComponent from "@/components/ui/LoadingComponent.vue"; import LoadingComponent from '@/components/ui/LoadingComponent.vue';
import BuyConfirmedComponent from "@/components/BuyerSteps/BuyConfirmedComponent.vue"; import BuyConfirmedComponent from '@/components/BuyerSteps/BuyConfirmedComponent.vue';
import { ref, onMounted, watch } from "vue"; import { ref, onMounted, watch } from 'vue';
import { useUser } from "@/composables/useUser"; import { useUser } from '@/composables/useUser';
import QrCodeComponent from "@/components/BuyerSteps/QrCodeComponent.vue"; import QrCodeComponent from '@/components/BuyerSteps/QrCodeComponent.vue';
import { addLock, releaseLock } from "@/blockchain/buyerMethods"; import { addLock, releaseLock } from '@/blockchain/buyerMethods';
import { updateWalletStatus, checkUnreleasedLock } from "@/blockchain/wallet"; import { updateWalletStatus, checkUnreleasedLock } from '@/blockchain/wallet';
import { getNetworksLiquidity } from "@/blockchain/events"; import { getNetworksLiquidity } from '@/blockchain/events';
import type { ValidDeposit } from "@/model/ValidDeposit"; import type { ValidDeposit } from '@/model/ValidDeposit';
import { getUnreleasedLockById } from "@/blockchain/events"; import { getUnreleasedLockById } from '@/blockchain/events';
import CustomAlert from "@/components/ui/CustomAlert.vue"; import CustomAlert from '@/components/ui/CustomAlert.vue';
import { getSolicitation } from "@/utils/bbPay"; import { getSolicitation } from '@/utils/bbPay';
import type { Address } from "viem"; import type { Address } from 'viem';
enum Step { enum Step {
Search, Search,
@@ -29,7 +29,7 @@ const flowStep = ref<Step>(Step.Search);
const participantID = ref<string>(); const participantID = ref<string>();
const sellerAddress = ref<Address>(); const sellerAddress = ref<Address>();
const tokenAmount = ref<number>(); const tokenAmount = ref<number>();
const lockID = ref<string>(""); const lockID = ref<string>('');
const loadingRelease = ref<boolean>(false); const loadingRelease = ref<boolean>(false);
const showModal = ref<boolean>(false); const showModal = ref<boolean>(false);
const showBuyAlert = ref<boolean>(false); const showBuyAlert = ref<boolean>(false);
@@ -78,7 +78,7 @@ const releaseTransaction = async (params: {
}; };
const checkForUnreleasedLocks = async (): Promise<void> => { const checkForUnreleasedLocks = async (): Promise<void> => {
if (!walletAddress.value) throw new Error("Wallet not connected"); if (!walletAddress.value) throw new Error('Wallet not connected');
const lock = await checkUnreleasedLock(walletAddress.value); const lock = await checkUnreleasedLock(walletAddress.value);
if (lock) { if (lock) {
lockID.value = String(lock.lockID); lockID.value = String(lock.lockID);
@@ -114,7 +114,7 @@ if (paramLockID) {
onMounted(async () => { onMounted(async () => {
await getNetworksLiquidity(); await getNetworksLiquidity();
if (walletAddress.value && !paramLockID) await checkForUnreleasedLocks(); if (walletAddress.value && !paramLockID) await checkForUnreleasedLocks();
window.history.state.lockID = ""; window.history.state.lockID = '';
}); });
</script> </script>

View File

@@ -1,19 +1,19 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted, watch } from "vue"; import { ref, onMounted, watch } from 'vue';
import { useUser } from "@/composables/useUser"; import { useUser } from '@/composables/useUser';
import ListingComponent from "@/components/ListingComponent/ListingComponent.vue"; import ListingComponent from '@/components/ListingComponent/ListingComponent.vue';
import LoadingComponent from "@/components/ui/LoadingComponent.vue"; import LoadingComponent from '@/components/ui/LoadingComponent.vue';
import CustomAlert from "@/components/ui/CustomAlert.vue"; import CustomAlert from '@/components/ui/CustomAlert.vue';
import { import {
listValidDepositTransactionsByWalletAddress, listValidDepositTransactionsByWalletAddress,
listAllTransactionByWalletAddress, listAllTransactionByWalletAddress,
getActiveLockAmount, getActiveLockAmount,
} from "@/blockchain/wallet"; } from '@/blockchain/wallet';
import { withdrawDeposit } from "@/blockchain/buyerMethods"; import { withdrawDeposit } from '@/blockchain/buyerMethods';
import type { ValidDeposit } from "@/model/ValidDeposit"; import type { ValidDeposit } from '@/model/ValidDeposit';
import type { WalletTransaction } from "@/model/WalletTransaction"; import type { WalletTransaction } from '@/model/WalletTransaction';
import router from "@/router/index"; import router from '@/router/index';
const user = useUser(); const user = useUser();
const { walletAddress, network, selectedToken } = user; const { walletAddress, network, selectedToken } = user;
@@ -38,11 +38,11 @@ const callWithdraw = async (amount: string) => {
} }
if (withdraw) { if (withdraw) {
console.log("Saque realizado!"); console.log('Saque realizado!');
await getWalletTransactions(); await getWalletTransactions();
showAlert.value = true; showAlert.value = true;
} else { } else {
console.log("Não foi possível realizar o saque!"); console.log('Não foi possível realizar o saque!');
} }
loadingWithdraw.value = false; loadingWithdraw.value = false;
} }
@@ -73,7 +73,7 @@ const getWalletTransactions = async () => {
onMounted(async () => { onMounted(async () => {
if (!walletAddress.value) { if (!walletAddress.value) {
router.push({ name: "home" }); router.push({ name: 'home' });
} }
await getWalletTransactions(); await getWalletTransactions();
}); });

View File

@@ -1,13 +1,13 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref } from "vue"; import { ref } from 'vue';
import SellerComponent from "@/components/SellerSteps/SellerComponent.vue"; import SellerComponent from '@/components/SellerSteps/SellerComponent.vue';
import SendNetwork from "@/components/SellerSteps/SendNetwork.vue"; import SendNetwork from '@/components/SellerSteps/SendNetwork.vue';
import LoadingComponent from "@/components/ui/LoadingComponent.vue"; import LoadingComponent from '@/components/ui/LoadingComponent.vue';
import { useUser } from "@/composables/useUser"; import { useUser } from '@/composables/useUser';
import { approveTokens, addDeposit } from "@/blockchain/sellerMethods"; import { approveTokens, addDeposit } from '@/blockchain/sellerMethods';
import CustomAlert from "@/components/ui/CustomAlert.vue"; import CustomAlert from '@/components/ui/CustomAlert.vue';
import type { Participant } from "@/utils/bbPay"; import type { Participant } from '@/utils/bbPay';
enum Step { enum Step {
Search, Search,

View File

@@ -1,7 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted } from "vue"; import { ref, onMounted } from 'vue';
import { appVersions, getIpfsUrl, getLatestVersion } from "@/utils/versions"; import { appVersions, getIpfsUrl, getLatestVersion } from '@/utils/versions';
import type { AppVersion } from "@/model/AppVersion"; import type { AppVersion } from '@/model/AppVersion';
const versions = ref<AppVersion[]>([]); const versions = ref<AppVersion[]>([]);
const latestVersion = ref<AppVersion | null>(null); const latestVersion = ref<AppVersion | null>(null);
@@ -17,15 +17,15 @@ onMounted(() => {
const openIpfsVersion = (ipfsHash: string) => { const openIpfsVersion = (ipfsHash: string) => {
const url = getIpfsUrl(ipfsHash); const url = getIpfsUrl(ipfsHash);
window.open(url, "_blank", "noopener,noreferrer"); window.open(url, '_blank', 'noopener,noreferrer');
}; };
const formatDate = (dateString: string): string => { const formatDate = (dateString: string): string => {
const date = new Date(dateString); const date = new Date(dateString);
return date.toLocaleDateString("pt-BR", { return date.toLocaleDateString('pt-BR', {
year: "numeric", year: 'numeric',
month: "long", month: 'long',
day: "numeric", day: 'numeric',
}); });
}; };
</script> </script>

View File

@@ -1,6 +1,6 @@
/** @type {import('tailwindcss').Config} */ /** @type {import('tailwindcss').Config} */
export default { export default {
content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}", "./src/**/*.vue"], content: ['./index.html', './src/**/*.{js,ts,jsx,tsx}', './src/**/*.vue'],
theme: { theme: {
extend: {}, extend: {},
}, },

View File

@@ -1,46 +1,46 @@
import { fileURLToPath, URL } from "node:url"; import { fileURLToPath, URL } from 'node:url';
import { execSync } from "node:child_process"; import { execSync } from 'node:child_process';
import { defineConfig } from "vite"; import { defineConfig } from 'vite';
import vue from "@vitejs/plugin-vue"; import vue from '@vitejs/plugin-vue';
import vueJsx from "@vitejs/plugin-vue-jsx"; import vueJsx from '@vitejs/plugin-vue-jsx';
import tailwindcss from "@tailwindcss/vite"; import tailwindcss from '@tailwindcss/vite';
import svgLoader from "vite-svg-loader"; import svgLoader from 'vite-svg-loader';
function sh(cmd: string): string { function sh(cmd: string): string {
try { try {
return execSync(cmd, { stdio: ["ignore", "pipe", "ignore"] }) return execSync(cmd, { stdio: ['ignore', 'pipe', 'ignore'] })
.toString() .toString()
.trim(); .trim();
} catch { } catch {
return ""; return '';
} }
} }
function getAppVersion(): string { function getAppVersion(): string {
const tag = sh("git tag --sort=-version:refname").split("\n")[0] || ""; const tag = sh('git tag --sort=-version:refname').split('\n')[0] || '';
const shortSha = sh("git rev-parse --short HEAD"); const shortSha = sh('git rev-parse --short HEAD');
const tagSha = tag ? sh(`git rev-list -n 1 ${tag}`) : ""; const tagSha = tag ? sh(`git rev-list -n 1 ${tag}`) : '';
const headSha = sh("git rev-parse HEAD"); const headSha = sh('git rev-parse HEAD');
if (tag && tagSha === headSha) return tag; if (tag && tagSha === headSha) return tag;
if (tag && shortSha) return `${tag}+${shortSha}`; if (tag && shortSha) return `${tag}+${shortSha}`;
return shortSha || "dev"; return shortSha || 'dev';
} }
// https://vitejs.dev/config/ // https://vitejs.dev/config/
export default defineConfig({ export default defineConfig({
base: "./", base: './',
build: { build: {
target: "esnext", target: 'esnext',
}, },
define: { define: {
__APP_VERSION__: JSON.stringify(getAppVersion()), __APP_VERSION__: JSON.stringify(getAppVersion()),
}, },
optimizeDeps: { optimizeDeps: {
esbuildOptions: { esbuildOptions: {
target: "esnext", target: 'esnext',
define: { define: {
global: "globalThis", global: 'globalThis',
}, },
supported: { supported: {
bigint: true, bigint: true,
@@ -50,9 +50,9 @@ export default defineConfig({
plugins: [vue(), vueJsx(), tailwindcss(), svgLoader()], plugins: [vue(), vueJsx(), tailwindcss(), svgLoader()],
resolve: { resolve: {
alias: { alias: {
"@": fileURLToPath(new URL("./src", import.meta.url)), '@': fileURLToPath(new URL('./src', import.meta.url)),
"viem/errors": fileURLToPath( 'viem/errors': fileURLToPath(
new URL("./node_modules/viem/errors", import.meta.url), new URL('./node_modules/viem/errors', import.meta.url),
), ),
}, },
}, },

View File

@@ -1,12 +1,12 @@
import { defineConfig } from "@wagmi/cli"; import { defineConfig } from '@wagmi/cli';
import { hardhat } from "@wagmi/cli/plugins"; import { hardhat } from '@wagmi/cli/plugins';
export default defineConfig({ export default defineConfig({
out: "src/blockchain/abi.ts", out: 'src/blockchain/abi.ts',
contracts: [], contracts: [],
plugins: [ plugins: [
hardhat({ hardhat({
project: "p2pix-smart-contracts", project: 'p2pix-smart-contracts',
}), }),
], ],
}); });