import { jsxs, jsx } from "react/jsx-runtime"; import { I as InputError } from "./input-error-D1JIzedA.js"; import { L as LoadingButton } from "./loading-button-CCIxhJrY.js"; import { B as Button } from "./button-CdJZJLGw.js"; import { D as Dialog, a as DialogTrigger, b as DialogContent, c as DialogHeader, d as DialogTitle, e as DialogFooter, f as DialogClose } from "./dialog-DGP_3dPQ.js"; import { I as Input } from "./input-BsvJqbcd.js"; import { L as Label } from "./label-0rIIfpX0.js"; import { S as Select, a as SelectTrigger, b as SelectValue, c as SelectContent, d as SelectItem } from "./select-BYx0MCUK.js"; import { S as Switch } from "./switch-CEzDpTwE.js"; import { o as onHandleChange } from "./inertia-BtwbgBI3.js"; import { useForm } from "@inertiajs/react"; import { Shuffle } from "lucide-react"; import { useState, useEffect } from "react"; import "./utils-DLCPGU0v.js"; import "clsx"; import "tailwind-merge"; import "@radix-ui/react-slot"; import "class-variance-authority"; import "@radix-ui/react-dialog"; import "@radix-ui/react-label"; import "@radix-ui/react-select"; import "@radix-ui/react-switch"; const CouponForm = ({ title, handler, coupon, courses }) => { var _a; const [open, setOpen] = useState(false); const formatDatetimeLocal = (datetime) => { if (!datetime) return ""; return datetime.replace(" ", "T").substring(0, 16); }; const { data, setData, post, put, reset, processing, errors } = useForm({ code: (coupon == null ? void 0 : coupon.code) || "", course_id: (coupon == null ? void 0 : coupon.course_id) || "", discount_type: (coupon == null ? void 0 : coupon.discount_type) || "percentage", discount: (coupon == null ? void 0 : coupon.discount) || 0, valid_from: formatDatetimeLocal(coupon == null ? void 0 : coupon.valid_from), valid_to: formatDatetimeLocal(coupon == null ? void 0 : coupon.valid_to), is_active: (coupon == null ? void 0 : coupon.is_active) ?? true }); const handleSubmit = (e) => { e.preventDefault(); if (coupon) { put(route("course-coupons.update", coupon.id), { preserveScroll: true, onSuccess: () => { setOpen(false); } }); } else { post(route("course-coupons.store"), { preserveScroll: true, onSuccess: () => { reset(); setOpen(false); } }); } }; const generateCode = () => { const code = Math.random().toString(36).substring(2, 10).toUpperCase(); setData("code", code); }; useEffect(() => { if (open && coupon) { setData({ course_id: coupon.course_id || "", code: coupon.code || "", discount_type: coupon.discount_type || "percentage", discount: coupon.discount || 0, valid_from: formatDatetimeLocal(coupon.valid_from), valid_to: formatDatetimeLocal(coupon.valid_to), is_active: coupon.is_active ?? true }); } else if (!open) { reset(); } }, [open, coupon]); return /* @__PURE__ */ jsxs(Dialog, { open, onOpenChange: setOpen, children: [ /* @__PURE__ */ jsx(DialogTrigger, { asChild: true, children: handler }), /* @__PURE__ */ jsxs(DialogContent, { className: "max-w-2xl", children: [ /* @__PURE__ */ jsx(DialogHeader, { children: /* @__PURE__ */ jsx(DialogTitle, { children: title }) }), /* @__PURE__ */ jsxs("form", { onSubmit: handleSubmit, children: [ /* @__PURE__ */ jsx("div", { className: "space-y-4 py-4", children: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-2 gap-4", children: [ /* @__PURE__ */ jsxs("div", { className: "col-span-2", children: [ /* @__PURE__ */ jsx(Label, { htmlFor: "code", children: "Coupon Code *" }), /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [ /* @__PURE__ */ jsx( Input, { id: "code", name: "code", value: data.code, onChange: (e) => setData("code", e.target.value.toUpperCase()), placeholder: "SUMMER2024", required: true } ), /* @__PURE__ */ jsx(Button, { type: "button", variant: "outline", onClick: generateCode, children: /* @__PURE__ */ jsx(Shuffle, { className: "h-4 w-4" }) }) ] }), /* @__PURE__ */ jsx(InputError, { message: errors.code }) ] }), /* @__PURE__ */ jsxs("div", { children: [ /* @__PURE__ */ jsx(Label, { htmlFor: "discount_type", children: "Discount Type *" }), /* @__PURE__ */ jsxs(Select, { name: "discount_type", value: data.discount_type, onValueChange: (value) => setData("discount_type", value), children: [ /* @__PURE__ */ jsx(SelectTrigger, { children: /* @__PURE__ */ jsx(SelectValue, { placeholder: "Select type" }) }), /* @__PURE__ */ jsxs(SelectContent, { children: [ /* @__PURE__ */ jsx(SelectItem, { value: "percentage", children: "Percentage (%)" }), /* @__PURE__ */ jsx(SelectItem, { value: "fixed", children: "Fixed Amount ($)" }) ] }) ] }), /* @__PURE__ */ jsx(InputError, { message: errors.discount_type }) ] }), /* @__PURE__ */ jsxs("div", { children: [ /* @__PURE__ */ jsx(Label, { htmlFor: "discount", children: "Discount Value *" }), /* @__PURE__ */ jsx( Input, { id: "discount", name: "discount", type: "number", value: data.discount, onChange: (e) => onHandleChange(e, setData), min: "0", step: "0.01", required: true } ), /* @__PURE__ */ jsx(InputError, { message: errors.discount }) ] }), /* @__PURE__ */ jsxs("div", { className: "col-span-2", children: [ /* @__PURE__ */ jsx(Label, { htmlFor: "course_id", children: "Select Course" }), /* @__PURE__ */ jsxs( Select, { name: "course_id", value: (_a = data.course_id) == null ? void 0 : _a.toString(), onValueChange: (value) => setData("course_id", value ? parseInt(value) : ""), children: [ /* @__PURE__ */ jsx(SelectTrigger, { children: /* @__PURE__ */ jsx(SelectValue, { placeholder: "All Courses (global coupon)" }) }), /* @__PURE__ */ jsx(SelectContent, { children: courses.map((course) => /* @__PURE__ */ jsx(SelectItem, { value: course.id.toString(), children: course.title }, course.id)) }) ] } ), /* @__PURE__ */ jsx(InputError, { message: errors.course_id }) ] }), /* @__PURE__ */ jsxs("div", { children: [ /* @__PURE__ */ jsx(Label, { htmlFor: "valid_from", children: "Valid From" }), /* @__PURE__ */ jsx( Input, { id: "valid_from", name: "valid_from", type: "datetime-local", value: data.valid_from, onChange: (e) => onHandleChange(e, setData) } ), /* @__PURE__ */ jsx(InputError, { message: errors.valid_from }) ] }), /* @__PURE__ */ jsxs("div", { children: [ /* @__PURE__ */ jsx(Label, { htmlFor: "valid_to", children: "Valid To" }), /* @__PURE__ */ jsx( Input, { id: "valid_to", name: "valid_to", type: "datetime-local", value: data.valid_to, onChange: (e) => onHandleChange(e, setData) } ), /* @__PURE__ */ jsx(InputError, { message: errors.valid_to }) ] }), /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [ /* @__PURE__ */ jsx(Label, { htmlFor: "is_active", children: "Active" }), /* @__PURE__ */ jsx(Switch, { id: "is_active", checked: data.is_active, onCheckedChange: (checked) => setData("is_active", checked) }) ] }) ] }) }), /* @__PURE__ */ jsxs(DialogFooter, { className: "gap-2", children: [ /* @__PURE__ */ jsx(DialogClose, { asChild: true, children: /* @__PURE__ */ jsx(Button, { type: "button", variant: "outline", children: "Cancel" }) }), /* @__PURE__ */ jsx(LoadingButton, { loading: processing, disabled: processing, children: coupon ? "Update" : "Create" }) ] }) ] }) ] }) ] }); }; export { CouponForm as default };