"use client"; import SiteBreadcrumb from "@/components/site-breadcrumb"; import { Button } from "@/components/ui/button"; import { Calendar } from "@/components/ui/calendar"; import { Input } from "@/components/ui/input"; import { Popover, PopoverContent, PopoverTrigger, } from "@/components/ui/popover"; import { Link } from "@/i18n/routing"; import { CalendarIcon } from "lucide-react"; import React, { useRef, useState } from "react"; import { cn } from "@/lib/utils"; import { format } from "date-fns"; import JoditEditor from "jodit-react"; import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form"; import { z } from "zod"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import Swal from "sweetalert2"; import withReactContent from "sweetalert2-react-content"; import { Checkbox } from "@/components/ui/checkbox"; import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"; const FormSchema = z.object({ date: z.date({ required_error: "Required", }), title: z.string({ required_error: "Required", }), detail: z.string({ required_error: "Required", }), output: z.array(z.string()).refine((value) => value.some((item) => item), { message: "Required", }), unit: z.array(z.string()).refine((value) => value.some((item) => item), { message: "Required", }), type: z.enum(["publication", "amplification", "contra"], { required_error: "Required", }), }); const items = [ { id: "video", label: "Audio Visual", }, { id: "image", label: "Foto", }, { id: "audio", label: "Audio", }, { id: "text", label: "Text", }, ]; const units = [ { id: "mabes", label: "Mabes Polri", }, { id: "polda", label: "Polda", }, { id: "polres", label: "Polres", }, ]; export default function CreateMonthly() { const MySwal = withReactContent(Swal); const form = useForm>({ resolver: zodResolver(FormSchema), defaultValues: { unit: [], output: [], detail: "", }, }); const editor = useRef(null); const onSubmit = async (data: z.infer) => { console.log("data", data); if (form.getValues("detail") == "") { form.setError("detail", { type: "manual", message: "Required", }); } else { MySwal.fire({ title: "Simpan Data", text: "Apakah Anda yakin ingin menyimpan data ini?", icon: "warning", showCancelButton: true, cancelButtonColor: "#d33", confirmButtonColor: "#3085d6", confirmButtonText: "Simpan", }).then((result) => { if (result.isConfirmed) { save(data); } }); } }; const save = async (data: z.infer) => { console.log("data", data); }; const output = form.watch("output"); const isAllChecked = items.every((item) => output?.includes(item.id)); const unit = form.watch("unit"); const isAllUnitChecked = units.every((item) => unit?.includes(item.id)); const handleAllCheckedChange = (checked: boolean | string) => { if (checked) { form.setValue( "output", items.map((item) => item.id) ); } else { form.setValue("output", []); } }; const handleItemCheckedChange = (id: string, checked: boolean | string) => { form.setValue( "output", checked ? [...output, id] : output.filter((value) => value !== id) ); }; const handleAllUnitCheckedChange = (checked: boolean | string) => { if (checked) { form.setValue( "unit", units.map((item) => item.id) ); } else { form.setValue("unit", []); } }; const handleUnitCheckedChange = (id: string, checked: boolean | string) => { form.setValue( "unit", checked ? [...unit, id] : unit.filter((value) => value !== id) ); }; return (
Bulanan Mingguan
Harian

Perencanaan MediaHub

( Judul Perencanaan )} /> (
Output Tugas
handleAllCheckedChange(checked) } />
{items.map((item) => ( { return ( handleItemCheckedChange(item.id, checked) } /> {item.label} ); }} /> ))}
)} /> (
Pelaksana Tugas
handleAllUnitCheckedChange(checked) } />
{units.map((item) => ( { return ( handleUnitCheckedChange(item.id, checked) } /> {item.label} ); }} /> ))}
)} /> ( Jenis Penugasan Publikasi Amplifikasi Kontra )} /> ( Pilih Tanggal )} /> ( Detail Perencanaan )} />
); }