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
+17 -4
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 randomRoomImg from '../../assets/images/navigator/random_room.png';
import promoteRoomImg from '../../assets/images/navigator/promote_room.png'; import promoteRoomImg from '../../assets/images/navigator/promote_room.png';
import { CreateLinkEvent, LocalizeText, SendMessageComposer, TryVisitRoom } from '../../api'; 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 { useNavigatorActions, useNavigatorData, useNavigatorUiState, useNavigatorUiStore, useNitroEvent } from '../../hooks';
import { NavigatorDoorStateView } from './views/NavigatorDoorStateView'; import { NavigatorDoorStateView } from './views/NavigatorDoorStateView';
import { NavigatorRoomCreatorView } from './views/NavigatorRoomCreatorView'; import { NavigatorRoomCreatorView } from './views/NavigatorRoomCreatorView';
@@ -197,13 +197,26 @@ export const NavigatorView: FC<{}> = props =>
</Flex> </Flex>
</div> </div>
</div> } </div> }
{ isCreatorOpen && <NavigatorRoomCreatorView /> } { isCreatorOpen &&
<WidgetErrorBoundary name="NavigatorRoomCreator">
<NavigatorRoomCreatorView />
</WidgetErrorBoundary> }
</NitroCard.Content> </NitroCard.Content>
</NitroCard> } </NitroCard> }
<WidgetErrorBoundary name="NavigatorDoorState">
<NavigatorDoorStateView /> <NavigatorDoorStateView />
{ isRoomInfoOpen && <NavigatorRoomInfoView onCloseClick={ () => useNavigatorUiStore.getState().setRoomInfoOpen(false) } /> } </WidgetErrorBoundary>
{ isRoomLinkOpen && <NavigatorRoomLinkView onCloseClick={ () => useNavigatorUiStore.getState().setRoomLinkOpen(false) } /> } { 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 /> <NavigatorRoomSettingsView />
</WidgetErrorBoundary>
</> </>
); );
}; };