]> Untitled Git - lemmy-ui.git/blob - src/shared/interfaces.ts
Merge branch 'main' into route-data-refactor
[lemmy-ui.git] / src / shared / interfaces.ts
1 import { CommentView, GetSiteResponse } from "lemmy-js-client";
2 import type { ParsedQs } from "qs";
3 import { RequestState, WrappedLemmyHttp } from "./services/HttpService";
4 import { ErrorPageData } from "./utils";
5
6 /**
7  * This contains serialized data, it needs to be deserialized before use.
8  */
9 export interface IsoData<T extends Record<string, RequestState<any>> = any> {
10   path: string;
11   routeData: T;
12   site_res: GetSiteResponse;
13   errorPageData?: ErrorPageData;
14 }
15
16 export type IsoDataOptionalSite<
17   T extends Record<string, RequestState<any>> = any
18 > = Partial<IsoData<T>> &
19   Pick<IsoData<T>, Exclude<keyof IsoData<T>, "site_res">>;
20
21 export interface ILemmyConfig {
22   wsHost?: string;
23 }
24
25 declare global {
26   interface Window {
27     isoData: IsoData;
28     lemmyConfig?: ILemmyConfig;
29   }
30 }
31
32 export interface InitialFetchRequest<T extends ParsedQs = ParsedQs> {
33   auth?: string;
34   client: WrappedLemmyHttp;
35   path: string;
36   query: T;
37   site: GetSiteResponse;
38 }
39
40 export interface PostFormParams {
41   name?: string;
42   url?: string;
43   body?: string;
44 }
45
46 export enum CommentViewType {
47   Tree,
48   Flat,
49 }
50
51 export enum DataType {
52   Post,
53   Comment,
54 }
55
56 export enum BanType {
57   Community,
58   Site,
59 }
60
61 export enum PersonDetailsView {
62   Overview = "Overview",
63   Comments = "Comments",
64   Posts = "Posts",
65   Saved = "Saved",
66 }
67
68 export enum PurgeType {
69   Person,
70   Community,
71   Post,
72   Comment,
73 }
74
75 export enum VoteType {
76   Upvote,
77   Downvote,
78 }
79
80 export interface CommentNodeI {
81   comment_view: CommentView;
82   children: Array<CommentNodeI>;
83   depth: number;
84 }