Files
boursecu_admin/src/utils/productOrderLimit.ts
T
2026-07-08 18:24:55 +03:30

90 lines
2.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const PERSIAN_DIGITS = '۰۱۲۳۴۵۶۷۸۹'
const ARABIC_DIGITS = '٠١٢٣٤٥٦٧٨٩'
function toAsciiDigits(value: string): string {
return value
.replace(/[۰-۹]/g, (d) => String(PERSIAN_DIGITS.indexOf(d)))
.replace(/[٠-٩]/g, (d) => String(ARABIC_DIGITS.indexOf(d)))
}
/** پارس مبلغ محدودیت سفارش — ارقام فارسی/عربی و جداکننده هزارگان */
export function parseOrderLimitCashValue(value: unknown): number | undefined {
if (value === undefined || value === null || value === '') {
return undefined
}
const raw = toAsciiDigits(String(value).trim().replace(/[,\s٬]/g, ''))
if (raw === '') {
return undefined
}
const num = Number(raw)
if (!Number.isFinite(num) || num < 0) {
return undefined
}
return Math.trunc(num)
}
function orderLimitInputsPresent(form: {
min_order_cash?: number | string | null
max_order_cash?: number | string | null
}): boolean {
return (
(form.min_order_cash != null && form.min_order_cash !== '') ||
(form.max_order_cash != null && form.max_order_cash !== '')
)
}
export function validateProductOrderLimitForm(form: {
order_limit_enabled?: boolean
min_order_cash?: number | string | null
max_order_cash?: number | string | null
}): string | null {
const enabled = !!form.order_limit_enabled || orderLimitInputsPresent(form)
if (!enabled) return null
const rawMin = form.min_order_cash
const rawMax = form.max_order_cash
const hasMinInput = rawMin != null && rawMin !== ''
const hasMaxInput = rawMax != null && rawMax !== ''
const min = parseOrderLimitCashValue(rawMin)
const max = parseOrderLimitCashValue(rawMax)
if (hasMinInput && min == null) {
return 'حداقل مبلغ سفارش نامعتبر است'
}
if (hasMaxInput && max == null) {
return 'حداکثر مبلغ سفارش نامعتبر است'
}
if (min == null && max == null) {
return 'با فعال بودن محدودیت مبلغ سفارش، حداقل یکی از حداقل یا حداکثر مبلغ باید وارد شود'
}
if (min != null && max != null && min > max) {
return 'حداقل مبلغ نمی‌تواند بیشتر از حداکثر باشد'
}
return null
}
export function normalizeProductOrderLimitForm<T extends Record<string, any>>(data: T): T {
const min = parseOrderLimitCashValue(data.min_order_cash)
const max = parseOrderLimitCashValue(data.max_order_cash)
const enabled = !!data.order_limit_enabled || min != null || max != null
data.order_limit_enabled = enabled
if (!enabled) {
data.min_order_cash = undefined
data.max_order_cash = undefined
} else {
data.min_order_cash = min
data.max_order_cash = max
}
return data
}