feat: merge consecutive share events

This commit is contained in:
Barış Soner Uşaklı
2025-02-21 12:57:07 -05:00
parent 9bfa885392
commit 9153f8cfae
3 changed files with 32 additions and 2 deletions

View File

@@ -108,7 +108,7 @@
"nodebb-plugin-spam-be-gone": "2.3.1", "nodebb-plugin-spam-be-gone": "2.3.1",
"nodebb-plugin-web-push": "0.7.2", "nodebb-plugin-web-push": "0.7.2",
"nodebb-rewards-essentials": "1.0.1", "nodebb-rewards-essentials": "1.0.1",
"nodebb-theme-harmony": "2.0.29", "nodebb-theme-harmony": "2.0.30",
"nodebb-theme-lavender": "7.1.17", "nodebb-theme-lavender": "7.1.17",
"nodebb-theme-peace": "2.2.39", "nodebb-theme-peace": "2.2.39",
"nodebb-theme-persona": "14.0.15", "nodebb-theme-persona": "14.0.15",

View File

@@ -85,12 +85,24 @@ define('forum/topic/threadTools', [
topicContainer.on('click', '[component="topic/event/delete"]', function () { topicContainer.on('click', '[component="topic/event/delete"]', function () {
const eventId = $(this).attr('data-topic-event-id'); const eventId = $(this).attr('data-topic-event-id');
const eventEl = $(this).parents('[component="topic/event"]'); const eventEl = $(this).parents('[data-topic-event-id]');
bootbox.confirm('[[topic:delete-event-confirm]]', (ok) => { bootbox.confirm('[[topic:delete-event-confirm]]', (ok) => {
if (ok) { if (ok) {
api.del(`/topics/${tid}/events/${eventId}`, {}) api.del(`/topics/${tid}/events/${eventId}`, {})
.then(function () { .then(function () {
const itemsParent = eventEl.parents('[component="topic/event/items"]');
eventEl.remove(); eventEl.remove();
if (itemsParent.length) {
const childrenCount = itemsParent.children().length;
const eventParent = itemsParent.parents('[component="topic/event"]');
if (!childrenCount) {
eventParent.remove();
} else {
eventParent
.find('[data-bs-toggle]')
.translateText(`[[topic:announcers-x, ${childrenCount}]]`);
}
}
}) })
.catch(alerts.error); .catch(alerts.error);
} }

View File

@@ -198,6 +198,7 @@ Topics.getTopicWithPosts = async function (topicData, set, uid, start, stop, rev
); );
p.eventStart = undefined; p.eventStart = undefined;
p.eventEnd = undefined; p.eventEnd = undefined;
p.events = mergeConsecutiveShareEvents(p.events);
}); });
topicData.category = category; topicData.category = category;
@@ -230,6 +231,23 @@ Topics.getTopicWithPosts = async function (topicData, set, uid, start, stop, rev
return result.topic; return result.topic;
}; };
function mergeConsecutiveShareEvents(arr) {
return arr.reduce((acc, curr) => {
const last = acc[acc.length - 1];
if (last && last.type === curr.type && last.type === 'share') {
if (!last.items) {
last.items = [{ ...last }];
['user', 'text', 'timestamp', 'timestampISO'].forEach(field => delete last[field]);
}
last.items.push(curr);
} else {
acc.push(curr);
}
return acc;
}, []);
}
async function getDeleter(topicData) { async function getDeleter(topicData) {
if (!parseInt(topicData.deleterUid, 10)) { if (!parseInt(topicData.deleterUid, 10)) {
return null; return null;