From 92927ec0967bff6ef15f2c6eedc835aa8bd1963b Mon Sep 17 00:00:00 2001 From: Ricardo Garim Date: Thu, 16 Jul 2026 09:46:09 -0300 Subject: [PATCH 1/3] fix: Restore Away to quick status menu --- .changeset/ready-taxis-join.md | 5 +++++ apps/meteor/client/components/UserStatusMenu.tsx | 9 ++------- .../UserMenu/hooks/useStatusItems.tsx | 6 ++---- 3 files changed, 9 insertions(+), 11 deletions(-) create mode 100644 .changeset/ready-taxis-join.md diff --git a/.changeset/ready-taxis-join.md b/.changeset/ready-taxis-join.md new file mode 100644 index 0000000000000..cc8fcdb1db16c --- /dev/null +++ b/.changeset/ready-taxis-join.md @@ -0,0 +1,5 @@ +--- +'@rocket.chat/meteor': patch +--- + +Restores Away as a selectable preset in the quick status menu, custom status modal, and account profile page. diff --git a/apps/meteor/client/components/UserStatusMenu.tsx b/apps/meteor/client/components/UserStatusMenu.tsx index 59364ca66ec4c..2ced358d5d0de 100644 --- a/apps/meteor/client/components/UserStatusMenu.tsx +++ b/apps/meteor/client/components/UserStatusMenu.tsx @@ -37,21 +37,16 @@ const UserStatusMenu = ({ const statuses: Array<[value: UserStatusType, label: ReactNode]> = [ [UserStatusType.ONLINE, renderOption(UserStatusType.ONLINE, t('Online'))], + [UserStatusType.AWAY, renderOption(UserStatusType.AWAY, t('Away'))], [UserStatusType.BUSY, renderOption(UserStatusType.BUSY, t('Busy'))], ]; - // Away is no longer manually selectable, but surface it if the user is currently on it - // (e.g., set in a previous version or auto-applied by the server) so they can switch off. - if (status === UserStatusType.AWAY) { - statuses.push([UserStatusType.AWAY, renderOption(UserStatusType.AWAY, t('Away'))]); - } - if (allowInvisibleStatus) { statuses.push([UserStatusType.OFFLINE, renderOption(UserStatusType.OFFLINE, t('Offline'))]); } return statuses; - }, [t, allowInvisibleStatus, status]); + }, [t, allowInvisibleStatus]); const [cursor, handleKeyDown, handleKeyUp, reset, [visible, hide, show]] = useCursor(-1, options, ([selected], [, hide]) => { setStatus(selected); diff --git a/apps/meteor/client/navbar/NavBarSettingsToolbar/UserMenu/hooks/useStatusItems.tsx b/apps/meteor/client/navbar/NavBarSettingsToolbar/UserMenu/hooks/useStatusItems.tsx index 21a983ecfd952..46a7d806f0047 100644 --- a/apps/meteor/client/navbar/NavBarSettingsToolbar/UserMenu/hooks/useStatusItems.tsx +++ b/apps/meteor/client/navbar/NavBarSettingsToolbar/UserMenu/hooks/useStatusItems.tsx @@ -1,5 +1,4 @@ -import type { ICustomUserStatus, IUser } from '@rocket.chat/core-typings'; -import { UserStatus as UserStatusEnum } from '@rocket.chat/core-typings'; +import type { ICustomUserStatus, IUser, UserStatus as UserStatusEnum } from '@rocket.chat/core-typings'; import { Box, Icon, RadioButton } from '@rocket.chat/fuselage'; import type { GenericMenuItemProps } from '@rocket.chat/ui-client'; import { clientCallbacks } from '@rocket.chat/ui-client'; @@ -131,12 +130,11 @@ export const useStatusItems = (user?: IUser): GenericMenuItemProps[] => { }); } - // Presets: filter to Online / Busy / Offline. Keep Away only if user is currently on Away (legacy). + // Presets: Online / Away / Busy / Offline. const isPresetSelected = (statusType: UserStatusEnum): boolean => !user?.statusText && !customStatusExpiration && user?.status === statusType; const presetItems = (statuses ?? []) .filter((s) => userStatuses.isValidType(s.id)) - .filter((s) => s.statusType !== UserStatusEnum.AWAY || isPresetSelected(UserStatusEnum.AWAY)) .map( (status): GenericMenuItemProps => ({ id: status.id, From 62a26ae99f293992acef2c2dbe9fdc0821c502f6 Mon Sep 17 00:00:00 2001 From: Ricardo Garim Date: Thu, 16 Jul 2026 11:09:44 -0300 Subject: [PATCH 2/3] Update apps/meteor/client/navbar/NavBarSettingsToolbar/UserMenu/hooks/useStatusItems.tsx Co-authored-by: dougfabris --- .../NavBarSettingsToolbar/UserMenu/hooks/useStatusItems.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/meteor/client/navbar/NavBarSettingsToolbar/UserMenu/hooks/useStatusItems.tsx b/apps/meteor/client/navbar/NavBarSettingsToolbar/UserMenu/hooks/useStatusItems.tsx index 46a7d806f0047..19f0b44ecccb5 100644 --- a/apps/meteor/client/navbar/NavBarSettingsToolbar/UserMenu/hooks/useStatusItems.tsx +++ b/apps/meteor/client/navbar/NavBarSettingsToolbar/UserMenu/hooks/useStatusItems.tsx @@ -130,7 +130,6 @@ export const useStatusItems = (user?: IUser): GenericMenuItemProps[] => { }); } - // Presets: Online / Away / Busy / Offline. const isPresetSelected = (statusType: UserStatusEnum): boolean => !user?.statusText && !customStatusExpiration && user?.status === statusType; const presetItems = (statuses ?? []) From b14f55a7986ba5479788145f5f082a43e74df8bc Mon Sep 17 00:00:00 2001 From: Ricardo Garim Date: Thu, 16 Jul 2026 12:37:12 -0300 Subject: [PATCH 3/3] fix: initialize status forms to the user current status --- apps/meteor/client/lib/getUserInitialStatus.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/meteor/client/lib/getUserInitialStatus.ts b/apps/meteor/client/lib/getUserInitialStatus.ts index cdc1e0f1fd87f..dd411d39be85a 100644 --- a/apps/meteor/client/lib/getUserInitialStatus.ts +++ b/apps/meteor/client/lib/getUserInitialStatus.ts @@ -15,8 +15,7 @@ export const getUserStatusInitialValues = (user: IUser | null, initialStatusText return { statusText: user?.statusText ?? initialStatusText ?? '', - statusType: - user?.status === UserStatusType.AWAY ? (user?.statusDefault ?? UserStatusType.ONLINE) : (user?.status ?? UserStatusType.ONLINE), + statusType: user?.status ?? UserStatusType.ONLINE, statusDuration: initialExpiration ? 'custom' : '', statusCustomDate: initialDate.toLocaleDateString('en-CA'), statusCustomTime: initialDate.toTimeString().slice(0, 5),