Skip to content

Commit

Permalink
fix: document search
Browse files Browse the repository at this point in the history
  • Loading branch information
634750802 committed Jun 11, 2024
1 parent 3443367 commit 0ef5b87
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@ export function DataTableToolbar({ table }: DataTableToolbarProps) {
<div className="flex flex-1 items-center space-x-2">
<Input
placeholder="Filter documents..."
value={(table.getColumn("name")?.getFilterValue() as string) ?? ""}
value={(table.getState().globalFilter as string) ?? ""}
onChange={(event: { target: { value: any } }) =>
table.getColumn("name")?.setFilterValue(event.target.value)
table.setGlobalFilter(event.target.value)
}
className="h-8 w-[150px] lg:w-[250px]"
/>
Expand Down
15 changes: 9 additions & 6 deletions src/app/(main)/(admin)/documents/page.client.tsx
Original file line number Diff line number Diff line change
@@ -1,22 +1,25 @@
'use client';

import {columns} from "@/app/(main)/(admin)/documents/components/columns";
import {DataTableToolbar} from "@/app/(main)/(admin)/documents/components/data-table-toolbar";
import {AdminPageHeading} from '@/components/admin-page-heading';
import {DataTableRemote} from '@/components/data-table-remote';
import { columns } from '@/app/(main)/(admin)/documents/components/columns';
import { DataTableToolbar } from '@/app/(main)/(admin)/documents/components/data-table-toolbar';
import { AdminPageHeading } from '@/components/admin-page-heading';
import { DataTableRemote } from '@/components/data-table-remote';

export default function DocumentsPage() {
export default function DocumentsPage () {
return (
<>
<AdminPageHeading title="Documents" description="Uploading, managing, and indexing various documents" />
<DataTableRemote
toolbar={table => {
return <DataTableToolbar table={table}/>
return <DataTableToolbar table={table} />;
}}
selectable={true}
columns={columns}
api="/api/v1/documents"
idColumn="id"
defaultSorting={[
{ id: 'last_modified_at', desc: true },
]}
/>
</>
);
Expand Down
2 changes: 1 addition & 1 deletion src/app/api/v1/documents/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export const GET = defineHandler({
auth: 'admin',

}, async ({ request }) => {
return await listDocuments(toPageRequest(request));
return await listDocuments(toPageRequest(request, ['q']));
});

export const PUT = defineHandler({
Expand Down
6 changes: 5 additions & 1 deletion src/components/data-table-remote.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ interface DataTableRemoteProps<TData, TValue> {
after?: ReactNode;
toolbar?: (table: ReactTable<TData>) => ReactNode;
ts?: number;
defaultSorting?: SortingState;
}

export function DataTableRemote<TData, TValue> ({
Expand All @@ -45,14 +46,15 @@ export function DataTableRemote<TData, TValue> ({
after,
toolbar,
ts,
defaultSorting = [],
}: DataTableRemoteProps<TData, TValue>) {
const [pagination, setPagination] = useState<PaginationState>(() => {
return { pageIndex: 0, pageSize: 10 };
});
const [rowSelection, setRowSelection] = useState({});
const [columnFilters, setColumnFilters] = useState<ColumnFilter[]>([]);
const [globalFilter, setGlobalFilter] = useState('');
const [sorting, setSorting] = useState<SortingState>([])
const [sorting, setSorting] = useState<SortingState>(defaultSorting)

const idSelection = useMemo(() => {
return Object.keys(rowSelection);
Expand All @@ -79,6 +81,8 @@ export function DataTableRemote<TData, TValue> ({
],
fetcher<Page<TData>>, {
refreshInterval,
revalidateOnReconnect: false,
revalidateOnFocus: false,
focusThrottleInterval: 1000
});

Expand Down
19 changes: 18 additions & 1 deletion src/core/repositories/document.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,27 @@ export async function getDocumentsBySourceUris (sourceUris: string[]) {
.execute();
}

export async function listDocuments (request: PageRequest) {
export async function listDocuments (request: PageRequest<{ q: string[] }>) {
let q = request.q?.[0] ?? undefined;
const escapedQ = q ? q
.replaceAll('%', '\\%')
.replaceAll('_', '\\_')
.replaceAll('\\', '\\\\')
: undefined;

return await executePage(getDb()
.selectFrom('document')
.selectAll()
.where(eb => {
if (escapedQ) {
return eb.or([
eb('name', 'like', eb.val(`%${escapedQ}%`)),
eb('source_uri', 'like', eb.val(`%${escapedQ}%`)),
]);
} else {
return eb.and([]);
}
})
, request);
}

Expand Down

0 comments on commit 0ef5b87

Please sign in to comment.