import { AvatarUsernameAndOtherComponent, BoxWithHeaderSection, FloatingButton, NewWrapper_V2, SearchInput, Spacing, StackCustom, TextCustom, ViewWrapper, } from "@/components"; import { MainColor } from "@/constants/color-palet"; import { createPaginationComponents } from "@/helpers/paginationHelpers"; import { usePagination } from "@/hooks/use-pagination"; import { apiJobGetAll } from "@/service/api-client/api-job"; import { router, useFocusEffect } from "expo-router"; import _ from "lodash"; import { useState } from "react"; import { RefreshControl, View } from "react-native"; import { PAGINATION_DEFAULT_TAKE } from "@/constants/constans-value"; const PAGE_SIZE = 10; export default function Job_ScreenBeranda2() { const [search, setSearch] = useState(""); // Setup pagination const pagination = usePagination({ fetchFunction: async (page, searchQuery) => { return await apiJobGetAll({ search: searchQuery || "", category: "beranda", page: String(page), }); }, pageSize: PAGINATION_DEFAULT_TAKE, searchQuery: search, dependencies: [], onError: (error) => console.error("[ERROR] Fetch job:", error), }); // Generate komponen const { ListEmptyComponent, ListFooterComponent } = createPaginationComponents({ loading: pagination.loading, refreshing: pagination.refreshing, listData: pagination.listData, searchQuery: search, emptyMessage: "Belum ada lowongan", emptySearchMessage: "Tidak ada hasil pencarian", skeletonCount: 5, skeletonHeight: 150, }); // Render item job const renderJobItem = ({ item }: { item: any }) => ( router.push(`/job/${item.id}`)} > {item?.title || "-"} ); return ( setSearch(text), 500)} /> } floatingButton={ router.push("/job/create")} /> } listData={pagination.listData} renderItem={renderJobItem} refreshControl={ } onEndReached={pagination.loadMore} ListEmptyComponent={ListEmptyComponent} ListFooterComponent={ListFooterComponent} /> ); }