summaryrefslogtreecommitdiffstats
path: root/src/ts/types/raw-data.ts
blob: 022016ecca8d0e23c0b8a95eadbf7de3b0ebd925 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/**
 * Types for raw data coming from GraphQL API.
 */

import { ContentKind } from './app';
import { GraphQLNode, GraphQLPageInfo } from './graphql/generics';

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: GraphQLNode<RawAuthor<'comment'>>;
  content: string;
  databaseId: number;
  date: string;
  parentDatabaseId: number;
};

export type RawCommentsPage = {
  comments: RawComment[];
  hasNextPage: boolean;
  endCursor: string;
};

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?: GraphQLNode<RawAuthor<'page'>>;
  contentParts: ContentParts;
  databaseId: number;
  date: string;
  featuredImage: GraphQLNode<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<GraphQLPageInfo, 'total'>;
};