From a233ddb769dbd3aaa5c98404751c47a9f749a228 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Qu=E1=BB=91c=20Kh=C3=A1nh?= Date: Sat, 21 Sep 2024 23:28:26 +0700 Subject: [PATCH] fix(mobile): prevent set budget amount zero (#346) Resolves https://github.com/get6pm/6pm/issues/322 --- apps/mobile/app/(app)/budget/[budgetId]/index.tsx | 2 +- apps/mobile/stores/budget/hooks.tsx | 15 +++++++++------ packages/validation/src/budget.zod.ts | 4 ++-- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/apps/mobile/app/(app)/budget/[budgetId]/index.tsx b/apps/mobile/app/(app)/budget/[budgetId]/index.tsx index e9f26466..4097c211 100644 --- a/apps/mobile/app/(app)/budget/[budgetId]/index.tsx +++ b/apps/mobile/app/(app)/budget/[budgetId]/index.tsx @@ -93,7 +93,7 @@ export default function BudgetDetailScreen() { push > diff --git a/apps/mobile/stores/budget/hooks.tsx b/apps/mobile/stores/budget/hooks.tsx index 9f598969..bce428b5 100644 --- a/apps/mobile/stores/budget/hooks.tsx +++ b/apps/mobile/stores/budget/hooks.tsx @@ -307,12 +307,15 @@ export function useBudgetPeriodStats( const remainingAmount = budgetAmount.add(totalBudgetUsage) - const usagePercentage = ( - totalBudgetUsage.gt(0) ? new Decimal(0) : totalBudgetUsage.abs() - ) - .div(budgetAmount!) - .mul(100) - .toNumber() + const usagePercentage = useMemo(() => { + if (budgetAmount.eq(0)) { + return 0 + } + return (totalBudgetUsage.gt(0) ? new Decimal(0) : totalBudgetUsage.abs()) + .div(budgetAmount!) + .mul(100) + .toNumber() + }, [totalBudgetUsage, budgetAmount]) const averageAmountPerDay = budgetAmount.div( dayjsExtended(periodConfig?.endDate!).diff( diff --git a/packages/validation/src/budget.zod.ts b/packages/validation/src/budget.zod.ts index 02e4f24d..82ef8031 100644 --- a/packages/validation/src/budget.zod.ts +++ b/packages/validation/src/budget.zod.ts @@ -15,7 +15,7 @@ export const zCreateBudget = z.object({ amount: z .string({ coerce: true }) .transform((val) => Number(`${val}`.replace(',', '.'))) - .pipe(z.number({ coerce: true }).min(0)) + .pipe(z.number({ coerce: true }).min(1)) .optional(), startDate: z.date({ coerce: true }).optional(), endDate: z.date({ coerce: true }).optional(), @@ -41,7 +41,7 @@ export const zUpdateBudget = z.object({ amount: z .string({ coerce: true }) .transform((val) => Number(`${val}`.replace(',', '.'))) - .pipe(z.number({ coerce: true }).min(0)) + .pipe(z.number({ coerce: true }).min(1)) .optional(), startDate: z.date({ coerce: true }).optional(), endDate: z.date({ coerce: true }).optional(),