]> Untitled Git - lemmy-ui.git/blobdiff - src/shared/components/person/person-details.tsx
component classes v2
[lemmy-ui.git] / src / shared / components / person / person-details.tsx
index 910ea986b0ef7eab48636d6b2a3de1417ba682cb..6efebaa18de65c508eff52461d526e96ea9d38c6 100644 (file)
@@ -1,11 +1,40 @@
 import { Component } from "inferno";
 import {
+  AddAdmin,
+  AddModToCommunity,
+  BanFromCommunity,
+  BanPerson,
+  BlockPerson,
+  CommentId,
   CommentView,
+  CreateComment,
+  CreateCommentLike,
+  CreateCommentReport,
+  CreatePostLike,
+  CreatePostReport,
+  DeleteComment,
+  DeletePost,
+  DistinguishComment,
+  EditComment,
+  EditPost,
+  FeaturePost,
+  GetComments,
   GetPersonDetailsResponse,
   Language,
+  LockPost,
+  MarkCommentReplyAsRead,
+  MarkPersonMentionAsRead,
   PersonView,
   PostView,
+  PurgeComment,
+  PurgePerson,
+  PurgePost,
+  RemoveComment,
+  RemovePost,
+  SaveComment,
+  SavePost,
   SortType,
+  TransferCommunity,
 } from "lemmy-js-client";
 import { CommentViewType, PersonDetailsView } from "../../interfaces";
 import { commentsToFlatNodes, setupTippy } from "../../utils";
