{"version":3,"sources":["utils/path.util.ts","store/slices/counterSlice.ts","store/store.ts","components/modal/ModalHeader.tsx","components/modal/ModalFooter.tsx","components/modal/ModalMain.tsx","components/modal/ModalClose.tsx","components/modal/Modal.tsx","config/popup/popup.util.ts","components/tours/TourStopNumber/TourStopNumber.tsx","images/NYBG_Logo_Black_RGB.svg","components/icons/IconLeaf.tsx","store/app/tourSlice.ts","store/app/modalSlice.ts","components/plants/searchResults/PlantResultAdvancedField/PlantResultAdvancedField.tsx","components/plants/searchResults/PlantResultCommonName/PlantResultCommonName.tsx","components/plants/searchResults/PlantResultCommonNamePrimary/PlantResultGenusCommonNamePrimary.tsx","components/plants/searchResults/PlantResultCommonNamePreferred/PlantResultCommonNamePreferred.tsx","components/plants/searchResults/PlantResultScientificName/PlantResultScientificName.tsx","components/icons/IconPlantCheckmark.tsx","components/icons/IconPlantClose.tsx","components/plants/searchResults/PlantResultCommonNameItem/PlantResultCommonNameItem.tsx","components/plants/searchResults/PlantResult.tsx","components/plants/searchResults/PlantSearchResultsNoResults/PlantSearchResultsNoResults.tsx","components/plants/searchResults/PlantSearchResults.tsx","utils/plantSyntax.util.ts","utils/phenologySearch.ts","utils/results.util.ts","store/app/filterSlice.ts","components/icons/IconFilter.tsx","components/plants/SearchPlantRecordsFilter/SearchPlantRecordsFilter.tsx","components/icons/IconReset.tsx","components/icons/IconSearch.tsx","components/plants/SearchPlantsAlphabet/SearchPlantsAlphabet.tsx","components/plants/SearchPlantsAdvancedResults/SearchPlantsAdvancedResults.tsx","components/plants/searchResults/PlantSearchFindPlantInGarden/PlantSearchFindPlantInGarden.tsx","store/PlantsResultsContextProvider.tsx","components/plants/AdvancedFiltersOptions/AdvancedFiltersOptions.tsx","components/modal/SearchPlantsAdvancedFilters/SearchPlantsAdvancedFilters.tsx","utils/images.util.ts","utils/plant.util.ts","store/app/layerSlice.ts","components/icons/IconChevronUp.tsx","config/config.ts","utils/tour.util.ts","styles/muiThemeProvider.tsx","components/page/PageMainTitle.tsx","components/home/Home.tsx","components/icons/IconFacebook.tsx","components/icons/IconX.tsx","components/icons/IconInstagram.tsx","components/icons/IconGmail.tsx","components/share/Share.tsx","components/icons/IconShare.tsx","components/share/ShareWidget.tsx","components/header/HeaderLogoSection.tsx","config/menu.ts","components/icons/IconBurgerMenu.tsx","components/header/HeaderMenuButton.tsx","components/header/HeaderMenu.tsx","components/seo/SEO.tsx","components/header/Header.tsx","components/plants/SpecificFamily.tsx","components/plants/SpecificGenus.tsx","components/icons/IconGreenMap.tsx","components/icons/IconWhiteMap.tsx","components/plants/SpecificPlant/PhenologyChartLegendFlowering.tsx","components/plants/SpecificPlant/PhenologyChartLegendFruiting.tsx","components/plants/SpecificPlant/PhenologyChartLegend.tsx","components/plants/SpecificPlant/PhenologyChart.config.ts","components/plants/SpecificPlant/PhenologyTableHead.tsx","components/plants/SpecificPlant/PhenologyTableAverage.tsx","components/plants/SpecificPlant/PhenologyTableFloweringYear.tsx","components/plants/SpecificPlant/PhenologyTableFruitingYear.tsx","components/plants/SpecificPlant/PhenologyChart.tsx","components/plants/SpecificPlant/PlantNotAlive.tsx","components/plants/SpecificPlantTopDetails/SpecificPlantTopDetails.tsx","components/plants/SpecificPlantGallery/SpecificPlantGallery.tsx","components/plants/SpecificPlantFindOthers/SpecificPlantFindOthers.tsx","components/plants/SpecificPlant.tsx","components/icons/IconTrashBin.tsx","components/icons/IconHeartRed.tsx","components/plants/FavoritePlantsItem/FavoritePlantsItem.tsx","components/plants/FavoritePlants.tsx","components/icons/IconBurgerMenuFilter.tsx","components/icons/IconFlower.tsx","components/icons/IconPlantType.tsx","components/icons/IconSunlightNeeds.tsx","components/icons/IconRadioButton.tsx","components/plants/FilterPlants.tsx","components/plants/FilterPlantsClear.tsx","components/tours/TourOptionsItem/TourOptionsItem.tsx","components/tours/TourOptions.tsx","components/icons/IconLocator.tsx","components/tours/TourStopsClose.tsx","components/tours/TourStops.tsx","components/tours/TourView.tsx","components/modal/SearchPlantsAdvancedModal/SearchPlantsAdvancedModal.tsx","components/modal/CollectionsLanguageModal/CollectionsLanguageModal.tsx","components/plants/GardenGallery/GardenGallery.tsx","components/modal/ModalView.tsx","components/plants/SpecificAccession.tsx","serviceWorker.ts","index.tsx","config/mapLayers.ts","components/plants/SpecificPlant/PhenologyChart.util.ts","store/app/appSlice.ts","components/plants/searchResults/PlantResultScientificName/ScientificNameFormatted.tsx","utils/query.utils.ts","store/app/phenologySlice.ts","config/plant.config.ts","components/Loader.tsx","components/icons/IconPhotoLibrary.tsx","components/plants/WidgetImage/WidgetImage.tsx","config/filterPlants.ts","components/icons/IconClose.tsx","components/common/GreenSwitch/GreenSwitch.tsx","images/PlantMarkerSelected.svg","utils/map/highlight.util.ts","utils/legend.util.ts","components/legend/PlantDataLegend.tsx","components/legend/LayersDisabled.tsx","components/map/FilterLayers.tsx","components/map/Legend.tsx","components/icons/IconWheelchair.tsx","components/map/buttons/AccessibilityWidget.tsx","components/map/buttons/Filter.tsx","components/map/buttons/Tour.tsx","images/TourStopSelected.svg","images/map/IconLocationFilled.svg","images/map/IconLocationFilledSelected.svg","images/map/IconLocationOutline.svg","images/map/IconLocationOutlineSelected.svg","controllers/MapController.ts","utils/map/widgets.tsx","store/appHistory.ts","components/error/ResultsError.tsx"],"names":["MAP_LINK__TOURS","MAP_LINK__GENUS","MAP_LINK__SPECIES","MAP_LINK__LOCATION","MAP_LINK__COMMON_NAME","PLANTS_LINK__SPECIES","PLANTS_LINK__ACCESSION","SPACE__ORIGINAL","SPACE__REPLACE_PATTERN","SLASH__ORIGINAL","SLASH__REPLACE_PATTERN","decodePathValue","pathValue","spaceRegExp","RegExp","slashRegExp","path","includes","replace","encodePathValue","split","join","getPath","type","slice","createSlice","name","initialState","value","reducers","increment","state","decrement","incrementByAmount","action","payload","actions","rootReducer","combineReducers","appReducer","filterReducer","counterReducer","layerReducer","modalReducer","tourReducer","phenologyReducer","configureStore","reducer","ModalHeader","props","subTitle","title","headerAction","_jsxs","id","children","_jsx","ModalFooter","footerLeftLabel","footerLeftClass","footerRightLabel","footerRightClass","className","ModalMain","content","mainModalPaddingHide","ModalClose","onClick","handleClose","IconClose","fill","Modal","modalContent","useSelector","$modalContent","open","showModal","ModalUI","onClose","style","display","alignItems","justifyContent","margin","concat","outline","getDetailsAction","colosePopupAction","evt","NAME","graphic","attributes","scientificNameFormatted","getPopupTemplate","item","_graphic$attributes","formattedSunFullAttribute","splitByCharacter","SUN_FULL","getPopupTemplateContent","overwriteActions","outFields","getPointOfInterestPopupTemplate","TourStopNumber","_ref","index","IconLeaf","width","height","viewBox","SVG_CONFIG","fillRule","clipRule","d","defaultTourStopIndex","query","URLSearchParams","window","location","search","searchTourID","get","URL__TOUR_ID","searchTourName","URL__TOUR_NAME","searchTourStop","URL__TOUR_STOP","tourSlice","stopsByAccession","toursAll","tourSelected","Tour_ID","parseInt","undefined","Tour_Name","Description","tourStep","tourStops","tourStopIndex","setStopsByAccession","setToursAll","setTourSelected","setTourStep","setTourStops","setTourStopIndex","$toursAll","$tourSelected","$tourStep","$tourStops","$tourStopIndex","modalSlice","modalGardenLocation","setModalContent","setModalGardenLocation","$modalGardenLocation","PlantResultAdvancedField","searchFieldAdvanced","plant","displayField","SEARCH_OPTIONS_ADVANCED","find","_ref2","esriField","Link","to","toLowerCase","PlantResultCommonName","searchField","COMMON_NAME_PRIMARY","COMMON_NAMES","_Fragment","FIELD_FAMILY_AND_FAMILY_COMMON","FIELD_GENUS_AND_GENUS_COMMON","PlantResultGenusCommonNamePrimary","GENUS","GENUS_COMMON_NAME_PRIMARY","genusCommonNamePrimaryValue","PlantResultCommonNamePreferred","commonNamePreferredValue","PlantResultScientificName","scientificNameValue","ScientificNameFormatted","plantName","IconPlantCheckmark","xmlns","IconPlantClose","PlantResultCommonNameItem","ALIVE","PlantResult","OBJECTID","FIELD_COMMON_NAME_ESRI","PlantSearchResultsNoResults","PlantSearchResults","isAdvancedSearchField","results","isBloomResults","searchTerm","filterDefinitionExpression","allLivingRecordsCheckbox","$allLivingRecordsCheckbox","mapFilterSelectedOptions","selectMapFilterSelectedOptions","definitionExpressionQueryAttributes","$definitionExpressionQueryAttributes","numberOfColumns","setNumberOfColumns","useState","rows","setRows","useEffect","filtersRegular","filter","option","activeRadioButton","filtersCharacteristics","activeValues","length","_isEqual","filteredResults","_uniqBy","_sortBy","_chunk","plantsAttributes","map","plantValue","filterValue","every","Boolean","plantCharValue","plants","uniquePlantResults","rowRenderer","isScrolling","key","SEARCH_PLANT_ALPHABET_SECTIONS","AutoSizer","_ref3","columns","getNumberOfResultColumns","updateColumns","List","ref","overscanRowCount","noRowsRenderer","PlantSearchFindPlantInGarden","rowCount","rowHeight","AUTOSIZER__ROW_HEIGHT","string","splitByComma","PHENOLOGY_SEARCH_YEAR","getSliderValueFromDate","date","sliderStartingDate","dayjs","diff","getInitialDateRange","today","startDate","subtract","toDate","Date","getFullYear","getMonth","getDate","endDate","add","setInitialDateRange","phenologySliderStartingDate","store","getState","startDaySliderValue","endDaySliderValue","startOf","dispatch","setPhenologySliderStartingDate","toString","startDayOfTheYear","getDayOfYear","endDayOfTheYear","setPhenologyFloweringDateStart","dayOfYear","setPhenologyFloweringDateEnd","updatedSliderValues","start","end","setPhenologySliderValues","getUpdatedSliderMarks","initialSliderDate","marks","initialMonth","currentMonth","currentDate","currentYear","push","label","toLocaleString","month","number","Math","floor","AUTOSIZER__COLUMN_WIDTH","filterSelectedOptions","filterOptionsConfig","filterVisible","filterActiveDropdowns","searchDefinitionExpression","tourDefinitionExpression","filterSlice","setFilterVisible","setFilterActiveDropdowns","setFilterSelectedOptions","resetFilterOptions","mapController","updatePlantsLayerDefinitionExpression","setFilterActiveOptions","setFilterDefinitionExpression","filters","definitionExpression","_every","definitionExpressionList","forEach","filterOption","esriQueryMatch","activeSelection","definitionExpressionPart","tour","setSearchDefinitionExpression","setTourDefinitionExpressionByAccession","accession","selectMapFilterActiveDropdowns","$filterSelectedOptions","$searchDefinitionExpression","IconFilter","prop","filterOn","fillColor","cx","cy","r","transform","SearchPlantRecordsFilter","useDispatch","searchType","$searchType","LOCATIONS_SEARCH_LABEL","aliveDefinitionExpression","aliveAndDefinitionExpression","isAlive","setAllLivingRecordsCheckbox","FormControlLabel","control","GreenSwitch","checked","IconReset","IconSearch","SearchPlantsAlphabet","searchTerms","$searchTerms","searchTypeAdvanced","$searchTypeAdvanced","searchTermsKey","getResultKey","searchValue","alphabet","letter","test","setSearchTerms","setURLPath","handleSearchPlantsAlphabetLetterSelection","SearchPlantsAdvancedResults","_plantsResults$search3","plantsResults","setPlantsResults","useContext","PlantsResultsContext","cardMinimized","$cardMinimized","mapLoaded","$mapLoaded","fetchAdvancedSearch","$fetchAdvancedSearch","isLoading","setIsLoading","_plantsResults$search","setMinimized","queryScientificCommonByLetter","then","queryResults","resultsAttributes","features","_plantsResults$search2","queryPlants","setFetchAdvancedSearch","Loader","createContext","PlantsResultsContextProvider","setPlantResults","Provider","AdvancedFiltersOptions","FormControl","NativeSelect","disableUnderline","onChange","event","searchTypeAdvancedLocal","setSearchTypeAdvanced","handleAdvancedFiltersOptionsChange","target","inputProps","SearchPlantsAdvancedFilters","handleFetchAdvancedSearch","placeholder","onKeyUp","handleSearchPlantInputKeyDown","onFocus","handleMultipleImages","data","nameNums","images","PLANT_NAME_NUM_KEY","nameNum","items","cover","image","plantKeywords","displayAttributes","i","plantNameNum","trim","some","previewUrl","thumbnailUrl","async","getPlantImages","NAME_NUM","apiPlantImages","apiURL__getPlantImages","process","updatedApiPlantImagesState","fetch","res","json","NAME_NUMS","listOfNameNums","_uniq","sort","a","b","setApiPlantImages","e","console","log","getClean__CATALOG_DESC","CATALOG_DESC","layersVisible","activeLayerDropdown","layersConfig","pointsConfig","adaConfig","activeLayerToggles","adaSublayersTitles","currentMapViewScale","layerSlice","setLayersVisible","setLayersConfig","setActiveLayersDropdown","setActiveLayers","layerID","allToggles","allIDs","indexOf","splice","toggles","toggleADASublayers","togglePlantData","toggleArtBasemap","toggleLocationCodes","togglePointsOfInterest","setToggleAllLayers","toggleAllMapLayers","setAllOptionalLayersVisibility","visible","_concat","layers","_pullAll","toggleAllADASublayers","setAdaSublayersTitles","setCurrentMapViewScale","$adaSublayersTitles","$currentMapViewScale","IconChevronUp","rotate","BASE_URL","PLANT_ID_FIELD","COLOR_PRIMARY","GIS_REST_SERVICES","PLANT_DATA_LAYER_URL","GARDEN_LOCATIONS_LAYER_URL","ART_LAYER_1_URL","ART_LAYER_2_URL","ADA_URL","INTERACTIVE_FEATURE_LAYER_URL","LOCATION_CODES_MAP_IMAGE_LAYER_URL","LOCATIONS_URL","TOURS_URL","ZOOM_MOBILE","MAP_ZOOM","innerWidth","GRAY_VECTOR_PORTALID","MAP_CENTER","latitude","longitude","visibilityScale","LABELS_CANOPIES_VISIBILITY_MIN_SCALE","INITIAL_DEFINITION_EXPRESSION","plantLayerDefaultDefinitionExpression","PLANTS_FEATURE_LAYER_LABELING_INFO","minScale","labelExpressionInfo","expression","symbol","font","family","size","color","verticalAlignment","haloSize","haloColor","PLANTS_FEATURE_LAYER_CANOPY_RENDERER","visualVariables","field","valueUnit","PLANT_DATA_LAYER","url","ART_LAYER_1","ART_LAYER_2","imageFormat","sublayers","labelsVisible","labelingInfo","labelExpression","labelPlacement","weight","ADA_MAP_IMAGE_LAYER","INTERACTIVE_FEATURE_LAYER","popupTemplate","LOCATION_CODES_MAP_IMAGE_LAYER","GARDEN_LOCATIONS_FEATURE_LAYER","renderer","isMobileDevice","matchMedia","matches","NYBG_GOTHIC_FONT","NYBG_GT_TEXT_FONT","resetTours","resetTourStopsGraphicsLayer","updateTourPathURL","tourID","tourStop","arguments","appHistory","startCuratedTour","accessionIDs","queryAccessionsByTourID","selectedTour","imagesInRedux","Object","keys","getTourStopsPlantData","tourPlants__NAME_NUM","result","nameNumDIFF","_difference","setTourStopsGraphicsLayer","getTourSelected","getAndSetTourStops","plantStops","queryPlantsByAccession","reduxSetTourStops","theme","createTheme","palette","primary","main","secondary","overrides","MuiButtonBase","root","fontFamily","MuiSwitch","switchBase","backgroundColor","colorPrimary","MuiFormControlLabel","MuiInput","input","MuiTypography","h1","textTransform","h2","h3","h4","h5","h6","body1","body2","subtitle1","subtitle2","caption","PageMainTitle","Home","IconFacebook","version","stroke","strokeWidth","IconX","xmlSpace","enableBackground","strokeMiterlimit","IconInstagram","IconGmail","Share","popupDimensions","href","IconShare","ShareWidget","shareModalActive","selectShareModalActive","setShareModalActive","HeaderLogoSection","rel","setMobileMenuOpen","src","NYBG_Logo_Black_RGB","alt","menuOptions","menuTitle","subOptions","IconBurgerMenu","HeaderMenuButton","mobileMenuOpen","selectMobileMenuOpen","HeaderMenu","resetMap","resetMapGraphics","setCardContent","WEBSITE_NAME","SEO","useLocation","selectedAccession","$selectedAccession","setLabel","setType","pathname","ACC_NUM_AND_QUAL","Helmet","Header","SpecificFamily","useParams","genera","setGenera","loading","setLoading","generaResults","queryGeneraByFamily","getAndSetResults","SpecificGenus","genus","species","setSpecies","querySpeciesByGenera","IconGreenMap","IconWhiteMap","PhenologyChartLegendFlowering","React","Fragment","PhenologyChartLegendFruiting","PhenologyChartLegend","selectedValue","uniqueYears","handleYearChange","year","MONTHS_SHORT","WEEKS_IN_YEAR_RANGE","_range","PhenologyTableHead","class","colSpan","PhenologyTableAverage","phenologyChartData","dates","week","numberOfPlants","reduce","acc","cur","weekInYear","getWeek","getCount","PhenologyTableFloweringYear","selectedYear","selectedPlantsByYear","weekInt","plantsInWeek","getPlantsInWeek","uuidv4","PhenologyTableFruitingYear","PhenologyChart","getUniqueYears","setSelectedYear","yearInt","filterByYear","PlantNotAlive","SpecificPlantTopDetails","favorite","removeFavoritePlant","addFavoritePlant","FAMILY","RANGE","HABIT_FULL","handleGalleryImages","plantGalleryImages","original","thumbnail","originalAlt","SpecificPlantGallery","$apiPlantImages","$selectedPlant","setPlantGalleryImages","plantImagesData","plantImages","ImageGallery","showPlayButton","showFullscreenButton","SpecificPlantFindOthers","SpecificPlant","searchWidgetLocation","specificPlant","goBack","useHistory","allFavoritesString","localStorage","getItem","allFavorites","JSON","parse","setFavorite","error","setError","setPhenologyChartData","setPlant","ACCEPT_FULL","CURRENT_CONDITION_FULL","ACC_YR","RECD_YR","PSOURCE_CURRENT","CURRENT_NUM_PLTS","CURRENT_LOCATION","CURRENT_LOCATION_FULL","RECD_HOW","PROV_TYPE","CURRENT_CHECK_NOTE","CURRENT_CHECK_DT","LEDITED_BY","CURRENT_CHECK_BY","ACCEPT","ACCEPT_NAME","KEYWORD","HABITAT","SOIL","SPEC_CHAR_FULL","GROWTH_FORM_FULL","DECID_FULL","HARDI_ZONE_USDA","FL_COLOR_FULL","FL_COLOR_NOTE","LEAF_COLOR_FULL","LEAF_COLOR_NOTE","FR_COLOR_FULL","HEIGHT","HEIGHT_X","HEIGHT_Y","HEIGHT_UNIT_DISP","SPREAD","SPREAD_UNIT_DISP","CODE","MAPPED","X_COORD","Y_COORD","Z_COORD","LOCATION__CURRENT","PUBLICLY_ACCESSIBLE","accessionData","setAccessionData","taxonomyType","taxonomyValue","plantDataQuery","queryPlantByCommonName","queryPlantBySpeciesName","acessionDataQuery","queryPlantsForAccessionIDsByCommonName","queryPlantsForAccessionIDsBySpecies","handleSpecificPlant","plantDataResults","plantData","setSelectedPlant","commonName","scientificName","accessionQueryResults","queryPlantBySpeciesNameForPhenologyChartData","chartDataResults","updateFavoritePlant","setItem","stringify","updateFavoritePlants","Accessions","showAll","setShowAll","categories","prepareData","record","accessionNumberAndQualifiers","accessNumber","accessCharacter","orderedData","_orderBy","row","renderOption","ExploreIcon","ExploreOffIcon","viewOnMapURL","WidgetImage","gallery","favoritePlant","img","ResultsError","dangerouslySetInnerHTML","__html","IconTrashBin","IconHeartRed","ICON__SIZE","REMOVE_BUTTON__SIZE","FavoritePlantsItem","sharePlant","unfavoritePlant","remove","setRemove","handlers","useSwipeable","onSwipedLeft","onSwipedRight","preventDefaultTouchmoveEvent","trackMouse","trackTouch","left","FavoritePlants","favoritePlants","setFavoritePlants","updatedFavoritePlants","IconBurgerMenuFilter","IconFlower","IconPlantType","IconSunlightNeeds","IconRadioButton","padding","FilterPlants","mapFilterActiveDropdowns","filterOptions","setFilterOptions","getOptionsCopy","optionsCopy","options","subOption","values","configOptionCopy","icon","filterOptionButtonHeight","filterIndex","optionKey","selectedDropdown","dropdownOption","setActiveCheckbox","activeValue","setActiveRadioButton","FilterPlantsClear","TourOptionsItem","tourName","numbers","TourOptions","activeDropdown","setActiveDropdown","setDropdowns","activeDropdownCopy","setTourSelection","disabled","IconLocator","TourStopsClose","setTourStopsActiveStop","goToAllTourStops","TourStops","accessions","stop","closeTourWidget","TourView","returnCurrentTourStep","SearchPlantsAdvancedModal","CollectionsLanguageModal","GardenGallery","GardenLocation","ModalView","setTitle","setSubTitle","setTourModalTitle","returnHeaderAction","returnContent","NO_RESULTS","plantAttributes","CURRENT_MEASURE_DT","CURRENT_SPREAD","CURRENT_HEIGHT","SPREAD_UNIT","SPREAD_ACCURACY","CURRENT_SPREAD_FULL","DBH","DBH_UNIT","DBH_ACCURACY","CURRENT_DBH","CURRENT_DBH_FULL","SPREAD_1","MOST_RECENT_DBH","MOST_RECENT_DBH_DT","MOST_RECENT_HEIGHT","MOST_RECENT_HEIGHT_DT","MOST_RECENT_SPREAD","MOST_RECENT_SPREAD_DT","getDateFormated","timestamp","format","SpecificAccession","_plant$attributes","geometry","queryPlantsBySpecificAccession","setSelectedAccession","toJSON","fromView","hostname","match","Map","loadable","Error","ReactDOM","render","StrictMode","HelmetProvider","ThemeProvider","StylesProvider","injectFirst","Router","Switch","Route","exact","component","FamilyIndex","GenusIndex","PlantIndex","document","getElementById","navigator","serviceWorker","ready","registration","unregister","catch","message","POINTS_OF_INTERENST","mapLayerToggles","ACCESSIBLE_ROUTES_PATHS","datasets","years","Set","flowering","dateString","fruiting","reverse","section","dateStrings","getCheckDates","CHECK_DT","getReproductiveStatuses","REPRODUCTIVE_STATUS","getPhenologyChartData","feat","checkDates","reproductiveStatuses","reproductiveStatus","_includes","getPhenologyFloweringData","searchTypeFromURL","URL__SEARCH_TYPE","searchTypeAdvancedFromURL","URL__SEARCH_TYPE_ADVANCED","searchValueFromURL","URL__SEARCH_VALUE","initialSearchTerms","SEARCH_OPTIONS","DEFAULT_SEARCH_TYPE","selectedAccessionDefault","selectedPlanInitialState","appSlice","cardContent","legendExpanded","searchCurrentSelection","selectedPanel","gardenLocations","gardenCodeSelected","selectedPlant","setLegendExpanded","setMapLoaded","setSearchWidgetLocation","setSearchType","setSearchCurrentSelection","setSelectedPanel","setGardenLocations","setGardenCodeSelected","setDefinitionExpressionQueryAttributes","$legendExpanded","selectFavoritePlants","$gardenLocations","$gardenCodeSelected","regexMatch","matchedName","plantNameFirst","plantNameLast","generatePlantQueryWhereClause","expressions","queriesDefault","queriesBackup","re","searchSegment","toUpperCase","SEARCH_FIELD_ADVANCED","queryAdvancedDefault","queryAdvancedBackup","SEARCH_FIELD","BACKUP_FIELD","queryDefault","queryBackup","finalExpressions","handleSearchResults","queryUrl","queryLocations","where","queryResults__PlantCenter","queryLocationForSearch","queryResults__GardenLocations","queryGardenLocations","queryResults__PlantCenter__Attributes","queryResults__GardenLocations__Attributes","mergedResults","_merge","_keyBy","LOCATIONS_GROUP_FIELD","LOCATIONS_GARDEN_CODE","filteredGardensKeys","mergedResultsClean","_pick","locationsAttributes","_values","attribute","LOCATIONS_ESRI_FIELD","getUpdateFilterOptions","locations","getGardenLocation","wherePrimary","queryPlantsForSearch","whereSecondary","_a$attributes$SORT_NA","_b$attributes$SORT_NA","aSortValue","SORT_NAME","bSortValue","urlParams","fieldAdvanced","urlParamsClean","_pickBy","_identity","urlSearchParams","searchQuery","searchValues","phenologyFlowering","phenologyFloweringDayStart","phenologyFloweringDayEnd","phenologyFloweringResults","phenologyDisplayFloweringResults","phenologySliderValues","phenologySlice","setPhenologyFlowering","setPhenologyFloweringResults","setPhenologyDisplayFloweringResults","$phenologyFlowering","$phenologyFloweringDayStart","$phenologyFloweringDayEnd","$phenologyFloweringResults","$phenologyDisplayFloweringResults","$phenologySliderStartingDate","$phenologySliderValues","LOCATIONS_GARDEN_LOCATION","LOCATIONS_GARDEN_WEBSITE","FIELD_NAME","SEARCH_OPTIONS_FIELD_PHENOLOGY","SEARCH_PLANT_ALPHABET_EXCLUDE_SECTIONS","SEARCH_PLANT_ALPHABET_SECTIONS_DISABLE_SEARCH_PLACEHOLDER","SEARCH_PLANT_DISABLE_LOCATION_PLACEHOLDER","AUTOSIZER_GARDEN_LOCATION__ROW_HEIGHT","IconPhotoLibrary","xmlnsXlink","x","y","filterUnits","dx","dy","in","xlinkHref","garden","plantImage","setPlantImage","handleSetPlantImage","plantsImages","plantImagesCollection","_plantImagesCollectio","alignSelf","minWidth","NYBGLogo","objectFit","withStyles","track","highlightSelectedPlant","_mapview","Graphic","loadModules","graphics","removeAll","pictureMarkerSymbol","PlantMarkerSelected","plantGraphic","fetchLegendData","getImageSrc","contentType","imageData","labelMapping","Surveyed","PlantDataLegend","_plantDataLegendData$","plantDataLegendData","setPlantDataLegendData","legend","LayersDisabled","FilterLayers","mapLayerOptions","mapActiveLayerToggles","allToggleOptions","setAllToggles","getLayerOptions","getAndSetPointsOfInterest","newLayers","layer","layerCopy","pointsOfInterest","points","uniqueValueInfos","drawingInfo","uniqueValueInfo","labels","allTogglesOptionsCopy","imageSource","imageAlt","getPointsOfInterest","accessibilityLayers","getA11yLayers","adaLegend","accessPoints","accessPointOptions","legendElement","layerName","first","accessibleRoutes","accessibilityOptions","getAndSetAccessibilityRoutes","mainLabel","optionLayers","includeAtLeastOneLayer","_intersection","optionsIndex","isActive","paddingRight","Legend","IconWheelchair","AccessibilityWidget","setVisible","updateLayerToggle","adaSublayersON","adaSublayersOFF","Filter","Tour","queryTours","ViewTours","TourStopsMapWidget","SCIENTIFIC_NAME","goToTourStop","updateActiveStop","newActiveStop","returnButton","TOUR_ARROW__LENGTH","returnTourButton","setDefaultOptions","css","selectedGardenCenter","getPlantsByAccessionWhereQuery","accesionIDs","constructor","_this","_map","_plantsFeatureLayer","_plantsFeatureLayerView","_plantsFeatureLayerLabels","_plantsFeatureLayerCanopy","_interactiveFeatureLayer","_artLayer1","_artLayer2","_popupTriggerAction","_mapViewUI","_adaMapImageLayer","_filterDefinitionExpression","_tourGraphicsLayer","_locationCodesMapImageLayer","_mapPointsGraphicsLayer","_gardenLocationsFeatureLayer","initializeMap","_this$_adaMapImageLay","_this$_plantsFeatureL","_this$_plantsFeatureL2","_this$_mapview","_this$_mapview8","_this$_mapview9","_this$_mapview11","_this$_mapview13","_this$_mapview15","_this$_mapview17","_this$_mapview18","_this$_mapview19","_this$_mapview20","_this$_mapview21","_this$_mapview22","MapView","MapImageLayer","Locate","TileLayer","Basemap","VectorTileLayer","FeatureLayer","FeatureFilter","GraphicsLayer","grayVector","portalItem","this","when","adaLayerView","allSublayers","subLayer","basemap","baseLayers","_this$_mapview7","load","loadedLayer","container","domRef","current","zoom","center","rotation","constraints","minZoom","maxZoom","xmax","ymax","xmin","ymin","_this$_mapview4","_this$_mapview5","_this$_mapview6","_this$_mapview2","_this$_mapview3","scale","widthBreakpoint","heightBreakpoint","whenLayerView","layerView","fadeInTimeout","fadeOutTimeout","oldScale","watch","stationary","_this$_mapview10","_this$_mapview12","newScale","updateVisibility","sign","clearTimeout","layerToShow","layerToHide","baseOpacity","fadeIn","setTimeout","opacity","fadeOut","popup","on","getDetails","_this$_mapview14","close","_this$_mapview16","featureCount","popupGardenCenter","featureMenuOpen","popupHeaderSelector","domNode","querySelector","innerText","collapsed","selectedFeature","mapview","collapseEnabled","homeWidget","view","locateWidget","mapWidgetLegend","widgetLocation","node","createElement","ui","mapWidgetAccessibility","move","mapWidgetTour","viewModel","queryLayer","QueryTask","Query","SpatialReference","queryTask","returnGeometry","outSpatialReference","WebMercator","queryResult","execute","feature","featureData","specificAttribute","warn","num","goToGeometry","goTo","commonname","returnDistinctValues","queryPlantsByCommonNamePreferred","updateMapSelectedGardenLocations","Point","goToLocations","_this$_mapview23","PLANT_LOCATION_UNDEFINED","NaN","plantFeaturesWithExistingLocations","queryLocationByGardenName","filterPlantsFields","gardenName","executeQueryPBF","orderByFields","queryCount","TourStopSelected","_this$_tourGraphicsLa","addMany","duration","_this$_adaMapImageLay2","_this$_adaMapImageLay3","sublayerToggles","sublayer","onlyPoints","waitForMapLoad","Promise","resolve","reject","checks","checkInterval","setInterval","clearInterval","waitForPlantFeatureLayerViewLoad","handleDefinitionExpressionChange","_this$_mapPointsGraph","_this$_mapPointsGraph2","_this$_plantsFeatureL3","createQuery","spatialReference","response","queryFeatures","filteredFeatures","isNaN","_this$_mapPointsGraph3","_this$_mapPointsGraph4","symbolImage","iconPinPointExactSelected","iconPinPointApproximateSelected","iconPinPointExact","iconPinPointApproximate","selectedGraphic","_this$_mapview24","debounceHandleDefinitionExpressionChange","_debounce","definitionExpressions","gardenCode","_this$_mapview25","Polygon","polygon","GardenCode","loadAll","_this$_adaMapImageLay4","createBrowserHistory"],"mappings":"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","file":"static/js/main.02161f28.chunk.js","sourcesContent":["// Map link\nexport const MAP_LINK__TOURS = '/map/tours';\nexport const MAP_LINK__GENUS = '/map/genus/';\nexport const MAP_LINK__SPECIES = '/map/species/';\nexport const MAP_LINK__LOCATION = '/map/location/';\nexport const MAP_LINK__COMMON_NAME = '/map/commonname/';\n\n// Plants link\nexport const PLANTS_LINK__SPECIES = '/plants/species/';\nexport const PLANTS_LINK__ACCESSION = '/plants/accession';\n\nexport const SPACE__ORIGINAL = ' ';\nexport const SPACE__REPLACE_PATTERN = '--';\nexport const SLASH__ORIGINAL = '/';\nexport const SLASH__REPLACE_PATTERN = '~';\n\n/**\n * Decode path value by replacing:\n * - double dash with space (`--` => ` `)\n * - tilde with slash (`~` => `/`)\n *\n * @param {string} pathValue - Path value\n * @return {string} Handled path value\n */\nexport function decodePathValue(pathValue: string) {\n const spaceRegExp = new RegExp(SPACE__REPLACE_PATTERN, 'g');\n const slashRegExp = new RegExp(SLASH__REPLACE_PATTERN, 'g');\n let path = pathValue.includes(SPACE__REPLACE_PATTERN) ? pathValue.replace(spaceRegExp, SPACE__ORIGINAL) : pathValue;\n path = path.includes(SLASH__REPLACE_PATTERN) ? path.replace(slashRegExp, SLASH__ORIGINAL) : path;\n return path;\n}\n\n/**\n * Encode path value by replacing:\n * - space with double dash (` ` => `--`)\n * - slash with tilde (`/` => `~`)\n *\n * @param {string} pathValue - Path value\n * @return {string} Updated path value\n */\nexport function encodePathValue(pathValue: string) {\n return pathValue\n .split(SPACE__ORIGINAL)\n .join(SPACE__REPLACE_PATTERN)\n .split(SLASH__ORIGINAL)\n .join(SLASH__REPLACE_PATTERN);\n}\n\n/**\n * Get Path by section type\n *\n * @param {string} type\n * @param {string} pathValue\n * @return {string} - Path\n */\nexport const getPath = (type: string, pathValue: string) => {\n let path;\n switch (type) {\n case 'species':\n path = MAP_LINK__SPECIES + encodePathValue(pathValue);\n break;\n case 'genus':\n path = MAP_LINK__GENUS + encodePathValue(pathValue);\n break;\n case 'location':\n path = MAP_LINK__LOCATION + encodePathValue(pathValue);\n break;\n case 'commonname':\n path = MAP_LINK__COMMON_NAME + encodePathValue(pathValue);\n break;\n default:\n path = '';\n }\n\n return path;\n};\n","// @ts-nocheck\n\n// This is an example redux toolkit slice\n\nimport { createSlice } from '@reduxjs/toolkit';\n\nexport const slice = createSlice({\n name: 'counter',\n initialState: {\n value: 0,\n },\n reducers: {\n increment: (state) => {\n // Redux Toolkit allows us to write \"mutating\" logic in reducers. It\n // doesn't actually mutate the state because it uses the immer library,\n // which detects changes to a \"draft state\" and produces a brand new\n // immutable state based off those changes\n state.value += 1;\n },\n decrement: (state) => {\n state.value -= 1;\n },\n incrementByAmount: (state, action) => {\n state.value += action.payload;\n },\n },\n});\n\nexport const { increment, decrement, incrementByAmount } = slice.actions;\n\n// The function below is called a thunk and allows us to perform async logic. It\n// can be dispatched like a regular action: `dispatch(incrementAsync(10))`. This\n// will call the thunk with the `dispatch` function as the first argument. Async\n// code can then be executed and other actions can be dispatched\nexport const incrementAsync = (amount) => (dispatch) => {\n setTimeout(() => {\n dispatch(incrementByAmount(amount));\n }, 1000);\n};\n\n// The function below is called a selector and allows us to select a value from\n// the state. Selectors can also be defined inline where they're used instead of\n// in the slice file. For example: `useSelector((state) => state.counter.value)`\nexport const selectCount = (state) => state.counter.value;\n\nexport default slice.reducer;\n","import { combineReducers, configureStore } from '@reduxjs/toolkit';\n\nimport appReducer from './app/appSlice';\nimport filterReducer from './app/filterSlice';\nimport layerReducer from './app/layerSlice';\nimport modalReducer from './app/modalSlice';\nimport counterReducer from './slices/counterSlice';\nimport tourReducer from './app/tourSlice';\nimport phenologyReducer from './app/phenologySlice';\n\nconst rootReducer = combineReducers({\n appReducer,\n filterReducer,\n counterReducer,\n layerReducer,\n modalReducer,\n tourReducer,\n phenologyReducer,\n});\n\nexport type RootState = ReturnType;\n\nexport default configureStore({\n reducer: rootReducer,\n});\n","import React from 'react';\n\nexport function ModalHeader(props: { title?: string; subTitle?: string; headerAction?: any }) {\n const { subTitle, title, headerAction } = props;\n return (\n
\n
\n {title &&

{title}

}\n {subTitle &&

{subTitle}

}\n
\n {headerAction &&
{headerAction}
}\n
\n );\n}\n","import React from 'react';\n\nexport function ModalFooter(props: {\n footerLeftLabel: string | undefined;\n footerLeftClass: string | undefined;\n footerRightLabel: string | undefined;\n footerRightClass: string | undefined;\n}) {\n const { footerLeftLabel, footerLeftClass, footerRightLabel, footerRightClass } = props;\n return (\n
\n {footerLeftLabel && (\n
\n \n
\n )}\n\n {footerRightLabel && (\n
\n \n
\n )}\n
\n );\n}\n","import React from 'react';\n\nexport function ModalMain(props: { content?: any; mainModalPaddingHide?: boolean }) {\n const { content, mainModalPaddingHide } = props;\n return (\n
\n {content}\n
\n );\n}\n","import React from 'react';\nimport IconClose from '../icons/IconClose';\n\nexport function ModalClose(props: { handleClose: () => void }) {\n return (\n
\n \n
\n );\n}\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport ModalUI from '@material-ui/core/Modal';\n\n// REDUX Store\nimport { $modalContent } from '../../store/app/modalSlice';\n\nimport { ModalHeader } from './ModalHeader';\nimport { ModalFooter } from './ModalFooter';\nimport { ModalMain } from './ModalMain';\nimport { ModalClose } from './ModalClose';\n\nimport './Modal.scss';\n\nfunction Modal(props: {\n open: boolean;\n showModal: boolean;\n handleClose: any;\n title?: string;\n subTitle?: string;\n headerAction?: any;\n mainModalPaddingHide?: boolean;\n footerLeftLabel?: string;\n footerLeftClass?: string;\n footerRightLabel?: string;\n footerRightClass?: string;\n content?: any;\n onRequestClose?: any;\n}) {\n const modalContent = useSelector($modalContent);\n const {\n open,\n showModal,\n handleClose,\n title,\n subTitle,\n headerAction,\n mainModalPaddingHide,\n footerLeftLabel,\n footerLeftClass,\n footerRightLabel,\n footerRightClass,\n content,\n } = props;\n\n return (\n \n \n {title || subTitle ? : null}\n\n {content && }\n\n {footerLeftLabel || footerRightLabel ? (\n \n ) : null}\n\n \n \n \n );\n}\n\nexport default Modal;\n","import { scientificNameFormatted } from '../../components/plants/searchResults/PlantResultScientificName/ScientificNameFormatted';\nimport { splitByCharacter } from '../../utils/plantSyntax.util';\n\nimport './popup.scss';\n\ninterface PopupTemplateData {\n graphic: __esri.Graphic;\n}\n\nconst getPopupTemplateContent = (graphic: __esri.Graphic) => {\n const formattedSunFullAttribute = splitByCharacter(graphic?.attributes?.SUN_FULL);\n\n return `
\n

