From: Dessalines Date: Mon, 18 Oct 2021 01:44:39 +0000 (-0400) Subject: Fixing cross-posts showing on initial load. Fixes #457 (#464) X-Git-Url: http://these/git/%22https:/nerdica.net/%7B%24%7B%60data:application/static/%7BinboxRss%7D?a=commitdiff_plain;h=9068a6415df4bf50bdb9200ebd17269b9b22e184;p=lemmy-ui.git Fixing cross-posts showing on initial load. Fixes #457 (#464) --- diff --git a/src/shared/components/post/post-listings.tsx b/src/shared/components/post/post-listings.tsx index 12d5193..8bdb569 100644 --- a/src/shared/components/post/post-listings.tsx +++ b/src/shared/components/post/post-listings.tsx @@ -13,18 +13,35 @@ interface PostListingsProps { enableNsfw: boolean; } -export class PostListings extends Component { - private duplicatesMap = new Map(); +interface PostListingsState { + posts: PostView[]; +} + +export class PostListings extends Component< + PostListingsProps, + PostListingsState +> { + duplicatesMap = new Map(); + + private emptyState: PostListingsState = { + posts: [], + }; constructor(props: any, context: any) { super(props, context); + this.state = this.emptyState; + if (this.props.removeDuplicates) { + this.state.posts = this.removeDuplicates(); + } else { + this.state.posts = this.props.posts; + } } render() { return (
- {this.props.posts.length > 0 ? ( - this.outer().map(post_view => ( + {this.state.posts.length > 0 ? ( + this.state.posts.map(post_view => ( <> { ); } - outer(): PostView[] { - let out = this.props.posts; - if (this.props.removeDuplicates) { - out = this.removeDuplicates(out); - } - - return out; - } + removeDuplicates(): PostView[] { + // Must use a spread to clone the props, because splice will fail below otherwise. + let posts = [...this.props.posts]; - removeDuplicates(posts: PostView[]): PostView[] { // A map from post url to list of posts (dupes) let urlMap = new Map();