diff --git a/src/module/calender/ui/create_calender_division_caleder.tsx b/src/module/calender/ui/create_calender_division_caleder.tsx index 2cfc315..9ec3e2a 100644 --- a/src/module/calender/ui/create_calender_division_caleder.tsx +++ b/src/module/calender/ui/create_calender_division_caleder.tsx @@ -1,11 +1,428 @@ -import { Box } from '@mantine/core'; -import React from 'react'; -import NavbarCreateDivisionCalender from './navbar_create_division_calender'; +'use client' +import { LayoutNavbarNew, TEMA } from '@/module/_global'; +import LayoutModal from '@/module/_global/layout/layout_modal'; +import { useHookstate } from '@hookstate/core'; +import { Avatar, Box, Button, Divider, Grid, Group, rem, Select, SimpleGrid, Stack, 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 { funCreateCalender } from '../lib/api_calender'; +import { IFormMemberCalender } from '../lib/type_calender'; +import { globalCalender } from '../lib/val_calender'; +import CreateUserCalender from './create_user_calender'; export default function CreateCalenderDivisionCaleder() { + const [value, setValue] = useState(null); + const router = useRouter() + const [isModal, setModal] = useState(false) + const [loadingModal, setLoadingModal] = useState(false) + const member = useHookstate(globalCalender) + const memberValue = member.get() as IFormMemberCalender[] + 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" + }) + + async function onSubmit(val: boolean) { + try { + setLoadingModal(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) { + setModal(false) + router.push(`/division/${param.id}/calender`) + toast.success(response.message) + member.set([]) + } else { + toast.error(response.message) + setModal(false) + } + } catch (error) { + console.error(error) + toast.error("Gagal menambahkan pengumuman, coba lagi nanti"); + } finally { + setModal(false) + setLoadingModal(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)} /> + 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 })} + /> +