fix: remove incorrect .data wrapper — backend returns arrays directly

All pages expected API responses in { data: [], total } format but
backend APIs return plain arrays. Changed data?.data ?? [] to data ?? []
across 22 page components.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
hailin 2026-03-02 09:47:22 -08:00
parent d21f41d7c3
commit 10e0b0ce29
22 changed files with 33 additions and 36 deletions

View File

@ -338,7 +338,7 @@ export default function HooksPage() {
queryFn: () => apiClient<HooksResponse>('/api/v1/agent/hooks'),
});
const hooks = data?.data ?? [];
const hooks = data?? [];
// Mutations ------------------------------------------------------------
const createMutation = useMutation({

View File

@ -323,7 +323,7 @@ export default function SkillsPage() {
queryFn: () => apiClient<SkillsResponse>('/api/v1/agent/skills'),
});
const skills = data?.data ?? [];
const skills = data?? [];
// Mutations ------------------------------------------------------------
const createMutation = useMutation({

View File

@ -83,7 +83,7 @@ export default function AuditLogsPage() {
queryFn: () => apiClient<AuditLogsResponse>(`/api/v1/audit/logs?${queryString}`),
});
const logs = data?.data ?? [];
const logs = data?? [];
const total = data?.total ?? 0;
const totalPages = Math.max(1, Math.ceil(total / pageSize));

View File

@ -192,7 +192,7 @@ export default function SessionReplayPage() {
),
});
const sessions = sessionsData?.data ?? [];
const sessions = sessionsData?? [];
const total = sessionsData?.total ?? 0;
// Fetch session events when a session is selected
@ -209,7 +209,7 @@ export default function SessionReplayPage() {
enabled: !!selectedSessionId,
});
const events = eventsData?.data ?? [];
const events = eventsData?? [];
const selectedSession = sessions.find((s) => s.id === selectedSessionId) ?? null;
// Reset playback when selecting a new session

View File

