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).
This commit is contained in:
simoleo89
2026-05-27 19:08:38 +02:00
parent 1148c0a628
commit d5b0743382
+19 -6
View File
@@ -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 =>
</Flex>
</div>
</div> }
{ isCreatorOpen && <NavigatorRoomCreatorView /> }
{ isCreatorOpen &&
<WidgetErrorBoundary name="NavigatorRoomCreator">
<NavigatorRoomCreatorView />
</WidgetErrorBoundary> }
</NitroCard.Content>
</NitroCard> }
<NavigatorDoorStateView />
{ isRoomInfoOpen && <NavigatorRoomInfoView onCloseClick={ () => useNavigatorUiStore.getState().setRoomInfoOpen(false) } /> }
{ isRoomLinkOpen && <NavigatorRoomLinkView onCloseClick={ () => useNavigatorUiStore.getState().setRoomLinkOpen(false) } /> }
<NavigatorRoomSettingsView />
<WidgetErrorBoundary name="NavigatorDoorState">
<NavigatorDoorStateView />
</WidgetErrorBoundary>
{ isRoomInfoOpen &&
<WidgetErrorBoundary name="NavigatorRoomInfo">
<NavigatorRoomInfoView onCloseClick={ () => useNavigatorUiStore.getState().setRoomInfoOpen(false) } />
</WidgetErrorBoundary> }
{ isRoomLinkOpen &&
<WidgetErrorBoundary name="NavigatorRoomLink">
<NavigatorRoomLinkView onCloseClick={ () => useNavigatorUiStore.getState().setRoomLinkOpen(false) } />
</WidgetErrorBoundary> }
<WidgetErrorBoundary name="NavigatorRoomSettings">
<NavigatorRoomSettingsView />
</WidgetErrorBoundary>
</>
);
};