Skip to content

Commit e1004be

Browse files
committed
Add tag-based article filtering and new tag page
Expanded article search to include filtering by tags. Introduced a new page for viewing articles under specific tags. Updated article grid to link to the new tag-specific pages.
1 parent e9cbdfa commit e1004be

File tree

5 files changed

+34
-6
lines changed

5 files changed

+34
-6
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
'use client'
2+
3+
import { useParams } from 'next/navigation'
4+
import ArticleSearchAndGrid from "@/components/article/ArticleSearchAndGrid";
5+
6+
type Params = {
7+
tagSlug: string
8+
}
9+
10+
export default function TagArticles() {
11+
const params = useParams<Params>()
12+
const tagSlug = params?.tagSlug ?? ''
13+
14+
return (
15+
<div className="container mx-auto p-4">
16+
<h1 className="text-3xl font-bold mb-6">Articles in {tagSlug}</h1>
17+
<ArticleSearchAndGrid tagSlug={tagSlug} />
18+
</div>
19+
)
20+
}

app/researcher/researcherActions.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ const openai = new OpenAI({
1515
})
1616
const prisma = new PrismaClient()
1717

18-
export async function searchArticles(query: string, categorySlug?: string) {
18+
export async function searchArticles(query: string, categorySlug?: string, tagSlug?: string) {
1919
try {
2020
const whereClause: any = {
2121
OR: [
@@ -28,6 +28,13 @@ export async function searchArticles(query: string, categorySlug?: string) {
2828
whereClause.category = { slug: categorySlug };
2929
}
3030

31+
if (tagSlug) {
32+
const tag = await prisma.articleTag.findUnique({ where: { slug: tagSlug } });
33+
if (tag) {
34+
whereClause.tags = { some: { id: tag.id } };
35+
}
36+
}
37+
3138
return await prisma.article.findMany({
3239
where: whereClause,
3340
select: {

components/ArticleGrid.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ export default function ArticleGrid({ articles }: ArticleGridProps) {
4343
<CardFooter className="mt-auto pt-4 border-t">
4444
<div className="flex flex-wrap gap-2">
4545
{article.tags.map((tag) => (
46-
<Link key={tag.name} href={`/research/tags/${tag.name}`}>
46+
<Link key={tag.name} href={`/researcher/articles/tags/${tag.slug}`}>
4747
<Badge variant="outline" className="text-xs">{tag.name}</Badge>
4848
</Link>
4949
))}

components/article/ArticleSearchAndGrid.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@ import { searchArticles } from '@/app/researcher/researcherActions'
77

88
type ArticleSearchAndGridProps = {
99
categorySlug?: string
10+
tagSlug?: string
1011
}
1112

12-
export default function ArticleSearchAndGrid({ categorySlug = '' }: ArticleSearchAndGridProps) {
13+
export default function ArticleSearchAndGrid({ categorySlug = '', tagSlug = '' }: ArticleSearchAndGridProps) {
1314
const [articles, setArticles] = useState<ArticleWithRelations[]>([])
1415
const [isLoading, setIsLoading] = useState(true)
1516
const [searchQuery, setSearchQuery] = useState('')
@@ -18,7 +19,7 @@ export default function ArticleSearchAndGrid({ categorySlug = '' }: ArticleSearc
1819
const fetchArticles = async () => {
1920
setIsLoading(true)
2021
try {
21-
const results = await searchArticles(searchQuery, categorySlug)
22+
const results = await searchArticles(searchQuery, categorySlug, tagSlug)
2223
setArticles(results as ArticleWithRelations[])
2324
} catch (error) {
2425
console.error('Error fetching articles:', error)
@@ -27,7 +28,7 @@ export default function ArticleSearchAndGrid({ categorySlug = '' }: ArticleSearc
2728
}
2829
}
2930
fetchArticles()
30-
}, [categorySlug, searchQuery])
31+
}, [categorySlug, tagSlug, searchQuery])
3132

3233
const handleSearch = (query: string) => {
3334
setSearchQuery(query)

tests/researcher.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { findOrCreateArticleByPromptedTopic } from '@/lib/agents/researcher/rese
77

88
const prisma = new PrismaClient();
99

10-
describe("Database-seeder tests", () => {
10+
describe("Research Agent tests", () => {
1111
jest.setTimeout(6000000)
1212

1313
it("Generates article by URL", async () => {

0 commit comments

Comments
 (0)