Make sure studio is running for build

This commit is contained in:
Henrik Larsson 2023-08-14 12:24:07 +02:00
parent ef14b5423c
commit e45ccb5ff8
18 changed files with 80 additions and 139 deletions

View File

@ -1,5 +1,5 @@
import {ListItemBuilder} from 'sanity/desk' import {ListItemBuilder} from 'sanity/desk'
import defineStructure from '../utils/defineStructure' import defineStructure from '../utils/define-structure'
export default defineStructure<ListItemBuilder>((S) => export default defineStructure<ListItemBuilder>((S) =>
S.listItem() S.listItem()

View File

@ -1,9 +1,9 @@
import {ListItemBuilder} from 'sanity/desk' import {ListItemBuilder} from 'sanity/desk'
import defineStructure from '../utils/defineStructure' import defineStructure from '../utils/define-structure'
import Iframe from 'sanity-plugin-iframe-pane' import Iframe from 'sanity-plugin-iframe-pane'
import {SanityDocument} from 'sanity' import {SanityDocument} from 'sanity'
import {EyeOpenIcon, MasterDetailIcon} from '@sanity/icons' import {EyeOpenIcon, MasterDetailIcon} from '@sanity/icons'
import getPreviewUrl from '../utils/getPreviewUrl' import getPreviewUrl from '../utils/get-preview-url'
export default defineStructure<ListItemBuilder>((S) => export default defineStructure<ListItemBuilder>((S) =>
S.listItem() S.listItem()

View File

@ -1,9 +1,9 @@
import {ListItemBuilder} from 'sanity/desk' import {ListItemBuilder} from 'sanity/desk'
import defineStructure from '../utils/defineStructure' import defineStructure from '../utils/define-structure'
import Iframe from 'sanity-plugin-iframe-pane' import Iframe from 'sanity-plugin-iframe-pane'
import {SanityDocument} from 'sanity' import {SanityDocument} from 'sanity'
import {EyeOpenIcon, MasterDetailIcon} from '@sanity/icons' import {EyeOpenIcon, MasterDetailIcon} from '@sanity/icons'
import getPreviewUrl from '../utils/getPreviewUrl' import getPreviewUrl from '../utils/get-preview-url'
export default defineStructure<ListItemBuilder>((S) => export default defineStructure<ListItemBuilder>((S) =>
S.listItem() S.listItem()

View File

@ -2,15 +2,15 @@
* Desk structure overrides * Desk structure overrides
*/ */
import {ListItemBuilder, StructureResolver} from 'sanity/desk' import {ListItemBuilder, StructureResolver} from 'sanity/desk'
import categories from './categoryStructure' import categories from './category-structure'
import home from './homeStructure' import home from './home-structure'
import pages from './pageStructure' import pages from './page-structure'
import products from './productStructure' import products from './product-structure'
import settings from './settingStructure' import settings from './settings-structure'
import blurbs from './blurbStructure' import blurbs from './blurb-structure'
import sections from './sectionStructure' import sections from './section-structure'
import usps from './uspStructure' import usps from './usp-structure'
import navigation from './navigationStructure' import navigation from './navigation-structure'
/** /**
* Desk structure overrides * Desk structure overrides

View File

@ -1,5 +1,5 @@
import {ListItemBuilder} from 'sanity/desk' import {ListItemBuilder} from 'sanity/desk'
import defineStructure from '../utils/defineStructure' import defineStructure from '../utils/define-structure'
import {MenuIcon} from '@sanity/icons' import {MenuIcon} from '@sanity/icons'
export default defineStructure<ListItemBuilder>((S) => export default defineStructure<ListItemBuilder>((S) =>

View File

@ -1,10 +1,10 @@
import {ListItemBuilder} from 'sanity/desk' import {ListItemBuilder} from 'sanity/desk'
import defineStructure from '../utils/defineStructure' import defineStructure from '../utils/define-structure'
import {DocumentsIcon} from '@sanity/icons' import {DocumentsIcon} from '@sanity/icons'
import Iframe from 'sanity-plugin-iframe-pane' import Iframe from 'sanity-plugin-iframe-pane'
import {SanityDocument} from 'sanity' import {SanityDocument} from 'sanity'
import {EyeOpenIcon, MasterDetailIcon} from '@sanity/icons' import {EyeOpenIcon, MasterDetailIcon} from '@sanity/icons'
import getPreviewUrl from '../utils/getPreviewUrl' import getPreviewUrl from '../utils/get-preview-url'
export default defineStructure<ListItemBuilder>((S) => export default defineStructure<ListItemBuilder>((S) =>
S.listItem() S.listItem()

View File

@ -1,9 +1,9 @@
import {ListItemBuilder} from 'sanity/desk' import {ListItemBuilder} from 'sanity/desk'
import defineStructure from '../utils/defineStructure' import defineStructure from '../utils/define-structure'
import Iframe from 'sanity-plugin-iframe-pane' import Iframe from 'sanity-plugin-iframe-pane'
import {SanityDocument} from 'sanity' import {SanityDocument} from 'sanity'
import {EyeOpenIcon, MasterDetailIcon} from '@sanity/icons' import {EyeOpenIcon, MasterDetailIcon} from '@sanity/icons'
import getPreviewUrl from '../utils/getPreviewUrl' import getPreviewUrl from '../utils/get-preview-url'
export default defineStructure<ListItemBuilder>((S) => export default defineStructure<ListItemBuilder>((S) =>
S.listItem() S.listItem()

View File

@ -1,5 +1,5 @@
import {ListItemBuilder} from 'sanity/desk' import {ListItemBuilder} from 'sanity/desk'
import defineStructure from '../utils/defineStructure' import defineStructure from '../utils/define-structure'
export default defineStructure<ListItemBuilder>((S) => export default defineStructure<ListItemBuilder>((S) =>
S.listItem() S.listItem()

View File

@ -1,5 +1,5 @@
import {ListItemBuilder} from 'sanity/desk' import {ListItemBuilder} from 'sanity/desk'
import defineStructure from '../utils/defineStructure' import defineStructure from '../utils/define-structure'
export default defineStructure<ListItemBuilder>((S) => export default defineStructure<ListItemBuilder>((S) =>
S.listItem() S.listItem()

View File

@ -1,5 +1,5 @@
import {ListItemBuilder} from 'sanity/desk' import {ListItemBuilder} from 'sanity/desk'
import defineStructure from '../utils/defineStructure' import defineStructure from '../utils/define-structure'
export default defineStructure<ListItemBuilder>((S) => export default defineStructure<ListItemBuilder>((S) =>
S.listItem() S.listItem()

View File

@ -1,19 +1,19 @@
import {PackageIcon} from '@sanity/icons' import { PackageIcon } from '@sanity/icons';
import {defineField, defineType} from 'sanity' import { defineField, defineType } from 'sanity';
import {slugWithLocalizedType} from './slugWithLocalizedType' import { slugWithLocalizedType } from './slugWithLocalizedType';
import {languages} from '../../languages' import { languages } from '../../languages';
import {validateImage} from '../../utils/validation' import { validateImage } from '../../utils/validation';
const GROUPS = [ const GROUPS = [
{ {
name: 'editorial', name: 'editorial',
title: 'Editorial', title: 'Editorial'
}, },
{ {
name: 'seo', name: 'seo',
title: 'SEO', title: 'SEO'
}, }
] ];
export default defineType({ export default defineType({
name: 'product', name: 'product',
@ -27,7 +27,7 @@ export default defineType({
name: 'language', name: 'language',
type: 'string', type: 'string',
readOnly: true, readOnly: true,
description: 'Language of this document.', description: 'Language of this document.'
// hidden: true, // hidden: true,
}), }),
// ID // ID
@ -35,7 +35,7 @@ export default defineType({
name: 'id', name: 'id',
title: 'ID', title: 'ID',
type: 'number', type: 'number',
description: 'Unique product ID.', description: 'Unique product ID.'
}), }),
// Title // Title
defineField({ defineField({
@ -43,7 +43,7 @@ export default defineType({
title: 'Title', title: 'Title',
type: 'string', type: 'string',
description: 'Product title/name.', description: 'Product title/name.',
validation: (Rule) => Rule.required(), validation: (Rule) => Rule.required()
}), }),
// Slug // Slug
slugWithLocalizedType('product', 'title'), slugWithLocalizedType('product', 'title'),
@ -56,16 +56,16 @@ export default defineType({
{ {
title: 'Image', title: 'Image',
type: 'mainImage', type: 'mainImage',
validation: (Rule) => validateImage(Rule, true), validation: (Rule) => validateImage(Rule, true)
}, }
], ],
validation: (Rule) => Rule.required().min(1).max(5), validation: (Rule) => Rule.required().min(1).max(5)
}), }),
defineField({ defineField({
name: 'description', name: 'description',
title: 'Description', title: 'Description',
type: 'text', type: 'text',
description: 'Product description.', description: 'Product description.'
}), }),
defineField({ defineField({
name: 'price', name: 'price',
@ -77,7 +77,7 @@ export default defineType({
name: 'value', name: 'value',
title: 'Value', title: 'Value',
type: 'number', type: 'number',
description: 'Product price.', description: 'Product price.'
}), }),
defineField({ defineField({
name: 'currencyCode', name: 'currencyCode',
@ -86,82 +86,75 @@ export default defineType({
description: 'Product currency code.', description: 'Product currency code.',
options: { options: {
list: [ list: [
{title: 'SEK', value: 'SEK'}, { title: 'SEK', value: 'SEK' },
{title: 'GBP', value: 'GBP'}, { title: 'GBP', value: 'GBP' },
{title: 'EUR', value: 'EUR'}, { title: 'EUR', value: 'EUR' }
], ],
layout: 'radio', layout: 'radio'
}, },
initialValue: 'SEK', initialValue: 'SEK'
}), }),
defineField({ defineField({
name: 'retailPrice', name: 'retailPrice',
title: 'Retail price', title: 'Retail price',
type: 'number', type: 'number',
description: 'Product retail price.', description: 'Product retail price.'
}), })
], ]
}),
defineField({
name: 'options',
title: 'Product options',
type: 'array',
description: 'What product options are available?',
of: [{type: 'productOptions'}],
}), }),
defineField({ defineField({
name: 'categories', name: 'categories',
title: 'Categories', title: 'Categories',
type: 'array', type: 'array',
description: 'What category/categories does this product belong to?', description: 'What category/categories does this product belong to?',
of: [{type: 'reference', to: {type: 'category'}}], of: [{ type: 'reference', to: { type: 'category' } }]
}), }),
defineField({ defineField({
name: 'seo', name: 'seo',
title: 'SEO', title: 'SEO',
type: 'seo', type: 'seo',
group: 'seo', group: 'seo'
}), })
], ],
orderings: [ orderings: [
{ {
name: 'titleAsc', name: 'titleAsc',
title: 'Title (A-Z)', title: 'Title (A-Z)',
by: [{field: 'title', direction: 'asc'}], by: [{ field: 'title', direction: 'asc' }]
}, },
{ {
name: 'titleDesc', name: 'titleDesc',
title: 'Title (Z-A)', title: 'Title (Z-A)',
by: [{field: 'title', direction: 'desc'}], by: [{ field: 'title', direction: 'desc' }]
}, },
{ {
name: 'priceDesc', name: 'priceDesc',
title: 'Price (Highest first)', title: 'Price (Highest first)',
by: [{field: 'price', direction: 'desc'}], by: [{ field: 'price', direction: 'desc' }]
}, },
{ {
name: 'priceAsc', name: 'priceAsc',
title: 'Title (Lowest first)', title: 'Title (Lowest first)',
by: [{field: 'price', direction: 'asc'}], by: [{ field: 'price', direction: 'asc' }]
}, }
], ],
preview: { preview: {
select: { select: {
images: 'images', images: 'images',
title: 'title', title: 'title',
language: 'language', language: 'language'
}, },
prepare(selection) { prepare(selection) {
const {images, title, language} = selection const { images, title, language } = selection;
const currentLang = languages.find((lang) => lang.id === language) const currentLang = languages.find((lang) => lang.id === language);
const firstImage = images[0] const firstImage = images[0];
return { return {
title, title,
subtitle: `${currentLang ? currentLang.title : ''}`, subtitle: `${currentLang ? currentLang.title : ''}`,
media: firstImage ? firstImage : PackageIcon, media: firstImage ? firstImage : PackageIcon
};
} }
}, }
}, });
})

View File

@ -50,13 +50,9 @@ import banner from './objects/banner'
import linkExternal from './objects/linkExternal' import linkExternal from './objects/linkExternal'
import linkInternal from './objects/linkInternal' import linkInternal from './objects/linkInternal'
import hero from './objects/hero' import hero from './objects/hero'
import placeholderString from './objects/placeholderString'
import proxyString from './objects/proxyString'
import seo from './objects/seo' import seo from './objects/seo'
import mainImage from './objects/mainImage' import mainImage from './objects/mainImage'
import slider from './objects/slider' import slider from './objects/slider'
import productOption from './objects/productOption'
import productOptions from './objects/productOptions'
import blurbSection from './objects/blurbSection' import blurbSection from './objects/blurbSection'
import filteredProductList from './objects/filteredProductList' import filteredProductList from './objects/filteredProductList'
import uspSection from './objects/uspSection' import uspSection from './objects/uspSection'
@ -67,13 +63,9 @@ const objects = [
linkExternal, linkExternal,
linkInternal, linkInternal,
hero, hero,
placeholderString,
proxyString,
seo, seo,
mainImage, mainImage,
slider, slider,
productOption,
productOptions,
filteredProductList, filteredProductList,
banner, banner,
blurbSection, blurbSection,

View File

@ -1,25 +0,0 @@
import {defineField} from 'sanity'
export default defineField({
name: 'productOption',
title: 'Product option',
type: 'object',
fields: [
defineField({
name: 'label',
title: 'Label',
type: 'string',
validation: Rule => Rule.required(),
description: 'Product option label.'
}),
defineField({
name: 'hexColors',
title: 'Color hex code',
type: 'color',
description: 'Hex color code for product option.',
options: {
disableAlpha: true
}
})
],
})

View File

@ -1,32 +0,0 @@
import {defineField} from 'sanity'
export default defineField({
name: 'productOptions',
title: 'Product options',
type: 'object',
fields: [
defineField({
name: 'id',
title: 'ID (string)',
type: 'string',
validation: Rule => Rule.required(),
description: 'Unique product option ID.'
}),
defineField({
name: 'displayName',
title: 'Display name',
type: 'string',
description: 'Name displayed for this collection of product options.',
validation: Rule => Rule.required(),
}),
defineField({
name: 'values',
title: 'Values',
type: 'array',
description: 'What kind of values are available?',
of: [{type: 'productOption'}],
options: {},
validation: Rule => Rule.required(),
}),
],
})

View File

@ -1,3 +1,4 @@
// @ts-nocheck
import {isDev, SanityDocument} from 'sanity' import {isDev, SanityDocument} from 'sanity'
import { localStorefrontPreviewUrl, publicStorefrontPreviewUrl } from '../constants' import { localStorefrontPreviewUrl, publicStorefrontPreviewUrl } from '../constants'

View File

@ -26,13 +26,14 @@
"@radix-ui/react-dropdown-menu": "^2.0.4", "@radix-ui/react-dropdown-menu": "^2.0.4",
"@radix-ui/react-navigation-menu": "^1.1.2", "@radix-ui/react-navigation-menu": "^1.1.2",
"@sanity/client": "^6.4.4", "@sanity/client": "^6.4.4",
"@sanity/document-internationalization": "^2.0.1",
"@sanity/icons": "^2.4.1",
"@sanity/image-url": "^1.0.2", "@sanity/image-url": "^1.0.2",
"@sanity/preview-kit": "^2.4.9", "@sanity/preview-kit": "^2.4.9",
"@sanity/types": "^3.11.1", "@sanity/types": "^3.11.1",
"@sanity/ui": "^1.3.3", "@sanity/ui": "^1.3.3",
"@sanity/webhook": "^2.0.0",
"@sanity/document-internationalization": "^2.0.1",
"@sanity/vision": "^3.0.0", "@sanity/vision": "^3.0.0",
"@sanity/webhook": "^2.0.0",
"@types/styled-components": "^5.1.26", "@types/styled-components": "^5.1.26",
"@vercel/og": "^0.1.0", "@vercel/og": "^0.1.0",
"algoliasearch": "^4.19.1", "algoliasearch": "^4.19.1",
@ -66,6 +67,7 @@
"@types/node": "18.13.0", "@types/node": "18.13.0",
"@types/react": "18.2.19", "@types/react": "18.2.19",
"@types/react-dom": "18.2.7", "@types/react-dom": "18.2.7",
"@types/slug": "^5.0.3",
"@vercel/git-hooks": "^1.0.0", "@vercel/git-hooks": "^1.0.0",
"autoprefixer": "^10.4.14", "autoprefixer": "^10.4.14",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",

10
pnpm-lock.yaml generated
View File

@ -29,6 +29,9 @@ dependencies:
'@sanity/document-internationalization': '@sanity/document-internationalization':
specifier: ^2.0.1 specifier: ^2.0.1
version: 2.0.1(@babel/core@7.22.10)(@sanity/ui@1.7.4)(react-dom@18.2.0)(react-fast-compare@3.2.2)(react-is@18.2.0)(react@18.2.0)(rxjs@7.8.1)(sanity@3.15.0)(styled-components@5.3.11) version: 2.0.1(@babel/core@7.22.10)(@sanity/ui@1.7.4)(react-dom@18.2.0)(react-fast-compare@3.2.2)(react-is@18.2.0)(react@18.2.0)(rxjs@7.8.1)(sanity@3.15.0)(styled-components@5.3.11)
'@sanity/icons':
specifier: ^2.4.1
version: 2.4.1(react@18.2.0)
'@sanity/image-url': '@sanity/image-url':
specifier: ^1.0.2 specifier: ^1.0.2
version: 1.0.2 version: 1.0.2
@ -142,6 +145,9 @@ devDependencies:
'@types/react-dom': '@types/react-dom':
specifier: 18.2.7 specifier: 18.2.7
version: 18.2.7 version: 18.2.7
'@types/slug':
specifier: ^5.0.3
version: 5.0.3
'@vercel/git-hooks': '@vercel/git-hooks':
specifier: ^1.0.0 specifier: ^1.0.0
version: 1.0.0 version: 1.0.0
@ -2737,6 +2743,10 @@ packages:
resolution: {integrity: sha512-XtGSj7GYPfJwaklDtMEONj+kmpyCP8OLYoPqp/ROM8BL1VaF2IgYbxiEKfLvOyHN7c2d1KAFYzy6EIu8CSFt1A==} resolution: {integrity: sha512-XtGSj7GYPfJwaklDtMEONj+kmpyCP8OLYoPqp/ROM8BL1VaF2IgYbxiEKfLvOyHN7c2d1KAFYzy6EIu8CSFt1A==}
dev: false dev: false
/@types/slug@5.0.3:
resolution: {integrity: sha512-yPX0bb1SvrpaGlHuSiz6EicgRI4VBE+LO7IANlZagQwtaoKjLLcZc8y6s13vKp41mYvMCSzjtObxvU7/0JRPaA==}
dev: true
/@types/speakingurl@13.0.3: /@types/speakingurl@13.0.3:
resolution: {integrity: sha512-nBHZAaNTEw1YG3ROL7HtTp7HjW8HD7DuFYbWoonUKTZHj7eyOt4vPzyMcc3+xgWNv7xi2rziaiBXHIq6wBeyrw==} resolution: {integrity: sha512-nBHZAaNTEw1YG3ROL7HtTp7HjW8HD7DuFYbWoonUKTZHj7eyOt4vPzyMcc3+xgWNv7xi2rziaiBXHIq6wBeyrw==}
dev: false dev: false