aboutsummaryrefslogtreecommitdiffstats
path: root/src/ts
diff options
context:
space:
mode:
authorArmand Philippot <git@armandphilippot.com>2021-12-15 18:18:49 +0100
committerArmand Philippot <git@armandphilippot.com>2021-12-15 18:18:49 +0100
commit102121498b45ef221191401f6216260f072f78a9 (patch)
treefb9ef1e648929b24bdbeefc719b5831458ef1a4b /src/ts
parent0bc323a777a607090af87636026f668104cf8a0c (diff)
chore: create single post view
Diffstat (limited to 'src/ts')
-rw-r--r--src/ts/types/articles.ts36
-rw-r--r--src/ts/types/blog.ts18
-rw-r--r--src/ts/types/comments.ts18
-rw-r--r--src/ts/types/seo.ts21
4 files changed, 88 insertions, 5 deletions
diff --git a/src/ts/types/articles.ts b/src/ts/types/articles.ts
index 5d5fbc5..664e237 100644
--- a/src/ts/types/articles.ts
+++ b/src/ts/types/articles.ts
@@ -1,4 +1,6 @@
+import { Comment, CommentsResponse } from './comments';
import { Cover, CoverResponse } from './cover';
+import { SEO } from './seo';
import { SubjectPreview, ThematicPreview } from './taxonomies';
export type ArticleDates = {
@@ -11,7 +13,7 @@ export type ArticlePreviewResponse = {
postsInSubject: SubjectPreview[] | null;
postsInThematics: ThematicPreview[] | null;
};
- commentCount: number;
+ commentCount: number | null;
contentParts: {
beforeMore: string;
};
@@ -25,7 +27,7 @@ export type ArticlePreviewResponse = {
};
export type ArticlePreview = {
- commentCount: number;
+ commentCount: number | null;
content: string;
databaseId: number;
date: ArticleDates;
@@ -36,3 +38,33 @@ export type ArticlePreview = {
thematics: ThematicPreview[] | [];
title: string;
};
+
+export type ArticleResponse = ArticlePreviewResponse & {
+ comments: CommentsResponse;
+ contentParts: {
+ afterMore: string;
+ };
+ seo: SEO;
+};
+
+export type Article = ArticlePreview & {
+ comments: Comment[];
+ intro: string;
+ seo: SEO;
+};
+
+export type PostByResponse = {
+ postBy: ArticleResponse;
+};
+
+export type FetchPostByReturn = (slug: string) => Promise<PostByResponse>;
+
+export type GetPostByReturn = (slug: string) => Promise<Article>;
+
+export type ArticleProps = {
+ post: Article;
+};
+
+export type ArticleSlug = {
+ slug: string;
+};
diff --git a/src/ts/types/blog.ts b/src/ts/types/blog.ts
index 366231e..76eaedb 100644
--- a/src/ts/types/blog.ts
+++ b/src/ts/types/blog.ts
@@ -1,4 +1,8 @@
-import { ArticlePreview, ArticlePreviewResponse } from './articles';
+import {
+ ArticlePreview,
+ ArticlePreviewResponse,
+ ArticleSlug,
+} from './articles';
import { PageInfo } from './pagination';
export type PostsListEdge = {
@@ -18,7 +22,7 @@ export type PostsList = {
pageInfo: PageInfo;
};
-export type fetchPostsListReturn = (
+export type FetchPostsListReturn = (
first?: number,
after?: string
) => Promise<PostsListResponse>;
@@ -28,8 +32,16 @@ type PostsListProps = {
after?: string;
};
-export type getPostsListReturn = (props: PostsListProps) => Promise<PostsList>;
+export type GetPostsListReturn = (props: PostsListProps) => Promise<PostsList>;
export type BlogPageProps = {
fallback: PostsList;
};
+
+export type AllPostsSlugReponse = {
+ posts: {
+ nodes: ArticleSlug[];
+ };
+};
+
+export type FetchAllPostsSlugReturn = () => Promise<ArticleSlug[]>;
diff --git a/src/ts/types/comments.ts b/src/ts/types/comments.ts
new file mode 100644
index 0000000..b196142
--- /dev/null
+++ b/src/ts/types/comments.ts
@@ -0,0 +1,18 @@
+export type CommentAuthor = {
+ gravatarUrl: string;
+ name: string;
+ url: string;
+};
+
+export type Comment = {
+ approved: '';
+ author: CommentAuthor;
+ commentId: number;
+ content: string;
+ date: string;
+ id: string;
+};
+
+export type CommentsResponse = {
+ nodes: Comment[];
+};
diff --git a/src/ts/types/seo.ts b/src/ts/types/seo.ts
new file mode 100644
index 0000000..fa30fe4
--- /dev/null
+++ b/src/ts/types/seo.ts
@@ -0,0 +1,21 @@
+export type SEO = {
+ title: string;
+ metaDesc: string;
+ readingTime: number;
+ opengraphAuthor: string;
+ opengraphDescription: string;
+ opengraphModifiedTime: string;
+ opengraphPublishedTime: string;
+ opengraphPublisher: string;
+ opengraphSiteName: string;
+ opengraphTitle: string;
+ opengraphType: string;
+ opengraphUrl: string;
+ opengraphImage: {
+ altText: string;
+ sourceUrl: string;
+ srcSet: string;
+ };
+ metaRobotsNofollow: string;
+ metaRobotsNoindex: string;
+};