@devite/nuxt-sanity 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/module.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@devite/nuxt-sanity",
3
3
  "configKey": "@devite/nuxt-sanity",
4
- "version": "1.0.1",
4
+ "version": "1.0.2",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "0.8.4",
7
7
  "unbuild": "2.0.0"
@@ -9,12 +9,30 @@
9
9
  </template>
10
10
 
11
11
  <script setup lang="ts">
12
- const props = defineProps<{ data: object }>()
12
+ import type { Component } from '@nuxt/schema'
13
+ import { resolveComponent } from '#imports'
14
+ import { SanityLinkExternal, SanityLinkInternal, SanityRichText } from '#components'
13
15
 
14
- const type
15
- = props.data.constructor.name === 'Array' && props.data.every(item => item._type === 'block')
16
- ? 'richText'
17
- : props.data?._type
18
- const upperCamelCase = type?.charAt(0).toUpperCase() + type?.slice(1)
19
- const component = resolveComponent('Sanity' + upperCamelCase)
16
+ const props = defineProps<{ data?: object }>()
17
+
18
+ const type = props.data?._type
19
+ let component: Component
20
+
21
+ switch (type) {
22
+ case 'linkInternal':
23
+ component = SanityLinkInternal
24
+ break
25
+ case 'linkExternal':
26
+ component = SanityLinkExternal
27
+ break
28
+ default:
29
+ if (props.data?.constructor.name === 'Array' && props.data.every(item => item._type === 'block'))
30
+ component = SanityRichText
31
+ else if (type) {
32
+ const upperCamelCase = type.charAt(0).toUpperCase() + type.slice(1)
33
+ component = resolveComponent('Sanity' + upperCamelCase)
34
+ }
35
+
36
+ break
37
+ }
20
38
  </script>
@@ -8,7 +8,7 @@
8
8
  </template>
9
9
 
10
10
  <script setup lang="ts">
11
- import type { LinkExternal } from '~/types/objects/link/LinkExternal'
11
+ import type { LinkExternal } from '../types/objects/link/LinkExternal'
12
12
 
13
13
  defineProps<{ data: LinkExternal }>()
14
14
  </script>
@@ -7,7 +7,7 @@
7
7
  </template>
8
8
 
9
9
  <script setup lang="ts">
10
- import type { LinkInternal } from '~/types/objects/link/LinkInternal'
10
+ import type { LinkInternal } from '../types/objects/link/LinkInternal'
11
11
 
12
12
  defineProps<{ data: LinkInternal }>()
13
13
  </script>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <main v-if="sanityData.modules?.length > 0">
2
+ <main v-if="sanityData?.modules?.length > 0">
3
3
  <SanityComponent
4
4
  v-for="module in sanityData.modules"
5
5
  :key="module._key"
@@ -9,10 +9,14 @@
9
9
  </template>
10
10
 
11
11
  <script setup lang="ts">
12
- import type { Home } from '~/types/singletons/Home'
13
- import type { Page } from '~/types/documents/Page'
14
- import type { NotFound } from '~/types/singletons/NotFound'
15
- import type { GlobalSEO } from '~/types/objects/global/GlobalSEO'
12
+ import { useSanityQuery } from '@nuxtjs/sanity/runtime/composables'
13
+ import { groq } from '@nuxtjs/sanity/runtime/groq'
14
+ import type { Home } from '../types/singletons/Home'
15
+ import type { Page } from '../types/documents/Page'
16
+ import type { NotFound } from '../types/singletons/NotFound'
17
+ import type { GlobalSEO } from '../types/objects/global/GlobalSEO'
18
+ import { useHead, useRoute, useRuntimeConfig, useSeoMeta } from '#app'
19
+ import { computed } from '#imports'
16
20
 
17
21
  const { baseURL } = useRuntimeConfig().public
18
22
 
