Skip threads with no participants in timeline formatting (#18725)

Threads with no FROM participants have no entry in the participants map,
causing extractParticipantSummary to receive undefined and crash

Fixes TWENTY-SERVER-FB8
This commit is contained in:
neo773
2026-03-18 15:02:49 +05:30
committed by GitHub
parent 2d4f6f8f6f
commit fb5b68f1d8
@@ -1,4 +1,5 @@
import { FIELD_RESTRICTED_ADDITIONAL_PERMISSIONS_REQUIRED } from 'twenty-shared/constants';
import { isDefined } from 'twenty-shared/utils';
import { type TimelineThreadDTO } from 'src/engine/core-modules/messaging/dtos/timeline-thread.dto';
import { extractParticipantSummary } from 'src/engine/core-modules/messaging/utils/extract-participant-summary.util';
@@ -21,23 +22,25 @@ export const formatThreads = (
[key: string]: MessageChannelVisibility;
},
): TimelineThreadDTO[] => {
return threads.map((thread) => {
const visibility = threadVisibilityByThreadId[thread.id];
return threads
.filter((thread) => isDefined(threadParticipantsByThreadId[thread.id]))
.map((thread) => {
const visibility = threadVisibilityByThreadId[thread.id];
return {
...thread,
subject:
visibility === MessageChannelVisibility.SHARE_EVERYTHING ||
visibility === MessageChannelVisibility.SUBJECT
? thread.subject
: FIELD_RESTRICTED_ADDITIONAL_PERMISSIONS_REQUIRED,
lastMessageBody:
visibility === MessageChannelVisibility.SHARE_EVERYTHING
? thread.lastMessageBody
: FIELD_RESTRICTED_ADDITIONAL_PERMISSIONS_REQUIRED,
...extractParticipantSummary(threadParticipantsByThreadId[thread.id]),
visibility,
read: true,
};
});
return {
...thread,
subject:
visibility === MessageChannelVisibility.SHARE_EVERYTHING ||
visibility === MessageChannelVisibility.SUBJECT
? thread.subject
: FIELD_RESTRICTED_ADDITIONAL_PERMISSIONS_REQUIRED,
lastMessageBody:
visibility === MessageChannelVisibility.SHARE_EVERYTHING
? thread.lastMessageBody
: FIELD_RESTRICTED_ADDITIONAL_PERMISSIONS_REQUIRED,
...extractParticipantSummary(threadParticipantsByThreadId[thread.id]),
visibility,
read: true,
};
});
};