forked from CaliCastle/cali.so
-
Notifications
You must be signed in to change notification settings - Fork 0
/
queries.ts
112 lines (106 loc) · 2.88 KB
/
queries.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
104
105
106
107
108
109
110
111
112
import { groq } from 'next-sanity'
import { getDate } from '~/lib/date'
import { clientFetch } from '~/sanity/lib/client'
import { type Post, type PostDetail } from '~/sanity/schemas/post'
import { type Project } from '~/sanity/schemas/project'
export const getAllLatestBlogPostSlugsQuery = () =>
groq`
*[_type == "post" && !(_id in path("drafts.**"))
&& publishedAt <="${getDate().toISOString()}"
&& defined(slug.current)] | order(publishedAt desc).slug.current
`
export const getAllLatestBlogPostSlugs = () => {
return clientFetch<string[]>(getAllLatestBlogPostSlugsQuery())
}
type GetBlogPostsOptions = {
limit?: number
offset?: number
forDisplay?: boolean
}
export const getLatestBlogPostsQuery = ({
limit = 5,
forDisplay = true,
}: GetBlogPostsOptions) =>
groq`
*[_type == "post" && !(_id in path("drafts.**")) && publishedAt <= "${getDate().toISOString()}"
&& defined(slug.current)] | order(publishedAt desc)[0...${limit}] {
_id,
title,
"slug": slug.current,
"categories": categories[]->title,
description,
publishedAt,
readingTime,
mainImage {
_ref,
asset->{
url,
${
forDisplay
? '"lqip": metadata.lqip, "dominant": metadata.palette.dominant,'
: ''
}
}
}
}`
export const getLatestBlogPosts = (options: GetBlogPostsOptions) =>
clientFetch<Post[] | null>(getLatestBlogPostsQuery(options))
export const getBlogPostQuery = groq`
*[_type == "post" && slug.current == $slug && !(_id in path("drafts.**"))][0] {
_id,
title,
"slug": slug.current,
"categories": categories[]->title,
description,
publishedAt,
readingTime,
mood,
body[] {
...,
_type == "image" => {
"url": asset->url,
"lqip": asset->metadata.lqip,
"dimensions": asset->metadata.dimensions,
...
}
},
"headings": body[length(style) == 2 && string::startsWith(style, "h")],
mainImage {
_ref,
asset->{
url,
"lqip": metadata.lqip
}
},
"related": *[_type == "post" && slug.current != $slug && count(categories[@._ref in ^.^.categories[]._ref]) > 0] | order(publishedAt desc, _createdAt desc) [0..2] {
_id,
title,
"slug": slug.current,
"categories": categories[]->title,
publishedAt,
readingTime,
mainImage {
_ref,
asset->{
url,
"lqip": metadata.lqip,
"dominant": metadata.palette.dominant
}
},
}
}`
export const getBlogPost = (slug: string) =>
clientFetch<PostDetail | undefined>(getBlogPostQuery, { slug })
export const getSettingsQuery = () =>
groq`
*[_type == "settings"][0] {
"projects": projects[]->{
_id,
name,
url,
description,
icon
}
}`
export const getSettings = () =>
clientFetch<{ projects: Project[] | null }>(getSettingsQuery())