X-Git-Url: http://these/git/?a=blobdiff_plain;f=src%2Fshared%2Fcomponents%2Fcommunity%2Fcommunity.tsx;h=b0787ecd9aa40278ba695a0b9c1ba12a129a5fd7;hb=afafb777b4be09d70cd8f56f8d236d98ac63ba6e;hp=111b47cd9d4747be7da88e94fa729413096456ec;hpb=a9bcf0567d815afcfbe1775bff3dc1eea66c1c18;p=lemmy-ui.git diff --git a/src/shared/components/community/community.tsx b/src/shared/components/community/community.tsx index 111b47c..b0787ec 100644 --- a/src/shared/components/community/community.tsx +++ b/src/shared/components/community/community.tsx @@ -22,7 +22,7 @@ import { } from "@utils/helpers"; import type { QueryParams } from "@utils/types"; import { RouteDataResponse } from "@utils/types"; -import { Component, linkEvent } from "inferno"; +import { Component, RefObject, createRef, linkEvent } from "inferno"; import { RouteComponentProps } from "inferno-router/dist/Route"; import { AddAdmin, @@ -62,6 +62,7 @@ import { LockPost, MarkCommentReplyAsRead, MarkPersonMentionAsRead, + MarkPostAsRead, PostResponse, PurgeComment, PurgeCommunity, @@ -154,7 +155,7 @@ export class Community extends Component< finished: new Map(), isIsomorphic: false, }; - + private readonly mainContentRef: RefObject; constructor(props: RouteComponentProps<{ name: string }>, context: any) { super(props, context); @@ -195,7 +196,8 @@ export class Community extends Component< this.handleSavePost = this.handleSavePost.bind(this); this.handlePurgePost = this.handlePurgePost.bind(this); this.handleFeaturePost = this.handleFeaturePost.bind(this); - + this.handleMarkPostAsRead = this.handleMarkPostAsRead.bind(this); + this.mainContentRef = createRef(); // Only fetch the data if coming from another route if (FirstLoadService.isFirstLoad) { const { communityRes, commentsRes, postsRes } = this.isoData.routeData; @@ -290,7 +292,7 @@ export class Community extends Component< get documentTitle(): string { const cRes = this.state.communityRes; - return cRes.state == "success" + return cRes.state === "success" ? `${cRes.data.community_view.community.title} - ${this.isoData.site_res.site_view.site.name}` : ""; } @@ -312,12 +314,16 @@ export class Community extends Component<
-
+
{this.communityInfo(res)}
-
+
+
+
); @@ -427,6 +433,7 @@ export class Community extends Component< onAddAdmin={this.handleAddAdmin} onTransferCommunity={this.handleTransferCommunity} onFeaturePost={this.handleFeaturePost} + onMarkPostAsRead={this.handleMarkPostAsRead} /> ); } @@ -444,7 +451,7 @@ export class Community extends Component< nodes={commentsToFlatNodes(this.state.commentsRes.data.comments)} viewType={CommentViewType.Flat} finished={this.state.finished} - noIndent + isTopLevel showContext enableDownvotes={enableDownvotes(site_res)} moderators={communityRes.moderators} @@ -482,7 +489,7 @@ export class Community extends Component< community && (
-
{community.title}
+

{community.title}

i.community.id != communityId); + mui.follows = mui.follows.filter(i => i.community.id !== communityId); } } } @@ -653,10 +660,10 @@ export class Community extends Component< async handleBlockCommunity(form: BlockCommunity) { const blockCommunityRes = await HttpService.client.blockCommunity(form); - if (blockCommunityRes.state == "success") { + if (blockCommunityRes.state === "success") { updateCommunityBlock(blockCommunityRes.data); this.setState(s => { - if (s.communityRes.state == "success") { + if (s.communityRes.state === "success") { s.communityRes.data.community_view.blocked = blockCommunityRes.data.blocked; } @@ -666,7 +673,7 @@ export class Community extends Component< async handleBlockPerson(form: BlockPerson) { const blockPersonRes = await HttpService.client.blockPerson(form); - if (blockPersonRes.state == "success") { + if (blockPersonRes.state === "success") { updatePersonBlock(blockPersonRes.data); } } @@ -749,14 +756,14 @@ export class Community extends Component< async handleCommentReport(form: CreateCommentReport) { const reportRes = await HttpService.client.createCommentReport(form); - if (reportRes.state == "success") { + if (reportRes.state === "success") { toast(I18NextService.i18n.t("report_created")); } } async handlePostReport(form: CreatePostReport) { const reportRes = await HttpService.client.createPostReport(form); - if (reportRes.state == "success") { + if (reportRes.state === "success") { toast(I18NextService.i18n.t("report_created")); } } @@ -774,14 +781,14 @@ export class Community extends Component< async handleAddAdmin(form: AddAdmin) { const addAdminRes = await HttpService.client.addAdmin(form); - if (addAdminRes.state == "success") { + if (addAdminRes.state === "success") { this.setState(s => ((s.siteRes.admins = addAdminRes.data.admins), s)); } } async handleTransferCommunity(form: TransferCommunity) { const transferCommunityRes = await HttpService.client.transferCommunity( - form + form, ); toast(I18NextService.i18n.t("transfer_community")); this.updateCommunityFull(transferCommunityRes); @@ -797,6 +804,11 @@ export class Community extends Component< await HttpService.client.markPersonMentionAsRead(form); } + async handleMarkPostAsRead(form: MarkPostAsRead) { + const res = await HttpService.client.markPostAsRead(form); + this.findAndUpdatePost(res); + } + async handleBanFromCommunity(form: BanFromCommunity) { const banRes = await HttpService.client.banFromCommunity(form); this.updateBanFromCommunity(banRes); @@ -809,20 +821,20 @@ export class Community extends Component< updateBanFromCommunity(banRes: RequestState) { // Maybe not necessary - if (banRes.state == "success") { + if (banRes.state === "success") { this.setState(s => { - if (s.postsRes.state == "success") { + if (s.postsRes.state === "success") { s.postsRes.data.posts - .filter(c => c.creator.id == banRes.data.person_view.person.id) + .filter(c => c.creator.id === banRes.data.person_view.person.id) .forEach( - c => (c.creator_banned_from_community = banRes.data.banned) + c => (c.creator_banned_from_community = banRes.data.banned), ); } - if (s.commentsRes.state == "success") { + if (s.commentsRes.state === "success") { s.commentsRes.data.comments - .filter(c => c.creator.id == banRes.data.person_view.person.id) + .filter(c => c.creator.id === banRes.data.person_view.person.id) .forEach( - c => (c.creator_banned_from_community = banRes.data.banned) + c => (c.creator_banned_from_community = banRes.data.banned), ); } return s; @@ -832,16 +844,16 @@ export class Community extends Component< updateBan(banRes: RequestState) { // Maybe not necessary - if (banRes.state == "success") { + if (banRes.state === "success") { this.setState(s => { - if (s.postsRes.state == "success") { + if (s.postsRes.state === "success") { s.postsRes.data.posts - .filter(c => c.creator.id == banRes.data.person_view.person.id) + .filter(c => c.creator.id === banRes.data.person_view.person.id) .forEach(c => (c.creator.banned = banRes.data.banned)); } - if (s.commentsRes.state == "success") { + if (s.commentsRes.state === "success") { s.commentsRes.data.comments - .filter(c => c.creator.id == banRes.data.person_view.person.id) + .filter(c => c.creator.id === banRes.data.person_view.person.id) .forEach(c => (c.creator.banned = banRes.data.banned)); } return s; @@ -851,7 +863,7 @@ export class Community extends Component< updateCommunity(res: RequestState) { this.setState(s => { - if (s.communityRes.state == "success" && res.state == "success") { + if (s.communityRes.state === "success" && res.state === "success") { s.communityRes.data.community_view = res.data.community_view; s.communityRes.data.discussion_languages = res.data.discussion_languages; @@ -862,7 +874,7 @@ export class Community extends Component< updateCommunityFull(res: RequestState) { this.setState(s => { - if (s.communityRes.state == "success" && res.state == "success") { + if (s.communityRes.state === "success" && res.state === "success") { s.communityRes.data.community_view = res.data.community_view; s.communityRes.data.moderators = res.data.moderators; } @@ -871,7 +883,7 @@ export class Community extends Component< } purgeItem(purgeRes: RequestState) { - if (purgeRes.state == "success") { + if (purgeRes.state === "success") { toast(I18NextService.i18n.t("purge_success")); this.context.router.history.push(`/`); } @@ -879,10 +891,10 @@ export class Community extends Component< findAndUpdateComment(res: RequestState) { this.setState(s => { - if (s.commentsRes.state == "success" && res.state == "success") { + if (s.commentsRes.state === "success" && res.state === "success") { s.commentsRes.data.comments = editComment( res.data.comment_view, - s.commentsRes.data.comments + s.commentsRes.data.comments, ); s.finished.set(res.data.comment_view.comment.id, true); } @@ -892,13 +904,13 @@ export class Community extends Component< createAndUpdateComments(res: RequestState) { this.setState(s => { - if (s.commentsRes.state == "success" && res.state == "success") { + if (s.commentsRes.state === "success" && res.state === "success") { s.commentsRes.data.comments.unshift(res.data.comment_view); // Set finished for the parent s.finished.set( getCommentParentId(res.data.comment_view.comment) ?? 0, - true + true, ); } return s; @@ -907,10 +919,10 @@ export class Community extends Component< findAndUpdateCommentReply(res: RequestState) { this.setState(s => { - if (s.commentsRes.state == "success" && res.state == "success") { + if (s.commentsRes.state === "success" && res.state === "success") { s.commentsRes.data.comments = editWith( res.data.comment_reply_view, - s.commentsRes.data.comments + s.commentsRes.data.comments, ); } return s; @@ -919,10 +931,10 @@ export class Community extends Component< findAndUpdatePost(res: RequestState) { this.setState(s => { - if (s.postsRes.state == "success" && res.state == "success") { + if (s.postsRes.state === "success" && res.state === "success") { s.postsRes.data.posts = editPost( res.data.post_view, - s.postsRes.data.posts + s.postsRes.data.posts, ); } return s; @@ -932,7 +944,7 @@ export class Community extends Component< updateModerators(res: RequestState) { // Update the moderators this.setState(s => { - if (s.communityRes.state == "success" && res.state == "success") { + if (s.communityRes.state === "success" && res.state === "success") { s.communityRes.data.moderators = res.data.moderators; } return s;