try using client component

This commit is contained in:
bkellam 2024-09-10 22:59:17 -07:00
parent fa48ae79a0
commit 3b856d7edc
3 changed files with 36 additions and 24 deletions

View file

@ -1,6 +1,4 @@
'use client'; import { FileSourceResponse, fileSourceResponseSchema, ListRepositoriesResponse, listRepositoriesResponseSchema, SearchRequest, SearchResponse, searchResponseSchema } from "@/lib/schemas";
import { FileSourceResponse, fileSourceResponseSchema, SearchRequest, SearchResponse, searchResponseSchema } from "@/lib/schemas";
export const search = async (body: SearchRequest): Promise<SearchResponse> => { export const search = async (body: SearchRequest): Promise<SearchResponse> => {
const result = await fetch(`/api/search`, { const result = await fetch(`/api/search`, {
@ -28,3 +26,14 @@ export const fetchFileSource = async (fileName: string, repository: string): Pro
return fileSourceResponseSchema.parse(result); return fileSourceResponseSchema.parse(result);
} }
export const getRepos = async (): Promise<ListRepositoriesResponse> => {
const result = await fetch('/api/repos', {
method: "GET",
headers: {
"Content-Type": "application/json",
},
}).then(response => response.json());
return listRepositoriesResponseSchema.parse(result);
}

View file

@ -1,16 +1,13 @@
import { Suspense } from "react"; 'use client';
import { NavigationMenu } from "../navigationMenu"; import { NavigationMenu } from "../navigationMenu";
import { RepositoryTable } from "./repositoryTable"; import { RepositoryTable } from "./repositoryTable";
export const dynamic = 'force-dynamic' export default function ReposPage() {
export default async function ReposPage() {
return ( return (
<div className="h-screen flex flex-col items-center"> <div className="h-screen flex flex-col items-center">
<NavigationMenu /> <NavigationMenu />
<Suspense fallback={<div>Loading...</div>}> <RepositoryTable />
<RepositoryTable />
</Suspense>
</div> </div>
) )
} }

View file

@ -1,18 +1,24 @@
'use server'; 'use client';
import { DataTable } from "@/components/ui/data-table"; import { DataTable } from "@/components/ui/data-table";
import { columns, RepositoryColumnInfo } from "./columns"; import { columns, RepositoryColumnInfo } from "./columns";
import { listRepositories } from "@/lib/server/searchService";
import { isServiceError } from "@/lib/utils"; import { isServiceError } from "@/lib/utils";
import { useQuery } from "@tanstack/react-query";
import { useMemo } from "react";
import { getRepos } from "../api/(client)/client";
export const RepositoryTable = async () => { export const RepositoryTable = () => {
const _repos = await listRepositories(); const { data: _repos } = useQuery({
queryKey: ["repos"],
queryFn: () => getRepos(),
});
if (isServiceError(_repos)) { const repos = useMemo(() => {
return <div>Error fetching repositories</div>; if (isServiceError(_repos)) {
} return [];
const repos = _repos.List.Repos.map((repo): RepositoryColumnInfo => { }
return {
return _repos?.List.Repos.map((repo): RepositoryColumnInfo => ({
name: repo.Repository.Name, name: repo.Repository.Name,
branches: repo.Repository.Branches.map((branch) => { branches: repo.Repository.Branches.map((branch) => {
return { return {
@ -27,10 +33,10 @@ export const RepositoryTable = async () => {
latestCommit: repo.Repository.LatestCommitDate, latestCommit: repo.Repository.LatestCommitDate,
indexedFiles: repo.Stats.Documents, indexedFiles: repo.Stats.Documents,
commitUrlTemplate: repo.Repository.CommitURLTemplate, commitUrlTemplate: repo.Repository.CommitURLTemplate,
} })).sort((a, b) => {
}).sort((a, b) => { return new Date(b.lastIndexed).getTime() - new Date(a.lastIndexed).getTime();
return new Date(b.lastIndexed).getTime() - new Date(a.lastIndexed).getTime(); }) ?? [];
}); }, [_repos]);
return ( return (
<DataTable <DataTable