chore: biome & ruff checks

This commit is contained in:
MSI\ModSetter 2025-10-01 18:50:36 -07:00
parent 35a7427b00
commit 898fc884a9
5 changed files with 30 additions and 38 deletions

View file

@ -1,7 +1,7 @@
from datetime import datetime
from typing import TypeVar
from pydantic import BaseModel, ConfigDict
from typing import Generic, TypeVar
from app.db import DocumentType
@ -58,6 +58,6 @@ class DocumentWithChunksRead(DocumentRead):
model_config = ConfigDict(from_attributes=True)
class PaginatedResponse(BaseModel, Generic[T]):
class PaginatedResponse[T](BaseModel):
items: list[T]
total: int

View file

@ -173,7 +173,6 @@ export default function DocumentsTable() {
/>
export { DocumentsTable };
<PaginationControls
pageIndex={pageIndex}
pageSize={pageSize}

View file

@ -40,13 +40,10 @@ const DocumentSelector = React.memo(
const { search_space_id } = useParams();
const [isOpen, setIsOpen] = useState(false);
const { documents, loading, isLoaded, fetchDocuments } = useDocuments(
Number(search_space_id),
{
lazy: true,
pageSize: -1, // Fetch all documents with large page size
}
);
const { documents, loading, isLoaded, fetchDocuments } = useDocuments(Number(search_space_id), {
lazy: true,
pageSize: -1, // Fetch all documents with large page size
});
const handleOpenChange = useCallback(
(open: boolean) => {

View file

@ -37,10 +37,7 @@ export interface UseDocumentsOptions {
lazy?: boolean;
}
export function useDocuments(
searchSpaceId: number,
options?: UseDocumentsOptions | boolean
) {
export function useDocuments(searchSpaceId: number, options?: UseDocumentsOptions | boolean) {
// Support both old boolean API and new options API for backward compatibility
const opts = typeof options === "boolean" ? { lazy: options } : options || {};
const { page, pageSize = 300, lazy = false } = opts;

View file

@ -1,34 +1,33 @@
// Helper to normalize list responses from the API
// Supports shapes: Array<T>, { items: T[]; total: number }, and tuple [T[], total]
export type ListResponse<T> = {
items: T[];
total: number;
items: T[];
total: number;
};
export function normalizeListResponse<T>(payload: any): ListResponse<T> {
try {
// Case 1: already in desired shape
if (payload && Array.isArray(payload.items)) {
const total = typeof payload.total === "number" ? payload.total : payload.items.length;
return { items: payload.items as T[], total };
}
try {
// Case 1: already in desired shape
if (payload && Array.isArray(payload.items)) {
const total = typeof payload.total === "number" ? payload.total : payload.items.length;
return { items: payload.items as T[], total };
}
// Case 2: tuple [items, total]
if (Array.isArray(payload) && payload.length === 2 && Array.isArray(payload[0])) {
const items = (payload[0] ?? []) as T[];
const rawTotal = payload[1];
const total = typeof rawTotal === "number" ? rawTotal : items.length;
return { items, total };
}
// Case 2: tuple [items, total]
if (Array.isArray(payload) && payload.length === 2 && Array.isArray(payload[0])) {
const items = (payload[0] ?? []) as T[];
const rawTotal = payload[1];
const total = typeof rawTotal === "number" ? rawTotal : items.length;
return { items, total };
}
// Case 3: plain array
if (Array.isArray(payload)) {
return { items: payload as T[], total: (payload as T[]).length };
}
} catch (e) {
// fallthrough to default
}
// Case 3: plain array
if (Array.isArray(payload)) {
return { items: payload as T[], total: (payload as T[]).length };
}
} catch (e) {
// fallthrough to default
}
return { items: [], total: 0 };
return { items: [], total: 0 };
}