fix: add null checks and fallback values for API response data

This commit is contained in:
mark 2025-05-28 08:02:22 +08:00
parent a340ab6abc
commit 5adb5ddead
4 changed files with 19 additions and 12 deletions

View File

@ -36,8 +36,8 @@ export default function Home() {
useEffect(() => {
async function fetchData() {
const response = await ApiService.getMigrants(1, 10)
setMigrants(response.data)
setTotal(response.total)
setMigrants(response.data || [])
setTotal(response.total || 0)
}
fetchData()
}, [])

View File

@ -14,7 +14,7 @@ export const useMigrants = () => {
const fetchData = async () => {
try {
const response = await ApiService.getMigrants(1, 1000);
const people: Person[] = response.data;
const people: Person[] = response.data ?? [];
const migrationCounts = getMigrationCounts(people);
const residenceCounts = getResidenceCounts(people);

View File

@ -76,9 +76,9 @@ export const useMigrants = (perPage: number = 10): UseMigrantsReturn => {
console.log("Sending filters:", activeFilters);
const res = await ApiService.getMigrants(currentPage, perPage, activeFilters);
setMigrants(res.data);
setTotalPages(res.last_page);
setCurrentPage(res.current_page);
setMigrants(res.data || []);
setTotalPages(res.last_page || 1);
setCurrentPage(res.current_page || 1);
} catch (err) {
console.error("Failed to fetch migrants", err);
} finally {

View File

@ -34,19 +34,25 @@ export function useMigrantsSearch(perPage = 10) {
const filters = getSearchParamsObject(searchParams);
const response = await apiService.getMigrants(page, perPage, filters);
const fetchedMigrants = response.data;
const fetchedMigrants = response.data || [];
setMigrants(fetchedMigrants);
setPagination({
currentPage: response.current_page,
totalPages: response.last_page,
totalItems: response.total,
currentPage: response.current_page ?? 1,
totalPages: response.last_page ?? 1,
totalItems: response.total ?? 0,
});
// Fetch photos for each migrant
const photosMap: Record<number, Photo[]> = {};
await Promise.all(
fetchedMigrants.map(async (migrant: Person) => {
(fetchedMigrants || []).map(async (migrant: Person) => {
try {
if (migrant.person_id === undefined) {
console.warn('Missing person_id for migrant', migrant);
migrant.photos = [];
migrant.profilePhoto = null;
return;
}
const photos = await apiService.getPhotos(migrant.person_id);
migrant.photos = photos; // Store all photos
migrant.profilePhoto = photos.find((photo) => photo.is_profile_photo) || null;
@ -58,6 +64,7 @@ export function useMigrantsSearch(perPage = 10) {
})
);
setPhotosById(photosMap);