diff --git a/app/channel-settings/server/methods/saveRoomSettings.js b/app/channel-settings/server/methods/saveRoomSettings.js
index ee21ae0523c7..3223584951e4 100644
--- a/app/channel-settings/server/methods/saveRoomSettings.js
+++ b/app/channel-settings/server/methods/saveRoomSettings.js
@@ -60,7 +60,7 @@ Meteor.methods({
}
if (room.prid) {
- throw new Meteor.Error('error-action-not-allowed', 'Editing thread room is not allowed', {
+ throw new Meteor.Error('error-action-not-allowed', 'Editing discussion room is not allowed', {
method: 'saveRoomSettings',
action: 'Editing_room',
});
diff --git a/app/discussion/client/createDiscussionMessageAction.js b/app/discussion/client/createDiscussionMessageAction.js
new file mode 100644
index 000000000000..eebf5853d009
--- /dev/null
+++ b/app/discussion/client/createDiscussionMessageAction.js
@@ -0,0 +1,53 @@
+import { Meteor } from 'meteor/meteor';
+import { Tracker } from 'meteor/tracker';
+
+import { Subscriptions } from '../../models/client';
+import { settings } from '../../settings/client';
+import { hasPermission } from '../../authorization/client';
+import { MessageAction, modal } from '../../ui-utils/client';
+import { t } from '../../utils/client';
+
+const condition = (rid, uid) => {
+ if (!Subscriptions.findOne({ rid })) {
+ return false;
+ }
+ return uid !== Meteor.userId() ? hasPermission('start-discussion-other-user') : hasPermission('start-discussion');
+};
+
+Meteor.startup(function() {
+ Tracker.autorun(() => {
+ if (!settings.get('Discussion_enabled')) {
+ return MessageAction.removeButton('start-discussion');
+ }
+
+ MessageAction.addButton({
+ id: 'start-discussion',
+ icon: 'discussion',
+ label: 'Discussion_start',
+ context: ['message', 'message-mobile'],
+ async action() {
+ const [, message] = this._arguments;
+
+ modal.open({
+ title: t('Discussion_title'),
+ modifier: 'modal',
+ content: 'CreateDiscussion',
+ data: { rid: message.rid, message, onCreate() {
+ modal.close();
+ } },
+ confirmOnEnter: false,
+ showConfirmButton: false,
+ showCancelButton: false,
+ });
+ },
+ condition({ rid, u: { _id: uid }, drid, dcount }) {
+ if (drid || !isNaN(dcount)) {
+ return false;
+ }
+ return condition(rid, uid);
+ },
+ order: 0,
+ group: 'menu',
+ });
+ });
+});
diff --git a/app/discussion/client/discussionFromMessageBox.js b/app/discussion/client/discussionFromMessageBox.js
new file mode 100644
index 000000000000..dbade46fc93d
--- /dev/null
+++ b/app/discussion/client/discussionFromMessageBox.js
@@ -0,0 +1,36 @@
+import { Meteor } from 'meteor/meteor';
+import { Tracker } from 'meteor/tracker';
+
+import { messageBox, modal } from '../../ui-utils/client';
+import { t } from '../../utils/client';
+import { settings } from '../../settings/client';
+
+Meteor.startup(function() {
+ Tracker.autorun(() => {
+ if (!settings.get('Discussion_enabled')) {
+ return messageBox.actions.remove('Create_new', /start-discussion/);
+ }
+ messageBox.actions.add('Create_new', 'Discussion', {
+ id: 'start-discussion',
+ icon: 'discussion',
+ condition: () => true,
+ action(data) {
+ modal.open({
+ title: t('Discussion_title'),
+ modifier: 'modal',
+ content: 'CreateDiscussion',
+ data: {
+ ...data,
+ onCreate() {
+ modal.close();
+ },
+ },
+ showConfirmButton: false,
+ showCancelButton: false,
+ confirmOnEnter: false,
+ });
+ },
+ });
+
+ });
+});
diff --git a/app/discussion/client/index.js b/app/discussion/client/index.js
new file mode 100644
index 000000000000..9a7bdc13cd5d
--- /dev/null
+++ b/app/discussion/client/index.js
@@ -0,0 +1,16 @@
+// Templates
+import './views/creationDialog/CreateDiscussion';
+import './views/DiscussionList';
+import './views/DiscussionTabbar';
+
+// Other UI extensions
+import './lib/messageTypes/discussionMessage';
+import './lib/discussionsOfRoom';
+import './createDiscussionMessageAction';
+import './discussionFromMessageBox';
+import './tabBar';
+
+import '../lib/discussionRoomType';
+
+// Style
+import './public/stylesheets/discussion.css';
diff --git a/app/discussion/client/lib/discussionsOfRoom.js b/app/discussion/client/lib/discussionsOfRoom.js
new file mode 100644
index 000000000000..a620af48a42d
--- /dev/null
+++ b/app/discussion/client/lib/discussionsOfRoom.js
@@ -0,0 +1,3 @@
+import { Mongo } from 'meteor/mongo';
+
+export const DiscussionOfRoom = new Mongo.Collection('rocketchat_discussions_of_room');
diff --git a/app/discussion/client/lib/messageTypes/discussionMessage.js b/app/discussion/client/lib/messageTypes/discussionMessage.js
new file mode 100644
index 000000000000..5dc928a7f38e
--- /dev/null
+++ b/app/discussion/client/lib/messageTypes/discussionMessage.js
@@ -0,0 +1,17 @@
+import { Meteor } from 'meteor/meteor';
+
+import { MessageTypes } from '../../../../ui-utils/client';
+
+Meteor.startup(function() {
+ MessageTypes.registerType({
+ id: 'discussion-created',
+ system: false,
+ message: 'discussion-created',
+ data(message) {
+ return {
+ // channelLink: `${ TAPi18n.__('discussion') }`,
+ message: ` ${ message.msg }`,
+ };
+ },
+ });
+});
diff --git a/app/discussion/client/public/stylesheets/discussion.css b/app/discussion/client/public/stylesheets/discussion.css
new file mode 100644
index 000000000000..93c6d4e8e20f
--- /dev/null
+++ b/app/discussion/client/public/stylesheets/discussion.css
@@ -0,0 +1,22 @@
+.message-discussion {
+ display: flex;
+
+ padding: 0.5rem 0;
+ align-items: center;
+}
+
+.discussion-reply-lm {
+ padding: 4px 8px;
+
+ color: var(--color-gray);
+
+ font-size: 12px;
+}
+
+.discussions-list .load-more {
+ text-align: center;
+ text-transform: lowercase;
+
+ font-style: italic;
+ line-height: 40px;
+}
diff --git a/app/threading/client/tabBar.js b/app/discussion/client/tabBar.js
similarity index 51%
rename from app/threading/client/tabBar.js
rename to app/discussion/client/tabBar.js
index ccff24215665..8ab8d47bda70 100644
--- a/app/threading/client/tabBar.js
+++ b/app/discussion/client/tabBar.js
@@ -1,13 +1,14 @@
import { Meteor } from 'meteor/meteor';
-import { TabBar } from '../../ui-utils';
+
+import { TabBar } from '../../ui-utils/client';
Meteor.startup(function() {
return TabBar.addButton({
groups: ['channel', 'group', 'direct'],
- id: 'threads',
- i18nTitle: 'Threads',
- icon: 'thread',
- template: 'threadsTabbar',
+ id: 'discussions',
+ i18nTitle: 'Discussions',
+ icon: 'discussion',
+ template: 'discussionsTabbar',
order: 10,
});
});
diff --git a/app/threading/client/views/ThreadList.html b/app/discussion/client/views/DiscussionList.html
similarity index 76%
rename from app/threading/client/views/ThreadList.html
rename to app/discussion/client/views/DiscussionList.html
index 35df571080ba..4792f63418ce 100644
--- a/app/threading/client/views/ThreadList.html
+++ b/app/discussion/client/views/DiscussionList.html
@@ -1,7 +1,7 @@
-
+
{{#if rooms}}
- {{_ "Threads"}}
+ {{_ "Discussion"}}
{{#each room in rooms}} {{> chatRoomItem room }} {{/each}}
diff --git a/app/threading/client/views/ThreadList.js b/app/discussion/client/views/DiscussionList.js
similarity index 70%
rename from app/threading/client/views/ThreadList.js
rename to app/discussion/client/views/DiscussionList.js
index 96dcccb1ca65..54562f5fce40 100644
--- a/app/threading/client/views/ThreadList.js
+++ b/app/discussion/client/views/DiscussionList.js
@@ -1,9 +1,13 @@
import { Meteor } from 'meteor/meteor';
import { Template } from 'meteor/templating';
-import { ChatSubscription } from '../../../models';
-import { getUserPreference } from '../../../utils';
-import { settings } from '../../../settings';
-Template.ThreadList.helpers({
+
+import { ChatSubscription } from '../../../models/client';
+import { getUserPreference } from '../../../utils/client';
+import { settings } from '../../../settings/client';
+
+import './DiscussionList.html';
+
+Template.DiscussionList.helpers({
rooms() {
const user = Meteor.userId();
const sortBy = getUserPreference(user, 'sidebarSortby') || 'alphabetical';
diff --git a/app/threading/client/views/ThreadsTabbar.html b/app/discussion/client/views/DiscussionTabbar.html
similarity index 62%
rename from app/threading/client/views/ThreadsTabbar.html
rename to app/discussion/client/views/DiscussionTabbar.html
index 502f83585d43..e13803e67551 100644
--- a/app/threading/client/views/ThreadsTabbar.html
+++ b/app/discussion/client/views/DiscussionTabbar.html
@@ -1,12 +1,12 @@
-
+
{{#if Template.subscriptionsReady}}
{{#unless hasMessages}}
-