diff options
Diffstat (limited to 'src/utils/hooks/use-comments.tsx')
| -rw-r--r-- | src/utils/hooks/use-comments.tsx | 33 | 
1 files changed, 33 insertions, 0 deletions
| diff --git a/src/utils/hooks/use-comments.tsx b/src/utils/hooks/use-comments.tsx new file mode 100644 index 0000000..cc9e560 --- /dev/null +++ b/src/utils/hooks/use-comments.tsx @@ -0,0 +1,33 @@ +import { fetchAPI, getAPIUrl } from '@services/graphql/api'; +import { +  buildCommentsTree, +  getCommentFromRawData, +} from '@services/graphql/comments'; +import { commentsQuery } from '@services/graphql/comments.query'; +import { Comment } from '@ts/types/app'; +import { RawComment } from '@ts/types/raw-data'; +import useSWR from 'swr'; + +/** + * Retrieve the comments of a page/article. + * @param contentId - A page/article id. + * @returns {Comment[]|undefined} + */ +const useComments = ( +  contentId: string | number, +  fallback?: Comment[] +): Comment[] | undefined => { +  const { data } = useSWR( +    { api: getAPIUrl(), query: commentsQuery, variables: { contentId } }, +    fetchAPI<RawComment, typeof commentsQuery>, +    { fallback } +  ); + +  const comments = data?.comments.nodes.map((comment) => +    getCommentFromRawData(comment) +  ); + +  return comments ? buildCommentsTree(comments) : undefined; +}; + +export default useComments; | 
