Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
80500b4
Automatic merge into master to Release 3.18.6
situmops Feb 20, 2026
f225669
Automatic merge into master to Release 3.18.7
situmops Feb 23, 2026
ac5c4d2
Automatic merge into master to Release 3.18.8
situmops Feb 24, 2026
d4bc9da
Automatic merge into master to Release 3.18.9
situmops Feb 25, 2026
16c31d0
Automatic merge into master to Release 3.18.10
situmops Mar 18, 2026
2be003f
Automatic merge into master to Release 3.18.11
situmops Mar 23, 2026
857f3a6
Automatic merge into master to Release 3.18.12
situmops Apr 7, 2026
c6e5312
Merge pull request #609 from situmtech/release/3.18.13
SilviaMRegueira Apr 8, 2026
3411ec5
Automatic merge into master to Release 3.18.14
situmops Apr 9, 2026
2a96744
Automatic merge into master to Release 3.18.15
situmops Apr 13, 2026
2c0b5fe
Automatic merge into master to Release 3.18.16
situmops Apr 16, 2026
8e89e32
Automatic merge into master to Release 3.18.17
situmops May 4, 2026
aab7c2a
Automatic merge into master to Release 3.18.18
situmops May 5, 2026
f246476
Automatic merge into master to Release 3.18.19
situmops May 5, 2026
9e6a2e7
Automatic merge into master to Release 3.18.20
situmops May 20, 2026
544777c
Automatic merge into master to Release 3.18.21
situmops May 28, 2026
f3b291c
Automatic merge into master to Release 3.18.22
situmops Jun 4, 2026
e039e40
Automatic merge into master to Release 3.18.23
situmops Jun 9, 2026
6cf0c7b
Automatic merge into master to Release 3.18.24
situmops Jun 11, 2026
bb9dfd1
Automatic merge into master to Release 3.18.25
situmops Jun 30, 2026
c1c6c03
Merge pull request #637 from situmtech/release/3.18.25
SilviaMRegueira Jun 30, 2026
f5456f5
Automatic merge into master to Release 3.18.26
situmops Jul 1, 2026
6a6c501
Merge pull request #642 from situmtech/release/3.18.26
SilviaMRegueira Jul 1, 2026
b2c30cc
Added support for token authentication
adrian-situm Jul 7, 2026
f849990
Updated react native version
adrian-situm Jul 8, 2026
499e817
Added native implementation for setToken
adrian-situm Jul 8, 2026
22ec8b6
Fixed the auth being sent to the viewer when loading it with an apike…
adrian-situm Jul 9, 2026
fd61126
MapView now reloads when changing the apikey
adrian-situm Jul 9, 2026
0e18307
Cleaned some logic
adrian-situm Jul 10, 2026
ccab37f
Added comments and cleaned old logic
adrian-situm Jul 10, 2026
021f572
Updated changelog
adrian-situm Jul 10, 2026
ca185cb
Small refactors
adrian-situm Jul 10, 2026
cf94bc3
Refactors and logic changes to SitumProvider
adrian-situm Jul 13, 2026
11f885e
Small adjustments
adrian-situm Jul 13, 2026
e78e8b0
Simplified logic in SitumProvider and improved changelog
adrian-situm Jul 15, 2026
98c92a3
Merge remote-tracking branch 'origin/develop' into feature/PRD-1032
adrian-situm Jul 15, 2026
41fbe58
Fixed a bug when changing the email on the SitumProvider and improved…
adrian-situm Jul 16, 2026
2f1a255
Updated comments on SitumProvider
adrian-situm Jul 17, 2026
658bd82
Fixed comment formatting in SitumProvider
adrian-situm Jul 17, 2026
c91050d
Removed native SDK routing and navigation from MapView
adrian-situm Jul 17, 2026
0884145
Added the previously removed removeNavigationUpdates
adrian-situm Jul 17, 2026
a165f12
Removed unused enums
adrian-situm Jul 20, 2026
5b4a309
Merge remote-tracking branch 'origin/develop' into feature/PRD-504
adrian-situm Jul 20, 2026
35456ba
Removed unused type
adrian-situm Jul 20, 2026
2d316d3
Removed unused logic and updated some comments
adrian-situm Jul 20, 2026
87b8ce0
Fixed a bug in MapView when selecting floors while navigation was run…
adrian-situm Jul 20, 2026
b8cd3d2
Fixed MapViewRef.deselectPoi not working
adrian-situm Jul 21, 2026
0d03415
Small refactor in navigation callbacks and change in AccessibilityMod…
adrian-situm Jul 21, 2026
ba12364
Fixed removeNavigationUpdates never resolving when navigation was not…
adrian-situm Jul 22, 2026
ad72f03
Fixed navigationRunning desync when reaching destination
adrian-situm Jul 22, 2026
2b86366
Updated changelog unreleased
adrian-situm Jul 22, 2026
2a28fb7
Added some previously removed interfaces and marked them as deprecated
adrian-situm Jul 22, 2026
70b83b1
Added previously removed NavigationStatus as deprecated
adrian-situm Jul 22, 2026
e39fa42
Added previously removed NavigationUpdateType as deprecated
adrian-situm Jul 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion CHANGELOG_UNRELEASED.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,14 @@

