"use client"; import { AddIcon, CloudUploadIcon, TimesIcon } from "@/components/icons"; import AdvertiseTable from "@/components/table/advertise/advertise-table"; import { Button, Card, Chip, Input, Modal, ModalBody, ModalContent, ModalFooter, ModalHeader, Radio, RadioGroup, Switch, Textarea, useDisclosure, } from "@heroui/react"; import Link from "next/link"; import { useRouter } from "next/navigation"; import * as z from "zod"; import { zodResolver } from "@hookform/resolvers/zod"; import { Controller, useForm } from "react-hook-form"; import { Fragment, useEffect, useState } from "react"; import Swal from "sweetalert2"; import withReactContent from "sweetalert2-react-content"; import { useDropzone } from "react-dropzone"; import { close, error, loading } from "@/config/swal"; import Image from "next/image"; import { createAdvertise, createMediaFileAdvertise, } from "@/services/advertisement"; const createArticleSchema = z.object({ title: z.string().min(2, { message: "Judul harus diisi", }), url: z.string().min(1, { message: "Link harus diisi", }), description: z.string().min(2, { message: "Deskripsi harus diisi", }), }); export default function AdvertisePage() { const { isOpen, onOpen, onOpenChange, onClose } = useDisclosure(); const MySwal = withReactContent(Swal); const [refresh, setRefresh] = useState(false); const [placement, setPlacement] = useState("banner"); const [files, setFiles] = useState([]); const formOptions = { resolver: zodResolver(createArticleSchema), defaultValues: { title: "", description: "", url: "" }, }; const { getRootProps, getInputProps } = useDropzone({ onDrop: (acceptedFiles) => { setFiles(acceptedFiles.map((file) => Object.assign(file))); }, maxFiles: 1, accept: placement === "banner" ? { "image/*": [], "video/*": [], } : { "image/*": [] }, }); type UserSettingSchema = z.infer; const { control, handleSubmit, formState: { errors }, } = useForm(formOptions); const onSubmit = async (values: z.infer) => { loading(); const formData = { title: values.title, description: values.description, placement: placement, redirectLink: values.url, }; const res = await createAdvertise(formData); if (res?.error) { error(res?.message); return false; } const idNow = res?.data?.data?.id; if (files.length > 0) { const formFiles = new FormData(); formFiles.append("file", files[0]); const resFile = await createMediaFileAdvertise(idNow, formFiles); } close(); MySwal.fire({ title: "Sukses", icon: "success", confirmButtonColor: "#3085d6", confirmButtonText: "OK", }).then((result) => { if (result.isConfirmed) { setRefresh(!refresh); } }); }; const handleRemoveFile = (file: File) => { const uploadedFiles = files; const filtered = uploadedFiles.filter((i) => i.name !== file.name); setFiles([...filtered]); }; return (
{() => ( <> Advertise

Judul

( )} /> {errors?.title && (

{errors.title?.message}

)}

Deskripsi

(