@corva/ui 3.67.0-0 → 3.67.0-2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs-bundle/components/BICOffsetPickerDialog/components/Map/Map.js +1 -1
- package/cjs-bundle/components/BICOffsetPickerDialog/components/Map/Map.js.map +1 -1
- package/cjs-bundle/components/OffsetWellMap/OffsetWellMap.js +1 -1
- package/cjs-bundle/components/OffsetWellMap/OffsetWellMap.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV2/components/Map/Map.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV2/components/Map/Map.js.map +1 -1
- package/cjs-bundle/components/OffsetWellPickerV3/components/CustomSelectionView/components/Map/Map.js +1 -1
- package/cjs-bundle/components/OffsetWellPickerV3/components/CustomSelectionView/components/Map/Map.js.map +1 -1
- package/cjs-bundle/componentsV2/Autocomplete/Autocomplete.scss.js +1 -1
- package/cjs-bundle/componentsV2/Autocomplete/AutocompleteMenuItem.js +1 -1
- package/cjs-bundle/componentsV2/Menu/MenuItem/MenuItem.js +1 -1
- package/cjs-bundle/componentsV2/Menu/MenuItem/MenuItem.scss.js +1 -1
- package/cjs-bundle/componentsV2/RadioAndCheckboxLabel/RadioAndCheckboxLabel.js +1 -1
- package/cjs-bundle/componentsV2/RadioAndCheckboxLabel/RadioAndCheckboxLabel.scss.js +1 -1
- package/components/BICOffsetPickerDialog/components/Map/Map.d.ts.map +1 -1
- package/components/BICOffsetPickerDialog/components/Map/Map.js +1 -1
- package/components/BICOffsetPickerDialog/components/Map/Map.js.map +1 -1
- package/components/OffsetWellMap/OffsetWellMap.d.ts.map +1 -1
- package/components/OffsetWellMap/OffsetWellMap.js +1 -1
- package/components/OffsetWellMap/OffsetWellMap.js.map +1 -1
- package/components/OffsetWellPickerV2/components/Map/Map.d.ts.map +1 -1
- package/components/OffsetWellPickerV2/components/Map/Map.js +1 -1
- package/components/OffsetWellPickerV2/components/Map/Map.js.map +1 -1
- package/components/OffsetWellPickerV3/components/CustomSelectionView/components/Map/Map.d.ts.map +1 -1
- package/components/OffsetWellPickerV3/components/CustomSelectionView/components/Map/Map.js +1 -1
- package/components/OffsetWellPickerV3/components/CustomSelectionView/components/Map/Map.js.map +1 -1
- package/componentsV2/Autocomplete/Autocomplete.scss.js +1 -1
- package/componentsV2/Autocomplete/AutocompleteMenuItem.d.ts.map +1 -1
- package/componentsV2/Autocomplete/AutocompleteMenuItem.js +1 -1
- package/componentsV2/Menu/MenuItem/MenuItem.d.ts.map +1 -1
- package/componentsV2/Menu/MenuItem/MenuItem.js +1 -1
- package/componentsV2/Menu/MenuItem/MenuItem.scss.js +1 -1
- package/componentsV2/RadioAndCheckboxLabel/RadioAndCheckboxLabel.d.ts.map +1 -1
- package/componentsV2/RadioAndCheckboxLabel/RadioAndCheckboxLabel.js +1 -1
- package/componentsV2/RadioAndCheckboxLabel/RadioAndCheckboxLabel.scss.js +1 -1
- package/mcp-server/server.mjs +5 -5
- package/package.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("react"),r=require("react-dom"),t=require("prop-types"),u=require("mapbox.js"),l=require("lodash"),n=require("../../effects/index.js"),a=require("./Map.css.js"),o=require("../../../../utils/index.js"),c=require("react/jsx-runtime");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=i(r),f=i(t),d=i(u),
|
|
1
|
+
"use strict";var e=require("react"),r=require("react-dom"),t=require("prop-types"),u=require("mapbox.js"),l=require("lodash"),n=require("../../effects/index.js"),a=require("./Map.css.js"),o=require("../../../../utils/index.js"),c=require("react/jsx-runtime");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=i(r),f=i(t),d=i(u),m=o.mapbox.isValidCoordinates,p=[29.749907,-95.358421];function v(r){var t=r.subjectWell,u=r.wells,o=r.offsetWells,i=r.radius,f=r.subjectWellMarkerSize,v=r.wellMarkerSize,b=r.coordsDataPath,h=e.useRef(null),j=e.useRef(null),x=e.useRef(null),g=e.useRef(null),y=n.usePrevious(u),k=e.useMemo((function(){return t&&l.get(t,b)}),[t,b]);e.useEffect((function(){h.current=d.default.mapbox.map(h.current,null,{attributionControl:!1,scrollWheelZoom:!1,zoomControl:!1}).setView(p,1),d.default.control.zoom({position:"bottomright"}).addTo(h.current),d.default.mapbox.styleLayer("mapbox://styles/mapbox/dark-v9").addTo(h.current);var e=h.current;return function(){e.off("layerremove"),e.remove(),h.current=null,j.current=null,x.current=null}}),[]),e.useEffect((function(){h.current&&(j.current&&h.current.removeLayer(j.current),k?(j.current=d.default.circle(k,1609.34*i,{stroke:!1,fill:!0,fillOpacity:.2,fillColor:"#03BCD4",className:"circle_500"}),j.current.addTo(h.current)):j.current=null)}),[i,k]);return e.useEffect((function(){if(h.current){h.current.closePopup(),x.current&&x.current.removeFrom(h.current);var r=o.map((function(e){return e.id})),n=[];u.forEach((function(u){var a=l.get(u,b);if(a&&m(a)){var o=t&&t.id===u.id,i=r.includes(u.id),p=o?f:v,j=o||i?1:.3,y=d.default.circleMarker(a,{radius:p,stroke:!1,fill:!0,fillOpacity:j,fillColor:"#FFC107",className:"circle_500"});y.addEventListener("mouseover",(function(){var r=document.createElement("div"),t=e.createElement((function(e){var r=e.well;return c.jsx("div",{style:{color:"#fff",background:"##414141"},children:c.jsx("span",{style:{fontSize:"11px",lineHeight:"16px"},children:l.get(r,"name")})})}),{well:u});s.default.render(t,r),d.default.popup().setLatLng(a).setContent(r).openOn(h.current),function(e,r,t){g.current=d.default.circleMarker(r,{radius:3*t,stroke:!1,fill:!0,fillOpacity:.2,fillColor:"#FFC107",className:"circle_highlight"}),g.current.addEventListener("mouseout",(function(){x.current.removeFrom(h.current),x.current=d.default.featureGroup(e),x.current.addTo(h.current),h.current.closePopup()}));var u=e.concat(g.current);x.current=d.default.featureGroup(u),x.current.addTo(h.current)}(n,a,p)})),n.push(y)}})),n.length&&(x.current=d.default.featureGroup(n),x.current.addTo(h.current)),setTimeout((function(){j.current&&j.current.bringToBack(),h.current&&x.current&&u!==y&&h.current.fitBounds(x.current.getBounds())}),500)}}),[t,u,o]),c.jsx("div",{className:a.map,children:c.jsx("div",{className:a.mapMain,ref:h})})}v.propTypes={subjectWell:f.default.shape({id:f.default.number,formation:f.default.string}),wells:f.default.arrayOf(f.default.shape({})).isRequired,offsetWells:f.default.arrayOf(f.default.shape({})),radius:f.default.number.isRequired,subjectWellMarkerSize:f.default.number,wellMarkerSize:f.default.number,coordsDataPath:f.default.string},v.defaultProps={subjectWell:null,subjectWellMarkerSize:8,wellMarkerSize:5,coordsDataPath:"settings.top_hole.coordinates",offsetWells:null};var b=e.memo(v);module.exports=b;
|
|
2
2
|
//# sourceMappingURL=Map.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Map.js","sources":["../../../../../../src/components/BICOffsetPickerDialog/components/Map/Map.js"],"sourcesContent":["import { createElement, memo, useRef, useEffect, useMemo } from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport L from 'mapbox.js';\nimport { get } from 'lodash';\n\nimport { usePrevious } from '../../effects';\n\nimport styles from './Map.css';\n\nimport { mapbox } from '~/utils';\n\nconst { isValidCoordinates } = mapbox;\n\nconst RADIUS_CIRCLE_COLOR = '#03BCD4';\nconst METERS_IN_MILE = 1609.34;\nconst DEFAULT_SUBJECT_WELL_MARKER_SIZE = 8;\nconst DEFAULT_WELL_MARKER_SIZE = 5;\nconst OFFSET_WELL_COLOR = '#FFC107';\n\nconst DEFAULT_COORDS = [29.749907, -95.358421]; // TX coordinates\n\nconst toolTip =\n () =>\n // eslint-disable-next-line react/prop-types\n ({ well }) => {\n return (\n <div style={{ color: '#fff', background: '##414141' }}>\n <span style={{ fontSize: '11px', lineHeight: '16px' }}>{get(well, 'name')}</span>\n </div>\n );\n };\n\n// eslint-disable-next-line no-unused-vars\nfunction WellsMap({\n subjectWell,\n wells,\n offsetWells,\n radius,\n subjectWellMarkerSize,\n wellMarkerSize,\n coordsDataPath,\n}) {\n const mapContainerRef = useRef(null);\n const radiusCircleRef = useRef(null);\n const markersGroupRef = useRef(null);\n const highlightMarkerRef = useRef(null);\n\n const prevWells = usePrevious(wells);\n\n const subjectWellCoords = useMemo(() => {\n return subjectWell && get(subjectWell, coordsDataPath);\n }, [subjectWell, coordsDataPath]);\n\n // NOTE: Initialize map\n useEffect(() => {\n mapContainerRef.current = L.mapbox\n .map(mapContainerRef.current, null, {\n attributionControl: false,\n scrollWheelZoom: false,\n zoomControl: false,\n })\n .setView(DEFAULT_COORDS, 1);\n\n L.control\n .zoom({\n position: 'bottomright',\n })\n .addTo(mapContainerRef.current);\n L.mapbox.styleLayer('mapbox://styles/mapbox/dark-v9').addTo(mapContainerRef.current);\n }, []);\n\n // NOTE: Radius circle\n useEffect(() => {\n if (!mapContainerRef.current) {\n return;\n }\n\n // NOTE: Clean up\n if (radiusCircleRef.current) {\n mapContainerRef.current.removeLayer(radiusCircleRef.current);\n }\n\n if (!subjectWellCoords) {\n radiusCircleRef.current = null;\n return;\n }\n\n radiusCircleRef.current = L.circle(subjectWellCoords, radius * METERS_IN_MILE, {\n stroke: false,\n fill: true,\n fillOpacity: 0.2,\n fillColor: RADIUS_CIRCLE_COLOR,\n className: 'circle_500',\n });\n\n radiusCircleRef.current.addTo(mapContainerRef.current);\n }, [radius, subjectWellCoords]);\n\n const handleMouseOver = (markers, coords, r) => {\n highlightMarkerRef.current = L.circleMarker(coords, {\n radius: r * 3,\n stroke: false,\n fill: true,\n fillOpacity: 0.2,\n fillColor: OFFSET_WELL_COLOR,\n className: 'circle_highlight',\n });\n\n highlightMarkerRef.current.addEventListener('mouseout', () => {\n markersGroupRef.current.removeFrom(mapContainerRef.current);\n markersGroupRef.current = L.featureGroup(markers);\n markersGroupRef.current.addTo(mapContainerRef.current);\n\n mapContainerRef.current.closePopup();\n });\n\n const newMarkers = markers.concat(highlightMarkerRef.current);\n markersGroupRef.current = L.featureGroup(newMarkers);\n markersGroupRef.current.addTo(mapContainerRef.current);\n };\n\n // NOTE: Well markers\n useEffect(() => {\n if (!mapContainerRef.current) {\n return;\n }\n\n mapContainerRef.current.closePopup();\n\n // NOTE: Clean up\n if (markersGroupRef.current) {\n markersGroupRef.current.removeFrom(mapContainerRef.current);\n }\n\n const offsetWellIds = offsetWells.map(well => well.id);\n\n const markers = [];\n wells.forEach(well => {\n const coords = get(well, coordsDataPath);\n\n if (coords && isValidCoordinates(coords)) {\n const isWellSubject = subjectWell && subjectWell.id === well.id;\n const isWellOffset = offsetWellIds.includes(well.id);\n const r = isWellSubject ? subjectWellMarkerSize : wellMarkerSize;\n const color = OFFSET_WELL_COLOR;\n const opacity = isWellSubject || isWellOffset ? 1 : 0.3;\n\n const newMarker = L.circleMarker(coords, {\n radius: r,\n stroke: false,\n fill: true,\n fillOpacity: opacity,\n fillColor: color,\n className: 'circle_500',\n });\n\n newMarker.addEventListener('mouseover', () => {\n // Tooltip\n const tooltipContainer = document.createElement('div');\n const tootipContent = createElement(toolTip(), { well });\n ReactDOM.render(tootipContent, tooltipContainer);\n L.popup().setLatLng(coords).setContent(tooltipContainer).openOn(mapContainerRef.current);\n\n // Highlight\n handleMouseOver(markers, coords, r);\n });\n\n markers.push(newMarker);\n }\n });\n\n if (markers.length) {\n markersGroupRef.current = L.featureGroup(markers);\n markersGroupRef.current.addTo(mapContainerRef.current);\n }\n\n setTimeout(() => {\n if (radiusCircleRef.current) {\n radiusCircleRef.current.bringToBack();\n }\n\n if (mapContainerRef.current && markersGroupRef.current && wells !== prevWells) {\n mapContainerRef.current.fitBounds(markersGroupRef.current.getBounds());\n }\n }, 500);\n }, [subjectWell, wells, offsetWells]);\n\n return (\n <div className={styles.map}>\n <div className={styles.mapMain} ref={mapContainerRef} />\n </div>\n );\n}\n\nWellsMap.propTypes = {\n subjectWell: PropTypes.shape({\n id: PropTypes.number,\n formation: PropTypes.string,\n }),\n wells: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\n offsetWells: PropTypes.arrayOf(PropTypes.shape({})),\n radius: PropTypes.number.isRequired,\n subjectWellMarkerSize: PropTypes.number,\n wellMarkerSize: PropTypes.number,\n coordsDataPath: PropTypes.string,\n};\n\nWellsMap.defaultProps = {\n subjectWell: null,\n subjectWellMarkerSize: DEFAULT_SUBJECT_WELL_MARKER_SIZE,\n wellMarkerSize: DEFAULT_WELL_MARKER_SIZE,\n coordsDataPath: 'settings.top_hole.coordinates',\n offsetWells: null,\n};\n\nexport default memo(WellsMap);\n"],"names":["isValidCoordinates","mapbox","DEFAULT_COORDS","WellsMap","_ref2","subjectWell","wells","offsetWells","radius","subjectWellMarkerSize","wellMarkerSize","coordsDataPath","mapContainerRef","useRef","radiusCircleRef","markersGroupRef","highlightMarkerRef","prevWells","usePrevious","subjectWellCoords","useMemo","get","useEffect","current","L","map","attributionControl","scrollWheelZoom","zoomControl","setView","control","zoom","position","addTo","styleLayer","removeLayer","circle","stroke","fill","fillOpacity","fillColor","className","closePopup","removeFrom","offsetWellIds","well","id","markers","forEach","coords","isWellSubject","isWellOffset","includes","r","opacity","newMarker","circleMarker","addEventListener","tooltipContainer","document","createElement","tootipContent","_ref","_jsx","style","color","background","children","jsx","fontSize","lineHeight","ReactDOM","render","popup","setLatLng","setContent","openOn","featureGroup","newMarkers","concat","handleMouseOver","push","length","setTimeout","bringToBack","fitBounds","getBounds","styles","mapMain","ref","propTypes","PropTypes","shape","number","formation","string","arrayOf","isRequired","defaultProps","memo"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Map.js","sources":["../../../../../../src/components/BICOffsetPickerDialog/components/Map/Map.js"],"sourcesContent":["import { createElement, memo, useRef, useEffect, useMemo } from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport L from 'mapbox.js';\nimport { get } from 'lodash';\n\nimport { usePrevious } from '../../effects';\n\nimport styles from './Map.css';\n\nimport { mapbox } from '~/utils';\n\nconst { isValidCoordinates } = mapbox;\n\nconst RADIUS_CIRCLE_COLOR = '#03BCD4';\nconst METERS_IN_MILE = 1609.34;\nconst DEFAULT_SUBJECT_WELL_MARKER_SIZE = 8;\nconst DEFAULT_WELL_MARKER_SIZE = 5;\nconst OFFSET_WELL_COLOR = '#FFC107';\n\nconst DEFAULT_COORDS = [29.749907, -95.358421]; // TX coordinates\n\nconst toolTip =\n () =>\n // eslint-disable-next-line react/prop-types\n ({ well }) => {\n return (\n <div style={{ color: '#fff', background: '##414141' }}>\n <span style={{ fontSize: '11px', lineHeight: '16px' }}>{get(well, 'name')}</span>\n </div>\n );\n };\n\n// eslint-disable-next-line no-unused-vars\nfunction WellsMap({\n subjectWell,\n wells,\n offsetWells,\n radius,\n subjectWellMarkerSize,\n wellMarkerSize,\n coordsDataPath,\n}) {\n const mapContainerRef = useRef(null);\n const radiusCircleRef = useRef(null);\n const markersGroupRef = useRef(null);\n const highlightMarkerRef = useRef(null);\n\n const prevWells = usePrevious(wells);\n\n const subjectWellCoords = useMemo(() => {\n return subjectWell && get(subjectWell, coordsDataPath);\n }, [subjectWell, coordsDataPath]);\n\n // NOTE: Initialize map\n useEffect(() => {\n mapContainerRef.current = L.mapbox\n .map(mapContainerRef.current, null, {\n attributionControl: false,\n scrollWheelZoom: false,\n zoomControl: false,\n })\n .setView(DEFAULT_COORDS, 1);\n\n L.control\n .zoom({\n position: 'bottomright',\n })\n .addTo(mapContainerRef.current);\n L.mapbox.styleLayer('mapbox://styles/mapbox/dark-v9').addTo(mapContainerRef.current);\n\n // NOTE: React nulls the DOM ref before deferred effect cleanup runs, so keep the map in a local\n const map = mapContainerRef.current;\n return () => {\n // NOTE: mapbox.js defers _updateMapFeedbackLink on layerremove; after remove() it crashes on the deleted control container\n map.off('layerremove');\n map.remove();\n mapContainerRef.current = null;\n radiusCircleRef.current = null;\n markersGroupRef.current = null;\n };\n }, []);\n\n // NOTE: Radius circle\n useEffect(() => {\n if (!mapContainerRef.current) {\n return;\n }\n\n // NOTE: Clean up\n if (radiusCircleRef.current) {\n mapContainerRef.current.removeLayer(radiusCircleRef.current);\n }\n\n if (!subjectWellCoords) {\n radiusCircleRef.current = null;\n return;\n }\n\n radiusCircleRef.current = L.circle(subjectWellCoords, radius * METERS_IN_MILE, {\n stroke: false,\n fill: true,\n fillOpacity: 0.2,\n fillColor: RADIUS_CIRCLE_COLOR,\n className: 'circle_500',\n });\n\n radiusCircleRef.current.addTo(mapContainerRef.current);\n }, [radius, subjectWellCoords]);\n\n const handleMouseOver = (markers, coords, r) => {\n highlightMarkerRef.current = L.circleMarker(coords, {\n radius: r * 3,\n stroke: false,\n fill: true,\n fillOpacity: 0.2,\n fillColor: OFFSET_WELL_COLOR,\n className: 'circle_highlight',\n });\n\n highlightMarkerRef.current.addEventListener('mouseout', () => {\n markersGroupRef.current.removeFrom(mapContainerRef.current);\n markersGroupRef.current = L.featureGroup(markers);\n markersGroupRef.current.addTo(mapContainerRef.current);\n\n mapContainerRef.current.closePopup();\n });\n\n const newMarkers = markers.concat(highlightMarkerRef.current);\n markersGroupRef.current = L.featureGroup(newMarkers);\n markersGroupRef.current.addTo(mapContainerRef.current);\n };\n\n // NOTE: Well markers\n useEffect(() => {\n if (!mapContainerRef.current) {\n return;\n }\n\n mapContainerRef.current.closePopup();\n\n // NOTE: Clean up\n if (markersGroupRef.current) {\n markersGroupRef.current.removeFrom(mapContainerRef.current);\n }\n\n const offsetWellIds = offsetWells.map(well => well.id);\n\n const markers = [];\n wells.forEach(well => {\n const coords = get(well, coordsDataPath);\n\n if (coords && isValidCoordinates(coords)) {\n const isWellSubject = subjectWell && subjectWell.id === well.id;\n const isWellOffset = offsetWellIds.includes(well.id);\n const r = isWellSubject ? subjectWellMarkerSize : wellMarkerSize;\n const color = OFFSET_WELL_COLOR;\n const opacity = isWellSubject || isWellOffset ? 1 : 0.3;\n\n const newMarker = L.circleMarker(coords, {\n radius: r,\n stroke: false,\n fill: true,\n fillOpacity: opacity,\n fillColor: color,\n className: 'circle_500',\n });\n\n newMarker.addEventListener('mouseover', () => {\n // Tooltip\n const tooltipContainer = document.createElement('div');\n const tootipContent = createElement(toolTip(), { well });\n ReactDOM.render(tootipContent, tooltipContainer);\n L.popup().setLatLng(coords).setContent(tooltipContainer).openOn(mapContainerRef.current);\n\n // Highlight\n handleMouseOver(markers, coords, r);\n });\n\n markers.push(newMarker);\n }\n });\n\n if (markers.length) {\n markersGroupRef.current = L.featureGroup(markers);\n markersGroupRef.current.addTo(mapContainerRef.current);\n }\n\n setTimeout(() => {\n if (radiusCircleRef.current) {\n radiusCircleRef.current.bringToBack();\n }\n\n if (mapContainerRef.current && markersGroupRef.current && wells !== prevWells) {\n mapContainerRef.current.fitBounds(markersGroupRef.current.getBounds());\n }\n }, 500);\n }, [subjectWell, wells, offsetWells]);\n\n return (\n <div className={styles.map}>\n <div className={styles.mapMain} ref={mapContainerRef} />\n </div>\n );\n}\n\nWellsMap.propTypes = {\n subjectWell: PropTypes.shape({\n id: PropTypes.number,\n formation: PropTypes.string,\n }),\n wells: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\n offsetWells: PropTypes.arrayOf(PropTypes.shape({})),\n radius: PropTypes.number.isRequired,\n subjectWellMarkerSize: PropTypes.number,\n wellMarkerSize: PropTypes.number,\n coordsDataPath: PropTypes.string,\n};\n\nWellsMap.defaultProps = {\n subjectWell: null,\n subjectWellMarkerSize: DEFAULT_SUBJECT_WELL_MARKER_SIZE,\n wellMarkerSize: DEFAULT_WELL_MARKER_SIZE,\n coordsDataPath: 'settings.top_hole.coordinates',\n offsetWells: null,\n};\n\nexport default memo(WellsMap);\n"],"names":["isValidCoordinates","mapbox","DEFAULT_COORDS","WellsMap","_ref2","subjectWell","wells","offsetWells","radius","subjectWellMarkerSize","wellMarkerSize","coordsDataPath","mapContainerRef","useRef","radiusCircleRef","markersGroupRef","highlightMarkerRef","prevWells","usePrevious","subjectWellCoords","useMemo","get","useEffect","current","L","map","attributionControl","scrollWheelZoom","zoomControl","setView","control","zoom","position","addTo","styleLayer","off","remove","removeLayer","circle","stroke","fill","fillOpacity","fillColor","className","closePopup","removeFrom","offsetWellIds","well","id","markers","forEach","coords","isWellSubject","isWellOffset","includes","r","opacity","newMarker","circleMarker","addEventListener","tooltipContainer","document","createElement","tootipContent","_ref","_jsx","style","color","background","children","jsx","fontSize","lineHeight","ReactDOM","render","popup","setLatLng","setContent","openOn","featureGroup","newMarkers","concat","handleMouseOver","push","length","setTimeout","bringToBack","fitBounds","getBounds","styles","mapMain","ref","propTypes","PropTypes","shape","number","formation","string","arrayOf","isRequired","defaultProps","memo"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("@babel/runtime/helpers/defineProperty"),r=require("@babel/runtime/helpers/toConsumableArray"),t=require("@babel/runtime/helpers/slicedToArray"),u=require("react"),n=require("react-dom"),
|
|
1
|
+
"use strict";var e=require("@babel/runtime/helpers/defineProperty"),r=require("@babel/runtime/helpers/toConsumableArray"),t=require("@babel/runtime/helpers/slicedToArray"),u=require("react"),n=require("react-dom"),l=require("lodash"),c=require("classnames"),o=require("@material-ui/core"),i=require("@material-ui/icons"),a=require("mapbox.js"),s=require("./effects/usePreviousWells.js"),f=require("./WellTooltip.js"),d=require("./utils.js"),m=require("./OffsetWellMap.module.css.js"),v=require("../../utils/index.js"),p=require("react/jsx-runtime");function g(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var h=g(e),b=g(r),y=g(t),C=g(n),B=g(c),x=g(a),j=v.mapbox.isValidCoordinates,k=[29.749907,-95.358421],E=["_renderer","_bounds","min"];module.exports=function(e){var r=e.isViewOnly,t=e.subjectWell,n=void 0===t?null:t,c=e.wells,a=e.offsetWellIds,v=e.radius,g=e.handleChanageOffsetWell,D=e.handleChangeOffsetWell,T=void 0===D?g:D,q=e.activeWellId,O=e.isClickable,F=void 0===O||O,N=e.classes,W=void 0===N?{}:N,z=u.useMemo((function(){return n&&l.get(n,"topHole.coordinates")}),[n]),L=u.useMemo((function(){return d.getAllFormations(c)}),[c]),R=u.useRef(),S=u.useRef(),w=u.useRef(),M=u.useRef(),Z=u.useRef(null),_=u.useState(!1),I=y.default(_,2),P=I[0],A=I[1],G=u.useRef(),V=u.useRef(),H=(null==n?void 0:n.id)===q,U=s.usePreviousWells(c),J=u.useState(null),K=y.default(J,2),Q=K[0],X=K[1],Y=u.useState(3),$=y.default(Y,2),ee=$[0],re=$[1],te=u.useRef(new Map),ue=u.useRef([]),ne=u.useRef(null);u.useEffect((function(){R.current=x.default.mapbox.map(R.current,null,{attributionControl:!1,scrollWheelZoom:!1,zoomControl:!1}).setView(k,3).on("zoomend",(function(){return re(R.current.getZoom())})),R.current.doubleClickZoom.disable(),x.default.mapbox.styleLayer("mapbox://styles/mapbox/dark-v9").addTo(R.current);var e=R.current;return function(){e.off("layerremove"),e.remove(),R.current=null,S.current=null,M.current=null}}),[]),u.useEffect((function(){if(R.current){if(S.current&&(R.current.removeLayer(S.current),S.current=null),w.current&&R.current.removeLayer(w.current),!z)return S.current=null,void(w.current=null);v&&(S.current=x.default.circle(z,1609.34*v,{stroke:!1,fill:!0,fillOpacity:.2,fillColor:"#03BCD4",className:"circle_500"}),S.current.addTo(R.current))}}),[v,z]);var le=function(e,t,u,n,l,c){c&&(e.setStyle({fillColor:"#63EFFF"}),A(!0)),Z.current=x.default.circleMarker(t,{radius:c?5:12,stroke:!1,fill:!0,fillOpacity:.24,fillColor:c?"#63EFFF":u,className:"circle_highlight"}),Z.current.addEventListener("mouseout",(function(){M.current.removeFrom(R.current),M.current=x.default.featureGroup(G.current),M.current.addTo(R.current),R.current.closePopup(),c&&(e.setStyle({fillColor:"#03BCD4"}),A(!1))})),Z.current.addEventListener("click",(function(){r||T(n,!l)}));var o=G.current.concat(Z.current);M.current.removeFrom(R.current),M.current=x.default.featureGroup(o),M.current.addTo(R.current)},ce=function(e,t,n,c,o){var i=document.createElement("div"),a=u.createElement(f.WellTooltip(),{isViewOnly:r,well:e,color:l.get(L,e.formation,"#BDBDBD"),isOffsetWell:t,isSubjectWell:n,offset:o,isClickable:F});C.default.render(p.jsx(p.Fragment,{children:a}),i),x.default.popup().setLatLng(c).setContent(i).openOn(R.current)};u.useEffect((function(){if(R.current&&c&&a){R.current.closePopup();var e=new Set(a),r=new Set(ue.current);if(c===U&&ne.current===q&&c.every((function(e){return e.id}))&&e.size===r.size){var t=c.filter((function(t){return r.has(t.id)!==e.has(t.id)&&t.id!==(null==n?void 0:n.id)}));if(t.length>0&&t.length<10)return t.forEach((function(e){var r=te.current.get(e.id);if(r){var t=a.includes(e.id),u=l.get(L,e.formation,"#BDBDBD"),n=t?.7:.3;r.setStyle({fillOpacity:n,fillColor:u})}})),ue.current=b.default(a),void(ne.current=q)}M.current&&M.current.removeFrom(R.current),te.current.clear();var u=[],o=[],i=[];c.forEach((function(e){e.id!==(null==n?void 0:n.id)&&(a.includes(e.id)?o.push(e):i.push(e))})),[].concat(i,o,[n]).forEach((function(e){var r,t=null==e||null===(r=e.topHole)||void 0===r?void 0:r.coordinates;if(t&&j(t)){var c=(null==n?void 0:n.id)===e.id,o=a.includes(e.id)&&!c,i=c?"#03BCD4":l.get(L,e.formation,"#BDBDBD"),s=o?.7:.3;if(o){var f=x.default.circleMarker(t,{radius:12,stroke:!1,fill:!0,fillColor:i,className:"circle_500",fillOpacity:.08});u.push(f)}var d=x.default.circleMarker(t,{radius:5,stroke:!1,fill:!0,fillOpacity:c?1:s,fillColor:i,className:"circle_500"});if(d.addEventListener("mouseover",(function(r){var u=[0,0];Q&&l.get(r.target,E)&&(u=[l.get(r.target,E).x-Q.x,l.get(r.target,E).y-Q.y]),ce(e,o,c,t,u),le(d,t,i,e,o,c)})),c&&(V.current=d),e.id&&te.current.set(e.id,d),u.push(d),e.id===q&&!H){var m=x.default.circleMarker(t,{radius:12,stroke:!1,fill:!0,fillOpacity:.24,fillColor:i,className:"circle_1200"});u.push(m)}}})),u.length&&(M.current=x.default.featureGroup(u),M.current.addTo(R.current)),G.current=u,ue.current=b.default(a),ne.current=q,setTimeout((function(){S.current&&S.current.bringToBack(),v<3e3&&R.current&&S.current&&c!==U&&R.current.fitBounds(S.current.getBounds(),{padding:[5,5]})}),500)}}),[n,c,a,Q]),u.useEffect((function(){if(P&&l.get(R.current,E)&&Q){var e=[l.get(R.current,E).x-Q.x,l.get(R.current,E).y-Q.y];ce(n,!1,!0,z,e)}}),[P,Q,n,z]),u.useEffect((function(){if(R.current&&z){w.current&&w.current.removeFrom(R.current);var e=x.default.icon({iconUrl:P||H?"/static/media/5e9c4959259cb12c11b2c5eaf27eb3ad.svg":"/static/media/9efe5882f31d2f22bd57af92069d0a3e.svg",iconSize:P||H?[70,20]:[62,12],iconAnchor:P||H?[35,29]:[31,25],className:"dot"});w.current=x.default.marker(z,{icon:e}),w.current.addTo(R.current),V.current&&(w.current.addEventListener("mouseover",(function(){A(!0),le(V.current,z,"#03BCD4",n,!0,!0)})),w.current.addEventListener("mouseout",(function(){M.current.removeFrom(R.current),M.current=x.default.featureGroup(G.current),M.current.addTo(R.current),R.current.closePopup(),V.current.setStyle({fillColor:"#03BCD4"}),A(!1)})))}}),[P,z,v,n,H,Q]),u.useEffect((function(){v>3e3?R.current.setZoom(1):setTimeout((function(){S.current&&S.current.bringToBack(),n?R.current&&S.current&&v&&R.current.fitBounds(S.current.getBounds(),{padding:[5,5]}):R.current&&M.current&&R.current.fitBounds(M.current.getBounds()),z&&R.current&&R.current.panTo(z,{duration:.7,easeLinearity:.25}),l.get(R.current,E)&&X(l.get(R.current,E))}),500)}),[v,n,z]);var oe=function(){R.current.setZoom(ee+1)};return p.jsx("div",{className:B.default(m.mapView,W.root),children:p.jsx("div",{className:B.default(m.mapMain,W.map),ref:R,onDoubleClick:oe,children:p.jsxs("div",{className:m.zoomGroup,children:[p.jsx(o.Tooltip,{title:ee<18?"Zoom in":"",placement:"left",children:p.jsx("div",{className:B.default(m.zoomButton,h.default({},m.zoomDisabled,18===ee)),onClick:oe,children:p.jsx(i.Add,{className:m.zoomInOutIcon})})}),p.jsx(o.Tooltip,{title:ee>1?"Zoom out":"",placement:"left",children:p.jsx("div",{className:B.default(m.zoomButton,h.default({},m.zoomDisabled,1===ee)),onClick:function(){ee>1&&R.current.setZoom(ee-1)},children:p.jsx(i.Remove,{className:m.zoomInOutIcon})})})]})})})};
|
|
2
2
|
//# sourceMappingURL=OffsetWellMap.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OffsetWellMap.js","sources":["../../../../src/components/OffsetWellMap/OffsetWellMap.js"],"sourcesContent":["import { createElement, useRef, useEffect, useState, useMemo } from 'react';\nimport ReactDOM from 'react-dom';\nimport { get } from 'lodash';\nimport classNames from 'classnames';\nimport { Tooltip } from '@material-ui/core';\nimport { Add as ZoomInIcon, Remove as ZoomOutIcon } from '@material-ui/icons';\nimport L from 'mapbox.js';\n\nimport SubjectWellIcon from './CustomIcon/SubjectWellIcon.svg';\nimport SubjectHighlightWellIcon from './CustomIcon/SubjectHighlightWellIcon.svg';\nimport { usePreviousWells } from './effects';\nimport { WellTooltip } from './WellTooltip';\nimport { getAllFormations } from './utils';\n\nimport styles from './OffsetWellMap.module.css';\n\nimport { mapbox } from '~/utils';\n\nconst { isValidCoordinates } = mapbox;\nconst DEFAULT_COORDS = [29.749907, -95.358421];\nconst WELL_MARKER_SIZE = 5;\nconst HIGHLIGHT_MARKER_SIZE = 12;\nconst OFFSET_WELL_COLOR = '#03BCD4';\nconst RADIUS_CIRCLE_COLOR = '#03BCD4';\nconst HIGHLIGHT_WELL_COLOR = '#63EFFF';\nconst METERS_IN_MILE = 1609.34;\nconst ZOOM_INIT_VALUE = 3;\nconst ZOOM_MAX_VALUE = 18;\nconst ZOOM_MIN_VALUE = 1;\nconst MAX_RADIUS = 3000;\n\nconst bounds = ['_renderer', '_bounds', 'min'];\n\n/** @type {React.FC<import('./OffsetWellMapProps').OffsetWellMapProps>} */\nconst OffsetWellMap = ({\n isViewOnly,\n subjectWell = null,\n wells,\n offsetWellIds,\n radius,\n handleChanageOffsetWell,\n handleChangeOffsetWell = handleChanageOffsetWell,\n activeWellId,\n isClickable = true,\n classes = {},\n}) => {\n const subjectWellCoords = useMemo(() => {\n return subjectWell && get(subjectWell, 'topHole.coordinates');\n }, [subjectWell]);\n const formationColors = useMemo(() => getAllFormations(wells), [wells]);\n\n const mapRef = useRef();\n const radiusCircleRef = useRef();\n const subjectIconRef = useRef();\n const markersGroupRef = useRef();\n const highlightMarkerRef = useRef(null);\n const [isSubjectWellHovered, setIsSubjectWellHovered] = useState(false);\n const wellMarkers = useRef();\n const subjectWellMarker = useRef();\n const isActiveWellIsSubjectWell = subjectWell?.id === activeWellId;\n const prevWells = usePreviousWells(wells);\n const [initBounds, setInitBounds] = useState(null);\n const [zoom, setZoom] = useState(ZOOM_INIT_VALUE);\n\n const markerMap = useRef(new Map());\n const prevOffsetWellIds = useRef([]);\n const prevActiveWellId = useRef(null);\n\n // NOTE: Initialize map\n useEffect(() => {\n mapRef.current = L.mapbox\n .map(mapRef.current, null, {\n attributionControl: false,\n scrollWheelZoom: false,\n zoomControl: false,\n })\n .setView(DEFAULT_COORDS, ZOOM_INIT_VALUE)\n .on('zoomend', () => setZoom(mapRef.current.getZoom()));\n mapRef.current.doubleClickZoom.disable();\n\n L.mapbox.styleLayer('mapbox://styles/mapbox/dark-v9').addTo(mapRef.current);\n }, []);\n\n // NOTE: Radius circle\n useEffect(() => {\n if (!mapRef.current) {\n return;\n }\n\n // NOTE: Clean up\n if (radiusCircleRef.current) {\n mapRef.current.removeLayer(radiusCircleRef.current);\n radiusCircleRef.current = null;\n }\n if (subjectIconRef.current) {\n mapRef.current.removeLayer(subjectIconRef.current);\n }\n\n if (!subjectWellCoords) {\n radiusCircleRef.current = null;\n subjectIconRef.current = null;\n return;\n }\n\n if (radius) {\n radiusCircleRef.current = L.circle(subjectWellCoords, radius * METERS_IN_MILE, {\n stroke: false,\n fill: true,\n fillOpacity: 0.2,\n fillColor: RADIUS_CIRCLE_COLOR,\n className: 'circle_500',\n });\n\n radiusCircleRef.current.addTo(mapRef.current);\n }\n }, [radius, subjectWellCoords]);\n\n // NOTE: Highlight marker\n const handleHighlightMarker = (\n currentMarker,\n coords,\n color,\n well,\n isOffsetWell,\n isSubjectWell\n ) => {\n if (isSubjectWell) {\n currentMarker.setStyle({ fillColor: HIGHLIGHT_WELL_COLOR });\n setIsSubjectWellHovered(true);\n }\n\n highlightMarkerRef.current = L.circleMarker(coords, {\n radius: isSubjectWell ? WELL_MARKER_SIZE : HIGHLIGHT_MARKER_SIZE,\n stroke: false,\n fill: true,\n fillOpacity: 0.24,\n fillColor: isSubjectWell ? HIGHLIGHT_WELL_COLOR : color,\n className: 'circle_highlight',\n });\n\n highlightMarkerRef.current.addEventListener('mouseout', () => {\n markersGroupRef.current.removeFrom(mapRef.current);\n markersGroupRef.current = L.featureGroup(wellMarkers.current);\n markersGroupRef.current.addTo(mapRef.current);\n mapRef.current.closePopup();\n if (isSubjectWell) {\n currentMarker.setStyle({ fillColor: OFFSET_WELL_COLOR });\n setIsSubjectWellHovered(false);\n }\n });\n\n highlightMarkerRef.current.addEventListener('click', () => {\n if (isViewOnly) return;\n if (isOffsetWell) {\n handleChangeOffsetWell(well, false);\n } else {\n handleChangeOffsetWell(well, true);\n }\n });\n\n const newMarkers = wellMarkers.current.concat(highlightMarkerRef.current);\n markersGroupRef.current.removeFrom(mapRef.current);\n markersGroupRef.current = L.featureGroup(newMarkers);\n markersGroupRef.current.addTo(mapRef.current);\n };\n\n const showTooltip = (well, isOffsetWell, isSubjectWell, coords, offset) => {\n const popUpContainer = document.createElement('div');\n const popUpContent = createElement(WellTooltip(), {\n isViewOnly,\n well,\n color: get(formationColors, well.formation, '#BDBDBD'),\n isOffsetWell,\n isSubjectWell,\n offset,\n isClickable,\n });\n ReactDOM.render(<>{popUpContent}</>, popUpContainer);\n L.popup().setLatLng(coords).setContent(popUpContainer).openOn(mapRef.current);\n };\n\n // NOTE: Well markers\n useEffect(() => {\n if (!mapRef.current || !wells || !offsetWellIds) {\n return;\n }\n\n mapRef.current.closePopup();\n\n const currentOffsetSet = new Set(offsetWellIds);\n const prevOffsetSet = new Set(prevOffsetWellIds.current);\n const onlyOffsetStatusChanged =\n wells === prevWells &&\n prevActiveWellId.current === activeWellId &&\n wells.every(well => well.id) &&\n currentOffsetSet.size === prevOffsetSet.size;\n\n if (onlyOffsetStatusChanged) {\n // only change markers that changed offset status\n const changedWells = wells.filter(well => {\n const wasOffset = prevOffsetSet.has(well.id);\n const isOffset = currentOffsetSet.has(well.id);\n return wasOffset !== isOffset && well.id !== subjectWell?.id;\n });\n\n if (changedWells.length > 0 && changedWells.length < 10) {\n changedWells.forEach(well => {\n const existingMarker = markerMap.current.get(well.id);\n if (existingMarker) {\n const isOffsetWell = offsetWellIds.includes(well.id);\n const color = get(formationColors, well.formation, '#BDBDBD');\n const opacity = isOffsetWell ? 0.7 : 0.3;\n\n existingMarker.setStyle({\n fillOpacity: opacity,\n fillColor: color,\n });\n }\n });\n\n prevOffsetWellIds.current = [...offsetWellIds];\n prevActiveWellId.current = activeWellId;\n return;\n }\n }\n\n // NOTE: Clean up\n if (markersGroupRef.current) {\n markersGroupRef.current.removeFrom(mapRef.current);\n }\n markerMap.current.clear();\n\n const markers = [];\n const offsetWells = [];\n const unSelectedWells = [];\n wells.forEach(well => {\n if (well.id !== subjectWell?.id) {\n if (offsetWellIds.includes(well.id)) {\n offsetWells.push(well);\n } else {\n unSelectedWells.push(well);\n }\n }\n });\n const sortedWells = [...unSelectedWells, ...offsetWells, subjectWell];\n sortedWells.forEach(well => {\n const coords = well?.topHole?.coordinates;\n\n if (coords && isValidCoordinates(coords)) {\n const isSubjectWell = subjectWell?.id === well.id;\n const isOffsetWell = offsetWellIds.includes(well.id) && !isSubjectWell;\n const color = isSubjectWell\n ? OFFSET_WELL_COLOR\n : get(formationColors, well.formation, '#BDBDBD');\n const opacity = isOffsetWell ? 0.7 : 0.3;\n\n if (isOffsetWell) {\n const newHighlightMarker = L.circleMarker(coords, {\n radius: HIGHLIGHT_MARKER_SIZE,\n stroke: false,\n fill: true,\n fillColor: color,\n className: 'circle_500',\n fillOpacity: 0.08,\n });\n markers.push(newHighlightMarker);\n }\n\n const newMarker = L.circleMarker(coords, {\n radius: WELL_MARKER_SIZE,\n stroke: false,\n fill: true,\n fillOpacity: isSubjectWell ? 1 : opacity,\n fillColor: color,\n className: 'circle_500',\n });\n\n newMarker.addEventListener('mouseover', e => {\n let offset = [0, 0];\n if (initBounds && get(e.target, bounds)) {\n offset = [\n get(e.target, bounds).x - initBounds.x,\n get(e.target, bounds).y - initBounds.y,\n ];\n }\n showTooltip(well, isOffsetWell, isSubjectWell, coords, offset);\n\n // Highlight\n handleHighlightMarker(newMarker, coords, color, well, isOffsetWell, isSubjectWell);\n });\n\n if (isSubjectWell) {\n subjectWellMarker.current = newMarker;\n }\n\n if (well.id) {\n markerMap.current.set(well.id, newMarker);\n }\n\n markers.push(newMarker);\n\n if (well.id === activeWellId && !isActiveWellIsSubjectWell) {\n const highlightMarker = L.circleMarker(coords, {\n radius: HIGHLIGHT_MARKER_SIZE,\n stroke: false,\n fill: true,\n fillOpacity: 0.24,\n fillColor: color,\n className: 'circle_1200',\n });\n markers.push(highlightMarker);\n }\n }\n });\n\n if (markers.length) {\n markersGroupRef.current = L.featureGroup(markers);\n markersGroupRef.current.addTo(mapRef.current);\n }\n wellMarkers.current = markers;\n\n prevOffsetWellIds.current = [...offsetWellIds];\n prevActiveWellId.current = activeWellId;\n\n setTimeout(() => {\n if (radiusCircleRef.current) {\n radiusCircleRef.current.bringToBack();\n }\n\n if (radius < MAX_RADIUS && mapRef.current && radiusCircleRef.current && wells !== prevWells) {\n mapRef.current.fitBounds(radiusCircleRef.current.getBounds(), { padding: [5, 5] });\n }\n }, 500);\n }, [subjectWell, wells, offsetWellIds, initBounds]);\n\n // NOTE: Subject Well Icon\n\n useEffect(() => {\n if (!isSubjectWellHovered) return;\n if (get(mapRef.current, bounds) && initBounds) {\n const offset = [\n get(mapRef.current, bounds).x - initBounds.x,\n get(mapRef.current, bounds).y - initBounds.y,\n ];\n showTooltip(subjectWell, false, true, subjectWellCoords, offset);\n }\n }, [isSubjectWellHovered, initBounds, subjectWell, subjectWellCoords]);\n\n useEffect(() => {\n if (!mapRef.current || !subjectWellCoords) return;\n\n if (subjectIconRef.current) {\n subjectIconRef.current.removeFrom(mapRef.current);\n }\n\n const icon = L.icon({\n iconUrl:\n isSubjectWellHovered || isActiveWellIsSubjectWell\n ? SubjectHighlightWellIcon\n : SubjectWellIcon,\n iconSize: isSubjectWellHovered || isActiveWellIsSubjectWell ? [70, 20] : [62, 12],\n iconAnchor: isSubjectWellHovered || isActiveWellIsSubjectWell ? [35, 29] : [31, 25],\n className: 'dot',\n });\n subjectIconRef.current = L.marker(subjectWellCoords, { icon });\n subjectIconRef.current.addTo(mapRef.current);\n\n if (subjectWellMarker.current) {\n subjectIconRef.current.addEventListener('mouseover', () => {\n setIsSubjectWellHovered(true);\n\n handleHighlightMarker(\n subjectWellMarker.current,\n subjectWellCoords,\n OFFSET_WELL_COLOR,\n subjectWell,\n true,\n true\n );\n });\n\n subjectIconRef.current.addEventListener('mouseout', () => {\n markersGroupRef.current.removeFrom(mapRef.current);\n markersGroupRef.current = L.featureGroup(wellMarkers.current);\n markersGroupRef.current.addTo(mapRef.current);\n mapRef.current.closePopup();\n subjectWellMarker.current.setStyle({ fillColor: OFFSET_WELL_COLOR });\n setIsSubjectWellHovered(false);\n });\n }\n }, [\n isSubjectWellHovered,\n subjectWellCoords,\n radius,\n subjectWell,\n isActiveWellIsSubjectWell,\n initBounds,\n ]);\n\n // NOTE: Map Update\n useEffect(() => {\n if (radius > MAX_RADIUS) {\n mapRef.current.setZoom(1);\n return;\n }\n setTimeout(() => {\n if (radiusCircleRef.current) {\n radiusCircleRef.current.bringToBack();\n }\n if (subjectWell) {\n if (mapRef.current && radiusCircleRef.current && radius) {\n mapRef.current.fitBounds(radiusCircleRef.current.getBounds(), {\n padding: [5, 5],\n });\n }\n } else if (mapRef.current && markersGroupRef.current) {\n mapRef.current.fitBounds(markersGroupRef.current.getBounds());\n }\n if (subjectWellCoords) {\n mapRef.current.panTo(subjectWellCoords, {\n duration: 0.7,\n easeLinearity: 0.25,\n });\n }\n if (get(mapRef.current, bounds)) {\n setInitBounds(get(mapRef.current, bounds));\n }\n }, 500);\n }, [radius, subjectWell, subjectWellCoords]);\n\n const handleZoomIn = () => {\n mapRef.current.setZoom(zoom + 1);\n };\n\n const handleZoomOut = () => {\n if (zoom > 1) {\n mapRef.current.setZoom(zoom - 1);\n }\n };\n\n return (\n <div className={classNames(styles.mapView, classes.root)}>\n <div\n className={classNames(styles.mapMain, classes.map)}\n ref={mapRef}\n onDoubleClick={handleZoomIn}\n >\n <div className={styles.zoomGroup}>\n <Tooltip title={zoom < ZOOM_MAX_VALUE ? 'Zoom in' : ''} placement=\"left\">\n <div\n className={classNames(styles.zoomButton, {\n [styles.zoomDisabled]: zoom === ZOOM_MAX_VALUE,\n })}\n onClick={handleZoomIn}\n >\n <ZoomInIcon className={styles.zoomInOutIcon} />\n </div>\n </Tooltip>\n <Tooltip title={zoom > ZOOM_MIN_VALUE ? 'Zoom out' : ''} placement=\"left\">\n <div\n className={classNames(styles.zoomButton, {\n [styles.zoomDisabled]: zoom === ZOOM_MIN_VALUE,\n })}\n onClick={handleZoomOut}\n >\n <ZoomOutIcon className={styles.zoomInOutIcon} />\n </div>\n </Tooltip>\n </div>\n </div>\n </div>\n );\n};\n\nexport default OffsetWellMap;\n"],"names":["isValidCoordinates","mapbox","DEFAULT_COORDS","bounds","_ref","isViewOnly","_ref$subjectWell","subjectWell","wells","offsetWellIds","radius","handleChanageOffsetWell","_ref$handleChangeOffs","handleChangeOffsetWell","activeWellId","_ref$isClickable","isClickable","_ref$classes","classes","subjectWellCoords","useMemo","get","formationColors","getAllFormations","mapRef","useRef","radiusCircleRef","subjectIconRef","markersGroupRef","highlightMarkerRef","useState","_useState2","_slicedToArray","_useState","isSubjectWellHovered","setIsSubjectWellHovered","wellMarkers","subjectWellMarker","isActiveWellIsSubjectWell","id","prevWells","usePreviousWells","_useState4","_useState3","initBounds","setInitBounds","_useState6","_useState5","zoom","setZoom","markerMap","Map","prevOffsetWellIds","prevActiveWellId","useEffect","current","L","map","attributionControl","scrollWheelZoom","zoomControl","setView","on","getZoom","doubleClickZoom","disable","styleLayer","addTo","removeLayer","circle","stroke","fill","fillOpacity","fillColor","className","handleHighlightMarker","currentMarker","coords","color","well","isOffsetWell","isSubjectWell","setStyle","circleMarker","addEventListener","removeFrom","featureGroup","closePopup","newMarkers","concat","showTooltip","offset","popUpContainer","document","createElement","popUpContent","WellTooltip","formation","ReactDOM","render","_jsx","jsx","_Fragment","children","popup","setLatLng","setContent","openOn","currentOffsetSet","Set","prevOffsetSet","every","size","changedWells","filter","has","length","forEach","existingMarker","includes","opacity","clear","markers","offsetWells","unSelectedWells","push","_well$topHole","topHole","coordinates","newHighlightMarker","newMarker","e","target","x","y","set","highlightMarker","setTimeout","bringToBack","fitBounds","getBounds","padding","icon","iconUrl","iconSize","iconAnchor","marker","panTo","duration","easeLinearity","handleZoomIn","classNames","styles","mapView","root","mapMain","ref","onDoubleClick","_jsxs","jsxs","zoomGroup","Tooltip","title","placement","zoomButton","_defineProperty","zoomDisabled","onClick","ZoomInIcon","zoomInOutIcon","ZoomOutIcon"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OffsetWellMap.js","sources":["../../../../src/components/OffsetWellMap/OffsetWellMap.js"],"sourcesContent":["import { createElement, useRef, useEffect, useState, useMemo } from 'react';\nimport ReactDOM from 'react-dom';\nimport { get } from 'lodash';\nimport classNames from 'classnames';\nimport { Tooltip } from '@material-ui/core';\nimport { Add as ZoomInIcon, Remove as ZoomOutIcon } from '@material-ui/icons';\nimport L from 'mapbox.js';\n\nimport SubjectWellIcon from './CustomIcon/SubjectWellIcon.svg';\nimport SubjectHighlightWellIcon from './CustomIcon/SubjectHighlightWellIcon.svg';\nimport { usePreviousWells } from './effects';\nimport { WellTooltip } from './WellTooltip';\nimport { getAllFormations } from './utils';\n\nimport styles from './OffsetWellMap.module.css';\n\nimport { mapbox } from '~/utils';\n\nconst { isValidCoordinates } = mapbox;\nconst DEFAULT_COORDS = [29.749907, -95.358421];\nconst WELL_MARKER_SIZE = 5;\nconst HIGHLIGHT_MARKER_SIZE = 12;\nconst OFFSET_WELL_COLOR = '#03BCD4';\nconst RADIUS_CIRCLE_COLOR = '#03BCD4';\nconst HIGHLIGHT_WELL_COLOR = '#63EFFF';\nconst METERS_IN_MILE = 1609.34;\nconst ZOOM_INIT_VALUE = 3;\nconst ZOOM_MAX_VALUE = 18;\nconst ZOOM_MIN_VALUE = 1;\nconst MAX_RADIUS = 3000;\n\nconst bounds = ['_renderer', '_bounds', 'min'];\n\n/** @type {React.FC<import('./OffsetWellMapProps').OffsetWellMapProps>} */\nconst OffsetWellMap = ({\n isViewOnly,\n subjectWell = null,\n wells,\n offsetWellIds,\n radius,\n handleChanageOffsetWell,\n handleChangeOffsetWell = handleChanageOffsetWell,\n activeWellId,\n isClickable = true,\n classes = {},\n}) => {\n const subjectWellCoords = useMemo(() => {\n return subjectWell && get(subjectWell, 'topHole.coordinates');\n }, [subjectWell]);\n const formationColors = useMemo(() => getAllFormations(wells), [wells]);\n\n const mapRef = useRef();\n const radiusCircleRef = useRef();\n const subjectIconRef = useRef();\n const markersGroupRef = useRef();\n const highlightMarkerRef = useRef(null);\n const [isSubjectWellHovered, setIsSubjectWellHovered] = useState(false);\n const wellMarkers = useRef();\n const subjectWellMarker = useRef();\n const isActiveWellIsSubjectWell = subjectWell?.id === activeWellId;\n const prevWells = usePreviousWells(wells);\n const [initBounds, setInitBounds] = useState(null);\n const [zoom, setZoom] = useState(ZOOM_INIT_VALUE);\n\n const markerMap = useRef(new Map());\n const prevOffsetWellIds = useRef([]);\n const prevActiveWellId = useRef(null);\n\n // NOTE: Initialize map\n useEffect(() => {\n mapRef.current = L.mapbox\n .map(mapRef.current, null, {\n attributionControl: false,\n scrollWheelZoom: false,\n zoomControl: false,\n })\n .setView(DEFAULT_COORDS, ZOOM_INIT_VALUE)\n .on('zoomend', () => setZoom(mapRef.current.getZoom()));\n mapRef.current.doubleClickZoom.disable();\n\n L.mapbox.styleLayer('mapbox://styles/mapbox/dark-v9').addTo(mapRef.current);\n\n // NOTE: React nulls the DOM ref before deferred effect cleanup runs, so keep the map in a local\n const map = mapRef.current;\n return () => {\n // NOTE: mapbox.js defers _updateMapFeedbackLink on layerremove; after remove() it crashes on the deleted control container\n map.off('layerremove');\n map.remove();\n mapRef.current = null;\n radiusCircleRef.current = null;\n markersGroupRef.current = null;\n };\n }, []);\n\n // NOTE: Radius circle\n useEffect(() => {\n if (!mapRef.current) {\n return;\n }\n\n // NOTE: Clean up\n if (radiusCircleRef.current) {\n mapRef.current.removeLayer(radiusCircleRef.current);\n radiusCircleRef.current = null;\n }\n if (subjectIconRef.current) {\n mapRef.current.removeLayer(subjectIconRef.current);\n }\n\n if (!subjectWellCoords) {\n radiusCircleRef.current = null;\n subjectIconRef.current = null;\n return;\n }\n\n if (radius) {\n radiusCircleRef.current = L.circle(subjectWellCoords, radius * METERS_IN_MILE, {\n stroke: false,\n fill: true,\n fillOpacity: 0.2,\n fillColor: RADIUS_CIRCLE_COLOR,\n className: 'circle_500',\n });\n\n radiusCircleRef.current.addTo(mapRef.current);\n }\n }, [radius, subjectWellCoords]);\n\n // NOTE: Highlight marker\n const handleHighlightMarker = (\n currentMarker,\n coords,\n color,\n well,\n isOffsetWell,\n isSubjectWell\n ) => {\n if (isSubjectWell) {\n currentMarker.setStyle({ fillColor: HIGHLIGHT_WELL_COLOR });\n setIsSubjectWellHovered(true);\n }\n\n highlightMarkerRef.current = L.circleMarker(coords, {\n radius: isSubjectWell ? WELL_MARKER_SIZE : HIGHLIGHT_MARKER_SIZE,\n stroke: false,\n fill: true,\n fillOpacity: 0.24,\n fillColor: isSubjectWell ? HIGHLIGHT_WELL_COLOR : color,\n className: 'circle_highlight',\n });\n\n highlightMarkerRef.current.addEventListener('mouseout', () => {\n markersGroupRef.current.removeFrom(mapRef.current);\n markersGroupRef.current = L.featureGroup(wellMarkers.current);\n markersGroupRef.current.addTo(mapRef.current);\n mapRef.current.closePopup();\n if (isSubjectWell) {\n currentMarker.setStyle({ fillColor: OFFSET_WELL_COLOR });\n setIsSubjectWellHovered(false);\n }\n });\n\n highlightMarkerRef.current.addEventListener('click', () => {\n if (isViewOnly) return;\n if (isOffsetWell) {\n handleChangeOffsetWell(well, false);\n } else {\n handleChangeOffsetWell(well, true);\n }\n });\n\n const newMarkers = wellMarkers.current.concat(highlightMarkerRef.current);\n markersGroupRef.current.removeFrom(mapRef.current);\n markersGroupRef.current = L.featureGroup(newMarkers);\n markersGroupRef.current.addTo(mapRef.current);\n };\n\n const showTooltip = (well, isOffsetWell, isSubjectWell, coords, offset) => {\n const popUpContainer = document.createElement('div');\n const popUpContent = createElement(WellTooltip(), {\n isViewOnly,\n well,\n color: get(formationColors, well.formation, '#BDBDBD'),\n isOffsetWell,\n isSubjectWell,\n offset,\n isClickable,\n });\n ReactDOM.render(<>{popUpContent}</>, popUpContainer);\n L.popup().setLatLng(coords).setContent(popUpContainer).openOn(mapRef.current);\n };\n\n // NOTE: Well markers\n useEffect(() => {\n if (!mapRef.current || !wells || !offsetWellIds) {\n return;\n }\n\n mapRef.current.closePopup();\n\n const currentOffsetSet = new Set(offsetWellIds);\n const prevOffsetSet = new Set(prevOffsetWellIds.current);\n const onlyOffsetStatusChanged =\n wells === prevWells &&\n prevActiveWellId.current === activeWellId &&\n wells.every(well => well.id) &&\n currentOffsetSet.size === prevOffsetSet.size;\n\n if (onlyOffsetStatusChanged) {\n // only change markers that changed offset status\n const changedWells = wells.filter(well => {\n const wasOffset = prevOffsetSet.has(well.id);\n const isOffset = currentOffsetSet.has(well.id);\n return wasOffset !== isOffset && well.id !== subjectWell?.id;\n });\n\n if (changedWells.length > 0 && changedWells.length < 10) {\n changedWells.forEach(well => {\n const existingMarker = markerMap.current.get(well.id);\n if (existingMarker) {\n const isOffsetWell = offsetWellIds.includes(well.id);\n const color = get(formationColors, well.formation, '#BDBDBD');\n const opacity = isOffsetWell ? 0.7 : 0.3;\n\n existingMarker.setStyle({\n fillOpacity: opacity,\n fillColor: color,\n });\n }\n });\n\n prevOffsetWellIds.current = [...offsetWellIds];\n prevActiveWellId.current = activeWellId;\n return;\n }\n }\n\n // NOTE: Clean up\n if (markersGroupRef.current) {\n markersGroupRef.current.removeFrom(mapRef.current);\n }\n markerMap.current.clear();\n\n const markers = [];\n const offsetWells = [];\n const unSelectedWells = [];\n wells.forEach(well => {\n if (well.id !== subjectWell?.id) {\n if (offsetWellIds.includes(well.id)) {\n offsetWells.push(well);\n } else {\n unSelectedWells.push(well);\n }\n }\n });\n const sortedWells = [...unSelectedWells, ...offsetWells, subjectWell];\n sortedWells.forEach(well => {\n const coords = well?.topHole?.coordinates;\n\n if (coords && isValidCoordinates(coords)) {\n const isSubjectWell = subjectWell?.id === well.id;\n const isOffsetWell = offsetWellIds.includes(well.id) && !isSubjectWell;\n const color = isSubjectWell\n ? OFFSET_WELL_COLOR\n : get(formationColors, well.formation, '#BDBDBD');\n const opacity = isOffsetWell ? 0.7 : 0.3;\n\n if (isOffsetWell) {\n const newHighlightMarker = L.circleMarker(coords, {\n radius: HIGHLIGHT_MARKER_SIZE,\n stroke: false,\n fill: true,\n fillColor: color,\n className: 'circle_500',\n fillOpacity: 0.08,\n });\n markers.push(newHighlightMarker);\n }\n\n const newMarker = L.circleMarker(coords, {\n radius: WELL_MARKER_SIZE,\n stroke: false,\n fill: true,\n fillOpacity: isSubjectWell ? 1 : opacity,\n fillColor: color,\n className: 'circle_500',\n });\n\n newMarker.addEventListener('mouseover', e => {\n let offset = [0, 0];\n if (initBounds && get(e.target, bounds)) {\n offset = [\n get(e.target, bounds).x - initBounds.x,\n get(e.target, bounds).y - initBounds.y,\n ];\n }\n showTooltip(well, isOffsetWell, isSubjectWell, coords, offset);\n\n // Highlight\n handleHighlightMarker(newMarker, coords, color, well, isOffsetWell, isSubjectWell);\n });\n\n if (isSubjectWell) {\n subjectWellMarker.current = newMarker;\n }\n\n if (well.id) {\n markerMap.current.set(well.id, newMarker);\n }\n\n markers.push(newMarker);\n\n if (well.id === activeWellId && !isActiveWellIsSubjectWell) {\n const highlightMarker = L.circleMarker(coords, {\n radius: HIGHLIGHT_MARKER_SIZE,\n stroke: false,\n fill: true,\n fillOpacity: 0.24,\n fillColor: color,\n className: 'circle_1200',\n });\n markers.push(highlightMarker);\n }\n }\n });\n\n if (markers.length) {\n markersGroupRef.current = L.featureGroup(markers);\n markersGroupRef.current.addTo(mapRef.current);\n }\n wellMarkers.current = markers;\n\n prevOffsetWellIds.current = [...offsetWellIds];\n prevActiveWellId.current = activeWellId;\n\n setTimeout(() => {\n if (radiusCircleRef.current) {\n radiusCircleRef.current.bringToBack();\n }\n\n if (radius < MAX_RADIUS && mapRef.current && radiusCircleRef.current && wells !== prevWells) {\n mapRef.current.fitBounds(radiusCircleRef.current.getBounds(), { padding: [5, 5] });\n }\n }, 500);\n }, [subjectWell, wells, offsetWellIds, initBounds]);\n\n // NOTE: Subject Well Icon\n\n useEffect(() => {\n if (!isSubjectWellHovered) return;\n if (get(mapRef.current, bounds) && initBounds) {\n const offset = [\n get(mapRef.current, bounds).x - initBounds.x,\n get(mapRef.current, bounds).y - initBounds.y,\n ];\n showTooltip(subjectWell, false, true, subjectWellCoords, offset);\n }\n }, [isSubjectWellHovered, initBounds, subjectWell, subjectWellCoords]);\n\n useEffect(() => {\n if (!mapRef.current || !subjectWellCoords) return;\n\n if (subjectIconRef.current) {\n subjectIconRef.current.removeFrom(mapRef.current);\n }\n\n const icon = L.icon({\n iconUrl:\n isSubjectWellHovered || isActiveWellIsSubjectWell\n ? SubjectHighlightWellIcon\n : SubjectWellIcon,\n iconSize: isSubjectWellHovered || isActiveWellIsSubjectWell ? [70, 20] : [62, 12],\n iconAnchor: isSubjectWellHovered || isActiveWellIsSubjectWell ? [35, 29] : [31, 25],\n className: 'dot',\n });\n subjectIconRef.current = L.marker(subjectWellCoords, { icon });\n subjectIconRef.current.addTo(mapRef.current);\n\n if (subjectWellMarker.current) {\n subjectIconRef.current.addEventListener('mouseover', () => {\n setIsSubjectWellHovered(true);\n\n handleHighlightMarker(\n subjectWellMarker.current,\n subjectWellCoords,\n OFFSET_WELL_COLOR,\n subjectWell,\n true,\n true\n );\n });\n\n subjectIconRef.current.addEventListener('mouseout', () => {\n markersGroupRef.current.removeFrom(mapRef.current);\n markersGroupRef.current = L.featureGroup(wellMarkers.current);\n markersGroupRef.current.addTo(mapRef.current);\n mapRef.current.closePopup();\n subjectWellMarker.current.setStyle({ fillColor: OFFSET_WELL_COLOR });\n setIsSubjectWellHovered(false);\n });\n }\n }, [\n isSubjectWellHovered,\n subjectWellCoords,\n radius,\n subjectWell,\n isActiveWellIsSubjectWell,\n initBounds,\n ]);\n\n // NOTE: Map Update\n useEffect(() => {\n if (radius > MAX_RADIUS) {\n mapRef.current.setZoom(1);\n return;\n }\n setTimeout(() => {\n if (radiusCircleRef.current) {\n radiusCircleRef.current.bringToBack();\n }\n if (subjectWell) {\n if (mapRef.current && radiusCircleRef.current && radius) {\n mapRef.current.fitBounds(radiusCircleRef.current.getBounds(), {\n padding: [5, 5],\n });\n }\n } else if (mapRef.current && markersGroupRef.current) {\n mapRef.current.fitBounds(markersGroupRef.current.getBounds());\n }\n if (subjectWellCoords && mapRef.current) {\n mapRef.current.panTo(subjectWellCoords, {\n duration: 0.7,\n easeLinearity: 0.25,\n });\n }\n if (get(mapRef.current, bounds)) {\n setInitBounds(get(mapRef.current, bounds));\n }\n }, 500);\n }, [radius, subjectWell, subjectWellCoords]);\n\n const handleZoomIn = () => {\n mapRef.current.setZoom(zoom + 1);\n };\n\n const handleZoomOut = () => {\n if (zoom > 1) {\n mapRef.current.setZoom(zoom - 1);\n }\n };\n\n return (\n <div className={classNames(styles.mapView, classes.root)}>\n <div\n className={classNames(styles.mapMain, classes.map)}\n ref={mapRef}\n onDoubleClick={handleZoomIn}\n >\n <div className={styles.zoomGroup}>\n <Tooltip title={zoom < ZOOM_MAX_VALUE ? 'Zoom in' : ''} placement=\"left\">\n <div\n className={classNames(styles.zoomButton, {\n [styles.zoomDisabled]: zoom === ZOOM_MAX_VALUE,\n })}\n onClick={handleZoomIn}\n >\n <ZoomInIcon className={styles.zoomInOutIcon} />\n </div>\n </Tooltip>\n <Tooltip title={zoom > ZOOM_MIN_VALUE ? 'Zoom out' : ''} placement=\"left\">\n <div\n className={classNames(styles.zoomButton, {\n [styles.zoomDisabled]: zoom === ZOOM_MIN_VALUE,\n })}\n onClick={handleZoomOut}\n >\n <ZoomOutIcon className={styles.zoomInOutIcon} />\n </div>\n </Tooltip>\n </div>\n </div>\n </div>\n );\n};\n\nexport default OffsetWellMap;\n"],"names":["isValidCoordinates","mapbox","DEFAULT_COORDS","bounds","_ref","isViewOnly","_ref$subjectWell","subjectWell","wells","offsetWellIds","radius","handleChanageOffsetWell","_ref$handleChangeOffs","handleChangeOffsetWell","activeWellId","_ref$isClickable","isClickable","_ref$classes","classes","subjectWellCoords","useMemo","get","formationColors","getAllFormations","mapRef","useRef","radiusCircleRef","subjectIconRef","markersGroupRef","highlightMarkerRef","useState","_useState2","_slicedToArray","_useState","isSubjectWellHovered","setIsSubjectWellHovered","wellMarkers","subjectWellMarker","isActiveWellIsSubjectWell","id","prevWells","usePreviousWells","_useState4","_useState3","initBounds","setInitBounds","_useState6","_useState5","zoom","setZoom","markerMap","Map","prevOffsetWellIds","prevActiveWellId","useEffect","current","L","map","attributionControl","scrollWheelZoom","zoomControl","setView","on","getZoom","doubleClickZoom","disable","styleLayer","addTo","off","remove","removeLayer","circle","stroke","fill","fillOpacity","fillColor","className","handleHighlightMarker","currentMarker","coords","color","well","isOffsetWell","isSubjectWell","setStyle","circleMarker","addEventListener","removeFrom","featureGroup","closePopup","newMarkers","concat","showTooltip","offset","popUpContainer","document","createElement","popUpContent","WellTooltip","formation","ReactDOM","render","_jsx","jsx","_Fragment","children","popup","setLatLng","setContent","openOn","currentOffsetSet","Set","prevOffsetSet","every","size","changedWells","filter","has","length","forEach","existingMarker","includes","opacity","clear","markers","offsetWells","unSelectedWells","push","_well$topHole","topHole","coordinates","newHighlightMarker","newMarker","e","target","x","y","set","highlightMarker","setTimeout","bringToBack","fitBounds","getBounds","padding","icon","iconUrl","iconSize","iconAnchor","marker","panTo","duration","easeLinearity","handleZoomIn","classNames","styles","mapView","root","mapMain","ref","onDoubleClick","_jsxs","jsxs","zoomGroup","Tooltip","title","placement","zoomButton","_defineProperty","zoomDisabled","onClick","ZoomInIcon","zoomInOutIcon","ZoomOutIcon"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("@babel/runtime/helpers/defineProperty"),r=require("@babel/runtime/helpers/slicedToArray"),t=require("react"),u=require("react-dom"),i=require("prop-types"),o=require("mapbox.js"),
|
|
1
|
+
"use strict";var e=require("@babel/runtime/helpers/defineProperty"),r=require("@babel/runtime/helpers/slicedToArray"),t=require("react"),u=require("react-dom"),i=require("prop-types"),o=require("mapbox.js"),n=require("lodash"),s=require("@material-ui/core/styles"),a=require("../../effects/index.js"),l=require("./Map.css.js"),c=require("../../../../utils/index.js"),d=require("../../../../config/theme/index.js");require("@babel/runtime/helpers/asyncToGenerator"),require("@babel/runtime/helpers/typeof"),require("@babel/runtime/regenerator"),require("highcharts-v8"),require("highcharts-v8/highcharts-more"),require("highcharts-v8/modules/solid-gauge"),require("highcharts-v8/modules/heatmap"),require("highcharts-v8/modules/boost"),require("highcharts-v8/modules/exporting"),require("highcharts-v8/modules/xrange"),require("highcharts-v8/modules/dumbbell"),require("highcharts-v8/modules/pattern-fill"),require("highcharts-multicolor-series-v8"),require("highcharts"),require("highcharts/highcharts-more"),require("highcharts/modules/solid-gauge"),require("highcharts/modules/heatmap"),require("highcharts/modules/boost"),require("highcharts/modules/exporting"),require("highcharts/modules/xrange"),require("highcharts/modules/dumbbell"),require("highcharts/modules/pattern-fill"),require("highcharts-multicolor-series"),require("dompurify"),require("../../../../config/mapbox/index.js"),require("../../../../clients/subscriptions/constants.js"),require("../../../../clients/subscriptions.v1.js"),require("../../../../clients/subscriptions/subscriptions-client.factory.js"),require("../../../../config/extendNative.js");var f=require("react/jsx-runtime");function m(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var h=m(e),p=m(r),b=m(u),g=m(i),v=m(o);function q(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var u=Object.getOwnPropertySymbols(e);r&&(u=u.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,u)}return t}function j(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?q(Object(t),!0).forEach((function(r){h.default(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):q(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}var F=c.mapbox.isValidCoordinates,y=["#FF00FF","#F5BD80","#FF0000","#0080FF","#FF8000","#58ACFA","#FA58F4","#40FF00","#4B8A08","#40FF00","#D8F781"],x=[29.749907,-95.358421];function O(e){var r=e.subjectWell,u=e.wells,i=e.offsetWells,o=e.radius,c=e.subjectWellMarkerSize,m=e.wellMarkerSize,g=e.popUpFormatter,q=e.coordsDataPath,O=t.useRef(null),k=t.useRef(null),P=t.useRef(null),N=a.usePrevious(u),w=t.useMemo((function(){return u.filter((function(e){return!r||r.id!==e.id}))}),[r,u]),B=t.useMemo((function(){return r&&n.get(r,q)}),[r,q]),M=t.useMemo((function(){var e=[],t=!1;w.forEach((function(u){"Null"===u.formation?t=!0:r&&r.formation===u.formation||e.includes(u.formation)||e.push(u.formation)}));var u=r?[r.formation].concat(n.sortBy(e)):n.sortBy(e);t&&!u.includes("Null")&&u.push("Null");var i=u.reduce((function(e,r,t){return j(j({},e),{},h.default({},r,y[t%y.length]))}),{});return[u,i]}),[r,w]),T=p.default(M,2),E=T[0],S=T[1];return t.useEffect((function(){O.current=v.default.mapbox.map(O.current,null,{attributionControl:!1,scrollWheelZoom:!1,zoomControl:!1}).setView(x,1),v.default.control.zoom({position:"bottomright"}).addTo(O.current),v.default.mapbox.styleLayer("mapbox://styles/mapbox/dark-v9").addTo(O.current);var e=O.current;return function(){e.off("layerremove"),e.remove(),O.current=null,k.current=null,P.current=null}}),[]),t.useEffect((function(){O.current&&(k.current&&O.current.removeLayer(k.current),B?(k.current=v.default.circle(B,1609.34*o,{stroke:!1,fill:!0,fillOpacity:.2,fillColor:"#03BCD4",className:"circle_500"}),k.current.addTo(O.current)):k.current=null)}),[o,B]),t.useEffect((function(){if(O.current){O.current.closePopup(),P.current&&P.current.removeFrom(O.current);var e=i.map((function(e){return e.id})),o=[];u.forEach((function(u){var i=n.get(u,q);if(i&&F(i)){var a=r&&r.id===u.id,l=e.includes(u.id),h=a?c:m,p=a||l?"#00FFFF":S[u.formation],j=a||l?1:.3,y=v.default.circleMarker(i,{radius:h,stroke:!1,fill:!0,fillOpacity:j,fillColor:p,className:"circle_500"});y.addEventListener("mouseover",(function(){if(g){var e=document.createElement("div"),r=t.createElement(g,{well:u,color:S[u.formation]});b.default.render(f.jsx(s.MuiThemeProvider,{theme:d.darkTheme,children:r}),e),v.default.popup().setLatLng(i).setContent(e).openOn(O.current)}})),o.push(y)}})),o.length&&(P.current=v.default.featureGroup(o),P.current.addTo(O.current)),setTimeout((function(){k.current&&k.current.bringToBack(),O.current&&k.current&&u!==N&&O.current.fitBounds(k.current.getBounds(),{padding:[5,5]})}),500)}}),[r,u,i,S]),t.useEffect((function(){setTimeout((function(){k.current&&k.current.bringToBack(),r?O.current&&k.current&&O.current.fitBounds(k.current.getBounds(),{padding:[5,5]}):O.current&&P.current&&O.current.fitBounds(P.current.getBounds())}),500)}),[o,r]),f.jsxs("div",{className:l.map,children:[f.jsx("div",{className:l.mapMain,ref:O}),f.jsxs("div",{className:l.mapFooter,children:[i&&f.jsxs("div",{className:l.mapFooterItem,children:[f.jsx("div",{className:l.mapFooterItemSquare,style:{backgroundColor:"#00FFFF"}}),f.jsx("div",{className:l.mapFooterItemLabel,children:"Selected Offset Wells"})]}),E.map((function(e){return f.jsxs("div",{className:l.mapFooterItem,children:[f.jsx("div",{className:l.mapFooterItemSquare,style:{backgroundColor:S[e]}}),f.jsx("div",{className:l.mapFooterItemLabel,children:e})]},e)}))]})]})}O.propTypes={subjectWell:g.default.shape({id:g.default.number,formation:g.default.string}),wells:g.default.arrayOf(g.default.shape({})).isRequired,offsetWells:g.default.arrayOf(g.default.shape({})),radius:g.default.number.isRequired,subjectWellMarkerSize:g.default.number,wellMarkerSize:g.default.number,popUpFormatter:g.default.func,coordsDataPath:g.default.string},O.defaultProps={subjectWell:null,subjectWellMarkerSize:10,wellMarkerSize:5,popUpFormatter:null,coordsDataPath:"settings.top_hole.coordinates",offsetWells:null};var k=t.memo(O);module.exports=k;
|
|
2
2
|
//# sourceMappingURL=Map.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Map.js","sources":["../../../../../../src/components/OffsetWellPickerV2/components/Map/Map.js"],"sourcesContent":["import { createElement, memo, useRef, useEffect, useMemo } from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport L from 'mapbox.js';\nimport { get, sortBy } from 'lodash';\nimport { MuiThemeProvider } from '@material-ui/core/styles';\n\nimport { usePrevious } from '../../effects';\n\nimport styles from './Map.css';\n\nimport { mapbox } from '~/utils';\nimport { theme } from '~/config';\n\nconst { isValidCoordinates } = mapbox;\n\nconst RADIUS_CIRCLE_COLOR = '#03BCD4';\nconst METERS_IN_MILE = 1609.34;\nconst DEFAULT_SUBJECT_WELL_MARKER_SIZE = 10;\nconst DEFAULT_WELL_MARKER_SIZE = 5;\nconst OFFSET_WELL_COLOR = '#00FFFF';\nconst COLORS = [\n '#FF00FF',\n '#F5BD80',\n '#FF0000',\n '#0080FF',\n '#FF8000',\n '#58ACFA',\n '#FA58F4',\n '#40FF00',\n '#4B8A08',\n '#40FF00',\n '#D8F781',\n];\n\nconst DEFAULT_COORDS = [29.749907, -95.358421]; // TX coordinates\n\n// eslint-disable-next-line no-unused-vars\nfunction WellsMap({\n subjectWell,\n wells,\n offsetWells,\n radius,\n subjectWellMarkerSize,\n wellMarkerSize,\n popUpFormatter,\n coordsDataPath,\n}) {\n const mapContainerRef = useRef(null);\n const radiusCircleRef = useRef(null);\n const markersGroupRef = useRef(null);\n\n const prevWells = usePrevious(wells);\n\n const restWells = useMemo(() => {\n return wells.filter(well => !subjectWell || subjectWell.id !== well.id);\n }, [subjectWell, wells]);\n\n const subjectWellCoords = useMemo(() => {\n return subjectWell && get(subjectWell, coordsDataPath);\n }, [subjectWell, coordsDataPath]);\n\n // NOTE: Get well marker colors according to its target formation\n const [formations, colorDict] = useMemo(() => {\n // NOTE: Determine well marker colors\n const restFormations = [];\n let hasNullFormation = false;\n\n restWells.forEach(well => {\n if (well.formation === 'Null') {\n hasNullFormation = true;\n } else if (\n (!subjectWell || subjectWell.formation !== well.formation) &&\n !restFormations.includes(well.formation)\n ) {\n restFormations.push(well.formation);\n }\n });\n\n const sortedFormations = subjectWell\n ? [subjectWell.formation].concat(sortBy(restFormations))\n : sortBy(restFormations);\n\n if (hasNullFormation && !sortedFormations.includes('Null')) {\n sortedFormations.push('Null');\n }\n\n const colors = sortedFormations.reduce(\n (result, item, idx) => ({\n ...result,\n [item]: COLORS[idx % COLORS.length],\n }),\n {}\n );\n\n return [sortedFormations, colors];\n }, [subjectWell, restWells]);\n\n // NOTE: Initialize map\n useEffect(() => {\n mapContainerRef.current = L.mapbox\n .map(mapContainerRef.current, null, {\n attributionControl: false,\n scrollWheelZoom: false,\n zoomControl: false,\n })\n .setView(DEFAULT_COORDS, 1);\n\n L.control\n .zoom({\n position: 'bottomright',\n })\n .addTo(mapContainerRef.current);\n L.mapbox.styleLayer('mapbox://styles/mapbox/dark-v9').addTo(mapContainerRef.current);\n }, []);\n\n // NOTE: Radius circle\n useEffect(() => {\n if (!mapContainerRef.current) {\n return;\n }\n\n // NOTE: Clean up\n if (radiusCircleRef.current) {\n mapContainerRef.current.removeLayer(radiusCircleRef.current);\n }\n\n if (!subjectWellCoords) {\n radiusCircleRef.current = null;\n return;\n }\n\n radiusCircleRef.current = L.circle(subjectWellCoords, radius * METERS_IN_MILE, {\n stroke: false,\n fill: true,\n fillOpacity: 0.2,\n fillColor: RADIUS_CIRCLE_COLOR,\n className: 'circle_500',\n });\n\n radiusCircleRef.current.addTo(mapContainerRef.current);\n }, [radius, subjectWellCoords]);\n\n // NOTE: Well markers\n useEffect(() => {\n if (!mapContainerRef.current) {\n return;\n }\n\n mapContainerRef.current.closePopup();\n\n // NOTE: Clean up\n if (markersGroupRef.current) {\n markersGroupRef.current.removeFrom(mapContainerRef.current);\n }\n\n const offsetWellIds = offsetWells.map(well => well.id);\n\n const markers = [];\n wells.forEach(well => {\n const coords = get(well, coordsDataPath);\n\n if (coords && isValidCoordinates(coords)) {\n const isWellSubject = subjectWell && subjectWell.id === well.id;\n const isWellOffset = offsetWellIds.includes(well.id);\n const r = isWellSubject ? subjectWellMarkerSize : wellMarkerSize;\n const color = isWellSubject || isWellOffset ? OFFSET_WELL_COLOR : colorDict[well.formation];\n const opacity = isWellSubject || isWellOffset ? 1 : 0.3;\n\n const newMarker = L.circleMarker(coords, {\n radius: r,\n stroke: false,\n fill: true,\n fillOpacity: opacity,\n fillColor: color,\n className: 'circle_500',\n });\n\n newMarker.addEventListener('mouseover', () => {\n if (popUpFormatter) {\n // Container to put React generated content in.\n const popUpContainer = document.createElement('div');\n const popUpContent = createElement(popUpFormatter, {\n well,\n color: colorDict[well.formation],\n });\n // NOTE: Custom popup may have buttons\n ReactDOM.render(\n <MuiThemeProvider theme={theme.darkTheme}>{popUpContent}</MuiThemeProvider>,\n popUpContainer\n );\n\n L.popup().setLatLng(coords).setContent(popUpContainer).openOn(mapContainerRef.current);\n }\n });\n\n markers.push(newMarker);\n }\n });\n\n if (markers.length) {\n markersGroupRef.current = L.featureGroup(markers);\n markersGroupRef.current.addTo(mapContainerRef.current);\n }\n\n setTimeout(() => {\n if (radiusCircleRef.current) {\n radiusCircleRef.current.bringToBack();\n }\n\n if (mapContainerRef.current && radiusCircleRef.current && wells !== prevWells) {\n mapContainerRef.current.fitBounds(radiusCircleRef.current.getBounds(), { padding: [5, 5] });\n }\n }, 500);\n }, [subjectWell, wells, offsetWells, colorDict]);\n\n useEffect(() => {\n setTimeout(() => {\n if (radiusCircleRef.current) {\n radiusCircleRef.current.bringToBack();\n }\n if (subjectWell) {\n if (mapContainerRef.current && radiusCircleRef.current) {\n mapContainerRef.current.fitBounds(radiusCircleRef.current.getBounds(), {\n padding: [5, 5],\n });\n }\n } else if (mapContainerRef.current && markersGroupRef.current) {\n mapContainerRef.current.fitBounds(markersGroupRef.current.getBounds());\n }\n }, 500);\n }, [radius, subjectWell]);\n\n return (\n <div className={styles.map}>\n <div className={styles.mapMain} ref={mapContainerRef} />\n\n <div className={styles.mapFooter}>\n {offsetWells && (\n <div className={styles.mapFooterItem}>\n <div\n className={styles.mapFooterItemSquare}\n style={{ backgroundColor: OFFSET_WELL_COLOR }}\n />\n <div className={styles.mapFooterItemLabel}>Selected Offset Wells</div>\n </div>\n )}\n\n {formations.map(item => (\n <div className={styles.mapFooterItem} key={item}>\n <div\n className={styles.mapFooterItemSquare}\n style={{ backgroundColor: colorDict[item] }}\n />\n <div className={styles.mapFooterItemLabel}>{item}</div>\n </div>\n ))}\n </div>\n </div>\n );\n}\n\nWellsMap.propTypes = {\n subjectWell: PropTypes.shape({\n id: PropTypes.number,\n formation: PropTypes.string,\n }),\n wells: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\n offsetWells: PropTypes.arrayOf(PropTypes.shape({})),\n radius: PropTypes.number.isRequired,\n subjectWellMarkerSize: PropTypes.number,\n wellMarkerSize: PropTypes.number,\n popUpFormatter: PropTypes.func,\n coordsDataPath: PropTypes.string,\n};\n\nWellsMap.defaultProps = {\n subjectWell: null,\n subjectWellMarkerSize: DEFAULT_SUBJECT_WELL_MARKER_SIZE,\n wellMarkerSize: DEFAULT_WELL_MARKER_SIZE,\n popUpFormatter: null,\n coordsDataPath: 'settings.top_hole.coordinates',\n offsetWells: null,\n};\n\nexport default memo(WellsMap);\n"],"names":["isValidCoordinates","mapbox","COLORS","DEFAULT_COORDS","WellsMap","_ref","subjectWell","wells","offsetWells","radius","subjectWellMarkerSize","wellMarkerSize","popUpFormatter","coordsDataPath","mapContainerRef","useRef","radiusCircleRef","markersGroupRef","prevWells","usePrevious","restWells","useMemo","filter","well","id","subjectWellCoords","get","restFormations","hasNullFormation","forEach","formation","includes","push","sortedFormations","concat","sortBy","colors","reduce","result","item","idx","length","_useMemo2","_slicedToArray","_useMemo","formations","colorDict","useEffect","current","L","map","attributionControl","scrollWheelZoom","zoomControl","setView","control","zoom","position","addTo","styleLayer","removeLayer","circle","stroke","fill","fillOpacity","fillColor","className","closePopup","removeFrom","offsetWellIds","markers","coords","isWellSubject","isWellOffset","r","color","opacity","newMarker","circleMarker","addEventListener","popUpContainer","document","createElement","popUpContent","ReactDOM","render","_jsx","jsx","MuiThemeProvider","theme","darkTheme","children","popup","setLatLng","setContent","openOn","featureGroup","setTimeout","bringToBack","fitBounds","getBounds","padding","_jsxs","styles","mapMain","ref","jsxs","mapFooter","mapFooterItem","mapFooterItemSquare","style","backgroundColor","mapFooterItemLabel","propTypes","PropTypes","shape","number","string","arrayOf","isRequired","func","defaultProps","memo"],"mappings":"gzEAcA,IAAQA,EAAuBC,EAAMA,OAA7BD,mBAOFE,EAAS,CACb,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAGIC,EAAiB,CAAC,WAAY,WAGpC,SAASC,EASNC,GAAA,IARDC,IAAAA,YACAC,IAAAA,MACAC,IAAAA,YACAC,IAAAA,OACAC,IAAAA,sBACAC,IAAAA,eACAC,IAAAA,eACAC,IAAAA,eAEMC,EAAkBC,SAAO,MACzBC,EAAkBD,SAAO,MACzBE,EAAkBF,SAAO,MAEzBG,EAAYC,cAAYZ,GAExBa,EAAYC,EAAAA,SAAQ,WACxB,OAAOd,EAAMe,QAAO,SAAAC,GAAI,OAAKjB,GAAeA,EAAYkB,KAAOD,EAAKC,KACtE,GAAG,CAAClB,EAAaC,IAEXkB,EAAoBJ,EAAAA,SAAQ,WAChC,OAAOf,GAAeoB,EAAAA,IAAIpB,EAAaO,EACzC,GAAG,CAACP,EAAaO,IAGeQ,EAAAA,EAAAA,SAAQ,WAEtC,IAAMM,EAAiB,GACnBC,GAAmB,EAEvBR,EAAUS,SAAQ,SAAAN,GACO,SAAnBA,EAAKO,UACPF,GAAmB,EAEjBtB,GAAeA,EAAYwB,YAAcP,EAAKO,WAC/CH,EAAeI,SAASR,EAAKO,YAE9BH,EAAeK,KAAKT,EAAKO,UAE7B,IAEA,IAAMG,EAAmB3B,EACrB,CAACA,EAAYwB,WAAWI,OAAOC,EAAAA,OAAOR,IACtCQ,EAAMA,OAACR,GAEPC,IAAqBK,EAAiBF,SAAS,SACjDE,EAAiBD,KAAK,QAGxB,IAAMI,EAASH,EAAiBI,QAC9B,SAACC,EAAQC,EAAMC,GAAG,OACbF,EAAAA,EAAAA,CAAAA,EAAAA,GACFC,CAAAA,EAAAA,EAAAA,QAAAA,CAAAA,EAAAA,EAAOrC,EAAOsC,EAAMtC,EAAOuC,SAC5B,GACF,CAAE,GAGJ,MAAO,CAACR,EAAkBG,EAC5B,GAAG,CAAC9B,EAAac,IAAWsB,EAAAC,EAAAA,QAAAC,EAAA,GAjCrBC,EAAUH,EAAA,GAAEI,EAASJ,EAAA,GA0K5B,OAtIAK,EAAAA,WAAU,WACRjC,EAAgBkC,QAAUC,UAAEhD,OACzBiD,IAAIpC,EAAgBkC,QAAS,KAAM,CAClCG,oBAAoB,EACpBC,iBAAiB,EACjBC,aAAa,IAEdC,QAAQnD,EAAgB,GAE3B8C,EAAC,QAACM,QACCC,KAAK,CACJC,SAAU,gBAEXC,MAAM5C,EAAgBkC,SACzBC,EAAC,QAAChD,OAAO0D,WAAW,kCAAkCD,MAAM5C,EAAgBkC,QAC7E,GAAE,IAGHD,EAAAA,WAAU,WACHjC,EAAgBkC,UAKjBhC,EAAgBgC,SAClBlC,EAAgBkC,QAAQY,YAAY5C,EAAgBgC,SAGjDvB,GAKLT,EAAgBgC,QAAUC,EAAC,QAACY,OAAOpC,EAnHhB,QAmHmChB,EAAyB,CAC7EqD,QAAQ,EACRC,MAAM,EACNC,YAAa,GACbC,UAxHsB,UAyHtBC,UAAW,eAGblD,EAAgBgC,QAAQU,MAAM5C,EAAgBkC,UAZ5ChC,EAAgBgC,QAAU,KAa9B,GAAG,CAACvC,EAAQgB,IAGZsB,EAAAA,WAAU,WACR,GAAKjC,EAAgBkC,QAArB,CAIAlC,EAAgBkC,QAAQmB,aAGpBlD,EAAgB+B,SAClB/B,EAAgB+B,QAAQoB,WAAWtD,EAAgBkC,SAGrD,IAAMqB,EAAgB7D,EAAY0C,KAAI,SAAA3B,GAAI,OAAIA,EAAKC,MAE7C8C,EAAU,GAChB/D,EAAMsB,SAAQ,SAAAN,GACZ,IAAMgD,EAAS7C,EAAAA,IAAIH,EAAMV,GAEzB,GAAI0D,GAAUvE,EAAmBuE,GAAS,CACxC,IAAMC,EAAgBlE,GAAeA,EAAYkB,KAAOD,EAAKC,GACvDiD,EAAeJ,EAActC,SAASR,EAAKC,IAC3CkD,EAAIF,EAAgB9D,EAAwBC,EAC5CgE,EAAQH,GAAiBC,EAlJb,UAkJgD3B,EAAUvB,EAAKO,WAC3E8C,EAAUJ,GAAiBC,EAAe,EAAI,GAE9CI,EAAY5B,EAAAA,QAAE6B,aAAaP,EAAQ,CACvC9D,OAAQiE,EACRZ,QAAQ,EACRC,MAAM,EACNC,YAAaY,EACbX,UAAWU,EACXT,UAAW,eAGbW,EAAUE,iBAAiB,aAAa,WACtC,GAAInE,EAAgB,CAElB,IAAMoE,EAAiBC,SAASC,cAAc,OACxCC,EAAeD,EAAaA,cAACtE,EAAgB,CACjDW,KAAAA,EACAoD,MAAO7B,EAAUvB,EAAKO,aAGxBsD,UAASC,OACPC,EAAAC,IAACC,mBAAgB,CAACC,MAAOA,EAAgBC,UAAAC,SAAER,IAC3CH,GAGF/B,EAAAA,QAAE2C,QAAQC,UAAUtB,GAAQuB,WAAWd,GAAgBe,OAAOjF,EAAgBkC,QAChF,CACF,IAEAsB,EAAQtC,KAAK6C,EACf,CACF,IAEIP,EAAQ7B,SACVxB,EAAgB+B,QAAUC,EAAAA,QAAE+C,aAAa1B,GACzCrD,EAAgB+B,QAAQU,MAAM5C,EAAgBkC,UAGhDiD,YAAW,WACLjF,EAAgBgC,SAClBhC,EAAgBgC,QAAQkD,cAGtBpF,EAAgBkC,SAAWhC,EAAgBgC,SAAWzC,IAAUW,GAClEJ,EAAgBkC,QAAQmD,UAAUnF,EAAgBgC,QAAQoD,YAAa,CAAEC,QAAS,CAAC,EAAG,IAEzF,GAAE,IAlEH,CAmED,GAAE,CAAC/F,EAAaC,EAAOC,EAAasC,IAErCC,EAAAA,WAAU,WACRkD,YAAW,WACLjF,EAAgBgC,SAClBhC,EAAgBgC,QAAQkD,cAEtB5F,EACEQ,EAAgBkC,SAAWhC,EAAgBgC,SAC7ClC,EAAgBkC,QAAQmD,UAAUnF,EAAgBgC,QAAQoD,YAAa,CACrEC,QAAS,CAAC,EAAG,KAGRvF,EAAgBkC,SAAW/B,EAAgB+B,SACpDlC,EAAgBkC,QAAQmD,UAAUlF,EAAgB+B,QAAQoD,YAE7D,GAAE,IACL,GAAG,CAAC3F,EAAQH,IAGVgG,EAAAA,KAAA,MAAA,CAAKpC,UAAWqC,EAAOrD,IAAIyC,SACzB,CAAAL,EAAAC,IAAA,MAAA,CAAKrB,UAAWqC,EAAOC,QAASC,IAAK3F,IAErCwF,EAAAI,KAAA,MAAA,CAAKxC,UAAWqC,EAAOI,UAAUhB,SAAA,CAC9BnF,GACC8F,EAAAI,KAAA,MAAA,CAAKxC,UAAWqC,EAAOK,cAAcjB,SACnC,CAAAL,EAAAC,IAAA,MAAA,CACErB,UAAWqC,EAAOM,oBAClBC,MAAO,CAAEC,gBA9NG,aAgOdzB,EAAAC,IAAA,MAAA,CAAKrB,UAAWqC,EAAOS,mBAAmBrB,SAAA,6BAI7C9C,EAAWK,KAAI,SAAAX,GAAI,OAClB+D,EAAAA,KAAA,MAAA,CAAKpC,UAAWqC,EAAOK,cAAcjB,SACnC,CAAAL,EAAAC,IAAA,MAAA,CACErB,UAAWqC,EAAOM,oBAClBC,MAAO,CAAEC,gBAAiBjE,EAAUP,MAEtC+C,EAAAC,IAAA,MAAA,CAAKrB,UAAWqC,EAAOS,mBAAmBrB,SAAEpD,MALHA,EAMrC,SAKhB,CAEAnC,EAAS6G,UAAY,CACnB3G,YAAa4G,EAAS,QAACC,MAAM,CAC3B3F,GAAI0F,EAAS,QAACE,OACdtF,UAAWoF,EAAS,QAACG,SAEvB9G,MAAO2G,EAAS,QAACI,QAAQJ,EAAAA,QAAUC,MAAM,CAAA,IAAKI,WAC9C/G,YAAa0G,EAAS,QAACI,QAAQJ,EAAS,QAACC,MAAM,CAAE,IACjD1G,OAAQyG,EAAAA,QAAUE,OAAOG,WACzB7G,sBAAuBwG,EAAS,QAACE,OACjCzG,eAAgBuG,EAAS,QAACE,OAC1BxG,eAAgBsG,EAAS,QAACM,KAC1B3G,eAAgBqG,EAAS,QAACG,QAG5BjH,EAASqH,aAAe,CACtBnH,YAAa,KACbI,sBApQuC,GAqQvCC,eApQ+B,EAqQ/BC,eAAgB,KAChBC,eAAgB,gCAChBL,YAAa,MAGf,IAAekH,EAAAA,EAAAA,KAAKtH"}
|
|
1
|
+
{"version":3,"file":"Map.js","sources":["../../../../../../src/components/OffsetWellPickerV2/components/Map/Map.js"],"sourcesContent":["import { createElement, memo, useRef, useEffect, useMemo } from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport L from 'mapbox.js';\nimport { get, sortBy } from 'lodash';\nimport { MuiThemeProvider } from '@material-ui/core/styles';\n\nimport { usePrevious } from '../../effects';\n\nimport styles from './Map.css';\n\nimport { mapbox } from '~/utils';\nimport { theme } from '~/config';\n\nconst { isValidCoordinates } = mapbox;\n\nconst RADIUS_CIRCLE_COLOR = '#03BCD4';\nconst METERS_IN_MILE = 1609.34;\nconst DEFAULT_SUBJECT_WELL_MARKER_SIZE = 10;\nconst DEFAULT_WELL_MARKER_SIZE = 5;\nconst OFFSET_WELL_COLOR = '#00FFFF';\nconst COLORS = [\n '#FF00FF',\n '#F5BD80',\n '#FF0000',\n '#0080FF',\n '#FF8000',\n '#58ACFA',\n '#FA58F4',\n '#40FF00',\n '#4B8A08',\n '#40FF00',\n '#D8F781',\n];\n\nconst DEFAULT_COORDS = [29.749907, -95.358421]; // TX coordinates\n\n// eslint-disable-next-line no-unused-vars\nfunction WellsMap({\n subjectWell,\n wells,\n offsetWells,\n radius,\n subjectWellMarkerSize,\n wellMarkerSize,\n popUpFormatter,\n coordsDataPath,\n}) {\n const mapContainerRef = useRef(null);\n const radiusCircleRef = useRef(null);\n const markersGroupRef = useRef(null);\n\n const prevWells = usePrevious(wells);\n\n const restWells = useMemo(() => {\n return wells.filter(well => !subjectWell || subjectWell.id !== well.id);\n }, [subjectWell, wells]);\n\n const subjectWellCoords = useMemo(() => {\n return subjectWell && get(subjectWell, coordsDataPath);\n }, [subjectWell, coordsDataPath]);\n\n // NOTE: Get well marker colors according to its target formation\n const [formations, colorDict] = useMemo(() => {\n // NOTE: Determine well marker colors\n const restFormations = [];\n let hasNullFormation = false;\n\n restWells.forEach(well => {\n if (well.formation === 'Null') {\n hasNullFormation = true;\n } else if (\n (!subjectWell || subjectWell.formation !== well.formation) &&\n !restFormations.includes(well.formation)\n ) {\n restFormations.push(well.formation);\n }\n });\n\n const sortedFormations = subjectWell\n ? [subjectWell.formation].concat(sortBy(restFormations))\n : sortBy(restFormations);\n\n if (hasNullFormation && !sortedFormations.includes('Null')) {\n sortedFormations.push('Null');\n }\n\n const colors = sortedFormations.reduce(\n (result, item, idx) => ({\n ...result,\n [item]: COLORS[idx % COLORS.length],\n }),\n {}\n );\n\n return [sortedFormations, colors];\n }, [subjectWell, restWells]);\n\n // NOTE: Initialize map\n useEffect(() => {\n mapContainerRef.current = L.mapbox\n .map(mapContainerRef.current, null, {\n attributionControl: false,\n scrollWheelZoom: false,\n zoomControl: false,\n })\n .setView(DEFAULT_COORDS, 1);\n\n L.control\n .zoom({\n position: 'bottomright',\n })\n .addTo(mapContainerRef.current);\n L.mapbox.styleLayer('mapbox://styles/mapbox/dark-v9').addTo(mapContainerRef.current);\n\n // NOTE: React nulls the DOM ref before deferred effect cleanup runs, so keep the map in a local\n const map = mapContainerRef.current;\n return () => {\n // NOTE: mapbox.js defers _updateMapFeedbackLink on layerremove; after remove() it crashes on the deleted control container\n map.off('layerremove');\n map.remove();\n mapContainerRef.current = null;\n radiusCircleRef.current = null;\n markersGroupRef.current = null;\n };\n }, []);\n\n // NOTE: Radius circle\n useEffect(() => {\n if (!mapContainerRef.current) {\n return;\n }\n\n // NOTE: Clean up\n if (radiusCircleRef.current) {\n mapContainerRef.current.removeLayer(radiusCircleRef.current);\n }\n\n if (!subjectWellCoords) {\n radiusCircleRef.current = null;\n return;\n }\n\n radiusCircleRef.current = L.circle(subjectWellCoords, radius * METERS_IN_MILE, {\n stroke: false,\n fill: true,\n fillOpacity: 0.2,\n fillColor: RADIUS_CIRCLE_COLOR,\n className: 'circle_500',\n });\n\n radiusCircleRef.current.addTo(mapContainerRef.current);\n }, [radius, subjectWellCoords]);\n\n // NOTE: Well markers\n useEffect(() => {\n if (!mapContainerRef.current) {\n return;\n }\n\n mapContainerRef.current.closePopup();\n\n // NOTE: Clean up\n if (markersGroupRef.current) {\n markersGroupRef.current.removeFrom(mapContainerRef.current);\n }\n\n const offsetWellIds = offsetWells.map(well => well.id);\n\n const markers = [];\n wells.forEach(well => {\n const coords = get(well, coordsDataPath);\n\n if (coords && isValidCoordinates(coords)) {\n const isWellSubject = subjectWell && subjectWell.id === well.id;\n const isWellOffset = offsetWellIds.includes(well.id);\n const r = isWellSubject ? subjectWellMarkerSize : wellMarkerSize;\n const color = isWellSubject || isWellOffset ? OFFSET_WELL_COLOR : colorDict[well.formation];\n const opacity = isWellSubject || isWellOffset ? 1 : 0.3;\n\n const newMarker = L.circleMarker(coords, {\n radius: r,\n stroke: false,\n fill: true,\n fillOpacity: opacity,\n fillColor: color,\n className: 'circle_500',\n });\n\n newMarker.addEventListener('mouseover', () => {\n if (popUpFormatter) {\n // Container to put React generated content in.\n const popUpContainer = document.createElement('div');\n const popUpContent = createElement(popUpFormatter, {\n well,\n color: colorDict[well.formation],\n });\n // NOTE: Custom popup may have buttons\n ReactDOM.render(\n <MuiThemeProvider theme={theme.darkTheme}>{popUpContent}</MuiThemeProvider>,\n popUpContainer\n );\n\n L.popup().setLatLng(coords).setContent(popUpContainer).openOn(mapContainerRef.current);\n }\n });\n\n markers.push(newMarker);\n }\n });\n\n if (markers.length) {\n markersGroupRef.current = L.featureGroup(markers);\n markersGroupRef.current.addTo(mapContainerRef.current);\n }\n\n setTimeout(() => {\n if (radiusCircleRef.current) {\n radiusCircleRef.current.bringToBack();\n }\n\n if (mapContainerRef.current && radiusCircleRef.current && wells !== prevWells) {\n mapContainerRef.current.fitBounds(radiusCircleRef.current.getBounds(), { padding: [5, 5] });\n }\n }, 500);\n }, [subjectWell, wells, offsetWells, colorDict]);\n\n useEffect(() => {\n setTimeout(() => {\n if (radiusCircleRef.current) {\n radiusCircleRef.current.bringToBack();\n }\n if (subjectWell) {\n if (mapContainerRef.current && radiusCircleRef.current) {\n mapContainerRef.current.fitBounds(radiusCircleRef.current.getBounds(), {\n padding: [5, 5],\n });\n }\n } else if (mapContainerRef.current && markersGroupRef.current) {\n mapContainerRef.current.fitBounds(markersGroupRef.current.getBounds());\n }\n }, 500);\n }, [radius, subjectWell]);\n\n return (\n <div className={styles.map}>\n <div className={styles.mapMain} ref={mapContainerRef} />\n\n <div className={styles.mapFooter}>\n {offsetWells && (\n <div className={styles.mapFooterItem}>\n <div\n className={styles.mapFooterItemSquare}\n style={{ backgroundColor: OFFSET_WELL_COLOR }}\n />\n <div className={styles.mapFooterItemLabel}>Selected Offset Wells</div>\n </div>\n )}\n\n {formations.map(item => (\n <div className={styles.mapFooterItem} key={item}>\n <div\n className={styles.mapFooterItemSquare}\n style={{ backgroundColor: colorDict[item] }}\n />\n <div className={styles.mapFooterItemLabel}>{item}</div>\n </div>\n ))}\n </div>\n </div>\n );\n}\n\nWellsMap.propTypes = {\n subjectWell: PropTypes.shape({\n id: PropTypes.number,\n formation: PropTypes.string,\n }),\n wells: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\n offsetWells: PropTypes.arrayOf(PropTypes.shape({})),\n radius: PropTypes.number.isRequired,\n subjectWellMarkerSize: PropTypes.number,\n wellMarkerSize: PropTypes.number,\n popUpFormatter: PropTypes.func,\n coordsDataPath: PropTypes.string,\n};\n\nWellsMap.defaultProps = {\n subjectWell: null,\n subjectWellMarkerSize: DEFAULT_SUBJECT_WELL_MARKER_SIZE,\n wellMarkerSize: DEFAULT_WELL_MARKER_SIZE,\n popUpFormatter: null,\n coordsDataPath: 'settings.top_hole.coordinates',\n offsetWells: null,\n};\n\nexport default memo(WellsMap);\n"],"names":["isValidCoordinates","mapbox","COLORS","DEFAULT_COORDS","WellsMap","_ref","subjectWell","wells","offsetWells","radius","subjectWellMarkerSize","wellMarkerSize","popUpFormatter","coordsDataPath","mapContainerRef","useRef","radiusCircleRef","markersGroupRef","prevWells","usePrevious","restWells","useMemo","filter","well","id","subjectWellCoords","get","restFormations","hasNullFormation","forEach","formation","includes","push","sortedFormations","concat","sortBy","colors","reduce","result","item","idx","length","_useMemo2","_slicedToArray","_useMemo","formations","colorDict","useEffect","current","L","map","attributionControl","scrollWheelZoom","zoomControl","setView","control","zoom","position","addTo","styleLayer","off","remove","removeLayer","circle","stroke","fill","fillOpacity","fillColor","className","closePopup","removeFrom","offsetWellIds","markers","coords","isWellSubject","isWellOffset","r","color","opacity","newMarker","circleMarker","addEventListener","popUpContainer","document","createElement","popUpContent","ReactDOM","render","_jsx","jsx","MuiThemeProvider","theme","darkTheme","children","popup","setLatLng","setContent","openOn","featureGroup","setTimeout","bringToBack","fitBounds","getBounds","padding","_jsxs","styles","mapMain","ref","jsxs","mapFooter","mapFooterItem","mapFooterItemSquare","style","backgroundColor","mapFooterItemLabel","propTypes","PropTypes","shape","number","string","arrayOf","isRequired","func","defaultProps","memo"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("react"),r=require("react-dom"),t=require("prop-types"),u=require("mapbox.js"),n=require("lodash"),o=require("../../effects/index.js"),l=require("./Map.css.js"),a=require("../../../../../../utils/index.js"),
|
|
1
|
+
"use strict";var e=require("react"),r=require("react-dom"),t=require("prop-types"),u=require("mapbox.js"),n=require("lodash"),o=require("../../effects/index.js"),l=require("./Map.css.js"),a=require("../../../../../../utils/index.js"),c=require("react/jsx-runtime");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=i(r),f=i(t),d=i(u),p=a.mapbox.isValidCoordinates,m=[29.749907,-95.358421];function v(r){var t=r.open,u=r.subjectWell,a=r.wells,i=r.offsetWells,f=r.radius,v=r.formationColors,g=r.popUpFormatter,b=r.coordsDataPath,h=r.onAddOffsetWell,B=r.onDeleteOffsetWell,q=e.useRef(null),x=e.useRef(),y=e.useRef(null),j=e.useRef(null),D=o.usePrevious(a),E=e.useMemo((function(){return u&&n.get(u,b)}),[u,b]);return e.useEffect((function(){t&&!x.current&&(x.current=d.default.mapbox.map(q.current,null,{attributionControl:!1,scrollWheelZoom:!1,zoomControl:!1}).setView(m,1),d.default.control.zoom({position:"bottomright"}).addTo(x.current),d.default.mapbox.styleLayer("mapbox://styles/mapbox/dark-v9").addTo(x.current))}),[t]),e.useEffect((function(){return function(){x.current&&(x.current.off("layerremove"),x.current.remove(),x.current=null,y.current=null,j.current=null)}}),[]),e.useEffect((function(){x.current&&t&&(y.current&&x.current.removeLayer(y.current),E?(y.current=d.default.circle(E,1609.34*f,{stroke:!1,fill:!0,fillOpacity:.2,fillColor:"#03BCD4",className:"circle_500"}),y.current.addTo(x.current)):y.current=null)}),[f,E,t]),e.useEffect((function(){if(x.current&&t){j.current&&j.current.removeFrom(x.current);var r=i.map((function(e){return e.id})),o=n.sortBy(a,(function(e){return r.includes(e.id)})),l=[];o.forEach((function(t){var o=n.get(t,b);if(o&&p(o)){var a=u&&u.id===t.id,i=r.includes(t.id),f=a?10:5,m=a||i?"#00FFFF":n.get(v,t.formation,"#BDBDBD"),q=a||i?1:.3,y=d.default.circleMarker(o,{radius:f,stroke:!1,fill:!0,fillOpacity:q,fillColor:m,className:"circle_500"});y.addEventListener("mouseover",(function(){if(g){var r=document.createElement("div"),u=e.createElement(g,{well:t,color:n.get(v,t.formation,"#BDBDBD")});s.default.render(c.jsx(c.Fragment,{children:u}),r),d.default.popup().setLatLng(o).setContent(r).openOn(x.current)}})),y.addEventListener("mouseout",(function(){x.current.closePopup()})),y.addEventListener("click",(function(){i&&!a?B(t.id):h(t.id)})),l.push(y)}})),l.length&&(j.current=d.default.featureGroup(l),j.current.addTo(x.current)),setTimeout((function(){y.current&&y.current.bringToBack(),x.current&&y.current&&a!==D&&x.current.fitBounds(y.current.getBounds(),{padding:[5,5]})}),500)}}),[u,a,i,t]),e.useEffect((function(){t&&setTimeout((function(){y.current&&y.current.bringToBack(),u?x.current&&y.current&&x.current.fitBounds(y.current.getBounds(),{padding:[5,5]}):x.current&&j.current&&x.current.fitBounds(j.current.getBounds())}),500)}),[f,u,t]),c.jsx("div",{className:l.map,children:c.jsx("div",{className:l.mapMain,ref:q})})}v.propTypes={open:f.default.bool.isRequired,subjectWell:f.default.shape({id:f.default.number,formation:f.default.string}),wells:f.default.arrayOf(f.default.shape({})).isRequired,offsetWells:f.default.arrayOf(f.default.shape({})),radius:f.default.number.isRequired,formationColors:f.default.shape({}).isRequired,popUpFormatter:f.default.func,coordsDataPath:f.default.string,onAddOffsetWell:f.default.func.isRequired,onDeleteOffsetWell:f.default.func.isRequired},v.defaultProps={subjectWell:null,popUpFormatter:null,coordsDataPath:"settings.top_hole.coordinates",offsetWells:null};var g=e.memo(v);module.exports=g;
|
|
2
2
|
//# sourceMappingURL=Map.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Map.js","sources":["../../../../../../../../src/components/OffsetWellPickerV3/components/CustomSelectionView/components/Map/Map.js"],"sourcesContent":["import { createElement, memo, useRef, useEffect, useMemo } from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport L from 'mapbox.js';\nimport { get, sortBy } from 'lodash';\n\nimport { usePrevious } from '../../effects';\n\nimport styles from './Map.css';\n\nimport { mapbox } from '~/utils';\n\nconst { isValidCoordinates } = mapbox;\n\nconst DEFAULT_COORDS = [29.749907, -95.358421]; // TX coordinates\nconst RADIUS_CIRCLE_COLOR = '#03BCD4';\nconst METERS_IN_MILE = 1609.34;\nconst DEFAULT_SUBJECT_WELL_MARKER_SIZE = 10;\nconst DEFAULT_WELL_MARKER_SIZE = 5;\nconst OFFSET_WELL_COLOR = '#00FFFF';\n\n// eslint-disable-next-line no-unused-vars\nfunction WellsMap({\n open,\n subjectWell,\n wells,\n offsetWells,\n radius,\n formationColors,\n popUpFormatter,\n coordsDataPath,\n onAddOffsetWell,\n onDeleteOffsetWell,\n}) {\n const mapContainerRef = useRef(null);\n const mapRef = useRef();\n const radiusCircleRef = useRef(null);\n const markersGroupRef = useRef(null);\n\n const prevWells = usePrevious(wells);\n\n const subjectWellCoords = useMemo(() => {\n return subjectWell && get(subjectWell, coordsDataPath);\n }, [subjectWell, coordsDataPath]);\n\n // NOTE: Initialize map\n useEffect(() => {\n if (!open || mapRef.current) return;\n\n mapRef.current = L.mapbox\n .map(mapContainerRef.current, null, {\n attributionControl: false,\n scrollWheelZoom: false,\n zoomControl: false,\n })\n .setView(DEFAULT_COORDS, 1);\n\n L.control\n .zoom({\n position: 'bottomright',\n })\n .addTo(mapRef.current);\n L.mapbox.styleLayer('mapbox://styles/mapbox/dark-v9').addTo(mapRef.current);\n }, [open]);\n\n // NOTE: Radius circle\n useEffect(() => {\n if (!mapRef.current || !open) {\n return;\n }\n\n // NOTE: Clean up\n if (radiusCircleRef.current) {\n mapRef.current.removeLayer(radiusCircleRef.current);\n }\n\n if (!subjectWellCoords) {\n radiusCircleRef.current = null;\n return;\n }\n\n radiusCircleRef.current = L.circle(subjectWellCoords, radius * METERS_IN_MILE, {\n stroke: false,\n fill: true,\n fillOpacity: 0.2,\n fillColor: RADIUS_CIRCLE_COLOR,\n className: 'circle_500',\n });\n\n radiusCircleRef.current.addTo(mapRef.current);\n }, [radius, subjectWellCoords, open]);\n\n // NOTE: Well markers\n useEffect(() => {\n if (!mapRef.current || !open) {\n return;\n }\n\n // NOTE: Clean up\n if (markersGroupRef.current) {\n markersGroupRef.current.removeFrom(mapRef.current);\n }\n\n const offsetWellIds = offsetWells.map(well => well.id);\n const sortedWells = sortBy(wells, well => offsetWellIds.includes(well.id));\n\n const markers = [];\n sortedWells.forEach(well => {\n const coords = get(well, coordsDataPath);\n\n if (coords && isValidCoordinates(coords)) {\n const isWellSubject = subjectWell && subjectWell.id === well.id;\n const isWellOffset = offsetWellIds.includes(well.id);\n const r = isWellSubject ? DEFAULT_SUBJECT_WELL_MARKER_SIZE : DEFAULT_WELL_MARKER_SIZE;\n const color =\n isWellSubject || isWellOffset\n ? OFFSET_WELL_COLOR\n : get(formationColors, well.formation, '#BDBDBD');\n const opacity = isWellSubject || isWellOffset ? 1 : 0.3;\n\n const newMarker = L.circleMarker(coords, {\n radius: r,\n stroke: false,\n fill: true,\n fillOpacity: opacity,\n fillColor: color,\n className: 'circle_500',\n });\n\n newMarker.addEventListener('mouseover', () => {\n if (popUpFormatter) {\n // Container to put React generated content in.\n const popUpContainer = document.createElement('div');\n const popUpContent = createElement(popUpFormatter, {\n well,\n color: get(formationColors, well.formation, '#BDBDBD'),\n });\n // NOTE: Custom popup may have buttons\n ReactDOM.render(<>{popUpContent}</>, popUpContainer);\n\n L.popup().setLatLng(coords).setContent(popUpContainer).openOn(mapRef.current);\n }\n });\n\n newMarker.addEventListener('mouseout', () => {\n mapRef.current.closePopup();\n });\n\n newMarker.addEventListener('click', () => {\n if (isWellOffset && !isWellSubject) {\n onDeleteOffsetWell(well.id);\n } else {\n onAddOffsetWell(well.id);\n }\n });\n\n markers.push(newMarker);\n }\n });\n\n if (markers.length) {\n markersGroupRef.current = L.featureGroup(markers);\n markersGroupRef.current.addTo(mapRef.current);\n }\n\n setTimeout(() => {\n if (radiusCircleRef.current) {\n radiusCircleRef.current.bringToBack();\n }\n\n if (mapRef.current && radiusCircleRef.current && wells !== prevWells) {\n mapRef.current.fitBounds(radiusCircleRef.current.getBounds(), { padding: [5, 5] });\n }\n }, 500);\n }, [subjectWell, wells, offsetWells, open]);\n\n useEffect(() => {\n if (!open) return;\n\n setTimeout(() => {\n if (radiusCircleRef.current) {\n radiusCircleRef.current.bringToBack();\n }\n if (subjectWell) {\n if (mapRef.current && radiusCircleRef.current) {\n mapRef.current.fitBounds(radiusCircleRef.current.getBounds(), {\n padding: [5, 5],\n });\n }\n } else if (mapRef.current && markersGroupRef.current) {\n mapRef.current.fitBounds(markersGroupRef.current.getBounds());\n }\n }, 500);\n }, [radius, subjectWell, open]);\n\n return (\n <div className={styles.map}>\n <div className={styles.mapMain} ref={mapContainerRef} />\n </div>\n );\n}\n\nWellsMap.propTypes = {\n open: PropTypes.bool.isRequired,\n subjectWell: PropTypes.shape({\n id: PropTypes.number,\n formation: PropTypes.string,\n }),\n wells: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\n offsetWells: PropTypes.arrayOf(PropTypes.shape({})),\n radius: PropTypes.number.isRequired,\n formationColors: PropTypes.shape({}).isRequired,\n popUpFormatter: PropTypes.func,\n coordsDataPath: PropTypes.string,\n onAddOffsetWell: PropTypes.func.isRequired,\n onDeleteOffsetWell: PropTypes.func.isRequired,\n};\n\nWellsMap.defaultProps = {\n subjectWell: null,\n popUpFormatter: null,\n coordsDataPath: 'settings.top_hole.coordinates',\n offsetWells: null,\n};\n\nexport default memo(WellsMap);\n"],"names":["isValidCoordinates","mapbox","DEFAULT_COORDS","WellsMap","_ref","open","subjectWell","wells","offsetWells","radius","formationColors","popUpFormatter","coordsDataPath","onAddOffsetWell","onDeleteOffsetWell","mapContainerRef","useRef","mapRef","radiusCircleRef","markersGroupRef","prevWells","usePrevious","subjectWellCoords","useMemo","get","useEffect","current","L","map","attributionControl","scrollWheelZoom","zoomControl","setView","control","zoom","position","addTo","styleLayer","removeLayer","circle","stroke","fill","fillOpacity","fillColor","className","removeFrom","offsetWellIds","well","id","sortedWells","sortBy","includes","markers","forEach","coords","isWellSubject","isWellOffset","r","color","formation","opacity","newMarker","circleMarker","addEventListener","popUpContainer","document","createElement","popUpContent","ReactDOM","render","_jsx","jsx","_Fragment","children","popup","setLatLng","setContent","openOn","closePopup","push","length","featureGroup","setTimeout","bringToBack","fitBounds","getBounds","padding","styles","mapMain","ref","propTypes","PropTypes","bool","isRequired","shape","number","string","arrayOf","func","defaultProps","memo"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Map.js","sources":["../../../../../../../../src/components/OffsetWellPickerV3/components/CustomSelectionView/components/Map/Map.js"],"sourcesContent":["import { createElement, memo, useRef, useEffect, useMemo } from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport L from 'mapbox.js';\nimport { get, sortBy } from 'lodash';\n\nimport { usePrevious } from '../../effects';\n\nimport styles from './Map.css';\n\nimport { mapbox } from '~/utils';\n\nconst { isValidCoordinates } = mapbox;\n\nconst DEFAULT_COORDS = [29.749907, -95.358421]; // TX coordinates\nconst RADIUS_CIRCLE_COLOR = '#03BCD4';\nconst METERS_IN_MILE = 1609.34;\nconst DEFAULT_SUBJECT_WELL_MARKER_SIZE = 10;\nconst DEFAULT_WELL_MARKER_SIZE = 5;\nconst OFFSET_WELL_COLOR = '#00FFFF';\n\n// eslint-disable-next-line no-unused-vars\nfunction WellsMap({\n open,\n subjectWell,\n wells,\n offsetWells,\n radius,\n formationColors,\n popUpFormatter,\n coordsDataPath,\n onAddOffsetWell,\n onDeleteOffsetWell,\n}) {\n const mapContainerRef = useRef(null);\n const mapRef = useRef();\n const radiusCircleRef = useRef(null);\n const markersGroupRef = useRef(null);\n\n const prevWells = usePrevious(wells);\n\n const subjectWellCoords = useMemo(() => {\n return subjectWell && get(subjectWell, coordsDataPath);\n }, [subjectWell, coordsDataPath]);\n\n // NOTE: Initialize map\n useEffect(() => {\n if (!open || mapRef.current) return;\n\n mapRef.current = L.mapbox\n .map(mapContainerRef.current, null, {\n attributionControl: false,\n scrollWheelZoom: false,\n zoomControl: false,\n })\n .setView(DEFAULT_COORDS, 1);\n\n L.control\n .zoom({\n position: 'bottomright',\n })\n .addTo(mapRef.current);\n L.mapbox.styleLayer('mapbox://styles/mapbox/dark-v9').addTo(mapRef.current);\n }, [open]);\n\n useEffect(\n () => () => {\n if (mapRef.current) {\n // NOTE: mapbox.js defers _updateMapFeedbackLink on layerremove; after remove() it crashes on the deleted control container\n mapRef.current.off('layerremove');\n mapRef.current.remove();\n mapRef.current = null;\n radiusCircleRef.current = null;\n markersGroupRef.current = null;\n }\n },\n []\n );\n\n // NOTE: Radius circle\n useEffect(() => {\n if (!mapRef.current || !open) {\n return;\n }\n\n // NOTE: Clean up\n if (radiusCircleRef.current) {\n mapRef.current.removeLayer(radiusCircleRef.current);\n }\n\n if (!subjectWellCoords) {\n radiusCircleRef.current = null;\n return;\n }\n\n radiusCircleRef.current = L.circle(subjectWellCoords, radius * METERS_IN_MILE, {\n stroke: false,\n fill: true,\n fillOpacity: 0.2,\n fillColor: RADIUS_CIRCLE_COLOR,\n className: 'circle_500',\n });\n\n radiusCircleRef.current.addTo(mapRef.current);\n }, [radius, subjectWellCoords, open]);\n\n // NOTE: Well markers\n useEffect(() => {\n if (!mapRef.current || !open) {\n return;\n }\n\n // NOTE: Clean up\n if (markersGroupRef.current) {\n markersGroupRef.current.removeFrom(mapRef.current);\n }\n\n const offsetWellIds = offsetWells.map(well => well.id);\n const sortedWells = sortBy(wells, well => offsetWellIds.includes(well.id));\n\n const markers = [];\n sortedWells.forEach(well => {\n const coords = get(well, coordsDataPath);\n\n if (coords && isValidCoordinates(coords)) {\n const isWellSubject = subjectWell && subjectWell.id === well.id;\n const isWellOffset = offsetWellIds.includes(well.id);\n const r = isWellSubject ? DEFAULT_SUBJECT_WELL_MARKER_SIZE : DEFAULT_WELL_MARKER_SIZE;\n const color =\n isWellSubject || isWellOffset\n ? OFFSET_WELL_COLOR\n : get(formationColors, well.formation, '#BDBDBD');\n const opacity = isWellSubject || isWellOffset ? 1 : 0.3;\n\n const newMarker = L.circleMarker(coords, {\n radius: r,\n stroke: false,\n fill: true,\n fillOpacity: opacity,\n fillColor: color,\n className: 'circle_500',\n });\n\n newMarker.addEventListener('mouseover', () => {\n if (popUpFormatter) {\n // Container to put React generated content in.\n const popUpContainer = document.createElement('div');\n const popUpContent = createElement(popUpFormatter, {\n well,\n color: get(formationColors, well.formation, '#BDBDBD'),\n });\n // NOTE: Custom popup may have buttons\n ReactDOM.render(<>{popUpContent}</>, popUpContainer);\n\n L.popup().setLatLng(coords).setContent(popUpContainer).openOn(mapRef.current);\n }\n });\n\n newMarker.addEventListener('mouseout', () => {\n mapRef.current.closePopup();\n });\n\n newMarker.addEventListener('click', () => {\n if (isWellOffset && !isWellSubject) {\n onDeleteOffsetWell(well.id);\n } else {\n onAddOffsetWell(well.id);\n }\n });\n\n markers.push(newMarker);\n }\n });\n\n if (markers.length) {\n markersGroupRef.current = L.featureGroup(markers);\n markersGroupRef.current.addTo(mapRef.current);\n }\n\n setTimeout(() => {\n if (radiusCircleRef.current) {\n radiusCircleRef.current.bringToBack();\n }\n\n if (mapRef.current && radiusCircleRef.current && wells !== prevWells) {\n mapRef.current.fitBounds(radiusCircleRef.current.getBounds(), { padding: [5, 5] });\n }\n }, 500);\n }, [subjectWell, wells, offsetWells, open]);\n\n useEffect(() => {\n if (!open) return;\n\n setTimeout(() => {\n if (radiusCircleRef.current) {\n radiusCircleRef.current.bringToBack();\n }\n if (subjectWell) {\n if (mapRef.current && radiusCircleRef.current) {\n mapRef.current.fitBounds(radiusCircleRef.current.getBounds(), {\n padding: [5, 5],\n });\n }\n } else if (mapRef.current && markersGroupRef.current) {\n mapRef.current.fitBounds(markersGroupRef.current.getBounds());\n }\n }, 500);\n }, [radius, subjectWell, open]);\n\n return (\n <div className={styles.map}>\n <div className={styles.mapMain} ref={mapContainerRef} />\n </div>\n );\n}\n\nWellsMap.propTypes = {\n open: PropTypes.bool.isRequired,\n subjectWell: PropTypes.shape({\n id: PropTypes.number,\n formation: PropTypes.string,\n }),\n wells: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\n offsetWells: PropTypes.arrayOf(PropTypes.shape({})),\n radius: PropTypes.number.isRequired,\n formationColors: PropTypes.shape({}).isRequired,\n popUpFormatter: PropTypes.func,\n coordsDataPath: PropTypes.string,\n onAddOffsetWell: PropTypes.func.isRequired,\n onDeleteOffsetWell: PropTypes.func.isRequired,\n};\n\nWellsMap.defaultProps = {\n subjectWell: null,\n popUpFormatter: null,\n coordsDataPath: 'settings.top_hole.coordinates',\n offsetWells: null,\n};\n\nexport default memo(WellsMap);\n"],"names":["isValidCoordinates","mapbox","DEFAULT_COORDS","WellsMap","_ref","open","subjectWell","wells","offsetWells","radius","formationColors","popUpFormatter","coordsDataPath","onAddOffsetWell","onDeleteOffsetWell","mapContainerRef","useRef","mapRef","radiusCircleRef","markersGroupRef","prevWells","usePrevious","subjectWellCoords","useMemo","get","useEffect","current","L","map","attributionControl","scrollWheelZoom","zoomControl","setView","control","zoom","position","addTo","styleLayer","off","remove","removeLayer","circle","stroke","fill","fillOpacity","fillColor","className","removeFrom","offsetWellIds","well","id","sortedWells","sortBy","includes","markers","forEach","coords","isWellSubject","isWellOffset","r","color","formation","opacity","newMarker","circleMarker","addEventListener","popUpContainer","document","createElement","popUpContent","ReactDOM","render","_jsx","jsx","_Fragment","children","popup","setLatLng","setContent","openOn","closePopup","push","length","featureGroup","setTimeout","bringToBack","fitBounds","getBounds","padding","styles","mapMain","ref","propTypes","PropTypes","bool","isRequired","shape","number","string","arrayOf","func","defaultProps","memo"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";require('./../../ext-esm/style-inject/dist/style-inject.es.js')('.Autocomplete_root__4SidE{width:100%}.Autocomplete_root__4SidE .MuiAutocomplete-endAdornment{display:contents}.Autocomplete_root__4SidE .MuiAutocomplete-clearIndicator,.Autocomplete_root__4SidE .MuiAutocomplete-popupIndicator{margin:0;padding:0;visibility:visible}.Autocomplete_root__4SidE .MuiAutocomplete-clearIndicator .MuiTouchRipple-root,.Autocomplete_root__4SidE .MuiAutocomplete-popupIndicator .MuiTouchRipple-root{display:none}.Autocomplete_root__4SidE .MuiAutocomplete-clearIndicator,.Autocomplete_root__4SidE .MuiAutocomplete-popupIndicator{background-color:transparent!important;transition:transform .15s cubic-bezier(.4,0,.2,1),color .15s cubic-bezier(.4,0,.2,1)}.Autocomplete_root__4SidE .MuiAutocomplete-clearIndicator svg,.Autocomplete_root__4SidE .MuiAutocomplete-popupIndicator svg{display:block}.Autocomplete_root__4SidE .MuiInputAdornment-positionStart{max-width:70%}.Autocomplete_paper__Vq6DC{--corvaui-background:var(--palette-background-b-9);background-color:var(--palette-background-b-9)!important;box-shadow:0 8px 24px 0 rgba(0,0,0,.24)!important;display:flex;flex-flow:column wrap;margin:8px 0;max-height:40vh;overflow:hidden;padding:0;position:relative}.Autocomplete_paper__Vq6DC:before{background:linear-gradient(180deg,rgb(from var(--corvaui-background) r g b/1) 0,rgb(from var(--corvaui-background) r g b/0) 100%);content:"";height:8px;inset:0 10px auto 0;position:absolute;z-index:1}.Autocomplete_paper__Vq6DC:after{background:linear-gradient(0deg,rgb(from var(--corvaui-background) r g b/1) 0,rgb(from var(--corvaui-background) r g b/0) 100%);content:"";height:8px;inset:auto 10px 0 0;position:absolute;z-index:1}.Autocomplete_paper__Vq6DC:has(.Autocomplete_sticky__0-eTa){padding-top:8px}.Autocomplete_paper__Vq6DC .MuiAutocomplete-listbox{flex:0 1 auto;max-height:unset;padding:8px 0}.Autocomplete_paper__Vq6DC .MuiAutocomplete-listbox,.Autocomplete_paper__Vq6DC .MuiAutocomplete-listbox li{width:100%}.Autocomplete_paper__Vq6DC .MuiAutocomplete-listbox:has(.Autocomplete_sticky__0-eTa){padding-top:0}.Autocomplete_paper__Vq6DC li.MuiAutocomplete-option{background:var(--corvaui-background)!important;display:block;padding:0 16px!important;z-index:1}.Autocomplete_paper__Vq6DC li.MuiAutocomplete-option[data-focus=true] .Autocomplete_menuItem__c2Qka{background-color:rgb(from var(--palette-primary-text-1) r g b/.08)}.Autocomplete_paper__Vq6DC li.MuiAutocomplete-option:has(.Autocomplete_sticky__0-eTa){left:0;position:sticky;top:0}.Autocomplete_paper__Vq6DC .Autocomplete_sticky__0-eTa{border-bottom:1px solid rgb(from var(--palette-primary-text-1) r g b/.25);overflow:visible}.Autocomplete_paper__Vq6DC .Autocomplete_listboxScrolled__n34NV .Autocomplete_sticky__0-eTa:after{background:linear-gradient(0deg,rgb(from var(--corvaui-background) r g b/0) 0,rgb(from var(--corvaui-background) r g b/1) 100%);content:"";height:8px;inset:100% 0 auto 0;margin-top:1px;position:absolute}.Autocomplete_paper__Vq6DC .MuiAutocomplete-noOptions{align-items:center;color:var(--palette-primary-text-6);display:flex;font-size:12px;font-style:italic;justify-content:center;min-height:31px;padding:0}.Autocomplete_paper__Vq6DC .MuiAutocomplete-groupLabel{background:var(--corvaui-background)!important;color:var(--palette-primary-text-7);font-size:12px;font-weight:400;line-height:16px}.Autocomplete_paper__Vq6DC .MuiAutocomplete-groupLabel:not(:empty){padding-top:8px}.Autocomplete_paper__Vq6DC .MuiAutocomplete-listbox li+li .MuiAutocomplete-groupLabel:not(:empty){margin-top:8px}.Autocomplete_checkboxSmall__TjdiN{margin-right
|
|
1
|
+
"use strict";require('./../../ext-esm/style-inject/dist/style-inject.es.js')('.Autocomplete_root__4SidE{width:100%}.Autocomplete_root__4SidE .MuiAutocomplete-endAdornment{display:contents}.Autocomplete_root__4SidE .MuiAutocomplete-clearIndicator,.Autocomplete_root__4SidE .MuiAutocomplete-popupIndicator{margin:0;padding:0;visibility:visible}.Autocomplete_root__4SidE .MuiAutocomplete-clearIndicator .MuiTouchRipple-root,.Autocomplete_root__4SidE .MuiAutocomplete-popupIndicator .MuiTouchRipple-root{display:none}.Autocomplete_root__4SidE .MuiAutocomplete-clearIndicator,.Autocomplete_root__4SidE .MuiAutocomplete-popupIndicator{background-color:transparent!important;transition:transform .15s cubic-bezier(.4,0,.2,1),color .15s cubic-bezier(.4,0,.2,1)}.Autocomplete_root__4SidE .MuiAutocomplete-clearIndicator svg,.Autocomplete_root__4SidE .MuiAutocomplete-popupIndicator svg{display:block}.Autocomplete_root__4SidE .MuiInputAdornment-positionStart{max-width:70%}.Autocomplete_paper__Vq6DC{--corvaui-background:var(--palette-background-b-9);background-color:var(--palette-background-b-9)!important;box-shadow:0 8px 24px 0 rgba(0,0,0,.24)!important;display:flex;flex-flow:column wrap;margin:8px 0;max-height:40vh;overflow:hidden;padding:0;position:relative}.Autocomplete_paper__Vq6DC:before{background:linear-gradient(180deg,rgb(from var(--corvaui-background) r g b/1) 0,rgb(from var(--corvaui-background) r g b/0) 100%);content:"";height:8px;inset:0 10px auto 0;position:absolute;z-index:1}.Autocomplete_paper__Vq6DC:after{background:linear-gradient(0deg,rgb(from var(--corvaui-background) r g b/1) 0,rgb(from var(--corvaui-background) r g b/0) 100%);content:"";height:8px;inset:auto 10px 0 0;position:absolute;z-index:1}.Autocomplete_paper__Vq6DC:has(.Autocomplete_sticky__0-eTa){padding-top:8px}.Autocomplete_paper__Vq6DC .MuiAutocomplete-listbox{flex:0 1 auto;max-height:unset;padding:8px 0}.Autocomplete_paper__Vq6DC .MuiAutocomplete-listbox,.Autocomplete_paper__Vq6DC .MuiAutocomplete-listbox li{width:100%}.Autocomplete_paper__Vq6DC .MuiAutocomplete-listbox:has(.Autocomplete_sticky__0-eTa){padding-top:0}.Autocomplete_paper__Vq6DC li.MuiAutocomplete-option{background:var(--corvaui-background)!important;display:block;padding:0 16px!important;z-index:1}.Autocomplete_paper__Vq6DC li.MuiAutocomplete-option[data-focus=true] .Autocomplete_menuItem__c2Qka{background-color:rgb(from var(--palette-primary-text-1) r g b/.08)}.Autocomplete_paper__Vq6DC li.MuiAutocomplete-option:has(.Autocomplete_sticky__0-eTa){left:0;position:sticky;top:0}.Autocomplete_paper__Vq6DC .Autocomplete_sticky__0-eTa{border-bottom:1px solid rgb(from var(--palette-primary-text-1) r g b/.25);overflow:visible}.Autocomplete_paper__Vq6DC .Autocomplete_listboxScrolled__n34NV .Autocomplete_sticky__0-eTa:after{background:linear-gradient(0deg,rgb(from var(--corvaui-background) r g b/0) 0,rgb(from var(--corvaui-background) r g b/1) 100%);content:"";height:8px;inset:100% 0 auto 0;margin-top:1px;position:absolute}.Autocomplete_paper__Vq6DC .MuiAutocomplete-noOptions{align-items:center;color:var(--palette-primary-text-6);display:flex;font-size:12px;font-style:italic;justify-content:center;min-height:31px;padding:0}.Autocomplete_paper__Vq6DC .MuiAutocomplete-groupLabel{background:var(--corvaui-background)!important;color:var(--palette-primary-text-7);font-size:12px;font-weight:400;line-height:16px}.Autocomplete_paper__Vq6DC .MuiAutocomplete-groupLabel:not(:empty){padding-top:8px}.Autocomplete_paper__Vq6DC .MuiAutocomplete-listbox li+li .MuiAutocomplete-groupLabel:not(:empty){margin-top:8px}.Autocomplete_checkboxSmall__TjdiN{margin-right:0}.Autocomplete_checkboxMedium__LUbff{margin-right:4px}.Autocomplete_selectedValue__iGHNh{max-width:100%;overflow:hidden}.Autocomplete_selectedValueChip__5QOEK{flex:0 0 auto;margin:-3px 0;max-width:calc(33% - 8px)}.Autocomplete_inputContainer__RKk5j{flex-wrap:wrap;position:relative;row-gap:14px}.Autocomplete_inputContainer__RKk5j .Autocomplete_selectedValue__iGHNh{font-size:inherit;line-height:inherit;max-width:50%}.Autocomplete_prefix__WzSbL{display:contents}.Autocomplete_input__FHTVO{flex:1 1;max-width:100%;min-width:150px}.Autocomplete_readOnlyInput__mD5xQ{cursor:inherit;min-width:60px}.Autocomplete_withArrow__pNaNX .Autocomplete_input__FHTVO,.Autocomplete_withClear__RGtWV .Autocomplete_input__FHTVO{padding-right:24px}.Autocomplete_withArrow__pNaNX.Autocomplete_withClear__RGtWV .Autocomplete_input__FHTVO{padding-right:48px}.Autocomplete_suffix__y3P7i{bottom:calc(var(--corvaui-textinput-inputheight)/2 + 6px);height:var(--corvaui-textinput-inputheight);position:absolute;right:7px;transform:translateY(50%)}'),module.exports={spacing:"8",root:"Autocomplete_root__4SidE",paper:"Autocomplete_paper__Vq6DC",sticky:"Autocomplete_sticky__0-eTa",menuItem:"Autocomplete_menuItem__c2Qka",listboxScrolled:"Autocomplete_listboxScrolled__n34NV",checkboxSmall:"Autocomplete_checkboxSmall__TjdiN",checkboxMedium:"Autocomplete_checkboxMedium__LUbff",selectedValue:"Autocomplete_selectedValue__iGHNh",selectedValueChip:"Autocomplete_selectedValueChip__5QOEK",inputContainer:"Autocomplete_inputContainer__RKk5j",prefix:"Autocomplete_prefix__WzSbL",input:"Autocomplete_input__FHTVO",readOnlyInput:"Autocomplete_readOnlyInput__mD5xQ",withArrow:"Autocomplete_withArrow__pNaNX",withClear:"Autocomplete_withClear__RGtWV",suffix:"Autocomplete_suffix__y3P7i"};
|
|
2
2
|
//# sourceMappingURL=Autocomplete.scss.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),r=require("react"),t=require("classnames"),i=require("../Checkbox/Checkbox.js"),s=require("../Menu/MenuItem/MenuItem.js"),m=require("./Autocomplete.scss.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=u(t),c={medium:"small",large:"medium"},l={medium:m.checkboxSmall,large:m.checkboxMedium},n={medium:16,large:24};exports.AutocompleteMenuItem=function(t){var u=t.multiple,d=t.children,o=t.size,x=t.prefix,f=t.selected,h=t.indeterminate,j=t.className;return e.jsx(s.MenuItem,{tagName:"div",size:o,className:a.default(m.menuItem,j),prefix:e.jsxs(e.Fragment,{children:[u&&e.jsx(i.Checkbox,{checked:f,size:c[o],className:l[o],indeterminate:h}),r.isValidElement(x)?r.cloneElement(x,{size:n[o]
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),r=require("react"),t=require("classnames"),i=require("../Checkbox/Checkbox.js"),s=require("../Menu/MenuItem/MenuItem.js"),m=require("./Autocomplete.scss.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=u(t),c={medium:"small",large:"medium"},l={medium:m.checkboxSmall,large:m.checkboxMedium},n={medium:16,large:24};exports.AutocompleteMenuItem=function(t){var u=t.multiple,d=t.children,o=t.size,x=t.prefix,f=t.selected,h=t.indeterminate,j=t.className;return e.jsx(s.MenuItem,{tagName:"div",size:o,className:a.default(m.menuItem,j),prefix:e.jsxs(e.Fragment,{children:[u&&e.jsx(i.Checkbox,{checked:f,size:c[o],className:l[o],indeterminate:h}),r.isValidElement(x)?r.cloneElement(x,{size:n[o]}):x]}),children:d})};
|
|
2
2
|
//# sourceMappingURL=AutocompleteMenuItem.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/defineProperty"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/defineProperty"),r=require("@babel/runtime/helpers/objectWithoutProperties"),t=require("@babel/runtime/helpers/typeof"),i=require("react/jsx-runtime"),l=require("react"),a=require("@material-ui/core"),s=require("classnames"),c=require("./MenuItem.scss.js");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var u=n(e),o=n(r),d=n(t),f=n(s),m=["children","testId","className","onClick","disabled","prefix","suffix","size","tagName","disableClickEffect","selected","type"];function p(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);r&&(i=i.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,i)}return t}function b(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?p(Object(t),!0).forEach((function(r){u.default(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):p(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}var y={medium:c.medium,large:c.large},j={medium:"small",large:"medium"},v={medium:16,large:24},O=function(e,r){var t=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(l.isValidElement(e)){var i=e&&"object"===d.default(e.type)&&e.type.displayName;return"Checkbox"===i?l.cloneElement(e,{size:j[r],className:f.default(c.checkboxAffix,t?c.suffix:c.prefix)}):l.cloneElement(e,{size:v[r],className:f.default(c.iconAffix,e.props.className)})}return e},h={normal:"",destructive:c.destructive},x=l.forwardRef((function(e,r){var t=e.children,l=e.testId,s=e.className,n=e.onClick,u=e.disabled,d=e.prefix,p=e.suffix,j=e.size,v=void 0===j?"medium":j,x=e.tagName,g=void 0===x?"li":x,P=e.disableClickEffect,N=e.selected,k=e.type,q=void 0===k?"normal":k,w=o.default(e,m);return i.jsxs(a.MenuItem,b(b({className:f.default(c.menuItem,h[q],y[v],s),"data-testid":l,onClick:n,disabled:u,disableRipple:P,disableTouchRipple:P,component:g,selected:N,ref:r},w),{},{children:[O(d,v),i.jsx("div",{className:c.itemLabel,children:t}),O(p,v,!0)]}))}));exports.MenuItem=x;
|
|
2
2
|
//# sourceMappingURL=MenuItem.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";require('./../../../ext-esm/style-inject/dist/style-inject.es.js')(".MuiListItem-root.MenuItem_menuItem__rGLlT{align-items:center;flex-wrap:nowrap;margin-left:-16px;margin-right:-16px;overflow:hidden}.MuiListItem-root.MenuItem_medium__BV9x1{
|
|
1
|
+
"use strict";require('./../../../ext-esm/style-inject/dist/style-inject.es.js')(".MuiListItem-root.MenuItem_menuItem__rGLlT{align-items:center;flex-wrap:nowrap;gap:8px;margin-left:-16px;margin-right:-16px;overflow:hidden}.MuiListItem-root.MenuItem_medium__BV9x1{min-height:36px;padding-bottom:4px;padding-top:4px}.MuiListItem-root.MenuItem_large__sHhkc{min-height:54px;padding-bottom:12px;padding-top:12px}.MenuItem_itemLabel__V4vAO{flex:1 1 auto;margin-right:auto;min-width:1px}.MenuItem_checkboxAffix__dJCxa{align-items:center;display:flex}.MenuItem_checkboxAffix__dJCxa.MenuItem_prefix__YoDuz{margin-right:4px}.MenuItem_checkboxAffix__dJCxa.MenuItem_suffix__Ldj84{margin-left:4px}.MenuItem_iconAffix__Tnj14{align-items:center;display:flex}.MenuItem_destructive__sGt-8.MuiListItem-root{color:var(--palette-error-main)}"),module.exports={spacing:"8",menuItem:"MenuItem_menuItem__rGLlT",medium:"MenuItem_medium__BV9x1",large:"MenuItem_large__sHhkc",itemLabel:"MenuItem_itemLabel__V4vAO",checkboxAffix:"MenuItem_checkboxAffix__dJCxa",prefix:"MenuItem_prefix__YoDuz",suffix:"MenuItem_suffix__Ldj84",iconAffix:"MenuItem_iconAffix__Tnj14",destructive:"MenuItem_destructive__sGt-8"};
|
|
2
2
|
//# sourceMappingURL=MenuItem.scss.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/defineProperty"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/defineProperty"),r=require("@babel/runtime/helpers/objectWithoutProperties"),t=require("react/jsx-runtime"),a=require("react"),n=require("@material-ui/core"),l=require("classnames"),o=require("./RadioAndCheckboxLabel.scss.js");function c(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=c(e),s=c(r),u=c(l),d=["control","testId","className","inputRef","checked","label","onChange","disabled","labelPlacement","size"];function b(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);r&&(a=a.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,a)}return t}function f(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?b(Object(t),!0).forEach((function(r){i.default(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):b(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}var p={medium:o.medium,small:o.small},m={end:o.placementEnd,start:o.placementStart},j=a.forwardRef((function(e,r){var a=e.control,l=e.testId,c=e.className,i=e.inputRef,b=e.checked,j=void 0!==b&&b,O=e.label,h=e.onChange,y=e.disabled,P=e.labelPlacement,v=void 0===P?"end":P,g=e.size,q=void 0===g?"medium":g,w=s.default(e,d);return t.jsx("div",{className:u.default(o.root,m[v],p[q],c),children:t.jsx(n.FormControlLabel,f({ref:r,control:a,className:o.label,"data-testid":l,inputRef:i,checked:j,onChange:h,disabled:y,label:O,labelPlacement:v},w))})}));exports.RadioAndCheckboxLabel=j;
|
|
2
2
|
//# sourceMappingURL=RadioAndCheckboxLabel.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";require('./../../ext-esm/style-inject/dist/style-inject.es.js')(".RadioAndCheckboxLabel_root__ECgvv{display:block;vertical-align:middle}.RadioAndCheckboxLabel_root__ECgvv .RadioAndCheckboxLabel_label__-TTiM{
|
|
1
|
+
"use strict";require('./../../ext-esm/style-inject/dist/style-inject.es.js')(".RadioAndCheckboxLabel_root__ECgvv{display:block;vertical-align:middle}.RadioAndCheckboxLabel_root__ECgvv .RadioAndCheckboxLabel_label__-TTiM{display:flex;margin:0}.RadioAndCheckboxLabel_root__ECgvv .RadioAndCheckboxLabel_label__-TTiM .RadioAndCheckboxLabel_control__0GFJg{margin:var(--corvaui-radioandcheckboxlabel-shift)}.RadioAndCheckboxLabel_root__ECgvv .RadioAndCheckboxLabel_label__-TTiM .MuiFormControlLabel-label{flex-grow:1;min-width:1px}.RadioAndCheckboxLabel_root__ECgvv .RadioAndCheckboxLabel_label__-TTiM .MuiFormControlLabel-label:empty{display:none}.RadioAndCheckboxLabel_root__ECgvv.RadioAndCheckboxLabel_placementEnd__Cb9wv .RadioAndCheckboxLabel_label__-TTiM,.RadioAndCheckboxLabel_root__ECgvv.RadioAndCheckboxLabel_placementStart__-4zRr .RadioAndCheckboxLabel_label__-TTiM{align-items:flex-start}.RadioAndCheckboxLabel_root__ECgvv.RadioAndCheckboxLabel_medium__FFtpb{--corvaui-radioandcheckboxlabel-shift:-8px}.RadioAndCheckboxLabel_root__ECgvv.RadioAndCheckboxLabel_medium__FFtpb .RadioAndCheckboxLabel_label__-TTiM{gap:8px 12px}.RadioAndCheckboxLabel_root__ECgvv.RadioAndCheckboxLabel_small__gmtA-{--corvaui-radioandcheckboxlabel-shift:-4px}.RadioAndCheckboxLabel_root__ECgvv.RadioAndCheckboxLabel_small__gmtA- .RadioAndCheckboxLabel_label__-TTiM{gap:4px 8px}.RadioAndCheckboxLabel_root__ECgvv.RadioAndCheckboxLabel_small__gmtA- .MuiFormControlLabel-label{font-size:14px;line-height:20px}.RadioAndCheckboxLabel_root__ECgvv.RadioAndCheckboxLabel_small__gmtA- .RadioAndCheckboxLabel_control__0GFJg{padding:6px}.RadioAndCheckboxLabel_root__ECgvv.RadioAndCheckboxLabel_small__gmtA- .RadioAndCheckboxLabel_control__0GFJg svg{height:16px;width:16px}"),module.exports={spacing:"8",root:"RadioAndCheckboxLabel_root__ECgvv",label:"RadioAndCheckboxLabel_label__-TTiM",control:"RadioAndCheckboxLabel_control__0GFJg",placementStart:"RadioAndCheckboxLabel_placementStart__-4zRr",placementEnd:"RadioAndCheckboxLabel_placementEnd__Cb9wv",medium:"RadioAndCheckboxLabel_medium__FFtpb",small:"RadioAndCheckboxLabel_small__gmtA-"};
|
|
2
2
|
//# sourceMappingURL=RadioAndCheckboxLabel.scss.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Map.d.ts","sourceRoot":"","sources":["../../../../../src/components/BICOffsetPickerDialog/components/Map/Map.js"],"names":[],"mappings":";;AAkCA;;;;;;;;
|
|
1
|
+
{"version":3,"file":"Map.d.ts","sourceRoot":"","sources":["../../../../../src/components/BICOffsetPickerDialog/components/Map/Map.js"],"names":[],"mappings":";;AAkCA;;;;;;;;gBA0KC;;;;;;;;;;;;;;;;;;;;;;;;;sBA1MqB,YAAY;AAclC,gDAAyC,CAAC,CAAC;AAC3C,wCAAiC,CAAC,CAAC"}
|