From 85cea0d785d5e0b4fa86e6ddd788ffa50aaf2d0a Mon Sep 17 00:00:00 2001 From: amel Date: Tue, 29 Oct 2024 16:31:50 +0800 Subject: [PATCH 1/4] upd: Deskripsi: - loading saat mengganti status jabatan No Issues --- .../user/member/ui/drawer_detail_member.tsx | 170 +++++++++--------- .../user/member/ui/navbar_detail_member.tsx | 26 +-- 2 files changed, 100 insertions(+), 96 deletions(-) diff --git a/src/module/user/member/ui/drawer_detail_member.tsx b/src/module/user/member/ui/drawer_detail_member.tsx index bb537fd..744b096 100644 --- a/src/module/user/member/ui/drawer_detail_member.tsx +++ b/src/module/user/member/ui/drawer_detail_member.tsx @@ -11,92 +11,96 @@ import { useWibuRealtime } from "wibu-realtime"; import { funEditStatusMember } from "../lib/api_member"; export default function DrawerDetailMember({ onDeleted, id, status, }: { onDeleted: (val: boolean) => void; id: string; status: boolean; }) { - const router = useRouter(); - const [isModal, setModal] = useState(false); - const tema = useHookstate(TEMA) - const [dataRealTime, setDataRealtime] = useWibuRealtime({ - WIBU_REALTIME_TOKEN: keyWibu, - project: "sdm" - }) + const router = useRouter() + const [isModal, setModal] = useState(false) + const tema = useHookstate(TEMA) + const [loadingModal, setLoadingModal] = useState(false) + const [dataRealTime, setDataRealtime] = useWibuRealtime({ + WIBU_REALTIME_TOKEN: keyWibu, + project: "sdm" + }) - async function nonActive(val: boolean) { - try { - if (val) { - const res = await funEditStatusMember(id, { - isActive: status ? true : false, - }); - if (res.success) { - setDataRealtime([{ - category: "data-member", - group: res.data.idGroup, - }]) - toast.success(res.message); - router.push("/member?active=true"); - onDeleted(true); - } else { - onDeleted(false); - } + async function nonActive(val: boolean) { + try { + if (val) { + setLoadingModal(true) + const res = await funEditStatusMember(id, { + isActive: status ? true : false, + }); + if (res.success) { + setDataRealtime([{ + category: "data-member", + group: res.data.idGroup, + }]) + toast.success(res.message); + router.push("/member?active=true"); + onDeleted(true); + } else { + onDeleted(false); + } + } + } catch (error) { + console.error(error); + toast.error("Terjadi kesalahan"); + } finally { + setModal(false) + setLoadingModal(false) } - setModal(false); - } catch (error) { - console.error(error); - setModal(false); - toast.error("Terjadi kesalahan"); - } - } + } - return ( - - - - { - setModal(true); - }} - > - - - - - - {" "} - {status === false ? "Aktifkan" : "Non Aktifkan"} - - - + return ( + + + + { + setModal(true); + }} + > + + + + + + {" "} + {status === false ? "Aktifkan" : "Non Aktifkan"} + + + - { - router.push(`/member/edit/${id}`); + { + router.push(`/member/edit/${id}`); + }} + > + + + + + + Edit + + + + + + setModal(false)} + description="Apakah Anda yakin ingin mengubah status aktifasi anggota?" + onYes={(val) => { + nonActive(val); }} - > - - - - - - Edit - - - - - - setModal(false)} - description="Apakah Anda yakin ingin mengubah status aktifasi anggota?" - onYes={(val) => { - nonActive(val); - }} - /> - - ); + /> + + ); } diff --git a/src/module/user/member/ui/navbar_detail_member.tsx b/src/module/user/member/ui/navbar_detail_member.tsx index 56b3fe9..c3123ab 100644 --- a/src/module/user/member/ui/navbar_detail_member.tsx +++ b/src/module/user/member/ui/navbar_detail_member.tsx @@ -1,19 +1,19 @@ 'use client' -import { LayoutNavbarHome, LayoutIconBack, WARNA, LayoutDrawer, SkeletonDetailProfile, globalRole, TEMA } from "@/module/_global"; -import { Box, Group, ActionIcon, Stack, Text, Center, Avatar, Skeleton, Grid } from "@mantine/core"; -import { HiMenu } from "react-icons/hi"; -import DrawerDetailMember from "./drawer_detail_member"; -import { useState } from "react"; -import { RiIdCardFill } from "react-icons/ri"; -import { FaSquarePhone } from "react-icons/fa6"; -import { MdEmail } from "react-icons/md"; -import { IoMaleFemale } from "react-icons/io5"; -import { useShallowEffect } from "@mantine/hooks"; -import { funGetOneMember } from "../lib/api_member"; -import toast from "react-hot-toast"; -import { IListMember, IMember } from "../lib/type_member"; +import { globalRole, LayoutDrawer, LayoutIconBack, LayoutNavbarHome, SkeletonDetailProfile, TEMA } from "@/module/_global"; import { useHookstate } from "@hookstate/core"; +import { ActionIcon, Avatar, Box, Center, Grid, Group, Skeleton, Stack, Text } from "@mantine/core"; +import { useShallowEffect } from "@mantine/hooks"; +import { useState } from "react"; +import toast from "react-hot-toast"; +import { FaSquarePhone } from "react-icons/fa6"; +import { HiMenu } from "react-icons/hi"; +import { IoMaleFemale } from "react-icons/io5"; +import { MdEmail } from "react-icons/md"; +import { RiIdCardFill } from "react-icons/ri"; import { valueRoleUser } from "../../lib/val_user"; +import { funGetOneMember } from "../lib/api_member"; +import { IListMember, IMember } from "../lib/type_member"; +import DrawerDetailMember from "./drawer_detail_member"; export default function NavbarDetailMember({ id }: IMember) { From 55adceb89b40d3f40e358dafde190c88a7fd1de9 Mon Sep 17 00:00:00 2001 From: amel Date: Tue, 29 Oct 2024 16:50:29 +0800 Subject: [PATCH 2/4] upd: jabatan Deskripsi: - loading status aktivasi jabatan No Issues --- .../position/ui/drawer_detail_position.tsx | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/module/position/ui/drawer_detail_position.tsx b/src/module/position/ui/drawer_detail_position.tsx index aff4f6b..56b8b7f 100644 --- a/src/module/position/ui/drawer_detail_position.tsx +++ b/src/module/position/ui/drawer_detail_position.tsx @@ -1,25 +1,24 @@ -import { keyWibu, LayoutDrawer, TEMA, WARNA } from "@/module/_global" +import { keyWibu, LayoutDrawer, TEMA } from "@/module/_global" import LayoutModal from "@/module/_global/layout/layout_modal" -import { funGetAllGroup, IDataGroup } from "@/module/group" -import { Box, Stack, SimpleGrid, Flex, Text, Select, TextInput, Button, Skeleton } from "@mantine/core" +import { funGetAllGroup } from "@/module/group" +import { useHookstate } from "@hookstate/core" +import { Box, Button, Flex, SimpleGrid, Skeleton, Stack, Text, TextInput } from "@mantine/core" import { useShallowEffect } from "@mantine/hooks" -import { useEffect, useState } from "react" +import { useState } from "react" import toast from "react-hot-toast" import { FaPencil, FaToggleOff } from "react-icons/fa6" +import { useWibuRealtime } from "wibu-realtime" import { funEditPosition, funEditStatusPosition, funGetOnePosition } from "../lib/api_position" import { IDataPosition } from "../lib/type_position" -import { useHookstate } from "@hookstate/core" import { globalRefreshPosition } from "../lib/val_posisition" -import { useWibuRealtime } from "wibu-realtime" -export default function DrawerDetailPosition({ onUpdated, id, isActive }: { - onUpdated: (val: boolean) => void, id: string, isActive: boolean; -}) { +export default function DrawerDetailPosition({ onUpdated, id, isActive }: { onUpdated: (val: boolean) => void, id: string, isActive: boolean; }) { const [openDrawerGroup, setOpenDrawerGroup] = useState(false) const [isModal, setModal] = useState(false) const refresh = useHookstate(globalRefreshPosition) const [loading, setLoading] = useState(true) const [loadingEdit, setLoadingEdit] = useState(false) + const [loadingModal, setLoadingModal] = useState(false) const tema = useHookstate(TEMA) const [data, setData] = useState({ id: id, @@ -128,6 +127,7 @@ export default function DrawerDetailPosition({ onUpdated, id, isActive }: { async function nonActive(val: boolean) { try { if (val) { + setLoadingModal(true) const res = await funEditStatusPosition(id, { isActive: isActive }) if (res.success) { toast.success(res.message); @@ -142,12 +142,13 @@ export default function DrawerDetailPosition({ onUpdated, id, isActive }: { toast.error(res.message) } } - setModal(false); } catch (error) { console.error(error); - setModal(false); toast.error("Edit jabatan gagal, coba lagi nanti"); - onUpdated(false); + onUpdated(false) + } finally { + setLoadingModal(false) + setModal(false) } } @@ -233,7 +234,7 @@ export default function DrawerDetailPosition({ onUpdated, id, isActive }: { - setModal(false)} + setModal(false)} description="Apakah Anda yakin ingin mengubah status aktifasi data?" onYes={(val) => { nonActive(val) }} /> From 14e61dedf3dc9fb9093481f1c0fa8385fd78ea6e Mon Sep 17 00:00:00 2001 From: amel Date: Tue, 29 Oct 2024 17:11:02 +0800 Subject: [PATCH 3/4] fix: update Deskripsi: - update jarak button grup - update jarak form edit jabatan No Issues --- src/module/group/ui/drawer_group.tsx | 10 ++++-- src/module/group/ui/edit_drawer_group.tsx | 24 ++++++-------- src/module/group/ui/list_group_active.tsx | 33 +++++++------------ .../position/ui/drawer_detail_position.tsx | 2 +- 4 files changed, 30 insertions(+), 39 deletions(-) diff --git a/src/module/group/ui/drawer_group.tsx b/src/module/group/ui/drawer_group.tsx index 99d70c3..b53a39d 100644 --- a/src/module/group/ui/drawer_group.tsx +++ b/src/module/group/ui/drawer_group.tsx @@ -12,6 +12,7 @@ export default function DrawerGroup({ onSuccess, }: { onSuccess: (val: boolean) const [namaGroup, setNamaGroup] = useState(""); const tema = useHookstate(TEMA) const refresh = useHookstate(globalRefreshGroup) + const [loading, setLoading] = useState(false) const [touched, setTouched] = useState({ name: false, }); @@ -19,8 +20,8 @@ export default function DrawerGroup({ onSuccess, }: { onSuccess: (val: boolean) async function createData() { try { + setLoading(true) const response = await funCreateGroup({ name: namaGroup }) - if (response.success) { toast.success(response.message); refresh.set(!refresh.get()) @@ -33,6 +34,8 @@ export default function DrawerGroup({ onSuccess, }: { onSuccess: (val: boolean) } catch (error) { console.error(error); toast.error("Gagal menambahkan grup, coba lagi nanti"); + } finally { + setLoading(false) } } @@ -85,7 +88,7 @@ export default function DrawerGroup({ onSuccess, }: { onSuccess: (val: boolean) onClose={() => setOpenDrawerGroup(false)} title={"Tambah Grup"} > - + - + diff --git a/src/module/group/ui/edit_drawer_group.tsx b/src/module/group/ui/edit_drawer_group.tsx index cc34ea3..f5c7e48 100644 --- a/src/module/group/ui/edit_drawer_group.tsx +++ b/src/module/group/ui/edit_drawer_group.tsx @@ -2,15 +2,7 @@ import { LayoutDrawer, TEMA } from "@/module/_global"; import LayoutModal from "@/module/_global/layout/layout_modal"; import { useHookstate } from "@hookstate/core"; -import { - Box, - Button, - Flex, - SimpleGrid, - Stack, - Text, - TextInput -} from "@mantine/core"; +import { Box, Button, Flex, SimpleGrid, Stack, Text, TextInput } from "@mantine/core"; import { useShallowEffect } from "@mantine/hooks"; import { useState } from "react"; import toast from "react-hot-toast"; @@ -23,6 +15,7 @@ export default function EditDrawerGroup({ onUpdated, id, isActive, }: { onUpdate const [isModal, setModal] = useState(false); const [name, setName] = useState(""); const [loading, setLoading] = useState(false); + const [loadingModal, setLoadingModal] = useState(false) const refresh = useHookstate(globalRefreshGroup) const tema = useHookstate(TEMA) const [touched, setTouched] = useState({ @@ -90,6 +83,7 @@ export default function EditDrawerGroup({ onUpdated, id, isActive, }: { onUpdate async function nonActive(val: boolean) { try { if (val) { + setLoadingModal(true) const res = await funEditStatusGroup(id, { isActive: isActive }); if (res.success) { toast.success(res.message); @@ -99,11 +93,12 @@ export default function EditDrawerGroup({ onUpdated, id, isActive, }: { onUpdate toast.error(res.message) } } - setModal(false); } catch (error) { - setModal(false); console.error(error); toast.error("Edit grup gagal, coba lagi nanti"); + } finally { + setLoadingModal(false) + setModal(false); } } @@ -146,7 +141,7 @@ export default function EditDrawerGroup({ onUpdated, id, isActive, }: { onUpdate onClose={() => setOpenDrawerGroup(false)} title={"Edit Grup"} > - + { onValidation('name', e.target.value) @@ -171,7 +166,7 @@ export default function EditDrawerGroup({ onUpdated, id, isActive, }: { onUpdate label="Grup" required /> - +