From 4ebbc048f1a2d6fb4dd58bd990ee47751eb694cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Rafael=20Siqueira?= Date: Thu, 25 Dec 2025 23:23:34 -0300 Subject: [PATCH] review --- .../_.$orgid.enrollments.buy/assigned.tsx | 14 +++++-- .../routes/_.$orgid.enrollments.buy/bulk.tsx | 18 +++++++-- .../_.$orgid.enrollments.buy/payment.tsx | 9 +++-- .../_.$orgid.enrollments.buy/review.tsx | 39 +++++++++++++++---- 4 files changed, 61 insertions(+), 19 deletions(-) diff --git a/apps/admin.saladeaula.digital/app/routes/_.$orgid.enrollments.buy/assigned.tsx b/apps/admin.saladeaula.digital/app/routes/_.$orgid.enrollments.buy/assigned.tsx index 4889ae3..cf9423a 100644 --- a/apps/admin.saladeaula.digital/app/routes/_.$orgid.enrollments.buy/assigned.tsx +++ b/apps/admin.saladeaula.digital/app/routes/_.$orgid.enrollments.buy/assigned.tsx @@ -1,5 +1,10 @@ import { Fragment } from 'react' -import { Trash2Icon, PlusIcon, CircleQuestionMarkIcon } from 'lucide-react' +import { + Trash2Icon, + PlusIcon, + CircleQuestionMarkIcon, + ArrowRightIcon +} from 'lucide-react' import { useForm, useFieldArray, Controller, useWatch } from 'react-hook-form' import { useParams } from 'react-router' import { ErrorMessage } from '@hookform/error-message' @@ -58,7 +63,7 @@ type Schema = z.infer type AssignedProps = { onSubmit: (value: any) => void | Promise courses: Promise<{ hits: Course[] }> - defaultValues?: { enrollments: object[] } + defaultValues?: { enrollments: object[]; coupon?: object } } export function Assigned({ courses, onSubmit, defaultValues }: AssignedProps) { @@ -67,6 +72,7 @@ export function Assigned({ courses, onSubmit, defaultValues }: AssignedProps) { const form = useForm({ resolver: zodResolver(formSchemaAssigned), defaultValues: { + coupon: defaultValues?.coupon || {}, enrollments: defaultValues?.enrollments?.map((e: any) => ({ ...e, scheduled_for: e.scheduled_for ? new Date(e.scheduled_for) : undefined @@ -74,7 +80,6 @@ export function Assigned({ courses, onSubmit, defaultValues }: AssignedProps) { } }) - console.log(defaultValues) const { formState, control, handleSubmit, setValue } = form const { fields, remove, append } = useFieldArray({ control, @@ -263,11 +268,12 @@ export function Assigned({ courses, onSubmit, defaultValues }: AssignedProps) {
diff --git a/apps/admin.saladeaula.digital/app/routes/_.$orgid.enrollments.buy/bulk.tsx b/apps/admin.saladeaula.digital/app/routes/_.$orgid.enrollments.buy/bulk.tsx index 80ff803..1d69c27 100644 --- a/apps/admin.saladeaula.digital/app/routes/_.$orgid.enrollments.buy/bulk.tsx +++ b/apps/admin.saladeaula.digital/app/routes/_.$orgid.enrollments.buy/bulk.tsx @@ -1,5 +1,11 @@ import { Fragment } from 'react' -import { MinusIcon, PlusIcon, Trash2Icon, XIcon } from 'lucide-react' +import { + ArrowRightIcon, + MinusIcon, + PlusIcon, + Trash2Icon, + XIcon +} from 'lucide-react' import { useForm, useFieldArray, @@ -38,7 +44,7 @@ const emptyRow = { type BulkProps = { onSubmit: (value: any) => void | Promise courses: Promise<{ hits: Course[] }> - defaultValues?: { items: object[] } + defaultValues?: { items: object[]; coupon?: object } } const item = z.object({ @@ -73,7 +79,10 @@ export function Bulk({ courses, onSubmit, defaultValues }: BulkProps) { const wizard = useWizard() const form = useForm({ resolver: zodResolver(formSchema), - defaultValues: { items: defaultValues?.items || [emptyRow] } + defaultValues: { + items: defaultValues?.items || [emptyRow], + coupon: defaultValues?.coupon || {} + } }) const { formState, @@ -292,11 +301,12 @@ export function Bulk({ courses, onSubmit, defaultValues }: BulkProps) {
diff --git a/apps/admin.saladeaula.digital/app/routes/_.$orgid.enrollments.buy/payment.tsx b/apps/admin.saladeaula.digital/app/routes/_.$orgid.enrollments.buy/payment.tsx index 7a594b0..3245a45 100644 --- a/apps/admin.saladeaula.digital/app/routes/_.$orgid.enrollments.buy/payment.tsx +++ b/apps/admin.saladeaula.digital/app/routes/_.$orgid.enrollments.buy/payment.tsx @@ -2,6 +2,7 @@ import { useForm, Controller } from 'react-hook-form' import { zodResolver } from '@hookform/resolvers/zod' import { ErrorMessage } from '@hookform/error-message' import z from 'zod' +import { ArrowRightIcon } from 'lucide-react' import { Button } from '@repo/ui/components/ui/button' import { Label } from '@repo/ui/components/ui/label' @@ -39,7 +40,7 @@ export function Payment({ onSubmit, defaultValues }: PaymentProps) { } return ( -
+ -
+
- +
) diff --git a/apps/admin.saladeaula.digital/app/routes/_.$orgid.enrollments.buy/review.tsx b/apps/admin.saladeaula.digital/app/routes/_.$orgid.enrollments.buy/review.tsx index 1b22de4..79c24e6 100644 --- a/apps/admin.saladeaula.digital/app/routes/_.$orgid.enrollments.buy/review.tsx +++ b/apps/admin.saladeaula.digital/app/routes/_.$orgid.enrollments.buy/review.tsx @@ -1,4 +1,3 @@ -import { useWizard } from '@/components/wizard' import { Currency } from '@repo/ui/components/currency' import { Button } from '@repo/ui/components/ui/button' import { Separator } from '@repo/ui/components/ui/separator' @@ -12,13 +11,29 @@ import { TableRow } from '@repo/ui/components/ui/table' +import { useWizard } from '@/components/wizard' + +import { applyDiscount } from './discount' + type ReviewProps = { state: any } export function Review({ state }: ReviewProps) { const wizard = useWizard() - // console.log(state) + const { coupon, items } = state.cart || { items: [], coupon: {} } + const subtotal = + items?.reduce( + (acc, { course, quantity }) => + acc + + (course?.unit_price || 0) * + (Number.isFinite(quantity) && quantity > 0 ? quantity : 1), + 0 + ) || 0 + const discount = coupon + ? applyDiscount(subtotal, coupon.amount, coupon.type) * -1 + : 0 + const total = subtotal > 0 ? subtotal + discount : 0 return ( <> @@ -32,7 +47,7 @@ export function Review({ state }: ReviewProps) { - {state?.cart?.items?.map(({ course, quantity }, index) => { + {items?.map(({ course, quantity }, index) => { return ( {course.name} @@ -52,26 +67,32 @@ export function Review({ state }: ReviewProps) { Subtotal - .. + + {subtotal} + Descontos - .. + + {discount} + Total - .. + + {total} + -
+
- +
)