The destroy function.
Only used for "project" scoped extensions (useless for "application" scoped extension).
For "project" scoped extensions, when a project will be deactivated, all project's extensions are unregistered.
Before unregister those extensions, this function is called.
For example, when this function is called you should clean all your event listeners.
Don't mind about cleaning the redux state, because it will be destroyed by the register function.
Then the redux state will be created again when the next project will be loaded, and the extension will be registered again.
The unique extension identifier
The init function of your extension.
Here you can start initialize your extension.
By default param is an empty object, but for project server extensions only, a parameter "serverInfo" is passed, fetched from the project configuration that is defined in the admininistration.
An optional handler that returns a Mapbox GL JS RequestParameters object
Provide this handler if your extentions needs to add something special in MapBox map requests, like providing credentials, adding headers, etc.
Great care must be taken to not blindly modify every request passed to this handler. You should only modify requests known to your extension. This can usually be determined by looking at the url received by the handler.
See Mapbox documentation for reference:
https://docs.mapbox.com/mapbox-gl-js/api/map/#map-parameters
https://docs.mapbox.com/mapbox-gl-js/api/properties/#requestparameters
By default an extension is "application" scoped. But you can set the extension as "project" scoped.
If an extension is application scoped, it will be loaded one time, and never destroyed.
If it's set as project scoped :
If your extensions is available for JMap Cloud, you have to set this parameter.
This parameter is used to uniquely identify your extension among all other JMap Cloud extensions.
This parameter can be set alongside JCoreExtension.serverExtensionId if your extension is also available for JMap Server.
If set, this parameter must be a UUID v4 string. Each Jmap Cloud extension must have a unique identifier, so you have to make sure that each of your extensions defines a unique jmapCloudExtensionUrn
.
JMap Cloud only supports Project extensions
The registration function.
Triggered when this extension has been registered.
You can provide a renderMouseOver function.
If set, this function has to return a JExtensionMouseOver, and it will be displayed at the end of the standard mouseover.
If your extensions is depending on a server extension, you have to set this parameter.
This parameter is used to determine if an extension is a backend extension or not, and also used in order to provide the parameter to the extension (initFn params).
It should be the same id as the JS extension id, it but could be different.
If you want you can expose a service.
If your extension id is "MyExtension", your service will be accessible like that :
JMap.Extension.MyExtension.doSomething()
By default :
If you set this parameter to true :
You can provide your own Redux store reducer : https://redux.js.org/basics/reducers.
Like that you can develop UI component that react to the redux state changes.
You can get the data store using this function : JMap.getDataStore, and then dispatch your own actions.
A redux reducer is a pure JS function that take the current reducer state (can be undefined first time) and an action, and return the new state (the same if no changes has been made for the action).
You can provide a translation bundle for your extesion. All translations will be handled by the JMap NG translation engine. See JMap.Language.addBundle for more details on bundles
We introduce the notion of extension in order to let you adding you own JMap plugin.
Your plugin is an object that has to implement this interface.
Then you have to register your extension like that :
// This a minimal model // You need to provide an id and an initFn function at least // This model is useless, but just for the example JMap.Extension.register({ id: "MyExtension", // Unique id initFn: () => { // here you can start your UI component if needed console.log("JMap is started and my extension has been successfuly started") } })