Skip to content

Commit 8a41164

Browse files
Merge pull request #664 from MapsPeople/fix/use-set-recoil-state
Replace useRecoilState with useSetRecoilState where relevant
2 parents edf9498 + 96d8440 commit 8a41164

File tree

20 files changed

+84
-78
lines changed

20 files changed

+84
-78
lines changed

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/map-template/CHANGELOG.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,13 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8-
## [1.97.0] - 2026-03-23
8+
## [1.96.15] - 2026-03-24
9+
10+
### Fixed
11+
12+
- Replaced `useRecoilState` with `useSetRecoilState` across 17 files where only the setter was used, eliminating unnecessary re-render subscriptions.
13+
14+
## [1.96.14] - 2026-03-23
915

1016
### Added
1117

packages/map-template/src/components/BottomSheet/BottomSheet.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { useEffect, useRef } from 'react';
22
import { useState } from 'react';
33
import { ContainerContext } from './ContainerContext';
4-
import { useRecoilState } from 'recoil';
4+
import { useRecoilState, useSetRecoilState } from 'recoil';
55
import currentLocationState from '../../atoms/currentLocationState';
66
import filteredLocationsByExternalIDState from '../../atoms/filteredLocationsByExternalIDState';
77
import Sheet from './Sheet/Sheet';
@@ -62,7 +62,7 @@ function BottomSheet({ directionsFromLocation, directionsToLocation, pushAppView
6262

6363
const [filteredLocationsByExternalIDs, setFilteredLocationsByExternalID] = useRecoilState(filteredLocationsByExternalIDState);
6464

65-
const [, setLocationId] = useRecoilState(locationIdState);
65+
const setLocationId = useSetRecoilState(locationIdState);
6666

6767
/*
6868
* React on changes on the current location and directions locations and set relevant bottom sheet.

packages/map-template/src/components/ChatWindow/ChatSearchResults/ChatSearchResults.jsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { useState } from 'react';
2-
import { useRecoilState, useRecoilValue } from 'recoil';
2+
import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil';
33
import './ChatSearchResults.scss';
44
import PropTypes from 'prop-types';
55
import ListItemLocation from '../../WebComponentWrappers/ListItemLocation/ListItemLocation';
@@ -25,8 +25,8 @@ const ChatSearchResults = ({ locations }) => {
2525
const [hoveredLocationId, setHoveredLocationId] = useState(null);
2626

2727
// Recoil state for location handling
28-
const [, setCurrentLocation] = useRecoilState(currentLocationState);
29-
const [, setIsLocationClicked] = useRecoilState(isLocationClickedState);
28+
const setCurrentLocation = useSetRecoilState(currentLocationState);
29+
const setIsLocationClicked = useSetRecoilState(isLocationClickedState);
3030
const [currentVenueName, setCurrentVenueName] = useRecoilState(currentVenueNameState);
3131
const mapsIndoorsInstance = useRecoilValue(mapsIndoorsInstanceState);
3232
const isDesktop = useIsDesktop();

packages/map-template/src/components/Directions/Directions.jsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { useEffect, useState, useRef } from 'react';
22
import './Directions.scss';
33
import { useTranslation } from 'react-i18next';
4-
import { useRecoilState, useRecoilValue } from 'recoil';
4+
import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil';
55
import mapsIndoorsInstanceState from '../../atoms/mapsIndoorsInstanceState';
66
import travelModeState from '../../atoms/travelModeState';
77
import QRCode from '../../assets/qrcode.svg?react';
@@ -68,15 +68,15 @@ function Directions({ isOpen, onBack, onSetSize, onRouteFinished, snapPointSwipe
6868

6969
const directions = useRecoilValue(directionsResponseState);
7070

71-
const [, setActiveStep] = useRecoilState(activeStepState);
71+
const setActiveStep = useSetRecoilState(activeStepState);
7272

7373
const [substepsOpen, setSubstepsOpen] = useRecoilState(substepsToggledState);
7474

7575
const kioskLocation = useRecoilValue(kioskLocationState);
7676

7777
const isDesktop = useIsDesktop();
7878

79-
const [, setQRCodeLink] = useRecoilState(qrCodeLinkState)
79+
const setQRCodeLink = useSetRecoilState(qrCodeLinkState)
8080

8181
const isDestinationStep = useRecoilValue(isDestinationStepState);
8282

packages/map-template/src/components/LocationDetails/ShareLocationLink/ShareLocationLink.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { useEffect, useState } from 'react';
2-
import { useRecoilState, useRecoilValue } from 'recoil';
2+
import { useRecoilValue, useSetRecoilState } from 'recoil';
33
import ClickAwayListener from 'react-click-away-listener';
44
import PropTypes from 'prop-types';
55
import { useTranslation } from 'react-i18next';
@@ -36,7 +36,7 @@ function ShareLocationLink({ location, buttonClassName }) {
3636
const [showCopyButton, setShowCopyButton] = useState(false);
3737
const kioskLocation = useRecoilValue(kioskLocationState);
3838

39-
const [, setQrCodeLink] = useRecoilState(qrCodeLinkState);
39+
const setQrCodeLink = useSetRecoilState(qrCodeLinkState);
4040

4141
const isDesktop = useIsDesktop();
4242

packages/map-template/src/components/MapTemplate/MapTemplate.jsx

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Fragment, useEffect, useRef } from 'react';
22
import { useState } from 'react';
3-
import { useRecoilState, useRecoilValue } from 'recoil';
3+
import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil';
44
import { defineCustomElements } from '@mapsindoors/components/dist/components/index.js';
55
import i18n from 'i18next';
66
import initI18n from '../../i18n/initialize.js';
@@ -146,37 +146,37 @@ function MapTemplate({ apiKey, gmApiKey, mapboxAccessToken, venue, locationId, p
146146

147147
const [userSelectedLanguage, setUserSelectedLanguage] = useState(false);
148148
const [mapOptions, setMapOptions] = useState({ brandingColor: primaryColor });
149-
const [, setApiKey] = useRecoilState(apiKeyState);
150-
const [, setGmApiKey] = useRecoilState(gmApiKeyState);
151-
const [, setMapboxAccessToken] = useRecoilState(mapboxAccessTokenState);
149+
const setApiKey = useSetRecoilState(apiKeyState);
150+
const setGmApiKey = useSetRecoilState(gmApiKeyState);
151+
const setMapboxAccessToken = useSetRecoilState(mapboxAccessTokenState);
152152
const [isMapReady, setMapReady] = useRecoilState(isMapReadyState);
153153
const [venuesInSolution, setVenuesInSolution] = useRecoilState(venuesInSolutionState);
154154
const [currentLocation, setCurrentLocation] = useRecoilState(currentLocationState);
155155
const categories = useRecoilValue(categoriesState);
156-
const [, setLocationId] = useRecoilState(locationIdState);
156+
const setLocationId = useSetRecoilState(locationIdState);
157157
const [color, setPrimaryColor] = useRecoilState(primaryColorState);
158-
const [, setLogo] = useRecoilState(logoState);
159-
const [, setGmMapId] = useRecoilState(gmMapIdState);
158+
const setLogo = useSetRecoilState(logoState);
159+
const setGmMapId = useSetRecoilState(gmMapIdState);
160160
const mapsIndoorsInstance = useRecoilValue(mapsIndoorsInstanceState);
161161
const [currentLanguage, setCurrentLanguage] = useRecoilState(languageState);
162-
const [, setKioskLocation] = useRecoilState(kioskLocationState);
163-
const [, setKioskOriginLocationId] = useRecoilState(kioskOriginLocationIdState);
164-
const [, setTimeoutValue] = useRecoilState(timeoutState);
162+
const setKioskLocation = useSetRecoilState(kioskLocationState);
163+
const setKioskOriginLocationId = useSetRecoilState(kioskOriginLocationIdState);
164+
const setTimeoutValue = useSetRecoilState(timeoutState);
165165
const isInactive = useInactive(); // Hook to detect if user is inactive. Used in combination with timeout prop to reset the Map Template to initial values after a specified time.
166-
const [, setSupportsUrlParameters] = useRecoilState(supportsUrlParametersState);
167-
const [, setUseKeyboard] = useRecoilState(useKeyboardState);
168-
const [, setMiTransitionLevel] = useRecoilState(miTransitionLevelState);
169-
const [, setSelectedCategory] = useRecoilState(selectedCategoryState);
170-
const [, setSearchAllVenues] = useRecoilState(searchAllVenuesState);
171-
const [, setCategory] = useRecoilState(categoryState);
172-
const [, setHideNonMatches] = useRecoilState(hideNonMatchesState);
173-
const [, setshowExternalIDs] = useRecoilState(showExternalIDsState);
174-
const [, setShowRoadNames] = useRecoilState(showRoadNamesState);
175-
const [, setSearchExternalLocations] = useRecoilState(searchExternalLocationsState);
176-
const [, setCenter] = useRecoilState(centerState);
166+
const setSupportsUrlParameters = useSetRecoilState(supportsUrlParametersState);
167+
const setUseKeyboard = useSetRecoilState(useKeyboardState);
168+
const setMiTransitionLevel = useSetRecoilState(miTransitionLevelState);
169+
const setSelectedCategory = useSetRecoilState(selectedCategoryState);
170+
const setSearchAllVenues = useSetRecoilState(searchAllVenuesState);
171+
const setCategory = useSetRecoilState(categoryState);
172+
const setHideNonMatches = useSetRecoilState(hideNonMatchesState);
173+
const setshowExternalIDs = useSetRecoilState(showExternalIDsState);
174+
const setShowRoadNames = useSetRecoilState(showRoadNamesState);
175+
const setSearchExternalLocations = useSetRecoilState(searchExternalLocationsState);
176+
const setCenter = useSetRecoilState(centerState);
177177
const [viewModeSwitchVisible, setViewModeSwitchVisible] = useState();
178178
const mapClickActionRef = useRef();
179-
const [, setWayfindingLocation] = useRecoilState(wayfindingLocationState);
179+
const setWayfindingLocation = useSetRecoilState(wayfindingLocationState);
180180
const qrCodeLink = useRecoilValue(qrCodeLinkState)
181181

182182
const [showVenueSelector, setShowVenueSelector] = useState(true);
@@ -188,7 +188,7 @@ function MapTemplate({ apiKey, gmApiKey, mapboxAccessToken, venue, locationId, p
188188
const [isMapPositionInvestigating, setIsMapPositionInvestigating] = useState(false);
189189

190190
// The filtered locations by external id, if present.
191-
const [, setFilteredLocationsByExternalID] = useRecoilState(filteredLocationsByExternalIDState);
191+
const setFilteredLocationsByExternalID = useSetRecoilState(filteredLocationsByExternalIDState);
192192

193193
// The filtered locations that the user sets when selecting a category/location.
194194
const [filteredLocations, setFilteredLocations] = useRecoilState(filteredLocationsState);
@@ -197,13 +197,13 @@ function MapTemplate({ apiKey, gmApiKey, mapboxAccessToken, venue, locationId, p
197197
const [initialFilteredLocations, setInitialFilteredLocations] = useState();
198198

199199
const [appConfig, setAppConfig] = useRecoilState(appConfigState);
200-
const [, setSolution] = useRecoilState(solutionState);
200+
const setSolution = useSetRecoilState(solutionState);
201201

202-
const [, setTileStyle] = useRecoilState(tileStyleState);
203-
const [, setStartZoomLevel] = useRecoilState(startZoomLevelState);
202+
const setTileStyle = useSetRecoilState(tileStyleState);
203+
const setStartZoomLevel = useSetRecoilState(startZoomLevelState);
204204

205-
const [, setBearing] = useRecoilState(bearingState);
206-
const [, setPitch] = useRecoilState(pitchState);
205+
const setBearing = useSetRecoilState(bearingState);
206+
const setPitch = useSetRecoilState(pitchState);
207207

208208
const isDesktop = useIsDesktop();
209209
const resetState = useReset();
@@ -220,7 +220,7 @@ function MapTemplate({ apiKey, gmApiKey, mapboxAccessToken, venue, locationId, p
220220
const [setCurrentVenueName, updateCategories] = useCurrentVenue();
221221

222222
const finishRoute = useOnRouteFinished();
223-
const [, setErrorMessage] = useRecoilState(notificationMessageState);
223+
const setErrorMessage = useSetRecoilState(notificationMessageState);
224224

225225
/**
226226
* Ensure that MapsIndoors Web SDK is available.

packages/map-template/src/components/MapWrapper/MapWrapper.jsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { useEffect, useState } from 'react';
2-
import { useRecoilState, useRecoilValue } from 'recoil';
2+
import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil';
33
import MIMap from '../MIMap/MIMap';
44
import { mapTypes } from '../../constants/mapTypes';
55
import useLiveData from '../../hooks/useLivedata';
@@ -74,16 +74,16 @@ function MapWrapper({ onLocationClick, onMapPositionKnown, useMapProviderModule,
7474
const mapboxAccessToken = useRecoilValue(mapboxAccessTokenState);
7575
const [mapType, setMapType] = useRecoilState(mapTypeState);
7676
const [mapsIndoorsInstance, setMapsIndoorsInstance] = useRecoilState(mapsIndoorsInstanceState);
77-
const [, setUserPosition] = useRecoilState(userPositionState);
78-
const [, setDirectionsService] = useRecoilState(directionsServiceState);
77+
const setUserPosition = useSetRecoilState(userPositionState);
78+
const setDirectionsService = useSetRecoilState(directionsServiceState);
7979
const filteredLocations = useRecoilValue(filteredLocationsState);
8080
const filteredLocationsByExternalIDs = useRecoilValue(filteredLocationsByExternalIDState);
8181
const tileStyle = useRecoilValue(tileStyleState);
8282
const bearing = useRecoilValue(bearingState);
8383
const pitch = useRecoilValue(pitchState);
84-
const [, setPositionControl] = useRecoilState(positionControlState);
84+
const setPositionControl = useSetRecoilState(positionControlState);
8585
const solution = useRecoilValue(solutionState);
86-
const [, setErrorMessage] = useRecoilState(notificationMessageState);
86+
const setErrorMessage = useSetRecoilState(notificationMessageState);
8787
const hideNonMatches = useRecoilValue(hideNonMatchesState);
8888
const appConfig = useRecoilValue(appConfigState);
8989
const [isViewSelectorVisible, setIsViewSelectorVisible] = useState(false);

packages/map-template/src/components/RouteInstructions/RouteInstructions.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import './RouteInstructions.scss';
33
import { useTranslation } from 'react-i18next';
44
import ArrowRight from '../../assets/arrow-right.svg?react';
55
import ArrowLeft from '../../assets/arrow-left.svg?react';
6-
import { useRecoilState, useRecoilValue } from 'recoil';
6+
import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil';
77
import directionsResponseState from '../../atoms/directionsResponseState';
88
import activeStepState from '../../atoms/activeStep';
99
import RouteInstructionsStep from '../WebComponentWrappers/RouteInstructionsStep/RouteInstructionsStep';
@@ -52,7 +52,7 @@ function RouteInstructions({ steps, onNextStep, onPreviousStep, originLocation,
5252

5353
const substepsOpen = useRecoilValue(substepsToggledState);
5454

55-
const [, setIsDestinationStep] = useRecoilState(isDestinationStepState);
55+
const setIsDestinationStep = useSetRecoilState(isDestinationStepState);
5656

5757
const isKioskContext = useIsKioskContext();
5858

packages/map-template/src/components/Search/Categories/Categories.jsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { useEffect, useState, useRef } from 'react';
2-
import { useRecoilState, useRecoilValue } from 'recoil';
2+
import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil';
33
import './Categories.scss';
44
import categoriesState from '../../../atoms/categoriesState';
55
import { snapPoints } from '../../../constants/snapPoints';
@@ -51,9 +51,9 @@ function Categories({ onSetSize, getFilteredLocations, searchFieldRef, isOpen, t
5151

5252
const [selectedCategory, setSelectedCategory] = useRecoilState(selectedCategoryState);
5353

54-
const [, setSearchResults] = useRecoilState(searchResultsState);
54+
const setSearchResults = useSetRecoilState(searchResultsState);
5555

56-
const [, setFilteredLocations] = useRecoilState(filteredLocationsState);
56+
const setFilteredLocations = useSetRecoilState(filteredLocationsState);
5757

5858
const scrollableContentSwipePrevent = usePreventSwipe();
5959

0 commit comments

Comments
 (0)