Files
Charon/frontend/src/hooks/useNotifications.ts
GitHub Actions 8294d6ee49 Add QA test outputs, build scripts, and Dockerfile validation
- Created `qa-test-output-after-fix.txt` and `qa-test-output.txt` to log results of certificate page authentication tests.
- Added `build.sh` for deterministic backend builds in CI, utilizing `go list` for efficiency.
- Introduced `codeql_scan.sh` for CodeQL database creation and analysis for Go and JavaScript/TypeScript.
- Implemented `dockerfile_check.sh` to validate Dockerfiles for base image and package manager mismatches.
- Added `sourcery_precommit_wrapper.sh` to facilitate Sourcery CLI usage in pre-commit hooks.
2025-12-11 18:26:24 +00:00

53 lines
1.8 KiB
TypeScript

import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import {
getSecurityNotificationSettings,
updateSecurityNotificationSettings,
SecurityNotificationSettings,
} from '../api/notifications';
import { toast } from '../utils/toast';
export function useSecurityNotificationSettings() {
return useQuery({
queryKey: ['security-notification-settings'],
queryFn: getSecurityNotificationSettings,
});
}
export function useUpdateSecurityNotificationSettings() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (settings: Partial<SecurityNotificationSettings>) =>
updateSecurityNotificationSettings(settings),
onMutate: async (newSettings) => {
// Cancel any outgoing refetches
await queryClient.cancelQueries({ queryKey: ['security-notification-settings'] });
// Snapshot the previous value
const previousSettings = queryClient.getQueryData(['security-notification-settings']);
// Optimistically update to the new value
queryClient.setQueryData(['security-notification-settings'], (old: unknown) => {
if (old && typeof old === 'object') {
return { ...old, ...newSettings };
}
return old;
});
return { previousSettings };
},
onError: (err, _newSettings, context) => {
// Rollback on error
if (context?.previousSettings) {
queryClient.setQueryData(['security-notification-settings'], context.previousSettings);
}
const message = err instanceof Error ? err.message : 'Failed to update notification settings';
toast.error(message);
},
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['security-notification-settings'] });
toast.success('Notification settings updated');
},
});
}