From 42fa80c2287b084a44425711801da8a7c29b4401 Mon Sep 17 00:00:00 2001 From: bagasbanuna Date: Fri, 13 Feb 2026 17:38:48 +0800 Subject: [PATCH] Fix Admin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Admin – App Information - app/(application)/admin/app-information/index.tsx - app/(application)/admin/app-information/business-field/[id]/index.tsx Admin Screens - screens/Admin/App-Information/BusinessFieldSection.tsx - screens/Admin/App-Information/InformationBankSection.tsx - screens/Admin/User-Access/ScreenUserAccess.tsx New Admin Screens - screens/Admin/App-Information/ScreenAppInformation.tsx - screens/Admin/App-Information/ScreenBusinessFieldDetail.tsx Shared Components - components/_ShareComponent/Admin/BoxTitlePage.tsx API Service - service/api-admin/api-master-admin.ts Styles - styles/global-styles.ts Docs - docs/prompt-for-qwen-code.md ### No Issue --- .../business-field/[id]/index.tsx | 134 +------------ .../admin/app-information/index.tsx | 85 +------- .../_ShareComponent/Admin/BoxTitlePage.tsx | 4 +- docs/prompt-for-qwen-code.md | 44 ++++- .../App-Information/BusinessFieldSection.tsx | 134 ++++--------- .../InformationBankSection.tsx | 144 ++++---------- .../App-Information/ScreenAppInformation.tsx | 153 +++++++++++++++ .../ScreenBusinessFieldDetail.tsx | 185 ++++++++++++++++++ .../Admin/User-Access/ScreenUserAccess.tsx | 16 +- service/api-admin/api-master-admin.ts | 59 ++++-- styles/global-styles.ts | 2 +- 11 files changed, 516 insertions(+), 444 deletions(-) create mode 100644 screens/Admin/App-Information/ScreenAppInformation.tsx create mode 100644 screens/Admin/App-Information/ScreenBusinessFieldDetail.tsx diff --git a/app/(application)/admin/app-information/business-field/[id]/index.tsx b/app/(application)/admin/app-information/business-field/[id]/index.tsx index 968167a..cd7ac83 100644 --- a/app/(application)/admin/app-information/business-field/[id]/index.tsx +++ b/app/(application)/admin/app-information/business-field/[id]/index.tsx @@ -1,135 +1,5 @@ -/* eslint-disable react-hooks/exhaustive-deps */ -import { - ActionIcon, - BaseBox, - CenterCustom, - LoaderCustom, - Spacing, - StackCustom, - TextCustom, - ViewWrapper, -} from "@/components"; -import { IconEdit } from "@/components/_Icon"; -import AdminBackButtonAntTitle from "@/components/_ShareComponent/Admin/BackButtonAntTitle"; -import { GridSpan_NewComponent } from "@/components/_ShareComponent/GridSpan_NewComponent"; -import { MainColor } from "@/constants/color-palet"; -import { apiAdminMasterBusinessFieldById } from "@/service/api-admin/api-master-admin"; -import { router, useFocusEffect, useLocalSearchParams } from "expo-router"; -import { useCallback, useState } from "react"; -import { Divider } from "react-native-paper"; +import { Admin_ScreenBusinessFieldDetail } from "@/screens/Admin/App-Information/ScreenBusinessFieldDetail"; export default function AdminAppInformation_BusinessFieldDetail() { - const { id } = useLocalSearchParams(); - const [data, setData] = useState(null); - const [isLoading, setIsLoading] = useState(false); - - useFocusEffect( - useCallback(() => { - onLoadDetail(); - }, [id]) - ); - - const onLoadDetail = async () => { - try { - const response = await apiAdminMasterBusinessFieldById({ - id: id as string, - category: "all", - }); - - console.log("Response >>", JSON.stringify(response, null, 2)); - - setData(response.data); - } catch (error) { - console.log("[ERROR]", error); - setData(null); - } - }; - - return ( - <> - - - - - {!data ? ( - - ) : ( - - Nama Bidang - - - - - Status: {data?.bidang?.active ? "Aktif" : "Tidak Aktif"} - - - {data?.bidang?.name} - - } - text2={ - - } - onPress={() => - router.push( - `/admin/app-information/business-field/${id}/bidang-update` - ) - } - /> - - } - /> - - - {/* */} - - - Sub Bidang Bisnis - - - {data?.subBidang?.map((item: any, index: number) => ( - - - - Status: {item?.isActive ? "Aktif" : "Tidak Aktif"} - - - - {item.name} - - } - text2={ - - - } - onPress={() => - router.push( - `/admin/app-information/business-field/${item?.id}/sub-bidang-update` - ) - } - /> - - } - /> - - - ))} - - )} - - {/* {JSON.stringify(data, null, 2)} */} - - - - ); + return ; } diff --git a/app/(application)/admin/app-information/index.tsx b/app/(application)/admin/app-information/index.tsx index 7bc697e..99d5241 100644 --- a/app/(application)/admin/app-information/index.tsx +++ b/app/(application)/admin/app-information/index.tsx @@ -1,86 +1,5 @@ -import { ScrollableCustom, StackCustom, ViewWrapper } from "@/components"; -import AdminActionIconPlus from "@/components/_ShareComponent/Admin/ActionIconPlus"; -import AdminComp_BoxTitle from "@/components/_ShareComponent/Admin/BoxTitlePage"; -import AdminAppInformation_BusinessFieldSection from "@/screens/Admin/App-Information/BusinessFieldSection"; -import AdminAppInformation_Bank from "@/screens/Admin/App-Information/InformationBankSection"; -import AdminAppInformation_StickerSection from "@/screens/Admin/App-Information/StickerSection"; -import { router } from "expo-router"; -import { useState } from "react"; -import { Alert } from "react-native"; +import { Admin_ScreenAppInformation } from "@/screens/Admin/App-Information/ScreenAppInformation"; export default function AdminInformation() { - const [activeCategory, setActiveCategory] = useState("bank"); - const [activePage, setActivePage] = useState("Informasi Bank"); - - const handlePress = (item: any) => { - setActiveCategory(item.value); - setActivePage(item.label); - // tambahkan logika lain seperti filter dsb. - }; - - const scrollComponent = ( - - - - ); - - const renderContent = () => { - switch (activeCategory) { - case "bank": - return ; - case "business": - return ; - case "sticker": - return ; - default: - return ; - } - }; - - return ( - <> - - { - if (activeCategory === "bank") { - router.push("/admin/app-information/information-bank/create"); - } else if (activeCategory === "business") { - router.push("/admin/app-information/business-field/create"); - } else if (activeCategory === "sticker") { - Alert.alert("Coming Soon", "Next Update"); - // router.push("/admin/app-information/sticker/create"); - } - }} - /> - } - /> - {renderContent()} - - - ); + return ; } - -const listPage = [ - { - id: "1", - label: "Informasi Bank", - value: "bank", - }, - { - id: "2", - label: "Bidang & Sub Bidang", - value: "business", - }, - { - id: "3", - label: "Stiker", - value: "sticker", - }, -]; diff --git a/components/_ShareComponent/Admin/BoxTitlePage.tsx b/components/_ShareComponent/Admin/BoxTitlePage.tsx index a6ab82d..94ac09a 100644 --- a/components/_ShareComponent/Admin/BoxTitlePage.tsx +++ b/components/_ShareComponent/Admin/BoxTitlePage.tsx @@ -24,8 +24,8 @@ export default function AdminComp_BoxTitle({ style={{ backgroundColor: AccentColor.darkblue, borderColor: AccentColor.blue, - - padding: 10, + paddingBlock: 5, + paddingInline: 10, borderWidth: 1, borderRadius: 10, }} diff --git a/docs/prompt-for-qwen-code.md b/docs/prompt-for-qwen-code.md index 531ee37..022a6d8 100644 --- a/docs/prompt-for-qwen-code.md +++ b/docs/prompt-for-qwen-code.md @@ -60,24 +60,48 @@ Gunakan bahasa indonesia pada cli agar saya mudah membacanya.eclar -File source: app/(application)/admin/user-access/index.tsx -Folder tujuan: screens/Admin/User-Access -Nama file utama: ScreenUserAccess.tsx -Nama function utama: Admin_ScreenUserAccess + +File source: app/(application)/admin/app-information/business-field/[id]/index.tsx +Folder tujuan: screens/Admin/App-Information +Nama file utama: ScreenBusinessFieldDetail.tsx +Nama function utama: Admin_ScreenBusinessFieldDetail File komponen wrapper: components/_ShareComponent/NewWrapper.tsx -Function fecth: apiAdminUserAccessGetAll -File function fetch: service/api-admin/api-admin-user-access.ts Buat file baru pada "Folder tujuan" dengan nama "Nama file utama" dan ubah nama function menjadi "Nama function utama" kemudian clean code, import dan panggil function tersebut pada file "File source" - Analisa juga file "Nama file utama" , jika belum menggunakan NewWrapper pada file "File komponen wrapper" , maka terapkan juga dan ganti wrapper lama yaitu komponen ViewWrapper + + +Function fecth: apiAdminMasterBank +File function fetch: service/api-admin/api-master-admin.ts + Terapkan pagination pada file "Nama file utama" - Komponen pagination yang digunaka berada pada file hooks/use-pagination.tsx dan helpers/paginationHelpers.tsx - Perbaiki fetch "Function fecth" , pada file "File function fetch" Jika tidak ada props page maka tambahkan props page dan default page: "1" + + Gunakan bahasa indonesia pada cli agar saya mudah membacanya. - \ No newline at end of file + + + +Terapkan NewWrapper pada file: screens/Admin/App-Information/InformationBankSection.tsx +Component yang digunakan: components/_ShareComponent/NewWrapper.tsx + +Function fecth: apiAdminMasterBank +File function fetch: service/api-admin/api-master-admin.ts + +Terapkan pagination pada file "Nama file utama" +Komponen pagination yang digunaka berada pada file hooks/use-pagination.tsx dan helpers/paginationHelpers.tsx +Perbaiki fetch "Function fecth" , pada file "File function fetch" +Jika tidak ada props page maka tambahkan props page dan default page: "1" ( string ) + +File Utama: screens/Admin/App-Information/InformationBankSection.tsx +Terapkan FlatList dan pagination pada file "File Utama" +Komponen pagination yang digunaka berada pada file hooks/use-pagination.tsx dan helpers/paginationHelpers.tsx +Function fecth: apiAdminMasterBank +File function fetch: service/api-admin/api-master-admin.ts +Jika tidak ada props page maka tambahkan props page dan default page: "1" ( string ) +Jika butuh refrensi FlatList bisa lihat pada file components/_ShareComponent/NewWrapper.tsx + diff --git a/screens/Admin/App-Information/BusinessFieldSection.tsx b/screens/Admin/App-Information/BusinessFieldSection.tsx index 3928723..adaa77e 100644 --- a/screens/Admin/App-Information/BusinessFieldSection.tsx +++ b/screens/Admin/App-Information/BusinessFieldSection.tsx @@ -1,114 +1,56 @@ import { - ActionIcon, BadgeCustom, CenterCustom, Grid, - LoaderCustom, StackCustom, - TextCustom, + TextCustom } from "@/components"; -import { AccentColor } from "@/constants/color-palet"; -import { ICON_SIZE_BUTTON } from "@/constants/constans-value"; -import { apiAdminMasterBusinessField } from "@/service/api-admin/api-master-admin"; -import { FontAwesome5 } 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"; +import AdminBasicBox from "@/components/_ShareComponent/Admin/AdminBasicBox"; +import { router } from "expo-router"; -export default function AdminAppInformation_BusinessFieldSection() { - const [listData, setListData] = useState(null); - const [loadData, setLoadData] = useState(false); - - useFocusEffect( - useCallback(() => { - onLoadList(); - }, []) - ); - - const onLoadList = async () => { - try { - setLoadData(true); - const response = await apiAdminMasterBusinessField(); - - - if (response.success) { - setListData(response.data); - } - } catch (error) { - console.log("[ERROR LIST BUSINESS FIELD]", error); - setListData([]); - } finally { - setLoadData(false); - } +interface Bidang { + item: { + id: string; + name: string; + slug: string; + active: boolean; + createdAt: string; + updatedAt: string; }; +} +export default function AdminAppInformation_BusinessFieldSection({ + item, +}: { + item: any; +}) { return ( <> - + + router.push(`/admin/app-information/business-field/${item.item.id}`) + } + style={{ marginHorizontal: 10, marginVertical: 5 }} + > - - Aksi + + + + {item?.item?.name || "-"} + + - - Status - - - Nama Bidang Bisnis + + + {item?.item?.active ? ( + Aktif + ) : ( + Tidak Aktif + )} + - - - - {loadData ? ( - - ) : _.isEmpty(listData) ? ( - Tidak ada data - ) : ( - - {listData?.map((item: any, index: number) => ( - - - - - } - onPress={() => { - router.push( - `/admin/app-information/business-field/${item.id}` - ); - }} - /> - - - - - {item.active ? "Aktif" : "Tidak Aktif"} - - - - - {item.name} - - - - ))} - - )} - + ); } diff --git a/screens/Admin/App-Information/InformationBankSection.tsx b/screens/Admin/App-Information/InformationBankSection.tsx index b78fc1f..d0bacca 100644 --- a/screens/Admin/App-Information/InformationBankSection.tsx +++ b/screens/Admin/App-Information/InformationBankSection.tsx @@ -1,119 +1,59 @@ import { - ActionIcon, BadgeCustom, CenterCustom, Grid, - LoaderCustom, StackCustom, - TextCustom, + TextCustom } from "@/components"; -import { AccentColor } from "@/constants/color-palet"; -import { ICON_SIZE_BUTTON } from "@/constants/constans-value"; -import { apiAdminMasterBank } from "@/service/api-admin/api-master-admin"; -import { FontAwesome5 } 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"; +import AdminBasicBox from "@/components/_ShareComponent/Admin/AdminBasicBox"; +import { router } from "expo-router"; -export default function AdminAppInformation_Bank() { - const [listData, setListData] = useState(null); - const [loadData, setLoadData] = useState(false); - - useFocusEffect( - useCallback(() => { - loadMasterBank(); - }, []) - ); - - const loadMasterBank = async () => { - try { - setLoadData(true); - const response = await apiAdminMasterBank(); - - setListData(response.data); - } catch (error) { - console.log("[ERROR LIST BANK]", error); - setListData([]); - } finally { - setLoadData(false); - } +interface BankProps { + item: { + id: string; + namaBank: string; + namaAkun: string; + norek: string; + isActive: boolean; + createdAt: string; + updatedAt: string; }; - +} +export default function AdminAppInformation_Bank({ + item, +}: { + item: BankProps; +}) { return ( <> - + + router.push(`/admin/app-information/information-bank/${item.item.id}`) + } + style={{ marginHorizontal: 10, marginVertical: 5 }} + > - - - Aksi - + + + + {item?.item?.namaBank || "-"} + + + {item?.item?.norek || "-"} + + - - - Status - - - - - Nama Bank - + + + {item?.item?.isActive ? ( + Aktif + ) : ( + Tidak Aktif + )} + - - - - {loadData ? ( - - ) : _.isEmpty(listData) ? ( - Tidak ada data - ) : ( - - {listData?.map((item: any, index: number) => ( - - - - - } - onPress={() => { - router.push( - `/admin/app-information/information-bank/${item.id}` - ); - }} - /> - - - - - {item.isActive ? "Aktif" : "Tidak Aktif"} - - - - - {item.namaBank} - - - - ))} - - )} - + ); } diff --git a/screens/Admin/App-Information/ScreenAppInformation.tsx b/screens/Admin/App-Information/ScreenAppInformation.tsx new file mode 100644 index 0000000..8ae67e8 --- /dev/null +++ b/screens/Admin/App-Information/ScreenAppInformation.tsx @@ -0,0 +1,153 @@ +import { ScrollableCustom, StackCustom } from "@/components"; +import AdminActionIconPlus from "@/components/_ShareComponent/Admin/ActionIconPlus"; +import AdminComp_BoxTitle from "@/components/_ShareComponent/Admin/BoxTitlePage"; +import NewWrapper from "@/components/_ShareComponent/NewWrapper"; +import { MainColor } from "@/constants/color-palet"; +import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value"; +import { createPaginationComponents } from "@/helpers/paginationHelpers"; +import { usePagination } from "@/hooks/use-pagination"; +import AdminAppInformation_BusinessFieldSection from "@/screens/Admin/App-Information/BusinessFieldSection"; +import AdminAppInformation_Bank_Component from "@/screens/Admin/App-Information/InformationBankSection"; +import { apiFetchAdminMasterAppInformation } from "@/service/api-admin/api-master-admin"; +import { router, useFocusEffect } from "expo-router"; +import { useCallback, useState } from "react"; +import { Alert, RefreshControl } from "react-native"; + +export function Admin_ScreenAppInformation() { + const [activeCategory, setActiveCategory] = useState("bank"); + const [activePage, setActivePage] = useState("Informasi Bank"); + + const pagination = usePagination({ + fetchFunction: async (page) => { + return await apiFetchAdminMasterAppInformation({ + category: activeCategory as string, + page: String(page), + }); + }, + pageSize: PAGINATION_DEFAULT_TAKE, + dependencies: [activeCategory], + onError: (error) => console.error("[ERROR] Fetch job by status:", error), + }); + + const { ListEmptyComponent, ListFooterComponent } = + createPaginationComponents({ + loading: pagination.loading, + refreshing: pagination.refreshing, + listData: pagination.listData, + emptyMessage: `Tidak ada data ${activeCategory}`, + skeletonCount: PAGINATION_DEFAULT_TAKE, + skeletonHeight: 100, + }); + + const handlePress = (item: any) => { + setActiveCategory(item.value); + setActivePage(item.label); + // tambahkan logika lain seperti filter dsb. + }; + + useFocusEffect( + useCallback(() => { + pagination.onRefresh(); + }, [activeCategory]), + ); + + const scrollComponent = ( + + ({ + id: i, + label: e.label, + value: e.value, + }))} + onButtonPress={handlePress} + activeId={activeCategory as any} + /> + { + if (activeCategory === "bank") { + router.push("/admin/app-information/information-bank/create"); + } else if (activeCategory === "business") { + router.push("/admin/app-information/business-field/create"); + } else if (activeCategory === "sticker") { + Alert.alert("Coming Soon", "Next Update"); + // router.push("/admin/app-information/sticker/create"); + } + }} + /> + } + /> + + ); + + // const renderContent = () => { + // switch (activeCategory) { + // case "bank": + // return ; + // case "business": + // return ; + // // case "sticker": + // // return ; + // default: + // return ; + // } + // }; + + const renderItem = (item: any) => { + if (activeCategory === "bank") { + return ; + } else if (activeCategory === "business") { + return ( + + ); + } else { + return ; + } + }; + + return ( + + } + onEndReached={pagination.loadMore} + ListEmptyComponent={ListEmptyComponent} + ListFooterComponent={ListFooterComponent} + hideFooter + // Data dan render + listData={pagination.listData} + renderItem={(item: any) => renderItem(item)} + /> + // {renderContent()} + // + ); +} + +const listPage = [ + { + id: "1", + label: "Informasi Bank", + value: "bank", + }, + { + id: "2", + label: "Bidang & Sub Bidang", + value: "business", + }, + // { + // id: "3", + // label: "Stiker", + // value: "sticker", + // }, +]; diff --git a/screens/Admin/App-Information/ScreenBusinessFieldDetail.tsx b/screens/Admin/App-Information/ScreenBusinessFieldDetail.tsx new file mode 100644 index 0000000..5398bff --- /dev/null +++ b/screens/Admin/App-Information/ScreenBusinessFieldDetail.tsx @@ -0,0 +1,185 @@ +/* eslint-disable react-hooks/exhaustive-deps */ +import { + BadgeCustom, + BaseBox, + CenterCustom, + NewWrapper, + Spacing, + StackCustom, + TextCustom, +} from "@/components"; +import AdminBackButtonAntTitle from "@/components/_ShareComponent/Admin/BackButtonAntTitle"; +import { GridSpan_NewComponent } from "@/components/_ShareComponent/GridSpan_NewComponent"; +import { MainColor } from "@/constants/color-palet"; +import { + ICON_SIZE_SMALL, + PAGINATION_DEFAULT_TAKE, +} from "@/constants/constans-value"; +import { createPaginationComponents } from "@/helpers/paginationHelpers"; +import { usePagination } from "@/hooks/use-pagination"; +import { apiAdminMasterBusinessFieldById } from "@/service/api-admin/api-master-admin"; +import { Ionicons } from "@expo/vector-icons"; +import { router, useFocusEffect, useLocalSearchParams } from "expo-router"; +import { useCallback, useState } from "react"; +import { RefreshControl, View } from "react-native"; + +export function Admin_ScreenBusinessFieldDetail() { + const { id } = useLocalSearchParams(); + const [bidang, setBidang] = useState(null); + + const pagination = usePagination({ + fetchFunction: async (page) => { + return await apiAdminMasterBusinessFieldById({ + category: "only-sub-bidang", + id: id as any, + page: String(page), + }); + // Pastikan mengembalikan struktur data yang sesuai dengan yang diharapkan oleh usePagination + }, + pageSize: PAGINATION_DEFAULT_TAKE, + dependencies: [id], + onError: (error) => { + console.log("Error fetching data sub bidang", error); + }, + }); + + const { ListEmptyComponent, ListFooterComponent } = + createPaginationComponents({ + loading: pagination.loading, + refreshing: pagination.refreshing, + listData: pagination.listData, + searchQuery: "", + emptyMessage: "Tidak ada data pengguna", + emptySearchMessage: "Tidak ada hasil pencarian", + skeletonCount: PAGINATION_DEFAULT_TAKE, + skeletonHeight: 100, + isInitialLoad: pagination.isInitialLoad, + }); + + useFocusEffect( + useCallback(() => { + onLoadBidang(); + pagination.onRefresh(); + }, [id]), + ); + + const onLoadBidang = async () => { + try { + const response = await apiAdminMasterBusinessFieldById({ + id: id as string, + category: "all", + }); + setBidang(response.data); + } catch (error) { + console.log("[ERROR]", error); + setBidang(null); + } + }; + const renderHeader = () => ( + + + router.push( + `/admin/app-information/business-field/${id}/bidang-update`, + ) + } + > + + + + {bidang?.bidang?.name} + + {bidang?.bidang.active ? ( + Aktif + ) : ( + Tidak Aktif + )} + + } + text2={ + + + + } + /> + + + + + Sub Bidang + + + + ); + + const renderItem = ({ item }: { item: any }) => ( + + router.push( + `/admin/app-information/business-field/${item?.id}/sub-bidang-update`, + ) + } + > + + + + {item.name} + + {item?.isActive ? ( + Aktif + ) : ( + Tidak Aktif + )} + + } + text2={ + + + + } + /> + + + ); + + return ( + <> + + } + headerComponent={ + + } + ListHeaderComponent={renderHeader()} + renderItem={renderItem} + /> + + ); +} diff --git a/screens/Admin/User-Access/ScreenUserAccess.tsx b/screens/Admin/User-Access/ScreenUserAccess.tsx index 048eb16..e6129fb 100644 --- a/screens/Admin/User-Access/ScreenUserAccess.tsx +++ b/screens/Admin/User-Access/ScreenUserAccess.tsx @@ -5,20 +5,18 @@ import { Grid, SearchInput, StackCustom, - TextCustom + TextCustom, } from "@/components"; import AdminBasicBox from "@/components/_ShareComponent/Admin/AdminBasicBox"; import AdminComp_BoxTitle from "@/components/_ShareComponent/Admin/BoxTitlePage"; import NewWrapper from "@/components/_ShareComponent/NewWrapper"; import { MainColor } from "@/constants/color-palet"; -import { - PAGINATION_DEFAULT_TAKE -} from "@/constants/constans-value"; +import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value"; import { createPaginationComponents } from "@/helpers/paginationHelpers"; import { usePagination } from "@/hooks/use-pagination"; import { apiAdminUserAccessGetAll } from "@/service/api-admin/api-admin-user-access"; -import { router } from "expo-router"; -import { useState } from "react"; +import { router, useFocusEffect } from "expo-router"; +import { useCallback, useState } from "react"; import { RefreshControl } from "react-native"; export function Admin_ScreenUserAccess() { @@ -54,6 +52,12 @@ export function Admin_ScreenUserAccess() { isInitialLoad: pagination.isInitialLoad, }); + useFocusEffect( + useCallback(() => { + pagination.onRefresh(); + }, []), + ); + const rightComponent = () => { return ( <> diff --git a/service/api-admin/api-master-admin.ts b/service/api-admin/api-master-admin.ts index cc668bc..f354195 100644 --- a/service/api-admin/api-master-admin.ts +++ b/service/api-admin/api-master-admin.ts @@ -1,9 +1,11 @@ import { apiConfig } from "../api-config"; // ================== START MASTER BANK ================== // -export async function apiAdminMasterBank() { +export async function apiAdminMasterBank({ page = "1" }: { page?: string }) { try { - const response = await apiConfig.get(`/mobile/admin/master/bank`); + const response = await apiConfig.get( + `/mobile/admin/master/bank?page=${page}`, + ); return response.data; } catch (error) { throw error; @@ -51,9 +53,15 @@ export async function apiAdminMasterBankCreate({ data }: { data: any }) { // ================== START BUSINNES FIELD ================== // -export async function apiAdminMasterBusinessField() { +export async function apiAdminMasterBusinessField({ + page = "1", +}: { + page: string; +}) { try { - const response = await apiConfig.get(`/mobile/admin/master/business-field`); + const response = await apiConfig.get( + `/mobile/admin/master/business-field?page=${page}`, + ); return response.data; } catch (error) { throw error; @@ -64,16 +72,19 @@ export async function apiAdminMasterBusinessFieldById({ id, subBidangId, category, + page = "1" }: { id: string; subBidangId?: string | null; - category: "bidang" | "sub-bidang" | "all"; + category: "bidang" | "sub-bidang" | "all" | "only-sub-bidang" + page?: string }) { const queryCategory = category ? `?category=${category}` : ""; const querySubBidang = subBidangId ? `&subBidangId=${subBidangId}` : ""; + const queryPage = page ? `&page=${page}` : ""; try { const response = await apiConfig.get( - `/mobile/admin/master/business-field/${id}${queryCategory}${querySubBidang}` + `/mobile/admin/master/business-field/${id}${queryCategory}${querySubBidang}${queryPage}`, ); return response.data; } catch (error) { @@ -95,7 +106,7 @@ export async function apiAdminMasterBusinessFieldUpdate({ `/mobile/admin/master/business-field/${id}?category=${category}`, { data: data, - } + }, ); return response.data; } catch (error) { @@ -113,7 +124,7 @@ export async function apiAdminMasterBusinessFieldCreate({ `/mobile/admin/master/business-field`, { data: data, - } + }, ); return response.data; } catch (error) { @@ -139,7 +150,7 @@ export async function apiEventCreateTypeOfEvent({ data }: { data: string }) { `/mobile/admin/master/type-of-event`, { data: data, - } + }, ); return response.data; } catch (error) { @@ -150,7 +161,7 @@ export async function apiEventCreateTypeOfEvent({ data }: { data: string }) { export async function apiAdminMasterTypeOfEventGetOne({ id }: { id: string }) { try { const response = await apiConfig.get( - `/mobile/admin/master/type-of-event/${id}` + `/mobile/admin/master/type-of-event/${id}`, ); return response.data; } catch (error) { @@ -170,7 +181,7 @@ export async function apiAdminMasterTypeOfEventUpdate({ `/mobile/admin/master/type-of-event/${id}`, { data: data, - } + }, ); return response.data; } catch (error) { @@ -216,7 +227,7 @@ export async function apiAdminMasterDonationCategoryUpdate({ `/mobile/admin/master/donation/${id}`, { data: data, - } + }, ); return response.data; } catch (error) { @@ -240,3 +251,27 @@ export async function apiAdminMasterDonationCategoryCreate({ } // ================== END DONATION ================== // + +// ================== START FECTH APP INFORMATION ================== // + +export async function apiFetchAdminMasterAppInformation({ + page = "1", + category, +}: { + page: string; + category?: "bank" | "business" | string +}) { + if (category === "bank") { + const response = await apiAdminMasterBank({ page }); + // TODO: implement bank logic + return response; + } else if (category === "business") { + const response = await apiAdminMasterBusinessField({ page }); + // TODO: implement business logic + return response + } else { + throw new Error("Category is required"); + } +} + +// ================== END FECTH APP INFORMATION ================== // diff --git a/styles/global-styles.ts b/styles/global-styles.ts index fed6179..30f8781 100644 --- a/styles/global-styles.ts +++ b/styles/global-styles.ts @@ -16,7 +16,7 @@ export const GStyles = StyleSheet.create({ // =============== Main Styles =============== // container: { flex: 1, - paddingInline: PADDING_MEDIUM, + paddingInline: PADDING_SMALL, paddingTop: PADDING_EXTRA_SMALL, paddingBottom: 5, // paddingBlock: PADDING_EXTRA_SMALL, -- 2.49.1