From 5ab9b27d854b72a70b28a82d49a24117fa795e50 Mon Sep 17 00:00:00 2001 From: TZGyn Date: Tue, 19 Mar 2024 09:02:19 +0800 Subject: [PATCH] added search to links page --- .../src/routes/(app)/links/+page.server.ts | 16 +- frontend/src/routes/(app)/links/+page.svelte | 148 +++++++++++------- 2 files changed, 100 insertions(+), 64 deletions(-) diff --git a/frontend/src/routes/(app)/links/+page.server.ts b/frontend/src/routes/(app)/links/+page.server.ts index f78cf90..7444468 100644 --- a/frontend/src/routes/(app)/links/+page.server.ts +++ b/frontend/src/routes/(app)/links/+page.server.ts @@ -1,5 +1,5 @@ import { db } from '$lib/db' -import { and, count, eq } from 'drizzle-orm' +import { and, count, eq, ilike } from 'drizzle-orm' import { shortener } from '$lib/db/schema' import type { PageServerLoad } from './$types' @@ -7,6 +7,7 @@ export const load = (async (event) => { const user = event.locals.userObject const project_uuid = event.url.searchParams.get('project') + const search = event.url.searchParams.get('search') let page = parseInt(event.url.searchParams.get('page') ?? '1') let perPage = parseInt( event.url.searchParams.get('perPage') ?? '10', @@ -47,22 +48,28 @@ export const load = (async (event) => { project: true, }, orderBy: (shortener, { desc }) => [desc(shortener.createdAt)], - where: (shortener, { eq, and, isNull }) => + where: (shortener, { eq, and, ilike }) => and( eq(shortener.userId, user.id), project_id ? eq(shortener.projectId, project_id) : undefined, + search + ? ilike(shortener.link, `%${decodeURI(search)}%`) + : undefined, ), offset: perPage * (page - 1), limit: perPage, }) - const pagination = await db + const pagination = db .select({ count: count() }) .from(shortener) .where( and( eq(shortener.userId, user.id), project_id ? eq(shortener.projectId, project_id) : undefined, + search + ? ilike(shortener.link, `%${decodeURI(search)}%`) + : undefined, ), ) @@ -81,6 +88,7 @@ export const load = (async (event) => { settings, page, perPage, - pagination: pagination[0], + search, + pagination, } }) satisfies PageServerLoad diff --git a/frontend/src/routes/(app)/links/+page.svelte b/frontend/src/routes/(app)/links/+page.svelte index 7c4d04f..1b7a461 100644 --- a/frontend/src/routes/(app)/links/+page.svelte +++ b/frontend/src/routes/(app)/links/+page.svelte @@ -1,5 +1,9 @@ @@ -152,6 +162,20 @@ + { + if (key !== 'Enter') return + clearTimeout(searchUpdateTimeout) + searchUpdateTimeout = setTimeout(() => { + search = target.value + }, 500) + }} /> + @@ -258,55 +282,6 @@ {/each} -
- - - - - - - Page Size - {#each [10, 20, 50, 100] as pageSize} - {pageSize} - {/each} - - - - - - - - - - {#each pages as page (page.key)} - {#if page.type === 'ellipsis'} - - - - {:else} - - - {page.value} - - - {/if} - {/each} - - - - - -
{:else}
@@ -323,6 +298,59 @@ {/if} {/await} +{#await data.pagination} + +{:then pagination} +
+ + + + + + + Page Size + {#each [10, 20, 50, 100] as pageSize} + {pageSize} + {/each} + + + + + + + + + + {#each pages as page (page.key)} + {#if page.type === 'ellipsis'} + + + + {:else} + + + {page.value} + + + {/if} + {/each} + + + + + +
+{/await} +