@oneblink/apps-react 8.6.0-beta.11 → 8.6.0-beta.13

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.
@@ -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 Popup from '@arcgis/core/widgets/Popup'\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; description?: string }[]\n onClose: () => void\n sketchTool: Sketch\n sketchToolType: SketchCreateTool\n setSelectedGraphicAttributes: (opt: {\n label: string\n value: string\n description?: string\n }) => 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, description }) => (\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, description })\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 description?: 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 description: selectedGraphicAttributes.description,\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 title: result.graphic.attributes.label,\n content: result.graphic.attributes.description,\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\n const newLayerIds = value?.layers?.map((l) => l.id)\n // remove map layers no longer in submission value\n if (overlayLayerIds) {\n const layersToRemove = overlayLayerIds.reduce((toRemove: Layer[], id) => {\n if (!newLayerIds?.includes(id)) {\n const layer = map.layers.find((layer) => layer.id === id)\n if (layer) toRemove.push(layer)\n }\n return toRemove\n }, [])\n map.layers.removeMany(layersToRemove)\n }\n\n if (value?.layers) {\n // determine if a layer is new or existing and handle accordingly\n for (const layer of value.layers) {\n const existingLayer = map.layers.find(\n (mapLayer) => mapLayer.id === layer.id,\n )\n if (!existingLayer) {\n const newLayer = new GraphicsLayer({\n title: layer.title as string,\n id: layer.id,\n })\n newLayer.addMany(layer.graphics.map((g) => Graphic.fromJSON(g)))\n map.layers.add(newLayer)\n } else if (existingLayer && existingLayer.type === 'graphics') {\n const existingGraphicLayer = existingLayer as GraphicsLayer\n existingGraphicLayer.title = layer.title\n existingGraphicLayer.graphics.removeAll()\n existingGraphicLayer.addMany(\n layer.graphics.map((g) => Graphic.fromJSON(g)),\n )\n }\n }\n }\n\n // finally, set the new layer ids in state\n setOverlayLayerIds(newLayerIds)\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 const drawingOptionsContainerId = `OneBlinkDrawingOptionsSelector-${element.id}`\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 popup: new Popup({\n dockEnabled: true,\n dockOptions: {\n buttonEnabled: false,\n breakpoint: false,\n position: 'bottom-left',\n },\n }),\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-right',\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 if (!element.readOnly && element.allowedDrawingTools?.length) {\n const drawingLayer = new GraphicsLayer({\n id: uuid(),\n title: 'Drawing',\n })\n drawingLayerRef.current = drawingLayer\n map.layers.add(drawingLayer)\n const sketch = new Sketch({\n view,\n layer: drawingLayer,\n creationMode: 'single',\n layout: 'vertical',\n availableCreateTools: [\n 'point',\n 'polyline',\n 'polygon',\n 'rectangle',\n 'circle',\n ].filter((createTool) =>\n element.allowedDrawingTools?.find(\n (tool) => tool.type === createTool,\n ),\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(drawingOptionsContainerId, '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 }, [drawingOptionsContainerId, 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={drawingOptionsContainerId}>\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"]}
1
+ {"version":3,"file":"ArcGISWebMap.js","sourceRoot":"","sources":["../../src/components/ArcGISWebMap.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,OAAO,MAAM,4BAA4B,CAAA;AAChD,OAAO,MAAM,MAAM,qBAAqB,CAAA;AACxC,OAAO,IAAI,MAAM,2BAA2B,CAAA;AAC5C,OAAO,MAAM,MAAM,6BAA6B,CAAA;AAChD,OAAO,IAAI,MAAM,2BAA2B,CAAA;AAC5C,OAAO,SAAS,MAAM,gCAAgC,CAAA;AACtD,OAAO,MAAM,MAAM,6BAA6B,CAAA;AAChD,OAAO,cAAc,MAAM,qCAAqC,CAAA;AAChE,OAAO,MAAM,MAAM,6BAA6B,CAAA;AAChD,OAAO,aAAa,MAAM,mCAAmC,CAAA;AAC7D,OAAO,OAAO,MAAM,sBAAsB,CAAA;AAE1C,OAAO,KAAK,MAAM,4BAA4B,CAAA;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAC7C,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAA;AAEjC,OAAO,SAAS,MAAM,kCAAkC,CAAA;AACxD,OAAO,YAAY,MAAM,gBAAgB,CAAA;AAEzC,OAAO,gBAAgB,MAAM,2BAA2B,CAAA;AAGxD,OAAO,+BAA+B,CAAA;AACtC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAaxD,SAAS,kBAAkB,CAAC,EAC1B,OAAO,EACP,UAAU,EACV,OAAO,EACP,cAAc,EACd,4BAA4B,GAW7B;IACC,OAAO,CACL,6BAAK,SAAS,EAAC,aAAa;QAC1B,oBAAC,GAAG,IACF,EAAE,EAAE;gBACF,OAAO,EAAE,MAAM;gBACf,UAAU,EAAE,QAAQ;gBACpB,cAAc,EAAE,eAAe;aAChC;YAED,2BAAG,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,uBAAsB;YACrD,oBAAC,UAAU,IACT,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;oBACb,CAAC,CAAC,eAAe,EAAE,CAAA;oBACnB,OAAO,EAAE,CAAA;gBACX,CAAC,EACD,IAAI,EAAC,OAAO,kBACC,2BAA2B;gBAExC,oBAAC,YAAY,IAAC,QAAQ,EAAC,OAAO,YAAqB,CACxC,CACT;QACN,oBAAC,OAAO,IAAC,EAAE,EAAE,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAI;QAChE,oBAAC,GAAG,IAAC,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,IAC/C,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CACnD,6BACE,GAAG,EAAE,EAAE,EACP,SAAS,EAAC,4BAA4B,EACtC,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,EAC/B,OAAO,EAAE,GAAG,EAAE;gBACZ,OAAO,EAAE,CAAA;gBACT,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,CAAC,cAAc,CAAC,CAAA;gBAClC,4BAA4B,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAA;YAC7D,CAAC,IAEA,KAAK,CACF,CACP,CAAC,CACE,CACF,CACP,CAAA;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,EAC/B,OAAO,EACP,EAAE,EACF,KAAK,EACL,QAAQ,EACR,UAAU,EACV,GAAG,KAAK,EACF;;IACN,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAwB,IAAI,CAAC,CAAA;IACrD,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,EAAU,CAAA;IAC5C,MAAM,kBAAkB,GAAG,KAAK,CAAC,MAAM,EAAU,CAAA;IACjD,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,EAAU,CAAA;IAC5C,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,EAAiB,CAAA;IACrD,MAAM,wBAAwB,GAAG,KAAK,CAAC,MAAM,EAAU,CAAA;IACvD,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,EAAW,CAAA;IAE1C,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAY,CAAA;IACxE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAS,CAAA;IACzD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAU,KAAK,CAAC,CAAA;IAChE,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAA;IACxC,MAAM,CAAC,yBAAyB,EAAE,4BAA4B,CAAC,GAC7D,KAAK,CAAC,QAAQ,EAIV,CAAA;IACN,6GAA6G;IAC7G,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,GACnD,KAAK,CAAC,QAAQ,EAAoB,CAAA;IAEpC,MAAM,iCAAiC,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;;QAC/D,MAAM,eAAe,GAAG,MAAA,eAAe,CAAC,OAAO,0CAAE,QAAQ,CACtD,OAAO,GACP,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;QAErC,QAAQ,CAAC,OAAO,EAAE;YAChB,KAAK,EAAE;gBACL,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;gBAChB,YAAY,EAAE,eAAe;gBAC7B,SAAS,EAAE,eAAe;aAC3B;SACF,CAAC,CAAA;QAEF,UAAU,EAAE,CAAA;IACd,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAA;IAE1C,MAAM,4BAA4B,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;;QAC1D,MAAM,IAAI,GAAG,MAAA,UAAU,CAAC,OAAO,0CAAE,IAAI,CAAA;QACrC,MAAM,QAAQ,GAAG,MAAA,UAAU,CAAC,OAAO,0CAAE,MAAM,CAAC,QAAQ,CAAA;QACpD,MAAM,SAAS,GAAG,MAAA,UAAU,CAAC,OAAO,0CAAE,MAAM,CAAC,SAAS,CAAA;QACtD,IAAI,IAAI,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC;YAClC,QAAQ,CAAC,OAAO,EAAE;gBAChB,KAAK,EAAE;oBACL,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;oBAChB,IAAI,EAAE;wBACJ,IAAI;wBACJ,QAAQ;wBACR,SAAS;qBACV;iBACF;aACF,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAA;IAE9B,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;;QACnB,IAAI,OAAO,CAAC,QAAQ;YAAE,OAAM;QAC5B,2DAA2D;QAC3D,2EAA2E;QAC3E,mEAAmE;QACnE,MAAM,cAAc,GAAG,MAAA,aAAa,CAAC,OAAO,0CAAE,EAAE,CAC9C,QAAQ,EACR,CAAC,WAAW,EAAE,EAAE;YACd,IAAI,WAAW,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;gBACrC,IAAI,yBAAyB,EAAE,CAAC;oBAC9B,WAAW,CAAC,OAAO,CAAC,UAAU,GAAG;wBAC/B,IAAI,EAAE,yBAAyB,CAAC,KAAK;wBACrC,KAAK,EAAE,yBAAyB,CAAC,KAAK;wBACtC,WAAW,EAAE,yBAAyB,CAAC,WAAW;qBACnD,CAAA;oBACD,4BAA4B,CAAC,SAAS,CAAC,CAAA;gBACzC,CAAC;gBACD,iCAAiC,EAAE,CAAA;YACrC,CAAC;YACD,IAAI,WAAW,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACnC,4BAA4B,CAAC,SAAS,CAAC,CAAA;YACzC,CAAC;QACH,CAAC,CACF,CAAA;QAED,MAAM,cAAc,GAAG,MAAA,aAAa,CAAC,OAAO,0CAAE,EAAE,CAC9C,QAAQ,EACR,CAAC,WAAW,EAAE,EAAE;YACd,IAAI,WAAW,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;gBACrC,kFAAkF;gBAClF,IACE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;oBACzD,wBAAwB,CAAC,OAAO,EAChC,CAAC;oBACD,iCAAiC,EAAE,CAAA;gBACrC,CAAC;gBACD,wBAAwB,CAAC,OAAO,GAAG,SAAS,CAAA;YAC9C,CAAC;YACD,IAAI,WAAW,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;gBAClC,wBAAwB,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAC/C,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAClD,CAAA;YACH,CAAC;QACH,CAAC,CACF,CAAA;QAED,MAAM,cAAc,GAAG,MAAA,aAAa,CAAC,OAAO,0CAAE,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;;YAC9D,MAAA,UAAU,CAAC,OAAO,0CAAE,UAAU,EAAE,CAAA;YAChC,iCAAiC,EAAE,CAAA;QACrC,CAAC,CAAC,CAAA;QAEF,MAAM,qBAAqB,GAAG,MAAA,UAAU,CAAC,OAAO,0CAAE,KAAK,CACrD,YAAY,EACZ,GAAG,EAAE;;YACH,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAA;YAClC,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBAClC,MAAM,cAAc,GAClB,OAAO,CAAC,IAAI,MAAK,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,0CAAE,IAAI,CAAA;oBAClC,OAAO,CAAC,MAAM,CAAC,SAAS,MAAK,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,0CAAE,SAAS,CAAA;oBACnD,OAAO,CAAC,MAAM,CAAC,QAAQ,MAAK,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,0CAAE,QAAQ,CAAA,CAAA;gBACnD,IAAI,cAAc,EAAE,CAAC;oBACnB,4BAA4B,EAAE,CAAA;gBAChC,CAAC;YACH,CAAC;QACH,CAAC,CACF,CAAA;QAED,MAAM,kBAAkB,GAAG,MAAA,aAAa,CAAC,OAAO,0CAAE,SAAS,CAAC,KAAK,CAC/D,YAAY,EACZ,GAAG,EAAE;;YACH,IAAI,yBAAyB,EAAE,CAAC;gBAC9B,OAAM;YACR,CAAC;YACD,MAAM,UAAU,GAAG,MAAA,aAAa,CAAC,OAAO,0CAAE,UAAU,CAAA;YACpD,MAAM,0BAA0B,GAAG,CAAC,CAAC,CAAA,MAAA,MAAA,MAAA,OAAO,CAAC,mBAAmB,0CAAE,IAAI,CACpE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CACnC,0CAAE,uBAAuB,0CAAE,MAAM,CAAA,CAAA;YAElC,IAAI,UAAU,EAAE,CAAC;gBACf,IACE,0BAA0B;oBAC1B,CAAC,UAAU,KAAK,OAAO;wBACrB,UAAU,KAAK,SAAS;wBACxB,UAAU,KAAK,QAAQ;wBACvB,UAAU,KAAK,WAAW;wBAC1B,UAAU,KAAK,UAAU,CAAC,EAC5B,CAAC;oBACD,uEAAuE;oBACvE,0EAA0E;oBAC1E,MAAA,aAAa,CAAC,OAAO,0CAAE,MAAM,EAAE,CAAA;oBAC/B,uBAAuB,CAAC,UAAU,CAAC,CAAA;gBACrC,CAAC;qBAAM,CAAC;oBACN,uBAAuB,CAAC,SAAS,CAAC,CAAA;gBACpC,CAAC;YACH,CAAC;QACH,CAAC,CACF,CAAA;QAED,MAAA,UAAU,CAAC,OAAO,0CAAE,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;;YACxC,MAAA,UAAU,CAAC,OAAO,0CAAE,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;;gBACnD,oFAAoF;gBACpF,wEAAwE;gBACxE,kFAAkF;gBAClF,oDAAoD;gBACpD,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO;qBAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC;qBACnC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;gBAE5C,IAAI,MAAM,EAAE,CAAC;oBACX,MAAA,UAAU,CAAC,OAAO,0CAAE,SAAS,CAAC;wBAC5B,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK;wBACtC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW;qBAC/C,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,OAAO,GAAG,EAAE;YACV,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,MAAM,EAAE,CAAA;YACxB,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,MAAM,EAAE,CAAA;YACxB,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,MAAM,EAAE,CAAA;YACxB,qBAAqB,aAArB,qBAAqB,uBAArB,qBAAqB,CAAE,MAAM,EAAE,CAAA;YAC/B,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,MAAM,EAAE,CAAA;QAC9B,CAAC,CAAA;IACH,CAAC,EAAE;QACD,SAAS;QACT,KAAK;QACL,iCAAiC;QACjC,4BAA4B;QAC5B,OAAO;QACP,yBAAyB;KAC1B,CAAC,CAAA;IAEF,MAAM,uBAAuB,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;;QACrD,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAA;QAC/B,MAAM,GAAG,GAAG,MAAA,UAAU,CAAC,OAAO,0CAAE,GAAG,CAAA;QACnC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG;YAAE,OAAM;QAEzB,MAAM,WAAW,GAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,0CAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QACnD,kDAAkD;QAClD,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,QAAiB,EAAE,EAAE,EAAE,EAAE;gBACtE,IAAI,CAAC,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,QAAQ,CAAC,EAAE,CAAC,CAAA,EAAE,CAAC;oBAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;oBACzD,IAAI,KAAK;wBAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACjC,CAAC;gBACD,OAAO,QAAQ,CAAA;YACjB,CAAC,EAAE,EAAE,CAAC,CAAA;YACN,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,CAAA;QACvC,CAAC;QAED,IAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,EAAE,CAAC;YAClB,iEAAiE;YACjE,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjC,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CACnC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CACvC,CAAA;gBACD,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnB,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC;wBACjC,KAAK,EAAE,KAAK,CAAC,KAAe;wBAC5B,EAAE,EAAE,KAAK,CAAC,EAAE;qBACb,CAAC,CAAA;oBACF,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;oBAChE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;gBAC1B,CAAC;qBAAM,IAAI,aAAa,IAAI,aAAa,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;oBAC9D,MAAM,oBAAoB,GAAG,aAA8B,CAAA;oBAC3D,oBAAoB,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;oBACxC,oBAAoB,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAA;oBACzC,oBAAoB,CAAC,OAAO,CAC1B,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAC/C,CAAA;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,0CAA0C;QAC1C,kBAAkB,CAAC,WAAW,CAAC,CAAA;QAE/B,sCAAsC;QACtC,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAA;QAC5C,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,YAAY,KAAI,YAAY,EAAE,CAAC;YACxC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;YAC/B,YAAY,CAAC,SAAS,EAAE,CAAA;YACxB,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACxE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QAC9B,CAAC;QACD,IAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAA;YAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC;gBACtB,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ;gBAC7B,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS;aAChC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,CAAA;IAE5B,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,SAAS,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACrC,uBAAuB,EAAE,CAAA;QAC3B,CAAC;QACD,mFAAmF;QACnF,uDAAuD;IACzD,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAA;IAEtB,MAAM,yBAAyB,GAAG,kCAAkC,OAAO,CAAC,EAAE,EAAE,CAAA;IAEhF,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;;YACzB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC;oBACrB,UAAU,EAAE;wBACV,EAAE,EAAE,OAAO,CAAC,QAAQ;qBACrB;oBACD,OAAO,EAAE,OAAO,CAAC,SAAS,IAAI,SAAS;iBACxC,CAAC,CAAA;gBACF,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;gBAEhB,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC;oBACvB,GAAG,EAAE,GAAG;oBACR,SAAS,EAAE,GAAG,CAAC,OAAO,IAAI,SAAS;oBACnC,KAAK,EAAE,IAAI,KAAK,CAAC;wBACf,WAAW,EAAE,IAAI;wBACjB,WAAW,EAAE;4BACX,aAAa,EAAE,KAAK;4BACpB,UAAU,EAAE,KAAK;4BACjB,QAAQ,EAAE,aAAa;yBACxB;qBACF,CAAC;iBACH,CAAC,CAAA;gBAEF,yBAAyB;gBACzB,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAA;gBAC1C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;oBACnC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;gBAC3B,CAAC;gBAED,IAAI,OAAO,CAAC,0BAA0B,EAAE,CAAC;oBACvC,IAAI,CAAC,EAAE,CAAC,GAAG,CACT,IAAI,MAAM,CAAC;wBACT,IAAI;qBACL,CAAC,EACF,UAAU,CACX,CAAA;gBACH,CAAC;gBAED,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;oBAC9B,IAAI,CAAC,EAAE,CAAC,GAAG,CACT,IAAI,IAAI,CAAC;wBACP,IAAI;qBACL,CAAC,EACF,UAAU,CACX,CAAA;gBACH,CAAC;gBAED,IAAI,CAAC,EAAE,CAAC,GAAG,CACT,IAAI,IAAI,CAAC;oBACP,IAAI;iBACL,CAAC,EACF,cAAc,CACf,CAAA;gBAED,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC;oBAC9B,IAAI;iBACL,CAAC,CAAA;gBAEF,aAAa,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC;oBACjC,UAAU,EAAE,QAAQ;oBACpB,IAAI;oBACJ,OAAO,EAAE,SAAS;oBAClB,QAAQ,EAAE,OAAO,CAAC,cAAc;oBAChC,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,KAAK;iBACf,CAAC,CAAA;gBAEF,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;gBAE/C,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;gBAEnD,kBAAkB,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC;oBACtC,UAAU,EAAE,SAAS;oBACrB,IAAI;oBACJ,OAAO,EAAE,cAAc;oBACvB,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,KAAK;iBACf,CAAC,CAAA;gBAEF,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;gBAEnD,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAI,MAAA,OAAO,CAAC,mBAAmB,0CAAE,MAAM,CAAA,EAAE,CAAC;oBAC7D,MAAM,YAAY,GAAG,IAAI,aAAa,CAAC;wBACrC,EAAE,EAAE,IAAI,EAAE;wBACV,KAAK,EAAE,SAAS;qBACjB,CAAC,CAAA;oBACF,eAAe,CAAC,OAAO,GAAG,YAAY,CAAA;oBACtC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;oBAC5B,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;wBACxB,IAAI;wBACJ,KAAK,EAAE,YAAY;wBACnB,YAAY,EAAE,QAAQ;wBACtB,MAAM,EAAE,UAAU;wBAClB,oBAAoB,EAAE;4BACpB,OAAO;4BACP,UAAU;4BACV,SAAS;4BACT,WAAW;4BACX,QAAQ;yBACT,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE;;4BACtB,OAAA,MAAA,OAAO,CAAC,mBAAmB,0CAAE,IAAI,CAC/B,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CACnC,CAAA;yBAAA,CACF;wBACD,8BAA8B;wBAC9B,eAAe,EAAE;4BACf,eAAe,EAAE,KAAK;4BACtB,YAAY,EAAE,KAAK;4BACnB,YAAY,EAAE,KAAK;4BACnB,cAAc,EAAE;gCACd,iBAAiB,EAAE,KAAK;gCACxB,qBAAqB,EAAE,KAAK;6BAC7B;yBACF;qBACF,CAAC,CAAA;oBACF,aAAa,CAAC,OAAO,GAAG,MAAM,CAAA;oBAC9B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;oBACnC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,yBAAyB,EAAE,cAAc,CAAC,CAAA;gBACxD,CAAC;gBAED,2BAA2B;gBAC3B,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;oBACb,UAAU,CAAC,OAAO,GAAG,IAAI,CAAA;oBACzB,YAAY,CAAC,KAAK,CAAC,CAAA;gBACrB,CAAC,CAAC,CAAA;YACJ,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,4CAA4C,EAAE,CAAC,CAAC,CAAA;gBAC7D,YAAY,CAAC,CAAU,CAAC,CAAA;gBACxB,YAAY,CAAC,KAAK,CAAC,CAAA;YACrB,CAAC;QACH,CAAC,CAAA;QAED,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,YAAY,CAAC,IAAI,CAAC,CAAA;YAClB,OAAO,EAAE,CAAA;QACX,CAAC;IACH,CAAC,EAAE,CAAC,yBAAyB,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAA;IAE1D,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,aAAa,EAAE,CAAC;gBAClB,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;oBAC1B,aAAa,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAA;gBACtC,CAAC;gBACD,IAAI,kBAAkB,CAAC,OAAO,EAAE,CAAC;oBAC/B,kBAAkB,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI,CAAA;gBAC3C,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;oBAC1B,aAAa,CAAC,OAAO,CAAC,OAAO,GAAG,KAAK,CAAA;gBACvC,CAAC;gBACD,IAAI,kBAAkB,CAAC,OAAO,EAAE,CAAC;oBAC/B,kBAAkB,CAAC,OAAO,CAAC,OAAO,GAAG,KAAK,CAAA;gBAC5C,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,CAAA;IAE9B,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CACL,gCAAQ,SAAS,EAAC,WAAW;YAC3B,6BAAK,SAAS,EAAC,kCAAkC;gBAC/C,oBAAC,YAAY,IAAC,SAAS,EAAC,iDAAiD,YAE1D;gBACf,4BAAI,SAAS,EAAC,YAAY,6CAA4C;gBACtE,+BAAI,SAAS,CAAC,OAAO,CAAK,CACtB,CACC,CACV,CAAA;IACH,CAAC;IAED,OAAO,CACL;QACG,SAAS,IAAI,oBAAC,SAAS,OAAG;QAC3B,6BACE,SAAS,EAAC,gBAAgB,EAC1B,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,EAAE,sBACY,KAAK,CAAC,kBAAkB,CAAC,mBAC5B,OAAO,CAAC,QAAQ,GAC/B;QACF,6BAAK,EAAE,EAAE,yBAAyB,IAC/B,CAAC,CAAC,oBAAoB,IAAI,aAAa,CAAC,OAAO,IAAI,CAClD,oBAAC,kBAAkB,IACjB,OAAO,EACL,CAAA,MAAA,MAAA,OAAO,CAAC,mBAAmB,0CAAE,IAAI,CAC/B,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,oBAAoB,CAC7C,0CAAE,uBAAuB,KAAI,EAAE,EAElC,OAAO,EAAE,GAAG,EAAE,CAAC,uBAAuB,CAAC,SAAS,CAAC,EACjD,4BAA4B,EAAE,CAAC,GAAG,EAAE,EAAE;gBACpC,4BAA4B,CAAC,GAAG,CAAC,CAAA;YACnC,CAAC,EACD,cAAc,EAAE,oBAAoB,EACpC,UAAU,EAAE,aAAa,CAAC,OAAO,GACjC,CACH,CACG,CACL,CACJ,CAAA;AACH,CAAC;AAED,eAAe,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA","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 Popup from '@arcgis/core/widgets/Popup'\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; description?: string }[]\n onClose: () => void\n sketchTool: Sketch\n sketchToolType: SketchCreateTool\n setSelectedGraphicAttributes: (opt: {\n label: string\n value: string\n description?: string\n }) => 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, description }) => (\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, description })\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 description?: 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 description: selectedGraphicAttributes.description,\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 title: result.graphic.attributes.label,\n content: result.graphic.attributes.description,\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\n const newLayerIds = value?.layers?.map((l) => l.id)\n // remove map layers no longer in submission value\n if (overlayLayerIds) {\n const layersToRemove = overlayLayerIds.reduce((toRemove: Layer[], id) => {\n if (!newLayerIds?.includes(id)) {\n const layer = map.layers.find((layer) => layer.id === id)\n if (layer) toRemove.push(layer)\n }\n return toRemove\n }, [])\n map.layers.removeMany(layersToRemove)\n }\n\n if (value?.layers) {\n // determine if a layer is new or existing and handle accordingly\n for (const layer of value.layers) {\n const existingLayer = map.layers.find(\n (mapLayer) => mapLayer.id === layer.id,\n )\n if (!existingLayer) {\n const newLayer = new GraphicsLayer({\n title: layer.title as string,\n id: layer.id,\n })\n newLayer.addMany(layer.graphics.map((g) => Graphic.fromJSON(g)))\n map.layers.add(newLayer)\n } else if (existingLayer && existingLayer.type === 'graphics') {\n const existingGraphicLayer = existingLayer as GraphicsLayer\n existingGraphicLayer.title = layer.title\n existingGraphicLayer.graphics.removeAll()\n existingGraphicLayer.addMany(\n layer.graphics.map((g) => Graphic.fromJSON(g)),\n )\n }\n }\n }\n\n // finally, set the new layer ids in state\n setOverlayLayerIds(newLayerIds)\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 const drawingOptionsContainerId = `OneBlinkDrawingOptionsSelector-${element.id}`\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 popup: new Popup({\n dockEnabled: true,\n dockOptions: {\n buttonEnabled: false,\n breakpoint: false,\n position: 'bottom-left',\n },\n }),\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-right',\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 if (!element.readOnly && element.allowedDrawingTools?.length) {\n const drawingLayer = new GraphicsLayer({\n id: uuid(),\n title: 'Drawing',\n })\n drawingLayerRef.current = drawingLayer\n map.layers.add(drawingLayer)\n const sketch = new Sketch({\n view,\n layer: drawingLayer,\n creationMode: 'single',\n layout: 'vertical',\n availableCreateTools: [\n 'point',\n 'polyline',\n 'polygon',\n 'rectangle',\n 'circle',\n ].filter((createTool) =>\n element.allowedDrawingTools?.find(\n (tool) => tool.type === createTool,\n ),\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(drawingOptionsContainerId, '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 }, [drawingOptionsContainerId, 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 aria-required={element.required}\n />\n <div id={drawingOptionsContainerId}>\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"]}
@@ -160,7 +160,7 @@ function AutocompleteDropdown({ id, label, value, placeholder, required, disable
160
160
  'is-loading': isShowingLoading,
161
161
  'has-icons-right': isShowingValid || isShowingError,
162
162
  }) },
