diff --git a/src/module/_global/view/view_filter.tsx b/src/module/_global/view/view_filter.tsx index fbc45b4..6a29917 100644 --- a/src/module/_global/view/view_filter.tsx +++ b/src/module/_global/view/view_filter.tsx @@ -84,21 +84,23 @@ export default function ViewFilter({ linkFilter }: { linkFilter: string }) { ) } - - - + + + ); } \ No newline at end of file diff --git a/src/module/announcement/ui/create_announcement.tsx b/src/module/announcement/ui/create_announcement.tsx index 955ad30..0265326 100644 --- a/src/module/announcement/ui/create_announcement.tsx +++ b/src/module/announcement/ui/create_announcement.tsx @@ -2,7 +2,7 @@ import { LayoutNavbarNew, WARNA } from "@/module/_global"; import LayoutModal from "@/module/_global/layout/layout_modal"; import { useHookstate } from "@hookstate/core"; -import { Avatar, Box, Button, Flex, Group, Stack, Text, Textarea, TextInput } from "@mantine/core"; +import { Avatar, Box, Button, Flex, Group, rem, Stack, Text, Textarea, TextInput } from "@mantine/core"; import { useShallowEffect } from "@mantine/hooks"; import { useState } from "react"; import toast from "react-hot-toast"; @@ -140,7 +140,7 @@ export default function CreateAnnouncement() { - + Divisi Terpilih {(memberGroup.length === 0) ? ( Belum ada anggota @@ -160,11 +160,15 @@ export default function CreateAnnouncement() { })} - + - + { memberGroup.get().map((v: any, i: any) => { return ( @@ -185,11 +185,15 @@ export default function EditAnnouncement() { - + - ); } diff --git a/src/module/calender/ui/history_division_calender.tsx b/src/module/calender/ui/history_division_calender.tsx index 329d680..13c1c5b 100644 --- a/src/module/calender/ui/history_division_calender.tsx +++ b/src/module/calender/ui/history_division_calender.tsx @@ -18,6 +18,7 @@ export default function HistoryDivisionCalender() { const [searchQuery, setSearchQuery] = useState('') const [loading, setLoading] = useState(true) + const getData = async () => { try { setLoading(true) @@ -100,7 +101,9 @@ export default function HistoryDivisionCalender() { {v.data.map((d, x) => { return ( - + router.push(`/division/${param.id}/calender/${d.id}`)} + > {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 3d030f2..743cab1 100644 --- a/src/module/calender/ui/navbar_create_division_calender.tsx +++ b/src/module/calender/ui/navbar_create_division_calender.tsx @@ -1,6 +1,6 @@ "use client" import { LayoutNavbarNew, WARNA } from '@/module/_global'; -import { Avatar, Box, Button, Flex, Group, Input, Select, SimpleGrid, Stack, Text, Textarea, TextInput } from '@mantine/core'; +import { Avatar, Box, Button, Flex, Group, Input, rem, Select, SimpleGrid, Stack, Text, Textarea, TextInput } from '@mantine/core'; import { DateInput, TimeInput } from '@mantine/dates'; import React, { useState } from 'react'; import { IoIosArrowDropright } from 'react-icons/io'; @@ -245,7 +245,7 @@ export default function NavbarCreateDivisionCalender() { { memberUser.length > 0 && - + Anggota Terpilih Total {memberUser.length} Anggota @@ -287,32 +287,36 @@ export default function NavbarCreateDivisionCalender() { } - - - + + + setModal(false)} description="Apakah Anda yakin ingin menambahkan data?" onYes={(val) => { onSubmit(val) }} /> diff --git a/src/module/calender/ui/update_division_calender.tsx b/src/module/calender/ui/update_division_calender.tsx index 6092dae..522662c 100644 --- a/src/module/calender/ui/update_division_calender.tsx +++ b/src/module/calender/ui/update_division_calender.tsx @@ -1,6 +1,6 @@ "use client" import { LayoutNavbarNew, WARNA } from '@/module/_global'; -import { Avatar, Box, Button, Flex, Group, Input, Select, SimpleGrid, Stack, Text, Textarea, TextInput } from '@mantine/core'; +import { Avatar, Box, Button, Flex, Group, Input, rem, Select, SimpleGrid, Stack, Text, Textarea, TextInput } from '@mantine/core'; import { DateInput, TimeInput } from '@mantine/dates'; import React, { useState } from 'react'; import { IoIosArrowDropright } from 'react-icons/io'; @@ -295,8 +295,8 @@ export default function UpdateDivisionCalender() { Anggota Terpilih Total {memberUser.length} Anggota - - + + - {memberUser.get().map((v: any, i: any) => { - return ( - - - - - - {v.name} - - - - - Anggota - - - ); - })} + {memberUser.length == 0 ? + + Tidak ada Anggota + + : + + memberUser.get().map((v: any, i: any) => { + return ( + + + + + + {v.name} + + + + + Anggota + + + ); + })} - - - + + + setModal(false)} description="Apakah Anda yakin ingin menambahkan data?" onYes={(val) => { onSubmit(val) }} /> diff --git a/src/module/discussion/ui/form_create_discussion.tsx b/src/module/discussion/ui/form_create_discussion.tsx index 628883d..0ba359e 100644 --- a/src/module/discussion/ui/form_create_discussion.tsx +++ b/src/module/discussion/ui/form_create_discussion.tsx @@ -1,7 +1,7 @@ 'use client' import { WARNA } from "@/module/_global"; import LayoutModal from "@/module/_global/layout/layout_modal"; -import { Avatar, Box, Button, Center, Grid, Group, Text, Textarea } from "@mantine/core"; +import { Avatar, Box, Button, Center, Grid, Group, rem, Text, Textarea } from "@mantine/core"; import { useState } from "react"; import toast from "react-hot-toast"; import { funCreateDiscussion } from "../lib/api_discussion"; @@ -13,7 +13,7 @@ export default function FormCreateDiscussion({ id }: { id: string }) { const param = useParams<{ id: string }>() const [touched, setTouched] = useState({ desc: false, - }); + }); const [isData, setData] = useState({ desc: "", idDivision: id @@ -26,7 +26,7 @@ export default function FormCreateDiscussion({ id }: { id: string }) { desc: isData.desc, idDivision: id }) - + if (response.success) { toast.success(response.message) router.push(`/division/${param.id}/discussion/`) @@ -47,7 +47,7 @@ export default function FormCreateDiscussion({ id }: { id: string }) { return ( - + @@ -69,34 +69,38 @@ export default function FormCreateDiscussion({ id }: { id: string }) { onBlur={() => setTouched({ ...touched, desc: true })} error={ touched.desc && ( - isData.desc == "" ? "Form Tidak Boleh Kosong" : null + isData.desc == "" ? "Form Tidak Boleh Kosong" : null ) - } + } /> - + + - setValModal(false)} description="Apakah Anda yakin ingin diff --git a/src/module/discussion/ui/form_edit_discussion.tsx b/src/module/discussion/ui/form_edit_discussion.tsx index 359bc0f..361733f 100644 --- a/src/module/discussion/ui/form_edit_discussion.tsx +++ b/src/module/discussion/ui/form_edit_discussion.tsx @@ -1,7 +1,7 @@ 'use client' import { WARNA } from "@/module/_global" import LayoutModal from "@/module/_global/layout/layout_modal" -import { Box, Group, Avatar, Textarea, Button, Grid } from "@mantine/core" +import { Box, Group, Avatar, Textarea, Button, Grid, rem } from "@mantine/core" import { useParams, useRouter } from "next/navigation" import { useState } from "react" import toast from "react-hot-toast" @@ -15,7 +15,7 @@ export default function FormEditDiscussion() { const [isDataOne, setDataOne] = useState("") const [touched, setTouched] = useState({ desc: false, - }); + }); async function fetchGetOneDiscussion() { try { @@ -56,7 +56,7 @@ export default function FormEditDiscussion() { }, []) return ( - + @@ -78,33 +78,37 @@ export default function FormEditDiscussion() { onBlur={() => setTouched({ ...touched, desc: true })} error={ touched.desc && ( - isDataOne == "" ? "Form Tidak Boleh Kosong" : null + isDataOne == "" ? "Form Tidak Boleh Kosong" : null ) - } + } /> - - - + > + Simpan + setValModal(false)} diff --git a/src/module/division_new/ui/create_anggota_division.tsx b/src/module/division_new/ui/create_anggota_division.tsx index 99a7424..d5995a2 100644 --- a/src/module/division_new/ui/create_anggota_division.tsx +++ b/src/module/division_new/ui/create_anggota_division.tsx @@ -1,9 +1,9 @@ "use client" -import { LayoutNavbarNew, WARNA } from '@/module/_global'; +import { LayoutNavbarNew, SkeletonSingle, WARNA } from '@/module/_global'; import LayoutModal from '@/module/_global/layout/layout_modal'; import { funGetUserByCookies } from '@/module/auth'; import { funGetAllmember, TypeUser } from '@/module/user'; -import { Avatar, Box, Button, Divider, Group, Stack, Text, TextInput } from '@mantine/core'; +import { Avatar, Box, Button, Divider, Group, rem, Stack, Text, TextInput } from '@mantine/core'; import { useParams, useRouter } from 'next/navigation'; import React, { useState } from 'react'; import toast from 'react-hot-toast'; @@ -22,6 +22,7 @@ export default function CreateAnggotaDivision() { const [group, setGroup] = useState("") const [isOpen, setOpen] = useState(false) const param = useParams<{ id: string }>() + const [loading, setLoading] = useState(true) const handleFileClick = (index: number) => { if (selectedFiles.some((i: any) => i.idUser == dataMember[index].id)) { @@ -33,6 +34,7 @@ export default function CreateAnggotaDivision() { async function loadMember(group: string, search: string) { + setLoading(true) const res = await funGetAllmember('?active=true&group=' + group + '&search=' + search); const user = await funGetUserByCookies(); @@ -41,6 +43,7 @@ export default function CreateAnggotaDivision() { } else { toast.error(res.message) } + setLoading(false) } async function loadFirst() { @@ -99,7 +102,17 @@ export default function CreateAnggotaDivision() { onChange={(e: any) => loadMember(group, e.target.value)} /> - + + {loading ? + Array(8) + .fill(null) + .map((_, i) => ( + + + + )) + : + {dataMember.map((v: any, index: any) => { const isSelected = selectedFiles.some((i: any) => i.idUser == dataMember[index].id) const found = memberDb.some((i: any) => i.idUser == v.id) @@ -122,7 +135,13 @@ export default function CreateAnggotaDivision() { ) })} - + } + + - + + + ); } diff --git a/src/module/division_new/ui/edit_division.tsx b/src/module/division_new/ui/edit_division.tsx index 6a68c87..586186c 100644 --- a/src/module/division_new/ui/edit_division.tsx +++ b/src/module/division_new/ui/edit_division.tsx @@ -1,7 +1,7 @@ "use client" import { LayoutNavbarNew, WARNA } from '@/module/_global'; import LayoutModal from '@/module/_global/layout/layout_modal'; -import { Box, Button, Select, Stack, Textarea, TextInput } from '@mantine/core'; +import { Box, Button, rem, Select, Stack, Textarea, TextInput } from '@mantine/core'; import { useShallowEffect } from '@mantine/hooks'; import { useParams, useRouter } from 'next/navigation'; import React, { useState } from 'react'; @@ -106,7 +106,12 @@ export default function EditDivision() { }} /> - + + - + + + ); diff --git a/src/module/task/ui/add_member_detail_task.tsx b/src/module/task/ui/add_member_detail_task.tsx index b80c431..36d6912 100644 --- a/src/module/task/ui/add_member_detail_task.tsx +++ b/src/module/task/ui/add_member_detail_task.tsx @@ -1,5 +1,5 @@ "use client" -import { LayoutNavbarNew, WARNA } from "@/module/_global"; +import { LayoutNavbarNew, SkeletonSingle, WARNA } from "@/module/_global"; import { funGetDivisionById, IDataMemberDivision } from "@/module/division_new"; import { Anchor, @@ -10,6 +10,7 @@ import { Divider, Flex, Group, + rem, Stack, Text, TextInput, @@ -31,10 +32,12 @@ export default function AddMemberDetailTask() { const [isDataMember, setDataMember] = useState([]) const [selectAll, setSelectAll] = useState(false) const [openModal, setOpenModal] = useState(false) + const [loading, setLoading] = useState(true) async function getData() { try { + setLoading(true) const response = await funGetDivisionById(param.id) if (response.success) { setData(response.data.member) @@ -48,9 +51,13 @@ export default function AddMemberDetailTask() { } else { toast.error(res.message); } + + setLoading(false) } catch (error) { console.log(error) toast.error("Gagal mendapatkan anggota, coba lagi nanti"); + } finally { + setLoading(false) } } @@ -127,54 +134,67 @@ export default function AddMemberDetailTask() { {selectAll ? : ""} - - {isData.map((v, i) => { - const isSelected = selectedFiles.some((i: any) => i?.idUser == v.idUser); - const found = isDataMember.some((i: any) => i.idUser == v.idUser) - return ( - (!found) ? handleFileClick(i) : null}> - - - - - ( + + + + )) + : + + {isData.map((v, i) => { + const isSelected = selectedFiles.some((i: any) => i?.idUser == v.idUser); + const found = isDataMember.some((i: any) => i.idUser == v.idUser) + return ( + (!found) ? handleFileClick(i) : null}> + + + + + + {v.name} + + {(found) ? "sudah menjadi anggota" : ""} + + + - {v.name} - - {(found) ? "sudah menjadi anggota" : ""} - - - - {isSelected ? : ""} - - - - - ); - })} - - - - + paddingLeft: 20, + }} + > + {isSelected ? : ""} + + + + + ); + })} + + } + + + setOpenModal(false)} diff --git a/src/module/task/ui/cancel_task.tsx b/src/module/task/ui/cancel_task.tsx index d42b367..61850b6 100644 --- a/src/module/task/ui/cancel_task.tsx +++ b/src/module/task/ui/cancel_task.tsx @@ -3,6 +3,7 @@ import { LayoutNavbarNew, WARNA } from "@/module/_global"; import { Box, Button, + rem, Stack, Textarea, } from "@mantine/core"; @@ -20,7 +21,7 @@ export default function CancelTask() { const param = useParams<{ id: string, detail: string }>() const [touched, setTouched] = useState({ reason: false, - }); + }); function onVerification() { if (alasan == "") @@ -47,7 +48,7 @@ export default function CancelTask() { return ( - + @@ -68,18 +69,22 @@ export default function CancelTask() { onBlur={() => setTouched({ ...touched, reason: true })} /> - - - + + + diff --git a/src/module/task/ui/create_date_end_task.tsx b/src/module/task/ui/create_date_end_task.tsx index 8d8e3cb..e8c3b55 100644 --- a/src/module/task/ui/create_date_end_task.tsx +++ b/src/module/task/ui/create_date_end_task.tsx @@ -7,6 +7,7 @@ import { Flex, Group, Input, + rem, SimpleGrid, Stack, Text, @@ -110,7 +111,12 @@ export default function ViewDateEndTask({ onClose }: { onClose: (val: IFormDateT error={touched.title && title == "" ? "Judul Tugas Tidak Boleh Kosong" : null} /> - + + - ); } diff --git a/src/module/task/ui/edit_detail_task.tsx b/src/module/task/ui/edit_detail_task.tsx index 23717f6..c0763b5 100644 --- a/src/module/task/ui/edit_detail_task.tsx +++ b/src/module/task/ui/edit_detail_task.tsx @@ -7,9 +7,11 @@ import { Flex, Group, Input, + rem, SimpleGrid, Stack, Text, + TextInput, } from "@mantine/core"; import React, { useState } from "react"; import { DatePicker } from "@mantine/dates"; @@ -122,31 +124,37 @@ export default function EditDetailTask() { - { setTitle(e.target.value) }} /> - - - + + + setOpenModal(false)} diff --git a/src/module/task/ui/edit_task.tsx b/src/module/task/ui/edit_task.tsx index ea033d7..caeece9 100644 --- a/src/module/task/ui/edit_task.tsx +++ b/src/module/task/ui/edit_task.tsx @@ -4,6 +4,7 @@ import { Box, Button, Input, + rem, Stack, Textarea, TextInput, @@ -23,7 +24,7 @@ export default function EditTask() { const param = useParams<{ id: string, detail: string }>() const [touched, setTouched] = useState({ title: false, - }); + }); function onVerification() { if (title == "") @@ -69,7 +70,7 @@ export default function EditTask() { return ( - + @@ -86,18 +87,23 @@ export default function EditTask() { size="md" value={title} onChange={(e) => { - setTitle(e.target.value) + setTitle(e.target.value) setTouched({ ...touched, title: false }) }} error={ touched.title && ( - title == "" ? "Error! harus memasukkan judul tugas" : null + title == "" ? "Error! harus memasukkan judul tugas" : null ) - } + } onBlur={() => setTouched({ ...touched, title: true })} /> - + +