Client: Members: Fix infinite loading and duplicate members after inviting users. Remove useless code
This commit is contained in:
parent
5b6d391060
commit
a7b38055a5
@ -80,8 +80,8 @@ const InvitePanel = ({
|
|||||||
defaultAccess,
|
defaultAccess,
|
||||||
inviteUsers,
|
inviteUsers,
|
||||||
setInfoPanelIsMobileHidden,
|
setInfoPanelIsMobileHidden,
|
||||||
updateInfoPanelSelection,
|
updateInfoPanelMembers,
|
||||||
addInfoPanelMembers,
|
isRoomMembersPanelOpen,
|
||||||
setInviteLanguage,
|
setInviteLanguage,
|
||||||
getUsersList,
|
getUsersList,
|
||||||
filter,
|
filter,
|
||||||
@ -291,28 +291,6 @@ const InvitePanel = ({
|
|||||||
|
|
||||||
setIsLoading(false);
|
setIsLoading(false);
|
||||||
|
|
||||||
const invitedViaEmail = data.invitations
|
|
||||||
.filter((inv) => inv.email && !inv.id)
|
|
||||||
.map((invitation) => ({
|
|
||||||
access: invitation.access,
|
|
||||||
sharedTo: {
|
|
||||||
name: invitation.email,
|
|
||||||
userName: invitation.email,
|
|
||||||
email: invitation.email,
|
|
||||||
displayName: invitation.email,
|
|
||||||
status: 1,
|
|
||||||
activationStatus: 2,
|
|
||||||
usedSpace: 0,
|
|
||||||
hasAvatar: false,
|
|
||||||
},
|
|
||||||
canEditAccess: false,
|
|
||||||
}));
|
|
||||||
|
|
||||||
if (isRooms) {
|
|
||||||
const newInfoPanelMembers = [...result.members, ...invitedViaEmail];
|
|
||||||
addInfoPanelMembers(t, newInfoPanelMembers);
|
|
||||||
}
|
|
||||||
|
|
||||||
onClose();
|
onClose();
|
||||||
toastr.success(t("Common:UsersInvited"));
|
toastr.success(t("Common:UsersInvited"));
|
||||||
|
|
||||||
@ -320,7 +298,9 @@ const InvitePanel = ({
|
|||||||
toastr.warning(result?.warning);
|
toastr.warning(result?.warning);
|
||||||
}
|
}
|
||||||
|
|
||||||
updateInfoPanelSelection();
|
if (isRoomMembersPanelOpen) {
|
||||||
|
updateInfoPanelMembers(t);
|
||||||
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
toastr.error(err);
|
toastr.error(err);
|
||||||
setIsLoading(false);
|
setIsLoading(false);
|
||||||
@ -503,8 +483,8 @@ export default inject(
|
|||||||
const { filter } = peopleStore.filterStore;
|
const { filter } = peopleStore.filterStore;
|
||||||
const {
|
const {
|
||||||
setIsMobileHidden: setInfoPanelIsMobileHidden,
|
setIsMobileHidden: setInfoPanelIsMobileHidden,
|
||||||
updateInfoPanelSelection,
|
updateInfoPanelMembers,
|
||||||
addInfoPanelMembers,
|
isRoomMembersPanelOpen,
|
||||||
} = infoPanelStore;
|
} = infoPanelStore;
|
||||||
|
|
||||||
const {
|
const {
|
||||||
@ -547,8 +527,8 @@ export default inject(
|
|||||||
collaboratorLink,
|
collaboratorLink,
|
||||||
inviteUsers,
|
inviteUsers,
|
||||||
setInfoPanelIsMobileHidden,
|
setInfoPanelIsMobileHidden,
|
||||||
updateInfoPanelSelection,
|
updateInfoPanelMembers,
|
||||||
addInfoPanelMembers,
|
isRoomMembersPanelOpen,
|
||||||
getUsersList,
|
getUsersList,
|
||||||
filter,
|
filter,
|
||||||
currentDeviceType,
|
currentDeviceType,
|
||||||
|
@ -65,7 +65,7 @@ const Members = ({
|
|||||||
isPublicRoomType,
|
isPublicRoomType,
|
||||||
membersFilter,
|
membersFilter,
|
||||||
infoPanelMembers,
|
infoPanelMembers,
|
||||||
setInfoPanelMembers,
|
updateInfoPanelMembers,
|
||||||
primaryLink,
|
primaryLink,
|
||||||
isArchiveFolder,
|
isArchiveFolder,
|
||||||
isPublicRoom,
|
isPublicRoom,
|
||||||
@ -75,38 +75,24 @@ const Members = ({
|
|||||||
getPrimaryLink,
|
getPrimaryLink,
|
||||||
setExternalLink,
|
setExternalLink,
|
||||||
withPublicRoomBlock,
|
withPublicRoomBlock,
|
||||||
fetchMembers,
|
|
||||||
fetchMoreMembers,
|
fetchMoreMembers,
|
||||||
membersIsLoading,
|
membersIsLoading,
|
||||||
searchValue,
|
searchValue,
|
||||||
searchResultIsLoading,
|
isMembersPanelUpdating,
|
||||||
}) => {
|
}) => {
|
||||||
const withoutTitlesAndLinks = !!searchValue;
|
const withoutTitlesAndLinks = !!searchValue;
|
||||||
const membersHelper = new MembersHelper({ t });
|
const membersHelper = new MembersHelper({ t });
|
||||||
|
|
||||||
const scrollContext = useContext(ScrollbarContext);
|
const scrollContext = useContext(ScrollbarContext);
|
||||||
|
|
||||||
const updateInfoPanelMembers = async () => {
|
|
||||||
if (
|
|
||||||
!infoPanelSelection ||
|
|
||||||
!infoPanelSelection.isRoom ||
|
|
||||||
!infoPanelSelection.id
|
|
||||||
) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const fetchedMembers = await fetchMembers(t, true, withoutTitlesAndLinks);
|
|
||||||
setInfoPanelMembers(fetchedMembers);
|
|
||||||
};
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
updateInfoPanelMembers();
|
updateInfoPanelMembers(t);
|
||||||
}, [infoPanelSelection, searchValue]);
|
}, [infoPanelSelection, searchValue]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (searchResultIsLoading) return;
|
if (isMembersPanelUpdating) return;
|
||||||
scrollContext?.parentScrollbar?.scrollToTop();
|
scrollContext?.parentScrollbar?.scrollToTop();
|
||||||
}, [searchResultIsLoading]);
|
}, [isMembersPanelUpdating]);
|
||||||
|
|
||||||
const loadNextPage = async () => {
|
const loadNextPage = async () => {
|
||||||
await fetchMoreMembers(t, withoutTitlesAndLinks);
|
await fetchMoreMembers(t, withoutTitlesAndLinks);
|
||||||
@ -259,8 +245,8 @@ const Members = ({
|
|||||||
<MembersList
|
<MembersList
|
||||||
loadNextPage={loadNextPage}
|
loadNextPage={loadNextPage}
|
||||||
hasNextPage={
|
hasNextPage={
|
||||||
membersList.length - headersCount < membersFilter.total &&
|
!isMembersPanelUpdating &&
|
||||||
!searchResultIsLoading
|
membersList.length - headersCount < membersFilter.total
|
||||||
}
|
}
|
||||||
itemCount={membersFilter.total + headersCount + publicRoomItemsLength}
|
itemCount={membersFilter.total + headersCount + publicRoomItemsLength}
|
||||||
showPublicRoomBar={showPublicRoomBar}
|
showPublicRoomBar={showPublicRoomBar}
|
||||||
@ -279,6 +265,7 @@ const Members = ({
|
|||||||
membersHelper={membersHelper}
|
membersHelper={membersHelper}
|
||||||
currentMember={currentMember}
|
currentMember={currentMember}
|
||||||
hasNextPage={
|
hasNextPage={
|
||||||
|
!isMembersPanelUpdating &&
|
||||||
membersList.length - headersCount < membersFilter.total
|
membersList.length - headersCount < membersFilter.total
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
@ -303,13 +290,12 @@ export default inject(
|
|||||||
infoPanelSelection,
|
infoPanelSelection,
|
||||||
setIsScrollLocked,
|
setIsScrollLocked,
|
||||||
infoPanelMembers,
|
infoPanelMembers,
|
||||||
setInfoPanelMembers,
|
updateInfoPanelMembers,
|
||||||
fetchMembers,
|
|
||||||
fetchMoreMembers,
|
fetchMoreMembers,
|
||||||
membersIsLoading,
|
membersIsLoading,
|
||||||
withPublicRoomBlock,
|
withPublicRoomBlock,
|
||||||
searchValue,
|
searchValue,
|
||||||
searchResultIsLoading,
|
isMembersPanelUpdating,
|
||||||
} = infoPanelStore;
|
} = infoPanelStore;
|
||||||
const { membersFilter } = filesStore;
|
const { membersFilter } = filesStore;
|
||||||
const { id: selfId, isAdmin } = userStore.user;
|
const { id: selfId, isAdmin } = userStore.user;
|
||||||
@ -337,7 +323,7 @@ export default inject(
|
|||||||
isPublicRoomType,
|
isPublicRoomType,
|
||||||
membersFilter,
|
membersFilter,
|
||||||
infoPanelMembers,
|
infoPanelMembers,
|
||||||
setInfoPanelMembers,
|
updateInfoPanelMembers,
|
||||||
roomType,
|
roomType,
|
||||||
primaryLink,
|
primaryLink,
|
||||||
isArchiveFolder: isArchiveFolderRoot,
|
isArchiveFolder: isArchiveFolderRoot,
|
||||||
@ -348,11 +334,10 @@ export default inject(
|
|||||||
getPrimaryLink: filesStore.getPrimaryLink,
|
getPrimaryLink: filesStore.getPrimaryLink,
|
||||||
setExternalLink,
|
setExternalLink,
|
||||||
withPublicRoomBlock,
|
withPublicRoomBlock,
|
||||||
fetchMembers,
|
|
||||||
fetchMoreMembers,
|
fetchMoreMembers,
|
||||||
membersIsLoading,
|
membersIsLoading,
|
||||||
searchValue,
|
searchValue,
|
||||||
searchResultIsLoading,
|
isMembersPanelUpdating,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
)(
|
)(
|
||||||
|
@ -88,7 +88,7 @@ class InfoPanelStore {
|
|||||||
infoPanelSelection = null;
|
infoPanelSelection = null;
|
||||||
infoPanelRoom = null;
|
infoPanelRoom = null;
|
||||||
membersIsLoading = false;
|
membersIsLoading = false;
|
||||||
searchResultIsLoading = false;
|
isMembersPanelUpdating = false;
|
||||||
|
|
||||||
shareChanged = false;
|
shareChanged = false;
|
||||||
|
|
||||||
@ -128,15 +128,8 @@ class InfoPanelStore {
|
|||||||
|
|
||||||
setShowSearchBlock = (bool) => (this.showSearchBlock = bool);
|
setShowSearchBlock = (bool) => (this.showSearchBlock = bool);
|
||||||
|
|
||||||
setSearchResultIsLoading = (isLoading) => {
|
|
||||||
this.searchResultIsLoading = isLoading;
|
|
||||||
};
|
|
||||||
|
|
||||||
setSearchValue = (value) => {
|
setSearchValue = (value) => {
|
||||||
if (value !== this.searchValue) {
|
this.searchValue = value;
|
||||||
this.setSearchResultIsLoading(true);
|
|
||||||
this.searchValue = value;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
resetSearch = () => {
|
resetSearch = () => {
|
||||||
@ -171,6 +164,10 @@ class InfoPanelStore {
|
|||||||
this.isScrollLocked = isScrollLocked;
|
this.isScrollLocked = isScrollLocked;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
setIsMembersPanelUpdating = (isMembersPanelUpdating) => {
|
||||||
|
this.isMembersPanelUpdating = isMembersPanelUpdating;
|
||||||
|
};
|
||||||
|
|
||||||
// Selection helpers //
|
// Selection helpers //
|
||||||
|
|
||||||
get infoPanelSelectedItems() {
|
get infoPanelSelectedItems() {
|
||||||
@ -231,6 +228,10 @@ class InfoPanelStore {
|
|||||||
: null;
|
: null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get isRoomMembersPanelOpen() {
|
||||||
|
return this.infoPanelSelection?.isRoom && this.roomsView === infoMembers;
|
||||||
|
}
|
||||||
|
|
||||||
get withPublicRoomBlock() {
|
get withPublicRoomBlock() {
|
||||||
return (
|
return (
|
||||||
this.infoPanelCurrentSelection?.access ===
|
this.infoPanelCurrentSelection?.access ===
|
||||||
@ -643,7 +644,6 @@ class InfoPanelStore {
|
|||||||
const [data, links] = await Promise.all(requests);
|
const [data, links] = await Promise.all(requests);
|
||||||
clearFilter && this.setMembersIsLoading(false);
|
clearFilter && this.setMembersIsLoading(false);
|
||||||
clearTimeout(timerId);
|
clearTimeout(timerId);
|
||||||
this.setSearchResultIsLoading(false);
|
|
||||||
|
|
||||||
links && this.publicRoomStore.setExternalLinks(links);
|
links && this.publicRoomStore.setExternalLinks(links);
|
||||||
|
|
||||||
@ -691,32 +691,21 @@ class InfoPanelStore {
|
|||||||
this.setInfoPanelMembers(mergedMembers);
|
this.setInfoPanelMembers(mergedMembers);
|
||||||
};
|
};
|
||||||
|
|
||||||
addInfoPanelMembers = (t, members) => {
|
updateInfoPanelMembers = async (t) => {
|
||||||
const convertedMembers = this.convertMembers(t, members);
|
if (
|
||||||
|
!this.infoPanelSelection ||
|
||||||
if (this.infoPanelMembers) {
|
!this.infoPanelSelection.isRoom ||
|
||||||
const { roomId, administrators, users, expected, groups } =
|
!this.infoPanelSelection.id
|
||||||
this.infoPanelMembers;
|
) {
|
||||||
|
return;
|
||||||
const mergedMembers = {
|
|
||||||
roomId: roomId,
|
|
||||||
administrators: [...administrators, ...convertedMembers.administrators],
|
|
||||||
users: [...users, ...convertedMembers.users],
|
|
||||||
expected: [...expected, ...convertedMembers.expectedMembers],
|
|
||||||
groups: [...groups, ...convertedMembers.groups],
|
|
||||||
};
|
|
||||||
|
|
||||||
this.addMembersTitle(
|
|
||||||
t,
|
|
||||||
mergedMembers.administrators,
|
|
||||||
mergedMembers.users,
|
|
||||||
mergedMembers.expected,
|
|
||||||
mergedMembers.groups,
|
|
||||||
);
|
|
||||||
|
|
||||||
this.filesStore.setInRoomFolder(roomId, true);
|
|
||||||
this.setInfoPanelMembers(mergedMembers);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.setIsMembersPanelUpdating(true);
|
||||||
|
|
||||||
|
const fetchedMembers = await this.fetchMembers(t, true, !!this.searchValue);
|
||||||
|
this.setInfoPanelMembers(fetchedMembers);
|
||||||
|
|
||||||
|
this.setIsMembersPanelUpdating(false);
|
||||||
};
|
};
|
||||||
|
|
||||||
openShareTab = () => {
|
openShareTab = () => {
|
||||||
|
Loading…
Reference in New Issue
Block a user