163
- React.createElement("input", { type: "text", placeholder: placeholder, id: id, autoComplete: autoComplete !== null && autoComplete !== void 0 ? autoComplete : 'off', className: "cypress-autocomplete-control input ob-input", required: required, value: label, disabled: disabled, onFocus: onFocus, onBlur: () => handleBlur({ label, value }), onKeyDown: onKeyDown, onChange: handleChangeLabel, "aria-describedby": props['aria-describedby'] }),
163
+ React.createElement("input", { type: "text", placeholder: placeholder, id: id, autoComplete: autoComplete !== null && autoComplete !== void 0 ? autoComplete : 'off', className: "cypress-autocomplete-control input ob-input", required: required, value: label, disabled: disabled, onFocus: onFocus, onBlur: () => handleBlur({ label, value }), onKeyDown: onKeyDown, onChange: handleChangeLabel, "aria-describedby": props['aria-describedby'], "aria-required": required }),
164
164
  isShowingValid && (React.createElement("span", { className: " ob-input-icon icon is-small is-right" },
165
165
  React.createElement(MaterialIcon, { className: "is-size-5 has-text-success" }, "check"))),
166
166
  isShowingError && (React.createElement("span", { className: " ob-input-icon icon is-small is-right" },
@@ -1 +1 @@
1
- {"version":3,"file":"AutocompleteDropdown.js","sourceRoot":"","sources":["../../../src/components/renderer/AutocompleteDropdown.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport clsx from 'clsx'\nimport { Sentry } from '@oneblink/apps'\n\nimport useBooleanState from '../../hooks/useBooleanState'\nimport { IsDirtyProps } from '../../types/form'\nimport { LookupNotificationContext } from '../../hooks/useLookupNotification'\nimport MaterialIcon from '../MaterialIcon'\n\ntype AutocompleteOption<T> = {\n label: string\n value: string\n data?: T\n}\n\ntype Props<T> = {\n id: string\n label: string\n value: unknown | undefined\n placeholder: string | undefined\n required: boolean | undefined\n disabled: boolean | undefined\n isLoading?: boolean\n hasError?: boolean\n validationMessage: string | undefined\n displayValidationMessage: boolean\n searchDebounceMs: number\n searchMinCharacters: number\n onChangeValue: (\n newValue: string | undefined,\n data?: T,\n ) => Promise<void> | void\n onChangeLabel: (newLabel: string) => void\n onSearch: (\n label: string,\n abortSignal: AbortSignal,\n ) => Promise<AutocompleteOption<T>[]>\n 'aria-describedby'?: string\n branding?: React.ReactNode\n autoComplete?: string\n} & IsDirtyProps\n\nfunction AutocompleteDropdown<T>({\n id,\n label,\n value,\n placeholder,\n required,\n disabled,\n validationMessage,\n displayValidationMessage,\n searchDebounceMs,\n searchMinCharacters,\n isLoading,\n hasError,\n onChangeValue,\n onChangeLabel,\n onSearch,\n isDirty,\n setIsDirty,\n branding,\n autoComplete,\n ...props\n}: Props<T>) {\n const optionsContainerElement = React.useRef<HTMLDivElement>(null)\n const [currentFocusedOptionIndex, setCurrentFocusedOptionIndex] =\n React.useState(0)\n const [options, setOptions] = React.useState<AutocompleteOption<T>[]>([])\n const [error, setError] = React.useState<Error | null>(null)\n const [isFetchingOptions, setIsFetchingOptions] = React.useState(false)\n const [isOpen, onOpen, onClose] = useBooleanState(false)\n\n const onSelectOption = React.useCallback(\n (option: AutocompleteOption<T>) => {\n onChangeLabel(option.label)\n onChangeValue(option.value, option.data)\n onClose()\n },\n [onChangeLabel, onChangeValue, onClose],\n )\n\n const handleClickOption = React.useCallback(\n (\n event: React.MouseEvent<HTMLAnchorElement, MouseEvent>,\n option: AutocompleteOption<T>,\n ) => {\n console.log('Selected element option in autocomplete', option)\n\n event.preventDefault()\n event.stopPropagation()\n\n onSelectOption(option)\n },\n [onSelectOption],\n )\n\n const onFocus = React.useCallback(() => {\n setCurrentFocusedOptionIndex(0)\n onOpen()\n }, [onOpen])\n\n // When moving away from the input, if this is no value remove\n // the label to show the user they have not selected a value\n const handleBlur = React.useCallback(\n (inputOption: { label: string; value: unknown | undefined }) => {\n setIsDirty()\n setError(null)\n onClose()\n\n if (Array.isArray(options)) {\n // If there is a label that resembles an option, set that option to be the new value.\n // UNLESS it was the previously selected label. Else, clear the label and the value.\n if (inputOption.label) {\n const lowerCase = inputOption.label.toLowerCase()\n const option = options.find(\n (option) => option.label.toLowerCase() === lowerCase,\n )\n if (option) {\n // If the new option is not equal to the option that is currently selected,\n // we want to update to the new option to ensure that it gets changed.\n if (inputOption.value !== option.value) {\n console.log('Setting value after blurring away from autocomplete')\n onSelectOption(option)\n }\n return\n }\n }\n\n console.log('Removing label after blurring away from autocomplete')\n onChangeValue(undefined)\n onChangeLabel('')\n }\n },\n [\n onChangeLabel,\n onChangeValue,\n onClose,\n onSelectOption,\n options,\n setIsDirty,\n ],\n )\n\n const onKeyDown = React.useCallback<\n React.KeyboardEventHandler<HTMLInputElement>\n >(\n (event) => {\n if (!options) {\n return\n }\n const enterPressed = event.keyCode === 13\n const upArrowPressed = event.keyCode === 38\n const downArrowPressed = event.keyCode === 40\n if (!upArrowPressed && !downArrowPressed && !enterPressed) {\n return\n }\n\n event.preventDefault()\n\n const previousFocusedOptionIndex = currentFocusedOptionIndex\n let nextFocusedOptionIndex = currentFocusedOptionIndex\n if (upArrowPressed) {\n nextFocusedOptionIndex = Math.max(0, currentFocusedOptionIndex - 1)\n } else if (downArrowPressed) {\n nextFocusedOptionIndex = Math.min(\n options.length - 1,\n currentFocusedOptionIndex + 1,\n )\n } else if (enterPressed) {\n const option = options[nextFocusedOptionIndex]\n if (option) {\n onSelectOption(option)\n }\n }\n\n // If the index has changed, need to ensure the active option is visible\n if (\n previousFocusedOptionIndex !== nextFocusedOptionIndex &&\n optionsContainerElement.current\n ) {\n const activeStepElement = optionsContainerElement.current.querySelector(\n `.ob-autocomplete__drop-down-item-${nextFocusedOptionIndex}`,\n )\n if (activeStepElement) {\n activeStepElement.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'start',\n })\n }\n setCurrentFocusedOptionIndex(nextFocusedOptionIndex)\n }\n },\n [currentFocusedOptionIndex, options, onSelectOption],\n )\n\n const handleChangeLabel = React.useCallback<\n React.ChangeEventHandler<HTMLInputElement>\n >(\n (e) => {\n const newLabel = e.target.value\n onOpen()\n setCurrentFocusedOptionIndex(0)\n\n onChangeLabel(newLabel)\n },\n [onChangeLabel, onOpen],\n )\n\n React.useEffect(() => {\n setError(null)\n\n if (!isOpen || label.length < searchMinCharacters) {\n setIsFetchingOptions(false)\n return\n }\n\n setIsFetchingOptions(true)\n\n let ignore = false\n const abortController = new AbortController()\n\n const timeoutId = setTimeout(async () => {\n let newOptions: AutocompleteOption<T>[] = []\n let newError = null\n\n try {\n newOptions = await onSearch(label, abortController.signal)\n } catch (error) {\n // Cancelling will throw an error.\n if (!abortController.signal.aborted) {\n console.warn('Error while fetching autocomplete options', error)\n Sentry.captureException(error)\n newError = error as Error\n }\n }\n if (!ignore) {\n setError(newError)\n setOptions(newOptions)\n setIsFetchingOptions(false)\n }\n }, searchDebounceMs)\n\n return () => {\n ignore = true\n clearTimeout(timeoutId)\n abortController.abort()\n }\n }, [isOpen, label, onSearch, searchDebounceMs, searchMinCharacters])\n\n React.useEffect(() => {\n //If there is no value set, we want to clear the label\n //This is to satisfy lookups that return undefined.\n if (!value) {\n onChangeLabel('')\n }\n }, [onChangeLabel, value])\n const { isLookingUp } = React.useContext(LookupNotificationContext)\n\n const isShowingLoading = isFetchingOptions || !!isLoading\n const isShowingValid = !isShowingLoading && value !== undefined\n const isShowingError = !isShowingLoading && !isLookingUp && !!hasError\n\n return (\n <>\n <div\n className={clsx('dropdown', {\n 'is-active': isOpen && Array.isArray(options),\n })}\n >\n <div className=\"field\">\n <div\n className={clsx(\n 'cypress-autocomplete-field-control control is-expanded',\n {\n 'is-loading': isShowingLoading,\n 'has-icons-right': isShowingValid || isShowingError,\n },\n )}\n >\n <input\n type=\"text\"\n placeholder={placeholder}\n id={id}\n autoComplete={autoComplete ?? 'off'}\n className=\"cypress-autocomplete-control input ob-input\"\n required={required}\n value={label}\n disabled={disabled}\n onFocus={onFocus}\n onBlur={() => handleBlur({ label, value })}\n onKeyDown={onKeyDown}\n onChange={handleChangeLabel}\n aria-describedby={props['aria-describedby']}\n />\n {isShowingValid && (\n <span className=\" ob-input-icon icon is-small is-right\">\n <MaterialIcon className=\"is-size-5 has-text-success\">\n check\n </MaterialIcon>\n </span>\n )}\n {isShowingError && (\n <span className=\" ob-input-icon icon is-small is-right\">\n <MaterialIcon className=\"is-size-5 has-text-danger\">\n error\n </MaterialIcon>\n </span>\n )}\n </div>\n </div>\n\n <div className=\"dropdown-menu\">\n <div\n ref={optionsContainerElement}\n className=\"ob-autocomplete__dropdown-content dropdown-content cypress-autocomplete-dropdown-content\"\n >\n {error ? (\n <a className=\"dropdown-item cypress-autocomplete-error ob-autocomplete__drop-down-item-error\">\n <span className=\"has-text-danger\">{error.message}</span>\n </a>\n ) : label.length < searchMinCharacters ? (\n <a className=\"dropdown-item cypress-max-characters ob-autocomplete__drop-down-item-max-characters\">\n <i>\n Enter at least {searchMinCharacters} character(s) to search\n </i>\n </a>\n ) : isShowingLoading ? (\n <a className=\"dropdown-item cypress-searching-options ob-autocomplete__drop-down-item-searching\">\n <i>Searching...</i>\n </a>\n ) : options && options.length ? (\n options.map((option, index) => (\n <a\n key={option.value}\n className={clsx(\n `dropdown-item cypress-autocomplete-dropdown-item ob-autocomplete__drop-down-item-${index}`,\n {\n 'is-active': currentFocusedOptionIndex === index,\n },\n )}\n onMouseDown={(e) => handleClickOption(e, option)}\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{\n __html: highlightLabel(option.label, label),\n }}\n />\n ))\n ) : (\n <a className=\"dropdown-item cypress-no-matches-found ob-autocomplete__drop-down-item-no-matches\">\n <i>No matches found</i>\n </a>\n )}\n {branding}\n </div>\n </div>\n </div>\n\n {(isDirty || displayValidationMessage) &&\n !!validationMessage &&\n !isShowingLoading && (\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 </>\n )\n}\n\nexport default React.memo(AutocompleteDropdown) as typeof AutocompleteDropdown\n\nfunction highlightLabel(text: string, phrase: string) {\n if (phrase) {\n text = text.replace(\n new RegExp(\n '(' +\n phrase.replace(\n /[`~!@#$%^&*()_|+\\-=?;:'\",.<>{}[\\]\\\\/]/gi,\n (char: string) => `\\\\${char}`,\n ) +\n ')',\n 'gi',\n ),\n '<b>$1</b>',\n )\n }\n\n return text\n}\n"]}
1
+ {"version":3,"file":"AutocompleteDropdown.js","sourceRoot":"","sources":["../../../src/components/renderer/AutocompleteDropdown.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport clsx from 'clsx'\nimport { Sentry } from '@oneblink/apps'\n\nimport useBooleanState from '../../hooks/useBooleanState'\nimport { IsDirtyProps } from '../../types/form'\nimport { LookupNotificationContext } from '../../hooks/useLookupNotification'\nimport MaterialIcon from '../MaterialIcon'\n\ntype AutocompleteOption<T> = {\n label: string\n value: string\n data?: T\n}\n\ntype Props<T> = {\n id: string\n label: string\n value: unknown | undefined\n placeholder: string | undefined\n required: boolean | undefined\n disabled: boolean | undefined\n isLoading?: boolean\n hasError?: boolean\n validationMessage: string | undefined\n displayValidationMessage: boolean\n searchDebounceMs: number\n searchMinCharacters: number\n onChangeValue: (\n newValue: string | undefined,\n data?: T,\n ) => Promise<void> | void\n onChangeLabel: (newLabel: string) => void\n onSearch: (\n label: string,\n abortSignal: AbortSignal,\n ) => Promise<AutocompleteOption<T>[]>\n 'aria-describedby'?: string\n branding?: React.ReactNode\n autoComplete?: string\n} & IsDirtyProps\n\nfunction AutocompleteDropdown<T>({\n id,\n label,\n value,\n placeholder,\n required,\n disabled,\n validationMessage,\n displayValidationMessage,\n searchDebounceMs,\n searchMinCharacters,\n isLoading,\n hasError,\n onChangeValue,\n onChangeLabel,\n onSearch,\n isDirty,\n setIsDirty,\n branding,\n autoComplete,\n ...props\n}: Props<T>) {\n const optionsContainerElement = React.useRef<HTMLDivElement>(null)\n const [currentFocusedOptionIndex, setCurrentFocusedOptionIndex] =\n React.useState(0)\n const [options, setOptions] = React.useState<AutocompleteOption<T>[]>([])\n const [error, setError] = React.useState<Error | null>(null)\n const [isFetchingOptions, setIsFetchingOptions] = React.useState(false)\n const [isOpen, onOpen, onClose] = useBooleanState(false)\n\n const onSelectOption = React.useCallback(\n (option: AutocompleteOption<T>) => {\n onChangeLabel(option.label)\n onChangeValue(option.value, option.data)\n onClose()\n },\n [onChangeLabel, onChangeValue, onClose],\n )\n\n const handleClickOption = React.useCallback(\n (\n event: React.MouseEvent<HTMLAnchorElement, MouseEvent>,\n option: AutocompleteOption<T>,\n ) => {\n console.log('Selected element option in autocomplete', option)\n\n event.preventDefault()\n event.stopPropagation()\n\n onSelectOption(option)\n },\n [onSelectOption],\n )\n\n const onFocus = React.useCallback(() => {\n setCurrentFocusedOptionIndex(0)\n onOpen()\n }, [onOpen])\n\n // When moving away from the input, if this is no value remove\n // the label to show the user they have not selected a value\n const handleBlur = React.useCallback(\n (inputOption: { label: string; value: unknown | undefined }) => {\n setIsDirty()\n setError(null)\n onClose()\n\n if (Array.isArray(options)) {\n // If there is a label that resembles an option, set that option to be the new value.\n // UNLESS it was the previously selected label. Else, clear the label and the value.\n if (inputOption.label) {\n const lowerCase = inputOption.label.toLowerCase()\n const option = options.find(\n (option) => option.label.toLowerCase() === lowerCase,\n )\n if (option) {\n // If the new option is not equal to the option that is currently selected,\n // we want to update to the new option to ensure that it gets changed.\n if (inputOption.value !== option.value) {\n console.log('Setting value after blurring away from autocomplete')\n onSelectOption(option)\n }\n return\n }\n }\n\n console.log('Removing label after blurring away from autocomplete')\n onChangeValue(undefined)\n onChangeLabel('')\n }\n },\n [\n onChangeLabel,\n onChangeValue,\n onClose,\n onSelectOption,\n options,\n setIsDirty,\n ],\n )\n\n const onKeyDown = React.useCallback<\n React.KeyboardEventHandler<HTMLInputElement>\n >(\n (event) => {\n if (!options) {\n return\n }\n const enterPressed = event.keyCode === 13\n const upArrowPressed = event.keyCode === 38\n const downArrowPressed = event.keyCode === 40\n if (!upArrowPressed && !downArrowPressed && !enterPressed) {\n return\n }\n\n event.preventDefault()\n\n const previousFocusedOptionIndex = currentFocusedOptionIndex\n let nextFocusedOptionIndex = currentFocusedOptionIndex\n if (upArrowPressed) {\n nextFocusedOptionIndex = Math.max(0, currentFocusedOptionIndex - 1)\n } else if (downArrowPressed) {\n nextFocusedOptionIndex = Math.min(\n options.length - 1,\n currentFocusedOptionIndex + 1,\n )\n } else if (enterPressed) {\n const option = options[nextFocusedOptionIndex]\n if (option) {\n onSelectOption(option)\n }\n }\n\n // If the index has changed, need to ensure the active option is visible\n if (\n previousFocusedOptionIndex !== nextFocusedOptionIndex &&\n optionsContainerElement.current\n ) {\n const activeStepElement = optionsContainerElement.current.querySelector(\n `.ob-autocomplete__drop-down-item-${nextFocusedOptionIndex}`,\n )\n if (activeStepElement) {\n activeStepElement.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'start',\n })\n }\n setCurrentFocusedOptionIndex(nextFocusedOptionIndex)\n }\n },\n [currentFocusedOptionIndex, options, onSelectOption],\n )\n\n const handleChangeLabel = React.useCallback<\n React.ChangeEventHandler<HTMLInputElement>\n >(\n (e) => {\n const newLabel = e.target.value\n onOpen()\n setCurrentFocusedOptionIndex(0)\n\n onChangeLabel(newLabel)\n },\n [onChangeLabel, onOpen],\n )\n\n React.useEffect(() => {\n setError(null)\n\n if (!isOpen || label.length < searchMinCharacters) {\n setIsFetchingOptions(false)\n return\n }\n\n setIsFetchingOptions(true)\n\n let ignore = false\n const abortController = new AbortController()\n\n const timeoutId = setTimeout(async () => {\n let newOptions: AutocompleteOption<T>[] = []\n let newError = null\n\n try {\n newOptions = await onSearch(label, abortController.signal)\n } catch (error) {\n // Cancelling will throw an error.\n if (!abortController.signal.aborted) {\n console.warn('Error while fetching autocomplete options', error)\n Sentry.captureException(error)\n newError = error as Error\n }\n }\n if (!ignore) {\n setError(newError)\n setOptions(newOptions)\n setIsFetchingOptions(false)\n }\n }, searchDebounceMs)\n\n return () => {\n ignore = true\n clearTimeout(timeoutId)\n abortController.abort()\n }\n }, [isOpen, label, onSearch, searchDebounceMs, searchMinCharacters])\n\n React.useEffect(() => {\n //If there is no value set, we want to clear the label\n //This is to satisfy lookups that return undefined.\n if (!value) {\n onChangeLabel('')\n }\n }, [onChangeLabel, value])\n const { isLookingUp } = React.useContext(LookupNotificationContext)\n\n const isShowingLoading = isFetchingOptions || !!isLoading\n const isShowingValid = !isShowingLoading && value !== undefined\n const isShowingError = !isShowingLoading && !isLookingUp && !!hasError\n\n return (\n <>\n <div\n className={clsx('dropdown', {\n 'is-active': isOpen && Array.isArray(options),\n })}\n >\n <div className=\"field\">\n <div\n className={clsx(\n 'cypress-autocomplete-field-control control is-expanded',\n {\n 'is-loading': isShowingLoading,\n 'has-icons-right': isShowingValid || isShowingError,\n },\n )}\n >\n <input\n type=\"text\"\n placeholder={placeholder}\n id={id}\n autoComplete={autoComplete ?? 'off'}\n className=\"cypress-autocomplete-control input ob-input\"\n required={required}\n value={label}\n disabled={disabled}\n onFocus={onFocus}\n onBlur={() => handleBlur({ label, value })}\n onKeyDown={onKeyDown}\n onChange={handleChangeLabel}\n aria-describedby={props['aria-describedby']}\n aria-required={required}\n />\n {isShowingValid && (\n <span className=\" ob-input-icon icon is-small is-right\">\n <MaterialIcon className=\"is-size-5 has-text-success\">\n check\n </MaterialIcon>\n </span>\n )}\n {isShowingError && (\n <span className=\" ob-input-icon icon is-small is-right\">\n <MaterialIcon className=\"is-size-5 has-text-danger\">\n error\n </MaterialIcon>\n </span>\n )}\n </div>\n </div>\n\n <div className=\"dropdown-menu\">\n <div\n ref={optionsContainerElement}\n className=\"ob-autocomplete__dropdown-content dropdown-content cypress-autocomplete-dropdown-content\"\n >\n {error ? (\n <a className=\"dropdown-item cypress-autocomplete-error ob-autocomplete__drop-down-item-error\">\n <span className=\"has-text-danger\">{error.message}</span>\n </a>\n ) : label.length < searchMinCharacters ? (\n <a className=\"dropdown-item cypress-max-characters ob-autocomplete__drop-down-item-max-characters\">\n <i>\n Enter at least {searchMinCharacters} character(s) to search\n </i>\n </a>\n ) : isShowingLoading ? (\n <a className=\"dropdown-item cypress-searching-options ob-autocomplete__drop-down-item-searching\">\n <i>Searching...</i>\n </a>\n ) : options && options.length ? (\n options.map((option, index) => (\n <a\n key={option.value}\n className={clsx(\n `dropdown-item cypress-autocomplete-dropdown-item ob-autocomplete__drop-down-item-${index}`,\n {\n 'is-active': currentFocusedOptionIndex === index,\n },\n )}\n onMouseDown={(e) => handleClickOption(e, option)}\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{\n __html: highlightLabel(option.label, label),\n }}\n />\n ))\n ) : (\n <a className=\"dropdown-item cypress-no-matches-found ob-autocomplete__drop-down-item-no-matches\">\n <i>No matches found</i>\n </a>\n )}\n {branding}\n </div>\n </div>\n </div>\n\n {(isDirty || displayValidationMessage) &&\n !!validationMessage &&\n !isShowingLoading && (\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 </>\n )\n}\n\nexport default React.memo(AutocompleteDropdown) as typeof AutocompleteDropdown\n\nfunction highlightLabel(text: string, phrase: string) {\n if (phrase) {\n text = text.replace(\n new RegExp(\n '(' +\n phrase.replace(\n /[`~!@#$%^&*()_|+\\-=?;:'\",.<>{}[\\]\\\\/]/gi,\n (char: string) => `\\\\${char}`,\n ) +\n ')',\n 'gi',\n ),\n '<b>$1</b>',\n )\n }\n\n return text\n}\n"]}
@@ -72,7 +72,7 @@ function FormElementAPINSWLiquorLicence({ formId, id, element, value, onChange,
72
72
  }, [value]);
73
73
  return (React.createElement("div", { className: "cypress-api-nsw-liquor-licence-element" },
74
74
  React.createElement(FormElementLabelContainer, { className: "ob-api-nsw-liquor-licence ob-autocomplete", id: id, element: element, required: element.required },
75
- React.createElement(AutocompleteDropdown, { id: id, label: label, disabled: element.readOnly || isLoading, placeholder: element.placeholderValue, required: element.required, value: value, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, onChangeValue: fetchAndSelectSingleLicence, isLoading: isLoading, hasError: !!error, onChangeLabel: setLabel, searchDebounceMs: 750, searchMinCharacters: 2, onSearch: handleSearch, isDirty: isDirty, setIsDirty: setIsDirty, "aria-describedby": ariaDescribedby, "aria-required": element.required, autoComplete: autocompleteAttributes })),
75
+ React.createElement(AutocompleteDropdown, { id: id, label: label, disabled: element.readOnly || isLoading, placeholder: element.placeholderValue, required: element.required, value: value, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, onChangeValue: fetchAndSelectSingleLicence, isLoading: isLoading, hasError: !!error, onChangeLabel: setLabel, searchDebounceMs: 750, searchMinCharacters: 2, onSearch: handleSearch, isDirty: isDirty, setIsDirty: setIsDirty, "aria-describedby": ariaDescribedby, autoComplete: autocompleteAttributes })),
76
76
  error && (React.createElement("div", { role: "alert", className: "has-margin-top-8" },
77
77
  React.createElement("div", { className: "has-text-danger ob-error__text cypress-api-nsw-liquor-licence-error-message" }, error.toString()))),
78
78
  React.createElement(Collapse, { in: !!value },
@@ -1 +1 @@
1
- {"version":3,"file":"FormElementAPINSWLiquorLicence.js","sourceRoot":"","sources":["../../src/form-elements/FormElementAPINSWLiquorLicence.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { FormTypes, APINSWTypes } from '@oneblink/types'\nimport { formService } from '@oneblink/apps'\nimport FormElementLabelContainer from '../components/renderer/FormElementLabelContainer'\nimport { FormElementValueChangeHandler, IsDirtyProps } from '../types/form'\nimport AutocompleteDropdown from '../components/renderer/AutocompleteDropdown'\nimport useIsMounted from '../hooks/useIsMounted'\nimport { Collapse, Grid } from '@mui/material'\nimport useElementAriaDescribedby from '../hooks/useElementAriaDescribedby'\nimport {\n NotificationGrid,\n NotificationGridItem,\n} from '../components/NotificationGrid'\n\ntype Props = {\n formId: number\n id: string\n element: FormTypes.APINSWLiquorLicenceElement\n value: APINSWTypes.LiquorLicenceDetails | undefined\n onChange: FormElementValueChangeHandler<APINSWTypes.LiquorLicenceDetails>\n displayValidationMessage: boolean\n validationMessage: string | undefined\n autocompleteAttributes?: string\n} & IsDirtyProps\n\nconst liquorLicenceClassPrefix = 'ob-api-nsw-liquor-licence__'\nfunction FormElementAPINSWLiquorLicence({\n formId,\n id,\n element,\n value,\n onChange,\n validationMessage,\n displayValidationMessage,\n isDirty,\n setIsDirty,\n autocompleteAttributes,\n}: Props) {\n const ariaDescribedby = useElementAriaDescribedby(id, element)\n const isMounted = useIsMounted()\n const [label, setLabel] = React.useState('')\n const [{ isLoading, error }, setState] = React.useState<{\n isLoading: boolean\n error: Error | null\n }>({\n isLoading: false,\n error: null,\n })\n\n const handleSearch = React.useCallback(\n async (searchText: string, abortSignal: AbortSignal) => {\n setState((current) => ({\n ...current,\n error: null,\n }))\n\n const results = await formService.searchAPINSWLiquorLicences(\n { formId, searchText },\n abortSignal,\n )\n\n return results.map((result, index) => ({\n value: result.licenceID || index.toString(),\n label:\n `${result.licenceNumber} | ${result.licenceName}`.trim() ||\n index.toString(),\n }))\n },\n [formId],\n )\n\n const fetchAndSelectSingleLicence = React.useCallback(\n async (newValue: string | undefined) => {\n console.log(`Selected: ${newValue}`)\n if (!newValue) {\n onChange(element, { value: undefined })\n return\n }\n setState((current) => ({\n ...current,\n isLoading: true,\n }))\n\n try {\n const result = await formService.getAPINSWLiquorLicence(\n formId,\n newValue,\n )\n if (result) {\n onChange(element, { value: result })\n }\n if (isMounted.current) {\n setState({\n isLoading: false,\n error: null,\n })\n }\n } catch (newError) {\n if (isMounted.current) {\n setState({\n isLoading: false,\n error: newError as Error,\n })\n }\n }\n },\n [element, formId, isMounted, onChange],\n )\n\n // Ensure the label is set if the value is set outside of this component\n React.useEffect(() => {\n if (value) {\n const newLabel =\n `${value?.licenceDetail?.licenceNumber} | ${value?.licenceDetail?.licenceName}`.trim()\n if (label !== newLabel) {\n setLabel(newLabel || '')\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value])\n\n return (\n <div className=\"cypress-api-nsw-liquor-licence-element\">\n <FormElementLabelContainer\n className=\"ob-api-nsw-liquor-licence ob-autocomplete\"\n id={id}\n element={element}\n required={element.required}\n >\n <AutocompleteDropdown\n id={id}\n label={label}\n disabled={element.readOnly || isLoading}\n placeholder={element.placeholderValue}\n required={element.required}\n value={value}\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n onChangeValue={fetchAndSelectSingleLicence}\n isLoading={isLoading}\n hasError={!!error}\n onChangeLabel={setLabel}\n searchDebounceMs={750}\n searchMinCharacters={2}\n onSearch={handleSearch}\n isDirty={isDirty}\n setIsDirty={setIsDirty}\n aria-describedby={ariaDescribedby}\n aria-required={element.required}\n autoComplete={autocompleteAttributes}\n />\n </FormElementLabelContainer>\n\n {error && (\n <div role=\"alert\" className=\"has-margin-top-8\">\n <div className=\"has-text-danger ob-error__text cypress-api-nsw-liquor-licence-error-message\">\n {error.toString()}\n </div>\n </div>\n )}\n <Collapse in={!!value}>\n <NotificationGrid\n className={`${liquorLicenceClassPrefix}record-display has-margin-top-6`}\n gridClassName={`${liquorLicenceClassPrefix}container`}\n >\n {value?.licenceDetail?.licenceName && (\n <Grid\n item\n xs={12}\n className={`${liquorLicenceClassPrefix}licenceName`}\n >\n <h6\n className={`is-size-5 has-text-weight-semibold ${liquorLicenceClassPrefix}name`}\n >\n {value?.licenceDetail?.licenceName}\n </h6>\n </Grid>\n )}\n <LicenceDetailGridItem\n label=\"Licence Number\"\n value={value?.licenceDetail?.licenceNumber}\n classNameSuffix=\"licenceNumber\"\n />\n <LicenceDetailGridItem\n label=\"Licence Type\"\n value={value?.licenceDetail?.licenceTypeName}\n classNameSuffix=\"licenceTypeName\"\n />\n <LicenceDetailGridItem\n label=\"Licensee\"\n value={value?.licenceDetail?.licensee}\n classNameSuffix=\"licensee\"\n />\n <LicenceDetailGridItem\n label=\"Licensee Birth Date\"\n value={value?.licenceDetail?.licenseeBirthdate}\n classNameSuffix=\"licenseeBirthdate\"\n />\n <LicenceDetailGridItem\n label=\"Licencee ABN\"\n value={value?.licenceDetail?.licenceeABN}\n classNameSuffix=\"licenceeABN\"\n />\n <LicenceDetailGridItem\n label=\"Licencee ACN\"\n value={value?.licenceDetail?.licenceeACN}\n classNameSuffix=\"licenceeACN\"\n />\n <LicenceDetailGridItem\n label=\"Refused Date\"\n value={value?.licenceDetail?.refusedDate}\n classNameSuffix=\"refusedDate\"\n />\n <LicenceDetailGridItem\n label=\"Start Date\"\n value={value?.licenceDetail?.startDate}\n classNameSuffix=\"startDate\"\n />\n <LicenceDetailGridItem\n label=\"Expiry Date\"\n value={value?.licenceDetail?.expiryDate}\n classNameSuffix=\"expiryDate\"\n />\n <LicenceDetailGridItem\n label=\"Status\"\n value={value?.licenceDetail?.status}\n classNameSuffix=\"status\"\n />\n <LicenceDetailGridItem\n label=\"Address Type\"\n value={value?.licenceDetail?.addressType}\n classNameSuffix=\"addressType\"\n />\n <LicenceDetailGridItem\n label=\"Address\"\n value={value?.licenceDetail?.address}\n classNameSuffix=\"address\"\n fullWidth\n />\n </NotificationGrid>\n </Collapse>\n </div>\n )\n}\n\nexport function LicenceDetailGridItem({\n label,\n value,\n classNameSuffix,\n fullWidth,\n}: {\n label: string\n value: string | undefined\n classNameSuffix: string\n fullWidth?: boolean\n}) {\n return (\n <NotificationGridItem\n className={`${liquorLicenceClassPrefix}${classNameSuffix}`}\n fullWidth={fullWidth}\n value={value}\n label={label}\n labelClassName={`${liquorLicenceClassPrefix}detail-label`}\n valueClassName={`${liquorLicenceClassPrefix}detail-value`}\n />\n )\n}\n\nexport default React.memo(FormElementAPINSWLiquorLicence)\n"]}
1
+ {"version":3,"file":"FormElementAPINSWLiquorLicence.js","sourceRoot":"","sources":["../../src/form-elements/FormElementAPINSWLiquorLicence.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { FormTypes, APINSWTypes } from '@oneblink/types'\nimport { formService } from '@oneblink/apps'\nimport FormElementLabelContainer from '../components/renderer/FormElementLabelContainer'\nimport { FormElementValueChangeHandler, IsDirtyProps } from '../types/form'\nimport AutocompleteDropdown from '../components/renderer/AutocompleteDropdown'\nimport useIsMounted from '../hooks/useIsMounted'\nimport { Collapse, Grid } from '@mui/material'\nimport useElementAriaDescribedby from '../hooks/useElementAriaDescribedby'\nimport {\n NotificationGrid,\n NotificationGridItem,\n} from '../components/NotificationGrid'\n\ntype Props = {\n formId: number\n id: string\n element: FormTypes.APINSWLiquorLicenceElement\n value: APINSWTypes.LiquorLicenceDetails | undefined\n onChange: FormElementValueChangeHandler<APINSWTypes.LiquorLicenceDetails>\n displayValidationMessage: boolean\n validationMessage: string | undefined\n autocompleteAttributes?: string\n} & IsDirtyProps\n\nconst liquorLicenceClassPrefix = 'ob-api-nsw-liquor-licence__'\nfunction FormElementAPINSWLiquorLicence({\n formId,\n id,\n element,\n value,\n onChange,\n validationMessage,\n displayValidationMessage,\n isDirty,\n setIsDirty,\n autocompleteAttributes,\n}: Props) {\n const ariaDescribedby = useElementAriaDescribedby(id, element)\n const isMounted = useIsMounted()\n const [label, setLabel] = React.useState('')\n const [{ isLoading, error }, setState] = React.useState<{\n isLoading: boolean\n error: Error | null\n }>({\n isLoading: false,\n error: null,\n })\n\n const handleSearch = React.useCallback(\n async (searchText: string, abortSignal: AbortSignal) => {\n setState((current) => ({\n ...current,\n error: null,\n }))\n\n const results = await formService.searchAPINSWLiquorLicences(\n { formId, searchText },\n abortSignal,\n )\n\n return results.map((result, index) => ({\n value: result.licenceID || index.toString(),\n label:\n `${result.licenceNumber} | ${result.licenceName}`.trim() ||\n index.toString(),\n }))\n },\n [formId],\n )\n\n const fetchAndSelectSingleLicence = React.useCallback(\n async (newValue: string | undefined) => {\n console.log(`Selected: ${newValue}`)\n if (!newValue) {\n onChange(element, { value: undefined })\n return\n }\n setState((current) => ({\n ...current,\n isLoading: true,\n }))\n\n try {\n const result = await formService.getAPINSWLiquorLicence(\n formId,\n newValue,\n )\n if (result) {\n onChange(element, { value: result })\n }\n if (isMounted.current) {\n setState({\n isLoading: false,\n error: null,\n })\n }\n } catch (newError) {\n if (isMounted.current) {\n setState({\n isLoading: false,\n error: newError as Error,\n })\n }\n }\n },\n [element, formId, isMounted, onChange],\n )\n\n // Ensure the label is set if the value is set outside of this component\n React.useEffect(() => {\n if (value) {\n const newLabel =\n `${value?.licenceDetail?.licenceNumber} | ${value?.licenceDetail?.licenceName}`.trim()\n if (label !== newLabel) {\n setLabel(newLabel || '')\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value])\n\n return (\n <div className=\"cypress-api-nsw-liquor-licence-element\">\n <FormElementLabelContainer\n className=\"ob-api-nsw-liquor-licence ob-autocomplete\"\n id={id}\n element={element}\n required={element.required}\n >\n <AutocompleteDropdown\n id={id}\n label={label}\n disabled={element.readOnly || isLoading}\n placeholder={element.placeholderValue}\n required={element.required}\n value={value}\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n onChangeValue={fetchAndSelectSingleLicence}\n isLoading={isLoading}\n hasError={!!error}\n onChangeLabel={setLabel}\n searchDebounceMs={750}\n searchMinCharacters={2}\n onSearch={handleSearch}\n isDirty={isDirty}\n setIsDirty={setIsDirty}\n aria-describedby={ariaDescribedby}\n autoComplete={autocompleteAttributes}\n />\n </FormElementLabelContainer>\n\n {error && (\n <div role=\"alert\" className=\"has-margin-top-8\">\n <div className=\"has-text-danger ob-error__text cypress-api-nsw-liquor-licence-error-message\">\n {error.toString()}\n </div>\n </div>\n )}\n <Collapse in={!!value}>\n <NotificationGrid\n className={`${liquorLicenceClassPrefix}record-display has-margin-top-6`}\n gridClassName={`${liquorLicenceClassPrefix}container`}\n >\n {value?.licenceDetail?.licenceName && (\n <Grid\n item\n xs={12}\n className={`${liquorLicenceClassPrefix}licenceName`}\n >\n <h6\n className={`is-size-5 has-text-weight-semibold ${liquorLicenceClassPrefix}name`}\n >\n {value?.licenceDetail?.licenceName}\n </h6>\n </Grid>\n )}\n <LicenceDetailGridItem\n label=\"Licence Number\"\n value={value?.licenceDetail?.licenceNumber}\n classNameSuffix=\"licenceNumber\"\n />\n <LicenceDetailGridItem\n label=\"Licence Type\"\n value={value?.licenceDetail?.licenceTypeName}\n classNameSuffix=\"licenceTypeName\"\n />\n <LicenceDetailGridItem\n label=\"Licensee\"\n value={value?.licenceDetail?.licensee}\n classNameSuffix=\"licensee\"\n />\n <LicenceDetailGridItem\n label=\"Licensee Birth Date\"\n value={value?.licenceDetail?.licenseeBirthdate}\n classNameSuffix=\"licenseeBirthdate\"\n />\n <LicenceDetailGridItem\n label=\"Licencee ABN\"\n value={value?.licenceDetail?.licenceeABN}\n classNameSuffix=\"licenceeABN\"\n />\n <LicenceDetailGridItem\n label=\"Licencee ACN\"\n value={value?.licenceDetail?.licenceeACN}\n classNameSuffix=\"licenceeACN\"\n />\n <LicenceDetailGridItem\n label=\"Refused Date\"\n value={value?.licenceDetail?.refusedDate}\n classNameSuffix=\"refusedDate\"\n />\n <LicenceDetailGridItem\n label=\"Start Date\"\n value={value?.licenceDetail?.startDate}\n classNameSuffix=\"startDate\"\n />\n <LicenceDetailGridItem\n label=\"Expiry Date\"\n value={value?.licenceDetail?.expiryDate}\n classNameSuffix=\"expiryDate\"\n />\n <LicenceDetailGridItem\n label=\"Status\"\n value={value?.licenceDetail?.status}\n classNameSuffix=\"status\"\n />\n <LicenceDetailGridItem\n label=\"Address Type\"\n value={value?.licenceDetail?.addressType}\n classNameSuffix=\"addressType\"\n />\n <LicenceDetailGridItem\n label=\"Address\"\n value={value?.licenceDetail?.address}\n classNameSuffix=\"address\"\n fullWidth\n />\n </NotificationGrid>\n </Collapse>\n </div>\n )\n}\n\nexport function LicenceDetailGridItem({\n label,\n value,\n classNameSuffix,\n fullWidth,\n}: {\n label: string\n value: string | undefined\n classNameSuffix: string\n fullWidth?: boolean\n}) {\n return (\n <NotificationGridItem\n className={`${liquorLicenceClassPrefix}${classNameSuffix}`}\n fullWidth={fullWidth}\n value={value}\n label={label}\n labelClassName={`${liquorLicenceClassPrefix}detail-label`}\n valueClassName={`${liquorLicenceClassPrefix}detail-value`}\n />\n )\n}\n\nexport default React.memo(FormElementAPINSWLiquorLicence)\n"]}
@@ -20,7 +20,7 @@ function FormElementArcGISWebMap({ id, element, value, onChange, displayValidati
20
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,
21
21
  React.createElement(OnLoading, null),
22
22
  React.createElement("div", { className: "arcgis-web-map" })) },
23
- React.createElement(ArcGISWebMap, { element: element, id: id, "aria-describedby": ariaDescribedby, "aria-required": element.required, value: value, onChange: onChange, setIsDirty: setIsDirty }))),
23
+ React.createElement(ArcGISWebMap, { element: element, id: id, "aria-describedby": ariaDescribedby, value: value, onChange: onChange, setIsDirty: setIsDirty }))),
24
24
  isDisplayingValidationMessage && (React.createElement("div", { role: "alert", className: "has-margin-top-8" },
25
25
  React.createElement("div", { className: "has-text-danger ob-error__text cypress-validation-message" }, validationMessage))))));
