diff --git a/README.md b/README.md index a6f91415..6c838a51 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# OutSystems Maps · v2.3.0 +# OutSystems Maps · v2.3.1 ![GitHub License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg) ![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg) diff --git a/gulp/DefaultSpecs.js b/gulp/DefaultSpecs.js index 15ba198e..5a148913 100644 --- a/gulp/DefaultSpecs.js +++ b/gulp/DefaultSpecs.js @@ -19,7 +19,7 @@ const constants = { // Store the default project specifications const specs = { - version: '2.3.0', + version: '2.3.1', name: 'OutSystems Maps', description: '', url: 'Website:\n • ' + constants.websiteUrl, diff --git a/package.json b/package.json index 9092255b..87c1115b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "outsystems-maps", - "version": "2.3.0", + "version": "2.3.1", "description": "OutSystems Maps", "author": "UI Components Team", "license": "BSD-3-Clause", diff --git a/sonar-project.properties b/sonar-project.properties index e511e851..09246314 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -15,4 +15,11 @@ sonar.sources=src sonar.exclusions=**/node_modules/**,**/dist/**,**/*.min.js # JavaScript/TypeScript settings -sonar.javascript.lcov.reportPaths=coverage/lcov.info \ No newline at end of file +sonar.javascript.lcov.reportPaths=coverage/lcov.info + +# Suppress S7764 (prefer globalThis over window) project-wide. +# Runtime-injected browser globals are declared via `interface Window` augmentation +# in Global.d.ts — `window.x` is the only access pattern TypeScript resolves correctly. +sonar.issue.ignore.multicriteria=e1 +sonar.issue.ignore.multicriteria.e1.ruleKey=typescript:S7764 +sonar.issue.ignore.multicriteria.e1.resourceKey=**/*.ts \ No newline at end of file diff --git a/src/OSFramework/Maps/Constants.ts b/src/OSFramework/Maps/Constants.ts index 658a26c2..c11e17b5 100644 --- a/src/OSFramework/Maps/Constants.ts +++ b/src/OSFramework/Maps/Constants.ts @@ -1,7 +1,7 @@ // eslint-disable-next-line @typescript-eslint/no-unused-vars namespace OSFramework.Maps.Constants { /* OutSystems Maps Version */ - export const OSMapsVersion = '2.3.0'; + export const OSMapsVersion = '2.3.1'; /** * Maps Set OutSystems platform in use (O11/ODC). diff --git a/src/Providers/DrawingTools/TerraDraw/Configuration/DrawConfig.ts b/src/Providers/DrawingTools/TerraDraw/Configuration/DrawConfig.ts index 82ed55a1..564ac4a1 100644 --- a/src/Providers/DrawingTools/TerraDraw/Configuration/DrawConfig.ts +++ b/src/Providers/DrawingTools/TerraDraw/Configuration/DrawConfig.ts @@ -8,6 +8,6 @@ namespace Provider.DrawingTools.TerraDraw.Configuration { public allowDrag: boolean; public uniqueId: string; - public abstract getProviderConfig(): unknown[]; + public abstract getProviderConfig(): unknown; } } diff --git a/src/Providers/DrawingTools/TerraDraw/Configuration/DrawFilledShapeConfig.ts b/src/Providers/DrawingTools/TerraDraw/Configuration/DrawFilledShapeConfig.ts index 5c79b3e6..f9732008 100644 --- a/src/Providers/DrawingTools/TerraDraw/Configuration/DrawFilledShapeConfig.ts +++ b/src/Providers/DrawingTools/TerraDraw/Configuration/DrawFilledShapeConfig.ts @@ -17,7 +17,7 @@ namespace Provider.DrawingTools.TerraDraw.Configuration { * strokeWeight → styles.outlineWidth * strokeOpacity → styles.outlineOpacity */ - public getProviderConfig(): unknown[] { + public getProviderConfig(): unknown { return { styles: { fillColor: this.fillColor ?? '#aaaaaa', @@ -26,7 +26,7 @@ namespace Provider.DrawingTools.TerraDraw.Configuration { outlineWidth: this.strokeWeight ?? 2, outlineOpacity: this.strokeOpacity ?? 1, }, - } as unknown as unknown[]; + }; } } } diff --git a/src/Providers/DrawingTools/TerraDraw/Configuration/DrawMarkerConfig.ts b/src/Providers/DrawingTools/TerraDraw/Configuration/DrawMarkerConfig.ts index f9480a94..e26da069 100644 --- a/src/Providers/DrawingTools/TerraDraw/Configuration/DrawMarkerConfig.ts +++ b/src/Providers/DrawingTools/TerraDraw/Configuration/DrawMarkerConfig.ts @@ -14,12 +14,12 @@ namespace Provider.DrawingTools.TerraDraw.Configuration { export class DrawMarkerConfig extends DrawConfig { public iconUrl: string; - public getProviderConfig(): unknown[] { + public getProviderConfig(): unknown { return { styles: { markerUrl: this.iconUrl ?? '', }, - } as unknown as unknown[]; + }; } } } diff --git a/src/Providers/DrawingTools/TerraDraw/Configuration/DrawPolylineConfig.ts b/src/Providers/DrawingTools/TerraDraw/Configuration/DrawPolylineConfig.ts index ed66074e..add3c4a0 100644 --- a/src/Providers/DrawingTools/TerraDraw/Configuration/DrawPolylineConfig.ts +++ b/src/Providers/DrawingTools/TerraDraw/Configuration/DrawPolylineConfig.ts @@ -12,14 +12,14 @@ namespace Provider.DrawingTools.TerraDraw.Configuration { * strokeOpacity → styles.lineStringOpacity */ export class DrawPolylineConfig extends DrawBasicShapeConfig { - public getProviderConfig(): unknown[] { + public getProviderConfig(): unknown { return { styles: { lineStringColor: this.strokeColor ?? '#555555', lineStringWidth: this.strokeWeight ?? 2, lineStringOpacity: this.strokeOpacity ?? 1, }, - } as unknown as unknown[]; + }; } } } diff --git a/src/Providers/DrawingTools/TerraDraw/DrawingTools.ts b/src/Providers/DrawingTools/TerraDraw/DrawingTools.ts index bc33462b..9d7155fd 100644 --- a/src/Providers/DrawingTools/TerraDraw/DrawingTools.ts +++ b/src/Providers/DrawingTools/TerraDraw/DrawingTools.ts @@ -35,7 +35,7 @@ namespace Provider.DrawingTools.TerraDraw { // Always include a select mode so the user can deselect drawing without reloading modes.push( - new globalThis.terraDraw.TerraDrawSelectMode({ + new window.terraDraw.TerraDrawSelectMode({ flags: { circle: { feature: { draggable: true } }, linestring: { @@ -67,14 +67,14 @@ namespace Provider.DrawingTools.TerraDraw { * support hot-swapping modes, so the entire instance must be replaced. */ private _buildTerraDraw(): void { - if (this._provider) { + if (this._provider?.enabled) { this._provider.stop(); } - this._provider = new globalThis.terraDraw.TerraDraw({ + this._provider = new window.terraDraw.TerraDraw({ adapter: this._getAdapter(), modes: this._buildModes(), - }) as TerraDrawProviderCompatible; + }); this._provider.on('finish', (id, context) => this._onFinish(id, context)); @@ -93,7 +93,7 @@ namespace Provider.DrawingTools.TerraDraw { private _getAdapter(): TerraDrawGoogleMapsAdapter { if (this.config.providerType === OSFramework.Maps.Enum.ProviderType.Google) { - return new globalThis.terraDrawGoogleMapsAdapter.TerraDrawGoogleMapsAdapter({ + return new window.terraDrawGoogleMapsAdapter.TerraDrawGoogleMapsAdapter({ map: this.map.provider as google.maps.Map, lib: google.maps, coordinatePrecision: 9, @@ -196,9 +196,9 @@ namespace Provider.DrawingTools.TerraDraw { } public changeProperty(propertyName: string, value: unknown): void { - const propValue = OSFramework.Maps.Enum.OS_Config_DrawingTools[propertyName]; super.changeProperty(propertyName, value); if (this.isReady) { + const propValue = OSFramework.Maps.Enum.OS_Config_DrawingTools[propertyName]; if (propValue === OSFramework.Maps.Enum.OS_Config_DrawingTools.position) { const modeNames = this.tools.map((t) => t.type); this._ui?.refresh(modeNames, value as string); @@ -208,10 +208,13 @@ namespace Provider.DrawingTools.TerraDraw { public dispose(): void { if (this.isReady) { - // Resets the mouse icon to its default state. - // This prevents the tool's custom mouse icon from persisting after the provider is destroyed. - this._provider.setMode(Constants.ModeName.Select); - this._provider.stop(); + // If the provider is not enabled, it means that it was never started. + if (this.provider.enabled) { + // Resets the mouse icon to its default state. + // This prevents the tool's custom mouse icon from persisting after the provider is destroyed. + this._provider.setMode(Constants.ModeName.Select); + this._provider.stop(); + } this._ui?.dispose(); } this._provider = undefined; @@ -235,10 +238,12 @@ namespace Provider.DrawingTools.TerraDraw { tool && this._modeToTool.delete(tool.type); if (this.isReady) { - // Resets the mouse icon to its default state. - // This prevents the tool's custom mouse icon from persisting after the provider is destroyed. - this._provider.setMode(Constants.ModeName.Select); - + // If the provider is not enabled, it means that it was never started. + if (this.provider.enabled) { + // Resets the mouse icon to its default state. + // This prevents the tool's custom mouse icon from persisting after the provider is destroyed. + this._provider.setMode(Constants.ModeName.Select); + } this._buildTerraDraw(); this._provider.start(); diff --git a/src/Providers/DrawingTools/TerraDraw/Tools/DrawCircle.ts b/src/Providers/DrawingTools/TerraDraw/Tools/DrawCircle.ts index b69eb285..ecbd6571 100644 --- a/src/Providers/DrawingTools/TerraDraw/Tools/DrawCircle.ts +++ b/src/Providers/DrawingTools/TerraDraw/Tools/DrawCircle.ts @@ -88,7 +88,9 @@ namespace Provider.DrawingTools.TerraDraw.Tools { } public createTerraDrawMode(): TerraDrawBaseDrawMode { - return new globalThis.terraDraw.TerraDrawCircleMode(this.config.getProviderConfig()); + return new window.terraDraw.TerraDrawCircleMode( + this.config.getProviderConfig() as ConstructorParameters[0] + ); } } } diff --git a/src/Providers/DrawingTools/TerraDraw/Tools/DrawMarker.ts b/src/Providers/DrawingTools/TerraDraw/Tools/DrawMarker.ts index 7a34cba0..c302b0e5 100644 --- a/src/Providers/DrawingTools/TerraDraw/Tools/DrawMarker.ts +++ b/src/Providers/DrawingTools/TerraDraw/Tools/DrawMarker.ts @@ -89,7 +89,9 @@ namespace Provider.DrawingTools.TerraDraw.Tools { } public createTerraDrawMode(): TerraDrawBaseDrawMode { - return new globalThis.terraDraw.TerraDrawMarkerMode(this.config.getProviderConfig()); + return new window.terraDraw.TerraDrawMarkerMode( + this.config.getProviderConfig() as ConstructorParameters[0] + ); } } } diff --git a/src/Providers/DrawingTools/TerraDraw/Tools/DrawPolygon.ts b/src/Providers/DrawingTools/TerraDraw/Tools/DrawPolygon.ts index d60f683a..a4acff6f 100644 --- a/src/Providers/DrawingTools/TerraDraw/Tools/DrawPolygon.ts +++ b/src/Providers/DrawingTools/TerraDraw/Tools/DrawPolygon.ts @@ -41,7 +41,11 @@ namespace Provider.DrawingTools.TerraDraw.Tools { } public createTerraDrawMode(): TerraDrawBaseDrawMode { - return new globalThis.terraDraw.TerraDrawPolygonMode(this.config.getProviderConfig()); + return new window.terraDraw.TerraDrawPolygonMode( + this.config.getProviderConfig() as ConstructorParameters< + typeof window.terraDraw.TerraDrawPolygonMode + >[0] + ); } } } diff --git a/src/Providers/DrawingTools/TerraDraw/Tools/DrawPolyline.ts b/src/Providers/DrawingTools/TerraDraw/Tools/DrawPolyline.ts index 559ad242..551603a8 100644 --- a/src/Providers/DrawingTools/TerraDraw/Tools/DrawPolyline.ts +++ b/src/Providers/DrawingTools/TerraDraw/Tools/DrawPolyline.ts @@ -41,7 +41,11 @@ namespace Provider.DrawingTools.TerraDraw.Tools { } public createTerraDrawMode(): TerraDrawBaseDrawMode { - return new globalThis.terraDraw.TerraDrawLineStringMode(this.config.getProviderConfig()); + return new window.terraDraw.TerraDrawLineStringMode( + this.config.getProviderConfig() as ConstructorParameters< + typeof window.terraDraw.TerraDrawLineStringMode + >[0] + ); } } } diff --git a/src/Providers/DrawingTools/TerraDraw/Tools/DrawRectangle.ts b/src/Providers/DrawingTools/TerraDraw/Tools/DrawRectangle.ts index d8cd6b70..2540a040 100644 --- a/src/Providers/DrawingTools/TerraDraw/Tools/DrawRectangle.ts +++ b/src/Providers/DrawingTools/TerraDraw/Tools/DrawRectangle.ts @@ -65,7 +65,11 @@ namespace Provider.DrawingTools.TerraDraw.Tools { } public createTerraDrawMode(): TerraDrawBaseDrawMode { - return new globalThis.terraDraw.TerraDrawRectangleMode(this.config.getProviderConfig()); + return new window.terraDraw.TerraDrawRectangleMode( + this.config.getProviderConfig() as ConstructorParameters< + typeof window.terraDraw.TerraDrawRectangleMode + >[0] + ); } } } diff --git a/src/Providers/Layers/deck.gl/HeatmapLayer.ts b/src/Providers/Layers/deck.gl/HeatmapLayer.ts index 9e83c20b..4953d380 100644 --- a/src/Providers/Layers/deck.gl/HeatmapLayer.ts +++ b/src/Providers/Layers/deck.gl/HeatmapLayer.ts @@ -24,9 +24,9 @@ namespace Provider.Layers.deckgl.HeatmapLayer { ...(gradientColors ? { colorRange: gradientColors } : {}), // Id that enables the deck.gl to perform the update to the layer. id: this.uniqueId, - } as ConstructorParameters[0]; + } as ConstructorParameters[0]; - return new globalThis.deck.HeatmapLayer(finalConfigs); + return new window.deck.HeatmapLayer(finalConfigs); } private _gradientColors(): DeckglColor[] | undefined { @@ -75,7 +75,7 @@ namespace Provider.Layers.deckgl.HeatmapLayer { // Creates the provider HeatmapLayer this._providerHeatmapLayer = this._buildProviderLayer(); - this._provider = new globalThis.deck.GoogleMapsOverlay({ + this._provider = new window.deck.GoogleMapsOverlay({ layers: [this._providerHeatmapLayer], }); diff --git a/src/Providers/Maps/Google/Shape/Polygon.ts b/src/Providers/Maps/Google/Shape/Polygon.ts index 37e4e8cc..e780ca7d 100644 --- a/src/Providers/Maps/Google/Shape/Polygon.ts +++ b/src/Providers/Maps/Google/Shape/Polygon.ts @@ -18,7 +18,7 @@ namespace Provider.Maps.Google.Shape { protected _createProvider(path: Array): google.maps.Polygon { return new google.maps.Polygon({ map: this.map.provider, - paths: path, + paths: path as google.maps.LatLngLiteral[], ...(this.getProviderConfig() as Configuration.Shape.IShapeProviderConfig), }); }