fix: allow contacts without didApproveMe to be invited to group

pull/2963/head
Audric Ackermann 1 year ago
parent 5509dc74c5
commit fda6ca315c

@ -3,7 +3,7 @@ import useKey from 'react-use/lib/useKey';
import { PubkeyType } from 'libsession_util_nodejs'; import { PubkeyType } from 'libsession_util_nodejs';
import _ from 'lodash'; import _ from 'lodash';
import { useDispatch, useSelector } from 'react-redux'; import { useDispatch } from 'react-redux';
import { ConversationTypeEnum } from '../../models/conversationAttributes'; import { ConversationTypeEnum } from '../../models/conversationAttributes';
import { VALIDATION } from '../../session/constants'; import { VALIDATION } from '../../session/constants';
import { ConvoHub } from '../../session/conversations'; import { ConvoHub } from '../../session/conversations';
@ -23,7 +23,7 @@ import { ClosedGroup } from '../../session/group/closed-group';
import { PubKey } from '../../session/types'; import { PubKey } from '../../session/types';
import { SessionUtilUserGroups } from '../../session/utils/libsession/libsession_utils_user_groups'; import { SessionUtilUserGroups } from '../../session/utils/libsession/libsession_utils_user_groups';
import { groupInfoActions } from '../../state/ducks/metaGroups'; import { groupInfoActions } from '../../state/ducks/metaGroups';
import { getPrivateContactsPubkeys } from '../../state/selectors/conversations'; import { useContactsToInviteToGroup } from '../../state/selectors/conversations';
import { useMemberGroupChangePending } from '../../state/selectors/groups'; import { useMemberGroupChangePending } from '../../state/selectors/groups';
import { MemberListItem } from '../MemberListItem'; import { MemberListItem } from '../MemberListItem';
import { SessionWrapperModal } from '../SessionWrapperModal'; import { SessionWrapperModal } from '../SessionWrapperModal';
@ -112,7 +112,7 @@ const InviteContactsDialogInner = (props: Props) => {
const { conversationId } = props; const { conversationId } = props;
const dispatch = useDispatch(); const dispatch = useDispatch();
const privateContactPubkeys = useSelector(getPrivateContactsPubkeys); const privateContactPubkeys = useContactsToInviteToGroup();
let validContactsForInvite = _.clone(privateContactPubkeys) as Array<PubkeyType>; let validContactsForInvite = _.clone(privateContactPubkeys) as Array<PubkeyType>;
const isProcessingUIChange = useMemberGroupChangePending(); const isProcessingUIChange = useMemberGroupChangePending();

@ -17,7 +17,9 @@ import { createClosedGroup } from '../../../session/conversations/createClosedGr
import { ToastUtils } from '../../../session/utils'; import { ToastUtils } from '../../../session/utils';
import { groupInfoActions } from '../../../state/ducks/metaGroups'; import { groupInfoActions } from '../../../state/ducks/metaGroups';
import { resetOverlayMode } from '../../../state/ducks/section'; import { resetOverlayMode } from '../../../state/ducks/section';
import { getPrivateContactsPubkeys } from '../../../state/selectors/conversations'; import {
useContactsToInviteToGroup
} from '../../../state/selectors/conversations';
import { useIsCreatingGroupFromUIPending } from '../../../state/selectors/groups'; import { useIsCreatingGroupFromUIPending } from '../../../state/selectors/groups';
import { getSearchResultsContactOnly, isSearching } from '../../../state/selectors/search'; import { getSearchResultsContactOnly, isSearching } from '../../../state/selectors/search';
import { useOurPkStr } from '../../../state/selectors/user'; import { useOurPkStr } from '../../../state/selectors/user';
@ -96,7 +98,7 @@ async function createClosedGroupWithToasts(
export const OverlayClosedGroupV2 = () => { export const OverlayClosedGroupV2 = () => {
const dispatch = useDispatch(); const dispatch = useDispatch();
const us = useOurPkStr(); const us = useOurPkStr();
const privateContactsPubkeys = useSelector(getPrivateContactsPubkeys); const privateContactsPubkeys = useContactsToInviteToGroup();
const isCreatingGroup = useIsCreatingGroupFromUIPending(); const isCreatingGroup = useIsCreatingGroupFromUIPending();
const [groupName, setGroupName] = useState(''); const [groupName, setGroupName] = useState('');
const { const {
@ -210,7 +212,7 @@ export const OverlayClosedGroupV2 = () => {
export const OverlayLegacyClosedGroup = () => { export const OverlayLegacyClosedGroup = () => {
const dispatch = useDispatch(); const dispatch = useDispatch();
const privateContactsPubkeys = useSelector(getPrivateContactsPubkeys); const privateContactsPubkeys = useContactsToInviteToGroup();
const [groupName, setGroupName] = useState(''); const [groupName, setGroupName] = useState('');
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
const { const {

@ -129,6 +129,7 @@ import {
import { DisappearingMessages } from '../session/disappearing_messages'; import { DisappearingMessages } from '../session/disappearing_messages';
import { DisappearingMessageConversationModeType } from '../session/disappearing_messages/types'; import { DisappearingMessageConversationModeType } from '../session/disappearing_messages/types';
import { GroupUpdateInfoChangeMessage } from '../session/messages/outgoing/controlMessage/group_v2/to_group/GroupUpdateInfoChangeMessage';
import { FetchMsgExpirySwarm } from '../session/utils/job_runners/jobs/FetchMsgExpirySwarmJob'; import { FetchMsgExpirySwarm } from '../session/utils/job_runners/jobs/FetchMsgExpirySwarmJob';
import { UpdateMsgExpirySwarm } from '../session/utils/job_runners/jobs/UpdateMsgExpirySwarmJob'; import { UpdateMsgExpirySwarm } from '../session/utils/job_runners/jobs/UpdateMsgExpirySwarmJob';
import { getLibGroupKickedOutsideRedux } from '../state/selectors/userGroups'; import { getLibGroupKickedOutsideRedux } from '../state/selectors/userGroups';

@ -300,21 +300,6 @@ const _getLeftPaneConversationIds = (
.map(m => m.id); .map(m => m.id);
}; };
const _getPrivateFriendsConversations = (
sortedConversations: Array<ReduxConversationType>
): Array<ReduxConversationType> => {
return sortedConversations.filter(convo => {
return (
convo.isPrivate &&
!convo.isMe &&
!convo.isBlocked &&
convo.isApproved &&
convo.didApproveMe &&
convo.activeAt !== undefined
);
});
};
const _getGlobalUnreadCount = (sortedConversations: Array<ReduxConversationType>): number => { const _getGlobalUnreadCount = (sortedConversations: Array<ReduxConversationType>): number => {
let globalUnreadCount = 0; let globalUnreadCount = 0;
for (const conversation of sortedConversations) { for (const conversation of sortedConversations) {
@ -449,11 +434,29 @@ export const getLeftPaneConversationIds = createSelector(
_getLeftPaneConversationIds _getLeftPaneConversationIds
); );
const getDirectContacts = createSelector(getSortedConversations, _getPrivateFriendsConversations); const getPrivateFriendsConversations = (
sortedConversations: Array<ReduxConversationType>
): Array<ReduxConversationType> => {
return sortedConversations.filter(convo => {
return (
convo.isPrivate &&
!convo.isMe &&
!convo.isBlocked &&
convo.isApproved &&
(window.sessionFeatureFlags.useClosedGroupV2 || convo.didApproveMe) && // with groupv2, we can invite contacts which did not approve us yet
convo.activeAt !== undefined
);
});
};
export const getPrivateContactsPubkeys = createSelector(getDirectContacts, state => const getDirectContacts = createSelector(getSortedConversations, getPrivateFriendsConversations);
state.map(m => m.id)
); const getPrivateContactsPubkeys = createSelector(getDirectContacts, state => state.map(m => m.id));
export const useContactsToInviteToGroup = () => {
const contacts = useSelector(getPrivateContactsPubkeys);
return contacts;
};
export const getDirectContactsCount = createSelector( export const getDirectContactsCount = createSelector(
getDirectContacts, getDirectContacts,

Loading…
Cancel
Save