'use client' import { keyWibu, LayoutModalNew, LayoutNavbarNew, TEMA } from '@/module/_global'; import LayoutModal from '@/module/_global/layout/layout_modal'; import { useHookstate } from '@hookstate/core'; import { Avatar, Box, Button, Divider, Flex, Grid, Group, Modal, rem, Select, SimpleGrid, Stack, Table, Text, Textarea, TextInput } from '@mantine/core'; import { DateInput, TimeInput } from '@mantine/dates'; import { useMediaQuery } from '@mantine/hooks'; import moment from 'moment'; import { useParams, useRouter } from 'next/navigation'; import { useState } from 'react'; import toast from 'react-hot-toast'; import { IoIosArrowDropright } from 'react-icons/io'; import { useWibuRealtime } from 'wibu-realtime'; import { funCheckCalender, funCreateCalender } from '../lib/api_calender'; import { IFormMemberCalender } from '../lib/type_calender'; import { globalCalender } from '../lib/val_calender'; import CreateUserCalender from './create_user_calender'; import ViewDataConflict from './create_view_event_conflict'; export default function CreateCalenderDivisionCaleder() { const [value, setValue] = useState(null); const router = useRouter() const [isModal, setModal] = useState(false) const [isModalKonfirmasiTglSama, setModalKonfirmasiTglSama] = useState(false) const [isModalViewData, setModalViewData] = useState(false) const [loadingModal, setLoadingModal] = useState(false) const [loadingModalKonfirmasiTglSama, setLoadingModalKonfirmasiTglSama] = useState(false) const member = useHookstate(globalCalender) const memberValue = member.get() as IFormMemberCalender[] const [dataAcaraKonflik, setDataAcaraKonflik] = useState([]) const [openMember, setOpenMember] = useState(false) const param = useParams<{ id: string, detail: string }>() const tema = useHookstate(TEMA) const isMobile = useMediaQuery('(max-width: 369px)'); const isMobile2 = useMediaQuery("(max-width: 438px)"); const [touched, setTouched] = useState({ title: false, dateStart: false, timeStart: false, timeEnd: false, repeatEventTyper: false, desc: false, repeatValue: false }) const [isData, setData] = useState({ idDivision: "", title: "", dateStart: "", timeStart: "", timeEnd: "", linkMeet: "", repeatEventTyper: "", desc: "", repeatValue: "1" }) const [dataRealTime, setDataRealtime] = useWibuRealtime({ WIBU_REALTIME_TOKEN: keyWibu, project: "sdm" }) async function onCheckDate() { try { setLoadingModal(true) const response = await funCheckCalender({ idDivision: param.id, title: isData.title, dateStart: isData.dateStart, timeStart: isData.timeStart, timeEnd: isData.timeEnd, linkMeet: isData.linkMeet, repeatEventTyper: isData.repeatEventTyper, desc: isData.desc, repeatValue: isData.repeatValue, member: memberValue }) if (response.success) { onSubmit() } else { setModalKonfirmasiTglSama(true) setDataAcaraKonflik(response.data) } } catch (error) { console.error(error) toast.error("Gagal menambahkan acara, coba lagi nanti"); } finally { setLoadingModal(false) } } async function onSubmit() { try { setLoadingModal(true) setLoadingModalKonfirmasiTglSama(true) const response = await funCreateCalender({ idDivision: param.id, title: isData.title, dateStart: isData.dateStart, timeStart: isData.timeStart, timeEnd: isData.timeEnd, linkMeet: isData.linkMeet, repeatEventTyper: isData.repeatEventTyper, desc: isData.desc, repeatValue: isData.repeatValue, member: memberValue }) if (response.success) { setDataRealtime([{ category: "calendar-event", division: param.id, date: isData.dateStart }]) router.push(`/division/${param.id}/calender`) toast.success(response.message) member.set([]) } else { toast.error(response.message) } } catch (error) { console.error(error) toast.error("Gagal menambahkan acara, coba lagi nanti"); } finally { setModal(false) setModalKonfirmasiTglSama(false) setLoadingModal(false) setLoadingModalKonfirmasiTglSama(false) } } function onCheck() { const cek = checkAll() if (!cek) return false if (memberValue.length == 0) return toast.error("Error! silahkan pilih anggota") setModal(true) } function checkAll() { let nilai = true if (isData.title === "") { setTouched(touched => ({ ...touched, title: true })) nilai = false } if (isData.dateStart === "") { setTouched(touched => ({ ...touched, dateStart: true })) nilai = false } if (isData.timeStart == "") { setTouched(touched => ({ ...touched, timeStart: true })) nilai = false } if (isData.timeEnd == "" || isData.timeStart > isData.timeEnd) { setTouched(touched => ({ ...touched, timeEnd: true })) nilai = false } if (isData.repeatEventTyper == "" || String(isData.repeatEventTyper) == "null") { setTouched(touched => ({ ...touched, repeatEventTyper: true })) nilai = false } if (isData.repeatValue === "" || Number(isData.repeatValue) <= 0) { setTouched(touched => ({ ...touched, repeatValue: true })) nilai = false } return nilai } function onValidation(kategori: string, val: any) { if (kategori == 'title') { setData({ ...isData, title: val }) if (val === "") { setTouched({ ...touched, title: true }) } else { setTouched({ ...touched, title: false }) } } else if (kategori == 'dateStart') { setValue(val) setData({ ...isData, dateStart: moment(val).format("YYYY-MM-DD") }) if (val === "") { setTouched({ ...touched, dateStart: true }) } else { setTouched({ ...touched, dateStart: false }) } } else if (kategori == 'timeStart') { setData({ ...isData, timeStart: val }) if (val == "") { setTouched({ ...touched, timeStart: true }) } else { setTouched({ ...touched, timeStart: false }) } } else if (kategori == 'timeEnd') { setData({ ...isData, timeEnd: val }) if (val == "" || isData.timeStart > val) { setTouched({ ...touched, timeEnd: true }) } else { setTouched({ ...touched, timeEnd: false }) } } else if (kategori == 'repeatEventTyper') { setData(isData => ({ ...isData, repeatEventTyper: val })) if (val == "once") { setData(isData => ({ ...isData, repeatValue: "1" })) } if (val == "" || String(val) == "null") { setTouched({ ...touched, repeatEventTyper: true }) } else { setTouched({ ...touched, repeatEventTyper: false }) } } else if (kategori == 'repeatValue') { setData(isData => ({ ...isData, repeatValue: val, })) if (val === "" || Number(val) <= 0) { setTouched(touched => ({ ...touched, repeatValue: true })) } else { setTouched({ ...touched, repeatValue: false }) } } } if (openMember) return setOpenMember(false)} /> if (isModalViewData) return setModalViewData(false)} data={dataAcaraKonflik} /> return ( { onValidation('title', event.target.value) }} error={ touched.title && ( isData.title == "" ? "Nama Acara Tidak Boleh Kosong" : null ) } /> { onValidation('dateStart', val) }} placeholder="Input Tanggal" label="Tanggal" error={ touched.dateStart && ( isData.dateStart == "" ? "Tanggal Tidak Boleh Kosong" : null ) } /> onValidation('timeStart', event.target.value)} error={ touched.timeStart && ( isData.timeStart == "" ? "Waktu Awal Tidak Boleh Kosong" : null ) } /> onValidation('timeEnd', event.target.value)} error={ touched.timeEnd && ( isData.timeEnd == "" ? "Waktu Akhir Tidak Boleh Kosong" : null ) || (isData.timeStart > isData.timeEnd ? "Waktu Akhir Tidak Tepat" : null) } /> setData({ ...isData, linkMeet: event.target.value })} />