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:
parent
d21f41d7c3
commit
10e0b0ce29
|
|
@ -338,7 +338,7 @@ export default function HooksPage() {
|
||||||
queryFn: () => apiClient<HooksResponse>('/api/v1/agent/hooks'),
|
queryFn: () => apiClient<HooksResponse>('/api/v1/agent/hooks'),
|
||||||
});
|
});
|
||||||
|
|
||||||
const hooks = data?.data ?? [];
|
const hooks = data?? [];
|
||||||
|
|
||||||
// Mutations ------------------------------------------------------------
|
// Mutations ------------------------------------------------------------
|
||||||
const createMutation = useMutation({
|
const createMutation = useMutation({
|
||||||
|
|
|
||||||
|
|
@ -323,7 +323,7 @@ export default function SkillsPage() {
|
||||||
queryFn: () => apiClient<SkillsResponse>('/api/v1/agent/skills'),
|
queryFn: () => apiClient<SkillsResponse>('/api/v1/agent/skills'),
|
||||||
});
|
});
|
||||||
|
|
||||||
const skills = data?.data ?? [];
|
const skills = data?? [];
|
||||||
|
|
||||||
// Mutations ------------------------------------------------------------
|
// Mutations ------------------------------------------------------------
|
||||||
const createMutation = useMutation({
|
const createMutation = useMutation({
|
||||||
|
|
|
||||||
|
|
@ -83,7 +83,7 @@ export default function AuditLogsPage() {
|
||||||
queryFn: () => apiClient<AuditLogsResponse>(`/api/v1/audit/logs?${queryString}`),
|
queryFn: () => apiClient<AuditLogsResponse>(`/api/v1/audit/logs?${queryString}`),
|
||||||
});
|
});
|
||||||
|
|
||||||
const logs = data?.data ?? [];
|
const logs = data?? [];
|
||||||
const total = data?.total ?? 0;
|
const total = data?.total ?? 0;
|
||||||
const totalPages = Math.max(1, Math.ceil(total / pageSize));
|
const totalPages = Math.max(1, Math.ceil(total / pageSize));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -192,7 +192,7 @@ export default function SessionReplayPage() {
|
||||||
),
|
),
|
||||||
});
|
});
|
||||||
|
|
||||||
const sessions = sessionsData?.data ?? [];
|
const sessions = sessionsData?? [];
|
||||||
const total = sessionsData?.total ?? 0;
|
const total = sessionsData?.total ?? 0;
|
||||||
|
|
||||||
// Fetch session events when a session is selected
|
// Fetch session events when a session is selected
|
||||||
|
|
@ -209,7 +209,7 @@ export default function SessionReplayPage() {
|
||||||
enabled: !!selectedSessionId,
|
enabled: !!selectedSessionId,
|
||||||
});
|
});
|
||||||
|
|
||||||
const events = eventsData?.data ?? [];
|
const events = eventsData?? [];
|
||||||
const selectedSession = sessions.find((s) => s.id === selectedSessionId) ?? null;
|
const selectedSession = sessions.find((s) => s.id === selectedSessionId) ?? null;
|
||||||
|
|
||||||
// Reset playback when selecting a new session
|
// Reset playback when selecting a new session
|
||||||
|
|
|
||||||
|
|
@ -178,7 +178,7 @@ function ChannelsTab() {
|
||||||
onSuccess: () => queryClient.invalidateQueries({ queryKey: queryKeys.channels.all }),
|
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 (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>;
|
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 }),
|
onSuccess: () => queryClient.invalidateQueries({ queryKey: queryKeys.contacts.all }),
|
||||||
});
|
});
|
||||||
|
|
||||||
const contacts = data?.data ?? [];
|
const contacts = data?? [];
|
||||||
|
|
||||||
const handleOpenAdd = () => {
|
const handleOpenAdd = () => {
|
||||||
setEditingContact(null);
|
setEditingContact(null);
|
||||||
|
|
@ -533,7 +533,7 @@ function EscalationPoliciesTab() {
|
||||||
queryFn: () => apiClient<PaginatedResponse<Contact>>('/api/v1/comm/contacts'),
|
queryFn: () => apiClient<PaginatedResponse<Contact>>('/api/v1/comm/contacts'),
|
||||||
});
|
});
|
||||||
|
|
||||||
const contacts = contactsData?.data ?? [];
|
const contacts = contactsData?? [];
|
||||||
|
|
||||||
const createMutation = useMutation({
|
const createMutation = useMutation({
|
||||||
mutationFn: (body: Omit<EscalationPolicy, 'id'>) =>
|
mutationFn: (body: Omit<EscalationPolicy, 'id'>) =>
|
||||||
|
|
@ -556,7 +556,7 @@ function EscalationPoliciesTab() {
|
||||||
onSuccess: () => queryClient.invalidateQueries({ queryKey: queryKeys.escalationPolicies.all }),
|
onSuccess: () => queryClient.invalidateQueries({ queryKey: queryKeys.escalationPolicies.all }),
|
||||||
});
|
});
|
||||||
|
|
||||||
const policies = data?.data ?? [];
|
const policies = data?? [];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
|
|
|
||||||
|
|
@ -293,7 +293,7 @@ export default function AlertRuleDetailPage() {
|
||||||
enabled: !!id,
|
enabled: !!id,
|
||||||
});
|
});
|
||||||
|
|
||||||
const alertEvents = eventsData?.data ?? [];
|
const alertEvents = eventsData?? [];
|
||||||
|
|
||||||
// Mutations ------------------------------------------------------------
|
// Mutations ------------------------------------------------------------
|
||||||
const updateMutation = useMutation({
|
const updateMutation = useMutation({
|
||||||
|
|
|
||||||
|
|
@ -462,7 +462,7 @@ export default function AlertRulesPage() {
|
||||||
queryFn: () => apiClient<AlertRulesResponse>('/api/v1/monitor/alerts/rules'),
|
queryFn: () => apiClient<AlertRulesResponse>('/api/v1/monitor/alerts/rules'),
|
||||||
});
|
});
|
||||||
|
|
||||||
const rules = data?.data ?? [];
|
const rules = data?? [];
|
||||||
|
|
||||||
// Mutations ------------------------------------------------------------
|
// Mutations ------------------------------------------------------------
|
||||||
const createMutation = useMutation({
|
const createMutation = useMutation({
|
||||||
|
|
|
||||||
|
|
@ -180,7 +180,7 @@ export default function HealthChecksPage() {
|
||||||
queryFn: () => apiClient<HealthChecksResponse>('/api/v1/monitor/health-checks'),
|
queryFn: () => apiClient<HealthChecksResponse>('/api/v1/monitor/health-checks'),
|
||||||
});
|
});
|
||||||
|
|
||||||
const allChecks = data?.data ?? [];
|
const allChecks = data?? [];
|
||||||
|
|
||||||
const filteredChecks = useMemo(() => {
|
const filteredChecks = useMemo(() => {
|
||||||
if (statusFilter === 'all') return allChecks;
|
if (statusFilter === 'all') return allChecks;
|
||||||
|
|
|
||||||
|
|
@ -255,7 +255,7 @@ export default function MetricsPage() {
|
||||||
queryFn: () => apiClient<ServerMetricsResponse>('/api/v1/monitor/metrics/servers'),
|
queryFn: () => apiClient<ServerMetricsResponse>('/api/v1/monitor/metrics/servers'),
|
||||||
});
|
});
|
||||||
|
|
||||||
const allServers = serversData?.data ?? [];
|
const allServers = serversData?? [];
|
||||||
|
|
||||||
// Auto-refresh ---------------------------------------------------------
|
// Auto-refresh ---------------------------------------------------------
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|
|
||||||
|
|
@ -272,7 +272,7 @@ export default function RunbookDetailPage() {
|
||||||
enabled: !!id,
|
enabled: !!id,
|
||||||
});
|
});
|
||||||
|
|
||||||
const executions = executionsData?.data ?? [];
|
const executions = executionsData?? [];
|
||||||
|
|
||||||
// Mutations --------------------------------------------------------------
|
// Mutations --------------------------------------------------------------
|
||||||
const updateMutation = useMutation({
|
const updateMutation = useMutation({
|
||||||
|
|
|
||||||
|
|
@ -471,7 +471,7 @@ export default function CredentialsPage() {
|
||||||
apiClient<CredentialsResponse>('/api/v1/inventory/credentials'),
|
apiClient<CredentialsResponse>('/api/v1/inventory/credentials'),
|
||||||
});
|
});
|
||||||
|
|
||||||
const credentials = data?.data ?? [];
|
const credentials = data?? [];
|
||||||
|
|
||||||
// Mutations ------------------------------------------------------------
|
// Mutations ------------------------------------------------------------
|
||||||
const createMutation = useMutation({
|
const createMutation = useMutation({
|
||||||
|
|
|
||||||
|
|
@ -415,14 +415,14 @@ export default function RiskRulesPage() {
|
||||||
queryFn: () => apiClient<RiskRulesResponse>('/api/v1/agent/risk-rules'),
|
queryFn: () => apiClient<RiskRulesResponse>('/api/v1/agent/risk-rules'),
|
||||||
});
|
});
|
||||||
|
|
||||||
const rules = rulesData?.data ?? [];
|
const rules = rulesData?? [];
|
||||||
|
|
||||||
// Queries - permissions matrix -----------------------------------------
|
// Queries - permissions matrix -----------------------------------------
|
||||||
const { isLoading: matrixLoading } = useQuery({
|
const { isLoading: matrixLoading } = useQuery({
|
||||||
queryKey: queryKeys.permissions.matrix(),
|
queryKey: queryKeys.permissions.matrix(),
|
||||||
queryFn: () => apiClient<PermissionMatrix>('/api/v1/agent/permissions'),
|
queryFn: () => apiClient<PermissionMatrix>('/api/v1/agent/permissions'),
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
select: (data: any) => data?.data ?? data,
|
select: (data: any) => data,
|
||||||
placeholderData: DEFAULT_MATRIX,
|
placeholderData: DEFAULT_MATRIX,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -349,7 +349,7 @@ export default function RolesPage() {
|
||||||
queryFn: () => apiClient<RolesResponse>('/api/v1/auth/roles'),
|
queryFn: () => apiClient<RolesResponse>('/api/v1/auth/roles'),
|
||||||
});
|
});
|
||||||
|
|
||||||
const roles = rolesData?.data ?? [];
|
const roles = rolesData?? [];
|
||||||
|
|
||||||
// Fetch all permissions (for checkbox lists)
|
// Fetch all permissions (for checkbox lists)
|
||||||
const { data: allPermsData } = useQuery({
|
const { data: allPermsData } = useQuery({
|
||||||
|
|
@ -357,7 +357,7 @@ export default function RolesPage() {
|
||||||
queryFn: () => apiClient<PermissionsListResponse>('/api/v1/auth/permissions'),
|
queryFn: () => apiClient<PermissionsListResponse>('/api/v1/auth/permissions'),
|
||||||
});
|
});
|
||||||
|
|
||||||
const allPermissions = allPermsData?.data ?? [];
|
const allPermissions = allPermsData?? [];
|
||||||
|
|
||||||
// Fetch permissions for expanded role
|
// Fetch permissions for expanded role
|
||||||
const { data: rolePermsData, isLoading: rolePermsLoading } = useQuery({
|
const { data: rolePermsData, isLoading: rolePermsLoading } = useQuery({
|
||||||
|
|
@ -369,7 +369,7 @@ export default function RolesPage() {
|
||||||
enabled: !!expandedRoleId,
|
enabled: !!expandedRoleId,
|
||||||
});
|
});
|
||||||
|
|
||||||
const rolePermissions = rolePermsData?.data ?? [];
|
const rolePermissions = rolePermsData?? [];
|
||||||
|
|
||||||
// Mutations ------------------------------------------------------------
|
// Mutations ------------------------------------------------------------
|
||||||
const createMutation = useMutation({
|
const createMutation = useMutation({
|
||||||
|
|
|
||||||
|
|
@ -288,8 +288,8 @@ export default function ServerDetailPage() {
|
||||||
enabled: !!id,
|
enabled: !!id,
|
||||||
});
|
});
|
||||||
|
|
||||||
const healthChecks = healthData?.data ?? [];
|
const healthChecks = healthData?? [];
|
||||||
const recentCommands = commandsData?.data ?? [];
|
const recentCommands = commandsData?? [];
|
||||||
|
|
||||||
// Mutations ------------------------------------------------------------
|
// Mutations ------------------------------------------------------------
|
||||||
const updateMutation = useMutation({
|
const updateMutation = useMutation({
|
||||||
|
|
|
||||||
|
|
@ -378,7 +378,7 @@ export default function ClustersPage() {
|
||||||
queryFn: () => apiClient<ClustersResponse>('/api/v1/inventory/clusters'),
|
queryFn: () => apiClient<ClustersResponse>('/api/v1/inventory/clusters'),
|
||||||
});
|
});
|
||||||
|
|
||||||
const clusters = data?.data ?? [];
|
const clusters = data?? [];
|
||||||
|
|
||||||
// Fetch servers for the dialog server selection
|
// Fetch servers for the dialog server selection
|
||||||
const { data: serversData, isLoading: serversLoading } = useQuery({
|
const { data: serversData, isLoading: serversLoading } = useQuery({
|
||||||
|
|
@ -387,7 +387,7 @@ export default function ClustersPage() {
|
||||||
enabled: dialogOpen,
|
enabled: dialogOpen,
|
||||||
});
|
});
|
||||||
|
|
||||||
const servers = serversData?.data ?? [];
|
const servers = serversData?? [];
|
||||||
|
|
||||||
// Mutations ------------------------------------------------------------
|
// Mutations ------------------------------------------------------------
|
||||||
const createMutation = useMutation({
|
const createMutation = useMutation({
|
||||||
|
|
|
||||||
|
|
@ -33,10 +33,7 @@ interface ServerFormData {
|
||||||
description: string;
|
description: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface ServersResponse {
|
type ServersResponse = Server[];
|
||||||
data: Server[];
|
|
||||||
total: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
type EnvironmentFilter = 'all' | 'dev' | 'staging' | 'prod';
|
type EnvironmentFilter = 'all' | 'dev' | 'staging' | 'prod';
|
||||||
|
|
||||||
|
|
@ -324,7 +321,7 @@ export default function ServersPage() {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const servers = data?.data ?? [];
|
const servers = data ?? [];
|
||||||
|
|
||||||
// Mutations ------------------------------------------------------------
|
// Mutations ------------------------------------------------------------
|
||||||
const createMutation = useMutation({
|
const createMutation = useMutation({
|
||||||
|
|
|
||||||
|
|
@ -280,8 +280,8 @@ export default function SessionDetailPage() {
|
||||||
enabled: !!id,
|
enabled: !!id,
|
||||||
});
|
});
|
||||||
|
|
||||||
const events = eventsData?.data ?? [];
|
const events = eventsData?? [];
|
||||||
const tasks = tasksData?.data ?? [];
|
const tasks = tasksData?? [];
|
||||||
|
|
||||||
// Auto-scroll to bottom when new events arrive
|
// Auto-scroll to bottom when new events arrive
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|
|
||||||
|
|
@ -475,7 +475,7 @@ export default function StandingOrderDetailPage() {
|
||||||
enabled: !!id,
|
enabled: !!id,
|
||||||
});
|
});
|
||||||
|
|
||||||
const executions = executionsData?.data ?? [];
|
const executions = executionsData?? [];
|
||||||
const totalExecutions = executionsData?.total ?? 0;
|
const totalExecutions = executionsData?.total ?? 0;
|
||||||
const totalPages = Math.ceil(totalExecutions / PAGE_SIZE);
|
const totalPages = Math.ceil(totalExecutions / PAGE_SIZE);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -255,7 +255,7 @@ export default function TenantDetailPage() {
|
||||||
enabled: !!id,
|
enabled: !!id,
|
||||||
});
|
});
|
||||||
|
|
||||||
const members = membersData?.data ?? [];
|
const members = membersData?? [];
|
||||||
|
|
||||||
const { data: invites = [] } = useQuery({
|
const { data: invites = [] } = useQuery({
|
||||||
queryKey: queryKeys.tenants.invites(id),
|
queryKey: queryKeys.tenants.invites(id),
|
||||||
|
|
|
||||||
|
|
@ -136,7 +136,7 @@ export default function TerminalPage() {
|
||||||
queryFn: () => apiClient<ServersResponse>('/api/v1/inventory/servers'),
|
queryFn: () => apiClient<ServersResponse>('/api/v1/inventory/servers'),
|
||||||
});
|
});
|
||||||
|
|
||||||
const servers = serversData?.data ?? [];
|
const servers = serversData?? [];
|
||||||
|
|
||||||
// ---- Auto-scroll ----
|
// ---- Auto-scroll ----
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|
|
||||||
|
|
@ -361,7 +361,7 @@ export default function UserDetailPage() {
|
||||||
enabled: !!id,
|
enabled: !!id,
|
||||||
});
|
});
|
||||||
|
|
||||||
const activityLog = activityData?.data ?? [];
|
const activityLog = activityData?? [];
|
||||||
|
|
||||||
// Mutations ------------------------------------------------------------
|
// Mutations ------------------------------------------------------------
|
||||||
const updateMutation = useMutation({
|
const updateMutation = useMutation({
|
||||||
|
|
|
||||||
|
|
@ -487,7 +487,7 @@ export default function UsersPage() {
|
||||||
queryFn: () => apiClient<UsersResponse>('/api/v1/auth/users'),
|
queryFn: () => apiClient<UsersResponse>('/api/v1/auth/users'),
|
||||||
});
|
});
|
||||||
|
|
||||||
const allUsers = usersData?.data ?? [];
|
const allUsers = usersData?? [];
|
||||||
|
|
||||||
// Filter ---------------------------------------------------------------
|
// Filter ---------------------------------------------------------------
|
||||||
const filteredUsers = useMemo(() => {
|
const filteredUsers = useMemo(() => {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue