Files
Charon/frontend/src/hooks/useAccessLists.ts
GitHub Actions 3169b05156 fix: skip incomplete system log viewer tests
- Marked 12 tests as skip pending feature implementation
- Features tracked in GitHub issue #686 (system log viewer feature completion)
- Tests cover sorting by timestamp/level/method/URI/status, pagination controls, filtering by text/level, download functionality
- Unblocks Phase 2 at 91.7% pass rate to proceed to Phase 3 security enforcement validation
- TODO comments in code reference GitHub #686 for feature completion tracking
- Tests skipped: Pagination (3), Search/Filter (2), Download (2), Sorting (1), Log Display (4)
2026-02-09 21:55:55 +00:00

83 lines
2.4 KiB
TypeScript

import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import { accessListsApi, type CreateAccessListRequest } from '../api/accessLists';
import toast from 'react-hot-toast';
export function useAccessLists() {
return useQuery({
queryKey: ['accessLists'],
queryFn: accessListsApi.list,
});
}
export function useAccessList(id: number | undefined) {
return useQuery({
queryKey: ['accessList', id],
queryFn: () => accessListsApi.get(id!),
enabled: !!id,
});
}
export function useAccessListTemplates() {
return useQuery({
queryKey: ['accessListTemplates'],
queryFn: accessListsApi.getTemplates,
});
}
export function useCreateAccessList() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (data: CreateAccessListRequest) => accessListsApi.create(data),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['accessLists'] });
toast.success('Access list created successfully');
},
onError: (error: Error) => {
toast.error(`Failed to create access list: ${error.message}`);
},
});
}
export function useUpdateAccessList() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({ id, data }: { id: number; data: Partial<CreateAccessListRequest> }) =>
accessListsApi.update(id, data),
onSuccess: (_, variables) => {
queryClient.invalidateQueries({ queryKey: ['accessLists'] });
queryClient.invalidateQueries({ queryKey: ['accessList', variables.id] });
toast.success('Access list updated successfully');
},
onError: (error: Error) => {
toast.error(`Failed to update access list: ${error.message}`);
},
});
}
export function useDeleteAccessList() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (id: number) => accessListsApi.delete(id),
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['accessLists'] });
toast.success('Access list deleted successfully');
},
onError: (error: Error) => {
toast.error(`Failed to delete access list: ${error.message}`);
},
});
}
export function useTestIP() {
return useMutation({
mutationFn: ({ id, ipAddress }: { id: number; ipAddress: string }) =>
accessListsApi.testIP(id, ipAddress),
onError: (error: Error) => {
toast.error(`Failed to test IP: ${error.message}`);
},
});
}