/* * Copyright 2025 New Vector Ltd. * * SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only OR LicenseRef-Element-Commercial * Please see LICENSE files in the repository root for full details. */ import React, { type JSX, useState } from "react"; import { IconButton, Menu, MenuItem } from "@vector-im/compound-web"; import ComposeIcon from "@vector-im/compound-design-tokens/assets/web/icons/compose"; import UserAddIcon from "@vector-im/compound-design-tokens/assets/web/icons/user-add"; import ChevronDownIcon from "@vector-im/compound-design-tokens/assets/web/icons/chevron-down"; import RoomIcon from "@vector-im/compound-design-tokens/assets/web/icons/room"; import HomeIcon from "@vector-im/compound-design-tokens/assets/web/icons/home"; import PreferencesIcon from "@vector-im/compound-design-tokens/assets/web/icons/preferences"; import SettingsIcon from "@vector-im/compound-design-tokens/assets/web/icons/settings"; import VideoCallIcon from "@vector-im/compound-design-tokens/assets/web/icons/video-call"; import { _t } from "../../../../languageHandler"; import { Flex } from "../../../utils/Flex"; import { type RoomListHeaderViewState, useRoomListHeaderViewModel, } from "../../../viewmodels/roomlist/RoomListHeaderViewModel"; /** * The header view for the room list * The space name is displayed and a compose menu is shown if the user can create rooms */ export function RoomListHeaderView(): JSX.Element { const vm = useRoomListHeaderViewModel(); return (

{vm.title}

{vm.displaySpaceMenu && }
{vm.displayComposeMenu && }
); } interface SpaceMenuProps { /** * The view model for the room list header */ vm: RoomListHeaderViewState; } /** * The space menu for the room list header */ function SpaceMenu({ vm }: SpaceMenuProps): JSX.Element { const [open, setOpen] = useState(false); return ( } > {vm.canInviteInSpace && ( )} {vm.canAccessSpaceSettings && ( )} ); } interface ComposeMenuProps { /** * The view model for the room list header */ vm: RoomListHeaderViewState; } /** * The compose menu for the room list header */ function ComposeMenu({ vm }: ComposeMenuProps): JSX.Element { const [open, setOpen] = useState(false); return ( } > {vm.canCreateRoom && } {vm.canCreateVideoRoom && ( )} ); }