73 lines
1.7 KiB
TypeScript
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 }
|
|
}
|