From 9764c80771f9d9da99f5553a5845e470cf92bf56 Mon Sep 17 00:00:00 2001 From: Justin Edmund Date: Wed, 17 Sep 2025 10:41:56 -0700 Subject: [PATCH] fix: add X-Per-Page header for database pagination --- src/lib/providers/DatabaseProvider.ts | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/src/lib/providers/DatabaseProvider.ts b/src/lib/providers/DatabaseProvider.ts index 09744ea7..597ec703 100644 --- a/src/lib/providers/DatabaseProvider.ts +++ b/src/lib/providers/DatabaseProvider.ts @@ -23,6 +23,7 @@ export class DatabaseProvider extends RestDataProvider { private apiUrl: string private totalCount: number = 0 private totalPages: number = 1 + private searchQuery: string = '' constructor(options: DatabaseProviderOptions) { const apiUrl = `${API_BASE}/search/${options.resource}` @@ -47,17 +48,20 @@ export class DatabaseProvider extends RestDataProvider { const perPage = params?.per_page || this.pageSize try { - const url = new URL(this.apiUrl) - url.searchParams.set('page', page.toString()) - - const response = await fetch(url.toString(), { + const response = await fetch(this.apiUrl, { method: 'POST', credentials: 'include', headers: { 'Content-Type': 'application/json', 'X-Per-Page': perPage.toString() }, - body: JSON.stringify({}) + body: JSON.stringify({ + search: { + page: page, + per_page: perPage, + ...(this.searchQuery && this.searchQuery.length >= 2 && { query: this.searchQuery }) + } + }) }) if (!response.ok) { @@ -109,4 +113,17 @@ export class DatabaseProvider extends RestDataProvider { this.pageSize = size return this.getData({ page: 1, per_page: size }) } + + // Set search query + setSearchQuery(query: string) { + this.searchQuery = query + // Reset to first page when search changes + this.currentPage = 1 + } + + // Clear search + clearSearch() { + this.searchQuery = '' + this.currentPage = 1 + } } \ No newline at end of file