From 9faa0b0f64bef5692c4ba63dfce2188646fff4d6 Mon Sep 17 00:00:00 2001 From: Bagasbanuna02 Date: Wed, 15 Oct 2025 17:30:25 +0800 Subject: [PATCH] Collaboration Mobile API Add: - /admin/collaboration/[id]/reject-input.tsx - /api-admin/api-admin-collaboration.ts Fix: - Integrasi ke tampilan UI app/(application)/admin/collaboration/[id]/[status].tsx app/(application)/admin/collaboration/index.tsx app/(application)/admin/collaboration/publish.tsx components/_ShareComponent/Admin/TableTitle.tsx components/_ShareComponent/Admin/TableValue.tsx ### No Issue --- .../admin/collaboration/[id]/[status].tsx | 56 ++++++++++---- .../admin/collaboration/[id]/reject-input.tsx | 56 ++++++++++++++ .../admin/collaboration/index.tsx | 70 ++++++++++++----- .../admin/collaboration/publish.tsx | 75 +++++++++++++------ .../_ShareComponent/Admin/TableTitle.tsx | 30 ++++++-- .../_ShareComponent/Admin/TableValue.tsx | 13 ++-- service/api-admin/api-admin-collaboration.ts | 33 ++++++++ 7 files changed, 264 insertions(+), 69 deletions(-) create mode 100644 app/(application)/admin/collaboration/[id]/reject-input.tsx create mode 100644 service/api-admin/api-admin-collaboration.ts diff --git a/app/(application)/admin/collaboration/[id]/[status].tsx b/app/(application)/admin/collaboration/[id]/[status].tsx index 5fd0edd..7831dae 100644 --- a/app/(application)/admin/collaboration/[id]/[status].tsx +++ b/app/(application)/admin/collaboration/[id]/[status].tsx @@ -1,3 +1,4 @@ +/* eslint-disable react-hooks/exhaustive-deps */ import { BaseBox, BoxButtonOnFooter, @@ -9,17 +10,43 @@ import { } from "@/components"; import AdminBackButtonAntTitle from "@/components/_ShareComponent/Admin/BackButtonAntTitle"; import { MainColor } from "@/constants/color-palet"; -import { useLocalSearchParams } from "expo-router"; +import { apiAdminCollaborationGetById } from "@/service/api-admin/api-admin-collaboration"; +import { router, useFocusEffect, useLocalSearchParams } from "expo-router"; +import { useCallback, useState } from "react"; export default function AdminCollaborationPublish() { const { id, status } = useLocalSearchParams(); - console.log("params:", id, status); + const [data, setData] = useState(null); + + useFocusEffect( + useCallback(() => { + handlerLoadData(); + }, [status]) + ); + + const handlerLoadData = async () => { + try { + const response = await apiAdminCollaborationGetById({ + id: id as string, + category: status as "publish" | "reject" | "group", + }); + + if (response.success) { + setData(response.data); + } + } catch (error) { + console.log("[ERROR]", error); + } + }; + const bottomFooter = ( {}} + onPress={() => { + router.push(`/admin/collaboration/${id}/reject-input`); + }} > Reject @@ -29,12 +56,12 @@ export default function AdminCollaborationPublish() { return ( <> } + headerComponent={} footerComponent={bottomFooter} > - {listData.map((item, i) => ( + {listData(data)?.map((item, i) => ( [ { label: "Username", - value: "Bagas Banuna", + value: (data && data?.Author?.username) || "-", }, { label: "Judul Proyek", - value: - "Judul Proyek: Lorem ipsum dolor sit amet consectetur adipisicing elit.", + value: (data && data?.title) || "-", }, { label: "Industri", - value: "Kesehatan", + value: (data && data?.ProjectCollaborationMaster_Industri?.name) || "-", }, { label: "Jumlah Partisipan ", - value: "0", + value: (data && data?.ProjectCollaboration_Partisipasi.length) || "0", }, { label: "Lokasi", - value: "Kuta Selatan, Bali", + value: (data && data?.lokasi) || "-", }, { label: "Tujuan Proyek", - value: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", + value: (data && data?.purpose) || "-", }, { label: "Keuntungan", - value: - "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.", + value: (data && data?.benefit) || "-", }, ]; diff --git a/app/(application)/admin/collaboration/[id]/reject-input.tsx b/app/(application)/admin/collaboration/[id]/reject-input.tsx new file mode 100644 index 0000000..a48a727 --- /dev/null +++ b/app/(application)/admin/collaboration/[id]/reject-input.tsx @@ -0,0 +1,56 @@ +import { + AlertDefaultSystem, + BoxButtonOnFooter, + TextAreaCustom, + ViewWrapper, +} from "@/components"; +import AdminBackButtonAntTitle from "@/components/_ShareComponent/Admin/BackButtonAntTitle"; +import AdminButtonReject from "@/components/_ShareComponent/Admin/ButtonReject"; +import { router, useLocalSearchParams } from "expo-router"; +import { useState } from "react"; + +export default function AdminCollaborationRejectInput() { + const { id } = useLocalSearchParams(); + const [value, setValue] = useState(id as string); + + const buttonSubmit = ( + + + AlertDefaultSystem({ + title: "Reject", + message: "Apakah anda yakin ingin menolak data ini?", + textLeft: "Batal", + textRight: "Ya", + onPressLeft: () => { + router.back(); + }, + onPressRight: () => { + console.log("value:", value); + // router.replace(`/admin/job/reject/status`); + }, + }) + } + /> + + ); + + return ( + <> + } + > + + + + ); +} diff --git a/app/(application)/admin/collaboration/index.tsx b/app/(application)/admin/collaboration/index.tsx index 648e023..c38acad 100644 --- a/app/(application)/admin/collaboration/index.tsx +++ b/app/(application)/admin/collaboration/index.tsx @@ -2,14 +2,45 @@ import { StackCustom, ViewWrapper } from "@/components"; import AdminComp_BoxDashboard from "@/components/_ShareComponent/Admin/BoxDashboard"; import AdminTitlePage from "@/components/_ShareComponent/Admin/TitlePage"; import { MainColor } from "@/constants/color-palet"; +import { apiAdminCollaboration } from "@/service/api-admin/api-admin-collaboration"; import { Entypo, FontAwesome } from "@expo/vector-icons"; +import { useFocusEffect } from "expo-router"; +import { useCallback, useState } from "react"; export default function AdminCollaboration() { + const [list, setList] = useState(null); + const [loadList, setLoadList] = useState(false); + + useFocusEffect( + useCallback(() => { + handlerLoadList(); + }, []) + ); + + const handlerLoadList = async () => { + try { + setLoadList(true); + const response = await apiAdminCollaboration({ + category: "dashboard", + }); + + console.log("[RESPONSE]", JSON.stringify(response, null, 2)); + + if (response.success) { + setList(response.data); + } + } catch (error) { + console.log("[ERROR]", error); + } finally { + setLoadList(false); + } + }; + return ( <> }> - {listData.map((item, i) => ( + {listData(list as any).map((item, i) => ( ))} @@ -18,20 +49,23 @@ export default function AdminCollaboration() { ); } -const listData = [ - { - label: "Publish", - value: 4, - icon: , - }, - { - label: "Group", - value: 7, - icon: , - }, - { - label: "Reject", - value: 7, - icon: , - }, -]; +const listData = (list: any) => { + console.log("[LIST masuk]", JSON.stringify(list, null, 2)); + return [ + { + label: "Publish", + value: (list && list?.publish) || "0", + icon: , + }, + { + label: "Group", + value: (list && list?.group) || "0", + icon: , + }, + { + label: "Reject", + value: (list && list?.reject) || "0", + icon: , + }, + ]; +}; diff --git a/app/(application)/admin/collaboration/publish.tsx b/app/(application)/admin/collaboration/publish.tsx index 3814a64..4e46528 100644 --- a/app/(application)/admin/collaboration/publish.tsx +++ b/app/(application)/admin/collaboration/publish.tsx @@ -1,7 +1,6 @@ import { ActionIcon, - BaseBox, - Spacing, + LoaderCustom, StackCustom, TextCustom, ViewWrapper, @@ -11,26 +10,59 @@ 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 { apiAdminCollaboration } from "@/service/api-admin/api-admin-collaboration"; import { Octicons } from "@expo/vector-icons"; -import { router } from "expo-router"; +import { router, useFocusEffect } from "expo-router"; +import _ from "lodash"; +import { useCallback, useState } from "react"; import { Divider } from "react-native-paper"; export default function AdminCollaborationPublish() { + const [list, setList] = useState(null); + const [loadList, setLoadList] = useState(false); + + useFocusEffect( + useCallback(() => { + handlerLoadList(); + }, []) + ); + + const handlerLoadList = async () => { + try { + setLoadList(true); + const response = await apiAdminCollaboration({ + category: "publish", + }); + + if (response.success) { + setList(response.data); + } + } catch (error) { + console.log("[ERROR]", error); + } finally { + setLoadList(false); + } + }; return ( <> }> - - - - - {Array.from({ length: 10 }).map((_, index) => ( + + {/* */} + + + {loadList ? ( + + ) : _.isEmpty(list) ? ( + Belum ada data + ) : ( + list?.map((item: any, index: number) => ( } onPress={() => { - router.push(`/admin/collaboration/${index}/publish`); + router.push(`/admin/collaboration/${item?.id}/publish`); }} /> } value2={ - Username username + + {item?.Author?.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. + + {item?.title || "-"} } /> - ))} - + )) + )} ); } - diff --git a/components/_ShareComponent/Admin/TableTitle.tsx b/components/_ShareComponent/Admin/TableTitle.tsx index 18c1233..78f554e 100644 --- a/components/_ShareComponent/Admin/TableTitle.tsx +++ b/components/_ShareComponent/Admin/TableTitle.tsx @@ -13,14 +13,32 @@ export default function AdminTitleTable({ return ( <> - - {title1} + + + {title1} + - - {title2} + + + {title2} + - - {title3} + + {title3} diff --git a/components/_ShareComponent/Admin/TableValue.tsx b/components/_ShareComponent/Admin/TableValue.tsx index 59946c8..65f0545 100644 --- a/components/_ShareComponent/Admin/TableValue.tsx +++ b/components/_ShareComponent/Admin/TableValue.tsx @@ -21,8 +21,8 @@ export default function AdminTableValue({ style={{ alignItems: "center", justifyContent: "center", - paddingLeft: 5, - paddingRight: 5, + paddingLeft: 10, + paddingRight: 10, }} > {value1} @@ -32,8 +32,8 @@ export default function AdminTableValue({ style={{ alignItems: "center", justifyContent: "center", - paddingLeft: 5, - paddingRight: 5, + paddingLeft: 10, + paddingRight: 10, }} > {value2} @@ -42,8 +42,9 @@ export default function AdminTableValue({ span={6} style={{ justifyContent: "center", - paddingLeft: 5, - paddingRight: 5, + alignItems: "center", + paddingLeft: 10, + paddingRight: 10, }} > {value3} diff --git a/service/api-admin/api-admin-collaboration.ts b/service/api-admin/api-admin-collaboration.ts new file mode 100644 index 0000000..ae016cb --- /dev/null +++ b/service/api-admin/api-admin-collaboration.ts @@ -0,0 +1,33 @@ +import { apiConfig } from "../api-config"; + +export async function apiAdminCollaboration({ + category, +}: { + category: "dashboard" | "publish" | "reject" | "group"; +}) { + try { + const response = await apiConfig.get( + `/mobile/admin/collaboration?category=${category}` + ); + return response.data; + } catch (error) { + throw error; + } +} + +export async function apiAdminCollaborationGetById({ + id, + category, +}: { + id: string; + category: "publish" | "reject" | "group"; +}) { + try { + const response = await apiConfig.get( + `/mobile/admin/collaboration/${id}?category=${category}` + ); + return response.data; + } catch (error) { + throw error; + } +}