26
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,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,mBAClB,OAAO,CAAC,QAAQ,EAC/B,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 aria-required={element.required}\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"]}
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"]}
@@ -45,7 +45,7 @@ const AutocompleteFilter = React.memo(function AutocompleteFilter({ id, element,
45
45
  return (React.createElement("div", { className: "cypress-autocomplete-filter-element" },
46
46
  React.createElement(FormElementLabelContainer, { className: "ob-autocomplete", element: element, id: id, required: element.required },
47
47
  React.createElement(FormElementOptions, { options: element.options, conditionallyShownOptionsElement: conditionallyShownOptionsElement },
48
- React.createElement(AutocompleteDropdown, { id: id, label: label, disabled: element.readOnly, placeholder: element.placeholderValue, required: element.required, value: value, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, onChangeValue: onChange, onChangeLabel: setLabel, onSearch: handleSearch, searchDebounceMs: 0, searchMinCharacters: 0, isDirty: isDirty, setIsDirty: setIsDirty, "aria-describedby": ariaDescribedby, autoComplete: autocompleteAttributes, "aria-required": element.required })))));
48
+ React.createElement(AutocompleteDropdown, { id: id, label: label, disabled: element.readOnly, placeholder: element.placeholderValue, required: element.required, value: value, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, onChangeValue: onChange, onChangeLabel: setLabel, onSearch: handleSearch, searchDebounceMs: 0, searchMinCharacters: 0, isDirty: isDirty, setIsDirty: setIsDirty, "aria-describedby": ariaDescribedby, autoComplete: autocompleteAttributes })))));
49
49
  });
