diff --git a/app/(application)/admin/donation/[status]/status.tsx b/app/(application)/admin/donation/[status]/status.tsx index 2e55595..ddbf75b 100644 --- a/app/(application)/admin/donation/[status]/status.tsx +++ b/app/(application)/admin/donation/[status]/status.tsx @@ -1,69 +1,117 @@ +/* eslint-disable react-hooks/exhaustive-deps */ import { - ActionIcon, - SearchInput, - Spacing, - TextCustom, - ViewWrapper + ActionIcon, + LoaderCustom, + SearchInput, + Spacing, + StackCustom, + TextCustom, + ViewWrapper, } from "@/components"; import AdminComp_BoxTitle from "@/components/_ShareComponent/Admin/BoxTitlePage"; import AdminTitleTable from "@/components/_ShareComponent/Admin/TableTitle"; import AdminTableValue from "@/components/_ShareComponent/Admin/TableValue"; +import AdminTitlePage from "@/components/_ShareComponent/Admin/TitlePage"; import { ICON_SIZE_BUTTON } from "@/constants/constans-value"; +import { apiAdminDonation } from "@/service/api-admin/api-admin-donation"; import { Octicons } from "@expo/vector-icons"; -import { router, useLocalSearchParams } from "expo-router"; +import { router, useFocusEffect, useLocalSearchParams } from "expo-router"; import _ from "lodash"; +import { useState, useCallback } from "react"; import { Divider } from "react-native-paper"; export default function AdminDonationStatus() { const { status } = useLocalSearchParams(); + console.log("[STATUS]", status); + + const [data, setData] = useState(null); + const [search, setSearch] = useState(""); + const [loadData, setLoadData] = useState(false); + + useFocusEffect( + useCallback(() => { + onLoadData(); + }, [status, search]) + ); + + const onLoadData = async () => { + try { + setLoadData(true); + const response = await apiAdminDonation({ + category: status as "publish" | "review" | "reject", + search, + }); + + console.log("[RES]", JSON.stringify(response, null, 2)); + + if (response.success) { + setData(response.data); + } + } catch (error) { + console.log("[ERROR]", error); + setData([]); + } finally { + setLoadData(false); + } + }; + const rightComponent = ( setSearch(value)} /> ); return ( <> - }> + - } - > - - - - - {Array.from({ length: 10 }).map((_, index) => ( - - } - onPress={() => { - router.push(`/admin/donation/${index}/${status}`); - }} - /> - } - value2={Username username} - value3={ - - Lorem ipsum dolor sit amet consectetur adipisicing elit. - Blanditiis asperiores quidem deleniti architecto eaque et - nostrum, ad consequuntur eveniet quisquam quae voluptatum - ducimus! Dolorem nobis modi officia debitis, beatae mollitia. - - } + - ))} + + + {loadData ? ( + + ) : _.isEmpty(data) ? ( + + Belum ada data + + ) : ( + data?.map((item: any, index: number) => ( + + } + onPress={() => { + router.push(`/admin/donation/${item.id}/${status}`); + }} + /> + } + value2={{item?.Author?.username || "-"}} + value3={ + + {item?.title || "-"} + + } + /> + )) + )} + ); diff --git a/app/(application)/admin/donation/index.tsx b/app/(application)/admin/donation/index.tsx index d63ec2c..7051025 100644 --- a/app/(application)/admin/donation/index.tsx +++ b/app/(application)/admin/donation/index.tsx @@ -1,15 +1,70 @@ import { Spacing, StackCustom, ViewWrapper } from "@/components"; import { - IconList, - IconPublish, - IconReject, - IconReview, + IconList, + IconPublish, + IconReject, + IconReview, } from "@/components/_Icon/IconComponent"; import AdminComp_BoxDashboard from "@/components/_ShareComponent/Admin/BoxDashboard"; import AdminTitlePage from "@/components/_ShareComponent/Admin/TitlePage"; import { MainColor } from "@/constants/color-palet"; +import { apiAdminDonation } from "@/service/api-admin/api-admin-donation"; +import { useFocusEffect } from "expo-router"; +import { useState, useCallback } from "react"; export default function AdminDonation() { + const [data, setData] = useState(null); + const [loadData, setLoadData] = useState(false); + + useFocusEffect( + useCallback(() => { + onLoadData(); + }, []) + ); + + const onLoadData = async () => { + try { + setLoadData(true); + const response = await apiAdminDonation({ + category: "dashboard", + }); + + console.log("[RES]", JSON.stringify(response, null, 2)); + + if (response.success) { + setData(response.data); + } + } catch (error) { + console.log("[ERROR]", error); + setData([]); + } finally { + setLoadData(false); + } + }; + + const listData = [ + { + label: "Publish", + value: (data && data.publish) || 0, + icon: , + }, + { + label: "Review", + value: (data && data.review) || 0, + icon: , + }, + { + label: "Reject", + value: (data && data.reject) || 0, + icon: , + }, + { + label: "Kategori", + value: (data && data.categoryDonation) || 0, + icon: , + }, + ]; + return ( <> @@ -24,26 +79,3 @@ export default function AdminDonation() { ); } - -const listData = [ - { - label: "Publish", - value: 4, - icon: , - }, - { - label: "Review", - value: 7, - icon: , - }, - { - label: "Reject", - value: 5, - icon: , - }, - { - label: "Kategori", - value: 4, - icon: , - }, -]; diff --git a/service/api-admin/api-admin-donation.ts b/service/api-admin/api-admin-donation.ts new file mode 100644 index 0000000..3e2805e --- /dev/null +++ b/service/api-admin/api-admin-donation.ts @@ -0,0 +1,18 @@ +import { apiConfig } from "../api-config"; + +export async function apiAdminDonation({ + category, + search, +}: { + category: "dashboard" | "publish" | "review" | "reject" ; + search?: string; +}) { + try { + const response = await apiConfig.get( + `/mobile/admin/donation?category=${category}&search=${search}` + ); + return response.data; + } catch (error) { + throw error; + } +}