You've already forked matrix-react-sdk
							
							
				mirror of
				https://github.com/matrix-org/matrix-react-sdk.git
				synced 2025-11-04 11:51:45 +03:00 
			
		
		
		
	Consolidate space summary api logic between space room view and directory
This commit is contained in:
		@@ -15,7 +15,8 @@ limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
import React, {useMemo, useState} from "react";
 | 
			
		||||
import Room from "matrix-js-sdk/src/models/room";
 | 
			
		||||
import {Room} from "matrix-js-sdk/src/models/room";
 | 
			
		||||
import {MatrixClient} from "matrix-js-sdk/src/client";
 | 
			
		||||
import {EventType, RoomType} from "matrix-js-sdk/src/@types/event";
 | 
			
		||||
import classNames from "classnames";
 | 
			
		||||
import {sortBy} from "lodash";
 | 
			
		||||
@@ -232,7 +233,7 @@ export const showRoom = (room: ISpaceSummaryRoom, viaServers?: string[], autoJoi
 | 
			
		||||
interface IHierarchyLevelProps {
 | 
			
		||||
    spaceId: string;
 | 
			
		||||
    rooms: Map<string, ISpaceSummaryRoom>;
 | 
			
		||||
    relations: EnhancedMap<string, Map<string, ISpaceSummaryEvent>>;
 | 
			
		||||
    relations: Map<string, Map<string, ISpaceSummaryEvent>>;
 | 
			
		||||
    parents: Set<string>;
 | 
			
		||||
    selectedMap?: Map<string, Set<string>>;
 | 
			
		||||
    onViewRoomClick(roomId: string, autoJoin: boolean): void;
 | 
			
		||||
@@ -308,23 +309,15 @@ export const HierarchyLevel = ({
 | 
			
		||||
    </React.Fragment>
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const SpaceRoomDirectory: React.FC<IProps> = ({ space, initialText = "", onFinished }) => {
 | 
			
		||||
// mutate argument refreshToken to force a reload
 | 
			
		||||
export const useSpaceSummary = (cli: MatrixClient, space: Room, refreshToken?: any): [
 | 
			
		||||
    ISpaceSummaryRoom[],
 | 
			
		||||
    Map<string, Map<string, ISpaceSummaryEvent>>,
 | 
			
		||||
    Map<string, Set<string>>,
 | 
			
		||||
    Map<string, Set<string>>,
 | 
			
		||||
] | [] => {
 | 
			
		||||
    // TODO pagination
 | 
			
		||||
    const cli = MatrixClientPeg.get();
 | 
			
		||||
    const userId = cli.getUserId();
 | 
			
		||||
    const [query, setQuery] = useState(initialText);
 | 
			
		||||
 | 
			
		||||
    const onCreateRoomClick = () => {
 | 
			
		||||
        dis.dispatch({
 | 
			
		||||
            action: 'view_create_room',
 | 
			
		||||
            public: true,
 | 
			
		||||
        });
 | 
			
		||||
        onFinished();
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    const [selected, setSelected] = useState(new Map<string, Set<string>>()); // Map<parentId, Set<childId>>
 | 
			
		||||
 | 
			
		||||
    const [rooms, parentChildMap, childParentMap, viaMap] = useAsyncMemo(async () => {
 | 
			
		||||
    return useAsyncMemo(async () => {
 | 
			
		||||
        try {
 | 
			
		||||
            const data = await cli.getSpaceSummary(space.roomId);
 | 
			
		||||
 | 
			
		||||
@@ -342,13 +335,31 @@ const SpaceRoomDirectory: React.FC<IProps> = ({ space, initialText = "", onFinis
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            return [data.rooms as ISpaceSummaryRoom[], parentChildRelations, childParentRelations, viaMap];
 | 
			
		||||
            return [data.rooms as ISpaceSummaryRoom[], parentChildRelations, viaMap, childParentRelations];
 | 
			
		||||
        } catch (e) {
 | 
			
		||||
            console.error(e); // TODO
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return [];
 | 
			
		||||
    }, [space], []);
 | 
			
		||||
    }, [space, refreshToken], []);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const SpaceRoomDirectory: React.FC<IProps> = ({ space, initialText = "", onFinished }) => {
 | 
			
		||||
    const cli = MatrixClientPeg.get();
 | 
			
		||||
    const userId = cli.getUserId();
 | 
			
		||||
    const [query, setQuery] = useState(initialText);
 | 
			
		||||
 | 
			
		||||
    const onCreateRoomClick = () => {
 | 
			
		||||
        dis.dispatch({
 | 
			
		||||
            action: 'view_create_room',
 | 
			
		||||
            public: true,
 | 
			
		||||
        });
 | 
			
		||||
        onFinished();
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    const [selected, setSelected] = useState(new Map<string, Set<string>>()); // Map<parentId, Set<childId>>
 | 
			
		||||
 | 
			
		||||
    const [rooms, parentChildMap, viaMap, childParentMap] = useSpaceSummary(cli, space);
 | 
			
		||||
 | 
			
		||||
    const roomsMap = useMemo(() => {
 | 
			
		||||
        if (!rooms) return null;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user