Common Name: {COMMON_NAME_PRIMARY}

\n

Accession ID: {ACC_NUM_AND_QUAL}

\n

Family: {FAMILY}

\n

Habit: {HABIT_FULL}

\n

Native: {RANGE}

\n

Hardiness: \n USDA Zone {HARDI_ZONE_USDA}\n

\n

Light: ${formattedSunFullAttribute}

\n

Location: {CURRENT_LOCATION_FULL}

\n
\n `;\n};\n\nconst getDetailsAction = {\n title: 'Get Details',\n id: 'get-details',\n className: 'get-details',\n};\n\nconst colosePopupAction = {\n title: 'Close Popup',\n id: 'popup-close-list',\n className: 'esri-icon-close popup-close-list',\n};\n\nconst title = (evt: any) => {\n const { NAME } = evt.graphic.attributes;\n return scientificNameFormatted(NAME);\n};\n\nexport const getPopupTemplate = () => {\n return {\n title: title,\n content: (item: PopupTemplateData) => getPopupTemplateContent(item?.graphic),\n actions: [getDetailsAction, colosePopupAction],\n overwriteActions: true,\n outFields: [\n 'ACC_NUM_AND_QUAL',\n 'COMMON_NAME_PRIMARY',\n 'FAMILY',\n 'HABIT_FULL',\n 'HARDI_ZONE_USDA',\n 'NAME',\n 'RANGE',\n 'SUN_FULL',\n 'CURRENT_LOCATION_FULL',\n ],\n };\n};\n\nconst POINT_OF_INTEREST_POPUP_TEMPLATE_CONTENT = `
\n

{Current_Content}

