@oneblink/apps-react 8.2.0-beta.12 → 8.2.0-beta.14

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.
@@ -10,9 +10,7 @@ type Props = {
10
10
  onChange: FormElementValueChangeHandler<ArcGISWebMapElementValue>;
11
11
  'aria-describedby'?: string;
12
12
  setIsDirty: () => void;
13
- isPageVisible: boolean;
14
- loading: React.ReactNode;
15
- errorIcon: React.ReactNode;
16
13
  };
17
- declare function FormElementArcGISWebMap({ element, id, value, onChange, setIsDirty, loading, errorIcon, isPageVisible, ...props }: Props): React.JSX.Element;
18
- export default FormElementArcGISWebMap;
14
+ declare function FormElementArcGISWebMap({ element, id, value, onChange, setIsDirty, ...props }: Props): React.JSX.Element;
15
+ declare const _default: React.MemoExoticComponent<typeof FormElementArcGISWebMap>;
16
+ export default _default;
@@ -12,8 +12,33 @@ import GraphicsLayer from '@arcgis/core/layers/GraphicsLayer';
12
12
  import Graphic from '@arcgis/core/Graphic';
13
13
  import { Point } from '@arcgis/core/geometry';
14
14
  import { v4 as uuid } from 'uuid';
15
+ import OnLoading from '../components/renderer/OnLoading';
16
+ import MaterialIcon from './MaterialIcon';
17
+ import useIsPageVisible from '../hooks/useIsPageVisible';
15
18
  import '../styles/arcgis-external.css';
