Files
ghatreh_user/src/utils/productTradeOpen.ts
T

66 lines
2.2 KiB
TypeScript

import type { Product } from '@/models/products'
import { isOutsideProductActivationWindow } from '@/utils/storeHours'
type TradeOpenProduct = Pick<Product, 'open_buy' | 'open_sell'> | null | undefined
function asBool(value: boolean | number | null | undefined) {
return value === true || Number(value) === 1
}
export function isProductBuyOpen(product: TradeOpenProduct) {
if (!product) return true
return asBool(product?.open_buy)
}
export function isProductSellOpen(product: TradeOpenProduct) {
if (!product) return true
return asBool(product?.open_sell)
}
export function isAnyProductTradeOpen(product: TradeOpenProduct) {
return isProductBuyOpen(product) || isProductSellOpen(product)
}
export function isProductTradeOpen(product: TradeOpenProduct, isBuy: boolean) {
return isBuy ? isProductBuyOpen(product) : isProductSellOpen(product)
}
/** ساعت فعال‌سازی محصول: بازهٔ auto_open/auto_close، بعد فلگ استریم */
export function isProductTradingHoursOpen(
product?: {
show?: boolean
trade_open?: boolean
auto_open_at?: string | null
auto_close_at?: string | null
} | null,
) {
if (!product) return false
if (isOutsideProductActivationWindow(product)) return false
if (typeof product.trade_open === 'boolean') return product.trade_open
return product.show === true
}
export function productHoursClosedMessage() {
return 'این محصول در حال حاضر خارج از ساعت کاری است.'
}
/** تب اولیه با توجه به query و وضعیت باز/بسته خرید و فروش */
export function resolveProductTradeIsBuy(product: TradeOpenProduct, routeState?: string | null) {
const wantSell = routeState === 'sell'
const wantBuy = routeState === 'buy'
const buyOpen = isProductBuyOpen(product)
const sellOpen = isProductSellOpen(product)
if (wantSell && sellOpen) return false
if (wantBuy && buyOpen) return true
if (buyOpen) return true
if (sellOpen) return false
return true
}
export function productTradeClosedMessage(isBuy: boolean) {
return isBuy
? 'خرید این محصول در این لحظه مقدور نمی‌باشد'
: 'فروش این محصول در این لحظه مقدور نمی‌باشد'
}