From d5b0743382a3cf7779016b23acd8c060733c0faa Mon Sep 17 00:00:00 2001 From: simoleo89 Date: Wed, 27 May 2026 19:08:38 +0200 Subject: [PATCH 1/2] feat(navigator): wrap sub-views in WidgetErrorBoundary Each of the 5 Navigator sub-views (RoomCreator, DoorState, RoomInfo, RoomLink, RoomSettings) is now wrapped in its own WidgetErrorBoundary so a crash inside one no longer takes down the others. Matches the pattern already applied to the 13 room widgets + 20 furniture widgets. Zero behavioural change in the happy path. yarn typecheck + yarn test --run + yarn lint:hooks all clean (only the 3 pre-existing floorplan failures remain, unrelated to Navigator). --- src/components/navigator/NavigatorView.tsx | 25 ++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/components/navigator/NavigatorView.tsx b/src/components/navigator/NavigatorView.tsx index 3ff6be6..16c76cb 100644 --- a/src/components/navigator/NavigatorView.tsx +++ b/src/components/navigator/NavigatorView.tsx @@ -7,7 +7,7 @@ import createRoomImg from '../../assets/images/navigator/create_room.png'; import randomRoomImg from '../../assets/images/navigator/random_room.png'; import promoteRoomImg from '../../assets/images/navigator/promote_room.png'; import { CreateLinkEvent, LocalizeText, SendMessageComposer, TryVisitRoom } from '../../api'; -import { Flex, Text } from '../../common'; +import { Flex, Text, WidgetErrorBoundary } from '../../common'; import { useNavigatorActions, useNavigatorData, useNavigatorUiState, useNavigatorUiStore, useNitroEvent } from '../../hooks'; import { NavigatorDoorStateView } from './views/NavigatorDoorStateView'; import { NavigatorRoomCreatorView } from './views/NavigatorRoomCreatorView'; @@ -197,13 +197,26 @@ export const NavigatorView: FC<{}> = props => } - { isCreatorOpen && } + { isCreatorOpen && + + + } } - - { isRoomInfoOpen && useNavigatorUiStore.getState().setRoomInfoOpen(false) } /> } - { isRoomLinkOpen && useNavigatorUiStore.getState().setRoomLinkOpen(false) } /> } - + + + + { isRoomInfoOpen && + + useNavigatorUiStore.getState().setRoomInfoOpen(false) } /> + } + { isRoomLinkOpen && + + useNavigatorUiStore.getState().setRoomLinkOpen(false) } /> + } + + + ); }; From 69042451e6fcd8cc367679c3a9bb4d41a9078f92 Mon Sep 17 00:00:00 2001 From: duckietm Date: Thu, 28 May 2026 13:01:11 +0200 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=86=95=20Added=20the=20option=20turn?= =?UTF-8?q?=20in=20menu=20for=20BOT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/room/widgets/BotSkillsEnum.ts | 1 + .../avatar-info/menu/AvatarInfoWidgetRentableBotView.tsx | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/src/api/room/widgets/BotSkillsEnum.ts b/src/api/room/widgets/BotSkillsEnum.ts index b879cdc..8eef2d1 100644 --- a/src/api/room/widgets/BotSkillsEnum.ts +++ b/src/api/room/widgets/BotSkillsEnum.ts @@ -11,6 +11,7 @@ export class BotSkillsEnum public static NUX_PROCEED: number = 8; public static CHANGE_BOT_MOTTO: number = 9; public static NUX_TAKE_TOUR: number = 10; + public static ROTATE: number = 11; public static NO_PICK_UP: number = 12; public static NAVIGATOR_SEARCH: number = 14; public static DONATE_TO_USER: number = 24; diff --git a/src/components/room/widgets/avatar-info/menu/AvatarInfoWidgetRentableBotView.tsx b/src/components/room/widgets/avatar-info/menu/AvatarInfoWidgetRentableBotView.tsx index f9e962b..9953ace 100644 --- a/src/components/room/widgets/avatar-info/menu/AvatarInfoWidgetRentableBotView.tsx +++ b/src/components/room/widgets/avatar-info/menu/AvatarInfoWidgetRentableBotView.tsx @@ -109,6 +109,10 @@ export const AvatarInfoWidgetRentableBotView: FC processAction('dance') }> { LocalizeText('avatar.widget.dance') } } + { (avatarInfo.botSkills.indexOf(BotSkillsEnum.ROTATE) >= 0) && + processAction('rotate') }> + { LocalizeText('tooltip.roombuilding.rotate') } + } { (avatarInfo.botSkills.indexOf(BotSkillsEnum.NO_PICK_UP) === -1) && processAction('pick') }> { LocalizeText('avatar.widget.pick_up') }