diff --git a/apps/meteor/client/views/admin/rooms/EditRoom.tsx b/apps/meteor/client/views/admin/rooms/EditRoom.tsx index b1e27e57cfd1d..2f590e135d770 100644 --- a/apps/meteor/client/views/admin/rooms/EditRoom.tsx +++ b/apps/meteor/client/views/admin/rooms/EditRoom.tsx @@ -135,6 +135,8 @@ const EditRoom = ({ room, onChange, onDelete, onClose }: EditRoomProps) => { const favoriteField = useId(); const featuredField = useId(); + const roomIsFederated = isRoomFederated(room); + return ( <> @@ -144,7 +146,7 @@ const EditRoom = ({ room, onChange, onDelete, onClose }: EditRoomProps) => { name='roomAvatar' control={control} render={({ field: { value, onChange } }) => ( - + )} /> @@ -194,7 +196,7 @@ const EditRoom = ({ room, onChange, onDelete, onClose }: EditRoomProps) => { name='roomDescription' control={control} render={({ field }) => ( - + )} /> @@ -208,7 +210,7 @@ const EditRoom = ({ room, onChange, onDelete, onClose }: EditRoomProps) => { name='roomAnnouncement' control={control} render={({ field }) => ( - + )} /> @@ -237,7 +239,7 @@ const EditRoom = ({ room, onChange, onDelete, onClose }: EditRoomProps) => { onChange(value === 'p' ? 'c' : 'p')} aria-describedby={`${roomTypeField}-hint`} @@ -259,7 +261,7 @@ const EditRoom = ({ room, onChange, onDelete, onClose }: EditRoomProps) => { @@ -280,7 +282,7 @@ const EditRoom = ({ room, onChange, onDelete, onClose }: EditRoomProps) => { )} @@ -297,7 +299,7 @@ const EditRoom = ({ room, onChange, onDelete, onClose }: EditRoomProps) => { name='archived' control={control} render={({ field: { value, ...field } }) => ( - + )} /> @@ -312,7 +314,7 @@ const EditRoom = ({ room, onChange, onDelete, onClose }: EditRoomProps) => { name='isDefault' control={control} render={({ field: { value, ...field } }) => ( - + )} /> @@ -336,7 +338,7 @@ const EditRoom = ({ room, onChange, onDelete, onClose }: EditRoomProps) => { name='featured' control={control} render={({ field: { value, ...field } }) => ( - + )} /> @@ -353,7 +355,7 @@ const EditRoom = ({ room, onChange, onDelete, onClose }: EditRoomProps) => { - diff --git a/apps/meteor/client/views/room/contextualBar/Info/EditRoomInfo/EditRoomInfo.tsx b/apps/meteor/client/views/room/contextualBar/Info/EditRoomInfo/EditRoomInfo.tsx index 9d5ed13c328b0..b3967498470c8 100644 --- a/apps/meteor/client/views/room/contextualBar/Info/EditRoomInfo/EditRoomInfo.tsx +++ b/apps/meteor/client/views/room/contextualBar/Info/EditRoomInfo/EditRoomInfo.tsx @@ -79,7 +79,7 @@ const EditRoomInfo = ({ room, onClickClose, onClickBack }: EditRoomInfoProps) => const query = useQueryClient(); const t = useTranslation(); const dispatchToastMessage = useToastMessageDispatch(); - const isFederated = useMemo(() => isRoomFederated(room), [room]); + const isFederated = isRoomFederated(room); // eslint-disable-next-line no-nested-ternary const roomType = 'prid' in room ? 'discussion' : room.teamMain ? 'team' : 'channel'; diff --git a/apps/meteor/client/views/room/contextualBar/RoomMembers/RoomMembersWithData.tsx b/apps/meteor/client/views/room/contextualBar/RoomMembers/RoomMembersWithData.tsx index fc012664c3cf5..a4a93cd68fd95 100644 --- a/apps/meteor/client/views/room/contextualBar/RoomMembers/RoomMembersWithData.tsx +++ b/apps/meteor/client/views/room/contextualBar/RoomMembers/RoomMembersWithData.tsx @@ -76,9 +76,9 @@ const RoomMembersWithData = ({ rid }: { rid: IRoom['_id'] }): ReactElement => { setState({ tab: ROOM_MEMBERS_TABS.ADD }); }); - const handleBack = useCallback(() => { + const handleBack = useEffectEvent(() => { setState({ tab: ROOM_MEMBERS_TABS.LIST }); - }, [setState]); + }); if (state.tab === ROOM_MEMBERS_TABS.INFO && state.userId) { return ; diff --git a/apps/meteor/client/views/room/hooks/useUserInfoActions/actions/useAddUserAction.tsx b/apps/meteor/client/views/room/hooks/useUserInfoActions/actions/useAddUserAction.tsx index 2805061608e60..646eb3bdb9db2 100644 --- a/apps/meteor/client/views/room/hooks/useUserInfoActions/actions/useAddUserAction.tsx +++ b/apps/meteor/client/views/room/hooks/useUserInfoActions/actions/useAddUserAction.tsx @@ -44,8 +44,10 @@ export const useAddUserAction = ( rid, ); + const roomIsFederated = isRoomFederated(room); + const userCanAdd = - room && user && isRoomFederated(room) + room && user && roomIsFederated ? Federation.isEditableByTheUser(currentUser || undefined, room, subscription) : hasPermissionToAddUsers; diff --git a/apps/meteor/client/views/room/hooks/useUserInfoActions/actions/useChangeModeratorAction.tsx b/apps/meteor/client/views/room/hooks/useUserInfoActions/actions/useChangeModeratorAction.tsx index 729b9cfce5919..e8827e8512563 100644 --- a/apps/meteor/client/views/room/hooks/useUserInfoActions/actions/useChangeModeratorAction.tsx +++ b/apps/meteor/client/views/room/hooks/useUserInfoActions/actions/useChangeModeratorAction.tsx @@ -143,9 +143,11 @@ export const useChangeModeratorAction = (user: Pick, const changeModeratorAction = useEffectEvent(() => handleChangeModerator({ userId: uid })); + const roomIsFederated = isRoomFederated(room); + const changeModeratorOption = useMemo( () => - (isRoomFederated(room) && roomCanSetModerator) || (!isRoomFederated(room) && roomCanSetModerator && userCanSetModerator) + (roomIsFederated && roomCanSetModerator) || (!roomIsFederated && roomCanSetModerator && userCanSetModerator) ? { content: t(isModerator ? 'Remove_as_moderator' : 'Set_as_moderator'), icon: 'shield-blank' as const, @@ -153,7 +155,7 @@ export const useChangeModeratorAction = (user: Pick, type: 'privileges' as UserInfoActionType, } : undefined, - [changeModeratorAction, isModerator, roomCanSetModerator, t, userCanSetModerator, room], + [changeModeratorAction, isModerator, roomCanSetModerator, t, userCanSetModerator, roomIsFederated], ); return changeModeratorOption; diff --git a/apps/meteor/client/views/room/hooks/useUserInfoActions/actions/useChangeOwnerAction.tsx b/apps/meteor/client/views/room/hooks/useUserInfoActions/actions/useChangeOwnerAction.tsx index b3688d7297630..90c76ad43c194 100644 --- a/apps/meteor/client/views/room/hooks/useUserInfoActions/actions/useChangeOwnerAction.tsx +++ b/apps/meteor/client/views/room/hooks/useUserInfoActions/actions/useChangeOwnerAction.tsx @@ -131,9 +131,11 @@ export const useChangeOwnerAction = (user: Pick, rid: const changeOwnerAction = useEffectEvent(async () => handleChangeOwner()); + const roomIsFederated = isRoomFederated(room); + const changeOwnerOption = useMemo( () => - (isRoomFederated(room) && roomCanSetOwner) || (!isRoomFederated(room) && roomCanSetOwner && userCanSetOwner) + (roomIsFederated && roomCanSetOwner) || (!roomIsFederated && roomCanSetOwner && userCanSetOwner) ? { content: t(isOwner ? 'Remove_as_owner' : 'Set_as_owner'), icon: 'shield-check' as const, @@ -141,7 +143,7 @@ export const useChangeOwnerAction = (user: Pick, rid: type: 'privileges' as UserInfoActionType, } : undefined, - [changeOwnerAction, roomCanSetOwner, userCanSetOwner, isOwner, t, room], + [changeOwnerAction, roomCanSetOwner, userCanSetOwner, isOwner, t, roomIsFederated], ); return changeOwnerOption; diff --git a/apps/meteor/client/views/room/hooks/useUserInfoActions/actions/useRemoveUserAction.tsx b/apps/meteor/client/views/room/hooks/useUserInfoActions/actions/useRemoveUserAction.tsx index 2a0cc15afc8ba..c0b0020c928c6 100644 --- a/apps/meteor/client/views/room/hooks/useUserInfoActions/actions/useRemoveUserAction.tsx +++ b/apps/meteor/client/views/room/hooks/useUserInfoActions/actions/useRemoveUserAction.tsx @@ -39,7 +39,10 @@ export const useRemoveUserAction = ( const { _id: uid } = user; const hasPermissionToRemove = usePermission('remove-user', rid); - const userCanRemove = isRoomFederated(room) + + const roomIsFederated = isRoomFederated(room); + + const userCanRemove = roomIsFederated ? Federation.isEditableByTheUser(currentUser || undefined, room, subscription) : hasPermissionToRemove; const setModal = useSetModal();