@@ -15,16 +44,45 @@ import { PostListing } from "../post/post-listing";
 
 interface PersonDetailsProps {
   personRes: GetPersonDetailsResponse;
+  finished: Map<CommentId, boolean | undefined>;
   admins: PersonView[];
   allLanguages: Language[];
   siteLanguages: number[];
-  page: bigint;
-  limit: bigint;
+  page: number;
+  limit: number;
   sort: SortType;
   enableDownvotes: boolean;
   enableNsfw: boolean;
   view: PersonDetailsView;
-  onPageChange(page: bigint): bigint | any;
+  onPageChange(page: number): number | any;
+  onSaveComment(form: SaveComment): void;
+  onCommentReplyRead(form: MarkCommentReplyAsRead): void;
+  onPersonMentionRead(form: MarkPersonMentionAsRead): void;
+  onCreateComment(form: CreateComment): void;
+  onEditComment(form: EditComment): void;
+  onCommentVote(form: CreateCommentLike): void;
+  onBlockPerson(form: BlockPerson): void;
+  onDeleteComment(form: DeleteComment): void;
+  onRemoveComment(form: RemoveComment): void;
+  onDistinguishComment(form: DistinguishComment): void;
+  onAddModToCommunity(form: AddModToCommunity): void;
+  onAddAdmin(form: AddAdmin): void;
+  onBanPersonFromCommunity(form: BanFromCommunity): void;
+  onBanPerson(form: BanPerson): void;
+  onTransferCommunity(form: TransferCommunity): void;
+  onFetchChildren?(form: GetComments): void;
+  onCommentReport(form: CreateCommentReport): void;
+  onPurgePerson(form: PurgePerson): void;
+  onPurgeComment(form: PurgeComment): void;
+  onPostEdit(form: EditPost): void;
+  onPostVote(form: CreatePostLike): void;
+  onPostReport(form: CreatePostReport): void;
+  onLockPost(form: LockPost): void;
+  onDeletePost(form: DeletePost): void;
+  onRemovePost(form: RemovePost): void;
+  onSavePost(form: SavePost): void;
+  onFeaturePost(form: FeaturePost): void;
+  onPurgePost(form: PurgePost): void;
 }
 
 enum ItemEnum {
@@ -36,7 +94,7 @@ type ItemType = {
   type_: ItemEnum;
   view: CommentView | PostView;
   published: string;
-  score: bigint;
+  score: number;
 };
 
 export class PersonDetails extends Component<PersonDetailsProps, any> {
@@ -49,19 +107,9 @@ export class PersonDetails extends Component<PersonDetailsProps, any> {
     setupTippy();
   }
 
-  // TODO wut?
-  // componentDidUpdate(lastProps: UserDetailsProps) {
-  //   for (const key of Object.keys(lastProps)) {
-  //     if (lastProps[key] !== this.props[key]) {
-  //       this.fetchUserData();
-  //       break;
-  //     }
-  //   }
-  // }
-
   render() {
     return (
-      <div>
+      <div className="person-details">
         {this.viewSelector(this.props.view)}
 
         <Paginator page={this.props.page} onChange={this.handlePageChange} />
@@ -87,12 +135,13 @@ export class PersonDetails extends Component<PersonDetailsProps, any> {
   renderItemType(i: ItemType) {
     switch (i.type_) {
       case ItemEnum.Comment: {
-        let c = i.view as CommentView;
+        const c = i.view as CommentView;
         return (
           <CommentNodes
             key={i.id}
             nodes={[{ comment_view: c, children: [], depth: 0 }]}
             viewType={CommentViewType.Flat}
+            finished={this.props.finished}
             admins={this.props.admins}
             noBorder
             noIndent
@@ -101,11 +150,30 @@ export class PersonDetails extends Component<PersonDetailsProps, any> {
             enableDownvotes={this.props.enableDownvotes}
             allLanguages={this.props.allLanguages}
             siteLanguages={this.props.siteLanguages}
+            onCommentReplyRead={this.props.onCommentReplyRead}
+            onPersonMentionRead={this.props.onPersonMentionRead}
+            onCreateComment={this.props.onCreateComment}
+            onEditComment={this.props.onEditComment}
+            onCommentVote={this.props.onCommentVote}
+            onBlockPerson={this.props.onBlockPerson}
+            onSaveComment={this.props.onSaveComment}
+            onDeleteComment={this.props.onDeleteComment}
+            onRemoveComment={this.props.onRemoveComment}
+            onDistinguishComment={this.props.onDistinguishComment}
+            onAddModToCommunity={this.props.onAddModToCommunity}
+            onAddAdmin={this.props.onAddAdmin}
+            onBanPersonFromCommunity={this.props.onBanPersonFromCommunity}
+            onBanPerson={this.props.onBanPerson}
+            onTransferCommunity={this.props.onTransferCommunity}
+            onFetchChildren={this.props.onFetchChildren}
+            onCommentReport={this.props.onCommentReport}
+            onPurgePerson={this.props.onPurgePerson}
+            onPurgeComment={this.props.onPurgeComment}
           />
         );
       }
       case ItemEnum.Post: {
-        let p = i.view as PostView;
+        const p = i.view as PostView;
         return (
           <PostListing
             key={i.id}
@@ -116,6 +184,22 @@ export class PersonDetails extends Component<PersonDetailsProps, any> {
             enableNsfw={this.props.enableNsfw}
             allLanguages={this.props.allLanguages}
             siteLanguages={this.props.siteLanguages}
+            onPostEdit={this.props.onPostEdit}
+            onPostVote={this.props.onPostVote}
+            onPostReport={this.props.onPostReport}
+            onBlockPerson={this.props.onBlockPerson}
+            onLockPost={this.props.onLockPost}
+            onDeletePost={this.props.onDeletePost}
+            onRemovePost={this.props.onRemovePost}
+            onSavePost={this.props.onSavePost}
+            onFeaturePost={this.props.onFeaturePost}
+            onPurgePerson={this.props.onPurgePerson}
+            onPurgePost={this.props.onPurgePost}
+            onBanPersonFromCommunity={this.props.onBanPersonFromCommunity}
+            onBanPerson={this.props.onBanPerson}
+            onAddModToCommunity={this.props.onAddModToCommunity}
+            onAddAdmin={this.props.onAddAdmin}
+            onTransferCommunity={this.props.onTransferCommunity}
           />
         );
       }
@@ -126,14 +210,14 @@ export class PersonDetails extends Component<PersonDetailsProps, any> {
 
   overview() {
     let id = 0;
-    let comments: ItemType[] = this.props.personRes.comments.map(r => ({
+    const comments: ItemType[] = this.props.personRes.comments.map(r => ({
       id: id++,
       type_: ItemEnum.Comment,
       view: r,
       published: r.comment.published,
       score: r.counts.score,
     }));
-    let posts: ItemType[] = this.props.personRes.posts.map(r => ({
+    const posts: ItemType[] = this.props.personRes.posts.map(r => ({
       id: id++,
       type_: ItemEnum.Post,
       view: r,
@@ -141,7 +225,7 @@ export class PersonDetails extends Component<PersonDetailsProps, any> {
       score: r.counts.score,
     }));
 
-    let combined = [...comments, ...posts];
+    const combined = [...comments, ...posts];
 
     // Sort it
     if (this.props.sort === "New") {
@@ -167,12 +251,32 @@ export class PersonDetails extends Component<PersonDetailsProps, any> {
           nodes={commentsToFlatNodes(this.props.personRes.comments)}
           viewType={CommentViewType.Flat}
           admins={this.props.admins}
+          finished={this.props.finished}
           noIndent
           showCommunity
           showContext
           enableDownvotes={this.props.enableDownvotes}
           allLanguages={this.props.allLanguages}
           siteLanguages={this.props.siteLanguages}
+          onCommentReplyRead={this.props.onCommentReplyRead}
+          onPersonMentionRead={this.props.onPersonMentionRead}
+          onCreateComment={this.props.onCreateComment}
+          onEditComment={this.props.onEditComment}
+          onCommentVote={this.props.onCommentVote}
+          onBlockPerson={this.props.onBlockPerson}
+          onSaveComment={this.props.onSaveComment}
+          onDeleteComment={this.props.onDeleteComment}
+          onRemoveComment={this.props.onRemoveComment}
+          onDistinguishComment={this.props.onDistinguishComment}
+          onAddModToCommunity={this.props.onAddModToCommunity}
+          onAddAdmin={this.props.onAddAdmin}
+          onBanPersonFromCommunity={this.props.onBanPersonFromCommunity}
+          onBanPerson={this.props.onBanPerson}
+          onTransferCommunity={this.props.onTransferCommunity}
+          onFetchChildren={this.props.onFetchChildren}
+          onCommentReport={this.props.onCommentReport}
+          onPurgePerson={this.props.onPurgePerson}
+          onPurgeComment={this.props.onPurgeComment}
         />
       </div>
     );
@@ -191,6 +295,22 @@ export class PersonDetails extends Component<PersonDetailsProps, any> {
               enableNsfw={this.props.enableNsfw}
               allLanguages={this.props.allLanguages}
               siteLanguages={this.props.siteLanguages}
+              onPostEdit={this.props.onPostEdit}
+              onPostVote={this.props.onPostVote}
+              onPostReport={this.props.onPostReport}
+              onBlockPerson={this.props.onBlockPerson}
+              onLockPost={this.props.onLockPost}
+              onDeletePost={this.props.onDeletePost}
+              onRemovePost={this.props.onRemovePost}
+              onSavePost={this.props.onSavePost}
+              onFeaturePost={this.props.onFeaturePost}
+              onPurgePerson={this.props.onPurgePerson}
+              onPurgePost={this.props.onPurgePost}
+              onBanPersonFromCommunity={this.props.onBanPersonFromCommunity}
+              onBanPerson={this.props.onBanPerson}
+              onAddModToCommunity={this.props.onAddModToCommunity}
+              onAddAdmin={this.props.onAddAdmin}
+              onTransferCommunity={this.props.onTransferCommunity}
             />
             <hr className="my-3" />
           </>
@@ -199,7 +319,7 @@ export class PersonDetails extends Component<PersonDetailsProps, any> {
     );
   }
 
-  handlePageChange(val: bigint) {
+  handlePageChange(val: number) {
     this.props.onPageChange(val);
   }
 }