diff --git a/lib/src/runtime/composables/useAsyncStoryblok.ts b/lib/src/runtime/composables/useAsyncStoryblok.ts index 5ad6df80..0fbb6f17 100644 --- a/lib/src/runtime/composables/useAsyncStoryblok.ts +++ b/lib/src/runtime/composables/useAsyncStoryblok.ts @@ -1,6 +1,6 @@ import { useStoryblokApi, useStoryblokBridge } from "@storyblok/vue"; -import type { ISbStoriesParams, StoryblokBridgeConfigV2, ISbStoryData, ISbError, ISbResult } from '@storyblok/vue'; -import { useAsyncData, useState, onMounted, createError } from "#imports"; +import type { ISbStoriesParams, StoryblokBridgeConfigV2, ISbStoryData } from '@storyblok/vue'; +import { useState, onMounted } from "#imports"; export const useAsyncStoryblok = async ( url: string, @@ -8,7 +8,7 @@ export const useAsyncStoryblok = async ( bridgeOptions: StoryblokBridgeConfigV2 = {} ) => { const uniqueKey = `${JSON.stringify(apiOptions)}${url}`; - const story = useState(`${uniqueKey}-state`, () => ({} as ISbStoryData)); + const story = useState(`${uniqueKey}-state`); const storyblokApiInstance = useStoryblokApi(); onMounted(() => { @@ -21,16 +21,13 @@ export const useAsyncStoryblok = async ( } }); - const { data, error } = await useAsyncData( - `${uniqueKey}-asyncdata`, - () => storyblokApiInstance.get(`cdn/stories/${url}`, apiOptions), - ); - - if (error.value?.response && error.value?.response.status >= 400 && error.value?.response.status < 600) { - throw createError({ statusCode: error.value?.response.status, statusMessage: error.value?.message?.message || 'Something went wrong when fetching from storyblok.' }); - } - - story.value = data.value?.data.story; + if (!story.value) { + const { data } = await storyblokApiInstance.get( + `cdn/stories/${url}`, + apiOptions + ); + story.value = data.story; + }; return story; }; diff --git a/package-lock.json b/package-lock.json index 88e8408a..b364bd3a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "devDependencies": { "@commitlint/cli": "^17.6.1", "@commitlint/config-conventional": "^17.6.1", - "@nuxtjs/eslint-config-typescript": "*", + "@nuxtjs/eslint-config-typescript": "latest", "eslint": "^8.39.0", "eslint-config-prettier": "^8.8.0", "eslint-plugin-vue": "^9.11.0", @@ -33,7 +33,7 @@ "devDependencies": { "@babel/core": "^7.21.5", "@cypress/vite-dev-server": "^5.0.5", - "@nuxt/module-builder": "*", + "@nuxt/module-builder": "latest", "babel-jest": "^29.4.3", "cypress": "^12.11.0", "eslint-plugin-cypress": "^2.13.3", diff --git a/playground/pages/[...slug].vue b/playground/pages/[...slug].vue index 9542780c..f7663a9f 100644 --- a/playground/pages/[...slug].vue +++ b/playground/pages/[...slug].vue @@ -9,7 +9,7 @@ try { resolve_relations: ["popular-articles.articles"] }); } catch (error) { - console.log(error); + story.value = error; } diff --git a/playground/pages/error.vue b/playground/pages/error.vue new file mode 100644 index 00000000..5879f200 --- /dev/null +++ b/playground/pages/error.vue @@ -0,0 +1,7 @@ + + + diff --git a/playground/pages/index.vue b/playground/pages/index.vue index 52ecf1f8..8ef0ca9d 100644 --- a/playground/pages/index.vue +++ b/playground/pages/index.vue @@ -9,6 +9,7 @@ const richText = computed(() => renderRichText(story.value.content.richText));