From e7183645bfccfd57632338c7ad14390a46dad00b Mon Sep 17 00:00:00 2001
From: dappvibe <57523522+dappvibe@users.noreply.github.com>
Date: Mon, 2 Mar 2026 08:53:10 +0000
Subject: [PATCH] Refactor: use named constants for Deal state
Replaced hardcoded magic numbers for deal states with a defined
DealState constant object. Exported DealState from src/model/Deal.js
and refactored src/pages/Me/UserDeals.tsx to utilize these constants
instead of fragile index-based mapping. Updated UserDeals.test.tsx
to mock the DealState successfully.
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
---
src/model/Deal.js | 13 ++++++++++++-
src/pages/Me/UserDeals.test.tsx | 10 ++++++++++
src/pages/Me/UserDeals.tsx | 17 +++++++++++++----
3 files changed, 35 insertions(+), 5 deletions(-)
diff --git a/src/model/Deal.js b/src/model/Deal.js
index 82d4d39e..7561a058 100644
--- a/src/model/Deal.js
+++ b/src/model/Deal.js
@@ -1,3 +1,14 @@
+export const DealState = {
+ Created: 0,
+ Accepted: 1,
+ Funded: 2,
+ Paid: 3,
+ Disputed: 4,
+ Cancelled: 5,
+ Resolved: 6,
+ Released: 7,
+}
+
export default class Deal {
constructor(contract) {
this.contract = contract
@@ -32,7 +43,7 @@ export default class Deal {
this.taker = taker
this.tokenAmount = Number(tokenAmount)
this.fiatAmount = Number(fiatAmount) / 10 ** 6 // FIXME test with large input
- this.state = Number(state) // FIXME constants
+ this.state = Number(state)
this.paymentInstructions = paymentInstructions
this.allowCancelUnacceptedAfter = new Date(Number(allowCancelUnacceptedAfter) * 1000)
this.allowCancelUnpaidAfter = new Date(Number(allowCancelUnpaidAfter) * 1000)
diff --git a/src/pages/Me/UserDeals.test.tsx b/src/pages/Me/UserDeals.test.tsx
index a168ba32..fd2e6f11 100644
--- a/src/pages/Me/UserDeals.test.tsx
+++ b/src/pages/Me/UserDeals.test.tsx
@@ -17,6 +17,16 @@ vi.mock('@/hooks/useContract', () => ({
// Mock models
vi.mock('@/model/Deal.js', () => {
return {
+ DealState: {
+ Created: 0,
+ Accepted: 1,
+ Funded: 2,
+ Paid: 3,
+ Disputed: 4,
+ Cancelled: 5,
+ Resolved: 6,
+ Released: 7,
+ },
default: class Deal {
// mocked constructor
constructor(c) {
diff --git a/src/pages/Me/UserDeals.tsx b/src/pages/Me/UserDeals.tsx
index c8139a1f..0a56651e 100644
--- a/src/pages/Me/UserDeals.tsx
+++ b/src/pages/Me/UserDeals.tsx
@@ -1,14 +1,23 @@
import { Link } from 'react-router-dom'
import { Empty, List, Skeleton, Tag } from 'antd'
import React, { useEffect, useState } from 'react'
-import Deal from '@/model/Deal.js'
+import Deal, { DealState } from '@/model/Deal.js'
import { useAccount } from 'wagmi'
import { useContract } from '@/hooks/useContract'
import Offer from '@/model/Offer.js'
-function StateTag(args) {
- const index = ['Initiated', 'Accepted', 'Funded', 'Paid', 'Disputed', 'Canceled', 'Resolved', 'Completed']
- return {index[args.state]}
+function StateTag({ state }: { state: number }) {
+ const stateNames = {
+ [DealState.Created]: 'Initiated',
+ [DealState.Accepted]: 'Accepted',
+ [DealState.Funded]: 'Funded',
+ [DealState.Paid]: 'Paid',
+ [DealState.Disputed]: 'Disputed',
+ [DealState.Cancelled]: 'Canceled',
+ [DealState.Resolved]: 'Resolved',
+ [DealState.Released]: 'Completed',
+ }
+ return {stateNames[state]}
}
function DealItem({ deal }) {