{"version":3,"sources":["img/arrow.png","img/mobiwisu_logo.png","img/tci-icon.png","img/map-icon.png","common.js","components/Modals/ShowItemSelectionModal.js","img/icons.js","img/Icon.jsx","Constants/GardenPlantsConstants.js","commonFunctions.js","constants.js","apiConnect.js","AppContext.js","Map/addMapPosition.js","components/Modals/ChartModal.js","components/Modals/ShowGrowthStageListModal.js","components/Modals/CalendarModal.js","gps.js","Map/mapConfig.js","Map/mapModels.js","Map/addMapBaseLayer.js","Map/mapStyle.js","Map/addMapTaskGrid.js","Map/commonMapFunctions.js","components/Modals/MapModal.js","components/Modals/ImageShowModal.js","components/ComponentStyles/ButtonStyles.js","components/Modals/MemoModal.js","components/Modals/ShowMemoListModal.js","components/Modals/StorageInfoModal.js","components/Modals/SampleSetModal.js","components/Modals/ShowSampleSetListModal.js","components/Modals/ShowDValuesListModal.js","i18n.js","commonElements.js","components/Modals/SettingsModal.js","components/NavMenu.js","components/ComponentStyles/IconStyles.js","components/Alerts/ConfirmModal.js","components/Modals/InventoryManagementModal.js","components/Farm.js","components/TaskViewer/TaskTypeSelectionListItem.js","components/TaskViewer/TaskTypeSelection.js","components/TaskViewer/Tasks.js","components/TaskViewer/GPS.js","components/TaskViewer/StopSelectForm.js","components/TaskViewer/EndFinishedTask.js","components/TaskViewer/Summary.js","components/TaskViewer/Stop.js","components/TaskViewer/TaskViewerMapFooter.js","components/TaskViewer/TaskViewerMapHeader.js","Map/addMapRoute.js","components/TaskViewer/TaskViewerMap.js","Map/addMapPartfieldGeometry.js","components/TaskViewer/TaskViewer.js","components/Modals/SowModal.js","components/Modals/MarkSowModal.js","components/Modals/MarkFertilizerModal.js","components/Modals/MarkPesticideModal.js","components/Modals/FertilizeModal.js","components/Modals/PlotTillageModal.js","components/ComponentStyles/InputStyles.js","components/Modals/SiloModal.js","components/Modals/HarvestModal.js","Constants/HarvestConstants.js","components/Modals/PlantProtectionModal.js","components/Modals/ActionSelectionModal.js","components/FarmPlot.js","components/Modals/FeatureSelectionModal.js","components/Map.js","components/MapViewer.js","components/PlotOperationAccordionCards/SowAccordionCard.js","Constants/AccordionCardConstants.js","components/PlotOperationAccordionCards/MemoAccordionCard.js","components/PlotOperationAccordionCards/FertilizeAccordionCard.js","components/PlotOperationAccordionCards/PlotModificationAccordionCard.js","components/PlotOperationAccordionCards/PlantProtectionAccordionCard.js","components/PlotOperationAccordionCards/HarvestAccordionCard.js","components/Modals/NutrientModal.js","components/Modals/ChangePlantModal.js","components/PlotOperation.js","Auth/Auth.js","Callback.js","api.js","components/Alerts/AlertTemplate.js","App.js","registerServiceWorker.js","index.js"],"names":["module","exports","FarmIdToView","farmId","toString","padStart","setSelectedFarmName","localStorage","setItem","JSON","stringify","getSelectedFarmName","s","getItem","parse","setSelectedFarmId","getSelectedFarmId","setSelectedYear","year","getSelectedYear","Date","getFullYear","setSelectedPlot","plot","getSelectedPlot","removeSelectedPlot","removeItem","getSelectedLang","getGPSfromStorage","setSelectedPage","value","getSelectedPage","setSelectedPlantsToView","getSelectedPlantsToView","setSelectedPlotsToView","getSelectedPlotsToView","removeSelectedPlantId","removeSelectedPlotGroupId","getSelectedForecastStation","stationId","getSelectedHistoryStation","key","farmYear","retrieveSelectedPlotIds","getSelectedPlots","farm","saveSelectedPlots","plotId","plots","some","p","filter","f","push","formatGroupLabel","data","className","label","customStyles","option","styles","isDisabled","isSelected","isFocused","backgroundColor","type","undefined","color","fontWeight","fontSize","lineHeight","minWidth","storeSelectedFeature","info","ShowItemSelectionModal","props","t","useTranslation","useState","checkedItems","setCheckedItems","plants","setPlants","setPlots","useEffect","formatCheckedItems","handleCheckboxSelection","e","target","name","checked","view","length","reduce","a","v","plantId","view2","groupId","Modal","show","onHide","Header","closeButton","onClick","Title","Body","Form","Group","Row","Col","xs","itemList","map","i","plantName","area","countId","Check","inline","onChange","groupName","substr","Footer","Button","variant","viewList","Object","entries","forEach","parseInt","copyData","buttonSaveClick","ICONS","Icon","svg","style","display","verticalAlign","flexShrink","path","fill","width","size","height","viewBox","d","icon","gardenPlantTypes","groupByKey","array","obj","x","groupByMarked","markedKey","nonMarkedKey","marked","nonMarked","m","n","toggleActive","activeId","cardId","setActiveId","formatPlannedDate","date","slice","month","Number","seasonCode","includes","getGrowthStageText","growthStage","selectFertilizerName","fert","productName","description","checkSelectedPlants","selectedPlotsData","indexOf","checkSowButtonState","dayJsFormatDate","dayjs","format","valueMax","inputObj","valueMaxObservation","valueMaxArea","valueMaxDryMaterialPercentage","round","Math","updateCalculativeArray","calculationCombinedData","floatValue","j","k","pest","newArr","objects","combinedAmounts","find","product","combinedData","pesticides","amount","fertilizer","GardenPlantCheck","substring","IsIrrigation","chartMode","taskViewer_viewComponents","taskViewer_taskStatuses","planned","running","paused","completed","endUnfinished","taskViewer_stopComponents","getContent","userToken","content","axios","get","params","headers","response","console","log","getContentWithAction","action","lang","Promise","resolve","reject","getContentWithActionAndLanguage","getContentWithActionAndPlantId","postContentWithAction","callback","post","postContentWithAction_","putContentWithAction","put","vectorSource","AppContext","React","createContext","ChartModal","auth","useContext","isLoading","setIsLoading","title","setTitle","chartOptions","setChartOptions","Highcharts","setOptions","getLangOptions","getTemperatureSumChartOptions","getRainSumChartOptions","plotName","plotLetter","handleDvalueChartLoading","handleGrowthChartLoading","getAccessToken","then","plotdata","legumes","apNumber","station","station30Y","stationId30Y","isLocalStation","localStation","clover","getDValueChartOptions","catch","c","sows","sow","plantGroup","temperatureSum","varietyClass","sowDate","sowingDate","getGrowthStageOptions","credits","enabled","navigator","rangeSelector","buttons","count","text","buttonSpacing","buttonTheme","r","states","select","scrollbar","chart","zoomType","yAxis","showInLegend","labels","align","opposite","max","xAxis","crosshair","series","dailyRains","tooltip","valueDecimals","valueSuffix","dataGrouping","textAlign","tickInterval","temperatures","dValueData","min","realDValue","predictedDvalue","growthData","realValues","predictedValues","t1Values","marker","symbol","radius","lineWidth","hover","lineWidthPlus","shortMonths","months","weekdays","Spinner","as","animation","role","highcharts","options","constructorType","ShowGrowthStageListModal","setGrowthData","chartModalShow","setChartModalShow","chartModalData","setChartModalData","hideContent","setHideContent","sortedData","sort","b","ListGroup","Item","harvest","plantVariety","row","CalendarModal","selectedLanguage","selecteddate","aria-labelledby","centered","locale","maxDate","selectedDate","disableGPS","current","geolocation","clearWatch","enableGPS","getCurrentPosition","position","err","warn","code","message","enableHighAccuracy","timeout","maximumAge","MapConfig","CLUSTER_SCALE_THRESHOLD","FEATURE_LAYER_MAX_SCALE_THRESHOLD","ELEVATION_MODEL_ZOOM_THRESHOLD","MLOY_GEOSERVER_WFS_VERSION","MLOY_GEOSERVER_NAMESPACE","MML_WMS_VERSION","MML_COPYRIGHT","MTECH_COPYRIGHT","WMTS_API","WMS_API","WFS_API","GEO_API","PROJECTION","MODIFICATOR_NAME","RESOLUTIONS","EXTENT","MATRIXSET","WMS_VERSION","FEATURE","OBSERVATION","FERTILITY_SAMPLE","FERTILITY_SERIES","NEW_FERTILITY_SERIES","FERTILITY_SERIES_PLANNED","FERTILITY_SERIES_COLLECTED","NOTE","TREE","ROCK","FLAG","MapModels","Attribution","SYKE","SYKE_COPYRIGHT","MTECH","WMSLayer","Sentinel","url","wms_version","layer_name","attribution","Korkeusmalli","WMTSLayer","Peruskartta","Ortokuva","Taustakartta","addMapBaseLayer","selectedWMTS","layer","tileSizePixels","projection","getProjection","extent","getExtent","tileSizeMtrs","getWidth","matrixIds","resolutions","pow","WMTS","matrixSet","opacity","tileGrid","WMTSTileGrid","origin","getTopLeft","requestEncoding","TileLayer","source","zIndex","visible","setLang","language","retrieveMapFeatureStyle","Style","image","Circle","Fill","style_config","features","map_features","fillColor","stroke","Stroke","strokeColor","zones","Fertilizer","Seed","Pesticide","Tillage","base","textColor","textLabelColor","agr_plot","default","modify","base_plot","ffa_plot","mavi_plot","cultivated_land","yellowFill","violetFill","greenFill","redFill","blueFill","grid","ndvi","0","0.05","0.1","0.15","0.2","0.25","0.3","0.35","0.4","0.45","0.5","0.55","0.6","0.65","0.7","0.75","0.8","0.85","0.9","0.95","1","fertilization","5","10","15","20","25","30","35","40","45","50","55","60","65","70","75","80","85","90","95","100","tillage","150","225","300","seeding","spraying","_styles","isobus","unit","this","feature","resolution","PDV","getProperties","zoneId","styleParams","Text","font","scale","placement","backgroundFill","padding","sentinel","NDVI","style_ndvi","parseFloat","toFixed","min_value","max_value","colormap","properties","values","fertilizing","percentage","fertilizing_fixed","Values","Default","Overlay","fertilizing_range","spraying_fixed","draw","geometry","coordinates","getGeometry","getCoordinates","MultiPoint","BasePlotName","offsetY","overflow","Source","PlotLetter","Area","PlantName","BasePlotId","start","bolded","end","offsetX","FeatureType","RegularShape","points","radius2","angle","Note","PI","UnitType","init","addMapTaskGrid","taskType","taskData","isSeedingFertilizing","partfieldLayer","GeoJSON","readFeatures","gridGeometry","dataProjection","featureProjection","idx","feat","set","styleObject","VectorSource","vectorLayer","VectorLayer","products","minAmount","maxAmount","setStyle","on","context","globalCompositeOperation","vectorContext","getVectorContext","getSource","forEachFeature","drawFeature","checkCoordsInsideGridPolygon","coords","getFeatures","coordinate","Point","longitude","latitude","transform","gridCellFeature","intersectsCoordinate","gridValue","addMapPosition","updateMapPosition","locationPoint","setGeometry","Feature","addFeature","getStyle","heading","velocity","src","rotation","CircleStyle","retrieveWgsCoordinates","coor3857","wgsCoord","proj","returnRoundedValue","dataValue","decimals","decim","featuresReader","featureCollection","crs","proj4","defs","register","WisuMap","MapModal","RasterBaseGroup","setMapFeatures","setGeolocation","setMapInitCoordinates","setCurrentTaskAmount","activatedGps","setActivatedGps","mapIsRendered","setMapIsRendered","pageIsLoading","setPageIsLoading","selectedPoint","setSelectedPoint","allowChanges","setAllowChanges","setBasic","setSatellite","currentPosition","useRef","timestamp","gpsWatch","enableCollectButton","setEnableCollectButton","enableDeleteButton","setEnableDeleteButton","collectedType","setCollectedType","gpsOptions","sSelectedPlot","all","session","renderMap","View","center","zoom","agrPlotFeature","createMapVectorSource","setExtent","callBack","agrPlots","setVisible","ContextChanged","id","usermapFeatures","clear","addFeatures","selectedSet","addSelectedFeatures","vectorSource2","strategy","strategyAll","getView","fit","maxZoom","featureLoaderCommon","errorHandler","getCollectionFromDb","LayerGroup","layers","createMapVectorSourceMapFeatures","mapPointsGroup","VectorGroup","orthoImage","basicImage","Map2","interactions","defaultInteractions","doubleClickZoom","mouseWheelZoom","controls","defaultControls","extend","MousePosition","coordinateFormat","coord","toStringHDMS","collapsible","ScaleLine","units","moveTolerance","startGPS","interaction","collection","Collection","single","Select","condition","click","toggleCondition","multi","hitTolerance","addInteraction","setActive","selected","PlotId","checkFeatureSelectionToButtons","deselected","mapBrowserEvent","stopPropagation","preventDefault","agrPlotSource","getState","selectedAgrPlotFeatureIds","w","apChar","number","clickHandler","values_","enableCollect","SelectedFeature","enableDelete","success","pos","validateNewPosition","valid","setCenter","getLayers","array_","loader","dataYear","pro","plotIds","selectedFeature","plotFound","duration","featureLoader","newPosition","potentialPosition","accuracy","newTime","timeDiff","distance","lat1","lon1","lat2","lon2","dlon","radians","dlat","squared","sin","cos","atan2","sqrt","redirect","geo","mapInitPosition","watchPosition","document","getElementById","getNewPointCoor","coor","wgs","pixel","getEventPixel","originalEvent","hit","hasFeatureAtPixel","cPoint","getEventCoordinate","addNewPointSample","baseNo","forEachFeatureAtPixel","pointInfo","basePlotId","sampleSetId","AddedSamaplePoints","addedSamaplePoints","newSampleSet","note","pointNote","featureType","ButtonGroup","vertical","collected","disabled","collectedFeature","nbrMax","removeFeature","CollectableSamples","collectableSamaplePoints","Array","isArray","collectFeature","DeletableSamples","deletableSamaplePoints","FeatureGeometryId","DeleteSet","FieldNo","deleteFeature","ImageShowModal","onHideImage","thumbnailImage","URL","createObjectURL","alt","deleteRowStyle","marginLeft","marginTop","marginBottom","textStyle","justifyContent","background","paddingTop","rowStyle","borderRadisu","float","borderRight","border","nutrientRowStyle","nutrientNumberCellStyle","addNoteRowStyle","addButtonStyle","borderRadius","changePlantStyle","right","deleteGrowthStage","MemoModal","calendarShow","setCalendarShow","setDate","memo","setMemo","memoId","setMemoId","featureGeometryId","setFeatureGeometryId","plantMemoType","setPlantMemoType","plantMemoGroup","setPlantMemoGroup","plantMemoTypeId","setPlantMemoTypeId","explanation","setExplanation","setCoordinates","mapShow","setMapShow","loadingCoordinates","setLoadingCoordinates","buttonWriteShow","setButtonWriteShow","showInAllYears","setShowInAllYears","files","setFiles","newImages","setNewImages","fileRef","imageShow","setImageShow","imageToView","setImageToView","selectedPlot","alert","useAlert","mapEvent","plotData","selectEvent","selectedElement","responseHandler","memotype","formatMemoType","memoDate","visibility","now","result","new","geometryID","Error","photoFetcher","reason","error","setTimeout","allowHide","memoFeature","flatCoordinates","wgscoord","allfiles","handleImageRemoval","file","mediaId","allImages","index","findIndex","element","splice","setRefresh","imageStyle","cursor","groupNameShort","controlId","Label","Control","placeholder","event","removeCoordinates","ref","accept","reader","FileReader","onload","readAsDataURL","multiple","hidden","CloseButton","deleteMemo","images","newI","photo","split","newPhotos","saveMemo","point","ShowMemoListModal","memos","setMemos","time","selectMemoEvent","setSelectMemoEvent","memoType","setMemoType","memoModalShow","setMemoModalShow","memoAttachments","setMemoAttachments","handleMemoFetching","formatMemos","models","memoPhotos","sortedMemoList","handleOperationMemoModal","baseplotid","StorageInfoModal","storageData","setStorageData","storage","purchaseProducts","unitText","SampleSetModal","mapModal","setMapModalShow","sampleSet","setSampleSet","samples","sortedPlannedSet","Boolean","nbr","sortedSampleSet","allowSave","sampleDate","plotCount","sampleCount","item","baseplotName","baseplotArea","lat","lon","refreshAndHandleOperationsSamples","operations","refreshAndHandleOperationsSet","ShowSampleSetListModal","sampleSets","setSampleSets","plannedSampleSets","setPlannedSampleSets","selectedSampleSetId","setSelectedSampleSetId","selectSampleSetEvent","setSelectSampleSetEvent","sampleSetModal","setSampleSetModalShow","checkedSets","setCheckedSets","checkedPlannedSets","setCheckedPlannedSets","setCollected","sampleSetsCollected","sampleSetUpdater","sampleSetsPlanned","sampleList","chosenSampleSet","handleCheckboxSelectionPlannedSets","handleCheckboxSelectionSets","combinedChecked","concat","deleteSets","operation","additions","ShowDValuesListModal","setDValueData","dValue","i18n","use","Backend","initReactI18next","fallbackLng","debug","backend","loadPath","interpolation","escapeValue","iconStyle","marginRight","inventoryIconStyle","GetLogoutIcon","GetGroupIcon","GetPlantIcon","GetEditIcon","GetFertilityIcon","GetInventoryIcon","OperationCardToggle","children","eventKey","classname","decoratedOnClick","AccordionContext","activeEventKey","useAccordionButton","SettingsModal","farmYears","setFarmYears","setSetYear","setFarms","setFarm","forecastStations","setForecastStations","forecastStation","setForecastStation","forecastHistoryStations","setForecastHistoryStations","forecastHistoryStation","setForecastHistoryStation","gpsValue","setGpsValue","farmsOptions","setFarmsOptions","mounted","getYears","getForecastStations","formatFarms","tempList","checkLoad","y","alertText","stations","historyStations","unshift","filterOption","createFilter","ignoreAccents","lg","changeLanguage","showForecasts","defaultChecked","logout","NavMenu","settingsModalShow","setSettingsModalShow","Navbar","light","Container","to","logo","Nav","Link","history","getPlots","homeHeaderStyle","forecastMeterStyle","forecastDropStyle","ConfirmModal","decline","InventoryManagementModal","storages","setStorages","setProducts","saveInProgress","setSaveInProgress","selectedStorage","setSelectedStorage","showConfirm","setShowConfirm","hasChanges","setHasChanges","preSelectedStorage","setPreSelectedStorage","retrieveModalData","storageOptions","propertyType","copyProducts","selectStorage","operationType","organic","qua","quality","productCode","getProductName","displayType","suffix","thousandSeparator","allowedDecimalSeparators","isAllowed","calculated","onValueChange","productsCopy","saveChanges","additionalInfo","updateAmount","updateDescription","calculatedValue","getInventorySumValue","filteredProducts","refresh","Farm","retievedFarms","setRetievedFarms","isLoadingMemos","setIsLoadingMemos","isLoadingSamples","setIsLoadingSamples","errorText","setErrorText","plantsDraw","setPlantsDraw","plotsDraw","setPlotsDraw","memosDraw","setMemosDraw","noPlots","setNoPlots","showChoiceModal","setShowChoiceModal","reload","reload2","comparePlots","plantModal","setPlantModal","plotModal","setPlotModal","memoListModal","setMemoListModal","setSampleSetsCollected","sampleSetCollectedDraw","setSampleSetCollectedDraw","setSampleSetsPlanned","sampleSetPlannedDraw","setSampleSetPlannedDraw","sampleSetListModal","setSampleSetListModal","sampleSetModalShow","dValueListModalShow","setdValueListModalShow","growthStageListModalShow","setGrowthStageListModalShow","inventoryModalShow","setInventoryModalShow","noSampleSets","setNoSampleSets","forecastData","setForecastData","DValueData","growthStageData","setGrowthStageData","growthStageListModalData","setGrowthStageListModalData","chartModalMode","setChartModalMode","memoAttachmentsLoaded","setMemoAttachmentsLoaded","forecastIsLoading","setForecastIsLoading","dValueIsLoading","setDValueIsLoading","growthStageIsLoading","setGrowthStageIsLoading","storageLoading","setStorageLoading","wheatStageCard","setWheatStageCard","barleyStageCard","setBarleyStageCard","oatStageCard","setOatStageCard","sessionResult","setSessionResult","storageManagementAccess","setStorageManagementAccess","storageInfoShow","setStorageInfoShow","selectStorageEvent","setSelectStorageEvent","proMode","setProMode","handleCloseModal","handleFertilityAnalyses","farms","haveFarm","getPlotsData","proInfo","group","formatPlantsGroup","group2","formatPlotsGroup","storageObject","storageAccess","handleForecastsFetching","handleDValueFetching","handleGrowthDataFetching","getMemoAttachments","formatFertility","setGrowthStageCardData","handleOperations","promiseArray","updateSamplePoints","saveSamplePoints","deleteSamplePoints","saveSampleSet","newSetId","newSamplePoints","sample","promise","updatables","updatablePoints","putContentWithActionFertility","deletables","deletablePoints","deleteSampleSet","ids","deletableSets","groups","plantList","g","sortedPlants","newList","classList","remove","plotList","sortedplotList","slice2","collectedSampleList","plannedSampleList","Set","sortedSampleSets","temp","InventoryButtonGroup","items","storageName","harvestProduct","button","storageId","data-name","ButtonGroup2","plantNameShort","buttonClick","plant","currentTarget","ButtonGroup3","buttonClick2","ButtonGroup4","getMemoText","getButtonDValue","dData","dValueCard","gData","barleyData","startsWith","growthStageCard","wheatData","oatData","shortenText","ButtonSampleSetCollected","Id","ButtonSampleSetPlanned","Card","latestTemp","latestRain","TaskTypeSelectionListItem","allCompleted","every","taskStatus","viewComponent","dataArray","taskList","Badge","pill","somePaused","TaskTypeSelection","fertilizations","sowingFertilizations","plantProtections","soilTillages","setTaskList","dataCallbackHandler","taskTypeResolver","Tasks","getVariant","task","taskDataId","plotDesignator","taskName","GPS","StopSelectForm","setShow","stopComponentCallBack","runStateCallBack","EndFinishedTask","taskTypeTextMapping","3","4","returnCallback","taskSpecificData","productDesignator","defaultValue","averageAmount","unitDesignator","horizontal","Summary","setData","taskId","totalTime","effectiveTime","totalDistance","Stop","stopComponent","setStopComponent","stopComponentSetter","component","ended","StopComponentSelector","TaskViewerMapFooter","runState","setRunState","showStopDialogue","setShowStopDialogue","sendStatusToMap","setStateFromStopDialogue","state","setHideStop","startPause","currentTaskAmount","currentTaskUnit","closeStop","TaskViewerMapHeader","seedFertFertilizing","setSeedFertFertilizing","seedFertSeeding","setSeedFertSeeding","2","seedingFertilizingClick","taskSelection","switchGridLayer","sowData","fertData","generateTopInfo","addMapRoute","routeGeometry","routeStyle","lineDash","TaskViewerMap","mapInitCoordinates","setMap","setTaskSpecificData","setCurrentTaskUnit","timeLogId","timer","taskHasBeenStarted","zoomIdx","zoomLevels","dataIsSet","hasOwnProperty","myMap","OlMap","route","shiftZoomArrayIdx","setZoom","partfield","partfieldStyle","addMapPartfieldGeometry","partfieldGeometry","addLayer","fertLayer","seedLayer","createTaskStatusLogObject","createTaskDataLogObject","positionNorth","positionEast","positionUp","timeStap","dataLogValues","getCurrentLayer","currentLayer","getVisible","startLogTimer","setInterval","logObject","postContentWithActionCallback","stopLogTimer","clearInterval","status","TaskViewer","currentComponent","setCurrentComponent","getComponent","SowModal","varieties","setVarieties","selectedVariety","setSelectedVariety","setAmount","amountArea","setAmountArea","totalArea","setTotalArea","setPlantName","multiSelect","setMultiSelect","varietyUnit","setVarietyUnit","validate","setValidation","textt","varietyId","isMixture","mixture","unitNumber","selectedPlots","fetchVarietyData","formatVarietyGroups","total","currentItem","selectedLand","previousVarieties","groupsList","groupVarieties","vary","obj2","readOnly","varietyChanged","decimalScale","fixedDecimalScale","allowNegative","Accordion","newSows","updateSows","seedQuality","saveSow","MarkSowModal","plannedSows","setPlannedSows","combinedSows","setCombinedSows","contentIsLoading","setContentIsLoading","infoText","setInfoText","cCD","setCCD","actionDate","grouped1","grouped2","combinedIds","combinedArea","combinedAmount","variety","saveSows","openFerts","today","invalidDate","originalData","formattedDate","tiheys","typeId","openFertilizings","showFertilizingModal","OverlayTrigger","trigger","rootClose","overlay","Tooltip","bg","fertilizingModalDisabled","newDate","MarkFertilizerModal","plannedFerts","setPlannedFerts","combinedFerts","setCombinedFerts","promiseFert","promiseSow","dataFert","dataSow","plannedDate","fertilizerKind","productWithPesticide","pesticideId","fertilizingId","plotArea","newFerts","unitType","saveFertilizers","MarkPesticideModal","plannedPests","setPlannedPests","combinedPests","setCombinedPests","growthInformation","combinedProducts","fertilizings","el","minMax","join","getSectionHeader","pestProduct","updatePest","defaultAmount","rounded","saveSpray","protectionOp","growthInfo","inserts","observations","updates","pesticideSaveModel","protectionOperations","savePesticides","FertilizeModal","selectedFertilizer","setSelectedFertilizer","prevAndAllFertilizers","setPrevAndAllFertilizers","prevAndAllFertilizersBasicList","setPrevAndAllFertilizersBasicList","manureAndFarmFertilizers","setManureAndFarmFertilizers","manureAndFarmFertilizersBasicList","setManureAndFarmFertilizersBasicList","fertilizerGroup","setFertilizerGroup","setUnit","tankMixtureText","setTankMixtureText","validFertilizerArea","setValidFertilizerArea","showFertilizerArea","setShowFertilizerArea","fertilizerArea","setFertilizerArea","areaUnit","fertilizerRadios","allFertilizers","previousfertilizers","manureFertilizers","farmFertilizers","ownFertilizers","limeFertilizers","farmAndOwn","list","validateFertilizerArea","disseminationDate","selectChanged","radio","ToggleButton","newFertilizings","unitti","updateFertilizes","saveFertilizing","PlotModificationModal","plotModifications","setPlotModifications","selectedPlotModification","setSelectedPlotModification","depth","setDepth","modificationCount","setModificationCount","tillingId","setTillingId","setUnitText","showDepth","setShowDepth","cultivatedArea","setCultivatedArea","validCultivatedArea","setValidCultivatedArea","allowIdsWithUnit","formatModificationGroups","way","previousList","farmUsed","validateCultivatedArea","setValueValidator","Range","modification","deletePlotModification","newModifications","saveTilling","noInput","SiloModal","defaultName","silo","setSilo","capacity","setCapacity","volume","setVolume","existingStorages","setExistingStorages","invalidName","setInvalidName","showSilo","onHideSilo","exists","toLowerCase","checkSiloName","selectedProduct","newId","saveSilo","HarvestModal","siloShow","setSiloShow","productsIsLoading","setProductsIsLoading","setSelectedProduct","drawStorages","setDrawStorages","storagesIsLoading","setStoragesIsLoading","harvestArea","setHarvestArea","selectedHarvestUnitInputType","setSelectedHarvestUnitInputType","selectedHarvestUnit","setSelectedHarvestUnit","dryMateriaContent","setDryMateriaContent","unitPcs","setUnitPcs","freshContent","setFreshContent","trailerVolume","setTrailerVolume","volumeWeight","setVolumeWeight","validHarvestArea","setValidHarvestArea","dryMateriaPerHa","setDryMateriaPerHa","textt2","harvestUnitsInputType","harvestUnitsGroup","formatFields","harvestSuggestions","formatProductGroups","validateHarvestArea","plantProducts","storagesResource","loadAmount","suggestion","baleWeight","harvestedUnit","beginDate","unique","match","modificationDate","isAfter","isSame","harvestId","compareArea","calculateAmountFromLoadValues","saveHarvest","vWeight","newAmount","newHarvests","balesArr","loadNumber","loadPerPlot","newPlotArray","selectedArea","addInStart","plotloads","floor","attachedLoads","totalValue","newValue","checkMultipleAndCalculateLoadAmounts","baleinfo","hectoliterWeight","silos","noOptionsMessage","inputValue","radio2","paddingLeft","selectedValu","PlantProtectionModal","observes","setObserves","fertilizers","setFertilizers","growthStages","setGrowthStages","setPesticides","observationMeasures","setObservationMeasures","setGrowthInfo","newSelectedGrowthInfo","setNewSelectedGrowthInfo","growthInfoSelected","setGrowthInfoSelected","observationRows","setObservationRows","pesticideRows","setPesticideRows","fertilizerRows","setFertilizerRows","selectedGrowthStage","setSelectedGrowthStage","pesticideArea","setPesticideArea","updatePlantProtections","setUpdatePP","setVisibility","disableGrowthStage","setDisableGrowthStage","gardenPlant","setGardenPlant","disableSaveButton","setDisableSaveButton","startTime","setStartTime","temperature","setTemperature","waterLha","setWaterLha","wind","setWind","windDirectionList","windDirection","setWindDirection","safeDistanceWind","setSafeDistanceWind","safeDistanceWindTarget","setSafeDistanceWindTarget","safeDistanceSoil","setSafeDistanceSoil","safeDistanceSoilTarget","setSafeDistanceSoilTarget","sprayBoom","setSprayBoom","serviceLocation","setServiceLocation","maker","setMaker","mapModalParameters","setMapModalParameters","coordinatesLoading","setCoordinatesLoading","OBSERVATION_AMOUNT_DISABLED","OBSERVATION_AMOUNT_LITTLE","mode","OBSERVATION_AMOUNT_MODERATE","OBSERVATION_AMOUNT_ALOT","previousObservations","particleSpecial","handleArraySorting","trim","prevPesticides","allPesticides","handleObservationUnitSorting","plantTypeDetector","protections","filteredObservationItem","obs","observationFeature","Visibility","found","allList","observationUnits","sortedList","formatGrowthInfo","addEmptyObservation","addEmptyPesticide","ArrayCopier","waterArea","startHour","sprayArea","visibilityChanged","growthStageName","GardenPlants","newArray","updateArrayValue","clearFertilizerRow","newFertRows","clearPesticideRow","newPestRows","clearObservationRow","newSelectedObs","clearCoordinates","plotNumber","selectedObs","newObservation","observationId","insert","density","latestElement","selectedPests","newPesticide","withdrawal","validateOperation","o","growthInfoEnlargement","newGrowthInfo","growthUpdate","update","rowAdditionHandler","validationExtension","validated","newGrowthinfo","deleteOperation","deleteObservation","updatedGrowthInfo","growths","removeGrowthStage","updated","updatedSelections","newRowData","updatedRows","removeObservation","dataModel","observationsText","visValue","setObservationsToUpdate","pests","removePesticide","produtName","ferts","removeFertilizer","selectedFerts","newFertilizer","addEmptyFertilizer","sm","span","offset","hasSelectedElement","isMapEdit","checkDeleteButton","deletePlantProtection","filteredFertRows","filteredPestRows","filteredObsRows","newObsRows","updateOperations","protectionOperation","protectionSaveModel","saveMultiSelectPlantProtection","updatedFertRows","updatedPestRows","updatedObsRows","insertOperations","saveObservation","savePlantProtection","updatedGrowthInfo2","ActionSelectionModal","sowModalDisabled","setSowButtonDisabled","harvestModalDisabled","setHarvestModalDisabled","fertilizerModalDisabled","setFertilizerButtonDisabled","pesticideModalDisabled","setPesticideButtonDisabled","setSelectedPlots","selectedPlotsCount","setSelectedPlotsCountText","sowModalShow","setSowModalShow","markSowModalShow","setMarkSowModalShow","markFertilizerModalShow","setMarkFertilizerModalShow","markPesticideModalShow","setMarkPesticideModalShow","fertilizeModalShow","setFertilizeModalShow","plotModificationModalShow","setPlotModificationModalShow","harvestModalShow","setharvestModalShow","plantProtectionModalShow","setPlantProtectionModalShow","selectMultiPlotEvent","setSelectMultiPlotEvent","addMode","setAddMode","sowsLoading","setSowsLoading","fertsLoading","setFertsLoading","pestsLoading","setPestsLoading","buttonStyle","margin","selectedplots","ha","checkPlotsHaveNoPlant","checkSows","checkFerts","checkPests","flattenObjects","object","productsGroupNo","assign","pesticideRowKey","productGroup","groupedByDate","productGroup2","groupPesticides","combineArr","fertNo","subList","groupFertilizers","FarmPlot","checkedPlots","setCheckedPlots","showActionModal","setShowActionModal","searchTerm","setSearchTerm","searchResults","setSearchResults","window","innerHeight","setRotation","totalAmountText","setTotalAmountText","mainList","setMainList","actionModeAdd","setActionModeAdd","allowedSave","setAllowedSave","setShowAlert","header","close","setAlertContent","selectAlltext","deselectAlltext","setSelected","location","plotGroup","savedPlantId","savedPlotGroupId","updateViewMode","sessionStorage","rValue","level","farmHaveUIWriteRights","getContentFarmPlot","areaCalculatorAndFormatter","addEventListener","removeEventListener","plotResults","filterSearchResults","formatPlantPlotsGroup","groups2","handleCheckboxSelectionAll","removeSelectedPlotIds","saveSelectedPlotIds","plantValue","plotgroupValue","results","paddingBottom","menuPortalTarget","body","menuPortal","InputGroup","showAlert","FeatureSelectionModal","FarmYear","wktGeometry","WktGeometry","fieldNo","fFeldNo","Amount","saveFeature","Map","setAgrPlotFeatures","selectModalDisabled","setSelectModalDisabled","selectMultiModalDisabled","setSelectMultiModalDisabled","sidePaneShow","setSidePaneShow","extendSidePane","selectionEvent","setSelectionEvent","featureSelectionEvent","setFeatureSelectionEvent","showFeatureSelectionModal","setShowFeatureSelectionModal","allowModalHide","basicLayer","satelliteLayer","selectedLayer","setSelectedLayer","disableGPSEvent","setDisableGPSEvent","isGPSDisabled","setGPSDisabled","initalCoordinatesView","setInitalCoordinatesView","setSelectedFeature","setDisabled","noObservations","setNoObservations","noNotes","setNoNotes","noTrees","setNoTrees","noRocks","setNoRocks","noFertilitySamples","setNoFertilitySamples","setEnableDelete","reachedBottom","setReachedBottom","showMemoModal","setMemoModal","memoEvent","setMemoEvent","showObservationModal","setObservationModal","observationEvent","setObservationEvent","handleResize","settingsGPSDirective","updateSize","prop","ignorable","style_","text_","getPlotDataWithCoordinates","featureClickHandler","featureSelected","addNewPointMemo","addNewPointObservation","addNewPointRock","addNewPointTree","checkPlotSelectionToButtons","plotProperties","coor4326","saveUserFeature","featureId","addedFeatures","AllFeatures","featuresChecker","mapfeaturesChanged","handleSelectedFeatures","selectedFeatures","replace","featureLoader2","oldView","getCenter","uncheck","popover","Popover","popover2","ToggleButtonGroup","listInnerRef","handleFeatureSelectionClose","filterDeletedFeature","filteredItems","farmPlotClickHandler","map_img","satelite_img","Collapse","in","amountSelected","getSidePaneContent","onScroll","scrollTop","scrollHeight","clientHeight","getInteractions","pop","selectedFiltered","features_","handlePlotSelectionRemoval","geometryId","MapViewer","SowAccordionCard","setSows","sowIsLoading","setSowIsLoading","memoIsLoading","setMemoIsLoading","modalDisabled","setModalDisabled","setSowDone","updatedSows","activeCard","setActiveCard","setSelectEvent","setModalShow","memosIsLoading","MemoAccordionCard","setMemosIsLoading","FertilizeAccordionCard","fertilizes","setFertilizes","fertilizeIsLoading","setFertilizeIsLoading","setFertilizeDone","fertArea","updatedFerts","fertilizationArea","setNutrientModalShow","PlotModificationAccordionCard","plotModificationIsLoading","setPlotModificationIsLoading","modifications","PlantProtectionAccordionCard","setPlantProtections","plantProtectionIsLoading","setPlantProtectionIsLoading","compareProtections","doneProtections","plannedProtections","specialObservationsDone","specialObservationsPlanned","datelessProtections","comparisonExtenderDoneDates","comparisonExtenderPlannedDates","comparisonExtenderGrowthStages","comparisonExtenderObservations","charAt","comparisonExtenderPesticides","comparisonExtenderFertilizings","getHeaderText","rowLetter","displayText","getSecondSubText","setPesticideDone","updatedPPs","getSubText","HarvestAccordionCard","harvests","setHarvests","harvestIsLoading","setHarvestIsLoading","sectionIsLoading","setSectionIsLoading","h","NutrientModal","nutrientData","setNutrientData","callMMNutrientCalculation","nDiff","nCalculated","nMax","pDiff","pCalculated","pMax","manureException","kCalculated","nNeed","pNeed","kNeed","kMax","ChangePlantModal","pageLoading","setPageLoading","plantSelectList","setPlantSelectList","spreadingList","setSpreadingList","mulchingList","setMulchingList","fertIntList","setFertIntList","selectedPlant","setSelectedPlant","selectedSpreading","setSelectedSpreading","selectedMulching","setSelectedMulching","selectedFertInt","setSelectedFertInt","unitTypeText","setUnitTypeText","yieldTarget","setYieldTarget","fertCount","setFertCount","harvestYear","setHarvestYear","legumesContent","setLegumesContent","enableLegumes","setEnableLegumes","enableHarvestYear","setEnableHarvestYear","enableGardenPlants","setEnableGardenPlants","enableFertInt","setEnableFertInt","originalAgrPlotData","setOriginalAgrPlotData","sowsExists","setSowsExists","default_text","default_choice_text","legumesRadios","retrievePlants","previousPlants","spreadings","mulchings","intensities","plantData","selected_p_unitType","plotFertilizationCount","harvestLevel","plotLegumes","plotSpreading","spreadingMethod","plotMulching","mulchingMethod","plotfertInt","fertiliserIntensity","plantPerennial","savePlant","removeSows","isNaN","spreading","mulching","fertInt","plantModel","plotUndersownCrop","legumesUse","yieldTargetChanged","fertCountChanged","harvestYearChanged","defaultActiveKey","PlotOperation","selectSowEvent","setSelectSowEvent","refreshSows","setRefreshSows","selectFertilizingEvent","setSelectFertilizingEvent","refreshFertilizes","setRefreshFertilizes","selectModificationEvent","setSelectModificationEvent","refreshPlotModifications","setRefreshPlotModifications","selectPlantProtectionEvent","setSelectPlantProtectionEvent","refreshPlantProtections","setRefreshPlantProtections","selectHarvestEvent","setSelectHarvestEvent","setHarvestModalShow","refreshHarvests","setRefreshHarvests","refreshMemos","setRefreshMemos","plantExists","setPlantExists","changePlantModalShow","setChangePlantModalShow","nutrientModalShow","setP","refreshProtectionFertilizer","Auth","settingss","login","userManager","signinRedirect","ClearHttContextSession","user","access_token","signoutRedirect","handleAuthentication","hash","UserManager","response_mode","signinCallback","page","cacheSettings","debug_mode","show_forecasts","isAuthenticated","expires_at","getTime","automaticSilentRenew","revokeAccessToken","filterProtocolClaims","events","addAccessTokenExpiring","Callback","Component","AlertTemplate","progress","setProgress","seconds","setSeconds","interval","calculateProgress","ProgressBar","App","setAuth","settings","alertOptions","positions","BOTTOM_CENTER","transition","transitions","FADE","template","top","left","Provider","exact","render","hostname","baseUrl","getElementsByTagName","getAttribute","rootElement","ReactDOM","basename","fallback","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.39317f27.chunk.js","sourcesContent":["module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAD0AAABRCAYAAABhVK7IAAACPklEQVR4Xu2bUW7EIAxEk6v0PJV61ko9z16lFdGmS7IQ7ME2QZr8Lg5+MDMJ2+26jLl+s2nX6BbCJ1yWJQfeeUP7CJ2sAhwOTmhnb5VkfZ4yZBNCJmnIOhw8Alqyw6Hgw6A/vj+Xx9dPzVGufbnevCbrBLxfI8A9oauyzqETfDR4OPQZuAGdPjbv0fyGT9kWd7kEPELmHtBq4Ghwa2ixj0uxfeFtU5mHQF/J+gwfEWqW0LCso8GtoM2AI/xtAd3l49ormae/3aA1PgbAu/ruKpa8ZvYeVz2CrQfa3MdRO45Cu/gYgIae36bQFj4GwNUM6oIIH3uDa6HDfOwJroEO9TEALfZ3N7SnjwFwEY9o0Egfe4BLoG8ha+VR9JILhh4ha8Vp7NLfLejhad16jUVeU6+gbw+MHkNr0Lf1sdLbRZmroO/gY4s0L0FPI2tFsB04z9DTAmv8nUNP5WNA5v/+bkLf2ccA+Ma7QyN/Qz7MGbE4jS8LW4/0/fM1QXcD73fzBDcC3loltFQftXEz7XRiMJH4JNCbp9HrbaEGQEP9Q0XPVSJ0WgjuNGqaSl3lkQUpFSqivLOdobwp7/4VoKdfawhlElTEIGOQvX7d2+/i4x3oaXparykGmXLNeMriKUspGclwpjfTW6KT4ximt3LNmN5Mb6VkJMOZ3kxviU6Y3l3/x8j0ZnrrbdasYHozvZsieRvAd2/lmpn8ekE553k4tGlQUe3L/k4ApBzqHyoiNLI/djXQpkFFWc8jfQ33/ge1DyBeHWqAPwAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,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\"","import React from 'react';\nimport './css/general.css'\n\nexport const FarmIdToView = (farmId) => {\n return farmId.toString().padStart(9, '0')\n}\n\nexport const setSelectedFarmName = (farmId) => {\n localStorage.setItem('selectedFarmName', JSON.stringify(farmId));\n}\n\nexport const getSelectedFarmName = () => {\n let s = localStorage.getItem('selectedFarmName');\n\n if (s === \"undefined\" || s === \"\") return '';\n\n return JSON.parse(s) || '';\n}\n\nexport const setSelectedFarmId = (farmId) => {\n localStorage.setItem('selectedFarm', JSON.stringify(farmId));\n}\n\nexport const getSelectedFarmId = () => {\n let s = localStorage.getItem('selectedFarm');\n\n if (s === \"undefined\" || s === \"\") return '';\n\n return JSON.parse(s) || 0;\n}\n\nexport const removeSelectedFarmId = () => {\n localStorage.removeItem('selectedFarm');\n}\n\nexport const setSelectedYear = (year) => {\n localStorage.setItem('selectedYear', JSON.stringify(year));\n}\n\nexport const getSelectedYear = () => {\n return JSON.parse(localStorage.getItem('selectedYear')) || new Date().getFullYear();\n}\n\nexport const removeSelectedYear = () => {\n localStorage.removeItem('selectedYear');\n}\n\nexport const setSelectedPlot = (plot) => {\n localStorage.setItem('selectedPlot', JSON.stringify(plot));\n}\n\nexport const getSelectedPlot = () => {\n return JSON.parse(localStorage.getItem('selectedPlot')) || null;\n}\n\nexport const removeSelectedPlot = () => {\n localStorage.removeItem('selectedPlot');\n}\n\n/* Languages */\nexport const setSelectedLang = (lg) => {\n localStorage.setItem('selectedLanguage', JSON.stringify(lg));\n}\n\nexport const getSelectedLang = () => {\n return JSON.parse(localStorage.getItem('selectedLanguage')) || 'fi';\n}\n\nexport const setGPStoStorage = (value) => {\n localStorage.setItem('GPSSelected', JSON.stringify(value));\n}\n\nexport const getGPSfromStorage = () => {\n return JSON.parse(localStorage.getItem('GPSSelected')) || false;\n}\n\nexport const setSelectedPage = (value) => {\n localStorage.setItem('getSelectedPage', JSON.stringify(value));\n}\n\nexport const getSelectedPage = () => {\n return JSON.parse(localStorage.getItem('getSelectedPage')) || 0;\n}\n\nexport const setSelectedPlantsToView = (value) => {\n localStorage.setItem('selectedPlantsToView', JSON.stringify(value));\n}\n\nexport const getSelectedPlantsToView = () => {\n return JSON.parse(localStorage.getItem('selectedPlantsToView')) || 0;\n}\n\nexport const setSelectedPlotsToView = (value) => {\n localStorage.setItem('selectedPlotsToView', JSON.stringify(value));\n}\n\nexport const getSelectedPlotsToView = () => {\n return JSON.parse(localStorage.getItem('selectedPlotsToView')) || 0;\n}\n\n/* PlantId for navigation */\nexport const setSelectedPlantId = (plantId) => {\n localStorage.setItem('selectedPlantId', JSON.stringify(plantId));\n}\n\nexport const getSelectedPlantId = () => {\n return JSON.parse(localStorage.getItem('selectedPlantId')) || -1;\n}\n\nexport const removeSelectedPlantId = () => {\n localStorage.removeItem('selectedPlantId');\n}\n/*---*/\n\n/* PlotGroupId for navigation */\nexport const setSelectedPlotGroupId = (plotId) => {\n localStorage.setItem('selectedPlotGroupId', JSON.stringify(plotId));\n}\n\nexport const getSelectedPlotGroupId = () => {\n return JSON.parse(localStorage.getItem('selectedPlotGroupId')) || -1;\n}\n\nexport const removeSelectedPlotGroupId = () => {\n localStorage.removeItem('selectedPlotGroupId');\n}\n/*--- */\n\n/* Front page forecast station */\nexport const getSelectedForecastStation = () => {\n return JSON.parse(localStorage.getItem('selectedForecastStation')) || {stationId: -1};\n}\nexport const setSelectedForecastStation = (stationId) => {\n localStorage.setItem('selectedForecastStation', JSON.stringify(stationId));\n}\n\nexport const getSelectedHistoryStation = () => {\n return JSON.parse(localStorage.getItem('selectedHistoryStation')) || {stationId: -1};\n}\nexport const setSelectedHistoryStation = (stationId) => {\n localStorage.setItem('selectedHistoryStation', JSON.stringify(stationId));\n}\n/* --- */\n\nlet key = (farmId, farmYear) => {\n return `mobiwisu-selected-plots-${farmId}-${farmYear}`;\n};\n\nexport let retrieveSelectedPlotIds = (farmId, farmYear) => {\n var plotIds = JSON.parse(localStorage.getItem(key(farmId, farmYear)));\n return plotIds || [];\n};\n\nexport const removeSelectedPlotIds = () => {\n\n let farm = getSelectedFarmId();\n let year = getSelectedYear();\n localStorage.setItem(key(farm, year), JSON.stringify([]));\n\n}\n\nexport let saveSelectedPlotIds = (plotIds) => {\n if (plotIds && plotIds.length) {\n\n let farm = getSelectedFarmId();\n let year = getSelectedYear();\n let plots = retrieveSelectedPlotIds(farm, year);\n\n if (plots.some(p => plotIds.includes(p)))\n plots = plots.filter(item => !plotIds.includes(item)).map(c => c);\n else\n plots = [...plots, ...plotIds];\n\n localStorage.setItem(key(farm, year), JSON.stringify(plots));\n }\n}\n\nexport let getSelectedPlots = () => {\n let farm = getSelectedFarmId();\n let year = getSelectedYear();\n return retrieveSelectedPlotIds(farm, year);\n}\n\nexport let saveSelectedPlots = (plotId) => {\n if (plotId) {\n\n let farm = getSelectedFarmId();\n let year = getSelectedYear();\n let plots = retrieveSelectedPlotIds(farm, year);\n\n if (plots.some(p => p === plotId))\n plots = plots.filter(f => f !== plotId);\n else\n plots.push(plotId);\n\n localStorage.setItem(key(farm, year), JSON.stringify(plots));\n }\n}\n\nexport const formatGroupLabel = data => {\n return (\n
\n
{data.label}
\n
\n )\n}\n\nexport const customStyles = {\n option: (styles, { data, isDisabled, isSelected, isFocused }) => {\n return {\n ...styles,\n backgroundColor: isDisabled ? '#DCDCDC' : data.type === 'selectableHeader' ? '#E6E6FA' : isSelected ? '#E6E6FA' : isFocused ? '#E6E6FA' : undefined,\n color: isDisabled ? 'black' : undefined,\n fontWeight: isDisabled ? '700' : data.type === 'selectableHeader' ? '600' : undefined,\n fontSize: isDisabled ? '107%' : data.type === 'selectableHeader' ? '103%' : undefined, \n lineHeight: isDisabled ? '2' : undefined,\n minWidth: isDisabled ? '2' : undefined \n };\n }\n};\n\n\n\n/* Allowed farms */\nexport const setFarmList = (list) => {\n sessionStorage.setItem('userFarmIds', JSON.stringify(list));\n}\n\nexport const getProLicence = () => {\n return sessionStorage.getItem('proLicenses');\n}\n\nexport const setProLicence = (value) => {\n sessionStorage.setItem('proLicenses', value);\n}\n\nexport const farmHaveUIWriteRights = () => {\n let rValue = false;\n let farmId = getSelectedFarmId();\n try {\n let objList = JSON.parse(sessionStorage.getItem('userFarmIds')) || [];\n\n objList.forEach(d => {\n if (Number(d.id) === Number(farmId) && d.level) {\n rValue = true;\n }\n });\n\n } catch (e) {\n rValue = false;\n }\n return rValue;\n}\n\n/*MAP*/\n// Store selected mapfeatures to localstorage\nexport let storeSelectedFeature = (info) => {\n localStorage.setItem('mobiwisu-map-selected-features', JSON.stringify(info));\n};\n// Retrieve and return seleted mapfeatures\nexport let retrieveSelectedFeature = () => {\n var selected = JSON.parse(localStorage.getItem('mobiwisu-map-selected-features'));\n return selected || [];\n};\n","import React, { useState, useEffect } from 'react';\nimport { Col, Row, Form } from \"react-bootstrap\";\nimport Modal from 'react-bootstrap/Modal'\nimport Button from 'react-bootstrap/Button';\nimport { useTranslation } from 'react-i18next';\nimport {\n getSelectedPlantsToView, setSelectedPlantsToView,\n getSelectedPlotsToView, setSelectedPlotsToView\n} from '../../common';\n\nimport '../../css/farmPlot.css'\n\nconst ShowItemSelectionModal = (props) => {\n const { t } = useTranslation();\n const [checkedItems, setCheckedItems] = useState({})\n const [plants, setPlants] = useState(false);\n const [plots, setPlots] = useState(false);\n\n useEffect(() => {\n if (props.plants) {\n setPlants(props.plants)\n }\n if (props.plots) {\n setPlots(props.plots)\n } \n }, []);\n\n useEffect(() => {\n formatCheckedItems();\n }, [plants, plots]);\n\n const handleCheckboxSelection = (e, p) => {\n setCheckedItems({ ...checkedItems, [e.target.name]: e.target.checked })\n }\n\n const handleClosing = () => {\n formatCheckedItems();\n props.onHide();\n }\n\n const formatCheckedItems = () => {\n if (plants) {\n const view = getSelectedPlantsToView();\n if (view && view.length) {\n setCheckedItems(view.reduce((a, v) => ({ ...a, [v.plantId]: true }), {}));\n }\n }\n if (plots) {\n const view2 = getSelectedPlotsToView();\n if (view2 && view2.length) {\n setCheckedItems(view2.reduce((a, v) => ({ ...a, [v.groupId]: true }), {}));\n }\n }\n }\n\n const getSelectionHeader = () => {\n if (plants)\n return t('Plant');\n return t('PlotGroup');\n }\n\n const buttonSaveClick = () => {\n const viewList = [];\n if (plants) {\n Object.entries(checkedItems).map(([key, value]) => {\n if (value === true) {\n props.itemList.forEach(v => {\n if (v.plantId === parseInt(key, 10)) {\n let copyData = { ...v };\n viewList.push(copyData);\n }\n });\n }\n })\n setSelectedPlantsToView(viewList);\n props.onHide();\n }\n if (plots) {\n Object.entries(checkedItems).map(([key, value]) => {\n if (value === true) {\n props.itemList.forEach(v => {\n if (v.groupId === parseInt(key, 10)) {\n let copyData = { ...v };\n viewList.push(copyData);\n }\n });\n }\n })\n setSelectedPlotsToView(viewList);\n props.onHide();\n }\n };\n\n return (\n <>\n \n handleClosing()}>\n {plants ? t('Plants') : t('Plotgroups')}\n \n \n
\n {/* HEADERS */}\n
\n \n \n \n {getSelectionHeader()}\n \n \n {t('Area')} (ha)\n \n \n {t('UnitAmount')} ({t('Units')})\n \n \n {t('Show')}\n \n \n \n
\n\n {/* SELECTIONS */}\n {(plants) ? props?.itemList?.map((p,i) =>\n
\n \n \n \n {p.plantName}\n \n \n {p.area}\n \n \n {p.countId}\n \n \n handleCheckboxSelection(e, p)}\n />\n \n \n \n
\n ) : props?.itemList?.map((p,i) =>\n
\n \n \n \n {p.groupName && p.groupName.length > 13 ? p.groupName.substr(0, 13) + '...' : p.groupName}\n \n \n {p.area}\n \n \n {p.countId}\n \n \n handleCheckboxSelection(e, p)}\n />\n \n \n \n
\n )}\n
\n
\n \n \n \n
\n \n )\n}\n\nexport default ShowItemSelectionModal;","export const ICONS = {\n HOME_OLD: 'M1024 590.444l-512-397.426-512 397.428v-162.038l512-397.426 512 397.428zM896 576v384h-256v-256h-256v256h-256v-384l384-288z',\n HOME: \"M502.4 159.058c-4.249 1.088-7.981 2.74-11.353 4.905l-425.447 271.908c-11.962 6.662-19.921 19.234-19.921 33.664 0 21.21 17.194 38.404 38.404 38.404 0.815 0 1.624-0.025 2.427-0.075l59.090 0.005v320c0.002 21.207 17.193 38.398 38.4 38.4h225.6c21.207-0.002 38.398-17.193 38.4-38.4v-254.398h128v254.397c0.002 21.207 17.193 38.398 38.4 38.4h225.6c21.207-0.002 38.398-17.193 38.4-38.4v-320h59.2c0.693 0.045 1.502 0.070 2.317 0.070 21.21 0 38.404-17.194 38.404-38.404 0-14.43-7.959-27.001-19.726-33.564l-425.795-272.1c-5.855-3.799-13.015-6.057-20.702-6.057-3.447 0-6.788 0.454-9.967 1.306zM512 242.258l305.6 195.195c-9.743 7.055-16.008 18.395-16.008 31.198 0 0.282 0.003 0.563 0.009 0.844l-0.001 319.958h-148.8v-254.397c-0.002-21.207-17.193-38.398-38.4-38.4h-204.8c-21.207 0.002-38.398 17.193-38.4 38.4v254.398h-148.8v-320c0.005-0.239 0.008-0.52 0.008-0.802 0-12.803-6.265-24.143-15.897-31.121l305.488-195.272z\",\n ADD: 'M 992 384 h -352 v -352 c 0 -17.672 -14.328 -32 -32 -32 h -192 c -17.672 0 -32 14.328 -32 32 v 352 h -352 c -17.672 0 -32 14.328 -32 32 v 192 c 0 17.672 14.328 32 32 32 h 352 v 352 c 0 17.672 14.328 32 32 32 h 192 c 17.672 0 32 -14.328 32 -32 v -352 h 352 c 17.672 0 32 -14.328 32 -32 v -192 c 0 -17.672 -14.328 -32 -32 -32 Z',\n LOGOUT: \"M120 89.6c-17.5 3.821-30.409 19.184-30.409 37.562 0 0.294 0.003 0.588 0.010 0.881l-0.001 767.956c0.002 21.207 17.193 38.398 38.4 38.4h537.6c0.161 0.002 0.352 0.004 0.543 0.004 21.21 0 38.404-17.194 38.404-38.404s-17.194-38.404-38.404-38.404c-0.191 0-0.382 0.001-0.572 0.004h-499.171v-691.2h499.2c0.161 0.002 0.352 0.004 0.543 0.004 21.21 0 38.404-17.194 38.404-38.404s-17.194-38.404-38.404-38.404c-0.191 0-0.382 0.001-0.572 0.004h-537.571c-1.2-0.133-2.591-0.209-4-0.209s-2.8 0.076-4.17 0.224zM689.6 280c-2.958 0.276-5.675 0.841-8.272 1.675-17.060 3.876-29.799 19.157-29.799 37.413 0 11.944 5.453 22.615 14.005 29.658l132.866 124.853h-388.8c-1.2-0.133-2.591-0.209-4-0.209s-2.8 0.076-4.17 0.224c-19.362 2.079-34.438 18.472-34.438 38.385 0 21.322 17.285 38.608 38.608 38.608 1.409 0 2.8-0.075 4.17-0.223l388.63 0.015-132.8 124.8c-7.951 7.090-12.933 17.363-12.933 28.8 0 21.281 17.252 38.533 38.533 38.533 9.845 0 18.827-3.692 25.638-9.766l198.362-187.167c1.319-0.584 2.369-1.119 3.39-1.699 0.95-0.916 1.995-1.961 2.977-3.063 0.588-0.562 1.11-1.083 1.616-1.62 0.572-0.542 1.094-1.064 1.6-1.6 0.572-0.542 1.094-1.064 1.6-1.6 1.772-1.493 3.343-3.064 4.769-4.76 0.053-0.297 0.056-0.577 0.056-0.858s-0.003-0.562-0.009-0.842c0.006-0.196 0.009-0.477 0.009-0.758s-0.003-0.562-0.009-0.842c0.555-0.482 1.077-1.003 1.583-1.54 0.023-0.257 0.026-0.537 0.026-0.819s-0.003-0.562-0.009-0.842c0.006-0.196 0.009-0.477 0.009-0.758s-0.003-0.562-0.009-0.842c0.006-0.196 0.009-0.477 0.009-0.758s-0.003-0.562-0.009-0.842c0.482-0.789 1.016-1.84 1.503-2.916 0.146-0.959 0.173-1.797 0.173-2.642s-0.027-1.682-0.081-2.513c0.091-0.845 0.139-1.96 0.139-3.087s-0.048-2.241-0.144-3.343c0.015-0.095 0.018-0.375 0.018-0.657s-0.003-0.562-0.009-0.842c0.006-0.196 0.009-0.477 0.009-0.758s-0.003-0.562-0.009-0.842c-0.523-0.513-1.045-1.035-1.581-1.541-0.013-0.255-0.010-0.536-0.010-0.817s-0.003-0.562-0.009-0.842c0.006-0.196 0.009-0.477 0.009-0.758s-0.003-0.562-0.009-0.842c-0.584-1.277-1.118-2.327-1.699-3.348-0.403-1.72-0.95-3.317-1.595-4.864-0.43-0.301-0.951-0.822-1.488-1.329-0.542-0.572-1.064-1.094-1.6-1.6-0.542-0.572-1.064-1.094-1.6-1.6-1.034-1.157-2.079-2.202-3.18-3.184l-1.638-1.633c-1.889-1.756-3.984-3.342-6.229-4.704l-196.971-185.696c-6.945-6.921-16.526-11.2-27.107-11.2-0.033 0-0.065 0-0.098 0z\",\n MAP: \"M82.574 699.706c-21.837-3.701-29.275-22.968-16.987-42.548 0 0 35.132-55.969 35.132-55.969 11.036-17.579 36.007-28.899 56.085-25.688 0 0 322.452 51.605 322.452 51.605 21.030 3.367 33.433 21.091 27.511 40.034 0 0-18.892 60.401-18.892 60.401-6.622 21.163-30.806 35.603-53.783 31.713 0 0-351.518-59.547-351.518-59.547s0 0 0 0zM602.129 787.718c-23.425-3.971-37.802-25.046-32.325-46.524 0 0 129.297-506.808 129.297-506.808 2.339-9.164 16.304-14.888 31.259-12.934 0 0 45.31 5.921 45.31 5.921 15.073 1.971 26.193 11.022 24.787 20.372 0 0-78.094 518.876-78.094 518.876-3.323 22.067-25.371 37.164-49.093 33.148 0 0-71.14-12.051-71.14-12.051s0 0 0 0zM846.778 829.162c-24.192-4.101-41.994-26.055-39.89-48.453 0 0 49.425-525.601 49.425-525.601 0.89-9.452 13.948-15.372 29.209-13.379 0 0 46.242 6.043 46.242 6.043 15.384 2.011 27.942 11.33 28.025 20.974 0 0 4.535 538.202 4.535 538.202 0.189 23.019-19.567 38.809-44.070 34.66 0 0-73.476-12.447-73.476-12.447s0 0 0 0zM192.184 516.301c-19.229-2.994-26.963-17.867-17.531-32.896 0 0 27.144-43.244 27.144-43.244 8.582-13.67 29.833-22.379 47.683-19.73 0 0 285.904 42.453 285.904 42.453 18.595 2.763 30.071 16.619 25.496 31.253 0 0-14.497 46.347-14.497 46.347-5.046 16.126-25.563 26.955-45.665 23.828 0 0-308.534-48.011-308.534-48.011s0 0 0 0zM277.231 373.998c-17.176-2.493-24.897-14.343-17.431-26.241 0 0 21.601-34.412 21.601-34.412 6.864-10.933 25.324-17.82 41.39-15.581 0 0 87.89 12.256 87.89 12.256 16.293 2.273 25.24 13.077 19.854 24.337 0 0-16.966 35.456-16.966 35.456-5.87 12.264-24.888 20.349-42.326 17.821 0 0-94.012-13.637-94.012-13.637s0 0 0 0zM498.474 406.090c-17.696-2.568-27.703-14.909-22.495-27.324 0 0 69.103-164.681 69.103-164.681 3.73-8.885 18.563-14.419 33.22-12.505 0 0 44.406 5.803 44.406 5.803 14.772 1.931 24.507 10.725 21.674 19.79 0 0-52.611 168.202-52.611 168.202-3.973 12.695-21.77 21.088-39.636 18.498 0 0-53.66-7.784-53.66-7.784s0 0 0 0zM380.753 265.241c-14.429-2.695-21.276-12.084-15.801-21.336 0 0 29.212-49.711 29.212-49.711 5.065-8.616 20.728-13.967 35.096-12.090 0 0 43.528 5.688 43.528 5.688 14.479 1.893 22.884 10.438 18.68 19.227 0 0-24.276 50.731-24.276 50.731-4.753 9.928-21.449 16.374-37.18 14.225 0 0-47.272-6.463-47.272-6.463-0.671-0.076-1.334-0.166-1.988-0.272 0 0 0 0 0 0z\",\n NEEDLE: \"M294.4 51.2c-21.207 0.002-38.398 17.193-38.4 38.4v0 76.8c0.002 21.207 17.193 38.398 38.4 38.4h38.4v308.5c-74.651 6.365-134.185 66.326-139.7 141.2-1.040 3.322-1.639 7.141-1.639 11.1 0 21.21 17.194 38.404 38.404 38.404 0.188 0 0.376-0.001 0.564-0.004h220.672l22.6 259.4c1.515 19.96 18.083 35.582 38.3 35.582s36.785-15.621 38.292-35.452l0.008-0.129 22.6-259.4h220.7c0.177 0.003 0.387 0.005 0.597 0.005 21.21 0 38.404-17.194 38.404-38.404 0-4.033-0.622-7.921-1.774-11.573l0.074 0.272c-5.607-74.782-65.116-134.641-139.7-141v-308.5h38.4c21.207-0.002 38.398-17.193 38.4-38.4v0-76.8c-0.002-21.207-17.193-38.398-38.4-38.4h-435.2z\",\n SELECT: \"M 896 0 h -768 c -70.4 0 -128 57.6 -128 128 v 768 c 0 70.4 57.6 128 128 128 h 768 c 70.4 0 128 -57.6 128 -128 v -768 c 0 -70.4 -57.6 -128 -128 -128 Z M 448 794.51 l -237.254 -237.256 l 90.51 -90.508 l 146.744 146.744 l 306.746 -306.746 l 90.508 90.51 l -397.254 397.256 Z\",\n FERTILITYSAMPLE: \"M 1011.33 134.496 c -110.752 -83.928 -281.184 -134.034 -455.91 -134.034 c -216.12 0 -392.226 75.456 -483.16 207.02 c -42.708 61.79 -66.33 134.958 -70.208 217.474 c -3.454 73.474 8.884 154.726 36.684 242.146 c 94.874 -284.384 359.82 -507.102 665.266 -507.102 c 0 0 -285.826 75.232 -465.524 308.192 c -0.112 0.138 -2.494 3.09 -6.614 8.698 c -36.08 48.278 -67.538 103.162 -91.078 165.328 c -39.87 94.83 -76.784 224.948 -76.784 381.782 h 128 c 0 0 -19.43 -122.222 14.36 -262.79 c 55.89 7.556 105.858 11.306 150.852 11.306 c 117.678 0 201.37 -25.46 263.388 -80.124 c 55.568 -48.978 86.198 -114.786 118.624 -184.456 c 49.524 -106.408 105.654 -227.01 268.654 -320.152 c 9.33 -5.332 15.362 -14.992 16.056 -25.716 s -4.04 -21.08 -12.606 -27.572 Z\",\n GPS: \"M 512 0 c -176.732 0 -320 143.268 -320 320 c 0 320 320 704 320 704 s 320 -384 320 -704 c 0 -176.732 -143.27 -320 -320 -320 Z M 512 512 c -106.04 0 -192 -85.96 -192 -192 s 85.96 -192 192 -192 s 192 85.96 192 192 s -85.96 192 -192 192 Z\",\n BACKBTN: \"M450.3 238.1c-0.72-0.024-1.567-0.038-2.417-0.038-16.465 0-31.721 5.18-44.226 14l0.242-0.162-275.1 192.6c-24.093 13.279-40.144 38.511-40.144 67.492 0 29.141 16.228 54.491 40.141 67.507l0.403 0.201 274.7 192.3c11.969 8.723 26.869 14.098 43.005 14.498l0.095 0.002c0.57 0.015 1.24 0.024 1.913 0.024 42.42 0 76.808-34.388 76.808-76.808 0-26.294-13.212-49.502-33.36-63.347l-0.26-0.169-81.9-57.4h447.4c0.323 0.005 0.704 0.008 1.086 0.008 42.42 0 76.808-34.388 76.808-76.808s-34.388-76.808-76.808-76.808c-0.382 0-0.763 0.003-1.144 0.008l0.057-0.001h-447.6l82.1-57.5c19.825-14.081 32.605-36.958 32.605-62.819 0-41.577-33.030-75.439-74.282-76.778l-0.123-0.003z\",\n SETTINGS: \"M 933.79 610.25 c -53.726 -93.054 -21.416 -212.304 72.152 -266.488 l -100.626 -174.292 c -28.75 16.854 -62.176 26.518 -97.846 26.518 c -107.536 0 -194.708 -87.746 -194.708 -195.99 h -201.258 c 0.266 33.41 -8.074 67.282 -25.958 98.252 c -53.724 93.056 -173.156 124.702 -266.862 70.758 l -100.624 174.292 c 28.97 16.472 54.05 40.588 71.886 71.478 c 53.638 92.908 21.512 211.92 -71.708 266.224 l 100.626 174.292 c 28.65 -16.696 61.916 -26.254 97.4 -26.254 c 107.196 0 194.144 87.192 194.7 194.958 h 201.254 c -0.086 -33.074 8.272 -66.57 25.966 -97.218 c 53.636 -92.906 172.776 -124.594 266.414 -71.012 l 100.626 -174.29 c -28.78 -16.466 -53.692 -40.498 -71.434 -71.228 Z M 512 719.332 c -114.508 0 -207.336 -92.824 -207.336 -207.334 c 0 -114.508 92.826 -207.334 207.336 -207.334 c 114.508 0 207.332 92.826 207.332 207.334 c -0.002 114.51 -92.824 207.334 -207.332 207.334 Z\",\n DELETE: \"M192 1024h640l64-704h-768zM640 128v-128h-256v128h-320v192l64-64h768l64 64v-192h-320zM576 128h-128v-64h128v64z\",\n SEARCH: \"M396.8 89.6c-169.207 0-307.2 137.994-307.2 307.2 0 169.211 137.993 307.2 307.2 307.2 71.075 0 136.040-24.63 187.6-65.6 0.921 1.173 1.837 2.216 2.807 3.207l281.593 281.593c6.938 6.855 16.478 11.090 27.008 11.090 21.226 0 38.432-17.207 38.432-38.432 0-10.505-4.215-20.025-11.045-26.963l-281.595-281.595c-1.206-1.277-2.479-2.454-3.827-3.543 36.458-48.046 59.547-106.957 63.027-171.057 2.025-4.523 3.204-9.802 3.204-15.356 0-0.191-0.001-0.382-0.004-0.573 0.003-0.133 0.004-0.324 0.004-0.515 0-5.555-1.179-10.834-3.301-15.601-8.675-161.205-140.332-291.056-303.903-291.056zM396.8 166.4c127.701 0 230.4 102.702 230.4 230.4 0 127.703-102.699 230.4-230.4 230.4s-230.4-102.697-230.4-230.4c0-127.698 102.699-230.4 230.4-230.4z\",\n PLOTS: \"M128 89.6c-21.207 0.002-38.398 17.193-38.4 38.4v307.2c0.002 21.207 17.193 38.398 38.4 38.4h307.2c21.207-0.002 38.398-17.193 38.4-38.4v-307.2c-0.002-21.207-17.193-38.398-38.4-38.4h-307.2zM588.8 89.6c-21.207 0.002-38.398 17.193-38.4 38.4v307.2c0.002 21.207 17.193 38.398 38.4 38.4h307.2c21.207-0.002 38.398-17.193 38.4-38.4v-307.2c-0.002-21.207-17.193-38.398-38.4-38.4h-307.2zM166.4 166.4h230.4v230.4h-230.4v-230.4zM627.2 166.4h230.4v230.4h-230.4v-230.4zM128 550.4c-21.207 0.002-38.398 17.193-38.4 38.4v307.2c0.002 21.207 17.193 38.398 38.4 38.4h307.2c21.207-0.002 38.398-17.193 38.4-38.4v-307.2c-0.002-21.207-17.193-38.398-38.4-38.4h-307.2zM588.8 550.4c-21.207 0.002-38.398 17.193-38.4 38.4v307.2c0.002 21.207 17.193 38.398 38.4 38.4h307.2c21.207-0.002 38.398-17.193 38.4-38.4v-307.2c-0.002-21.207-17.193-38.398-38.4-38.4h-307.2zM166.4 627.2h230.4v230.4h-230.4v-230.4zM627.2 627.2h230.4v230.4h-230.4v-230.4z\",\n PLANT: \"M545.821 0c-26.261 19.141-47.038 45.608-45.555 89.624-7.398 46.756 37.815 56.931 50.588 80.808 16.993-21.505 53.018-27.045 53.412-75.346-0.901-44.478-21.563-76.015-58.445-95.086zM446.92 244.293c-10.992 26.667-15.25 51.375 0.159 92.009 8.557 32.481 37.901 37.889 59.8 53.534 9.841-11.995 28.2-27.305 14.627-93.891-22.207-39.178-37.633-46.014-74.586-51.652zM433.757 365.821c-11.989 26.234-17.175 50.764-3.308 91.95 7.327 32.78 36.446 39.29 57.74 55.75 10.286-11.616 29.209-26.222 18.155-93.273-20.714-39.987-35.872-47.4-72.587-54.427zM406.656 484.116c-11.3 26.538-15.844 51.195-0.906 92.005 8.181 32.578 37.459 38.325 59.176 54.223 9.98-11.88 28.514-26.976 15.713-93.716-21.751-39.432-37.097-46.447-73.983-52.513zM368.305 603.96c-7.452 27.865-8.48 52.916 12.054 91.217 12.686 31.102 42.481 32.671 66.219 45.354 8.208-13.167 24.433-30.721 2.365-94.994-27.086-35.978-43.266-40.763-80.639-41.576zM459.434 125.193c-10.468 26.877-14.243 51.663 1.957 91.989 9.19 32.308 38.634 37.141 60.835 52.356 9.605-12.185 27.661-27.85 12.79-94.159-22.968-38.736-38.525-45.27-75.581-50.185zM644.903 137.416c7.005 27.98 7.633 53.044-13.51 91.012-13.18 30.895-42.998 31.987-66.936 44.289-7.996-13.296-23.939-31.108-0.847-95.020 27.657-35.54 43.912-40.066 81.293-40.282zM636.299 266.438c4.742 28.451 3.36 53.485-20.756 89.638-15.612 29.741-45.422 28.441-70.268 38.786-6.906-13.894-21.37-32.925 6.766-94.783 30.415-33.211 46.98-36.421 84.258-33.642zM626.459 398.046c1.727 28.792-2.276 53.542-30.055 86.962-18.65 27.936-48.157 23.513-73.953 31.192-5.409-14.543-17.794-34.988 16.683-93.548 33.735-29.833 50.545-31.285 87.325-24.606zM610.815 522.96c-0.822 28.832-6.996 53.132-37.618 83.968-21.044 26.18-50.046 19.168-76.419 24.539-4.103-14.964-14.635-36.422 24.88-91.709 36.238-26.737 53.111-26.699 89.157-16.798zM597.74 644.215c-4.387 28.508-13.522 51.857-47.728 78.663-24.124 23.372-52.035 12.823-78.869 14.886-2.218-15.357-10.011-37.954 36.046-87.922 39.27-22.043 56.008-19.916 90.551-5.627zM448.354 752.975c10.213-0.816 13.668-4.597 19.831-7.437-20.933 95.265-41.039 187.592-61.972 278.462-10.191-9.142-20.382-19.482-30.573-22.31 27.523-84.833 51.801-163.882 72.714-248.715zM800.647 133.402c-26.119 16.774-47.421 40.843-48.484 82.898-9.686 44.169 32.854 56.416 43.69 79.903 17.415-19.55 52.078-22.805 55.173-68.841 1.644-42.464-16.283-73.699-50.379-93.96zM692.588 360.784c-11.982 24.81-17.434 48.131-5.028 87.746 6.332 31.454 34.008 38.263 54.010 54.414 10.060-10.884 28.427-24.449 19.233-88.708-18.97-38.609-33.295-45.996-68.215-53.452zM673.195 475.928c-12.909 24.341-19.235 47.44-8.33 87.494 5.142 31.671 32.542 39.517 51.921 56.411 10.463-10.497 29.328-23.361 22.562-87.92-17.502-39.296-31.538-47.218-66.152-55.985zM640.695 587.204c-12.269 24.67-17.99 47.926-6.043 87.682 5.968 31.525 33.562 38.654 53.376 55.036 10.185-10.767 28.708-24.118 20.259-88.479-18.522-38.826-32.76-46.379-67.592-54.239zM597.379 699.325c-8.674 26.151-11.065 49.981 6.36 87.659 10.346 30.371 38.669 33.545 60.592 46.975 8.568-12.094 25.027-27.92 7.602-90.45-23.803-35.832-38.963-41.305-74.554-44.184zM711.225 247.92c-11.495 25.040-16.49 48.463-3.311 87.827 6.945 31.325 34.749 37.591 55.063 53.349 9.845-11.079 27.944-25 17.496-89.067-19.721-38.231-34.188-45.337-69.247-52.109zM887.393 270.015c5.105 27.075 4.293 51.011-18.006 86.026-14.307 28.719-42.802 28.082-66.321 38.465-6.877-13.129-21.076-31.011 4.541-90.655 28.373-32.333 44.128-35.734 79.785-33.835zM871.926 392.561c2.92 27.397 0.193 51.191-24.838 84.307-16.561 27.481-44.913 24.564-69.188 33.030-5.803-13.638-18.525-32.599 11.787-90 30.872-29.957 46.848-32.085 82.239-27.337zM855.136 517.504c0.026 27.552-5.184 50.928-33.555 81.232-19.356 25.589-47.245 19.711-72.275 25.581-4.339-14.172-14.998-34.364 21.174-88.265 33.847-26.549 49.959-26.987 84.655-18.548zM833.187 635.737c-2.407 27.447-9.662 50.271-40.598 77.951-21.54 23.78-48.801 15.461-74.251 19.098-3.070-14.5-11.905-35.555 28.887-86.050 36.060-23.456 52.147-22.47 85.962-11zM813.894 750.625c-5.788 26.938-15.813 48.688-49.939 72.323-24.32 20.929-50.34 9.298-76.045 9.755-1.251-14.768-7.41-36.756 39.321-81.81 38.687-18.809 54.528-15.838 86.663-0.269zM670.222 843.941c6.656-0.132 9.043-2.413 13.15-3.991-17.227 59.881-33.806 117.921-50.866 175.003-6.261-6.205-12.476-13.173-18.979-15.357 21.103-52.99 39.88-102.418 56.695-155.656zM268.976 114.766c-22.942 18.681-40.543 43.756-37.051 83.7-4.448 42.869 37.152 49.917 49.927 71.002 14.402-20.379 46.884-27.17 44.889-71.102-2.986-40.393-23.306-68.058-57.766-83.6zM190.96 341.681c-8.694 24.78-11.362 47.45 4.626 83.642 9.362 29.113 36.303 32.6 56.974 45.758 8.363-11.385 24.308-26.197 8.725-86.073-22.097-34.537-36.455-40.001-70.325-43.327zM184.912 452.808c-9.622 24.435-13.142 46.988 1.471 83.757 8.258 29.445 35.048 33.945 55.209 47.872 8.786-11.061 25.278-25.263 11.962-85.683-20.78-35.345-34.921-41.346-68.643-45.946zM166.035 561.676c-8.98 24.678-11.911 47.316 3.657 83.69 9.025 29.219 35.923 33.019 56.44 46.415 8.494-11.287 24.609-25.914 9.721-85.966-21.696-34.79-35.989-40.42-69.819-44.138zM137.006 672.5c-5.417 25.696-5.132 48.521 15.402 82.342 13.048 27.658 40.213 27.633 62.412 38.008 6.821-12.37 20.716-29.12-2.477-86.479-26.377-31.39-41.321-34.952-75.337-33.871zM196.536 232.793c-8.208 24.945-10.433 47.663 6.26 83.536 9.929 28.925 36.933 31.885 57.858 44.636 8.139-11.546 23.791-26.667 7.041-86.227-22.768-34.098-37.23-39.281-71.159-41.944zM365.749 234.872c7.731 25.097 9.523 47.853-7.85 83.401-10.478 28.73-37.533 31.175-58.697 43.526-7.918-11.699-23.279-27.116-5.398-86.346 23.413-33.659 37.971-38.565 71.945-40.581zM364.211 352.59c5.697 25.635 5.66 48.462-14.504 82.505-12.745 27.799-39.909 28.069-61.994 38.685-6.955-12.295-21.032-28.893 1.535-86.501 26.034-31.675 40.937-35.4 74.964-34.689zM361.676 472.72c2.973 26.092 0.539 48.789-23.089 80.525-15.594 26.307-42.637 23.723-65.714 31.96-5.626-12.958-17.882-30.942 10.611-85.861 29.217-28.766 44.429-30.905 78.192-26.624zM353.537 587.047c0.657 26.253-3.772 48.646-30.11 78.171-17.857 24.827-44.565 19.864-68.28 26.032-4.459-13.404-15.079-32.4 18.152-84.589 31.643-26.073 46.985-26.86 80.238-19.614zM347.556 697.922c-2.599 26.132-9.768 47.804-39.56 73.84-20.794 22.424-46.682 14.192-70.979 17.375-2.765-13.853-10.95-34.018 28.489-81.689 34.628-21.953 49.949-20.834 82.050-9.526zM217.321 802.841c7.759-1.044 10.24-4.071 14.827-6.491-12.077 73.619-23.644 144.959-35.901 215.221-8.149-6.565-16.348-14.046-24.239-15.789 17.532-65.92 32.825-127.29 45.313-192.94z\",\n GROUP: \"M493.2 131.7c-86.14 6.153-167.85 53.491-214.1 133.6-28.604 49.543-39.144 104.53-34.4 157.7-91.226 43.075-155.1 135.371-155.1 242.6 0 147.999 120.801 268.8 268.8 268.8 57.13 0 109.959-18.383 153.6-49 43.641 30.617 96.47 49 153.6 49 147.999 0 268.8-120.801 268.8-268.8 0-107.436-64.091-199.935-155.6-242.9 8.389-100.607-39.676-202.151-132.6-255.8-48.064-27.75-101.316-38.892-153-35.2zM498.4 208c36.85-2.565 74.815 5.432 109.4 25.4 61.836 35.699 95.463 100.019 95.4 166.3-12.331-1.746-24.802-2.9-37.6-2.9-57.128 0-109.96 18.285-153.6 48.9-43.64-30.615-96.472-48.9-153.6-48.9-12.9 0-25.475 1.126-37.9 2.9 0.031-32.573 7.555-65.61 25.1-96 33.279-57.642 91.384-91.425 152.8-95.7zM358.4 473.6c35.562 0 68.321 10.132 96.8 26.8-15.806 20.066-29.465 41.751-39.1 65.8-0.105-0.060-0.195-0.139-0.3-0.2-37.298-21.534-63.994-53.706-79.8-90.2 7.442-0.866 14.715-2.2 22.4-2.2zM665.6 473.6c7.41 0 14.415 1.294 21.6 2.1-2.921 6.712-5.348 13.502-9.1 20-17.536 30.373-42.325 53.387-70.5 69.7-9.602-23.749-23.167-45.154-38.8-65 28.479-16.668 61.238-26.8 96.8-26.8zM263.7 499.3c21.604 54.072 59.583 101.956 113.7 133.2 6.734 3.888 13.681 7.26 20.6 10.5-0.625 7.446-1.2 14.997-1.2 22.6 0 62.489 22.374 119.354 58.4 165.1-28.479 16.667-61.238 26.9-96.8 26.9-106.494 0-192-85.504-192-192 0-71.782 39.359-133.348 97.3-166.3zM761 499.7c57.554 33.054 96.6 94.408 96.6 165.9 0 106.496-85.507 192-192 192-35.562 0-68.321-10.233-96.8-26.9 36.026-45.746 58.4-102.611 58.4-165.1 0-7.77-0.548-15.493-1.2-23.1 48.111-22.509 90.14-59.107 118.6-108.4 6.467-11.202 11.716-22.721 16.4-34.4zM512 551.1c8.967 12.043 17.030 24.789 23 38.8-15.294 1.86-30.784 2.409-46.3 0.5 6.004-14.214 14.218-27.102 23.3-39.3zM550.3 664.3c0.003 0.443 0.1 0.856 0.1 1.3 0 43.174-14.593 82.425-38.4 114.4-23.807-31.975-38.4-71.226-38.4-114.4 25.699 3.643 51.378 2.42 76.7-1.3z\",\n EDIT: \"M864 0c88.364 0 160 71.634 160 160 0 36.020-11.91 69.258-32 96l-64 64-224-224 64-64c26.742-20.090 59.978-32 96-32zM64 736l-64 288 288-64 592-592-224-224-592 592zM715.578 363.578l-448 448-55.156-55.156 448-448 55.156 55.156z\",\n ARROW_RIGHT: \"M393.6 165.458c-20.012 1.458-35.695 18.052-35.695 38.308 0 9.155 3.204 17.562 8.551 24.161l212.744 284.728-212.8 283.197c-6.286 6.816-10.14 15.958-10.14 26 0 21.21 17.194 38.404 38.404 38.404 13.647 0 25.632-7.118 32.443-17.845l230.493-307.356c4.868-6.368 7.801-14.442 7.801-23.201s-2.932-16.833-7.869-23.294l-230.332-307.107c-7.052-9.777-18.412-16.067-31.24-16.067-0.83 0-1.654 0.026-2.472 0.078z\",\n MARK_OK: \"M760 217.6c-10.252 2.511-18.703 8.875-23.904 17.432l-308.896 464.17-139.2-208c-6.454-12.662-19.395-21.182-34.326-21.182-21.21 0-38.404 17.194-38.404 38.404 0 9.286 3.296 17.803 8.782 24.443l171.148 255.935c6.98 10.41 18.7 17.17 32 17.17s25.020-6.76 31.913-17.032l340.887-512.138c4.21-6.073 6.726-13.598 6.726-21.711 0-21.21-17.194-38.404-38.404-38.404-2.949 0-5.821 0.333-8.58 0.962z\",\n PLUS: \"M512 216c-3.925 0.366-7.538 1.267-10.913 2.633-14.586 2.788-27.496 18.151-27.496 36.529 0 0.294 0.003 0.588 0.010 0.881l-0.001 217.556h-217.6c-1.2-0.133-2.591-0.209-4-0.209s-2.8 0.076-4.17 0.224c-19.362 2.079-34.438 18.472-34.438 38.385 0 21.322 17.285 38.608 38.608 38.608 1.409 0 2.8-0.075 4.17-0.223l217.43 0.015v217.6c-0.002 0.162-0.004 0.352-0.004 0.543 0 21.21 17.194 38.404 38.404 38.404s38.404-17.194 38.404-38.404c0-0.191-0.001-0.382-0.004-0.572v-217.571h217.6c0.162 0.002 0.352 0.004 0.543 0.004 21.21 0 38.404-17.194 38.404-38.404s-17.194-38.404-38.404-38.404c-0.191 0-0.382 0.001-0.572 0.004h-217.571v-217.6c0.021-0.476 0.033-1.035 0.033-1.596 0-21.21-17.194-38.404-38.404-38.404-0.010 0-0.021 0-0.031 0z\",\n INFO: \"M512 128c-212.077 0-384 171.923-384 384v0c0 212.077 171.923 384 384 384v0c212.077 0 384-171.923 384-384v0c0-212.077-171.923-384-384-384v0zM512 204.8c42.415 0 76.8 34.385 76.8 76.8v0c0 42.415-34.385 76.8-76.8 76.8v0c-42.415 0-76.8-34.385-76.8-76.8v0c0-42.415 34.385-76.8 76.8-76.8v0zM435.2 409.6h76.8c28.276 0.003 51.197 22.924 51.2 51.2v0 230.4h25.6c0.215-0.003 0.469-0.005 0.724-0.005 28.28 0 51.205 22.925 51.205 51.205s-22.925 51.205-51.205 51.205c-0.255 0-0.509-0.002-0.762-0.006h-153.562c-0.215 0.003-0.469 0.005-0.724 0.005-28.28 0-51.205-22.925-51.205-51.205s22.925-51.205 51.205-51.205c0.255 0 0.509 0.002 0.762 0.006h25.562v-179.2h-25.6c-0.215 0.003-0.469 0.005-0.724 0.005-28.28 0-51.205-22.925-51.205-51.205s22.925-51.205 51.205-51.205c0.255 0 0.509 0.002 0.762 0.006h-0.038z\",\n TRACTOR: \"M253.9 235.8l-29.8 148.9c0 0-71.115 13.592-115.8 66.4 8.802 6.096 16.292 8.428 29.2 15.5 1.157 0.605 1.958 0.907 3.1 1.5-28.225 33.552-45.406 77.211-45.5 124.88 0.003 107.825 87.395 195.218 195.2 195.22 87.366-0.076 161.291-57.535 186.126-136.717l132.474-1.383c0.009 76.267 61.833 138.090 138.099 138.1 76.268-0.009 138.092-61.833 138.101-138.099l42-0.001 1.8-199.7-369.6-50.1-21-164.5h-284.4z\",\n WARNING: \"M512 142.4c-13.319 0.225-27.114 5.816-33.6 17.6-127.136 221.676-253.848 444.070-384 664-14.648 23.383 6.015 58.317 33.6 57.6 256.009-0.512 511.991-0.922 768 0 27.122 0.271 47.499-34.309 33.6-57.6-128.129-221.588-256.271-443.781-384-665.6-6.881-11.558-20.281-16.225-33.6-16zM476.8 312c0.716-0.036 1.556-0.056 2.4-0.056s1.683 0.020 2.518 0.061c0.599-0.040 1.438-0.061 2.282-0.061s1.683 0.020 2.518 0.061l51.082-0.005c0.118-0.001 0.257-0.002 0.396-0.002 28.28 0 51.205 22.925 51.205 51.205 0 2.255-0.146 4.476-0.428 6.654l-25.573 206.143c-4.446 24.125-25.317 42.161-50.4 42.161s-45.954-18.035-50.352-41.845l-25.648-206.715c-0.353-2.258-0.554-4.863-0.554-7.515 0-24.508 17.217-44.994 40.216-50.023zM512 667.2c41.923 0 76.8 33.277 76.8 75.2s-34.877 76.8-76.8 76.8c-41.923 0-75.2-34.877-75.2-76.8s33.277-75.2 75.2-75.2z\",\n SUCCESS: \"M507.591 83.451c-238.638 0-432.924 194.286-432.924 432.924s194.286 432.924 432.924 432.924c238.638 0 432.924-194.286 432.924-432.924s-194.286-432.924-432.924-432.924zM764.927 254.448c21.725 0 39.357 17.611 39.357 39.357 0 8.312-2.563 16.027-6.887 22.261l-349.373 524.88c-7.053 10.537-19.072 17.465-32.715 17.465s-25.64-6.924-32.797-17.588l-175.425-262.296c-5.625-6.822-8.978-15.54-8.978-25.049 0-21.725 17.611-39.357 39.357-39.357 15.302 0 28.563 8.715 35.175 21.687l142.668 213.182 316.576-475.766c5.325-8.763 13.976-15.245 24.475-17.834h0.043c2.759-0.615 5.59-0.943 8.527-0.943z\",\n ATTACHMENT: \"M700.633 20.867c-51.965 0.124-102.662 20.254-140.867 57.267-0.823 0.716-1.573 1.423-2.293 2.16l-0.007 0.007c0 0-0.033 0.033-0.033 0.033-0.011 0.011-0.022 0.022-0.033 0.033v0l-455.933 455.933c-0.233 0.216-0.439 0.411-0.643 0.609l0.010-0.009v0.033c-68.94 68.951-95.936 169.617-70.7 263.8 25.238 94.189 98.943 167.895 193.133 193.133 92.961 24.909 192.171-1.13 261.033-68.1 0.994-0.849 1.896-1.698 2.756-2.589l0.011-0.011c0.005 0 0.011 0 0.017 0s0.012 0 0.018 0h-0.001l299.167-299.167c7.186-6.986 11.645-16.746 11.645-27.546 0-21.21-17.194-38.404-38.404-38.404-0.401 0-0.801 0.006-1.199 0.018l0.058-0.001c-10.38 0.321-19.675 4.713-26.391 11.624l-298.542 298.542c-0.216 0.211-0.422 0.417-0.626 0.626l-0.007 0.007c-0.005 0-0.011 0-0.017 0s-0.012 0-0.018 0h0.001c-49.638 49.637-121.794 68.969-189.6 50.8-67.806-18.167-120.665-71.026-138.833-138.833-18.138-67.691 1.115-139.705 50.567-189.333 0.084-0.084 0.149-0.183 0.233-0.267 0.005 0 0.011 0 0.017 0s0.012 0 0.018 0h-0.001l456.567-456.567c0-0.005 0-0.011 0-0.017s0-0.012 0-0.018v0.001c31.959-31.959 78.343-44.398 122-32.7s77.636 45.677 89.333 89.333c11.449 42.726-0.339 87.994-30.8 119.867-0.743 0.668-1.428 1.332-2.087 2.020l-0.013 0.014-456.167 456.933c-14.28 14.28-34.927 19.792-54.433 14.567-19.507-5.228-34.607-20.328-39.833-39.833-5.225-19.499 0.3-40.154 14.567-54.433l299.2-299.167c7.187-6.987 11.646-16.746 11.646-27.547 0-21.21-17.194-38.404-38.404-38.404-0.413 0-0.825 0.007-1.235 0.019l0.060-0.001c-10.375 0.312-19.67 4.692-26.392 11.592l-298.508 298.541c-0.243 0.226-0.46 0.432-0.675 0.642l0.008-0.008v0.033c-0.123 0.123-0.244 0.243-0.367 0.367-1.229 1.232-2.376 2.548-3.431 3.938l-0.069 0.095c-30.556 33.405-42.351 80.219-30.567 124.2 12.296 45.891 48.243 81.837 94.133 94.133 44.042 11.801 90.92-0.045 124.333-30.7 1.437-1.086 2.709-2.189 3.904-3.37l-0.004 0.004c0.129-0.128 0.271-0.238 0.4-0.367 0-0.005 0-0.011 0-0.017s0-0.012 0-0.018v0.001l452.967-453.733c1.242-0.986 2.351-1.979 3.399-3.032l0.001-0.001c51.273-51.273 71.334-126.158 52.567-196.2-18.767-70.040-73.593-124.866-143.633-143.633-17.51-4.692-35.329-6.942-53-6.9z\",\n METER: \"M320 40c176.731 0 320 143.269 320 320 0 120.495-66.61 225.416-165.005 280h-309.99c-98.395-54.584-165.005-159.505-165.005-280 0-176.731 143.269-320 320-320zM501.196 541.196c48.399-48.4 75.054-112.749 75.054-181.196h-56.25v-40h53.149c-4.384-28.124-13.369-55.091-26.603-80h-66.546v-40h40.178c-5.899-7.351-12.22-14.435-18.981-21.196-28.889-28.887-63.462-50.024-101.196-62.374v43.57h-40v-53.15c-13.114-2.043-26.475-3.1-40-3.1s-26.886 1.056-40 3.1v53.15h-40v-43.57c-37.733 12.35-72.308 33.485-101.196 62.374-6.761 6.761-13.082 13.845-18.981 21.196h40.177v40h-66.547c-13.234 24.909-22.22 51.876-26.602 80h53.15v40h-56.25c0 68.447 26.655 132.796 75.054 181.196 6.694 6.694 13.703 12.955 20.975 18.804h120.221l22.858-320h34.285l22.858 320h120.221c7.272-5.849 14.282-12.111 20.975-18.804z\",\n DROP: \"M510.1 89.6c-12.098 0.651-22.634 6.806-29.221 15.987-0.079 0.115-64.978 90.811-129.979 201.311-32.501 55.255-65.126 115.564-90.1 173-24.974 57.441-43.2 111.037-43.2 160.102 0 85.335 29.042 160.241 81.6 212.803 52.558 52.557 127.467 81.597 212.8 81.597s160.242-29.041 212.8-81.597c52.558-52.562 81.6-127.468 81.6-212.803 0-49.065-18.226-102.661-43.2-160.102-24.974-57.436-57.599-117.745-90.1-173-65.001-110.5-129.9-201.196-129.9-201.196-7.048-9.822-18.433-16.145-31.295-16.145-0.635 0-1.266 0.015-1.893 0.046zM512 198.702c20.602 29.722 47.489 66.601 94.9 147.2 31.499 53.545 62.874 111.636 85.9 164.598s36.8 101.765 36.8 129.5c0 68.265-22.158 121.359-59.2 158.403-37.042 37.038-90.133 59.197-158.4 59.197s-121.358-22.159-158.4-59.197c-37.042-37.043-59.2-90.138-59.2-158.403 0-27.735 13.774-76.539 36.8-129.5s54.401-111.053 85.9-164.598c47.411-80.599 74.298-117.478 94.9-147.2z\",\n STATS: \"M560.725 38.475c-24.326-0.586-49.049 3.963-72.5 14.1-75.042 32.437-117.191 113.537-100.65 193.6s87.373 137.782 169.125 137.825c3.853 0.060 7.679-0.655 11.25-2.1 29.556-11.961 20.656-55.965-11.225-55.5-54.788 0-101.665-38.243-112.75-91.9s16.809-107.311 67.1-129.050c30.93-13.37 64.839-12.237 93.7 1-15.612 18.199-3.451 46.392 20.5 47.525l43.3 2.925c18.846 4.24 36.441-10.908 35.050-30.175l2.95-43.775c1.405-17.315-12.723-31.925-30.075-31.1-10.254 0.505-19.464 6.429-24.175 15.55-27.242-18.046-59.043-28.141-91.6-28.925zM66.775 95.6c-15.896 0.235-28.596 13.303-28.375 29.2v576c0.002 15.905 12.895 28.799 28.8 28.8h576c38.947 0.551 38.947-58.15 0-57.6h-547.2v-547.2c0.226-16.229-12.996-29.44-29.225-29.2zM556.35 116.225c-15.886 0.248-28.571 13.313-28.35 29.2v36.95h-14.15c-38.416 0-38.416 57.625 0 57.625h38.425c9.312 1.487 18.763-1.678 25.3-8.475 0.067-0.067 0.134-0.133 0.2-0.2 0.085-0.1 0.167-0.2 0.25-0.3 6.176-6.496 8.976-15.496 7.575-24.35v-61.25c0.226-16.239-13.012-29.454-29.25-29.2zM700.5 181.825c-15.995 0.165-28.79 13.332-28.5 29.325v0.1c-0.299 20.973 21.202 35.223 40.4 26.775 10.583-4.656 17.355-15.189 17.2-26.75v-0.125c0.295-16.228-12.87-29.495-29.1-29.325zM682.25 253.9c-10.661-0.161-20.539 5.581-25.675 14.925h-0.025c-14.185 23.796 10.116 51.941 35.725 41.375 5.999-2.478 10.985-6.909 14.15-12.575 11.524-19.021-1.939-43.371-24.175-43.725zM297.175 255.6c-15.896 0.235-28.596 13.303-28.375 29.2v300.8c-0.55 38.947 58.151 38.947 57.6 0v-300.8c0.226-16.229-12.996-29.44-29.225-29.2zM630.65 306.7c-5.671-0.22-11.281 1.242-16.125 4.2-0.1 0.064-0.175 0.092-0.275 0.15-31.437 17.347-9.153 65.053 24.325 52.075 1.517-0.592 2.98-1.311 4.375-2.15 0.149-0.083 0.301-0.166 0.45-0.25 25.59-14.061 16.427-52.889-12.75-54.025zM181.975 312.275c-15.906 0.235-28.609 13.319-28.375 29.225v244.1c-0.551 38.947 58.15 38.947 57.6 0v-244.1c0.24-16.239-12.986-29.465-29.225-29.225zM412.375 383.050c-15.906 0.235-28.609 13.319-28.375 29.225v173.325c-0.55 38.947 58.15 38.947 57.6 0v-173.325c0.24-16.239-12.986-29.464-29.225-29.225zM527.575 452.9c-15.896 0.235-28.596 13.304-28.375 29.2v103.5c-0.551 38.947 58.15 38.947 57.6 0v-103.5c0.226-16.229-12.996-29.44-29.225-29.2z\",\n INVENTORY: \"M508.067 193.567c-5.526 0.652-10.513 2.514-14.835 5.315l0.135-0.082-383.5 245.167c-9.668 6.245-15.977 16.967-15.977 29.163 0 19.111 15.493 34.604 34.604 34.604 0.002 0 0.005 0 0.007 0h53.3v288.234c0 0.009 0 0.019 0 0.029 0 19.111 15.493 34.604 34.604 34.604 0.010 0 0.021 0 0.031 0h591.132c0.009 0 0.019 0 0.029 0 19.111 0 34.604-15.493 34.604-34.604 0-0.010 0-0.021 0-0.031v0.002-288.234h53.3c0.002 0 0.004 0 0.006 0 19.111 0 34.604-15.493 34.604-34.604 0-12.196-6.309-22.918-15.841-29.081l-0.136-0.082-383.5-245.167c-5.274-3.421-11.724-5.455-18.649-5.455-1.38 0-2.742 0.081-4.080 0.238l0.162-0.016zM512 269.1l283.7 181.167c-10.915 3.459-19.34 11.885-22.733 22.555l-0.067 0.245v288.366h-521.8v-288.366c-3.46-10.914-11.885-19.34-22.555-22.733l-0.245-0.067 283.7-181.167zM514.667 419.867c-4.572-0.062-7.089 0.2-13.3 0.2v-0.101c-11.576 0-15.797 5.152-20.333 9.267-4.537 4.117-8.679 8.962-13 14.634-8.642 11.342-17.778 25.911-26.433 41.732s-16.763 32.786-22.867 48.701c-6.104 15.915-10.533 30.147-10.533 44.267v84.133c0 7.010-0.549 24.017 7.633 41.201s28.609 33.301 57.5 33.301h37.967c-4.099-5.223-7.584-10.824-10.367-16.668-3.291-6.911-5.612-13.767-7.267-20.233h-20.333c-17.846 0-20.799-4.915-24.3-12.267s-4.033-18.422-4.033-25.432v-84.101c0-4.573 2.81-17.186 8.133-31.067 2.865-7.47 7.31-15.752 11.167-23.834 2.757 4.191 5.343 8.644 9.033 11.667 6.399 5.242 13.672 8.676 21.233 10.667 2.318-8.375 5.219-16.315 8.167-24 1.392-3.63 2.899-7.291 4.433-10.934-4.216-0.594-8.009-2.12-10.467-4.133-3.132-2.567-4.967-5.137-4.967-11.632v-20.201c1.81-2.628 3.909-6.691 5.567-8.867 3.363-4.414 6.356-7.657 8.2-9.366 3.615 0 7.021-0.187 10.667 0 1.845 1.668 4.842 4.967 8.233 9.4 0.762 0.996 1.649 2.451 2.533 3.933 0.25-0.46 0.482-0.94 0.733-1.4 6.316-11.544 12.887-22.493 19.667-32.599-2.208-2.501-4.473-4.79-6.833-6.9-4.608-4.118-9.174-9.129-20.367-9.166-2.195-0.108-3.943-0.181-5.467-0.2zM396.333 421.699c-1.523-0.021-2.82 0.007-4.1 0.034-2.559 0.054-5.059 0.166-9.2 0.166v-0.099c-11.576 0-15.797 5.152-20.333 9.267-4.537 4.117-8.679 8.96-13 14.632-8.642 11.342-17.778 25.946-26.433 41.767s-16.763 32.785-22.867 48.699c-6.104 15.915-10.533 30.115-10.533 44.235v84.133c0 7.010-0.549 24.049 7.633 41.233s28.609 33.301 57.5 33.301h39.533c-4.77-5.756-8.811-11.978-11.933-18.534-2.981-6.259-5.149-12.477-6.767-18.399h-20.833c-17.846 0-20.799-4.915-24.3-12.267s-4.033-18.39-4.033-25.4v-84.133c0-4.573 2.81-17.186 8.133-31.067 2.865-7.47 7.31-15.718 11.167-23.8 2.757 4.191 5.343 8.611 9.033 11.634 6.258 5.126 13.351 8.555 20.733 10.566 2.387-9.016 5.484-17.52 8.633-25.733 1.163-3.034 2.47-6.091 3.733-9.134-3.924-0.667-7.418-2.202-9.733-4.1-3.132-2.567-4.967-5.105-4.967-11.6v-20.199c1.81-2.628 3.909-6.691 5.567-8.867 3.363-4.414 6.356-7.691 8.2-9.4 3.615 0 7.021-0.187 10.667 0 1.845 1.669 4.842 4.999 8.233 9.433 0.6 0.783 1.313 1.931 2 3.066 0.429-0.793 0.835-1.611 1.267-2.4 6.096-11.144 12.405-21.717 18.933-31.532-1.975-2.189-3.996-4.253-6.1-6.134-4.608-4.118-9.174-9.13-20.367-9.168-2.195-0.107-3.944-0.178-5.467-0.2zM628.9 421.733c-2.559 0.054-5.059 0.166-9.2 0.166v-0.099c-11.576 0-15.797 5.152-20.333 9.267-4.537 4.117-8.679 8.96-13 14.632-8.642 11.342-17.778 25.946-26.433 41.767s-16.763 32.785-22.867 48.699c-6.104 15.915-10.567 30.115-10.567 44.235v84.133c0 7.010-0.549 24.049 7.633 41.233s28.643 33.301 57.533 33.301h74.767c28.707 0 49.2-15.589 57.467-32.7 8.245-17.068 7.67-33.994 7.667-41.734v-0.166c0.225-46.688-0.282-46.824 0-84 0-14.064-4.387-28.285-10.433-44.199s-14.116-32.867-22.733-48.701c-8.617-15.832-17.729-30.455-26.433-41.833-4.352-5.689-8.508-10.531-13.133-14.666-4.608-4.118-9.174-9.13-20.367-9.168-4.39-0.215-7.008-0.221-9.567-0.166zM629.133 458.567c1.758-0.024 3.51-0.026 5.333 0.067 1.845 1.668 4.875 4.999 8.267 9.433 1.573 2.056 3.592 5.932 5.3 8.399v20.633c0 6.494-1.834 9.033-4.967 11.6s-8.457 4.466-14.033 4.466c-5.577 0-10.868-1.899-14-4.466s-4.967-5.105-4.967-11.6v-20.199c1.81-2.628 3.909-6.691 5.567-8.867 3.363-4.414 6.356-7.691 8.2-9.4 1.808 0 3.542-0.045 5.3-0.067zM675.567 525.301v0.099c3.845 8.112 8.283 16.365 11.133 23.867 5.273 13.881 8.067 26.505 8.067 31.134-0.283 37.413 0.226 37.524 0 84.065 0 7.711-0.616 18.76-4.033 25.834-3.418 7.076-6.27 11.834-24.3 11.834h-74.767c-17.846 0-20.799-4.915-24.3-12.267s-4.033-18.39-4.033-25.4v-84.133c0-4.573 2.81-17.186 8.133-31.067 2.865-7.47 7.31-15.718 11.167-23.8 2.757 4.191 5.343 8.611 9.033 11.634 10.889 8.921 24.249 12.8 37.367 12.8s26.511-3.879 37.4-12.8c3.736-3.060 6.356-7.543 9.133-11.8z\"\n}","import React from 'react';\n\nconst Icon = props => {\n const styles = {\n\n svg: props.style ? props.style :\n {\n display: 'inline-block',\n verticalAlign: 'middle',\n flexShrink: '0'\n }\n ,\n path: {\n fill: props.color\n },\n };\n\n return (\n \n \n \n \n )\n}\n\nexport default Icon;\n","export const gardenPlantTypes = [ '31', '43', '44', '48', '51', '52', '53', '54', '55', '58', '59' ];","import * as dayjs from 'dayjs'\nimport { gardenPlantTypes } from './Constants/GardenPlantsConstants';\n\nexport const groupByKey = (array, key) => {\n return array.reduce(function (obj, x) {\n (obj[x[key]] = obj[x[key]] || []).push(x);\n return obj;\n }, {});\n}\nexport const groupByMarked = (array, markedKey, nonMarkedKey) => {\n var marked = {}\n var nonMarked = {}\n\n for (var i = 0; i < array.length; i++) {\n var m = array[i][markedKey];\n var n = array[i][nonMarkedKey];\n if (m) {\n if (!marked[m]) { marked[m] = []; }\n marked[m].push(array[i]);\n }\n if (!m && n) {\n if (!nonMarked[n]) { nonMarked[n] = []; }\n nonMarked[n].push(array[i]);\n }\n\n }\n return [{ ...marked }, { ...nonMarked }];\n}\n\nexport let groupFertilizers = function (ferts) {\n let combineArr = [];\n ferts.forEach(function (element) {\n let object = Object.assign({}, element);\n\n object.fertNo = element.pesticideId ? element.product + '_' : element.product;\n object.subList = [];\n\n //if (element.pesticideId) {\n // let s = combineArr.find(c => c.pesticideId === element.pesticideId);\n // if (s) {\n // s.subList.push(element);\n // }\n // else {\n // object.subList.push(element);\n // combineArr.push(object);\n // }\n //}\n //else\n {\n object.subList.push(element);\n combineArr.push(object);\n }\n });\n\n var productGroup = groupByKey(combineArr, 'fertNo');\n\n var groupedByDate = [];\n for (var i in productGroup) {\n\n var productGroup2 = groupByKey(productGroup[i], 'plannedDate');\n\n for (var j in productGroup2) {\n groupedByDate.push(productGroup2[j]);\n }\n };\n\n return groupedByDate;\n};\n\nexport let groupPesticides = function (pests) {\n let flattenObjects = [];\n pests.forEach(function (element) {\n if (element.pesticides.length > 0 || element.fertilizings.length > 0) {\n const object = {\n plannedDate: null,\n growthInformation: {},\n productsGroupNo: [],\n fertilizers: [],\n pesticides: [],\n };\n\n var obj = Object.assign({}, element);\n\n if (obj.growthInformation && (obj.growthInformation.plannedDate || obj.growthInformation.date)) {\n object.growthInformation = obj.growthInformation;\n object.plannedDate = obj.growthInformation.plannedDate;\n\n obj.pesticides.forEach(p => {\n if (p.pesticideRowKey) {\n object.productsGroupNo.push(p.product);\n object.pesticides.push(p);\n }\n });\n\n obj.fertilizings.forEach(f => {\n object.productsGroupNo.push('f' + f.product);\n object.fertilizers.push(f);\n });\n }\n\n if (object.productsGroupNo.length) flattenObjects.push(object);\n }\n });\n\n var productGroup = groupByKey(flattenObjects, 'productsGroupNo');\n\n var groupedByDate = [];\n for (var i in productGroup) {\n\n var productGroup2 = groupByKey(productGroup[i], 'plannedDate');\n\n for (var j in productGroup2) {\n groupedByDate.push(productGroup2[j]);\n }\n };\n return groupedByDate;\n};\n\nexport const toggleActive = (activeId, cardId, setActiveId) => {\n if (activeId === cardId) {\n setActiveId(0);\n } else {\n setActiveId(cardId);\n }\n}\n\nexport const formatPlannedDate = (date, t) => {\n if (!date) return \"\";\n var year = date.slice(0, 4);\n var month = Number(date.slice(4, 6));\n var seasonCode = \"\";\n if ([1, 2].includes(month)) {\n seasonCode = 'Season_Winter';\n } else if ([3, 4, 5].includes(month)) {\n seasonCode = 'Season_Spring';\n } else if ([6, 7].includes(month)) {\n seasonCode = 'Season_Summer';\n } else if (month === 8) {\n seasonCode = 'Season_AutumnSummer';\n } else if ([9, 10, 11].includes(month)) {\n seasonCode = 'Season_Autumn';\n } else if (month === 12) {\n seasonCode = 'Season_Winter';\n }\n return t(seasonCode) + ' ' + year;\n}\n\nexport const getGrowthStageText = (growthStage, t) => {\n if (growthStage >= 10 && growthStage <= 19)\n return t('GrowthStage_Seedling');\n if (growthStage >= 20 && growthStage <= 29)\n return t('GrowthStage_Tillering');\n if (growthStage >= 30 && growthStage <= 39)\n return t('GrowthStage_StemElongation');\n if (growthStage >= 40 && growthStage <= 49)\n return t('GrowthStage_Booting');\n if (growthStage >= 50 && growthStage <= 59)\n return t('GrowthStage_EarEmergence');\n if (growthStage >= 60 && growthStage <= 69)\n return t('GrowthStage_Flowering');\n if (growthStage >= 70 && growthStage <= 79)\n return t('GrowthStage_SeedDevelopment');\n if (growthStage >= 80 && growthStage <= 99)\n return t('GrowthStage_Ripening');\n\n return t('GrowthStage_Zero');\n}\n\nexport const selectFertilizerName = (fert) => {\n if (!fert) return '';\n\n if (fert.productName)\n return fert.productName;\n else if (fert.description)\n return fert.description\n else\n return ''\n}\n\nexport let checkSelectedPlants = (selectedPlotsData) => {\n let plants = [];\n selectedPlotsData.map(function (a) {\n if (plants.indexOf(a.plantId) === -1) plants.push(a.plantId);\n });\n return plants;\n}\n\nexport let checkSowButtonState = (selectedPlotsData) => {\n let plants = checkSelectedPlants(selectedPlotsData);\n if (plants.length === 1 && plants.some(p => p !== 0))\n return false; // disabled false\n else\n return true;\n};\n\nexport let checkPlotsHaveNoPlant = (selectedPlotsData) => {\n let plants = checkSelectedPlants(selectedPlotsData);\n if (plants.length === 1 && plants.some(p => p !== 0))\n return false; // disabled false\n else\n return true;\n};\n\nexport let dayJsFormatDate = (date) => {\n return dayjs(date).format(\"DD.MM.YYYY\");\n}\n\n// sow, fertilize modal amount max value\nexport let valueMax = (inputObj) => {\n const { value } = inputObj;\n if (value < 1000000) return true;\n return false;\n};\n\n// observation density\nexport let valueMaxObservation = (inputObj) => {\n const { value } = inputObj;\n if (value < 100000) return true;\n return false;\n};\n\nexport let valueMaxArea = (inputObj) => {\n const { value } = inputObj;\n if (value < 1000) return true;\n return false;\n};\n\nexport let valueMaxDryMaterialPercentage = (inputObj) => {\n const { value } = inputObj;\n if (value <= 100) return true;\n return false;\n};\n\n\nexport let round = (value) => {\n return Math.round(value * 100) / 100;\n}\n\n// Calculations of sum of areas and amounts to marking modals\n\nexport const updateCalculativeArray = (calculationCombinedData, floatValue, i, j, k, pest) => {\n let newArr = [...calculationCombinedData];\n // For mark pescticides modal\n if (k && pest) {\n // Pesticides\n if (pest === true)\n newArr[i].objects[j].combinedAmounts.find(p => p.product === newArr[i].objects[j].combinedData.pesticides[k].product).amount = floatValue;\n // Fertilizers\n else if (pest === false)\n newArr[i].objects[j].combinedAmounts.find(p => p.product === newArr[i].objects[j].combinedData.fertilizer[k].product).amount = floatValue;\n }\n // For mark sows & fertilizers\n else { \n newArr[i].objects[j].combinedData.amount = floatValue;\n }\n\n return newArr;\n}\n\nexport const GardenPlantCheck = (plantId) => {\n return gardenPlantTypes.includes(plantId.substring(0, 2));\n};\n\nexport const IsIrrigation = (value) => {\n const spreadingMethod_irrigation = 6;\n if (value === spreadingMethod_irrigation) {\n return true;\n }\n\n return false;\n}","export const chartMode = {\n temperatureSum: 1,\n rainSum: 2,\n dValue: 3,\n growthStage: 4\n}\n\n// #region TaskViewer\nexport const taskViewer_viewComponents = {\n GPS: 'GPS',\n taskTypeSelection: 'TaskTypeSelection',\n tasks: 'Tasks',\n taskRunner: 'TaskRunner',\n endTaskViewer: 'EndTaskViewer'\n}\n\nexport const taskViewer_taskStatuses = {\n planned: 1,\n running: 2,\n paused: 3,\n completed: 4,\n endUnfinished: 7\n}\n\nexport const taskViewer_stopComponents = {\n stopSelectionForm: 1,\n endTaskFinished: 2,\n endTaskMarkDone: 3,\n showDataForFinishedTask: 4,\n endUnfinishedContinueLater: 5,\n finish: 6\n}\nexport const GRASSPLANT = \"6\";\n// #endregion","import axios from 'axios';\nimport { getSelectedFarmId, getSelectedYear, getSelectedPlot, getSelectedLang } from './common';\n\n\nexport async function getContent(userToken, content, data) {\n\n try {\n const response = await axios.get(content, {\n params: { farmId: getSelectedFarmId(), farmYear: getSelectedYear(), ...data },\n headers: {\n 'Authorization': `Bearer ${userToken}`\n }\n });\n return response.data;\n }\n catch (e) {\n console.log(e);\n return [];\n }\n}\n\nexport async function getContentWithAction(userToken, content, action, data) {\n\n try {\n const response = await axios.get(content + '/' + action, {\n params: { farmId: getSelectedFarmId(), farmYear: getSelectedYear(), lang: getSelectedLang(), ...data },\n headers: {\n 'Authorization': `Bearer ${userToken}`\n }\n });\n\n return response.data;\n }\n catch (e) {\n return new Promise((resolve, reject) => {\n console.log(e);\n reject();\n });\n }\n}\n\nexport async function getContentWithActionNoParams(userToken, content, action) {\n\n try {\n const response = await axios.get(content + '/' + action, {\n headers: {\n 'Authorization': `Bearer ${userToken}`\n }\n });\n\n return response.data;\n }\n catch (e) {\n console.log(e);\n }\n}\n\nexport async function getContentWithActionAndLanguage(userToken, content, action, data) {\n\n try {\n const response = await axios.get(content + '/' + action, {\n params: { lang: getSelectedLang() },\n headers: {\n 'Authorization': `Bearer ${userToken}`\n }\n });\n\n return response.data;\n }\n catch (e) {\n console.log(e);\n }\n}\n\nexport async function getContentWithActionAndFarmId(userToken, content, action, data) {\n\n try {\n const response = await axios.get(content + '/' + action, {\n params: { farmId: getSelectedFarmId() },\n headers: {\n 'Authorization': `Bearer ${userToken}`\n }\n });\n\n return response.data;\n }\n catch (e) {\n console.log(e);\n }\n}\n\nexport async function getContentWithActionAndPlantId(userToken, content, action, data) {\n\n try {\n const response = await axios.get(content + '/' + action, {\n params: { plantId: getSelectedPlot().plantId, lang: getSelectedLang() },\n headers: {\n 'Authorization': `Bearer ${userToken}`\n }\n });\n\n return response.data;\n }\n catch (e) {\n console.log(e);\n }\n}\n\nexport async function postContentWithAction(userToken, content, action, data, callback = () => { }) {\n\n try {\n const response = await axios.post(content + '/' + action, { farmId: Number(getSelectedFarmId()), farmYear: getSelectedYear(), ...data }, {\n headers: { \n 'Authorization': `Bearer ${userToken}`\n }\n });\n\n callback(response.data);\n }\n catch (e) {\n return new Promise((resolve, reject) => {\n console.log(e);\n reject();\n });\n }\n}\n\n/// CORRECT way to handle async with returning data\nexport async function postContentWithAction_(userToken, content, action, data = () => { }) {\n\n try {\n const response = await axios.post(content + '/' + action, { farmId: Number(getSelectedFarmId()), farmYear: getSelectedYear(), ...data }, {\n headers: {\n 'Authorization': `Bearer ${userToken}`\n }\n });\n\n return response.data;\n }\n catch (e) {\n return new Promise((resolve, reject) => {\n console.log(e);\n reject();\n });\n }\n}\n\n\nexport async function putContentWithAction(userToken, content, action, data) {\n\n try {\n const response = await axios.put(content + '/' + action, { farmId: Number(getSelectedFarmId()), farmYear: getSelectedYear(), ...data }, {\n headers: {\n 'Authorization': `Bearer ${userToken}`\n },\n });\n\n return response.data;\n }\n catch (e) {\n return new Promise((resolve, reject) => {\n console.log(e);\n reject();\n });\n }\n}\n\nexport async function putContentWithActionFertility(userToken, content, action, data, callback = () => { }) {\n\n try {\n const response = await axios.put(content + '/' + action, { farmId: Number(getSelectedFarmId()), farmYear: getSelectedYear(), ...data }, {\n headers: {\n 'Authorization': `Bearer ${userToken}`\n },\n });\n\n callback(response.data);\n }\n catch (e) {\n return new Promise((resolve, reject) => {\n console.log(e);\n reject();\n });\n }\n}","import React from 'react';\n\nconst AppContext = React.createContext();\nexport default AppContext;","import VectorSource from 'ol/source/Vector';\nimport VectorLayer from 'ol/layer/Vector';\nimport { Circle as CircleStyle, Fill, Stroke, Style, Icon } from 'ol/style';\nimport Feature from 'ol/Feature';\nimport Point from 'ol/geom/Point';\nimport icon from '../img/arrow.png';\n\nlet vectorSource;\nconst velocityLimit = 0.556; // metres per second, 2 km/h\n\nexport const addMapPosition = () => {\n vectorSource = new VectorSource();\n\n let vectorLayer = new VectorLayer({\n source: vectorSource,\n zIndex: 3\n });\n\n return vectorLayer;\n}\n\nexport const updateMapPosition = (position) => {\n let locationPoint = new Point([position.longitude, position.latitude]).transform('EPSG:4326', 'EPSG:3857');\n let features = vectorSource.getFeatures();\n let feature;\n if (features.length > 0) {\n feature = features[0];\n feature.setGeometry(locationPoint);\n } else {\n feature = new Feature(locationPoint);\n vectorSource.addFeature(feature);\n }\n // Modify feature style: rotation with heading\n feature.setStyle(getStyle(position.heading, position.velocity));\n}\n\n/**\n * *\n * @param {double} heading - degrees\n * @param {double} velocity - m/s\n */\nconst getStyle = (heading, velocity) => {\n if (heading !== null && velocity > velocityLimit) {\n var headingStyle = new Style({\n image: new Icon({\n src: icon,\n scale: 0.5,\n rotation: heading * Math.PI / 180 // Convert to rad\n }),\n });\n return headingStyle;\n } else {\n var noDirectionStyle = new Style({\n image: new CircleStyle({\n radius: 10,\n fill: new Fill({\n color: 'green'\n }),\n stroke: new Stroke({\n color: 'black',\n width: 3\n }),\n })\n });\n return noDirectionStyle;\n }\n}","import React, { useState, useEffect, useContext } from 'react';\nimport Spinner from 'react-bootstrap/Spinner';\nimport Button from 'react-bootstrap/Button';\nimport Form from 'react-bootstrap/Form';\nimport ListGroup from 'react-bootstrap/ListGroup';\nimport { ICONS } from '../../img/icons'\nimport Icon from '../../img/Icon'\nimport * as dayjs from 'dayjs';\nimport Modal from 'react-bootstrap/Modal'\nimport { useTranslation } from 'react-i18next';\n//import Highcharts from 'highcharts'\nimport HighchartsReact from 'highcharts-react-official'\nimport Highcharts from 'highcharts/highstock';\nimport { chartMode } from '../../constants';\nimport { getContent, getContentWithAction } from '../../apiConnect';\nimport AppContext from '../../AppContext';\nimport { dayJsFormatDate } from '../../commonFunctions.js'\nimport {\n getSelectedLang, getSelectedForecastStation, getSelectedHistoryStation, getSelectedYear\n} from '../../common';\n\nimport '../../css/general.css'\nimport '../../css/farmPlot.css'\n\nconst ChartModal = (props) => {\n const { auth } = useContext(AppContext);\n const { t } = useTranslation();\n const [isLoading, setIsLoading] = useState(true);\n const [title, setTitle] = useState(\"\");\n const [chartOptions, setChartOptions] = useState(null);\n\n useEffect(() => {\n Highcharts.setOptions({ lang: getLangOptions() });\n if (props.chartMode === chartMode.temperatureSum) {\n setTitle(t('Forecast_HeatSum'));\n setChartOptions(getTemperatureSumChartOptions());\n setIsLoading(false);\n }\n else if (props.chartMode === chartMode.rainSum) {\n setTitle(t('Forecast_RainSum'));\n setChartOptions(getRainSumChartOptions());\n setIsLoading(false);\n }\n else if (props.chartMode === chartMode.dValue) {\n setTitle(props.data.plotName + \" - \" + props.data.plotLetter);\n handleDvalueChartLoading();\n }\n else if (props.chartMode === chartMode.growthStage) {\n setTitle(props.data.plotName + \" - \" + props.data.plotLetter);\n handleGrowthChartLoading();\n }\n }, [props.data]);\n\n const handleDvalueChartLoading = () => {\n getContent(auth.getAccessToken(), 'farmPlot', { lang: getSelectedLang() }).then((plotdata) => {\n var legumes = 0;\n var plot = plotdata.find(p => p.apNumber === props.data.plotId);\n\n if (plot.legumes == '1' || plot.legumes == 1) legumes = 20;\n if (plot.legumes == '2' || plot.legumes == 2) legumes = 40;\n\n var station = getSelectedForecastStation();\n var station30Y = getSelectedHistoryStation();\n getContentWithAction(auth.getAccessToken(), 'forecast', 'retrieveForecastDValueChartData', { lang: getSelectedLang(), stationId: station.stationId, stationId30Y: station30Y.stationId, isLocalStation: station.localStation, clover: legumes }).then((data) => {\n setChartOptions(getDValueChartOptions(data));\n setIsLoading(false);\n }).catch((c) => { setIsLoading(false); });\n }).catch((c) => { setIsLoading(false); });\n }\n\n const handleGrowthChartLoading = () => {\n var station = getSelectedForecastStation();\n var station30Y = getSelectedHistoryStation();\n\n getContentWithAction(auth.getAccessToken(), 'sow', 'sows', { plotId: props.data.plotId, lang: getSelectedLang() }).then((sows) => {\n var sow = sows.find(s => s.plotId == props.data.plotId);\n\n getContentWithAction(auth.getAccessToken(), 'forecast', 'retrieveForecastGrowthChartData', {\n farmYear: getSelectedYear(),\n lang: getSelectedLang(),\n stationId: station.stationId,\n stationId30Y: station30Y.stationId,\n plantGroup: props.data.plantGroup,\n temperatureSum: props.data.temperatureSum,\n varietyClass: props.data.varietyClass,\n sowDate: dayjs((sow.sowingDate)).format(),\n isLocalStation: station.localStation\n }).then((data) => {\n setChartOptions(getGrowthStageOptions(data));\n setIsLoading(false);\n }).catch((c) => { setIsLoading(false); });\n }).catch((c) => { setIsLoading(false); });\n }\n\n const getRainSumChartOptions = () => {\n const options = {\n credits: {\n enabled: false\n },\n navigator: {\n enabled: true\n },\n rangeSelector: {\n buttons: [{\n type: 'week',\n count: 2,\n text: '2' + t('Chart_WeekText'),\n title: 'View 2 week'\n }, {\n type: 'month',\n count: 1,\n text: '1' + t('Chart_MonthText'),\n title: 'View 1 month'\n }, {\n type: 'month',\n count: 3,\n text: '3' + t('Chart_MonthText'),\n title: 'View 3 months'\n }, {\n type: 'all',\n text: t('Chart_ShowAll'),\n title: 'View all'\n }],\n buttonSpacing: 10,\n buttonTheme: {\n fill: '#eee',\n width: 50,\n r: 5,\n style: {\n color: '#039',\n fontWeight: 'bold'\n },\n states: {\n select: {\n fill: '#039',\n style: {\n color: 'white'\n }\n }\n }\n }\n },\n scrollbar: {\n enabled: true,\n height: 30,\n },\n title: {\n text: undefined\n },\n chart: {\n zoomType: 'xy'\n },\n yAxis: [{\n showInLegend: false,\n labels: {\n format: '{value} mm',\n align: \"left\",\n x: 0\n },\n title: {\n enabled: false\n },\n opposite: false,\n max: 450\n }],\n xAxis: [{\n type: 'datetime',\n crosshair: true,\n }],\n series: [{\n name: t('Forecast_RainSum'),\n type: 'column',\n yAxis: 0,\n data: props.data.dailyRains,\n tooltip: {\n valueDecimals: 0,\n valueSuffix: '{value} mm'\n },\n dataGrouping: {\n enabled: false\n }\n }]\n };\n\n return options;\n };\n\n const getTemperatureSumChartOptions = () => {\n const options = {\n credits: {\n enabled: false\n },\n navigator: {\n enabled: false\n },\n rangeSelector: {\n buttons: [{\n type: 'month',\n count: 1,\n text: '1' + t('Chart_MonthText'),\n title: 'View 1 month'\n }, {\n type: 'month',\n count: 3,\n text: '3' + t('Chart_MonthText'),\n title: 'View 3 months'\n }, {\n type: 'month',\n count: 6,\n text: '6' + t('Chart_MonthText'),\n title: 'View 6 months'\n }, {\n type: 'all',\n text: t('Chart_ShowAll'),\n title: 'View all'\n }],\n buttonSpacing: 10,\n buttonTheme: {\n width: 50,\n r: 5,\n style: {\n fill: '#039',\n textAlign: 'center'\n },\n states: {\n select: {\n fill: '#039',\n style: {\n color: 'white'\n }\n }\n }\n },\n },\n scrollbar: {\n enabled: false\n },\n title: {\n text: undefined\n },\n chart: {\n zoomType: 'xy'\n },\n yAxis: [{\n tickInterval: 100,\n showInLegend: false,\n labels: {\n format: '{value} \\u00b0C',\n align: \"left\",\n x: 0\n },\n title: {\n enabled: false\n },\n opposite: false\n }],\n xAxis: [{\n type: 'datetime',\n crosshair: true,\n }],\n series: [{\n name: t('Forecast_HeatSum'),\n type: 'spline',\n yAxis: 0,\n data: props.data.temperatures,\n tooltip: {\n valueDecimals: 0,\n valueSuffix: '{value} \\u00b0C'\n }\n }]\n };\n\n return options;\n };\n\n const getDValueChartOptions = (dValueData) => {\n const options = {\n credits: {\n enabled: false\n },\n navigator: {\n enabled: false\n },\n rangeSelector: {\n buttons: [{\n type: 'month',\n count: 1,\n text: '1' + t('Chart_MonthText'),\n title: 'View 1 month'\n }, {\n type: 'month',\n count: 3,\n text: '3' + t('Chart_MonthText'),\n title: 'View 3 months'\n }, {\n type: 'month',\n count: 6,\n text: '6' + t('Chart_MonthText'),\n title: 'View 6 months'\n }, {\n type: 'all',\n text: t('Chart_ShowAll'),\n title: 'View all'\n }],\n buttonSpacing: 10,\n buttonTheme: {\n fill: '#eee',\n width: 50,\n r: 5,\n style: {\n color: '#039',\n fontWeight: 'bold'\n },\n states: {\n select: {\n fill: '#039',\n style: {\n color: 'white'\n }\n }\n }\n },\n },\n scrollbar: {\n enabled: false\n },\n title: {\n text: undefined\n },\n chart: {\n zoomType: 'xy'\n },\n yAxis: [{\n tickInterval: 100,\n showInLegend: false,\n labels: {\n format: '{value}',\n align: \"left\",\n x: 0\n },\n title: {\n enabled: false\n },\n opposite: false,\n min: 500,\n max: 800\n }],\n xAxis: [{\n type: 'datetime',\n crosshair: true,\n }],\n series: [\n {\n name: t('DValue_Real'),\n type: 'area',\n yAxis: 0,\n color: '#A3CD91',\n data: dValueData.realDValue,\n tooltip: {\n valueDecimals: 0,\n valueSuffix: ' '\n }\n },\n {\n name: t('DValue_Predicted'),\n type: 'area',\n color: '#CCC7A9',\n yAxis: 0,\n data: dValueData.predictedDvalue,\n tooltip: {\n valueDecimals: 0,\n valueSuffix: '{value} '\n }\n }\n ]\n };\n\n return options;\n };\n\n const getGrowthStageOptions = (growthData) => {\n const options = {\n credits: {\n enabled: false\n },\n navigator: {\n enabled: false\n },\n rangeSelector: {\n buttons: [{\n type: 'month',\n count: 1,\n text: '1' + t('Chart_MonthText'),\n title: 'View 1 month'\n }, {\n type: 'month',\n count: 3,\n text: '3' + t('Chart_MonthText'),\n title: 'View 3 months'\n }, {\n type: 'month',\n count: 6,\n text: '6' + t('Chart_MonthText'),\n title: 'View 6 months'\n }, {\n type: 'all',\n text: t('Chart_ShowAll'),\n title: 'View all'\n }],\n buttonSpacing: 10,\n buttonTheme: {\n width: 50,\n r: 5,\n style: {\n color: '#039',\n fontWeight: 'bold'\n },\n states: {\n select: {\n fill: '#039',\n style: {\n color: 'white'\n }\n }\n }\n },\n },\n scrollbar: {\n enabled: false\n },\n title: {\n text: undefined\n },\n chart: {\n zoomType: 'xy'\n },\n yAxis: [{\n tickInterval: 100,\n showInLegend: false,\n labels: {\n format: '{value}',\n align: \"left\",\n x: 0\n },\n title: {\n enabled: false\n },\n opposite: false,\n max: 100\n }],\n xAxis: [{\n type: 'datetime',\n crosshair: true,\n }],\n series: [\n {\n name: t('GrowthStage_Graph_Real'),\n type: 'area',\n yAxis: 0,\n color: '#A3CD91',\n data: growthData.realValues,\n tooltip: {\n valueDecimals: 0,\n valueSuffix: ' '\n }\n }, {\n name: t('GrowthStage_Graph_Predicted'),\n type: 'area',\n color: '#CCC7A9',\n yAxis: 0,\n data: growthData.predictedValues,\n tooltip: {\n valueDecimals: 0,\n valueSuffix: '{value} '\n }\n }, {\n name: t('GrowthStage_Graph_Point'),\n color: '#000000',\n yAxis: 0,\n data: growthData.t1Values,\n marker: {\n enabled: true,\n symbol: 'circle',\n radius: 4\n },\n lineWidth: 0,\n tooltip: {\n valueDecimals: 0,\n valueSuffix: '{value} '\n },\n states: {\n hover: {\n lineWidthPlus: 0\n }\n }\n\n },\n //{\n // name: t('DValue_Predicted'),\n // type: 'area',\n // color: '#CCC7A9',\n // yAxis: 0,\n // data: dValueData.predictedDvalue,\n // tooltip: {\n // valueDecimals: 0,\n // valueSuffix: '{value} '\n // }\n //}\n ]\n };\n\n return options;\n };\n\n const getLangOptions = () => {\n return {\n shortMonths: [t('MonthShort_January'), t('MonthShort_February'), t('MonthShort_March'),\n t('MonthShort_April'), t('MonthShort_May'), t('MonthShort_June'),\n t('MonthShort_July'), t('MonthShort_August'), t('MonthShort_September'),\n t('MonthShort_October'), t('MonthShort_November'), t('MonthShort_December')],\n months: [t('Month_January'), t('Month_February'), t('Month_March'),\n t('Month_April'), t('Month_May'), t('Month_June'),\n t('Month_July'), t('Month_August'), t('Month_September'),\n t('Month_October'), t('Month_November'), t('Month_December')],\n weekdays: [t('WeekDay_Monday'), t('WeekDay_Tuesday'), t('WeekDay_Wednesday'), t('WeekDay_Thursday'), t('WeekDay_Friday'), t('WeekDay_Saturday'), t('WeekDay_Sunday')]\n };\n };\n\n return (\n <>\n \n \n \n {title}\n \n \n \n {isLoading ? :\n \n }\n \n \n \n \n \n \n );\n}\n\nexport default ChartModal;","import React, { useState, useEffect } from 'react';\nimport Spinner from 'react-bootstrap/Spinner';\nimport Button from 'react-bootstrap/Button';\nimport Form from 'react-bootstrap/Form';\nimport ListGroup from 'react-bootstrap/ListGroup';\nimport { ICONS } from '../../img/icons'\nimport Icon from '../../img/Icon'\nimport Modal from 'react-bootstrap/Modal'\nimport { useTranslation } from 'react-i18next';\nimport { dayJsFormatDate, getGrowthStageText } from '../../commonFunctions';\nimport { chartMode } from '../../constants';\nimport ChartModal from './ChartModal';\n\nimport '../../css/general.css'\nimport '../../css/farmPlot.css'\n\nconst ShowGrowthStageListModal = (props) => {\n const { t } = useTranslation();\n\n const [isLoading, setIsLoading] = useState(true);\n const [growthData, setGrowthData] = useState([]);\n const [chartModalShow, setChartModalShow] = useState(false);\n const [chartModalData, setChartModalData] = useState([]);\n const [hideContent, setHideContent] = useState(false);\n\n useEffect(() => {\n var sortedData = props.data.sort((a, b) => {\n return b.growthStage - a.growthStage;\n });\n setGrowthData(sortedData);\n setIsLoading(false);\n }, [props.data]);\n\n const getGrowthStage = (row) => {\n if (row.growthStage < 0) return ''\n return row.growthStage;\n }\n\n const openGrowthStageGraph = (data) => {\n setChartModalData(data);\n setChartModalShow(true);\n setHideContent(true);\n }\n\n return (\n <>\n \n \n {t('GrowthStage_Modal_Title')}\n \n \n {(isLoading) ? \n :\n \n {(growthData && !hideContent) ? growthData.map((d, i) =>\n
\n { if (d.harvest) openGrowthStageGraph(d); }}\n >\n {d.harvest ?
: ''}\n
{d.plotName} - {d.plotLetter}
\n
{d.plantName} - {d.plantVariety}
\n
{t('PlantProtection_GrowthStage')}: {getGrowthStage(d)} - {getGrowthStageText(d.growthStage, t)}
\n
{t('Harvest_Prognosis')}: {d.harvest ? dayJsFormatDate(d.harvest) : ''}
\n \n
\n ) : \"\"}\n
}\n
\n {!hideContent ? \n \n \n \n : ''}\n
\n {chartModalShow === true ?\n {\n setChartModalShow(false);\n setHideContent(false);\n }}\n />\n : ''}\n \n )\n}\n\nexport default ShowGrowthStageListModal;","import React, { useContext } from 'react';\nimport * as dayjs from 'dayjs'\nimport Calendar from 'react-calendar'\nimport Modal from 'react-bootstrap/Modal';\n\nimport 'react-calendar/dist/Calendar.css';\nimport '../../css/general.css'\nimport AppContext from '../../AppContext';\n\nconst CalendarModal = (props) => {\n const { selectedLanguage } = useContext(AppContext);\n\n let d = new Date();\n let selecteddate = props.selecteddate ? new Date(props.selecteddate) : new Date()\n \n return (\n \n \n d ? selecteddate: d}\n value={selecteddate}\n onChange={(selectedDate) => { props.onChange(dayjs(selectedDate).format()); props.onHide(); }} />\n \n \n );\n}\n\nexport default CalendarModal;","export const disableGPS = (current) => {\n let geolocation = navigator.geolocation; \n geolocation.clearWatch(current); \n}\nexport const enableGPS = (callback) => {\n const options = {\n enableHighAccuracy: true,\n timeout: 10000,\n maximumAge: 0\n }\n\n let geolocation = navigator.geolocation;\n\n const showLocation = (position) => {\n //geolocation.clearWatch(position);\n callback(geolocation, position);\n }\n\n const errorHandler = (err) => {\n console.warn('ERROR(' + err.code + '): ' + err.message);\n }\n \n geolocation.getCurrentPosition(showLocation, errorHandler, options);\n}\n\n/**\n * GPS RouteSimulator. For testing purposes only!\n * Start simulating route\n * @param {any} callback\n */\nlet timer;\n\nexport const startSimulateGPS = (callback) => {\n let coords = [[25.026702093861786, 60.219978712597218], [25.027018804710952, 60.220271040002345], [25.027411998164908, 60.220634399527739], [25.027952307406487, 60.221129693612944], [25.02843941386017, 60.221569965285369], [25.028750665255064, 60.221846139115911], [25.028753121081959, 60.221859029949407], [25.028745799329155, 60.221873382268598], [25.028724293215447, 60.221881900016676], [25.028676729585101, 60.221894047484618], [25.027937432109479, 60.22204936120832], [25.026254371434721, 60.222402727835487], [25.025537785950107, 60.222555956158509], [25.025146833121401, 60.222638509823177], [25.025007014075943, 60.222667358885566], [25.024980172923023, 60.222670574526205], [25.024949539333946, 60.222669716709106], [25.024930466334624, 60.222664612336743], [25.024909238630151, 60.222655057195148], [25.024891407108019, 60.222642740730201], [25.024813549096766, 60.222554412828238], [25.024550614693272, 60.222254043792219], [25.024447511866818, 60.2221424428677], [25.024418161354792, 60.22210685710791], [25.024413743442839, 60.222099761583763], [25.02441299222053, 60.222092118122731], [25.0244145646855, 60.22208611606451], [25.024419436683409, 60.222078958053203], [25.024479668761749, 60.222037475927145], [25.024653289228301, 60.221916539306619], [25.024806249249774, 60.221810157662553], [25.025004680834478, 60.221672718725188], [25.025287871414626, 60.221475282356323], [25.025837286825819, 60.22109381313075], [25.026305912952473, 60.220766573997153], [25.026885552896537, 60.22036546545241], [25.02696471396937, 60.220311208636105], [25.026990073543715, 60.220292304340731], [25.026991376074442, 60.22027063200585], [25.026969656148779, 60.220255847781431], [25.026929416425396, 60.220253642411684], [25.026891679940281, 60.220263525217455], [25.02681680718311, 60.220300171057211], [25.026758358266882, 60.220332240809107], [25.026704122359249, 60.220374817371003], [25.026692608159696, 60.220405175148422], [25.026702165377795, 60.220434239614193], [25.026737248456133, 60.22046850420476], [25.028371311251409, 60.221950967894117], [25.028395970722009, 60.22197061593787], [25.028398979315359, 60.222001189710184], [25.028363021965884, 60.222035201276903], [25.028132089810427, 60.2220888096181], [25.02807414704262, 60.222085538052596], [25.028013555853146, 60.222072586333823], [25.026451523979858, 60.220654658264984], [25.026405843331375, 60.220635500453852], [25.026360666269309, 60.220634828245501], [25.026294390267619, 60.220662764353946], [25.026162651718153, 60.220758818420514], [25.026130016925723, 60.220791272046384], [25.026140994171204, 60.220823571273996], [25.026174560117639, 60.220856206643035], [25.027572669627595, 60.222126285812017], [25.027590271693505, 60.222155871518893], [25.02757132789748, 60.222188930773441], [25.027338166019266, 60.222239291013409], [25.027276417115523, 60.222245603254031], [25.027218860084925, 60.222235909882386], [25.027192105174684, 60.222224264414365], [25.027175128034365, 60.222211157572652], [25.025896317246044, 60.221052111657819], [25.025876283198624, 60.221036147251645], [25.025823014035723, 60.221035756128074], [25.025739591834256, 60.22105339431257], [25.02561312505069, 60.221142295753438], [25.025573407742677, 60.221185087985937], [25.025581157575033, 60.221217339221141], [25.025615699075836, 60.221247177363701], [25.0267823633082, 60.222310560358423], [25.026784046377966, 60.222336294083405], [25.026756782022421, 60.222359990394509], [25.026661748414263, 60.222382678529407], [25.026504434480614, 60.222420507938992], [25.026436472162384, 60.222422710367503], [25.026364458220971, 60.222371426604042], [25.025322231894826, 60.2214275900741], [25.025290637806592, 60.221415872166062], [25.025199412416406, 60.221428975169459], [25.025122969889324, 60.221464793324792], [25.025000809148686, 60.221562595687629], [25.025011495767405, 60.221599711068677], [25.025993482485088, 60.222484407336765], [25.025995213213054, 60.222509338389813], [25.025956218785733, 60.222540090548328], [25.025830091986574, 60.222569545933801], [25.025696186819541, 60.222594065048106], [25.025639760427737, 60.222592421788917], [25.025600290426571, 60.222577373153101], [25.024759365404396, 60.221817694328642], [25.024722930579784, 60.221805904202746], [25.024661616730167, 60.221804991128131], [25.024595385220962, 60.22183212368676], [25.024485820498189, 60.22190842146383], [25.024441550037707, 60.221946325182635], [25.024445975245762, 60.221980133768568], [25.024494951388153, 60.222025050031561], [25.025192071186982, 60.22265163597681], [25.025195414878084, 60.222676591059184], [25.025173376123337, 60.222693937680518], [25.025112756608031, 60.222708299708913], [25.025072514017662, 60.222706093762618], [25.024962644203512, 60.222572700808826], [25.024420825491237, 60.222022339242031], [25.024413173242102, 60.221988482592145], [25.026906276066818, 60.220235623460056], [25.02690820581876, 60.220203516298625], [25.026675699921292, 60.219987960687554]];\n let a = 0; let b = 90; let c = 180; let d = 270;\n let headings = [null, null, null, null, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a,\n b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b, b,\n c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c,\n d, d];\n let velocities = headings; velocities[10] = velocities[11] = velocities[12] = velocities[13] = 0.3;\n let interval = 1000;\n let idx = 0;\n\n timer = setInterval(function () {\n let coordinates = coords[idx];\n let heading = headings[idx];\n let velocity = velocities[idx];\n idx = (idx < coords.length) ? idx + 1 : 0;\n\n let position = {\n longitude: coordinates[0],\n latitude: coordinates[1],\n accuracy: 0.0,\n heading: heading,\n velocity: velocity\n };\n\n callback(null, position);\n }, interval);\n}\n\n/**\n * GPS RouteSimulator. For testing purposes only!\n * Stop simulating route\n * @param {any} callback\n */\nexport const stopSimulateGPS = (callback) => {\n clearInterval(timer);\n}","export const MapConfig = {\n CLUSTER_SCALE_THRESHOLD: 24000,\n FEATURE_LAYER_MAX_SCALE_THRESHOLD: 12000,\n ELEVATION_MODEL_ZOOM_THRESHOLD: 5,\n MLOY_GEOSERVER_WFS_VERSION: \"1.0.0\",\n MLOY_GEOSERVER_NAMESPACE: \"http://www.mtech.fi\",\n MML_WMS_VERSION: \"1.1.1\",\n MML_COPYRIGHT: \"MML\",\n MTECH_COPYRIGHT: \"Mtech\",\n WMTS_API: \"map/wmts\",\n WMS_API: \"api/map/wms?\",\n WFS_API: \"api/map/wfs\",\n GEO_API: \"api/map\",\n PROJECTION: \"EPSG:3067\",\n MODIFICATOR_NAME: \"wisukartta\",\n\n RESOLUTIONS: [8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0.5],\n EXTENT: [-548576, 6291456, 1548576, 8388608],\n MATRIXSET: 'EPSG_3857',\n WMS_VERSION: '1.3.0',\n FEATURE: {\n OBSERVATION: '5304',\n FERTILITY_SAMPLE: '5305',\n FERTILITY_SERIES: '5311', \n NEW_FERTILITY_SERIES: '5411',\n FERTILITY_SERIES_PLANNED: '5312',\n FERTILITY_SERIES_COLLECTED: '5313',\n NOTE: '5306',\n TREE: '5307',\n ROCK: '5308',\n FLAG: '5353'\n }\n}","//import GeoJSON from 'ol/format/GeoJSON';\n\nimport { MapConfig } from './mapConfig';\n\n\n/** Private Map Models Class */\n//OpenLayers.Renderer.symbol.flag = [1, 0, 1, 13, 0, 13, 1, 14, 2, 13, 1, 13, 1, 8, 8, 4, 1, 0];\n//OpenLayers.Renderer.symbol.pipette = [7, 14, 8, 13, 8, 6, 9, 5.5, 10, 5, 10.5, 4, 10.5, 3, 10, 2, 9, 1.5, 5, 1.5, 4, 2, 3.5, 3, 3.5, 4, 4, 5, 5, 5.5, 6, 6, 6, 13, 7, 14];\n//OpenLayers.Renderer.symbol.note = [5, 3, 5, 10, 7, 10, 7, 7, 10, 7, 7, 10, 10, 7, 10, 3, 5, 3];\n//OpenLayers.Renderer.symbol.bug = [2, 2, 2, 3, 4, 5, 4, 7, 2, 7, 4, 7, 4, 9, 2, 11, 2, 12, 2, 11, 4, 9, 6, 11, 8, 11, 10, 9, 12, 11, 12, 12, 12, 11, 10, 9, 10, 7, 12, 7, 10, 7, 10, 5, 12, 3, 12, 2, 12, 3, 10, 5, 9, 4, 8, 4, 9, 3, 9, 2, 10, 1, 9, 2, 8, 1.5, 6, 1.5, 5, 2, 4, 1, 5, 2, 5, 3, 6, 4, 5, 4, 4, 5, 2, 3, 4, 5];\n//OpenLayers.Renderer.symbol.tree = [7, 0, 4, 3, 6, 3, 3, 6, 5, 6, 1, 10, 6, 10, 6, 13, 8, 13, 8, 10, 13, 10, 9, 6, 11, 6, 8, 3, 10, 3, 7, 0];\n//OpenLayers.Renderer.symbol.rock = [5, 2, 3, 4, 3, 7, 5, 9, 10, 9, 12, 7, 12, 5, 9, 2, 5, 2];\n//OpenLayers.Renderer.symbol.farm = [1, 6, 7, 1, 9.5, 3, 9.5, 1.5, 11, 1.5, 11, 4, 13, 6, 11, 6, 11, 11, 7, 11, 7, 8, 5, 8, 5, 11, 3, 11, 3, 6, 1, 6];\n\n\nexport const MapModels = {\n\n Attribution: {\n SYKE: MapConfig.SYKE_COPYRIGHT,\n MTECH: MapConfig.MTECH_COPYRIGHT\n },\n\n /** OpenLayers StyleMap definitions\n *\n * @type {{basePlotDefault: OpenLayers.StyleMap, plotDefault: OpenLayers.StyleMap}}\n */\n //StyleMap: {\n\n // basePlotDefault: new OpenLayers.StyleMap({\n // \"default\": new OpenLayers.Style({\n // fillColor: \"red\",\n // fillOpacity: 0,\n // strokeColor: \"red\",\n // strokeWidth: 1.5,\n // pointRadius: 5,\n // strokeOpacity: 0.8,\n // cursor: \"pointer\",\n // fontFamily: 'Arial'\n // },\n // {\n // rules: [\n\n // new OpenLayers.Rule({\n // maxScaleDenominator: 2500,\n // minScaleDenominator: 1,\n // symbolizer: {\n // label: \"${BasePlotName}\",\n // fontColor: \"#6DC7FF\",\n // fontSize: \"14px\",\n // labelYOffset: 9,\n // labelOutlineColor: \"black\",\n // labelOutlineWidth: 2\n // }\n // }),\n\n // new OpenLayers.Rule({\n // maxScaleDenominator: 5000,\n // minScaleDenominator: 2500,\n // symbolizer: {\n // label: \"${BasePlotName}\",\n // fontColor: \"#6DC7FF\",\n // fontSize: \"12px\",\n // labelYOffset: 6,\n // labelOutlineColor: \"black\",\n // labelOutlineWidth: 2\n // }\n // }),\n\n // new OpenLayers.Rule({\n // maxScaleDenominator: 9000,\n // minScaleDenominator: 5000,\n // symbolizer: {\n // label: \"${BasePlotName}\",\n // fontColor: \"#6DC7FF\",\n // fontSize: \"11px\",\n // labelYOffset: 10,\n // labelOutlineColor: \"#111\",\n // labelOutlineWidth: 2\n // }\n // }),\n\n // new OpenLayers.Rule({\n // maxScaleDenominator: 12000,\n // minScaleDenominator: 9000,\n // symbolizer: {\n // label: \"${BasePlotName}\",\n // fontColor: \"#6DC7FF\",\n // fontSize: \"10px\",\n // labelYOffset: -4,\n // labelOutlineColor: \"#222\",\n // labelOutlineWidth: 2\n // }\n // }),\n\n // new OpenLayers.Rule({\n // maxScaleDenominator: 24000,\n // minScaleDenominator: 12000,\n // symbolizer: {\n // strokeColor: \"red\",\n // strokeWidth: 1.5\n // }\n // })\n // ]\n // }),\n // select: new OpenLayers.Style({\n // fillColor: \"#fc0\",\n // strokeColor: \"#1C7AFF\",\n // fillOpacity: 0\n // /*graphicZIndex: 10*/\n // }),\n // vertex: new OpenLayers.Style({\n // strokeColor: \"#FF9400\",\n // fillColor: \"#000\",\n // label: \"\",\n // fillOpacity: 0.9,\n // strokeOpacity: 0.9,\n // strokeWidth: 3,\n // pointRadius: 5,\n // cursor: 'pointer'\n // }),\n // temporary: new OpenLayers.Style({\n // pointRadius: 4,\n // graphicName: \"square\",\n // fillColor: \"white\",\n // fillOpacity: 1,\n // strokeWidth: 2,\n // strokeOpacity: 1,\n // strokeColor: \"#333333\"\n // })\n // }),\n\n // basePlotVectors: new OpenLayers.StyleMap({\n // \"default\": new OpenLayers.Style({\n // fillColor: \"red\",\n // fillOpacity: 0,\n // strokeColor: \"red\",\n // strokeWidth: 1.5,\n // pointRadius: 5,\n // strokeOpacity: 0.8,\n // cursor: \"pointer\"\n // },\n // {\n // rules: [\n // new OpenLayers.Rule({\n // maxScaleDenominator: 24000,\n // minScaleDenominator: 1,\n // symbolizer: {\n // strokeColor: \"red\",\n // strokeWidth: 1.5\n // }\n // })\n // ]\n // })\n // }),\n\n // basePlotLabels: new OpenLayers.StyleMap({\n // \"default\": new OpenLayers.Style({\n // fillOpacity: 0,\n // strokeOpacity: 0,\n // cursor: \"pointer\",\n // fontFamily: 'Arial'\n // },\n // {\n // rules: [\n\n // new OpenLayers.Rule({\n // maxScaleDenominator: 2500,\n // minScaleDenominator: 1,\n // symbolizer: {\n // label: \"${BasePlotName}\",\n // fontColor: \"#6DC7FF\",\n // fontSize: \"14px\",\n // labelYOffset: 9,\n // labelOutlineColor: \"black\",\n // labelOutlineWidth: 2\n // }\n // }),\n\n // new OpenLayers.Rule({\n // maxScaleDenominator: 5000,\n // minScaleDenominator: 2500,\n // symbolizer: {\n // label: \"${BasePlotName}\",\n // fontColor: \"#6DC7FF\",\n // fontSize: \"12px\",\n // labelYOffset: 6,\n // labelOutlineColor: \"black\",\n // labelOutlineWidth: 2\n // }\n // }),\n\n // new OpenLayers.Rule({\n // maxScaleDenominator: 9000,\n // minScaleDenominator: 5000,\n // symbolizer: {\n // label: \"${BasePlotName}\",\n // fontColor: \"#6DC7FF\",\n // fontSize: \"11px\",\n // labelYOffset: 10,\n // labelOutlineColor: \"#111\",\n // labelOutlineWidth: 2\n // }\n // }),\n\n // new OpenLayers.Rule({\n // maxScaleDenominator: 12000,\n // minScaleDenominator: 9000,\n // symbolizer: {\n // label: \"${BasePlotName}\",\n // fontColor: \"#6DC7FF\",\n // fontSize: \"10px\",\n // labelYOffset: -4,\n // labelOutlineColor: \"#222\",\n // labelOutlineWidth: 2\n // }\n // })\n // ]\n // })\n // }),\n\n // plotDefault: new OpenLayers.StyleMap({\n // \"default\": new OpenLayers.Style({\n // fillColor: \"green\",\n // fillOpacity: 0,\n // strokeColor: \"#009700\",\n // strokeOpacity: 1,\n // strokeWidth: 2,\n // strokeDashstyle: \"solid\",\n // cursor: \"pointer\",\n // fontFamily: 'Verdana',\n // },\n // {\n // rules: [\n\n // new OpenLayers.Rule({\n // symbolizer: {\n // strokeColor: \"#FFBB3D\",\n // fillOpacity: 0\n // },\n // filter: new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.EQUAL_TO,\n // property: \"New\",\n // value: true\n // })\n // }),\n\n // new OpenLayers.Rule({\n // maxScaleDenominator: 2500,\n // minScaleDenominator: 1,\n // symbolizer: {\n // label: \"${PlotLetter} (${Area} ha)\",\n // labelYOffset: -14,//-8,\n // fontSize: \"14px\",\n // fontColor: \"#00C91A\",\n // fontOpacity: 1,\n // labelOutlineColor: \"black\",\n // labelOutlineWidth: 2\n // }\n // }),\n\n // new OpenLayers.Rule({\n // maxScaleDenominator: 5000,\n // minScaleDenominator: 2500,\n // symbolizer: {\n // label: \"${PlotLetter} (${Area} ha)\",\n // labelYOffset: -14,//-8,\n // fontSize: \"12px\",\n // fontColor: \"#00C91A\",\n // fontOpacity: 1,\n // labelOutlineColor: \"black\",\n // labelOutlineWidth: 2\n // }\n // }),\n\n // new OpenLayers.Rule({\n // maxScaleDenominator: 9000,\n // minScaleDenominator: 5000,\n // symbolizer: {\n // label: \"${PlotLetter} (${Area} ha)\",\n // labelYOffset: -8,\n // fontSize: \"11px\",\n // fontColor: \"#00C91A\",\n // fontOpacity: 1,\n // labelOutlineColor: \"black\",\n // labelOutlineWidth: 2\n // }\n // }),\n\n // new OpenLayers.Rule({\n // maxScaleDenominator: 250000,\n // minScaleDenominator: 9000,\n // symbolizer: {\n // strokeColor: \"#009700\"\n // }\n // })\n\n // ]\n // }),\n // select: new OpenLayers.Style({\n // fillColor: \"#fc0\",\n // strokeColor: \"#FFC721\",\n // fillOpacity: 0,\n // fontColor: \"#FFC721\"\n // }),\n // vertex: new OpenLayers.Style({\n // strokeColor: \"#1C7AFF\",\n // fillColor: \"#000\",\n // label: \"\",\n // fillOpacity: 0.9,\n // strokeOpacity: 0.9,\n // strokeWidth: 3,\n // pointRadius: 5,\n // cursor: 'pointer'\n // }), // 00ccff\n // temporary: new OpenLayers.Style({\n // pointRadius: 4,\n // graphicName: \"square\",\n // fillColor: \"white\",\n // fillOpacity: 1,\n // strokeWidth: 2,\n // strokeOpacity: 1,\n // strokeColor: \"#333333\"\n // })\n // }),\n\n // plotThemePlants: new OpenLayers.StyleMap({\n // \"default\": new OpenLayers.Style({\n // fillColor: \"white\",\n // fillOpacity: 0.5,\n // strokeColor: \"#008900\",\n // strokeOpacity: 1,\n // strokeWidth: 2,\n // strokeDashstyle: \"solid\",\n // cursor: \"pointer\",\n // fontFamily: 'Verdana'\n // },\n // {\n // rules: [\n\n // new OpenLayers.Rule({\n // maxScaleDenominator: 2500,\n // minScaleDenominator: 1,\n // symbolizer: {\n // label: \"${Area} ha\",\n // labelYOffset: -14,\n // fontSize: \"14px\",\n // fontColor: \"#fff\",\n // fontOpacity: 1,\n // labelOutlineColor: \"black\",\n // labelOutlineWidth: 2,\n // fillColor: \"white\"\n // },\n // filter: new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.EQUAL_TO,\n // property: \"PlantCode\",\n // value: \"00000\"\n // })\n // }),\n // new OpenLayers.Rule({\n // maxScaleDenominator: 2500,\n // minScaleDenominator: 1,\n // symbolizer: {\n // label: \"${PlantName} \\n ${Area} ha\",\n // labelYOffset: -14,\n // fontSize: \"14px\",\n // fontColor: \"#fff\",\n // fontOpacity: 1,\n // labelOutlineColor: \"black\",\n // labelOutlineWidth: 2,\n // fillColor: \"yellow\"\n // },\n // filter: new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.BETWEEN,\n // property: \"PlantCode\",\n // lowerBoundary: \"10000\",\n // upperBoundary: \"20999\"\n // })\n // }),\n // new OpenLayers.Rule({\n // maxScaleDenominator: 2500,\n // minScaleDenominator: 1,\n // symbolizer: {\n // label: \"${PlantName} \\n ${Area} ha\",\n // labelYOffset: -14,\n // fontSize: \"14px\",\n // fontColor: \"#fff\",\n // fontOpacity: 1,\n // labelOutlineColor: \"black\",\n // labelOutlineWidth: 2,\n // fillColor: \"#0DCE00\"\n // },\n // filter: new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.BETWEEN,\n // property: \"PlantCode\",\n // lowerBoundary: \"60000\",\n // upperBoundary: \"69999\"\n // })\n // }),\n\n // new OpenLayers.Rule({\n // maxScaleDenominator: 2500,\n // minScaleDenominator: 1,\n // symbolizer: {\n // label: \"${PlantName} \\n ${Area} ha\",\n // labelYOffset: -14,\n // fontSize: \"14px\",\n // fontColor: \"#fff\",\n // fontOpacity: 1,\n // labelOutlineColor: \"black\",\n // labelOutlineWidth: 2,\n // fillColor: \"#BC4ACE\"\n // },\n // elseFilter: true\n // }),\n\n // new OpenLayers.Rule({\n // maxScaleDenominator: 5000,\n // minScaleDenominator: 2500,\n // symbolizer: {\n // label: \"${Area} ha\",\n // labelYOffset: -14,\n // fontSize: \"12px\",\n // fontColor: \"#fff\",\n // fontOpacity: 1,\n // labelOutlineColor: \"black\",\n // labelOutlineWidth: 2,\n // fillColor: \"white\"\n // },\n // filter: new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.EQUAL_TO,\n // property: \"PlantCode\",\n // value: \"00000\"\n // })\n // }),\n // new OpenLayers.Rule({\n // maxScaleDenominator: 5000,\n // minScaleDenominator: 2500,\n // symbolizer: {\n // label: \"${PlantName} \\n ${Area} ha\",\n // labelYOffset: -14,\n // fontSize: \"12px\",\n // fontColor: \"#fff\",\n // fontOpacity: 1,\n // labelOutlineColor: \"black\",\n // labelOutlineWidth: 2,\n // fillColor: \"yellow\"\n // },\n // filter: new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.BETWEEN,\n // property: \"PlantCode\",\n // lowerBoundary: \"10000\",\n // upperBoundary: \"20999\"\n // })\n // }),\n // new OpenLayers.Rule({\n // maxScaleDenominator: 5000,\n // minScaleDenominator: 2500,\n // symbolizer: {\n // label: \"${PlantName} \\n ${Area} ha\",\n // labelYOffset: -14,\n // fontSize: \"11px\",\n // fontColor: \"#fff\",\n // fontOpacity: 1,\n // labelOutlineColor: \"black\",\n // labelOutlineWidth: 2,\n // fillColor: \"#0DCE00\"\n // },\n // filter: new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.BETWEEN,\n // property: \"PlantCode\",\n // lowerBoundary: \"60000\",\n // upperBoundary: \"69999\"\n // })\n // }),\n // new OpenLayers.Rule({\n // maxScaleDenominator: 5000,\n // minScaleDenominator: 2500,\n // symbolizer: {\n // label: \"${PlantName} \\n ${Area} ha\",\n // labelYOffset: -14,\n // fontSize: \"11px\",\n // fontColor: \"#fff\",\n // fontOpacity: 1,\n // labelOutlineColor: \"black\",\n // labelOutlineWidth: 2,\n // fillColor: \"#BC4ACE\"\n // },\n // elseFilter: true\n // }),\n\n\n\n // new OpenLayers.Rule({\n // maxScaleDenominator: 9000,\n // minScaleDenominator: 5000,\n // symbolizer: {\n // label: \"${Area} ha\",\n // labelYOffset: -8,\n // fontSize: \"11px\",\n // fontColor: \"#fff\",\n // fontOpacity: 1,\n // labelOutlineColor: \"black\",\n // labelOutlineWidth: 2,\n // fillColor: \"white\"\n // },\n // filter: new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.EQUAL_TO,\n // property: \"PlantCode\",\n // value: \"00000\"\n // })\n // }),\n // new OpenLayers.Rule({\n // maxScaleDenominator: 9000,\n // minScaleDenominator: 5000,\n // symbolizer: {\n // label: \"${PlantName} \\n ${Area} ha\",\n // labelYOffset: -8,\n // fontSize: \"11px\",\n // fontColor: \"#fff\",\n // fontOpacity: 1,\n // labelOutlineColor: \"black\",\n // labelOutlineWidth: 2,\n // fillColor: \"yellow\"\n // },\n // filter: new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.BETWEEN,\n // property: \"PlantCode\",\n // lowerBoundary: \"10000\",\n // upperBoundary: \"20999\"\n // })\n // }),\n // new OpenLayers.Rule({\n // maxScaleDenominator: 9000,\n // minScaleDenominator: 5000,\n // symbolizer: {\n // label: \"${PlantName} \\n ${Area} ha\",\n // labelYOffset: -8,\n // fontSize: \"11px\",\n // fontColor: \"#fff\",\n // fontOpacity: 1,\n // labelOutlineColor: \"black\",\n // labelOutlineWidth: 2,\n // fillColor: \"#0DCE00\"\n // },\n // filter: new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.BETWEEN,\n // property: \"PlantCode\",\n // lowerBoundary: \"60000\",\n // upperBoundary: \"69999\"\n // })\n // }),\n // new OpenLayers.Rule({\n // maxScaleDenominator: 9000,\n // minScaleDenominator: 5000,\n // symbolizer: {\n // label: \"${PlantName} \\n ${Area} ha\",\n // labelYOffset: -8,\n // fontSize: \"11px\",\n // fontColor: \"#fff\",\n // fontOpacity: 1,\n // labelOutlineColor: \"black\",\n // labelOutlineWidth: 2,\n // fillColor: \"#BC4ACE\"\n // },\n // elseFilter: true\n // }),\n\n\n // new OpenLayers.Rule({\n // maxScaleDenominator: 24000,\n // minScaleDenominator: 9000,\n // symbolizer: {\n // strokeWidth: 1.5,\n // fillColor: \"white\"\n // },\n // filter: new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.EQUAL_TO,\n // property: \"PlantCode\",\n // value: \"00000\"\n // })\n // }),\n // new OpenLayers.Rule({\n // maxScaleDenominator: 24000,\n // minScaleDenominator: 9000,\n // symbolizer: {\n // strokeWidth: 1.5,\n // fillColor: \"yellow\"\n // },\n // filter: new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.BETWEEN,\n // property: \"PlantCode\",\n // lowerBoundary: \"10000\",\n // upperBoundary: \"20999\"\n // })\n // }),\n // new OpenLayers.Rule({\n // maxScaleDenominator: 24000,\n // minScaleDenominator: 9000,\n // symbolizer: {\n // strokeWidth: 1.5,\n // fillColor: \"#0DCE00\"\n // },\n // filter: new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.BETWEEN,\n // property: \"PlantCode\",\n // lowerBoundary: \"60000\",\n // upperBoundary: \"69999\"\n // })\n // }),\n // new OpenLayers.Rule({\n // maxScaleDenominator: 24000,\n // minScaleDenominator: 9000,\n // symbolizer: {\n // strokeWidth: 1.5,\n // fillColor: \"#BC4ACE\"\n // },\n // elseFilter: true\n // }),\n\n // new OpenLayers.Rule({\n // maxScaleDenominator: 500000,\n // minScaleDenominator: 24000,\n // symbolizer: {\n // graphicName: 'farm',\n // pointRadius: 18,\n // fillColor: \"red\",\n // fillOpacity: 0.8,\n // strokeColor: \"black\",\n // strokeWidth: 2,\n // strokeOpacity: 0.8,\n // label: \"${count}\",\n // labelYOffset: 2,\n // fontColor: \"black\",\n // fontSize: \"13px\",\n // fontWeight: \"bold\",\n // labelOutlineColor: \"black\",\n // labelOutlineWidth: 0\n // }\n // })\n\n // ]\n // }),\n // select: new OpenLayers.Style({\n // fillColor: \"#fc0\",\n // strokeColor: \"#FFC721\",\n // fillOpacity: 0.2,\n // fontColor: \"#FFC721\"\n // // labelOutlineWidth: 2labelOutlineColor: \"#fff\"\n // /*graphicZIndex: 10*/\n // })\n\n // }),\n\n // featuresDefault: function (featureAttributes) {\n\n // var getFeatureAttribute = function (id, property) {\n // var feature = _.find(featureAttributes, function (attr) { return attr.FeatureGeometryId == id });\n // return feature[property];\n // }\n\n\n // return new OpenLayers.StyleMap({\n // \"default\": new OpenLayers.Style({\n // fillColor: \"white\",\n // fillOpacity: 0.9,\n // strokeWidth: 2,\n // strokeOpacity: 0.9,\n // fontColor: \"white\",\n // fontFamily: 'Verdana',\n // labelOutlineColor: \"black\",\n // labelOutlineWidth: 2\n\n // },\n // {\n // context: {\n // SampleIdAndDate: function (feature) {\n // if (!featureAttributes.length) return \"\";\n // return getFeatureAttribute(feature.attributes.FeatureGeometryID, \"SampleId\") + \" / \" + getFeatureAttribute(feature.attributes.FeatureGeometryID, \"SampleDate\");\n // }\n // },\n\n // rules: [\n\n // new OpenLayers.Rule({\n // maxScaleDenominator: (MapConfig.FEATURE_LAYER_MAX_SCALE_THRESHOLD / 3),\n // minScaleDenominator: 1,\n // symbolizer: {\n // strokeColor: \"black\",\n // fillColor: \"#C10000\",\n // graphicName: 'bug',\n // pointRadius: 10\n // },\n // filter: new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.EQUAL_TO,\n // property: \"FeatureType\",\n // value: MapConfig.FEATURE.OBSERVATION\n // })\n // }),\n // new OpenLayers.Rule({\n // maxScaleDenominator: MapConfig.FEATURE_LAYER_MAX_SCALE_THRESHOLD,\n // minScaleDenominator: (MapConfig.FEATURE_LAYER_MAX_SCALE_THRESHOLD / 3),\n // symbolizer: {\n // strokeColor: \"black\",\n // fillColor: \"#C10000\",\n // graphicName: 'bug',\n // pointRadius: 7\n // },\n // filter: new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.EQUAL_TO,\n // property: \"FeatureType\",\n // value: MapConfig.FEATURE.OBSERVATION\n // })\n // }),\n\n // new OpenLayers.Rule({\n // maxScaleDenominator: (MapConfig.FEATURE_LAYER_MAX_SCALE_THRESHOLD / 3),\n // minScaleDenominator: 1,\n // symbolizer: {\n // externalGraphic: 'src/img/grain.png',\n // graphicWidth: 15,\n // graphicHeight: 35,\n // graphicYOffset: -35,\n // fontSize: \"12px\",\n // labelYOffset: -10,\n // label: \"${SampleIdAndDate}\"\n // },\n // filter: new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.EQUAL_TO,\n // property: \"FeatureType\",\n // value: MapConfig.FEATURE.FERTILITY_SAMPLE\n // })\n // }),\n // new OpenLayers.Rule({\n // maxScaleDenominator: MapConfig.FEATURE_LAYER_MAX_SCALE_THRESHOLD,\n // minScaleDenominator: (MapConfig.FEATURE_LAYER_MAX_SCALE_THRESHOLD / 3),\n // symbolizer: {\n // externalGraphic: 'src/img/grain.png',\n // graphicWidth: 12,\n // graphicHeight: 31,\n // graphicYOffset: -25,\n // fontSize: \"10px\",\n // labelYOffset: -10,\n // label: \"${SampleIdAndDate}\"\n // },\n // filter: new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.EQUAL_TO,\n // property: \"FeatureType\",\n // value: MapConfig.FEATURE.FERTILITY_SAMPLE\n // })\n // }),\n\n // new OpenLayers.Rule({\n // maxScaleDenominator: (MapConfig.FEATURE_LAYER_MAX_SCALE_THRESHOLD / 3),\n // minScaleDenominator: 1,\n // symbolizer: {\n // label: \"${Note}\",\n // labelYOffset: -20,\n // strokeColor: \"black\",\n // fillColor: \"yellow\",\n // graphicName: 'note',\n // pointRadius: 9,\n\n // fontColor: \"#fff\",\n // fontOpacity: 1,\n // labelOutlineColor: \"black\",\n // labelOutlineWidth: 2\n\n\n // },\n // filter: new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.EQUAL_TO,\n // property: \"FeatureType\",\n // value: MapConfig.FEATURE.NOTE\n // })\n // }),\n // new OpenLayers.Rule({\n // maxScaleDenominator: (MapConfig.FEATURE_LAYER_MAX_SCALE_THRESHOLD / 2),\n // minScaleDenominator: (MapConfig.FEATURE_LAYER_MAX_SCALE_THRESHOLD / 3),\n // symbolizer: {\n // label: \"${Note}\",\n // labelYOffset: -16,\n // strokeColor: \"black\",\n // fillColor: \"yellow\",\n // graphicName: 'note',\n // pointRadius: 7,\n\n\n // fontColor: \"#fff\",\n // fontOpacity: 1,\n // labelOutlineColor: \"black\",\n // labelOutlineWidth: 2\n\n // },\n // filter: new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.EQUAL_TO,\n // property: \"FeatureType\",\n // value: MapConfig.FEATURE.NOTE\n // })\n // }),\n // new OpenLayers.Rule({\n // maxScaleDenominator: MapConfig.FEATURE_LAYER_MAX_SCALE_THRESHOLD,\n // minScaleDenominator: (MapConfig.FEATURE_LAYER_MAX_SCALE_THRESHOLD / 2),\n // symbolizer: {\n // label: \"\",\n // labelYOffset: -20,\n // strokeColor: \"black\",\n // fillColor: \"yellow\",\n // graphicName: 'note',\n // pointRadius: 7,\n // labelOutlineWidth: 0\n\n // },\n // filter: new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.EQUAL_TO,\n // property: \"FeatureType\",\n // value: MapConfig.FEATURE.NOTE\n // })\n // }),\n\n // new OpenLayers.Rule({\n // maxScaleDenominator: (MapConfig.FEATURE_LAYER_MAX_SCALE_THRESHOLD / 3),\n // minScaleDenominator: 1,\n // symbolizer: {\n // externalGraphic: 'src/img/tree.png',\n // graphicWidth: 26,\n // graphicHeight: 29,\n // graphicYOffset: -29\n // },\n // filter: new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.EQUAL_TO,\n // property: \"FeatureType\",\n // value: MapConfig.FEATURE.TREE\n // })\n // }),\n // new OpenLayers.Rule({\n // maxScaleDenominator: MapConfig.FEATURE_LAYER_MAX_SCALE_THRESHOLD,\n // minScaleDenominator: (MapConfig.FEATURE_LAYER_MAX_SCALE_THRESHOLD / 3),\n // symbolizer: {\n // externalGraphic: 'src/img/tree.png',\n // graphicWidth: 13,\n // graphicHeight: 15,\n // graphicYOffset: -15\n // },\n // filter: new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.EQUAL_TO,\n // property: \"FeatureType\",\n // value: MapConfig.FEATURE.TREE\n // })\n // }),\n\n // new OpenLayers.Rule({\n // maxScaleDenominator: (MapConfig.FEATURE_LAYER_MAX_SCALE_THRESHOLD / 3),\n // minScaleDenominator: 1,\n // symbolizer: {\n // strokeColor: \"black\",\n // fillColor: \"grey\",\n // graphicName: 'rock',\n // pointRadius: 8\n // },\n // filter: new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.EQUAL_TO,\n // property: \"FeatureType\",\n // value: MapConfig.FEATURE.ROCK\n // })\n // }),\n // new OpenLayers.Rule({\n // maxScaleDenominator: MapConfig.FEATURE_LAYER_MAX_SCALE_THRESHOLD,\n // minScaleDenominator: (MapConfig.FEATURE_LAYER_MAX_SCALE_THRESHOLD / 3),\n // symbolizer: {\n // strokeColor: \"black\",\n // fillColor: \"grey\",\n // graphicName: 'rock',\n // pointRadius: 5\n // },\n // filter: new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.EQUAL_TO,\n // property: \"FeatureType\",\n // value: MapConfig.FEATURE.ROCK\n // })\n // }),\n\n // new OpenLayers.Rule({\n // maxScaleDenominator: (MapConfig.FEATURE_LAYER_MAX_SCALE_THRESHOLD / 3),\n // minScaleDenominator: 1,\n // symbolizer: {\n // externalGraphic: 'src/img/flag.png',\n // graphicWidth: 16,\n // graphicHeight: 29,\n // graphicYOffset: -29,\n // graphicXOffset: 0\n // },\n // filter: new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.EQUAL_TO,\n // property: \"FeatureType\",\n // value: MapConfig.FEATURE.FLAG\n // })\n // }),\n // new OpenLayers.Rule({\n // maxScaleDenominator: MapConfig.FEATURE_LAYER_MAX_SCALE_THRESHOLD,\n // minScaleDenominator: (MapConfig.FEATURE_LAYER_MAX_SCALE_THRESHOLD / 3),\n // symbolizer: {\n // externalGraphic: 'src/img/flag.png',\n // graphicWidth: 11,\n // graphicHeight: 22,\n // graphicYOffset: -22,\n // graphicXOffset: 0\n // },\n // filter: new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.EQUAL_TO,\n // property: \"FeatureType\",\n // value: MapConfig.FEATURE.FLAG\n // })\n // }),\n\n // new OpenLayers.Rule({\n // symbolizer: {\n // label: \"\",\n // fillOpacity: 0,\n // strokeOpacity: 0\n // },\n // elseFilter: true\n // })\n // ]\n // }\n\n\n // ),\n // select: new OpenLayers.Style({\n // }),\n // hide: new OpenLayers.Style({\n // label: \"\",\n // fillOpacity: 0,\n // strokeOpacity: 0\n // })\n // })\n // },\n\n // sketchLayer: new OpenLayers.StyleMap({\n\n // 'default': new OpenLayers.Style({\n // pointRadius: 6,\n // fillColor: \"#FF1414\",\n // fillOpacity: 1,\n // strokeWidth: 45,\n // strokeOpacity: 0.25,\n // strokeColor: \"white\",\n // graphicName: 'circle',\n // cursor: \"pointer\"\n // }),\n\n // 'temporary': new OpenLayers.Style(null, {\n // rules: [\n // new OpenLayers.Rule({\n // symbolizer: {\n // 'Point': {\n // pointRadius: 6,\n // fillColor: \"#FF1414\",\n // fillOpacity: 1,\n // strokeWidth: 45,\n // strokeOpacity: 0.25,\n // strokeColor: \"white\",\n // graphicName: 'circle',\n // cursor: \"pointer\"\n // }\n // }\n // })\n // ]\n // })\n // })\n\n //},\n\n /** OpenLayers Filter Definitions\n *\n * @type {{filterByFarmIDAndYear: Function}}\n */\n //Filter: {\n\n // filterByFarmIDAndYear: function (farmID, year) {\n // return new OpenLayers.Filter.Logical({\n // type: OpenLayers.Filter.Logical.AND,\n // filters: [\n // new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.EQUAL_TO,\n // property: \"FarmID\",\n // value: farmID\n // }),\n // new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.EQUAL_TO,\n // property: \"FarmYear\",\n // value: year\n // })\n // ]\n // })\n // },\n\n // filterByFarmAndFeatureTypeAndProperty: function (farmID, year, featureTypes, featureFilter) {\n // var typeFilters = [];\n // var propertyFilters = [];\n // for (var i = 0; i < featureTypes.length; i++) {\n // typeFilters.push(\n // new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.EQUAL_TO,\n // property: \"FeatureType\",\n // value: featureTypes[i]\n // })\n // );\n // }\n // for (var i = 0; i < featureFilter.values.length; i++) {\n // propertyFilters.push(\n // new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.EQUAL_TO,\n // property: featureFilter.property,\n // value: featureFilter.values[i]\n // })\n // );\n // }\n // return new OpenLayers.Filter.Logical({\n // type: OpenLayers.Filter.Logical.AND,\n // filters: [\n // new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.EQUAL_TO,\n // property: \"FarmID\",\n // value: farmID\n // }),\n // new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.EQUAL_TO,\n // property: \"FarmYear\",\n // value: year\n // }),\n // new OpenLayers.Filter.Logical({\n // type: OpenLayers.Filter.Logical.OR,\n // filters: propertyFilters\n // }),\n // new OpenLayers.Filter.Logical({\n // type: OpenLayers.Filter.Logical.OR,\n // filters: typeFilters\n // })\n // ]\n // })\n // },\n\n // filterByFarmAndFeatureType: function (farmID, year, featureTypes) {\n // var filters = [];\n // for (var i = 0; i < featureTypes.length; i++) {\n // filters.push(\n // new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.EQUAL_TO,\n // property: \"FeatureType\",\n // value: featureTypes[i]\n // })\n // );\n // }\n // return new OpenLayers.Filter.Logical({\n // type: OpenLayers.Filter.Logical.AND,\n // filters: [\n // new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.EQUAL_TO,\n // property: \"FarmID\",\n // value: farmID\n // }),\n // new OpenLayers.Filter.Comparison({\n // type: OpenLayers.Filter.Comparison.EQUAL_TO,\n // property: \"FarmYear\",\n // value: year\n // }),\n // new OpenLayers.Filter.Logical({\n // type: OpenLayers.Filter.Logical.OR,\n // filters: filters\n // })\n // ]\n // })\n // }\n //},\n\n /** OpenLayers Protocol definitions\n *\n * @type {{basePlotProtocol: OpenLayers.Protocol.WFS, plotProtocol: OpenLayers.Protocol.WFS}}\n */\n //Protocol: {\n\n // basePlotProtocol: function (params, callback) {\n // return new OpenLayers.Protocol.HTTP({\n // url: MapConfig.GEO_API + \"/baseplots\",\n // params: params,\n // callback: function (data) {\n // callback(data);\n // },\n // format: new GeoJSON()\n // });\n // },\n // plotProtocol: function (params, callback) {\n // return new OpenLayers.Protocol.HTTP({\n // url: MapConfig.GEO_API + \"/agrplots\",\n // params: params,\n // callback: function (data) {\n // callback(data);\n // },\n // format: new GeoJSON()\n // });\n // },\n // featuresProtocol: function (params, callback) {\n // return new OpenLayers.Protocol.HTTP({\n // url: MapConfig.GEO_API + \"/features\",\n // params: params,\n // callback: function (data) {\n // callback(data);\n // },\n // format: new GeoJSON()\n // });\n // }\n //},\n\n /** WMS -layer definitions */\n WMSLayer: {\n Sentinel: {\n name: \"NDVI\",\n url: MapConfig.WMS_API,\n wms_version: MapConfig.WMS_VERSION,\n layer_name: \"mtech:sentinel\",\n attribution: MapConfig.MTECH_COPYRIGHT\n },\n Korkeusmalli: {\n name: \"Korkeusmalli\",\n url: MapConfig.WMS_API,\n wms_version: MapConfig.MML_WMS_VERSION,\n layer_name: \"mloy:korkeusmalli\",\n attribution: MapConfig.MML_COPYRIGHT\n }\n },\n\n WMTSLayer: {\n Peruskartta: {\n name: \"Peruskartta\",\n url: MapConfig.WMTS_API + '/nls/taustakartta/{TileMatrixSet}/{TileMatrix}/{TileCol}/{TileRow}.png',\n layer_name: \"mml:taustakartta\",\n attribution: MapConfig.MML_COPYRIGHT\n },\n Ortokuva: {\n name: \"Ilmakuva\",\n url: MapConfig.WMTS_API + '/nls/ortokuva/{TileMatrixSet}/{TileMatrix}/{TileCol}/{TileRow}.png',\n layer_name: \"mml:ortokuva\",\n attribution: MapConfig.MML_COPYRIGHT\n },\n Taustakartta: {\n name: \"Taustakartta\",\n url: MapConfig.WMTS_API + '/nls/taustakartta/{TileMatrixSet}/{TileMatrix}/{TileCol}/{TileRow}.png',\n layer_name: \"mml:taustakartta\",\n attribution: MapConfig.MML_COPYRIGHT\n }\n }\n}","import { get as getProjection } from 'ol/proj';\nimport { getTopLeft, getWidth } from 'ol/extent';\nimport { Tile as TileLayer } from 'ol/layer';\nimport WMTS from 'ol/source/WMTS';\nimport WMTSTileGrid from 'ol/tilegrid/WMTS';\n\nimport { MapModels } from './mapModels';\nimport { MapConfig } from './mapConfig';\n\n/** WMS-layers\n * # Add WMS -layers\n * @param layers\n * @param config\n */\nexport const addMapBaseLayer = (layer = \"ilmakuva\") => {\n let selectedWMTS;\n const tileSizePixels = 256;\n let projection = getProjection('EPSG:3857');\n let extent = projection.getExtent();\n let tileSizeMtrs = getWidth(extent) / tileSizePixels;\n let matrixIds = [];\n let resolutions = [];\n for (let i = 0; i <= 18; i++) {\n matrixIds[i] = i;\n resolutions[i] = tileSizeMtrs / Math.pow(2, i);\n }\n\n switch (layer) {\n case \"peruskartta\":\n selectedWMTS = new WMTS({\n name: MapModels.WMTSLayer.Peruskartta.name,\n url: MapModels.WMTSLayer.Peruskartta.url,\n layer: MapModels.WMTSLayer.Peruskartta.layer_name,\n matrixSet: MapConfig.MATRIXSET,\n format: \"image/png\",\n style: \"default\",\n opacity: 1,\n tileGrid: new WMTSTileGrid({\n origin: getTopLeft(extent),\n resolutions: resolutions,\n matrixIds: matrixIds\n }),\n requestEncoding: 'REST'\n });\n break;\n case \"ilmakuva\":\n selectedWMTS = new WMTS({\n name: MapModels.WMTSLayer.Ortokuva.name,\n url: MapModels.WMTSLayer.Ortokuva.url,\n layer: MapModels.WMTSLayer.Ortokuva.layer_name,\n matrixSet: MapConfig.MATRIXSET,\n format: \"image/png\",\n style: \"default\",\n //opacity: 1,\n tileGrid: new WMTSTileGrid({\n origin: getTopLeft(extent),\n resolutions: resolutions,\n matrixIds: matrixIds\n }),\n requestEncoding: 'REST'\n\n });\n break;\n case \"taustakartta\":\n selectedWMTS = new WMTS({\n name: MapModels.WMTSLayer.Taustakartta.name,\n url: MapModels.WMTSLayer.Taustakartta.url,\n layer: MapModels.WMTSLayer.Taustakartta.layer_name,\n matrixSet: MapConfig.MATRIXSET,\n format: \"image/png\",\n style: \"default\",\n opacity: 1,\n tileGrid: new WMTSTileGrid({\n origin: getTopLeft(extent),\n resolutions: resolutions,\n matrixIds: matrixIds\n }),\n requestEncoding: 'REST'\n });\n break;\n default:\n selectedWMTS = new WMTS({\n name: MapModels.WMTSLayer.Peruskartta.name,\n url: MapModels.WMTSLayer.Peruskartta.url,\n layer: MapModels.WMTSLayer.Peruskartta.layer_name,\n matrixSet: MapConfig.MATRIXSET,\n format: \"image/png\",\n style: \"default\",\n opacity: 1,\n tileGrid: new WMTSTileGrid({\n origin: getTopLeft(extent),\n resolutions: resolutions,\n matrixIds: matrixIds\n }),\n requestEncoding: 'REST'\n });\n break;\n }\n\n return new TileLayer({\n source: selectedWMTS,\n zIndex: 1,\n visible: true\n });\n};\n","import MultiPoint from 'ol/geom/MultiPoint';\nimport { Fill, Circle, RegularShape, Stroke, Style, Text } from 'ol/style.js';\nimport { MapConfig } from './mapConfig';\n\nlet t = null;\nexport let setLang = (language) => {\n t = language;\n}\n\nexport let retrieveMapFeatureStyle = function () {\n return new Style({\n image: new Circle({\n radius: 7,\n fill: new Fill({\n color: style_config.features.map_features.select.fillColor\n }),\n stroke: new Stroke({\n color: style_config.features.map_features.select.strokeColor,\n width: 2\n }),\n })\n })\n}\n\n\n\nvar style_config = {\n\n zones: {\n Fertilizer: { fillColor: 'rgba(245, 245, 61, 0)', strokeColor: 'rgba(0, 0, 0, 0.7)' },\n Seed: { fillColor: 'rgba(150, 146, 20, 0)', strokeColor: 'rgba(0, 0, 0, 0.7)' },\n Pesticide: { fillColor: 'rgba(245, 245, 61, 0)', strokeColor: 'rgba(0, 0, 0, 0.7)' },\n Tillage: { fillColor: 'rgba(245, 245, 61, 0)', strokeColor: 'rgba(0, 0, 0, 0.7)' }\n },\n features: {\n base: {\n hover: { fillColor: 'rgba(219, 44, 44, 0.2)', strokeColor: 'rgba(219, 44, 44, 1)', textColor: 'rgba(255, 255, 255, 1)', textLabelColor: 'rgba(50, 50, 50, 0.6)' },\n select: { fillColor: 'rgba(255, 150, 0, 0)', strokeColor: 'rgba(255, 150, 0, 1)', textColor: 'rgba(255, 255, 255, 1)', textLabelColor: 'rgba(50, 50, 50, 0.8)' }\n },\n agr_plot: {\n label: { fillColor: 'rgba(255, 255, 255, 0)', strokeColor: 'rgba(0, 0, 0, 0)', textColor: 'rgba(255, 255, 255, 1)', textLabelColor: 'rgba(57, 178, 13, 0.8)' },\n default: { fillColor: 'rgba(57, 178, 13, 0)', strokeColor: 'rgba(57, 178, 13, 1)', textColor: 'rgba(255, 255, 255, 1)', textLabelColor: 'rgba(57, 178, 13, 0.8)' },\n hover: { fillColor: 'rgba(57, 178, 13, 0)', strokeColor: 'rgba(57, 178, 13, 1)', textColor: 'rgba(255, 255, 255, 1)', textLabelColor: 'rgba(57, 178, 13, 1)' },\n select: { fillColor: 'rgba(255, 150, 0, 0.5)', strokeColor: 'rgba(255, 150, 0, 1)', textColor: 'rgba(255, 255, 255, 1)', textLabelColor: 'rgba(255, 150, 0, 0.8)' },\n modify: { fillColor: 'rgba(255, 255, 255, 1)', strokeColor: 'rgba(0, 0, 0, 1)', textColor: 'rgba(0, 0, 0, 1)', textLabelColor: 'rgba(255, 255, 255, 1)' }\n },\n base_plot: {\n label: { fillColor: 'rgba(255, 255, 255, 0)', strokeColor: 'rgba(0, 0, 0, 0)', textColor: 'rgba(255, 255, 255, 1)', textLabelColor: 'rgba(50, 50, 50, 0.6)' },\n default: { fillColor: 'rgba(255, 255, 255, 0)', strokeColor: 'rgba(219, 44, 44, 1)', textColor: 'rgba(255, 255, 255, 1)', textLabelColor: 'rgba(50, 50, 50, 0.6)' },\n hover: { fillColor: 'rgba(255, 255, 255, 0)', strokeColor: 'rgba(219, 44, 44, 0)', textColor: 'rgba(255, 255, 255, 1)', textLabelColor: 'rgba(50, 50, 50, 0.6)' },\n select: { fillColor: 'rgba(255, 255, 255, 0)', strokeColor: 'rgba(0, 0, 0, 1)', textColor: 'rgba(255, 255, 255, 1)', textLabelColor: 'rgba(50, 50, 50, 0.6)' },\n modify: { fillColor: 'rgba(255, 255, 255, 1)', strokeColor: 'rgba(0, 0, 0, 1)', textColor: 'rgba(0, 0, 0, 1)', textLabelColor: 'rgba(255, 255, 255, 1)' }\n },\n ffa_plot: {\n label: { fillColor: 'rgba(255, 255, 255, 0)', strokeColor: 'rgba(0, 0, 0, 0)', textColor: 'rgba(255, 255, 255, 1)', textLabelColor: 'rgba(50, 50, 50, 0.6)' },\n default: { fillColor: 'rgba(255, 255, 255, 0)', strokeColor: 'rgba(219, 44, 244, 1)', textColor: 'rgba(255, 255, 255, 1)', textLabelColor: 'rgba(50, 50, 50, 0.6)' },\n hover: { fillColor: 'rgba(255, 255, 255, 0)', strokeColor: 'rgba(219, 44, 244, 0)', textColor: 'rgba(255, 255, 255, 1)', textLabelColor: 'rgba(50, 50, 50, 0.6)' },\n select: { fillColor: 'rgba(255, 255, 255, 1)', strokeColor: 'rgba(220, 220, 220, 1)', textColor: 'rgba(255, 255, 255, 1)', textLabelColor: 'rgba(50, 50, 50, 0.6)' },\n modify: { fillColor: 'rgba(255, 255, 255, 1)', strokeColor: 'rgba(0, 0, 0, 1)', textColor: 'rgba(0, 0, 0, 1)', textLabelColor: 'rgba(255, 255, 255, 1)' }\n },\n mavi_plot: {\n default: { fillColor: 'rgba(170, 47, 201, 0)', strokeColor: 'rgba(170, 47, 201, 1)', textColor: 'rgba(255, 255, 255, 1)', textLabelColor: 'rgba(50, 50, 50, 0.6)' },\n hover: { fillColor: 'rgba(170, 47, 201, 0.4)', strokeColor: 'rgba(170, 47, 201, 1)', textColor: 'rgba(255, 255, 255, 1)', textLabelColor: 'rgba(170, 47, 201, 0.8)' },\n select: { fillColor: 'rgba(0, 77, 153, 0)', strokeColor: 'rgba(20, 50, 250, 1)', textColor: 'rgba(61, 31, 81, 1)', textLabelColor: 'rgba(255, 255, 255, 1)' },\n modify: { fillColor: 'rgba(28, 120, 55, 0)', strokeColor: 'rgba(0, 100, 0, 0.9)', textColor: 'rgba(0, 0, 0, 1)', textLabelColor: 'rgba(255, 255, 255, 1)' }\n },\n cultivated_land: {\n default: { fillColor: 'rgba(255, 250, 0, 0)', strokeColor: 'rgba(255, 250, 0, 1)', textColor: 'rgba(255, 255, 255, 1)', textLabelColor: 'rgba(50, 50, 50, 0.6)' },\n select: { fillColor: 'rgba(57, 178, 13, 0)', strokeColor: 'rgba(255, 150, 0, 1)', textColor: 'rgba(61, 31, 81, 1)', textLabelColor: 'rgba(255, 255, 255, 1)' }\n },\n map_features: {\n label: { fillColor: 'rgba(255, 255, 255, 0)', strokeColor: 'rgba(0, 0, 0, 0)', textColor: 'rgba(255, 255, 255, 1)', textLabelColor: 'rgba(57, 178, 13, 0.8)' },\n default: { fillColor: 'rgba(89, 89, 89, 1)', strokeColor: 'rgba(89, 89, 89, 1)', textColor: 'rgba(255, 255, 255, 1)', textLabelColor: 'rgba(50, 50, 50, 0.6)' },\n hover: { fillColor: 'rgba(170, 47, 201, 0.4)', strokeColor: 'rgba(170, 47, 201, 1)', textColor: 'rgba(255, 255, 255, 1)', textLabelColor: 'rgba(170, 47, 201, 0.8)' },\n select: { fillColor: 'rgba(255, 255, 255, 1)', strokeColor: 'rgba(69, 197, 0, 1)', textColor: 'rgba(255, 255, 255, 1)', textLabelColor: 'rgba(255, 255, 255, 1)' },\n yellowFill: { fillColor: 'yellow' },\n violetFill: { fillColor: 'rgba(170, 47, 201, 1)' },\n greenFill: { fillColor: 'green' },\n redFill: { fillColor: 'red' },\n blueFill: { fillColor: 'rgba(255, 165, 0, 1)' }\n }\n },\n grid: {\n ndvi: {\n 0.00: { fillColor: 'rgba(205,125,70, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 0.05: { fillColor: 'rgba(215,151,56, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 0.10: { fillColor: 'rgba(225,177,42, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 0.15: { fillColor: 'rgba(235,203,28, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 0.20: { fillColor: 'rgba(245,229,14, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 0.25: { fillColor: 'rgba(255,255,0, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 0.30: { fillColor: 'rgba(238,242,1, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 0.35: { fillColor: 'rgba(221,229,3, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 0.40: { fillColor: 'rgba(205,217,5, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 0.45: { fillColor: 'rgba(188,204,6, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 0.50: { fillColor: 'rgba(172,192,8, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 0.55: { fillColor: 'rgba(155,179,10, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 0.60: { fillColor: 'rgba(139,167,12, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 0.65: { fillColor: 'rgba(122,154,13, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 0.70: { fillColor: 'rgba(106,142,15, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 0.75: { fillColor: 'rgba(89,129,17, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 0.80: { fillColor: 'rgba(73,117,19, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 0.85: { fillColor: 'rgba(62,103,16, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 0.90: { fillColor: 'rgba(52,89,14, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 0.95: { fillColor: 'rgba(42,75,12, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 1.00: { fillColor: 'rgba(32,61,10, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' }\n },\n fertilization: {\n 0: { fillColor: 'rgba(252, 251, 253, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 5: { fillColor: 'rgba(247, 246, 250, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 10: { fillColor: 'rgba(242, 241, 247, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 15: { fillColor: 'rgba(236, 234, 244, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 20: { fillColor: 'rgba(228, 227, 240, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 25: { fillColor: 'rgba(220, 220, 236, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 30: { fillColor: 'rgba(209, 209, 231, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 35: { fillColor: 'rgba(198, 198, 225, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 40: { fillColor: 'rgba(186, 187, 219, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 45: { fillColor: 'rgba(174, 173, 211, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 50: { fillColor: 'rgba(163, 160, 203, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 55: { fillColor: 'rgba(151, 147, 197, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 60: { fillColor: 'rgba(140, 136, 192, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 65: { fillColor: 'rgba(128, 125, 186, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 70: { fillColor: 'rgba(117, 103, 175, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 75: { fillColor: 'rgba(106, 81, 163, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 80: { fillColor: 'rgba(99, 67, 156, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 85: { fillColor: 'rgba(91, 53, 150, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 90: { fillColor: 'rgba(84, 39, 143, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 95: { fillColor: 'rgba(73, 19, 134, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 100: { fillColor: 'rgba(63, 0, 125, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' }\n },\n tillage: {\n 0: { fillColor: 'rgba(235, 225, 0, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 75: { fillColor: 'rgba(210, 175, 5, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 150: { fillColor: 'rgba(180, 140, 0, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 225: { fillColor: 'rgba(190, 130, 5, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 300: { fillColor: 'rgba(175, 105, 0, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' }\n },\n seeding: {\n 0: { fillColor: 'rgba(205, 175, 120, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 25: { fillColor: 'rgba(196, 150, 71, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 50: { fillColor: 'rgba(169, 129, 61, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 75: { fillColor: 'rgba(142, 109, 51, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 100: { fillColor: 'rgba(115, 88, 42, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' }\n },\n spraying: {\n 0: { fillColor: 'rgba(230, 245, 250, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 25: { fillColor: 'rgba(165, 205, 230, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 50: { fillColor: 'rgba(90, 160, 210, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 75: { fillColor: 'rgba(12, 110, 205, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' },\n 100: { fillColor: 'rgba(10, 70, 160, 0.9)', strokeColor: 'rgba(0, 0, 0, 1)' }\n },\n default: {\n fillColor: 'rgba(255, 255, 255, 0)', strokeColor: 'rgba(0, 0, 0, 1)'\n }\n\n },\n};\n\nexport const _styles = {\n\n isobus: {\n zones: function (type, unit) {\n\n this.default = function (feature, resolution) {\n\n if (typeof type !== \"undefined\" && type !== feature.get('Type')) {\n return false;\n }\n\n var properties = feature.getProperties();\n var PDV = properties.PDV;\n var zoneId = feature.get('ZoneId');\n\n var styleParams = style_config.zones[feature.get('Type')];\n\n var styles = [\n new Style({\n fill: new Fill({\n color: styleParams.fillColor\n }),\n stroke: new Stroke({\n color: styleParams.strokeColor,\n width: 2\n }),\n zIndex: 100\n }),\n new Style({\n /*\n text: new Text({\n font: '10px arial',\n scale: 1.2,\n text: '(' + id + ') ' + PDV + ' kg/ha',\n fill: new Fill({\n color: 'rgba(0, 0, 0, 1)',\n }) \n }),\n zIndex: 100\n */\n\n text: new Text({\n font: '10px arial',\n scale: 1.2,\n text: '(' + zoneId + ') ' + PDV + ' ' + unit,\n fill: new Fill({\n color: 'rgba(0, 0, 0, 0.9)',\n }),\n placement: 'point',\n textAlign: 'center',\n backgroundFill: new Fill({\n color: 'rgba(245, 245, 61, 0.7)'\n }),\n\n padding: [3, 5, 0, 5]\n }),\n zIndex: 100\n\n })\n ];\n\n return styles;\n };\n\n return this;\n\n },\n\n grid: {\n default: function (feature, resolution) {\n var styleParams = style_config.grid.default;\n return [\n new Style({\n fill: new Fill({\n color: styleParams.fillColor\n }),\n stroke: new Stroke({\n color: styleParams.strokeColor,\n width: 0.1\n }),\n zIndex: 100\n })\n ];\n },\n\n sentinel: function (feature, resolution) {\n var properties = feature.getProperties();\n var ndvi = properties.NDVI;\n\n if (parseInt(ndvi) === -9999) {\n return false;\n }\n\n var style_ndvi = (ndvi > 0) ? Math.round((ndvi / 0.05), 2) * 0.05 : 0;\n var styleParams = style_config.grid.ndvi[parseFloat(Number(style_ndvi).toFixed(2))];\n return [\n new Style({\n fill: new Fill({\n color: styleParams.fillColor\n }),\n stroke: new Stroke({\n color: styleParams.strokeColor,\n width: 0.1\n }),\n zIndex: 100\n })\n /*new Style({\n text: new Text({\n font: '10px arial',\n scale: 1,\n text: '' + ndvi.toFixed(2),\n fill: new Fill({\n color: 'rgba(0, 0, 0, 1)'\n })\n }),\n zIndex: 100\n })*/\n ];\n },\n\n // TESTED\n tillage: function (min_value, max_value) {\n\n this.colormap = style_config.grid.tillage;\n\n this.default = function (feature, resolution) {\n var properties = feature.getProperties();\n var amount = parseFloat(properties.values[0]).toFixed(0);\n //if (properties.Values.Tillage.Overlay !== null) {\n // amount = parseFloat(properties.Values.Tillage.Overlay).toFixed(0);\n //}\n var value = (amount > 0) ? parseInt(((Math.round(amount / 75) * 75)).toFixed(0)) : 0;\n if (parseInt(value) < 0) {\n value = 0;\n } else if (value > 300) {\n value = 300;\n }\n\n var styleParams = style_config.grid.tillage[value];\n\n return [\n new Style({\n fill: new Fill({\n color: styleParams.fillColor\n }),\n stroke: new Stroke({\n color: styleParams.strokeColor,\n width: 0.1\n }),\n zIndex: 100\n }),\n new Style({\n text: new Text({\n font: '8px arial',\n scale: 1,\n text: '' + amount,\n fill: new Fill({\n color: 'rgba(0, 0, 0, 1)'\n })\n }),\n zIndex: 100\n })\n ];\n }\n\n return this;\n\n },\n\n // TESTED\n seeding: function (min_value, max_value) {\n\n this.colormap = style_config.grid.seeding;\n\n this.default = function (feature, resolution) {\n var properties = feature.getProperties();\n var amount = parseFloat(properties.values[0]).toFixed(0);\n //if (properties.Values.Seed.Overlay !== null) {\n // amount = parseFloat(properties.Values.Seed.Overlay).toFixed(0);\n //}\n var value = (amount > 0) ? parseInt(((Math.round(amount / 25) * 25)).toFixed(0)) : 0;\n if (parseInt(value) < 0) {\n value = 0;\n } else if (value > 100) {\n value = 100;\n }\n\n var styleParams = style_config.grid.seeding[value];\n\n return [\n new Style({\n fill: new Fill({\n color: styleParams.fillColor\n }),\n stroke: new Stroke({\n color: styleParams.strokeColor,\n width: 0.1\n }),\n zIndex: 100\n }),\n new Style({\n text: new Text({\n font: '8px arial',\n scale: 1,\n text: '' + amount,\n fill: new Fill({\n color: 'rgba(0, 0, 0, 1)'\n })\n }),\n zIndex: 100\n })\n ];\n }\n\n return this;\n\n },\n\n // TESTED\n fertilizing: function (min_value, max_value) {\n\n this.colormap = style_config.grid.fertilization;\n\n this.default = function (feature, resolution) {\n var properties = feature.getProperties();\n var amount = parseFloat(properties.values[0]).toFixed(0);\n //if (properties.Values.Fertilizer.Overlay !== null) {\n // amount = parseFloat(properties.Values.Fertilizer.Overlay).toFixed(0);\n //}\n\n var scale = max_value - min_value;\n var percentage = (amount > 0) ? ((Math.round((amount / scale) / 0.05) * 0.05) * 100).toFixed(0) : 0;\n\n if (parseInt(percentage) < 0) {\n percentage = 0;\n } else if (percentage > 100) {\n percentage = 100;\n }\n\n var styleParams = style_config.grid.fertilization[percentage];\n\n return [\n new Style({\n fill: new Fill({\n color: styleParams.fillColor\n }),\n stroke: new Stroke({\n color: styleParams.strokeColor,\n width: 0.1\n }),\n zIndex: 100\n }),\n new Style({\n text: new Text({\n font: '8px arial',\n scale: 1,\n text: '' + amount,\n fill: new Fill({\n color: 'rgba(0, 0, 0, 1)'\n })\n }),\n zIndex: 100\n })\n ];\n }\n\n return this;\n\n },\n\n fertilizing_fixed: function () {\n\n this.colormap = style_config.grid.fertilization;\n\n this.default = function (feature, resolution) {\n var properties = feature.getProperties();\n var amount = parseFloat(properties.Values.Fertilizer.Default).toFixed(0);\n if (properties.Values.Fertilizer.Overlay !== null) {\n amount = parseFloat(properties.Values.Fertilizer.Overlay).toFixed(0);\n }\n\n var value = (amount > 0) ? parseInt(((Math.round(amount / 10) * 10)).toFixed(0)) : 0;\n if (parseInt(value) < 0) {\n value = 0;\n } else if (value > 100) {\n value = 100;\n }\n\n var styleParams = style_config.grid.fertilization[value];\n\n return [\n new Style({\n fill: new Fill({\n color: styleParams.fillColor\n }),\n stroke: new Stroke({\n color: styleParams.strokeColor,\n width: 0.1\n }),\n zIndex: 100\n }),\n new Style({\n text: new Text({\n font: '8px arial',\n scale: 1,\n text: '' + amount,\n fill: new Fill({\n color: 'rgba(0, 0, 0, 1)'\n })\n }),\n zIndex: 100\n })\n ];\n }\n\n return this;\n\n },\n\n fertilizing_range: function (min_value, max_value) {\n\n this.colormap = style_config.grid.fertilization;\n\n this.default = function (feature, resolution) {\n var properties = feature.getProperties();\n\n var amount = parseFloat(properties.Values.Fertilizer.Default).toFixed(0);\n if (properties.Values.Fertilizer.Overlay !== null) {\n amount = parseFloat(properties.Values.Fertilizer.Overlay).toFixed(0);\n }\n\n var percentage = (amount - min_value) / (max_value - min_value) * 100;\n var value = (percentage > 0) ? parseInt(((Math.round(percentage / 5) * 5)).toFixed(0)) : 0;\n\n if (parseInt(value) < 0) {\n value = 0;\n } else if (value > 100) {\n value = 100;\n }\n\n var styleParams = style_config.grid.fertilization[value];\n\n return [\n new Style({\n fill: new Fill({\n color: styleParams.fillColor\n }),\n stroke: new Stroke({\n color: styleParams.strokeColor,\n width: 0.1\n }),\n zIndex: 100\n }),\n new Style({\n text: new Text({\n font: '8px arial',\n scale: 1,\n text: '' + amount,\n fill: new Fill({\n color: 'rgba(0, 0, 0, 1)'\n })\n }),\n zIndex: 100\n })\n ];\n }\n\n return this;\n\n },\n\n // TESTED\n spraying: function (min_value, max_value) {\n\n this.colormap = style_config.grid.spraying;\n\n this.default = function (feature, resolution) {\n var properties = feature.getProperties();\n\n var amount = parseFloat(properties.values[0]).toFixed(0);\n ////if (properties.Values.Pesticide.Overlay !== null) {\n //// amount = parseFloat(properties.Values.Pesticide.Overlay).toFixed(0);\n ////}\n\n var percentage = (amount - min_value) / (max_value - min_value) * 100;\n var value = (percentage > 0) ? parseInt(((Math.round(percentage / 25) * 25)).toFixed(0)) : 0;\n\n if (parseInt(value) < 0) {\n value = 0;\n } else if (value > 100) {\n value = 100;\n }\n\n var styleParams = style_config.grid.spraying[value];\n\n return [\n new Style({\n fill: new Fill({\n color: styleParams.fillColor\n }),\n stroke: new Stroke({\n color: styleParams.strokeColor,\n width: 0.1\n }),\n zIndex: 100\n }),\n new Style({\n text: new Text({\n font: '8px arial',\n scale: 1,\n text: '' + amount,\n fill: new Fill({\n color: 'rgba(0, 0, 0, 1)'\n })\n }),\n zIndex: 100\n })\n ];\n }\n\n return this;\n },\n\n\n spraying_fixed: function () {\n\n this.colormap = style_config.grid.spraying;\n\n this.default = function (feature, resolution) {\n var properties = feature.getProperties();\n var amount = parseFloat(properties.Values.Pesticide.Default).toFixed(0);\n if (properties.Values.Pesticide.Overlay !== null) {\n amount = parseFloat(properties.Values.Pesticide.Overlay).toFixed(0);\n }\n\n var value = (amount > 0) ? parseInt(((Math.round(amount / 25) * 25)).toFixed(0)) : 0;\n if (parseInt(value) < 0) {\n value = 0;\n } else if (value > 100) {\n value = 100;\n }\n\n var styleParams = style_config.grid.spraying[value];\n\n return [\n new Style({\n fill: new Fill({\n color: styleParams.fillColor\n }),\n stroke: new Stroke({\n color: styleParams.strokeColor,\n width: 0.1\n }),\n zIndex: 100\n }),\n new Style({\n text: new Text({\n font: '8px arial',\n scale: 1,\n text: '' + amount,\n fill: new Fill({\n color: 'rgba(0, 0, 0, 1)'\n })\n }),\n zIndex: 100\n })\n ];\n }\n\n return this;\n\n }\n\n },\n\n draw: {\n default: function (feature, resolution) {\n return [\n\n\n new Style({\n image: new Circle({\n fill: new Fill({\n color: 'rgba(0, 0, 0, 0.8)',\n }),\n radius: 7\n }),\n zIndex: 100\n }),\n new Style({\n image: new Circle({\n fill: new Fill({\n color: 'rgba(245, 245, 61, 0.9)'\n }),\n radius: 6\n }),\n zIndex: 100\n }),\n\n new Style({\n image: new Circle({\n fill: new Fill({\n color: 'rgba(245, 245, 61, 0.9)',\n }),\n radius: 5\n }),\n zIndex: 200,\n geometry: function (feature) {\n var coordinates = feature.getGeometry().getCoordinates();\n return new MultiPoint(coordinates);\n }\n }),\n\n new Style({\n stroke: new Stroke({\n color: 'rgba(0, 0, 0, 0.8)',\n width: 2\n }),\n fill: new Fill({\n color: 'rgba(0, 0, 0, 0.2)'\n }),\n zIndex: 100\n })\n\n ];\n }\n }\n\n },\n\n agr_plot: {\n label: function (feature, resolution) {\n var p = feature.getProperties();\n var styles = [];\n styles.push(\n new Style({\n fill: new Fill({\n color: style_config.features.agr_plot.label.fillColor\n }),\n stroke: new Stroke({\n color: style_config.features.agr_plot.label.strokeColor,\n width: 2.5\n }),\n zIndex: 0\n })\n );\n if (resolution <= 2) {\n styles.push(\n new Style({\n text: new Text({\n font: '12px arial',\n scale: 1,\n text: p.BasePlotName,\n fill: new Fill({\n color: style_config.features.agr_plot.label.textColor\n }),\n placement: 'point',\n textAlign: 'center',\n backgroundFill: new Fill({\n color: style_config.features.agr_plot.label.textLabelColor\n }),\n offsetY: -15,\n padding: [3, 5, 0, 5],\n overflow: true\n }),\n zIndex: 1000\n })\n )\n }\n return styles;\n },\n default: function (feature, resolution) {\n var p = feature.getProperties();\n var styles = [];\n\n if (p.Source === 'ffa') {\n styles.push(\n new Style({\n fill: new Fill({\n color: style_config.features.ffa_plot.default.fillColor\n }),\n stroke: new Stroke({\n color: style_config.features.ffa_plot.default.strokeColor,\n width: 2.5\n }),\n zIndex: 0\n })\n );\n }\n else {\n styles.push(\n new Style({\n fill: new Fill({\n color: style_config.features.agr_plot.default.fillColor\n }),\n stroke: new Stroke({\n color: style_config.features.agr_plot.default.strokeColor,\n width: 2.5\n }),\n zIndex: 0\n })\n );\n }\n\n if (resolution <= 5) {\n styles.push(\n new Style({\n text: new Text({\n font: '12px arial',\n scale: 1,\n text: p.BasePlotName + ' - ' + p.PlotLetter + \" (\" + p.Area + \" ha)\",\n fill: new Fill({\n color: style_config.features.agr_plot.label.textColor\n }),\n placement: 'point',\n textAlign: 'center',\n backgroundFill: new Fill({\n color: style_config.features.agr_plot.label.textLabelColor\n }),\n offsetY: 5,\n padding: [3, 5, 0, 5],\n overflow: true\n }),\n zIndex: 1000\n }));\n if (resolution <= 3) {\n styles.push(\n new Style({\n text: new Text({\n font: 'bold 12px arial',\n scale: 1,\n text: p.PlantName || '',\n fill: new Fill({\n color: style_config.features.agr_plot.label.textColor\n }),\n placement: 'point',\n textAlign: 'center',\n offsetY: 25,\n backgroundFill: new Fill({\n color: style_config.features.agr_plot.label.textLabelColor\n }),\n padding: [3, 3, 0, 3],\n overflow: true\n }),\n zIndex: 100\n })\n )\n }\n }\n return styles;\n },\n hover: function (feature, resolution) {\n var p = feature.getProperties();\n const [start, bolded, end] = p.BasePlotId; //formatBasePlotId(RetrieveBaseplotIdManipulation(p.BasePlotId));\n var styles = [];\n styles.push(\n new Style({\n fill: new Fill({\n color: style_config.features.agr_plot.hover.fillColor\n }),\n stroke: new Stroke({\n color: style_config.features.agr_plot.hover.strokeColor,\n width: 2.5\n }),\n zIndex: 0\n })\n );\n if (resolution <= 2) {\n styles.push(\n new Style({\n text: new Text({\n font: '12px arial',\n scale: 1,\n text: start,\n fill: new Fill({\n color: style_config.features.agr_plot.hover.textColor\n }),\n placement: 'point',\n textAlign: 'center',\n backgroundFill: new Fill({\n color: style_config.features.agr_plot.default.textLabelColor\n }),\n offsetY: -15,\n offsetX: -30,\n overflow: true,\n padding: [3, 0, 0, 5]\n }),\n zIndex: 1000\n }),\n new Style({\n text: new Text({\n font: 'bold 12px arial',\n scale: 1,\n text: bolded,\n fill: new Fill({\n color: style_config.features.agr_plot.hover.textColor\n }),\n placement: 'point',\n textAlign: 'center',\n backgroundFill: new Fill({\n color: style_config.features.agr_plot.default.textLabelColor\n }),\n offsetY: -15,\n offsetX: -1.2,\n overflow: true,\n padding: [3, 0, 0, 0]\n }),\n zIndex: 1000\n }),\n new Style({\n text: new Text({\n font: '12px arial',\n scale: 1,\n text: end,\n fill: new Fill({\n color: style_config.features.agr_plot.hover.textColor\n }),\n placement: 'point',\n textAlign: 'center',\n backgroundFill: new Fill({\n color: style_config.features.agr_plot.default.textLabelColor\n }),\n offsetY: -15,\n offsetX: 24,\n overflow: true,\n padding: [3, 5, 0, 0]\n }),\n zIndex: 1000\n })\n )\n }\n return styles;\n },\n select: function (feature, resolution) {\n var p = feature.getProperties();\n var styles = [];\n styles.push(\n new Style({\n fill: new Fill({\n color: style_config.features.agr_plot.select.fillColor\n }),\n stroke: new Stroke({\n color: style_config.features.agr_plot.select.strokeColor,\n width: 2.5\n }),\n zIndex: 1\n })\n );\n\n if (resolution <= 5) {\n styles.push(\n new Style({\n text: new Text({\n font: '12px arial',\n scale: 1,\n text: p.BasePlotName + ' - ' + p.PlotLetter + \" (\" + p.Area + \" ha)\",\n fill: new Fill({\n color: style_config.features.agr_plot.label.textColor\n }),\n placement: 'point',\n textAlign: 'center',\n backgroundFill: new Fill({\n color: style_config.features.agr_plot.label.textLabelColor\n }),\n offsetY: 5,\n padding: [3, 5, 0, 5],\n overflow: true\n }),\n zIndex: 1000\n })\n );\n\n if (resolution <= 3) {\n styles.push(\n new Style({\n text: new Text({\n font: 'bold 12px arial',\n scale: 1,\n text: p.PlantName || '',\n fill: new Fill({\n color: style_config.features.agr_plot.label.textColor\n }),\n placement: 'point',\n textAlign: 'center',\n offsetY: 25,\n backgroundFill: new Fill({\n color: style_config.features.agr_plot.label.textLabelColor\n }),\n padding: [3, 3, 0, 3],\n overflow: true\n }),\n zIndex: 100\n })\n )\n }\n }\n\n return styles;\n }\n },\n\n map_features: {\n default: function (feature, resolution) {\n var styles = [];\n return styles;\n\n },\n select: function (feature, resolution) {\n var p = feature.getProperties();\n var styles = [];\n let text = '';\n\n if (p.FeatureType === MapConfig.FEATURE.OBSERVATION) { // observation star\n styles.push(\n new Style({\n image: new RegularShape({\n fill: new Fill({ color: style_config.features.map_features.redFill.fillColor }),\n stroke: new Stroke({ color: style_config.features.map_features.default.strokeColor, width: 1 }),\n points: 5,\n radius: 8,\n radius2: 4,\n angle: 0\n })\n })\n )\n\n text = p.Note ? p.Note : t('Observation');\n }\n else if (p.FeatureType === MapConfig.FEATURE.NOTE) { // note\n styles.push(\n new Style({\n image: new RegularShape({\n fill: new Fill({ color: style_config.features.map_features.yellowFill.fillColor }),\n stroke: new Stroke({ color: style_config.features.map_features.default.strokeColor, width: 1 }),\n points: 4,\n radius: 6,\n angle: Math.PI / 4\n })\n })\n );\n text = p.Note ? p.Note : t('Note');\n }\n else if (p.FeatureType === MapConfig.FEATURE.TREE) { // tree\n styles.push(\n new Style({\n image: new RegularShape({\n fill: new Fill({ color: style_config.features.map_features.greenFill.fillColor }),\n stroke: new Stroke({ color: style_config.features.map_features.default.strokeColor, width: 1 }),\n points: 3,\n radius: 7,\n angle: 0\n })\n })\n )\n text = t('Tree');\n }\n else if (p.FeatureType === MapConfig.FEATURE.ROCK ||\n p.FeatureType === MapConfig.FEATURE.FERTILITY_SERIES || MapConfig.FEATURE.FERTILITY_SAMPLE || MapConfig.FEATURE.NEW_FERTILITY_SERIES || MapConfig.FEATURE.FERTILITY_SERIES_PLANNED) {\n // 5308 rock, 5305 fertility, 5311 fertility series, 5411 new fertility series point\n styles.push(\n new Style({\n image: new Circle({\n radius: 7,\n fill: (p.FeatureType === MapConfig.FEATURE.FERTILITY_SERIES || p.FeatureType === MapConfig.FEATURE.FERTILITY_SERIES_COLLECTED) ?\n new Fill({ color: style_config.features.map_features.violetFill.fillColor }) :\n (p.FeatureType === MapConfig.FEATURE.FERTILITY_SAMPLE) ?\n new Fill({ color: style_config.features.map_features.yellowFill.fillColor }) :\n (p.FeatureType === MapConfig.FEATURE.NEW_FERTILITY_SERIES) ?\n new Fill({ color: style_config.features.map_features.yellowFill.fillColor }) :\n (p.FeatureType === MapConfig.FEATURE.FERTILITY_SERIES_PLANNED) ?\n new Fill({ color: style_config.features.map_features.blueFill.fillColor }) :\n new Fill({ color: style_config.features.map_features.default.strokeColor }),\n\n stroke: (p.FeatureType === MapConfig.FEATURE.FERTILITY_SERIES_PLANNED || p.FeatureType === MapConfig.FEATURE.FERTILITY_SERIES_COLLECTED) ?\n new Stroke({ color: style_config.features.map_features.select.strokeColor, width: 3 }) :\n new Stroke({ color: style_config.features.map_features.default.strokeColor, width: 1 }),\n })\n })\n )\n if (p.FeatureType === MapConfig.FEATURE.FERTILITY_SERIES || p.FeatureType === MapConfig.FEATURE.FERTILITY_SAMPLE ||\n p.FeatureType === MapConfig.FEATURE.NEW_FERTILITY_SERIES || p.FeatureType === MapConfig.FEATURE.FERTILITY_SERIES_PLANNED ||\n p.FeatureType === MapConfig.FEATURE.FERTILITY_SERIES_COLLECTED) {\n if (p.Note) {\n text = p.UnitType > 0 ? p.UnitType + \" / \" + p.Note : p.Note;\n }\n else\n text = t('FertilitySample');\n }\n else\n text = t('Rock');\n }\n else { // border flag\n styles.push(\n new Style({\n image: new RegularShape({\n fill: null,\n stroke: new Stroke({ color: style_config.features.map_features.default.strokeColor, width: 1 }),\n points: 4,\n radius: 10,\n radius2: 0,\n angle: Math.PI / 4\n })\n })\n )\n text = t('BorderMarkersLayer');\n }\n\n if (resolution <= 1)\n styles.push(\n new Style({\n text: new Text({\n font: 'bold 12px arial',\n scale: 1,\n text: text,\n fill: new Fill({\n color: style_config.features.map_features.label.textColor\n }),\n placement: 'point',\n textAlign: 'center',\n offsetY: 20,\n backgroundFill: new Fill({\n color: style_config.features.map_features.label.textLabelColor\n }),\n padding: [3, 3, 0, 3],\n overflow: true\n })\n })\n );\n\n return styles;\n }\n }\n\n};\n\nexport let init = function () {\n return _styles;\n}","import VectorSource from 'ol/source/Vector';\nimport VectorLayer from 'ol/layer/Vector';\nimport GeoJSON from 'ol/format/GeoJSON';\nimport { _styles } from './mapStyle';\nimport Point from 'ol/geom/Point';\n\nimport { getVectorContext } from 'ol/render';\nimport { Style, Fill } from 'ol/style';\n\n/**\n * \n * @param {any} taskType - 1 = fertilizing, 2 = seeding, 3 = spraying, 4 = tillage. If taskData.products has more than one product, fertilizing is a part of seeding-fertilizing.\n * Seeding is always in seeding-fertilizing.\n * @param {any} taskData - taskSpecificData from MapComponent\n * @param {any} isSeedingFertilizing - boolean\n * @param {any} partfield - used to crop the grid to fit the field limits\n */\nexport const addMapTaskGrid = (taskType, taskData, isSeedingFertilizing = false, partfieldLayer) => {\n\n let features = new GeoJSON().readFeatures(taskData.grid.gridGeometry, {\n dataProjection: 'EPSG:4326',\n featureProjection: 'EPSG:3857'\n });\n\n // Modify feature values. For seeding-fertilizing, the fertilizing value is the 2nd of the values array, seed value is the 1st.\n let idx = (taskType === 1 && isSeedingFertilizing ? 1 : 0);\n features.map(feat => {\n let value = feat.get('values')[idx];\n feat.set('values', [value]); // The style file uses an array\n return feat;\n });\n\n let vectorSource = new VectorSource({\n features: features\n });\n\n let vectorLayer = new VectorLayer({\n source: vectorSource,\n zIndex: 0\n });\n\n // TaskTypes: 1: fertilizing, 2: seeding-fertilizing, 3: spraying, 4: tillage\n let styleObject;\n let min; let max;\n \n if (taskData.products.length > 1 && taskType === 1) {\n //Seeding fertilizing: fertilizer\n min = taskData.products[1].minAmount;\n max = taskData.products[1].maxAmount;\n } else {\n min = taskData.products[0].minAmount;\n max = taskData.products[0].maxAmount;\n }\n\n switch (taskType) {\n case 1:\n styleObject = new _styles.isobus.grid.fertilizing(min, max);\n break;\n case 2:\n styleObject = new _styles.isobus.grid.seeding(min, max);\n break;\n case 3:\n styleObject = new _styles.isobus.grid.spraying(min, max);\n break;\n case 4:\n styleObject = new _styles.isobus.grid.tillage(min, max);\n break;\n default:\n }\n \n vectorLayer.setStyle(styleObject.default);\n\n var style = new Style({\n fill: new Fill({\n color: 'black'\n })\n });\n\n vectorLayer.on('postrender', function (e) {\n e.context.globalCompositeOperation = 'destination-in';\n var vectorContext = getVectorContext(e);\n partfieldLayer.getSource().forEachFeature(function (feature) {\n vectorContext.drawFeature(feature, style);\n });\n e.context.globalCompositeOperation = 'source-over';\n });\n\n return vectorLayer;\n};\n\nexport const checkCoordsInsideGridPolygon = (layer, coords, callback) => {\n let vectorSource = layer.getSource();\n let features = vectorSource.getFeatures();\n if (!features.length > 0) {\n console.log('No grid features');\n return;\n }\n\n let coordinate = new Point([coords.longitude, coords.latitude]).transform('EPSG:4326', 'EPSG:3857').getCoordinates();\n let gridCellFeature = features.filter(feat => feat.getGeometry().intersectsCoordinate(coordinate));\n\n if (gridCellFeature.length > 0) {\n let gridValue = gridCellFeature[0].get('values');\n if (gridValue.length > 0) {\n callback(gridValue[0]);\n } else {\n console.log('Grid cell found but values was empty.');\n }\n } else {\n console.log('No matching grid cell found');\n }\n}","import { GeoJSON } from 'ol/format';\nimport * as proj from 'ol/proj';\n\nexport const retrieveWgsCoordinates = (coor3857) => {\n let wgsCoord = proj.transform(coor3857, 'EPSG:3857', 'EPSG:4326');\n\n return {\n latitude: wgsCoord && wgsCoord.length > 1 ? returnRoundedValue(wgsCoord[1], 3) : 0,\n longitude: wgsCoord && wgsCoord.length > 0 ? returnRoundedValue(wgsCoord[0], 3) : 0\n };\n}\n\nexport const returnRoundedValue = function (dataValue, decimals) {\n decimals = decimals || 1;\n const decim = decimals === 1 ? 10 : decimals === 2 ? 100 : decimals === 3 ? 1000 : 10;\n return Math.round(dataValue * decim) / decim;\n};\n\nexport const featuresReader = (data) => {\n var readFeatures = new GeoJSON().readFeatures(data.featureCollection, {\n dataProjection: data.crs,\n featureProjection: 'EPSG:3857'//Config.CRS.WEBMERCATOR\n });\n return readFeatures;\n}","import React, { useState, useEffect, useContext, useRef } from 'react';\nimport Modal from 'react-bootstrap/Modal'\nimport { useTranslation } from 'react-i18next';\nimport { getContentWithAction, getContent } from '../../apiConnect';\nimport Button from 'react-bootstrap/Button'\nimport ButtonGroup from 'react-bootstrap/ButtonGroup'\nimport Spinner from 'react-bootstrap/Spinner';\nimport { ICONS } from '../../img/icons'\nimport Icon from '../../img/Icon'\n\nimport 'ol/ol.css';\nimport '../../css/map.css';\nimport '../../css/general.css'\n\nimport { Map as Map2, View } from 'ol';\nimport { defaults as defaultInteractions, Select } from 'ol/interaction';\nimport * as proj from 'ol/proj';\nimport Collection from 'ol/Collection';\nimport { defaults as defaultControls, Attribution, ScaleLine } from 'ol/control';\nimport { click } from 'ol/events/condition';\nimport MousePosition from 'ol/control/MousePosition';\n//import MouseWheelZoom from 'ol/interaction/MouseWheelZoom';\nimport { toStringHDMS } from 'ol/coordinate';\nimport { GeoJSON } from 'ol/format';\nimport { Group as LayerGroup, Vector as VectorLayer } from 'ol/layer';\nimport { all as strategyAll } from 'ol/loadingstrategy.js';\nimport { Vector as VectorSource } from 'ol/source';\nimport {\n getGPSfromStorage, getSelectedPlots, getSelectedLang, getSelectedPlot, getSelectedYear\n} from '../../common';\nimport AppContext from '../../AppContext';\nimport { enableGPS, disableGPS } from '../../gps.js';\nimport { addMapBaseLayer } from '../../Map/addMapBaseLayer';\nimport { checkCoordsInsideGridPolygon } from '../../Map/addMapTaskGrid';\nimport { addMapPosition, updateMapPosition } from '../../Map/addMapPosition';\nimport * as styles from '../../Map/mapStyle'\nimport { MapConfig } from '../../Map/mapConfig';\nimport { register } from 'ol/proj/proj4';\nimport proj4 from 'proj4';\n\nimport { featuresReader, retrieveWgsCoordinates, returnRoundedValue } from '../../Map/commonMapFunctions';\n\nproj4.defs(\"EPSG:3067\", \"+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs\");\nproj4.defs(\"EPSG:3857\", \"+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs\");\nregister(proj4);\n\nlet WisuMap = {}, _styles = null;\n\n\nconst MapModal = (props) => {\n const { t } = useTranslation();\n const { auth } = useContext(AppContext);\n\n let [mapFeatures, setMapFeatures] = useState([]);\n const { setGeolocation, setMapInitCoordinates } = useContext(AppContext);\n const [currentTaskAmount, setCurrentTaskAmount] = useState(-1);\n const [activatedGps, setActivatedGps] = useState(false);\n const [mapIsRendered, setMapIsRendered] = useState(false);\n const [pageIsLoading, setPageIsLoading] = useState(true);\n const [selectedPoint, setSelectedPoint] = useState(null);\n const [allowChanges, setAllowChanges] = useState(false);\n\n //layer selects\n const [basicLayer, setBasic] = useState(null)\n const [satelliteLayer, setSatellite] = useState(null)\n //const [selectedLayer, setSelectedLayer] = useState(0)\n\n const currentPosition = useRef({ latitude: null, longitude: null, timestamp: null });\n const gpsWatch = useRef(null);\n const running = useRef(false);\n\n const [enableCollectButton, setEnableCollectButton] = useState(false);\n const [enableDeleteButton, setEnableDeleteButton] = useState(false);\n const [collectedType, setCollectedType] = useState(false);\n\n let RasterBaseGroup; \n\n const taskLayerName = 'taskLayer';\n //const logInterval = 2000; // Milliseconds\n const gpsAccuracyUpperLimit = 20; // Meters\n const gpsAccuracyLowerLimit = 0;\n const gpsLocationFilterSpeed = 6; // m/s\n const gpsOptions = {\n enableHighAccuracy: true,\n timeout: 5000,\n maximumAge: 0\n }\n\n const sSelectedPlot = getSelectedPlot();\n\n useEffect(() => {\n _styles = styles.init();\n styles.setLang(t);\n setPageIsLoading(true);\n\n if (!mapIsRendered && props.show) {\n Promise.all([\n getContent(auth.getAccessToken(), 'farmPlot', { lang: getSelectedLang() }),\n getContentWithAction(auth.getAccessToken(), 'session', 'storeAllowed', {}),\n ]).then(([data, session]) => {\n data.forEach(d => {\n d.plantName = d.plantName ? d.plantName : t('NoPlants');\n });\n renderMap(data);\n setMapIsRendered(true);\n setPageIsLoading(false);\n setAllowChanges(session); \n });\n }\n\n if (!props.show) setMapIsRendered(false);\n }, [props.show]);\n\n const view = new View({\n center: proj.transform([23.66702093861786, 63.019978712597218], 'EPSG:4326', 'EPSG:3857'), // Temporary center for testing, todo figure out center based on selected farm.\n zoom: 14\n })\n\n const renderMap = (plots) => {\n // kasvulohkon rajat\n let agrPlotFeature = new VectorLayer({\n title: 'AgrPlot feature',\n source:\n createMapVectorSource({\n layer: 'mtech:agrplots',\n setExtent: true,\n callBack: function (features) {\n\n agrPlots.setVisible(true);\n WisuMap.ContextChanged = true;\n\n\n // load fertility collection and center map to these points\n getCollectionFromDb(props.selectedSet ? props.selectedSet : 0);\n }\n }),\n style: _styles.agr_plot.default,\n zIndex: 300,\n visible: true\n });\n\n // peruslohkon rajoista LayerGroup\n let agrPlots = new LayerGroup({\n title: 'AgrPlots',\n layers: [agrPlotFeature],\n zIndex: 300,\n visible: true\n });\n\n\n // map points\n let usermapFeatures = new VectorLayer({\n title: 'map features',\n source: createMapVectorSourceMapFeatures({\n layer: 'mtech:features',\n //setExtent: true,\n callBack: function (features) {\n mapPointsGroup.setVisible(true);\n WisuMap.usermapFeatures = usermapFeatures;\n }\n }),\n style: _styles.map_features.select,\n zIndex: 1000,\n visible: true\n });\n\n // karttapisteistä LayerGroup\n let mapPointsGroup = new LayerGroup({\n title: 'mapPointsGroup',\n layers: [usermapFeatures],\n zIndex: 1000,\n visible: true\n });\n\n // liitetään basePlots Group yleiseen VectorGrouppiin\n let VectorGroup = new LayerGroup({\n title: 'vectors',\n layers:\n [\n agrPlots\n ],\n zIndex: 300,\n visible: true\n });\n\n let orthoImage = addMapBaseLayer();\n setSatellite(orthoImage);\n\n let basicImage = addMapBaseLayer(\"taustakartta\");\n setBasic(basicImage);\n\n orthoImage.setVisible(true);\n basicImage.setVisible(false);\n\n RasterBaseGroup = new LayerGroup({\n title: 'Base rasters',\n layers: [orthoImage, basicImage]\n });\n\n WisuMap = new Map2({\n target: 'map',\n layers: [\n //addMapBaseLayer(), // map layer\n RasterBaseGroup,\n addMapPosition(), // gps point\n VectorGroup, // agrplots\n mapPointsGroup\n ],\n view: view,\n interactions: defaultInteractions({\n doubleClickZoom: true,\n mouseWheelZoom: true\n }),\n controls: defaultControls({ attribution: false }).extend([\n new MousePosition({\n projection: 'EPSG:4326', //Config.CRS.WGS84,\n coordinateFormat: function (coord) {\n return toStringHDMS(coord) + ' (WGS84)';\n },\n className: 'mouse-position'\n }),\n new Attribution({\n collapsible: true,\n label: '©'\n }),\n new ScaleLine({\n units: 'metric',\n minWidth: 80\n })\n ]),\n moveTolerance: 5\n });\n\n WisuMap.ContextChanged = false;\n WisuMap.plots = plots;\n WisuMap.usermapFeatures = null;\n WisuMap.mapPointsGroup = mapPointsGroup;\n\n var gpsValue = getGPSfromStorage();\n if (gpsValue)\n startGPS();\n else if (gpsWatch.current)\n disableGPS(gpsWatch.current);\n\n //// Custom zoom\n //WisuMap2.on('click', function (event) {\n // // Move zoom array idx\n // shiftZoomArrayIdx();\n // // Set view zoom\n // WisuMap.getView().setZoom(zoomLevels[zoomIdx.current]);\n //});\n\n mapPointsGroup.interaction = {};\n mapPointsGroup.interaction.collection = { select: new Collection(), single: new Collection() };\n\n mapPointsGroup.interaction.select = new Select({\n condition: click,\n toggleCondition: click,\n multi: false,\n layers: WisuMap.usermapFeatures,\n hitTolerance: 6,\n style: [styles.retrieveMapFeatureStyle()],\n features: mapPointsGroup.interaction.collection.select\n });\n WisuMap.addInteraction(mapPointsGroup.interaction.select);\n mapPointsGroup.interaction.select.setActive(true);\n\n function selectFeature(e) {\n if (e.selected.length) {\n //eventListener.callBack(e.selected[0]);\n\n e.selected.forEach(function (feature) {\n var prop = feature.getProperties();\n\n if (prop.PlotId) {\n mapPointsGroup.interaction.collection.select.clear();\n }\n else {\n //console.log(prop);\n\n // only one point to be selected\n mapPointsGroup.interaction.collection.select.clear();\n mapPointsGroup.interaction.collection.select.push(feature); \n checkFeatureSelectionToButtons(feature);\n }\n });\n }\n else if (e.deselected.length) {\n // automatically take off from collection.select list\n }\n\n e.mapBrowserEvent.stopPropagation();\n e.mapBrowserEvent.preventDefault();\n }\n\n mapPointsGroup.interaction.select.on(\"select\", selectFeature);\n\n\n /** agrPlots select interaction - select/unselect on singleClick */\n /* DISABLED PLOT SELECTION */\n agrPlots.interaction = {};\n agrPlots.interaction.collection = { hover: new Collection(), select: new Collection(), single: new Collection() };\n agrPlots.interaction.select = new Select({\n condition: click,\n toggleCondition: click,\n layers: [agrPlotFeature],\n multi: true,\n hitTolerance: 4,\n style: _styles.agr_plot.select,\n features: agrPlots.interaction.collection.select\n });\n WisuMap.addInteraction(agrPlots.interaction.select);\n agrPlots.interaction.select.setActive(false);\n\n //this is for selected plot colors..\n let agrPlotSource = agrPlotFeature.getSource();\n agrPlotSource.on(\"change\", function () {\n var state = agrPlotSource.getState();\n\n // only onload\n if (state == 'ready' && WisuMap.ContextChanged == true) {\n WisuMap.ContextChanged = false;\n\n let features = agrPlotSource.getFeatures();\n let selectedAgrPlotFeatureIds = getSelectedPlots();\n agrPlots.interaction.collection.select.clear();\n\n if (selectedAgrPlotFeatureIds.length) {\n for (let i = 0; i < features.length; i++) {\n let feature = features[i];\n let p = feature.getProperties();\n\n let find = WisuMap.plots.find(w => w.apChar === p.PlotLetter && w.number === p.BasePlotId);\n if (find) {\n if (selectedAgrPlotFeatureIds.indexOf(parseInt(find.apNumber)) !== -1) {\n agrPlots.interaction.collection.select.push(feature);\n }\n }\n }\n }\n }\n });\n\n WisuMap.on('click', function (e) {\n clickHandler(e);\n });\n }\n\n\n let checkFeatureSelectionToButtons = (feature) => {\n\n if (feature.values_.FeatureType === MapConfig.FEATURE.NEW_FERTILITY_SERIES ||\n feature.values_.FeatureType === MapConfig.FEATURE.FERTILITY_SERIES ||\n feature.values_.FeatureType === MapConfig.FEATURE.FERTILITY_SERIES_COLLECTED) {\n WisuMap.enableCollect = false;\n }\n else {\n WisuMap.enableCollect = true;\n setEnableCollectButton(true);\n }\n\n WisuMap.SelectedFeature = feature;\n\n setCollectedType(feature.values_.FeatureType === MapConfig.FEATURE.FERTILITY_SERIES_PLANNED ? false : true);\n\n WisuMap.enableDelete = true;\n setEnableDeleteButton(true);\n }\n\n\n let collectFeature = () => {\n\n let source = WisuMap.usermapFeatures.getSource();\n let features = source.getFeatures();\n let collectedFeature = WisuMap.SelectedFeature;\n\n collectedFeature.values_.FeatureType = MapConfig.FEATURE.FERTILITY_SERIES_COLLECTED;\n let nbrMax = Math.max(...features.map(x => x.values_.UnitType), 0) + 1;\n collectedFeature.values_.UnitType = nbrMax ? nbrMax : 1;\n \n\n source.removeFeature(WisuMap.SelectedFeature);\n source.addFeature(collectedFeature);\n\n WisuMap.enableCollect = false;\n WisuMap.enableDelete = false;\n WisuMap.mapPointsGroup.interaction.collection.select.clear();\n\n setEnableDeleteButton(false);\n setEnableCollectButton(false);\n\n if (WisuMap.CollectableSamples) {\n let collectableSamaplePoints = WisuMap.CollectableSamples;\n\n if (Array.isArray(collectableSamaplePoints)) {\n WisuMap.CollectableSamples = [...collectableSamaplePoints, WisuMap.SelectedFeature.values_]\n }\n else {\n WisuMap.CollectableSamples = [collectableSamaplePoints, WisuMap.SelectedFeature.values_];\n }\n }\n else {\n WisuMap.CollectableSamples = WisuMap.SelectedFeature.values_;\n }\n }\n\n let deleteFeature = () => {\n\n let source = WisuMap.usermapFeatures.getSource();\n source.removeFeature(WisuMap.SelectedFeature);\n\n WisuMap.enableCollect = false;\n WisuMap.enableDelete = false;\n\n setEnableDeleteButton(false);\n setEnableCollectButton(false);\n\n if (WisuMap.DeletableSamples) {\n let deletableSamaplePoints = WisuMap.DeletableSamples;\n WisuMap.DeletableSamples = !!deletableSamaplePoints.forEach ? [...deletableSamaplePoints, WisuMap.SelectedFeature.values_.FeatureGeometryId] : [deletableSamaplePoints, WisuMap.SelectedFeature.values_.FeatureGeometryId];\n }\n else {\n WisuMap.DeletableSamples = WisuMap.SelectedFeature.values_.FeatureGeometryId;\n }\n if (!source.getFeatures().length) {\n WisuMap.DeleteSet = WisuMap.SelectedFeature.values_.FieldNo;\n WisuMap.DeletableSamples = undefined;\n }\n }\n\n function addSelectedFeatures(source, features) {\n source.clear();\n\n if (props.selectedSet) {\n source.addFeatures(features);\n }\n }\n\n const getCurrentLayer = () => {\n let layers = WisuMap.getLayers().array_;\n let currentLayer;\n //if (taskSpecificData.taskType === 2) {\n // let fertLayer = layers.filter(layer => layer.get('name') === fertLayerName)[0];\n // let seedLayer = layers.filter(layer => layer.get('name') === seedLayerName)[0];\n // if (fertLayer.getVisible()) {\n // currentLayer = fertLayer;\n // } else {\n // currentLayer = seedLayer;\n // }\n //} else\n {\n let taskLayer = layers.filter(layer => layer.get('name') === taskLayerName)[0];\n currentLayer = taskLayer;\n }\n return currentLayer;\n }\n\n const success = (position) => {\n //console.log('got new GPS location!');\n let pos = validateNewPosition(position.coords);\n if (!pos.valid) {\n console.log('Insufficient GPS accurary');\n return;\n }\n currentPosition.current = pos;\n // Update user location on map\n updateMapPosition(currentPosition.current);\n // Move map center to user position\n WisuMap.getView().setCenter(proj.transform([currentPosition.current.longitude, currentPosition.current.latitude], 'EPSG:4326', 'EPSG:3857'));\n // Check which grid cell you are in and update task value\n if (running.current === true) checkCoordsInsideGridPolygon(getCurrentLayer(), currentPosition.current, setCurrentTaskAmount);\n }\n\n const errorHandler = () => {\n console.log('gps error');\n }\n\n /**\n * Vector layer source and get from db\n */\n function createMapVectorSource(obj) {\n\n obj.callBack = (typeof obj.callBack !== 'undefined') ? obj.callBack : function () { };\n\n var vectorSource = new VectorSource({\n format: new GeoJSON(),\n strategy: strategyAll,\n loader: function () {\n\n getContentWithAction(auth.getAccessToken(), 'map', 'agrplots', {})\n .then((data) => {\n //setAgrPlotFeatures(data);\n featureLoader(data);\n\n })\n .catch(errorHandler);\n }\n });\n\n function featureLoader(response) {\n var features = new GeoJSON().readFeatures(response.featureCollection, {\n dataProjection: response.crs,\n featureProjection: 'EPSG:3857'//Config.CRS.WEBMERCATOR\n });\n\n obj.callBack(features);\n\n if (!features.length) {\n return false;\n }\n\n\n if (response.dataYear !== getSelectedYear()) {\n //const alertText = t('Error_old_boundaries').replace('{0}', response.dataYear);\n\n // change previous year plant information\n features.forEach(f => {\n var pro = f.getProperties();\n let find = WisuMap.plots.find(w => w.apChar === pro.PlotLetter && w.number === pro.BasePlotId);\n if (find) {\n f.set('PlantName', find.plantName);\n f.set('PlantCode', find.plantId);\n f.set('Area', find.area);\n }\n });\n }\n\n vectorSource.addFeatures(features);\n\n // selected plots\n let plotIds = getSelectedPlots();\n var vectorSource2 = null;\n\n //check selected plot\n let selectedFeature = null;\n if (sSelectedPlot) {\n features.forEach(f => {\n var pro = f.getProperties();\n\n let find = WisuMap.plots.find(w => w.apChar === pro.PlotLetter && w.number === pro.BasePlotId);\n if (find) {\n if (find.apNumber === sSelectedPlot.apNumber)\n selectedFeature = f;\n }\n });\n }\n else if (plotIds && plotIds.length) {\n\n let plotFound = false;\n vectorSource2 = new VectorSource({\n format: new GeoJSON(),\n strategy: strategyAll\n });\n\n features.forEach(f => {\n var pro = f.getProperties();\n\n plotIds.forEach(p => {\n if (pro.PlotId === p) {\n plotFound = true;\n vectorSource2.addFeature(f);\n }\n });\n });\n\n if (!plotFound)\n vectorSource2 = null;\n }\n\n if (selectedFeature) { // zoom to plot\n WisuMap.getView().fit(selectedFeature.getGeometry(), { duration: 1000 });\n }\n else if (vectorSource2) { // this will center map on selected plots\n WisuMap.getView().fit(vectorSource2.getExtent());\n }\n else if (obj.setExtent === true) { // center to farm plots\n WisuMap.getView().fit(vectorSource.getExtent());\n\n } // this will center map\n\n }\n\n return vectorSource;\n }\n\n function createMapVectorSourceMapFeatures(obj) {\n\n obj.callBack = (typeof obj.callBack !== 'undefined') ? obj.callBack : function () { };\n\n var vectorSource = new VectorSource({\n format: new GeoJSON(),\n strategy: strategyAll,\n loader: function () {\n\n setMapFeatures([]);\n obj.callBack([]); \n }\n });\n\n return vectorSource;\n }\n\n function featureLoaderCommon(response, obj, vectorSource, addFeatures) {\n var features = featuresReader(response);\n\n /*****************/\n //let center = WisuMap.getView().getCenter();\n //const iconFeature = new Feature({\n // geometry: new Point([0,1]),\n // name: 'Null Island',\n // population: 4000,\n // rainfall: 500,\n //});\n\n //const iconStyle = new Style({\n // image: new Icon({\n // anchor: [100.5, 1046],\n // anchorXUnits: 'fraction',\n // anchorYUnits: 'pixels',\n // src: './data/icon.png',\n // }),\n //});\n\n //iconFeature.setStyle(iconStyle);\n //features.push(iconFeature);\n /*****************/\n\n if (obj.callBack)\n obj.callBack(features);\n\n if (!features.length) {\n return false;\n }\n\n if (addFeatures) {\n // this will handle seleced features to visible/on draw\n addSelectedFeatures(vectorSource, features)\n\n\n if (props.selectedSet) {\n let vectorSource2 = new VectorSource({\n format: new GeoJSON(),\n strategy: strategyAll\n });\n\n features.forEach(f => {\n vectorSource2.addFeature(f);\n });\n\n WisuMap.getView().fit(vectorSource2.getExtent(), { maxZoom: 18 });\n }\n }\n }\n\n // Return a potential object for updating current position\n const validateNewPosition = (newPosition) => {\n let potentialPosition = { valid: false };\n\n if (currentPosition.current.latitude === null) {\n if (newPosition.accuracy > gpsAccuracyUpperLimit || newPosition.accuracy < gpsAccuracyLowerLimit) {\n console.log('Bad accuracy for a potential initial position');\n }\n\n let lat = newPosition.latitude;\n let lon = newPosition.longitude;\n let time = new Date();\n potentialPosition = { valid: true, latitude: lat, longitude: lon, timestamp: time, heading: newPosition.heading, velocity: 0 };\n }\n\n let newTime = new Date();\n let timeDiff = (newTime - currentPosition.current.timestamp) / 1000; // seconds\n let dist = distance(newPosition.latitude, newPosition.longitude, currentPosition.current.latitude, currentPosition.current.longitude); // metres\n let velocity = dist / timeDiff;\n if (velocity <= gpsLocationFilterSpeed) {\n potentialPosition = { valid: true, latitude: newPosition.latitude, longitude: newPosition.longitude, timestamp: newTime, heading: newPosition.heading, velocity: velocity };\n }\n\n return potentialPosition;\n }\n\n const distance = (lat1, lon1, lat2, lon2) => {\n const R = 6378137;\n let dlon = radians(lon2 - lon1);\n let dlat = radians(lat2 - lat1);\n let f = squared(Math.sin(dlat / 2)) + Math.cos(radians(lat1)) * Math.cos(radians(lat2)) * squared(Math.sin(dlon / 2.0));\n let c = 2 * Math.atan2(Math.sqrt(f), Math.sqrt(1 - f));\n return R * c;\n }\n\n const radians = (x) => {\n return x * Math.PI / 180;\n }\n\n const squared = (x) => {\n return x * x;\n }\n\n const redirect = (geo, mapInitPosition) => {\n setMapInitCoordinates(mapInitPosition);\n setGeolocation(geo);\n if (WisuMap != null) {\n gpsWatch.current = geo.watchPosition(success, errorHandler, gpsOptions);\n }\n }\n\n const startGPS = () => {\n if (gpsWatch.current) {\n disableGPS(gpsWatch.current);\n document.getElementById('coordinate-btn').style.backgroundColor = 'red';\n }\n if (!activatedGps) {\n enableGPS(redirect)\n document.getElementById('coordinate-btn').style.backgroundColor = 'green';\n }\n setActivatedGps(!activatedGps);\n }\n\n function getNewPointCoor(coor3857) {\n //var zoom = map.getView().getZoom();\n let coor = proj.transform(coor3857, 'EPSG:3857', 'EPSG:3067');\n\n let coordinates = {\n wgs: {},\n latitude: coor && coor.length > 1 ? Math.round(returnRoundedValue(coor[1], 0)) : 0,\n longitude: coor && coor.length > 0 ? Math.round(returnRoundedValue(coor[0], 0)) : 0\n };\n\n // return gps also in another format (if wanted to show in somewhere..)\n coordinates.wgs = retrieveWgsCoordinates(coor3857);\n\n return coordinates;\n }\n\n const clickHandler = (e) => {\n\n if (!WisuMap.usermapFeatures) return;\n\n var pixel = WisuMap.getEventPixel(e.originalEvent);\n var hit = WisuMap.hasFeatureAtPixel(pixel);\n var cPoint = WisuMap.getEventCoordinate(e.originalEvent);\n\n //Add sample point\n if (hit && WisuMap.addNewPointSample) {\n\n var data = {\n \"type\": \"FeatureCollection\",\n \"crs\": { \"type\": \"name\", \"properties\": { \"name\": \"urn:ogc:def:crs:EPSG::3067\" } },\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": { \"id\": 1, \"FeatureType\": MapConfig.FEATURE.NEW_FERTILITY_SERIES, \"Note\": \"\" },\n \"geometry\": { \"type\": \"Point\", \"coordinates\": [cPoint[0], cPoint[1]] }\n }\n ]\n };\n\n var features = new GeoJSON().readFeatures(data);\n let source = WisuMap.usermapFeatures.getSource();\n source.addFeature(...features);\n let baseNo = null;\n\n WisuMap.forEachFeatureAtPixel(pixel, function (feature, layer) {\n if (!baseNo && feature && feature.get(\"BasePlotId\")) {\n baseNo = feature.get(\"BasePlotId\");\n }\n }, {});\n\n // returnvalue to modal\n const pointInfo = { coordinates: getNewPointCoor(cPoint), basePlotId: baseNo, sampleSetId: props.selectedSet ? props.selectedSet : undefined };\n if (WisuMap.AddedSamaplePoints) {\n let addedSamaplePoints = WisuMap.AddedSamaplePoints;\n WisuMap.AddedSamaplePoints = !!addedSamaplePoints.forEach ? [...addedSamaplePoints, pointInfo] : [addedSamaplePoints, pointInfo];\n }\n else {\n WisuMap.AddedSamaplePoints = pointInfo;\n }\n WisuMap.addNewPointSample = false;\n }\n if (hit && !props.selectedSet && !props.newSampleSet) {\n\n const note = props.pointNote ? props.pointNote : \"\";\n const featureType = props.featureType ? props.featureType : MapConfig.FEATURE.OBSERVATION;\n\n var data = {\n \"type\": \"FeatureCollection\",\n \"crs\": { \"type\": \"name\", \"properties\": { \"name\": \"urn:ogc:def:crs:EPSG::3067\" } },\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": { \"id\": 1, \"FeatureType\": featureType, \"Note\": note }, // add observation or memo\n \"geometry\": { \"type\": \"Point\", \"coordinates\": [cPoint[0], cPoint[1]] }\n }\n ]\n };\n var features = new GeoJSON().readFeatures(data);\n let source = WisuMap.usermapFeatures.getSource();\n source.clear(); // remove all to get point move when click on map\n source.addFeature(...features);\n\n // returnvalue to modal\n const pointInfo = { coord: getNewPointCoor(cPoint), note: \"\", feature: \"\" };\n setSelectedPoint(pointInfo);\n }\n if (hit && (WisuMap.enableDelete || WisuMap.enableCollect)) {\n setEnableCollectButton(false);\n setEnableDeleteButton(false);\n WisuMap.enableDelete = false;\n WisuMap.enableCollect = false;\n }\n }\n\n function getCollectionFromDb(id) {\n const source = WisuMap.usermapFeatures.getSource();\n source.clear();\n getContentWithAction(auth.getAccessToken(), 'map', 'mapFertilitySet', { id: id })\n .then((data) => {\n setMapFeatures(data);\n featureLoaderCommon(data, { layer: 'mtech:fertilityCollection' }, source, true)\n })\n .catch(errorHandler);\n }\n //End of map add feature\n // #endregion\n\n return (\n <>\n \n \n \n {t('Map')}\n \n \n \n {props.selectedSet > 0 || props.newSampleSet ? '' :\n
{t('AddLocationNote')}
\n }\n {pageIsLoading ? : ''}\n
\n
\n {allowChanges && (props.selectedSet > 0 || props.newSampleSet) ?\n \n \n \n : ''\n }\n
\n \n
\n\n {/* ACTION BUTTONS */}\n {props.featureType === \"5306\" || props.featureType === \"5304\" ? '' :\n \n {allowChanges && !props.collected ? \n \n : ''}\n {allowChanges ? \n \n : ''}\n \n }\n {/* --------------- */}\n\n
\n
\n
\n \n \n {allowChanges ? \n \n : ''}\n \n
\n \n );\n}\n\nexport default MapModal;","import React from 'react';\nimport Modal from 'react-bootstrap/Modal';\nimport '../../css/general.css'\n\nconst style = {\n backgroundColor: '#000',\n color: '#fff',\n opacity: '0.9'\n};\n\nconst ImageShowModal = (props) => {\n \n\n return (\n \n \n
\n
\n {props.image ?\n \"Zoomed\n : ''}\n
\n
\n
\n
\n );\n}\n\nexport default ImageShowModal;","export const deleteStyle = {\n borderRadius: '0',\n width: '42px',\n height: '48px',\n float: 'right',\n display: 'flex',\n justifyContent: 'center',\n paddingTop: '12px',\n marginTop: '8px'\n}\n\nexport const deleteRowStyle = {\n width: '36px',\n height: '36px',\n padding: '0',\n marginLeft: '6px',\n marginTop: '1px',\n marginBottom: '2px'\n}\n\nexport const secondaryTextStyle = {\n color: 'gray'\n}\n\nexport const textStyle = {\n height: '48px',\n display: 'flex',\n color: 'black',\n justifyContent: 'center',\n background: 'white',\n paddingTop: '12px',\n marginTop: '8px'\n}\n\nexport const rowStyle = {\n borderRadisu: '5px',\n float: 'left',\n borderRight: 0,\n border: '0px',\n backgroundColor: 'white'\n}\n\nexport const nutrientRowStyle = {\n marginTop: '10px',\n backgroundColor: '#27b25f'\n}\n\nexport const nutrientNumberCellStyle = {\n textAlign: 'right'\n}\n\nexport const addNoteRowStyle = {\n border: '1px solid lightgray'\n}\n\nexport const setDoneStyle = {\n display: 'flex',\n justifyContent: 'center',\n marginTop: '19px',\n right: '8%',\n position: 'absolute',\n zIndex: '1',\n borderRadius: '1.25rem'\n}\n\nexport const addButtonStyle = {\n borderRadius: '15px',\n width: '27px',\n height: '27px',\n float: 'right',\n display: 'flex',\n justifyContent: 'center',\n marginTop: '5px'\n}\n\nexport const changePlantStyle = {\n display: 'flex',\n justifyContent: 'center',\n marginTop: '27px',\n right: '2%',\n position: 'absolute',\n zIndex: '1',\n borderRadius: '1.25rem'\n}\n\nexport const deleteGrowthStage = {\n width: '36px',\n height: '36px',\n padding: '0',\n marginLeft: '-12px',\n marginTop: '1px',\n marginBottom: '2px'\n}\n\n","import React, { useState, useEffect, useContext, useRef } from 'react';\nimport Modal from 'react-bootstrap/Modal'\nimport Form from 'react-bootstrap/Form';\nimport CloseButton from 'react-bootstrap/CloseButton';\nimport Button from 'react-bootstrap/Button';\nimport Spinner from 'react-bootstrap/Spinner';\nimport { useTranslation } from 'react-i18next';\nimport * as dayjs from 'dayjs'\nimport CalendarModal from './CalendarModal';\nimport { getContentWithAction, postContentWithAction, postContentWithAction_, putContentWithAction } from '../../apiConnect';\nimport { getSelectedPlot } from '../../common';\nimport { useAlert } from 'react-alert'\nimport AppContext from '../../AppContext';\nimport { dayJsFormatDate } from '../../commonFunctions';\nimport MapModal from './MapModal';\nimport ImageShowModal from './ImageShowModal';\nimport { featuresReader, retrieveWgsCoordinates } from '../../Map/commonMapFunctions';\nimport { deleteRowStyle } from '../ComponentStyles/ButtonStyles';\nimport { ICONS } from '../../img/icons'\nimport Icon from '../../img/Icon'\n\nimport '../../css/general.css'\n\nconst MemoModal = (props) => {\n const { t } = useTranslation();\n const { auth } = useContext(AppContext);\n\n const [calendarShow, setCalendarShow] = useState(false);\n const [date, setDate] = useState(dayjs().format());\n const [memo, setMemo] = useState(\"\");\n const [memoId, setMemoId] = useState(null);\n const [featureGeometryId, setFeatureGeometryId] = useState(null);\n const [plantMemoType, setPlantMemoType] = useState(\"\");\n const [plantMemoGroup, setPlantMemoGroup] = useState(1);\n const [plantMemoTypeId, setPlantMemoTypeId] = useState(0);\n const [explanation, setExplanation] = useState(\"\");\n const [coordinates, setCoordinates] = useState(null);\n const [mapShow, setMapShow] = useState(false);\n const [loadingCoordinates, setLoadingCoordinates] = useState(false);\n const [buttonWriteShow, setButtonWriteShow] = useState(false); // allowed save btn disabled\n const [showInAllYears, setShowInAllYears] = useState(false);\n\n //PHOTOS \n const [files, setFiles] = useState([]);\n const [newImages, setNewImages] = useState([]);\n\n const fileRef = useRef();\n const [imageShow, setImageShow] = useState(false);\n const [imageToView, setImageToView] = useState(false);\n\n const selectedPlot = getSelectedPlot();\n const alert = useAlert();\n let plotId = undefined;\n \n if (props.mapEvent?.plotData) { \n plotId = props.mapEvent.plotData.apNumber;\n }\n else if (props.selectEvent?.selectedElement?.plotId) { \n plotId = props.selectEvent.selectedElement.plotId;\n \n }\n else if (selectedPlot && selectedPlot.apNumber) {\n plotId = selectedPlot.apNumber;\n }\n\n\n const responseHandler = (data) => {\n setMemo(data.memo);\n setExplanation(data.explanation);\n setPlantMemoType(props.memotype ? formatMemoType(props.memotype) : formatMemoType(data.plantMemoType));\n setPlantMemoTypeId(props.memotype ? props.memotype : data.plantMemoType);\n setPlantMemoGroup(data.plantMemoGroup);\n if (data.memoDate) {\n setDate(dayjs(data.memoDate).format());\n }\n if (data.memoId) {\n setMemoId(data.memoId);\n }\n if (data.featureGeometryId) {\n setFeatureGeometryId(data.featureGeometryId);\n }\n if (data.visibility) {\n setShowInAllYears(true);\n }\n }\n\n const formatMemoType = (type) => {\n switch (type) {\n case 1:\n return t('Sowings');\n case 2:\n return t('Fertilizing');\n case 3:\n return t('Tilling');\n case 4:\n return t('PlantProtection');\n case 5:\n return t('Yield');\n default:\n return t('Plot_Memos');\n }\n }\n\n const formatFields = () => {\n setMemo(\"\");\n setExplanation(\"\");\n setPlantMemoType(formatMemoType(props.memotype));\n setPlantMemoGroup(1);\n setDate(dayjs(Date.now()).format());\n setCoordinates(null);\n setFiles([]);\n setNewImages([]);\n }\n\n useEffect(() => {\n setPlantMemoType(formatMemoType(props.memotype));\n }, [props.memotype]);\n\n useEffect(() => {\n formatFields();\n\n getContentWithAction(auth.getAccessToken(), 'session', 'storeAllowed', {}).then((result) => {\n setButtonWriteShow(result);\n });\n\n if (props.mapEvent) {\n setCoordinates(props.mapEvent.coordinates);\n var memoId = undefined;\n if (!props.mapEvent.new) {\n const promise = new Promise((resolve, reject) => {\n getContentWithAction(auth.getAccessToken(), 'memo', 'memo', {\n featureGeometryId: props.mapEvent.geometryID\n }).then((data) => {\n if (data.length > 0) {\n responseHandler(data[0]);\n memoId = data[0].memoId;\n }\n resolve(\"Promise resolved successfully\");\n }).catch(e => {\n reject(Error(\"Promise rejected\"));\n });\n });\n promise.then(result => {\n getContentWithAction(auth.getAccessToken(), 'photo', 'memoPhotos', { memoId: memoId })\n .then((data) => {\n //console.log(data);\n photoFetcher(data);\n });\n }, reason => {\n console.error(reason); // Error!\n }); \n }\n\n // Add this to prevent a bug where modal closes when clicking a map feature\n // this happens because click happens an extra time and calls props.onHide\n // TODO: Fix the bug later?\n setTimeout(() => { props.allowHide() }, 250);\n }\n\n if (props.selectEvent) {\n if (!props.selectEvent.selectedElement) return;\n if (props.selectEvent.selectedElement.memoId !== 0) {\n responseHandler(props.selectEvent.selectedElement);\n }\n setLoadingCoordinates(true);\n\n getContentWithAction(auth.getAccessToken(), 'photo', 'memoPhotos', { memoId: props.selectEvent.selectedElement.memoId })\n .then((data) => {\n //console.log(data);\n photoFetcher(data);\n });\n\n getContentWithAction(auth.getAccessToken(), 'map', 'mapFeatures', {})\n .then((data) => {\n var features = featuresReader(data);\n const memoFeature = features.find(f => f.getProperties().FeatureGeometryId === props.selectEvent.selectedElement.featureGeometryId);\n if (memoFeature) {\n var coordinates = memoFeature.getProperties().geometry.flatCoordinates;\n const wgscoord = retrieveWgsCoordinates(coordinates);\n setCoordinates({ longitude: coordinates[0], latitude: coordinates[1], wgs: wgscoord });\n }\n setLoadingCoordinates(false);\n });\n }\n\n }, [props.selectEvent, props.mapEvent, auth]);\n\n const photoFetcher = (data) => {\n if (data && data.length) {\n\n let allfiles = []\n for (let i = 0; i < data.length; i++) {\n let image = data[i];\n image.thumbnailImage = 'data:image/jpeg;base64,' + image.thumbnailImage\n\n allfiles.push(image);\n }\n setFiles(allfiles);\n }\n }\n\n const removeCoordinates = () => {\n const data = {\n basePlotId: null,\n memoId: props.id,\n memo: memo,\n plantMemoType: props.memotype,\n plantMemoGroup: plantMemoGroup,\n explanation: explanation,\n // modificator:\n plotId: getSelectedPlot() ? getSelectedPlot().apNumber : null,\n memoDate: date,\n longitude: parseInt(coordinates.longitude),\n latitude: parseInt(coordinates.latitude),\n featureGeometryId: props.selectEvent.selectedElement.featureGeometryId\n };\n postContentWithAction(auth.getAccessToken(), 'memo', 'deleteCoordinates', data, () => {\n setCoordinates(null);\n setFeatureGeometryId(null);\n props.setRefresh(Date.now());\n });\n }\n\n const deleteMemo = () => {\n postContentWithAction_(auth.getAccessToken(), 'memo', 'delete', {\n memoId: memoId,\n plotId: plotId\n }).then(() => {\n if (props.selectEvent) {\n props.setRefresh(Date.now());\n props.onHide();\n }\n if (props.mapEvent) {\n props.deleteMemo();\n }\n });\n }\n\n\n const deletePhoto = (mediaId) => {\n postContentWithAction(auth.getAccessToken(), 'memo', 'deletePhoto', {\n mediaId: mediaId,\n plotId: plotId\n }, () => {\n props.setRefresh(Date.now());\n props.onHide();\n });\n }\n\n const saveMemo = () => {\n\n let images = [];\n if (newImages.length) {\n newImages.forEach(newI => {\n let photo = newI.thumbnailImage ? newI.thumbnailImage.split(',')[1] : '';\n if (photo) {\n images.push(photo);\n }\n });\n }\n\n var visibility = showInAllYears;\n\n if ((props.selectEvent && !props.selectEvent.selectedElement) || props.mapEvent?.new === true) {\n postContentWithAction_(auth.getAccessToken(), 'memo', 'new', {\n basePlotId: null,\n memoId: props.id,\n memo: memo,\n plantMemoType: props.memotype ? props.memotype : plantMemoTypeId,\n plantMemoGroup: plantMemoGroup,\n explanation: explanation,\n plotId: plotId,\n memoDate: date,\n longitude: coordinates ? parseInt(coordinates.longitude) : 0,\n latitude: coordinates ? parseInt(coordinates.latitude) : 0,\n newPhotos: images,\n visibility: visibility\n }).then((data) => {\n if (props.mapEvent?.new) {\n props.saveMemo(data);\n }\n else {\n props.setRefresh(Date.now());\n }\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n }).catch(e => {\n alert.show(t('SavedFailed'), { type: 'error' });\n });\n }\n if ((props.selectEvent && props.selectEvent.selectedElement) || props.mapEvent?.new === false) {\n putContentWithAction(auth.getAccessToken(), 'memo', 'update', {\n basePlotId: props.selectEvent?.selectedElement?.basePlotId ? props.selectEvent.selectedElement.basePlotId : null,\n memoId: memoId ? memoId : props.id,\n memo: memo,\n plantMemoType: props.memotype ? props.memotype : plantMemoTypeId,\n plantMemoGroup: plantMemoGroup,\n explanation: explanation,\n plotId: plotId ? plotId : null,\n memoDate: date,\n featureGeometryId: featureGeometryId ? featureGeometryId : 0,\n longitude: coordinates ? parseInt(coordinates.longitude) : 0,\n latitude: coordinates ? parseInt(coordinates.latitude) : 0,\n newPhotos: images,\n visibility: visibility\n }).then(() => {\n if (props.mapEvent?.new === false) {\n props.saveMemo(props.mapEvent.geometryID);\n }\n else {\n props.setRefresh(Date.now());\n }\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n }).catch(e => {\n alert.show(t('SavedFailed'), { type: 'error' });\n });\n }\n props.onHide();\n }\n\n const imageHandler = (e) => {\n\n let allfiles = []\n for (let i = 0; i < e.target.files.length; i++) {\n //console.log(e.target.files[i]);\n\n const acceptedImageTypes = ['image/gif', 'image/jpeg', 'image/png'];\n if (acceptedImageTypes.includes(e.target.files[i].type)) {\n\n var reader = new FileReader();\n reader.onload = function (f) {\n //console.log(f.target.result);\n\n let d = {};\n d.thumbnailImage = f.target.result;\n allfiles.push(d)\n\n if (files.length > 0) {\n setFiles([...files, ...allfiles]);\n }\n else {\n setFiles(allfiles);\n }\n\n if (newImages.length > 0) {\n setNewImages([...newImages, ...allfiles]);\n }\n else {\n setNewImages(allfiles);\n }\n }\n\n reader.readAsDataURL(e.target.files[i]);\n }\n }\n\n }\n const handleImageRemoval = (file) => {\n var allImages = [...files];\n var index = allImages.findIndex((element) => element.name === file.name);\n if (index !== -1) {\n allImages.splice(index, 1);\n setFiles(allImages);\n }\n if (file.mediaId)\n deletePhoto(file.mediaId);\n }\n\n const imageStyle = {\n width: '125px',\n height: '100px',\n cursor: 'pointer'\n };\n\n return (\n <>\n \n \n \n {t('Note')}\n
\n {\n props.selectEvent?.selectedElement?.groupNameShort ? props.selectEvent.selectedElement.groupNameShort :\n props.selectEvent?.selectedElement?.plotName ? props.selectEvent.selectedElement.plotName :\n props.mapEvent?.plotData ? props.mapEvent.plotData.name + ' - ' + props.mapEvent.plotData.apChar :\n selectedPlot && selectedPlot.name && selectedPlot.apChar ? selectedPlot.name + ' - ' + selectedPlot.apChar :\n ''}\n
\n
\n \n
\n \n {t('Action')}\n \n \n\n \n {t('Note')}\n { setMemo(event.target.value) }}\n value={memo}\n placeholder={t('Note')} />\n \n\n \n {t('NoteDescription')}\n { setExplanation(event.target.value) }}\n value={explanation}\n placeholder={t('NoteDescription')} />\n \n\n \n {t('Date')}\n setCalendarShow(true)} placeholder={t('Date')} value={dayJsFormatDate(date)} onChange={() => { }} />\n \n\n \n {t('Coordinates')}\n
\n {loadingCoordinates ? :\n
\n {coordinates && coordinates.longitude !== 0 && coordinates.latitude !== 0 ?\n
\n \n {t('LocationDefined')} ({coordinates.wgs.longitude}, {coordinates.wgs.latitude})\n \n
\n {!buttonWriteShow && props.mapEvent ? \"\" :\n \n }\n
\n
\n : // If no coordinates then show button\n
\n {buttonWriteShow ? \n \n : ''}\n
}\n
\n }\n
\n
\n\n {coordinates && coordinates.longitude !== 0 && coordinates.latitude !== 0 ? \n \n
\n { setShowInAllYears(!showInAllYears) }}\n />\n
\n
\n : ''}\n\n \n {t('Photos')}\n
\n {buttonWriteShow ? \n \n : ''}\n \n
\n
\n
\n {files.map((file, key) => {\n return (\n
\n {file.name}\n
\n {file.name} {\n setImageToView(file);\n setImageShow(true);\n }} />\n\n {buttonWriteShow ?\n handleImageRemoval(file)} />\n : ''}\n
)\n })}\n
\n
\n
\n
\n \n {(props.selectEvent?.selectedElement || !props.mapEvent?.new) && buttonWriteShow === true ?\n \n : ''}\n\n \n\n\n {buttonWriteShow === true ?\n \n : ''}\n \n
\n setCalendarShow(false)}\n onChange={setDate}\n selecteddate={date}\n />\n {\n setMapShow(false);\n if (point) {\n setCoordinates(point.coord);\n }\n }}\n pointNote={memo ? memo : t('Note')}\n featureType={\"5306\"}\n />\n {\n setImageShow(false);\n }}\n image={imageToView}\n />\n \n );\n}\n\nexport default MemoModal;","import React, { useState, useEffect, useContext } from 'react';\nimport Spinner from 'react-bootstrap/Spinner';\nimport ListGroup from 'react-bootstrap/ListGroup';\nimport { ICONS } from '../../img/icons'\nimport Icon from '../../img/Icon'\nimport Modal from 'react-bootstrap/Modal'\nimport { useTranslation } from 'react-i18next';\nimport AppContext from '../../AppContext';\nimport { dayJsFormatDate } from '../../commonFunctions.js'\n\nimport MemoModal from './MemoModal';\nimport { getContentWithAction, postContentWithAction } from '../../apiConnect';\n\nimport '../../css/farmPlot.css'\n\nconst ShowMemoListModal = (props) => {\n const { t } = useTranslation();\n const { auth } = useContext(AppContext);\n\n const [memos, setMemos] = useState([]);\n const [selectMemoEvent, setSelectMemoEvent] = useState({ time: null, selectedElement: null });\n const [memoType, setMemoType] = useState(0);\n const [memoModalShow, setMemoModalShow] = useState(false);\n const [isLoading, setIsLoading] = useState(true);\n const reload = () => handleMemoFetching();\n const [memoAttachments, setMemoAttachments] = useState([]);\n\n useEffect(() => {\n setMemos(props.memos);\n }, []); \n\n const handleMemoFetching = () => {\n setIsLoading(true);\n getContentWithAction(auth.getAccessToken(), 'memo', 'memosAll', {}).then((data) => {\n if (!data) return;\n formatMemos(data);\n }).catch((c) => { setIsLoading(false) });\n }\n\n useEffect(() => {\n if (memos.length > 0) {\n postContentWithAction(auth.getAccessToken(), 'photo', 'memoPhotosAll', { models: memos },\n (data) => {\n if (data.length > 0) {\n const memoPhotos = memoAttachments;\n data.forEach(d => {\n memoPhotos.push({ mediaId: d.mediaId, memoId: d.memoId });\n });\n setMemoAttachments(memoPhotos);\n }\n setIsLoading(false);\n });\n }\n }, [memos]);\n\n const formatMemos = (memos) => {\n let sortedMemoList = memos.sort((a, b) => new Date(b.memoDate) - new Date(a.memoDate))\n setMemos(sortedMemoList);\n }; \n\n const handleOperationMemoModal = () => {\n if (memoModalShow)\n reload();\n };\n\n const memoClickHandler = (memo) => {\n setIsLoading(true);\n setMemoType(memo.plantMemoType);\n setSelectMemoEvent({ time: Date.now(), selectedElement: memo });\n setMemoModalShow(true);\n }\n\n const getMemoText = (plot) => {\n if (plot.memo.length > 30)\n return plot.memo.slice(0, 30) + \"...\";\n return plot.memo;\n };\n\n const memoHasAttachment = (memo) => {\n var item = memoAttachments.find(m => m.memoId === memo.memoId);\n if (item) return true;\n return false;\n }\n\n return (\n <>\n \n \n {t('Notes')}\n \n \n {(isLoading) ? \n :\n \n {(memos && !isLoading) ? memos.map(p =>\n
\n memoClickHandler(p)}>\n
\n {memoHasAttachment(p) ?\n \n : ''}\n
\n
\n {(p.plotName) ?
{p.plotName}
:
Yleinen
}\n
\n {getMemoText(p)}\n
\n
\n {dayJsFormatDate(p.memoDate)}\n
\n \n
\n ) : \"\"}\n
}\n
\n
\n {memoModalShow === true ?\n {\n setMemoModalShow(false);\n setIsLoading(false);\n }}\n setRefresh={() => handleOperationMemoModal()}\n baseplotid={selectMemoEvent.basePlotId}\n selectEvent={selectMemoEvent}\n />\n : ''}\n \n )\n}\n\nexport default ShowMemoListModal;","import React, { useState, useEffect, useContext } from 'react';\nimport Spinner from 'react-bootstrap/Spinner';\nimport Button from 'react-bootstrap/Button';\nimport { Col, Row, Form } from \"react-bootstrap\";\nimport Modal from 'react-bootstrap/Modal'\nimport { useTranslation } from 'react-i18next';\nimport { postContentWithAction } from '../../apiConnect';\nimport AppContext from '../../AppContext';\nimport { nutrientNumberCellStyle } from '../ComponentStyles/ButtonStyles.js'\n\nimport '../../css/general.css'\nimport '../../css/farmPlot.css'\n\nconst StorageInfoModal = (props) => {\n const { auth } = useContext(AppContext);\n const { t } = useTranslation();\n const [isLoading, setIsLoading] = useState(true);\n const [title, setTitle] = useState(\"\");\n const [storageData, setStorageData] = useState(null);\n\n useEffect(() => {\n setTitle(t('Storage'));\n setStorageData(props.selectEvent.selectedElement);\n setIsLoading(false);\n }, [props.selectEvent.storage]);\n\n return (\n <>\n \n \n \n {title}\n \n \n \n {isLoading ? :\n
\n {!storageData.purchaseProducts ?

{t('Storage_Empty')}

:\n
\n {/* HEADERS */}\n
\n \n \n \n { storageData.name }\n \n \n \n \n {t('Product')}\n \n \n {t('Inventory_Amount')}\n \n \n \n
\n\n \n {storageData.purchaseProducts.map((product, i) => (\n \n \n {product.name}\n \n \n {product.amount} {product.unitText}\n \n \n ))}\n \n
\n }\n
\n }\n
\n \n \n \n
\n \n );\n}\n\nexport default StorageInfoModal;","import React, { useState, useEffect } from 'react';\nimport Spinner from 'react-bootstrap/Spinner';\nimport Modal from 'react-bootstrap/Modal'\nimport { Col, Row, Form } from \"react-bootstrap\";\nimport Button from 'react-bootstrap/Button';\nimport { useTranslation } from 'react-i18next';\nimport { dayJsFormatDate } from '../../commonFunctions.js'\nimport { ICONS } from '../../img/icons'\nimport Icon from '../../img/Icon'\nimport MapModal from './MapModal';\n\nimport '../../css/general.css'\n\nconst SampleSetModal = (props) => {\n const { t } = useTranslation();\n\n const [isLoading, setIsLoading] = useState(true);\n const [mapModal, setMapModalShow] = useState(false);\n const [sampleSet, setSampleSet] = useState([]);\n const [allowChanges, setAllowChanges] = useState(false);\n\n useEffect(() => {\n if (props.selectEvent.selectedElement.samples.some(x => x.collected === false)) {\n const sortedPlannedSet = props.selectEvent.selectedElement.samples.sort(\n (a, b) => {\n if (a.collected < b.collected) {\n return 1;\n }\n if (a.collected > b.collected) {\n return -1;\n }\n if ([a.collected, b.collected].filter(Boolean).length === 2) {\n if (a.nbr > b.nbr) {\n return 1;\n }\n if (a.nbr < b.nbr) {\n return -1;\n }\n }\n return 0;\n });\n\n setSampleSet(sortedPlannedSet);\n }\n else {\n const sortedSampleSet = props.selectEvent.selectedElement.samples.sort((a, b) => a.nbr - b.nbr);\n setSampleSet(sortedSampleSet);\n }\n setAllowChanges(props.allowSave);\n setIsLoading(false);\n }, [props.selectEvent.selectedElement.samples]);\n\n\n const openMapModal = () => {\n setIsLoading(true);\n setMapModalShow(true);\n }\n\n return (\n <>\n \n \n \n {sampleSet.some(x => x.collected === false) ? t('SamplePlan') : t('SampleSetsCollected')}\n
\n \n {dayJsFormatDate(props.selectEvent.selectedElement.sampleDate)} {props.selectEvent.selectedElement.plotCount} {t('Plots2')} - {props.selectEvent.selectedElement.sampleCount} {t('Samples')}\n
\n
\n \n
\n {/* HEADERS */}\n
\n \n \n \n {t('Number')}\n \n \n {t('Plot')}\n \n \n Ha\n \n {sampleSet.some(x => x.collected === false) ?\n <>\n GPS\n \n {allowChanges ? \n {t('Delete')}\n : ''}\n \n {allowChanges && sampleSet.some(x => x.collected === false) ?\n {t('Collect')}\n : null}\n \n :\n <>\n GPS\n \n {allowChanges ? \n {t('Delete')}\n : ''}\n \n }\n \n \n
\n {(isLoading) ? \n :\n sampleSet.map((item, index) => (\n \n \n \n {item.nbr ? item.nbr : '-'}\n \n \n {item.baseplotName}\n \n \n {item.baseplotArea}\n \n {sampleSet.some(x => x.collected === false) ?\n <>\n {item.lat && item.lon ?\n \n : }\n \n {sampleSet.length > 1 && allowChanges ?\n \n : null}\n \n {allowChanges ? \n props.refreshAndHandleOperationsSamples([item])} />\n : ''}\n\n \n :\n <>\n {item.lat && item.lon ?\n \n : }\n \n {sampleSet.length > 1 && allowChanges ?\n \n : null}\n\n \n }\n \n ))}\n \n
\n \n \n \n \n
\n\n {\n mapModal === true ?\n {\n setMapModalShow(false);\n setIsLoading(true);\n /* UPDATE[0] and/or ADD NEW SAMPLE POINTS[1] and/or DELETE SAMPLE POINTS[2]*/\n if (operations[0] || operations[1] || operations[2]) {\n props.refreshAndHandleOperationsSamples(operations);\n }\n /*DELETE SET*/\n if (operations[3]) {\n props.refreshAndHandleOperationsSet(operations[3]);\n }\n else\n setIsLoading(false);\n }}\n collected={props.collected}\n selectedSet={props.selectEvent.selectedElement.id}\n selectEvent={props.selectEvent.selectedElement.samples}\n />\n : ''\n }\n \n );\n}\n\nexport default SampleSetModal;","import React, { useState, useEffect } from 'react';\nimport Spinner from 'react-bootstrap/Spinner';\nimport Button from 'react-bootstrap/Button';\nimport Form from 'react-bootstrap/Form';\nimport ListGroup from 'react-bootstrap/ListGroup';\nimport { ICONS } from '../../img/icons'\nimport Icon from '../../img/Icon'\nimport Modal from 'react-bootstrap/Modal'\nimport { useTranslation } from 'react-i18next';\nimport { dayJsFormatDate } from '../../commonFunctions.js'\n\nimport SampleSetModal from './SampleSetModal';\nimport MapModal from './MapModal';\n\nimport '../../css/general.css'\nimport '../../css/farmPlot.css'\n\nconst ShowSampleSetListModal = (props) => {\n const { t } = useTranslation();\n\n const [sampleSets, setSampleSets] = useState([]);\n const [plannedSampleSets, setPlannedSampleSets] = useState([]);\n const [selectedSampleSetId, setSelectedSampleSetId] = useState([]);\n const [selectSampleSetEvent, setSelectSampleSetEvent] = useState({ time: null, selectedElement: null });\n const [sampleSetModal, setSampleSetModalShow] = useState(false);\n const [isLoading, setIsLoading] = useState(true);\n const [mapModal, setMapModalShow] = useState(false);\n const [checkedSets, setCheckedSets] = useState([])\n const [checkedPlannedSets, setCheckedPlannedSets] = useState([])\n const [collected, setCollected] = useState(false);\n const [closebuttonActive, setClosebuttonActive] = useState(false);\n\n useEffect(() => {\n setCheckedPlannedSets([]);\n setCheckedSets([]);\n if (props.sampleSetsCollected) {\n setSampleSets(props.sampleSetsCollected);\n sampleSetUpdater(props.sampleSetsCollected);\n }\n if (props.sampleSetsPlanned) {\n setPlannedSampleSets(props.sampleSetsPlanned);\n setPlannedSampleSets(props.sampleSetsPlanned);\n }\n }, [props.sampleSetsCollected, props.sampleSetsPlanned]);\n\n const sampleSetUpdater = (sampleList) => {\n const chosenSampleSet = selectedSampleSetId ? sampleList.find(x => x.id === selectedSampleSetId) : sampleList[0];\n if (chosenSampleSet)\n setSelectSampleSetEvent({ time: Date.now(), selectedElement: chosenSampleSet });\n else {\n setSampleSetModalShow(false);\n setIsLoading(false);\n }\n if (!sampleSetModal)\n setIsLoading(false);\n }\n const sampleSetPlannedClickHandler = (sampleSet) => {\n setIsLoading(true);\n setCollected(false);\n setSelectedSampleSetId(sampleSet.id);\n setSelectSampleSetEvent({ time: Date.now(), selectedElement: sampleSet });\n setSampleSetModalShow(true);\n }\n\n const sampleSetClickHandler = (sampleSet) => {\n setIsLoading(true);\n setCollected(true);\n setSelectedSampleSetId(sampleSet.id);\n setSelectSampleSetEvent({ time: Date.now(), selectedElement: sampleSet });\n setSampleSetModalShow(true);\n }\n\n const deleteSets = () => {\n setIsLoading(true);\n const combinedChecked = checkedSets.concat(checkedPlannedSets);\n props.refreshAndHandleOperationsSet(undefined, combinedChecked);\n }\n\n const handleCheckboxSelectionPlannedSets = (e, p) => {\n if (checkedPlannedSets.includes(p.id)) {\n var checked = [...checkedPlannedSets.filter(c => c !== p.id)];\n setCheckedPlannedSets(checked);\n }\n else {\n var checked = [...checkedPlannedSets];\n checked.push(p.id);\n setCheckedPlannedSets(checked);\n }\n }\n\n const handleCheckboxSelectionSets = (e, p) => {\n if (checkedSets.includes(p.id)) {\n var checked = [...checkedSets.filter(c => c !== p.id)];\n setCheckedSets(checked);\n }\n else {\n var checked = [...checkedSets];\n checked.push(p.id);\n setCheckedSets(checked);\n }\n }\n\n return (\n <>\n \n {(plannedSampleSets.length) ?\n <>\n {t('SamplePlans')}\n \n {(isLoading) ? \n :\n \n {(plannedSampleSets) ? plannedSampleSets.map(p =>
\n c === p.id)}\n onChange={(e) => handleCheckboxSelectionPlannedSets(e, p)} />\n sampleSetPlannedClickHandler(p)}>\n
\n
{dayJsFormatDate(p.sampleDate)}
\n
\n {p.plotCount} {t('Plots2')} - {p.sampleCount} {t('Samples')}\n
\n \n
\n ) : \"\"}\n
}\n
: null}\n {(sampleSets.length) ?\n <>\n {t('SampleSetsCollected')}\n \n {(isLoading) ? \n :\n \n {(sampleSets) ? sampleSets.map(p =>
\n c === p.id)}\n onChange={(e) => handleCheckboxSelectionSets(e, p)} />\n sampleSetClickHandler(p)}>\n
\n
{dayJsFormatDate(p.sampleDate)}
\n
\n {p.plotCount} {t('Plots2')} - {p.sampleCount} {t('Samples')}\n
\n \n
\n ) : \"\"}\n
}\n
: null}\n \n \n \n \n
\n {sampleSetModal === true ?\n {\n setSampleSetModalShow(false);\n setIsLoading(false);\n }}\n collected={collected}\n selectEvent={selectSampleSetEvent}\n refreshAndHandleOperationsSamples={(operation) => {\n if (operation[0] || operation[1] || operation[2]) {\n props.refreshAndHandleOperationsSamples(operation)\n }\n }}\n refreshAndHandleOperationsSet={(operation) => {\n if (operation) {\n props.refreshAndHandleOperationsSet(undefined, operation);\n }\n }}\n />\n : ''}\n {mapModal === true ?\n {\n setMapModalShow(false);\n if (additions) {\n props.refreshAndHandleOperationsSet(additions);\n }\n }}\n />\n : ''}\n \n )\n}\n\nexport default ShowSampleSetListModal;","import React, { useState, useEffect } from 'react';\nimport Spinner from 'react-bootstrap/Spinner';\nimport Button from 'react-bootstrap/Button';\nimport Form from 'react-bootstrap/Form';\nimport ListGroup from 'react-bootstrap/ListGroup';\nimport { ICONS } from '../../img/icons'\nimport Icon from '../../img/Icon'\nimport Modal from 'react-bootstrap/Modal'\nimport { useTranslation } from 'react-i18next';\nimport { chartMode } from '../../constants';\nimport ChartModal from './ChartModal';\n\nimport '../../css/general.css'\nimport '../../css/farmPlot.css'\n\nconst ShowDValuesListModal = (props) => {\n const { t } = useTranslation();\n\n const [isLoading, setIsLoading] = useState(true);\n const [dValueData, setDValueData] = useState([]);\n const [chartModalShow, setChartModalShow] = useState(false);\n const [chartModalData, setChartModalData] = useState([]);\n const [hideContent, setHideContent] = useState(false);\n\n useEffect(() => {\n var sortedData = props.data.sort((a, b) => {\n return a.dValue - b.dValue;\n });\n setDValueData(sortedData);\n setIsLoading(false);\n }, [props.data]);\n\n const openDValueGraph = (data) => {\n setChartModalData(data);\n setChartModalShow(true);\n setHideContent(true);\n }\n\n return (\n <>\n \n \n {t('DValue')}\n \n \n {(isLoading) ? \n :\n \n {(dValueData && !hideContent) ? dValueData.map((d, i) =>\n
\n { openDValueGraph(d); }}\n >\n
\n
{d.plotName} - {d.plotLetter}
\n
{d.dValue}
\n \n
\n ) : \"\"}\n
}\n
\n {!hideContent ?\n \n \n \n : ''}\n
\n {chartModalShow === true ?\n {\n setChartModalShow(false);\n setHideContent(false);\n }}\n />\n : ''}\n \n )\n}\n\nexport default ShowDValuesListModal;","import i18n from \"i18next\";\nimport { initReactI18next } from \"react-i18next\";\nimport Backend from 'i18next-http-backend';\n\ni18n\n // load translation using http -> see /public/locales (i.e. https://github.com/i18next/react-i18next/tree/master/example/react/public/locales)\n // learn more: https://github.com/i18next/i18next-http-backend\n .use(Backend)\n // pass the i18n instance to react-i18next.\n .use(initReactI18next)\n // init i18next\n // for all options read: https://www.i18next.com/overview/configuration-options\n .init({\n fallbackLng: 'fi',\n //lng: 'en',\n debug: false,\n backend: {\n loadPath: \"/locales/{{lng}}.json\",\n },\n\n interpolation: {\n escapeValue: false, // not needed for react as it escapes by default\n }\n });\n\nexport default i18n;","import React, { useContext } from 'react';\nimport AccordionContext from 'react-bootstrap/AccordionContext'\nimport { useAccordionButton } from 'react-bootstrap/AccordionButton';\nimport { ICONS } from './img/icons'\nimport Icon from './img/Icon'\n\nconst iconStyle = {\n display: 'inline-block',\n verticalAlign: 'top',\n marginRight: '5px',\n marginTop: '3px'\n}\n\nconst inventoryIconStyle = {\n display: 'inline-block',\n marginRight: '5px',\n marginBottom: '8px'\n}\n\nexport const GetLogoutIcon = () =>\n(\n \n);\n\nexport const GetGroupIcon = () =>\n(\n \n);\n\nexport const GetPlantIcon = () =>\n(\n \n);\n\nexport const GetPlotsIcon30 = () =>\n(\n \n);\n\nexport const GetPlotsIcon = () =>\n(\n \n);\n\nexport const GetEditIcon = () =>\n(\n \n);\n\n\nexport const GetFertilityIcon = () =>\n(\n \n);\n\nexport const GetInventoryIcon = () =>\n(\n \n);\n\nexport function OperationCardToggle({ children, eventKey, callback, classname }) {\n const { activeEventKey } = useContext(AccordionContext);\n\n const decoratedOnClick = useAccordionButton(\n eventKey,\n () => callback && callback(eventKey),\n );\n\n return (\n decoratedOnClick()}\n >\n {children}\n \n );\n}","import Modal from 'react-bootstrap/Modal'\nimport React, { useState, useEffect, useContext } from 'react';\nimport Spinner from 'react-bootstrap/Spinner';\nimport Button from 'react-bootstrap/Button';\nimport Select, { createFilter } from 'react-select';\n\nimport Form from 'react-bootstrap/Form';\nimport AppContext from '../../AppContext';\nimport { useTranslation } from 'react-i18next';\nimport i18n from '../../i18n';\nimport { getContentWithAction, getContent } from '../../apiConnect';\nimport {\n getSelectedYear, setSelectedYear, removeSelectedPlot, FarmIdToView,\n getSelectedLang, setSelectedLang, getSelectedFarmId, setSelectedFarmId,\n setSelectedFarmName, setGPStoStorage, getGPSfromStorage, getSelectedForecastStation,\n setSelectedForecastStation, getSelectedHistoryStation, setSelectedHistoryStation\n} from '../../common';\nimport { GetLogoutIcon } from '../../commonElements';\nimport { useAlert } from 'react-alert'\nimport '../../css/settings.css'\n\n\nconst SettingsModal = (props) => {\n const getlanguages = () => {\n return [\n { text: t('Lang_Fi'), value: 'fi' },\n { text: t('Lang_En'), value: 'en' },\n { text: t('Lang_Sv'), value: 'sv' }\n //{ test: t('Lang_Ru'), value: 'ru' }\n ];\n }\n\n const { auth } = useContext(AppContext);\n const { t } = useTranslation();\n const [farmYears, setFarmYears] = useState([]);\n const [year, setSetYear] = useState(getSelectedYear());\n const [lang, setLang] = useState(getSelectedLang());\n const [farms, setFarms] = useState([])\n const [farm, setFarm] = useState(getSelectedFarmId())\n const [forecastStations, setForecastStations] = useState([]);\n const [forecastStation, setForecastStation] = useState(getSelectedForecastStation().stationId);\n const [forecastHistoryStations, setForecastHistoryStations] = useState([]);\n const [forecastHistoryStation, setForecastHistoryStation] = useState(getSelectedHistoryStation().stationId);\n const [isLoading, setIsLoading] = useState(true);\n const [gpsValue, setGpsValue] = useState(getGPSfromStorage);\n\n const [farmsOptions, setFarmsOptions] = useState([])\n\n const alert = useAlert();\n\n useEffect(() => {\n let mounted = true;\n getYears();\n getForecastStations();\n getContent(auth.getAccessToken(), 'farm', {}).then((data) => {\n \n if (mounted) {\n formatFarms(data);\n setFarms(data);\n setIsLoading(false);\n }\n });\n\n return function cleanup() {\n mounted = false;\n }\n }, []);\n\n const formatFarms = (data) => { \n let tempList = [];\n for (var v in data) { \n let obj = { label: FarmIdToView(data[v].farmId) + \" - \" + data[v].name, value: data[v].farmId, name: data[v].name };\n tempList.push(obj); \n }\n setFarmsOptions([...tempList]);\n\n }\n\n const getYears = (checkLoad = false) => {\n getContentWithAction(auth.getAccessToken(), 'settings', 'farmYear', {})\n .then((data) => {\n var y = getSelectedYear();\n\n // if selected year doesn't exists in data, select first (high)\n if (data && data.length > 0 &&\n data.some(f => f.year === y) === false) {\n setSelectedYear(data[0].year);\n y = data[0].year;\n }\n\n if (checkLoad) {\n // refresh page content\n props.setRefresh();\n var alertText = {t('Farm')}: {FarmIdToView(getSelectedFarmId())};\n alert.show(alertText, { type: 'success', timeout: 5000 });\n }\n\n setFarmYears(data || []);\n })\n .catch(() => {\n setFarmYears([]);\n });\n }\n\n const getForecastStations = () => {\n Promise.all([\n getContentWithAction(auth.getAccessToken(), 'forecast', 'retrieveForecastStations', {}),\n getContentWithAction(auth.getAccessToken(), 'forecast', 'retrieveForecastHistoryStations', {})\n ]).then(([stations, historyStations]) => {\n if (forecastStation === -1) {\n stations.unshift({label: \"\", value: -1});\n }\n if (forecastHistoryStation === -1) {\n historyStations.unshift({ label: \"\", value: -1});\n }\n setForecastStations(stations);\n setForecastHistoryStations(historyStations);\n }).catch((c) => { });\n }\n\n const selectedYearHandler = (e) => {\n setSelectedYear(parseInt(e.target.value));\n removeSelectedPlot();\n setSetYear(getSelectedYear());\n\n // refresh page content\n props.setRefresh();\n var alertText = {t('Year')}: {getSelectedYear()};\n alert.show(alertText, { type: 'success', timeout: 5000 });\n }\n\n const selectedLanguageHandler = (e) => {\n i18n.changeLanguage(e.target.value);\n setSelectedLang(e.target.value);\n setLang(e.target.value);\n\n // refresh page content\n props.setRefresh();\n var alertText = {t('Language')}: {getSelectedLang()};\n alert.show(alertText, { type: 'success', timeout: 5000 });\n }\n const selectedFarmHandler = (e) => {\n setFarmYears([]);\n\n setSelectedFarmId(e.value);\n removeSelectedPlot();\n setFarm(getSelectedFarmId());\n \n setSelectedFarmName(e.name);\n getYears(true);\n getForecastStations();\n }\n\n const selectedStationHandler = (e) => {\n setForecastStation(e.target.value);\n var station = forecastStations.find(s => s.value === e.target.value);\n setSelectedForecastStation(station);\n props.setRefresh();\n }\n\n const selectedHistoryStationHandler = (e) => {\n setForecastHistoryStation(e.target.value);\n var station = forecastHistoryStations.find(s => s.value === e.target.value);\n setSelectedHistoryStation(station);\n props.setRefresh();\n }\n\n return (\n <>\n \n \n {t('Settings')}\n \n \n\n
\n {/*{farms.length > 1 ?*/}\n \n {t('Farm')} {(isLoading) ? : ''}\n {/**/}\n {/* {farms.map((f, i) =>*/}\n {/* */}\n {/* )}*/}\n {/**/}\n ({ ...base, zIndex: 9999 }) }}\n value={selectedStation}\n onChange={(value) => { }}\n options={forecastStationData}\n placeholder={t('Select')}\n />\n */}\n \n {\n setGPStoStorage(!gpsValue);\n setGpsValue(!gpsValue)\n \n }\n }\n />\n \n \n \n \n {/*\n \n \n
\n \n );\n}\n\nexport default ConfirmModal;","import React, { useState, useEffect, useContext } from 'react';\nimport Modal from 'react-bootstrap/Modal'\nimport Button from 'react-bootstrap/Button';\nimport Form from 'react-bootstrap/Form';\nimport NumberFormat from 'react-number-format';\nimport Select from 'react-select';\nimport { useTranslation } from 'react-i18next';\nimport { useAlert } from 'react-alert'\nimport { getSelectedLang, getSelectedYear, getSelectedFarmId, formatGroupLabel } from '../../common';\nimport { valueMax } from '../../commonFunctions';\nimport Spinner from 'react-bootstrap/Spinner';\nimport '../../css/general.css'\nimport '../../css/inventory.css';\nimport { getContentWithAction, postContentWithAction } from '../../apiConnect';\nimport AppContext from '../../AppContext';\nimport ConfirmModal from '../Alerts/ConfirmModal';\n\nconst InventoryManagementModal = (props) => {\n const { t } = useTranslation();\n const { auth } = useContext(AppContext);\n const alert = useAlert();\n const [isLoading, setIsLoading] = useState(true);\n const [storages, setStorages] = useState([]);\n const [products, setProducts] = useState([]);\n const [saveInProgress, setSaveInProgress] = useState(false);\n const [selectedStorage, setSelectedStorage] = useState(null);\n const [showConfirm, setShowConfirm] = useState(false);\n const [hasChanges, setHasChanges] = useState(false);\n const [preSelectedStorage, setPreSelectedStorage] = useState(null); // Used as temp for checking if user has made changes\n\n useEffect(() => {\n retrieveModalData();\n }, []);\n\n const retrieveModalData = () => {\n var farmId = getSelectedFarmId();\n var year = getSelectedYear();\n var lang = getSelectedLang();\n\n Promise.all([\n getContentWithAction(auth.getAccessToken(), 'plotOperation', 'getMMWisuStorages', { farmId, year, lang }),\n // session\n getContentWithAction(auth.getAccessToken(), 'session', 'storeAllowed', {})\n ]).then(([storages, session]) => {\n responseHandler(storages);\n setIsLoading(false);\n }).catch((c) => { setIsLoading(false); });\n }\n\n const selectStorage = (selectedStorage) => {\n if (hasChanges) {\n setPreSelectedStorage(selectedStorage);\n setShowConfirm(true);\n }\n else {\n setSelectedStorage(selectedStorage);\n var copyProducts = [...selectedStorage.purchaseProducts].map(x => ({ ...x }));\n setProducts(copyProducts);\n }\n }\n\n const responseHandler = (response) => {\n var storageOptions = [];\n var value = 0;\n response.storages.forEach(s => {\n if (s.propertyType === 2) {\n s.name = t('Inventory_Seeds');\n }\n else if (s.propertyType === 3) {\n s.name = t('Inventory_Fertilizers');\n }\n else if (s.propertyType === 4) {\n s.name = t('Inventory_Pesticides');\n }\n storageOptions.push({ ...s, label: s.name, value: value });\n value++;\n });\n setStorages(storageOptions);\n\n if (storageOptions) {\n setSelectedStorage(storageOptions[0]);\n var copyProducts = [...storageOptions[0].purchaseProducts].map(x => ({...x}));\n setProducts(copyProducts);\n }\n }\n\n const getProductName = (product) => {\n if (product.operationType === 0) {\n // Seeds\n var organic = product.organic ? t('Inventory_Organic') : t('Inventory_Regular');\n var qua = \"\";\n if (product.quality === 6) qua = t('Inventory_Certified');\n else if (product.quality === 16) qua = t('Inventory_Farm_Seed');\n else if (product.quality === 17) qua = t('Inventory_Other');\n var productName = product.name;\n\n return productName + \" \" + qua + \" \" + organic;\n }\n else if (product.operationType === 1) {\n // Fertilizers\n return product.name;\n }\n else if (product.operationType === 2) {\n // Pesticides\n return product.name;\n }\n else if (product.operationType === 3) {\n // Harvests / Silo products\n return product.name;\n }\n\n return product.productCode;\n }\n\n const saveChanges = () => {\n setSaveInProgress(true);\n\n // Only save products that have changes\n var filteredProducts = products.filter(p => p.saveChanges === true).map(p => ({ ...p }));\n var data = [...filteredProducts];\n data.forEach(d => {\n // Amount value is the one that is saved to database, setting it here so it doesn't mess with UI value\n d.amount = d.calculated ? d.calculated - d.amount : 0;\n });\n\n postContentWithAction(auth.getAccessToken(), 'plotOperation', 'saveInventory', {models: data}).then(result => {\n setSaveInProgress(false);\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n props.onHide();\n props.refresh();\n }).catch((c) => {\n // show alert\n setSaveInProgress(false);\n alert.show(t('SavedFailed'), { type: 'error' });\n });\n }\n\n const addProduct = () => {\n console.log(\"__TODO: ADDING PRODUCT__\");\n }\n\n const addToSilos = () => {\n console.log(\"__TODO: ADDING TO SILOS__\");\n }\n\n const updateAmount = (event, product) => {\n var productsCopy = [...products];\n var index = productsCopy.indexOf(product);\n\n // Check if calculated amount is 0, then disable saving for this product\n if (!event.floatValue) {\n productsCopy[index].calculated = event.floatValue;\n productsCopy[index].saveChanges = false;\n productsCopy[index].additionalInfo = '';\n setProducts(productsCopy);\n\n // if none of the products don't have calculated amount, then disable saving\n var saveChanges = products.some(p => p.calculated);\n setHasChanges(saveChanges);\n return;\n }\n\n setHasChanges(true);\n productsCopy[index].calculated = event.floatValue;\n productsCopy[index].saveChanges = true;\n setProducts(productsCopy);\n }\n\n const updateDescription = (event, product) => {\n var productsCopy = [...products];\n var index = productsCopy.indexOf(product);\n productsCopy[index].calculated ? productsCopy[index].additionalInfo = event.target.value : productsCopy[index].additionalInfo = '';\n setProducts(productsCopy);\n }\n\n const getInventorySumValue = (product) => {\n var calculatedValue = product.calculated ? product.calculated - product.amount : null\n if (!calculatedValue) return \"\";\n var valueString = \"\";\n valueString = calculatedValue > 0 ? \"+\" + calculatedValue : calculatedValue;\n return valueString + \" \" + product.unitText;\n }\n\n return (\n <>\n \n \n {t('Inventory')}\n \n \n {isLoading ? :\n
\n \n {t('Select')}\n selectStorage(storage)}\n options={storages}\n formatGroupLabel={formatGroupLabel}\n />\n \n {products ? products.map((product, index) =>\n
\n \n {getProductName(product)}\n \n
\n \n {t('Inventory_Amount')}\n { }} />\n \n \n {t('Inventory_Calculated')}\n {\n updateAmount(e, product);\n }} />\n \n \n {t('Inventory_Description')}\n { updateDescription(e, product) }} />\n \n \n {t('Inventory_Sum')}\n { }}>{getInventorySumValue(product)}\n \n
\n\n
\n ) : ''}\n \n \n
\n }\n
\n \n \n \n \n
\n\n {showConfirm === true ?\n {\n setShowConfirm(false);\n setSelectedStorage(preSelectedStorage);\n var copyProducts = [...preSelectedStorage.purchaseProducts].map(x => ({ ...x }));\n setProducts(copyProducts);\n setHasChanges(false);\n }}\n decline={() => {\n setShowConfirm(false);\n setPreSelectedStorage(null);\n }}\n onHide={() => setShowConfirm(false)}\n title={t('DeleteInventory')}\n />\n : ''}\n \n )\n}\n\nexport default InventoryManagementModal;","import React, { useState, useEffect, useContext } from 'react';\nimport Card from 'react-bootstrap/Card';\nimport Spinner from 'react-bootstrap/Spinner';\nimport Button from 'react-bootstrap/Button';\nimport ShowItemSelectionModal from './Modals/ShowItemSelectionModal'\nimport ShowGrowthStageListModal from './Modals/ShowGrowthStageListModal'\nimport ShowMemoListModal from './Modals/ShowMemoListModal'\nimport MemoModal from './Modals/MemoModal';\nimport StorageInfoModal from './Modals/StorageInfoModal';\nimport ShowSampleSetListModal from './Modals/ShowSampleSetListModal'\nimport ShowDValuesListModal from './Modals/ShowDValuesListModal';\nimport ChartModal from './Modals/ChartModal';\nimport SampleSetModal from './Modals/SampleSetModal';\nimport MapModal from './Modals/MapModal';\nimport { Container } from 'reactstrap';\nimport { useTranslation } from 'react-i18next';\nimport AppContext from '../AppContext';\nimport { useAlert } from 'react-alert'\n\nimport NavMenu from './NavMenu';\nimport { getContent, getContentWithAction, postContentWithAction, putContentWithActionFertility } from '../apiConnect';\nimport {\n removeSelectedPlot, setSelectedFarmId, getSelectedFarmId,\n getSelectedLang, getSelectedYear, setSelectedPage,\n FarmIdToView, getSelectedFarmName, setSelectedFarmName,\n getSelectedPlantsToView, setSelectedPlantsToView,\n getSelectedPlotsToView, setSelectedPlotsToView,\n removeSelectedPlantId, removeSelectedPlotGroupId, getSelectedForecastStation, setSelectedForecastStation, getSelectedHistoryStation,\n getProLicence, setProLicence\n} from '../common';\nimport { chartMode } from '../constants';\nimport { groupByKey, dayJsFormatDate, getGrowthStageText } from '../commonFunctions';\nimport { GetPlantIcon, GetGroupIcon, GetEditIcon, GetFertilityIcon, GetPlotsIcon, GetInventoryIcon } from '../commonElements';\nimport { forecastMeterStyle, homeHeaderStyle, forecastDropStyle } from '../components/ComponentStyles/IconStyles';\n\nimport { ICONS } from '../img/icons'\nimport Icon from '../img/Icon'\nimport '../css/farmHome.css'\nimport '../css/general.css'\nimport InventoryManagementModal from './Modals/InventoryManagementModal';\n\n// Homepage\nconst Farm = (props) => {\n\n const { auth } = useContext(AppContext);\n const { t } = useTranslation();\n const [retievedFarms, setRetievedFarms] = useState([])\n const [isLoading, setIsLoading] = useState(true);\n const [isLoadingMemos, setIsLoadingMemos] = useState(true);\n const [isLoadingSamples, setIsLoadingSamples] = useState(true);\n const [errorText, setErrorText] = useState(false);\n const [plants, setPlants] = useState([]);\n const [plantsDraw, setPlantsDraw] = useState([]);\n const [plots, setPlots] = useState([]);\n const [plotsDraw, setPlotsDraw] = useState([]);\n const [memos, setMemos] = useState([]);\n const [memosDraw, setMemosDraw] = useState([]);\n const [visible, setVisible] = useState(true);\n const [noPlots, setNoPlots] = useState(false);\n const [showChoiceModal, setShowChoiceModal] = useState(false);\n const reload = () => setPlantsDraw(getSelectedPlantsToView().sort((a, b) => b.area - a.area));\n const reload2 = () => setPlotsDraw(getSelectedPlotsToView().sort(comparePlots));\n const reload3 = () => handleMemoFetching();\n const reload4 = () => handleFertilityAnalyses();\n const [plantModal, setPlantModal] = useState(false);\n const [plotModal, setPlotModal] = useState(false);\n\n const [memoListModal, setMemoListModal] = useState(false);\n const [selectMemoEvent, setSelectMemoEvent] = useState({ time: null, selectedElement: null });\n const [memoModalShow, setMemoModalShow] = useState(false);\n const [memoType, setMemoType] = useState(0);\n const [memoAttachments, setMemoAttachments] = useState([]);\n\n const [sampleSetsCollected, setSampleSetsCollected] = useState([]);\n const [sampleSetCollectedDraw, setSampleSetCollectedDraw] = useState([]);\n const [sampleSetsPlanned, setSampleSetsPlanned] = useState([]);\n const [sampleSetPlannedDraw, setSampleSetPlannedDraw] = useState([]);\n\n const [sampleSetListModal, setSampleSetListModal] = useState(false);\n const [sampleSetModalShow, setSampleSetModalShow] = useState(false);\n const [dValueListModalShow, setdValueListModalShow] = useState(false);\n const [growthStageListModalShow, setGrowthStageListModalShow] = useState(false);\n const [chartModalShow, setChartModalShow] = useState(false);\n const [inventoryModalShow, setInventoryModalShow] = useState(false);\n\n const [selectSampleSetEvent, setSelectSampleSetEvent] = useState({ time: null, selectedElement: null });\n const [noSampleSets, setNoSampleSets] = useState(false);\n const [collected, setCollected] = useState(false);\n\n const [forecastData, setForecastData] = useState([]);\n const [DValueData, setDValueData] = useState([]);\n const [growthStageData, setGrowthStageData] = useState([]);\n const [growthStageListModalData, setGrowthStageListModalData] = useState([]);\n const [chartModalData, setChartModalData] = useState([]);\n const [chartModalMode, setChartModalMode] = useState(0);\n\n const [memoAttachmentsLoaded, setMemoAttachmentsLoaded] = useState(false);\n const [forecastIsLoading, setForecastIsLoading] = useState(true);\n const [dValueIsLoading, setDValueIsLoading] = useState(true);\n const [growthStageIsLoading, setGrowthStageIsLoading] = useState(true);\n const [storageLoading, setStorageLoading] = useState(true);\n\n const [wheatStageCard, setWheatStageCard] = useState(null);\n const [barleyStageCard, setBarleyStageCard] = useState(null);\n const [oatStageCard, setOatStageCard] = useState(null);\n\n const [mapModal, setMapModalShow] = useState(false);\n const [sessionResult, setSessionResult] = useState(false);\n const [storageManagementAccess, setStorageManagementAccess] = useState(false);\n const [storages, setStorages] = useState([]);\n const [storageInfoShow, setStorageInfoShow] = useState(false);\n const [selectStorageEvent, setSelectStorageEvent] = useState({ time: null, selectedElement: null });\n const [proMode, setProMode] = useState(null);\n\n const alert = useAlert();\n\n document.title = t('Home') + ' | Mobiwisu';\n setSelectedPage(0);\n\n useEffect(() => {\n let mounted = true;\n getContent(auth.getAccessToken(), 'farm', {}).then((data) => {\n if (mounted) {\n setRetievedFarms(data);\n setFarm(data);\n }\n }).catch(c => {\n setFarm([]);\n })\n\n return function cleanup() {\n mounted = false;\n }\n }, []);\n\n const handleCloseModal = () => {\n if (plantModal) {\n reload();\n setPlantModal(false);\n }\n if (plotModal) {\n reload2();\n setPlotModal(false);\n }\n if (memoModalShow || memoListModal) {\n setIsLoadingMemos(true);\n reload3();\n }\n if (sampleSetModalShow) {\n setSampleSetModalShow(false);\n reload4();\n }\n };\n\n const setFarm = (farms) => {\n if (farms && farms.length > 0) {\n let farm = getSelectedFarmId();\n\n if (farm) { // if previous (session) farmid have saved\n\n let haveFarm = farms.find(f => f.farmId === Number(farm));\n if (haveFarm) // if current user have saved farmid -> farmid is right, save only finded name\n setSelectedFarmName(haveFarm ? haveFarm.name : '');\n else {\n // user don't have saved farmid -> get first one \n setSelectedFarmId(farms && farms.length ? farms[0].farmId : 0);\n setSelectedFarmName(farms && farms.length ? farms[0].name : '');\n }\n }\n else {\n setSelectedFarmId(farms && farms.length ? farms[0].farmId : 0);\n setSelectedFarmName(farms && farms.length ? farms[0].name : '');\n }\n\n getPlotsData(farms);\n }\n else {\n setSelectedFarmId(0);\n setSelectedFarmName('');\n setErrorText(true);\n //auth.logout();\n setIsLoading(false);\n setIsLoadingMemos(false);\n setIsLoadingSamples(false);\n }\n };\n\n /**\n * TODO: Session storage licence check is not working properly. Need to fix this later.\n * @param {any} farmId\n */\n const getWisuProLicence = (farmId) => {\n var proLicence = getProLicence();\n // Parse bool from string\n if (proLicence === undefined || proLicence === null || proLicence === []) {\n getContentWithAction(auth.getAccessToken(), 'plotOperation', 'retrieveFarmProProductInfo', { farmId }).then(lic => {\n var farmLicenses = [{\n farmId: farmId,\n proLicence: lic\n }];\n\n setProLicence(farmLicenses);\n setProMode(lic);\n });\n }\n else {\n // find license from stored licenses\n var farmLicense = proLicence.find(p => p.farmId === farmId);\n if (farmLicense) {\n setProMode(farmLicense.proLicence);\n }\n else {\n getContentWithAction(auth.getAccessToken(), 'plotOperation', 'retrieveFarmProProductInfo', { farmId }).then(lic => {\n var farmLicense = {\n farmId: farmId,\n proLicence: lic\n };\n\n // Add new license to stored licenses\n proLicence.push(farmLicense);\n setProLicence(proLicence);\n setProMode(lic);\n });\n }\n }\n }\n\n const getPlotsData = (farms) => {\n if (farms && farms.length > 0) {\n var farmId = getSelectedFarmId();\n var year = getSelectedYear();\n var lang = getSelectedLang();\n removeSelectedPlot();\n Promise.all([\n getContent(auth.getAccessToken(), 'farmPlot', { lang: getSelectedLang() }),\n getContentWithAction(auth.getAccessToken(), 'session', 'storeAllowed', {}),\n getContentWithAction(auth.getAccessToken(), 'plotOperation', 'retrieveFarmProProductInfo', { farmId })\n ]).then(([data, session, proInfo]) => {\n if (data.length > 0) {\n setNoPlots(false);\n\n let group = groupByKey(data, 'plantId');\n formatPlantsGroup(group);\n let group2 = groupByKey(data, 'groupId');\n formatPlotsGroup(group2);\n }\n else {\n setNoPlots(true);\n setPlantsDraw([]);\n }\n\n if (proInfo) {\n // Only load storage data if user have pro licence\n setStorageLoading(true);\n Promise.all([\n getContentWithAction(auth.getAccessToken(), 'plotOperation', 'getMMWisuStorages', { farmId, year, lang }),\n getContentWithAction(auth.getAccessToken(), 'plotOperation', 'checkStorageManagementAccess', { farmId, year })\n ]).then(([storageObject, storageAccess]) => {\n setStorageManagementAccess(storageAccess);\n if (storageObject && storageObject.storages) {\n setStorages(storageObject.storages);\n }\n setStorageLoading(false);\n });\n }\n else {\n // Set loading false if user don't have pro licence\n // to show pro messages in storage section\n setStorageLoading(false);\n }\n\n setProMode(proInfo);\n\n /*setSessionResult(session);*/\n setSessionResult(session);\n setIsLoading(false);\n }).catch((c) => {\n setIsLoading(false);\n console.log(c);\n });\n\n handleMemoFetching();\n handleFertilityAnalyses();\n handleForecastsFetching();\n handleDValueFetching();\n handleGrowthDataFetching();\n }\n }\n\n const getPlotsDataOnRefresh = () => {\n getPlotsData(retievedFarms);\n }\n\n const handleMemoFetching = () => {\n setMemoAttachmentsLoaded(false);\n getContentWithAction(auth.getAccessToken(), 'memo', 'memosAll', {}).then((memos) => {\n if (!memos) return;\n formatMemos(memos);\n setIsLoadingMemos(false);\n getMemoAttachments(memos);\n }).catch((c) => { setIsLoadingMemos(false) });\n }\n\n const getMemoAttachments = (memos) => {\n postContentWithAction(auth.getAccessToken(), 'photo', 'memoPhotosAll', { models: memos },\n (data) => {\n if (data.length > 0) {\n const memoPhotos = [];\n data.forEach(d => {\n memoPhotos.push({ mediaId: d.mediaId, memoId: d.memoId });\n });\n setMemoAttachments(memoPhotos);\n }\n setMemoAttachmentsLoaded(true);\n }).catch((c) => { setMemoAttachmentsLoaded(false); });\n }\n\n const handleFertilityAnalyses = () => {\n getContentWithAction(auth.getAccessToken(), 'fertility', 'analyseCollections', {}).then((data) => {\n if (data.length > 0) {\n formatFertility(data);\n setNoSampleSets(false);\n }\n else {\n setSampleSetCollectedDraw([]);\n setNoSampleSets(true);\n }\n setIsLoadingSamples(false);\n }).catch((c) => { setIsLoadingSamples(false) });\n }\n\n const handleForecastsFetching = () => {\n setForecastIsLoading(true);\n var station = getSelectedForecastStation();\n getContentWithAction(auth.getAccessToken(), 'forecast', 'retrieveForecastSums', { lang: getSelectedLang(), stationId: station.stationId, isLocalStation: station.localStation }).then((data) => {\n setForecastData(data);\n setForecastIsLoading(false);\n }).catch((c) => { setForecastIsLoading(false); });\n }\n\n const handleDValueFetching = () => {\n setDValueIsLoading(true);\n var station = getSelectedForecastStation();\n var station30Y = getSelectedHistoryStation();\n getContentWithAction(auth.getAccessToken(), 'forecast', 'retrieveForecastDValues', { lang: getSelectedLang(), stationId: station.stationId, stationId30Y: station30Y.stationId, isLocalStation: station.localStation }).then((data) => {\n setDValueData(data);\n setDValueIsLoading(false);\n }).catch((c) => {\n setDValueIsLoading(false);\n setDValueData([]);\n console.log('dvalue error')\n });\n }\n\n const handleGrowthDataFetching = () => {\n setGrowthStageIsLoading(true);\n var station = getSelectedForecastStation();\n var station30Y = getSelectedHistoryStation();\n getContentWithAction(auth.getAccessToken(), 'forecast', 'retrieveForecastGrowthData', { lang: getSelectedLang(), stationId: station.stationId, stationId30Y: station30Y.stationId, isLocalStation: station.localStation }).then((data) => {\n setGrowthStageData(data);\n setGrowthStageCardData(data);\n setGrowthStageIsLoading(false);\n }).catch((c) => { setGrowthStageIsLoading(false); });\n }\n\n\n const handleOperations = (operations) => { \n var promiseArray = [];\n\n if (operations[0]) {\n promiseArray.push(updateSamplePoints(operations[0]));\n }\n if (operations[1]) {\n promiseArray.push(saveSamplePoints(operations[1]));\n }\n if (operations[2]) {\n promiseArray.push(deleteSamplePoints(operations[2]));\n }\n\n Promise.all(promiseArray).then(resolve => {\n handleFertilityAnalyses();\n }).catch(error => console.log(`Error in executing ${error}`));\n }\n\n const saveSampleSet = (additions) => {\n getContentWithAction(auth.getAccessToken(), 'fertility', 'newSet', {}).then((newSetId) => {\n if (!newSetId) return;\n saveSamplePoints(additions, newSetId);\n }).catch((c) => { setIsLoadingSamples(false) });\n }\n\n\n const saveSamplePoints = (additions, newSetId) => {\n var newSamplePoints = [];\n\n if (!!additions.forEach) {\n additions.forEach((sample) => {\n newSamplePoints.push({\n sampleSetId: newSetId != null && newSetId > 0 ? newSetId : sample.sampleSetId,\n basePlotId: sample.basePlotId,\n longitude: sample.coordinates ? parseInt(sample.coordinates.longitude) : 0,\n latitude: sample.coordinates ? parseInt(sample.coordinates.latitude) : 0,\n collected: 1\n });\n });\n }\n else {\n newSamplePoints.push({\n sampleSetId: newSetId != null && newSetId > 0 ? newSetId : additions.sampleSetId,\n basePlotId: additions.basePlotId,\n longitude: additions.coordinates ? parseInt(additions.coordinates.longitude) : 0,\n latitude: additions.coordinates ? parseInt(additions.coordinates.latitude) : 0,\n collected: 1\n });\n }\n\n const promise = new Promise((resolve, reject) => {\n postContentWithAction(auth.getAccessToken(), 'fertility', 'new', {\n models: newSamplePoints\n }, () => {\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n resolve(\"Promise resolved successfully\");\n }).catch(e => {\n alert.show(t('SavedFailed'), { type: 'error' });\n reject(Error(\"Promise rejected\"));\n });\n });\n\n if (newSetId) {\n promise.then(result => {\n handleFertilityAnalyses();\n }, reason => {\n console.error(reason); // Error!\n });\n }\n else\n return promise;\n }\n\n const updateSamplePoints = (updatables) => {\n var updatablePoints = [];\n\n if (!!updatables.forEach) {\n updatables.forEach((point) => {\n updatablePoints.push({\n sampleSetId: point.FieldNo,\n id: point.FeatureGeometryId,\n collected: point.FeatureType !== \"5312\" ? 1 : 0\n });\n });\n }\n else {\n updatablePoints.push({\n sampleSetId: updatables.FieldNo ? updatables.FieldNo : updatables.sampleSetId,\n id: updatables.FeatureGeometryId ? updatables.FeatureGeometryId : updatables.id,\n collected: updatables.FeatureType && updatables.FeatureType !== \"5312\" ? 1 :\n typeof updatables.collected === 'boolean' && !updatables.collected ? 1 : 0\n });\n }\n\n const promise = new Promise((resolve, reject) => {\n putContentWithActionFertility(auth.getAccessToken(), 'fertility', 'update', {\n models: updatablePoints\n }, () => {\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n resolve(\"Promise resolved successfully\");\n }).catch(e => {\n alert.show(t('SavedFailed'), { type: 'error' });\n reject(Error(\"Promise rejected\"));\n });\n });\n\n return promise;\n }\n\n const deleteSamplePoints = (deletables) => {\n var deletablePoints = [];\n\n if (!!deletables.forEach) {\n deletables.forEach((id) => {\n deletablePoints.push({\n id: id\n });\n });\n }\n else {\n deletablePoints.push({\n id: deletables\n });\n }\n\n const promise = new Promise((resolve, reject) => {\n postContentWithAction(auth.getAccessToken(), 'fertility', 'delete', {\n models: deletablePoints\n }, () => {\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n resolve(\"Promise resolved successfully\");\n }).catch(e => {\n alert.show(t('SavedFailed'), { type: 'error' });\n reject(Error(\"Promise rejected\"));\n });\n });\n\n return promise; \n }\n\n const deleteSampleSet = (ids) => {\n setIsLoadingSamples(true);\n var deletableSets = [];\n\n if (!!ids.forEach) {\n ids.forEach((set) => {\n deletableSets.push({\n sampleSetId: set\n });\n });\n }\n else {\n deletableSets.push({\n sampleSetId: ids\n });\n }\n\n const promise = new Promise((resolve, reject) => {\n postContentWithAction(auth.getAccessToken(), 'fertility', 'deleteSet', {\n models: deletableSets\n }, () => {\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n resolve(\"Promise resolved successfully\");\n }).catch(e => {\n alert.show(t('SavedFailed'), { type: 'error' });\n reject(Error(\"Promise rejected\"));\n });\n });\n\n promise.then(result => {\n handleFertilityAnalyses();\n }, reason => {\n console.error(reason); // Error!\n });\n }\n\n //const getDValue = () => {\n // var dValue = DValueData.length ? DValueData[0] : 0;\n // return dValue.dValue;\n //}\n\n const getHeatSum = () => {\n var sum = forecastData.latestTemp ? forecastData.latestTemp : 0;\n return sum.toFixed(0);\n }\n\n const getRainSum = () => {\n var sum = forecastData.latestRain ? forecastData.latestRain : 0;\n return sum.toFixed(0);\n }\n\n const formatPlantsGroup = (groups) => {\n let plantList = [];\n for (var g in groups) {\n\n let obj = { countId: groups[g].length, area: 0 };\n\n for (var p in groups[g]) {\n let plot = groups[g][p];\n obj.area += plot.area;\n obj.plantId = plot.plantId;\n obj.plantName = plot.plantName ? plot.plantName : 'Ei kasvia';\n }\n obj.area = Math.round(obj.area * 100) / 100;\n plantList.push(obj);\n\n }\n\n let sortedPlants = plantList.sort((a, b) => b.area - a.area);\n setPlants(sortedPlants);\n\n const view = getSelectedPlantsToView();\n if (!view.length) {\n const slice = plantList.slice(0, 6)\n setPlantsDraw(slice);\n setSelectedPlantsToView(slice);\n }\n else {\n let newList = []; // collect a list of changed plants\n view.forEach(f => {\n if (sortedPlants.some(s => s.plantId === f.plantId))\n newList.push(sortedPlants.find(s => s.plantId === f.plantId));\n\n });\n if (newList.length)\n setSelectedPlantsToView(newList);\n else\n setSelectedPlantsToView(sortedPlants.slice(0, 6));\n\n reload();\n }\n\n var element = document.getElementById('div-show-all-plants');\n if (element)\n element.classList.remove('d-none');\n };\n\n const formatPlotsGroup = (groups) => {\n let plotList = [];\n for (var g in groups) {\n if (!parseInt(g, 10) > 0) {\n continue;\n }\n let obj = { countId: groups[g].length, area: 0 };\n\n for (var p in groups[g]) {\n let plot = groups[g][p];\n obj.area += plot.area;\n obj.groupId = plot.groupId;\n obj.groupName = plot.groupName;\n }\n obj.area = Math.round(obj.area * 100) / 100;\n plotList.push(obj);\n }\n\n if (!plotList === null || plotList.length > 0) {\n\n let sortedplotList = plotList.sort(comparePlots);\n setPlots(sortedplotList);\n\n const view2 = getSelectedPlotsToView();\n if (!view2.length) {\n const slice2 = plotList.slice(0, 6)\n setPlotsDraw(slice2);\n setSelectedPlotsToView(slice2);\n }\n else {\n let newList = [];\n view2.forEach(f => {\n if (sortedplotList.some(s => s.groupId === f.groupId && s.groupName === f.groupName))\n newList.push(sortedplotList.find(s => s.groupId === f.groupId && s.groupName === f.groupName));\n });\n if (newList.length)\n setSelectedPlotsToView(newList);\n else\n setSelectedPlotsToView(sortedplotList.slice(0, 6));\n\n reload2();\n }\n\n setVisible(true)\n }\n else {\n setVisible(false)\n }\n\n var element = document.getElementById('div-show-all-plots');\n if (element)\n element.classList.remove('d-none');\n };\n\n const formatMemos = (memos) => {\n let sortedMemoList = memos.sort((a, b) => new Date(b.memoDate) - new Date(a.memoDate))\n setMemos(sortedMemoList);\n setMemosDraw(sortedMemoList.slice(0, 3));\n\n var element = document.getElementById('div-show-all-memos');\n if (element)\n element.classList.remove('d-none');\n };\n\n const formatFertility = (groups) => {\n let collectedSampleList = [];\n let plannedSampleList = [];\n\n for (var g in groups) {\n\n let sampleList = [];\n\n let obj = { plotCount: new Set(groups[g].samples.map(item => item.basePlotId)).size, sampleCount: groups[g].samples.length, id: groups[g].id, sampleDate: groups[g].sampleDate };\n\n for (var p in groups[g].samples) {\n let sample = groups[g].samples[p];\n sampleList.push(sample)\n }\n obj.samples = sampleList;\n\n if (groups[g].collected === true)\n collectedSampleList.push({ ...obj, samples: sampleList });\n else\n plannedSampleList.push({ ...obj, samples: sampleList });\n }\n\n if (collectedSampleList.length) {\n let sortedSampleSets = collectedSampleList.sort((a, b) => new Date(b.sampleDate) - new Date(a.sampleDate));\n setSampleSetsCollected(sortedSampleSets);\n const slice = sortedSampleSets.slice(0, 1)\n setSampleSetCollectedDraw(slice);\n if (sampleSetListModal) {\n if (collected) {\n const temp = selectSampleSetEvent.selectedElement.id;\n if (sortedSampleSets.find(x => x.id === temp))\n setSelectSampleSetEvent({ time: Date.now(), selectedElement: sortedSampleSets.find(x => x.id === temp) });\n else\n setSelectSampleSetEvent({ time: null, selectedElement: null });\n }\n }\n if (sampleSetModalShow) {\n if (collected) {\n const temp = selectSampleSetEvent.selectedElement.id;\n if (sortedSampleSets.find(x => x.id === temp))\n setSelectSampleSetEvent({ time: Date.now(), selectedElement: sortedSampleSets.find(x => x.id === temp) });\n else\n setSampleSetModalShow(false);\n }\n }\n }\n\n if (plannedSampleList.length) {\n let sortedSampleSets = plannedSampleList.sort((a, b) => new Date(a.sampleDate) - new Date(b.sampleDate));\n setSampleSetsPlanned(sortedSampleSets);\n const slice = sortedSampleSets.slice(0, 1)\n setSampleSetPlannedDraw(slice);\n if (sampleSetModalShow) {\n if (!collected) {\n const temp = selectSampleSetEvent.selectedElement.id;\n if (sortedSampleSets.find(x => x.id === temp))\n setSelectSampleSetEvent({ time: Date.now(), selectedElement: sortedSampleSets.find(x => x.id === temp) });\n else\n setSampleSetModalShow(false);\n }\n }\n }\n if (!plannedSampleList.length && !collected) {\n setSampleSetModalShow(false);\n setSampleSetsPlanned([]);\n setSampleSetPlannedDraw([]);\n }\n };\n\n const comparePlots = (a, b) => {\n if (a.area < b.area) {\n return 1;\n }\n if (a.area > b.area) {\n return -1;\n }\n if (a.area === b.area) {\n if (a.groupName > b.groupName) {\n return 1;\n }\n if (a.groupName < b.groupName) {\n return -1;\n }\n }\n return 0;\n };\n\n const getMemoText = (button) => {\n return button.memo;\n };\n\n const InventoryButtonGroup = ({ items }) => {\n if (!items || items.length === 0) return <>;\n items.forEach(b => {\n if (b.propertyType === 2) {\n b.storageName = t('Inventory_Seeds');\n }\n else if (b.propertyType === 3) {\n b.storageName = t('Inventory_Fertilizers');\n }\n else if (b.propertyType === 4) {\n b.storageName = t('Inventory_Pesticides');\n }\n else {\n // Harvests\n if (b.propertyType === 5 && b.purchaseProducts.length > 0) {\n var productName = b.purchaseProducts[0].name ?? '';\n b.harvestProduct = productName.length > 20 ? productName.substr(0, 20) + '...' : productName;\n }\n\n // Shorten name if too long\n b.storageName = b.name && b.name.length > 20 ? b.name.substr(0, 20) + '...' : b.name;\n }\n });\n\n return (\n <>\n {items.map((button, i) => (\n {\n setSelectStorageEvent({ time: Date.now(), selectedElement: button });\n setStorageInfoShow(true);\n }}\n className={\"customButton\"}>\n
\n {button.storageName}\n
\n {button.purchaseProducts.length}\n
\n {button.harvestProduct}\n
\n \n ))}\n \n )\n }\n\n const ButtonGroup2 = ({ buttons }) => {\n\n buttons.forEach(b => {\n b.plantNameShort = b.plantName && b.plantName.length > 9 ? b.plantName.substr(0, 9) + '...' : b.plantName;\n });\n\n return (\n <>\n {buttons.map((button, i) => (\n buttonClick(event)}\n className={\"customButton\"}>\n
\n {button.plantNameShort}\n
\n {button.countId || 0}\n
\n {button.area || 0} ha \n
\n \n ))}\n \n );\n };\n const buttonClick = (event) => {\n var plant = plants.find(p => Number(p.plantId) === Number(event.currentTarget.value));\n var plantName = plant && plant.plantName ? plant.plantName : '';\n removeSelectedPlantId();\n removeSelectedPlotGroupId();\n props.history.push('plots', { id: event.currentTarget.value, plantName: plantName });\n };\n\n const buttonShowMoreClick = () => {\n plants.sort((a, b) => b.area - a.area);\n setPlantModal(true)\n setShowChoiceModal(true)\n };\n\n const ButtonGroup3 = ({ buttons }) => {\n\n buttons.forEach(b => {\n b.groupNameShort = b.groupName && b.groupName.length > 9 ? b.groupName.substr(0, 9) + '...' : b.groupName;\n });\n\n return (\n <>\n {buttons.map((button, i) => (\n buttonClick2(event)}\n className={\"customButton\"}>\n
\n {button.groupNameShort}\n
\n {button.countId || 0}\n
\n {button.area || 0} ha \n
\n \n ))}\n \n );\n };\n const buttonClick2 = (event) => {\n removeSelectedPlantId();\n removeSelectedPlotGroupId();\n props.history.push('plots', { groupId: event.currentTarget.value });\n };\n\n const buttonShowMoreClick2 = () => {\n plots.sort((a, b) => b.area - a.area);\n setPlotModal(true)\n setShowChoiceModal(true)\n };\n\n const memoHasAttachment = (memo) => {\n var item = memoAttachments.find(m => m.memoId === memo.memoId);\n if (item) return true;\n return false;\n }\n\n const ButtonGroup4 = ({ buttons }) => {\n\n buttons.forEach(b => {\n b.groupNameShort = b.plotName ? b.plotName : t('Common');\n });\n\n return (\n <>\n {memoAttachmentsLoaded ? buttons.map((button, i) => (\n {\n setMemoType(button.plantMemoType);\n setSelectMemoEvent({ time: Date.now(), selectedElement: button });\n setMemoModalShow(true);\n }}\n className={\"homeMemoButton\"}>\n
\n
\n {memoHasAttachment(button) ?\n \n : ''}\n
\n
{getMemoText(button)}
\n
{button.explanation}
\n
{button.groupNameShort}, {dayJsFormatDate(button.memoDate)}
\n
\n \n )) : ''}\n \n );\n };\n\n const getButtonDValue = (dData) => {\n if (dData === undefined || !dData || dData.length === 0) return null;\n\n var dValueCard = dData[0];\n dData.forEach(d => {\n if (d.dValue < dValueCard.dValue) // Find smallest d-value\n dValueCard = d;\n });\n\n return dValueCard.dValue;\n };\n\n const setGrowthStageCardData = (gData) => {\n if (!gData || gData.length === 0) return;\n\n var barleyData = gData.filter(d => d.plantId.startsWith(\"13\"));\n if (barleyData.length > 0) {\n var growthStageCard = barleyData[0];\n barleyData.forEach(d => {\n if (d.growthStage > growthStageCard.growthStage) // Find highest growthStage\n growthStageCard = d;\n });\n setBarleyStageCard(growthStageCard);\n }\n else setBarleyStageCard(null);\n\n var wheatData = gData.filter(d => d.plantId.startsWith(\"11\"));\n if (wheatData.length > 0) {\n growthStageCard = wheatData[0];\n wheatData.forEach(d => {\n if (d.growthStage > growthStageCard.growthStage) // Find highest growthStage\n growthStageCard = d;\n });\n setWheatStageCard(growthStageCard);\n }\n else setWheatStageCard(null);\n\n var oatData = gData.filter(d => d.plantId.startsWith(\"14\"));\n if (oatData.length > 0) {\n growthStageCard = oatData[0];\n oatData.forEach(d => {\n if (d.growthStage > growthStageCard.growthStage) // Find highest growthStage\n growthStageCard = d;\n });\n setOatStageCard(growthStageCard);\n }\n else setOatStageCard(null);\n };\n\n const shortenText = (text) => {\n return text && text.length > 11 ? text.substr(0, 11) + '.' : text;\n }\n\n const buttonShowMoreClick3 = () => {\n memos.sort((a, b) => b.memoDate - a.memoDate);\n setMemoListModal(true)\n };\n\n //Collected sample sets\n\n const ButtonSampleSetCollected = ({ buttons }) => {\n\n return (\n <>\n {buttons.map((button, i) => (\n {\n setSelectSampleSetEvent({ time: Date.now(), selectedElement: button });\n setCollected(true);\n setSampleSetModalShow(true);\n }}\n className={\"customButton\"}>\n
\n {t('SampleSetsCollected')}\n
\n {button.plotCount} \n
\n {dayJsFormatDate(button.sampleDate)}\n
\n \n ))}\n \n );\n }; \n\n //Planned sample sets\n\n const ButtonSampleSetPlanned = ({ buttons }) => {\n\n return (\n <>\n {buttons.map((button, i) => (\n {\n setSelectSampleSetEvent({ time: Date.now(), selectedElement: button });\n setCollected(false);\n setSampleSetModalShow(true);\n }}\n className={\"customButtonPlanned\"}>\n
\n {t('SamplePlan')}\n
\n {button.plotCount} \n
\n {dayJsFormatDate(button.sampleDate)}\n
\n \n ))}\n \n );\n };\n\n const buttonShowMoreSampleSetsCollected = () => {\n setSampleSetListModal(true); \n };\n\n return (\n \n \n\n {errorText ?\n
{t('NoRights')}\n  \n \n
\n : ''\n }\n\n \n \n {!errorText ?\n
\n
{FarmIdToView(getSelectedFarmId())} - {getSelectedFarmName()}
\n
{getSelectedYear()}
\n
\n : ''\n }\n\n
\n \n
{t('Plants')}
\n
\n {(isLoading) ? : ''}\n
\n \n
\n\n {noPlots ?\n
{t('PlotDataNotFound')}
\n :\n
\n {sessionResult ? \n \n : ''}\n
\n }\n
\n
\n \n \n
\n \n
{t('Plotgroups')}
\n
\n {(isLoading) ? : ''}\n
\n \n
\n
\n {sessionResult ? \n \n : ''}\n
\n
\n
\n\n {/* --- Forecasts --- */}\n {auth.showForecasts() ?\n \n \n
\n \n
{t('Forecast')}
\n
\n
\n
{getSelectedForecastStation().stationId === -1 || getSelectedHistoryStation().stationId === -1 ? t('ForecastStation_SelectionError') : ''}
\n
\n {/* --- Sums --- */}\n {\n setChartModalData(forecastData);\n setChartModalMode(chartMode.temperatureSum);\n setChartModalShow(true);\n }}\n className={\"customButton\"}>\n
\n {t('Forecast_HeatSum')}\n
\n {forecastIsLoading ? :\n {getHeatSum()} °C\n }\n
\n \n {\n setChartModalData(forecastData);\n setChartModalMode(chartMode.rainSum);\n setChartModalShow(true);\n }}\n className={\"customButton\"}>\n
\n {t('Forecast_RainSum')}\n
\n {forecastIsLoading ? :\n {getRainSum()} mm\n }\n
\n \n\n {/* --- D-Value --- */}\n { dValueIsLoading || getButtonDValue(DValueData) ? \n {\n setdValueListModalShow(true);\n }}\n className=\"customButton\">\n
\n {t('DValue')}\n
\n {(dValueIsLoading) ? : {getButtonDValue (DValueData)} }\n
\n \n : ''}\n\n {/* --- GrowthStage --- */}\n { growthStageIsLoading || barleyStageCard ? \n {\n setGrowthStageListModalShow(true);\n setGrowthStageListModalData(growthStageData.filter(d => d.plantId.startsWith(\"13\")));\n }}\n className=\"customButton\">\n
\n {t('Plant_Barley')}\n
\n {(growthStageIsLoading) ? \n :
\n
\n
{barleyStageCard && barleyStageCard.growthStage != -1 ? barleyStageCard.growthStage : ''}
\n
{barleyStageCard ? shortenText(getGrowthStageText (barleyStageCard.growthStage, t)) : ''}
\n
\n
{barleyStageCard && barleyStageCard.harvest ? dayJsFormatDate(barleyStageCard.harvest) : ''}
\n
\n }\n
\n \n : ''}\n\n { growthStageIsLoading || wheatStageCard ?\n {\n setGrowthStageListModalShow(true);\n setGrowthStageListModalData(growthStageData.filter(d => d.plantId.startsWith(\"11\")));\n }}\n className=\"customButton\">\n
\n {t('Plant_Wheat')}\n
\n {(growthStageIsLoading) ? \n :
\n
\n
{wheatStageCard && wheatStageCard.growthStage != -1 ? wheatStageCard.growthStage : ''}\n
{wheatStageCard ? shortenText(getGrowthStageText (wheatStageCard.growthStage, t)) : ''}
\n
\n
{wheatStageCard && wheatStageCard.harvest ? dayJsFormatDate (wheatStageCard.harvest) : ''}
\n
\n }\n
\n \n : ''}\n\n { growthStageIsLoading || oatStageCard ?\n {\n setGrowthStageListModalShow(true);\n setGrowthStageListModalData(growthStageData.filter(d => d.plantId.startsWith(\"14\")));\n }}\n className=\"customButton\">\n
\n {t('Plant_Oat')}\n
\n {(growthStageIsLoading) ? \n :
\n
\n
{oatStageCard && oatStageCard.growthStage != -1 ? oatStageCard.growthStage : ''} \n
{oatStageCard ? shortenText(getGrowthStageText (oatStageCard.growthStage, t)) : ''}
\n
\n
{oatStageCard && oatStageCard.harvest ? dayJsFormatDate (oatStageCard.harvest) : ''}
\n
\n }\n
\n \n : ''}\n\n
\n
\n \n \n : ''}\n {/* --- END OF Forecasts */}\n\n {/* STORAGES & INVENTORY (WISUPRO) */} \n \n \n
\n \n
{t('Inventory_Storages')}
\n
\n\n {(storageLoading) ? :\n <>\n {proMode ?\n <>\n {storageManagementAccess ?\n
\n \n
\n :
{t('Inventory_Activation_Message')}
}\n\n
\n \n
\n \n :
{t('WisuPro_Upgrade')}
}\n \n }\n
\n
\n\n \n \n
\n \n
{t('Notes')}
\n
\n {(isLoadingMemos) ? : ''}\n
\n {(isLoadingMemos) ? '' : }\n
\n
\n {(isLoadingMemos) ? '' : }\n
\n
\n
\n \n \n
\n \n
{t('Fertility')}
\n
\n {(isLoadingSamples) ? : ''}\n
\n \n \n
\n
\n
\n {(isLoadingSamples || !sessionResult) ? '' :\n noSampleSets ?\n \n :\n \n }\n
\n
\n
\n
\n {showChoiceModal === true ?\n {\n handleCloseModal();\n setShowChoiceModal(false);\n }}\n />\n : ''}\n {memoModalShow === true ?\n setMemoModalShow(false)}\n setRefresh={() => handleCloseModal()}\n baseplotid={selectMemoEvent.basePlotId}\n selectEvent={selectMemoEvent}\n />\n : ''}\n {memoListModal === true ?\n {\n setMemoListModal(false);\n handleCloseModal();\n }}\n memos={memos}\n />\n : ''}\n {sampleSetModalShow === true ?\n {\n setSampleSetModalShow(false);\n handleCloseModal();\n }}\n collected={collected}\n selectEvent={selectSampleSetEvent}\n refreshAndHandleOperationsSamples={(operations) => {\n if (operations.length)\n handleOperations(operations);\n }}\n refreshAndHandleOperationsSet={(operation) => {\n if (operation) {\n deleteSampleSet(operation);\n }\n }}\n allowSave={sessionResult}\n />\n : ''}\n {sampleSetListModal === true ?\n {\n setSampleSetListModal(false);\n handleCloseModal();\n }}\n sampleSetsCollected={sampleSetsCollected}\n sampleSetsPlanned={sampleSetsPlanned}\n collected={collected}\n refreshAndHandleOperationsSamples={(operations) => {\n if (operations.length)\n handleOperations(operations);\n }}\n refreshAndHandleOperationsSet={(...operations) => {\n if (operations[0]) {\n saveSampleSet(operations[0]);\n }\n if (operations[1]) {\n deleteSampleSet(operations[1]);\n }\n }}\n />\n : ''}\n {mapModal === true ?\n {\n setMapModalShow(false);\n if (newSamplePoints) {\n saveSampleSet(newSamplePoints);\n }\n }}\n />\n : ''}\n {dValueListModalShow === true ?\n {\n setdValueListModalShow(false);\n }}\n />\n : ''}\n {growthStageListModalShow === true ?\n {\n setGrowthStageListModalShow(false);\n }}\n />\n : ''}\n {chartModalShow === true ?\n {\n setChartModalShow(false);\n }}\n />\n : ''}\n {inventoryModalShow === true ? \n {\n // RELOAD STORAGES\n setIsLoading(true);\n var farmId = getSelectedFarmId();\n var year = getSelectedYear();\n var lang = getSelectedLang();\n getContentWithAction(auth.getAccessToken(), 'plotOperation', 'getMMWisuStorages', { farmId, year, lang }).then((storageObject) => {\n if (storageObject && storageObject.storages) {\n setStorages(storageObject.storages);\n }\n setIsLoading(false);\n }).catch(() => {\n setIsLoading(false);\n });\n }}\n onHide={() => {\n setInventoryModalShow(false);\n }}\n />\n : ''}\n {storageInfoShow === true ?\n {\n setStorageInfoShow(false);\n }}\n />\n : ''}\n \n );\n}\n\nexport default Farm;\n\n","import React from 'react';\nimport Badge from 'react-bootstrap/Badge';\nimport ListGroup from 'react-bootstrap/ListGroup';\nimport Spinner from 'react-bootstrap/Spinner';\n\nimport { taskViewer_viewComponents, taskViewer_taskStatuses } from './../../constants';\n\nconst TaskTypeSelectionListItem = (props) => {\n\n const allCompleted = (operations) => {\n return operations.every((operation) => {\n return operation.taskStatus === taskViewer_taskStatuses.completed\n })\n }\n\n const somePaused = (operations) => {\n return operations.some((operation) => {\n return operation.taskStatus === taskViewer_taskStatuses.paused || operation.taskStatus === taskViewer_taskStatuses.running || operation.taskStatus === taskViewer_taskStatuses.endUnfinished\n })\n }\n\n const resolveBadgeColor = (operations) => {\n\n if (operations.length === 0 || allCompleted(operations)) return \"secondary\";\n else if (somePaused(operations)) return \"warning\";\n else return \"success\"\n \n }\n\n return (\n props.callBack({ viewComponent: taskViewer_viewComponents.tasks, data: { taskType: props.taskType, dataArray: props.taskList } })}\n disabled={(props.taskList.length === 0 || allCompleted(props.taskList)) ? \"disabled\" : \"\"}\n >\n {props.name}\n {(props.isLoading) ? : ''}\n {props.taskList.length}\n \n )\n}\n\nexport default TaskTypeSelectionListItem;","import React, { useState, useEffect, useContext } from 'react';\nimport Card from 'react-bootstrap/Card';\nimport ListGroup from 'react-bootstrap/ListGroup'\nimport { Container } from 'reactstrap';\nimport { useTranslation } from 'react-i18next';\nimport NavMenu from '../NavMenu';\nimport TaskTypeSelectionListItem from './TaskTypeSelectionListItem';\nimport AppContext from '../../AppContext';\nimport { getContentWithAction } from '../../apiConnect';\n\nconst TaskTypeSelection = (props) => {\n const { t } = useTranslation();\n const { auth } = useContext(AppContext);\n\n const [taskList, setTaskList] = useState({ fertilizations: [], sowingFertilizations: [], plantProtections: [], soilTillages: [] });\n const [isLoading, setIsLoading] = useState(true);\n\n const dataCallbackHandler = (data) => {\n setTaskList(data);\n setIsLoading(false);\n }\n\n useEffect(() => {\n getContentWithAction(auth.getAccessToken(), 'taskViewer', 'list', {}).then(dataCallbackHandler);\n }, []);\n\n const taskTypeResolver = (taskList) => {\n return (taskList.length > 0) ? taskList[0].taskType : 0;\n }\n\n return (\n \n \n \n \n {t('SelectTaskType')}\n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default TaskTypeSelection;\n\n","import React from 'react';\nimport Card from 'react-bootstrap/Card';\nimport ListGroup from 'react-bootstrap/ListGroup';\nimport { Container } from 'reactstrap';\nimport { useTranslation } from 'react-i18next';\n\nimport NavMenu from '../NavMenu';\n\nimport { taskViewer_viewComponents, taskViewer_taskStatuses } from './../../constants';\n\nconst Tasks = (props) => {\n const { t } = useTranslation();\n\n const getTaskTypeName = (taskType) => {\n if (taskType === 1) {\n return t('Fertilizing');\n }\n if (taskType === 2) {\n return t('SowingFertilization');\n }\n if (taskType === 3) {\n return t('PlantProtection');\n }\n if (taskType === 4) {\n return t('SoilTillage');\n }\n }\n\n const getVariant = (task) => {\n if (task.taskStatus === taskViewer_taskStatuses.planned) {\n return \"success\";\n } else if (task.taskStatus === taskViewer_taskStatuses.paused || task.taskStatus === taskViewer_taskStatuses.running || task.taskStatus === taskViewer_taskStatuses.endUnfinished) {\n return \"warning\";\n } else {\n return undefined;\n }\n }\n\n return (\n \n \n \n \n {t('SelectTaskType')} {getTaskTypeName(props.data.taskType)}\n \n \n {t('SelectAgrPlot')}\n \n {props.data.dataArray.map(task =>\n props.callBack({ viewComponent: taskViewer_viewComponents.taskRunner, data: task })}\n disabled={(task.taskStatus === taskViewer_taskStatuses.completed) ? \"disabled\" : \"\"}\n variant={getVariant(task)}\n >\n
{task.plotDesignator}
\n
{task.taskName}
\n
{task.products[0]}
\n \n )}\n
\n
\n
\n
\n );\n}\n\nexport default Tasks;","import React, { useContext } from 'react';\nimport Card from 'react-bootstrap/Card';\nimport Button from 'react-bootstrap/Button';\nimport { Container } from 'reactstrap';\nimport { useTranslation } from 'react-i18next';\n\nimport NavMenu from '../NavMenu';\n\nimport { taskViewer_viewComponents } from './../../constants';\nimport AppContext from '../../AppContext';\nimport { enableGPS } from '../../gps';\n\nconst GPS = (props) => {\n const { setGeolocation, setMapInitCoordinates } = useContext(AppContext);\n const { t } = useTranslation();\n \n const onClickHandler = () => {\n enableGPS(redirect)\n }\n\n const redirect = (geo, mapInitPosition) => {\n setMapInitCoordinates(mapInitPosition);\n setGeolocation(geo); \n props.callBack({ viewComponent: taskViewer_viewComponents.taskTypeSelection, data: [] });\n }\n\n return (\n \n \n \n {t('GPSDevice')}\n \n \n \n \n \n );\n}\n\nexport default GPS;","import React, { useState } from 'react';\nimport { Modal, ListGroup, Button } from 'react-bootstrap';\nimport { useTranslation } from 'react-i18next';\n\nimport { taskViewer_taskStatuses, taskViewer_stopComponents } from './../../constants';\n\nconst StopSelectForm = (props) => {\n const { t } = useTranslation();\n const [show, setShow] = useState(true);\n\n return (\n setShow(false)}>\n \n {t('EndTaskDialogue')}\n \n \n \n { props.stopComponentCallBack(taskViewer_stopComponents.endTaskFinished) }} >\n {t('EndTask')}\n \n { props.stopComponentCallBack(taskViewer_stopComponents.endUnfinishedContinueLater) }} >\n {t('PauseTaskContinueLater')}\n \n \n \n \n \n \n \n );\n}\n\nexport default StopSelectForm;","import React from 'react';\nimport { Form, Col, Modal, Button, ListGroup } from 'react-bootstrap';\nimport { useTranslation } from 'react-i18next';\n\nimport { taskViewer_stopComponents } from './../../constants';\n\nconst EndFinishedTask = (props) => {\n\n const { t } = useTranslation();\n\n const taskTypeTextMapping = {\n 1: 'Fertiliser',\n 3: 'Pesticide',\n 4: 'SoilTillage'\n }\n\n const createFormElements = () => {\n if (props.taskSpecificData.taskType === 2) {\n return (\n <>\n
\n \n {t('Fertiliser')}\n \n \n \n {props.taskSpecificData.products[1].productDesignator}\n \n \n \n \n \n {props.taskSpecificData.products[1].unitDesignator}\n \n \n
\n
\n \n {t('Seed')}\n \n \n \n {props.taskSpecificData.products[0].productDesignator}\n \n \n \n \n \n {props.taskSpecificData.products[0].unitDesignator}\n \n \n
\n \n );\n } else {\n return (\n
\n \n {t(taskTypeTextMapping[props.taskSpecificData.taskType])}\n \n \n \n {props.taskSpecificData.products[0].productDesignator}\n \n \n \n \n \n {props.taskSpecificData.products[0].unitDesignator}\n \n \n
\n );\n } \n }\n\n return (\n props.returnCallback(taskViewer_stopComponents.stopSelectionForm)}>\n \n {t('Plot')}: {props.taskSpecificData.plotDesignator}\n \n \n {createFormElements()}\n
\n -\n \n \n {t('DateLong')}\n \n \n \n \n \n \n \n \n
\n
\n \n \n props.returnCallback(taskViewer_stopComponents.stopSelectionForm)}\n variant={\"danger\"}\n style={{ border: \"none\" }}\n >\n {t('Back')}\n \n props.returnCallback(taskViewer_stopComponents.endTaskFinished)}\n variant={\"success\"}\n style={{ border: \"none\" }}\n >\n {t('Pass')}\n \n props.returnCallback(taskViewer_stopComponents.showDataForFinishedTask)}\n variant={\"success\"}\n style={{ border: \"none\" }}\n >\n {t('Continue')}\n \n \n \n
\n );\n}\n\nexport default EndFinishedTask;","import React, { useState, useEffect, useContext } from 'react';\nimport { Row, Col, Modal, Button } from 'react-bootstrap';\nimport { useTranslation } from 'react-i18next';\nimport AppContext from '../../AppContext';\n\nimport { taskViewer_stopComponents } from './../../constants';\nimport { getContentWithAction } from '../../apiConnect';\n\nconst Summary = (props) => {\n const { t } = useTranslation();\n const { auth } = useContext(AppContext);\n\n const [show, setShow] = useState(false);\n const [data, setData] = useState({});\n\n useEffect(() => {\n getContentWithAction(auth.getAccessToken(), 'taskViewer', 'task/details', { taskId: props.taskId }).then(dataCallbackHandler);\n }, [props.taskId]);\n\n const dataCallbackHandler = (data) => {\n setData(data);\n setShow(true);\n }\n\n return (\n setShow(false)}>\n \n {t('SummaryEndTask')}\n \n \n \n \n {t('TimePassed')}:\n \n \n {data.totalTime ? data.totalTime : '00:00'} {t('UnitHour')}\n \n \n \n \n {t('ActiveWorkingTime')}:\n \n \n {data.effectiveTime ? data.effectiveTime : '00:00'} {t('UnitHour')}\n \n \n \n \n {t('DistanceDriven')}:\n \n \n {data.totalDistance ? data.totalDistance : '0'} {t('UnitKm')}\n \n \n \n \n \n \n \n );\n}\n\nexport default Summary;","import React, { useState } from 'react';\n\nimport StopSelectFrom from './StopSelectForm';\nimport EndFinishedTask from './EndFinishedTask';\nimport Summary from './Summary';\n\nimport { taskViewer_taskStatuses, taskViewer_stopComponents } from './../../constants';\n\nconst Stop = (props) => {\n const [stopComponent, setStopComponent] = useState(taskViewer_stopComponents.stopSelectionForm);\n\n const stopComponentSetter = (component) => {\n setStopComponent(component);\n }\n\n const StopComponentSelector = () => {\n switch (stopComponent) {\n case (taskViewer_stopComponents.stopSelectionForm):\n return ;\n case (taskViewer_stopComponents.endTaskFinished):\n return \n case (taskViewer_stopComponents.endTaskMarkDone):\n return \n case (taskViewer_stopComponents.showDataForFinishedTask):\n return \n case (taskViewer_stopComponents.endUnfinishedContinueLater):\n props.callBack(taskViewer_taskStatuses.endUnfinished);\n break;\n case (taskViewer_stopComponents.finish):\n props.callBack(taskViewer_taskStatuses.ended);\n break;\n default:\n }\n }\n\n return (\n <>\n {StopComponentSelector()}\n \n );\n}\n\nexport default Stop;","import React, { useState, useEffect } from 'react';\nimport { Card } from 'react-bootstrap';\nimport { useTranslation } from 'react-i18next';\n\nimport { taskViewer_taskStatuses } from './../../constants';\nimport Stop from './Stop';\nimport '../../css/taskviewer.css';\n\nconst TaskViewerMapFooter = (props) => {\n const { t } = useTranslation();\n const [runState, setRunState] = useState(taskViewer_taskStatuses.planned);\n const [showStopDialogue, setShowStopDialogue] = useState(false);\n\n useEffect(() => {\n props.sendStatusToMap(runState);\n }, [props, runState]);\n\n const determineStartPauseText = () => {\n if (runState === taskViewer_taskStatuses.planned) {\n return t('Start');\n } else if (runState === (taskViewer_taskStatuses.paused || taskViewer_taskStatuses.endUnfinished || taskViewer_taskStatuses.ended)) {\n return t('Continue');\n } else {\n return t('Pause');\n }\n }\n\n const determineStartPauseColor = () => {\n if (runState === taskViewer_taskStatuses.planned) {\n return 'start';\n } else {\n return 'pause';\n }\n }\n\n const startPause = () => {\n switch (runState) {\n case taskViewer_taskStatuses.planned:\n setRunState(taskViewer_taskStatuses.running);\n break;\n case taskViewer_taskStatuses.running:\n setRunState(taskViewer_taskStatuses.paused);\n break;\n case taskViewer_taskStatuses.paused:\n setRunState(taskViewer_taskStatuses.running);\n break;\n default:\n }\n }\n\n const stopButtonClick = () => {\n setRunState(taskViewer_taskStatuses.paused);\n setShowStopDialogue(true);\n }\n\n const setStateFromStopDialogue = (state) => {\n setRunState(state);\n setShowStopDialogue(false);\n }\n\n const setHideStop = () => {\n setShowStopDialogue(false);\n }\n\n const showHideStop = () => {\n if (showStopDialogue) {\n return ;\n } else {\n return
\n }\n }\n\n const determineTaskAmountStyle = () => {\n if (runState === (taskViewer_taskStatuses.paused || taskViewer_taskStatuses.endUnfinished || taskViewer_taskStatuses.ended)) {\n return 'task-amount-disabled';\n } else {\n return '';\n }\n }\n\n return (\n <>\n startPause()}>\n \n {determineStartPauseText()}\n \n \n \n \n {props.currentTaskAmount === -1 ? '--' : props.currentTaskAmount + ' ' + props.currentTaskUnit}\n \n \n stopButtonClick()}>\n \n {t('Stop')}\n \n \n {showHideStop()}\n \n );\n}\n\nexport default TaskViewerMapFooter;","import React, { useState }from 'react';\nimport { Card, Row, Col } from 'react-bootstrap';\nimport { useTranslation } from 'react-i18next';\nimport '../../css/taskviewer.css';\n\nconst TaskViewerMapHeader = (props) => {\n const { t } = useTranslation();\n\n // Seeding-fertilizing states\n const [seedFertFertilizing, setSeedFertFertilizing] = useState('fertilizing-header');\n const [seedFertSeeding, setSeedFertSeeding] = useState('seeding-inactive-header');\n\n // To find the correct resource text\n const taskTypeTextMapping = {\n 1: 'Fertiliser',\n 2: 'Seed',\n 3: 'Pesticide',\n 4: 'SoilTillage'\n }\n\n const seedingFertilizingClick = (taskSelection) => {\n if (taskSelection === 1) {\n setSeedFertFertilizing('fertilizing-header');\n setSeedFertSeeding('seeding-inactive-header');\n } else if (taskSelection === 2) {\n setSeedFertFertilizing('fertilizing-inactive-header');\n setSeedFertSeeding('seeding-header');\n }\n props.switchGridLayer(taskSelection);\n }\n\n const generateTopInfo = () => {\n if (props.taskSpecificData.taskType == 2) {\n // Seeding-fertilizing. First item in product array is the sow data, the 2nd is fertilizing\n let sowData = props.taskSpecificData.products[0];\n let fertData = props.taskSpecificData.products[1];\n return (\n \n \n seedingFertilizingClick(1)}>\n
{t('Fertiliser')}
\n
{fertData.productDesignator}
\n
{t('OnAverage') + ' ' + fertData.averageAmount + ' ' + fertData.unitDesignator}
\n \n seedingFertilizingClick(2)}>\n
{t('Seed')}
\n
{sowData.productDesignator}
\n
{t('OnAverage') + ' ' + sowData.averageAmount + ' ' + sowData.unitDesignator}
\n \n
\n
\n );\n } else if (props.taskSpecificData.taskType == 1) {\n return (\n \n
{t(taskTypeTextMapping[props.taskSpecificData.taskType])}
\n
{props.taskSpecificData.products[0].productDesignator}
\n
{t('OnAverage') + ' ' + props.taskSpecificData.products[0].averageAmount + ' ' + props.taskSpecificData.products[0].unitDesignator}
\n
\n );\n } else if (props.taskSpecificData.taskType == 3) {\n return (\n \n
{t(taskTypeTextMapping[props.taskSpecificData.taskType])}
\n
{props.taskSpecificData.products[0].productDesignator}
\n
{t('OnAverage') + ' ' + props.taskSpecificData.products[0].averageAmount + ' ' + props.taskSpecificData.products[0].unitDesignator}
\n
\n );\n } else {\n return (\n \n
{t(taskTypeTextMapping[props.taskSpecificData.taskType])}
\n
{props.taskSpecificData.products[0].productDesignator}
\n
{t('OnAverage') + ' ' + props.taskSpecificData.products[0].averageAmount + ' ' + props.taskSpecificData.products[0].unitDesignator}
\n
\n );\n }\n }\n\n return (\n <>\n {generateTopInfo()}\n \n );\n}\n\nexport default TaskViewerMapHeader;","import VectorSource from 'ol/source/Vector';\nimport VectorLayer from 'ol/layer/Vector';\nimport GeoJSON from 'ol/format/GeoJSON';\nimport { Stroke, Style } from 'ol/style';\n\n// From database\nexport const addMapRoute = (routeGeometry) => {\n let routeStyle = new Style({\n stroke: new Stroke({\n color: 'black',\n lineDash: [3],\n width: 5\n })\n });\n\n let features = [];\n if (routeGeometry) {\n features = new GeoJSON().readFeatures(routeGeometry, {\n dataProjection: 'EPSG:4326',\n featureProjection: 'EPSG:3857'\n })\n }\n\n let vectorSource = new VectorSource({\n features: features\n });\n\n let vectorLayer = new VectorLayer({\n source: vectorSource,\n style: routeStyle,\n zIndex: 1\n });\n\n return vectorLayer;\n};","import React, { useState, useEffect, useContext, useRef } from 'react';\nimport OlMap from 'ol/Map';\nimport View from 'ol/View';\nimport { defaults as defaultInteractions } from 'ol/interaction';\nimport * as proj from 'ol/proj';\n\nimport 'ol/ol.css';\n\nimport AppContext from '../../AppContext';\nimport TaskViewerMapFooter from './TaskViewerMapFooter';\nimport TaskViewerMapHeader from './TaskViewerMapHeader';\nimport { taskViewer_taskStatuses, taskViewer_viewComponents } from '../../constants';\n\nimport { addMapBaseLayer } from '../../Map/addMapBaseLayer';\nimport { addMapTaskGrid, checkCoordsInsideGridPolygon } from '../../Map/addMapTaskGrid';\nimport { addMapPartfieldGeometry } from '../../Map/addMapPartfieldGeometry';\nimport { addMapPosition, updateMapPosition } from '../../Map/addMapPosition';\nimport { addMapRoute } from '../../Map/addMapRoute';\nimport { startSimulateGPS } from '../../gps.js';\n\nimport { getContentWithAction, postContentWithAction } from '../../apiConnect';\n\nconst TaskViewerMap = (props) => {\n const { geolocation, mapInitCoordinates } = useContext(AppContext);\n const { auth } = useContext(AppContext);\n\n const [map, setMap] = useState(null);\n const [taskSpecificData, setTaskSpecificData] = useState([]);\n const [currentTaskAmount, setCurrentTaskAmount] = useState(-1);\n const [currentTaskUnit, setCurrentTaskUnit] = useState('');\n\n const timeLogId = useRef(null);\n const currentPosition = useRef({ latitude: null, longitude: null, timestamp: null });\n const timer = useRef(null);\n const gpsWatch = useRef(null);\n const running = useRef(false);\n const taskHasBeenStarted = useRef(false);\n\n const zoomIdx = useRef(0);\n const zoomLevels = [16.1, 17.2, 18.1];\n\n let dataIsSet = false;\n const fertLayerName = 'fertLayer';\n const seedLayerName = 'seedLayer';\n const taskLayerName = 'taskLayer';\n const logInterval = 2000; // Milliseconds\n const gpsAccuracyUpperLimit = 20; // Meters\n const gpsAccuracyLowerLimit = 0;\n const gpsLocationFilterSpeed = 6; // m/s\n const gpsOptions = {\n enableHighAccuracy: true,\n timeout: 5000,\n maximumAge: 0\n }\n // Simulator: developer testing purposes only!\n const simulator = false;\n //const simulator = true;\n\n useEffect(() => {\n getContentWithAction(auth.getAccessToken(), 'taskViewer', 'task', { taskId: props.data.taskDataId }).then((data) => setTaskSpecificData(data));\n }, []);\n\n useEffect(() => {\n if (!dataIsSet && taskSpecificData.hasOwnProperty('grid')) {\n dataIsSet = true;\n setCurrentTaskUnit(taskSpecificData.taskType === 2 ? taskSpecificData.products[1].unitDesignator : taskSpecificData.products[0].unitDesignator);\n if (taskSpecificData.taskStatus !== taskViewer_taskStatuses.planned) taskHasBeenStarted.current = true;\n renderMap();\n }\n }, [taskSpecificData]);\n\n useEffect(() => {\n if (map != null) {\n if (!simulator) {\n gpsWatch.current = geolocation.watchPosition(success, errorHandler, gpsOptions);\n } else {\n startSimulateGPS(simulatorSuccess);\n }\n }\n }, [map]);\n\n const view = new View({\n center: proj.transform([mapInitCoordinates.coords.longitude, mapInitCoordinates.coords.latitude], 'EPSG:4326', 'EPSG:3857'),\n zoom: 17\n })\n\n // For header buttons in case of seeding-fertilizing\n const switchGridLayer = (task) => {\n let layers = map.getLayers().array_;\n let fertLayer = layers.filter(layer => layer.get('name') === fertLayerName)[0];\n let seedLayer = layers.filter(layer => layer.get('name') === seedLayerName)[0];\n if (task === 1) {\n fertLayer.setVisible(true);\n seedLayer.setVisible(false);\n setCurrentTaskUnit(taskSpecificData.products[1].unitDesignator);\n } else {\n fertLayer.setVisible(false);\n seedLayer.setVisible(true);\n setCurrentTaskUnit(taskSpecificData.products[0].unitDesignator);\n }\n }\n\n const renderMap = () => {\n if (dataIsSet) {\n let myMap = new OlMap({\n target: 'map',\n layers: [\n addMapBaseLayer(),\n addMapRoute(taskSpecificData.route.routeGeometry),\n addMapPosition()\n ],\n view: view,\n interactions: defaultInteractions({\n doubleClickZoom: false,\n mouseWheelZoom: simulator ? true : false\n })\n });\n\n // Custom zoom\n myMap.on('click', function (event) {\n // Move zoom array idx\n shiftZoomArrayIdx();\n // Set view zoom\n myMap.getView().setZoom(zoomLevels[zoomIdx.current]);\n });\n\n let partfieldLayer = addMapPartfieldGeometry(taskSpecificData.partfield.partfieldGeometry);\n myMap.addLayer(partfieldLayer);\n\n let isSeedingFertilizing = false;\n if (taskSpecificData.taskType === 2) {\n // Seeding-fertilizing\n isSeedingFertilizing = true;\n let fertLayer = addMapTaskGrid(1, taskSpecificData, isSeedingFertilizing, partfieldLayer);\n fertLayer.set('name', fertLayerName);\n let seedLayer = addMapTaskGrid(2, taskSpecificData, isSeedingFertilizing, partfieldLayer);\n seedLayer.set('name', seedLayerName);\n seedLayer.setVisible(false);\n myMap.addLayer(fertLayer);\n myMap.addLayer(seedLayer);\n } else {\n let layer = addMapTaskGrid(taskSpecificData.taskType, taskSpecificData, isSeedingFertilizing, partfieldLayer);\n layer.set('name', taskLayerName);\n myMap.addLayer(layer);\n }\n\n setMap(myMap);\n }\n }\n\n const setStatusFromMapFooter = (status) => {\n switch (status) {\n case (taskViewer_taskStatuses.running):\n running.current = true;\n taskHasBeenStarted.current = true;\n startLogTimer();\n postContentWithAction(auth.getAccessToken(), 'taskViewer', 'task/status', createTaskStatusLogObject(taskViewer_taskStatuses.running));\n break;\n case (taskViewer_taskStatuses.paused):\n running.current = false;\n stopLogTimer();\n if (taskHasBeenStarted.current) postContentWithAction(auth.getAccessToken(), 'taskViewer', 'task/status', createTaskStatusLogObject(taskViewer_taskStatuses.paused));\n break;\n case (taskViewer_taskStatuses.endUnfinished):\n running.current = false;\n stopLogTimer();\n if (taskHasBeenStarted.current) postContentWithAction(auth.getAccessToken(), 'taskViewer', 'task/status', createTaskStatusLogObject(taskViewer_taskStatuses.endUnfinished));\n props.callBack({ viewComponent: taskViewer_viewComponents.endTaskViewer, data: [] });\n break;\n case (taskViewer_taskStatuses.ended):\n running.current = false;\n stopLogTimer();\n if (taskHasBeenStarted.current) postContentWithAction(auth.getAccessToken(), 'taskViewer', 'task/status', createTaskStatusLogObject(taskViewer_taskStatuses.completed));\n props.callBack({ viewComponent: taskViewer_viewComponents.endTaskViewer, data: [] });\n break;\n }\n }\n\n const createTaskStatusLogObject = (taskStatus) => {\n let statusLogObject = {\n taskDataId: taskSpecificData.taskDataId,\n taskStatus: taskStatus,\n timeLogId: timeLogId.current\n };\n return statusLogObject;\n }\n\n const createTaskDataLogObject = (coordinates) => {\n let logObject = {\n taskId: taskSpecificData.taskDataId,\n timeLogId: timeLogId.current,\n positionNorth: coordinates.latitude,\n positionEast: coordinates.longitude,\n positionUp: 0.0,\n timeStap: null,\n dataLogValues: []\n };\n return logObject;\n }\n\n const getCurrentLayer = () => {\n let layers = map.getLayers().array_;\n let currentLayer;\n if (taskSpecificData.taskType === 2) {\n let fertLayer = layers.filter(layer => layer.get('name') === fertLayerName)[0];\n let seedLayer = layers.filter(layer => layer.get('name') === seedLayerName)[0];\n if (fertLayer.getVisible()) {\n currentLayer = fertLayer;\n } else {\n currentLayer = seedLayer;\n }\n } else {\n let taskLayer = layers.filter(layer => layer.get('name') === taskLayerName)[0];\n currentLayer = taskLayer;\n }\n return currentLayer;\n }\n\n const success = (position) => {\n console.log('got new GPS location!');\n let pos = validateNewPosition(position.coords);\n if (!pos.valid) {\n console.log('Insufficient GPS accurary');\n return;\n }\n currentPosition.current = pos;\n // Update user location on map\n updateMapPosition(currentPosition.current);\n // Move map center to user position\n map.getView().setCenter(proj.transform([currentPosition.current.longitude, currentPosition.current.latitude], 'EPSG:4326', 'EPSG:3857'));\n // Check which grid cell you are in and update task value\n if (running.current === true) checkCoordsInsideGridPolygon(getCurrentLayer(), currentPosition.current, setCurrentTaskAmount);\n }\n\n const errorHandler = () => {\n console.log('gps error');\n }\n\n const simulatorSuccess = (val, position) => {\n // Update user location on map\n updateMapPosition(position);\n // Move map center to user position\n map.getView().setCenter(proj.transform([position.longitude, position.latitude], 'EPSG:4326', 'EPSG:3857'));\n // Check which grid cell you are in and update task value\n if (running.current === true) {\n checkCoordsInsideGridPolygon(getCurrentLayer(), position, setCurrentTaskAmount);\n // Write to log file\n let logObject = createTaskDataLogObject(position);\n postContentWithAction(auth.getAccessToken(), 'taskViewer', 'task/route', logObject, postContentWithActionCallback);\n }\n }\n\n const startLogTimer = () => {\n if (!simulator) {\n timer.current = setInterval(function () {\n // Write to log file\n let logObject = createTaskDataLogObject(currentPosition.current);\n postContentWithAction(auth.getAccessToken(), 'taskViewer', 'task/route', logObject, postContentWithActionCallback);\n }, logInterval);\n }\n } \n\n const stopLogTimer = () => {\n if (!simulator) {\n clearInterval(timer.current);\n }\n }\n\n const postContentWithActionCallback = (data) => {\n timeLogId.current = data.timeLogId;\n }\n\n // Return a potential object for updating current position\n const validateNewPosition = (newPosition) => {\n let potentialPosition = { valid: false };\n\n if (currentPosition.current.latitude === null) {\n if (newPosition.accuracy > gpsAccuracyUpperLimit || newPosition.accuracy < gpsAccuracyLowerLimit) {\n console.log('Bad accuracy for a potential initial position');\n }\n\n let lat = newPosition.latitude;\n let lon = newPosition.longitude;\n let time = new Date();\n potentialPosition = { valid: true, latitude: lat, longitude: lon, timestamp: time, heading: newPosition.heading, velocity: 0 };\n }\n\n let newTime = new Date();\n let timeDiff = (newTime - currentPosition.current.timestamp) / 1000; // seconds\n let dist = distance(newPosition.latitude, newPosition.longitude, currentPosition.current.latitude, currentPosition.current.longitude); // metres\n let velocity = dist / timeDiff;\n if (velocity <= gpsLocationFilterSpeed) {\n potentialPosition = { valid: true, latitude: newPosition.latitude, longitude: newPosition.longitude, timestamp: newTime, heading: newPosition.heading, velocity: velocity };\n }\n\n return potentialPosition;\n }\n\n const distance = (lat1, lon1, lat2, lon2) => {\n const R = 6378137;\n let dlon = radians(lon2 - lon1);\n let dlat = radians(lat2 - lat1);\n let f = squared(Math.sin(dlat / 2)) + Math.cos(radians(lat1)) * Math.cos(radians(lat2)) * squared(Math.sin(dlon / 2.0));\n let c = 2 * Math.atan2(Math.sqrt(f), Math.sqrt(1 - f));\n return R * c;\n }\n\n const radians = (x) => {\n return x * Math.PI / 180;\n }\n\n const squared = (x) => {\n return x * x;\n }\n\n const shiftZoomArrayIdx = () => {\n // End of array\n if (zoomIdx.current === 3) {\n zoomIdx.current = 0;\n } else {\n zoomIdx.current = zoomIdx.current + 1;\n }\n }\n\n return (\n <>\n
{taskSpecificData.taskType ? : ''}
\n
\n
\n \n );\n}\n\nexport default TaskViewerMap;","import VectorSource from 'ol/source/Vector';\nimport VectorLayer from 'ol/layer/Vector';\nimport GeoJSON from 'ol/format/GeoJSON';\nimport { Stroke, Style } from 'ol/style';\n\nexport const addMapPartfieldGeometry = (partfield) => {\n\n let partfieldStyle = new Style({\n stroke: new Stroke({\n color: 'green',\n width: 3\n })\n });\n\n let vectorSource = new VectorSource({\n features: new GeoJSON().readFeatures(partfield, {\n dataProjection: 'EPSG:4326',\n featureProjection: 'EPSG:3857'\n })\n });\n\n let vectorLayer = new VectorLayer({\n source: vectorSource,\n style: partfieldStyle,\n zIndex: 2\n });\n\n return vectorLayer;\n};\n","import React, { useState } from 'react';\n\nimport TaskTypeSelection from './TaskTypeSelection';\nimport Tasks from './Tasks';\nimport GPS from './GPS';\nimport MapComponent from './TaskViewerMap'\nimport { taskViewer_viewComponents } from './../../constants';\n\nconst TaskViewer = (props) => {\n const [currentComponent, setCurrentComponent] = useState({ viewComponent: taskViewer_viewComponents.GPS, data: [] });\n\n const getComponent = () => {\n switch (currentComponent.viewComponent) {\n case taskViewer_viewComponents.GPS:\n return ;\n case taskViewer_viewComponents.taskTypeSelection:\n return ;\n case taskViewer_viewComponents.tasks:\n return ;\n case taskViewer_viewComponents.taskRunner:\n return ;\n case taskViewer_viewComponents.endTaskViewer:\n return ;\n default:\n return ; \n }\n }\n\n return (\n <>\n {getComponent()}\n \n );\n}\n\nexport default TaskViewer;","import React, { useState, useRef, useEffect, useContext } from 'react';\nimport Modal from 'react-bootstrap/Modal'\nimport Select from 'react-select';\nimport Form from 'react-bootstrap/Form';\nimport Button from 'react-bootstrap/Button';\nimport Accordion from 'react-bootstrap/Accordion';\nimport NumberFormat from 'react-number-format';\nimport { useTranslation } from 'react-i18next';\nimport * as dayjs from 'dayjs'\n\nimport CalendarModal from './CalendarModal';\nimport { getContentWithAction, postContentWithAction, putContentWithAction } from '../../apiConnect';\nimport AppContext from '../../AppContext';\nimport { getSelectedPlot, getSelectedLang, customStyles, formatGroupLabel } from '../../common';\nimport { useAlert } from 'react-alert'\nimport Spinner from 'react-bootstrap/Spinner';\n\nimport { valueMax, dayJsFormatDate, round } from '../../commonFunctions';\n\nimport '../../css/general.css'\nimport '../../css/plotOperation.css'\n\nconst SowModal = (props) => {\n const { t } = useTranslation();\n const { auth } = useContext(AppContext);\n\n const [calendarShow, setCalendarShow] = useState(false);\n const [varieties, setVarieties] = useState([]);\n const [selectedVariety, setSelectedVariety] = useState(null);\n const [amount, setAmount] = useState(0);\n const [amountArea, setAmountArea] = useState(0);\n const [totalArea, setTotalArea] = useState(0);\n const [date, setDate] = useState(dayjs().format());\n const [plantName, setPlantName] = useState('');\n const [multiSelect, setMultiSelect] = useState(false);\n const [varietyUnit, setVarietyUnit] = useState('kg');\n const [validate, setValidation] = useState(false);\n const [buttonWriteShow, setButtonWriteShow] = useState(false); // Example of allowed save btn disabled\n const textt = (t('ChooseVariety'));\n\n const [saveInProgress, setSaveInProgress] = useState(false);\n\n const alert = useAlert();\n\n let selectedPlot = useRef(getSelectedPlot());\n\n const responseHandler = (data) => {\n if (!data) return;\n setSelectedVariety({ label: data.description, value: data.varietyId, isMixture: data.mixture === 1 ? true : undefined });\n setAmount(data.amount);\n\n if (data.amount && selectedPlot && selectedPlot.current && selectedPlot.current.area)\n setAmountArea(data.amount * selectedPlot.current.area);\n\n if (data.unitNumber)\n setVarietyUnit(data.unitText || 'kg');\n\n if (data.sowingDate) {\n setDate(dayjs(data.sowingDate).format());\n }\n }\n\n useEffect(() => {\n getContentWithAction(auth.getAccessToken(), 'session', 'storeAllowed', {}).then((result) => {\n setButtonWriteShow(result);\n });\n\n if (props.selectEvent.selectedPlots) { // If multiple chosen plots\n setMultiSelect(true);\n setPlantName(props.selectEvent.selectedPlots[0].plantName);\n fetchVarietyData(props.selectEvent.selectedPlots[0].plantId, getSelectedLang()).then(data => {\n formatVarietyGroups(data);\n });\n let total = props.selectEvent.selectedPlots.reduce((total, currentItem) => total = total + currentItem.area, 0);\n setTotalArea(total);\n }\n else { // Only one selected plot\n setPlantName(selectedPlot.current.plantName);\n fetchVarietyData(selectedPlot.current.plantId, getSelectedLang()).then(data => {\n formatVarietyGroups(data);\n });\n }\n\n if (props.selectEvent.selectedElement) { // Editing\n setValidation(true);\n responseHandler(props.selectEvent.selectedElement);\n }\n else { // Adding new\n responseHandler({\n varietyId: 0,\n amount: 0,\n sowingDate: dayjs().format()\n });\n }\n }, [props.selectEvent]);\n\n let fetchVarietyData = (id, selectedLand) => {\n return Promise.all([\n getContentWithAction(auth.getAccessToken(), 'resource', 'previousVariety', { plantId: id, lang: selectedLand }),\n getContentWithAction(auth.getAccessToken(), 'resource', 'variety', { plantId: id, lang: selectedLand })\n ]).then(([previousVarieties, varieties]) => {\n return { previousVarieties, varieties };\n });\n }\n\n const formatVarietyGroups = (data) => {\n let groupsList = [\n { label: t('Previously_Used'), options: data.previousVarieties }\n ];\n for (var v in data.varieties) {\n let tempList = [];\n for (var p in data.varieties[v].groupVarieties) {\n let vary = data.varieties[v].groupVarieties[p];\n let obj2 = { label: vary.label, value: vary.value, unitText: vary.unitText, isMixture: vary.isMixture };\n tempList.push(obj2);\n }\n groupsList = [\n ...groupsList,\n { label: data.varieties[v].groupName, options: tempList }\n ];\n }\n setVarieties([...groupsList]);\n };\n\n\n const deleteSow = () => {\n setSaveInProgress(true);\n postContentWithAction(auth.getAccessToken(), 'sow', 'delete', { number: props.selectEvent.selectedElement.number, plotId: selectedPlot.current.apNumber }, () => {\n props.onHide();\n props.setRefresh(Date.now());\n setSaveInProgress(false);\n }).catch(e => {\n alert.show(t('SavedFailed'), { type: 'error' });\n setSaveInProgress(false);\n });\n }\n\n const saveSow = () => {\n\n //validate\n if (!amount) return;\n if (!selectedVariety.value) return;\n\n var newSows = [];\n\n setSaveInProgress(true);\n\n if (multiSelect) {\n props.selectEvent.selectedPlots.forEach((plot) => {\n newSows.push({\n plotId: plot.apNumber,\n number: 0,\n amount: round(amount),\n varietyId: selectedVariety.value,\n sowingDate: date,\n mixture: selectedVariety.isMixture ? 1 : 0\n });\n });\n\n postContentWithAction(auth.getAccessToken(), 'sow', 'new', {\n models: newSows\n }, (data) => {\n props.setRefresh(Date.now());\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n setSaveInProgress(false);\n }).catch(e => {\n alert.show(t('SavedFailed'), { type: 'error' });\n setSaveInProgress(false);\n });\n }\n else {\n if (!props.selectEvent.selectedElement) {\n newSows.push({\n plotId: selectedPlot.current.apNumber,\n number: 0,\n amount: round(amount),\n varietyId: selectedVariety.value,\n sowingDate: date,\n mixture: selectedVariety.isMixture ? 1 : 0\n });\n\n postContentWithAction(auth.getAccessToken(), 'sow', 'new', {\n models: newSows\n }, (data) => {\n props.setRefresh(Date.now());\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n setSaveInProgress(false);\n }).catch(e => {\n alert.show(t('SavedFailed'), { type: 'error' });\n setSaveInProgress(false);\n });\n }\n else {\n var updateSows = [];\n updateSows.push({\n plotId: selectedPlot.current.apNumber,\n number: props.selectEvent.selectedElement.number,\n seedQuality: props.selectEvent.selectedElement.seedQuality,\n amount: round(amount),\n varietyId: selectedVariety.value,\n sowingDate: date,\n mixture: selectedVariety.isMixture ? 1 : 0\n });\n putContentWithAction(auth.getAccessToken(), 'sow', 'update', {\n models: updateSows\n }).then((data) => {\n props.setRefresh(Date.now());\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n setSaveInProgress(false);\n }).catch(e => {\n alert.show(t('SavedFailed'), { type: 'error' });\n setSaveInProgress(false);\n });\n }\n }\n props.onHide();\n }\n\n let varietyChanged = (data) => {\n setSelectedVariety(data);\n setVarietyUnit(data.unitText || 'kg');\n }\n\n return (\n <>\n \n \n {t('Sowing')}\n \n \n
\n \n {t('Plant')}\n \n \n \n {t('Sowing_Variety_Code')}\n varietyChanged(data)}\n options={varieties}\n formatGroupLabel={formatGroupLabel}\n styles={customStyles}\n />\n \n \n {t('Amount_ha')}\n 0 ? amount : ''}\n placeholder={' ' + varietyUnit}\n decimalScale={2}\n fixedDecimalScale={false}\n onValueChange={(values) => {\n if (values.floatValue && round(values.floatValue) !== round(amount)) {\n if (values.floatValue) {\n setAmount(values.floatValue)\n\n if (!multiSelect) {\n if (selectedPlot.current && selectedPlot.current.area)\n setAmountArea(values.floatValue * selectedPlot.current.area);\n else\n setAmountArea(0);\n }\n else {\n if (totalArea)\n setAmountArea(values.floatValue * totalArea);\n else\n setAmountArea(0);\n }\n }\n else {\n setAmount(0);\n setAmountArea(0);\n }\n }\n }}\n displayType={'input'}\n thousandSeparator={' '}\n allowedDecimalSeparators={['.', ',']}\n suffix={' ' + varietyUnit}\n allowNegative={false}\n isAllowed={valueMax}\n />\n \n {!multiSelect ?\n \n {t('Amount_Area')}\n 0 ? amountArea : ''}\n placeholder={' ' + varietyUnit}\n decimalScale={2}\n fixedDecimalScale={false}\n onValueChange={(values) => {\n if (values.floatValue && round(values.floatValue) !== round(amountArea)) {\n if (values.floatValue) {\n if (selectedPlot.current.area > 0) {\n setAmount(values.floatValue / selectedPlot.current.area);\n }\n else\n setAmount(0);\n\n setAmountArea(values.floatValue);\n }\n else {\n setAmount(0);\n setAmountArea(0);\n }\n }\n }}\n displayType={'input'}\n thousandSeparator={' '}\n allowedDecimalSeparators={['.', ',']}\n suffix={' ' + varietyUnit}\n allowNegative={false}\n isAllowed={valueMax}\n />\n \n :\n \n {t('Amount_Area')}\n 0 ? amountArea : ''}\n placeholder={' ' + varietyUnit}\n decimalScale={2}\n fixedDecimalScale={false}\n onValueChange={(values, e) => {\n if (values.floatValue && round(values.floatValue) !== round(amountArea)) {\n if (values.floatValue) {\n if (totalArea > 0) {\n setAmount(values.floatValue / totalArea);\n }\n else\n setAmount(0);\n\n setAmountArea(values.floatValue);\n }\n else {\n setAmount(0);\n setAmountArea(0);\n }\n }\n }}\n displayType={'input'}\n thousandSeparator={' '}\n allowedDecimalSeparators={['.', ',']}\n suffix={' ' + varietyUnit}\n isAllowed={valueMax}\n />\n \n }\n \n {t('Date')}\n setCalendarShow(true)} placeholder={t('Date')} value={dayJsFormatDate(date)} onChange={() => { }} />\n \n {multiSelect ?\n \n \n {t('ShowChosenPlots')}\n \n
\n {props.selectEvent.selectedPlots.map((plot, i) =>\n
\n {plot.name} - {plot.apChar} ({plot.area} ha)\n
\n )}\n
\n
\n
\n
\n : ''}\n
\n
\n \n\n {/*btns to left*/}\n {props.selectEvent.selectedElement && buttonWriteShow === true ?\n : ''}\n\n {/*btns to right*/}\n \n\n {buttonWriteShow === true ?\n \n : ''}\n \n
\n setCalendarShow(false)}\n onChange={setDate}\n selecteddate={date}\n />\n \n );\n}\n\nexport default SowModal;","import React, { useState, useEffect, useContext } from 'react';\r\nimport Modal from 'react-bootstrap/Modal'\r\nimport Form from 'react-bootstrap/Form';\r\nimport Button from 'react-bootstrap/Button';\r\nimport * as dayjs from 'dayjs'\r\nimport { useTranslation } from 'react-i18next';\r\nimport { postContentWithAction, putContentWithAction } from '../../apiConnect';\r\nimport { getSelectedLang } from '../../common';\r\nimport { formatPlannedDate, groupByKey, valueMax, dayJsFormatDate, groupByMarked, round, updateCalculativeArray } from '../../commonFunctions';\r\nimport NumberFormat from 'react-number-format';\r\nimport CalendarModal from './CalendarModal';\r\nimport Spinner from 'react-bootstrap/Spinner';\r\nimport { useAlert } from 'react-alert'\r\nimport AppContext from '../../AppContext';\r\nimport { OverlayTrigger, Tooltip, Badge } from 'react-bootstrap'\r\n\r\nimport '../../css/general.css'\r\n\r\nconst MarkSowModal = (props) => {\r\n const { t } = useTranslation();\r\n const { auth } = useContext(AppContext);\r\n\r\n const [plannedSows, setPlannedSows] = useState([]);\r\n const [combinedSows, setCombinedSows] = useState([]);\r\n const [calendarShow, setCalendarShow] = useState(false);\r\n const [date, setDate] = useState(dayjs().format());\r\n const [contentIsLoading, setContentIsLoading] = useState(true);\r\n const [infoText, setInfoText] = useState('Ladataan tietoja');\r\n const [saveInProgress, setSaveInProgress] = useState(false);\r\n\r\n //For area and amount calculations, CCD = CalculationCombinedData\r\n const [cCD, setCCD] = useState([]);\r\n\r\n const alert = useAlert();\r\n\r\n useEffect(() => {\r\n var plotIds = [];\r\n props.selectEvent.selectedPlots.forEach(p => {\r\n plotIds.push({ plotId: p.apNumber });\r\n });\r\n postContentWithAction(auth.getAccessToken(), 'sow', 'sowsForPlots', { models: plotIds, lang: getSelectedLang() }, (data) => {\r\n data = data.filter((sow) => sow.sowingDate || sow.actionDate);\r\n data.forEach(sow => {\r\n sow.plotData = props.selectEvent.selectedPlots.find(p => p.apNumber === sow.plotId);\r\n });\r\n setPlannedSows(data);\r\n\r\n var grouped1 = groupByKey(data, 'varietyId');\r\n var grouped2 = [];\r\n for (const key in grouped1) {\r\n var m = groupByMarked(grouped1[key], 'sowingDate', 'actionDate');\r\n var b = [];\r\n for (const type in m) {\r\n for (const key in m[type]) { // Looping grouped keys\r\n var combinedIds = [];\r\n var combinedArea = 0;\r\n var combinedAmount = { min: m[type][key][0].amount, max: m[type][key][0].amount };\r\n m[type][key].forEach(s => { // Looping sows\r\n combinedIds.push({\r\n plotId: s.plotId,\r\n number: s.number,\r\n plotName: s.plotData.name + ' - ' + s.plotData.apChar\r\n });\r\n combinedArea += s.plotData.area;\r\n combinedAmount.min = Math.min(combinedAmount.min, s.amount);\r\n combinedAmount.max = Math.max(combinedAmount.max, s.amount);\r\n });\r\n var combinedData = { ...m[type][key][0] }; // Copying first element for base data\r\n if (combinedAmount.min != combinedAmount.max) combinedData.amount = null;\r\n\r\n b.push({\r\n date: key,\r\n combinedData: combinedData,\r\n combinedArea: combinedArea,\r\n combinedIds: combinedIds,\r\n combinedAmount: combinedAmount\r\n });\r\n }\r\n }\r\n grouped2.push({\r\n variety: key,\r\n objects: b\r\n });\r\n }\r\n\r\n setCCD(grouped2);\r\n setCombinedSows(grouped2);\r\n\r\n setContentIsLoading(false);\r\n setInfoText('Ei suunniteltuja kylvöjä');\r\n });\r\n }, [props.selectEvent]);\r\n\r\n const updateDate = (value) => {\r\n var newDate = date;\r\n newDate.sowingDate = value;\r\n setDate(newDate);\r\n };\r\n\r\n const saveSows = (openFerts) => {\r\n setSaveInProgress(true);\r\n let today = dayjs().format('YYYYMMDD');\r\n let invalidDate = false;\r\n var newSows = [];\r\n\r\n combinedSows.forEach(variety => {\r\n variety.objects.forEach(sow => {\r\n sow.combinedIds.forEach(number => {\r\n var originalData = plannedSows.find(s => s.number === number.number);\r\n var data = sow.combinedData;\r\n let formattedDate = dayjs(data.sowingDate).format('YYYYMMDD');\r\n if (data.sowingDate && today < formattedDate) invalidDate = true; // Check for valid dates\r\n if (data.sowingDate) {\r\n newSows.push({\r\n actionDate: sow.date,\r\n amount: data.amount ? round(data.amount) : originalData.amount,\r\n description: data.description,\r\n mixture: data.mixture,\r\n number: number.number,\r\n plotId: number.plotId,\r\n sowingDate: data.sowingDate,\r\n tiheys: data.tiheys,\r\n typeId: data.typeId,\r\n unitNumber: data.unitNumber,\r\n varietyId: data.varietyId\r\n });\r\n }\r\n });\r\n });\r\n });\r\n\r\n if (!invalidDate) {\r\n putContentWithAction(auth.getAccessToken(), 'sow', 'update', {\r\n models: newSows\r\n }).then(() => {\r\n setSaveInProgress(false);\r\n if (openFerts) {\r\n props.setRefresh(Date.now());\r\n openFertilizings();\r\n }\r\n alert.show(t('SavedSuccesfully'), { type: 'success' });\r\n props.onHide();\r\n }).catch(e => {\r\n setSaveInProgress(false);\r\n alert.show(t('SavedFailed'), { type: 'error' });\r\n });\r\n }\r\n else {\r\n alert('invalid date')\r\n }\r\n }\r\n\r\n const checkFertilizingsButton = () => {\r\n return !props.fertilizingModalDisabled;\r\n }\r\n\r\n const openFertilizings = () => {\r\n props.showFertilizingModal();\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n {t('MarkSowDone')}\r\n \r\n \r\n
\r\n {contentIsLoading ? : ''}\r\n {(combinedSows) && (combinedSows.length > 0) ? combinedSows.map((variety, i) =>\r\n variety.objects.map((sow, j) =>\r\n
\r\n
\r\n {sow.combinedData.description}\r\n
\r\n {sow.combinedIds.length > 1 ?\r\n \r\n {sow.combinedIds.slice(1).map((p, i) =>\r\n
{p.plotName}
\r\n )}\r\n \r\n }>\r\n \r\n
\r\n :\r\n sow.combinedIds.length === 1 ?\r\n \r\n : ''}\r\n\r\n
\r\n
\r\n \r\n {t('Amount_ha')}\r\n {\r if (value.floatValue && round(value.floatValue) !== round(cCD[i].objects[j].combinedData.amount)) {\r\n if (value.floatValue) {\r\n\r\n sow.combinedData.amount = value.floatValue;\r\n }\r\n\r\n }\r }}\r displayType={'input'}\r\n thousandSeparator={' '}\r\n isAllowed={valueMax}\r\n suffix={' ' + (sow.combinedData.unitText || 'kg')}\r\n allowNegative={false}\r\n allowedDecimalSeparators={['.', ',']} />\r\n \r\n \r\n {t('Amount_Area')}\r\n {\r\n if (value.floatValue && round(value.floatValue) !== round(cCD[i].objects[j].combinedData.amount * cCD[i].objects[j].combinedArea)) {\r\n if (value.floatValue) {\r\n if (cCD[i].objects[j].combinedArea > 0) {\r\n\r\n setCCD(updateCalculativeArray(cCD, (value.floatValue / cCD[i].objects[j].combinedArea), i, j));\r\n sow.combinedData.amount = value.floatValue / sow.combinedArea;\r\n }\r\n }\r\n }\r\n }}\r\n displayType={'input'}\r\n thousandSeparator={' '}\r\n isAllowed={valueMax}\r\n suffix={' ' + (sow.combinedData.unitText || 'kg')}\r\n allowNegative={false}\r\n allowedDecimalSeparators={['.', ',']} />\r\n \r\n \r\n {t('Date')}\r\n {\r\n setDate(sow.combinedData);\r\n setCalendarShow(true);\r\n }} placeholder={formatPlannedDate(sow.combinedData.actionDate, t)}\r\n value={sow.combinedData.sowingDate ? dayJsFormatDate(sow.combinedData.sowingDate) : ''}\r\n onChange={() => { }} />\r\n \r\n
\r\n
)\r\n ) :
{infoText}
}\r\n \r\n
\r\n \r\n \r\n {checkFertilizingsButton() ?\r\n \r\n : ''}\r\n \r\n \r\n
\r\n {calendarShow === true ?\r\n setCalendarShow(false)}\r\n onChange={updateDate}\r\n selecteddate={date.sowingDate ? dayjs(date.sowingDate).format() : null}\r\n />\r\n : ''}\r\n \r\n )\r\n}\r\n\r\nexport default MarkSowModal;","import React, { useState, useEffect, useContext, useRef } from 'react';\nimport Modal from 'react-bootstrap/Modal'\nimport Form from 'react-bootstrap/Form';\nimport Button from 'react-bootstrap/Button';\nimport * as dayjs from 'dayjs'\nimport { useTranslation } from 'react-i18next';\nimport { postContentWithAction, putContentWithAction } from '../../apiConnect';\nimport { getSelectedLang } from '../../common';\nimport { formatPlannedDate, groupByKey, valueMax, dayJsFormatDate, groupByMarked, round, updateCalculativeArray } from '../../commonFunctions';\nimport NumberFormat from 'react-number-format';\nimport CalendarModal from './CalendarModal';\nimport Spinner from 'react-bootstrap/Spinner';\nimport { useAlert } from 'react-alert'\nimport AppContext from '../../AppContext';\nimport { ICONS } from '../../img/icons'\nimport Icon from '../../img/Icon'\nimport { OverlayTrigger, Tooltip, Badge } from 'react-bootstrap'\n\nimport '../../css/general.css'\n\n\nconst MarkFertilizerModal = (props) => {\n const { t } = useTranslation();\n const { auth } = useContext(AppContext);\n\n const [plannedFerts, setPlannedFerts] = useState([]);\n const [combinedFerts, setCombinedFerts] = useState([]);\n const [calendarShow, setCalendarShow] = useState(false);\n const [date, setDate] = useState(dayjs().format());\n const [contentIsLoading, setContentIsLoading] = useState(true);\n const [infoText, setInfoText] = useState('Ladataan tietoja');\n const [saveInProgress, setSaveInProgress] = useState(false);\n\n //For area and amount calculations, CCD = CalculationCombinedData\n const [cCD, setCCD] = useState([]);\n\n const alert = useAlert();\n\n useEffect(() => {\n var plotIds = [];\n\n props.selectEvent.selectedPlots.forEach(p => {\n plotIds.push({ plotId: p.apNumber });\n });\n\n const promiseFert = new Promise((resolve, reject) => {\n postContentWithAction(auth.getAccessToken(), 'fertilize', 'getFertilizingsForPlots', {\n models: plotIds, lang: getSelectedLang()\n }, (data) => {\n resolve(data);\n }).catch(e => {\n reject(Error(\"Promise rejected\"));\n });\n });\n\n const promiseSow = new Promise((resolve, reject) => {\n postContentWithAction(auth.getAccessToken(), 'sow', 'sowsForPlots', {\n models: plotIds, lang: getSelectedLang()\n }, (data) => {\n resolve(data);\n }).catch(e => {\n reject(Error(\"Promise rejected\"));\n });\n });\n\n Promise.all([promiseFert, promiseSow]).then(([dataFert, dataSow]) => {\n\n dataFert = dataFert.filter((fert) => fert.date || fert.plannedDate);\n\n dataFert.forEach(fert => {\n fert.plotData = props.selectEvent.selectedPlots.find(p => p.apNumber === fert.plotId);\n });\n setPlannedFerts(dataFert);\n\n if (dataSow.length > 0) {\n dataSow = dataSow.filter((sow) => sow.sowingDate && sow.actionDate);\n if (dataSow.length > 0) {\n dataFert.forEach(fert => {\n if (fert.fertilizerKind === 1) {\n const s = dataSow.find(p => p.plotId === fert.plotId);\n if (s && s.actionDate === fert.plannedDate) {\n fert.date = dayjs(s.sowingDate).format();\n }\n }\n });\n }\n }\n\n dataFert.forEach(d => {\n d.productWithPesticide = d.pesticideId ? d.product + '_' + d.pesticideId : d.product;\n });\n\n var grouped1 = groupByKey(dataFert, 'productWithPesticide');\n var grouped2 = [];\n for (const key in grouped1) {\n var m = groupByMarked(grouped1[key], 'date', 'plannedDate');\n var b = [];\n for (const type in m) {\n for (const key in m[type]) { // Looping grouped keys\n var combinedIds = [];\n var combinedArea = 0;\n var combinedAmount = { min: m[type][key][0].amount, max: m[type][key][0].amount };\n\n m[type][key].forEach(s => { // Looping ferts\n combinedIds.push({\n plotId: s.plotId,\n fertilizingId: s.fertilizingId,\n plotName: s.plotData.name + ' - ' + s.plotData.apChar,\n plotArea: s.plotData.area\n });\n if (s.area)\n combinedArea += s.area;\n else\n combinedArea += s.plotData.area;\n combinedAmount.min = Math.min(combinedAmount.min, s.amount);\n combinedAmount.max = Math.max(combinedAmount.max, s.amount);\n });\n var combinedData = { ...m[type][key][0] }; // Copying first element for base data\n\n if (combinedAmount.min != combinedAmount.max) combinedData.amount = null;\n\n b.push({\n date: key,\n combinedData: combinedData,\n combinedArea: combinedArea,\n combinedIds: combinedIds,\n combinedAmount: combinedAmount\n });\n }\n }\n grouped2.push({\n fertilizer: key,\n objects: b\n });\n }\n\n setCCD(grouped2);\n setCombinedFerts(grouped2);\n\n setContentIsLoading(false);\n setInfoText('Ei suunniteltuja lannoitteita');\n }).catch(error => console.log(`Error in executing ${error}`));\n\n }, [props.selectEvent]);\n\n const updateDate = (value) => {\n var newDate = date;\n newDate.date = value;\n setDate(newDate);\n };\n\n const saveFertilizers = () => {\n setSaveInProgress(true);\n let today = dayjs().format('YYYYMMDD');\n let invalidDate = false;\n var newFerts = [];\n\n combinedFerts.forEach(product => {\n product.objects.forEach(fert => {\n fert.combinedIds.forEach(plot => {\n var originalData = plannedFerts.find(s => s.fertilizingId === plot.fertilizingId);\n var data = fert.combinedData;\n let formattedDate = dayjs(data.date).format('YYYYMMDD');\n if (data.date && today < formattedDate) invalidDate = true; // Check for valid dates\n if (data.date) {\n newFerts.push({\n plannedDate: fert.date,\n amount: data.amount ? round(data.amount) : originalData.amount,\n description: data.description,\n product: data.product,\n fertilizingId: plot.fertilizingId,\n pesticideId: originalData.pesticideId,\n plotId: plot.plotId,\n date: data.date,\n unitType: data.unitType,\n area: originalData.area ? originalData.area : plot.plotArea\n });\n }\n });\n });\n });\n\n if (!invalidDate) {\n putContentWithAction(auth.getAccessToken(), 'fertilize', 'update', {\n models: newFerts\n }).then(() => {\n setSaveInProgress(false);\n props.setRefresh(Date.now());\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n }).catch(e => {\n setSaveInProgress(false);\n alert.show(t('SavedFailed'), { type: 'error' });\n });\n\n props.onHide();\n }\n else {\n alert('invalid date')\n }\n }\n\n return (\n <>\n \n \n {t('MarkFertilizerDone')}\n \n \n
\n {contentIsLoading ? : ''}\n {(combinedFerts) && (combinedFerts.length > 0) ? combinedFerts.map((product, i) =>\n product.objects.map((fert, j) =>\n
\n
\n {fert.combinedData.productName ? fert.combinedData.productName : fert.combinedData.description}\n
\n {fert.combinedIds.length > 1 ?\n \n {fert.combinedIds.slice(1).map((p, i) =>\n
{p.plotName}
\n )}\n \n }>\n \n
\n :\n fert.combinedIds.length === 1 ?\n \n : ''}\n
\n\n {(fert.combinedData.pesticideId) ?\n
\n {t('TankMixture')} \n
\n : ''}\n\n
\n \n {t('Amount_ha')}\n {\n if (value.floatValue && round(value.floatValue) !== round(cCD[i].objects[j].combinedData.amount)) {\n if (value.floatValue) {\n setCCD(updateCalculativeArray(cCD, value.floatValue, i, j));\n fert.combinedData.amount = value.floatValue;\n }\n }\n }}\n displayType={'input'}\n thousandSeparator={' '}\n suffix={' ' + fert.combinedData.unitText}\n isAllowed={valueMax}\n allowNegative={false}\n allowedDecimalSeparators={['.', ',']} />\n \n \n {t('Amount_Area')}\n {\n if (value.floatValue && round(value.floatValue) !== round(cCD[i].objects[j].combinedData.amount * cCD[i].objects[j].combinedArea)) {\n if (value.floatValue) {\n if (cCD[i].objects[j].combinedArea > 0) {\n setCCD(updateCalculativeArray(cCD, (value.floatValue / cCD[i].objects[j].combinedArea), i, j));\n fert.combinedData.amount = value.floatValue / fert.combinedArea;\n }\n }\n }\n }}\n displayType={'input'}\n thousandSeparator={' '}\n suffix={' ' + fert.combinedData.unitText}\n isAllowed={valueMax}\n allowNegative={false}\n allowedDecimalSeparators={['.', ',']} />\n \n \n {t('Date')}\n {\n setDate(fert.combinedData);\n setCalendarShow(true);\n }}\n placeholder={formatPlannedDate(fert.combinedData.plannedDate, t)}\n value={fert.combinedData.date ? dayJsFormatDate(fert.combinedData.date) : ''}\n onChange={() => { }} />\n \n
\n
)\n ) :
{infoText}
}\n \n
\n \n \n \n \n
\n {calendarShow === true ?\n setCalendarShow(false)}\n onChange={updateDate}\n selecteddate={date.date}\n />\n : ''}\n \n )\n}\n\nexport default MarkFertilizerModal;","import React, { useState, useEffect, useContext } from 'react';\nimport Modal from 'react-bootstrap/Modal'\nimport Form from 'react-bootstrap/Form';\nimport Button from 'react-bootstrap/Button';\nimport * as dayjs from 'dayjs'\nimport { useTranslation } from 'react-i18next';\nimport { postContentWithAction } from '../../apiConnect';\nimport { getSelectedLang } from '../../common';\nimport { formatPlannedDate, groupByKey, valueMax, dayJsFormatDate, groupByMarked, round, updateCalculativeArray } from '../../commonFunctions';\nimport NumberFormat from 'react-number-format';\nimport CalendarModal from './CalendarModal';\nimport Spinner from 'react-bootstrap/Spinner';\nimport { useAlert } from 'react-alert'\nimport AppContext from '../../AppContext';\nimport { OverlayTrigger, Tooltip, Badge } from 'react-bootstrap'\n\nimport '../../css/general.css'\n\nconst MarkPesticideModal = (props) => {\n const { t } = useTranslation();\n const { auth } = useContext(AppContext);\n const [plannedPests, setPlannedPests] = useState([]);\n const [combinedPests, setCombinedPests] = useState([]);\n const [calendarShow, setCalendarShow] = useState(false);\n const [date, setDate] = useState(dayjs().format());\n const [contentIsLoading, setContentIsLoading] = useState(true);\n const [infoText, setInfoText] = useState('Ladataan tietoja');\n const [saveInProgress, setSaveInProgress] = useState(false);\n\n //For area and amount calculations, CCD = CalculationCombinedData\n const [cCD, setCCD] = useState([]);\n\n const alert = useAlert();\n\n useEffect(() => {\n var plotIds = [];\n\n props.selectEvent.selectedPlots.forEach(p => {\n plotIds.push({ plotId: p.apNumber });\n });\n\n postContentWithAction(auth.getAccessToken(), 'plotOperation', 'getPlantProtectionOperations', { models: plotIds, lang: getSelectedLang() }, (data) => {\n data = data.filter((pest) => pest.growthInformation.date || pest.growthInformation.plannedDate);\n\n data.forEach(pest => {\n pest.plotData = props.selectEvent.selectedPlots.find(p => p.apNumber === pest.growthInformation.plotId);\n pest.plannedDate = pest.growthInformation.plannedDate;\n if (pest.growthInformation.date) {\n pest.date = pest.growthInformation.date;\n }\n\n var combinedProducts = \"\";\n if (pest.pesticides) {\n pest.pesticides.forEach(p => {\n combinedProducts = combinedProducts.concat('', p.product);\n });\n }\n if (pest.fertilizings) {\n pest.fertilizings.forEach(f => {\n combinedProducts = combinedProducts.concat('', f.product);\n });\n }\n pest.combinedProducts = combinedProducts;\n });\n setPlannedPests(data);\n\n var grouped1 = groupByKey(data, 'combinedProducts');\n var grouped2 = [];\n for (const key in grouped1) {\n var m = groupByMarked(grouped1[key], 'date', 'plannedDate');\n var b = [];\n for (const type in m) {\n for (const key in m[type]) { // Looping grouped keys\n var combinedIds = [];\n var combinedArea = 0;\n var combinedAmounts = [];\n\n m[type][key].forEach(p => { // Looping pesticide operations\n if (p.fertilizings.length && p.fertilizings[0].area) {\n combinedArea += p.fertilizings[0].area;\n }\n else\n combinedArea += p.plotData.area;\n\n combinedIds.push({\n plotId: p.growthInformation.plotId,\n pesticideId: p.growthInformation.pesticideId,\n plotName: p.plotData.name + ' - ' + p.plotData.apChar,\n plotArea: p.plotData.area\n });\n\n // Finding min and max values for pesticides\n p.pesticides.forEach(f => {\n if (!combinedAmounts.find(el => el.product === f.product)) {\n var minMax = {\n product: f.product,\n min: f.amount,\n max: f.amount\n };\n combinedAmounts.push(minMax);\n }\n else {\n var combinedAmount = combinedAmounts.find(el => el.product === f.product);\n combinedAmount.min = Math.min(combinedAmount.min, f.amount);\n combinedAmount.max = Math.max(combinedAmount.max, f.amount);\n }\n });\n\n // Finding min and max values for fertilizings\n p.fertilizings.forEach(f => {\n if (!combinedAmounts.find(el => el.product === f.product)) {\n var minMax = {\n product: f.product,\n min: f.amount,\n max: f.amount\n };\n combinedAmounts.push(minMax);\n }\n else {\n var combinedAmount = combinedAmounts.find(el => el.product === f.product);\n combinedAmount.min = Math.min(combinedAmount.min, f.amount);\n combinedAmount.max = Math.max(combinedAmount.max, f.amount);\n }\n });\n });\n\n var combinedData = { ...m[type][key][0] }; // Copying first element for base data\n combinedAmounts.forEach(c => {\n c.min != c.max ? c.amount = null : c.amount = c.min;\n });\n\n b.push({\n date: key,\n combinedData: combinedData,\n combinedArea: combinedArea,\n combinedIds: combinedIds,\n combinedAmounts: combinedAmounts\n });\n }\n }\n grouped2.push({\n combinedProducts: key,\n objects: b\n });\n }\n\n setCCD(grouped2);\n setCombinedPests(grouped2);\n\n setContentIsLoading(false);\n setInfoText('Ei suunniteltuja');\n });\n\n }, [props.selectEvent]);\n\n const updateDate = (value) => {\n var newDate = date;\n newDate.date = value;\n setDate(newDate);\n };\n\n const getSectionHeader = (data) => {\n var text = [];\n data.combinedData.pesticides.forEach(p => {\n text.push(p.productName);\n });\n data.combinedData.fertilizings.forEach(f => {\n text.push(f.productName);\n });\n return text.join(' + ');\n }\n\n const savePesticides = () => {\n setSaveInProgress(true);\n var operations = [];\n\n combinedPests.forEach(pesticides => {\n pesticides.objects.forEach(data => {\n data.combinedIds.forEach(id => {\n if (data.combinedData.date) { // Only save if has a date\n var originalData = plannedPests.find(pest => pest.growthInformation.pesticideId === id.pesticideId);\n var updatePest = { ...originalData };\n\n if (updatePest.fertilizings) {\n updatePest.fertilizings.forEach(f => {\n var defaultAmount = f.amount;\n f.amount = data.combinedAmounts.find(a => a.product === f.product).amount;\n if (!f.amount) {\n f.amount = defaultAmount;\n }\n else {\n let rounded = round(f.amount);\n f.amount = rounded;\n }\n\n f.date = data.combinedData.date;\n });\n }\n\n if (updatePest.pesticides) {\n updatePest.pesticides.forEach(p => {\n var defaultAmount = p.amount;\n p.amount = data.combinedAmounts.find(a => a.product === p.product).amount;\n if (!p.amount) {\n p.amount = defaultAmount;\n }\n else {\n let rounded = round(p.amount);\n p.amount = rounded;\n }\n });\n }\n\n updatePest.growthInformation.date = data.combinedData.date;\n updatePest.growthInformation.saveSpray = true;\n updatePest.pesticideId = id.pesticideId;\n\n var protectionOp = {\n growthInfo: updatePest.growthInformation,\n inserts: {\n pesticideId: 0,\n growthInformation: null,\n pesticides: [],\n fertilizings: [],\n observations: []\n },\n updates: updatePest\n };\n\n var pesticideSaveModel = {\n plotId: id.plotId,\n protectionOperations: [protectionOp]\n };\n\n operations.push(pesticideSaveModel);\n }\n });\n });\n });\n\n postContentWithAction(auth.getAccessToken(), 'plotOperation', 'savePlantProtectionOperations',\n { models: operations }, () => {\n props.setRefresh(Date.now());\n setSaveInProgress(false);\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n }).catch(e => {\n setSaveInProgress(false);\n alert.show(t('SavedFailed'), { type: 'error' });\n });\n\n props.onHide();\n }\n\n return (\n <>\n \n \n {t('MarkPesticideDone')}\n \n \n
\n {contentIsLoading ? : ''}\n {(combinedPests) && (combinedPests.length > 0) ? combinedPests.map((product, i) =>\n product.objects.map((pest, j) =>\n
\n
\n {getSectionHeader(pest)}\n
\n {pest.combinedIds.length > 1 ?\n \n {pest.combinedIds.slice(1).map((p, i) =>\n
{p.plotName}
\n )}\n \n }>\n \n
\n :\n pest.combinedIds.length === 1 ?\n \n : ''}\n
\n\n
\n\n {pest.combinedData.pesticides ? pest.combinedData.pesticides.map((pestProduct, k) =>\n
\n
{pestProduct.productName}
\n \n {t('Amount_ha')}\n p.product === cCD[i].objects[j].combinedData.pesticides[k].product).amount}\n decimalScale={2}\n fixedDecimalScale={false}\n placeholder={`${pest.combinedAmounts.find(p => p.product === pestProduct.product).min} - ${pest.combinedAmounts.find(p => p.product === pestProduct.product).max}`}\n onValueChange={(value) => {\n if (value.floatValue && round(value.floatValue) !== round(cCD[i].objects[j].combinedAmounts.find(p => p.product === cCD[i].objects[j].combinedData.pesticides[k].product).amount)) {\n if (value.floatValue) {\n setCCD(updateCalculativeArray(cCD, value.floatValue, i, j, k, true));\n pest.combinedAmounts.find(p => p.product === pestProduct.product).amount = value.floatValue;\n }\n }\n }}\n displayType={'input'}\n thousandSeparator={' '}\n suffix={' ' + pestProduct.unitText}\n isAllowed={valueMax}\n allowNegative={false}\n allowedDecimalSeparators={['.', ',']} />\n \n \n {t('Amount_Area')}\n p.product === cCD[i].objects[j].combinedData.pesticides[k].product).amount * cCD[i].objects[j].combinedArea : 0}\n decimalScale={2}\n fixedDecimalScale={false}\n onValueChange={(value) => {\n if (value.floatValue && round(value.floatValue) !== round(cCD[i].objects[j].combinedData.amount * cCD[i].objects[j].combinedArea)) {\n if (value.floatValue) {\n if (cCD[i].objects[j].combinedArea > 0) {\n setCCD(updateCalculativeArray(cCD, (value.floatValue / cCD[i].objects[j].combinedArea), i, j, k, true));\n pest.combinedAmounts.find(p => p.product === pestProduct.product).amount = value.floatValue / pest.combinedArea;\n }\n }\n }\n }}\n displayType={'input'}\n thousandSeparator={' '}\n suffix={' ' + pestProduct.unitText}\n isAllowed={valueMax}\n allowNegative={false}\n allowedDecimalSeparators={['.', ',']} />\n \n
\n ) : ''}\n\n {pest.combinedData.fertilizings ? pest.combinedData.fertilizings.map((fertilizer, k) =>\n
\n
{fertilizer.productName}
\n \n {t('Amount_ha')}\n p.product === cCD[i].objects[j].combinedData.fertilizings[k].product).amount}\n decimalScale={2}\n fixedDecimalScale={false}\n placeholder={`${pest.combinedAmounts.find(p => p.product === fertilizer.product).min} - ${pest.combinedAmounts.find(p => p.product === fertilizer.product).max}`}\n onValueChange={(value) => {\n if (value.floatValue && round(value.floatValue) !== round(cCD[i].objects[j].combinedAmounts.find(p => p.product === cCD[i].objects[j].combinedData.fertilizings[k].product).amount)) {\n if (value.floatValue) {\n setCCD(updateCalculativeArray(cCD, value.floatValue, i, j, k, false));\n pest.combinedAmounts.find(p => p.product === fertilizer.product).amount = value.floatValue;\n }\n }\n }}\n displayType={'input'}\n thousandSeparator={' '}\n suffix={' ' + fertilizer.unitText}\n isAllowed={valueMax}\n allowNegative={false}\n allowedDecimalSeparators={['.', ',']} />\n \n \n {t('Amount_Area')}\n p.product === cCD[i].objects[j].combinedData.fertilizings[k].product).amount * cCD[i].objects[j].combinedArea : 0}\n decimalScale={2}\n fixedDecimalScale={false}\n onValueChange={(value) => {\n if (value.floatValue && round(value.floatValue) !== round(cCD[i].objects[j].combinedData.amount * cCD[i].objects[j].combinedArea)) {\n if (value.floatValue) {\n if (cCD[i].objects[j].combinedArea > 0) {\n setCCD(updateCalculativeArray(cCD, (value.floatValue / cCD[i].objects[j].combinedArea), i, j, k, false));\n pest.combinedAmounts.find(p => p.product === fertilizer.product).amount = value.floatValue / pest.combinedArea;\n }\n }\n }\n }}\n displayType={'input'}\n thousandSeparator={' '}\n suffix={' ' + fertilizer.unitText}\n isAllowed={valueMax}\n allowNegative={false}\n allowedDecimalSeparators={['.', ',']} />\n \n
\n ) : ''}\n\n \n {t('Date')}\n {\n setDate(pest.combinedData);\n setCalendarShow(true);\n }}\n placeholder={formatPlannedDate(pest.combinedData.plannedDate, t)}\n value={pest.combinedData.date ? dayJsFormatDate(pest.combinedData.date) : ''}\n onChange={() => { }} />\n \n
\n
)\n ) :
{infoText}
}\n \n
\n \n \n \n \n
\n {calendarShow === true ?\n setCalendarShow(false)}\n onChange={updateDate}\n selecteddate={date.date}\n />\n : ''}\n \n )\n}\n\nexport default MarkPesticideModal;","import React, { useState, useEffect, useContext, useRef } from 'react';\nimport Modal from 'react-bootstrap/Modal'\nimport Select from 'react-select';\nimport Form from 'react-bootstrap/Form';\nimport Button from 'react-bootstrap/Button';\nimport ButtonGroup from 'react-bootstrap/ButtonGroup';\nimport Accordion from 'react-bootstrap/Accordion';\nimport NumberFormat from 'react-number-format';\nimport ToggleButton from 'react-bootstrap/ToggleButton';\nimport { useTranslation } from 'react-i18next';\nimport * as dayjs from 'dayjs'\nimport CalendarModal from './CalendarModal';\nimport { ICONS } from '../../img/icons'\nimport Icon from '../../img/Icon'\nimport Spinner from 'react-bootstrap/Spinner';\n\nimport {\n getContentWithAction, \n postContentWithAction, putContentWithAction\n} from '../../apiConnect';\nimport { getSelectedPlot, formatGroupLabel} from '../../common';\nimport { useAlert } from 'react-alert'\nimport { valueMax, dayJsFormatDate, round } from '../../commonFunctions';\nimport AppContext from '../../AppContext';\n\nimport '../../css/general.css'\nimport '../../css/plotOperation.css'\n\nconst FertilizeModal = (props) => {\n const { t } = useTranslation();\n const { auth } = useContext(AppContext);\n\n const [calendarShow, setCalendarShow] = useState(false);\n const [selectedFertilizer, setSelectedFertilizer] = useState(0);\n const [amount, setAmount] = useState(0);\n const [amountArea, setAmountArea] = useState(0);\n const [totalArea, setTotalArea] = useState(0);\n const [prevAndAllFertilizers, setPrevAndAllFertilizers] = useState([]);\n const [prevAndAllFertilizersBasicList, setPrevAndAllFertilizersBasicList] = useState([]);\n const [manureAndFarmFertilizers, setManureAndFarmFertilizers] = useState([]);\n const [manureAndFarmFertilizersBasicList, setManureAndFarmFertilizersBasicList] = useState([]);\n const [date, setDate] = useState(dayjs().format());\n const [fertilizerGroup, setFertilizerGroup] = useState('1')\n const [multiSelect, setMultiSelect] = useState(false);\n const [unit, setUnit] = useState('kg');\n const [validate, setValidation] = useState(false);\n const [tankMixtureText, setTankMixtureText] = useState(false);\n const [buttonWriteShow, setButtonWriteShow] = useState(false); // allowed save btn disabled\n const [validFertilizerArea, setValidFertilizerArea] = useState(false);\n\n const [showFertilizerArea, setShowFertilizerArea] = useState(false);\n const [fertilizerArea, setFertilizerArea] = useState(0);\n const [areaUnit, setAreaUnit] = useState('ha');\n const [saveInProgress, setSaveInProgress] = useState(false);\n\n const textt = (t('ChooseFertilizer'));\n\n const alert = useAlert();\n\n let selectedPlot = useRef(getSelectedPlot());\n\n const fertilizerRadios = [\n { name: t('FarmFertilizers'), value: '1' },\n { name: t('All'), value: '2' }\n ]\n\n useEffect(() => {\n Promise.all([\n //KAIKKI\n getContentWithAction(auth.getAccessToken(), 'resource', 'fertilizers', {}),\n //AIEMMIN KÄYTETYT\n getContentWithAction(auth.getAccessToken(), 'resource', 'previousfertilizers', {}),\n //KARJANLANNAT\n getContentWithAction(auth.getAccessToken(), 'resource', 'manurefertilizers', {}),\n //TILAN LANNOITTEET\n getContentWithAction(auth.getAccessToken(), 'resource', 'farmfertilizers', {}),\n //TILAN LANNOITESEOKSET\n getContentWithAction(auth.getAccessToken(), 'resource', 'ownfertilizers', {}),\n //TILAN KALKIT\n getContentWithAction(auth.getAccessToken(), 'resource', 'farmlimefertilizers', {}),\n // session\n getContentWithAction(auth.getAccessToken(), 'session', 'storeAllowed', {})\n ]).then(([allFertilizers, previousfertilizers, manureFertilizers, farmFertilizers, ownFertilizers, limeFertilizers, sessionResult]) => {\n\n previousfertilizers = previousfertilizers.filter(p => {\n if (allFertilizers.some(a => a.product === p.product)) return true;\n\n return false;\n });\n\n let farmAndOwn = [...farmFertilizers, ...ownFertilizers]\n\n setPrevAndAllFertilizers([\n { label: t('Previously_Used'), options: previousfertilizers },\n { label: t('All'), options: allFertilizers },\n ]);\n setPrevAndAllFertilizersBasicList([...previousfertilizers, ...allFertilizers]);\n\n let list = [\n { label: t('FarmFertilizers'), options: farmAndOwn },\n { label: t('Manures'), options: manureFertilizers },\n ];\n if (limeFertilizers.length) {\n list.push({ label: t('Limes'), options: limeFertilizers });\n }\n setManureAndFarmFertilizers(list);\n setManureAndFarmFertilizersBasicList([...farmAndOwn, ...manureFertilizers, ...limeFertilizers]);\n\n setButtonWriteShow(sessionResult);\n });\n\n if (selectedPlot && selectedPlot.current && selectedPlot.current.area) {\n validateFertilizerArea(selectedPlot.current.area);\n setFertilizerArea(selectedPlot.current.area);\n }\n\n }, []);\n\n useEffect(() => {\n // Set fertilizerGroup based on selected fertilizer\n if (manureAndFarmFertilizers && prevAndAllFertilizers) {\n if (manureAndFarmFertilizers.some(a => {\n return a.options.some(fert => fert.value === selectedFertilizer.value)\n }))\n {\n setFertilizerGroup('1');\n }\n else if (prevAndAllFertilizers.some(a => {\n return a.options.some(fert => fert.value === selectedFertilizer.value)\n }))\n {\n setFertilizerGroup('2');\n }\n }\n }, [manureAndFarmFertilizers, prevAndAllFertilizers]);\n\n const responseHandler = (data) => {\n if (!data) {\n setSelectedFertilizer(0);\n setAmount(0);\n setDate(dayjs(Date.now()).format());\n setFertilizerGroup('1');\n return;\n }\n setSelectedFertilizer({ value: data.product });\n setAmount(data.amount);\n\n if (data.area) {\n validateFertilizerArea(data.area);\n setFertilizerArea(data.area);\n setAmountArea(data.amount * data.area);\n }\n else if (data.amount && selectedPlot && selectedPlot.current && selectedPlot.current.area) \n setAmountArea(data.amount * selectedPlot.current.area);\n\n if (data.unitText)\n setUnit(data.unitText || 'kg');\n\n if (data.date) {\n setDate(dayjs(data.date).format());\n }\n\n if (data.pesticideId)\n setTankMixtureText(true);\n }\n\n useEffect(() => {\n if (props.selectEvent.selectedPlots) { // If multiple chosen plots\n setShowFertilizerArea(false);\n setMultiSelect(true);\n setTotalArea(props.selectEvent.selectedPlots.reduce((total, currentItem) => total = total + currentItem.area, 0));\n }\n else {\n setShowFertilizerArea(true);\n }\n\n if (props.selectEvent.selectedElement) { // Editing\n setValidation(true);\n responseHandler(props.selectEvent.selectedElement);\n }\n else { // Adding new\n responseHandler({\n product: 0,\n amount: 0,\n disseminationDate: dayjs().format()\n });\n }\n }, [props.selectEvent]);\n\n const deleteFertilizing = () => {\n setSaveInProgress(true);\n postContentWithAction(auth.getAccessToken(), 'fertilize', 'delete', { fertilizingId: props.selectEvent.selectedElement.fertilizingId, plotId: getSelectedPlot().apNumber }, () => {\n props.setRefresh(Date.now());\n props.onHide();\n setSaveInProgress(false);\n }).catch(e => {\n alert.show(t('SavedFailed'), { type: 'error' });\n setSaveInProgress(false);\n });\n }\n\n const saveFertilizing = () => {\n var newFertilizings = [];\n\n //validate\n if (!amount) return;\n if (!selectedFertilizer || !selectedFertilizer.value) return;\n setSaveInProgress(true);\n\n if (multiSelect) {\n props.selectEvent.selectedPlots.forEach((plot) => {\n newFertilizings.push({\n plotId: plot.apNumber,\n amount: round(amount),\n product: selectedFertilizer.value,\n productName: selectedFertilizer.label,\n date: date,\n fertilizingId: 0,\n unitType: 0,\n area: plot.area\n });\n });\n\n postContentWithAction(auth.getAccessToken(), 'fertilize', 'new', {\n models: newFertilizings\n }, (data) => {\n props.setRefresh(Date.now());\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n setSaveInProgress(false);\n }).catch(e => {\n alert.show(t('SavedFailed'), { type: 'error' });\n setSaveInProgress(false);\n });\n }\n else {\n if (!props.selectEvent.selectedElement) {\n newFertilizings.push({\n plotId: getSelectedPlot().apNumber,\n amount: round(amount),\n product: selectedFertilizer.value,\n productName: selectedFertilizer.label,\n date: date,\n fertilizingId: 0,\n unitType: 0,\n area: fertilizerArea > selectedPlot.current.area ? selectedPlot.current.area : fertilizerArea\n });\n\n postContentWithAction(auth.getAccessToken(), 'fertilize', 'new', {\n models: newFertilizings\n }, (data) => {\n props.setRefresh(Date.now());\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n setSaveInProgress(false);\n }).catch(e => {\n alert.show(t('SavedFailed'), { type: 'error' });\n setSaveInProgress(false);\n });\n }\n else {\n var unitti = null;\n unitti = manureAndFarmFertilizersBasicList.find(fert => fert.value === selectedFertilizer.value);\n if (!unitti)\n unitti = prevAndAllFertilizersBasicList.some(fert => fert.value === selectedFertilizer.value);\n\n var updateFertilizes = [];\n updateFertilizes.push({\n plotId: getSelectedPlot().apNumber,\n number: props.selectEvent.selectedElement.number,\n amount: round(amount),\n product: selectedFertilizer.value,\n productName: selectedFertilizer.label,\n date: date,\n fertilizingId: props.selectEvent.selectedElement.fertilizingId,\n unitType: unitti && unitti.unit ? unitti.unit : 13,\n plannedDate: props.selectEvent.selectedElement.plannedDate,\n area: fertilizerArea > selectedPlot.current.area ? selectedPlot.current.area : fertilizerArea\n });\n\n putContentWithAction(auth.getAccessToken(), 'fertilize', 'update', { models: updateFertilizes }).then((data) => {\n props.setRefresh(Date.now());\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n setSaveInProgress(false);\n }).catch(e => {\n alert.show(t('SavedFailed'), { type: 'error' });\n setSaveInProgress(false);\n });\n }\n }\n props.onHide();\n }\n\n let selectChanged = (data) => {\n setSelectedFertilizer(data);\n\n if (data.unitText)\n setUnit(data.unitText || 'kg');\n }\n\n const validateFertilizerArea = (value) => {\n if (value === 0 || value > selectedPlot.current.area) {\n setValidFertilizerArea(false);\n }\n else {\n setValidFertilizerArea(true);\n }\n }\n\n const checkSaveDisabled = () => {\n if (multiSelect) {\n return false;\n }\n\n return validFertilizerArea ? false : true;\n }\n\n return (\n <>\n \n \n {t('Fertiliser')}\n \n \n
\n \n {t('Fertiliser')}\n
\n \n {fertilizerRadios.map((radio, i) => (\n setFertilizerGroup(e.currentTarget.value)}\n >\n {radio.name}\n \n ))}\n \n
\n {(fertilizerGroup === '2') ?\n f.value === selectedFertilizer.value) || { label: textt, value: null }\n }\n onChange={(data) => selectChanged(data)}\n options={prevAndAllFertilizers}\n formatGroupLabel={formatGroupLabel}\n />\n :\n f.value === selectedFertilizer.value) || { label: textt, value: null }\n }\n onChange={(data) => selectChanged(data)}\n options={manureAndFarmFertilizers}\n formatGroupLabel={formatGroupLabel}\n />\n }\n\n {tankMixtureText ?\n
{t('TankMixture')}
\n : ''\n }\n
\n\n {showFertilizerArea ?\n \n {t('FertilizerArea')}\n = 0 ? fertilizerArea : ''}\n placeholder={' ' + areaUnit}\n decimalScale={2}\n onValueChange={(values) => {\n if (values.floatValue !== null && values.floatValue\n !== fertilizerArea) {\n validateFertilizerArea(values.floatValue);\n setFertilizerArea(values.floatValue);\n setAmountArea(amount * values.floatValue);\n }\n if (!values.floatValue) {\n setValidFertilizerArea(false);\n }\n }}\n displayType={'input'}\n thousandSeparator={' '}\n suffix={' ' + areaUnit}\n allowNegative={false}\n isAllowed={valueMax}\n allowedDecimalSeparators={['.', ',']} />\n \n : ''}\n\n \n {t('Amount_ha')}\n 0 ? amount : ''}\n placeholder={' ' + unit}\n decimalScale={2}\n onValueChange={(values) => {\n if (values.floatValue && round(values.floatValue) !== round(amount)) {\n if (values.floatValue) {\n setAmount(values.floatValue)\n\n if (!multiSelect) {\n if (fertilizerArea)\n setAmountArea(values.floatValue * fertilizerArea);\n else if (selectedPlot.current && selectedPlot.current.area)\n setAmountArea(values.floatValue * selectedPlot.current.area);\n else\n setAmountArea(0);\n }\n else {\n if (totalArea)\n setAmountArea(values.floatValue * totalArea);\n else\n setAmountArea(0);\n }\n }\n else {\n setAmount(0);\n setAmountArea(0);\n }\n }\n }}\n displayType={'input'}\n thousandSeparator={' '}\n suffix={' ' + unit}\n allowNegative={false}\n isAllowed={valueMax}\n allowedDecimalSeparators={['.', ',']} />\n \n {!multiSelect ?\n \n {t('Amount_Area')}\n 0 ? amountArea : ''}\n placeholder={' ' + unit}\n decimalScale={2}\n onValueChange={(values) => {\n if (values.floatValue && round(values.floatValue) !== round(amountArea)) {\n if (values.floatValue) {\n if (selectedPlot.current.area > 0) {\n setAmount(values.floatValue / selectedPlot.current.area);\n }\n else\n setAmount(0);\n\n setAmountArea(values.floatValue);\n }\n else {\n setAmount(0);\n setAmountArea(0);\n }\n }\n }}\n displayType={'input'}\n thousandSeparator={' '}\n suffix={' ' + unit}\n allowNegative={false}\n isAllowed={valueMax}\n allowedDecimalSeparators={['.', ',']} />\n \n :\n \n {t('Amount_Area')}\n 0 ? amountArea : ''}\n placeholder={' ' + unit}\n decimalScale={2}\n onValueChange={(values, e) => {\n if (values.floatValue && round(values.floatValue) !== round(amountArea)) {\n if (values.floatValue) {\n if (totalArea > 0) {\n setAmount(values.floatValue / totalArea);\n }\n else\n setAmount(0);\n\n setAmountArea(values.floatValue);\n }\n else {\n setAmount(0);\n setAmountArea(0);\n }\n }\n }}\n displayType={'input'}\n thousandSeparator={' '}\n suffix={' ' + unit}\n isAllowed={valueMax}\n allowedDecimalSeparators={['.', ',']} />\n \n }\n \n {t('Date')}\n setCalendarShow(true)} placeholder={t('Date')} value={dayJsFormatDate(date)} onChange={() => { }} />\n \n {multiSelect ?\n \n \n {t('ShowChosenPlots')}\n \n
\n {props.selectEvent.selectedPlots.map((plot, i) =>\n
\n {plot.name} - {plot.apChar} ({plot.area} ha)\n
\n )}\n
\n
\n
\n
\n : ''}\n
\n
\n \n {props.selectEvent.selectedElement && buttonWriteShow === true ?\n \n : ''}\n\n \n\n {buttonWriteShow === true ?\n \n : ''}\n \n
\n setCalendarShow(false)}\n onChange={setDate}\n selecteddate={date}\n />\n \n );\n}\n\nexport default FertilizeModal;","import React, { useState, useEffect, useContext, useRef } from 'react';\nimport Modal from 'react-bootstrap/Modal'\nimport Select from 'react-select';\nimport Form from 'react-bootstrap/Form';\nimport Button from 'react-bootstrap/Button';\nimport Accordion from 'react-bootstrap/Accordion';\nimport NumberFormat from 'react-number-format';\nimport AppContext from '../../AppContext';\nimport { useTranslation } from 'react-i18next';\nimport * as dayjs from 'dayjs'\nimport { getSelectedPlot, formatGroupLabel, customStyles } from '../../common';\nimport CalendarModal from './CalendarModal';\nimport { useAlert } from 'react-alert'\nimport { getContentWithAction, postContentWithAction, putContentWithAction } from '../../apiConnect';\nimport { dayJsFormatDate, round, valueMax } from '../../commonFunctions';\n\nimport '../../css/general.css'\nimport '../../css/plotOperation.css'\n\nconst PlotModificationModal = (props) => {\n const { t } = useTranslation();\n const { auth } = useContext(AppContext);\n\n const [validate, setValidation] = useState(false);\n const [calendarShow, setCalendarShow] = useState(false);\n const [plotModifications, setPlotModifications] = useState([]);\n const [selectedPlotModification, setSelectedPlotModification] = useState(null);\n const [depth, setDepth] = useState(0);\n const [modificationCount, setModificationCount] = useState(0);\n const [tillingId, setTillingId] = useState(0);\n const [date, setDate] = useState(dayjs().format());\n const [multiSelect, setMultiSelect] = useState(false);\n const [unitText, setUnitText] = useState('');\n const [unit, setUnit] = useState(0);\n const [showDepth, setShowDepth] = useState(true);\n const [buttonWriteShow, setButtonWriteShow] = useState(false); // allowed save btn disabled\n const [cultivatedArea, setCultivatedArea] = useState(0);\n const [validCultivatedArea, setValidCultivatedArea] = useState(false);\n\n const textt = (t('ChooseModifications'));\n\n let selectedPlot = useRef(getSelectedPlot());\n const areaUnit = 'ha';\n\n const allowIdsWithUnit = useRef([21, 22, 42, 51]);\n const alert = useAlert();\n\n\n useEffect(() => {\n getContentWithAction(auth.getAccessToken(), 'resource', 'plotModificationOptions', {}).then((data) => {\n formatModificationGroups(data);\n\n if (props.selectEvent.selectedPlots) { // If multiple chosen plots, no responseHandler needed\n setMultiSelect(true);\n }\n else {\n if (props.selectEvent.selectedElement) {\n responseHandler(props.selectEvent.selectedElement);\n setValidation(true);\n }\n else {\n responseHandler({\n way: 0,\n count: 1,\n depth: 0,\n actionDate: dayjs().format()\n });\n setValidation(true);\n }\n }\n });\n\n getContentWithAction(auth.getAccessToken(), 'session', 'storeAllowed', {}).then((result) => {\n setButtonWriteShow(result);\n });\n\n }, [props.selectEvent]);\n\n const formatModificationGroups = (data) => {\n var previousList = data.filter(item => item.farmUsed === 1).map(x => ({ ...x }));\n\n setPlotModifications([\n { label: t('Previously_Used'), options: previousList },\n { label: t('All'), options: data }\n ]);\n };\n\n const responseHandler = (data) => {\n setSelectedPlotModification({ label: data.description ? data.description : undefined, value: data.way });\n setModificationCount(data.count);\n setDepth(data.depth);\n\n if (data.cultivatedArea) {\n validateCultivatedArea(data.cultivatedArea);\n setCultivatedArea(data.cultivatedArea);\n }\n else {\n validateCultivatedArea(selectedPlot.current.area);\n setCultivatedArea(selectedPlot.current.area);\n }\n\n if (data.unitText)\n setUnitText(data.unitText || 'kg');\n\n if (data.unitNumber)\n setUnit(data.unitNumber);\n\n if (!allowIdsWithUnit.current.find(a => a === data.unitNumber)) {\n setDepth(0);\n setShowDepth(false);\n }\n\n setTillingId(data.number);\n\n if (data.actionDate) {\n setDate(dayjs(data.actionDate).format());\n }\n }\n\n const deletePlotModification = () => {\n var modification = {\n number: props.selectEvent.selectedElement.number,\n plotId: getSelectedPlot().apNumber\n };\n postContentWithAction(auth.getAccessToken(), 'plotModification', 'delete', modification, () => {\n props.onHide();\n props.setRefresh(Date.now());\n });\n }\n\n const saveTilling = () => {\n // validate\n if (!selectedPlotModification || !selectedPlotModification.value) return;\n\n var newModifications = [];\n\n if (multiSelect) {\n props.selectEvent.selectedPlots.forEach((plot) => {\n newModifications.push({\n plotId: plot.apNumber,\n depth: depth,\n count: modificationCount,\n way: selectedPlotModification.value,\n actionDate: date,\n cultivatedArea: plot.area\n });\n });\n\n postContentWithAction(auth.getAccessToken(), 'plotModification', 'new', {\n models: newModifications\n }, () => {\n props.setRefresh(Date.now());\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n }).catch(e => {\n alert.show(t('SavedFailed'), { type: 'error' });\n });\n }\n else {\n if (!props.selectEvent.selectedElement) {\n newModifications.push({\n plotId: getSelectedPlot().apNumber,\n depth: depth,\n count: modificationCount,\n way: selectedPlotModification.value,\n actionDate: date,\n cultivatedArea: cultivatedArea\n });\n\n postContentWithAction(auth.getAccessToken(), 'plotModification', 'new', {\n models: newModifications\n }, () => {\n props.setRefresh(Date.now());\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n }).catch(e => {\n alert.show(t('SavedFailed'), { type: 'error' });\n });\n }\n else {\n putContentWithAction(auth.getAccessToken(), 'plotModification', 'update', {\n plotId: getSelectedPlot().apNumber,\n depth: depth,\n count: modificationCount,\n way: selectedPlotModification.value,\n actionDate: date,\n number: tillingId,\n cultivatedArea: cultivatedArea\n }).then(() => {\n props.setRefresh(Date.now());\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n }).catch(e => {\n alert.show(t('SavedFailed'), { type: 'error' });\n });\n }\n }\n props.onHide();\n }\n\n let selectChanged = (data) => {\n setSelectedPlotModification(data);\n if (data.unitText)\n setUnitText(data.unitText || 'kg');\n\n if (data.unitNumber)\n setUnit(data.unitNumber);\n\n if (!allowIdsWithUnit.current.find(a => a === data.unitNumber)) {\n setDepth(0);\n setShowDepth(false);\n }\n else {\n setDepth(1);\n setShowDepth(true);\n }\n }\n\n let depthValueValidator = (data) => {\n if (data < 1)\n setDepth(parseInt(0))\n else if (data > 99)\n setDepth(parseInt(99))\n else\n setDepth(parseInt(data))\n }\n let setValueValidator = (data) => {\n if (data < 1)\n setModificationCount(0)\n else if (data > 9)\n setModificationCount(parseInt(9))\n else\n setModificationCount(parseInt(data))\n }\n\n const validateCultivatedArea = (value) => {\n if (value === 0 || value > selectedPlot.current.area) {\n setValidCultivatedArea(false);\n }\n else {\n setValidCultivatedArea(true);\n }\n }\n\n const checkSaveDisabled = () => {\n //validate\n if (!selectedPlotModification || !selectedPlotModification.value) return true;\n\n if (multiSelect) {\n return false;\n }\n\n return validCultivatedArea ? false : true;\n }\n\n return (\n <>\n \n \n {t('Tilling')}\n \n \n
\n \n {t('Tilling')}\n selectChanged(value)}\n options={plotModifications}\n formatGroupLabel={formatGroupLabel}\n styles={customStyles}\n />\n \n\n \n {t('Depth')} {unitText ? '(' + unitText + ')' : null}\n
\n
\n a === unit) ? false : true}\n type=\"input\"\n value={showDepth && depth > 0 ? depth : ''}\n onChange={(value) => {\n if (value) {\n depthValueValidator(value.target.value);\n }\n }} />\n
\n
\n a === unit) ? false : true}\n type=\"range\" onChange={(value) => setDepth(parseInt(value.target.value))}\n value={depth > 0 ? depth : 0}\n variant='success'\n />\n
\n
\n
\n\n \n {t('Sets')}\n
\n
\n 0 ? modificationCount : ''}\n onChange={(value) => {\n if (value) {\n setValueValidator(value.target.value);\n }\n }} />\n\n
\n
\n {\n if (value) {\n setValueValidator(value.target.value);\n }\n }}\n value={modificationCount > 0 ? modificationCount : 0}\n min={1} max={9}\n />\n
\n
\n
\n\n {/* LANNOITUSALA */}\n {!multiSelect ? \n \n {t('FertilizerArea')}\n = 0 ? cultivatedArea : ''}\n placeholder={' ' + areaUnit}\n decimalScale={2}\n onValueChange={(values) => {\n if (values.floatValue !== null && values.floatValue\n !== cultivatedArea) {\n validateCultivatedArea(values.floatValue);\n setCultivatedArea(values.floatValue);\n }\n if (!values.floatValue) {\n setValidCultivatedArea(false);\n }\n }}\n displayType={'input'}\n thousandSeparator={' '}\n suffix={' ' + areaUnit}\n allowNegative={false}\n isAllowed={valueMax}\n allowedDecimalSeparators={['.', ',']} />\n \n : ''}\n\n \n {t('Date')}\n setCalendarShow(true)} placeholder={t('Date')} value={dayJsFormatDate(date)} onChange={() => { }} />\n \n {multiSelect ?\n \n \n {t('ShowChosenPlots')}\n \n
\n {props.selectEvent.selectedPlots.map((plot, i) =>\n
\n {plot.name} - {plot.apChar} ({plot.area} ha)\n
\n )}\n
\n
\n
\n
\n : ''}\n
\n
\n \n {props.selectEvent.selectedElement && buttonWriteShow === true ?\n : ''}\n\n \n\n {buttonWriteShow === true ?\n \n : ''}\n \n
\n setCalendarShow(false)}\n onChange={setDate}\n selecteddate={date}\n />\n \n );\n}\n\nexport default PlotModificationModal;","export const noInput = {\n backgroundColor: 'transparent',\n display: 'inline',\n width: '35%',\n fontWeight: 'bold',\n border: 'none'\n}\n\n","import React, { useState, useContext, useEffect } from 'react';\nimport Modal from 'react-bootstrap/Modal';\nimport Form from 'react-bootstrap/Form';\nimport { useTranslation } from 'react-i18next';\nimport Button from 'react-bootstrap/Button';\nimport '../../css/general.css'\nimport AppContext from '../../AppContext';\nimport { postContentWithAction } from '../../apiConnect';\nimport NumberFormat from 'react-number-format';\nimport Spinner from 'react-bootstrap/Spinner';\n\nconst SiloModal = (props) => {\n const { t } = useTranslation();\n const { auth } = useContext(AppContext);\n const [silo, setSilo] = useState(props.defaultName ? props.defaultName : '');\n const [capacity, setCapacity] = useState(0);\n const [volume, setVolume] = useState(0);\n const [saveInProgress, setSaveInProgress] = useState(false);\n const [existingStorages, setExistingStorages] = useState([]);\n const [invalidName, setInvalidName] = useState(false);\n\n useEffect(() => {\n setExistingStorages(props.existingStorages);\n }, [props.existingStorages]);\n\n const checkSiloName = (name) => {\n var exists = false;\n for (var i = 0; i < existingStorages.length; i++) {\n if (existingStorages[i].name.toLowerCase() === name.toLowerCase()) {\n exists = true;\n break;\n }\n }\n if (exists) setInvalidName(true);\n else setInvalidName(false);\n setSilo(name);\n }\n\n return (\n \n \n {t('AddNewStorage')}\n \n \n
\n\n \n {t('Name')}:\n {\n checkSiloName(e.currentTarget.value);\n }}\n placeholder='' />\n \n\n \n {t('Volume')}:\n {\n if (values.floatValue !== null) {\n setVolume(values.floatValue);\n }\n }}\n displayType={'input'}\n thousandSeparator={' '}\n suffix={' m3'}\n allowNegative={false}\n allowedDecimalSeparators={['.', ',']} />\n\n \n\n \n {t('Capacity')}:\n {\n if (values.floatValue !== null) {\n setCapacity(values.floatValue);\n }\n }}\n displayType={'input'}\n thousandSeparator={' '}\n suffix={' kg'}\n allowNegative={false}\n allowedDecimalSeparators={['.', ',']} />\n\n \n
\n
\n \n \n {props.buttonWriteShow === true ?\n \n : ''}\n \n \n );\n}\n\nexport default SiloModal;","import React, { useState, useEffect, useContext, useRef } from 'react';\nimport Modal from 'react-bootstrap/Modal'\nimport Select from 'react-select';\nimport Form from 'react-bootstrap/Form';\nimport Button from 'react-bootstrap/Button';\nimport NumberFormat from 'react-number-format';\nimport Accordion from 'react-bootstrap/Accordion';\nimport { useTranslation } from 'react-i18next';\nimport * as dayjs from 'dayjs'\nimport Spinner from 'react-bootstrap/Spinner';\nimport ButtonGroup from 'react-bootstrap/ButtonGroup';\nimport { ToggleButton } from 'react-bootstrap';\nimport { noInput } from '../ComponentStyles/InputStyles.js'\nimport { useAlert } from 'react-alert'\nimport { valueMax, valueMaxArea, valueMaxDryMaterialPercentage, dayJsFormatDate, round } from '../../commonFunctions';\nimport AppContext from '../../AppContext';\n\nimport '../../css/general.css'\nimport '../../css/plotOperation.css'\n\nimport CalendarModal from './CalendarModal';\nimport SiloModal from './SiloModal';\nimport { getContentWithAction, postContentWithAction, putContentWithAction } from '../../apiConnect';\nimport { getSelectedPlot, formatGroupLabel } from '../../common';\nimport * as harvestConstants from '../../Constants/HarvestConstants.js';\n\nconst HarvestModal = (props) => {\n const { t } = useTranslation();\n const { auth } = useContext(AppContext);\n\n const [pageIsLoading, setPageIsLoading] = useState(true);\n const [calendarShow, setCalendarShow] = useState(false);\n const [siloShow, setSiloShow] = useState(false);\n\n const [products, setProducts] = useState([]);\n const [productsIsLoading, setProductsIsLoading] = useState(true);\n const [selectedProduct, setSelectedProduct] = useState(0);\n const [storages, setStorages] = useState([]);\n const [drawStorages, setDrawStorages] = useState([]);\n\n const [storagesIsLoading, setStoragesIsLoading] = useState(true);\n const [selectedStorage, setSelectedStorage] = useState(0);\n const [harvestArea, setHarvestArea] = useState(0);\n const [amount, setAmount] = useState(0);\n const [amountArea, setAmountArea] = useState(0);\n const [totalArea, setTotalArea] = useState(0);\n const [date, setDate] = useState(dayjs().format());\n const [selectedHarvestUnitInputType, setSelectedHarvestUnitInputType] = useState(1);\n const [selectedHarvestUnit, setSelectedHarvestUnit] = useState('1');\n const [dryMateriaContent, setDryMateriaContent] = useState(0);\n const [unitPcs, setUnitPcs] = useState(0);\n const [freshContent, setFreshContent] = useState(0);\n const [trailerVolume, setTrailerVolume] = useState(0);\n const [volumeWeight, setVolumeWeight] = useState(0);\n const [validHarvestArea, setValidHarvestArea] = useState(false);\n\n const [dryMateriaPerHa, setDryMateriaPerHa] = useState(0);\n const [multiSelect, setMultiSelect] = useState(false);\n const [unit, setUnit] = useState('kg');\n const [validate, setValidation] = useState(false);\n const [buttonWriteShow, setButtonWriteShow] = useState(false); // allowed save btn disabled\n const [saveInProgress, setSaveInProgress] = useState(false);\n\n const textt = (t('ChooseStorage'));\n const textt2 = (t('ChooseProduct'));\n\n const alert = useAlert();\n let selectedPlot = useRef(getSelectedPlot());\n\n const harvestUnitsInputType = [\n { name: t('UnitKg'), value: 1 },\n { name: t('UnitKgDM'), value: 2 }\n ]\n\n const harvestUnitsGroup = [\n { name: t('UnitHarvestingSmallBale'), value: harvestConstants.SMALL_BALE_UNIT },\n { name: t('UnitHarvestingRoundBale'), value: harvestConstants.ROUND_BALE_UNIT },\n { name: t('UnitHarvestingCubicBale'), value: harvestConstants.CUBIC_BALE_UNIT },\n { name: t('UnitHarvestingWagon'), value: harvestConstants.WAGON_UNIT }\n ]\n\n useEffect(() => {\n !productsIsLoading && !storagesIsLoading ? setPageIsLoading(false) : setPageIsLoading(true);\n }, [productsIsLoading, storagesIsLoading])\n\n useEffect(() => {\n formatFields();\n let plantId = 0;\n setProductsIsLoading(true);\n setStoragesIsLoading(true);\n\n if (props.selectEvent.selectedPlots) { // If multiple chosen plots\n setMultiSelect(true);\n\n setTotalArea(props.selectEvent.selectedPlots.reduce((total, currentItem) => total = total + currentItem.area, 0));\n plantId = props.selectEvent.selectedPlots[0].plantId;\n\n }\n else {\n plantId = getSelectedPlot().plantId\n }\n\n Promise.all([\n getContentWithAction(auth.getAccessToken(), 'resource', 'products', { plantId: plantId }),\n getContentWithAction(auth.getAccessToken(), 'harvest', 'harvestSuggestions', {}),\n getContentWithAction(auth.getAccessToken(), 'resource', 'storages', {}),\n // session\n getContentWithAction(auth.getAccessToken(), 'session', 'storeAllowed', {})\n ]).then(([products, harvestSuggestions, storages, sessionResult]) => {\n\n formatProductGroups(harvestSuggestions, products);\n\n\n /* setProducts(products);*/\n setProductsIsLoading(false);\n\n setStorages(storages);\n setDrawStorages(storages);\n setStoragesIsLoading(false);\n\n if (props.selectEvent.selectedElement) // Editing\n {\n setValidation(true);\n responseHandler(props.selectEvent.selectedElement, products, storages);\n }\n else {\n var plot = getSelectedPlot();\n if (plot?.area) {\n validateHarvestArea(plot.area);\n setHarvestArea(plot.area);\n } else {\n setHarvestArea(0);\n }\n }\n\n setButtonWriteShow(sessionResult);\n });\n\n }, [props.selectEvent]);\n\n const responseHandler = (data, plantProducts, storagesResource) => {\n if (!data || data.memo) {\n return;\n }\n\n //product \n plantProducts ? setSelectedProduct(plantProducts.find(p => p.product === data.product)) : setSelectedProduct(data);\n //silo \n setDrawStorages(storagesResource.filter(s => Number(s.product) === Number(data.product)));\n setSelectedStorage(storagesResource && data.storageId ? storagesResource.find(s => s.value === data.storageId) : data.storageId);\n\n if (!data.loadAmount && data.amount && data.unitNumber === harvestConstants.DRY_CONTENT_UNIT_TYPE) {\n setSelectedHarvestUnitInputType(2);\n }\n\n\n if (!data.suggestion) {\n setUnitPcs(data.loadAmount);\n setAmount(data.amount);\n if (data.area) {\n validateHarvestArea(data.area);\n setHarvestArea(data.area);\n }\n }\n if (!data.area) {\n var plot = getSelectedPlot();\n if (plot?.area) {\n validateHarvestArea(plot.area);\n setHarvestArea(plot.area);\n } else {\n setHarvestArea(0);\n }\n }\n\n setFreshContent(data.baleWeight);\n\n setDryMateriaContent(data.dryMateriaContent);\n setSelectedHarvestUnit(data.harvestedUnit);\n\n if (data.harvestedUnit === harvestConstants.WAGON_UNIT) {\n setTrailerVolume(data.volume);\n\n if (data.unitNumber === harvestConstants.DRY_CONTENT_UNIT_TYPE)\n setVolumeWeight(data.volumeWeight);\n }\n\n if (data.beginDate && props.selectEvent.selectedElement) {\n setDate(dayjs(data.beginDate).format());\n }\n else {\n setDate(dayjs(Date.now()).format());\n }\n\n if (data.unitText)\n setUnit(data.unitText || 'kg');\n }\n\n const formatProductGroups = (harvestSuggestions, products) => {\n\n let unique = [];\n\n harvestSuggestions = harvestSuggestions.filter(p => {\n var match = products.find(a => a.product === p.product);\n if (match) {\n p.value = match.value;\n p.label = match.label;\n p.unitText = match.unitText;\n p.explanation = match.explanation;\n p.suggestion = true;\n return true;\n }\n\n return false;\n });\n\n\n harvestSuggestions.sort((a, b) => {\n\n if (a.product === b.product) {\n if (a.farmYear > b.farmYear) {\n return -1;\n }\n if (a.farmYear < b.farmYear) {\n return 1;\n }\n if (a.farmYear === b.farmYear) {\n if (dayjs(a.modificationDate).isAfter(dayjs(b.modificationDate))) {\n return -1;\n }\n if (dayjs(b.modificationDate).isAfter(dayjs(a.modificationDate))) {\n return 1;\n }\n if (dayjs(a.modificationDate).isSame(dayjs(b.modificationDate))) {\n return -1;\n }\n }\n }\n else {\n if (a.product > b.product) {\n return 1;\n }\n if (a.product < b.product) {\n return -1;\n }\n\n }\n return 0;\n });\n\n\n for (let i = 0; i < harvestSuggestions.length; i++) { // nested for loop\n for (let j = 0; j < harvestSuggestions.length; j++) {\n if (harvestSuggestions[i].harvestId !== harvestSuggestions[j].harvestId) {\n if (harvestSuggestions[i].product === harvestSuggestions[j].product) {\n if (harvestSuggestions[i].farmYear > harvestSuggestions[j].farmYear) {\n if (!unique.some((e) => e.product === harvestSuggestions[i].product)) {\n unique.push(harvestSuggestions[i]);\n }\n continue;\n }\n if (harvestSuggestions[i].farmYear < harvestSuggestions[j].farmYear) {\n if (!unique.some((e) => e.product === harvestSuggestions[i].product)) {\n unique.push(harvestSuggestions[i]);\n }\n continue;\n }\n if (harvestSuggestions[i].farmYear === harvestSuggestions[j].farmYear) {\n if (dayjs(harvestSuggestions[i].modificationDate).isAfter(dayjs(harvestSuggestions[j].modificationDate))) {\n if (!unique.some((e) => e.product === harvestSuggestions[i].product)) {\n unique.push(harvestSuggestions[i]);\n }\n continue;\n }\n if (dayjs(harvestSuggestions[j].modificationDate).isAfter(dayjs(harvestSuggestions[i].modificationDate))) {\n if (!unique.some((e) => e.product === harvestSuggestions[i].product)) {\n unique.push(harvestSuggestions[j]);\n }\n continue;\n }\n if (dayjs(harvestSuggestions[i].modificationDate).isSame(dayjs(harvestSuggestions[j].modificationDate))) {\n if (!unique.some((e) => e.product === harvestSuggestions[i].product)) {\n unique.push(harvestSuggestions[i]);\n }\n continue;\n }\n }\n continue;\n }\n if (!unique.some((e) => e.product === harvestSuggestions[i].product)) {\n unique.push(harvestSuggestions[i]);\n }\n if (!unique.some((e) => e.product === harvestSuggestions[j].product)) {\n unique.push(harvestSuggestions[j]);\n }\n }\n }\n }\n\n setProducts([\n { label: t('Previously_Used'), options: unique },\n { label: t('All'), options: products },\n ]);\n };\n\n const formatFields = () => {\n setAmount(0);\n setSelectedStorage(0);\n setSelectedProduct(0);\n setDate(dayjs(Date.now()).format());\n setSelectedHarvestUnit(harvestConstants.SMALL_BALE_UNIT);\n }\n\n const deleteHarvest = () => {\n setSaveInProgress(true);\n postContentWithAction(auth.getAccessToken(), 'harvest', 'delete', {\n harvestId: props.selectEvent.selectedElement.harvestId, plotId: getSelectedPlot().apNumber\n }, () => {\n props.setRefresh(Date.now());\n props.onHide();\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n setSaveInProgress(false);\n }).catch(e => {\n alert.show(t('SavedFailed'), { type: 'error' });\n setSaveInProgress(false);\n });\n }\n\n const compareArea = (a, b) => {\n if (a.plotArea < b.plotArea)\n return 1;\n if (a.plotArea > b.plotArea)\n return -1;\n return 0;\n }\n\n const checkMultipleAndCalculateLoadAmounts = (loadNumber) => {\n // left to share with plots (everyone gets one)\n var loadPerPlot = loadNumber - props.selectEvent.selectedPlots.length;\n\n var newPlotArray = [];\n props.selectEvent.selectedPlots.forEach((plot) => {\n newPlotArray.push({\n plotArea: plot.area,\n plotId: plot.apNumber,\n loadAmount: 0,\n amount: 0\n });\n });\n\n newPlotArray.sort(compareArea);\n var selectedArea = newPlotArray.reduce((total, plot) => plot.plotArea + total, 0);\n\n // share first loads\n var addInStart = true;\n newPlotArray.forEach((plot, index) => {\n if (loadNumber <= index) addInStart = false;\n\n plot.loadAmount = addInStart ? 1 : 0\n });\n\n // share loads which left over \n newPlotArray.forEach(plot => {\n var plotloads = 0;\n if (loadPerPlot > 0) {\n plotloads =\n Math.floor((plot.plotArea / selectedArea) *\n loadPerPlot); // area divided totalarea * perplotloads --> floor takes integer part\n }\n plot.loadAmount += plotloads;\n\n });\n\n // extras, add to first one\n var attachedLoads = newPlotArray.reduce((total, plot) => plot.loadAmount + total, 0); // attached loads\n if (newPlotArray.length && attachedLoads && loadNumber > 0) {\n newPlotArray[0].loadAmount += loadNumber - attachedLoads;\n }\n\n newPlotArray.forEach(plot => {\n\n //calculate new amount for plot\n let totalValue = calculateAmountFromLoadValues(plot);\n\n var newValue = totalValue\n ? Math.round((Number(totalValue)) * 100) / 100\n : 0;\n\n plot.amount = newValue;\n });\n\n return newPlotArray;\n }\n\n const calculateAmountFromLoadValues = (plot) => {\n return (selectedHarvestUnit === harvestConstants.WAGON_UNIT) ?\n ((plot.loadAmount * trailerVolume * volumeWeight) / plot.plotArea) * (dryMateriaContent / 100)\n : ((plot.loadAmount * freshContent) / plot.plotArea) * (dryMateriaContent / 100)\n }\n\n const saveHarvest = () => {\n let loadAmount = 0, baleWeight = 0, volume = 0, vWeight = 0, harvestedUnit = 0;\n let newAmount = amount;\n\n if (selectedProduct && ((selectedProduct.unitType && selectedProduct.unitType === harvestConstants.DRY_CONTENT_UNIT_TYPE) ||\n (selectedProduct.unitNumber && selectedProduct.unitNumber === harvestConstants.DRY_CONTENT_UNIT_TYPE)) && selectedHarvestUnitInputType === 1) {\n loadAmount = unitPcs;\n\n if (selectedHarvestUnit === harvestConstants.WAGON_UNIT) {\n volume = trailerVolume;\n vWeight = volumeWeight;\n\n //validate\n if (!dryMateriaContent || !vWeight || !trailerVolume || !unitPcs)\n return;\n }\n else {\n baleWeight = freshContent;\n\n //validate\n if (!dryMateriaContent || !freshContent || !unitPcs)\n return;\n }\n\n harvestedUnit = Number(selectedHarvestUnit);\n newAmount = dryMateriaPerHa;\n }\n\n //validate\n if (!newAmount) return;\n if ((!multiSelect && !harvestArea) || (multiSelect && !totalArea)) return;\n\n if (!selectedProduct || !selectedProduct.product) return;\n\n if (!selectedStorage || !selectedStorage.id) return;\n\n var newHarvests = [];\n\n setSaveInProgress(true);\n if (multiSelect) {\n\n let balesArr = undefined;\n if (selectedProduct && ((selectedProduct.unitType && selectedProduct.unitType === harvestConstants.DRY_CONTENT_UNIT_TYPE) ||\n (selectedProduct.unitNumber && selectedProduct.unitNumber === harvestConstants.DRY_CONTENT_UNIT_TYPE))) {\n\n if (loadAmount >= props.selectEvent.selectedPlots.length) {\n balesArr = checkMultipleAndCalculateLoadAmounts(unitPcs);\n }\n }\n\n props.selectEvent.selectedPlots.forEach((plot) => {\n\n //if balesArr != null -> loadAmount and newAmount can be changed\n if (balesArr && balesArr.length) {\n let baleinfo = balesArr.find(b => b.plotId === plot.apNumber);\n if (!baleinfo || !baleinfo.amount) return;\n\n newAmount = baleinfo.amount;\n loadAmount = baleinfo.loadAmount;\n }\n\n newHarvests.push({\n plotId: plot.apNumber,\n product: selectedProduct.product,\n area: plot.area,\n amount: newAmount,\n beginDate: date,\n plannedDate: null,\n storageId: selectedStorage && selectedStorage.id ? selectedStorage.id : Number(selectedStorage) > 0 ? Number(selectedStorage) : 0,\n dryMateriaContent: dryMateriaContent,\n harvestedUnit: Number(harvestedUnit),\n hectoliterWeight: 0,\n volume: volume,\n volumeWeight: vWeight,\n loadAmount: loadAmount,\n baleWeight: baleWeight\n });\n });\n\n postContentWithAction(auth.getAccessToken(), 'harvest', 'new', {\n models: newHarvests\n }, () => {\n props.onHide();\n props.setRefresh(Date.now());\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n setSaveInProgress(false);\n }).catch(e => {\n alert.show(t('SavedFailed'), { type: 'error' });\n setSaveInProgress(false);\n });\n }\n\n else {\n if (!props.selectEvent.selectedElement) {\n newHarvests.push({\n plotId: getSelectedPlot().apNumber,\n product: selectedProduct.product,\n area: harvestArea,\n amount: newAmount,\n beginDate: date,\n plannedDate: null,\n storageId: selectedStorage && selectedStorage.id ? selectedStorage.id : Number(selectedStorage) > 0 ? Number(selectedStorage) : 0,\n dryMateriaContent: dryMateriaContent,\n harvestedUnit: Number(harvestedUnit),\n hectoliterWeight: 0,\n volume: volume,\n volumeWeight: vWeight,\n loadAmount: loadAmount,\n baleWeight: baleWeight\n });\n\n postContentWithAction(auth.getAccessToken(), 'harvest', 'new', {\n models: newHarvests\n }, () => {\n props.onHide();\n props.setRefresh(Date.now());\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n setSaveInProgress(false);\n }).catch(e => {\n alert.show(t('SavedFailed'), { type: 'error' });\n setSaveInProgress(false);\n });\n }\n else {\n putContentWithAction(auth.getAccessToken(), 'harvest', 'update', {\n harvestId: props.selectEvent.selectedElement.harvestId,\n plotId: getSelectedPlot().apNumber,\n product: selectedProduct.product,\n area: harvestArea,\n amount: newAmount,\n beginDate: date,\n plannedDate: null,\n storageId: selectedStorage && selectedStorage.id ? selectedStorage.id : Number(selectedStorage) > 0 ? Number(selectedStorage) : 0,\n dryMateriaContent: dryMateriaContent,\n harvestedUnit: Number(harvestedUnit),\n hectoliterWeight: 0,\n volume: volume,\n volumeWeight: vWeight,\n loadAmount: loadAmount,\n baleWeight: baleWeight\n }).then(() => {\n props.onHide();\n props.setRefresh(Date.now());\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n setSaveInProgress(false);\n }).catch(e => {\n alert.show(t('SavedFailed'), { type: 'error' });\n setSaveInProgress(false);\n });\n }\n }\n }\n\n const validateHarvestArea = (value) => {\n if (value === 0 || value > selectedPlot.current.area) {\n setValidHarvestArea(false);\n }\n else {\n setValidHarvestArea(true);\n }\n }\n\n const checkSaveDisabled = () => {\n if (multiSelect) {\n return false;\n }\n\n return validHarvestArea ? false : true;\n }\n\n return (\n <>\n \n \n {t('Yield')}\n \n \n {pageIsLoading ? :\n
\n \n {t('Product')}\n {productsIsLoading ? : ''}\n {\n setSelectedProduct(value);\n setDryMateriaContent(value.dryMateriaContent);\n\n if (value.unitText)\n setUnit(value.unitText || 'kg');\n\n let product = value.harvestId ? value.product : Number(value.product);\n\n let silos = storages.filter(s => Number(s.product) === product);\n setDrawStorages(silos);\n\n if (value.harvestId)\n responseHandler(value, null, silos);\n\n }}\n options={products}\n noOptionsMessage={({ inputValue }) => !inputValue ? t('NoProducts') : ''}\n formatGroupLabel={formatGroupLabel}\n />\n \n {selectedProduct && (selectedProduct.unitType === harvestConstants.DRY_CONTENT_UNIT_TYPE || selectedProduct.unitNumber === harvestConstants.DRY_CONTENT_UNIT_TYPE) ?\n /* ----------- PRODUCT WITH KG KA ----------- */\n
\n \n \n {harvestUnitsInputType.map((radio, i) => (\n setSelectedHarvestUnitInputType(Number(e.currentTarget.value))}\n >\n {radio.name}\n \n ))}\n \n \n {/* ----------- UNITTYPE: KG -> show load amounts ----------- */}\n {selectedHarvestUnitInputType && selectedHarvestUnitInputType === 1 ?\n <>\n {t('UnitHarvesting')}\n \n {harvestUnitsGroup.map((radio2, i) => (\n setSelectedHarvestUnit(Number(e.currentTarget.value))}\n >\n {radio2.name}\n \n ))}\n \n
\n \n {t('UnitPcsArea')}:\n {\n value.floatValue ?\n setUnitPcs(value.floatValue) : setUnitPcs(0);\n }}\n displayType={'input'}\n thousandSeparator={' '}\n isAllowed={valueMax}\n allowedDecimalSeparators={['.', ',']} />\n \n {(selectedHarvestUnit === harvestConstants.WAGON_UNIT)\n /* ----------- SELECTED UNIT: WAGON ----------- */\n ?\n \n {t('TrailerVolume')}:\n {\n value.floatValue ?\n setTrailerVolume(value.floatValue) : setTrailerVolume(0);\n }}\n displayType={'input'}\n isAllowed={valueMax}\n thousandSeparator={' '}\n allowedDecimalSeparators={['.', ',']} />\n \n\n /* ----------- SELECTED UNIT: BALES ----------- */\n :\n \n {t('UnitFreshContent')}:\n {\n value.floatValue ?\n setFreshContent(value.floatValue) : setFreshContent(0);\n }}\n displayType={'input'}\n isAllowed={valueMax}\n thousandSeparator={' '}\n allowedDecimalSeparators={['.', ',']} />\n }\n\n {(selectedHarvestUnit === harvestConstants.WAGON_UNIT)\n /* ----------- SELECTED UNIT: WAGON ----------- */\n ?\n \n {t('VolumeWeight')}:\n {\n value.floatValue ?\n setVolumeWeight(value.floatValue) : setVolumeWeight(0);\n }}\n displayType={'input'}\n isAllowed={valueMax}\n thousandSeparator={' '}\n allowedDecimalSeparators={['.', ',']} />\n \n\n /* ----------- SELECTED UNIT: BALES ----------- */\n : ''}\n\n {/*total calculation*/}\n \n {t('Total')}\n \n \n
\n\n : ''\n }\n {/*-----*/}\n \n {t('UnitDryMaterialPercentage')}:\n {\n value.floatValue ?\n setDryMateriaContent(value.floatValue) : setDryMateriaContent(0);\n }}\n displayType={'input'}\n thousandSeparator={' '}\n isAllowed={valueMaxDryMaterialPercentage}\n allowedDecimalSeparators={['.', ',']} />\n \n {selectedHarvestUnitInputType && selectedHarvestUnitInputType === 1 ?\n /* ----------- INPUT TYPE: KG ----------- */\n <>\n {t('Amount_ha')}:\n {\n value.floatValue ?\n setDryMateriaPerHa(value.floatValue) : setDryMateriaPerHa(0);\n }}\n displayType={'input'}\n thousandSeparator={' '}\n suffix={' ' + unit}\n allowNegative={false}\n disabled={true}\n allowedDecimalSeparators={['.', ',']} />\n \n {t('Amount_Area')}:\n \n \n :\n /* ----------- INPUT TYPE: KG KA ----------- */\n !multiSelect ?\n <>\n {t('Amount_ha')}:\n 0 ? amount : ''}\n decimalScale={2}\n fixedDecimalScale={false}\n onValueChange={(values) => {\n if (values.floatValue && round(values.floatValue) !== round(amount)) {\n if (values.floatValue) {\n setAmount(values.floatValue)\n if (totalArea)\n setAmountArea(values.floatValue * totalArea);\n else\n setAmountArea(0);\n\n }\n else {\n setAmount(0);\n setAmountArea(0);\n }\n }\n }}\n displayType={'input'}\n thousandSeparator={' '}\n suffix={' ' + unit}\n allowNegative={false}\n allowedDecimalSeparators={['.', ',']} />\n \n {t('Amount_Area')}:\n 0 ? amount * harvestArea : ''}\n decimalScale={2}\n fixedDecimalScale={false}\n onValueChange={(values) => {\n if (values.floatValue && round(values.floatValue) !== round(amountArea)) {\n if (values.floatValue) {\n\n if (harvestArea > 0) {\n setAmount(values.floatValue / harvestArea);\n }\n else\n setAmount(0);\n\n setAmountArea(values.floatValue);\n }\n else {\n setAmount(0);\n setAmountArea(0);\n }\n }\n }}\n displayType={'input'}\n thousandSeparator={' '}\n suffix={' ' + unit}\n allowNegative={false}\n allowedDecimalSeparators={['.', ',']} />\n \n :\n <>\n {t('Amount_ha')}:\n 0 ? amount : ''}\n decimalScale={2}\n fixedDecimalScale={false}\n onValueChange={(values) => {\n if (values.floatValue && round(values.floatValue) !== round(amount)) {\n if (values.floatValue) {\n setAmount(values.floatValue)\n\n if (harvestArea)\n setAmountArea(values.floatValue * harvestArea);\n else\n setAmountArea(0);\n\n }\n else {\n setAmount(0);\n setAmountArea(0);\n }\n }\n }}\n displayType={'input'}\n thousandSeparator={' '}\n suffix={' ' + unit}\n allowNegative={false}\n allowedDecimalSeparators={['.', ',']} />\n \n {t('Amount_Area')}:\n 0 ? amount * totalArea : ''}\n decimalScale={2}\n fixedDecimalScale={false}\n onValueChange={(values) => {\n if (values.floatValue && round(values.floatValue) !== round(amountArea)) {\n if (values.floatValue) {\n\n if (totalArea > 0) {\n setAmount(values.floatValue / totalArea);\n }\n else\n setAmount(0);\n\n setAmountArea(values.floatValue);\n }\n else {\n setAmount(0);\n setAmountArea(0);\n }\n }\n }}\n displayType={'input'}\n thousandSeparator={' '}\n suffix={' ' + unit}\n allowNegative={false}\n allowedDecimalSeparators={['.', ',']} />\n \n }\n\n
\n /* ----------- UNITTYPE: OTHER --> only kg ----------- */\n : !multiSelect ?\n
\n \n {t('Yield_HarvestArea')}:\n = 0 ? harvestArea : ''}\n decimalScale={2}\n fixedDecimalScale={false}\n onValueChange={(value) => {\n if (value.floatValue !== null && value.floatValue\n !== harvestArea) {\n validateHarvestArea(value.floatValue);\n setHarvestArea(value.floatValue);\n }\n if (!value.floatValue) {\n setValidHarvestArea(false);\n }\n }}\n suffix={' ha'}\n displayType={'input'}\n thousandSeparator={' '}\n isAllowed={valueMaxArea}\n allowedDecimalSeparators={['.', ',']} />\n \n \n {t('Amount_ha')}:\n 0 ? amount : ''}\n placeholder={' ' + unit}\n decimalScale={2}\n fixedDecimalScale={false}\n onValueChange={(values) => {\n if (values.floatValue && round(values.floatValue) !== round(amount)) {\n if (values.floatValue) {\n setAmount(values.floatValue)\n\n if (harvestArea)\n setAmountArea(values.floatValue * harvestArea);\n else\n setAmountArea(0);\n }\n else {\n setAmount(0);\n setAmountArea(0);\n }\n }\n }}\n displayType={'input'}\n thousandSeparator={' '}\n suffix={' ' + unit}\n allowNegative={false}\n isAllowed={valueMax}\n allowedDecimalSeparators={['.', ',']} />\n \n \n {t('Amount_Area')}:\n 0 ? amount * harvestArea : ''}\n placeholder={' ' + unit}\n decimalScale={2}\n fixedDecimalScale={false}\n onValueChange={(values) => {\n if (values.floatValue && round(values.floatValue) !== round(amountArea)) {\n if (values.floatValue) {\n if (harvestArea > 0) {\n setAmount(values.floatValue / harvestArea);\n }\n else\n setAmount(0);\n\n setAmountArea(values.floatValue);\n }\n else {\n setAmount(0);\n setAmountArea(0);\n }\n }\n }}\n displayType={'input'}\n thousandSeparator={' '}\n suffix={' ' + unit}\n allowNegative={false}\n isAllowed={valueMax}\n allowedDecimalSeparators={['.', ',']} />\n \n
\n :\n
\n \n {t('Yield_HarvestArea')}:\n {\n if (value.floatValue) {\n validateHarvestArea(value.floatValue);\n setHarvestArea(value.floatValue);\n }\n else {\n setAmount(0);\n }\n }}\n displayType={'input'}\n readOnly\n thousandSeparator={' '}\n allowedDecimalSeparators={['.', ',']} />\n \n \n {t('Amount_ha')}:\n 0 ? amount : ''}\n placeholder={' ' + unit}\n decimalScale={2}\n fixedDecimalScale={false}\n onValueChange={(values) => {\n if (values.floatValue && round(values.floatValue) !== round(amount)) {\n if (values.floatValue) {\n setAmount(values.floatValue)\n if (totalArea)\n setAmountArea(values.floatValue * totalArea);\n else\n setAmountArea(0);\n }\n else {\n setAmount(0);\n setAmountArea(0);\n }\n }\n }}\n displayType={'input'}\n thousandSeparator={' '}\n suffix={' ' + unit}\n allowNegative={false}\n isAllowed={valueMax}\n allowedDecimalSeparators={['.', ',']} />\n \n \n {t('Amount_Area')}:\n 0 ? amount * totalArea : ''}\n placeholder={' ' + unit}\n decimalScale={2}\n fixedDecimalScale={false}\n onValueChange={(values, e) => {\n if (values.floatValue && round(values.floatValue) !== round(amountArea)) {\n if (values.floatValue) {\n if (totalArea > 0) {\n setAmount(values.floatValue / totalArea);\n }\n else\n setAmount(0);\n\n setAmountArea(values.floatValue);\n }\n else {\n setAmount(0);\n setAmountArea(0);\n }\n }\n }}\n displayType={'input'}\n thousandSeparator={' '}\n suffix={' ' + unit}\n allowNegative={false}\n isAllowed={valueMax}\n allowedDecimalSeparators={['.', ',']} />\n \n
\n }\n \n {t('Yield_Storage')}\n {storagesIsLoading ? : ''}\n s.value === selectedStorage.id) : { label: textt, value: null }}\n onChange={setSelectedStorage}\n options={drawStorages}\n noOptionsMessage={({ inputValue }) => !inputValue ? t('NoStorages') : ''}\n />\n \n\n \n \n {t('Date')}\n setCalendarShow(true)} placeholder={t('Date')} value={dayJsFormatDate(date)} onChange={() => { }} />\n \n {multiSelect ?\n \n \n {t('ShowChosenPlots')}\n \n
\n {props.selectEvent.selectedPlots.map((plot, i) =>\n
\n {plot.name} - {plot.apChar} ({plot.area} ha)\n
\n )}\n
\n
\n
\n
\n : ''}\n
\n }\n
\n \n {props.selectEvent.selectedElement && buttonWriteShow === true ?\n \n : ''}\n\n \n\n {buttonWriteShow === true ?\n \n : ''}\n \n
\n setCalendarShow(false)}\n onChange={setDate}\n selecteddate={date}\n />\n\n {siloShow ?\n setSiloShow(false)}\n selectedProduct={selectedProduct.product}\n defaultName={selectedProduct.explanation}\n buttonWriteShow={buttonWriteShow}\n existingStorages={storages}\n saveSilo={(selectedValu) => {\n\n setStoragesIsLoading(true);\n\n getContentWithAction(auth.getAccessToken(), 'resource', 'storages', {}).then((storages) => {\n setStorages(storages ? storages : []);\n setDrawStorages(storages ? storages.filter(s => Number(s.product) === Number(selectedProduct.product)) : []);\n setSelectedStorage(storages && selectedValu ?\n storages.find(s => Number(s.value) === Number(selectedValu)) : []\n );\n\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n setStoragesIsLoading(false);\n }).catch(e => {\n alert.show(t('SavedFailed'), { type: 'error' });\n });\n }}\n />\n : ''}\n\n\n \n );\n}\n\nexport default HarvestModal;","export const SMALL_BALE_UNIT = 80;\nexport const ROUND_BALE_UNIT = 81;\nexport const CUBIC_BALE_UNIT = 82;\nexport const WAGON_UNIT = 83;\n\nexport const DRY_CONTENT_UNIT_TYPE = 15;","import React, { useState, useEffect, useContext, useRef } from 'react';\nimport Modal from 'react-bootstrap/Modal'\nimport Select from 'react-select';\nimport Form from 'react-bootstrap/Form';\nimport Button from 'react-bootstrap/Button';\nimport Spinner from 'react-bootstrap/Spinner';\nimport { Col, Row } from \"react-bootstrap\";\nimport NumberFormat from 'react-number-format';\nimport Accordion from 'react-bootstrap/Accordion';\nimport { useTranslation } from 'react-i18next';\nimport * as dayjs from 'dayjs'\nimport CalendarModal from './CalendarModal';\nimport { getContentWithActionAndPlantId, getContentWithAction, postContentWithAction, postContentWithAction_, getContentWithActionAndLanguage } from '../../apiConnect';\nimport { getSelectedPlot, formatGroupLabel, customStyles, getSelectedLang } from '../../common';\nimport { deleteRowStyle, deleteGrowthStage } from '../ComponentStyles/ButtonStyles';\nimport { ICONS } from '../../img/icons'\nimport Icon from '../../img/Icon'\nimport { useAlert } from 'react-alert'\nimport { valueMax, valueMaxObservation, dayJsFormatDate, round } from '../../commonFunctions';\nimport AppContext from '../../AppContext';\nimport MapModal from './MapModal';\nimport { featuresReader, retrieveWgsCoordinates } from '../../Map/commonMapFunctions';\nimport * as GardenPlants from '../../Constants/GardenPlantsConstants.js';\n\nimport '../../css/general.css'\nimport '../../css/plotOperation.css'\n\nconst PlantProtectionModal = (props) => {\n const { t } = useTranslation();\n const { auth } = useContext(AppContext);\n\n const [calendarShow, setCalendarShow] = useState(false);\n const [mapShow, setMapShow] = useState(false);\n\n\n const [observes, setObserves] = useState([]);\n const [fertilizers, setFertilizers] = useState([]);\n const [growthStages, setGrowthStages] = useState([]);\n const [pesticides, setPesticides] = useState([]);\n const [observationMeasures, setObservationMeasures] = useState([]);\n\n const [growthInfo, setGrowthInfo] = useState(0);\n const [newSelectedGrowthInfo, setNewSelectedGrowthInfo] = useState(0);\n const [growthInfoSelected, setGrowthInfoSelected] = useState(0);\n const [observationRows, setObservationRows] = useState([]);\n const [pesticideRows, setPesticideRows] = useState([]);\n const [fertilizerRows, setFertilizerRows] = useState([]);\n\n const [selectedGrowthStage, setSelectedGrowthStage] = useState(null);\n const [pesticideArea, setPesticideArea] = useState(0);\n const [date, setDate] = useState(dayjs().format());\n const [updatePlantProtections, setUpdatePP] = useState(0);\n const [multiSelect, setMultiSelect] = useState(false);\n const [validate, setValidation] = useState(false);\n const [visibility, setVisibility] = useState(false);\n\n const [disableGrowthStage, setDisableGrowthStage] = useState(true);\n const [gardenPlant, setGardenPlant] = useState(false);\n const [disableSaveButton, setDisableSaveButton] = useState(true);\n\n //EXTRA INFO FIELDS\n const [startTime, setStartTime] = useState(null);\n const [temperature, setTemperature] = useState(null);\n const [waterLha, setWaterLha] = useState(null);\n const [wind, setWind] = useState(null);\n const textt = (t('Select'));\n const windDirectionList = [\n { label: t('North'), value: 1 },\n { label: t('NorthEast'), value: 2 },\n { label: t('East'), value: 3 },\n { label: t('SouthEast'), value: 4 },\n { label: t('South'), value: 5 },\n { label: t('SouthWest'), value: 6 },\n { label: t('West'), value: 7 },\n { label: t('NorthWest'), value: 8 }];\n const [windDirection, setWindDirection] = useState(null);\n const [safeDistanceWind, setSafeDistanceWind] = useState(null);\n const [safeDistanceWindTarget, setSafeDistanceWindTarget] = useState(null);\n const [safeDistanceSoil, setSafeDistanceSoil] = useState(null);\n const [safeDistanceSoilTarget, setSafeDistanceSoilTarget] = useState(null);\n const [sprayBoom, setSprayBoom] = useState(null);\n const [serviceLocation, setServiceLocation] = useState(null);\n const [maker, setMaker] = useState(null);\n\n const [mapModalParameters, setMapModalParameters] = useState(null);\n const [coordinates, setCoordinates] = useState(null);\n const [coordinatesLoading, setCoordinatesLoading] = useState(false);\n const [buttonWriteShow, setButtonWriteShow] = useState(false); // allowed save btn disabled\n const [saveInProgress, setSaveInProgress] = useState(false);\n\n let selectedPlot = useRef(getSelectedPlot());\n const alert = useAlert();\n let plantId = undefined;\n let plotId = undefined;\n let plotArea = undefined;\n\n const OBSERVATION_AMOUNT_DISABLED = [7, 14, 15, 16, 17];\n\n const OBSERVATION_AMOUNT_LITTLE = {\n value: 15,\n mode: 15,\n label: t('AmountLittle')\n };\n\n const OBSERVATION_AMOUNT_MODERATE = {\n value: 16,\n mode: 16,\n label: t('AmountModerate')\n };\n\n const OBSERVATION_AMOUNT_ALOT = {\n value: 17,\n mode: 17,\n label: t('AmountAlot')\n };\n\n if (selectedPlot?.current) {\n plotId = selectedPlot.current?.apNumber ? selectedPlot.current.apNumber : 0;\n plotArea = selectedPlot.current?.area ? selectedPlot.current.area : 0;\n }\n else if (props.selectEvent?.selectedPlots) {\n plantId = props.selectEvent?.selectedPlots[0]?.plantId;\n plotId = 0;\n plotArea = 0;\n }\n if (props.mapEvent?.plotData) {\n plantId = props.mapEvent.plotData.plantId;\n plotId = props.mapEvent.plotData.apNumber;\n plotArea = props.mapEvent.plotData.area;\n }\n\n useEffect(() => {\n Promise.all([\n //ALL FERTILIZERS\n getContentWithAction(auth.getAccessToken(), 'resource', 'fertilizers', {}),\n //PREVIOUS FERTILIZERS\n getContentWithAction(auth.getAccessToken(), 'resource', 'previousfertilizers', {}),\n //OBSERVATIONS\n getContentWithAction(auth.getAccessToken(), 'resource', 'observe', {}),\n //PREVIOUS OBSERVATIONS\n getContentWithAction(auth.getAccessToken(), 'resource', 'previousObserves', {}),\n //GROWTH STAGES \n !plantId ? getContentWithActionAndPlantId(auth.getAccessToken(), 'resource', 'growthStage', {})\n : getContentWithAction(auth.getAccessToken(), 'resource', 'growthStage', { plantId: plantId }),\n //PESTICIDES\n getContentWithAction(auth.getAccessToken(), 'resource', 'pesticides', {}),\n //OBSERVATION MEASURES\n getContentWithActionAndLanguage(auth.getAccessToken(), 'resource', 'observationMeasure', {}),\n // session\n getContentWithAction(auth.getAccessToken(), 'session', 'storeAllowed', {})\n ]).then(([allFertilizers, previousfertilizers, observations, previousObservations, growthStages, pesticides, observationMeasures, sessionResult]) => {\n\n // pest fertilizer, only specials.\n allFertilizers = allFertilizers.filter(m => {\n if (m.particleSpecial > 0) return m;\n });\n previousfertilizers = previousfertilizers.filter(p => {\n if (allFertilizers.some(a => a.product === p.product)) return true;\n\n return false;\n });\n\n setFertilizers(handleArraySorting(previousfertilizers, allFertilizers));\n if (growthStages)\n setGrowthStages(growthStages.map(p => (\n !p.value.includes('T') && Number(p.value).toString().length < 4 ? { ...p, label: p.label.substring(p.label.indexOf(\"-\") + 1).trim(), type: 'selectableHeader' } : p)));\n\n setObserves(handleArraySorting(previousObservations, observations));\n\n //PESTICIDES filtering for correct default scrolling position in dropdown list\n var prevPesticides = pesticides.filter(p => p.farmUsed === 1).map(v => {\n const { farmUsed, ...newObject } = v;\n return newObject;\n });\n var allPesticides = pesticides.map(p => {\n const { farmUsed, ...newObject } = p;\n return newObject;\n\n });\n //\n setPesticides(handleArraySorting(prevPesticides, allPesticides));\n if (observationMeasures)\n setObservationMeasures(handleObservationUnitSorting(observationMeasures));\n //observationMeasures.push(OBSERVATION_AMOUNT_LITTLE, OBSERVATION_AMOUNT_MODERATE, OBSERVATION_AMOUNT_ALOT);\n\n setButtonWriteShow(sessionResult);\n });\n }, []);\n\n useEffect(() => {\n formatFields();\n plantTypeDetector();\n\n if (props.mapEvent && props.mapEvent.plotData) {\n setCoordinates(props.mapEvent.coordinates);\n if (!props.mapEvent.new) {\n postContentWithAction(auth.getAccessToken(), 'plotOperation', 'getPlantProtectionOperations', { models: [{ plotId: props.mapEvent.plotData.apNumber }], lang: getSelectedLang() }, (protections) => {\n if (protections.length > 0) {\n let filteredObservationItem = protections.find(x => x.observations.some(v => v.featureGeometryId === props.mapEvent.geometryID));\n responseHandler(filteredObservationItem);\n if (filteredObservationItem.observations.length > 0) {\n setVisibility(filteredObservationItem.observations[0].visibility);\n\n }\n }\n }).catch((c) => { });\n }\n else\n responseHandler(null);\n\n // Add this to prevent a bug where modal closes when clicking a map feature\n // this happens because click happens an extra time and calls props.onHide\n // TODO: Fix the bug later?\n setTimeout(() => { props.allowHide() }, 250);\n }\n\n if (props.selectEvent) { \n props.selectEvent.selectedElement\n ? responseHandler(props.selectEvent.selectedElement)\n : responseHandler(null);\n if (!props.selectEvent.selectedElement) return;\n\n let obs = props.selectEvent.selectedElement.observations;\n if (obs && obs.length && obs[0].featureGeometryId) {\n\n getContentWithAction(auth.getAccessToken(), 'map', 'mapFeatureWithId', { id: obs[0].featureGeometryId })\n .then((data) => {\n var features = featuresReader(data);\n // find just in case, should be only one element\n const observationFeature = features.find(f => f.getProperties().FeatureGeometryId === obs[0].featureGeometryId);\n if (observationFeature) {\n var coordinates = observationFeature.getProperties().geometry.flatCoordinates;\n const wgscoord = retrieveWgsCoordinates(coordinates);\n /*setCoordinates({ longitude: coordinates[0], latitude: coordinates[1], wgs: wgscoord });*/\n setCoordinates({ longitude: obs[0].longitude, latitude: obs[0].latitude, wgs: wgscoord });\n setVisibility(observationFeature.getProperties().Visibility);\n }\n setCoordinatesLoading(false);\n });\n\n }\n else\n setCoordinatesLoading(false);\n }\n }, [props.selectEvent, props.mapEvent]);\n\n useEffect(() => {\n /* Update function if needed? */\n }, [updatePlantProtections]);\n\n useEffect(() => {\n if (growthStages && growthStages.length) {\n setDisableGrowthStage(false);\n let found = growthStages.find(v => v.value === selectedGrowthStage);\n if (found) {\n setGrowthInfoSelected(found);\n }\n else {\n setGrowthInfoSelected({ label: (t('SelectGrowthStage')), value: null })\n }\n }\n }, [growthStages, selectedGrowthStage]);\n\n\n const handleArraySorting = (previousList, allList) => {\n const completeList = [\n { label: t('Previously_Used'), options: previousList },\n { label: t('All'), options: allList }\n ];\n return completeList;\n };\n\n const handleObservationUnitSorting = (observationUnits) => {\n const sortedList = [...observationUnits];\n sortedList.unshift(OBSERVATION_AMOUNT_LITTLE, OBSERVATION_AMOUNT_MODERATE, OBSERVATION_AMOUNT_ALOT);\n //sortedList.some((item, i, arr) => item.value == 14 && arr.unshift(item));\n sortedList.some((item, idx) =>\n item.value === 14 &&\n sortedList.unshift(\n // remove the found item, in-place (by index with splice), \n // returns an array of a single item removed\n sortedList.splice(idx, 1)[0]\n )\n )\n //sortedList.unshift(sortedList.pop());\n return sortedList;\n };\n\n const responseHandler = (data) => {\n if (!data) {\n setMultiSelect(props.selectEvent?.selectedPlots ? true : false); \n\n setGrowthInfo(formatGrowthInfo());\n\n setPesticideArea(props.selectEvent?.selectedPlots ? props.selectEvent.selectedPlots.reduce((total, currentItem) => total = total + currentItem.area, 0) : plotArea ? plotArea : 0);\n\n // Add one empty row for inputs\n addEmptyObservation(plotId ? plotId : 0);\n if (props.selectEvent) {\n addEmptyPesticide();\n } \n\n return;\n }\n // Only observation data\n if (!data.growthInformation.date && data.growthInformation.area === 0) {\n setGrowthInfo(formatGrowthInfo());\n setPesticideArea(props.selectEvent?.selectedPlots ? props.selectEvent.selectedPlots.reduce((total, currentItem) => total = total + currentItem.area, 0) : plotArea ? plotArea : 0);\n setObservationRows(ArrayCopier(data.observations));\n if (props.selectEvent) {\n addEmptyPesticide();\n } \n return;\n }\n\n if (data.observations.length === 0)\n addEmptyObservation(multiSelect ? 0 : plotId);\n else {\n setObservationRows(ArrayCopier(data.observations));\n }\n\n if (data.pesticides.length === 0)\n addEmptyPesticide();\n else {\n setPesticideRows(ArrayCopier(data.pesticides));\n }\n\n setFertilizerRows(ArrayCopier(data.fertilizings));\n\n setGrowthInfo(data.growthInformation);\n setSelectedGrowthStage(data.growthInformation.growthStage);\n\n if (data.growthInformation.date)\n setDate(data.growthInformation.date);\n\n if (data.growthInformation) {\n ///EXTRA FIELDS\n\n if (data.growthInformation.waterArea)\n setWaterLha(data.growthInformation.waterArea);\n if (data.growthInformation.windDirection)\n setWindDirection(windDirectionList.find(item => item.value === data.growthInformation.windDirection));\n if (data.growthInformation.wind)\n setWind(data.growthInformation.wind);\n if (data.growthInformation.startHour)\n setStartTime(data.growthInformation.startHour);\n if (data.growthInformation.temperature)\n setTemperature(data.growthInformation.temperature);\n if (data.growthInformation.safeDistanceSoil)\n setSafeDistanceSoil(data.growthInformation.safeDistanceSoil);\n if (data.growthInformation.safeDistanceSoilTarget)\n setSafeDistanceSoilTarget(data.growthInformation.safeDistanceSoilTarget);\n if (data.growthInformation.safeDistanceWind)\n setSafeDistanceWind(data.growthInformation.safeDistanceWind);\n if (data.growthInformation.safeDistanceWindTarget)\n setSafeDistanceWindTarget(data.growthInformation.safeDistanceWindTarget);\n if (data.growthInformation.sprayBoom)\n setSprayBoom(data.growthInformation.sprayBoom);\n if (data.growthInformation.maker)\n setMaker(data.growthInformation.maker);\n if (data.growthInformation.serviceLocation)\n setServiceLocation(data.growthInformation.serviceLocation);\n }\n let sprayArea = data.growthInformation ? data.growthInformation.area : plotArea;\n setPesticideArea(sprayArea);\n }\n\n const formatFields = () => {\n setGrowthInfo(0);\n setNewSelectedGrowthInfo(0);\n setObservationRows([]);\n setPesticideRows([]);\n setFertilizerRows([]);\n setPesticideArea(0);\n setSelectedGrowthStage(null);\n setCoordinates(null);\n }\n\n const formatGrowthInfo = () => {\n\n let newGrowthInfo = {\n saveSpray: true,\n visibilityChanged: false,\n pesticideId: 0,\n plotId: props.selectEvent?.selectedPlots ? 0 : plotId,\n area: props.selectEvent?.selectedPlots ? 0 : plotArea,\n waterArea: 0,\n growthStage: '',\n date: dayjs(date).format(\"YYYY-MM-DD\"),\n plannedDate: '',\n windDirection: 0,\n wind: 0,\n startHour: 0,\n temperature: 0,\n safeDistanceSoil: 0,\n safeDistanceSoilTarget: '',\n safeDistanceWind: 0,\n safeDistanceWindTarget: '',\n sprayBoom: '',\n maker: '',\n growthStageName: '',\n serviceLocation: ''\n };\n return newGrowthInfo;\n }\n\n\n const plantTypeDetector = () => {\n if (selectedPlot?.current?.plantId) {\n if (GardenPlants.gardenPlantTypes.includes(selectedPlot.current.plantId.toString().substring(0, 2))) {\n setGardenPlant(true);\n }\n }\n if (props?.selectEvent?.selectedPlots) {\n if (GardenPlants.gardenPlantTypes.includes(props.selectEvent.selectedPlots[0].plantId.toString().substring(0, 2))) {\n setGardenPlant(true);\n }\n }\n if (props?.mapEvent?.plotData?.plantId) {\n if (GardenPlants.gardenPlantTypes.includes(props.mapEvent.plotData.plantId.toString().substring(0, 2))) {\n setGardenPlant(true);\n }\n }\n }\n\n // Required for the information not to be passed to props without saving\n const ArrayCopier = (array) => {\n let newArray = [];\n array.forEach(v => { // Copy values to the new array\n let copyData = { ...v };\n newArray.push(copyData);\n });\n return newArray;\n }\n\n const updateArrayValue = (index, value, array) => {\n let newArray = [];\n array.forEach(v => { // Copy values to the new array\n let copyData = { ...v };\n newArray.push(copyData);\n });\n newArray[index] = value;\n return newArray;\n }\n\n const updateGrowthInfoDate = (value) => {\n var updatedGrowthInfo = { ...growthInfo }\n setDate(value);\n updatedGrowthInfo.date = value;\n updatedGrowthInfo.saveSpray = true;\n setGrowthInfo(updatedGrowthInfo);\n\n var updatedGrowthInfo2 = { ...newSelectedGrowthInfo }\n updatedGrowthInfo2.date = value;\n setNewSelectedGrowthInfo(updatedGrowthInfo2);\n setDisableSaveButton(false);\n\n // update also fertilizer date\n if (fertilizerRows) {\n fertilizerRows.forEach(f => {\n f.date = value\n });\n }\n }\n\n const removeGrowthStage = () => {\n\n //Remove pesticide row from DB altogether if growthstage is only element left\n if ((!pesticideRows.length || (pesticideRows.length && pesticideRows[0].hasOwnProperty(\"insert\"))) && (!fertilizerRows.length || (fertilizerRows.length && fertilizerRows[0].hasOwnProperty(\"insert\"))) && (!observationRows.length || (observationRows.length && observationRows[0].hasOwnProperty(\"insert\")))) {\n\n var operations = [];\n var deleteOperation = {\n pesticideId: growthInfo.pesticideId,\n plotId: growthInfo.plotId\n };\n operations.push(deleteOperation);\n\n postContentWithAction_(auth.getAccessToken(), 'plotOperation', 'deletePlantProtectionOperations',\n { models: operations }).then(() => {\n if (props.selectEvent) {\n setGrowthInfoSelected({ label: (t('SelectGrowthStage')), value: null });\n setGrowthInfo(formatGrowthInfo());\n setDisableSaveButton(true);\n props.setRefresh(Date.now());\n }\n if (props.mapEvent) {\n props.deleteObservation();\n }\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n }).catch(e => {\n alert.show(t('SavedFailed'), { type: 'error' });\n });;\n }\n else {\n var updatedGrowthInfo = { ...growthInfo };\n var growths = [];\n // Delete previously saved growthstage to DB\n if (newSelectedGrowthInfo === 0) {\n updatedGrowthInfo.growthStage = '';\n updatedGrowthInfo.growthStageName = '';\n growths.push(updatedGrowthInfo);\n postContentWithAction_(auth.getAccessToken(), 'plotOperation', 'deleteGrowthStage',\n { models: growths }).then(() => {\n setGrowthInfoSelected({ label: (t('SelectGrowthStage')), value: null });\n setGrowthInfo(updatedGrowthInfo);\n if (props.selectEvent) {\n props.setRefresh(Date.now());\n }\n });\n }\n else {\n // Delete previously saved growthstage to DB with new one selected\n if (updatedGrowthInfo.growthStage) {\n updatedGrowthInfo.growthStage = '';\n updatedGrowthInfo.growthStageName = '';\n growths.push(updatedGrowthInfo);\n postContentWithAction_(auth.getAccessToken(), 'plotOperation', 'deleteGrowthStage',\n { models: growths }).then(() => {\n setGrowthInfoSelected({ label: (t('SelectGrowthStage')), value: null });\n setGrowthInfo(updatedGrowthInfo);\n if (props.selectEvent) {\n props.setRefresh(Date.now());\n }\n });\n }\n // Empty recently selected growthstage, but not saved to DB \n setGrowthInfoSelected({ label: (t('SelectGrowthStage')), value: null });\n setNewSelectedGrowthInfo(0);\n }\n }\n\n }\n\n\n const removePesticide = (pest, index) => {\n //Remove pesticide row from DB altogether if pesticide is only element left\n if (index === 0 && (!growthInfo.growthStage && !growthInfo.growthStageName) && (!fertilizerRows.length || (fertilizerRows.length && fertilizerRows[0].hasOwnProperty(\"insert\"))) && (!observationRows.length || (observationRows.length && observationRows[0].hasOwnProperty(\"insert\")))) {\n\n var operations = [];\n var deleteOperation = {\n pesticideId: growthInfo.pesticideId,\n plotId: growthInfo.plotId\n };\n operations.push(deleteOperation);\n\n postContentWithAction_(auth.getAccessToken(), 'plotOperation', 'deletePlantProtectionOperations',\n { models: operations }).then(() => {\n if (props.selectEvent) {\n clearPesticideRow(pest, index);\n setGrowthInfo(formatGrowthInfo());\n setDisableSaveButton(true);\n props.setRefresh(Date.now());\n }\n if (props.mapEvent) {\n props.deleteObservation();\n }\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n }).catch(e => {\n alert.show(t('SavedFailed'), { type: 'error' });\n });;\n }\n else {\n var pests = [];\n pests.push(pest);\n postContentWithAction(auth.getAccessToken(), 'plotOperation', 'deletePlantProtectionPesticide', { models: pests }, () => {\n clearPesticideRow(pest, index);\n props.setRefresh(Date.now());\n });\n }\n }\n\n const removeFertilizer = (fert, index) => {\n //Remove pesticide row from DB altogether if fertilizer is only element left\n if (index === 0 && (!growthInfo.growthStage && !growthInfo.growthStageName) && (!pesticideRows.length || (pesticideRows.length && pesticideRows[0].hasOwnProperty(\"insert\"))) && (!observationRows.length || (observationRows.length && observationRows[0].hasOwnProperty(\"insert\")))) {\n\n var operations = [];\n var deleteOperation = {\n pesticideId: growthInfo.pesticideId,\n plotId: growthInfo.plotId\n };\n operations.push(deleteOperation);\n\n postContentWithAction_(auth.getAccessToken(), 'plotOperation', 'deletePlantProtectionOperations',\n { models: operations }).then(() => {\n if (props.selectEvent) {\n clearFertilizerRow(fert, index);\n setGrowthInfo(formatGrowthInfo());\n setDisableSaveButton(true);\n props.setRefresh(Date.now());\n }\n if (props.mapEvent) {\n props.deleteObservation();\n }\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n }).catch(e => {\n alert.show(t('SavedFailed'), { type: 'error' });\n });;\n }\n else {\n var ferts = [];\n ferts.push(fert);\n postContentWithAction(auth.getAccessToken(), 'plotOperation', 'deletePlantProtectionFertilizing', { models: ferts }, () => {\n clearFertilizerRow(fert, index);\n props.setRefresh(Date.now());\n });\n }\n }\n\n const removeObservation = (obs, index) => {\n //Remove pesticide row from DB altogether if observation is only element left\n if (index === 0 && (!growthInfo.growthStage && !growthInfo.growthStageName) && (!pesticideRows.length || (pesticideRows.length && pesticideRows[0].hasOwnProperty(\"insert\"))) && (!fertilizerRows.length || (fertilizerRows.length && fertilizerRows[0].hasOwnProperty(\"insert\")))) {\n\n var operations = [];\n var deleteOperation = {\n pesticideId: growthInfo.pesticideId,\n plotId: growthInfo.plotId\n };\n operations.push(deleteOperation);\n\n postContentWithAction_(auth.getAccessToken(), 'plotOperation', 'deletePlantProtectionOperations',\n { models: operations }).then(() => {\n if (props.selectEvent) {\n clearObservationRow(obs, index);\n clearCoordinates();\n setGrowthInfo(formatGrowthInfo());\n setDisableSaveButton(true);\n props.setRefresh(Date.now());\n }\n if (props.mapEvent) {\n props.deleteObservation();\n }\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n }).catch(e => {\n alert.show(t('SavedFailed'), { type: 'error' });\n });;\n }\n else {\n postContentWithAction(auth.getAccessToken(), 'plotOperation', 'deleteObservation', obs, () => {\n clearObservationRow(obs, index);\n clearCoordinates();\n props.setRefresh(Date.now());\n });\n }\n }\n\n const removeCoordinates = () => {\n const dataModel = {\n models: observationRows\n };\n postContentWithAction(auth.getAccessToken(), 'plotOperation', 'deleteCoordinates', dataModel, () => {\n clearCoordinates();\n props.setRefresh(Date.now());\n });\n }\n\n const clearFertilizerRow = (fert, index) => {\n let newFertRows = [...fertilizerRows];\n newFertRows.splice(index, 1);\n setFertilizerRows(newFertRows);\n if (index === 0 && (!growthInfo.growthStage && !growthInfo.growthStageName && !newSelectedGrowthInfo.growthStage && !newSelectedGrowthInfo.growthStageName) && !pesticideRows.length && !observationRows.length) {\n setDisableSaveButton(true);\n }\n }\n\n const clearPesticideRow = (pest, index) => {\n let newPestRows = [...pesticideRows];\n newPestRows.splice(index, 1);\n setPesticideRows(newPestRows);\n if (index === 0 && (!growthInfo.growthStage && !growthInfo.growthStageName && !newSelectedGrowthInfo.growthStage && !newSelectedGrowthInfo.growthStageName) && !fertilizerRows.length && !observationRows.length) {\n setDisableSaveButton(true);\n }\n }\n\n const clearObservationRow = (obs, index) => {\n let newSelectedObs = [...observationRows];\n newSelectedObs.splice(index, 1);\n setObservationRows(newSelectedObs);\n if (index === 0 && (!growthInfo.growthStage && !growthInfo.growthStageName && !newSelectedGrowthInfo.growthStage && !newSelectedGrowthInfo.growthStageName) && !pesticideRows.length && !fertilizerRows.length) {\n setDisableSaveButton(true);\n }\n }\n\n const clearCoordinates = () => {\n setCoordinates(null);\n }\n\n const addEmptyObservation = (plotNumber) => {\n let selectedObs = [...observationRows];\n let newObservation = {\n observationId: -1,\n plotId: plotNumber,\n mode: 0,\n product: '',\n insert: true,\n density: 0,\n date: dayjs(Date.now()).format(\"YYYY-MM-DD\"),\n plannedDate: '',\n pesticideId: pesticideRows[0] ? pesticideRows[0].pesticideId : 0,\n productName: ''\n };\n\n selectedObs.push(newObservation);\n\n setObservationRows(selectedObs); \n }\n\n const addEmptyPesticide = () => {\n let latestElement = pesticideRows[pesticideRows.length - 1];\n let selectedPests = [...pesticideRows];\n let newPesticide = {\n pesticideId: latestElement ? latestElement.pesticideId : 0,\n product: '',\n insert: true,\n amount: 0,\n unitType: latestElement ? latestElement.unitType : 0,\n area: pesticideArea,\n withdrawal: latestElement ? latestElement.withdrawal : 0,\n productName: ''\n };\n\n selectedPests.push(newPesticide);\n\n setPesticideRows(selectedPests); \n }\n\n const addEmptyFertilizer = () => {\n let latestElement = fertilizerRows[fertilizerRows.length - 1];\n let selectedFerts = [...fertilizerRows];\n let newFertilizer = {\n amount: 0,\n area: pesticideArea,\n date: dayjs(Date.now()).format(\"YYYY-MM-DD\"),\n description: '',\n product: '',\n insert: true,\n fertilizingId: undefined,\n pesticideId: latestElement ? latestElement.pesticideId : 0,\n plannedDate: latestElement ? latestElement.plannedDate : '',\n plotId: props.selectEvent?.selectedPlots ? 0 : plotId,\n productName: '',\n unitType: latestElement ? latestElement.unitType : 0\n };\n\n selectedFerts.push(newFertilizer);\n\n setFertilizerRows(selectedFerts); \n }\n\n const validateOperation = () => {\n //validate\n let valid = true;\n pesticideRows.forEach(o => {\n if (!o.amount || !o.product) valid = false;\n });\n fertilizerRows.forEach(o => {\n if (!o.amount || !o.product) valid = false;\n });\n observationRows.forEach(o => { \n if (!o.product) {\n valid = false;\n }\n if (o.product && !o.density && o.mode !== 7 && o.mode !== 14 && o.mode !== 15 && o.mode !== 16 && o.mode !== 17) {\n valid = false;\n }\n\n });\n\n if (!pesticideRows.length && !fertilizerRows.length && !observationRows.length && !growthInfo.growthStage) valid = false;\n\n if (!pesticideRows.length && !fertilizerRows.length && !observationRows.length) {\n\n valid = false;\n alert.show(t('ErrorOnlyGrowthstage'), { type: 'info', style: \"alternative\", timeout: 0 });\n }\n\n if (selectedPlot.current) {\n if (selectedPlot.current.area < pesticideArea) valid = false;\n }\n\n return valid;\n }\n\n const updateObservationCoordinates = (coord) => {\n observationRows.forEach(row => {\n row.longitude = coord.longitude;\n row.latitude = coord.latitude;\n row.updated = true;\n });\n setDisableSaveButton(false);\n }\n\n const saveMultiSelectPlantProtection = () => {\n if (!validateOperation()) return;\n\n // Filtering inserts\n let filteredFertRows = fertilizerRows.filter(row => row.insert);\n let filteredPestRows = pesticideRows.filter(row => row.insert);\n let filteredObsRows = observationRows.filter(row => row.insert);\n let operations = [];\n\n props.selectEvent.selectedPlots.forEach(plot => {\n var newFertRows = [];\n var newPestRows = [];\n var newObsRows = [];\n\n // Deep copying rows (assigning doesn't work)\n filteredFertRows.forEach(row => {\n row.plotId = plot.apNumber;\n newFertRows.push({ ...row }); // Copy\n });\n filteredPestRows.forEach(row => {\n row.plotId = plot.apNumber;\n newPestRows.push({ ...row }); // Copy\n });\n filteredObsRows.forEach(row => {\n row.plotId = plot.apNumber;\n newObsRows.push({ ...row }); // Copy\n });\n\n var newGrowthInfo = growthInfoEnlargement(growthInfo, plot);\n\n let updateOperations = {\n pesticideId: newGrowthInfo.pesticideId,\n growthInformation: newGrowthInfo,\n fertilizings: [],\n pesticides: [],\n observations: []\n }\n\n let insertOperations = {\n pesticideId: 0,\n growthInformation: newGrowthInfo,\n fertilizings: newFertRows,\n pesticides: newPestRows,\n observations: newObsRows\n };\n\n let protectionOperation = {\n growthInfo: newGrowthInfo,\n inserts: insertOperations,\n updates: updateOperations\n };\n\n let protectionSaveModel = {\n plotId: plot.apNumber,\n protectionOperations: [protectionOperation]\n };\n\n operations.push(protectionSaveModel);\n });\n\n postContentWithAction(auth.getAccessToken(), 'plotOperation', 'savePlantProtectionOperations',\n { models: operations }, () => {\n props.setRefresh(Date.now());\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n }).catch(e => {\n alert.show(t('SavedFailed'), { type: 'error' });\n });\n props.onHide();\n }\n\n const savePlantProtection = () => {\n if (!validateOperation()) return;\n setSaveInProgress(true);\n\n let updatedFertRows = fertilizerRows.filter(row => row.updated && !row.insert);\n let updatedPestRows = pesticideRows.filter(row => row.updated && !row.insert);\n let updatedObsRows = observationRows.filter(row => row.updated && !row.insert);\n\n let newFertRows = fertilizerRows.filter(row => row.insert);\n let newPestRows = pesticideRows.filter(row => row.insert);\n let newObsRows = observationRows.filter(row => row.insert);\n /* let newObsRows = observationRows.filter(row => row.insert || (!row.insert && !row.updated && row.observationId > -1));*/\n\n var newGrowthInfo = growthInfoEnlargement(growthInfo);\n\n updatedObsRows.forEach(row => {\n if (coordinates) {\n row.longitude = coordinates.longitude;\n row.latitude = coordinates.latitude;\n }\n });\n\n newObsRows.forEach(row => {\n if (coordinates) {\n row.longitude = coordinates.longitude;\n row.latitude = coordinates.latitude;\n }\n });\n\n let updateOperations = {\n pesticideId: newGrowthInfo.pesticideId,\n growthInformation: null, // used only in get method\n fertilizings: updatedFertRows,\n pesticides: updatedPestRows,\n observations: updatedObsRows\n }\n\n let insertOperations = {\n pesticideId: newGrowthInfo.pesticideId,\n growthInformation: newGrowthInfo, // used only in get method\n fertilizings: newFertRows,\n pesticides: newPestRows,\n observations: newObsRows\n };\n\n let protectionOperation = {\n growthInfo: newGrowthInfo,\n inserts: insertOperations,\n updates: updateOperations\n };\n let protectionSaveModel = {\n plotId: plotId,\n protectionOperations: [protectionOperation]\n };\n let operations = [];\n operations.push(protectionSaveModel);\n\n postContentWithAction_(auth.getAccessToken(), 'plotOperation', 'savePlantProtectionOperations',\n { models: operations }).then((data) => {\n if (props.mapEvent) {\n props.saveObservation(data);\n }\n else {\n props.setRefresh(Date.now());\n }\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n setSaveInProgress(false);\n }).catch(e => {\n alert.show(t('SavedFailed'), { type: 'error' });\n setSaveInProgress(false);\n });\n props.onHide();\n }\n\n const growthInfoEnlargement = (growthInfo, plot) => {\n if (growthInfo !== 0) {\n var newGrowthInfo = { ...growthInfo };\n\n if (newSelectedGrowthInfo !== 0) {\n newGrowthInfo.growthStage = newSelectedGrowthInfo.growthStage;\n newGrowthInfo.growthStageName = newSelectedGrowthInfo.growthStageName;\n newGrowthInfo.date = newSelectedGrowthInfo.date;\n newGrowthInfo.saveSpray = true;\n }\n\n if (multiSelect && plot !== undefined) {\n newGrowthInfo.area = plot.area;\n newGrowthInfo.plotId = plot.apNumber;\n }\n\n if (pesticideArea && !multiSelect)\n newGrowthInfo.area = pesticideArea;\n if (waterLha)\n newGrowthInfo.waterArea = waterLha;\n if (windDirection)\n newGrowthInfo.windDirection = windDirection.value;\n if (wind)\n newGrowthInfo.wind = wind;\n if (startTime)\n newGrowthInfo.startHour = startTime;\n if (temperature)\n newGrowthInfo.temperature = temperature;\n if (safeDistanceSoil)\n newGrowthInfo.safeDistanceSoil = safeDistanceSoil;\n if (safeDistanceSoilTarget)\n newGrowthInfo.safeDistanceSoilTarget = safeDistanceSoilTarget;\n if (safeDistanceWind)\n newGrowthInfo.safeDistanceWind = safeDistanceWind;\n if (safeDistanceWindTarget)\n newGrowthInfo.safeDistanceWindTarget = safeDistanceWindTarget;\n if (sprayBoom)\n newGrowthInfo.sprayBoom = sprayBoom;\n if (maker)\n newGrowthInfo.maker = maker;\n if (serviceLocation)\n newGrowthInfo.serviceLocation = serviceLocation;\n\n return newGrowthInfo;\n }\n }\n\n const setObservationsToUpdate = (visValue) => {\n // Set update to true for all observation rows\n observationRows.forEach((obs, i) => {\n let newValue = obs;\n newValue.updated = true;\n newValue.visibility = visValue;\n let updatedSelections = updateArrayValue(i, newValue, observationRows);\n setObservationRows(updatedSelections);\n });\n\n var updatedGrowthInfo = { ...growthInfo }\n updatedGrowthInfo.visibilityChanged = true;\n setGrowthInfo(updatedGrowthInfo);\n setDisableSaveButton(false);\n setUpdatePP(Date.now());\n }\n\n const growthUpdate = () => {\n if (growthInfo.pesticideId !== 0) {\n var update = growthInfo;\n update.saveSpray = true;\n setGrowthInfo(update); \n }\n setDisableSaveButton(false);\n };\n\n const updateFertilizingAreas = (area) => {\n fertilizerRows.forEach((f, i) => {\n let newRowData = fertilizerRows[i];\n newRowData.area = area;\n\n let updatedRows = updateArrayValue(i, newRowData, fertilizerRows);\n setFertilizerRows(updatedRows);\n });\n }\n\n const deletePlantProtection = () => {\n setSaveInProgress(true);\n var operations = [];\n var deleteOperation = {\n pesticideId: growthInfo.pesticideId,\n plotId: growthInfo.plotId\n };\n operations.push(deleteOperation);\n\n postContentWithAction_(auth.getAccessToken(), 'plotOperation', 'deletePlantProtectionOperations',\n { models: operations }).then(() => {\n if (props.selectEvent) {\n props.onHide();\n props.setRefresh(Date.now());\n }\n if (props.mapEvent) {\n props.deleteObservation();\n }\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n setSaveInProgress(false);\n }).catch(e => {\n alert.show(t('SavedFailed'), { type: 'error' });\n setSaveInProgress(false);\n });;\n }\n\n const buttonTypeForGrowthStageDeletion = () => {\n if (newSelectedGrowthInfo && growthInfoSelected && (!growthInfoSelected.value || growthInfoSelected.value) && growthInfo.growthStage === \"\") {\n return 'X';\n }\n if (newSelectedGrowthInfo && growthInfoSelected && growthInfoSelected.value && growthInfo.growthStage !== \"\") {\n return ;\n }\n if (newSelectedGrowthInfo === 0 && growthInfoSelected && !growthInfoSelected.value) {\n return 'X';\n }\n else {\n return < Icon icon={ICONS.DELETE} color='black' size='22' />;\n }\n\n }\n\n const rowAdditionHandler = (latestElement) => {\n\n let valid = true;\n\n if (latestElement && !latestElement.product) valid = false;\n\n if (latestElement && latestElement.product && latestElement.mode !== undefined && latestElement.mode === 0) valid = false;\n\n if (latestElement && latestElement.product && latestElement.density !== undefined && latestElement.density === 0 &&\n latestElement.mode !== undefined && !OBSERVATION_AMOUNT_DISABLED.find(m => m === latestElement.mode)) valid = false;\n\n if (latestElement && latestElement.product && latestElement.amount !== undefined && latestElement.amount === 0 && !latestElement.amountArea) valid = false;\n\n validationExtension(valid);\n return valid;\n }\n\n const checkDeleteButton = () => {\n // Setting variables for easier debugging\n var hasSelectedElement = props.selectEvent?.selectedElement;\n var isMapEdit = props.mapEvent ? !props.mapEvent?.new : false;\n var hasWritePermissions = buttonWriteShow;\n return (hasSelectedElement || isMapEdit) && hasWritePermissions;\n }\n\n const validationExtension = (validated) => {\n if (validated === false) {\n setValidation(true);\n validateOperation();\n }\n if (validated === true) {\n setValidation(false);\n }\n }\n\n return (\n <>\n \n \n {t('PlantProtection')}\n \n \n
\n \n {t('PlantProtection_GrowthStage')}\n \n \n {\n setSelectedGrowthStage(data.value);\n const newGrowthinfo = {\n growthStage: data.value,\n growthStageName: data.label,\n date: dayjs(date).format(\"YYYY-MM-DD\")\n }\n setNewSelectedGrowthInfo(newGrowthinfo);\n setDisableSaveButton(false);\n }}\n options={growthStages}\n styles={customStyles}\n />\n \n \n \n\n \n \n \n\n \n {t('Observations')}\n {(observationRows) ? observationRows.map((p, i) =>\n /* ----------- OBSERVATIONS ----------- */\n
\n
\n v.value === observationRows[i].product) : { label: t('SelectObservation'), value: null }}\n onChange={(data) => {\n let newValue = observationRows[i];\n newValue.product = data.product;\n newValue.productName = data.label;\n newValue.updated = true;\n // Update selected observation value\n let updatedSelections = updateArrayValue(i, newValue, observationRows);\n setObservationRows(updatedSelections);\n setDisableSaveButton(false);\n setUpdatePP(Date.now());\n }}\n options={observes}\n formatGroupLabel={formatGroupLabel}\n />\n
\n\n {/*
*/}\n
\n {t('UnitAmount')}\n m === observationRows[i].mode)) ? \"form-control invalid-border\" : \"form-control\"}\n disabled={OBSERVATION_AMOUNT_DISABLED.find(m => m === observationRows[i].mode)}\n onValueChange={value => {\n if (value.floatValue) {\n let newRowData = observationRows[i];\n newRowData.density = value.floatValue;\n newRowData.updated = true;\n let updatedRows = updateArrayValue(i, newRowData, observationRows);\n setObservationRows(updatedRows);\n setDisableSaveButton(false);\n setUpdatePP(Date.now());\n }\n }}\n value={OBSERVATION_AMOUNT_DISABLED.find(m => m === observationRows[i].mode) ? '' : observationRows[i].density ? observationRows[i].density : ''}\n decimalScale={2}\n fixedDecimalScale={false}\n displayType={'input'}\n thousandSeparator={' '}\n isAllowed={valueMaxObservation}\n allowNegative={false}\n allowedDecimalSeparators={['.', ',']}\n />\n\n
\n
\n \n v.value === observationRows[i].mode) : 0}\n onChange={(data) => {\n let newValue = observationRows[i];\n newValue.mode = data.mode;\n newValue.updated = true;\n let updatedSelections = updateArrayValue(i, newValue, observationRows);\n setObservationRows(updatedSelections);\n setDisableSaveButton(false);\n setUpdatePP(Date.now());\n }}\n options={observationMeasures}\n placeholder={t('Unit')}\n />\n
\n
\n {!p.insert\n ? \n\n : }\n
\n\n
\n )\n : ''\n }\n
\n
\n {\n /* ----------- NEW OBSERVATION ----------- */\n e.preventDefault();\n let latestElement = observationRows[observationRows.length - 1];\n if (!rowAdditionHandler(latestElement)) return;\n\n addEmptyObservation(multiSelect ? 0 : plotId);\n }} type=\"text\">{t('Observation_AddObservation')}\n
\n
\n \n\n \n {t('Coordinates')}\n
\n {coordinatesLoading ?\n \n : // If loaded then draw coordinates\n
\n {coordinates && coordinates.longitude !== 0 && coordinates.latitude !== 0 ?\n
\n \n {t('LocationDefined')} ({coordinates.wgs.longitude}, {coordinates.wgs.latitude})\n \n
\n {props.mapEvent ? \"\" :\n \n }\n
\n
\n : // If no coordinates then show button\n
\n \n
}\n
\n }\n
\n
\n\n {coordinates && coordinates.longitude !== 0 && coordinates.latitude !== 0 ?\n \n
\n {\n setObservationsToUpdate(!visibility);\n setVisibility(!visibility);\n }}\n />\n
\n
\n : ''}\n\n \n {t('PlantProtection_Pesticides')}\n {(pesticideRows) ? pesticideRows.map((p, i) =>\n /* ----------- PESTICIDES ----------- */\n
\n
0 ? \"pesticide-selection-margin\" : \"\"}>\n {\n if (v.value === pesticideRows[i].product) {\n return v;\n }\n }) : { label: (t('SelectProduct')), value: null }}\n onChange={(data) => {\n let newValue = pesticideRows[i];\n newValue.product = data.product;\n newValue.productName = data.productName;\n newValue.updated = true;\n newValue.unitText = data.unitText;\n newValue.unitType = data.unitType;\n\n // Update selected pesticide value\n let updatedSelections = updateArrayValue(i, newValue, pesticideRows);\n setPesticideRows(updatedSelections);\n setDisableSaveButton(false);\n setUpdatePP(Date.now());\n }}\n options={pesticides}\n formatGroupLabel={formatGroupLabel}\n />\n
\n
\n {t('Amount_ha')}\n {\n if (values.floatValue && round(values.floatValue) !== round(pesticideRows[i].amount)) {\n let newRowData = pesticideRows[i];\n newRowData.amount = values.floatValue;\n if (values.floatValue) {\n\n if (pesticideArea)\n newRowData.amountArea = values.floatValue * pesticideArea;\n else\n newRowData.amountArea = 0;\n }\n else {\n newRowData.amount = 0;\n newRowData.amountArea = 0;\n }\n newRowData.updated = true;\n let updatedRows = updateArrayValue(i, newRowData, pesticideRows);\n setPesticideRows(updatedRows);\n setDisableSaveButton(false);\n setUpdatePP(Date.now());\n }\n }}\n displayType={'input'}\n thousandSeparator={' '}\n suffix={pesticideRows[i].unitText ? ' ' + pesticideRows[i].unitText : ''}\n allowNegative={false}\n isAllowed={valueMax}\n allowedDecimalSeparators={['.', ',']} />\n {/**/}\n {/* Määrä*/}\n {/**/}\n
\n
\n {t('Amount_Area')}\n {\n if (values.floatValue && round(values.floatValue) !== round(pesticideRows[i].amountArea)) {\n let newRowData = pesticideRows[i];\n if (values.floatValue) {\n if (pesticideArea > 0) {\n newRowData.amount = values.floatValue / pesticideArea;\n }\n else\n newRowData.amount = 0;\n\n newRowData.amountArea = values.floatValue;\n }\n else {\n newRowData.amount = 0;\n newRowData.amountArea = 0;\n }\n newRowData.updated = true;\n let updatedRows = updateArrayValue(i, newRowData, pesticideRows);\n setPesticideRows(updatedRows);\n setDisableSaveButton(false);\n setUpdatePP(Date.now());\n }\n }}\n />\n\n
\n
\n {!p.insert\n ? \n\n : }\n
\n
\n ) : ''\n }\n
\n
\n {\n e.preventDefault();\n let latestElement = pesticideRows[pesticideRows.length - 1];\n if (!rowAdditionHandler(latestElement)) return;\n\n addEmptyPesticide();\n }} type=\"text\">{t('PlantProtection_AddPesticide')}\n
\n
\n
\n\n \n {t('Fertilisers')}\n {(fertilizerRows) ? fertilizerRows.map((p, i) =>\n /* ----------- FERTILIZERS ----------- */\n
\n
0 ? \"pesticide-selection-margin\" : \"\"}>\n v.value === fertilizerRows[i].product)\n : { label: (t('SelectFertilizer')), value: null }}\n onChange={(data) => {\n let newValue = fertilizerRows[i];\n newValue.product = data.product;\n newValue.productName = data.produtName;\n newValue.updated = true;\n newValue.unitText = data.unitText;\n newValue.unitType = data.unit;\n\n // Update fertilizer rows\n let updatedSelections = updateArrayValue(i, newValue, fertilizerRows);\n setFertilizerRows(updatedSelections);\n setDisableSaveButton(false);\n setUpdatePP(Date.now());\n }}\n options={fertilizers}\n formatGroupLabel={formatGroupLabel}\n />\n
\n
\n {t('Amount_ha')}\n {\n if (values.floatValue && round(values.floatValue) !== round(fertilizerRows[i].amount)) {\n let newRowData = fertilizerRows[i];\n newRowData.amount = values.floatValue;\n if (values.floatValue) {\n\n if (pesticideArea)\n newRowData.amountArea = values.floatValue * pesticideArea;\n else\n newRowData.amountArea = 0;\n }\n else {\n newRowData.amount = 0;\n newRowData.amountArea = 0;\n }\n newRowData.updated = true;\n let updatedRows = updateArrayValue(i, newRowData, fertilizerRows);\n setFertilizerRows(updatedRows);\n setDisableSaveButton(false);\n setUpdatePP(Date.now());\n }\n }}\n displayType={'input'}\n thousandSeparator={' '}\n suffix={fertilizerRows[i].unitText ? ' ' + fertilizerRows[i].unitText : ''}\n allowNegative={false}\n isAllowed={valueMax}\n allowedDecimalSeparators={['.', ',']} />\n\n
\n
\n {t('Amount_Area')}\n 0 ? fertilizerRows[i].amount * pesticideArea : ''}\n placeholder={' ' + (fertilizerRows[i].unitText ? ' ' + fertilizerRows[i].unitText : '')}\n onValueChange={(values) => {\n if (values.floatValue && round(values.floatValue) !== round(fertilizerRows[i].amountArea)) {\n let newRowData = fertilizerRows[i];\n if (values.floatValue) {\n if (pesticideArea > 0) {\n newRowData.amount = values.floatValue / pesticideArea;\n }\n else\n newRowData.amount = 0;\n\n newRowData.amountArea = values.floatValue;\n }\n else {\n newRowData.amount = 0;\n newRowData.amountArea = 0;\n }\n newRowData.updated = true;\n let updatedRows = updateArrayValue(i, newRowData, fertilizerRows);\n setFertilizerRows(updatedRows);\n setDisableSaveButton(false);\n setUpdatePP(Date.now());\n }\n }}\n\n\n\n className=\"form-control\"\n decimalScale={2}\n fixedDecimalScale={false}\n displayType={'input'}\n thousandSeparator={' '}\n suffix={fertilizerRows[i].unitText ? ' ' + fertilizerRows[i].unitText : ''}\n allowNegative={false}\n isAllowed={valueMax}\n allowedDecimalSeparators={['.', ',']}\n />\n
\n
\n {!p.insert\n ? \n\n : }\n
\n
\n ) : ''\n }\n
\n
\n {\n e.preventDefault();\n let latestElement = fertilizerRows[fertilizerRows.length - 1];\n if (!rowAdditionHandler(latestElement)) return;\n\n addEmptyFertilizer();\n }} type=\"text\">{t('Fertilization_AddFertiliser')}\n
\n
\n
\n\n \n \n {t('Footnote')}\n \n {!multiSelect ?\n \n {t('SprayArea')}\n {\n if (value.target.value) {\n setPesticideArea(parseFloat(value.target.value));\n growthUpdate();\n updateFertilizingAreas(parseFloat(value.target.value));\n }\n }}\n isAllowed={(values) => {\n const { value } = values;\n /* Max is selected plot current area?\n if (selectedPlot.current) {\n if (value < selectedPlot.current.area) return true;\n }\n */\n if (value < 10000) return true;\n return false;\n }}\n />\n \n : ''}\n \n {t('WaterLha')}\n {\n if (value.target.value) {\n setWaterLha(parseFloat(value.target.value));\n growthUpdate(); \n }\n }}\n displayType={'input'}\n allowNegative={false}\n isAllowed={(values) => {\n const { value } = values;\n if (value < 100000) return true;\n return false;\n }}\n />\n \n {(gardenPlant) ?\n
\n \n \n {t('StartTime')}\n {\n if (value.target.value) {\n setStartTime(parseFloat(value.target.value));\n growthUpdate() \n }\n }}\n displayType={'input'}\n allowNegative={false}\n isAllowed={(values) => {\n const { value } = values;\n if (value <= 24) return true;\n return false;\n }}\n />\n \n \n {t('Temperature')}\n {\n if (value.target.value) {\n setTemperature(parseFloat(value.target.value));\n growthUpdate() \n }\n }}\n displayType={'input'}\n allowNegative={false}\n isAllowed={(values) => {\n const { value } = values;\n if (value < 100) return true;\n return false;\n }}\n allowedDecimalSeparators={['.', ',']}\n />\n \n \n \n \n {t('WindMs')}\n {\n if (value.target.value) {\n setWind(parseFloat(value.target.value));\n growthUpdate() \n }\n }}\n displayType={'input'}\n allowNegative={false}\n isAllowed={(values) => {\n const { value } = values;\n if (value < 1000) return true;\n return false;\n }}\n allowedDecimalSeparators={['.', ',']}\n />\n \n \n {t('WindDirection')}\n ({ ...base, zIndex: 9999 }) }} \n value={item ? item : null}\n onChange={handleSearchPlantChange}\n options={mainList}\n placeholder={textt}\n formatGroupLabel={formatGroupLabel} \n />\n\n \n \n \n \n \n \n
\n {(isLoading) ? : ''}\n\n {(isLoading) ?\n ''\n :\n
\n {selected ?\n {\n handleCheckboxSelectionAll();\n }}>{deselectAlltext}\n :\n {\n handleCheckboxSelectionAll();\n }}>{selectAlltext}}\n {checkedPlots.length}{t('Units')} / {totalAmountText.toFixed(2)}ha\n
\n }\n\n \n {(plots) ? searchResults.map(p =>\n c === p.apNumber) ? \"plotRowStyle plot-row-selected\" : \"plotRowStyle\"}\n key={p.apNumber}>\n {/* c === p.apNumber) : 0}*/}\n {/* name={p.apNumber}*/}\n {/* checked={checkedPlots ? checkedPlots.some(c => c === p.apNumber) : 0}*/}\n {/* onChange={(e) => {*/}\n {/* handleCheckboxSelection(e, p);*/}\n {/* saveSelectedPlots(p.apNumber);*/}\n {/* }}*/}\n {/*/>*/}\n\n \n\n c === p.apNumber) ? \"plotItemStyle plot-row-selected\" : \"plotItemStyle\"}\n /*className={\"plotItemStyle\"}*/\n key={p.apNumber}\n action onClick={() => farmPlotClickHandler(p)}>\n
\n
{p.name} - {p.apChar}
\n
\n {p.area} ha - {item?.type === 'plant' && p.plantVariety ? p.plantVariety : p.plantName}\n
\n \n
\n ) : \"\"}\n \n
{errorText}
\n \n \n {/*
*/}\n {/* */}\n {/*
*/}\n\n
\n \n\n \n
\n\n\n setShowActionModal(false)}\n selectedplots={checkedPlots ? plots.filter(p => checkedPlots.includes(p.apNumber)) : checkedPlots}\n addMode={actionModeAdd}\n setAlertContent={setAlertContent}\n showAlert={setShowAlert}\n />\n\n\n \n );\n}\n\nexport default FarmPlot;","import React, { useState, useEffect, useContext, useRef } from 'react';\nimport Modal from 'react-bootstrap/Modal'\nimport Form from 'react-bootstrap/Form';\nimport CloseButton from 'react-bootstrap/CloseButton';\nimport Button from 'react-bootstrap/Button';\nimport Spinner from 'react-bootstrap/Spinner';\nimport { useTranslation } from 'react-i18next';\nimport { getContentWithAction, postContentWithAction, postContentWithAction_, putContentWithAction } from '../../apiConnect';\nimport { useAlert } from 'react-alert'\nimport AppContext from '../../AppContext';\n\nimport '../../css/general.css'\n\nconst FeatureSelectionModal = (props) => {\n const { t } = useTranslation();\n const { auth } = useContext(AppContext);\n\n const [coordinates, setCoordinates] = useState(null);\n const [buttonWriteShow, setButtonWriteShow] = useState(false); // allowed save btn disabled\n const [showInAllYears, setShowInAllYears] = useState(false);\n\n const alert = useAlert();\n\n useEffect(() => {\n \n }, []);\n\n useEffect(() => {\n getContentWithAction(auth.getAccessToken(), 'session', 'storeAllowed', {}).then((result) => {\n setButtonWriteShow(result);\n });\n\n if (props.mapEvent) {\n if (!props.mapEvent) return;\n setCoordinates(props.mapEvent.coordinates);\n setShowInAllYears(props.mapEvent.feature.Visibility);\n }\n\n // Add this to prevent a bug where modal closes when clicking a map feature\n // this happens because click happens an extra time and calls props.onHide\n // TODO: Fix the bug later?\n setTimeout(() => { props.allowHide() }, 250);\n\n }, [props.mapEvent, auth]);\n\n const saveVisibility = () => {\n putContentWithAction(auth.getAccessToken(), 'plotOperation', 'updateFeatureVisibility', {\n featureType: props.mapEvent.feature.FeatureType,\n wktGeometry: props.mapEvent.feature.WktGeometry,\n Note: props.mapEvent.feature.Note,\n fieldNo: props.mapEvent.feature.fFeldNo,\n amount: props.mapEvent.feature.Amount,\n unitType: props.mapEvent.feature.UnitType,\n farmYear: props.mapEvent.feature.FarmYear,\n featureGeometryId: props.mapEvent.feature.FeatureGeometryId,\n visibility: showInAllYears\n }).then(() => {\n if (props.mapEvent) {\n props.saveFeature(showInAllYears);\n }\n else {\n props.setRefresh(Date.now());\n }\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n }).catch(e => {\n alert.show(t('SavedFailed'), { type: 'error' });\n });\n }\n\n return (\n <>\n \n \n \n {t('Observations')}\n \n \n\n \n \n \n {props.mapEvent.feature.Note} - {props.mapEvent.feature.FarmYear}\n
\n
\n {coordinates ? \n \n {t('LocationDefined')} ({coordinates.wgs.longitude}, {coordinates.wgs.latitude})\n \n : \"\"}\n
\n
\n
\n\n \n
\n { setShowInAllYears(!showInAllYears) }}\n />\n
\n
\n \n
\n\n \n \n\n {buttonWriteShow === true ?\n \n : ''}\n \n
\n \n );\n}\n\nexport default FeatureSelectionModal;","import React, { useState, useEffect, useContext, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { getContentWithAction, getContent, postContentWithAction, postContentWithAction_ } from '../apiConnect';\nimport { ICONS } from '../img/icons'\nimport Icon from '../img/Icon'\nimport Collapse from 'react-bootstrap/Collapse'\nimport ButtonGroup from 'react-bootstrap/ButtonGroup'\nimport Accordion from 'react-bootstrap/Accordion';\nimport { useAlert } from 'react-alert'\n\nimport ToggleButton from 'react-bootstrap/ToggleButton'\nimport ToggleButtonGroup from 'react-bootstrap/ToggleButtonGroup'\nimport OverlayTrigger from 'react-bootstrap/OverlayTrigger'\nimport Popover from 'react-bootstrap/Popover'\nimport Button from 'react-bootstrap/Button'\nimport { Form, Row, Col } from 'react-bootstrap'\n\nimport 'ol/ol.css';\nimport { Fill, Circle, RegularShape, Stroke, Style, Text } from 'ol/style.js';\nimport '../css/map.css';\nimport satelite_img from '../img/tci-icon.png';\nimport map_img from '../img/map-icon.png';\n\nimport { Map as Map2, View } from 'ol';\nimport { defaults as defaultInteractions, Select } from 'ol/interaction';\nimport * as proj from 'ol/proj';\nimport Collection from 'ol/Collection';\nimport { defaults as defaultControls, FullScreen, Zoom, OverviewMap, Attribution, ScaleLine } from 'ol/control';\nimport { click, doubleClick } from 'ol/events/condition';\nimport MousePosition from 'ol/control/MousePosition';\n//import MouseWheelZoom from 'ol/interaction/MouseWheelZoom';\nimport { toStringHDMS } from 'ol/coordinate';\nimport { GeoJSON } from 'ol/format';\nimport { Group as LayerGroup, Tile as TileLayer, Vector as VectorLayer } from 'ol/layer';\nimport { all as strategyAll } from 'ol/loadingstrategy.js';\nimport { Vector as VectorSource, WMTS } from 'ol/source';\n\nimport {\n getGPSfromStorage, saveSelectedPlots, getSelectedPlots, getSelectedLang,\n getSelectedFarmId, getSelectedYear, FarmIdToView, getSelectedFarmName,\n setSelectedPlot, getSelectedPlot, setSelectedPage,\n storeSelectedFeature, retrieveSelectedFeature\n} from '../common';\nimport { featuresReader, retrieveWgsCoordinates, returnRoundedValue } from '../Map/commonMapFunctions';\nimport AppContext from '../AppContext';\nimport { enableGPS, disableGPS } from '../gps.js';\nimport { addMapBaseLayer } from '../Map/addMapBaseLayer';\nimport { checkCoordsInsideGridPolygon } from '../Map/addMapTaskGrid';\nimport { addMapPosition, updateMapPosition } from '../Map/addMapPosition';\nimport * as styles from '../Map/mapStyle'\nimport { MapConfig } from '../Map/mapConfig';\nimport ActionSelectionModal from './Modals/ActionSelectionModal'\nimport MemoModal from './Modals/MemoModal'\nimport PlantProtectionModal from './Modals/PlantProtectionModal'\nimport FeatureSelectionModal from './Modals/FeatureSelectionModal'\n\n// needed for epsg transforms\nimport { register } from 'ol/proj/proj4';\nimport proj4 from 'proj4';\n//import AccordionBody from 'react-bootstrap/esm/AccordionBody';\n//import GPS from './TaskViewer/GPS';\n\nproj4.defs(\"EPSG:3067\", \"+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs\");\nproj4.defs(\"EPSG:3857\", \"+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs\");\nregister(proj4);\n\nlet WisuMap = {}, _styles = null;\n\nconst Map = (props) => {\n const { t } = useTranslation();\n //const { geolocation, mapInitCoordinates } = useContext(AppContext);\n const { setGeolocation, setMapInitCoordinates } = useContext(AppContext);\n const [currentTaskAmount, setCurrentTaskAmount] = useState(-1);\n const { auth } = useContext(AppContext);\n const alert = useAlert();\n\n let [plots, setPlots] = useState([]);\n let [agrPlotFeatures, setAgrPlotFeatures] = useState([]);\n //const [mapFeatures, setMapFeatures] = useState([]);\n\n const [activatedGps, setActivatedGps] = useState(false);\n const [selectModalDisabled, setSelectModalDisabled] = useState(true);\n const [selectMultiModalDisabled, setSelectMultiModalDisabled] = useState(true);\n const [showActionModal, setShowActionModal] = useState(false)\n const [actionModeAdd, setActionModeAdd] = useState(false);\n const [showAlert, setShowAlert] = useState(false);\n const [alertContent, setAlertContent] = useState({ header: '', text: '', close: '' });\n const [sidePaneShow, setSidePaneShow] = useState(false);\n const [extendSidePane, setExtendSidePane] = useState(false);\n const [selectionEvent, setSelectionEvent] = useState(null);\n const [mapIsRendered, setMapIsRendered] = useState(false);\n\n // Observation visibility modal\n const [featureSelectionEvent, setFeatureSelectionEvent] = useState({ coordinates: null, feature: null, plotData: null });\n const [showFeatureSelectionModal, setShowFeatureSelectionModal] = useState(false);\n let allowModalHide = false;\n\n //layer selects\n const [basicLayer, setBasic] = useState(null)\n const [satelliteLayer, setSatellite] = useState(null)\n const [selectedLayer, setSelectedLayer] = useState(0)\n\n //const timeLogId = useRef(null);\n const currentPosition = useRef({ latitude: null, longitude: null, timestamp: null });\n //const timer = useRef(null);\n const gpsWatch = useRef(null);\n const running = useRef(false);\n\n let RasterBaseGroup;\n //const zoomIdx = useRef(0);\n\n const taskLayerName = 'taskLayer';\n //const logInterval = 2000; // Milliseconds\n const gpsAccuracyUpperLimit = 20; // Meters\n const gpsAccuracyLowerLimit = 0;\n const gpsLocationFilterSpeed = 6; // m/s\n const gpsOptions = {\n enableHighAccuracy: true,\n timeout: 5000,\n maximumAge: 0\n }\n\n ///GPS BUTTON FEATURES \n const [disableGPSEvent, setDisableGPSEvent] = useState(null);\n const [isGPSDisabled, setGPSDisabled] = useState(false);\n const [initalCoordinatesView, setInitalCoordinatesView] = useState(null);\n\n ///MAP FEATURES \n const [selectedFeature, setSelectedFeature] = useState([]);\n\n const [isDisabled, setDisabled] = useState(true);\n const [noObservations, setNoObservations] = useState(true);\n const [noNotes, setNoNotes] = useState(true);\n const [noTrees, setNoTrees] = useState(true);\n const [noRocks, setNoRocks] = useState(true);\n const [noSampleSets, setNoSampleSets] = useState(true);\n const [noFertilitySamples, setNoFertilitySamples] = useState(true);\n const [enableDelete, setEnableDelete] = useState(false);\n const [allowChanges, setAllowChanges] = useState(false);\n\n ///PLOT LIST \n const [reachedBottom, setReachedBottom] = useState(false);\n\n ///MEMO FEATURES\n const [showMemoModal, setMemoModal] = useState(false)\n const [memoEvent, setMemoEvent] = useState({ coordinates: null, geometryID: null, plotData: null, new: null });\n\n ///OBSERVATION FEATURES\n const [showObservationModal, setObservationModal] = useState(false)\n const [observationEvent, setObservationEvent] = useState({ coordinates: null, geometryID: null, plotData: null, new: null });\n\n const sSelectedPlot = getSelectedPlot();\n setSelectedPage(3);\n\n useEffect(() => {\n _styles = styles.init();\n styles.setLang(t);\n\n getContentWithAction(auth.getAccessToken(), 'session', 'storeAllowed', {}).then((result) => {\n setAllowChanges(result);\n });\n\n if (!plots || plots.length === 0) {\n getContent(auth.getAccessToken(), 'farmPlot', { lang: getSelectedLang() }).then((data) => {\n data.forEach(d => {\n d.plantName = d.plantName ? d.plantName : t('NoPlants');\n });\n setPlots(data);\n renderMap(data);\n setMapIsRendered(true);\n setSelectionEvent(Date.now());\n });\n }\n\n window.addEventListener(\"resize\", handleResize);\n }, []);\n\n useEffect(() => {\n if (mapIsRendered) {\n if (getSelectedPlots().length > 0) setSidePaneShow(true);\n else setSidePaneShow(false);\n }\n\n }, [selectionEvent]);\n\n useEffect(() => {\n if (isGPSDisabled && !WisuMap.settingsGPSDirective) {\n WisuMap.getView().setCenter(initalCoordinatesView);\n }\n }, [disableGPSEvent]);\n\n const handleResize = () => {\n setTimeout(() => {\n WisuMap.updateSize();\n }, 255);\n }\n\n const view = new View({\n center: proj.transform([23.66702093861786, 63.019978712597218], 'EPSG:4326', 'EPSG:3857'), // Temporary center for testing, todo figure out center based on selected farm.\n zoom: 14\n })\n\n const renderMap = (plots) => {\n // kasvulohkon rajat\n let agrPlotFeature = new VectorLayer({\n title: 'AgrPlot feature',\n source:\n createMapVectorSource({\n layer: 'mtech:agrplots',\n setExtent: true,\n callBack: function (features) {\n\n agrPlots.setVisible(true);\n WisuMap.ContextChanged = true;\n }\n }),\n style: _styles.agr_plot.default,\n zIndex: 300,\n visible: true\n });\n\n // peruslohkon rajoista LayerGroup\n let agrPlots = new LayerGroup({\n title: 'AgrPlots',\n layers: [agrPlotFeature],\n zIndex: 300,\n visible: true\n });\n\n\n // map points\n let usermapFeatures = new VectorLayer({\n title: 'map features',\n source: createMapVectorSourceMapFeatures({\n layer: 'mtech:features',\n //setExtent: true,\n callBack: function (features) {\n mapPointsGroup.setVisible(true);\n WisuMap.usermapFeatures = usermapFeatures;\n }\n }),\n style: _styles.map_features.select,\n zIndex: 1000,\n visible: true\n });\n\n // karttapisteist� LayerGroup\n let mapPointsGroup = new LayerGroup({\n title: 'mapPointsGroup',\n layers: [usermapFeatures],\n zIndex: 1000,\n visible: true\n });\n\n // liitet��n basePlots Group yleiseen VectorGrouppiin\n let VectorGroup = new LayerGroup({\n title: 'vectors',\n layers:\n [\n agrPlots\n ],\n zIndex: 300,\n visible: true\n });\n\n let orthoImage = addMapBaseLayer();\n setSatellite(orthoImage);\n\n let basicImage = addMapBaseLayer(\"taustakartta\");\n setBasic(basicImage);\n\n orthoImage.setVisible(true);\n basicImage.setVisible(false);\n\n RasterBaseGroup = new LayerGroup({\n title: 'Base rasters',\n layers: [orthoImage, basicImage]\n });\n\n WisuMap = new Map2({\n target: 'map',\n layers: [\n //addMapBaseLayer(), // map layer\n RasterBaseGroup,\n addMapPosition(), // gps point\n VectorGroup, // agrplots\n mapPointsGroup\n ],\n view: view,\n interactions: defaultInteractions({\n doubleClickZoom: true,\n mouseWheelZoom: true\n }),\n controls: defaultControls({ attribution: false }).extend([\n new MousePosition({\n projection: 'EPSG:4326', //Config.CRS.WGS84,\n coordinateFormat: function (coord) {\n return toStringHDMS(coord) + ' (WGS84)';\n },\n className: 'mouse-position'\n }),\n new Attribution({\n collapsible: true,\n label: '�'\n }),\n new ScaleLine({\n units: 'metric',\n minWidth: 80\n })\n ]),\n moveTolerance: 5\n });\n\n // assign state propertys to wisumap\n WisuMap.ContextChanged = false;\n WisuMap.plots = plots;\n WisuMap.usermapFeatures = null;\n WisuMap.mapPointsGroup = mapPointsGroup;\n\n var gpsValue = getGPSfromStorage();\n if (gpsValue) {\n WisuMap.settingsGPSDirective = true;\n startGPS();\n }\n else if (gpsWatch.current)\n disableGPS(gpsWatch.current);\n\n\n mapPointsGroup.interaction = {};\n mapPointsGroup.interaction.collection = { select: new Collection(), single: new Collection() };\n\n // Possible not needed -> keeped here until WisuMap.mapPointsGroup.interaction.select is made?\n mapPointsGroup.interaction.select = new Select({\n condition: click,\n toggleCondition: click,\n multi: false,\n layers: [usermapFeatures],\n hitTolerance: 6,\n style: [styles.retrieveMapFeatureStyle()],\n features: mapPointsGroup.interaction.collection.select\n });\n WisuMap.addInteraction(mapPointsGroup.interaction.select);\n mapPointsGroup.interaction.select.setActive(true);\n\n function selectFeature(e) {\n\n if (e.selected.length) {\n //eventListener.callBack(e.selected[0]);\n\n e.selected.forEach(function (feature) {\n var prop = feature.getProperties();\n\n //FERTILITY points not to be selectablde\n var ignorable = prop.FeatureType === MapConfig.FEATURE.FERTILITY_SAMPLE ? true : prop.FeatureType === MapConfig.FEATURE.FERTILITY_SERIES ? true : false;\n\n if (ignorable === false) {\n //Make text visible on tree/rock features for clarity\n var text = prop.FeatureType === MapConfig.FEATURE.TREE ? t('Tree') : prop.FeatureType === MapConfig.FEATURE.ROCK ? t('Rock') : '';\n e.selected[0].style_[0].text_ = new Text({\n font: 'bold 14px arial',\n scale: 1,\n text: text,\n fill: new Fill({\n color: 'rgba(255, 255, 255, 1)'\n }),\n placement: 'point',\n textAlign: 'center',\n offsetY: 20,\n backgroundFill: new Fill({\n color: '#F44336'\n }),\n padding: [3, 3, 0, 3],\n overflow: true\n })\n }\n\n if (prop.PlotId) {\n mapPointsGroup.interaction.collection.select.clear();\n }\n else {\n mapPointsGroup.interaction.collection.select.clear();\n\n if (ignorable === false) {\n mapPointsGroup.interaction.collection.select.push(feature);\n\n const [coordinates, plotData] = getPlotDataWithCoordinates(e.mapBrowserEvent.originalEvent, agrPlotFeature)\n\n featureClickHandler(feature, coordinates, plotData);\n }\n }\n });\n }\n else if (e.deselected.length) {\n // automatically take off from collection.select list \n setEnableDelete(false);\n }\n \n e.mapBrowserEvent.stopPropagation();\n e.mapBrowserEvent.preventDefault();\n WisuMap.featureSelected = false;\n }\n\n mapPointsGroup.interaction.select.on(\"select\", selectFeature)\n\n /** agrPlots select interaction - select/unselect on singleClick */\n agrPlots.interaction = {};\n agrPlots.interaction.collection = { hover: new Collection(), select: new Collection(), single: new Collection() };\n agrPlots.interaction.select = new Select({\n condition: click,\n toggleCondition: click,\n layers: [agrPlotFeature],\n multi: true,\n hitTolerance: 4,\n style: _styles.agr_plot.select,\n features: agrPlots.interaction.collection.select,\n filter: function (feature, layer) {\n //Check if feature has been selected as well and disbale plot selection\n if (WisuMap.featureSelected === true || WisuMap.addNewPointMemo === true || WisuMap.addNewPointObservation === true || WisuMap.addNewPointRock === true || WisuMap.addNewPointTree === true) {\n return false;\n }\n return true;\n }\n });\n WisuMap.addInteraction(agrPlots.interaction.select);\n agrPlots.interaction.select.setActive(true);\n\n agrPlots.interaction.select.on(\"select\", function (e) {\n\n var selected = e.selected;\n var deselected = e.deselected;\n\n if (selected.length) {\n\n selected.forEach(function (feature) {\n\n var p = feature.getProperties();\n let find = WisuMap.plots.find(w => w.apChar === p.PlotLetter && w.number === p.BasePlotId);\n if (find)\n saveSelectedPlots(find.apNumber);\n });\n }\n if (deselected.length) {\n deselected.forEach(function (feature) {\n\n var p = feature.getProperties();\n let find = WisuMap.plots.find(w => w.apChar === p.PlotLetter && w.number === p.BasePlotId);\n if (find)\n saveSelectedPlots(find.apNumber);\n\n });\n }\n checkPlotSelectionToButtons();\n setSelectionEvent(Date.now());\n\n }, this);\n\n let agrPlotSource = agrPlotFeature.getSource();\n agrPlotSource.on(\"change\", function () {\n var state = agrPlotSource.getState();\n // only onload\n if (state == 'ready' && WisuMap.ContextChanged == true) {\n WisuMap.ContextChanged = false;\n\n let features = agrPlotSource.getFeatures();\n let selectedAgrPlotFeatureIds = getSelectedPlots();\n agrPlots.interaction.collection.select.clear();\n\n if (selectedAgrPlotFeatureIds.length) {\n for (let i = 0; i < features.length; i++) {\n let feature = features[i];\n let p = feature.getProperties();\n\n let find = WisuMap.plots.find(w => w.apChar === p.PlotLetter && w.number === p.BasePlotId);\n if (find) {\n if (selectedAgrPlotFeatureIds.indexOf(parseInt(find.apNumber)) !== -1) {\n agrPlots.interaction.collection.select.push(feature);\n }\n }\n }\n }\n\n checkPlotSelectionToButtons();\n }\n });\n\n WisuMap.on('click', function (e) {\n\n WisuMap.forEachFeatureAtPixel(e.pixel, function (feature, layer) {\n\n if (layer.values_.title === \"map features\") {\n WisuMap.featureSelected = true;\n }\n if (layer.values_.title === \"AgrPlot feature\") {\n WisuMap.plotProperties = feature.getProperties();\n }\n });\n\n //var allFeatures = WisuMap.getFeaturesAtPixel(e.pixel);\n\n var pixel = WisuMap.getEventPixel(e.originalEvent);\n var hit = WisuMap.hasFeatureAtPixel(pixel);\n\n if (hit && (WisuMap.addNewPointTree || WisuMap.addNewPointRock)) // need to hit on a plot and need to have Add-button pressed\n {\n let coor4326 = getNewPointCoor(WisuMap.getEventCoordinate(e.originalEvent));\n\n // save tree (5307) feature as test\n if (WisuMap.addNewPointTree) {\n saveUserFeature(coor4326, '5307');\n }\n\n // save rock (5306) feature as test\n if (WisuMap.addNewPointRock) {\n saveUserFeature(coor4326, '5308');\n }\n }\n\n if (hit && (WisuMap.addNewPointMemo)) // need to hit on a plot and need to have Add-button pressed\n {\n const [coor4326, plotData] = getPlotDataWithCoordinates(e.originalEvent, agrPlotFeature);\n\n setMemoEvent({ coordinates: coor4326, plotData: plotData, new: true });\n setMemoModal(true);\n }\n if (hit && (WisuMap.addNewPointObservation)) // need to hit on a plot and need to have Add-button pressed\n {\n const [coor4326, plotData] = getPlotDataWithCoordinates(e.originalEvent, agrPlotFeature);\n\n setObservationEvent({ coordinates: coor4326, plotData: plotData, new: true });\n setObservationModal(true);\n }\n\n });\n\n }\n\n function getPlotDataWithCoordinates(event, agrPlotFeature) {\n let coor4326 = getNewPointCoor(WisuMap.getEventCoordinate(event));\n let find = undefined;\n\n if (WisuMap.plotProperties) {\n find = WisuMap.plots.find(w => w.apChar === WisuMap.plotProperties.PlotLetter && w.number === WisuMap.plotProperties.BasePlotId);\n }\n\n return [coor4326, find];\n\n }\n\n // #region \"map - add feature\"\n function saveUserFeature(coor4326, featureId) {\n //console.log(coor4326);\n postContentWithAction(auth.getAccessToken(), 'map', 'addNewFeature',\n { latitude: coor4326.latitude, longitude: coor4326.longitude, feature: featureId, note: undefined },\n (response) => {\n //console.log(response)\n\n if (response) {\n var feature = featuresReader(response);\n\n let source = WisuMap.usermapFeatures.getSource();\n let addedFeatures = WisuMap.AllFeatures;\n\n // added feature is added to collection to drawing\n feature.forEach(f => {\n WisuMap.mapPointsGroup.interaction.collection.single.push(f);\n source.addFeature(f);\n addedFeatures.push(f);\n });\n\n WisuMap.AllFeatures = addedFeatures;\n featuresChecker(addedFeatures);\n WisuMap.addNewPointTree = false;\n WisuMap.addNewPointRock = false;\n }\n });\n }\n\n function getNewPointCoor(coor3857) {\n //var zoom = map.getView().getZoom();\n let coor = proj.transform(coor3857, 'EPSG:3857', 'EPSG:3067');\n\n let coordinates = {\n wgs: {},\n latitude: coor && coor.length > 1 ? Math.round(returnRoundedValue(coor[1], 0)) : 0,\n longitude: coor && coor.length > 0 ? Math.round(returnRoundedValue(coor[0], 0)) : 0\n };\n\n // return gps also in another format (if wanted to show in somewhere..)\n coordinates.wgs = retrieveWgsCoordinates(coor3857);\n\n return coordinates;\n }\n\n //End of map add feature\n // #endregion\n\n function mapfeaturesChanged() {\n let source = WisuMap.usermapFeatures.getSource();\n let features = WisuMap.AllFeatures;\n\n handleSelectedFeatures(source, features)\n }\n\n function handleSelectedFeatures(source, features) {\n source.clear();\n WisuMap.mapPointsGroup.interaction.collection.single.clear();\n\n // stored values\n let selectedFeatures = retrieveSelectedFeature();\n\n if (!selectedFeatures || !selectedFeatures.length) { // show none \n setDisabled(false);\n }\n else { // show selected \n for (let i = 0; i < features.length; i++) {\n let feature = features[i];\n let properties = feature.getProperties();\n if (selectedFeatures.indexOf(parseInt(properties.FeatureType, 10)) !== -1) {\n WisuMap.mapPointsGroup.interaction.collection.single.push(feature);\n source.addFeature(feature);\n }\n }\n setSelectedFeature(selectedFeatures);\n setDisabled(false);\n }\n }\n\n const getCurrentLayer = () => {\n let layers = WisuMap.getLayers().array_;\n let currentLayer;\n\n let taskLayer = layers.filter(layer => layer.get('name') === taskLayerName)[0];\n currentLayer = taskLayer;\n return currentLayer;\n }\n\n const success = (position) => {\n console.log('new GPS location!');\n let pos = validateNewPosition(position.coords);\n if (!pos.valid) {\n console.log('Insufficient GPS accurary');\n return;\n }\n currentPosition.current = pos;\n // Update user location on map\n updateMapPosition(currentPosition.current);\n // Move map center to user position\n WisuMap.getView().setCenter(proj.transform([currentPosition.current.longitude, currentPosition.current.latitude], 'EPSG:4326', 'EPSG:3857'));\n // Check which grid cell you are in and update task value\n if (running.current === true) checkCoordsInsideGridPolygon(getCurrentLayer(), currentPosition.current, setCurrentTaskAmount);\n }\n\n const errorHandler = () => {\n console.log('gps error');\n }\n\n /**\n * Vector layer source and get from db\n */\n function createMapVectorSource(obj) {\n\n obj.callBack = (typeof obj.callBack !== 'undefined') ? obj.callBack : function () { };\n\n var vectorSource = new VectorSource({\n format: new GeoJSON(),\n strategy: strategyAll,\n loader: function () {\n\n getContentWithAction(auth.getAccessToken(), 'map', 'agrplots', {})\n .then((data) => {\n setAgrPlotFeatures(data);\n featureLoader(data);\n })\n .catch(errorHandler);\n }\n });\n\n function featureLoader(response) {\n var features = new GeoJSON().readFeatures(response.featureCollection, {\n dataProjection: response.crs,\n featureProjection: 'EPSG:3857'//Config.CRS.WEBMERCATOR\n });\n\n obj.callBack(features);\n //console.log(features)\n if (!features.length) {\n const alertText = t('Error_boundaries_not_found');\n alert.show(alertText, { type: 'info', timeout: 10000 });\n return false;\n }\n\n if (response.dataYear !== getSelectedYear()) {\n const alertText = t('Error_old_boundaries').replace('{0}', response.dataYear);\n alert.show(alertText, { type: 'info', timeout: 10000 }); \n\n // filter out baseplots that are not in use in chosen year\n features = features.filter((item) => {\n if (WisuMap.plots.find(p => p.number === item.values_.BasePlotId))\n return item;\n }); \n\n // change previous year plant information\n features.forEach(f => {\n var pro = f.getProperties();\n let find = WisuMap.plots.find(w => w.apChar === pro.PlotLetter && w.number === pro.BasePlotId);\n if (find) {\n f.set('PlantName', find.plantName);\n f.set('PlantCode', find.plantId);\n f.set('Area', find.area);\n }\n });\n }\n vectorSource.addFeatures(features);\n\n // selected plots\n let plotIds = getSelectedPlots();\n var vectorSource2 = null;\n\n //check selected plot\n let selectedFeature = null;\n if (sSelectedPlot) {\n features.forEach(f => {\n var pro = f.getProperties();\n\n let find = WisuMap.plots.find(w => w.apChar === pro.PlotLetter && w.number === pro.BasePlotId);\n if (find) {\n if (find.apNumber === sSelectedPlot.apNumber)\n selectedFeature = f;\n }\n });\n }\n else if (plotIds && plotIds.length) {\n\n let plotFound = false;\n vectorSource2 = new VectorSource({\n format: new GeoJSON(),\n strategy: strategyAll\n });\n\n features.forEach(f => {\n var pro = f.getProperties();\n\n plotIds.forEach(p => {\n if (pro.PlotId === p) {\n plotFound = true;\n vectorSource2.addFeature(f);\n }\n });\n });\n\n if (!plotFound)\n vectorSource2 = null;\n }\n\n if (selectedFeature) { // zoom to plot\n WisuMap.getView().fit(selectedFeature.getGeometry(), { duration: 1000 });\n }\n else if (vectorSource2) { // this will center map on selected plots\n WisuMap.getView().fit(vectorSource2.getExtent());\n }\n else if (obj.setExtent === true) { // center to farm plots\n WisuMap.getView().fit(vectorSource.getExtent());\n\n } // this will center map\n\n }\n\n return vectorSource;\n }\n\n function createMapVectorSourceMapFeatures(obj) {\n\n obj.callBack = (typeof obj.callBack !== 'undefined') ? obj.callBack : function () { };\n\n var vectorSource = new VectorSource({\n format: new GeoJSON(),\n strategy: strategyAll,\n loader: function () {\n getContentWithAction(auth.getAccessToken(), 'map', 'mapFeatures', {})\n .then((data) => {\n featureLoader2(data);\n })\n .catch(errorHandler);\n }\n });\n\n function featureLoader2(response) {\n let features = featuresReader(response);\n\n WisuMap.AllFeatures = features;\n\n obj.callBack(features);\n\n if (!features.length) {\n return false;\n }\n\n featuresChecker(features);\n\n // this will handle seleced features to visible/on draw\n handleSelectedFeatures(vectorSource, features)\n //vectorSource.addFeatures(features);\n }\n\n return vectorSource;\n }\n\n const featuresChecker = (features) => {\n if (features.length) {\n if (features.some(e => e.getProperties().FeatureType === '5304')) {\n setNoObservations(false);\n }\n else if (!features.some(e => e.getProperties().FeatureType === '5304')) {\n handleCheckboxSelection(5304, true);\n setNoObservations(true);\n }\n if (features.some(e => e.getProperties().FeatureType === '5306')) {\n setNoNotes(false);\n }\n else if (!features.some(e => e.getProperties().FeatureType === '5306')) {\n handleCheckboxSelection(5306, true);\n setNoNotes(true);\n }\n if (features.some(e => e.getProperties().FeatureType === '5307')) {\n setNoTrees(false);\n }\n else if (!features.some(e => e.getProperties().FeatureType === '5307')) {\n handleCheckboxSelection(5307, true);\n setNoTrees(true);\n }\n if (features.some(e => e.getProperties().FeatureType === '5308')) {\n setNoRocks(false);\n }\n else if (!features.some(e => e.getProperties().FeatureType === '5308')) {\n handleCheckboxSelection(5308, true);\n setNoRocks(true);\n }\n if (features.some(e => e.getProperties().FeatureType === '5311')) {\n setNoSampleSets(false);\n }\n if (features.some(e => e.getProperties().FeatureType === '5305')) {\n setNoFertilitySamples(false);\n }\n }\n }\n\n // Return a potential object for updating current position\n const validateNewPosition = (newPosition) => {\n let potentialPosition = { valid: false };\n\n if (currentPosition.current.latitude === null) {\n if (newPosition.accuracy > gpsAccuracyUpperLimit || newPosition.accuracy < gpsAccuracyLowerLimit) {\n console.log('Bad accuracy for a potential initial position');\n }\n\n let lat = newPosition.latitude;\n let lon = newPosition.longitude;\n let time = new Date();\n potentialPosition = { valid: true, latitude: lat, longitude: lon, timestamp: time, heading: newPosition.heading, velocity: 0 };\n }\n\n let newTime = new Date();\n let timeDiff = (newTime - currentPosition.current.timestamp) / 1000; // seconds\n let dist = distance(newPosition.latitude, newPosition.longitude, currentPosition.current.latitude, currentPosition.current.longitude); // metres\n let velocity = dist / timeDiff;\n if (velocity <= gpsLocationFilterSpeed) {\n potentialPosition = { valid: true, latitude: newPosition.latitude, longitude: newPosition.longitude, timestamp: newTime, heading: newPosition.heading, velocity: velocity };\n }\n\n return potentialPosition;\n }\n\n const distance = (lat1, lon1, lat2, lon2) => {\n const R = 6378137;\n let dlon = radians(lon2 - lon1);\n let dlat = radians(lat2 - lat1);\n let f = squared(Math.sin(dlat / 2)) + Math.cos(radians(lat1)) * Math.cos(radians(lat2)) * squared(Math.sin(dlon / 2.0));\n let c = 2 * Math.atan2(Math.sqrt(f), Math.sqrt(1 - f));\n return R * c;\n }\n\n const radians = (x) => {\n return x * Math.PI / 180;\n }\n\n const squared = (x) => {\n return x * x;\n }\n\n const redirect = (geo, mapInitPosition) => {\n setMapInitCoordinates(mapInitPosition);\n setGeolocation(geo);\n if (WisuMap != null) {\n gpsWatch.current = geo.watchPosition(success, errorHandler, gpsOptions);\n }\n }\n\n const startGPS = () => {\n if (activatedGps) {\n disableGPS(gpsWatch.current);\n document.getElementById('coordinate-btn').style.backgroundColor = 'red';\n setGPSDisabled(true);\n setActivatedGps(false);\n setDisableGPSEvent(Date.now());\n }\n if (!activatedGps) {\n if (!WisuMap.settingsGPSDirective) {\n let oldView = WisuMap.getView().getCenter();\n setInitalCoordinatesView(oldView);\n }\n setActivatedGps(true);\n setGPSDisabled(false);\n enableGPS(redirect);\n document.getElementById('coordinate-btn').style.backgroundColor = 'green';\n }\n\n }\n\n let checkPlotSelectionToButtons = () => {\n let p = getSelectedPlots();\n\n setSelectModalDisabled(true);\n setSelectMultiModalDisabled(true);\n\n if (p && p.length === 1) {\n\n setSelectModalDisabled(false);\n setSelectMultiModalDisabled(false);\n }\n else if (p && p.length > 1) {\n\n setSelectModalDisabled(true);\n setSelectMultiModalDisabled(false);\n }\n }\n\n const farmPlotClickHandler = () => {\n let g = getSelectedPlots();\n if (g && g.length === 1) {\n let plot = WisuMap.plots.find(p => p.apNumber === g[0]);\n if (plot) {\n setSelectedPlot(plot);\n props.history.push('/plotOperation');\n }\n }\n }\n\n let featureClickHandler = (feature, coordinates, plotData) => {\n\n if (feature.values_.FeatureType === MapConfig.FEATURE.NOTE) {\n\n setMemoEvent({ coordinates: coordinates, geometryID: feature.values_.FeatureGeometryId, plotData: plotData, new: false });\n WisuMap.SelectedFeature = feature;\n setMemoModal(true);\n }\n if (feature.values_.FeatureType === MapConfig.FEATURE.OBSERVATION) {\n\n if (feature.values_.Visibility && feature.values_.FarmYear != getSelectedYear()) {\n setFeatureSelectionEvent({ coordinates: coordinates, feature: feature.values_, plotData: plotData});\n WisuMap.SelectedFeature = feature;\n setShowFeatureSelectionModal(true);\n }\n else if (plotData) {\n setObservationEvent({ coordinates: coordinates, geometryID: feature.values_.FeatureGeometryId, plotData: plotData, new: false });\n WisuMap.SelectedFeature = feature;\n setObservationModal(true);\n }\n }\n if (feature.values_.FeatureType === MapConfig.FEATURE.TREE ||\n feature.values_.FeatureType === MapConfig.FEATURE.ROCK) {\n WisuMap.SelectedFeature = feature;\n setEnableDelete(true);\n }\n }\n\n let deleteFeature = () => {\n\n let source = WisuMap.usermapFeatures.getSource();\n\n postContentWithAction_(auth.getAccessToken(), 'map', 'delete', { featureGeometryId: WisuMap.SelectedFeature.values_.FeatureGeometryId }, () => { }\n ).then((data) => {\n source.removeFeature(WisuMap.SelectedFeature);\n WisuMap.AllFeatures = filterDeletedFeature();\n setEnableDelete(false);\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n }).catch(e => {\n alert.show(t('SavedFailed'), { type: 'error' });\n });\n }\n\n const getSidePaneContent = () => {\n var totalArea = 0;\n var amountSelected = 0;\n plots.filter(p => getSelectedPlots().includes(p.apNumber)).forEach(p => {\n totalArea += p.area;\n amountSelected++;\n });\n\n return
{t('ChosenPlots')} {amountSelected} ({totalArea.toFixed(2)} ha)
;\n }\n\n document.title = t('Map') + ' | Mobiwisu';\n\n const handleCheckboxSelection = (value, uncheck) => {\n if (selectedFeature.includes(value)) {\n var checked = [...selectedFeature.filter(c => c !== value)];\n setDisabled(true);\n setSelectedFeature(checked);\n storeSelectedFeature(checked);\n mapfeaturesChanged();\n }\n else if (!uncheck) {\n var checked = [...selectedFeature];\n checked.push(value);\n setDisabled(true);\n setSelectedFeature(checked);\n storeSelectedFeature(checked);\n mapfeaturesChanged();\n }\n }\n\n const popover = (\n \n \n \n \n handleCheckboxSelection(5304)}\n />\n \n \n \n {t('Observations')}\n \n \n \n \n \n handleCheckboxSelection(5306)}\n />\n \n \n \n {t('Notes')}\n \n \n \n \n \n handleCheckboxSelection(5307)}\n />\n \n \n \n {t('TreeLayer')}\n \n \n \n \n \n handleCheckboxSelection(5308)}\n />\n \n \n \n {t('RockLayer')}\n \n \n \n \n \n handleCheckboxSelection(5311)}\n />\n \n \n \n {t('SampleSets')}\n \n \n \n \n \n handleCheckboxSelection(5305)}\n />\n \n \n \n {t('FertilitySamplesLayer')}\n \n \n \n \n \n );\n\n const popover2 = (\n \n {t('AddNew')}\n \n
\n \n {\n WisuMap.addNewPointTree = true;\n }}>\n {t('Tree')}\n \n {/*
*/}\n {\n WisuMap.addNewPointRock = true;\n }}>\n {t('Rock')}\n \n {\n WisuMap.addNewPointMemo = true;\n }}>\n {t('Note')}\n \n {\n WisuMap.addNewPointObservation = true;\n }}>\n {t('Observation')}\n \n
\n
\n
\n
\n );\n\n const handlePlotSelectionRemoval = (plot) => {\n let selected = WisuMap.getInteractions().pop();\n let selectedFiltered = selected.features_.array_.filter(item => item.values_.BasePlotId !== plot.number)\n selected.features_.array_ = selectedFiltered;\n WisuMap.addInteraction(selected);\n\n let find = WisuMap.plots.find(w => w.apChar === plot.apChar && w.number === plot.number);\n if (find)\n saveSelectedPlots(find.apNumber);\n\n checkPlotSelectionToButtons();\n setSelectionEvent(Date.now());\n }\n\n const listInnerRef = useRef();\n\n const onScroll = () => {\n if (listInnerRef.current) {\n const { scrollTop, scrollHeight, clientHeight } = listInnerRef.current;\n if (scrollTop + clientHeight === scrollHeight) {\n //console.log(\"reached bottom\");\n setReachedBottom(true);\n }\n else\n setReachedBottom(false);\n }\n }\n const handleMemoModalClose = () => {\n if (allowModalHide) {\n WisuMap.addNewPointMemo = false;\n setMemoModal(false);\n WisuMap.mapPointsGroup.interaction.collection.select.clear();\n allowModalHide = false;\n }\n }\n\n const handleFeatureSelectionClose = () => {\n if (allowModalHide) {\n setShowFeatureSelectionModal(false);\n WisuMap.mapPointsGroup.interaction.collection.select.clear();\n allowModalHide = false;\n }\n }\n\n const handleObservationVisibility = (show) => {\n handleFeatureSelectionClose();\n if (!show) {\n let source = WisuMap.usermapFeatures.getSource();\n source.removeFeature(WisuMap.SelectedFeature);\n WisuMap.AllFeatures = filterDeletedFeature();\n WisuMap.mapPointsGroup.interaction.collection.select.clear();\n }\n }\n\n const handleMemoModalEdit = (geometryId) => {\n WisuMap.addNewPointMemo = false;\n setMemoModal(false);\n\n getContentWithAction(auth.getAccessToken(), 'map', 'mapFeatureWithId', { id: geometryId }).then((data) => {\n if (data) {\n var feature = featuresReader(data);\n\n let source = WisuMap.usermapFeatures.getSource();\n let addedFeatures = WisuMap.AllFeatures;\n\n // added feature is added to collection to drawing\n feature.forEach(f => {\n WisuMap.mapPointsGroup.interaction.collection.single.push(f);\n source.addFeature(f);\n addedFeatures.push(f);\n });\n\n WisuMap.AllFeatures = addedFeatures;\n featuresChecker(addedFeatures);\n }\n }).catch((c) => { });\n }\n\n const handleMemoModalDelete = () => {\n WisuMap.addNewPointMemo = false;\n setMemoModal(false);\n\n let source = WisuMap.usermapFeatures.getSource();\n source.removeFeature(WisuMap.SelectedFeature);\n WisuMap.AllFeatures = filterDeletedFeature();\n }\n\n const handleObservationsModalClose = () => {\n if (allowModalHide) {\n WisuMap.addNewPointObservation = false;\n setObservationModal(false);\n WisuMap.mapPointsGroup.interaction.collection.select.clear();\n allowModalHide = false;\n }\n }\n\n const handleObservationModalEdit = (geometryId) => {\n WisuMap.addNewPointObservation = false;\n setMemoModal(false);\n if (geometryId > 0) {\n getContentWithAction(auth.getAccessToken(), 'map', 'mapFeatureWithId', { id: geometryId }).then((data) => {\n if (data) {\n var feature = featuresReader(data);\n\n let source = WisuMap.usermapFeatures.getSource();\n let addedFeatures = WisuMap.AllFeatures;\n\n // added feature is added to collection to drawing\n feature.forEach(f => {\n WisuMap.mapPointsGroup.interaction.collection.single.push(f);\n source.addFeature(f);\n addedFeatures.push(f);\n });\n\n WisuMap.AllFeatures = addedFeatures;\n featuresChecker(addedFeatures);\n }\n }).catch((c) => { });\n }\n }\n\n const handleObservationModalDelete = () => {\n WisuMap.addNewPointObservation = false;\n setObservationModal(false);\n\n let source = WisuMap.usermapFeatures.getSource();\n source.removeFeature(WisuMap.SelectedFeature);\n WisuMap.AllFeatures = filterDeletedFeature();\n }\n\n const filterDeletedFeature = () => {\n const filteredItems = WisuMap.AllFeatures.filter(item => item.values_.FeatureGeometryId !== WisuMap.SelectedFeature.values_.FeatureGeometryId);\n featuresChecker(filteredItems);\n\n return filteredItems;\n }\n\n return (\n <>\n
\n
\n {FarmIdToView(getSelectedFarmId())} - {getSelectedFarmName()} / {getSelectedYear()}
\n
\n\n
\n\n
\n \n
\n\n \n\n {/* ACTION BUTTONS */}\n \n \n {allowChanges ? \n \n : ''}\n {allowChanges ? \n \n : ''}\n \n {/* --------------- */}\n\n {\n if (!basicLayer || !satelliteLayer) return;\n\n if (selectedLayer === 0) {\n basicLayer.setVisible(true);\n satelliteLayer.setVisible(false);\n }\n else if (selectedLayer === 1) {\n basicLayer.setVisible(false);\n satelliteLayer.setVisible(true);\n }\n\n setSelectedLayer(selectedLayer === 0 ? 1 : 0)\n }}>\n \"Satelliitti\"\n \n {!enableDelete ?\n <>\n \n \n \n \n {allowChanges ? \n \n \n \n \n \n : ''}\n \n :\n \n {allowChanges ? \n \n : ''}\n }\n \n
\n
\n {getSidePaneContent()}\n
\n \n \n {t('ShowChosenPlots')}\n \n
3 ? \"selection-area-trim\" : \"\"}>\n \n {plots.filter(p => getSelectedPlots().includes(p.apNumber)).map((plot, i) =>\n \n <>\n {plot.name} - {plot.apChar} ({plot.area} ha)\n \n \n \n \n \n )}\n \n
\n {!reachedBottom ?\n \n \n \n : \"\"}\n
\n
\n
\n
\n \n\n {/*add new action or markAs done modal*/}\n setShowActionModal(false)}\n selectedplots={\n getSelectedPlots()\n ? plots.filter(p => getSelectedPlots().includes(p.apNumber)) : getSelectedPlots()}\n addMode={actionModeAdd}\n setAlertContent={setAlertContent}\n showAlert={setShowAlert}\n />\n {showFeatureSelectionModal === true ?\n handleFeatureSelectionClose()}\n mapEvent={featureSelectionEvent}\n saveFeature={(data) => handleObservationVisibility(data)}\n allowHide={() => { allowModalHide = true }}\n />\n : ''}\n {showMemoModal === true ?\n handleMemoModalClose()}\n mapEvent={memoEvent}\n saveMemo={(data) => handleMemoModalEdit(data)}\n deleteMemo={() => handleMemoModalDelete()}\n allowHide={() => { allowModalHide = true }}\n />\n : ''}\n {showObservationModal === true ?\n handleObservationsModalClose()}\n mapEvent={observationEvent}\n saveObservation={(data) => handleObservationModalEdit(data)}\n deleteObservation={() => handleObservationModalDelete()}\n allowHide={() => { allowModalHide = true }}\n />\n : ''}\n \n );\n}\nexport default Map;\n\n\n","import React, { useState } from 'react';\nimport GPS from './TaskViewer/GPS';\nimport MapComponent from './Map'\nimport { taskViewer_viewComponents } from '../constants';\n\nconst MapViewer = (props) => {\n const [currentComponent, setCurrentComponent] = useState({ viewComponent: taskViewer_viewComponents.taskTypeSelection, data: [] });\n\n const getComponent = () => {\n switch (currentComponent.viewComponent) {\n case taskViewer_viewComponents.GPS:\n return ;\n case taskViewer_viewComponents.taskTypeSelection:\n return ;\n default:\n return ; \n }\n }\n\n return (\n <>\n {getComponent()}\n \n );\n}\n\nexport default MapViewer;","import React, { useState, useEffect, useContext } from 'react';\nimport Card from 'react-bootstrap/Card';\nimport Accordion from 'react-bootstrap/Accordion';\nimport Button from 'react-bootstrap/Button';\nimport ListGroup from 'react-bootstrap/ListGroup';\nimport Spinner from 'react-bootstrap/Spinner';\nimport Badge from 'react-bootstrap/Badge';\nimport { useTranslation } from 'react-i18next';\nimport AppContext from '../../AppContext';\nimport { getContentWithAction, postContentWithAction } from '../../apiConnect';\nimport { getSelectedPlot, getSelectedLang } from '../../common';\nimport { textStyle, rowStyle, addNoteRowStyle, addButtonStyle } from '../ComponentStyles/ButtonStyles.js'\n\nimport { ICONS } from '../../img/icons'\nimport Icon from '../../img/Icon'\nimport '../../css/general.css'\nimport '../../css/plotOperation.css'\nimport '../../css/badge.css'\n\nimport * as Cards from '../../Constants/AccordionCardConstants.js';\nimport { toggleActive, formatPlannedDate, dayJsFormatDate } from '../../commonFunctions.js'\nimport { OperationCardToggle } from '../../commonElements.js'\n\n\nconst SowAccordionCard = (props) => {\n const { t } = useTranslation();\n const { auth } = useContext(AppContext);\n\n const [sows, setSows] = useState([]);\n const [memos, setMemos] = useState([]);\n const [sowIsLoading, setSowIsLoading] = useState(true);\n const [memoIsLoading, setMemoIsLoading] = useState(true);\n const [modalDisabled, setModalDisabled] = useState(false);\n\n useEffect(() => {\n var plot = getSelectedPlot();\n if (plot) {\n setSowIsLoading(true);\n\n if (plot.plantId === 0)\n setModalDisabled(true);\n\n getContentWithAction(auth.getAccessToken(), 'sow', 'sows', { plotId: plot.apNumber, lang: getSelectedLang() }).then((sows) => {\n setSows(sows);\n setSowIsLoading(false);\n });\n }\n }, [props.refresh]);\n\n useEffect(() => { \n var memos = props.memos.filter(m => m.plantMemoType === 1);\n memos.sort((a, b) => b.memo > a.memo ? -1 : 1);\n setMemos(memos);\n setMemoIsLoading(false);\n }, [props.memos])\n\n const setSowDone = (sow) => {\n var id = sow.number;\n var plotId = sow.plotId;\n // Updating individual sow to show spinner\n const updatedSows = sows.map(s => s === sow ? { ...s, saveInProgress: true } : s);\n setSows(updatedSows);\n\n postContentWithAction(auth.getAccessToken(), 'sow', 'done', { id: id, plotId: plotId }, () =>\n {\n // Updating individual sow to hide spinner\n const updatedSows = sows.map(s => s === sow ? { ...s, saveInProgress: false } : s);\n setSows(updatedSows);\n setSowIsLoading(true);\n props.setRefresh(Date.now());\n });\n }\n\n const getPlantLetter = (sow) => {\n return sow.description.substring(0,1);\n }\n\n return (\n \n \n toggleActive(props.activeCard, Cards.sowCardId, props.setActiveCard)} eventKey=\"0\">\n {t('Sowings')}\n {sowIsLoading ? : {sows.length}}\n \n \n \n \n \n \n {(sows) ? sows.map(p =>\n
\n
{getPlantLetter(p)}
\n\n {\n props.setSelectEvent({ time: Date.now(), selectedElement: p });\n props.setModalShow(true);\n }}>\n
{p.description} - {p.amount} {p.unitText}/ha
\n
{(p.sowingDate) ?\n {t('Completed')} {dayJsFormatDate(p.sowingDate)}\n : {formatPlannedDate(p.actionDate, t)}}\n
\n
\n\n {props.allowedSave ?\n
\n {p.saveInProgress ? : ''}\n {p.sowingDate ? '' : }\n {p.sowingDate ? '' : }\n
\n : ''}\n
\n ) : ''}\n\n \n {!props.memosIsLoading ?\n memos.map(p =>\n
\n
\n {\n props.setMemoType(1);\n props.setSelectMemoEvent({ time: Date.now(), selectedElement: p });\n props.setMemoModalShow(true);\n }}>\n
{t('Note')}
\n
{p.memo}
\n
\n \n
\n )\n :
\n {t('Loding')}\n \n
}\n {\n props.setMemoType(1);\n props.setSelectMemoEvent({ time: Date.now(), selectedElement: null });\n props.setMemoModalShow(true);\n }}>\n
\n
{t('AddNote')}
\n {memoIsLoading ? : ''}\n
\n
\n
\n
\n
\n );\n}\n\nexport default SowAccordionCard;","export const sowCardId = 1;\nexport const fertilizingCardId = 2;\nexport const modificationCardId = 3;\nexport const pesticideCardId = 4;\nexport const harvestCardId = 5;\nexport const memoCardId = 6;","import React, { useState, useEffect, useContext } from 'react';\nimport Card from 'react-bootstrap/Card';\nimport Accordion from 'react-bootstrap/Accordion';\nimport Button from 'react-bootstrap/Button';\nimport ListGroup from 'react-bootstrap/ListGroup';\nimport Spinner from 'react-bootstrap/Spinner';\nimport Badge from 'react-bootstrap/Badge';\nimport { useTranslation } from 'react-i18next';\nimport { ICONS } from '../../img/icons'\nimport Icon from '../../img/Icon'\nimport { textStyle, rowStyle, addNoteRowStyle, addButtonStyle } from '../ComponentStyles/ButtonStyles.js'\nimport '../../css/general.css'\nimport * as Cards from '../../Constants/AccordionCardConstants.js';\nimport { toggleActive, dayJsFormatDate } from '../../commonFunctions.js'\nimport { OperationCardToggle } from '../../commonElements.js'\nimport { postContentWithAction } from '../../apiConnect';\nimport AppContext from '../../AppContext';\n\nconst MemoAccordionCard = (props) => {\n const { t } = useTranslation();\n const { auth } = useContext(AppContext);\n\n const [memos, setMemos] = useState([]);\n const [memosIsLoading, setMemosIsLoading] = useState(true);\n const [memoAttachments, setMemoAttachments] = useState([]);\n\n useEffect(() => {\n setMemosIsLoading(true);\n props.memos.sort((a, b) => b.memo > a.memo ? -1 : 1);\n var memos = props.memos.filter(m => m.plantMemoType === 0);\n setMemos(memos);\n if (!props.memosIsLoading) setMemosIsLoading(false);\n }, [props.memos]);\n\n useEffect(() => {\n if (memos.length > 0) {\n postContentWithAction(auth.getAccessToken(), 'photo', 'memoPhotosAll', { models: memos },\n (data) => {\n if (data.length > 0) {\n const memoPhotos = memoAttachments;\n data.forEach(d => {\n memoPhotos.push({ mediaId: d.mediaId, memoId: d.memoId });\n });\n setMemoAttachments(memoPhotos);\n }\n setMemosIsLoading(false);\n });\n }\n }, [memos]);\n\n const memoHasAttachment = (memo) => {\n var item = memoAttachments.find(m => m.memoId === memo.memoId);\n if (item) return true;\n return false;\n }\n\n return (\n \n \n toggleActive(props.activeCard, Cards.memoCardId, props.setActiveCard)} eventKey=\"5\">\n {t('Plot_Memos')}\n {memosIsLoading ? : {memos.length}}\n \n \n \n \n \n \n {!memosIsLoading ? memos.map(p =>\n
\n
\n {\n props.setMemoType(0);\n props.setSelectMemoEvent({ time: Date.now(), selectedElement: p });\n props.setModalShow(true);\n }}>\n
\n {memoHasAttachment(p) ?\n \n : ''}\n
\n
{p.memo}
\n
{p.explanation}
\n
{dayJsFormatDate(p.memoDate)}
\n
\n \n
\n ) : ''}\n {\n props.setMemoType(0);\n props.setSelectMemoEvent({ time: Date.now(), selectedElement: null });\n props.setModalShow(true);\n }}>\n
\n
{t('AddNote')}
\n
\n
\n
\n
\n
\n );\n}\n\nexport default MemoAccordionCard;","import React, { useState, useEffect, useContext } from 'react';\nimport Card from 'react-bootstrap/Card';\nimport Accordion from 'react-bootstrap/Accordion';\nimport Button from 'react-bootstrap/Button';\nimport ListGroup from 'react-bootstrap/ListGroup';\nimport Spinner from 'react-bootstrap/Spinner';\nimport Badge from 'react-bootstrap/Badge';\nimport { useTranslation } from 'react-i18next';\nimport AppContext from '../../AppContext';\n\nimport { getContentWithAction, postContentWithAction } from '../../apiConnect';\nimport { getSelectedPlot } from '../../common';\nimport { textStyle, rowStyle, addNoteRowStyle, addButtonStyle, nutrientRowStyle } from '../ComponentStyles/ButtonStyles.js'\nimport { ICONS } from '../../img/icons'\nimport Icon from '../../img/Icon'\nimport '../../css/plotOperation.css'\n\nimport * as Cards from '../../Constants/AccordionCardConstants.js';\nimport { toggleActive, formatPlannedDate, selectFertilizerName, dayJsFormatDate } from '../../commonFunctions.js'\nimport { OperationCardToggle } from '../../commonElements.js'\n\nconst FertilizeAccordionCard = (props) => {\n const { t } = useTranslation();\n const { auth } = useContext(AppContext);\n\n const [fertilizes, setFertilizes] = useState([]);\n const [memos, setMemos] = useState([]);\n const [fertilizeIsLoading, setFertilizeIsLoading] = useState(true);\n const [memosIsLoading, setMemosIsLoading] = useState(true);\n\n const p = getSelectedPlot();\n\n useEffect(() => {\n setFertilizeIsLoading(true);\n\n if (p && p.apNumber) {\n getContentWithAction(auth.getAccessToken(), 'fertilize', 'getFertilizings', { plotId: p.apNumber }).then((fertilizes) => {\n if (getSelectedPlot() && getSelectedPlot().apNumber) {\n fertilizes = fertilizes.filter(f => f.plotId === getSelectedPlot().apNumber);\n setFertilizes(fertilizes);\n }\n setFertilizeIsLoading(false);\n });\n }\n }, [props.refresh]);\n\n useEffect(() => {\n setMemosIsLoading(true);\n var memos = props.memos.filter(m => m.plantMemoType === 2);\n memos.sort((a, b) => b.memo > a.memo ? -1 : 1);\n setMemos(memos);\n setMemosIsLoading(false);\n }, [props.memos])\n\n const setFertilizeDone = (fert) => {\n var id = fert.fertilizingId;\n var plotId = fert.plotId;\n var fertArea = fert.area ?? p.area;\n // Updating individual sow to show spinner\n const updatedFerts = fertilizes.map(s => s === fert ? { ...s, saveInProgress: true } : s);\n setFertilizes(updatedFerts);\n postContentWithAction(auth.getAccessToken(), 'fertilize', 'done', { id: id, plotId: plotId, fertilizationArea: fertArea }, () => {\n // Updating individual sow to show spinner\n const updatedFerts = fertilizes.map(s => s === fert ? { ...s, saveInProgress: true } : s);\n setFertilizes(updatedFerts);\n setFertilizeIsLoading(true); props.setRefresh(Date.now());\n });\n }\n\n const getRowLetter = (row) => {\n return selectFertilizerName(row).substring(0, 1);\n }\n\n //const deleteMemo = (memo, plotId) => {\n // postContentWithAction('memo', 'delete', { memoId: memo.memoId, plotId: plotId }, () => {\n // setFertilizeIsLoading(true);\n // props.setRefresh(Date.now());\n // });\n //}\n\n return (\n \n \n toggleActive(props.activeCard, Cards.fertilizingCardId, props.setActiveCard)} eventKey=\"1\">\n {t('Fertilizinglist')}\n {fertilizeIsLoading ? : {fertilizes.length}}\n \n \n \n \n \n \n {(fertilizes) ? fertilizes.map(p =>\n
\n
{getRowLetter(p)}
\n\n {\n props.setSelectEvent({ time: Date.now(), selectedElement: p });\n props.setModalShow(true)\n }}>\n\n
{selectFertilizerName(p)} - {p.amount} {p.unitText}/ha\n {(p.pesticideId) ?\n \n : ''}\n
\n\n
{(p.date) ?\n {t('Completed')} {dayJsFormatDate(p.date)}\n : {formatPlannedDate(p.plannedDate, t)}}\n
\n
\n\n {props.allowedSave ?\n
\n {p.saveInProgress ? : ''}\n {!p.date ? : ''}\n {!p.date ? : ''}\n
\n : ''}\n
\n ) : ''}\n {!props.memosIsLoading ? memos.map(p =>\n
\n
\n {\n props.setMemoType(2);\n props.setSelectMemoEvent({ time: Date.now(), selectedElement: p });\n props.setMemoModalShow(true);\n }}>\n
{t('Note')}
\n
{p.memo}
\n
\n \n
\n ) :
\n {t('Loding')}\n \n
}\n\n {\n props.setMemoType(2);\n props.setSelectMemoEvent({ time: Date.now(), selectedElement: null });\n props.setMemoModalShow(true);\n }}>\n
\n
{t('AddNote')}
\n {memosIsLoading ? : ''}\n
\n\n {\n props.setSelectEvent({ time: Date.now(), selectedElement: null })\n props.setNutrientModalShow(true);\n }}>\n
\n
{t('Nutrient_Calculation_Show')}
\n
\n
\n
\n
\n
\n );\n}\n\nexport default FertilizeAccordionCard;","import React, { useState, useEffect, useContext } from 'react';\nimport Card from 'react-bootstrap/Card';\nimport Accordion from 'react-bootstrap/Accordion';\nimport Button from 'react-bootstrap/Button';\nimport ListGroup from 'react-bootstrap/ListGroup';\nimport Spinner from 'react-bootstrap/Spinner';\nimport Badge from 'react-bootstrap/Badge';\nimport AppContext from '../../AppContext';\nimport { useTranslation } from 'react-i18next';\nimport { ICONS } from '../../img/icons'\nimport Icon from '../../img/Icon'\nimport { textStyle, rowStyle, addNoteRowStyle, addButtonStyle } from '../ComponentStyles/ButtonStyles.js'\nimport { getContentWithAction } from '../../apiConnect';\nimport { getSelectedPlot } from '../../common';\nimport * as Cards from '../../Constants/AccordionCardConstants.js';\nimport { toggleActive, formatPlannedDate, dayJsFormatDate } from '../../commonFunctions.js'\nimport { OperationCardToggle } from '../../commonElements.js'\n\nconst PlotModificationAccordionCard = (props) => {\n const { t } = useTranslation();\n const { auth } = useContext(AppContext);\n\n const [plotModifications, setPlotModifications] = useState([]);\n const [memos, setMemos] = useState([]);\n const [plotModificationIsLoading, setPlotModificationIsLoading] = useState(true);\n const [memosIsLoading, setMemosIsLoading] = useState(true);\n\n const p = getSelectedPlot();\n\n useEffect(() => {\n setPlotModificationIsLoading(true);\n\n if (p && p.apNumber) {\n getContentWithAction(auth.getAccessToken(), 'plotModification', 'plotModifications', { plotId: p.apNumber }).then((modifications) => {\n //cleanup()\n setPlotModifications(modifications);\n setPlotModificationIsLoading(false);\n });\n }\n }, [props.refresh]);\n\n useEffect(() => {\n setMemosIsLoading(true);\n var memos = props.memos.filter(m => m.plantMemoType === 3);\n memos.sort((a, b) => b.memo > a.memo ? -1 : 1);\n setMemos(memos);\n setMemosIsLoading(false);\n }, [props.memos]);\n\n const getRowLetter = (row) => {\n return row.description.substring(0, 1);\n }\n\n return (\n \n \n toggleActive(props.activeCard, Cards.modificationCardId, props.setActiveCard)} eventKey=\"2\">\n {t('Tilling_Cultivation')}\n {plotModificationIsLoading ? : {plotModifications.length}}\n \n \n \n \n \n \n {(plotModifications) ? plotModifications.map(p =>\n
\n
{getRowLetter(p)}
\n\n {\n props.setSelectEvent({ time: Date.now(), selectedElement: p });\n props.setModalShow(true);\n }}>\n\n
\n {p.description} - {p.depth ? p.depth + ' ' + p.unitText : ''} {p.count ? 'x ' + p.count + t('Counts') : ''}
\n
{(p.actionDate) ?\n {t('Completed')} {dayJsFormatDate(p.actionDate)}\n : {formatPlannedDate(p.plannedDate, t)}}\n
\n
\n {/*
*/}\n {/* {!p.actionDate ? : ''}*/}\n {/*
*/}\n
\n ) : ''}\n {!props.memosIsLoading ? memos.map(p =>\n
\n
\n {\n props.setMemoType(3);\n props.setSelectMemoEvent({ time: Date.now(), selectedElement: p });\n props.setMemoModalShow(true);\n }}>\n
{t('Note')}
\n
{p.memo}
\n
\n \n
\n ) :
\n {t('Loding')}\n \n
}\n {\n props.setMemoType(3);\n props.setSelectMemoEvent({ time: Date.now(), selectedElement: null });\n props.setMemoModalShow(true);\n }}>\n
\n
{t('AddNote')}
\n {memosIsLoading ? : ''}\n
\n
\n
\n
\n
\n );\n}\n\nexport default PlotModificationAccordionCard;","import React, { useState, useEffect, useContext } from 'react';\nimport Card from 'react-bootstrap/Card';\nimport Accordion from 'react-bootstrap/Accordion';\nimport Button from 'react-bootstrap/Button';\nimport ListGroup from 'react-bootstrap/ListGroup';\nimport Spinner from 'react-bootstrap/Spinner';\nimport Badge from 'react-bootstrap/Badge';\nimport { useTranslation } from 'react-i18next';\nimport AppContext from '../../AppContext';\nimport * as dayjs from 'dayjs'\n\nimport { postContentWithAction } from '../../apiConnect';\nimport { textStyle, rowStyle, addNoteRowStyle, addButtonStyle } from '../ComponentStyles/ButtonStyles.js'\nimport { getSelectedPlot, getSelectedLang } from '../../common';\nimport { ICONS } from '../../img/icons'\nimport Icon from '../../img/Icon'\nimport { useAlert } from 'react-alert'\nimport * as Cards from '../../Constants/AccordionCardConstants.js';\nimport { toggleActive, formatPlannedDate, dayJsFormatDate } from '../../commonFunctions.js'\nimport { OperationCardToggle } from '../../commonElements.js'\nimport '../../css/plotOperation.css'\nimport '../../css/general.css'\n\nconst PlantProtectionAccordionCard = (props) => {\n const { t } = useTranslation();\n const { auth } = useContext(AppContext);\n\n const [plantProtections, setPlantProtections] = useState([]);\n const [memosIsLoading, setMemosIsLoading] = useState(true);\n const [memos, setMemos] = useState([]);\n const [plantProtectionIsLoading, setPlantProtectionIsLoading] = useState(true);\n\n const p = getSelectedPlot();\n const alert = useAlert();\n\n useEffect(() => {\n if (getSelectedPlot()) {\n setPlantProtectionIsLoading(true);\n setPlantProtections([]);\n\n if (p && p.apNumber) {\n var plotIds = [];\n plotIds.push({ plotId: p.apNumber });\n postContentWithAction(auth.getAccessToken(), 'plotOperation', 'getPlantProtectionOperations', { models: plotIds, lang: getSelectedLang() }, (protections) => {\n setPlantProtectionIsLoading(false);\n let sortedplotList = compareProtections(protections);\n setPlantProtections(sortedplotList);\n });\n }\n }\n }, [props.refresh]);\n\n useEffect(() => {\n setMemosIsLoading(true);\n var memos = props.memos.filter(m => m.plantMemoType === 4);\n memos.sort((a, b) => b.memo > a.memo ? -1 : 1);\n setMemos(memos);\n setMemosIsLoading(false);\n }, [props.memos])\n\n const compareProtections = (data) => {\n //Regular items\n let doneProtections = data.filter(p => {\n if (p.growthInformation.date)\n return p;\n }); \n let plannedProtections = data.filter(p => {\n if (!p.growthInformation.date && p.growthInformation.plannedDate)\n return p;\n }); \n //Special cases \n let specialObservationsDone = data.filter(p => {\n if (p.growthInformation.growthStage == 0 && !p.growthInformation.growthStageName && p.growthInformation.date && !p.pesticides && !p.fertilizings)\n return p;\n });\n let specialObservationsPlanned = data.filter(p => {\n if (p.growthInformation.growthStage == 0 && !p.growthInformation.growthStageName && !p.growthInformation.date && !p.pesticides && !p.fertilizings)\n return p;\n });\n let datelessProtections = data.filter(p => {\n if (!p.growthInformation.date && !p.growthInformation.plannedDate)\n return p;\n }); \n\n //DONE protections \n doneProtections.sort((a, b) => {\n return comparisonExtenderDoneDates(a, b);\n });\n\n //PLANNED protections \n plannedProtections.sort((a, b) => {\n return comparisonExtenderPlannedDates(a, b);\n });\n\n //DONE SPECIAL OBSERVATIONS \n specialObservationsDone.sort((a, b) => {\n return comparisonExtenderDoneDates(a, b);\n });\n\n //PLANNED SPECIAL OBSERVATIONS \n specialObservationsPlanned.sort((a, b) => {\n return comparisonExtenderPlannedDates(a, b);\n });\n\n //DATELESS PROTECTIONS \n datelessProtections.sort((a, b) => {\n return comparisonExtenderGrowthStages(a, b);\n });\n\n let sortedProtections = [...doneProtections, ...plannedProtections, ...specialObservationsDone, ...specialObservationsPlanned, ...datelessProtections];\n\n return sortedProtections;\n };\n\n //Comparison first layer - DONE DATES\n const comparisonExtenderDoneDates = (a, b) => {\n //FIRST layer filtering based on ASCENDING DATE order\n if (new Date(a.growthInformation.date) > new Date(b.growthInformation.date)) {\n return 1;\n }\n if (new Date(a.growthInformation.date) < new Date(b.growthInformation.date)) {\n return -1;\n }\n if (dayjs(a.growthInformation.date).isSame(dayjs(b.growthInformation.date))) {\n //SECOND layer filtering, based on growthStage\n return comparisonExtenderGrowthStages(a, b);\n }\n return -1;\n };\n //Comparison first layer - PLANNED DATES\n const comparisonExtenderPlannedDates = (a, b) => {\n //FIRST layer filtering based on ASCENDING DATE order\n if (Number(a.growthInformation.plannedDate.slice(4, 6)) > Number(b.growthInformation.plannedDate.slice(4, 6))) {\n return 1;\n }\n if (Number(a.growthInformation.plannedDate.slice(4, 6)) < Number(b.growthInformation.plannedDate.slice(4, 6))) {\n return -1;\n }\n if (Number(a.growthInformation.plannedDate.slice(4, 6)) === Number(b.growthInformation.plannedDate.slice(4, 6))) {\n //SECOND layer filtering, based on growthStage\n return comparisonExtenderGrowthStages(a, b);\n }\n return -1;\n };\n //Comparison extender for second layer of comparisons - GROWTH STAGES\n const comparisonExtenderGrowthStages = (a, b) => {\n //NO GROWTH STAGE\n if (a.growthInformation.growthStage == 0 && !a.growthInformation.growthStageName && !b.growthInformation.growthStage == 0 && b.growthInformation.growthStageName) {\n return 1;\n }\n if (!a.growthInformation.growthStage == 0 && a.growthInformation.growthStageName && b.growthInformation.growthStage == 0 && !b.growthInformation.growthStageName) {\n return -1;\n }\n if (a.growthInformation.growthStage == 0 && !a.growthInformation.growthStageName && b.growthInformation.growthStage == 0 && !b.growthInformation.growthStageName) {\n ///OBSERVATIONS \n return comparisonExtenderObservations(a, b);\n }\n /// GROWTHSTAGES\n if (a.growthInformation.growthStage && b.growthInformation.growthStage) {\n /// T-type of growth stage\n if (!a.growthInformation.growthStage.includes('T') && b.growthInformation.growthStage.includes('T')) {\n return 1;\n }\n if (a.growthInformation.growthStage.includes('T') && !b.growthInformation.growthStage.includes('T')) {\n return -1;\n }\n if (a.growthInformation.growthStage.includes('T') && b.growthInformation.growthStage.includes('T')) {\n if (Number(a.growthInformation.growthStage.slice(-1)) > Number(b.growthInformation.growthStage.slice(-1))) {\n return 1;\n }\n if (Number(a.growthInformation.growthStage.slice(-1)) < Number(b.growthInformation.growthStage.slice(-1))) {\n return -1;\n }\n // Identical T-type growthstages\n if (Number(a.growthInformation.growthStage.slice(-1)) === Number(b.growthInformation.growthStage.slice(-1))) {\n ///THIRD layer - observations \n return comparisonExtenderObservations(a, b);\n }\n }\n /// normal, numerical types of growthstages\n if (!a.growthInformation.growthStage.includes('T') && !b.growthInformation.growthStage.includes('T')) {\n if (!Number(a.growthInformation.growthStage.charAt(0)) === 0 && Number(b.growthInformation.growthStage.charAt(0)) === 0) {\n return 1;\n }\n if (Number(a.growthInformation.growthStage.charAt(0)) === 0 && !Number(b.growthInformation.growthStage.charAt(0)) === 0) {\n return -1;\n }\n //Growthstages Header\n if (a.growthInformation.growthStage.charAt(0) == 0 && b.growthInformation.growthStage.charAt(0) == 0) {\n if (Number(a.growthInformation.growthStage) > Number(b.growthInformation.growthStage)) {\n return 1;\n }\n if (Number(a.growthInformation.growthStage) < Number(b.growthInformation.growthStage)) {\n return -1;\n }\n if (Number(a.growthInformation.growthStage) === Number(b.growthInformation.growthStage)) {\n ///THIRD layer - observations \n return comparisonExtenderObservations(a, b);\n }\n }\n //Not header\n if (!a.growthInformation.growthStage.charAt(0) == 0 && !b.growthInformation.growthStage.charAt(0) == 0) {\n if (Number(a.growthInformation.growthStage) > Number(b.growthInformation.growthStage)) {\n return 1;\n }\n if (Number(a.growthInformation.growthStage) < Number(b.growthInformation.growthStage)) {\n return -1;\n }\n if (Number(a.growthInformation.growthStage) === Number(b.growthInformation.growthStage)) {\n ///THIRD layer - observations \n return comparisonExtenderObservations(a, b);\n }\n }\n }\n }\n };\n //Comparison extender for third layer of comparisons - OBSERVATIONS\n const comparisonExtenderObservations = (a, b) => {\n //NO OBSERVATION \n if (!a.observations.length && b.observations.length) {\n return 1;\n }\n if (a.observations.length && !b.observations.length) {\n return -1;\n }\n if (!a.observations.length && !b.observations.length) {\n ///PESTICIDES \n return comparisonExtenderPesticides(a, b);\n }\n if (a.observations.length && b.observations.length) {\n if (a.observations[0].productName > b.observations[0].productName) {\n return 1;\n }\n if (a.observations[0].productName < b.observations[0].productName) {\n return -1;\n }\n if (a.observations[0].productName === b.observations[0].productName) {\n ///FOURTH layer - pesticides \n return comparisonExtenderPesticides(a, b);\n }\n }\n };\n //Comparison extender for fourth layer of comparisons - PESTICIDES\n const comparisonExtenderPesticides = (a, b) => {\n //NO PESTICIDES \n if (!a.pesticides.length && b.pesticides.length) {\n return 1;\n }\n if (a.pesticides.length && !b.pesticides.length) {\n return -1;\n }\n if (!a.pesticides.length && !b.pesticides.length) {\n ///FERTILIZINGS \n return comparisonExtenderFertilizings(a, b);\n }\n if (a.pesticides.length && b.pesticides.length) {\n ///FOURTH layer - pesticides \n if (a.pesticides[0].productName > b.pesticides[0].productName) {\n return 1;\n }\n if (a.pesticides[0].productName < b.pesticides[0].productName) {\n return -1;\n }\n ///FIFTH layer - fertilizings \n if (a.pesticides[0].productName === b.pesticides[0].productName) {\n return comparisonExtenderFertilizings(a, b);\n }\n }\n };\n //Comparison extender for fifth layer of comparisons - FERTILIZINGS\n const comparisonExtenderFertilizings = (a, b) => {\n //NO PESTICIDES \n if (!a.fertilizings.length && b.fertilizings.length) {\n return 1;\n }\n if (a.fertilizings.length && !b.fertilizings.length) {\n return -1;\n }\n if (!a.fertilizings.length && !b.fertilizings.length) {\n ///FERTILIZINGS \n return 0;\n }\n if (a.fertilizings.length && b.fertilizings.length) {\n ///FIFTH layer - fertilizings \n if (a.fertilizings[0].productName > b.fertilizings[0].productName) {\n return 1;\n }\n if (a.fertilizings[0].productName < b.fertilizings[0].productName) {\n return -1;\n }\n }\n };\n\n const getHeaderText = (p, rowLetter) => {\n let displayText = [];\n\n if (p.growthInformation && p.growthInformation.growthStage && p.growthInformation.growthStage !== \"0\") {\n let growthStage = p.growthInformation.growthStage.slice(2, 4) + \" - \" + p.growthInformation.growthStageName;\n displayText.push(growthStage);\n }\n\n if (p.observations.length) {\n p.observations.forEach(obs => {\n displayText.push(obs.productName);\n });\n }\n\n if (!displayText.length) {\n let text = rowLetter ? \"-\" : t('NoGrowthStageOrObservation');\n displayText.push(text);\n }\n\n return displayText.join(' - ');\n }\n\n const getSubText = (p) => {\n let displayText = [];\n\n if (p.pesticides.length) {\n p.pesticides.forEach(pest => {\n displayText.push(pest.productName);\n });\n }\n\n return displayText.join(' - ');\n }\n\n const getSecondSubText = (p) => {\n let displayText = [];\n\n if (p.fertilizings.length) {\n p.fertilizings.forEach(fert => {\n displayText.push(fert.productName);\n });\n }\n\n return displayText.join(' - ');\n }\n\n const setPesticideDone = (pest) => {\n var growthInformation = pest.growthInformation;\n // Updating individual sow to show spinner\n const updatedPPs = plantProtections.map(s => s === pest ? { ...s, saveInProgress: true } : s);\n setPlantProtections(updatedPPs);\n\n postContentWithAction(auth.getAccessToken(), 'plotOperation', 'done', { growthInfo: growthInformation }, () => {\n // Updating individual sow to hide spinner\n const updatedPPs = plantProtections.map(s => s === pest ? { ...s, saveInProgress: false } : s);\n setPlantProtections(updatedPPs);\n setPlantProtectionIsLoading(false);\n props.setRefresh(Date.now());\n }).catch(e => {\n const updatedPPs = plantProtections.map(s => s === pest ? { ...s, saveInProgress: false } : s);\n setPlantProtections(updatedPPs);\n setPlantProtectionIsLoading(false);\n alert.show(t('SavedFailed'), { type: 'error' });\n });\n }\n\n const getRowLetter = (row) => {\n return getHeaderText(row, true).substring(0, 1);\n }\n\n return (\n \n \n toggleActive(props.activeCard, Cards.pesticideCardId, props.setActiveCard)} eventKey=\"3\">\n {t('Observations_PlantProtection')}\n {plantProtectionIsLoading ? : {plantProtections ? plantProtections.length : 0}}\n \n \n \n \n \n \n {(plantProtections) ? plantProtections.map((p, i) =>\n
\n
{getRowLetter(p)}
\n\n {\n props.setSelectEvent({ time: Date.now(), selectedElement: p });\n props.setModalShow(true);\n }}>\n\n
{getHeaderText(p)}
\n
{getSubText(p)}
\n
{getSecondSubText(p)}\n {getSecondSubText(p) ?\n \n : ''}\n
\n \n
{(p.growthInformation.date) ?\n {t('Completed')} {dayJsFormatDate(p.growthInformation.date)}\n : {formatPlannedDate(p.growthInformation.plannedDate, t)}}\n
\n
\n\n {props.allowedSave ?\n
\n {p.saveInProgress ? : ''}\n {!p.growthInformation.date && p.growthInformation.plannedDate ?\n \n :
}\n {!p.growthInformation.date && p.growthInformation.plannedDate ?\n \n :
}\n
\n : ''}\n
\n ) : ''}\n {!props.memosIsLoading ? memos.map(p =>\n
\n
\n {\n props.setMemoType(4);\n props.setSelectMemoEvent({ time: Date.now(), selectedElement: p });\n props.setMemoModalShow(true);\n }}>\n
{t('Note')}
\n
{p.memo}
\n
\n \n
\n ) :
\n {t('Loding')}\n \n
}\n {\n props.setMemoType(4);\n props.setSelectMemoEvent({ time: Date.now(), selectedElement: null });\n props.setMemoModalShow(true);\n }}>\n
\n
{t('AddNote')}
\n {memosIsLoading ? : ''}\n
\n
\n
\n
\n
\n )\n}\n\nexport default PlantProtectionAccordionCard;","import React, { useState, useEffect, useContext } from 'react';\nimport Card from 'react-bootstrap/Card';\nimport Accordion from 'react-bootstrap/Accordion';\nimport Button from 'react-bootstrap/Button';\nimport ListGroup from 'react-bootstrap/ListGroup';\nimport Spinner from 'react-bootstrap/Spinner';\nimport Badge from 'react-bootstrap/Badge';\nimport AppContext from '../../AppContext';\nimport { useTranslation } from 'react-i18next';\nimport { textStyle, rowStyle, addNoteRowStyle, addButtonStyle } from '../ComponentStyles/ButtonStyles.js'\nimport { getContentWithAction } from '../../apiConnect';\nimport { ICONS } from '../../img/icons'\nimport Icon from '../../img/Icon'\nimport { getSelectedPlot } from '../../common';\nimport * as harvestConstants from '../../Constants/HarvestConstants.js';\nimport * as Cards from '../../Constants/AccordionCardConstants.js';\nimport { toggleActive, formatPlannedDate, dayJsFormatDate } from '../../commonFunctions.js'\nimport { OperationCardToggle } from '../../commonElements.js'\nimport '../../css/plotOperation.css'\n\nconst HarvestAccordionCard = (props) => {\n const { t } = useTranslation();\n const { auth } = useContext(AppContext);\n\n const [harvests, setHarvests] = useState([]);\n const [memos, setMemos] = useState([]);\n const [harvestIsLoading, setHarvestIsLoading] = useState(true);\n const [memosIsLoading, setMemosIsLoading] = useState(true);\n const [sectionIsLoading, setSectionIsLoading] = useState(true);\n const [harvestModalDisabled, setHarvestModalDisabled] = useState(false);\n\n useEffect(() => {\n var plot = getSelectedPlot();\n if (plot) {\n setHarvestIsLoading(true);\n setHarvests([]);\n\n if (plot.plantId === 0)\n setHarvestModalDisabled(true);\n\n getContentWithAction(auth.getAccessToken(), 'harvest', 'harvests', { plotId: plot.apNumber }).then((harvests) => {\n harvests = harvests && harvests.length ? harvests.filter(h => h.plotId === plot.apNumber) : []\n setHarvests(harvests);\n setHarvestIsLoading(false);\n });\n }\n }, [props.refresh]);\n\n useEffect(() => {\n setMemosIsLoading(true);\n var memos = props.memos.filter(m => m.plantMemoType === 5);\n memos.sort((a, b) => b.memo > a.memo ? -1 : 1);\n setMemos(memos);\n setMemosIsLoading(false);\n }, [props.memos])\n\n useEffect(() => {\n !harvestIsLoading && !memosIsLoading ? setSectionIsLoading(false) : setSectionIsLoading(true);\n }, [harvestIsLoading, memosIsLoading])\n\n const getDisplayAmount = (harvest) => {\n let displayAmount = \"\";\n harvest.harvestedUnit === harvestConstants.SMALL_BALE_UNIT ||\n harvest.harvestedUnit === harvestConstants.ROUND_BALE_UNIT ||\n harvest.harvestedUnit === harvestConstants.CUBIC_BALE_UNIT ||\n harvest.harvestedUnit === harvestConstants.WAGON_UNIT\n ? displayAmount = parseFloat((harvest.loadAmount * harvest.baleWeight * (harvest.dryMateriaContent / 100)) / harvest.area).toFixed(2) + \" kg ka\"\n : displayAmount = harvest.amount + \" kg\";\n return displayAmount;\n }\n\n const getRowLetter = (row) => {\n return row.productName.substring(0, 1);\n }\n\n return (\n \n \n toggleActive(props.activeCard, Cards.harvestCardId, props.setActiveCard)} eventKey=\"4\">\n {t('Yield')}\n {sectionIsLoading ? : {harvests.length}}\n \n \n \n \n \n \n {harvests.map(p =>\n
\n
{getRowLetter(p)}
\n\n {\n props.setSelectEvent({ time: Date.now(), selectedElement: p });\n props.setModalShow(true);\n }}>\n\n
{p.productName} - {p.amount} {p.unitText}/ha
\n
{(p.beginDate) ?\n {t('Completed')} {dayJsFormatDate(p.beginDate)}\n : {formatPlannedDate(p.plannedDate, t)}}\n
\n
\n {/*
*/}\n {/* {!p.date ? : ''}*/}\n {/*
*/}\n
\n )}\n {!props.memosIsLoading ? memos.map(p =>\n
\n
\n {\n props.setMemoType(5);\n props.setSelectMemoEvent({ time: Date.now(), selectedElement: p });\n props.setMemoModalShow(true);\n }}>\n
{t('Note')}
\n
{p.memo}
\n
\n \n
\n ) :
\n {t('Loding')}\n \n
}\n {\n props.setMemoType(5);\n props.setSelectMemoEvent({ time: Date.now(), selectedElement: null });\n props.setMemoModalShow(true);\n }}>\n
\n
{t('AddNote')}
\n
\n
\n
\n
\n
\n );\n}\n\nexport default HarvestAccordionCard;","import React, { useState, useEffect, useContext } from 'react';\nimport Spinner from 'react-bootstrap/Spinner';\nimport Button from 'react-bootstrap/Button';\nimport { Col, Row, Form } from \"react-bootstrap\";\nimport Modal from 'react-bootstrap/Modal'\nimport { useTranslation } from 'react-i18next';\nimport { postContentWithAction } from '../../apiConnect';\nimport AppContext from '../../AppContext';\nimport { nutrientNumberCellStyle } from '../ComponentStyles/ButtonStyles.js'\n\nimport '../../css/general.css'\nimport '../../css/farmPlot.css'\n\nconst NutrientModal = (props) => {\n const { auth } = useContext(AppContext);\n const { t } = useTranslation();\n const [isLoading, setIsLoading] = useState(true);\n const [title, setTitle] = useState(\"\");\n const [nutrientData, setNutrientData] = useState(null);\n\n useEffect(() => {\n setTitle(t('Nutrient_Calculation'));\n setIsLoading(true);\n callMMNutrientCalculation(props.selectedPlot);\n }, [props.selectEvent]);\n\n const callMMNutrientCalculation = (plot) => {\n var plotIds = [];\n plotIds.push({ plotId: plot.apNumber });\n postContentWithAction(auth.getAccessToken(), 'fertilize', 'calculateNutrients', { models: plotIds }, (response) => {\n if (response) {\n response.nDiff = response.nCalculated - response.nMax;\n response.pDiff = response.pCalculated - response.pMax - response.manureException;\n setNutrientData(response);\n }\n setIsLoading(false);\n });\n }\n\n return (\n <>\n \n \n \n {title}\n \n \n \n {isLoading ? :\n
\n {!nutrientData ?

{t('Nutrient_Error')}

:\n
\n {/* HEADERS */}\n
\n \n \n \n {t('Nutrient_Calculation')}\n \n \n \n \n \n \n N\n \n \n P\n \n \n K\n \n \n \n
\n\n \n \n \n {t('Nutrient_Total')}\n \n \n {nutrientData.nCalculated}\n \n \n {nutrientData.pCalculated}\n \n \n {nutrientData.kCalculated}\n \n \n\n \n \n {t('Nutrient_Need')}\n \n \n {nutrientData.nNeed ? nutrientData.nNeed : 0}\n \n \n {nutrientData.pNeed ? nutrientData.pNeed : 0}\n \n \n {nutrientData.kNeed ? nutrientData.kNeed : 0}\n \n \n\n \n \n {t('Nutrient_Max')}\n \n \n {nutrientData.nMax ? nutrientData.nMax : 0}\n \n \n {nutrientData.pMax ? nutrientData.pMax : 0}\n \n \n {nutrientData.kMax ? nutrientData.kMax : 0}\n \n \n\n \n \n {t('Nutrient_Diff')}\n \n \n {nutrientData.nDiff > 0 ? '+' + nutrientData.nDiff : nutrientData.nDiff}\n \n \n {nutrientData.pDiff > 0 ? '+' + nutrientData.pDiff : nutrientData.pDiff}\n \n \n \n \n \n \n
\n }\n
\n }\n
\n \n \n \n
\n \n );\n}\n\nexport default NutrientModal;","import React, { useState, useEffect, useContext } from 'react';\nimport Modal from 'react-bootstrap/Modal'\nimport Button from 'react-bootstrap/Button';\nimport Select from 'react-select';\nimport Form from 'react-bootstrap/Form';\nimport NumberFormat from 'react-number-format';\nimport ButtonGroup from 'react-bootstrap/ButtonGroup'; \nimport ToggleButton from 'react-bootstrap/ToggleButton';\nimport Accordion from 'react-bootstrap/Accordion';\nimport { useTranslation } from 'react-i18next';\nimport { customStyles, formatGroupLabel, } from '../../common';\nimport Spinner from 'react-bootstrap/Spinner';\nimport '../../css/general.css'\nimport '../../css/plotOperation.css'\nimport { getContentWithAction, postContentWithAction } from '../../apiConnect';\nimport AppContext from '../../AppContext';\nimport { useAlert } from 'react-alert'\nimport { GRASSPLANT } from '../../constants';\nimport ConfirmModal from '../Alerts/ConfirmModal';\nimport { GardenPlantCheck, IsIrrigation } from '../../commonFunctions';\n\nconst ChangePlantModal = (props) => {\n\n /** Set component state variables */\n const [pageLoading, setPageLoading] = useState(true);\n const [validate, setValidation] = useState(false);\n const [selectedPlot, setSelectedPlot] = useState(null);\n const [plantSelectList, setPlantSelectList] = useState([]);\n const [spreadingList, setSpreadingList] = useState([]);\n const [mulchingList, setMulchingList] = useState([]);\n const [fertIntList, setFertIntList] = useState([]);\n const [selectedPlant, setSelectedPlant] = useState(null);\n const [selectedSpreading, setSelectedSpreading] = useState(null);\n const [selectedMulching, setSelectedMulching] = useState(null);\n const [selectedFertInt, setSelectedFertInt] = useState(null);\n const [buttonWriteShow, setButtonWriteShow] = useState(false); // allowed save btn disabled\n const [unitTypeText, setUnitTypeText] = useState('kg/ha');\n const [yieldTarget, setYieldTarget] = useState(0);\n const [fertCount, setFertCount] = useState(0);\n const [harvestYear, setHarvestYear] = useState(0);\n const [legumesContent, setLegumesContent] = useState(0);\n const [enableLegumes, setEnableLegumes] = useState(false);\n const [enableHarvestYear, setEnableHarvestYear] = useState(false);\n const [enableGardenPlants, setEnableGardenPlants] = useState(false);\n const [enableFertInt, setEnableFertInt] = useState(false);\n const [originalAgrPlotData, setOriginalAgrPlotData] = useState(null); // Original AgrPlot data on loading the modal\n const [showConfirm, setShowConfirm] = useState(false);\n const [sowsExists, setSowsExists] = useState(false);\n\n /** Set component properties */\n const { t } = useTranslation();\n const { auth } = useContext(AppContext);\n const default_text = (t('ChoosePlant'));\n const default_choice_text = (t('Select'));\n const alert = useAlert();\n const legumesRadios = [\n { name: t('No_legumes'), value: '0' },\n { name: t('Twenty_percent'), value: '1' },\n { name: t('Fourty_percent'), value: '2' }\n ]\n\n /** \n * Initializations for modal\n */\n useEffect(() => {\n if (props.selectedPlot == null) {\n props.onHide();\n return;\n }\n setSelectedPlot(props.selectedPlot);\n setSelectedPlant({ label: props.selectedPlot.plantName, value: props.selectedPlot.plantId });\n retrievePlants();\n }, [props.selectEvent]);\n\n /**\n * Retrieve modal data from database and handle results\n */\n const retrievePlants = () => {\n // Retrieve modal data\n Promise.all([\n getContentWithAction(auth.getAccessToken(), 'plotOperation', 'getAgrPlot', { plotId: props.selectedPlot.apNumber }),\n getContentWithAction(auth.getAccessToken(), 'resource', 'previousPlants', {}),\n getContentWithAction(auth.getAccessToken(), 'resource', 'plants', {}),\n getContentWithAction(auth.getAccessToken(), 'session', 'storeAllowed', {}),\n getContentWithAction(auth.getAccessToken(), 'sow', 'sows', { plotId: props.selectedPlot.apNumber }),\n getContentWithAction(auth.getAccessToken(), 'resource', 'spreadingMethods', {}),\n getContentWithAction(auth.getAccessToken(), 'resource', 'mulchingMethods', {}),\n getContentWithAction(auth.getAccessToken(), 'resource', 'fertiliserIntensity', {})\n ]).then(([plot, previousPlants, plants, sessionResult, sows, spreadings, mulchings, intensities]) => {\n // Handle data results -->\n // Filter out duplicates from lists\n previousPlants = previousPlants.filter(p => {\n if (plants.some(a => a.plantId === p.plantId)) return true;\n return false;\n });\n\n setOriginalAgrPlotData(plot);\n\n // Plant defaults for plot plant\n var plantData = plants.find(p => p.plantId === props.selectedPlot.plantId);\n // Set unit text for selected plant\n var selected_p_unitType = plantData.unitText;\n setUnitTypeText(selected_p_unitType);\n setHarvestYear(plot.harvestYear);\n setFertCount(plot.plotFertilizationCount);\n setYieldTarget(plot.harvestLevel);\n\n // ENABLE LEGUMES\n if (props.selectedPlot.plantId.toString().substring(0, 1) === GRASSPLANT) {\n setEnableLegumes(true);\n if (plot.plotLegumes)\n setLegumesContent(plot.plotLegumes.toString());\n else\n setLegumesContent('0');\n }\n\n // ENABLE GARDEN PLANTS\n if (GardenPlantCheck(props.selectedPlot.plantId.toString())) {\n setEnableGardenPlants(true);\n // Set selected garden plant options\n var plotSpreading = spreadings.find(s => s.value === plot.spreadingMethod);\n var plotMulching = mulchings.find(s => s.value === plot.mulchingMethod);\n var plotfertInt = intensities.find(s => s.value === plot.fertiliserIntensity);\n setSelectedSpreading(plotSpreading);\n setSelectedMulching(plotMulching);\n setSelectedFertInt(plotfertInt);\n if (IsIrrigation(plotSpreading.value)) setEnableFertInt(true);\n }\n\n // SET HARVEST YEAR\n if (plantData.plantPerennial > 1) {\n setEnableHarvestYear(true);\n }\n\n if (sows.length > 0) setSowsExists(true);\n\n // Set select list for all plants\n setPlantSelectList([\n { label: t('Previously_Used'), options: previousPlants },\n { label: t('All'), options: plants },\n ]);\n setSpreadingList([\n { label: '', options: spreadings }\n ]);\n setMulchingList([\n { label: '', options: mulchings }\n ]);\n setFertIntList([\n { label: '', options: intensities }\n ]);\n\n setButtonWriteShow(sessionResult);\n setPageLoading(false);\n });\n }\n\n /**\n * Handle changing plant \n * @param {any} plant Newly selected plant\n */\n const plantChanged = (plant) => {\n // Check if grass plant to enable legumes\n if (plant.legumesUse && plant.plantId.toString().substring(0, 1) === GRASSPLANT) {\n setLegumesContent('0');\n setEnableLegumes(true);\n }\n else {\n setLegumesContent(null);\n setEnableLegumes(false);\n }\n\n // ENABLE GARDEN PLANTS\n if (GardenPlantCheck(plant.plantId.toString())) {\n setEnableGardenPlants(true);\n }\n else {\n setEnableGardenPlants(false);\n }\n\n // Set default harvest level\n if (plant.harvestLevel) {\n setYieldTarget(plant.harvestLevel);\n }\n\n // Set default harvest year\n if (plant.plantPerennial > 1) {\n setEnableHarvestYear(true);\n setHarvestYear(plant.plantPerennial);\n }\n else {\n setEnableHarvestYear(false);\n setHarvestYear(1);\n }\n \n setUnitTypeText(plant.unitText);\n setSelectedPlant(plant);\n }\n\n const fertCountChanged = (value) => {\n var inputValue = value.floatValue;\n if (inputValue)\n setFertCount(inputValue);\n else\n setFertCount(null);\n }\n\n const legumesChanged = (event) => {\n if (event.currentTarget.value)\n setLegumesContent(event.currentTarget.value);\n else\n setLegumesContent(null);\n }\n\n const spreadingChanged = (value) => {\n setSelectedSpreading(value);\n setEnableFertInt(false);\n\n if (IsIrrigation(value.value)) {\n setEnableFertInt(true);\n } \n }\n\n /**\n * Updates value field\n * @param {any} value Yield target value\n */\n const yieldTargetChanged = (value) => {\n var inputValue = value.floatValue;\n if (inputValue)\n setYieldTarget(inputValue);\n else\n setYieldTarget(0);\n }\n\n const harvestYearChanged = (value) => {\n var inputValue = value.floatValue;\n if (inputValue)\n setHarvestYear(inputValue);\n else\n setHarvestYear(null);\n }\n\n /**\n * Save modal data and handle response\n */\n const savePlant = (removeSows) => {\n var plant = selectedPlant.value.toString();\n var legumes = parseInt(legumesContent);\n if (isNaN(legumes)) legumes = 0;\n\n var spreading, mulching, fertInt = 0;\n if (enableGardenPlants) {\n spreading = selectedSpreading ? selectedSpreading.value : 0;\n mulching = selectedMulching ? selectedMulching.value : 0;\n fertInt = selectedFertInt ? selectedFertInt.value : 0;\n }\n\n // Create save model\n var plantModel = {\n plotId: selectedPlot.apNumber,\n harvestLevel: yieldTarget,\n plotFertilizationCount: originalAgrPlotData.plotFertilizationCount,\n harvestYear: harvestYear,\n plotLegumes: legumes,\n plotUndersownCrop: originalAgrPlotData.plotUndersownCrop,\n removeSows: removeSows,\n plantId: plant,\n spreadingMethod: spreading,\n mulchingMethod: mulching,\n fertiliserIntensity: enableFertInt ? fertInt : 0\n };\n\n // Send save-request \n postContentWithAction(auth.getAccessToken(), 'plotOperation', 'changePlant', {\n ...plantModel\n }, (data) => {\n // Send refresh to parent page\n props.setRefresh(Date.now()); \n // Show success message pop-up\n alert.show(t('SavedSuccesfully'), { type: 'success' });\n }).catch(e => {\n // Show error message pop-up\n alert.show(t('SavedFailed'), { type: 'error' });\n });\n }\n\n /**\n * Component UI code\n */\n return (\n <>\n \n\n \n {t('Change_Plant')}\n \n\n \n
\n {pageLoading ?
\n {t('Loding')}\n \n
:\n\n
\n {/* === PLANT SELECT === */}\n \n {t('Plant')}\n plantChanged(data)}\n options={plantSelectList}\n styles={customStyles}\n formatGroupLabel={formatGroupLabel}\n />\n \n\n {/* === YIELD TARGET === */}\n \n {t('YieldTarget')}\n yieldTargetChanged(value)}\n displayType={'input'}\n thousandSeparator={' '}\n allowedDecimalSeparators={['.', ',']}\n allowNegative={false}\n suffix={' ' + unitTypeText}\n />\n \n\n {/* === FERTILIZATION COUNT === */}\n \n {t('Fert_Count')}\n fertCountChanged(values)}\n displayType={'input'}\n thousandSeparator={' '}\n allowedDecimalSeparators={['.', ',']}\n allowNegative={false}\n />\n \n\n {/* === HARVEST YEAR === */}\n {enableHarvestYear ? \n \n {t('HarvestYear')}\n harvestYearChanged(values)}\n displayType={'input'}\n thousandSeparator={' '}\n allowedDecimalSeparators={['.', ',']}\n allowNegative={false}\n />\n \n : ''}\n\n {/* === LEGUMES CONTENT === */}\n {enableLegumes ? \n \n {t('LegumesContent')}\n
\n \n {legumesRadios.map((radio, i) => (\n legumesChanged(e)}\n >\n {radio.name}\n \n ))}\n \n
\n : ''}\n\n\n {/* === GARDEN PLANT OPTIONS === */}\n {enableGardenPlants ?\n \n \n {t('GardenPlantOptions')}\n \n {/* === SPREADING METHOD === */}\n \n {t('SpreadingMethod')}\n spreadingChanged(data)}\n options={spreadingList}\n styles={customStyles}\n formatGroupLabel={formatGroupLabel}\n />\n \n\n {/* === MULCHING METHOD === */}\n \n {t('MulchingMethod')}\n setSelectedMulching(data)}\n options={mulchingList}\n styles={customStyles}\n formatGroupLabel={formatGroupLabel}\n />\n \n\n {/* === FERTILISER INTENSITY === */}\n \n {t('FertiliserIntensity')}\n setSelectedFertInt(data)}\n options={fertIntList}\n styles={customStyles}\n formatGroupLabel={formatGroupLabel}\n />\n \n \n \n \n : ''}\n
\n }\n
\n
\n\n \n \n {buttonWriteShow === true ?\n \n : ''}\n \n
\n\n {showConfirm === true ?\n {\n setShowConfirm(false);\n savePlant(true);\n }}\n decline={() => {\n setShowConfirm(false);\n savePlant(false);\n }}\n onHide={() => setShowConfirm(false)}\n title={ t('DeleteSows')}\n />\n : ''}\n \n )\n}\n\nexport default ChangePlantModal;","import React, { useState, useEffect, useContext } from 'react';\nimport Accordion from 'react-bootstrap/Accordion';\nimport { Container } from 'reactstrap';\nimport Card from 'react-bootstrap/Card';\nimport { useTranslation } from 'react-i18next';\nimport NavMenu from './NavMenu';\nimport AppContext from '../AppContext';\nimport { getContentWithAction } from '../apiConnect';\nimport Button from 'react-bootstrap/Button';\nimport { changePlantStyle } from './ComponentStyles/ButtonStyles.js'\n\nimport SowAccordionCard from './PlotOperationAccordionCards/SowAccordionCard';\nimport MemoAccordionCard from './PlotOperationAccordionCards/MemoAccordionCard';\nimport FertilizeAccordionCard from './PlotOperationAccordionCards/FertilizeAccordionCard';\nimport PlotModificationAccordionCard from './PlotOperationAccordionCards/PlotModificationAccordionCard';\nimport PlantProtectionAccordionCard from './PlotOperationAccordionCards/PlantProtectionAccordionCard';\nimport HarvestAccordionCard from './PlotOperationAccordionCards/HarvestAccordionCard';\nimport SowModal from './Modals/SowModal';\nimport FertilizeModal from './Modals/FertilizeModal';\nimport PlotModificationModal from './Modals/PlotTillageModal';\nimport PlantProtectionModal from './Modals/PlantProtectionModal';\nimport HarvestModal from './Modals/HarvestModal';\nimport NutrientModal from './Modals/NutrientModal';\nimport MemoModal from './Modals/MemoModal';\nimport ChangePlantModal from './Modals/ChangePlantModal';\nimport { getSelectedPlot, getSelectedYear, setSelectedPage, setSelectedPlot } from '../common';\nimport '../css/general.css'\n\nconst PlotOperation = (props) => {\n const { t } = useTranslation();\n const { auth } = useContext(AppContext);\n\n const [selectSowEvent, setSelectSowEvent] = useState({ time: null, selectedElement: null });\n const [sowModalShow, setSowModalShow] = useState(false);\n const [refreshSows, setRefreshSows] = useState(null);\n\n const [selectFertilizingEvent, setSelectFertilizingEvent] = useState(0)\n const [fertilizeModalShow, setFertilizeModalShow] = useState(false);\n const [refreshFertilizes, setRefreshFertilizes] = useState(null);\n\n const [selectModificationEvent, setSelectModificationEvent] = useState({ time: null, selectedElement: null });\n const [plotModificationModalShow, setPlotModificationModalShow] = useState(false);\n const [refreshPlotModifications, setRefreshPlotModifications] = useState(null);\n\n const [selectPlantProtectionEvent, setSelectPlantProtectionEvent] = useState({ time: null, selectedElement: null });\n const [plantProtectionModalShow, setPlantProtectionModalShow] = useState(false);\n const [refreshPlantProtections, setRefreshPlantProtections] = useState(0);\n\n const [selectHarvestEvent, setSelectHarvestEvent] = useState({time: null, selectedElement: null});\n const [harvestModalShow, setHarvestModalShow] = useState(false);\n const [refreshHarvests, setRefreshHarvests] = useState(null);\n\n const [selectMemoEvent, setSelectMemoEvent] = useState({ time: null, selectedElement: null });\n const [memoModalShow, setMemoModalShow] = useState(false);\n const [refreshMemos, setRefreshMemos] = useState(null);\n const [memoType, setMemoType] = useState(0);\n const [memos, setMemos] = useState([]);\n const [buttonWriteShow, setButtonWriteShow] = useState(false); // allowed save btn disabled\n const [memosIsLoading, setMemosIsLoading] = useState(true);\n const [plantExists, setPlantExists] = useState(false);\n\n const [changePlantModalShow, setChangePlantModalShow] = useState(false);\n const [nutrientModalShow, setNutrientModalShow] = useState(false);\n\n const [activeCard, setActiveCard] = useState(1);\n\n const [p, setP] = useState(getSelectedPlot());\n\n const refreshProtectionFertilizer = (data) => {\n setRefreshPlantProtections(data);\n setRefreshFertilizes(data);\n }\n\n setSelectedPage(2);\n\n useEffect(() => {\n getContentWithAction(auth.getAccessToken(), 'session', 'storeAllowed', {}).then((result) => {\n //if (!result || !result.length)\n // props.history.push('/');\n\n setButtonWriteShow(result);\n });\n }, []);\n\n useEffect(() => {\n if (p) {\n if (p.plantId && p.plantId !== \"\" && p.plantName !== \"\") {\n setPlantExists(true);\n }\n setMemosIsLoading(true);\n getContentWithAction(auth.getAccessToken(), 'memo', 'memos', { plotId: getSelectedPlot().apNumber }).then((memos) => {\n if (!memos) {\n setMemosIsLoading(false);\n return;\n }\n setMemosIsLoading(false);\n setMemos(memos);\n });\n }\n else\n props.history.push('/');\n\n }, [refreshMemos]);\n\n const movePlots = () => {\n props.history.push('/plots');\n }\n\n const refreshPlantChange = () => {\n setChangePlantModalShow(false);\n\n getContentWithAction(auth.getAccessToken(), 'farmPlot', 'getPlot', { plotId: getSelectedPlot().apNumber }).then((plot) => {\n setP(plot);\n setSelectedPlot(plot);\n if (plot.plantId && plot.plantId !== \"\" && plot.plantName !== \"\") {\n setPlantExists(true);\n }\n });\n\n setRefreshSows(Date.now());\n }\n\n document.title = t('Action') + ' | Mobiwisu';\n\n return (\n \n \n \n \n
\n {buttonWriteShow && plantExists ?\n \n : ''}\n
{getSelectedYear()}
\n\n {p !== null ?\n
{p.name} - {p.apChar}
\n : ''}\n
\n {p !== null ?\n
{p.area}ha ({p.plantName})
\n : ''}\n \n
\n
\n
\n {/* Sections */}\n \n \n \n \n \n \n \n \n\n {/* Modals */}\n {sowModalShow === true ?\n setSowModalShow(false)}\n selectEvent={selectSowEvent}\n />\n : ''}\n {fertilizeModalShow === true ?\n setFertilizeModalShow(false)}\n selectEvent={selectFertilizingEvent}\n />\n : ''}\n {nutrientModalShow === true ?\n setNutrientModalShow(false)}\n selectEvent={selectFertilizingEvent}\n />\n : ''}\n {plotModificationModalShow === true ?\n setPlotModificationModalShow(false)}\n selectEvent={selectModificationEvent}\n />\n : ''}\n {plantProtectionModalShow === true ?\n setPlantProtectionModalShow(false)}\n selectEvent={selectPlantProtectionEvent}\n />\n : ''}\n {harvestModalShow === true ?\n setHarvestModalShow(false)}\n setRefresh={setRefreshHarvests}\n selectEvent={selectHarvestEvent}\n />\n : ''}\n {changePlantModalShow === true ?\n setChangePlantModalShow(false)}\n setRefresh={() => { refreshPlantChange(); }}\n selectEvent={{ time: Date.now(), selectedElement: null }}\n selectedPlot={p}\n />\n : ''}\n setMemoModalShow(false)}\n setRefresh={setRefreshMemos}\n baseplotid={p !== null ? p.number: 0}\n selectEvent={selectMemoEvent}\n />\n
\n );\n}\n\nexport default PlotOperation;","import { UserManager } from 'oidc-client';\nimport { removeSelectedFarmId, removeSelectedYear, removeSelectedPlot, getSelectedPage } from '../common';\nimport { postContentWithAction } from '../apiConnect';\n\nexport default class Auth {\n constructor(history, settingss) {\n this.history = history;\n this.user = undefined;\n this.cacheSettings = settingss;\n\n // identity settings from AuthController\n settingss.automaticSilentRenew = true;\n settingss.revokeAccessToken = true;\n settingss.filterProtocolClaims = true;\n\n this.userManager = new UserManager(settingss);\n\n // before expiring, event activate\n this.userManager.events.addAccessTokenExpiring(() => {\n this.login();\n });\n }\n\n login = () => {\n this.userManager\n .signinRedirect()\n .catch(function (error) {\n console.error('error while logging in', error);\n });\n };\n\n ClearHttContextSession = () => {\n // api -> Backend Session.Clear()\n if (this.user && this.user.access_token)\n postContentWithAction(this.user.access_token, 'session', 'delete', {}, () => {\n //console.log('session deleted');\n });\n };\n\n logout = () => {\n this.ClearHttContextSession(); \n\n // mobi selected settings\n removeSelectedFarmId();\n removeSelectedYear();\n removeSelectedPlot();\n\n // signout\n this.userManager.signoutRedirect().catch(function (error) {\n console.error('error while loggin out', error);\n });\n }\n\n handleAuthentication = (hash) => { \n new UserManager({ response_mode: \"query\" }).signinCallback().then((user) => {\n this.user = user;\n\n let page = getSelectedPage();\n\n //transfer to main pages.\n if ((page > 1) && (!this.cacheSettings || this.cacheSettings.debug_mode !== \"true\"))\n page = 1;\n\n if (page === 1)\n this.history.push('/plots');\n else if (page === 2)\n this.history.push('/plotOperation');\n else if (page === 3)\n this.history.push('/mapViewer');\n else\n this.history.push('/');\n\n }).catch((error) => {\n this.login();\n });\n }\n\n showForecasts = () => {\n if (this.cacheSettings.show_forecasts == \"true\") return true;\n return false;\n }\n\n getAccessToken = () => {\n return this.user.access_token;\n }\n\n isAuthenticated = () => {\n if (this.user) {\n\n if (this.user.expires_at && this.user.access_token) {\n\n if ((new Date().getTime() / 1000) < this.user.expires_at)\n return true;\n }\n }\n\n //else not logged\n this.ClearHttContextSession();\n return false;\n }\n}","import React, { Component } from 'react';\n\nclass Callback extends Component {\n\n componentDidMount() {\n\n //if (this.props.location.search.includes(\"login_required\")) {\n // this.props.auth.logout();\n // return;\n //}\n\n this.props.auth.handleAuthentication(this.props.location.hash);\n\n\n\n //if (/access|id_token|error/.test(this.props.location.hash)) {\n //if (/code|error/.test(this.props.location.hash)) {\n /*this.props.auth.handleAuthentication(this.props.location.hash);*/\n //}\n //else {\n // throw new Error(\"Invalid callback URL.\");\n //}\n }\n\n render() {\n return (\n <>Loading...\n );\n }\n}\n\nexport default Callback;","import axios from 'axios';\nimport { getSelectedFarmId, getSelectedYear, getSelectedPlot, getSelectedLang } from './common';\n\nexport async function getContent(content, data) {\n\n try {\n const response = await axios.get(content, {\n params: { farmId: getSelectedFarmId(), farmYear: getSelectedYear(), ...data },\n headers: {\n 'Authorization': `Bearer ${sessionStorage.getItem('access_token')}`\n }\n });\n return response.data;\n }\n catch (e) {\n console.log(e);\n return [];\n }\n}\n\n//export async function getContentWithAction(content, action, data) {\n\n// try {\n// const response = await axios.get(content + '/' + action, {\n// params: { farmId: getSelectedFarmId(), farmYear: getSelectedYear(), lang: getSelectedLang(), ...data },\n// headers: {\n// 'Authorization': `Bearer ${sessionStorage.getItem('access_token')}`\n// }\n// });\n\n// return response.data;\n// }\n// catch (e) {\n// return new Promise((resolve, reject) => {\n// console.log(e);\n// reject();\n// });\n// }\n//}\n\n//export async function getContentWithActionNoParams(content, action) {\n\n// try {\n// const response = await axios.get(content + '/' + action, {\n// headers: {\n// 'Authorization': `Bearer ${sessionStorage.getItem('access_token')}`\n// }\n// });\n\n// return response.data;\n// }\n// catch (e) {\n// console.log(e);\n// }\n//}\n\n//export async function getContentWithActionAndFarmId(content, action, data) {\n\n// try {\n// const response = await axios.get(content + '/' + action, {\n// params: { farmId: getSelectedFarmId(), lang: getSelectedLang() },\n// headers: {\n// 'Authorization': `Bearer ${sessionStorage.getItem('access_token')}`\n// }\n// });\n\n// return response.data;\n// }\n// catch (e) {\n// console.log(e);\n// }\n//}\n\n//export async function getContentWithActionAndPlantId(content, action, data) {\n\n// try {\n// const response = await axios.get(content + '/' + action, {\n// params: { plantId: getSelectedPlot().plantId, lang: getSelectedLang() },\n// headers: {\n// 'Authorization': `Bearer ${sessionStorage.getItem('access_token')}`\n// }\n// });\n\n// return response.data;\n// }\n// catch (e) {\n// console.log(e);\n// }\n//}\n\n//export async function postContentWithAction(content, action, data, callback = () => { }) {\n\n// try {\n// const response = await axios.post(content + '/' + action, { farmId: Number(getSelectedFarmId()), farmYear: getSelectedYear(), ...data }, {\n// headers: {\n// 'Authorization': `Bearer ${sessionStorage.getItem('access_token')}`\n// }\n// });\n\n// callback(response.data);\n// }\n// catch (e) {\n// return new Promise((resolve, reject) => {\n// console.log(e);\n// reject();\n// });\n// }\n//}\n\n//export async function putContentWithAction(content, action, data) {\n\n// try {\n// const response = await axios.put(content + '/' + action, { farmId: Number(getSelectedFarmId()), farmYear: getSelectedYear(), ...data }, {\n// headers: {\n// 'Authorization': `Bearer ${sessionStorage.getItem('access_token')}`\n// },\n// });\n\n// return response.data;\n// }\n// catch (e) {\n// console.log(e);\n// return new Promise((resolve, reject) => {\n// console.log(e);\n// reject();\n// });\n// }\n//}","import React, { useState, useEffect } from 'react'\nimport Button from 'react-bootstrap/Button';\nimport ProgressBar from 'react-bootstrap/ProgressBar'\nimport { ICONS } from '../../img/icons'\nimport Icon from '../../img/Icon'\n\nconst AlertTemplate = ({ style, options, message, close }) => {\n const [progress, setProgress] = useState(0);\n const [seconds, setSeconds] = useState(0);\n\n useEffect(() => {\n let interval = null;\n interval = setInterval(() => {\n setSeconds(seconds => seconds + 12);\n }, 100);\n return () => clearInterval(interval);\n }, [seconds]);\n\n useEffect(() => {\n let calculateProgress = (seconds / (options.timeout / 10)) * 100;\n setProgress(calculateProgress);\n }, [seconds]);\n\n return (\n <>\n {\n options.style === \"alternative\"\n ?
\n {/* */}\n
\n \n {options.type === 'info' && }\n {options.type === 'success' && }\n {options.type === 'error' && }\n {message}\n \n \n
\n\n
\n\n :
\n \n
\n \n {options.type === 'info' && }\n {options.type === 'success' && }\n {options.type === 'error' && }\n {message}\n \n \n
\n
\n }\n \n )\n}\n\nexport default AlertTemplate;","import React, { useState, useEffect } from 'react';\nimport { Route, Redirect } from 'react-router-dom';\nimport Spinner from 'react-bootstrap/Spinner';\nimport Farm from './components/Farm';\nimport TaskViewer from './components/TaskViewer/TaskViewer';\nimport FarmPlot from './components/FarmPlot';\nimport Map from './components/MapViewer';\nimport PlotOperation from './components/PlotOperation';\nimport Auth from './Auth/Auth';\nimport Callback from './Callback';\nimport i18n from './i18n';\nimport AppContext from './AppContext';\nimport { getContent } from './api';\nimport { getSelectedFarmId, getSelectedLang } from './common';\nimport { transitions, positions, Provider as AlertProvider } from 'react-alert'\nimport AlertTemplate from './components/Alerts/AlertTemplate'\n\nconst App = (props) => {\n const [geolocation, setGeolocation] = useState(null);\n const [mapInitCoordinates, setMapInitCoordinates] = useState({ coords: { longitude: 0, latitude: 0 } });\n const [selectedLanguage] = useState(getSelectedLang());\n const [auth, setAuth] = useState(null);\n\n useEffect(() => {\n i18n.changeLanguage(getSelectedLang());\n getContent('auth', {}).then((settings) => {\n setAuth(new Auth(props.history, settings));\n }).catch(c => { console.log(c); auth.login(); });\n\n }, [props.history]);\n\n const alertOptions = {\n position: positions.BOTTOM_CENTER,\n timeout: 7000,\n offset: '30px',\n /* zIndex: 1060, This doesn't work for some reason */\n transition: transitions.FADE\n }\n\n const context = {\n geolocation: geolocation,\n setGeolocation: setGeolocation,\n setMapInitCoordinates: setMapInitCoordinates,\n mapInitCoordinates: mapInitCoordinates,\n selectedLanguage: selectedLanguage,\n auth: auth\n }\n\n const spinnerStyle = {\n position: 'fixed',\n top: '50%',\n left: '50%',\n /* transform: translate(-50%, -50%); */\n zIndex: 1\n }\n\n return (\n <>\n \n {auth === null ?\n\n
\n \n Loading...\n
\n\n :\n \n auth.isAuthenticated() ? () : (auth.login())} />\n auth.isAuthenticated() ? (getSelectedFarmId() === 0 ? : ) : (auth.login())} />\n auth.isAuthenticated() ? (getSelectedFarmId() === 0 ? : ) : (auth.login())} />\n {/* auth.isAuthenticated() ? : auth.login()} />*/}\n auth.isAuthenticated() ? : auth.login()} />\n auth.isAuthenticated() ? : auth.login()} />\n } />\n \n }\n
\n \n );\n}\n\nexport default App;","// In production, we register a service worker to serve assets from local cache.\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 the \"N+1\" visit to a page, since previously\n// cached resources are updated in the background.\n\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\n// This link also includes instructions on opting out of this behavior.\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.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport default function register () {\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);\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/facebookincubator/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. Lets check if a service worker still exists or not.\n checkValidServiceWorker(swUrl);\n } else {\n // Is not local host. Just register service worker\n registerValidSW(swUrl);\n }\n });\n }\n}\n\nfunction registerValidSW (swUrl) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and\n // the fresh content will have been added to the cache.\n // It's the perfect time to display a \"New content is\n // available; please refresh.\" message in your web app.\n console.log('New content is available; please refresh.');\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 }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker (swUrl) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n if (\n response.status === 404 ||\n response.headers.get('content-type').indexOf('javascript') === -1\n ) {\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);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister () {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import './bootstrap.min.css';\nimport React, { Suspense } from 'react';\nimport ReactDOM from 'react-dom';\nimport { BrowserRouter, Route } from 'react-router-dom';\nimport App from './App';\n//import registerServiceWorker from './registerServiceWorker';\nimport { unregister } from './registerServiceWorker';\n\nimport './i18n';\n\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\nconst rootElement = document.getElementById('root');\n\nReactDOM.render(\n \n \n \n \n ,\n rootElement);\n\n//registerServiceWorker();\nunregister();"],"sourceRoot":""}