feat: SEO SPA Sites, Articles and Integration (4/4)
This commit is contained in:
1 parent
cb737b7ae3
commit
02fb8751fd
47 files changed
+3218
-227
No files matched your search
@@ -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)
|
||||
)
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user