]> Untitled Git - lemmy-ui.git/blobdiff - src/shared/components/private_message/create-private-message.tsx
Merge branch 'main' into route-data-refactor
[lemmy-ui.git] / src / shared / components / private_message / create-private-message.tsx
index 817cfd880d001181958b56edce97c340af245040..5b9eb9819840a20d54850d4d08d123b774484988 100644 (file)
@@ -10,6 +10,7 @@ import { InitialFetchRequest } from "../../interfaces";
 import { FirstLoadService } from "../../services/FirstLoadService";
 import { HttpService, RequestState } from "../../services/HttpService";
 import {
+  RouteDataResponse,
   getRecipientIdFromProps,
   myAuth,
   setIsoData,
@@ -19,6 +20,10 @@ import { HtmlTags } from "../common/html-tags";
 import { Spinner } from "../common/icon";
 import { PrivateMessageForm } from "./private-message-form";
 
+type CreatePrivateMessageData = RouteDataResponse<{
+  recipientDetailsResponse: GetPersonDetailsResponse;
+}>;
+
 interface CreatePrivateMessageState {
   siteRes: GetSiteResponse;
   recipientRes: RequestState<GetPersonDetailsResponse>;
@@ -30,7 +35,7 @@ export class CreatePrivateMessage extends Component<
   any,
   CreatePrivateMessageState
 > {
-  private isoData = setIsoData(this.context);
+  private isoData = setIsoData<CreatePrivateMessageData>(this.context);
   state: CreatePrivateMessageState = {
     siteRes: this.isoData.site_res,
     recipientRes: { state: "empty" },
@@ -47,7 +52,7 @@ export class CreatePrivateMessage extends Component<
     if (FirstLoadService.isFirstLoad) {
       this.state = {
         ...this.state,
-        recipientRes: this.isoData.routeData[0],
+        recipientRes: this.isoData.routeData.recipientDetailsResponse,
         isIsomorphic: true,
       };
     }
@@ -59,6 +64,25 @@ export class CreatePrivateMessage extends Component<
     }
   }
 
+  static async fetchInitialData({
+    client,
+    path,
+    auth,
+  }: InitialFetchRequest): Promise<CreatePrivateMessageData> {
+    const person_id = Number(path.split("/").pop());
+
+    const form: GetPersonDetails = {
+      person_id,
+      sort: "New",
+      saved_only: false,
+      auth,
+    };
+
+    return {
+      recipientDetailsResponse: await client.getPersonDetails(form),
+    };
+  }
+
   async fetchPersonDetails() {
     this.setState({
       recipientRes: { state: "loading" },
@@ -74,19 +98,6 @@ export class CreatePrivateMessage extends Component<
     });
   }
 
-  static fetchInitialData(
-    req: InitialFetchRequest
-  ): Promise<RequestState<any>>[] {
-    const person_id = Number(req.path.split("/").pop());
-    const form: GetPersonDetails = {
-      person_id,
-      sort: "New",
-      saved_only: false,
-      auth: req.auth,
-    };
-    return [req.client.getPersonDetails(form)];
-  }
-
   get documentTitle(): string {
     if (this.state.recipientRes.state == "success") {
       const name_ = this.state.recipientRes.data.person_view.person.name;