import { articleBySlugQuery, articlesCardQuery, articlesEndCursorQuery, articlesQuery, articlesSlugQuery, totalArticlesQuery, } from '../../services/graphql/articles.query'; import { commentsQuery } from '../../services/graphql/comments.query'; import { thematicBySlugQuery, thematicsListQuery, thematicsSlugQuery, totalThematicsQuery, } from '../../services/graphql/thematics.query'; import { topicBySlugQuery, topicsListQuery, topicsSlugQuery, totalTopicsQuery, } from '../../services/graphql/topics.query'; import { Slug } from '../app'; import { RawComment } from '../raw-data'; import { GraphQLEdges, GraphQLEdgesInput, GraphQLNodes, GraphQLPageInfo, } from './generics'; //=========================================================================== // Existing queries list //=========================================================================== export type Queries = | typeof articlesQuery | typeof articleBySlugQuery | typeof articlesCardQuery | typeof articlesEndCursorQuery | typeof articlesSlugQuery | typeof commentsQuery | typeof thematicBySlugQuery | typeof thematicsListQuery | typeof thematicsSlugQuery | typeof topicBySlugQuery | typeof topicsListQuery | typeof topicsSlugQuery | typeof totalArticlesQuery | typeof totalThematicsQuery | typeof totalTopicsQuery; //=========================================================================== // Queries response types //=========================================================================== export type ArticleResponse = { post: T; }; export type ArticlesResponse = { posts: T; }; export type CommentsResponse = { comments: T; }; export type ThematicResponse = { thematic: T; }; export type ThematicsResponse = { thematics: T; }; export type TopicResponse = { topic: T; }; export type TopicsResponse = { topics: T; }; export type EdgesResponse = { edges: GraphQLEdges[]; pageInfo: GraphQLPageInfo; }; export type EndCursorResponse = { pageInfo: Pick; }; export type QueriesResponseMap = { [articleBySlugQuery]: ArticleResponse; [articlesCardQuery]: ArticlesResponse>; [articlesEndCursorQuery]: ArticlesResponse; [articlesQuery]: ArticlesResponse>; [articlesSlugQuery]: ArticlesResponse>; [commentsQuery]: CommentsResponse>; [thematicBySlugQuery]: ThematicResponse; [thematicsListQuery]: ThematicsResponse>; [thematicsSlugQuery]: ThematicsResponse>; [topicBySlugQuery]: TopicResponse; [topicsListQuery]: TopicsResponse>; [topicsSlugQuery]: TopicsResponse>; [totalArticlesQuery]: ArticlesResponse; [totalThematicsQuery]: ThematicsResponse; [totalTopicsQuery]: TopicsResponse; }; //=========================================================================== // Queries input types //=========================================================================== export type QueryEdges = Pick; export type ContentId = { contentId: number; }; export type Search = { search?: string; }; export type QueriesInputMap = { [articleBySlugQuery]: Slug; [articlesCardQuery]: QueryEdges & Search; [articlesEndCursorQuery]: QueryEdges & Search; [articlesQuery]: QueryEdges & Search; [articlesSlugQuery]: QueryEdges & Search; [commentsQuery]: ContentId & QueryEdges; [thematicBySlugQuery]: Slug; [thematicsListQuery]: QueryEdges & Search; [thematicsSlugQuery]: QueryEdges & Search; [topicBySlugQuery]: Slug; [topicsListQuery]: QueryEdges & Search; [topicsSlugQuery]: QueryEdges & Search; [totalArticlesQuery]: Search; [totalThematicsQuery]: null; [totalTopicsQuery]: null; }; export type CommentPage = { comments: RawComment[]; hasNextPage: boolean; endCursor: string; };