X-Git-Url: http://these/git/?a=blobdiff_plain;f=src%2Fshared%2Fcomponents%2Fpost%2Fpost-listings.tsx;h=fc77f505a11ff76119bd52658dc4a116bb04603b;hb=afafb777b4be09d70cd8f56f8d236d98ac63ba6e;hp=12d519368319a5e8dd0748e7647107df44d6f271;hpb=4b23b78efeb71d36ed595aa975e1e2dd71ccaf2a;p=lemmy-ui.git diff --git a/src/shared/components/post/post-listings.tsx b/src/shared/components/post/post-listings.tsx index 12d5193..fc77f50 100644 --- a/src/shared/components/post/post-listings.tsx +++ b/src/shared/components/post/post-listings.tsx @@ -1,45 +1,111 @@ import { Component } from "inferno"; import { T } from "inferno-i18next-dess"; import { Link } from "inferno-router"; -import { PostView } from "lemmy-js-client"; -import { i18n } from "../../i18next"; +import { + AddAdmin, + AddModToCommunity, + BanFromCommunity, + BanPerson, + BlockPerson, + CreatePostLike, + CreatePostReport, + DeletePost, + EditPost, + FeaturePost, + Language, + LockPost, + MarkPostAsRead, + PostView, + PurgePerson, + PurgePost, + RemovePost, + SavePost, + TransferCommunity, +} from "lemmy-js-client"; +import { I18NextService } from "../../services"; import { PostListing } from "./post-listing"; interface PostListingsProps { posts: PostView[]; + allLanguages: Language[]; + siteLanguages: number[]; showCommunity?: boolean; removeDuplicates?: boolean; - enableDownvotes: boolean; - enableNsfw: boolean; + enableDownvotes?: boolean; + enableNsfw?: boolean; + viewOnly?: boolean; + onPostEdit(form: EditPost): void; + onPostVote(form: CreatePostLike): void; + onPostReport(form: CreatePostReport): void; + onBlockPerson(form: BlockPerson): void; + onLockPost(form: LockPost): void; + onDeletePost(form: DeletePost): void; + onRemovePost(form: RemovePost): void; + onSavePost(form: SavePost): void; + onFeaturePost(form: FeaturePost): void; + onPurgePerson(form: PurgePerson): void; + onPurgePost(form: PurgePost): void; + onBanPersonFromCommunity(form: BanFromCommunity): void; + onBanPerson(form: BanPerson): void; + onAddModToCommunity(form: AddModToCommunity): void; + onAddAdmin(form: AddAdmin): void; + onTransferCommunity(form: TransferCommunity): void; + onMarkPostAsRead(form: MarkPostAsRead): void; } export class PostListings extends Component { - private duplicatesMap = new Map(); + duplicatesMap = new Map(); constructor(props: any, context: any) { super(props, context); } + get posts() { + return this.props.removeDuplicates + ? this.removeDuplicates() + : this.props.posts; + } + render() { return ( -
- {this.props.posts.length > 0 ? ( - this.outer().map(post_view => ( +
+ {this.posts.length > 0 ? ( + this.posts.map((post_view, idx) => ( <> -
+ {idx + 1 !== this.posts.length &&
} )) ) : ( <> -
{i18n.t("no_posts")}
- {this.props.showCommunity !== undefined && ( +
{I18NextService.i18n.t("no_posts")}
+ {this.props.showCommunity && ( ## @@ -50,40 +116,35 @@ export class PostListings extends Component { ); } - 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. + const posts = [...this.props.posts].filter(empty => empty); - removeDuplicates(posts: PostView[]): PostView[] { // A map from post url to list of posts (dupes) - let urlMap = new Map(); + const urlMap = new Map(); // Loop over the posts, find ones with same urls - for (let pv of posts) { + for (const pv of posts) { + const url = pv.post.url; if ( - pv.post.url && !pv.post.deleted && !pv.post.removed && !pv.community.deleted && - !pv.community.removed + !pv.community.removed && + url ) { - if (!urlMap.get(pv.post.url)) { - urlMap.set(pv.post.url, [pv]); + if (!urlMap.get(url)) { + urlMap.set(url, [pv]); } else { - urlMap.get(pv.post.url).push(pv); + urlMap.get(url)?.push(pv); } } } // Sort by oldest // Remove the ones that have no length - for (let e of urlMap.entries()) { - if (e[1].length == 1) { + for (const e of urlMap.entries()) { + if (e[1].length === 1) { urlMap.delete(e[0]); } else { e[1].sort((a, b) => a.post.published.localeCompare(b.post.published)); @@ -91,12 +152,13 @@ export class PostListings extends Component { } for (let i = 0; i < posts.length; i++) { - let pv = posts[i]; - if (pv.post.url) { - let found = urlMap.get(pv.post.url); + const pv = posts[i]; + const url = pv.post.url; + if (url) { + const found = urlMap.get(url); if (found) { // If its the oldest, add - if (pv.post.id == found[0].post.id) { + if (pv.post.id === found[0].post.id) { this.duplicatesMap.set(pv.post.id, found.slice(1)); } // Otherwise, delete it