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 
			
		
		
		
	Fix space hierarchy not updating when user mutates it
This commit is contained in:
		@@ -44,11 +44,13 @@ import { getChildOrder } from "../../stores/SpaceStore";
 | 
			
		||||
import AccessibleTooltipButton from "../views/elements/AccessibleTooltipButton";
 | 
			
		||||
import { linkifyElement } from "../../HtmlUtils";
 | 
			
		||||
import { getDisplayAliasForAliasSet } from "../../Rooms";
 | 
			
		||||
import { useDispatcher } from "../../hooks/useDispatcher";
 | 
			
		||||
import defaultDispatcher from "../../dispatcher/dispatcher";
 | 
			
		||||
import { Action } from "../../dispatcher/actions";
 | 
			
		||||
 | 
			
		||||
interface IHierarchyProps {
 | 
			
		||||
    space: Room;
 | 
			
		||||
    initialText?: string;
 | 
			
		||||
    refreshToken?: any;
 | 
			
		||||
    additionalButtons?: ReactNode;
 | 
			
		||||
    showRoom(room: ISpaceSummaryRoom, viaServers?: string[], autoJoin?: boolean): void;
 | 
			
		||||
}
 | 
			
		||||
@@ -315,18 +317,25 @@ export const HierarchyLevel = ({
 | 
			
		||||
    </React.Fragment>;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// mutate argument refreshToken to force a reload
 | 
			
		||||
export const useSpaceSummary = (cli: MatrixClient, space: Room, refreshToken?: any): [
 | 
			
		||||
export const useSpaceSummary = (space: Room): [
 | 
			
		||||
    null,
 | 
			
		||||
    ISpaceSummaryRoom[],
 | 
			
		||||
    Map<string, Map<string, ISpaceSummaryEvent>>?,
 | 
			
		||||
    Map<string, Set<string>>?,
 | 
			
		||||
    Map<string, Set<string>>?,
 | 
			
		||||
] | [Error] => {
 | 
			
		||||
    // crude temporary refresh token approach until we have pagination and rework the data flow here
 | 
			
		||||
    const [refreshToken, setRefreshToken] = useState(0);
 | 
			
		||||
    useDispatcher(defaultDispatcher, (payload => {
 | 
			
		||||
        if (payload.action === Action.UpdateSpaceHierarchy) {
 | 
			
		||||
            setRefreshToken(t => t + 1);
 | 
			
		||||
        }
 | 
			
		||||
    }));
 | 
			
		||||
 | 
			
		||||
    // TODO pagination
 | 
			
		||||
    return useAsyncMemo(async () => {
 | 
			
		||||
        try {
 | 
			
		||||
            const data = await cli.getSpaceSummary(space.roomId);
 | 
			
		||||
            const data = await space.client.getSpaceSummary(space.roomId);
 | 
			
		||||
 | 
			
		||||
            const parentChildRelations = new EnhancedMap<string, Map<string, ISpaceSummaryEvent>>();
 | 
			
		||||
            const childParentRelations = new EnhancedMap<string, Set<string>>();
 | 
			
		||||
@@ -354,7 +363,6 @@ export const SpaceHierarchy: React.FC<IHierarchyProps> = ({
 | 
			
		||||
    space,
 | 
			
		||||
    initialText = "",
 | 
			
		||||
    showRoom,
 | 
			
		||||
    refreshToken,
 | 
			
		||||
    additionalButtons,
 | 
			
		||||
    children,
 | 
			
		||||
}) => {
 | 
			
		||||
@@ -364,7 +372,7 @@ export const SpaceHierarchy: React.FC<IHierarchyProps> = ({
 | 
			
		||||
 | 
			
		||||
    const [selected, setSelected] = useState(new Map<string, Set<string>>()); // Map<parentId, Set<childId>>
 | 
			
		||||
 | 
			
		||||
    const [summaryError, rooms, parentChildMap, viaMap, childParentMap] = useSpaceSummary(cli, space, refreshToken);
 | 
			
		||||
    const [summaryError, rooms, parentChildMap, viaMap, childParentMap] = useSpaceSummary(space);
 | 
			
		||||
 | 
			
		||||
    const roomsMap = useMemo(() => {
 | 
			
		||||
        if (!rooms) return null;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user