MM-52944: Fix profile popover view issue on RHS when searching channel member (#23930)

Этот коммит содержится в:
Sinan Sonmez (Chaush)
2023-07-13 12:54:54 +02:00
коммит произвёл GitHub
родитель 1f235ba064
Коммит e1aa7b21ac
3 изменённых файлов: 24 добавлений и 21 удалений

Просмотреть файл

@@ -1,7 +1,7 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information. // See LICENSE.txt for license information.
import React, {useEffect} from 'react'; import React, {useCallback, useEffect} from 'react';
import {useDispatch, useSelector} from 'react-redux'; import {useDispatch, useSelector} from 'react-redux';
import {useIntl} from 'react-intl'; import {useIntl} from 'react-intl';
import {useHistory} from 'react-router-dom'; import {useHistory} from 'react-router-dom';
@@ -91,13 +91,13 @@ function NotificationFromMembersModal(props: Props) {
}; };
}); });
const openDirectMessage = async (user: UserProfile) => { const openDirectMessage = useCallback(async (user: UserProfile) => {
// we first prepare the DM channel... // we first prepare the DM channel...
await dispatch(openDirectChannelToUserId(user.id)); await dispatch(openDirectChannelToUserId(user.id));
// ... and then redirect to it // ... and then redirect to it
history.push(teamUrl + '/messages/@' + user.username); history.push(teamUrl + '/messages/@' + user.username);
}; }, [openDirectChannelToUserId, history, teamUrl]);
const handleOnClose = () => { const handleOnClose = () => {
dispatch(closeModal(ModalIdentifiers.SUM_OF_MEMBERS_MODAL)); dispatch(closeModal(ModalIdentifiers.SUM_OF_MEMBERS_MODAL));
@@ -131,7 +131,8 @@ function NotificationFromMembersModal(props: Props) {
members={members} members={members}
searchTerms={''} searchTerms={''}
editing={false} editing={false}
actions={{openDirectMessage, loadMore}} openDirectMessage={openDirectMessage}
loadMore={loadMore}
hasNextPage={false} hasNextPage={false}
isNextPageLoading={false} isNextPageLoading={false}
/> />

Просмотреть файл

@@ -51,7 +51,7 @@ export interface Props {
actions: { actions: {
openModal: <P>(modalData: ModalData<P>) => void; openModal: <P>(modalData: ModalData<P>) => void;
openDirectChannelToUserId: (userId: string) => Promise<{ data: Channel }>; openDirectChannelToUserId: (userId: string) => Promise<{data: Channel}>;
closeRightHandSide: () => void; closeRightHandSide: () => void;
goBack: () => void; goBack: () => void;
setChannelMembersRhsSearchTerm: (terms: string) => void; setChannelMembersRhsSearchTerm: (terms: string) => void;
@@ -150,7 +150,9 @@ export default function ChannelMembersRHS({
listcp.push({type: ListItemType.Member, data: member}); listcp.push({type: ListItemType.Member, data: member});
} }
setList(listcp); if (JSON.stringify(list) !== JSON.stringify(listcp)) {
setList(listcp);
}
}, [channelMembers]); }, [channelMembers]);
useEffect(() => { useEffect(() => {
@@ -200,7 +202,7 @@ export default function ChannelMembersRHS({
}); });
}; };
const openDirectMessage = async (user: UserProfile) => { const openDirectMessage = useCallback(async (user: UserProfile) => {
// we first prepare the DM channel... // we first prepare the DM channel...
await actions.openDirectChannelToUserId(user.id); await actions.openDirectChannelToUserId(user.id);
@@ -208,16 +210,17 @@ export default function ChannelMembersRHS({
history.push(teamUrl + '/messages/@' + user.username); history.push(teamUrl + '/messages/@' + user.username);
await actions.closeRightHandSide(); await actions.closeRightHandSide();
}; }, [actions.openDirectChannelToUserId, history, teamUrl, actions.closeRightHandSide]);
const loadMore = async () => { const loadMore = useCallback(async () => {
setIsNextPageLoading(true); setIsNextPageLoading(true);
await actions.loadProfilesAndReloadChannelMembers(page + 1, USERS_PER_PAGE, channel.id, ProfilesInChannelSortBy.Admin); await actions.loadProfilesAndReloadChannelMembers(page + 1, USERS_PER_PAGE, channel.id, ProfilesInChannelSortBy.Admin);
setPage(page + 1); setPage(page + 1);
setIsNextPageLoading(false); setIsNextPageLoading(false);
}; }, [actions.loadProfilesAndReloadChannelMembers, page, channel.id],
);
return ( return (
<div <div
@@ -281,7 +284,8 @@ export default function ChannelMembersRHS({
members={list} members={list}
editing={editing} editing={editing}
channel={channel} channel={channel}
actions={{openDirectMessage, loadMore}} openDirectMessage={openDirectMessage}
loadMore={loadMore}
hasNextPage={channelMembers.length < membersCount} hasNextPage={channelMembers.length < membersCount}
isNextPageLoading={isNextPageLoading} isNextPageLoading={isNextPageLoading}
/> />

Просмотреть файл

@@ -1,7 +1,7 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information. // See LICENSE.txt for license information.
import React, {useEffect, useRef, useState} from 'react'; import React, {memo, useEffect, useRef, useState} from 'react';
import AutoSizer from 'react-virtualized-auto-sizer'; import AutoSizer from 'react-virtualized-auto-sizer';
import {VariableSizeList, ListChildComponentProps} from 'react-window'; import {VariableSizeList, ListChildComponentProps} from 'react-window';
import InfiniteLoader from 'react-window-infinite-loader'; import InfiniteLoader from 'react-window-infinite-loader';
@@ -19,11 +19,8 @@ export interface Props {
hasNextPage: boolean; hasNextPage: boolean;
isNextPageLoading: boolean; isNextPageLoading: boolean;
searchTerms: string; searchTerms: string;
openDirectMessage: (user: UserProfile) => void;
actions: { loadMore: () => void;
openDirectMessage: (user: UserProfile) => void;
loadMore: () => void;
};
} }
const MemberList = ({ const MemberList = ({
@@ -33,7 +30,8 @@ const MemberList = ({
members, members,
searchTerms, searchTerms,
editing, editing,
actions, openDirectMessage,
loadMore,
}: Props) => { }: Props) => {
const infiniteLoaderRef = useRef<InfiniteLoader | null>(null); const infiniteLoaderRef = useRef<InfiniteLoader | null>(null);
const variableSizeListRef = useRef<VariableSizeList | null>(null); const variableSizeListRef = useRef<VariableSizeList | null>(null);
@@ -53,7 +51,7 @@ const MemberList = ({
const itemCount = hasNextPage ? members.length + 1 : members.length; const itemCount = hasNextPage ? members.length + 1 : members.length;
const loadMoreItems = isNextPageLoading ? () => {} : actions.loadMore; const loadMoreItems = isNextPageLoading ? () => {} : loadMore;
const isItemLoaded = (index: number) => { const isItemLoaded = (index: number) => {
return !hasNextPage || index < members.length; return !hasNextPage || index < members.length;
@@ -91,7 +89,7 @@ const MemberList = ({
totalUsers={members.length} totalUsers={members.length}
member={member} member={member}
editing={editing} editing={editing}
actions={{openDirectMessage: actions.openDirectMessage}} actions={{openDirectMessage}}
/> />
</div> </div>
); );
@@ -149,4 +147,4 @@ const MemberList = ({
); );
}; };
export default MemberList; export default memo(MemberList);