feat: SEO SPA Sites, Articles and Integration (4/4)

This commit is contained in:
Florian Sylvain committed 2026-10-18 15:51:28 +02:00
1 parent cb737b7ae3
commit 02fb8751fd
47 files changed
+3218 -227

No files matched your search

+8
View File
@@ -9,6 +9,8 @@ export const DEFAULT_ARTICLE_SORT = 'updated_at:desc'
export const ARTICLE_SORT_FIELDS = ['title', 'status', 'created_at', 'updated_at'] as const
export type ArticleSortField = (typeof ARTICLE_SORT_FIELDS)[number]
export const SEO_FILTER = 'suggestions'
const SITE_KEY_MAX = 32
const POSITIVE_INTEGER = /^[1-9]\d*$/
@@ -19,6 +21,7 @@ export interface ArticleListQuery {
status: ArticleStatus | ''
sort: string
site: string
seo: '' | typeof SEO_FILTER
}
function first(value: LocationQuery[string] | undefined) {
@@ -52,6 +55,7 @@ export function parseArticleQuery(query: LocationQuery): ArticleListQuery {
status: status === 'online' || status === 'draft' ? status : '',
sort: validSort(first(query.sort)),
site: first(query.site).slice(0, SITE_KEY_MAX),
seo: first(query.seo) === SEO_FILTER ? SEO_FILTER : '',
}
}
@@ -75,6 +79,9 @@ export function toRouteQuery(query: ArticleListQuery) {
if (query.site) {
route.site = query.site
}
if (query.seo) {
route.seo = query.seo
}
return route
}
@@ -85,6 +92,7 @@ export function sameArticleQuery(left: ArticleListQuery, right: ArticleListQuery
left.q === right.q &&
left.status === right.status &&
left.site === right.site &&
left.seo === right.seo &&
effectiveSort(left.sort) === effectiveSort(right.sort)
)
}