@ -178,7 +178,7 @@ function ChannelsTab() {
onSuccess: () => queryClient.invalidateQueries({ queryKey: queryKeys.channels.all }),
});
const channels = data?.data ?? [];
const channels = data?? [];
if (isLoading) return <p className="text-muted-foreground">{tc('loading')}</p>;
if (error) return <p className="text-red-500">{tc('error')}: {(error as Error).message}</p>;
@ -320,7 +320,7 @@ function ContactsTab() {
onSuccess: () => queryClient.invalidateQueries({ queryKey: queryKeys.contacts.all }),
});
const contacts = data?.data ?? [];
const contacts = data?? [];
const handleOpenAdd = () => {
setEditingContact(null);
@ -533,7 +533,7 @@ function EscalationPoliciesTab() {
queryFn: () => apiClient<PaginatedResponse<Contact>>('/api/v1/comm/contacts'),
});
const contacts = contactsData?.data ?? [];
const contacts = contactsData?? [];
const createMutation = useMutation({
mutationFn: (body: Omit<EscalationPolicy, 'id'>) =>
@ -556,7 +556,7 @@ function EscalationPoliciesTab() {
onSuccess: () => queryClient.invalidateQueries({ queryKey: queryKeys.escalationPolicies.all }),
});
const policies = data?.data ?? [];
const policies = data?? [];
return (
<div>

View File

@ -293,7 +293,7 @@ export default function AlertRuleDetailPage() {
enabled: !!id,
});
const alertEvents = eventsData?.data ?? [];
const alertEvents = eventsData?? [];
// Mutations ------------------------------------------------------------
const updateMutation = useMutation({

View File

@ -462,7 +462,7 @@ export default function AlertRulesPage() {
queryFn: () => apiClient<AlertRulesResponse>('/api/v1/monitor/alerts/rules'),
});
const rules = data?.data ?? [];
const rules = data?? [];
// Mutations ------------------------------------------------------------
const createMutation = useMutation({

View File

@ -180,7 +180,7 @@ export default function HealthChecksPage() {
queryFn: () => apiClient<HealthChecksResponse>('/api/v1/monitor/health-checks'),
});
const allChecks = data?.data ?? [];
const allChecks = data?? [];
const filteredChecks = useMemo(() => {
if (statusFilter === 'all') return allChecks;

View File

@ -255,7 +255,7 @@ export default function MetricsPage() {
queryFn: () => apiClient<ServerMetricsResponse>('/api/v1/monitor/metrics/servers'),
});
const allServers = serversData?.data ?? [];
const allServers = serversData?? [];
// Auto-refresh ---------------------------------------------------------
useEffect(() => {

View File

@ -272,7 +272,7 @@ export default function RunbookDetailPage() {
enabled: !!id,
});
const executions = executionsData?.data ?? [];
const executions = executionsData?? [];
// Mutations --------------------------------------------------------------
const updateMutation = useMutation({

View File

@ -471,7 +471,7 @@ export default function CredentialsPage() {
apiClient<CredentialsResponse>('/api/v1/inventory/credentials'),
});
const credentials = data?.data ?? [];
const credentials = data?? [];
// Mutations ------------------------------------------------------------
const createMutation = useMutation({

View File

@ -415,14 +415,14 @@ export default function RiskRulesPage() {
queryFn: () => apiClient<RiskRulesResponse>('/api/v1/agent/risk-rules'),
});
const rules = rulesData?.data ?? [];
const rules = rulesData?? [];
// Queries - permissions matrix -----------------------------------------
const { isLoading: matrixLoading } = useQuery({
queryKey: queryKeys.permissions.matrix(),
queryFn: () => apiClient<PermissionMatrix>('/api/v1/agent/permissions'),
// eslint-disable-next-line @typescript-eslint/no-explicit-any
select: (data: any) => data?.data ?? data,
select: (data: any) => data,
placeholderData: DEFAULT_MATRIX,
});

View File

@ -349,7 +349,7 @@ export default function RolesPage() {
queryFn: () => apiClient<RolesResponse>('/api/v1/auth/roles'),
});
const roles = rolesData?.data ?? [];
const roles = rolesData?? [];
// Fetch all permissions (for checkbox lists)
const { data: allPermsData } = useQuery({
@ -357,7 +357,7 @@ export default function RolesPage() {
queryFn: () => apiClient<PermissionsListResponse>('/api/v1/auth/permissions'),
});
const allPermissions = allPermsData?.data ?? [];
const allPermissions = allPermsData?? [];
// Fetch permissions for expanded role
const { data: rolePermsData, isLoading: rolePermsLoading } = useQuery({
@ -369,7 +369,7 @@ export default function RolesPage() {
enabled: !!expandedRoleId,
});
const rolePermissions = rolePermsData?.data ?? [];
const rolePermissions = rolePermsData?? [];
// Mutations ------------------------------------------------------------
const createMutation = useMutation({

View File

@ -288,8 +288,8 @@ export default function ServerDetailPage() {
enabled: !!id,
});
const healthChecks = healthData?.data ?? [];
const recentCommands = commandsData?.data ?? [];
const healthChecks = healthData?? [];
const recentCommands = commandsData?? [];
// Mutations ------------------------------------------------------------
const updateMutation = useMutation({

View File

@ -378,7 +378,7 @@ export default function ClustersPage() {
queryFn: () => apiClient<ClustersResponse>('/api/v1/inventory/clusters'),
});
const clusters = data?.data ?? [];
const clusters = data?? [];
// Fetch servers for the dialog server selection
const { data: serversData, isLoading: serversLoading } = useQuery({
@ -387,7 +387,7 @@ export default function ClustersPage() {
enabled: dialogOpen,
});
const servers = serversData?.data ?? [];
const servers = serversData?? [];
// Mutations ------------------------------------------------------------
const createMutation = useMutation({

View File

@ -33,10 +33,7 @@ interface ServerFormData {
description: string;
}
interface ServersResponse {
data: Server[];
total: number;
}
type ServersResponse = Server[];
type EnvironmentFilter = 'all' | 'dev' | 'staging' | 'prod';
@ -324,7 +321,7 @@ export default function ServersPage() {
},
});
const servers = data?.data ?? [];
const servers = data ?? [];
// Mutations ------------------------------------------------------------
const createMutation = useMutation({

View File

@ -280,8 +280,8 @@ export default function SessionDetailPage() {
enabled: !!id,
});
const events = eventsData?.data ?? [];
const tasks = tasksData?.data ?? [];
const events = eventsData?? [];
const tasks = tasksData?? [];
// Auto-scroll to bottom when new events arrive
useEffect(() => {

View File

@ -475,7 +475,7 @@ export default function StandingOrderDetailPage() {
enabled: !!id,
});
const executions = executionsData?.data ?? [];
const executions = executionsData?? [];
const totalExecutions = executionsData?.total ?? 0;
const totalPages = Math.ceil(totalExecutions / PAGE_SIZE);

View File

@ -255,7 +255,7 @@ export default function TenantDetailPage() {
enabled: !!id,
});
const members = membersData?.data ?? [];
const members = membersData?? [];
const { data: invites = [] } = useQuery({
queryKey: queryKeys.tenants.invites(id),

View File

@ -136,7 +136,7 @@ export default function TerminalPage() {
queryFn: () => apiClient<ServersResponse>('/api/v1/inventory/servers'),
});
const servers = serversData?.data ?? [];
const servers = serversData?? [];
// ---- Auto-scroll ----
useEffect(() => {

View File

@ -361,7 +361,7 @@ export default function UserDetailPage() {
enabled: !!id,
});
const activityLog = activityData?.data ?? [];
const activityLog = activityData?? [];
// Mutations ------------------------------------------------------------
const updateMutation = useMutation({

View File

@ -487,7 +487,7 @@ export default function UsersPage() {
queryFn: () => apiClient<UsersResponse>('/api/v1/auth/users'),
});
const allUsers = usersData?.data ?? [];
const allUsers = usersData?? [];
// Filter ---------------------------------------------------------------
const filteredUsers = useMemo(() => {