diff --git a/lib/src/runtime/composables/useAsyncStoryblok.js b/lib/src/runtime/composables/useAsyncStoryblok.js deleted file mode 100644 index 14e77482..00000000 --- a/lib/src/runtime/composables/useAsyncStoryblok.js +++ /dev/null @@ -1,28 +0,0 @@ -import { useStoryblokApi, useStoryblokBridge } from "@storyblok/vue"; -import { useAsyncData, useState, onMounted } from "#imports"; - -const useAsyncStoryblok = async (url, apiOptions = {}, bridgeOptions = {}) => { - const uniqueKey = `${JSON.stringify(apiOptions)}${url}`; - const story = useState(`${uniqueKey}-state`, () => null); - const storyblokApiInstance = useStoryblokApi(); - - onMounted(() => { - if (story.value && story.value.id) { - useStoryblokBridge( - story.value.id, - (evStory) => (story.value = evStory), - bridgeOptions - ); - } - }); - - const { data } = await useAsyncData( - `${uniqueKey}-asyncdata`, - async () => await storyblokApiInstance.get(`cdn/stories/${url}`, apiOptions) - ); - story.value = data.value.data.story; - - return story; -}; - -export default useAsyncStoryblok; diff --git a/lib/src/runtime/composables/useAsyncStoryblok.ts b/lib/src/runtime/composables/useAsyncStoryblok.ts new file mode 100644 index 00000000..18f7b8c0 --- /dev/null +++ b/lib/src/runtime/composables/useAsyncStoryblok.ts @@ -0,0 +1,36 @@ +import { useStoryblokApi, useStoryblokBridge } from "@storyblok/vue"; +import type { ISbStoriesParams, StoryblokBridgeConfigV2, ISbStoryData, ISbError, ISbResult } from '@storyblok/vue'; +import { useAsyncData, useState, onMounted, createError } from "#imports"; + +export const useAsyncStoryblok = async ( + url: string, + apiOptions: ISbStoriesParams = {}, + bridgeOptions: StoryblokBridgeConfigV2 = {} +) => { + const uniqueKey = `${JSON.stringify(apiOptions)}${url}`; + const story = useState(`${uniqueKey}-state`, () => ({} as ISbStoryData)); + const storyblokApiInstance = useStoryblokApi(); + + onMounted(() => { + if (story.value && story.value.id) { + useStoryblokBridge( + story.value.id, + evStory => (story.value = evStory), + bridgeOptions, + ); + } + }); + + const { data, error } = await useAsyncData( + `${uniqueKey}-asyncdata`, + () => storyblokApiInstance.get(`cdn/stories/${url}`, apiOptions), + ); + + if (error.value?.response.status >= 400 && error.value?.response.status < 600) { + throw createError({ statusCode: error.value?.response.status, statusMessage: error.value?.message.message }); + } + + story.value = data.value?.data.story; + + return story; +};