'use client' import { LayoutNavbarNew, TEMA, WARNA } from "@/module/_global"; import LayoutModal from "@/module/_global/layout/layout_modal"; import { Box, Button, Flex, Group, List, rem, Skeleton, Stack, Text, Textarea, TextInput } from "@mantine/core"; import { useShallowEffect } from "@mantine/hooks"; import { useState } from "react"; import toast from "react-hot-toast"; import { HiOutlineChevronRight } from "react-icons/hi2"; import { funEditAnnouncement, funGetAnnouncementById } from "../lib/api_announcement"; import { useParams, useRouter } from "next/navigation"; import { useHookstate } from "@hookstate/core"; import { globalMemberEditAnnouncement } from "../lib/val_announcement"; import { GroupData, GroupDataEditAnnouncement } from "../lib/type_announcement"; import EditChooseMember from "./edit_choose_member"; import { IoIosArrowForward } from "react-icons/io"; export default function EditAnnouncement() { const [isOpen, setOpen] = useState(false) const [isChooseDivisi, setChooseDivisi] = useState(false) const param = useParams<{ id: string }>() const [loading, setLoading] = useState(true) const [loadingSubmit, setLoadingSubmit] = useState(false) const router = useRouter() const tema = useHookstate(TEMA) const [touched, setTouched] = useState({ title: false, desc: false }); const [body, setBody] = useState({ title: "", desc: "", }) const memberGroup = useHookstate(globalMemberEditAnnouncement) async function fetchOneAnnouncement() { try { setLoading(true) memberGroup.set([]) const res = await funGetAnnouncementById(param.id) if (res.success) { setBody({ title: res.data.title, desc: res.data.desc }) const arrNew: GroupData[] = [] const coba = Object.keys(res.member).map((v: any, i: any) => { const newObject = { "id": res.member[v][0].idGroup, "name": v, "Division": res.member[v] } res.member[v].map((v: any, i: any) => { newObject["Division"][i] = { "id": v.idDivision, "name": v.division } }) arrNew.push(newObject) }) memberGroup.set(arrNew) } else { toast.error(res.message) } setLoading(false) } catch (error) { console.error(error) toast.error("Gagal mendapatkan pengumuman, coba lagi nanti") } finally { setLoading(false) } } useShallowEffect(() => { fetchOneAnnouncement() }, []) async function onSubmit() { try { setLoadingSubmit(true) const response = await funEditAnnouncement(param.id, { title: body.title, desc: body.desc, groups: memberGroup.get() as GroupData[] }) if (response.success) { toast.success(response.message) setLoadingSubmit(false) router.push(`/announcement/${param.id}`) } else { toast.error(response.message) } setLoadingSubmit(false) } catch (error) { console.error(error) toast.error("Gagal mengedit pengumuman, coba lagi nanti"); } finally { setLoadingSubmit(false) } setOpen(false) } if (isChooseDivisi) return { setChooseDivisi(false) }} /> function onCheck() { if (Object.values(touched).some((v) => v == true)) return false setOpen(true) } function onValidation(kategori: string, val: string) { if (kategori == 'title') { setBody({ ...body, title: val }) if (val === "") { setTouched({ ...touched, title: true }) } else { setTouched({ ...touched, title: false }) } } else if (kategori == 'desc') { setBody({ ...body, desc: val }) if (val === "") { setTouched({ ...touched, desc: true }) } else { setTouched({ ...touched, desc: false }) } } } return ( <> } /> {loading ? <> : <> { onValidation('title', e.target.value) }} error={ touched.title && ( body.title == "" ? "Judul Tidak Boleh Kosong" : null ) } />