feat: Implement API and cache improvements

This commit is contained in:
gpt-engineer-app[bot]
2025-10-31 12:11:14 +00:00
parent 2fb983bb4f
commit 0d16bb511c
11 changed files with 584 additions and 9 deletions

View File

@@ -80,6 +80,7 @@ import { logger } from '@/lib/logger';
import { contactCategories } from '@/lib/contactValidation';
import { invokeWithTracking } from '@/lib/edgeFunctionTracking';
import { AdminLayout } from '@/components/layout/AdminLayout';
import { queryKeys } from '@/lib/queryKeys';
interface ContactSubmission {
id: string;
@@ -159,7 +160,7 @@ export default function AdminContact() {
// Fetch contact submissions
const { data: submissions, isLoading } = useQuery({
queryKey: ['admin-contact-submissions', statusFilter, categoryFilter, searchQuery, showArchived],
queryKey: queryKeys.admin.contactSubmissions(statusFilter, categoryFilter, searchQuery, showArchived),
queryFn: async () => {
let query = supabase
.from('contact_submissions')
@@ -282,7 +283,10 @@ export default function AdminContact() {
.order('created_at', { ascending: true })
.then(({ data }) => setEmailThreads((data as EmailThread[]) || []));
}
queryClient.invalidateQueries({ queryKey: ['admin-contact-submissions'] });
queryClient.invalidateQueries({
queryKey: ['admin-contact-submissions'],
exact: false
});
},
onError: (error: Error) => {
handleError(error, { action: 'Send Email Reply' });
@@ -320,7 +324,10 @@ export default function AdminContact() {
if (error) throw error;
},
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['admin-contact-submissions'] });
queryClient.invalidateQueries({
queryKey: ['admin-contact-submissions'],
exact: false
});
handleSuccess('Status Updated', 'Contact submission status has been updated');
setSelectedSubmission(null);
setAdminNotes('');
@@ -345,7 +352,10 @@ export default function AdminContact() {
if (error) throw error;
},
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['admin-contact-submissions'] });
queryClient.invalidateQueries({
queryKey: ['admin-contact-submissions'],
exact: false
});
handleSuccess('Archived', 'Contact submission has been archived');
setSelectedSubmission(null);
},
@@ -368,7 +378,10 @@ export default function AdminContact() {
if (error) throw error;
},
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['admin-contact-submissions'] });
queryClient.invalidateQueries({
queryKey: ['admin-contact-submissions'],
exact: false
});
handleSuccess('Restored', 'Contact submission has been restored from archive');
setSelectedSubmission(null);
},
@@ -388,7 +401,10 @@ export default function AdminContact() {
if (error) throw error;
},
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ['admin-contact-submissions'] });
queryClient.invalidateQueries({
queryKey: ['admin-contact-submissions'],
exact: false
});
handleSuccess('Deleted', 'Contact submission has been permanently deleted');
setSelectedSubmission(null);
},
@@ -428,7 +444,10 @@ export default function AdminContact() {
};
const handleRefreshSubmissions = () => {
queryClient.invalidateQueries({ queryKey: ['admin-contact-submissions'] });
queryClient.invalidateQueries({
queryKey: ['admin-contact-submissions'],
exact: false
});
};
const handleCopyTicket = (ticketNumber: string) => {