feat: ArticleCard component

This commit is contained in:
achmad
2026-05-28 22:29:19 +07:00
parent 6ba2c8b932
commit 50a4e63e2a
3 changed files with 103 additions and 11 deletions
+18 -11
View File
@@ -8,12 +8,19 @@ import {
} from '@directus/sdk'
import type { Article, Category, SiteSettings } from './types'
const directus = createDirectus(process.env.DIRECTUS_URL!)
.with(staticToken(process.env.DIRECTUS_TOKEN!))
.with(rest())
let _client: ReturnType<typeof createDirectus> | null = null
function getClient() {
if (!_client) {
_client = createDirectus(process.env.DIRECTUS_URL!)
.with(staticToken(process.env.DIRECTUS_TOKEN!))
.with(rest())
}
return _client
}
export async function getAllCategories(): Promise<Category[]> {
return directus.request(
return getClient().request(
readItems('categories', {
fields: ['id', 'name', 'slug', 'description'],
sort: ['name'],
@@ -22,7 +29,7 @@ export async function getAllCategories(): Promise<Category[]> {
}
export async function getCategoryBySlug(slug: string): Promise<Category | null> {
const results = await directus.request(
const results = await getClient().request(
readItems('categories', {
fields: ['id', 'name', 'slug', 'description'],
filter: { slug: { _eq: slug } },
@@ -42,7 +49,7 @@ export async function getArticles(options: {
if (categorySlug) {
filter['category'] = { slug: { _eq: categorySlug } }
}
return directus.request(
return getClient().request(
readItems('articles', {
fields: [
'id', 'title', 'slug', 'status', 'excerpt', 'featured_image',
@@ -58,7 +65,7 @@ export async function getArticles(options: {
}
export async function getArticleBySlug(slug: string): Promise<Article | null> {
const results = await directus.request(
const results = await getClient().request(
readItems('articles', {
fields: [
'id', 'title', 'slug', 'status', 'content', 'excerpt',
@@ -79,7 +86,7 @@ export async function getArticlePathById(id: string): Promise<{
category: { slug: string }
} | null> {
try {
return await directus.request(
return await getClient().request(
readItem('articles', id, {
fields: ['slug', 'category.slug'],
})
@@ -93,7 +100,7 @@ export async function getRelatedArticles(
categorySlug: string,
excludeSlug: string,
): Promise<Article[]> {
return directus.request(
return getClient().request(
readItems('articles', {
fields: [
'id', 'title', 'slug', 'excerpt', 'featured_image',
@@ -111,7 +118,7 @@ export async function getRelatedArticles(
}
export async function getSiteSettings(): Promise<SiteSettings> {
return directus.request(
return getClient().request(
readSingleton('site_settings', {
fields: [
'id', 'site_name',
@@ -125,7 +132,7 @@ export async function getSiteSettings(): Promise<SiteSettings> {
}
export async function searchArticles(query: string): Promise<Article[]> {
return directus.request(
return getClient().request(
readItems('articles', {
fields: ['id', 'title', 'slug', 'category.slug', 'category.name'],
search: query,