'use client' import { funGetAllGroup, IDataGroup } from "@/module/group"; import { Avatar, Box, Button, Divider, Grid, Group, rem, Select, Text, TextInput } from "@mantine/core"; import { useMediaQuery, useShallowEffect } from "@mantine/hooks"; import { useState } from "react"; import toast from "react-hot-toast"; import { IoIosArrowDropright } from "react-icons/io"; import ChooseUsersDiscussion from "./choose_user"; import { useHookstate } from "@hookstate/core"; import { globalRole, keyWibu, LayoutNavbarNew, TEMA } from "@/module/_global"; import { funGetUserByCookies } from "@/module/auth"; import { globalMemberDiscussionGeneral } from "../lib/val_discussion_general"; import { IFormMemberDisscussionGeneral } from "../lib/type_discussion_general"; import LayoutModal from "@/module/_global/layout/layout_modal"; import { funCreateDiscussionGeneral } from "../lib/api_discussion_general"; import { useRouter } from "next/navigation"; import { useWibuRealtime } from "wibu-realtime"; export default function FormCreateDiscussionGeneral() { const router = useRouter() const isMobile = useMediaQuery('(max-width: 369px)') const roleLogin = useHookstate(globalRole) const [isModal, setModal] = useState(false) const [dataGroup, setDataGroup] = useState([]) const [isChooseAnggota, setChooseAnggota] = useState(false) const member = useHookstate(globalMemberDiscussionGeneral) const memberValue = member.get() as IFormMemberDisscussionGeneral[] const tema = useHookstate(TEMA) const [loadingModal, setLoadingModal] = useState(false) const [data, setDataRealtime] = useWibuRealtime({ WIBU_REALTIME_TOKEN: keyWibu, project: "sdm" }) const [body, setBody] = useState({ idGroup: "", title: "", desc: "" }); const [touched, setTouched] = useState({ title: false, idGroup: false, desc: false }); function onToChooseAnggota() { if (roleLogin.get() == "supadmin" && body.idGroup == "") return toast.error("Error! grup harus diisi") setChooseAnggota(true) } async function loadData() { const loadGroup = await funGetAllGroup('?active=true') if (loadGroup.success) { setDataGroup(loadGroup.data); } else { toast.error(loadGroup.message); } if (roleLogin.get() != "supadmin") { const loadUser = await funGetUserByCookies(); setBody({ ...body, idGroup: loadUser.idGroup }) } } useShallowEffect(() => { loadData(); }, []); function onCheck() { const cek = checkAll() if (!cek) return false if (memberValue.length <= 1) return toast.error("Error! Silahkan pilih anggota lebih dari 1") setModal(true) } function checkAll() { let nilai = true if (body.idGroup === "" || String(body.idGroup) == "null") { setTouched(touched => ({ ...touched, idGroup: true })) nilai = false } if (body.title === "") { setTouched(touched => ({ ...touched, title: true })) nilai = false } if (body.desc === "") { setTouched(touched => ({ ...touched, desc: true })) nilai = false } return nilai } function onValidation(kategori: string, val: string) { if (kategori == 'idGroup') { setBody({ ...body, idGroup: val }) if (val === "" || String(val) == "null") { setTouched({ ...touched, idGroup: true }) } else { setTouched({ ...touched, idGroup: false }) } } else if (kategori == 'title') { setBody({ ...body, title: val }) if (val === "") { setTouched({ ...touched, title: true }) } else { setTouched({ ...touched, title: false }) } } else if (kategori == 'diskusi') { setBody({ ...body, desc: val }) if (val === "") { setTouched({ ...touched, desc: true }) } else { setTouched({ ...touched, desc: false }) } } } function onChooseGroup(val: any) { member.set([]) onValidation('idGroup', val) } async function onSubmit() { try { setLoadingModal(true) const res = await funCreateDiscussionGeneral({ idGroup: body.idGroup, title: body.title, desc: body.desc, member: memberValue }) if (res.success) { setDataRealtime(res.notif) member.set([]) toast.success(res.message) router.push('/discussion') } else { toast.error(res.message) } } catch (error) { console.error(error) toast.error("Gagal membuat diskusi umum, coba lagi nanti") } finally { setLoadingModal(false) setModal(false) } } if (isChooseAnggota) return setChooseAnggota(false)} /> return ( } /> { (roleLogin.get() == "supadmin") && (