From 6b51dd5a2f39e964f4aa7d3fb650091648a4b4ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Wed, 26 Apr 2023 11:30:06 -0400 Subject: [PATCH] feat: closes #11424, add category selector to fork modal (#11491) select the current category on open --- public/src/client/topic/fork.js | 21 +++++++++++++++++++-- src/socket.io/topics.js | 2 +- src/topics/fork.js | 6 ++++-- src/views/modals/fork-topic.tpl | 8 +++++++- 4 files changed, 31 insertions(+), 6 deletions(-) diff --git a/public/src/client/topic/fork.js b/public/src/client/topic/fork.js index c0e67b6adf..0a70b7e931 100644 --- a/public/src/client/topic/fork.js +++ b/public/src/client/topic/fork.js @@ -1,14 +1,18 @@ 'use strict'; -define('forum/topic/fork', ['components', 'postSelect', 'alerts'], function (components, postSelect, alerts) { +define('forum/topic/fork', [ + 'components', 'postSelect', 'alerts', 'categorySelector', +], function (components, postSelect, alerts, categorySelector) { const Fork = {}; let forkModal; let forkCommit; let fromTid; + let selectedCategory; Fork.init = function () { fromTid = ajaxify.data.tid; + selectedCategory = ajaxify.data.category; $(window).off('action:ajaxify.end', onAjaxifyEnd).on('action:ajaxify.end', onAjaxifyEnd); @@ -16,13 +20,22 @@ define('forum/topic/fork', ['components', 'postSelect', 'alerts'], function (com return; } - app.parseAndTranslate('modals/fork-topic', {}, function (html) { + app.parseAndTranslate('modals/fork-topic', { + selectedCategory: selectedCategory, + }, function (html) { forkModal = html; forkCommit = forkModal.find('#fork_thread_commit'); $('body').append(forkModal); + categorySelector.init(forkModal.find('[component="category-selector"]'), { + onSelect: function (category) { + selectedCategory = category; + }, + privilege: 'moderate', + }); + forkModal.find('#fork_thread_cancel').on('click', closeForkModal); forkModal.find('#fork-title').on('keyup', checkForkButtonEnable); @@ -44,11 +57,15 @@ define('forum/topic/fork', ['components', 'postSelect', 'alerts'], function (com } function createTopicFromPosts() { + if (!selectedCategory) { + return; + } forkCommit.attr('disabled', true); socket.emit('topics.createTopicFromPosts', { title: forkModal.find('#fork-title').val(), pids: postSelect.pids, fromTid: fromTid, + cid: selectedCategory.cid, }, function (err, newTopic) { function fadeOutAndRemove(pid) { components.get('post', 'pid', pid).fadeOut(500, function () { diff --git a/src/socket.io/topics.js b/src/socket.io/topics.js index b0a4fd3abc..3df9cdc1a2 100644 --- a/src/socket.io/topics.js +++ b/src/socket.io/topics.js @@ -50,7 +50,7 @@ SocketTopics.createTopicFromPosts = async function (socket, data) { throw new Error('[[error:invalid-data]]'); } - const result = await topics.createTopicFromPosts(socket.uid, data.title, data.pids, data.fromTid); + const result = await topics.createTopicFromPosts(socket.uid, data.title, data.pids, data.fromTid, data.cid); await events.log({ type: `topic-fork`, uid: socket.uid, diff --git a/src/topics/fork.js b/src/topics/fork.js index 4693d4afcc..8ab87b9130 100644 --- a/src/topics/fork.js +++ b/src/topics/fork.js @@ -9,7 +9,7 @@ const plugins = require('../plugins'); const meta = require('../meta'); module.exports = function (Topics) { - Topics.createTopicFromPosts = async function (uid, title, pids, fromTid) { + Topics.createTopicFromPosts = async function (uid, title, pids, fromTid, cid) { if (title) { title = title.trim(); } @@ -27,7 +27,9 @@ module.exports = function (Topics) { pids.sort((a, b) => a - b); const mainPid = pids[0]; - const cid = await posts.getCidByPid(mainPid); + if (!cid) { + cid = await posts.getCidByPid(mainPid); + } const [postData, isAdminOrMod] = await Promise.all([ posts.getPostData(mainPid), diff --git a/src/views/modals/fork-topic.tpl b/src/views/modals/fork-topic.tpl index 5fce825aa8..d98a438e05 100644 --- a/src/views/modals/fork-topic.tpl +++ b/src/views/modals/fork-topic.tpl @@ -10,7 +10,13 @@ - +
+ +
+ +
+
+