- `SitumProvider.apiKey` is now optional. If no credentials are available when the MapView loads, it waits until authentication is provided.
- Updated the example application React Native from 0.79.1 to 0.83.10 to fix an issue that prevented the app from compiling on iOS.
- Updated Android example application targetSdkVersion from 35 to 37.
- Updated Android example application targetSdkVersion from 35 to 37.

### Removed

- Removed routing and navigation bridge between MapView and native SDK as the MapView now always uses its own routing and navigation library.

### Fixed

- AccessibilityMode documentation now mentions DirectionsOptions instead of DirectionsRequest.
- Fixed removeNavigationUpdates never resolving when navigation was not running.
- Fixed navigationRunning remaining active after reaching the destination.
95 changes: 31 additions & 64 deletions plugin/src/sdk/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,8 @@ let exitGeofencesCallback = (_: any) => {};

// Internal callbacks:
// These callback functions will be added as listeners to SitumPluginEventEmitter as soon as possible and will be
// listening events for all the plugin lifecycle. They will forward calls to both client callbacks and the MapView
// internal callback.
// listening events for all the plugin lifecycle. Location and geofence events will forward calls to both client
// callbacks and the MapView internal callback. Navigation events are forwarded only to the client callbacks.

const _internalLocationCallback = (loc: Location) => {
DelegatedStateManager.getInstance().updateLocation(loc);
Expand Down Expand Up @@ -143,56 +143,6 @@ const _internalLocationErrorCallback = (error: Error) => {
locationErrorCallback?.(adaptedError);
};

const _internalNavigationStartedCallback = (route: Route) => {
internalMethodCallMapDelegate(

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Estos InternalCall servían para sincronizar el estado de la navegación del sdk con el de la store del SitumProvider. Se eliminan porque ya no se desea que el sdk controle la navegación del viewer

new InternalCall(InternalCallType.NAVIGATION_START, route),
);
navigationStartedCallback?.(route);
};

const _internalNavigationProgressCallback = (progress: NavigationProgress) => {
internalMethodCallMapDelegate(

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ten sentido manter a callback interna? Non se podería eliminar e usar directamente a callback de cliente? Igual para os casos de abaixo.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Claro, aplicaré el cambio

new InternalCall(InternalCallType.NAVIGATION_PROGRESS, progress),
);
navigationProgressCallback?.(progress);
};

const _internalNavigationDestinationReachedCallback = (route: Route) => {
internalMethodCallMapDelegate(
new InternalCall(InternalCallType.NAVIGATION_DESTINATION_REACHED, route),
);
navigationDestinationReachedCallback?.(route);
};

const _internalNavigationOutOfRouteCallback = () => {
internalMethodCallMapDelegate(
new InternalCall(InternalCallType.NAVIGATION_OUT_OF_ROUTE, undefined),
);
navigationOutOfRouteCallback?.();
};

const _internalNavigationFinishedCallback = () => {
// Deprecated!
internalMethodCallMapDelegate(
new InternalCall(InternalCallType.NAVIGATION_CANCELLATION, undefined),
);
navigationFinishedCallback?.();
};

const _internalNavigationCancellationCallback = () => {
internalMethodCallMapDelegate(
new InternalCall(InternalCallType.NAVIGATION_CANCELLATION, undefined),
);
navigationCancellationCallback?.();
};

const _internalNavigationErrorCallback = (error: any) => {
internalMethodCallMapDelegate(
new InternalCall(InternalCallType.NAVIGATION_ERROR, error),
);
navigationErrorCallback?.(error);
};

const _internalEnterGeofencesCallback = (data: any) => {
internalMethodCallMapDelegate(
new InternalCall(InternalCallType.GEOFENCES_ENTER, data),
Expand All @@ -213,16 +163,30 @@ const _registerCallbacks = () => {
statusChanged: _internalLocationStatusCallback,
locationStopped: _internalLocationStoppedCallback,
locationError: _internalLocationErrorCallback,
[SdkNavigationUpdateType.START]: _internalNavigationStartedCallback,
[SdkNavigationUpdateType.PROGRESS]: _internalNavigationProgressCallback,
[SdkNavigationUpdateType.DESTINATION_REACHED]:
_internalNavigationDestinationReachedCallback,
[SdkNavigationUpdateType.OUTSIDE_ROUTE]:
_internalNavigationOutOfRouteCallback,
[SdkNavigationUpdateType.FINISHED]: _internalNavigationFinishedCallback,
[SdkNavigationUpdateType.CANCELLATION]:
_internalNavigationCancellationCallback,
[SdkNavigationUpdateType.ERROR]: _internalNavigationErrorCallback,
[SdkNavigationUpdateType.START]: (route: Route) => {
navigationStartedCallback(route);
},
[SdkNavigationUpdateType.PROGRESS]: (progress: NavigationProgress) => {
navigationProgressCallback(progress);
},
[SdkNavigationUpdateType.DESTINATION_REACHED]: (route: Route) => {
navigationDestinationReachedCallback(route);
navigationRunning = false;
},
[SdkNavigationUpdateType.OUTSIDE_ROUTE]: () => {
navigationOutOfRouteCallback();
},
[SdkNavigationUpdateType.FINISHED]: () => {
navigationFinishedCallback();
navigationRunning = false;
},
[SdkNavigationUpdateType.CANCELLATION]: () => {
navigationCancellationCallback();
navigationRunning = false;
},
[SdkNavigationUpdateType.ERROR]: (error: any) => {
navigationErrorCallback(error);
},
onEnterGeofences: _internalEnterGeofencesCallback,
onExitGeofences: _internalExitGeofencesCallback,
};
Expand Down Expand Up @@ -685,8 +649,11 @@ export default class SitumPlugin {
*
*/
static removeNavigationUpdates = () => {
return promiseWrapper<void>(({ onCallback }) => {
if (!SitumPlugin.navigationIsRunning()) return;
return promiseWrapper<void>(({ resolve, onCallback }) => {
if (!SitumPlugin.navigationIsRunning()) {
resolve();
return;
}

navigationRunning = false;
RNCSitumPlugin.removeNavigationUpdates((response) => {
Expand Down
18 changes: 11 additions & 7 deletions plugin/src/sdk/types/constants.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,20 @@
/**
* @deprecated This enum was used by the legacy navigation bridge between the native SDK and the MapView.
* That bridge has been removed.
* It is kept for backward compatibility and is no longer used or emitted by the plugin.
*/
export enum NavigationStatus {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Estame vindo á cabeza que esta enum quizais estivera aí unicamente para ser usada desde o lado cliente, para que dispoña dun listado exhaustivo de estados. Quizais non atopaches usos no código por eso. Pode ser?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tenía usos en el puente que se eliminó, pero me suena bastante realista pensar que un integrador podría haberlo usado. Lo vuelvo a añadir como deprecado. Si consideras que no debería estar deprecado avísame y lo cambio sin problema.

START = "start",
STOP = "stop",
OUT_OF_ROUTE = "outOfRoute",
UPDATE = "update",
}

/**
* @deprecated This enum was used by the legacy navigation bridge between the native SDK and the MapView.
* That bridge has been removed.
* It is kept for backward compatibility and is no longer used or emitted by the plugin.
*/
export enum NavigationUpdateType {
PROGRESS = "PROGRESS",
OUT_OF_ROUTE = "OUT_OF_ROUTE",
Expand Down Expand Up @@ -33,7 +43,7 @@ export enum LocationStatusName {
}

/**
* Available accessibility modes used in the {@link DirectionsRequest}.
* Available accessibility modes used in the {@link DirectionsOptions}.
*
* @property CHOOSE_SHORTEST The route should choose the best route, without taking into account if it is accessible or not.
* This option is the default so you don't have to do anything in order to use it
Expand All @@ -51,12 +61,6 @@ export enum InternalCallType {
LOCATION_STATUS = "LOCATION_STATUS",
LOCATION_ERROR = "LOCATION_ERROR",
LOCATION_STOPPED = "LOCATION_STOPPED", // TODO: Exists only in RN, delete!
NAVIGATION_START = "NAVIGATION_START",
NAVIGATION_DESTINATION_REACHED = "NAVIGATION_DESTINATION_REACHED",
NAVIGATION_PROGRESS = "NAVIGATION_PROGRESS",
NAVIGATION_OUT_OF_ROUTE = "NAVIGATION_OUT_OF_ROUTE",
NAVIGATION_CANCELLATION = "NAVIGATION_CANCELLATION",
NAVIGATION_ERROR = "NAVIGATION_ERROR",
GEOFENCES_ENTER = "GEOFENCES_ENTER",
GEOFENCES_EXIT = "GEOFENCES_EXIT",
}
Expand Down
60 changes: 6 additions & 54 deletions plugin/src/wayfinding/components/MapView.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ import SitumPlugin from "../../sdk";
import useSitum from "../hooks";
import {
selectApiDomain,
selectUser,
setError,
setLocationStatus,
} from "../store";
Expand All @@ -40,7 +39,6 @@ import {
type NavigateToCarPayload,
type NavigateToPointPayload,
type NavigateToPoiPayload,
type OnDirectionsRequestInterceptor,
type OnExternalLinkClickedResult,
type OnFavoritePoisUpdatedResult,
type OnFloorChangedResult,
Expand All @@ -53,7 +51,7 @@ import {
import { ErrorName } from "../types/constants";
import { sendMessageToViewer } from "../utils";
import ViewerMapper from "../utils/mapper";
import { areSameAuth, authStore, SitumAuth } from "../../sdk/authStore";
import { authStore, SitumAuth } from "../../sdk/authStore";
const SITUM_BASE_DOMAIN = "https://maps.situm.com";

const NETWORK_ERROR_CODE = {
Expand Down Expand Up @@ -183,8 +181,6 @@ const MapView = React.forwardRef<MapViewRef, MapViewProps>(
ref,
) => {
const webViewRef = useRef<WebView>(null);
const [_onDirectionsRequestInterceptor, setInterceptor] =
useState<OnDirectionsRequestInterceptor>();

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

El Interceptor permitía modificar los valores de una ruta antes de calcularse. Ya no se usa el sdk para calcularse así que no tiene sentido dejarlo.

const internalMessageCallbackRef =
useRef<OnInternalMapViewMessageCallback>();

Expand All @@ -203,11 +199,6 @@ const MapView = React.forwardRef<MapViewRef, MapViewProps>(
init,
location,
locationStatus,
directions,
navigation,
calculateRoute,
startNavigation,
stopNavigation,

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Se han borrado estos estados y funciones de la store, sincronizaban la navegación y rutas del sdk con el viewer

error,
} = useSitum();

Expand Down Expand Up @@ -282,12 +273,6 @@ const MapView = React.forwardRef<MapViewRef, MapViewProps>(
if (!webViewRef.current) {
return;
}
if (SitumPlugin.navigationIsRunning()) {
console.error(
"Situm > hook > Navigation on course, poi category selection is unavailable",
);
return;
}

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SitumPlugin.navigationIsRunning() comprueba si el SDK está utilizando la navegación, como ya no va sincronizado con el viewer no tiene usarlo aquí

sendMessageToViewer(
webViewRef.current,
ViewerMapper.selectPoiCategory(categoryId),
Expand All @@ -299,12 +284,6 @@ const MapView = React.forwardRef<MapViewRef, MapViewProps>(
if (!webViewRef.current) {
return;
}
if (SitumPlugin.navigationIsRunning()) {
console.error(
"Situm > hook > Navigation on course, floor selection is unavailable",
);
return;
}
sendMessageToViewer(
webViewRef.current,
ViewerMapper.selectFloor(floorId, options),
Expand Down Expand Up @@ -412,7 +391,7 @@ const MapView = React.forwardRef<MapViewRef, MapViewProps>(
webViewRef.current &&
sendMessageToViewer(
webViewRef.current,
ViewerMapper.selectPoi(null),
ViewerMapper.deselectPoi(),
);
},
navigateToPoi(payload): void {
Expand All @@ -424,12 +403,8 @@ const MapView = React.forwardRef<MapViewRef, MapViewProps>(
navigateToPoint(payload: NavigateToPointPayload): void {
_navigateToPoint(payload);
},
setOnDirectionsRequestInterceptor(directionRequestInterceptor): void {
setInterceptor(() => directionRequestInterceptor);
},
cancelNavigation(): void {
if (!webViewRef.current) return;
stopNavigation();

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

stopNavigation detenía la navegación en el SDK y actualizaba la store, esto se borra y se deja el sendMessageToViewer, que es el método moderno, para que se pueda seguir deteniendo la navegación por medio de esta función

sendMessageToViewer(
webViewRef.current,
ViewerMapper.cancelNavigation(),
Expand All @@ -450,7 +425,6 @@ const MapView = React.forwardRef<MapViewRef, MapViewProps>(
},
};
}, [
stopNavigation,
_navigateToPoi,
_followUser,
_navigateToCar,
Expand Down Expand Up @@ -516,23 +490,6 @@ const MapView = React.forwardRef<MapViewRef, MapViewProps>(
setError(null);
}, [error, mapLoaded]);

// Updated SDK navigation
useEffect(() => {
if (!webViewRef.current || !navigation || !mapLoaded) return;

sendMessageToViewer(
webViewRef.current,
ViewerMapper.navigation(navigation),
);
}, [navigation, mapLoaded]);

// Updated SDK route
useEffect(() => {
if (!webViewRef.current || !directions || !mapLoaded) return;

sendMessageToViewer(webViewRef.current, ViewerMapper.route(directions));
}, [directions, mapLoaded]);

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Enviaban mensajes al viewer cuando la navegación o ruta de la store cambiaban. Se borraron estos valores de la store, así que de aquí también.

// Update language
useEffect(() => {
if (!webViewRef.current || !configuration.language || !mapLoaded) return;
Expand Down Expand Up @@ -580,15 +537,6 @@ const MapView = React.forwardRef<MapViewRef, MapViewProps>(
case "app.ready_for_auth":
sendEffectiveAuth();
break;
case "directions.requested":
calculateRoute(payload, _onDirectionsRequestInterceptor);
break;
case "navigation.requested":
startNavigation(payload, _onDirectionsRequestInterceptor);
break;
case "navigation.stopped":
stopNavigation();
break;

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

El viewer ya no emite estos mensaje

case "cartography.poi_selected":
onPoiSelected(payload);
break;
Expand Down Expand Up @@ -620,6 +568,10 @@ const MapView = React.forwardRef<MapViewRef, MapViewProps>(
case "viewer.navigation.started":
case "viewer.navigation.updated":
case "viewer.navigation.stopped":
// Forward Viewer navigation events to the existing SDK callbacks.
// This avoids introducing a separate set of callbacks just for the Viewer.
// Warning: running SDK and MapView navigations at the same time may mix
// events because both navigations use the same public SDK callbacks.
SitumPlugin.updateNavigationState(payload);
break;
case "share_location.uploading_locations_started":
Expand Down
Loading