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

73 lines
1.7 KiB
TypeScript

import { useApi } from '@/composables/useApi'
import { jsonInit } from '@/lib/directoryRequest'
import { reassignQuery } from '@/lib/directory'
export type SiteRobots = 'index' | 'noindex'
export interface Site {
id: number
name: string
key: string
base_url: string
default_social_image_id: number | null
default_robots: SiteRobots
locale: string | null
site_name?: string
title_template?: string
default_description?: string
is_default: boolean
article_count: number
}
export interface NewSite {
name: string
key: string
base_url: string
default_robots: SiteRobots
locale?: string
default_social_image_id?: number
site_name?: string
title_template?: string
default_description?: string
is_default: boolean
}
export interface SitePatch {
name?: string
base_url?: string
default_robots?: SiteRobots
locale?: string | null
default_social_image_id?: number | null
site_name?: string
title_template?: string
default_description?: string
}
export function useSites() {
const { request } = useApi()
function listSites(): Promise<Site[]> {
return request<Site[]>('/v1/site/')
}
function createSite(site: NewSite): Promise<Site> {
return request<Site>('/v1/site/', jsonInit('POST', site))
}
function updateSite(id: number, patch: SitePatch): Promise<Site> {
return request<Site>(`/v1/site/${id}`, jsonInit('PATCH', patch))
}
function setDefaultSite(id: number): Promise<Site> {
return request<Site>(`/v1/site/${id}/default`, { method: 'PATCH' })
}
function deleteSite(id: number, reassignTo?: number): Promise<void> {
return request<void>(`/v1/site/${id}${reassignQuery(reassignTo)}`, {
method: 'DELETE',
})
}
return { listSites, createSite, updateSite, setDefaultSite, deleteSite }
}