Skip to content

Commit

Permalink
fix: new typescript and error support
Browse files Browse the repository at this point in the history
  • Loading branch information
Dawntraoz committed Feb 3, 2023
1 parent 4a600d9 commit 65a8101
Showing 1 changed file with 40 additions and 0 deletions.
40 changes: 40 additions & 0 deletions lib/src/runtime/composables/useAsyncStoryblok.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import { useStoryblokApi, useStoryblokBridge } from "@storyblok/vue";
import type { ISbStoryData, ISbError, ISbResult } from '@storyblok/vue';
import { useAsyncData, useState, onMounted, createError } from "#imports";

const useAsyncStoryblok = async (
url: string,
apiOptions = {},
bridgeOptions = {},
) => {
const uniqueKey = `${JSON.stringify(apiOptions)}${url}`;
const story = useState<ISbStoryData>(`${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<ISbResult, ISbError>(
`${uniqueKey}-asyncdata`,
async () => await storyblokApiInstance.get(`cdn/stories/${url}`, apiOptions),
);

// ToDo: Wait JS sdk 500 to 404 error
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;
};

export default useAsyncStoryblok;

0 comments on commit 65a8101

Please sign in to comment.