\n
\n`;\n\nexport const getPointOfInterestPopupTemplate = () => {\n return {\n title: '{Name}',\n content: POINT_OF_INTEREST_POPUP_TEMPLATE_CONTENT,\n };\n};\n","import React from 'react';\n\nimport './TourStopNumber.scss';\n\nexport default function TourStopNumber({ index }: { index: number }) {\n return (\n
\n {index + 1}\n
\n );\n}\n","export default __webpack_public_path__ + \"static/media/NYBG_Logo_Black_RGB.8a78bd5e.svg\";","import * as React from 'react';\nimport { SVG_CONFIG } from '../../config/config';\n\nfunction IconLeaf({ fill, width = 35, height = 35 }: { fill?: string; width?: number; height?: number }) {\n return (\n \n \n \n );\n}\n\nexport default IconLeaf;\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { RootState } from '../store';\n\nimport { decodePathValue } from '../../utils/path.util';\nimport { TourStop } from '../../interfaces/plantData';\nimport { URL__TOUR_ID, URL__TOUR_NAME, URL__TOUR_STOP } from '../../config/plant.config';\n\nexport const defaultTourStopIndex = -1;\n\nconst query = new URLSearchParams(window.location.search);\nconst searchTourID: string | null = query.get(URL__TOUR_ID);\nconst searchTourName: string | null = query.get(URL__TOUR_NAME);\nconst searchTourStop: string | null = query.get(URL__TOUR_STOP);\n\nexport type TourSelected = {\n Tour_ID: number | undefined;\n Tour_Name: string | undefined;\n Description: string | undefined;\n};\n\nexport interface TourState {\n stopsByAccession: Array | [];\n toursAll: Array;\n tourSelected: TourSelected;\n tourStep: string;\n tourStops: Array | [];\n tourStopIndex: number;\n}\n\nexport const tourSlice = createSlice({\n name: 'tour',\n initialState: {\n stopsByAccession: [],\n toursAll: [],\n tourSelected: {\n Tour_ID: searchTourID ? parseInt(searchTourID) : undefined,\n Tour_Name: searchTourName ? decodePathValue(searchTourName) : undefined,\n Description: undefined,\n },\n tourStep: 'ViewTours',\n tourStops: [],\n tourStopIndex: searchTourStop ? parseInt(searchTourStop) - 1 : defaultTourStopIndex,\n },\n reducers: {\n setStopsByAccession: (state: TourState, action: PayloadAction) => {\n state.stopsByAccession = action.payload;\n },\n setToursAll: (state: TourState, action: PayloadAction) => {\n state.toursAll = action.payload;\n },\n setTourSelected: (state: TourState, action: PayloadAction) => {\n state.tourSelected = action.payload;\n },\n setTourStep: (state: TourState, action: PayloadAction) => {\n state.tourStep = action.payload;\n },\n setTourStops: (state: TourState, action: PayloadAction) => {\n state.tourStops = action.payload;\n },\n setTourStopIndex: (state: TourState, action: PayloadAction) => {\n state.tourStopIndex = action.payload;\n },\n },\n});\n\nexport const { setStopsByAccession, setToursAll, setTourSelected, setTourStep, setTourStops, setTourStopIndex } =\n tourSlice.actions;\n\nexport const stopsByAccession = (state: RootState) => state.tourReducer.stopsByAccession;\nexport const $toursAll = (state: RootState) => state.tourReducer.toursAll;\nexport const $tourSelected = (state: RootState) => state.tourReducer.tourSelected;\nexport const tourStep = (state: RootState) => state.tourReducer.tourStep;\nexport const $tourStep = (state: RootState) => state.tourReducer.tourStep;\nexport const $tourStops = (state: RootState) => state.tourReducer.tourStops;\nexport const $tourStopIndex = (state: RootState) => state.tourReducer.tourStopIndex;\n\nexport default tourSlice.reducer;\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { RootState } from '../store';\n\nexport interface GardenLocation {\n LOCATION_GROUP_NOW: string;\n LOCATION_GROUP_NOW_FULL: string;\n thumbnailUrl: string;\n previewUrl: string;\n GardenCode: string;\n GardenWebsite: string;\n GardenLocation: string;\n}\n\nexport interface ModalState {\n modalContent: string;\n modalGardenLocation?: GardenLocation;\n}\n\nexport const modalSlice = createSlice({\n name: 'modal',\n initialState: {\n modalContent: '',\n modalGardenLocation: undefined,\n },\n reducers: {\n setModalContent: (state: ModalState, action: PayloadAction) => {\n state.modalContent = action.payload;\n },\n setModalGardenLocation: (state: ModalState, action: PayloadAction) => {\n state.modalGardenLocation = action.payload;\n },\n },\n});\n\nexport const { setModalContent, setModalGardenLocation } = modalSlice.actions;\n\nexport const $modalContent = (state: RootState) => state.modalReducer.modalContent;\nexport const $modalGardenLocation = (state: RootState) => state.modalReducer.modalGardenLocation;\n\nexport default modalSlice.reducer;\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { SEARCH_OPTIONS_ADVANCED } from '../../../../config/plant.config';\nimport { splitByCharacter } from '../../../../utils/plantSyntax.util';\n\nexport default function PlantResultAdvancedField({\n searchFieldAdvanced,\n plant,\n}: {\n searchFieldAdvanced: string;\n plant: any;\n}) {\n const { displayField }: any = SEARCH_OPTIONS_ADVANCED.find(({ esriField }) => esriField === searchFieldAdvanced);\n\n return (\n \n \n {splitByCharacter(plant[displayField])}\n \n \n );\n}\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport PlantResultAdvancedField from '../PlantResultAdvancedField/PlantResultAdvancedField';\n\nimport { getPath } from '../../../../utils/path.util';\nimport { splitByCharacter } from '../../../../utils/plantSyntax.util';\n\nimport { FIELD_FAMILY_AND_FAMILY_COMMON, FIELD_GENUS_AND_GENUS_COMMON } from '../../../../config/plant.config';\n\nimport './PlantResultCommonName.scss';\n\nexport default function PlantResultCommonName({\n plant,\n searchField,\n searchFieldAdvanced,\n}: {\n searchField: any;\n searchFieldAdvanced: any;\n plant: any;\n}) {\n const { COMMON_NAME_PRIMARY, COMMON_NAMES } = plant;\n\n return (\n <>\n {searchField === 'Advanced' &&\n [FIELD_FAMILY_AND_FAMILY_COMMON, FIELD_GENUS_AND_GENUS_COMMON].includes(searchFieldAdvanced) ? (\n \n ) : (\n \n {COMMON_NAME_PRIMARY ? (\n {splitByCharacter(COMMON_NAME_PRIMARY)}\n ) : COMMON_NAMES ? (\n {splitByCharacter(COMMON_NAMES)}\n ) : null}\n \n )}\n \n );\n}\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { splitByCharacter } from '../../../../utils/plantSyntax.util';\n\n// Interface\nimport { PlantAllNames } from '../../../../interfaces/plantData';\n\nimport './PlantResultGenusCommonNamePrimary.scss';\nimport { getPath } from '../../../../utils/path.util';\n\nexport default function PlantResultGenusCommonNamePrimary({ plant }: { plant: PlantAllNames }) {\n const { GENUS, GENUS_COMMON_NAME_PRIMARY } = plant;\n\n const genusCommonNamePrimaryValue = splitByCharacter(GENUS_COMMON_NAME_PRIMARY);\n\n return (\n \n {genusCommonNamePrimaryValue},\n \n );\n}\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { splitByCharacter } from '../../../../utils/plantSyntax.util';\n\n// Interface\nimport { PlantAllNames } from '../../../../interfaces/plantData';\n\nimport './PlantResultCommonNamePreferred.scss';\nimport { getPath } from '../../../../utils/path.util';\n\nexport default function PlantResultCommonNamePreferred({ plant }: { plant: PlantAllNames }) {\n const { COMMON_NAME_PRIMARY } = plant;\n\n const commonNamePreferredValue = splitByCharacter(COMMON_NAME_PRIMARY);\n\n return (\n \n {commonNamePreferredValue}\n \n );\n}\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport ScientificNameFormatted from './ScientificNameFormatted';\nimport { splitByCharacter } from '../../../../utils/plantSyntax.util';\n\nimport './PlantResultScientificName.scss';\nimport { getPath } from '../../../../utils/path.util';\n\nexport default function PlantResultScientificName({ NAME }: { NAME: string }) {\n const scientificNameValue: string = splitByCharacter(NAME);\n\n return NAME ? (\n \n \n \n ) : (\n Scientific name coming soon\n );\n}\n","import * as React from 'react';\n\nexport default function IconPlantCheckmark(props: any) {\n return (\n \n \n \n );\n}\n","import * as React from 'react';\n\nexport default function IconPlantClose(props: any) {\n return (\n \n \n \n );\n}\n","import React from 'react';\n\nimport PlantResultGenusCommonNamePrimary from '../PlantResultCommonNamePrimary/PlantResultGenusCommonNamePrimary';\nimport PlantResultCommonNamePreferred from '../PlantResultCommonNamePreferred/PlantResultCommonNamePreferred';\nimport PlantResultScientificName from '../PlantResultScientificName/PlantResultScientificName';\n\nimport IconPlantCheckmark from '../../../icons/IconPlantCheckmark';\nimport IconPlantClose from '../../../icons/IconPlantClose';\n\nimport './PlantResultCommonNameItem.scss';\n\nexport default function PlantResultCommonNameItem({ plant, width }: { width: any; plant: any }) {\n const { NAME, GENUS_COMMON_NAME_PRIMARY, COMMON_NAME_PRIMARY } = plant;\n\n return (\n
\n
\n
\n {plant.ALIVE === 'A' && }\n {plant.ALIVE === null && }\n
\n
\n {GENUS_COMMON_NAME_PRIMARY && }\n {COMMON_NAME_PRIMARY && }\n \n
\n
\n
\n );\n}\n","import React from 'react';\n\nimport PlantResultCommonName from './PlantResultCommonName/PlantResultCommonName';\nimport PlantResultCommonNameItem from './PlantResultCommonNameItem/PlantResultCommonNameItem';\nimport PlantResultScientificName from './PlantResultScientificName/PlantResultScientificName';\nimport { FIELD_COMMON_NAME_ESRI } from '../../../config/plant.config';\n\nimport IconPlantCheckmark from '../../icons/IconPlantCheckmark';\nimport IconPlantClose from '../../icons/IconPlantClose';\n// import IconPlantMinus from '../../icons/IconPlanMinus';\n\nconst PlantResult = (props: any) => {\n const { plant, width, searchFieldAdvanced, searchField } = props;\n const { ALIVE, NAME, OBJECTID } = plant;\n\n if (searchField === 'Advanced' && searchFieldAdvanced === FIELD_COMMON_NAME_ESRI) {\n return ;\n } else {\n return (\n
\n
\n {ALIVE === 'A' && }\n {ALIVE === null && }\n
\n \n \n
\n
\n
\n );\n }\n};\n\nexport default PlantResult;\n","import React from 'react';\n\nimport './PlantSearchResultsNoResults.scss';\n\nexport const PlantSearchResultsNoResults = () => {\n return (\n
\n

\n No plants were found.\n
\n Please refine search and try again.\n

\n
\n );\n};\n","//@ts-nocheck\nimport React, { useEffect, useState } from 'react';\nimport _chunk from 'lodash/chunk';\nimport _uniqBy from 'lodash/uniqBy';\nimport _sortBy from 'lodash/sortBy';\nimport _isEqual from 'lodash/isEqual';\nimport List from 'react-virtualized/dist/commonjs/List';\nimport AutoSizer from 'react-virtualized/dist/commonjs/AutoSizer';\n\n// STORE\nimport { useSelector } from 'react-redux';\nimport { RootState } from '../../store/store';\nimport { $allLivingRecordsCheckbox, $definitionExpressionQueryAttributes } from '../../../store/app/appSlice';\nimport { selectMapFilterSelectedOptions } from '../../../store/app/filterSlice';\n\nimport PlantResult from './PlantResult';\nimport { PlantSearchFindPlantInGarden } from './PlantSearchFindPlantInGarden/PlantSearchFindPlantInGarden';\nimport { PlantSearchResultsNoResults } from './PlantSearchResultsNoResults/PlantSearchResultsNoResults';\nimport {\n AUTOSIZER__ROW_HEIGHT,\n FIELD_COMMON_NAME_ESRI,\n SEARCH_PLANT_ALPHABET_SECTIONS,\n} from '../../../config/plant.config';\nimport { getNumberOfResultColumns } from '../../../utils/results.util';\n\nconst PlantSearchResults = ({\n isAdvancedSearchField,\n results,\n searchField,\n searchFieldAdvanced,\n isBloomResults = false,\n searchTerm = '',\n}) => {\n const filterDefinitionExpression = useSelector((state: RootState) => state.filterReducer.filterDefinitionExpression);\n const allLivingRecordsCheckbox = useSelector($allLivingRecordsCheckbox);\n const mapFilterSelectedOptions = useSelector(selectMapFilterSelectedOptions);\n const definitionExpressionQueryAttributes = useSelector($definitionExpressionQueryAttributes);\n\n // let { search } = useLocation();\n const [numberOfColumns, setNumberOfColumns] = useState(1);\n const [rows, setRows] = useState([]);\n\n // const searchQuery = new URLSearchParams(search);\n // const isGenericSearch = searchQuery.get('field') === 'Plants' ? true : false;\n // const sortAttribute = searchFieldAdvanced ? searchFieldAdvanced : 'COMMON_NAME_PRIMARY';\n // TODO: Move sort to Query request\n const sortByAttribute = 'SORT_NAME';\n\n useEffect(() => {\n const filtersRegular = mapFilterSelectedOptions.filter((option) => {\n if (option.activeRadioButton) {\n return option.activeRadioButton !== 'All';\n }\n });\n\n const filtersCharacteristics = mapFilterSelectedOptions.find((option) => {\n if (option.activeValues.length > 0 && !option.activeRadioButton) {\n return !_isEqual(option.activeValues, ['All']);\n }\n });\n\n if (!results || results.length === 0) {\n let rows;\n\n if (filtersRegular?.length > 0 || filtersCharacteristics?.length > 0) {\n let filteredResults = definitionExpressionQueryAttributes;\n\n filteredResults = _uniqBy(filteredResults, (plant) => `${plant.NAME} - ${plant.COMMON_NAME_PRIMARY}`);\n filteredResults = _sortBy(filteredResults, (plant) => `${plant.NAME} - ${plant.COMMON_NAME_PRIMARY}`);\n\n rows = _chunk(filteredResults, numberOfColumns);\n } else {\n rows = [];\n }\n setRows(rows);\n return;\n }\n\n const plantsAttributes = results\n .filter((plant) => {\n return allLivingRecordsCheckbox ? plant.ALIVE === 'A' : true;\n })\n .filter((plant) => {\n if (filtersRegular.length > 0) {\n const filtersMatching = filtersRegular.map((filter) => {\n const plantValue = plant[filter.esriField];\n const filterValue = filter.activeRadioButton;\n if (plantValue && filterValue) {\n return plantValue.toLowerCase().includes(filterValue.toLowerCase());\n } else {\n return false;\n }\n });\n\n return filtersMatching.every(Boolean);\n } else {\n return true;\n }\n })\n .filter((plant) => {\n if (filtersCharacteristics) {\n const filtersMatchingChar = filtersCharacteristics.activeValues.map((filter) => {\n const plantCharValue = plant['SPEC_CHAR_FULL'];\n if (plantCharValue) {\n return plantCharValue.toLowerCase().includes(filter.toLowerCase());\n } else {\n return false;\n }\n });\n\n return filtersMatchingChar.every(Boolean);\n }\n\n return true;\n });\n\n let plants;\n const uniquePlantResults = _uniqBy(plantsAttributes, (plant) => `${plant.NAME} - ${plant.COMMON_NAME_PRIMARY}`);\n\n if (filtersRegular?.length > 0 || filtersCharacteristics?.length > 0) {\n plants = _sortBy(uniquePlantResults, (plant) => `${plant.NAME} - ${plant.COMMON_NAME_PRIMARY}`);\n } else if (searchField === 'Advanced' && searchFieldAdvanced === FIELD_COMMON_NAME_ESRI) {\n plants = _sortBy(uniquePlantResults, [\n (plant) => (plant[FIELD_COMMON_NAME_ESRI] ? plant[FIELD_COMMON_NAME_ESRI].toLowerCase() : plant),\n (plant) => (plant.COMMON_NAME_PRIMARY ? plant.COMMON_NAME_PRIMARY.toLowerCase() : plant),\n 'NAME',\n ]);\n } else {\n plants = _sortBy(uniquePlantResults, sortByAttribute);\n }\n\n const rows = _chunk(plants, numberOfColumns);\n setRows(rows);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n results,\n searchField,\n numberOfColumns,\n filterDefinitionExpression,\n allLivingRecordsCheckbox,\n definitionExpressionQueryAttributes,\n ]);\n\n const rowRenderer = ({ index, isScrolling, key, style }) => {\n const width = parseInt(100 / numberOfColumns);\n\n return (\n
\n {rows[index].map((plant) => {\n return (\n \n );\n })}\n
\n );\n };\n\n const updateColumns = (width) => {\n const columns = getNumberOfResultColumns(width);\n if (numberOfColumns !== columns) setNumberOfColumns(columns);\n };\n\n return (\n \n
\n \n {({ height, width }) => {\n updateColumns(width);\n return (\n 0 && !isAdvancedSearchField\n ? PlantSearchResultsNoResults\n : PlantSearchFindPlantInGarden\n }\n rowCount={rows.length}\n rowHeight={AUTOSIZER__ROW_HEIGHT}\n rowRenderer={rowRenderer}\n />\n );\n }}\n \n
\n \n );\n};\n\nexport default PlantSearchResults;\n","export function splitByCharacter(string: string) {\n return string ? string.split('@').join(', ') : string;\n}\n\nexport function splitByComma(string: string) {\n return string ? string.split(', ').join('@') : string;\n}\n","import { getDayOfYear } from 'date-fns';\nimport dayjs from 'dayjs';\nimport {\n setPhenologyFloweringDateEnd,\n setPhenologyFloweringDateStart,\n setPhenologySliderStartingDate,\n setPhenologySliderValues,\n} from '../store/app/phenologySlice';\nimport store from '../store/store';\n\nexport const PHENOLOGY_SEARCH_YEAR = 2022;\n\nexport const getSliderValueFromDate = (date: Date, sliderStartingDate: Date) => {\n return dayjs(date).diff(sliderStartingDate, 'day') + 1;\n};\n\nexport const getInitialDateRange = () => {\n const today = dayjs();\n let startDate = today.subtract(7, 'day').toDate();\n startDate = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate());\n let endDate = today.add(7, 'day').toDate();\n endDate = new Date(endDate.getFullYear(), endDate.getMonth(), endDate.getDate());\n\n return {\n startDate,\n endDate,\n };\n};\n\nexport const setInitialDateRange = () => {\n const { startDate, endDate } = getInitialDateRange();\n\n let phenologySliderStartingDate = new Date(store.getState().phenologyReducer.phenologySliderStartingDate);\n\n let startDaySliderValue = getSliderValueFromDate(startDate, phenologySliderStartingDate);\n let endDaySliderValue = getSliderValueFromDate(endDate, phenologySliderStartingDate);\n\n // Update slider starting date if initial range is not in current slider range\n if (startDaySliderValue > endDaySliderValue) {\n phenologySliderStartingDate = dayjs(startDate).startOf('month').toDate();\n store.dispatch(setPhenologySliderStartingDate(phenologySliderStartingDate.toString()));\n\n startDaySliderValue = getSliderValueFromDate(startDate, phenologySliderStartingDate);\n endDaySliderValue = getSliderValueFromDate(endDate, phenologySliderStartingDate);\n }\n\n const startDayOfTheYear = getDayOfYear(startDate);\n const endDayOfTheYear = getDayOfYear(endDate);\n\n store.dispatch(setPhenologyFloweringDateStart({ dayOfYear: startDayOfTheYear, date: startDate.toString() }));\n store.dispatch(setPhenologyFloweringDateEnd({ dayOfYear: endDayOfTheYear, date: endDate.toString() }));\n\n const updatedSliderValues = {\n start: startDaySliderValue,\n end: endDaySliderValue,\n };\n store.dispatch(setPhenologySliderValues(updatedSliderValues));\n};\n\nexport const getUpdatedSliderMarks = (initialSliderDate: Date) => {\n const marks: {\n value: number;\n label: string;\n }[] = [];\n\n const initialMonth = initialSliderDate.getMonth();\n\n let currentMonth = initialMonth;\n let currentDate = initialSliderDate;\n let currentYear = initialSliderDate.getFullYear();\n\n do {\n if (currentDate.getDate() === 1) {\n marks.push({\n value: getSliderValueFromDate(currentDate, initialSliderDate),\n label: currentDate.toLocaleString('en-US', { month: 'short' }),\n });\n }\n\n if (currentMonth < 11) {\n currentMonth++;\n } else {\n currentMonth = 0;\n currentYear++;\n }\n\n currentDate = new Date(currentYear, currentMonth, 1);\n } while (currentMonth !== initialMonth);\n\n marks.push({\n value: getSliderValueFromDate(dayjs(currentDate).subtract(1, 'day').toDate(), initialSliderDate),\n label: currentDate.toLocaleString('en-US', { month: 'short' }),\n });\n\n return marks;\n};\n","import { AUTOSIZER__COLUMN_WIDTH } from '../config/plant.config';\n\n/**\n * Get Number of Result Columns\n *\n * @param {number} width - REACT-VIRTUALIZED AutoSizer - Component width\n * @return {number} - Number of columns\n */\nexport const getNumberOfResultColumns = (width: number) => {\n const number = Math.floor(width / AUTOSIZER__COLUMN_WIDTH) || 1;\n return number > 3 ? 3 : number;\n};\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport _every from 'lodash/every';\n\nimport { RootState } from '../store';\nimport filterOptionsConfig from '../../config/filterPlants';\n\nimport mapController from '../../controllers/MapController';\n\nconst filterSelectedOptions = filterOptionsConfig.map((option) => {\n if (option.type === 'radio') {\n return {\n ...option,\n activeValues: [],\n activeRadioButton: 'All',\n };\n } else {\n return {\n ...option,\n activeValues: ['All'],\n };\n }\n});\n\nexport interface DropdownOption {\n label: string;\n esriField: string;\n esriQueryMatch: string;\n icon: string;\n options: Array;\n activeValues: Array;\n activeRadioButton?: string;\n type: string;\n}\n\nexport interface FilterState {\n filterVisible: boolean;\n filterActiveDropdowns: string;\n filterSelectedOptions: Array;\n filterDefinitionExpression: string;\n searchDefinitionExpression: string;\n tourDefinitionExpression: string;\n}\n\nconst initialState: FilterState = {\n filterVisible: false,\n filterActiveDropdowns: '',\n filterSelectedOptions: filterSelectedOptions,\n filterDefinitionExpression: '',\n searchDefinitionExpression: '',\n tourDefinitionExpression: '',\n};\n\nexport const filterSlice = createSlice({\n name: 'map',\n initialState,\n reducers: {\n setFilterVisible: (state: FilterState, action: PayloadAction) => {\n state.filterVisible = action.payload;\n },\n setFilterActiveDropdowns: (state: FilterState, action: PayloadAction) => {\n state.filterActiveDropdowns = state.filterActiveDropdowns === action.payload ? '' : action.payload;\n },\n setFilterSelectedOptions: (state: FilterState, action: PayloadAction) => {\n state.filterSelectedOptions = action.payload;\n },\n resetFilterOptions: (state: FilterState) => {\n state.filterDefinitionExpression = '';\n state.filterActiveDropdowns = '';\n state.filterSelectedOptions = filterSelectedOptions;\n\n mapController.updatePlantsLayerDefinitionExpression({\n filter: '',\n search: state.searchDefinitionExpression,\n });\n },\n setFilterActiveOptions: (state: FilterState, action: PayloadAction) => {\n state.filterSelectedOptions = [...action.payload];\n },\n setFilterDefinitionExpression: (state: FilterState, action) => {\n const filters = action.payload;\n let definitionExpression;\n\n const allDefaultFilterValuesSelected = _every(filters, ['activeRadioButton', 'All']);\n\n if (allDefaultFilterValuesSelected) {\n definitionExpression = '';\n } else {\n const definitionExpressionList: string[] = [];\n filters.forEach((filterOption: any) => {\n const { activeRadioButton, esriQueryMatch, esriField, activeValues, type } = filterOption;\n const activeSelection = activeRadioButton && activeRadioButton !== 'All';\n\n if (type === 'checkbox' && !activeValues.includes('All')) {\n const definitionExpressionPart: string[] = activeValues.map(\n (value: any) => `(${esriField} LIKE '%${value}%')`\n );\n definitionExpressionList.push(`(${definitionExpressionPart.join(' AND ')})`);\n }\n\n if (type === 'radio' && activeSelection) {\n const definitionExpressionPart: string[] =\n esriQueryMatch === 'like'\n ? activeValues.map((value: any) => `(${esriField} LIKE '%${value}%')`)\n : activeValues.map((value: any) => `(${esriField} = '${value}')`);\n definitionExpressionList.push(`(${definitionExpressionPart.join(' OR ')})`);\n }\n });\n definitionExpression = definitionExpressionList.join(' AND ');\n }\n\n state.filterDefinitionExpression = definitionExpression;\n\n mapController.updatePlantsLayerDefinitionExpression({\n search: state.searchDefinitionExpression,\n filter: definitionExpression,\n tour: state.tourDefinitionExpression,\n });\n },\n setSearchDefinitionExpression: (state: FilterState, action) => {\n state.searchDefinitionExpression = action.payload;\n\n mapController.updatePlantsLayerDefinitionExpression({\n search: action.payload,\n filter: state.filterDefinitionExpression,\n tour: state.tourDefinitionExpression,\n });\n },\n setTourDefinitionExpressionByAccession: (state: FilterState, action) => {\n state.tourDefinitionExpression = action.payload\n .map((accession: string) => `ACC_NUM_AND_QUAL IN ('${accession}')`)\n .join(' OR ');\n\n mapController.updatePlantsLayerDefinitionExpression({\n search: state.searchDefinitionExpression,\n filter: state.filterDefinitionExpression,\n tour: state.tourDefinitionExpression,\n });\n },\n },\n});\n\n// ACTIONS\nexport const {\n setFilterVisible,\n setFilterActiveDropdowns,\n setFilterSelectedOptions,\n resetFilterOptions,\n setFilterActiveOptions,\n setSearchDefinitionExpression,\n setFilterDefinitionExpression,\n setTourDefinitionExpressionByAccession,\n} = filterSlice.actions;\n\n// SELECTORS\nexport const selectMapFilterVisible = (state: RootState) => state.filterReducer.filterVisible;\nexport const selectMapFilterActiveDropdowns = (state: RootState) => state.filterReducer.filterActiveDropdowns;\nexport const $filterSelectedOptions = (state: RootState) => state.filterReducer.filterSelectedOptions;\nexport const selectMapFilterSelectedOptions = (state: RootState) => state.filterReducer.filterSelectedOptions;\nexport const $filterDefinitionExpression = (state: RootState) => state.filterReducer.filterDefinitionExpression;\nexport const $searchDefinitionExpression = (state: RootState) => state.filterReducer.searchDefinitionExpression;\nexport const tourDefinitionExpression = (state: RootState) => state.filterReducer.searchDefinitionExpression;\n\nexport default filterSlice.reducer;\n","import * as React from 'react';\nimport { SVG_CONFIG } from '../../config/config';\n\ninterface IconFilter {\n filterOn?: boolean;\n fillColor?: string;\n}\n\nconst IconFilter = (prop: IconFilter) => {\n const { filterOn, fillColor } = prop;\n\n return (\n \n Filter\n \n \n \n \n \n );\n};\n\nexport default IconFilter;\n","import React, { useEffect } from 'react';\nimport Switch from '@material-ui/core/Switch';\nimport { withStyles } from '@material-ui/core/styles';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport { useDispatch, useSelector } from 'react-redux';\n\n// Store\nimport { $allLivingRecordsCheckbox, $searchType, setAllLivingRecordsCheckbox } from '../../../store/app/appSlice';\nimport { $searchDefinitionExpression, setSearchDefinitionExpression } from '../../../store/app/filterSlice';\n\n// Config\nimport { LOCATIONS_SEARCH_LABEL } from '../../../config/plant.config';\n\n// Style\nimport './SearchPlantRecordsFilter.scss';\nimport GreenSwitch from '../../common/GreenSwitch/GreenSwitch';\n\nexport default function SearchPlantRecordsFilter() {\n const dispatch = useDispatch();\n const searchType = useSelector($searchType);\n const allLivingRecordsCheckbox = useSelector($allLivingRecordsCheckbox);\n const searchDefinitionExpression = useSelector($searchDefinitionExpression);\n\n useEffect(() => {\n if (searchType !== LOCATIONS_SEARCH_LABEL) {\n let definitionExpression = searchDefinitionExpression;\n const aliveDefinitionExpression = \"ALIVE = 'A'\";\n const aliveAndDefinitionExpression = ` AND ${aliveDefinitionExpression}`;\n const isAlive = definitionExpression.length ? aliveAndDefinitionExpression : aliveDefinitionExpression;\n\n if (allLivingRecordsCheckbox) {\n if (definitionExpression !== aliveDefinitionExpression) {\n definitionExpression += isAlive;\n }\n } else {\n definitionExpression = definitionExpression.replace(aliveAndDefinitionExpression, '');\n definitionExpression = definitionExpression.replace(aliveDefinitionExpression, '');\n }\n\n dispatch(setSearchDefinitionExpression(definitionExpression));\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [allLivingRecordsCheckbox]);\n\n return (\n
\n dispatch(setAllLivingRecordsCheckbox(!allLivingRecordsCheckbox))}\n >\n \n All Records\n \n } label={'Living Records Only'} />\n
\n \n );\n}\n","import React from 'react';\n\nimport './IconReset.scss';\n\nconst IconReset = () => (\n
\n reset\n \n
\n);\n\nexport default IconReset;\n","import * as React from 'react';\nimport { SVG_CONFIG } from '../../config/config';\n\nconst IconSearch = () => (\n \n Icon Search\n \n \n);\n\nexport default IconSearch;\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { $searchTerms, $searchType, $searchTypeAdvanced, setSearchTerms } from '../../../store/app/appSlice';\n\nimport { alphabet } from '../../../config/plant.config';\nimport { setURLPath } from '../../../utils/query.utils';\nimport { getResultKey } from '../../../utils/plant.util';\n\nimport './SearchPlantsAlphabet.scss';\n\nexport default function SearchPlantsAlphabet() {\n const dispatch = useDispatch();\n const searchTerms = useSelector($searchTerms);\n const searchType = useSelector($searchType);\n const searchTypeAdvanced = useSelector($searchTypeAdvanced);\n const searchTermsKey = getResultKey('Advanced', searchTypeAdvanced);\n const searchValue = searchTerms[searchTermsKey];\n\n const handleSearchPlantsAlphabetLetterSelection = (letter: string) => {\n dispatch(setSearchTerms({ ...searchTerms, [searchTermsKey]: letter }));\n setURLPath(searchType, searchTypeAdvanced, letter);\n };\n\n return (\n
\n {alphabet.map((letter: string, index: number) => {\n const regex = new RegExp(/[a-zA-Z]/gi);\n\n // Check if character is letter\n if (regex.test(letter)) {\n return (\n handleSearchPlantsAlphabetLetterSelection(letter)}\n >\n {letter}\n \n );\n }\n })}\n
\n );\n}\n","import React, { useContext, useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport Loader from '../../Loader';\nimport PlantSearchResults from '../searchResults/PlantSearchResults';\n\nimport mapController from '../../../controllers/MapController';\n\n// REDUX Store\nimport {\n $cardMinimized,\n $fetchAdvancedSearch,\n $mapLoaded,\n $searchTerms,\n $searchType,\n $searchTypeAdvanced,\n setFetchAdvancedSearch,\n setMinimized,\n} from '../../../store/app/appSlice';\n\n// CONTEXT Store\nimport PlantsResultsContext from '../../../store/PlantsResultsContextProvider';\n\n// Utils\nimport { getResultKey } from '../../../utils/plant.util';\nimport { queryPlants } from '../../../utils/query.utils';\n\n// Config\nimport { SEARCH_PLANT_ALPHABET_SECTIONS } from '../../../config/plant.config';\n\nexport default function SearchPlantsAdvancedResults() {\n const { plantsResults, setPlantsResults } = useContext(PlantsResultsContext);\n const dispatch = useDispatch();\n const cardMinimized = useSelector($cardMinimized);\n const searchType = useSelector($searchType);\n const searchTypeAdvanced = useSelector($searchTypeAdvanced);\n const searchTerms = useSelector($searchTerms);\n const mapLoaded = useSelector($mapLoaded);\n const fetchAdvancedSearch = useSelector($fetchAdvancedSearch);\n const [isLoading, setIsLoading] = useState(false);\n\n const searchTermsKey = getResultKey(searchType, searchTypeAdvanced);\n const searchTerm = searchTerms[searchTermsKey];\n\n // useEffect(() => {\n // return () => {\n // const { searchTerms } = store.getState().appReducer;\n // const regularAdvancedSearchReset: any = {};\n // SEARCH_PLANT_ALPHABET_EXCLUDE_SECTIONS.forEach((item) => {\n // const key = getResultKey('Advanced', item);\n // regularAdvancedSearchReset[key] = '';\n // });\n //\n // dispatch(\n // setSearchTerms({\n // ...searchTerms,\n // ...regularAdvancedSearchReset,\n // })\n // );\n // };\n // }, []);\n\n /**\n * Query plants for Advanced Search when advanced search type IS ALPHABET\n */\n useEffect(() => {\n if (\n SEARCH_PLANT_ALPHABET_SECTIONS.includes(searchTypeAdvanced) &&\n searchTerm &&\n searchTypeAdvanced &&\n plantsResults[searchTypeAdvanced]?.searchTerm !== searchTerm\n ) {\n setIsLoading(true);\n if (cardMinimized) dispatch(setMinimized(false));\n\n mapController.queryScientificCommonByLetter(searchTerm, searchTypeAdvanced).then((queryResults: any) => {\n const resultsAttributes = queryResults.features.map((item: { attributes: any }) => item.attributes);\n\n setPlantsResults({\n ...plantsResults,\n [searchTypeAdvanced]: {\n results: resultsAttributes,\n searchTerm: searchTerm,\n },\n });\n setIsLoading(false);\n });\n }\n }, [searchTypeAdvanced, searchTerm]);\n\n /**\n * Query plants for Advanced Search when advanced search type IS NOT ALPHABET\n */\n useEffect(() => {\n if (\n !SEARCH_PLANT_ALPHABET_SECTIONS.includes(searchTypeAdvanced) &&\n mapLoaded &&\n searchTerm.length > 2 &&\n fetchAdvancedSearch &&\n plantsResults[searchTypeAdvanced]?.searchTerm !== searchTerm\n ) {\n setIsLoading(true);\n if (cardMinimized) dispatch(setMinimized(false));\n\n queryPlants(searchTerm, searchType, searchTypeAdvanced).then(({ queryResults }) => {\n const resultsAttributes = queryResults.features.map((item: { attributes: any }) => item.attributes);\n\n setPlantsResults({\n ...plantsResults,\n [searchTypeAdvanced]: {\n results: resultsAttributes,\n searchTerm: searchTerm,\n },\n });\n setIsLoading(false);\n dispatch(setFetchAdvancedSearch(false));\n });\n }\n }, [mapLoaded, fetchAdvancedSearch]);\n\n return (\n
\n {isLoading && }\n\n {!isLoading && (\n \n )}\n
\n );\n}\n","import React from 'react';\n\nimport './PlantSearchFindPlantInGarden.scss';\n\nexport const PlantSearchFindPlantInGarden = () => {\n return (\n
\n

Find a Plant in the Garden

\n
\n Search for a plant by name by entering part or all of plant name\n
\n
\n );\n};\n","import React, { createContext, useState } from 'react';\n\ntype PlantsResultsContextType = {\n plantsResults?: any;\n setPlantsResults: (plantsResults: any) => void;\n};\n\nconst PlantsResultsContext = createContext({\n plantsResults: {},\n setPlantsResults: (plantsResults: any) => {},\n});\n\nexport const PlantsResultsContextProvider = ({ children }: { children: any }) => {\n const [plantsResults, setPlantResults] = useState({});\n\n return (\n \n {children}\n \n );\n};\n\nexport default PlantsResultsContext;\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport FormControl from '@material-ui/core/FormControl';\nimport NativeSelect from '@material-ui/core/NativeSelect';\n\n// Store\nimport { $searchTerms, $searchType, $searchTypeAdvanced, setSearchTypeAdvanced } from '../../../store/app/appSlice';\nimport { SEARCH_OPTIONS_ADVANCED } from '../../../config/plant.config';\n\nimport './AdvancedFiltersOptions.scss';\nimport { setURLPath } from '../../../utils/query.utils';\nimport { getResultKey } from '../../../utils/plant.util';\n\nexport default function AdvancedFiltersOptions() {\n const dispatch = useDispatch();\n const searchTerms = useSelector($searchTerms);\n const searchType = useSelector($searchType);\n const searchTypeAdvanced = useSelector($searchTypeAdvanced);\n\n const handleAdvancedFiltersOptionsChange = (searchTypeAdvancedLocal: string) => {\n const searchTermsKey = getResultKey(searchType, searchTypeAdvancedLocal);\n const searchTerm = searchTerms[searchTermsKey];\n dispatch(setSearchTypeAdvanced(searchTypeAdvancedLocal));\n setURLPath(searchType, searchTypeAdvancedLocal, searchTerm);\n };\n\n return (\n
\n \n handleAdvancedFiltersOptionsChange(event.target.value)}\n name='Search Type'\n inputProps={{ 'aria-label': 'Advanced Search Type' }}\n >\n {SEARCH_OPTIONS_ADVANCED.map(({ label, esriField }) => {\n return (\n \n );\n })}\n \n \n
\n );\n}\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport {\n $searchTerms,\n $searchType,\n $searchTypeAdvanced,\n setFetchAdvancedSearch,\n setSearchTerms,\n} from '../../../store/app/appSlice';\nimport IconSearch from '../../icons/IconSearch';\nimport AdvancedFiltersOptions from '../../plants/AdvancedFiltersOptions/AdvancedFiltersOptions';\n\nimport { setURLPath } from '../../../utils/query.utils';\nimport { getResultKey } from '../../../utils/plant.util';\n\nimport { SEARCH_PLANT_ALPHABET_SECTIONS } from '../../../config/plant.config';\n\nimport './SearchPlantsAdvancedFilters.scss';\n\nexport default function SearchPlantsAdvancedFilters() {\n const dispatch = useDispatch();\n const searchTerms = useSelector($searchTerms);\n const searchType = useSelector($searchType);\n const searchTypeAdvanced = useSelector($searchTypeAdvanced);\n\n const searchTermsKey = getResultKey('Advanced', searchTypeAdvanced);\n const searchTerm = searchTerms[searchTermsKey];\n\n function handleSearchPlantInputKeyDown(evt: React.KeyboardEvent) {\n if (evt.key === 'Enter') {\n handleFetchAdvancedSearch();\n }\n }\n\n function handleFetchAdvancedSearch() {\n dispatch(setFetchAdvancedSearch(true));\n setURLPath(searchType, searchTypeAdvanced, searchTerm);\n }\n\n return (\n
\n {!SEARCH_PLANT_ALPHABET_SECTIONS.includes(searchTypeAdvanced) ? (\n
\n \n dispatch(\n setSearchTerms({\n ...searchTerms,\n [searchTermsKey]: evt.target.value,\n })\n )\n }\n onKeyUp={(evt) => handleSearchPlantInputKeyDown(evt)}\n onFocus={() => dispatch(setFetchAdvancedSearch(false))}\n />\n \n
\n ) : (\n
\n Select Letter from List\n
\n )}\n\n \n
\n );\n}\n","/**\n * Handle Multiple Images from API\n *\n * @param {Object[]} data - List of images\n * @param {number[]} nameNums - List of NameNums\n * @return {{}} - All Images organized by NameNum\n */\nexport function handleMultipleImages(data: any[], nameNums: number[]) {\n const images: any = {};\n const PLANT_NAME_NUM_KEY = 'NameNum';\n\n nameNums.forEach((nameNum: number) => {\n images[nameNum] = {\n items: [],\n cover: undefined,\n };\n });\n\n data.forEach((image) => {\n const plantKeywords = image.displayAttributes.find((i: any) => i.label === 'Keywords').value.split(',');\n\n const nameNumKeyword = plantKeywords\n .find((i: string) => {\n return i.includes(PLANT_NAME_NUM_KEY) || i.includes(PLANT_NAME_NUM_KEY.toLowerCase());\n })\n .trim();\n const plantNameNum = nameNumKeyword.toLowerCase().replace(PLANT_NAME_NUM_KEY.toLowerCase(), '');\n\n const isCoverImage = plantKeywords.some((item: string) => item.toLowerCase().includes('titleimage'));\n if (isCoverImage || !images[plantNameNum].cover) {\n images[plantNameNum].cover = { id: image.id, previewUrl: image.previewUrl, thumbnailUrl: image.thumbnailUrl };\n }\n images[plantNameNum].items.push({ id: image.id, previewUrl: image.previewUrl, thumbnailUrl: image.thumbnailUrl });\n });\n\n return images;\n}\n","import _uniq from 'lodash/uniq';\n\nimport store from '../store/store';\nimport { setApiPlantImages } from '../store/app/appSlice';\nimport { DisplayAttribute, PlantData } from '../interfaces/plantData';\nimport { handleMultipleImages } from './images.util';\n\n/**\n * Get result key\n *\n * @param {string} searchType\n * @param {string} esriField\n */\nexport const getResultKey = (searchType: string, esriField?: string) => {\n return searchType === 'Advanced' ? `Advanced__${esriField}` : searchType;\n};\n\n/**\n * Get Plant Images. Call Asset Bank API to get plant images links\n *\n * @param {number | []} NAME_NUM - Plant name number\n */\nexport async function getPlantImages(NAME_NUM?: number | string[]) {\n const { apiPlantImages } = store.getState().appReducer;\n\n try {\n const IMAGE_API =\n process.env.NODE_ENV === 'production'\n ? process.env.REACT_APP_ASSET_BANK_URL_PROD\n : process.env.REACT_APP_ASSET_BANK_URL_DEV;\n const apiURL__getPlantImages = `${IMAGE_API}/api/getPlantImages?NAME_NUMS=${NAME_NUM}`;\n\n const updatedApiPlantImagesState = await fetch(apiURL__getPlantImages)\n .then((res) => res.json())\n .then(({ data, NAME_NUMS }) => {\n const listOfNameNums =\n typeof NAME_NUM === 'number'\n ? [parseInt(NAME_NUMS)]\n : NAME_NUMS.split(',').map((item: string) => parseInt(item));\n\n return {\n NAME_NUMS: _uniq([...listOfNameNums, ...apiPlantImages.NAME_NUMS]).sort((a, b) => a - b),\n images: {\n ...apiPlantImages.images,\n ...handleMultipleImages(data, listOfNameNums),\n },\n };\n });\n\n store.dispatch(setApiPlantImages(updatedApiPlantImagesState));\n\n return updatedApiPlantImagesState;\n } catch (e) {\n console.log('getPlantImages()', e);\n }\n}\n\n/**\n * Check if Plant image is Title image\n *\n * @param {DisplayAttribute} displayAttribute\n * @return {boolean} - TRUE if image is Title/Cover image\n */\nexport const isPlantImageTitleImage = (displayAttribute: DisplayAttribute) => {\n return displayAttribute.label === 'Keywords' && displayAttribute.value.toLowerCase().includes('titleimage');\n};\n\n/**\n * Get Clean CATALOG_DESC\n *\n * @param {string} CATALOG_DESC - Plant catalog description\n * @return {string} - Clean string\n */\nexport const getClean__CATALOG_DESC = (CATALOG_DESC: string) => {\n return CATALOG_DESC.replace(/û/g, '');\n};\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport _uniq from 'lodash/uniq';\nimport _concat from 'lodash/concat';\nimport _pullAll from 'lodash/pullAll';\n\nimport mapController from '../../controllers/MapController';\n\nimport { RootState } from '../store';\nimport { adaConfig, pointsConfig } from '../../config/mapLayers';\n\nexport interface LayerState {\n layersVisible: boolean;\n activeLayerDropdown: string;\n layersConfig: Array;\n activeLayerToggles: Array;\n adaSublayersTitles: Array;\n currentMapViewScale: number;\n}\n\nconst initialState: LayerState = {\n layersVisible: false,\n activeLayerDropdown: '',\n layersConfig: [...pointsConfig, ...adaConfig],\n activeLayerToggles: ['art', 'plantData'],\n adaSublayersTitles: [],\n currentMapViewScale: 0,\n};\n\nexport const layerSlice = createSlice({\n name: 'map',\n initialState,\n reducers: {\n setLayersVisible: (state: LayerState, action: PayloadAction) => {\n state.layersVisible = action.payload;\n },\n setLayersConfig: (state: LayerState, action: PayloadAction) => {\n state.layersConfig = action.payload;\n },\n setActiveLayersDropdown: (state: LayerState, action: PayloadAction) => {\n state.activeLayerDropdown = state.activeLayerDropdown === action.payload ? '' : action.payload;\n },\n setActiveLayers: (state: LayerState, action: any) => {\n const layerID = action.payload;\n const allToggles = [...state.activeLayerToggles];\n let allIDs;\n\n if (allToggles.includes(layerID)) {\n const index = allToggles.indexOf(layerID);\n allToggles.splice(index, 1);\n } else {\n allToggles.push(layerID);\n }\n\n if (state.adaSublayersTitles.includes(layerID)) {\n const toggles = [...state.activeLayerToggles];\n mapController.toggleADASublayers(layerID, toggles, state.adaSublayersTitles);\n } else {\n switch (layerID) {\n case 'plantData':\n mapController.togglePlantData();\n break;\n case 'art':\n mapController.toggleArtBasemap();\n break;\n case 'locationCodes':\n mapController.toggleLocationCodes();\n break;\n default:\n const allToggles = [...state.activeLayerToggles];\n allIDs = allToggles.includes(layerID)\n ? allToggles.filter((id) => layerID !== id)\n : [...allToggles, layerID];\n\n mapController.togglePointsOfInterest(allIDs);\n break;\n }\n }\n\n state.activeLayerToggles = allToggles;\n },\n setToggleAllLayers: (state: LayerState, action: PayloadAction) => {\n state.activeLayerToggles = action.payload;\n\n if (action.payload.length) {\n mapController.togglePointsOfInterest([...state.activeLayerToggles]);\n mapController.toggleAllMapLayers(true);\n } else {\n mapController.togglePointsOfInterest([...state.activeLayerToggles]);\n mapController.toggleAllMapLayers(false);\n }\n },\n setAllOptionalLayersVisibility: (state: LayerState, action: any) => {\n if (action.payload.visible) {\n state.activeLayerToggles = _uniq(_concat(state.activeLayerToggles, action.payload.layers));\n } else {\n state.activeLayerToggles = _pullAll(state.activeLayerToggles, action.payload.layers);\n }\n\n if (action.payload.id !== 'Points of Interest') {\n mapController.toggleAllADASublayers(action.payload.visible);\n } else {\n mapController.togglePointsOfInterest(state.activeLayerToggles);\n }\n },\n setAdaSublayersTitles: (state: LayerState, action: PayloadAction) => {\n state.adaSublayersTitles = action.payload;\n },\n setCurrentMapViewScale: (state: LayerState, action: PayloadAction) => {\n state.currentMapViewScale = action.payload;\n },\n },\n});\n\n// ACTIONS\nexport const {\n setToggleAllLayers,\n setLayersVisible,\n setActiveLayers,\n setActiveLayersDropdown,\n setLayersConfig,\n setAllOptionalLayersVisibility,\n setAdaSublayersTitles,\n setCurrentMapViewScale,\n} = layerSlice.actions;\n\n// SELECTORS\nexport const layersVisible = (state: RootState) => state.layerReducer.layersVisible;\nexport const activeLayerDropdown = (state: RootState) => state.layerReducer.activeLayerDropdown;\nexport const layersConfig = (state: RootState) => state.layerReducer.layersConfig;\nexport const activeLayerToggles = (state: RootState) => state.layerReducer.activeLayerToggles;\nexport const $adaSublayersTitles = (state: RootState) => state.layerReducer.adaSublayersTitles;\nexport const $currentMapViewScale = (state: RootState) => state.layerReducer.currentMapViewScale;\n\nexport default layerSlice.reducer;\n","import * as React from 'react';\nimport { SVG_CONFIG } from '../../config/config';\n\ninterface ChevronProps {\n width?: number;\n height?: number;\n fill?: string;\n rotate?: number;\n}\n\nconst IconChevronUp = ({ width = 35, height = 35, fill, rotate }: ChevronProps) => (\n \n \n \n);\n\nexport default IconChevronUp;\n","import { getPointOfInterestPopupTemplate } from './popup/popup.util';\n\nexport const BASE_URL = process.env.REACT_APP_BASE_URL || '';\n\nexport const PLANT_ID_FIELD = 'NAME';\n\n// COLOR\nexport const COLOR_PRIMARY = '#2ec16b';\n\n// REST SERVICES\nconst GIS_REST_SERVICES = 'https://nybg-gispt.nybg.org/server/rest/services';\n\n// LAYERS URL\nexport const PLANT_DATA_LAYER_URL = GIS_REST_SERVICES + '/PlantTracker/Plant_Center_Production_PublicView/MapServer';\nexport const GARDEN_LOCATIONS_LAYER_URL = GIS_REST_SERVICES + '/PlantTracker/GardenLocations/MapServer/0';\nexport const ART_LAYER_1_URL = GIS_REST_SERVICES + '/Hosted/ArtisticBasemapTiles/MapServer';\n// export const ART_LAYER_2_URL = GIS_REST_SERVICES + '/GIS_Basemap_Layers/MapServer';\nexport const ART_LAYER_2_URL = GIS_REST_SERVICES + '/PlantTracker/Plant_Tracker_GIS_Basemap_Tiled/MapServer';\nexport const ADA_URL = GIS_REST_SERVICES + '/PlantTracker/ADA_Layers_PublicView/MapServer';\nexport const INTERACTIVE_FEATURE_LAYER_URL =\n GIS_REST_SERVICES + '/PlantTracker/Interactive_Map_Features_PublicView/MapServer/0';\nexport const LOCATION_CODES_MAP_IMAGE_LAYER_URL = GIS_REST_SERVICES + '/PlantTracker/LocationCodes/MapServer';\n\nexport const LOCATIONS_URL = PLANT_DATA_LAYER_URL + '/0';\nexport const PLANT_NAMES_DATA_URL = PLANT_DATA_LAYER_URL + '/1';\nexport const TOURS_URL = PLANT_DATA_LAYER_URL + '/2';\n\n// MAP CONFIG\nexport const ZOOM_DEFAULT = 16;\nexport const ZOOM_MOBILE = 14;\nexport const MAP_ZOOM = window.innerWidth > 475 ? ZOOM_DEFAULT : ZOOM_MOBILE;\n\nexport const MAP_BASEMAP = 'gray-vector';\nexport const GRAY_VECTOR_PORTALID = '8a2cba3b0ebf4140b7c0dc5ee149549a';\nexport const MAP_CENTER = {\n latitude: 40.86143917224365,\n longitude: -73.87849534964407,\n};\n\nexport const visibilityScale = 3375;\nexport const LABELS_CANOPIES_VISIBILITY_MIN_SCALE = 150;\n\nexport const INITIAL_DEFINITION_EXPRESSION = \"ALIVE = 'A'\";\nexport const plantLayerDefaultDefinitionExpression = INITIAL_DEFINITION_EXPRESSION;\n// export const plantLayerDefaultDefinitionExpression = '';\n\nexport const PLANTS_FEATURE_LAYER_LABELING_INFO = {\n minScale: 1000,\n labelExpressionInfo: { expression: '$feature.NAME' },\n symbol: {\n type: 'text', // autocasts as new TextSymbol() - Plant Labels\n font: {\n // autocasts as new Font()\n family: 'Helvetica',\n size: 12,\n },\n color: 'black',\n verticalAlignment: 'middle',\n haloSize: 0.4,\n haloColor: '[255,255,255,0.1]',\n },\n};\n\nexport const PLANTS_FEATURE_LAYER_CANOPY_RENDERER = {\n type: 'simple',\n symbol: {\n type: 'simple-marker',\n color: 'rgba(255,255,255,0.05)',\n outline: {\n color: '#98e600',\n width: 1,\n },\n },\n visualVariables: [\n {\n type: 'size',\n field: 'CURRENT_SPREAD', // tree height\n valueUnit: 'feet',\n },\n ],\n};\n\nexport const PLANT_DATA_LAYER = {\n url: `${PLANT_DATA_LAYER_URL}/0`,\n definitionExpression: plantLayerDefaultDefinitionExpression,\n};\n\nexport const SVG_CONFIG = {\n fill: '#5E5E5E',\n};\n\nexport const ART_LAYER_1 = {\n url: ART_LAYER_1_URL,\n id: 'art',\n};\n\nexport const ART_LAYER_2 = {\n url: ART_LAYER_2_URL,\n imageFormat: 'png8',\n id: 'art1',\n sublayers: [\n { id: 8 }, // Green Areas\n { id: 2 }, // Boundary\n {\n id: 5,\n labelsVisible: true,\n labelingInfo: [\n {\n labelExpression: '[Name]',\n labelPlacement: 'always-horizontal',\n symbol: {\n type: 'text', // autocasts as new TextSymbol() - Building Labels\n color: 'black',\n haloSize: 0.4,\n haloColor: '[255, 255, 255, 0.1]',\n // verticalAlignment: 'middle',\n font: {\n size: 13,\n weight: 'bold',\n family: 'Helvetica',\n },\n },\n },\n ],\n }, // Structures\n // { id: 6 },\n // { id: 7 },\n { id: 9 }, // Paths\n { id: 10 }, // Water\n { id: 3 }, // Conservatory Indoors\n { id: 11 }, // Rocks\n ],\n // sublayers: [2, 5, 6, 7, 8, 9, 10].map((sublayer) => ({ id: sublayer })),\n // minScale: visibilityScale,\n};\n\nexport const ADA_MAP_IMAGE_LAYER = {\n url: ADA_URL,\n id: 'ada',\n visible: true,\n minScale: visibilityScale,\n};\n\nexport const INTERACTIVE_FEATURE_LAYER = {\n url: INTERACTIVE_FEATURE_LAYER_URL,\n id: 'interactiveFeatures',\n visible: true,\n definitionExpression: \"Symbol = 'Show None'\",\n popupTemplate: getPointOfInterestPopupTemplate(),\n};\n\nexport const LOCATION_CODES_MAP_IMAGE_LAYER = {\n url: LOCATION_CODES_MAP_IMAGE_LAYER_URL,\n id: 'locationCodes',\n visible: false,\n};\n\nexport const GARDEN_LOCATIONS_DEFAULT_DEFINITION_EXPRESSION = \"GardenCode = ''\";\nexport const GARDEN_LOCATIONS_FEATURE_LAYER_RENDER = {\n type: 'simple',\n symbol: {\n type: 'simple-fill',\n color: [175, 37, 89, 0.5],\n outline: {\n color: [0, 0, 0, 0.75],\n width: 0.75,\n },\n },\n};\nexport const GARDEN_LOCATIONS_FEATURE_LAYER = {\n id: 'Garden_Locations',\n url: GARDEN_LOCATIONS_LAYER_URL,\n definitionExpression: GARDEN_LOCATIONS_DEFAULT_DEFINITION_EXPRESSION,\n renderer: GARDEN_LOCATIONS_FEATURE_LAYER_RENDER,\n};\n\nexport const isMobileDevice = matchMedia('(hover: none)').matches;\n\n// Fonts\nexport const NYBG_GOTHIC_FONT = \"'NY Botanical Gothic Extrabold Regular', , 'Times New Roman', Times, serif\";\nexport const NYBG_GT_TEXT_FONT = \"'GT Super Text Regular', 'GT Super Text Regular', sans-serif\";\n","import _difference from 'lodash/difference';\n\n// REDUX Store\nimport store from '../store/store';\nimport {\n setStopsByAccession,\n setTourStep,\n TourSelected,\n setTourStops as reduxSetTourStops,\n} from '../store/app/tourSlice';\nimport { setTourDefinitionExpressionByAccession } from '../store/app/filterSlice';\nimport { appHistory } from '../store/appHistory';\n\nimport mapController from '../controllers/MapController';\nimport { encodePathValue, MAP_LINK__TOURS } from './path.util';\nimport { getPlantImages } from './plant.util';\n\nexport function resetTours() {\n store.dispatch(setTourStep('ViewTours'));\n store.dispatch(setTourDefinitionExpressionByAccession([]));\n mapController.resetTourStopsGraphicsLayer();\n}\n\nexport function updateTourPathURL(tourID?: number, tourStop = 1) {\n const { Tour_Name } = store.getState().tourReducer.tourSelected;\n appHistory.push(\n `${MAP_LINK__TOURS}?tourID=${tourID}&tourStop=${tourStop}&tourName=${encodePathValue(Tour_Name || '')}`\n );\n}\n\n/**\n * Set Tour Stops\n * @param {Array} accessionIDs - List of Accession IDs\n */\nconst setTourStops = async (accessionIDs: any) => {\n const { apiPlantImages } = store.getState().appReducer;\n const imagesInRedux = Object.keys(apiPlantImages.images);\n\n const results = await mapController.getTourStopsPlantData(accessionIDs);\n const tourPlants__NAME_NUM = results.map((result: { attributes: { NAME_NUM: number } }) => {\n return result.attributes.NAME_NUM.toString();\n });\n\n const nameNumDIFF = _difference(tourPlants__NAME_NUM, imagesInRedux);\n if (nameNumDIFF.length > 0) {\n await getPlantImages(nameNumDIFF);\n }\n\n mapController.setTourStopsGraphicsLayer(results);\n};\n\n/**\n * Start Curated Tour\n * @param {number} selectedTour - Selected Tour ID\n */\nexport const startCuratedTour = async (selectedTour: number) => {\n const accessionIDs = await mapController.queryAccessionsByTourID(selectedTour);\n\n if (accessionIDs.length) {\n setTourStops(accessionIDs);\n store.dispatch(setStopsByAccession(accessionIDs));\n store.dispatch(setTourStep('TourStopsOpen'));\n }\n};\n\n/**\n * Get Tour Selected\n * @param {object} toursAll - All tours\n * @param {number} tourID - Tour ID\n * @return {object} - Tour Selected\n */\nexport function getTourSelected(toursAll: any, tourID: number) {\n return toursAll.find((item: TourSelected) => item.Tour_ID === tourID);\n}\n\n/**\n * Get And Set in REDUX Tour Stops\n */\nexport const getAndSetTourStops = async () => {\n const { stopsByAccession } = store.getState().tourReducer;\n const plantStops = await mapController.queryPlantsByAccession(stopsByAccession);\n\n if (plantStops) {\n store.dispatch(reduxSetTourStops(plantStops));\n }\n};\n","import { createTheme } from '@material-ui/core';\nimport { COLOR_PRIMARY, NYBG_GOTHIC_FONT, NYBG_GT_TEXT_FONT } from '../config/config';\n\nexport const theme = createTheme({\n palette: {\n primary: {\n main: COLOR_PRIMARY,\n },\n secondary: {\n main: '#c8b500',\n },\n },\n overrides: {\n MuiButtonBase: {\n root: {\n fontFamily: NYBG_GT_TEXT_FONT,\n },\n },\n MuiSwitch: {\n switchBase: {\n color: COLOR_PRIMARY,\n '&$checked': {\n color: COLOR_PRIMARY,\n },\n '&$checked + $track': {\n backgroundColor: COLOR_PRIMARY,\n },\n },\n colorPrimary: {\n '&$checked': {\n color: COLOR_PRIMARY,\n '& + $track': {\n backgroundColor: COLOR_PRIMARY,\n },\n },\n },\n },\n MuiFormControlLabel: {\n label: {\n fontFamily: NYBG_GT_TEXT_FONT,\n },\n },\n MuiInput: {\n input: {\n fontFamily: NYBG_GT_TEXT_FONT,\n },\n },\n MuiTypography: {\n h1: {\n fontFamily: NYBG_GOTHIC_FONT,\n textTransform: 'uppercase',\n },\n h2: {\n fontFamily: NYBG_GOTHIC_FONT,\n textTransform: 'uppercase',\n },\n h3: {\n fontFamily: NYBG_GOTHIC_FONT,\n textTransform: 'uppercase',\n },\n h4: {\n fontFamily: NYBG_GOTHIC_FONT,\n textTransform: 'uppercase',\n },\n h5: {\n fontFamily: NYBG_GOTHIC_FONT,\n textTransform: 'uppercase',\n },\n h6: {\n fontFamily: NYBG_GOTHIC_FONT,\n textTransform: 'uppercase',\n },\n body1: {\n fontFamily: NYBG_GT_TEXT_FONT,\n },\n body2: {\n fontFamily: NYBG_GT_TEXT_FONT,\n },\n subtitle1: {\n fontFamily: NYBG_GT_TEXT_FONT,\n },\n subtitle2: {\n fontFamily: NYBG_GT_TEXT_FONT,\n },\n caption: {\n fontFamily: NYBG_GT_TEXT_FONT,\n },\n },\n },\n});\n","import React from 'react';\n\nimport './page.scss';\n\nexport function PageMainTitle(props: { title: string }) {\n return

{props.title}

;\n}\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { BASE_URL } from '../../config/config';\nimport { PageMainTitle } from '../page/PageMainTitle';\n\nimport './home.scss';\n\nconst CONTENT_RIGHT_ALIGNED = false;\n\nfunction Home() {\n return (\n
\n
\n
\n
\n \n

\n Plant Tracker is the online catalog of the Garden’s living collections. Use it to find plants and navigate\n your way around the 250-acre landscape, get plant information, view photographs, and take curated tours.\n

\n
\n \n
\n
\n
\n
\n
\n );\n}\n\nexport default Home;\n","import React from 'react';\n\nconst IconFacebook = () => {\n return (\n \n Facebook\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default IconFacebook;\n","import * as React from 'react';\n\nconst IconX = (props: any) => (\n \n X\n \n \n \n);\nexport default IconX;\n","import React from 'react';\n\nconst IconInstagram = () => {\n return (\n \n Instagram\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default IconInstagram;\n","import React from 'react';\n\nconst IconGmail = () => {\n return (\n \n Gmail\n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default IconGmail;\n","import React from 'react';\n\nimport { setGAShareEvent } from '../../utils/googleAnalytics';\n\nimport IconFacebook from '../icons/IconFacebook';\nimport IconX from '../icons/IconX';\nimport IconInstagram from '../icons/IconInstagram';\nimport IconGmail from '../icons/IconGmail';\n\nimport '../../styles/css/share.scss';\n\n// import shareIcon from '../../styles/images/shareWidget/copyLink.svg';\n\nconst Share = () => {\n const popupDimensions = 'toolbar=0,status=0,height=650,width=450';\n\n const shareTwitter = (): void => {\n window.open(`https://twitter.com/intent/tweet?url=${window.location.href}`, 'Twitter', popupDimensions);\n };\n\n const shareFacebook = (): void => {\n window.open(`https://www.facebook.com/sharer.php?u=${window.location.href}`, 'Facebook', popupDimensions);\n };\n\n return (\n
\n

Share with:

\n
\n {\n // setGAShareEvent('facebook');\n shareFacebook();\n }}\n >\n \n \n {\n // setGAShareEvent('twitter');\n shareTwitter();\n }}\n >\n \n \n {\n // setGAShareEvent('instagram');\n window.open('https://www.instagram.com/nybg/');\n }}\n >\n \n \n\n {\n // setGAShareEvent('gmail');\n window.open(\n `https://mail.google.com/mail/u/0/?view=cm&fs=1&subject=Plant%20Tracker&body=Visit ${window.location.href}`\n );\n }}\n >\n \n \n\n {/* */}\n
\n
\n );\n};\n\nexport default Share;\n","import * as React from 'react';\nimport { SVG_CONFIG } from '../../config/config';\n\nfunction IconShare({ width = 35, height = 35 }) {\n return (\n \n \n \n );\n}\n\nexport default IconShare;\n","import React from 'react';\n\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectShareModalActive, setShareModalActive } from '../../store/app/appSlice';\n\nimport Modal from '../modal/Modal';\nimport Share from './Share';\nimport IconShare from '../icons/IconShare';\n\nconst ShareWidget = () => {\n const dispatch = useDispatch();\n const shareModalActive = useSelector(selectShareModalActive);\n\n return (\n <>\n \n {shareModalActive && (\n dispatch(setShareModalActive(!shareModalActive))}\n content={}\n />\n )}\n \n );\n};\n\nexport default ShareWidget;\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport { useDispatch } from 'react-redux';\nimport { setMobileMenuOpen } from '../../store/app/appSlice';\n\nimport { BASE_URL } from '../../config/config';\nimport NYBGLogo from '../../styles/images/NYBGLogo.png';\nimport LogoSVG from '../../images/logo';\nimport NYBG_Logo_Black_RGB from '../../images/NYBG_Logo_Black_RGB.svg';\n\nconst HeaderLogoSection = () => {\n const dispatch = useDispatch();\n\n return (\n
\n dispatch(setMobileMenuOpen(false))}\n >\n NYBG logo\n \n dispatch(setMobileMenuOpen(false))}>\n PLANT TRACKER\n \n
\n );\n};\n\nexport default HeaderLogoSection;\n","interface SubOption {\n url: string,\n menuTitle: string\n}\ninterface MenuOption {\n url: string,\n menuTitle: string,\n subOptions: Array\n}\n\nexport const menuOptions: Array = [\n {\n url: 'https://www.nybg.org/join-support/',\n menuTitle: 'Join & Support',\n subOptions: [],\n },\n {\n url: 'https://www.nybg.org/about/privacy-policy/',\n menuTitle: 'Privacy Policy',\n subOptions: [],\n },\n];\n","import * as React from 'react';\nimport { SVG_CONFIG } from '../../config/config';\n\nfunction IconBurgerMenu({ fill }: { fill?: string }) {\n return (\n \n \n \n \n \n );\n}\n\nexport default IconBurgerMenu;\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { selectMobileMenuOpen, setMobileMenuOpen } from '../../store/app/appSlice';\n\nimport IconClose from '../icons/IconClose';\nimport IconBurgerMenu from '../icons/IconBurgerMenu';\n\nexport const HeaderMenuButton = () => {\n const dispatch = useDispatch();\n const mobileMenuOpen = useSelector(selectMobileMenuOpen);\n\n return (\n \n );\n};\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { setModalContent } from '../../store/app/modalSlice';\nimport { selectMobileMenuOpen, setCardContent, setMobileMenuOpen, setMinimized } from '../../store/app/appSlice';\n\nimport { BASE_URL } from '../../config/config';\nimport { menuOptions } from '../../config/menu';\nimport { HeaderMenuButton } from './HeaderMenuButton';\nimport IconChevronUp from '../icons/IconChevronUp';\nimport mapController from '../../controllers/MapController';\n\nconst HeaderMenu = () => {\n const dispatch = useDispatch();\n const mobileMenuOpen = useSelector(selectMobileMenuOpen);\n\n const resetMap = () => {\n mapController.resetMapGraphics();\n };\n\n return (\n \n );\n};\n\nexport default HeaderMenu;\n","import React, { useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useLocation } from 'react-router-dom';\nimport { Helmet } from 'react-helmet-async';\n\nimport {\n decodePathValue,\n MAP_LINK__COMMON_NAME,\n MAP_LINK__GENUS,\n MAP_LINK__LOCATION,\n MAP_LINK__SPECIES,\n MAP_LINK__TOURS,\n PLANTS_LINK__ACCESSION,\n PLANTS_LINK__SPECIES,\n} from '../../utils/path.util';\n\nimport { $selectedAccession } from '../../store/app/appSlice';\nimport { $toursAll, $tourSelected } from '../../store/app/tourSlice';\nimport { $modalContent } from '../../store/app/modalSlice';\n\nconst WEBSITE_NAME = process.env.REACT_APP_WEBSITE_SHORT_NAME;\n\nexport function SEO() {\n const location = useLocation();\n const toursAll = useSelector($toursAll);\n const tourSelected = useSelector($tourSelected);\n const selectedAccession = useSelector($selectedAccession);\n const modalContent = useSelector($modalContent);\n const [label, setLabel] = useState('');\n const [type, setType] = useState('');\n\n useEffect(() => {\n if (location.pathname.includes(MAP_LINK__GENUS)) {\n setLabel(decodePathValue(location.pathname.split(MAP_LINK__GENUS)[1]));\n setType('Genus');\n } else if (location.pathname.includes(MAP_LINK__SPECIES)) {\n setLabel(decodePathValue(location.pathname.split(MAP_LINK__SPECIES)[1]));\n setType('Species');\n } else if (location.pathname.includes(MAP_LINK__LOCATION)) {\n setLabel(decodePathValue(location.pathname.split(MAP_LINK__LOCATION)[1]));\n setType('Location');\n } else if (location.pathname.includes(MAP_LINK__COMMON_NAME)) {\n setLabel(decodePathValue(location.pathname.split(MAP_LINK__COMMON_NAME)[1]));\n setType('Common Name');\n } else if (location.pathname.includes(PLANTS_LINK__SPECIES)) {\n setLabel(decodePathValue(location.pathname.split(PLANTS_LINK__SPECIES)[1]));\n setType('Species');\n } else if (location.pathname.includes(PLANTS_LINK__ACCESSION)) {\n setLabel(selectedAccession.attributes.ACC_NUM_AND_QUAL);\n setType('Accession');\n } else if (location.pathname.includes(MAP_LINK__TOURS)) {\n setLabel(tourSelected?.Tour_Name || '');\n setType('Tour');\n } else {\n setLabel('');\n }\n }, [location.pathname, selectedAccession.attributes.ACC_NUM_AND_QUAL, toursAll, tourSelected, modalContent]);\n\n return (\n \n {label.length > 0 ? (\n \n {label} - {type} | {WEBSITE_NAME}\n \n ) : (\n {WEBSITE_NAME}\n )}\n \n \n );\n}\n","import React from 'react';\n\nimport ShareWidget from '../share/ShareWidget';\nimport HeaderLogoSection from './HeaderLogoSection';\nimport HeaderMenu from './HeaderMenu';\n\nimport '../../styles/css/header.scss';\nimport { SEO } from '../seo/SEO';\n\nfunction Header() {\n return (\n \n );\n}\n\nexport default Header;\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useParams, Link } from 'react-router-dom';\n\nimport mapController from '../../controllers/MapController';\n\nimport { setMinimized, setCardContent } from '../../store/app/appSlice';\n\nimport { RootState } from '../../store/store';\n\nimport { BASE_URL } from '../../config/config';\nimport { getPath } from '../../utils/path.util';\n\nconst SpecificFamily = () => {\n const dispatch = useDispatch();\n const { value: family } = useParams();\n const cardMinimized = useSelector((state: RootState) => state.appReducer.cardMinimized);\n\n const [genera, setGenera] = useState([]);\n const [loading, setLoading] = useState(true);\n\n const getAndSetResults = async () => {\n const generaResults: Array = await mapController.queryGeneraByFamily(family);\n setGenera(generaResults);\n setLoading(false);\n };\n\n useEffect(() => {\n if (family) {\n dispatch(setMinimized(false));\n getAndSetResults();\n } else {\n return;\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [family]);\n\n return (\n
\n
\n
dispatch(setMinimized(!cardMinimized))}>\n {\n dispatch(setMinimized(true));\n dispatch(setCardContent(''));\n }}\n >\n Return To Map\n \n

{family}

\n \n
\n
\n {loading ? (\n

Loading...

\n ) : (\n
    \n {genera.map((name: string, key: number) => {\n return (\n \n
  • {name}
  • \n \n );\n })}\n
\n )}\n
\n
\n
\n );\n};\n\nexport default SpecificFamily;\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useParams, Link } from 'react-router-dom';\n\nimport ShareWidget from '../share/ShareWidget';\n\nimport mapController from '../../controllers/MapController';\n\nimport { setMinimized, setCardContent } from '../../store/app/appSlice';\n\nimport { RootState } from '../../store/store';\n\nimport { BASE_URL } from '../../config/config';\n\nimport { splitByCharacter } from '../../utils/plantSyntax.util';\nimport { getPath } from '../../utils/path.util';\n\nconst SpecificGenus = () => {\n const dispatch = useDispatch();\n const { value: genus } = useParams();\n const cardMinimized = useSelector((state: RootState) => state.appReducer.cardMinimized);\n\n const [species, setSpecies] = useState([]);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n const getAndSetResults = async () => {\n const results = await mapController.querySpeciesByGenera(genus);\n setSpecies(results.sort());\n setLoading(false);\n };\n\n if (genus) {\n dispatch(setMinimized(false));\n getAndSetResults();\n } else {\n return;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [genus]);\n\n return (\n
\n
\n
dispatch(setMinimized(!cardMinimized))}>\n {\n dispatch(setMinimized(true));\n dispatch(setCardContent(''));\n }}\n >\n Return To Map\n \n

\n {genus} \n

\n \n
\n
\n {loading ? (\n

Loading...

\n ) : (\n
    \n {species.map((name: string, index: number) => {\n return (\n \n
  • {splitByCharacter(name)}
  • \n \n );\n })}\n
\n )}\n
\n
\n
\n );\n};\n\nexport default SpecificGenus;\n","import React from 'react';\n\nconst IconGreenMap = () => {\n return (\n \n Green map\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default IconGreenMap;\n","import React from 'react';\n\nconst IconWhiteMap = () => {\n return (\n \n White map\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default IconWhiteMap;\n","import React from 'react';\n\nconst PhenologyChartLegendFlowering = () => (\n \n Flowering\n \n \n);\n\nexport default PhenologyChartLegendFlowering;\n","import React from 'react';\n\nconst PhenologyChartLegendFruiting = () => (\n \n Fruiting\n \n \n);\n\nexport default PhenologyChartLegendFruiting;\n","import React from 'react';\n\nimport PhenologyChartLegendFlowering from './PhenologyChartLegendFlowering';\nimport PhenologyChartLegendFruiting from './PhenologyChartLegendFruiting';\n\nconst PhenologyChartLegend = ({\n selectedValue,\n uniqueYears,\n handleYearChange,\n}: {\n selectedValue: number | undefined;\n uniqueYears: any;\n handleYearChange: any;\n}) => (\n
\n
\n

Select Year:

\n handleYearChange(evt.target.value)}\n >\n {uniqueYears &&\n uniqueYears.map((year: number) => (\n \n ))}\n \n
\n
\n \n \n
\n
\n);\n\nexport default PhenologyChartLegend;\n","import _range from 'lodash/range';\n\nexport const MONTHS_SHORT: string[] = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n];\n\nexport const WEEKS_IN_YEAR_RANGE = _range(1, 53, 1); // [1 .. 52]\n","import React from 'react';\nimport { MONTHS_SHORT, WEEKS_IN_YEAR_RANGE } from './PhenologyChart.config';\n\nconst PhenologyTableHead = (prop: { class?: string }) => (\n \n \n \n
\n {MONTHS_SHORT.map((month, index) => (\n
\n {month}\n
\n ))}\n
\n \n \n);\n\nexport default PhenologyTableHead;\n","import React from 'react';\nimport { WEEKS_IN_YEAR_RANGE } from './PhenologyChart.config';\nimport { getWeek } from 'date-fns';\n\nconst PhenologyTableAverage = ({ phenologyChartData, type }: { phenologyChartData: any; type: string }) => {\n const dates = phenologyChartData[type];\n const getCount = (week: number) => {\n const count = dates.reduce((acc: number, cur: string) => {\n const date = new Date(cur);\n const weekInYear = getWeek(date);\n return week === weekInYear ? acc + 1 : acc;\n }, 0);\n\n return count;\n };\n\n return (\n \n Range\n {WEEKS_IN_YEAR_RANGE.map((week) => {\n const numberOfPlants = getCount(week);\n return (\n 0 ? (numberOfPlants < 4 ? numberOfPlants : 4) : null}\n />\n );\n })}\n \n );\n};\n\nexport default PhenologyTableAverage;\n","import React from 'react';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { getPlantsInWeek } from './PhenologyChart.util';\nimport { WEEKS_IN_YEAR_RANGE } from './PhenologyChart.config';\n\nconst PhenologyTableFloweringYear = ({\n year,\n selectedYear,\n selectedPlantsByYear,\n}: {\n year: number;\n selectedYear: number;\n selectedPlantsByYear: string[];\n}) => {\n return (\n \n {year}\n {WEEKS_IN_YEAR_RANGE.map((weekInt) => {\n const plantsInWeek = getPlantsInWeek(selectedPlantsByYear, weekInt);\n return (\n 0 || null}\n data-week-match-flowering={plantsInWeek.length > 0 || null}\n />\n );\n })}\n \n );\n};\n\nexport default PhenologyTableFloweringYear;\n","import React from 'react';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { getPlantsInWeek } from './PhenologyChart.util';\nimport { WEEKS_IN_YEAR_RANGE } from './PhenologyChart.config';\n\nconst PhenologyTableFruitingYear = ({\n year,\n selectedYear,\n selectedPlantsByYear,\n}: {\n year: number;\n selectedYear: number;\n selectedPlantsByYear: string[];\n}) => {\n return (\n \n {year}\n {WEEKS_IN_YEAR_RANGE.map((weekInt) => {\n const plantsInWeek = getPlantsInWeek(selectedPlantsByYear, weekInt);\n return (\n 0 || null}\n data-week-match-fruiting={plantsInWeek.length > 0 || null}\n />\n );\n })}\n \n );\n};\n\nexport default PhenologyTableFruitingYear;\n","import React, { useEffect, useState } from 'react';\n\nimport PhenologyChartLegend from './PhenologyChartLegend';\nimport PhenologyTableHead from './PhenologyTableHead';\nimport PhenologyTableAverage from './PhenologyTableAverage';\nimport PhenologyTableFloweringYear from './PhenologyTableFloweringYear';\nimport PhenologyTableFruitingYear from './PhenologyTableFruitingYear';\nimport PhenologyChartLegendFlowering from './PhenologyChartLegendFlowering';\nimport PhenologyChartLegendFruiting from './PhenologyChartLegendFruiting';\n\nimport {\n filterByYear,\n getPlantsChartDatasets,\n getUniqueYears,\n PhenologyChartDataInterface,\n} from './PhenologyChart.util';\n\nimport { WEEKS_IN_YEAR_RANGE } from './PhenologyChart.config';\n\nimport './PhenologyChart.scss';\n\nconst PhenologyChart = ({\n plant,\n phenologyChartData,\n}: {\n plant: any;\n phenologyChartData: PhenologyChartDataInterface;\n}) => {\n const uniqueYears = getUniqueYears(phenologyChartData);\n const [selectedYear, setSelectedYear] = useState(uniqueYears[0]);\n\n useEffect(() => {\n if (!selectedYear) {\n setSelectedYear(uniqueYears[0]);\n }\n }, [selectedYear, uniqueYears]);\n\n const handleYearChange = (year: string) => {\n const yearInt = parseInt(year);\n setSelectedYear(yearInt);\n };\n\n return (\n phenologyChartData && (\n
\n {uniqueYears && uniqueYears?.length > 0 && (\n \n

Phenology Chart

\n \n
\n \n \n \n \n \n\n \n \n {uniqueYears.map((year) => {\n const selectedPlantsByYear = filterByYear(phenologyChartData, year, 'flowering');\n return (\n selectedPlantsByYear.length > 0 && (\n \n )\n );\n })}\n\n \n \n \n\n \n \n {uniqueYears.map((year) => {\n const selectedPlantsByYear = filterByYear(phenologyChartData, year, 'fruiting');\n return (\n selectedPlantsByYear.length > 0 && (\n \n )\n );\n })}\n \n
\n \n When {plant?.NAME} has been observed flowering\n
\n at The New York Botanical Garden\n
\n \n
\n
\n \n When {plant?.NAME} has been observed fruiting\n
\n at The New York Botanical Garden\n
\n \n
\n
\n
\n
\n )}\n
\n )\n );\n};\n\nexport default PhenologyChart;\n","import React from 'react';\n\nimport './PlantNotAlive.scss';\n\nconst PlantNotAlive = () => (\n
\n

There are no living specimens in the collection

\n
\n);\n\nexport default PlantNotAlive;\n","import React from 'react';\n\nimport ShareWidget from '../../share/ShareWidget';\nimport SpecificPlantFavorPlant from '../SpecificPlantFavorPlant/SpecificPlantFavorPlant';\nimport WidgetImage from '../WidgetImage/WidgetImage';\n\nimport { PlantData } from '../../../interfaces/plantData';\nimport ScientificNameFormatted from '../searchResults/PlantResultScientificName/ScientificNameFormatted';\n\nimport './SpecificPlantTopDetails.scss';\n\nexport default function SpecificPlantTopDetails({\n plant,\n favorite,\n removeFavoritePlant,\n addFavoritePlant,\n}: {\n plant: PlantData;\n favorite: boolean;\n removeFavoritePlant: () => void;\n addFavoritePlant: () => void;\n}) {\n return (\n
\n
\n
\n

\n \n

\n
\n {plant?.FAMILY && (\n <>\n

\n Family:\n

\n

{plant?.FAMILY}

\n \n )}\n {plant?.RANGE && (\n <>\n

\n Range:\n

\n

{plant?.RANGE}

\n \n )}\n {plant?.HABIT_FULL && (\n <>\n

\n Habit:\n

\n

{plant?.HABIT_FULL}

\n \n )}\n
\n
\n
\n
\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport ImageGallery from 'react-image-gallery';\n\nimport { $apiPlantImages, $selectedPlant } from '../../../store/app/appSlice';\nimport { getPlantImages } from '../../../utils/plant.util';\n\nimport { PlantGalleryImage } from '../../../interfaces/plantData';\n\nimport './SpecificPlantGallery.scss';\n\nfunction handleGalleryImages({ cover, items }: any) {\n const plantGalleryImages: PlantGalleryImage[] = [];\n\n plantGalleryImages.push({ original: cover.previewUrl, thumbnail: cover.thumbnailUrl, originalAlt: '0' });\n\n items.forEach((item: { id: number; previewUrl: string; thumbnailUrl: string }, index: number) => {\n if (item.id !== cover.id) {\n plantGalleryImages.push({ original: item.previewUrl, thumbnail: item.thumbnailUrl, originalAlt: `${index + 1}` });\n }\n });\n\n return plantGalleryImages;\n}\n\nexport default function SpecificPlantGallery() {\n const { images, NAME_NUMS } = useSelector($apiPlantImages);\n const { NAME_NUM } = useSelector($selectedPlant);\n const [plantGalleryImages, setPlantGalleryImages] = useState([]);\n\n useEffect(() => {\n if (NAME_NUM && !NAME_NUMS.includes(NAME_NUM!)) {\n getPlantImages(NAME_NUM).then((plantImagesData: any) => {\n const plantImages = plantImagesData?.images[NAME_NUM!];\n if (plantImages && plantImages['cover']) {\n setPlantGalleryImages(handleGalleryImages(plantImages));\n }\n });\n } else {\n const plantImages = images[NAME_NUM!];\n if (plantImages && plantImages['cover']) {\n setPlantGalleryImages(handleGalleryImages(plantImages));\n }\n }\n }, [NAME_NUM]);\n\n return (\n
\n {plantGalleryImages && plantGalleryImages.length > 0 ? (\n \n ) : (\n
\n

IMAGE COMING SOON

\n
\n )}\n
\n );\n}\n","import React from 'react';\nimport { Link } from 'react-router-dom';\n\nimport './SpecificPlantFindOthers.scss';\n\nexport default function SpecificPlantFindOthers({ GENUS }: { GENUS: string }) {\n return (\n \n Find other plants like this: {GENUS}\n \n );\n}\n","import React, { useEffect, useState } from 'react';\nimport _orderBy from 'lodash/orderBy';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Link, useHistory, useLocation, useParams } from 'react-router-dom';\nimport ExploreIcon from '@material-ui/icons/Check';\nimport ExploreOffIcon from '@material-ui/icons/Remove';\n\nimport Loader from '../Loader';\nimport IconGreenMap from '../icons/IconGreenMap';\nimport IconWhiteMap from '../icons/IconWhiteMap';\nimport ResultsError from '../error/ResultsError';\nimport IconChevronUp from '../icons/IconChevronUp';\nimport PhenologyChart from './SpecificPlant/PhenologyChart';\nimport PlantNotAlive from './SpecificPlant/PlantNotAlive';\nimport SpecificPlantTopDetails from './SpecificPlantTopDetails/SpecificPlantTopDetails';\nimport SpecificPlantGallery from './SpecificPlantGallery/SpecificPlantGallery';\nimport SpecificPlantFindOthers from './SpecificPlantFindOthers/SpecificPlantFindOthers';\nimport WidgetImage from './WidgetImage/WidgetImage';\nimport ShareWidget from '../share/ShareWidget';\n\n// Utils\nimport mapController from '../../controllers/MapController';\nimport { decodePathValue, encodePathValue } from '../../utils/path.util';\nimport { getClean__CATALOG_DESC } from '../../utils/plant.util';\n\n// Interfaces\nimport { PlantData } from '../../interfaces/plantData';\nimport { PhenologyChartDataInterface } from './SpecificPlant/PhenologyChart.util';\n\n// REDUX Store\nimport { RootState } from '../../store/store';\nimport { setModalContent } from '../../store/app/modalSlice';\nimport { setSelectedPlant, updateFavoritePlants } from '../../store/app/appSlice';\n\n// Configs\nimport { BASE_URL, isMobileDevice } from '../../config/config';\n\n// Style\nimport '../../styles/css/plant.scss';\nimport './SpecificPlant.scss';\n\ninterface FavoritePlantData {\n commonName: string;\n scientificName: string;\n img: string;\n}\n\nfunction SpecificPlant() {\n const dispatch = useDispatch();\n const searchWidgetLocation = useSelector((state: RootState) => state.appReducer.searchWidgetLocation);\n const { value: specificPlant } = useParams();\n const { pathname } = useLocation();\n const { goBack, push } = useHistory();\n\n const allFavoritesString = localStorage.getItem('favoritePlants');\n const allFavorites = allFavoritesString ? (JSON.parse(allFavoritesString) as Array) : [];\n\n const [favorite, setFavorite] = useState(false);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(false);\n const [phenologyChartData, setPhenologyChartData] = useState();\n const [plant, setPlant] = useState({\n OBJECTID: 0,\n ACC_NUM_AND_QUAL: '',\n NAME: '',\n NAME_NUM: 0,\n ACCEPT_FULL: '',\n CURRENT_CONDITION_FULL: '',\n ACC_YR: 0,\n RECD_YR: 0,\n PSOURCE_CURRENT: '',\n CURRENT_NUM_PLTS: '',\n CURRENT_LOCATION: '',\n CURRENT_LOCATION_FULL: '',\n RECD_HOW: '',\n PROV_TYPE: '',\n CURRENT_CHECK_NOTE: '',\n CURRENT_CHECK_DT: '',\n LEDITED_BY: '',\n CURRENT_CHECK_BY: '',\n ALIVE: '',\n ACCEPT: '',\n ACCEPT_NAME: null,\n FAMILY: '',\n GENUS: '',\n COMMON_NAME_PRIMARY: '',\n COMMON_NAMES: '',\n KEYWORD: '',\n RANGE: '',\n HABITAT: null,\n SOIL: '',\n SUN_FULL: '',\n SPEC_CHAR_FULL: '',\n HABIT_FULL: '',\n GROWTH_FORM_FULL: '',\n DECID_FULL: '',\n HARDI_ZONE_USDA: 7,\n FL_COLOR_FULL: '',\n FL_COLOR_NOTE: '',\n LEAF_COLOR_FULL: '',\n LEAF_COLOR_NOTE: '',\n FR_COLOR_FULL: '',\n HEIGHT: '',\n HEIGHT_X: null,\n HEIGHT_Y: null,\n HEIGHT_UNIT_DISP: '',\n SPREAD: 0,\n SPREAD_UNIT_DISP: '',\n CATALOG_DESC: '',\n CODE: null,\n MAPPED: '',\n X_COORD: 0,\n Y_COORD: 0,\n Z_COORD: null,\n LOCATION__CURRENT: '',\n PUBLICLY_ACCESSIBLE: '',\n });\n const [accessionData, setAccessionData] = useState([]);\n const taxonomyType = pathname.includes('species') ? 'species' : 'commonname';\n const taxonomyValue = taxonomyType === 'species' ? plant?.NAME : plant?.COMMON_NAME_PRIMARY;\n\n useEffect(() => {\n const plantDataQuery = pathname.includes('commonname')\n ? mapController.queryPlantByCommonName\n : mapController.queryPlantBySpeciesName;\n const acessionDataQuery = pathname.includes('commonname')\n ? mapController.queryPlantsForAccessionIDsByCommonName\n : mapController.queryPlantsForAccessionIDsBySpecies;\n\n const handleSpecificPlant = decodePathValue(specificPlant);\n plantDataQuery(handleSpecificPlant).then((plantDataResults) => {\n if (plantDataResults && plantDataResults.length > 0) {\n const plantData = plantDataResults[0].attributes;\n setPlant(plantData);\n dispatch(setSelectedPlant(plantData));\n\n const { COMMON_NAME_PRIMARY, NAME } = plantData;\n const matchFound = allFavorites.find(({ commonName, scientificName }) => {\n return commonName === COMMON_NAME_PRIMARY && scientificName === NAME;\n });\n\n if (matchFound) {\n setFavorite(true);\n }\n\n setLoading(false);\n } else {\n setError(true);\n }\n });\n\n acessionDataQuery(handleSpecificPlant).then((accessionQueryResults) => {\n if (accessionQueryResults) {\n setAccessionData(accessionQueryResults);\n } else {\n setError(true);\n }\n });\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [specificPlant]);\n\n useEffect(() => {\n mapController.queryPlantBySpeciesNameForPhenologyChartData(plant.NAME).then((chartDataResults) => {\n if (chartDataResults) {\n setPhenologyChartData(chartDataResults);\n }\n });\n }, [plant]);\n\n const updateFavoritePlant = () => {\n localStorage.setItem('favoritePlants', JSON.stringify(allFavorites));\n dispatch(updateFavoritePlants(allFavorites));\n setFavorite(!favorite);\n };\n\n const removeFavoritePlant = () => {\n const favoritePlant = allFavorites.find((favoritePlant: FavoritePlantData) => {\n return favoritePlant.commonName === plant?.COMMON_NAME_PRIMARY && favoritePlant.scientificName === plant?.NAME;\n }) as FavoritePlantData;\n const index = allFavorites.indexOf(favoritePlant);\n allFavorites.splice(index, 1);\n\n updateFavoritePlant();\n };\n\n const addFavoritePlant = () => {\n allFavorites.push({\n commonName: plant?.COMMON_NAME_PRIMARY,\n scientificName: plant?.NAME,\n img: `image of ${plant?.NAME}`,\n });\n\n updateFavoritePlant();\n };\n\n const Accessions = ({ data }: any) => {\n const [showAll, setShowAll] = useState(false);\n\n const categories = ['Key', 'Surveyed', 'Accession', 'Year', 'Location', 'Publicly Accessible'];\n const prepareData = data.map((record: string[]) => {\n const accessionNumberAndQualifiers = record[2];\n const accessNumber = parseInt(accessionNumberAndQualifiers.split('/')[0]);\n const accessCharacter = accessionNumberAndQualifiers.split('*')[1];\n return [...record, accessNumber, accessCharacter];\n });\n const orderedData = _orderBy(prepareData, [3, 5, 6], ['asc', 'asc', 'asc']).map((plant) =>\n plant.slice(0, categories.length)\n );\n const accessionData = showAll ? orderedData : orderedData.slice(0, 5);\n\n return (\n
\n \n \n \n {categories.map((name: string, index: number) => (\n \n ))}\n \n \n \n {accessionData.map((row: any, index: number) => {\n const returnMapPin = (MAPPED: string) => {\n if (MAPPED === 'Y') {\n return ;\n }\n\n if (MAPPED === 'N') {\n return ;\n }\n\n /**\n * * NOTE: MAPPED can be 'Y', 'N' or 'NULL'\n * Y - alive & mapped\n * N - alive & not mapped\n * NULL - not alive, not mapped\n */\n };\n\n return (\n \n {row.map((option: string, index: number) => {\n const renderOption = index === 1 ? returnMapPin(option) : option;\n return (\n \n );\n })}\n \n );\n })}\n\n \n \n \n \n
\n {name}\n
\n {index === 2 ? {option} : renderOption}\n
\n {orderedData.length > 5 && (\n \n )}\n
\n
\n );\n };\n\n const viewOnMapURL = loading\n ? `${BASE_URL}/map`\n : `${BASE_URL}/map/${taxonomyType}/${encodePathValue(taxonomyValue)}`;\n\n return (\n
\n
\n
\n
\n
\n {\n if (searchWidgetLocation) {\n goBack();\n } else {\n push(viewOnMapURL);\n }\n }}\n >\n \n View on Map\n \n \n\n
\n
\n
\n {plant?.COMMON_NAME_PRIMARY}\n
\n\n \n
\n
\n
\n\n {isMobileDevice && (\n \n )}\n
\n\n removeFavoritePlant()}\n addFavoritePlant={() => addFavoritePlant()}\n />\n
\n\n {loading ? (\n \n ) : error ? (\n \n ) : (\n <>\n {plant?.CATALOG_DESC && (\n \n )}\n\n
\n {plant?.GROWTH_FORM_FULL && (\n <>\n

\n Growth Form:\n

\n

{plant?.GROWTH_FORM_FULL}

\n \n )}\n {plant?.DECID_FULL && (\n <>\n

\n Leaf Type:\n

\n dispatch(setModalContent(`LeafType - ${plant?.DECID_FULL}`))}\n >\n {plant?.DECID_FULL}\n \n \n )}\n {plant?.HARDI_ZONE_USDA && (\n <>\n

\n Hardiness:\n

\n

\n \n \n USDA Zone {plant?.HARDI_ZONE_USDA}\n \n \n

\n \n )}\n {plant?.SOIL && (\n <>\n

\n Soil:\n

\n

{plant?.SOIL}

\n \n )}\n {plant?.SUN_FULL && (\n <>\n

\n Sun Req:\n

\n

{plant?.SUN_FULL}

\n \n )}\n {plant?.FL_COLOR_FULL && (\n <>\n

\n Flowers:\n

\n

{plant?.FL_COLOR_FULL}

\n \n )}\n {plant?.FR_COLOR_FULL && (\n <>\n

\n Fruit:\n

\n

{plant?.FR_COLOR_FULL}

\n \n )}\n {plant?.LEAF_COLOR_FULL && (\n <>\n

\n Foliage Color:\n

\n

{plant?.LEAF_COLOR_FULL}

\n \n )}\n
\n\n {/* Show if plant is not Alive and there is no accession Data */}\n {plant.ALIVE !== 'A' && accessionData.length === 0 && }\n\n {accessionData.length ? : null}\n {phenologyChartData && }\n\n
\n \n View on Map\n \n \n\n \n
\n \n )}\n
\n\n {!isMobileDevice && }\n
\n );\n}\n\nexport default SpecificPlant;\n","import * as React from 'react';\n\nexport default function IconTrashBin({ width = 32, height = 32 }) {\n return (\n \n \n \n );\n}\n","import React from 'react';\n\nconst IconHeartRed = ({ width = 35, height = 35 }) => {\n return (\n \n Red heart\n \n \n );\n};\n\nexport default IconHeartRed;\n","import React, { useState } from 'react';\nimport { Link } from 'react-router-dom';\nimport { useDispatch } from 'react-redux';\nimport { useSwipeable } from 'react-swipeable';\n\nimport IconTrashBin from '../../icons/IconTrashBin';\nimport IconHeartRed from '../../icons/IconHeartRed';\nimport IconShare from '../../icons/IconShare';\nimport WidgetImage from '../WidgetImage/WidgetImage';\n\nimport { encodePathValue, PLANTS_LINK__SPECIES } from '../../../utils/path.util';\n\n// REDUX Store\nimport { setModalContent } from '../../../store/app/modalSlice';\n\n// Style\nimport './FavoritePlantsItem.scss';\n\nconst ICON__SIZE = 28;\nconst REMOVE_BUTTON__SIZE = 40;\n\nexport function FavoritePlantsItem({\n commonName,\n scientificName,\n sharePlant,\n unfavoritePlant,\n}: {\n commonName: string;\n scientificName: string;\n unfavoritePlant: () => void;\n sharePlant: () => void;\n}) {\n const dispatch = useDispatch();\n const [remove, setRemove] = useState(false);\n\n const handlers = useSwipeable({\n onSwipedLeft: () => setRemove(false),\n onSwipedRight: () => setRemove(true),\n preventDefaultTouchmoveEvent: true,\n trackMouse: true,\n trackTouch: true,\n });\n\n return (\n
\n
\n
\n \n \n \n
\n
\n \n\n
\n

{commonName}

\n

{scientificName}

