mirror of
https://github.com/vercel/commerce.git
synced 2025-05-15 05:56:59 +00:00
305 lines
5.2 KiB
TypeScript
305 lines
5.2 KiB
TypeScript
export const docQuery = `*[_type in ["home", "page", "category", "product"] && defined(slug.current)] {
|
|
_type,
|
|
"slug": slug.current,
|
|
"locale": language
|
|
}`
|
|
|
|
export const imageFields = `
|
|
alt,
|
|
crop,
|
|
hotspot,
|
|
asset-> {
|
|
...,
|
|
_type,
|
|
_ref,
|
|
}
|
|
`
|
|
|
|
export const seoFields = `
|
|
title,
|
|
description,
|
|
image {
|
|
${imageFields}
|
|
}
|
|
`
|
|
|
|
// Construct our "Modules" GROQ
|
|
export const modules = `
|
|
_type == 'hero' => {
|
|
_type,
|
|
_key,
|
|
label,
|
|
title,
|
|
variant,
|
|
headingLevel,
|
|
text,
|
|
link {
|
|
title,
|
|
reference->{title, slug, "locale": language}
|
|
},
|
|
image {
|
|
${imageFields}
|
|
}
|
|
},
|
|
_type == 'filteredProductList' => {
|
|
_type,
|
|
_key,
|
|
title,
|
|
itemsToShow,
|
|
productCategories[]->,
|
|
"products": *[_type == "product" && count(categories[@._ref in ^.^.productCategories[]._ref]) > 0] | order(publishedAt desc, _createdAt desc) [0...12] {
|
|
title,
|
|
"slug": slug.current,
|
|
price,
|
|
images[] {
|
|
${imageFields}
|
|
},
|
|
price {
|
|
value,
|
|
currencyCode,
|
|
retailPrice
|
|
},
|
|
}
|
|
},
|
|
_type == 'slider' => {
|
|
_type,
|
|
_key,
|
|
title,
|
|
sliderType,
|
|
categories[]-> {
|
|
title,
|
|
"slug": slug.current,
|
|
"locale": language,
|
|
image {
|
|
${imageFields}
|
|
},
|
|
},
|
|
products[]-> {
|
|
id,
|
|
title,
|
|
"slug": slug.current,
|
|
"locale": language,
|
|
images[] {
|
|
${imageFields}
|
|
},
|
|
price {
|
|
value,
|
|
currencyCode,
|
|
retailPrice
|
|
},
|
|
},
|
|
},
|
|
_type == 'banner' => {
|
|
_type,
|
|
_key,
|
|
title,
|
|
text,
|
|
image {
|
|
${imageFields}
|
|
}
|
|
},
|
|
_type == 'blurbSection' => {
|
|
disabled,
|
|
_type,
|
|
_key,
|
|
title,
|
|
mobileLayout,
|
|
desktopLayout,
|
|
imageFormat,
|
|
blurbs[]->{
|
|
title,
|
|
text,
|
|
link {
|
|
linkType,
|
|
title,
|
|
internalLink {
|
|
reference->
|
|
},
|
|
externalLink {
|
|
title,
|
|
url,
|
|
newWindow
|
|
}
|
|
},
|
|
"locale": language,
|
|
image {
|
|
${imageFields}
|
|
},
|
|
},
|
|
},
|
|
_type == 'uspSection' => {
|
|
disabled,
|
|
_type,
|
|
_key,
|
|
title,
|
|
usps[]->{
|
|
title,
|
|
text,
|
|
"locale": language,
|
|
image {
|
|
${imageFields}
|
|
},
|
|
},
|
|
}
|
|
`
|
|
export const reusableSection = `
|
|
_type == 'reusableSection' => {
|
|
disabled,
|
|
_type,
|
|
title,
|
|
section {
|
|
existingSection-> {
|
|
section {
|
|
sectionType[] {
|
|
${modules}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
`
|
|
|
|
// Homepage query
|
|
export const homePageQuery = `*[_type == "home" && slug.current == "/" && language == $locale][0] {
|
|
_type,
|
|
title,
|
|
"slug": slug.current,
|
|
"locale": language,
|
|
"translations": *[_type == "translation.metadata" && references(^._id)].translations[].value->{
|
|
title,
|
|
slug,
|
|
"locale": language
|
|
},
|
|
content[] {
|
|
${modules},
|
|
${reusableSection}
|
|
},
|
|
seo {
|
|
${seoFields}
|
|
}
|
|
}`
|
|
|
|
// Page query
|
|
export const pageQuery = `*[_type == "page" && slug.current == $slug && language == $locale][0] {
|
|
_type,
|
|
title,
|
|
"slug": slug.current,
|
|
"locale": language,
|
|
"translations": *[_type == "translation.metadata" && references(^._id)].translations[].value->{
|
|
title,
|
|
slug,
|
|
"locale": language
|
|
},
|
|
content[] {
|
|
${modules}
|
|
},
|
|
seo {
|
|
${seoFields}
|
|
}
|
|
}`
|
|
|
|
// Product query
|
|
export const productQuery = `*[_type == "product" && slug.current == $slug && language == $locale][0] {
|
|
_type,
|
|
title,
|
|
"slug": slug.current,
|
|
"locale": language,
|
|
"translations": *[_type == "translation.metadata" && references(^._id)].translations[].value->{
|
|
title,
|
|
slug,
|
|
"locale": language
|
|
},
|
|
"product": {
|
|
id,
|
|
"name": title,
|
|
description,
|
|
"descriptionHtml": "",
|
|
images[] {
|
|
${imageFields}
|
|
},
|
|
price {
|
|
value,
|
|
currencyCode,
|
|
retailPrice
|
|
},
|
|
options[] {
|
|
id,
|
|
displayName,
|
|
values[] {
|
|
label,
|
|
"hexColors": hexColors.hex
|
|
}
|
|
},
|
|
"variants": []
|
|
},
|
|
seo {
|
|
${seoFields}
|
|
}
|
|
}`
|
|
|
|
// Category query
|
|
export const categoryQuery = `*[_type == "category" && slug.current == $slug && language == $locale][0] {
|
|
_type,
|
|
title,
|
|
"slug": slug.current,
|
|
"locale": language,
|
|
showBanner,
|
|
banner {
|
|
_type,
|
|
_key,
|
|
title,
|
|
text,
|
|
image {
|
|
${imageFields}
|
|
}
|
|
},
|
|
"translations": *[_type == "translation.metadata" && references(^._id)].translations[].value->{
|
|
title,
|
|
slug,
|
|
"locale": language
|
|
},
|
|
seo {
|
|
${seoFields}
|
|
}
|
|
}`
|
|
|
|
// Site settings query
|
|
export const siteSettingsQuery = `*[_type == "settings" && language == $locale][0] {
|
|
menuMain {
|
|
links[] {
|
|
title,
|
|
"link": reference->
|
|
}
|
|
},
|
|
seo,
|
|
socialMedia,
|
|
"locale": language,
|
|
notFoundPage {
|
|
title,
|
|
body,
|
|
category->{title},
|
|
"products": *[_type == "product" && ^.category->title in categories[]->title] | order(publishedAt desc, _createdAt desc) [0...4] {
|
|
id,
|
|
title,
|
|
"slug": slug.current,
|
|
price,
|
|
images[] {
|
|
${imageFields}
|
|
},
|
|
price {
|
|
value,
|
|
currencyCode,
|
|
retailPrice
|
|
},
|
|
}
|
|
},
|
|
cookieConsent {
|
|
title,
|
|
description,
|
|
consentText,
|
|
link {
|
|
reference->
|
|
}
|
|
}
|
|
}`
|