diff --git a/src/module/calender/ui/date_event_division.tsx b/src/module/calender/ui/date_event_division.tsx index ea708fb..56699eb 100644 --- a/src/module/calender/ui/date_event_division.tsx +++ b/src/module/calender/ui/date_event_division.tsx @@ -1,5 +1,5 @@ import { WARNA } from '@/module/_global'; -import { Box, Divider, Group, Indicator, Text } from '@mantine/core'; +import { Box, Divider, Group, Indicator, Skeleton, Text } from '@mantine/core'; import { DatePicker, DatePickerProps } from '@mantine/dates'; import { useParams, useRouter } from 'next/navigation'; import React, { useState } from 'react'; @@ -7,6 +7,7 @@ import { funGetAllCalender } from '../lib/api_calender'; import { useSetState, useShallowEffect } from '@mantine/hooks'; import { IDataCalender } from '../lib/type_calender'; import moment from 'moment'; +import _ from 'lodash'; export default function DateEventDivision() { @@ -14,13 +15,18 @@ export default function DateEventDivision() { const router = useRouter() const param = useParams<{ id: string, detail: string }>() const [isDate, setDate] = useSetState(moment().format('YYYY-MM-DD')) + const [loading, setLoading] = useState(true) const getData = async (tgl: any) => { try { + setLoading(true) const response = await funGetAllCalender('?division=' + param.id + '&date=' + tgl) setData(response.data) + setLoading(false) } catch (error) { console.log(error) + } finally { + setLoading(false) } } @@ -60,30 +66,42 @@ export default function DateEventDivision() { Event - {isData.length > 0 ? ( - isData.map((event, index) => { - const bgColor = ['#D8D8F1', '#FED6C5'][index % 2] - const colorDivider = ['#535FCA', '#A7A7A7'][index % 2] - return ( - - router.push(`/division/${param.id}/calender/${event.id}`)} bg={bgColor} pl={15} p={10} style={{ - borderRadius: 10 - }} h={113}> - - - - {event.timeStart} - {event.timeEnd} - {event.title} - Dibuat oleh : {event.user_name} - - + {loading ? + Array(6) + .fill(null) + .map((_, i) => ( + + + + )) + : + _.isEmpty(isData) + ? + + Tidak ada event + + : + isData.map((event, index) => { + const bgColor = ['#D8D8F1', '#FED6C5'][index % 2] + const colorDivider = ['#535FCA', '#A7A7A7'][index % 2] + return ( + + router.push(`/division/${param.id}/calender/${event.id}`)} bg={bgColor} pl={15} p={10} style={{ + borderRadius: 10 + }} h={113}> + + + + {event.timeStart} - {event.timeEnd} + {event.title} + Dibuat oleh : {event.user_name} + + + - - ) - }) - ) : ( - Tidak ada event - )} + ) + }) + } ); diff --git a/src/module/calender/ui/history_division_calender.tsx b/src/module/calender/ui/history_division_calender.tsx index 84bb9d3..329d680 100644 --- a/src/module/calender/ui/history_division_calender.tsx +++ b/src/module/calender/ui/history_division_calender.tsx @@ -1,6 +1,6 @@ "use client" import { LayoutNavbarNew, WARNA } from '@/module/_global'; -import { Box, Center, Flex, Grid, Group, Text, TextInput } from '@mantine/core'; +import { Box, Center, Flex, Grid, Group, Skeleton, Text, TextInput } from '@mantine/core'; import { useParams, useRouter } from 'next/navigation'; import React, { useState } from 'react'; import { HiMagnifyingGlass } from 'react-icons/hi2'; @@ -9,63 +9,25 @@ import { funGetAllCalender, funGetHostory } from '../lib/api_calender'; import { useShallowEffect } from '@mantine/hooks'; import moment from 'moment'; import "moment/locale/id"; - -const history = [ - { - dateStart: "21", - data: [ - { - id: 1, - title: "Pembahasan Mengenai Darmasaba", - timeEnd: "10:00", - timeStart: "10.00", - status: "Selesai", - }, - { - id: 2, - title: "Pembahasan Mengenai Darmasaba", - timeEnd: "10:00", - timeStart: "13.00 - 14.00", - }, - ] - }, - { - dateStart: "21", - data: [ - { - id: 1, - title: "Pembahasan Mengenai Darmasaba", - timeEnd: "10:00", - timeStart: "10.00", - }, - { - id: 1, - title: "Pembahasan Mengenai Darmasaba", - timeEnd: "10:00", - timeStart: "13.00", - }, - { - id: 1, - title: "Pembahasan Mengenai Darmasaba", - timeEnd: "10:00", - timeStart: "15.00", - }, - ] - }, -] +import _ from 'lodash'; export default function HistoryDivisionCalender() { const [isData, setData] = useState([]) const router = useRouter() const param = useParams<{ id: string, detail: string }>() const [searchQuery, setSearchQuery] = useState('') + const [loading, setLoading] = useState(true) const getData = async () => { try { + setLoading(true) const response = await funGetHostory('?division=' + param.id + '&search=' + searchQuery) setData(response.data) + setLoading(false) } catch (error) { console.log(error) + } finally { + setLoading(false) } } @@ -74,7 +36,7 @@ export default function HistoryDivisionCalender() { }, [searchQuery]) return ( - + - {isData.map((v, i) => { - return ( - - + {loading ? + Array(6) + .fill(null) + .map((_, i) => ( + + + + + + + + + + {[...Array(1)].map((_, x) => ( + + + + + ))} + + + + )) + : + _.isEmpty(isData) + ? + + Tidak ada history + + : + isData.map((v, i) => { + return ( + + {moment(v.dateStart).format('D MMM')} {moment(v.dateStart).format('dddd')} - - - {v.data.map((d, x) => { - return ( - - {d.title} - {d.timeStart} | {d.timeEnd} - - ) - })} - - - ) - })} + + + {v.data.map((d, x) => { + return ( + + {d.title} + {d.timeStart} | {d.timeEnd} + + ) + })} + + + ) + }) + } diff --git a/src/module/calender/ui/navbar_create_division_calender.tsx b/src/module/calender/ui/navbar_create_division_calender.tsx index 01720d3..5fd9e6d 100644 --- a/src/module/calender/ui/navbar_create_division_calender.tsx +++ b/src/module/calender/ui/navbar_create_division_calender.tsx @@ -22,6 +22,15 @@ export default function NavbarCreateDivisionCalender() { const memberValue = memberUser.get() as IFormMemberCalender[] const [openMember, setOpenMember] = useState(false) const param = useParams<{ id: string, detail: string }>() + const [touched, setTouched] = useState({ + title: false, + dateStart: false, + timeStart: false, + timeEnd: false, + linkMeet: false, + repeatEventTyper: false, + desc: false + }) const [isData, setData] = useState({ idDivision: "", title: "", @@ -50,7 +59,7 @@ export default function NavbarCreateDivisionCalender() { desc: isData.desc, member: memberValue }) - + if (response.success) { setModal(false) router.push(`/division/${param.id}/calender`) @@ -69,7 +78,7 @@ export default function NavbarCreateDivisionCalender() { } else { toast.error(response.message) setModal(false) - } + } } } catch (error) { console.log(error) @@ -89,6 +98,7 @@ export default function NavbarCreateDivisionCalender() { setData({ ...isData, title: event.target.value })} + onBlur={() => setTouched({ ...touched, title: true })} + error={ + touched.title && ( + isData.title == "" ? "Nama Acara Tidak Boleh Kosong" : null + ) + } /> setTouched({ ...touched, dateStart: true })} + error={ + touched.dateStart && ( + isData.dateStart == "" ? "Tanggal Tidak Boleh Kosong" : null + ) + } /> setData({ ...isData, timeStart: event.target.value })} + onBlur={() => setTouched({ ...touched, timeStart: true })} + error={ + touched.timeStart && ( + isData.timeStart == "" ? "Waktu Awal Tidak Boleh Kosong" : null + ) + } /> setData({ ...isData, timeEnd: event.target.value })} + onBlur={() => setTouched({ ...touched, timeEnd: true })} + error={ + touched.timeEnd && ( + isData.timeEnd == "" ? "Waktu Akhir Tidak Boleh Kosong" : null + ) + } /> setData({ ...isData, linkMeet: event.target.value })} + onBlur={() => setTouched({ ...touched, linkMeet: true })} + error={ + touched.linkMeet && ( + isData.linkMeet == "" ? "Link Meet Tidak Boleh Kosong" : null + ) + } />