diff --git a/src/app/(application)/banner/page.tsx b/src/app/(application)/banner/page.tsx index cf5edef..23618b0 100644 --- a/src/app/(application)/banner/page.tsx +++ b/src/app/(application)/banner/page.tsx @@ -1,4 +1,3 @@ - import { ListBanner, NavbarBanner } from "@/module/banner"; import { Box } from "@mantine/core"; @@ -7,7 +6,6 @@ export default function Page() { - ); } \ No newline at end of file diff --git a/src/app/api/home/route.ts b/src/app/api/home/route.ts index aee2186..d2cde94 100644 --- a/src/app/api/home/route.ts +++ b/src/app/api/home/route.ts @@ -185,9 +185,10 @@ export async function GET(request: Request) { const cek = data.some((i: any) => i.status == dataStatus[index].status) if (cek) { const find = ((Number(data.find((i: any) => i.status == dataStatus[index].status)?._count) * 100) / data.reduce((n, { _count }) => n + _count, 0)).toFixed(2) + const fix = find.substr(-2, 2) == "00" ? find.substr(0, 2) : find input = { name: dataStatus[index].name, - value: find + value: fix } } else { input = { diff --git a/src/module/_global/layout/layout_icon_back.tsx b/src/module/_global/layout/layout_icon_back.tsx index d4658fa..a84f8c1 100644 --- a/src/module/_global/layout/layout_icon_back.tsx +++ b/src/module/_global/layout/layout_icon_back.tsx @@ -1,11 +1,9 @@ 'use client' -import { ActionIcon, Box } from '@mantine/core'; -import { useRouter } from 'next/navigation'; -import React from 'react'; -import { HiChevronLeft } from 'react-icons/hi2'; -import { WARNA } from '../fun/WARNA'; -import _ from 'lodash'; import { useHookstate } from '@hookstate/core'; +import { ActionIcon, Box } from '@mantine/core'; +import _ from 'lodash'; +import { useRouter } from 'next/navigation'; +import { HiChevronLeft } from 'react-icons/hi2'; import { TEMA } from '../bin/val_global'; function LayoutIconBack({ back }: { back?: string }) { diff --git a/src/module/_global/layout/layout_navbar_new.tsx b/src/module/_global/layout/layout_navbar_new.tsx index bd2059a..5f5a244 100644 --- a/src/module/_global/layout/layout_navbar_new.tsx +++ b/src/module/_global/layout/layout_navbar_new.tsx @@ -1,11 +1,10 @@ 'use client' -import { ActionIcon, Box, Grid, Group, Text, Title } from '@mantine/core'; -import React from 'react'; -import { WARNA } from '../fun/WARNA'; -import LayoutIconBack from './layout_icon_back'; -import _ from 'lodash'; import { useHookstate } from '@hookstate/core'; +import { Box, Grid, Group, Title } from '@mantine/core'; +import _ from 'lodash'; +import React from 'react'; import { TEMA } from '../bin/val_global'; +import LayoutIconBack from './layout_icon_back'; export const LayoutNavbarNew = ({ back, state, title, menu }: { back?: string, title: string, menu: React.ReactNode, state?: React.ReactNode }) => { const tema = useHookstate(TEMA) diff --git a/src/module/banner/ui/list_banner.tsx b/src/module/banner/ui/list_banner.tsx index 05b2c2b..8497475 100644 --- a/src/module/banner/ui/list_banner.tsx +++ b/src/module/banner/ui/list_banner.tsx @@ -5,7 +5,7 @@ import LayoutModal from '@/module/_global/layout/layout_modal'; import { useHookstate } from '@hookstate/core'; import { ActionIcon, Box, Flex, Group, Image, Paper, SimpleGrid, Stack, Text } from '@mantine/core'; import { useShallowEffect } from '@mantine/hooks'; -import { useParams, useRouter } from 'next/navigation'; +import { useRouter } from 'next/navigation'; import { useState } from 'react'; import toast from 'react-hot-toast'; import { FaFile, FaPencil, FaTrash } from 'react-icons/fa6'; @@ -25,6 +25,7 @@ function ListBanner() { const [isData, setData] = useState([]) const [idData, setIdData] = useState('') const [isPage, setPage] = useState(1) + const [loadingModal, setLoadingModal] = useState(false) const fetchData = async (loading: boolean) => { try { @@ -57,6 +58,7 @@ function ListBanner() { async function onDelete(id: string) { try { + setLoadingModal(true) const res = await funDeleteBanner(id); if (res.success) { toast.success(res.message) @@ -70,8 +72,10 @@ function ListBanner() { } catch (error) { console.error(error); toast.error("Gagal menghapus banner, coba lagi nanti"); + } finally { + setLoadingModal(false) + setOpenModal(false) } - } @@ -100,34 +104,34 @@ function ListBanner() { isData.map((v, i) => { return ( - { - setIdData(v.id); - setIdDataStorage(v.image); - setExtension(v.extension); - setOpenDrawer(true) - } - } - style={{ - width: '100%', - maxWidth: 550, - height: 85, - backgroundColor: 'transparent', - border: `1px solid ${tema.get().bgTotalKegiatan}` + { + setIdData(v.id); + setIdDataStorage(v.image); + setExtension(v.extension); + setOpenDrawer(true) + } + } + style={{ + width: '100%', + maxWidth: 550, + height: 85, + backgroundColor: 'transparent', + border: `1px solid ${tema.get().bgTotalKegiatan}` - }}> - - - - - {v.title} - - + }}> + + + + + {v.title} + + ) }) @@ -178,14 +182,16 @@ function ListBanner() { setOpenModal(false)} description='Apakah Anda yakin ingin menghapus banner?' onYes={(val) => { if (val) { onDelete(idData) + } else { + setOpenModal(false) } - setOpenModal(false) }} /> setOpenModalView(false)} file={idDataStorage} extension={isExtension} fitur="image" /> diff --git a/src/module/color_palette/ui/drawer_palet_edit_end_default.tsx b/src/module/color_palette/ui/drawer_palet_edit_end_default.tsx index c23d491..d64abd6 100644 --- a/src/module/color_palette/ui/drawer_palet_edit_end_default.tsx +++ b/src/module/color_palette/ui/drawer_palet_edit_end_default.tsx @@ -3,11 +3,11 @@ import LayoutModal from '@/module/_global/layout/layout_modal'; import { useHookstate } from '@hookstate/core'; import { Box, Flex, SimpleGrid, Text } from '@mantine/core'; import { useRouter } from 'next/navigation'; -import React, { useState } from 'react'; +import { useState } from 'react'; import toast from 'react-hot-toast'; import { FaPencil, FaTrash } from 'react-icons/fa6'; import { IoColorPalette } from 'react-icons/io5'; -import { funChangeTheme, funDeleteTheme, funGetThemeById } from '../lib/api_theme'; +import { funChangeTheme, funDeleteTheme } from '../lib/api_theme'; import { globalRefreshTheme } from '../lib/val_theme'; export default function DrawerPaletEditEndDefault({ id, idVillage, isUse }: { id: string, idVillage: string, isUse: boolean }) { @@ -16,9 +16,12 @@ export default function DrawerPaletEditEndDefault({ id, idVillage, isUse }: { id const [isModalDel, setModalDel] = useState(false) const tema = useHookstate(TEMA) const refresh = useHookstate(globalRefreshTheme) + const [loadingApply, setLoadingApply] = useState(false) + const [loadingDelete, setLoadingDelete] = useState(false) async function onChangeTheme() { try { + setLoadingApply(true) const res = await funChangeTheme(id) if (res.success) { tema.set(res.data) @@ -29,11 +32,15 @@ export default function DrawerPaletEditEndDefault({ id, idVillage, isUse }: { id } catch (error) { console.error(error) toast.error("Gagal mengubah tema, coba lagi nanti"); + } finally { + setLoadingApply(false) + setModal(false) } } async function onDelete() { try { + setLoadingDelete(true) const res = await funDeleteTheme(id) if (res.success) { toast.success(res.message); @@ -44,6 +51,9 @@ export default function DrawerPaletEditEndDefault({ id, idVillage, isUse }: { id } catch (error) { console.error(error) toast.error("Gagal menghapus tema, coba lagi nanti"); + } finally { + setLoadingDelete(false) + setModalDel(false) } } @@ -86,23 +96,25 @@ export default function DrawerPaletEditEndDefault({ id, idVillage, isUse }: { id } - setModal(false)} + setModal(false)} description="Apakah Anda yakin ingin mengubah Tema Aplikasi?" onYes={(val) => { if (val) { onChangeTheme() + }else{ + setModal(false) } - setModal(false) }} /> - setModalDel(false)} + setModalDel(false)} description="Apakah Anda yakin ingin menghapus Tema Aplikasi?" onYes={(val) => { if (val) { onDelete() + }else{ + setModalDel(false) } - setModalDel(false) }} /> ); diff --git a/src/module/division_new/ui/navbar_detail_division.tsx b/src/module/division_new/ui/navbar_detail_division.tsx index d857157..007c0bd 100644 --- a/src/module/division_new/ui/navbar_detail_division.tsx +++ b/src/module/division_new/ui/navbar_detail_division.tsx @@ -1,14 +1,14 @@ 'use client' import { LayoutDrawer, LayoutNavbarNew, TEMA } from "@/module/_global"; -import { ActionIcon, Box } from "@mantine/core"; -import { useState } from "react"; -import { HiMenu } from "react-icons/hi"; -import DrawerDetailDivision from "./drawer_detail_division"; -import { funGetDivisionById } from "../lib/api_division"; -import { useParams } from "next/navigation"; -import toast from "react-hot-toast"; -import { useShallowEffect } from "@mantine/hooks"; import { useHookstate } from "@hookstate/core"; +import { ActionIcon } from "@mantine/core"; +import { useShallowEffect } from "@mantine/hooks"; +import { useParams } from "next/navigation"; +import { useState } from "react"; +import toast from "react-hot-toast"; +import { HiMenu } from "react-icons/hi"; +import { funGetDivisionById } from "../lib/api_division"; +import DrawerDetailDivision from "./drawer_detail_division"; export default function NavbarDetailDivision() { const [openDrawer, setOpenDrawer] = useState(false) @@ -37,7 +37,7 @@ export default function NavbarDetailDivision() { return ( <> - (setOpenDrawer(true))} bg={tema.get().bgIcon} size="lg" radius="lg" aria-label="Settings"> 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 /> - +