From 059a8921d5ec42ec468744f849ff5ca831ba1dcd Mon Sep 17 00:00:00 2001 From: "web@ppanel" Date: Fri, 15 Nov 2024 01:42:16 +0700 Subject: [PATCH] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20perf(subscribe):=20Form=20?= =?UTF-8?q?discount=20price?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dashboard/subscribe/subscribe-form.tsx | 29 ++++++++++++++++++- apps/admin/locales/en-US/subscribe.json | 1 + apps/admin/locales/zh-CN/subscribe.json | 1 + 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/apps/admin/app/dashboard/subscribe/subscribe-form.tsx b/apps/admin/app/dashboard/subscribe/subscribe-form.tsx index cf02653..ba08625 100644 --- a/apps/admin/app/dashboard/subscribe/subscribe-form.tsx +++ b/apps/admin/app/dashboard/subscribe/subscribe-form.tsx @@ -5,7 +5,7 @@ import { Combobox } from '@repo/ui/combobox'; import { ArrayInput } from '@repo/ui/dynamic-Inputs'; import { JSONEditor } from '@repo/ui/editor'; import { EnhancedInput } from '@repo/ui/enhanced-input'; -import { unitConversion } from '@repo/ui/utils'; +import { evaluateWithPrecision, unitConversion } from '@repo/ui/utils'; import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from '@shadcn/ui/accordion'; import { Button } from '@shadcn/ui/button'; import { Checkbox } from '@shadcn/ui/checkbox'; @@ -448,6 +448,33 @@ export default function SubscribeForm>({ max: 100, placeholder: t('form.discountPercent'), suffix: '%', + calculateValue: (data) => { + const { unit_price } = form.getValues(); + return { + ...data, + price: evaluateWithPrecision( + `${unit_price} * ${data.months} * ${data.discount} / 100`, + ), + }; + }, + }, + { + name: 'price', + placeholder: t('form.discount_price'), + type: 'number', + min: 0, + formatInput: (value) => unitConversion('centsToDollars', value), + formatOutput: (value) => unitConversion('dollarsToCents', value), + internal: true, + calculateValue: (data) => { + const { unit_price } = form.getValues(); + return { + ...data, + discount: evaluateWithPrecision( + `${data.price} / ${data.months} / ${unit_price} * 100`, + ), + }; + }, }, ]} value={field.value} diff --git a/apps/admin/locales/en-US/subscribe.json b/apps/admin/locales/en-US/subscribe.json index 6e9775c..1f9b746 100644 --- a/apps/admin/locales/en-US/subscribe.json +++ b/apps/admin/locales/en-US/subscribe.json @@ -21,6 +21,7 @@ "discountDescription": "Set discount based on unit price", "discountMonths": "Months", "discountPercent": "Discount Percentage", + "discount_price": "Discount Price", "duration": "Duration (months)", "inventory": "Inventory", "name": "Name", diff --git a/apps/admin/locales/zh-CN/subscribe.json b/apps/admin/locales/zh-CN/subscribe.json index f51ef98..16aaba3 100644 --- a/apps/admin/locales/zh-CN/subscribe.json +++ b/apps/admin/locales/zh-CN/subscribe.json @@ -21,6 +21,7 @@ "discountDescription": "基于单价设置折扣", "discountMonths": "月", "discountPercent": "折扣比", + "discount_price": "折扣价格", "duration": "时长(月)", "inventory": "库存", "name": "名称",