import { Component, linkEvent } from 'inferno'; import { i18n } from '../i18next'; import { Post, Comment, SortType, UserDetailsResponse } from 'lemmy-js-client'; import { UserDetailsView } from '../interfaces'; import { commentsToFlatNodes, setupTippy } from '../utils'; import { PostListing } from './post-listing'; import { CommentNodes } from './comment-nodes'; interface UserDetailsProps { userRes: UserDetailsResponse; page: number; limit: number; sort: SortType; enableDownvotes: boolean; enableNsfw: boolean; view: UserDetailsView; onPageChange(page: number): number | any; } interface UserDetailsState {} export class UserDetails extends Component { constructor(props: any, context: any) { super(props, context); } // TODO needed here? componentDidMount() { setupTippy(); } // TODO wut? // componentDidUpdate(lastProps: UserDetailsProps) { // for (const key of Object.keys(lastProps)) { // if (lastProps[key] !== this.props[key]) { // this.fetchUserData(); // break; // } // } // } render() { return (
{this.viewSelector(this.props.view)} {this.paginator()}
); } viewSelector(view: UserDetailsView) { if (view === UserDetailsView.Overview || view === UserDetailsView.Saved) { return this.overview(); } else if (view === UserDetailsView.Comments) { return this.comments(); } else if (view === UserDetailsView.Posts) { return this.posts(); } else { return null; } } overview() { const comments = this.props.userRes.comments.map((c: Comment) => { return { type: 'comments', data: c }; }); const posts = this.props.userRes.posts.map((p: Post) => { return { type: 'posts', data: p }; }); const combined: { type: string; data: Comment | Post }[] = [ ...comments, ...posts, ]; // Sort it if (this.props.sort === SortType.New) { combined.sort((a, b) => b.data.published.localeCompare(a.data.published)); } else { combined.sort((a, b) => b.data.score - a.data.score); } return (
{combined.map(i => ( <>
{i.type === 'posts' ? ( ) : ( )}

))}
); } comments() { return (
); } posts() { return (
{this.props.userRes.posts.map(post => ( <>
))}
); } paginator() { return (
{this.props.page > 1 && ( )} {this.props.userRes.comments.length + this.props.userRes.posts.length > 0 && ( )}
); } nextPage(i: UserDetails) { i.props.onPageChange(i.props.page + 1); } prevPage(i: UserDetails) { i.props.onPageChange(i.props.page - 1); } }