\n dispatch(setModalContent(''))}\n >\n Learn More\n \n
\n
\n
\n\n
\n \n \n
\n
\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\n// Redux\nimport { RootState } from '../../store/store';\nimport { setShareModalActive, updateFavoritePlants } from '../../store/app/appSlice';\nimport { FavoritePlantsItem } from './FavoritePlantsItem/FavoritePlantsItem';\n\ninterface PlantData {\n commonName: string;\n scientificName: string;\n img: string;\n}\n\nexport default function FavoritePlants() {\n const dispatch = useDispatch();\n const shareModalActive = useSelector((state: RootState) => state.appReducer.shareModalActive);\n const [favoritePlants, setFavoritePlants] = useState | []>([]);\n const allFavoritesString = localStorage.getItem('favoritePlants');\n const allFavorites = allFavoritesString ? JSON.parse(allFavoritesString) : [];\n\n useEffect(() => {\n if (allFavorites.length) {\n setFavoritePlants(allFavorites);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [allFavorites.length]);\n\n const unfavoritePlant = (scientificName: string) => {\n const favoritePlantsCopy = [...favoritePlants];\n const updatedFavoritePlants = favoritePlantsCopy.filter((plant) => plant.scientificName !== scientificName);\n\n localStorage.setItem('favoritePlants', JSON.stringify(updatedFavoritePlants));\n dispatch(updateFavoritePlants(updatedFavoritePlants));\n setFavoritePlants(updatedFavoritePlants);\n };\n\n return (\n
\n
\n {favoritePlants.length > 0 ? (\n (favoritePlants as Array).map(({ commonName, scientificName }: any, index: number) => {\n return (\n unfavoritePlant(scientificName)}\n sharePlant={() => dispatch(setShareModalActive(!shareModalActive))}\n />\n );\n })\n ) : (\n

You currently do not have favorites. Add plants to your list of favorites.

\n )}\n
\n
\n );\n}\n","import * as React from 'react';\nimport { SVG_CONFIG } from '../../config/config';\n\nfunction IconBurgerMenuFilter({ fill }: { fill?: string }) {\n return (\n \n \n \n );\n}\n\nexport default IconBurgerMenuFilter;\n","import * as React from 'react';\nimport { SVG_CONFIG } from '../../config/config';\n\nfunction IconFlower({ fill }: { fill?: string }) {\n return (\n \n \n \n );\n}\n\nexport default IconFlower;\n","import * as React from 'react';\nimport { SVG_CONFIG } from '../../config/config';\n\nfunction IconPlantType({ fill }: { fill?: string }) {\n return (\n \n \n \n );\n}\n\nexport default IconPlantType;\n","import * as React from 'react';\nimport { SVG_CONFIG } from '../../config/config';\n\nfunction IconSunlightNeeds({ fill }: { fill?: string }) {\n return (\n \n \n \n );\n}\n\nexport default IconSunlightNeeds;\n","import * as React from 'react';\n\nfunction IconRadioButton(props: { checked: boolean }) {\n return (\n \n \n \n \n \n \n );\n}\n\nexport default IconRadioButton;\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\n// Store\nimport {\n selectMapFilterActiveDropdowns,\n selectMapFilterSelectedOptions,\n setFilterActiveDropdowns,\n setFilterActiveOptions,\n setFilterDefinitionExpression,\n DropdownOption,\n} from '../../store/app/filterSlice';\nimport { $searchType } from '../../store/app/appSlice';\n\nimport { setGAFilterEvent } from '../../utils/googleAnalytics';\nimport { filterOptionButtonHeight } from '../../config/filterPlants';\n\nimport IconBurgerMenuFilter from '../icons/IconBurgerMenuFilter';\nimport IconFlower from '../icons/IconFlower';\nimport IconLeaf from '../icons/IconLeaf';\nimport IconPlantType from '../icons/IconPlantType';\nimport IconSunlightNeeds from '../icons/IconSunlightNeeds';\nimport IconRadioButton from '../icons/IconRadioButton';\nimport SearchPlantRecordsFilter from './SearchPlantRecordsFilter/SearchPlantRecordsFilter';\n\nimport { LOCATIONS_SEARCH_LABEL } from '../../config/plant.config';\n\nimport '../../styles/css/filterPlants.scss';\n\nconst FilterPlants = () => {\n const dispatch = useDispatch();\n const searchType = useSelector($searchType);\n const mapFilterActiveDropdowns = useSelector(selectMapFilterActiveDropdowns);\n const mapFilterSelectedOptions = useSelector(selectMapFilterSelectedOptions);\n\n const [filterOptions, setFilterOptions] = useState(mapFilterSelectedOptions);\n\n useEffect(() => {\n if (searchType !== LOCATIONS_SEARCH_LABEL) {\n setFilterOptions(\n mapFilterSelectedOptions.filter((option) => {\n return option.label !== LOCATIONS_SEARCH_LABEL;\n })\n );\n }\n }, [mapFilterSelectedOptions, searchType]);\n\n const getOptionsCopy = () => {\n const filters = filterOptions.map((option: any) => {\n const optionsCopy = option.options.map((subOption: any) => {\n return {\n label: subOption.label,\n values: [...subOption.values],\n };\n });\n\n const configOptionCopy: DropdownOption = {\n activeValues: option.activeValues,\n esriField: option.esriField,\n esriQueryMatch: option.esriQueryMatch,\n icon: option.icon,\n label: option.label,\n options: optionsCopy,\n type: option.type,\n };\n\n if (option.activeRadioButton) {\n configOptionCopy.activeRadioButton = option.activeRadioButton;\n }\n\n return configOptionCopy;\n });\n\n return filters;\n };\n\n const setActiveRadioButton = (filterIndex: any, { label, values }: any) => {\n const filters = getOptionsCopy();\n\n const selectedDropdown = filters[filterIndex];\n selectedDropdown.activeValues = values;\n selectedDropdown.activeRadioButton = label;\n\n // setGAFilterEvent({ label: selectedDropdown.label, activeOption: selectedDropdown.activeRadioButton });\n dispatch(setFilterActiveOptions(filters));\n dispatch(setFilterDefinitionExpression(filters));\n };\n\n const setActiveCheckbox = (filterIndex: any, { label }: any) => {\n const filters = getOptionsCopy();\n\n const selectedDropdown = filters[filterIndex];\n let activeValues = [...selectedDropdown.activeValues];\n\n if (label === 'All') {\n activeValues = activeValues.includes('All') ? [] : ['All'];\n } else {\n activeValues = activeValues.filter((activeValue: string) => activeValue !== 'All');\n activeValues = activeValues.includes(label)\n ? activeValues.filter((activeValue: string) => activeValue !== label)\n : [...activeValues, label];\n }\n\n selectedDropdown.activeValues = activeValues;\n\n // setGAFilterEvent({ label: selectedDropdown.label, activeOption: label });\n dispatch(setFilterActiveOptions(filters));\n dispatch(setFilterDefinitionExpression(filters));\n };\n\n return (\n
\n
\n {filterOptions.map((filter: any, filterIndex: number) => {\n const { label, options, activeRadioButton, type, activeValues } = filter;\n let icon;\n switch (filter.icon) {\n case 'IconFlower':\n icon = ;\n break;\n case 'IconLeaf':\n icon = ;\n break;\n case 'IconPlantType':\n icon = ;\n break;\n case 'IconSunlightNeeds':\n icon = ;\n break;\n case 'IconBurgerMenu':\n icon = ;\n break;\n default:\n icon = ;\n }\n\n return (\n
\n
dispatch(setFilterActiveDropdowns(label))}>\n
\n {icon}\n {label}\n {type === 'checkbox' && !activeValues.includes('All') && activeValues.length > 0 && (\n {activeValues.length}\n )}\n {type === 'radio' && activeRadioButton && activeRadioButton !== 'All' && (\n 1\n )}\n
\n \n
\n {mapFilterActiveDropdowns === label && options.length ? (\n
\n
    \n {(options as Array).map((option: any, optionKey: number) => {\n const selectedDropdown = filterOptions.find(\n (dropdownOption: any) => dropdownOption.label === label\n );\n if (type === 'checkbox') {\n return (\n
  • \n setActiveCheckbox(filterIndex, option)}\n >\n \n \n \n \n
  • \n );\n } else {\n return (\n
  • setActiveRadioButton(filterIndex, option)}>\n \n \n
  • \n );\n }\n })}\n \n \n ) : null}\n \n );\n })}\n \n\n \n \n );\n};\n\nexport default FilterPlants;\n","import React from 'react';\nimport { useDispatch } from 'react-redux';\nimport IconReset from '../icons/IconReset';\n\nimport { resetFilterOptions } from '../../store/app/filterSlice';\n\nconst FilterPlantsClear = () => {\n const dispatch = useDispatch();\n return (\n \n );\n};\n\nexport default FilterPlantsClear;\n","import React from 'react';\n\nimport IconChevronUp from '../../icons/IconChevronUp';\n\nimport './TourOptionsItem.scss';\n\nexport function TourOptionsItem(props: {\n tourID: any;\n tourName: any;\n selectedTour: number | undefined;\n numbers: Array;\n onClick: () => void;\n onChange: () => void;\n}) {\n return (\n
    \n \n \n \n
    \n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport '../../styles/css/tours.scss';\nimport { TourOptionsItem } from './TourOptionsItem/TourOptionsItem';\nimport { $toursAll, $tourSelected, setTourSelected, setTourStopIndex } from '../../store/app/tourSlice';\nimport { getTourSelected, updateTourPathURL } from '../../utils/tour.util';\n\nconst TourOptions = ({ startCuratedTour }: any) => {\n const dispatch = useDispatch();\n const toursAll = useSelector($toursAll);\n const tourSelected = useSelector($tourSelected);\n const [activeDropdown, setActiveDropdown] = useState>([0]);\n\n useEffect(() => {\n if (tourSelected.Tour_ID) {\n setActiveDropdown([tourSelected.Tour_ID]);\n }\n }, []); // eslint-disable-line\n\n const setDropdowns = (tourID: number) => {\n const activeDropdownCopy = [...activeDropdown];\n if (activeDropdownCopy.includes(tourID)) {\n const index = activeDropdownCopy.indexOf(tourID);\n activeDropdownCopy.splice(index);\n } else {\n activeDropdownCopy.push(tourID);\n }\n setActiveDropdown(activeDropdownCopy);\n };\n\n const setTourSelection = (tourID: number) => {\n setDropdowns(tourID);\n const tourSelected = getTourSelected(toursAll, tourID);\n if (tourSelected) {\n dispatch(setTourSelected(tourSelected));\n }\n\n updateTourPathURL(tourID);\n };\n\n const selectedTour = tourSelected.Tour_ID;\n return (\n <>\n
    \n
    \n {toursAll.map(({ Description, Tour_ID, Tour_Name }, key) => {\n return (\n
    \n setDropdowns(Tour_ID)}\n onChange={() => {\n setTourSelection(Tour_ID);\n dispatch(setTourStopIndex(0));\n }}\n />\n\n {activeDropdown.includes(Tour_ID) && (\n <>\n
    \n

    \n {Description}\n {/* {tourStops?.length ? (\n \n ) : null} */}\n {/* {tourStops?.length && tourStopsActive ? (\n <>\n

    Stops Along The Tour

    \n
      \n {tourStops.map(({ scientificName, commonName }) => {\n return (\n
    1. \n {scientificName} \n
      \n ({commonName})\n
    2. \n );\n })}\n
    \n \n ) : null} */}\n

    \n {/*

    \n Duration: \n {duration}hr Est.\n

    */}\n
    \n \n )}\n
    \n );\n })}\n
    \n
    \n\n
    \n startCuratedTour(selectedTour)}\n disabled={selectedTour ? false : true}\n >\n Next \n \n
    \n \n );\n};\n\nexport default TourOptions;\n","import * as React from 'react';\nimport { COLOR_PRIMARY } from '../../config/config';\n\nfunction IconLocator({\n fill = COLOR_PRIMARY,\n width = 35,\n height = 32,\n}: {\n fill?: string;\n width?: number;\n height?: number;\n}) {\n return (\n \n \n \n \n );\n}\n\nexport default IconLocator;\n","import React, { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { TourStop } from '../../interfaces/plantData';\n\n// REDUX Store\nimport { RootState } from '../../store/store';\nimport { setModalContent } from '../../store/app/modalSlice';\nimport { setTourStopIndex } from '../../store/app/tourSlice';\n\nimport mapController from '../../controllers/MapController';\n\nconst TourStopsClose = () => {\n const dispatch = useDispatch();\n const tourStep = useSelector((state: RootState) => state.tourReducer.tourStep);\n const tourStops: Array = useSelector((state: RootState) => state.tourReducer.tourStops);\n const tourStopIndex = useSelector((state: RootState) => state.tourReducer.tourStopIndex);\n\n const ACC_NUM_AND_QUAL = tourStops.length ? tourStops[tourStopIndex].ACC_NUM_AND_QUAL : null;\n\n useEffect(() => {\n if (tourStops.length && ACC_NUM_AND_QUAL) {\n mapController.setTourStopsActiveStop(ACC_NUM_AND_QUAL);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [tourStopIndex]);\n\n return tourStep === 'TourStopsOpen' ? (\n {\n mapController.goToAllTourStops();\n dispatch(setTourStopIndex(0));\n dispatch(setModalContent(''));\n }}\n >\n
    Start Tour
    \n \n ) : null;\n};\n\nexport default TourStopsClose;\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Link } from 'react-router-dom';\n\nimport IconShare from '../icons/IconShare';\nimport IconLocator from '../icons/IconLocator';\nimport IconChevronUp from '../icons/IconChevronUp';\nimport Loader from '../Loader';\nimport TourStopsClose from './TourStopsClose';\nimport WidgetImage from '../plants/WidgetImage/WidgetImage';\n\n// REDUX Store\nimport { RootState } from '../../store/store';\nimport { setTourDefinitionExpressionByAccession } from '../../store/app/filterSlice';\nimport { setModalContent } from '../../store/app/modalSlice';\nimport { $tourStopIndex, setTourStep, setTourStopIndex } from '../../store/app/tourSlice';\nimport { setShareModalActive } from '../../store/app/appSlice';\n\nimport { TourStop } from '../../interfaces/plantData';\nimport TourStopNumber from './TourStopNumber/TourStopNumber';\nimport { getAndSetTourStops, resetTours } from '../../utils/tour.util';\nimport { COLOR_PRIMARY } from '../../config/config';\n\ninterface PlantStops {\n NAME: string;\n COMMON_NAME_PRIMARY: string;\n}\n\nconst TourStops = ({ accessions }: any) => {\n const dispatch = useDispatch();\n const tourStops = useSelector((state: RootState) => state.tourReducer.tourStops);\n const tourStopIndex = useSelector($tourStopIndex);\n const shareModalActive = useSelector((state: RootState) => state.appReducer.shareModalActive);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n if (!accessions.length) {\n return;\n }\n\n const tourStopsValidated = accessions.every((accession: string) => {\n if (!tourStops.length) {\n return false;\n }\n const plant = tourStops.find((stop: any) => stop.ACC_NUM_AND_QUAL === accession);\n\n return plant ? true : false;\n });\n\n if (tourStopsValidated) {\n setIsLoading(false);\n return;\n }\n\n dispatch(setTourDefinitionExpressionByAccession(accessions));\n getAndSetTourStops().then(() => {\n setIsLoading(false);\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [accessions]);\n\n const closeTourWidget = () => {\n dispatch(setModalContent(''));\n dispatch(setTourStep('TourStopsClose'));\n };\n\n return (\n <>\n
    \n {isLoading ? (\n \n ) : (\n <>\n {tourStops.map(({ NAME, COMMON_NAME_PRIMARY, ACC_NUM_AND_QUAL, NAME_NUM }: TourStop, index: number) => {\n return (\n
    \n
    \n \n\n \n\n
    \n

    \n closeTourWidget()}>\n {NAME}\n \n

    \n

    {COMMON_NAME_PRIMARY}

    \n closeTourWidget()}\n >\n Read More\n \n
    \n
    \n
    \n \n \n
    \n
    \n );\n })}\n \n )}\n
    \n\n
    \n
    \n {\n dispatch(setModalContent('ViewTours'));\n resetTours();\n }}\n >\n \n Back to Curated Tours\n \n
    \n\n \n
    \n \n );\n};\n\nexport default TourStops;\n","import React, { useEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useLocation } from 'react-router-dom';\n\nimport TourOptions from './TourOptions';\nimport TourStops from './TourStops';\nimport { RootState } from '../../store/store';\n\nimport '../../styles/css/tours.scss';\nimport { startCuratedTour } from '../../utils/tour.util';\n\nconst TourView = () => {\n const { search } = useLocation();\n const modalContent = useSelector((state: RootState) => state.modalReducer.modalContent);\n const tourStep = useSelector((state: RootState) => state.tourReducer.tourStep);\n const stopsByAccession = useSelector((state: RootState) => state.tourReducer.stopsByAccession);\n\n useEffect(() => {\n if (modalContent === 'TourStopsOpen') {\n const query = new URLSearchParams(search);\n const tourID = query.get('id');\n\n if (tourID != null) {\n startCuratedTour(parseInt(tourID));\n }\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [modalContent]);\n\n const returnCurrentTourStep = () => {\n switch (tourStep) {\n case 'ViewTours':\n return ;\n case 'TourStopsOpen':\n return ;\n default:\n return <>;\n }\n };\n\n return returnCurrentTourStep();\n};\n\nexport default TourView;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport SearchPlantsAdvancedFilters from '../SearchPlantsAdvancedFilters/SearchPlantsAdvancedFilters';\nimport SearchPlantsAlphabet from '../../plants/SearchPlantsAlphabet/SearchPlantsAlphabet';\nimport SearchPlantsAdvancedResults from '../../plants/SearchPlantsAdvancedResults/SearchPlantsAdvancedResults';\n\n// Store\nimport { $searchTypeAdvanced } from '../../../store/app/appSlice';\n\n// Config\nimport { SEARCH_PLANT_ALPHABET_SECTIONS } from '../../../config/plant.config';\n\n// Style\nimport './SearchPlantsAdvancedModal.scss';\n\nexport default function SearchPlantsAdvancedModal() {\n const searchTypeAdvanced = useSelector($searchTypeAdvanced);\n\n return (\n
    \n \n\n {SEARCH_PLANT_ALPHABET_SECTIONS.includes(searchTypeAdvanced) && }\n\n \n \n
    \n \n );\n}\n","import React from 'react';\n\nimport './CollectionsLanguageModal.scss';\n\nexport default function CollectionsLanguageModal() {\n return (\n
    \n

    \n The New York Botanical Garden offers public access to a wide range of information, including historical\n materials and collections that may contain offensive and unacceptable language. Such information does not\n reflect the views and values of NYBG. We are committed to preserving collections data in their original forms\n for historical accuracy and to facilitate research. We welcome feedback and questions about language found in\n our databases. Please contact{' '}\n \n collectionsidea@nybg.org\n \n

    \n
    \n );\n}\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport ImageGallery from 'react-image-gallery';\n\nimport { $modalGardenLocation } from '../../../store/app/modalSlice';\nimport { PlantGalleryImage } from '../../../interfaces/plantData';\n\nimport './GardenGallery.scss';\n\nexport default function GardenGallery() {\n const { previewUrl, thumbnailUrl, GardenLocation }: any = useSelector($modalGardenLocation);\n\n const plantGalleryImages: PlantGalleryImage[] = [\n { original: previewUrl, thumbnail: thumbnailUrl, originalAlt: GardenLocation },\n ];\n\n return (\n
    \n \n
    \n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useHistory } from 'react-router';\n\nimport Modal from './Modal';\nimport FavoritePlants from '../plants/FavoritePlants';\nimport FilterPlants from '../plants/FilterPlants';\nimport FilterPlantsClear from '../plants/FilterPlantsClear';\nimport TourView from '../tours/TourView';\n\nimport { setGAModalEvent } from '../../utils/googleAnalytics';\nimport { setModalContent } from '../../store/app/modalSlice';\n\nimport SearchPlantsAdvancedModal from './SearchPlantsAdvancedModal/SearchPlantsAdvancedModal';\nimport CollectionsLanguageModal from './CollectionsLanguageModal/CollectionsLanguageModal';\nimport SpecificPlantGallery from '../plants/SpecificPlantGallery/SpecificPlantGallery';\nimport GardenGallery from '../plants/GardenGallery/GardenGallery';\n\n// REDUX Store\nimport { RootState } from '../../store/store';\nimport { $selectedPlant } from '../../store/app/appSlice';\nimport { $tourSelected, $tourStep } from '../../store/app/tourSlice';\n\nconst ModalView = () => {\n const { push } = useHistory();\n const dispatch = useDispatch();\n const modalContent = useSelector((state: RootState) => state.modalReducer.modalContent);\n const tourStep = useSelector($tourStep);\n const tourSelected = useSelector($tourSelected);\n\n const [title, setTitle] = useState('');\n const [subTitle, setSubTitle] = useState('');\n\n useEffect(() => {\n if (modalContent) {\n // setGAModalEvent(modalContent);\n }\n\n switch (modalContent) {\n case 'Favorite':\n setTitle('My Favorites');\n subTitle.length && setSubTitle('');\n break;\n case 'Filter':\n setTitle('Filter by Characteristics');\n subTitle.length && setSubTitle('');\n break;\n case 'Layers':\n setTitle('');\n subTitle.length && setSubTitle('');\n break;\n case 'ViewTours':\n setTourModalTitle();\n break;\n case 'TourStopsOpen':\n setTitle('Tour Stops');\n subTitle.length && setSubTitle('');\n break;\n case 'LeafType - deciduous':\n setTitle('Deciduous');\n setSubTitle('Dropping its leaves during a dormant season, usually winter - as opposed to evergreen');\n break;\n case 'LeafType - evergreen':\n setTitle('Evergreen');\n subTitle.length && setSubTitle('Retaining its green leaves throughout the year.');\n break;\n case 'LeafType - semi-evergreen':\n setTitle('Semi-Evergreen');\n subTitle.length && setSubTitle('Retaining its green leaves throughout the year.');\n break;\n case 'LeafType - climbing':\n setTitle('Climbing');\n subTitle.length && setSubTitle('Description coming soon!');\n break;\n case 'Advanced':\n setTitle('Search Plants - Advanced');\n subTitle.length && setSubTitle('');\n break;\n case 'PlantGalleryModal':\n break;\n case 'GardenGalleryModal':\n break;\n case 'CollectionsLanguageModal':\n setTitle('');\n setSubTitle('');\n break;\n default:\n setTitle('');\n setSubTitle('');\n break;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [modalContent]);\n\n useEffect(() => {\n if (modalContent === 'ViewTours') {\n setTourModalTitle();\n }\n }, [tourStep]);\n\n const setTourModalTitle = () => {\n if (tourStep === 'TourStopsOpen') {\n setTitle(tourSelected.Tour_Name);\n setSubTitle('');\n } else {\n setTitle('Select Curated Tours');\n setSubTitle('Choose from a wide range of tours curated by the NYBG staff.');\n }\n };\n\n const returnContent = () => {\n switch (modalContent) {\n case 'Favorite':\n return ;\n case 'Filter':\n return ;\n case 'ViewTours':\n return ;\n case 'Advanced':\n return ;\n case 'PlantGalleryModal':\n return ;\n case 'GardenGalleryModal':\n return ;\n case 'CollectionsLanguageModal':\n return ;\n default:\n break;\n }\n };\n\n const returnHeaderAction = () => {\n switch (modalContent) {\n case 'Filter':\n return ;\n default:\n break;\n }\n };\n\n const closeModal = () => {\n dispatch(setModalContent(''));\n // push('/map');\n };\n\n const showModal = modalContent !== 'TourStopsClose' && modalContent.length > 0;\n\n return (\n closeModal()}\n headerAction={returnHeaderAction()}\n title={title}\n subTitle={subTitle}\n mainModalPaddingHide={true}\n content={returnContent()}\n />\n );\n};\n\nexport default ModalView;\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Link, useHistory, useLocation } from 'react-router-dom';\nimport { format } from 'date-fns';\n\nimport { setCardContent, setMinimized, setSelectedAccession } from '../../store/app/appSlice';\nimport { RootState } from '../../store/store';\n\nimport IconWhiteMap from '../icons/IconWhiteMap';\nimport IconChevronUp from '../icons/IconChevronUp';\nimport ResultsError from '../error/ResultsError';\n\nimport mapController from '../../controllers/MapController';\nimport ScientificNameFormatted from './searchResults/PlantResultScientificName/ScientificNameFormatted';\nimport { MAP_LINK__SPECIES, encodePathValue } from '../../utils/path.util';\nimport { getClean__CATALOG_DESC } from '../../utils/plant.util';\n\nimport { BASE_URL } from '../../config/config';\n\nimport '../../styles/css/plant.scss';\n\nconst NO_RESULTS = 'Data coming soon';\n\nconst plantAttributes = {\n NAME: '',\n COMMON_NAME_PRIMARY: '',\n ACC_NUM_AND_QUAL: '',\n CATALOG_DESC: '',\n FAMILY: '',\n HABIT_FULL: '',\n FL_COLOR_FULL: '',\n FL_COLOR_NOTE: '',\n ACC_YR: '',\n CURRENT_MEASURE_DT: '',\n CURRENT_SPREAD: '',\n HEIGHT: '',\n CURRENT_HEIGHT: '',\n SPREAD_UNIT: '',\n SPREAD_ACCURACY: '',\n CURRENT_SPREAD_FULL: '',\n DBH: '',\n DBH_UNIT: '',\n DBH_ACCURACY: '',\n CURRENT_DBH: '',\n CURRENT_DBH_FULL: '',\n SPREAD_1: '',\n MOST_RECENT_DBH: '',\n MOST_RECENT_DBH_DT: '',\n MOST_RECENT_HEIGHT: '',\n MOST_RECENT_HEIGHT_DT: '',\n MOST_RECENT_SPREAD: '',\n MOST_RECENT_SPREAD_DT: '',\n};\n\nfunction getDateFormated(timestamp: string) {\n return format(parseInt(timestamp), 'dd MMM yyyy');\n}\n\nconst SpecificAccession = () => {\n let { search } = useLocation();\n const { goBack } = useHistory();\n const dispatch = useDispatch();\n const cardMinimized = useSelector((state: RootState) => state.appReducer.cardMinimized);\n\n const [error, setError] = useState(false);\n const [loading, setLoading] = useState(true);\n const [plant, setPlant] = useState({\n attributes: plantAttributes,\n geometry: {},\n });\n\n const query = new URLSearchParams(search);\n const accession = query.get('id');\n\n useEffect(() => {\n mapController.queryPlantsBySpecificAccession(accession as string).then((results) => {\n if (results) {\n const { geometry, attributes } = results;\n dispatch(\n setSelectedAccession({\n attributes: attributes,\n geometry: geometry.toJSON(),\n })\n );\n setPlant(results as any);\n } else {\n setError(true);\n }\n setLoading(false);\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n
    \n
    \n
    dispatch(setMinimized(!cardMinimized))}>\n {\n dispatch(setCardContent(''));\n dispatch(setSelectedAccession(plant));\n }}\n >\n \n View on Map\n \n \n\n
    \n
    \n \n \n {plant?.attributes?.COMMON_NAME_PRIMARY ? plant.attributes.COMMON_NAME_PRIMARY : NO_RESULTS}\n \n
    \n
    \n
    \n {loading ? (\n

    Loading...

    \n ) : error ? (\n \n ) : (\n plant?.attributes && (\n <>\n

    \n {plant.attributes.NAME ? : NO_RESULTS}\n

    \n {plant.attributes.ACC_NUM_AND_QUAL && (\n

    \n Accession Number: \n {plant.attributes.ACC_NUM_AND_QUAL}\n

    \n )}\n
    \n {plant.attributes.CATALOG_DESC && (\n <>\n

    \n Landscape Uses:\n

    \n \n \n )}\n {plant.attributes.FAMILY && (\n <>\n

    \n Family:\n

    \n

    {`${plant.attributes.FAMILY} Family`}

    \n \n )}\n {plant.attributes.HABIT_FULL && (\n <>\n

    \n Habit:\n

    \n

    {plant.attributes.HABIT_FULL}

    \n \n )}\n\n {plant.attributes.FL_COLOR_FULL && (\n <>\n

    \n Flowers:\n

    \n

    \n {plant.attributes.FL_COLOR_FULL && plant.attributes.FL_COLOR_FULL}\n {/* {plant.attributes.FL_COLOR_NOTE && plant.attributes.FL_COLOR_NOTE} */}\n

    \n \n )}\n {plant.attributes.ACC_YR && (\n <>\n

    \n Accession Year:\n

    \n

    {plant.attributes.ACC_YR}

    \n \n )}\n\n {/*{plant.attributes.CURRENT_MEASURE_DT && (*/}\n {/* <>*/}\n {/*

    */}\n {/* Date Last Measured:*/}\n {/*

    */}\n {/*

    */}\n {/* {format(parseInt(plant.attributes.CURRENT_MEASURE_DT), 'dd MMM yyyy')}*/}\n {/*

    */}\n {/* */}\n {/*)}*/}\n\n {/*{plant.attributes.CURRENT_DBH_FULL && (*/}\n {/* <>*/}\n {/*

    */}\n {/* Trunk Diameter (inches):*/}\n {/*

    */}\n {/*

    {plant.attributes.CURRENT_DBH_FULL}

    */}\n {/* */}\n {/*)}*/}\n\n {/*{plant.attributes.CURRENT_HEIGHT && (*/}\n {/* <>*/}\n {/*

    */}\n {/* Height (feet):*/}\n {/*

    */}\n {/*

    {plant.attributes.CURRENT_HEIGHT}

    */}\n {/* */}\n {/*)}*/}\n\n {/*{plant.attributes.CURRENT_SPREAD && (*/}\n {/* <>*/}\n {/*

    */}\n {/* Spread (feet):*/}\n {/*

    */}\n {/*

    {plant.attributes.CURRENT_SPREAD}

    */}\n {/* */}\n {/*)}*/}\n\n {plant.attributes.MOST_RECENT_DBH && (\n <>\n

    \n Trunk Diameter (inches):\n

    \n

    {plant.attributes.MOST_RECENT_DBH}

    \n \n )}\n\n {plant.attributes.MOST_RECENT_DBH_DT && (\n <>\n

    \n Trunk Diameter (inches) Date Last Measured:\n

    \n {/*

    {plant.attributes.MOST_RECENT_DBH_DT}

    */}\n

    {getDateFormated(plant.attributes.MOST_RECENT_DBH_DT)}

    \n \n )}\n\n {plant.attributes.MOST_RECENT_HEIGHT && (\n <>\n

    \n Height (feet):\n

    \n

    {plant.attributes.MOST_RECENT_HEIGHT}

    \n \n )}\n\n {plant.attributes.MOST_RECENT_HEIGHT_DT && (\n <>\n

    \n Height (feet) Date Last Measured:\n

    \n

    {getDateFormated(plant.attributes.MOST_RECENT_HEIGHT_DT)}

    \n \n )}\n\n {plant.attributes.MOST_RECENT_SPREAD && (\n <>\n

    \n Spread (feet):\n

    \n

    {plant.attributes.MOST_RECENT_SPREAD}

    \n \n )}\n\n {plant.attributes.MOST_RECENT_SPREAD_DT && (\n <>\n

    \n Spread (feet) Date Last Measured:\n

    \n

    {getDateFormated(plant.attributes.MOST_RECENT_SPREAD_DT)}

    \n \n )}\n
    \n \n )\n )}\n
    \n
    \n );\n};\n\nexport default SpecificAccession;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch((error) => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (response.status === 404 || (contentType != null && contentType.indexOf('javascript') === -1)) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log('No internet connection found. App is running in offline mode.');\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then((registration) => {\n registration.unregister();\n })\n .catch((error) => {\n console.error(error.message);\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { BrowserRouter as Router, Switch, Route } from 'react-router-dom';\nimport { Provider } from 'react-redux';\nimport { HelmetProvider } from 'react-helmet-async';\nimport loadable from '@loadable/component';\nimport { ThemeProvider } from '@material-ui/core';\nimport { StylesProvider } from '@material-ui/core/styles';\nimport { theme } from './styles/muiThemeProvider';\n\nimport store from './store/store';\n\nimport Home from './components/home/Home';\nimport Header from './components/header/Header';\nimport FamilyIndex from './components/plants/SpecificFamily';\nimport GenusIndex from './components/plants/SpecificGenus';\nimport PlantIndex from './components/plants/SpecificPlant';\nimport ModalView from './components/modal/ModalView';\nimport SpecificAccession from './components/plants/SpecificAccession';\n\nimport * as serviceWorker from './serviceWorker';\nimport { BASE_URL } from './config/config';\n\nimport './index.scss';\n\nconst Map = loadable(() => import('./components/map/Map'));\nconst Error = loadable(() => import('./components/error/Error'));\n\ndeclare global {\n interface Window {\n gtag: any;\n }\n}\n// function usePageViews() {\n// let location = useLocation();\n// useEffect(() => {\n// window.gtag('config', 'UA-163210212-1', {\n// page_path: location.pathname,\n// });\n// }, [location]);\n// }\n// usePageViews();\n\nReactDOM.render(\n \n \n \n \n \n \n
    \n \n \n } />\n \n \n \n \n \n \n \n \n \n \n \n \n \n ,\n document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","export const POINTS_OF_INTERENST = 'Points of Interest';\nexport const pointsConfig = [\n {\n label: POINTS_OF_INTERENST,\n options: [],\n },\n];\n\nexport const mapLayerToggles = [\n {\n label: 'Plant Data',\n id: 'plantData',\n },\n {\n label: 'Artistic Basemap',\n id: 'art',\n },\n // {\n // label: 'Location Codes',\n // id: 'locationCodes',\n // },\n];\n\nexport const ACCESSIBLE_ROUTES_PATHS = 'Accessible Routes & Paths';\nexport const adaConfig = [\n {\n label: ACCESSIBLE_ROUTES_PATHS,\n options: [],\n },\n];\n","import _includes from 'lodash/includes';\nimport { getDayOfYear, getWeek } from 'date-fns';\n\nimport { FloweringRecord } from '../../../store/app/phenologySlice';\n\nexport interface PlantsChartDatasets {\n dateOriginal: string;\n date: Date;\n year: number;\n flowering: boolean;\n fruiting: boolean;\n weekInYear: number;\n}\n\nexport interface PhenologyChartDataInterface {\n flowering: string[];\n fruiting: string[];\n}\n\nexport type PhenologyChartDataKeys = 'flowering' | 'fruiting';\n\nexport const getPlantsChartDatasets: any = (data: any, reproductiveStatusList: []) => {\n return data?.map((date: Date, index: number) => {\n return {\n date: date,\n year: date.getFullYear(),\n weekInYear: getWeek(date),\n flowering: reproductiveStatusList ? _includes(reproductiveStatusList[index], 'F') : undefined,\n fruiting: reproductiveStatusList ? _includes(reproductiveStatusList[index], 'R') : undefined,\n reproductiveStatus: reproductiveStatusList[index],\n };\n });\n};\n\nexport const getUniqueYears = (datasets: PhenologyChartDataInterface) => {\n const years = new Set();\n datasets.flowering.forEach((dateString) => {\n years.add(new Date(dateString).getFullYear());\n });\n datasets.fruiting.forEach((dateString) => {\n years.add(new Date(dateString).getFullYear());\n });\n\n return [...years].sort().reverse();\n};\n\n/**\n * Filter plants for year based on specified selection\n * @param {Array} plantsChartData - List of plant checked dates\n * @param {Number} year - Year integer\n * @param {String} section - Specified selection ['flowering','fruiting']\n */\nexport const filterByYear = (datasets: PhenologyChartDataInterface, year: number, section: PhenologyChartDataKeys) => {\n const dates = datasets[section];\n\n return dates.filter((dateString: string) => {\n const date = new Date(dateString);\n return year === date.getFullYear();\n });\n};\n\n/**\n * Filter plants for week based on specified selection\n * @param {Array} selectedPlantsByYear - List of selected Plants for Year\n * @param {Number} weekInt - Week in year\n */\nexport const getPlantsInWeek = (dateStrings: string[], weekInt: number) => {\n return dateStrings.filter((date) => {\n return getWeek(new Date(date)) === weekInt;\n });\n};\n\n/**\n * @description Get plant Check Dates\n *\n * @param {string} CHECK_DT - Plant Check Date\n * @return {[]} Plant Check Date\n */\nconst getCheckDates = (CHECK_DT: string) => {\n return CHECK_DT ? CHECK_DT.split('@') : [];\n};\n\n/**\n * @description Get plant Reproductive Statuses\n *\n * @param {string} REPRODUCTIVE_STATUS - Reproductive Status\n * @return {[]} Reproductive Statuses list\n */\nconst getReproductiveStatuses = (REPRODUCTIVE_STATUS: string) => {\n return REPRODUCTIVE_STATUS ? REPRODUCTIVE_STATUS.split('@') : [];\n};\n\n/**\n * @description Get Phenology Chart Data\n *\n * @param {[]} features - Query features\n * @return {Object} Phenology Chart Data\n */\nexport const getPhenologyChartData = (features: []) => {\n const flowering = new Set();\n const fruiting = new Set();\n features.forEach((feat: any) => {\n const { REPRODUCTIVE_STATUS, CHECK_DT } = feat.attributes;\n\n const checkDates = getCheckDates(CHECK_DT);\n const reproductiveStatuses = getReproductiveStatuses(REPRODUCTIVE_STATUS);\n\n checkDates.forEach((date: any, index: any) => {\n const reproductiveStatus = reproductiveStatuses[index];\n if (reproductiveStatus && _includes(reproductiveStatus, 'F')) {\n flowering.add(date);\n }\n\n if (reproductiveStatus && _includes(reproductiveStatus, 'R')) {\n fruiting.add(date);\n }\n });\n });\n\n return {\n flowering: [...flowering],\n fruiting: [...fruiting],\n };\n};\n\n/**\n * @description Get Phenology Data\n *\n * @param {[]} features - Query features\n * @return {FloweringRecord[]} - Phenology flowering Data\n */\nexport const getPhenologyFloweringData = (features: []) => {\n const flowering: FloweringRecord[] = [];\n features.forEach((feat: any) => {\n const { NAME, COMMON_NAME_PRIMARY, REPRODUCTIVE_STATUS, CHECK_DT, ALIVE } = feat.attributes;\n\n const checkDates = getCheckDates(CHECK_DT);\n const reproductiveStatuses = getReproductiveStatuses(REPRODUCTIVE_STATUS);\n\n checkDates.forEach((date: any, index: number) => {\n const reproductiveStatus = reproductiveStatuses[index];\n if (reproductiveStatus && _includes(reproductiveStatus, 'F')) {\n const dayOfYear = getDayOfYear(new Date(date));\n flowering.push({\n dateString: date,\n name: NAME,\n commonName: COMMON_NAME_PRIMARY,\n dayOfYear: dayOfYear,\n NAME,\n COMMON_NAME_PRIMARY,\n ALIVE,\n });\n }\n });\n });\n\n return flowering;\n};\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { RootState } from '../store';\n\nimport {\n SEARCH_OPTIONS,\n SEARCH_OPTIONS_ADVANCED,\n SEARCH_PLANT_ALPHABET_SECTIONS,\n URL__SEARCH_TYPE,\n URL__SEARCH_TYPE_ADVANCED,\n URL__SEARCH_VALUE,\n} from '../../config/plant.config';\nimport { getResultKey } from '../../utils/plant.util';\nimport { PlantPreviewData } from '../../interfaces/plantData';\nimport { GardenLocation } from './modalSlice';\n\nconst query = new URLSearchParams(window.location.search);\nconst searchTypeFromURL: string | null = query.get(URL__SEARCH_TYPE);\nconst searchTypeAdvancedFromURL: string | null = query.get(URL__SEARCH_TYPE_ADVANCED);\nconst searchValueFromURL: string | null = query.get(URL__SEARCH_VALUE);\n\nconst allFavoritesString = localStorage.getItem('favoritePlants');\nconst allFavorites = allFavoritesString ? JSON.parse(allFavoritesString) : [];\nconst initialSearchTerms: any = {};\nSEARCH_OPTIONS.forEach((option: string) => {\n if (option === 'Advanced') {\n SEARCH_OPTIONS_ADVANCED.forEach((item) => {\n if (searchValueFromURL && searchTypeAdvancedFromURL === item.esriField) {\n initialSearchTerms[getResultKey(option, item.esriField)] = searchValueFromURL;\n } else {\n if (SEARCH_PLANT_ALPHABET_SECTIONS.includes(item.esriField)) {\n initialSearchTerms[getResultKey(option, item.esriField)] = 'A';\n } else {\n initialSearchTerms[getResultKey(option, item.esriField)] = '';\n }\n }\n });\n } else {\n if (searchValueFromURL && searchTypeFromURL === option) {\n initialSearchTerms[getResultKey(option)] = searchValueFromURL;\n } else {\n initialSearchTerms[getResultKey(option)] = '';\n }\n }\n});\n\nexport const DEFAULT_SEARCH_TYPE = 'Plants';\nexport const selectedAccessionDefault = {\n attributes: {\n ACC_NUM_AND_QUAL: '',\n MAPPED: '',\n },\n geometry: {},\n};\n\nexport const apiPlantImagesDefault = {\n NAME_NUMS: [],\n images: {},\n};\n\nexport const selectedPlanInitialState = {\n NAME: '',\n NAME_NUM: undefined,\n FAMILY: '',\n COMMON_NAME_PRIMARY: '',\n RANGE: '',\n HABIT_FULL: '',\n CATALOG_DESC: '',\n};\n\nexport interface AppState {\n shareModalActive: boolean;\n species: string;\n cardContent: string;\n cardMinimized: boolean;\n legendExpanded: boolean;\n mobileMenuOpen: boolean;\n // snackbarOpen: boolean;\n // snackbarResults: number;\n mapLoaded: boolean;\n favoritePlants: Array;\n searchWidgetLocation: string;\n searchType: string;\n searchTypeAdvanced: string;\n searchTerms: any;\n searchCurrentSelection: any;\n allLivingRecordsCheckbox: boolean;\n selectedAccession: {\n attributes?: any;\n geometry?: any;\n };\n selectedPanel: string;\n gardenLocations: object[];\n gardenCodeSelected: string;\n definitionExpressionQueryAttributes: Array;\n fetchAdvancedSearch: boolean;\n selectedPlant: PlantPreviewData;\n apiPlantImages: {\n NAME_NUMS: any;\n images: any;\n };\n}\n\nexport const appSlice = createSlice({\n name: 'app',\n initialState: {\n shareModalActive: false,\n species: '',\n cardContent: '',\n cardMinimized: true,\n legendExpanded: false,\n mobileMenuOpen: false,\n // snackbarOpen: false,\n // snackbarResults: 0,\n mapLoaded: false,\n favoritePlants: allFavorites,\n searchWidgetLocation: '',\n searchType: searchTypeFromURL || DEFAULT_SEARCH_TYPE,\n searchTypeAdvanced: searchTypeAdvancedFromURL || SEARCH_OPTIONS_ADVANCED[0].esriField,\n searchTerms: initialSearchTerms,\n searchCurrentSelection: {},\n allLivingRecordsCheckbox: true,\n selectedAccession: selectedAccessionDefault,\n selectedPanel: '',\n gardenLocations: [],\n gardenCodeSelected: '',\n definitionExpressionQueryAttributes: [],\n fetchAdvancedSearch: true,\n selectedPlant: selectedPlanInitialState,\n apiPlantImages: apiPlantImagesDefault,\n },\n reducers: {\n setShareModalActive: (state: AppState, action: PayloadAction) => {\n state.shareModalActive = action.payload;\n },\n setSpecies: (state: AppState, action: PayloadAction) => {\n state.species = action.payload;\n },\n setCardContent: (state: AppState, action: PayloadAction) => {\n state.cardContent = action.payload;\n },\n setMinimized: (state: AppState, action: PayloadAction) => {\n state.cardMinimized = action.payload;\n },\n setLegendExpanded: (state: AppState, action: PayloadAction) => {\n state.legendExpanded = action.payload;\n },\n setMobileMenuOpen: (state: AppState, action: PayloadAction) => {\n state.mobileMenuOpen = action.payload;\n },\n // setSnackbar: (state: AppState, action: PayloadAction) => {\n // state.snackbarOpen = action.payload;\n // },\n // setSnackbarResults: (state: AppState, action: PayloadAction) => {\n // state.snackbarResults = action.payload;\n // },\n setMapLoaded: (state: AppState, action: PayloadAction) => {\n state.mapLoaded = action.payload;\n },\n updateFavoritePlants: (state: AppState, action: PayloadAction) => {\n state.favoritePlants = action.payload;\n },\n setSearchWidgetLocation: (state: AppState, action: PayloadAction) => {\n state.searchWidgetLocation = action.payload;\n },\n setSearchType: (state: AppState, action: PayloadAction) => {\n state.searchType = action.payload;\n },\n setSearchTypeAdvanced: (state: AppState, action: PayloadAction) => {\n state.searchTypeAdvanced = action.payload;\n },\n setSearchTerms: (state: AppState, action: PayloadAction) => {\n state.searchTerms = action.payload;\n },\n setSearchCurrentSelection: (state: AppState, action: PayloadAction) => {\n state.searchCurrentSelection = action.payload;\n },\n setAllLivingRecordsCheckbox: (state: AppState, action: PayloadAction) => {\n state.allLivingRecordsCheckbox = action.payload;\n },\n setSelectedAccession: (state: AppState, action: PayloadAction) => {\n state.selectedAccession = action.payload;\n },\n setSelectedPanel: (state: AppState, action: PayloadAction) => {\n state.selectedPanel = action.payload;\n },\n setGardenLocations: (state: AppState, action: PayloadAction) => {\n state.gardenLocations = action.payload;\n },\n setGardenCodeSelected: (state: AppState, action: PayloadAction) => {\n state.gardenCodeSelected = action.payload;\n },\n setDefinitionExpressionQueryAttributes: (\n state: AppState,\n action: PayloadAction\n ) => {\n state.definitionExpressionQueryAttributes = action.payload;\n },\n setFetchAdvancedSearch: (state: AppState, action: PayloadAction) => {\n state.fetchAdvancedSearch = action.payload;\n },\n setSelectedPlant: (state: AppState, action: PayloadAction) => {\n state.selectedPlant = action.payload;\n },\n setApiPlantImages: (state: AppState, action: PayloadAction) => {\n state.apiPlantImages = action.payload;\n },\n },\n});\n\nexport const {\n setShareModalActive,\n setSpecies,\n setCardContent,\n setMinimized,\n setLegendExpanded,\n setMobileMenuOpen,\n // setSnackbar,\n // setSnackbarResults,\n setMapLoaded,\n updateFavoritePlants,\n setSearchWidgetLocation,\n setSearchType,\n setSearchTypeAdvanced,\n setSearchTerms,\n setSearchCurrentSelection,\n setAllLivingRecordsCheckbox,\n setSelectedAccession,\n setSelectedPanel,\n setGardenLocations,\n setGardenCodeSelected,\n setDefinitionExpressionQueryAttributes,\n setFetchAdvancedSearch,\n setSelectedPlant,\n setApiPlantImages,\n} = appSlice.actions;\n\nexport const selectShareModalActive = (state: RootState) => state.appReducer.shareModalActive;\nexport const species = (state: any) => state.app.species;\nexport const cardContent = (state: RootState) => state.appReducer.cardContent;\nexport const $cardMinimized = (state: RootState) => state.appReducer.cardMinimized;\nexport const $legendExpanded = (state: RootState) => state.appReducer.legendExpanded;\nexport const selectMobileMenuOpen = (state: RootState) => state.appReducer.mobileMenuOpen;\n// export const snackbarOpen = (state: RootState) => state.appReducer.snackbarOpen;\n// export const snackbarResults = (state: RootState) => state.appReducer.snackbarResults;\nexport const $mapLoaded = (state: RootState) => state.appReducer.mapLoaded;\nexport const selectFavoritePlants = (state: RootState) => state.appReducer.favoritePlants;\nexport const searchWidgetLocation = (state: RootState) => state.appReducer.searchWidgetLocation;\nexport const $searchType = (state: RootState) => state.appReducer.searchType;\nexport const $searchTypeAdvanced = (state: RootState) => state.appReducer.searchTypeAdvanced;\nexport const $searchTerms = (state: RootState) => state.appReducer.searchTerms;\nexport const $searchCurrentSelection = (state: RootState) => state.appReducer.searchCurrentSelection;\nexport const $allLivingRecordsCheckbox = (state: RootState) => state.appReducer.allLivingRecordsCheckbox;\nexport const $selectedAccession = (state: RootState) => state.appReducer.selectedAccession;\nexport const $selectedPanel = (state: RootState) => state.appReducer.selectedPanel;\nexport const $gardenLocations = (state: RootState) => state.appReducer.gardenLocations;\nexport const $gardenCodeSelected = (state: RootState) => state.appReducer.gardenCodeSelected;\nexport const $definitionExpressionQueryAttributes = (state: RootState) =>\n state.appReducer.definitionExpressionQueryAttributes;\nexport const $fetchAdvancedSearch = (state: RootState) => state.appReducer.fetchAdvancedSearch;\nexport const $selectedPlant = (state: RootState) => state.appReducer.selectedPlant;\nexport const $apiPlantImages = (state: RootState) => state.appReducer.apiPlantImages;\n\nexport default appSlice.reducer;\n","import React from 'react';\n\nimport './ScientificNameFormated.scss';\n\nexport default function ScientificNameFormatted({ plantName }: { plantName: string }) {\n // Match name between single quotes\n const regexMatch = plantName.match(/'(.*)'/);\n\n if (regexMatch) {\n const matchedName = regexMatch[0];\n const [plantNameFirst, plantNameLast] = plantName.split(matchedName);\n\n return (\n <>\n {plantNameFirst}\n {matchedName}\n {plantNameLast}\n \n );\n } else {\n return {plantName};\n }\n}\n\nexport const scientificNameFormatted = (plantName: string) => {\n // Match name between single quotes\n const regexMatch = plantName.match(/'(.*)'/);\n\n if (regexMatch) {\n const matchedName = regexMatch[0];\n const [plantNameFirst, plantNameLast] = plantName.split(matchedName);\n\n return `${plantNameFirst}${matchedName}${plantNameLast}`;\n } else {\n return plantName;\n }\n};\n","import _sortBy from 'lodash/sortBy';\nimport _pickBy from 'lodash/pickBy';\nimport _identity from 'lodash/identity';\nimport _keyBy from 'lodash/keyBy';\nimport _merge from 'lodash/merge';\nimport _pick from 'lodash/pick';\nimport _values from 'lodash/values';\n\nimport mapController from '../controllers/MapController';\n\n// Store\nimport store from '../store/store';\nimport { setSearchDefinitionExpression } from '../store/app/filterSlice';\nimport { setSearchCurrentSelection, setSearchWidgetLocation } from '../store/app/appSlice';\nimport { appHistory } from '../store/appHistory';\n\n// Config\nimport {\n LOCATIONS_ESRI_FIELD,\n LOCATIONS_GARDEN_CODE,\n LOCATIONS_GROUP_FIELD,\n LOCATIONS_SEARCH_LABEL,\n} from '../config/plant.config';\n\n/**\n * Generate Plants query Where Clause\n *\n * @param {String} searchValue - Search Value [eg. 'roses']\n * @param {String} searchField - Search Field [eg. 'Plants', 'Advanced', etc...]\n * @param {String} searchFieldAdvanced - Advanced Search Field [eg. 'FAMILY_AND_FAMILY_COMMON']\n *\n * Samples of search Field Advanced\n * [eg. FAMILY_AND_FAMILY_COMMON: CASUARINACEAE,SHE-OAK]\n * [eg. GENUS_AND_GENUS_COMMON: QUERCUS,OAK]\n *\n * @return {[] || String} - List of Definition Expressions OR 1=1\n */\nexport const generatePlantQueryWhereClause = (\n searchValue: string,\n searchField: string,\n searchFieldAdvanced: string\n) => {\n const { filterDefinitionExpression } = store.getState().filterReducer;\n\n const expressions = [];\n const queriesDefault: string[] = [];\n const queriesBackup: string[] = [];\n\n if (searchValue) {\n const re = /\\s+/i; // literal notation\n const values = searchValue.trim().split(re);\n\n values.forEach((value) => {\n const valueProcessed = value.replace(/'/g, '');\n const searchSegment = valueProcessed.toUpperCase();\n\n if (searchField === 'Advanced') {\n const SEARCH_FIELD_ADVANCED = searchFieldAdvanced.toUpperCase();\n\n const queryAdvancedDefault =\n `(UPPER(${SEARCH_FIELD_ADVANCED}) LIKE '${searchSegment},%' OR ` +\n `UPPER(${SEARCH_FIELD_ADVANCED}) LIKE '%,${searchSegment}' OR ` +\n `UPPER(${SEARCH_FIELD_ADVANCED}) LIKE '%,${searchSegment},%' OR ` +\n `UPPER(${SEARCH_FIELD_ADVANCED}) = '${searchSegment}')`;\n queriesDefault.push(queryAdvancedDefault);\n\n const queryAdvancedBackup = `UPPER(${SEARCH_FIELD_ADVANCED}) LIKE '%${searchSegment}%'`;\n queriesBackup.push(queryAdvancedBackup);\n } else {\n const SEARCH_FIELD = 'GENUS_AND_GENUS_COMMON';\n const BACKUP_FIELD = 'ETI';\n\n const queryDefault =\n `(UPPER(${SEARCH_FIELD}) LIKE '${searchSegment},%' OR ` +\n `UPPER(${SEARCH_FIELD}) LIKE '%,${searchSegment}' OR ` +\n `UPPER(${SEARCH_FIELD}) LIKE '%,${searchSegment},%' OR ` +\n `UPPER(${SEARCH_FIELD}) = '${searchSegment}')`;\n queriesDefault.push(queryDefault);\n\n const queryBackup = `(UPPER(${BACKUP_FIELD}) LIKE '%${searchSegment}%')`;\n queriesBackup.push(queryBackup);\n }\n });\n\n expressions.push(queriesDefault.join(' AND '), queriesBackup.join(' AND '));\n }\n\n const finalExpressions = filterDefinitionExpression.length\n ? expressions.map((query) => `${query} AND ${filterDefinitionExpression}`)\n : expressions;\n\n return finalExpressions.length ? finalExpressions : '1=1';\n};\n\n/**\n * Handle Search Results\n *\n * @param {String} searchTerm - Search term\n * @param {String} queryUrl - Query URL\n * @param {Object} results - Query results\n * @param {String} filterDefinitionExpression - Filter Definition Expression\n * @return {Object} Prepared result\n */\nexport function handleSearchResults(\n searchTerm: string,\n queryUrl: any,\n results: any,\n filterDefinitionExpression: string\n) {\n return {\n filter: filterDefinitionExpression,\n query: queryUrl,\n results: results?.features.map((item: { attributes: any }) => item.attributes),\n searchTerm: searchTerm,\n };\n}\n\n/**\n * Query Locations\n *\n * @return {Object} - Query Locations Results\n */\nexport const queryLocations = async () => {\n const where = '1=1';\n const queryResults__PlantCenter = await mapController.queryLocationForSearch(\n `${where} AND LOCATION_GROUP_NOW <> 'NULL'`\n );\n const queryResults__GardenLocations = await mapController.queryGardenLocations(\n `${where} AND GardenCode <> 'NULL' AND Display <> 'No'`\n );\n\n const queryResults__PlantCenter__Attributes = queryResults__PlantCenter.features.map((item: any) => {\n return { ...item.attributes };\n });\n const queryResults__GardenLocations__Attributes = queryResults__GardenLocations.features.map((location: any) => {\n return {\n ...location.attributes,\n geometry: location.geometry.toJSON(),\n };\n });\n\n const mergedResults = _merge(\n _keyBy(queryResults__PlantCenter__Attributes, LOCATIONS_GROUP_FIELD),\n _keyBy(queryResults__GardenLocations__Attributes, LOCATIONS_GARDEN_CODE)\n );\n\n const filteredGardensKeys = Object.keys(mergedResults).filter((key) => {\n return key !== 'null' && !key.includes('@');\n });\n const mergedResultsClean = _pick(mergedResults, filteredGardensKeys);\n const gardenLocationsFinal = _values(mergedResultsClean);\n\n const locationsAttributes = gardenLocationsFinal.filter((attribute: any) => {\n return attribute[LOCATIONS_GROUP_FIELD] && attribute[LOCATIONS_ESRI_FIELD] && attribute[LOCATIONS_GARDEN_CODE];\n });\n const locationsAttributesSorted = _sortBy(locationsAttributes, LOCATIONS_ESRI_FIELD);\n\n return {\n locationsAttributes: locationsAttributesSorted,\n query: where,\n queryResults: queryResults__PlantCenter,\n };\n};\n\n/**\n * Get Update Filter Options\n *\n * @param {[]} filterSelectedOptions - List of filter Selected Options\n * @param {[]} locations - List of garden locations\n *\n * @return {[]} - Update Filter Options\n */\nexport function getUpdateFilterOptions(filterSelectedOptions: any, locations: string[]) {\n return filterSelectedOptions.map((filter: any) => {\n if (filter.label === LOCATIONS_SEARCH_LABEL) {\n return {\n ...filter,\n options: [\n ...filter.options,\n ...locations.map((location: string) => ({\n label: location,\n values: [location],\n })),\n ],\n };\n } else {\n return filter;\n }\n });\n}\n\n/**\n * Get Garden Location\n *\n * @return {Object} locations - List of garden locations\n */\nexport async function getGardenLocation() {\n const { locationsAttributes } = await queryLocations();\n\n const locations: string[] = locationsAttributes.map((attribute) => attribute[LOCATIONS_ESRI_FIELD]);\n\n return { locationsAttributes, locations };\n}\n\n/**\n * Get plants results\n * @param {String} searchValue - Search value\n * @param {String} searchField - Search field\n * @param {String} searchFieldAdvanced - Advanced search field\n * @return {Object} - Returning query and query results\n */\nexport const queryPlants = async (searchValue: string, searchField: string, searchFieldAdvanced: string) => {\n let results;\n let query;\n\n const where = generatePlantQueryWhereClause(searchValue, searchField, searchFieldAdvanced);\n const wherePrimary = where[0];\n query = wherePrimary;\n results = await mapController.queryPlantsForSearch(wherePrimary);\n\n if (results.features.length === 0) {\n const whereSecondary = where[1];\n query = whereSecondary;\n store.dispatch(setSearchDefinitionExpression(whereSecondary));\n results = await mapController.queryPlantsForSearch(whereSecondary);\n }\n results.features.sort((a: any, b: any) => {\n const aSortValue = a.attributes.SORT_NAME ?? a.attributes.NAME;\n const bSortValue = b.attributes.SORT_NAME ?? b.attributes.NAME;\n return aSortValue.toLowerCase() > bSortValue.toLowerCase() ? 1 : -1;\n });\n\n return {\n query: query,\n queryResults: results,\n };\n};\n\n/**\n * Set URL path\n *\n * @param {String} searchField - Search Field [eg. 'Plants', 'Advanced', etc...]\n * @param {String} searchFieldAdvanced - Advanced Search Field [eg. 'FAMILY_AND_FAMILY_COMMON']\n * @param {String} searchValue - Search Value [eg. 'roses']\n */\nexport const setURLPath = (searchField: string, searchFieldAdvanced: string, searchValue = '') => {\n const urlParams = {\n field: searchField,\n fieldAdvanced: searchField === 'Advanced' ? searchFieldAdvanced : undefined,\n value: searchValue?.length > 0 ? searchValue : undefined,\n };\n\n const urlParamsClean = _pickBy(urlParams, _identity);\n const urlSearchParams = new URLSearchParams(urlParamsClean as any).toString();\n const searchQuery = `?${urlSearchParams}`;\n const searchValues = `/map/search${searchQuery}`;\n\n store.dispatch(setSearchWidgetLocation(searchValues));\n store.dispatch(setSearchCurrentSelection({ ...urlParamsClean }));\n if (appHistory.location.search !== searchQuery) {\n appHistory.push(searchValues);\n }\n};\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { PHENOLOGY_SEARCH_YEAR } from '../../utils/phenologySearch';\nimport { RootState } from '../store';\n\nexport interface FloweringRecord {\n dateString: string;\n dayOfYear: number;\n name: string;\n commonName: string;\n NAME: string;\n COMMON_NAME_PRIMARY: string;\n ALIVE: string;\n}\n\nexport interface FloweringDay {\n date: string;\n dayOfYear: number;\n}\n\nexport interface PhenologyState {\n phenologyFlowering: Array | undefined;\n phenologyFloweringDayStart: FloweringDay | undefined;\n phenologyFloweringDayEnd: FloweringDay | undefined;\n phenologyFloweringResults: Array | undefined;\n phenologyDisplayFloweringResults: boolean;\n phenologySliderStartingDate: string;\n phenologySliderValues:\n | {\n start: number;\n end: number;\n }\n | undefined;\n}\n\nconst initialState: PhenologyState = {\n phenologyFlowering: undefined,\n phenologyFloweringDayStart: undefined,\n phenologyFloweringDayEnd: undefined,\n phenologyFloweringResults: undefined,\n phenologyDisplayFloweringResults: false,\n phenologySliderStartingDate: new Date(PHENOLOGY_SEARCH_YEAR, 0, 1).toString(),\n phenologySliderValues: undefined,\n};\n\nexport const phenologySlice = createSlice({\n name: 'phenology',\n initialState,\n reducers: {\n setPhenologyFlowering: (state: PhenologyState, action: PayloadAction) => {\n state.phenologyFlowering = action.payload;\n },\n setPhenologyFloweringDateStart: (\n state: PhenologyState,\n action: PayloadAction\n ) => {\n state.phenologyFloweringDayStart = action.payload;\n },\n setPhenologyFloweringDateEnd: (\n state: PhenologyState,\n action: PayloadAction\n ) => {\n state.phenologyFloweringDayEnd = action.payload;\n },\n setPhenologyFloweringResults: (\n state: PhenologyState,\n action: PayloadAction\n ) => {\n state.phenologyFloweringResults = action.payload;\n },\n setPhenologyDisplayFloweringResults: (\n state: PhenologyState,\n action: PayloadAction\n ) => {\n state.phenologyDisplayFloweringResults = action.payload;\n },\n setPhenologySliderStartingDate: (\n state: PhenologyState,\n action: PayloadAction\n ) => {\n state.phenologySliderStartingDate = action.payload;\n },\n setPhenologySliderValues: (\n state: PhenologyState,\n action: PayloadAction\n ) => {\n state.phenologySliderValues = action.payload;\n },\n },\n});\n\nexport const {\n setPhenologyFlowering,\n setPhenologyFloweringDateStart,\n setPhenologyFloweringDateEnd,\n setPhenologyFloweringResults,\n setPhenologyDisplayFloweringResults,\n setPhenologySliderValues,\n setPhenologySliderStartingDate,\n} = phenologySlice.actions;\n\nexport const $phenologyFlowering = (state: RootState) => state.phenologyReducer.phenologyFlowering;\nexport const $phenologyFloweringDayStart = (state: RootState) => state.phenologyReducer.phenologyFloweringDayStart;\nexport const $phenologyFloweringDayEnd = (state: RootState) => state.phenologyReducer.phenologyFloweringDayEnd;\nexport const $phenologyFloweringResults = (state: RootState) => state.phenologyReducer.phenologyFloweringResults;\nexport const $phenologyDisplayFloweringResults = (state: RootState) =>\n state.phenologyReducer.phenologyDisplayFloweringResults;\nexport const $phenologySliderStartingDate = (state: RootState) => state.phenologyReducer.phenologySliderStartingDate;\nexport const $phenologySliderValues = (state: RootState) => state.phenologyReducer.phenologySliderValues;\n\nexport default phenologySlice.reducer;\n","export const LOCATIONS_SEARCH_LABEL: string = 'Garden Location';\nexport const LOCATIONS_ESRI_FIELD: string = 'LOCATION_GROUP_NOW_FULL';\nexport const LOCATIONS_GROUP_FIELD: string = 'LOCATION_GROUP_NOW';\nexport const LOCATIONS_GARDEN_LOCATION: string = 'GardenLocation';\nexport const LOCATIONS_GARDEN_CODE: string = 'GardenCode';\nexport const LOCATIONS_GARDEN_WEBSITE: string = 'GardenWebsite';\nexport const LOCATIONS_GARDEN_XY = ['X', 'Y'];\n\nexport const FIELD_FAMILY_AND_FAMILY_COMMON = 'FAMILY_AND_FAMILY_COMMON';\nexport const FIELD_GENUS_AND_GENUS_COMMON = 'GENUS_AND_GENUS_COMMON';\nexport const FIELD_NAME = 'NAME';\nexport const FIELD_COMMON_NAME_ESRI = 'GENUS_COMMON_NAME_PRIMARY';\n\nexport const SEARCH_OPTIONS_FIELD_PLANTS = 'Plants';\nexport const SEARCH_OPTIONS_FIELD_ADVANCED = 'Advanced';\nexport const SEARCH_OPTIONS_FIELD_PHENOLOGY = \"What's In Bloom?\";\nexport const SEARCH_OPTIONS = [\n LOCATIONS_SEARCH_LABEL,\n SEARCH_OPTIONS_FIELD_PLANTS,\n SEARCH_OPTIONS_FIELD_ADVANCED,\n SEARCH_OPTIONS_FIELD_PHENOLOGY,\n];\nexport const SEARCH_OPTIONS_ADVANCED = [\n { label: 'Family', esriField: FIELD_FAMILY_AND_FAMILY_COMMON, displayField: 'FAMILY' },\n { label: 'Genus', esriField: FIELD_GENUS_AND_GENUS_COMMON, displayField: 'GENUS' },\n { label: 'Scientific', esriField: FIELD_NAME, displayField: 'NAME' },\n { label: 'Common', esriField: FIELD_COMMON_NAME_ESRI, displayField: 'COMMON_NAME_PRIMARY' },\n { label: 'Accession And Qualifier', esriField: 'ACC_NUM_AND_QUAL', displayField: 'ACC_NUM_AND_QUAL' },\n];\n\nexport const SEARCH_PLANT_ALPHABET_EXCLUDE_SECTIONS = [FIELD_FAMILY_AND_FAMILY_COMMON, FIELD_GENUS_AND_GENUS_COMMON];\nexport const SEARCH_PLANT_ALPHABET_SECTIONS = [FIELD_NAME, FIELD_COMMON_NAME_ESRI];\nexport const SEARCH_PLANT_ALPHABET_SECTIONS_DISABLE_SEARCH_PLACEHOLDER = 'Browse Plants from List';\nexport const SEARCH_PLANT_DISABLE_LOCATION_PLACEHOLDER = 'Browse Locations from List';\n\nexport const alphabet = [\n \"'\",\n 'A',\n 'B',\n 'C',\n 'D',\n 'E',\n 'F',\n 'G',\n 'H',\n 'I',\n 'J',\n 'K',\n 'L',\n 'M',\n 'N',\n 'O',\n 'P',\n 'Q',\n 'R',\n 'S',\n 'T',\n 'U',\n 'V',\n 'W',\n 'X',\n 'Y',\n 'Z',\n];\n\nexport const AUTOSIZER__COLUMN_WIDTH = 400;\nexport const AUTOSIZER__ROW_HEIGHT = 70;\nexport const AUTOSIZER_GARDEN_LOCATION__ROW_HEIGHT = 70;\n\n// Plants URL path query\nexport const URL__SEARCH_VALUE = 'value';\nexport const URL__SEARCH_TYPE = 'field';\nexport const URL__SEARCH_TYPE_ADVANCED = 'fieldAdvanced';\n\n// Tour URL path query\nexport const URL__TOUR_ID = 'tourID';\nexport const URL__TOUR_STOP = 'tourStop';\nexport const URL__TOUR_NAME = 'tourName';\n","import React from 'react';\n\nconst Loader = () => {\n return (\n
    \n
    \n
    \n );\n};\n\nexport default Loader;\n","import * as React from 'react';\n\nexport default function IconPhotoLibrary() {\n return (\n \n Photo Library Icon\n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { $apiPlantImages } from '../../../store/app/appSlice';\nimport { getPlantImages } from '../../../utils/plant.util';\n\nimport IconPhotoLibrary from '../../icons/IconPhotoLibrary';\nimport { setModalContent, setModalGardenLocation } from '../../../store/app/modalSlice';\nimport NYBGLogo from '../../../images/NYBG_Logo_Black_RGB.svg';\n\nimport './WidgetImage.scss';\n\nexport default function WidgetImage({\n alt,\n width = 125,\n height = 80,\n NAME_NUM,\n garden,\n gallery = false,\n tour = false,\n}: {\n alt: string;\n width?: number;\n height?: number;\n NAME_NUM?: number;\n garden?: any;\n gallery?: boolean;\n tour?: boolean;\n}) {\n const dispatch = useDispatch();\n const [plantImage, setPlantImage] = useState(undefined);\n const apiPlantImages = useSelector($apiPlantImages);\n\n useEffect(() => {\n if (!tour && NAME_NUM && !apiPlantImages.NAME_NUMS.includes(NAME_NUM!)) {\n getPlantImages(NAME_NUM).then((plantsImages) => {\n handleSetPlantImage(plantsImages, NAME_NUM);\n });\n }\n }, [NAME_NUM]);\n\n useEffect(() => {\n if (apiPlantImages?.NAME_NUMS.includes(NAME_NUM!)) {\n handleSetPlantImage(apiPlantImages, NAME_NUM);\n }\n\n if (garden?.thumbnailUrl) {\n setPlantImage(garden.thumbnailUrl);\n }\n }, [NAME_NUM, garden]);\n\n function handleSetPlantImage(plantsImages: any, NAME_NUM: any) {\n const plantImagesCollection = plantsImages?.images[NAME_NUM];\n\n if (plantImagesCollection?.cover) {\n const thumbnailUrl = plantImagesCollection?.cover?.thumbnailUrl;\n setPlantImage(thumbnailUrl);\n } else {\n setPlantImage('');\n }\n }\n\n const handlePlantGalleryModal = () => {\n dispatch(setModalContent('PlantGalleryModal'));\n };\n\n const handleGardenGalleryModal = () => {\n dispatch(setModalGardenLocation(garden));\n dispatch(setModalContent('GardenGalleryModal'));\n };\n\n return (\n \n {plantImage === '' ? (\n IMAGE COMING SOON\n ) : (\n <>\n \n\n {gallery && (\n {\n if (garden?.thumbnailUrl) {\n handleGardenGalleryModal();\n } else {\n handlePlantGalleryModal();\n }\n }}\n >\n \n \n )}\n \n )}\n
    \n );\n}\n","import { LOCATIONS_ESRI_FIELD, LOCATIONS_SEARCH_LABEL } from './plant.config';\n\nexport const filterOptionButtonHeight = 60;\n\nconst filterOptionsConfig = [\n {\n label: 'Type of Plant',\n esriField: 'HABIT_FULL',\n esriQueryMatch: 'like',\n icon: 'IconPlantType',\n type: 'radio',\n options: [\n { label: 'All', values: ['all'] },\n { label: 'Bulb/Tuber/Rhizome', values: ['bulb', 'tuber', 'rhizome'] },\n { label: 'Cactus/Succulent', values: ['cactus', 'succulent'] },\n { label: 'Grass/Grasslike', values: ['grass', 'grasslike'] },\n { label: 'Herbaceous', values: ['herbaceous'] },\n { label: 'Shrub', values: ['shrub'] },\n { label: 'Tree', values: ['tree'] },\n { label: 'Vine', values: ['vine'] },\n ],\n },\n {\n label: 'Flower Color',\n esriField: 'FL_COLOR_FULL',\n esriQueryMatch: 'like',\n icon: 'IconFlower',\n type: 'radio',\n options: [\n { label: 'All', values: ['all'] },\n { label: 'Black', values: ['black'] },\n { label: 'Blue', values: ['blue'] },\n { label: 'Brown', values: ['brown'] },\n { label: 'Bronze', values: ['bronze'] },\n { label: 'Copper', values: ['copper'] },\n { label: 'Cream', values: ['cream'] },\n { label: 'Gold', values: ['gold'] },\n { label: 'Gray', values: ['gray'] },\n { label: 'Green', values: ['green'] },\n { label: 'Orange', values: ['orange'] },\n { label: 'Pink', values: ['pink'] },\n { label: 'Purple', values: ['purple'] },\n { label: 'Red', values: ['red'] },\n { label: 'Red-Violet', values: ['red-violet'] },\n { label: 'Silver', values: ['silver'] },\n { label: 'White', values: ['white'] },\n { label: 'Yellow', values: ['yellow'] },\n { label: 'Multi-Colored', values: ['multi-colored'] },\n ],\n },\n {\n label: 'Leaf Color',\n esriField: 'LEAF_COLOR_FULL',\n esriQueryMatch: 'like',\n icon: 'IconLeaf',\n type: 'radio',\n options: [\n { label: 'All', values: ['all'] },\n { label: 'Black', values: ['black'] },\n { label: 'Blue', values: ['blue'] },\n { label: 'Brown', values: ['brown'] },\n { label: 'Bronze', values: ['bronze'] },\n { label: 'Copper', values: ['copper'] },\n { label: 'Cream', values: ['cream'] },\n { label: 'Gold', values: ['gold'] },\n { label: 'Gray', values: ['gray'] },\n { label: 'Green', values: ['green'] },\n { label: 'Orange', values: ['orange'] },\n { label: 'Pink', values: ['pink'] },\n { label: 'Purple', values: ['purple'] },\n { label: 'Red', values: ['red'] },\n { label: 'Red-Violet', values: ['red-violet'] },\n { label: 'Silver', values: ['silver'] },\n { label: 'White', values: ['white'] },\n { label: 'Yellow', values: ['yellow'] },\n { label: 'Multi-Colored', values: ['multi-colored'] },\n ],\n },\n {\n label: 'Deciduous or Evergreen',\n esriField: 'DECID_FULL',\n esriQueryMatch: 'like',\n icon: 'IconSunlightNeeds',\n type: 'radio',\n options: [\n { label: 'All', values: ['all'] },\n { label: 'Either', values: ['either'] },\n { label: 'Deciduous', values: ['deciduous'] },\n { label: 'Evergreen', values: ['evergreen'] },\n { label: 'Semi-Evergreen', values: ['semi-evergreen'] },\n ],\n },\n {\n label: 'Sunlight Requirements',\n esriField: 'SUN_FULL',\n esriQueryMatch: 'like',\n icon: 'IconSunlightNeeds',\n type: 'radio',\n options: [\n { label: 'All', values: ['all'] },\n { label: 'Full Sun', values: ['full', 'sun'] },\n { label: 'Part Sun', values: ['part', 'sun'] },\n { label: 'Part Shade', values: ['part', 'shade'] },\n { label: 'Full Shade', values: ['full', 'shade'] },\n ],\n },\n {\n label: LOCATIONS_SEARCH_LABEL,\n esriField: LOCATIONS_ESRI_FIELD,\n esriQueryMatch: 'like',\n icon: 'IconSunlightNeeds',\n type: 'radio',\n options: [{ label: 'All', values: ['all'] }],\n },\n {\n label: 'Special Characteristics',\n esriField: 'SPEC_CHAR_FULL',\n esriQueryMatch: 'like',\n icon: 'IconBurgerMenu',\n type: 'checkbox',\n options: [\n { label: 'All', values: ['All'] },\n { label: 'Bark', values: ['Bark'] },\n { label: 'Bird Attractant', values: ['Bird Attractant'] },\n { label: 'Butterfly Attractant', values: ['Butterfly Attractant'] },\n { label: 'Disease Resistance', values: ['Disease Resistance'] },\n { label: 'Drought Tolerant', values: ['Drought Tolerant'] },\n { label: 'Early Spring Interest', values: ['Early Spring Interest'] },\n { label: 'Early Summer Interest', values: ['Early Summer Interest'] },\n { label: 'Fall Color', values: ['Fall Color'] },\n { label: 'Fall Interest', values: ['Fall Interest'] },\n { label: 'Flower Color', values: ['Flower Color'] },\n { label: 'Flower Shape', values: ['Flower Shape'] },\n { label: 'Flower Size', values: ['Flower Size'] },\n { label: 'Foliage Characteristics', values: ['Foliage Characteristics'] },\n { label: 'Food', values: ['Food'] },\n { label: 'Fragrance', values: ['Fragrance'] },\n { label: 'Fruiting Characteristics', values: ['Fruiting Characteristics'] },\n { label: 'Hardiness', values: ['Hardiness'] },\n { label: 'Invasive', values: ['Invasive'] },\n { label: 'Late Spring Interest', values: ['Late Spring Interest'] },\n { label: 'Late Summer Interest', values: ['Late Summer Interest'] },\n { label: 'Medicinal', values: ['Medicinal'] },\n { label: 'Mid Spring Interest', values: ['Mid Spring Interest'] },\n { label: 'Mid Summer Interest', values: ['Mid Summer Interest'] },\n { label: 'Pest Resistance', values: ['Pest Resistance'] },\n { label: 'Poisonous/Toxic', values: ['Poisonous', 'Toxic'] },\n { label: 'Rarity', values: ['Rarity'] },\n { label: 'Wildlife Attractant', values: ['Wildlife Attractant'] },\n { label: 'Winter Interest', values: ['Winter Interest'] },\n { label: 'Year Round Interest', values: ['Year Round Interest'] },\n ],\n },\n];\n\nexport default filterOptionsConfig;\n","import * as React from 'react';\nimport { SVG_CONFIG } from '../../config/config';\n\nfunction IconClose({ fill, size = 50 }: { fill?: string; size?: number }) {\n return (\n \n \n \n \n );\n}\n\nexport default IconClose;\n","import { withStyles } from '@material-ui/core';\nimport Switch from '@material-ui/core/Switch';\nimport { COLOR_PRIMARY } from '../../../config/config';\n\nconst GreenSwitch = withStyles({\n switchBase: {\n color: COLOR_PRIMARY,\n '&$checked': {\n color: COLOR_PRIMARY,\n },\n '&$checked + $track': {\n backgroundColor: COLOR_PRIMARY,\n },\n },\n checked: {},\n track: {},\n})(Switch);\n\nexport default GreenSwitch;\n","export default __webpack_public_path__ + \"static/media/PlantMarkerSelected.c275e577.svg\";","import { loadModules } from 'esri-loader';\n\nimport PlantMarkerSelected from '../../images/PlantMarkerSelected.svg';\n\nexport const highlightSelectedPlant = async (_mapview: __esri.MapView | undefined, event: any) => {\n const [Graphic] = await loadModules(['esri/Graphic']);\n\n if (event) {\n _mapview?.graphics.removeAll();\n\n const pictureMarkerSymbol = {\n type: 'picture-marker',\n url: PlantMarkerSelected,\n width: 16,\n height: 16,\n };\n\n const plantGraphic = new Graphic({\n geometry: event.geometry,\n symbol: pictureMarkerSymbol,\n });\n\n _mapview?.graphics.add(plantGraphic);\n } else {\n _mapview?.graphics.removeAll();\n }\n};\n","/**\n * Fetch Legend Data\n * @param url - Rest endpoint URL\n * @return Promise - Legend data\n */\nexport function fetchLegendData(url: string) {\n return fetch(url + '/legend?f=pjson')\n .then((res) => {\n return res.json();\n })\n .catch((e) => {\n console.log('Error fetching Legend Data', e);\n return undefined;\n });\n}\n\n/**\n * Get Image Base64 Src string\n * @param item - Legend item\n * @return string - Base64 Image string\n */\nexport function getImageSrc(item: { imageData: string; contentType: string }) {\n return `data:${item.contentType};base64,${item.imageData}`;\n}\n","import React, { useEffect, useState } from 'react';\n\nimport { PLANT_DATA_LAYER_URL } from '../../config/config';\nimport { fetchLegendData, getImageSrc } from '../../utils/legend.util';\n\nimport './PlantDataLegend.scss';\n\nconst labelMapping: any = {\n Surveyed: 'Surveyed Plant',\n 'Not Surveyed': 'Plants in Garden Area',\n};\n\nexport function PlantDataLegend() {\n const [plantDataLegendData, setPlantDataLegendData] = useState([]);\n\n useEffect(() => {\n fetchLegendData(PLANT_DATA_LAYER_URL)\n .then((res) => {\n setPlantDataLegendData(res.layers[0]);\n })\n .catch((e) => {\n console.log('Error fetching Legend Data', e);\n });\n }, []);\n\n return plantDataLegendData?.legend?.length > 0 ? (\n
    \n {plantDataLegendData?.legend &&\n plantDataLegendData?.legend.map((item: { imageData: string; label: string; contentType: string }) => {\n return (\n

    \n {labelMapping[item.label]}\n {labelMapping[item.label]}\n

    \n );\n })}\n
    \n ) : null;\n}\n","import React from 'react';\n\nimport './LayersDisabled.scss';\n\nexport function LayersDisabled() {\n return (\n
    \n

    Zoom in to see layers

    \n
    \n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport Switch from '@material-ui/core/Switch';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport { withStyles } from '@material-ui/core/styles';\nimport _intersection from 'lodash/intersection';\n\nimport {\n $adaSublayersTitles,\n $currentMapViewScale,\n activeLayerToggles,\n setActiveLayers,\n setActiveLayersDropdown,\n setAllOptionalLayersVisibility,\n setLayersConfig,\n} from '../../store/app/layerSlice';\nimport { setGALayerEvent } from '../../utils/googleAnalytics';\n\nimport { ADA_URL, INTERACTIVE_FEATURE_LAYER, visibilityScale } from '../../config/config';\n\nimport { UniqueValueInfo } from '../../interfaces/layersWidget';\nimport {\n ACCESSIBLE_ROUTES_PATHS,\n adaConfig,\n mapLayerToggles,\n pointsConfig,\n POINTS_OF_INTERENST,\n} from '../../config/mapLayers';\n\nimport { RootState } from '../../store/store';\n\nimport '../../styles/css/filterPlants.scss';\nimport '../../styles/css/layers.scss';\nimport { PlantDataLegend } from '../legend/PlantDataLegend';\nimport { fetchLegendData, getImageSrc } from '../../utils/legend.util';\nimport { LayersDisabled } from '../legend/LayersDisabled';\nimport GreenSwitch from '../common/GreenSwitch/GreenSwitch';\n\nexport function FilterLayers() {\n const dispatch = useDispatch();\n const activeDropdown = useSelector((store: RootState) => store.layerReducer.activeLayerDropdown);\n const mapLayerOptions = useSelector((store: RootState) => store.layerReducer.layersConfig);\n const mapActiveLayerToggles = useSelector(activeLayerToggles);\n const adaSublayersTitles = useSelector($adaSublayersTitles);\n const currentMapViewScale = useSelector($currentMapViewScale);\n const [allToggleOptions, setAllToggles] = useState>(['art', 'ada', 'plantData', 'toggle-all']);\n\n useEffect(() => {\n getLayerOptions();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [adaSublayersTitles]);\n\n const getPointsOfInterest = async () => {\n const url = `${INTERACTIVE_FEATURE_LAYER.url}/f?f=pjson`;\n\n return fetch(url)\n .then((res) => res.json())\n .then((results) => {\n if (results) {\n const uniqueValueInfos = results.drawingInfo.renderer.uniqueValueInfos.filter(\n (uniqueValueInfo: any) => uniqueValueInfo.label !== 'Other'\n );\n\n const labels = uniqueValueInfos.map((value: UniqueValueInfo) => value.label);\n const allTogglesOptionsCopy = [...allToggleOptions, ...labels];\n setAllToggles(allTogglesOptionsCopy);\n\n return uniqueValueInfos.map((value: UniqueValueInfo) => {\n return {\n label: value.label,\n id: value.label,\n imageSource: `data:${value.symbol.contentType};base64,${value.symbol.imageData}`,\n imageAlt: value.label,\n };\n });\n }\n })\n .catch((e) => console.log('error in getPointsOfInterest()', e));\n };\n\n const getAndSetPointsOfInterest = async () => {\n const newLayers = pointsConfig.map((layer: any) => {\n const layerCopy = { ...layer };\n const optionsCopy = layer.options.map((option: any) => {\n return {\n ...option,\n };\n });\n\n return {\n label: layerCopy.label,\n options: optionsCopy,\n };\n });\n\n const pointsOfInterest = newLayers.find((layer: any) => layer.label === POINTS_OF_INTERENST);\n\n if (!pointsOfInterest) {\n return;\n }\n\n try {\n const points = await getPointsOfInterest();\n pointsOfInterest.options.push(...points);\n\n return newLayers;\n } catch {\n console.log('error in getAndSetPointsOfInterest()');\n }\n };\n\n const getAndSetAccessibilityRoutes = async () => {\n const newLayers = adaConfig.map((layer: any) => {\n const layerCopy = { ...layer };\n const optionsCopy = layer.options.map((option: any) => {\n return {\n ...option,\n };\n });\n\n return {\n label: layerCopy.label,\n options: optionsCopy,\n };\n });\n\n const accessibleRoutes = newLayers.find((layer: any) => layer.label === ACCESSIBLE_ROUTES_PATHS);\n\n if (!accessibleRoutes) {\n return;\n }\n\n try {\n const accessibilityOptions = adaSublayersTitles.map((option: string) => {\n return {\n id: option,\n imageAlt: '',\n imageSource: '',\n label: option,\n };\n });\n const allTogglesOptionsCopy = [...allToggleOptions, ...adaSublayersTitles];\n\n setAllToggles(allTogglesOptionsCopy);\n accessibleRoutes.options.push(...accessibilityOptions);\n return newLayers;\n } catch {\n console.log('error in getAndSetAccessibilityRoutes()');\n }\n };\n\n const getA11yLayers = (adaLegend: any, accessPoints?: { options: any; label: any }[]) => {\n const accessPointOptions: any = adaLegend?.layers.map((item: any) => {\n const legendElement = item.legend[0];\n return {\n id: item.layerName,\n label: item.layerName,\n imageAlt: item.layerName,\n imageSource: getImageSrc(legendElement),\n width: legendElement.width,\n height: legendElement.height,\n };\n });\n\n const [first] = accessPoints;\n return accessPointOptions\n ? [\n {\n label: first.label,\n options: accessPointOptions,\n },\n ]\n : accessPoints;\n };\n\n const getLayerOptions = async () => {\n const pointsOfInterest = await getAndSetPointsOfInterest();\n const adaLegend = await fetchLegendData(ADA_URL);\n const accessPoints = await getAndSetAccessibilityRoutes();\n const accessibilityLayers = getA11yLayers(adaLegend, accessPoints);\n\n const layersConfig = [...pointsOfInterest, ...accessibilityLayers];\n dispatch(setLayersConfig(layersConfig));\n };\n\n return (\n <>\n
    \n
    \n Map Layers\n
    \n {mapLayerToggles.map(({ label, id }, index: number) => {\n return (\n
    \n {\n // setGALayerEvent({ selectedLayer: id, allActiveLayers: mapActiveLayerToggles });\n dispatch(setActiveLayers(id));\n }}\n >\n
    \n {label}\n
    \n }\n label={''}\n className='custom-form-control-label'\n />\n
    \n {label === 'Plant Data' && }\n
    \n );\n })}\n\n {mapLayerOptions.map(({ label: mainLabel, options }, index: number) => {\n const optionLayers = options.map((item: { id: string }) => item.id);\n const includeAtLeastOneLayer = _intersection(mapActiveLayerToggles, optionLayers).length !== 0;\n\n return (\n
    \n
    dispatch(setActiveLayersDropdown(mainLabel))}>\n
    \n {mainLabel}\n
    \n \n
    \n\n {activeDropdown === mainLabel && options.length ? (\n <>\n
    \n {(mainLabel === ACCESSIBLE_ROUTES_PATHS || mainLabel === POINTS_OF_INTERENST) &&\n currentMapViewScale > visibilityScale && }\n\n
    \n visibilityScale}\n onClick={() => {\n if (includeAtLeastOneLayer) {\n dispatch(\n setAllOptionalLayersVisibility({\n id: mainLabel,\n layers: optionLayers,\n visible: false,\n })\n );\n } else {\n dispatch(\n setAllOptionalLayersVisibility({ id: mainLabel, layers: optionLayers, visible: true })\n );\n }\n }}\n />\n }\n />\n
    \n\n
      \n {options.map(({ id, label, imageSource, imageAlt, width, height }: any, optionsIndex: number) => {\n const isActive = mapActiveLayerToggles.includes(id);\n\n return (\n
    • \n
      \n {imageSource && (\n \n )}\n \n
      \n visibilityScale}\n checked={isActive}\n onClick={() => {\n // setGALayerEvent({ selectedLayer: id, allActiveLayers: mapActiveLayerToggles });\n dispatch(setActiveLayers(id));\n }}\n />\n }\n label={''}\n />\n
    • \n );\n })}\n
    \n
    \n \n ) : null}\n
    \n );\n })}\n \n \n );\n}\n\nexport default FilterLayers;\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { $cardMinimized, $legendExpanded, setLegendExpanded, setMinimized } from '../../store/app/appSlice';\nimport FilterLayers from './FilterLayers';\n\nimport '../../styles/css/legend.scss';\n\nconst Legend = () => {\n const dispatch = useDispatch();\n const cardMinimized = useSelector($cardMinimized);\n const legendExpanded = useSelector($legendExpanded);\n\n return (\n <>\n {\n dispatch(setLegendExpanded(!legendExpanded));\n if (!cardMinimized && !legendExpanded) {\n dispatch(setMinimized(true));\n }\n }}\n >\n \n Map Layers\n \n\n
    \n \n
    \n \n );\n};\n\nexport default Legend;\n","import React from 'react';\n\nconst IconWheelchair = () => {\n return (\n \n \n \n \n \n );\n};\n\nexport default IconWheelchair;\n","import React, { useState } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\n\nimport { $adaSublayersTitles, setActiveLayers } from '../../../store/app/layerSlice';\n\nimport { RootState } from '../../../store/store';\n\nimport IconWheelchair from '../../icons/IconWheelchair';\n\nexport function AccessibilityWidget() {\n const dispatch = useDispatch();\n const [visible, setVisible] = useState(false);\n const activeLayerToggles = useSelector((state: RootState) => state.layerReducer.activeLayerToggles);\n const adaSublayersTitles = useSelector($adaSublayersTitles);\n\n const updateLayerToggle = () => {\n const adaSublayersON = [...activeLayerToggles].filter((layerID) => adaSublayersTitles.includes(layerID));\n const adaSublayersOFF = adaSublayersTitles.filter((layerID: string) => !adaSublayersON.includes(layerID));\n\n if (visible) {\n adaSublayersON.forEach((layerID: string) => dispatch(setActiveLayers(layerID)));\n } else {\n adaSublayersOFF.forEach((layerID: string) => dispatch(setActiveLayers(layerID)));\n }\n setVisible(!visible);\n };\n\n return (\n \n );\n}\n\nexport default AccessibilityWidget;\n","import React from 'react';\nimport _every from 'lodash/every';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { setModalContent } from '../../../store/app/modalSlice';\nimport { selectMapFilterSelectedOptions } from '../../../store/app/filterSlice';\n\nimport IconFilter from '../../icons/IconFilter';\n\nexport function Filter() {\n const dispatch = useDispatch();\n const mapFilterSelectedOptions = useSelector(selectMapFilterSelectedOptions);\n const allDefaultFilterValuesSelected = _every(mapFilterSelectedOptions, ['activeRadioButton', 'All']);\n\n return (\n <>\n \n \n );\n}\n\nexport default Filter;\n","import React, { useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport IconClose from '../../icons/IconClose';\nimport IconChevronUp from '../../icons/IconChevronUp';\n\n// REDUX Store\nimport { RootState } from '../../../store/store';\nimport { setModalContent } from '../../../store/app/modalSlice';\nimport {\n $tourSelected,\n $tourStopIndex,\n $tourStops,\n defaultTourStopIndex,\n setToursAll,\n setTourStep,\n setTourStopIndex,\n} from '../../../store/app/tourSlice';\n\nimport mapController from '../../../controllers/MapController';\n\nimport { TourStop } from '../../../interfaces/plantData';\nimport TourStopNumber from '../../tours/TourStopNumber/TourStopNumber';\n\nimport { getAndSetTourStops, resetTours, startCuratedTour, updateTourPathURL } from '../../../utils/tour.util';\n\nimport '../../../styles/css/tours.scss';\n\nexport function Tour() {\n const dispatch = useDispatch();\n const cardMinimized = useSelector((state: RootState) => state.appReducer.cardMinimized);\n const tourStep = useSelector((state: RootState) => state.tourReducer.tourStep);\n const tourSelected = useSelector($tourSelected);\n const tourStopIndex = useSelector($tourStopIndex);\n\n useEffect(() => {\n mapController.queryTours().then((results) => {\n dispatch(setToursAll(results));\n if (tourSelected.Tour_ID) {\n startCuratedTour(tourSelected.Tour_ID).then(() => {\n getAndSetTourStops();\n });\n }\n });\n }, []);\n\n useEffect(() => {\n if (tourStopIndex > defaultTourStopIndex) {\n updateTourPathURL(tourSelected.Tour_ID, tourStopIndex + 1);\n }\n }, [tourStopIndex]);\n\n const ViewTours = () => {\n return (\n dispatch(setModalContent('ViewTours'))}\n style={{ justifyContent: 'center' }}\n >\n TOURS\n \n );\n };\n\n const TourStopsMapWidget = () => {\n const tourStops: Array = useSelector($tourStops);\n const tourStopIndex = useSelector($tourStopIndex);\n\n const ACC_NUM_AND_QUAL = tourStops.length ? tourStops[tourStopIndex].ACC_NUM_AND_QUAL : null;\n const SCIENTIFIC_NAME = tourStops.length ? tourStops[tourStopIndex].NAME : null;\n\n useEffect(() => {\n if (tourStops.length && ACC_NUM_AND_QUAL) {\n mapController.setTourStopsActiveStop(ACC_NUM_AND_QUAL);\n mapController.goToTourStop(ACC_NUM_AND_QUAL);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [tourStops, tourStopIndex]);\n\n const updateActiveStop = (newActiveStop: number) => {\n if (!ACC_NUM_AND_QUAL) {\n return;\n }\n\n dispatch(setTourStopIndex(newActiveStop));\n };\n\n const returnButton = () => {\n switch (tourStep) {\n case 'ViewTours':\n return (\n {\n dispatch(setModalContent('ViewTours'));\n dispatch(setTourStep('TourStopsOpen'));\n }}\n >\n Tour stops\n \n );\n case 'TourStopsOpen':\n case 'TourStopsClose':\n const TOUR_ARROW__LENGTH = 25;\n return (\n <>\n
    \n \n
    \n updateActiveStop(tourStopIndex - 1)}\n >\n \n \n {\n dispatch(setModalContent('ViewTours'));\n dispatch(setTourStep('TourStopsOpen'));\n }}\n >\n \n {SCIENTIFIC_NAME}\n \n updateActiveStop(tourStopIndex + 1)}\n >\n \n \n
    \n
    \n \n );\n default:\n return <>;\n }\n };\n\n return returnButton();\n };\n\n const returnTourButton = () => {\n switch (tourStep) {\n case 'ViewTours':\n return ;\n case 'TourStopsOpen':\n case 'TourStopsClose':\n return ;\n default:\n break;\n }\n };\n\n return <>{returnTourButton()};\n}\n\nexport default Tour;\n","export default __webpack_public_path__ + \"static/media/TourStopSelected.851ddcbc.svg\";","export default __webpack_public_path__ + \"static/media/IconLocationFilled.d402db0c.svg\";","export default __webpack_public_path__ + \"static/media/IconLocationFilledSelected.8444d993.svg\";","export default __webpack_public_path__ + \"static/media/IconLocationOutline.7d4038f5.svg\";","export default __webpack_public_path__ + \"static/media/IconLocationOutlineSelected.6e1c48d9.svg\";","import { RefObject } from 'react';\nimport { loadModules, setDefaultOptions } from 'esri-loader';\nimport _values from 'lodash/values';\nimport _debounce from 'lodash/debounce';\nimport store from '../store/store';\nimport {\n setDefinitionExpressionQueryAttributes,\n setGardenCodeSelected,\n setMapLoaded,\n setSpecies,\n} from '../store/app/appSlice';\nimport { GardenLocation } from '../store/app/modalSlice';\nimport { setSearchDefinitionExpression } from '../store/app/filterSlice';\nimport { setAdaSublayersTitles, setCurrentMapViewScale } from '../store/app/layerSlice';\n\nimport { PlantData, TourStop } from '../interfaces/plantData';\n\nimport {\n ADA_MAP_IMAGE_LAYER,\n ART_LAYER_1,\n ART_LAYER_2,\n GARDEN_LOCATIONS_FEATURE_LAYER,\n GARDEN_LOCATIONS_LAYER_URL,\n GRAY_VECTOR_PORTALID,\n INITIAL_DEFINITION_EXPRESSION,\n INTERACTIVE_FEATURE_LAYER,\n LABELS_CANOPIES_VISIBILITY_MIN_SCALE,\n LOCATION_CODES_MAP_IMAGE_LAYER,\n LOCATIONS_URL,\n MAP_CENTER,\n MAP_ZOOM,\n PLANT_DATA_LAYER,\n PLANT_DATA_LAYER_URL,\n PLANT_ID_FIELD,\n plantLayerDefaultDefinitionExpression,\n PLANTS_FEATURE_LAYER_CANOPY_RENDERER,\n PLANTS_FEATURE_LAYER_LABELING_INFO,\n TOURS_URL,\n visibilityScale,\n ZOOM_MOBILE,\n} from '../config/config';\nimport { highlightSelectedPlant } from '../utils/map/highlight.util';\nimport { splitByCharacter, splitByComma } from '../utils/plantSyntax.util';\n\nimport { mapWidgetAccessibility, mapWidgetLegend, mapWidgetTour } from '../utils/map/widgets';\n\nimport { getPhenologyChartData } from '../components/plants/SpecificPlant/PhenologyChart.util';\n\nimport TourStopSelected from '../images/TourStopSelected.svg';\nimport iconPinPointExact from '../images/map/IconLocationFilled.svg';\nimport iconPinPointExactSelected from '../images/map/IconLocationFilledSelected.svg';\nimport iconPinPointApproximate from '../images/map/IconLocationOutline.svg';\nimport iconPinPointApproximateSelected from '../images/map/IconLocationOutlineSelected.svg';\nimport { getPopupTemplate } from '../config/popup/popup.util';\nimport filterOptionsConfig from '../config/filterPlants';\nimport {\n LOCATIONS_ESRI_FIELD,\n LOCATIONS_GARDEN_CODE,\n LOCATIONS_GARDEN_LOCATION,\n LOCATIONS_GARDEN_WEBSITE,\n LOCATIONS_GROUP_FIELD,\n LOCATIONS_SEARCH_LABEL,\n SEARCH_PLANT_ALPHABET_EXCLUDE_SECTIONS,\n SEARCH_PLANT_ALPHABET_SECTIONS,\n} from '../config/plant.config';\nimport _orderBy from 'lodash/orderBy';\n// import { SpatialReference } from 'esri/geometry';\n\nsetDefaultOptions({\n version: '4.20',\n css: true,\n});\n\ninterface PlantQueryParams {\n field: string;\n fieldValue?: string;\n geometry?: any;\n selectedLetter: string;\n}\n\nlet selectedGardenCenter = '';\n\n/**\n * Get Plants by Accession where Query\n *\n * @param {Array} accesionIDs - Array of accession IDs\n * @return {string} - Where Query\n */\nfunction getPlantsByAccessionWhereQuery(accesionIDs: Array) {\n return `ACC_NUM_AND_QUAL IN ('${accesionIDs.join(`','`)}')`;\n}\n\nexport class MapController {\n _map?: __esri.Map;\n _mapview?: __esri.MapView;\n _plantsFeatureLayer?: __esri.FeatureLayer;\n _plantsFeatureLayerView?: __esri.FeatureLayerView;\n _plantsFeatureLayerLabels?: __esri.FeatureLayer;\n _plantsFeatureLayerCanopy?: __esri.FeatureLayer;\n _interactiveFeatureLayer?: __esri.FeatureLayer;\n _artLayer1?: __esri.MapImageLayer;\n _artLayer2?: __esri.MapImageLayer;\n _popupTriggerAction?: IHandle;\n _mapViewUI?: void;\n _adaMapImageLayer?: __esri.MapImageLayer;\n _filterDefinitionExpression: string;\n _tourGraphicsLayer?: __esri.GraphicsLayer;\n _locationCodesMapImageLayer?: __esri.MapImageLayer;\n _mapPointsGraphicsLayer?: __esri.GraphicsLayer;\n _gardenLocationsFeatureLayer?: __esri.FeatureLayer;\n\n constructor() {\n this._map = undefined;\n this._mapview = undefined;\n this._plantsFeatureLayer = undefined;\n this._plantsFeatureLayerView = undefined;\n this._popupTriggerAction = undefined;\n this._mapViewUI = undefined;\n this._interactiveFeatureLayer = undefined;\n this._artLayer1 = undefined;\n this._artLayer2 = undefined;\n this._adaMapImageLayer = undefined;\n this._filterDefinitionExpression = '';\n this._tourGraphicsLayer = undefined;\n this._locationCodesMapImageLayer = undefined;\n this._mapPointsGraphicsLayer = undefined;\n this._gardenLocationsFeatureLayer = undefined;\n }\n\n initializeMap = async (domRef: RefObject) => {\n const [\n Map,\n MapView,\n MapImageLayer,\n Home,\n Locate,\n TileLayer,\n Basemap,\n VectorTileLayer,\n FeatureLayer,\n FeatureFilter,\n GraphicsLayer,\n ] = await loadModules([\n 'esri/WebMap',\n 'esri/views/MapView',\n 'esri/layers/MapImageLayer',\n 'esri/widgets/Home',\n 'esri/widgets/Locate',\n 'esri/layers/TileLayer',\n 'esri/Basemap',\n 'esri/layers/VectorTileLayer',\n 'esri/layers/FeatureLayer',\n 'esri/views/layers/support/FeatureFilter',\n 'esri/layers/GraphicsLayer',\n ]);\n\n const grayVector = new VectorTileLayer({\n id: 'greyVector',\n portalItem: {\n id: GRAY_VECTOR_PORTALID,\n },\n });\n this._artLayer1 = new TileLayer(ART_LAYER_1);\n this._artLayer2 = new MapImageLayer(ART_LAYER_2);\n this._interactiveFeatureLayer = new FeatureLayer(INTERACTIVE_FEATURE_LAYER);\n\n this._adaMapImageLayer = new MapImageLayer(ADA_MAP_IMAGE_LAYER);\n this._adaMapImageLayer?.when((adaLayerView: any) => {\n const adaSublayersTitles: string[] = [];\n\n adaLayerView.allSublayers.forEach((subLayer: { id: number; title: string; visible: boolean }) => {\n subLayer.visible = false;\n adaSublayersTitles[subLayer.id] = subLayer.title;\n });\n\n store.dispatch(setAdaSublayersTitles(adaSublayersTitles));\n });\n\n this._locationCodesMapImageLayer = new MapImageLayer(LOCATION_CODES_MAP_IMAGE_LAYER);\n\n const basemap = new Basemap({\n baseLayers: [grayVector, this._artLayer1, this._artLayer2],\n });\n\n this._plantsFeatureLayer = new FeatureLayer({\n id: 'plantsFeatureLayer',\n ...PLANT_DATA_LAYER,\n popupTemplate: getPopupTemplate(),\n minScale: visibilityScale,\n });\n\n this._plantsFeatureLayerLabels = new FeatureLayer({\n id: 'plantsFeatureLayerLabels',\n ...PLANT_DATA_LAYER,\n minScale: LABELS_CANOPIES_VISIBILITY_MIN_SCALE,\n });\n\n this._plantsFeatureLayerLabels?.load().then((loadedLayer) => {\n loadedLayer.labelingInfo = PLANTS_FEATURE_LAYER_LABELING_INFO;\n });\n\n this._plantsFeatureLayerCanopy = new FeatureLayer({\n id: 'plantsFeatureLayerCanopy',\n ...PLANT_DATA_LAYER,\n minScale: LABELS_CANOPIES_VISIBILITY_MIN_SCALE,\n definitionExpression: `${plantLayerDefaultDefinitionExpression} and MAPPED = 'Y' `,\n });\n\n this._plantsFeatureLayerCanopy?.load().then((loadedLayer) => {\n loadedLayer.renderer = PLANTS_FEATURE_LAYER_CANOPY_RENDERER;\n });\n\n this._mapPointsGraphicsLayer = new GraphicsLayer({\n id: 'mapPointsGraphicsLayer',\n });\n\n this._gardenLocationsFeatureLayer = new FeatureLayer({\n ...GARDEN_LOCATIONS_FEATURE_LAYER,\n });\n\n this._map = new Map({\n basemap: basemap,\n layers: [\n this._plantsFeatureLayer,\n this._plantsFeatureLayerLabels,\n this._plantsFeatureLayerCanopy,\n this._adaMapImageLayer,\n this._interactiveFeatureLayer,\n this._locationCodesMapImageLayer,\n this._mapPointsGraphicsLayer,\n this._gardenLocationsFeatureLayer,\n ],\n });\n\n this._mapview = new MapView({\n map: this._map,\n container: domRef.current,\n zoom: MAP_ZOOM,\n center: [MAP_CENTER.longitude, MAP_CENTER.latitude],\n rotation: 270,\n constraints: {\n minZoom: window.innerWidth > 960 ? ZOOM_MOBILE + 1 : ZOOM_MOBILE,\n maxZoom: 21,\n geometry: {\n // Constrain lateral movement to Lower Manhattan\n type: 'extent',\n xmax: -73.867,\n ymax: 40.877,\n xmin: -73.89,\n ymin: 40.846,\n },\n },\n });\n\n this._mapview?.when(() => {\n if (this._artLayer2) {\n this._artLayer2.visible = (this._mapview?.scale || 0) < visibilityScale;\n }\n if (this._artLayer1) {\n this._artLayer1.visible = (this._mapview?.scale || 0) >= visibilityScale;\n }\n\n store.dispatch(setCurrentMapViewScale(this._mapview?.scale!));\n if (this._mapview?.widthBreakpoint === 'xsmall' || this._mapview?.heightBreakpoint === 'xsmall') {\n this._mapview.zoom = ZOOM_MOBILE;\n }\n });\n\n if (this._mapview && this._plantsFeatureLayer) {\n this._mapview?.whenLayerView(this._plantsFeatureLayer).then((layerView: any) => {\n this._plantsFeatureLayerView = layerView;\n if (mapController._filterDefinitionExpression !== '') {\n const filter = new FeatureFilter({\n where: mapController._filterDefinitionExpression,\n });\n layerView.filter = filter;\n }\n });\n }\n\n let fadeInTimeout: ReturnType;\n let fadeOutTimeout: ReturnType;\n let oldScale = this._mapview?.scale || 0;\n\n this._mapview?.watch('stationary', (stationary) => {\n if (stationary) {\n store.dispatch(setCurrentMapViewScale(this._mapview?.scale!));\n }\n });\n\n this._mapview?.watch('zoom', () => {\n const newScale = this._mapview?.scale || 0;\n const updateVisibility = Math.sign(visibilityScale - newScale) === Math.sign(visibilityScale - oldScale);\n oldScale = newScale;\n if (updateVisibility) {\n clearTimeout(fadeInTimeout);\n clearTimeout(fadeOutTimeout);\n const layerToShow = newScale >= visibilityScale ? this._artLayer1 : this._artLayer2;\n const layerToHide = newScale >= visibilityScale ? this._artLayer2 : this._artLayer1;\n\n const baseOpacity = 1;\n const fadeIn = (layer: any) => {\n if (!layer.visible) {\n layer.visible = true;\n }\n fadeInTimeout = setTimeout(() => {\n if (layer.opacity >= baseOpacity) {\n return;\n }\n layer.opacity = layer.opacity + 0.05;\n fadeIn(layer);\n }, 5);\n };\n\n const fadeOut = (layer: any) => {\n if (layer.opacity <= 0) {\n layer.visible = false;\n return;\n }\n fadeOutTimeout = setTimeout(() => {\n layer.opacity = layer.opacity - 0.05;\n fadeOut(layer);\n }, 5);\n };\n\n fadeOut(layerToHide);\n fadeIn(layerToShow);\n }\n });\n\n // Event handler that fires each time an action is clicked.\n this._popupTriggerAction = this._mapview?.popup.on('trigger-action', (event) => {\n console.log('popup trigger-action', event);\n if (event.action.id === 'get-details') {\n this.getDetails();\n }\n\n if (event.action.id === 'popup-close-list') {\n const popup: any = this._mapview?.popup as __esri.Popup;\n popup.close();\n }\n });\n\n /**\n * Expand Popup menu list if more then one feature selected\n */\n this._mapview?.popup.watch('features', (event) => {\n const popup: any = this._mapview?.popup as __esri.Popup;\n\n if (popup.featureCount > 1) {\n const popupGardenCenter = popup.features[0].attributes.CURRENT_LOCATION_FULL;\n\n if (popupGardenCenter !== selectedGardenCenter) {\n selectedGardenCenter = popupGardenCenter;\n popup.features = _orderBy(popup.features, 'attributes.NAME');\n setTimeout(() => {\n popup.featureMenuOpen = true;\n const popupHeaderSelector = popup.domNode.querySelector('.esri-popup__feature-menu-header');\n popupHeaderSelector.innerText = `${popupHeaderSelector.innerText} - ${popupGardenCenter}`;\n }, 300);\n }\n } else {\n selectedGardenCenter = '';\n }\n });\n\n this._mapview?.popup.watch('selectedFeature', (event) => {\n if (!this._mapview) {\n return;\n }\n\n (this._mapview.popup as __esri.Popup).collapsed = false;\n\n if (!this._mapview.popup.selectedFeature) {\n highlightSelectedPlant(this._mapview, event);\n return;\n }\n\n const attributes = { ...this._mapview.popup.selectedFeature.attributes };\n Object.keys(attributes).forEach((key) => {\n if (typeof attributes[key] === 'string') {\n attributes[key] = splitByCharacter(attributes[key]);\n }\n });\n this._mapview.popup.selectedFeature.attributes = attributes;\n\n highlightSelectedPlant(this._mapview, event);\n });\n\n //@ts-ignore\n window.mapview = this._mapview;\n\n (this._mapview?.popup as __esri.Popup).collapseEnabled = true;\n (this._mapview?.popup as __esri.Popup).collapsed = false;\n const homeWidget = new Home({\n view: this._mapview,\n });\n\n const locateWidget = new Locate({\n view: this._mapview,\n });\n\n mapWidgetLegend(this._mapview, 'top-right');\n // mapWidgetFavorite(this._mapview, 'top-left');\n mapWidgetAccessibility(this._mapview, 'bottom-right');\n this._mapViewUI = this._mapview?.ui.add([homeWidget, locateWidget], 'bottom-right');\n this._mapview?.ui.move(['zoom'], 'bottom-right');\n mapWidgetTour(this._mapview, 'bottom-right');\n\n this._mapview\n ?.when(() => {\n store.dispatch(setMapLoaded(true));\n })\n .catch((e: any) => console.log('error loading mapview', e));\n (window as any).mapController = this;\n };\n // TODO: Refactor after get more details relate to ['Get Details'] action flow\n\n getDetails = () => {\n if (this._mapview) {\n const { selectedFeature } = this._mapview.popup.viewModel;\n const species = selectedFeature.attributes.NAME;\n\n store.dispatch(setSpecies(''));\n store.dispatch(setSpecies(species));\n }\n };\n\n queryPlantBySpeciesName = async (scientificName: string, queryLayer = 0) => {\n const [QueryTask, Query, SpatialReference] = await loadModules([\n 'esri/tasks/QueryTask',\n 'esri/tasks/support/Query',\n 'esri/geometry/SpatialReference',\n ]);\n const name = scientificName.replace(/'/gi, \"''\");\n var queryTask = new QueryTask({\n url: `${PLANT_DATA_LAYER_URL}/${queryLayer}`,\n });\n\n var query = new Query();\n query.returnGeometry = true;\n query.outSpatialReference = SpatialReference.WebMercator;\n query.outFields = ['*'];\n query.where = `${PLANT_ID_FIELD} = '${name}'`;\n\n try {\n const queryResult = await queryTask.execute(query);\n\n const data: any = [];\n\n queryResult.features.forEach((feature: any) => {\n const featureData: any = { attributes: {}, geometry: feature.geometry };\n\n Object.keys(feature.attributes).forEach((key) => {\n const specificAttribute = feature.attributes[key];\n featureData.attributes[key] =\n typeof specificAttribute === 'string' ? splitByCharacter(specificAttribute) : specificAttribute;\n });\n\n data.push(featureData);\n });\n\n return data;\n } catch (error) {\n console.warn('QUERY ERROR', error);\n }\n };\n\n queryPlantsByAccession = async (accesionIDs: Array): Promise | undefined> => {\n const [QueryTask, Query, SpatialReference] = await loadModules([\n 'esri/tasks/QueryTask',\n 'esri/tasks/support/Query',\n 'esri/geometry/SpatialReference',\n ]);\n\n var queryTask = new QueryTask({\n url: `${PLANT_DATA_LAYER_URL}/0`,\n });\n var query = new Query();\n query.returnGeometry = true;\n query.outSpatialReference = SpatialReference.WebMercator;\n query.outFields = '*';\n query.where = getPlantsByAccessionWhereQuery(accesionIDs);\n\n try {\n const queryResult = await queryTask.execute(query);\n const results = queryResult.features.map(({ attributes }: any) => {\n const data: any = {};\n Object.keys(attributes).forEach((key) => {\n data[key] = typeof attributes[key] === 'string' ? splitByCharacter(attributes[key]) : attributes[key];\n });\n\n return data;\n });\n\n return results;\n } catch (error) {\n console.warn('QUERY ERROR', error);\n }\n };\n\n queryPlantBySpeciesNameForPhenologyChartData = async (scientificName: string) => {\n const [QueryTask, Query] = await loadModules(['esri/tasks/QueryTask', 'esri/tasks/support/Query']);\n const name = scientificName.replace(/'/gi, \"''\");\n\n const queryTask = new QueryTask({\n url: `${PLANT_DATA_LAYER_URL}/0`,\n });\n\n const query = new Query();\n query.returnGeometry = false;\n query.outFields = ['CHECK_DT', 'REPRODUCTIVE_STATUS'];\n query.where = `NAME = '${name}'`;\n\n try {\n const queryResult = await queryTask.execute(query);\n return getPhenologyChartData(queryResult.features);\n } catch (error) {\n console.warn('QUERY ERROR', error);\n }\n };\n\n queryPlantsBySpecificAccession = async (accession: string) => {\n const [QueryTask, Query] = await loadModules(['esri/tasks/QueryTask', 'esri/tasks/support/Query']);\n\n var queryTask = new QueryTask({\n url: `${PLANT_DATA_LAYER_URL}/0`,\n });\n var query = new Query();\n query.returnGeometry = true;\n query.num = 1;\n query.outFields = [\n 'NAME',\n 'COMMON_NAME_PRIMARY',\n 'ACC_NUM_AND_QUAL',\n 'CATALOG_DESC',\n 'FAMILY',\n 'HABIT_FULL',\n 'FL_COLOR_FULL',\n // 'FL_COLOR_NOTE',\n 'ACC_YR',\n 'CURRENT_MEASURE_DT',\n 'MAPPED',\n 'CURRENT_DBH_FULL',\n 'CURRENT_HEIGHT',\n 'CURRENT_SPREAD',\n 'MOST_RECENT_DBH',\n 'MOST_RECENT_DBH_DT',\n 'MOST_RECENT_HEIGHT',\n 'MOST_RECENT_HEIGHT_DT',\n 'MOST_RECENT_SPREAD',\n 'MOST_RECENT_SPREAD_DT',\n ];\n query.where = `ACC_NUM_AND_QUAL = '${accession}' AND ALIVE = 'A'`;\n\n try {\n const queryResult = await queryTask.execute(query);\n const feature = queryResult.features[0].attributes;\n const geometry = queryResult.features[0].geometry;\n const data: any = {\n attributes: {},\n geometry: geometry,\n };\n\n Object.keys(feature).forEach((key) => {\n data.attributes[key] = typeof feature[key] === 'string' ? splitByCharacter(feature[key]) : feature[key];\n });\n\n return data;\n } catch (error) {\n console.warn('QUERY ERROR', error);\n }\n };\n\n goToGeometry = (geometry: any) => {\n if (!geometry.latitude || !geometry.longitude || !this._mapview) {\n return;\n }\n\n this._mapview.goTo({\n target: geometry,\n zoom: 16,\n });\n };\n\n queryPlantsForAccessionIDsBySpecies = async (species: string) => {\n const [QueryTask, Query] = await loadModules(['esri/tasks/QueryTask', 'esri/tasks/support/Query']);\n const name = splitByComma(species).replace(/'/gi, \"''\");\n\n var queryTask = new QueryTask({\n url: `${PLANT_DATA_LAYER_URL}/0`,\n });\n var query = new Query();\n query.returnGeometry = false;\n query.outFields = ['ACC_NUM_AND_QUAL', 'ACC_YR', 'CURRENT_LOCATION_FULL', 'MAPPED', 'PUBLICLY_ACCESSIBLE'];\n query.where = `NAME = '${name}' AND ALIVE = 'A'`;\n\n try {\n const queryResult = await queryTask.execute(query);\n const results = queryResult.features.map((feature: any, index: number) => [\n index + 1,\n feature.attributes.MAPPED,\n feature.attributes.ACC_NUM_AND_QUAL,\n feature.attributes.ACC_YR,\n feature.attributes.CURRENT_LOCATION_FULL,\n feature.attributes.PUBLICLY_ACCESSIBLE,\n ]);\n\n return results;\n } catch (error) {\n console.warn('QUERY ERROR', error);\n }\n };\n\n queryPlantsForAccessionIDsByCommonName = async (commonname: string) => {\n const [QueryTask, Query] = await loadModules(['esri/tasks/QueryTask', 'esri/tasks/support/Query']);\n const name = splitByComma(commonname).replace(/'/gi, \"''\");\n\n var queryTask = new QueryTask({\n url: `${PLANT_DATA_LAYER_URL}/0`,\n });\n var query = new Query();\n query.returnGeometry = false;\n query.outFields = ['ACC_NUM_AND_QUAL', 'ACC_YR', 'CURRENT_LOCATION_FULL', 'MAPPED', 'PUBLICLY_ACCESSIBLE'];\n query.where = `COMMON_NAME_PRIMARY = '${name}' AND ALIVE = 'A'`;\n\n try {\n const queryResult = await queryTask.execute(query);\n const results = queryResult.features.map((feature: any, index: number) => [\n index + 1,\n feature.attributes.MAPPED,\n feature.attributes.ACC_NUM_AND_QUAL,\n feature.attributes.ACC_YR,\n feature.attributes.CURRENT_LOCATION_FULL,\n feature.attributes.PUBLICLY_ACCESSIBLE,\n ]);\n\n return results;\n } catch (error) {\n console.warn('QUERY ERROR', error);\n }\n };\n\n queryPlantByCommonName = async (commonName: string): Promise => {\n const [QueryTask, Query, SpatialReference] = await loadModules([\n 'esri/tasks/QueryTask',\n 'esri/tasks/support/Query',\n 'esri/geometry/SpatialReference',\n ]);\n const name = splitByComma(commonName).replace(/'/gi, \"''\");\n\n var queryTask = new QueryTask({\n url: `${PLANT_DATA_LAYER_URL}/0`,\n });\n var query = new Query();\n query.returnGeometry = true;\n query.outSpatialReference = SpatialReference.WebMercator;\n query.outFields = ['*'];\n query.where = `COMMON_NAME_PRIMARY = '${name}'`;\n\n try {\n const queryResult = await queryTask.execute(query);\n\n const data: any = [];\n\n queryResult.features.forEach((feature: any) => {\n const featureData: any = { attributes: {}, geometry: feature.geometry };\n\n Object.keys(feature.attributes).forEach((key) => {\n const specificAttribute = feature.attributes[key];\n featureData.attributes[key] =\n typeof specificAttribute === 'string' ? splitByCharacter(specificAttribute) : specificAttribute;\n });\n\n data.push(featureData);\n });\n\n return data;\n } catch (error) {\n console.warn('QUERY ERROR', error);\n }\n };\n\n querySpeciesByGenera = async (value: string): Promise | []> => {\n const [QueryTask, Query] = await loadModules(['esri/tasks/QueryTask', 'esri/tasks/support/Query']);\n\n const queryTask = new QueryTask({\n url: `${PLANT_DATA_LAYER_URL}/0`,\n });\n const query = new Query();\n\n query.outFields = 'NAME';\n query.returnDistinctValues = true;\n query.returnGeometry = false;\n query.where = `GENUS LIKE UPPER('%${value}%')`;\n\n const queryResults = await queryTask.execute(query).then((results: any) => {\n return results.features.map((feature: any) => splitByCharacter(feature.attributes.NAME));\n });\n return queryResults;\n };\n\n queryPlantsByCommonNamePreferred = async (value: string): Promise | []> => {\n const [QueryTask, Query] = await loadModules(['esri/tasks/QueryTask', 'esri/tasks/support/Query']);\n\n const queryTask = new QueryTask({ url: `${PLANT_DATA_LAYER_URL}/0` });\n const query = new Query();\n\n query.outFields = ['ALIVE', 'NAME'];\n query.returnGeometry = false;\n query.returnDistinctValues = true;\n query.where = `COMMON_NAME_PRIMARY = '${value}'`;\n\n return await queryTask.execute(query);\n };\n\n resetMapGraphics = async () => {\n if (!this._mapview) {\n return;\n }\n\n this.updateMapSelectedGardenLocations();\n const [Point] = await loadModules(['esri/geometry/Point']);\n\n this._mapview.graphics.removeAll();\n this._mapview.zoom = MAP_ZOOM;\n this._mapview.center = new Point({\n ...MAP_CENTER,\n });\n };\n\n goToLocations = async (features: any) => {\n if (!this._mapview || !features.length) {\n return;\n }\n\n const PLANT_LOCATION_UNDEFINED = [NaN, 0];\n const plantFeaturesWithExistingLocations = features.filter((feature: any) => {\n return (\n !PLANT_LOCATION_UNDEFINED.includes(feature.geometry.x) || !PLANT_LOCATION_UNDEFINED.includes(feature.geometry.y)\n );\n });\n\n this._mapview?.goTo({\n target: plantFeaturesWithExistingLocations,\n zoom: 16,\n });\n };\n\n // queryPlantsByGardenName = async (geometry: any) => {\n // const [QueryTask, Query] = await loadModules(['esri/tasks/QueryTask', 'esri/tasks/support/Query']);\n\n // const queryTask = new QueryTask({\n // url: `${PLANT_DATA_LAYER_URL}/1`,\n // });\n\n // const query = new Query();\n // query.outFields = ['NAME'];\n // query.orderByFields = ['NAME'];\n // query.returnDistinctValues = true;\n // query.returnGeometry = false;\n // query.geometry = geometry;\n // query.outSpatialReference = this._mapview?.spatialReference;\n\n // const queryResults = await queryTask\n // .execute(query)\n // .catch((e: any) => console.log('error in queryPlantsByGardenName()', e));\n\n // const species = queryResults.features\n // .map((feature: any) => feature.attributes.NAME)\n // .filter((NAME: string) => NAME && NAME);\n\n // return species;\n // };\n\n queryLocationByGardenName = async (gardenName: string) => {\n const [QueryTask, Query, SpatialReference] = await loadModules([\n 'esri/tasks/QueryTask',\n 'esri/tasks/support/Query',\n 'esri/geometry/SpatialReference',\n ]);\n\n const queryTask = new QueryTask({\n url: LOCATIONS_URL,\n });\n\n const query = new Query();\n const filterPlantsFields = filterOptionsConfig.map((item) => item.esriField);\n query.outFields = [\n 'OBJECTID',\n 'ALIVE',\n 'NAME',\n 'COMMON_NAME_PRIMARY',\n 'MAPPED',\n LOCATIONS_ESRI_FIELD,\n ...filterPlantsFields,\n ];\n query.where = `${LOCATIONS_GROUP_FIELD} LIKE '%${gardenName}%'`;\n query.returnGeometry = true;\n query.outSpatialReference = SpatialReference.WebMercator;\n\n store.dispatch(setSearchDefinitionExpression(query.where));\n\n const queryResults = await queryTask\n .execute(query)\n .catch((e: any) => console.log('error in queryLocationByGardenName()', e));\n\n const results = queryResults.features[0].attributes;\n\n return {\n results,\n features: queryResults.features,\n };\n };\n\n queryLocationForSearch = async (where: string) => {\n const [QueryTask, Query] = await loadModules(['esri/tasks/QueryTask', 'esri/tasks/support/Query']);\n\n const queryTask = new QueryTask({\n url: LOCATIONS_URL,\n });\n\n const query = new Query();\n query.outFields = [LOCATIONS_ESRI_FIELD, LOCATIONS_GROUP_FIELD];\n query.returnGeometry = false;\n query.returnDistinctValues = true;\n query.where = where;\n const queryResults = await queryTask.execute(query);\n\n return queryResults.toJSON();\n };\n\n queryGardenLocations = async (where: string) => {\n const [Query, SpatialReference, execute] = await loadModules([\n 'esri/rest/support/Query',\n 'esri/geometry/SpatialReference',\n 'esri/rest/query/executeQueryPBF',\n ]);\n\n const query = new Query();\n query.where = where;\n query.outFields = [LOCATIONS_GARDEN_LOCATION, LOCATIONS_GARDEN_CODE, LOCATIONS_GARDEN_WEBSITE];\n query.outSpatialReference = SpatialReference.WebMercator;\n query.returnGeometry = true;\n\n const queryResults = await execute.executeQueryPBF(GARDEN_LOCATIONS_LAYER_URL, query);\n\n return queryResults;\n };\n\n queryPlantsForSearch = async (where: string) => {\n const [QueryTask, Query] = await loadModules(['esri/tasks/QueryTask', 'esri/tasks/support/Query']);\n\n const queryTask = new QueryTask({\n url: `${PLANT_DATA_LAYER_URL}/0`,\n });\n\n const query = new Query();\n // query.outFields = ['*'];\n query.outFields = ['SORT_NAME', 'ALIVE', 'NAME', 'OBJECTID', 'COMMON_NAMES', 'COMMON_NAME_PRIMARY'];\n query.orderByFields = ['SORT_NAME'];\n query.returnDistinctValues = true;\n query.returnGeometry = false;\n query.where = where;\n const queryResults = await queryTask.execute(query);\n\n const queryCount = query;\n if (this._filterDefinitionExpression) {\n queryCount.where = queryCount.where = `(${queryCount.where}) AND (${this._filterDefinitionExpression})`;\n }\n\n // NOTE: Snackbar removed\n // this._plantsFeatureLayer!.queryFeatureCount(queryCount).then((count: any) => {\n // store.dispatch(setSnackbarResults(count));\n // store.dispatch(setSnackbar(true));\n // });\n\n return queryResults;\n };\n\n queryAccessionsByTourID = async (tourID: number) => {\n const [QueryTask, Query] = await loadModules(['esri/tasks/QueryTask', 'esri/tasks/support/Query']);\n\n const queryTask = new QueryTask({\n url: TOURS_URL,\n });\n\n const query = new Query();\n\n query.outFields = ['ACC_NUM_AND_QUAL'];\n query.returnDistinctValues = true;\n query.returnGeometry = false;\n query.where = `Tour_ID = ${tourID}`;\n\n const queryResults = await queryTask.execute(query);\n const accessionIDs = queryResults.features.map((feature: any) => feature.attributes.ACC_NUM_AND_QUAL);\n\n return accessionIDs;\n };\n\n queryScientificCommonByLetter = async (letter: string, searchField: string) => {\n const [QueryTask, Query] = await loadModules(['esri/tasks/QueryTask', 'esri/tasks/support/Query']);\n\n const queryTask = new QueryTask({\n url: `${PLANT_DATA_LAYER_URL}/0`,\n });\n\n const query = new Query();\n\n // query.outFields = ['*'];\n query.outFields = [\n searchField,\n 'ALIVE',\n 'NAME',\n 'OBJECTID',\n 'GENUS',\n ...SEARCH_PLANT_ALPHABET_EXCLUDE_SECTIONS,\n ...SEARCH_PLANT_ALPHABET_SECTIONS,\n ];\n query.returnDistinctValues = true;\n query.returnGeometry = false;\n query.orderByFields = [searchField];\n query.where = `UPPER(${searchField}) LIKE '${letter}%'`;\n\n return await queryTask.execute(query);\n };\n\n getTourStopsPlantData = async (accesionIDs: Array) => {\n if (!this._mapview || !this._map) {\n return;\n }\n const [QueryTask, Query, SpatialReference] = await loadModules([\n 'esri/tasks/QueryTask',\n 'esri/tasks/support/Query',\n 'esri/geometry/SpatialReference',\n ]);\n\n const queryTask = new QueryTask({\n url: `${PLANT_DATA_LAYER_URL}/0`,\n });\n\n const query = new Query();\n query.outFields = ['*'];\n query.returnGeometry = true;\n query.outSpatialReference = SpatialReference.WebMercator;\n query.where = getPlantsByAccessionWhereQuery(accesionIDs);\n\n const queryResults = await queryTask.execute(query);\n\n // eslint-disable-next-line array-callback-return\n const geometries = queryResults.features.map((feature: any) => {\n if (feature.geometry.latitude && feature.geometry.longitude) {\n return {\n attributes: feature.attributes,\n geometry: feature.geometry,\n };\n }\n });\n\n return geometries;\n };\n\n setTourStopsActiveStop = (accession: string) => {\n if (!this._tourGraphicsLayer) {\n return;\n }\n\n this._tourGraphicsLayer.graphics.forEach((graphic: any) => {\n if (splitByComma(graphic.attributes.ACC_NUM_AND_QUAL) === accession) {\n graphic.symbol = {\n type: 'picture-marker',\n url: TourStopSelected,\n width: 30,\n height: 30,\n };\n } else {\n graphic.symbol = {\n type: 'simple-marker',\n style: 'circle',\n color: 'white',\n size: '12px',\n outline: {\n color: 'blue',\n width: 2,\n },\n };\n }\n });\n };\n\n resetTourStopsGraphicsLayer = () => {\n if (!this._tourGraphicsLayer) {\n return;\n }\n this._tourGraphicsLayer.graphics.removeAll();\n };\n\n goToAllTourStops = () => {\n if (!this._mapview || !this._tourGraphicsLayer) {\n return;\n }\n\n this._mapview.goTo({\n target: this._tourGraphicsLayer.graphics,\n zoom: 15,\n });\n };\n\n setTourStopsGraphicsLayer = async (results: Array) => {\n if (!this._map) {\n return;\n }\n const [Graphic, GraphicsLayer] = await loadModules(['esri/Graphic', 'esri/layers/GraphicsLayer']);\n\n const graphics = results.map((feature: any) => {\n return new Graphic({\n attributes: feature && feature.attributes && feature.attributes,\n geometry: feature && feature.geometry && feature.geometry,\n symbol: {\n type: 'simple-marker',\n style: 'circle',\n color: 'white',\n size: '8px',\n outline: {\n color: 'blue',\n width: 2,\n },\n },\n });\n });\n\n if (!this._tourGraphicsLayer) {\n this._tourGraphicsLayer = new GraphicsLayer({\n id: 'tourStops',\n });\n } else {\n this._tourGraphicsLayer.graphics.removeAll();\n }\n\n this._tourGraphicsLayer?.addMany(graphics);\n\n this._map.add(this._tourGraphicsLayer as any);\n };\n\n queryTours = async () => {\n const [QueryTask, Query] = await loadModules(['esri/tasks/QueryTask', 'esri/tasks/support/Query']);\n\n const queryTask = new QueryTask({\n url: TOURS_URL,\n });\n\n const query = new Query();\n\n query.outFields = ['Tour_ID', 'Tour_Name', 'Description'];\n query.returnDistinctValues = true;\n query.returnGeometry = false;\n query.where = '1=1';\n\n const queryResults = await queryTask.execute(query);\n const tourResults = queryResults.features.map((feature: any) => feature.attributes);\n\n return tourResults;\n };\n\n goToTourStop = async (accession: string) => {\n if (!this._mapview || !this._tourGraphicsLayer) {\n return;\n }\n\n const graphic = this._tourGraphicsLayer.graphics.find(\n (graphic: __esri.Graphic) => graphic.attributes.ACC_NUM_AND_QUAL === accession\n );\n\n this._mapview.goTo(\n {\n target: graphic,\n // zoom: 16,\n },\n { duration: 1000 }\n );\n };\n\n queryGeneraByFamily = async (value: string): Promise | []> => {\n const [QueryTask, Query] = await loadModules(['esri/tasks/QueryTask', 'esri/tasks/support/Query']);\n\n const queryTask = new QueryTask({\n url: `${PLANT_DATA_LAYER_URL}/0`,\n });\n const query = new Query();\n\n query.outFields = 'GENUS';\n query.returnDistinctValues = true;\n query.returnGeometry = false;\n query.where = `FAMILY LIKE UPPER('%${value}%')`;\n\n const queryResults = await queryTask.execute(query);\n\n const results = queryResults.features.map((feature: any) => splitByCharacter(feature.attributes.GENUS)).sort();\n return results;\n };\n\n toggleADASublayers = (layerID: string, activeLayerToggles: Array, adaSublayersTitles: string[]) => {\n if (!this._map || !this._adaMapImageLayer) {\n return;\n }\n\n const sublayerToggles = [...activeLayerToggles].filter((id) => adaSublayersTitles.includes(id));\n\n if (sublayerToggles.includes(layerID)) {\n const index = sublayerToggles.indexOf(layerID);\n sublayerToggles.splice(index, 1);\n } else {\n sublayerToggles.push(layerID);\n }\n\n this._adaMapImageLayer?.allSublayers?.forEach((sublayer) => {\n sublayer.visible = sublayerToggles.includes(sublayer.title);\n });\n\n this._adaMapImageLayer.visible = true;\n };\n\n togglePlantData = () => {\n if (!this._map || !this._plantsFeatureLayer) {\n return;\n }\n this._plantsFeatureLayer.visible = !this._plantsFeatureLayer.visible;\n };\n\n toggleArtBasemap = () => {\n if (!this._map || !this._artLayer1) {\n return;\n }\n\n this._artLayer1.visible = !this._artLayer1.visible;\n };\n\n togglePointsOfInterest = (mapActiveLayerToggles: Array) => {\n if (!this._map || !this._interactiveFeatureLayer) {\n return;\n }\n\n let definitionExpression = '';\n\n if (mapActiveLayerToggles.length === 0) {\n this._interactiveFeatureLayer.definitionExpression = definitionExpression;\n this._interactiveFeatureLayer.visible = false;\n return;\n }\n\n const onlyPoints = (layerID: string) => layerID !== 'art' && layerID !== 'plantData';\n\n definitionExpression = mapActiveLayerToggles\n .filter((layerID: string) => onlyPoints(layerID))\n .map((layerID: string) => `Symbol = '${layerID}'`)\n .join(' OR ');\n\n definitionExpression = definitionExpression.length ? definitionExpression : \"Symbol = 'Show None'\";\n\n this._interactiveFeatureLayer.definitionExpression = definitionExpression;\n };\n\n toggleLocationCodes = () => {\n if (!this._map || !this._locationCodesMapImageLayer) {\n return;\n }\n this._locationCodesMapImageLayer.visible = !this._locationCodesMapImageLayer.visible;\n };\n\n waitForMapLoad = () => {\n return new Promise((resolve, reject) => {\n let checks = 0;\n const checkInterval = setInterval(() => {\n if (this._mapview) {\n clearInterval(checkInterval);\n resolve(true);\n }\n if (checks > 30) {\n //3 seconds\n clearInterval(checkInterval);\n reject();\n }\n checks++;\n }, 100);\n });\n };\n\n waitForPlantFeatureLayerViewLoad = () => {\n return new Promise((resolve, reject) => {\n let checks = 0;\n const checkInterval = setInterval(() => {\n if (this._plantsFeatureLayerView) {\n clearInterval(checkInterval);\n resolve(true);\n }\n if (checks > 30) {\n clearInterval(checkInterval);\n reject();\n }\n checks++;\n }, 100);\n });\n };\n\n handleDefinitionExpressionChange = async (definitionExpression: string) => {\n const appReducer = store.getState().appReducer;\n const { selectedAccession, searchType } = appReducer;\n\n this._mapPointsGraphicsLayer?.graphics?.removeAll();\n if (definitionExpression === '1=1' || definitionExpression === INITIAL_DEFINITION_EXPRESSION) {\n return;\n }\n\n const [Graphic] = await loadModules(['esri/Graphic']);\n if (this._plantsFeatureLayer && this._plantsFeatureLayerView && searchType !== LOCATIONS_SEARCH_LABEL) {\n let query = this._plantsFeatureLayer?.createQuery();\n if (definitionExpression) {\n query.where = `(${query.where}) AND (${definitionExpression})`;\n }\n query.outSpatialReference = this._mapview!.spatialReference;\n\n const response = await this._plantsFeatureLayer.queryFeatures(query);\n const { features } = response.toJSON();\n const filteredFeatures = features.filter((feature: any) => {\n return feature.geometry && !isNaN(feature.geometry.x) && !isNaN(feature.geometry.y);\n });\n\n if (features) {\n const definitionExpressionQueryAttributes = features.map((item: { attributes: any }) => item.attributes);\n store.dispatch(setDefinitionExpressionQueryAttributes(definitionExpressionQueryAttributes));\n }\n\n if (filteredFeatures.length > 0) {\n const { ACC_NUM_AND_QUAL } = selectedAccession?.attributes;\n const graphics = filteredFeatures.map((feature: any) => {\n const symbolImage = (\n feature: { attributes: { ACC_NUM_AND_QUAL: string; MAPPED: string } },\n ACC_NUM_AND_QUAL: string\n ) => {\n if (feature.attributes.ACC_NUM_AND_QUAL === ACC_NUM_AND_QUAL) {\n return feature.attributes.MAPPED === 'Y' ? iconPinPointExactSelected : iconPinPointApproximateSelected;\n } else {\n return feature.attributes.MAPPED === 'Y' ? iconPinPointExact : iconPinPointApproximate;\n }\n };\n\n const graphic = new Graphic({\n attributes: feature.attributes,\n geometry: { type: 'point', ...feature.geometry },\n symbol: {\n type: 'picture-marker', // autocasts as new PictureFillSymbol()\n url: symbolImage(feature, ACC_NUM_AND_QUAL),\n width: '20px',\n height: '25px',\n },\n });\n\n return graphic;\n });\n\n // Selected graphic based on selected plant ACC_NUM_AND_QUAL value\n const selectedGraphic = graphics.find((graphic: { attributes: { ACC_NUM_AND_QUAL: string } }) => {\n return graphic.attributes.ACC_NUM_AND_QUAL === ACC_NUM_AND_QUAL;\n });\n\n if (selectedGraphic) {\n this._mapview?.goTo(\n {\n center: [selectedGraphic.geometry.longitude, selectedGraphic.geometry.latitude],\n zoom: 21,\n },\n { duration: 1000 }\n );\n }\n\n this._mapPointsGraphicsLayer?.graphics?.addMany(graphics);\n }\n }\n };\n\n debounceHandleDefinitionExpressionChange: any = _debounce(\n (definitionExpression: string) => this.handleDefinitionExpressionChange(definitionExpression),\n 500\n );\n\n updatePlantsLayerDefinitionExpression = async (definitionExpressions: object) => {\n try {\n await this.waitForMapLoad();\n await this.waitForPlantFeatureLayerViewLoad();\n\n let definitionExpression = '1=1';\n const values = _values(definitionExpressions).filter((value) => value !== '');\n if (values.length === 1) {\n definitionExpression = values[0];\n }\n if (values.length > 1) {\n definitionExpression = `(${values.join(') AND (')})`;\n }\n this._filterDefinitionExpression = definitionExpression;\n this.debounceHandleDefinitionExpressionChange(definitionExpression);\n } catch (e) {\n console.log('error in updatePlantsLayerDefinitionExpression()', e);\n }\n };\n\n updateMapSelectedGardenLocations = async (gardenCode = '') => {\n const { gardenLocations } = store.getState().appReducer;\n const definitionExpression = `GardenCode = '${gardenCode}'`;\n store.dispatch(setGardenCodeSelected(gardenCode));\n\n if (gardenCode) {\n const [Polygon] = await loadModules(['esri/geometry/Polygon']);\n const garden: any = gardenLocations.find(({ GardenCode }) => GardenCode === gardenCode);\n const polygon = new Polygon({\n ...garden.geometry,\n });\n\n this._mapview?.goTo(polygon);\n }\n\n if (\n this._gardenLocationsFeatureLayer &&\n this._gardenLocationsFeatureLayer.definitionExpression !== definitionExpression\n ) {\n this._gardenLocationsFeatureLayer.definitionExpression = definitionExpression;\n }\n };\n\n toggleAllMapLayers = (visible: boolean) => {\n if (!this._map || !this._adaMapImageLayer) {\n return;\n }\n\n this._map.basemap.baseLayers.forEach((layer: any) => {\n if (layer.id !== 'greyVector') {\n layer.visible = visible;\n }\n });\n\n this._map.layers.forEach((layer: any) => {\n if (layer.id !== 'interactiveFeatures') {\n layer.visible = visible;\n }\n });\n\n this.toggleAllADASublayers(visible);\n };\n\n toggleAllADASublayers = (visible: boolean) => {\n if (!this._adaMapImageLayer) {\n return;\n }\n\n this._adaMapImageLayer.visible = visible;\n this._adaMapImageLayer.loadAll().then(() => {\n this._adaMapImageLayer?.allSublayers.forEach((sublayer) => {\n sublayer.visible = visible;\n });\n });\n };\n}\n\nconst mapController = new MapController();\n//@ts-ignore\nwindow.mapController = mapController;\n\nexport default mapController;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\n\nimport store from '../../store/store';\n\nimport Legend from '../../components/map/Legend';\nimport Camera from '../../components/map/buttons/Camera';\nimport AccessibilityWidget from '../../components/map/buttons/AccessibilityWidget';\n\nimport Favorite from '../../components/map/buttons/Favorite';\nimport Filter from '../../components/map/buttons/Filter';\nimport Tour from '../../components/map/buttons/Tour';\n\nexport const mapWidgetLegend = (_mapview: __esri.MapView | undefined, widgetLocation: string) => {\n const node = document.createElement('div');\n _mapview?.ui.add(node, widgetLocation);\n ReactDOM.render(\n \n \n ,\n node\n );\n};\n\nexport const mapWidgetFilter = (_mapview?: __esri.MapView, widgetLocation?: string) => {\n const node = document.createElement('div');\n _mapview?.ui.add(node, widgetLocation);\n ReactDOM.render(\n \n \n ,\n node\n );\n};\n\nexport const mapWidgetFavorite = (_mapview: __esri.MapView | undefined, widgetLocation: string) => {\n const node = document.createElement('div');\n _mapview?.ui.add(node, widgetLocation);\n ReactDOM.render(\n \n \n ,\n node\n );\n};\n\nexport const mapWidgetAccessibility = (_mapview: __esri.MapView | undefined, widgetLocation: string) => {\n const node = document.createElement('div');\n _mapview?.ui.add(node, widgetLocation);\n\n ReactDOM.render(\n \n \n ,\n node\n );\n};\n\nexport const mapWidgetCamera = (_mapview: __esri.MapView | undefined, widgetLocation: string) => {\n const node = document.createElement('div');\n _mapview?.ui.add(node, widgetLocation);\n ReactDOM.render(\n \n \n ,\n node\n );\n};\n\nexport const mapWidgetTour = (_mapview: __esri.MapView | undefined, widgetLocation: string) => {\n const node = document.createElement('div');\n _mapview?.ui.add(node, widgetLocation);\n ReactDOM.render(\n \n \n ,\n node\n );\n};\n","import { createBrowserHistory } from 'history';\n\nexport const appHistory = createBrowserHistory();\n","import React from 'react';\n\nimport IconLeaf from '../icons/IconLeaf';\n\nimport '../../styles/css/error.scss';\n\nconst ResultsError = ({ value }: { value: string }) => {\n return (\n
    \n \n

    \n There was an error searching for {value}. Try again or try another name.\n

    \n
    \n );\n};\n\nexport default ResultsError;\n"],"sourceRoot":""}