Update Versi 1.5.27 #32

Merged
bagasbanuna merged 1009 commits from staging into main 2025-12-17 12:22:28 +08:00
1465 changed files with 52883 additions and 15766 deletions
Showing only changes of commit 95e3e8cbeb - Show all commits

View File

@@ -0,0 +1,57 @@
import backendLogger from "@/util/backendLogger";
import { NextResponse } from "next/server";
import prisma from "@/lib/prisma";
export async function GET(req: Request, { params }: { params: { id: string } }) {
try {
const { id } = params;
const donasiId = id;
const data = await prisma.donasi.findUnique({
where: {
id: donasiId,
},
select: {
id: true,
title: true,
target: true,
active: true,
createdAt: true,
updatedAt: true,
publishTime: true,
catatan: true,
progres: true,
terkumpul: true,
authorId: true,
namaBank: true,
rekening: true,
totalPencairan: true,
akumulasiPencairan: true,
imagesId: true,
donasiMaster_KategoriId: true,
donasiMaster_DurasiId: true,
donasiMaster_StatusDonasiId: true,
Author: true,
imageDonasi: true,
CeritaDonasi: true,
DonasiMaster_Ketegori: true,
DonasiMaster_Durasi: true,
DonasiMaster_Status: true,
imageId: true,
}
})
return NextResponse.json({
success: true,
message: "Data Donasi Berhasil Diambil",
data: data,
}, { status: 200 });
} catch (error) {
backendLogger.error("Error Get Data Donasi >>", error);
return NextResponse.json({
success: false,
message: "Error get detail Investasi",
reason: (error as Error).message,
}, { status: 500 });
}
}

View File