@@ -23,12 +27,12 @@ const { data: sanityData } = await useSanityQuery<Home | Page | NotFound>(groq`*
23
27
  const seo = computed(() => sanityData.value?.seo)
24
28
  const url = computed(() => baseURL + (sanityData.value?.slug || '/'))
25
29
 
26
- const { data: globalSEO } = await useSanityQuery<GlobalSEO>(groq`*[_type == 'settings'][0].seo { site_name, image }`)
30
+ const { data: globalSEO } = await useSanityQuery<GlobalSEO>(groq`*[_type == 'settings'][0].seo { siteName, image }`)
27
31
  const image = computed(() => sanityData.value?.image || globalSEO.value?.image)
28
32
 
29
33
  useHead({
30
34
  meta: [
31
- { name: 'site_name', content: () => globalSEO.value?.site_name },
35
+ { name: 'site_name', content: () => globalSEO.value?.siteName },
32
36
  { name: 'og:image', content: () => image.value?.url },
33
37
  { name: 'og:image:width', content: () => image.value?.metadata.dimensions.width },
34
38
  { name: 'og:image:height', content: () => image.value?.metadata.dimensions.height },
@@ -47,9 +51,9 @@ useSeoMeta({
47
51
  robots: () => ((seo.value?.indexable ? '' : 'no') + 'index,follow'),
48
52
  title: () => seo.value?.title,
49
53
  description: () => seo.value?.description,
50
- ogTitle: () => seo.value?.opengraph_title,
54
+ ogTitle: () => seo.value?.shortTitle,
51
55
  ogDescription: () => seo.value?.description,
52
- twitterTitle: () => seo.value?.opengraph_title,
56
+ twitterTitle: () => seo.value?.shortTitle,
53
57
  twitterDescription: () => seo.value?.description,
54
58
  })
55
59
  </script>
@@ -7,8 +7,9 @@
7
7
 
8
8
  <script setup lang="ts">
9
9
  import { PortableText, type PortableTextComponents } from '@portabletext/vue'
10
- import type { RichText } from '~/types/richText/RichText'
11
- import { LinkExternal, LinkInternal } from '#components'
10
+ import type { RichText } from '../types/richText/RichText'
11
+ import { computed, h } from '#imports'
12
+ import { SanityLinkExternal, SanityLinkInternal } from '#components'
12
13
 
13
14
  const { data, placeholders = {} } = defineProps<{ data: RichText, placeholders?: object }>()
14
15
  const currentData = computed(() => {
@@ -47,9 +48,9 @@ function replacePlaceholders(text: string) {
47
48
  const richTextSerializer: PortableTextComponents = {
48
49
  marks: {
49
50
  linkExternal: ({ value }, { slots }) =>
50
- h(LinkExternal, { data: value }, slots.default),
51
+ h(SanityLinkExternal, { data: value }, slots.default),
51
52
  linkInternal: ({ value }, { slots }) =>
52
- h(LinkInternal, { data: value }, slots.default),
53
+ h(SanityLinkInternal, { data: value }, slots.default),
53
54
  },
54
55
  }
55
56
  </script>
@@ -0,0 +1,10 @@
1
+ import type { Slug } from '@sanity/types';
2
+ import type { SEO } from '../objects/SEO.js';
3
+ export interface Page {
4
+ _id: string;
5
+ _type: 'page';
6
+ title: string;
7
+ slug: Slug;
8
+ modules: Array<object>;
9
+ seo: SEO;
10
+ }
File without changes
@@ -0,0 +1,9 @@
1
+ import type { Image } from '@sanity/types';
2
+ export interface SEO {
3
+ _type: 'seo';
4
+ indexable: boolean;
5
+ title: string;
6
+ shortTitle: string;
7
+ description: string;
8
+ image?: Image;
9
+ }
File without changes
@@ -0,0 +1,5 @@
1
+ import type { Image } from '@sanity/types';
2
+ export interface GlobalSEO {
3
+ siteName: string;
4
+ image: Image;
5
+ }
File without changes
@@ -0,0 +1,5 @@
1
+ export interface LinkExternal {
2
+ _type: 'linkExternal';
3
+ url: string;
4
+ newWindow: boolean;
5
+ }
@@ -0,0 +1,4 @@
1
+ export interface LinkInternal {
2
+ _type: 'linkInternal';
3
+ slug: string;
4
+ }
@@ -0,0 +1,2 @@
1
+ import type { PortableTextBlock } from '@sanity/types';
2
+ export type RichText = PortableTextBlock[];
File without changes
@@ -0,0 +1,6 @@
1
+ import type { SEO } from '../objects/SEO.js';
2
+ export interface Home {
3
+ _type: 'home';
4
+ modules: Array<object>;
5
+ seo: SEO;
6
+ }
File without changes
@@ -0,0 +1,6 @@
1
+ import type { SEO } from '../objects/SEO.js';
2
+ export interface NotFound {
3
+ _type: 'notFound';
4
+ modules: Array<object>;
5
+ seo: SEO;
6
+ }
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devite/nuxt-sanity",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "Optimizes the configuration for @nuxt/sanity and provides additional helper components.",
5
5
  "repository": "devite-io/nuxt-sanity",
6
6
  "license": "MIT",