From 37747941ce48e14a12b9dae86cbcb4ca85a493a4 Mon Sep 17 00:00:00 2001 From: hosseintaromi Date: Tue, 22 Jul 2025 00:04:25 +0330 Subject: [PATCH] fix(roles): add fallback and debug for roles API response - Add console.log to debug roles API response structure - Handle different API response formats (results, items, data fields) - Add fallback to empty array when API fails or returns non-array - Fix roles?.map error by ensuring roles is always an array - Handle backend API not working scenario --- src/pages/roles/core/_requests.ts | 38 ++++++++- src/pages/roles/roles-list/RolesListPage.tsx | 88 ++++++++++---------- 2 files changed, 76 insertions(+), 50 deletions(-) diff --git a/src/pages/roles/core/_requests.ts b/src/pages/roles/core/_requests.ts index 3760027..3e968fc 100644 --- a/src/pages/roles/core/_requests.ts +++ b/src/pages/roles/core/_requests.ts @@ -15,10 +15,40 @@ import { } from "./_models"; export const getRoles = async () => { - const response = await httpGetRequest( - APIUrlGenerator(API_ROUTES.GET_ROLES) - ); - return response.data; + try { + const response = await httpGetRequest( + APIUrlGenerator(API_ROUTES.GET_ROLES) + ); + console.log("Roles API Response:", response); + console.log("Roles data:", response.data); + + // اگر response.data آرایه نیست، ممکن است در فیلد دیگری باشد + if (Array.isArray(response.data)) { + return response.data; + } + + // بررسی اگر در فیلدهای دیگر باشد + if (response.data && typeof response.data === "object") { + // چک کن آیا در results یا items یا data هست + if (Array.isArray((response.data as any).results)) { + return (response.data as any).results; + } + if (Array.isArray((response.data as any).items)) { + return (response.data as any).items; + } + if (Array.isArray((response.data as any).data)) { + return (response.data as any).data; + } + } + + // fallback: آرایه خالی برگردان + console.warn("Roles data is not an array:", response.data); + return []; + } catch (error) { + console.error("Error fetching roles:", error); + // اگر backend کار نمی‌کند، آرایه خالی برگردان + return []; + } }; export const getRole = async (id: string) => { diff --git a/src/pages/roles/roles-list/RolesListPage.tsx b/src/pages/roles/roles-list/RolesListPage.tsx index 7d607ec..d39b624 100644 --- a/src/pages/roles/roles-list/RolesListPage.tsx +++ b/src/pages/roles/roles-list/RolesListPage.tsx @@ -4,7 +4,7 @@ import { useRoles, useDeleteRole } from "../core/_hooks"; import { Button } from "@/components/ui/Button"; import { LoadingSpinner } from "@/components/ui/LoadingSpinner"; import { Role } from "@/types/auth"; -import { Trash2, Edit, Plus, Eye, Users } from "lucide-react"; +import { Trash2, Edit, Plus, Eye, Users, Edit3, Shield } from "lucide-react"; import { Modal } from "@/components/ui/Modal"; const RolesListPage = () => { @@ -88,65 +88,61 @@ const RolesListPage = () => { - {roles?.map((role: Role) => ( + {(roles || []).map((role: Role) => (
{role.title}
- - -
+
{role.description}
- + {role.permissions?.length || 0} دسترسی - + {new Date(role.created_at).toLocaleDateString('fa-IR')} - -
- - - - -
+ + + + + ))}