diff --git a/js/src/forum/Forum.ts b/js/src/forum/Forum.ts
index 117c446c1..c8df1f9d4 100644
--- a/js/src/forum/Forum.ts
+++ b/js/src/forum/Forum.ts
@@ -6,6 +6,7 @@ import HeaderSecondary from './components/HeaderSecondary';
import Page from './components/Page';
import DiscussionList from './components/DiscussionList';
import CommentPost from './components/CommentPost';
+import DiscussionRenamedPost from './components/DiscussionRenamedPost';
import Notification from '../common/models/Notification';
@@ -29,7 +30,7 @@ export default class Forum extends Application {
postComponents = {
comment: CommentPost,
- // discussionRenamed: DiscussionRenamedPost
+ discussionRenamed: DiscussionRenamedPost,
};
previous?: Page;
@@ -74,11 +75,11 @@ export default class Forum extends Application {
$('#home-link').click((e: MouseEvent) => {
if (e.ctrlKey || e.metaKey || e.which === 2) return;
e.preventDefault();
- app.history.home();
+ this.history.home();
// Reload the current user so that their unread notification count is refreshed.
- if (app.session.user) {
- app.store.find('users', app.session.user.id());
+ if (this.session.user) {
+ this.store.find('users', this.session.user.id());
m.redraw();
}
});
diff --git a/js/src/forum/components/DiscussionRenamedPost.tsx b/js/src/forum/components/DiscussionRenamedPost.tsx
new file mode 100644
index 000000000..7d0ae7bff
--- /dev/null
+++ b/js/src/forum/components/DiscussionRenamedPost.tsx
@@ -0,0 +1,29 @@
+import EventPost from './EventPost';
+
+/**
+ * The `DiscussionRenamedPost` component displays a discussion event post
+ * indicating that the discussion has been renamed.
+ */
+export default class DiscussionRenamedPost extends EventPost {
+ icon() {
+ return 'fas fa-pencil-alt';
+ }
+
+ description(data) {
+ const renamed = app.translator.trans('core.forum.post_stream.discussion_renamed_text', data);
+ const oldName = app.translator.transText('core.forum.post_stream.discussion_renamed_old_tooltip', data);
+
+ return {renamed};
+ }
+
+ descriptionData() {
+ const post = this.props.post;
+ const oldTitle = post.content()[0];
+ const newTitle = post.content()[1];
+
+ return {
+ old: oldTitle,
+ new: {newTitle},
+ };
+ }
+}
diff --git a/js/src/forum/components/EventPost.tsx b/js/src/forum/components/EventPost.tsx
new file mode 100644
index 000000000..375401e15
--- /dev/null
+++ b/js/src/forum/components/EventPost.tsx
@@ -0,0 +1,68 @@
+import Post from './Post';
+import { ucfirst } from '../../common/utils/string';
+import usernameHelper from '../../common/helpers/username';
+import icon from '../../common/helpers/icon';
+
+interface DescriptionData {
+ [key: string]: any;
+}
+
+/**
+ * The `EventPost` component displays a post which indicating a discussion
+ * event, like a discussion being renamed or stickied. Subclasses must implement
+ * the `icon` and `description` methods.
+ */
+export default abstract class EventPost extends Post {
+ attrs() {
+ const attrs = super.attrs();
+
+ attrs.className = classNames(attrs.className, 'EventPost', ucfirst(this.props.post.contentType()) + 'Post');
+
+ return attrs;
+ }
+
+ content() {
+ const user = this.props.post.user();
+ const username = usernameHelper(user);
+ const data: DescriptionData = Object.assign(this.descriptionData(), {
+ user,
+ username: user ? (
+