expo-arcgis 0.2.3 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/src/main/java/expo/modules/arcgis/ExpoArcgisExtrasModule.kt +3 -0
- package/android/src/main/java/expo/modules/arcgis/ExpoArcgisGeometryModule.kt +1 -0
- package/build/AnalysisOverlay.d.ts.map +1 -1
- package/build/AnalysisOverlay.js +2 -1
- package/build/AnalysisOverlay.js.map +1 -1
- package/build/DistanceMeasurement.d.ts.map +1 -1
- package/build/DistanceMeasurement.js +2 -1
- package/build/DistanceMeasurement.js.map +1 -1
- package/build/DynamicEntityLayer.d.ts.map +1 -1
- package/build/DynamicEntityLayer.js +2 -1
- package/build/DynamicEntityLayer.js.map +1 -1
- package/build/FeatureLayer.d.ts.map +1 -1
- package/build/FeatureLayer.js +2 -1
- package/build/FeatureLayer.js.map +1 -1
- package/build/GeometryEditor.d.ts.map +1 -1
- package/build/GeometryEditor.js +2 -1
- package/build/GeometryEditor.js.map +1 -1
- package/build/Graphic.d.ts.map +1 -1
- package/build/Graphic.js +2 -1
- package/build/Graphic.js.map +1 -1
- package/build/GraphicsOverlay.d.ts.map +1 -1
- package/build/GraphicsOverlay.js +2 -1
- package/build/GraphicsOverlay.js.map +1 -1
- package/build/GroupLayer.d.ts.map +1 -1
- package/build/GroupLayer.js +2 -1
- package/build/GroupLayer.js.map +1 -1
- package/build/ImageOverlay.d.ts.map +1 -1
- package/build/ImageOverlay.js +2 -1
- package/build/ImageOverlay.js.map +1 -1
- package/build/LineOfSight.d.ts.map +1 -1
- package/build/LineOfSight.js +2 -1
- package/build/LineOfSight.js.map +1 -1
- package/build/MapImageLayer.d.ts.map +1 -1
- package/build/MapImageLayer.js +2 -1
- package/build/MapImageLayer.js.map +1 -1
- package/build/MapView.d.ts.map +1 -1
- package/build/MapView.js +5 -1
- package/build/MapView.js.map +1 -1
- package/build/SceneLayer.d.ts.map +1 -1
- package/build/SceneLayer.js +2 -1
- package/build/SceneLayer.js.map +1 -1
- package/build/SceneView.d.ts.map +1 -1
- package/build/SceneView.js +3 -2
- package/build/SceneView.js.map +1 -1
- package/build/TileLayer.d.ts.map +1 -1
- package/build/TileLayer.js +2 -1
- package/build/TileLayer.js.map +1 -1
- package/build/Viewshed.d.ts.map +1 -1
- package/build/Viewshed.js +2 -1
- package/build/Viewshed.js.map +1 -1
- package/build/createLayerComponent.d.ts.map +1 -1
- package/build/createLayerComponent.js +2 -1
- package/build/createLayerComponent.js.map +1 -1
- package/build/utils/detachQuietly.d.ts +16 -0
- package/build/utils/detachQuietly.d.ts.map +1 -0
- package/build/utils/detachQuietly.js +23 -0
- package/build/utils/detachQuietly.js.map +1 -0
- package/build/utils/sharedObjectId.d.ts +14 -0
- package/build/utils/sharedObjectId.d.ts.map +1 -0
- package/build/utils/sharedObjectId.js +18 -0
- package/build/utils/sharedObjectId.js.map +1 -0
- package/package.json +1 -1
- package/src/AnalysisOverlay.tsx +2 -1
- package/src/DistanceMeasurement.tsx +2 -1
- package/src/DynamicEntityLayer.tsx +2 -1
- package/src/FeatureLayer.tsx +2 -1
- package/src/GeometryEditor.tsx +2 -1
- package/src/Graphic.tsx +2 -1
- package/src/GraphicsOverlay.tsx +2 -1
- package/src/GroupLayer.tsx +2 -1
- package/src/ImageOverlay.tsx +2 -1
- package/src/LineOfSight.tsx +2 -1
- package/src/MapImageLayer.tsx +2 -1
- package/src/MapView.tsx +7 -4
- package/src/SceneLayer.tsx +2 -1
- package/src/SceneView.tsx +6 -4
- package/src/TileLayer.tsx +2 -1
- package/src/Viewshed.tsx +2 -1
- package/src/createLayerComponent.tsx +2 -1
- package/src/utils/detachQuietly.ts +21 -0
- package/src/utils/sharedObjectId.ts +17 -0
|
@@ -103,6 +103,7 @@ class ExpoArcgisExtrasModule : Module() {
|
|
|
103
103
|
createRouteTracker(appContext, stops, params)
|
|
104
104
|
}
|
|
105
105
|
Class(RouteTrackerRef::class) {
|
|
106
|
+
Constructor { throw IllegalStateException("RouteTrackerRef is created natively (createRouteTracker) and cannot be constructed from JavaScript.") }
|
|
106
107
|
AsyncFunction("trackLocation") Coroutine { ref: RouteTrackerRef, location: Map<String, Any?> ->
|
|
107
108
|
ref.trackLocation(location)
|
|
108
109
|
}
|
|
@@ -113,6 +114,7 @@ class ExpoArcgisExtrasModule : Module() {
|
|
|
113
114
|
|
|
114
115
|
// Branch versioning — a service geodatabase handle obtained from FeatureLayerRef.getServiceGeodatabase().
|
|
115
116
|
Class(ServiceGeodatabaseRef::class) {
|
|
117
|
+
Constructor { throw IllegalStateException("ServiceGeodatabaseRef is obtained from FeatureLayer.getServiceGeodatabase() and cannot be constructed from JavaScript.") }
|
|
116
118
|
AsyncFunction("fetchVersions") Coroutine { ref: ServiceGeodatabaseRef ->
|
|
117
119
|
ref.fetchVersions()
|
|
118
120
|
}
|
|
@@ -140,6 +142,7 @@ class ExpoArcgisExtrasModule : Module() {
|
|
|
140
142
|
openGeodatabase(appContext, path)
|
|
141
143
|
}
|
|
142
144
|
Class(GeodatabaseRef::class) {
|
|
145
|
+
Constructor { throw IllegalStateException("GeodatabaseRef is obtained from openGeodatabase() and cannot be constructed from JavaScript.") }
|
|
143
146
|
AsyncFunction("beginTransaction") Coroutine { ref: GeodatabaseRef -> ref.beginTransaction() }
|
|
144
147
|
AsyncFunction("commitTransaction") Coroutine { ref: GeodatabaseRef -> ref.commitTransaction() }
|
|
145
148
|
AsyncFunction("rollbackTransaction") Coroutine { ref: GeodatabaseRef -> ref.rollbackTransaction() }
|
|
@@ -103,6 +103,7 @@ class ExpoArcgisGeometryModule : Module() {
|
|
|
103
103
|
|
|
104
104
|
// Job handle for long-running downloads — emits onProgress, awaits via result(), supports cancel().
|
|
105
105
|
Class(JobRef::class) {
|
|
106
|
+
Constructor { throw IllegalStateException("JobRef is returned by long-running operations and cannot be constructed from JavaScript.") }
|
|
106
107
|
Events("onProgress")
|
|
107
108
|
AsyncFunction("result") Coroutine { ref: JobRef -> ref.result() }
|
|
108
109
|
AsyncFunction("cancel") Coroutine { ref: JobRef -> ref.cancel() }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnalysisOverlay.d.ts","sourceRoot":"","sources":["../src/AnalysisOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAElE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"AnalysisOverlay.d.ts","sourceRoot":"","sources":["../src/AnalysisOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAElE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAK/D;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,iBAAiB,CAAC,oBAAoB,CAAC,+BAyB7F"}
|
package/build/AnalysisOverlay.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useEffect, useRef } from 'react';
|
|
2
2
|
import ExpoArcgisModule from './ExpoArcgisModule';
|
|
3
3
|
import { AnalysisOverlayContext, useGeoView } from './contexts';
|
|
4
|
+
import { detachQuietly } from './utils/detachQuietly';
|
|
4
5
|
/**
|
|
5
6
|
* Declarative analysis overlay. Mirrors the native `AnalysisOverlay` — a `<SceneView>` can hold
|
|
6
7
|
* several. Registers itself with the nearest `<SceneView>` and hosts `<Viewshed>` / `<LineOfSight>`
|
|
@@ -16,7 +17,7 @@ export function AnalysisOverlay({ visible, children }) {
|
|
|
16
17
|
const overlay = ref.current;
|
|
17
18
|
view.addAnalysisOverlay(overlay);
|
|
18
19
|
return () => {
|
|
19
|
-
view.removeAnalysisOverlay(overlay);
|
|
20
|
+
detachQuietly(() => view.removeAnalysisOverlay(overlay));
|
|
20
21
|
overlay.release();
|
|
21
22
|
};
|
|
22
23
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnalysisOverlay.js","sourceRoot":"","sources":["../src/AnalysisOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAA0B,MAAM,OAAO,CAAC;AAGlE,OAAO,gBAA6C,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"AnalysisOverlay.js","sourceRoot":"","sources":["../src/AnalysisOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAA0B,MAAM,OAAO,CAAC;AAGlE,OAAO,gBAA6C,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,EAAE,OAAO,EAAE,QAAQ,EAA2C;IAC5F,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,MAAM,GAAG,GAAG,MAAM,CAAiC,SAAS,CAAC,CAAC;IAC9D,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,GAAG,CAAC,OAAO,GAAG,IAAI,gBAAgB,CAAC,kBAAkB,EAAE,CAAC;IAC1D,CAAC;IAED,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,OAAO,GAAG,GAAG,CAAC,OAAQ,CAAC;QAC7B,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACjC,OAAO,GAAG,EAAE;YACV,aAAa,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,CAAC,CAAC;QACF,uDAAuD;IACzD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,qDAAqD;IACrD,SAAS,CAAC,GAAG,EAAE;QACb,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;IAC3C,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,OAAO,CACL,CAAC,sBAAsB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,sBAAsB,CAAC,QAAQ,CAAC,CAClG,CAAC;AACJ,CAAC","sourcesContent":["import { useEffect, useRef, type PropsWithChildren } from 'react';\n\nimport type { AnalysisOverlayProps } from './ExpoArcgis.types';\nimport ExpoArcgisModule, { type AnalysisOverlayRef } from './ExpoArcgisModule';\nimport { AnalysisOverlayContext, useGeoView } from './contexts';\nimport { detachQuietly } from './utils/detachQuietly';\n\n/**\n * Declarative analysis overlay. Mirrors the native `AnalysisOverlay` — a `<SceneView>` can hold\n * several. Registers itself with the nearest `<SceneView>` and hosts `<Viewshed>` / `<LineOfSight>`\n * children. (Visual analyses are 3D only; inside a `<MapView>` this is a no-op.)\n */\nexport function AnalysisOverlay({ visible, children }: PropsWithChildren<AnalysisOverlayProps>) {\n const view = useGeoView();\n const ref = useRef<AnalysisOverlayRef | undefined>(undefined);\n if (!ref.current) {\n ref.current = new ExpoArcgisModule.AnalysisOverlayRef();\n }\n\n useEffect(() => {\n const overlay = ref.current!;\n view.addAnalysisOverlay(overlay);\n return () => {\n detachQuietly(() => view.removeAnalysisOverlay(overlay));\n overlay.release();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Apply visibility on mount and whenever it changes.\n useEffect(() => {\n ref.current?.setVisible(visible ?? true);\n }, [visible]);\n\n return (\n <AnalysisOverlayContext.Provider value={ref.current}>{children}</AnalysisOverlayContext.Provider>\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DistanceMeasurement.d.ts","sourceRoot":"","sources":["../src/DistanceMeasurement.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"DistanceMeasurement.d.ts","sourceRoot":"","sources":["../src/DistanceMeasurement.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAQnE;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,aAAa,EACb,WAAW,EACX,mBAAmB,GACpB,EAAE,wBAAwB,QAuC1B"}
|
|
@@ -4,6 +4,7 @@ import { useAnalysisOverlay } from './contexts';
|
|
|
4
4
|
import { usePrevious } from './hooks/usePrevious';
|
|
5
5
|
import { useUpdateEffect } from './hooks/useUpdateEffect';
|
|
6
6
|
import { getPropsDiffs } from './utils/getPropsDiffs';
|
|
7
|
+
import { detachQuietly } from './utils/detachQuietly';
|
|
7
8
|
/**
|
|
8
9
|
* Declarative exploratory distance measurement between two 3D points. Mirrors the native
|
|
9
10
|
* `ExploratoryLocationDistanceMeasurement`; draws itself on the nearest `<AnalysisOverlay>`
|
|
@@ -21,7 +22,7 @@ export function DistanceMeasurement({ startLocation, endLocation, onMeasurementC
|
|
|
21
22
|
const analysis = ref.current;
|
|
22
23
|
overlay.addAnalysis(analysis);
|
|
23
24
|
return () => {
|
|
24
|
-
overlay.removeAnalysis(analysis);
|
|
25
|
+
detachQuietly(() => overlay.removeAnalysis(analysis));
|
|
25
26
|
analysis.release();
|
|
26
27
|
};
|
|
27
28
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DistanceMeasurement.js","sourceRoot":"","sources":["../src/DistanceMeasurement.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,gBAAiD,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAClC,aAAa,EACb,WAAW,EACX,mBAAmB,GACM;IACzB,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;IACrC,MAAM,GAAG,GAAG,MAAM,CAAqC,SAAS,CAAC,CAAC;IAClE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,GAAG,CAAC,OAAO,GAAG,IAAI,gBAAgB,CAAC,sBAAsB,CAAC,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,QAAQ,GAAG,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC;IAChD,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEnC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAQ,CAAC;QAC9B,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC9B,OAAO,GAAG,EAAE;YACV,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"DistanceMeasurement.js","sourceRoot":"","sources":["../src/DistanceMeasurement.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,gBAAiD,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,EAClC,aAAa,EACb,WAAW,EACX,mBAAmB,GACM;IACzB,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;IACrC,MAAM,GAAG,GAAG,MAAM,CAAqC,SAAS,CAAC,CAAC;IAClE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,GAAG,CAAC,OAAO,GAAG,IAAI,gBAAgB,CAAC,sBAAsB,CAAC,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,QAAQ,GAAG,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC;IAChD,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEnC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAQ,CAAC;QAC9B,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC9B,OAAO,GAAG,EAAE;YACV,aAAa,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;YACtD,QAAQ,CAAC,OAAO,EAAE,CAAC;QACrB,CAAC,CAAC;QACF,uDAAuD;IACzD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC5C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC/B,MAAM,OAAO,GAA4B,EAAE,CAAC;QAC5C,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACpB,OAAO,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC,EAAE,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;IAEjC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,mBAAmB;YAAE,OAAO;QACjC,MAAM,YAAY,GAAG,GAAG,CAAC,OAAQ,CAAC,WAAW,CAAC,qBAAqB,EAAE,CAAC,WAAW,EAAE,EAAE,CACnF,mBAAmB,CAAC,WAAW,CAAC,CACjC,CAAC;QACF,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;IACrC,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAE1B,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport type { DistanceMeasurementProps } from './ExpoArcgis.types';\nimport ExpoArcgisModule, { type DistanceMeasurementRef } from './ExpoArcgisModule';\nimport { useAnalysisOverlay } from './contexts';\nimport { usePrevious } from './hooks/usePrevious';\nimport { useUpdateEffect } from './hooks/useUpdateEffect';\nimport { getPropsDiffs } from './utils/getPropsDiffs';\nimport { detachQuietly } from './utils/detachQuietly';\n\n/**\n * Declarative exploratory distance measurement between two 3D points. Mirrors the native\n * `ExploratoryLocationDistanceMeasurement`; draws itself on the nearest `<AnalysisOverlay>`\n * (3D only) and reports the direct / horizontal / vertical distances via `onMeasurementChange`.\n */\nexport function DistanceMeasurement({\n startLocation,\n endLocation,\n onMeasurementChange,\n}: DistanceMeasurementProps) {\n const overlay = useAnalysisOverlay();\n const ref = useRef<DistanceMeasurementRef | undefined>(undefined);\n if (!ref.current) {\n ref.current = new ExpoArcgisModule.DistanceMeasurementRef({ startLocation, endLocation });\n }\n\n const geometry = { startLocation, endLocation };\n const prev = usePrevious(geometry);\n\n useEffect(() => {\n const analysis = ref.current!;\n overlay.addAnalysis(analysis);\n return () => {\n detachQuietly(() => overlay.removeAnalysis(analysis));\n analysis.release();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useUpdateEffect(() => {\n const diffs = getPropsDiffs(prev, geometry);\n if (diffs.length === 0) return;\n const changed: Record<string, unknown> = {};\n diffs.forEach((key) => {\n changed[key] = geometry[key];\n });\n ref.current?.applyProps(changed);\n }, [startLocation, endLocation]);\n\n useEffect(() => {\n if (!onMeasurementChange) return;\n const subscription = ref.current!.addListener('onMeasurementChange', (measurement) =>\n onMeasurementChange(measurement)\n );\n return () => subscription.remove();\n }, [onMeasurementChange]);\n\n return null;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamicEntityLayer.d.ts","sourceRoot":"","sources":["../src/DynamicEntityLayer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EACnB,wBAAwB,EAEzB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"DynamicEntityLayer.d.ts","sourceRoot":"","sources":["../src/DynamicEntityLayer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EACnB,wBAAwB,EAEzB,MAAM,oBAAoB,CAAC;AAQ5B;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB;;;;;mBAwD42qC,CAAC;gBAAkB,CAAC;;;;;;;4DAD95qC,CAAC"}
|
|
@@ -4,6 +4,7 @@ import { useGeoModel } from './contexts';
|
|
|
4
4
|
import { usePrevious } from './hooks/usePrevious';
|
|
5
5
|
import { useUpdateEffect } from './hooks/useUpdateEffect';
|
|
6
6
|
import { getPropsDiffs } from './utils/getPropsDiffs';
|
|
7
|
+
import { detachQuietly } from './utils/detachQuietly';
|
|
7
8
|
/**
|
|
8
9
|
* Declarative real-time `DynamicEntityLayer`. Adds itself to the nearest `<Map>` / `<Scene>`, shows
|
|
9
10
|
* live moving entities from a `streamServiceUrl` (or a `customSource` you feed via the ref), reports
|
|
@@ -21,7 +22,7 @@ export const DynamicEntityLayer = forwardRef(function DynamicEntityLayer({ onCon
|
|
|
21
22
|
const layer = ref.current;
|
|
22
23
|
model.addLayer(layer);
|
|
23
24
|
return () => {
|
|
24
|
-
model.removeLayer(layer);
|
|
25
|
+
detachQuietly(() => model.removeLayer(layer));
|
|
25
26
|
layer.release();
|
|
26
27
|
};
|
|
27
28
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamicEntityLayer.js","sourceRoot":"","sources":["../src/DynamicEntityLayer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAQ3E,OAAO,gBAAgD,MAAM,oBAAoB,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAC1C,SAAS,kBAAkB,CAAC,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,GAAG,UAAU,EAAE,EAAE,MAAM;IACpG,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAG,MAAM,CAAoC,SAAS,CAAC,CAAC;IACjE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,GAAG,CAAC,OAAO,GAAG,IAAI,gBAAgB,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IAErC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,GAAG,CAAC,OAAQ,CAAC;QAC3B,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACtB,OAAO,GAAG,EAAE;YACV,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"DynamicEntityLayer.js","sourceRoot":"","sources":["../src/DynamicEntityLayer.tsx"],"names":[],"mappings":"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","sourcesContent":["import { forwardRef, useEffect, useImperativeHandle, useRef } from 'react';\n\nimport type {\n ConnectionStatus,\n DynamicEntityChange,\n DynamicEntityLayerHandle,\n DynamicEntityLayerProps,\n} from './ExpoArcgis.types';\nimport ExpoArcgisModule, { type DynamicEntityLayerRef } from './ExpoArcgisModule';\nimport { useGeoModel } from './contexts';\nimport { usePrevious } from './hooks/usePrevious';\nimport { useUpdateEffect } from './hooks/useUpdateEffect';\nimport { getPropsDiffs } from './utils/getPropsDiffs';\nimport { detachQuietly } from './utils/detachQuietly';\n\n/**\n * Declarative real-time `DynamicEntityLayer`. Adds itself to the nearest `<Map>` / `<Scene>`, shows\n * live moving entities from a `streamServiceUrl` (or a `customSource` you feed via the ref), reports\n * connection state through `onConnectionStatusChange`, and exposes `queryDynamicEntities` /\n * `queryObservations` / `pushObservation` through a `ref`.\n */\nexport const DynamicEntityLayer = forwardRef<DynamicEntityLayerHandle, DynamicEntityLayerProps>(\n function DynamicEntityLayer({ onConnectionStatusChange, onDynamicEntityChange, ...layerProps }, handle) {\n const model = useGeoModel();\n const ref = useRef<DynamicEntityLayerRef | undefined>(undefined);\n if (!ref.current) {\n ref.current = new ExpoArcgisModule.DynamicEntityLayerRef(layerProps);\n }\n\n const prev = usePrevious(layerProps);\n\n useEffect(() => {\n const layer = ref.current!;\n model.addLayer(layer);\n return () => {\n detachQuietly(() => model.removeLayer(layer));\n layer.release();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // The connection-status callback is wired as an event listener (functions can't cross as props).\n useEffect(() => {\n if (!onConnectionStatusChange) return;\n const sub = ref.current!.addListener(\n 'onConnectionStatusChange',\n (event: { status: ConnectionStatus }) => onConnectionStatusChange(event.status)\n );\n return () => sub.remove();\n }, [onConnectionStatusChange]);\n\n // The entity-change callback is wired as an event listener.\n useEffect(() => {\n if (!onDynamicEntityChange) return;\n const sub = ref.current!.addListener(\n 'onDynamicEntityChange',\n (event: DynamicEntityChange) => onDynamicEntityChange({ nativeEvent: event })\n );\n return () => sub.remove();\n }, [onDynamicEntityChange]);\n\n useUpdateEffect(() => {\n const diffs = getPropsDiffs(prev, layerProps);\n if (diffs.length === 0) return;\n const changed: Record<string, unknown> = {};\n diffs.forEach((key) => {\n changed[key as string] = (layerProps as Record<string, unknown>)[key as string];\n });\n ref.current?.applyProps(changed);\n }, [layerProps]);\n\n // The native ref exposes queryDynamicEntities / queryObservations / pushObservation — hand it over directly.\n useImperativeHandle(handle, () => ref.current!, []);\n\n return null;\n }\n);\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeatureLayer.d.ts","sourceRoot":"","sources":["../src/FeatureLayer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAqB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"FeatureLayer.d.ts","sourceRoot":"","sources":["../src/FeatureLayer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAqB,MAAM,oBAAoB,CAAC;AAShF;;;GAGG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;YA2Co9Q,CAAC;;;gBAAimB,CAAC;gBAAkB,CAAC;;;;sDADlmS,CAAC"}
|
package/build/FeatureLayer.js
CHANGED
|
@@ -4,6 +4,7 @@ import { useGeoModel } from './contexts';
|
|
|
4
4
|
import { usePrevious } from './hooks/usePrevious';
|
|
5
5
|
import { useUpdateEffect } from './hooks/useUpdateEffect';
|
|
6
6
|
import { getPropsDiffs } from './utils/getPropsDiffs';
|
|
7
|
+
import { detachQuietly } from './utils/detachQuietly';
|
|
7
8
|
/**
|
|
8
9
|
* Declarative operational `FeatureLayer`. Adds itself to the nearest `<Map>` / `<Scene>`, and
|
|
9
10
|
* exposes async queries through a `ref` — `queryFeatures` / `queryFeatureCount` / `queryExtent`.
|
|
@@ -24,7 +25,7 @@ export const FeatureLayer = forwardRef(function FeatureLayer(props, handle) {
|
|
|
24
25
|
const layer = ref.current;
|
|
25
26
|
model.addLayer(layer);
|
|
26
27
|
return () => {
|
|
27
|
-
model.removeLayer(layer);
|
|
28
|
+
detachQuietly(() => model.removeLayer(layer));
|
|
28
29
|
if (!isExternal.current)
|
|
29
30
|
layer.release();
|
|
30
31
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeatureLayer.js","sourceRoot":"","sources":["../src/FeatureLayer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAG3E,OAAO,sBAAsB,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CACpC,SAAS,YAAY,CAAC,KAAK,EAAE,MAAM;IACjC,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAG,MAAM,CAA8B,SAAS,CAAC,CAAC;IAC3D,gGAAgG;IAChG,sFAAsF;IACtF,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;IAC/C,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,GAAG,CAAC,OAAO;YACR,KAAK,CAAC,KAAoC;gBAC3C,IAAI,sBAAsB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAEhC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,GAAG,CAAC,OAAQ,CAAC;QAC3B,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACtB,OAAO,GAAG,EAAE;YACV,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"FeatureLayer.js","sourceRoot":"","sources":["../src/FeatureLayer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAG3E,OAAO,sBAAsB,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CACpC,SAAS,YAAY,CAAC,KAAK,EAAE,MAAM;IACjC,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAG,MAAM,CAA8B,SAAS,CAAC,CAAC;IAC3D,gGAAgG;IAChG,sFAAsF;IACtF,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;IAC/C,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,GAAG,CAAC,OAAO;YACR,KAAK,CAAC,KAAoC;gBAC3C,IAAI,sBAAsB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAEhC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,GAAG,CAAC,OAAQ,CAAC;QAC3B,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACtB,OAAO,GAAG,EAAE;YACV,aAAa,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,UAAU,CAAC,OAAO;gBAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QAC3C,CAAC,CAAC;QACF,uDAAuD;IACzD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACzC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC/B,MAAM,OAAO,GAA4B,EAAE,CAAC;QAC5C,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACpB,6EAA6E;YAC7E,IAAI,GAAG,KAAK,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACxE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,2FAA2F;IAC3F,yFAAyF;IACzF,mBAAmB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,OAAQ,EAAE,EAAE,CAAC,CAAC;IAEpD,OAAO,IAAI,CAAC;AACd,CAAC,CACF,CAAC","sourcesContent":["import { forwardRef, useEffect, useImperativeHandle, useRef } from 'react';\n\nimport type { FeatureLayerHandle, FeatureLayerProps } from './ExpoArcgis.types';\nimport ExpoArcgisExtrasModule from './ExpoArcgisExtrasModule';\nimport type { FeatureLayerRef } from './ExpoArcgisModule';\nimport { useGeoModel } from './contexts';\nimport { usePrevious } from './hooks/usePrevious';\nimport { useUpdateEffect } from './hooks/useUpdateEffect';\nimport { getPropsDiffs } from './utils/getPropsDiffs';\nimport { detachQuietly } from './utils/detachQuietly';\n\n/**\n * Declarative operational `FeatureLayer`. Adds itself to the nearest `<Map>` / `<Scene>`, and\n * exposes async queries through a `ref` — `queryFeatures` / `queryFeatureCount` / `queryExtent`.\n */\nexport const FeatureLayer = forwardRef<FeatureLayerHandle, FeatureLayerProps>(\n function FeatureLayer(props, handle) {\n const model = useGeoModel();\n const ref = useRef<FeatureLayerRef | undefined>(undefined);\n // An externally-provided `layer` (e.g. from a geodatabase/version) is owned by its producer, so\n // it's used as-is and never released here; otherwise build one from `url` / `source`.\n const isExternal = useRef(props.layer != null);\n if (!ref.current) {\n ref.current =\n (props.layer as unknown as FeatureLayerRef) ??\n new ExpoArcgisExtrasModule.FeatureLayerRef(props);\n }\n\n const prev = usePrevious(props);\n\n useEffect(() => {\n const layer = ref.current!;\n model.addLayer(layer);\n return () => {\n detachQuietly(() => model.removeLayer(layer));\n if (!isExternal.current) layer.release();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useUpdateEffect(() => {\n const diffs = getPropsDiffs(prev, props);\n if (diffs.length === 0) return;\n const changed: Record<string, unknown> = {};\n diffs.forEach((key) => {\n // `layer` is the ref itself (construction-only), not a native prop to apply.\n if (key !== 'layer') changed[key] = props[key];\n });\n if (Object.keys(changed).length > 0) ref.current?.applyProps(changed);\n }, [props]);\n\n // The native ref already exposes the query methods (typed to match FeatureLayerHandle), so\n // hand it over directly — it's created synchronously in render, so it's always set here.\n useImperativeHandle(handle, () => ref.current!, []);\n\n return null;\n }\n);\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeometryEditor.d.ts","sourceRoot":"","sources":["../src/GeometryEditor.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"GeometryEditor.d.ts","sourceRoot":"","sources":["../src/GeometryEditor.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAKpF;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,sHAqD1B,CAAC"}
|
package/build/GeometryEditor.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { forwardRef, useEffect, useImperativeHandle, useRef } from 'react';
|
|
2
2
|
import ExpoArcgisModule from './ExpoArcgisModule';
|
|
3
3
|
import { useGeoView } from './contexts';
|
|
4
|
+
import { detachQuietly } from './utils/detachQuietly';
|
|
4
5
|
/**
|
|
5
6
|
* Interactive geometry editor. Mirrors the native `GeometryEditor` — place it inside a
|
|
6
7
|
* `<MapView>` to let the user sketch a `type` geometry. Reports edits via `onGeometryChange`
|
|
@@ -20,7 +21,7 @@ export const GeometryEditor = forwardRef(function GeometryEditor({ type, active
|
|
|
20
21
|
const editor = ref.current;
|
|
21
22
|
view.setGeometryEditor(editor);
|
|
22
23
|
return () => {
|
|
23
|
-
view.setGeometryEditor(null);
|
|
24
|
+
detachQuietly(() => view.setGeometryEditor(null));
|
|
24
25
|
editor.release();
|
|
25
26
|
};
|
|
26
27
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeometryEditor.js","sourceRoot":"","sources":["../src/GeometryEditor.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAG3E,OAAO,gBAA4C,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"GeometryEditor.js","sourceRoot":"","sources":["../src/GeometryEditor.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAG3E,OAAO,gBAA4C,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CACtC,SAAS,cAAc,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,MAAM;IAC7E,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,MAAM,GAAG,GAAG,MAAM,CAAgC,SAAS,CAAC,CAAC;IAC7D,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,GAAG,CAAC,OAAO,GAAG,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,CAAC;IACzD,CAAC;IAED,6DAA6D;IAC7D,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,MAAM,GAAG,GAAG,CAAC,OAAQ,CAAC;QAC5B,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC/B,OAAO,GAAG,EAAE;YACV,aAAa,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;YAClD,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC,CAAC;QACF,uDAAuD;IACzD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,kDAAkD;IAClD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,gBAAgB;YAAE,OAAO;QAC9B,MAAM,YAAY,GAAG,GAAG,CAAC,OAAQ,CAAC,WAAW,CAAC,kBAAkB,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;YACjF,gBAAgB,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;IACrC,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEvB,yEAAyE;IACzE,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,MAAM,GAAG,GAAG,CAAC,OAAQ,CAAC;QAC5B,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,IAAI;gBAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC/B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAEzB,mBAAmB,CACjB,MAAM,EACN,GAAG,EAAE,CAAC,CAAC;QACL,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE;QAC/B,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE;QAC/B,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE;QACzC,qBAAqB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,qBAAqB,EAAE;QACjE,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI;KACxC,CAAC,EACF,EAAE,CACH,CAAC;IAEF,OAAO,IAAI,CAAC;AACd,CAAC,CACF,CAAC","sourcesContent":["import { forwardRef, useEffect, useImperativeHandle, useRef } from 'react';\n\nimport type { GeometryEditorHandle, GeometryEditorProps } from './ExpoArcgis.types';\nimport ExpoArcgisModule, { type GeometryEditorRef } from './ExpoArcgisModule';\nimport { useGeoView } from './contexts';\nimport { detachQuietly } from './utils/detachQuietly';\n\n/**\n * Interactive geometry editor. Mirrors the native `GeometryEditor` — place it inside a\n * `<MapView>` to let the user sketch a `type` geometry. Reports edits via `onGeometryChange`\n * and exposes undo / redo / clear / stop through a `ref`.\n *\n * The native SDK binds the editor to 2D map views only, so `<GeometryEditor>` has no effect\n * inside a `<SceneView>`.\n */\nexport const GeometryEditor = forwardRef<GeometryEditorHandle, GeometryEditorProps>(\n function GeometryEditor({ type, active = true, tool, onGeometryChange }, handle) {\n const view = useGeoView();\n const ref = useRef<GeometryEditorRef | undefined>(undefined);\n if (!ref.current) {\n ref.current = new ExpoArcgisModule.GeometryEditorRef();\n }\n\n // Bind the editor to the nearest <MapView> for its lifetime.\n useEffect(() => {\n const editor = ref.current!;\n view.setGeometryEditor(editor);\n return () => {\n detachQuietly(() => view.setGeometryEditor(null));\n editor.release();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Forward geometry-change events to the callback.\n useEffect(() => {\n if (!onGeometryChange) return;\n const subscription = ref.current!.addListener('onGeometryChange', ({ geometry }) => {\n onGeometryChange(geometry ?? null);\n });\n return () => subscription.remove();\n }, [onGeometryChange]);\n\n // Start / restart / stop editing as `active`, `type`, or `tool` changes.\n useEffect(() => {\n const editor = ref.current!;\n if (active) {\n if (tool) editor.setTool(tool);\n editor.start(type);\n } else {\n editor.stop();\n }\n }, [active, type, tool]);\n\n useImperativeHandle(\n handle,\n () => ({\n undo: () => ref.current?.undo(),\n redo: () => ref.current?.redo(),\n clear: () => ref.current?.clearGeometry(),\n deleteSelectedElement: () => ref.current?.deleteSelectedElement(),\n stop: () => ref.current?.stop() ?? null,\n }),\n []\n );\n\n return null;\n }\n);\n"]}
|
package/build/Graphic.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Graphic.d.ts","sourceRoot":"","sources":["../src/Graphic.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAyB,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"Graphic.d.ts","sourceRoot":"","sources":["../src/Graphic.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAyB,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAOvE;;;;GAIG;AACH,eAAO,MAAM,OAAO,qGA+BlB,CAAC"}
|
package/build/Graphic.js
CHANGED
|
@@ -4,6 +4,7 @@ import { useGraphicsOverlay } from './contexts';
|
|
|
4
4
|
import { usePrevious } from './hooks/usePrevious';
|
|
5
5
|
import { useUpdateEffect } from './hooks/useUpdateEffect';
|
|
6
6
|
import { getPropsDiffs } from './utils/getPropsDiffs';
|
|
7
|
+
import { detachQuietly } from './utils/detachQuietly';
|
|
7
8
|
/**
|
|
8
9
|
* Declarative point graphic. Draws itself on the nearest `<GraphicsOverlay>`. Forwards its native
|
|
9
10
|
* `GraphicRef` so the graphic can be handed to a GeoElement-anchored analysis — e.g.
|
|
@@ -21,7 +22,7 @@ export const Graphic = forwardRef(function Graphic(props, fwdRef) {
|
|
|
21
22
|
const graphic = ref.current;
|
|
22
23
|
overlay.addGraphic(graphic);
|
|
23
24
|
return () => {
|
|
24
|
-
overlay.removeGraphic(graphic);
|
|
25
|
+
detachQuietly(() => overlay.removeGraphic(graphic));
|
|
25
26
|
graphic.release();
|
|
26
27
|
};
|
|
27
28
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
package/build/Graphic.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Graphic.js","sourceRoot":"","sources":["../src/Graphic.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAG3E,OAAO,gBAAqC,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;GAIG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,UAAU,CAA2B,SAAS,OAAO,CAAC,KAAK,EAAE,MAAM;IACxF,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;IACrC,MAAM,GAAG,GAAG,MAAM,CAAyB,SAAS,CAAC,CAAC;IACtD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,GAAG,CAAC,OAAO,GAAG,IAAI,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC;IACD,mBAAmB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,OAAQ,EAAE,EAAE,CAAC,CAAC;IAEpD,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAEhC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,OAAO,GAAG,GAAG,CAAC,OAAQ,CAAC;QAC7B,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC5B,OAAO,GAAG,EAAE;YACV,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"Graphic.js","sourceRoot":"","sources":["../src/Graphic.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAG3E,OAAO,gBAAqC,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;GAIG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,UAAU,CAA2B,SAAS,OAAO,CAAC,KAAK,EAAE,MAAM;IACxF,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;IACrC,MAAM,GAAG,GAAG,MAAM,CAAyB,SAAS,CAAC,CAAC;IACtD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,GAAG,CAAC,OAAO,GAAG,IAAI,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACvD,CAAC;IACD,mBAAmB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,OAAQ,EAAE,EAAE,CAAC,CAAC;IAEpD,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAEhC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,OAAO,GAAG,GAAG,CAAC,OAAQ,CAAC;QAC7B,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC5B,OAAO,GAAG,EAAE;YACV,aAAa,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,CAAC,CAAC;QACF,uDAAuD;IACzD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACzC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC/B,MAAM,OAAO,GAA4B,EAAE,CAAC;QAC5C,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACpB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,OAAO,IAAI,CAAC;AACd,CAAC,CAAC,CAAC","sourcesContent":["import { forwardRef, useEffect, useImperativeHandle, useRef } from 'react';\n\nimport type { GraphicProps } from './ExpoArcgis.types';\nimport ExpoArcgisModule, { type GraphicRef } from './ExpoArcgisModule';\nimport { useGraphicsOverlay } from './contexts';\nimport { usePrevious } from './hooks/usePrevious';\nimport { useUpdateEffect } from './hooks/useUpdateEffect';\nimport { getPropsDiffs } from './utils/getPropsDiffs';\nimport { detachQuietly } from './utils/detachQuietly';\n\n/**\n * Declarative point graphic. Draws itself on the nearest `<GraphicsOverlay>`. Forwards its native\n * `GraphicRef` so the graphic can be handed to a GeoElement-anchored analysis — e.g.\n * `<Viewshed graphic={ref}>` / `<LineOfSight observerGraphic={ref}>`.\n */\nexport const Graphic = forwardRef<GraphicRef, GraphicProps>(function Graphic(props, fwdRef) {\n const overlay = useGraphicsOverlay();\n const ref = useRef<GraphicRef | undefined>(undefined);\n if (!ref.current) {\n ref.current = new ExpoArcgisModule.GraphicRef(props);\n }\n useImperativeHandle(fwdRef, () => ref.current!, []);\n\n const prev = usePrevious(props);\n\n useEffect(() => {\n const graphic = ref.current!;\n overlay.addGraphic(graphic);\n return () => {\n detachQuietly(() => overlay.removeGraphic(graphic));\n graphic.release();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useUpdateEffect(() => {\n const diffs = getPropsDiffs(prev, props);\n if (diffs.length === 0) return;\n const changed: Record<string, unknown> = {};\n diffs.forEach((key) => {\n changed[key] = props[key];\n });\n ref.current?.applyProps(changed);\n }, [props]);\n\n return null;\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphicsOverlay.d.ts","sourceRoot":"","sources":["../src/GraphicsOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAElE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"GraphicsOverlay.d.ts","sourceRoot":"","sources":["../src/GraphicsOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAElE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAKnD,MAAM,MAAM,oBAAoB,GAAG;IACjC,sEAAsE;IACtE,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,iBAAiB,CAAC,oBAAoB,CAAC,+BAyB9F"}
|
package/build/GraphicsOverlay.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useEffect, useRef } from 'react';
|
|
2
2
|
import ExpoArcgisModule from './ExpoArcgisModule';
|
|
3
3
|
import { GraphicsOverlayContext, useGeoView } from './contexts';
|
|
4
|
+
import { detachQuietly } from './utils/detachQuietly';
|
|
4
5
|
/**
|
|
5
6
|
* Declarative graphics overlay. Mirrors the native `GraphicsOverlay` — a view can hold several.
|
|
6
7
|
* Registers itself with the nearest `<MapView>` / `<SceneView>` and hosts `<Graphic>` children.
|
|
@@ -15,7 +16,7 @@ export function GraphicsOverlay({ renderer, children }) {
|
|
|
15
16
|
const overlay = ref.current;
|
|
16
17
|
view.add(overlay);
|
|
17
18
|
return () => {
|
|
18
|
-
view.remove(overlay);
|
|
19
|
+
detachQuietly(() => view.remove(overlay));
|
|
19
20
|
overlay.release();
|
|
20
21
|
};
|
|
21
22
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphicsOverlay.js","sourceRoot":"","sources":["../src/GraphicsOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAA0B,MAAM,OAAO,CAAC;AAGlE,OAAO,gBAA6C,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"GraphicsOverlay.js","sourceRoot":"","sources":["../src/GraphicsOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAA0B,MAAM,OAAO,CAAC;AAGlE,OAAO,gBAA6C,MAAM,oBAAoB,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAOtD;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAA2C;IAC7F,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,MAAM,GAAG,GAAG,MAAM,CAAiC,SAAS,CAAC,CAAC;IAC9D,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,GAAG,CAAC,OAAO,GAAG,IAAI,gBAAgB,CAAC,kBAAkB,EAAE,CAAC;IAC1D,CAAC;IAED,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,OAAO,GAAG,GAAG,CAAC,OAAQ,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClB,OAAO,GAAG,EAAE;YACV,aAAa,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YAC1C,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,CAAC,CAAC;QACF,uDAAuD;IACzD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,sFAAsF;IACtF,SAAS,CAAC,GAAG,EAAE;QACb,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC;IAC7C,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,OAAO,CACL,CAAC,sBAAsB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,sBAAsB,CAAC,QAAQ,CAAC,CAClG,CAAC;AACJ,CAAC","sourcesContent":["import { useEffect, useRef, type PropsWithChildren } from 'react';\n\nimport type { Renderer } from './ExpoArcgis.types';\nimport ExpoArcgisModule, { type GraphicsOverlayRef } from './ExpoArcgisModule';\nimport { GraphicsOverlayContext, useGeoView } from './contexts';\nimport { detachQuietly } from './utils/detachQuietly';\n\nexport type GraphicsOverlayProps = {\n /** Renderer applied to graphics that set no `symbol` of their own. */\n renderer?: Renderer;\n};\n\n/**\n * Declarative graphics overlay. Mirrors the native `GraphicsOverlay` — a view can hold several.\n * Registers itself with the nearest `<MapView>` / `<SceneView>` and hosts `<Graphic>` children.\n */\nexport function GraphicsOverlay({ renderer, children }: PropsWithChildren<GraphicsOverlayProps>) {\n const view = useGeoView();\n const ref = useRef<GraphicsOverlayRef | undefined>(undefined);\n if (!ref.current) {\n ref.current = new ExpoArcgisModule.GraphicsOverlayRef();\n }\n\n useEffect(() => {\n const overlay = ref.current!;\n view.add(overlay);\n return () => {\n detachQuietly(() => view.remove(overlay));\n overlay.release();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Apply the renderer on mount and whenever it changes (pass a stable/memoized value).\n useEffect(() => {\n ref.current?.setRenderer(renderer ?? null);\n }, [renderer]);\n\n return (\n <GraphicsOverlayContext.Provider value={ref.current}>{children}</GraphicsOverlayContext.Provider>\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupLayer.d.ts","sourceRoot":"","sources":["../src/GroupLayer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAElE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"GroupLayer.d.ts","sourceRoot":"","sources":["../src/GroupLayer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAElE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AASrD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,CAAC,UAAU,CAAC,+BAoC/E"}
|
package/build/GroupLayer.js
CHANGED
|
@@ -4,6 +4,7 @@ import { GeoModelContext, useGeoModel } from './contexts';
|
|
|
4
4
|
import { usePrevious } from './hooks/usePrevious';
|
|
5
5
|
import { useUpdateEffect } from './hooks/useUpdateEffect';
|
|
6
6
|
import { getPropsDiffs } from './utils/getPropsDiffs';
|
|
7
|
+
import { detachQuietly } from './utils/detachQuietly';
|
|
7
8
|
/**
|
|
8
9
|
* Declarative `GroupLayer` — a container that groups its child layers as a single unit on the
|
|
9
10
|
* nearest `<Map>` / `<Scene>`. Child layers (`<FeatureLayer>`, `<TileLayer>`, …, even nested
|
|
@@ -20,7 +21,7 @@ export function GroupLayer({ children, ...props }) {
|
|
|
20
21
|
const group = ref.current;
|
|
21
22
|
model.addLayer(group);
|
|
22
23
|
return () => {
|
|
23
|
-
model.removeLayer(group);
|
|
24
|
+
detachQuietly(() => model.removeLayer(group));
|
|
24
25
|
group.release();
|
|
25
26
|
};
|
|
26
27
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
package/build/GroupLayer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupLayer.js","sourceRoot":"","sources":["../src/GroupLayer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAA0B,MAAM,OAAO,CAAC;AAGlE,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAElE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAiC;IAC9E,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAG,MAAM,CAA4B,SAAS,CAAC,CAAC;IACzD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,GAAG,CAAC,OAAO,GAAG,IAAI,wBAAwB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAEhC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,GAAG,CAAC,OAAQ,CAAC;QAC3B,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACtB,OAAO,GAAG,EAAE;YACV,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"GroupLayer.js","sourceRoot":"","sources":["../src/GroupLayer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAA0B,MAAM,OAAO,CAAC;AAGlE,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAElE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAiC;IAC9E,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAG,MAAM,CAA4B,SAAS,CAAC,CAAC;IACzD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,GAAG,CAAC,OAAO,GAAG,IAAI,wBAAwB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAClE,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAEhC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,GAAG,CAAC,OAAQ,CAAC;QAC3B,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACtB,OAAO,GAAG,EAAE;YACV,aAAa,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9C,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,CAAC,CAAC;QACF,uDAAuD;IACzD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACzC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC/B,MAAM,OAAO,GAA4B,EAAE,CAAC;QAC5C,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACpB,OAAO,CAAC,GAAa,CAAC,GAAI,KAAiC,CAAC,GAAa,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,+FAA+F;IAC/F,2CAA2C;IAC3C,OAAO,CACL,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,OAAiC,CAAC,CACrE;MAAA,CAAC,QAAQ,CACX;IAAA,EAAE,eAAe,CAAC,QAAQ,CAAC,CAC5B,CAAC;AACJ,CAAC","sourcesContent":["import { useEffect, useRef, type PropsWithChildren } from 'react';\n\nimport type { LayerProps } from './ExpoArcgis.types';\nimport ExpoArcgisGeometryModule from './ExpoArcgisGeometryModule';\nimport type { GeoModelRef, GroupLayerRef } from './ExpoArcgisModule';\nimport { GeoModelContext, useGeoModel } from './contexts';\nimport { usePrevious } from './hooks/usePrevious';\nimport { useUpdateEffect } from './hooks/useUpdateEffect';\nimport { getPropsDiffs } from './utils/getPropsDiffs';\nimport { detachQuietly } from './utils/detachQuietly';\n\n/**\n * Declarative `GroupLayer` — a container that groups its child layers as a single unit on the\n * nearest `<Map>` / `<Scene>`. Child layers (`<FeatureLayer>`, `<TileLayer>`, …, even nested\n * `<GroupLayer>`s) declared inside add themselves to the group instead of the map.\n */\nexport function GroupLayer({ children, ...props }: PropsWithChildren<LayerProps>) {\n const model = useGeoModel();\n const ref = useRef<GroupLayerRef | undefined>(undefined);\n if (!ref.current) {\n ref.current = new ExpoArcgisGeometryModule.GroupLayerRef(props);\n }\n\n const prev = usePrevious(props);\n\n useEffect(() => {\n const group = ref.current!;\n model.addLayer(group);\n return () => {\n detachQuietly(() => model.removeLayer(group));\n group.release();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useUpdateEffect(() => {\n const diffs = getPropsDiffs(prev, props);\n if (diffs.length === 0) return;\n const changed: Record<string, unknown> = {};\n diffs.forEach((key) => {\n changed[key as string] = (props as Record<string, unknown>)[key as string];\n });\n ref.current?.applyProps(changed);\n }, [props]);\n\n // The group is itself a layer host — children consume it through the same GeoModel context and\n // attach to the group rather than the map.\n return (\n <GeoModelContext.Provider value={ref.current as unknown as GeoModelRef}>\n {children}\n </GeoModelContext.Provider>\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageOverlay.d.ts","sourceRoot":"","sources":["../src/ImageOverlay.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"ImageOverlay.d.ts","sourceRoot":"","sources":["../src/ImageOverlay.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAM5D;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,iBAAiB,QAuB7E"}
|
package/build/ImageOverlay.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { useEffect, useRef } from 'react';
|
|
2
2
|
import ExtrasModule from './ExpoArcgisExtrasModule';
|
|
3
3
|
import { useGeoView } from './contexts';
|
|
4
|
+
import { detachQuietly } from './utils/detachQuietly';
|
|
4
5
|
/**
|
|
5
6
|
* Declarative image overlay. Displays a single georeferenced image (a local file) at a map extent on
|
|
6
7
|
* the nearest `<MapView>`. Update `imagePath` to swap the displayed frame — e.g. to animate a
|
|
@@ -16,7 +17,7 @@ export function ImageOverlay({ imagePath, extent, opacity }) {
|
|
|
16
17
|
const overlay = ref.current;
|
|
17
18
|
view.addImageOverlay(overlay);
|
|
18
19
|
return () => {
|
|
19
|
-
view.removeImageOverlay(overlay);
|
|
20
|
+
detachQuietly(() => view.removeImageOverlay(overlay));
|
|
20
21
|
overlay.release();
|
|
21
22
|
};
|
|
22
23
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageOverlay.js","sourceRoot":"","sources":["../src/ImageOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,YAAY,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"ImageOverlay.js","sourceRoot":"","sources":["../src/ImageOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,YAAY,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAqB;IAC5E,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,MAAM,GAAG,GAAG,MAAM,CAA8B,SAAS,CAAC,CAAC;IAC3D,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,GAAG,CAAC,OAAO,GAAG,IAAI,YAAY,CAAC,eAAe,EAAE,CAAC;IACnD,CAAC;IAED,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,OAAO,GAAG,GAAG,CAAC,OAAQ,CAAC;QAC7B,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC9B,OAAO,GAAG,EAAE;YACV,aAAa,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;YACtD,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,CAAC,CAAC;QACF,uDAAuD;IACzD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,qEAAqE;IACrE,SAAS,CAAC,GAAG,EAAE;QACb,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAEjC,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport type { ImageOverlayProps } from './ExpoArcgis.types';\nimport ExtrasModule from './ExpoArcgisExtrasModule';\nimport type { ImageOverlayRef } from './ExpoArcgisModule';\nimport { useGeoView } from './contexts';\nimport { detachQuietly } from './utils/detachQuietly';\n\n/**\n * Declarative image overlay. Displays a single georeferenced image (a local file) at a map extent on\n * the nearest `<MapView>`. Update `imagePath` to swap the displayed frame — e.g. to animate a\n * sequence of georeferenced images. No-op inside a `<SceneView>`.\n */\nexport function ImageOverlay({ imagePath, extent, opacity }: ImageOverlayProps) {\n const view = useGeoView();\n const ref = useRef<ImageOverlayRef | undefined>(undefined);\n if (!ref.current) {\n ref.current = new ExtrasModule.ImageOverlayRef();\n }\n\n useEffect(() => {\n const overlay = ref.current!;\n view.addImageOverlay(overlay);\n return () => {\n detachQuietly(() => view.removeImageOverlay(overlay));\n overlay.release();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Re-apply the frame whenever the image, extent, or opacity changes.\n useEffect(() => {\n ref.current?.setFrame(imagePath, extent, opacity);\n }, [imagePath, extent, opacity]);\n\n return null;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LineOfSight.d.ts","sourceRoot":"","sources":["../src/LineOfSight.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACvF,OAAyB,EAEvB,KAAK,UAAU,EAEhB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"LineOfSight.d.ts","sourceRoot":"","sources":["../src/LineOfSight.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACvF,OAAyB,EAEvB,KAAK,UAAU,EAEhB,MAAM,oBAAoB,CAAC;AAO5B;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CACzB,KAAK,EACD,gBAAgB,GAChB,CAAC,0BAA0B,GAAG;IAAE,eAAe,EAAE,UAAU,CAAC;IAAC,aAAa,EAAE,UAAU,CAAA;CAAE,CAAC,QA6D9F"}
|
package/build/LineOfSight.js
CHANGED
|
@@ -4,6 +4,7 @@ import { useAnalysisOverlay } from './contexts';
|
|
|
4
4
|
import { usePrevious } from './hooks/usePrevious';
|
|
5
5
|
import { useUpdateEffect } from './hooks/useUpdateEffect';
|
|
6
6
|
import { getPropsDiffs } from './utils/getPropsDiffs';
|
|
7
|
+
import { detachQuietly } from './utils/detachQuietly';
|
|
7
8
|
/**
|
|
8
9
|
* Declarative exploratory line of sight between an observer and a target.
|
|
9
10
|
*
|
|
@@ -40,7 +41,7 @@ export function LineOfSight(props) {
|
|
|
40
41
|
const analysis = analysisRef.current;
|
|
41
42
|
overlay.addAnalysis(analysis);
|
|
42
43
|
return () => {
|
|
43
|
-
overlay.removeAnalysis(analysis);
|
|
44
|
+
detachQuietly(() => overlay.removeAnalysis(analysis));
|
|
44
45
|
analysis.release();
|
|
45
46
|
};
|
|
46
47
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
package/build/LineOfSight.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LineOfSight.js","sourceRoot":"","sources":["../src/LineOfSight.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,gBAIN,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,WAAW,CACzB,KAE6F;IAE7F,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;IACrC,MAAM,WAAW,GAAG,MAAM,CAAwD,SAAS,CAAC,CAAC;IAE7F,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACzB,IAAI,iBAAiB,IAAI,KAAK,EAAE,CAAC;YAC/B,WAAW,CAAC,OAAO,GAAG,IAAI,gBAAgB,CAAC,wBAAwB,CACjE,KAAK,CAAC,eAAe,EACrB,KAAK,CAAC,aAAa,CACpB,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,OAAO,GAAG,IAAI,gBAAgB,CAAC,cAAc,CAAC;gBACxD,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,eAAe,GAAG,CAAC,CAAC,iBAAiB,IAAI,KAAK,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,eAAe;QAC9B,CAAC,CAAC,EAAE,QAAQ,EAAG,KAA0B,CAAC,QAAQ,EAAE,MAAM,EAAG,KAA0B,CAAC,MAAM,EAAE;QAChG,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEnC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAQ,CAAC;QACtC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC9B,OAAO,GAAG,EAAE;YACV,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"LineOfSight.js","sourceRoot":"","sources":["../src/LineOfSight.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport type { GeoElementLineOfSightProps, LineOfSightProps } from './ExpoArcgis.types';\nimport ExpoArcgisModule, {\n type GeoElementLineOfSightRef,\n type GraphicRef,\n type LineOfSightRef,\n} from './ExpoArcgisModule';\nimport { useAnalysisOverlay } from './contexts';\nimport { usePrevious } from './hooks/usePrevious';\nimport { useUpdateEffect } from './hooks/useUpdateEffect';\nimport { getPropsDiffs } from './utils/getPropsDiffs';\nimport { detachQuietly } from './utils/detachQuietly';\n\n/**\n * Declarative exploratory line of sight between an observer and a target.\n *\n * Two modes:\n * - **Location-based** (`LineOfSightProps`): fixed observer and target points — mirrors the native\n * `ExploratoryLocationLineOfSight`.\n * - **GeoElement-anchored** (`GeoElementLineOfSightProps + observerGraphic + targetGraphic`): both\n * endpoints follow `<Graphic>`s as they move — mirrors the native\n * `ExploratoryGeoElementLineOfSight`.\n *\n * Both modes draw on the nearest `<AnalysisOverlay>` (3D / `<SceneView>` only) and report the\n * target's visibility via `onTargetVisibilityChange`.\n */\nexport function LineOfSight(\n props:\n | LineOfSightProps\n | (GeoElementLineOfSightProps & { observerGraphic: GraphicRef; targetGraphic: GraphicRef })\n) {\n const overlay = useAnalysisOverlay();\n const analysisRef = useRef<LineOfSightRef | GeoElementLineOfSightRef | undefined>(undefined);\n\n if (!analysisRef.current) {\n if ('observerGraphic' in props) {\n analysisRef.current = new ExpoArcgisModule.GeoElementLineOfSightRef(\n props.observerGraphic,\n props.targetGraphic\n );\n } else {\n analysisRef.current = new ExpoArcgisModule.LineOfSightRef({\n observer: props.observer,\n target: props.target,\n });\n }\n }\n\n const isLocationBased = !('observerGraphic' in props);\n const geometry = isLocationBased\n ? { observer: (props as LineOfSightProps).observer, target: (props as LineOfSightProps).target }\n : undefined;\n const prev = usePrevious(geometry);\n\n useEffect(() => {\n const analysis = analysisRef.current!;\n overlay.addAnalysis(analysis);\n return () => {\n detachQuietly(() => overlay.removeAnalysis(analysis));\n analysis.release();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Location-based only: propagate observer / target point changes.\n useUpdateEffect(() => {\n if (!geometry || !prev) return;\n const diffs = getPropsDiffs(prev, geometry);\n if (diffs.length === 0) return;\n const changed: Record<string, unknown> = {};\n diffs.forEach((key) => {\n changed[key] = geometry[key];\n });\n (analysisRef.current as LineOfSightRef)?.applyProps(changed);\n }, [geometry?.observer, geometry?.target]);\n\n // Subscribe to the native target-visibility stream.\n const { onTargetVisibilityChange } = props;\n useEffect(() => {\n if (!onTargetVisibilityChange) return;\n const subscription = analysisRef.current!.addListener(\n 'onTargetVisibilityChange',\n ({ visibility }) => {\n onTargetVisibilityChange(visibility);\n }\n );\n return () => subscription.remove();\n }, [onTargetVisibilityChange]);\n\n return null;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapImageLayer.d.ts","sourceRoot":"","sources":["../src/MapImageLayer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"MapImageLayer.d.ts","sourceRoot":"","sources":["../src/MapImageLayer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAQ7D,qGAAqG;AACrG,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,QA8BtD"}
|
package/build/MapImageLayer.js
CHANGED
|
@@ -4,6 +4,7 @@ import { useGeoModel } from './contexts';
|
|
|
4
4
|
import { usePrevious } from './hooks/usePrevious';
|
|
5
5
|
import { useUpdateEffect } from './hooks/useUpdateEffect';
|
|
6
6
|
import { getPropsDiffs } from './utils/getPropsDiffs';
|
|
7
|
+
import { detachQuietly } from './utils/detachQuietly';
|
|
7
8
|
/** Declarative operational `ArcGISMapImageLayer`. Adds itself to the nearest `<Map>` / `<Scene>`. */
|
|
8
9
|
export function MapImageLayer(props) {
|
|
9
10
|
const model = useGeoModel();
|
|
@@ -16,7 +17,7 @@ export function MapImageLayer(props) {
|
|
|
16
17
|
const layer = ref.current;
|
|
17
18
|
model.addLayer(layer);
|
|
18
19
|
return () => {
|
|
19
|
-
model.removeLayer(layer);
|
|
20
|
+
detachQuietly(() => model.removeLayer(layer));
|
|
20
21
|
layer.release();
|
|
21
22
|
};
|
|
22
23
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapImageLayer.js","sourceRoot":"","sources":["../src/MapImageLayer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,gBAAmC,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,qGAAqG;AACrG,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAG,MAAM,CAAuB,SAAS,CAAC,CAAC;IACpD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,GAAG,CAAC,OAAO,GAAG,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAEhC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,GAAG,CAAC,OAAQ,CAAC;QAC3B,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACtB,OAAO,GAAG,EAAE;YACV,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"MapImageLayer.js","sourceRoot":"","sources":["../src/MapImageLayer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,gBAAmC,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,qGAAqG;AACrG,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAG,MAAM,CAAuB,SAAS,CAAC,CAAC;IACpD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjB,GAAG,CAAC,OAAO,GAAG,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAEhC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,GAAG,CAAC,OAAQ,CAAC;QAC3B,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACtB,OAAO,GAAG,EAAE;YACV,aAAa,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9C,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,CAAC,CAAC;QACF,uDAAuD;IACzD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACzC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC/B,MAAM,OAAO,GAA4B,EAAE,CAAC;QAC5C,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACpB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport type { MapImageLayerProps } from './ExpoArcgis.types';\nimport ExpoArcgisModule, { type LayerRef } from './ExpoArcgisModule';\nimport { useGeoModel } from './contexts';\nimport { usePrevious } from './hooks/usePrevious';\nimport { useUpdateEffect } from './hooks/useUpdateEffect';\nimport { getPropsDiffs } from './utils/getPropsDiffs';\nimport { detachQuietly } from './utils/detachQuietly';\n\n/** Declarative operational `ArcGISMapImageLayer`. Adds itself to the nearest `<Map>` / `<Scene>`. */\nexport function MapImageLayer(props: MapImageLayerProps) {\n const model = useGeoModel();\n const ref = useRef<LayerRef | undefined>(undefined);\n if (!ref.current) {\n ref.current = new ExpoArcgisModule.MapImageLayerRef(props);\n }\n\n const prev = usePrevious(props);\n\n useEffect(() => {\n const layer = ref.current!;\n model.addLayer(layer);\n return () => {\n detachQuietly(() => model.removeLayer(layer));\n layer.release();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useUpdateEffect(() => {\n const diffs = getPropsDiffs(prev, props);\n if (diffs.length === 0) return;\n const changed: Record<string, unknown> = {};\n diffs.forEach((key) => {\n changed[key] = props[key];\n });\n ref.current?.applyProps(changed);\n }, [props]);\n\n return null;\n}\n"]}
|
package/build/MapView.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapView.d.ts","sourceRoot":"","sources":["../src/MapView.tsx"],"names":[],"mappings":"AACA,OAAO,EAOL,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"MapView.d.ts","sourceRoot":"","sources":["../src/MapView.tsx"],"names":[],"mappings":"AACA,OAAO,EAOL,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AA0BtE;;;GAGG;AACH,eAAO,MAAM,OAAO;;iDA4CnB,CAAC"}
|
package/build/MapView.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { requireNativeView } from 'expo';
|
|
2
2
|
import { forwardRef, useImperativeHandle, useMemo, useRef, useState, } from 'react';
|
|
3
3
|
import { GeoViewContext, useGeoModel } from './contexts';
|
|
4
|
+
import { sharedObjectId } from './utils/sharedObjectId';
|
|
4
5
|
const NativeMapView = requireNativeView('ExpoArcgis');
|
|
5
6
|
/**
|
|
6
7
|
* Declarative 2D map view. Renders the `ArcGISMap` from the nearest `<Map>`, hosts the
|
|
@@ -26,7 +27,10 @@ export const MapView = forwardRef(function MapView({ children, ...props }, handl
|
|
|
26
27
|
// The native view exposes `identify` on its ref, so hand that ref over directly. (It's
|
|
27
28
|
// attached before this layout-phase handle runs, so reading it here is safe.)
|
|
28
29
|
useImperativeHandle(handle, () => nativeRef.current, []);
|
|
29
|
-
return (<NativeMapView ref={nativeRef}
|
|
30
|
+
return (<NativeMapView ref={nativeRef}
|
|
31
|
+
// SharedObjects are passed by registry id so they survive the Fabric prop pipeline on
|
|
32
|
+
// expo-modules-core < 56.0.13 (which lacks the auto-unwrap from expo/expo#46212).
|
|
33
|
+
map={sharedObjectId(map)} graphicsOverlays={overlays.map(sharedObjectId)} imageOverlays={imageOverlays.map(sharedObjectId)} geometryEditor={sharedObjectId(geometryEditor)} {...props}>
|
|
30
34
|
<GeoViewContext.Provider value={host}>{children}</GeoViewContext.Provider>
|
|
31
35
|
</NativeMapView>);
|
|
32
36
|
});
|
package/build/MapView.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapView.js","sourceRoot":"","sources":["../src/MapView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AACzC,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,OAAO,EACP,MAAM,EACN,QAAQ,GAIT,MAAM,OAAO,CAAC;AASf,OAAO,EAAE,cAAc,EAAE,WAAW,EAAoB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"MapView.js","sourceRoot":"","sources":["../src/MapView.tsx"],"names":[],"mappings":"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","sourcesContent":["import { requireNativeView } from 'expo';\nimport {\n forwardRef,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type PropsWithChildren,\n type ReactNode,\n type Ref,\n} from 'react';\n\nimport type { MapViewHandle, MapViewProps } from './ExpoArcgis.types';\nimport type {\n MapRef,\n GraphicsOverlayRef,\n GeometryEditorRef,\n ImageOverlayRef,\n} from './ExpoArcgisModule';\nimport { GeoViewContext, useGeoModel, type GeoViewHost } from './contexts';\nimport { sharedObjectId } from './utils/sharedObjectId';\n\ntype NativeMapViewProps = MapViewProps & {\n /** The native map handle (SharedObject), passed by reference as a view prop. */\n map: MapRef;\n /** Graphics overlays declared as `<GraphicsOverlay>` children, passed by reference. */\n graphicsOverlays: GraphicsOverlayRef[];\n /** Image overlays declared as `<ImageOverlay>` children, passed by reference. */\n imageOverlays: ImageOverlayRef[];\n /** Interactive geometry editor declared as a `<GeometryEditor>` child, passed by reference. */\n geometryEditor?: GeometryEditorRef | null;\n /** Ref to the native view, whose `identify` async function is callable through it. */\n ref?: Ref<unknown>;\n children?: ReactNode;\n};\n\nconst NativeMapView = requireNativeView<NativeMapViewProps>('ExpoArcgis');\n\n/**\n * Declarative 2D map view. Renders the `ArcGISMap` from the nearest `<Map>`, hosts the\n * `<GraphicsOverlay>` / `<GeometryEditor>` children, and exposes `identify` via a `ref`.\n */\nexport const MapView = forwardRef<MapViewHandle, PropsWithChildren<MapViewProps>>(\n function MapView({ children, ...props }, handle) {\n const map = useGeoModel() as MapRef;\n // The native view exposes an async `identify` function callable through its ref.\n const nativeRef = useRef<any>(null);\n\n const [overlays, setOverlays] = useState<GraphicsOverlayRef[]>([]);\n const [imageOverlays, setImageOverlays] = useState<ImageOverlayRef[]>([]);\n const [geometryEditor, setGeometryEditor] = useState<GeometryEditorRef | null>(null);\n const host = useMemo<GeoViewHost>(\n () => ({\n add: (overlay) => setOverlays((prev) => (prev.includes(overlay) ? prev : [...prev, overlay])),\n remove: (overlay) => setOverlays((prev) => prev.filter((o) => o !== overlay)),\n addImageOverlay: (overlay) =>\n setImageOverlays((prev) => (prev.includes(overlay) ? prev : [...prev, overlay])),\n removeImageOverlay: (overlay) =>\n setImageOverlays((prev) => prev.filter((o) => o !== overlay)),\n setGeometryEditor: (editor) => setGeometryEditor(editor),\n // Visual analyses (viewshed / line-of-sight) are 3D only — no-op on a 2D map.\n addAnalysisOverlay: () => {},\n removeAnalysisOverlay: () => {},\n }),\n []\n );\n\n // The native view exposes `identify` on its ref, so hand that ref over directly. (It's\n // attached before this layout-phase handle runs, so reading it here is safe.)\n useImperativeHandle(handle, () => nativeRef.current as MapViewHandle, []);\n\n return (\n <NativeMapView\n ref={nativeRef}\n // SharedObjects are passed by registry id so they survive the Fabric prop pipeline on\n // expo-modules-core < 56.0.13 (which lacks the auto-unwrap from expo/expo#46212).\n map={sharedObjectId(map)}\n graphicsOverlays={overlays.map(sharedObjectId)}\n imageOverlays={imageOverlays.map(sharedObjectId)}\n geometryEditor={sharedObjectId(geometryEditor)}\n {...props}\n >\n <GeoViewContext.Provider value={host}>{children}</GeoViewContext.Provider>\n </NativeMapView>\n );\n }\n);\n"]}
|