50
50
  const AutocompleteFetch = React.memo(function AutocompleteFetch({ id, element, value, onChange, validationMessage, displayValidationMessage, searchUrl, searchQuerystringParameter, isDirty, setIsDirty, autocompleteAttributes, }) {
51
51
  const ariaDescribedby = useElementAriaDescribedby(id, element);
@@ -74,7 +74,7 @@ const AutocompleteFetch = React.memo(function AutocompleteFetch({ id, element, v
74
74
  }, [value]);
75
75
  return (React.createElement("div", { className: "cypress-autocomplete-search-element" },
76
76
  React.createElement(FormElementLabelContainer, { className: "ob-autocomplete", element: element, id: id, required: element.required },
77
- React.createElement(AutocompleteDropdown, { id: id, label: label, disabled: element.readOnly, placeholder: element.placeholderValue, required: element.required, value: value, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, onChangeValue: onChange, onChangeLabel: setLabel, searchDebounceMs: 750, searchMinCharacters: 1, onSearch: handleSearch, isDirty: isDirty, setIsDirty: setIsDirty, "aria-describedby": ariaDescribedby, autoComplete: autocompleteAttributes, "aria-required": element.required }))));
77
+ React.createElement(AutocompleteDropdown, { id: id, label: label, disabled: element.readOnly, placeholder: element.placeholderValue, required: element.required, value: value, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, onChangeValue: onChange, onChangeLabel: setLabel, searchDebounceMs: 750, searchMinCharacters: 1, onSearch: handleSearch, isDirty: isDirty, setIsDirty: setIsDirty, "aria-describedby": ariaDescribedby, autoComplete: autocompleteAttributes }))));
78
78
  });
