-
Notifications
You must be signed in to change notification settings - Fork 50
/
useDirectusItems.ts
103 lines (94 loc) 路 2.77 KB
/
useDirectusItems.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import {
DirectusItemRequest,
DirectusItemMetaRequest,
DirectusItemCreation,
DirectusItemDeletion,
DirectusItemUpdate,
DirectusItems,
DirectusItem
} from '../types'
import { useDirectus } from './useDirectus'
export const useDirectusItems = () => {
const directus = useDirectus()
async function getItems<T>(data: DirectusItemRequest): Promise<T[]>;
async function getItems<T>(data: DirectusItemMetaRequest): Promise<DirectusItems<T>>;
async function getItems<T> (data: DirectusItemRequest | DirectusItemMetaRequest): Promise<T[] | DirectusItems<T>> {
if (data.params?.filter) {
(data.params.filter as unknown) = JSON.stringify(data.params.filter)
}
if (data.params?.deep) {
(data.params.deep as unknown) = JSON.stringify(data.params.deep)
}
const items = await directus<DirectusItems<T>>(`/items/${data.collection}`, {
method: 'GET',
params: data.params
})
if (items.meta) {
return items
} else {
return items.data
}
}
const getSingletonItem = async <T>(data: DirectusItemRequest): Promise<T> => {
if (data.params?.filter) {
(data.params.filter as unknown) = JSON.stringify(data.params.filter)
}
if (data.params?.deep) {
(data.params.deep as unknown) = JSON.stringify(data.params.deep)
}
const items = await directus<{ data: T }>(`/items/${data.collection}`, {
method: 'GET',
params: data.params
})
return items.data
}
const getItemById = async <T>(data: DirectusItemRequest): Promise<T> => {
if (data.params?.filter) {
(data.params.filter as unknown) = JSON.stringify(data.params.filter)
}
if (data.params?.deep) {
(data.params.deep as unknown) = JSON.stringify(data.params.deep)
}
const items = await directus<DirectusItem<T>>(
`/items/${data.collection}/${data.id}`,
{
method: 'GET',
params: data.params
}
)
return items.data
}
const createItems = async <T>(data: DirectusItemCreation): Promise<T[]> => {
const items = await directus<{ data: T[] }>(`/items/${data.collection}`, {
method: 'POST',
body: data.items,
params: data.params
})
return items.data
}
const deleteItems = async (data: DirectusItemDeletion): Promise<void> => {
await directus<void>(`/items/${data.collection}`, {
method: 'DELETE',
body: data.items
})
}
const updateItem = async <T>(data: DirectusItemUpdate): Promise<T> => {
const item = await directus<{ data: T }>(
`/items/${data.collection}/${data.id}`,
{
method: 'PATCH',
body: data.item,
params: data.params
}
)
return item?.data
}
return {
getItems,
getSingletonItem,
getItemById,
createItems,
deleteItems,
updateItem
}
}