051d207079
CI / Build & Quality Checks (push) Failing after 5m43s
- ReportRoomModal: use mx.reportRoom() SDK method, fix undefined CSS vars
(--mx-surface/border → folds color tokens), add role/aria-modal/aria-labelledby,
accessible select/input labels, per-error-code messages, auto-close on success
- About.tsx: clickable matrix_id + email_address links (Text as="a"), AbortController
cleanup, runtime JSON type guard, loading state, role display for all role values,
remove classList theming hack, use mx.getHomeserverUrl()
- RoomViewHeader: useLocalRoomName for header title, useReportRoomSupported gate,
hide Invite/Settings/Report for server notice rooms, isCreator guard on Report,
FocusTrap returnFocusOnDeactivate on topic overlay, Server Notice chip tooltip
- RoomInput: replace raw <div> with folds <Box> for server notice read-only message
- EditHistoryModal: isRawEditEvent type guard, handle next_batch truncation,
getVersionBody handles formatted_body (strips HTML for text display),
role/aria-modal/aria-labelledby accessibility, guard for undefined eventId,
use config.space tokens (remove var(--mx-spacing-*) strings)
- RoomNavItem: remove duplicate getExistingContent (use exported getLocalRoomNamesContent),
maxLength={255} on rename input, fix FocusTrap nesting (renameDialog state moved to
RoomNavItem_, RenameRoomDialog rendered outside menu, menu closes before dialog opens),
pencil icon opacity via config.opacity.P300
- useRoomMeta: export getLocalRoomNamesContent for reuse
- RoomIntro: useLocalRoomName, formatted topic viewer with Overlay/FocusTrap/RoomTopicViewer
- CallRoomName: useLocalRoomName for consistent rename display in call overlay
- General.tsx: fix #980000/#FF6B00 hardcoded hex → color tokens/CSS vars, URL Preview
capitalization, improved encrypted preview warning text + Warning chip, add
description to plain urlPreview setting
- sanitize.ts: fix hex color regex to support 3/4/6/8 digit hex (CSS4 #RGBA, #RRGGBBAA)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
60 lines
2.1 KiB
TypeScript
60 lines
2.1 KiB
TypeScript
import React from 'react';
|
|
import { Room } from 'matrix-js-sdk';
|
|
import { Chip, Icon, Icons, Text } from 'folds';
|
|
import { useAtomValue } from 'jotai';
|
|
import { useLocalRoomName } from '../../hooks/useRoomMeta';
|
|
import { RoomIcon } from '../../components/room-avatar';
|
|
import { roomToParentsAtom } from '../../state/room/roomToParents';
|
|
import { getAllParents, guessPerfectParent } from '../../utils/room';
|
|
import { useOrphanSpaces } from '../../state/hooks/roomList';
|
|
import { useMatrixClient } from '../../hooks/useMatrixClient';
|
|
import { allRoomsAtom } from '../../state/room-list/roomList';
|
|
import { mDirectAtom } from '../../state/mDirectList';
|
|
import { useAllJoinedRoomsSet, useGetRoom } from '../../hooks/useGetRoom';
|
|
import { useRoomNavigate } from '../../hooks/useRoomNavigate';
|
|
|
|
type CallRoomNameProps = {
|
|
room: Room;
|
|
};
|
|
export function CallRoomName({ room }: CallRoomNameProps) {
|
|
const mx = useMatrixClient();
|
|
const name = useLocalRoomName(room);
|
|
const roomToParents = useAtomValue(roomToParentsAtom);
|
|
const orphanSpaces = useOrphanSpaces(mx, allRoomsAtom, roomToParents);
|
|
const mDirects = useAtomValue(mDirectAtom);
|
|
const dm = mDirects.has(room.roomId);
|
|
|
|
const allRoomsSet = useAllJoinedRoomsSet();
|
|
const getRoom = useGetRoom(allRoomsSet);
|
|
|
|
const allParents = getAllParents(roomToParents, room.roomId);
|
|
const orphanParents = allParents && orphanSpaces.filter((o) => allParents.has(o));
|
|
const perfectOrphanParent = orphanParents && guessPerfectParent(mx, room.roomId, orphanParents);
|
|
|
|
const { navigateRoom } = useRoomNavigate();
|
|
|
|
return (
|
|
<Chip
|
|
variant="Background"
|
|
radii="Pill"
|
|
before={
|
|
dm ? (
|
|
<Icon size="200" src={Icons.VolumeHigh} filled />
|
|
) : (
|
|
<RoomIcon size="200" joinRule={room.getJoinRule()} roomType={room.getType()} filled />
|
|
)
|
|
}
|
|
onClick={() => navigateRoom(room.roomId)}
|
|
>
|
|
<Text size="L400" truncate>
|
|
{name}
|
|
{!dm && perfectOrphanParent && (
|
|
<Text as="span" size="T200" priority="300">
|
|
{' •'} <b>{getRoom(perfectOrphanParent)?.name ?? perfectOrphanParent}</b>
|
|
</Text>
|
|
)}
|
|
</Text>
|
|
</Chip>
|
|
);
|
|
}
|