From f810a83a281fc643e429cb794f13b84617c20f92 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Sat, 31 Oct 2026 17:08:47 +0100 Subject: [PATCH] Estate: keep the new files free of unresolved-SDK type errors Co-Authored-By: Claude Sonnet 5.5 --- src/app/features/estate/EstateNavigator.tsx | 5 ++--- src/app/features/estate/joinEstateRoom.ts | 5 +++-- src/app/features/estate/useEstate.ts | 22 +++++++++++++-------- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/app/features/estate/EstateNavigator.tsx b/src/app/features/estate/EstateNavigator.tsx index 211f0c3a..811f531b 100644 --- a/src/app/features/estate/EstateNavigator.tsx +++ b/src/app/features/estate/EstateNavigator.tsx @@ -2,7 +2,6 @@ import React, { MouseEventHandler, ReactNode, useCallback, useMemo, useRef } fro import { useNavigate } from 'react-router-dom'; import { useAtom, useAtomValue } from 'jotai'; import { Box, Chip, Icon, IconButton, Icons, Spinner, Text, color } from 'folds'; -import { MatrixClient } from 'matrix-js-sdk'; import { PageNav, PageNavContent, PageNavHeader } from '../../components/page'; import { NavCategory, NavCategoryHeader, NavItem, NavItemContent } from '../../components/nav'; import { RoomNavCategoryButton, RoomNavItem } from '../room-nav'; @@ -30,7 +29,7 @@ import { EstateRoom, EstateTier } from './buildEstate'; import { activateEstateRoom } from './joinEstateRoom'; import { useEstate, useEstateRootId } from './useEstate'; -const estateRoomPath = (mx: MatrixClient, room: EstateRoom): string => { +const estateRoomPath = (mx: ReturnType, room: EstateRoom): string => { const alias = getCanonicalAliasOrRoomId(mx, room.roomId); if (room.parentId === null) return getDirectRoomPath(alias); // A Space the user has not joined has no Space route; the room still resolves from Home. @@ -62,7 +61,7 @@ function JoinRow({ room }: { room: EstateRoom }) { {state.status === AsyncStatus.Error && ( - {state.error.message} + {(state.error as Error).message} )} ; +type JoinClient = { + joinRoom(roomId: string, opts: { viaServers: string[] }): Promise<{ roomId: string }>; +}; /** * What a tap on an estate row does. A joined room opens; any other room is diff --git a/src/app/features/estate/useEstate.ts b/src/app/features/estate/useEstate.ts index 3968d974..fc3d8009 100644 --- a/src/app/features/estate/useEstate.ts +++ b/src/app/features/estate/useEstate.ts @@ -1,7 +1,6 @@ import { useCallback, useEffect, useMemo } from 'react'; import { useAtomValue } from 'jotai'; import { useQuery, useQueryClient } from '@tanstack/react-query'; -import { MatrixClient } from 'matrix-js-sdk'; import { useMatrixClient } from '../../hooks/useMatrixClient'; import { useClientConfig } from '../../hooks/useClientConfig'; import { useFetchSpaceHierarchyLevel } from '../../hooks/useSpaceHierarchy'; @@ -12,14 +11,19 @@ import { allRoomsAtom } from '../../state/room-list/roomList'; import { allInvitesAtom } from '../../state/room-list/inviteList'; import { mDirectAtom } from '../../state/mDirectList'; import { StateEvent } from '../../../types/matrix/room'; -import { buildEstate, EstateTier, Stewardships } from './buildEstate'; +import { buildEstate, EstateHierarchyRoom, EstateTier, Stewardships } from './buildEstate'; const HIERARCHY_DEPTH = 10; -const findLoadedRoom = (mx: MatrixClient, alias: string): string | undefined => - mx - .getRooms() - .find((r) => r.getCanonicalAlias() === alias || r.getAltAliases().includes(alias))?.roomId; +type AliasedRoom = { roomId: string; getCanonicalAlias(): string | null; getAltAliases(): string[] }; + +const findLoadedRoom = ( + mx: ReturnType, + alias: string +): string | undefined => + (mx.getRooms() as AliasedRoom[]).find( + (r) => r.getCanonicalAlias() === alias || r.getAltAliases().includes(alias) + )?.roomId; /** The estate's root Space: featuredCommunities.spaces[0] from the client config. */ export const useEstateRootId = (): { rootId?: string; error?: Error } => { @@ -79,7 +83,9 @@ export const useEstate = (rootId: string): Estate => { () => { const rootRoom = mx.getRoom(rootId); return rootRoom - ? getStateEvent(rootRoom, StateEvent.GameCultStewardships)?.getContent() + ? (getStateEvent(rootRoom, StateEvent.GameCultStewardships)?.getContent() as + | Stewardships + | undefined) : undefined; }, // eslint-disable-next-line react-hooks/exhaustive-deps @@ -98,7 +104,7 @@ export const useEstate = (rootId: string): Estate => { }); return buildEstate({ rootId, - hierarchy: Array.from(rooms.values()), + hierarchy: Array.from(rooms.values()) as EstateHierarchyRoom[], stewardships, membership, directRoomIds: Array.from(mDirects).filter((id) => joined.includes(id)),