Estate: keep the new files free of unresolved-SDK type errors

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Meta Vens 2026-10-31 17:08:47 +01:00
commit f810a83a28
3 changed files with 19 additions and 13 deletions

View file

@ -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<typeof useMatrixClient>, 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 }) {
</NavItemContent>
{state.status === AsyncStatus.Error && (
<Text as="span" size="T200" style={{ color: color.Critical.Main }} truncate>
{state.error.message}
{(state.error as Error).message}
</Text>
)}
<Chip

View file

@ -1,4 +1,3 @@
import { MatrixClient } from 'matrix-js-sdk';
import { EstateRoom } from './buildEstate';
export type EstateActivation =
@ -6,7 +5,9 @@ export type EstateActivation =
| { kind: 'joined'; roomId: string }
| { kind: 'refused'; message: string };
type JoinClient = Pick<MatrixClient, 'joinRoom'>;
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

View file

@ -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<typeof useMatrixClient>,
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<Stewardships>()
? (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)),