Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
3c5a1e4
feat: remove feature preview toggler from contextualbar
dougfabris Oct 23, 2025
4d7efc5
feat: remove old Header from `ui-client`
dougfabris Oct 23, 2025
9b75770
chore: remove `Header` from apps/meteor
dougfabris Oct 23, 2025
cdc392d
chore: remove old logical `Header`
dougfabris Oct 23, 2025
09cb316
chore: use components from `ui-client`
dougfabris Oct 23, 2025
3c5d8b1
chore: remove old files
dougfabris Oct 23, 2025
079953d
chore: remove feature preview
dougfabris Oct 23, 2025
a124b21
fix: ts
dougfabris Oct 23, 2025
6fcb36b
test: update snapshots
dougfabris Oct 23, 2025
44ae665
test: fix locators
dougfabris Oct 23, 2025
45b3602
chore: remove old header unit test
dougfabris Nov 4, 2025
aef59dd
chore: `Header` import
dougfabris Nov 4, 2025
3215059
chore: tweak voice-calls test
dougfabris Nov 4, 2025
7a80077
test: update snapshots
dougfabris Nov 5, 2025
b7ac799
fix: import
dougfabris Dec 5, 2025
ce62ab2
test: add `navbar` to `FederationChannel` PO
juliajforesti Dec 5, 2025
2215be4
test: adjust `voice-calls` tests
juliajforesti Dec 8, 2025
5872697
test: improve `admin-rooms` locator specificity
juliajforesti Dec 8, 2025
31116be
test: prevent flaky on `admin-room` when changing section navigation
juliajforesti Dec 8, 2025
5ea0626
test: adjust `administration-settings`
juliajforesti Dec 8, 2025
8db1b1e
test: improve `create new room`
juliajforesti Dec 8, 2025
c7f8045
test: adjust `e2ee-encryption-decryption`
juliajforesti Dec 8, 2025
b07839c
test: replace `sidenav.logout` with `navbar.logout`
juliajforesti Dec 8, 2025
20a478a
test: improve `create-new` PO
juliajforesti Dec 8, 2025
2901dd2
test: adjust `channel-management`
juliajforesti Dec 9, 2025
13b16d0
test: adjust `e2ee-encrypted-channels`
juliajforesti Dec 9, 2025
2e9decc
test: adjust `checkboxEncrypted` locator
juliajforesti Dec 9, 2025
048e9e0
test: adjust `e2ee-encryption-decryption`
juliajforesti Dec 9, 2025
76daf3f
test: move tests from `feature-preview` to `sidebar.spec`
juliajforesti Dec 9, 2025
75e6ab6
test: `getSearchRoomByName` for unread items
juliajforesti Dec 9, 2025
b53ab31
test: rename `homeButton` to `btnHome`
juliajforesti Dec 9, 2025
7cbbfd4
test: adjust `notification-sounds.spec`
juliajforesti Dec 9, 2025
99c5655
test: adjust `search-discussion.spec`
juliajforesti Dec 9, 2025
5d0fc04
test: adjust `sidebar-administration-menu.spec`
juliajforesti Dec 9, 2025
c84b0e4
test: improve navbar `createNew`
juliajforesti Dec 9, 2025
ad489a4
test: `create-new-dm`
juliajforesti Dec 9, 2025
72b37e9
test: `home-team` remove duplicated
juliajforesti Dec 9, 2025
bfb832b
test: add `federated` to `createNew`
juliajforesti Dec 9, 2025
06abd12
test: replace `sidenav` with `navbar` locators
juliajforesti Dec 9, 2025
7a5e11c
test: adjust presence status
juliajforesti Dec 9, 2025
fb56b33
test: `home-omnichannel` remove duplicated
juliajforesti Dec 10, 2025
af63627
test: replace `sidenav` with `navbar` locators
juliajforesti Dec 10, 2025
81bf598
test: replace Profile `account-sidenav` with `account-sidebar`
juliajforesti Dec 10, 2025
f93ca11
test: add `getSearchItemBadge` to `navbar`
juliajforesti Dec 10, 2025
2dbc5cb
test: replace `sidenav` with `navbar` locators
juliajforesti Dec 10, 2025
4e0f7cb
test: override `home-omnichannel` properties
juliajforesti Dec 10, 2025
0e60181
test: replace `sidenav.getSidebarItemByName` with `sidebar.getSidebar…
juliajforesti Dec 10, 2025
31cdbbf
test: replace `sidenav.switchStatus` with `sidebar.changeUserStatus`
juliajforesti Dec 10, 2025
a5770d8
test: replace `sidenav` with `navbar` and `sidebar`
juliajforesti Dec 10, 2025
8518ceb
test: cleanup `home-sidenav` unused locators
juliajforesti Dec 10, 2025
2112ba2
feat: remove `new-navigation` feature from `RoomInvite`
juliajforesti Dec 10, 2025
2c3f40b
test: move more locators away from `home-sidenav`
juliajforesti Dec 10, 2025
d43b685
test: move more locators away from `home-sidenav`
juliajforesti Dec 11, 2025
5e315c8
test: adjust `feature-preview`
juliajforesti Dec 11, 2025
5c3f2da
chore: delete `Header` folder
juliajforesti Dec 11, 2025
428ce4b
chore: update snapshot
juliajforesti Dec 11, 2025
cc52251
test: `waitForRoomLoad`
juliajforesti Dec 11, 2025
a78355b
tests: adjust `federation` tests
juliajforesti Dec 11, 2025
24677e5
test: adjust `omnichannel-livechat-api` locators
juliajforesti Dec 11, 2025
09f70ab
test: adjust `Create team` locator
juliajforesti Dec 11, 2025
67503ed
test: fix failing tests
juliajforesti Dec 12, 2025
992ab3b
fix: ts
dougfabris Dec 16, 2025
8e1ec28
chore: changeset
dougfabris Dec 17, 2025
9b67252
chore: `PageHeaderNoShadow` import
dougfabris Dec 17, 2025
b44787e
test: update snapshots
dougfabris Dec 17, 2025
ad22a34
fix: wrong import
dougfabris Dec 17, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/wet-walls-drive.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'@rocket.chat/ui-client': major
'@rocket.chat/meteor': major
---

Promotes Enhanced Navigation from preview state to stable.
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ type CreateDirectMessageProps = { onClose: () => void };
const CreateDirectMessage = ({ onClose }: CreateDirectMessageProps) => {
const t = useTranslation();
const directMaxUsers = useSetting('DirectMesssage_maxUsers', 1);
const createDMFormId = useId();
const membersFieldId = useId();
const dispatchToastMessage = useToastMessageDispatch();

Expand Down Expand Up @@ -57,9 +58,13 @@ const CreateDirectMessage = ({ onClose }: CreateDirectMessageProps) => {
};

return (
<Modal data-qa='create-direct-modal' wrapperFunction={(props) => <Box is='form' onSubmit={handleSubmit(handleCreate)} {...props} />}>
<Modal
aria-labelledby={`${createDMFormId}-title`}
data-qa='create-direct-modal'
wrapperFunction={(props) => <Box is='form' onSubmit={handleSubmit(handleCreate)} {...props} />}
>
<ModalHeader>
<ModalTitle>{t('Create_direct_message')}</ModalTitle>
<ModalTitle id={`${createDMFormId}-title`}>{t('Create_direct_message')}</ModalTitle>
<ModalClose tabIndex={-1} onClick={onClose} />
</ModalHeader>
<ModalContent mbe={2}>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import {
import { useEffectEvent, useLocalStorage } from '@rocket.chat/fuselage-hooks';
import { useToastMessageDispatch, useSetting, useTranslation, useEndpoint } from '@rocket.chat/ui-contexts';
import type { ReactElement, ChangeEvent, ComponentProps, FormEvent } from 'react';
import { useState, useCallback } from 'react';
import { useState, useCallback, useId } from 'react';

import UserStatusMenu from '../../../components/UserStatusMenu';
import { USER_STATUS_TEXT_MAX_LENGTH } from '../../../lib/constants';
Expand All @@ -39,6 +39,7 @@ const EditStatusModal = ({ onClose, userStatus, userStatusText }: EditStatusModa
const initialStatusText = customStatus || userStatusText;

const t = useTranslation();
const modalId = useId();
const [statusText, setStatusText] = useState(initialStatusText);
const [statusType, setStatusType] = useState(userStatus);
const [statusTextError, setStatusTextError] = useState<string | undefined>();
Expand Down Expand Up @@ -71,6 +72,7 @@ const EditStatusModal = ({ onClose, userStatus, userStatusText }: EditStatusModa

return (
<Modal
aria-labelledby={`${modalId}-title`}
wrapperFunction={(props: ComponentProps<typeof Box>) => (
<Box
is='form'
Expand All @@ -84,15 +86,17 @@ const EditStatusModal = ({ onClose, userStatus, userStatusText }: EditStatusModa
>
<ModalHeader>
<ModalIcon name='info' />
<ModalTitle>{t('Edit_Status')}</ModalTitle>
<ModalTitle id={`${modalId}-title`}>{t('Edit_Status')}</ModalTitle>
<ModalClose onClick={onClose} />
</ModalHeader>
<ModalContent fontScale='p2'>
<FieldGroup>
<Field>
<FieldLabel>{t('StatusMessage')}</FieldLabel>
<FieldLabel htmlFor={`${modalId}-status-message`}>{t('StatusMessage')}</FieldLabel>
<FieldRow>
<TextInput
id={`${modalId}-status-message`}
aria-label={t('StatusMessage')}
error={statusTextError}
disabled={!allowUserStatusMessageChange}
flexGrow={1}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ exports[`renders Default without crashing 1`] = `
tabindex="-1"
>
<div
class="rcx-box rcx-box--full rcx-css-iag4sp"
class="rcx-box rcx-box--full rcx-css-16efnhh"
>
<div
class="rcx-box rcx-box--full rcx-css-15qq8ie"
Expand Down Expand Up @@ -341,7 +341,7 @@ exports[`renders WithABACAttributes without crashing 1`] = `
tabindex="-1"
>
<div
class="rcx-box rcx-box--full rcx-css-iag4sp"
class="rcx-box rcx-box--full rcx-css-16efnhh"
>
<div
class="rcx-box rcx-box--full rcx-css-15qq8ie"
Expand Down Expand Up @@ -695,7 +695,7 @@ exports[`renders WithVoiceCallExtension without crashing 1`] = `
tabindex="-1"
>
<div
class="rcx-box rcx-box--full rcx-css-iag4sp"
class="rcx-box rcx-box--full rcx-css-16efnhh"
>
<div
class="rcx-box rcx-box--full rcx-css-15qq8ie"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Box } from '@rocket.chat/fuselage';
import { GenericMenu, HeaderV1ToolbarAction } from '@rocket.chat/ui-client';
import { GenericMenu, HeaderToolbarAction } from '@rocket.chat/ui-client';
import { useToastMessageDispatch } from '@rocket.chat/ui-contexts';
import type { RoomToolboxActionConfig } from '@rocket.chat/ui-contexts';
import { useMemo } from 'react';
Expand Down Expand Up @@ -39,7 +39,7 @@ export const useAppsRoomStarActions = () => {
order: 3,
renderToolboxItem: ({ id, icon, title, disabled, className }) => (
<GenericMenu
button={<HeaderV1ToolbarAction icon={icon} />}
button={<HeaderToolbarAction icon={icon} />}
key={id}
title={title}
disabled={disabled}
Expand Down
9 changes: 7 additions & 2 deletions apps/meteor/client/sidebar/header/CreateDirectMessage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import { goToRoomById } from '../../lib/utils/goToRoomById';
const CreateDirectMessage = ({ onClose }: { onClose: () => void }) => {
const t = useTranslation();
const directMaxUsers = useSetting('DirectMesssage_maxUsers', 1);
const createDMFormId = useId();
const membersFieldId = useId();
const dispatchToastMessage = useToastMessageDispatch();

Expand Down Expand Up @@ -55,9 +56,13 @@ const CreateDirectMessage = ({ onClose }: { onClose: () => void }) => {
};

return (
<Modal data-qa='create-direct-modal' wrapperFunction={(props) => <Box is='form' onSubmit={handleSubmit(handleCreate)} {...props} />}>
<Modal
aria-labelledby={`${createDMFormId}-title`}
data-qa='create-direct-modal'
wrapperFunction={(props) => <Box is='form' onSubmit={handleSubmit(handleCreate)} {...props} />}
>
<ModalHeader>
<ModalTitle>{t('Create_direct_message')}</ModalTitle>
<ModalTitle id={`${createDMFormId}-title`}>{t('Create_direct_message')}</ModalTitle>
<ModalClose tabIndex={-1} onClick={onClose} />
</ModalHeader>
<ModalContent mbe={2}>
Expand Down
58 changes: 17 additions & 41 deletions apps/meteor/client/sidebar/header/Header.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { Sidebar, SidebarDivider, SidebarSection } from '@rocket.chat/fuselage';
import { FeaturePreview, FeaturePreviewOff, FeaturePreviewOn } from '@rocket.chat/ui-client';
import { SidebarSection } from '@rocket.chat/fuselage';
import { useTranslation, useUser } from '@rocket.chat/ui-contexts';
import type { ReactElement } from 'react';
import { memo } from 'react';
Expand All @@ -20,45 +19,22 @@ const Header = (): ReactElement => {
const user = useUser();

return (
<FeaturePreview feature='newNavigation'>
<FeaturePreviewOff>
<Sidebar.TopBar.Section>
{user ? <UserMenu user={user} /> : <UserAvatarWithStatus />}
<SidebarHeaderToolbar aria-label={t('Sidebar_actions')}>
<Home title={t('Home')} />
<Search title={t('Search')} />
{user && (
<>
<Directory title={t('Directory')} />
<Sort title={t('Display')} />
<CreateRoom title={t('Create_new')} data-qa='sidebar-create' />
<Administration title={t('Administration')} />
</>
)}
{!user && <Login title={t('Login')} />}
</SidebarHeaderToolbar>
</Sidebar.TopBar.Section>
</FeaturePreviewOff>
<FeaturePreviewOn>
<SidebarSection>
{user ? <UserMenu user={user} /> : <UserAvatarWithStatus />}
<SidebarHeaderToolbar aria-label={t('Sidebar_actions')}>
<Home title={t('Home')} />
<Search title={t('Search')} />
{user && (
<>
<Directory title={t('Directory')} />
<Sort title={t('Display')} />
<CreateRoom title={t('Create_new')} data-qa='sidebar-create' />
<Administration title={t('Administration')} />
</>
)}
{!user && <Login title={t('Login')} />}
</SidebarHeaderToolbar>
</SidebarSection>
<SidebarDivider />
</FeaturePreviewOn>
</FeaturePreview>
<SidebarSection>
{user ? <UserMenu user={user} /> : <UserAvatarWithStatus />}
<SidebarHeaderToolbar aria-label={t('Sidebar_actions')}>
<Home title={t('Home')} />
<Search title={t('Search')} />
{user && (
<>
<Directory title={t('Directory')} />
<Sort title={t('Display')} />
<CreateRoom title={t('Create_new')} data-qa='sidebar-create' />
<Administration title={t('Administration')} />
</>
)}
{!user && <Login title={t('Login')} />}
</SidebarHeaderToolbar>
</SidebarSection>
);
};

Expand Down
61 changes: 18 additions & 43 deletions apps/meteor/client/sidebar/sections/OmnichannelSection.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { Sidebar, SidebarDivider, SidebarSection } from '@rocket.chat/fuselage';
import { useEffectEvent } from '@rocket.chat/fuselage-hooks';
import { FeaturePreview, FeaturePreviewOff, FeaturePreviewOn } from '@rocket.chat/ui-client';
import { useLayout, useRoute, usePermission } from '@rocket.chat/ui-contexts';
import { memo } from 'react';
import { useTranslation } from 'react-i18next';
Expand Down Expand Up @@ -37,48 +36,24 @@ const OmnichannelSection = () => {
return (
<>
{isWorkspaceOverMacLimit && <OverMacLimitSection />}

<FeaturePreview feature='newNavigation'>
<FeaturePreviewOff>
<Sidebar.TopBar.Section aria-label={t('Omnichannel_actions')} className='omnichannel-sidebar'>
<Sidebar.TopBar.Title>{t('Omnichannel')}</Sidebar.TopBar.Title>
<SidebarHeaderToolbar>
{showOmnichannelQueueLink && (
<Sidebar.TopBar.Action icon='queue' data-tooltip={t('Queue')} onClick={(): void => handleRoute('queue')} />
)}
<OmnichannelLivechatToggle />
{hasPermissionToSeeContactCenter && (
<Sidebar.TopBar.Action
data-tooltip={t('Contact_Center')}
aria-label={t('Contact_Center')}
icon='address-book'
onClick={(): void => handleRoute('directory')}
/>
)}
</SidebarHeaderToolbar>
</Sidebar.TopBar.Section>
</FeaturePreviewOff>
<FeaturePreviewOn>
<SidebarSection aria-label={t('Omnichannel_actions')}>
<Sidebar.TopBar.Title>{t('Omnichannel')}</Sidebar.TopBar.Title>
<SidebarHeaderToolbar>
{showOmnichannelQueueLink && (
<Sidebar.TopBar.Action icon='queue' data-tooltip={t('Queue')} onClick={(): void => handleRoute('queue')} />
)}
<OmnichannelLivechatToggle />
{hasPermissionToSeeContactCenter && (
<Sidebar.TopBar.Action
data-tooltip={t('Contact_Center')}
aria-label={t('Contact_Center')}
icon='address-book'
onClick={(): void => handleRoute('directory')}
/>
)}
</SidebarHeaderToolbar>
</SidebarSection>
<SidebarDivider />
</FeaturePreviewOn>
</FeaturePreview>
<SidebarSection aria-label={t('Omnichannel_actions')}>
<Sidebar.TopBar.Title>{t('Omnichannel')}</Sidebar.TopBar.Title>
<SidebarHeaderToolbar>
{showOmnichannelQueueLink && (
<Sidebar.TopBar.Action icon='queue' data-tooltip={t('Queue')} onClick={(): void => handleRoute('queue')} />
)}
<OmnichannelLivechatToggle />
{hasPermissionToSeeContactCenter && (
<Sidebar.TopBar.Action
data-tooltip={t('Contact_Center')}
aria-label={t('Contact_Center')}
icon='address-book'
onClick={(): void => handleRoute('directory')}
/>
)}
</SidebarHeaderToolbar>
</SidebarSection>
<SidebarDivider />
</>
);
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ exports[`AdminABACRoomAttributesForm renders NewAttribute without crashing 1`] =
tabindex="-1"
>
<div
class="rcx-box rcx-box--full rcx-css-iag4sp"
class="rcx-box rcx-box--full rcx-css-zg7o7h"
>
<div
class="rcx-box rcx-box--full rcx-css-1jggbrp rcx-css-1fuhgt0"
Expand Down Expand Up @@ -203,7 +203,7 @@ exports[`AdminABACRoomAttributesForm renders WithLockedAttributes without crashi
tabindex="-1"
>
<div
class="rcx-box rcx-box--full rcx-css-iag4sp"
class="rcx-box rcx-box--full rcx-css-zg7o7h"
>
<div
class="rcx-box rcx-box--full rcx-css-1jggbrp rcx-css-1fuhgt0"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,26 +21,26 @@ exports[`renders AppLogsItem without crashing 1`] = `
tabindex="-1"
>
<div
class="rcx-box rcx-box--full rcx-css-zsa0ng"
class="rcx-box rcx-box--full rcx-css-142wtci"
>
<div
class="rcx-box rcx-box--full rcx-css-1sl6k6j"
class="rcx-box rcx-box--full rcx-css-1bdyjik rcx-css-1tmbvtv"
>
<i
aria-hidden="true"
class="rcx-box rcx-box--full rcx-icon--name-customize rcx-icon rcx-css-x7bl3q rcx-css-g86psg"
class="rcx-box rcx-box--full rcx-icon--name-customize rcx-icon rcx-css-1yal9it"
>
</i>
<div
class="rcx-box rcx-box--full rcx-css-x7bl3q rcx-css-1to6ka7"
class="rcx-box rcx-box--full rcx-css-1spko5i"
id="contextualbarTitle"
>
Filters
</div>
<button
aria-label="Close"
class="rcx-box rcx-box--full rcx-button--small-square rcx-button--square rcx-button--icon rcx-button rcx-css-x7bl3q rcx-css-1yzvz7u"
class="rcx-box rcx-box--full rcx-button--small-square rcx-button--square rcx-button--icon rcx-button rcx-css-ue04py"
data-qa="ContextualbarActionClose"
type="button"
>
Expand Down Expand Up @@ -74,7 +74,7 @@ exports[`renders AppLogsItem without crashing 1`] = `
tabindex="-1"
>
<form
class="rcx-box rcx-box--full rcx-css-iag4sp"
class="rcx-box rcx-box--full rcx-css-zg7o7h"
>
<div
class="rcx-box rcx-box--full rcx-css-1jggbrp rcx-css-1hr7rzd"
Expand Down Expand Up @@ -391,7 +391,7 @@ exports[`renders AppLogsItem without crashing 1`] = `
</div>
</div>
<div
class="rcx-box rcx-box--full rcx-css-m843eh"
class="rcx-box rcx-box--full rcx-css-f51umh"
>
<button
aria-label="Clear_filters"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,20 +20,20 @@ exports[`CannedResponseList Storybook Stories renders Default without crashing 1
tabindex="-1"
>
<div
class="rcx-box rcx-box--full rcx-css-zsa0ng"
class="rcx-box rcx-box--full rcx-css-142wtci"
>
<div
class="rcx-box rcx-box--full rcx-css-1sl6k6j"
class="rcx-box rcx-box--full rcx-css-1bdyjik rcx-css-1tmbvtv"
>
<div
class="rcx-box rcx-box--full rcx-css-x7bl3q rcx-css-1to6ka7"
class="rcx-box rcx-box--full rcx-css-1spko5i"
id="contextualbarTitle"
>
Canned_Responses
</div>
<button
aria-label="Close"
class="rcx-box rcx-box--full rcx-button--small-square rcx-button--square rcx-button--icon rcx-button rcx-css-x7bl3q rcx-css-1yzvz7u"
class="rcx-box rcx-box--full rcx-button--small-square rcx-button--square rcx-button--icon rcx-button rcx-css-ue04py"
data-qa="ContextualbarActionClose"
type="button"
>
Expand Down
Loading
Loading