From 724fe8b7658654acee54e5071d7aba93acf2fe05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marcin=20miko=C5=82ajczak?= Date: Sun, 10 Jul 2022 00:15:14 +0200 Subject: [PATCH] statuses links MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: marcin mikołajczak --- app/soapbox/actions/announcements.ts | 3 +++ .../announcements/announcement-content.tsx | 26 +++++++++---------- app/soapbox/normalizers/announcement.ts | 11 +++++++- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/app/soapbox/actions/announcements.ts b/app/soapbox/actions/announcements.ts index 99e28e8fe..49e63c65a 100644 --- a/app/soapbox/actions/announcements.ts +++ b/app/soapbox/actions/announcements.ts @@ -1,5 +1,7 @@ import api from '../api'; +import { importFetchedStatuses } from './importer'; + import type { AxiosError } from 'axios'; import type { AppDispatch, RootState } from 'soapbox/store'; import type { APIEntity } from 'soapbox/types/entities'; @@ -34,6 +36,7 @@ export const fetchAnnouncements = (done = noOp) => return api(getState).get('/api/v1/announcements').then(response => { dispatch(fetchAnnouncementsSuccess(response.data)); + dispatch(importFetchedStatuses(response.data.map(({ statuses }: APIEntity) => statuses))); }).catch(error => { dispatch(fetchAnnouncementsFail(error)); }).finally(() => { diff --git a/app/soapbox/components/announcements/announcement-content.tsx b/app/soapbox/components/announcements/announcement-content.tsx index 3e00241df..f4265d1fd 100644 --- a/app/soapbox/components/announcements/announcement-content.tsx +++ b/app/soapbox/components/announcements/announcement-content.tsx @@ -34,12 +34,12 @@ const AnnouncementContent: React.FC = ({ announcement }) = } }; - // const onStatusClick = (status, e: MouseEvent) => { - // if (e.button === 0 && !(e.ctrlKey || e.metaKey)) { - // e.preventDefault(); - // history.push(`/@${status.getIn(['account', 'acct'])}/${status.get('id')}`); - // } - // }; + const onStatusClick = (status: string, e: MouseEvent) => { + if (e.button === 0 && !(e.ctrlKey || e.metaKey)) { + e.preventDefault(); + history.push(status); + } + }; const updateLinks = () => { if (!node.current) return; @@ -63,13 +63,13 @@ const AnnouncementContent: React.FC = ({ announcement }) = link.setAttribute('title', mention.acct); } else if (link.textContent?.charAt(0) === '#' || (link.previousSibling?.textContent?.charAt(link.previousSibling.textContent.length - 1) === '#')) { link.addEventListener('click', onHashtagClick.bind(link, link.text), false); - // } else { - // const status = announcement.statuses.find(item => link.href === item.get('url')); - // if (status) { - // link.addEventListener('click', onStatusClick.bind(this, status), false); - // } - // link.setAttribute('title', link.href); - // link.classList.add('unhandled-link'); + } else { + const status = announcement.statuses.get(link.href); + if (status) { + link.addEventListener('click', onStatusClick.bind(this, status), false); + } + link.setAttribute('title', link.href); + link.classList.add('unhandled-link'); } }); }; diff --git a/app/soapbox/normalizers/announcement.ts b/app/soapbox/normalizers/announcement.ts index ff76cb8d6..0db9f3e00 100644 --- a/app/soapbox/normalizers/announcement.ts +++ b/app/soapbox/normalizers/announcement.ts @@ -29,7 +29,7 @@ export const AnnouncementRecord = ImmutableRecord({ read: false, published_at: Date, reactions: ImmutableList(), - // statuses, + statuses: ImmutableMap(), mentions: ImmutableList(), tags: ImmutableList>(), emojis: ImmutableList(), @@ -66,6 +66,14 @@ const normalizeContent = (announcement: ImmutableMap) => { return announcement.set('contentHtml', contentHtml); }; +const normalizeStatuses = (announcement: ImmutableMap) => { + const statuses = announcement + .get('statuses', ImmutableList()) + .reduce((acc: ImmutableMap, curr: ImmutableMap) => acc.set(curr.get('url'), `/@${curr.getIn(['account', 'acct'])}/${curr.get('id')}`), ImmutableMap()); + + return announcement.set('statuses', statuses); +}; + export const normalizeAnnouncement = (announcement: Record) => { return AnnouncementRecord( ImmutableMap(fromJS(announcement)).withMutations(announcement => { @@ -73,6 +81,7 @@ export const normalizeAnnouncement = (announcement: Record) => { normalizeReactions(announcement); normalizeEmojis(announcement); normalizeContent(announcement); + normalizeStatuses(announcement); }), ); };