X-Git-Url: http://these/git/?a=blobdiff_plain;f=src%2Fshared%2Fcomponents%2Fpost%2Fpost-listings.tsx;h=fc77f505a11ff76119bd52658dc4a116bb04603b;hb=afafb777b4be09d70cd8f56f8d236d98ac63ba6e;hp=158bd8e425cbaa0a13295f2e950a62c4630968f7;hpb=6320357d21bab63f6c4af285ff879b6c601ed48f;p=lemmy-ui.git diff --git a/src/shared/components/post/post-listings.tsx b/src/shared/components/post/post-listings.tsx index 158bd8e..fc77f50 100644 --- a/src/shared/components/post/post-listings.tsx +++ b/src/shared/components/post/post-listings.tsx @@ -1,17 +1,56 @@ -import { None, Some } from "@sniptt/monads"; 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 { @@ -29,25 +68,43 @@ export class PostListings extends Component { render() { return ( -
+
{this.posts.length > 0 ? ( - this.posts.map(post_view => ( + this.posts.map((post_view, idx) => ( <> -
+ {idx + 1 !== this.posts.length &&
} )) ) : ( <> -
{i18n.t("no_posts")}
+
{I18NextService.i18n.t("no_posts")}
{this.props.showCommunity && ( ## @@ -61,33 +118,33 @@ export class PostListings extends Component { removeDuplicates(): PostView[] { // Must use a spread to clone the props, because splice will fail below otherwise. - let posts = [...this.props.posts]; + const posts = [...this.props.posts].filter(empty => empty); // 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) { - !pv.post.deleted && + for (const pv of posts) { + const url = pv.post.url; + if ( + !pv.post.deleted && !pv.post.removed && !pv.community.deleted && !pv.community.removed && - pv.post.url.match({ - some: url => { - if (!urlMap.get(url)) { - urlMap.set(url, [pv]); - } else { - urlMap.get(url).push(pv); - } - }, - none: void 0, - }); + url + ) { + if (!urlMap.get(url)) { + urlMap.set(url, [pv]); + } else { + 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)); @@ -95,23 +152,21 @@ export class PostListings extends Component { } for (let i = 0; i < posts.length; i++) { - let pv = posts[i]; - pv.post.url.match({ - some: url => { - let found = urlMap.get(url); - if (found) { - // If its the oldest, add - if (pv.post.id == found[0].post.id) { - this.duplicatesMap.set(pv.post.id, found.slice(1)); - } - // Otherwise, delete it - else { - posts.splice(i--, 1); - } + 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) { + this.duplicatesMap.set(pv.post.id, found.slice(1)); + } + // Otherwise, delete it + else { + posts.splice(i--, 1); } - }, - none: void 0, - }); + } + } } return posts;