fix: 6 integration audit fixes — ticket filter, admin nav, FK scope, debounce, error messages

- Fix AISession.ticket_id → psa_ticket_id in list_sessions filter query
- Add Gallery nav item (LayoutGrid icon) to AdminSidebar navItems array
- Remove ForeignKey from FileUpload.session_id (Python model) + migration b8d2f4a6c091 to drop DB constraint, allowing column to reference either session type
- Add 400ms debounce on AI session search input in SessionHistoryPage (aiSearchInput state + useRef timeout pattern)
- Show friendly 503 error message in RichTextInput upload error handler (both initial upload and retry paths)
- Add overflow-x-auto to FlowPilotAnalyticsPage tab bar container

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-20 04:06:41 +00:00
parent cb54045593
commit 2ed8a2af15
7 changed files with 70 additions and 11 deletions

View File

@@ -10,6 +10,7 @@ import {
FolderTree,
ClipboardList,
MessageSquareText,
LayoutGrid,
ArrowLeft,
} from 'lucide-react'
import { cn } from '@/lib/utils'
@@ -25,6 +26,7 @@ const navItems = [
{ path: '/admin/categories', label: 'Categories', icon: FolderTree },
{ path: '/admin/survey-invites', label: 'Survey Invites', icon: ClipboardList },
{ path: '/admin/survey-responses', label: 'Survey Responses', icon: MessageSquareText },
{ path: '/admin/gallery', label: 'Gallery', icon: LayoutGrid },
]
interface AdminSidebarProps {

View File

@@ -73,10 +73,13 @@ export function RichTextInput({
})
})
.catch((err) => {
const errorMsg = err?.response?.status === 503
? 'File uploads not available — contact your administrator'
: err?.message || 'Upload failed'
setPendingUploads((prev) =>
prev.map((u) =>
u.id === upload.id
? { ...u, status: 'error' as const, error: err?.message || 'Upload failed' }
? { ...u, status: 'error' as const, error: errorMsg }
: u
)
)
@@ -196,10 +199,13 @@ export function RichTextInput({
})
})
.catch((err) => {
const errorMsg = err?.response?.status === 503
? 'File uploads not available — contact your administrator'
: err?.message || 'Upload failed'
setPendingUploads((prev) =>
prev.map((u) =>
u.id === uploadId
? { ...u, status: 'error' as const, error: err?.message || 'Upload failed' }
? { ...u, status: 'error' as const, error: errorMsg }
: u
)
)