aboutsummaryrefslogtreecommitdiffstats
path: root/src/ts/types/raw-data.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/ts/types/raw-data.ts')
-rw-r--r--src/ts/types/raw-data.ts105
1 files changed, 105 insertions, 0 deletions
diff --git a/src/ts/types/raw-data.ts b/src/ts/types/raw-data.ts
new file mode 100644
index 0000000..dc3db90
--- /dev/null
+++ b/src/ts/types/raw-data.ts
@@ -0,0 +1,105 @@
+/**
+ * Types for raw data coming from GraphQL API.
+ */
+
+import { NodeResponse, PageInfo } from '@services/graphql/api';
+import { ContentKind } from './app';
+
+export type ACFPosts = {
+ postsInThematic?: RawThematicPreview[];
+ postsInTopic?: RawTopicPreview[];
+};
+
+export type ACFThematics = {
+ postsInThematic: RawArticle[];
+};
+
+export type ACFTopics = {
+ officialWebsite: string;
+ postsInTopic: RawArticle[];
+};
+
+export type ContentParts = {
+ afterMore: string;
+ beforeMore: string;
+};
+
+export type Info = {
+ wordsCount: number;
+};
+
+export type RawAuthor<T extends ContentKind> = {
+ description?: T extends 'comment' ? never : string;
+ gravatarUrl?: string;
+ name: string;
+ url?: string;
+};
+
+export type RawComment = {
+ approved: boolean;
+ author: NodeResponse<RawAuthor<'comment'>>;
+ content: string;
+ databaseId: number;
+ date: string;
+ parentDatabaseId: number;
+};
+
+export type RawCover = {
+ altText: string;
+ mediaDetails: {
+ width: number;
+ height: number;
+ };
+ sourceUrl: string;
+ title?: string;
+};
+
+export type RawArticle = RawPage & {
+ acfPosts: ACFPosts;
+ commentCount: number | null;
+};
+
+export type RawArticlePreview = Pick<
+ RawArticle,
+ 'databaseId' | 'date' | 'featuredImage' | 'slug' | 'title'
+>;
+
+export type RawPage = {
+ author?: NodeResponse<RawAuthor<'page'>>;
+ contentParts: ContentParts;
+ databaseId: number;
+ date: string;
+ featuredImage: NodeResponse<RawCover> | null;
+ info: Info;
+ modified: string;
+ seo?: RawSEO;
+ slug: string;
+ title: string;
+};
+
+export type RawSEO = {
+ metaDesc: string;
+ title: string;
+};
+
+export type RawThematic = RawPage & {
+ acfThematics: ACFThematics;
+};
+
+export type RawThematicPreview = Pick<
+ RawThematic,
+ 'databaseId' | 'featuredImage' | 'slug' | 'title'
+>;
+
+export type RawTopic = RawPage & {
+ acfTopics: ACFTopics;
+};
+
+export type RawTopicPreview = Pick<
+ RawTopic,
+ 'databaseId' | 'featuredImage' | 'slug' | 'title'
+>;
+
+export type TotalItems = {
+ pageInfo: Pick<PageInfo, 'total'>;
+};