@@ -7,7 +7,7 @@ import adminDonasi_getMasterStatus from "@/app_modules/admin/donasi/fun/master/g
export default async function Page({ params }: { params: { id: string } }) {
let donasiId = params.id;
const dataPublish = await AdminDonasi_getOneById(params.id);
// const dataPublish = await AdminDonasi_getOneById(params.id);
const countDonatur = await AdminDonasi_funCountDonatur(params.id);
const listMasterStatus = await adminDonasi_getMasterStatus();
const listDonatur = await adminDonasi_getListDonatur({
@@ -19,7 +19,7 @@ export default async function Page({ params }: { params: { id: string } }) {
return (
<>
<AdminDonasi_DetailPublish
dataPublish={dataPublish as any}
// dataPublish={dataPublish as any}
listDonatur={listDonatur as any}
countDonatur={countDonatur}
listPencairan={listPencairan as any}

View File

@@ -1,12 +1,12 @@
import { AdminDonasi_DetailReject } from "@/app_modules/admin/donasi";
import { AdminDonasi_getOneById } from "@/app_modules/admin/donasi/fun/get/get_one_by_id";
export default async function Page({ params }: { params: { id: string } }) {
const dataReject = await AdminDonasi_getOneById(params.id);
export default async function Page() {
// const dataReject = await AdminDonasi_getOneById(params.id);
return (
<>
<AdminDonasi_DetailReject dataReject={dataReject as any} />
<AdminDonasi_DetailReject />
</>
);
}

View File

@@ -1,8 +1,8 @@
import { AdminDonasi_DetailReview } from "@/app_modules/admin/donasi";
import { AdminDonasi_getOneById } from "@/app_modules/admin/donasi/fun/get/get_one_by_id";
export default async function Page({ params }: { params: { id: string } }) {
const dataReview = await AdminDonasi_getOneById(params.id);
export default async function Page() {
return <AdminDonasi_DetailReview dataReview={dataReview as any} />;
return <AdminDonasi_DetailReview />;
}

View File

@@ -2,10 +2,7 @@ import { AdminDonasi_Main } from "@/app_modules/admin/donasi";
import AdminDonasi_funCountByStatus from "@/app_modules/admin/donasi/fun/count/fun_count_donasi_by_status";
export default async function Page() {
const countPublish = await AdminDonasi_funCountByStatus("1");
const countReview = await AdminDonasi_funCountByStatus("2");
const countDraft = await AdminDonasi_funCountByStatus("3");
const countReject = await AdminDonasi_funCountByStatus("4");
return (
<>

View File

@@ -0,0 +1,37 @@
import CustomSkeleton from '@/app_modules/components/CustomSkeleton';
import { Box, SimpleGrid, Stack } from '@mantine/core';
import React from 'react';
function SkeletonAdminDetailDonasiReject() {
return (
<>
<Stack px={"lg"}>
<Box pb={"xl"}>
</Box>
<Box>
<CustomSkeleton width={"100%"} height={"20vh"} />
</Box>
<SimpleGrid
cols={2}
spacing="lg"
breakpoints={[
{ maxWidth: "62rem", cols: 3, spacing: "md" },
{ maxWidth: "48rem", cols: 2, spacing: "sm" },
{ maxWidth: "36rem", cols: 1, spacing: "sm" },
]}
>
<Box>
<CustomSkeleton width={"100%"} height={"40vh"} />
</Box>
<Box>
<CustomSkeleton width={"100%"} height={"40vh"} />
</Box>
</SimpleGrid>
</Stack>
</>
);
}
export default SkeletonAdminDetailDonasiReject;

View File

@@ -0,0 +1,18 @@
import CustomSkeleton from '@/app_modules/components/CustomSkeleton';
import { Box, Stack } from '@mantine/core';
function SkeletonAdminDetailDonasiPublish() {
return (
<>
<Stack px={"lg"}>
<Box pb={"xl"}>
</Box>
<Box>
<CustomSkeleton width={"100%"} height={"40vh"} />
</Box>
</Stack>
</>
);
}
export default SkeletonAdminDetailDonasiPublish;

View File

@@ -0,0 +1,31 @@
import CustomSkeleton from "@/app_modules/components/CustomSkeleton";
import { Stack, Box, SimpleGrid } from "@mantine/core";
function SkeletonAdminDetailDonasiReview() {
return (
<>
<Stack px={"lg"}>
<Box pb={"xl"}>
</Box>
<SimpleGrid
cols={2}
spacing="lg"
breakpoints={[
{ maxWidth: "62rem", cols: 3, spacing: "md" },
{ maxWidth: "48rem", cols: 2, spacing: "sm" },
{ maxWidth: "36rem", cols: 1, spacing: "sm" },
]}
>
<Box>
<CustomSkeleton width={"100%"} height={"40vh"} />
</Box>
<Box>
<CustomSkeleton width={"100%"} height={"40vh"} />
</Box>
</SimpleGrid>
</Stack>
</>
);
}
export default SkeletonAdminDetailDonasiReview;

View File

@@ -17,7 +17,7 @@ import {
Textarea,
Title,
} from "@mantine/core";
import { useDisclosure } from "@mantine/hooks";
import { useDisclosure, useShallowEffect } from "@mantine/hooks";
import React, { useState } from "react";
import { ComponentAdminGlobal_NotifikasiBerhasil } from "../../_admin_global/admin_notifikasi/notifikasi_berhasil";
import AdminGlobal_ComponentBackButton from "../../_admin_global/back_button";
@@ -27,38 +27,68 @@ import { AdminDonasi_getOneById } from "../fun/get/get_one_by_id";
import { AdminDonasi_funUpdateCatatanReject } from "../fun/update/fun_update_catatan_reject";
import { ComponentAdminGlobal_NotifikasiGagal } from "../../_admin_global/admin_notifikasi/notifikasi_gagal";
import { Admin_ComponentModalReport } from "../../_admin_global/_component";
import { AdminColor } from "@/app_modules/_global/color/color_pallet";
import { useParams } from "next/navigation";
import { apiGetAdminDonasiById } from "../lib/api_fetch_admin_donasi";
import { clientLogger } from "@/util/clientLogger";
import CustomSkeletonAdmin from "../../_admin_global/_component/skeleton/customSkeletonAdmin";
import SkeletonAdminDetailDonasiReject from "../component/skeleton_detail donasi_reject";
export default function AdminDonasi_DetailReject({
dataReject,
}: {
dataReject: MODEL_DONASI;
}) {
const [data, setData] = useState(dataReject);
export default function AdminDonasi_DetailReject() {
const [data, setData] = useState<MODEL_DONASI | null>(null);
const params = useParams<{ id: string }>();
useShallowEffect(() => {
const loadInitialData = async () => {
try {
const response = await apiGetAdminDonasiById({
id: params.id,
})
if (response?.success && response?.data) {
setData(response.data);
} else {
console.error("Invalid data format recieved:", response);
setData(null);
}
} catch (error) {
clientLogger.error("Invalid data format recieved:", error);
setData(null);
}
}
loadInitialData();
})
return (
<>
<Stack>
<ButtonOnHeader
catatan={data.catatan}
donasiId={data.id}
setDonasi={setData}
/>
<CatatanReject catatan={data.catatan} />
<SimpleGrid
cols={2}
spacing="lg"
breakpoints={[
{ maxWidth: "md", cols: 2, spacing: "md" },
{ maxWidth: "sm", cols: 1, spacing: "sm" },
{ maxWidth: "xs", cols: 1, spacing: "xs" },
]}
>
<ComponentAdminDonasi_TampilanDetailDonasi donasi={data} />
<ComponentAdminDonasi_CeritaPenggalangDana
cerita={data.CeritaDonasi}
/>
</SimpleGrid>
</Stack>
{!data ? (
<SkeletonAdminDetailDonasiReject/>
) : (
<>
<ButtonOnHeader
catatan={data.catatan}
donasiId={data.id}
setDonasi={setData}
/>
<CatatanReject catatan={data.catatan} />
<SimpleGrid
cols={2}
spacing="lg"
breakpoints={[
{ maxWidth: "md", cols: 2, spacing: "md" },
{ maxWidth: "sm", cols: 1, spacing: "sm" },
{ maxWidth: "xs", cols: 1, spacing: "xs" },
]}
>
<ComponentAdminDonasi_TampilanDetailDonasi donasi={data} />
<ComponentAdminDonasi_CeritaPenggalangDana
cerita={data.CeritaDonasi}
/>
</SimpleGrid>
</>
)}
</Stack >
</>
);
}
@@ -177,10 +207,10 @@ function ButtonOnHeader({
function CatatanReject({ catatan }: { catatan: string }) {
return (
<>
<Paper p={"md"} bg={"gray.1"}>
<Paper p={"md"} bg={AdminColor.softBlue}>
<Stack>
<Title order={5}>Alasan Penolakan :</Title>
<Text>{catatan}</Text>
<Title c={AdminColor.white} order={5}>Alasan Penolakan :</Title>
<Text c={AdminColor.white}>{catatan}</Text>
</Stack>
</Paper>
</>

View File

@@ -1,58 +1,83 @@
"use client";
import { IRealtimeData } from "@/lib/global_state";
import { MainColor } from "@/app_modules/_global/color";
import ComponentGlobal_InputCountDown from "@/app_modules/_global/component/input_countdown";
import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global";
import { donasi_checkStatus } from "@/app_modules/donasi/fun";
import { MODEL_DONASI } from "@/app_modules/donasi/model/interface";
import { IRealtimeData } from "@/lib/global_state";
import { clientLogger } from "@/util/clientLogger";
import { Button, Group, SimpleGrid, Stack } from "@mantine/core";
import { useDisclosure } from "@mantine/hooks";
import { useRouter } from "next/navigation";
import { useDisclosure, useShallowEffect } from "@mantine/hooks";
import { useParams, useRouter } from "next/navigation";
import { useState } from "react";
import { WibuRealtime } from "wibu-pkg";
import { Admin_ComponentModalReport } from "../../_admin_global/_component";
import Admin_ComponentModalPublish from "../../_admin_global/_component/comp_admin_modal_publish";
import { ComponentAdminGlobal_NotifikasiBerhasil } from "../../_admin_global/admin_notifikasi/notifikasi_berhasil";
import { ComponentAdminGlobal_NotifikasiGagal } from "../../_admin_global/admin_notifikasi/notifikasi_gagal";
import { ComponentAdminGlobal_NotifikasiPeringatan } from "../../_admin_global/admin_notifikasi/notifikasi_peringatan";
import AdminGlobal_ComponentBackButton from "../../_admin_global/back_button";
import adminNotifikasi_funCreateToAllUser from "../../notifikasi/fun/create/fun_create_notif_to_all_user";
import adminNotifikasi_funCreateToUser from "../../notifikasi/fun/create/fun_create_notif_user";
import ComponentAdminDonasi_CeritaPenggalangDana from "../component/tampilan_detail_cerita";
import ComponentAdminDonasi_TampilanDetailDonasi from "../component/tampilan_detail_donasi";
import { AdminDonasi_getOneById } from "../fun/get/get_one_by_id";
import { AdminDonasi_funUpdateStatusPublish } from "../fun/update/fun_status_publish";
import { AdminDonasi_funUpdateStatusReject } from "../fun/update/fun_status_reject";
import { donasi_checkStatus } from "@/app_modules/donasi/fun";
import { ComponentGlobal_NotifikasiPeringatan } from "@/app_modules/_global/notif_global";
import adminNotifikasi_funCreateToAllUser from "../../notifikasi/fun/create/fun_create_notif_to_all_user";
import { clientLogger } from "@/util/clientLogger";
import { apiGetAllUserWithExceptId } from "@/app_modules/_global/lib/api_user";
import Admin_ComponentModalPublish from "../../_admin_global/_component/comp_admin_modal_publish";
import { MainColor } from "@/app_modules/_global/color";
import { apiGetAdminDonasiById } from "../lib/api_fetch_admin_donasi";
import SkeletonAdminDetailDonasiReview from "../component/skeleton_detail_donasi_review";
export default function AdminDonasi_DetailReview({
dataReview,
}: {
dataReview: MODEL_DONASI;
}) {
const [data, setData] = useState(dataReview);
export default function AdminDonasi_DetailReview() {
const params = useParams<{ id: string }>();
const [data, setData] = useState<MODEL_DONASI | null>(null);
useShallowEffect(() => {
const loadInitialData = async () => {
try {
const response = await apiGetAdminDonasiById({
id: params.id,
})
if (response?.success && response?.data) {
setData(response.data);
} else {
console.error("Invalid data format recieved:", response);
setData(null);
}
} catch (error) {
clientLogger.error("Invalid data format recieved:", error);
setData(null);
}
}
loadInitialData();
})
return (
<>
<Stack>
<ButtonOnHeader donasi={data} setData={setData} />
<SimpleGrid
cols={2}
spacing="lg"
breakpoints={[
{ maxWidth: "md", cols: 2, spacing: "md" },
{ maxWidth: "sm", cols: 1, spacing: "sm" },
{ maxWidth: "xs", cols: 1, spacing: "xs" },
]}
>
<ComponentAdminDonasi_TampilanDetailDonasi donasi={data} />
<ComponentAdminDonasi_CeritaPenggalangDana
cerita={data.CeritaDonasi}
/>
</SimpleGrid>
</Stack>
{!data ? (
<SkeletonAdminDetailDonasiReview />
) : (
<>
<ButtonOnHeader donasi={data} setData={setData} />
<SimpleGrid
cols={2}
spacing="lg"
breakpoints={[
{ maxWidth: "md", cols: 2, spacing: "md" },
{ maxWidth: "sm", cols: 1, spacing: "sm" },
{ maxWidth: "xs", cols: 1, spacing: "xs" },
]}
>
<ComponentAdminDonasi_TampilanDetailDonasi donasi={data} />
<ComponentAdminDonasi_CeritaPenggalangDana
cerita={data.CeritaDonasi}
/>
</SimpleGrid>
</>
)}
</Stack >
</>
);
}
@@ -138,6 +163,7 @@ function ButtonOnHeader({
const newData = await AdminDonasi_getOneById(donasi?.id);
setData(newData);
// router.back()
ComponentAdminGlobal_NotifikasiBerhasil(
"Berhasil Mengubah Status Donasi"
);
@@ -273,36 +299,36 @@ function ButtonOnHeader({
}
/>
<Admin_ComponentModalPublish
opened={openedPublish}
onClose={closePublish}
title={"Anda yakin ingin publish donasi ini?"}
buttonKiri={
<>
<Button
radius={"xl"}
onClick={() => {
closePublish();
}}
>
Batal
</Button>
</>
}
buttonKanan={
<>
<Button
bg={MainColor.green}
loaderPosition="center"
loading={isLoadingPublish ? true : false}
radius={"xl"}
onClick={() => {
onPublish();
}}
>
Simpan
</Button>
</>
}
opened={openedPublish}
onClose={closePublish}
title={"Anda yakin ingin publish donasi ini?"}
buttonKiri={
<>
<Button
radius={"xl"}
onClick={() => {
closePublish();
}}
>
Batal
</Button>
</>
}
buttonKanan={
<>
<Button
bg={MainColor.green}
loaderPosition="center"
loading={isLoadingPublish ? true : false}
radius={"xl"}
onClick={() => {
onPublish();
}}
>
Simpan
</Button>
</>
}
/>

View File

@@ -38,34 +38,40 @@ import {
TextInput,
Title,
} from "@mantine/core";
import { useDisclosure } from "@mantine/hooks";
import { useDisclosure, useShallowEffect } from "@mantine/hooks";
import { IconReload } from "@tabler/icons-react";
import _, { toNumber } from "lodash";
import moment from "moment";
import { useRouter } from "next/navigation";
import { useParams, useRouter } from "next/navigation";
import { useState } from "react";
import { adminDonasi_getListDonatur } from "../../fun/get/get_list_donatur_by_id";
import { AdminDonasi_getOneById } from "../../fun/get/get_one_by_id";
import adminDonasi_funUpdateStatusDanTotal from "../../fun/update/fun_update_status_dan_total";
import { ComponentAdminGlobal_TitlePage } from "@/app_modules/admin/_admin_global/_component";
import { AccentColor, AdminColor } from "@/app_modules/_global/color/color_pallet";
import CustomSkeletonAdmin from "@/app_modules/admin/_admin_global/_component/skeleton/customSkeletonAdmin";
import { apiGetAdminDonasiById } from "../../lib/api_fetch_admin_donasi";
import { clientLogger } from "@/util/clientLogger";
import SkeletonAdminDetailDonasiReject from "../../component/skeleton_detail donasi_reject";
import SkeletonAdminDetailDonasiPublish from "../../component/skeleton_detail_donasi_publish";
export default function AdminDonasi_DetailPublish({
dataPublish,
listDonatur,
countDonatur,
listPencairan,
listMasterStatus,
}: {
dataPublish: MODEL_DONASI;
listDonatur: any[];
countDonatur: number;
listPencairan: MODEL_DONASI_PENCAIRAN_DANA[];
listMasterStatus: MODEL_NEW_DEFAULT_MASTER[];
}) {
const [dataDonasi, setDataDonasi] = useState(dataPublish);
const params = useParams<{ id: string }>();
const [data, setData] = useState<MODEL_DONASI | null>(null);
const [pencairan, setPencairan] = useState(listPencairan);
const selectedData = _.omit(dataDonasi, [
const selectedData = _.omit(data, [
"Author",
"imageDonasi",
"CeritaDonasi",
@@ -74,23 +80,50 @@ export default function AdminDonasi_DetailPublish({
"DonasiMaster_Status",
]);
useShallowEffect(() => {
const loadInitialData = async () => {
try {
const response = await apiGetAdminDonasiById({
id: params.id,
})
if (response?.success && response?.data) {
setTimeout(() => {
setData(response.data)
}, 3000);
} else {
console.log("Invalid data format recieved:", response);
setData(null)
}
} catch (error) {
clientLogger.error("Invalid data format recieved:", error);
setData(null);
}
}
loadInitialData();
})
return (
<>
{/* <pre>{JSON.stringify(pencairan, null, 2)}</pre> */}
<Stack>
<AdminGlobal_ComponentBackButton
path={RouterAdminDonasi.table_publish}
/>
<TampilanDetailDonasi donasi={dataDonasi} countDonatur={countDonatur} />
<TampilanListDonatur
donatur={listDonatur}
listMasterStatus={listMasterStatus}
dataDonasi={selectedData as any}
onSuccessDonasi={(val) => {
setDataDonasi(val);
}}
/>
<TampilanListPencairan pencairan={pencairan} />
{!data ?
(<SkeletonAdminDetailDonasiPublish />) : (
<>
<AdminGlobal_ComponentBackButton
path={RouterAdminDonasi.table_publish}
/>
<TampilanDetailDonasi donasi={data} countDonatur={countDonatur} />
<TampilanListDonatur
donatur={listDonatur}
listMasterStatus={listMasterStatus}
dataDonasi={selectedData as any}
onSuccessDonasi={(val) => {
setData(val);
}}
/>
<TampilanListPencairan pencairan={pencairan} />
</>
)}
</Stack>
</>
);
@@ -387,7 +420,7 @@ function TampilanListDonatur({
</td>
<td>
<Center c={AccentColor.white}>
<ComponentGlobal_TampilanRupiah nominal={+e?.nominal} />
<ComponentGlobal_TampilanRupiah nominal={+e?.nominal} />
</Center>
</td>
<td>
@@ -757,17 +790,17 @@ function TampilanListPencairan({
color={AdminColor.softBlue}
component={
<Group>
<ActionIcon
size={"lg"}
radius={"xl"}
variant="light"
onClick={() => {
// onRelaod();
}}
>
<IconReload />
</ActionIcon>
{/* <Select
<ActionIcon
size={"lg"}
radius={"xl"}
variant="light"
onClick={() => {
// onRelaod();
}}
>
<IconReload />
</ActionIcon>
{/* <Select
placeholder="Pilih status"
value={isSelect}
data={listMasterStatus.map((e) => ({
@@ -778,10 +811,10 @@ function TampilanListPencairan({
onSelect(val);
}}
/> */}
</Group>
</Group>
}
/>
<Paper p={"md"} bg={AdminColor.softBlue} shadow="lg" h={"80vh"}>
<ScrollArea w={"100%"} h={"90%"}>
<Table
@@ -789,7 +822,7 @@ function TampilanListPencairan({
horizontalSpacing={"md"}
p={"md"}
w={1500}
>
<thead>
<tr>
@@ -802,7 +835,7 @@ function TampilanListPencairan({
<th>
<Center c={AccentColor.white}>Judul</Center>
</th>
<th style={{ color: AccentColor.white}}>Deskripsi</th>
<th style={{ color: AccentColor.white }}>Deskripsi</th>
<th>
<Center c={AccentColor.white}>Bukti Transfer</Center>
</th>

View File

@@ -2,7 +2,8 @@ export {
apiGetAdminDonasiStatusCountDashboard,
apiGetAdminDonasiKategoriCountDashboard,
apiGetAdminDonasiByStatus,
apiGetAdminDonasiKategori
apiGetAdminDonasiKategori,
apiGetAdminDonasiById,
};
const apiGetAdminDonasiStatusCountDashboard = async ({ name }:
{ name: "Publish" | "Review" | "Reject" }) => {
@@ -81,4 +82,19 @@ const apiGetAdminDonasiKategori = async () => {
}
})
return await response.json().catch(() => null);
}
const apiGetAdminDonasiById = async ({id} : {id: string}) => {
const { token } = await fetch("/api/get-cookie").then((res) => res.json());
if (!token) return await token.json().catch(() => null);
const response = await fetch(`/api/admin/donasi/${id}`, {
method: "GET",
headers: {
"Content-Type": "application/json",
Accept: "application/json",
"Access-Control-Allow-Origin": "*",
Authorization: `Bearer ${token}`
}
})
return await response.json().catch(() => null);
}

View File

@@ -269,11 +269,11 @@ function TableView() {
<Grid.Col span={4}>
{isCreate ? (
<Paper p={"md"} withBorder>
<Paper p={"md"} bg={AdminColor.softBlue}>
<Stack>
<TextInput
value={create}
label={<Title order={6}>Tambah Kategori</Title>}
label={<Title c={AdminColor.white} order={6}>Tambah Kategori</Title>}
placeholder="Masukan kategori baru"
onChange={(val) => {
setCreate(val.currentTarget.value);
@@ -313,11 +313,11 @@ function TableView() {
)}
{isUpdate ? (
<Paper p={"md"} withBorder style={{ transition: "1s" }}>
<Paper p={"md"} bg={AdminColor.softBlue} style={{ transition: "1s" }}>
<Stack>
<TextInput
value={updateKategori.name}
label={<Title order={6}>Update Kategori</Title>}
label={<Title c={AdminColor.white} order={6}>Update Kategori</Title>}
placeholder="Update kategori"
onChange={(val) => {
const data = _.clone(updateKategori);

View File

@@ -93,8 +93,6 @@ export default function Admin_Investasi({
name: "Publish",
});
console.log("Response Publish", response);
if (response) {
setCountPublish(response.data);
}

View File

@@ -281,6 +281,7 @@ function TableStatus() {
</Stack>
<Modal
styles={{ body: { backgroundColor: AdminColor.softBlue } }}
opened={opened}
onClose={close}
centered
@@ -289,6 +290,7 @@ function TableStatus() {
>
<Stack>
<Textarea
styles={{ label: { color: AdminColor.white } }}
minRows={2}
maxRows={5}
maxLength={300}

View File

@@ -414,14 +414,16 @@ function TableStatus() {
</Stack>
<Modal
styles={{ body: { backgroundColor: AdminColor.softBlue}}}
opened={openedReject}
onClose={closeReject}
centered
withCloseButton={false}
size={"md"}
>
<Stack>
<Stack >
<Textarea
styles={{ label: { color: AdminColor.white } }}
minRows={2}
maxRows={5}
maxLength={300}
@@ -453,6 +455,7 @@ function TableStatus() {
</Stack>
</Modal>
<Modal
styles={{ body: { backgroundColor: AdminColor.softBlue}}}
opened={openedPublish}
onClose={closePublish}
centered
@@ -460,7 +463,7 @@ function TableStatus() {
size={"md"}
>
<Stack align="center">
<Title order={5}>Apakah anda yakin ingin mempublish vote ini?</Title>
<Title c={AdminColor.white} order={5}>Apakah anda yakin ingin mempublish vote ini?</Title>
<Group position="center">
<Button radius={"xl"} onClick={() => closePublish()}>
Batal

View File

@@ -33,7 +33,8 @@ const middlewareConfig: MiddlewareConfig = {
// "/api/event/*",
// ADMIN API
// >> buat dibawah sini <<
// >> buat dibawah sini <<
"/api/admin/donasi/*",
// Akses awal