( threadInfo: ThreadInfo, )
| 1545 | }; |
| 1546 | |
| 1547 | function useRoleMemberCountsForCommunity( |
| 1548 | threadInfo: ThreadInfo, |
| 1549 | ): RoleAndMemberCount { |
| 1550 | return React.useMemo(() => { |
| 1551 | const roleIDsToNames: { [string]: string } = {}; |
| 1552 | |
| 1553 | Object.keys(threadInfo.roles).forEach(roleID => { |
| 1554 | roleIDsToNames[roleID] = threadInfo.roles[roleID].name; |
| 1555 | }); |
| 1556 | |
| 1557 | const roleNamesToMemberCount: RoleAndMemberCount = {}; |
| 1558 | |
| 1559 | threadInfo.members.forEach(({ role: roleID }) => { |
| 1560 | invariant(roleID, 'Community member should have a role'); |
| 1561 | const roleName = roleIDsToNames[roleID]; |
| 1562 | |
| 1563 | roleNamesToMemberCount[roleName] = |
| 1564 | (roleNamesToMemberCount[roleName] ?? 0) + 1; |
| 1565 | }); |
| 1566 | |
| 1567 | // For all community roles with no members, add them to the list with 0 |
| 1568 | Object.keys(roleIDsToNames).forEach(roleName => { |
| 1569 | if (roleNamesToMemberCount[roleIDsToNames[roleName]] === undefined) { |
| 1570 | roleNamesToMemberCount[roleIDsToNames[roleName]] = 0; |
| 1571 | } |
| 1572 | }); |
| 1573 | |
| 1574 | return roleNamesToMemberCount; |
| 1575 | }, [threadInfo.members, threadInfo.roles]); |
| 1576 | } |
| 1577 | |
| 1578 | function useRoleNamesToSpecialRole(threadInfo: ThreadInfo): { |
| 1579 | +[roleName: string]: ?SpecialRole, |
no test coverage detected