From 6f4dd79568b23c3b4e86230b0bbd77da79c5edc9 Mon Sep 17 00:00:00 2001 From: Bagasbanuna02 Date: Thu, 16 Oct 2025 14:48:31 +0800 Subject: [PATCH] Integrasi API: Admin Collaboration Fix: Tampilan yang terintegrasi API - app/(application)/(user)/collaboration/[id]/edit.tsx - app/(application)/admin/collaboration/[id]/[status].tsx - app/(application)/admin/collaboration/[id]/group.tsx - app/(application)/admin/collaboration/[id]/reject-input.tsx - app/(application)/admin/collaboration/group.tsx - app/(application)/admin/collaboration/index.tsx - app/(application)/admin/collaboration/publish.tsx - app/(application)/admin/collaboration/reject.tsx - components/_ShareComponent/Admin/TableValue.tsx - screens/Collaboration/BoxPublishSection.tsx - service/api-admin/api-admin-collaboration.ts ### No Issue --- .../(user)/collaboration/[id]/edit.tsx | 1 - .../admin/collaboration/[id]/[status].tsx | 16 ++- .../admin/collaboration/[id]/group.tsx | 102 ++++++++++----- .../admin/collaboration/[id]/reject-input.tsx | 41 +++++- .../admin/collaboration/group.tsx | 110 ++++++++++------ .../admin/collaboration/index.tsx | 4 - .../admin/collaboration/publish.tsx | 63 ++++----- .../admin/collaboration/reject.tsx | 122 +++++++++++------- .../_ShareComponent/Admin/TableValue.tsx | 4 +- screens/Collaboration/BoxPublishSection.tsx | 7 +- service/api-admin/api-admin-collaboration.ts | 17 +++ 11 files changed, 325 insertions(+), 162 deletions(-) diff --git a/app/(application)/(user)/collaboration/[id]/edit.tsx b/app/(application)/(user)/collaboration/[id]/edit.tsx index d4bc4ed..dcbbe89 100644 --- a/app/(application)/(user)/collaboration/[id]/edit.tsx +++ b/app/(application)/(user)/collaboration/[id]/edit.tsx @@ -19,7 +19,6 @@ import Toast from "react-native-toast-message"; export default function CollaborationEdit() { const { id } = useLocalSearchParams(); - console.log("id :", id); const [data, setData] = useState(); const [listMaster, setListMaster] = useState([]); const [loadingData, setLoadingData] = useState(false); diff --git a/app/(application)/admin/collaboration/[id]/[status].tsx b/app/(application)/admin/collaboration/[id]/[status].tsx index 7831dae..3300cf3 100644 --- a/app/(application)/admin/collaboration/[id]/[status].tsx +++ b/app/(application)/admin/collaboration/[id]/[status].tsx @@ -9,6 +9,7 @@ import { ViewWrapper, } from "@/components"; import AdminBackButtonAntTitle from "@/components/_ShareComponent/Admin/BackButtonAntTitle"; +import GridTwoView from "@/components/_ShareComponent/GridTwoView"; import { MainColor } from "@/constants/color-palet"; import { apiAdminCollaborationGetById } from "@/service/api-admin/api-admin-collaboration"; import { router, useFocusEffect, useLocalSearchParams } from "expo-router"; @@ -28,7 +29,7 @@ export default function AdminCollaborationPublish() { try { const response = await apiAdminCollaborationGetById({ id: id as string, - category: status as "publish" | "reject" | "group", + category: status as any, }); if (response.success) { @@ -39,7 +40,7 @@ export default function AdminCollaborationPublish() { } }; - const bottomFooter = ( + const bottomFooter = status === "publish" && ( + + {data?.report && ( + + Catatan report} + rightIcon={{data?.report}} + /> + + )} ); diff --git a/app/(application)/admin/collaboration/[id]/group.tsx b/app/(application)/admin/collaboration/[id]/group.tsx index 85bf7cd..32fc944 100644 --- a/app/(application)/admin/collaboration/[id]/group.tsx +++ b/app/(application)/admin/collaboration/[id]/group.tsx @@ -1,3 +1,4 @@ +/* eslint-disable react-hooks/exhaustive-deps */ import { BaseBox, Grid, @@ -6,23 +7,45 @@ import { ViewWrapper, } from "@/components"; import AdminBackButtonAntTitle from "@/components/_ShareComponent/Admin/BackButtonAntTitle"; -import { useLocalSearchParams } from "expo-router"; +import { apiAdminCollaborationGetById } from "@/service/api-admin/api-admin-collaboration"; +import { useFocusEffect, useLocalSearchParams } from "expo-router"; +import { useCallback, useState } from "react"; export default function AdminCollaborationGroup() { const { id } = useLocalSearchParams(); - console.log("params:", id); + const [data, setData] = useState(null); + + useFocusEffect( + useCallback(() => { + onLoadData(); + }, [id]) + ); + + const onLoadData = async () => { + try { + const response = await apiAdminCollaborationGetById({ + id: id as string, + category: "group", + }); + + if (response.success) { + setData(response.data); + } + } catch (error) { + console.log("[ERROR]", error); + } + }; + return ( <> - } + headerComponent={} > - {listData.map((item, i) => ( - + {listData(data).map((item: any, index: number) => ( + Anggota - {Array.from({ length: 10 }).map((_, i) => ( - - - Username - - - - Lorem ipsum dolor sit amet consectetur adipisicing elit. - - - - ))} + {data?.ProjectCollaboration_AnggotaRoomChat?.map( + (item: any, index: number) => ( + + + + Nama + + + + {item?.User?.Profile?.name || "-"} + + + + + + Username + + + {item?.User?.username || "-"} + + + + ) + )} @@ -63,35 +101,35 @@ export default function AdminCollaborationGroup() { ); } -const listData = [ +const listData = (data: any) => [ { label: "Admin Group", - value: "Bagas Banuna", + value: data?.ProjectCollaboration?.Author?.username || "-", }, { label: "Nama Group", - value: "Lorem ipsum dolor sit amet consectetur adipisicing elit.", + value: data?.name || "-", }, { label: "Industri", - value: "Kesehatan", + value: + data?.ProjectCollaboration?.ProjectCollaborationMaster_Industri?.name || + "-", }, { label: "Jumlah Partisipan ", - value: "0", + value: data?.ProjectCollaboration_AnggotaRoomChat?.length || "-", }, { label: "Lokasi", - value: "Kuta Selatan, Bali", + value: data?.ProjectCollaboration?.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?.ProjectCollaboration?.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?.ProjectCollaboration?.benefit || "-", }, ]; diff --git a/app/(application)/admin/collaboration/[id]/reject-input.tsx b/app/(application)/admin/collaboration/[id]/reject-input.tsx index a48a727..7bbd7cc 100644 --- a/app/(application)/admin/collaboration/[id]/reject-input.tsx +++ b/app/(application)/admin/collaboration/[id]/reject-input.tsx @@ -6,12 +6,41 @@ import { } from "@/components"; import AdminBackButtonAntTitle from "@/components/_ShareComponent/Admin/BackButtonAntTitle"; import AdminButtonReject from "@/components/_ShareComponent/Admin/ButtonReject"; +import { apiAdminCollaborationReject } from "@/service/api-admin/api-admin-collaboration"; import { router, useLocalSearchParams } from "expo-router"; import { useState } from "react"; +import Toast from "react-native-toast-message"; export default function AdminCollaborationRejectInput() { const { id } = useLocalSearchParams(); - const [value, setValue] = useState(id as string); + const [value, setValue] = useState(""); + + const handlerReject = async () => { + console.log("value:", value); + // router.replace(`/admin/job/reject/status`); + try { + const response = await apiAdminCollaborationReject({ + id: id as string, + data: value, + }); + + if (!response.success) { + Toast.show({ + type: "error", + text1: "Report gagal", + }); + } + + Toast.show({ + type: "success", + text1: "Report berhasil", + }); + + router.back(); + } catch (error) { + console.log("[ERROR]", error); + } + }; const buttonSubmit = ( @@ -23,12 +52,8 @@ export default function AdminCollaborationRejectInput() { 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`); + handlerReject(); }, }) } @@ -40,7 +65,9 @@ export default function AdminCollaborationRejectInput() { <> } + headerComponent={ + + } > (null); + const [loadList, setLoadList] = useState(false); + + useFocusEffect( + useCallback(() => { + handlerLoadList(); + }, []) + ); + + const handlerLoadList = async () => { + try { + setLoadList(true); + const response = await apiAdminCollaboration({ + category: "group", + }); + + if (response.success) { + setList(response.data); + } + } catch (error) { + console.log("[ERROR]", error); + } finally { + setLoadList(false); + } + }; + return ( <> }> - + - + <> - - {Array.from({ length: 10 }).map((_, index) => ( - + ) : _.isEmpty(list) ? ( + + Belum ada data + + ) : ( + list?.map((item: any, index: number) => ( + + + } + onPress={() => { + router.push(`/admin/collaboration/${item.id}/group`); + }} /> } - onPress={() => { - router.push(`/admin/collaboration/${index}/group`); - }} + value2={ + + {item?.ProjectCollaboration_AnggotaRoomChat?.length || + "-"} + + } + value3={ + {item?.name || "-"} + } /> - } - 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. - - } - /> - ))} - + + )) + )} + diff --git a/app/(application)/admin/collaboration/index.tsx b/app/(application)/admin/collaboration/index.tsx index c38acad..fb6f797 100644 --- a/app/(application)/admin/collaboration/index.tsx +++ b/app/(application)/admin/collaboration/index.tsx @@ -9,7 +9,6 @@ import { useCallback, useState } from "react"; export default function AdminCollaboration() { const [list, setList] = useState(null); - const [loadList, setLoadList] = useState(false); useFocusEffect( useCallback(() => { @@ -19,7 +18,6 @@ export default function AdminCollaboration() { const handlerLoadList = async () => { try { - setLoadList(true); const response = await apiAdminCollaboration({ category: "dashboard", }); @@ -31,8 +29,6 @@ export default function AdminCollaboration() { } } catch (error) { console.log("[ERROR]", error); - } finally { - setLoadList(false); } }; diff --git a/app/(application)/admin/collaboration/publish.tsx b/app/(application)/admin/collaboration/publish.tsx index 4e46528..777296f 100644 --- a/app/(application)/admin/collaboration/publish.tsx +++ b/app/(application)/admin/collaboration/publish.tsx @@ -15,6 +15,7 @@ import { Octicons } from "@expo/vector-icons"; import { router, useFocusEffect } from "expo-router"; import _ from "lodash"; import { useCallback, useState } from "react"; +import { View } from "react-native"; import { Divider } from "react-native-paper"; export default function AdminCollaborationPublish() { @@ -43,10 +44,11 @@ export default function AdminCollaborationPublish() { setLoadList(false); } }; + return ( <> }> - + ) : _.isEmpty(list) ? ( - Belum ada data + + Belum ada data + ) : ( list?.map((item: any, index: number) => ( - - } - onPress={() => { - router.push(`/admin/collaboration/${item?.id}/publish`); - }} - /> - } - value2={ - - {item?.Author?.username || "-"}{" "} - - } - value3={ - - {item?.title || "-"} - - } - /> + + + } + onPress={() => { + router.push(`/admin/collaboration/${item?.id}/publish`); + }} + /> + } + value2={ + + {item?.Author?.username || "-"}{" "} + + } + value3={ + + {item?.title || "-"} + + } + /> + )) )} diff --git a/app/(application)/admin/collaboration/reject.tsx b/app/(application)/admin/collaboration/reject.tsx index 0a54b09..f720516 100644 --- a/app/(application)/admin/collaboration/reject.tsx +++ b/app/(application)/admin/collaboration/reject.tsx @@ -1,67 +1,99 @@ import { ActionIcon, - BaseBox, - Spacing, + LoaderCustom, StackCustom, TextCustom, - ViewWrapper, + 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 { 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 { View } from "react-native"; import { Divider } from "react-native-paper"; export default function AdminCollaborationReject() { + const [list, setList] = useState(null); + const [loadList, setLoadList] = useState(false); + + useFocusEffect( + useCallback(() => { + handlerLoadList(); + }, []) + ); + + const handlerLoadList = async () => { + try { + setLoadList(true); + const response = await apiAdminCollaboration({ + category: "reject", + }); + + if (response.success) { + setList(response.data); + } + } catch (error) { + console.log("[ERROR]", error); + } finally { + setLoadList(false); + } + }; + return ( <> }> - + - - - - + + - {Array.from({ length: 10 }).map((_, index) => ( - - } - onPress={() => { - router.push(`/admin/collaboration/${index}/reject`); - }} - /> - } - 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. - - } - /> - ))} - + {loadList ? ( + + ) : _.isEmpty(list) ? ( + Belum ada data + ) : ( + list?.map((item: any) => ( + + + } + onPress={() => { + router.push(`/admin/collaboration/${item?.id}/reject`); + }} + /> + } + value2={ + + {item?.Author?.username || "-"} + + } + value3={ + + {item?.title || "-"} + + } + /> + + )) + )} diff --git a/components/_ShareComponent/Admin/TableValue.tsx b/components/_ShareComponent/Admin/TableValue.tsx index 65f0545..e16851b 100644 --- a/components/_ShareComponent/Admin/TableValue.tsx +++ b/components/_ShareComponent/Admin/TableValue.tsx @@ -7,10 +7,12 @@ export default function AdminTableValue({ value1, value2, value3, + bottomLine = false, }: { value1: React.ReactNode; value2: React.ReactNode; value3: React.ReactNode; + bottomLine?: boolean; }) { return ( <> @@ -50,7 +52,7 @@ export default function AdminTableValue({ {value3} - + {bottomLine && } ); diff --git a/screens/Collaboration/BoxPublishSection.tsx b/screens/Collaboration/BoxPublishSection.tsx index 79daeb5..b169671 100644 --- a/screens/Collaboration/BoxPublishSection.tsx +++ b/screens/Collaboration/BoxPublishSection.tsx @@ -15,23 +15,24 @@ function Collaboration_BoxPublishSection({ data: any; rightComponentAvatar?: React.ReactNode; }) { + return ( <> - + {data?.title || "-"} - {data?.purpose || "-"} + {/* {data?.purpose || "-"} */} {/* 2 Partisipan */} diff --git a/service/api-admin/api-admin-collaboration.ts b/service/api-admin/api-admin-collaboration.ts index ae016cb..88286c4 100644 --- a/service/api-admin/api-admin-collaboration.ts +++ b/service/api-admin/api-admin-collaboration.ts @@ -31,3 +31,20 @@ export async function apiAdminCollaborationGetById({ throw error; } } + +export async function apiAdminCollaborationReject({ + id, + data, +}: { + id: string; + data: any; +}) { + try { + const response = await apiConfig.put(`/mobile/admin/collaboration/${id}`, { + data: data, + }); + return response.data; + } catch (error) { + throw error; + } +}