You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
session-desktop/ts/components/session/usingClosedConversationDeta...

78 lines
2.3 KiB
TypeScript

import { GroupUtils } from '../../session/utils';
import { UserUtil } from '../../util';
import { PubKey } from '../../session/types';
import React from 'react';
import { ConversationAttributes } from '../../../js/models/conversations';
type State = {
closedMemberConversations?: Array<ConversationAttributes>;
};
export function usingClosedConversationDetails(WrappedComponent: any) {
return class extends React.Component<any, State> {
constructor(props: any) {
super(props);
this.state = {
closedMemberConversations: undefined,
};
}
public componentDidMount() {
void this.fetchClosedConversationDetails();
}
public componentDidUpdate() {
void this.fetchClosedConversationDetails();
}
public render() {
return (
<WrappedComponent
closedMemberConversations={this.state.closedMemberConversations}
{...this.props}
/>
);
}
private async fetchClosedConversationDetails() {
const {
isPublic,
type,
conversationType,
isGroup,
phoneNumber,
id,
} = this.props;
if (
!isPublic &&
(conversationType === 'group' || type === 'group' || isGroup)
) {
const groupId = id || phoneNumber;
const ourPrimary = await UserUtil.getPrimary();
let members = await GroupUtils.getGroupMembers(PubKey.cast(groupId));
const ourself = members.find(m => m.key !== ourPrimary.key);
// add ourself back at the back, so it's shown only if only 1 member and we are still a member
members = members.filter(m => m.key !== ourPrimary.key);
members.sort((a, b) => (a.key < b.key ? -1 : a.key > b.key ? 1 : 0));
if (ourself) {
members.push(ourPrimary);
}
// no need to forward more than 2 conversation for rendering the group avatar
members.slice(0, 2);
const membersConvos = await Promise.all(
members.map(
async m =>
(
await window.ConversationController.getOrCreateAndWait(
m.key,
'private'
)
).cachedProps
)
);
this.setState({ closedMemberConversations: membersConvos });
}
}
};
}