import { AvatarComp, ClickableCustom, Grid, NewWrapper, StackCustom, TextCustom, TextInputCustom, } from "@/components"; 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 { apiAllUser } from "@/service/api-client/api-user"; import { Ionicons } from "@expo/vector-icons"; import { router, useFocusEffect } from "expo-router"; import _ from "lodash"; import { useCallback, useRef, useState } from "react"; import { RefreshControl, View } from "react-native"; const PAGE_SIZE = PAGINATION_DEFAULT_TAKE; /** * Render header dengan search input */ const renderHeader = (search: string, setSearch: (text: string) => void) => ( } placeholder="Cari Pengguna" borderRadius={50} containerStyle={{ marginBottom: 0 }} /> ); /** * Render item user */ const renderItem = ({ item }: { item: any }) => ( { router.push(`/profile/${item?.Profile?.id}`); }} > {item?.username} +{item?.nomor} {item?.Profile?.businessField && ( {item?.Profile?.businessField} )} ); export default function UserSearchMainView_V2() { const isInitialMount = useRef(true); const [search, setSearch] = useState(""); const pagination = usePagination({ fetchFunction: async (page, searchQuery) => { const response = await apiAllUser({ page: String(page), search: searchQuery || "", }); return response; }, pageSize: PAGE_SIZE, searchQuery: search, }); // 🔁 Refresh otomatis saat kembali ke halaman ini // useFocusEffect( // useCallback(() => { // if (isInitialMount.current) { // isInitialMount.current = false; // return; // } // pagination.onRefresh(); // }, [pagination.onRefresh]), // ); const { ListEmptyComponent, ListFooterComponent } = createPaginationComponents({ loading: pagination.loading, refreshing: pagination.refreshing, listData: pagination.listData, searchQuery: search, emptyMessage: "Tidak ada pengguna ditemukan", emptySearchMessage: "Tidak ada hasil pencarian", skeletonCount: PAGINATION_DEFAULT_TAKE, skeletonHeight: 100, loadingFooterText: "Memuat lebih banyak pengguna...", isInitialLoad: pagination.isInitialLoad, }); return ( } ListFooterComponent={ListFooterComponent} ListEmptyComponent={ListEmptyComponent} /> ); }