diff --git a/src/module/announcement/ui/create_announcement.tsx b/src/module/announcement/ui/create_announcement.tsx index 5dbe027..25d72cf 100644 --- a/src/module/announcement/ui/create_announcement.tsx +++ b/src/module/announcement/ui/create_announcement.tsx @@ -19,14 +19,13 @@ export default function CreateAnnouncement() { const memberGroup = useHookstate(globalMemberAnnouncement) const memberValue = memberGroup.get() as GroupData[] const [selectedFiles, setSelectedFiles] = useState([]) + const [loadingKonfirmasi, setLoadingKonfirmasi] = useState(false) const router = useRouter() const tema = useHookstate(TEMA) const [data, setData] = useWibuRealtime({ WIBU_REALTIME_TOKEN: keyWibu, project: "sdm" }) - - const [isChooseMember, setIsChooseMember] = useState(false) const [isData, setisData] = useState({ title: "", @@ -37,8 +36,10 @@ export default function CreateAnnouncement() { desc: false }); + async function onSubmit() { try { + setLoadingKonfirmasi(true) const response = await funCreateAnnouncement({ title: isData.title, desc: isData.desc, @@ -56,9 +57,11 @@ export default function CreateAnnouncement() { } catch (error) { console.error(error) toast.error("Gagal menambahkan pengumuman, coba lagi nanti"); + } finally { + setLoadingKonfirmasi(false) + setOpen(false) } - setOpen(false) } async function loadData() { @@ -69,18 +72,31 @@ export default function CreateAnnouncement() { loadData() }, []) - function onToChooseMember() { - setIsChooseMember(true) - } - - if (isChooseMember) return { setIsChooseMember(false) }} /> function onCheck() { - if (Object.values(touched).some((v) => v == true)) + const cek = checkAll() + if (!cek) return false + + if (memberValue.length == 0) + return toast.error("Error! silahkan pilih divisi") + setOpen(true) } + function checkAll() { + let nilai = true + if (isData.title === "") { + setTouched(touched => ({ ...touched, title: true })) + nilai = false + } + if (isData.desc === "") { + setTouched(touched => ({ ...touched, desc: true })) + nilai = false + } + return nilai + } + function onValidation(kategori: string, val: string) { if (kategori == 'title') { @@ -100,6 +116,8 @@ export default function CreateAnnouncement() { } } + if (isChooseMember) return { setIsChooseMember(false) }} /> + return ( } /> @@ -151,7 +169,7 @@ export default function CreateAnnouncement() { padding: 10, borderRadius: 10 }} - onClick={() => { onToChooseMember() }} + onClick={() => { setIsChooseMember(true) }} > Tambah divisi penerima pengumuman @@ -162,7 +180,7 @@ export default function CreateAnnouncement() { Divisi Terpilih {(memberGroup.length === 0) ? ( - Belum ada anggota + Belum ada divisi yang dipilih ) : memberGroup.get().map((v: any, i: any) => { return ( @@ -195,13 +213,14 @@ export default function CreateAnnouncement() { Simpan - setOpen(false)} + setOpen(false)} description="Apakah Anda yakin ingin menambahkan data?" onYes={(val) => { if (val) { onSubmit() + } else { + setOpen(false) } - setOpen(false) }} /> diff --git a/src/module/announcement/ui/create_users_announcement.tsx b/src/module/announcement/ui/create_users_announcement.tsx index b4c1037..7d2e7e5 100644 --- a/src/module/announcement/ui/create_users_announcement.tsx +++ b/src/module/announcement/ui/create_users_announcement.tsx @@ -1,15 +1,16 @@ "use client"; -import { LayoutNavbarNew, TEMA, WARNA } from '@/module/_global'; +import { LayoutNavbarNew, TEMA } from '@/module/_global'; import { funGetGroupDivision } from '@/module/group/lib/api_group'; -import { Box, Button, Divider, Flex, Group, rem, Skeleton, Stack, Text } from '@mantine/core'; -import { useMediaQuery, useShallowEffect } from '@mantine/hooks'; -import React, { useState } from 'react'; -import { FaCheck } from 'react-icons/fa'; -import { GroupData } from '../lib/type_announcement'; import { useHookstate } from '@hookstate/core'; -import { globalMemberAnnouncement } from '../lib/val_announcement'; -import { FaMinus } from 'react-icons/fa6'; +import { ActionIcon, Box, Button, Divider, Group, rem, Skeleton, Stack, Text } from '@mantine/core'; +import { useMediaQuery, useShallowEffect } from '@mantine/hooks'; +import { useState } from 'react'; import toast from 'react-hot-toast'; +import { FaCheck } from 'react-icons/fa'; +import { FaMinus } from 'react-icons/fa6'; +import { HiChevronLeft } from 'react-icons/hi2'; +import { GroupData } from '../lib/type_announcement'; +import { globalMemberAnnouncement } from '../lib/val_announcement'; @@ -112,7 +113,13 @@ export default function CreateUsersAnnouncement({ onClose }: { onClose: (val: an return (
- } /> + + { onClose(true) }} bg={tema.get().bgIcon} size="lg" radius="lg" aria-label="Settings"> + + + + } title="Tambah Divisi Penerima Pengumuman" menu={<>} /> () const [loading, setLoading] = useState(true) @@ -75,6 +75,7 @@ export default function EditAnnouncement() { toast.error("Gagal mendapatkan pengumuman, coba lagi nanti") } finally { setLoading(false) + setOpen(false) } } @@ -94,30 +95,24 @@ export default function EditAnnouncement() { if (response.success) { toast.success(response.message) - setLoadingSubmit(false) router.push(`/announcement/${param.id}`) } else { toast.error(response.message) } - setLoadingSubmit(false) } catch (error) { console.error(error) toast.error("Gagal mengedit pengumuman, coba lagi nanti"); } finally { setLoadingSubmit(false) + setOpen(false) } - setOpen(false) } - - - - if (isChooseDivisi) return { setChooseDivisi(false) }} /> - - function onCheck() { if (Object.values(touched).some((v) => v == true)) return false + if (memberGroup.get().length == 0) + return toast.error("Error! silahkan pilih divisi") setOpen(true) } @@ -140,6 +135,8 @@ export default function EditAnnouncement() { } } + if (isChooseDivisi) return { setChooseDivisi(false) }} /> + return ( <> } /> @@ -160,7 +157,7 @@ export default function EditAnnouncement() { : <> { - return ( - - {v.name} - - - - { - v.Division.map((division: any) => { - return - {division.name} - - }) - } - - - - - ); + <> + Divisi Terpilih + { + memberGroup.get().length == 0 ? Belum ada divisi yang dipilih : + memberGroup.get().map((v: any, i: any) => { + return ( + + {v.name} + + + + { + v.Division.map((division: any) => { + return + {division.name} + + }) + } + + + + + ); + + }) + } + - } - ) } @@ -282,8 +285,9 @@ export default function EditAnnouncement() { onYes={(val) => { if (val) { onSubmit() + } else { + setOpen(false) } - setOpen(false) }} /> ) diff --git a/src/module/announcement/ui/edit_choose_member.tsx b/src/module/announcement/ui/edit_choose_member.tsx index 5f234d0..642883e 100644 --- a/src/module/announcement/ui/edit_choose_member.tsx +++ b/src/module/announcement/ui/edit_choose_member.tsx @@ -1,17 +1,16 @@ "use client"; -import { LayoutNavbarNew, TEMA, WARNA } from '@/module/_global'; +import { LayoutNavbarNew, TEMA } from '@/module/_global'; import { funGetGroupDivision } from '@/module/group/lib/api_group'; -import { Box, Button, Divider, Flex, Group, rem, Skeleton, Stack, Text } from '@mantine/core'; -import { useMediaQuery, useShallowEffect } from '@mantine/hooks'; -import React, { useState } from 'react'; -import { FaCheck } from 'react-icons/fa'; -import { GroupData, GroupDataEditAnnouncement } from '../lib/type_announcement'; import { useHookstate } from '@hookstate/core'; -import { globalMemberEditAnnouncement } from '../lib/val_announcement'; -import { FaMinus } from 'react-icons/fa6'; +import { ActionIcon, Box, Button, Divider, Group, rem, Skeleton, Stack, Text } from '@mantine/core'; +import { useMediaQuery, useShallowEffect } from '@mantine/hooks'; +import { useState } from 'react'; import toast from 'react-hot-toast'; - - +import { FaCheck } from 'react-icons/fa'; +import { FaMinus } from 'react-icons/fa6'; +import { HiChevronLeft } from 'react-icons/hi2'; +import { GroupData } from '../lib/type_announcement'; +import { globalMemberEditAnnouncement } from '../lib/val_announcement'; interface CheckedState { [key: string]: string[]; @@ -111,7 +110,13 @@ export default function EditChooseMember({ onClose }: { onClose: (val: any) => v return (
- } /> + + { onClose(true) }} bg={tema.get().bgIcon} size="lg" radius="lg" aria-label="Settings"> + + + + } title="Tambah Divisi Penerima Pengumuman" menu={<>} />