"use client"; import { globalRole, LayoutDrawer, LayoutNavbarNew, TEMA } from "@/module/_global"; import { Avatar, Box, Button, Divider, Flex, Grid, Group, rem, Select, SimpleGrid, Stack, Text, TextInput } from "@mantine/core"; import { useRouter } from "next/navigation"; import React, { useRef, useState } from "react"; import { IoIosArrowDropright } from "react-icons/io"; import ResultsDateAndTask from "./results_date-and_task"; import ResultsFile from "./results_file"; import LayoutModal from "@/module/_global/layout/layout_modal"; import toast from "react-hot-toast"; import { funGetAllGroup, IDataGroup } from "@/module/group"; import { funGetUserByCookies } from "@/module/auth"; import { useMediaQuery, useShallowEffect } from "@mantine/hooks"; import { useHookstate } from "@hookstate/core"; import { globalMemberProject } from "../lib/val_project"; import ViewDateEndTask from "./create_date_end_task"; import { IFormDateProject, IFormMemberProject, IListFileTaskProject } from "../lib/type_project"; import CreateUsersProject from "./create_users_project"; import { FaTrash } from "react-icons/fa6"; import { Dropzone } from "@mantine/dropzone"; import _ from "lodash"; import { funCreateProject } from "../lib/api_project"; export default function CreateProject() { const router = useRouter(); const [openDrawer, setOpenDrawer] = useState(false) 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 [body, setBody] = useState({ idGroup: "", title: "", }); const [touched, setTouched] = useState({ title: false, idGroup: false, desc: false }); 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([]) setBody({ ...body, idGroup: val }) } useShallowEffect(() => { loadData(); }, []); async function onSubmit() { try { 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) { 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"); } } if (openTugas) return { setOpenTugas(false) }} onSet={(val) => { setDataTask([...dataTask, val]); setOpenTugas(false) }} />; if (isChooseAnggota) return { setChooseAnggota(false) }} /> return ( { (roleLogin.get() == "supadmin") && (