16
- function FormElementArcGISWebMap({ element, id, value, onChange, setIsDirty, loading, errorIcon, isPageVisible, ...props }) {
19
+ import { Box, Divider, IconButton } from '@mui/material';
20
+ function DrawingOptionsList({ options, sketchTool, onClose, sketchToolType, setSelectedGraphicAttributes, }) {
21
+ return (React.createElement("div", { className: "esri-widget" },
22
+ React.createElement(Box, { sx: {
23
+ display: 'flex',
24
+ alignItems: 'center',
25
+ justifyContent: 'space-between',
26
+ } },
27
+ React.createElement("b", { style: { padding: '0.5rem' } }, "Select an option"),
28
+ React.createElement(IconButton, { onClick: (e) => {
29
+ e.stopPropagation();
30
+ onClose();
31
+ }, size: "small", "data-cypress": "copy-to-clip-board-button" },
32
+ React.createElement(MaterialIcon, { fontSize: "small" }, "close"))),
33
+ React.createElement(Divider, { sx: { backgroundColor: 'unset', margin: '0px 8px' } }),
34
+ React.createElement(Box, { sx: { maxHeight: '200px', overflowY: 'auto' } }, options === null || options === void 0 ? void 0 : options.map(({ id, value, label }) => (React.createElement("div", { key: id, className: "ob-list__item is-clickable", style: { alignItems: 'center' }, onClick: () => {
35
+ onClose();
36
+ sketchTool === null || sketchTool === void 0 ? void 0 : sketchTool.create(sketchToolType);
37
+ setSelectedGraphicAttributes({ value, label });
38
+ } }, label))))));
39
+ }
40
+ function FormElementArcGISWebMap({ element, id, value, onChange, setIsDirty, ...props }) {
41
+ var _a, _b;
17
42
  const ref = React.useRef(null);
18
43
  const layerPanelRef = React.useRef();
19
44
  const mapGalleryPanelRef = React.useRef();
@@ -24,6 +49,10 @@ function FormElementArcGISWebMap({ element, id, value, onChange, setIsDirty, loa
24
49
  const [overlayLayerIds, setOverlayLayerIds] = React.useState();
25
50
  const [loadError, setLoadError] = React.useState();
26
51
  const [isLoading, setIsLoading] = React.useState(false);
52
+ const isPageVisible = useIsPageVisible();
53
+ const [selectedGraphicAttributes, setSelectedGraphicAttributes] = React.useState();
54
+ // only used when an allowed drawing tool also has a list of graphic attribute options to display to the user
55
+ const [activeSketchToolMenu, setActiveSketchToolMenu] = React.useState();
27
56
  const updateDrawingInputSubmissionValue = React.useCallback(() => {
28
57
  var _a;
29
58
  const updatedGraphics = (_a = drawingLayerRef.current) === null || _a === void 0 ? void 0 : _a.graphics.toArray().map((graphic) => graphic.toJSON());
@@ -55,7 +84,7 @@ function FormElementArcGISWebMap({ element, id, value, onChange, setIsDirty, loa
55
84
  }
56
85
  }, [element, onChange, value]);
57
86
  React.useEffect(() => {
58
- var _a, _b, _c, _d;
87
+ var _a, _b, _c, _d, _e, _f;
59
88
  if (element.readOnly)
60
89
  return;
61
90
  // event listeners for drawing tool creates/updates/deletes
@@ -63,8 +92,18 @@ function FormElementArcGISWebMap({ element, id, value, onChange, setIsDirty, loa
63
92
  // to ensure they always have access to the latest submission value
64
93
  const createListener = (_a = sketchToolRef.current) === null || _a === void 0 ? void 0 : _a.on('create', (sketchEvent) => {
65
94
  if (sketchEvent.state === 'complete') {
95
+ if (selectedGraphicAttributes) {
96
+ sketchEvent.graphic.attributes = {
97
+ name: selectedGraphicAttributes.value,
98
+ label: selectedGraphicAttributes.label,
99
+ };
100
+ setSelectedGraphicAttributes(undefined);
101
+ }
66
102
  updateDrawingInputSubmissionValue();
67
103
  }
104
+ if (sketchEvent.state === 'cancel') {
105
+ setSelectedGraphicAttributes(undefined);
106
+ }
68
107
  });
69
108
  const updateListener = (_b = sketchToolRef.current) === null || _b === void 0 ? void 0 : _b.on('update', (sketchEvent) => {
70
109
  if (sketchEvent.state === 'complete') {
@@ -80,6 +119,8 @@ function FormElementArcGISWebMap({ element, id, value, onChange, setIsDirty, loa
80
119
  }
81
120
  });
82
121
  const deleteListener = (_c = sketchToolRef.current) === null || _c === void 0 ? void 0 : _c.on('delete', () => {
122
+ var _a;
123
+ (_a = mapViewRef.current) === null || _a === void 0 ? void 0 : _a.closePopup();
83
124
  updateDrawingInputSubmissionValue();
84
125
  });
85
126
  const mapViewChangeListener = (_d = mapViewRef.current) === null || _d === void 0 ? void 0 : _d.watch('stationary', () => {
@@ -94,18 +135,63 @@ function FormElementArcGISWebMap({ element, id, value, onChange, setIsDirty, loa
94
135
  }
95
136
  }
96
137
  });
138
+ const sketchToolListener = (_e = sketchToolRef.current) === null || _e === void 0 ? void 0 : _e.viewModel.watch('activeTool', () => {
139
+ var _a, _b, _c, _d, _e;
140
+ if (selectedGraphicAttributes) {
141
+ return;
142
+ }
143
+ const activeTool = (_a = sketchToolRef.current) === null || _a === void 0 ? void 0 : _a.activeTool;
144
+ const hasGraphicAttributeOptions = !!((_d = (_c = (_b = element.allowedDrawingTools) === null || _b === void 0 ? void 0 : _b.find((tool) => tool.type === activeTool)) === null || _c === void 0 ? void 0 : _c.graphicAttributeOptions) === null || _d === void 0 ? void 0 : _d.length);
145
+ if (activeTool) {
146
+ if (hasGraphicAttributeOptions &&
147
+ (activeTool === 'point' ||
148
+ activeTool === 'polygon' ||
149
+ activeTool === 'circle' ||
150
+ activeTool === 'rectangle' ||
151
+ activeTool === 'polyline')) {
152
+ // the sketch.create() fn only allows active tools of the above 5 types
153
+ // hence we must check above to keep the types happy further down the line
154
+ (_e = sketchToolRef.current) === null || _e === void 0 ? void 0 : _e.cancel();
155
+ setActiveSketchToolMenu(activeTool);
156
+ }
157
+ else {
158
+ setActiveSketchToolMenu(undefined);
159
+ }
160
+ }
161
+ });
162
+ (_f = mapViewRef.current) === null || _f === void 0 ? void 0 : _f.on('click', (event) => {
163
+ var _a;
164
+ (_a = mapViewRef.current) === null || _a === void 0 ? void 0 : _a.hitTest(event).then((response) => {
165
+ var _a;
166
+ // the "hit test" will typically yield the graphic we want to display the popup for,
167
+ // and an ArcGIS built-in graphic which highlights the selected graphic.
168
+ // By filtering for the graphic with the "label" attribute, we're able to reliably
169
+ // get the graphic we want to display the popup for.
170
+ const result = response.results
171
+ .filter((r) => r.type === 'graphic')
172
+ .find((r) => !!r.graphic.attributes.label);
173
+ if (result) {
174
+ (_a = mapViewRef.current) === null || _a === void 0 ? void 0 : _a.openPopup({
175
+ location: result.mapPoint,
176
+ title: result.graphic.attributes.label,
177
+ });
178
+ }
179
+ });
180
+ });
97
181
  return () => {
98
182
  createListener === null || createListener === void 0 ? void 0 : createListener.remove();
99
183
  updateListener === null || updateListener === void 0 ? void 0 : updateListener.remove();
100
184
  deleteListener === null || deleteListener === void 0 ? void 0 : deleteListener.remove();
101
185
  mapViewChangeListener === null || mapViewChangeListener === void 0 ? void 0 : mapViewChangeListener.remove();
186
+ sketchToolListener === null || sketchToolListener === void 0 ? void 0 : sketchToolListener.remove();
102
187
  };
103
188
  }, [
104
189
  isLoading,
105
190
  value,
106
191
  updateDrawingInputSubmissionValue,
107
192
  updateMapViewSubmissionValue,
108
- element.readOnly,
193
+ element,
194
+ selectedGraphicAttributes,
109
195
  ]);
110
196
  const onSubmissionValueChange = React.useCallback(() => {
111
197
  var _a;
@@ -237,6 +323,7 @@ function FormElementArcGISWebMap({ element, id, value, onChange, setIsDirty, loa
237
323
  });
238
324
  sketchToolRef.current = sketch;
239
325
  view.ui.add(sketch, 'bottom-right');
326
+ view.ui.add('OneBlinkDrawingOptionsSelector', 'bottom-right');
240
327
  }
241
328
  // once the view has loaded
242
329
  view.when(() => {
@@ -278,13 +365,16 @@ function FormElementArcGISWebMap({ element, id, value, onChange, setIsDirty, loa
278
365
  if (loadError) {
279
366
  return (React.createElement("figure", { className: "ob-figure" },
280
367
  React.createElement("div", { className: "figure-content has-text-centered" },
281
- errorIcon,
368
+ React.createElement(MaterialIcon, { className: "icon-large has-margin-bottom-6 has-text-warning" }, "error"),
282
369
  React.createElement("h4", { className: "title is-4" }, "We were unable to display your web map"),
283
370
  React.createElement("p", null, loadError.message))));
284
371
  }
285
372
  return (React.createElement(React.Fragment, null,
286
- isLoading && loading,
287
- React.createElement("div", { className: "arcgis-web-map", ref: ref, id: id, "aria-describedby": props['aria-describedby'] })));
373
+ isLoading && React.createElement(OnLoading, null),
374
+ React.createElement("div", { className: "arcgis-web-map", ref: ref, id: id, "aria-describedby": props['aria-describedby'] }),
375
+ React.createElement("div", { id: "OneBlinkDrawingOptionsSelector" }, !!activeSketchToolMenu && sketchToolRef.current && (React.createElement(DrawingOptionsList, { options: ((_b = (_a = element.allowedDrawingTools) === null || _a === void 0 ? void 0 : _a.find((tool) => tool.type === activeSketchToolMenu)) === null || _b === void 0 ? void 0 : _b.graphicAttributeOptions) || [], onClose: () => setActiveSketchToolMenu(undefined), setSelectedGraphicAttributes: (opt) => {
376
+ setSelectedGraphicAttributes(opt);
377
+ }, sketchToolType: activeSketchToolMenu, sketchTool: sketchToolRef.current })))));
288
378
  }
289
- export default FormElementArcGISWebMap;
379
+ export default React.memo(FormElementArcGISWebMap);
290
380
  //# sourceMappingURL=ArcGISWebMap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ArcGISWebMap.js","sourceRoot":"","sources":["../../src/components/ArcGISWebMap.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { FormTypes } from '@oneblink/types'\nimport MapView from '@arcgis/core/views/MapView'\nimport WebMap from '@arcgis/core/WebMap'\nimport Home from '@arcgis/core/widgets/Home'\nimport Search from '@arcgis/core/widgets/Search'\nimport Zoom from '@arcgis/core/widgets/Zoom'\nimport LayerList from '@arcgis/core/widgets/LayerList'\nimport Expand from '@arcgis/core/widgets/Expand'\nimport BaseMapGallery from '@arcgis/core/widgets/BasemapGallery'\nimport Sketch from '@arcgis/core/widgets/Sketch'\nimport GraphicsLayer from '@arcgis/core/layers/GraphicsLayer'\nimport Graphic from '@arcgis/core/Graphic'\nimport Layer from '@arcgis/core/layers/Layer'\nimport { Point } from '@arcgis/core/geometry'\nimport { v4 as uuid } from 'uuid'\n\nimport { ArcGISWebMapElementValue } from '@oneblink/types/typescript/arcgis'\nimport { FormElementValueChangeHandler } from '../types/form'\nimport '../styles/arcgis-external.css'\n\ntype Props = {\n element: FormTypes.ArcGISWebMapElement\n id: string\n value: ArcGISWebMapElementValue | undefined\n onChange: FormElementValueChangeHandler<ArcGISWebMapElementValue>\n 'aria-describedby'?: string\n setIsDirty: () => void\n isPageVisible: boolean\n loading: React.ReactNode\n errorIcon: React.ReactNode\n}\n\nfunction FormElementArcGISWebMap({\n element,\n id,\n value,\n onChange,\n setIsDirty,\n loading,\n errorIcon,\n isPageVisible,\n ...props\n}: Props) {\n const ref = React.useRef<HTMLDivElement | null>(null)\n const layerPanelRef = React.useRef<Expand>()\n const mapGalleryPanelRef = React.useRef<Expand>()\n const sketchToolRef = React.useRef<Sketch>()\n const drawingLayerRef = React.useRef<GraphicsLayer>()\n const selectedGraphicForUpdate = React.useRef<string>()\n const mapViewRef = React.useRef<MapView>()\n\n const [overlayLayerIds, setOverlayLayerIds] = React.useState<string[]>()\n const [loadError, setLoadError] = React.useState<Error>()\n const [isLoading, setIsLoading] = React.useState<boolean>(false)\n\n const updateDrawingInputSubmissionValue = React.useCallback(() => {\n const updatedGraphics = drawingLayerRef.current?.graphics\n .toArray()\n .map((graphic) => graphic.toJSON())\n\n onChange(element, {\n value: {\n ...(value || {}),\n drawingLayer: updatedGraphics,\n userInput: updatedGraphics,\n },\n })\n\n setIsDirty()\n }, [element, onChange, setIsDirty, value])\n\n const updateMapViewSubmissionValue = React.useCallback(() => {\n const zoom = mapViewRef.current?.zoom\n const latitude = mapViewRef.current?.center.latitude\n const longitude = mapViewRef.current?.center.longitude\n if (zoom && latitude && longitude) {\n onChange(element, {\n value: {\n ...(value || {}),\n view: {\n zoom,\n latitude,\n longitude,\n },\n },\n })\n }\n }, [element, onChange, value])\n\n React.useEffect(() => {\n if (element.readOnly) return\n // event listeners for drawing tool creates/updates/deletes\n // these need to be removed and recreated when the submission value changes\n // to ensure they always have access to the latest submission value\n const createListener = sketchToolRef.current?.on(\n 'create',\n (sketchEvent) => {\n if (sketchEvent.state === 'complete') {\n updateDrawingInputSubmissionValue()\n }\n },\n )\n\n const updateListener = sketchToolRef.current?.on(\n 'update',\n (sketchEvent) => {\n if (sketchEvent.state === 'complete') {\n // only update the submission value if the graphic's geometry was actually changed\n if (\n JSON.stringify(sketchEvent.graphics[0].geometry.toJSON()) !==\n selectedGraphicForUpdate.current\n ) {\n updateDrawingInputSubmissionValue()\n }\n selectedGraphicForUpdate.current = undefined\n }\n if (sketchEvent.state === 'start') {\n selectedGraphicForUpdate.current = JSON.stringify(\n sketchEvent.graphics[0].geometry.clone().toJSON(),\n )\n }\n },\n )\n\n const deleteListener = sketchToolRef.current?.on('delete', () => {\n updateDrawingInputSubmissionValue()\n })\n\n const mapViewChangeListener = mapViewRef.current?.watch(\n 'stationary',\n () => {\n const mapView = mapViewRef.current\n if (mapView && mapView.stationary) {\n const hasViewChanged =\n mapView.zoom !== value?.view?.zoom ||\n mapView.center.longitude !== value?.view?.longitude ||\n mapView.center.latitude !== value?.view?.latitude\n if (hasViewChanged) {\n updateMapViewSubmissionValue()\n }\n }\n },\n )\n\n return () => {\n createListener?.remove()\n updateListener?.remove()\n deleteListener?.remove()\n mapViewChangeListener?.remove()\n }\n }, [\n isLoading,\n value,\n updateDrawingInputSubmissionValue,\n updateMapViewSubmissionValue,\n element.readOnly,\n ])\n\n const onSubmissionValueChange = React.useCallback(() => {\n const view = mapViewRef.current\n const map = mapViewRef.current?.map\n if (!view || !map) return\n // remove any overlay layers we've added previously\n if (overlayLayerIds && map) {\n const layersToRemove = overlayLayerIds.reduce((toRemove: Layer[], id) => {\n const layer = map.layers.find((layer) => layer.id === id)\n if (layer) toRemove.push(layer)\n return toRemove\n }, [])\n map.layers.removeMany(layersToRemove)\n }\n\n // add any overlay layers in the submission value to the web map\n const newOverlayLayerIds = []\n if (value?.layers) {\n for (const layer of value.layers) {\n const overlayLayer = new GraphicsLayer({ title: layer.title as string })\n overlayLayer.addMany(layer.graphics.map((g) => Graphic.fromJSON(g)))\n newOverlayLayerIds.push(overlayLayer.id)\n map.layers.add(overlayLayer)\n }\n }\n setOverlayLayerIds(newOverlayLayerIds)\n\n // update the web map's drawing layers\n const drawingLayer = drawingLayerRef.current\n if (value?.drawingLayer && drawingLayer) {\n map.layers.remove(drawingLayer)\n drawingLayer.removeAll()\n drawingLayer.addMany(value.drawingLayer.map((g) => Graphic.fromJSON(g)))\n map.layers.add(drawingLayer)\n }\n if (value?.view) {\n view.zoom = value.view.zoom\n view.center = new Point({\n latitude: value.view.latitude,\n longitude: value.view.longitude,\n })\n }\n }, [overlayLayerIds, value])\n\n React.useEffect(() => {\n if (!isLoading && mapViewRef.current) {\n onSubmissionValueChange()\n }\n // only run the above when the submission value changes or the map finishes loading\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, isLoading])\n\n React.useEffect(() => {\n const loadMap = async () => {\n try {\n const map = new WebMap({\n portalItem: {\n id: element.webMapId,\n },\n basemap: element.basemapId || 'streets',\n })\n await map.load()\n\n const view = new MapView({\n map: map,\n container: ref.current || undefined,\n })\n\n // remove default widgets\n const components = view.ui.getComponents()\n for (const component of components) {\n view.ui.remove(component)\n }\n\n if (element.addressSearchWidgetEnabled) {\n view.ui.add(\n new Search({\n view,\n }),\n 'top-left',\n )\n }\n\n if (element.homeWidgetEnabled) {\n view.ui.add(\n new Home({\n view,\n }),\n 'top-left',\n )\n }\n\n view.ui.add(\n new Zoom({\n view,\n }),\n 'bottom-left',\n )\n\n const layerList = new LayerList({\n view,\n })\n\n layerPanelRef.current = new Expand({\n expandIcon: 'layers',\n view,\n content: layerList,\n expanded: element.showLayerPanel,\n mode: 'floating',\n visible: false,\n })\n\n view.ui.add(layerPanelRef.current, 'top-right')\n\n const baseMapGallery = new BaseMapGallery({ view })\n\n mapGalleryPanelRef.current = new Expand({\n expandIcon: 'basemap',\n view,\n content: baseMapGallery,\n mode: 'floating',\n visible: false,\n })\n\n view.ui.add(mapGalleryPanelRef.current, 'top-left')\n\n const drawingLayer = new GraphicsLayer({\n id: uuid(),\n title: 'Drawing',\n })\n drawingLayerRef.current = drawingLayer\n map.layers.add(drawingLayer)\n\n if (!element.readOnly && element.allowedDrawingTools?.length) {\n const sketch = new Sketch({\n view,\n layer: drawingLayer,\n creationMode: 'single',\n layout: 'vertical',\n availableCreateTools: element.allowedDrawingTools?.map(\n (tool) => tool.type,\n ),\n // hiding the below by default\n visibleElements: {\n duplicateButton: false,\n settingsMenu: false,\n undoRedoMenu: false,\n selectionTools: {\n 'lasso-selection': false,\n 'rectangle-selection': false,\n },\n },\n })\n sketchToolRef.current = sketch\n view.ui.add(sketch, 'bottom-right')\n }\n\n // once the view has loaded\n view.when(() => {\n mapViewRef.current = view\n setIsLoading(false)\n })\n } catch (e) {\n console.warn('Error while trying to load arcgis web map ', e)\n setLoadError(e as Error)\n setIsLoading(false)\n }\n }\n\n if (!mapViewRef.current && !isLoading) {\n setIsLoading(true)\n loadMap()\n }\n }, [element, isLoading, value])\n\n React.useEffect(() => {\n if (!isLoading) {\n if (isPageVisible) {\n if (layerPanelRef.current) {\n layerPanelRef.current.visible = true\n }\n if (mapGalleryPanelRef.current) {\n mapGalleryPanelRef.current.visible = true\n }\n } else {\n if (layerPanelRef.current) {\n layerPanelRef.current.visible = false\n }\n if (mapGalleryPanelRef.current) {\n mapGalleryPanelRef.current.visible = false\n }\n }\n }\n }, [isPageVisible, isLoading])\n\n if (loadError) {\n return (\n <figure className=\"ob-figure\">\n <div className=\"figure-content has-text-centered\">\n {errorIcon}\n <h4 className=\"title is-4\">We were unable to display your web map</h4>\n <p>{loadError.message}</p>\n </div>\n </figure>\n )\n }\n\n return (\n <>\n {isLoading && loading}\n <div\n className=\"arcgis-web-map\"\n ref={ref}\n id={id}\n aria-describedby={props['aria-describedby']}\n />\n </>\n )\n}\n\nexport default FormElementArcGISWebMap\n"]}
1
+ {"version":3,"file":"ArcGISWebMap.js","sourceRoot":"","sources":["../../src/components/ArcGISWebMap.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { FormTypes } from '@oneblink/types'\nimport MapView from '@arcgis/core/views/MapView'\nimport WebMap from '@arcgis/core/WebMap'\nimport Home from '@arcgis/core/widgets/Home'\nimport Search from '@arcgis/core/widgets/Search'\nimport Zoom from '@arcgis/core/widgets/Zoom'\nimport LayerList from '@arcgis/core/widgets/LayerList'\nimport Expand from '@arcgis/core/widgets/Expand'\nimport BaseMapGallery from '@arcgis/core/widgets/BasemapGallery'\nimport Sketch from '@arcgis/core/widgets/Sketch'\nimport GraphicsLayer from '@arcgis/core/layers/GraphicsLayer'\nimport Graphic from '@arcgis/core/Graphic'\nimport Layer from '@arcgis/core/layers/Layer'\nimport { Point } from '@arcgis/core/geometry'\nimport { v4 as uuid } from 'uuid'\n\nimport OnLoading from '../components/renderer/OnLoading'\nimport MaterialIcon from './MaterialIcon'\n\nimport useIsPageVisible from '../hooks/useIsPageVisible'\nimport { ArcGISWebMapElementValue } from '@oneblink/types/typescript/arcgis'\nimport { FormElementValueChangeHandler } from '../types/form'\nimport '../styles/arcgis-external.css'\nimport { Box, Divider, IconButton } from '@mui/material'\n\ntype Props = {\n element: FormTypes.ArcGISWebMapElement\n id: string\n value: ArcGISWebMapElementValue | undefined\n onChange: FormElementValueChangeHandler<ArcGISWebMapElementValue>\n 'aria-describedby'?: string\n setIsDirty: () => void\n}\n\ntype SketchCreateTool = Parameters<Sketch['create']>[0]\n\nfunction DrawingOptionsList({\n options,\n sketchTool,\n onClose,\n sketchToolType,\n setSelectedGraphicAttributes,\n}: {\n options: { id: string; label: string; value: string }[]\n onClose: () => void\n sketchTool: Sketch\n sketchToolType: SketchCreateTool\n setSelectedGraphicAttributes: (opt: { label: string; value: string }) => void\n}) {\n return (\n <div className=\"esri-widget\">\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <b style={{ padding: '0.5rem' }}>Select an option</b>\n <IconButton\n onClick={(e) => {\n e.stopPropagation()\n onClose()\n }}\n size=\"small\"\n data-cypress=\"copy-to-clip-board-button\"\n >\n <MaterialIcon fontSize=\"small\">close</MaterialIcon>\n </IconButton>\n </Box>\n <Divider sx={{ backgroundColor: 'unset', margin: '0px 8px' }} />\n <Box sx={{ maxHeight: '200px', overflowY: 'auto' }}>\n {options?.map(({ id, value, label }) => (\n <div\n key={id}\n className=\"ob-list__item is-clickable\"\n style={{ alignItems: 'center' }}\n onClick={() => {\n onClose()\n sketchTool?.create(sketchToolType)\n setSelectedGraphicAttributes({ value, label })\n }}\n >\n {label}\n </div>\n ))}\n </Box>\n </div>\n )\n}\n\nfunction FormElementArcGISWebMap({\n element,\n id,\n value,\n onChange,\n setIsDirty,\n ...props\n}: Props) {\n const ref = React.useRef<HTMLDivElement | null>(null)\n const layerPanelRef = React.useRef<Expand>()\n const mapGalleryPanelRef = React.useRef<Expand>()\n const sketchToolRef = React.useRef<Sketch>()\n const drawingLayerRef = React.useRef<GraphicsLayer>()\n const selectedGraphicForUpdate = React.useRef<string>()\n const mapViewRef = React.useRef<MapView>()\n\n const [overlayLayerIds, setOverlayLayerIds] = React.useState<string[]>()\n const [loadError, setLoadError] = React.useState<Error>()\n const [isLoading, setIsLoading] = React.useState<boolean>(false)\n const isPageVisible = useIsPageVisible()\n const [selectedGraphicAttributes, setSelectedGraphicAttributes] =\n React.useState<{\n value: string\n label: string\n }>()\n // only used when an allowed drawing tool also has a list of graphic attribute options to display to the user\n const [activeSketchToolMenu, setActiveSketchToolMenu] =\n React.useState<SketchCreateTool>()\n\n const updateDrawingInputSubmissionValue = React.useCallback(() => {\n const updatedGraphics = drawingLayerRef.current?.graphics\n .toArray()\n .map((graphic) => graphic.toJSON())\n\n onChange(element, {\n value: {\n ...(value || {}),\n drawingLayer: updatedGraphics,\n userInput: updatedGraphics,\n },\n })\n\n setIsDirty()\n }, [element, onChange, setIsDirty, value])\n\n const updateMapViewSubmissionValue = React.useCallback(() => {\n const zoom = mapViewRef.current?.zoom\n const latitude = mapViewRef.current?.center.latitude\n const longitude = mapViewRef.current?.center.longitude\n if (zoom && latitude && longitude) {\n onChange(element, {\n value: {\n ...(value || {}),\n view: {\n zoom,\n latitude,\n longitude,\n },\n },\n })\n }\n }, [element, onChange, value])\n\n React.useEffect(() => {\n if (element.readOnly) return\n // event listeners for drawing tool creates/updates/deletes\n // these need to be removed and recreated when the submission value changes\n // to ensure they always have access to the latest submission value\n const createListener = sketchToolRef.current?.on(\n 'create',\n (sketchEvent) => {\n if (sketchEvent.state === 'complete') {\n if (selectedGraphicAttributes) {\n sketchEvent.graphic.attributes = {\n name: selectedGraphicAttributes.value,\n label: selectedGraphicAttributes.label,\n }\n setSelectedGraphicAttributes(undefined)\n }\n updateDrawingInputSubmissionValue()\n }\n if (sketchEvent.state === 'cancel') {\n setSelectedGraphicAttributes(undefined)\n }\n },\n )\n\n const updateListener = sketchToolRef.current?.on(\n 'update',\n (sketchEvent) => {\n if (sketchEvent.state === 'complete') {\n // only update the submission value if the graphic's geometry was actually changed\n if (\n JSON.stringify(sketchEvent.graphics[0].geometry.toJSON()) !==\n selectedGraphicForUpdate.current\n ) {\n updateDrawingInputSubmissionValue()\n }\n selectedGraphicForUpdate.current = undefined\n }\n if (sketchEvent.state === 'start') {\n selectedGraphicForUpdate.current = JSON.stringify(\n sketchEvent.graphics[0].geometry.clone().toJSON(),\n )\n }\n },\n )\n\n const deleteListener = sketchToolRef.current?.on('delete', () => {\n mapViewRef.current?.closePopup()\n updateDrawingInputSubmissionValue()\n })\n\n const mapViewChangeListener = mapViewRef.current?.watch(\n 'stationary',\n () => {\n const mapView = mapViewRef.current\n if (mapView && mapView.stationary) {\n const hasViewChanged =\n mapView.zoom !== value?.view?.zoom ||\n mapView.center.longitude !== value?.view?.longitude ||\n mapView.center.latitude !== value?.view?.latitude\n if (hasViewChanged) {\n updateMapViewSubmissionValue()\n }\n }\n },\n )\n\n const sketchToolListener = sketchToolRef.current?.viewModel.watch(\n 'activeTool',\n () => {\n if (selectedGraphicAttributes) {\n return\n }\n const activeTool = sketchToolRef.current?.activeTool\n const hasGraphicAttributeOptions = !!element.allowedDrawingTools?.find(\n (tool) => tool.type === activeTool,\n )?.graphicAttributeOptions?.length\n\n if (activeTool) {\n if (\n hasGraphicAttributeOptions &&\n (activeTool === 'point' ||\n activeTool === 'polygon' ||\n activeTool === 'circle' ||\n activeTool === 'rectangle' ||\n activeTool === 'polyline')\n ) {\n // the sketch.create() fn only allows active tools of the above 5 types\n // hence we must check above to keep the types happy further down the line\n sketchToolRef.current?.cancel()\n setActiveSketchToolMenu(activeTool)\n } else {\n setActiveSketchToolMenu(undefined)\n }\n }\n },\n )\n\n mapViewRef.current?.on('click', (event) => {\n mapViewRef.current?.hitTest(event).then((response) => {\n // the \"hit test\" will typically yield the graphic we want to display the popup for,\n // and an ArcGIS built-in graphic which highlights the selected graphic.\n // By filtering for the graphic with the \"label\" attribute, we're able to reliably\n // get the graphic we want to display the popup for.\n const result = response.results\n .filter((r) => r.type === 'graphic')\n .find((r) => !!r.graphic.attributes.label)\n\n if (result) {\n mapViewRef.current?.openPopup({\n location: result.mapPoint,\n title: result.graphic.attributes.label,\n })\n }\n })\n })\n\n return () => {\n createListener?.remove()\n updateListener?.remove()\n deleteListener?.remove()\n mapViewChangeListener?.remove()\n sketchToolListener?.remove()\n }\n }, [\n isLoading,\n value,\n updateDrawingInputSubmissionValue,\n updateMapViewSubmissionValue,\n element,\n selectedGraphicAttributes,\n ])\n\n const onSubmissionValueChange = React.useCallback(() => {\n const view = mapViewRef.current\n const map = mapViewRef.current?.map\n if (!view || !map) return\n // remove any overlay layers we've added previously\n if (overlayLayerIds && map) {\n const layersToRemove = overlayLayerIds.reduce((toRemove: Layer[], id) => {\n const layer = map.layers.find((layer) => layer.id === id)\n if (layer) toRemove.push(layer)\n return toRemove\n }, [])\n map.layers.removeMany(layersToRemove)\n }\n\n // add any overlay layers in the submission value to the web map\n const newOverlayLayerIds = []\n if (value?.layers) {\n for (const layer of value.layers) {\n const overlayLayer = new GraphicsLayer({ title: layer.title as string })\n overlayLayer.addMany(layer.graphics.map((g) => Graphic.fromJSON(g)))\n newOverlayLayerIds.push(overlayLayer.id)\n map.layers.add(overlayLayer)\n }\n }\n setOverlayLayerIds(newOverlayLayerIds)\n\n // update the web map's drawing layers\n const drawingLayer = drawingLayerRef.current\n if (value?.drawingLayer && drawingLayer) {\n map.layers.remove(drawingLayer)\n drawingLayer.removeAll()\n drawingLayer.addMany(value.drawingLayer.map((g) => Graphic.fromJSON(g)))\n map.layers.add(drawingLayer)\n }\n if (value?.view) {\n view.zoom = value.view.zoom\n view.center = new Point({\n latitude: value.view.latitude,\n longitude: value.view.longitude,\n })\n }\n }, [overlayLayerIds, value])\n\n React.useEffect(() => {\n if (!isLoading && mapViewRef.current) {\n onSubmissionValueChange()\n }\n // only run the above when the submission value changes or the map finishes loading\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, isLoading])\n\n React.useEffect(() => {\n const loadMap = async () => {\n try {\n const map = new WebMap({\n portalItem: {\n id: element.webMapId,\n },\n basemap: element.basemapId || 'streets',\n })\n await map.load()\n\n const view = new MapView({\n map: map,\n container: ref.current || undefined,\n })\n\n // remove default widgets\n const components = view.ui.getComponents()\n for (const component of components) {\n view.ui.remove(component)\n }\n\n if (element.addressSearchWidgetEnabled) {\n view.ui.add(\n new Search({\n view,\n }),\n 'top-left',\n )\n }\n\n if (element.homeWidgetEnabled) {\n view.ui.add(\n new Home({\n view,\n }),\n 'top-left',\n )\n }\n\n view.ui.add(\n new Zoom({\n view,\n }),\n 'bottom-left',\n )\n\n const layerList = new LayerList({\n view,\n })\n\n layerPanelRef.current = new Expand({\n expandIcon: 'layers',\n view,\n content: layerList,\n expanded: element.showLayerPanel,\n mode: 'floating',\n visible: false,\n })\n\n view.ui.add(layerPanelRef.current, 'top-right')\n\n const baseMapGallery = new BaseMapGallery({ view })\n\n mapGalleryPanelRef.current = new Expand({\n expandIcon: 'basemap',\n view,\n content: baseMapGallery,\n mode: 'floating',\n visible: false,\n })\n\n view.ui.add(mapGalleryPanelRef.current, 'top-left')\n\n const drawingLayer = new GraphicsLayer({\n id: uuid(),\n title: 'Drawing',\n })\n drawingLayerRef.current = drawingLayer\n map.layers.add(drawingLayer)\n\n if (!element.readOnly && element.allowedDrawingTools?.length) {\n const sketch = new Sketch({\n view,\n layer: drawingLayer,\n creationMode: 'single',\n layout: 'vertical',\n availableCreateTools: element.allowedDrawingTools?.map(\n (tool) => tool.type,\n ),\n // hiding the below by default\n visibleElements: {\n duplicateButton: false,\n settingsMenu: false,\n undoRedoMenu: false,\n selectionTools: {\n 'lasso-selection': false,\n 'rectangle-selection': false,\n },\n },\n })\n sketchToolRef.current = sketch\n view.ui.add(sketch, 'bottom-right')\n view.ui.add('OneBlinkDrawingOptionsSelector', 'bottom-right')\n }\n\n // once the view has loaded\n view.when(() => {\n mapViewRef.current = view\n setIsLoading(false)\n })\n } catch (e) {\n console.warn('Error while trying to load arcgis web map ', e)\n setLoadError(e as Error)\n setIsLoading(false)\n }\n }\n\n if (!mapViewRef.current && !isLoading) {\n setIsLoading(true)\n loadMap()\n }\n }, [element, isLoading, value])\n\n React.useEffect(() => {\n if (!isLoading) {\n if (isPageVisible) {\n if (layerPanelRef.current) {\n layerPanelRef.current.visible = true\n }\n if (mapGalleryPanelRef.current) {\n mapGalleryPanelRef.current.visible = true\n }\n } else {\n if (layerPanelRef.current) {\n layerPanelRef.current.visible = false\n }\n if (mapGalleryPanelRef.current) {\n mapGalleryPanelRef.current.visible = false\n }\n }\n }\n }, [isPageVisible, isLoading])\n\n if (loadError) {\n return (\n <figure className=\"ob-figure\">\n <div className=\"figure-content has-text-centered\">\n <MaterialIcon className=\"icon-large has-margin-bottom-6 has-text-warning\">\n error\n </MaterialIcon>\n <h4 className=\"title is-4\">We were unable to display your web map</h4>\n <p>{loadError.message}</p>\n </div>\n </figure>\n )\n }\n\n return (\n <>\n {isLoading && <OnLoading />}\n <div\n className=\"arcgis-web-map\"\n ref={ref}\n id={id}\n aria-describedby={props['aria-describedby']}\n />\n <div id=\"OneBlinkDrawingOptionsSelector\">\n {!!activeSketchToolMenu && sketchToolRef.current && (\n <DrawingOptionsList\n options={\n element.allowedDrawingTools?.find(\n (tool) => tool.type === activeSketchToolMenu,\n )?.graphicAttributeOptions || []\n }\n onClose={() => setActiveSketchToolMenu(undefined)}\n setSelectedGraphicAttributes={(opt) => {\n setSelectedGraphicAttributes(opt)\n }}\n sketchToolType={activeSketchToolMenu}\n sketchTool={sketchToolRef.current}\n />\n )}\n </div>\n </>\n )\n}\n\nexport default React.memo(FormElementArcGISWebMap)\n"]}
@@ -4,14 +4,11 @@ import useIsOffline from '../hooks/useIsOffline';
4
4
  import FormElementLabelContainer from '../components/renderer/FormElementLabelContainer';
5
5
  import useElementAriaDescribedby from '../hooks/useElementAriaDescribedby';
6
6
  import { LookupNotificationContext } from '../hooks/useLookupNotification';
7
- import MaterialIcon from '../components/MaterialIcon';
8
- import useIsPageVisible from '../hooks/useIsPageVisible';
9
7
  const ArcGISWebMap = React.lazy(() => import('../components/ArcGISWebMap'));
10
8
  export function stringifyArcgisInput(value) {
11
9
  return JSON.stringify(value === null || value === void 0 ? void 0 : value.userInput);
12
10
  }
13
11
  function FormElementArcGISWebMap({ id, element, value, onChange, displayValidationMessage, isDirty, validationMessage, setIsDirty, }) {
14
- const isPageVisible = useIsPageVisible();
15
12
  const ariaDescribedby = useElementAriaDescribedby(id, element);
16
13
  const isOffline = useIsOffline();
17
14
  const { isLookingUp } = React.useContext(LookupNotificationContext);
@@ -23,7 +20,7 @@ function FormElementArcGISWebMap({ id, element, value, onChange, displayValidati
23
20
  React.createElement("h4", { className: "title is-4", role: "alert" }, "This Web Map is not available as you are currently offline")))) : (React.createElement(Suspense, { fallback: React.createElement(React.Fragment, null,
24
21
  React.createElement(OnLoading, null),
25
22
  React.createElement("div", { className: "arcgis-web-map" })) },
26
- React.createElement(ArcGISWebMap, { element: element, id: id, "aria-describedby": ariaDescribedby, value: value, onChange: onChange, setIsDirty: setIsDirty, loading: React.createElement(OnLoading, null), errorIcon: React.createElement(MaterialIcon, { className: "icon-large has-margin-bottom-6 has-text-warning" }, "error"), isPageVisible: isPageVisible }))),
23
+ React.createElement(ArcGISWebMap, { element: element, id: id, "aria-describedby": ariaDescribedby, value: value, onChange: onChange, setIsDirty: setIsDirty }))),
27
24
  isDisplayingValidationMessage && (React.createElement("div", { role: "alert", className: "has-margin-top-8" },
28
25
  React.createElement("div", { className: "has-text-danger ob-error__text cypress-validation-message" }, validationMessage))))));
29
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FormElementArcGISWebMap.js","sourceRoot":"","sources":["../../src/form-elements/FormElementArcGISWebMap.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEvC,OAAO,SAAS,MAAM,kCAAkC,CAAA;AACxD,OAAO,YAAY,MAAM,uBAAuB,CAAA;AAChD,OAAO,yBAAyB,MAAM,kDAAkD,CAAA;AACxF,OAAO,yBAAyB,MAAM,oCAAoC,CAAA;AAG1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC1E,OAAO,YAAY,MAAM,4BAA4B,CAAA;AACrD,OAAO,gBAAgB,MAAM,2BAA2B,CAAA;AAExD,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAA;AAW3E,MAAM,UAAU,oBAAoB,CAClC,KAA2C;IAE3C,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,CAAC,CAAA;AACzC,CAAC;AAED,SAAS,uBAAuB,CAAC,EAC/B,EAAE,EACF,OAAO,EACP,KAAK,EACL,QAAQ,EACR,wBAAwB,EACxB,OAAO,EACP,iBAAiB,EACjB,UAAU,GACJ;IACN,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAA;IACxC,MAAM,eAAe,GAAG,yBAAyB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;IAC9D,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAChC,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAA;IACnE,MAAM,6BAA6B,GACjC,CAAC,OAAO,IAAI,wBAAwB,CAAC,IAAI,CAAC,CAAC,iBAAiB,IAAI,CAAC,WAAW,CAAA;IAE9E,OAAO,CACL,6BAAK,SAAS,EAAC,wBAAwB;QACrC,oBAAC,yBAAyB,IACxB,SAAS,EAAC,mBAAmB,EAC7B,EAAE,EAAE,EAAE,EACN,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAEzB,SAAS,CAAC,CAAC,CAAC,CACX,gCAAQ,SAAS,EAAC,WAAW;gBAC3B,6BAAK,SAAS,EAAC,kCAAkC;oBAC/C,4BAAI,SAAS,EAAC,YAAY,EAAC,IAAI,EAAC,OAAO,iEAElC,CACD,CACC,CACV,CAAC,CAAC,CAAC,CACF,oBAAC,QAAQ,IACP,QAAQ,EACN;oBACE,oBAAC,SAAS,OAAG;oBACb,6BAAK,SAAS,EAAC,gBAAgB,GAAG,CACjC;gBAGL,oBAAC,YAAY,IACX,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,EAAE,sBACY,eAAe,EACjC,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,oBAAC,SAAS,OAAG,EACtB,SAAS,EACP,oBAAC,YAAY,IAAC,SAAS,EAAC,iDAAiD,YAE1D,EAEjB,aAAa,EAAE,aAAa,GAC5B,CACO,CACZ;YACA,6BAA6B,IAAI,CAChC,6BAAK,IAAI,EAAC,OAAO,EAAC,SAAS,EAAC,kBAAkB;gBAC5C,6BAAK,SAAS,EAAC,2DAA2D,IACvE,iBAAiB,CACd,CACF,CACP,CACyB,CACxB,CACP,CAAA;AACH,CAAC;AAED,eAAe,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA","sourcesContent":["import React, { Suspense } from 'react'\nimport { FormTypes } from '@oneblink/types'\nimport OnLoading from '../components/renderer/OnLoading'\nimport useIsOffline from '../hooks/useIsOffline'\nimport FormElementLabelContainer from '../components/renderer/FormElementLabelContainer'\nimport useElementAriaDescribedby from '../hooks/useElementAriaDescribedby'\nimport { ArcGISWebMapElementValue } from '@oneblink/types/typescript/arcgis'\nimport { FormElementValueChangeHandler, IsDirtyProps } from '../types/form'\nimport { LookupNotificationContext } from '../hooks/useLookupNotification'\nimport MaterialIcon from '../components/MaterialIcon'\nimport useIsPageVisible from '../hooks/useIsPageVisible'\n\nconst ArcGISWebMap = React.lazy(() => import('../components/ArcGISWebMap'))\n\ntype Props = {\n id: string\n element: FormTypes.ArcGISWebMapElement\n value: ArcGISWebMapElementValue | undefined\n onChange: FormElementValueChangeHandler<ArcGISWebMapElementValue>\n displayValidationMessage: boolean\n validationMessage: string | undefined\n} & IsDirtyProps\n\nexport function stringifyArcgisInput(\n value: ArcGISWebMapElementValue | undefined,\n) {\n return JSON.stringify(value?.userInput)\n}\n\nfunction FormElementArcGISWebMap({\n id,\n element,\n value,\n onChange,\n displayValidationMessage,\n isDirty,\n validationMessage,\n setIsDirty,\n}: Props) {\n const isPageVisible = useIsPageVisible()\n const ariaDescribedby = useElementAriaDescribedby(id, element)\n const isOffline = useIsOffline()\n const { isLookingUp } = React.useContext(LookupNotificationContext)\n const isDisplayingValidationMessage =\n (isDirty || displayValidationMessage) && !!validationMessage && !isLookingUp\n\n return (\n <div className=\"cypress-arcgis-web-map\">\n <FormElementLabelContainer\n className=\"ob-arcgis-web-map\"\n id={id}\n element={element}\n required={element.required}\n >\n {isOffline ? (\n <figure className=\"ob-figure\">\n <div className=\"figure-content has-text-centered\">\n <h4 className=\"title is-4\" role=\"alert\">\n This Web Map is not available as you are currently offline\n </h4>\n </div>\n </figure>\n ) : (\n <Suspense\n fallback={\n <>\n <OnLoading />\n <div className=\"arcgis-web-map\" />\n </>\n }\n >\n <ArcGISWebMap\n element={element}\n id={id}\n aria-describedby={ariaDescribedby}\n value={value}\n onChange={onChange}\n setIsDirty={setIsDirty}\n loading={<OnLoading />}\n errorIcon={\n <MaterialIcon className=\"icon-large has-margin-bottom-6 has-text-warning\">\n error\n </MaterialIcon>\n }\n isPageVisible={isPageVisible}\n />\n </Suspense>\n )}\n {isDisplayingValidationMessage && (\n <div role=\"alert\" className=\"has-margin-top-8\">\n <div className=\"has-text-danger ob-error__text cypress-validation-message\">\n {validationMessage}\n </div>\n </div>\n )}\n </FormElementLabelContainer>\n </div>\n )\n}\n\nexport default React.memo(FormElementArcGISWebMap)\n"]}
1
+ {"version":3,"file":"FormElementArcGISWebMap.js","sourceRoot":"","sources":["../../src/form-elements/FormElementArcGISWebMap.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAEvC,OAAO,SAAS,MAAM,kCAAkC,CAAA;AACxD,OAAO,YAAY,MAAM,uBAAuB,CAAA;AAChD,OAAO,yBAAyB,MAAM,kDAAkD,CAAA;AACxF,OAAO,yBAAyB,MAAM,oCAAoC,CAAA;AAG1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC1E,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAA;AAW3E,MAAM,UAAU,oBAAoB,CAClC,KAA2C;IAE3C,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,CAAC,CAAA;AACzC,CAAC;AAED,SAAS,uBAAuB,CAAC,EAC/B,EAAE,EACF,OAAO,EACP,KAAK,EACL,QAAQ,EACR,wBAAwB,EACxB,OAAO,EACP,iBAAiB,EACjB,UAAU,GACJ;IACN,MAAM,eAAe,GAAG,yBAAyB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;IAC9D,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAChC,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAA;IACnE,MAAM,6BAA6B,GACjC,CAAC,OAAO,IAAI,wBAAwB,CAAC,IAAI,CAAC,CAAC,iBAAiB,IAAI,CAAC,WAAW,CAAA;IAE9E,OAAO,CACL,6BAAK,SAAS,EAAC,wBAAwB;QACrC,oBAAC,yBAAyB,IACxB,SAAS,EAAC,mBAAmB,EAC7B,EAAE,EAAE,EAAE,EACN,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAEzB,SAAS,CAAC,CAAC,CAAC,CACX,gCAAQ,SAAS,EAAC,WAAW;gBAC3B,6BAAK,SAAS,EAAC,kCAAkC;oBAC/C,4BAAI,SAAS,EAAC,YAAY,EAAC,IAAI,EAAC,OAAO,iEAElC,CACD,CACC,CACV,CAAC,CAAC,CAAC,CACF,oBAAC,QAAQ,IACP,QAAQ,EACN;oBACE,oBAAC,SAAS,OAAG;oBACb,6BAAK,SAAS,EAAC,gBAAgB,GAAG,CACjC;gBAGL,oBAAC,YAAY,IACX,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,EAAE,sBACY,eAAe,EACjC,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,GACtB,CACO,CACZ;YACA,6BAA6B,IAAI,CAChC,6BAAK,IAAI,EAAC,OAAO,EAAC,SAAS,EAAC,kBAAkB;gBAC5C,6BAAK,SAAS,EAAC,2DAA2D,IACvE,iBAAiB,CACd,CACF,CACP,CACyB,CACxB,CACP,CAAA;AACH,CAAC;AAED,eAAe,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA","sourcesContent":["import React, { Suspense } from 'react'\nimport { FormTypes } from '@oneblink/types'\nimport OnLoading from '../components/renderer/OnLoading'\nimport useIsOffline from '../hooks/useIsOffline'\nimport FormElementLabelContainer from '../components/renderer/FormElementLabelContainer'\nimport useElementAriaDescribedby from '../hooks/useElementAriaDescribedby'\nimport { ArcGISWebMapElementValue } from '@oneblink/types/typescript/arcgis'\nimport { FormElementValueChangeHandler, IsDirtyProps } from '../types/form'\nimport { LookupNotificationContext } from '../hooks/useLookupNotification'\nconst ArcGISWebMap = React.lazy(() => import('../components/ArcGISWebMap'))\n\ntype Props = {\n id: string\n element: FormTypes.ArcGISWebMapElement\n value: ArcGISWebMapElementValue | undefined\n onChange: FormElementValueChangeHandler<ArcGISWebMapElementValue>\n displayValidationMessage: boolean\n validationMessage: string | undefined\n} & IsDirtyProps\n\nexport function stringifyArcgisInput(\n value: ArcGISWebMapElementValue | undefined,\n) {\n return JSON.stringify(value?.userInput)\n}\n\nfunction FormElementArcGISWebMap({\n id,\n element,\n value,\n onChange,\n displayValidationMessage,\n isDirty,\n validationMessage,\n setIsDirty,\n}: Props) {\n const ariaDescribedby = useElementAriaDescribedby(id, element)\n const isOffline = useIsOffline()\n const { isLookingUp } = React.useContext(LookupNotificationContext)\n const isDisplayingValidationMessage =\n (isDirty || displayValidationMessage) && !!validationMessage && !isLookingUp\n\n return (\n <div className=\"cypress-arcgis-web-map\">\n <FormElementLabelContainer\n className=\"ob-arcgis-web-map\"\n id={id}\n element={element}\n required={element.required}\n >\n {isOffline ? (\n <figure className=\"ob-figure\">\n <div className=\"figure-content has-text-centered\">\n <h4 className=\"title is-4\" role=\"alert\">\n This Web Map is not available as you are currently offline\n </h4>\n </div>\n </figure>\n ) : (\n <Suspense\n fallback={\n <>\n <OnLoading />\n <div className=\"arcgis-web-map\" />\n </>\n }\n >\n <ArcGISWebMap\n element={element}\n id={id}\n aria-describedby={ariaDescribedby}\n value={value}\n onChange={onChange}\n setIsDirty={setIsDirty}\n />\n </Suspense>\n )}\n {isDisplayingValidationMessage && (\n <div role=\"alert\" className=\"has-margin-top-8\">\n <div className=\"has-text-danger ob-error__text cypress-validation-message\">\n {validationMessage}\n </div>\n </div>\n )}\n </FormElementLabelContainer>\n </div>\n )\n}\n\nexport default React.memo(FormElementArcGISWebMap)\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@oneblink/apps-react",
3
3
  "description": "Helper functions for OneBlink apps in ReactJS.",
4
- "version": "8.2.0-beta.12",
4
+ "version": "8.2.0-beta.14",
5
5
  "author": "OneBlink <developers@oneblink.io> (https://oneblink.io)",
6
6
  "bugs": {
7
7
  "url": "https://github.com/oneblink/apps-react/issues"