"use client"; import { globalRole, keyWibu, LayoutDrawer, LayoutNavbarNew, TEMA } from "@/module/_global"; import LayoutModal from "@/module/_global/layout/layout_modal"; import { funGetUserByCookies } from "@/module/auth"; import { funGetAllGroup, IDataGroup } from "@/module/group"; import { useHookstate } from "@hookstate/core"; import { Avatar, Box, Button, Divider, Flex, Grid, Group, rem, Select, SimpleGrid, Stack, Text, TextInput } from "@mantine/core"; import { Dropzone } from "@mantine/dropzone"; import { useMediaQuery, useShallowEffect } from "@mantine/hooks"; import _ from "lodash"; import { useRouter } from "next/navigation"; import { useRef, useState } from "react"; import toast from "react-hot-toast"; import { FaTrash } from "react-icons/fa6"; import { IoIosArrowDropright } from "react-icons/io"; import { useWibuRealtime } from "wibu-realtime"; import { funCreateProject } from "../lib/api_project"; import { IFormMemberProject, IListFileTaskProject, NewIFormDateProject } from "../lib/type_project"; import { globalMemberProject } from "../lib/val_project"; import ViewDateEndTask from "./create_date_end_task"; import CreateUsersProject from "./create_users_project"; import ResultsDateAndTask from "./results_date-and_task"; import ResultsFile from "./results_file"; export default function CreateProject() { const router = useRouter(); const [openDrawerFile, setOpenDrawerFile] = useState(false) const [openDrawerTask, setOpenDrawerTask] = useState(false) const [isModal, setModal] = useState(false) const [dataGroup, setDataGroup] = useState([]); const [isChooseAnggota, setChooseAnggota] = useState(false) const member = useHookstate(globalMemberProject) const memberValue = member.get() as IFormMemberProject[] const [openTugas, setOpenTugas] = useState(false) const [dataTask, setDataTask] = useState([]) const openRef = useRef<() => void>(null) const [fileForm, setFileForm] = useState([]) const [listFile, setListFile] = useState([]) const [indexDelFile, setIndexDelFile] = useState(0) const [indexDelTask, setIndexDelTask] = useState(0) const roleLogin = useHookstate(globalRole) const isMobile = useMediaQuery('(max-width: 369px)'); const tema = useHookstate(TEMA) const [loadingModal, setLoadingModal] = useState(false) const [body, setBody] = useState({ idGroup: "", title: "", }); const [touched, setTouched] = useState({ title: false, idGroup: false, }); const [data, setDataRealtime] = useWibuRealtime({ WIBU_REALTIME_TOKEN: keyWibu, project: "sdm" }) function deleteFile(index: number) { setListFile([...listFile.filter((val, i) => i !== index)]) setFileForm([...fileForm.filter((val, i) => i !== index)]) setOpenDrawerFile(false) } function deleteTask(index: number) { setDataTask([...dataTask.filter((val, i) => i !== index)]) setOpenDrawerTask(false) } 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 }) } } function onToChooseAnggota() { if (roleLogin.get() == "supadmin" && body.idGroup == "") return toast.error("Error! grup harus diisi") setChooseAnggota(true) } function onChooseGroup(val: any) { member.set([]) onValidation('idGroup', val) } useShallowEffect(() => { loadData(); }, []); async function onSubmit() { try { setLoadingModal(true) const fd = new FormData(); for (let i = 0; i < fileForm.length; i++) { fd.append(`file${i}`, fileForm[i]); } fd.append("data", JSON.stringify({ title: body.title, idGroup: body.idGroup, task: dataTask, member: memberValue })) const response = await funCreateProject(fd) if (response.success) { setDataRealtime(response.notif) toast.success(response.message) member.set([]) setFileForm([]) setListFile([]) setDataTask([]) router.push('/project') } else { toast.error(response.message) } } catch (error) { console.error(error) toast.error("Gagal menambahkan kegiatan, coba lagi nanti"); } finally { setLoadingModal(false) setModal(false) } } function onCheck() { const cek = checkAll() if (!cek) return false if (dataTask.length == 0) return toast.error("Error! silahkan tambahkan tugas") 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 } 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 }) } } } if (openTugas) return { setOpenTugas(false) }} onSet={(val) => { setDataTask([...dataTask, val]); setOpenTugas(false) }} />; if (isChooseAnggota) return { setChooseAnggota(false) }} /> return ( { (roleLogin.get() == "supadmin") && (