summaryrefslogtreecommitdiffstats
path: root/src/utils
diff options
context:
space:
mode:
authorArmand Philippot <git@armandphilippot.com>2022-07-22 18:32:53 +0200
committerArmand Philippot <git@armandphilippot.com>2022-07-22 18:32:53 +0200
commitfe3922d039bdb5d4c063bc73543abc53a57d8464 (patch)
treec845ee49a7f722f25e59222145f491fa3079e108 /src/utils
parentd8fc8d272bffb5c59a17ff774c910b47749dc650 (diff)
fix(comments): refresh comments on changes or new comment
Diffstat (limited to 'src/utils')
-rw-r--r--src/utils/hooks/use-comments.tsx33
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;