From dcd2a7ab382fece8e0ae2979aad4a180b6a105e1 Mon Sep 17 00:00:00 2001 From: Armand Philippot Date: Thu, 16 Nov 2023 18:16:09 +0100 Subject: build(components, hooks): fix type errors introduced by deps upgrade Since #7e37f2b Typescript was complaining about some types. --- src/utils/hooks/use-article.ts | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/utils/hooks/use-article.ts (limited to 'src/utils/hooks/use-article.ts') diff --git a/src/utils/hooks/use-article.ts b/src/utils/hooks/use-article.ts new file mode 100644 index 0000000..5cf0e51 --- /dev/null +++ b/src/utils/hooks/use-article.ts @@ -0,0 +1,37 @@ +import useSWR from 'swr'; +import { + articleBySlugQuery, + fetchAPI, + getArticleFromRawData, +} from '../../services/graphql'; +import type { Article, RawArticle } from '../../types'; + +export type UseArticleConfig = { + /** + * A fallback article + */ + fallback?: Article; + /** + * The article slug + */ + slug?: string; +}; + +/** + * Retrieve an article by slug. + * + * @param {UseArticleConfig} config - The config. + * @returns {Article|undefined} The matching article if it exists. + */ +export const useArticle = ({ + slug, + fallback, +}: UseArticleConfig): Article | undefined => { + const { data } = useSWR( + slug ? { query: articleBySlugQuery, variables: { slug } } : null, + fetchAPI, + {} + ); + + return data ? getArticleFromRawData(data.post) : fallback; +}; -- cgit v1.2.3