Improve boursecu transactions filters and list display.

Align withdrawal status options with deposit, limit product filter to trades and physical delivery tabs, and hide gold amount in transaction rows.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-06 11:10:50 +02:00
co-authored by Cursor
parent 0bddc5746e
commit 2caaa6ea0d
3 changed files with 18 additions and 5 deletions
@@ -15,7 +15,7 @@
<p class="dtxn-row__title">{{ props.item.title }}</p>
<div class="dtxn-row__meta">
<span>{{ toJalaliOutOfUTC(props.item.expire_at) }}</span>
<span :class="goldAmount >= 0 ? 'text-green-600' : 'text-red-600'">
<span v-if="!isBoursecu" :class="goldAmount >= 0 ? 'text-green-600' : 'text-red-600'">
{{ formatTransactionGoldAmount(props.item, goldAmount) }} {{ props.item.unit }}
</span>
<span v-if="isGold">
@@ -54,8 +54,9 @@
<div>{{ props.item.title }}</div>
<div>{{ toJalaliOutOfUTC(props.item.expire_at) }}</div>
</div>
<div class="flex justify-between mt-2">
<div :class="['flex mt-2', isBoursecu ? 'justify-end' : 'justify-between']">
<div
v-if="!isBoursecu"
:class="goldAmount >= 0 ? 'text-green-600' : 'text-red-600'"
class="text-gray-500 text-xs number-ltr"
>
@@ -127,8 +128,11 @@ import { computed, ref } from 'vue'
import BasicButton from '@/components/BasicPacks/BasicButton.vue'
import type { Transaction } from '@/models/transaction'
import { toJalaliOutOfUTC } from '@/utils/useDateTime'
import { isBoursecuProject } from '@/utils/config'
import TransactionDetailPanel from './TransactionDetailPanel.vue'
const isBoursecu = isBoursecuProject()
const infoVisible = ref(false)
const props = withDefaults(
@@ -7,6 +7,7 @@ import {
BOURSECU_TRANSACTION_TABS,
getBoursecuStatusFilterGroup,
getBoursecuStatusOptionsForTab,
boursecuTabSupportsProductFilter,
type BoursecuTradeSide,
type BoursecuTransactionTab,
type BoursecuTransactionTabId,
@@ -92,7 +93,7 @@ export function useTransactionsPageProvider(options?: { boursecu?: boolean }) {
)
const showProductFilter = computed(
() => transactionsBoursecuMode.value && activeTab.value.id !== 'deposit',
() => transactionsBoursecuMode.value && boursecuTabSupportsProductFilter(activeTab.value),
)
const emptyText = computed(() => {
@@ -129,6 +130,10 @@ export function useTransactionsPageProvider(options?: { boursecu?: boolean }) {
transactionStatusFilter.value = undefined
}
if (boursecuTabSupportsProductFilter(currentTab) && !boursecuTabSupportsProductFilter(nextTab)) {
transactionProductFilter.value = undefined
}
transactionActiveTabId.value = tabId
await reloadTransactionsTable()
}
@@ -85,7 +85,7 @@ const TRADE_TYPE_BY_SIDE: Record<BoursecuTradeSide, number> = {
}
export function getBoursecuStatusFilterGroup(tab: BoursecuTransactionTab): BoursecuStatusFilterGroup {
return tab.id === 'withdrawal' || tab.id === 'physical' ? 'fulfillment' : 'trade'
return tab.id === 'physical' ? 'fulfillment' : 'trade'
}
export function getBoursecuStatusOptionsForTab(
@@ -96,6 +96,10 @@ export function getBoursecuStatusOptionsForTab(
: BOURSECU_TRADE_STATUS_OPTIONS
}
export function boursecuTabSupportsProductFilter(tab: BoursecuTransactionTab): boolean {
return tab.id === 'trades' || tab.id === 'physical'
}
function getBoursecuStatusFilterField(tab: BoursecuTransactionTab): string {
if (tab.fetchMode === 'deposit') {
return 'sts'
@@ -172,7 +176,7 @@ export function buildBoursecuTransactionPagination(
})
}
if (productId != null && tab.id !== 'deposit') {
if (productId != null && boursecuTabSupportsProductFilter(tab)) {
filters.push({
field: 'wallet.product_id',
cr: 'and',