lms/bootstrap/ssr/assets/coupon-form-Cm0e_8bW.js
2025-12-15 12:26:23 +01:00

189 lines
8.6 KiB
JavaScript

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
};