( threadInfo: ThreadInfo, parentThreadInfo: ThreadInfo, messageText: string, viewerID: string, )
| 1506 | } |
| 1507 | |
| 1508 | function patchThreadInfoToIncludeMentionedMembersOfParent( |
| 1509 | threadInfo: ThreadInfo, |
| 1510 | parentThreadInfo: ThreadInfo, |
| 1511 | messageText: string, |
| 1512 | viewerID: string, |
| 1513 | ): ThreadInfo { |
| 1514 | const members: BasicUserInfo[] = threadInfo.members |
| 1515 | .map(({ id, username }) => |
| 1516 | username ? ({ id, username }: BasicUserInfo) : null, |
| 1517 | ) |
| 1518 | .filter(Boolean); |
| 1519 | const mentionedNewMembers = extractNewMentionedParentMembers( |
| 1520 | messageText, |
| 1521 | threadInfo, |
| 1522 | parentThreadInfo, |
| 1523 | ); |
| 1524 | if (mentionedNewMembers.length === 0) { |
| 1525 | return threadInfo; |
| 1526 | } |
| 1527 | members.push(...mentionedNewMembers); |
| 1528 | const config = threadSpecs[parentThreadInfo.type].protocol().sidebarConfig; |
| 1529 | invariant(config, `Thread type ${parentThreadInfo.type} can't have sidebars`); |
| 1530 | const threadType = config.sidebarThreadType; |
| 1531 | |
| 1532 | return createPendingThread({ |
| 1533 | viewerID, |
| 1534 | threadType, |
| 1535 | members, |
| 1536 | parentThreadInfo, |
| 1537 | threadColor: threadInfo.color, |
| 1538 | name: threadInfo.name, |
| 1539 | sourceMessageID: threadInfo.sourceMessageID, |
| 1540 | }); |
| 1541 | } |
| 1542 | |
| 1543 | type RoleAndMemberCount = { |
| 1544 | [roleName: string]: number, |
no test coverage detected