{"version":3,"sources":["webpack:///./assets/comps/District/queries/GetDashboard.js","webpack:///./assets/comps/District/DrawControl/index.js","webpack:///./assets/comps/District/SearchAddress.js","webpack:///./assets/lib/setBbox.js","webpack:///./assets/comps/District/index.js"],"names":["gql","ANALYSIS","panels","useCommands","ctx","useContext","LTContext","loadPolygon","geojson","color","arguments","length","undefined","config","I","type","active","stroke","fillColor","weight","opacity","fillOpacity","fill","clickable","className","polygon","JSON","stringify","commands","set","q","v","update","v2","PATHS","areaPolygonGeoJSON","removePolygon","remove","enableDrawing","areaPolygonModeType","disableDrawing","Toolbar","props","cmd","Object","core_browser_esm","css","onClick","handler","state","drawHandler","isValid","toGeoJSON","getDrawingGeoJSON","openPanel","onClose","closePanel","Component","_useState","useState","_useState2","slicedToArray_default","isDrawing","setDrawing","concat","DrawControl_Toolbar","OverlayTriggerWrapper","placement","trigger","overlay","Tooltip","id","dangerouslySetInnerHTML","__html","src","polygonPng","style","width","DrawControlContainer","data-testid","DrawControl","SearchAddress","ref","createRef","useBboxBoundAutoComplete","showDrawControl","history","getQuery","load","showDrawingTool","styles","GeolocateBtn","placeholder","autoComplete","SearchAddressContainer","setBbox","getBbox","attachMapEvents","window","districtMap","cb","invalidateSize","on","setTimeout","detachMapEvents","off","centerMapToBBoxExtent","bbox","coords","split","map","parseFloat","bounds","L","latLngBounds","latLng","fitBounds","maxZoom","getPolygon","_ref","boundaryColor","getDecks","basemap","url","quiet","access_token","ENV","MAPBOX_ACCESS_TOKEN","searchPanel","content","District_SearchAddress","position","zoom","legend","Legendario","filter","useProjects","projects","setProjects","useProjectLayers","mapping","filters","dashboardId","getDashboardId","_useStoreState","useStoreState","useEffect","waitTill","then","delay","newFilters","NonEmptyArray","is","get","updateIn","push","query","args","toJS","api","fetchJson","hash","DistrictContainer","_ref2","children","useMapConfig","opts","showBoundary","truthy","dashboard","variables","useCachedQuery","GetDashboard","data","center","bs","basemaps","sortByLastUpdated","schema","scrollWheelZoom","ready","viewreset","updateFilterQuery","dragend","zoomend","decks","merge","geoJSON","getBounds","toBBoxString","drawPoly","districtPolygon","Canvas","s","useContextState","loading","folio","name","InnerDiv","_ref3","toolbarButtons","panelName","newBasemap","_useStoreState3","activatedBasemap","useBasemap","defaultPanels","indexOf","toUpperCase","District","prevQuery","mergeDeep","ToolbarContainer","Left2Container","Left2"],"mappings":"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","file":"comps/District.chunk-c3dac34c7e5170528fa1.js","sourcesContent":["/*@flow*/\nimport gql from 'graphql-tag';\n\nimport type { DocumentNode } from 'graphql';\nexport default (gql(`\n query getData($dashboardId: ID!) {\n dashboard(id: $dashboardId) {\n geojson\n boundaryColor\n center\n showImagesInListView\n sortByLastUpdated\n basemaps {\n name\n url\n type\n access_token\n }\n }\n }\n`): DocumentNode);\n","/*@flow*/\n/** @jsx jsx */\nimport { css, jsx } from '@emotion/core';\nimport { useState, useContext } from 'react';\nimport PATHS from 'const/paths';\nimport polygonPng from 'images/polygon.png';\nimport { Tooltip } from 'react-bootstrap';\nimport OverlayTriggerWrapper from 'comps/OverlayTriggerWrapper';\nimport { q, set, state } from 'ops';\nimport * as I from 'immutable';\nimport panels from 'comps/Left2/panels';\nimport commands from 'comps/Left2/commands';\nimport LTContext from 'comps/Left2/LTContext';\nconst { ANALYSIS } = panels;\n\nfunction getDrawingGeoJSON() {\n const handler = state(PATHS.drawHandler);\n if (handler && handler.isValid()) {\n return handler.polygon.toGeoJSON();\n }\n}\n\nconst useCommands = () => {\n const ctx = useContext(LTContext);\n\n return {\n loadPolygon(geojson, color = '#EE7B2C') {\n const config = I.fromJS({\n type: 'polygon',\n geojson,\n active: true,\n stroke: true,\n fillColor: '#ababab85',\n color,\n weight: 3,\n opacity: 0.8,\n fillOpacity: 0.2,\n fill: true,\n clickable: false,\n className: 'area-polygon',\n });\n\n // Update filter query string\n const polygon = JSON.stringify(geojson);\n const fn = (v) =>\n v.update('filter', (v2) => (v2 || I.Map()).set('polygon', polygon));\n\n commands(ctx).set(['decks', 'AreaPolygon'], config);\n q(fn);\n\n set(PATHS.areaPolygonGeoJSON, JSON.stringify(geojson));\n },\n removePolygon() {\n // Remove polygon from query string\n const fn = (v) =>\n v.update('filter', (v2) => (v2 || I.Map()).delete('polygon'));\n\n commands(ctx).remove(['decks', 'drawPoly', 'geojson']);\n commands(ctx).remove(['decks', 'AreaPolygon']);\n q(fn);\n\n set(PATHS.areaPolygonGeoJSON, null);\n },\n enableDrawing() {\n const deactivate = (v) => (v ? v.set('active', false) : v);\n commands(ctx).set(['decks', 'drawPoly', 'active'], true);\n commands(ctx).update(['decks', 'AreaPolygon'], deactivate);\n set(PATHS.areaPolygonModeType, 'Drawing');\n },\n disableDrawing() {\n const activate = (v) => (v ? v.set('active', true) : v);\n commands(ctx).set(['decks', 'drawPoly', 'active'], false);\n commands(ctx).set(['decks', 'AreaPolygon'], activate);\n commands(ctx).remove(['decks', 'drawPoly', 'geojson']);\n set(PATHS.areaPolygonModeType, 'Ready');\n },\n };\n};\n\nconst Toolbar = (props) => {\n const cmd = useCommands();\n const ctx = useContext(LTContext);\n\n const onApply = () => {\n // Load a polygon with geojson\n const geojson = getDrawingGeoJSON();\n\n if (geojson) {\n cmd.loadPolygon(geojson);\n commands(ctx).openPanel(ANALYSIS);\n }\n\n cmd.disableDrawing();\n props.onClose();\n };\n\n const onClear = () => {\n cmd.disableDrawing();\n cmd.removePolygon();\n props.onClose();\n\n // TODO: only close if it's ANALYSIS\n commands(ctx).closePanel();\n };\n\n return (\n \n Apply\n Clear\n \n );\n};\n\nconst Component = () => {\n const [isDrawing, setDrawing] = useState(false);\n const cmd = useCommands();\n\n const html = 'DRAW AREA

SET AREA BOUNDARIES.';\n const onToggle = () => {\n if (isDrawing) {\n cmd.disableDrawing();\n } else {\n cmd.enableDrawing();\n }\n setDrawing((v) => !v);\n };\n\n const lightBlue = '#2e7fcf';\n\n return (\n \n {isDrawing ? setDrawing(false)} /> : null}\n \n \n \n }\n >\n \n \n \n \n \n );\n};\n\nexport default (Component: any);\n","/*@flow*/\n/** @jsx jsx */\nimport { css, jsx, Global } from '@emotion/core';\nimport { createRef } from 'react';\nimport GeolocateBtn from 'comps/GeolocateBtn';\nimport DrawControl from './DrawControl';\nimport useBboxBoundAutoComplete from 'lib/useBboxBoundAutoComplete';\nimport history from 'lib/history';\n\nfunction useLoad() {\n return history.getQuery().load || {};\n}\n\nfunction DrawControlContainer() {\n return (\n \n \n \n );\n}\n\nfunction SearchAddress() {\n const ref = createRef();\n useBboxBoundAutoComplete(ref);\n const load = useLoad();\n const showDrawControl = load.showDrawingTool;\n\n return (\n

\n \n \n \n \n
\n {showDrawControl && }\n \n );\n}\n\nfunction SearchAddressContainer() {\n return ;\n}\n\nexport default (SearchAddressContainer: any);\n","/*@flow*/\nimport getBbox from 'lib/getBbox';\nimport { set } from 'ops';\n\nexport default () => {\n set('$query.filter.bbox', getBbox());\n};\n","/*@flow*/\n/** @jsx jsx */\nimport { css, jsx } from '@emotion/core';\nimport Folio from 'lib/folio';\nimport history from 'lib/history';\nimport { state, set, q } from 'ops';\nimport { quiet } from 'lib/basemaps';\nimport PATHS from 'const/paths';\nimport defaultPanels from './defaultPanels';\nimport Legendario from 'comps/Legendario';\nimport Left2Container from 'comps/Left2/Container';\nimport { Component as Left2 } from 'comps/Left2';\nimport { useEffect, useState } from 'react';\nimport useProjectLayers from './useProjectLayers';\nimport api from 'lib/api';\nimport hash from 'lib/hash';\nimport delay from 'lib/delay';\nimport NonEmptyArray from 'lib/NonEmptyArray';\nimport useCachedQuery from 'lib/useCachedQuery';\nimport * as I from 'immutable';\nimport getDashboardId from 'lib/getDashboardId';\nimport GetDashboard from './queries/GetDashboard';\nimport SearchAddress from './SearchAddress';\nimport setBbox from 'lib/setBbox';\nimport waitTill from 'lib/waitTill';\nimport useStoreState from 'lib/useStoreState';\nimport useCommands from 'comps/Left2/useCommands';\nimport useContextState from 'comps/Left2/useContextState';\nimport truthy from 'lib/truthy';\nimport updateFilterQuery from 'lib/updateFilterQuery';\n\ntype PropsT = {\n query?: Object,\n};\n\ntype BasemapsT = { name: string, url: string }[];\n\ntype Data = {\n dashboard: {\n boundaryColor: string,\n geojson: Object,\n basemaps: BasemapsT,\n center: number[],\n showImagesInListView: Boolean,\n sortByLastUpdated: Boolean,\n },\n};\n\nconst attachMapEvents = () => {\n if (!window.districtMap) {\n setTimeout(attachMapEvents, 1000);\n return;\n }\n const cb = () => {\n setBbox();\n window.districtMap.invalidateSize();\n };\n window.districtMap.on('viewreset', cb);\n window.districtMap.on('dragend', cb);\n window.districtMap.on('zoomend', cb);\n setTimeout(cb, 2000);\n};\n\nconst detachMapEvents = () => {\n if (!window.districtMap) return;\n window.districtMap.off('viewreset', setBbox);\n window.districtMap.off('dragend', setBbox);\n window.districtMap.off('zoomend', setBbox);\n};\n\nconst centerMapToBBoxExtent = (bbox) => {\n const coords = bbox.split(',').map(parseFloat);\n const bounds = L.latLngBounds(\n L.latLng([coords[1], coords[0]]),\n L.latLng([coords[3], coords[2]])\n );\n setTimeout(() => {\n window.districtMap.fitBounds(bounds, { maxZoom: 22 });\n }, 4000);\n};\n\nconst weight = 4;\n\nconst getPolygon = ({ geojson, boundaryColor }) =>\n I.fromJS({\n type: 'polygon',\n geojson,\n active: true,\n stroke: true,\n fillColor: '#EE7B2C',\n color: boundaryColor,\n weight,\n opacity: 0.8,\n fillOpacity: 1,\n fill: false,\n clickable: false,\n className: 'district-polygon',\n });\n\nconst getDecks = () =>\n I.fromJS({\n basemap: {\n type: 'vector',\n url: quiet,\n access_token: ENV.MAPBOX_ACCESS_TOKEN,\n },\n searchPanel: {\n type: 'control',\n content: () => ,\n position: 'topright',\n className: 'search-control',\n },\n zoom: {\n type: 'zoom',\n position: 'topright',\n },\n legend: {\n type: 'control',\n content: () => ,\n position: 'bottomright',\n },\n }).filter((v) => v);\n\nconst useProjects = () => {\n const cmd = useCommands();\n const [projects, setProjects] = useState([]);\n useProjectLayers(projects);\n\n const mapping = {\n filters: () => state('$query.filter'),\n dashboardId: getDashboardId,\n };\n const { filters, dashboardId } = useStoreState(mapping);\n\n useEffect(() => {\n if (!filters) return;\n waitTill(() => window.districtMap)\n .then(() => delay(1000))\n .then(() => {\n cmd.set('loading', true);\n let newFilters = filters;\n if (!NonEmptyArray.is(filters.get('type'))) {\n newFilters = filters.updateIn(['type'], (v) =>\n (v || I.List()).push('foo')\n );\n }\n const query = { args: { filters: newFilters.toJS(), dashboardId } };\n api.fetchJson('/api/projects', { query }).then((v) => {\n setProjects(v);\n cmd.set('loading', false);\n });\n });\n }, [hash(filters), dashboardId]);\n};\n\nfunction DistrictContainer({ children }) {\n return (\n \n {children}\n \n );\n}\n\nfunction useQueryPropOnEmbeddedMaps(query) {\n useEffect(() => {\n if (!query) return;\n q((prevQuery) => prevQuery.mergeDeep(I.fromJS(query)));\n }, [hash(query)]);\n}\n\nfunction useDashboardId() {\n const mapping = {\n dashboardId: getDashboardId,\n };\n const { dashboardId } = useStoreState(mapping);\n useEffect(() => {\n if (!dashboardId) return;\n set('$query.filter.dashboardId', dashboardId);\n }, [dashboardId]);\n}\n\nfunction useBasemap() {\n const cmd = useCommands();\n const mapping = {\n basemaps: 'basemaps',\n basemap: () => {\n const load = history.getQuery().load || {};\n const newBasemap = state('$query.basemap') || load.basemap;\n newBasemap && console.log('newBasemap: ', newBasemap);\n return newBasemap;\n },\n };\n const { basemap, basemaps } = useStoreState(mapping);\n useEffect(() => {\n const activatedBasemap = basemaps.get(basemap);\n if (!activatedBasemap) return;\n console.log('activatedBasemap: ', activatedBasemap);\n cmd.set('decks.basemap', activatedBasemap);\n // NOTE: This invalidation is necessary to ensure the layers are redrawn after the basemap is loaded.\n window.districtMap.invalidateSize();\n }, [hash(basemaps)]);\n}\n\nfunction useLoad() {\n return history.getQuery().load || {};\n}\n\nfunction useDashboardData() {\n const mapping = {\n dashboardId: getDashboardId,\n };\n const { dashboardId } = useStoreState(mapping);\n const opts = {\n variables: { dashboardId },\n };\n const { data }: { data: $Shape } = useCachedQuery(GetDashboard, opts);\n const { dashboard } = data;\n return dashboard;\n}\n\nfunction useMapConfig() {\n const cmd = useCommands();\n const load = useLoad();\n const showBoundary = truthy(load.showBoundary);\n const showDrawingTool = truthy(load.showDrawingTool);\n const dashboard = useDashboardData();\n\n useEffect(() => {\n if (!dashboard) return;\n const { center, geojson } = dashboard;\n const bs = I.Map(\n I.fromJS(dashboard.basemaps).map((v) => I.List([v.get('name'), v]))\n );\n set('basemaps', bs);\n\n if (dashboard.sortByLastUpdated) {\n cmd.set([\"listViewOrder\"], \"updated_at\");\n cmd.set([\"listViewOrderDir\"], \"desc\");\n }\n\n const schema = I.Map({\n type: 'map',\n center: [center[1], center[0]],\n zoom: 12,\n maxZoom: 22,\n scrollWheelZoom: false,\n ready: attachMapEvents,\n on: {\n viewreset() {\n updateFilterQuery();\n },\n dragend() {\n updateFilterQuery();\n },\n zoomend() {\n updateFilterQuery();\n },\n },\n });\n\n let decks = getDecks();\n\n cmd.set('decks', (v) => v.merge(decks));\n cmd.set('schema', schema);\n\n let bbox = state('$query.load.bbox');\n if (!bbox) {\n bbox = L.geoJSON(geojson)\n .getBounds()\n .toBBoxString();\n }\n centerMapToBBoxExtent(bbox);\n\n // Sets the bbox in the filter query param.\n setBbox();\n\n waitTill(() => window.districtMap).then(() => {\n window.districtMap.invalidateSize();\n centerMapToBBoxExtent(bbox);\n });\n\n return () => {\n detachMapEvents();\n };\n }, [hash(dashboard)]);\n\n useEffect(() => {\n if (!showDrawingTool) return;\n const drawPoly = I.fromJS({\n type: 'draw',\n active: false,\n ready(handler: Object) {\n set(PATHS.drawHandler, handler);\n },\n });\n cmd.set('decks.drawPoly', drawPoly);\n }, [showDrawingTool]);\n\n useEffect(() => {\n if (!showBoundary) return;\n if (!dashboard) return;\n const { boundaryColor, geojson } = dashboard;\n const districtPolygon = getPolygon({ geojson, boundaryColor });\n cmd.set('decks.districtPolygon', districtPolygon);\n }, [showBoundary, dashboard]);\n}\n\nfunction Canvas() {\n const s = useContextState();\n const { decks, schema, loading } = s;\n return (\n \n );\n}\n\nfunction usePanels() {\n const cmd = useCommands();\n const load = history.getQuery().load || {};\n let toolbarButtons = load.toolbarButtons || defaultPanels;\n let panelName = load.panelName;\n\n if (panelName && toolbarButtons.indexOf(panelName) === -1) {\n toolbarButtons.push(panelName);\n }\n\n toolbarButtons = toolbarButtons.map((v) => v.toUpperCase());\n\n useEffect(() => {\n cmd.set(['panels'], toolbarButtons.filter((v) => v !== 'LIST_VIEW'));\n // Reset panels to its original state.\n return () => {\n cmd.update([], (v) => v.remove('panels'));\n };\n }, [hash(toolbarButtons)]);\n}\n\nfunction InnerDiv({ children }) {\n useDashboardId();\n useBasemap();\n useMapConfig();\n useProjects();\n usePanels();\n\n return children;\n}\n\nfunction District(props: PropsT) {\n useQueryPropOnEmbeddedMaps(props.query);\n const mapping = {\n dashboardId: getDashboardId,\n };\n const { dashboardId } = useStoreState(mapping);\n const ToolbarContainer = Left2Container;\n const Toolbar = Left2;\n\n if (!dashboardId) return null;\n\n return (\n \n \n \n \n \n \n \n \n );\n}\n\nexport default (District: any);\n"],"sourceRoot":""}