Files
boursecu_user/src/utils/usePrice.ts
T

82 lines
2.2 KiB
TypeScript
Raw Normal View History

2026-01-18 13:01:46 +03:30
export function usePrice(price: number, digit = true, unit = 'ریال') {
price= price??0
let _price = price.toString()
if (digit) {
_price = _price.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',')
}
return `${_price} ${unit}`
}
export function usePriceWithoutType(price?: number, digit = true, unit = 'ریال') {
let _price = price?.toString()
if (digit) {
_price = _price?.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',')
}
return `${_price}`
}
export function useTowDecimal(num: string | number): string | number {
const temp = num.toString().match(/^-?\d+(?:\.\d{0,2})?/)
if (temp && temp.length > 0) return temp[0]
return Math.round(+num * 100) / 100
}
export function useFormat(num: string | number, unit = '') {
return usePrice(Math.abs(+useTowDecimal(num)), true, unit)
}
2026-06-14 19:11:37 +03:30
type TransactionPriceSource = {
cash?: number | null
gold?: number | null
order?: {
price?: number | null
total_price?: number | null
amount?: number | null
} | null
}
export function getTransactionTradePrice(item: TransactionPriceSource): number {
const orderPrice = Number(item.order?.price)
if (Number.isFinite(orderPrice) && orderPrice > 0) {
return Math.round(orderPrice)
}
const cashAmount = Math.abs(Number(item.cash) || 0)
const goldAmount =
Math.abs(Number(item.gold) || 0) || Math.abs(Number(item.order?.amount) || 0)
if (goldAmount > 0 && cashAmount > 0) {
return Math.round(cashAmount / goldAmount)
}
const totalPrice = Number(item.order?.total_price)
if (Number.isFinite(totalPrice) && totalPrice > 0) {
return Math.round(totalPrice)
}
return 0
}
export function getTransactionGoldAmount(item: TransactionPriceSource): number {
const gold = Number(item.gold) || 0
if (Math.abs(gold) > 0) {
return gold
}
const orderAmount = Number(item.order?.amount) || 0
if (orderAmount > 0) {
const cash = Number(item.cash) || 0
if (cash < 0) return orderAmount
if (cash > 0) return -orderAmount
return orderAmount
}
return gold
}
export function formatGoldAmount(amount?: number | null): string {
const num = Number(amount)
if (!Number.isFinite(num)) return '0'
return String(Number(num.toFixed(3)))
}