"use client" import { getDatesInRange } from '@/lib/getDatesInRange'; import { keyWibu, LayoutNavbarNew, TEMA } from '@/module/_global'; import LayoutModal from '@/module/_global/layout/layout_modal'; import { useHookstate } from '@hookstate/core'; import { Box, Button, Flex, Group, rem, SimpleGrid, Stack, Text, TextInput } from '@mantine/core'; import { DatePicker } from '@mantine/dates'; import { useShallowEffect } from '@mantine/hooks'; import moment from 'moment'; import { useParams, useRouter } from 'next/navigation'; import { useState } from 'react'; import toast from 'react-hot-toast'; import { useWibuRealtime } from 'wibu-realtime'; import { funCreateDetailProject } from '../lib/api_project'; import { ModalAddDetailTaskProject } from './modal_add_detail_task_project'; export default function AddDetailTaskProject() { const [value, setValue] = useState<[Date | null, Date | null]>([null, null]); const router = useRouter() const [name, setName] = useState("") const [openModal, setOpenModal] = useState(false) const [loadingModal, setLoadingModal] = useState(false) const param = useParams<{ id: string }>() const tema = useHookstate(TEMA) const [acuan, setAcuan] = useState(false) const [openModalDetailTask, setOpenModalDetailTask] = useState(false) const [dataDetail, setDataDetail] = useState([]) const [touched, setTouched] = useState({ title: false, date: false }); const [dataRealTime, setDataRealtime] = useWibuRealtime({ WIBU_REALTIME_TOKEN: keyWibu, project: "sdm" }) async function onSubmit() { try { setLoadingModal(true) const dataDetailFix = dataDetail.map((v: any) => ({ ...v, date: moment(v.date).format("YYYY-MM-DD"), })) const res = await funCreateDetailProject(param.id, { name, dateStart: (value[0] != null) ? moment(value[0]).format('YYYY-MM-DD') : moment(new Date).format('YYYY-MM-DD'), dateEnd: (value[1] != null) ? moment(value[1]).format('YYYY-MM-DD') : moment(new Date).format('YYYY-MM-DD'), dataDetail: dataDetailFix }) if (res.success) { setDataRealtime([{ category: "project-detail-task", id: param.id, }]) toast.success(res.message) router.push(`/project/${param.id}`) } else { toast.error(res.message) } } catch (error) { console.error(error) toast.error("Gagal menambahkan tugas, coba lagi nanti") } finally { setOpenModal(false) setLoadingModal(false) } } function onCheck() { const cek = checkAll() if (!cek) return false setOpenModal(true) } function checkAll() { let nilai = true if (name == "") { setTouched(touched => ({ ...touched, title: true })) nilai = false } if (value[0] == null || value[1] == null) { setTouched(touched => ({ ...touched, date: true })) nilai = false } return nilai } function onValidation(kategori: string, val: string) { if (kategori == 'title') { setName(val) if (val === "") { setTouched({ ...touched, title: true }) } else { setTouched({ ...touched, title: false }) } } else if (kategori == 'date') { const array = val.split(",") if (array[0] == '' || array[1] == '') { setTouched({ ...touched, date: true }) setDataDetail([]) } else { setTouched({ ...touched, date: false }) const datanya = getDatesInRange(value[0]!, value[1]!) setDataDetail(datanya.map((data: any) => ({ date: data, timeStart: null, timeEnd: null }))) } } } useShallowEffect(() => { if (acuan) { onValidation('date', String(value)) } else { setAcuan(true) } }, [value]) return ( Tanggal Mulai * {value[0] ? `${moment(value[0]).format('DD-MM-YYYY')}` : ""} Tanggal Berakhir * {value[1] ? `${moment(value[1]).format('DD-MM-YYYY')}` : ""} { (touched && touched.date) ? Tanggal Tidak Boleh Kosong : <> } { onValidation('title', e.target.value) }} error={ touched.title && ( name == "" ? "Judul Tugas Tidak Boleh Kosong" : null ) } /> setOpenModalDetailTask(false)} data={dataDetail} onSubmit={(data) => { setDataDetail(data) setOpenModalDetailTask(false) }} /> setOpenModal(false)} description="Apakah Anda yakin ingin menambahkan tugas?" onYes={(val) => { if (val) { onSubmit() } else { setOpenModal(false) } }} /> ); }