Files
RenewCMS/web/src/composables/useArticles.ts
T

81 lines
1.6 KiB
TypeScript

import type { SuggestionCode } from '@/lib/seoTypes'
import type { ArticleSeo } from '@/lib/articleSeo'
import { useApi } from '@/composables/useApi'
import type { Byline } from '@/lib/articleTypes'
import type { ArticleStatus, SEO_FILTER } from '@/lib/articleListQuery'
export type { Byline }
export interface Article extends Partial<ArticleSeo> {
id: number
title: string
body: string
is_online: boolean
lang?: string
site_id?: number
created_by?: number
authors?: Byline[]
created_at: string
updated_at: string
seo_status?: string
seo_dismissed?: SuggestionCode[]
seo_suggestions?: number
}
export type { ArticleStatus }
export interface ArticleCounts {
all: number
online: number
draft: number
suggestions?: number
}
export interface ArticlePage {
items: Article[]
total: number
page: number
size: number
counts: ArticleCounts
}
export interface ListArticlesParams {
page: number
size: number
q?: string
status?: ArticleStatus | ''
sort?: string
site?: string
seo?: '' | typeof SEO_FILTER
}
export function useArticles() {
const { request } = useApi()
function listArticles(params: ListArticlesParams): Promise<ArticlePage> {
const query = new URLSearchParams({
format: 'html',
page: String(params.page),
size: String(params.size),
})
if (params.q) {
query.set('q', params.q)
}
if (params.status) {
query.set('status', params.status)
}
if (params.sort) {
query.set('sort', params.sort)
}
if (params.site) {
query.set('site', params.site)
}
if (params.seo) {
query.set('seo', params.seo)
}
return request<ArticlePage>(`/v1/article/?${query.toString()}`)
}
return { listArticles }
}