Fix Manage Restricted Join Rule Dialog for Spaces (#7208)

pull/21833/head
Michael Telatynski 2021-11-29 09:23:25 +00:00 committed by GitHub
parent 9fefeefc8c
commit 35d4ec6e80
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 8 deletions

View File

@ -66,6 +66,17 @@ const Entry = ({ room, checked, onChange }) => {
</label>; </label>;
}; };
const addAllParents = (set: Set<Room>, room: Room): void => {
const cli = room.client;
const parents = Array.from(SpaceStore.instance.getKnownParents(room.roomId)).map(parentId => cli.getRoom(parentId));
parents.forEach(parent => {
if (set.has(parent)) return;
set.add(parent);
addAllParents(set, parent);
});
};
const ManageRestrictedJoinRuleDialog: React.FC<IProps> = ({ room, selected = [], onFinished }) => { const ManageRestrictedJoinRuleDialog: React.FC<IProps> = ({ room, selected = [], onFinished }) => {
const cli = room.client; const cli = room.client;
const [newSelected, setNewSelected] = useState(new Set<string>(selected)); const [newSelected, setNewSelected] = useState(new Set<string>(selected));
@ -73,9 +84,10 @@ const ManageRestrictedJoinRuleDialog: React.FC<IProps> = ({ room, selected = [],
const lcQuery = query.toLowerCase().trim(); const lcQuery = query.toLowerCase().trim();
const [spacesContainingRoom, otherEntries] = useMemo(() => { const [spacesContainingRoom, otherEntries] = useMemo(() => {
const spaces = cli.getVisibleRooms().filter(r => r.getMyMembership() === "join" && r.isSpaceRoom()); const parents = new Set<Room>();
addAllParents(parents, room);
return [ return [
spaces.filter(r => SpaceStore.instance.getSpaceFilteredRoomIds(r.roomId).has(room.roomId)), Array.from(parents),
selected.map(roomId => { selected.map(roomId => {
const room = cli.getRoom(roomId); const room = cli.getRoom(roomId);
if (!room) { if (!room) {
@ -86,9 +98,9 @@ const ManageRestrictedJoinRuleDialog: React.FC<IProps> = ({ room, selected = [],
} }
}).filter(Boolean), }).filter(Boolean),
]; ];
}, [cli, selected, room.roomId]); }, [cli, selected, room]);
const [filteredSpacesContainingRooms, filteredOtherEntries] = useMemo(() => [ const [filteredSpacesContainingRoom, filteredOtherEntries] = useMemo(() => [
spacesContainingRoom.filter(r => r.name.toLowerCase().includes(lcQuery)), spacesContainingRoom.filter(r => r.name.toLowerCase().includes(lcQuery)),
otherEntries.filter(r => r.name.toLowerCase().includes(lcQuery)), otherEntries.filter(r => r.name.toLowerCase().includes(lcQuery)),
], [spacesContainingRoom, otherEntries, lcQuery]); ], [spacesContainingRoom, otherEntries, lcQuery]);
@ -129,10 +141,14 @@ const ManageRestrictedJoinRuleDialog: React.FC<IProps> = ({ room, selected = [],
autoFocus={true} autoFocus={true}
/> />
<AutoHideScrollbar className="mx_ManageRestrictedJoinRuleDialog_content"> <AutoHideScrollbar className="mx_ManageRestrictedJoinRuleDialog_content">
{ filteredSpacesContainingRooms.length > 0 ? ( { filteredSpacesContainingRoom.length > 0 ? (
<div className="mx_ManageRestrictedJoinRuleDialog_section"> <div className="mx_ManageRestrictedJoinRuleDialog_section">
<h3>{ _t("Spaces you know that contain this room") }</h3> <h3>
{ filteredSpacesContainingRooms.map(space => { { room.isSpaceRoom()
? _t("Spaces you know that contain this space")
: _t("Spaces you know that contain this room") }
</h3>
{ filteredSpacesContainingRoom.map(space => {
return <Entry return <Entry
key={space.roomId} key={space.roomId}
room={space} room={space}
@ -164,7 +180,7 @@ const ManageRestrictedJoinRuleDialog: React.FC<IProps> = ({ room, selected = [],
</div> </div>
) : null } ) : null }
{ filteredSpacesContainingRooms.length + filteredOtherEntries.length < 1 { filteredSpacesContainingRoom.length + filteredOtherEntries.length < 1
? <span className="mx_ManageRestrictedJoinRuleDialog_noResults"> ? <span className="mx_ManageRestrictedJoinRuleDialog_noResults">
{ _t("No results") } { _t("No results") }
</span> </span>

View File

@ -2570,6 +2570,7 @@
"Select spaces": "Select spaces", "Select spaces": "Select spaces",
"Decide which spaces can access this room. If a space is selected, its members can find and join <RoomName/>.": "Decide which spaces can access this room. If a space is selected, its members can find and join <RoomName/>.", "Decide which spaces can access this room. If a space is selected, its members can find and join <RoomName/>.": "Decide which spaces can access this room. If a space is selected, its members can find and join <RoomName/>.",
"Search spaces": "Search spaces", "Search spaces": "Search spaces",
"Spaces you know that contain this space": "Spaces you know that contain this space",
"Spaces you know that contain this room": "Spaces you know that contain this room", "Spaces you know that contain this room": "Spaces you know that contain this room",
"Other spaces or rooms you might not know": "Other spaces or rooms you might not know", "Other spaces or rooms you might not know": "Other spaces or rooms you might not know",
"These are likely ones other room admins are a part of.": "These are likely ones other room admins are a part of.", "These are likely ones other room admins are a part of.": "These are likely ones other room admins are a part of.",