commerce/lib/sanity/queries.tsx
2023-08-11 10:19:55 +02:00

325 lines
5.6 KiB
TypeScript

export const imageFields = `
alt,
crop,
hotspot,
"url": asset->url,
"width": asset->metadata.dimensions.width,
"height": asset->metadata.dimensions.height,
asset-> {
_id,
assetId,
metadata,
_type,
_ref,
_rev
}
`;
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[]->{
_type,
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" && language == $locale][0] {
_type,
title,
"slug": slug.current,
"locale": language,
"translations": *[_type == "translation.metadata" && references(^._id)].translations[].value->{
title,
"slug": slug.current,
"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": slug.current,
"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": slug.current,
"locale": language
},
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,
image {
${imageFields}
},
"translations": *[_type == "translation.metadata" && references(^._id)].translations[].value->{
title,
"slug": slug.current,
"locale": language
},
seo {
${seoFields}
}
}`;
// Categories query
export const categoriesQuery = `*[_type == "category" && language == $locale] | order(title asc) {
_type,
title,
"slug": slug.current,
"locale": language,
}`;
// Footer menu query
export const footerMenusQuery = `*[_type == "footerMenu" && language == $locale] | order(title asc) {
_type,
title,
"locale": language,
menu {
title,
links[] {
_type,
title,
reference-> {
slug,
"locale": language
},
url,
newWindow
}
}
}`;
// 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->
}
}
}`;