79
79
  function FormElementAutocomplete({ conditionallyShownOptionsElement, onChange, ...props }) {
80
80
  const handleChange = React.useCallback((newValue) => {
@@ -1 +1 @@
1
- {"version":3,"file":"FormElementAutocomplete.js","sourceRoot":"","sources":["../../src/form-elements/FormElementAutocomplete.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { formElementsService } from '@oneblink/sdk-core'\nimport { generateHeaders } from '@oneblink/apps/dist/services/fetch'\n\nimport FormElementOptions from '../components/renderer/FormElementOptions'\nimport useFormElementOptions from '../hooks/useFormElementOptions'\nimport AutocompleteDropdown from '../components/renderer/AutocompleteDropdown'\nimport FormElementLabelContainer from '../components/renderer/FormElementLabelContainer'\nimport { FormTypes } from '@oneblink/types'\nimport {\n FormElementValueChangeHandler,\n FormElementConditionallyShownElement,\n IsDirtyProps,\n UpdateFormElementsHandler,\n} from '../types/form'\nimport useElementAriaDescribedby from '../hooks/useElementAriaDescribedby'\n\ntype _BaseProps = {\n id: string\n element: FormTypes.AutoCompleteElement\n value: unknown | undefined\n displayValidationMessage: boolean\n validationMessage: string | undefined\n onUpdateFormElements: UpdateFormElementsHandler\n autocompleteAttributes?: string\n} & IsDirtyProps\n\ntype _AutocompleteChangeHandlerProps = _BaseProps & {\n onChange: (newValue: unknown | undefined) => void\n}\n\ntype _AutocompleteConditionallyShowOptionProps = {\n conditionallyShownOptionsElement:\n | FormElementConditionallyShownElement\n | undefined\n}\n\ntype AutocompleteFilterProps = _AutocompleteChangeHandlerProps &\n _AutocompleteConditionallyShowOptionProps\n\ntype AutocompleteFetchProps = _AutocompleteChangeHandlerProps & {\n searchUrl: string\n searchQuerystringParameter: string\n}\n\ntype Props = _BaseProps &\n _AutocompleteConditionallyShowOptionProps & {\n onChange: FormElementValueChangeHandler<string>\n }\n\nconst AutocompleteFilter = React.memo(function AutocompleteFilter({\n id,\n element,\n value,\n onChange,\n conditionallyShownOptionsElement,\n validationMessage,\n displayValidationMessage,\n onUpdateFormElements,\n isDirty,\n setIsDirty,\n autocompleteAttributes,\n}: AutocompleteFilterProps) {\n const ariaDescribedby = useElementAriaDescribedby(id, element)\n const [label, setLabel] = React.useState('')\n\n const onFilter = React.useCallback(\n (option: FormTypes.ChoiceElementOption) => {\n // If the user has typed nothing in, display all options\n if (!label) {\n return true\n }\n\n const lowerCase = label.toLowerCase()\n\n return option.label.toLowerCase().includes(lowerCase)\n },\n [label],\n )\n\n const handleChange = React.useCallback(\n //useFormElementOptions expects the first arg to be the element\n (element: FormTypes.FormElement, newValue: unknown) => onChange(newValue),\n [onChange],\n )\n\n const filteredOptions = useFormElementOptions({\n element,\n value,\n onChange: handleChange,\n conditionallyShownOptionsElement,\n onFilter,\n onUpdateFormElements,\n })\n\n const handleSearch = React.useCallback(async () => {\n return filteredOptions\n }, [filteredOptions])\n\n // Ensure the label matches the value selected\n React.useEffect(() => {\n if (!Array.isArray(element.options)) {\n return\n }\n\n const option = element.options.find((option) => option.value === value)\n if (option && label !== option.label) {\n setLabel(option.label)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [element.options, value])\n\n return (\n <div className=\"cypress-autocomplete-filter-element\">\n <FormElementLabelContainer\n className=\"ob-autocomplete\"\n element={element}\n id={id}\n required={element.required}\n >\n <FormElementOptions\n options={element.options}\n conditionallyShownOptionsElement={conditionallyShownOptionsElement}\n >\n <AutocompleteDropdown\n id={id}\n label={label}\n disabled={element.readOnly}\n placeholder={element.placeholderValue}\n required={element.required}\n value={value}\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n onChangeValue={onChange}\n onChangeLabel={setLabel}\n onSearch={handleSearch}\n searchDebounceMs={0}\n searchMinCharacters={0}\n isDirty={isDirty}\n setIsDirty={setIsDirty}\n aria-describedby={ariaDescribedby}\n autoComplete={autocompleteAttributes}\n aria-required={element.required}\n />\n </FormElementOptions>\n </FormElementLabelContainer>\n </div>\n )\n})\n\nconst AutocompleteFetch = React.memo(function AutocompleteFetch({\n id,\n element,\n value,\n onChange,\n validationMessage,\n displayValidationMessage,\n searchUrl,\n searchQuerystringParameter,\n isDirty,\n setIsDirty,\n autocompleteAttributes,\n}: AutocompleteFetchProps) {\n const ariaDescribedby = useElementAriaDescribedby(id, element)\n const [label, setLabel] = React.useState('')\n\n const handleSearch = React.useCallback(\n async (search: string, abortSignal: AbortSignal) => {\n const headers = await generateHeaders()\n const url = new URL(searchUrl)\n url.searchParams.append(searchQuerystringParameter, search)\n const response = await fetch(url.href, {\n headers,\n signal: abortSignal,\n })\n\n if (!response.ok) {\n const text = await response.text()\n throw new Error(text)\n }\n\n const data = await response.json()\n return formElementsService.parseDynamicFormElementOptions(data)\n },\n [searchQuerystringParameter, searchUrl],\n )\n\n // Ensure the label is set if the value is set outside of this component\n React.useEffect(() => {\n if (!label && typeof value === 'string') {\n setLabel(value)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value])\n\n return (\n <div className=\"cypress-autocomplete-search-element\">\n <FormElementLabelContainer\n className=\"ob-autocomplete\"\n element={element}\n id={id}\n required={element.required}\n >\n <AutocompleteDropdown\n id={id}\n label={label}\n disabled={element.readOnly}\n placeholder={element.placeholderValue}\n required={element.required}\n value={value}\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n onChangeValue={onChange}\n onChangeLabel={setLabel}\n searchDebounceMs={750}\n searchMinCharacters={1}\n onSearch={handleSearch}\n isDirty={isDirty}\n setIsDirty={setIsDirty}\n aria-describedby={ariaDescribedby}\n autoComplete={autocompleteAttributes}\n aria-required={element.required}\n />\n </FormElementLabelContainer>\n </div>\n )\n})\n\nfunction FormElementAutocomplete({\n conditionallyShownOptionsElement,\n onChange,\n ...props\n}: Props) {\n const handleChange = React.useCallback(\n (newValue: unknown) => {\n onChange(props.element, {\n value: newValue as string | undefined,\n })\n },\n [onChange, props.element],\n )\n if (props.element.optionsType === 'SEARCH' && props.element.searchUrl) {\n return (\n <AutocompleteFetch\n {...props}\n onChange={handleChange}\n searchUrl={props.element.searchUrl}\n searchQuerystringParameter={\n props.element.searchQuerystringParameter || 'value'\n }\n />\n )\n }\n\n return (\n <AutocompleteFilter\n {...props}\n onChange={handleChange}\n conditionallyShownOptionsElement={conditionallyShownOptionsElement}\n />\n )\n}\n\nexport default React.memo(FormElementAutocomplete)\n"]}
1
+ {"version":3,"file":"FormElementAutocomplete.js","sourceRoot":"","sources":["../../src/form-elements/FormElementAutocomplete.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { formElementsService } from '@oneblink/sdk-core'\nimport { generateHeaders } from '@oneblink/apps/dist/services/fetch'\n\nimport FormElementOptions from '../components/renderer/FormElementOptions'\nimport useFormElementOptions from '../hooks/useFormElementOptions'\nimport AutocompleteDropdown from '../components/renderer/AutocompleteDropdown'\nimport FormElementLabelContainer from '../components/renderer/FormElementLabelContainer'\nimport { FormTypes } from '@oneblink/types'\nimport {\n FormElementValueChangeHandler,\n FormElementConditionallyShownElement,\n IsDirtyProps,\n UpdateFormElementsHandler,\n} from '../types/form'\nimport useElementAriaDescribedby from '../hooks/useElementAriaDescribedby'\n\ntype _BaseProps = {\n id: string\n element: FormTypes.AutoCompleteElement\n value: unknown | undefined\n displayValidationMessage: boolean\n validationMessage: string | undefined\n onUpdateFormElements: UpdateFormElementsHandler\n autocompleteAttributes?: string\n} & IsDirtyProps\n\ntype _AutocompleteChangeHandlerProps = _BaseProps & {\n onChange: (newValue: unknown | undefined) => void\n}\n\ntype _AutocompleteConditionallyShowOptionProps = {\n conditionallyShownOptionsElement:\n | FormElementConditionallyShownElement\n | undefined\n}\n\ntype AutocompleteFilterProps = _AutocompleteChangeHandlerProps &\n _AutocompleteConditionallyShowOptionProps\n\ntype AutocompleteFetchProps = _AutocompleteChangeHandlerProps & {\n searchUrl: string\n searchQuerystringParameter: string\n}\n\ntype Props = _BaseProps &\n _AutocompleteConditionallyShowOptionProps & {\n onChange: FormElementValueChangeHandler<string>\n }\n\nconst AutocompleteFilter = React.memo(function AutocompleteFilter({\n id,\n element,\n value,\n onChange,\n conditionallyShownOptionsElement,\n validationMessage,\n displayValidationMessage,\n onUpdateFormElements,\n isDirty,\n setIsDirty,\n autocompleteAttributes,\n}: AutocompleteFilterProps) {\n const ariaDescribedby = useElementAriaDescribedby(id, element)\n const [label, setLabel] = React.useState('')\n\n const onFilter = React.useCallback(\n (option: FormTypes.ChoiceElementOption) => {\n // If the user has typed nothing in, display all options\n if (!label) {\n return true\n }\n\n const lowerCase = label.toLowerCase()\n\n return option.label.toLowerCase().includes(lowerCase)\n },\n [label],\n )\n\n const handleChange = React.useCallback(\n //useFormElementOptions expects the first arg to be the element\n (element: FormTypes.FormElement, newValue: unknown) => onChange(newValue),\n [onChange],\n )\n\n const filteredOptions = useFormElementOptions({\n element,\n value,\n onChange: handleChange,\n conditionallyShownOptionsElement,\n onFilter,\n onUpdateFormElements,\n })\n\n const handleSearch = React.useCallback(async () => {\n return filteredOptions\n }, [filteredOptions])\n\n // Ensure the label matches the value selected\n React.useEffect(() => {\n if (!Array.isArray(element.options)) {\n return\n }\n\n const option = element.options.find((option) => option.value === value)\n if (option && label !== option.label) {\n setLabel(option.label)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [element.options, value])\n\n return (\n <div className=\"cypress-autocomplete-filter-element\">\n <FormElementLabelContainer\n className=\"ob-autocomplete\"\n element={element}\n id={id}\n required={element.required}\n >\n <FormElementOptions\n options={element.options}\n conditionallyShownOptionsElement={conditionallyShownOptionsElement}\n >\n <AutocompleteDropdown\n id={id}\n label={label}\n disabled={element.readOnly}\n placeholder={element.placeholderValue}\n required={element.required}\n value={value}\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n onChangeValue={onChange}\n onChangeLabel={setLabel}\n onSearch={handleSearch}\n searchDebounceMs={0}\n searchMinCharacters={0}\n isDirty={isDirty}\n setIsDirty={setIsDirty}\n aria-describedby={ariaDescribedby}\n autoComplete={autocompleteAttributes}\n />\n </FormElementOptions>\n </FormElementLabelContainer>\n </div>\n )\n})\n\nconst AutocompleteFetch = React.memo(function AutocompleteFetch({\n id,\n element,\n value,\n onChange,\n validationMessage,\n displayValidationMessage,\n searchUrl,\n searchQuerystringParameter,\n isDirty,\n setIsDirty,\n autocompleteAttributes,\n}: AutocompleteFetchProps) {\n const ariaDescribedby = useElementAriaDescribedby(id, element)\n const [label, setLabel] = React.useState('')\n\n const handleSearch = React.useCallback(\n async (search: string, abortSignal: AbortSignal) => {\n const headers = await generateHeaders()\n const url = new URL(searchUrl)\n url.searchParams.append(searchQuerystringParameter, search)\n const response = await fetch(url.href, {\n headers,\n signal: abortSignal,\n })\n\n if (!response.ok) {\n const text = await response.text()\n throw new Error(text)\n }\n\n const data = await response.json()\n return formElementsService.parseDynamicFormElementOptions(data)\n },\n [searchQuerystringParameter, searchUrl],\n )\n\n // Ensure the label is set if the value is set outside of this component\n React.useEffect(() => {\n if (!label && typeof value === 'string') {\n setLabel(value)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value])\n\n return (\n <div className=\"cypress-autocomplete-search-element\">\n <FormElementLabelContainer\n className=\"ob-autocomplete\"\n element={element}\n id={id}\n required={element.required}\n >\n <AutocompleteDropdown\n id={id}\n label={label}\n disabled={element.readOnly}\n placeholder={element.placeholderValue}\n required={element.required}\n value={value}\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n onChangeValue={onChange}\n onChangeLabel={setLabel}\n searchDebounceMs={750}\n searchMinCharacters={1}\n onSearch={handleSearch}\n isDirty={isDirty}\n setIsDirty={setIsDirty}\n aria-describedby={ariaDescribedby}\n autoComplete={autocompleteAttributes}\n />\n </FormElementLabelContainer>\n </div>\n )\n})\n\nfunction FormElementAutocomplete({\n conditionallyShownOptionsElement,\n onChange,\n ...props\n}: Props) {\n const handleChange = React.useCallback(\n (newValue: unknown) => {\n onChange(props.element, {\n value: newValue as string | undefined,\n })\n },\n [onChange, props.element],\n )\n if (props.element.optionsType === 'SEARCH' && props.element.searchUrl) {\n return (\n <AutocompleteFetch\n {...props}\n onChange={handleChange}\n searchUrl={props.element.searchUrl}\n searchQuerystringParameter={\n props.element.searchQuerystringParameter || 'value'\n }\n />\n )\n }\n\n return (\n <AutocompleteFilter\n {...props}\n onChange={handleChange}\n conditionallyShownOptionsElement={conditionallyShownOptionsElement}\n />\n )\n}\n\nexport default React.memo(FormElementAutocomplete)\n"]}
@@ -35,7 +35,7 @@ function FormElementCivicaStreetName({ formId, id, element, value, displayValida
35
35
  }, [value]);
36
36
  return (React.createElement("div", { className: "cypress-civica-street-name-element" },
37
37
  React.createElement(FormElementLabelContainer, { className: "ob-civica-street-name ob-autocomplete", element: element, id: id, required: element.required },
38
- React.createElement(AutocompleteDropdown, { id: id, label: label, disabled: element.readOnly, placeholder: element.placeholderValue, required: element.required, value: value, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, onChangeValue: handleChange, hasError: !!error, onChangeLabel: setLabel, searchDebounceMs: 750, searchMinCharacters: 4, onSearch: handleSearch, isDirty: isDirty, setIsDirty: setIsDirty, "aria-describedby": ariaDescribedby, autoComplete: autocompleteAttributes, "aria-required": element.required })),
38
+ React.createElement(AutocompleteDropdown, { id: id, label: label, disabled: element.readOnly, placeholder: element.placeholderValue, required: element.required, value: value, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, onChangeValue: handleChange, hasError: !!error, onChangeLabel: setLabel, searchDebounceMs: 750, searchMinCharacters: 4, onSearch: handleSearch, isDirty: isDirty, setIsDirty: setIsDirty, "aria-describedby": ariaDescribedby, autoComplete: autocompleteAttributes })),
39
39
  error && (React.createElement("div", { role: "alert", className: "has-margin-top-8" },
40
40
  React.createElement("div", { className: "has-text-danger ob-error__text cypress-civica-street-name-error-message" }, error.toString())))));
41
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FormElementCivicaStreetName.js","sourceRoot":"","sources":["../../src/form-elements/FormElementCivicaStreetName.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { formService } from '@oneblink/apps'\n\nimport AutocompleteDropdown from '../components/renderer/AutocompleteDropdown'\nimport FormElementLabelContainer from '../components/renderer/FormElementLabelContainer'\nimport { FormTypes, CivicaTypes } from '@oneblink/types'\nimport { FormElementValueChangeHandler, IsDirtyProps } from '../types/form'\nimport useElementAriaDescribedby from '../hooks/useElementAriaDescribedby'\n\ntype Props = {\n formId: number\n id: string\n element: FormTypes.CivicaStreetNameElement\n value: CivicaTypes.CivicaStreetName | undefined\n displayValidationMessage: boolean\n validationMessage: string | undefined\n onChange: FormElementValueChangeHandler<CivicaTypes.CivicaStreetName>\n autocompleteAttributes?: string\n} & IsDirtyProps\n\nfunction FormElementCivicaStreetName({\n formId,\n id,\n element,\n value,\n displayValidationMessage,\n validationMessage,\n onChange,\n isDirty,\n setIsDirty,\n autocompleteAttributes,\n}: Props) {\n const ariaDescribedby = useElementAriaDescribedby(id, element)\n const [label, setLabel] = React.useState('')\n const [error, setError] = React.useState<Error | undefined>()\n\n const handleSearch = React.useCallback(\n async (searchTerm: string, abortSignal: AbortSignal) => {\n setError(undefined)\n const results = await formService.searchCivicaStreetNames(\n formId,\n {\n search: searchTerm,\n },\n abortSignal,\n )\n return results.map((suggestion, index) => ({\n value: suggestion.formattedAccount || index.toString(),\n label: suggestion.formattedStreet || index.toString(),\n data: suggestion,\n }))\n },\n [formId],\n )\n\n const handleChange = React.useCallback(\n async (\n streetId: string | undefined,\n streetData?: CivicaTypes.CivicaStreetName,\n ) => {\n onChange(element, {\n value: streetData,\n })\n },\n [onChange, element],\n )\n\n // Ensure the label is set if the value is set outside of this component\n React.useEffect(() => {\n if (value) {\n const newLabel = value?.formattedStreet\n if (label !== newLabel) {\n setLabel(newLabel || '')\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value])\n\n return (\n <div className=\"cypress-civica-street-name-element\">\n <FormElementLabelContainer\n className=\"ob-civica-street-name ob-autocomplete\"\n element={element}\n id={id}\n required={element.required}\n >\n <AutocompleteDropdown\n id={id}\n label={label}\n disabled={element.readOnly}\n placeholder={element.placeholderValue}\n required={element.required}\n value={value}\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n onChangeValue={handleChange}\n hasError={!!error}\n onChangeLabel={setLabel}\n searchDebounceMs={750}\n searchMinCharacters={4}\n onSearch={handleSearch}\n isDirty={isDirty}\n setIsDirty={setIsDirty}\n aria-describedby={ariaDescribedby}\n autoComplete={autocompleteAttributes}\n aria-required={element.required}\n />\n </FormElementLabelContainer>\n\n {error && (\n <div role=\"alert\" className=\"has-margin-top-8\">\n <div className=\"has-text-danger ob-error__text cypress-civica-street-name-error-message\">\n {error.toString()}\n </div>\n </div>\n )}\n </div>\n )\n}\n\nexport default React.memo(FormElementCivicaStreetName)\n"]}
1
+ {"version":3,"file":"FormElementCivicaStreetName.js","sourceRoot":"","sources":["../../src/form-elements/FormElementCivicaStreetName.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { formService } from '@oneblink/apps'\n\nimport AutocompleteDropdown from '../components/renderer/AutocompleteDropdown'\nimport FormElementLabelContainer from '../components/renderer/FormElementLabelContainer'\nimport { FormTypes, CivicaTypes } from '@oneblink/types'\nimport { FormElementValueChangeHandler, IsDirtyProps } from '../types/form'\nimport useElementAriaDescribedby from '../hooks/useElementAriaDescribedby'\n\ntype Props = {\n formId: number\n id: string\n element: FormTypes.CivicaStreetNameElement\n value: CivicaTypes.CivicaStreetName | undefined\n displayValidationMessage: boolean\n validationMessage: string | undefined\n onChange: FormElementValueChangeHandler<CivicaTypes.CivicaStreetName>\n autocompleteAttributes?: string\n} & IsDirtyProps\n\nfunction FormElementCivicaStreetName({\n formId,\n id,\n element,\n value,\n displayValidationMessage,\n validationMessage,\n onChange,\n isDirty,\n setIsDirty,\n autocompleteAttributes,\n}: Props) {\n const ariaDescribedby = useElementAriaDescribedby(id, element)\n const [label, setLabel] = React.useState('')\n const [error, setError] = React.useState<Error | undefined>()\n\n const handleSearch = React.useCallback(\n async (searchTerm: string, abortSignal: AbortSignal) => {\n setError(undefined)\n const results = await formService.searchCivicaStreetNames(\n formId,\n {\n search: searchTerm,\n },\n abortSignal,\n )\n return results.map((suggestion, index) => ({\n value: suggestion.formattedAccount || index.toString(),\n label: suggestion.formattedStreet || index.toString(),\n data: suggestion,\n }))\n },\n [formId],\n )\n\n const handleChange = React.useCallback(\n async (\n streetId: string | undefined,\n streetData?: CivicaTypes.CivicaStreetName,\n ) => {\n onChange(element, {\n value: streetData,\n })\n },\n [onChange, element],\n )\n\n // Ensure the label is set if the value is set outside of this component\n React.useEffect(() => {\n if (value) {\n const newLabel = value?.formattedStreet\n if (label !== newLabel) {\n setLabel(newLabel || '')\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value])\n\n return (\n <div className=\"cypress-civica-street-name-element\">\n <FormElementLabelContainer\n className=\"ob-civica-street-name ob-autocomplete\"\n element={element}\n id={id}\n required={element.required}\n >\n <AutocompleteDropdown\n id={id}\n label={label}\n disabled={element.readOnly}\n placeholder={element.placeholderValue}\n required={element.required}\n value={value}\n validationMessage={validationMessage}\n displayValidationMessage={displayValidationMessage}\n onChangeValue={handleChange}\n hasError={!!error}\n onChangeLabel={setLabel}\n searchDebounceMs={750}\n searchMinCharacters={4}\n onSearch={handleSearch}\n isDirty={isDirty}\n setIsDirty={setIsDirty}\n aria-describedby={ariaDescribedby}\n autoComplete={autocompleteAttributes}\n />\n </FormElementLabelContainer>\n\n {error && (\n <div role=\"alert\" className=\"has-margin-top-8\">\n <div className=\"has-text-danger ob-error__text cypress-civica-street-name-error-message\">\n {error.toString()}\n </div>\n </div>\n )}\n </div>\n )\n}\n\nexport default React.memo(FormElementCivicaStreetName)\n"]}
@@ -62,7 +62,7 @@ function FormElementGeoscapeAddress({ formId, id, element, value, displayValidat
62
62
  }, [value]);
63
63
  return (React.createElement("div", { className: "cypress-geoscape-address-element" },
64
64
  React.createElement(FormElementLabelContainer, { className: "ob-geoscape-address ob-autocomplete", element: element, id: id, required: element.required },
65
- React.createElement(AutocompleteDropdown, { id: id, label: label, disabled: element.readOnly || isLoadingAddressDetails, placeholder: element.placeholderValue, required: element.required, value: value, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, onChangeValue: handleChange, isLoading: isLoadingAddressDetails, hasError: !!error, onChangeLabel: setLabel, searchDebounceMs: 750, searchMinCharacters: 4, onSearch: handleSearch, isDirty: isDirty, setIsDirty: setIsDirty, "aria-describedby": ariaDescribedby, autoComplete: autocompleteAttributes, "aria-required": element.required })),
65
+ React.createElement(AutocompleteDropdown, { id: id, label: label, disabled: element.readOnly || isLoadingAddressDetails, placeholder: element.placeholderValue, required: element.required, value: value, validationMessage: validationMessage, displayValidationMessage: displayValidationMessage, onChangeValue: handleChange, isLoading: isLoadingAddressDetails, hasError: !!error, onChangeLabel: setLabel, searchDebounceMs: 750, searchMinCharacters: 4, onSearch: handleSearch, isDirty: isDirty, setIsDirty: setIsDirty, "aria-describedby": ariaDescribedby, autoComplete: autocompleteAttributes })),
66
66
  error && (React.createElement("div", { role: "alert", className: "has-margin-top-8" },
67
67
  React.createElement("div", { className: "has-text-danger ob-error__text cypress-geoscape-address-details-error-message" }, error.toString())))));
68
68
  }