diff --git a/src/shared/components/post/post-listings.tsx b/src/shared/components/post/post-listings.tsx index 12d51936..8bdb5698 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); - } + removeDuplicates(): PostView[] { + // Must use a spread to clone the props, because splice will fail below otherwise. + let posts = [...this.props.posts]; - return out; - } - - removeDuplicates(posts: PostView[]): PostView[] { // A map from post url to list of posts (dupes) let urlMap = new Map();