"use client"; "use client"; import React, { useEffect, useState } from "react"; import { useForm, Controller } from "react-hook-form"; import { Input } from "@/components/ui/input"; import { Button } from "@/components/ui/button"; import { Label } from "@/components/ui/label"; import { Card } from "@/components/ui/card"; import { zodResolver } from "@hookform/resolvers/zod"; import * as z from "zod"; import Swal from "sweetalert2"; import withReactContent from "sweetalert2-react-content"; import { useParams, useRouter } from "next/navigation"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Avatar, AvatarImage } from "@/components/ui/avatar"; import { getTicketingInternalDetail, getTicketingInternalDiscussion, saveTicketing, saveTicketInternalReply, } from "@/service/communication/communication"; import { Textarea } from "@/components/ui/textarea"; import { htmlToString } from "@/utils/globals"; import { Icon } from "@iconify/react/dist/iconify.js"; const taskSchema = z.object({ // description: z.string().min(2, { // message: "Narasi Penugasan harus lebih dari 2 karakter.", // }), }); export type replyDetail = { id: number; message: string; createdAt: string; messageFrom: { id: number; fullname: string; }; messageTo: { id: number; fullname: string; }; }; export default function FormEditInternal() { const MySwal = withReactContent(Swal); const { id } = useParams() as { id: string }; const router = useRouter(); const [detail, setDetail] = useState(); const [ticketReply, setTicketReply] = useState([]); const [replyVisible, setReplyVisible] = useState(false); const [replyMessage, setReplyMessage] = useState(""); const [selectedPriority, setSelectedPriority] = useState(""); const [selectedStatus, setSelectedStatus] = useState(""); const [selectedTarget, setSelectedTarget] = useState(""); const [description, setDescription] = useState(""); type TaskSchema = z.infer; const { control, handleSubmit, formState: { errors }, } = useForm({ resolver: zodResolver(taskSchema), }); useEffect(() => { async function initState() { if (id) { const response = await getTicketingInternalDetail(id); setDetail(response?.data?.data); setSelectedPriority(response?.data?.data?.priority?.name); console.log("sadad", response?.data?.data); setSelectedStatus(response?.data?.data?.status?.name); setDescription(htmlToString(response?.data?.data?.message)); } } initState(); getTicketReply(); }, [id]); async function getTicketReply() { const res = await getTicketingInternalDiscussion(id); if (res?.data !== null) { setTicketReply(res?.data?.data); } } const handleReply = () => { setReplyVisible((prev) => !prev); // Toggle visibility }; const handleSendReply = async () => { if (replyMessage.trim() === "") { MySwal.fire({ title: "Error", text: "Pesan tidak boleh kosong!", icon: "error", }); return; } const data = { ticketId: id, message: replyMessage, }; try { const response = await saveTicketInternalReply(data); // Tambahkan balasan baru ke daftar balasan const newReply: replyDetail = { id: response?.data?.id, message: replyMessage, createdAt: response?.data?.createdAt, messageFrom: response?.data?.messageFrom, messageTo: response?.data?.messageTo, }; setTicketReply((prevReplies) => [newReply, ...prevReplies]); MySwal.fire({ title: "Sukses", text: "Pesan berhasil dikirim.", icon: "success", }); // Reset input dan sembunyikan form balasan setReplyMessage(""); setReplyVisible(false); } catch (error) { MySwal.fire({ title: "Error", text: "Gagal mengirim balasan.", icon: "error", }); console.error("Error sending reply:", error); } }; const save = async (data: TaskSchema) => { const requestData = { // description: data?.description, target: selectedTarget, priorityId: 1, statusId: 1, // description: data.description, // operatorTeam: selectedOptionId.join(","), // This should work now without the error }; const response = await saveTicketing(requestData); console.log("Form Data Submitted:", requestData); console.log("response", response); MySwal.fire({ title: "Sukses", text: "Data berhasil disimpan.", icon: "success", confirmButtonColor: "#3085d6", confirmButtonText: "OK", }).then(() => { router.push("/en/shared/communication"); }); }; const onSubmit = (data: TaskSchema) => { 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); } }); }; return (
{replyVisible && (