{"version":3,"sources":["providers/fetch.js","plugins/ra-language-portuguese-pt/index.js","providers/authProvider.js","Configuration.js","providers/dataProvider.js","i18n/en.js","providers/i18nProvider.js","i18n/pt.js","providers/dataFetch.js","containers/configuration/actions.js","containers/configuration/index.js","containers/profile/ProfileForm.js","containers/profile/ProfileShow.js","containers/profile/PasswordForm.js","containers/profile/index.js","plugins/leaflet-mobmeasure/leaflet-mobmeasure.js","plugins/leaflet-mobmeasure/index.js","plugins/leaflet-mobmeasure/MobMeasureControl.js","plugins/leaflet-extra-markers-improved/js/leaflet.extra-markers.min.js","components/map/PathPopup.js","components/map/PathLayer.js","plugins/react-leaflet-control-inesc/src/LeafletControl.js","plugins/react-leaflet-control-inesc/src/Control.js","components/map/CenterControl.js","components/map/LocationControl.js","components/annotations/map/Toolbar.js","components/annotations/map/StageOne.js","components/annotations/map/StageTwo.js","components/annotations/map/StageThree.js","components/annotations/ShowTime.js","components/annotations/Details.js","components/annotations/AnnotationControl.js","components/annotations/EditToolbar.js","components/button/DissociateButton.js","components/button/LinkButton.js","components/button/BuildButton.js","components/button/LinkButtonToResource.js","components/button/ShowRelatedButton.js","components/button/DownloadButton.js","components/button/customButton.js","components/relation/Relation.js","components/validators/index.js","components/relation/RelationShow.js","components/defaultActions/HistoryButton.js","components/defaultActions/DefaultCardActions.js","components/field/GeoCoordinatesField.js","components/field/ReferenceManyManyFieldController.js","components/field/ReferenceManyManyField.js","components/input/Picker/utils/luxon-utils.js","components/field/DateField.js","components/list/ResponsiveDatagrid.js","components/list/ResponsiveList.js","components/list/ResponsiveL.js","components/list/MobileDatagridCard.js","components/list/MobileDatagrid.js","components/input/GeoCoordinatesInput.js","components/input/InputAggregator.js","components/input/Picker/_shared/ModalDialog.jsx","components/input/Picker/constants/prop-types.js","components/input/Picker/_shared/MaskedInput.jsx","components/input/Picker/utils/MuiPickersUtilsProvider.jsx","components/input/Picker/_shared/WithUtils.jsx","components/input/Picker/_shared/DateTextField.jsx","components/input/Picker/wrappers/ModalWrapper.jsx","components/input/Picker/_helpers/date-utils.js","components/input/Picker/DatePicker/components/SlideTransition.jsx","components/input/Picker/DatePicker/components/CalendarHeader.jsx","components/input/Picker/DatePicker/components/Day.jsx","components/input/Picker/DatePicker/components/DayWrapper.jsx","components/input/Picker/DatePicker/components/Calendar.jsx","components/input/Picker/DatePicker/components/Year.jsx","components/input/Picker/DatePicker/components/YearSelection.jsx","components/input/Picker/_shared/PickerToolbar.jsx","components/input/Picker/_shared/ToolbarButton.jsx","components/input/Picker/DatePicker/DatePicker.jsx","components/input/Picker/_shared/BasePicker.jsx","components/input/Picker/DatePicker/DatePickerModal.jsx","components/input/Picker/wrappers/InlineWrapper.jsx","components/input/Picker/DatePicker/DatePickerInline.jsx","components/input/Picker/_helpers/time-utils.js","components/input/Picker/constants/clock-types.js","components/input/Picker/TimePicker/components/ClockPointer.jsx","components/input/Picker/TimePicker/components/Clock.jsx","components/input/Picker/TimePicker/components/ClockNumber.jsx","components/input/Picker/TimePicker/components/ClockNumbers.jsx","components/input/Picker/TimePicker/components/TimePickerView.jsx","components/input/Picker/TimePicker/TimePicker.jsx","components/input/Picker/TimePicker/TimePickerModal.jsx","components/input/Picker/TimePicker/TimePickerInline.jsx","components/input/Picker/DateTimePicker/components/DateTimePickerView.jsx","components/input/Picker/constants/date-picker-view.js","components/input/Picker/DateTimePicker/components/DateTimePickerTabs.jsx","components/input/Picker/DateTimePicker/components/DateTimePickerHeader.jsx","components/input/Picker/DateTimePicker/DateTimePicker.jsx","components/input/Picker/DateTimePicker/DateTimePickerModal.jsx","components/input/Picker/DateTimePicker/DateTimePickerInline.jsx","components/input/dateInput.js","components/layout/MenuItemExternalLink.js","components/localSearch/LocalSearch.js","components/edit/Edit.js","resources/annotations/CreateAnnotationsDialog.js","components/accordion/AccordionItem.js","components/accordion/Accordion.js","components/SimpleModal.js","components/parameters/Details.js","components/parameters/Control.js","components/parameters/Parameters.js","components/chart/index.js","components/annotations/DetailsShow.js","components/annotations/DetailsEdit.js","containers/derivedsets/actions.js","resources/derivedDatasets/annotations/AnnotationsDialog.js","resources/derivedDatasets/annotations/DialogFromMap.js","components/notes/ResettableTextField.js","components/notes/CustomSelectInput.js","components/notes/Details.js","components/notes/NoteControl.js","components/map/ContextLayersControl.js","components/map/Graticule.js","plugins/react-leaflet-kml/KML.js","plugins/react-leaflet-kml/index.js","components/map/LeafletMap.js","factory/index.js","containers/live/ClearMarkers.js","containers/live/actions.js","containers/live/LoadOldData.js","containers/live/OverviewControl.js","containers/live/index.js","plugins/leaflet-timeline/timeline-control.js","plugins/leaflet-timeline/timeline.js","plugins/leaflet-timeline/index.js","containers/history/CampaignListItem.js","containers/history/actions.js","containers/history/CampaignDialog.js","containers/history/CampaignControl.js","containers/history/index.js","components/map/TimeControlledMap.js","containers/datasets/map.js","containers/datasets/chart.js","components/button/CustomDeleteButton.js","components/Toolbar/CustomToolbar.js","containers/manual/localStorage.js","containers/manual/ManualInfo.js","containers/manual/ManualSubsection.js","containers/manual/actions.js","containers/manual/ManualSection.js","containers/manual/index.js","containers/equipment/EquipObs.js","containers/derivedsets/map.js","containers/derivedsets/chart.js","containers/searchObs/CustomSimpleForm.js","utils/util.js","containers/searchObs/SearchObsToolbar.js","containers/searchObs/index.js","routes.js","components/button/BackButton.js","CustomUserMenu.js","AppBar.js","utils/CustomTabbedShowLayoutTabs.js","resources/campaigns/LaunchesToolbar.js","resources/campaigns/LaunchOpenField.js","resources/campaigns/EquipmentActiveField.js","resources/campaigns/RelationNotes.js","resources/datasets/PublishButton.js","resources/datasets/Status.js","resources/datasets/ListDatasets.js","resources/campaigns/Satellites/params.js","resources/campaigns/Satellites/Chart.js","resources/campaigns/Satellites/Chart2.js","resources/campaigns/Satellites/icons/createSvgIcon.js","resources/campaigns/Satellites/icons/Calculate.js","resources/campaigns/Satellites/MediumButton.js","resources/campaigns/Satellites/Form/FormInput.js","resources/campaigns/Satellites/Form/CardContentInner.js","resources/campaigns/Satellites/Form/SimpleForm.js","resources/campaigns/Satellites/Options.js","resources/campaigns/Satellites/index.js","resources/campaigns/index.js","resources/datasets/index.js","resources/equipments/Confirm.js","resources/equipments/WAVYOcean.js","resources/equipments/ArgosId.js","resources/calibrations/Form/FormInput.js","resources/calibrations/Form/CardContentInner.js","resources/calibrations/Form/SimpleForm.js","resources/calibrations/CalibrationsTollbar.js","resources/calibrations/CalibrationField.js","resources/equipments/index.js","resources/institutions/index.js","resources/teams/index.js","resources/users/ChangePasswordDialog.js","resources/users/EditActions.js","resources/users/index.js","resources/overlays/index.js","resources/files/FilesShowContent.js","resources/files/Status.js","resources/files/index.js","resources/derivedDatasets/DeleteContentButton.js","resources/derivedDatasets/DeleteContentToolbar.js","resources/derivedDatasets/Status.js","resources/derivedDatasets/MultipleDeleteDerivesetObs.js","resources/annotations/AddAnnotationActionButton.js","resources/derivedDatasets/annotations/Button.js","resources/derivedDatasets/TagsField.js","resources/derivedDatasets/index.js","resources/equipment-types/index.js","resources/equipment-models/CustomSimpleForm.js","resources/equipment-models/actions.js","resources/equipment-models/TableFormIterator.js","resources/equipment-models/RelateThroughInput.js","resources/equipment-models/RefModelProp.js","resources/equipment-models/index.js","resources/observedProperties/index.js","resources/tags/index.js","resources/parameters/SelectEquipments.js","resources/parameters/FilterDependencies/MyFilterFormInput.js","resources/parameters/FilterDependencies/MyFilterForm.js","resources/parameters/FilterDependencies/FilterDerivedByEquipments.js","resources/parameters/Status.js","components/CustomDatagrid/DatagridHeaderCell.js","components/CustomDatagrid/DatagridBody.js","components/CustomDatagrid/Datagrid.js","resources/parameters/ListFileValues.js","resources/parameters/ListFiles.js","resources/parameters/layout/CardContentInner.js","resources/parameters/input/Labeled.js","resources/parameters/SimpleShowLayoutColumn.js","resources/parameters/Show/RunButton.js","providers/fetchFile.js","resources/parameters/ShowActionsClass.js","resources/parameters/index.js","resources/parameters/wavesIcon.js","SubMenu.js","Menu.js","Layout.js","containers/dashboard/Welcome.js","containers/dashboard/CardIcon.js","containers/dashboard/CampaignCount.js","containers/dashboard/LastCampaign.js","containers/dashboard/index.js","Login.js","resources/calibrations/index.js","resources/derivedDatasets/AddDerivedObservationDialogContent.js","resources/derivedDatasets/AddDerivedObservationDialog.js","resources/derivedDatasets/AddDerivedObservationButton.js","resources/observations/index.js","resources/launches/LaunchesToolbar.js","resources/launches/index.js","resources/notes/index.js","containers/configuration/reducers.js","containers/live/reducers.js","containers/history/reducers.js","containers/manual/reducer.js","containers/derivedsets/reducers.js","resources/equipment-models/reducers.js","sagas.js","App.js","index.js"],"names":["fetchJson","url","options","requestHeaders","headers","Headers","Accept","has","body","FormData","set","user","authenticated","token","fetch","then","response","text","status","statusText","json","JSON","parse","e","error","code","statusCode","detail","Promise","reject","HttpError","message","resolve","stringify","module","exports","ra","action","delete","show","list","save","create","edit","sort","cancel","undo","refresh","add","remove","add_filter","remove_filter","back","bulk_actions","boolean","true","false","page","dashboard","not_found","loading","input","file","upload_several","upload_single","image","references","all_missing","many_missing","single_missing","yes","no","are_you_sure","about","invalid_form","delete_title","delete_content","bulk_delete_title","bulk_delete_content","navigation","no_results","no_more_results","page_out_of_boundaries","page_out_from_end","page_out_from_begin","page_range_info","page_rows_per_page","next","prev","auth","username","password","sign_in","sign_in_error","logout","notification","updated","created","deleted","bad_item","item_doesnt_exist","http_error","data_provider_error","canceled","logged_out","validation","required","minLength","maxLength","minValue","maxValue","number","email","oneOf","regex","authProvider","loginApiUrl","noAccessPage","type","params","AUTH_LOGIN","request","Request","method","ttl","role","userId","data","Error","storage","AUTH_LOGOUT","AUTH_ERROR","AUTH_CHECK","load","id","redirectTo","AUTH_GET_PERMISSIONS","URL","URL_CATALOGUE","API_URL","WEBSOCKET_URL","AUTH_PROVIDER","WAVY_OCEAN_MODELS","dataProvider","restProvider","fetchUtils","resource","setTimeout","filter","Object","keys","forEach","key","charAt","substr","englishMessages","errors","SOMETHING","LOCALSTORAGE_FULL","ALREADY_EXISTS","AUTHORIZATION_REQUIRED","LOGIN_FAILED","INSTITUTION_MISSING","sockets","build_success","build_fail","wave_parameters_success","wave_parameters_fail","file_process_success","file_process_duplicated","file_process_fail","update_data","dates","not_defined","pos","search","configuration","language","name","pt","manual","servicedesk","theme","light","dark","update","submenu","datasets","equipment","campaign_count","last_campaign","welcome","title","subtitle","profile","profile_updated","profile_update_error","old_password","new_password","repeat_password","change_password","different_passwords","password_changed","general","add_referencing","remove_referencing","add_button","remove_button","select_all","unselect_all","map","catalogue","publish","re_publish","publish_failed","publish_success","delete_success","delete_failed","table","chart","open","closed","active","inactive","in_use","available","export","derived","to_dts","searchLabel","info","one_selectable","annotation","clicked","containers","annotations","modalTitle","modalEdit","begin","time","record","tags","description","end","choose","need_be_bigger","observations","tag_undefined","show_all","parameters","success","observationsNumber","timeLimit","timeUnit","maps","history","complete_interval","all_data","no_data","live","fields","beginTimestamp","endTimestamp","derivedsets","loadObsError","charts","unloadable","properties","altitude","battery","date","hdop","latitude","longitude","rarc","satellites","speed","timestamp","rssi","addSection","addSubSection","section","subsection","invalid_number","inputs","coordinates","invalid_latitude","invalid_longitude","INVALID_PASSWORD","CAMPAIGN_OPEN_LAUNCH","CAMPAIGN_NOT_FOUND","UNAUTHORIZED","USER_IS_SYSADMIN","USER_NOT_FOUND","LAUNCH_NOT_FOUND","BEGIN_TIMESTAMP_LATER","END_TIMESTAMP_EARLIER","BUILDING_ERROR","resources","campaigns","beginDate","area","zoom","hide","noEquipments","owner","tabs","details","launches","teams","overlays","notes","calculate_button","charts_color","begin_date","end_date","color0","color1","color2","chart1_xAxis_title","chart1_yAxis_avereage_title","chart1_yAxis_probability_title","chart1_avereageSeries_name","chart1_probabilitySeries_name","chart2_title","minimum_elevation","request_error","equipmentId","launchId","campaignId","numberObservations","copyNotification","copyButton","createDerivedset","buildJob","buildJobWarning","buildJobNotification","download_error","allObservations","state","serialNumber","equipmentModelId","import","identifier","color","removed_eq","dataset_published","recovery","button_label","confirm_button_label_activated","confirm_button_label_deactivated","confirm_button_label_activating","confirm_button_label_deactivating","confirm_text_active","confirm_text_deactivate","success_notification","failure_notification","agreement","failure","to_accept","accepted","calibrations","calibrationDate","validDate","sensorType","onEquipment","numVariables","polynomialDegree1","polynomialDegree2","diffValidationDate","sensor_1","sensor_2","none","formula","institutions","address","phoneNumber","acronym","users","direction","copying","button","csv_export","metadata_export","institutionId","isAdmin","observationIds","tagIds","messages","updateError","dateGt","dateLt","getDatesError","getAnnotations","createAnnotations","campaign","campaignGetError","autoPublish","equipmentAdded","buttons","terminate","terminateAll","build","opacity","filePath","layers","wms","kml","southWest","northEast","files","originalFilename","createdAt","position","uploadFile","duplicated","pending","error1","error2","error3","removed_noti","update_metadata","forms","tags_filter","delete_observations","delete_observations_confirm_title","delete_observations_confirm_description","delete_observations_confirm_notification","equipmenttypes","equipmentmodels","equipmenttypeId","observedProperty","visible","observedpropertyId","unitOfMeasurement","index","warning","removeProperty","index_lt1","duplicate_index","related_properties","observedProperties","titleCurated","calculate","download","fileError","i18n","portugueseMessages","locale","path","append","goCatch","resp","catch","changeTheme","payload","themes","languages","updateUserStorageAndSave","field","value","fetchEnd","fetchStart","settings","userStorage","changeInPersistence","UPDATE","finally","enhance","compose","connect","changeLocale","translate","withStyles","root","display","flexDirection","radioGroup","width","alignSelf","classes","className","Title","row","onChange","_","handleLanguageClick","element","control","label","handleThemeClick","ProfileForm","updateProfile","form","props","showNotification","updateStorage","changeEditSettings","this","defaultValue","TextInput","source","Component","SimpleShowLayout","TextField","PasswordForm","changePassword","localStorage","oldPassword","newPassword","Profile","disableForm","passwordForm","storageToState","setState","lbtoken","b","changePasswordState","edit_label","edit_icon","CardActions","onClick","L","MobMeasureControl","Control","extend","initialize","defaultOptions","formatOutput","output","lineColor","lineWeight","lineOpacity","innerHtml","Util","setOptions","onAdd","container","DomUtil","_createButton","azimuth","points","λ1","lng","λ2","φ1","lat","φ2","tmp","Math","sin","PI","cos","tan","B","atan","result","innerHTML","addEventListener","_toogleMeasure","DomEvent","disableClickPropagation","_measuring","addClass","_container","_startMeasure","removeClass","_stopMeasure","_oldCursor","_map","style","cursor","on","_mouseClick","_clear","off","latlng","_draw","_start","_end","marker","addTo","_path","Polyline","getLatLng","weight","smoothFactor","distance","distanceTo","_tooltip","_createTooltip","removeLayer","undefined","icon","divIcon","iconAnchor","tooltip","clickable","_icon","mobMeasureControl","context","leafletElement","MapControl","ExtraMarkers","version","Icon","iconSize","shadowSize","shadowAnchor","popupAnchor","prefix","extraClasses","shape","markerColor","svgBorderColor","svgOpacity","iconColor","svg","createIcon","div","document","createElement","_createInner","_setIconStyles","iconColorStyle","iconNumber","img","anchor","leafletName","size","point","divideBy","marginLeft","x","marginTop","y","height","createShadow","hiddenProperties","PathPopup","last","Popup","moment","utc","format","includes","prop","unit","PathLayer","layer","geometry","slice","reverse","LayerGroup","positions","Marker","length","wavy","_controlDiv","onRemove","createLeafletElement","LeafletControl","ReactDOM","createPortal","children","getContainer","CenterControl","centerMap","latlngs","eachLayer","getLatLngs","concat","fitBounds","background","fontSize","padding","minHeight","minWidth","LocationControl","geoId","updateMarker","coords","accuracy","setLatLng","Circle","setRadius","innerCircle","circle","fillOpacity","radius","pin","layerGroup","setView","LatLng","currentLocation","navigator","geolocation","clearWatch","watchPosition","enableHighAccuracy","backButton","marginBottom","float","backgroundColor","nextButton","nextStageControl","prestage","nextstage","overflow","paddingLeft","paddingRight","hour","beginTime","ShowTime","endTime","timeText","no_text","Details","handleSave","recordId","onClose","intervals","derivedsetId","dataFetch","err","reset","fullWidth","titleDiv","closeButton","handleCLick","times","LongTextInput","ReferenceArrayInput","reference","selected","Selection","basePath","SelectArrayInput","ChipField","content","justifyContent","marginRight","maxWidth","margin","resetFormAction","AnotationControl","modal_open","stage","nextStage","preStage","refreshData","bind","StageOne","StageTwo","StageThree","checkBox","valueOrDefault","Toolbar","handleSubmit","handleSubmitWithRedirect","invalid","pristine","redirect","saving","editing","submitOnEnter","refreshOnDelete","saveDisabled","rest","classnames","toolbar","mobileToolbar","desktopToolbar","Children","count","defaultToolbar","SaveButton","disabled","DeleteWithConfirmButton","deleteButton","isValidElement","React","cloneElement","spacer","defaultProps","withWidth","createStyles","palette","grey","spacing","bottom","left","right","boxSizing","flexShrink","zIndex","flex","breakpoints","down","DissociateButton","handleClick","dissociate","basePathId","refreshView","DELETE","console","hasIcon","LinkButton","to","variant","Link","BuildButton","relatedData","doRequest","Responsive","small","aria-label","medium","alignItems","labelRightIcon","smallIcon","mediumIcon","largeIcon","smart_count","shouldUpdate","nextProps","source_","isVisible","component","pathname","perPage","get","dataset","alignIcon","fileName","filename","Date","now","res","blob","saveAs","downloadFile","styles","Button","Relation","filterRelatedIds","memoize","allIds","reduce","acc","push","filterRelatedData","allData","filteredData","assign","relatedId","onChangeSearch","target","fetchAll","setSort","order","toggleItem","selectedIds","splice","indexOf","relateData","disabledSaveButton","referencePath","crudUpdateMany","setPage","setPerPage","currentSort","ids","newRelatedData","needUpdate","changeIdOnRequest","obj","updateDialogData","manyField","crudGetList","q","oldProps","pagination","listFilters","paginatedIds","Parent","indexArray","hasBulkActions","onToggleItem","onSelect","isLoading","values","total","fn","resourceState","admin","crudGetListAction","crudUpdateManyAction","RelationShow","isOpen","sanitizeProps","dialogContent","parentrecord","secondPress","secondLabel","openDialog","closeDialog","referenceName","rm_button","rm_icon","secondButton","getMessage","messageArgs","args","matchingPasswords","rewrite_password","lodashMemoize","exporter","goBack","DefaultCardActions","bulkActions","displayedFilters","filters","filterValues","onUnselectItems","permanentFilter","showFilter","hasExport","hasRefresh","hasCreate","createLabel","hasEdit","hasList","hasShow","hasHistory","removeListButton","CreateButton","EditButton","ListButton","ExportButton","RefreshButton","onlyUpdateForKeys","GeoCoordinatesField","addLabel","ReferenceManyManyFieldController","fetchRelated","keepUpdating","GET_LIST","include","referenceBasePath","replace","ReferenceManyManyFieldView","progress","ReferenceManyManyField","limit","controllerProps","EnhancedReferenceManyManyField","LuxonUtils","DateTime","fromFormat","dateTime12hFormat","dateTime24hFormat","time12hFormat","time24hFormat","dateFormat","current_timezone","local","toFormat","fromJSDate","toUTC","setZone","minus","days","abs","plus","isValid","comparing","hasSame","diff","toObject","years","startOf","endOf","setLocale","String","minute","second","year","setMinutes","setHours","getHours","getMinutes","months","Info","weekdaysFormat","weeks","Array","round","fill","i","day","v","start","_m","ampm","meridiems","find","toLowerCase","EnhancedDateField","locales","localDate","allowEmpty","cellClassName","formClassName","headerClassName","linkType","sortable","sortBy","textAlign","translateChoice","noFields","simpleText","util","luxon","dateUTC","dateLocal","displayName","ResponsiveDatagrid","actions","countOfChildren","child","ResponsiveList","bulkActionButtons","listActions","recordActions","List","card","MobileDatagridCard","handleToggle","event","stopPropagation","checked","cardActions","cardContent","FieldTitle","MobileDatagrid","handleSelectAll","idList","rowStyle","isSelected","it","rowIndex","cardTitleContent","validateLatitude","floatValue","parseFloat","validateLongitude","fieldClassName","hasLabel","NumberInput","validate","InputAggregator","dialogRoot","dialog","dialogRoot_or","dialog_or","dialogActions","clearableDialogAction","todayDialogAction","dialogAction","ModalDialog","onKeyDown","onAccept","onDismiss","onClear","onSetToday","okLabel","cancelLabel","clearLabel","todayLabel","dialogContentClassName","clearable","showTodayButton","seconds","other","paper","PropTypes","oneOfType","object","string","instanceOf","Input","inputRef","mask","ref","PureComponent","createContext","Consumer","Provider","MuiPickersContextConsumer","MuiPickersUtilsProvider","utils","changeUtcState","isUTC","selectTimezone","Utils","timeZone","dateTimeFormat","timeFormat","WithUtils","withUtils","getDisplayDate","invalidLabel","emptyLabel","labelFunc","isEmpty","getError","maxDate","minDate","disablePast","disableFuture","maxDateMessage","minDateMessage","invalidDateMessage","isAfter","endOfDay","isBefore","startOfDay","isNull","DateTextField","updateState","commitUpdates","onError","oldValue","newValue","displayValue","isEqual","handleBlur","keyboard","preventDefault","onBlur","handleChange","onInputChange","parsedValue","getFormattedDate","handleFocus","openPicker","handleKeyPress","disableOpenOnEnter","handleUTCChange","prevProps","adornmentPosition","InputAdornmentProps","InputProps","keyboardIcon","pipe","TextFieldComponent","localInputProps","inputComponent","MaskedInput","inputProps","readOnly","helperText","onKeyPress","ModalWrapper","handleKeyDown","keycode","handleAccept","handleSetTodayDate","onOpen","close","handleDismiss","handleClear","DialogProps","isAccepted","SlideTransition","transKey","slideDirection","transitionContainer","childFactory","classNames","enter","enterActive","slideEnterActive","exit","slideExit","exitActive","mountOnEnter","unmountOnExit","timeout","slideTransition","transitions","duration","easing","top","willChange","transform","transition","CalendarHeader","currentMonth","onMonthChange","leftArrowIcon","rightArrowIcon","disablePrevMonth","disableNextMonth","rtl","switchHeader","getPreviousMonth","iconButton","toString","align","getCalendarHeaderText","getNextMonth","daysHeader","getWeekdays","dayLabel","maxHeight","hint","withTheme","Day","hidden","current","tabIndex","typography","caption","primary","fontWeight","fontWeightMedium","pointerEvents","main","common","white","DayWrapper","dayInCurrentMonth","Calendar","getStartOfMonth","onDateSelect","isFinish","mergeDateAndTime","handleChangeMonth","newMonth","validateMinMaxDate","isBeforeDay","isAfterDay","shouldDisablePrevMonth","shouldDisableNextMonth","shouldDisableDate","moveToDay","addDays","renderWeeks","getWeekArray","week","renderDays","renderDay","selectedDate","currentMonthNumber","getMonth","dayComponent","isSameDay","getDayText","today","forward","backward","findClosestEnabledDate","allowKeyboardControl","autoFocus","lastDate","Year","outline","YearSelection","selectedYearRef","getSelectedYearRef","scrollToCurrentYear","animateYearScrolling","currentYearElement","findDOMNode","scrollIntoView","behavior","componentDidMount","onYearSelect","setYear","currentYear","getYear","getYearRange","yearNumber","getYearText","isBeforeYear","isAfterYear","overflowY","PickerToolbar","default","ToolbarButton","toolbarBtn","toolbarBtnSelected","DatePicker","showYearSelection","openToYearSelection","handleYearSelect","openCalendar","openYearSelection","getDatePickerHeaderText","getInitialDate","initialFocusedDate","initialDate","BasePicker","changeDate","callback","handleAcceptedChange","handleTextFieldChange","pickFormat","defaultFormat","newDate","autoOk","DatePickerModal","forwardedRef","forwardRef","InlineWrapper","anchorEl","currentTarget","PopoverProps","onlyCalendar","Boolean","popoverPaper","anchorOrigin","vertical","horizontal","transformOrigin","paddingBottom","DatePickerInline","ComponentToShow","innerRef","center","cx","cy","getAngleValue","step","offsetX","offsetY","atan2","deg","floor","delta","pow","sqrt","convertToMeridiem","meridiem","hours","HOURS","ClockPointer","toAnimateTransform","previousType","getAngleStyle","isInner","angle","clockType","hasSelected","pointer","animateTransform","thumb","noPoint","getDerivedStateFromProps","borderRadius","border","Clock","handleTouchMove","isMoving","setTime","handleTouchEnd","handleMove","nativeEvent","which","handleMouseUp","rect","getBoundingClientRect","changedTouches","clientX","clientY","isPointerInner","clock","squareMask","onTouchMove","onTouchEnd","onMouseUp","onMouseMove","touchActions","userSelect","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","ClockNumber","getTransformStyle","clockNumber","getHourNumbers","currentHours","hourNumbers","endHour","formatNumber","getMinutesNumbers","f","TimePickerView","getViewProps","handleHourChange","minutesValue","handleMinutesChange","secondsValue","getSeconds","handleSecondsChange","updatedTime","onHourChange","minutes","onMinutesChange","setSeconds","onSecondsChange","viewProps","TimePicker","openView","meridiemMode","setMeridiemMode","mode","openMinutes","openSeconds","withMeridiem","openMinutesView","openSecondsView","openHourView","hourMinuteClassName","hourMinuteLabelReverse","hourMinuteLabel","toolbarLeftPadding","getHourText","separator","getMinuteText","getSecondText","ampmSelectionWithSeconds","ampmSelection","ampmLabel","getMeridiemText","TimePickerModal","TimePickerInline","view","DATE","HOUR","viewToTabIndex","viewType","dateRangeIcon","timeIcon","indicatorColor","DateTimePickerHeader","onOpenViewChange","changeOpenView","dateHeader","getDateTimePickerHeaderText","timeHeader","DateTimePicker","openTo","nextView","autoSubmit","handleViewChange","handleYearChange","handleDayChange","showTabs","ViewContainerComponent","ViewContainerComponentProps","viewContainer","DateTimePickerModal","dialogContent_or","EnhancedWrapper","DateTimePickerInline","makePicker","PickerComponent","_makePicker","month","dateNow","isRequired","meta","providerOptions","touched","node","picker","labelTime","DateInput","addField","DateTimeInput","MenuItemExternalLink","handleMenuTap","window","location","href","primaryText","leftIcon","staticContext","titleAccess","secondary","LocalSearch","filterIdsByFilter","word","toUpperCase","originalIndexArray","news","placeholder","Edit","ReactAdminEdit","undoable","CreateAnnotationsDialog","setListSelectedIds","insertedAnnotations","time_record","obs","resetForm","crudCreate","crudCreateAction","refreshViewAction","setListSelectedIdsAction","showNotificationAction","TagsIterator","tag","AccordionItem","editOpen","handleOpen","handleEditOpen","divider","in","split","annotationText","SimpleModal","footer","onEntering","scroll","ParametersControl","Parameters","am4core","minPolylineStep","queue","onlyShowOnViewport","ReactChart","annotationTimes","onCloseAnnotationDetail","annotationDetail","rerenderParentCallback","zoomChanged","loaded","beginTimeShowAnnotation","endTimeShowAnnotation","descriptionShowAnnotation","tagsShowAnnotation","allowAnnotations","allowParameters","annotationFirstClick","annotationDatevalue","bT","eT","series","am4charts","dataFields","valueY","dateX","strokeWidth","prop_name","tooltipText","legendSettings","valueText","itemValueText","ev","xAxes","minZoomed","maxZoomed","xError","show_properties","seriesColumn","dataItem","dataContext","isNaN","apply","yMax","max","yMin","min","yError","yAxes","annotationBar","endDate","grid","bulletText","axisFill","bullet","horizontalCenter","dx","substring","draggable","events","annotationsEnabled","colors","dateAxis","renderer","template","tooltipDateFormat","minGridDistance","labels","dy","scrollbarX","legend","itemContainers","paddingTop","togglable","plotContainer","clickOnChart","xValue","_upPointOrig","yValue","maxRight","maxBottom","xAxis","getIndex","annotationDate","positionToDate","toAxisPosition","xPosition","getTime","addAnnotationsHandler","dispose","allowToAddAnnotations","allowToAddParameters","parametersEnabled","createAxisAndSeries","_values","axisRanges","annotationsHandler","createMuiTheme","overrides","MuiTableCell","sanitizeRestProps","crudDelete","openEdit","DetailsShow","interval","tag_root","tag_label","single","EditToolbar","fontFamily","pxToRem","getContrastText","whiteSpace","textDecoration","cell","cell2","anyTouched","array","asyncBlurFields","asyncValidate","asyncValidating","autofill","blur","change","clearAsyncError","clearFields","clearSubmit","clearSubmitErrors","destroy","dirty","dispatch","initialized","initialValues","pure","resetSection","submit","submitFailed","submitSucceeded","submitting","touch","triggerSubmit","untouch","valid","DetailsEdit","changed","_beginDate","_endDate","handleChangeSelection","handleChangeDescription","handleChangeDates","errorBegin","errorEnd","multiSelect","all","REDUX_FORM_NAME","getDefaultValues","reduxForm","refreshAnnotations","AnnotationDialog","openAnnotationShow","openAnnotationEdit","lastAnnotationPressed","openByTag","modalClose","annotationIds","componentDidUpdate","modalOpen","tagAnnotationDialog","inserted_annotations","annotationIdDialog","pressAnnotation","annotationsAction","_openByTag","annotationId","parseInt","onCloseAnnotationShow","onCloseAnnotationEdit","note","inline","actionButton","toMap","closedModal","AnnotationsDialog","clearIcon","visibleClearIcon","clearButton","visibleClearButton","ResettableTextField","showClear","handleClickClearButton","handleMouseDownClearButton","onFocus","clearAlwaysVisible","resettable","restClasses","endAdornment","disableRipple","onMouseDown","SelectInput","eventOrValue","addAllowEmpty","choices","emptyValue","renderMenuItemOption","choice","optionText","choiceName","renderMenuItem","optionValue","disableValue","select","crudGetMatching","crudGetOne","filterToQuery","initializeForm","setFilter","setPagination","valueDefault","relation","scope","where","multiline","rows","NodeControl","ContextLayersControl","feature","multiLine","bringToFront","bringToBack","sendCtrlLayer","LayersControl","Graticule","updateVariables","showLabel","font","fontColor","dashArray","zoomInterval","canvas","currZoom","currLatInterval","currLngInterval","Layer","initCanvas","_panes","overlayPane","appendChild","parentNode","removeChild","addLayer","fromProps","toProps","classList","onSelectStart","onLoad","onCanvasLoad","fire","getSize","lt","containerPointToLayerPoint","_leaflet_pos","calcInterval","draw","getZoom","idx","dict","ctx","getContext","clearRect","lineWidth","strokeStyle","fillStyle","setLineDash","containerPointToLatLng","rb","pointPerLat","pointPerLon","drawLatitudeLine","drawLongitudeLine","tick","lngLeft","lngRight","leftEnd","latLngToCanvasPoint","str","formatLatitude","txtWidth","measureText","rightEnd","beginPath","moveTo","lineTo","stroke","yBaseline","txtHeight","fillText","latTop","latBottom","bottomEnd","formatLongitude","topEnd","latLng","projectedPoint","project","_subtract","getPixelOrigin","_add","_getMapPanePos","MapLayer","KML","FeatureGroup","async","_kml","_layers","addKML","loadXML","cb","req","XMLHttpRequest","withCredentials","XDomainRequest","xdr","onprogress","ontimeout","onerror","onload","responseText","xml","ActiveXObject","send","setRequestHeader","overrideMimeType","onreadystatechange","readyState","responseXML","_this","_addKML","parseKML","latLngs","parseStyles","parseStyleMap","l","el","getElementsByTagName","_check_folder","parseFolder","j","parsePlacemark","k","parseGroundOverlay","folder","tagName","sl","len","parseStyle","poptions","ioptions","attributes","hotSpot","_parse","childNodes","nodeValue","fillColor","KMLIcon","iconUrl","shadowUrl","anchorRef","anchorType","xunits","yunits","getAttribute","existingStyles","smKey","smStyleUrl","textContent","place","h","opts","a","inlineStyle","multi","descr","bindPopup","parseCoords","_read_coords","parseLineString","line","parseTrack","_read_gxcoords","parsePoint","ll","KMLMarker","parsePolygon","polys","inner","Polygon","MultiPolygon","firstChild","latlonbox","bounds","LatLngBounds","rotation","RotatedImageOverlay","prototype","Default","ImageOverlay","_reset","call","_rotate","_animateZoom","TRANSFORM","_image","Browser","ie","rad","costheta","sintheta","getBounds","_bounds","KMLControl","track","BaseLayer","Overlay","LeafletMap","resetAnnotationTag","setAnnotationTag","tagId","openAnnotation","closeAnnotation","openPopupMarker","refs","openPopup","viewport","campaignOverlays","mobmeasureOptions","toFixed","ReactDOMServer","renderToStaticMarkup","Map","googlekey","maptype","maxNativeZoom","maxZoom","minZoom","bingkey","TileLayer","attribution","campaignOverlay","remote","overlayType","WMSTileLayer","transparent","ScaleControl","AnnotationControl","NoteControl","toWavyGeojson","observation","ObservationToFeature","toWavyGeojsonOld","latest","wavys","modelId","observedproperty","toObservationData","features","datasetId","toObservationDataSingleWAVY","unix","annotationsGeoJSON","tagsGeoJSON","multiLineId","o","clearData","loadOldData","OverviewControl","wavysTimer","intervalId","buildPropertiesString","join","timerUpdate","setInterval","elements","sec","st","press","clearInterval","liveData","Live","last_transmission","socket","getObservedProperties","equipmentmodelId","filter_old","and","gt","neq","old","modelIds","rto","filter_equipment","inq","equip","model","Set","filter_observedProperty","promises","onState","filter_lastPos","obsRequest","shift","last_transmission_to_add","oldLiveData","io","transports","emit","room","newLiveData","disconnect","newLiveDataAction","oldLiveDataAction","TimelineSliderControl","timeline","enablePlayButton","enableStepButtons","showTicks","speeds","speedsUnity","getIntervalValues","stepSize","speedUnityTime","speedTime","getTimelineTime","_createDOM","sliderCtrlC","buttonContainer","_makeButtons","_makeOutput","_makeSlider","_buildDataList","_buildLegend","_legend","_makeButton","_makeSpeedButton","slider","_timeSlider","_sliderChanged","_disableMapDragging","_enableMapDragging","_output","_datalist","idNum","random","setAttribute","_rebuildDataList","datalist","datalistSelect","steps","dragging","disable","enable","updateDisplayedLayers","_nearestStep","lastTime","pause","prevTime","play","fromSynced","clearTimeout","_timer","miliseconds","_playing","syncedControl","nextTime","timelineSliderControl","Timeline","GeoJSON","geojson","controlLayers","layersKeys","_getInterval","circleMarker","_buildLayers","geojson2","convertPointTrace","exists","to_delete","to_add","addData","_leaflet_id","addOverlay","currentTime","geometries","_buildMarker","getLayers","markerPopup","setPopupContent","mrk","nl","CircleMarker","MultiPoint","coordinate","popupNode","render","pointId","setLatLngs","metadata","polyline","multilineCoordinates","multiLineIds","multiPoint","TimelineControl","geoJSON","ctrlLayer","timelineOptions","TimeControl","timecontrolOptions","newProps","clearLayers","CampaignItemList","getObservations","launch","getOverlays","getModelProperties","datasetIds","equipmentModelIds","item","getData","fetchObservations","selectCampaign","storeOverlays","handleCollapseListItemClick","handleAllDataClick","handleListItemClick","fetchedObservations","fetchObservationsAction","storeOverlaysAction","selectCampaignAction","CampaignDialog","handleEntering","CampaignListItem","CampaignControl","selectedValue","handleClickOpen","handleClose","History","controlLayer","activeCampaign","timelineControlOptions","popup","selectedCampaign","TimeControlledMap","geodata","DatasetMap","datasetData","processData","match","crudGetOneAction","flexColumn","leftCol","singleCol","ChartsContainer","chartData","annotationsArray","setAnnotationsOnOff","forceUpdate","invisible_props","unshift","CustomDeleteButton","log","CustomToolbar","toDelete","componentWillUnmount","toUnmount","saveB","toDeleteButton","fade","getObj","getItem","setItem","check","getTitles","changeState","objs","updatedAt","newManual","checkManual","editObj","closeModal","manualSub","createObj","removeObj","TOKEN","ManualInfo","isEditing","manualEntry","txt","updateObj","new_text","modules","handlers","imageHandler","click","onchange","formData","range","quill","getSelection","insertEmbed","origin","setSelection","deleteText","permissions","ManualSubsection","subsectionOpen","handleEditClick","onEdit","closeManualModals","ManualSection","editingSubsection","resetFields","deleteSubsection","filterData","manualKey","handleAddSubsection","openSubSectionModal","deleteOff","goEditSubsection","subSectionModalOpen","subsections","filteredSubsections","closeManualModalsAction","subSectionId","subSection","Manual","editingSection","deleteSection","handleAddClick","openSectionModal","sections","lang","startCheck","newState","goEditSection","sectionModalOpen","filteredSections","WithPermissions","defaultTitle","sectionId","EquipObs","fetchObservedProperties","observedPropertiesQuery","equipmentmodel","observedproperties","relatedDatasets","crudGetManyReference","nameRelatedTo","relDtsQuery","or","showTime","property","equipDtsRelLoc","oneToMany","crudGetManyReferenceAction","DerivedSetMap","derivedsetData","geoObservations","observationsLoaded","annotationsLoaded","originalObservations","loadData","_observations","geoData","derivedset","obs_object","derivedId","obs_filter","SimpleForm","formContentClassName","destroyOnUnmount","enableReinitialize","keepDirtyOnReinitialize","hexToRgb","hex","m","r","g","exec","maxResults","records","fetchRelatedRecords","removeProperties","downloadCSV","convertToCSV","SearchObservations","getEquipmentProperties","dt","offset","fetchRecords","fetchObsProps","validateFields","fieldChanged","formContent","SearchObsToolbar","ReferenceInput","setDirty","inputMargin","Pagination","Route","exact","DatasetChart","DerivedSetChart","Configuration","SearchObs","withRouter","goback","CustomUserMenu","UserMenu","MenuItemLink","AppBar","toggleSidebar","userMenu","Headroom","disableGutters","menuButton","menuButtonIconOpen","menuButtonIconClosed","LoadingIndicator","toggleSidebarAction","sharp","leavingScreen","textOverflow","TabbedShowLayoutTabs","tab","tabPath","baseUrl","getTabFullPath","LaunchesToolbar","onTerminateAllLaunchClick","LaunchOpenField","onTerminateLaunchClick","colorPrimary","terminated","PublishButton","link","published","publishId","deleteState","externalLink","handlePublish","handleClickListItem","base","option","ConfirmDialog","handleBuild","datasetName","onConfirm","Status","handleAction","DatasetIcon","tableVisible","ListDatasets","equipmentC","campaignC","ReferenceField","ReferenceFieldController","referenceRecord","host","default_alt","default_aditional_date","font_size_mobile","font_size_desktop","chart1_color","chart1_color_prob","chart2_color","Chart","am4themes_animated","responsive","enabled","skipEmptyPeriods","periodChangeDateFormats","setKey","dateFormats","valueAxis","cursorTooltipEnabled","valueAxis2","opposite","dataItems","locations","columns","tooltipPosition","series2","yAxis","pointerOrientation","lineY","Chart2","titles","categoryAxis","category","inversed","categoryY","valueX","strokeOpacity","column","cornerRadiusBottomRight","cornerRadiusTopRight","labelBullet","bullets","sortBySeries","min_cor","createSvgIcon","muiName","d","FormInput","Options","start_date","alt","handleCalculate","fetchData","handleDateInputChange","after","before","getFullYear","getDate","handleMapOnClick","param","handleMapOnDrag","_latlng","handleZoom","_zoom","handleUpdate","user_color","Calculate","onZoomEnd","detailsMap","onDragend","up","SatelliteCover","total_days","data_tmp","final_data","final","interval_object","probability","avg","minutes_without_data","total_satellites","toJSDate","date_st","parseSatellites","parsed","MAX_DEGREE","middle","middleElevation","mid_duration","degreeByTime","ascend","count_seconds","begin_hour","end_hour","now_2","mod","start_prob","end_prob","countSatellites","CampaignIcon","BoatIcon","listStyles","flexible","detailsData","warningEquipments","clip","CampaignFilter","SearchInput","alwaysOn","NullableBooleanInput","CampaignList","ShowButton","BooleanField","CampaignActions","EquipmentWarning","CustomCampaignDetails","_NoteTagField","NoteTagField","TextFieldLimitedSize","ReferenceCAA","_public","public","permLink","rel","EquipmentLaunchWarning","CampaignShowComp","selectOne","selectAll","deleteMultiple","deleteMultipleNotes","crudDeleteMany","Show","TabbedShowLayout","scrollable","scrollButtons","ReferenceManyField","Delete","EquipmentActiveField","CampaignShow","crudDeleteManyAction","CampaignEditContent","changeForm","handleDrag","areaPoint","CustomCampaignForm","userRole","GeoCoordinatesInput","BooleanInput","ownerId","AutocompleteInput","CampaignCreateContent","changeAction","CampaignEdit","CampaignCreate","DatasetFilter","TableButton","src","_DatasetList","listen","stopListen","ResponsiveL","DatasetList","Confirm","handleConfirm","confirm","confirmColor","translateOptions","aria-labelledby","contentText","iconPaddingStyle","confirmWarning","confirmPrimary","WAVYOcean","handleDialogClose","buttonLabel","sufix","locked","cmdTo","save_agreement","getAgreement","recoveryMode","getOceanModel","c_title","c_content","LinearProgress","CalibrationTollbar","Decimal","toExpNeg","EquipmentIcon","EquipmentFilter","EquipmentList","DownloadFileButton","_EquipmentShow","_value","DeleteButton","CalibrationField","EquipmentShow","enhanceShow","_EquipmentEdit","equipmentModel","ArgosId","EquipmentEdit","EquipmentCreate","InstitutionIcon","InstitutionFilter","InstitutionList","UrlField","InstitutionShow","InstitutionEdit","InstitutionCreate","TeamIcon","TeamFilter","TeamList","editStyles","TeamEdit","TeamCreate","TeamShow","ChangePasswordDialog","validatePasswords","resourceId","destroyForm","EditActions","UserIcon","UserFilter","UserList","RoleInput","adminRoles","UserEdit","UserCreate","RoleField","UserShow","OverlayIcon","OverlayFilter","OverlaysList","OverlaysSimpleForm","isImage","submitUrl","overlay","submitFile","rawFile","ImageInput","accept","onDropAccepted","ImageField","OverlaysCreate","CustomImageField","recordComplete","OverlaysActions","OverlaysShow","ShowController","OverlayEdit","EditController","FilesShowContent","comments","ContentButton","pop","FilesFilter","_FilesList","insideRoom","FilesList","FileSimpleForm","FileInput","FileField","FileCreate","FilesShow","DeleteContentButton","derived_id","rightButton","MultipleDeleteDerivesetObs","AddAnnotationActionButton","AnnnotationsButton","TagsField","t","DerivedDatasetIcon","listStyles_DerivedDtsShow","content2","listStyles_DerivedDatagrid","DerivedDatagrid","MapButton","ChartButton","DerivedFilter","DerivedDtsList","DerivedDtsCreate","DerivedDtsEdit","MenuProps","PaperProps","ITEM_HEIGHT","_DerivedActions","curated","toLocaleLowerCase","downloadEnabled","tags_selected","handleTagsChange","formControl","htmlFor","multiple","fontWeightRegular","DerivedActions","flexWrap","chips","chip","prop_order","remove_props","default_props","to_mount","OldProps","p","BulkActionsToolbar","ConnectedDerivedDatagrid","DerivedDtsShow_tmp","filter_tag","eq_regex","DerivedDtsShow","EquipmentTypeList","EquipmentTypeCreate","EquipmentTypeEdit","EquipmentTypeShow","CustomSimpleForm","saveProperty","CREATE","deleteProperty","editProperties","oldProperties","newProperties","addProperties","oldprop","newprop","editaction","operations","relatedproperties","deletePromises","createPromises","createaction","CRUD_CREATE","onSuccess","onFailure","level","previousData","CRUD_UPDATE","TableFormIterator","renderFirstRow","firstRow","frCell","renderContent","propertyLoc","contentRow","onRowRemove","getAll","CustomRefFieldCon","RelateThroughInput","relatedProperties","updateProperties","arrayInsert","saveRelatedProperties","selectedModelId","arrayPush","arrayRemove","firstRowFields","NumberField","ArrayInput","updateRelatedPropertiesAction","RefModelProp","createFormValidation","currentIndexes","EquipmentModelList","EquipmentModelCreate","EquipmentModelEdit","CustomRefField","EquipmentModelShow","ObservedPropertiesList","ObservedPropertiesCreate","ObservedPropertiesEdit","ObservedPropertiesShow","TagIcon","LabelIcon","TagFilter","TagList","TagShow","TagEdit","TagCreate","emptyRecord","filterElement","handleHide","data-source","data-key","Field","FilterForm","hideFilter","siga","setFilters","getShownFilters","clearFix","primary1Color","clear","withProps","lodashSet","Filter","FilterButton","toArray","sanitizeListRestProps","MyFilterForm","renderButton","renderForm","numeric","DatagridBody","expand","rowEven","rowOdd","DatagridRow","Datagrid","thead","headerRow","expandHeader","headerCell","tbody","tableLayout","checkbox","clickableRow","rowCell","expandIconCell","expandIcon","shortest","expanded","ListFileValues","ListFiles","newrow","only","verticalAlign","restProps","shrink","SimpleShowLayoutColumn","numberColumns","gridTemplateColumns","repeat","gridGap","checkElement","checkElementSecondRow","CalculateContentButton","EditActionsClass","ParameterEditView","ShowActionsClass","csvDisabled","exportCSV","fetchFile","RunButton","ParametersEdit","arrayFormat","enhanceCreateEdit","ParametersIcon","statusDontShow","ParametersShow","ParametersFilter","FilterDerivedByEquipments","SelectEquipments","ParametersList","equipments","parameter","listItem","listItemText","sidebarIsOpen","sidebarIsClosed","dense","inset","disablePadding","MenuEntry","onMenuClick","submenuAccess","subType","isArray","routes","Menu","menu","items","access","menu_datasets","menu_equipment","DashboardMenuItem","ui","sidebarOpen","getTheme","defaultThemeCopy","defaultTheme","contrastText","CustomSidebar","Sidebar","CustomLayout","appFrame","Layout","appBar","sidebar","media","bgColor","DateIcon","rightCol","Dashboard","campaignCount","recentCampaign","setData","crudGetAll","xsmall","crudGetAllAction","renderInput","Login","login","userLogin","nextPathname","avatar","onSubmit","thickness","Notification","CalibationsActions","choices2","_headers","FormDataConsumer","CalibrationsCreateView","CalibrationsShowView","CalibrationsCreate","CalibrationsShow","AddObservationDialogContent","selectedDerived","addObsToDerivedDts","selectedObsIds","derivedObs","derivedDtsIds","derivedDts","AddDerivedObservationDialog","AddDerivedObservationButton","ObservationsBulkActions","_ObservationsActions","copy_dataset","ObservationsActions","ObservationListController","has_data","_counts","ObservationShow","Accordion","ObservationList","validateCreate","validateEdit","LaunchActions","LaunchesCreateView","LaunchesEditView","ShowActions","LaunchesShowView","requests","enhanceLaunchesShow","LaunchesShow","LaunchesCreate","LaunchesEdit","NotesEditView","NotesShowView","NotesEdit","NoteShow","loadThemeFromLocalstorage","previousState","findIndex","copy","defaultState","setSettings","updateAnnotations","watchLoginSuccess","userSettings","put","takeEvery","USER_LOGIN_SUCCESS","App","Admin","customReducers","themeReducer","liveReducer","manualReducer","relatedPropertiesReducer","annotationsReducer","customRoutes","customSagas","sagas","loginPage","appLayout","getLocale","i18nProvider","Resource","Resources","getElementById"],"mappings":"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P,GACnBnxB,oBACA76D,YAAaisF,IAEfC,aAAcA,GACdC,YAAa,CAACC,IACdr3F,UAAWoyF,GACXkF,UAAW1E,GACX2E,UAAW1F,GACXv5E,OAAQkD,KAAKg8E,YACbC,aAAcA,EACdh0F,aAAcA,EAAa0B,IAI3B,kBAACuyF,EAAA,EAAD,CACElwF,KAAK,eACL1I,KAAM64F,GACN94F,KAAM84F,GACN34F,OAAQ24F,GACR14F,KAAM04F,KAGR,kBAACD,EAAA,EAAD,CACElwF,KAAK,QACL1I,KAAM64F,GACN94F,KAAM84F,GACN34F,OAAQ24F,GACR14F,KAAM04F,KAGR,kBAACD,EAAA,EAAD,CACElwF,KAAK,YACL1I,KAAM64F,GACN94F,KAAM84F,GACN34F,OAAQ24F,GACR14F,KAAM04F,KAGR,kBAACD,EAAA,EAAD,CACElwF,KAAK,WACLxI,OAAQ24F,GACR14F,KAAM04F,GACN94F,KAAM84F,KAGR,kBAACD,EAAA,EAAD,CACElwF,KAAK,QACL1I,KAAM64F,GACN94F,KAAM84F,GACN34F,OAAQ24F,GACR14F,KAAM04F,KAGR,kBAACD,EAAA,EAAD,CACElwF,KAAK,WACL1I,KAAM64F,KAGR,kBAACD,EAAA,EAAD,CACElwF,KAAK,YACL1I,KAAM64F,GACN94F,KAAM84F,GACN34F,OAAQ24F,GACR14F,KAAM04F,KAGR,kBAACD,EAAA,EAAD,CACElwF,KAAK,eACLxI,OAAQ24F,GACR94F,KAAM84F,KAGR,kBAACD,EAAA,EAAD,CACElwF,KAAK,kBACL1I,KAAM64F,GACN34F,OAAQ24F,GACR14F,KAAM04F,GACN94F,KAAM84F,KAGR,kBAACD,EAAA,EAAD,CACElwF,KAAK,iBACL1I,KAAM64F,GACN34F,OAAQ24F,GACR14F,KAAM04F,GACN94F,KAAM84F,KAGR,kBAACD,EAAA,EAAD,CACElwF,KAAK,eACL1I,KAAM64F,GACN94F,KAAM84F,KAER,kBAACD,EAAA,EAAD,CACElwF,KAAK,gBAEP,kBAACkwF,EAAA,EAAD,CACElwF,KAAK,WACL1I,KAAM64F,GACN34F,OAAQ24F,GACR94F,KAAM84F,GACN14F,KAAM04F,KAER,kBAACD,EAAA,EAAD,CACElwF,KAAK,OACL1I,KAAM64F,GACN34F,OAAQ24F,GACR14F,KAAM04F,GACN94F,KAAM84F,KAER,kBAACD,EAAA,EAAD,CACElwF,KAAK,aACL1I,KAAM64F,GACN94F,KAAM84F,GACN14F,KAAM04F,KAER,kBAACD,EAAA,EAAD,CACElwF,KAAK,QACL1I,KAAM64F,GACN94F,KAAM84F,GACN34F,OAAQ24F,KAEV,kBAACD,EAAA,EAAD,CACElwF,KAAK,YAEP,kBAACkwF,EAAA,EAAD,CACElwF,KAAK,cACL1I,KAAM64F,GACN34F,OAAQ24F,GACR14F,KAAM04F,GACN94F,KAAM84F,KAER,kBAACD,EAAA,EAAD,CACElwF,KAAK,qBACL1I,KAAM64F,GACN34F,OAAQ24F,GACR14F,KAAM04F,GACN94F,KAAM84F,KAER,kBAACD,EAAA,EAAD,CACElwF,KAAK,oBAGP,kBAACkwF,EAAA,EAAD,CACElwF,KAAK,gCAEP,kBAACkwF,EAAA,EAAD,CACElwF,KAAK,iBAEP,kBAACkwF,EAAA,EAAD,CACElwF,KAAK,6BAEP,kBAACkwF,EAAA,EAAD,CACElwF,KAAK,cAEP,kBAACkwF,EAAA,EAAD,CACElwF,KAAK,QACLvI,KAAM04F,GACN94F,KAAM84F,U,GA3LE/7E,a,QC5BlBgK,IAASm9C,OAAO,kBAAC,GAAD,MAAS7/C,SAAS00E,eAAe,U","file":"static/js/main.47aeaee6.chunk.js","sourcesContent":["import {HttpError} from 'react-admin';\nimport { stringify } from 'query-string';\n\nexport const fetchJson = (url, options = {}) => {\n const requestHeaders = (options.headers ||\n new Headers({\n Accept: 'application/json',\n }));\n if (\n !requestHeaders.has('Content-Type') &&\n !(options && options.body && options.body instanceof FormData)\n ) {\n requestHeaders.set('Content-Type', 'application/json');\n }\n if (options.user && options.user.authenticated && options.user.token) {\n requestHeaders.set('Authorization', options.user.token);\n }\n\n return fetch(url, { ...options, headers: requestHeaders })\n .then(response =>\n response.text().then(text => ({\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n body: text,\n }))\n )\n .then(({ status, statusText, headers, body }) => {\n let json;\n try {\n json = JSON.parse(body);\n } catch (e) {\n // not json, no big deal\n }\n if (status < 200 || status >= 300) {\n if(json && json.error && (json.error.code || json.error.statusCode)){\n //This is the translation string location to be used on error notification\n // json.code = json.error.code ? 'errors.' + json.error.code : null;\n json.code = json.error.detail ? json.error.detail : json.error.code ? 'errors.' + json.error.code : null;\n json.statusCode = json.error.statusCode ? 'errors.' + json.error.statusCode : null;\n }\n // console.log('json', json)\n return Promise.reject(\n new HttpError(\n (json && json.code) || (json && json.statusCode) || (json && json.message) || statusText,\n status,\n json\n )\n );\n }\n return Promise.resolve({ status, headers, body, json });\n });\n};\n\nexport const queryParameters = stringify;\n\nconst isValidObject = value => {\n if (!value) {\n return false;\n }\n\n const isArray = Array.isArray(value);\n const isBuffer = typeof Buffer !== 'undefined' && Buffer.isBuffer(value);\n const isObject =\n Object.prototype.toString.call(value) === '[object Object]';\n const hasKeys = !!Object.keys(value).length;\n\n return !isArray && !isBuffer && isObject && hasKeys;\n};\n\nexport const flattenObject = (value, path = []) => {\n if (isValidObject(value)) {\n return Object.assign(\n {},\n ...Object.keys(value).map(key =>\n flattenObject(value[key], path.concat([key]))\n )\n );\n } else {\n return path.length ? { [path.join('.')]: value } : value;\n }\n};","module.exports = {\n ra: {\n action: {\n delete: 'Eliminar',\n show: 'Mostrar',\n list: 'Listar',\n save: 'Guardar',\n create: 'Criar',\n edit: 'Editar',\n sort: 'Ordenar',\n cancel: 'Cancelar',\n undo: 'Desfazer',\n refresh: 'Atualizar',\n add: 'Adicionar',\n remove: 'Remover',\n add_filter: 'Adicionar filtro',\n remove_filter: 'Remover este filtro',\n back: 'Voltar atrás',\n bulk_actions: '%{smart_count} selecionado',\n },\n boolean: {\n true: 'Sim',\n false: 'Não',\n },\n page: {\n list: 'Lista de %{name}',\n edit: '%{name} #%{id}',\n show: '%{name} #%{id}',\n create: 'Criar %{name}',\n dashboard: 'Painel de controlo',\n not_found: 'Não encontrado',\n loading: 'A carregar',\n },\n input: {\n file: {\n upload_several: 'Largue alguns ficheiros para os enviar, or clique para selecionar um.',\n upload_single: 'Largue um ficheiro para o enviar, ou clique para o selecionar.',\n },\n image: {\n upload_several: 'Largue algumas imagens para as enviar, or clique para a selecionar.',\n upload_single: 'Largue uma imagem para a enviar, ou clique para a selecionar.',\n },\n references: {\n all_missing: 'Incapaz de encontrar dados de referência.',\n many_missing: 'Pelo menos uma das referências associadas parece não estar mais disponível.',\n single_missing: 'Referência a associada parece não estar mais disponível.',\n },\n },\n message: {\n yes: 'Sim',\n no: 'Não',\n are_you_sure: 'Tem a certeza?',\n about: 'Sobre',\n not_found: 'Escreveu mal o URL, ou seguiu um link errado.',\n loading: 'A página está a carregar, aguarde um pouco por favor.',\n invalid_form: 'O formulário está errado. Por favor verifique os erros.',\n delete_title: 'Eliminar %{name} #%{id}',\n delete_content: 'Tem a certeza que pretende eliminar este item?',\n bulk_delete_title: 'Eliminar %{name} |||| Eliminar %{smart_count} %{name} itens',\n bulk_delete_content: 'Tem a certeza que pretende eliminar este/a %{name}? |||| Tem a creteza que pretende eliminar estes %{smart_count} itens?',\n },\n navigation: {\n no_results: 'Resultados não encontrados',\n no_more_results: 'A página número %{page} está fora dos limites. Tente a página anterior.',\n page_out_of_boundaries: 'A página número %{page} está fora dos limites',\n page_out_from_end: 'Não pode ir depois da última página',\n page_out_from_begin: 'Não pode ir antes da primeira página',\n page_range_info: '%{offsetBegin}-%{offsetEnd} de %{total}',\n page_rows_per_page: 'Linhas por página:',\n next: 'Próxima',\n prev: 'Anterior',\n },\n auth: {\n username: 'Nome de utilizador',\n password: 'Senha',\n sign_in: 'Entrar',\n sign_in_error: 'Autenticação falhou, por favor volte a tentar',\n logout: 'Sair',\n },\n notification: {\n updated: 'Item atualizado |||| %{smart_count} itens atualizados',\n created: 'Item criado',\n deleted: 'Item eliminado |||| %{smart_count} itens eliminados',\n bad_item: 'Item incorreto',\n item_doesnt_exist: 'Item inexistente',\n http_error: 'Erro de comunicação com o servidor',\n data_provider_error: 'Erro de fornecedor de dados. Verifique a consola para detalhes.',\n canceled: 'Ação cancelada',\n logged_out: 'A sua sessão terminou, por favor volte a conectar-se.'\n },\n validation: {\n required: 'Obrigatório',\n minLength: 'Deve ter no mínimo %{min} caracteres',\n maxLength: 'Deve ter %{max} ou menos caracteres',\n minValue: 'Deve ser no mínimo %{min}',\n maxValue: 'Deve ser %{max} ou menos',\n number: 'Deve ser um número',\n email: 'Deve ser um email válido',\n oneOf: 'Deve ser um de: %{options}',\n regex: 'Deve corresponder a um formato específico (regexp): %{pattern}',\n },\n },\n};","import { AUTH_LOGIN, AUTH_LOGOUT, AUTH_CHECK, AUTH_ERROR, AUTH_GET_PERMISSIONS } from 'react-admin';\r\nimport { storage } from 'react-admin-loopback';\r\n\r\nexport const authProvider = (loginApiUrl, noAccessPage = '/login') => {\r\n return (type, params) => {\r\n if (type === AUTH_LOGIN) {\r\n //Include user information\r\n const request = new Request(loginApiUrl+'?include=user', {\r\n method: 'POST',\r\n body: JSON.stringify(params),\r\n headers: new Headers({ 'Content-Type': 'application/json' }),\r\n });\r\n return fetch(request)\r\n .then(response => response.json())\r\n .then(({ ttl, role, userId, error, ...data }) => {\r\n if (error && (error.statusCode < 200 || error.statusCode >= 300)) {\r\n throw new Error('errors.' + error.code);\r\n }else{\r\n storage.save('lbtoken', data, ttl);\r\n storage.save('role', role, ttl);\r\n storage.save('userId', userId, ttl);\r\n }\r\n })\r\n }\r\n if (type === AUTH_LOGOUT) {\r\n storage.remove('lbtoken');\r\n storage.remove('userId');\r\n storage.remove('role');\r\n return Promise.resolve();\r\n }\r\n if (type === AUTH_ERROR) {\r\n const { status } = params;\r\n if (status === 401 || status === 403) {\r\n storage.remove('lbtoken');\r\n return Promise.reject();\r\n }\r\n return Promise.resolve();\r\n }\r\n if (type === AUTH_CHECK) {\r\n const token = storage.load('lbtoken');\r\n if (token && token.id) {\r\n return Promise.resolve();\r\n } else {\r\n storage.remove('lbtoken');\r\n return Promise.reject({ redirectTo: noAccessPage });\r\n }\r\n }\r\n if (type === AUTH_GET_PERMISSIONS) {\r\n const role = storage.load('role');\r\n return Promise.resolve(role);\r\n }\r\n return Promise.reject('Unkown method');\r\n };\r\n};\r\n","const STATE = ''\n\r\nexport const SOCKET_DEBUG = false;\r\nexport const URL = 'https://meloa.inesctec.pt'\n\r\nexport const URL_CATALOGUE = `http://catalogue${STATE}.ec-meloa.eu/dataset/`\r\n\r\nexport const API_URL = `${URL}/api`;\r\nexport const WEBSOCKET_URL = `${URL}/`;\r\nexport const AUTH_PROVIDER = `${API_URL}/users/login`;\r\n\r\nexport const KEY_BING = 'Any3CC8Wt7cBdCjMNjsEeStoX7tBn2W_H6ueqKzSSiOvLh_HQEQhvSBZj7QzYyeZ';\r\nexport const KEY_GOOGLE = 'AIzaSyB7DgboLb_ybkgObTqlSg0w_5Wh5UH_gXk';\r\nexport const WAVY_OCEAN_MODELS = [4];","import restProvider, { storage } from 'react-admin-loopback';\r\nimport { API_URL } from '../Configuration';\r\nimport * as fetchUtils from './fetch'\r\n\r\nconst httpClient = (url, options = {}) => {\r\n options.user = {\r\n authenticated: true,\r\n token: storage.load('lbtoken').id\r\n }\r\n return fetchUtils.fetchJson(url, options);\r\n}\r\n\r\nconst dataProvider = restProvider(API_URL, httpClient);\r\nexport default (type, resource, params) => \r\n new Promise(resolve => \r\n setTimeout(() => {\r\n const filter = params.filter;\r\n params.filter && Object.keys(filter).forEach(key => {\r\n if (key.charAt(0) === '_') {\r\n params[key.substr(1)] = filter[key];\r\n delete filter[key];\r\n } \r\n });\r\n return resolve(dataProvider(type, resource, params))\r\n }, 500) \r\n );\r\n","import englishMessages from 'ra-language-english';\r\n\r\nexport default {\r\n ...englishMessages,\r\n errors: {\r\n SOMETHING: 'An error has occurred',\r\n LOCALSTORAGE_FULL: 'LocalStorage is full, please empty data',\r\n '404': 'Can\\'t find answer to request',\r\n '405': 'Your institution doesn\\'t own the model',\r\n '500': 'Some error occured',\r\n '422': 'Error validating fields on server',\r\n ALREADY_EXISTS: 'Resource already exists',\r\n AUTHORIZATION_REQUIRED: 'Authorization required to access page',\r\n LOGIN_FAILED: 'Login failed',\r\n INSTITUTION_MISSING: 'Institution Missing',\r\n },\r\n sockets: {\r\n build_success: 'Launch %{launchName} updated',\r\n build_fail: 'Some error occur with launch %{launchName}',\r\n wave_parameters_success: 'Wave parameters %{waveParamId} calculated',\r\n wave_parameters_fail: 'Some error occur with wave parameters %{waveParamId}',\r\n file_process_success: 'File %{name} processed',\r\n file_process_duplicated: 'File %{name} duplicated',\r\n file_process_fail: 'File %{name} failed',\r\n update_data: 'Updated data'\r\n },\r\n dates: {\r\n not_defined: 'Date not defined'\r\n },\r\n pos: {\r\n search: 'Search',\r\n configuration: 'Configuration',\r\n language: {\r\n name: 'Language',\r\n 'en-GB': 'English',\r\n pt: 'Português',\r\n },\r\n manual: 'Manual',\r\n servicedesk: 'Service Desk',\r\n theme: {\r\n name: 'Theme',\r\n light: 'Light',\r\n dark: 'Dark',\r\n },\r\n update: {\r\n name: 'Realtime Updates',\r\n yes: 'Yes',\r\n no: 'No',\r\n },\r\n submenu: {\r\n datasets: 'Datasets',\r\n equipment: 'Equipment'\r\n },\r\n dashboard: {\r\n campaign_count: 'Available Campaign',\r\n last_campaign: 'Most recent Campaign',\r\n welcome: {\r\n title: 'WAVY Operation Software',\r\n subtitle: \"Welcome to the WAVY Operation Software. Feel free to explore this software and submit your suggestions for improvement.\",\r\n },\r\n },\r\n profile: {\r\n profile: 'Profile',\r\n profile_updated: 'Profile updated',\r\n profile_update_error: 'Error updating your profile',\r\n old_password: 'Current password',\r\n new_password: 'New password',\r\n repeat_password: 'Repeat password',\r\n change_password: 'Change password',\r\n different_passwords: 'Passwords not matching',\r\n password_changed: 'Password changed successfully'\r\n },\r\n general: {\r\n add_referencing: 'Add %{reference}',\r\n remove_referencing: 'Remove %{reference}',\r\n add_button: 'Add',\r\n remove_button: 'Remove',\r\n select_all: 'Select All',\r\n unselect_all: 'Unselect All',\r\n map: 'Map',\r\n catalogue: 'Catalogue',\r\n publish: 'Publish',\r\n delete: 'Delete',\r\n re_publish: 'Re-publish',\r\n publish_failed: 'Publish failed',\r\n publish_success: 'Publish completed successfully',\r\n delete_success: 'Publish deleted',\r\n delete_failed: 'Publish failed to delete',\r\n table: 'Table',\r\n chart: 'Chart',\r\n update: 'Update',\r\n open: 'Open',\r\n closed: 'Closed',\r\n active: 'Ative',\r\n inactive: 'Inactive',\r\n in_use: 'In use',\r\n available: 'Available',\r\n edit: 'Edit',\r\n list: 'List',\r\n export: 'Export'\r\n },\r\n derived: {\r\n to_dts: 'to Curated Dataset',\r\n searchLabel: 'Name'\r\n },\r\n info: {\r\n one_selectable: 'This button has no function, only one record is selectable.'\r\n },\r\n annotation: {\r\n clicked: 'Click again on the chart to add an annotation.',\r\n created: 'Annotation created',\r\n loading: 'Loading data'\r\n }\r\n },\r\n containers: {\r\n annotations: {\r\n modalTitle: \"Annotation\",\r\n modalEdit: \"Edit annotation\",\r\n next: \"NEXT\",\r\n begin: \"BeginTime\",\r\n time: \"Timestamp\",\r\n record: \"Record\",\r\n tags: \"Tags\",\r\n description: 'Description',\r\n end: \"EndTime\",\r\n choose: \"Choose the %{hour} time\",\r\n need_be_bigger: \"Select a time after Begin Time!\",\r\n observations: \"observations\",\r\n tag_undefined: \"This annotation has no tags\",\r\n show_all: \"Anotations\"\r\n },\r\n parameters: {\r\n modalTitle: \"Calculate parameters\",\r\n next: \"NEXT\",\r\n begin: \"Begin\",\r\n end: \"End\",\r\n choose: \"Choose the %{hour} time\",\r\n need_be_bigger: \"Select a time after Begin Time!\",\r\n observations: \"observations\",\r\n success: \"Started calculating!\",\r\n observationsNumber: \"Observations Number\",\r\n timeLimit: \"Time interval\",\r\n timeUnit: \"Minutes\",\r\n },\r\n maps: {\r\n history: {\r\n name: 'History Map',\r\n complete_interval: 'Complete interval',\r\n all_data: 'All data',\r\n info: {\r\n no_data: 'There is no data available!'\r\n }\r\n },\r\n live: {\r\n name: 'Live Map',\r\n },\r\n datasets: {\r\n name: 'Datasets Map'\r\n }\r\n },\r\n search: {\r\n name: 'Search',\r\n fields: {\r\n equipment: 'Equipment',\r\n beginTimestamp: 'Begin timestamp',\r\n endTimestamp: 'End timestamp'\r\n },\r\n errors: {\r\n dates: 'Invalid time interval, begin timestamp more recent than end timestamp.'\r\n }\r\n },\r\n derivedsets: {\r\n map: {\r\n name: 'Curated Datasets Map',\r\n loadObsError: 'Error loading observations'\r\n },\r\n chart: {\r\n name: 'Curated Datasets Chart'\r\n }\r\n },\r\n charts: {\r\n name: 'Charts',\r\n unloadable: 'It wasn\\'t possible to load the graph. Might have no data.'\r\n },\r\n properties: {\r\n altitude: 'Altitude',\r\n battery: 'Battery',\r\n date: 'Date',\r\n hdop: 'Hdop',\r\n latitude: 'Latitude',\r\n longitude: 'Longitude',\r\n no_data: 'No Data',\r\n rarc: 'RARC',\r\n satellites: 'Satellites',\r\n speed: 'Speed',\r\n timestamp: 'Timestamp',\r\n rssi: 'rssi'\r\n },\r\n manual: {\r\n addSection: 'Add Section',\r\n addSubSection: 'Add subsection',\r\n title: '%{action} %{type}',\r\n fields: {\r\n title: 'Title',\r\n section: 'Section',\r\n subsection: 'Subsection',\r\n },\r\n error: {\r\n invalid_number: 'It must be a positive number bigger than 0'\r\n }\r\n }\r\n },\r\n inputs: {\r\n coordinates: {\r\n latitude: 'Latitude',\r\n longitude: 'Longitude',\r\n },\r\n error: {\r\n invalid_latitude: 'Latitude must be a value between -90 and 90',\r\n invalid_longitude: 'Longitude must be a value between -180 and 180'\r\n },\r\n general: {\r\n update: 'Element updated',\r\n create: 'Element created',\r\n delete: 'Element deleted',\r\n }\r\n },\r\n error: {\r\n INVALID_PASSWORD: 'The current password is wrong',\r\n CAMPAIGN_OPEN_LAUNCH: 'The campaign already has an open launch',\r\n CAMPAIGN_NOT_FOUND: 'The campaign could not be found',\r\n UNAUTHORIZED: 'Unauthorized',\r\n USER_IS_SYSADMIN: 'The user is the system administrator',\r\n USER_NOT_FOUND: 'User could not be found',\r\n LAUNCH_NOT_FOUND: 'Launch could not be found',\r\n BEGIN_TIMESTAMP_LATER: 'Begin timestamp must be earlier than end timestamp',\r\n END_TIMESTAMP_EARLIER: 'End timestamp must be later than begin timestamp',\r\n BUILDING_ERROR: 'Error building the launch'\r\n },\r\n resources: {\r\n campaigns: {\r\n name: 'Campaign |||| Campaigns',\r\n fields: {\r\n name: 'Name',\r\n description: 'Description',\r\n beginDate: 'Begin Date',\r\n area: 'Location',\r\n zoom: 'Zoom',\r\n hide: 'Hide',\r\n noEquipments: 'No equipment is yet associated to this campaign!',\r\n owner: 'Owner'\r\n },\r\n tabs: {\r\n details: \"Details\",\r\n launches: \"Launches\",\r\n datasets: \"Dataset\",\r\n equipment: \"Equipment\",\r\n teams: \"Teams\",\r\n overlays: \"Overlays\",\r\n notes: \"Notes\",\r\n satellites: 'Satellites'\r\n },\r\n satellites: {\r\n calculate_button: 'Calculate',\r\n charts_color: 'Charts color',\r\n begin_date: 'Begin Date',\r\n end_date: 'End Date',\r\n color0: 'Blue',\r\n color1: 'Grey',\r\n color2: 'Orange',\r\n chart1_xAxis_title: 'Hours p/Day',\r\n chart1_yAxis_avereage_title: 'Average',\r\n chart1_yAxis_probability_title: 'Coverage',\r\n chart1_avereageSeries_name: 'satellites average',\r\n chart1_probabilitySeries_name: 'Coverage',\r\n chart2_title: 'Total Satellites p/Period',\r\n minimum_elevation: 'Minimum Elevation',\r\n request_error: 'Some error occurred with the satellites request'\r\n }\r\n },\r\n datasets: {\r\n name: 'Dataset |||| Datasets',\r\n fields: {\r\n name: 'Name',\r\n equipmentId: 'Equipment',\r\n launchId: 'Launch',\r\n campaignId: 'Campaign',\r\n numberObservations: 'Number of observations',\r\n },\r\n copyNotification: 'Curated dataset will be processed soon',\r\n copyButton: 'Clone',\r\n createDerivedset: 'Create a Curated Dataset',\r\n buildJob: 'You want update %{datasetName}?',\r\n buildJobWarning: 'The actual data will be erased!',\r\n buildJobNotification: '%{datasetName} will be updated soon',\r\n download_error: 'File not found'\r\n },\r\n equipment: {\r\n name: 'Equipment |||| Equipment',\r\n allObservations: 'All observations',\r\n fields: {\r\n state: \"State\",\r\n name: 'Name',\r\n serialNumber: 'Serial Number',\r\n number: 'Number',\r\n equipmentModelId: 'Model',\r\n import: 'Imported',\r\n identifier: 'Argos Id',\r\n properties: {\r\n color: 'Color'\r\n },\r\n },\r\n removed_eq: 'Removed the selected equipments',\r\n dataset_published: 'The selected equipments has a published dataset',\r\n recovery: {\r\n button_label: 'Recovery Mode',\r\n confirm_button_label_activated: 'Recovery mode is ON',\r\n confirm_button_label_deactivated: 'Recovery mode is OFF',\r\n confirm_button_label_activating: 'Activating Recovery mode',\r\n confirm_button_label_deactivating: 'Deactivating Recovery mode',\r\n confirm_text_active: 'Are you sure you want to active the recovery mode for this equipment?',\r\n confirm_text_deactivate: 'Are you sure you want to deactivate the recovery mode for this equipment?',\r\n success_notification: 'Recovery message has been sent to recover equipment',\r\n failure_notification: 'Error getting the WAVY Ocean mode'\r\n // message_notification: 'Recovery message has already been sent'\r\n },\r\n agreement: {\r\n success: 'Terms of Service accepted',\r\n failure: 'Some error occurred accepting the Terms of Service',\r\n agreement: 'Terms of Service',\r\n to_accept: 'Accept the ',\r\n accepted: ' already accepted',\r\n },\r\n tabs: {\r\n details: 'Details',\r\n datasets: 'Datasets',\r\n campaigns: 'Campaigns',\r\n calibrations: 'Calibrations'\r\n },\r\n calibrations: {\r\n calibrationDate: 'Calibration Date',\r\n validDate: 'Validation Date',\r\n sensorType: 'Sensor name',\r\n onEquipment: 'On equipment',\r\n numVariables: 'Polynomial',\r\n polynomialDegree1: 'Linear',\r\n polynomialDegree2: 'Cubic',\r\n diffValidationDate: 'Diferent Validation Date',\r\n sensor_1: 'temp_1',\r\n sensor_2: 'temp_2',\r\n none: 'None',\r\n filter: 'Filter',\r\n formula: 'Sensor Value',\r\n }\r\n },\r\n institutions: {\r\n name: 'Institution |||| Institutions',\r\n fields: {\r\n name: 'Name',\r\n address: 'Address',\r\n phoneNumber: 'Phone Number',\r\n acronym: \"Acronym\",\r\n url: \"Internet Site\"\r\n },\r\n tabs: {\r\n details: 'Details',\r\n users: 'Members'\r\n }\r\n },\r\n observations: {\r\n name: 'Observation |||| Observations',\r\n fields: {\r\n number: 'Number',\r\n timestamp: 'Time UTC',\r\n 'position.lat': 'Latitude',\r\n 'position.lng': 'Longitude',\r\n battery: 'Battery',\r\n speed: 'Speed',\r\n direction: 'Direction',\r\n copying: 'Copying'\r\n },\r\n button: {\r\n csv_export: 'CSV',\r\n metadata_export: 'Metadata'\r\n }\r\n },\r\n teams: {\r\n name: 'Team |||| Teams',\r\n fields: {\r\n name: 'Name',\r\n code: 'Code',\r\n description: \"Description\"\r\n },\r\n tabs: {\r\n details: 'Details',\r\n users: 'Members'\r\n }\r\n },\r\n users: {\r\n name: 'User |||| Users',\r\n fields: {\r\n username: 'Username',\r\n name: 'Name',\r\n email: 'E-mail',\r\n institutionId: 'Institution',\r\n active: 'Active',\r\n isAdmin: 'Administrator',\r\n role: 'Administrator'\r\n }\r\n },\r\n annotations: {\r\n name: 'Annotation |||| Annotations',\r\n fields: {\r\n observationIds: 'Observations Ids',\r\n title: 'Title',\r\n text: 'Text',\r\n tagIds: 'Tags'\r\n },\r\n messages: {\r\n updateError: 'Some error occurred when updating the annotation',\r\n dateGt: 'The date needs to be greater than %{date}',\r\n dateLt: 'The date needs to be lower than %{date}',\r\n getDatesError: 'Some error occurred getting the limit dates',\r\n getAnnotations: 'Some error occurred getting annotations',\r\n createAnnotations: 'Some error occurred when creating the annotation',\r\n },\r\n },\r\n notes: {\r\n name: 'Note |||| Notes',\r\n title: 'Notes',\r\n fields: {\r\n beginDate: 'Date',\r\n description: 'Description',\r\n tagIds: 'Tags',\r\n campaign: 'Campaign'\r\n },\r\n campaignGetError: 'Error getting campaigns data',\r\n success: 'Note created',\r\n tabs: {\r\n details: 'Details',\r\n description: 'Description',\r\n }\r\n },\r\n launches: {\r\n name: 'Launch |||| Launches',\r\n fields: {\r\n state: \"State\",\r\n name: 'Name',\r\n description: 'Description',\r\n beginTimestamp: 'Begin Date',\r\n endTimestamp: 'End Date',\r\n autoPublish: 'Auto Publish',\r\n equipmentAdded: 'Equipments'\r\n },\r\n buttons: {\r\n create: 'Create',\r\n terminate: 'Finish Launch',\r\n terminateAll: 'Close All',\r\n build: 'Build'\r\n },\r\n message: {\r\n build: 'Start building'\r\n },\r\n tabs: {\r\n details: 'Details',\r\n equipment: 'Equipment'\r\n }\r\n },\r\n overlays: {\r\n name: 'Overlay |||| Overlays',\r\n fields: {\r\n name: 'Name',\r\n opacity: 'Opacity',\r\n filePath: 'Url',\r\n type: 'Type',\r\n layers: 'Layers',\r\n image: 'Image',\r\n wms: 'WMS',\r\n kml: 'KML',\r\n southWest: 'Southwest point',\r\n northEast: 'Northeast point'\r\n },\r\n file: 'File',\r\n url: 'url'\r\n },\r\n files: {\r\n name: 'File |||| Files',\r\n fields: {\r\n name: 'Name',\r\n originalFilename: 'Original File Name',\r\n identifier: 'Identifier',\r\n createdAt: 'Upload Date',\r\n number: 'Number',\r\n altitude: 'Altitude',\r\n speed: 'Speed',\r\n position: 'Position',\r\n direction: 'Direction',\r\n satellites: 'Satellites',\r\n hdop: 'Hdop',\r\n timestamp: 'Time',\r\n file: 'File',\r\n uploadFile: 'Upload File'\r\n },\r\n filter: {\r\n success: 'Success',\r\n duplicated: 'Duplicated',\r\n pending: 'Pending',\r\n error1: 'Error',\r\n error2: 'Error on columns length',\r\n error3: 'Error with dates',\r\n }\r\n },\r\n derivedsets: {\r\n name: 'CuratedSet |||| Curated',\r\n fields: {\r\n name: 'Name',\r\n description: 'Description',\r\n removed_noti: 'Removed %{id} elements',\r\n remove: 'Remove',\r\n numberObservations: 'Number of observations',\r\n },\r\n notification:{\r\n update_metadata: 'The metadata and CSV has been updated'\r\n },\r\n forms: {\r\n buttons: {\r\n tags_filter: 'Tag filter',\r\n delete_observations: \"Delete Content\",\r\n delete_observations_confirm_title: \"Delete Content\",\r\n delete_observations_confirm_description: \"You want delete all observation from this curatedSet?\",\r\n delete_observations_confirm_notification: \"Deleted all observations\",\r\n }\r\n }\r\n },\r\n equipmenttypes: {\r\n name: 'Type |||| Types',\r\n fields: {\r\n name: 'Name'\r\n }\r\n },\r\n equipmentmodels: {\r\n name: 'Model |||| Models',\r\n fields: {\r\n name: \"Name\",\r\n equipmenttypeId: \"Equipment Type\",\r\n observedProperty: 'Properties',\r\n properties: {\r\n visible: 'Visible',\r\n observedpropertyId: 'Observed Property',\r\n unitOfMeasurement: 'Unit of Measurement',\r\n index: 'Index'\r\n }\r\n },\r\n warning: {\r\n removeProperty: \"Can't be removed\"\r\n },\r\n errors: {\r\n index_lt1: 'Index must be a value greater than 0. ',\r\n duplicate_index: \"Can't have duplicated Indexes. \",\r\n related_properties: \"Error saving properties.\",\r\n }\r\n },\r\n observedProperties: {\r\n name: 'Property |||| Properties',\r\n fields: {\r\n name: 'Name',\r\n description: 'Description'\r\n }\r\n },\r\n tags: {\r\n name: 'Tag |||| Tags',\r\n tabs: {\r\n details: 'Details',\r\n },\r\n fields: {\r\n properties: {\r\n color: 'Color',\r\n },\r\n }\r\n },\r\n parameters: {\r\n name: 'Parameter |||| Parameters',\r\n title: 'Parameters',\r\n titleCurated: '(curated dataset)',\r\n tabs: {\r\n details: 'Details',\r\n },\r\n fields: {\r\n properties: {\r\n color: 'Color',\r\n },\r\n },\r\n equipment: 'Equipment',\r\n derived: \"Curated\",\r\n calculate: \"Calculate\",\r\n download: \"Download CSV\",\r\n error: \"Insufficient data select. Please select a higher amount of data.\",\r\n fileError: \"File not found.\",\r\n }\r\n }\r\n};\r\n","import englishMessages from '../i18n/en';\nimport portugueseMessages from '../i18n/pt';\n\nconst i18n = {\n \"en-GB\": englishMessages,\n pt: portugueseMessages\n}\n\nexport default locale => i18n[locale] || i18n[\"en-GB\"];","import portugueseMessages from 'ra-language-portuguese-pt';\r\n\r\nexport default {\r\n ...portugueseMessages,\r\n errors: {\r\n SOMETHING: 'Ocorreu um erro',\r\n LOCALSTORAGE_FULL: 'O LocalStorage está cheio, por favor apague os dados',\r\n '404': 'Não é possível dar resposta ao pedido',\r\n '405': 'A sua instituição não é proprietária do modelo',\r\n '500': 'Ocurreu um erro',\r\n '422': 'Erro de validação dos campos no servidor',\r\n ALREADY_EXISTS: 'Recurso já existe',\r\n AUTHORIZATION_REQUIRED: 'Precisa de autorização para aceder à página',\r\n LOGIN_FAILED: 'Login falhou',\r\n INSTITUTION_MISSING: 'Instituição em falta'\r\n },\r\n sockets: {\r\n build_success: 'O lançamento %{launchName} está atualizado!',\r\n build_fail: 'Ocorreu um erro com o lançamento %{launchName}',\r\n wave_parameters_success: 'Calculo dos wave parameters %{waveParamId} concluido',\r\n wave_parameters_fail: 'Ocorreu um erro com o calculo dos wave parameters %{waveParamId}',\r\n file_process_success: 'Ficheiro %{name} processado',\r\n file_process_fail: 'Ficheiro %{name} falhou',\r\n file_process_duplicated: 'Ficheiro %{name} duplicado',\r\n update_data: 'Dados atualizados'\r\n },\r\n dates: {\r\n not_defined: 'Data não definida'\r\n },\r\n pos: {\r\n search: 'Procurar',\r\n configuration: 'Configuração',\r\n language: {\r\n name: 'Linguagem',\r\n 'en-GB': 'English',\r\n pt: 'Português',\r\n },\r\n manual: 'Manual',\r\n servicedesk: 'Service Desk',\r\n theme: {\r\n name: 'Tema',\r\n light: 'Claro',\r\n dark: 'Escuro',\r\n },\r\n update: {\r\n name: 'Atualizações em tempo real',\r\n yes: 'Sim',\r\n no: 'Não',\r\n },\r\n submenu: {\r\n datasets: 'Datasets',\r\n equipment: 'Equipamento'\r\n },\r\n dashboard: {\r\n campaign_count: 'Campanhas disponíveis',\r\n last_campaign: 'Campanha mais recente',\r\n welcome: {\r\n title: 'WAVY Operation Software',\r\n subtitle: \"Bem-vindo ao WAVY Operation Software. Explore este software e submeta as suas sugestões.\",\r\n },\r\n },\r\n profile: {\r\n profile: 'Perfil',\r\n profile_updated: 'Perfil atualizado com sucesso.',\r\n profile_update_error: 'Erro ao atualizar o perfil.',\r\n old_password: 'Senha actual',\r\n new_password: 'Nova senha',\r\n repeat_password: 'Repetir senha',\r\n change_password: 'Mudar senha',\r\n different_passwords: 'Repeat password not equal to new password',\r\n password_changed: 'Senha alterada com sucesso'\r\n },\r\n general: {\r\n add_referencing: 'Adicionar %{reference}',\r\n remove_referencing: 'Remover %{reference}',\r\n add_button: 'Adicionar',\r\n remove_button: 'Remover',\r\n select_all: 'Selecionar tudo',\r\n unselect_all: 'Desselecionar tudo',\r\n map: 'Mapa',\r\n catalogue: 'Catalogo',\r\n publish: 'Publicar',\r\n delete: 'Apagar',\r\n re_publish: 'Re-publicar',\r\n publish_failed: 'Publicação dos dados falhou',\r\n publish_success: 'Publicação completa com sucesso',\r\n delete_success: 'Publicação apagada',\r\n delete_failed: 'Falha a apagar a publicação',\r\n table: 'Tabela',\r\n chart: 'Gráfico',\r\n update: 'Atualizar',\r\n open: 'Aberto',\r\n closed: 'Fechado',\r\n active: 'Ativo',\r\n inactive: 'Inativo',\r\n in_use: 'Em uso',\r\n available: 'Disponível',\r\n edit: 'Editar',\r\n list: 'Lista',\r\n export: 'Exportar'\r\n },\r\n derived: {\r\n to_dts: 'a Dataset derivado',\r\n searchLabel: 'Nome'\r\n },\r\n info: {\r\n one_selectable: 'Este botão não tem funcionalidade, somente um registo pode ser selecionado.'\r\n },\r\n annotation:{\r\n clicked: 'Clique novamente no gráfico para criar uma anotação.',\r\n created: 'Anotação criada.',\r\n loading: 'A carregar dados'\r\n }\r\n },\r\n containers: {\r\n annotations: {\r\n modalTitle: \"Anotação\",\r\n modalEdit: \"Editar anotação\",\r\n next: \"PROX\",\r\n begin: \"Data de inicio\",\r\n time: \"Timestamp\",\r\n record: \"Record\",\r\n tags: \"Tags\",\r\n description: 'Descrição',\r\n end: \"Data de fim\",\r\n choose: \"Escolha o tempo de %{hour}\",\r\n need_be_bigger: \"Selecione um momento depois do tempo de Inicio\",\r\n observations: \"observações\",\r\n tag_undefined: \"Esta anotação não tem tags\",\r\n show_all: \"Anotações\"\r\n },\r\n parameters: {\r\n modalTitle: \"Calcular parametros\",\r\n next: \"PROX\",\r\n begin: \"Inicio\",\r\n end: \"Fim\",\r\n choose: \"Escolha o tempo de %{hour}\",\r\n need_be_bigger: \"Selecione um momento depois do tempo de Inicio\",\r\n observations: \"observações\",\r\n success: \"Começou o cálculo\",\r\n observationsNumber: \"Número de observações\",\r\n timeLimit: \"Intervalo de tempo\",\r\n timeUnit: \"Minutos\",\r\n },\r\n maps: {\r\n history: {\r\n name: 'Mapa Histórico',\r\n complete_interval: 'Intervalo completo',\r\n all_data: 'Todos os dados',\r\n info: {\r\n no_data: 'Não existem dados disponíveis!'\r\n }\r\n },\r\n live: {\r\n name: 'Mapa ao Vivo',\r\n },\r\n datasets: {\r\n name: 'Mapa de Datasets'\r\n },\r\n },\r\n derivedsets: {\r\n map: {\r\n name: 'Mapa de Datasets Derivados',\r\n loadObsError: 'Erro a carregar dados'\r\n },\r\n chart: {\r\n name: 'Gráficos de Datasets Derivados'\r\n }\r\n },\r\n search: {\r\n name: 'Pesquisar',\r\n fields: {\r\n equipment: 'Equipamento',\r\n beginTimestamp: 'Tempo de início',\r\n endTimestamp: 'Tempo de fim'\r\n },\r\n errors: {\r\n dates: 'O intervalo de tempo é inválido, timestamp inicial mais recente que timestamp final.'\r\n }\r\n },\r\n charts: {\r\n name: 'Gráficos',\r\n unloadable: 'Não foi possível carregar o gráfico. Poderão não existir dados.'\r\n },\r\n properties: {\r\n altitude: 'Altitude',\r\n battery: 'Bateria',\r\n date: 'Data',\r\n hdop: 'Hdop',\r\n latitude: 'Latitude',\r\n longitude: 'Longitude',\r\n no_data: 'Sem dados',\r\n rarc: 'RARC',\r\n satellites: 'Satélites',\r\n speed: 'Velocidade',\r\n timestamp: 'Hora',\r\n rssi: 'rssi'\r\n },\r\n manual: {\r\n addSection: 'Adicionar Secção',\r\n addSubSection: 'Adicionar Subsecção',\r\n title: '%{action} %{type}',\r\n fields: {\r\n title: 'Título',\r\n section: 'Secção',\r\n subsection: 'Subsecção',\r\n },\r\n error: {\r\n invalid_number: 'Tem de ser um número positivo maior que 0'\r\n }\r\n }\r\n },\r\n inputs: {\r\n coordinates: {\r\n latitude: 'Latitude',\r\n longitude: 'Longitude'\r\n },\r\n error: {\r\n invalid_latitude: 'Latitude tem de ser um valor entre -90 and 90',\r\n invalid_longitude: 'Longitude tem de ser um valor entre -180 and 180'\r\n },\r\n general: {\r\n update: 'Elemento atualizado',\r\n create: 'Elemento criado',\r\n delete: 'Elemento apagado',\r\n }\r\n },\r\n error: {\r\n INVALID_PASSWORD: 'A password atual está incorreta',\r\n CAMPAIGN_OPEN_LAUNCH: 'A campanha já tem um lançamento aberto',\r\n CAMPAIGN_NOT_FOUND: 'A campanha não foi encontrada',\r\n UNAUTHORIZED: 'Sem autorização',\r\n USER_IS_SYSADMIN: 'O utilizador é o administrador de sistema',\r\n USER_NOT_FOUND: 'O utilizador não foi encontrado',\r\n LAUNCH_NOT_FOUND: 'O lançamento não foi encontrado',\r\n BEGIN_TIMESTAMP_LATER: 'O tempo de início tem de ser anterior ao tempo de fim',\r\n END_TIMESTAMP_EARLIER: 'O tempo de fim tem de ser posterior do tempo de início',\r\n BUILDING_ERROR: 'Erro a fazer o BUILD'\r\n },\r\n resources: {\r\n campaigns: {\r\n name: 'Campanha |||| Campanhas',\r\n fields: {\r\n name: 'Nome',\r\n description: 'Descrição',\r\n beginDate: 'Início',\r\n area: 'Local',\r\n zoom: 'Zoom',\r\n hide: 'Escondida',\r\n noEquipments: 'Ainda não há equipamentos associados à campanha!',\r\n owner: 'Proprietário'\r\n },\r\n tabs: {\r\n details: \"Detalhes\",\r\n launches: \"Lançamentos\",\r\n datasets: \"Datasets\",\r\n equipment: \"Equipamentos\",\r\n teams: \"Equipas\",\r\n overlays: \"Overlays\",\r\n notes: \"Notas\",\r\n satellites: 'Satélites'\r\n },\r\n satellites: {\r\n calculate_button : 'Calcular',\r\n charts_color : 'Cor dos gráficos',\r\n begin_date: 'Data de início',\r\n end_date: 'Data de fim',\r\n color0: 'Azul',\r\n color1: 'Cinzento',\r\n color2: 'Laranja',\r\n chart1_xAxis_title: 'Horas p/Dia',\r\n chart1_yAxis_avereage_title : 'Média',\r\n chart1_yAxis_probability_title : 'Cobertura',\r\n chart1_avereageSeries_name: 'média satélites',\r\n chart1_probabilitySeries_name : 'cobertura',\r\n chart2_title : 'Total Satélites p/Período',\r\n minimum_elevation: 'Elevação mínima',\r\n request_error: 'Ocurreu um erro com o pedido de satélites'\r\n }\r\n },\r\n datasets: {\r\n name: 'Dataset |||| Datasets',\r\n fields: {\r\n name: 'Nome',\r\n equipmentId: 'Equipamento',\r\n launchId: 'Lançamento',\r\n campaignId: 'Campanha',\r\n numberObservations: 'Número de observações'\r\n },\r\n copyNotification: 'DerivedSet será processado em breve',\r\n copyButton: 'Clone',\r\n createDerivedset: 'Cria um DerivedSet',\r\n buildJob: 'Pretende atualizar o %{datasetName}?',\r\n buildJobWarning: 'O dataset atual irá ser apagado!',\r\n buildJobNotification: '%{datasetName} vai ser atualizado em breve',\r\n download_error: 'Ficheiro não encontrado'\r\n },\r\n equipment: {\r\n name: 'Equipamento |||| Equipamentos',\r\n allObservations: 'Todas as observações',\r\n fields: {\r\n state: \"Estado\",\r\n name: 'Nome',\r\n serialNumber: 'Número de Série',\r\n number: 'Número',\r\n equipmentModelId: 'Modelo',\r\n import: 'Importado',\r\n identifier: 'Argos Id',\r\n properties: {\r\n color: 'Cor'\r\n }\r\n },\r\n removed_eq: 'Os equipamentos selecionados foram removidos',\r\n dataset_published: 'Os equipamentos selecionados têm datasets publicados',\r\n recovery:{\r\n button_label: 'Modo Recuperação',\r\n confirm_button_label_activated: 'Modo de recuperação está ON',\r\n confirm_button_label_deactivated: 'Modo de recuperação está OFF',\r\n confirm_text_active: 'Tem a certeza de que quer ativar o mode de recuperação para este equipamento?',\r\n confirm_text_deactivate: 'Tem a certeza de que quer desativar o mode de recuperação para este equipamento?',\r\n success_notification: 'O pedido de recuperação foi enviado com sucesso',\r\n failure_notification: 'Erro a obter o modo da WAVY Ocean'\r\n // message_notification: 'Recovery message has already been sent'\r\n },\r\n agreement:{ \r\n success: 'Termos de Serviço aceites',\r\n failure: 'Ocorreu um erro ao aceitar os Termos de Serviço',\r\n agreement: 'Termos de Serviço',\r\n to_accept: 'Aceitar os ',\r\n accepted: ' aceites',\r\n },\r\n tabs: {\r\n details: 'Detalhes',\r\n datasets: 'Datasets',\r\n campaigns: 'Campanhas',\r\n recovery: 'Modo Recuperação',\r\n calibrations: 'Calibrações'\r\n },\r\n calibrations: {\r\n calibrationDate: 'Data Calibração',\r\n validDate: 'Data Validade',\r\n sensorType: 'Nome sensor',\r\n onEquipment: 'No Equipamento',\r\n numVariables: 'Polinómio',\r\n polynomialDegree1: 'Linear',\r\n polynomialDegree2: 'Cúbico',\r\n diffValidationDate: 'Data Validade Diferente',\r\n sensor_1: 'temp_1',\r\n sensor_2: 'temp_2',\r\n none: 'Nenhum',\r\n filter: 'Filtro',\r\n formula: 'Valor do Sensor',\r\n }\r\n },\r\n institutions: {\r\n name: 'Instituição |||| Instituições',\r\n fields: {\r\n name: 'Nome',\r\n address: 'Endereço',\r\n phoneNumber: 'Contacto',\r\n acronym: \"Acrónimo\",\r\n url: \"Sítio internet\"\r\n },\r\n tabs: {\r\n details: \"Detalhes\",\r\n users: \"Membros\"\r\n }\r\n },\r\n observations: {\r\n name: 'Observação |||| Observações',\r\n fields: {\r\n number: 'Número',\r\n timestamp: 'Hora UTC',\r\n 'position.lat': 'Latitude',\r\n 'position.lng': 'Longitude',\r\n battery: 'Bateria',\r\n speed: 'Velocidade',\r\n direction: 'Direção',\r\n copying: 'A copiar'\r\n },\r\n button: {\r\n csv_export: 'CSV',\r\n metadata_export: 'Metadados'\r\n }\r\n },\r\n teams: {\r\n name: 'Equipa |||| Equipas',\r\n fields: {\r\n name: 'Nome',\r\n code: 'Código',\r\n description: \"Descrição\"\r\n },\r\n tabs: {\r\n details: 'Detalhes',\r\n users: 'Membros'\r\n }\r\n },\r\n users: {\r\n name: 'Utilizador |||| Utilizadores',\r\n fields: {\r\n username: 'Nome de Utilizador',\r\n name: 'Nome',\r\n email: 'E-Mail',\r\n institutionId: 'Instituição',\r\n active: 'Ativo',\r\n isAdmin: 'Administrador',\r\n role: 'Administrador'\r\n }\r\n },\r\n annotations: {\r\n name: 'Anotação |||| Anotações',\r\n fields: {\r\n observationIds: 'Ids das observações',\r\n title: 'Título',\r\n text: 'Texto',\r\n tagIds: 'Etiquetas'\r\n },\r\n messages: {\r\n updateError: 'Ocorreu um erro ao atualizar a anotação',\r\n dateGt: 'A data precisa de ser maior que %{date}',\r\n dateLt: 'A data precisa de ser menor que %{date}',\r\n getDatesError: 'Ocorreu um erro ao obter as datas limite',\r\n getAnnotations: 'Ocorreu um erro a obter as anotações',\r\n createAnnotations: 'Ocorreu um erro ao criar a anotação',\r\n },\r\n },\r\n notes: {\r\n name: 'Nota |||| Notas',\r\n title: 'Notas',\r\n fields:{\r\n beginDate: 'Data',\r\n description: 'Descrição',\r\n tagIds: 'Tags',\r\n campaign: 'Campanha'\r\n },\r\n campaignGetError: 'Erro a obter informação de campanhas',\r\n success: 'Nota criada',\r\n tabs: {\r\n details: 'Detalhes',\r\n description: 'Descrição',\r\n }\r\n },\r\n launches: {\r\n name: 'Lançamento |||| Lançamentos',\r\n fields: {\r\n state: \"Estado\",\r\n name: 'Nome',\r\n description: 'Descrição',\r\n beginTimestamp: 'Data de Início',\r\n endTimestamp: 'Data de Fim',\r\n autoPublish: 'Publicação automática',\r\n equipmentAdded: 'Equipamentos'\r\n },\r\n message: {\r\n build: 'Build completo'\r\n },\r\n buttons: {\r\n create: 'Criar',\r\n terminate: 'Terminar Lançamento',\r\n terminateAll: 'Terminar Todos',\r\n build: 'Build iniciado'\r\n },\r\n tabs: {\r\n details: 'Detalhes',\r\n equipment: 'Equipamentos'\r\n }\r\n },\r\n overlays: {\r\n name: 'Overlay |||| Overlays',\r\n fields: {\r\n name: 'Nome',\r\n filePath: 'Url',\r\n type: 'Tipo',\r\n opacity: 'Opacidade',\r\n layers: 'Camadas',\r\n image: 'Imagem',\r\n wms: 'WMS',\r\n kml: 'KML',\r\n southWest: 'Ponto Sudoeste',\r\n northEast: 'Ponto Nordeste'\r\n },\r\n file: 'Ficheiro',\r\n url: 'url'\r\n },\r\n files: {\r\n name: 'Ficheiro |||| Ficheiros',\r\n fields: {\r\n name: 'Nome',\r\n originalFilename: 'Nome do ficheiro original',\r\n identifier: 'Identificador',\r\n createdAt: 'Data de envio',\r\n number: 'Número',\r\n altitude: 'Altitude',\r\n speed: 'Velocidade',\r\n position: 'Posição',\r\n direction: 'Direção',\r\n satellites: 'Satélites',\r\n hdop: 'Hddp',\r\n timestamp: 'Hora',\r\n file:'Ficheiro',\r\n uploadFile: 'Carregar Ficheiro'\r\n },\r\n filter: {\r\n success: 'Sucesso',\r\n duplicated: 'Duplicado',\r\n pending: 'Pendente',\r\n error1: 'Erro',\r\n error2: 'Erro no número de colunas',\r\n error3: 'Erro com datas',\r\n }\r\n },\r\n derivedsets: {\r\n name: 'Derivado |||| Derivados',\r\n fields: {\r\n name: 'Nome',\r\n description: 'Descrição',\r\n removed_noti: 'Foram apagados %{id} elementos',\r\n remove: 'Apagar',\r\n numberObservations: 'Número de observações'\r\n },\r\n notification:{\r\n update_metadata: 'The metadata and CSV has been updated'\r\n },\r\n forms: {\r\n buttons: {\r\n tags_filter: 'Filtrar por tag',\r\n delete_observations: \"Apagar conteúdo\",\r\n delete_observations_confirm_title: \"Apagar conteúdo\",\r\n delete_observations_confirm_description: \"Apagar todas as observações deste derivedSet?\",\r\n delete_observations_confirm_notification: \"Todas as observações apagadas\",\r\n }\r\n }\r\n },\r\n equipmenttypes: {\r\n name: 'Tipo |||| Tipos',\r\n fields: {\r\n name: 'Nome'\r\n }\r\n },\r\n equipmentmodels: {\r\n name: 'Modelo |||| Modelos',\r\n fields: {\r\n name: \"Nome\",\r\n equipmenttypeId: \"Tipo de equipamento\",\r\n observedProperty: 'Propriedades',\r\n properties: {\r\n visible: 'Visível',\r\n observedpropertyId: 'Propriedade observada',\r\n unitOfMeasurement: 'Unidade de Medida',\r\n index: 'Índice'\r\n }\r\n },\r\n warning: {\r\n removeProperty: 'Não é possível remover'\r\n },\r\n errors: {\r\n index_lt1: 'Índice deve ser um valor superior a 0.',\r\n duplicate_index: 'Não podem haver índices duplicados.',\r\n related_properties: 'Erro a gravar propriedades.',\r\n }\r\n },\r\n observedProperties: {\r\n name: 'Propriedade |||| Propriedades',\r\n fields: {\r\n name: 'Nome',\r\n description: 'Descrição'\r\n }\r\n },\r\n tags:{\r\n name: 'Tag |||| Tags',\r\n tabs: {\r\n details: 'Detalhes',\r\n },\r\n fields: {\r\n properties: {\r\n color: 'Cor',\r\n },\r\n }\r\n },\r\n parameters:{\r\n name: 'Parametro |||| Parametros',\r\n title: 'Parametros',\r\n titleCurated: '(dataset derivado)',\r\n tabs: {\r\n details: 'Detalhes',\r\n },\r\n fields: {\r\n properties: {\r\n color: 'Cor',\r\n },\r\n },\r\n equipment: 'Equipamento',\r\n derived: \"Derivado\",\r\n calculate: \"Calcular\",\r\n download: \"Exportar\",\r\n error: \"Não foram selecionados dados suficientes. Por favor selecione mais dados.\",\r\n fileError: \"Ficheiro não encontrado.\",\r\n }\r\n }\r\n};\r\n","import { storage } from 'react-admin-loopback';\r\nimport { API_URL } from '../Configuration';\r\n\r\n// TODO: Improve this one\r\nexport default (method, path, headers = new Headers(), body) => \r\n new Promise((resolve, reject) => {\r\n headers.append(\"Authorization\",`${storage.load('lbtoken').id}`);\r\n \r\n // fetch(`${API_URL}${path}`,{\r\n // method,\r\n // headers,\r\n // body\r\n // })\r\n // .then(resp=>resp.json())\r\n // .then(data => {\r\n // resolve(data);\r\n // })\r\n // .catch(error => {\r\n // reject(error);\r\n // });\r\n\r\n let goCatch = false;\r\n fetch(`${API_URL}${path}`,{\r\n method,\r\n headers,\r\n body\r\n })\r\n .then(resp => {\r\n if (resp.status === 200 || resp.status === 201)\r\n return resp.json();\r\n else if(resp.status === 204) \r\n return undefined;\r\n else {\r\n goCatch = true;\r\n return resp.json();\r\n }\r\n })\r\n .then(data => {\r\n if (goCatch) {\r\n return reject(data);\r\n }\r\n else\r\n return resolve(data);\r\n })\r\n .catch(error => {\r\n reject(error);\r\n });\r\n });","export const CHANGE_THEME = 'CHANGE_THEME';\n\nexport const changeTheme = theme => ({\n type: CHANGE_THEME,\n payload: theme,\n});\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport {\n UPDATE,\n Title, \n changeLocale,\n fetchEnd,\n fetchStart,\n translate\n} from 'react-admin';\nimport compose from 'recompose/compose';\nimport { changeTheme } from './actions';\nimport {\n Paper,\n CardHeader,\n RadioGroup,\n FormControlLabel,\n Radio,\n withStyles\n} from '@material-ui/core';\n\nimport { dataProvider, storage } from '../../providers';\n\nconst styles = {\n root: {\n display: 'flex',\n flexDirection: 'column'\n },\n radioGroup: {\n width: '94%',\n alignSelf: 'center'\n }\n\n};\n\n// Defaults at index 0\nconst themes = ['light', 'dark'];\nconst languages = ['en-GB', 'pt'];\n\nconst updateUserStorageAndSave = (field, value, fetchEnd, fetchStart) => {\n let settings = {\n language: languages[0],\n theme: themes[0] \n };\n const userStorage = storage.load('lbtoken');\n if(userStorage){\n userStorage.user.settings = userStorage.user.settings || {};\n userStorage.user.settings[field] = value;\n Object.keys(settings).forEach(key => {\n if (!userStorage.user.settings[key]) \n userStorage.user.settings[key] = settings[key];\n });\n storage.update('lbtoken', userStorage);\n changeInPersistence(userStorage, fetchEnd, fetchStart);\n }\n};\n\nconst changeInPersistence = (userStorage, fetchEnd, fetchStart) => {\n fetchStart();\n dataProvider(UPDATE, 'users', {\n id: userStorage.user.id,\n data: {\n settings: userStorage.user.settings\n }\n }).finally(fetchEnd());\n};\n\nconst handleLanguageClick = (changeLocale, language, fetchEnd, fetchStart) => {\n updateUserStorageAndSave('language', language, fetchEnd, fetchStart);\n changeLocale(language);\n};\n\nconst handleThemeClick = (changeTheme, theme, fetchEnd, fetchStart) => {\n updateUserStorageAndSave('theme', theme, fetchEnd, fetchStart);\n changeTheme(theme);\n};\n\nconst Configuration = ({ locale, theme, classes, fetchEnd, fetchStart, changeLocale, changeTheme, translate }) => {\n return \n \n <CardHeader title={translate('pos.language.name')}/>\n <RadioGroup className={classes.radioGroup} row name={'Language'} value={locale} onChange={(_, language) => handleLanguageClick(changeLocale, language, fetchEnd, fetchStart)}>\n {languages.map(element => (\n <FormControlLabel key={element} value={element} control={<Radio/>} label={translate(`pos.language.${element}`)} />\n ))}\n </RadioGroup>\n <CardHeader title={translate('pos.theme.name')}/>\n <RadioGroup className={classes.radioGroup} row name={'Theme'} value={theme} onChange={(_, theme) => handleThemeClick(changeTheme, theme, fetchEnd, fetchStart)}>\n {themes.map(element => (\n <FormControlLabel key={element} value={element} control={<Radio/>} label={translate(`pos.theme.${element}`)} />\n ))}\n </RadioGroup>\n </Paper>\n};\n\nconst mapStateToProps = state => ({\n theme: state.theme,\n locale: state.i18n.locale,\n});\n\nconst enhance = compose(\n connect(\n mapStateToProps,\n {\n changeLocale,\n changeTheme,\n fetchEnd,\n fetchStart\n }\n ),\n translate,\n withStyles(styles)\n);\n\nexport default enhance(Configuration)","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport compose from 'recompose/compose';\r\nimport { \r\n fetchStart,\r\n fetchEnd,\r\n SimpleForm,\r\n showNotification,\r\n TextInput,\r\n translate,\r\n UPDATE,\r\n} from 'react-admin';\r\nimport dataProvider from '../../providers/dataProvider';\r\n\r\nclass ProfileForm extends Component {\r\n\r\n updateProfile = (form) => {\r\n const { showNotification, fetchStart, fetchEnd } = this.props;\r\n const data = {\r\n username: form.username,\r\n name: form.name,\r\n email: form.email\r\n };\r\n // TO TRIGGER THE LOADING INDICATOR - NOT WORKING\r\n fetchStart();\r\n dataProvider(UPDATE, 'users', {\r\n id: form.id, \r\n data: data\r\n }).then(_ => {\r\n showNotification('pos.profile.profile_updated');\r\n this.props.updateStorage(form);\r\n this.props.changeEditSettings();\r\n }).catch((_) => {\r\n showNotification('pos.profile.profile_update_error', 'warning');\r\n }).finally(fetchEnd);\r\n }\r\n\r\n render() {\r\n const { \r\n translate, \r\n value = {}\r\n } = this.props;\r\n\r\n return ( \r\n <SimpleForm defaultValue={value} save={this.updateProfile}>\r\n <TextInput label={translate('resources.users.fields.username')} source=\"username\" />\r\n <TextInput label={translate('resources.users.fields.name')} source=\"name\" />\r\n <TextInput label={translate('resources.users.fields.email')} source=\"email\" />\r\n </SimpleForm>\r\n );\r\n }\r\n}\r\n\r\nconst enhance = compose(\r\n translate,\r\n connect(null, {\r\n fetchEnd,\r\n fetchStart,\r\n showNotification,\r\n })\r\n);\r\nexport default enhance(ProfileForm);","import React from 'react';\r\n\r\nimport { \r\n SimpleShowLayout,\r\n TextField,\r\n translate\r\n} from 'react-admin';\r\n\r\nconst ProfileShow = ({\r\n value = {},\r\n translate\r\n}) => (\r\n <SimpleShowLayout record={value}>\r\n <TextField label={translate('resources.users.fields.username')} source=\"username\" />\r\n <TextField label={translate('resources.users.fields.name')} source=\"name\" />\r\n <TextField label={translate('resources.users.fields.email')} source=\"email\" />\r\n </SimpleShowLayout>\r\n);\r\n\r\nexport default translate(ProfileShow);","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport compose from 'recompose/compose';\r\nimport { \r\n fetchStart,\r\n fetchEnd,\r\n SimpleForm,\r\n showNotification,\r\n TextInput,\r\n translate,\r\n} from 'react-admin';\r\n\r\nimport { API_URL } from '../../Configuration';\r\nimport { storage as localStorage } from 'react-admin-loopback';\r\n\r\nclass PasswordForm extends Component {\r\n state = {\r\n password: {\r\n old_password: null,\r\n new_password: null,\r\n repeat_password: null\r\n }\r\n }\r\n\r\n changePassword = (form) => {\r\n const { showNotification, fetchStart, fetchEnd } = this.props;\r\n if (form.new_password !== form.repeat_password) {\r\n showNotification('pos.profile.different_passwords', 'warning')\r\n return;\r\n }\r\n\r\n fetchStart();\r\n // Could not use the data provider\r\n fetch(`${API_URL}/users/change-password?access_token=${localStorage.load('lbtoken').id}`, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json; charset=utf-8\"\r\n },\r\n body: JSON.stringify({\r\n oldPassword: form.old_password,\r\n newPassword: form.new_password,\r\n }),\r\n }).then(response => {\r\n if (response.status === 204){\r\n showNotification('pos.profile.password_changed');\r\n } else {\r\n return response.json();\r\n }\r\n }).then(data => {\r\n if(typeof data === 'undefined' || data === null) {\r\n this.props.changeEditSettings();\r\n return;\r\n }\r\n showNotification(`error.${data.error.code}`, 'warning');\r\n }).finally(fetchEnd);\r\n }\r\n\r\n render() {\r\n const { \r\n translate\r\n } = this.props;\r\n\r\n return ( \r\n <SimpleForm record={this.state.password} save={this.changePassword}>\r\n <TextInput label={translate('pos.profile.old_password')} source=\"old_password\" type=\"password\" />\r\n <TextInput label={translate('pos.profile.new_password')} source=\"new_password\" type=\"password\" />\r\n <TextInput label={translate('pos.profile.repeat_password')} source=\"repeat_password\" type=\"password\" />\r\n </SimpleForm>\r\n );\r\n }\r\n}\r\n\r\nconst enhance = compose(\r\n translate,\r\n connect(null, {\r\n fetchEnd,\r\n fetchStart,\r\n showNotification,\r\n })\r\n);\r\nexport default enhance(PasswordForm);","import React, { Component } from 'react';\r\nimport {\r\n Title,\r\n translate,\r\n CardActions,\r\n Button,\r\n} from 'react-admin';\r\n\r\nimport {\r\n \r\n Card,\r\n CardContent\r\n} from '@material-ui/core'\r\n\r\nimport { storage as localStorage } from 'react-admin-loopback';\r\nimport EditIcon from '@material-ui/icons/Create';\r\nimport ShowIcon from '@material-ui/icons/RemoveRedEye';\r\nimport PasswordIcon from '@material-ui/icons/VpnKey';\r\n\r\nimport ProfileForm from './ProfileForm';\r\nimport ProfileShow from './ProfileShow';\r\nimport PasswordForm from './PasswordForm';\r\n\r\nclass Profile extends Component {\r\n state = {\r\n user: {},\r\n disableForm: true,\r\n passwordForm: false\r\n };\r\n\r\n componentWillMount() {\r\n this.storageToState();\r\n }\r\n\r\n storageToState = () => {\r\n if (localStorage.load('lbtoken').user) {\r\n this.setState({\r\n user: localStorage.load('lbtoken').user\r\n });\r\n }\r\n }\r\n\r\n updateStorage = (user) => {\r\n const lbtoken = localStorage.load('lbtoken');\r\n lbtoken.user = user;\r\n localStorage.update('lbtoken', lbtoken);\r\n\r\n this.setState({ user });\r\n }\r\n\r\n changeEditSettings = () => {\r\n let b = !this.state.disableForm;\r\n this.setState({\r\n disableForm: b,\r\n passwordForm: false\r\n });\r\n }\r\n\r\n changePasswordState = () => {\r\n let b = !this.state.passwordForm;\r\n this.setState({\r\n passwordForm: b\r\n });\r\n }\r\n\r\n render() {\r\n const { user, disableForm, passwordForm } = this.state;\r\n const { translate } = this.props;\r\n\r\n let edit_label = translate('ra.action.edit');\r\n let edit_icon = <EditIcon />;\r\n if(!disableForm) {\r\n edit_label = translate('ra.action.show');\r\n edit_icon = <ShowIcon />;\r\n }\r\n return (\r\n <Card>\r\n <Title title={translate('pos.profile.profile')} />\r\n\r\n <CardContent>\r\n <CardActions>\r\n {!disableForm && !passwordForm && \r\n <Button\r\n onClick={this.changePasswordState}\r\n label={translate('pos.profile.change_password')}\r\n >\r\n <PasswordIcon />\r\n </Button>\r\n }\r\n\r\n <Button\r\n onClick={this.changeEditSettings}\r\n label={edit_label}\r\n >\r\n {edit_icon}\r\n </Button>\r\n </CardActions>\r\n\r\n {disableForm && <ProfileShow value={user} />}\r\n\r\n {!disableForm && !passwordForm &&\r\n <ProfileForm \r\n value={user} \r\n changeEditSettings={this.changeEditSettings}\r\n updateStorage={this.updateStorage}\r\n />\r\n }\r\n\r\n {!disableForm && passwordForm && \r\n <PasswordForm\r\n changeEditSettings={this.changeEditSettings} \r\n />\r\n }\r\n\r\n </CardContent>\r\n </Card>\r\n );\r\n }\r\n}\r\n\r\nexport default translate(Profile);","import L from 'leaflet';\nL.MobMeasureControl = L.Control.extend({\n initialize(options = {}) {\n const defaultOptions = {\n position: 'topleft',\n formatOutput: output => `${output || ''}`,\n lineColor: 'black',\n lineWeight: 3,\n lineOpacity: 0.9,\n innerHtml: '⇢'\n };\n L.Util.setOptions(this, defaultOptions);\n L.Util.setOptions(this, options);\n },\n\n onAdd(map) {\n const className = 'leaflet-control-zoom leaflet-bar leaflet-control',\n container = L.DomUtil.create('div', className);\n this._createButton('leaflet-control-measure leaflet-bar-part leaflet-bar-part-top-and-bottom', container);\n return container;\n },\n\n azimuth(points) {\n\n const λ1 = points[0].lng, \n λ2 = points[1].lng, \n φ1 = points[0].lat,\n φ2 = points[1].lat;\n \n const tmp = Math.sin((λ2-λ1)*Math.PI/180) / ((Math.cos(φ1*Math.PI/180) * Math.tan(φ2*Math.PI/180)) - (Math.sin(φ1*Math.PI/180) * Math.cos((λ2-λ1)*Math.PI/180)))\n const B = Math.atan(tmp)*(180/Math.PI);\n \n let result = B;\n \n result = B < 0 ? B + 360 : B + 180;\n \n if(points[0].lng < points[1].lng) \n result = result < 180 ? result + 180 : result - 180; \n else if(points[0].lng === points[1].lng && points[0].lat <= points[1].lat) \n result = 0;\n \n return result;\n },\n \n\n _createButton: function (className, container) {\n const button = L.DomUtil.create('a', className, container);\n button.innerHTML = this.options.innerHtml;\n button.addEventListener('click', () => this._toogleMeasure());\n L.DomEvent.disableClickPropagation(button);\n },\n\n _toogleMeasure: function () {\n this._measuring = !this._measuring;\n if (this._measuring) {\n L.DomUtil.addClass(this._container, 'leaflet-control-measure-on');\n this._startMeasure();\n } else {\n L.DomUtil.removeClass(this._container, 'leaflet-control-measure-on');\n this._stopMeasure();\n }\n },\n\n _startMeasure: function () {\n this._oldCursor = this._map._container.style.cursor;\n this._map._container.style.cursor = 'crosshair';\n\n L.DomEvent.on(this._map, 'click', this._mouseClick, this);\n },\n\n _stopMeasure: function () {\n this._map._container.style.cursor = this._oldCursor;\n\n this._clear();\n\n L.DomEvent.off(this._map, 'click', this._mouseClick, this);\n },\n\n _mouseClick: function (e) {\n if (!e.latlng) {\n return;\n }\n\n this._draw(e);\n },\n\n _draw(e) {\n if (!this._start) {\n this._start = new L.marker(e.latlng).addTo(this._map);\n } else if (!this._end) {\n this._end = new L.marker(e.latlng).addTo(this._map);\n\n this._path = new L.Polyline([this._start.getLatLng(), this._end.getLatLng()], {\n color: this.options.lineColor,\n weight: this.options.lineWeight,\n opacity: this.options.lineOpacity,\n smoothFactor: 1\n }).addTo(this._map);\n \n let distance = e.latlng.distanceTo(this._start.getLatLng());\n let azimuth = this.azimuth([this._start.getLatLng(), this._end.getLatLng()])\n this._tooltip = this._createTooltip(e.latlng, this.options.formatOutput(distance, azimuth));\n } else {\n this._clear();\n this._draw(e);\n }\n },\n\n _clear() {\n if (this._start) {\n this._map.removeLayer(this._start);\n this._start = undefined;\n }\n\n if (this._end) {\n this._map.removeLayer(this._end);\n this._end = undefined;\n }\n\n if (this._path) {\n this._map.removeLayer(this._path);\n this._path = undefined;\n }\n\n if (this._tooltip) {\n this._map.removeLayer(this._tooltip);\n this._tooltip = undefined;\n }\n },\n\n _createTooltip: function (position, text) {\n var icon = L.divIcon({\n className: 'leaflet-measure-tooltip',\n iconAnchor: [-5, -5]\n });\n\n this.tooltip = L.marker(position, {\n icon: icon,\n clickable: false\n }).addTo(this._map);\n\n this.tooltip._icon.innerHTML = text;\n\n return this.tooltip;\n }\n});\n\nL.mobMeasureControl = options => new L.MobMeasureControl(options);\n","import MobMeasureControl from './MobMeasureControl';\r\n\r\nexport default MobMeasureControl;","import { MapControl } from 'react-leaflet';\r\nimport L from 'leaflet';\r\nimport './leaflet-mobmeasure.js';\r\nimport './leaflet-mobmeasure.css';\r\n\r\nexport default class MobMeasureControl extends MapControl {\r\n\tcreateLeafletElement(props) {\r\n\t\t// const { minSize = 10, markerCluster, markerOptions, ...options } = props;\r\n\t\treturn L.mobMeasureControl(props);\r\n\t}\r\n\r\n\tcomponentDidMount() {\r\n\t\tconst { map } = this.context;\r\n\t\tthis.leafletElement.addTo(map);\r\n\t}\r\n}","import L from 'leaflet'\nexport var ExtraMarkers = L.ExtraMarkers = {};\nExtraMarkers.version = L.ExtraMarkers.version = \"1.0.8\";\nExtraMarkers.Icon = L.ExtraMarkers.Icon = L.Icon.extend({\n options: {\n iconSize: [37, 49], // size of the icon\n shadowSize: [35, 16], // size of the shadow\n iconAnchor: [18, 45], // point of the icon which will correspond to marker's location\n shadowAnchor: [11, 12], // the same for the shadow\n popupAnchor: [0, -38], // point from which the popup should open relative to the iconAnchor\n \n \n // marker2.png\n // iconSize: [33, 44], // size of the icon\n // shadowSize: [35, 16], // size of the shadow\n // iconAnchor: [16, 41], // point of the icon which will correspond to marker's location\n // shadowAnchor: [11, 12], // the same for the shadow\n // popupAnchor: [0, -31], // point from which the popup should open relative to the iconAnchor\n \n \n // _marker.png\n // iconSize: [30, 44], // size of the icon\n // shadowSize: [35, 16], // size of the shadow\n // iconAnchor: [15, 41], // point of the icon which will correspond to marker's location\n // shadowAnchor: [11, 12], // the same for the shadow\n // popupAnchor: [0, -32], // point from which the popup should open relative to the iconAnchor\n \n \n className: \"\",\n prefix: \"\",\n extraClasses: \"\",\n shape: \"circle\",\n icon: \"\",\n innerHTML: \"\",\n markerColor: \"red\",\n svgBorderColor: \"#fff\",\n svgOpacity: 1,\n iconColor: \"#fff\",\n number: \"\",\n svg: false\n },\n initialize: function(options) {\n options = L.Util.setOptions(this, options);\n },\n createIcon: function() {\n var div = document.createElement(\"div\"),\n options = this.options;\n if (options.icon) {\n div.innerHTML = this._createInner();\n }\n if (options.innerHTML) {\n div.innerHTML = options.innerHTML;\n }\n // if (options.bgPos) {\n // div.style.backgroundPosition = -options.bgPos.x + \"px \" + -options.bgPos.y + \"px\";\n // }\n if (!options.svg) {\n this._setIconStyles(div, options.shape + \"-\" + options.markerColor);\n } else {\n this._setIconStyles(div, \"svg\");\n }\n return div;\n },\n _createInner: function() {\n var iconColorStyle = \"\",\n iconNumber = \"\",\n options = this.options;\n if (options.iconColor) {\n iconColorStyle = \"style='color: \" + options.iconColor + \"' \";\n }\n if (options.number) {\n iconNumber = \"number='\" + options.number + \"' \";\n }\n // if (options.svg) {\n // var svg = '<svg xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 69.529271 95.44922\" style=\"fill:' + options.markerColor + \";stroke:\" + options.svgBorderColor + \";fill-opacity:\" + options.svgOpacity + ';\" height=\"100%\" width=\"100%\" version=\"1.1\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\"><g transform=\"translate(-139.52 -173.21)\"><path d=\"m174.28 173.21c-19.199 0.00035-34.764 15.355-34.764 34.297 0.007 6.7035 1.5591 12.813 5.7461 18.854l0.0234 0.0371 28.979 42.262 28.754-42.107c3.1982-5.8558 5.9163-11.544 6.0275-19.045-0.0001-18.942-15.565-34.298-34.766-34.297z\"/></g></svg>';\n // if (options.shape === \"square\") {\n // svg = '<svg xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 69.457038 96.523441\" style=\"fill:' + options.markerColor + \";stroke:\" + options.svgBorderColor + \";fill-opacity:\" + options.svgOpacity + ';\" height=\"100%\" width=\"100%\" version=\"1.1\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\"><g transform=\"translate(-545.27 -658.39)\"><path d=\"m545.27 658.39v65.301h22.248l12.48 31.223 12.676-31.223h22.053v-65.301h-69.457z\"/></g></svg>';\n // }\n // if (options.shape === \"star\") {\n // svg = '<svg style=\"top:0; fill:' + options.markerColor + \";stroke:\" + options.svgBorderColor + \";fill-opacity:\" + options.svgOpacity + ';\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns=\"http://www.w3.org/2000/svg\" height=\"100%\" width=\"100%\" version=\"1.1\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" viewBox=\"0 0 77.690999 101.4702\"><g transform=\"translate(-101.15 -162.97)\"><g transform=\"matrix(1 0 0 1.0165 -65.712 -150.28)\"><path d=\"m205.97 308.16-11.561 11.561h-16.346v16.346l-11.197 11.197 11.197 11.197v15.83h15.744l11.615 33.693 11.467-33.568 0.125-0.125h16.346v-16.346l11.197-11.197-11.197-11.197v-15.83h-15.83l-11.561-11.561z\"/></g></g></svg>';\n // }\n // if (options.shape === \"penta\") {\n // svg = '<svg style=\"fill:' + options.markerColor + \";stroke:\" + options.svgBorderColor + \";fill-opacity:\" + options.svgOpacity + ';\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 71.550368 96.362438\" height=\"100%\" width=\"100%\" version=\"1.1\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\"><g transform=\"translate(-367.08 -289.9)\"><path d=\"m367.08 322.5 17.236-32.604h36.151l18.164 32.25-35.665 64.112z\"/></g></svg>';\n // }\n // return svg + \"<i \" + iconNumber + iconColorStyle + \"class='\" + options.extraClasses + \" \" + options.prefix + \" \" + options.icon + \"'></i>\";\n // }\n return \"<i \" + iconNumber + iconColorStyle + \"class='\" + options.extraClasses + \" \" + options.prefix + \" \" + options.icon + \"'></i>\";\n },\n _setIconStyles: function(img, name) {\n var options = this.options,\n size = L.point(options[name === \"shadow\" ? \"shadowSize\" : \"iconSize\"]),\n anchor, leafletName;\n if (name === \"shadow\") {\n anchor = L.point(options.shadowAnchor || options.iconAnchor);\n leafletName = \"shadow\";\n } else {\n anchor = L.point(options.iconAnchor);\n leafletName = \"icon\";\n }\n if (!anchor && size) {\n anchor = size.divideBy(2, true);\n }\n img.className = \"leaflet-marker-\" + leafletName + \" extra-marker extra-marker-\" + name + \" \" + options.className;\n if (anchor) {\n img.style.marginLeft = -anchor.x + \"px\";\n img.style.marginTop = -anchor.y + \"px\";\n }\n if (size) {\n img.style.width = size.x + \"px\";\n img.style.height = size.y + \"px\";\n }\n },\n createShadow: function() {\n var div = document.createElement(\"div\");\n this._setIconStyles(div, \"shadow\");\n return div;\n }\n});\nExtraMarkers.icon = L.ExtraMarkers.icon = function(options) {\n return new L.ExtraMarkers.Icon(options);\n};","import React, { Component } from 'react';\r\nimport { Popup } from 'react-leaflet';\r\nimport { translate } from 'react-admin';\r\nimport moment from 'moment';\r\n\r\nconst hiddenProperties = ['gpstime', 'timestamp', 'position', 'properties', 'serialNumber', 'id', 'key'];\r\n\r\nclass PathPopup extends Component {\r\n\r\n render () {\r\n const { element, last, translate } = this.props;\r\n const { properties } = last;\r\n\r\n return (\r\n <Popup>\r\n <div>\r\n <h3>{element.name}</h3>\r\n {\r\n properties.timestamp &&\r\n <div>time: {moment(properties.timestamp).utc().format('DD-MM-YYYY HH:mm:ss')} UTC</div>\r\n }\r\n {Object.keys(properties).map((key) => {\r\n if(!hiddenProperties.includes(key) && properties[key].value) {\r\n const prop = properties[key].value + (properties[key].unit ? ` ${properties[key].unit}`: '');\r\n return <div key={`${element.id}-${key}`}>\r\n {`${key}`}: {properties[key].value ? prop : translate('containers.properties.no_data')}\r\n </div>\r\n } else {\r\n return null;\r\n }\r\n })}\r\n </div>\r\n </Popup>\r\n );\r\n }\r\n}\r\n\r\nexport default translate(PathPopup);","import React, { Component } from 'react';\r\nimport {\r\n LayerGroup,\r\n Marker,\r\n Polyline,\r\n} from 'react-leaflet';\r\n\r\nimport '../../plugins/leaflet-extra-markers-improved/js/leaflet.extra-markers.min.js';\r\nimport '../../plugins/leaflet-extra-markers-improved/css/leaflet.extra-markers.min.css';\r\n// import '../../plugins/leaflet-extra-markers/js/leaflet.extra-markers.min.js';\r\n// import '../../plugins/leaflet-extra-markers/css/leaflet.extra-markers.min.css';\r\n\r\nimport L from 'leaflet';\r\n\r\nimport PathPopup from './PathPopup';\r\n\r\nclass PathLayer extends Component {\r\n\r\n render () {\r\n const { layer } = this.props;\r\n const path = layer.position.map((pos) => pos.geometry.coordinates.slice().reverse());\r\n return <LayerGroup>\r\n <Polyline positions={path} color={layer.position[0].style.color}/>\r\n <Marker position={path[path.length - 1]}\r\n icon={L.ExtraMarkers.icon({\r\n icon: layer.wavy.id.length > 4 ? 'fb-number' : 'fa-number',\r\n markerColor: 'blue',\r\n prefix: 'fa',\r\n number: `${layer.wavy.id.substr(0, 2)}\\n${layer.wavy.id.substr(2, layer.wavy.id.length)}`,\r\n })} \r\n id={layer.wavy.id}\r\n >\r\n <PathPopup element={layer.wavy} last={layer.position[path.length - 1]} />\r\n </Marker>\r\n </LayerGroup>\r\n }\r\n}\r\n\r\nexport default PathLayer;","import { Control, DomUtil, DomEvent } from 'leaflet'\r\n\r\n//Static className fixes the problem for now but may cause problems in the future\r\nexport default Control.extend({\r\n options: {\r\n className: 'leaflet-bar'\r\n },\r\n\r\n onAdd: function(map){\r\n var _controlDiv = DomUtil.create('div',this.options.className)\r\n DomEvent.disableClickPropagation(_controlDiv);\r\n return _controlDiv\r\n },\r\n\r\n onRemove: function(map){\r\n \r\n }\r\n\r\n})\r\n","import ReactDOM from 'react-dom'\r\nimport { MapControl } from 'react-leaflet'\r\nimport LeafletControl from './LeafletControl'\r\n\r\nexport default class Control extends MapControl {\r\n\r\n componentWillMount(){\r\n this.leafletElement = this.createLeafletElement(this.props)\r\n this.leafletElement.addTo(this.context.map)\r\n }\r\n\r\n componentDidMount(){\r\n\r\n }\r\n\r\n createLeafletElement() {\r\n return new LeafletControl(this.props)\r\n }\r\n\r\n render() {\r\n return ReactDOM.createPortal(this.props.children, this.leafletElement.getContainer())\r\n }\r\n\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Button, withStyles } from '@material-ui/core';\r\nimport { FilterCenterFocus as CenterIcon } from '@material-ui/icons';\r\n\r\nimport { Control } from 'react-leaflet-control-inesc';\r\nimport L from 'leaflet';\r\n\r\nconst styles = {\r\n button: {\r\n padding: 0,\r\n minHeight: 0,\r\n minWidth: 0,\r\n width: '30px',\r\n height:'30px',\r\n }\r\n}\r\n\r\nclass CenterControl extends Component {\r\n centerMap = () => {\r\n const { map } = this.props;\r\n let latlngs = [];\r\n\r\n map.eachLayer(layer => {\r\n // Not valid for live map - No GeoJSON available\r\n // if(layer instanceof L.GeoJSON)\r\n // latlngs = layer.getBounds();\r\n if ((layer instanceof L.Polyline) && (layer.getLatLngs().length > 0))\r\n latlngs = latlngs.concat(layer.getLatLngs());\r\n });\r\n\r\n if (latlngs.length > 0)\r\n map.fitBounds(latlngs);\r\n };\r\n\r\n render() {\r\n const {classes, ...props} = this.props\r\n return (\r\n <Control position=\"topleft\" className=\"leaflet-control-zoom leaflet-bar leaflet-control\">\r\n <div style={{background:'white'}}>\r\n <Button \r\n {...props}\r\n classes={{root:classes.button}}\r\n onClick={this.centerMap}\r\n >\r\n <CenterIcon style={{fontSize:'15px', padding:'8px', color:'black'}}/>\r\n </Button>\r\n </div>\r\n </Control>\r\n );\r\n }\r\n}\r\n\r\nexport default withStyles(styles)(CenterControl);","import React, { Component } from 'react';\r\nimport { Button, withStyles } from '@material-ui/core';\r\nimport { \r\n GpsFixed,\r\n GpsNotFixed,\r\n GpsOff\r\n} from '@material-ui/icons';\r\n\r\nimport { Control } from 'react-leaflet-control-inesc';\r\nimport L from 'leaflet';\r\nimport '../map/location.css';\r\n\r\nconst styles = {\r\n button: {\r\n padding: 0,\r\n minHeight: 0,\r\n minWidth: 0,\r\n width: '30px',\r\n height:'30px',\r\n }\r\n}\r\n\r\nclass LocationControl extends Component {\r\n state = {\r\n marker: null,\r\n geoId: null,\r\n status: 0\r\n };\r\n\r\n updateMarker = (position) => {\r\n const { marker } = this.state;\r\n const { map } = this.props;\r\n const { latitude, longitude, accuracy } = position.coords;\r\n\r\n if (!marker) {\r\n const innerCircle = L.marker([latitude, longitude], {\r\n icon: L.divIcon({className: 'location-icon'})\r\n });\r\n \r\n const circle = L.circle([latitude, longitude], {\r\n opacity: 0.4,\r\n fillOpacity: .1,\r\n weight: 1,\r\n radius: accuracy\r\n });\r\n \r\n const pin = L.layerGroup([innerCircle, circle]).addTo(map);\r\n map.setView(new L.LatLng(latitude, longitude), 18);\r\n this.setState({marker: pin, status: 1});\r\n } else {\r\n marker.eachLayer((layer) => {\r\n if (layer instanceof L.Marker) {\r\n layer.setLatLng([latitude, longitude]);\r\n } else if (layer instanceof L.Circle) {\r\n layer.setLatLng([latitude, longitude]);\r\n layer.setRadius(accuracy);\r\n }\r\n });\r\n }\r\n };\r\n\r\n currentLocation = () => {\r\n const { marker, geoId } = this.state;\r\n const { map } = this.props;\r\n if(!marker) {\r\n const geoId = navigator.geolocation.watchPosition(position => {\r\n this.updateMarker(position);\r\n }, _ => { \r\n this.setState({status: -1});\r\n }, {\r\n enableHighAccuracy: false,\r\n });\r\n \r\n this.setState({geoId: geoId});\r\n } else {\r\n navigator.geolocation.clearWatch(geoId);\r\n map.removeLayer(marker);\r\n this.setState({marker: null, geoId: null, status: 0});\r\n }\r\n };\r\n\r\n render() {\r\n const {classes, ...props} = this.props\r\n const {status} = this.state;\r\n\r\n let button;\r\n switch (status) {\r\n case 0:\r\n button = <GpsFixed style={{fontSize:'15px', padding:'8px', color:'black'}}/>;\r\n break;\r\n case 1:\r\n button = <GpsNotFixed style={{fontSize:'15px', padding:'8px', color:'black'}}/>;\r\n break;\r\n default:\r\n button = <GpsOff style={{fontSize:'15px', padding:'8px', color:'black'}}/>;\r\n break;\r\n }\r\n\r\n return (\r\n <Control position=\"topleft\" className=\"leaflet-control-zoom leaflet-bar leaflet-control\">\r\n <div style={{background:'white'}}>\r\n <Button \r\n {...props}\r\n classes={{root:classes.button}}\r\n onClick={this.currentLocation}\r\n >\r\n {button}\r\n </Button>\r\n </div>\r\n </Control>\r\n );\r\n }\r\n}\r\n\r\nexport default withStyles(styles)(LocationControl);","import React from 'react';\nimport { Button, withStyles } from '@material-ui/core';\nimport ArrowBackIcon from '@material-ui/icons/ArrowBack';\nimport { translate } from 'react-admin';\nimport compose from 'recompose/compose';\n\nconst styles = {\n backButton: {\n marginTop: '10%',\n marginBottom: '10px',\n float: \"left\",\n padding: 0,\n minHeight: \"19px\",\n minWidth: \"15%\",\n color: \"white\",\n backgroundColor: 'rgba(63, 81, 181, 0.8)',\n \"&:hover\": {\n background: 'rgba(63, 81, 181, 1)'\n }\n },\n nextButton: {\n marginTop: '10%',\n marginBottom: '10px',\n float: \"right\",\n padding: 0,\n minHeight: 0,\n width: \"auto\",\n minWidth: \"35%\",\n color: \"white\",\n backgroundColor: 'rgba(63, 81, 181, 0.8)',\n \"&:hover\": {\n background: 'rgba(63, 81, 181, 1)'\n }\n },\n icon: {\n height: \"17px\"\n },\n};\n\nexport default compose(translate, withStyles(styles))(({ classes, back = true, nextStageControl, prestage, nextstage, translate, ...props }) => {\n const nextClick = () => {\n if(nextStageControl)\n nextStageControl();\n else\n nextstage();\n }\n\n return (\n <div style={{ overflow: \"hidden\" }}>\n {back &&\n <Button\n classes={{ root: classes.backButton }}\n onClick={() => { prestage() }}\n >\n <ArrowBackIcon classes={{ root: classes.icon }} />\n </Button>\n }\n <Button\n classes={{ root: classes.nextButton }}\n onClick={nextClick}\n >\n { translate('containers.annotations.next') }\n </Button>\n </div>\n );\n});","import React from 'react';\nimport { translate } from 'react-admin';\nimport Toolbar from './Toolbar';\nimport compose from 'recompose/compose';\n\nexport default compose(translate)(({translate, ...props}) => {\n return (\n <div style={{ marginTop: \"5%\", paddingLeft: '10px', paddingRight: '10px' }}>\n \n <div>\n { translate('containers.annotations.choose', { hour: translate('containers.annotations.begin')}) }\n </div>\n \n <Toolbar back={false} {...props}/>\n </div>\n );\n});","import React from 'react';\nimport { \n translate,\n showNotification \n} from 'react-admin';\nimport compose from 'recompose/compose';\nimport { connect } from 'react-redux'\nimport { Toolbar } from './';\nimport { ShowTime } from '../'\n\nexport default compose(\n translate, \n connect(\n null, {\n showNotification\n }\n ))(({translate, nextstage, beginTime, showNotification, ...props}) => {\n \n const nextStageControl = () => {\n if(props.map.time <= beginTime){\n showNotification('containers.annotations.need_be_bigger', 'warning');\n }\n else {\n nextstage();\n }\n }\n\n return (\n <div style={{ marginTop: \"5%\", paddingLeft: '10px', paddingRight: '10px' }}>\n {ShowTime(translate('containers.annotations.begin'), beginTime)}\n <div>\n { translate('containers.annotations.choose', { hour: translate('containers.annotations.end')}) }\n </div>\n \n <Toolbar nextStageControl={nextStageControl} {...props}/>\n </div>\n );\n});","import React from 'react';\nimport { translate } from 'react-admin';\nimport compose from 'recompose/compose';\nimport { Toolbar } from './';\nimport { ShowTime } from '../';\n\n\nexport default compose(translate)(({translate, beginTime, endTime, ...props}) => {\n\n\n return (\n <div style={{ marginTop: \"5%\", paddingLeft: '10px', paddingRight: '10px' }}>\n <div> {ShowTime(translate('containers.annotations.begin'), beginTime)} </div>\n <div> {ShowTime(translate('containers.annotations.end'), endTime)} </div>\n <Toolbar {...props}/>\n </div>\n );\n});","import moment from 'moment';\n\nexport default (timeText, time, no_text = false) => {\n return (no_text ? `` : `${timeText}:`) + ` ${ moment(time).utc().format('DD-MM-YYYY HH:mm:ss') } UTC`;\n}","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { reset as resetFormAction } from 'redux-form';\nimport compose from 'recompose/compose';\nimport {\n LongTextInput,\n fetchEnd,\n fetchStart,\n ReferenceArrayInput,\n SelectArrayInput,\n ChipField,\n SimpleForm,\n showNotification,\n translate,\n // required\n} from 'react-admin';\nimport {\n Dialog, IconButton,\n DialogTitle,\n DialogContent,\n withStyles\n} from '@material-ui/core';\nimport { Close as CloseIcon } from '@material-ui/icons'\nimport PropTypes from 'prop-types';\nimport ShowTime from './ShowTime';\nimport { dataFetch } from '../../providers';\n\nconst styles = {\n content: { padding: 0 },\n titleDiv: {\n display: 'flex',\n justifyContent: 'space-between'\n },\n closeButton: {\n marginTop: '0.5em',\n marginRight: '0.5em'\n },\n TextField: {\n maxWidth: \"80%\",\n display: 'flex',\n margin: '0 auto'\n },\n\n times: {\n paddingLeft: \"24px\",\n paddingRight: \"24px\"\n }\n};\n\nclass Details extends Component {\n handleSave = (record) => {\n const { beginTime, endTime, recordId, showNotification, onClose, success } = this.props\n const headers = new Headers({\n Accept: 'application/json',\n \"Content-Type\": \"application/json\"\n });\n\n\n const filter = {\n intervals: [\n {\n beginTime: beginTime, //new Date(beginTime),\n endTime: endTime //new Date(endTime)\n },\n ],\n derivedsetId: recordId,\n text: record.description,\n tags: record.tagIds\n }\n\n const method = 'POST', url = '/annotations';\n\n dataFetch(method, url, headers, JSON.stringify(filter))\n .then(result => {\n onClose();\n success();\n })\n .catch(err => showNotification('resources.annotations.messages.createAnnotations', 'warning'));\n }\n\n componentDidMount() {\n this.props.reset('annotation');\n }\n\n render() {\n const { beginTime, endTime, translate, onClose, fullWidth, open, classes, description, tagIds } = this.props\n return (<Dialog open={open} onClose={onClose} fullWidth={fullWidth}>\n <span className={classes.titleDiv}>\n <DialogTitle >\n {translate('containers.annotations.modalTitle')}\n </DialogTitle>\n\n <IconButton classes={{ root: classes.closeButton }} onClick={() => onClose()}>\n <CloseIcon />\n </IconButton>\n </span>\n <DialogContent onClick={this.handleCLick}>\n <div className={classes.times}>\n <p > {ShowTime(translate('containers.annotations.begin'), beginTime)} </p>\n <p > {ShowTime(translate('containers.annotations.end'), endTime)} </p>\n </div>\n <SimpleForm form='annotation' save={this.handleSave} resource={'annotations'}>\n <LongTextInput source='description' defaultValue={description || \"\"} />\n <ReferenceArrayInput reference='tags' source='tagIds'>\n <Selection selected={tagIds} />\n </ReferenceArrayInput>\n </SimpleForm>\n </DialogContent>\n </Dialog>\n )\n }\n}\nconst Selection = ({ selected, basePath, tagIds, ...props }) => {\n props.input.value = props.input.value === \"\" ? selected : props.input.value;\n\n return <SelectArrayInput {...props}>\n <ChipField source='name' />\n </SelectArrayInput>;\n}\nDetails.propTypes = {\n classes: PropTypes.object.isRequired,\n onClose: PropTypes.func,\n};\n\nconst enhance = compose(\n translate,\n withStyles(styles),\n connect(null, {\n fetchStart,\n fetchEnd,\n showNotification,\n reset: resetFormAction,\n\n })\n);\n\nexport default enhance(Details);","import React, { Component } from 'react';\nimport { Button, withStyles } from '@material-ui/core';\nimport { NoteAdd as NoteAddIcon } from '@material-ui/icons';\nimport { Control } from 'react-leaflet-control-inesc';\nimport { \n StageOne,\n StageTwo,\n StageThree\n} from './map'\n\nimport Details from './Details';\nimport {\n showNotification\n} from 'react-admin';\nimport { connect } from 'react-redux';\nimport compose from 'recompose/compose';\n\nconst styles = {\n button: {\n padding: 0,\n minHeight: 0,\n minWidth: 0,\n width: '30px',\n height: '30px',\n },\n checkBox: {\n margin: '10px',\n background: \"green\"\n }\n}\n\nclass AnotationControl extends Component {\n\n constructor(props) {\n super(props);\n\n this.state = {\n active: false,\n stage: 1,\n beginTime: undefined,\n endTime: undefined,\n modal_open: false\n }\n\n this.nextStage = this.nextStage.bind(this);\n this.preStage = this.preStage.bind(this);\n }\n\n onClose = () => {\n this.setState({ modal_open: false, stage: 3 });\n }\n\n nextStage = () => {\n let { stage } = this.state;\n\n if (this.props.map.time === 0 && (stage === 1 || stage === 3)) { \n this.props.showNotification('pos.annotation.loading');\n return;\n }\n if (stage === 1)\n this.setState({ beginTime: this.props.map.time });\n else if (stage === 2)\n this.setState({ endTime: this.props.map.time });\n else\n this.setState({ modal_open: true });\n\n this.setState({ stage: stage + 1 });\n }\n\n preStage = () => {\n this.setState({ stage: this.state.stage - 1 })\n }\n\n success = () => {\n this.setState({ stage: 1, beginTime: undefined, endTime: undefined, active: false });\n this.props.refreshData();\n }\n\n render() {\n const { classes, recordId, refreshData, showNotification, ...props } = this.props\n const { active, stage, modal_open } = this.state;\n return (\n <Control position=\"topleft\" className=\"leaflet-control-zoom leaflet-bar leaflet-control\">\n <div style={{ background: 'white' }}>\n <Button\n {...props}\n classes={{ root: classes.button }}\n onClick={() => { this.setState({ active: !active }) }}\n >\n <NoteAddIcon style={{ fontSize: '15px', padding: '8px', color: 'black' }} />\n </Button>\n\n {active &&\n (\n (\n stage === 1 &&\n <StageOne map={this.props.map} nextstage={this.nextStage} />\n ) ||\n (\n stage === 2 &&\n <StageTwo map={this.props.map} nextstage={this.nextStage} prestage={this.preStage} beginTime={this.state.beginTime} />\n ) ||\n (\n stage >= 3 &&\n <StageThree map={this.props.map} nextstage={this.nextStage} prestage={this.preStage} beginTime={this.state.beginTime} endTime={this.state.endTime} />\n )\n )\n }\n {\n active &&\n stage === 4 &&\n <Details open={modal_open} onClose={this.onClose} beginTime={this.state.beginTime} endTime={this.state.endTime} recordId={recordId} success={this.success}/>\n }\n\n </div>\n </Control>\n );\n }\n}\n\nconst enhance = compose(\n withStyles(styles),\n connect(null, {\n showNotification\n })\n);\n\nexport default enhance(AnotationControl);","import React, { Children, Fragment, isValidElement } from 'react';\nimport PropTypes from 'prop-types';\nimport compose from 'recompose/compose';\nimport MuiToolbar from '@material-ui/core/Toolbar';\nimport withWidth from '@material-ui/core/withWidth';\nimport { withStyles, createStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\n\nimport { SaveButton, DeleteWithConfirmButton, Button } from 'react-admin';\nimport ContentEdit from '@material-ui/icons/Edit';\n\nconst styles = theme => createStyles({\n toolbar: {\n backgroundColor:\n theme.palette.type === 'light'\n ? theme.palette.grey[100]\n : theme.palette.grey[900],\n },\n desktopToolbar: {\n marginTop: theme.spacing.unit * 2,\n },\n mobileToolbar: {\n position: 'fixed',\n bottom: 0,\n left: 0,\n right: 0,\n padding: '16px',\n width: '100%',\n boxSizing: 'border-box',\n flexShrink: 0,\n zIndex: 2,\n },\n defaultToolbar: {\n flex: 1,\n display: 'flex',\n justifyContent: 'space-between',\n },\n spacer: {\n [theme.breakpoints.down('xs')]: {\n height: '5em',\n },\n },\n});\n\nconst valueOrDefault = (value, defaultValue) =>\n typeof value === 'undefined' ? defaultValue : value;\n\nconst Toolbar = ({\n basePath,\n children,\n classes,\n className,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n pristine,\n record,\n redirect,\n resource,\n saving,\n save,\n edit,\n editing,\n submitOnEnter,\n width,\n refreshOnDelete,\n saveDisabled = false,\n ...rest\n}) => (\n <Fragment>\n <MuiToolbar\n className={classnames(\n classes.toolbar,\n {\n [classes.mobileToolbar]: width === 'xs',\n [classes.desktopToolbar]: width !== 'xs',\n },\n className\n )}\n role=\"toolbar\"\n {...rest}\n >\n {Children.count(children) === 0 ? (\n <div className={classes.defaultToolbar}>\n {edit &&\n <Button\n // icon={<ContentSave />}\n label={'ra.action.edit'}\n // invalid={invalid}\n // redirect={redirect}\n onClick={editing}\n color={'primary'}\n // editing={editing}\n // submitOnEnter={submitOnEnter}\n >\n <ContentEdit />\n </ Button >\n }\n {save && <SaveButton\n handleSubmitWithRedirect={handleSubmitWithRedirect}\n invalid={invalid}\n redirect={redirect}\n saving={saving}\n submitOnEnter={submitOnEnter}\n disabled={saveDisabled}\n />}\n {record && typeof record.id !== 'undefined' && (\n // <DeleteButton \n // basePath={basePath}\n // record={record}\n // resource={resource}\n // />\n <DeleteWithConfirmButton\n className={classes.deleteButton}\n resource={resource}\n record={record}\n redirect={refreshOnDelete}\n />\n )}\n </div>\n ) : (\n Children.map(children, button =>\n button && isValidElement(button)\n ? React.cloneElement(button, {\n basePath,\n handleSubmit: valueOrDefault(\n button.props.handleSubmit,\n handleSubmit\n ),\n handleSubmitWithRedirect: valueOrDefault(\n button.props.handleSubmitWithRedirect,\n handleSubmitWithRedirect\n ),\n invalid,\n pristine,\n record,\n resource,\n saving,\n submitOnEnter: valueOrDefault(\n button.props.submitOnEnter,\n submitOnEnter\n ),\n })\n : null\n )\n )}\n </MuiToolbar>\n <div className={classes.spacer} />\n </Fragment>\n);\n\nToolbar.propTypes = {\n basePath: PropTypes.string,\n children: PropTypes.node,\n classes: PropTypes.object,\n className: PropTypes.string,\n handleSubmit: PropTypes.func,\n handleSubmitWithRedirect: PropTypes.func,\n invalid: PropTypes.bool,\n pristine: PropTypes.bool,\n record: PropTypes.object,\n redirect: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.bool,\n PropTypes.func,\n ]),\n resource: PropTypes.string,\n saving: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),\n submitOnEnter: PropTypes.bool,\n};\n\nToolbar.defaultProps = {\n submitOnEnter: true,\n};\n\nconst enhance = compose(\n withWidth(),\n withStyles(styles)\n);\nexport default enhance(Toolbar);","import React, {Component} from 'react'\nimport { connect } from 'react-redux'\nimport {\n Button,\n DELETE,\n fetchStart,\n fetchEnd,\n showNotification,\n refreshView\n} from 'react-admin'\nimport { Remove } from '@material-ui/icons'\n\nimport dataProvider from '../../providers/dataProvider'\n\nclass DissociateButton extends Component {\n \n handleClick = () =>{\n this.dissociate()\n }\n\n dissociate({ basePath, basePathId, resource, record, refreshView, fetchStart, fetchEnd, showNotification } = this.props){\n fetchStart()\n dataProvider(DELETE, `${basePath}/${basePathId}/${resource}/rel`, {id : record.id})\n .then(_ => {\n refreshView()\n })\n .catch(e => {\n console.error(e)\n showNotification('ra.notification.http_error')\n })\n .finally(fetchEnd)\n }\n\n render(){\n return <Button label='ra.action.remove' onClick={this.handleClick} >{this.props.hasIcon && <Remove/>}</Button>\n }\n\n}\n\nexport default connect(null, { \n fetchStart, \n fetchEnd,\n showNotification,\n refreshView\n})(DissociateButton)\n","import React from 'react'\nimport {\n Button,\n Link\n} from 'react-admin'\nimport { RemoveRedEye as DefaultIcon } from '@material-ui/icons'\n\nconst LinkButton = ({to='/', label, variant='text', hasIcon, icon }) => (\n <Link to={to}>\n <Button variant={variant} label={label} >{hasIcon && (icon || <DefaultIcon/>)}</Button>\n </Link>\n)\n\nexport default LinkButton","import React, { Component } from 'react'\nimport {\n showNotification,\n translate,\n Responsive\n} from 'react-admin'\nimport { Build } from '@material-ui/icons'\nimport dataFetch from '../../providers/dataFetch';\nimport MuiButton from '@material-ui/core/Button';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport IconButton from '@material-ui/core/IconButton';\n\nimport { connect } from 'react-redux';\nimport compose from 'recompose/compose';\nimport { withStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\n\nconst styles = {\n button: {\n display: 'inline-flex',\n alignItems: 'center',\n },\n label: {\n paddingLeft: '0.5em',\n },\n labelRightIcon: {\n paddingRight: '0.5em',\n },\n smallIcon: {\n fontSize: 20,\n },\n mediumIcon: {\n fontSize: 22,\n },\n largeIcon: {\n fontSize: 24,\n },\n};\n\nclass BuildButton extends Component {\n constructor(props) {\n super(props);\n this.state = {\n disabled: false\n }\n this.relatedData = this.relatedData.bind(this);\n }\n\n componentDidMount() {\n this.setState({ disabled: false })\n }\n\n doRequest(url) {\n const fetch = () => {\n return new Promise((resolve, reject) => {\n dataFetch('GET', url)\n .then(data => {\n resolve(data)\n })\n .catch(err => reject(err));\n });\n };\n\n fetch().then((result) => {\n if (result.id) {\n this.setState({ disabled: true });\n this.props.showNotification(\"resources.launches.message.build\");\n }\n else\n this.props.showNotification('error.BUILDING_ERROR');\n })\n .catch(e => {\n // console.error('Build error', e);\n this.props.showNotification(this.props.translate('error.BUILDING_ERROR', 'warning'))\n });\n }\n\n relatedData = (e) => {\n const { recordId, record } = this.props;\n this.doRequest(`/observations/launch/${record[recordId]}/build`)\n }\n\n render() {\n const { classes, className, translate } = this.props;\n const label = 'resources.launches.buttons.build'\n return (\n\n <Responsive\n small={\n !this.state.disabled ? (\n <Tooltip title={translate(label)}>\n <IconButton\n aria-label={translate(label)}\n className={className}\n color='primary'\n onClick={this.relatedData}\n >\n <Build className={classes[`smallIcon`]} />\n\n </IconButton>\n </Tooltip>\n ) : (\n <IconButton\n className={className}\n disabled={this.state.disabled}\n // onClick={this.relatedData}\n >\n <Build className={classes[`smallIcon`]} />\n </IconButton>\n )\n }\n medium={\n <MuiButton\n disabled={this.state.disabled}\n className={classnames(classes.button, className)}\n color='primary'\n size='small'\n onClick={this.relatedData}\n >\n <Build className={classes[`smallIcon`]} />\n <span\n className={classnames({\n [classes.label]: 'right'\n })}\n >\n {translate(label)}\n </span>\n\n </MuiButton>\n }\n />\n )\n }\n}\n\nconst enhance = compose(\n translate,\n withStyles(styles),\n connect(null, { showNotification })\n)\n\nexport default enhance(BuildButton)\n","import React from 'react'\nimport { translate } from 'react-admin'\nimport LinkButton from './LinkButton'\n\nconst LinkButtonToResource = ({ record, basePath, translate, field, reference, to, hasIcon }) => (\n record[field] > 0 ?\n <LinkButton \n to={to || `${basePath}/${record.id}/show`}\n label={translate(`resources.${reference}.name`, {smart_count: record[field] || 0})}\n hasIcon={hasIcon}\n />\n :null\n)\n\nexport default translate(LinkButtonToResource)","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Button } from 'react-admin';\r\nimport shouldUpdate from 'recompose/shouldUpdate';\r\nimport ImageEye from '@material-ui/icons/RemoveRedEye';\r\nimport { Link } from 'react-router-dom';\r\nimport { stringify } from 'query-string';\r\nimport get from 'lodash/get';\r\n\r\n\r\nconst ShowRelatedButton = ({\r\n basePath = '',\r\n record = {},\r\n label = 'ra.action.show',\r\n reference,\r\n source_,\r\n icon,\r\n isVisible = () => true,\r\n ...rest\r\n}) => {\r\n\r\n return (\r\n isVisible(record) ? <Button\r\n component={Link}\r\n to={{\r\n pathname: `/${reference}`,\r\n search: stringify({\r\n page: 1,\r\n perPage: 25,\r\n filter: JSON.stringify({ [source_]: get(record, 'id') }),\r\n }),\r\n state: {\r\n dataset: record\r\n }\r\n }}\r\n label={label}\r\n {...rest}\r\n >\r\n {icon ? icon : <ImageEye />}\r\n </Button> : null\r\n )\r\n};\r\n\r\nShowRelatedButton.propTypes = {\r\n basePath: PropTypes.string,\r\n label: PropTypes.string,\r\n record: PropTypes.object,\r\n isVisible: PropTypes.func,\r\n reference: PropTypes.string.isRequired,\r\n source: PropTypes.string.isRequired,\r\n};\r\n\r\nconst enhance = shouldUpdate(\r\n (props, nextProps) =>\r\n props.translate !== nextProps.translate ||\r\n (props.record &&\r\n nextProps.record &&\r\n props.record.id !== nextProps.record.id) ||\r\n props.basePath !== nextProps.basePath ||\r\n (props.record == null && nextProps.record != null)\r\n);\r\n\r\nexport default enhance(ShowRelatedButton);","import React from 'react';\nimport {\n Button,\n showNotification,\n fetchEnd,\n fetchStart\n} from 'react-admin';\nimport DownloadIcon from '@material-ui/icons/GetApp';\nimport { storage } from 'react-admin-loopback';\nimport { saveAs } from 'file-saver';\nimport compose from 'recompose/compose';\nimport { connect } from 'react-redux';\n\nconst downloadFile = (url, filename, {fetchStart, fetchEnd, showNotification}) => {\n const headers = new Headers();\n headers.append(\"Content-Disposition\", `attachment; filename=${filename || \"file\" + new Date().now()}`)\n headers.append(\"Authorization\",`${storage.load('lbtoken').id}`)\n fetchStart();\n fetch(url,{\n method:'GET',\n headers: headers\n })\n .then(res => {\n if(res.status < 300 && res.status >= 200){\n return res.blob();\n }else{\n throw new Error('File not found');\n }\n })\n .then(blob => saveAs(blob, filename))\n .catch(error => {\n console.error('File not found error');\n showNotification('resources.datasets.download_error', 'warning');\n })\n .finally(() => fetchEnd())\n}\n\nconst DownloadButton = ({ alignIcon, color, label, size, filePath, fileName, disabled=false,...props}) => (\n <Button onClick={()=> downloadFile(filePath, fileName, props)} alignIcon={alignIcon} color={color} label={label} size={size} disabled={disabled}>\n <DownloadIcon/>\n </Button>\n)\n\n\nexport default compose(\n connect(\n null,\n {\n showNotification,\n fetchEnd,\n fetchStart\n }\n )\n)(DownloadButton);\n\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport compose from 'recompose/compose';\nimport MuiButton from '@material-ui/core/Button';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport IconButton from '@material-ui/core/IconButton';\nimport { withStyles, createStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport { translate } from 'ra-core';\n\nimport { Responsive } from 'react-admin';\n\nconst styles = createStyles({\n button: {\n display: 'inline-flex',\n alignItems: 'center',\n },\n icon: {\n display: 'inline-flex',\n alignItems: 'center',\n },\n label: {\n paddingLeft: '0.5em',\n },\n labelRightIcon: {\n paddingRight: '0.5em',\n },\n smallIcon: {\n fontSize: 20,\n },\n mediumIcon: {\n fontSize: 22,\n },\n largeIcon: {\n fontSize: 24,\n },\n});\n\nconst Button = ({\n alignIcon = 'left',\n children,\n classes = {},\n className,\n color,\n disabled,\n label,\n size,\n translate,\n ...rest\n}) => (\n <Responsive\n small={\n label && !disabled ? (\n <Tooltip title={translate(label, { _: label })}>\n <IconButton\n aria-label={translate(label, { _: label })}\n className={classnames(classes.icon, className)}\n color={color}\n {...rest}\n >\n {children}\n </IconButton>\n </Tooltip>\n ) : (\n <IconButton\n className={className}\n color={color}\n disabled={disabled}\n {...rest}\n >\n {children}\n </IconButton>\n )\n }\n\n medium={\n <MuiButton\n className={classnames(classes.button, className)}\n color={color}\n size={size}\n aria-label={label ? translate(label, { _: label }) : undefined}\n disabled={disabled}\n {...rest}\n >\n {alignIcon === 'left' &&\n children &&\n React.cloneElement(children, {\n className: classes[`${size}Icon`],\n })}\n {label && (\n <span\n className={classnames({\n [classes.label]: alignIcon === 'left',\n [classes.labelRightIcon]: alignIcon !== 'left',\n })}\n >\n {translate(label, { _: label })}\n </span>\n )}\n {alignIcon === 'right' &&\n children &&\n React.cloneElement(children, {\n className: classes[`${size}Icon`],\n })}\n </MuiButton>\n }\n />\n);\n\nButton.propTypes = {\n alignIcon: PropTypes.string,\n children: PropTypes.element,\n classes: PropTypes.object,\n className: PropTypes.string,\n color: PropTypes.string,\n disabled: PropTypes.bool,\n label: PropTypes.string,\n size: PropTypes.oneOf(['small', 'medium', 'large']),\n translate: PropTypes.func.isRequired,\n};\n\nButton.defaultProps = {\n color: 'secondary',\n size: 'small'\n}\n\nconst enhance = compose(\n withStyles(styles),\n translate\n);\n\nexport default enhance(Button);","import React, { Component } from 'react'\nimport {\n Button,\n crudGetList as crudGetListAction,\n crudUpdateMany as crudUpdateManyAction, \n translate,\n showNotification,\n} from 'react-admin'\nimport { connect } from 'react-redux'\nimport compose from 'recompose/compose'\nimport {\n DialogContent,\n withStyles,\n} from '@material-ui/core'\nimport { Save } from '@material-ui/icons'\nimport memoize from 'memoize-one'\nimport dataFetch from '../../providers/dataFetch';\n\nconst styles = {\n button:{\n marginTop: '2em',\n marginBottom: '2em'\n }\n};\n/*\n basePath, recordId, pagination => url to save (button)\n pagination\n reference => if needs do a new request (Pagination problem)\n changeIdOnRequest => on newrequest, we need change a result data, if we need change a object key (needed if reference)\n listFilters={<LocalSearch filter=\"\"/>}> => search => deprecated\n\n manyField => resource vs props => launch equip vs campaign equip\n*/\n\nclass Relation extends Component{\n\n //TODO: Throw error if no current related are specified\n constructor(props){\n super(props);\n\n this.state = {\n selectedIds: [],\n count:0,\n sort: props.currentSort,\n version: 0,\n page: 1,\n perPage: props.perPage || 10,\n \n ids: [], // list of Ids to show on DialogBox\n data: undefined, // obj - content data related with ids\n newRelatedData: undefined, // if need new request \n needUpdate: false, // if new request and need wait for data\n disabledSaveButton: false,\n search: \"\"\n };\n this.doRequest = this.doRequest.bind(this);\n }\n\n doRequest(url) {\n const { changeIdOnRequest } = this.props;\n\n const fetch = () => {\n return new Promise( (resolve, reject) => {\n dataFetch('GET', url)\n .then(data => {\n resolve(data)\n })\n .catch(err => reject(err));\n });\n };\n\n fetch().then( (result) => {\n let relatedData = {};\n\n Object.keys(result).forEach(key => {\n const obj = result[key]\n if (changeIdOnRequest) {\n relatedData[obj[changeIdOnRequest]] = obj;\n }\n else {\n relatedData[key] = obj;\n }\n delete result[key];\n });\n result = null;\n this.setState({ newRelatedData: relatedData });\n this.updateDialogData();\n })\n .catch(err => {\n if(err.error && err.error.code)\n showNotification(`errors.${err.error.code}`, 'warning');\n else\n showNotification(`errors.SOMETHING`, 'warning');\n }); \n }\n\n filterRelatedIds = memoize( (allIds, relatedData) => {\n if(allIds && relatedData){\n const orderedIds = allIds.reduce((acc, id) => { \n if(!relatedData[id]){\n acc.push(id) ;\n }\n return acc;\n }, []);\n return orderedIds;\n }\n return [];\n });\n\n filterRelatedData = memoize( (allData, relatedData) => {\n if(allData && relatedData){\n const filteredData = Object.assign({}, allData);\n\n //Maybe try to reduce instead of delete\n Object.keys(relatedData).map(relatedId => { delete filteredData[relatedId]; return relatedId} ); \n return filteredData;\n }\n return null;\n });\n\n onChangeSearch = (e) => {\n this.setState({search: e.target.value}, this.fetchAll);\n }\n\n componentWillMount(){\n const { reference, manyField, allData, allIds } = this.props;\n\n if(manyField) {\n this.setState({ data: this.filterRelatedData(allData, this.state.newRelatedData) });\n this.setState({ ids: this.filterRelatedIds(allIds, this.state.newRelatedData) });\n }\n else {\n this.fetchAll();\n }\n\n if(reference) {\n this.doRequest(reference);\n }\n else {\n this.setState({ needUpdate: true });\n }\n }\n \n setSort = field => {\n const order =\n this.state.sort.field === field &&\n this.state.sort.order === 'ASC'\n ? 'DESC'\n : 'ASC';\n this.setState({ sort: { field, order } }, this.fetchAll );\n }\n \n toggleItem = (id) => {\n this.state.selectedIds.includes(id) ? this.setState(state => {\n state.selectedIds.splice(state.selectedIds.indexOf(id), 1)\n return {selectedIds: state.selectedIds, version: state.version+1}\n }) \n : this.setState(state => {\n state.selectedIds.push(id)\n return {selectedIds: state.selectedIds, version: state.version+1}\n })\n }\n \n selectedIds = (allIds) => {\n this.state.selectedIds.length < allIds.length ? \n this.setState((state)=>({selectedIds: allIds, version: state.version+1})) \n : this.setState((state)=>({selectedIds: [], version: state.version+1}))\n }\n\n fetchAll(){\n const { resource, crudGetList } = this.props\n crudGetList(resource, {page:-1, perPage:0}, this.state.sort, {q:this.state.search})\n }\n\n relateData = () => {\n this.setState({disabledSaveButton: true})\n const { basePath, recordId, referencePath, crudUpdateMany } = this.props\n crudUpdateMany(`${basePath}/${recordId}${referencePath}/rel`, this.state.selectedIds, {}, '')\n }\n\n setPage = page => this.setState({page})\n\n setPerPage = perPage => {this.setState({perPage})}\n\n componentDidUpdate(oldProps) {\n const {allIds, allData} = this.props;\n\n if(oldProps.allIds !== allIds && oldProps.allData !== allData) {\n this.updateDialogData();\n }\n }\n\n updateDialogData() {\n if(this.state.needUpdate || this.props.manyField) {\n const {reference, allIds, relatedData, allData} = this.props;\n \n if(reference) {\n this.setState({ data: this.filterRelatedData(allData, this.state.newRelatedData) });\n this.setState({ ids: this.filterRelatedIds(allIds, this.state.newRelatedData) });\n }\n else {\n this.setState({ data: this.filterRelatedData(allData, relatedData) });\n this.setState({ ids: this.filterRelatedIds(allIds, relatedData) });\n }\n }\n else {\n this.setState({ needUpdate: true });\n }\n }\n\n render(){\n const {allData, classes, children, pagination, resource, listFilters } = this.props;\n const {page, perPage, data, ids} = this.state;\n\n const paginatedIds = ids.slice((page-1)*perPage,page*perPage)\n return (\n <DialogContent>\n {listFilters && React.cloneElement(listFilters, {\n /*\n label, => (optional)\n Parent: this,\n indexArray: string, => name of array on state (contains ids of obj)\n obj: string, => name of obj on state (contains all data)\n filter: string => name of param inside obj to filter \n */\n Parent: this,\n indexArray: 'ids',\n obj: 'data'\n })}\n\n\n {React.cloneElement(children, {\n currentSort: this.state.sort, \n data: data ? data : {}, //: allData,\n ids: paginatedIds,\n setSort: this.setSort, \n hasBulkActions: true,\n onToggleItem: this.toggleItem,\n onSelect: this.selectedIds,\n resource,\n selectedIds: this.state.selectedIds,\n version: this.state.version\n })}\n {pagination && React.cloneElement(pagination, {\n isLoading: Object.values(allData).length === 0,\n page,\n perPage,\n setPage: this.setPage,\n setPerPage: this.setPerPage,\n total: ids.length\n })}\n\n {ids.length > 0 ? <Button disabled={this.state.disabledSaveButton} className={classes.button} variant='raised' label='ra.action.save' onClick={this.relateData}><Save/></Button> : null}\n </DialogContent>\n )\n }\n}\n\nfunction mapStateToProps(state, props){\n let resourceState, data, ids;\n if(props.manyField) {\n resourceState = props\n ids = resourceState.ids;\n data = resourceState.data;\n }\n else {\n resourceState = state.admin.resources[props.resource]\n ids = resourceState.list.ids;\n data = resourceState.data;\n }\n return {\n allData: data,\n allIds: ids\n }\n}\n\nconst enhance = compose(\n translate,\n withStyles(styles),\n connect(\n mapStateToProps,\n { \n showNotification,\n crudGetList: crudGetListAction,\n crudUpdateMany: crudUpdateManyAction,\n }\n )\n)\n\nexport default enhance(Relation)","import lodashMemoize from 'lodash/memoize';\r\n\r\nconst getMessage = (message, messageArgs, value, values, props) =>\r\ntypeof message === 'function'\r\n ? message({\r\n args: messageArgs,\r\n value,\r\n values,\r\n ...props,\r\n })\r\n : props.translate(message, {\r\n _: message,\r\n ...messageArgs,\r\n });\r\n\r\nconst memoize = fn => lodashMemoize(fn, (...args) => JSON.stringify(args));\r\n\r\nexport const matchingPasswords = memoize(\r\n (message = 'pos.profile.different_passwords') => (value, values, props) => values.password !== values.rewrite_password \r\n ? getMessage(message, 2, value, values, props)\r\n : undefined\r\n);\r\n","import React, { Component } from 'react'\nimport{\n Button,\n translate\n} from 'react-admin'\nimport {\n withStyles\n} from '@material-ui/core'\nimport { Add } from '@material-ui/icons'\n\nimport { SimpleModal, CustomButton } from '../../components'\n\nconst styles = {\n button:{\n marginTop: '1em',\n marginRight: '0.5em'\n },\n\n rm_button:{\n marginTop: '1em',\n backgroundColor: 'rgba(255, 0, 0, 0.8)',\n \"&:hover\": {\n background: 'rgba(255, 0, 0, 1)'\n }\n },\n rm_icon: {\n marginTop: '1em',\n color: 'red',\n \"&:hover\": {\n background: 'rgba(255, 0, 0, 0.08)'\n }\n },\n closeButton:{\n marginTop: '0.5em',\n marginRight: '0.5em'\n },\n titleDiv:{\n display: 'flex',\n justifyContent: 'space-between'\n },\n secondButton: {\n marginTop: '1em',\n backgroundColor: \"red\",\n \"&:hover\": {\n background: 'rgba(255, 0, 0, 0.08)'\n }\n }\n}\n\nclass RelationShow extends Component{\n state = {\n isOpen: false\n }\n\n sanitizeProps = ({\n dialogContent,\n children,\n reference,\n classes,\n parentrecord,\n secondPress,\n Icon,\n secondLabel,\n ...props\n }) => ({...props})\n\n openDialog = () => this.setState({isOpen: true})\n \n closeDialog = () => this.setState({isOpen: false})\n \n render() {\n const { classes, reference, children, dialogContent, translate, data, currentSort, basePath, parentrecord, secondPress, Icon, secondLabel } = this.props\n const referenceName = translate(`resources.${reference}.name`,{smart_count:1})\n return <div>\n <Button className={classes.button} variant='contained' onClick={this.openDialog} label={translate('pos.general.add_button')} /*label={translate('pos.general.add_referencing', {reference: referenceName})}*/><Add/></Button>\n \n { secondPress !== undefined && <CustomButton classes={{button: classes.rm_button, icon: classes.rm_icon}} variant=\"contained\" onClick={secondPress} label={secondLabel ? secondLabel : ''}>{ Icon ? <Icon/> : null }</CustomButton> }\n\n <SimpleModal open={this.state.isOpen} onClose={this.closeDialog} title={referenceName} >\n {dialogContent && React.cloneElement(dialogContent, {relatedData: data, resource: reference, currentSort, referencePath: basePath, parentrecord})}\n </SimpleModal>\n {React.cloneElement(children, this.sanitizeProps(this.props))}\n </div>\n }\n}\n\nexport default withStyles(styles)(translate(RelationShow))","import React from 'react';\nimport {\n translate\n} from 'react-admin'\nimport { Button } from '@material-ui/core'\nimport { List } from '@material-ui/icons'\n\n\nconst back = (history) => {\n history.goBack()\n}\n\nconst HistoryButton = ({\n basePath,\n className,\n classes,\n children,\n resource,\n translate,\n exporter,\n currentSort,\n history,\n color='primary',\n size='small',\n ...rest\n}) => {\n return <Button \n onClick={() => back(history)} \n color={color}\n size={size}\n >\n <List/>\n {translate('ra.action.list')}\n </Button>\n};\n\nexport default translate(HistoryButton);","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport onlyUpdateForKeys from 'recompose/onlyUpdateForKeys';\r\n// import { sanitizeListRestProps } from 'ra-core';\r\nimport { Typography } from '@material-ui/core';\r\n\r\nimport {\r\n // CardActions,\r\n CreateButton,\r\n ExportButton,\r\n RefreshButton,\r\n EditButton,\r\n ListButton\r\n} from 'react-admin';\r\n\r\nimport HistoryButton from '../defaultActions/HistoryButton';\r\n\r\n// Improve component in order to remove \"removeListButton\"\r\n\r\nconst DefaultCardActions = ({\r\n bulkActions,\r\n basePath,\r\n currentSort,\r\n className,\r\n displayedFilters,\r\n exporter,\r\n filters,\r\n filterValues,\r\n onUnselectItems,\r\n permanentFilter,\r\n resource,\r\n selectedIds,\r\n showFilter,\r\n hasExport,\r\n hasRefresh,\r\n hasCreate,\r\n createLabel,\r\n hasEdit,\r\n hasList,\r\n hasShow,\r\n data,\r\n history,\r\n removeListButton,\r\n hasHistory,\r\n id,\r\n title,\r\n ...rest\r\n}) => (\r\n <div style={{ display: 'flex', justifyContent: 'space-between' }}>\r\n <div>\r\n {title && <Typography variant='title'>{title}</Typography>}\r\n </div>\r\n <div style={{ right: 0 }}>\r\n\r\n {bulkActions && React.cloneElement(bulkActions, {\r\n basePath,\r\n filterValues,\r\n resource,\r\n selectedIds,\r\n onUnselectItems,\r\n })}\r\n {filters && React.cloneElement(filters, {\r\n resource,\r\n showFilter,\r\n displayedFilters,\r\n filterValues,\r\n context: 'button',\r\n })}\r\n\r\n {hasCreate && <CreateButton basePath={basePath} label={createLabel} />}\r\n {hasEdit && <EditButton basePath={basePath} record={data ? data : { id: id }} />}\r\n {hasList && <ListButton basePath={basePath} />}\r\n\r\n {hasHistory && <HistoryButton history={history} />}\r\n\r\n {hasExport && <ExportButton\r\n resource={resource}\r\n sort={currentSort}\r\n filter={filterValues}\r\n exporter={exporter}\r\n />}\r\n {hasRefresh && <RefreshButton />}\r\n </div>\r\n </div>\r\n);\r\n\r\nDefaultCardActions.propTypes = {\r\n bulkActions: PropTypes.oneOfType([PropTypes.element, PropTypes.bool]),\r\n basePath: PropTypes.string,\r\n className: PropTypes.string,\r\n currentSort: PropTypes.object,\r\n displayedFilters: PropTypes.object,\r\n exporter: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\r\n filters: PropTypes.element,\r\n filterValues: PropTypes.object,\r\n hasCreate: PropTypes.bool,\r\n createLabel: PropTypes.string,\r\n resource: PropTypes.string,\r\n onUnselectItems: PropTypes.func,\r\n selectedIds: PropTypes.arrayOf(PropTypes.any),\r\n showFilter: PropTypes.func,\r\n hasExport: PropTypes.bool,\r\n hasRefresh: PropTypes.bool,\r\n data: PropTypes.object,\r\n history: PropTypes.object,\r\n removeListButton: PropTypes.bool,\r\n};\r\n\r\nDefaultCardActions.defaultProps = {\r\n selectedIds: [],\r\n};\r\n\r\nexport default onlyUpdateForKeys([\r\n 'hasExport',\r\n 'resource',\r\n 'filters',\r\n 'displayedFilters',\r\n 'filterValues',\r\n 'selectedIds',\r\n])(DefaultCardActions);","import React from 'react';\n\nconst GeoCoordinatesField = ({source, record = {}}) => <span>\n {record[source] ? record[source].lat : '---'} | {record[source] ? record[source].lng : '---'}\n</span>;\n\nGeoCoordinatesField.defaultProps ={\n addLabel: true\n};\n\nexport default GeoCoordinatesField;","import { Component } from 'react'\nimport {\n GET_LIST,\n showNotification,\n fetchStart,\n fetchEnd\n} from 'react-admin'\nimport { connect } from 'react-redux'\n\nimport dataProvider from '../../providers/dataProvider'\n\nclass ReferenceManyManyFieldController extends Component {\n\n constructor(props){\n super(props)\n this.state = {\n sort: props.sort,\n page: 1,\n perPage: props.perPage,\n total: 0\n }\n }\n\n componentWillMount() {\n this.fetchRelated()\n }\n\n componentDidUpdate(oldProps) {\n if(this.props.keepUpdating && JSON.stringify(oldProps.filter) !== JSON.stringify(this.props.filter)) {\n this.fetchRelated()\n }\n }\n\n fetchRelated({ filter, params={}, record, recordId, parentrecord, resource, reference, showNotification, fetchStart, fetchEnd, prefix } = this.props){\n if(prefix)\n resource = prefix\n\n if(!record && recordId) \n record = { id: parentrecord[recordId] }\n\n fetchStart()\n dataProvider(GET_LIST,`${resource}/${record.id}/${reference}`,{\n sort: this.state.sort,\n pagination: {\n page: this.state.page,\n perPage: this.state.perPage\n },\n include: params.include,\n filter\n })\n .then(response => {\n const ids = []\n const data = response.data.reduce((acc, record) => {\n ids.push(record.id)\n return {...acc, [record.id]: record}\n }, {})\n this.setState({data, ids, total:response.total})\n })\n .catch(e => {\n console.error(\"ERROR-> \", e)\n showNotification('ra.notification.http_error')\n })\n .finally(fetchEnd)\n } \n \n setSort = field => {\n const order =\n this.state.sort.field === field &&\n this.state.sort.order === 'ASC'\n ? 'DESC'\n : 'ASC';\n this.setState({ sort: { field, order } }, this.fetchRelated);\n };\n\n setPage = page => this.setState({ page }, this.fetchRelated);\n\n setPerPage = perPage => this.setState({ perPage }, this.fetchRelated);\n\n render(){\n const { resource, reference, children, basePath, record } = this.props\n const { page, perPage, total } = this.state;\n\n const referenceBasePath = basePath.replace(resource, reference);\n\n return children({\n parentrecord: record,\n currentSort: this.state.sort,\n data: this.state.data,\n ids: this.state.ids,\n isLoading: typeof this.state.ids === 'undefined',\n page,\n perPage,\n referenceBasePath,\n setPage: this.setPage,\n setPerPage: this.setPerPage,\n setSort: this.setSort,\n total\n })\n }\n}\n\nReferenceManyManyFieldController.defaultProps = {\n perPage: 25,\n sort: {field: 'id', order: 'DESC'}\n}\n\nexport default connect( null, {\n showNotification,\n fetchStart,\n fetchEnd\n})(ReferenceManyManyFieldController)","import React, {Fragment} from 'react';\nimport { withStyles, LinearProgress } from '@material-ui/core';\nimport ReferenceManyManyFieldController from './ReferenceManyManyFieldController';\n\nconst styles = {\n progress: {marginTop: '1em'}\n};\n\nexport const ReferenceManyManyFieldView = ({\n children,\n classes = {},\n className,\n currentSort,\n data,\n ids,\n isLoading,\n page,\n pagination,\n perPage,\n reference,\n referenceBasePath,\n setPerPage,\n setPage,\n setSort,\n total,\n parentrecord,\n}) => (\n isLoading ? \n <LinearProgress className={classes.progress} />\n :\n <Fragment>\n {React.cloneElement(children, {\n className,\n resource: reference,\n ids,\n data,\n basePath: referenceBasePath,\n currentSort,\n setSort,\n total,\n parentrecord\n })}\n {pagination && React.cloneElement(pagination, {\n page,\n perPage,\n setPage,\n setPerPage,\n total\n })}\n </Fragment>\n);\n\nexport const ReferenceManyManyField = ({ children, ...props}) => {\n if(React.Children.count(children) !== 1) {\n throw new Error( '<ReferenceManyField> only accepts a single child (like <Datagrid>)' )\n }\n if(props.limit !== undefined) {\n props.perPage = props.limit;\n }\n\n return <ReferenceManyManyFieldController {...props}>\n {controllerProps => (<ReferenceManyManyFieldView \n {...props} \n {...{children, ...controllerProps}} /> )}\n </ReferenceManyManyFieldController>\n}\n\nReferenceManyManyField.defaultProps = {\n filter: {},\n perPage: 25,\n sort: {field: 'id', order:'DESC' },\n source: 'id'\n}\n\nconst EnhancedReferenceManyManyField = withStyles(styles)(ReferenceManyManyField)\n\nEnhancedReferenceManyManyField.defaultProps = {\n addLabel: true,\n source: 'id'\n}\n\nexport default EnhancedReferenceManyManyField","import { DateTime, Info } from 'luxon';\n\nexport default class LuxonUtils {\n parse = DateTime.fromFormat;\n\n constructor({ locale } = {}) {\n this.locale = locale || 'en';\n this.current_timezone = DateTime.local().toFormat('z');\n }\n\n date(value, utc = false) {\n if (value instanceof Date) {\n return utc ? DateTime.fromJSDate(value).toUTC() : DateTime.fromJSDate(value).setZone(this.current_timezone);\n }\n\n if (typeof value === 'string') {\n return utc ? DateTime.fromJSDate(new Date(value)).toUTC() : DateTime.fromJSDate(new Date(value)).setZone(this.current_timezone);\n }\n\n if (value instanceof DateTime) {\n return utc ? value.toUTC() : value.setZone(this.current_timezone);\n }\n\n return utc ? DateTime.local().toUTC() : DateTime.local().setZone(this.current_timezone);\n }\n\n addDays(date, count, utc = false) {\n if (count < 0) {\n return utc ? date.toUTC().minus({ days: Math.abs(count) }) : date.setZone(this.current_timezone).minus({ days: Math.abs(count) });\n }\n\n return utc ? date.toUTC().plus({ days: count }) : date.setZone(this.current_timezone).plus({ days: count });\n }\n\n isValid(date) {\n return date.isValid;\n }\n\n isEqual(value, comparing) {\n if (value === null && comparing === null) {\n return true;\n }\n\n return value === comparing;\n }\n\n isSameDay(value, comparing) {\n return value.hasSame(comparing, 'day');\n }\n\n isAfter(value, comparing) {\n return value > comparing;\n }\n\n isAfterDay(value, comparing) {\n const diff = value.diff(comparing, 'days').toObject();\n return diff.days > 0;\n }\n\n isAfterYear(value, comparing) {\n const diff = value.diff(comparing, 'years').toObject();\n return diff.years > 0;\n }\n\n isBefore(value, comparing) {\n return value < comparing;\n }\n\n isBeforeDay(value, comparing) {\n const diff = value.diff(comparing, 'days').toObject();\n return diff.days < 0;\n }\n\n isBeforeYear(value, comparing) {\n const diff = value.diff(comparing, 'years').toObject();\n return diff.years < 0;\n }\n\n getDiff(value, comparing) {\n if (typeof comparing === 'string') {\n comparing = DateTime.fromJSDate(new Date(comparing));\n }\n\n return value.diff(comparing, 'milliseconds');\n }\n\n startOfDay(value, utc = false) {\n return utc ? value.toUTC().startOf('day') : value.startOf('day');\n }\n\n endOfDay(value, utc = false) {\n return utc ? value.toUTC().endOf('day') : value.endOf('day');\n }\n\n format(date, format, utc = false) {\n if(utc) {\n return date.toUTC().setLocale(this.locale).toFormat(format);\n }\n else {\n return date.setZone(this.current_timezone).setLocale(this.locale).toFormat(format);\n }\n }\n\n formatNumber(number) {\n return String(number);\n }\n\n getHours(value, utc = false) {\n return utc ? value.toUTC().get('hour'): value.setZone(this.current_timezone).get('hour');\n }\n\n setHours(value, count, utc = false) {\n return utc ? value.toUTC().set({ hour: count }) : value.setZone(this.current_timezone).set({ hour: count });\n }\n \n getMinutes(value, utc = false) {\n return utc ? value.toUTC().get('minute'): value.setZone(this.current_timezone).get('minute');\n }\n \n setMinutes(value, count, utc = false) {\n return utc ? value.toUTC().set({ minute: count }) : value.setZone(this.current_timezone).set({ minute: count });\n }\n \n getSeconds(value) {\n return value.get('second');\n }\n \n setSeconds(value, count) {\n return value.set({ second: count });\n }\n \n getMonth(value, utc = false) {\n // See https://github.com/moment/luxon/blob/master/docs/moment.md#major-functional-differences\n return utc ? value.toUTC().get('month') - 1 : value.setZone(this.current_timezone).get('month') - 1;\n }\n \n getYear(value, utc = false) {\n return utc ? value.toUTC().get('year') : value.setZone(this.current_timezone).get('year');\n }\n \n setYear(value, year, utc = false) {\n return utc ? value.toUTC().set({ year }) : value.setZone(this.current_timezone).set({ year });\n }\n\n mergeDateAndTime(date, time) {\n return this.setMinutes(this.setHours(date, this.getHours(time)), this.getMinutes(time));\n }\n\n getStartOfMonth(value, utc = false) {\n return utc ? value.toUTC().startOf('month') : value.setZone(this.current_timezone).startOf('month');\n }\n\n getNextMonth(value) {\n return value.plus({ months: 1 });\n }\n\n getPreviousMonth(value) {\n return value.minus({ months: 1 });\n }\n\n getWeekdays() {\n return Info.weekdaysFormat('narrow', { locale: this.locale });\n }\n\n getWeekArray(date, utc = false) {\n const { days } = utc ? \n date\n .toUTC()\n .endOf('month')\n .endOf('week')\n .diff(date.startOf('month').startOf('week'), 'days')\n .toObject() :\n date\n .setZone(this.current_timezone)\n .endOf('month')\n .endOf('week')\n .diff(date.startOf('month').startOf('week'), 'days')\n .toObject();\n\n const weeks = [];\n new Array(Math.round(days))\n .fill()\n .map((_, i) => i)\n .map(day => date.startOf('month').startOf('week').plus({ days: day }))\n .forEach((v, i) => {\n if (i === 0 || ((i % 7 === 0) && i > 6)) {\n weeks.push([v]);\n return;\n }\n\n weeks[weeks.length - 1].push(v);\n });\n\n return weeks;\n }\n\n getYearRange(start, end) {\n start = this.date(start);\n end = this.date(end).plus({ years: 1 });\n const { years } = end.diff(start, 'years').toObject();\n if (!years || years <= 0) {\n return [];\n }\n\n return new Array(Math.round(years))\n .fill()\n .map((_m, i) => i)\n .map(year => start.plus({ years: year }));\n }\n\n getMeridiemText(ampm) {\n return Info\n .meridiems({ locale: this.locale })\n .find(v => v.toLowerCase() === ampm.toLowerCase());\n }\n\n getCalendarHeaderText(date, utc = false) {\n return this.format(date, 'MMMM yyyy', utc);\n }\n\n getDatePickerHeaderText(date, utc = false) {\n return this.format(date, 'ccc, MMM d', utc);\n }\n\n getDateTimePickerHeaderText(date, utc = false) {\n return this.format(date, 'MMM d', utc);\n }\n\n getDayText(date, utc = false) {\n return this.format(date, 'd', utc);\n }\n\n getHourText(date, ampm, utc = false) {\n if (ampm) {\n return utc ? date.toUTC().toFormat('hh') : date.setZone(this.current_timezone).toFormat('hh');\n }\n\n return utc ? date.toUTC().toFormat('HH') : date.setZone(this.current_timezone).toFormat('HH');\n }\n\n getMinuteText(date, utc = false) {\n return utc ? date.toUTC().toFormat('mm') : date.setZone(this.current_timezone).toFormat('mm');\n }\n\n getSecondText(date, utc = false) {\n return utc ? date.toUTC().toFormat('ss') : date.setZone(this.current_timezone).toFormat('ss');\n }\n\n getYearText(date, utc = false) {\n return utc ? date.toUTC().toFormat('yyyy') : date.setZone(this.current_timezone).toFormat('yyyy');\n }\n\n isNull(date) {\n return date === null;\n }\n\n dateTime12hFormat = 'ff';\n\n dateTime24hFormat = 'f';\n\n time12hFormat = 't';\n\n time24hFormat = 'T';\n\n dateFormat = 'DD';\n}\n","import React from 'react';\nimport get from 'lodash/get';\nimport compose from 'recompose/compose';\nimport Typography from '@material-ui/core/Typography';\nimport luxon from '../input/Picker/utils/luxon-utils.js'\nimport {\n translate\n} from 'react-admin';\n\nexport const DateField = ({\n className,\n locales,\n format,\n options,\n record,\n source,\n addLabel,\n allowEmpty,\n basePath,\n cellClassName,\n formClassName,\n headerClassName,\n label,\n linkType,\n locale,\n resource,\n sortable,\n sortBy,\n textAlign,\n translateChoice,\n localDate,\n translate,\n noFields,\n simpleText,\n ...rest\n}) => {\n if (!record) {\n return null;\n }\n\n const value = get(record, source);\n if (value == null) {\n if(simpleText) return null\n return (\n <Typography\n component=\"span\"\n variant=\"body1\"\n className={className}\n {...rest}\n >\n {translate('dates.not_defined')}\n\n </Typography>\n );\n }\n const util = new luxon();\n\n const dateUTC = util.date(value, true).toFormat(format) + (noFields ? '' : ' UTC');\n const dateLocal = util.date(value, false).toFormat(format) + ' ' + util.date(value, false).toFormat('ZZZZ');\n\n return simpleText ?\n dateUTC\n :\n (\n <Typography\n component=\"span\"\n variant=\"body1\"\n className={className}\n {...rest}\n >\n {dateUTC}\n {localDate && <br />}\n {localDate && dateLocal}\n\n </Typography>\n );\n};\n\nconst EnhancedDateField = compose(translate)(DateField);\n// const EnhancedDateField = pure(DateField);\n\nEnhancedDateField.defaultProps = {\n addLabel: true,\n format: 'dd/MM/yyyy HH:mm:ss',\n localDate: false,\n simpleText: false\n};\n\nEnhancedDateField.displayName = 'EnhancedDateField';\n\nexport default EnhancedDateField;","import React, { Component } from 'react';\nimport {\n Datagrid,\n Responsive\n} from 'react-admin';\nimport { MobileDatagrid } from '../index';\n\nexport default class ResponsiveDatagrid extends Component {\n\n render(){\n const { actions, children, ...rest } = this.props;\n const countOfChildren = React.Children.count(children);\n return <Responsive {...rest}\n small={\n <MobileDatagrid actions={actions && actions.map((action,index) => React.cloneElement(action, {key: index, /*hasIcon: true,*/ ...action.props}))} >\n {React.Children.map(children, (child, index)=> child && React.cloneElement(child,{key: index}))}\n </MobileDatagrid>\n }\n medium={\n <Datagrid>\n {React.Children.map(children, (child, index)=> child && React.cloneElement(child,{key: index}))}\n {actions && actions.map((action,index) => React.cloneElement(action, {key: countOfChildren + index, source:\"\"}))}\n </Datagrid>\n }\n />\n }\n}","import React, { Component } from 'react';\nimport {\n List,\n Responsive\n} from 'react-admin';\nimport withStyles from '@material-ui/core/styles/withStyles';\n\nimport ResponsiveDatagrid from './ResponsiveDatagrid';\nimport {\n DefaultCardActions\n} from '../index'\n\nconst styles = {\n card: { padding: '1em' }\n}\n\nclass ResponsiveList extends Component {\n\n render(){\n const { bulkActionButtons, children, classes, exporter, listActions, listFilters, perPage, recordActions, version, selectedIds, onToggleItem, hasBulkActions, onSelect, ...rest } = this.props;\n\n\n\n return <Responsive\n small={\n <List\n {...rest}\n bulkActionButtons={bulkActionButtons}\n perPage={typeof perPage === 'object' ? perPage.small : perPage}\n actions={listActions}\n filters={listFilters}\n exporter={exporter || false}\n >\n <ResponsiveDatagrid actions={recordActions} version={version} selectedIds={selectedIds} onToggleItem={onToggleItem} onSelect={onSelect} hasBulkActions={hasBulkActions}>\n {children}\n </ResponsiveDatagrid>\n </List>\n }\n medium={\n <List\n {...rest}\n bulkActionButtons={bulkActionButtons}\n perPage={typeof perPage === 'object' ? perPage.medium : perPage}\n actions={listActions}\n filters={listFilters}\n exporter={exporter || false}\n classes={{card: classes.card}}\n >\n <ResponsiveDatagrid actions={recordActions} version={version} selectedIds={selectedIds} onToggleItem={onToggleItem} onSelect={onSelect} hasBulkActions={hasBulkActions}>\n {children}\n </ResponsiveDatagrid>\n </List>\n }\n />\n }\n}\n\nexport default withStyles(styles)(ResponsiveList);\n\n\nResponsiveList.defaultProps = {\n bulkActionButtons: false,\n listActions: <DefaultCardActions/>,\n perPage:{\n small: 10,\n medium: 25\n }\n}","import React, { Component } from 'react';\nimport {\n List,\n Responsive\n} from 'react-admin';\nimport withStyles from '@material-ui/core/styles/withStyles';\n\nimport {\n DefaultCardActions\n} from '../index'\n\nconst styles = {\n card: { padding: '1em' }\n}\n\nclass ResponsiveList extends Component {\n\n render(){\n const { bulkActionButtons, children, classes, exporter, listActions, listFilters, perPage, recordActions, version, selectedIds, onToggleItem, hasBulkActions, onSelect, ...rest } = this.props;\n\n\n\n return <Responsive\n small={\n <List\n {...rest}\n bulkActionButtons={bulkActionButtons}\n perPage={typeof perPage === 'object' ? perPage.small : perPage}\n actions={listActions}\n filters={listFilters}\n exporter={exporter || false}\n >\n {children}\n </List>\n }\n medium={\n <List\n {...rest}\n bulkActionButtons={bulkActionButtons}\n perPage={typeof perPage === 'object' ? perPage.medium : perPage}\n actions={listActions}\n filters={listFilters}\n exporter={exporter || false}\n classes={{card: classes.card}}\n >\n {children}\n </List>\n }\n />\n }\n}\n\nexport default withStyles(styles)(ResponsiveList);\n\n\nResponsiveList.defaultProps = {\n bulkActionButtons: false,\n listActions: <DefaultCardActions/>,\n perPage:{\n small: 10,\n medium: 25\n }\n}","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n Checkbox,\n Card,\n CardContent, \n CardActions\n} from '@material-ui/core'\nimport { \n FieldTitle\n} from 'react-admin';\n\nclass MobileDatagridCard extends Component {\n \n handleToggle = event => {\n this.props.onToggleItem(this.props.id)\n event.stopPropagation()\n }\n \n render() {\n const {\n actions,\n basePath,\n children,\n classes,\n id,\n record,\n resource,\n hasBulkActions,\n checked,\n } = this.props;\n\n return (\n <Card key={id} className={classes.card}>\n {\n hasBulkActions && <Checkbox checked={checked} onChange={this.handleToggle}/>\n }\n { actions && <CardActions classes={{root:classes.cardActions}}>{actions.map((component, index) => React.cloneElement(component, {basePath, record, resource, key:index, ...component.props}))}</CardActions>}\n <CardContent className={classes.cardContent}>\n {React.Children.map(\n children,\n (field, index) =>\n field ? (\n <div>\n <FieldTitle \n label={field.props.label}\n source={field.props.source}\n resource={resource}\n />\n {React.cloneElement(field, {\n record,\n basePath: field.props.basePath || basePath,\n resource\n })}\n </div>\n ) : null\n )}\n </CardContent>\n </Card>\n );\n }\n}\n\nMobileDatagridCard.propTypes = {\n basePath: PropTypes.string,\n children: PropTypes.node.isRequired,\n classes: PropTypes.object,\n id: PropTypes.any,\n record: PropTypes.object.isRequired,\n resource: PropTypes.string,\n};\n\nexport default MobileDatagridCard;","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n Checkbox,\n withStyles \n} from '@material-ui/core';\nimport { translate } from 'react-admin'\n\nimport MobileDatagridCard from './MobileDatagridCard';\n\nconst styles = {\n card: {\n height: '100%',\n display: 'flex',\n flexDirection: 'row-reverse',\n justifyContent: 'space-between',\n margin: '0.5rem 0',\n },\n cardTitleContent: {\n display: 'flex',\n flexDirection: 'rows',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n cardContent: {\n display: 'flex',\n flexDirection: 'column',\n },\n cardActions: {\n flexDirection: 'column',\n alignItems: 'flex-start'\n }\n};\n\nclass MobileDatagrid extends Component {\n\n handleSelectAll = event => {\n const { onSelect, ids, selectedIds } = this.props;\n if (event.target.checked) {\n onSelect(\n ids.reduce(\n (idList, id) =>\n idList.includes(id) ? idList : idList.concat(id),\n\n selectedIds\n )\n );\n } else {\n onSelect([]);\n }\n};\n\n render() {\n const {\n actions,\n basePath,\n classes,\n children,\n data,\n ids,\n resource,\n rowStyle,\n hasBulkActions = false,\n selectedIds,\n onToggleItem,\n translate\n } = this.props;\n\n const isSelected = selectedIds.length > 0 &&\n ids.length > 0 &&\n !ids.find(\n it => selectedIds.indexOf(it) === -1\n )\n \n return (\n <div style={{ margin: '1em' }}>\n {hasBulkActions && <Fragment>\n <Checkbox\n className=\"select-all\"\n color=\"primary\"\n checked={isSelected}\n onChange={this.handleSelectAll}\n />\n {translate(`pos.general.${isSelected?'un':''}select_all`)}\n </Fragment>}\n {ids.map((id, rowIndex) => (\n <MobileDatagridCard\n actions={actions}\n basePath={basePath}\n classes={classes}\n id={id}\n key={id}\n record={data[id]}\n resource={resource}\n hasBulkActions={hasBulkActions}\n checked={\n selectedIds.length > 0 &&\n ids.length > 0 &&\n selectedIds.indexOf(id) !== -1\n }\n onToggleItem={onToggleItem}\n style={rowStyle ? rowStyle(data[id], rowIndex) : null}\n >\n {children}\n </MobileDatagridCard>\n ))}\n </div>\n );\n }\n}\n\nMobileDatagrid.propTypes = {\n basePath: PropTypes.string,\n classes: PropTypes.object,\n children: PropTypes.node.isRequired,\n data: PropTypes.object.isRequired,\n ids: PropTypes.arrayOf(PropTypes.any).isRequired,\n resource: PropTypes.string,\n rowStyle: PropTypes.func,\n};\n\nMobileDatagrid.defaultProps = { data: {}, ids: [], selectedIds: [] }; \n\nexport default translate(withStyles(styles)(MobileDatagrid));\n\n","import React from 'react';\nimport { Labeled, NumberInput, translate } from 'react-admin';\n\nconst validateLatitude = (value, _, {translate}) => {\n const floatValue = parseFloat(value)\n return floatValue >= -90 && floatValue <= 90 ? undefined : translate('inputs.error.invalid_latitude')\n}\n\nconst validateLongitude = (value, _, {translate}) => {\n const floatValue = parseFloat(value)\n return floatValue >= -180 && floatValue <= 180 ? undefined : translate('inputs.error.invalid_longitude')\n}\n\nexport default translate(({source, className, fieldClassName, translate, hasLabel = true, ...props}) => {\n return hasLabel ? \n <Labeled source={source} {...props} className={className}>\n <span>\n <NumberInput className={fieldClassName} source={`${source}.lat`} label={translate('inputs.coordinates.latitude')} validate={validateLatitude} />\n  \n <NumberInput className={fieldClassName}source={`${source}.lng`} label={translate('inputs.coordinates.longitude')} validate={validateLongitude} />\n </span>\n </Labeled>\n :<span className={className}>\n <NumberInput className={fieldClassName} source={`${source}.lat`} label={translate('inputs.coordinates.latitude')} validate={validateLatitude} />\n  \n <NumberInput className={fieldClassName} source={`${source}.lng`} label={translate('inputs.coordinates.longitude')} validate={validateLongitude} />\n </span>\n});","import React, { Component } from 'react';\n\nclass InputAggregator extends Component {\n\n render(){\n const { source, ...props } = this.props;\n return <div>\n {\n React.Children.map(this.props.children, (child, i) => {\n return React.cloneElement(child, {source:`${source}.${child.props.source}`, key: i, ...props})\n })\n }\n </div>\n }\n\n}\n\nexport default InputAggregator;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport EventListener from 'react-event-listener';\nimport withStyles from '@material-ui/core/styles/withStyles';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\n\nconst dialogWidth = 375;\nconst dialogHeight = 405;\nconst styles = {\n dialogRoot: {\n minWidth: dialogWidth,\n minHeight: dialogHeight,\n },\n dialog: {\n width: dialogWidth,\n minHeight: dialogHeight,\n overflow: 'hidden',\n\n '&:first-child': {\n padding: 0,\n },\n },\n dialogRoot_or: {\n minWidth: 310,\n minHeight: dialogHeight,\n },\n dialog_or: {\n width: 310,\n minHeight: dialogHeight,\n overflow: 'hidden',\n\n '&:first-child': {\n padding: 0,\n },\n },\n dialogActions: {\n // set justifyContent to default value to fix IE11 layout bug\n // see https://github.com/dmtrKovalenko/material-ui-pickers/pull/267\n justifyContent: 'flex-start',\n },\n clearableDialogAction: {\n '&:first-child': {\n marginRight: 'auto',\n },\n },\n todayDialogAction: {\n '&:first-child': {\n marginRight: 'auto',\n },\n },\n dialogAction: {\n // empty but may be needed for override\n },\n};\n\nexport const ModalDialog = ({\n children,\n classes,\n onKeyDown,\n onAccept,\n onDismiss,\n onClear,\n onSetToday,\n okLabel,\n cancelLabel,\n clearLabel,\n todayLabel,\n dialogContentClassName,\n clearable,\n showTodayButton,\n seconds,\n ...other\n}) => (\n <Dialog onClose={onDismiss} classes={seconds ? { paper: classes.dialogRoot } : { paper: classes.dialogRoot_or }} {...other}>\n <EventListener target=\"window\" onKeyDown={onKeyDown} />\n\n <DialogContent className={seconds ? classnames(classes.dialog, dialogContentClassName) : classnames(classes.dialog_or, dialogContentClassName)}>\n { children }\n </DialogContent>\n\n <DialogActions\n classes={{\n root: clearable && classes.dialogActions,\n action: classnames(classes.dialogAction, {\n [classes.clearableDialogAction]: clearable,\n [classes.todayDialogAction]: !clearable && showTodayButton,\n }),\n }}\n >\n { clearable\n && (\n <Button\n color=\"primary\"\n onClick={onClear}\n aria-label={clearLabel}\n >\n { clearLabel }\n </Button>\n )\n }\n\n { !clearable && showTodayButton\n && (\n <Button\n color=\"primary\"\n onClick={onSetToday}\n aria-label={todayLabel}\n >\n { todayLabel }\n </Button>\n )\n }\n\n <Button\n color=\"primary\"\n onClick={onDismiss}\n aria-label={cancelLabel}\n >\n { cancelLabel }\n </Button>\n\n <Button\n color=\"primary\"\n onClick={onAccept}\n aria-label={okLabel}\n >\n { okLabel }\n </Button>\n </DialogActions>\n </Dialog>\n);\n\n\nModalDialog.propTypes = {\n children: PropTypes.node.isRequired,\n onKeyDown: PropTypes.func.isRequired,\n onAccept: PropTypes.func.isRequired,\n onDismiss: PropTypes.func.isRequired,\n onClear: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired,\n dialogContentClassName: PropTypes.string,\n okLabel: PropTypes.node.isRequired,\n cancelLabel: PropTypes.node.isRequired,\n clearLabel: PropTypes.node.isRequired,\n clearable: PropTypes.bool.isRequired,\n todayLabel: PropTypes.node.isRequired,\n showTodayButton: PropTypes.bool.isRequired,\n onSetToday: PropTypes.func.isRequired,\n seconds: PropTypes.bool.isRequired,\n};\n\nModalDialog.defaultProps = {\n dialogContentClassName: '',\n seconds: false\n};\n\nexport default withStyles(styles, { name: 'MuiPickersModal' })(ModalDialog);\n","import PropTypes from 'prop-types';\n\nconst date = PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.string,\n PropTypes.number,\n PropTypes.instanceOf(Date),\n]);\n\nexport default {\n date,\n};\n","import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport MaskedInput from 'react-text-mask';\n\nexport default class Input extends PureComponent {\n static propTypes = {\n mask: PropTypes.any,\n inputRef: PropTypes.func.isRequired,\n }\n\n static defaultProps = {\n mask: undefined,\n }\n\n render() {\n const { inputRef, ...props } = this.props;\n return (\n this.props.mask\n ? <MaskedInput {...props} ref={inputRef} />\n : <input {...props} ref={inputRef} />\n );\n }\n}\n","import React, { Component, cloneElement } from 'react';\nimport PropTypes from 'prop-types';\n\nconst { Consumer, Provider } = React.createContext();\nexport const MuiPickersContextConsumer = Consumer;\n\nexport default class MuiPickersUtilsProvider extends Component {\n static propTypes = {\n /* eslint-disable react/no-unused-prop-types */\n utils: PropTypes.func.isRequired,\n locale: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),\n children: PropTypes.oneOfType([\n PropTypes.element.isRequired,\n PropTypes.arrayOf(PropTypes.element.isRequired),\n ]).isRequired,\n moment: PropTypes.func,\n timeZone: PropTypes.string,\n ampm: PropTypes.bool,\n seconds: PropTypes.bool,\n utc: PropTypes.bool,\n selectTimezone: PropTypes.bool,\n }\n\n static defaultProps = {\n locale: undefined,\n moment: undefined,\n ampm: true,\n seconds: false,\n selectTimezone: false\n }\n\n state = {\n utils: null,\n utc: true,\n }\n\n changeUtcState = (utc) =>{\n this.setState({utc, isUTC: utc});\n }\n\n static getDerivedStateFromProps({ utils: Utils, locale, moment, timeZone, dateFormat, dateTimeFormat, timeFormat, ampm, seconds, children, selectTimezone }) {\n return {\n utils: new Utils({ \n locale, \n moment, \n timeZone, \n dateFormat, \n dateTimeFormat, \n timeFormat, \n ampm, \n seconds: children.props.format.includes('ss'),//children.props.seconds ? children.props.seconds : seconds ? seconds : false\n selectTimezone: children.props.selectTimezone ? children.props.selectTimezone : selectTimezone ? selectTimezone : false\n }),\n };\n }\n\n render() {\n const { ampm, selectTimezone, children } = this.props;\n return <Provider value={this.state.utils} >{cloneElement(this.props.children, { ampm, seconds: children.props.format.includes('ss'), changeUtcState: this.changeUtcState, utc: this.state.utc, selectTimezone: children.props.selectTimezone ? children.props.selectTimezone : selectTimezone ? selectTimezone : false })}</Provider>;\n }\n}\n","import React from 'react';\nimport { MuiPickersContextConsumer } from '../utils/MuiPickersUtilsProvider';\n\nconst WithUtils = () => (Component) => {\n const withUtils = props => (\n <MuiPickersContextConsumer>\n {utils => <Component utils={utils} {...props} />}\n </MuiPickersContextConsumer>\n );\n\n withUtils.displayName = `WithUtils(${Component.displayName || Component.name})`;\n\n return withUtils;\n};\n\nexport default WithUtils;\n","import React, { Fragment, PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport Icon from '@material-ui/core/Icon';\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport TextField from '@material-ui/core/TextField';\nimport Select from '@material-ui/core/Select';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport IconButton from '@material-ui/core/IconButton';\nimport { DateTime } from 'luxon';\n\nimport DomainPropTypes from '../constants/prop-types';\nimport MaskedInput from './MaskedInput';\nimport withUtils from './WithUtils';\n\nconst getDisplayDate = (props) => {\n const {\n utils, value, format, invalidLabel, emptyLabel, labelFunc, utc\n } = props;\n\n const isEmpty = value === null;\n const date = utils.date(value);\n\n if (labelFunc) {\n return labelFunc(isEmpty ? null : date, invalidLabel);\n }\n\n if (isEmpty) {\n return emptyLabel;\n }\n\n return utils.isValid(date)\n // ? utils.getFormattedDate(date, format, utc)\n ? utils.format(date, format, utc)\n : invalidLabel;\n};\n\nconst getError = (value, props) => {\n const {\n utils,\n maxDate,\n minDate,\n disablePast,\n disableFuture,\n maxDateMessage,\n minDateMessage,\n invalidDateMessage,\n } = props;\n\n if (!utils.isValid(value)) {\n // if null - do not show error\n if (utils.isNull(value)) {\n return '';\n }\n\n return invalidDateMessage;\n }\n\n if (\n (maxDate && utils.isAfter(value, utils.endOfDay(utils.date(maxDate))))\n || (disableFuture && utils.isAfter(value, utils.endOfDay(utils.date())))\n ) {\n return maxDateMessage;\n }\n\n if (\n (minDate && utils.isBefore(value, utils.startOfDay(utils.date(minDate))))\n || (disablePast && utils.isBefore(value, utils.startOfDay(utils.date())))\n ) {\n return minDateMessage;\n }\n\n return '';\n};\n\nexport class DateTextField extends PureComponent {\n static updateState = props => ({\n value: props.value,\n displayValue: getDisplayDate(props),\n error: getError(props.utils.date(props.value), props),\n utc: props.utc ? 'UTC' : 'LOCAL'\n });\n\n static propTypes = {\n value: PropTypes.oneOfType([\n PropTypes.object,\n PropTypes.string,\n PropTypes.number,\n PropTypes.instanceOf(Date),\n ]),\n minDate: DomainPropTypes.date,\n maxDate: DomainPropTypes.date,\n disablePast: PropTypes.bool,\n disableFuture: PropTypes.bool,\n format: PropTypes.string,\n onBlur: PropTypes.func,\n onChange: PropTypes.func.isRequired,\n onClear: PropTypes.func,\n onClick: PropTypes.func.isRequired,\n clearable: PropTypes.bool,\n utils: PropTypes.object.isRequired,\n disabled: PropTypes.bool,\n InputProps: PropTypes.shape(),\n /** Input mask, used in keyboard mode read more <a href=\"https://github.com/text-mask/text-mask/blob/master/componentDocumentation.md#readme\">here</a> */\n mask: PropTypes.any,\n /** Error message, shown if date is less then minimal date */\n minDateMessage: PropTypes.node,\n /** Error message, shown if date is more then maximal date */\n maxDateMessage: PropTypes.node,\n /** Message displaying in text field, if date is invalid (doesn't work in keyboard mode) */\n invalidLabel: PropTypes.string,\n /** Message displaying in text field, if null passed (doesn't work in keyboard mode) */\n emptyLabel: PropTypes.string,\n /** Dynamic label generation function [(date: Date, invalidLabel: string) => string] */\n labelFunc: PropTypes.func,\n /** On/off manual keyboard input mode */\n keyboard: PropTypes.bool,\n /** Icon displayed for open picker button in keyboard mode */\n keyboardIcon: PropTypes.node,\n /** enables/disable automatic opening of the picker when the user clicks enter */\n disableOpenOnEnter: PropTypes.bool,\n /** Message, appearing when date cannot be parsed */\n invalidDateMessage: PropTypes.node,\n /** Component that should replace the default Material-UI TextField */\n TextFieldComponent: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),\n /** Props to pass to keyboard input adornment */\n InputAdornmentProps: PropTypes.object,\n /** Specifies position of keyboard button adornment */\n adornmentPosition: PropTypes.oneOf(['start', 'end']),\n /** Callback firing when date that applied in the keyboard is invalid\n * [(error: string) => void]\n */\n onError: PropTypes.func,\n /** Callback firing on change input in keyboard mode [(e: Event) => void] */\n onInputChange: PropTypes.func,\n pipe: PropTypes.func,\n changeUtcState: PropTypes.func,\n utc: PropTypes.bool,\n }\n\n static defaultProps = {\n disabled: false,\n invalidLabel: 'Unknown',\n emptyLabel: '',\n value: new Date(),\n labelFunc: undefined,\n format: undefined,\n InputProps: undefined,\n keyboard: false,\n mask: undefined,\n keyboardIcon: 'event',\n disableOpenOnEnter: false,\n invalidDateMessage: 'Invalid Date Format',\n clearable: false,\n onBlur: undefined,\n onClear: undefined,\n disablePast: false,\n disableFuture: false,\n onError: undefined,\n onInputChange: undefined,\n minDate: '1900-01-01',\n maxDate: '2100-01-01',\n minDateMessage: 'Date should not be before minimal date',\n maxDateMessage: 'Date should not be after maximal date',\n TextFieldComponent: TextField,\n InputAdornmentProps: {},\n adornmentPosition: 'end',\n pipe: undefined,\n changeUtcState: undefined,\n utc: false\n }\n\n state = DateTextField.updateState(this.props)\n\n componentDidUpdate(prevProps) {\n if (\n !this.props.utils.isEqual(this.props.value, prevProps.value)\n || prevProps.format !== this.props.format\n || prevProps.maxDate !== this.props.maxDate\n || prevProps.minDate !== this.props.minDate\n || prevProps.emptyLabel !== this.props.emptyLabel\n || prevProps.utils !== this.props.utils\n ) {\n /* eslint-disable-next-line react/no-did-update-set-state */\n this.setState(DateTextField.updateState(this.props));\n }\n }\n\n commitUpdates = (value) => {\n const {\n clearable,\n onClear,\n utils,\n format,\n onError,\n } = this.props;\n\n if (value === '') {\n if (this.props.value === null) {\n this.setState(DateTextField.updateState(this.props));\n } else if (clearable && onClear) {\n onClear();\n }\n\n return;\n }\n\n const oldValue = utils.date(this.state.value);\n const newValue = utils.parse(value, format);\n const error = getError(newValue, this.props);\n\n this.setState({\n error,\n displayValue: value,\n value: error ? newValue : oldValue,\n }, () => {\n if (!error && !utils.isEqual(newValue, oldValue)) {\n this.props.onChange(newValue);\n }\n\n if (error && onError) {\n onError(newValue, error);\n }\n });\n }\n\n handleBlur = (e) => {\n if (this.props.keyboard) {\n e.preventDefault();\n e.stopPropagation();\n\n this.commitUpdates(e.target.value);\n if (this.props.onBlur) {\n this.props.onBlur(e);\n }\n }\n };\n\n handleChange = (e) => {\n const { utils, format, onInputChange } = this.props;\n const parsedValue = utils.parse(e.target.value, format);\n\n if (onInputChange) {\n onInputChange(e);\n }\n\n this.setState({\n displayValue: utils.getFormattedDate(this.props.utc, e.target.value),\n error: getError(parsedValue, this.props),\n });\n }\n\n handleFocus = (e) => {\n e.stopPropagation();\n e.preventDefault();\n\n if (!this.props.keyboard) {\n this.openPicker(e);\n }\n }\n\n handleKeyPress = (e) => {\n if (e.key === 'Enter') {\n if (!this.props.disableOpenOnEnter) {\n this.openPicker(e);\n } else {\n this.commitUpdates(e.target.value);\n }\n }\n }\n\n openPicker = (e) => {\n const { disabled, onClick } = this.props;\n\n if (!disabled) {\n onClick(e);\n }\n }\n\n handleUTCChange = (e) => {\n let utc = false;\n if (e.target.value === 'UTC') {\n utc = true\n }\n\n this.setState({ utc: e.target.value });\n this.props.changeUtcState(utc);\n\n // this.setState({\n // displayValue: this.props.utils.format(this.state.value)\n // // displayValue: this.props.utils.getFormattedDate(/*this.props.*/utc, this.state.value)\n // });\n this.setState(DateTextField.updateState(this.props));\n }\n\n render() {\n const {\n adornmentPosition,\n clearable,\n disabled,\n disableFuture,\n disableOpenOnEnter,\n disablePast,\n emptyLabel,\n format,\n InputAdornmentProps,\n InputProps,\n invalidDateMessage,\n invalidLabel,\n keyboard,\n keyboardIcon,\n labelFunc,\n mask,\n maxDate,\n maxDateMessage,\n minDate,\n minDateMessage,\n onBlur,\n onClear,\n onClick,\n pipe,\n TextFieldComponent,\n utils,\n value,\n onInputChange,\n changeUtcState,\n selectTimezone,\n utc,\n ...other\n } = this.props;\n\n const { displayValue, error } = this.state;\n const localInputProps = {\n inputComponent: MaskedInput,\n inputProps: {\n mask: !keyboard ? null : mask,\n pipe: !keyboard ? null : pipe,\n readOnly: !keyboard,\n },\n };\n\n if (keyboard) {\n localInputProps[`${adornmentPosition}Adornment`] = (\n <InputAdornment\n position={adornmentPosition}\n {...InputAdornmentProps}\n >\n <IconButton\n disabled={disabled}\n onClick={this.openPicker}\n >\n <Icon>\n {' '}\n {keyboardIcon}\n {' '}\n </Icon>\n </IconButton>\n </InputAdornment>\n );\n }\n\n return (\n <Fragment>\n <TextFieldComponent\n onClick={this.handleFocus}\n error={!!error}\n helperText={error}\n onKeyPress={this.handleKeyPress}\n onBlur={this.handleBlur}\n disabled={disabled}\n value={displayValue}\n {...other}\n onChange={this.handleChange}\n InputProps={{ ...localInputProps, ...InputProps }}\n />\n {selectTimezone &&\n <Select\n value={this.state.utc}\n onChange={this.handleUTCChange}\n label=\"Date\"\n >\n <MenuItem value={'UTC'}>UTC</MenuItem>\n <MenuItem value={'LOCAL'}>{DateTime.local().toFormat('z')}</MenuItem>\n </Select>\n }\n </ Fragment>\n );\n }\n}\n\nexport default withUtils()(DateTextField);\n","import React, { Fragment, PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport keycode from 'keycode';\nimport ModalDialog from '../_shared/ModalDialog';\nimport DateTextField from '../_shared/DateTextField';\nimport DomainPropTypes from '../constants/prop-types';\n\nexport default class ModalWrapper extends PureComponent {\n static propTypes = {\n /** \"OK\" label message */\n okLabel: PropTypes.node,\n /** \"Cancel\" label message */\n cancelLabel: PropTypes.node,\n /** \"Clear\" label message */\n clearLabel: PropTypes.node,\n /** If true clear button will be displayed */\n clearable: PropTypes.bool,\n /** \"Today\" label message */\n todayLabel: PropTypes.string,\n /**\n * If true today button will be displayed\n * <b>Note*</b> that clear button has higher priority\n */\n showTodayButton: PropTypes.bool,\n /** On open callback [(e: Event) => void] */\n onOpen: PropTypes.func,\n /** On close callback [(e: Event) => void] */\n format: PropTypes.string,\n /** Dialog props passed to material-ui Dialog */\n DialogProps: PropTypes.object,\n value: DomainPropTypes.date,\n invalidLabel: PropTypes.node,\n labelFunc: PropTypes.func,\n onClose: PropTypes.func,\n onAccept: PropTypes.func,\n onDismiss: PropTypes.func,\n onClear: PropTypes.func,\n onSetToday: PropTypes.func,\n children: PropTypes.node.isRequired,\n dialogContentClassName: PropTypes.string,\n isAccepted: PropTypes.bool.isRequired,\n changeUtcState: PropTypes.func,\n utc: PropTypes.bool,\n seconds: PropTypes.bool\n }\n\n static defaultProps = {\n dialogContentClassName: '',\n invalidLabel: undefined,\n value: new Date(),\n labelFunc: undefined,\n okLabel: 'OK',\n cancelLabel: 'Cancel',\n clearLabel: 'Clear',\n todayLabel: 'Today',\n clearable: false,\n showTodayButton: false,\n format: undefined,\n onAccept: undefined,\n onDismiss: undefined,\n onClear: undefined,\n onOpen: undefined,\n onClose: undefined,\n onSetToday: undefined,\n DialogProps: undefined,\n changeUtcState: undefined,\n utc: false,\n seconds: false,\n }\n\n state = {\n open: false,\n }\n\n static getDerivedStateFromProps(nextProps) {\n // only if accept = true close the dialog\n if (nextProps.isAccepted) {\n return {\n open: false,\n };\n }\n\n return null;\n }\n\n handleKeyDown = (event) => {\n switch (keycode(event)) {\n case 'enter':\n this.handleAccept();\n break;\n default:\n // if keycode is not handled, stop execution\n return;\n }\n\n // if event was handled prevent other side effects\n event.preventDefault();\n };\n\n handleSetTodayDate = () => {\n if (this.props.onSetToday) {\n this.props.onSetToday();\n }\n }\n\n open = () => {\n this.setState({ open: true });\n if (this.props.onOpen) {\n this.props.onOpen();\n }\n }\n\n close = () => {\n this.setState({ open: false });\n if (this.props.onClose) {\n this.props.onClose();\n }\n }\n\n handleAccept = () => {\n this.close();\n if (this.props.onAccept) {\n this.props.onAccept();\n }\n }\n\n handleDismiss = () => {\n this.close();\n if (this.props.onDismiss) {\n this.props.onDismiss();\n }\n }\n\n handleClear = () => {\n this.close();\n if (this.props.onClear) {\n this.props.onClear();\n }\n }\n\n render() {\n const {\n value,\n format,\n children,\n dialogContentClassName,\n onAccept,\n onDismiss,\n invalidLabel,\n labelFunc,\n okLabel,\n cancelLabel,\n clearLabel,\n clearable,\n todayLabel,\n showTodayButton,\n onOpen,\n onClose,\n onSetToday,\n isAccepted,\n DialogProps,\n changeUtcState,\n utc,\n seconds,\n ...other\n } = this.props;\n\n return (\n <Fragment>\n <DateTextField\n value={value}\n format={format}\n onClick={this.open}\n // onFocus={this.togglePicker} <- Currently not properly works with .blur() on TextField\n invalidLabel={invalidLabel}\n labelFunc={labelFunc}\n clearable={clearable}\n changeUtcState={changeUtcState}\n utc={utc}\n {...other}\n />\n\n <ModalDialog\n open={this.state.open}\n onKeyDown={this.handleKeyDown}\n onClear={this.handleClear}\n onAccept={this.handleAccept}\n onDismiss={this.handleDismiss}\n onSetToday={this.handleSetTodayDate}\n dialogContentClassName={dialogContentClassName}\n clearLabel={clearLabel}\n todayLabel={todayLabel}\n okLabel={okLabel}\n cancelLabel={cancelLabel}\n clearable={clearable}\n showTodayButton={showTodayButton}\n children={children}\n seconds={seconds}\n {...DialogProps}\n />\n </Fragment>\n );\n }\n}\n","/* eslint-disable import/prefer-default-export */\nexport const findClosestEnabledDate = ({\n date,\n utils,\n minDate,\n maxDate,\n disableFuture,\n disablePast,\n shouldDisableDate,\n}) => {\n const today = utils.startOfDay(utils.date());\n minDate = minDate && utils.date(minDate);\n maxDate = maxDate && utils.date(maxDate);\n if (disablePast && utils.isBefore(minDate, today)) minDate = today;\n if (disableFuture && utils.isAfter(maxDate, today)) maxDate = today;\n let forward = utils.date(date);\n let backward = utils.date(date);\n if (utils.isBefore(date, minDate)) {\n forward = minDate;\n backward = null;\n }\n if (utils.isAfter(date, maxDate)) {\n if (backward) backward = maxDate;\n forward = null;\n }\n\n while (forward || backward) {\n if (forward && utils.isAfter(forward, maxDate)) forward = null;\n if (backward && utils.isBefore(backward, minDate)) backward = null;\n if (forward) {\n if (!shouldDisableDate(forward)) return forward;\n forward = utils.addDays(forward, 1);\n }\n if (backward) {\n if (!shouldDisableDate(backward)) return backward;\n backward = utils.addDays(backward, -1);\n }\n }\n return null;\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport withStyles from '@material-ui/core/styles/withStyles';\nimport TransitionGroup from 'react-transition-group/TransitionGroup';\nimport CSSTransition from 'react-transition-group/CSSTransition';\n\nconst animationDuration = 350;\n\nconst transitionFactory = props => child => React.cloneElement(child, props);\n\nconst SlideTransition = ({\n classes, className, children, transKey, slideDirection,\n}) => (\n <TransitionGroup\n className={classnames(classes.transitionContainer, className)}\n childFactory={transitionFactory({\n classNames: {\n enter: classes[`slideEnter-${slideDirection}`],\n enterActive: classes.slideEnterActive,\n exit: classes.slideExit,\n exitActive: classes[`slideExitActiveLeft-${slideDirection}`],\n },\n })\n }\n >\n <CSSTransition key={transKey} mountOnEnter unmountOnExit timeout={animationDuration}>\n {children}\n </CSSTransition>\n </TransitionGroup>\n);\n\nSlideTransition.propTypes = {\n classes: PropTypes.shape({}).isRequired,\n children: PropTypes.node.isRequired,\n className: PropTypes.string,\n slideDirection: PropTypes.oneOf(['left', 'right']).isRequired,\n transKey: PropTypes.string.isRequired,\n};\n\nSlideTransition.defaultProps = {\n className: undefined,\n};\n\nconst styles = (theme) => {\n const slideTransition = theme.transitions.create('transform', {\n duration: animationDuration,\n easing: 'cubic-bezier(0.35, 0.8, 0.4, 1)',\n });\n\n return {\n transitionContainer: {\n display: 'block',\n position: 'relative',\n '& > *': {\n position: 'absolute',\n top: 0,\n right: 0,\n left: 0,\n },\n },\n 'slideEnter-left': {\n willChange: 'transform',\n transform: 'translate(100%)',\n },\n 'slideEnter-right': {\n willChange: 'transform',\n transform: 'translate(-100%)',\n },\n slideEnterActive: {\n transform: 'translate(0%)',\n transition: slideTransition,\n },\n slideExit: {\n transform: 'translate(0%)',\n },\n 'slideExitActiveLeft-left': {\n willChange: 'transform',\n transform: 'translate(-100%)',\n transition: slideTransition,\n },\n 'slideExitActiveLeft-right': {\n willChange: 'transform',\n transform: 'translate(100%)',\n transition: slideTransition,\n },\n };\n};\n\nexport default withStyles(styles, {\n name: 'MuiPickersSlideTransition',\n})(SlideTransition);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@material-ui/core/styles/withStyles';\nimport Typography from '@material-ui/core/Typography';\nimport IconButton from '@material-ui/core/IconButton';\nimport Icon from '@material-ui/core/Icon';\nimport withUtils from '../../_shared/WithUtils';\nimport SlideTransition from './SlideTransition';\n\nexport const CalendarHeader = ({\n classes,\n theme,\n currentMonth,\n onMonthChange,\n leftArrowIcon,\n rightArrowIcon,\n disablePrevMonth,\n disableNextMonth,\n utils,\n slideDirection,\n}) => {\n const rtl = theme.direction === 'rtl';\n\n const selectNextMonth = () => onMonthChange(utils.getNextMonth(currentMonth), 'left');\n const selectPreviousMonth = () => onMonthChange(utils.getPreviousMonth(currentMonth), 'right');\n return (\n <div>\n <div className={classes.switchHeader}>\n <IconButton\n disabled={disablePrevMonth}\n onClick={selectPreviousMonth}\n className={classes.iconButton}\n >\n <Icon>{rtl ? rightArrowIcon : leftArrowIcon}</Icon>\n </IconButton>\n\n <SlideTransition\n slideDirection={slideDirection}\n transKey={currentMonth.toString()}\n className={classes.transitionContainer}\n >\n <Typography\n align=\"center\"\n variant=\"body1\"\n >\n {utils.getCalendarHeaderText(currentMonth)}\n </Typography>\n </SlideTransition>\n\n <IconButton\n disabled={disableNextMonth}\n onClick={selectNextMonth}\n className={classes.iconButton}\n >\n <Icon>{rtl ? leftArrowIcon : rightArrowIcon}</Icon>\n </IconButton>\n </div>\n\n <div className={classes.daysHeader}>\n {\n utils.getWeekdays().map((day, index) => (\n <Typography\n key={index} // eslint-disable-line react/no-array-index-key\n variant=\"caption\"\n className={classes.dayLabel}\n >\n {day}\n </Typography>\n ))\n }\n </div>\n </div>\n );\n};\n\nCalendarHeader.propTypes = {\n currentMonth: PropTypes.object.isRequired,\n onMonthChange: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired,\n theme: PropTypes.object.isRequired,\n leftArrowIcon: PropTypes.node,\n rightArrowIcon: PropTypes.node,\n disablePrevMonth: PropTypes.bool,\n disableNextMonth: PropTypes.bool,\n utils: PropTypes.object.isRequired,\n slideDirection: PropTypes.oneOf(['right', 'left']).isRequired,\n};\n\nCalendarHeader.defaultProps = {\n leftArrowIcon: 'keyboard_arrow_left',\n rightArrowIcon: 'keyboard_arrow_right',\n disablePrevMonth: false,\n disableNextMonth: false,\n};\n\nconst styles = theme => ({\n switchHeader: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginTop: theme.spacing.unit / 2,\n marginBottom: theme.spacing.unit,\n },\n transitionContainer: {\n width: '100%',\n height: 20,\n },\n iconButton: {\n zIndex: 2,\n backgroundColor: theme.palette.background.paper,\n '& > *': { // label\n backgroundColor: theme.palette.background.paper,\n '& > *': { // icon\n zIndex: 1,\n overflow: 'visible',\n },\n },\n },\n daysHeader: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n maxHeight: 16,\n },\n dayLabel: {\n width: 36,\n margin: '0 2px',\n textAlign: 'center',\n color: theme.palette.text.hint,\n },\n});\n\nexport default withStyles(\n styles,\n { withTheme: true, name: 'MuiPickersCalendarHeader' },\n)(withUtils()(CalendarHeader));\n","import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport withStyles from '@material-ui/core/styles/withStyles';\nimport IconButton from '@material-ui/core/IconButton';\n\nclass Day extends PureComponent {\n static propTypes = {\n children: PropTypes.node.isRequired,\n classes: PropTypes.object.isRequired,\n current: PropTypes.bool,\n disabled: PropTypes.bool,\n hidden: PropTypes.bool,\n selected: PropTypes.bool,\n }\n\n static defaultProps = {\n disabled: false,\n hidden: false,\n current: false,\n selected: false,\n }\n\n render() {\n const {\n children, classes, disabled, hidden, current, selected, ...other\n } = this.props;\n\n const className = classnames(classes.day, {\n [classes.hidden]: hidden,\n [classes.current]: current,\n [classes.selected]: selected,\n [classes.disabled]: disabled,\n });\n\n return (\n <IconButton\n className={className}\n tabIndex={hidden || disabled ? -1 : 0}\n {...other}\n >\n {children}\n </IconButton>\n );\n }\n}\n\nconst styles = theme => ({\n day: {\n width: 36,\n height: 36,\n fontSize: theme.typography.caption.fontSize,\n margin: '0 2px',\n color: theme.palette.text.primary,\n fontWeight: theme.typography.fontWeightMedium,\n },\n hidden: {\n opacity: 0,\n pointerEvents: 'none',\n },\n current: {\n color: theme.palette.primary.main,\n fontWeight: 600,\n },\n selected: {\n color: theme.palette.common.white,\n backgroundColor: theme.palette.primary.main,\n fontWeight: theme.typography.fontWeightMedium,\n '&:hover': {\n backgroundColor: theme.palette.primary.main,\n },\n },\n disabled: {\n pointerEvents: 'none',\n color: theme.palette.text.hint,\n },\n});\n\nexport default withStyles(styles, { name: 'MuiPickersDay' })(Day);\n","import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\n\nclass DayWrapper extends PureComponent {\n static propTypes = {\n children: PropTypes.node.isRequired,\n dayInCurrentMonth: PropTypes.bool,\n disabled: PropTypes.bool,\n onSelect: PropTypes.func.isRequired,\n value: PropTypes.any.isRequired,\n }\n\n static defaultProps = {\n dayInCurrentMonth: true,\n disabled: false,\n }\n\n handleClick = () => {\n this.props.onSelect(this.props.value);\n }\n\n render() {\n const {\n children, value, dayInCurrentMonth, disabled, onSelect, ...other\n } = this.props;\n\n return (\n <div\n onClick={dayInCurrentMonth && !disabled ? this.handleClick : undefined}\n onKeyPress={dayInCurrentMonth && !disabled ? this.handleClick : undefined}\n role=\"presentation\"\n {...other}\n >\n {children}\n </div>\n );\n }\n}\n\nexport default DayWrapper;\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport keycode from 'keycode';\nimport withStyles from '@material-ui/core/styles/withStyles';\nimport EventListener from 'react-event-listener';\n\nimport { findClosestEnabledDate } from '../../_helpers/date-utils';\nimport CalendarHeader from './CalendarHeader';\nimport Day from './Day';\nimport DayWrapper from './DayWrapper';\nimport DomainPropTypes from '../../constants/prop-types';\nimport withUtils from '../../_shared/WithUtils';\nimport SlideTransition from './SlideTransition';\n\n/* eslint-disable no-unused-expressions */\nexport class Calendar extends Component {\n static propTypes = {\n date: PropTypes.object.isRequired,\n minDate: DomainPropTypes.date,\n maxDate: DomainPropTypes.date,\n classes: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n disablePast: PropTypes.bool,\n disableFuture: PropTypes.bool,\n leftArrowIcon: PropTypes.node,\n rightArrowIcon: PropTypes.node,\n renderDay: PropTypes.func,\n theme: PropTypes.object.isRequired,\n shouldDisableDate: PropTypes.func,\n utils: PropTypes.object.isRequired,\n allowKeyboardControl: PropTypes.bool,\n utc: PropTypes.bool,\n };\n\n static defaultProps = {\n minDate: '1900-01-01',\n maxDate: '2100-01-01',\n disablePast: false,\n disableFuture: false,\n leftArrowIcon: undefined,\n rightArrowIcon: undefined,\n renderDay: undefined,\n allowKeyboardControl: false,\n utc: false,\n shouldDisableDate: () => false,\n };\n\n state = {\n slideDirection: 'left',\n currentMonth: this.props.utils.getStartOfMonth(this.props.date, this.props.utc),\n };\n\n\n static getDerivedStateFromProps(nextProps, state) {\n if (!nextProps.utils.isEqual(nextProps.date, state.lastDate)) {\n return {\n lastDate: nextProps.date,\n currentMonth: nextProps.utils.getStartOfMonth(nextProps.date, nextProps.utc),\n };\n }\n\n return null;\n }\n\n componentDidMount() {\n const {\n date, minDate, maxDate, utils, disableFuture, disablePast,\n } = this.props;\n\n if (this.shouldDisableDate(date)) {\n this.onDateSelect(findClosestEnabledDate({\n date,\n utils,\n minDate,\n maxDate,\n disablePast,\n disableFuture,\n shouldDisableDate: this.shouldDisableDate,\n }), false);\n }\n }\n\n onDateSelect = (day, isFinish = true) => {\n const { date, utils } = this.props;\n this.props.onChange(utils.mergeDateAndTime(day, date), isFinish);\n };\n\n handleChangeMonth = (newMonth, slideDirection) => {\n this.setState({ currentMonth: newMonth, slideDirection });\n };\n\n validateMinMaxDate = (day) => {\n const { minDate, maxDate, utils } = this.props;\n\n return (\n (minDate && utils.isBeforeDay(day, utils.date(minDate)))\n || (maxDate && utils.isAfterDay(day, utils.date(maxDate)))\n );\n };\n\n shouldDisablePrevMonth = () => {\n const { utils, disablePast, minDate } = this.props;\n const now = utils.date();\n // console.log(\"shouldDisablePrevMonth min cur\", this.state.currentMonth.toFormat('dd/MM/yyyy HH:mm:ss'), !utils.isBefore(\n // utils.getStartOfMonth(disablePast && utils.isAfter(now, minDate)\n // ? now\n // : utils.date(minDate)),\n // this.state.currentMonth,\n // ))\n // console.log(\"shouldDisablePrevMonth min\", minDate, utils.getStartOfMonth(disablePast && utils.isAfter(now, minDate)\n // ? now\n // : utils.date(minDate)).toFormat('dd/MM/yyyy HH:mm:ss'))\n return !utils.isBefore(\n utils.getStartOfMonth(disablePast && utils.isAfter(now, minDate)\n ? now\n : utils.date(minDate)),\n this.state.currentMonth,\n );\n };\n\n shouldDisableNextMonth = () => {\n const { utils, disableFuture, maxDate } = this.props;\n // console.log(\"shouldDisableNextMonth max\", maxDate)\n const now = utils.date();\n return !utils.isAfter(\n utils.getStartOfMonth(disableFuture && utils.isBefore(now, maxDate)\n ? now\n : utils.date(maxDate)),\n this.state.currentMonth,\n );\n };\n\n shouldDisableDate = (day) => {\n const {\n disablePast, disableFuture, shouldDisableDate, utils, utc\n } = this.props;\n\n return (\n (disableFuture && utils.isAfterDay(day, utils.date(undefined, utc)))\n || (disablePast && utils.isBeforeDay(day, utils.date(undefined, utc)))\n || this.validateMinMaxDate(day)\n || shouldDisableDate(day)\n );\n };\n\n moveToDay = (day) => {\n if (day && !this.shouldDisableDate(day)) {\n this.onDateSelect(day, false);\n }\n }\n\n handleKeyDown = (event) => {\n const { theme, date, utils, utc } = this.props;\n\n switch (keycode(event)) {\n case 'up':\n this.moveToDay(utils.addDays(date, -7, utc));\n break;\n case 'down':\n this.moveToDay(utils.addDays(date, 7, utc));\n break;\n case 'left':\n theme.direction === 'ltr'\n ? this.moveToDay(utils.addDays(date, -1, utc))\n : this.moveToDay(utils.addDays(date, 1, utc));\n break;\n case 'right':\n theme.direction === 'ltr'\n ? this.moveToDay(utils.addDays(date, 1, utc))\n : this.moveToDay(utils.addDays(date, -1, utc));\n break;\n default:\n // if keycode is not handled, stop execution\n return;\n }\n\n // if event was handled prevent other side effects (e.g. page scroll)\n event.preventDefault();\n };\n\n renderWeeks = () => {\n const { utils, utc } = this.props;\n const { currentMonth } = this.state;\n const weeks = utils.getWeekArray(currentMonth, utc);\n\n return weeks.map(week => {\n \n return (\n <div\n key={`week-${week[0].toString()}`}\n className={this.props.classes.week}\n >\n {this.renderDays(week)}\n </div>\n )});\n }\n\n renderDays = (week) => {\n const { date, renderDay, utils, utc } = this.props;\n const selectedDate = utils.startOfDay(date, utc);\n const currentMonthNumber = utils.getMonth(this.state.currentMonth, utc);\n const now = utils.date();\n\n return week.map((day) => {\n const disabled = this.shouldDisableDate(day);\n const dayInCurrentMonth = utils.getMonth(day, utc) === currentMonthNumber;\n\n let dayComponent = (\n <Day\n current={utils.isSameDay(day, now)}\n hidden={!dayInCurrentMonth}\n disabled={disabled}\n selected={utils.isSameDay(selectedDate, day)}\n >\n {utils.getDayText(day, utc)}\n </Day>\n );\n\n if (renderDay) {\n dayComponent = renderDay(day, selectedDate, dayInCurrentMonth, dayComponent);\n }\n\n return (\n <DayWrapper\n key={day.toString()}\n value={day}\n dayInCurrentMonth={dayInCurrentMonth}\n disabled={disabled}\n onSelect={this.onDateSelect}\n >\n {dayComponent}\n </DayWrapper>\n );\n });\n };\n\n render() {\n const { currentMonth, slideDirection } = this.state;\n const { classes, utils, allowKeyboardControl } = this.props;\n\n return (\n <Fragment>\n {\n allowKeyboardControl\n && <EventListener target=\"window\" onKeyDown={this.handleKeyDown} />\n }\n\n <CalendarHeader\n slideDirection={slideDirection}\n currentMonth={currentMonth}\n onMonthChange={this.handleChangeMonth}\n leftArrowIcon={this.props.leftArrowIcon}\n rightArrowIcon={this.props.rightArrowIcon}\n disablePrevMonth={this.shouldDisablePrevMonth()}\n disableNextMonth={this.shouldDisableNextMonth()}\n utils={utils}\n />\n\n <SlideTransition\n slideDirection={slideDirection}\n transKey={currentMonth.toString()}\n className={classes.transitionContainer}\n >\n <div\n /* eslint-disable-next-line */\n autoFocus // Autofocus required for getting work keyboard navigation feature\n >\n {this.renderWeeks()}\n </div>\n </SlideTransition>\n </Fragment>\n );\n }\n}\n\nconst styles = theme => ({\n transitionContainer: {\n minHeight: 36 * 6,\n marginTop: theme.spacing.unit * 1.5,\n },\n week: {\n display: 'flex',\n justifyContent: 'center',\n },\n});\n\nexport default withStyles(styles, {\n name: 'MuiPickersCalendar',\n withTheme: true,\n})(withUtils()(Calendar));\n","import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport withStyles from '@material-ui/core/styles/withStyles';\nimport Typography from '@material-ui/core/Typography';\n\nexport class Year extends PureComponent {\n static propTypes = {\n children: PropTypes.node.isRequired,\n classes: PropTypes.object.isRequired,\n disabled: PropTypes.bool,\n onSelect: PropTypes.func.isRequired,\n selected: PropTypes.bool,\n value: PropTypes.any.isRequired,\n }\n\n static defaultProps = {\n selected: false,\n disabled: false,\n }\n\n handleClick = () => {\n this.props.onSelect(this.props.value);\n }\n\n render() {\n const {\n classes, selected, disabled, value, children, ...other\n } = this.props;\n\n return (\n <Typography\n role=\"button\"\n component=\"div\"\n className={classnames(classes.root, {\n [classes.selected]: selected,\n [classes.disabled]: disabled,\n })}\n tabIndex={disabled ? -1 : 0}\n onClick={this.handleClick}\n onKeyPress={this.handleClick}\n color={selected ? 'primary' : 'default'}\n variant={selected ? 'headline' : 'subheading'}\n {...other}\n >\n {children}\n </Typography>\n );\n }\n}\n\nconst styles = theme => ({\n root: {\n height: theme.spacing.unit * 5,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n cursor: 'pointer',\n outline: 'none',\n '&:focus': {\n color: theme.palette.primary.main,\n fontWeight: theme.typography.fontWeightMedium,\n },\n },\n selected: {\n margin: '10px 0',\n fontWeight: theme.typography.fontWeightMedium,\n },\n disabled: {\n pointerEvents: 'none',\n color: theme.palette.text.hint,\n },\n});\n\nexport default withStyles(styles, { name: 'MuiPickersYear' })(Year);\n","import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { findDOMNode } from 'react-dom';\nimport withStyles from '@material-ui/core/styles/withStyles';\nimport DomainPropTypes from '../../constants/prop-types';\nimport withUtils from '../../_shared/WithUtils';\nimport Year from './Year';\n\nexport class YearSelection extends PureComponent {\n static propTypes = {\n date: PropTypes.shape({}).isRequired,\n minDate: DomainPropTypes.date.isRequired,\n maxDate: DomainPropTypes.date.isRequired,\n classes: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n disablePast: PropTypes.bool.isRequired,\n disableFuture: PropTypes.bool.isRequired,\n animateYearScrolling: PropTypes.bool,\n utils: PropTypes.object.isRequired,\n }\n\n static defaultProps = {\n animateYearScrolling: false,\n }\n\n selectedYearRef = undefined;\n\n getSelectedYearRef = (ref) => {\n this.selectedYearRef = ref;\n }\n\n scrollToCurrentYear = () => {\n const { animateYearScrolling } = this.props;\n const currentYearElement = findDOMNode(this.selectedYearRef);\n\n if (currentYearElement && currentYearElement.scrollIntoView) {\n if (animateYearScrolling) {\n setTimeout(() => currentYearElement.scrollIntoView({ behavior: 'smooth' }), 100);\n } else {\n currentYearElement.scrollIntoView();\n }\n }\n }\n\n componentDidMount = () => {\n this.scrollToCurrentYear();\n }\n\n onYearSelect = (year) => {\n const { date, onChange, utils } = this.props;\n\n const newDate = utils.setYear(date, year);\n onChange(newDate);\n }\n\n render() {\n const {\n minDate, maxDate, date, classes, disablePast, disableFuture, utils,\n } = this.props;\n const currentYear = utils.getYear(date);\n\n return (\n <div className={classes.container}>\n {\n utils.getYearRange(minDate, maxDate)\n .map((year) => {\n const yearNumber = utils.getYear(year);\n const selected = yearNumber === currentYear;\n\n return (\n <Year\n key={utils.getYearText(year)}\n selected={selected}\n value={yearNumber}\n onSelect={this.onYearSelect}\n ref={selected ? this.getSelectedYearRef : undefined}\n disabled={(\n (disablePast && utils.isBeforeYear(year, utils.date()))\n || (disableFuture && utils.isAfterYear(year, utils.date()))\n )}\n >\n {utils.getYearText(year)}\n </Year>\n );\n })\n }\n </div>\n );\n }\n}\n\nconst styles = {\n container: {\n maxHeight: 300,\n overflowY: 'auto',\n justifyContent: 'center',\n },\n};\n\nexport default withStyles(styles, { name: 'MuiPickersYearSelection' })(withUtils()(YearSelection));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport withStyles from '@material-ui/core/styles/withStyles';\nimport Toolbar from '@material-ui/core/Toolbar';\n\nconst PickerToolbar = (props) => {\n const {\n children, className, classes, ...other\n } = props;\n\n return (\n <Toolbar className={classnames(classes.toolbar, className)} {...other}>\n { children }\n </Toolbar>\n );\n};\n\nPickerToolbar.propTypes = {\n children: PropTypes.arrayOf(PropTypes.node).isRequired,\n className: PropTypes.string,\n classes: PropTypes.object.isRequired,\n};\n\nPickerToolbar.defaultProps = {\n className: '',\n};\n\nconst styles = theme => ({\n toolbar: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-start',\n justifyContent: 'center',\n height: 100,\n backgroundColor: theme.palette.type === 'light'\n ? theme.palette.primary.main\n : theme.palette.background.default,\n },\n});\n\nexport default withStyles(styles, { name: 'MuiPickersToolbar' })(PickerToolbar);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport Typography from '@material-ui/core/Typography';\nimport withStyles from '@material-ui/core/styles/withStyles';\n\nconst ToolbarButton = (props) => {\n const {\n classes, selected, label, className, ...other\n } = props;\n\n return (\n <Typography\n className={classnames(classes.toolbarBtn, className, {\n [classes.toolbarBtnSelected]: selected,\n })}\n {...other}\n >\n { label }\n </Typography>\n );\n};\n\nToolbarButton.propTypes = {\n selected: PropTypes.bool.isRequired,\n label: PropTypes.string.isRequired,\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n};\n\nToolbarButton.defaultProps = {\n className: '',\n};\n\nconst styles = theme => ({\n toolbarBtn: {\n cursor: 'pointer',\n color: 'rgba(255, 255, 255, 0.54)',\n },\n toolbarBtnSelected: {\n color: theme.palette.common.white,\n },\n});\n\nexport default withStyles(styles, { name: 'MuiPickersToolbarButton' })(ToolbarButton);\n","import React, { PureComponent, Fragment } from 'react';\nimport PropTypes from 'prop-types';\n\nimport Calendar from './components/Calendar';\nimport YearSelection from './components/YearSelection';\nimport PickerToolbar from '../_shared/PickerToolbar';\nimport ToolbarButton from '../_shared/ToolbarButton';\nimport DomainPropTypes from '../constants/prop-types';\nimport withUtils from '../_shared/WithUtils';\n\nexport class DatePicker extends PureComponent {\n static propTypes = {\n date: PropTypes.object.isRequired,\n minDate: DomainPropTypes.date,\n maxDate: DomainPropTypes.date,\n onChange: PropTypes.func.isRequired,\n disablePast: PropTypes.bool,\n disableFuture: PropTypes.bool,\n animateYearScrolling: PropTypes.bool,\n openToYearSelection: PropTypes.bool,\n children: PropTypes.node,\n leftArrowIcon: PropTypes.node,\n rightArrowIcon: PropTypes.node,\n renderDay: PropTypes.func,\n utils: PropTypes.object.isRequired,\n shouldDisableDate: PropTypes.func,\n allowKeyboardControl: PropTypes.bool,\n utc: PropTypes.bool,\n }\n\n static defaultProps = {\n minDate: '1900-01-01',\n maxDate: '2100-01-01',\n disablePast: false,\n disableFuture: false,\n allowKeyboardControl: false,\n animateYearScrolling: undefined,\n openToYearSelection: false,\n children: null,\n leftArrowIcon: undefined,\n rightArrowIcon: undefined,\n renderDay: undefined,\n shouldDisableDate: undefined,\n utc: false,\n }\n\n state = {\n showYearSelection: this.props.openToYearSelection,\n }\n\n get date() {\n return this.props.utils.startOfDay(this.props.date, this.props.utc);\n }\n\n get minDate() {\n return this.props.utils.date(this.props.minDate, this.props.utc);\n }\n\n get maxDate() {\n return this.props.utils.date(this.props.maxDate, this.props.utc);\n }\n\n handleYearSelect = (date) => {\n this.props.onChange(date, false);\n this.openCalendar();\n }\n\n openYearSelection = () => {\n this.setState({ showYearSelection: true });\n }\n\n openCalendar = () => {\n this.setState({ showYearSelection: false });\n }\n\n render() {\n const {\n disablePast,\n disableFuture,\n onChange,\n animateYearScrolling,\n leftArrowIcon,\n rightArrowIcon,\n renderDay,\n utils,\n shouldDisableDate,\n allowKeyboardControl,\n } = this.props;\n const { showYearSelection } = this.state;\n\n return (\n <Fragment>\n <PickerToolbar>\n <ToolbarButton\n variant=\"subheading\"\n onClick={this.openYearSelection}\n selected={showYearSelection}\n label={utils.getYearText(this.date)}\n />\n\n <ToolbarButton\n variant=\"display1\"\n onClick={this.openCalendar}\n selected={!showYearSelection}\n label={utils.getDatePickerHeaderText(this.date)}\n />\n </PickerToolbar>\n\n { this.props.children }\n\n {\n showYearSelection\n ? (\n <YearSelection\n date={this.date}\n onChange={this.handleYearSelect}\n minDate={this.minDate}\n maxDate={this.maxDate}\n disablePast={disablePast}\n disableFuture={disableFuture}\n animateYearScrolling={animateYearScrolling}\n utils={utils}\n />\n )\n : (\n <Calendar\n date={this.date}\n onChange={onChange}\n disablePast={disablePast}\n disableFuture={disableFuture}\n minDate={this.minDate}\n maxDate={this.maxDate}\n leftArrowIcon={leftArrowIcon}\n rightArrowIcon={rightArrowIcon}\n renderDay={renderDay}\n utils={utils}\n shouldDisableDate={shouldDisableDate}\n allowKeyboardControl={allowKeyboardControl}\n />\n )\n }\n </Fragment>\n );\n }\n}\n\nexport default withUtils()(DatePicker);\n","/* eslint-disable react/prop-types */\n\nimport * as React from 'react';\nimport withUtils from './WithUtils';\n\nconst getInitialDate = ({ utils, value, initialFocusedDate }) => {\n const initialDate = value || initialFocusedDate || utils.date();\n const date = utils.date(initialDate);\n\n return utils.isValid(date) ? date : utils.date();\n};\n\nclass BasePicker extends React.Component {\n state = {\n date: getInitialDate(this.props),\n isAccepted: false\n };\n\n componentDidUpdate(prevProps) {\n const { utils, value } = this.props;\n if (prevProps.value !== value || prevProps.utils.locale !== utils.locale) {\n this.changeDate(getInitialDate(this.props));\n }\n }\n\n changeDate = (date, callback) => this.setState({ date }, callback);\n\n handleAcceptedChange = (isAccepted, callback) => this.setState({ isAccepted }, callback);\n\n handleClear = () => this.props.onChange(null);\n\n handleAccept = () => this.props.onChange(this.state.date);\n\n handleSetTodayDate = () => this.handleChange(this.props.utils.date(), false);\n\n handleTextFieldChange = (date) => {\n const { onChange } = this.props;\n if (date === null) {\n onChange(null);\n } else {\n this.changeDate(date, () => onChange(date));\n }\n };\n\n pickFormat = (defaultFormat) => {\n const { format, labelFunc } = this.props;\n if (format || labelFunc) {\n return format;\n }\n\n return defaultFormat;\n };\n\n handleChange = (newDate, isFinish = true) => {\n const { handleAcceptedChange, changeDate } = this;\n const { autoOk, onChange } = this.props;\n changeDate(newDate, () => {\n if (isFinish && autoOk) {\n onChange(newDate);\n // pass down accept true, and make it false in the next tick\n handleAcceptedChange(true, () => handleAcceptedChange(false));\n }\n });\n };\n\n render() {\n return this.props.children({\n ...this.props,\n ...this.state,\n changeDate: this.changeDate,\n handleAcceptedChange: this.handleAcceptedChange,\n handleClear: this.handleClear,\n handleAccept: this.handleAccept,\n handleSetTodayDate: this.handleSetTodayDate,\n handleTextFieldChange: this.handleTextFieldChange,\n pickFormat: this.pickFormat,\n handleChange: this.handleChange,\n });\n }\n}\n\nexport default withUtils()(BasePicker);\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport ModalWrapper from '../wrappers/ModalWrapper';\nimport DatePicker from './DatePicker';\nimport DomainPropTypes from '../constants/prop-types';\nimport BasePicker from '../_shared/BasePicker';\n\nexport const DatePickerModal = (props) => {\n const {\n allowKeyboardControl,\n animateYearScrolling,\n autoOk,\n disableFuture,\n disablePast,\n format,\n forwardedRef,\n labelFunc,\n leftArrowIcon,\n maxDate,\n minDate,\n initialFocusedDate,\n onChange,\n openToYearSelection,\n renderDay,\n rightArrowIcon,\n shouldDisableDate,\n value,\n utc,\n selectTimezone,\n ...other\n } = props;\n\n return (\n <BasePicker {...props}>\n {\n ({\n date,\n utils,\n handleAccept,\n handleChange,\n handleClear,\n handleDismiss,\n handleSetTodayDate,\n handleTextFieldChange,\n isAccepted,\n }) => (\n <ModalWrapper\n disableFuture={disableFuture}\n disablePast={disablePast}\n format={format || utils.dateFormat}\n labelFunc={labelFunc}\n maxDate={maxDate}\n minDate={minDate}\n onAccept={handleAccept}\n onChange={handleTextFieldChange}\n onClear={handleClear}\n onDismiss={handleDismiss}\n onSetToday={handleSetTodayDate}\n ref={forwardedRef}\n value={value}\n isAccepted={isAccepted}\n selectTimezone={selectTimezone}\n {...other}\n >\n <DatePicker\n date={date}\n allowKeyboardControl={allowKeyboardControl}\n animateYearScrolling={animateYearScrolling}\n disableFuture={disableFuture}\n disablePast={disablePast}\n leftArrowIcon={leftArrowIcon}\n maxDate={maxDate}\n minDate={minDate}\n onChange={handleChange}\n openToYearSelection={openToYearSelection}\n renderDay={renderDay}\n rightArrowIcon={rightArrowIcon}\n shouldDisableDate={shouldDisableDate}\n utc={utc}\n />\n </ModalWrapper>\n )\n }\n </BasePicker>\n );\n};\n\nDatePickerModal.propTypes = {\n /** Datepicker value */\n value: DomainPropTypes.date,\n /** Min selectable date */\n minDate: DomainPropTypes.date,\n /** Max selectable date */\n maxDate: DomainPropTypes.date,\n /** Initial focused date when calendar opens, if no value is provided */\n initialFocusedDate: DomainPropTypes.date,\n /** Date format string for input */\n format: PropTypes.string,\n /** Callback firing when date accepted [(date: Date) => void] */\n onChange: PropTypes.func.isRequired,\n /** Auto accept date on selection */\n autoOk: PropTypes.bool,\n /** Disable past dates */\n disablePast: PropTypes.bool,\n /** Disable future dates */\n disableFuture: PropTypes.bool,\n /** To animate scrolling to current year (with scrollIntoView) */\n animateYearScrolling: PropTypes.bool,\n /** Open datepicker from year selection */\n openToYearSelection: PropTypes.bool,\n /** Allow to specify dynamic label for text field\n * [(date: Date, invalidLabel: string) => string]\n */\n labelFunc: PropTypes.func,\n /** Left arrow icon */\n leftArrowIcon: PropTypes.node,\n /** Right arrow icon */\n rightArrowIcon: PropTypes.node,\n /** Custom renderer for day\n * [(date: Date, nowSelectedDate: Date, isInCurrentMonth: boolean) => ReactElement]\n */\n renderDay: PropTypes.func,\n /** Disable specific date [(date: Date) => boolean] */\n shouldDisableDate: PropTypes.func,\n /** Enables keyboard listener for moving between days in calendar */\n allowKeyboardControl: PropTypes.bool,\n forwardedRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n utc: PropTypes.bool,\n};\n\nDatePickerModal.defaultProps = {\n value: new Date(),\n format: undefined,\n autoOk: false,\n minDate: '1900-01-01',\n maxDate: '2100-01-01',\n initialFocusedDate: undefined,\n disableFuture: false,\n disablePast: false,\n animateYearScrolling: false,\n openToYearSelection: false,\n allowKeyboardControl: true,\n leftArrowIcon: 'keyboard_arrow_left',\n rightArrowIcon: 'keyboard_arrow_right',\n renderDay: undefined,\n labelFunc: undefined,\n shouldDisableDate: undefined,\n forwardedRef: undefined,\n utc: false\n};\n\nexport default React.forwardRef((props, ref) => (\n <DatePickerModal {...props} forwardedRef={ref} />\n));\n","import React, { Fragment, PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport Popover from '@material-ui/core/Popover';\nimport withStyles from '@material-ui/core/styles/withStyles';\nimport EventListener from 'react-event-listener';\nimport keycode from 'keycode';\nimport DateTextField from '../_shared/DateTextField';\nimport DomainPropTypes from '../constants/prop-types';\n\nexport class InlineWrapper extends PureComponent {\n static propTypes = {\n /** Show only calendar for datepicker in popover mode */\n onlyCalendar: PropTypes.bool,\n /** Picker value */\n value: DomainPropTypes.date,\n /** On open callback [(e: Event) => void] */\n onOpen: PropTypes.func,\n /** On close callback [(e: Event) => void] */\n onClose: PropTypes.func,\n /** Format string */\n format: PropTypes.string,\n /** Dialog props passed to material-ui Dialog */\n PopoverProps: PropTypes.object,\n labelFunc: PropTypes.func,\n onClear: PropTypes.func,\n isAccepted: PropTypes.bool,\n handleAccept: PropTypes.func.isRequired,\n children: PropTypes.node.isRequired,\n keyboard: PropTypes.bool,\n classes: PropTypes.object.isRequired,\n }\n\n static defaultProps = {\n value: new Date(),\n labelFunc: undefined,\n onlyCalendar: false,\n format: undefined,\n onClear: undefined,\n onOpen: undefined,\n onClose: undefined,\n PopoverProps: undefined,\n isAccepted: false,\n keyboard: undefined,\n }\n\n state = {\n anchorEl: null,\n }\n\n static getDerivedStateFromProps(nextProps) {\n // only if accept = true close the popover\n if (nextProps.isAccepted) {\n return {\n anchorEl: null,\n };\n }\n\n return null;\n }\n\n open = (e) => {\n this.setState({ anchorEl: e.currentTarget });\n if (this.props.onOpen) {\n this.props.onOpen();\n }\n }\n\n close = () => {\n this.setState({ anchorEl: null });\n if (this.props.onClose) {\n this.props.onClose();\n }\n }\n\n handleKeyDown = (event) => {\n switch (keycode(event)) {\n case 'enter': {\n this.props.handleAccept();\n this.close();\n break;\n }\n default:\n // if keycode is not handled, stop execution\n return;\n }\n\n // if event was handled prevent other side effects\n event.preventDefault();\n }\n\n render() {\n const {\n value,\n format,\n children,\n onOpen,\n onClose,\n PopoverProps,\n isAccepted,\n keyboard,\n onlyCalendar,\n classes,\n handleAccept,\n ...other\n } = this.props;\n\n const isOpen = Boolean(this.state.anchorEl);\n\n return (\n <Fragment>\n { isOpen && <EventListener target=\"window\" onKeyDown={this.handleKeyDown} /> }\n\n <DateTextField\n value={value}\n format={format}\n onClick={this.open}\n keyboard={keyboard}\n {...other}\n />\n\n <Popover\n id=\"picker-popover\"\n open={isOpen}\n anchorEl={this.state.anchorEl}\n onClose={this.close}\n classes={{\n paper: classes.popoverPaper,\n }}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: keyboard ? 'right' : 'center',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: keyboard ? 'right' : 'center',\n }}\n children={children}\n {...PopoverProps}\n />\n </Fragment>\n );\n }\n}\n\nconst styles = {\n popoverPaper: {\n maxWidth:375,\n minWidth: 290,\n paddingBottom: 8,\n },\n};\n\nexport default withStyles(styles)(InlineWrapper);\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport InlineWrapper from '../wrappers/InlineWrapper';\nimport DatePicker from './DatePicker';\nimport DomainPropTypes from '../constants/prop-types';\nimport BasePicker from '../_shared/BasePicker';\nimport Calendar from './components/Calendar';\n\nexport const DatePickerInline = (props) => {\n const {\n allowKeyboardControl,\n animateYearScrolling,\n disableFuture,\n disablePast,\n format,\n forwardedRef,\n labelFunc,\n leftArrowIcon,\n maxDate,\n minDate,\n initialFocusedDate,\n onChange,\n openToYearSelection,\n renderDay,\n rightArrowIcon,\n shouldDisableDate,\n value,\n autoOk,\n onlyCalendar,\n utc,\n ...other\n } = props;\n\n const ComponentToShow = onlyCalendar ? Calendar : DatePicker;\n\n return (\n <BasePicker {...props} autoOk>\n {\n ({\n date,\n utils,\n isAccepted,\n handleChange,\n handleTextFieldChange,\n handleAccept,\n }) => (\n <InlineWrapper\n disableFuture={disableFuture}\n disablePast={disablePast}\n format={format || utils.dateFormat}\n labelFunc={labelFunc}\n maxDate={maxDate}\n minDate={minDate}\n onChange={handleTextFieldChange}\n innerRef={forwardedRef}\n value={value}\n isAccepted={isAccepted}\n handleAccept={handleAccept}\n {...other}\n >\n <ComponentToShow\n date={date}\n allowKeyboardControl={allowKeyboardControl}\n animateYearScrolling={animateYearScrolling}\n disableFuture={disableFuture}\n disablePast={disablePast}\n leftArrowIcon={leftArrowIcon}\n maxDate={maxDate}\n minDate={minDate}\n onChange={handleChange}\n openToYearSelection={openToYearSelection}\n renderDay={renderDay}\n rightArrowIcon={rightArrowIcon}\n shouldDisableDate={shouldDisableDate}\n />\n </InlineWrapper>\n )\n }\n </BasePicker>\n );\n};\n\nDatePickerInline.propTypes = {\n onlyCalendar: PropTypes.bool,\n value: DomainPropTypes.date,\n minDate: DomainPropTypes.date,\n maxDate: DomainPropTypes.date,\n initialFocusedDate: DomainPropTypes.date,\n format: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n disablePast: PropTypes.bool,\n disableFuture: PropTypes.bool,\n animateYearScrolling: PropTypes.bool,\n openToYearSelection: PropTypes.bool,\n labelFunc: PropTypes.func,\n leftArrowIcon: PropTypes.node,\n rightArrowIcon: PropTypes.node,\n renderDay: PropTypes.func,\n shouldDisableDate: PropTypes.func,\n allowKeyboardControl: PropTypes.bool,\n forwardedRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n autoOk: PropTypes.bool,\n utc: PropTypes.bool,\n};\n\nDatePickerInline.defaultProps = {\n value: new Date(),\n format: undefined,\n minDate: '1900-01-01',\n maxDate: '2100-01-01',\n initialFocusedDate: undefined,\n disableFuture: false,\n disablePast: false,\n animateYearScrolling: false,\n openToYearSelection: false,\n allowKeyboardControl: true,\n leftArrowIcon: 'keyboard_arrow_left',\n rightArrowIcon: 'keyboard_arrow_right',\n renderDay: undefined,\n labelFunc: undefined,\n shouldDisableDate: undefined,\n forwardedRef: undefined,\n autoOk: undefined,\n onlyCalendar: false,\n utc: false\n};\n\nexport default React.forwardRef((props, ref) => (\n <DatePickerInline {...props} forwardedRef={ref} />\n));\n","const center = {\n x: 260 / 2,\n y: 260 / 2,\n};\n\nconst basePoint = {\n x: center.x,\n y: 0,\n};\n\nconst cx = basePoint.x - center.x;\nconst cy = basePoint.y - center.y;\n\nconst rad2deg = rad => rad * 57.29577951308232;\n\nconst getAngleValue = (step, offsetX, offsetY) => {\n const x = offsetX - center.x;\n const y = offsetY - center.y;\n\n const atan = Math.atan2(cx, cy) - Math.atan2(x, y);\n\n let deg = rad2deg(atan);\n deg = Math.round(deg / step) * step;\n deg %= 360;\n\n const value = Math.floor(deg / step) || 0;\n // eslint-disable-next-line no-restricted-properties\n const delta = Math.pow(x, 2) + Math.pow(y, 2);\n const distance = Math.sqrt(delta);\n\n return { value, distance };\n};\n\nexport const getHours = (offsetX, offsetY, ampm) => {\n // eslint-disable-next-line\n let { value, distance } = getAngleValue(30, offsetX, offsetY);\n value = value || 12;\n\n if (!ampm) {\n if (distance < 90) {\n value += 12;\n value %= 24;\n }\n } else {\n value %= 12;\n }\n\n return value;\n};\n\nexport const getMinutes = (offsetX, offsetY, step = 6) => {\n const { value } = getAngleValue(step, offsetX, offsetY);\n\n return value;\n};\n\nexport const convertToMeridiem = (time, meridiem, ampm, utils, utc) => {\n if (ampm) {\n const currentMeridiem = utils.getHours(time, utc) >= 12 ? 'pm' : 'am';\n if (currentMeridiem !== meridiem) {\n const hours = meridiem === 'am'\n ? utils.getHours(time, utc) - 12\n : utils.getHours(time, utc) + 12;\n\n return utils.setHours(time, hours);\n }\n }\n\n return time;\n};\n","export const HOURS = 'hours';\n\nexport const MINUTES = 'minutes';\n\nexport const SECONDS = 'seconds';\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@material-ui/core/styles/withStyles';\nimport classnames from 'classnames';\nimport * as clockType from '../../constants/clock-types';\n\nexport class ClockPointer extends Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n value: PropTypes.number.isRequired,\n hasSelected: PropTypes.bool.isRequired,\n isInner: PropTypes.bool.isRequired,\n type: PropTypes.oneOf(Object.keys(clockType).map(key => clockType[key])).isRequired,\n }\n\n state = {\n toAnimateTransform: false,\n previousType: undefined, // eslint-disable-line\n }\n\n static getDerivedStateFromProps = (nextProps, state) => {\n if (nextProps.type !== state.previousType) {\n return {\n toAnimateTransform: true,\n previousType: nextProps.type,\n };\n }\n\n return {\n toAnimateTransform: false,\n previousType: nextProps.type,\n };\n }\n\n getAngleStyle = () => {\n const { value, isInner, type } = this.props;\n\n const max = type === clockType.HOURS ? 12 : 60;\n let angle = (360 / max) * value;\n\n if (type === clockType.HOURS && value > 12) {\n angle -= 360; // round up angle to max 360 degrees\n }\n\n return {\n height: isInner ? '26%' : '40%',\n transform: `rotateZ(${angle}deg)`,\n };\n }\n\n render() {\n const { classes, hasSelected } = this.props;\n\n return (\n <div\n style={this.getAngleStyle()}\n className={classnames(classes.pointer, {\n [classes.animateTransform]: this.state.toAnimateTransform,\n })}\n >\n <div className={classnames(classes.thumb, { [classes.noPoint]: hasSelected })} />\n </div>\n );\n }\n}\n\nconst styles = theme => ({\n pointer: {\n width: 2,\n backgroundColor: theme.palette.primary.main,\n position: 'absolute',\n left: 'calc(50% - 1px)',\n bottom: '50%',\n transformOrigin: 'center bottom 0px',\n },\n animateTransform: {\n transition: theme.transitions.create(['transform', 'height']),\n },\n thumb: {\n width: 4,\n height: 4,\n backgroundColor: theme.palette.common.white,\n borderRadius: '100%',\n position: 'absolute',\n top: -21,\n left: -15,\n border: `14px solid ${theme.palette.primary.main}`,\n boxSizing: 'content-box',\n },\n noPoint: {\n backgroundColor: theme.palette.primary.main,\n },\n});\n\nexport default withStyles(styles, { name: 'MuiPickersClockPointer' })(ClockPointer);\n\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@material-ui/core/styles/withStyles';\n\nimport ClockPointer from './ClockPointer';\nimport * as clockType from '../../constants/clock-types';\nimport { getMinutes, getHours } from '../../_helpers/time-utils';\n\nexport class Clock extends Component {\n static propTypes = {\n type: PropTypes.oneOf(Object.keys(clockType).map(key => clockType[key])).isRequired,\n classes: PropTypes.object.isRequired,\n value: PropTypes.number.isRequired,\n onChange: PropTypes.func.isRequired,\n children: PropTypes.arrayOf(PropTypes.node).isRequired,\n ampm: PropTypes.bool,\n }\n\n static defaultProps = {\n ampm: false,\n }\n\n setTime(e, isFinish = false) {\n let { offsetX, offsetY } = e;\n\n if (typeof offsetX === 'undefined') {\n const rect = e.target.getBoundingClientRect();\n\n offsetX = e.changedTouches[0].clientX - rect.left;\n offsetY = e.changedTouches[0].clientY - rect.top;\n }\n\n const value = this.props.type === clockType.SECONDS || this.props.type === clockType.MINUTES\n ? getMinutes(offsetX, offsetY)\n : getHours(offsetX, offsetY, this.props.ampm);\n\n this.props.onChange(value, isFinish);\n }\n\n handleTouchMove = (e) => {\n this.isMoving = true;\n this.setTime(e);\n }\n\n handleTouchEnd = (e) => {\n if (this.isMoving) {\n this.setTime(e, true);\n this.isMoving = false;\n }\n }\n\n handleMove = (e) => {\n e.preventDefault();\n e.stopPropagation();\n // MouseEvent.which is deprecated, but MouseEvent.buttons is not supported in Safari\n const isButtonPressed = typeof e.buttons === 'undefined'\n ? e.nativeEvent.which === 1\n : e.buttons === 1;\n\n if (isButtonPressed) {\n this.setTime(e.nativeEvent, false);\n }\n };\n\n handleMouseUp = (e) => {\n if (this.isMoving) {\n this.isMoving = false;\n }\n\n this.setTime(e.nativeEvent, true);\n }\n\n hasSelected = () => {\n const { type, value } = this.props;\n\n if (type === clockType.HOURS) {\n return true;\n }\n\n return value % 5 === 0;\n }\n\n render() {\n const {\n classes, value, children, type, ampm,\n } = this.props;\n\n const isPointerInner = !ampm && type === clockType.HOURS && (value < 1 || value > 12);\n\n return (\n <div className={classes.container}>\n <div\n className={classes.clock}\n >\n <div\n role=\"menu\"\n tabIndex={-1}\n className={classes.squareMask}\n onTouchMove={this.handleTouchMove}\n onTouchEnd={this.handleTouchEnd}\n onMouseUp={this.handleMouseUp}\n onMouseMove={this.handleMove}\n />\n\n <div className={classes.pin} />\n\n <ClockPointer\n type={type}\n value={value}\n isInner={isPointerInner}\n hasSelected={this.hasSelected()}\n />\n\n { children }\n </div>\n </div>\n );\n }\n}\n\nconst styles = theme => ({\n container: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'flex-end',\n margin: [[theme.spacing.unit * 4, 0, theme.spacing.unit]],\n },\n clock: {\n backgroundColor: 'rgba(0,0,0,.07)',\n borderRadius: '50%',\n height: 260,\n width: 260,\n position: 'relative',\n pointerEvents: 'none',\n zIndex: 1,\n },\n squareMask: {\n width: '100%',\n height: '100%',\n position: 'absolute',\n pointerEvents: 'auto',\n outline: 'none',\n touchActions: 'none',\n userSelect: 'none',\n '&:active': {\n cursor: 'move',\n },\n },\n pin: {\n width: 6,\n height: 6,\n borderRadius: '50%',\n backgroundColor: theme.palette.primary.main,\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n },\n});\n\nexport default withStyles(styles, { name: 'MuiPickersClock' })(Clock);\n\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport withStyles from '@material-ui/core/styles/withStyles';\nimport Typography from '@material-ui/core/Typography';\n\nconst positions = {\n 0: [0, 40],\n 1: [55, 19.6],\n 2: [94.4, 59.5],\n 3: [109, 114],\n 4: [94.4, 168.5],\n 5: [54.5, 208.4],\n 6: [0, 223],\n 7: [-54.5, 208.4],\n 8: [-94.4, 168.5],\n 9: [-109, 114],\n 10: [-94.4, 59.5],\n 11: [-54.5, 19.6],\n 12: [0, 5],\n 13: [36.9, 49.9],\n 14: [64, 77],\n 15: [74, 114],\n 16: [64, 151],\n 17: [37, 178],\n 18: [0, 188],\n 19: [-37, 178],\n 20: [-64, 151],\n 21: [-74, 114],\n 22: [-64, 77],\n 23: [-37, 50],\n};\n\nexport class ClockNumber extends Component {\n static propTypes = {\n index: PropTypes.number.isRequired,\n label: PropTypes.string.isRequired,\n selected: PropTypes.bool.isRequired,\n classes: PropTypes.object.isRequired,\n isInner: PropTypes.bool,\n }\n\n static defaultProps = {\n isInner: false,\n }\n\n getTransformStyle = (index) => {\n const position = positions[index];\n\n return {\n transform: `translate(${position[0]}px, ${position[1]}px`,\n };\n }\n\n render() {\n const {\n selected, label, index, classes, isInner,\n } = this.props;\n\n const className = classnames(classes.clockNumber, {\n [classes.selected]: selected,\n });\n\n return (\n <Typography\n variant={isInner ? 'body1' : 'subheading'}\n component=\"span\"\n className={className}\n style={this.getTransformStyle(index, isInner)}\n >\n { label }\n </Typography>\n );\n }\n}\n\nconst styles = (theme) => {\n const size = theme.spacing.unit * 4;\n return {\n clockNumber: {\n width: size,\n height: size,\n userSelect: 'none',\n position: 'absolute',\n left: `calc(50% - ${size / 2}px)`,\n display: 'inline-flex',\n justifyContent: 'center',\n alignItems: 'center',\n borderRadius: '50%',\n color: theme.palette.type === 'light'\n ? theme.palette.text.primary\n : theme.palette.text.hint,\n },\n selected: {\n color: theme.palette.common.white,\n },\n };\n};\n\nexport default withStyles(styles, { name: 'MuiPickersClockNumber' })(ClockNumber);\n","import React from 'react';\nimport ClockNumber from './ClockNumber';\n\nexport const getHourNumbers = ({ ampm, utils, date, utc }) => {\n const currentHours = utils.getHours(date, utc);\n\n const hourNumbers = [];\n const startHour = ampm ? 1 : 0;\n const endHour = ampm ? 12 : 23;\n\n const isSelected = (hour) => {\n if (ampm) {\n if (hour === 12) {\n return currentHours === 12 || currentHours === 0;\n }\n\n return currentHours === hour || currentHours - 12 === hour;\n }\n\n return currentHours === hour;\n };\n\n for (let hour = startHour; hour <= endHour; hour += 1) {\n let label = hour.toString();\n\n if (hour === 0) {\n label = '00';\n }\n\n const props = {\n index: hour,\n label: utils.formatNumber(label),\n selected: isSelected(hour),\n isInner: !ampm && (hour === 0 || hour > 12),\n };\n\n hourNumbers.push(<ClockNumber key={hour} {...props} />);\n }\n\n return hourNumbers;\n};\n\nexport const getMinutesNumbers = ({ value, utils }) => {\n const f = utils.formatNumber;\n\n return [\n <ClockNumber label={f('00')} selected={value === 0} index={12} key={12} />,\n <ClockNumber label={f('05')} selected={value === 5} index={1} key={1} />,\n <ClockNumber label={f('10')} selected={value === 10} index={2} key={2} />,\n <ClockNumber label={f('15')} selected={value === 15} index={3} key={3} />,\n <ClockNumber label={f('20')} selected={value === 20} index={4} key={4} />,\n <ClockNumber label={f('25')} selected={value === 25} index={5} key={5} />,\n <ClockNumber label={f('30')} selected={value === 30} index={6} key={6} />,\n <ClockNumber label={f('35')} selected={value === 35} index={7} key={7} />,\n <ClockNumber label={f('40')} selected={value === 40} index={8} key={8} />,\n <ClockNumber label={f('45')} selected={value === 45} index={9} key={9} />,\n <ClockNumber label={f('50')} selected={value === 50} index={10} key={10} />,\n <ClockNumber label={f('55')} selected={value === 55} index={11} key={11} />,\n ];\n};\n","import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport Clock from './Clock';\nimport * as clockType from '../../constants/clock-types';\nimport withUtils from '../../_shared/WithUtils';\nimport { getHourNumbers, getMinutesNumbers } from './ClockNumbers';\n\nexport class TimePickerView extends PureComponent {\n static propTypes = {\n date: PropTypes.object.isRequired,\n onHourChange: PropTypes.func.isRequired,\n onMinutesChange: PropTypes.func.isRequired,\n onSecondsChange: PropTypes.func.isRequired,\n utils: PropTypes.object.isRequired,\n ampm: PropTypes.bool,\n type: PropTypes.oneOf(Object.keys(clockType).map(key => clockType[key])).isRequired,\n utc: PropTypes.bool,\n }\n\n static defaultProps = {\n ampm: true,\n utc: false\n }\n\n getViewProps = () => {\n const {\n type, ampm, date, utils, utc\n } = this.props;\n\n switch (type) {\n case clockType.HOURS:\n return {\n value: utils.getHours(date, utc),\n children: getHourNumbers({ date, ampm, utils, utc }),\n onChange: this.handleHourChange,\n };\n\n case clockType.MINUTES:\n const minutesValue = utils.getMinutes(date, utc);\n return {\n value: minutesValue,\n children: getMinutesNumbers({ value: minutesValue, utils }),\n onChange: this.handleMinutesChange,\n };\n\n case clockType.SECONDS:\n const secondsValue = utils.getSeconds(date, utc);\n return {\n value: secondsValue,\n children: getMinutesNumbers({ value: secondsValue, utils }),\n onChange: this.handleSecondsChange,\n };\n\n default:\n throw new Error('You must provide the type for TimePickerView');\n }\n }\n\n handleHourChange = (hours, isFinish) => {\n const { date, utils, utc } = this.props;\n const updatedTime = utils.setHours(date, hours, utc);\n this.props.onHourChange(updatedTime, isFinish);\n };\n\n handleMinutesChange = (minutes, isFinish) => {\n const { date, utils, utc } = this.props;\n const updatedTime = utils.setMinutes(date, minutes, utc);\n\n this.props.onMinutesChange(updatedTime, isFinish);\n };\n\n handleSecondsChange = (seconds, isFinish) => {\n const { date, utils, utc } = this.props;\n const updatedTime = utils.setSeconds(date, seconds, utc);\n\n this.props.onSecondsChange(updatedTime, isFinish);\n };\n\n render() {\n const { ampm, type } = this.props;\n const viewProps = this.getViewProps();\n\n return (\n <Clock\n type={type}\n ampm={ampm}\n {...viewProps}\n />\n );\n }\n}\n\nexport default withUtils()(TimePickerView);\n\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport withStyles from '@material-ui/core/styles/withStyles';\n\nimport PickerToolbar from '../_shared/PickerToolbar';\nimport ToolbarButton from '../_shared/ToolbarButton';\nimport { convertToMeridiem } from '../_helpers/time-utils';\nimport withUtils from '../_shared/WithUtils';\nimport TimePickerView from './components/TimePickerView';\nimport * as clockType from '../constants/clock-types';\n\nexport class TimePicker extends Component {\n static propTypes = {\n date: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired,\n theme: PropTypes.object.isRequired,\n children: PropTypes.node,\n utils: PropTypes.object.isRequired,\n ampm: PropTypes.bool,\n seconds: PropTypes.bool,\n utc: PropTypes.bool,\n \n }\n\n static defaultProps = {\n children: null,\n ampm: true,\n seconds: false,\n utc: false\n }\n\n state = {\n openView: clockType.HOURS,\n meridiemMode: this.props.utils.getHours(this.props.date, this.props.utc) >= 12 ? 'pm' : 'am',\n }\n\n setMeridiemMode = mode => () => {\n this.setState(\n { meridiemMode: mode },\n () => this.handleChange({\n time: this.props.date,\n isFinish: false,\n openMinutes: false,\n openSeconds: false,\n }),\n );\n }\n\n handleChange = ({\n time, isFinish, openMinutes, openSeconds,\n }) => {\n const withMeridiem = convertToMeridiem(\n time,\n this.state.meridiemMode,\n this.props.ampm,\n this.props.utils,\n );\n\n if (isFinish) {\n if (!openMinutes && !openSeconds) {\n this.props.onChange(withMeridiem, isFinish);\n return;\n }\n\n if (openMinutes) {\n this.openMinutesView();\n }\n\n if (openSeconds) {\n this.openSecondsView();\n }\n }\n\n this.props.onChange(withMeridiem, false);\n }\n\n handleHourChange = (time, isFinish) => {\n this.handleChange({\n time,\n isFinish,\n openMinutes: true,\n openSeconds: false,\n });\n }\n\n handleMinutesChange = (time, isFinish) => {\n this.handleChange({\n time,\n isFinish,\n openMinutes: false,\n openSeconds: this.props.seconds,\n });\n }\n\n handleSecondsChange = (time, isFinish) => {\n this.handleChange({\n time,\n isFinish,\n openMinutes: false,\n openSeconds: false,\n });\n }\n\n openSecondsView = () => {\n this.setState({ openView: clockType.SECONDS });\n }\n\n openMinutesView = () => {\n this.setState({ openView: clockType.MINUTES });\n }\n\n openHourView = () => {\n this.setState({ openView: clockType.HOURS });\n }\n\n render() {\n const {\n classes, theme, date, utils, ampm, seconds, utc\n } = this.props;\n\n\n const { meridiemMode, openView } = this.state;\n\n const rtl = theme.direction === 'rtl';\n const hourMinuteClassName = rtl\n ? classes.hourMinuteLabelReverse\n : classes.hourMinuteLabel;\n\n return (\n <Fragment>\n <PickerToolbar\n className={classnames(\n classes.toolbar,\n { [classes.toolbarLeftPadding]: ampm },\n )}\n >\n <div className={hourMinuteClassName}>\n <ToolbarButton\n variant=\"display3\"\n onClick={this.openHourView}\n selected={openView === clockType.HOURS}\n label={utils.getHourText(date, ampm, utc)}\n />\n\n <ToolbarButton\n variant=\"display3\"\n label=\":\"\n selected={false}\n className={classes.separator}\n />\n\n <ToolbarButton\n variant=\"display3\"\n onClick={this.openMinutesView}\n selected={openView === clockType.MINUTES}\n label={utils.getMinuteText(date, utc)}\n />\n \n {/* <ToolbarButton\n variant=\"display3\"\n label=\":\"\n selected={false}\n className={classes.separator}\n />\n\n <ToolbarButton\n variant=\"display3\"\n onClick={this.openSecondsView}\n selected={openView === clockType.SECONDS}\n label={utils.getSecondText(date)}\n /> */}\n {\n seconds\n && (\n <Fragment>\n <ToolbarButton\n variant=\"display3\"\n label=\":\"\n selected={false}\n className={classes.separator}\n />\n\n <ToolbarButton\n variant=\"display3\"\n onClick={this.openSecondsView}\n selected={openView === clockType.SECONDS}\n label={utils.getSecondText(date, utc)}\n />\n </Fragment>\n )}\n </div>\n\n {\n ampm\n && (\n <div className={seconds ? classes.ampmSelectionWithSeconds : classes.ampmSelection}>\n <ToolbarButton\n className={classes.ampmLabel}\n selected={meridiemMode === 'am'}\n variant=\"subheading\"\n label={utils.getMeridiemText('am')}\n onClick={this.setMeridiemMode('am')}\n />\n\n <ToolbarButton\n className={classes.ampmLabel}\n selected={meridiemMode === 'pm'}\n variant=\"subheading\"\n label={utils.getMeridiemText('pm')}\n onClick={this.setMeridiemMode('pm')}\n />\n </div>\n )\n }\n </PickerToolbar>\n\n {this.props.children}\n\n <TimePickerView\n date={date}\n type={this.state.openView}\n ampm={ampm}\n onHourChange={this.handleHourChange}\n onMinutesChange={this.handleMinutesChange}\n onSecondsChange={this.handleSecondsChange}\n />\n </Fragment>\n );\n }\n}\n\nconst styles = () => ({\n toolbar: {\n flexDirection: 'row',\n alignItems: 'center',\n },\n toolbarLeftPadding: {\n paddingLeft: 50,\n },\n separator: {\n margin: '0 4px 0 2px',\n cursor: 'default',\n },\n ampmSelection: {\n marginLeft: 20,\n marginRight: -20,\n },\n ampmSelectionWithSeconds: {\n marginLeft: 15,\n marginRight: 10,\n },\n ampmLabel: {\n fontSize: 18,\n },\n hourMinuteLabel: {\n display: 'flex',\n justifyContent: 'flex-end',\n alignItems: 'flex-end',\n },\n hourMinuteLabelReverse: {\n display: 'flex',\n justifyContent: 'flex-end',\n alignItems: 'flex-end',\n flexDirection: 'row-reverse',\n },\n});\n\nexport default withStyles(\n styles,\n { withTheme: true, name: 'MuiPickersTimePicker' },\n)(withUtils()(TimePicker));\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport ModalWrapper from '../wrappers/ModalWrapper';\nimport TimePicker from './TimePicker';\nimport DomainPropTypes from '../constants/prop-types';\nimport BasePicker from '../_shared/BasePicker';\n\nexport const TimePickerModal = (props) => {\n const {\n value, format, autoOk, onChange, ampm, forwardedRef, seconds, ...other\n } = props;\n return (\n <BasePicker {...props}>\n {\n ({\n date,\n utils,\n handleAccept,\n handleChange,\n handleClear,\n handleDismiss,\n handleSetTodayDate,\n handleTextFieldChange,\n isAccepted,\n pickFormat\n }) => (\n <ModalWrapper\n ref={forwardedRef}\n value={value}\n onClear={handleClear}\n onAccept={handleAccept}\n onChange={handleTextFieldChange}\n onDismiss={handleDismiss}\n onSetToday={handleSetTodayDate}\n isAccepted={isAccepted}\n format={pickFormat(utils.timeFormat)}\n {...other}\n >\n <TimePicker\n date={date}\n onChange={handleChange}\n ampm={ampm}\n seconds={seconds}\n />\n </ModalWrapper>\n )\n }\n </BasePicker>\n );\n};\n\nTimePickerModal.propTypes = {\n /** DateTimepicker value */\n value: DomainPropTypes.date,\n /** Date format string for input */\n format: PropTypes.string,\n /** Callback firing when date accepted [(date: Date) => void] */\n onChange: PropTypes.func.isRequired,\n /** Auto accept date on minute selection */\n autoOk: PropTypes.bool,\n /** 12h/24h view for hour selection clock */\n ampm: PropTypes.bool,\n /** Show the seconds view */\n seconds: PropTypes.bool,\n forwardedRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n};\n\nTimePickerModal.defaultProps = {\n value: new Date(),\n format: undefined,\n autoOk: false,\n ampm: true,\n forwardedRef: undefined,\n seconds: false,\n};\n\nexport default React.forwardRef((props, ref) => (\n <TimePickerModal {...props} forwardedRef={ref} />\n));\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport InlineWrapper from '../wrappers/InlineWrapper';\nimport TimePicker from './TimePicker';\nimport DomainPropTypes from '../constants/prop-types';\nimport BasePicker from '../_shared/BasePicker';\n\nexport const TimePickerInline = (props) => {\n const {\n value, format, onChange, ampm, forwardedRef, seconds, ...other\n } = props;\n\n return (\n <BasePicker {...props} autoOk>\n {\n ({\n date,\n utils,\n handleChange,\n handleTextFieldChange,\n isAccepted,\n pickFormat,\n handleAccept,\n }) => (\n <InlineWrapper\n innerRef={forwardedRef}\n value={value}\n onChange={handleTextFieldChange}\n isAccepted={isAccepted}\n handleAccept={handleAccept}\n format={pickFormat(utils.timeFormat)}\n {...other}\n >\n <TimePicker\n date={date}\n onChange={handleChange}\n ampm={ampm}\n seconds={seconds}\n />\n </InlineWrapper>\n )\n }\n </BasePicker>\n );\n};\n\nTimePickerInline.propTypes = {\n value: DomainPropTypes.date,\n format: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n ampm: PropTypes.bool,\n seconds: PropTypes.bool,\n forwardedRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n};\n\nTimePickerInline.defaultProps = {\n ampm: true,\n value: new Date(),\n format: undefined,\n forwardedRef: undefined,\n seconds: false,\n};\n\nexport default React.forwardRef((props, ref) => (\n <TimePickerInline {...props} forwardedRef={ref} />\n));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@material-ui/core/styles/withStyles';\n\nexport const DateTimePickerView = ({\n selected, children, classes,\n}) => {\n if (!selected) {\n return null;\n }\n\n return (\n <div className={classes.view}>\n { children }\n </div>\n );\n};\n\nDateTimePickerView.propTypes = {\n selected: PropTypes.bool.isRequired,\n children: PropTypes.node.isRequired,\n classes: PropTypes.object.isRequired,\n};\n\nconst styles = {\n view: {\n zIndex: 1,\n position: 'absolute',\n left: 0,\n right: 0,\n },\n};\n\nexport default withStyles(styles, { name: 'MuiPickerDTPickerView ' })(DateTimePickerView);\n","export const YEAR = 'year';\n\nexport const DATE = 'date';\n\nexport const HOUR = 'hours';\n\nexport const MINUTES = 'minutes';\n\nexport const SECONDS = 'seconds';\n\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@material-ui/core/styles/withStyles';\nimport withTheme from '@material-ui/core/styles/withTheme';\nimport Paper from '@material-ui/core/Paper';\nimport Tabs from '@material-ui/core/Tabs';\nimport Tab from '@material-ui/core/Tab';\nimport Icon from '@material-ui/core/Icon';\nimport * as viewType from '../../constants/date-picker-view';\n\nconst viewToTabIndex = (openView) => {\n if (openView === viewType.DATE || openView === viewType.YEAR) {\n return 'date';\n }\n\n return 'time';\n};\n\nconst tabIndexToView = (tab) => {\n if (tab === 'date') {\n return viewType.DATE;\n }\n\n return viewType.HOUR;\n};\n\nexport const DateTimePickerTabs = (props) => {\n const {\n view,\n onChange,\n classes,\n theme,\n dateRangeIcon,\n timeIcon,\n } = props;\n\n const indicatorColor = theme.palette.type === 'light' ? 'secondary' : 'primary';\n const handleChange = (e, value) => {\n if (value !== viewToTabIndex(view)) {\n onChange(tabIndexToView(value));\n }\n };\n\n return (\n <Paper>\n <Tabs\n fullWidth\n value={viewToTabIndex(view)}\n onChange={handleChange}\n className={classes.tabs}\n indicatorColor={indicatorColor}\n >\n <Tab value=\"date\" icon={<Icon>{dateRangeIcon}</Icon>} />\n <Tab value=\"time\" icon={<Icon>{timeIcon}</Icon>} />\n </Tabs>\n </Paper>\n );\n};\n\nDateTimePickerTabs.propTypes = {\n view: PropTypes.string.isRequired,\n onChange: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired,\n theme: PropTypes.object.isRequired,\n dateRangeIcon: PropTypes.node.isRequired,\n timeIcon: PropTypes.node.isRequired,\n};\n\nconst styles = theme => ({\n tabs: {\n color: theme.palette.common.white,\n backgroundColor: theme.palette.type === 'light'\n ? theme.palette.primary.main\n : theme.palette.background.default,\n },\n});\n\nexport default withTheme()(withStyles(styles, { name: 'MuiPickerDTTabs' })(DateTimePickerTabs));\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@material-ui/core/styles/withStyles';\nimport PickerToolbar from '../../_shared/PickerToolbar';\nimport ToolbarButton from '../../_shared/ToolbarButton';\nimport withUtils from '../../_shared/WithUtils';\nimport * as viewType from '../../constants/date-picker-view';\n\nexport const DateTimePickerHeader = (props) => {\n const {\n date, classes, openView, meridiemMode, onOpenViewChange, setMeridiemMode,\n theme, utils, ampm, seconds, utc\n } = props;\n\n const changeOpenView = view => () => onOpenViewChange(view);\n\n const rtl = theme.direction === 'rtl';\n const hourMinuteClassName = rtl\n ? classes.hourMinuteLabelReverse\n : classes.hourMinuteLabel;\n\n return (\n <PickerToolbar className={classes.toolbar}>\n <div className={classes.dateHeader}>\n <ToolbarButton\n variant=\"subheading\"\n onClick={changeOpenView(viewType.YEAR)}\n selected={openView === viewType.YEAR}\n label={utils.getYearText(date, utc)}\n />\n\n <ToolbarButton\n variant=\"display1\"\n onClick={changeOpenView(viewType.DATE)}\n selected={openView === viewType.DATE}\n label={utils.getDateTimePickerHeaderText(date, utc)}\n />\n </div>\n\n <div className={classes.timeHeader}>\n <div className={hourMinuteClassName}>\n <ToolbarButton\n variant=\"display2\"\n onClick={changeOpenView(viewType.HOUR)}\n selected={openView === viewType.HOUR}\n label={utils.getHourText(date, ampm, utc)}\n />\n\n <ToolbarButton\n variant=\"display2\"\n label=\":\"\n selected={false}\n className={classes.separator}\n />\n\n <ToolbarButton\n variant=\"display2\"\n onClick={changeOpenView(viewType.MINUTES)}\n selected={openView === viewType.MINUTES}\n label={utils.getMinuteText(date, utc)}\n />\n\n {seconds && (\n <Fragment>\n <ToolbarButton\n variant=\"display2\"\n label=\":\"\n selected={false}\n className={classes.separator}\n />\n\n <ToolbarButton\n variant=\"display2\"\n onClick={changeOpenView(viewType.SECONDS)}\n selected={openView === viewType.SECONDS}\n label={utils.getSecondText(date, utc)}\n />\n </ Fragment>\n )}\n \n \n </div>\n\n {\n ampm && (\n <div className={classes.ampmSelection}>\n <ToolbarButton\n className={classes.ampmLabel}\n selected={meridiemMode === 'am'}\n type=\"subheading\"\n label={utils.getMeridiemText('am')}\n onClick={setMeridiemMode('am')}\n />\n <ToolbarButton\n className={classes.ampmLabel}\n selected={meridiemMode === 'pm'}\n type=\"subheading\"\n label={utils.getMeridiemText('pm')}\n onClick={setMeridiemMode('pm')}\n />\n </div>\n )\n }\n </div>\n </PickerToolbar>\n );\n};\n\nDateTimePickerHeader.propTypes = {\n date: PropTypes.object.isRequired,\n classes: PropTypes.object.isRequired,\n theme: PropTypes.object.isRequired,\n meridiemMode: PropTypes.string.isRequired,\n openView: PropTypes.string.isRequired,\n onOpenViewChange: PropTypes.func.isRequired,\n setMeridiemMode: PropTypes.func.isRequired,\n utils: PropTypes.object.isRequired,\n ampm: PropTypes.bool,\n};\n\nDateTimePickerHeader.defaultProps = {\n ampm: true,\n};\n\nconst styles = () => ({\n toolbar: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingLeft: 16,\n paddingRight: 16,\n justifyContent: 'space-around',\n },\n separator: {\n margin: '0 4px 0 2px',\n cursor: 'default',\n },\n ampmSelection: {\n marginLeft: 10,\n marginRight: -10,\n },\n ampmLabel: {\n fontSize: 18,\n },\n hourMinuteLabel: {\n display: 'flex',\n justifyContent: 'flex-end',\n alignItems: 'flex-end',\n },\n hourMinuteLabelReverse: {\n display: 'flex',\n justifyContent: 'flex-end',\n alignItems: 'flex-end',\n flexDirection: 'row-reverse',\n },\n dateHeader: {\n height: 65,\n },\n timeHeader: {\n height: 65,\n display: 'flex',\n justifyContent: 'flex-end',\n alignItems: 'flex-end',\n },\n});\n\nexport default withStyles(styles, { withTheme: true })(withUtils()(DateTimePickerHeader));\n","import React, { Component, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@material-ui/core/styles/withStyles';\n\nimport View from './components/DateTimePickerView';\nimport YearSelection from '../DatePicker/components/YearSelection';\nimport Calendar from '../DatePicker/components/Calendar';\nimport TimePickerView from '../TimePicker/components/TimePickerView';\nimport DateTimePickerTabs from './components/DateTimePickerTabs';\nimport DatetimePickerHeader from './components/DateTimePickerHeader';\nimport { convertToMeridiem } from '../_helpers/time-utils';\n\nimport DomainPropTypes from '../constants/prop-types';\nimport * as viewType from '../constants/date-picker-view';\nimport withUtils from '../_shared/WithUtils';\n\nexport class DateTimePicker extends Component {\n static propTypes = {\n allowKeyboardControl: PropTypes.bool,\n ampm: PropTypes.bool,\n animateYearScrolling: PropTypes.bool,\n autoSubmit: PropTypes.bool,\n classes: PropTypes.object.isRequired,\n date: PropTypes.object.isRequired,\n dateRangeIcon: PropTypes.node,\n disableFuture: PropTypes.bool,\n disablePast: PropTypes.bool,\n leftArrowIcon: PropTypes.node,\n maxDate: DomainPropTypes.date.isRequired,\n minDate: DomainPropTypes.date.isRequired,\n onChange: PropTypes.func.isRequired,\n openTo: PropTypes.oneOf(Object.keys(viewType).map(key => viewType[key])).isRequired,\n renderDay: PropTypes.func,\n rightArrowIcon: PropTypes.node,\n shouldDisableDate: PropTypes.func,\n showTabs: PropTypes.bool,\n timeIcon: PropTypes.node,\n utils: PropTypes.object.isRequired,\n ViewContainerComponent:\n PropTypes.oneOfType([PropTypes.string, PropTypes.func, PropTypes.object]),\n seconds: PropTypes.bool,\n utc: PropTypes.bool,\n isUTC: PropTypes.bool,\n }\n\n static defaultProps = {\n allowKeyboardControl: false,\n ampm: true,\n animateYearScrolling: false,\n autoSubmit: true,\n dateRangeIcon: undefined,\n disableFuture: false,\n disablePast: false,\n leftArrowIcon: undefined,\n renderDay: undefined,\n rightArrowIcon: undefined,\n shouldDisableDate: undefined,\n showTabs: true,\n timeIcon: undefined,\n ViewContainerComponent: 'div',\n seconds: false,\n utc: false,\n isUTC: false,\n }\n\n state = {\n openView: this.props.openTo,\n meridiemMode: this.props.utils.getHours(this.props.date, this.props.utc) >= 12 ? 'pm' : 'am',\n }\n\n onChange = (time, isFinish = true, nextView) => {\n this.handleChange(time);\n\n if (isFinish && this.props.autoSubmit) {\n this.handleViewChange(nextView);\n }\n }\n\n setMeridiemMode = mode => () => {\n this.setState(\n { meridiemMode: mode },\n () => this.handleChange(this.props.date, false),\n );\n }\n\n handleViewChange = (view) => {\n this.setState({ openView: view });\n }\n\n handleChange = (time, isFinish = false) => {\n const withMeridiem = convertToMeridiem(\n time,\n this.state.meridiemMode,\n this.props.ampm,\n this.props.utils,\n );\n this.props.onChange(withMeridiem, isFinish);\n }\n\n handleYearChange = (date, isFinish) => {\n this.onChange(date, isFinish, viewType.DATE);\n }\n\n handleDayChange = (date, isFinish) => {\n this.onChange(date, isFinish, viewType.HOUR);\n }\n\n handleHourChange = (time, isFinish) => {\n this.onChange(time, isFinish, viewType.MINUTES);\n }\n \n handleMinutesChange = (time, isFinish) => {\n this.props.seconds ? this.onChange(time, isFinish, viewType.SECONDS) : this.handleChange(time, isFinish);\n }\n\n render() {\n const { openView, meridiemMode } = this.state;\n const {\n date,\n minDate,\n maxDate,\n showTabs,\n disablePast,\n disableFuture,\n leftArrowIcon,\n rightArrowIcon,\n dateRangeIcon,\n timeIcon,\n renderDay,\n utils,\n ampm,\n shouldDisableDate,\n animateYearScrolling,\n classes,\n allowKeyboardControl,\n ViewContainerComponent,\n seconds,\n utc,\n isUTC\n } = this.props;\n const ViewContainerComponentProps = typeof ViewContainerComponent === 'string'\n ? {} : { openView, onChange: this.onChange };\n\n return (\n <Fragment>\n <DatetimePickerHeader\n date={date}\n openView={openView}\n meridiemMode={meridiemMode}\n setMeridiemMode={this.setMeridiemMode}\n onOpenViewChange={this.handleViewChange}\n utils={utils}\n ampm={ampm}\n seconds={seconds}\n utc={utc}\n isUTC={isUTC}\n />\n\n {\n showTabs\n && (\n <DateTimePickerTabs\n view={openView}\n onChange={this.handleViewChange}\n dateRangeIcon={dateRangeIcon}\n timeIcon={timeIcon}\n />\n )\n }\n\n <ViewContainerComponent className={classes.viewContainer} {...ViewContainerComponentProps}>\n <View selected={openView === viewType.YEAR}>\n <YearSelection\n date={date}\n minDate={minDate}\n maxDate={maxDate}\n onChange={this.handleYearChange}\n disablePast={disablePast}\n disableFuture={disableFuture}\n utils={utils}\n animateYearScrolling={animateYearScrolling}\n />\n </View>\n\n <View selected={openView === viewType.DATE}>\n <Calendar\n allowKeyboardControl={allowKeyboardControl}\n date={date}\n minDate={minDate}\n maxDate={maxDate}\n onChange={this.handleDayChange}\n disablePast={disablePast}\n disableFuture={disableFuture}\n leftArrowIcon={leftArrowIcon}\n rightArrowIcon={rightArrowIcon}\n renderDay={renderDay}\n shouldDisableDate={shouldDisableDate}\n utc={utc} \n isUTC={isUTC}\n />\n </View>\n\n <View selected={openView === viewType.HOUR || openView === viewType.MINUTES || openView === viewType.SECONDS}>\n <TimePickerView\n date={date}\n type={openView}\n onHourChange={this.handleHourChange}\n onMinutesChange={this.handleMinutesChange}\n onSecondsChange={this.handleChange}\n ampm={ampm}\n seconds={seconds}\n utc={utc}\n isUTC={isUTC}\n />\n </View>\n </ViewContainerComponent>\n </Fragment>\n );\n }\n}\n\nconst styles = {\n viewContainer: {\n minHeight: 300,\n position: 'relative',\n },\n};\n\nexport default withStyles(styles)(withUtils()(DateTimePicker));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport withStyles from '@material-ui/core/styles/withStyles';\n\nimport DomainPropTypes from '../constants/prop-types';\nimport ModalWrapper from '../wrappers/ModalWrapper';\nimport DateTimePicker from './DateTimePicker';\nimport BasePicker from '../_shared/BasePicker';\n\nexport const DateTimePickerModal = (props) => {\n const {\n value,\n format,\n autoOk,\n openTo,\n classes,\n minDate,\n maxDate,\n initialFocusedDate,\n showTabs,\n autoSubmit,\n disablePast,\n disableFuture,\n leftArrowIcon,\n rightArrowIcon,\n dateRangeIcon,\n timeIcon,\n renderDay,\n ampm,\n shouldDisableDate,\n animateYearScrolling,\n forwardedRef,\n allowKeyboardControl,\n seconds,\n utc,\n isUTC,\n changeUtcState,\n selectTimezone,\n ...other\n } = props;\n \n return (\n <BasePicker {...props}>\n {\n ({\n date,\n utils,\n handleAccept,\n handleChange,\n handleClear,\n handleDismiss,\n handleSetTodayDate,\n handleTextFieldChange,\n pickFormat,\n isAccepted,\n }) => (\n <ModalWrapper\n ref={forwardedRef}\n dialogContentClassName={seconds ? classes.dialogContent : classes.dialogContent_or}\n disableFuture={disableFuture}\n disablePast={disablePast}\n maxDate={maxDate}\n minDate={minDate}\n onAccept={handleAccept}\n onChange={handleTextFieldChange}\n onClear={handleClear}\n onDismiss={handleDismiss}\n onSetToday={handleSetTodayDate}\n value={value}\n isAccepted={isAccepted}\n format={pickFormat(utils.dateTimeFormat)}\n seconds={seconds}\n utc={utc}\n changeUtcState={changeUtcState}\n selectTimezone={selectTimezone}\n {...other}\n >\n <DateTimePicker\n allowKeyboardControl={allowKeyboardControl}\n ampm={ampm}\n animateYearScrolling={animateYearScrolling}\n autoSubmit={autoSubmit}\n date={date}\n dateRangeIcon={dateRangeIcon}\n disableFuture={disableFuture}\n disablePast={disablePast}\n leftArrowIcon={leftArrowIcon}\n maxDate={maxDate}\n minDate={minDate}\n onChange={handleChange}\n openTo={openTo}\n renderDay={renderDay}\n rightArrowIcon={rightArrowIcon}\n shouldDisableDate={shouldDisableDate}\n showTabs={showTabs}\n timeIcon={timeIcon}\n seconds={seconds}\n utc={utc}\n />\n </ModalWrapper>\n )\n }\n </BasePicker>\n );\n};\n\nDateTimePickerModal.propTypes = {\n classes: PropTypes.object.isRequired,\n /** DateTimepicker value */\n value: DomainPropTypes.date,\n /** Date format string for input */\n format: PropTypes.string,\n /** Callback firing when date accepted [(date: Date) => void] */\n onChange: PropTypes.func.isRequired,\n /** Auto accept date on minute selection */\n autoOk: PropTypes.bool,\n /** Move to the next part of date on select (year -> date -> hour -> minute) */\n autoSubmit: PropTypes.bool,\n /** Disable future dates */\n disableFuture: PropTypes.bool,\n /** Disable past dates */\n disablePast: PropTypes.bool,\n /** Min selectable date */\n minDate: DomainPropTypes.date,\n /** Max selectable date */\n maxDate: DomainPropTypes.date,\n /** Initial focused date when calendar opens, if no value is provided */\n initialFocusedDate: DomainPropTypes.date,\n /** Show date/time tabs */\n showTabs: PropTypes.bool,\n /** Left arrow icon */\n leftArrowIcon: PropTypes.node,\n /** Right arrow icon */\n rightArrowIcon: PropTypes.node,\n /** Date tab icon */\n dateRangeIcon: PropTypes.node,\n /** Time tab icon */\n timeIcon: PropTypes.node,\n /**\n * Custom renderer for day\n * [(date: Date, nowSelectedDate: Date, isInCurrentMonth: boolean) => ReactElement]\n */\n renderDay: PropTypes.func,\n /** 12h/24h view for hour selection clock */\n ampm: PropTypes.bool,\n /** Disable specific date [(date: Date) => boolean] */\n shouldDisableDate: PropTypes.func,\n /** Enable animated scrolling to current year */\n animateYearScrolling: PropTypes.bool,\n /** Open directly to particular view */\n openTo: PropTypes.oneOf(['year', 'date', 'hour', 'minutes','seconds']),\n /** Enables keyboard listener for moving between days in calendar */\n allowKeyboardControl: PropTypes.bool,\n forwardedRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n seconds: PropTypes.bool,\n};\n\nDateTimePickerModal.defaultProps = {\n value: new Date(),\n format: undefined,\n autoOk: false,\n autoSubmit: true,\n openTo: 'date',\n disableFuture: false,\n disablePast: false,\n minDate: '1900-01-01',\n maxDate: '2100-01-01',\n initialFocusedDate: undefined,\n showTabs: true,\n leftArrowIcon: 'keyboard_arrow_left',\n rightArrowIcon: 'keyboard_arrow_right',\n dateRangeIcon: 'date_range',\n timeIcon: 'access_time',\n renderDay: undefined,\n ampm: true,\n shouldDisableDate: undefined,\n animateYearScrolling: false,\n forwardedRef: undefined,\n allowKeyboardControl: true,\n seconds: true\n};\n\nconst styles = {\n dialogContent: {\n width: 375,\n },\n dialogContent_or: {\n width: 310,\n },\n};\n\nconst EnhancedWrapper = withStyles(styles, { name: 'MuiPickerDTPickerModal' })(DateTimePickerModal);\nexport default React.forwardRef((props, ref) => <EnhancedWrapper {...props} forwardedRef={ref} />);\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport DomainPropTypes from '../constants/prop-types';\nimport InlineWrapper from '../wrappers/InlineWrapper';\nimport DateTimePicker from './DateTimePicker';\nimport BasePicker from '../_shared/BasePicker';\n\nexport const DateTimePickerInline = (props) => {\n const {\n value,\n format,\n autoOk,\n openTo,\n minDate,\n maxDate,\n initialFocusedDate,\n showTabs,\n autoSubmit,\n disablePast,\n disableFuture,\n leftArrowIcon,\n rightArrowIcon,\n dateRangeIcon,\n timeIcon,\n renderDay,\n ampm,\n shouldDisableDate,\n animateYearScrolling,\n forwardedRef,\n allowKeyboardControl,\n ...other\n } = props;\n\n return (\n <BasePicker {...props} autoOk>\n {\n ({\n date,\n utils,\n handleChange,\n handleTextFieldChange,\n isAccepted,\n pickFormat,\n handleAccept,\n }) => (\n <InlineWrapper\n innerRef={forwardedRef}\n disableFuture={disableFuture}\n disablePast={disablePast}\n maxDate={maxDate}\n minDate={minDate}\n onChange={handleTextFieldChange}\n value={value}\n isAccepted={isAccepted}\n handleAccept={handleAccept}\n format={pickFormat(utils.dateTimeFormat)}\n {...other}\n >\n <DateTimePicker\n allowKeyboardControl={allowKeyboardControl}\n ampm={ampm}\n animateYearScrolling={animateYearScrolling}\n autoSubmit={autoSubmit}\n date={date}\n dateRangeIcon={dateRangeIcon}\n disableFuture={disableFuture}\n disablePast={disablePast}\n leftArrowIcon={leftArrowIcon}\n maxDate={maxDate}\n minDate={minDate}\n onChange={handleChange}\n openTo={openTo}\n renderDay={renderDay}\n rightArrowIcon={rightArrowIcon}\n shouldDisableDate={shouldDisableDate}\n showTabs={showTabs}\n timeIcon={timeIcon}\n />\n </InlineWrapper>\n )\n }\n </BasePicker>\n );\n};\n\nDateTimePickerInline.propTypes = {\n value: DomainPropTypes.date,\n format: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n autoOk: PropTypes.bool,\n autoSubmit: PropTypes.bool,\n disableFuture: PropTypes.bool,\n disablePast: PropTypes.bool,\n minDate: DomainPropTypes.date,\n maxDate: DomainPropTypes.date,\n initialFocusedDate: DomainPropTypes.date,\n showTabs: PropTypes.bool,\n leftArrowIcon: PropTypes.node,\n rightArrowIcon: PropTypes.node,\n dateRangeIcon: PropTypes.node,\n timeIcon: PropTypes.node,\n renderDay: PropTypes.func,\n ampm: PropTypes.bool,\n shouldDisableDate: PropTypes.func,\n animateYearScrolling: PropTypes.bool,\n openTo: PropTypes.oneOf(['year', 'date', 'hour', 'minutes']),\n allowKeyboardControl: PropTypes.bool,\n forwardedRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n};\n\nDateTimePickerInline.defaultProps = {\n value: new Date(),\n format: undefined,\n autoOk: false,\n autoSubmit: true,\n openTo: 'date',\n disableFuture: false,\n disablePast: false,\n minDate: '1900-01-01',\n maxDate: '2100-01-01',\n initialFocusedDate: undefined,\n showTabs: true,\n leftArrowIcon: 'keyboard_arrow_left',\n rightArrowIcon: 'keyboard_arrow_right',\n dateRangeIcon: 'date_range',\n timeIcon: 'access_time',\n renderDay: undefined,\n ampm: true,\n shouldDisableDate: undefined,\n animateYearScrolling: false,\n forwardedRef: undefined,\n allowKeyboardControl: true,\n};\n\nexport default React.forwardRef(\n (props, ref) => <DateTimePickerInline {...props} forwardedRef={ref} />,\n);\n","// TODO: https://medium.com/sight-machine/building-a-time-zone-enabled-date-picker-3b50e2626fa3 \n// https://js.coach/package/react-datetime\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { addField, FieldTitle } from 'ra-core';\nimport { DatePicker, TimePicker, DateTimePicker, MuiPickersUtilsProvider } from './Picker';\nimport LuxonUtils from './Picker/utils/luxon-utils';\n\nconst makePicker = (PickerComponent) => {\n class _makePicker extends Component {\n onChange(date) {\n const { month } = this.props;\n if(month)\n date = new Date(date)\n this.props.input.onChange(date);\n this.props.input.onBlur();\n }\n\n componentDidMount(){\n const { dateNow } = this.props;\n if(dateNow){\n this.props.input.onChange(new Date());\n }\n if(this.props.source && this.props[this.props.source]) {\n this.props.input.onChange(new Date(this.props[this.props.source]));\n }\n }\n\n componentDidUpdate(oldProps){\n if(this.props.source && this.props[this.props.source] && this.props[this.props.source] !== oldProps[this.props.source]) {\n this.props.input.onChange(new Date(this.props[this.props.source]));\n }\n }\n\n render() {\n const {\n input,\n options,\n label,\n source,\n resource,\n isRequired,\n className,\n meta,\n providerOptions,\n month,\n } = this.props;\n const { touched, error } = meta;\n return (\n <div className=\"picker\">\n <MuiPickersUtilsProvider {...providerOptions}>\n <PickerComponent\n {...options}\n label={<FieldTitle\n label={label}\n source={source}\n resource={resource}\n isRequired={isRequired}\n />}\n margin=\"normal\"\n error={!!(touched && error)}\n helperText={touched && error}\n ref={(node) => { this.picker = node; }}\n className={className}\n value={input.value ? (month ? new Date(input.value) : input.value) : null}\n onChange={date => this.onChange(date)}\n />\n </MuiPickersUtilsProvider>\n </div>\n );\n }\n }\n _makePicker.propTypes = {\n input: PropTypes.object,\n isRequired: PropTypes.bool,\n ampm: PropTypes.bool,\n label: PropTypes.string,\n meta: PropTypes.object,\n options: PropTypes.object,\n resource: PropTypes.string,\n source: PropTypes.string,\n labelTime: PropTypes.string,\n className: PropTypes.string,\n providerOptions: PropTypes.shape({\n utils: PropTypes.func,\n locale: PropTypes.oneOfType([PropTypes.object, PropTypes.string]),\n }),\n };\n\n _makePicker.defaultProps = {\n input: {},\n isRequired: 'false',\n meta: { touched: false, error: false },\n options: {},\n resource: '',\n source: '',\n labelTime: '',\n className: '',\n providerOptions: {\n utils: LuxonUtils,\n locale: undefined,\n ampm: false,\n seconds: false,\n selectTimezone: false\n },\n };\n return _makePicker;\n};\n\nexport const DateInput = addField(makePicker(DatePicker));\nexport const TimeInput = addField(makePicker(TimePicker));\nexport const DateTimeInput = addField(makePicker(DateTimePicker));","import React, { cloneElement, Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport { withStyles, createStyles } from '@material-ui/core/styles';\r\n\r\nconst styles = theme =>\r\n createStyles({\r\n root: {\r\n color: theme.palette.text.secondary,\r\n display: 'flex',\r\n alignItems: 'flex-start',\r\n },\r\n active: {\r\n color: theme.palette.text.primary,\r\n },\r\n icon: { paddingRight: '1.2em' },\r\n });\r\n\r\nexport class MenuItemExternalLink extends Component {\r\n static propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n className: PropTypes.string,\r\n leftIcon: PropTypes.node,\r\n onClick: PropTypes.func,\r\n primaryText: PropTypes.node,\r\n staticContext: PropTypes.object,\r\n to: PropTypes.oneOfType([PropTypes.string, PropTypes.object])\r\n .isRequired,\r\n };\r\n\r\n handleMenuTap = e => {\r\n window.location.href = this.props.to;\r\n };\r\n\r\n render() {\r\n const {\r\n classes,\r\n className,\r\n primaryText,\r\n leftIcon,\r\n staticContext,\r\n to,\r\n ...props\r\n } = this.props;\r\n\r\n return (\r\n <MenuItem\r\n className={classnames(classes.root, className)}\r\n {...props}\r\n onClick={this.handleMenuTap}\r\n >\r\n {leftIcon && (\r\n <span className={classes.icon}>\r\n {cloneElement(leftIcon, { titleAccess: primaryText })}\r\n </span>\r\n )}\r\n {primaryText}\r\n </MenuItem>\r\n );\r\n }\r\n}\r\n\r\nexport default withStyles(styles)(MenuItemExternalLink);","import React, { Component } from \"react\"\nimport memoize from 'memoize-one'\n\nimport {\n TextField\n} from \"@material-ui/core\"\n\n// TODO: filter by all => string = \"q\"\n// arrayIndex => (optional) and just work with obj\n\n/*\n label, => (optional)\n Parent: this,\n indexArray: string, => name of array on state (contains ids of obj)\n obj: string, => name of obj on state (contains all data)\n filter: string => name of param inside obj to filter \n*/\nclass LocalSearch extends Component {\n constructor(props) {\n super(props);\n this.onChange = this.onChange.bind(this);\n this.state = {\n originalIndexArray: [],\n }\n }\n\n filterIdsByFilter = memoize( (allIds, word, allData, filter) => {\n if(!word) return allIds;\n\n const filteredIds = allIds.reduce((acc, id) => {\n if(allData[id][filter] && allData[id][filter].toUpperCase().search(word.toUpperCase()) > -1) {\n acc.push(id);\n }\n return acc;\n }, [])\n return filteredIds;\n });\n \n // componentDidMount() {\n // const { Parent, indexArray } = this.props;\n // console.log(\"DIDMOUNT\", Parent.state, indexArray)\n // this.setState({ originalIndexArray: Parent.state[indexArray] })\n // }\n\n componentDidUpdate(oldProps) {\n const { Parent, indexArray, obj } = this.props;\n const { originalIndexArray } = this.state;\n \n if(indexArray && obj) {\n if(Parent.state[indexArray].length > 0 && originalIndexArray.length === 0) {\n const tmp = [...Parent.state[indexArray]];\n this.setState({ originalIndexArray: tmp });\n }\n }\n }\n\n onChange(event) {\n const { originalIndexArray } = this.state;\n const { Parent, filter, indexArray, obj} = this.props;\n const search = event.target.value;\n\n if(indexArray && obj) {\n const news = this.filterIdsByFilter([...originalIndexArray], search, Parent.state[obj], filter);\n Parent.setState({ids: news});\n }\n }\n\n render(){\n const { label } = this.props;\n return <TextField type=\"text\" placeholder = {label ? label : \"\"} onChange = {this.onChange}/>\n }\n}\n\nexport default LocalSearch;\n","import { Edit as ReactAdminEdit } from 'react-admin';\nconst Edit = ReactAdminEdit;\nEdit.defaultProps = {\n undoable: false,\n};\nexport default Edit;","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport {\n LongTextInput,\n ReferenceArrayInput,\n SelectArrayInput,\n ChipField,\n SimpleForm,\n translate,\n crudCreate as crudCreateAction,\n refreshView as refreshViewAction,\n setListSelectedIds as setListSelectedIdsAction,\n showNotification as showNotificationAction\n} from 'react-admin';\nimport {\n IconButton,\n Dialog,\n DialogTitle,\n DialogContent,\n withStyles\n} from '@material-ui/core';\nimport CloseIcon from '@material-ui/icons/Close'\nimport compose from 'recompose/compose';\nimport { reset as resetFormAction } from 'redux-form';\n\nimport { dataFetch } from '../../providers';\n\nconst styles = {\n titleDiv: {\n display: 'flex',\n justifyContent: 'space-between'\n },\n closeButton: {\n marginTop: '0.5em',\n marginRight: '0.5em'\n }\n}\n\nclass CreateAnnotationsDialog extends Component {\n\n handleSave = (record) => {\n const { observationIds, onClose, refreshView, setListSelectedIds, showNotification, allData, parentrecord, insertedAnnotations } = this.props;\n let time_record = [];\n observationIds.forEach(obs => {\n const result = {\n beginTime: allData[obs].timestamp,\n record: allData[obs].record\n };\n\n time_record.push(result);\n });\n const headers = new Headers({\n Accept: 'application/json',\n \"Content-Type\": \"application/json\"\n });\n\n const body = {\n intervals: time_record,\n derivedsetId: parentrecord.id,\n text: record.description,\n tags: record.tagIds\n };\n\n dataFetch('POST', `/annotations`, headers, JSON.stringify(body))\n .then(result => {\n showNotification('ra.notification.created', 'info', { smart_count: observationIds.length });\n setListSelectedIds('observations', []);\n onClose()\n refreshView();\n insertedAnnotations();\n })\n .catch(err => showNotification('ra.notification.http_error', 'warning'));\n }\n\n componentDidMount() {\n this.props.resetForm('record-form');\n }\n\n render() {\n const { classes, fullWidth, edit = true, observationIds, onClose, open, record, translate } = this.props;\n return <Dialog open={open} onClose={onClose} fullWidth={fullWidth}>\n <span className={classes.titleDiv}>\n <DialogTitle >\n {edit ?\n translate('ra.page.edit', { name: translate('resources.annotations.name', { smart_count: 1 }), id: record.id })\n : translate('ra.page.create', { name: translate('resources.annotations.name', { smart_count: observationIds.length }) })}\n </DialogTitle>\n <IconButton classes={{ root: classes.closeButton }} onClick={() => onClose()}>\n <CloseIcon />\n </IconButton>\n </span>\n <DialogContent onClick={this.handleCLick}>\n <SimpleForm save={this.handleSave} record={edit ? record : { observationIds }} resource={'annotations'}>\n <LongTextInput source='description' />\n <ReferenceArrayInput reference='tags' source='tagIds' basePath='/tags' >\n <Selection />\n </ReferenceArrayInput>\n </SimpleForm>\n </DialogContent>\n </Dialog>\n }\n\n}\n\nconst Selection = ({ selected, ...props }) => {\n //Overrides props.input.value so it has initial value. If nothing is passed it assumes that record has no related fields\n props.input.value = props.input.value === \"\" ? selected : props.input.value;\n return <SelectArrayInput {...props}>\n <ChipField source='name' />\n </SelectArrayInput>;\n}\n\nconst enhance = compose(\n withStyles(styles),\n translate,\n connect(\n null,\n {\n crudCreate: crudCreateAction,\n refreshView: refreshViewAction,\n setListSelectedIds: setListSelectedIdsAction,\n showNotification: showNotificationAction,\n resetForm: resetFormAction\n }\n )\n);\n\nexport default enhance(CreateAnnotationsDialog);","import React, { Component } from 'react';\nimport { ChipField, translate } from 'react-admin';\nimport {\n Button,\n IconButton,\n ListItem,\n ListItemText,\n Collapse,\n Typography\n} from '@material-ui/core';\n\nimport { ExpandLess, ExpandMore } from '@material-ui/icons';\n\nimport ReferenceManyManyField from '../field/ReferenceManyManyField';\nimport EditAnnotationsDialog from '../../resources/annotations/CreateAnnotationsDialog';\n\nconst TagsIterator = ({ data }) => {\n return Object.values(data).map((tag) => (\n <ChipField key={tag.id} record={tag} source='name'/> \n ));\n}\n\n//WARNING: Component is not scalable\nclass AccordionItem extends Component {\n \n state = {\n open: false,\n editOpen: false\n }\n\n handleOpen = () => {\n this.setState((state) => ({open: !state.open}))\n }\n\n handleEditOpen = () => {\n this.setState({editOpen:true})\n }\n\n render(){\n return <div>\n <ListItem divider >\n <ListItemText>{this.props.record.title}</ListItemText>\n <Button style={{marginRight: '1em'}} variant='raised' color='primary' onClick={this.handleEditOpen} >{this.props.translate('ra.action.edit')}</Button>\n <ReferenceManyManyField record={this.props.record} basePath='/annotation' resource='annotations' reference='tags'>\n <TagsIterator/>\n </ReferenceManyManyField>\n <IconButton onClick={this.handleOpen}>\n {this.state.open ? <ExpandLess /> : <ExpandMore />}\n </IconButton>\n <ReferenceManyManyField record={this.props.record} basePath='/annotation' resource='annotations' reference='tags'>\n <EditAnnotationsDialog open={this.state.editOpen} record={this.props.record} onClose={()=>this.setState({editOpen:false})} />\n </ReferenceManyManyField>\n </ListItem>\n <Collapse in={this.state.open}>\n <ListItem divider>\n <ListItemText>\n {\n this.props.record.text.split('\\n').map((annotationText, index) => <Typography key={index}>{annotationText}</Typography>)\n }\n </ListItemText>\n </ListItem>\n </Collapse>\n </div>\n }\n}\n\nexport default translate(AccordionItem);","import React from 'react'\nimport { List } from '@material-ui/core'\n\nimport AccordionItem from './AccordionItem'\n\nexport default ({data, ids }) => (\n <List>\n {\n ids.map((id, index) => (<AccordionItem key={index} record={data[id]} />)) \n }\n </List>\n)","import React, { Component } from 'react'\nimport {\n Dialog,\n DialogContent,\n DialogTitle,\n Divider,\n IconButton,\n withStyles\n} from '@material-ui/core'\nimport CloseIcon from '@material-ui/icons/Close'\n\nconst styles = {\n titleDiv:{\n display: 'flex',\n justifyContent: 'space-between'\n },\n closeButton:{\n marginTop: '0.5em',\n marginRight: '0.5em'\n },\n paper:{\n overflowY: 'hidden',\n }\n}\n\nclass SimpleModal extends Component {\n render(){\n const { children, classes, footer, maxWidth, onClose, onEntering, open, title, scroll } = this.props\n return (\n <Dialog classes={{paper: classes.paper}} paper={classes.paper} open={open} onClose={onClose} onEntering={onEntering} fullWidth scroll={scroll || 'paper'} maxWidth={maxWidth || false }>\n <div className={classes.titleDiv}>\n <DialogTitle>{title}</DialogTitle>\n <IconButton classes={{root: classes.closeButton}} onClick={() => onClose()}>\n <CloseIcon/>\n </IconButton>\n </div>\n <Divider/>\n <DialogContent>\n {children}\n </DialogContent>\n {footer}\n </Dialog>\n )\n }\n}\n\nexport default withStyles(styles)(SimpleModal)","import React, { Component } from 'react';\nimport { reset as resetFormAction } from 'redux-form';\nimport { connect } from 'react-redux';\nimport compose from 'recompose/compose';\nimport {\n LongTextInput,\n NumberInput,\n fetchEnd,\n fetchStart,\n SimpleForm,\n showNotification,\n translate,\n // SelectInput\n // required\n} from 'react-admin';\nimport {\n Dialog, IconButton,\n DialogTitle,\n DialogContent,\n withStyles\n} from '@material-ui/core';\nimport { Close as CloseIcon } from '@material-ui/icons'\nimport PropTypes from 'prop-types';\nimport ShowTime from '../annotations/ShowTime';\nimport { dataFetch } from '../../providers';\n\nconst styles = {\n content: { padding: 0 },\n titleDiv: {\n display: 'flex',\n justifyContent: 'space-between'\n },\n closeButton: {\n marginTop: '0.5em',\n marginRight: '0.5em'\n },\n TextField: {\n maxWidth: \"80%\",\n display: 'flex',\n margin: '0 auto'\n },\n\n times: {\n paddingLeft: \"24px\",\n paddingRight: \"24px\"\n }\n};\n\nclass Details extends Component {\n\n // constructor(props) {\n // super(props);\n\n // // this.state = {\n // // limit_form: \"0\"\n // // };\n // }\n\n handleSave = (record) => {\n\n const { beginTime, endTime, recordId, showNotification, onClose } = this.props\n // const { limit_form } = this.state;\n\n const headers = new Headers({\n Accept: 'application/json',\n \"Content-Type\": \"application/json\"\n });\n\n\n const filter = {\n beginTime: beginTime, //new Date(beginTime),\n endTime: endTime, //new Date(endTime)\n derivedsetId: recordId,\n description: record.description,\n limit: 4096\n }\n\n const method = 'POST', url = '/parameters';\n\n // if(limit_form === \"1\" && record.observationsNumber) {\n // filter.limit = record.observationsNumber;\n // filter.period = null;\n // }\n // else if(limit_form === \"2\" && record.minutes) {\n // filter.period = record.minutes;\n // filter.limit = null;\n // }\n\n\n dataFetch(method, url, headers, JSON.stringify(filter))\n .then(result => {\n // fechar modal\n onClose();\n showNotification('containers.parameters.success');\n // this.props.reset('parameters');\n })\n .catch(err => { \n if(err && err.error && err.error.code === \"INSUFICIENT_DATA\"){\n onClose(2);\n showNotification('resources.parameters.error', 'warning');\n } else if(err && err.error && err.error.message){\n console.error(err.error.message);\n onClose(3);\n showNotification(\"errors.SOMETHING\", 'warning');\n } else{\n onClose(3);\n showNotification(\"errors.SOMETHING\", 'warning');\n }\n });\n }\n\n // handleChange = (event) => {\n // this.setState({limit_form: event['0']});\n // };\n\n componentDidMount() {\n this.props.reset('parameters');\n }\n\n render() {\n const { beginTime, endTime, translate, onClose, fullWidth, open, classes, description } = this.props\n return (<Dialog open={open} onClose={onClose} fullWidth={fullWidth}>\n <span className={classes.titleDiv}>\n <DialogTitle>\n {translate('containers.parameters.modalTitle')}\n </DialogTitle>\n\n <IconButton classes={{ root: classes.closeButton }} onClick={() => onClose()}>\n <CloseIcon />\n </IconButton>\n </span>\n <DialogContent onClick={this.handleCLick}>\n <div className={classes.times}>\n <p> {ShowTime(translate('containers.parameters.begin'), beginTime)} </p>\n <p> {ShowTime(translate('containers.parameters.end'), endTime)} </p>\n </div>\n <SimpleForm form='parameters' save={this.handleSave} resource={'parameters'}>\n <LongTextInput source='description' defaultValue={description || \"\"}/>\n {/* <SelectInput source=\"limit_form\" onChange={this.handleChange} choices={[\n { id: \"0\", name: '' },\n { id: \"1\", name: translate('containers.parameters.observationsNumber')},\n { id: \"2\", name: translate('containers.parameters.timeLimit') },\n ]} defaultValue={\"0\"}/> */}\n {/* {\n this.state.limit_form === \"1\" && */}\n <NumberInput source='observationsNumber' defaultValue={4096} disabled />\n {/* }\n {\n this.state.limit_form === \"2\" && \n <NumberInput source='minutes' defaultValue={20} />\n } */}\n </SimpleForm>\n </DialogContent>\n </Dialog>\n )\n }\n}\n\nDetails.propTypes = {\n classes: PropTypes.object.isRequired,\n onClose: PropTypes.func,\n};\n\nconst enhance = compose(\n translate,\n withStyles(styles),\n connect(null, {\n fetchStart,\n fetchEnd,\n showNotification,\n reset: resetFormAction,\n\n })\n);\n\nexport default enhance(Details);","import React, { Component } from 'react';\nimport { Button, withStyles } from '@material-ui/core';\nimport { Control } from 'react-leaflet-control-inesc';\nimport { \n StageOne,\n StageTwo,\n StageThree\n} from '../annotations/map'\n\nimport {\n showNotification\n} from 'react-admin';\nimport { connect } from 'react-redux';\nimport compose from 'recompose/compose';\nimport Details from './Details';\n\nconst styles = {\n button: {\n padding: 0,\n minHeight: 0,\n minWidth: 0,\n width: '30px',\n height: '30px',\n },\n checkBox: {\n margin: '10px',\n background: \"green\"\n }\n}\n\nclass ParametersControl extends Component {\n\n constructor(props) {\n super(props);\n\n this.state = {\n active: false,\n stage: 1,\n beginTime: undefined,\n endTime: undefined,\n modal_open: false\n }\n\n this.nextStage = this.nextStage.bind(this);\n this.preStage = this.preStage.bind(this);\n }\n\n onClose = (stage = 1) => {\n if(stage === 1)\n this.setState({ modal_open: false, stage: stage, active: false });\n else\n this.setState({ modal_open: false, stage: stage });\n }\n\n nextStage = () => {\n let { stage } = this.state;\n\n if (this.props.map.time === 0 && (stage === 1 || stage === 3)) { \n this.props.showNotification('pos.annotation.loading');\n return;\n }\n if (stage === 1)\n this.setState({ beginTime: this.props.map.time });\n else if (stage === 2)\n this.setState({ endTime: this.props.map.time });\n else\n this.setState({ modal_open: true });\n\n this.setState({ stage: stage + 1 });\n }\n\n preStage = () => {\n this.setState({ stage: this.state.stage - 1 })\n }\n\n success = () => {\n this.setState({ stage: 1, beginTime: undefined, endTime: undefined, active: false });\n this.props.refreshData();\n }\n\n render() {\n const { classes, recordId, refreshData, showNotification, ...props } = this.props\n const { active, stage, modal_open } = this.state;\n return (\n <Control position=\"topleft\" className=\"leaflet-control-zoom leaflet-bar leaflet-control\">\n <div style={{ background: 'white' }}>\n <Button\n {...props}\n classes={{ root: classes.button }}\n onClick={() => { this.setState({ active: !active }) }}\n >\n <span>W</span>\n </Button>\n\n {active &&\n (\n (\n stage === 1 &&\n <StageOne map={this.props.map} nextstage={this.nextStage} />\n ) ||\n (\n stage === 2 &&\n <StageTwo map={this.props.map} nextstage={this.nextStage} prestage={this.preStage} beginTime={this.state.beginTime} />\n ) ||\n (\n stage >= 3 &&\n <StageThree map={this.props.map} nextstage={this.nextStage} prestage={this.preStage} beginTime={this.state.beginTime} endTime={this.state.endTime} />\n )\n )\n }\n {\n active &&\n stage === 4 &&\n <Details open={modal_open} onClose={this.onClose} beginTime={this.state.beginTime} endTime={this.state.endTime} recordId={recordId} success={this.success}/>\n }\n\n </div>\n </Control>\n );\n }\n}\n\nconst enhance = compose(\n withStyles(styles),\n connect(null, {\n showNotification\n })\n);\n\nexport default enhance(ParametersControl);","import React, { Component } from 'react';\nimport { Control } from './';\n\nclass Parameters extends Component {\n render() {\n const { map, recordId } = this.props\n return (\n <div>\n <Control map={map} recordId={recordId} />\n </div>\n );\n }\n}\n\nexport default Parameters;","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core';\r\nimport {\r\n translate,\r\n showNotification\r\n} from 'react-admin';\r\nimport compose from 'recompose/compose';\r\nimport * as am4core from \"@amcharts/amcharts4/core\";\r\nimport * as am4charts from \"@amcharts/amcharts4/charts\";\r\n\r\nimport { \r\n Details, \r\n DetailsShow\r\n} from '../annotations';\r\nimport { \r\n Details as ParametersDetails, \r\n} from '../parameters';\r\n\r\n\r\nimport { connect } from 'react-redux';\r\n// import am4themes_animated from \"@amcharts/amcharts4/themes/animated\";\r\n// am4core.useTheme(am4themes_animated);\r\n\r\nam4core.options.minPolylineStep = 5;\r\nam4core.options.queue = true;\r\nam4core.options.onlyShowOnViewport = true;\r\n\r\nconst styles = {\r\n container:{\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n height: '600px',\r\n width: '100%'\r\n }\r\n}\r\n\r\nclass ReactChart extends Component {\r\n \r\n constructor(props){\r\n super(props);\r\n this.zoomChanged = this.zoomChanged.bind(this);\r\n this.state = {\r\n loaded: false,\r\n annotation: false,\r\n parameters: false,\r\n annotationDetail: false,\r\n annotationTimes:[],\r\n beginTime:undefined,\r\n endTime:undefined,\r\n beginTimeShowAnnotation:undefined,\r\n endTimeShowAnnotation:undefined,\r\n descriptionShowAnnotation:undefined,\r\n tagsShowAnnotation:undefined,\r\n allowAnnotations: undefined,\r\n allowParameters: undefined,\r\n annotationFirstClick: false,\r\n }\r\n }\r\n addAnnotationsHandler(annotationDatevalue){\r\n\r\n let times = this.state.annotationTimes;\r\n times.push(annotationDatevalue);\r\n\r\n if(times.length===2){\r\n let bT, eT;\r\n if(times[0] > times[1]){\r\n bT = times[1];\r\n eT = times[0];\r\n }else{\r\n bT = times[0];\r\n eT = times[1];\r\n }\r\n\r\n if(this.state.allowAnnotations)\r\n this.setState({ annotation: true, beginTime: bT, endTime: eT });\r\n else if(this.state.allowParameters)\r\n this.setState({ parameters: true, beginTime: bT, endTime: eT });\r\n\r\n }else{\r\n this.props.showNotification('pos.annotation.clicked');\r\n this.setState({annotationTimes: times});\r\n }\r\n }\r\n\r\n createAxisAndSeries(field, name, chart) {\r\n let series = chart.series.push(new am4charts.LineSeries());\r\n series.dataFields.valueY = field;\r\n series.dataFields.dateX = \"timestamp\";\r\n \r\n series.strokeWidth = 2;\r\n series.prop_name = name;\r\n series.hidden = true\r\n series.tooltipText = `${name}: [bold]{valueY}[/]`;\r\n series.legendSettings.valueText = name;\r\n series.legendSettings.itemValueText = name+\" [bold]{valueY}[/]\";\r\n\r\n }\r\n\r\n onClose = () => {\r\n this.setState({ annotation: false, parameters:false, annotationTimes: []});\r\n }\r\n onCloseAnnotationDetail = () => {\r\n this.setState({ annotationDetail: false});\r\n }\r\n success = () => {\r\n this.props.rerenderParentCallback();\r\n this.setState({ annotation: false, annotationTimes: []});\r\n }\r\n\r\n zoomChanged(ev) {\r\n if(this.state.loaded) {\r\n\r\n // let { minZoomed, maxZoomed } = ev.target; // timestamp\r\n let { minZoomed, maxZoomed } = this.chart.xAxes.values[0]; // timestamp // para ter acesso nos dois eventos\r\n const { data, series } = this.chart;\r\n\r\n const xError = (maxZoomed - minZoomed) * .1;\r\n minZoomed -= xError;\r\n maxZoomed += xError;\r\n \r\n let show_properties = []\r\n if(ev.type === \"hit\") {\r\n\r\n var seriesColumn = ev.target.dataItem.dataContext;\r\n seriesColumn.visible = !seriesColumn.visible\r\n\r\n if(!seriesColumn.visible)\r\n seriesColumn.hide()\r\n else \r\n seriesColumn.show()\r\n }\r\n \r\n for(var i in series.values ) {\r\n if(series.values[i].visible)\r\n show_properties.push(series.values[i].prop_name)\r\n } \r\n\r\n if(show_properties.length <= 0) // desnecessário continuar\r\n return;\r\n\r\n let map = data.filter(\r\n function(key, index, obj) { \r\n\r\n if(key.timestamp < minZoomed && obj[index+1].timestamp > minZoomed)\r\n return true;\r\n if(index-1 > 0 && obj[index-1].timestamp < maxZoomed && key.timestamp > maxZoomed)\r\n return true;\r\n if(key.timestamp > minZoomed && key.timestamp < maxZoomed)\r\n return true; \r\n return false;\r\n\r\n }).map(\r\n function(key) {\r\n let result = [];\r\n for( var i in show_properties ) {\r\n if(!isNaN(key[show_properties[i]]))\r\n result.push(parseFloat(key[show_properties[i]]))\r\n // else\r\n // console.log(\"Error - Isn't a number!\")\r\n }\r\n return result;\r\n });\r\n \r\n map = [].concat.apply([], map);\r\n let yMax = Math.max.apply(Math, map);\r\n let yMin = Math.min.apply(Math, map);\r\n\r\n const yError = (yMax - yMin) * .1;\r\n \r\n yMax += yError;\r\n yMin -= yError;\r\n\r\n this.chart.yAxes.values[0].min = yMin;\r\n this.chart.yAxes.values[0].max = yMax;\r\n }\r\n }\r\n\r\n annotationsHandler(annotationBar, annotation) {\r\n const barHighlightedOpacity = 1, barNotHighlightedOpacity = 0.3;\r\n const bulletHighlightedOpacity = 1, bulletNotHighlightedOpacity = 0.5;\r\n annotationBar.date = new Date (annotation.intervals[0].beginTime);\r\n annotationBar.endDate = new Date(annotation.intervals[0].endTime);\r\n annotationBar.grid.disabled = true;\r\n\r\n const colorNotDefined = 'blue';\r\n //if the annotation does not have a tag the bar will be blue\r\n if(annotation.tags[0] == null){\r\n annotationBar.axisFill.fill = colorNotDefined;\r\n } else {\r\n //if the annotation tag does not have a defined color, the color will also be blue\r\n if(!annotation.tags[0].color){\r\n annotationBar.axisFill.fill = colorNotDefined;\r\n } else {\r\n //if there is only one tag the bar will have the defined color\r\n if(annotation.tags.length === 1){\r\n annotationBar.axisFill.fill = annotation.tags[0].color;\r\n }\r\n }\r\n }\r\n \r\n //bullet is the triangle icon\r\n annotationBar.bullet = new am4core.Triangle();\r\n annotationBar.bullet.width = 15;\r\n annotationBar.bullet.height = 11;\r\n annotationBar.bullet.fill = am4core.color(\"#c00\");\r\n annotationBar.bullet.horizontalCenter = \"middle\";\r\n annotationBar.bullet.dx = -7;//set the triangle position more to the left to be 100% centered\r\n let bulletText;\r\n if(annotation.text.length > 9){\r\n bulletText = annotation.text.substring(0,9)+'...';\r\n }else{\r\n bulletText = annotation.text;\r\n }\r\n annotationBar.bullet.tooltipText = bulletText;\r\n annotationBar.bullet.draggable = true;\r\n\r\n annotationBar.axisFill.fillOpacity = barNotHighlightedOpacity;\r\n annotationBar.bullet.fillOpacity = bulletNotHighlightedOpacity;\r\n\r\n annotationBar.bullet.events.on(\r\n \"hit\",\r\n ev => {\r\n const { tags } = annotation;\r\n // let tags;\r\n // if(annotation.tags[0] != null){\r\n // tag = annotation.tags[0].name;\r\n // }else{\r\n // tags = undefined;\r\n // }\r\n this.setState({annotationDetail: true, beginTimeShowAnnotation: annotationBar.date,\r\n endTimeShowAnnotation: annotationBar.endDate,\r\n descriptionShowAnnotation: annotation.text,\r\n tagsShowAnnotation: tags});\r\n },\r\n this);\r\n annotationBar.bullet.events.on(\r\n \"over\",\r\n ev => {\r\n if(annotationBar.axisFill.fillOpacity !== barHighlightedOpacity){\r\n annotationBar.axisFill.fillOpacity = barHighlightedOpacity;\r\n annotationBar.bullet.fillOpacity = bulletHighlightedOpacity;\r\n }\r\n },\r\n this);\r\n annotationBar.bullet.events.on(\r\n \"out\",\r\n ev => {\r\n if(annotationBar.axisFill.fillOpacity !== barNotHighlightedOpacity){\r\n annotationBar.axisFill.fillOpacity = barNotHighlightedOpacity;\r\n annotationBar.bullet.fillOpacity = bulletNotHighlightedOpacity;\r\n }\r\n },\r\n this);\r\n\r\n }\r\n\r\n componentDidMount() {\r\n const { annotationsEnabled } = this.props;\r\n\r\n let chart = am4core.create(\"chartdiv\", am4charts.XYChart);\r\n \r\n chart.colors.step = 2;\r\n let dateAxis = chart.xAxes.push(new am4charts.DateAxis());\r\n dateAxis.renderer.grid.template.location = 0.5;\r\n dateAxis.tooltipDateFormat = \"hh:mm:ss, d-M-yyyy\";\r\n dateAxis.renderer.minGridDistance = 50;\r\n dateAxis.events.on(\"selectionextremeschanged\", this.zoomChanged);\r\n dateAxis.renderer.labels.template.dy = 10;//put the labels a bit lower to give space for the triangles\r\n\r\n chart.yAxes.push(new am4charts.ValueAxis());\r\n chart.scrollbarX = new am4charts.XYChartScrollbar();\r\n chart.scrollbarX.minHeight = 30;//sets the height of the scrollbar\r\n chart.cursor = new am4charts.XYCursor();\r\n\r\n chart.legend = new am4charts.Legend();\r\n chart.legend.itemContainers.template.paddingTop = 5;\r\n chart.legend.itemContainers.template.paddingLeft = 3;\r\n chart.legend.itemContainers.template.paddingRight = 3;\r\n chart.legend.itemContainers.template.paddingBottom = 5;\r\n chart.legend.itemContainers.template.togglable = false;\r\n chart.legend.itemContainers.template.events.on(\"hit\", this.zoomChanged);\r\n\r\n if(annotationsEnabled === true){\r\n //add event to listen for any click in chart\r\n chart.plotContainer.events.on(\"hit\",ev => {this.setState({clickOnChart: true})}, this);\r\n\r\n //add event to listen for any change of position in cursor\r\n //and for when the cursor is clicked\r\n chart.cursor.events.on('cursorpositionchanged', ev => {\r\n //if the user selected to add Annotations\r\n if(this.state.allowAnnotations || this.state.allowParameters){\r\n\r\n //if a click on the chart has been made\r\n if(this.state.clickOnChart === true){\r\n\r\n const xValue = ev.target._upPointOrig.x;\r\n const yValue = ev.target._upPointOrig.y;\r\n const xMaxValue = ev.target.maxRight;\r\n const yMaxValue = ev.target.maxBottom;\r\n\r\n if((xValue > 0 & xValue < xMaxValue) & (yValue > 0 & yValue < yMaxValue)){\r\n const xAxis = ev.target.chart.xAxes.getIndex(0); \r\n let annotationDate = new Date(xAxis.positionToDate(xAxis.toAxisPosition(ev.target.xPosition))).getTime();\r\n this.addAnnotationsHandler(annotationDate);\r\n\r\n if(this.state.annotationFirstClick === true){\r\n this.setState({annotationFirstClick: false});\r\n }else{\r\n this.setState({annotationFirstClick: true});\r\n }\r\n }\r\n this.setState({clickOnChart: false});\r\n }\r\n }else{\r\n this.setState({clickOnChart: false});\r\n }\r\n });\r\n }\r\n this.chart = chart;\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.chart) {\r\n this.chart.dispose();\r\n this.chart = null\r\n }\r\n }\r\n\r\n componentDidUpdate(oldProps) {\r\n const { data, properties, annotations, allowToAddAnnotations, allowToAddParameters, annotationsEnabled, parametersEnabled } = this.props\r\n\r\n if(annotationsEnabled === true){\r\n if(this.state.allowAnnotations!== allowToAddAnnotations){\r\n this.setState({allowAnnotations: allowToAddAnnotations});\r\n } \r\n }\r\n if(parametersEnabled === true){\r\n if(this.state.allowParameters!== allowToAddParameters){\r\n this.setState({allowParameters: allowToAddParameters});\r\n } \r\n }\r\n //check the state of the toggle from the parent\r\n\r\n if (data != null && oldProps.data.length === 0 && data.length !== 0) {\r\n // i = 0 -> timestamp\r\n for( var i = 1; i < properties.length; i++ ) {\r\n const name = properties[i];\r\n // TRANSLATE -> SECOND ARG\r\n this.createAxisAndSeries(name, name, this.chart);\r\n }\r\n this.chart.data = data;\r\n this.setState({ loaded: true });\r\n let dateAxis = this.chart.xAxes._values[0];\r\n dateAxis.tooltipDateFormat = \"hh:mm:ss, d-M-yyyy\";\r\n\r\n if(annotationsEnabled === true){\r\n annotations.forEach(annotation => {\r\n var annotationBar = dateAxis.axisRanges.create();\r\n this.annotationsHandler(annotationBar, annotation);\r\n });\r\n }\r\n\r\n //this.chart.validateData()\r\n }else{\r\n if(annotationsEnabled === true){\r\n //if an annotation was added\r\n if(annotations != null && annotations.length > oldProps.annotations.length){\r\n let dateAxis = this.chart.xAxes._values[0];\r\n const annotation = annotations[annotations.length-1]; \r\n const annotationBar = dateAxis.axisRanges.create();\r\n this.annotationsHandler(annotationBar, annotation);\r\n } \r\n }\r\n }\r\n }\r\n\r\n\r\n render() {\r\n const { classes, recordId, annotationsEnabled, parametersEnabled /*, translate */} = this.props;\r\n return <div >\r\n <div id=\"chartdiv\" style={{height:'68vh'}} className={ classes.container }></div> \r\n {annotationsEnabled && <Details open={this.state.annotation} onClose={this.onClose} beginTime={this.state.beginTime} endTime={this.state.endTime} recordId={recordId} success={this.success}/>}\r\n {parametersEnabled && <ParametersDetails open={this.state.parameters} onClose={this.onClose} beginTime={this.state.beginTime} endTime={this.state.endTime} recordId={recordId} success={this.success}/>}\r\n {annotationsEnabled && <DetailsShow open={this.state.annotationDetail} onClose={this.onCloseAnnotationDetail} \r\n beginTime={this.state.beginTimeShowAnnotation} endTime={this.state.endTimeShowAnnotation} \r\n description={this.state.descriptionShowAnnotation} tags={this.state.tagsShowAnnotation}/>}\r\n </div>\r\n }\r\n}\r\n\r\nReactChart.propTypes = {\r\n data: PropTypes.arrayOf(PropTypes.object),\r\n properties: PropTypes.arrayOf(PropTypes.string)\r\n}\r\n\r\nconst enhance = compose(\r\n translate,\r\n withStyles(styles),\r\n connect(null, {\r\n showNotification,\r\n })\r\n);\r\n\r\nexport default enhance(ReactChart);","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { reset as resetFormAction } from 'redux-form';\nimport compose from 'recompose/compose';\nimport {\n fetchEnd,\n fetchStart,\n showNotification,\n translate,\n Labeled,\n TextField,\n DeleteWithConfirmButton,\n} from 'react-admin';\nimport {\n Dialog, IconButton,\n DialogTitle,\n DialogContent,\n withStyles,\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow,\n} from '@material-ui/core';\nimport { createMuiTheme, MuiThemeProvider } from \"@material-ui/core/styles\";\n\nimport { Close as CloseIcon } from '@material-ui/icons'\nimport PropTypes from 'prop-types';\nimport EditToolbar from './EditToolbar';\nimport { DateField } from '../';\n\nconst styles = function styles(theme) {\n\n var height = 32;\n var backgroundColor = theme.palette.type === 'light' ? theme.palette.grey[300] : theme.palette.grey[700];\n // var deleteIconColor = (0, _colorManipulator.fade)(theme.palette.text.primary, 0.26);\n return {\n /* Styles applied to the root element. */\n tag_root: {\n fontFamily: theme.typography.fontFamily,\n fontSize: theme.typography.pxToRem(14),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: height,\n color: theme.palette.getContrastText(backgroundColor),\n backgroundColor: backgroundColor,\n borderRadius: height / 2,\n whiteSpace: 'nowrap',\n transition: theme.transitions.create(['background-color', 'box-shadow']),\n // label will inherit this from root, then `clickable` class overrides this for both\n cursor: 'default',\n // We disable the focus ring for mouse, touch and keyboard users.\n outline: 'none',\n textDecoration: 'none',\n border: 'none',\n position: 'relative',\n top: '15px',\n // left: '24px',\n // Remove `button` border\n padding: 0, // Remove `button` padding,\n float: 'left',\n\n },\n root: {\n minWidth: 300\n },\n tag_label: {\n display: 'flex',\n alignItems: 'center',\n paddingLeft: 12,\n paddingRight: 12,\n userSelect: 'none',\n whiteSpace: 'nowrap',\n cursor: 'inherit'\n },\n content: { padding: 0 },\n titleDiv: {\n display: 'flex',\n justifyContent: 'space-between'\n },\n closeButton: {\n marginTop: '0.5em',\n marginRight: '0.5em'\n },\n TextField: {\n maxWidth: \"80%\",\n display: 'flex',\n margin: '0 auto'\n },\n\n times: {\n paddingLeft: \"24px\",\n paddingRight: \"24px\"\n },\n table: {\n maxWidth: 475\n\n },\n cell: {\n padding: '4px 56px 4px 2px',\n backgroundColor: 'green'\n },\n overrides: {\n MuiTableCell: {\n root: {\n padding: '4px 56px 4px 2px',\n backgroundColor: 'green'\n }\n }\n },\n cell2: {\n padding: '4px 56px 4px 2px',\n backgroundColor: 'pink'\n }\n }\n};\n\nconst theme = createMuiTheme({\n overrides: {\n MuiTableCell: {\n root: {\n // paddingLeft: 1,\n padding: '0px 30px 0px 0px',\n \"&:last-child\": {\n paddingRight: 0\n }\n }\n }\n }\n});\n\nconst sanitizeRestProps = ({\n basePath,\n classes,\n crudDelete,\n filterValues,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n label,\n pristine,\n resource,\n saving,\n selectedIds,\n submitOnEnter,\n redirect,\n refreshView,\n showNotification,\n push,\n hasList,\n hasCreate,\n hasShow,\n hasEdit,\n translate,\n openEdit,\n fetchEnd,\n fetchStart,\n reset,\n refreshData,\n ...rest\n}) => rest;\n\nclass DetailsShow extends Component {\n\n constructor(props) {\n super(props);\n\n this.state = {\n }\n }\n\n componentDidMount() {\n this.props.reset('annotation');\n }\n \n render() {\n const { translate, onClose, fullWidth, open, classes, record, openEdit, refreshData } = this.props\n\n let key = 0;\n return (\n <Dialog open={open} onClose={onClose} fullWidth={fullWidth}>\n <span className={classes.titleDiv}>\n <DialogTitle >\n {translate('containers.annotations.modalTitle')}\n </DialogTitle>\n\n <IconButton classes={{ root: classes.closeButton }} onClick={() => onClose()}>\n <CloseIcon />\n </IconButton>\n </span>\n <DialogContent onClick={this.handleCLick} className={classes.root}>\n\n {record.interval ?\n <div className={classes.times}>\n {/* <DateField source='beginTime' format='dd/MM/yyyy HH:mm:ss' label='beginTime' {...sanitizeRestProps(this.props)}/> */}\n\n <Labeled label={'containers.annotations.begin'}>\n <DateField source=\"beginTime\" format='dd/MM/yyyy HH:mm:ss' record={record} />\n </Labeled>\n\n <br />\n <Labeled label={'containers.annotations.end'}>\n <DateField source=\"endTime\" format='dd/MM/yyyy HH:mm:ss' record={record} />\n </Labeled>\n\n <br />\n\n <Labeled label={'containers.annotations.description'}>\n <TextField\n {...sanitizeRestProps(this.props)}\n source='text'\n />\n </Labeled>\n <br />\n\n <Labeled label={'containers.annotations.tags'}>\n <span>\n {record.tags && record.tags.map(tag => {\n return (\n <span className={classes.tag_root} key={key++}>\n <span className={classes.tag_label}> {tag.name} </span>\n </ span>\n )\n })}\n </span>\n </Labeled>\n </div>\n\n : // single\n <div className={classes.times}>\n <Labeled label={'containers.annotations.description'}>\n <TextField\n {...sanitizeRestProps(this.props)}\n source='text'\n />\n </Labeled>\n <br />\n\n <Labeled label={'containers.annotations.tags'}>\n <span>\n {record.tags && record.tags.map(tag => {\n return (\n <span className={classes.tag_root} key={key++}>\n <span className={classes.tag_label}> {tag.name} </span>\n </ span>\n )\n })}\n </span>\n </Labeled>\n\n <MuiThemeProvider theme={theme}>\n\n <Table className={classes.table}>\n <TableHead>\n <TableRow >\n <TableCell >{translate('containers.annotations.time')}</TableCell>\n <TableCell>{translate('containers.annotations.record')}</TableCell>\n <TableCell>{translate('ra.action.delete')}</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {record.intervals.map((single, index) => {\n return (\n <TableRow key={index}>\n <TableCell > <DateField source={`beginTime`} format='dd/MM/yyyy HH:mm:ss' record={single} /></TableCell>\n <TableCell>\n <TextField\n {...sanitizeRestProps(this.props)}\n source={`intervals[${index}].record`}\n record={record}\n />\n </TableCell>\n <TableCell>\n <DeleteWithConfirmButton\n className={classes.deleteButton}\n resource={`annotations/${record.id}/intervals`}\n source=\"intervals\"\n record={{ id: single.id }}\n label=\"\"\n redirect={() => refreshData()}\n />\n </TableCell>\n\n </TableRow>\n );\n })}\n </TableBody>\n </Table>\n </MuiThemeProvider>\n\n </div>\n }\n\n </DialogContent>\n\n <EditToolbar editing={() => openEdit()} edit />\n\n </Dialog>\n )\n }\n}\n\nDetailsShow.propTypes = {\n classes: PropTypes.object.isRequired,\n onClose: PropTypes.func,\n};\n\nconst enhance = compose(\n translate,\n withStyles(styles),\n connect(null, {\n fetchStart,\n fetchEnd,\n showNotification,\n reset: resetFormAction,\n\n })\n);\n\nexport default enhance(DetailsShow);","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { reset as resetFormAction } from 'redux-form';\nimport compose from 'recompose/compose';\nimport { reduxForm } from 'redux-form';\nimport {\n fetchEnd,\n fetchStart,\n showNotification,\n translate,\n TextInput,\n getDefaultValues,\n required,\n REDUX_FORM_NAME,\n ReferenceArrayInput,\n SelectArrayInput,\n ChipField,\n} from 'react-admin';\nimport {\n Dialog, IconButton,\n DialogTitle,\n DialogContent,\n withStyles,\n // TextField,\n // Select,\n // InputLabel,\n // MenuItem\n} from '@material-ui/core';\nimport { Close as CloseIcon } from '@material-ui/icons'\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { DateTime } from 'luxon';\n\nimport EditToolbar from './EditToolbar';\n// import DateTimeInput from './DateTime';\n// import { DateTimePicker as DateTimeInput } from './Picker';\nimport { DateTimeInput } from '..';\nimport { dataFetch } from '../../providers';\n\nconst styles = function styles(theme) {\n\n var height = 32;\n var backgroundColor = theme.palette.type === 'light' ? theme.palette.grey[300] : theme.palette.grey[700];\n // var deleteIconColor = (0, _colorManipulator.fade)(theme.palette.text.primary, 0.26);\n return {\n /* Styles applied to the root element. */\n tag_root: {\n fontFamily: theme.typography.fontFamily,\n fontSize: theme.typography.pxToRem(14),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: height,\n color: theme.palette.getContrastText(backgroundColor),\n backgroundColor: backgroundColor,\n borderRadius: height / 2,\n whiteSpace: 'nowrap',\n transition: theme.transitions.create(['background-color', 'box-shadow']),\n // label will inherit this from root, then `clickable` class overrides this for both\n cursor: 'default',\n // We disable the focus ring for mouse, touch and keyboard users.\n outline: 'none',\n textDecoration: 'none',\n border: 'none',\n position: 'relative',\n top: '15px',\n // left: '24px',\n // Remove `button` border\n padding: 0, // Remove `button` padding,\n float: 'left',\n\n },\n root: {\n minWidth: 300\n },\n tag_label: {\n display: 'flex',\n alignItems: 'center',\n paddingLeft: 12,\n paddingRight: 12,\n userSelect: 'none',\n whiteSpace: 'nowrap',\n cursor: 'inherit'\n },\n content: { padding: 0 },\n titleDiv: {\n display: 'flex',\n justifyContent: 'space-between'\n },\n closeButton: {\n marginTop: '0.5em',\n marginRight: '0.5em'\n },\n TextField: {\n maxWidth: \"80%\",\n display: 'flex',\n margin: '0 auto'\n },\n\n times: {\n paddingLeft: \"24px\",\n paddingRight: \"24px\"\n }\n }\n};\n\nconst sanitizeRestProps = ({\n basePath,\n classes,\n crudDelete,\n filterValues,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n label,\n pristine,\n resource,\n saving,\n selectedIds,\n submitOnEnter,\n redirect,\n refreshView,\n showNotification,\n push,\n hasList,\n hasCreate,\n hasShow,\n hasEdit,\n translate,\n openEdit,\n fetchEnd,\n fetchStart,\n reset,\n anyTouched,\n array,\n asyncBlurFields,\n asyncValidate,\n asyncValidating,\n autofill,\n blur,\n change,\n clearAsyncError,\n clearFields,\n clearSubmit,\n clearSubmitErrors,\n destroy,\n dirty,\n dispatch,\n form,\n initialize,\n initialized,\n initialValues,\n pure,\n resetSection,\n refreshData,\n save,\n submit,\n submitFailed,\n submitSucceeded,\n submitting,\n touch,\n triggerSubmit,\n undoable,\n untouch,\n valid,\n validate,\n ...rest\n}) => rest;\n\nconst Selection = ({ selected, basePath, tagIds, handleChange, ...props }) => {\n props.input.value = props.input.value === \"\" ? selected : props.input.value;\n\n props.input.onChange = (...e) => {handleChange(...e)};\n\n return <SelectArrayInput {...props}>\n <ChipField source='name' />\n </SelectArrayInput>;\n}\n\nclass DetailsEdit extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n openEdit: false,\n description: '',\n multiSelect: [],\n loading: true,\n minDate: undefined,\n maxDate: undefined,\n changed: false,\n beginDate: undefined,\n endDate: undefined,\n // description: undefined,\n tags: undefined,\n errorBegin: false,\n errorEnd: false,\n }\n }\n\n handleSave = (e) => {\n const { record, refreshData, showNotification } = this.props;\n const { beginDate, endDate, description, tags, changed } = this.state;\n const body = {\n derivedsetId: record.derivedsetId,\n text: description\n };\n const headers = new Headers({\n Accept: 'application/json',\n \"Content-Type\": \"application/json\"\n });\n if(record.interval && (beginDate || endDate)) {\n const _beginDate = beginDate ? beginDate : record.beginTime;\n const _endDate = endDate ? endDate : record.endTime;\n \n body.intervals = [{beginTime: new Date(_beginDate), endTime: new Date(_endDate) }]\n } \n if(tags) {\n body.tags = tags;\n }\n\n if(changed) {\n dataFetch('PUT', `/annotations/${record.id}`, headers, JSON.stringify(body))\n .then(_ => {\n refreshData();\n })\n .catch(_ => {\n showNotification('resources.annotations.messages.updateError', 'warning')\n })\n }\n }\n\n handleChangeSelection = (tags) => {\n this.setState({tags, changed: true})\n }\n\n handleChangeDescription = (e) => {\n this.setState({description: e.target.value, changed: true})\n }\n \n handleChangeDates = (type, date) => {\n let errorBegin = undefined;\n let errorEnd = undefined;\n\n if(type === 'beginDate') {\n if(date < this.state.minDate) {\n errorBegin = this.props.translate(`resources.annotations.messages.dateGt`, {date: `${DateTime.fromJSDate(this.state.minDate).toFormat('dd/MM/yyyy HH:mm:ss')}`});\n } else if(date > this.state.maxDate) {\n errorBegin = this.props.translate(`resources.annotations.messages.dateLt`, {date: `${DateTime.fromJSDate(this.state.maxDate).toFormat('dd/MM/yyyy HH:mm:ss')}`});\n }\n }\n if(type === 'endDate') {\n if(date < this.state.minDate) {\n errorEnd = this.props.translate(`resources.annotations.messages.dateGt`, {date: `${DateTime.fromJSDate(this.state.minDate).toFormat('dd/MM/yyyy HH:mm:ss')}`});\n } else if(date > this.state.maxDate) {\n errorEnd = this.props.translate(`resources.annotations.messages.dateLt`, {date: `${DateTime.fromJSDate(this.state.maxDate).toFormat('dd/MM/yyyy HH:mm:ss')}`});\n }\n }\n\n this.setState({[type]: date, changed: true, errorBegin, errorEnd});\n }\n\n componentDidMount() {\n const { record, showNotification } = this.props;\n this.props.reset('annotation');\n\n if(record.interval)\n this.setState({ description: record.text });\n // this.setState({ beginDate: record.beginTime, endDate: record.endTime, description: record.text, tags: record.tags ? record.tags.map(({id}) => id) : [] });\n \n this.setState({ description: record.text });\n\n Promise.all([\n dataFetch('GET', `/derivedsets/${record.derivedsetId}/observations?filter={\"order\":[\"timestamp ASC\"],\"fields\":[\"id\"],\"limit\":1}`),\n dataFetch('GET', `/derivedsets/${record.derivedsetId}/observations?filter={\"order\":[\"timestamp DESC\"],\"fields\":[\"id\"],\"limit\":1}`),\n ])\n .then(result => {\n this.setState({ loading: false, minDate: new Date(result[0][0].timestamp), maxDate: new Date(result[1][0].timestamp) });\n })\n .catch(err => {\n showNotification('resources.annotations.messages.getDatesError', 'warning')\n });\n }\n\n render() {\n const { translate, onClose, fullWidth, open, classes, className, record, refreshData, ...rest } = this.props;\n return (\n <Dialog open={open} onClose={onClose} fullWidth={fullWidth}>\n <span className={classes.titleDiv}>\n <DialogTitle >\n {translate('containers.annotations.modalEdit')}\n </DialogTitle>\n\n <IconButton classes={{ root: classes.closeButton }} onClick={() => onClose()}>\n <CloseIcon />\n </IconButton>\n </span>\n\n <DialogContent onClick={this.handleCLick} className={classes.root}>\n {record.interval ?\n <div className={classes.times}>\n\n <DateTimeInput\n validate={required()}\n source='beginTime'\n label={translate('resources.launches.fields.beginTimestamp')}\n options={{\n format: 'dd/MM/yyyy HH:mm:ss',\n clearable: true,\n selectTimezone: true,\n\n }}\n meta={{ touched: this.state.errorBegin ? true : false, error: this.state.errorBegin }}\n onChange={(_, newDate) => this.handleChangeDates('beginDate', new Date(newDate))}\n />\n <DateTimeInput\n validate={required()}\n source='endTime'\n label={translate('resources.launches.fields.endTimestamp')}\n options={{\n format: 'dd/MM/yyyy HH:mm:ss',\n clearable: true,\n selectTimezone: true,\n }}\n meta={{ touched: this.state.errorEnd ? true : false, error: this.state.errorEnd }}\n onChange={(_, newDate) => this.handleChangeDates('endDate', new Date(newDate))}\n />\n\n <form\n className={classnames('simple-form', className)}\n {...sanitizeRestProps(rest)}\n >\n <br />\n <TextInput\n {...sanitizeRestProps(this.props)}\n source='text'\n label='containers.annotations.description'\n onChange={this.handleChangeDescription}\n />\n <br />\n </form>\n <br />\n\n <ReferenceArrayInput reference='tags' resource={'tags'} source='tagIds' label='containers.annotations.tags'>\n <Selection selected={record.tags.map(tag => tag.id)} handleChange={this.handleChangeSelection}/>\n </ReferenceArrayInput>\n <br />\n </div>\n :\n <div className={classes.times}>\n <form\n className={classnames('simple-form', className)}\n {...sanitizeRestProps(rest)}\n >\n <TextInput\n {...sanitizeRestProps(this.props)}\n source='text'\n label='containers.annotations.description'\n onChange={this.handleChangeDescription}\n />\n <br />\n\n <ReferenceArrayInput reference='tags' resource={'tags'} source='tagIds' label='containers.annotations.tags'>\n <Selection selected={record.tags.map(tag => tag.id)} handleChange={this.handleChangeSelection}/>\n </ReferenceArrayInput>\n </form>\n </div>\n }\n\n </DialogContent>\n\n <EditToolbar save saveDisabled={!this.state.changed || this.state.errorBegin || this.state.errorEnd} onClick={this.handleSave} record={record} resource=\"annotations\" refreshOnDelete={() => refreshData(true)}/>\n\n </Dialog>\n )\n }\n}\n\nDetailsEdit.propTypes = {\n classes: PropTypes.object.isRequired,\n onClose: PropTypes.func,\n};\n\nconst mapStateToProps = (state, props) => ({\n form: props.form || REDUX_FORM_NAME,\n initialValues: getDefaultValues(state, props),\n saving: props.saving || state.admin.saving,\n});\n\nconst enhance = compose(\n translate,\n withStyles(styles),\n connect(mapStateToProps, {\n fetchStart,\n fetchEnd,\n showNotification,\n reset: resetFormAction,\n }),\n reduxForm({\n // destroyOnUnmount: false,\n // enableReinitialize: true,\n // keepDirtyOnReinitialize: true,\n })\n);\n\nexport default enhance(DetailsEdit);","export const REFRESH_ANNOTATIONS = 'REFRESH_ANNOTATIONS';\r\nexport const UPDATE_ANNOTATIONS = 'UPDATE_ANNOTATIONS';\r\n\r\nexport const refreshAnnotations = derivedsetId => {\r\n return { type: REFRESH_ANNOTATIONS, payload: derivedsetId };\r\n};\r\n\r\nexport const updateAnnotations = data => {\r\n return { type: UPDATE_ANNOTATIONS, payload: data };\r\n};","import React, { Component, Fragment } from 'react';\nimport {\n List,\n ListItem,\n ListItemText,\n withStyles,\n Typography,\n // Chip\n} from '@material-ui/core';\nimport { connect } from 'react-redux';\nimport compose from 'recompose/compose';\nimport { translate, showNotification } from 'react-admin'\nimport { SimpleModal, DateField } from '../../../components';\nimport { DetailsShow, DetailsEdit } from '../../../components/annotations';\nimport { refreshAnnotations } from '../../../containers/derivedsets/actions'\nvar styles = function styles(theme) {\n var height = 32;\n var backgroundColor = theme.palette.type === 'light' ? theme.palette.grey[300] : theme.palette.grey[700];\n // var deleteIconColor = (0, _colorManipulator.fade)(theme.palette.text.primary, 0.26);\n return {\n /* Styles applied to the root element. */\n tag_root: {\n fontFamily: theme.typography.fontFamily,\n fontSize: theme.typography.pxToRem(13),\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: height,\n color: theme.palette.getContrastText(backgroundColor),\n backgroundColor: backgroundColor,\n borderRadius: height / 2,\n whiteSpace: 'nowrap',\n transition: theme.transitions.create(['background-color', 'box-shadow']),\n // label will inherit this from root, then `clickable` class overrides this for both\n cursor: 'default',\n // We disable the focus ring for mouse, touch and keyboard users.\n outline: 'none',\n textDecoration: 'none',\n border: 'none',\n // Remove `button` border\n padding: 0, // Remove `button` padding,\n float: 'right',\n\n },\n tag_label: {\n display: 'flex',\n alignItems: 'center',\n paddingLeft: 12,\n paddingRight: 12,\n userSelect: 'none',\n whiteSpace: 'nowrap',\n cursor: 'inherit'\n },\n content: { padding: 0 },\n\n closeButton: {\n marginTop: '0.5em',\n marginRight: '0.5em'\n },\n actionButton: {\n padding: 0,\n minHeight: 0,\n minWidth: 0,\n width: '30px',\n height: '30px'\n },\n inline: {\n display: 'inline',\n },\n right: {\n float: 'right',\n }\n }\n}\n\nclass AnnotationDialog extends Component {\n constructor(props) {\n super(props);\n\n this.refreshData = this.refreshData.bind(this);\n this.closeDialog = this.closeDialog.bind(this);\n this.pressAnnotation = this.pressAnnotation.bind(this);\n this.onCloseAnnotationShow = this.onCloseAnnotationShow.bind(this);\n this.openByTag = this.openByTag.bind(this);\n }\n state = {\n open: false,\n openAnnotationShow: false,\n openAnnotationEdit: false,\n annotations: [],\n details: {},\n version: 0,\n lastAnnotationPressed: undefined,\n openByTag: undefined,\n deleted: false\n };\n\n closeDialog = () => {\n this.setState({ open: false, version: this.state.version+1, lastAnnotationPressed: undefined });\n this.props.modalClose();\n };\n\n refreshData = (deleted = false) => {\n this.props.refreshAnnotations(this.props.recordId);\n\n const open = deleted;\n this.setState({ deleted, openAnnotationEdit: false, openAnnotationShow: false, open });\n }\n\n openByTag = (annotationIds) => {\n this.setState({openByTag: annotationIds});\n this.refreshData();\n }\n\n componentDidUpdate = (oldProps) => {\n const { modalOpen, tagAnnotationDialog, inserted_annotations, annotationIdDialog } = this.props;\n if (tagAnnotationDialog && oldProps.tagAnnotationDialog !== tagAnnotationDialog) {\n this.openByTag(tagAnnotationDialog);\n }\n\n if (modalOpen !== oldProps.modalOpen || modalOpen !== this.state.open) {\n this.setState({ open: modalOpen, version: this.state.version+1 });\n }\n \n if (inserted_annotations !== oldProps.inserted_annotations) {\n this.refreshData();\n }\n\n if(tagAnnotationDialog && oldProps.tagAnnotationDialog !== tagAnnotationDialog) {\n this.openByTag(tagAnnotationDialog);\n }\n \n if(annotationIdDialog && oldProps.annotationIdDialog !== annotationIdDialog) {\n this.pressAnnotation(annotationIdDialog);\n }\n\n if(oldProps.annotationsAction !== this.props.annotationsAction && this.props.annotationsAction) {\n let _openByTag = this.state.openByTag;\n let result = this.props.annotationsAction.filter(({ intervals }) => {\n if (intervals && intervals.length > 0)\n return true;\n return false;\n });\n\n if(_openByTag) {\n \n result = result.filter(({ tags, id }) => {\n return _openByTag.includes(String(id));\n });\n\n _openByTag = undefined;\n }\n this.setState({ annotations: result, version: this.state.version+1 });\n // this.setState({ annotations: result, open: true, openAnnotationShow: false, version: this.state.version+1 });\n\n\n const deleted = this.state.deleted;\n \n // const openAnnotationShow = deleted ? false : this.state.openAnnotationShow;\n const open = deleted;\n \n this.setState({ openByTag: undefined, deleted: false, open, version: this.state.version+1 });\n if(!deleted) setTimeout(() => this.pressAnnotation(this.state.lastAnnotationPressed), 50);\n // if(!deleted) this.pressAnnotation(this.state.lastAnnotationPressed)\n }\n }\n\n componentDidMount() {\n this.refreshData();\n }\n\n pressAnnotation = (annotationId) => {\n\n if(!annotationId ) return;\n const details = { ...this.state.annotations.filter(({ id }) => parseInt(id) === parseInt(annotationId))[0] };\n if(!(details.intervals && details.intervals.length > 0)) return;\n if (\n !details.intervals[0].endTime\n ) {\n details.interval = false;\n }\n else {\n details.beginTime = details.intervals[0].beginTime;\n details.endTime = details.intervals[0].endTime;\n details.interval = true;\n }\n this.setState({ open: false, openAnnotationShow: true, details: details, version: this.state.version+1, lastAnnotationPressed: annotationId });\n }\n\n onCloseAnnotationShow = () => {\n this.setState({ open: true, openAnnotationShow: false, openAnnotationEdit: false, version: this.state.version+1 });\n }\n\n onCloseAnnotationEdit = () => {\n this.setState({ open: false, openAnnotationShow: true, openAnnotationEdit: false, version: this.state.version+1 });\n }\n\n render() {\n const { classes, translate } = this.props;\n const { annotations } = this.state;\n let key = 0;\n return <div>\n <SimpleModal open={this.state.open} onClose={this.closeDialog} title={`${translate('containers.annotations.show_all')}`} maxWidth={false}>\n <List>\n {annotations.length !== 0 ? annotations./*filter(note => note.intervals.length>0).*/map((note) => {\n\n return <ListItem key={note.id} button={true} divider onClick={() => { this.pressAnnotation(note.id) }}>\n <ListItemText\n primary={note.text}\n secondary={\n <Fragment>\n <Typography component={'span'} className={classes.inline}>\n {note.intervals[0].endTime ?\n (\n <Fragment>\n <DateField source=\"beginTime\" format='dd/MM/yyyy HH:mm:ss' record={{ beginTime: note.intervals[0].beginTime }} simpleText />\n {' - '}\n <DateField source=\"endTime\" format='dd/MM/yyyy HH:mm:ss' record={{ endTime: note.intervals[0].endTime }} simpleText />\n\n </ Fragment>\n )\n :\n note.intervals.length + ' ' + translate('containers.annotations.observations')\n }\n </Typography>\n\n <Typography component={'span'} className={classes.right} color=\"textSecondary\">\n {note.tags.map(tag => {\n return (\n <span className={classes.tag_root} key={key++}>\n <span className={classes.tag_label} > {tag.name}</span>\n </ span>)\n })}\n </Typography>\n\n </Fragment>\n }\n />\n </ListItem>\n })\n : <span>{translate('ra.navigation.no_results')}</span>}\n </List>\n </SimpleModal>\n\n\n {this.state.openAnnotationShow &&\n <DetailsShow\n open={this.state.openAnnotationShow}\n onClose={this.onCloseAnnotationShow}\n openEdit={() => this.setState({ openAnnotationShow: false, openAnnotationEdit: true, version: this.state.version+1 })}\n record={this.state.details}\n refreshData={this.refreshData}\n key={this.state.version}\n />\n }\n\n {this.state.openAnnotationEdit &&\n <DetailsEdit open={this.state.openAnnotationEdit}\n onClose={this.onCloseAnnotationEdit}\n record={this.state.details}\n refreshData={this.refreshData}\n key={this.state.version}\n />\n }\n </div>\n }\n};\n\nconst mapStateToProps = state => ({\n annotationsAction: state.annotations\n});\n\nconst mapDispatchToProps = dispatch => {\n return ({\n refreshAnnotations: data => dispatch(refreshAnnotations(data)),\n showNotification\n})};\n\nconst enhance = compose(\n withStyles(styles),\n translate,\n connect(mapStateToProps, mapDispatchToProps)\n)\n\nexport default enhance(AnnotationDialog);","import React, { Component } from 'react';\nimport { Control } from 'react-leaflet-control-inesc';\nimport Button from '@material-ui/core/Button';\nimport { ViewList } from '@material-ui/icons';\nimport {\n withStyles,\n} from '@material-ui/core';\n\nimport compose from 'recompose/compose';\n\nimport AnnotationsDialog from './AnnotationsDialog';\n\nvar styles = {\n actionButton: {\n padding: 0,\n minHeight: 0,\n minWidth: 0,\n width: '30px',\n height: '30px'\n }\n }\n\nclass toMap extends Component {\n state = {\n inserted_annotations: 0,\n open: false\n };\n\n insertedAnnotations = () => {\n this.setState({ inserted_annotations: this.state.inserted_annotations + 1 });\n }\n\n closedModal = () => {\n this.setState({ open: false });\n this.props.modalClose();\n }\n\n componentDidUpdate = (oldProps) => {\n const {annotationIdDialog } = this.props;\n \n if(annotationIdDialog && oldProps.annotationIdDialog !== annotationIdDialog) {\n this.setState({ open: true });\n }\n }\n\n render(){\n const { classes,recordId, tagAnnotationDialog, annotationIdDialog } = this.props;\n\n return <div>\n <Control position='topright'>\n <div style={{ backgroundColor: 'white' }}>\n <Button classes={{ root: classes.actionButton }} onClick={() => { this.setState({ open: true }); this.insertedAnnotations(); }}>\n <ViewList style={{ fontSize: '15px', padding: '8px', color: 'black' }} />\n </Button>\n \n <AnnotationsDialog tagAnnotationDialog={tagAnnotationDialog} annotationIdDialog={annotationIdDialog} modalOpen={this.state.open} modalClose={this.closedModal} recordId={recordId} inserted_annotations={this.state.inserted_annotations}/>\n </div>\n </Control>\n </div>\n }\n};\n\nconst enhance = compose(\n withStyles(styles)\n)\n\nexport default enhance(toMap);","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport compose from 'recompose/compose';\nimport classNames from 'classnames';\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport IconButton from '@material-ui/core/IconButton';\nimport MuiTextField from '@material-ui/core/TextField';\nimport { withStyles, createStyles } from '@material-ui/core/styles';\nimport ClearIcon from '@material-ui/icons/Clear';\n\nimport { translate } from 'ra-core';\n\nconst styles = createStyles({\n clearIcon: {\n height: 16,\n width: 0,\n },\n visibleClearIcon: {\n width: 16,\n },\n clearButton: {\n height: 24,\n width: 0,\n },\n visibleClearButton: {\n width: 24,\n },\n});\n\n/**\n * An override of the default Material-UI TextField which is resettable\n */\nclass ResettableTextField extends Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n clearAlwaysVisible: PropTypes.bool,\n InputProps: PropTypes.object,\n onBlur: PropTypes.func,\n onChange: PropTypes.func.isRequired,\n onFocus: PropTypes.func,\n resettable: PropTypes.bool,\n translate: PropTypes.func.isRequired,\n value: PropTypes.any.isRequired,\n };\n\n state = { showClear: false };\n\n handleClickClearButton = event => {\n event.preventDefault();\n this.props.onChange('');\n };\n\n handleMouseDownClearButton = event => {\n event.preventDefault();\n };\n\n handleFocus = event => {\n this.setState({ showClear: true });\n this.props.onFocus && this.props.onFocus(event);\n };\n\n handleBlur = event => {\n this.setState({ showClear: false });\n this.props.onBlur && this.props.onBlur(event);\n };\n\n render() {\n const {\n translate,\n classes,\n clearAlwaysVisible,\n InputProps,\n value,\n resettable,\n ...props\n } = this.props;\n const { showClear } = this.state;\n const {\n clearButton,\n clearIcon,\n visibleClearButton,\n visibleClearIcon,\n ...restClasses\n } = classes;\n\n return (\n <MuiTextField\n classes={restClasses}\n value={value}\n InputProps={{\n endAdornment: resettable && value && (\n <InputAdornment position=\"end\">\n <IconButton\n className={classNames(clearButton, {\n [visibleClearButton]:\n clearAlwaysVisible || showClear,\n })}\n aria-label={translate(\n 'ra.action.clear_input_value'\n )}\n title={translate('ra.action.clear_input_value')}\n disableRipple\n onClick={this.handleClickClearButton}\n onMouseDown={this.handleMouseDownClearButton}\n >\n <ClearIcon\n className={classNames(clearIcon, {\n [visibleClearIcon]:\n clearAlwaysVisible || showClear,\n })}\n />\n </IconButton>\n </InputAdornment>\n ),\n ...InputProps,\n }}\n {...props}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n />\n );\n }\n}\n\nexport default compose(\n translate,\n withStyles(styles)\n)(ResettableTextField);","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport get from 'lodash/get';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport { withStyles, createStyles } from '@material-ui/core/styles';\nimport compose from 'recompose/compose';\nimport { addField, translate, FieldTitle } from 'ra-core';\nimport ResettableTextField from './ResettableTextField';\n\nconst sanitizeRestProps = ({\n addLabel,\n allowEmpty,\n emptyValue,\n basePath,\n choices,\n className,\n component,\n crudGetMatching,\n crudGetOne,\n defaultValue,\n filter,\n filterToQuery,\n formClassName,\n initializeForm,\n input,\n isRequired,\n label,\n locale,\n meta,\n onChange,\n options,\n optionValue,\n optionText,\n disableValue,\n perPage,\n record,\n reference,\n resource,\n setFilter,\n setPagination,\n setSort,\n sort,\n source,\n textAlign,\n translate,\n translateChoice,\n validation,\n ...rest\n}) => rest;\n\nconst styles = theme => createStyles({\n input: {\n minWidth: theme.spacing.unit * 20,\n },\n});\n\n/**\n * An Input component for a select box, using an array of objects for the options\n *\n * Pass possible options as an array of objects in the 'choices' attribute.\n *\n * By default, the options are built from:\n * - the 'id' property as the option value,\n * - the 'name' property an the option text\n * @example\n * const choices = [\n * { id: 'M', name: 'Male' },\n * { id: 'F', name: 'Female' },\n * ];\n * <SelectInput source=\"gender\" choices={choices} />\n *\n * You can also customize the properties to use for the option name and value,\n * thanks to the 'optionText' and 'optionValue' attributes.\n * @example\n * const choices = [\n * { _id: 123, full_name: 'Leo Tolstoi', sex: 'M' },\n * { _id: 456, full_name: 'Jane Austen', sex: 'F' },\n * ];\n * <SelectInput source=\"author_id\" choices={choices} optionText=\"full_name\" optionValue=\"_id\" />\n *\n * `optionText` also accepts a function, so you can shape the option text at will:\n * @example\n * const choices = [\n * { id: 123, first_name: 'Leo', last_name: 'Tolstoi' },\n * { id: 456, first_name: 'Jane', last_name: 'Austen' },\n * ];\n * const optionRenderer = choice => `${choice.first_name} ${choice.last_name}`;\n * <SelectInput source=\"author_id\" choices={choices} optionText={optionRenderer} />\n *\n * `optionText` also accepts a React Element, that will be cloned and receive\n * the related choice as the `record` prop. You can use Field components there.\n * @example\n * const choices = [\n * { id: 123, first_name: 'Leo', last_name: 'Tolstoi' },\n * { id: 456, first_name: 'Jane', last_name: 'Austen' },\n * ];\n * const FullNameField = ({ record }) => <span>{record.first_name} {record.last_name}</span>;\n * <SelectInput source=\"gender\" choices={choices} optionText={<FullNameField />}/>\n *\n * The choices are translated by default, so you can use translation identifiers as choices:\n * @example\n * const choices = [\n * { id: 'M', name: 'myroot.gender.male' },\n * { id: 'F', name: 'myroot.gender.female' },\n * ];\n *\n * However, in some cases (e.g. inside a `<ReferenceInput>`), you may not want\n * the choice to be translated. In that case, set the `translateChoice` prop to false.\n * @example\n * <SelectInput source=\"gender\" choices={choices} translateChoice={false}/>\n *\n * The object passed as `options` props is passed to the material-ui <Select> component\n *\n * You can disable some choices by providing a `disableValue` field which name is `disabled` by default\n * @example\n * const choices = [\n * { id: 123, first_name: 'Leo', last_name: 'Tolstoi' },\n * { id: 456, first_name: 'Jane', last_name: 'Austen' },\n * { id: 976, first_name: 'William', last_name: 'Rinkerd', disabled: true },\n * ];\n *\n * @example\n * const choices = [\n * { id: 123, first_name: 'Leo', last_name: 'Tolstoi' },\n * { id: 456, first_name: 'Jane', last_name: 'Austen' },\n * { id: 976, first_name: 'William', last_name: 'Rinkerd', not_available: true },\n * ];\n * <SelectInput source=\"gender\" choices={choices} disableValue=\"not_available\" />\n *\n */\nexport class SelectInput extends Component {\n /*\n * Using state to bypass a redux-form comparison but which prevents re-rendering\n * @see https://github.com/erikras/redux-form/issues/2456\n */\n state = {\n value: this.props.input.value,\n };\n\n componentWillReceiveProps(nextProps) {\n if (nextProps.input.value !== this.props.input.value) {\n this.setState({ value: nextProps.input.value });\n }\n }\n\n componentDidMount() {\n const { defaultValue } = this.props;\n\n if(defaultValue) {\n this.setState({ defaultValue });\n }\n }\n\n handleChange = eventOrValue => {\n const value = eventOrValue.target\n ? eventOrValue.target.value\n : eventOrValue;\n this.props.input.onChange(value);\n\n // HACK: For some reason, redux-form does not consider this input touched without calling onBlur manually\n this.props.input.onBlur(value);\n this.setState({ value });\n };\n\n addAllowEmpty = choices => {\n if (this.props.allowEmpty) {\n return [<MenuItem value={this.props.emptyValue} key=\"null\" />, ...choices];\n }\n\n return choices;\n };\n renderMenuItemOption = choice => {\n const { optionText, translate, translateChoice } = this.props;\n if (React.isValidElement(optionText))\n return React.cloneElement(optionText, {\n record: choice,\n });\n const choiceName =\n typeof optionText === 'function'\n ? optionText(choice)\n : get(choice, optionText);\n return translateChoice\n ? translate(choiceName, { _: choiceName })\n : choiceName;\n };\n\n renderMenuItem = choice => {\n const { optionValue, disableValue } = this.props;\n return (\n <MenuItem\n key={get(choice, optionValue)}\n value={get(choice, optionValue)}\n disabled={get(choice, disableValue)}\n >\n {this.renderMenuItemOption(choice)}\n </MenuItem>\n );\n };\n\n render() {\n const {\n allowEmpty,\n choices,\n classes,\n className,\n input,\n isRequired,\n label,\n meta,\n options,\n resource,\n source,\n ...rest\n } = this.props;\n if (typeof meta === 'undefined') {\n throw new Error(\n \"The SelectInput component wasn't called within a redux-form <Field>. Did you decorate it and forget to add the addField prop to your component? See https://marmelab.com/react-admin/Inputs.html#writing-your-own-input-component for details.\"\n );\n }\n const { touched, error, helperText = false } = meta;\n\n return (\n <ResettableTextField\n select\n margin=\"normal\"\n value={this.state.value}\n label={\n <FieldTitle\n label={label}\n source={source}\n resource={resource}\n isRequired={isRequired}\n />\n }\n name={input.name}\n className={`${classes.input} ${className}`}\n clearAlwaysVisible\n error={!!(touched && error)}\n helperText={(touched && error) || helperText}\n {...options}\n {...sanitizeRestProps(rest)}\n onChange={this.handleChange}\n >\n {this.addAllowEmpty(choices.map(this.renderMenuItem))}\n </ResettableTextField>\n );\n }\n}\n\nSelectInput.propTypes = {\n allowEmpty: PropTypes.bool.isRequired,\n emptyValue: PropTypes.any,\n choices: PropTypes.arrayOf(PropTypes.object),\n classes: PropTypes.object,\n className: PropTypes.string,\n input: PropTypes.object,\n isRequired: PropTypes.bool,\n label: PropTypes.string,\n meta: PropTypes.object,\n options: PropTypes.object,\n optionText: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.func,\n PropTypes.element,\n ]).isRequired,\n optionValue: PropTypes.string.isRequired,\n disableValue: PropTypes.string,\n resource: PropTypes.string,\n source: PropTypes.string,\n translate: PropTypes.func.isRequired,\n translateChoice: PropTypes.bool,\n};\n\nSelectInput.defaultProps = {\n allowEmpty: false,\n emptyValue: '',\n classes: {},\n choices: [],\n options: {},\n optionText: 'name',\n optionValue: 'id',\n translateChoice: true,\n disableValue: 'disabled',\n};\n\nexport default compose(\n addField,\n translate,\n withStyles(styles)\n)(SelectInput);","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { reset as resetFormAction } from 'redux-form';\nimport compose from 'recompose/compose';\nimport {\n LongTextInput,\n fetchEnd,\n fetchStart,\n ReferenceArrayInput,\n SelectArrayInput,\n ChipField,\n SimpleForm,\n showNotification,\n translate,\n required\n} from 'react-admin';\nimport {\n Dialog, IconButton,\n DialogTitle,\n DialogContent,\n withStyles\n} from '@material-ui/core';\nimport { Close as CloseIcon } from '@material-ui/icons'\nimport PropTypes from 'prop-types';\nimport { dataFetch } from '../../providers';\n\nimport CampaignSelection from './CustomSelectInput';\nimport { DateTimeInput } from '..';\nconst styles = {\n content: { padding: 0 },\n titleDiv: {\n display: 'flex',\n justifyContent: 'space-between'\n },\n closeButton: {\n marginTop: '0.5em',\n marginRight: '0.5em'\n },\n TextField: {\n // maxWidth: \"80%\",\n // display: 'flex',\n // margin: '0 auto'\n }\n};\n\nclass Details extends Component {\n\n constructor(props) {\n super(props);\n\n this.state = {\n campaigns: [],\n valueDefault: 1\n };\n }\n\n handleSave = (record) => {\n const { onClose, showNotification, success } = this.props\n const headers = new Headers({\n Accept: 'application/json',\n \"Content-Type\": \"application/json\"\n });\n\n const { beginTime, campaign, description, tagIds } = record;\n\n const filter = {\n beginTime: beginTime, \n campaignId: campaign,\n description: description,\n tagIds: tagIds\n }\n\n const method = 'POST', url = '/notes';\n \n dataFetch(method, url, headers, JSON.stringify(filter))\n .then(_ => {\n showNotification('resources.notes.success');\n this.props.reset('notes');\n onClose();\n if(success)\n success();\n })\n .catch(err => showNotification('resources.notes.campaignGetError', 'warning'));\n }\n\n componentDidMount() {\n this.props.reset('notes');\n \n const {campaign} = this.props;\n\n if(campaign) {\n this.setState({campaigns: [campaign], valueDefault: campaign.id});\n }\n else {\n const filter = {\n include: {\n relation: 'launches',\n scope: {\n where: {\n endTimestamp: null\n }\n }\n },\n order:['beginDate DESC']\n };\n \n dataFetch(\"GET\", `/campaigns?filter=${JSON.stringify(filter)}`)\n .then(result => {\n let valueDefault;\n result = result.filter(({launches}) => launches.length > 0);\n if(result.length > 0)\n valueDefault = result[0].id;\n\n this.setState({campaigns: result, valueDefault: valueDefault});\n })\n .catch(err => showNotification());\n }\n }\n\n render() {\n const { translate, onClose, open, classes, description, tagIds, campaign } = this.props\n return (<Dialog open={open} fullWidth maxWidth='md' onClose={onClose} >\n <span className={classes.titleDiv}>\n <DialogTitle >\n {translate('resources.notes.title')}\n </DialogTitle>\n\n <IconButton classes={{ root: classes.closeButton }} onClick={() => onClose()}>\n <CloseIcon />\n </IconButton>\n </span>\n <DialogContent onClick={this.handleCLick}>\n <SimpleForm form='notes' save={this.handleSave} resource={'notes'}>\n\n <CampaignSelection \n disabled={campaign ? true : false}\n label={translate('resources.notes.fields.campaign')}\n validate={required()}\n choices={this.state.campaigns} \n optionText=\"name\" \n source='campaign' \n defaultValue={this.state.valueDefault}\n />\n\n <DateTimeInput\n validate={required()}\n source='beginTime'\n label={translate('resources.notes.fields.beginDate')}\n options={{\n format: 'dd/MM/YYYY HH:mm',\n clearable: true\n }}\n dateNow\n />\n\n <LongTextInput multiline rows={5} label={translate('resources.notes.fields.description')} source='description' defaultValue={description || \"\"}/>\n \n <ReferenceArrayInput label={translate('resources.notes.fields.tagIds')} reference='tags' source='tagIds'>\n <Selection selected={tagIds}/>\n </ReferenceArrayInput>\n \n </SimpleForm>\n </DialogContent>\n </Dialog>\n )\n }\n}\nconst Selection = ({ selected, basePath, tagIds, ...props }) => {\n props.input.value = props.input.value === \"\" ? selected : props.input.value;\n \n return <SelectArrayInput {...props}>\n <ChipField source='name' />\n </SelectArrayInput>;\n}\nDetails.propTypes = {\n classes: PropTypes.object.isRequired,\n onClose: PropTypes.func,\n};\n\nconst enhance = compose(\n translate,\n withStyles(styles),\n connect(null, {\n fetchStart,\n fetchEnd,\n showNotification,\n reset: resetFormAction,\n\n })\n);\n\nexport default enhance(Details);","import React, { Component } from 'react';\nimport { Button, withStyles } from '@material-ui/core';\nimport { NoteAdd as NoteAddIcon } from '@material-ui/icons';\nimport { Control } from 'react-leaflet-control-inesc';\nimport Details from './Details';\n\nconst styles = {\n button: {\n padding: 0,\n minHeight: 0,\n minWidth: 0,\n width: '30px',\n height: '30px',\n },\n checkBox: {\n margin: '10px',\n background: \"green\"\n }\n}\n\nclass NodeControl extends Component {\n\n constructor(props) {\n super(props);\n\n this.state = {\n active: false\n };\n }\n\n onClose = () => {\n this.setState({ active: false });\n }\n\n render() {\n const { classes, recordId, refreshData, ...props } = this.props\n const { active } = this.state;\n return (\n <Control position=\"topleft\" className=\"leaflet-control-zoom leaflet-bar leaflet-control\">\n <div style={{ background: 'white' }}>\n <Button\n {...props}\n classes={{ root: classes.button }}\n onClick={() => { this.setState({ active: !active }) }}\n >\n <NoteAddIcon style={{ fontSize: '15px', padding: '8px', color: 'black' }} />\n </Button>\n \n <Details open={active} onClose={this.onClose} recordId={recordId} success={this.success} />\n </div>\n </Control>\n );\n }\n}\n\nexport default withStyles(styles)(NodeControl);","import { LayersControl } from 'react-leaflet'\r\n// https://stackoverflow.com/questions/40906118/is-it-possible-to-add-custom-html-to-leaflet-layer-groups-and-layers-control/40906679\r\n// import L from 'leaflet';\r\n\r\n\r\n// LayersControl.WithSomethingExtra = LayersControl.extend({\r\n// _initLayout: function() {\r\n// LayersControl.prototype._initLayout.call(this);\r\n// L.DomUtil.create('div', 'leaflet-control-layers-separator', this._form);\r\n// var myThing = L.DomUtil.create('div', 'some-extra-thing', this._form);\r\n// myThing.innerHTML = 'My custom thing inside the layers control!!';\r\n// }\r\n// });\r\nexport default class ContextLayersControl extends LayersControl {\r\n\r\n componentDidMount(){\r\n let { map } = this.context;\r\n // const { setAnnotationTag } = this.props;\r\n map.time = 0;\r\n map.on('overlayadd', onOverlayAdd);\r\n function onOverlayAdd(e){\r\n \r\n if(e.layer.feature && e.layer.feature) {\r\n if(!e.layer.feature.properties.multiLine){\r\n e.layer.bringToBack();\r\n }\r\n else {\r\n e.layer.bringToFront();\r\n // e.layer.on('click', (_e) => {\r\n // // const id = e.layer.feature.properties.multiLine;\r\n // // setAnnotationTag(_e.target.feature.properties.multiLineIds);\r\n // console.log(_e.target.feature.properties);\r\n // })\r\n // e.layer.on('hover', (_e) => {\r\n // // const id = e.layer.feature.properties.multiLine;\r\n // // setAnnotationTag(_e.target.feature.properties.multiLineIds);\r\n // console.log(\"hover?\");\r\n // })\r\n }\r\n }\r\n }\r\n\r\n const layer = this.leafletElement.addTo(map);\r\n this.props.sendCtrlLayer(layer);\r\n }\r\n}","import { Layer } from \"leaflet\"\nimport { MapLayer } from \"react-leaflet\"\n\nexport default class Graticule extends MapLayer {\n constructor(props) {\n super(props)\n\n this.updateVariables = this.updateVariables.bind(this)\n\n this.defaultOptions = {\n showLabel: true,\n opacity: 1,\n weight: 0.8,\n color: \"#aaa\",\n font: \"12px Verdana\",\n fontColor: \"#aaa\",\n dashArray: [3, 3],\n // lngLineCurved: 0,\n // latLineCurved: 0,\n zoomInterval: [\n {start: 0, end: 3, interval: 40},\n {start: 4, end: 5, interval: 20},\n {start: 6, end: 7, interval: 5},\n {start: 8, end: 9, interval: 2},\n {start: 10, end: 11, interval: 1},\n {start: 12, end: 13, interval: 1},\n {start: 14, end: 15, interval: 1},\n {start: 16, end: 17, interval: 1},\n {start: 18, end: 19, interval: 1},\n {start: 20, end: 21, interval: 1},\n {start: 22, end: 23, interval: 1},\n ]\n }\n\n this.updateVariables(props)\n\n this.map = null // context.map || props.leaflet.map\n this.canvas = null\n this.currZoom = null\n this.currLatInterval = null\n this.currLngInterval = null\n }\n\n updateVariables(props) {\n this.options = (props && props.options) || this.defaultOptions\n }\n\n createLeafletElement() {\n const _ = this;\n const GraticuleRenderer = Layer.extend({\n\n onAdd: function (map) {\n _.map = map\n\n if (!_.canvas) {\n _.initCanvas()\n }\n\n _.map._panes.overlayPane.appendChild(_.canvas)\n\n _.map.on(\"viewreset\", _.reset, _)\n _.map.on(\"move\", _.reset, _)\n _.map.on(\"moveend\", _.reset, _)\n\n // if (_.map.options.zoomAnimation && L.Browser.any3d) {\n // _.map.on(\"zoomanim\", _.animateZoom, _)\n // }\n\n _.reset()\n },\n\n onRemove: function (map) {\n if (_.map === map) {\n if (_.canvas.parentNode) {\n _.canvas.parentNode.removeChild(_.canvas)\n }\n\n _.canvas = null\n\n _.map.off(\"viewreset\", _.reset, _)\n _.map.off(\"move\", _.reset, _)\n _.map.off(\"moveend\", _.reset, _)\n\n // if (_.map.options.zoomAnimation) {\n // _.map.off(\"zoomanim\", _.animateZoom, _)\n // }\n\n _.map = null\n }\n },\n\n addTo: function (map) {\n map.addLayer(this)\n return this\n }\n })\n return new GraticuleRenderer(this.options)\n }\n\n updateLeafletElement(fromProps, toProps) {\n // console.log(\"in ReactLeafletGraticule.updateLeafletElement\")\n\n this.updateVariables(toProps)\n this.reset()\n }\n\n initCanvas() {\n const canvas = document.createElement(\"canvas\")\n\n // if (this.map.options.zoomAnimation && L.Browser.any3d) {\n canvas.classList.add(\"leaflet-zoom-animated\")\n // }\n // else {\n // canvas.classList.add(\"leaflet-zoom-hide\")\n // }\n\n // this.updateOpacity()\n\n canvas.onSelectStart = function() { return false }\n canvas.onMouseMove = function() { return false }\n canvas.onLoad = this.onCanvasLoad.bind(this)\n\n this.canvas = canvas\n }\n\n onCanvasLoad() {\n this.leafletElement.fire(\"load\")\n }\n\n reset() {\n if(this.map) {\n const size = this.map.getSize()\n const lt = this.map.containerPointToLayerPoint([0, 0])\n \n this.canvas._leaflet_pos = lt\n // if (Browser.any3d) {\n // setTransform(canvas, lt)\n this.canvas.style[\"transform\"] = `translate3d(${lt.x}px,${lt.y}px,0)`\n // }\n // else {\n // this.canvas.style.left = lt.x + \"px\"\n // this.canvas.style.top = lt.y + \"px\"\n // }\n \n this.canvas.width = size.x\n this.canvas.height = size.y\n // this.canvas.style.width = size.x + \"px\"\n // this.canvas.style.height = size.y + \"px\"\n \n this.calcInterval()\n \n this.draw(true) \n }\n }\n\n calcInterval() {\n const zoom = this.map.getZoom()\n // console.log(\"GET ZOOM\", zoom)\n if (zoom !== this.currZoom) {\n this.currLngInterval = null\n this.currLatInterval = null\n this.currZoom = zoom\n }\n\n if (!this.currLngInterval) {\n try {\n for (let idx in this.options.zoomInterval) {\n const dict = this.options.zoomInterval[idx]\n if ((dict.start <= zoom) && (dict.end >= zoom)) {\n this.currLngInterval = dict.interval\n break\n }\n }\n }\n catch (e) {\n this.currLngInterval = 0\n }\n }\n\n if (!this.currLatInterval) {\n try {\n for (let idx in this.options.zoomInterval) {\n const dict = this.options.zoomInterval[idx]\n if ((dict.start <= zoom) && (dict.end >= zoom)) {\n this.currLatInterval = dict.interval\n break\n }\n }\n }\n catch (e) {\n this.currLatInterval = 0\n }\n }\n }\n\n draw(label) {\n if (!this.canvas || !this.map) {\n return\n }\n\n const ctx = this.canvas.getContext(\"2d\")\n\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height)\n ctx.lineWidth = this.options.weight\n ctx.strokeStyle = this.options.color\n ctx.fillStyle = this.options.fontColor\n ctx.setLineDash(this.options.dashArray)\n if (this.options.font) {\n ctx.font = this.options.font\n }\n\n // const txtWidth = ctx.measureText(\"0\").width\n // const txtHeight = 12\n // try {\n // let fontSize = ctx.font.trim().split(\" \")[0]\n // txtHeight = parsePxToInt(fontSize)\n // }\n // catch (e) {\n // }\n\n let lt = this.map.containerPointToLatLng({x: 0, y: 0})\n let rb = this.map.containerPointToLatLng({x: this.canvas.width, y: this.canvas.height})\n\n let pointPerLat = (lt.lat - rb.lat) / (this.canvas.height * 0.2)\n let pointPerLon = (rb.lng - lt.lng) / (this.canvas.width * 0.2)\n if (isNaN(pointPerLat) || isNaN(pointPerLon)) {\n return\n }\n\n if (pointPerLat < 1) {\n pointPerLat = 1\n }\n if (pointPerLon < 1) {\n pointPerLon = 1\n }\n\n if (rb.lat < -90) {\n rb.lat = -90\n }\n else {\n rb.lat = parseInt(rb.lat - pointPerLat, 10)\n }\n\n if (lt.lat > 90) {\n lt.lat = 90\n }\n else {\n lt.lat = parseInt(lt.lat + pointPerLat, 10)\n }\n\n if ((lt.lng > 0) && (rb.lng < 0)) {\n rb.lng += 360\n }\n rb.lng = parseInt(rb.lng + pointPerLon, 10)\n lt.lng = parseInt(lt.lng - pointPerLon, 10)\n\n if (this.currLatInterval) {\n for (let i = this.currLatInterval; i <= lt.lat; i += this.currLatInterval) {\n if (i >= rb.lat) {\n this.drawLatitudeLine(ctx, i, lt.lng, rb.lng, label)\n }\n }\n\n for (let i = 0; i >= rb.lat; i -= this.currLatInterval) {\n if (i <= lt.lat) {\n this.drawLatitudeLine(ctx, i, lt.lng, rb.lng, label)\n }\n }\n }\n\n if (this.currLngInterval) {\n for (let i = this.currLngInterval; i <= rb.lng; i += this.currLngInterval) {\n if (i >= lt.lng) {\n \n this.drawLongitudeLine(ctx, i, lt.lat, rb.lat, label)\n }\n }\n\n for (let i = 0; i >= lt.lng; i -= this.currLngInterval) {\n if (i <= rb.lng) {\n this.drawLongitudeLine(ctx, i, lt.lat, rb.lat, label)\n }\n }\n }\n }\n\n drawLatitudeLine(ctx, tick, lngLeft, lngRight, label) {\n const leftEnd = this.latLngToCanvasPoint({lat: tick, lng: lngLeft})\n const str = this.formatLatitude(tick)\n const txtWidth = ctx.measureText(str).width\n const txtHeight = 12\n\n // if (curvedLat) {\n // ...\n // }\n // else {\n const rightEnd = this.latLngToCanvasPoint({lat: tick, lng: lngRight})\n // if (curvedLon) {\n // ...\n // }\n\n ctx.beginPath()\n ctx.moveTo(leftEnd.x + 1, leftEnd.y)\n ctx.lineTo(rightEnd.x - 1, rightEnd.y)\n ctx.stroke()\n\n if (this.options.showLabel && label) {\n const yBaseline = leftEnd.y + (txtHeight / 2) - 2\n ctx.fillText(str, 0, yBaseline)\n ctx.fillText(str, this.canvas.width - txtWidth, yBaseline)\n }\n // }\n }\n\n drawLongitudeLine(ctx, tick, latTop, latBottom, label) {\n const bottomEnd = this.latLngToCanvasPoint({lat: latBottom, lng: tick})\n const str = this.formatLongitude(tick)\n const txtWidth = ctx.measureText(str).width\n const txtHeight = 12\n\n // if (curvedLat) {\n // ...\n // }\n // else {\n const topEnd = this.latLngToCanvasPoint({lat: latTop, lng: tick})\n // console.log(`topEnd = ${JSON.stringify(topEnd)}`)\n\n // if (curvedLon) {\n // ...\n // }\n\n ctx.beginPath()\n ctx.moveTo(topEnd.x, topEnd.y + 1)\n ctx.lineTo(bottomEnd.x, bottomEnd.y - 1)\n ctx.stroke()\n\n if (this.options.showLabel && label) {\n ctx.fillText(str, topEnd.x - (txtWidth / 2), txtHeight + 1)\n ctx.fillText(str, bottomEnd.x - (txtWidth / 2), this.canvas.height - 3)\n }\n // }\n }\n\n latLngToCanvasPoint(latLng) {\n let projectedPoint = this.map.project(latLng)\n projectedPoint._subtract(this.map.getPixelOrigin())\n projectedPoint._add(this.map._getMapPanePos())\n return projectedPoint\n }\n\n formatLatitude(value) {\n // if (this.options.latFormatTickLabel) {\n // return this.options.latFormatTickLabel(value)\n // }\n\n if (value < 0) {\n return `${value * -1}S`\n }\n else if (value > 0) {\n return `${value}N`\n }\n\n return `${value}`\n }\n\n formatLongitude(value) {\n // if (this.options.lngFormatTickLabel) {\n // return this.options.lngFormatTickLabel(value)\n // }\n\n if (value < -180) {\n return `${value + 360}W`\n }\n else if (value === -180) {\n return \"180\"\n }\n else if ((value < 0) && (value > -180)) {\n return `${value * -1}W`\n }\n else if ((value > 0) && (value < 180)) {\n return `${value}E`\n }\n else if (value > 180) {\n return `${360 - value}W`\n }\n\n return `${value}`\n }\n}\n","import L from 'leaflet';\r\n\r\nL.KML = L.FeatureGroup.extend({\r\n\toptions: {\r\n\t\tasync: true\r\n\t},\r\n\r\n\tinitialize: function (kml, options) {\r\n\t\tL.Util.setOptions(this, options);\r\n\t\tthis._kml = kml;\r\n\t\tthis._layers = {};\r\n\r\n\t\tif (kml) {\r\n\t\t\tthis.addKML(kml, options, this.options.async);\r\n\t\t}\r\n\t},\r\n\r\n\tloadXML: function (url, cb, options, async) {\r\n\t\tif (async === undefined) async = this.options.async;\r\n\t\tif (options === undefined) options = this.options;\r\n\r\n\t\tvar req = new window.XMLHttpRequest();\r\n\t\t\r\n\t\t// Check for IE8 and IE9 Fix Cors for those browsers\r\n\t\tif (req.withCredentials === undefined && typeof window.XDomainRequest !== 'undefined') {\r\n\t\t\tvar xdr = new window.XDomainRequest();\r\n\t\t\txdr.open('GET', url, async);\r\n\t\t\txdr.onprogress = function () { };\r\n\t\t\txdr.ontimeout = function () { };\r\n\t\t\txdr.onerror = function () { };\r\n\t\t\txdr.onload = function () {\r\n\t\t\t\tif (xdr.responseText) {\r\n\t\t\t\t\tvar xml = new window.ActiveXObject('Microsoft.XMLDOM');\r\n\t\t\t\t\txml.loadXML(xdr.responseText);\r\n\t\t\t\t\tcb(xml, options);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t\tsetTimeout(function () { xdr.send(); }, 0);\r\n\t\t} else {\r\n\t\t\treq.open('GET', url, async);\r\n\t\t\treq.setRequestHeader('Accept', 'application/vnd.google-earth.kml+xml');\r\n\t\t\ttry {\r\n\t\t\t\treq.overrideMimeType('text/xml'); // unsupported by IE\r\n\t\t\t} catch (e) { }\r\n\t\t\treq.onreadystatechange = function () {\r\n\t\t\t\tif (req.readyState !== 4) return;\r\n\t\t\t\tif (req.status === 200) cb(req.responseXML, options);\r\n\t\t\t};\r\n\t\t\treq.send(null);\r\n\t\t}\r\n\t},\r\n\r\n\taddKML: function (url, options, async) {\r\n\t\tvar _this = this;\r\n\t\tvar cb = function (kml) { _this._addKML(kml); };\r\n\t\tthis.loadXML(url, cb, options, async);\r\n\t},\r\n\r\n\t_addKML: function (xml) {\r\n\t\tvar layers = L.KML.parseKML(xml);\r\n\t\tif (!layers || !layers.length) return;\r\n\t\tfor (var i = 0; i < layers.length; i++) {\r\n\t\t\tthis.fire('addlayer', {\r\n\t\t\t\tlayer: layers[i]\r\n\t\t\t});\r\n\t\t\tthis.addLayer(layers[i]);\r\n\t\t}\r\n\t\tthis.latLngs = L.KML.getLatLngs(xml);\r\n\t\tthis.fire('loaded');\r\n\t},\r\n\r\n\tlatLngs: []\r\n});\r\n\r\nL.Util.extend(L.KML, {\r\n\r\n\tparseKML: function (xml) {\r\n\t\tvar style = this.parseStyles(xml);\r\n\t\tthis.parseStyleMap(xml, style);\r\n\t\tvar el = xml.getElementsByTagName('Folder');\r\n\t\tvar layers = [], l;\r\n\t\tfor (var i = 0; i < el.length; i++) {\r\n\t\t\tif (!this._check_folder(el[i])) { continue; }\r\n\t\t\tl = this.parseFolder(el[i], style);\r\n\t\t\tif (l) { layers.push(l); }\r\n\t\t}\r\n\t\tel = xml.getElementsByTagName('Placemark');\r\n\t\tfor (var j = 0; j < el.length; j++) {\r\n\t\t\tif (!this._check_folder(el[j])) { continue; }\r\n\t\t\tl = this.parsePlacemark(el[j], xml, style);\r\n\t\t\tif (l) { layers.push(l); }\r\n\t\t}\r\n\t\tel = xml.getElementsByTagName('GroundOverlay');\r\n\t\tfor (var k = 0; k < el.length; k++) {\r\n\t\t\tl = this.parseGroundOverlay(el[k]);\r\n\t\t\tif (l) { layers.push(l); }\r\n\t\t}\r\n\t\treturn layers;\r\n\t},\r\n\r\n\t// Return false if e's first parent Folder is not [folder]\r\n\t// - returns true if no parent Folders\r\n\t_check_folder: function (e, folder) {\r\n\t\te = e.parentNode;\r\n\t\twhile (e && e.tagName !== 'Folder')\r\n\t\t{\r\n\t\t\te = e.parentNode;\r\n\t\t}\r\n\t\treturn !e || e === folder;\r\n\t},\r\n\r\n\tparseStyles: function (xml) {\r\n\t\tvar styles = {};\r\n\t\tvar sl = xml.getElementsByTagName('Style');\r\n\t\tfor (var i=0, len=sl.length; i<len; i++) {\r\n\t\t\tvar style = this.parseStyle(sl[i]);\r\n\t\t\tif (style) {\r\n\t\t\t\tvar styleName = '#' + style.id;\r\n\t\t\t\tstyles[styleName] = style;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn styles;\r\n\t},\r\n\r\n\tparseStyle: function (xml) {\r\n\t\tvar style = {}, poptions = {}, ioptions = {}, el, id;\r\n\r\n\t\tvar attributes = {color: true, width: true, Icon: true, href: true, hotSpot: true};\r\n\r\n\t\tfunction _parse (xml) {\r\n\t\t\tvar options = {};\r\n\t\t\tfor (var i = 0; i < xml.childNodes.length; i++) {\r\n\t\t\t\tvar e = xml.childNodes[i];\r\n\t\t\t\tvar key = e.tagName;\r\n\t\t\t\tif (!attributes[key]) { continue; }\r\n\t\t\t\tif (key === 'hotSpot')\r\n\t\t\t\t{\r\n\t\t\t\t\tfor (var j = 0; j < e.attributes.length; j++) {\r\n\t\t\t\t\t\toptions[e.attributes[j].name] = e.attributes[j].nodeValue;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar value = e.childNodes[0].nodeValue;\r\n\t\t\t\t\tif (key === 'color') {\r\n\t\t\t\t\t\toptions.opacity = parseInt(value.substring(0, 2), 16) / 255.0;\r\n\t\t\t\t\t\toptions.color = '#' + value.substring(6, 8) + value.substring(4, 6) + value.substring(2, 4);\r\n\t\t\t\t\t} else if (key === 'width') {\r\n\t\t\t\t\t\toptions.weight = value;\r\n\t\t\t\t\t} else if (key === 'Icon') {\r\n\t\t\t\t\t\tioptions = _parse(e);\r\n\t\t\t\t\t\tif (ioptions.href) { options.href = ioptions.href; }\r\n\t\t\t\t\t} else if (key === 'href') {\r\n\t\t\t\t\t\toptions.href = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn options;\r\n\t\t}\r\n\r\n\t\tel = xml.getElementsByTagName('LineStyle');\r\n\t\tif (el && el[0]) { style = _parse(el[0]); }\r\n\t\tel = xml.getElementsByTagName('PolyStyle');\r\n\t\tif (el && el[0]) { poptions = _parse(el[0]); }\r\n\t\tif (poptions.color) { style.fillColor = poptions.color; }\r\n\t\tif (poptions.opacity) { style.fillOpacity = poptions.opacity; }\r\n\t\tel = xml.getElementsByTagName('IconStyle');\r\n\t\tif (el && el[0]) { ioptions = _parse(el[0]); }\r\n\t\tif (ioptions.href) {\r\n\t\t\tstyle.icon = new L.KMLIcon({\r\n\t\t\t\ticonUrl: ioptions.href,\r\n\t\t\t\tshadowUrl: null,\r\n\t\t\t\tanchorRef: {x: ioptions.x, y: ioptions.y},\r\n\t\t\t\tanchorType:\t{x: ioptions.xunits, y: ioptions.yunits}\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t\tid = xml.getAttribute('id');\r\n\t\tif (id && style) {\r\n\t\t\tstyle.id = id;\r\n\t\t}\r\n\t\t\r\n\t\treturn style;\r\n\t},\r\n\t\r\n\tparseStyleMap: function (xml, existingStyles) {\r\n\t\tvar sl = xml.getElementsByTagName('StyleMap');\r\n\t\t\r\n\t\tfor (var i = 0; i < sl.length; i++) {\r\n\t\t\tvar e = sl[i], el;\r\n\t\t\tvar smKey, smStyleUrl;\r\n\t\t\t\r\n\t\t\tel = e.getElementsByTagName('key');\r\n\t\t\tif (el && el[0]) { smKey = el[0].textContent; }\r\n\t\t\tel = e.getElementsByTagName('styleUrl');\r\n\t\t\tif (el && el[0]) { smStyleUrl = el[0].textContent; }\r\n\t\t\t\r\n\t\t\tif (smKey === 'normal')\r\n\t\t\t{\r\n\t\t\t\texistingStyles['#' + e.getAttribute('id')] = existingStyles[smStyleUrl];\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn;\r\n\t},\r\n\r\n\tparseFolder: function (xml, style) {\r\n\t\tvar el, layers = [], l;\r\n\t\tel = xml.getElementsByTagName('Folder');\r\n\t\tfor (var i = 0; i < el.length; i++) {\r\n\t\t\tif (!this._check_folder(el[i], xml)) { continue; }\r\n\t\t\tl = this.parseFolder(el[i], style);\r\n\t\t\tif (l) { layers.push(l); }\r\n\t\t}\r\n\t\tel = xml.getElementsByTagName('Placemark');\r\n\t\tfor (var j = 0; j < el.length; j++) {\r\n\t\t\tif (!this._check_folder(el[j], xml)) { continue; }\r\n\t\t\tl = this.parsePlacemark(el[j], xml, style);\r\n\t\t\tif (l) { layers.push(l); }\r\n\t\t}\r\n\t\tel = xml.getElementsByTagName('GroundOverlay');\r\n\t\tfor (var k = 0; k < el.length; k++) {\r\n\t\t\tif (!this._check_folder(el[k], xml)) { continue; }\r\n\t\t\tl = this.parseGroundOverlay(el[k]);\r\n\t\t\tif (l) { layers.push(l); }\r\n\t\t}\r\n\t\tif (!layers.length) { return; }\r\n\t\tif (layers.length === 1) { return layers[0]; }\r\n\t\treturn new L.FeatureGroup(layers);\r\n\t},\r\n\r\n\tparsePlacemark: function (place, xml, style, options) {\r\n\t\tvar h, i, j, k, el, il, opts = options || {};\r\n\r\n\t\tel = place.getElementsByTagName('styleUrl');\r\n\t\tfor (i = 0; i < el.length; i++) {\r\n\t\t\tvar url = el[i].childNodes[0].nodeValue;\r\n\t\t\tfor (var a in style[url]) {\r\n\t\t\t\topts[a] = style[url][a];\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\til = place.getElementsByTagName('Style')[0];\r\n\t\tif (il) {\r\n\t\t\tvar inlineStyle = this.parseStyle(place);\r\n\t\t\tif (inlineStyle) {\r\n\t\t\t\tfor (k in inlineStyle) {\r\n\t\t\t\t\topts[k] = inlineStyle[k];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar multi = ['MultiGeometry', 'MultiTrack', 'gx:MultiTrack'];\r\n\t\tfor (h in multi) {\r\n\t\t\tel = place.getElementsByTagName(multi[h]);\r\n\t\t\tfor (i = 0; i < el.length; i++) {\r\n\t\t\t\treturn this.parsePlacemark(el[i], xml, style, opts);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tvar layers = [];\r\n\r\n\t\tvar parse = ['LineString', 'Polygon', 'Point', 'Track', 'gx:Track'];\r\n\t\tfor (j in parse) {\r\n\t\t\tvar tag = parse[j];\r\n\t\t\tel = place.getElementsByTagName(tag);\r\n\t\t\tfor (i = 0; i < el.length; i++) {\r\n\t\t\t\tvar l = this['parse' + tag.replace(/gx:/, '')](el[i], xml, opts);\r\n\t\t\t\tif (l) { layers.push(l); }\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!layers.length) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tvar layer = layers[0];\r\n\t\tif (layers.length > 1) {\r\n\t\t\tlayer = new L.FeatureGroup(layers);\r\n\t\t}\r\n\r\n\t\tvar name, descr = '';\r\n\t\tel = place.getElementsByTagName('name');\r\n\t\tif (el.length && el[0].childNodes.length) {\r\n\t\t\tname = el[0].childNodes[0].nodeValue;\r\n\t\t}\r\n\t\tel = place.getElementsByTagName('description');\r\n\t\tfor (i = 0; i < el.length; i++) {\r\n\t\t\tfor (j = 0; j < el[i].childNodes.length; j++) {\r\n\t\t\t\tdescr = descr + el[i].childNodes[j].nodeValue;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (name) {\r\n\t\t\tlayer.on('add', function () {\r\n\t\t\t\tlayer.bindPopup('<h2>' + name + '</h2>' + descr);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn layer;\r\n\t},\r\n\r\n\tparseCoords: function (xml) {\r\n\t\tvar el = xml.getElementsByTagName('coordinates');\r\n\t\treturn this._read_coords(el[0]);\r\n\t},\r\n\r\n\tparseLineString: function (line, xml, options) {\r\n\t\tvar coords = this.parseCoords(line);\r\n\t\tif (!coords.length) { return; }\r\n\t\treturn new L.Polyline(coords, options);\r\n\t},\r\n\r\n\tparseTrack: function (line, xml, options) {\r\n\t\tvar el = xml.getElementsByTagName('gx:coord');\r\n\t\tif (el.length === 0) { el = xml.getElementsByTagName('coord'); }\r\n\t\tvar coords = [];\r\n\t\tfor (var j = 0; j < el.length; j++) {\r\n\t\t\tcoords = coords.concat(this._read_gxcoords(el[j]));\r\n\t\t}\r\n\t\tif (!coords.length) { return; }\r\n\t\treturn new L.Polyline(coords, options);\r\n\t},\r\n\r\n\tparsePoint: function (line, xml, options) {\r\n\t\tvar el = line.getElementsByTagName('coordinates');\r\n\t\tif (!el.length) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tvar ll = el[0].childNodes[0].nodeValue.split(',');\r\n\t\treturn new L.KMLMarker(new L.LatLng(ll[1], ll[0]), options);\r\n\t},\r\n\r\n\tparsePolygon: function (line, xml, options) {\r\n\t\tvar el, polys = [], inner = [], i, coords;\r\n\t\tel = line.getElementsByTagName('outerBoundaryIs');\r\n\t\tfor (i = 0; i < el.length; i++) {\r\n\t\t\tcoords = this.parseCoords(el[i]);\r\n\t\t\tif (coords) {\r\n\t\t\t\tpolys.push(coords);\r\n\t\t\t}\r\n\t\t}\r\n\t\tel = line.getElementsByTagName('innerBoundaryIs');\r\n\t\tfor (i = 0; i < el.length; i++) {\r\n\t\t\tcoords = this.parseCoords(el[i]);\r\n\t\t\tif (coords) {\r\n\t\t\t\tinner.push(coords);\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (!polys.length) {\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (options.fillColor) {\r\n\t\t\toptions.fill = true;\r\n\t\t}\r\n\t\tif (polys.length === 1) {\r\n\t\t\treturn new L.Polygon(polys.concat(inner), options);\r\n\t\t}\r\n\t\treturn new L.MultiPolygon(polys, options);\r\n\t},\r\n\r\n\tgetLatLngs: function (xml) {\r\n\t\tvar el = xml.getElementsByTagName('coordinates');\r\n\t\tvar coords = [];\r\n\t\tfor (var j = 0; j < el.length; j++) {\r\n\t\t\t// text might span many childNodes\r\n\t\t\tcoords = coords.concat(this._read_coords(el[j]));\r\n\t\t}\r\n\t\treturn coords;\r\n\t},\r\n\r\n\t_read_coords: function (el) {\r\n\t\tvar text = '', coords = [], i;\r\n\t\tfor (i = 0; i < el.childNodes.length; i++) {\r\n\t\t\ttext = text + el.childNodes[i].nodeValue;\r\n\t\t}\r\n\t\ttext = text.split(/[\\s\\n]+/);\r\n\t\tfor (i = 0; i < text.length; i++) {\r\n\t\t\tvar ll = text[i].split(',');\r\n\t\t\tif (ll.length < 2) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tcoords.push(new L.LatLng(ll[1], ll[0]));\r\n\t\t}\r\n\t\treturn coords;\r\n\t},\r\n\r\n\t_read_gxcoords: function (el) {\r\n\t\tvar text = '', coords = [];\r\n\t\ttext = el.firstChild.nodeValue.split(' ');\r\n\t\tcoords.push(new L.LatLng(text[1], text[0]));\r\n\t\treturn coords;\r\n\t},\r\n\r\n\tparseGroundOverlay: function (xml) {\r\n\t\tvar latlonbox = xml.getElementsByTagName('LatLonBox')[0];\r\n\t\tvar bounds = new L.LatLngBounds(\r\n\t\t\t[\r\n\t\t\t\tlatlonbox.getElementsByTagName('south')[0].childNodes[0].nodeValue,\r\n\t\t\t\tlatlonbox.getElementsByTagName('west')[0].childNodes[0].nodeValue\r\n\t\t\t],\r\n\t\t\t[\r\n\t\t\t\tlatlonbox.getElementsByTagName('north')[0].childNodes[0].nodeValue,\r\n\t\t\t\tlatlonbox.getElementsByTagName('east')[0].childNodes[0].nodeValue\r\n\t\t\t]\r\n\t\t);\r\n\t\tvar attributes = {Icon: true, href: true, color: true};\r\n\t\tfunction _parse (xml) {\r\n\t\t\tvar options = {}, ioptions = {};\r\n\t\t\tfor (var i = 0; i < xml.childNodes.length; i++) {\r\n\t\t\t\tvar e = xml.childNodes[i];\r\n\t\t\t\tvar key = e.tagName;\r\n\t\t\t\tif (!attributes[key]) { continue; }\r\n\t\t\t\tvar value = e.childNodes[0].nodeValue;\r\n\t\t\t\tif (key === 'Icon') {\r\n\t\t\t\t\tioptions = _parse(e);\r\n\t\t\t\t\tif (ioptions.href) { options.href = ioptions.href; }\r\n\t\t\t\t} else if (key === 'href') {\r\n\t\t\t\t\toptions.href = value;\r\n\t\t\t\t} else if (key === 'color') {\r\n\t\t\t\t\toptions.opacity = parseInt(value.substring(0, 2), 16) / 255.0;\r\n\t\t\t\t\toptions.color = '#' + value.substring(6, 8) + value.substring(4, 6) + value.substring(2, 4);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn options;\r\n\t\t}\r\n\t\tvar options = {};\r\n\t\toptions = _parse(xml);\r\n\t\tif (latlonbox.getElementsByTagName('rotation')[0] !== undefined) {\r\n\t\t\tvar rotation = latlonbox.getElementsByTagName('rotation')[0].childNodes[0].nodeValue;\r\n\t\t\toptions.rotation = parseFloat(rotation);\r\n\t\t}\r\n\t\treturn new L.RotatedImageOverlay(options.href, bounds, {opacity: options.opacity, angle: options.rotation});\r\n\t}\r\n\r\n});\r\n\r\nL.KMLIcon = L.Icon.extend({\r\n\t_setIconStyles: function (img, name) {\r\n\t\tL.Icon.prototype._setIconStyles.apply(this, [img, name]);\r\n\t\tvar options = this.options;\r\n\t\tthis.options.popupAnchor = [0,(-0.83*img.height)];\r\n\t\tif (options.anchorType.x === 'fraction')\r\n\t\t\timg.style.marginLeft = (-options.anchorRef.x * img.width) + 'px';\r\n\t\tif (options.anchorType.y === 'fraction')\r\n\t\t\timg.style.marginTop = ((-(1 - options.anchorRef.y) * img.height) + 1) + 'px';\r\n\t\tif (options.anchorType.x === 'pixels')\r\n\t\t\timg.style.marginLeft = (-options.anchorRef.x) + 'px';\r\n\t\tif (options.anchorType.y === 'pixels')\r\n\t\t\timg.style.marginTop = (options.anchorRef.y - img.height + 1) + 'px';\r\n\t}\r\n});\r\n\r\n\r\nL.KMLMarker = L.Marker.extend({\r\n\toptions: {\r\n\t\ticon: new L.KMLIcon.Default()\r\n\t}\r\n});\r\n\r\n// Inspired by https://github.com/bbecquet/Leaflet.PolylineDecorator/tree/master/src\r\nL.RotatedImageOverlay = L.ImageOverlay.extend({\r\n\toptions: {\r\n\t\tangle: 0\r\n\t},\r\n\t_reset: function () {\r\n\t\tL.ImageOverlay.prototype._reset.call(this);\r\n\t\tthis._rotate();\r\n\t},\r\n\t_animateZoom: function (e) {\r\n\t\tL.ImageOverlay.prototype._animateZoom.call(this, e);\r\n\t\tthis._rotate();\r\n\t},\r\n\t_rotate: function () {\r\n if (L.DomUtil.TRANSFORM) {\r\n // use the CSS transform rule if available\r\n this._image.style[L.DomUtil.TRANSFORM] += ' rotate(' + this.options.angle + 'deg)';\r\n } else if (L.Browser.ie) {\r\n // fallback for IE6, IE7, IE8\r\n var rad = this.options.angle * (Math.PI / 180),\r\n costheta = Math.cos(rad),\r\n sintheta = Math.sin(rad);\r\n this._image.style.filter += ' progid:DXImageTransform.Microsoft.Matrix(sizingMethod=\\'auto expand\\', M11=' + \r\n costheta + ', M12=' + (-sintheta) + ', M21=' + sintheta + ', M22=' + costheta + ')'; \r\n }\r\n\t},\r\n\tgetBounds: function () {\r\n\t\treturn this._bounds;\r\n\t}\r\n});","import { FeatureGroup } from 'react-leaflet';\r\nimport L from 'leaflet';\r\nimport './KML.js';\r\n\r\nexport default class KMLControl extends FeatureGroup {\r\n\r\n createLeafletElement( {data} ){\r\n const { map } = this.context;\r\n const track = new L.KML(data, {async: true});\r\n track.on(\"loaded\", function(e) {\r\n\t\t\tmap.fitBounds(e.target.getBounds());\r\n });\r\n map.addLayer(track);\r\n\r\n return track;\r\n }\r\n \r\n}","\r\nimport React, { Component } from 'react';\r\nimport ReactDOMServer from 'react-dom/server'\r\nimport {\r\n ImageOverlay,\r\n Map,\r\n ScaleControl,\r\n TileLayer,\r\n WMSTileLayer\r\n} from 'react-leaflet';\r\n// Add link to the Leaflet Stylesheet in index.html to see MobMeasure Markers\r\n// import 'leaflet/dist/leaflet.css';\r\nimport L from 'leaflet';\r\n\r\nimport { KEY_BING, KEY_GOOGLE, URL } from '../../Configuration';\r\nimport { BingLayer } from 'react-leaflet-bing';\r\nimport { GoogleLayer } from 'react-leaflet-google';\r\n\r\nimport MobMeasureControl from 'leaflet-mobmeasure';\r\nimport PathLayer from './PathLayer';\r\nimport CenterControl from './CenterControl';\r\nimport LocationControl from './LocationControl';\r\nimport { AnnotationControl } from '../annotations';\r\nimport AnnotationsDialog from '../../resources/derivedDatasets/annotations/DialogFromMap';\r\nimport { Parameters } from '../parameters';\r\nimport { NoteControl } from '../notes';\r\nimport MeasureIcon from '@material-ui/icons/Straighten';\r\nimport ContextLayersControl from './ContextLayersControl';\r\nimport { storage } from 'react-admin-loopback';\r\nimport Graticule from './Graticule';\r\n\r\n\r\nimport KMLControl from '../../plugins/react-leaflet-kml';\r\n\r\nconst { BaseLayer, Overlay } = ContextLayersControl;\r\n\r\nclass LeafletMap extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n map: null,\r\n // openAnnotationDialogByTag: false,\r\n tagAnnotationDialog: undefined,\r\n annotationIdDialog: undefined\r\n };\r\n\r\n this.openPopupMarker = this.openPopupMarker.bind(this);\r\n this.resetAnnotationTag = this.resetAnnotationTag.bind(this);\r\n this.setAnnotationTag = this.setAnnotationTag.bind(this);\r\n this.openAnnotation = this.openAnnotation.bind(this);\r\n this.closeAnnotation = this.closeAnnotation.bind(this);\r\n }\r\n \r\n resetAnnotationTag = () => {\r\n this.setState({tagAnnotationDialog: undefined})\r\n }\r\n \r\n setAnnotationTag = (tagId) => {\r\n this.setState({tagAnnotationDialog: tagId})\r\n }\r\n \r\n openAnnotation = (id) => {\r\n this.setState({annotationIdDialog: id})\r\n }\r\n \r\n closeAnnotation = () => {\r\n this.setState({annotationIdDialog: undefined})\r\n }\r\n \r\n componentDidMount() {\r\n this.setState({ map: this.refs.map.leafletElement });\r\n }\r\n\r\n openPopupMarker(wavy) {\r\n const { map } = this.state;\r\n if(map)\r\n map.eachLayer((layer) => {\r\n if(layer instanceof L.Marker && layer.options && layer.options.id === wavy)\r\n layer.openPopup();\r\n })\r\n }\r\n\r\n render () {\r\n const { children, currentLocation, annotation, parameters, note, refreshData, recordId, viewport, overlays, campaignOverlays = [] } = this.props;\r\n const { map, tagAnnotationDialog, annotationIdDialog } = this.state;\r\n\r\n const mobmeasureOptions = {\r\n lineColor: 'red',\r\n \r\n formatOutput: (distance, azimuth) => {\r\n let result = distance.toFixed(2) + ' m<br>' + (distance / 1852).toFixed(2) + ' M <br>' + azimuth.toFixed(2) + 'º'\r\n \r\n return result;\r\n },\r\n innerHtml: ReactDOMServer.renderToStaticMarkup(<div style={{display: 'flex', alignItems: 'center', justifyContent: 'center', height: '100%'}}>\r\n <MeasureIcon style={{\r\n transform: 'rotate(-45deg)',\r\n fontSize: '14px'\r\n }}/>\r\n </div>)\r\n };\r\n\r\n return (\r\n <Map ref='map' style={{ flex: 'auto' }} viewport={viewport}>\r\n <ContextLayersControl setAnnotationTag={this.setAnnotationTag} position=\"topright\" sendCtrlLayer={(layer)=>this.props.sendCtrlLayer && this.props.sendCtrlLayer(layer)}>\r\n <BaseLayer name='Google Maps Roads'>\r\n <GoogleLayer googlekey={KEY_GOOGLE} maptype={'ROADMAP'} maxNativeZoom={19} maxZoom={23} minZoom={3} />\r\n </BaseLayer>\r\n <BaseLayer name=\"Bing (Hybrid)\">\r\n <BingLayer bingkey={KEY_BING} type=\"AerialWithLabels\" maxNativeZoom={19} maxZoom={23} minZoom={3} />\r\n </BaseLayer>\r\n <BaseLayer name=\"Open Street Map\" opacity={1} checked>\r\n <TileLayer\r\n attribution=\"© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors\"\r\n url=\"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\"\r\n maxNativeZoom={19}\r\n maxZoom={23}\r\n minZoom={3}\r\n />\r\n </BaseLayer>\r\n \r\n\r\n <Overlay checked={true} name='Grid'>\r\n <Graticule checked={true} name='Grid' />\r\n </Overlay>\r\n\r\n {overlays ? overlays.map((layer) => {\r\n return <Overlay name={layer.wavy.name} key={`overlay-${layer.wavy.id}`} checked>\r\n <PathLayer layer={layer} />\r\n </Overlay>\r\n }): null}\r\n\r\n {\r\n campaignOverlays.map((campaignOverlay)=> (\r\n campaignOverlay.remote ? (\r\n (campaignOverlay.overlayType === \"wms\" &&\r\n <Overlay name={campaignOverlay.name} key={campaignOverlay.id} checked>\r\n <WMSTileLayer\r\n url={campaignOverlay.filePath}\r\n layers={campaignOverlay.layers}\r\n format=\"image/png\"\r\n transparent={true}\r\n opacity={campaignOverlay.opacity && parseFloat(campaignOverlay.opacity)}\r\n />\r\n </Overlay>) ||\r\n (campaignOverlay.overlayType === \"image\" &&\r\n <Overlay name={campaignOverlay.name} key={campaignOverlay.id} checked>\r\n <ImageOverlay \r\n url={campaignOverlay.filePath} \r\n bounds={[\r\n [campaignOverlay.northEast.lat, campaignOverlay.northEast.lng], \r\n [campaignOverlay.southWest.lat, campaignOverlay.southWest.lng]\r\n ]}\r\n opacity={campaignOverlay.opacity && parseFloat(campaignOverlay.opacity)}\r\n />\r\n </Overlay>) ||\r\n (campaignOverlay.overlayType === \"kml\" &&\r\n <Overlay name={campaignOverlay.name} key={campaignOverlay.id} checked>\r\n <KMLControl data={campaignOverlay.filePath} />\r\n </Overlay>)\r\n ) :\r\n (campaignOverlay.overlayType.includes('image')?\r\n <Overlay name={campaignOverlay.name} key={campaignOverlay.id} checked>\r\n <ImageOverlay \r\n url={`${URL}${campaignOverlay.filePath}?access_token=${storage.load('lbtoken').id}`} \r\n bounds={[\r\n [campaignOverlay.northEast.lat, campaignOverlay.northEast.lng], \r\n [campaignOverlay.southWest.lat, campaignOverlay.southWest.lng]\r\n ]}\r\n opacity={campaignOverlay.opacity && parseFloat(campaignOverlay.opacity)}\r\n />\r\n </Overlay>\r\n : \r\n <Overlay name={campaignOverlay.name} key={campaignOverlay.id} checked>\r\n <KMLControl data={`${URL}${campaignOverlay.filePath}?access_token=${storage.load('lbtoken').id}`}/>\r\n </Overlay>\r\n )\r\n ))\r\n }\r\n </ContextLayersControl>\r\n <ScaleControl />\r\n <CenterControl map={map} />\r\n {currentLocation && <LocationControl map={map} />}\r\n { annotation && <AnnotationControl map={map} recordId={recordId} refreshData={refreshData}/> }\r\n { annotation && <AnnotationsDialog annotationIdDialog={annotationIdDialog} tagAnnotationDialog={tagAnnotationDialog} modalClose={this.closeAnnotation} recordId={recordId}/> }\r\n { note && <NoteControl /> }\r\n { parameters && <Parameters map={map} recordId={recordId}/> }\r\n <MobMeasureControl {...mobmeasureOptions} />\r\n {children && React.Children.map(children, child => (\r\n child ? React.cloneElement(child, {\r\n openPopupMarker: this.openPopupMarker,\r\n openAnnotation: annotation && this.openAnnotation\r\n }) : null\r\n ))}\r\n </Map>\r\n );\r\n }\r\n}\r\n\r\n\r\nLeafletMap.defaultProps = {\r\n currentLocation: false,\r\n annotation: false\r\n};\r\n\r\nexport default LeafletMap;","import moment from 'moment';\r\n\r\nexport const toWavyGeojson = (data) => {\r\n const observation = data.observation;\r\n const observedProperties = data.observedProperties;\r\n\r\n return {\r\n wavy: {\r\n id: observation.serialNumber,\r\n name: observation.serialNumber\r\n },\r\n position: [ ObservationToFeature(observation, observedProperties, true) ]\r\n };\r\n}\r\n\r\nexport const toWavyGeojsonOld = (data) => {\r\n \r\n const { observations, observedProperties, latest, wavys } = data;\r\n\r\n let result = {};\r\n\r\n observations.forEach(obs => {\r\n const { serialNumber } = obs;\r\n if(!result[serialNumber]) {\r\n result[serialNumber] = { \r\n wavy : {\r\n id: serialNumber, \r\n name: serialNumber\r\n },\r\n position: []\r\n };\r\n }\r\n\r\n const pos = {\r\n type: \"Feature\",\r\n geometry: {\r\n type: \"Point\",\r\n coordinates: [parseFloat(obs.position.lng), parseFloat(obs.position.lat)]\r\n },\r\n style: {\r\n color: wavys[serialNumber].color\r\n },\r\n properties: {\r\n id: serialNumber,\r\n key: serialNumber,\r\n timestamp: new Date(obs.timestamp).getTime()\r\n }\r\n };\r\n \r\n result[serialNumber].position.push(pos);\r\n })\r\n latest.forEach(wavy => {\r\n\r\n const { serialNumber, content, timestamp, position } = wavy[0]; // why 0?\r\n const props = content.split('|');\r\n\r\n const pos = {\r\n type: \"Feature\",\r\n geometry: {\r\n type: \"Point\",\r\n coordinates: [parseFloat(position.lng), parseFloat(position.lat)]\r\n },\r\n style: {\r\n color: wavys[serialNumber].color\r\n },\r\n properties: {\r\n id: serialNumber,\r\n key: serialNumber,\r\n timestamp: new Date(timestamp).getTime()\r\n }\r\n };\r\n\r\n observedProperties[wavys[serialNumber].modelId].forEach(({index, visible, observedproperty, unitOfMeasurement}) => {\r\n if(visible) {\r\n pos.properties[observedproperty.name] = {\r\n value: props[index],\r\n unit: unitOfMeasurement\r\n };\r\n }\r\n });\r\n\r\n result[serialNumber].position.push(pos);\r\n\r\n })\r\n\r\n return Object.values(result);\r\n}\r\n\r\n\r\n// For now it will use the Observation keys\r\n// The objective is to transform the array of objects in a GeoJson (Feature Collection)\r\nexport const toObservationData = (data) => {\r\n const {observations, observedProperties} = data;\r\n\r\n let features = [];\r\n for (let i = 0; i < observations.length; i++){\r\n features.push(ObservationToFeature(observations[i], observedProperties[observations[i].datasetId]));\r\n }\r\n\r\n return {\r\n type: \"FeatureCollection\",\r\n features: features\r\n }\r\n};\r\n\r\nexport const toObservationDataSingleWAVY = (data) => {\r\n const {observations, observedProperties} = data;\r\n\r\n let features = [];\r\n for (let i = 0; i < observations.length; i++){\r\n features.push(ObservationToFeature(observations[i], observedProperties));\r\n }\r\n\r\n return {\r\n type: \"FeatureCollection\",\r\n features: features\r\n }\r\n};\r\n\r\nconst ObservationToFeature = (observation, observedProperties, live = false) => { \r\n // NOT observedProperties but equipmentModelProperties!!!\r\n const properties = {\r\n id: observation['serialNumber'],\r\n key: observation['serialNumber'],\r\n timestamp: moment(observation['timestamp']).unix() * 1000,\r\n };\r\n\r\n if (observedProperties) {\r\n observedProperties.forEach(observedProperty => {\r\n const key = observedProperty.observedproperty && observedProperty.observedproperty.name;\r\n if(key && observedProperty.visible)\r\n properties[key] = {\r\n value: observation[key],\r\n unit: observedProperty.unitOfMeasurement\r\n }\r\n });\r\n } else {\r\n const hiddenProperties = ['id', 'key', 'serialNumber', 'timestamp', 'createdAt', 'updatedAt', 'datasetId','derivedsetId', 'position', 'properties', 'dataset'];\r\n Object.keys(observation).forEach(key => {\r\n if (!hiddenProperties.includes(key)) {\r\n properties[key] = {\r\n value: observation[key],\r\n unit: null\r\n };\r\n }\r\n });\r\n }\r\n\r\n let color;\r\n if(live)\r\n color = observation.equipment && observation.equipment.properties ? observation.equipment.properties.color : \"rgb(51, 136, 255)\";\r\n else\r\n color = observation.properties ? observation.properties.color : \"rgb(51, 136, 255)\";\r\n return {\r\n type: \"Feature\",\r\n geometry: {\r\n type: \"Point\",\r\n coordinates: [parseFloat(observation.position.lng), parseFloat(observation.position.lat)]\r\n },\r\n style: {\r\n color: color\r\n },\r\n properties: properties\r\n };\r\n};\r\n\r\n// colors....\r\nexport const annotationsGeoJSON = (observations, annotations) => {\r\n let tagsGeoJSON = [];\r\n \r\n annotations.forEach(({intervals, tags, id, text}) => {\r\n intervals.forEach(({beginTime, endTime, record}) => {\r\n if(record === 0 && observations[new Date(beginTime).getTime()]) {\r\n tags.forEach(({name, color = \"rgb(255, 0, 0)\"}) => {\r\n tagsGeoJSON.push({\r\n type: \"Feature\",\r\n geometry: {\r\n type: \"Point\",\r\n coordinates: [\r\n parseFloat(observations[new Date(beginTime).getTime()].position.lng),\r\n parseFloat(observations[new Date(beginTime).getTime()].position.lat)\r\n ]\r\n },\r\n style: {\r\n color: color\r\n },\r\n properties: {\r\n description: text,\r\n tag: name,\r\n id: `${name}_annotation`,\r\n key: name,\r\n multiLineId: id,\r\n timestamp: new Date(beginTime).getTime()\r\n }\r\n });\r\n });\r\n }\r\n else {\r\n let obs = Object.keys(observations).filter(o => o >= new Date(beginTime).getTime() && o <= new Date(endTime).getTime());\r\n\r\n tags.forEach(({name, color}) => {\r\n obs.forEach(time => {\r\n tagsGeoJSON.push({\r\n type: \"Feature\",\r\n geometry: {\r\n type: \"Point\",\r\n coordinates: [\r\n parseFloat(observations[time].position.lng),\r\n parseFloat(observations[time].position.lat)\r\n ]\r\n },\r\n style: {\r\n color: color || \"rgb(255, 0, 0)\"\r\n },\r\n properties: {\r\n description: text,\r\n tag: name,\r\n id: `${name}_annotation`,\r\n key: name,\r\n multiLineId: id,\r\n timestamp: time\r\n }\r\n });\r\n });\r\n });\r\n }\r\n });\r\n });\r\n return tagsGeoJSON;\r\n};","import React from 'react';\nimport withStyles from '@material-ui/core/styles/withStyles'\nimport { Control } from 'react-leaflet-control-inesc';\nimport Button from '@material-ui/core/Button';\nimport ClearMarkersIcon from '@material-ui/icons/LayersClear';\nimport { connect } from 'react-redux'\nimport { clearData } from './actions'\n\nconst styles = {\n actionButton: {\n padding: 0,\n minHeight: 0,\n minWidth: 0,\n width:'30px',\n height: '30px'\n }\n}\n\nconst ClearMarkers = ({classes, clearData}) => {\n return <Control position=\"topright\" >\n <div style={{backgroundColor:'white'}}>\n <Button classes={{root:classes.actionButton}} onClick={clearData}>\n <ClearMarkersIcon style={{fontSize:'15px', padding:'8px', color:'black'}}/>\n </Button>\n </div>\n </Control>\n};\n\nexport default withStyles(styles)(connect(null, {clearData})(ClearMarkers));","import { toWavyGeojson, toWavyGeojsonOld } from '../../factory'; \r\n\r\nexport const NEW_LIVE_DATA = 'NEW_LIVE_DATA';\r\nexport const OLD_LIVE_DATA = 'OLD_LIVE_DATA';\r\nexport const CLEAR_DATA = 'CLEAR_DATA';\r\n\r\nexport const onNewLiveData = data => ({ type: NEW_LIVE_DATA, payload: toWavyGeojson(data) })\r\nexport const onOldLiveData = data => ({ type: OLD_LIVE_DATA, payload: toWavyGeojsonOld(data) })\r\nexport const clearData = () => ({type: CLEAR_DATA})\r\nexport const loadOldData = data => ({type: OLD_LIVE_DATA, payload: toWavyGeojsonOld(data) })","import React from 'react';\nimport withStyles from '@material-ui/core/styles/withStyles'\nimport { Control } from 'react-leaflet-control-inesc';\nimport Button from '@material-ui/core/Button';\nimport SystemUpdateAltIcon from '@material-ui/icons/SystemUpdateAlt';\n\nconst styles = {\n actionButton: {\n padding: 0,\n minHeight: 0,\n minWidth: 0,\n width:'30px',\n height: '30px'\n }\n}\n\nconst LoadOldData = ({classes, loadOldData}) => (\n <Control position=\"topright\" >\n <div style={{backgroundColor:'white'}}>\n <Button classes={{root:classes.actionButton}} onClick={loadOldData}>\n <SystemUpdateAltIcon style={{fontSize:'15px', padding:'8px', color:'black'}}/>\n </Button>\n </div>\n </Control>\n);\n\nexport default withStyles(styles)(LoadOldData);","import React, { Component, Fragment } from 'react';\nimport { Control } from 'react-leaflet-control-inesc';\nimport Button from '@material-ui/core/Button';\nimport { ViewList } from '@material-ui/icons';\nimport { connect } from 'react-redux';\nimport {\n List,\n ListItem,\n ListItemText,\n withStyles,\n Typography\n} from '@material-ui/core';\nimport compose from 'recompose/compose';\nimport {translate} from 'react-admin'\nimport { SimpleModal } from '../../components';\n// import moment from 'moment';\n\nconst styles = {\n content: { padding: 0 },\n \n closeButton:{\n marginTop: '0.5em',\n marginRight: '0.5em'\n },\n actionButton: {\n padding: 0,\n minHeight: 0,\n minWidth: 0,\n width:'30px',\n height: '30px'\n },\n inline: {\n display: 'inline',\n },\n right: {\n float: 'right',\n }\n};\n\nclass OverviewControl extends Component {\n state = {\n open: false,\n wavysTimer: {},\n intervalId: null,\n };\n\n closeDialog = () => this.setState({open: false});\n\n buildPropertiesString = (properties) => {\n let props = [];\n Object.keys(properties).forEach((key) => {\n if (properties[key].value) \n props.push(`${key}: ${properties[key].value} ${properties[key].unit ? ` ${properties[key].unit}` : ``}`);\n });\n return props.join(' | ');\n }\n\n timerUpdate = () => {\n const index = setInterval(() => {\n const { elements } = this.props;\n const { wavysTimer } = this.state;\n elements.forEach((wavy) => {\n const { id } = wavy.wavy;\n const { properties } = wavy.position[wavy.position.length-1];\n const tmp = parseInt((new Date().getTime() - new Date(properties.timestamp).getTime()) / 1000);\n\n const sec = parseInt(tmp % 60);\n const min = parseInt(tmp / 60) >= 60 ? parseInt(tmp / 60) % 60 : parseInt(tmp / 60);\n const hour = parseInt(parseInt(tmp / 60) / 60); \n\n let st = \"\";\n\n if(hour > 0) \n st += `${hour}h`;\n else if(min > 0)\n st += `${min}m `;\n else\n st += `${sec}s`;\n\n wavysTimer[id] = st;\n });\n\n\n this.setState({ wavysTimer: wavysTimer })\n\n } , 1000);\n this.setState({ intervalId: index });\n }\n\n componentDidUpdate(oldProps) {\n const { elements } = this.props;\n if(elements.length > 0 && this.state.intervalId === null)\n this.timerUpdate();\n } \n componentWillUnmount() {\n clearInterval(this.state.intervalId);\n }\n press = (id) => {\n this.props.openPopupMarker(id);\n this.closeDialog();\n }\n\n render() {\n const {elements, classes, translate} = this.props;\n \n return <Control position='topright'>\n <div style={{ backgroundColor: 'white' }}>\n <Button classes={{root:classes.actionButton}} onClick={() => this.setState({open:true})}>\n <ViewList style={{fontSize:'15px', padding:'8px', color:'black'}}/>\n </Button>\n <SimpleModal open={this.state.open} onClose={this.closeDialog} title='WAVYS' maxWidth={false}>\n <List>\n {elements.length!==0 ? elements.map(({wavy, position}) => {\n const { properties } = position[position.length-1];\n return <ListItem button onClick={() => this.press(wavy.id)} key={wavy.id} divider>\n <ListItemText \n primary={wavy.name}\n secondary={\n <Fragment>\n <Typography component=\"span\" className={classes.inline} color=\"textSecondary\">\n { this.buildPropertiesString(properties) }\n </Typography>\n <Typography component=\"span\" className={classes.right} color=\"textSecondary\">\n {/* {moment(properties.timestamp).utc().format('DD-MM-YYYY HH:mm:ss')} */}\n { this.state.wavysTimer[wavy.name] }\n </Typography>\n </Fragment>\n }\n />\n </ListItem>\n \n })\n : <Typography>{translate('ra.navigation.no_results')}</Typography>}\n </List>\n </SimpleModal>\n </div>\n </Control>\n }\n};\n\nconst mapStateToProps = state => ({\n elements: state.liveData\n});\n\nconst enhance = compose(\n withStyles(styles),\n connect(mapStateToProps, {}),\n translate\n)\n\nexport default enhance(OverviewControl);","import React, { Component } from 'react';\r\nimport {\r\n Title,\r\n translate,\r\n fetchEnd,\r\n fetchStart,\r\n} from 'react-admin';\r\n\r\nimport { compose } from 'recompose';\r\nimport { connect } from 'react-redux';\r\nimport { WEBSOCKET_URL } from '../../Configuration';\r\nimport LeafletMap from '../../components/map/LeafletMap';\r\nimport { onNewLiveData as newLiveDataAction, onOldLiveData as oldLiveDataAction } from './actions';\r\nimport ClearMarkers from './ClearMarkers';\r\nimport LoadOldData from './LoadOldData';\r\nimport OverviewControl from './OverviewControl';\r\nimport dataFetch from '../../providers/dataFetch';\r\n\r\nimport io from 'socket.io-client';\r\nimport { storage } from 'react-admin-loopback';\r\n\r\n// import { \r\n// emit as emitWS,\r\n// insideRoom as insideRoomWS,\r\n// listen as listenWS,\r\n// stopListen as stopListenWS,\r\n// } from '../../sockets'\r\n\r\n\r\nclass Live extends Component {\r\n state = {\r\n observedProperties: {},\r\n viewport: {\r\n center: [41.1619, -8.5835],\r\n zoom: 5,\r\n },\r\n last_transmission: {},\r\n socket: undefined\r\n };\r\n\r\n componentDidMount() {\r\n const id = storage.load('lbtoken').id;\r\n const userId = storage.load('userId');\r\n const socket = io(WEBSOCKET_URL, { transports: ['websocket'/*, 'polling', 'flashsocket'*/] });\r\n \r\n socket.on('connect', () => {\r\n socket.emit('authentication', {id: id, userId: userId });\r\n socket.on('authenticated', () => {\r\n socket.emit('enter', {room : 'live'});\r\n });\r\n\r\n socket.on('unauthorized', (err) => {\r\n this.setState({socket: undefined});\r\n console.error(\"Socket authentication fail\");\r\n });\r\n });\r\n\r\n socket.on('live', (data) => { \r\n const {last_transmission} = this.state;\r\n if(!last_transmission[data.serialNumber] || new Date(data.timestamp) > last_transmission[data.serialNumber]) {\r\n this.setState({last_transmission: {...last_transmission, [data.serialNumber]: new Date(data.timestamp)}});\r\n this.getObservedProperties(data)\r\n .then(observedProperties => {\r\n this.props.newLiveData({observation: data, observedProperties: observedProperties});\r\n })\r\n .catch(err => console.error(err));\r\n }\r\n });\r\n\r\n this.setState({socket: socket});\r\n \r\n // this.props.emit('enter', {room : 'live'})\r\n // .catch(err => {\r\n // if(SOCKET_DEBUG)\r\n // console.log(\"err LIVE\", err);\r\n // });\r\n \r\n // setTimeout(() => {\r\n // this.props.insideRoom('live')\r\n // }, 5000)\r\n \r\n // this.props.listen('live', this.newLiveData)\r\n // .catch(err => {\r\n // if(SOCKET_DEBUG)\r\n // console.log(\"err LIVE\", err);\r\n // });\r\n }\r\n \r\n componentWillUnmount() {\r\n \r\n if(this.state.socket) {\r\n this.state.socket.emit('leave', {room : 'live'});\r\n this.state.socket.disconnect();\r\n this.setState({socket: undefined});\r\n }\r\n // this.props.stopListen('live')\r\n // .catch(err => {\r\n // if(SOCKET_DEBUG)\r\n // console.log(\"err LIVE\", err);\r\n // });\r\n\r\n // this.props.emit('leave', {room : 'live'})\r\n // .catch(err => {\r\n // if(SOCKET_DEBUG)\r\n // console.log(\"err LIVE\", err);\r\n // });\r\n }\r\n\r\n getObservedProperties = (data) => {\r\n return new Promise((resolve, reject) => {\r\n const equipmentModelId = data && data.equipment &&\r\n data.equipment.equipmentmodelId;\r\n\r\n const { observedProperties } = this.state;\r\n if (equipmentModelId) {\r\n if (observedProperties[equipmentModelId]) {\r\n resolve(observedProperties[equipmentModelId]);\r\n } \r\n else {\r\n const filter = JSON.stringify({\r\n include: 'observedproperty',\r\n where: {equipmentmodelId: equipmentModelId}\r\n });\r\n\r\n dataFetch('GET', `/modelproperties?filter=${filter}`)\r\n .then((result) => {\r\n observedProperties[equipmentModelId] = result;\r\n this.setState({observedProperties: observedProperties});\r\n resolve(result);\r\n }).catch(err => reject(err));\r\n }\r\n } else {\r\n reject('unknown');\r\n }\r\n });\r\n };\r\n\r\n loadOldData = () => {\r\n // var now = new Date();\r\n var yesterday = new Date(new Date().getTime() - (24 * 60 * 60 * 1000));\r\n const filter_old = {\r\n where: {\r\n and: [\r\n {timestamp: {\r\n gt: yesterday\r\n // gt: new Date(`${now.getFullYear()}-${now.getUTCMonth() + 1}-${now.getUTCDate()}`)\r\n }},\r\n {position: {\r\n neq: \"null\"\r\n }}\r\n ]\r\n },\r\n fields: [\r\n \"timestamp\",\r\n \"serialNumber\",\r\n \"position\",\r\n \"id\"\r\n ],\r\n order: [\"timestamp ASC\"]\r\n };\r\n\r\n\r\n let wavys = [], old = [], modelIds = {}, ids = [];\r\n\r\n this.props.fetchStart();\r\n dataFetch('GET', `/realtime_observations?filter=${JSON.stringify(filter_old)}`)\r\n .then(rto => {\r\n \r\n rto.forEach(observation => {\r\n if(!wavys.includes(observation.serialNumber))\r\n wavys.push(observation.serialNumber);\r\n });\r\n old = rto;\r\n const filter_equipment = {\r\n where: { \r\n serialNumber: {\r\n inq: wavys\r\n }\r\n },\r\n fields: [\"serialNumber\", \"properties\", \"equipmentmodelId\"]\r\n };\r\n\r\n return dataFetch('GET', `/equipment?filter=${JSON.stringify(filter_equipment)}`);\r\n })\r\n .then(equip => {\r\n equip.forEach(model => {\r\n if(!modelIds[model.serialNumber])\r\n modelIds[model.serialNumber] = {modelId: model.equipmentmodelId, color: model.properties ? model.properties.color : \"rgb(51, 136, 255)\"};\r\n });\r\n\r\n ids = [...new Set(Object.values(modelIds).map(model => model.modelId))];\r\n const { observedProperties } = this.state;\r\n ids = ids.filter(id => (observedProperties[id] === undefined || observedProperties[id] === null) ? true : false);\r\n\r\n const filter_observedProperty = {\r\n include: {\r\n relation: \"observedproperty\"\r\n },\r\n where: {\r\n equipmentmodelId: {\r\n inq: ids\r\n }\r\n }\r\n };\r\n\r\n const filter_lastPos = (wavy) => ({\r\n where: {\r\n and: [\r\n {serialNumber: wavy},\r\n {position: {\r\n neq: \"null\"\r\n }}\r\n ]\r\n },\r\n order: \"timestamp DESC\",\r\n limit: 1\r\n });\r\n\r\n const promises = [];\r\n if(ids.length > 0)\r\n promises.push(dataFetch('GET', `/modelproperties?filter=${JSON.stringify(filter_observedProperty)}`));\r\n else\r\n promises.push({onState: true});\r\n\r\n wavys.forEach(wavy => {\r\n promises.push(dataFetch('GET', `/realtime_observations?filter=${JSON.stringify(filter_lastPos(wavy))}`));\r\n });\r\n \r\n return Promise.all(promises);\r\n })\r\n .then(result => {\r\n let { observedProperties, last_transmission } = this.state;\r\n const obsRequest = result.shift();\r\n\r\n if(obsRequest.length > 0 && !obsRequest.onState) {\r\n ids.forEach(model => {\r\n observedProperties[model] = obsRequest.filter(obs => obs.equipmentmodelId === model);\r\n });\r\n\r\n this.setState({observedProperties: observedProperties});\r\n }\r\n\r\n const last_transmission_to_add = {};\r\n \r\n result.forEach((obs) => {\r\n const data = obs[0];\r\n if(!last_transmission[data.serialNumber] || new Date(data.timestamp) > last_transmission[data.serialNumber]) {\r\n last_transmission_to_add[data.serialNumber] = new Date(data.timestamp);\r\n }\r\n });\r\n this.setState({last_transmission: {...last_transmission, ...last_transmission_to_add}});\r\n \r\n this.props.oldLiveData({observations: old, observedProperties: observedProperties, latest: result, wavys: modelIds});\r\n\r\n }).finally(_ => this.props.fetchEnd())\r\n }\r\n\r\n render() {\r\n const { translate, observations } = this.props;\r\n return (\r\n <div style={{display:'flex', flex: '1'}}>\r\n <Title title={translate('containers.maps.live.name')} />\r\n <LeafletMap note={true} viewport={this.state.viewport} overlays={observations} currentLocation={true}>\r\n <LoadOldData loadOldData={this.loadOldData} />\r\n <ClearMarkers />\r\n <OverviewControl />\r\n </LeafletMap>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n observations: state.liveData\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => {\r\n return ({\r\n newLiveData: data => dispatch(newLiveDataAction(data)),\r\n oldLiveData: data => dispatch(oldLiveDataAction(data)),\r\n fetchEnd: () => dispatch(fetchEnd()),\r\n fetchStart: () => dispatch(fetchStart()),\r\n // listen: (...data) => dispatch(listenWS(...data)),\r\n // stopListen: (...data) => dispatch(stopListenWS(...data)),\r\n // emit: (...data) => dispatch(emitWS(...data)),\r\n // insideRoom: (...data) => dispatch(insideRoomWS(...data))\r\n})};\r\n\r\nconst enhance = compose(\r\n translate,\r\n connect(mapStateToProps, mapDispatchToProps)\r\n);\r\n\r\nexport default enhance(Live);","import '../leaflet-extra-markers-improved/js/leaflet.extra-markers.min.js';\r\nimport '../leaflet-extra-markers-improved/css/leaflet.extra-markers.min.css';\r\nimport L from 'leaflet'\r\nL.TimelineSliderControl = L.Control.extend({\r\n initialize(timeline, options = {}) {\r\n const defaultOptions = {\r\n enablePlayButton: true,\r\n enableStepButtons: true,\r\n formatOutput: output => `${output || ''} UTC`,\r\n showTicks: true,\r\n position: 'bottomleft',\r\n speeds: [1, 2, 4, 8, 16],\r\n legend: '',\r\n speedsUnity: [{\r\n seconds: 1,\r\n text: '1s'\r\n }, {\r\n seconds: 5,\r\n text: '5s'\r\n }, {\r\n seconds: 10,\r\n text: '10s'\r\n }, {\r\n seconds: 30,\r\n text: '30s'\r\n }, {\r\n seconds: 60,\r\n text: '1m'\r\n }, {\r\n seconds: 300,\r\n text: '5m'\r\n }, {\r\n seconds: 600,\r\n text: '10m'\r\n }, {\r\n seconds: 1800,\r\n text: '30m'\r\n }, {\r\n seconds: 3600,\r\n text: '1h'\r\n }, {\r\n seconds: 7200,\r\n text: '2h'\r\n }, {\r\n seconds: 21600,\r\n text: '6h'\r\n }\r\n ]\r\n };\r\n\r\n this.timeline = timeline;\r\n //this.campaignName = campaignName;\r\n this.interval = timeline.getIntervalValues();\r\n this.stepSize = 1000;\r\n this.speedUnityTime = defaultOptions['speedsUnity'][0];\r\n this.speedTime = defaultOptions['speeds'][0];\r\n\r\n L.Util.setOptions(this, defaultOptions);\r\n L.Util.setOptions(this, options);\r\n },\r\n getTimelineTime() {\r\n return this.data;\r\n },\r\n _createDOM() {\r\n const classes = [\r\n 'leaflet-control-layers',\r\n 'leaflet-control-layers-expanded',\r\n 'leaflet-timeline-control',\r\n ];\r\n const container = L.DomUtil.create('div', classes.join(' '));\r\n this.container = container;\r\n\r\n L.DomEvent.disableClickPropagation(this.container);\r\n\r\n const sliderCtrlC = L.DomUtil.create(\r\n 'div',\r\n 'sldr-ctrl-container',\r\n container,\r\n );\r\n\r\n if ((this.options.enablePlayButton) || (this.options.enableStepButtons)) {\r\n const buttonContainer = L.DomUtil.create(\r\n 'div',\r\n 'button-container',\r\n sliderCtrlC,\r\n );\r\n this._makeButtons(buttonContainer);\r\n }\r\n\r\n this._makeOutput(sliderCtrlC);\r\n this._makeSlider(container);\r\n\r\n if (this.options.showTicks) {\r\n this._buildDataList(container);\r\n } else {\r\n this._buildLegend(container);\r\n }\r\n\r\n },\r\n _buildLegend(container) {\r\n /*const titleDiv = L.DomUtil.create('div', null, container);\r\n titleDiv.innerHTML = this.campaignName; */\r\n\r\n this._legend = L.DomUtil.create('legend', '', container);\r\n this._legend.innerHTML = this.options.legend;\r\n },\r\n _makeButton(container, name) {\r\n const button = L.DomUtil.create('button', name, container);\r\n button.addEventListener('click', () => this[name]());\r\n L.DomEvent.disableClickPropagation(button);\r\n },\r\n _makeSpeedButton(container) {\r\n const button = L.DomUtil.create('button', 'speed', container);\r\n // button.innerHTML = \"STEP: \" + this.speedUnityTime.text;\r\n button.innerHTML = this.speedUnityTime.text;\r\n\r\n button.addEventListener('click', () => this.speed(button));\r\n L.DomEvent.disableClickPropagation(button);\r\n },\r\n _makeButtons(container) {\r\n if (this.options.enableStepButtons)\r\n this._makeButton(container, 'prev');\r\n\r\n if (this.options.enablePlayButton) {\r\n this._makeButton(container, 'play');\r\n this._makeButton(container, 'pause');\r\n }\r\n\r\n if (this.options.enableStepButtons)\r\n this._makeButton(container, 'next');\r\n // Speed button\r\n this._makeSpeedButton(container);\r\n },\r\n _makeSlider(container) {\r\n const slider = L.DomUtil.create('input', 'time-slider', container);\r\n slider.type = 'range';\r\n slider.min = this.interval.min || 0;\r\n slider.max = this.interval.max || 0;\r\n slider.value = this.interval.min || 0;\r\n slider.step = 1000;\r\n this._timeSlider = slider;\r\n // register events using leaflet for easy removal\r\n L.DomEvent.on(this._timeSlider, 'change input', this._sliderChanged, this);\r\n L.DomEvent.on(this._timeSlider, 'pointerdown mousedown touchstart', this._disableMapDragging, this);\r\n L.DomEvent.on(document, 'pointerup mouseup touchend', this._enableMapDragging, this);\r\n },\r\n _makeOutput(container) {\r\n this._output = L.DomUtil.create('output', 'time-text', container);\r\n this._output.innerHTML = this.options.formatOutput(this.interval.min);\r\n },\r\n _buildDataList(container) {\r\n this._datalist = L.DomUtil.create('datalist', '', container);\r\n const idNum = Math.floor(Math.random() * 1000000);\r\n this._datalist.id = `timeline-datalist-${idNum}`;\r\n this._timeSlider.setAttribute('list', this._datalist.id);\r\n this._rebuildDataList();\r\n },\r\n _rebuildDataList() {\r\n const datalist = this._datalist;\r\n while (datalist.firstChild) {\r\n datalist.removeChild(datalist.firstChild);\r\n }\r\n const datalistSelect = L.DomUtil.create('select', '', this._datalist);\r\n this.interval.steps.forEach((time) => {\r\n L.DomUtil.create('option', '', datalistSelect).value = time;\r\n });\r\n },\r\n _disableMapDragging() {\r\n this.map.dragging.disable();\r\n },\r\n _enableMapDragging() {\r\n this.map.dragging.enable();\r\n },\r\n _sliderChanged(e) {\r\n const time = parseFloat(+e.target.value, 10);\r\n this.time = time;\r\n this.map.time = time;\r\n\r\n if (this._output) {\r\n this._output.innerHTML = this.options.formatOutput(time);\r\n }\r\n\r\n this.timeline.updateDisplayedLayers(time);\r\n },\r\n _nearestStep(time, mode) {\r\n // let retNext = false;\r\n let lastTime = this.interval.steps[0];\r\n for (let i = 0; i < this.interval.steps.length; i++) {\r\n if (this.interval.steps[i] >= time) {\r\n if (mode === -1)\r\n return lastTime;\r\n\r\n if (this.interval.steps[i] !== time)\r\n return this.interval.steps[i];\r\n // if(this.interval.steps[i] === time)\r\n // retNext = true;\r\n // else\r\n // return this.interval.steps[i];\r\n }\r\n lastTime = this.interval.steps[i];\r\n }\r\n return lastTime;\r\n },\r\n prev() {\r\n this.pause();\r\n const prevTime = this._nearestStep(this.time, -1);\r\n this._timeSlider.value = prevTime;\r\n this.setTime(prevTime);\r\n },\r\n play(fromSynced) {\r\n clearTimeout(this._timer);\r\n // if (parseFloat(this._timeSlider.value, 10) === this.interval.max) {\r\n // this._timeSlider.value = this.start;\r\n // }\r\n \r\n let miliseconds = 0;\r\n if(this.speedUnityTime.seconds > 10) {\r\n this._timeSlider.value = parseFloat(this._timeSlider.value, 10) + (this.speedUnityTime.seconds * 0.05 * this.stepSize);\r\n // this._timeSlider.value += this.speedUnityTime.seconds * 0.05;\r\n this.setTime(this._timeSlider.value);\r\n miliseconds = 50;\r\n } else {\r\n this._timeSlider.value = parseFloat(this._timeSlider.value, 10) + this.stepSize;\r\n this.setTime(this._timeSlider.value);\r\n miliseconds = 1000 / this.speedUnityTime.seconds;\r\n }\r\n \r\n if (parseFloat(this._timeSlider.value, 10) === this.interval.max) {\r\n this._playing = false;\r\n this.container.classList.remove('playing');\r\n } else {\r\n this._playing = true;\r\n this.container.classList.add('playing');\r\n this._timer = setTimeout(() => this.play(true), miliseconds);\r\n }\r\n if (this.syncedControl && !fromSynced) {\r\n this.syncedControl.map(function (control) {\r\n return control.play(true);\r\n });\r\n }\r\n },\r\n pause(fromSynced) {\r\n clearTimeout(this._timer);\r\n this._playing = false;\r\n this.container.classList.remove('playing');\r\n\r\n if (this.syncedControl && !fromSynced) {\r\n this.syncedControl.map(function (control) {\r\n return control.pause(true);\r\n })\r\n }\r\n },\r\n next(pause = true) {\r\n pause && this.pause();\r\n const nextTime = this._nearestStep(this.time, 1);\r\n this._timeSlider.value = nextTime;\r\n this.setTime(nextTime)\r\n },\r\n speed(button) {\r\n const speeds = this.options.speedsUnity;\r\n let i = speeds.indexOf(this.speedUnityTime);\r\n if (i >= speeds.length - 1) {\r\n i = 0;\r\n } else {\r\n i++;\r\n }\r\n this.speedUnityTime = speeds[i];\r\n button.innerHTML = this.speedUnityTime.text;\r\n // button.innerHTML = \"STEP \" + this.speedUnityTime.text;\r\n\r\n if (this._playing) {\r\n this.pause();\r\n this.play();\r\n }\r\n },\r\n setTime(time) {\r\n this.map.time = time;\r\n if (this._timeSlider) this._timeSlider.value = +time;\r\n this._sliderChanged({\r\n type: 'change',\r\n target: { value: time },\r\n });\r\n },\r\n onAdd(map) {\r\n this.map = map;\r\n this._createDOM();\r\n this.setTime(this.interval.min);\r\n return this.container;\r\n },\r\n onRemove() {\r\n L.DomEvent.off(this._timeSlider, 'change input', this._sliderChanged, this);\r\n L.DomEvent.off(this._timeSlider, 'pointerdown mousedown touchstart', this._disableMapDragging, this);\r\n L.DomEvent.off(document, 'pointerup mouseup touchend', this._enableMapDragging, this);\r\n },\r\n // syncControl(controlToSync) {\r\n // if (!this.syncedControl) {\r\n // this.syncedControl = [];\r\n // }\r\n // this.syncedControl.push(syncedControl);\r\n // }\r\n});\r\n\r\nexport default L.timelineSliderControl = (timeline, options) =>\r\n new L.TimelineSliderControl(timeline, options);\r\n","import ReactDOM from \"react-dom\";\r\nimport React from \"react\";\r\n\r\nimport '../leaflet-extra-markers-improved/js/leaflet.extra-markers.min.js';\r\nimport '../leaflet-extra-markers-improved/css/leaflet.extra-markers.min.css';\r\nimport L from 'leaflet';\r\n\r\nL.Timeline = L.GeoJSON.extend({\r\n interval: null,\r\n initialize(geojson, controlLayers, options = {}) {\r\n const defaultOptions = {\r\n marker: false,\r\n style: function (feature) {\r\n return feature.style\r\n }\r\n };\r\n L.GeoJSON.prototype.initialize.call(this, null, options);\r\n\r\n L.Util.setOptions(this, defaultOptions);\r\n L.Util.setOptions(this, options);\r\n\r\n // this.data = geojson;\r\n this.data = {\r\n features: [],\r\n type: \"FeatureCollection\"\r\n };\r\n\r\n this.openAnnotation = options.openAnnotation;\r\n\r\n this.layersKeys = [];\r\n\r\n let data = JSON.parse(JSON.stringify(geojson));\r\n // let data = geojson;\r\n\r\n this.data.features = data.features.map(feature => {\r\n feature.geometry.coordinates.reverse();\r\n return feature;\r\n });\r\n\r\n this.controlLayers = controlLayers;\r\n //Get min, max and keys from geojson\r\n this.interval = this._getInterval();\r\n this.marker = L.marker;\r\n this.annotations = (pos, color = 'rgb(0,255,0)') => {\r\n color = color.replace(')', ', 0.8)').replace('rgb', 'rgba');\r\n return L.circleMarker(pos, {\r\n // pane: 'markers1',\r\n radius: 8,\r\n stroke: true,\r\n color: 'rgb(0,0,0)', //\"grey\",\r\n weight: 1,\r\n opacity: 1,\r\n fillOpacity: 1,\r\n fillColor: color,\r\n className: \"marker\"\r\n });\r\n }\r\n\r\n this._buildLayers();\r\n },\r\n update(geojson, controlLayers, options = {}, map) {\r\n\r\n this.data = {\r\n features: [],\r\n type: \"FeatureCollection\"\r\n };\r\n\r\n // map.clearLayers();\r\n\r\n\r\n const data = JSON.parse(JSON.stringify(geojson));\r\n\r\n this.data.features = data.features\r\n\r\n this.data.features = data.features.map((feature) => {\r\n feature.geometry.coordinates.reverse();\r\n return feature;\r\n });\r\n\r\n let geojson2 = this.convertPointTrace(this.data, this.interval.min);\r\n\r\n const exists = [];\r\n let to_delete = [];\r\n const to_add = [];\r\n\r\n if (geojson2) {\r\n geojson2.features.forEach(({ properties }) => {\r\n if (properties && properties.key) {\r\n\r\n if (this.layersKeys.includes(properties.key)) {\r\n exists.push(properties.key);\r\n } else {\r\n to_add.push(properties.key);\r\n }\r\n }\r\n });\r\n\r\n to_delete = this.layersKeys.filter((key) => !to_add.includes(key) && !exists.includes(key));\r\n }\r\n\r\n\r\n geojson2.features = geojson2.features.filter(({ properties }) => to_add.includes(properties.key));\r\n\r\n this.addData(geojson2)\r\n\r\n this.eachLayer(layer => {\r\n if (to_delete.includes(layer.feature.properties.key)) {\r\n delete this._layers[layer._leaflet_id]; //The only way to delete...\r\n map.removeLayer(layer);\r\n this.controlLayers.removeLayer(layer);\r\n } else if (to_add.includes(layer.feature.properties.key)) {\r\n this.controlLayers.addOverlay(layer, layer.feature.properties.key);\r\n }\r\n });\r\n\r\n this.layersKeys = [...to_add, ...exists];\r\n this.updateDisplayedLayers(this.currentTime);\r\n },\r\n // get interval from each feature->properties.timestamp\r\n _getInterval() {\r\n let times = [];\r\n const features = this.data.features;\r\n for (var i in features) {\r\n if (!features[i].properties.multiLineId && times.indexOf(features[i].properties.timestamp) < 0)\r\n times.push(features[i].properties.timestamp);\r\n }\r\n times = times.sort();\r\n\r\n return {\r\n 'steps': times,\r\n 'min': times[0],\r\n 'max': times[times.length - 1],\r\n };\r\n },\r\n _buildLayers() {\r\n let geojson = this.convertPointTrace(this.data, this.interval.min);\r\n let latlngs = [];\r\n\r\n if (geojson) {\r\n this.addData(geojson)\r\n geojson.features.forEach(({ geometry }) => {\r\n if (geometry.geometries)\r\n geometry.geometries.forEach(({ coordinates }) => {\r\n latlngs = [...latlngs, ...coordinates];\r\n });\r\n });\r\n }\r\n\r\n this.eachLayer(layer => {\r\n if (!layer.feature.properties.annotation) {\r\n this._buildMarker(layer);\r\n }\r\n\r\n this.controlLayers.addOverlay(layer, layer.feature.properties.key);\r\n this.layersKeys.push(layer.feature.properties.key);\r\n });\r\n\r\n\r\n if (latlngs.length > 0 && this.options.map) {\r\n this.options.map.fitBounds(latlngs, { padding: [100, 100], maxZoom: 15 });\r\n }\r\n },\r\n _buildMarker(layer) {\r\n let marker;\r\n let coordinates = [];\r\n layer.getLayers().forEach(l => {\r\n if (l instanceof L.Marker) {\r\n marker = l;\r\n } else {\r\n coordinates = l.getLatLngs();\r\n }\r\n });\r\n\r\n if ((this.options.marker !== false) && (coordinates.length > 0)/* && !layer.feature.properties.id.includes(\"invalid\")*/) {\r\n if (marker) {\r\n marker.setLatLng(coordinates[coordinates.length - 1]);\r\n if (this.options.markerPopup)\r\n marker.setPopupContent(this.options.markerPopup(layer.feature.properties));\r\n } else {\r\n if (typeof (this.options.marker) !== \"boolean\")\r\n this.marker = this.options.marker;\r\n\r\n let mrk = this.marker(coordinates[coordinates.length - 1], layer.feature.properties);\r\n if (this.options.markerPopup)\r\n mrk.bindPopup(this.options.markerPopup(layer.feature.properties));\r\n layer.addLayer(mrk);\r\n }\r\n } else {\r\n if (marker) {\r\n layer.removeLayer(marker);\r\n }\r\n }\r\n },\r\n getIntervalValues() {\r\n return this.interval;\r\n },\r\n // This function must be improved\r\n updateDisplayedLayers(time) {\r\n this.currentTime = time;\r\n let geometries = {};\r\n let properties = {};\r\n let geojson = this.convertPointTrace(this.data, time);\r\n\r\n if (geojson) {\r\n geojson.features.forEach(feature => {\r\n\r\n if (feature.properties?.annotation)\r\n geometries[feature.properties.id] = feature.geometry.geometries;\r\n else\r\n geometries[feature.properties.id] = feature.geometry.geometries[0];\r\n properties[feature.properties.id] = feature.properties;\r\n });\r\n }\r\n\r\n this.eachLayer(layer => {\r\n layer.getLayers().forEach(l => {\r\n if (!(l instanceof L.Marker) && this.layersKeys.includes(layer.feature.properties.key)) {\r\n // Clone coordinates\r\n let geometry = geometries[layer.feature.properties.id].coordinates;\r\n // Update properties\r\n layer.feature.properties = properties[layer.feature.properties.id];\r\n // Update Geometry\r\n\r\n if (layer.feature.properties.annotation) {\r\n\r\n l.getLayers().forEach((nl) => {\r\n if ((nl instanceof L.CircleMarker)) {\r\n l.removeLayer(nl);\r\n }\r\n });\r\n\r\n geometries[layer.feature.properties.id].forEach((MultiPoint) => {\r\n MultiPoint.coordinates.forEach((coordinate) => {\r\n const popupNode = document.createElement('div');\r\n ReactDOM.render(\r\n <div>\r\n <div>\r\n <h3 style={{ display: 'inline' }}>Tag: </h3>\r\n <div style={{ display: 'inline' }}>{MultiPoint.properties.key}</div>\r\n </div>\r\n <br />\r\n <div>\r\n <h3 style={{ display: 'inline' }}>Annotation: </h3>\r\n <div style={{ display: 'inline' }}>{MultiPoint.properties.description}</div>\r\n </div>\r\n {/* <br />\r\n <div>\r\n <h3 style={{ display: 'inline' }}>Timestamp: </h3>\r\n <div style={{ display: 'inline' }}>{MultiPoint.properties.timestamp}</div>\r\n </div> */}\r\n {/* <div>Annotation: {MultiPoint.properties.description}</div> */}\r\n <br />\r\n <button onClick={() => { this.openAnnotation && this.openAnnotation(MultiPoint.properties?.pointId) }}>\r\n OPEN\r\n </button>\r\n </div>, popupNode)\r\n\r\n let mrk = this.annotations(coordinate, layer.feature.style?.color).bindPopup(popupNode);\r\n\r\n l.addLayer(mrk);\r\n })\r\n })\r\n\r\n } else\r\n l.setLatLngs(geometry);\r\n\r\n // Rebuild Marker\r\n if (!layer.feature.properties.annotation) {\r\n this._buildMarker(layer);\r\n }\r\n }\r\n });\r\n });\r\n },\r\n // Must be a GeometryCollection in order to build a LayerGroup, otherwise it will create a layer and will not allow to add the Marker\r\n convertPointTrace(geojson, time) {\r\n let elements = {};\r\n //TODO: CHANGE\r\n if (geojson.features) {\r\n geojson.features.forEach(feature => {\r\n if (!elements[feature.properties.id]) {\r\n elements[feature.properties.id] = {\r\n properties: {\r\n id: feature.properties.id,\r\n key: feature.properties.key,\r\n metadata: {},\r\n },\r\n polyline: [],\r\n multilineCoordinates: {},\r\n };\r\n\r\n if (feature.style)\r\n elements[feature.properties.id]['style'] = feature.style;\r\n if (feature.properties.multiLineId) {\r\n elements[feature.properties.id].properties.multiLine = true;\r\n }\r\n }\r\n\r\n if (elements[feature.properties.id].properties.multiLine && !elements[feature.properties.id].properties.metadata[feature.properties.multiLineId]) {\r\n elements[feature.properties.id].properties.metadata[feature.properties.multiLineId] = {\r\n description: feature.properties.description,\r\n id: feature.properties.id,\r\n key: feature.properties.key,\r\n tag: feature.properties.tag,\r\n multiLineId: feature.properties.multiLineId\r\n }\r\n }\r\n\r\n if (feature.properties.timestamp <= time) {\r\n if (feature.properties.multiLineId) {\r\n if (!elements[feature.properties.id].multilineCoordinates[feature.properties.multiLineId])\r\n elements[feature.properties.id].multilineCoordinates[feature.properties.multiLineId] = [];\r\n\r\n elements[feature.properties.id].multilineCoordinates[feature.properties.multiLineId].push(feature.geometry.coordinates);\r\n }\r\n else {\r\n elements[feature.properties.id]['polyline'].push(feature.geometry.coordinates);\r\n elements[feature.properties.id]['properties'] = feature.properties;\r\n }\r\n\r\n }\r\n });\r\n\r\n\r\n let features = [];\r\n Object.keys(elements).forEach((i) => {\r\n let feature = {\r\n type: \"Feature\",\r\n geometry: {\r\n \"type\": \"GeometryCollection\",\r\n geometries: [] //[{ type: \"LineString\", coordinates: elements[i].polyline }]\r\n },\r\n properties: elements[i].properties\r\n };\r\n\r\n\r\n if (feature.properties.multiLine) {\r\n feature.properties.multiLineIds = Object.keys(elements[i].multilineCoordinates);\r\n\r\n if (feature.properties.multiLineIds.length === 0) {\r\n feature.geometry.geometries.push({\r\n type: \"MultiPoint\",\r\n coordinates: [],\r\n properties: { ...feature.properties }\r\n });\r\n }\r\n\r\n feature.properties.multiLineIds.forEach((id) => {\r\n const coordinates = elements[i].multilineCoordinates[id];\r\n const multiPoint = {\r\n type: \"MultiPoint\",\r\n coordinates,\r\n properties: { ...feature.properties.metadata[id], pointId: id }\r\n };\r\n\r\n delete multiPoint.properties.multiLineId;\r\n delete multiPoint.properties.multiLineIds;\r\n delete multiPoint.properties.timestamp;\r\n if (elements[i])\r\n multiPoint.style = elements[i].style;\r\n\r\n feature.geometry.geometries.push(multiPoint);\r\n });\r\n\r\n feature.properties.annotation = true;\r\n }\r\n\r\n else {\r\n feature.geometry.geometries.push({ type: \"LineString\", coordinates: elements[i].polyline });\r\n }\r\n\r\n if (elements[i])\r\n feature['style'] = elements[i].style\r\n\r\n features.push(feature);\r\n });\r\n\r\n return {\r\n type: \"FeatureCollection\",\r\n features: features\r\n };\r\n } else {\r\n return null;\r\n }\r\n },\r\n onRemove(map) {\r\n this.eachLayer(layer => {\r\n map.removeLayer(layer);\r\n this.controlLayers.removeLayer(layer);\r\n })\r\n }\r\n});\r\n\r\nexport default L.timeline = (geojson, controlLayers, options) => new L.Timeline(geojson, controlLayers, options);\r\n","import { MapControl } from 'react-leaflet';\r\nimport TimeControl from './timeline-control';\r\nimport './timeline.css';\r\nimport Timeline from './timeline';\r\n\r\nexport default class TimelineControl extends MapControl {\r\n\r\n createLeafletElement(props) {\r\n this.timeline = Timeline(props.geoJSON, props.ctrlLayer, {...props.timelineOptions, map: this.context.map, openAnnotation: props.openAnnotation});\r\n this.timeline.addTo(this.context.map);\r\n let leafletElement = TimeControl(this.timeline, Object.assign({}, props.options, props.timecontrolOptions));\r\n return leafletElement;\r\n }\r\n \r\n updateLeafletElement(oldProps, newProps){\r\n if(JSON.stringify(newProps.geoJSON) !== JSON.stringify(oldProps.geoJSON)) {\r\n if(newProps.multiLine) {\r\n this.timeline.update(newProps.geoJSON, newProps.ctrlLayer, newProps.timelineOptions, this.context.map);\r\n }\r\n else {\r\n this.timeline.remove();\r\n this.timeline.clearLayers();\r\n this.timeline.remove();\r\n this.leafletElement.remove();\r\n this.leafletElement = this.createLeafletElement(newProps);\r\n this.leafletElement.addTo(this.context.map);\r\n }\r\n }\r\n }\r\n\r\n componentWillUnmount(){\r\n this.timeline.remove();\r\n this.leafletElement.remove();\r\n }\r\n}","import React, { Component } from 'react';\r\nimport { ListItem, ListItemText, Collapse } from '@material-ui/core';\r\nimport { ExpandLess, ExpandMore } from '@material-ui/icons';\r\n\r\nimport { \r\n GET_LIST, \r\n // DateField,\r\n fetchEnd,\r\n fetchStart,\r\n showNotification,\r\n translate,\r\n} from 'react-admin';\r\nimport {\r\n dataFetch,\r\n dataProvider\r\n} from '../../providers';\r\nimport {\r\n DateField\r\n} from '../../components';\r\n\r\nimport { connect } from 'react-redux';\r\nimport { \r\n fetchObservations as fetchObservationsAction,\r\n selectCampaign as selectCampaignAction, \r\n storeOverlays as storeOverlaysAction,\r\n} from './actions';\r\n\r\nimport compose from 'recompose/compose';\r\nimport { withStyles } from '@material-ui/core/styles';\r\n\r\nconst styles = {\r\n date: { display: 'inline' },\r\n content: { 'padding-left': '44px' }\r\n}\r\n\r\nclass CampaignItemList extends Component {\r\n state = {\r\n open: false,\r\n launches: []\r\n };\r\n\r\n getObservations = (launch, campaign) => {\r\n return new Promise((resolve, reject) => {\r\n const url = launch ? `/observations/launch/${launch.id}?filter=${JSON.stringify({where:{record:0},order: \"timestamp ASC\"})}`: `/observations/campaign/${campaign.id}?filter=${JSON.stringify({where:{record:0},order: \"timestamp ASC\"})}`;\r\n dataFetch('GET', url)\r\n .then(data => resolve(data))\r\n .catch(err => reject(err));\r\n });\r\n };\r\n\r\n getOverlays = campaign => {\r\n return new Promise((resolve, reject) => {\r\n dataFetch('GET', `/campaigns/${campaign.id}/overlays`)\r\n .then(data => resolve(data))\r\n .catch(_ => resolve());\r\n });\r\n };\r\n\r\n getModelProperties = (datasetIds) => {\r\n return new Promise((resolve, reject) => {\r\n const filter = {\r\n include: 'equipment',\r\n where: {id: {inq: datasetIds}}\r\n };\r\n\r\n dataFetch('GET', `/datasets?filter=${JSON.stringify(filter)}`)\r\n .then(data => {\r\n if (data) {\r\n const equipmentModelIds = [...new Set(data.map(item => item.equipment.equipmentmodelId))];\r\n const filter = JSON.stringify({\r\n include: 'observedproperty',\r\n where: {equipmentmodelId: {inq: equipmentModelIds}}\r\n });\r\n dataFetch('GET', `/modelproperties?filter=${filter}`)\r\n .then((result) => {\r\n let datasets = {};\r\n data.forEach(dataset => {\r\n datasets[dataset.id] = result.filter(item => {\r\n if (item.equipmentmodelId === dataset.equipment.equipmentmodelId)\r\n return item;\r\n else\r\n return null;\r\n })\r\n });\r\n resolve(datasets);\r\n }).catch(err => reject(err));\r\n } else {\r\n resolve();\r\n }\r\n });\r\n });\r\n }\r\n\r\n getData = (campaign, launch = null) => {\r\n const { fetchStart, fetchEnd, fetchObservations, onClose, selectCampaign, storeOverlays, showNotification } = this.props;\r\n const promises = [\r\n this.getOverlays(campaign),\r\n this.getObservations(launch, campaign)\r\n ];\r\n \r\n fetchStart();\r\n Promise.all(promises)\r\n .then(data => {\r\n const overlays = data[0];\r\n const observations = data[1];\r\n // Get unique datasetIds\r\n const datasetIds = [...new Set(observations.map(item => item.datasetId))];\r\n this.getModelProperties(datasetIds)\r\n .then(data => {\r\n fetchObservations({\r\n observations: observations,\r\n observedProperties: data\r\n });\r\n storeOverlays(overlays);\r\n\r\n observations.length === 0 && showNotification('containers.maps.history.info.no_data')\r\n });\r\n \r\n })\r\n .finally(_ => {\r\n fetchEnd();\r\n });\r\n\r\n selectCampaign(campaign);\r\n onClose();\r\n };\r\n\r\n handleCollapseListItemClick = (launch, campaign) => {\r\n this.getData(campaign, launch);\r\n };\r\n \r\n handleAllDataClick = campaign => {\r\n this.getData(campaign);\r\n }\r\n\r\n handleListItemClick = value => {\r\n this.setState({'open': !this.state.open});\r\n const {fetchStart, fetchEnd} = this.props;\r\n\r\n if(this.state.launches.length === 0){\r\n fetchStart();\r\n dataProvider(GET_LIST, 'launches', {\r\n filter: { campaignId: value.id },\r\n sort: { field: 'beginTimestamp', order: 'ASC' },\r\n pagination: { page: 1, perPage: 0 },\r\n }).then(response => {\r\n return response.data;\r\n }).then(launches => {\r\n fetchEnd();\r\n this.setState({'launches': launches})\r\n });\r\n }\r\n };\r\n \r\n render() {\r\n const { open, launches } = this.state;\r\n const { campaign, classes, translate } = this.props;\r\n\r\n return (\r\n <div>\r\n <ListItem button onClick={() => this.handleListItemClick(campaign)}>\r\n <ListItemText \r\n primary={campaign.name}\r\n secondary={<DateField source=\"beginDate\" format='dd/MM/yyyy' record={campaign} simpleText noFields/>}\r\n />\r\n {open ? <ExpandLess /> : <ExpandMore />}\r\n </ListItem>\r\n <Collapse in={open}>\r\n {launches.map(launch => (\r\n <ListItem button className={classes.content} key={`${campaign.id}-${launch.id}`} onClick={() => this.handleCollapseListItemClick(launch, campaign)}>\r\n <ListItemText \r\n primary={launch.name}\r\n secondary={\r\n <span>\r\n {translate('resources.launches.fields.beginTimestamp')}: <DateField source=\"beginTimestamp\" format='dd/MM/yyyy HH:mm' record={launch} simpleText /> \r\n {/* <DateField className={classes.date} source=\"beginTimestamp\" record={launch} showTime /> */}\r\n {launch.endTimestamp ? ` | ${translate('resources.launches.fields.endTimestamp')}: ` : null}\r\n <DateField source=\"endTimestamp\" format='dd/MM/yyyy HH:mm' record={launch} simpleText /> \r\n {/* <DateField className={classes.date} source=\"endTimestamp\" record={launch} showTime /> */}\r\n </span>\r\n }\r\n />\r\n </ListItem>\r\n ))}\r\n {launches.length > 0 && <ListItem\r\n button\r\n divider\r\n className={classes.content}\r\n onClick={()=>this.handleAllDataClick( campaign )}\r\n >\r\n <ListItemText\r\n primary={translate('containers.maps.history.all_data')}\r\n secondary={translate('containers.maps.history.complete_interval')}\r\n />\r\n </ListItem>}\r\n </Collapse>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n fetchObservations: data => dispatch(fetchObservationsAction(data)),\r\n storeOverlays: overlays => dispatch(storeOverlaysAction(overlays)),\r\n fetchEnd: () => dispatch(fetchEnd()),\r\n fetchStart: () => dispatch(fetchStart()),\r\n selectCampaign: (campaign) => dispatch(selectCampaignAction(campaign)),\r\n showNotification: error => dispatch(showNotification(error))\r\n});\r\n\r\nconst mapStateToProps = state => ({\r\n observations: state.fetchedObservations\r\n});\r\n\r\nconst enhance = compose(\r\n connect(mapStateToProps, mapDispatchToProps),\r\n translate,\r\n withStyles(styles)\r\n);\r\n\r\nexport default enhance(CampaignItemList);","import { toObservationData } from '../../factory'; \r\nexport const FETCH_OBSERVATIONS = 'FETCH_OBSERVATIONS';\r\nexport const STORE_OVERLAYS = 'STORE_OVERLAYS';\r\nexport const SELECT_CAMPAIGN = 'SELECT_CAMPAIGN';\r\n\r\nexport const fetchObservations = data => ({ type: FETCH_OBSERVATIONS, payload: toObservationData(data) });\r\nexport const storeOverlays = overlays => ({ type: STORE_OVERLAYS, payload: overlays});\r\nexport const selectCampaign = campaign => ({ type: SELECT_CAMPAIGN, payload: campaign});","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { LinearProgress, List } from '@material-ui/core';\r\nimport { \r\n GET_LIST,\r\n fetchEnd,\r\n fetchStart,\r\n translate\r\n} from 'react-admin';\r\nimport compose from 'recompose/compose';\r\n\r\nimport dataProvider from '../../providers/dataProvider';\r\nimport CampaignListItem from './CampaignListItem';\r\nimport { SimpleModal } from '../../components';\r\n\r\nconst styles = {\r\n content: { padding: 0 },\r\n titleDiv:{\r\n display: 'flex',\r\n justifyContent: 'space-between'\r\n },\r\n closeButton:{\r\n marginTop: '0.5em',\r\n marginRight: '0.5em'\r\n }\r\n};\r\n\r\nclass CampaignDialog extends Component {\r\n state = {\r\n campaigns: []\r\n }\r\n\r\n handleEntering = () => {\r\n const {fetchStart, fetchEnd} = this.props;\r\n fetchStart();\r\n dataProvider(GET_LIST, 'campaigns', {\r\n filter: { hide: false },\r\n sort: { field: 'beginDate', order: 'DESC' },\r\n pagination: { page: 1, perPage: 0 },\r\n }).then(response => {\r\n return response.data;\r\n }).then(campaigns => {\r\n fetchEnd(); \r\n this.setState({'campaigns': campaigns})\r\n });\r\n };\r\n\r\n render() {\r\n const { translate, onClose, open } = this.props\r\n const { campaigns } = this.state\r\n\r\n return <SimpleModal open={open} onClose={onClose} onEntering={this.handleEntering} \r\n title={translate('resources.campaigns.name', {smart_count: 2})} scroll='body' maxWidth='md'>\r\n {\r\n campaigns.length > 0 ?\r\n <List>\r\n {campaigns.map(campaign => (\r\n <CampaignListItem campaign={campaign} key={campaign.id} onClose={onClose} />\r\n ))}\r\n </List>\r\n : <LinearProgress/>\r\n }\r\n </SimpleModal>\r\n }\r\n}\r\n\r\nCampaignDialog.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n onClose: PropTypes.func,\r\n};\r\n\r\nconst enhance = compose(\r\n translate,\r\n withStyles(styles),\r\n connect(null, {\r\n fetchStart,\r\n fetchEnd\r\n })\r\n);\r\n\r\nexport default enhance(CampaignDialog);","import React, { Component } from 'react';\r\nimport { Button } from '@material-ui/core';\r\nimport { DirectionsBoat as BoatIc } from '@material-ui/icons';\r\n\r\nimport CampaignDialog from './CampaignDialog';\r\nimport { Control } from 'react-leaflet-control-inesc';\r\n\r\nclass CampaignControl extends Component {\r\n state = {\r\n open: false,\r\n selectedValue: null,\r\n };\r\n\r\n handleClickOpen = () => {\r\n this.setState({\r\n open: true\r\n });\r\n };\r\n\r\n handleClose = () => {\r\n this.setState({ open: false });\r\n };\r\n\r\n render() {\r\n return (\r\n <Control position=\"topright\" className=\"leaflet-bar\">\r\n <div>\r\n <Button \r\n style={{\r\n padding: 0,\r\n minHeight: 0,\r\n minWidth: 0,\r\n background: 'white'\r\n }}\r\n onClick={this.handleClickOpen}\r\n >\r\n <BoatIc style={{fontSize:'15px', padding:'8px', color:'black'}}/>\r\n </Button>\r\n <CampaignDialog \r\n open={this.state.open}\r\n onClose={this.handleClose}\r\n />\r\n </div>\r\n </Control>\r\n );\r\n }\r\n}\r\n\r\nexport default CampaignControl;","import React, { Component } from 'react';\r\nimport {\r\n Title,\r\n translate\r\n} from 'react-admin';\r\n\r\nimport TimelineControl from 'leaflet-timeline';\r\n\r\nimport { compose } from 'recompose';\r\nimport { connect } from 'react-redux';\r\n\r\nimport L from 'leaflet';\r\nimport moment from 'moment';\r\n\r\nimport LeafletMap from '../../components/map/LeafletMap';\r\nimport CampaignControl from './CampaignControl';\r\n\r\nclass History extends Component {\r\n state = {\r\n viewport: {\r\n center: [41.1619, -8.5835],\r\n zoom: 5\r\n },\r\n controlLayer: null\r\n };\r\n\r\n render() {\r\n const { activeCampaign, translate, observations, overlays } = this.props;\r\n const { controlLayer, viewport } = this.state;\r\n\r\n const timelineControlOptions = {\r\n timelineOptions: {\r\n marker: (coordinates, properties) => {\r\n let marker = L.marker(coordinates, {\r\n icon: L.ExtraMarkers.icon({\r\n icon: properties.id.length > 4 ? 'fb-number' : 'fa-number',\r\n markerColor: 'blue',\r\n prefix: 'fa',\r\n number: `${properties.id.substr(0, 2)}\\n${properties.id.substr(2, properties.id.length)}`,\r\n })\r\n });\r\n return marker;\r\n },\r\n markerPopup: function (properties) {\r\n let popup = `<h3>${properties.id}</h3>`;\r\n if (properties.timestamp) {\r\n popup += `<div>time: ${moment(properties.timestamp).utc().format('DD-MM-YYYY HH:mm:ss')} UTC</div>`\r\n }\r\n const hiddenProperties = ['gpstime', 'timestamp', 'position', 'properties', 'serialNumber', 'id', 'key'];\r\n Object.keys(properties).map((key) => {\r\n // In order to present the property must have the \"value\" prop otherwise ignore\r\n if (!hiddenProperties.includes(key) && properties[key].value) {\r\n const prop = properties[key].value + (properties[key].unit ? ` ${properties[key].unit}` : '');\r\n const value = properties[key].value ? prop : translate('containers.properties.no_data');\r\n return popup += `<div>${key}: ${value}</div>`;\r\n }\r\n return null;\r\n });\r\n\r\n return popup;\r\n }\r\n },\r\n timecontrolOptions: {\r\n legend: activeCampaign ? activeCampaign.name : '',\r\n showTicks: false,\r\n speeds: [1, 2, 4, 8, 16, 32, 64],\r\n formatOutput: (date) => {\r\n return moment(date).utc().format('DD-MM-YYYY HH:mm:ss') + ' UTC';\r\n }\r\n }\r\n };\r\n\r\n return (\r\n <div style={{display:'flex', flex: '1'}}>\r\n <Title title={translate('containers.maps.history.name')} />\r\n <LeafletMap viewport={viewport} sendCtrlLayer={(layer)=>this.setState({controlLayer:layer})} campaignOverlays={overlays}>\r\n <CampaignControl />\r\n { observations && observations.features.length > 0 && controlLayer && <TimelineControl geoJSON={observations} ctrlLayer={controlLayer} {...timelineControlOptions}/> }\r\n </LeafletMap>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n observations: state.fetchedObservations,\r\n overlays: state.overlays,\r\n activeCampaign: state.selectedCampaign\r\n});\r\n\r\nconst enhance = compose(\r\n translate,\r\n connect(mapStateToProps)\r\n);\r\n\r\nexport default enhance(History);","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n translate\r\n} from 'react-admin';\r\nimport L from 'leaflet';\r\nimport moment from 'moment';\r\nimport TimelineControl from 'leaflet-timeline';\r\nimport LeafletMap from '../../components/map/LeafletMap';\r\nimport '../../plugins/leaflet-extra-markers-improved/js/leaflet.extra-markers.min.js';\r\nimport '../../plugins/leaflet-extra-markers-improved/css/leaflet.extra-markers.min.css';\r\n\r\nclass TimeControlledMap extends Component {\r\n state = {\r\n controlLayer: null,\r\n viewport: {}\r\n }\r\n\r\n componentDidMount() {\r\n const { center, zoom } = this.props;\r\n const viewport = { center: center, zoom: zoom };\r\n\r\n this.setState({ viewport: viewport })\r\n }\r\n\r\n render() {\r\n const { translate, geodata, legend, annotation = false, parameters = false, refreshData, recordId, openAnnotation } = this.props;\r\n const { controlLayer, viewport } = this.state;\r\n // const viewport = {center: center, zoom: zoom};\r\n\r\n const timelineControlOptions = {\r\n timelineOptions: {\r\n marker: (coordinates, properties) => {\r\n let marker = L.marker(coordinates, {\r\n icon: L.ExtraMarkers.icon({\r\n icon: properties.id.length > 4 ? 'fb-number' : 'fa-number',\r\n markerColor: 'blue',\r\n prefix: 'fa',\r\n number: `${properties.id.substr(0, 2)}\\n${properties.id.substr(2, properties.id.length)}`,\r\n })\r\n });\r\n return marker;\r\n },\r\n markerPopup: function (properties) {\r\n let popup = `<h3>${properties.id}</h3>`;\r\n if (properties.timestamp) {\r\n popup += `<div>time: ${moment(properties.timestamp).utc().format('DD-MM-YYYY HH:mm:ss')} UTC</div>`\r\n }\r\n const hiddenProperties = ['gpstime', 'timestamp', 'position', 'properties', 'serialNumber', 'id', 'key'];\r\n Object.keys(properties).map((key) => {\r\n // In order to present the property must have the \"value\" prop otherwise ignore\r\n if (!hiddenProperties.includes(key) && properties[key].value) {\r\n const prop = properties[key].value + (properties[key].unit ? ` ${properties[key].unit}` : '');\r\n const value = properties[key].value ? prop : translate('containers.properties.no_data');\r\n return popup += `<div>${key}: ${value}</div>`;\r\n }\r\n return null;\r\n });\r\n\r\n return popup;\r\n }\r\n },\r\n timecontrolOptions: {\r\n legend,\r\n showTicks: false,\r\n speeds: [1, 2, 4, 8, 16, 32, 64],\r\n speedsUnity: [{\r\n seconds: 1,\r\n text: '1s'\r\n },{\r\n seconds: 5,\r\n text: '5s'\r\n },{\r\n seconds: 10,\r\n text: '10s'\r\n },{\r\n seconds: 30,\r\n text: '30s'\r\n },{\r\n seconds: 60,\r\n text: '1m'\r\n },{\r\n seconds: 300,\r\n text: '5m'\r\n },{\r\n seconds: 600,\r\n text: '10m'\r\n },{\r\n seconds: 1800,\r\n text: '30m'\r\n },{\r\n seconds: 3600,\r\n text: '1h'\r\n },{\r\n seconds: 7200,\r\n text: '2h'\r\n }\r\n ],\r\n formatOutput: (date) => {\r\n return moment(date).utc().format('DD-MM-YYYY HH:mm:ss') + ' UTC';\r\n }\r\n }\r\n };\r\n return <LeafletMap viewport={viewport} sendCtrlLayer={(layer) => this.setState({ controlLayer: layer })} annotation={annotation} parameters={parameters} recordId={recordId} refreshData={refreshData}>\r\n {geodata && geodata.features.length > 0 && controlLayer && <TimelineControl geoJSON={geodata} multiLine={annotation} ctrlLayer={controlLayer} openAnnotation={openAnnotation} {...timelineControlOptions} />}\r\n </LeafletMap>\r\n }\r\n}\r\n\r\nTimeControlledMap.propTypes = {\r\n geodata: PropTypes.object,\r\n center: PropTypes.arrayOf(PropTypes.number),\r\n zoom: PropTypes.number,\r\n}\r\n\r\nTimeControlledMap.defaultProps = {\r\n center: [41.1619, -8.5835],\r\n zoom: 5,\r\n};\r\n\r\nexport default translate(TimeControlledMap);","import React, {Component} from 'react';\nimport {\n Button,\n Title,\n crudGetOne as crudGetOneAction,\n fetchEnd,\n fetchStart,\n translate,\n showNotification\n} from 'react-admin';\nimport { compose } from 'recompose';\nimport { connect } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport {\n ShowChart as ChartIcon,\n ViewList as TableIcon,\n List as DatasetIcon\n} from '@material-ui/icons';\nimport { stringify } from 'query-string';\nimport { Typography } from '@material-ui/core';\n\nimport TimeControlledMap from '../../components/map/TimeControlledMap';\nimport { toObservationDataSingleWAVY } from '../../factory'; \nimport { dataFetch } from '../../providers';\n\nclass DatasetMap extends Component{\n\n state = {\n datasetData: null,\n load: false\n }\n\n getObservations = datasetId => {\n const filter = {\n where: {datasetId: datasetId, record: 0},\n order: [\"timestamp ASC\"]\n };\n\n return new Promise((resolve, reject) => {\n dataFetch('GET', `/observations?filter=${JSON.stringify(filter)}`)\n .then(data => resolve(data))\n .catch(err => reject(err));\n });\n };\n\n // Imporve this call - check crudGetOne\n getObservedProperties = datasetId => {\n return new Promise((resolve, reject) => {\n dataFetch('GET', `/datasets/${datasetId}?filter=${JSON.stringify({include: 'equipment'})}`)\n .then(data => {\n const equipmentmodelId = data && data.equipment && data.equipment.equipmentmodelId;\n if (equipmentmodelId) {\n const filter = JSON.stringify({\n include: 'observedproperty',\n where: {equipmentmodelId: equipmentmodelId}\n });\n\n dataFetch('GET', `/modelproperties?filter=${filter}`)\n .then(result => {\n // let datasets = {};\n // datasets[datasetId] = result;\n\n resolve(result);\n })\n .catch(err => reject(err));\n } else {\n resolve();\n }\n }).catch(err => reject(err));\n });\n };\n\n componentDidMount() {\n const { crudGetOne, match, dataset } = this.props;\n \n if(!dataset) {\n crudGetOne('datasets', match.params.id, 'datasets');\n }\n else {\n this.processData();\n }\n }\n\n processData = () => {\n this.setState({load: true});\n \n const { fetchEnd, fetchStart, match } = this.props;\n\n const promises = [\n this.getObservations(match.params.id),\n this.getObservedProperties(match.params.id)\n ];\n\n fetchStart();\n Promise.all(promises)\n .then(data => {\n const observations = data[0];\n const observedProperties = data[1];\n\n this.setState({datasetData: toObservationDataSingleWAVY({\n observations: observations,\n observedProperties: observedProperties\n })});\n })\n .catch(err => {\n console.error(err)\n this.props.showNotification('containers.derivedsets.map.loadObsError', 'warning');\n })\n .finally(_ => {\n fetchEnd();\n });\n }\n\n componentDidUpdate(){\n const { dataset } = this.props;\n const { load } = this.state;\n if(dataset && !load) {\n this.processData();\n }\n }\n\n render(){\n const { translate, dataset } = this.props;\n const { datasetData } = this.state;\n const datasetId = parseInt(this.props.match.params.id);\n\n //\n // DOWNLOAD GEOJSON POINT - For João test grafana\n //\n\n // const downloadObjectAsJson = (exportObj, exportName=\"teste\") => {\n // var dataStr = \"data:text/json;charset=utf-8,\" + encodeURIComponent(JSON.stringify(exportObj));\n // var downloadAnchorNode = document.createElement('a');\n // downloadAnchorNode.setAttribute(\"href\", dataStr);\n // downloadAnchorNode.setAttribute(\"download\", exportName + \".json\");\n // document.body.appendChild(downloadAnchorNode); // required for firefox\n // downloadAnchorNode.click();\n // downloadAnchorNode.remove();\n // }\n // datasetData && downloadObjectAsJson(datasetData,dataset.name)\n \n return (\n <div style={{display:'flex', flex: '1', flexDirection:'column'}}>\n <Title title={translate('containers.maps.datasets.name')} />\n <div style={{marginBottom:'8px', display:'flex', justifyContent:'space-between'}}>\n <Typography variant='title' >{dataset && dataset.name}</Typography>\n <div>\n <Button style={{marginRight:'8px'}} component={Link} label='pos.general.chart' to={`/datasets/${datasetId}/charts`}><ChartIcon/></Button>\n <Button style={{marginRight:'8px'}} component={Link}\n label='pos.general.table'\n to={{\n pathname: '/observations',\n search: stringify({\n page: 1,\n perPage: 25,\n filter: JSON.stringify({ datasetId: datasetId }),\n })\n }}><TableIcon/></Button>\n <Button component={Link} label={translate('pos.general.list',{smart_count:2})} to={'/datasets'}><DatasetIcon/></Button>\n </div>\n </div>\n <TimeControlledMap geodata={datasetData} legend={dataset && dataset.name}/>\n </div>\n );\n }\n};\n\nconst mapStateToProps = (state, props) => ({\n dataset: state.admin.resources.datasets.data[props.match.params.id],\n observations: state.fetchedObservations,\n overlays: state.overlays\n});\n\nconst enhance = compose(\n translate,\n connect(mapStateToProps, {\n crudGetOne: crudGetOneAction,\n fetchEnd,\n showNotification,\n fetchStart\n })\n);\n\nexport default enhance(DatasetMap);","import React, { Component } from 'react';\nimport { Card, withStyles, Typography, CardActions } from '@material-ui/core'\nimport {\n Button,\n Title,\n showNotification,\n fetchEnd,\n fetchStart,\n translate\n} from 'react-admin';\nimport compose from 'recompose/compose';\nimport {Link} from 'react-router-dom';\nimport {\n List as DatasetIcon,\n Map as MapIcon,\n ViewList as TableIcon,\n} from '@material-ui/icons';\nimport { stringify } from 'query-string';\nimport { connect } from 'react-redux';\n\nimport dataFetch from '../../providers/dataFetch';\nimport { ReactChart } from '../../components';\n\nconst styles = {\n actions:{\n display: 'flex',\n justifyContent: 'space-between'\n },\n card:{\n display: 'flex',\n height: '100%',\n paddingTop: '2em',\n paddingBottom: '2em',\n paddingRight: '1em',\n paddingLeft: '1em',\n flexDirection: 'column'\n },\n flex: { display: 'flex', marginTop: '0em' },\n flexColumn: { display: 'flex', flexDirection: 'column' },\n leftCol: { flex: 1, marginRight: '1em' },\n singleCol: { marginTop: '2em', marginBottom: '2em' },\n welcome: { width: '100%' }\n};\n\n\nclass ChartsContainer extends Component {\n constructor(props) {\n super(props);\n this.rerenderParentCallback = this.rerenderParentCallback.bind(this);\n\n }\n\n getAnnotations = (datasetId) => {\n const filter = {\n where: {datasetId: datasetId},\n include: ['tags',\"intervals\"]\n };\n\n return new Promise((resolve, reject) => {\n dataFetch('GET', `/annotations?filter=${JSON.stringify(filter)}`)\n .then(data => resolve(data))\n .catch(err => reject(err));\n });\n };\n \n rerenderParentCallback() {\n const { match, fetchEnd, fetchStart } = this.props;\n\n const promises = [this.getAnnotations(match.params.id)];\n \n fetchStart();\n Promise.all(promises).then((values) => {\n\n let annotations = values[0];\n\n this.setState({ annotationsArray: annotations, });\n\n })\n .catch(_ => this.props.showNotification('ra.navigation.no_results'))\n .finally(_ => fetchEnd());\n this.forceUpdate();\n }\n state = {\n name: null,\n legend: [],\n chartData: [],\n annotationsArray: [],\n allowToAddAnnotations: undefined,\n };\n\n componentDidMount() {\n const { match, fetchEnd, fetchStart } = this.props;\n\n // const getDataset = (datasetId) => {\n // return new Promise((resolve, reject) => {\n // dataFetch('GET', `/datasets/${datasetId}?filter=${JSON.stringify({include: 'equipment'})}`)\n // .then(dataset => {\n // if (dataset && !dataset.error) {\n // return resolve(dataset);\n // } else {\n // return reject();\n // }\n // })\n // .catch(err => reject(err));\n // });\n // }\n\n // const getModelProperties = (datasetId) => {\n // return new Promise((resolve, reject) => {\n // getDataset(datasetId)\n // .then(dataset => {\n // this.setState({name: dataset.name});\n // const { equipmentmodelId } = dataset.equipment;\n // const filter = {\n // where: {equipmentmodelId: equipmentmodelId},\n // include: 'observedproperty'\n // };\n // return dataFetch('GET', `/modelproperties?filter=${JSON.stringify(filter)}`);\n // })\n // .then(modelproperties => resolve(modelproperties))\n // .catch(err => reject(err));\n // });\n // };\n\n const getObservations = (datasetId) => {\n const filter = {\n where: {datasetId: datasetId},\n order: [\"timestamp ASC\"]\n };\n\n return new Promise((resolve, reject) => {\n dataFetch('GET', `/observations?filter=${JSON.stringify(filter)}`)\n .then(data => resolve(data))\n .catch(err => reject(err));\n });\n };\n\n\n const promises = [\n // getModelProperties(match.params.id),\n getObservations(match.params.id),\n this.getAnnotations(match.params.id)\n ];\n \n fetchStart();\n Promise.all(promises).then((values) => {\n // const modelProperties = values[0];\n let observations = values[0];\n let annotations = values[1];\n // let legend = modelProperties.filter(p => p.visible).map(p => p.observedproperty.name);\n // legend.unshift('timestamp');\n\n const invisible_props = [\n \"datasetId\", \n \"id\", \n \"position\", \n \"record\", \n \"references\", \n \"timestamp\",\n \"serialNumber\",\n \"gpstime\",\n \"properties\",\n \"day\",\n \"hour\",\n \"latitude\",\n \"longitude\",\n \"minute\",\n \"month\",\n \"second\",\n \"year\",\n \"sampleimu\",\n \"samplepressure\",\n \"sampletemperature\",\n ];\n\n let legend = Object.keys(observations[0]).filter(obs => !invisible_props.includes(obs));\n legend.unshift('timestamp');\n\n // observations.forEach(({timestamp, temp_1}) => {\n // if(temp_1 > 60)\n // console.log(timestamp, temp_1)\n // })\n // console.log(legend)\n observations.forEach(observation => {\n observation.timestamp = new Date(observation.timestamp)\n Object.keys(observation).forEach(key => {\n if(!legend.includes(key))\n delete observation[key];\n });\n });\n\n this.setState({ \n chartData: observations, \n legend: legend,\n annotationsArray: annotations, \n });\n\n })\n .catch(_ => this.props.showNotification('ra.navigation.no_results'))\n .finally(_ => fetchEnd());\n }\n setAnnotationsOnOff = value => {\n this.setState({ allowToAddAnnotations: value });\n return value;\n };\n render() {\n const { classes, translate } = this.props;\n const { chartData, legend, name, annotationsArray, allowToAddAnnotations } = this.state;\n const datasetId = parseInt(this.props.match.params.id);\n const annotationsEnabled = false;\n return (\n <Card classes={{root:classes.card}} >\n <Title title={translate('containers.charts.name')} />\n <CardActions classes={{root:classes.actions}}>\n <Typography style={{alignSelf:'flex-start'}} variant='title' >{name}</Typography>\n\n <div style={styles.flex}>\n <div style={styles.leftCol}>\n <div style={styles.flex}>\n <Button style={{marginRight:'8px'}} component={Link} label='pos.general.map' to={`/datasets/${datasetId}/map`}><MapIcon/></Button>\n <Button style={{marginRight:'8px'}} component={Link}\n label='pos.general.table'\n to={{\n pathname: '/observations',\n search: stringify({\n page: 1,\n perPage: 25,\n filter: JSON.stringify({ datasetId: datasetId }),\n })\n }}><TableIcon/></Button>\n <Button component={Link} label={translate('resources.datasets.name',{smart_count:2})} to={'/datasets'}><DatasetIcon/></Button> \n </div>\n </div>\n </div>\n </CardActions>\n <ReactChart data={chartData} recordId={datasetId} properties={legend} annotationsEnabled={annotationsEnabled}\n annotations={annotationsArray} rerenderParentCallback={this.rerenderParentCallback} allowToAddAnnotations={allowToAddAnnotations}/>\n </Card>\n )\n }\n};\n\nconst enhance = compose(\n translate,\n withStyles(styles),\n connect(null, {\n showNotification,\n fetchEnd,\n fetchStart\n })\n)\n\nexport default enhance(ChartsContainer);","\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport compose from 'recompose/compose';\nimport MuiButton from '@material-ui/core/Button';\n// import Tooltip from '@material-ui/core/Tooltip';\n// import IconButton from '@material-ui/core/IconButton';\nimport { withStyles, createStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport { translate } from 'ra-core';\n\nimport {Responsive} from 'react-admin';\n\nconst styles = createStyles({\n button: {\n display: 'inline-flex',\n alignItems: 'center',\n },\n label: {\n paddingLeft: '0.5em',\n },\n labelRightIcon: {\n paddingRight: '0.5em',\n },\n smallIcon: {\n fontSize: 20,\n },\n mediumIcon: {\n fontSize: 22,\n },\n largeIcon: {\n fontSize: 24,\n },\n});\n\nconst CustomDeleteButton = ({\n alignIcon = 'left',\n children,\n classes = {},\n className,\n color,\n disabled,\n label,\n size,\n translate,\n submitOnEnter,\n handleSubmit,\n handleSubmitWithRedirect,\n basePath,\n saving,\n invalid,\n ...rest\n}) => {\n console.log(\"SIZE\", size)\n return(\n <Responsive\n // xsmall={\n // label && !disabled ? (\n // <Tooltip title={translate(label, { _: label })}>\n // <IconButton\n // aria-label={translate(label, { _: label })}\n // className={className}\n // color={color}\n // {...rest}\n // >\n // {children}\n // </IconButton>\n // </Tooltip>\n // ) : (\n // <IconButton\n // className={className}\n // color={color}\n // disabled={disabled}\n // {...rest}\n // >\n // {children}\n // </IconButton>\n // )\n // }\n medium={\n <MuiButton\n className={classnames(classes.button, className)}\n color={color}\n size={size}\n aria-label={label ? translate(label, { _: label }) : undefined}\n disabled={disabled}\n \n {...rest}\n >\n {alignIcon === 'left' &&\n children &&\n React.cloneElement(children, {\n className: classes[`${size}Icon`],\n })}\n {label && (\n <span\n className={classnames({\n [classes.label]: alignIcon === 'left',\n [classes.labelRightIcon]: alignIcon !== 'left',\n })}\n >\n {translate(label, { _: label })}\n </span>\n )}\n {alignIcon === 'right' &&\n children &&\n React.cloneElement(children, {\n className: classes[`${size}Icon`],\n })}\n </MuiButton>\n }\n />\n)};\n\nCustomDeleteButton.propTypes = {\n alignIcon: PropTypes.string,\n children: PropTypes.element,\n classes: PropTypes.object,\n className: PropTypes.string,\n color: PropTypes.string,\n disabled: PropTypes.bool,\n label: PropTypes.string,\n size: PropTypes.oneOf(['small', 'medium', 'large']),\n translate: PropTypes.func.isRequired,\n};\n\nCustomDeleteButton.defaultProps = {\n color: 'primary',\n size: 'small'\n}\n\nconst enhance = compose(\n withStyles(styles),\n translate\n);\n\nexport default enhance(CustomDeleteButton);","import React, { Component } from 'react';\nimport compose from 'recompose/compose';\nimport {\n // Button,\n Toolbar,\n SaveButton,\n translate,\n} from 'react-admin';\nimport { withStyles, createStyles } from '@material-ui/core/styles';\n// import MuiButton from '@material-ui/core/Button';\nimport { fade } from '@material-ui/core/styles/colorManipulator';\nimport ActionDelete from '@material-ui/icons/Delete';\nimport CustomDeleteButton from '../button/CustomDeleteButton'\n\nconst styles = theme =>\n createStyles({\n toDeleteButton: {\n color: theme.palette.error.main,\n '&:hover': {\n backgroundColor: fade(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n defaultToolbar: {\n flex: 1,\n display: 'flex',\n justifyContent: 'space-between',\n },\n });\n\nclass CustomToolbar extends Component {\n constructor(props) {\n super(props)\n this.toDelete = this.toDelete.bind(this)\n this.state = {\n disabled: false\n }\n }\n\n toDelete() {\n this.setState({disabled: true})\n this.props.toDelete(this.props.record)\n this.componentWillUnmount()\n }\n\n componentWillUnmount() {\n if(this.props.toUnmount) {\n this.props.toUnmount()\n }\n }\n\n render() {\n const { editing, classes, toDelete, toUnmount, active = true, saving, ...saveB } = this.props\n // const { submitOnEnter, handleSubmit, handleSubmitWithRedirect, basePath, ...deleteB } = this.props\n return (\n <Toolbar className={classes.defaultToolbar} >\n <SaveButton disabled={!active} onClick={() => saving()} {...saveB}/>\n {/* {editing ? <MuiButton className={classes.toDeleteButton} onClick={this.toDelete}> \n <ActionDelete /> \n REMOVE\n </MuiButton> : undefined } */}\n\n {editing ? <CustomDeleteButton className={classes.toDeleteButton} onClick={this.toDelete} label={\"REMOVE\"}> \n <ActionDelete /> \n </CustomDeleteButton> : undefined } \n </Toolbar>\n )}\n }\n\nconst enhance = compose(\n translate,\n withStyles(styles),\n)\n\nexport default enhance(CustomToolbar);","import dataFetch from '../../providers/dataFetch';\n\nconst getTitles = (url, filter) => (\n new Promise( (resolve, reject) => {\n dataFetch('GET', `${url}?filter=${JSON.stringify(filter)}`)\n .then(data => {\n let result = {};\n \n Object.keys(data).forEach(key => {\n const obj = data[key]\n result[obj.id] = obj;\n delete data[key];\n });\n \n resolve(result)\n })\n .catch(err => reject(err));\n })\n)\n\nconst getObj = (url, id, type, showNotification) => ( \n new Promise( (resolve, reject) => {\n dataFetch('GET', url)\n .then((result) => {\n let manual = JSON.parse(localStorage.getItem(`manual${type}`));\n manual[id] = result;\n try {\n localStorage.setItem(`manual${type}`, JSON.stringify(manual));\n }\n catch (e) {\n console.log(\"Local Storage is full, please empty data\");\n showNotification(`errors.LOCALSTORAGE_FULL`, 'warning');\n }\n\n resolve()\n })\n .catch(err => reject(err));\n })\n)\n\nconst checkManual = (objs, type, Parent) => {\n const { fetchStart, showNotification, fetchEnd } = Parent.props;\n\n let manual = JSON.parse(localStorage.getItem(`manual${type}`));\n let promises = [];\n fetchStart();\n\n Object.keys(objs).forEach(key => {\n if( manual[key] === undefined ||\n manual[key] === null ){\n promises.push(getObj(`/manuals/${objs[key].id}`, key, type, showNotification))\n }\n else if( !((manual[key].id === objs[key].id) &&\n (manual[key].updatedAt === objs[key].updatedAt)) ) {\n promises.push(getObj(`/manuals/${manual[key].id}`, key, type, showNotification))\n }\n delete manual[key];\n });\n\n Promise.all(promises).then( () => {\n const to_delete = Object.keys(manual);\n let newManual = JSON.parse(localStorage.getItem(`manual${type}`));\n \n if(to_delete.length > 0) {\n to_delete.forEach(key => {\n delete newManual[key];\n })\n try {\n localStorage.setItem(`manual${type}`, JSON.stringify(newManual));\n }\n catch (e) {\n console.log(\"Local Storage is full, please empty data\");\n showNotification(`errors.LOCALSTORAGE_FULL`, 'warning');\n }\n }\n\n Parent.changeState(type, newManual);\n })\n .catch(err => {\n if(err.error && err.error.code)\n showNotification(`errors.${err.error.code}`, 'warning');\n else\n showNotification(`errors.SOMETHING`, 'warning');\n })\n .finally(_ => fetchEnd());\n}\n\n// check titles\nconst check = (filter, type, Parent) => {\n let manual = localStorage.getItem(`manual${type}`);\n const { fetchStart, showNotification, fetchEnd } = Parent.props;\n\n if(manual === null || manual === undefined) {\n try {\n localStorage.setItem(`manual${type}`, JSON.stringify({}));\n }\n catch (e) {\n console.log(\"Local Storage is full, please empty data\");\n showNotification(`errors.LOCALSTORAGE_FULL`, 'warning');\n }\n }\n\n fetchStart(); \n\n getTitles(`/manuals`, filter, type).then( (result) => {\n Parent.changeState(type, result); // Pode já mostrar os titulos\n checkManual(result, type, Parent);\n })\n .catch(err => {\n if(err.error && err.error.code)\n showNotification(`errors.${err.error.code}`, 'warning');\n else\n showNotification(`errors.SOMETHING`, 'warning');\n })\n .finally(_ => fetchEnd());\n}\n\nexport const startCheck = (lang, Parent) => {\n let filter = {\n where: {\n and: [\n {subsection: null},\n {language: lang}\n ]\n },\n fields:{\n text: null\n }\n }\n check(filter, `sections`, Parent)\n\n filter = {\n where: {\n and: [\n {language: lang},\n {subsection: {\n neq: null\n }}\n ]\n },\n fields: {\n text: null\n }\n }\n check(filter, `subsections`, Parent)\n}\n\nexport const editObj = (body, id, closeModal, type, Parent, reset = false) => {\n const headers = new Headers({\n Accept: 'application/json',\n \"Content-Type\": \"application/json\"\n });\n const { fetchStart, showNotification, fetchEnd } = Parent.props;\n fetchStart(); \n\n dataFetch('PATCH', `/manuals/${id}`, headers, JSON.stringify(body))\n .then((result) => {\n\n let manual = JSON.parse(localStorage.getItem(`manual${type}`));\n const section = manual[result.id].section;\n manual[result.id] = result;\n\n try {\n localStorage.setItem(`manual${type}`, JSON.stringify(manual));\n }\n catch (e) {\n console.log(\"Local Storage is full, please empty data\");\n showNotification(`errors.LOCALSTORAGE_FULL`, 'warning');\n }\n Parent.changeState(type, manual);\n\n if(type === \"sections\") {\n let manualSub = JSON.parse(localStorage.getItem(`manualsub${type}`));\n let promises = [];\n Object.keys(manualSub)\n .filter(key => manualSub[key].section === section)\n .forEach(key => {\n promises.push(getObj(`/manuals/${manualSub[key].id}`, key, `sub${type}`, showNotification));\n });\n Promise.all(promises).then( () => {\n manualSub = JSON.parse(localStorage.getItem(`manualsub${type}`));\n Parent.changeState(`sub${type}`, manualSub);\n closeModal();\n })\n .catch(err => {\n if(err.error && err.error.code)\n showNotification(`errors.${err.error.code}`, 'warning');\n else\n showNotification(`errors.SOMETHING`, 'warning');\n })\n .finally(_ => fetchEnd());\n }\n else {\n closeModal();\n }\n if(reset)\n reset();\n })\n .catch(err => {\n if(err.error && err.error.code)\n showNotification(`errors.${err.error.code}`, 'warning');\n else\n showNotification(`errors.SOMETHING`, 'warning');\n })\n .finally(_ => fetchEnd());\n}\n\nexport const createObj = (body, closeModal, type, Parent, reset = false) => {\n const headers = new Headers({\n Accept: 'application/json',\n \"Content-Type\": \"application/json\"\n });\n \n const { fetchStart, showNotification, fetchEnd } = Parent.props;\n fetchStart(); \n\n dataFetch('POST', '/manuals', headers, JSON.stringify(body))\n .then((result) => {\n \n let manual = JSON.parse(localStorage.getItem(`manual${type}`));\n manual[result.id] = result;\n\n try {\n localStorage.setItem(`manual${type}`, JSON.stringify(manual));\n }\n catch (e) {\n console.log(\"Local Storage is full, please empty data\");\n showNotification(`errors.LOCALSTORAGE_FULL`, 'warning');\n }\n Parent.changeState(type, manual);\n closeModal();\n if(reset)\n reset();\n })\n .catch(err => { \n if(err.error && err.error.code)\n showNotification(`errors.${err.error.code}`, 'warning');\n else\n showNotification(`errors.SOMETHING`, 'warning');\n })\n .finally(_ => fetchEnd());\n}\n\nexport const removeObj = (id, type, Parent) => {\n const { fetchStart, showNotification, fetchEnd } = Parent.props;\n fetchStart(); \n \n dataFetch('DELETE', `/manuals/${id}`)\n .then((result) => {\n let manual = JSON.parse(localStorage.getItem(`manual${type}`));\n delete manual[id];\n\n try {\n localStorage.setItem(`manual${type}`, JSON.stringify(manual));\n }\n catch (e) {\n console.log(\"Local Storage is full, please empty data\");\n showNotification(`errors.LOCALSTORAGE_FULL`, 'warning');\n }\n Parent.changeState(type, manual);\n })\n .catch(err => {\n if(err.error && err.error.code)\n showNotification(`errors.${err.error.code}`, 'warning');\n else\n showNotification(`errors.SOMETHING`, 'warning');\n })\n .finally(_ => fetchEnd());\n}\n\nexport const updateObj = (id, body, type, Parent) => {\n const headers = new Headers({\n Accept: 'application/json',\n \"Content-Type\": \"application/json\"\n });\n\n const { fetchStart, showNotification, fetchEnd } = Parent.props;\n fetchStart(); \n \n dataFetch('PATCH', `/manuals/${id}`, headers, JSON.stringify(body))\n .then((result) => {\n let manual = JSON.parse(localStorage.getItem(`manual${type}`));\n manual[result.id] = result;\n\n try {\n localStorage.setItem(`manual${type}`, JSON.stringify(manual));\n }\n catch (e) {\n console.log(\"Local Storage is full, please empty data\");\n showNotification(`errors.LOCALSTORAGE_FULL`, 'warning');\n }\n Parent.changeState(type, manual);\n })\n .catch(err => {\n console.log(err)\n if(err.error && err.error.code)\n showNotification(`errors.${err.error.code}`, 'warning');\n else\n showNotification(`errors.SOMETHING`, 'warning');\n })\n .finally(_ => fetchEnd());\n}\n","import React, {Component} from 'react';\nimport {\n Button,\n fetchStart,\n fetchEnd,\n showNotification \n} from 'react-admin'\nimport {\n Edit as EditIcon,\n Save as SaveIcon\n} from '@material-ui/icons';\nimport ReactQuill from 'react-quill';\nimport 'react-quill/dist/quill.snow.css';\nimport { updateObj } from './localStorage'\nimport { connect } from 'react-redux';\nimport dataFetch from '../../providers/dataFetch';\nimport { URL } from '../../Configuration';\nimport { storage } from 'react-admin-loopback';\n\nconst TOKEN = \"{*ACCESS_TOKEN*}\";\n\nclass ManualInfo extends Component{\n constructor(props){\n super(props);\n this.state = {\n isEditing: false,\n text: ''\n };\n }\n\n static getDerivedStateFromProps(props, state){\n if(props.manualEntry && props.manualEntry.text && state.text === '') {\n if(props.manualEntry.text != null)\n state.text = props.manualEntry.text.split(TOKEN).join(`access_token=${storage.load('lbtoken').id}`);\n }\n return state;\n }\n\n handleClick = () => { \n if(!this.state.isEditing) {\n this.setState({ isEditing: true });\n }\n else {\n let data = this.props.manualEntry;\n \n let txt = this.state.text;\n const regex = /(<img\\s?src.*?\\?)(access_token=.*?)(\">)/i;\n\n while(txt.match(regex)) {\n txt = txt.replace(regex, \"$1\"+TOKEN+\"$3\");\n }\n\n data.text = txt;\n\n this.changeState = this.props.changeState;\n updateObj(data.id, data, this.props.type, this);\n this.setState({ isEditing: false });\n }\n }\n\n handleChange = (value) => {\n if(value != null) {\n const new_text = value.split(TOKEN).join(`access_token=${storage.load('lbtoken').id}`);\n this.setState({ text: new_text });\n }\n }\n \n imageHandler() {\n const input = document.createElement('input');\n\n input.setAttribute('type', 'file');\n input.setAttribute('accept', 'image/*');\n input.click();\n\n input.onchange = async () => {\n const file = input.files[0];\n const formData = new FormData();\n\n formData.append('file', file);\n\n // Save current cursor state\n const range = this.quill.getSelection(true);\n\n // Insert temporary loading placeholder image\n this.quill.insertEmbed(range.index, 'image', `${ window.location.origin }/images/loaders/placeholder.gif`); \n\n // Move cursor to right side of image (easier to continue typing)\n this.quill.setSelection(range.index + 1);\n \n const headers = new Headers({\n Accept: 'application/json',\n });\n\n dataFetch('POST', '/manual_files/upload', headers, formData)\n .then(result => {\n const res = `${URL}${result.filePath}?access_token=${storage.load('lbtoken').id}`\n \n // Remove placeholder image\n this.quill.deleteText(range.index, 1);\n\n // Insert uploaded image\n this.quill.insertEmbed(range.index, 'image', res); \n });\n }\n }\n\n modules = {\n toolbar: {\n container: [\n [{ 'font': [] }],\n [{ 'header': [1, 2, 3, 4, 5, 6, false] }],\n ['bold', 'italic', 'underline','strike', 'blockquote'],\n [{ 'align': [] }],\n [{ 'size': ['small', false, 'large', 'huge'] }],\n [{'list': 'ordered'}, {'list': 'bullet'}, {'indent': '-1'}, {'indent': '+1'}],\n [{ 'color': [] }, { 'background': [] }],\n ['link', 'image'],\n ['clean'],\n ], // Selector for toolbar container\n handlers: {\n image: this.imageHandler\n }\n }\n };\n\n componentDidMount() {\n const {text} = this.props.manualEntry;\n if(text != null) {\n const new_text = text.split(TOKEN).join(`access_token=${storage.load('lbtoken').id}`);\n this.setState({ text: new_text });\n }\n }\n\n render(){\n const {isEditing, text} = this.state;\n\n return <div style={{paddingLeft: '24px'}}>\n {this.props.permissions === 'sysadmin' ?\n <div> \n <Button onClick={this.handleClick} label={isEditing ? 'ra.action.save' : 'ra.action.edit'}>{isEditing ? <SaveIcon/> : <EditIcon/>}</Button>\n {isEditing ? \n <ReactQuill \n theme=\"snow\" \n value={text}\n onChange={this.handleChange}\n modules={this.modules}\n /> \n : \n <ReactQuill \n theme=\"snow\" \n value={text}\n readOnly\n modules={{toolbar: false}}\n />}\n </div>\n :\n <ReactQuill \n theme=\"snow\" \n value={text}\n readOnly\n modules={{toolbar: false}}\n />\n }\n </div>\n }\n}\n\nconst enhance = connect(null, {\n showNotification,\n fetchStart,\n fetchEnd\n});\n\nexport default enhance(ManualInfo);","import React, { Component } from 'react';\nimport {\n Button,\n} from 'react-admin';\nimport {\n ListItem,\n ListItemText\n} from '@material-ui/core';\nimport EditIcon from '@material-ui/icons/Edit';\nimport ManualInfo from './ManualInfo';\n\nclass ManualSubsection extends Component {\n state = {\n subsectionOpen : false\n };\n \n handleClick = () => {\n if(!this.state.subsectionOpen) {\n this.setState({ subsectionOpen: true });\n }\n else {\n this.setState({ subsectionOpen: false });\n }\n }\n\n handleEditClick = () => {\n this.props.onEdit(this.props.subsection);\n }\n\n render(){\n const { subsection, permissions, changeState } = this.props;\n\n return (\n <div style={{marginRight: '16px', marginLeft: '16px'}}>\n <div style={{display: 'flex', width:'100%', flexDirection: 'row'}}>\n <ListItem style={{flex:1}} button onClick={this.handleClick}>\n <ListItemText secondary={`${subsection.section}.${subsection.subsection} ${subsection.title}`}/>\n </ListItem>\n {this.props.permissions === 'sysadmin' && <Button onClick={this.handleEditClick} label={'ra.action.edit'}>{<EditIcon/>}</Button>}\n </div>\n {this.state.subsectionOpen && <ManualInfo changeState={changeState} type={\"subsections\"} manualEntry={subsection} permissions={permissions}/>}\n </div>\n )\n }\n}\n\nexport default ManualSubsection;","export const OPEN_SECTION_MODAL = 'OPEN_SECTION_MODAL';\nexport const OPEN_SUBSECTION_MODAL = 'OPEN_SUBSECTION_MODAL';\nexport const CLOSE_MANUAL_MODALS = 'CLOSE_MANUAL_MODALS';\nexport const EDIT_SECTION = 'SELECT_SECTION';\nexport const EDIT_SUBSECTION = 'SELECT_SUBSECTION';\n\nexport const openSectionModal = (sectionId) => ({\n type: OPEN_SECTION_MODAL,\n payload: sectionId\n});\n\nexport const openSubSectionModal = (subSectionId) => ({\n type: OPEN_SUBSECTION_MODAL,\n payload: subSectionId\n});\n\nexport const closeManualModals = () => ({\n type: CLOSE_MANUAL_MODALS\n});\n\nexport const editingSection = (section) => ({\n type: EDIT_SECTION,\n payload: section\n})\n\nexport const editingSubSection = (subSection) => ({\n type: EDIT_SUBSECTION,\n payload: subSection\n})","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\n\nimport {\n ListItem, Collapse\n} from '@material-ui/core';\n\nimport compose from 'recompose/compose';\n\nimport {\n Button,\n NumberInput,\n SimpleForm,\n TextInput,\n minValue,\n required,\n translate,\n fetchStart,\n fetchEnd,\n showNotification \n} from 'react-admin';\n\nimport { reset as resetFormAction } from 'redux-form';\nimport AddIcon from '@material-ui/icons/Add';\nimport EditIcon from '@material-ui/icons/Edit';\n\nimport {\n SimpleModal\n} from '../../components';\n\nimport MyToolbar from '../../components/Toolbar/CustomToolbar';\nimport ManualSubsection from './ManualSubsection';\nimport ManualInfo from \"./ManualInfo\";\n\nimport {\n openSubSectionModal as openSubSectionModalAction,\n closeManualModals as closeManualModalsAction,\n editingSubSection as editingSubsectionAction\n} from './actions';\n\nimport { createObj, editObj, removeObj } from './localStorage'\n\nclass ManualSection extends Component {\n constructor(props) {\n super(props);\n this.state = {\n subsectionOpen: false,\n editing: false\n };\n this.deleteOff = this.deleteOff.bind(this);\n this.resetFields = this.resetFields.bind(this);\n\n }\n resetFields() {\n this.props.reset(\"subsection\");\n }\n addSubSection = (data) => {\n this.changeState = this.props.changeState;\n const isEditing = this.props.editingSubsection;\n if(!isEditing) {\n data.id = null;\n data.section = this.props.section.section;\n data.language = this.props.language;\n data.text = null;\n createObj(data, this.props.closeModal, \"subsections\", this, this.resetFields);\n // this.props.reset(\"subsection\");\n }\n else {\n editObj(data, this.props.editingSubsection.id, this.props.closeModal, \"subsections\", this, this.resetFields); \n }\n }\n\n handleClick = () => {\n if(!this.state.subsectionOpen) {\n this.setState({ subsectionOpen: true });\n }\n else { \n this.setState({ subsectionOpen: false });\n }\n }\n\n handleEditClick = () => {\n this.props.onEdit(this.props.section);\n }\n\n deleteSubsection = (data) => { // Remove section\n this.changeState = this.props.changeState;\n removeObj(data.id, \"subsections\", this);\n }\n \n deleteOff() { // disable editing -> remove button\n this.setState({ editing: false });\n this.props.closeModal();\n }\n\n filterData = (data, language) => {\n const filteredData = {};\n for(var manualKey in data){\n if(data[manualKey] !== undefined){\n if(data[manualKey].language === language && data[manualKey].section === this.props.section.section && data[manualKey].subsection !== null){\n filteredData[manualKey] = data[manualKey] ;\n }\n }\n };\n return filteredData;\n }\n\n sort = (a, b) => {\n if(parseInt(a.subsection) < parseInt(b.subsection)) return -1;\n if(parseInt(a.subsection) === parseInt(b.subsection)) return 0; \n if(parseInt(a.subsection) > parseInt(b.subsection)) return 1;\n }\n\n handleAddSubsection = () => {\n this.props.openSubSectionModal(this.props.section.id);\n }\n\n render() {\n const { closeModal, \n editingSubsection, \n goEditSubsection, \n language, \n openSubSectionModal, \n permissions, \n section, \n subSectionModalOpen, \n subsections, \n translate } = this.props;\n\n const { subsectionOpen, editing } = this.state;\n const filteredSubsections = this.filterData(subsections, language);\n return <div>\n <div style={{display: 'flex', width:'100%', flexDirection: 'row'}}>\n <ListItem style={{flex:1}} button divider onClick={this.handleClick}>{this.props.section.section}. {this.props.section.title}</ListItem>\n {permissions === 'sysadmin' && <Button onClick={this.handleEditClick} label={'ra.action.edit'}>{<EditIcon/>}</Button>}\n </div>\n <Collapse in={subsectionOpen} unmountOnExit>\n { <ManualInfo changeState={this.props.changeState} type={\"sections\"} manualEntry={section} permissions={permissions}/> }\n {\n Object.values(filteredSubsections).sort(this.sort).map(subsection => (\n <ManualSubsection changeState={this.props.changeState} key={subsection.id} subsection={subsection} onEdit={(subsection) => {openSubSectionModal(section.id); goEditSubsection(subsection); this.setState({editing: true})}} permissions={permissions}/>\n ))\n }\n {subsectionOpen && permissions === 'sysadmin' && <Button style={{paddingLeft:'24px'}} label='containers.manual.addSubSection' onClick={this.handleAddSubsection}><AddIcon/></Button>}\n </Collapse>\n { permissions === 'sysadmin' &&\n <SimpleModal open={subSectionModalOpen === section.id} onClose={closeModal} title={translate('containers.manual.addSubSection')} maxWidth='sm'>\n <SimpleForm toolbar={\n <MyToolbar editing={editing} \n toDelete={this.deleteSubsection } \n toUnmount={this.deleteOff} \n /> } \n form='subsection' \n resource='manuals' \n save={this.addSubSection} \n record={editingSubsection ? editingSubsection : {}}\n >\n <TextInput label={translate('containers.manual.fields.title')} source='title' validate={required()} />\n <NumberInput label={translate('containers.manual.fields.subsection')} source='subsection' validate={[required(), minValue(1)]} />\n </SimpleForm>\n </SimpleModal>\n }\n </div>\n }\n}\n\nconst mapStateToProps = state => ({\n language: state.i18n.locale,\n subSectionModalOpen: state.manual.subSectionModalOpen,\n editingSubsection: state.manual.subsection,\n});\n\nconst enhance = compose(\n translate,\n connect(mapStateToProps, {\n closeModal: closeManualModalsAction,\n openSubSectionModal: openSubSectionModalAction,\n goEditSubsection: editingSubsectionAction,\n reset: resetFormAction,\n fetchStart,\n fetchEnd,\n showNotification \n })\n);\n\nexport default enhance(ManualSection);","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport compose from 'recompose/compose';\nimport {\n Card,\n List,\n} from '@material-ui/core';\n\nimport {\n Button,\n NumberInput,\n SimpleForm,\n TextInput,\n Title,\n WithPermissions,\n minValue,\n required,\n translate,\n fetchStart,\n fetchEnd,\n showNotification \n} from 'react-admin';\n\nimport AddIcon from '@material-ui/icons/Add';\n\nimport { reset as resetFormAction } from 'redux-form';\n\nimport {\n SimpleModal\n} from '../../components';\n\nimport ManualSection from './ManualSection';\nimport MyToolbar from '../../components/Toolbar/CustomToolbar';\n\nimport {\n openSectionModal as openSectionModalAction,\n closeManualModals as closeManualModalsAction,\n editingSection as editingSectionAction\n} from './actions';\n\nimport { startCheck, createObj, editObj, removeObj } from './localStorage';\n\nclass Manual extends Component {\n constructor(props) {\n super(props);\n this.state = {\n sections: {},\n subsections: {},\n editing: false\n };\n this.changeState = this.changeState.bind(this);\n this.resetFields = this.resetFields.bind(this);\n this.deleteOff = this.deleteOff.bind(this);\n }\n\n deleteOff() { // disable editing -> remove button\n this.setState({ editing: false });\n this.props.closeModal();\n }\n\n componentDidMount() {\n startCheck(this.props.language, this);\n }\n\n changeState(type, newState) { // update manual\n this.setState({ [type]: newState });\n }\n resetFields() {\n this.props.reset(\"section\");\n }\n addSection = (data) => { // Add / Edit section (just Title and SectionId)\n data.subsection = null;\n const isEditing = this.props.editingSection;\n if(!isEditing) {\n data.id = null;\n data.language = this.props.language;\n data.text = null;\n createObj(data, this.props.closeModal, \"sections\", this, this.resetFields);\n // this.props.reset(\"section\");\n }\n else {\n editObj(data, this.props.editingSection.id, this.props.closeModal, \"sections\", this, this.resetFields);\n // this.props.reset(\"section\");\n }\n }\n\n deleteSection = (data) => { // Remove section\n removeObj(data.id, \"sections\", this);\n }\n\n filterData = (data, language) => {\n const filteredData = {};\n for(var manualKey in data){\n if(data[manualKey] !== undefined){\n if(data[manualKey].language === language && data[manualKey].subsection === null){\n filteredData[manualKey] = data[manualKey];\n }\n }\n };\n return filteredData;\n }\n\n sort = (a, b) => {\n if(parseInt(a.section) < parseInt(b.section)) return -1;\n if(parseInt(a.section) === parseInt(b.section)) return 0; \n if(parseInt(a.section) > parseInt(b.section)) return 1;\n }\n\n handleAddClick = () => {\n this.props.openSectionModal(true);\n }\n\n render(){\n const { closeModal, editingSection, goEditSection, language, openSectionModal, sectionModalOpen, title, translate } = this.props;\n const { sections, subsections, editing } = this.state;\n const filteredSections = this.filterData(sections, language);\n return <WithPermissions \n render={({permissions}) => <Card>\n <Title title={title} defaultTitle={'Manual'}/>\n <List style={{marginRight: '16px', marginLeft: '16px'}}>\n {\n Object.values(filteredSections).sort(this.sort).map(section => { return(\n <ManualSection changeState={this.changeState} key={section.id} subsections={subsections} section={section} onEdit={ (section) => {openSectionModal(section.id); goEditSection(section); this.setState({editing: true})} } permissions={permissions}/>\n )})\n }\n </List>\n {permissions === 'sysadmin' && <div>\n <Button style={{marginLeft:'24px', marginBottom:'16px'}} label='containers.manual.addSection' onClick={this.handleAddClick}><AddIcon/></Button>\n <SimpleModal open={sectionModalOpen === true || editingSection !== null} onClose={closeModal} title={translate('containers.manual.addSection')} maxWidth='sm'>\n <SimpleForm toolbar={\n <MyToolbar editing={editing} \n toDelete={this.deleteSection } \n toUnmount={this.deleteOff}\n /> } \n form='section' \n save={this.addSection} \n record={editingSection ? editingSection : {}}\n >\n <TextInput label={translate('containers.manual.fields.title')} source='title' validate={required()} />\n <NumberInput label={translate('containers.manual.fields.section')} source='section' validate={[required(), minValue(1)]} />\n </SimpleForm>\n </SimpleModal>\n </div>}\n </Card>}\n />\n }\n}\n\nconst mapStateToProps = state => ({\n language: state.i18n.locale,\n sectionModalOpen: state.manual.sectionModalOpen,\n editingSection: state.manual.section\n});\n\nconst enhance = compose(\n translate,\n connect(mapStateToProps, {\n closeModal: closeManualModalsAction,\n goEditSection: editingSectionAction,\n openSectionModal: openSectionModalAction,\n reset: resetFormAction,\n showNotification,\n fetchStart,\n fetchEnd\n })\n);\n\nexport default enhance(Manual);","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport {\n GET_LIST,\n DateField,\n TextField,\n crudGetManyReference as crudGetManyReferenceAction,\n fetchEnd,\n fetchStart,\n nameRelatedTo\n} from 'react-admin';\n\nimport {\n ResponsiveList\n} from '../../components';\nimport { dataProvider } from '../../providers';\n\n// const prop_order = [\n// 'record',\n// 'latitude',\n// 'longitude',\n// 'satellites',\n// 'nb_gnss_sat',\n// 'height',\n// 'payload',\n// 'speed',\n// 'course',\n// 'validity',\n// 'hdop',\n// 'vdop',\n// 'pdop',\n// 'sep',\n// 'sampleimu',\n// 'temperature',\n// 'temp_imu',\n// 'sampletemperature',\n// 'samplepressure',\n// 'temp_1',\n// 'temp_2',\n// 'temp_3',\n// 'temp_4',\n// 'atm',\n// 'Hm0',\n// 'Tm01',\n// 'Tm02',\n// 'Tp',\n// 'Mdir',\n// 'PkDir',\n// 'DirSpr',\n// 'PkDirSpr',\n// 'WmaxH',\n// 'bat',\n// 'rssi'\n// ];\n\n// const remove_props = [\n// \"gpstime\", \n// \"timestamp\", \n// \"derivedsetId\", \n// \"datasetId\", \n// \"id\", \n// \"position\", \n// \"serialNumber\", \n// \"properties\", \n// \"references\", \n// \"year\", \n// \"second\", \n// \"day\", \n// \"hour\", \n// \"minute\", \n// \"month\"\n// ];\n\nclass EquipObs extends Component {\n\n constructor(props) {\n super(props)\n this.state = {\n observedProperties: []\n }\n\n this.fetchObservedProperties()\n\n }\n\n fetchObservedProperties() {\n const equipmentId = parseInt(this.props.match.params.id)\n const {fetchEnd, fetchStart} = this.props;\n\n const observedPropertiesQuery = {\n filter: {\n id: equipmentId\n },\n sort: {\n field: 'id',\n order: 'ASC'\n },\n pagination: {\n page: 0,\n perPage: -1\n },\n fields: [\"equipmentmodelId\", \"id\"],\n include: {\n relation: \"equipmentmodel\",\n scope: {\n fields: [\"observedproperties\"],\n include: {\n relation: \"observedproperties\"\n }\n }\n }\n };\n\n fetchStart();\n dataProvider(GET_LIST, 'equipment', observedPropertiesQuery)\n .then(({ data }) => {\n const observedProperties = data[0].equipmentmodel.observedproperties;\n //Do not change the order of this two lines, for an unknown reason state change needs to happen before fetchEnd\n this.setState({ observedProperties })\n fetchEnd();\n })\n .catch(error => {\n console.error(error)\n fetchEnd();\n })\n\n\n }\n\n componentDidMount() {\n if (!this.props.relatedDatasets.length) {\n const equipmentId = parseInt(this.props.match.params.id)\n this.props.crudGetManyReference('datasets', 'equipmentId', equipmentId, nameRelatedTo('datasets', equipmentId, 'equipment', 'equipmentId'), { page: 1, perPage: 0 }, { sort: { field: 'id', order: 'ASC' } }, {})\n }\n }\n\n render() {\n\n const { crudGetManyReference, relatedDatasets, staticContext, fetchEnd, fetchStart, ...props } = this.props;\n const { observedProperties } = this.state;\n const relDtsQuery = relatedDatasets.map(datasetId => ({ datasetId }));\n\n const filter = {\n or: relDtsQuery\n };\n\n return !!relDtsQuery.length && <ResponsiveList basePath='/observations' sort={{ field: 'time', order: 'ASC'}} perPage={{ small: 10, medium: 25 }} hasCreate={false} hasEdit={false} hasList={true} hasShow={false} resource='observations' {...props} filter={relDtsQuery.length ? filter : null}>\n <DateField source=\"timestamp\" showTime />\n {\n observedProperties.length > 0 && observedProperties.map((property, index) => {\n return <TextField key={index} source={property.name} sortable={false}/>\n })\n }\n </ResponsiveList>\n\n }\n\n}\n\nconst mapStateToProps = (state, props) => {\n const equipDtsRelLoc = state.admin.references.oneToMany[nameRelatedTo('datasets', parseInt(props.match.params.id), 'equipment', 'equipmentId')];\n\n return {\n data: state.admin.resources.observations.data,\n relatedDatasets: (equipDtsRelLoc && Object.values(equipDtsRelLoc.ids)) || []\n }\n}\n\nexport default connect(mapStateToProps, {\n crudGetManyReference: crudGetManyReferenceAction,\n fetchEnd,\n fetchStart\n})(EquipObs)","import React, { Component } from 'react';\nimport { compose } from 'recompose';\nimport { connect } from 'react-redux';\nimport {\n Button,\n Title,\n crudGetOne as crudGetOneAction,\n fetchEnd,\n fetchStart,\n showNotification,\n translate\n} from 'react-admin';\nimport { Link } from 'react-router-dom';\nimport {\n ShowChart as ChartIcon,\n ViewList as TableIcon,\n List as DatasetIcon\n} from '@material-ui/icons';\nimport { Typography } from '@material-ui/core';\n\nimport { annotationsGeoJSON, toObservationDataSingleWAVY } from '../../factory';\nimport dataFetch from '../../providers/dataFetch';\nimport TimeControlledMap from '../../components/map/TimeControlledMap';\nimport { WAVY_OCEAN_MODELS } from '../../Configuration';\nimport { refreshAnnotations } from './actions'\n\nclass DerivedSetMap extends Component {\n\n state = {\n derivedsetData: null,\n geoObservations: undefined,\n observationsLoaded: false,\n annotationsLoaded: false,\n originalObservations: undefined,\n load: false,\n parameters: false,\n }\n getModelProperties = equipmentId => {\n return new Promise((resolve, reject) => {\n\n dataFetch('GET', `/equipment/${equipmentId}`)\n .then((equipment) => {\n const filter = JSON.stringify({\n include: 'observedproperty',\n where: { equipmentmodelId: equipment.equipmentmodelId }\n });\n return dataFetch('GET', `/modelproperties?filter=${filter}`)\n })\n .then(data => {\n if (data) {\n resolve(data)\n } else {\n reject();\n }\n })\n .catch(e => reject(e));\n });\n };\n\n loadData = () => {\n const { fetchEnd, fetchStart, match } = this.props;\n fetchStart();\n let _observations, geoData;\n dataFetch('GET', `/derivedsets/${match.params.id}/observations?filter=${JSON.stringify({ where: { record: 0 }, limit: 0, order: 'timestamp ASC' })}`)\n .then(observations => {\n _observations = observations;\n\n return this.getModelProperties(this.props.derivedset.equipmentId)\n })\n .then(properties => {\n geoData = toObservationDataSingleWAVY({\n observations: _observations,\n observedProperties: properties\n });\n\n this.setState({ geoObservations: geoData, originalObservations: _observations, derivedsetData: geoData, observationsLoaded: true });\n this.props.refreshAnnotations(match.params.id);\n })\n .catch(err => {\n console.error(err)\n this.props.showNotification('containers.derivedsets.map.loadObsError', 'warning');\n })\n .finally(_ => {\n fetchEnd();\n });\n }\n\n componentDidMount() {\n const { crudGetOne, derivedset, match } = this.props;\n\n if (!derivedset) {\n crudGetOne('derivedsets', match.params.id, 'derivedsets');\n }\n else {\n this.processData();\n }\n }\n\n processData = () => {\n const { derivedset } = this.props;\n let parameters = false;\n\n if (derivedset.equipmentId) {\n dataFetch('GET', `/equipment/${derivedset.equipmentId}`)\n .then(equipment => {\n if (equipment)\n parameters = !WAVY_OCEAN_MODELS.includes(equipment.equipmentmodelId);\n })\n .finally(_ => {\n this.setState({ load: true, parameters });\n this.loadData();\n });\n\n } else {\n this.setState({ load: true });\n this.loadData();\n }\n }\n\n componentDidUpdate(oldProps) {\n const { derivedset } = this.props;\n const { load } = this.state;\n\n if (derivedset && !load) {\n this.processData();\n }\n // if (this.state.observationsLoaded && this.props.annotationsAction && JSON.stringify(oldProps.annotationsAction) !== JSON.stringify(this.props.annotationsAction)) {\n if (this.state.observationsLoaded && this.props.annotationsAction && oldProps.annotationsAction !== this.props.annotationsAction) {\n \n const geoData = { ...this.state.geoObservations };\n // const observations = {...this.state.observations};\n let obs_object = {};\n this.state.originalObservations.forEach(({ position, timestamp, serialNumber }) => {\n obs_object[new Date(timestamp).getTime()] = {\n position,\n serialNumber\n };\n });\n const tagsGeoJSON = annotationsGeoJSON(obs_object, this.props.annotationsAction);\n geoData.features = geoData.features.concat(tagsGeoJSON);\n\n this.setState({ derivedsetData: geoData, annotationsLoaded: true, observationsLoaded: false });\n }\n\n if (this.state.geoObservations && this.props.annotationsAction && JSON.stringify(oldProps.annotationsAction) !== JSON.stringify(this.props.annotationsAction)) {\n const geoData = { ...this.state.geoObservations };\n // const observations = {...this.state.observations};\n let obs_object = {};\n this.state.originalObservations.forEach(({ position, timestamp, serialNumber }) => {\n obs_object[new Date(timestamp).getTime()] = {\n position,\n serialNumber\n };\n });\n const tagsGeoJSON = annotationsGeoJSON(obs_object, this.props.annotationsAction);\n geoData.features = geoData.features.concat(tagsGeoJSON);\n\n this.setState({ derivedsetData: geoData, annotationsLoaded: true, observationsLoaded: false });\n }\n }\n\n render() {\n const { translate, derivedset, match } = this.props;\n const { derivedsetData, parameters, annotationsLoaded } = this.state;\n\n return <div style={{ display: 'flex', flex: '1', flexDirection: 'column' }}>\n <Title title={translate('containers.derivedsets.map.name')} />\n <div style={{ marginBottom: '8px', display: 'flex', justifyContent: 'space-between' }}>\n <Typography variant='title' >{derivedset && derivedset.name}</Typography>\n <div>\n <Button style={{ marginRight: '8px' }} component={Link} label='pos.general.chart' to={`/derivedsets/${derivedset && derivedset.id}/charts`}><ChartIcon /></Button>\n <Button style={{ marginRight: '8px' }} component={Link} label='pos.general.table' to={`/derivedsets/${derivedset && derivedset.id}/show`}><TableIcon /></Button>\n <Button component={Link} label={translate('pos.general.list', { smart_count: 2 })} to={'/derivedsets'}><DatasetIcon /></Button>\n </div>\n </div>\n <TimeControlledMap annotation={true} parameters={parameters} refreshData={() => this.props.refreshAnnotations(match.params.id)} recordId={match.params.id} geodata={annotationsLoaded ? {...derivedsetData}: undefined} legend={derivedset && derivedset.name} />\n </div>\n }\n}\n\nconst mapStateToProps = (state, props) => ({\n derivedset: state.admin.resources.derivedsets.data[props.match.params.id],\n annotationsAction: state.annotations\n});\n\nconst enhance = compose(\n translate,\n connect(mapStateToProps, {\n crudGetOne: crudGetOneAction,\n fetchEnd,\n showNotification,\n fetchStart,\n refreshAnnotations\n })\n);\n\nexport default enhance(DerivedSetMap);","import React, { Component } from 'react';\nimport { Card, Switch, FormControlLabel, withStyles, Typography, CardActions } from '@material-ui/core'\nimport {\n Button,\n Title,\n showNotification,\n fetchEnd,\n fetchStart,\n translate\n} from 'react-admin';\nimport compose from 'recompose/compose';\nimport {Link} from 'react-router-dom';\nimport {\n List as DatasetIcon,\n Map as MapIcon,\n ViewList as TableIcon,\n} from '@material-ui/icons';\nimport { connect } from 'react-redux';\n\nimport dataFetch from '../../providers/dataFetch';\nimport { ReactChart } from '../../components';\n\nconst styles = {\n actions:{\n display: 'flex',\n justifyContent: 'space-between'\n },\n card:{\n display: 'flex',\n height: '100%',\n paddingTop: '2em',\n paddingBottom: '2em',\n paddingRight: '1em',\n paddingLeft: '1em',\n flexDirection: 'column'\n },\n flex: { display: 'flex', marginTop: '0em' },\n flexColumn: { display: 'flex', flexDirection: 'column' },\n leftCol: { flex: 1, marginRight: '1em' },\n singleCol: { marginTop: '2em', marginBottom: '2em' },\n welcome: { width: '100%' }\n};\nclass ChartsContainer extends Component {\n constructor(props) {\n super(props);\n this.rerenderParentCallback = this.rerenderParentCallback.bind(this);\n\n }\n getAnnotations = (derivedsetId) => {\n const filter = {\n where: {derivedsetId: derivedsetId},\n include: ['tags',\"intervals\"]\n };\n\n return new Promise((resolve, reject) => {\n dataFetch('GET', `/annotations?filter=${JSON.stringify(filter)}`)\n .then(data => resolve(data))\n .catch(err => reject(err));\n });\n };\n \n rerenderParentCallback() {\n const { match, fetchEnd, fetchStart } = this.props;\n\n const promises = [this.getAnnotations(match.params.id)];\n \n fetchStart();\n Promise.all(promises).then((values) => {\n\n let annotations = values[0];\n this.setState({ annotationsArray: annotations, });\n\n })\n .catch(_ => this.props.showNotification('ra.navigation.no_results'))\n .finally(_ => fetchEnd());\n this.forceUpdate();\n }\n state = {\n name: null,\n legend: [],\n chartData: [],\n annotationsArray: [],\n allowToAddAnnotations: undefined,\n parameters: false,\n annotations: false\n };\n\n componentDidMount() {\n const { match, fetchEnd, fetchStart } = this.props;\n\n // const filter = {\n // include: {\n // relation: \"dataset\", \n // scope: {\n // include: \"equipment\"\n // }\n // },\t\n // limit: 1\n // }\n\n // const getDerived = (derivedId) => {\n // return new Promise((resolve, reject) => {\n // dataFetch('GET', `/derivedsets/${derivedId}?filter=${JSON.stringify({include: 'equipment'})}`)\n // .then(derived => {\n // if (derived && !derived.error) {\n // return resolve(derived);\n // } else {\n // return reject();\n // }\n // })\n // .catch(err => reject(err));\n // });\n // }\n\n // const getModelProperties = (derivedId) => {\n // return new Promise((resolve, reject) => {\n // getDerived(derivedId)\n // .then(derived => {\n // this.setState({name: derived.name});\n // const { equipmentmodelId } = derived.equipment;\n // const filter = {\n // where: {equipmentmodelId: equipmentmodelId},\n // include: 'observedproperty'\n // };\n // return dataFetch('GET', `/modelproperties?filter=${JSON.stringify(filter)}`);\n // })\n // .then(modelproperties => resolve(modelproperties))\n // .catch(err => reject(err));\n // });\n // };\n const obs_filter = {\n /*where: {\n record: 0\n },*/\n order: [\"timestamp ASC\"]\n }\n const getObservations = (derivedId) => {\n return new Promise((resolve, reject) => {\n dataFetch('GET', `/derivedsets/${derivedId}/observations?filter=${JSON.stringify(obs_filter)}`)\n .then(data => resolve(data))\n .catch(err => reject(err));\n });\n };\n \n const promises = [\n // getModelProperties(match.params.id),\n getObservations(match.params.id),\n this.getAnnotations(match.params.id)\n ];\n \n fetchStart();\n Promise.all(promises).then((values) => {\n // const modelProperties = values[0];\n let observations = values[0];\n let annotations = values[1];\n\n const invisible_props = [\n \"datasetId\", \n \"derivedsetId\", \n \"id\", \n \"position\", \n \"record\", \n \"references\", \n \"timestamp\",\n \"serialNumber\",\n \"gpstime\",\n \"properties\",\n \"day\",\n \"hour\",\n \"latitude\",\n \"longitude\",\n \"minute\",\n \"month\",\n \"second\",\n \"year\",\n \"sampleimu\",\n \"samplepressure\",\n \"sampletemperature\",\n ];\n\n // let legend = modelProperties.filter(p => p.visible).map(p => p.observedproperty.name);\n let legend = Object.keys(observations[0]).filter(obs => !invisible_props.includes(obs));\n legend.unshift('timestamp');\n\n observations.forEach(observation => {\n observation.timestamp = new Date(observation.timestamp)\n Object.keys(observation).forEach(key => {\n if(!legend.includes(key))\n delete observation[key];\n });\n });\n\n this.setState({ \n chartData: observations, \n legend: legend,\n annotationsArray: annotations, \n });\n\n })\n .catch(_ => this.props.showNotification('ra.navigation.no_results'))\n .finally(_ => fetchEnd());\n }\n setAnnotationsOnOff = value => {\n this.setState({ allowToAddAnnotations: value });\n return value;\n };\n\n onChange = (event) => {\n this.setState({ [event.target.name]: event.target.checked });\n\n if(event.target.checked) {\n if(event.target.name === 'parameters')\n this.setState({ annotations: false });\n else\n this.setState({ parameters: false });\n }\n }\n\n render() {\n const { classes, translate } = this.props;\n const { chartData, legend, name, annotationsArray, annotations, parameters } = this.state;\n const derivedId = parseInt(this.props.match.params.id);\n const annotationsEnabled = false, parametersEnabled = true;\n\n return (\n <Card classes={{root:classes.card}} >\n <Title title={translate('containers.charts.name')} />\n <CardActions classes={{root:classes.actions}}>\n <Typography style={{alignSelf:'flex-start'}} variant='title' >{name}</Typography>\n <div style={styles.flex}>\n <div style={styles.leftCol}>\n <div style={styles.flex}>\n {parametersEnabled && <FormControlLabel\n control={<Switch checked={this.state.parameters} onChange={this.onChange} name=\"parameters\" />}\n label=\"Parameters\" />}\n {annotationsEnabled && <FormControlLabel\n control={<Switch checked={this.state.annotations} onChange={this.onChange} name=\"annotations\" />}\n label=\"Annotations\" />}\n\n <Button style={{marginRight:'8px'}} component={Link} label='pos.general.map' to={`/derivedsets/${derivedId}/map`}><MapIcon/></Button>\n <Button component={Link} label='pos.general.table' to={`/derivedsets/${derivedId}/show`}><TableIcon/></Button>\n <Button component={Link} label={translate('resources.derivedsets.name',{smart_count:2})} to={'/derivedsets'}><DatasetIcon/></Button>\n </div>\n </div>\n </div>\n </CardActions>\n <ReactChart data={chartData} recordId={derivedId} properties={legend} annotationsEnabled={annotationsEnabled} parametersEnabled={parametersEnabled}\n annotations={annotationsArray} rerenderParentCallback={this.rerenderParentCallback} allowToAddAnnotations={annotations} allowToAddParameters={parameters}/>\n </Card>\n )\n }\n};\n\nconst enhance = compose(\n translate,\n withStyles(styles),\n connect(null, {\n showNotification,\n fetchEnd,\n fetchStart\n })\n)\n\nexport default enhance(ChartsContainer);","import React, { Children, Component } from 'react';\nimport { reduxForm } from 'redux-form';\nimport { connect } from 'react-redux';\nimport compose from 'recompose/compose';\nimport classnames from 'classnames';\nimport {\n CardContentInner,\n FormInput,\n Toolbar, \n getDefaultValues, \n translate, \n REDUX_FORM_NAME \n} from 'react-admin';\n\nconst sanitizeRestProps = ({\n anyTouched,\n array,\n asyncBlurFields,\n asyncValidate,\n asyncValidating,\n autofill,\n blur,\n change,\n clearAsyncError,\n clearFields,\n clearSubmit,\n clearSubmitErrors,\n destroy,\n dirty,\n dispatch,\n form,\n handleSubmit,\n initialize,\n initialized,\n initialValues,\n pristine,\n pure,\n redirect,\n reset,\n resetSection,\n save,\n submit,\n submitFailed,\n submitSucceeded,\n submitting,\n touch,\n translate,\n triggerSubmit,\n undoable,\n untouch,\n valid,\n validate,\n ...props\n}) => props;\n\nexport class SimpleForm extends Component {\n handleSubmitWithRedirect = (redirect = this.props.redirect) =>\n this.props.handleSubmit(values => this.props.save(values, redirect));\n\n render() {\n const {\n basePath,\n children,\n className,\n formContentClassName,\n invalid,\n pristine,\n record,\n redirect,\n resource,\n saving,\n submitOnEnter,\n toolbar,\n undoable,\n version,\n ...rest\n } = this.props;\n\n return (\n <form\n className={classnames('simple-form', className)}\n {...sanitizeRestProps(rest)}\n >\n <CardContentInner key={version} className={formContentClassName}>\n {Children.map(children, input => (\n <FormInput\n basePath={basePath}\n input={input}\n record={record}\n resource={resource}\n />\n ))}\n </CardContentInner>\n {toolbar &&\n React.cloneElement(toolbar, {\n basePath,\n handleSubmitWithRedirect: this.handleSubmitWithRedirect,\n handleSubmit: this.props.handleSubmit,\n invalid,\n pristine,\n record,\n redirect,\n resource,\n saving,\n submitOnEnter,\n undoable,\n })}\n </form>\n );\n }\n}\n\nSimpleForm.defaultProps = {\n submitOnEnter: true,\n toolbar: <Toolbar />,\n};\n\nconst enhance = compose(\n connect((state, props) => ({\n form: props.form || REDUX_FORM_NAME,\n initialValues: getDefaultValues(state, props),\n saving: props.saving || state.admin.saving,\n })),\n translate, // Must be before reduxForm so that it can be used in validation\n reduxForm({\n destroyOnUnmount: false,\n enableReinitialize: true,\n keepDirtyOnReinitialize: true,\n })\n);\n\nexport default enhance(SimpleForm);","import { downloadCSV } from 'react-admin'\nimport { unparse as convertToCSV } from 'papaparse/papaparse.min'\nimport * as moment from 'moment'\n\nexport const datasetExporter = (name) => {\n return (records, fetchRelatedRecords) => {\n if (records.length > 0) {\n const removeProperties = ['id', 'timestamp', 'createdAt', 'updatedAt', 'annotationsCount', 'datasetId', 'position'];\n const fields = Object.keys(records[0]).filter(element => {\n return !removeProperties.includes(element);\n });\n\n const data = records.map(record => {\n return record;\n });\n\n downloadCSV(convertToCSV({ data, fields }), name);\n }\n };\n};\n\nexport const exporter = (relatedModelsObj = {}, exportName) => {\n \n return (data, fetchRelated, dispatch) => {\n const entries = Object.entries(relatedModelsObj)\n if(entries.length > 0 ){\n //Fetch the first related model\n fetchRelated(data, entries[0][0], entries[0][1])\n .then(dataWithRelation => {\n\n //For each data item add a new entry with name of related model and deletes entry with id\n data.forEach(item => {\n item[entries[0][0].match(/\\S[\\w-]+(?=-?id)/i)] = dataWithRelation[item[entries[0][0]]].name\n delete item[entries[0][0]]\n })\n\n //Removes de first related model\n delete relatedModelsObj[entries[0][0]]\n\n exporter(relatedModelsObj, exportName)(data, fetchRelated, dispatch)\n })\n \n }else{\n const exportData = data.map( item => {\n //Remove irrelevant data for CSV\n const { createdAt, updatedAt, ...relevantItem } = item\n \n //Fetch indexes of date or time strings\n const dateOrTimeIndexes = []\n const itemKeys = Object.keys(item)\n itemKeys.forEach((key, index) => {\n if(isKeyFromDateOrTimeString(key)) dateOrTimeIndexes.push(index)\n })\n\n //Iterates over found indexes and converts item value to simplified date or time string\n dateOrTimeIndexes.forEach((index) => {\n //Checks if value of date or time string is not null\n if( relevantItem[itemKeys[index]] ){\n const date = moment(relevantItem[itemKeys[index]])\n if( isKeyFromDateString(itemKeys[index]) ){\n relevantItem[itemKeys[index]] = getMomentDateString(date)\n }else{\n relevantItem[itemKeys[index]] = `${getMomentDateString(date)} ${getMomentTimeString(date)}`\n }\n }\n })\n\n Object.entries(relevantItem).forEach(entry => {\n //Sends properties of nested obj to root and deletes the nested object property\n boilerUpNestedObjToRoot(entry, relevantItem, '') \n }) \n \n return relevantItem\n }) \n \n const csv = convertToCSV({\n data: exportData,\n fields: Object.keys(exportData[0]),\n })\n\n downloadCSV(csv, exportName);\n\n }\n }\n}\n\nconst boilerUpNestedObjToRoot = (entry, root, cumulativeName) => {\n const nestedName = cumulativeName.length > 0 ? `${cumulativeName}.${entry[0]}` : entry[0]\n if( entry[1] instanceof Object){\n Object.entries(entry[1]).forEach(entry => {boilerUpNestedObjToRoot(entry, root, nestedName)})\n if(root[entry[0]]) delete root[entry[0]]\n\n }\n else{\n if(!root[nestedName]){\n root[nestedName] = entry[1]\n }\n }\n}\n\nconst isKeyFromDateOrTimeString = (value) => (\n value.includes('date') || value.includes('timestamp')\n)\n\nconst isKeyFromDateString = (value) => (\n value.includes('date')\n)\n\nconst getMomentDateString = date => ( date.utc().format('DD-MM-YYYY') )\nconst getMomentTimeString = time => ( time.utc().format('HH:mm:ss') )\n\nexport function hexToRgb(hex) {\n // Expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\n var shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n hex = hex.replace(shorthandRegex, function(m, r, g, b) {\n return r + r + g + g + b + b;\n });\n\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? `rgb(${parseInt(result[1], 16)},${parseInt(result[2], 16)},${parseInt(result[3], 16)})` : hex;\n}\n\nexport const rgbToHex = x => {\n if(x) return '#' + x.match(/\\d+/g).map(z => ((+z < 16)?'0':'') + (+z).toString(16)).join('');\n}","import React from 'react';\nimport {\n ExportButton,\n SaveButton\n} from 'react-admin';\nimport SearchIcon from '@material-ui/icons/Search'\n\nimport { datasetExporter } from '../../utils/util';\n\nexport default ({invalid, handleSubmitWithRedirect, redirect, saving, submitOnEnter, filter, sort, resource, data, ...props}) => {\n return <div style={{display: 'flex', flexDirection: 'row', alignItems: 'center'}}>\n <SaveButton\n style={{marginRight: '16px'}}\n variant='flat'\n handleSubmitWithRedirect={handleSubmitWithRedirect}\n invalid={invalid}\n redirect={redirect}\n saving={saving}\n submitOnEnter={submitOnEnter} \n label='containers.search.name'\n icon={<SearchIcon/>}\n />\n {Object.keys(data).length > 0 && <ExportButton style={{marginRight: '16px'}} filter={filter} sort={sort} resource={resource} maxResults={100000} exporter={datasetExporter('observations')}/>}\n </div>\n}","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport {\n Card,\n withStyles\n} from '@material-ui/core';\nimport {\n DateField,\n Pagination,\n ReferenceInput,\n SelectInput,\n TextField,\n Title,\n fetchEnd,\n fetchStart,\n required,\n translate\n} from 'react-admin';\n\nimport { } from '../../components';\n\nimport moment from 'moment';\nimport compose from 'recompose/compose';\nimport { storage } from 'react-admin-loopback';\n\nimport SearchObsSimpleForm from './CustomSimpleForm';\nimport { dataFetch } from '../../providers';\nimport { \n ResponsiveDatagrid,\n DateTimeInput\n} from '../../components';\nimport SearchObsToolbar from './SearchObsToolbar';\n\nimport { API_URL } from '../../Configuration';\n\nconst styles = {\n form: {\n display: 'flex',\n flexDirection: 'row',\n width: '100%',\n justifyContent: 'space-between'\n },\n formContent: {\n display: 'flex',\n flexDirection: 'row'\n },\n inputMargin: {\n marginRight: '16px'\n }\n}\n\nclass SearchObservations extends Component {\n\n state = {\n data: {},\n ids: [],\n total: 0,\n observedProperties: [],\n page: 1,\n perPage: 25,\n sort: {\n field: 'timestamp',\n order: 'DESC',\n },\n beginTimestamp: null,\n endTimestamp: null,\n version: 0\n }\n\n static getDerivedStateFromProps(props, state) {\n if (props.beginTimestamp && state.beginTimestamp && props.beginTimestamp.getTime() !== state.beginTimestamp.getTime()) {\n state.beginTimestamp = props.beginTimestamp;\n return state;\n }\n if (props.endTimestamp && state.endTimestamp && props.endTimestamp.getTime() !== state.endTimestamp.getTime()) {\n state.endTimestamp = props.endTimestamp;\n return state;\n }\n\n return null;\n }\n\n getEquipmentProperties = (id) => {\n return new Promise((resolve, reject) => {\n dataFetch('GET', `/equipment/${id}?filter=${JSON.stringify({include: 'datasets'})}`)\n .then(equipment => {\n if (equipment && equipment.equipmentmodelId) {\n const filter = { \n where: {equipmentmodelId: equipment.equipmentmodelId},\n sort: {field: 'index', order: 'ASC'},\n include: 'observedproperty'\n };\n\n dataFetch('GET', `/modelproperties?filter=${JSON.stringify(filter)}`)\n .then(properties => {\n const observedProperties = properties.filter(element => {\n return element.visible;\n });\n\n resolve({\n equipment: equipment,\n observedProperties: observedProperties\n });\n })\n .catch(err => reject(err));\n } else {\n reject();\n }\n })\n .catch(err => reject(err));\n });\n }\n\n save = (record) => {\n const page = 1;\n const sort = {\n field: 'timestamp',\n order: 'DESC',\n };\n\n this.setState({beginTimestamp: record.beginTimestamp, endTimestamp: record.endTimestamp, page, sort, data: {} });\n\n this.getEquipmentProperties(record.equipmentId)\n .then(data => {\n const { equipment, observedProperties } = data;\n const datasetIds = equipment.datasets.map(dt => dt.id);\n const { perPage } = this.state;\n\n const filter = {\n where: {\n and: [\n { timestamp: { gt: record.beginTimestamp } },\n { timestamp: { lt: record.endTimestamp } },\n { datasetId: { inq: datasetIds } }\n ]\n },\n limit: perPage,\n offset: (page - 1) * perPage,\n order: [`${sort.field} ${sort.order}`]\n };\n\n this.setState({ observedProperties, datasetIds, filter: filter.where });\n this.fetchRecords(filter);\n })\n .finally(_ => {\n this.setState({fetchObsProps: false});\n });\n }\n\n fetchRecords = (filter) => {\n const { fetchEnd, fetchStart } = this.props;\n\n fetchStart();\n const headers = new Headers();\n headers.append(\"Authorization\", `${storage.load('lbtoken').id}`);\n\n fetch(`${API_URL}/observations?filter=${JSON.stringify(filter)}`, {\n method: 'GET',\n headers\n })\n .then(resp => {\n const contentRange = resp.headers.get(\"Content-range\");\n const total = contentRange.split(\"/\")[1];\n this.setState({ total: parseInt(total) })\n return resp.json()\n })\n .then(observations => {\n const data = observations.reduce((acc, row, index) => {\n acc[index] = Object.assign({}, row, { id: index });\n return acc;\n }, {});\n this.setState({ data, ids: Object.keys(data) });\n this.setState(state => ({ version: state.version + 1 }))\n\n fetchEnd();\n })\n\n }\n\n setPage = page => {\n const { beginTimestamp, endTimestamp, datasetIds, sort, perPage } = this.state;\n const filter = {\n where: {\n and: [\n { timestamp: { gt: beginTimestamp } },\n { timestamp: { lt: endTimestamp } },\n { datasetId: { inq: datasetIds } }\n ]\n },\n limit: perPage,\n offset: (page - 1) * perPage,\n order: [`${sort.field} ${sort.order}`]\n };\n\n this.fetchRecords(filter);\n this.setState({ page })\n }\n\n setPerPage = perPage => {\n const { beginTimestamp, endTimestamp, datasetIds, sort, page } = this.state;\n const filter = {\n where: {\n and: [\n { timestamp: { gt: beginTimestamp } },\n { timestamp: { lt: endTimestamp } },\n { datasetId: { inq: datasetIds } }\n ]\n },\n limit: perPage,\n offset: (page - 1) * perPage,\n order: [`${sort.field} ${sort.order}`]\n };\n\n this.fetchRecords(filter);\n this.setState({ perPage });\n }\n\n validateFields = (values, { translate }) => {\n const errors = {};\n const beginTimestamp = moment(values.beginTimestamp);\n const endTimestamp = moment(values.endTimestamp);\n\n if (!values.beginTimestamp || !beginTimestamp.isValid()) {\n errors.beginTimestamp = [translate('ra.validation.required')];\n }\n if (!values.endTimestamp || !endTimestamp.isValid()) {\n errors.endTimestamp = [translate('ra.validation.required')];\n }\n\n if (\n (values.beginTimestamp && beginTimestamp.isValid()) &&\n (values.endTimestamp && endTimestamp.isValid()) &&\n !endTimestamp.isAfter(beginTimestamp)\n ) {\n errors.endTimestamp = [translate('error.END_TIMESTAMP_EARLIER')];\n }\n\n return errors;\n }\n\n render() {\n const { classes } = this.props;\n const { data, filter, ids, observedProperties, page, perPage, sort, total, version } = this.state;\n return <Card>\n <Title title='containers.search.name' />\n <SearchObsSimpleForm onChange={this.fieldChanged} formContentClassName={classes.formContent} className={classes.form} resource='observations' save={this.save} validate={this.validateFields}\n toolbar={<SearchObsToolbar filter={filter} sort={sort} data={data} resource='observations' />}\n >\n <ReferenceInput onChange={this.setDirty} style={{ marginRight: '16px' }} validate={required()} label='containers.search.fields.equipment' source=\"equipmentId\" reference=\"equipment\" perPage={-1}>\n <SelectInput optionText=\"name\" />\n </ReferenceInput>\n <DateTimeInput \n source=\"beginTimestamp\"\n label=\"containers.search.fields.beginTimestamp\"\n className={classes.inputMargin}\n options={{\n format: 'dd/MM/YYYY HH:mm',\n clearable: true\n }}\n />\n <DateTimeInput \n source=\"endTimestamp\"\n label=\"containers.search.fields.endTimestamp\"\n className={classes.inputMargin}\n options={{\n format: 'dd/MM/YYYY HH:mm',\n clearable: true\n }}\n />\n </SearchObsSimpleForm>\n <div style={{ marginLeft: '1em', marginRight: '1em' }}>\n <ResponsiveDatagrid version={version} currentSort={sort} data={data} ids={ids} resource={'observations'} setSort={() => { }}>\n <DateField source=\"timestamp\" showTime sortable={false} />\n {\n observedProperties && observedProperties.length > 0 && observedProperties.map((property, index) => {\n return <TextField key={index} source={property.observedproperty.name} sortable={false} />\n })\n }\n </ResponsiveDatagrid>\n <Pagination\n page={page}\n perPage={perPage}\n setPage={this.setPage}\n setPerPage={this.setPerPage}\n total={total}\n />\n </div>\n </Card>\n }\n}\n\nconst mapStateToProps = (state, props) => {\n return {\n beginTimestamp: state.form[\"record-form\"] ? state.form[\"record-form\"].values.beginTimestamp : null,\n endTimestamp: state.form[\"record-form\"] ? state.form[\"record-form\"].values.endTimestamp : null\n }\n}\n\nconst enhance = compose(\n translate,\n withStyles(styles),\n connect(mapStateToProps, { fetchEnd, fetchStart })\n)\n\nexport default enhance(SearchObservations);","import React from 'react';\nimport { Route } from 'react-router-dom';\n\nimport {\n Configuration,\n DatasetMap,\n DatasetChart,\n DerivedSetChart,\n DerivedSetMap,\n EquipObs,\n History,\n Live,\n Manual,\n Profile,\n SearchObs\n} from './containers';\n\nexport default [\n <Route exact path=\"/maps/live\" component={Live} />,\n <Route exact path=\"/maps/history\" component={History} />,\n <Route exact path=\"/datasets/:id/map\" component={DatasetMap} />,\n <Route exact path=\"/datasets/:id/charts\" component={DatasetChart} />,\n <Route exact path=\"/derivedsets/:id/map\" component={DerivedSetMap} />,\n <Route exact path=\"/derivedsets/:id/charts\" component={DerivedSetChart} />,\n <Route exact path=\"/profile\" component={Profile} />,\n <Route exact path=\"/configuration\" component={Configuration} />,\n <Route exact path=\"/manual\" component={Manual} />,\n <Route exact path=\"/equipment/:id/observations\" component={EquipObs} />,\n <Route exact path=\"/search\" component={SearchObs} />\n];\n","import React from 'react';\nimport IconButton from '@material-ui/core/IconButton'\nimport ArrowBack from '@material-ui/icons/ArrowBack'\nimport withRouter from 'react-router-dom/withRouter'\n\nconst goback = (history) => (history.goBack());\n\nconst BackButton = ({history, ...rest}) => (\n //Not sure if color=inherit works with themes\n <IconButton color='inherit' onClick={()=>goback(history)}><ArrowBack/></IconButton>\n);\n\nexport default withRouter(BackButton);","import React from 'react';\nimport { UserMenu, MenuItemLink, translate } from 'react-admin';\nimport SettingsIcon from '@material-ui/icons/Settings';\nimport ProfileIcon from '@material-ui/icons/Person';\nimport ManualIcon from '@material-ui/icons/School';\nimport ServiceDeskIcon from '@material-ui/icons/HelpOutline';\n\nimport { MenuItemExternalLink } from './components';\n\nconst CustomUserMenu = translate(({ translate, ...props }) => (\n <UserMenu {...props}>\n <MenuItemLink\n to=\"/profile\"\n primaryText={translate('pos.profile.profile')}\n leftIcon={<ProfileIcon />}\n />\n <MenuItemLink\n to=\"/configuration\"\n primaryText={translate('pos.configuration')}\n leftIcon={<SettingsIcon />}\n />\n <MenuItemLink\n to=\"/manual\"\n primaryText={translate('pos.manual')}\n leftIcon={<ManualIcon/>}\n />\n <MenuItemExternalLink\n to=\"https://servicedesk.ec-meloa.eu/servicedesk/servicedesk/customer/portal/3\"\n primaryText={translate('pos.servicedesk')}\n leftIcon={<ServiceDeskIcon/>}\n />\n </UserMenu>\n));\n\nexport default CustomUserMenu;\n","import React, { cloneElement } from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport classNames from 'classnames';\nimport {\n IconButton,\n AppBar as MuiAppBar,\n Typography,\n Toolbar,\n withStyles,\n withWidth\n} from '@material-ui/core';\nimport MenuIcon from '@material-ui/icons/Menu'\nimport compose from 'recompose/compose';\nimport {\n Headroom,\n LoadingIndicator,\n toggleSidebar as toggleSidebarAction\n} from 'react-admin';\n\nimport BackButton from './components/button/BackButton'\nimport UserMenu from './CustomUserMenu'\n\nconst styles = theme => ({\n toolbar: {\n paddingRight: 24,\n },\n menuButton: {\n marginLeft: '0.5em',\n marginRight: '0.5em',\n },\n menuButtonIconClosed: {\n transition: theme.transitions.create(['transform'], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n transform: 'rotate(0deg)',\n },\n menuButtonIconOpen: {\n transition: theme.transitions.create(['transform'], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n transform: 'rotate(180deg)',\n },\n title: {\n flex: 1,\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n },\n});\n\nconst AppBar = ({\n children,\n classes,\n className,\n logout,\n open,\n title,\n toggleSidebar,\n userMenu,\n width,\n ...rest\n}) => (\n <Headroom>\n <MuiAppBar\n className={className}\n color=\"secondary\"\n position=\"static\"\n {...rest}\n >\n <Toolbar\n disableGutters\n variant={width === 'xs' ? 'regular' : 'dense'}\n className={classes.toolbar}\n >\n <IconButton\n color=\"inherit\"\n aria-label=\"open drawer\"\n onClick={toggleSidebar}\n className={classNames(classes.menuButton)}\n >\n <MenuIcon\n classes={{\n root: open\n ? classes.menuButtonIconOpen\n : classes.menuButtonIconClosed,\n }}\n />\n </IconButton>\n <Typography\n variant=\"title\"\n color=\"inherit\"\n className={classes.title}\n id=\"react-admin-title\"\n />\n <BackButton />\n <LoadingIndicator />\n {cloneElement(userMenu, { logout })}\n </Toolbar>\n </MuiAppBar>\n </Headroom>\n );\n\nAppBar.propTypes = {\n children: PropTypes.node,\n classes: PropTypes.object,\n className: PropTypes.string,\n logout: PropTypes.element,\n open: PropTypes.bool,\n title: PropTypes.oneOfType([PropTypes.string, PropTypes.element])\n .isRequired,\n toggleSidebar: PropTypes.func.isRequired,\n userMenu: PropTypes.node,\n width: PropTypes.string,\n};\n\nAppBar.defaultProps = {\n userMenu: <UserMenu />,\n};\n\nconst enhance = compose(\n connect(\n state => ({\n locale: state.i18n.locale, // force redraw on locale change\n }),\n {\n toggleSidebar: toggleSidebarAction,\n }\n ),\n withStyles(styles),\n withWidth()\n);\n\nexport default enhance(AppBar);","import React, { Children, cloneElement } from 'react';\nimport PropTypes from 'prop-types';\nimport Tabs from '@material-ui/core/Tabs';\n\nconst getTabFullPath = (tab, index, baseUrl) =>\n `${baseUrl}${\n tab.props.path ? `/${tab.props.path}` : index > 0 ? `/${index}` : ''\n }`;\n\nconst TabbedShowLayoutTabs = ({ children, match, ...rest }) => (\n <Tabs indicatorColor=\"primary\" {...rest}>\n {Children.map(children, (tab, index) => {\n if (!tab) return null;\n // Builds the full tab tab which is the concatenation of the last matched route in the\n // TabbedShowLayout hierarchy (ex: '/posts/create', '/posts/12', , '/posts/12/show')\n // and the tab path.\n // This will be used as the Tab's value\n const tabPath = getTabFullPath(tab, index, match.url);\n\n return cloneElement(tab, {\n context: 'header',\n value: tabPath,\n });\n })}\n </Tabs>\n);\n\nTabbedShowLayoutTabs.propTypes = {\n children: PropTypes.node,\n match: PropTypes.object,\n value: PropTypes.string,\n};\n\nexport default TabbedShowLayoutTabs;","import React, { Component } from 'react'\nimport { Button, UPDATE } from 'react-admin'\nimport { Toolbar } from '@material-ui/core'\nimport { stringify } from 'query-string';\nimport { \n Add as AddIcon,\n Lock as LockIcon\n} from '@material-ui/icons';\n\nimport { connect } from 'react-redux';\nimport { refreshView } from 'react-admin';\n\nimport { LinkButton } from '../../components';\nimport { dataProvider } from '../../providers';\n\nclass LaunchesToolbar extends Component {\n areLaunchesTerminated(){\n return this.props.record.launches.find((launch) => launch.endTimestamp == null) === undefined;\n }\n\n onTerminateAllLaunchClick = () => {\n const { resource, record, refreshView } = this.props;\n dataProvider(UPDATE, resource, { id: `${record.id}/launches/close` })\n .then(_ => {\n refreshView();\n })\n }\n\n render(){\n return <Toolbar>\n <LinkButton variant='raised' label='resources.launches.buttons.create' \n to={{\n pathname:'/launches/create',\n search:stringify({\n campaignId: this.props.record.id\n })\n }}\n hasIcon\n icon={<AddIcon/>}\n />\n <Button variant='raised' label='resources.launches.buttons.terminateAll' style={{marginLeft:'2em'}} onClick={this.onTerminateAllLaunchClick}><LockIcon/></Button>\n </Toolbar>\n }\n}\n\nexport default connect(null, { refreshView })(LaunchesToolbar)","import React, { Component } from 'react';\nimport {connect} from 'react-redux';\nimport {\n UPDATE,\n refreshView,\n translate\n} from 'react-admin';\nimport compose from 'recompose/compose';\nimport {\n IconButton,\n Typography,\n withStyles\n} from '@material-ui/core'\nimport TerminateIcon from '@material-ui/icons/Lock'\nimport { dataProvider } from '../../providers'\n\nconst styles = {\n terminated: {\n color: 'red'\n },\n open: {\n color: 'green'\n },\n container: {\n display: 'flex',\n alignItems: 'center'\n },\n iconButton: {\n marginLeft: '8px'\n }\n}\n\nclass LaunchOpenField extends Component {\n\n onTerminateLaunchClick = () => {\n const { resource, record, refreshView } = this.props;\n dataProvider(UPDATE, resource, { id: `${record.id}/close` })\n .then(_ => {\n refreshView();\n })\n }\n\n render() {\n const { classes, record, translate } = this.props;\n\n return record && record.endTimestamp ? <Typography color='primary' classes={{ colorPrimary: classes.terminated }}>{translate('pos.general.closed')}</Typography> :\n <div className={classes.container}>\n <Typography color='primary' classes={{ colorPrimary: classes.open }}>{translate('pos.general.open')}</Typography>\n <IconButton color='primary' classes={{ root: classes.iconButton, colorPrimary: classes.terminated }} onClick={this.onTerminateLaunchClick}><TerminateIcon /></IconButton>\n </div>\n }\n}\n\nconst enhance = compose(\n translate,\n withStyles(styles),\n connect(null, {refreshView})\n)\n\nexport default enhance(LaunchOpenField);","import React from 'react';\nimport {\n translate\n} from 'react-admin';\nimport compose from 'recompose/compose';\nimport {\n Typography,\n withStyles\n} from '@material-ui/core'\n\nconst styles = {\n terminated: {\n color: 'red'\n },\n open: {\n color: 'green'\n },\n container: {\n display: 'flex',\n alignItems: 'center'\n },\n iconButton: {\n marginLeft: '8px'\n }\n}\n\nconst LaunchOpenField = ({ classes, record, translate }) => (\n record.launches.length > 0 ? <Typography color='primary' classes={{ colorPrimary: classes.terminated }}>{translate('pos.general.in_use')}</Typography> \n : <Typography color='primary' classes={{ colorPrimary: classes.open }}>{translate('pos.general.available')}</Typography>\n)\n\nconst enhance = compose(\n translate,\n withStyles(styles),\n)\n\nexport default enhance(LaunchOpenField);","import React, { Component } from 'react'\nimport{\n Button,\n translate,\n refreshView\n} from 'react-admin'\nimport {\n withStyles\n} from '@material-ui/core'\nimport { Add } from '@material-ui/icons'\n\nimport { CustomButton } from '../../components'\nimport { Details } from '../../components/notes'\nimport { connect } from 'react-redux'\nimport compose from 'recompose/compose';\n\nconst styles = {\n button:{\n marginTop: '1em',\n marginRight: '0.5em'\n },\n\n rm_button:{\n marginTop: '1em',\n backgroundColor: 'rgba(255, 0, 0, 0.8)',\n \"&:hover\": {\n background: 'rgba(255, 0, 0, 1)'\n }\n },\n rm_icon: {\n marginTop: '1em',\n color: 'red',\n \"&:hover\": {\n background: 'rgba(255, 0, 0, 0.08)'\n }\n }\n}\n\nclass RelationShow extends Component{\n state = {\n isOpen: false\n }\n\n sanitizeProps = ({\n dialogContent,\n children,\n reference,\n classes,\n parentrecord,\n secondPress,\n Icon,\n secondLabel,\n refreshView,\n ...props\n }) => ({...props})\n\n openDialog = () => this.setState({isOpen: true})\n success = () => this.props.refreshView();\n \n closeDialog = () => this.setState({isOpen: false})\n\n render() {\n const { classes, children, translate, secondPress, Icon, secondLabel, parentrecord } = this.props\n const { isOpen } = this.state;\n return <div>\n <Button className={classes.button} variant='contained' onClick={() => { this.setState({ isOpen: !isOpen })}} label={translate('pos.general.add_button')} /*label={translate('pos.general.add_referencing', {reference: referenceName})}*/><Add/></Button>\n { secondPress !== undefined && <CustomButton classes={{button: classes.rm_button, icon: classes.rm_icon}} variant=\"contained\" onClick={secondPress} label={secondLabel ? secondLabel : ''}>{ Icon ? <Icon/> : null }</CustomButton> }\n { isOpen && <Details open={isOpen} onClose={this.closeDialog} success={this.success} campaign={parentrecord}/>}\n {React.cloneElement(children, this.sanitizeProps(this.props))}\n </div>\n }\n}\n\n\n\nexport default compose(\n withStyles(styles),\n translate,\n connect(\n null, \n {\n refreshView\n }\n )\n)(RelationShow);","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { URL_CATALOGUE } from '../../Configuration';\r\nimport compose from 'recompose/compose';\r\n\r\nimport {\r\n Button,\r\n fetchStart,\r\n fetchEnd,\r\n showNotification,\r\n translate\r\n} from 'react-admin';\r\n\r\nimport {\r\n Link as LinkIcon,\r\n Publish as PublishIcon,\r\n LibraryBooks as CatalogueIcon\r\n} from '@material-ui/icons';\r\n// import LibraryBooksIcon from '@material-ui/icons/LibraryBooks';\r\nimport dataFetch from '../../providers/dataFetch';\r\n\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport Menu from '@material-ui/core/Menu';\r\n\r\nclass PublishButton extends Component {\r\n state = {\r\n link: null,\r\n label: 'pos.general.publish',\r\n button: <PublishIcon />,\r\n published: false,\r\n publishId: undefined,\r\n // datasetId,\r\n choices: [\r\n 'catalogue',\r\n 're_publish',\r\n 'delete',\r\n ],\r\n open: false,\r\n anchorEl: null\r\n }\r\n\r\n deleteState = () => {\r\n this.setState({\r\n link: null,\r\n label: 'pos.general.publish',\r\n button: <PublishIcon />,\r\n published: false,\r\n publishId: undefined,\r\n });\r\n }\r\n\r\n\r\n componentDidMount() {\r\n const { record, basePath } = this.props;\r\n\r\n const base = {}\r\n\r\n if (basePath === 'derivedsets')\r\n base.derivedsetId = record.id;\r\n else\r\n base.datasetId = record.id;\r\n\r\n const filter = {\r\n where: {\r\n and: [\r\n { ...base },\r\n { externalLink: { neq: null } }\r\n ]\r\n },\r\n order: ['id DESC']\r\n };\r\n dataFetch('GET', `/publishes?filter=${JSON.stringify(filter)}`)\r\n .then(result => {\r\n if (result.length > 0) {\r\n this.updateState(result[0]);\r\n }\r\n })\r\n .catch(err => {\r\n console.log(err)\r\n });\r\n }\r\n\r\n updateState = (result) => {\r\n this.setState({\r\n link: `${URL_CATALOGUE}${result.externalLink}`,\r\n label: 'pos.general.catalogue',\r\n button: <LinkIcon />,\r\n published: true,\r\n publishId: result.id\r\n });\r\n }\r\n\r\n handlePublish = (event) => {\r\n const { record, fetchStart, fetchEnd, showNotification, basePath } = this.props;\r\n const { link, publishId } = this.state;\r\n\r\n this.setState({ anchorEl: null, open: false });\r\n\r\n if (event === 'publish' || event === 're_publish') {\r\n fetchStart();\r\n dataFetch('POST', `/${basePath}/${record.id}/publish`)\r\n .then(result => {\r\n this.updateState(result);\r\n showNotification('pos.general.publish_success', 'info')\r\n }).catch(_ => {\r\n showNotification('pos.general.publish_failed', 'warning');\r\n }).finally(_ => fetchEnd());\r\n }\r\n else if (event === 'catalogue') {\r\n window.open(link, '_blank');\r\n }\r\n else if (event === 'delete') {\r\n fetchStart();\r\n dataFetch('DELETE', `/publishes/${publishId}/catalogue`)\r\n .then(result => {\r\n this.deleteState();\r\n showNotification('pos.general.delete_success', 'info')\r\n }).catch(_ => {\r\n showNotification('pos.general.delete_failed', 'warning');\r\n }).finally(_ => fetchEnd());\r\n }\r\n }\r\n\r\n handleClickListItem = (event) => {\r\n this.setState({ anchorEl: event.currentTarget, open: true });\r\n };\r\n\r\n handleClose = () => {\r\n this.setState({ anchorEl: null, open: false });\r\n };\r\n\r\n render() {\r\n const { published, anchorEl, open, choices } = this.state;\r\n const { translate, record, disabled = false } = this.props;\r\n\r\n return <>\r\n {record && record.numberObservations > 0 && record.status === 'UPDATED' && (published ?\r\n <>\r\n <Button\r\n label='pos.general.catalogue'\r\n onClick={this.handleClickListItem}\r\n disabled={disabled}\r\n >\r\n <CatalogueIcon />\r\n </Button>\r\n <Menu\r\n id=\"lock-menu\"\r\n anchorEl={anchorEl}\r\n open={open}\r\n onClose={this.handleClose}\r\n >\r\n {choices.map((option, index) => (\r\n <MenuItem\r\n key={option}\r\n onClick={() => this.handlePublish(option)}\r\n >\r\n {translate('pos.general.' + option)}\r\n </MenuItem>\r\n ))}\r\n </Menu>\r\n </>\r\n :\r\n <Button\r\n label={this.state.label}\r\n onClick={() => this.handlePublish('publish')}\r\n disabled={disabled}\r\n >\r\n {this.state.button}\r\n </Button>\r\n )}\r\n </>\r\n }\r\n}\r\n\r\n\r\nexport default compose(\r\n translate,\r\n connect(null, {\r\n fetchStart,\r\n fetchEnd,\r\n showNotification,\r\n })\r\n)(PublishButton);","import React, { Component } from 'react';\n\nimport { connect } from 'react-redux';\nimport compose from 'recompose/compose';\nimport {\n translate,\n Confirm,\n showNotification\n} from 'react-admin';\n\nimport {\n CheckCircle as CheckCircleIcon,\n RadioButtonUnchecked as RadioButtonUncheckedIcon,\n ErrorOutline as ErrorOutlineIcon,\n} from '@material-ui/icons';\n\nimport {\n Tooltip,\n IconButton\n} from '@material-ui/core';\nimport { dataFetch } from '../../providers';\nimport { refreshView } from 'ra-core';\n\nconst ConfirmDialog = translate(({ translate, record, open, handleBuild, handleClose, ...props }) => (\n <Confirm\n isOpen={open}\n title={translate(\"resources.datasets.buildJob\", { datasetName: record && record.name })}\n content={translate(\"resources.datasets.buildJobWarning\")}\n onConfirm={handleBuild}\n onClose={handleClose}\n />\n));\n\nclass Status extends Component {\n constructor(props) {\n super(props)\n this.state = {\n open: false\n };\n }\n\n handleAction = () => {\n this.setState({\n open: true\n });\n }\n handleBuild = () => {\n // console.log({datasetName: this.props.record.name})\n dataFetch('POST', `/datasets/build/${this.props.record.id}`)\n .then(_ => this.props.showNotification('resources.datasets.buildJobNotification', 'info', {messageArgs: {datasetName: this.props.record.name}}))\n .catch(err => this.props.showNotification('errors.SOMETHING', 'warning'))\n .finally(_ => {\n this.handleClose();\n this.props.refreshView();\n });\n }\n\n handleClose = () => {\n this.setState({\n open: false\n });\n }\n\n\n render() {\n\n const { source, record } = this.props;\n const { open } = this.state;\n const status = record[source];\n switch (status) {\n case 'UPDATED':\n return (\n <Tooltip title={'Updated'}>\n <div>\n <IconButton disabled={true} onClick={this.handleAction}>\n <CheckCircleIcon style={{ color: 'rgba(50,205,50)' }} />\n </IconButton>\n </div>\n </Tooltip>\n\n )\n\n case 'PROCESSING':\n case 'PENDING':\n return (\n <Tooltip title={'Processing'}>\n <div>\n\n <IconButton disabled={true} onClick={this.handleAction}>\n <RadioButtonUncheckedIcon style={{ color: 'rgba(0,89,255)' }} />\n </IconButton>\n </div>\n </Tooltip>\n )\n\n case 'OUTDATED':\n case 'CREATED':\n case null:\n return (\n <div>\n {open && <ConfirmDialog record={record} open={open} handleBuild={this.handleBuild} handleClose={this.handleClose}/>}\n <Tooltip title={'Outdated'}>\n <div>\n <IconButton onClick={this.handleAction}>\n <ErrorOutlineIcon style={{ color: 'rgba(255,165,0)' }} />\n </IconButton>\n </div>\n </Tooltip>\n </div>\n )\n default:\n return (\n <div>\n {open && <ConfirmDialog record={record} open={open} handleBuild={this.handleBuild} handleClose={this.handleClose}/>}\n <Tooltip title={'Error'}>\n <div>\n <IconButton onClick={this.handleAction}>\n <ErrorOutlineIcon style={{ color: 'rgba(255,0,0)' }} />\n </IconButton>\n </div>\n </Tooltip>\n </div>\n )\n }\n }\n}\n\nStatus.defaultProps = {\n addLabel: true,\n};\n\nconst enhance = compose(\n translate,\n connect(null, {\n showNotification,\n refreshView\n })\n);\n\nexport default enhance(Status);","import React from 'react';\nimport {\n ReferenceField,\n ReferenceFieldController,\n TextField\n} from 'react-admin';\nimport PublishButton from './PublishButton';\nimport {\n List as Icon,\n} from '@material-ui/icons';\nimport {\n ShowRelatedButton,\n ResponsiveDatagrid\n} from '../../components';\nimport Status from './Status'\n\nexport const DatasetIcon = Icon;\n\nconst tableVisible = (record) => record && record.status === 'UPDATED';\n\nconst ListDatasets = ({ equipmentC, campaignC, ...rest }) => (\n <ResponsiveDatagrid actions={[<ShowRelatedButton isVisible={tableVisible} source_=\"datasetId\" reference='observations' source='datasetId' label='pos.general.table' icon={<DatasetIcon />} />, <PublishButton basePath=\"datasets\"/>]} {...rest}>\n <TextField source=\"name\" />\n\n {equipmentC &&\n <ReferenceField source=\"equipmentId\" reference=\"equipment\" linkType=\"show\" allowEmpty>\n <TextField source=\"name\" />\n </ReferenceField>\n }\n <ReferenceField reference=\"launches\" source=\"launchId\" linkType={false} allowEmpty>\n <TextField source=\"name\" />\n </ReferenceField>\n\n {campaignC &&\n <ReferenceFieldController label='resources.datasets.fields.campaignId' reference=\"launches\" source=\"launchId\" linkType={false} sortable={false} >\n {({ referenceRecord }) => (\n <ReferenceField basePath=\"/launches\" resource=\"launches\" reference=\"campaigns\" source=\"campaignId\" record={referenceRecord || {}} linkType=\"show\" allowEmpty>\n <TextField source=\"name\" sortable={false} />\n </ReferenceField>\n )}\n </ReferenceFieldController>\n }\n {/* <ReferenceField label=\"resources.datasets.fields.observationsNumb\" source=\"id\" reference=\"datasets/count/observations\" linkType={false} sortable={false} allowEmpty>\n <TextField source=\"count\" />\n </ReferenceField> */}\n <TextField source=\"numberObservations\" />\n\n <Status source=\"status\" />\n\n </ResponsiveDatagrid>\n);\n\n\nListDatasets.defaultProps = {\n equipmentC: true,\n campaignC: true\n};\n\nexport default ListDatasets;\n","const params = {\r\n host: 'http://localhost:3001', //Endereço do servidor\r\n default_alt: '0', //Altura geografica enviada para o pedido de dados\r\n default_aditional_date: (1000 * 60 * 60 * 24 * 14), //intervalo em milisegundos da Data de Inicio para a Data de Fim\r\n font_size_mobile: '9', //Tamanho de letra para Mobile\r\n font_size_desktop: '13', //Tamanho de letra para Desktop\r\n colors: [{//Cores para apresentação dos graficos\r\n color: 'Azul', //cor default\r\n chart1_color: '#c3c9ef',//#a6b0f5 //Cor das colunas do 1o grafico\r\n chart1_color_prob: '#283593', //Cor das \"pintas\" do 1o grafico\r\n chart2_color: '#283593' //Cor das colunas horizontais do 2o grafico\r\n },\r\n {\r\n color: 'Cinzento',\r\n chart1_color: '#cfcfcf',\r\n chart1_color_prob: '#4b4b4b',\r\n chart2_color: '#4b4b4b'\r\n },\r\n {\r\n color: 'Laranja',\r\n chart1_color: '#f0c7ad',\r\n chart1_color_prob: '#f76305',\r\n chart2_color: '#f76305'\r\n }],\r\n};\r\nexport default params;","import React from \"react\";\r\nimport { translate } from 'react-admin';\r\nimport compose from \"recompose/compose\";\r\nimport { withWidth } from '@material-ui/core';\r\nimport params from './params';\r\n\r\n//Chart imports\r\nimport * as am4core from \"@amcharts/amcharts4/core\";\r\nimport * as am4charts from \"@amcharts/amcharts4/charts\";\r\nimport am4themes_animated from \"@amcharts/amcharts4/themes/animated\";\r\n\r\nclass Chart extends React.Component {\r\n constructor(props) {\r\n super(props)\r\n this.fontSize = this.fontSize.bind(this)\r\n }\r\n\r\n fontSize = function () {\r\n if (this.props.width && this.props.width === 'xs') {\r\n return params.font_size_mobile;\r\n } else {\r\n return params.font_size_desktop;\r\n }\r\n };\r\n\r\n componentDidMount() {\r\n // Themes begin\r\n am4core.useTheme(am4themes_animated);\r\n\r\n // Create chart instance\r\n let chart = am4core.create(\"chartdiv\", am4charts.XYChart);\r\n chart.padding(30, 0, 0, 0);\r\n chart.responsive.enabled = true;\r\n\r\n\r\n //Create axes\r\n var dateAxis = chart.xAxes.push(new am4charts.DateAxis());\r\n dateAxis.skipEmptyPeriods = false;\r\n dateAxis.periodChangeDateFormats.setKey(\"hour\", \"H\");\r\n dateAxis.dateFormats.setKey(\"hour\", \"H\");\r\n dateAxis.renderer.minGridDistance = 35;\r\n dateAxis.title.text = this.props.translate('resources.campaigns.satellites.chart1_xAxis_title');\r\n dateAxis.title.fontSize = this.fontSize();\r\n dateAxis.renderer.labels.template.fontSize = this.fontSize();\r\n dateAxis.renderer.labels.template.location = 0.0001;\r\n\r\n let valueAxis = chart.yAxes.push(new am4charts.ValueAxis());\r\n valueAxis.title.text = this.props.translate('resources.campaigns.satellites.chart1_yAxis_avereage_title');\r\n valueAxis.title.fontSize = this.fontSize();\r\n valueAxis.renderer.labels.template.fontSize = this.fontSize();\r\n valueAxis.cursorTooltipEnabled = false;\r\n\r\n let valueAxis2 = chart.yAxes.push(new am4charts.ValueAxis());\r\n valueAxis2.renderer.opposite = true;\r\n valueAxis2.title.text = this.props.translate('resources.campaigns.satellites.chart1_yAxis_probability_title');\r\n valueAxis2.title.fontSize = this.fontSize();\r\n valueAxis2.renderer.fontSize = this.fontSize();\r\n valueAxis2.cursorTooltipEnabled = false;\r\n\r\n // Create series\r\n let series = chart.series.push(new am4charts.ColumnSeries());\r\n // series.dataFields.valueY = \"total\";\r\n series.dataFields.valueY = \"avg\";\r\n series.dataFields.dateX = \"date\";\r\n series.name = \"[font-size: \" + this.fontSize() + \"px]\" + this.props.translate('resources.campaigns.satellites.chart1_avereageSeries_name') + \"[/]\";\r\n series.dataItems.template.locations.dateX = 1;\r\n // series.columns.template.width = am4core.percent(1000);\r\n series.columns.template.width = am4core.percent(150);\r\n series.cursorTooltipEnabled = false;\r\n // series.stroke = am4core.color(this.props.chart1_color);\r\n series.columns.template.fill = am4core.color(this.props.chart1_color);\r\n series.columns.template.tooltipText = \"Avg: [bold]{valueY}[/] sat\";\r\n series.columns.template.tooltipPosition = \"pointer\";\r\n // series.columns.template.label.textAlign = \"middle\";\r\n // series.columns.template.label.textValign = \"bottom\";\r\n // series.tooltipText = \"Avg: [bold]{valueY}[/] sat/h\";\r\n\r\n\r\n // Create series 2\r\n let series2 = chart.series.push(new am4charts.LineSeries());\r\n series2.yAxis = valueAxis2;\r\n series2.dataFields.valueY = \"probability\";\r\n series2.dataFields.dateX = \"date\";\r\n series2.name = \"[font-size: \" + this.fontSize() + \"px]\" + this.props.translate('resources.campaigns.satellites.chart1_probabilitySeries_name') + \"[/]\";\r\n series2.stroke = am4core.color(this.props.chart1_color_prob);\r\n series2.fill = am4core.color(this.props.chart1_color_prob);\r\n series2.strokeWidth = 2;\r\n // series2.opacity = 0;\r\n // series2.tooltip.background.cornerRadius = 5;\r\n // series2.tooltip.background.strokeOpacity = 0;\r\n // series2.tooltip.label.minWidth = 20;\r\n // series2.tooltip.label.minHeight = 20;\r\n // series2.tooltip.label.textAlign = \"left\";\r\n // series2.tooltip.label.textValign = \"top\";\r\n series2.tooltip.pointerOrientation = \"left\";\r\n series2.tooltipText = \"Cov: [bold]{valueY}[/]%\";\r\n\r\n chart.cursor = new am4charts.XYCursor();\r\n chart.cursor.lineY.disabled = true;\r\n\r\n // var bullet = series2.bullets.push(new am4charts.CircleBullet());\r\n // bullet.circle.strokeWidth = 0.00001;\r\n // bullet.circle.stroke = am4core.color(this.props.chart1_color_prob);\r\n // bullet.circle.fill = am4core.color(this.props.chart1_color_prob);\r\n // bullet.tooltipText = \"Prob: {valueY}%\";\r\n\r\n // Add legend\r\n chart.legend = new am4charts.Legend();\r\n\r\n this.chart = chart;\r\n this.series = series;\r\n this.series2 = series2;\r\n // this.bullet = bullet;\r\n this.dateAxis = dateAxis;\r\n this.valueAxis = valueAxis;\r\n this.valueAxis2 = valueAxis2;\r\n this.chart.data = this.props.data;\r\n\r\n }\r\n componentDidUpdate(oldProps) {\r\n if (oldProps.chart1_color !== this.props.chart1_color || oldProps.chart2_color !== this.props.chart2_color || oldProps.chart1_color_prob !== this.props.chart1_color_prob) {\r\n this.series.columns.template.fill = am4core.color(this.props.chart1_color);\r\n this.series.fill = am4core.color(this.props.chart1_color);\r\n this.series.stroke = am4core.color(this.props.chart1_color);\r\n\r\n this.series2.stroke = am4core.color(this.props.chart1_color_prob);\r\n this.series2.fill = am4core.color(this.props.chart1_color_prob);\r\n // this.bullet.circle.stroke = am4core.color(this.props.chart1_color_prob);\r\n // this.bullet.circle.fill = am4core.color(this.props.chart1_color_prob);\r\n }\r\n if (oldProps.width !== this.props.width && (this.props.width === 'xs' || oldProps.width === 'xs')) {\r\n this.dateAxis.title.fontSize = this.fontSize();\r\n this.dateAxis.renderer.labels.template.fontSize = this.fontSize();\r\n this.valueAxis.renderer.labels.template.fontSize = this.fontSize();\r\n this.valueAxis.title.fontSize = this.fontSize();\r\n this.valueAxis2.renderer.fontSize = this.fontSize();\r\n this.valueAxis2.title.fontSize = this.fontSize();\r\n this.series.name = \"[font-size: \" + this.fontSize() + \"px]\" + this.props.translate('resources.campaigns.satellites.chart1_avereageSeries_name') + \"[/]\";\r\n this.series2.name = \"[font-size: \" + this.fontSize() + \"px]\" + this.props.translate('resources.campaigns.satellites.chart1_probabilitySeries_name') + \"[/]\";\r\n }\r\n if (oldProps.data !== this.props.data) {\r\n this.chart.data = this.props.data;\r\n }\r\n }\r\n componentWillUnmount() {\r\n this.chart.dispose();\r\n }\r\n render() {\r\n return (<div id=\"chartdiv\" className=\"chart-div\">\r\n </div>);\r\n }\r\n}\r\n\r\nconst enhance = compose(\r\n translate,\r\n withWidth()\r\n);\r\n\r\nexport default enhance(Chart);","import React from \"react\";\r\nimport { translate } from 'react-admin';\r\nimport compose from \"recompose/compose\";\r\nimport { withWidth } from '@material-ui/core';\r\nimport params from \"./params\";\r\n\r\n//Chart imports\r\nimport * as am4core from \"@amcharts/amcharts4/core\";\r\nimport * as am4charts from \"@amcharts/amcharts4/charts\";\r\nimport am4themes_animated from \"@amcharts/amcharts4/themes/animated\";\r\n\r\n\r\nclass Chart2 extends React.Component {\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n }\r\n this.fontSize = this.fontSize.bind(this)\r\n }\r\n\r\n fontSize = function () {\r\n if (this.props.width && this.props.width === 'xs') {\r\n return params.font_size_mobile;\r\n } else {\r\n return params.font_size_desktop;\r\n }\r\n };\r\n\r\n componentDidMount() {\r\n am4core.useTheme(am4themes_animated);\r\n\r\n let chart = am4core.create(\"chartdiv2\", am4charts.XYChart);\r\n chart.responsive.enabled = true;\r\n chart.padding(30, 30, 30, 30);\r\n\r\n let title = chart.titles.create();\r\n title.text = this.props.translate('resources.campaigns.satellites.chart2_title');\r\n title.fontSize = this.fontSize(); // TODO: tamanho de letra dinamico em relacao a resolucao\r\n title.marginBottom = 10;\r\n\r\n let categoryAxis = chart.yAxes.push(new am4charts.CategoryAxis());\r\n categoryAxis.renderer.grid.template.location = 0;\r\n categoryAxis.dataFields.category = \"date_st\";\r\n categoryAxis.renderer.minGridDistance = 1;\r\n categoryAxis.renderer.inversed = true;\r\n categoryAxis.renderer.grid.template.disabled = true;\r\n categoryAxis.renderer.fontSize = this.fontSize();// TODO: tamanho de letra dinamico em relacao a resolucao\r\n\r\n let valueAxis = chart.xAxes.push(new am4charts.ValueAxis());\r\n valueAxis.renderer.minGridDistance = 315;\r\n valueAxis.renderer.fontSize = this.fontSize();// TODO: tamanho de letra dinamico em relacao a resolucao\r\n\r\n\r\n let series = chart.series.push(new am4charts.ColumnSeries());\r\n series.dataFields.categoryY = \"date_st\";\r\n series.dataFields.valueX = \"total_satellites\";\r\n series.tooltipText = \"{valueX.value}\"\r\n series.columns.template.strokeOpacity = 10;\r\n series.columns.template.column.cornerRadiusBottomRight = 5;\r\n series.columns.template.column.cornerRadiusTopRight = 5;\r\n series.columns.template.fill = am4core.color(this.props.chart2_color);\r\n\r\n let labelBullet = series.bullets.push(new am4charts.LabelBullet())\r\n labelBullet.label.horizontalCenter = \"middle\";\r\n labelBullet.label.dx = 22;\r\n labelBullet.label.dy = 2;\r\n labelBullet.label.text = \"{values.valueX.workingValue}\";\r\n labelBullet.label.fontSize = this.fontSize();// TODO: tamanho de letra dinamico em relacao a resolucao\r\n\r\n categoryAxis.sortBySeries = series;\r\n\r\n this.series = series;\r\n this.chart = chart;\r\n this.title = title;\r\n this.categoryAxis = categoryAxis;\r\n this.valueAxis = valueAxis;\r\n this.labelBullet = labelBullet;\r\n this.chart.data = this.props.data;\r\n }\r\n\r\n componentDidUpdate(oldProps) {\r\n if ((oldProps.min_cor !== this.props.chart1_color) || (oldProps.chart2_color !== this.props.chart2_color)) {\r\n this.series.columns.template.fill = am4core.color(this.props.chart2_color);\r\n }\r\n if (oldProps.width !== this.props.width && (this.props.width === 'xs' || oldProps.width === 'xs')) {\r\n this.title.fontSize = this.fontSize();\r\n this.categoryAxis.renderer.fontSize = this.fontSize();\r\n this.valueAxis.renderer.fontSize = this.fontSize();\r\n this.labelBullet.label.fontSize = this.fontSize();\r\n }\r\n if(oldProps.data !== this.props.data) {\r\n this.chart.data = this.props.data;\r\n }\r\n }\r\n \r\n componentWillUnmount(){\r\n this.chart.dispose();\r\n }\r\n\r\n render() {\r\n return (<div id=\"chartdiv2\" className=\"chart-div2\">\r\n </div>);\r\n }\r\n}\r\n\r\nconst enhance = compose(\r\n translate,\r\n withWidth()\r\n);\r\n\r\nexport default enhance(Chart2);","import React from 'react';\nimport pure from 'recompose/pure';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction createSvgIcon(path, displayName) {\n let Icon = props => (\n <SvgIcon {...props}>\n {path}\n </SvgIcon>\n );\n\n Icon.displayName = `${displayName}Icon`;\n Icon = pure(Icon);\n Icon.muiName = 'SvgIcon';\n\n return Icon;\n};\n\nexport default createSvgIcon;","import React from 'react';\nimport createSvgIcon from './createSvgIcon';\nexport default createSvgIcon(\n <g><path d=\"M19,3H5C3.9,3,3,3.9,3,5v14c0,1.1,0.9,2,2,2h14c1.1,0,2-0.9,2-2V5C21,3.9,20.1,3,19,3z M13.03,7.06L14.09,6l1.41,1.41 L16.91,6l1.06,1.06l-1.41,1.41l1.41,1.41l-1.06,1.06L15.5,9.54l-1.41,1.41l-1.06-1.06l1.41-1.41L13.03,7.06z M6.25,7.72h5v1.5h-5 V7.72z M11.5,16h-2v2H8v-2H6v-1.5h2v-2h1.5v2h2V16z M18,17.25h-5v-1.5h5V17.25z M18,14.75h-5v-1.5h5V14.75z\"/></g>\n , 'Calculate');","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport compose from 'recompose/compose';\r\nimport MuiButton from '@material-ui/core/Button';\r\nimport { withStyles, createStyles } from '@material-ui/core/styles';\r\nimport classnames from 'classnames';\r\nimport { translate } from 'ra-core';\r\n\r\nconst styles = createStyles({\r\n button: {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n },\r\n label: {\r\n paddingLeft: '0.5em',\r\n },\r\n labelRightIcon: {\r\n paddingRight: '0.5em',\r\n },\r\n smallIcon: {\r\n fontSize: 20,\r\n },\r\n mediumIcon: {\r\n fontSize: 22,\r\n },\r\n largeIcon: {\r\n fontSize: 24,\r\n },\r\n});\r\n\r\nconst Button = ({\r\n alignIcon = 'left',\r\n children,\r\n classes = {},\r\n className,\r\n color,\r\n disabled,\r\n label,\r\n size,\r\n translate,\r\n submitOnEnter,\r\n ...rest\r\n}) => (\r\n\r\n <MuiButton\r\n className={classnames(classes.button, className)}\r\n color={color}\r\n size={size}\r\n aria-label={label ? translate(label, { _: label }) : undefined}\r\n disabled={disabled}\r\n {...rest}\r\n >\r\n {alignIcon === 'left' &&\r\n children &&\r\n React.cloneElement(children, {\r\n className: classes[`${size}Icon`],\r\n })}\r\n {label && (\r\n <span\r\n className={classnames({\r\n [classes.label]: alignIcon === 'left',\r\n [classes.labelRightIcon]: alignIcon !== 'left',\r\n })}\r\n >\r\n {translate(label, { _: label })}\r\n </span>\r\n )}\r\n {alignIcon === 'right' &&\r\n children &&\r\n React.cloneElement(children, {\r\n className: classes[`${size}Icon`],\r\n })}\r\n </MuiButton>\r\n\r\n);\r\n\r\nButton.propTypes = {\r\n alignIcon: PropTypes.string,\r\n children: PropTypes.element,\r\n classes: PropTypes.object,\r\n className: PropTypes.string,\r\n color: PropTypes.string,\r\n disabled: PropTypes.bool,\r\n label: PropTypes.string,\r\n size: PropTypes.oneOf(['small', 'medium', 'large']),\r\n translate: PropTypes.func.isRequired,\r\n};\r\n\r\nButton.defaultProps = {\r\n color: 'primary',\r\n size: 'small'\r\n}\r\n\r\nconst enhance = compose(\r\n withStyles(styles),\r\n translate\r\n);\r\n\r\nexport default enhance(Button);","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport { withStyles, createStyles } from '@material-ui/core/styles';\r\n\r\nimport {Labeled} from 'react-admin';\r\n\r\nconst sanitizeRestProps = ({ basePath, record, ...rest }) => rest;\r\n\r\nconst styles = theme => createStyles({\r\n input: { width: theme.spacing.unit * 32 },\r\n});\r\n\r\nexport const FormInput = ({ classes, input, ...rest }) =>\r\n input ? (\r\n <div\r\n className={classnames(\r\n 'ra-input',\r\n `ra-input-${input.props.source}`,\r\n input.props.formClassName\r\n )}\r\n >\r\n {input.props.addLabel ? (\r\n <Labeled\r\n id={input.props.id || input.props.source}\r\n {...input.props}\r\n {...sanitizeRestProps(rest)}\r\n >\r\n {React.cloneElement(input, {\r\n className: classnames(\r\n {\r\n [classes.input]: !input.props.fullWidth,\r\n },\r\n input.props.className\r\n ),\r\n id: input.props.id || input.props.source,\r\n ...rest,\r\n })}\r\n </Labeled>\r\n ) : (\r\n React.cloneElement(input, {\r\n className: classnames(\r\n {\r\n [classes.input]: !input.props.fullWidth,\r\n },\r\n input.props.className\r\n ),\r\n id: input.props.id || input.props.source,\r\n ...rest,\r\n })\r\n )}\r\n </div>\r\n ) : null;\r\n\r\nFormInput.propTypes = {\r\n className: PropTypes.string,\r\n classes: PropTypes.object,\r\n input: PropTypes.object,\r\n};\r\n\r\n// wat? TypeScript looses the displayName if we don't set it explicitly\r\nFormInput.displayName = 'FormInput';\r\n\r\nexport default withStyles(styles)(FormInput);","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport classnames from 'classnames';\r\nimport CardContent from '@material-ui/core/CardContent';\r\nimport { withStyles, createStyles } from '@material-ui/core/styles';\r\n\r\nvar styles = theme => createStyles({\r\n root: {\r\n paddingTop: 0,\r\n paddingBottom: 0,\r\n '&:first-child': {\r\n paddingTop: 16,\r\n },\r\n '&:last-child': {\r\n paddingBottom: 16,\r\n // [theme.breakpoints.only('xs')]: {\r\n // paddingBottom: 70,\r\n // },\r\n },\r\n },\r\n});\r\n\r\n/**\r\n * Overrides material-ui CardContent to allow inner content\r\n *\r\n * When using several CardContent inside the same Card, the top and bottom\r\n * padding double the spacing between each CardContent, leading to too much\r\n * wasted space. Use this component as a CardContent alternative.\r\n */\r\nconst CardContentInner = ({ classes, className, children }) => (\r\n <CardContent className={classnames(classes.root, className)}>\r\n {children}\r\n </CardContent>\r\n);\r\n\r\nCardContentInner.propTypes = {\r\n className: PropTypes.string,\r\n classes: PropTypes.object.isRequired,\r\n children: PropTypes.node,\r\n};\r\n\r\nexport default withStyles(styles)(CardContentInner);","import React, { Children, Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { reduxForm } from 'redux-form';\r\nimport { connect } from 'react-redux';\r\nimport compose from 'recompose/compose';\r\nimport classnames from 'classnames';\r\nimport { getDefaultValues, translate, REDUX_FORM_NAME } from 'ra-core';\r\n\r\nimport FormInput from './FormInput';\r\nimport CardContentInner from './CardContentInner';\r\n\r\nconst sanitizeRestProps = ({\r\n anyTouched,\r\n array,\r\n asyncBlurFields,\r\n asyncValidate,\r\n asyncValidating,\r\n autofill,\r\n blur,\r\n change,\r\n clearAsyncError,\r\n clearFields,\r\n clearSubmit,\r\n clearSubmitErrors,\r\n destroy,\r\n dirty,\r\n dispatch,\r\n form,\r\n handleSubmit,\r\n initialize,\r\n initialized,\r\n initialValues,\r\n pristine,\r\n pure,\r\n redirect,\r\n reset,\r\n resetSection,\r\n save,\r\n submit,\r\n submitFailed,\r\n submitSucceeded,\r\n submitting,\r\n touch,\r\n translate,\r\n triggerSubmit,\r\n undoable,\r\n untouch,\r\n valid,\r\n validate,\r\n ...props\r\n}) => props;\r\n\r\nexport class SimpleForm extends Component {\r\n handleSubmitWithRedirect = (redirect = this.props.redirect) =>\r\n this.props.handleSubmit(values => this.props.save(values, redirect));\r\n\r\n render() {\r\n const {\r\n basePath,\r\n children,\r\n className,\r\n invalid,\r\n pristine,\r\n record,\r\n redirect,\r\n resource,\r\n saving,\r\n submitOnEnter,\r\n undoable,\r\n version,\r\n ...rest\r\n } = this.props;\r\n\r\n return (\r\n <form\r\n className={classnames('simple-form', className)}\r\n {...sanitizeRestProps(rest)}\r\n >\r\n <CardContentInner key={version}>\r\n {Children.map(children, input => (\r\n <FormInput\r\n basePath={basePath}\r\n input={input}\r\n record={record}\r\n resource={resource}\r\n />\r\n ))}\r\n </CardContentInner>\r\n </form>\r\n );\r\n }\r\n}\r\n\r\nSimpleForm.propTypes = {\r\n basePath: PropTypes.string,\r\n children: PropTypes.node,\r\n className: PropTypes.string,\r\n defaultValue: PropTypes.oneOfType([PropTypes.object, PropTypes.func]),\r\n handleSubmit: PropTypes.func, // passed by redux-form\r\n invalid: PropTypes.bool,\r\n pristine: PropTypes.bool,\r\n record: PropTypes.object,\r\n resource: PropTypes.string,\r\n redirect: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.bool,\r\n PropTypes.func,\r\n ]),\r\n save: PropTypes.func, // the handler defined in the parent, which triggers the REST submission\r\n saving: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),\r\n submitOnEnter: PropTypes.bool,\r\n undoable: PropTypes.bool,\r\n validate: PropTypes.func,\r\n version: PropTypes.number,\r\n};\r\n\r\nSimpleForm.defaultProps = {\r\n submitOnEnter: true\r\n};\r\n\r\nconst enhance = compose(\r\n connect((state, props) => ({\r\n form: props.form || REDUX_FORM_NAME,\r\n initialValues: getDefaultValues(state, props),\r\n saving: props.saving || state.admin.saving,\r\n })),\r\n translate, // Must be before reduxForm so that it can be used in validation\r\n reduxForm({\r\n destroyOnUnmount: false,\r\n enableReinitialize: true,\r\n keepDirtyOnReinitialize: true,\r\n })\r\n);\r\n\r\nexport default enhance(SimpleForm);","import React from 'react';\r\nimport params from './params';\r\nimport './index.css';\r\n//Input imports\r\n\r\nimport { withStyles } from '@material-ui/core';\r\nimport {\r\n required,\r\n translate,\r\n SelectInput as Select,\r\n NumberInput\r\n} from 'react-admin';\r\n\r\nimport PropTypes from 'prop-types';\r\nimport compose from 'recompose/compose';\r\nimport {\r\n Map,\r\n Marker,\r\n TileLayer\r\n} from 'react-leaflet'\r\nimport L from 'leaflet';\r\n\r\nimport { DateInput } from '../../../components';\r\nimport CalculateIcon from './icons/Calculate';\r\nimport Button from './MediumButton';\r\n\r\nimport SimpleForm from './Form/SimpleForm';\r\n\r\nconst listStyles = function styles(theme) {\r\n return {\r\n detailsMap: {\r\n [theme.breakpoints.down('xs')]: {\r\n minHeight: theme.spacing.unit * 40\r\n },\r\n flex: 1,\r\n display: 'flex',\r\n paddingTop: '16px',\r\n marginTop: '16px',\r\n justifyContent: 'flex-end',\r\n width: '100%',\r\n\r\n },\r\n toolbar: {\r\n [theme.breakpoints.up('sm')]: {\r\n paddingTop: '10px'\r\n },\r\n // [theme.breakpoints.down('xs')]: {\r\n paddingTop: '-75px',\r\n // },\r\n paddingLeft: '24px',\r\n paddingBottom: '15px',\r\n },\r\n options: {\r\n flex: 0.2,\r\n flexDirection: 'column',\r\n display: 'flex',\r\n marginRight: '2em'\r\n },\r\n inputs: {\r\n [theme.breakpoints.up('sm')]: {\r\n display: 'flex'\r\n },\r\n }\r\n }\r\n}\r\n\r\n// TO DO:\r\n// media diaria de satelites por hora / total - combobox - DONE\r\n// -->Fazer processamento de dados - DONE\r\n// -->Combobox (front end) - DONE\r\n// 3 cores para o gradiente dos graficos - checkbox - DONE\r\n// -->Checkbox (front end) - DONE\r\n// -->Passar variaveis da componete pai para as filho - DONE\r\n// end date, begin date - input - DONE\r\n// -->criar boxs de inpute (front end) - DONE\r\n// -->Passar variaveis da componete filho(Options) para pai(SatellitesCover) - DONE\r\n// -->Restringir intervalos de datas inadmissiveis - DONE\r\nclass Options extends React.Component {\r\n state = {\r\n start_date: undefined,\r\n end_date: undefined,\r\n lat: undefined,\r\n lng: undefined,\r\n alt: undefined,\r\n zoom: 10,\r\n minimum_elevation: 10,\r\n disabled: true\r\n }\r\n\r\n handleCalculate = () => {\r\n const { lat, lng, alt, start_date, end_date, minimum_elevation } = this.state;\r\n\r\n this.setState({ disabled: true });\r\n this.props.fetchData(lat, lng, alt, start_date, end_date, minimum_elevation);\r\n // .finally(_ => {\r\n // this.setState({ disabled: false });\r\n // });\r\n }\r\n\r\n componentDidMount() {\r\n const lat = (this.props.record.area.lat).toFixed(3);\r\n const lng = (this.props.record.area.lng).toFixed(3);\r\n const alt = params.default_alt;\r\n const minimum_elevation = this.state.minimum_elevation;\r\n let start_date, end_date;\r\n\r\n if (new Date(this.props.record.beginDate) >= new Date()) {\r\n start_date = new Date(this.props.record.beginDate);\r\n start_date = start_date.getFullYear() + \"-\" + ('0' + (start_date.getMonth() + parseInt(1))).slice(-2) + \"-\" + ('0' + start_date.getDate()).slice(-2);\r\n end_date = new Date(new Date(this.props.record.beginDate).getTime() + params.default_aditional_date);\r\n end_date = end_date.getFullYear() + \"-\" + ('0' + (end_date.getMonth() + parseInt(1))).slice(-2) + \"-\" + ('0' + end_date.getDate()).slice(-2);\r\n } else {\r\n start_date = new Date().getFullYear() + \"-\" + ('0' + (new Date().getMonth() + parseInt(1))).slice(-2) + \"-\" + ('0' + new Date().getDate()).slice(-2);\r\n end_date = new Date(new Date().getTime() + params.default_aditional_date);\r\n end_date = end_date.getFullYear() + \"-\" + ('0' + (end_date.getMonth() + parseInt(1))).slice(-2) + \"-\" + ('0' + end_date.getDate()).slice(-2);\r\n }\r\n\r\n this.props.fetchData(lat, lng, alt, start_date, end_date, minimum_elevation);\r\n\r\n this.setState({\r\n start_date,\r\n end_date,\r\n lat,\r\n lng,\r\n alt,\r\n minimum_elevation,\r\n });\r\n }\r\n\r\n handleDateInputChange = (_, after, before, source) => {\r\n if (source === 'start_date' && (after > new Date(this.state.end_date))) {\r\n let end_date = after; //new Date(after.getTime() + (1000*60*60*24));\r\n this.setState({\r\n [source]: after.getFullYear() + \"-\" + ('0' + (after.getMonth() + parseInt(1))).slice(-2) + \"-\" + ('0' + after.getDate()).slice(-2),\r\n end_date: end_date.getFullYear() + \"-\" + ('0' + (end_date.getMonth() + parseInt(1))).slice(-2) + \"-\" + ('0' + end_date.getDate()).slice(-2),\r\n disabled: false\r\n });\r\n }\r\n\r\n if (before)\r\n this.setState({ [source]: after.getFullYear() + \"-\" + ('0' + (after.getMonth() + parseInt(1))).slice(-2) + \"-\" + ('0' + after.getDate()).slice(-2), disabled: false });\r\n }\r\n\r\n handleMapOnClick = (param) => {\r\n this.setState({ lat: param.latlng.lat, lng: param.latlng.lng, disabled: false });\r\n }\r\n\r\n handleMapOnDrag = (param) => {\r\n this.setState({ lat: param.target._latlng.lat, lng: param.target._latlng.lng, disabled: false });\r\n }\r\n\r\n handleZoom = (param) => {\r\n this.setState({ zoom: param.target._zoom });\r\n }\r\n\r\n render() {\r\n const { translate, handleUpdate, user_color, classes } = this.props;\r\n return (\r\n <>\r\n <div className={classes.inputs} >\r\n <div className={classes.options}>\r\n <SimpleForm\r\n toolbar={null}\r\n >\r\n <Select\r\n source='color'\r\n defaultValue={user_color}\r\n onChange={(event, key, ...args) => {\r\n event.preventDefault();\r\n handleUpdate(\"user_color\", key)\r\n }}\r\n allowEmpty={false}\r\n label='resources.campaigns.satellites.charts_color'\r\n choices={[\r\n { id: params.colors[0].color, name: 'resources.campaigns.satellites.color0' },\r\n { id: params.colors[1].color, name: 'resources.campaigns.satellites.color1' },\r\n { id: params.colors[2].color, name: 'resources.campaigns.satellites.color2' }\r\n ]}\r\n />\r\n {this.state.start_date && <DateInput\r\n validate={required()}\r\n source='start_date'\r\n label={translate('resources.campaigns.satellites.begin_date')}\r\n month={true}\r\n options={{\r\n format: 'dd/MM/yyyy',\r\n }}\r\n onChange={this.handleDateInputChange}\r\n start_date={this.state.start_date}\r\n />}\r\n {this.state.end_date && <DateInput\r\n validate={required()}\r\n source='end_date'\r\n label={translate('resources.campaigns.satellites.end_date')}\r\n month={true}\r\n options={{\r\n format: 'dd/MM/yyyy',\r\n minDate: this.state.start_date\r\n }}\r\n onChange={this.handleDateInputChange}\r\n end_date={this.state.end_date}\r\n />}\r\n <NumberInput\r\n // disabled\r\n label={translate('resources.campaigns.satellites.minimum_elevation')}\r\n defaultValue={this.state.minimum_elevation}\r\n required\r\n onChange={(e, value) => {\r\n e.preventDefault();\r\n value < 0 ?\r\n this.setState({ minimum_elevation: 0, disabled: false }) :\r\n this.setState({ minimum_elevation: value, disabled: false })\r\n }}\r\n />\r\n </SimpleForm>\r\n <div className={classes.toolbar}>\r\n <Button disabled={this.state.disabled} variant={'raised'} onClick={this.handleCalculate} className={classes.button} color={'primary'} label='resources.campaigns.satellites.calculate_button'>\r\n <CalculateIcon />\r\n </Button>\r\n </ div>\r\n </div>\r\n <Map\r\n center={this.state.lat && this.state.lng ? L.latLng(this.state.lat, this.state.lng) : L.latLng(41.15, -8.611111)}\r\n zoom={this.state.zoom}\r\n onClick={this.handleMapOnClick}\r\n onZoomEnd={this.handleZoom}\r\n className={classes.detailsMap}\r\n >\r\n <TileLayer\r\n attribution=\"© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors\"\r\n url=\"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\"\r\n />\r\n {this.state.lat && this.state.lng && <Marker position={L.latLng(this.state.lat, this.state.lng)} onDragend={this.handleMapOnDrag} draggable />}\r\n </Map>\r\n </div>\r\n </>\r\n );\r\n }\r\n}\r\n\r\nOptions.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n};\r\n\r\nconst enhance = compose(\r\n translate,\r\n withStyles(listStyles),\r\n);\r\n\r\nexport default enhance(Options);","import React from 'react';\r\nimport './index.css';\r\nimport params from './params';\r\nimport Chart from './Chart';\r\nimport Chart2 from './Chart2';\r\nimport Options from './Options';\r\n\r\nimport { connect } from 'react-redux';\r\nimport compose from 'recompose/compose';\r\n\r\nimport {\r\n fetchStart,\r\n fetchEnd,\r\n showNotification\r\n} from 'react-admin';\r\n\r\nimport { DateTime } from 'luxon';\r\n\r\nimport {\r\n dataFetch,\r\n} from '../../../providers';\r\n\r\nfunction countSatellites(data, minimum_elevation = 5) {\r\n const parsed = {};\r\n const MAX_DEGREE = 40;\r\n data.root.forEach(({ begin, middle, end, middleElevation }, index) => {\r\n begin = DateTime.fromJSDate(new Date(begin));\r\n end = DateTime.fromJSDate(new Date(end));\r\n middle = DateTime.fromJSDate(new Date(middle));\r\n\r\n // const max_probability = middleElevation / 40 > 1 ? 1 : middleElevation / 40;\r\n // const max_probability = middleElevation / 90;\r\n\r\n\r\n const duration = end.diff(begin, 'seconds').toObject().seconds;\r\n\r\n // seconds since begin to the middleElevation\r\n let mid_duration = middle.diff(begin, 'seconds').toObject().seconds;\r\n\r\n const degreeByTime = (time, ascend) => {\r\n // m = ∆y / ∆x\r\n // y – y0 = m (x – x0)\r\n\r\n const m = (ascend ? mid_duration : (duration - mid_duration)) / (90 - minimum_elevation);\r\n\r\n // time = m * (x - minimum_elevation); \r\n // time = (m * x ) - (m * minimum_elevation); \r\n // time = (m * x ) - (m * minimum_elevation); \r\n // m * x = time + (m * minimum_elevation);\r\n\r\n return (time + (m * minimum_elevation)) / m;\r\n }\r\n\r\n let ascend = true;\r\n let count_seconds = 0;\r\n\r\n let now = begin;\r\n\r\n // satellites per hour\r\n const begin_hour = begin.get('hour');\r\n if (!parsed[begin_hour]) {\r\n parsed[begin_hour] = {\r\n metadata: {\r\n satellites: 1\r\n }\r\n };\r\n } else {\r\n parsed[begin_hour].metadata.satellites += 1\r\n }\r\n\r\n const end_hour = end.get('hour');\r\n\r\n if (end_hour !== begin_hour) {\r\n if (!parsed[end_hour]) {\r\n parsed[end_hour] = {\r\n metadata: {\r\n satellites: 1\r\n }\r\n };\r\n } else {\r\n parsed[end_hour].metadata.satellites += 1\r\n }\r\n }\r\n\r\n // columns\r\n const COLUMNS_SIZE = 10;\r\n let now_2 = begin;\r\n now_2.set({ second: 0 });\r\n const minute = now_2.get('minute');\r\n\r\n const mod = minute % COLUMNS_SIZE;\r\n\r\n if (mod > 0) {\r\n now_2 = now_2.minus({ minutes: mod });\r\n }\r\n\r\n while (now_2 < end) {\r\n\r\n if (!parsed[now_2.get('hour')]) {\r\n parsed[now_2.get('hour')] = {\r\n [now_2.get('minute')]: {\r\n satellites: 0,\r\n seconds: 0,\r\n probability: 0,\r\n index: [],\r\n total: 0\r\n }\r\n };\r\n }\r\n\r\n else if (!parsed[now_2.get('hour')][now_2.get('minute')]) {\r\n parsed[now_2.get('hour')][now_2.get('minute')] = {\r\n satellites: 0,\r\n seconds: 0,\r\n probability: 0,\r\n index: [],\r\n total: 0\r\n };\r\n }\r\n\r\n parsed[now_2.get('hour')][now_2.get('minute')].total += 1;\r\n\r\n now_2 = now_2.plus({ minutes: COLUMNS_SIZE });\r\n }\r\n\r\n while (now < end) { // ??? lt or le ???\r\n const minute = now.get('minute');\r\n const hour = now.get('hour');\r\n let seconds = 60;\r\n\r\n // if is begin time => ex 06:35:20 seconds are 40 and set to 0\r\n if (begin.get('minute') === minute && begin.get('hour') === hour) {\r\n seconds = 60 - now.get('second');\r\n now.set({ second: 0 });\r\n }\r\n else if (end.get('minute') === minute && end.get('hour') === hour) {\r\n seconds = now.get('second');\r\n }\r\n else if ( // can be possible ?\r\n begin.get('minute') === minute && begin.get('hour') === hour &&\r\n end.get('minute') === minute && end.get('hour') === hour\r\n ) {\r\n seconds = duration;\r\n }\r\n\r\n now = now.plus({ minutes: 1 });\r\n\r\n if (!parsed[hour][minute]) {\r\n parsed[hour][minute] = {\r\n satellites: 0,\r\n seconds: 0,\r\n probability: 0,\r\n index: [],\r\n // total: 0\r\n };\r\n }\r\n\r\n parsed[hour][minute].satellites += 1;\r\n parsed[hour][minute].seconds += seconds;\r\n\r\n // if(minute % 10 === 0) {\r\n // parsed[hour][minute].total += 1;\r\n // }\r\n let probability = 0;\r\n\r\n if (middle.get('minute') === minute && middle.get('hour') === hour) {\r\n ascend = false;\r\n\r\n // const start = max_probability * count_seconds / mid_duration;\r\n // const mid = max_probability * (count_seconds + middle.get('second')) / mid_duration;\r\n\r\n // mid_duration = duration - mid_duration;\r\n\r\n // const end = max_probability * (duration - (count_seconds + seconds)) / mid_duration;\r\n\r\n // const probability_p_minute = seconds / 60;\r\n // const degree = degreeByTime(mid_duration, true);\r\n probability = middleElevation / MAX_DEGREE > 1 ? 1 : middleElevation / MAX_DEGREE;//((start + end) / 2);\r\n\r\n // probability = max_probability; //((start + end) / 2);\r\n }\r\n else {\r\n if (ascend) {\r\n const start_prob = degreeByTime(count_seconds, true) / MAX_DEGREE;\r\n const start = start_prob > 1 ? 1 : start_prob;\r\n\r\n const end_prob = degreeByTime(count_seconds + seconds, true) / MAX_DEGREE;\r\n const end = end_prob > 1 ? 1 : end_prob;\r\n // const start = max_probability * count_seconds / mid_duration;\r\n // const end = max_probability * (count_seconds + seconds) / mid_duration;\r\n\r\n probability = ((start + end) / 2);\r\n\r\n } else {\r\n const start_prob = degreeByTime(duration - count_seconds, false) / MAX_DEGREE;\r\n const start = start_prob > 1 ? 1 : start_prob;\r\n\r\n const end_prob = degreeByTime(duration - (count_seconds + seconds), false) / MAX_DEGREE;\r\n const end = end_prob > 1 ? 1 : end_prob;\r\n\r\n\r\n // const start = max_probability * (duration - count_seconds) / mid_duration;\r\n // const end = max_probability * (duration - (count_seconds + seconds)) / mid_duration;\r\n\r\n probability = ((start + end) / 2);\r\n }\r\n }\r\n\r\n parsed[hour][minute].index.push({ index, probability });\r\n parsed[hour][minute].probability += probability;\r\n\r\n count_seconds += seconds;\r\n\r\n\r\n }\r\n });\r\n\r\n return parsed;\r\n}\r\n\r\nconst parseSatellites = (days, data) => {\r\n let final_data = [];\r\n\r\n const intervals = 5; // in minutes and 60%intervals=0\r\n\r\n let now = DateTime.local().set({ hour: 0, minute: 0, second: 0 });\r\n const final = now.plus({ days: 1 });\r\n\r\n\r\n while (now <= final) {\r\n const interval_object = {\r\n // total_satellites: 0,\r\n probability: 0,\r\n avg: 0,\r\n // total: 0\r\n };\r\n\r\n const hour = now.get('hour');\r\n const minute = now.get('minute');\r\n\r\n let satellites = 0;\r\n let probability = 0;\r\n let minutes_without_data = 0;\r\n\r\n for (let i = minute; i < minute + intervals; i++) {\r\n if (!data[hour] || !data[hour][i]) {\r\n minutes_without_data += 1;\r\n } else {\r\n probability += data[hour][i].probability;\r\n satellites += data[hour][i].satellites;\r\n }\r\n }\r\n\r\n if (data[hour] && data[hour][minute] && minute % 10 === 0) {\r\n interval_object.total = data[hour][minute].total;\r\n interval_object.avg = (data[hour][minute].total / Math.round(days)).toFixed(1);\r\n }\r\n\r\n if (satellites > 0) {\r\n interval_object.probability = (probability / (satellites + minutes_without_data) * 100).toFixed(1);\r\n }\r\n\r\n if (now.get('minute') === 0 && data[hour]) {\r\n interval_object.total_satellites = data[hour].metadata.satellites;\r\n }\r\n\r\n if (Object.keys(interval_object).length > 0) {\r\n interval_object.date = now.toJSDate();\r\n final_data.push(interval_object);\r\n\r\n if (now.get('minute') === 0 && now.plus({ hours: 1 }) <= final && interval_object.total_satellites) {\r\n interval_object.date_st = `${now.toFormat('HH:mm')} - ${now.plus({ hours: 1 }).toFormat('HH:mm')}`;\r\n }\r\n } else if (now.get('minute') === 0) {\r\n interval_object.date = now.toJSDate();\r\n final_data.push(interval_object);\r\n }\r\n\r\n now = now.plus({ minutes: intervals });\r\n }\r\n return final_data;\r\n};\r\n\r\nclass SatelliteCover extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n data: undefined,\r\n total_days: undefined,\r\n user_color: params.colors[0].color,\r\n chart1_color: params.colors[0].chart1_color,\r\n chart1_color_prob: params.colors[0].chart1_color_prob,\r\n chart2_color: params.colors[0].chart2_color,\r\n // minimum_elevation: 10\r\n };\r\n this.handleUpdate = this.handleUpdate.bind(this);\r\n this.fetchData = this.fetchData.bind(this);\r\n }\r\n\r\n handleUpdate(property, value) {\r\n if (property === 'user_color') {\r\n switch (value) {\r\n case params.colors[0].color:\r\n this.setState({ chart2_color: params.colors[0].chart2_color, chart1_color: params.colors[0].chart1_color, chart1_color_prob: params.colors[0].chart1_color_prob });\r\n break;\r\n case params.colors[1].color:\r\n this.setState({ chart2_color: params.colors[1].chart2_color, chart1_color: params.colors[1].chart1_color, chart1_color_prob: params.colors[1].chart1_color_prob });\r\n break;\r\n case params.colors[2].color:\r\n this.setState({ chart2_color: params.colors[2].chart2_color, chart1_color: params.colors[2].chart1_color, chart1_color_prob: params.colors[2].chart1_color_prob });\r\n break;\r\n default:\r\n this.setState({ chart2_color: params.colors[0].chart2_color, chart1_color: params.colors[0].chart1_color, chart1_color_prob: params.colors[0].chart1_color_prob });\r\n }\r\n }\r\n this.setState({ [property]: value });\r\n };\r\n\r\n fetchData(lat, lng, alt, start_date, end_date, minimum_elevation) {\r\n return new Promise((resolve, reject) => {\r\n this.props.fetchStart();\r\n\r\n let url = '/satellites?begin=' + start_date + '&end=' + end_date + '&lon=' + lng + '&lat=' + lat + '&alt=' + alt + \"&minEle=\" + minimum_elevation;\r\n dataFetch('GET', url)\r\n .then((data) => {\r\n\r\n //TODO: tratar o erro qnd não recebemos satélites\r\n if (!data.root[0]) {\r\n this.setState({ data: undefined });\r\n resolve();\r\n }\r\n const begin = DateTime.fromJSDate(new Date(data.root[0].begin));\r\n const end = DateTime.fromJSDate(new Date(data.root[data.root.length - 1].end));\r\n\r\n const total_days = end.diff(begin, 'days').toObject().days;\r\n const data_tmp = parseSatellites(total_days, countSatellites(data, minimum_elevation));\r\n\r\n this.setState({ data: data_tmp });\r\n resolve();\r\n })\r\n .catch((error) => {\r\n this.props.showNotification('resources.campaigns.satellites.request_error', 'warning');\r\n reject(error);\r\n })\r\n .finally(_ => this.props.fetchEnd());\r\n })\r\n };\r\n\r\n render() {\r\n return (\r\n <div>\r\n <Options fetchData={this.fetchData} user_color={this.state.user_color} handleUpdate={this.handleUpdate} {...this.props} style={{ display: 'flex', flexDirection: 'row' }} />\r\n {this.state.data && <Chart data={this.state.data} chart1_color={this.state.chart1_color} chart2_color={this.state.chart2_color} chart1_color_prob={this.state.chart1_color_prob} />}\r\n {this.state.data && <Chart2 data={this.state.data} chart1_color={this.state.chart1_color} chart2_color={this.state.chart2_color} />}\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nconst enhance = compose(\r\n connect(\r\n null,\r\n {\r\n fetchEnd,\r\n fetchStart,\r\n showNotification\r\n }\r\n )\r\n);\r\n\r\nexport default enhance(SatelliteCover);","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux'\r\nimport {\r\n BooleanField,\r\n BooleanInput,\r\n Create,\r\n // DateField,\r\n EditButton,\r\n Filter,\r\n Pagination,\r\n SearchInput,\r\n Show,\r\n ShowButton,\r\n SimpleForm,\r\n SimpleShowLayout,\r\n TextField,\r\n TextInput,\r\n TabbedShowLayout,\r\n Tab,\r\n ReferenceManyField,\r\n required,\r\n translate,\r\n NullableBooleanInput,\r\n fetchStart,\r\n fetchEnd,\r\n showNotification,\r\n ListButton,\r\n crudDeleteMany as crudDeleteManyAction,\r\n AutocompleteInput,\r\n ReferenceInput,\r\n ReferenceField,\r\n Labeled\r\n} from 'react-admin';\r\n\r\nimport {\r\n Map,\r\n Marker,\r\n TileLayer\r\n} from 'react-leaflet'\r\nimport { Typography, withStyles, Button, IconButton } from '@material-ui/core';\r\nimport { fade } from '@material-ui/core/styles/colorManipulator';\r\nimport { DirectionsBoat as BoatIcon, Delete } from '@material-ui/icons';\r\nimport compose from 'recompose/compose';\r\nimport { change as changeAction } from 'redux-form';\r\nimport TabbedShowLayoutTabs from '../../utils/CustomTabbedShowLayoutTabs';\r\n\r\nimport {\r\n DefaultCardActions,\r\n DissociateButton,\r\n GeoCoordinatesInput,\r\n GeoCoordinatesField,\r\n ReferenceManyManyField,\r\n Relation,\r\n RelationShow,\r\n ResponsiveDatagrid,\r\n ResponsiveList,\r\n DateInput,\r\n Edit,\r\n LocalSearch,\r\n DateField\r\n} from '../../components';\r\n\r\nimport LaunchesToolbar from './LaunchesToolbar';\r\nimport LaunchOpenField from './LaunchOpenField';\r\nimport EquipmentActiveField from './EquipmentActiveField';\r\nimport MyRelation from './RelationNotes';\r\n\r\nimport ListDatasets from '../datasets/ListDatasets';\r\n\r\nimport {\r\n CheckCircle as CheckCircleIcon,\r\n ErrorOutline as ErrorOutlineIcon,\r\n} from '@material-ui/icons';\r\n\r\nimport SatelliteCover from './Satellites';\r\nimport { storage } from '../../providers';\r\n\r\nexport const CampaignIcon = BoatIcon;\r\n\r\nconst listStyles = function styles(theme) {\r\n const height = 32;\r\n let backgroundColor = theme.palette.type === 'light' ? theme.palette.grey[300] : theme.palette.grey[700];\r\n // var deleteIconColor = (0, _colorManipulator.fade)(theme.palette.text.primary, 0.26);\r\n return {\r\n tag_root: {\r\n fontFamily: theme.typography.fontFamily,\r\n fontSize: theme.typography.pxToRem(13),\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n height: height,\r\n color: theme.palette.getContrastText(backgroundColor),\r\n backgroundColor: backgroundColor,\r\n borderRadius: height / 2,\r\n whiteSpace: 'nowrap',\r\n transition: theme.transitions.create(['background-color', 'box-shadow']),\r\n // label will inherit this from root, then `clickable` class overrides this for both\r\n cursor: 'default',\r\n // We disable the focus ring for mouse, touch and keyboard users.\r\n outline: 'none',\r\n textDecoration: 'none',\r\n border: 'none',\r\n // Remove `button` border\r\n padding: 0, // Remove `button` padding,\r\n\r\n },\r\n tag_label: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n paddingLeft: 12,\r\n paddingRight: 12,\r\n userSelect: 'none',\r\n whiteSpace: 'nowrap',\r\n cursor: 'inherit'\r\n },\r\n tabs: {\r\n width: 0\r\n },\r\n flexible: {\r\n [theme.breakpoints.up('sm')]: {\r\n display: 'flex'\r\n },\r\n },\r\n detailsData: {\r\n flex: 0.6\r\n },\r\n detailsMap: {\r\n [theme.breakpoints.down('xs')]: {\r\n minHeight: theme.spacing.unit * 40\r\n },\r\n flex: 1,\r\n display: 'flex',\r\n paddingTop: '16px',\r\n justifyContent: 'flex-end'\r\n },\r\n fullWidth: {\r\n width: '100%'\r\n },\r\n right: {\r\n float: 'right',\r\n },\r\n warningEquipments: {\r\n color: theme.palette.error.main,\r\n '&:hover': {\r\n backgroundColor: fade(theme.palette.error.main, 0.12),\r\n // Reset on mouse devices\r\n // '@media (hover: none)': {\r\n // backgroundColor: 'transparent',\r\n // },\r\n },\r\n },\r\n\r\n label: {\r\n // Move the text out of the flow of the container.\r\n position: 'absolute',\r\n\r\n // Reduce its height and width to just one pixel.\r\n height: 1,\r\n width: 1,\r\n\r\n // Hide any overflowing elements or text.\r\n overflow: 'hidden',\r\n\r\n // Clip the box to zero pixels.\r\n clip: 'rect(0, 0, 0, 0)',\r\n\r\n // Text won't wrap to a second line.\r\n whiteSpace: 'nowrap',\r\n }\r\n }\r\n}\r\n\r\nconst CampaignFilter = translate(({ translate, ...props }) => (\r\n <Filter {...props}>\r\n <SearchInput source=\"q\" alwaysOn label={translate('pos.search')} />\r\n <NullableBooleanInput source=\"hide\" />\r\n <NullableBooleanInput source=\"public\" />\r\n </Filter>\r\n));\r\n\r\nexport const CampaignList = withStyles(listStyles)(({ classes, ...props }) => (\r\n <ResponsiveList\r\n {...props}\r\n listFilters={<CampaignFilter />}\r\n recordActions={[<ShowButton />]}\r\n >\r\n <TextField source=\"name\" />\r\n <TextField source=\"description\" />\r\n <DateField source=\"beginDate\" format='dd/MM/yyyy' noFields />\r\n <GeoCoordinatesField source=\"area\" />\r\n <TextField source=\"zoom\" />\r\n <BooleanField source=\"hide\" />\r\n <BooleanField source=\"public\" />\r\n </ResponsiveList>\r\n));\r\n\r\nconst CampaignActions = ({ data, basePath, ...props }) => {\r\n return <div style={{ display: 'flex', justifyContent: 'space-between' }}>\r\n <div>\r\n {data && <Typography variant='title'>{data.name}</Typography>}\r\n <Typography variant='caption'> </Typography>\r\n </div>\r\n <div style={{ right: 0 }}>\r\n {data && <EditButton record={{ id: data.id }} basePath={basePath} />}\r\n {data && <ListButton basePath={basePath} />}\r\n </div>\r\n </div>\r\n}\r\n\r\nconst EquipmentWarning = ({ classes, record, history, translate, ...props }) => {\r\n const handleClick = () => {\r\n history.push(`/campaigns/${record.id}/show/equipment`)\r\n }\r\n\r\n if (record.equipment && record.equipment.length === 0)\r\n return <Button onClick={handleClick} className={classes.warningEquipments}>{translate('resources.campaigns.fields.noEquipments')}</Button>\r\n return null;\r\n}\r\n\r\nconst CustomCampaignDetails = ({ className, record, ...props }) => {\r\n return <Map className={className} viewport={{ center: record ? record.area : [41.15, -8.611111], zoom: record ? record.zoom : 6 }} >\r\n <TileLayer\r\n attribution=\"© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors\"\r\n url=\"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\"\r\n />\r\n {record && <Marker position={record.area} />}\r\n </Map>\r\n}\r\n\r\nclass _NoteTagField extends Component {\r\n render() {\r\n let key = 0;\r\n const { classes, record } = this.props;\r\n return record.tags.map(tag => {\r\n return (\r\n <span className={classes.tag_root} key={key++}>\r\n <span className={classes.tag_label} > {tag.name}</span>\r\n </ span>\r\n )\r\n })\r\n }\r\n}\r\n\r\nconst NoteTagField = withStyles(listStyles)(_NoteTagField)\r\n\r\nclass TextFieldLimitedSize extends Component {\r\n render() {\r\n const { record } = this.props;\r\n const maxLength = 30;\r\n if (record.description.length > maxLength) {\r\n return (record.description.substring(0, maxLength) + '...');\r\n } else {\r\n return (record.description);\r\n }\r\n\r\n }\r\n}\r\n\r\n\r\nconst ReferenceCAA = ({ record, ...props }) => {\r\n const { public: _public, permLink } = record;\r\n if (!_public)\r\n return null\r\n\r\n const url = `https://meloa-citizen.inesctec.pt/${permLink}#/`;\r\n return <Labeled label={'CAA URL'}>\r\n <a href={url} target=\"_blank\" rel=\"noopener noreferrer\">\r\n {url}\r\n </a>\r\n </ Labeled>\r\n};\r\n\r\n\r\nconst EquipmentLaunchWarning = ({ ids, history, record, parentrecord, ...props }) => {\r\n const handleClick = () => {\r\n if (parentrecord)\r\n history.push(`/launches/${parentrecord.id}/show/1`)\r\n }\r\n\r\n if (ids && ids.length > 0)\r\n return <IconButton onClick={handleClick}>\r\n <CheckCircleIcon style={{ color: 'rgba(50,205,50)' }} />\r\n </IconButton>\r\n\r\n return <IconButton onClick={handleClick}>\r\n <ErrorOutlineIcon style={{ color: 'rgba(255,0,0)' }} />\r\n </IconButton>\r\n};\r\n\r\n\r\n\r\nclass CampaignShowComp extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n version: 0,\r\n selectedIds: [],\r\n };\r\n\r\n this.selectOne = this.selectOne.bind(this);\r\n this.selectAll = this.selectAll.bind(this);\r\n this.deleteMultiple = this.deleteMultiple.bind(this);\r\n this.deleteMultipleNotes = this.deleteMultipleNotes.bind(this);\r\n\r\n }\r\n\r\n deleteMultiple() {\r\n const { selectedIds } = this.state;\r\n\r\n if (selectedIds.length > 0) {\r\n const campaignId = this.props.id;\r\n\r\n const { basePath, crudDeleteMany } = this.props\r\n crudDeleteMany(`/campaigns/${campaignId}/equipment/rel`, selectedIds, {}, basePath);\r\n this.setState({ selectedIds: [] })\r\n }\r\n }\r\n deleteMultipleNotes() {\r\n const { selectedIds } = this.state;\r\n const { basePath, crudDeleteMany } = this.props;\r\n\r\n crudDeleteMany(`notes`, selectedIds, {}, basePath);\r\n this.setState({ selectedIds: [] });\r\n }\r\n selectOne(e) {\r\n let { selectedIds } = this.state;\r\n const index = selectedIds.indexOf(e);\r\n if (index === -1)\r\n selectedIds.push(e)\r\n else\r\n selectedIds.splice(index, 1);\r\n\r\n this.setState({ selectedIds: selectedIds, version: this.state.version + 1 })\r\n }\r\n\r\n selectAll(e) {\r\n this.setState((state) => ({ selectedIds: [...e], version: state.version + 1 }))\r\n }\r\n\r\n render() {\r\n const { classes, translate, fetchStart, fetchEnd, showNotification, crudDeleteMany, history, ...props } = this.props;\r\n const { version, selectedIds } = this.state;\r\n\r\n return (\r\n <Show actions={<CampaignActions />} {...props} >\r\n <TabbedShowLayout tabs={<TabbedShowLayoutTabs classes={{ scrollable: classes.tabs }} scrollable scrollButtons={'on'} />}>\r\n <Tab className={classes.flexible} label='resources.campaigns.tabs.details' style={{ display: 'flex', flexDirection: 'row' }}>\r\n <SimpleShowLayout className={classes.detailsData}>\r\n <TextField source=\"name\" />\r\n <TextField source=\"description\" />\r\n <DateField source=\"beginDate\" format='dd/MM/yyyy' noFields />\r\n <GeoCoordinatesField source=\"area\" />\r\n <TextField source=\"zoom\" />\r\n <BooleanField source=\"hide\" />\r\n <BooleanField source=\"public\" />\r\n <ReferenceField source=\"ownerId\" reference=\"users/public\" linkType={false}>\r\n <TextField source=\"name\" />\r\n </ReferenceField>\r\n <ReferenceField label={translate('resources.institutions.name', {smart_count: 1})} source=\"ownerId\" reference=\"users/public\" linkType={false}>\r\n <TextField source=\"institutionName\" />\r\n </ReferenceField>\r\n <ReferenceCAA source=\"permlink\" />\r\n <EquipmentWarning classes={classes} history={history} translate={translate} />\r\n </SimpleShowLayout>\r\n <CustomCampaignDetails className={classes.detailsMap} />\r\n </Tab>\r\n <Tab label='resources.campaigns.tabs.launches' path='launches'>\r\n <LaunchesToolbar />\r\n <ReferenceManyField reference='launches' target='campaignId' addLabel={false} pagination={<Pagination />}>\r\n <ResponsiveDatagrid actions={[/*<BuildButton recordId=\"id\"/>,*/ <EditButton />, <ShowButton />]}>\r\n <ReferenceManyManyField addLabel={false} reference='equipment' label={translate('resources.launches.fields.equipmentAdded')}>\r\n <EquipmentLaunchWarning history={history} />\r\n </ReferenceManyManyField>\r\n <LaunchOpenField source='state' />\r\n <TextField source='name' />\r\n {/* <TextField source='description' /> */}\r\n <DateField source='beginTimestamp' format='dd/MM/yyyy HH:mm:ss' />\r\n <DateField source='endTimestamp' format='dd/MM/yyyy HH:mm:ss' />\r\n <BooleanField source=\"public\" />\r\n {/* <BooleanField source=\"autoPublish\" /> */}\r\n {/* <ReferenceField label=\"Number of Equipments\" source=\"id\" reference=\"launches/count/equipment\" linkType={false} sortable={false} allowEmpty>\r\n <TextField source=\"count\"/>\r\n </ReferenceField> */}\r\n </ResponsiveDatagrid>\r\n </ReferenceManyField>\r\n </Tab>\r\n <Tab label='resources.campaigns.tabs.datasets' path='datasets'>\r\n <ReferenceManyManyField source='campaigns' reference='datasets' addLabel={false} pagination={<Pagination />}>\r\n <ListDatasets campaignC={false} />\r\n </ReferenceManyManyField>\r\n </Tab>\r\n <Tab label='resources.campaigns.tabs.equipment' path='equipment'>\r\n <ReferenceManyManyField reference='equipment' addLabel={false} params={{\r\n include: {\r\n relation: \"launches\",\r\n scope: {\r\n where: {\r\n and: [\r\n { endTimestamp: null },\r\n { campaignId: props.id }\r\n ]\r\n }\r\n }\r\n }\r\n }} pagination={<Pagination />}>\r\n <RelationShow reference={'equipment'}\r\n dialogContent={\r\n <Relation basePath='campaigns'\r\n recordId={props.id}\r\n pagination={<Pagination />}\r\n reference={`/campaigns/${props.id}/equipment`}\r\n changeIdOnRequest={'id'}\r\n listFilters={<LocalSearch filter=\"serialNumber\" label={translate(\"resources.equipment.fields.serialNumber\")} />}\r\n >\r\n <ResponsiveDatagrid>\r\n <TextField source='name' />\r\n <TextField source='number' />\r\n <TextField source='serialNumber' />\r\n <BooleanField source=\"import\" />\r\n </ResponsiveDatagrid>\r\n </Relation>\r\n }\r\n secondPress={selectedIds.length > 0 ? this.deleteMultiple : undefined}\r\n Icon={Delete}\r\n secondLabel={translate('pos.general.remove_button')}\r\n >\r\n\r\n <ResponsiveDatagrid version={version} hasBulkActions={true} selectedIds={selectedIds} onToggleItem={this.selectOne} onSelect={this.selectAll} /*{...props}*/>\r\n <EquipmentActiveField source=\"state\" />\r\n <TextField source='name' />\r\n <TextField source='number' />\r\n <TextField source='serialNumber' />\r\n <BooleanField source='import' />\r\n </ResponsiveDatagrid>\r\n </RelationShow>\r\n </ReferenceManyManyField>\r\n </Tab>\r\n <Tab label='resources.campaigns.tabs.satellites' path='satellites'>\r\n <SatelliteCover />\r\n </Tab>\r\n <Tab label='resources.campaigns.tabs.teams' path='teams'>\r\n <ReferenceManyManyField source='campaigns' reference='teams' addLabel={false} pagination={<Pagination />}>\r\n <RelationShow reference='teams'\r\n dialogContent={<Relation basePath='campaigns' recordId={props.id} pagination={<Pagination />}>\r\n <ResponsiveDatagrid>\r\n <TextField source='name' />\r\n <TextField source='code' />\r\n </ResponsiveDatagrid>\r\n </Relation>}\r\n >\r\n <ResponsiveDatagrid actions={[<DissociateButton basePath='campaigns' basePathId={props.id} />]}>\r\n <TextField source='name' />\r\n <TextField source='code' />\r\n </ResponsiveDatagrid>\r\n </RelationShow>\r\n </ReferenceManyManyField>\r\n </Tab>\r\n <Tab label='resources.campaigns.tabs.overlays' path='overlays'>\r\n <ReferenceManyManyField source='campaigns' reference='overlays' addLabel={false} pagination={<Pagination />}>\r\n <RelationShow reference='overlays'\r\n dialogContent={<Relation basePath='campaigns' recordId={props.id} pagination={<Pagination />}>\r\n <ResponsiveDatagrid>\r\n <TextField source='name' />\r\n <TextField source='opacity' />\r\n <GeoCoordinatesField source='northEast' />\r\n <GeoCoordinatesField source='southWest' />\r\n </ResponsiveDatagrid>\r\n </Relation>}\r\n >\r\n <ResponsiveDatagrid actions={[<DissociateButton basePath='campaigns' basePathId={props.id} />]}>\r\n <TextField source='name' />\r\n <TextField source='opacity' />\r\n <GeoCoordinatesField source='northEast' />\r\n <GeoCoordinatesField source='southWest' />\r\n </ResponsiveDatagrid>\r\n </RelationShow>\r\n </ReferenceManyManyField>\r\n </Tab>\r\n\r\n <Tab label='resources.campaigns.tabs.notes' path='notes'>\r\n <ReferenceManyManyField source='campaigns' reference='notes' addLabel={false}\r\n params={{\r\n include:\r\n \"tags\"\r\n }}\r\n pagination={<Pagination />}>\r\n <MyRelation reference={'notes'}\r\n\r\n secondPress={selectedIds.length > 0 ? this.deleteMultipleNotes : undefined}\r\n Icon={Delete}\r\n secondLabel={translate('pos.general.remove_button')}\r\n >\r\n <ResponsiveDatagrid hasBulkActions={true} version={version} selectedIds={selectedIds} onToggleItem={this.selectOne} onSelect={this.selectAll} actions={[<EditButton />, <ShowButton />]}>\r\n <DateField source='beginTime' showTime />\r\n <TextFieldLimitedSize source='description' />\r\n <NoteTagField source='tags' classes={classes} />\r\n </ResponsiveDatagrid>\r\n </MyRelation>\r\n </ReferenceManyManyField>\r\n </Tab>\r\n </TabbedShowLayout>\r\n </Show>\r\n )\r\n }\r\n}\r\n\r\nexport const CampaignShow =\r\n compose(\r\n translate,\r\n withStyles(listStyles),\r\n connect(null, {\r\n showNotification,\r\n fetchEnd,\r\n fetchStart,\r\n crudDeleteMany: crudDeleteManyAction,\r\n })\r\n )(CampaignShowComp);\r\n\r\n\r\nclass CampaignEditContent extends Component {\r\n\r\n handleClick = (param) => {\r\n this.props.changeForm('record-form', 'area', param.latlng)\r\n }\r\n\r\n handleDrag = (param) => {\r\n this.props.changeForm('record-form', 'area', param.target._latlng)\r\n }\r\n\r\n handleZoom = (param) => {\r\n this.props.changeForm('record-form', 'zoom', param.target._zoom)\r\n }\r\n\r\n render() {\r\n const { areaPoint, changeForm, classes, translate, zoom, ...rest } = this.props;\r\n\r\n return <Edit {...rest}>\r\n <SimpleForm redirect='show' >\r\n <CustomCampaignForm classes={classes} areaPoint={areaPoint} zoom={parseInt(zoom)} handleClick={this.handleClick} handleDrag={this.handleDrag} handleZoom={this.handleZoom} onEdit={true} />\r\n </SimpleForm>\r\n </Edit>\r\n }\r\n};\r\n\r\nconst CustomCampaignForm = translate(({ areaPoint, children, classes, translate, zoom, handleClick, handleDrag, handleZoom, onEdit = false, ...props }) => {\r\n const userRole = storage.load('role');\r\n const userId = storage.load('userId');\r\n return <div style={{ display: 'flex' }}>\r\n <div style={{ flex: 0.3, flexDirection: 'column', display: 'flex', marginRight: '2em' }}>\r\n <TextInput\r\n source=\"name\"\r\n validate={required()}\r\n {...props}\r\n />\r\n <TextInput\r\n source=\"description\"\r\n validate={required()}\r\n {...props}\r\n />\r\n <DateInput\r\n source=\"beginDate\"\r\n label={translate('resources.campaigns.fields.beginDate')}\r\n validate={required()}\r\n month={true}\r\n options={{\r\n format: 'dd/MM/yyyy',\r\n clearable: true\r\n }}\r\n // {...props}\r\n // record={{ola: \"\"}}\r\n />\r\n <TextInput\r\n source=\"zoom\"\r\n validate={required()}\r\n {...props}\r\n />\r\n <GeoCoordinatesInput\r\n source=\"area\"\r\n hasLabel={false}\r\n validate={required()}\r\n fieldClassName={classes.fullWidth}\r\n {...props}\r\n />\r\n <BooleanInput source=\"hide\" {...props} />\r\n {onEdit && userRole && (userRole !== 'user' || (props && props.record && props.record.ownerId === userId)) && <ReferenceInput label=\"Owner\" source=\"ownerId\" reference=\"users/public\">\r\n <AutocompleteInput source=\"username\" validate={required()} />\r\n </ReferenceInput>}\r\n\r\n {/* <BooleanInput source=\"public\" {...props}/> */}\r\n </div>\r\n <Map style={{ flex: 0.7 }} zoom={zoom || 6}\r\n center={areaPoint !== undefined && areaPoint.lat && areaPoint.lng ? areaPoint : [41.15, -8.611111]}\r\n onClick={handleClick} onZoomEnd={handleZoom}\r\n >\r\n <TileLayer\r\n attribution=\"© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors\"\r\n url=\"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\"\r\n />\r\n {areaPoint && areaPoint.lat && areaPoint.lng && <Marker position={areaPoint} onDragend={handleDrag} draggable />}\r\n </Map>\r\n </div>\r\n})\r\n\r\nclass CampaignCreateContent extends Component {\r\n\r\n handleClick = (param) => {\r\n this.props.changeForm('record-form', 'area', param.latlng)\r\n }\r\n\r\n handleDrag = (param) => {\r\n this.props.changeForm('record-form', 'area', param.target._latlng)\r\n }\r\n\r\n handleZoom = (param) => {\r\n this.props.changeForm('record-form', 'zoom', param.target._zoom)\r\n }\r\n\r\n render() {\r\n const { areaPoint, classes, translate, zoom, changeForm, ...rest } = this.props;\r\n\r\n return <Create actions={<DefaultCardActions />} {...rest}>\r\n <SimpleForm redirect='show' >\r\n <CustomCampaignForm areaPoint={areaPoint} zoom={parseInt(zoom)} handleClick={this.handleClick} handleDrag={this.handleDrag} handleZoom={this.handleZoom} classes={classes} />\r\n </SimpleForm>\r\n </Create>\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => ({\r\n areaPoint: state.form && state.form[\"record-form\"] && state.form[\"record-form\"].values && state.form[\"record-form\"].values.area,\r\n zoom: state.form && state.form[\"record-form\"] && state.form[\"record-form\"].values && state.form[\"record-form\"].values.zoom\r\n})\r\n\r\nconst enhance = compose(\r\n translate,\r\n withStyles(listStyles),\r\n connect(mapStateToProps, {\r\n changeForm: changeAction\r\n })\r\n)\r\n\r\nexport const CampaignEdit = enhance(CampaignEditContent);\r\nexport const CampaignCreate = enhance(CampaignCreateContent);","import React, { Component } from 'react';\r\nimport {\r\n Button,\r\n Filter,\r\n SearchInput,\r\n translate,\r\n showNotification,\r\n} from 'react-admin';\r\nimport PublishButton from './PublishButton';\r\nimport {\r\n List as Icon,\r\n} from '@material-ui/icons';\r\nimport { Link } from 'react-router-dom';\r\nimport get from 'lodash/get';\r\nimport { stringify } from 'query-string';\r\n\r\nimport {\r\n ResponsiveL,\r\n} from '../../components';\r\n\r\n// import { SOCKET_DEBUG } from '../../Configuration';\r\n\r\n// import { \r\n// emit,\r\n// listen,\r\n// stopListen,\r\n// } from '../../sockets'\r\n\r\nimport { compose } from 'recompose';\r\nimport { connect } from 'react-redux';\r\n\r\nimport ListDatasets from './ListDatasets';\r\n// import { refreshView } from 'ra-core';\r\n\r\nexport const DatasetIcon = Icon;\r\n\r\nconst DatasetFilter = translate(({ translate, ...props }) => (\r\n <Filter {...props}>\r\n <SearchInput source=\"q\" alwaysOn label={translate('pos.search')} />\r\n </Filter>\r\n));\r\n\r\nconst TableButton = props => (\r\n <Button component={Link}\r\n label='pos.general.table'\r\n to={{\r\n pathname: `/${props.reference}`,\r\n search: stringify({\r\n page: 1,\r\n perPage: 25,\r\n filter: JSON.stringify({ [props.src]: get(props.record, 'id') }),\r\n }),\r\n state: {\r\n dataset: props.record\r\n }\r\n }}\r\n >\r\n <DatasetIcon />\r\n </Button>\r\n);\r\n\r\n\r\nclass _DatasetList extends Component {\r\n // componentDidMount() {\r\n // this.props.emit('enter', {room : 'datasetList'})\r\n // .catch(err => {\r\n // if(SOCKET_DEBUG)\r\n // console.log(\"err datasetList\", err);\r\n // });\r\n\r\n // this.props.listen('datasetList', (data) => { // ! duplicaded\r\n // const { refresh, dataset } = data;\r\n // if(refresh && this.props.ids.includes(dataset.id)) {\r\n // // this.props.showNotification('sockets.update_data');\r\n // this.props.refreshView();\r\n // }\r\n // })\r\n // .catch(err => {\r\n // if(SOCKET_DEBUG)\r\n // console.log(\"err datasetList\", err);\r\n // });\r\n // }\r\n\r\n // componentWillUnmount() {\r\n // this.props.stopListen('datasetList')\r\n // .catch(err => {\r\n // if(SOCKET_DEBUG)\r\n // console.log(\"err datasetList\", err);\r\n // });\r\n\r\n // this.props.emit('leave', {room : 'datasetList'})\r\n // .catch(err => {\r\n // if(SOCKET_DEBUG)\r\n // console.log(\"err datasetList\", err);\r\n // });\r\n // }\r\n\r\n render() {\r\n const { classes, listen, stopListen, emit, showNotification, /*refreshView,*/ ...rest } = this.props;\r\n return (\r\n <ResponsiveL\r\n {...rest}\r\n listFilters={<DatasetFilter />}\r\n recordActions={[<TableButton src='datasetId' reference='observations' />, /*<MapButton />, <ChartsButton />,*/ <PublishButton />]}\r\n >\r\n <ListDatasets />\r\n </ResponsiveL >\r\n\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => ({\r\n ids: state.admin.resources.datasets.list.ids\r\n});\r\n\r\nconst enhance = compose(\r\n connect(mapStateToProps, {\r\n // listen,\r\n // stopListen,\r\n // emit,\r\n showNotification,\r\n // refreshView,\r\n })\r\n);\r\n\r\nexport const DatasetList = enhance(_DatasetList);","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport Button from '@material-ui/core/Button';\nimport { withStyles, createStyles } from '@material-ui/core/styles';\nimport { fade } from '@material-ui/core/styles/colorManipulator';\nimport ActionCheck from '@material-ui/icons/CheckCircle';\nimport AlertError from '@material-ui/icons/ErrorOutline';\nimport classnames from 'classnames';\nimport compose from 'recompose/compose';\nimport { translate } from 'ra-core';\n\nconst styles = theme =>\n createStyles({\n contentText: {\n minWidth: 400,\n },\n confirmPrimary: {\n color: theme.palette.primary.main,\n },\n confirmWarning: {\n color: theme.palette.error.main,\n '&:hover': {\n backgroundColor: fade(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n iconPaddingStyle: {\n paddingRight: '0.5em',\n },\n });\n\nclass Confirm extends Component {\n state = { loading: false };\n\n componentDidUpdate(oldProps) {\n if(oldProps.isOpen !== this.props.isOpen && this.props.isOpen === false){\n this.setState({loading: false});\n }\n }\n\n handleConfirm = e => {\n e.stopPropagation();\n this.setState({ loading: true });\n this.props.onConfirm();\n };\n\n render() {\n const {\n isOpen,\n title,\n content,\n confirm,\n cancel,\n confirmColor,\n onClose,\n classes,\n translate,\n translateOptions = {},\n } = this.props;\n const { loading } = this.state;\n\n return (\n <Dialog\n open={isOpen}\n onClose={onClose}\n aria-labelledby=\"alert-dialog-title\"\n >\n <DialogTitle id=\"alert-dialog-title\">\n {translate(title, { _: title, ...translateOptions })}\n </DialogTitle>\n <DialogContent>\n <DialogContentText className={classes.contentText}>\n {translate(content, {\n _: content,\n ...translateOptions,\n })}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button disabled={loading} onClick={onClose}>\n <AlertError className={classes.iconPaddingStyle} />\n {translate(cancel, { _: cancel })}\n </Button>\n <Button\n disabled={loading}\n onClick={this.handleConfirm}\n className={classnames('ra-confirm', {\n [classes.confirmWarning]:\n confirmColor === 'warning',\n [classes.confirmPrimary]:\n confirmColor === 'primary',\n })}\n autoFocus\n >\n <ActionCheck className={classes.iconPaddingStyle} />\n {translate(confirm, { _: confirm })}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nConfirm.propTypes = {\n cancel: PropTypes.string.isRequired,\n classes: PropTypes.object.isRequired,\n confirm: PropTypes.string.isRequired,\n confirmColor: PropTypes.string.isRequired,\n content: PropTypes.string.isRequired,\n isOpen: PropTypes.bool,\n onClose: PropTypes.func.isRequired,\n onConfirm: PropTypes.func.isRequired,\n title: PropTypes.string.isRequired,\n translate: PropTypes.func.isRequired,\n};\n\nConfirm.defaultProps = {\n cancel: 'ra.action.cancel',\n classes: {},\n confirm: 'ra.action.confirm',\n confirmColor: 'primary',\n isOpen: false,\n};\n\nexport default compose(\n withStyles(styles),\n translate\n)(Confirm);\n","import React, { Component } from 'react';\r\nimport { Button, refreshView, showNotification, Labeled, LinearProgress, TextField } from 'react-admin';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport compose from 'recompose/compose';\r\nimport { withStyles, createStyles } from '@material-ui/core/styles';\r\nimport { fade } from '@material-ui/core/styles/colorManipulator';\r\nimport DonutLargeIcon from '@material-ui/icons/DonutLarge';\r\nimport { translate } from 'ra-core';\r\n\r\n// import FormControlLabel from '@material-ui/core/FormControlLabel';\r\n// import FormGroup from '@material-ui/core/FormGroup';\r\n// import Switch from '@material-ui/core/Switch';\r\n\r\nimport { push } from 'react-router-redux';\r\nimport Confirm from './Confirm';\r\nimport { dataFetch } from '../../providers';\r\n// import SimpleModal from '../../components/SimpleModal';\r\n// import CustomToolbar from '../../components/Toolbar/CustomToolbar';\r\n\r\nconst sanitizeRestProps = ({\r\n basePath,\r\n classes,\r\n crudDelete,\r\n filterValues,\r\n handleSubmit,\r\n handleSubmitWithRedirect,\r\n invalid,\r\n label,\r\n pristine,\r\n resource,\r\n saving,\r\n selectedIds,\r\n submitOnEnter,\r\n redirect,\r\n refreshView,\r\n showNotification,\r\n push,\r\n hasList,\r\n hasCreate,\r\n hasShow,\r\n hasEdit,\r\n translate,\r\n ...rest\r\n}) => rest;\r\n\r\nconst styles = theme =>\r\n createStyles({\r\n deleteButton: {\r\n color: theme.palette.error.main,\r\n '&:hover': {\r\n backgroundColor: fade(theme.palette.error.main, 0.12),\r\n // Reset on mouse devices\r\n '@media (hover: none)': {\r\n backgroundColor: 'transparent',\r\n },\r\n },\r\n },\r\n });\r\n\r\nclass WAVYOcean extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n loading: true,\r\n isOpen: false,\r\n recoveryMode: false,\r\n disabled: false,\r\n buttonLabel: '',\r\n model: {},\r\n agreement: undefined,\r\n modalOpen: false\r\n };\r\n }\r\n\r\n getOceanModel() {\r\n const { record } = this.props;\r\n let model = {};\r\n let buttonLabel = '';\r\n\r\n dataFetch('GET', `/equipment/${record.id}/ocean`)\r\n .then(response => {\r\n model = response.data;\r\n\r\n if (model.locked) {\r\n if (model.cmdTo === 1) {\r\n buttonLabel = 'resources.equipment.recovery.confirm_button_label_activating';\r\n } else {\r\n buttonLabel = 'resources.equipment.recovery.confirm_button_label_deactivating';\r\n }\r\n } else if (model.mode === 1) {\r\n buttonLabel = 'resources.equipment.recovery.confirm_button_label_activated';\r\n } else {\r\n buttonLabel = 'resources.equipment.recovery.confirm_button_label_deactivated';\r\n }\r\n })\r\n .catch(error => {\r\n if (error && error.error && error.error.error)\r\n model.error = error.error.error;\r\n else\r\n model.error = 'Error getting WAVY current mode'\r\n this.props.showNotification('resources.equipment.recovery.failure_notification', 'warning');\r\n console.error('error', error.error)\r\n })\r\n .finally(() => {\r\n this.setState({ model, loading: false, buttonLabel });\r\n });\r\n }\r\n\r\n getAgreement() {\r\n const { record } = this.props;\r\n let agreement = undefined;\r\n dataFetch('GET', `/agreements/last`)\r\n .then(response => {\r\n agreement = response;\r\n return dataFetch('GET', `/agreements/valid/${record.id}`);\r\n })\r\n .then(response => {\r\n agreement.valid = response.valid;\r\n })\r\n .finally(() => {\r\n this.setState({ agreement });\r\n });\r\n }\r\n\r\n componentDidMount() {\r\n // if (this.props.record.equipmentmodelId === 4) {\r\n this.setState({ loading: true });\r\n this.getOceanModel();\r\n // this.getAgreement();\r\n // }\r\n }\r\n\r\n handleClick = e => {\r\n this.setState({ isOpen: true });\r\n // e.stopPropagation();\r\n };\r\n\r\n modalClose = () => {\r\n this.setState({ modalOpen: false });\r\n }\r\n\r\n handleDialogClose = () => {\r\n this.setState({ isOpen: false });\r\n };\r\n\r\n handleAction = () => {\r\n this.setState({ loading: true });\r\n\r\n const { showNotification, record } = this.props;\r\n let model = {};\r\n let buttonLabel = '';\r\n\r\n const sufix = this.state.model.mode === 1 ? 'operation' : 'recovery';\r\n\r\n dataFetch('POST', `/equipment/${record.id}/ocean/${sufix}`)\r\n .then(response => {\r\n model = response.data;\r\n console.log('OK', response);\r\n\r\n if (model.locked) {\r\n if (model.cmdTo === 1) {\r\n buttonLabel = 'resources.equipment.recovery.confirm_button_label_activating';\r\n } else {\r\n buttonLabel = 'resources.equipment.recovery.confirm_button_label_deactivating';\r\n }\r\n } else if (model.mode === 1) {\r\n buttonLabel = 'resources.equipment.recovery.confirm_button_label_activated';\r\n } else {\r\n buttonLabel = 'resources.equipment.recovery.confirm_button_label_deactivated';\r\n }\r\n showNotification('resources.equipment.recovery.success_notification');\r\n })\r\n .catch(error => {\r\n model.error = 'Error getting WAVY current mode';\r\n showNotification('resources.equipment.recovery.failure_notification', 'warning');\r\n console.error('error', error.error)\r\n })\r\n .finally(() => {\r\n this.setState({ model, loading: false, buttonLabel });\r\n this.handleDialogClose();\r\n });\r\n };\r\n\r\n save_agreement = () => {\r\n const { showNotification, record } = this.props;\r\n\r\n dataFetch('PUT', `/agreements/${this.state.agreement.id}/equipments/rel/${record.id}`)\r\n .then(_ => {\r\n showNotification('resources.equipment.agreement.success', 'info');\r\n this.getAgreement();\r\n this.modalClose();\r\n })\r\n .catch(error => {\r\n showNotification('resources.equipment.agreement.failure', 'warning');\r\n console.error('error', error.error)\r\n })\r\n }\r\n\r\n render() {\r\n const {\r\n className,\r\n icon,\r\n label,\r\n c_title,\r\n c_content,\r\n onClick,\r\n record,\r\n source,\r\n resource,\r\n translate,\r\n hasList,\r\n ...rest\r\n } = this.props;\r\n\r\n return <>\r\n {/* {\r\n this.state.agreement &&\r\n (this.state.agreement.valid === false ?\r\n <>\r\n <span key={1}>\r\n {translate('resources.equipment.agreement.to_accept')}\r\n </span>\r\n <span key={2} style={{ cursor: 'pointer', color: '#283593' }} onClick={() => this.setState({ modalOpen: !this.state.modalOpen })}>\r\n {translate('resources.equipment.agreement.agreement')}\r\n </span>\r\n <br />\r\n </>\r\n :\r\n <>\r\n <span key={2} style={{ cursor: 'pointer', color: '#283593' }} onClick={() => this.setState({ modalOpen: !this.state.modalOpen })}>\r\n {translate('resources.equipment.agreement.agreement')}\r\n </span>\r\n <span key={1}>\r\n {translate('resources.equipment.agreement.accepted')}\r\n </span>\r\n </>\r\n )\r\n }\r\n\r\n {\r\n this.state.agreement &&\r\n <>\r\n <SimpleModal footer={<CustomToolbar active={this.state.agreement.valid === false} saving={this.save_agreement} />} title={this.state.agreement.version} open={this.state.modalOpen} onClose={() => this.modalClose()}>\r\n <span>\r\n {this.state.agreement.content}\r\n </span>\r\n </SimpleModal>\r\n <br />\r\n <br />\r\n </>\r\n } */}\r\n\r\n <Labeled label={'resources.equipment.recovery.button_label'}>\r\n {this.state.model.error\r\n ? <span>\r\n {this.state.model.error}\r\n </span>\r\n : this.state.loading\r\n ? <LinearProgress />\r\n : <Button\r\n disabled={this.state.model.locked}\r\n onClick={this.handleClick}\r\n label={this.state.buttonLabel}\r\n key=\"button\"\r\n {...sanitizeRestProps(rest)}\r\n >\r\n {icon}\r\n </Button>\r\n }\r\n </Labeled>\r\n <br />\r\n <Labeled label={'resources.equipment.fields.identifier'}>\r\n\r\n <TextField\r\n {...sanitizeRestProps(this.props)}\r\n source='identifier'\r\n label='Identifier'\r\n />\r\n </Labeled>\r\n\r\n {/* {\r\n this.state.agreement &&\r\n <>\r\n <FormGroup className={className} {...sanitizeRestProps(rest)}>\r\n <FormControlLabel\r\n control={\r\n <Switch\r\n // disabled={true}\r\n // TODO: onClick /agreements/{id}/equipments/rel/{fk}\r\n color=\"primary\"\r\n checked={!!this.state.agreement.valid}\r\n />\r\n }\r\n label={[\r\n <span key={1}>\r\n {translate('resources.equipment.agreement.agree1')}\r\n </span>,\r\n <span key={2} style={{ cursor: 'pointer', color: '#283593' }} onClick={() => this.setState({ modalOpen: !this.state.modalOpen })}>\r\n {translate('resources.equipment.agreement.agree2')}\r\n </span>\r\n ]}\r\n />\r\n </FormGroup>\r\n\r\n <SimpleModal title={this.state.agreement.version} open={this.state.modalOpen} onClose={() => this.modalClose()}>\r\n <span>\r\n {this.state.agreement.content}\r\n </span>\r\n </SimpleModal>\r\n </>\r\n\r\n } */}\r\n\r\n <Confirm\r\n isOpen={this.state.isOpen}\r\n title={this.state.buttonLabel}\r\n content={this.state.model.mode === 1 ?\r\n translate('resources.equipment.recovery.confirm_text_deactivate') :\r\n translate('resources.equipment.recovery.confirm_text_active')\r\n }\r\n onConfirm={this.handleAction}\r\n onClose={this.handleDialogClose}\r\n />\r\n </>\r\n }\r\n}\r\n\r\nWAVYOcean.propTypes = {\r\n basePath: PropTypes.string,\r\n classes: PropTypes.object,\r\n className: PropTypes.string,\r\n label: PropTypes.string,\r\n record: PropTypes.object,\r\n redirect: PropTypes.oneOfType([\r\n PropTypes.string,\r\n PropTypes.bool,\r\n PropTypes.func,\r\n ]),\r\n translate: PropTypes.func,\r\n icon: PropTypes.element,\r\n};\r\n\r\nWAVYOcean.defaultProps = {\r\n redirect: 'list',\r\n icon: <DonutLargeIcon />,\r\n};\r\n\r\nexport default compose(\r\n connect(null, {\r\n refreshView,\r\n showNotification,\r\n push\r\n }),\r\n translate,\r\n withStyles(styles)\r\n)(WAVYOcean);\r\n","import React from 'react';\nimport { NumberInput } from 'react-admin';\nimport compose from 'recompose/compose';\nimport { translate } from 'ra-core';\n\nexport default compose(translate)(({ translate, ...props }) => (\n <NumberInput\n source=\"identifier\"\n label={translate('resources.equipment.fields.identifier')}\n />\n));\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { withStyles, createStyles } from '@material-ui/core/styles';\n\nimport {Labeled} from 'react-admin';\n\nconst sanitizeRestProps = ({ basePath, record, ...rest }) => rest;\n\nconst styles = theme => createStyles({\n input: { width: theme.spacing.unit * 32 },\n});\n\nexport const FormInput = ({ classes, input, ...rest }) =>\n input ? (\n <div\n className={classnames(\n 'ra-input',\n `ra-input-${input.props.source}`,\n input.props.formClassName\n )}\n >\n {input.props.addLabel ? (\n <Labeled\n id={input.props.id || input.props.source}\n {...input.props}\n {...sanitizeRestProps(rest)}\n >\n {React.cloneElement(input, {\n className: classnames(\n {\n [classes.input]: !input.props.fullWidth,\n },\n input.props.className\n ),\n id: input.props.id || input.props.source,\n ...rest,\n })}\n </Labeled>\n ) : (\n React.cloneElement(input, {\n className: classnames(\n {\n [classes.input]: !input.props.fullWidth,\n },\n input.props.className\n ),\n id: input.props.id || input.props.source,\n ...rest,\n })\n )}\n </div>\n ) : null;\n\nFormInput.propTypes = {\n className: PropTypes.string,\n classes: PropTypes.object,\n input: PropTypes.object,\n};\n\n// wat? TypeScript looses the displayName if we don't set it explicitly\nFormInput.displayName = 'FormInput';\n\nexport default withStyles(styles)(FormInput);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport CardContent from '@material-ui/core/CardContent';\nimport { withStyles, createStyles } from '@material-ui/core/styles';\n\nvar styles = theme => createStyles({\n root: {\n paddingTop: 0,\n paddingBottom: 0,\n '&:first-child': {\n paddingTop: 16,\n },\n '&:last-child': {\n paddingBottom: 16,\n // [theme.breakpoints.only('xs')]: {\n // paddingBottom: 70,\n // },\n },\n },\n});\n\n/**\n * Overrides material-ui CardContent to allow inner content\n *\n * When using several CardContent inside the same Card, the top and bottom\n * padding double the spacing between each CardContent, leading to too much\n * wasted space. Use this component as a CardContent alternative.\n */\nconst CardContentInner = ({ classes, className, children }) => (\n <CardContent className={classnames(classes.root, className)}>\n {children}\n </CardContent>\n);\n\nCardContentInner.propTypes = {\n className: PropTypes.string,\n classes: PropTypes.object.isRequired,\n children: PropTypes.node,\n};\n\nexport default withStyles(styles)(CardContentInner);","import React, { Children, Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { reduxForm } from 'redux-form';\nimport { connect } from 'react-redux';\nimport compose from 'recompose/compose';\nimport classnames from 'classnames';\nimport { getDefaultValues, translate, REDUX_FORM_NAME } from 'ra-core';\n\nimport FormInput from './FormInput';\nimport CardContentInner from './CardContentInner';\n\nconst sanitizeRestProps = ({\n anyTouched,\n array,\n asyncBlurFields,\n asyncValidate,\n asyncValidating,\n autofill,\n blur,\n change,\n clearAsyncError,\n clearFields,\n clearSubmit,\n clearSubmitErrors,\n destroy,\n dirty,\n dispatch,\n form,\n handleSubmit,\n initialize,\n initialized,\n initialValues,\n pristine,\n pure,\n redirect,\n reset,\n resetSection,\n save,\n submit,\n submitFailed,\n submitSucceeded,\n submitting,\n touch,\n translate,\n triggerSubmit,\n undoable,\n untouch,\n valid,\n validate,\n ...props\n}) => props;\n\nexport class SimpleForm extends Component {\n handleSubmitWithRedirect = (redirect = this.props.redirect) =>\n this.props.handleSubmit(values => this.props.save(values, redirect));\n\n render() {\n const {\n basePath,\n children,\n className,\n invalid,\n pristine,\n record,\n redirect,\n resource,\n saving,\n submitOnEnter,\n undoable,\n version,\n ...rest\n } = this.props;\n\n return (\n <form\n className={classnames('simple-form', className)}\n {...sanitizeRestProps(rest)}\n >\n <CardContentInner key={version}>\n {Children.map(children, input => (\n <FormInput\n basePath={basePath}\n input={input}\n record={record}\n resource={resource}\n />\n ))}\n </CardContentInner>\n </form>\n );\n }\n}\n\nSimpleForm.propTypes = {\n basePath: PropTypes.string,\n children: PropTypes.node,\n className: PropTypes.string,\n defaultValue: PropTypes.oneOfType([PropTypes.object, PropTypes.func]),\n handleSubmit: PropTypes.func, // passed by redux-form\n invalid: PropTypes.bool,\n pristine: PropTypes.bool,\n record: PropTypes.object,\n resource: PropTypes.string,\n redirect: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.bool,\n PropTypes.func,\n ]),\n save: PropTypes.func, // the handler defined in the parent, which triggers the REST submission\n saving: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),\n submitOnEnter: PropTypes.bool,\n undoable: PropTypes.bool,\n validate: PropTypes.func,\n version: PropTypes.number,\n};\n\nSimpleForm.defaultProps = {\n submitOnEnter: true\n};\n\nconst enhance = compose(\n connect((state, props) => ({\n form: props.form || REDUX_FORM_NAME,\n initialValues: getDefaultValues(state, props),\n saving: props.saving || state.admin.saving,\n })),\n translate, // Must be before reduxForm so that it can be used in validation\n reduxForm({\n destroyOnUnmount: false,\n enableReinitialize: true,\n keepDirtyOnReinitialize: true,\n })\n);\n\nexport default enhance(SimpleForm);","import React, { Component } from 'react';\nimport {\n Toolbar,\n withStyles\n} from '@material-ui/core';\nimport { stringify } from 'query-string';\nimport { Add as AddIcon } from '@material-ui/icons';\nimport {\n SelectInput as Select,\n} from 'react-admin';\nimport { LinkButton } from '../../components';\n\nimport SimpleForm from './Form/SimpleForm';\n\nconst listStyles = function styles(theme) {\n return {\n select: {\n maxWidth: '1',\n }\n }\n}\n\nclass CalibrationTollbar extends Component {\n render() {\n const { handleChange, classes } = this.props;\n return (\n <Toolbar>\n <LinkButton variant='raised' label='resources.launches.buttons.create'\n to={{\n pathname: '/calibrations/create',\n search: stringify({\n equipmentId: this.props.record.id\n })\n }}\n hasIcon\n icon={<AddIcon />}\n />\n <SimpleForm\n toolbar={null}\n >\n <Select\n source='filter'\n defaultValue={0}\n className={classes.select}\n onChange={(event, key, ...args) => {\n event.preventDefault();\n handleChange(\"filter\", key)\n }}\n allowEmpty={false}\n label='resources.equipment.calibrations.filter'\n choices={[\n { id: 0, name: 'resources.equipment.calibrations.none' },\n { id: 1, name: 'resources.equipment.calibrations.sensor_1' },\n { id: 2, name: 'resources.equipment.calibrations.sensor_2' }\n ]}\n />\n </SimpleForm>\n </Toolbar >\n )\n }\n}\n\nexport default withStyles(listStyles)(CalibrationTollbar)","import React from 'react';\nimport Typography from '@material-ui/core/Typography';\n\nimport Decimal from 'decimal.js';\nDecimal.set({ toExpNeg: -3 })\n\nexport default ({\n className,\n source,\n record = {},\n}) => {\n\n if(!record || !record[source])\n return null;\n\n const value = new Decimal(record[source]);\n\n return (\n <Typography\n component=\"span\"\n variant=\"body1\"\n className={className}\n >\n {value.toString()}\n </Typography>\n )\n} ","import React from 'react';\r\n\r\nimport {\r\n BooleanField,\r\n Create,\r\n // DateField,\r\n Filter,\r\n Pagination,\r\n ReferenceField,\r\n ReferenceInput,\r\n ReferenceManyField,\r\n SearchInput,\r\n Show,\r\n ShowButton,\r\n SelectInput,\r\n SimpleForm,\r\n SimpleShowLayout,\r\n Tab,\r\n DeleteButton,\r\n // NumberField,\r\n TabbedShowLayout,\r\n TextField,\r\n TextInput,\r\n required,\r\n translate\r\n} from 'react-admin';\r\nimport withStyles from '@material-ui/core/styles/withStyles';\r\nimport Icon from '@material-ui/icons/Lens';\r\nimport { ColorInput, ColorField } from 'react-admin-color-input';\r\n\r\nimport {\r\n Edit,\r\n DefaultCardActions,\r\n InputAggregator,\r\n ReferenceManyManyField,\r\n ResponsiveDatagrid,\r\n ResponsiveList,\r\n DownloadButton,\r\n DateField\r\n} from '../../components';\r\nimport { hexToRgb } from '../../utils/util';\r\nimport TabbedShowLayoutTabs from '../../utils/CustomTabbedShowLayoutTabs';\r\nimport WAVYOcean from './WAVYOcean';\r\nimport ArgosId from './ArgosId';\r\nimport { Component } from 'react';\r\nimport compose from 'recompose/compose';\r\nimport { connect } from 'react-redux'\r\n\r\nimport ListDatasets from '../datasets/ListDatasets';\r\n\r\nimport CalibrationTollbar from '../calibrations/CalibrationsTollbar';\r\nimport CalibrationField from '../calibrations/CalibrationField';\r\nimport { API_URL, WAVY_OCEAN_MODELS } from '../../Configuration';\r\n\r\nexport const EquipmentIcon = Icon;\r\n\r\nconst listStyles = {\r\n tabs: {\r\n width: 0\r\n }\r\n};\r\n\r\nconst EquipmentFilter = translate(({ translate, ...props }) => (\r\n <Filter {...props}>\r\n <SearchInput source=\"q\" alwaysOn label={translate('pos.search')} />\r\n </Filter>\r\n));\r\n\r\nexport const EquipmentList = withStyles(listStyles)(({ classes, ...props }) => {\r\n return <ResponsiveList\r\n {...props}\r\n listFilters={<EquipmentFilter />}\r\n recordActions={[<ShowButton />]}\r\n >\r\n <TextField source=\"name\" />\r\n <TextField source=\"serialNumber\" />\r\n <TextField source=\"number\" />\r\n <BooleanField source=\"import\" />\r\n <ReferenceField source=\"equipmentmodelId\" reference='equipmentmodels' linkType={false} >\r\n <TextField source=\"name\" />\r\n </ReferenceField>\r\n </ResponsiveList>\r\n});\r\n\r\nconst DownloadFileButton = ({ record, ...props }) => (\r\n record.filePath && <DownloadButton filePath={`${API_URL}/containers/${record.filePath}`} fileName={`${record.fileName}`} label='Download' />\r\n);\r\n\r\nclass _EquipmentShow extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n filter: undefined,\r\n };\r\n this.handleChange = this.handleChange.bind(this);\r\n }\r\n\r\n handleChange = (property, value) => {\r\n let _value = undefined;\r\n\r\n switch (value) {\r\n case 1:\r\n _value = 'temp_1';\r\n break;\r\n case 2:\r\n _value = 'temp_2';\r\n break;\r\n default:\r\n break;\r\n }\r\n this.setState({ filter: _value });\r\n };\r\n\r\n render() {\r\n const { classes, dispatch, equipment, ...props } = this.props;\r\n return (\r\n <Show actions={<DefaultCardActions {...props} hasCreate={false} title={equipment && equipment.name}/>} {...props} >\r\n <TabbedShowLayout tabs={<TabbedShowLayoutTabs classes={{ scrollable: classes.tabs }} scrollable scrollButtons={'on'} />}>\r\n <Tab label='resources.equipment.tabs.details'>\r\n <SimpleShowLayout>\r\n <TextField source=\"name\" addLabel={true} />\r\n\r\n {equipment && WAVY_OCEAN_MODELS.includes(equipment.equipmentmodelId) && <WAVYOcean source=\"recovery\" {...props} /> }\r\n\r\n <TextField source=\"serialNumber\" />\r\n <TextField source=\"number\" />\r\n <BooleanField source=\"import\" />\r\n <ReferenceField source=\"equipmentmodelId\" reference='equipmentmodels' linkType={false} >\r\n <TextField source=\"name\" />\r\n </ReferenceField>\r\n <ColorField source=\"properties.color\" />\r\n </SimpleShowLayout>\r\n </Tab>\r\n <Tab label='resources.equipment.tabs.datasets' path='datasets'>\r\n <ReferenceManyField reference='datasets' target='equipmentId' addLabel={false} pagination={<Pagination />}>\r\n <ListDatasets equipmentC={false} />\r\n </ReferenceManyField>\r\n </Tab>\r\n <Tab label='resources.equipment.tabs.campaigns' path='campaigns'>\r\n <ReferenceManyManyField source='equipment' reference='campaigns' addLabel={false} pagination={<Pagination />}>\r\n <ResponsiveDatagrid actions={[<ShowButton />]} >\r\n <TextField source='name' />\r\n <TextField source='description' />\r\n <DateField source=\"beginDate\" format='dd/MM/yyyy' noFields />\r\n <BooleanField source=\"hide\" />\r\n </ResponsiveDatagrid>\r\n </ReferenceManyManyField>\r\n </Tab>\r\n {equipment && WAVY_OCEAN_MODELS.includes(equipment.equipmentmodelId) && <Tab label='resources.equipment.tabs.calibrations' path='calibrations'>\r\n <CalibrationTollbar handleChange={this.handleChange} filter={this.state.filter} />\r\n <ReferenceManyField target='equipmentId' filter={{ sensorType: this.state.filter }} sort={{ field: 'calibrationDate', order: 'ASC' }} reference='calibrations' addLabel={false} pagination={<Pagination />}>\r\n <ResponsiveDatagrid actions={[<DeleteButton undoable={false} redirect={false} />, <DownloadFileButton />]} >\r\n <DateField label=\"resources.equipment.calibrations.calibrationDate\" source=\"calibrationDate\" format='dd/MM/yyyy HH:mm:ss' />\r\n <DateField label=\"resources.equipment.calibrations.validDate\" source=\"validDate\" format='dd/MM/yyyy HH:mm:ss' />\r\n\r\n <TextField label=\"resources.equipment.calibrations.sensorType\" source='sensorType' />\r\n <BooleanField label=\"resources.equipment.calibrations.onEquipment\" source=\"onEquipment\" />\r\n <CalibrationField source='a0' />\r\n <CalibrationField source='a1' />\r\n <CalibrationField source='a2' />\r\n <CalibrationField source='a3' />\r\n </ResponsiveDatagrid>\r\n </ReferenceManyField>\r\n </Tab>}\r\n </TabbedShowLayout>\r\n </Show>\r\n )\r\n }\r\n\r\n}\r\n\r\n\r\n\r\nconst mapStateToPropsShow = (state, props) => {\r\n return { equipment: state.admin.resources && state.admin.resources.equipment && state.admin.resources.equipment.data && props.id && state.admin.resources.equipment.data[props.id] };\r\n}\r\n\r\nconst enhanceShow = compose(\r\n withStyles(listStyles),\r\n connect(mapStateToPropsShow)\r\n);\r\n\r\nexport const EquipmentShow = enhanceShow(_EquipmentShow);\r\n\r\nclass _EquipmentEdit extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n equipmentModel: undefined,\r\n loaded: false\r\n };\r\n }\r\n\r\n componentDidUpdate() {\r\n if (this.props.equipment && !this.state.loaded) {\r\n let equipmentModel = undefined;\r\n if (this.props.equipment[this.props.id]) {\r\n equipmentModel = this.props.equipment[this.props.id].equipmentmodelId;\r\n this.setState({ loaded: true, equipmentModel: equipmentModel });\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n const { dispatch, ...rest } = this.props;\r\n return (\r\n <Edit {...rest}>\r\n <SimpleForm>\r\n <TextInput\r\n source=\"name\"\r\n validate={required()}\r\n />\r\n <TextInput\r\n source=\"serialNumber\"\r\n validate={required()}\r\n />\r\n <TextInput\r\n source=\"number\"\r\n validate={required()}\r\n />\r\n\r\n <ReferenceInput onChange={(_, id) => this.setState({ equipmentModel: id })} source=\"equipmentmodelId\" reference=\"equipmentmodels\" validate={required()}>\r\n <SelectInput optionText=\"name\" />\r\n </ReferenceInput>\r\n\r\n {this.state.equipmentModel === 4 && <ArgosId source=\"identifier\" {...rest} />}\r\n\r\n <InputAggregator source=\"properties\">\r\n <ColorInput source=\"color\" parse={hexToRgb} />\r\n </InputAggregator>\r\n </SimpleForm>\r\n </Edit>\r\n )\r\n }\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n return { equipment: state.admin.resources && state.admin.resources.equipment && state.admin.resources.equipment.data };\r\n}\r\n\r\nconst enhance = compose(\r\n connect(mapStateToProps)\r\n)\r\n\r\nexport const EquipmentEdit = enhance(_EquipmentEdit);\r\n\r\nexport class EquipmentCreate extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n equipmentModel: undefined\r\n };\r\n }\r\n\r\n render() {\r\n return (\r\n <Create actions={<DefaultCardActions />} {...this.props}>\r\n <SimpleForm redirect='show'>\r\n <TextInput\r\n source=\"name\"\r\n validate={required()}\r\n />\r\n <TextInput\r\n source=\"serialNumber\"\r\n validate={required()}\r\n />\r\n <TextInput\r\n source=\"number\"\r\n validate={required()}\r\n />\r\n <ReferenceInput onChange={(_, id) => this.setState({ equipmentModel: id })} source=\"equipmentmodelId\" reference=\"equipmentmodels\" validate={required()}>\r\n <SelectInput optionText=\"name\" />\r\n </ReferenceInput>\r\n\r\n {this.state.equipmentModel === 4 && <ArgosId {...this.props} />}\r\n\r\n <InputAggregator source=\"properties\">\r\n <ColorInput source=\"color\" parse={hexToRgb} />\r\n </InputAggregator>\r\n </SimpleForm>\r\n </Create>\r\n )\r\n }\r\n};\r\n","import React from 'react';\r\n\r\nimport {\r\n Create,\r\n Filter,\r\n Pagination,\r\n SearchInput,\r\n Show,\r\n ShowButton,\r\n SimpleForm,\r\n SimpleShowLayout,\r\n TextField,\r\n TextInput,\r\n TabbedShowLayout,\r\n Tab,\r\n required,\r\n UrlField,\r\n ReferenceManyField,\r\n translate\r\n} from 'react-admin';\r\n\r\nimport withStyles from '@material-ui/core/styles/withStyles';\r\nimport Icon from '@material-ui/icons/LocationCity';\r\nimport { \r\n DefaultCardActions,\r\n Edit,\r\n ResponsiveDatagrid,\r\n ResponsiveList\r\n} from '../../components';\r\n\r\nexport const InstitutionIcon = Icon;\r\n\r\nconst listStyles = {};\r\n\r\nconst InstitutionFilter = translate(({translate, ...props}) => (\r\n <Filter {...props}>\r\n <SearchInput source=\"q\" alwaysOn label={translate('pos.search')} />\r\n </Filter>\r\n));\r\n\r\nexport const InstitutionList = withStyles(listStyles)(({ classes, ...props }) => (\r\n <ResponsiveList\r\n {...props}\r\n listFilters={<InstitutionFilter />}\r\n recordActions={[<ShowButton />]}\r\n >\r\n <TextField source=\"name\" />\r\n <TextField source=\"acronym\" />\r\n <TextField source=\"address\" />\r\n <UrlField source=\"url\" />\r\n <TextField source=\"phoneNumber\" />\r\n </ResponsiveList>\r\n));\r\n\r\nexport const InstitutionShow = withStyles(listStyles)(({ classes, ...props }) => {\r\n return(\r\n <Show actions={<DefaultCardActions />} {...props}>\r\n <TabbedShowLayout>\r\n <Tab label='resources.institutions.tabs.details'>\r\n <SimpleShowLayout>\r\n <TextField source=\"name\" />\r\n <TextField source=\"acronym\" />\r\n <TextField source=\"address\" />\r\n <UrlField source=\"url\" />\r\n <TextField source=\"phoneNumber\" />\r\n </SimpleShowLayout>\r\n </Tab>\r\n <Tab label='resources.institutions.tabs.users' path='users'>\r\n <ReferenceManyField reference='users' target='institutionId' addLabel={false} pagination={<Pagination/>}>\r\n <ResponsiveDatagrid>\r\n <TextField source=\"name\" />\r\n <TextField source=\"email\" />\r\n </ResponsiveDatagrid>\r\n </ReferenceManyField>\r\n </Tab>\r\n </TabbedShowLayout>\r\n </Show>\r\n)});\r\n\r\nexport const InstitutionEdit = withStyles(listStyles)(({ classes, ...props }) => (\r\n <Edit {...props}>\r\n <SimpleForm>\r\n <TextInput\r\n source=\"name\"\r\n validate={required()}\r\n />\r\n <TextInput\r\n source=\"acronym\"\r\n />\r\n <TextInput\r\n source=\"address\"\r\n />\r\n <TextInput\r\n source=\"url\"\r\n type=\"url\"\r\n />\r\n <TextInput\r\n source=\"phoneNumber\"\r\n />\r\n </SimpleForm>\r\n </Edit>\r\n));\r\n\r\nexport const InstitutionCreate = withStyles(listStyles)(({ classes, ...props }) => (\r\n <Create actions={<DefaultCardActions/>} {...props}>\r\n <SimpleForm redirect='show'>\r\n <TextInput\r\n source=\"name\"\r\n validate={required()}\r\n />\r\n <TextInput\r\n source=\"acronym\"\r\n />\r\n <TextInput\r\n source=\"address\"\r\n />\r\n <TextInput\r\n source=\"url\"\r\n type=\"url\"\r\n />\r\n <TextInput\r\n source=\"phoneNumber\"\r\n />\r\n </SimpleForm>\r\n </Create>\r\n));","import React from 'react';\r\n\r\nimport {\r\n Create,\r\n Filter,\r\n Pagination,\r\n SearchInput,\r\n Show,\r\n ShowButton,\r\n SimpleForm,\r\n TabbedShowLayout,\r\n Tab,\r\n TextField,\r\n TextInput,\r\n required,\r\n translate\r\n} from 'react-admin';\r\n\r\nimport {\r\n DefaultCardActions,\r\n DissociateButton,\r\n ReferenceManyManyField,\r\n Edit,\r\n RelationShow,\r\n Relation,\r\n ResponsiveList,\r\n ResponsiveDatagrid\r\n} from '../../components';\r\n\r\nimport withStyles from '@material-ui/core/styles/withStyles';\r\nimport Icon from '@material-ui/icons/Group';\r\n\r\nexport const TeamIcon = Icon;\r\nconst listStyles = {};\r\n\r\nconst TeamFilter = translate(({translate, ...props}) => (\r\n <Filter {...props}>\r\n <SearchInput source=\"q\" alwaysOn label={translate('pos.search')} />\r\n </Filter>\r\n));\r\n\r\nexport const TeamList = withStyles(listStyles)(({ classes, ...props }) => (\r\n <ResponsiveList\r\n {...props}\r\n listFilters={<TeamFilter />}\r\n recordActions={[<ShowButton />]}\r\n >\r\n <TextField source=\"name\" />\r\n <TextField source=\"code\" />\r\n <TextField source=\"description\" />\r\n </ResponsiveList>\r\n));\r\n\r\nconst editStyles = {\r\n name: { display: 'inline-block' },\r\n code: { display: 'inline-block', marginLeft: 32 },\r\n};\r\n\r\nexport const TeamEdit = withStyles(editStyles)(({ classes, ...props }) => (\r\n <Edit {...props}>\r\n <SimpleForm>\r\n <TextInput\r\n source=\"name\"\r\n validate={required()}\r\n />\r\n <TextInput\r\n source=\"code\"\r\n validate={required()}\r\n />\r\n <TextInput\r\n source=\"description\"\r\n validate={required()}\r\n />\r\n </SimpleForm>\r\n </Edit>\r\n));\r\n\r\nexport const TeamCreate = withStyles(editStyles)(({ classes, ...props }) => (\r\n <Create actions={<DefaultCardActions/>} {...props}>\r\n <SimpleForm redirect='show'>\r\n <TextInput\r\n source=\"name\"\r\n validate={required()}\r\n />\r\n <TextInput\r\n source=\"code\"\r\n />\r\n <TextInput\r\n source=\"description\"\r\n />\r\n </SimpleForm>\r\n </Create>\r\n));\r\n\r\nexport const TeamShow = withStyles(editStyles)(({ classes, ...props }) => (\r\n <Show actions={<DefaultCardActions {...props} hasCreate={false}/>} {...props}>\r\n <TabbedShowLayout>\r\n <Tab label='resources.teams.tabs.details'>\r\n <TextField source=\"name\" />\r\n <TextField source=\"code\" />\r\n <TextField source=\"description\" />\r\n </Tab>\r\n <Tab label='resources.teams.tabs.users'>\r\n <ReferenceManyManyField source='teams' reference='users' addLabel={false} fullWidth pagination={<Pagination/>}>\r\n <RelationShow reference='users'\r\n dialogContent={<Relation basePath='teams' recordId={props.id} pagination={<Pagination/>}>\r\n <ResponsiveDatagrid>\r\n <TextField source='username'/>\r\n <TextField source='email'/>\r\n </ResponsiveDatagrid>\r\n </Relation>}\r\n >\r\n <ResponsiveDatagrid actions={[<DissociateButton basePath='teams' basePathId={props.id}/>]}>\r\n <TextField source='username'/>\r\n <TextField source='email'/>\r\n </ResponsiveDatagrid>\r\n </RelationShow>\r\n </ReferenceManyManyField>\r\n </Tab>\r\n </TabbedShowLayout>\r\n </Show>\r\n));","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { destroy } from 'redux-form';\nimport compose from 'recompose/compose';\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n} from '@material-ui/core';\nimport {\n SimpleForm,\n TextInput,\n translate,\n showNotification,\n UPDATE\n} from 'react-admin';\n\nimport { dataProvider } from '../../providers';\n\nconst FORM_NAME = 'change_password';\n\nclass ChangePasswordDialog extends Component {\n\n validatePasswords = ({password, repeat_password}) => {\n const errors = {};\n const { translate } = this.props;\n if(!password){\n errors.password = [translate('ra.validation.required')];\n }\n if(!repeat_password){\n errors.repeat_password = [translate('ra.validation.required')];\n }\n if(password && repeat_password && password !== repeat_password){\n errors.repeat_password = [translate('pos.profile.different_passwords')];\n }\n\n return errors\n }\n\n handleSave = (data) => {\n const { resource, resourceId, onClose, destroyForm, showNotification } = this.props;\n \n const params = {\n id: resourceId,\n data: {\n password: data.password\n }\n }\n dataProvider(UPDATE, resource, params)\n .then(_ => {\n destroyForm(FORM_NAME);\n onClose();\n showNotification('pos.profile.password_changed');\n })\n .catch(error => {\n showNotification('ra.notification.http_error');\n })\n }\n\n render(){\n const { open, onClose, translate } = this.props\n return <Dialog open={open} onClose={onClose} fullWidth>\n <DialogTitle>{translate('pos.profile.change_password')}</DialogTitle>\n <DialogContent>\n <SimpleForm validate={this.validatePasswords} save={this.handleSave} form={FORM_NAME}>\n <TextInput type='password' source='password' label='pos.profile.new_password'/>\n <TextInput type='password' source='repeat_password' label='pos.profile.repeat_password'/>\n </SimpleForm>\n </DialogContent>\n </Dialog>\n }\n\n}\n\nexport default compose(\n translate,\n connect(null, { showNotification, destroyForm: destroy })\n)(ChangePasswordDialog)","import React, { Component } from 'react';\nimport {\n CardActions,\n Button,\n ShowButton\n} from 'react-admin';\nimport { VpnKey as PasswordIcon } from '@material-ui/icons';\n\nimport ChangePasswordDialog from './ChangePasswordDialog';\n\nexport default class EditActions extends Component{\n\n state = {\n open: false\n }\n\n handleClose = () =>{\n this.setState({open:false});\n }\n\n render(){\n const { hasShow, basePath, data, resource, id } = this.props;\n return <CardActions>\n <Button onClick={() => this.setState({open:true})} label={'pos.profile.change_password'}><PasswordIcon/></Button>\n <ChangePasswordDialog open={this.state.open} onClose={this.handleClose} resource={resource} resourceId={id}/>\n {hasShow && <ShowButton basePath={basePath} record={data} />}\n </CardActions>\n }\n\n}\n","import React from 'react';\r\n\r\nimport {\r\n BooleanField,\r\n BooleanInput,\r\n Create,\r\n Filter,\r\n NullableBooleanInput,\r\n ReferenceInput,\r\n ReferenceField,\r\n SearchInput,\r\n SelectInput,\r\n Show,\r\n ShowButton,\r\n SimpleForm,\r\n SimpleShowLayout,\r\n TextField,\r\n TextInput,\r\n} from 'react-admin';\r\n\r\nimport {\r\n maxLength,\r\n minLength,\r\n required,\r\n translate\r\n} from 'react-admin';\r\n\r\nimport {\r\n Edit,\r\n matchingPasswords,\r\n DefaultCardActions,\r\n ResponsiveList\r\n} from '../../components';\r\n\r\nimport withStyles from '@material-ui/core/styles/withStyles';\r\nimport Icon from '@material-ui/icons/Person';\r\n\r\nimport EditActions from './EditActions';\r\n\r\nexport const UserIcon = Icon;\r\n\r\n// EXAMPLE - REMOVE\r\nconst listStyles = {};\r\n\r\nconst UserFilter = translate(({translate, ...props}) => (\r\n <Filter {...props}>\r\n <SearchInput source=\"q\" alwaysOn label={translate('pos.search')} />\r\n <NullableBooleanInput source=\"active\" />\r\n </Filter>\r\n));\r\n\r\nexport const UserList = withStyles(listStyles)(({ permissions, classes, ...props }) => (\r\n <ResponsiveList\r\n {...props}\r\n listFilters={<UserFilter />}\r\n recordActions={[<ShowButton />]}\r\n >\r\n <TextField source=\"username\" />\r\n <TextField source=\"name\" />\r\n <TextField source=\"email\" />\r\n <BooleanField source=\"active\" />\r\n {\r\n permissions === \"sysadmin\" && <ReferenceField source=\"institutionId\" reference=\"institutions\" linkType=\"show\" allowEmpty>\r\n <TextField source=\"name\"/>\r\n </ReferenceField>\r\n }\r\n <RoleField source=\"role\" addLabel={true}/>\r\n </ResponsiveList>\r\n));\r\n\r\nconst editStyles = {\r\n name: { display: 'inline-block' },\r\n username: { display: 'inline-block', marginLeft: 32 },\r\n email: { width: 544 }\r\n};\r\n\r\nconst RoleInput = ({ record, resource, source, translate, ...rest}) => {\r\n let isAdmin = false;\r\n if(record && adminRoles.includes(record[source])) {\r\n isAdmin = true;\r\n }\r\n return <BooleanInput label={`resources.${resource}.fields.${source}`} source='isAdmin' defaultValue={isAdmin} />\r\n}\r\n\r\nexport const UserEdit = withStyles(editStyles)(({ permissions, classes, ...props }) => (\r\n <Edit actions={<EditActions {...props}/>} {...props}>\r\n <SimpleForm>\r\n <TextInput\r\n source=\"username\"\r\n validate={required()}\r\n />\r\n <TextInput\r\n source=\"name\"\r\n validate={required()}\r\n />\r\n <TextInput\r\n type=\"email\"\r\n source=\"email\"\r\n validate={required()}\r\n validation={{ email: true }}\r\n formClassName={classes.email}\r\n />\r\n {\r\n permissions === 'sysadmin' && <ReferenceInput validate={required()} source=\"institutionId\" reference=\"institutions\">\r\n <SelectInput optionText=\"name\" />\r\n </ReferenceInput>\r\n }\r\n <BooleanInput source=\"active\" />\r\n <RoleInput source=\"role\" />\r\n </SimpleForm>\r\n </Edit>\r\n));\r\n\r\nexport const UserCreate = withStyles(editStyles)(({ permissions, classes, ...props }) => (\r\n <Create actions={<DefaultCardActions/>} {...props}>\r\n <SimpleForm redirect='show'>\r\n <TextInput\r\n source=\"username\"\r\n validate={required()}\r\n />\r\n <TextInput\r\n source=\"name\"\r\n validate={required()}\r\n />\r\n <TextInput\r\n type=\"email\"\r\n source=\"email\"\r\n validate={required()}\r\n validation={{ email: true }}\r\n />\r\n {\r\n permissions === 'sysadmin' && <ReferenceInput source=\"institutionId\" validate={required()} reference=\"institutions\">\r\n <SelectInput optionText=\"name\" />\r\n </ReferenceInput>\r\n }\r\n <TextInput\r\n source=\"password\"\r\n type=\"password\"\r\n validate={[required(), minLength(5), maxLength(32), matchingPasswords()]}\r\n />\r\n <TextInput\r\n source=\"rewrite_password\"\r\n type=\"password\"\r\n validate={[required(), minLength(5), maxLength(32), matchingPasswords()]}\r\n />\r\n <BooleanInput source=\"isAdmin\" />\r\n </SimpleForm>\r\n </Create>\r\n));\r\n\r\nconst adminRoles = [ 'sysadmin', 'admin']\r\n\r\nconst RoleField = ({ record, source, ...rest}) => {\r\n const admin = { isAdmin: false }\r\n if(record !== undefined && adminRoles.includes(record[source])) {\r\n admin.isAdmin = true\r\n }\r\n return <BooleanField source='isAdmin' record={admin} />\r\n}\r\n\r\nexport const UserShow = withStyles(editStyles)(({ permissions, classes, ...props }) => (\r\n <Show actions={<DefaultCardActions {...props} hasCreate={false}/>} {...props}>\r\n <SimpleShowLayout>\r\n <TextField source=\"username\" />\r\n <TextField source=\"name\" />\r\n <TextField source=\"email\" />\r\n <BooleanField source=\"active\" />\r\n <RoleField source=\"role\" addLabel={true}/>\r\n {\r\n permissions === \"sysadmin\" && <ReferenceField source=\"institutionId\" reference=\"institutions\" linkType=\"show\" allowEmpty>\r\n <TextField source=\"name\"/>\r\n </ReferenceField>\r\n }\r\n </SimpleShowLayout>\r\n </Show>\r\n));\r\n","import React, { Component } from 'react';\nimport {\n EditController,\n EditView,\n Filter,\n TextField,\n Create,\n SimpleForm,\n ImageInput,\n ImageField,\n NumberInput,\n TextInput,\n SearchInput,\n ShowController,\n ShowView,\n ShowButton,\n SimpleShowLayout,\n required,\n translate,\n TabbedShowLayout,\n Tab,\n showNotification,\n EditButton,\n ListButton,\n // crudCreate as crudCreateAction, \n SelectInput\n} from 'react-admin';\n\nimport {\n DefaultCardActions,\n GeoCoordinatesField,\n GeoCoordinatesInput,\n ResponsiveList\n} from '../../components';\nimport dataFetch from '../../providers/dataFetch';\n\nimport Icon from '@material-ui/icons/Landscape';\n// import withStyles from '@material-ui/core/styles/withStyles';\nimport { storage } from 'react-admin-loopback';\nimport { URL } from '../../Configuration';\nimport TabbedShowLayoutTabs from '../../utils/CustomTabbedShowLayoutTabs';\nimport compose from 'recompose/compose';\nimport { connect } from 'react-redux'\n\nimport { Typography, withStyles } from '@material-ui/core';\nexport const OverlayIcon = Icon;\n\nconst listStyles = {\n\n};\n\nconst OverlayFilter = translate(({translate, ...props}) => (\n <Filter {...props}>\n <SearchInput source=\"q\" alwaysOn label={translate('pos.search')} />\n </Filter>\n));\n\nexport const OverlaysList = withStyles(listStyles)( ({...props}) => {\n return <ResponsiveList\n {...props}\n listFilters={<OverlayFilter />}\n recordActions={[<ShowButton />]}\n >\n <TextField source=\"name\" />\n <TextField source=\"opacity\" />\n <GeoCoordinatesField source=\"northEast\" />\n <GeoCoordinatesField source=\"southWest\" />\n </ResponsiveList>\n});\n\nclass OverlaysSimpleForm extends Component {\n state={\n isImage: false,\n \n selected: 0\n }\n\n choices = [\n {id: 0, name: \"resources.overlays.fields.image\", type: \"image\"},\n {id: 1, name: \"resources.overlays.fields.kml\", type: \"kml\"},\n {id: 2, name: \"resources.overlays.fields.wms\", type: \"wms\"}\n ]\n\n change = (_, selected) => this.setState({selected: selected});\n\n submitUrl = (history) => ( overlay ) => {\n overlay.overlayType = this.choices[overlay.type].type;\n overlay.remote = true;\n\n if(overlay.type !== 1 && (!overlay.opacity || (overlay.opacity && isNaN(overlay.opacity))))\n overlay.opacity = 1;\n\n this.fetchData(new Headers({\n Accept: 'application/json',\n \"Content-Type\": \"application/json\"\n }), JSON.stringify(overlay), history);\n }\n\n submitFile = (history) => ( overlay ) => {\n \n const formData = new FormData()\n formData.append('name', overlay.name)\n formData.append('opacity', overlay.opacity)\n formData.append('southWest', JSON.stringify(overlay.southWest))\n formData.append('northEast', JSON.stringify(overlay.northEast))\n formData.append('file', overlay.overlays.rawFile)\n\n this.fetchData(new Headers({\n Accept: 'application/json',\n }), formData, history);\n };\n\n\n fetchData = (headers, data, history) => {\n dataFetch('POST', '/overlays', headers, data)\n .then(_ => {\n this.props.showNotification('inputs.general.create')\n history.push('/overlays')\n\n }).catch(e => {\n console.log(\"ERROR\", e);\n this.props.showNotification('errors.SOMETHING')\n })\n }\n\n render(){\n const {save, history, crudCreate, showNotification, ...props} = this.props\n return(\n <TabbedShowLayout tabs={<TabbedShowLayoutTabs scrollable scrollButtons={'on'}/>} {...props} >\n <Tab label='resources.overlays.file' style={{display:'flex', flexDirection:'row'}}>\n <SimpleForm save={this.submitFile(history)} redirect='show' >\n\n <ImageInput source='overlays' accept='' validate={required()}options={{onDropAccepted: (files)=>{\n this.setState({isImage:files[0].type.includes('image')})}\n }}>\n <ImageField source='file' title='fileName'/>\n </ImageInput>\n <TextInput source='name' validate={required()}/>\n {this.state.isImage ? \n [<NumberInput key='1' source='opacity' defaultValue=\"1\" validate={required()}/>,\n <GeoCoordinatesInput key='2' source='northEast' />,\n <GeoCoordinatesInput key='3' source='southWest' />]\n : null}\n\n </SimpleForm>\n </Tab>\n \n <Tab label='resources.overlays.url' path='url'>\n <SimpleForm save={this.submitUrl(history)} redirect='show' >\n\n <SelectInput source='type' defaultValue={0} choices={this.choices} translateChoice={true} onChange={this.change}/>\n <TextInput source='name' validate={required()}/>\n <TextInput source='filePath' validate={required()}/>\n\n { // image\n this.state.selected === 0 && [\n <NumberInput key='1' source='opacity' defaultValue=\"1\" validate={required()}/>,\n <GeoCoordinatesInput key='2' source='northEast' />,\n <GeoCoordinatesInput key='3' source='southWest' />\n ]\n }\n\n { // wms\n this.state.selected === 2 && [\n <NumberInput source='opacity' key=\"1\" defaultValue=\"1\" validate={required()}/>,\n <TextInput source='layers' key=\"1.2\" validate={required()}/>\n ]\n }\n </SimpleForm>\n </Tab>\n </TabbedShowLayout>\n )\n }\n};\n\nexport const OverlaysCreate = compose(\n translate, \n withStyles(listStyles),\n connect(null, {\n showNotification,})\n )( ({showNotification, ...props}) => (\n <Create actions={<DefaultCardActions/>} {...props}>\n <OverlaysSimpleForm showNotification={showNotification} history={props.history} />\n </Create>\n));\n\nconst CustomImageField = ({record}) => {\n const recordComplete = record\n if(!record.remote && record.overlayType.includes('image')) {\n recordComplete.url = `${URL}${record.filePath}?access_token=${storage.load('lbtoken').id}`\n }\n else if(record.remote && record.overlayType.includes('image')) {\n recordComplete.url = record.filePath;\n }\n else {\n recordComplete.url = `/kml.png`\n }\n return <ImageField source='url' className='imageField' record={recordComplete} />\n};\n\nconst OverlaysActions = ({data, basePath, ...props}) => {\n return <div style={{display:'flex', justifyContent:'space-between'}}>\n <div>\n {data && <Typography variant='title'>{data.name}</Typography>}\n <Typography variant='caption'> </Typography>\n </div>\n <div style={{right: 0}}>\n { data && <EditButton record={{ id: data.id }} basePath={basePath}/> }\n { data && <ListButton basePath={basePath} /> }\n </div>\n </div>\n}\n\n\nexport const OverlaysShow = withStyles(listStyles)( ({...props}) => {\n console.log(props)\n return <ShowController {...props}>\n {\n controllerProps => \n <ShowView actions={<OverlaysActions/>} {...props} {...controllerProps}>\n <SimpleShowLayout>\n <TextField source='name' />\n { controllerProps.record && controllerProps.record.remote && <TextField source='filePath' /> }\n\n {controllerProps.record && controllerProps.record.overlayType.includes('image') && \n [ <TextField key={1} source='opacity' />, \n <GeoCoordinatesField key={2} source=\"northEast\" />,\n <GeoCoordinatesField key={3} source=\"southWest\" />,\n <CustomImageField key={4} source='filePath' /> \n ]}\n\n { controllerProps.record && controllerProps.record.remote && controllerProps.record.overlayType === 'wms' && \n [ <TextField key={1} source='opacity' />,\n <TextField key={2} source='layers' />\n ]}\n \n </SimpleShowLayout>\n </ShowView>\n }\n </ShowController>\n});\n\nexport const OverlayEdit = withStyles(listStyles)( ({...props}) => {\n return <EditController undoable={false} {...props}>\n {\n controllerProps => \n <EditView {...props} {...controllerProps}>\n <SimpleForm>\n <TextInput source='name' validate={required()}/>\n { controllerProps.record && controllerProps.record.remote && <TextInput source='filePath' />}\n { controllerProps.record && controllerProps.record.overlayType.includes('image') && \n [ <NumberInput key=\"1\" source='opacity' defaultValue=\"1\" validate={required()}/>,\n <GeoCoordinatesInput key=\"1.2\" source='northEast' />,\n <GeoCoordinatesInput key=\"1.3\" source='southWest' />\n ]}\n\n { controllerProps.record && controllerProps.record.remote && controllerProps.record.overlayType === 'wms' &&\n [ <NumberInput source='opacity' key=\"1\" defaultValue=\"1\" validate={required()}/>,\n <TextInput source='layers' key=\"2.1\" validate={required()}/>\n ]}\n </SimpleForm>\n </EditView>\n }\n </EditController>\n})","import React, { Component, Fragment } from 'react';\r\nimport { Typography } from '@material-ui/core';\r\nimport {\r\n Pagination,\r\n TextField,\r\n fetchStart,\r\n fetchEnd,\r\n translate\r\n} from 'react-admin';\r\nimport { compose } from 'recompose';\r\nimport { connect } from 'react-redux';\r\n\r\nimport {\r\n ResponsiveDatagrid,\r\n} from '../../components';\r\n\r\nimport { dataFetch } from '../../providers';\r\n\r\nclass FilesShowContent extends Component {\r\n\r\n state={\r\n data: {},\r\n ids: [],\r\n fields: [],\r\n page: 1,\r\n perPage: this.props.perPage\r\n }\r\n\r\n componentDidMount(){\r\n const { record } = this.props;\r\n fetchStart();\r\n dataFetch('GET', `/files/${record.id}/json`)\r\n .then(resp => {\r\n let fields = [];\r\n if (resp.length > 0)\r\n fields = Object.keys(resp[0]);\r\n \r\n const data = resp.reduce((acc,row,index)=>{\r\n acc[index] = Object.assign({},row,{id:index});\r\n return acc;\r\n }, {});\r\n\r\n this.setState({data, ids: Object.keys(data), fields});\r\n })\r\n .finally(_ => {\r\n fetchEnd();\r\n });\r\n }\r\n\r\n render(){\r\n const {data, ids, fields, page, perPage} = this.state;\r\n const {record, resource, translate} = this.props;\r\n return <Fragment>\r\n {record && <Typography variant='title'>{`${translate(`resources.${resource}.name`,{smart_count:1})} ${record.name}`}</Typography>}\r\n <ResponsiveDatagrid currentSort={{field:'id',order:'ASC'}} data={data} ids={ids.slice((page-1)*perPage,page*perPage)} resource={resource} translate={translate}>\r\n {\r\n fields.length > 0 && fields.map((property, index) => {\r\n return <TextField key={index} source={property} sortable={false} />\r\n })\r\n }\r\n </ResponsiveDatagrid>\r\n <Pagination\r\n page={page}\r\n perPage={perPage}\r\n setPage={ page => this.setState({page})}\r\n setPerPage={ perPage => {this.setState({perPage})}}\r\n total={ids.length}\r\n />\r\n </Fragment>\r\n }\r\n}\r\n\r\nconst enhance = compose(\r\n translate,\r\n connect(null, {\r\n fetchEnd,\r\n fetchStart\r\n })\r\n);\r\n\r\nexport default enhance(FilesShowContent);","import React from 'react';\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\nimport RadioButtonUncheckedIcon from '@material-ui/icons/RadioButtonUnchecked';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport ErrorOutlineIcon from '@material-ui/icons/ErrorOutline';\n\nconst Status = ({source, record, className, ...props}) => {\n\n let status = record[source];\n\n if(status === 'ERROR' && record.comments && record.comments.includes('DUPLICATED'))\n status = 'DUPLICATED';\n\n switch(status) {\n case 'SUCCESS': \n case 'SUCCESS_INCOHERENCE': \n return (\n <Tooltip title={'Success'}>\n <CheckCircleIcon style={{ color: 'rgba(50,205,50)' }}/>\n </Tooltip>\n )\n\n case 'PENDING': \n return (\n <Tooltip title={'Pending'}>\n <RadioButtonUncheckedIcon style={{ color: 'rgba(255,165,0)' }}/>\n </Tooltip>\n )\n\n case 'DUPLICATED': \n return (\n <Tooltip title={'Duplicated'}>\n <ErrorOutlineIcon style={{ color: 'rgba(255,165,0)' }}/>\n </Tooltip>\n )\n\n default: \n return (\n // <Tooltip title={`Error`}>\n <Tooltip title={record.comments ? record.comments : 'Error'}>\n <ErrorOutlineIcon style={{ color: 'rgba(255,0,0)' }}/>\n </Tooltip>\n )\n }\n}\n\nStatus.defaultProps = {\n addLabel: true,\n};\n\nexport default Status;","import React, { Component } from 'react';\nimport { withStyles } from '@material-ui/core';\nimport {\n Create,\n // DateField,\n FileField,\n FileInput,\n SimpleForm,\n TextField,\n TextInput,\n SimpleShowLayout,\n Show,\n ShowButton,\n Responsive,\n required,\n Filter,\n SearchInput,\n translate,\n SelectInput\n // showNotification\n} from 'react-admin';\nimport {\n DefaultCardActions,\n DateField,\n DownloadButton,\n ResponsiveList\n} from '../../components';\nimport { URL/*, SOCKET_DEBUG*/ } from '../../Configuration';\n\n// import { \n// emit as emitWS,\n// listen as listenWS,\n// stopListen as stopListenWS,\n// insideRoom as insideRoomWS,\n// } from '../../sockets'\n\nimport { compose } from 'recompose';\nimport { connect } from 'react-redux';\n\nimport dataFetch from '../../providers/dataFetch';\n\nimport FilesShowContent from './FilesShowContent';\nimport Status from './Status';\n// import { refreshView } from 'ra-core';\n\nexport { default as FilesIcon } from '@material-ui/icons/InsertDriveFile';\n\nconst listStyles = {};\n\n//Assumes all files to download are CSV\nconst DownloadFileButton = ({ record, ...props }) => (\n <DownloadButton filePath={`${URL}${record.filePath}`} fileName={`${record.name}.csv`} label='Download' />\n)\n\nconst ContentButton = ({ record, ...props }) => {\n if (record && record.file && record.file.split('.').pop() === 'csv') {\n return <ShowButton record={record} {...props} />\n } else {\n return null\n }\n}\n\n\nconst sanitizeRestProps = ({\n // emit,\n // listen,\n // stopListen,\n // showNotification,\n insideRoom,\n // refreshView,\n ...props\n}) => props;\n\nconst FilesFilter = translate(({ translate, ...props }) => (\n <Filter {...props}>\n <SearchInput source=\"q\" alwaysOn label={translate('pos.search')} />\n <SelectInput source=\"status\" choices={[\n { id: 'SUCCESS', name: translate('resources.files.filter.success') },\n { id: 'DUPLICATED', name: translate('resources.files.filter.duplicated') },\n { id: 'PENDING', name: translate('resources.files.filter.pending') },\n { id: 'ERROR', name: translate('resources.files.filter.error1') },\n { id: 'CSV_DONT_MATCH_COLUMNS_LENGTH', name: translate('resources.files.filter.error2') },\n { id: 'DATE_ISSUE', name: translate('resources.files.filter.error3') },\n]}/>\n </Filter>\n));\n\nclass _FilesList extends Component {\n // componentDidMount() {\n // this.props.emit('enter', {room : 'file'})\n // .catch(err => {\n // if(SOCKET_DEBUG)\n // console.log(\"err FILE\", err);\n // });\n\n // this.props.listen('file', (data) => {\n // const { refresh, file } = data;\n // if(refresh && this.props.ids.includes(file.id)) {\n // // this.props.showNotification('sockets.update_data');\n // this.props.refreshView();\n // }\n // })\n // .catch(err => {\n // if(SOCKET_DEBUG)\n // console.log(\"err FILE\", err);\n // });\n // }\n\n // componentWillUnmount() {\n // this.props.stopListen('file')\n // .catch(err => {\n // if(SOCKET_DEBUG)\n // console.log(\"err FILE\", err);\n // });\n\n // this.props.emit('leave', {room : 'file'})\n // .catch(err => {\n // if(SOCKET_DEBUG)\n // console.log(\"err FILE\", err);\n // });\n // }\n\n render() {\n return (\n <ResponsiveList\n {...sanitizeRestProps(this.props)}\n listFilters={<FilesFilter />}\n listActions={<DefaultCardActions createLabel={'resources.files.fields.uploadFile'} />}\n recordActions={[<DownloadFileButton />, <ContentButton />]}\n >\n <TextField source=\"name\" />\n <TextField source=\"originalFilename\" />\n <TextField source=\"identifier\" />\n {/* <DateField source=\"createdAt\" /> */}\n <DateField source=\"createdAt\" format='dd/MM/yyyy' noFields />\n <Status source=\"status\" />\n </ResponsiveList>\n );\n }\n}\n\nconst mapStateToProps = (state) => ({\n ids: state.admin.resources.files.list.ids\n});\n\nconst mapDispatchToProps = dispatch => {\n return ({\n // listen: (...data) => dispatch(listenWS(...data)),\n // stopListen: (...data) => dispatch(stopListenWS(...data)),\n // emit: (...data) => dispatch(emitWS(...data)),\n // insideRoom: (...data) => dispatch(insideRoomWS(...data)),\n // showNotification: (...data) => dispatch(showNotification(...data)),\n // refreshView: (...data) => dispatch(refreshView(...data)),\n})};\n\nconst enhance = compose(\n connect(mapStateToProps, mapDispatchToProps)\n);\n\nexport const FilesList = enhance(_FilesList);\n\nconst submit = (history) => (data) => {\n const headers = new Headers({\n Accept: 'application/json',\n });\n\n const formData = new FormData()\n formData.append('name', data.name)\n formData.append('identifier', data.identifier)\n formData.append('file', data.file.rawFile)\n dataFetch('POST', '/files/upload/csv', headers, formData)\n .then(_ => {\n history.goBack()\n });\n};\n\n\nclass FileSimpleForm extends Component {\n render() {\n const { save, history, ...props } = this.props\n\n return <SimpleForm save={submit(history)} redirect='list' {...props}>\n <FileInput source='file' validate={required()}>\n <FileField source='file' title='fileName' />\n </FileInput>\n <TextInput source='name' validate={required()} />\n <TextInput source='identifier' validate={required()} />\n </SimpleForm>\n }\n};\n\n\nexport const FileCreate = withStyles(listStyles)(({ classes, ...props }) => (\n <Create actions={<DefaultCardActions />}{...props}>\n <FileSimpleForm history={props.history} />\n </Create>\n));\n\n\n// export class FilesShow extends Component {\n\n// componentDidMount( ) {\n// console.log(\"FILES MOUNTED\")\n// }\n\n// render(){\n// return (\n// <Show {...this.props}>\n// <SimpleShowLayout>\n// <Responsive\n// small={<FilesShowContent perPage={10}/>}\n// medium={<FilesShowContent perPage={25}/>}\n// />\n// </SimpleShowLayout>\n// </Show>\n// )}\n// }\n\n// export const FilesShow = compose(withStyles(listStyles))(_FilesShow);\n\nexport const FilesShow = withStyles(listStyles)(({ ...props }) => (\n <Show {...props}>\n <SimpleShowLayout>\n <Responsive\n small={<FilesShowContent perPage={10} />}\n medium={<FilesShowContent perPage={25} />}\n />\n </SimpleShowLayout>\n </Show>\n));","import React, { Fragment, Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport compose from 'recompose/compose';\nimport { withStyles, createStyles } from '@material-ui/core/styles';\nimport { fade } from '@material-ui/core/styles/colorManipulator';\nimport ActionDelete from '@material-ui/icons/Delete';\nimport classnames from 'classnames';\n// import inflection from 'inflection';\nimport { translate/*, crudDelete*/ } from 'ra-core';\n\n// import Confirm from '../layout/Confirm';\nimport { Button, Confirm, refreshView, showNotification } from 'react-admin';\nimport dataFetch from '../../providers/dataFetch';\nimport { push } from 'react-router-redux';\n\nconst sanitizeRestProps = ({\n basePath,\n classes,\n crudDelete,\n filterValues,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n label,\n pristine,\n resource,\n saving,\n selectedIds,\n submitOnEnter,\n redirect,\n refreshView,\n showNotification,\n push,\n ...rest\n}) => rest;\n\nconst styles = theme =>\n createStyles({\n deleteButton: {\n color: theme.palette.error.main,\n '&:hover': {\n backgroundColor: fade(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n });\n\nclass DeleteContentButton extends Component {\n state = { isOpen: false };\n\n handleClick = e => {\n this.setState({ isOpen: true });\n e.stopPropagation();\n };\n\n handleDialogClose = () => {\n this.setState({ isOpen: false });\n };\n\n handleAction = () => {\n dataFetch('POST', `/derivedsets/deleteObservationsByDerivedsetId/${this.props.derived_id}`)\n .then(_ => {\n this.props.showNotification(\"resources.derivedsets.forms.buttons.delete_observations_confirm_notification\");\n this.props.push(`/derivedsets/${this.props.derived_id}/show`)\n })\n .catch(_=> console.log(\"ERRO\"))\n\n };\n /*\n confirmaction => function to action on confirmation\n derivedsetName => name derivedSet\n */\n render() {\n const {\n classes = {},\n className,\n icon,\n label,\n c_title,\n c_content,\n onClick,\n record,\n resource,\n translate,\n // derivedsetName,\n ...rest\n } = this.props;\n return (\n <Fragment>\n <Button\n onClick={this.handleClick}\n label={label ? label : translate('resources.derivedsets.forms.buttons.delete_observations')}\n className={classnames(\n 'ra-delete-button',\n classes.deleteButton,\n className\n )}\n key=\"button\"\n {...sanitizeRestProps(rest)}\n >\n {icon}\n </Button>\n <Confirm\n isOpen={this.state.isOpen}\n title={c_title ? c_title : translate('resources.derivedsets.forms.buttons.delete_observations_confirm_title')}\n content={c_content ? c_content : translate(\"resources.derivedsets.forms.buttons.delete_observations_confirm_description\"/*, {name: derivedsetName}*/)}\n onConfirm={this.handleAction}\n onClose={this.handleDialogClose}\n />\n </Fragment>\n );\n }\n}\n\nDeleteContentButton.propTypes = {\n basePath: PropTypes.string,\n classes: PropTypes.object,\n className: PropTypes.string,\n label: PropTypes.string,\n record: PropTypes.object,\n redirect: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.bool,\n PropTypes.func,\n ]),\n derived_id: PropTypes.string.isRequired,\n translate: PropTypes.func,\n icon: PropTypes.element,\n};\n\nDeleteContentButton.defaultProps = {\n redirect: 'list',\n icon: <ActionDelete />,\n};\n\nexport default compose(\n connect(null, {\n refreshView,\n showNotification,\n push \n }),\n translate,\n withStyles(styles)\n)(DeleteContentButton);","import React, { Children, Fragment, isValidElement } from 'react';\nimport PropTypes from 'prop-types';\nimport compose from 'recompose/compose';\nimport MuiToolbar from '@material-ui/core/Toolbar';\nimport withWidth from '@material-ui/core/withWidth';\nimport { withStyles, createStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\n\nimport { SaveButton, DeleteButton } from 'react-admin';\nimport DeleteWithConfirmButton from './DeleteContentButton';\n\nconst styles = theme => createStyles({\n toolbar: {\n backgroundColor:\n theme.palette.type === 'light'\n ? theme.palette.grey[100]\n : theme.palette.grey[900],\n },\n desktopToolbar: {\n marginTop: theme.spacing.unit * 2,\n },\n mobileToolbar: {\n position: 'fixed',\n bottom: 0,\n left: 0,\n right: 0,\n padding: '16px',\n width: '100%',\n boxSizing: 'border-box',\n flexShrink: 0,\n zIndex: 2,\n },\n defaultToolbar: {\n flex: 1,\n display: 'flex',\n justifyContent: 'space-between',\n },\n spacer: {\n [theme.breakpoints.down('xs')]: {\n height: '5em',\n },\n },\n});\n\nconst valueOrDefault = (value, defaultValue) =>\n typeof value === 'undefined' ? defaultValue : value;\n\nconst Toolbar = ({\n basePath,\n children,\n classes,\n className,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n pristine,\n record,\n redirect,\n resource,\n saving,\n submitOnEnter,\n undoable,\n width,\n rightButton,\n // derivedsetName,\n derived_id,\n ...rest\n}) => (\n <Fragment>\n <MuiToolbar\n className={classnames(\n classes.toolbar,\n {\n [classes.mobileToolbar]: width === 'xs',\n [classes.desktopToolbar]: width !== 'xs',\n },\n className\n )}\n role=\"toolbar\"\n {...rest}\n >\n {Children.count(children) === 0 ? (\n <div className={classes.defaultToolbar}>\n <SaveButton\n handleSubmitWithRedirect={handleSubmitWithRedirect}\n invalid={invalid}\n redirect={redirect}\n saving={saving}\n submitOnEnter={submitOnEnter}\n />\n\n {\n rightButton && (<DeleteWithConfirmButton derived_id={derived_id} />)\n }\n\n {record && typeof record.id !== 'undefined' && (\n <DeleteButton\n basePath={basePath}\n record={record}\n resource={resource}\n undoable={undoable}\n />\n )}\n </div>\n ) : (\n Children.map(children, button =>\n button && isValidElement(button)\n ? React.cloneElement(button, {\n basePath,\n handleSubmit: valueOrDefault(\n button.props.handleSubmit,\n handleSubmit\n ),\n handleSubmitWithRedirect: valueOrDefault(\n button.props.handleSubmitWithRedirect,\n handleSubmitWithRedirect\n ),\n invalid,\n pristine,\n record,\n resource,\n saving,\n submitOnEnter: valueOrDefault(\n button.props.submitOnEnter,\n submitOnEnter\n ),\n undoable: valueOrDefault(\n button.props.undoable,\n undoable\n ),\n })\n : null\n )\n )}\n </MuiToolbar>\n <div className={classes.spacer} />\n </Fragment>\n);\n\nToolbar.propTypes = {\n basePath: PropTypes.string,\n children: PropTypes.node,\n classes: PropTypes.object,\n className: PropTypes.string,\n handleSubmit: PropTypes.func,\n handleSubmitWithRedirect: PropTypes.func,\n invalid: PropTypes.bool,\n pristine: PropTypes.bool,\n record: PropTypes.object,\n redirect: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.bool,\n PropTypes.func,\n ]),\n // confirmaction: PropTypes.func,\n derived_id: PropTypes.string,\n resource: PropTypes.string,\n saving: PropTypes.oneOfType([PropTypes.object, PropTypes.bool]),\n submitOnEnter: PropTypes.bool,\n undoable: PropTypes.bool,\n width: PropTypes.string,\n};\n\nToolbar.defaultProps = {\n submitOnEnter: true,\n rightButton: true\n};\n\nconst enhance = compose(\n withWidth(),\n withStyles(styles)\n);\nexport default enhance(Toolbar);","import React from 'react';\n\nimport {\n CheckCircle as CheckCircleIcon,\n RadioButtonUnchecked as RadioButtonUncheckedIcon,\n ErrorOutline as ErrorOutlineIcon,\n OfflinePin as OfflinePinIcon\n} from '@material-ui/icons';\nimport {\n Tooltip,\n // IconButton \n} from '@material-ui/core';\nconst Status = ({source, record, className, ...props}) => {\n\n const status = record[source];\n\n switch(status) {\n case 'UPDATED': \n return (\n <Tooltip title={'Updated'}>\n <CheckCircleIcon style={{ color: 'rgba(50,205,50)' }}/>\n </Tooltip>\n )\n\n case 'PROCESSING': \n case 'PENDING': \n return (\n <Tooltip title={'Processing'}>\n <RadioButtonUncheckedIcon style={{ color: 'rgba(0,89,255)' }}/>\n </Tooltip>\n )\n \n case 'CREATED': \n case null: \n return (\n <Tooltip title={'Created'}>\n <RadioButtonUncheckedIcon style={{ color: 'rgba(255,165,0)' }}/>\n </Tooltip>\n )\n\n case 'OUTDATED': \n return (\n <Tooltip title={'Outdated'}>\n <OfflinePinIcon style={{ color: 'rgba(255,165,0)' }}/>\n </Tooltip>\n )\n default: \n return (\n <Tooltip title={'Error'}>\n <ErrorOutlineIcon style={{ color: 'rgba(255,0,0)' }}/>\n </Tooltip>\n )\n }\n}\n\nStatus.defaultProps = {\n addLabel: true,\n};\n\nexport default Status;","import React, { Fragment, Component} from 'react';\nimport {\n Button,\n fetchEnd,\n translate,\n fetchStart,\n refreshView,\n showNotification\n} from 'react-admin';\n\nimport DeleteIcon from '@material-ui/icons/Delete'\nimport compose from 'recompose/compose';\nimport { connect } from 'react-redux';\n\nimport dataFetch from '../../providers/dataFetch';\nimport { refreshAnnotations } from '../../containers/derivedsets/actions'\n\n\nconst removeObj = (props) => {\n const { derivedsetId, refreshAnnotations, fetchStart, showNotification, refreshView, fetchEnd, selectedIds, url, allData } = props;\n\n let toDelete = selectedIds.map(id => {\n return {\n datasetId: allData[id].datasetId,\n derivedsetId: allData[id].derivedsetId,\n timestamp: allData[id].timestamp,\n record: allData[id].record,\n id: allData[id].id\n }\n })\n\n const headers = new Headers({\n Accept: 'application/json',\n \"Content-Type\": \"application/json\"\n });\n\n fetchStart(); \n \n dataFetch('DELETE', url, headers, JSON.stringify(toDelete))\n .then((result) => {\n refreshView()\n showNotification('resources.derivedsets.fields.removed_noti', 'info', { messageArgs: { id: selectedIds.length } });\n })\n .catch(err => {\n if(err.error && err.error.code)\n showNotification(`errors.${err.error.code}`, 'warning');\n else\n showNotification(`errors.SOMETHING`, 'warning');\n })\n .finally(_ => {\n fetchEnd();\n refreshAnnotations(derivedsetId);\n });\n}\n\nclass MultipleDeleteDerivesetObs extends Component {\n\n constructor(props) {\n super(props);\n this.handleClick = this.handleClick.bind(this);\n }\n\n handleClick(e) {\n removeObj(this.props)\n }\n\n render() {\n return (\n <Fragment>\n <Button \n label={this.props.translate('resources.derivedsets.fields.remove')}\n onClick={this.handleClick}\n >\n <DeleteIcon/>\n </Button>\n </Fragment>\n )\n }\n}\n\nexport default compose(\n translate,\n connect(null, {\n fetchEnd,\n fetchStart,\n refreshView,\n showNotification,\n refreshAnnotations\n}))(MultipleDeleteDerivesetObs)","import React, { Component } from 'react'\nimport { NoteAdd } from '@material-ui/icons'\nimport { translate, Button} from 'react-admin'\nimport CreateAnnotationsDialog from './CreateAnnotationsDialog'\n\nconst AddAnnotationActionButton = translate(class extends Component {\n\n state = {\n open: false\n }\n\n handleClose = () => this.setState({open: false})\n\n handleOpen = () => this.setState({open: true})\n\n render(){\n\n const { translate, reference } = this.props\n \n return <div>\n <Button \n label={translate('pos.general.add_referencing', { reference: translate(`resources.${reference}.name`, {smart_count:2} ) } )} \n onClick={this.handleOpen}><NoteAdd/></Button>\n <CreateAnnotationsDialog open={this.state.open} onClose={this.handleClose} fullWidth edit={false} observationIds={this.props.selectedIds} insertedAnnotations={this.props.insertedAnnotations} {...this.props}/>\n </div>\n }\n\n})\n\nexport default AddAnnotationActionButton","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport compose from 'recompose/compose';\r\nimport { Note as NoteIconIcon } from '@material-ui/icons';\r\n\r\nimport {\r\n Button,\r\n fetchStart,\r\n fetchEnd,\r\n showNotification,\r\n translate\r\n} from 'react-admin';\r\n\r\nimport AnnotationsDialog from './AnnotationsDialog';\r\n\r\nclass AnnnotationsButton extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n modalOpen: false\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <>\r\n <Button\r\n label='containers.annotations.modalTitle'\r\n onClick={() => this.setState({modalOpen: true})}\r\n disabled={this.props.disabled}\r\n >\r\n <NoteIconIcon />\r\n </Button>\r\n\r\n <AnnotationsDialog recordId={this.props.recordId} modalOpen={this.state.modalOpen} modalClose={() => this.setState({modalOpen: false})} inserted_annotations={this.props.inserted_annotations}/>\r\n\r\n </>\r\n )\r\n }\r\n}\r\n\r\nexport default compose(\r\n translate,\r\n connect(null, {\r\n fetchStart,\r\n fetchEnd,\r\n showNotification,\r\n })\r\n)(AnnnotationsButton);","import React, { Component } from 'react';\nimport {\n Typography,\n} from \"@material-ui/core\"\nimport { withStyles } from '@material-ui/core/styles';\n\nvar styles = function styles(theme) {\n var height = 32;\n var backgroundColor = theme.palette.type === 'light' ? theme.palette.grey[300] : theme.palette.grey[700];\n // var deleteIconColor = (0, _colorManipulator.fade)(theme.palette.text.primary, 0.26);\n return {\n /* Styles applied to the root element. */\n tag_root: {\n fontFamily: theme.typography.fontFamily,\n fontSize: theme.typography.pxToRem(13),\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: height,\n color: theme.palette.getContrastText(backgroundColor),\n backgroundColor: backgroundColor,\n borderRadius: height / 2,\n whiteSpace: 'nowrap',\n transition: theme.transitions.create(['background-color', 'box-shadow']),\n // label will inherit this from root, then `clickable` class overrides this for both\n cursor: 'default',\n // We disable the focus ring for mouse, touch and keyboard users.\n outline: 'none',\n textDecoration: 'none',\n border: 'none',\n // Remove `button` border\n padding: 0, // Remove `button` padding,\n float: 'right',\n\n },\n tag_label: {\n display: 'flex',\n alignItems: 'center',\n paddingLeft: 12,\n paddingRight: 12,\n userSelect: 'none',\n whiteSpace: 'nowrap',\n cursor: 'inherit'\n },\n content: { padding: 0 },\n\n closeButton: {\n marginTop: '0.5em',\n marginRight: '0.5em'\n },\n actionButton: {\n padding: 0,\n minHeight: 0,\n minWidth: 0,\n width: '30px',\n height: '30px'\n },\n inline: {\n display: 'inline',\n },\n right: {\n float: 'right',\n }\n }\n}\n\n\nclass TagsField extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n tags: {}\n };\n }\n\n componentDidMount() {\n const tags = {};\n this.props.tags.forEach((t) => {\n tags[t.id] = t.name;\n });\n\n this.setState({tags});\n }\n render() {\n const { classes, record } = this.props;\n return (\n\n <Typography component={'span'} className={classes.right} color=\"textSecondary\">\n {record.tags && record.tags.map((tag, index) => {\n return (\n <span className={classes.tag_root} key={index}>\n <span className={classes.tag_label} > {this.state.tags[tag]}</span>\n </ span>)\n })}\n </Typography>\n )\n }\n}\n\nexport default withStyles(styles)(TagsField);\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport {\n Button,\n Create,\n // DateField,\n Pagination,\n Show,\n SimpleForm,\n TextField,\n TextInput,\n fetchEnd,\n fetchStart,\n required,\n Filter,\n SearchInput,\n translate,\n BulkActionsToolbar,\n SimpleShowLayout,\n showNotification\n} from 'react-admin';\n\nimport {\n List as TableIcon,\n Map as MapIcon,\n ShowChart as ChartIcon,\n // Update as UpdateIcon,\n AssistantPhoto as Icon,\n Edit as EditIcon,\n} from '@material-ui/icons';\n\nimport {\n Typography,\n /*Card, */\n List,\n Input,\n InputLabel,\n MenuItem,\n FormControl,\n Select,\n} from \"@material-ui/core\"\nimport { withStyles, createStyles } from '@material-ui/core/styles';\nimport { Link } from 'react-router-dom';\nimport {\n DefaultCardActions,\n ReferenceManyManyField,\n ResponsiveDatagrid,\n ResponsiveList,\n Edit,\n DateField,\n DownloadButton\n} from '../../components';\nimport { API_URL } from '../../Configuration';\n\nimport ToolbarC from './DeleteContentToolbar';\nimport Status from './Status';\n\nimport MultipleDeleteDerivesetObs from './MultipleDeleteDerivesetObs'\n\nimport compose from 'recompose/compose';\nimport AddAnnotationActionButton from '../annotations/AddAnnotationActionButton';\n\nimport AnnotationButton from './annotations/Button';\nimport PublishButton from '../datasets/PublishButton';\n\nimport { dataFetch } from '../../providers';\n\nimport TagsField from './TagsField';\nexport const DerivedDatasetIcon = Icon;\n\nconst listStyles_DerivedDtsShow = createStyles({\n card: {\n position: 'relative',\n padding: '16px'\n },\n content2: {\n padding: '0px',\n // background: \"red\"\n }\n});\n\nconst listStyles_DerivedDatagrid = createStyles({\n DerivedDatagrid: {\n flex: '1 1 auto',\n padding: '0px'\n }\n});\n\nconst styles = theme => ({\n root: {\n display: 'flex',\n flexWrap: 'wrap',\n },\n formControl: {\n margin: theme.spacing.unit,\n minWidth: 120,\n maxWidth: 300,\n },\n chips: {\n display: 'flex',\n flexWrap: 'wrap',\n },\n chip: {\n margin: theme.spacing.unit / 4,\n },\n});\n\nconst MapButton = ({ record }) => (\n // record && record.numberObservations > 0 && record.status === 'UPDATED' &&\n <Button component={Link} disabled={!(record && record.equipmentId)} label='pos.general.map' to={`/derivedsets/${record.id}/map`}><MapIcon /></Button>\n)\n\nconst ChartButton = ({ record }) => (\n // record && record.numberObservations > 0 && record.status === 'UPDATED' &&\n <Button component={Link} disabled={!(record && record.equipmentId)} label='pos.general.chart' to={`/derivedsets/${record.id}/charts`}><ChartIcon /></Button>\n)\n\n// class UpdateButton extends Component {\n// state = { disabled: false };\n// render() {\n// return (\n// <Button disabled={this.state.disabled} label='pos.general.update' onClick={() => {\n// this.setState({ disabled: true });\n// dataFetch('POST', `/derivedsets/metadata/update/${this.props.record.id}`)\n// .then(result => {\n// this.props.showNotification('resources.derivedsets.notification.update_metadata')\n// })\n// .catch(error => {\n// this.props.showNotification('errors.SOMETHING', 'warning')\n// })\n// .finally(() => { this.setState({ disabled: false }) })\n\n// }}><UpdateIcon /></Button>\n// )\n// }\n// }\n\nconst TableButton = ({ record }) => (\n // record && record.numberObservations > 0 && record.status === 'UPDATED' &&\n <Button component={Link} label='pos.general.table' to={`/derivedsets/${record.id}/show`}><TableIcon /></Button>\n)\n\n// const EditButton = ({record}) => (\n// <Button component={Link} label='pos.general.edit' to={`/derivedsets/${record.id}/edit`}><EditIcon/></Button>\n// )\n\nconst DerivedFilter = translate(({ translate, ...props }) => (\n <Filter {...props}>\n <SearchInput source=\"q\" alwaysOn label={translate('pos.search')} />\n </Filter>\n));\n\nexport const _DerivedDtsList = ({ showNotification, ...props }) => (\n <ResponsiveList {...props}\n listFilters={<DerivedFilter />}\n recordActions={[<TableButton />, <MapButton />, <ChartButton />, <PublishButton basePath=\"derivedsets\" />]}>\n <TextField source='name' />\n <TextField source='description' />\n <TextField source='numberObservations' />\n <Status source=\"status\" />\n </ResponsiveList>\n)\n\nexport const DerivedDtsList = compose(\n connect(null, { showNotification })\n)(_DerivedDtsList);\n\n\nexport const DerivedDtsCreate = ({ ...props }) => (\n <Create actions={<DefaultCardActions />} {...props}>\n <SimpleForm redirect=\"/derivedsets\">\n <TextInput source='name' validate={required()} />\n <TextInput source='description' validate={required()} />\n </SimpleForm>\n </Create>\n)\n\nexport const DerivedDtsEdit = ({ ...props }) => (\n <Edit actions={<DefaultCardActions />} {...props}>\n <SimpleForm toolbar={<ToolbarC derived_id={props.id} />}>\n <TextInput source='name' validate={required()} />\n <TextInput source='description' validate={required()} />\n </SimpleForm>\n </Edit>\n)\n\n\nconst ITEM_HEIGHT = 48;\nconst ITEM_PADDING_TOP = 8;\nconst MenuProps = {\n PaperProps: {\n style: {\n maxHeight: ITEM_HEIGHT * 4.5 + ITEM_PADDING_TOP,\n width: 250,\n },\n },\n};\n\nclass _DerivedActions extends Component {\n\n // const DerivedActions = ({ data, id, hasCreate, translate, ...props }) => {\n\n constructor(props) {\n super(props);\n\n this.state = {\n curated: undefined,\n downloadEnabled: false,\n tags: [],\n }\n }\n componentDidMount() {\n const { id } = this.props;\n\n const filter = {\n include: [\n {\n relation: 'equipment',\n }\n ]\n };\n\n fetchStart();\n dataFetch('GET', `/derivedsets/${id}?filter=${JSON.stringify(filter)}`)\n .then(data => this.setState({curated: data}))\n .finally(_ => fetchEnd());\n }\n filename = () => {\n return `WOS_CURATED_${this.state.curated?.equipment?.serialNumber}_${this.props.data?.name.replace(/ /g, '').toLocaleLowerCase()}_${this.props.id}`;\n }\n\n componentDidUpdate(oldProps) {\n const { data } = this.props;\n if (this.state.downloadEnabled === false && data && data.name && data.numberObservations > 0 && (data.status === 'UPDATED' || data.status === 'OUTDATED')) {\n this.setState({ downloadEnabled: true });\n } else if (this.state.downloadEnabled === true && data && data.name && !data.numberObservations) {\n this.setState({ downloadEnabled: false });\n }\n }\n\n render() {\n const { id, data, translate, inserted_annotations, theme, classes, tags_selected, handleTagsChange, tags } = this.props;\n return (<div style={{ display: 'flex', width: '100%', justifyContent: 'space-between' }}>\n <Typography variant='title'>{data && data.name}</Typography>\n <span style={{ display: 'flex' }}>\n <FormControl className={classes.formControl}>\n <InputLabel htmlFor=\"select-multiple\">{translate('resources.derivedsets.forms.buttons.tags_filter')}</InputLabel> \n <Select\n multiple\n value={tags_selected}\n onChange={handleTagsChange}\n input={<Input id=\"select-multiple\" />}\n MenuProps={MenuProps}\n >\n {tags.map(({name, id}) => (\n <MenuItem\n key={id}\n value={id}\n style={{\n fontWeight:\n tags_selected.indexOf(id) === -1\n ? theme.typography.fontWeightRegular\n : theme.typography.fontWeightMedium,\n }}\n >\n {name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n\n <Button component={Link} disabled={!(data && data.equipmentId)} label='pos.general.chart' to={id ? `/derivedsets/${id}/charts` : '/derivedsets'}><ChartIcon /></Button>\n <Button component={Link} disabled={!(data && data.equipmentId)} label='pos.general.map' to={id ? `/derivedsets/${id}/map` : '/derivedsets'}><MapIcon /></Button>\n <AnnotationButton recordId={id} inserted_annotations={inserted_annotations} />\n\n <DownloadButton disabled={!this.state.downloadEnabled} filePath={`${API_URL}/containers/derivedsets/download/curated_${id}.csv`} fileName={`${this.filename()}.csv`} label={translate('resources.observations.button.csv_export')} />\n <DownloadButton disabled={!this.state.downloadEnabled} filePath={`${API_URL}/containers/derivedsets/download/curated_${id}.json`} fileName={`${this.filename()}.json`} label={translate('resources.observations.button.metadata_export')} />\n\n <Button component={Link} label='pos.general.edit' to={id ? `/derivedsets/${id}/edit` : `/derivedsets`}><EditIcon /></Button>\n <Button component={Link} label='pos.general.list' to={`/derivedsets`}><TableIcon /></Button>\n </span>\n </div>\n )\n }\n}\n\nconst DerivedActions = withStyles(styles, { withTheme: true })(_DerivedActions)\n\nconst prop_order = [\n 'record',\n 'latitude',\n 'longitude',\n 'satellites',\n 'nb_gnss_sat',\n 'height',\n 'payload',\n 'speed',\n 'course',\n 'validity',\n 'hdop',\n 'vdop',\n 'pdop',\n 'sep',\n 'sampleimu',\n 'temperature',\n 'temp_imu',\n 'sampletemperature',\n 'samplepressure',\n 'temp_1',\n 'temp_2',\n 'temp_3',\n 'temp_4',\n 'atm',\n 'Hm0',\n 'Tm01',\n 'Tm02',\n 'Tp',\n 'Mdir',\n 'PkDir',\n 'DirSpr',\n 'PkDirSpr',\n 'WmaxH',\n 'bat',\n 'rssi'\n];\n\nconst remove_props = [\n \"gpstime\",\n \"timestamp\",\n \"derivedsetId\",\n \"datasetId\",\n \"id\",\n \"position\",\n \"serialNumber\",\n \"properties\",\n \"references\",\n \"year\",\n \"second\",\n \"day\",\n \"hour\",\n \"minute\",\n \"month\",\n \"tags\"\n];\n\nclass DerivedDatagrid extends Component {\n constructor(props) {\n super(props)\n this.state = {\n selectedIds: [],\n version: 0,\n default_props: [],\n allData: {},\n }\n this.selectOne = this.selectOne.bind(this);\n this.selectAll = this.selectAll.bind(this);\n }\n\n componentDidMount() {\n this.setState({ to_mount: true });\n }\n\n componentDidUpdate(OldProps) {\n if (OldProps.data !== this.props.data || this.state.to_mount) {\n this.setState({ to_mount: false });\n\n const { data, ids } = this.props;\n let { allData } = this.state;\n let obs = [];\n\n Object.keys(data).map(single => {\n\n if (!allData[single])\n allData[single] = data[single];\n\n if (ids.includes(single))\n obs = [...new Set([...Object.keys(data[single]), ...obs])];\n return {};\n });\n\n obs = obs.filter((prop) => {\n return remove_props.includes(prop) ? false : true;\n });\n\n let default_props = prop_order.filter((p) => {\n const index = obs.indexOf(p);\n if (index !== -1) {\n obs.splice(index, 1);\n return true;\n }\n return false;\n });\n\n this.setState({ default_props: [...default_props, ...obs], allData: allData, version: this.state.version + 1 });\n }\n }\n\n selectOne(e) {\n let { selectedIds } = this.state;\n const index = selectedIds.indexOf(e);\n if (index === -1)\n selectedIds.push(e);\n else\n selectedIds.splice(index, 1);\n\n this.setState({ selectedIds: selectedIds, version: this.state.version + 1 })\n }\n\n selectAll(e) {\n if (e.length === 0) {\n this.setState((state) => ({ selectedIds: state.selectedIds.filter(id => !this.props.ids.includes(id)), version: state.version + 1 }))\n } else {\n this.setState((state) => ({ selectedIds: [...e], version: state.version + 1 }))\n }\n }\n\n render() {\n const { fetchStart, fetchEnd, classes, className, insertedAnnotations, tags, ...props } = this.props;\n const { version, selectedIds, default_props } = this.state;\n return (\n <div>\n <BulkActionsToolbar selectedIds={selectedIds}>\n <MultipleDeleteDerivesetObs url={`/derivedsets/${props.parentrecord.id}${props.basePath}/rel`} allData={this.state.allData} derivedsetId={props.parentrecord.id} />\n <AddAnnotationActionButton reference='annotations' {...props} allData={this.state.allData} insertedAnnotations={this.props.insertedAnnotations} />\n </BulkActionsToolbar>\n\n <List>\n <ResponsiveDatagrid version={version} hasBulkActions={true} selectedIds={selectedIds} onToggleItem={this.selectOne} onSelect={this.selectAll} {...props}>\n <DateField key='datetime' source='timestamp' format='dd/MM/yyyy HH:mm:ss' noFields />\n {\n default_props.length > 0 && default_props.map((property, index) => {\n return <TextField key={index} source={property} sortable={false} />\n })\n }\n {tags.length > 0 && <TagsField key='tags' source='tags' tags={tags}/>}\n </ResponsiveDatagrid>\n </List>\n </div>\n )\n }\n}\n\nconst ConnectedDerivedDatagrid = compose(\n withStyles(listStyles_DerivedDatagrid),\n connect(null, {\n fetchEnd,\n fetchStart\n }))(DerivedDatagrid)\n\n\nclass DerivedDtsShow_tmp extends Component {\n\n state = {\n inserted_annotations: 0,\n tags_selected: [],\n tags: [],\n filter_tag: undefined\n };\n\n insertedAnnotations = () => {\n this.setState({ inserted_annotations: this.state.inserted_annotations + 1 });\n }\n\n handleTagsChange = event => {\n const or = [];\n event.target.value.forEach((id) => {\n or.push({tags: {eq_regex: `\\\\|${id}-`}})\n });\n\n this.setState({ tags_selected: event.target.value, filter_tag: or.length > 0 ? {or} : undefined });\n this.forceUpdate();\n };\n\n componentDidMount() {\n fetchStart();\n dataFetch('GET', `/tags`)\n .then(data => this.setState({ tags: data }))\n .finally(_ => fetchEnd());\n }\n\n render() {\n const { classes, ...rest } = this.props;\n\n return <Show classes={{ card: classes.card }} actions={<DerivedActions inserted_annotations={this.state.inserted_annotations} tags_selected={this.state.tags_selected} tags={this.state.tags} handleTagsChange={this.handleTagsChange} {...rest} />} {...rest}>\n <SimpleShowLayout className={classes.content2} >\n <ReferenceManyManyField \n source='derivedsets' \n recordId={this.props.id} \n reference='observations' \n addLabel={false} \n sort={{ field: 'timestamp', order: 'ASC' }} \n pagination={<Pagination />} \n filter={this.state.filter_tag}\n keepUpdating\n >\n <ConnectedDerivedDatagrid insertedAnnotations={this.insertedAnnotations} tags={this.state.tags}/>\n </ReferenceManyManyField>\n </SimpleShowLayout>\n </Show>\n }\n\n}\n\nexport const DerivedDtsShow = compose(withStyles(listStyles_DerivedDtsShow), translate)(DerivedDtsShow_tmp) ","import React from 'react';\nimport {\n Create,\n Show,\n ShowButton,\n SimpleForm,\n SimpleShowLayout,\n TextInput,\n TextField,\n required\n} from 'react-admin';\n\nimport {\n DefaultCardActions,\n Edit,\n ResponsiveList\n} from '../../components';\n\nexport {default as EquipmentTypeIcon} from '@material-ui/icons/ChangeHistory'\n\nexport const EquipmentTypeList = ({permissions, ...props}) => (\n permissions === 'sysadmin' ? <ResponsiveList recordActions={[<ShowButton />]} {...props}>\n <TextField source=\"name\" />\n </ResponsiveList> : null\n)\n\nexport const EquipmentTypeCreate = ({permissions, ...props}) => (\n permissions === 'sysadmin' ? <Create actions={<DefaultCardActions/>} {...props}>\n <SimpleForm redirect='list'>\n <TextInput source='name' validate={required()} />\n </SimpleForm>\n </Create> : null\n)\n\nexport const EquipmentTypeEdit = ({permissions, ...props}) => (\n permissions === 'sysadmin' ? <Edit actions={<DefaultCardActions {...props}/>} {...props}>\n <SimpleForm>\n <TextInput source='name' validate={required()} />\n </SimpleForm>\n </Edit> : null\n)\n\nexport const EquipmentTypeShow = ({permissions, ...props}) => (\n permissions === 'sysadmin' ? <Show actions={<DefaultCardActions {...props} hasCreate={false}/>} {...props}>\n <SimpleShowLayout>\n <TextField source=\"name\" />\n </SimpleShowLayout>\n </Show> : null\n)","import React from 'react';\r\nimport { connect } from 'react-redux';\r\nimport {\r\n CREATE,\r\n SimpleForm,\r\n showNotification\r\n} from 'react-admin';\r\nimport { dataProvider } from '../../providers';\r\nimport dataFetch from '../../providers/dataFetch';\r\n\r\nimport {createEquipModelAction as createaction} from './actions';\r\nimport {editEquipModelAction as editaction} from './actions';\r\n\r\nimport { isEqual, remove } from 'lodash';\r\nimport { push } from 'react-router-redux';\r\n\r\nconst sanitizeRestProps = ({\r\n createaction,\r\n editaction,\r\n push,\r\n showNotification,\r\n ...props\r\n}) => props;\r\n\r\nclass CustomSimpleForm extends SimpleForm {\r\n saveProperty = (id, properties) => {\r\n return new Promise((resolve, reject) => {\r\n const {unitOfMeasurement, index, observedpropertyId, visible} = properties;\r\n dataProvider(CREATE, 'modelproperties', {\r\n data: {\r\n equipmentmodelId: id,\r\n observedpropertyId,\r\n unitOfMeasurement,\r\n index,\r\n visible\r\n }\r\n }).then(_ => resolve())\r\n .catch(error => reject(error));\r\n });\r\n };\r\n\r\n deleteProperty = (properties) => {\r\n return new Promise((resolve, reject) => {\r\n const { equipmentmodelId, index } = properties;\r\n // dataFetch must used to prevent Promise resolve on OPTIONS (204) request\r\n dataFetch('DELETE', `/modelproperties/${equipmentmodelId}/index/${index}`)\r\n .then(_ => resolve())\r\n .catch(error => reject(error));\r\n });\r\n };\r\n\r\n editProperties = (oldProperties, newProperties) => {\r\n // Clone properties\r\n let removeProperties = Object.assign([], oldProperties);\r\n let addProperties = Object.assign([], newProperties);\r\n // Remove index 0 for EquipmentId\r\n addProperties.shift();\r\n\r\n oldProperties && oldProperties.forEach(oldprop => {\r\n newProperties && newProperties.forEach(newprop => {\r\n if (isEqual(oldprop, newprop)) {\r\n remove(removeProperties, oldprop);\r\n remove(addProperties, newprop);\r\n }\r\n });\r\n });\r\n\r\n return {\r\n remove: removeProperties,\r\n add: addProperties,\r\n }\r\n };\r\n\r\n handleSave = (record) => {\r\n // Clone record\r\n let resource = Object.assign({}, record);\r\n delete resource.properties;\r\n if (record.id) {\r\n // UPDATE\r\n this.props.editaction(this.props.resource, record.id, resource, resource, (_ => {\r\n const operations = this.editProperties(this.props.relatedproperties, record.properties);\r\n let deletePromises = [];\r\n operations.remove && operations.remove.forEach(property => {\r\n deletePromises.push(this.deleteProperty(property));\r\n });\r\n\r\n let createPromises = [];\r\n operations.add && operations.add.forEach(property => {\r\n createPromises.push(this.saveProperty(record.id, property));\r\n });\r\n\r\n Promise.all(deletePromises)\r\n .catch(_ => this.props.showNotification('resources.equipmentmodels.errors.related_properties', 'warning'))\r\n .finally(_ => {\r\n Promise.all(createPromises)\r\n .catch(_ => this.props.showNotification('resources.equipmentmodels.errors.related_properties', 'warning'))\r\n // TODO: This should redirect to Show\r\n .finally(_ => this.props.push(`${this.props.basePath}`));\r\n });\r\n }));\r\n } else {\r\n // CREATE\r\n this.props.createaction(resource, this.props.resource, (props => {\r\n let promises = [];\r\n const {data} = props && props.payload;\r\n record.properties && record.properties.forEach((property, index) => {\r\n // Ignore EquipmentId property\r\n if (index > 0)\r\n promises.push(this.saveProperty(data.id, property));\r\n });\r\n\r\n Promise.all(promises)\r\n .catch(error => this.props.showNotification('resources.equipmentmodels.errors.related_properties', 'warning'))\r\n // TODO: This should redirect to Show\r\n .finally(_ => this.props.push(`${this.props.basePath}`));\r\n }));\r\n }\r\n };\r\n\r\n render() {\r\n const {\r\n ...rest\r\n } = this.props;\r\n\r\n return (\r\n <SimpleForm {...sanitizeRestProps(rest)} save={this.handleSave}></SimpleForm>\r\n );\r\n }\r\n}\r\n\r\nCustomSimpleForm.defaultProps = {\r\n record: {}\r\n};\r\n\r\nconst mapStateToProps = state => ({\r\n relatedproperties: state.relatedproperties\r\n});\r\n\r\nexport default connect(mapStateToProps, {\r\n createaction,\r\n editaction,\r\n push,\r\n showNotification\r\n})(CustomSimpleForm);","import {CREATE, CRUD_CREATE, CRUD_UPDATE, UPDATE} from 'react-admin';\n\nexport const UPDATE_RELATED_PROPERTIES = 'UPDATE_RELATED_PROPERTIES';\nexport const updateRelatedProperties = data => ({ type: UPDATE_RELATED_PROPERTIES, data: data });\n\nexport const createEquipModelAction = (data, resource, callback) => ({\n type: CRUD_CREATE,\n payload: { data },\n meta: {\n resource,\n fetch: CREATE,\n onSuccess: {\n callback,\n },\n onFailure: {\n notification: {\n body: 'ra.notification.http_error',\n level: 'warning',\n },\n },\n },\n})\n\nexport const editEquipModelAction = (resource, id, data, previousData, callback) => ({\n type: CRUD_UPDATE,\n payload: {id, data, previousData},\n meta:{\n resource,\n fetch: UPDATE,\n onSuccess: {\n notification: {\n body: 'ra.notification.updated',\n level: 'info',\n messageArgs: {\n smart_count: 1\n }\n },\n callback\n },\n onFailure: {\n notification: {\n body: 'ra.notification.http_error',\n level: 'warning'\n }\n }\n }\n})\n","import React, {Component} from 'react';\nimport {translate} from 'react-admin';\nimport {\n Table,\n TableBody,\n TableCell,\n TableHead,\n TableRow\n} from '@material-ui/core';\nimport RemoveIcon from '@material-ui/icons/Remove'\nimport {\n Button\n} from 'react-admin';\n\nclass TableFormIterator extends Component{\n\n renderFirstRow = () => {\n const { resource, translate } = this.props;\n\n const firstRow = this.props.firstRow.map((frCell, index) => {\n return <TableCell key={`frc-${index}`}>\n {React.cloneElement(frCell, {record: this.props.fields.get(0)})}\n </TableCell>\n })\n firstRow.push(<TableCell key={`frc-${firstRow.length}`}>{translate(`resources.${resource}.warning.removeProperty`)}</TableCell>)\n \n return firstRow; \n }\n\n renderContent = (propertyLoc, index) => {\n const contentRow = this.props.children.map((child, index) => {\n const { resource, source, translate } = this.props;\n return <TableCell key={`tc-${index}`}>\n {React.cloneElement(child, {source:`${propertyLoc}.${child.props.source}`, label: child.props.label !== undefined ? child.props.label: translate(`resources.${resource}.fields.${source}.${child.props.source}`)})}\n </TableCell>\n })\n\n contentRow.push(<TableCell key={`tc-${contentRow.length}`}><Button label='ra.action.remove' onClick={() => this.props.onRowRemove(index)}><RemoveIcon/></Button></TableCell>)\n\n return contentRow;\n }\n\n render(){\n const {children, fields, resource, source, translate} = this.props;\n\n const data = fields.getAll();\n\n return <Table>\n <TableHead>\n <TableRow>\n {React.Children.map(children, (column, index) => {\n return <TableCell key={`th-${index}`}>{translate(`resources.${resource}.fields.${source}.${column.props.source}`, {_:column.props.source})}</TableCell>\n })}\n <TableCell>{translate('ra.action.remove')}</TableCell>\n </TableRow>\n </TableHead>\n {data && <TableBody>\n {\n fields.map((propertyLoc, index) => {\n return <TableRow key={`tr-${index}`}>\n {\n index === 0 ? this.renderFirstRow() : this.renderContent(propertyLoc, index)\n }\n </TableRow> \n })\n }\n </TableBody>}\n </Table>\n\n }\n\n}\n\nexport default translate(TableFormIterator);","import React, {Component} from 'react';\nimport {connect} from 'react-redux';\nimport compose from 'recompose/compose';\nimport {\n ArrayInput,\n Button,\n BooleanField,\n BooleanInput,\n NumberField,\n NumberInput,\n ReferenceField,\n ReferenceInput,\n SelectInput,\n TextField,\n TextInput,\n addField,\n fetchEnd,\n fetchStart,\n required,\n GET_LIST\n} from 'react-admin';\nimport AddIcon from '@material-ui/icons/Add';\nimport { arrayPush, arrayInsert, arrayRemove, clearFields } from 'redux-form';\nimport TableFormIterator from './TableFormIterator';\n\nimport { dataProvider } from '../../providers';\n\nimport {updateRelatedProperties as updateRelatedPropertiesAction} from './actions';\n\n//Listens for changes in form [TableFormIterator].observedPropertyId field and passes it ReferenceField as record, so it can fetch and show it\nconst CustomRefField = (props) => {\n return <ReferenceField label='resources.observedProperty.name' basePath='/observedProperties' source='observedpropertyId' reference='observedProperties' record={{observedpropertyId: props.input.value}}>\n <TextField source=\"name\" />\n </ReferenceField>\n};\nconst CustomRefFieldCon = addField(CustomRefField);\n\nclass RelateThroughInput extends Component {\n state = {\n relatedProperties: []\n }\n\n componentDidMount(){\n this.updateProperties();\n }\n\n updateProperties = () => {\n this.props.arrayInsert('record-form','properties', 0, {\n visible: true,\n name: \"EquipmentId\",\n unitOfMeasurement: 'N/A',\n index: 0\n });\n\n const { id } = this.props && this.props.record;\n // If has ID then fetch properties\n if (id) {\n dataProvider(GET_LIST, 'modelproperties', { pagination: { perPage: -1 }, sort: { field: 'index', order: 'ASC' }, filter: { equipmentmodelId: id } })\n .then(resp => {\n this.props.saveRelatedProperties(resp.data);\n resp.data && resp.data.forEach((property, index)=> {\n this.props.arrayInsert('record-form', 'properties', index+1, property);\n });\n // fetchEnd();\n }).catch(error => {\n console.error('Error in fetch equipment model', error)\n // fetchEnd();\n });\n }\n };\n\n onAdd = () => {\n if(this.state.selectedModelId){\n this.props.arrayPush('record-form', 'properties', {\n observedpropertyId: this.state.selectedModelId\n });\n this.props.clearFields('record-form', false, true, 'observedProperty');\n }\n };\n\n onChange = (_, id) => {\n this.setState({selectedModelId: id});\n };\n\n onRowRemove = (index) => {\n this.props.arrayRemove('record-form', 'properties', index);\n };\n\n firstRowFields = () => {\n return [\n <NumberField source='index' />,\n <TextField source='name'/>,\n <TextField source='unitOfMeasurement' />,\n <BooleanField source=\"visible\" />,\n ]\n };\n\n render(){\n return <div>\n <ReferenceInput style={{width:'16%'}} perPage={-1} label={`resources.${this.props.resource}.fields.observedProperty`} source='observedProperty' reference=\"observedProperties\" resource='observedProperties' onChange={this.onChange}>\n <SelectInput optionText=\"name\" />\n </ReferenceInput>\n <Button style={{marginLeft: '16px'}} label='ra.action.add' onClick={this.onAdd}><AddIcon/></Button>\n <ArrayInput source='properties' resource='equipmentmodels'>\n <TableFormIterator firstRow={this.firstRowFields()} record={this.state && this.state.record} onRowRemove={(index) => this.onRowRemove(index)}>\n <NumberInput source='index' validate={required()}/>\n <CustomRefFieldCon source='observedpropertyId' />\n <TextInput source='unitOfMeasurement' />\n <BooleanInput source=\"visible\" label='' />\n </TableFormIterator>\n </ArrayInput>\n </div>\n }\n}\n\nRelateThroughInput.defaultProps = {\n relatedproperties: [],\n}\n\nconst mapDispatchToProps = dispatch => ({\n saveRelatedProperties: data => dispatch(updateRelatedPropertiesAction(data))\n});\n\nconst enhance = compose( \n connect(null, mapDispatchToProps),\n connect(null, {\n arrayInsert,\n arrayPush,\n arrayRemove,\n clearFields,\n fetchEnd,\n fetchStart\n })\n);\n\nexport default enhance(RelateThroughInput);\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport {\n GET_LIST,\n fetchEnd,\n fetchStart\n} from 'react-admin';\n\nimport { dataProvider } from '../../providers';\n\nclass RefModelProp extends Component {\n\n state={\n data: {},\n ids: [],\n sort: {\n field: 'index',\n order: 'ASC'\n },\n page: 1,\n perPage: -1,\n total: 0\n }\n\n componentDidMount(){\n const { fetchEnd, fetchStart, record } = this.props;\n const { page, perPage, sort } = this.state;\n\n fetchStart();\n dataProvider(GET_LIST, 'modelproperties', {\n filter: {\n equipmentmodelId: record.id\n },\n sort,\n pagination:{\n page,\n perPage\n }\n })\n .then(resp => {\n resp.data.splice(0, 0, {\n name: \"EquipmentId\",\n unitOfMeasurement: 'N/A',\n visible: true,\n index: 0,\n id: -1\n })\n\n const data = resp.data.reduce((acc, property, index) => {\n acc[index] = property\n return acc;\n }, {});\n\n this.setState({ data, total: Object.keys(data).length })\n fetchEnd();\n })\n .catch(_ => {\n fetchEnd();\n })\n }\n\n render(){\n const { data, sort } = this.state;\n return React.cloneElement(this.props.children, {data, currentSort: sort, ids: Object.keys(data)} )\n }\n\n}\n\nexport default connect(null, {\n fetchEnd,\n fetchStart\n})(RefModelProp)","import React from 'react';\nimport {\n Create,\n BooleanField,\n ReferenceField,\n ReferenceInput,\n SelectInput,\n Show,\n ShowButton,\n SimpleShowLayout,\n TextInput,\n TextField,\n translate,\n required\n} from 'react-admin';\n\nimport {\n DefaultCardActions,\n ResponsiveList,\n ResponsiveDatagrid,\n Edit\n} from '../../components';\n\nimport CustomSimpleForm from './CustomSimpleForm';\nimport RelateThroughInput from './RelateThroughInput';\nimport RefModelProp from './RefModelProp';\nexport { default as EquipmentModelIcon} from '@material-ui/icons/CropSquare';\n\nconst createFormValidation = (translate, record) => {\n const errors = {};\n const currentIndexes = [];\n\n record.properties && record.properties.forEach((property, index) => {\n let error;\n // To ignore index 0 - Equipment Id\n if (index > 0 && property.index !== undefined) {\n // Check if index is duplicated\n if(currentIndexes.includes(property.index))\n error = translate('resources.equipmentmodels.errors.duplicate_index');\n // Check for indexes lower than\n if (property.index < 1)\n error = translate('resources.equipmentmodels.errors.index_lt1');\n \n currentIndexes.push(property.index);\n if (error) {\n if(!errors.properties) errors.properties = [];\n if(!errors.properties[index]) errors.properties[index] = {};\n if(!errors.properties[index].index) errors.properties[index].index = [];\n\n errors.properties[index].index.push(error);\n } \n }\n });\n return errors;\n}\n\nexport const EquipmentModelList = ({permissions, ...props}) => (\n permissions === 'sysadmin' ? <ResponsiveList recordActions={[<ShowButton />]} {...props}>\n <TextField source='name' />\n <ReferenceField source=\"equipmenttypeId\" reference=\"equipmenttypes\" linkType=\"show\">\n <TextField source=\"name\"/>\n </ReferenceField>\n </ResponsiveList> : null\n);\n\nexport const EquipmentModelCreate = translate(({permissions, translate, ...props}) => {\n return permissions === 'sysadmin' ? \n <Create actions={<DefaultCardActions/>} {...props}>\n <CustomSimpleForm validate={(values) => createFormValidation(translate, values)}>\n <TextInput source=\"name\" validate={required()} />\n <ReferenceInput source=\"equipmenttypeId\" reference=\"equipmenttypes\" validate={required()}>\n <SelectInput optionText=\"name\" />\n </ReferenceInput>\n <RelateThroughInput/>\n </CustomSimpleForm>\n </Create> : null\n});\n\nexport const EquipmentModelEdit = translate(({permissions, translate, ...props}) => {\n return permissions === 'sysadmin' ? <Edit {...props}>\n <CustomSimpleForm validate={(values) => createFormValidation(translate, values)}>\n <TextInput source=\"name\" validate={required()} />\n <ReferenceInput source=\"equipmenttypeId\" reference=\"equipmenttypes\" validate={required()}>\n <SelectInput optionText=\"name\" />\n </ReferenceInput>\n <RelateThroughInput />\n </CustomSimpleForm>\n </Edit> : null\n});\n\nconst CustomRefField = ({children, ...props}) => {\n return props.record.id === -1 ? <TextField source=\"name\" record={props.record}/> : <ReferenceField {...props}>\n {children}\n </ReferenceField>\n}\n\nexport const EquipmentModelShow = translate(({permissions, translate, ...props}) => {\n return permissions === 'sysadmin' ? <Show actions={<DefaultCardActions {...props} hasCreate={false}/>} {...props}>\n <SimpleShowLayout>\n <TextField source=\"name\" />\n <ReferenceField source=\"equipmenttypeId\" reference=\"equipmenttypes\">\n <TextField source=\"name\"/>\n </ReferenceField>\n <RefModelProp>\n <ResponsiveDatagrid>\n <TextField source=\"index\" sortable={false}/>\n <CustomRefField basePath=\"/observedProperties\" source=\"observedpropertyId\" reference=\"observedProperties\" linkType=\"show\">\n <TextField source=\"name\" sortable={false} />\n </CustomRefField>\n <TextField source=\"unitOfMeasurement\" sortable={false} />\n <BooleanField source=\"visible\" sortable={false} />\n </ResponsiveDatagrid>\n </RefModelProp>\n </SimpleShowLayout>\n </Show> : null\n})","import React from 'react';\nimport {\n Create,\n Show,\n ShowButton, \n SimpleForm,\n SimpleShowLayout,\n TextField,\n TextInput,\n} from 'react-admin';\n\n\nimport {\n Edit,\n DefaultCardActions,\n ResponsiveList\n} from '../../components';\n\nexport { default as ObservedPropertiesIcon } from '@material-ui/icons/EventNote'; \n\nexport const ObservedPropertiesList = ({...props}) => {\n return <ResponsiveList {...props} recordActions={[<ShowButton/>]}>\n <TextField source='name'/>\n <TextField source='description'/>\n </ResponsiveList>\n}\n\nexport const ObservedPropertiesCreate = ({...props}) => {\n return <Create actions={<DefaultCardActions/>} {...props}>\n <SimpleForm>\n <TextInput source='name' />\n <TextInput source='description' />\n </SimpleForm>\n </Create>\n\n}\n\nexport const ObservedPropertiesEdit = ({...props}) => {\n return <Edit actions={<DefaultCardActions/>} {...props}>\n <SimpleForm>\n <TextInput source='name' />\n <TextInput source='description' />\n </SimpleForm>\n </Edit>\n}\n\nexport const ObservedPropertiesShow = ({...props}) => (\n <Show actions={<DefaultCardActions {...props} hasCreate={false}/>} {...props}>\n <SimpleShowLayout>\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n </SimpleShowLayout>\n </Show>\n)","import React from 'react';\n\nimport {\n Create,\n Filter,\n SearchInput,\n Show,\n ShowButton,\n SimpleForm,\n SimpleShowLayout,\n TextField,\n TextInput,\n required,\n translate\n} from 'react-admin';\n\nimport withStyles from '@material-ui/core/styles/withStyles';\nimport LabelIcon from '@material-ui/icons/Label';\nimport { \n DefaultCardActions,\n Edit,\n ResponsiveList\n} from '../../components';\n\nimport { hexToRgb } from '../../utils/util';\nimport { ColorInput, ColorField } from 'react-admin-color-input';\nexport const TagIcon = LabelIcon;\n\nconst listStyles = {};\n\nconst TagFilter = translate(({translate, ...props}) => (\n <Filter {...props}>\n <SearchInput source=\"q\" alwaysOn label={translate('pos.search')} />\n </Filter>\n));\n\nexport const TagList = withStyles(listStyles)(({ classes, ...props }) => (\n <ResponsiveList\n {...props}\n listFilters={<TagFilter />}\n recordActions={[<ShowButton />]}\n >\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n\n </ResponsiveList>\n));\n\nexport const TagShow = withStyles(listStyles)(({ classes, ...props }) => {\n return(\n <Show actions={<DefaultCardActions />} {...props}>\n <SimpleShowLayout>\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n <ColorField source=\"color\"/>\n </SimpleShowLayout>\n </Show>\n)});\n\nexport const TagEdit = withStyles(listStyles)(({ classes, ...props }) => (\n <Edit {...props}>\n <SimpleForm>\n <TextInput\n source=\"name\"\n validate={required()}\n />\n <TextInput\n source=\"description\"\n />\n <ColorInput source=\"color\" parse={hexToRgb} />\n </SimpleForm>\n </Edit>\n));\n\nexport const TagCreate = withStyles(listStyles)(({ classes, ...props }) => (\n <Create actions={<DefaultCardActions/>} {...props}>\n <SimpleForm redirect='show'>\n <TextInput\n source=\"name\"\n validate={required()}\n />\n <TextInput\n source=\"description\"\n />\n <ColorInput source=\"color\" parse={hexToRgb} />\n </SimpleForm>\n </Create>\n));","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport get from 'lodash/get';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport { withStyles, createStyles } from '@material-ui/core/styles';\nimport compose from 'recompose/compose';\nimport { addField, translate, FieldTitle } from 'ra-core';\nimport {ResettableTextField} from 'react-admin';\n\nconst sanitizeRestProps = ({\n addLabel,\n allowEmpty,\n emptyValue,\n basePath,\n choices,\n className,\n component,\n crudGetMatching,\n crudGetOne,\n defaultValue,\n filter,\n filterToQuery,\n formClassName,\n initializeForm,\n input,\n isRequired,\n label,\n locale,\n meta,\n onChange,\n options,\n optionValue,\n optionText,\n disableValue,\n perPage,\n record,\n reference,\n resource,\n setFilter,\n setPagination,\n setSort,\n sort,\n source,\n textAlign,\n translate,\n translateChoice,\n validation,\n ...rest\n}) => rest;\n\nconst styles = theme => createStyles({\n input: {\n minWidth: theme.spacing.unit * 20,\n },\n});\n\nexport class SelectInput extends Component {\n\n state = {\n value: 1,\n };\n\n componentWillReceiveProps(nextProps) {\n if (nextProps.input.value !== this.props.input.value) {\n if(this.props.choices && nextProps.input.value.inq) {\n const { id } = this.props.choices.filter(({derivedsets}) => derivedsets.includes(nextProps.input.value.inq[0]))[0]\n this.setState({ value: id });\n }\n }\n if(nextProps.choices !== this.props.choices) {\n if(this.props.input && this.props.input.value && this.props.input.value.inq) {\n const { id } = nextProps.choices.filter(({derivedsets}) => derivedsets.includes(this.props.input.value.inq[0]))[0]\n this.setState({ value: id });\n }\n }\n }\n\n handleChange = eventOrValue => {\n\n const value = eventOrValue.target\n ? eventOrValue.target.value\n : eventOrValue;\n this.props.input.onChange(value);\n\n // HACK: For some reason, redux-form does not consider this input touched without calling onBlur manually\n this.props.input.onBlur(value);\n this.setState({ value });\n };\n\n addAllowEmpty = choices => {\n if (this.props.allowEmpty) {\n return [<MenuItem value={this.props.emptyValue} key=\"null\" />, ...choices];\n }\n\n return choices;\n };\n renderMenuItemOption = choice => {\n const { optionText, translate, translateChoice } = this.props;\n if (React.isValidElement(optionText))\n return React.cloneElement(optionText, {\n record: choice,\n });\n const choiceName =\n typeof optionText === 'function'\n ? optionText(choice)\n : get(choice, optionText);\n return translateChoice\n ? translate(choiceName, { _: choiceName })\n : choiceName;\n };\n\n renderMenuItem = choice => {\n const { optionValue, disableValue } = this.props;\n return (\n <MenuItem\n key={get(choice, optionValue)}\n value={get(choice, optionValue)}\n disabled={get(choice, disableValue)}\n >\n {this.renderMenuItemOption(choice)}\n </MenuItem>\n );\n };\n\n render() {\n const {\n allowEmpty,\n choices,\n classes,\n className,\n input,\n isRequired,\n label,\n meta,\n options,\n resource,\n source,\n ...rest\n } = this.props;\n if (typeof meta === 'undefined') {\n throw new Error(\n \"The SelectInput component wasn't called within a redux-form <Field>. Did you decorate it and forget to add the addField prop to your component? See https://marmelab.com/react-admin/Inputs.html#writing-your-own-input-component for details.\"\n );\n }\n const { touched, error, helperText = false } = meta;\n return (\n <ResettableTextField\n select\n margin=\"normal\"\n value={this.state.value}\n label={\n <FieldTitle\n label={label}\n source={source}\n resource={resource}\n isRequired={isRequired}\n />\n }\n name={input.name}\n className={`${classes.input} ${className}`}\n clearAlwaysVisible\n error={!!(touched && error)}\n helperText={(touched && error) || helperText}\n {...options}\n {...sanitizeRestProps(rest)}\n onChange={this.handleChange}\n >\n {this.addAllowEmpty(choices.map(this.renderMenuItem))}\n </ResettableTextField>\n );\n }\n}\n\nSelectInput.propTypes = {\n allowEmpty: PropTypes.bool.isRequired,\n emptyValue: PropTypes.any,\n choices: PropTypes.arrayOf(PropTypes.object),\n classes: PropTypes.object,\n className: PropTypes.string,\n input: PropTypes.object,\n isRequired: PropTypes.bool,\n label: PropTypes.string,\n meta: PropTypes.object,\n options: PropTypes.object,\n optionText: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.func,\n PropTypes.element,\n ]).isRequired,\n optionValue: PropTypes.string.isRequired,\n disableValue: PropTypes.string,\n resource: PropTypes.string,\n source: PropTypes.string,\n translate: PropTypes.func.isRequired,\n translateChoice: PropTypes.bool,\n};\n\nSelectInput.defaultProps = {\n allowEmpty: false,\n emptyValue: '',\n classes: {},\n choices: [],\n options: {},\n optionText: 'name',\n optionValue: 'id',\n translateChoice: true,\n disableValue: 'disabled',\n};\n\nexport default compose(\n addField,\n translate,\n withStyles(styles)\n)(SelectInput);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Field } from 'redux-form';\nimport IconButton from '@material-ui/core/IconButton';\nimport ActionHide from '@material-ui/icons/HighlightOff';\nimport classnames from 'classnames';\nimport { translate } from 'ra-core';\n\nconst emptyRecord = {};\n\nconst sanitizeRestProps = ({ alwaysOn, ...props }) => props;\n\nconst FilterFormInput = ({\n filterElement,\n handleHide,\n classes,\n resource,\n translate,\n locale,\n}) => (\n <div\n data-source={filterElement.props.source}\n className={classnames('filter-field', classes.body)}\n >\n {!filterElement.props.alwaysOn && (\n <IconButton\n className=\"hide-filter\"\n onClick={handleHide}\n data-key={filterElement.props.source}\n title={translate('ra.action.remove_filter')}\n >\n <ActionHide />\n </IconButton>\n )}\n <Field\n allowEmpty\n {...sanitizeRestProps(filterElement.props)}\n name={filterElement.props.source}\n component={filterElement.type}\n resource={resource}\n record={emptyRecord}\n />\n <div className={classes.spacer}> </div>\n </div>\n);\n\nFilterFormInput.propTypes = {\n filterElement: PropTypes.node,\n handleHide: PropTypes.func,\n classes: PropTypes.object,\n resource: PropTypes.string,\n locale: PropTypes.string,\n translate: PropTypes.func,\n};\n\nexport default translate(FilterFormInput);","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { reduxForm } from 'redux-form';\nimport classnames from 'classnames';\nimport { withStyles, createStyles } from '@material-ui/core/styles';\nimport compose from 'recompose/compose';\nimport withProps from 'recompose/withProps';\nimport lodashSet from 'lodash/set';\n\nimport FilterFormInput from './MyFilterFormInput';\n\nconst styles = theme => createStyles({\n form: {\n marginTop: '-10px',\n paddingTop: 0,\n display: 'flex',\n alignItems: 'flex-end',\n flexWrap: 'wrap',\n },\n body: { display: 'flex', alignItems: 'flex-end' },\n spacer: { width: '1em' },\n icon: { color: theme.palette.primary1Color || '#00bcd4', paddingBottom: 0 },\n clearFix: { clear: 'right' },\n});\n\nconst sanitizeRestProps = ({\n anyTouched,\n asyncValidate,\n asyncValidating,\n autofill,\n blur,\n change,\n clearAsyncError,\n clearFields,\n clearSubmit,\n clearSubmitErrors,\n destroy,\n dirty,\n dispatch,\n displayedFilters,\n filterValues,\n handleSubmit,\n hideFilter,\n initialize,\n initialized,\n initialValues,\n invalid,\n pristine,\n pure,\n reset,\n resetSection,\n save,\n setFilter,\n setFilters,\n submit,\n submitFailed,\n submitSucceeded,\n submitting,\n touch,\n triggerSubmit,\n untouch,\n valid,\n validate,\n ...props\n}) => props;\n\nexport class FilterForm extends Component {\n componentDidMount() {\n this.props.filters.forEach(filter => {\n if (filter.props.alwaysOn && filter.props.defaultValue) {\n throw new Error(\n 'Cannot use alwaysOn and defaultValue on a filter input. Please set the filterDefaultValues props on the <List> element instead.'\n );\n }\n });\n }\n\n getShownFilters() {\n const { filters, displayedFilters, initialValues } = this.props;\n\n return filters.filter(\n filterElement =>\n filterElement.props.alwaysOn ||\n displayedFilters[filterElement.props.source] ||\n typeof initialValues[filterElement.props.source] !== 'undefined'\n );\n }\n\n handleHide = event =>\n this.props.hideFilter(event.currentTarget.dataset.key);\n\n render() {\n const { classes = {}, className, resource, initialValues, ...rest } = this.props;\n return (\n <div\n className={classnames(className, classes.form)}\n siga={initialValues}\n\n {...sanitizeRestProps(rest)}\n >\n {this.getShownFilters().map(filterElement => (\n <FilterFormInput\n key={filterElement.props.source}\n filterElement={filterElement}\n handleHide={this.handleHide}\n classes={classes}\n resource={resource}\n\n />\n ))}\n <div className={classes.clearFix} />\n </div>\n );\n }\n}\n\nFilterForm.propTypes = {\n resource: PropTypes.string.isRequired,\n filters: PropTypes.arrayOf(PropTypes.node).isRequired,\n displayedFilters: PropTypes.object.isRequired,\n hideFilter: PropTypes.func.isRequired,\n initialValues: PropTypes.object,\n classes: PropTypes.object,\n className: PropTypes.string,\n};\n\nexport const mergeInitialValuesWithDefaultValues = ({\n initialValues,\n filters,\n choices,\n ...props\n}) => ({\n initialValues: {\n ...filters\n .filter(\n filterElement =>\n filterElement.props.alwaysOn &&\n filterElement.props.defaultValue\n )\n .reduce(\n (acc, filterElement) =>\n lodashSet(\n { ...acc },\n filterElement.props.source,\n filterElement.props.defaultValue\n ),\n {}\n ),\n ...initialValues,\n }\n});\n\nconst enhance = compose(\n withStyles(styles),\n withProps(mergeInitialValuesWithDefaultValues),\n reduxForm({\n form: 'filterForm',\n enableReinitialize: true,\n destroyOnUnmount: false, // do not destroy to preserve state across navigation\n onChange: (values, dispatch, props) => {\n if (values && values.derivedsetId && !values.derivedsetId.inq) {\n const ids = props.choices.filter(_ => _.id === values.derivedsetId);\n values.derivedsetId = { inq: ids[0].derivedsets };\n delete values.id;\n }\n return props && props.setFilters(values)\n },\n })\n);\n\nexport default enhance(FilterForm);","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { sanitizeListRestProps } from 'ra-core';\n\nimport { FilterButton } from 'react-admin'\nimport MyFilterForm from './MyFilterForm'\n\nconst styles = {\n button: {},\n form: {},\n};\n\nexport class Filter extends Component {\n \n renderButton() {\n const {\n classes = {},\n context,\n resource,\n children,\n showFilter,\n hideFilter,\n displayedFilters,\n filterValues,\n ...rest\n } = this.props;\n\n return (\n <FilterButton\n className={classes.button}\n resource={resource}\n filters={React.Children.toArray(children)}\n showFilter={showFilter}\n displayedFilters={displayedFilters}\n filterValues={filterValues}\n {...sanitizeListRestProps(rest)}\n />\n );\n }\n\n renderForm() {\n const {\n classes = {},\n context,\n resource,\n children,\n hideFilter,\n displayedFilters,\n showFilter,\n filterValues,\n setFilters,\n ...rest\n } = this.props;\n\n\n return (\n <MyFilterForm\n className={classes.form}\n resource={resource}\n filters={React.Children.toArray(children)}\n hideFilter={hideFilter}\n displayedFilters={displayedFilters}\n initialValues={filterValues}\n setFilters={setFilters}\n {...sanitizeListRestProps(rest)}\n />\n );\n }\n\n render() {\n return this.props.context === 'button'\n ? this.renderButton()\n : this.renderForm();\n }\n}\n\nFilter.propTypes = {\n children: PropTypes.node,\n classes: PropTypes.object,\n context: PropTypes.oneOf(['form', 'button']),\n displayedFilters: PropTypes.object,\n filterValues: PropTypes.object,\n hideFilter: PropTypes.func,\n setFilters: PropTypes.func,\n showFilter: PropTypes.func,\n resource: PropTypes.string.isRequired,\n};\n\nexport default withStyles(styles)(Filter);","import React from 'react';\n\nimport {\n CheckCircle as CheckCircleIcon,\n RadioButtonUnchecked as RadioButtonUncheckedIcon,\n ErrorOutline as ErrorOutlineIcon,\n OfflinePin as OfflinePinIcon\n} from '@material-ui/icons';\nimport {\n Tooltip,\n // IconButton \n} from '@material-ui/core';\nconst Status = ({source, record, className, ...props}) => {\n\n const status = record[source];\n\n switch(status) {\n case 'UPDATED': \n return (\n <Tooltip title={'Updated'}>\n <CheckCircleIcon style={{ color: 'rgba(50,205,50)' }}/>\n </Tooltip>\n )\n\n case 'PROCESSING': \n case 'PENDING': \n return (\n <Tooltip title={'Processing'}>\n <RadioButtonUncheckedIcon style={{ color: 'rgba(0,89,255)' }}/>\n </Tooltip>\n )\n \n case 'CREATED': \n return (\n <Tooltip title={'Created'}>\n <RadioButtonUncheckedIcon style={{ color: 'rgba(255,165,0)' }}/>\n </Tooltip>\n )\n\n case 'OUTDATED': \n return (\n <Tooltip title={'Outdated'}>\n <OfflinePinIcon style={{ color: 'rgba(255,165,0)' }}/>\n </Tooltip>\n )\n default: \n return (\n <Tooltip title={'Error'}>\n <ErrorOutlineIcon style={{ color: 'rgba(255,0,0)' }}/>\n </Tooltip>\n )\n }\n}\n\nStatus.defaultProps = {\n addLabel: true,\n};\n\nexport default Status;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport compose from 'recompose/compose';\nimport TableCell from '@material-ui/core/TableCell';\nimport { withStyles, createStyles } from '@material-ui/core/styles';\nimport { FieldTitle, translate } from 'ra-core';\n\n// remove the sort icons when not active\nconst styles = createStyles({\n icon: {\n display: 'none',\n },\n active: {\n '& $icon': {\n display: 'inline',\n },\n },\n});\n\nexport const DatagridHeaderCell = ({\n classes,\n className,\n field,\n resource,\n translate,\n ...rest\n}) => (\n <TableCell\n className={classnames(className, field.props.headerClassName)}\n numeric={field.props.textAlign === 'right'}\n padding=\"none\"\n variant=\"head\"\n {...rest}\n >\n <FieldTitle\n label={field.props.label}\n source={field.props.source}\n resource={resource}\n />\n </TableCell>\n);\n\nDatagridHeaderCell.propTypes = {\n classes: PropTypes.object,\n className: PropTypes.string,\n field: PropTypes.element,\n resource: PropTypes.string,\n translate: PropTypes.func.isRequired,\n};\n\nconst enhance = compose(\n translate,\n withStyles(styles)\n);\n\nexport default enhance(DatagridHeaderCell);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport TableBody from '@material-ui/core/TableBody';\nimport classnames from 'classnames';\n\nimport { DatagridRow } from 'react-admin';\n\nconst DatagridBody = ({\n basePath,\n children,\n classes,\n className,\n data,\n expand,\n ids,\n resource,\n row,\n rowStyle,\n selectedIds,\n styles,\n version,\n ...rest\n}) => (\n <TableBody className={classnames('datagrid-body', className)} {...rest}>\n {ids.map((id, rowIndex) =>\n React.cloneElement(\n row,\n {\n basePath,\n classes,\n className: classnames(classes.row, {\n [classes.rowEven]: rowIndex % 2 === 0,\n [classes.rowOdd]: rowIndex % 2 !== 0,\n }),\n expand,\n id,\n key: id,\n record: data[id],\n resource,\n style: rowStyle ? rowStyle(data[id], rowIndex) : null,\n },\n children\n )\n )}\n </TableBody>\n);\n\nDatagridBody.propTypes = {\n basePath: PropTypes.string,\n classes: PropTypes.object,\n className: PropTypes.string,\n children: PropTypes.node,\n data: PropTypes.object.isRequired,\n expand: PropTypes.node,\n ids: PropTypes.arrayOf(PropTypes.any).isRequired,\n resource: PropTypes.string,\n row: PropTypes.element.isRequired,\n rowStyle: PropTypes.func,\n styles: PropTypes.object,\n version: PropTypes.number,\n};\n\nDatagridBody.defaultProps = {\n data: {},\n ids: [],\n row: <DatagridRow />,\n};\n\nexport default DatagridBody;","import React, { Component, isValidElement, Children, cloneElement } from 'react';\nimport PropTypes from 'prop-types';\nimport { sanitizeListRestProps } from 'ra-core';\nimport { withStyles, createStyles } from '@material-ui/core/styles';\nimport Table from '@material-ui/core/Table';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableHead from '@material-ui/core/TableHead';\nimport TableRow from '@material-ui/core/TableRow';\n\nimport classnames from 'classnames';\n\nimport DatagridHeaderCell from './DatagridHeaderCell';\nimport DatagridBody from './DatagridBody';\n\nconst styles = theme => createStyles({\n table: {\n tableLayout: 'auto',\n },\n thead: {},\n tbody: {\n height: 'inherit',\n },\n headerRow: {},\n headerCell: {\n padding: '0 12px',\n '&:last-child': {\n padding: '0 12px',\n },\n },\n checkbox: {},\n row: {},\n clickableRow: {\n cursor: 'pointer',\n },\n rowEven: {},\n rowOdd: {},\n rowCell: {\n padding: '0 12px',\n '&:last-child': {\n padding: '0 12px',\n },\n },\n expandHeader: {\n padding: 0,\n width: 48,\n },\n expandIconCell: {\n width: 48,\n },\n expandIcon: {\n transform: 'rotate(-90deg)',\n transition: theme.transitions.create('transform', {\n duration: theme.transitions.duration.shortest,\n }),\n },\n expanded: {\n transform: 'rotate(0deg)',\n },\n});\n\nclass Datagrid extends Component {\n\n render() {\n const {\n basePath,\n body,\n children,\n classes,\n className,\n expand,\n ids,\n resource,\n rowStyle,\n selectedIds,\n total,\n version,\n choices,\n ...rest\n } = this.props;\n\n return (\n <Table\n className={classnames(classes.table, className)}\n {...sanitizeListRestProps(rest)}\n >\n <TableHead className={classes.thead}>\n <TableRow\n className={classnames(classes.row, classes.headerRow)}\n >\n {expand && (\n <TableCell className={classes.expandHeader} />\n )}\n\n {Children.map(children, (field, index) =>\n isValidElement(field) ? (\n <DatagridHeaderCell\n className={classes.headerCell}\n field={field}\n key={field.props.source || index}\n resource={resource}\n />\n ) : null\n )}\n </TableRow>\n </TableHead>\n {cloneElement(\n body,\n {\n basePath,\n className: classes.tbody,\n classes,\n expand,\n data: choices,\n ids,\n resource,\n rowStyle,\n selectedIds,\n version,\n },\n children\n )}\n\n </Table>\n );\n }\n}\n\nDatagrid.propTypes = {\n basePath: PropTypes.string,\n body: PropTypes.element.isRequired,\n children: PropTypes.node.isRequired,\n classes: PropTypes.object,\n className: PropTypes.string,\n data: PropTypes.object.isRequired,\n expand: PropTypes.node,\n hover: PropTypes.bool,\n ids: PropTypes.arrayOf(PropTypes.any).isRequired,\n onToggleItem: PropTypes.func,\n resource: PropTypes.string,\n rowStyle: PropTypes.func,\n selectedIds: PropTypes.arrayOf(PropTypes.any).isRequired,\n total: PropTypes.number,\n version: PropTypes.number,\n};\n\nDatagrid.defaultProps = {\n data: {},\n ids: [],\n selectedIds: [],\n body: <DatagridBody />,\n};\n\nexport default withStyles(styles)(Datagrid);","import React, { Component } from 'react';\nimport {\n TextField,\n} from 'react-admin';\nimport { Datagrid } from '../../components/CustomDatagrid';\n\nclass ListFileValues extends Component {\n\n constructor(props) {\n super(props);\n\n this.state = {\n choices: {},\n ids:[0],\n headers:[]\n };\n }\n\n componentDidMount(){\n const { values } = this.props.record;\n const headers = [];\n\n if(values.error) {\n headers.push({field: \"error\", type: \"text\"});\n }\n else {\n Object.keys(values).forEach((key) => {\n if(!isNaN(values[key])) {\n values[key] = parseFloat(values[key]).toFixed(3);\n headers.push({field: key, type: \"number\"});\n }\n else {\n headers.push({field: key, type: \"text\"});\n }\n });\n }\n\n this.setState({choices: {0: values}, headers});\n }\n\n render(){\n const { choices, ids, headers } = this.state;\n return (\n <div>\n <Datagrid choices={choices} ids={ids} >\n {headers.map(({field, type}) => <TextField key={field} source={field} sortable={false} />)}\n </Datagrid>\n <br />\n </div>\n )\n };\n}\n\nexport default ListFileValues;","import React, { Component } from 'react';\nimport {\n TextField,\n DateField, \n} from 'react-admin';\n\nimport withStyles from '@material-ui/core/styles/withStyles';\n\nimport { Datagrid } from '../../components/CustomDatagrid';\nimport ListFileValues from './ListFileValues';\n\nconst styles = {\n\n};\n\nclass ListFiles extends Component {\n\n constructor(props) {\n super(props);\n\n this.state = {\n choices: {},\n ids: []\n };\n }\n\n componentDidMount(){\n const { result } = this.props.record;\n const choices = {}, ids = [];\n if(result.length > 0) {\n result.forEach((value, index) => {\n choices[index] = value;\n ids.push(index);\n });\n\n this.setState({choices, ids});\n }\n }\n\n render(){\n const { choices, ids } = this.state;\n return (\n <Datagrid choices={choices} ids={ids} expand={<ListFileValues newrow=\"true\" />} >\n <DateField source='beginTime' showTime />\n <DateField source=\"endTime\" showTime />\n <TextField source=\"observationsNumber\" />\n </Datagrid>\n )\n }\n}\n\nexport default withStyles(styles)(ListFiles);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport CardContent from '@material-ui/core/CardContent';\nimport { withStyles, createStyles } from '@material-ui/core/styles';\n\nvar styles = theme => createStyles({\n root: {\n paddingTop: 0,\n paddingBottom: 0,\n '&:first-child': {\n paddingTop: 16,\n },\n '&:last-child': {\n paddingBottom: 16,\n [theme.breakpoints.only('xs')]: {\n paddingBottom: 70,\n },\n },\n },\n});\n\n/**\n * Overrides material-ui CardContent to allow inner content\n *\n * When using several CardContent inside the same Card, the top and bottom\n * padding double the spacing between each CardContent, leading to too much\n * wasted space. Use this component as a CardContent alternative.\n */\nconst CardContentInner = ({ classes, className, children }) => (\n <CardContent className={classnames(classes.root, className)}>\n {children}\n </CardContent>\n);\n\nCardContentInner.propTypes = {\n className: PropTypes.string,\n classes: PropTypes.object.isRequired,\n children: PropTypes.node,\n};\n\nexport default withStyles(styles)(CardContentInner);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport FormControl from '@material-ui/core/FormControl';\nimport { withStyles, createStyles } from '@material-ui/core/styles';\nimport { FieldTitle } from 'ra-core';\n\nconst styles = theme => createStyles({\n label: {\n position: 'relative',\n },\n value: {\n fontFamily: theme.typography.fontFamily,\n color: 'currentColor',\n padding: `${theme.spacing.unit}px 0 ${theme.spacing.unit / 2}px`,\n border: 0,\n boxSizing: 'content-box',\n verticalAlign: 'middle',\n background: 'none',\n margin: 0, // Reset for Safari\n display: 'block',\n width: '100%',\n },\n});\n\n/**\n * Use any component as read-only Input, labeled just like other Inputs.\n *\n * Useful to use a Field in the Edit or Create components.\n * The child component will receive the current record.\n *\n * This component name doesn't have a typo. We had to choose between\n * the American English \"Labeled\", and the British English \"Labelled\".\n * We flipped a coin.\n *\n * @example\n * <Labeled label=\"Comments\">\n * <FooComponent source=\"title\" />\n * </Labeled>\n */\nexport const Labeled = ({\n children,\n classes,\n className,\n fullWidth,\n id,\n input,\n isRequired,\n label,\n meta,\n resource,\n source,\n ...rest\n}) => {\n if (!label && !source) {\n throw new Error(\n `Cannot create label for component <${children &&\n children.type &&\n children.type\n .name}>: You must set either the label or source props. You can also disable automated label insertion by setting 'addLabel: false' in the component default props`\n );\n }\n const restProps = fullWidth ? { ...rest, fullWidth } : rest;\n\n return (\n <FormControl\n className={className}\n margin=\"normal\"\n fullWidth={fullWidth}\n error={meta && meta.touched && !!meta.error}\n >\n <InputLabel htmlFor={id} shrink className={classes.label}>\n <FieldTitle\n label={label}\n source={source}\n resource={resource}\n isRequired={isRequired}\n />\n </InputLabel>\n <div className={classes.value}>\n {children && typeof children.type !== 'string'\n ? React.cloneElement(children, {\n input,\n resource,\n ...restProps,\n })\n : children}\n </div>\n </FormControl>\n );\n};\n\nLabeled.propTypes = {\n basePath: PropTypes.string,\n children: PropTypes.element,\n classes: PropTypes.object,\n className: PropTypes.string,\n fullWidth: PropTypes.bool,\n id: PropTypes.string,\n input: PropTypes.object,\n isRequired: PropTypes.bool,\n label: PropTypes.string,\n meta: PropTypes.object,\n onChange: PropTypes.func,\n record: PropTypes.object,\n resource: PropTypes.string,\n source: PropTypes.string,\n labelStyle: PropTypes.object,\n};\n\nexport default withStyles(styles)(Labeled);\n","import React, { Children, isValidElement, cloneElement } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nimport CardContentInner from './layout/CardContentInner';\nimport Labeled from './input/Labeled';\n\nconst sanitizeRestProps = ({\n children,\n className,\n record,\n resource,\n basePath,\n version,\n initialValues,\n translate,\n ...rest\n}) => rest;\n\nfunction checkElement(field) {\n if(field.props && field.props.newrow){\n return false;\n }else{\n return isValidElement(field);\n }\n}\nfunction checkElementSecondRow(field) {\n if(field.props && field.props.newrow){\n return isValidElement(field);\n }else{\n return false;\n }\n}\n/**\n * Simple Layout for a Show view, showing fields in one column.\n *\n * Receives the current `record` from the parent `<Show>` component,\n * and passes it to its childen. Children should be Field-like components.\n *\n * @example\n * // in src/posts.js\n * import React from 'react';\n * import { Show, SimpleShowLayout, TextField } from 'react-admin';\n *\n * export const PostShow = (props) => (\n * <Show {...props}>\n * <SimpleShowLayout>\n * <TextField source=\"title\" />\n * </SimpleShowLayout>\n * </Show>\n * );\n *\n * // in src/App.js\n * import React from 'react';\n * import { Admin, Resource } from 'react-admin';\n *\n * import { PostShow } from './posts';\n *\n * const App = () => (\n * <Admin dataProvider={...}>\n * <Resource name=\"posts\" show={PostShow} />\n * </Admin>\n * );\n * export default App;\n */\nexport const SimpleShowLayoutColumn = ({\n basePath,\n className,\n children,\n record,\n resource,\n version,\n numberColumns,\n ...rest\n}) => (\n <CardContentInner\n className={className}\n key={version}\n {...sanitizeRestProps(rest)}\n >\n <div style={{ display: \"inline-grid\", gridTemplateColumns: \"auto \".repeat(numberColumns), gridGap: 40 }}>\n {Children.map(children, field =>\n field && checkElement(field) ? (\n \n <div \n key={field.props.source}\n className={classnames(\n `ra-field ra-field-${field.props.source}`,\n field.props.className\n )}\n >\n {field.props.addLabel ? (\n <Labeled\n record={record}\n resource={resource}\n basePath={basePath}\n label={field.props.label}\n source={field.props.source}\n disabled={false}\n >\n {field}\n </Labeled>\n ) : typeof field.type === 'string' ? (\n field\n ) : (\n cloneElement(field, {\n record,\n resource,\n basePath,\n })\n )}\n </div>\n \n ) : null\n )}\n </div>\n <div style={{ display: \"grid\", gridTemplateColumns: \"repeat(auto)\" }}>\n\n {Children.map(children, field =>\n field && checkElementSecondRow(field) ? (\n \n <div\n key={field.props.source}\n className={classnames(\n `ra-field ra-field-${field.props.source}`,\n field.props.className\n )}\n >\n {field.props.addLabel ? (\n <Labeled\n record={record}\n resource={resource}\n basePath={basePath}\n label={field.props.label}\n source={field.props.source}\n disabled={false}\n >\n {field}\n </Labeled>\n ) : typeof field.type === 'string' ? (\n field\n ) : (\n cloneElement(field, {\n record,\n resource,\n basePath,\n })\n )}\n </div>\n \n ) : null\n )}\n</div> \n </CardContentInner>\n);\n\nSimpleShowLayoutColumn.propTypes = {\n basePath: PropTypes.string,\n className: PropTypes.string,\n children: PropTypes.node,\n record: PropTypes.object,\n resource: PropTypes.string,\n version: PropTypes.number,\n};\n\nexport default SimpleShowLayoutColumn;\n","import React, { Fragment, Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport compose from 'recompose/compose';\nimport { withStyles, createStyles } from '@material-ui/core/styles';\nimport { fade } from '@material-ui/core/styles/colorManipulator';\nimport ActionDelete from '@material-ui/icons/Delete';\nimport classnames from 'classnames';\n// import inflection from 'inflection';\nimport { translate/*, crudDelete*/ } from 'ra-core';\n\nimport { Button, refreshView, showNotification } from 'react-admin';\nimport dataFetch from '../../../providers/dataFetch';\nimport { push } from 'react-router-redux';\nimport { Build } from '@material-ui/icons'\n\nconst sanitizeRestProps = ({\n basePath,\n classes,\n crudDelete,\n filterValues,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n label,\n pristine,\n resource,\n saving,\n selectedIds,\n submitOnEnter,\n redirect,\n refreshView,\n showNotification,\n push,\n ...rest\n}) => rest;\n\nconst styles = theme =>{\n return createStyles({\n deleteButton: {\n color: theme.palette.primary.main,\n '&:hover': {\n backgroundColor: fade(theme.palette.primary.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n });\n}\n\nclass CalculateContentButton extends Component {\n state = { disabled: false };\n\n handleClick = e => {\n // TODO: \n // e.stopPropagation();\n dataFetch('POST', `/parameters/calculate/${this.props.id}`)\n .then(_ => {\n this.props.showNotification('containers.parameters.success');\n this.setState({disabled: true});\n })\n .catch(err => {\n if(err && err.error && err.error.code === \"PROCESS_IN_LIST\"){\n this.props.showNotification('resources.parameters.fileError', 'warning');\n } else if(err && err.error && err.error.message){\n console.error(err.error.message);\n this.props.showNotification('errors.SOMETHING', 'warning');\n } else{\n this.props.showNotification('errors.SOMETHING', 'warning');\n }\n });\n };\n\n render() {\n const {\n classes = {},\n className,\n icon,\n label,\n c_title,\n c_content,\n onClick,\n record,\n resource,\n translate,\n ...rest\n } = this.props;\n return (\n <Fragment>\n <Button\n disabled={this.state.disabled}\n onClick={this.handleClick}\n label={label ? label : translate('resources.parameters.calculate')}\n className={classnames(\n 'ra-delete-button',\n classes.deleteButton,\n className\n )}\n color={'primary'}\n\n key=\"button\"\n {...sanitizeRestProps(rest)}\n >\n <Build />\n </Button>\n </Fragment>\n );\n }\n}\n\nCalculateContentButton.propTypes = {\n basePath: PropTypes.string,\n classes: PropTypes.object,\n className: PropTypes.string,\n label: PropTypes.string,\n record: PropTypes.object,\n redirect: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.bool,\n PropTypes.func,\n ]),\n translate: PropTypes.func,\n icon: PropTypes.element,\n};\n\nCalculateContentButton.defaultProps = {\n redirect: 'list',\n icon: <ActionDelete />,\n};\n\nexport default compose(\n connect(null, {\n refreshView,\n showNotification,\n push \n }),\n translate,\n withStyles(styles)\n)(CalculateContentButton);","import { storage } from 'react-admin-loopback';\nimport { API_URL } from '../Configuration';\n\n// TODO: Improve this one\nexport default (path => `${API_URL}${path}?access_token=${storage.load('lbtoken').id}`)","import React, { Component } from 'react';\nimport {\n Button,\n ListButton,\n} from 'react-admin';\n\nimport { Typography } from '@material-ui/core';\nimport { connect } from 'react-redux';\nimport compose from 'recompose/compose';\nimport { dataFetch } from '../../providers';\n\nimport { translate} from 'ra-core';\nimport { parse } from 'query-string';\nimport Status from './Status'\n\n\n//import ParamCardActions from './ParamCardActions';\nimport RunButton from './Show/RunButton';\nimport {\n GetApp as DownloadIcon\n} from '@material-ui/icons';\nimport fetchFile from '../../providers/fetchFile';\nimport {\n SimpleForm,\n TextInput,\n crudGetOne,\n DateField,\n EditButton\n} from 'react-admin';\n\nimport {\n Edit,\n} from '../../components';\n\n\nconst redirect = (basePath, id, data) => {\n return `/parameters/${id}/show`;\n}\n\nclass EditActionsClass extends Component {\n state={}\n\n render() {\n return <div style={{display:'flex', justifyContent:'space-between'}}>\n <Typography variant='title'>{this.props.campaign && this.props.campaign.name}</Typography>\n {this.props.data && <ListButton to={`/parameters`}/>}\n </div>\n }\n}\n\n\nconst EditActions = connect(null, { crudGetOne })(EditActionsClass);\n\nconst CustomSimpleForm = ({record, redirect, ...props}) => (\n <SimpleForm {...props} record={record} redirect={`/parameters/${record.id}/show`}>\n {props.children}\n </SimpleForm>\n);\n\nclass ParameterEditView extends Component {\n\n render() {\n const { campaign, translate, ...props } = this.props;\n return <Edit actions={<EditActions />} {...props} >\n <CustomSimpleForm redirect={redirect} >\n <TextInput multiline source='description' fullWidth={true} />\n <Status source=\"status\" />\n <DateField key='datetime' source=\"beginTime\" showTime />\n <DateField key='datetime' source=\"endTime\" showTime />\n </CustomSimpleForm>\n </Edit>\n }\n}\n\n\n\nclass ShowActionsClass extends Component {\n\n state = { title: '', csvDisabled: false }\n componentDidMount() {\n if (this.props.data && this.props.data.derivedsetId) {\n const filter = {\n where: { id: this.props.data.derivedsetId }\n };\n\n dataFetch('GET', `/derivedsets?filter=${JSON.stringify(filter)}`)\n .then(result => {\n this.setState({ title: result[0].name });\n })\n .catch(err => { });\n }\n }\n \n\n exportCSV = () => {\n const { id } = this.props;\n const fileName = `parameter_${id}.csv`;\n // window.open(fetchFile(`/datasets/csv/${id}`), '_blank');\n window.open(fetchFile(`/containers/parameters/download/${fileName}`), '_black');\n }\n // this.setState({csvDisabled: true});\n \n render() {\n const { id, translate,data } = this.props;\n return (\n <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n <Typography variant='title'>{this.state.title} {translate('resources.parameters.titleCurated')}</Typography>\n \n <span style={{ display: 'flex', justifyContent: 'space-between' }}>\n <Typography variant='caption'> </Typography>\n <RunButton id={id}/>\n <ListButton basePath='/parameters' /*label='resources.parameters.title'*//>\n <EditButton basePath='/parameters' record={data ? data : {id: id}} />\n <Button disabled={this.state.csvDisabled} label='pos.general.export' onClick={() => this.exportCSV()}><DownloadIcon/></Button>\n </span>\n </div>\n )\n }\n }\n const mapStateToProps = (state, props) => {\n const search = parse(props.location.search, { arrayFormat: 'bracket' })\n return {\n campaign: state.admin.resources.parameters.data[search.id]\n }\n }\n const enhanceCreateEdit = compose(\n translate,\n connect(mapStateToProps, {\n crudGetOne\n })\n )\nexport const ParametersEdit = enhanceCreateEdit(ParameterEditView);\n\n export default compose(\n connect(null, {\n\n }),\n translate,\n )(ShowActionsClass);","import React, { Component } from 'react';\nimport {\n SearchInput,\n Show,\n ShowButton,\n SimpleShowLayout,\n TextField,\n translate,\n ReferenceField,\n // DateField,\n ReferenceFieldController,\n ShowController, \n ShowView,\n Responsive\n} from 'react-admin';\n// import withStyles from '@material-ui/core/styles/withStyles';\nimport WavesIcon from './wavesIcon';\nimport {\n ResponsiveList,\n DateField\n} from '../../components';\n\nimport { dataFetch } from '../../providers';\nimport SelectEquipments from './SelectEquipments'\nimport FilterDerivedByEquipments from './FilterDependencies/FilterDerivedByEquipments'\nimport Status from './Status'\nimport ListFiles from './ListFiles';\n\nimport SimpleShowLayoutColumn from './SimpleShowLayoutColumn';\nimport ShowActionsClass from './ShowActionsClass';\n\n\nexport const ParametersIcon = WavesIcon;\n\n//if the parameter status is one of the status in the below array the parameters\n//are not shown\nconst statusDontShow = ['PROCESSING', 'ERROR', 'CREATED', 'PENDING'];\n\nclass TextFieldLimitedSize extends Component {\n render(){\n const {record} = this.props;\n const maxLength = 30;\n if(record.description.length > maxLength){\n return (record.description.substring(0,maxLength)+'...');\n }else{\n return (record.description);\n }\n }\n}\n\nexport const ParametersShow = (({ data, record, source, classes, ...props }) => {\n return (\n <Show actions ={null} title=\" \" {...props} >\n <ShowController {...props}>\n {controllerProps =>\n <ShowView actions={<ShowActionsClass {...props} />} {...props} {...controllerProps}>\n <Responsive\n small={\n <SimpleShowLayout>\n <Status source=\"status\" />\n {/* <DateField key='datetime' source=\"beginTime\" showTime />\n <DateField key='datetime' source=\"endTime\" showTime /> */}\n <DateField source=\"beginTime\" format='dd/MM/yyyy HH:mm:ss' />\n <DateField source=\"endTime\" format='dd/MM/yyyy HH:mm:ss' />\n <TextField source=\"description\" />\n {(controllerProps.record &&\n statusDontShow.filter((status)=> status === controllerProps.record.status).length === 0) ?\n [\n <TextField key='processTime' source=\"processTime\" />,\n <TextField key='totalObservations' source=\"totalObservations\" />,\n <ListFiles key='listFiles' newrow=\"true\" />\n ] : null\n }\n </SimpleShowLayout>}\n medium={\n <SimpleShowLayoutColumn numberColumns={5}>\n\n <Status source=\"status\" />\n {/* <DateField key='datetime' source=\"beginTime\" showTime />\n <DateField key='datetime' source=\"endTime\" showTime /> */}\n <DateField source=\"beginTime\" format='dd/MM/yyyy HH:mm:ss' />\n <DateField source=\"endTime\" format='dd/MM/yyyy HH:mm:ss' />\n <TextField newrow=\"true\" source=\"description\" />\n {(controllerProps.record &&\n statusDontShow.filter((status)=> status === controllerProps.record.status).length === 0) ?\n [\n <TextField key='processTime' source=\"processTime\"/>,\n <TextField key='totalObservations' source=\"totalObservations\" />,\n <ListFiles key='listFiles' newrow=\"true\" />\n ] : null\n }\n </SimpleShowLayoutColumn>}/> \n </ShowView>\n }\n </ShowController>\n </Show>\n )\n});\n\nconst ParametersFilter = translate(({ translate, choices, ...props }) => {\n return (\n <FilterDerivedByEquipments {...props} choices={choices}>\n <SelectEquipments label=\"resources.parameters.equipment\" source=\"derivedsetId\" choices={choices} alwaysOn />\n <SearchInput source=\"q\" alwaysOn label={translate('pos.search')} />\n </FilterDerivedByEquipments>\n )\n});\n\nexport class ParametersList extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n choices: []\n }\n }\n\n componentDidMount() {\n const filter = {\n include: {\n relation: \"derivedset\",\n scope: {\n include: {\n relation: \"equipment\"\n }\n }\n }\n };\n let equipments = {};\n dataFetch('GET', `/parameters?filter=${JSON.stringify(filter)}`)\n .then(data => {\n data.forEach(parameter => {\n if (!equipments[parameter.derivedset.equipment.id]) {\n equipments[parameter.derivedset.equipment.id] = {\n serialNumber: parameter.derivedset.equipment.serialNumber,\n derivedsets: [parameter.derivedsetId]\n };\n }\n else if (!equipments[parameter.derivedset.equipment.id].derivedsets.includes(parameter.derivedsetId)) {\n equipments[parameter.derivedset.equipment.id].derivedsets.push(parameter.derivedsetId);\n }\n });\n\n const choices = Object.keys(equipments).map(id => {\n return {\n id: id,\n // serialNumber: equipments[id].serialNumber,\n name: equipments[id].serialNumber,\n derivedsets: equipments[id].derivedsets,\n key: id\n };\n })\n this.setState({ choices: choices })\n })\n .catch(err => console.log(\"Error\", err));\n }\n\n render() {\n return (\n <ResponsiveList\n {...this.props}\n listFilters={<ParametersFilter choices={this.state.choices} />}\n recordActions={[<ShowButton />]}\n >\n <ReferenceFieldController label='resources.parameters.equipment' reference=\"derivedsets\" source=\"derivedsetId\" linkType={false} sortable={false} >\n {({ referenceRecord }) => (\n <ReferenceField basePath=\"/derivedsets\" resource=\"derivedsets\" reference=\"equipment\" source=\"equipmentId\" record={referenceRecord || {}} linkType=\"show\" allowEmpty>\n <TextField source=\"name\" sortable={false} />\n </ReferenceField>\n )}\n </ReferenceFieldController>\n\n <ReferenceField label=\"resources.parameters.derived\" source=\"derivedsetId\" reference=\"derivedsets\" linkType=\"show\" allowEmpty>\n <TextField source=\"name\" />\n </ReferenceField>\n <TextFieldLimitedSize source=\"description\" />\n <TextField key='totalobservations' source=\"totalObservations\" />\n {/* <DateField key='datetime' source=\"beginTime\" showTime />\n <DateField key='datetime' source=\"endTime\" showTime /> */}\n <DateField source=\"beginTime\" format='dd/MM/yyyy HH:mm:ss' />\n <DateField source=\"endTime\" format='dd/MM/yyyy HH:mm:ss' />\n <Status source=\"status\" />\n\n </ResponsiveList>\n )\n }\n}\n","import * as React from 'react';\nimport { SvgIcon } from '@material-ui/core'\nexport default (props, ref) => (\n <SvgIcon>\n <path d=\"M17 16.99c-1.35 0-2.2.42-2.95.8-.65.33-1.18.6-2.05.6-.9 0-1.4-.25-2.05-.6-.75-.38-1.57-.8-2.95-.8s-2.2.42-2.95.8c-.65.33-1.17.6-2.05.6v1.95c1.35 0 2.2-.42 2.95-.8.65-.33 1.17-.6 2.05-.6s1.4.25 2.05.6c.75.38 1.57.8 2.95.8s2.2-.42 2.95-.8c.65-.33 1.18-.6 2.05-.6.9 0 1.4.25 2.05.6.75.38 1.58.8 2.95.8v-1.95c-.9 0-1.4-.25-2.05-.6-.75-.38-1.6-.8-2.95-.8zm0-4.45c-1.35 0-2.2.43-2.95.8-.65.32-1.18.6-2.05.6-.9 0-1.4-.25-2.05-.6-.75-.38-1.57-.8-2.95-.8s-2.2.43-2.95.8c-.65.32-1.17.6-2.05.6v1.95c1.35 0 2.2-.43 2.95-.8.65-.35 1.15-.6 2.05-.6s1.4.25 2.05.6c.75.38 1.57.8 2.95.8s2.2-.43 2.95-.8c.65-.35 1.15-.6 2.05-.6s1.4.25 2.05.6c.75.38 1.58.8 2.95.8v-1.95c-.9 0-1.4-.25-2.05-.6-.75-.38-1.6-.8-2.95-.8zm2.95-8.08c-.75-.38-1.58-.8-2.95-.8s-2.2.42-2.95.8c-.65.32-1.18.6-2.05.6-.9 0-1.4-.25-2.05-.6-.75-.37-1.57-.8-2.95-.8s-2.2.42-2.95.8c-.65.33-1.17.6-2.05.6v1.93c1.35 0 2.2-.43 2.95-.8.65-.33 1.17-.6 2.05-.6s1.4.25 2.05.6c.75.38 1.57.8 2.95.8s2.2-.43 2.95-.8c.65-.32 1.18-.6 2.05-.6.9 0 1.4.25 2.05.6.75.38 1.58.8 2.95.8V5.04c-.9 0-1.4-.25-2.05-.58zM17 8.09c-1.35 0-2.2.43-2.95.8-.65.35-1.15.6-2.05.6s-1.4-.25-2.05-.6c-.75-.38-1.57-.8-2.95-.8s-2.2.43-2.95.8c-.65.35-1.15.6-2.05.6v1.95c1.35 0 2.2-.43 2.95-.8.65-.32 1.18-.6 2.05-.6s1.4.25 2.05.6c.75.38 1.57.8 2.95.8s2.2-.43 2.95-.8c.65-.32 1.18-.6 2.05-.6.9 0 1.4.25 2.05.6.75.38 1.58.8 2.95.8V9.49c-.9 0-1.4-.25-2.05-.6-.75-.38-1.6-.8-2.95-.8z\" />\n </SvgIcon>\n); ","import React, { Fragment } from 'react';\nimport compose from 'recompose/compose';\nimport ExpandMore from '@material-ui/icons/ExpandMore';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Divider from '@material-ui/core/Divider';\nimport Collapse from '@material-ui/core/Collapse';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport { translate } from 'react-admin';\n\nconst styles = {\n listItem: {\n paddingLeft: '1rem',\n },\n listItemText: {\n paddingLeft: 2,\n fontSize: '1rem',\n },\n sidebarIsOpen: {\n paddingLeft: 25,\n transition: 'padding-left 195ms cubic-bezier(0.4, 0, 0.6, 1) 0ms',\n },\n sidebarIsClosed: {\n paddingLeft: 0,\n transition: 'padding-left 195ms cubic-bezier(0.4, 0, 0.6, 1) 0ms',\n },\n};\n\nconst SubMenu = ({\n handleToggle,\n sidebarIsOpen,\n isOpen,\n name,\n icon,\n classes,\n children,\n translate,\n}) => (\n <Fragment>\n <ListItem\n dense\n button\n onClick={handleToggle}\n className={classes.listItem}\n >\n <ListItemIcon>{isOpen ? <ExpandMore /> : icon}</ListItemIcon>\n <ListItemText\n inset\n primary={isOpen ? translate(name) : ''}\n secondary={isOpen ? '' : translate(name)}\n className={classes.listItemText}\n />\n </ListItem>\n <Collapse in={isOpen} timeout=\"auto\" unmountOnExit>\n <List\n dense\n component=\"div\"\n disablePadding\n className={\n sidebarIsOpen\n ? classes.sidebarIsOpen\n : classes.sidebarIsClosed\n }\n >\n {children}\n </List>\n <Divider />\n </Collapse>\n </Fragment>\n);\n\nconst enhance = compose(\n withStyles(styles),\n translate\n);\n\nexport default enhance(SubMenu);","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport compose from 'recompose/compose';\nimport {\n translate,\n DashboardMenuItem,\n MenuItemLink,\n WithPermissions\n} from 'react-admin';\nimport { withRouter } from 'react-router-dom';\nimport { withStyles } from '@material-ui/core/styles';\nimport { \n Map as LiveIcon,\n Timelapse as HistoryIcon,\n Search as SearcObsIcon\n} from '@material-ui/icons'\n\nimport { CampaignIcon } from './resources/campaigns';\nimport { DatasetIcon } from './resources/datasets';\nimport { EquipmentIcon } from './resources/equipments';\nimport { InstitutionIcon } from './resources/institutions';\nimport { TeamIcon } from './resources/teams';\nimport { UserIcon } from './resources/users';\nimport { OverlayIcon } from './resources/overlays';\nimport { FilesIcon } from './resources/files';\nimport { DerivedDatasetIcon } from './resources/derivedDatasets';\nimport { EquipmentTypeIcon } from './resources/equipment-types';\nimport { EquipmentModelIcon } from './resources/equipment-models';\nimport { ObservedPropertiesIcon } from './resources/observedProperties';\nimport { TagIcon } from './resources/tags';\nimport { ParametersIcon } from './resources/parameters';\n\nimport SubMenu from './SubMenu';\n\n\nconst styles = theme => ({\n active: {\n color: theme.palette.text.primary,\n }\n});\n\nconst MenuEntry = ({classes, handleToggle, isOpen, item, location, onMenuClick, open, permissions, translate}) => {\n return item.submenu && permissions && item.submenuAccess.includes(permissions) ? <SubMenu\n handleToggle={() => handleToggle(`menu_${item.name}`)}\n isOpen={isOpen}\n sidebarIsOpen={open}\n name={`pos.submenu.${item.name}`}\n icon={item.icon}\n >\n {\n item.submenu.map( submenu => {\n return <MenuItemLink\n key={submenu.name}\n to={`/${item.subType === 'maps' ? 'maps/'+submenu.name: submenu.name}`}\n primaryText={translate(`${submenu.type}.${submenu.subType ? submenu.subType + '.' : ''}${submenu.name}.name`, {\n smart_count: 2,\n })}\n leftIcon={submenu.icon}\n onClick={onMenuClick}\n className={Array.isArray(submenu.routes) && submenu.routes.includes(location.pathname.split('/')[1]) ? classes.active: ''}\n />\n })\n }\n </SubMenu>\n : \n <MenuItemLink\n to={`/${item.subType === 'maps' ? 'maps/'+item.name: item.name}`}\n primaryText={translate(`${item.type}.${item.subType ? item.subType+'.' : ''}${item.name}.name`, {\n smart_count: 2,\n })}\n leftIcon={item.icon}\n onClick={onMenuClick}\n className={Array.isArray(item.routes) && item.routes.includes(location.pathname.split('/')[1]) ? classes.active: ''}\n />\n}\n\n\nclass Menu extends Component {\n\n constructor(props){\n super(props);\n this.items = [\n { name: 'live', icon: <LiveIcon />, type: 'containers', subType:'maps' }, \n { name: 'history', icon: <HistoryIcon />, type: 'containers', subType:'maps' },\n { name: 'institutions', icon: <InstitutionIcon />, type: 'resources', access: ['sysadmin'] },\n { name: 'users', icon: <UserIcon />, type: 'resources', access: ['sysadmin', 'admin'] },\n { name: 'campaigns', icon: <CampaignIcon />, type: 'resources', routes:['launches'] },\n { name: 'teams', icon: <TeamIcon />, type: 'resources', access: ['sysadmin', 'admin'] },\n { name: 'equipment', icon: <EquipmentIcon />, type: 'resources', access: ['sysadmin', 'admin', 'user'], submenuAccess: ['sysadmin'],\n submenu: [\n {name: 'equipment', icon: <EquipmentIcon />, type: 'resources'},\n {name: 'equipmentmodels', icon: <EquipmentModelIcon />, type: 'resources'},\n {name: 'equipmenttypes', icon: <EquipmentTypeIcon />, type: 'resources'},\n {name: 'observedProperties', icon: <ObservedPropertiesIcon/> , type: 'resources'}\n ]\n },\n { name: 'datasets', icon: <DatasetIcon />, type: 'resources', access: ['sysadmin', 'admin', 'user'], submenuAccess: ['sysadmin', 'admin', 'user'],\n submenu: [\n { name: 'datasets', icon: <DatasetIcon />, type: 'resources', routes: ['observations'] },\n { name: 'derivedsets', icon: <DerivedDatasetIcon />, type: 'resources'},\n { name: 'parameters', icon: <ParametersIcon/> , type: 'resources' },\n { name: 'search', icon: <SearcObsIcon/> , type: 'containers' },\n { name: 'tags', icon: <TagIcon />, type: 'resources', routes: ['observations'] },\n ] \n },\n { name: 'overlays', icon: <OverlayIcon />, type: 'resources' },\n { name: 'files', icon: <FilesIcon />, type: 'resources' },\n ];\n\n this.state = {\n menu_datasets: false,\n menu_equipment: false\n }\n\n }\n\n handleToggle = menu => {\n this.setState(state => ({ [menu]: !state[menu] }));\n };\n\n render(){\n return <div>\n <DashboardMenuItem onClick={this.props.onMenuClick} />\n {this.items.map(item => {\n if(!item.access || item.access.length === 0){\n return <MenuEntry key={item.name} item={item} handleToggle={this.handleToggle} isOpen={this.state[`menu_${item.name}`]} {...this.props} />\n }\n return <WithPermissions key={item.name} render={({permissions}) => {\n if(permissions && item.access.includes(permissions)){\n return <MenuEntry key={item.name} item={item} handleToggle={this.handleToggle} isOpen={this.state[`menu_${item.name}`]} permissions={permissions} {...this.props} />\n }else{\n return null;\n }\n }} />\n })}\n </div>\n }\n\n}\n\nconst enhance = compose(\n withStyles(styles),\n withRouter,\n translate,\n connect(\n state => ({\n theme: state.theme,\n locale: state.i18n.locale,\n open: state.admin.ui.sidebarOpen\n })\n ),\n);\n\nexport default enhance(Menu);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { Layout, Sidebar, defaultTheme } from 'react-admin';\nimport { withStyles } from '@material-ui/core/styles';\nimport AppBar from './AppBar';\nimport Menu from './Menu';\n\nconst styles = {\n appFrame: {\n flex: '1',\n }\n};\n\nexport const getTheme = (type) => {\n const defaultThemeCopy = Object.assign({}, defaultTheme)\n defaultThemeCopy.palette = {\n secondary: {\n light: '#5f5fc4',\n main: '#283593',\n dark: '#001064',\n contrastText: '#fff',\n }\n };\n defaultThemeCopy.palette.type = type\n return defaultThemeCopy;\n}\n\nconst CustomSidebar = props => <Sidebar size={200} {...props} />;\nconst CustomLayout = withStyles(styles)(({ classes, dispatch, ...props }) => (\n <Layout \n {...props} \n appBar={AppBar} \n sidebar={CustomSidebar} \n classes={classes}\n menu={Menu}\n />\n));\n\nexport default connect(\n state => ({\n theme: getTheme(state.theme)\n })\n)(CustomLayout);","import React from 'react';\r\nimport Card from '@material-ui/core/Card';\r\nimport CardContent from '@material-ui/core/CardContent';\r\nimport CardMedia from '@material-ui/core/CardMedia';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport { withStyles } from '@material-ui/core/styles';\r\n\r\nimport { translate } from 'react-admin';\r\n\r\nconst styles = {\r\n media: {\r\n height: '18em',\r\n },\r\n};\r\n\r\nconst mediaUrl = `https://www.ec-meloa.eu/img/banner/banner_3_imagem_1520698050.png`;\r\n\r\nconst Welcome = ({ classes, translate }) => (\r\n <Card>\r\n <CardMedia image={mediaUrl} className={classes.media} />\r\n <CardContent>\r\n <Typography variant=\"headline\" component=\"h2\">\r\n {translate('pos.dashboard.welcome.title')}\r\n </Typography>\r\n <Typography component=\"p\">\r\n {translate('pos.dashboard.welcome.subtitle')}\r\n </Typography>\r\n </CardContent>\r\n </Card>\r\n);\r\n\r\nexport default withStyles(styles)(translate(Welcome));","import React from 'react';\nimport Card from '@material-ui/core/Card';\nimport { withStyles } from '@material-ui/core/styles';\n\nconst styles = {\n card: {\n float: 'left',\n margin: '-20px 20px 0 15px',\n zIndex: 100,\n borderRadius: 3,\n },\n icon: {\n float: 'right',\n width: 54,\n height: 54,\n padding: 14,\n color: '#fff',\n },\n};\n\nconst CardIcon = ({ Icon, classes, bgColor }) => (\n <Card className={classes.card} style={{ backgroundColor: bgColor }}>\n <Icon className={classes.icon} />\n </Card>\n);\n\nexport default withStyles(styles)(CardIcon);\n","import React from 'react';\r\nimport Card from '@material-ui/core/Card';\r\nimport BoatIcon from '@material-ui/icons/DirectionsBoat';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport { Link, translate } from 'react-admin';\r\n\r\nimport CardIcon from './CardIcon';\r\n\r\nconst styles = {\r\n main: {\r\n flex: '1',\r\n marginRight: '1em',\r\n marginTop: 20,\r\n },\r\n card: {\r\n overflow: 'inherit',\r\n textAlign: 'right',\r\n padding: 16,\r\n minHeight: 52,\r\n },\r\n};\r\n\r\nconst CampaignCount = ({ value, translate, classes }) => (\r\n <div className={classes.main}>\r\n <Link to={'campaigns'}>\r\n <CardIcon Icon={BoatIcon} bgColor=\"#31708f\" />\r\n <Card className={classes.card}>\r\n <Typography className={classes.title} color=\"textSecondary\">\r\n {translate('pos.dashboard.campaign_count')}\r\n </Typography>\r\n <Typography variant=\"headline\" component=\"h2\">\r\n {value || 0}\r\n </Typography>\r\n </Card>\r\n </Link>\r\n </div>\r\n);\r\n\r\nexport default translate(withStyles(styles)(CampaignCount));\r\n","import React from 'react';\r\nimport Card from '@material-ui/core/Card';\r\nimport DateIcon from '@material-ui/icons/DateRange';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport { \r\n Link,\r\n translate \r\n} from 'react-admin';\r\nimport moment from 'moment';\r\n\r\nimport CardIcon from './CardIcon';\r\n\r\nconst styles = {\r\n main: {\r\n flex: '1',\r\n marginRight: '1em',\r\n marginTop: 20,\r\n },\r\n card: {\r\n overflow: 'inherit',\r\n textAlign: 'right',\r\n padding: 16,\r\n minHeight: 52,\r\n },\r\n};\r\n\r\nconst LastCampaign = ({ value={}, translate, classes }) => {\r\n let link = `campaigns/create`;\r\n if(value.id)\r\n link = `campaigns/${value.id}/show`\r\n return (\r\n <div className={classes.main}>\r\n <Link to={link}>\r\n <CardIcon Icon={DateIcon} bgColor=\"#ff9800\" />\r\n <Card className={classes.card}>\r\n <Typography className={classes.title} color=\"textSecondary\">\r\n {translate('pos.dashboard.last_campaign')}\r\n </Typography>\r\n <Typography variant=\"headline\" component=\"h2\">\r\n {value.name || ''}\r\n </Typography>\r\n <Typography variant=\"headline\" component=\"h2\">\r\n {value.beginDate ? moment(value.beginDate).utc().format('DD-MM-YYYY') : ''}\r\n </Typography>\r\n </Card>\r\n </Link>\r\n </div>\r\n )\r\n};\r\n\r\nexport default translate(withStyles(styles)(LastCampaign));\r\n","import React, { Component, Fragment } from 'react';\r\nimport { Responsive, Title, crudGetAll as crudGetAllAction } from 'react-admin';\r\nimport { connect } from 'react-redux'\r\n\r\nimport Welcome from './Welcome';\r\nimport CampaignCount from './CampaignCount';\r\nimport LastCampaign from './LastCampaign';\r\n\r\nconst styles = {\r\n flex: { display: 'flex', marginTop: '1em' },\r\n flexColumn: { display: 'flex', flexDirection: 'column' },\r\n leftCol: { flex: 1, marginRight: '1em' },\r\n rightCol: { flex: 1, marginLeft: '1em' },\r\n singleCol: { marginTop: '2em', marginBottom: '2em' },\r\n welcome: { width: '100%' }\r\n};\r\n\r\nclass Dashboard extends Component {\r\n state = {\r\n campaignCount: undefined,\r\n recentCampaign: undefined\r\n };\r\n\r\n componentDidMount() {\r\n this.props.crudGetAll('campaigns', { field: 'beginDate', order: 'DESC' }, { hide: false }, 15, this.setData)\r\n }\r\n\r\n setData = ({payload}) => {\r\n this.setState({campaignCount: payload.total, recentCampaign: payload.data[0]})\r\n }\r\n\r\n render() {\r\n const {\r\n campaignCount,\r\n recentCampaign\r\n } = this.state;\r\n\r\n return (\r\n <Fragment>\r\n <Title title=\"WAVY Operation\" />\r\n <Responsive\r\n xsmall={\r\n <div>\r\n <div style={styles.flexColumn}>\r\n <div style={{ marginBottom: '2em' }}>\r\n <Welcome />\r\n </div>\r\n <div style={styles.flex}>\r\n <LastCampaign value={recentCampaign} />\r\n </div>\r\n <div style={styles.flex}>\r\n <CampaignCount value={campaignCount} />\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n medium={\r\n <div>\r\n <div style={styles.welcome}>\r\n <Welcome />\r\n </div>\r\n <div style={styles.flex}>\r\n <div style={styles.leftCol}>\r\n <div style={styles.flex}>\r\n <LastCampaign value={recentCampaign} />\r\n <CampaignCount value={campaignCount} />\r\n </div>\r\n </div>\r\n <div style={styles.rightCol}>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n />\r\n </Fragment>\r\n );\r\n }\r\n}\r\n\r\nexport default connect(null, {\r\n crudGetAll: crudGetAllAction \r\n})(Dashboard);","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { propTypes, reduxForm, Field } from 'redux-form';\nimport { connect } from 'react-redux';\nimport compose from 'recompose/compose';\n\nimport {\n Avatar,\n Button,\n Card,\n CardActions,\n CircularProgress,\n TextField,\n withStyles\n} from '@material-ui/core';\nimport LockIcon from '@material-ui/icons/Lock';\nimport { Notification, translate, userLogin } from 'react-admin';\n\nconst styles = theme => ({\n main: {\n display: 'flex',\n flexDirection: 'column',\n minHeight: '100vh',\n alignItems: 'center',\n justifyContent: 'flex-start'\n },\n card: {\n minWidth: 300,\n marginTop: '6em',\n },\n avatar: {\n margin: '1em',\n display: 'flex',\n justifyContent: 'center',\n },\n icon: {\n backgroundColor: theme.palette.secondary.main,\n },\n hint: {\n marginTop: '1em',\n display: 'flex',\n justifyContent: 'center',\n color: theme.palette.grey[500],\n },\n form: {\n padding: '0 1em 1em 1em',\n },\n input: {\n marginTop: '1em',\n },\n actions: {\n padding: '0 1em 1em 1em',\n },\n});\n\nconst renderInput = ({\n meta: { touched, error } = {},\n input: { ...inputProps },\n ...props\n}) => (\n <TextField\n error={!!(touched && error)}\n helperText={touched && error}\n {...inputProps}\n {...props}\n fullWidth\n />\n);\n\nclass Login extends Component {\n login = auth =>\n this.props.userLogin(\n auth,\n this.props.location.state\n ? this.props.location.state.nextPathname\n : '/'\n );\n\n render() {\n const { classes, handleSubmit, isLoading, translate } = this.props;\n return (\n <div className={classes.main}>\n <Card className={classes.card}>\n <div className={classes.avatar}>\n <Avatar className={classes.icon}>\n <LockIcon />\n </Avatar>\n </div>\n\n <form onSubmit={handleSubmit(this.login)}>\n <div className={classes.form}>\n <div className={classes.input}>\n <Field\n name=\"username\"\n component={renderInput}\n label={translate('ra.auth.username')}\n disabled={isLoading}\n />\n </div>\n <div className={classes.input}>\n <Field\n name=\"password\"\n component={renderInput}\n label={translate('ra.auth.password')}\n type=\"password\"\n disabled={isLoading}\n />\n </div>\n </div>\n <CardActions className={classes.actions}>\n <Button\n variant=\"raised\"\n type=\"submit\"\n color=\"primary\"\n disabled={isLoading}\n className={classes.button}\n fullWidth\n >\n {isLoading && (\n <CircularProgress size={25} thickness={2} />\n )}\n {translate('ra.auth.sign_in')}\n </Button>\n </CardActions>\n </form>\n </Card>\n <Notification />\n </div>\n );\n }\n};\n\nLogin.propTypes = {\n ...propTypes,\n authProvider: PropTypes.func,\n classes: PropTypes.object,\n previousRoute: PropTypes.string,\n translate: PropTypes.func.isRequired,\n userLogin: PropTypes.func.isRequired,\n};\n\nconst mapStateToProps = state => ({ isLoading: state.admin.loading > 0 });\n\nconst enhance = compose(\n translate,\n reduxForm({\n form: 'signIn',\n validate: (values, props) => {\n const errors = {};\n const { translate } = props;\n if (!values.username) {\n errors.username = translate('ra.validation.required');\n }\n if (!values.password) {\n errors.password = translate('ra.validation.required');\n }\n return errors;\n },\n }),\n connect(\n mapStateToProps,\n { userLogin }\n ),\n withStyles(styles)\n);\n\nexport default enhance(Login);","import React, { Component, Fragment } from 'react';\nimport {\n Create,\n SimpleForm,\n DateField,\n SimpleShowLayout,\n Show,\n NumberInput,\n NumberField,\n required,\n crudGetOne,\n BooleanInput,\n BooleanField,\n SelectInput,\n FormDataConsumer,\n TextField,\n FileInput,\n FileField,\n translate,\n showNotification\n} from 'react-admin';\nimport { Typography } from '@material-ui/core';\nimport { connect } from 'react-redux';\nimport compose from 'recompose/compose';\nimport { parse } from 'query-string';\n\nimport { DateTimeInput } from '../../components';\nimport dataFetch from '../../providers/dataFetch';\n\n\nconst redirect = (basePath, id, data) => {\n return `/equipment/${data.equipmentId}/show/calibrations`;\n}\n\nconst CalibationsActions = ({ equipment, title, ...props }) => {\n return <Fragment>\n <Typography variant='title'>{title}</Typography>\n </Fragment>\n}\n\nconst choices = [\n { id: 'temp_1', name: \"resources.equipment.calibrations.sensor_1\" },\n { id: 'temp_2', name: \"resources.equipment.calibrations.sensor_2\" },\n];\nconst choices2 = [\n { id: 2, name: \"resources.equipment.calibrations.polynomialDegree1\" },\n { id: 4, name: \"resources.equipment.calibrations.polynomialDegree2\" },\n];\n\nconst submit = (history, equipment, showNotification) => ({ file, ...data }) => {\n const headers = new Headers({\n Accept: 'application/json',\n \"Content-Type\": \"application/json\"\n });\n\n data.equipmentId = equipment.id\n \n dataFetch('POST', '/calibrations', headers, JSON.stringify(data))\n .then((result) => {\n\n if (file) {\n const formData = new FormData();\n formData.append('file', file.rawFile);\n\n const _headers = new Headers({\n Accept: 'application/json',\n });\n\n return dataFetch('POST', `/calibrations/${result.id}/upload`, _headers, formData);\n }\n return\n })\n .then(_ => {\n history.goBack();\n })\n .catch(_ => {\n showNotification('errors.SOMETHING');\n });\n};\n\n\nclass FileSimpleForm extends Component {\n render() {\n const { history, equipment, showNotification } = this.props\n\n return <SimpleForm save={submit(history, equipment, showNotification)} redirect={redirect}>\n <DateTimeInput\n validate={required()}\n source='calibrationDate'\n label='resources.equipment.calibrations.calibrationDate'\n month={true}\n options={{\n format: 'dd/MM/yyyy HH:mm',\n clearable: true,\n selectTimezone: true\n }}\n />\n <BooleanInput label=\"resources.equipment.calibrations.diffValidationDate\" source=\"diffValidationDate\" />\n <FormDataConsumer>\n {({ formData, ...rest }) => formData && (formData.diffValidationDate) &&\n <DateTimeInput\n validate={required()}\n source='validDate'\n label='resources.equipment.calibrations.validDate'\n options={{\n format: 'dd/MM/yyyy HH:mm',\n clearable: true,\n selectTimezone: true\n }}\n />\n }\n </FormDataConsumer>\n <BooleanInput label=\"resources.equipment.calibrations.onEquipment\" source=\"onEquipment\" />\n <SelectInput validate={required()} label=\"resources.equipment.calibrations.sensorType\" source='sensorType' choices={choices} />\n <SelectInput validate={required()} label=\"resources.equipment.calibrations.numVariables\" source='numVariables' choices={choices2} />\n <FormDataConsumer>\n {({ formData, ...rest }) => formData && (formData.numVariables === 2) &&\n <><p>y(°C) = a0 + a1×k </p>\n <p> k = {this.props.translate(\"resources.equipment.calibrations.formula\")} [°C]</p></>\n }\n </FormDataConsumer>\n <FormDataConsumer>\n {({ formData, ...rest }) => formData && (formData.numVariables === 4) &&\n <><p>y(°C) = a0 + a1×k + a2×k² + a3×k³ </p>\n <p> k = {this.props.translate(\"resources.equipment.calibrations.formula\")} [°C]</p></>\n }\n </FormDataConsumer>\n <FormDataConsumer>\n {({ formData, ...rest }) => formData && (formData.numVariables === 2 || formData.numVariables === 4) &&\n <NumberInput validate={required()} label='a0' source='a0' {...rest} />\n }\n </FormDataConsumer>\n <FormDataConsumer>\n {({ formData, ...rest }) => formData && (formData.numVariables === 2 || formData.numVariables === 4) &&\n <NumberInput validate={required()} label='a1' source='a1' {...rest} />\n }\n </FormDataConsumer>\n <FormDataConsumer>\n {({ formData, ...rest }) => formData && (formData.numVariables === 4) &&\n <NumberInput validate={required()} label='a2' source='a2' {...rest} />\n }\n </FormDataConsumer>\n <FormDataConsumer>\n {({ formData, ...rest }) => formData && (formData.numVariables === 4) &&\n <NumberInput validate={required()} label='a3' source='a3' {...rest} />\n }\n </FormDataConsumer>\n <FileInput accept=\"application/pdf\" source='file'>\n <FileField source='file' title='fileName' />\n </FileInput>\n </SimpleForm>\n }\n};\n\nclass CalibrationsCreateView extends Component {\n componentDidMount() {\n if (!this.props.equipment) {\n const search = parse(this.props.location.search, { arrayFormat: 'bracket' })\n\n this.props.crudGetOne('equipment', search.equipmentId, '/equipment');\n }\n }\n\n render() {\n const { equipment, crudGetOne, history, translate, showNotification, ...props } = this.props;\n return <Create actions={<CalibationsActions title={equipment && equipment.name} />} {...props}>\n <FileSimpleForm history={history} translate={translate} equipment={equipment} showNotification={showNotification}/>\n </Create>\n }\n}\n\nclass CalibrationsShowView extends Component {\n\n render() {\n const { crudGetOne, ...props } = this.props;\n return (\n <Show filter={{ include: ['equipment'] }} {...props} >\n <SimpleShowLayout filter={{ include: ['equipment'] }}>\n <DateField label=\"resources.equipment.calibrations.calibrationDate\" source=\"calibrationDate\" format='dd/MM/yyyy HH:mm:ss' />{/*TODO resources.equipment.tabs.calibration */}\n <DateField label=\"resources.equipment.calibrations.validDate\" source=\"validDate\" format='dd/MM/yyyy HH:mm:ss' />{/*TODO resources.equipment.tabs.calibration */}\n <BooleanField label=\"resources.equipment.calibrations.onEquipment\" source=\"onEquipment\" />\n <TextField label=\"resources.equipment.calibrations.sensorType\" source='sensorType' />\n <NumberField label=\"resources.equipment.calibrations.numVariables\" source='numVariables' />\n <NumberField source='a0' />\n <NumberField source='a1' />\n <NumberField source='a2' />\n <NumberField source='a3' />\n </SimpleShowLayout>\n </Show >\n )\n }\n}\n\nconst mapStateToProps = (state, props) => {\n const search = parse(props.location.search, { arrayFormat: 'bracket' })\n return {\n equipment: state.admin.resources.equipment.data[search.equipmentId]\n }\n}\n\nconst enhance = compose(\n translate,\n connect(mapStateToProps, {\n crudGetOne,\n showNotification,\n })\n)\n\nexport const CalibrationsCreate = enhance(CalibrationsCreateView);\nexport const CalibrationsShow = enhance(CalibrationsShowView);","import React, {Component} from 'react';\nimport { connect } from 'react-redux';\nimport compose from 'recompose/compose'\nimport {\n Button,\n Pagination,\n TextField,\n crudCreate,\n translate,\n setListSelectedIds,\n showNotification,\n} from 'react-admin';\nimport SaveIcon from '@material-ui/icons/Save';\nimport {\n DialogContent,\n TextField as SearchField\n} from '@material-ui/core'\nimport { ResponsiveDatagrid } from '../../components';\nimport dataFetch from '../../providers/dataFetch';\n\nclass AddObservationDialogContent extends Component {\n\n state={\n sort:{\n field: 'id',\n order: 'ASC',\n },\n page: 1,\n perPage: 10,\n selectedDerived: [],\n version: 0,\n\n data: {},\n ids: [],\n search: \"\"\n }\n\n componentDidMount(){\n const {derivedDtsIds, derivedDts} = this.props;\n\n this.setState({ ids: derivedDtsIds, data: derivedDts });\n \n this.fetchAll()\n }\n\n componentWillUnmount(){\n this.props.setListSelectedIds('observations',[]);\n }\n\n componentDidUpdate(oldProps) {\n const {derivedDtsIds, derivedDts} = this.props;\n if(oldProps.derivedDtsIds !== derivedDtsIds){\n this.setState({ ids: derivedDtsIds });\n }\n \n if (oldProps.derivedDts !== derivedDts) {\n this.setState({ data: derivedDts });\n }\n }\n\n fetchAll(){\n const { search, sort } = this.state;\n const filter = {\n where: {\n q: search\n },\n order: [\n `${sort.field} ${sort.order}`\n ]\n };\n const { datasetId } = this.props;\n const fetch = () => {\n return new Promise( (resolve, reject) => {\n dataFetch('GET', `/derivedsets/dataset/${datasetId}/available?filter=${JSON.stringify(filter)}`)\n .then(data => {\n resolve(data)\n })\n .catch(err => reject(err));\n });\n };\n\n fetch().then( (result) => {\n let data = {};\n let ids = [];\n Object.keys(result).forEach(key => {\n const obj = result[key]\n \n data[obj.id] = obj;\n ids.push(obj.id)\n delete result[key];\n });\n result = null;\n \n this.setState({ data: data });\n this.setState({ ids: ids });\n })\n .catch(e => {\n this.props.showNotification('ra.notification.http_error', 'warning')\n }); \n }\n\n\n onChangeSearch = (e) => {\n this.setState({search: e.target.value}, this.fetchAll);\n }\n\n setSort = field => {\n const order =\n this.state.sort.field === field &&\n this.state.sort.order === 'ASC'\n ? 'DESC'\n : 'ASC';\n this.setState({ sort: { field, order } }, this.fetchAll );\n };\n\n setPage = page => this.setState({page})\n\n setPerPage = perPage => {this.setState({perPage})}\n\n toggleItem = (id) => {\n this.state.selectedDerived.includes(id) ? this.setState(state => {\n return {selectedDerived: [], version: state.version+1}\n }) \n : this.setState(state => {\n return {selectedDerived: [id], version: state.version+1}\n })\n }\n \n selectAll = () => {\n this.props.showNotification('pos.info.one_selectable')\n }\n\n addObsToDerivedDts = () => {\n\n const { selectedObsIds, all_data } = this.props;\n let derivedObs = [];\n selectedObsIds.forEach(id => {\n\n derivedObs.push({\n timestamp: all_data[id].timestamp,\n record: all_data[id].record,\n datasetId: all_data[id].datasetId,\n });\n\n })\n this.props.crudCreate(`derivedsets/${this.state.selectedDerived}/observations/rel`, derivedObs, '', false);\n\n this.props.close();\n }\n\n render(){\n const {listFilters, translate} = this.props;\n const {page, perPage, selectedDerived, version, data, ids} = this.state;\n\n const paginatedIds = ids.slice((page-1)*perPage,page*perPage)\n\n return <DialogContent>\n {listFilters && \n <SearchField type=\"text\" placeholder={translate('pos.search')} onChange={this.onChangeSearch}/>\n }\n <ResponsiveDatagrid data={data} ids={paginatedIds} currentSort={this.state.sort} setSort={this.setSort} onToggleItem={this.toggleItem} selectedIds={selectedDerived} version={version} onSelect={this.selectAll} hasBulkActions>\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n </ResponsiveDatagrid>\n <Pagination page={page} perPage={perPage} setPage={this.setPage} setPerPage={this.setPerPage} total={ids.length}/>\n {selectedDerived.length === 1 && <Button variant='raised' label='ra.action.add' onClick={this.addObsToDerivedDts}><SaveIcon/></Button>}\n </DialogContent>\n }\n}\n\nconst mapStateToProps = state => { \n return ({\n derivedDts: state.admin.resources.derivedsets.data,\n derivedDtsIds: state.admin.resources.derivedsets.list.ids\n })\n}\n\nexport default compose(\n translate,\n connect(mapStateToProps, {\n crudCreate,\n setListSelectedIds,\n showNotification\n}))(AddObservationDialogContent)","import React from 'react';\nimport { SimpleModal } from '../../components';\nimport DialogContent from './AddDerivedObservationDialogContent';\n\nconst AddDerivedObservationDialog =({ onClose, open, selectedObsIds, title, searchLabel, datasetId, all_data, ...props}) => {\n\n return <SimpleModal open={open} onClose={onClose} title={title}>\n <DialogContent resource='derivedsets' selectedObsIds={selectedObsIds} close={onClose} datasetId={datasetId} all_data={all_data} listFilters={true}/>\n </SimpleModal>\n }\n\n export default AddDerivedObservationDialog;","import React, { Component } from 'react';\nimport { Button, translate } from 'react-admin';\nimport DerivedObservationIcon from '@material-ui/icons/AlarmAdd';\n\nimport AddDerivedObservationDialog from './AddDerivedObservationDialog';\n\nclass AddDerivedObservationButton extends Component{\n \n state = {\n open: false\n }\n\n handleClose = () => this.setState({open: false})\n\n handleOpen = () => this.setState({open: true})\n\n render(){\n const {selectedIds, translate} = this.props\n const title = translate('pos.general.add_referencing', { reference: translate('pos.derived.to_dts', {smart_count:2} ) } )\n return <div>\n <Button\n label={title} \n onClick={this.handleOpen}\n ><DerivedObservationIcon/></Button>\n <AddDerivedObservationDialog open={this.state.open} searchLabel={translate('pos.derived.searchLabel')} datasetId={this.props.filterValues.datasetId} onClose={this.handleClose} title={title} selectedObsIds={selectedIds} all_data={this.props.all_data}/>\n </div>\n }\n\n}\n\nexport default translate(AddDerivedObservationButton);","import React, { Fragment, Component } from 'react';\r\nimport {\r\n GET_LIST,\r\n Button,\r\n // DateField,\r\n ListButton,\r\n TextField,\r\n Show,\r\n SimpleShowLayout,\r\n crudGetOne as crudGetOneAction,\r\n fetchEnd,\r\n fetchStart,\r\n setListSelectedIds as setListSelectedIdsAction,\r\n showNotification,\r\n required,\r\n SimpleForm,\r\n TextInput,\r\n translate,\r\n} from 'react-admin';\r\nimport { Typography, withStyles } from '@material-ui/core';\r\nimport {\r\n Map as MapIcon,\r\n ShowChart as ChartIcon,\r\n Add as CopyDataset,\r\n} from '@material-ui/icons'\r\nimport compose from 'recompose/compose';\r\nimport { connect } from 'react-redux';\r\nimport { Link } from 'react-router-dom';\r\n\r\n// import AddAnnotationActionButton from '../annotations/AddAnnotationActionButton';\r\nimport AddDerivedObsButton from '../derivedDatasets/AddDerivedObservationButton';\r\nimport {\r\n ReferenceManyManyField,\r\n Accordion,\r\n LinkButtonToResource as BtnToAnnotation,\r\n DefaultCardActions,\r\n ResponsiveList,\r\n SimpleModal,\r\n DateField,\r\n DownloadButton\r\n} from '../../components';\r\nimport { dataProvider } from '../../providers'\r\n// import { datasetExporter } from '../../utils/util';\r\n\r\n\r\nimport dataFetch from '../../providers/dataFetch';\r\nimport { push } from 'react-router-redux';\r\n// import fetchFile from '../../providers/fetchFile'\r\nimport { API_URL } from '../../Configuration';\r\n\r\nconst listStyles = {};\r\n\r\nconst ObservationsBulkActions = props => (\r\n <Fragment>\r\n {/* <AddAnnotationActionButton reference='annotations' {...props}/> */}\r\n <AddDerivedObsButton {...props} />\r\n </Fragment>\r\n);\r\n\r\nclass _ObservationsActions extends Component {\r\n state = {\r\n isOpen: false,\r\n saving: false,\r\n downloadEnabled: false\r\n }\r\n\r\n openDialog = () => this.setState({ isOpen: true })\r\n\r\n closeDialog = () => this.setState({ isOpen: false })\r\n\r\n copy_dataset = ({ name, description }) => {\r\n\r\n if (!this.state.saving) {\r\n const { id } = this.props.record;\r\n\r\n const headers = new Headers({\r\n Accept: 'application/json',\r\n \"Content-Type\": \"application/json\"\r\n });\r\n\r\n this.props.fetchStart();\r\n this.setState({ saving: true });\r\n dataFetch('POST', `/derivedsets/dataset/${id}/copy`, headers, JSON.stringify({ name: name, description: description }))\r\n .then(_ => {\r\n this.props.push(`/derivedsets`)\r\n this.props.showNotification(\"resources.datasets.copyNotification\");\r\n })\r\n .catch(_ => console.error(_))\r\n .finally(_ => this.props.fetchEnd());\r\n }\r\n else {\r\n this.props.showNotification('Saving');\r\n }\r\n }\r\n\r\n filename = () => {\r\n const { record } = this.props;\r\n let name = 'WOS_';\r\n\r\n name += record.equipment ? `${record.equipment.serialNumber}_` : '';\r\n name += record.launch && record.launch.campaign ? `${record.launch.campaign.name.replace(/ /g, '').toLocaleLowerCase()}_` : '';\r\n name += record.launch ? `${record.launch.name.replace(/ /g, '').toLocaleLowerCase()}_` : '';\r\n\r\n name += name === 'WOS_' ? `${record.name}_${record.id}` : `${record.id}`;\r\n\r\n return name;\r\n }\r\n\r\n componentDidUpdate(oldProps) {\r\n const { record } = this.props;\r\n if(this.state.downloadEnabled === false && record && record.name && (record.status === 'UPDATED' || record.status === 'OUTDATED')) {\r\n this.setState({downloadEnabled: true});\r\n }\r\n }\r\n\r\n render() {\r\n const { record, translate } = this.props;\r\n return <div style={{ display: 'flex', width: '100%', justifyContent: 'space-between' }}>\r\n <Typography variant='title'>{record && record.name}</Typography>\r\n <span style={{ display: 'flex' }}>\r\n <Button component={Link} label='pos.general.chart' to={record ? `/datasets/${record.id}/charts` : '/datasets'}><ChartIcon /></Button>\r\n <Button component={Link} label='pos.general.map' to={record ? `/datasets/${record.id}/map` : '/datasets'}><MapIcon /></Button>\r\n\r\n <Button onClick={this.openDialog} label={translate('resources.datasets.copyButton')}><CopyDataset /></Button>\r\n <SimpleModal open={this.state.isOpen} onClose={this.closeDialog} title={translate('resources.datasets.createDerivedset')} >\r\n <SimpleForm redirect=\"/derivedsets\" save={this.copy_dataset}>\r\n <TextInput source='name' validate={required()} />\r\n <TextInput source='description' validate={required()} />\r\n </SimpleForm>\r\n </SimpleModal>\r\n\r\n <ListButton label='Datasets' basePath={'datasets'} />\r\n <DownloadButton disabled={!this.state.downloadEnabled} filePath={`${API_URL}/containers/datasets/download/dataset_${record.id}.csv`} fileName={`${this.filename()}.csv`} label={translate('resources.observations.button.csv_export')} />\r\n <DownloadButton disabled={!this.state.downloadEnabled} filePath={`${API_URL}/datasets/${record.id}/metadata`} fileName={`${this.filename()}.json`} label={translate('resources.observations.button.metadata_export')} />\r\n </span>\r\n </div>\r\n }\r\n}\r\n\r\nconst ObservationsActions = compose(\r\n translate,\r\n connect(\r\n null,\r\n {\r\n push,\r\n showNotification,\r\n fetchEnd,\r\n fetchStart\r\n }\r\n )\r\n)(_ObservationsActions)\r\n\r\nconst extractIdFromURL = url => {\r\n return url.match(/\\d+(?=%7D)/g);\r\n}\r\n\r\nconst prop_order = [\r\n 'record',\r\n 'latitude',\r\n 'longitude',\r\n 'satellites',\r\n 'nb_gnss_sat',\r\n 'height',\r\n 'payload',\r\n 'speed',\r\n 'course',\r\n 'validity',\r\n 'hdop',\r\n 'vdop',\r\n 'pdop',\r\n 'sep',\r\n 'sampleimu',\r\n 'temperature',\r\n 'temp_imu',\r\n 'sampletemperature',\r\n 'samplepressure',\r\n 'temp_1',\r\n 'temp_2',\r\n 'temp_3',\r\n 'temp_4',\r\n 'atm',\r\n 'Hm0',\r\n 'Tm01',\r\n 'Tm02',\r\n 'Tp',\r\n 'Mdir',\r\n 'PkDir',\r\n 'DirSpr',\r\n 'PkDirSpr',\r\n 'WmaxH',\r\n 'bat',\r\n 'rssi'\r\n];\r\n\r\nconst remove_props = [\r\n \"gpstime\",\r\n \"timestamp\",\r\n \"derivedsetId\",\r\n \"datasetId\",\r\n \"id\",\r\n \"position\",\r\n \"serialNumber\",\r\n \"properties\",\r\n \"references\",\r\n \"year\",\r\n \"second\",\r\n \"day\",\r\n \"hour\",\r\n \"minute\",\r\n \"month\"\r\n];\r\n\r\nclass ObservationListController extends Component {\r\n state = {\r\n dataset: null,\r\n fetchObsProps: true,\r\n allData: {},\r\n default_props: [],\r\n // default_props_ori:[\"record\", \"latitude\", \"longitude\", \"height\", \"speed\", \"course\", \"satellites\", \"validity\", \"hdop\", \"vdop\", \"pdop\", \"sep\", \"ax\", \"ay\", \"az\", \"gx\", \"gy\", \"gz\", \"ma\", \"my\", \"mz\", \"temp_imu\", \"temp_1\", \"temp_2\", \"temp_3\", \"temp_4\", \"atm\", \"rssi\"],\r\n // remove_props: [\"gpstime\", \"timestamp\", \"derivedsetId\", \"datasetId\", \"id\", \"position\", \"serialNumber\", \"properties\", \"references\", \"year\", \"second\", \"day\", \"hour\", \"minute\", \"month\"]\r\n }\r\n\r\n sanitizeProps = ({ has_data, crudGetOne, setListSelectedIds, fetchEnd, fetchStart, ...props }) => ({ ...props });\r\n\r\n componentDidUpdate(oldProps) {\r\n if (oldProps.all_data !== this.props.all_data && this.props.has_data) {\r\n const { all_data, list } = this.props;\r\n let { allData } = this.state;\r\n let obs = []\r\n\r\n Object.keys(all_data).map(single => {\r\n\r\n if (!allData[single])\r\n allData[single] = all_data[single];\r\n\r\n if (list.includes(single))\r\n obs = [...new Set([...Object.keys(all_data[single]), ...obs])]\r\n return {}\r\n });\r\n\r\n obs = obs.filter((prop) => {\r\n return remove_props.includes(prop) ? false : true;\r\n });\r\n\r\n let default_props = prop_order.filter((p) => {\r\n const index = obs.indexOf(p);\r\n if (index !== -1) {\r\n obs.splice(index, 1);\r\n return true;\r\n }\r\n return false;\r\n });\r\n\r\n\r\n this.setState({ default_props: [...default_props, ...obs], allData: allData })\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n let { dataset } = this.state;\r\n\r\n if (!dataset) {\r\n const datasetId = parseInt(extractIdFromURL(this.props.location.search)[0]);\r\n\r\n dataset = {\r\n id: datasetId\r\n };\r\n\r\n this.setState({ dataset: dataset })\r\n\r\n const filter = {\r\n filter: { id: datasetId },\r\n include: [\r\n {\r\n relation: 'equipment',\r\n },\r\n {\r\n relation: \"launch\",\r\n scope: {\r\n include: {relation: \"campaign\"}\r\n }\r\n }\r\n ],\r\n sort: {\r\n field: 'id',\r\n order: 'ASC'\r\n },\r\n pagination: {\r\n page: 0,\r\n perPage: -1\r\n }\r\n }\r\n\r\n fetchStart();\r\n dataProvider(GET_LIST, 'datasets', filter)\r\n .then(resp => resp.data[0])\r\n .then(data => this.setState({ dataset: data }))\r\n .finally(_ => fetchEnd());\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this.props.setListSelectedIds('observations', []);\r\n }\r\n\r\n render() {\r\n const filter = { datasetId: this.state.dataset && this.state.dataset.id/*extractIdFromURL(this.props.location.search)[0]*/, _counts: \"annotations\" };\r\n const { default_props, allData } = this.state;\r\n\r\n return <ResponsiveList\r\n {...this.sanitizeProps(this.props)}\r\n bulkActionButtons={<ObservationsBulkActions all_data={allData} />}\r\n listActions={<ObservationsActions record={this.state.dataset} history={this.props.history} filter={filter} />}\r\n // exporter={datasetExporter(`dataset_${this.state.dataset && this.state.dataset.id}`)}\r\n recordActions={[<BtnToAnnotation source=\"annotation\" sortable={false} field='annotationsCount' reference='annotations' hasIcon />]}\r\n filter={filter}\r\n sort={{ field: 'timestamp', order: 'ASC' }}\r\n >\r\n <DateField key='datetime' source='timestamp' format='dd/MM/yyyy HH:mm:ss' noFields />\r\n {\r\n this.props.has_data &&\r\n default_props.length > 0 && default_props.map((property, index) => {\r\n return <TextField key={index} source={property} sortable={false} />\r\n })\r\n }\r\n </ResponsiveList>\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n const { data, list } = state.admin.resources.observations;\r\n\r\n // TODO: improve this, beacuse is a resource and maybe will disappear NOT THIS BUT ON UPDATE PROPS\r\n if (list.ids.length > 0) {\r\n return { all_data: data, has_data: true, list: list.ids }\r\n }\r\n return {}\r\n}\r\n\r\nconst enhance = compose(\r\n withStyles(listStyles),\r\n connect(\r\n mapStateToProps,\r\n {\r\n crudGetOne: crudGetOneAction,\r\n fetchEnd,\r\n fetchStart,\r\n setListSelectedIds: setListSelectedIdsAction,\r\n }\r\n )\r\n)\r\n\r\nexport const ObservationShow = props => {\r\n return <Show actions={<DefaultCardActions history={props.history} removeListButton={true} />} {...props} >\r\n <SimpleShowLayout >\r\n <ReferenceManyManyField source='observations' reference='annotations' addLabel={false}>\r\n <Accordion />\r\n </ReferenceManyManyField>\r\n </SimpleShowLayout>\r\n </Show>\r\n}\r\n\r\nexport const ObservationList = enhance(ObservationListController)","import React, { Children, Fragment, isValidElement } from 'react';\nimport {\n DeleteButton,\n SaveButton\n} from 'react-admin';\nimport compose from 'recompose/compose';\nimport MuiToolbar from '@material-ui/core/Toolbar';\nimport withWidth from '@material-ui/core/withWidth';\nimport { withStyles, createStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\n\nconst styles = theme => createStyles({\n toolbar: {\n backgroundColor:\n theme.palette.type === 'light'\n ? theme.palette.grey[100]\n : theme.palette.grey[900],\n },\n desktopToolbar: {\n marginTop: theme.spacing.unit * 2,\n },\n mobileToolbar: {\n position: 'fixed',\n bottom: 0,\n left: 0,\n right: 0,\n padding: '16px',\n width: '100%',\n boxSizing: 'border-box',\n flexShrink: 0,\n zIndex: 2,\n },\n defaultToolbar: {\n flex: 1,\n display: 'flex',\n justifyContent: 'space-between',\n },\n spacer: {\n [theme.breakpoints.down('xs')]: {\n height: '5em',\n },\n },\n});\n\nconst valueOrDefault = (value, defaultValue) =>\n typeof value === 'undefined' ? defaultValue : value;\n\nconst Toolbar = ({\n basePath,\n children,\n classes,\n className,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n pristine,\n record,\n redirect,\n resource,\n saving,\n submitOnEnter,\n undoable,\n width,\n ...rest\n}) => {\n return <Fragment>\n <MuiToolbar\n className={classnames(\n classes.toolbar,\n {\n [classes.mobileToolbar]: width === 'xs',\n [classes.desktopToolbar]: width !== 'xs',\n },\n className\n )}\n role=\"toolbar\"\n {...rest}\n >\n {Children.count(children) === 0 ? (\n <div className={classes.defaultToolbar}>\n <SaveButton\n handleSubmitWithRedirect={handleSubmitWithRedirect}\n invalid={invalid}\n redirect={redirect}\n saving={saving}\n submitOnEnter={submitOnEnter}\n />\n {record && typeof record.id !== 'undefined' && (\n <DeleteButton\n basePath={basePath}\n record={record}\n resource={resource}\n undoable={undoable}\n redirect={redirect}\n />\n )}\n </div>\n ) : (\n Children.map(children, button =>\n button && isValidElement(button)\n ? React.cloneElement(button, {\n basePath,\n handleSubmit: valueOrDefault(\n button.props.handleSubmit,\n handleSubmit\n ),\n handleSubmitWithRedirect: valueOrDefault(\n button.props.handleSubmitWithRedirect,\n handleSubmitWithRedirect\n ),\n invalid,\n pristine,\n record,\n resource,\n saving,\n submitOnEnter: valueOrDefault(\n button.props.submitOnEnter,\n submitOnEnter\n ),\n undoable: valueOrDefault(\n button.props.undoable,\n undoable\n ),\n })\n : null\n )\n )}\n </MuiToolbar>\n <div className={classes.spacer} />\n </Fragment>\n};\n\nToolbar.defaultProps = {\n submitOnEnter: true,\n};\n\nconst enhance = compose(\n withWidth(),\n withStyles(styles)\n);\nexport default enhance(Toolbar);","import React, { Component, Fragment } from 'react';\nimport { connect } from 'react-redux';\nimport {\n BooleanField,\n Create,\n // DateField,\n ListButton,\n Pagination,\n Show,\n SimpleForm,\n SimpleShowLayout,\n Tab,\n TabbedShowLayout,\n TextField,\n TextInput,\n BooleanInput,\n crudGetOne,\n required,\n translate,\n fetchStart,\n fetchEnd,\n EditButton,\n showNotification,\n} from 'react-admin';\n\nimport moment from 'moment';\nimport TabbedShowLayoutTabs from '../../utils/CustomTabbedShowLayoutTabs';\nimport {\n ReferenceManyManyField,\n Edit,\n Relation,\n RelationShow,\n ResponsiveDatagrid,\n LocalSearch,\n DateTimeInput,\n DateField,\n BuildButton,\n} from '../../components';\nimport compose from 'recompose/compose';\nimport {\n Typography,\n withStyles\n} from '@material-ui/core';\nimport { parse } from 'query-string';\n\nimport LaunchesToolbar from './LaunchesToolbar';\nimport { Delete } from '@material-ui/icons';\nimport { dataFetch } from '../../providers';\nimport { refreshView } from 'ra-core';\n// import DateFieldCustom from './CustomDateField'\nconst styles = {\n tabs: {\n width: 0\n }\n};\n\nconst redirect = (basePath, id, data) => {\n return `/campaigns/${data.campaignId}/show/launches`;\n}\n\nconst validateCreate = (values, { translate }) => {\n const errors = {};\n const beginTimestamp = moment(values.beginTimestamp);\n\n if (!beginTimestamp.isValid()) {\n errors.beginTimestamp = [translate('ra.validation.required')];\n }\n\n return errors;\n};\n\nconst validateEdit = (values, { translate }) => {\n const errors = {};\n const beginTimestamp = moment(values.beginTimestamp);\n // const endTimestamp = moment(values.endTimestamp);\n\n if (!beginTimestamp.isValid()) {\n errors.beginTimestamp = [translate('ra.validation.required')];\n }\n //else if (endTimestamp.isValid && !endTimestamp.isAfter(beginTimestamp)) {\n // errors.endTimestamp = [translate('error.END_TIMESTAMP_EARLIER')];\n // }\n\n return errors;\n};\n\nconst LaunchActions = ({ campaign, title, ...props }) => {\n return <Fragment>\n <Typography variant='title'>{title}</Typography>\n </Fragment>\n}\n\nclass LaunchesCreateView extends Component {\n\n componentDidMount() {\n if (!this.props.campaign) {\n const search = parse(this.props.location.search, { arrayFormat: 'bracket' })\n\n this.props.crudGetOne('campaigns', search.campaignId, '/campaigns');\n }\n }\n\n render() {\n const { campaign, crudGetOne, translate, ...props } = this.props;\n\n return <Create actions={<LaunchActions title={campaign && campaign.name} />} {...props}>\n <SimpleForm redirect={redirect} validate={validateCreate}>\n <TextInput source='name' validate={required()} />\n <TextInput source='description' />\n <DateTimeInput\n validate={required()}\n source='beginTimestamp'\n label={translate('resources.launches.fields.beginTimestamp')}\n options={{\n format: 'dd/MM/yyyy HH:mm',\n clearable: true,\n selectTimezone: true\n }}\n />\n <DateTimeInput\n source='endTimestamp'\n label={translate('resources.launches.fields.endTimestamp')}\n options={{\n format: 'dd/MM/yyyy HH:mm',\n clearable: true,\n selectTimezone: true\n }}\n />\n <BooleanInput source=\"public\" {...props}/>\n {/* <BooleanInput source=\"autoPublish\" {...props}/> */}\n </SimpleForm>\n </Create>\n }\n}\n\nclass EditActionsClass extends Component {\n state = {}\n\n static getDerivedStateFromProps(props) {\n\n if (props.data && !props.campaign) {\n props.crudGetOne('campaigns', props.data.campaignId, '/launches')\n }\n\n return null\n }\n\n render() {\n return <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n <Typography variant='title'>{this.props.campaign && this.props.campaign.name}</Typography>\n {this.props.data && <ListButton to={`/campaigns/${this.props.data.campaignId}/show/launches`} />}\n </div>\n }\n}\n\nconst mapStateToEditActionProps = (state, props) => {\n return { campaign: props.data ? state.admin.resources.campaigns.data[props.data.campaignId] : null }\n}\n\nconst EditActions = connect(mapStateToEditActionProps, { crudGetOne })(EditActionsClass);\n\nconst CustomSimpleForm = ({ record, redirect, ...props }) => (\n <SimpleForm {...props} record={record} redirect={`/campaigns/${record.campaignId}/show/launches`}>\n {props.children}\n </SimpleForm>\n)\n\nclass LaunchesEditView extends Component {\n\n render() {\n const { campaign, translate, ...props } = this.props;\n return <Edit actions={<EditActions />} {...props} >\n <CustomSimpleForm redirect={redirect} validate={validateEdit} toolbar={<LaunchesToolbar />}>\n <TextInput source='name' validate={required()} />\n <TextInput source='description' />\n <DateTimeInput\n validate={required()}\n source='beginTimestamp'\n label={translate('resources.launches.fields.beginTimestamp')}\n options={{\n utc: true,\n format: 'dd/MM/yyyy HH:mm',\n clearable: true,\n selectTimezone: true\n ,\n }}\n />\n <DateTimeInput\n source='endTimestamp'\n label={translate('resources.launches.fields.endTimestamp')}\n options={{\n format: 'dd/MM/yyyy HH:mm',\n clearable: true,\n selectTimezone: true\n }}\n />\n <BooleanInput source=\"public\" {...props}/>\n {/* <BooleanInput source=\"autoPublish\" {...props}/> */}\n </CustomSimpleForm>\n </Edit>\n }\n}\n\nclass ShowActionsClass extends Component {\n\n state = {}\n\n static getDerivedStateFromProps(props) {\n\n if (props.data && !props.campaign) {\n props.crudGetOne('campaigns', props.data.campaignId, '/launches')\n }\n\n return null\n }\n\n render() {\n const { campaign, data, basePath } = this.props;\n return <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n <div>\n {data && <Typography variant='title'>{data.name}</Typography>}\n {campaign && <Typography variant='caption'>{campaign.name}</Typography>}\n </div>\n <div style={{ right: 0 }}>\n {data && <EditButton record={{ id: data.id }} basePath={basePath} />}\n {data && <BuildButton record={{ id: data.id }} recordId=\"id\" />}\n {data && <ListButton to={`/campaigns/${data.campaignId}/show/launches`} />}\n </div>\n </div>\n }\n}\n\nconst mapShowPropsToState = (state, props) => {\n return {\n campaign: props.data ?\n state.admin.resources.campaigns.data[props.data.campaignId] ? state.admin.resources.campaigns.data[props.data.campaignId] : undefined\n : undefined\n }\n}\n\nconst ShowActions = connect(mapShowPropsToState, { crudGetOne })(ShowActionsClass);\n\nconst dialogContent = (props) => {\n return <ReferenceManyManyField recordId={\"campaignId\"} reference=\"equipment\" limit={0} prefix=\"campaigns\" basePath=\"launches\" addLabel={false} params={{\n include: {\n relation: \"launches\",\n scope: {\n where: {\n endTimestamp: null\n }\n }\n }\n }}>\n <Relation basePath='launches'\n recordId={props.id}\n referencePath=\"/equipment\"\n pagination={<Pagination />}\n reference={`/launches/${props.id}/equipment`}\n changeIdOnRequest={'id'}\n listFilters={<LocalSearch filter=\"serialNumber\" label={props.translate(\"resources.equipment.fields.serialNumber\")} />}\n manyField={true}\n >\n <ResponsiveDatagrid>\n <TextField source='name' />\n <TextField source='number' />\n <TextField source='serialNumber' />\n <BooleanField source='import' />\n </ResponsiveDatagrid>\n </Relation>\n </ReferenceManyManyField>\n}\n\nclass LaunchesShowView extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n version: 0,\n selectedIds: [],\n };\n\n this.selectOne = this.selectOne.bind(this);\n this.selectAll = this.selectAll.bind(this);\n this.deleteMultiple = this.deleteMultiple.bind(this);\n }\n\n deleteMultiple() {//ver para apagar notas\n const { selectedIds } = this.state;\n\n if (selectedIds.length > 0) {\n const launchId = this.props.id;\n\n const { showNotification, refreshView } = this.props;\n const requests = [];\n selectedIds.forEach(id => {\n requests.push(dataFetch('DELETE', `/launches/${launchId}/equipment/rel/${id}`));\n });\n\n Promise.all(requests)\n .then(values => {\n showNotification('resources.equipment.removed_eq');\n this.setState({ selectedIds: [], version: this.state.version + 1 })\n })\n .catch(({ error }) => {\n if (error && error.name === 'PUBLISHED')\n showNotification('resources.equipment.dataset_published', 'warning');\n else\n showNotification('errors.SOMETHING', 'warning');\n })\n .finally(_ => {\n refreshView();\n })\n }\n }\n\n selectOne(e) {\n let { selectedIds } = this.state;\n const index = selectedIds.indexOf(e);\n if (index === -1)\n selectedIds.push(e)\n else\n selectedIds.splice(index, 1);\n\n this.setState({ selectedIds: selectedIds, version: this.state.version + 1 })\n }\n\n selectAll(e) {\n this.setState((state) => ({ selectedIds: [...e], version: state.version + 1 }))\n }\n\n\n render() {\n const { classes, translate, fetchStart, fetchEnd, showNotification, crudDeleteMany, refreshView, ...props } = this.props;\n const { version, selectedIds } = this.state;\n return (\n <Show {...props} actions={<ShowActions />}>\n <TabbedShowLayout tabs={<TabbedShowLayoutTabs classes={{ scrollable: classes.tabs }} scrollable scrollButtons={'on'} />}>\n <Tab label='resources.launches.tabs.details'>\n <SimpleShowLayout>\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n <DateField source=\"beginTimestamp\" format='dd/MM/yyyy HH:mm' localDate />\n <DateField source=\"endTimestamp\" format='dd/MM/yyyy HH:mm' localDate />\n <BooleanField source=\"public\" />\n {/* <BooleanField source=\"autoPublish\" /> */}\n </SimpleShowLayout>\n </Tab>\n <Tab label='resources.launches.tabs.equipment'>\n <ReferenceManyManyField addLabel={false} reference='equipment' pagination={<Pagination />}>\n <RelationShow reference={'equipment'} resource={'launch'}\n dialogContent={dialogContent({ translate, ...props })}\n secondPress={selectedIds.length > 0 ? this.deleteMultiple : undefined}\n Icon={Delete}\n secondLabel={translate('pos.general.remove_button')}\n >\n <ResponsiveDatagrid version={version} hasBulkActions={true} selectedIds={selectedIds} onToggleItem={this.selectOne} onSelect={this.selectAll} /*{...props}*/>\n <TextField source='name' />\n <TextField source='number' />\n <TextField source='serialNumber' />\n <BooleanField source='import' />\n </ResponsiveDatagrid>\n </RelationShow>\n </ReferenceManyManyField>\n </Tab>\n </TabbedShowLayout>\n </Show>\n )\n }\n}\n\nconst enhanceLaunchesShow = compose(\n translate,\n withStyles(styles),\n connect(null, {\n showNotification,\n fetchEnd,\n fetchStart,\n refreshView,\n })\n)\n\nconst mapStateToProps = (state, props) => {\n const search = parse(props.location.search, { arrayFormat: 'bracket' })\n return {\n campaign: state.admin.resources.campaigns.data[search.campaignId]\n }\n}\n\nconst enhanceCreateEdit = compose(\n translate,\n connect(mapStateToProps, {\n crudGetOne\n })\n)\n\nexport const LaunchesShow = enhanceLaunchesShow(LaunchesShowView);\nexport const LaunchesCreate = enhanceCreateEdit(LaunchesCreateView);\nexport const LaunchesEdit = enhanceCreateEdit(LaunchesEditView);\n// export const LaunchesShowView = enhanceCampaignShow();","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport {\n ListButton,\n SimpleForm,\n TextInput,\n crudGetOne,\n required,\n translate,\n Show,\n SimpleShowLayout,\n TextField,\n DateField,\n TabbedShowLayout,\n Tab,\n Datagrid\n} from 'react-admin';\n\nimport {\n Edit,\n DateTimeInput,\n ReferenceManyManyField,\n} from '../../components';\nimport compose from 'recompose/compose';\nimport {\n Typography,\n withStyles\n} from '@material-ui/core';\nimport { parse } from 'query-string';\n\nconst listStyles = function styles(theme) {\n const height = 32;\n let backgroundColor = theme.palette.type === 'light' ? theme.palette.grey[300] : theme.palette.grey[700];\n // var deleteIconColor = (0, _colorManipulator.fade)(theme.palette.text.primary, 0.26);\n return {\n tag_root: {\n fontFamily: theme.typography.fontFamily,\n fontSize: theme.typography.pxToRem(13),\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: height,\n color: theme.palette.getContrastText(backgroundColor),\n backgroundColor: backgroundColor,\n borderRadius: height / 2,\n whiteSpace: 'nowrap',\n transition: theme.transitions.create(['background-color', 'box-shadow']),\n // label will inherit this from root, then `clickable` class overrides this for both\n cursor: 'default',\n // We disable the focus ring for mouse, touch and keyboard users.\n outline: 'none',\n textDecoration: 'none',\n border: 'none',\n // Remove `button` border\n padding: 0, // Remove `button` padding,\n\n },\n tag_label: {\n display: 'flex',\n alignItems: 'center',\n paddingLeft: 12,\n paddingRight: 12,\n userSelect: 'none',\n whiteSpace: 'nowrap',\n cursor: 'inherit'\n }\n }\n}\nclass _NoteTagField extends Component {\n render(){\n let key = 0;\n const {classes, record} = this.props;\n\n return (\n <span className={classes.tag_root} key={key++}>\n <span className={classes.tag_label} > {record.name}</span>\n </ span>\n )\n }\n}\n\nconst NoteTagField = withStyles(listStyles)(_NoteTagField);\n\nconst redirect = (basePath, id, data) => {\n return `/campaigns/${data.campaignId}/show/notes`;\n }\n\nclass EditActionsClass extends Component {\n state={}\n \n static getDerivedStateFromProps(props){\n \n if(props.data && !props.campaign){\n props.crudGetOne('campaigns', props.data.campaignId, '/notes')\n }\n \n return null\n }\n \n render() {\n return <div style={{display:'flex', justifyContent:'space-between'}}>\n <Typography variant='title'>{this.props.campaign && this.props.campaign.name}</Typography>\n {this.props.data && <ListButton to={`/campaigns/${this.props.data.campaignId}/show/notes`}/>}\n </div>\n }\n }\n \nconst mapStateToEditActionProps = (state, props) => {\n return { campaign: props.data ? state.admin.resources.campaigns.data[props.data.campaignId] : null }\n}\n \nconst EditActions = connect(mapStateToEditActionProps, { crudGetOne })(EditActionsClass);\n\nconst CustomSimpleForm = ({record, redirect, ...props}) => (\n <SimpleForm {...props} record={record} redirect={`/campaigns/${record.campaignId}/show/notes`}>\n {props.children}\n </SimpleForm>\n);\n\nclass NotesEditView extends Component {\n\n render() {\n const { campaign, translate, ...props } = this.props;\n return <Edit actions={<EditActions />} {...props} >\n <CustomSimpleForm redirect={redirect} >\n <TextInput source='description' />\n <DateTimeInput\n validate={required()}\n source='beginTime'\n label={translate('resources.launches.fields.beginTimestamp')}\n options={{\n format: 'dd/MM/YYYY HH:mm',\n clearable: true\n }}\n />\n </CustomSimpleForm>\n </Edit>\n }\n }\n\n class NotesShowView extends Component {\n\n render() {\n const { campaign, classes, translate, record,...props } = this.props;\n return (\n <Show actions={<EditActions />} {...props}> \n <TabbedShowLayout>\n <Tab label='resources.notes.tabs.details'>\n <SimpleShowLayout>\n <TextField source=\"description\" />\n <DateField source=\"beginTime\" showTime />\n </SimpleShowLayout>\n </Tab>\n <Tab label='tags'>\n <ReferenceManyManyField addLabel={false} reference=\"tags\" target=\"noteid\">\n <Datagrid>\n <NoteTagField label='resources.notes.tabs.description' source={record} classes={classes}/>\n </Datagrid>\n </ReferenceManyManyField>\n </Tab>\n </TabbedShowLayout>\n </Show>)\n }\n }\n const mapStateToProps = (state, props) => {\n const search = parse(props.location.search, { arrayFormat: 'bracket' })\n return {\n campaign: state.admin.resources.campaigns.data[search.campaignId]\n }\n }\n const enhanceCreateEdit = compose(\n translate,\n connect(mapStateToProps, {\n crudGetOne\n })\n )\nexport const NotesEdit = enhanceCreateEdit(NotesEditView);\nexport const NoteShow = enhanceCreateEdit(NotesShowView);\n","import { CHANGE_THEME } from './actions';\nimport { storage } from 'react-admin-loopback';\n\nconst loadThemeFromLocalstorage = () =>{\n const userStorage = storage.load('lbtoken');\n const { user } = userStorage;\n return (user && user.settings) ? userStorage.user.settings.theme : 'light';\n}\n\nexport default (previousState = loadThemeFromLocalstorage(), { type, payload }) => {\n if (type === CHANGE_THEME) {\n return payload;\n }\n return previousState;\n};\n","import { NEW_LIVE_DATA, CLEAR_DATA, OLD_LIVE_DATA } from './actions';\r\n\r\nexport default (previousState = [], { type, payload }) => {\r\n switch (type) {\r\n case NEW_LIVE_DATA:\r\n let index = previousState.findIndex(item => item.wavy.id === payload.wavy.id);\r\n let copy = previousState.slice();\r\n \r\n if (index >= 0) {\r\n copy[index].position.push(payload.position[0]);\r\n return copy;\r\n } else {\r\n copy.push(payload);\r\n return copy;\r\n }\r\n case OLD_LIVE_DATA:\r\n return payload;\r\n case CLEAR_DATA: \r\n return [];\r\n default:\r\n return previousState;\r\n }\r\n};","import { \r\n FETCH_OBSERVATIONS,\r\n STORE_OVERLAYS,\r\n SELECT_CAMPAIGN,\r\n} from './actions';\r\n\r\nexport const fetchedObservations = (previousState = null, { type, payload }) => {\r\n switch (type) {\r\n case FETCH_OBSERVATIONS:\r\n return payload;\r\n default:\r\n return previousState;\r\n }\r\n};\r\n\r\nexport const overlays = (previousState = [] , {type, payload}) => {\r\n switch(type){\r\n case STORE_OVERLAYS:\r\n return payload;\r\n default:\r\n return previousState;\r\n }\r\n};\r\n\r\nexport const selectedCampaign = (previousState = null, {type, payload}) => {\r\n switch(type){\r\n case SELECT_CAMPAIGN:\r\n return payload;\r\n default:\r\n return previousState;\r\n }\r\n};","import * as actions from './actions';\n\nconst defaultState = {\n sectionModalOpen: false,\n subSectionModalOpen: false,\n section: null,\n subsection: null\n}\n\nexport default (previousState = defaultState, {type, payload}) => {\n switch(type){\n case actions.OPEN_SECTION_MODAL: {\n return Object.assign({}, previousState, {sectionModalOpen: payload})\n }\n case actions.OPEN_SUBSECTION_MODAL: {\n return Object.assign({}, previousState, {subSectionModalOpen: payload})\n }\n case actions.EDIT_SECTION:{\n return Object.assign({}, previousState, {section: payload})\n }\n case actions.EDIT_SUBSECTION:{\n return Object.assign({}, previousState, {subsection: payload})\n }\n case actions.CLOSE_MANUAL_MODALS:{\n return defaultState;\n }\n default: return previousState\n }\n};","import { UPDATE_ANNOTATIONS } from './actions';\r\n\r\nexport default (previousState =[], { type, payload }) => {\r\n switch (type) {\r\n case UPDATE_ANNOTATIONS:\r\n return payload;\r\n default:\r\n return previousState;\r\n }\r\n};","import { UPDATE_RELATED_PROPERTIES } from './actions';\r\n\r\nexport default (previousState = [], { type, data }) => {\r\n switch (type) {\r\n case UPDATE_RELATED_PROPERTIES:\r\n return data;\r\n default:\r\n return previousState;\r\n }\r\n};","import { USER_LOGIN_SUCCESS, changeLocale, showNotification } from 'react-admin';\nimport { put, takeEvery } from 'redux-saga/effects';\nimport { storage } from './providers';\nimport { changeTheme } from './containers/configuration/actions';\nimport { REFRESH_ANNOTATIONS, UPDATE_ANNOTATIONS } from './containers/derivedsets/actions';\nimport dataFetch from './providers/dataFetch';\n\nfunction* setSettings(){\n const userSettings = storage.load('lbtoken').user.settings;\n if(userSettings){\n const {language, theme} = userSettings;\n if(language) yield put(changeLocale(language));\n if(theme) yield put(changeTheme(theme));\n }\n}\n\nfunction* updateAnnotations({payload}){\n const filter = {\n where: {\n derivedsetId: payload\n },\n // include: [\"tags\", \"intervals\"]\n include: [{ relation: \"tags\" }, { relation: \"intervals\", scope: { order: ['beginTime ASC'] } }]\n };\n\n try {\n const data = yield dataFetch('GET', `/annotations?filter=${JSON.stringify(filter)}`)\n yield put({type: UPDATE_ANNOTATIONS, payload: data})\n } catch(e) {\n yield put(showNotification('resources.annotations.messages.getAnnotations', 'warning'));\n }\n}\n\n\nexport function* watchLoginSuccess(){\n yield takeEvery(USER_LOGIN_SUCCESS, setSettings);\n yield takeEvery(REFRESH_ANNOTATIONS, updateAnnotations);\n}\n","import 'babel-polyfill';\nimport React, { Component } from 'react';\nimport { Admin, Resource } from 'react-admin';\nimport {\n authProvider,\n dataProvider,\n i18nProvider\n} from './providers';\nimport customRoutes from './routes';\nimport Layout from './Layout';\nimport Dashboard from './containers/dashboard';\nimport Login from './Login';\nimport './App.css';\nimport { AUTH_PROVIDER } from './Configuration';\nimport * as Resources from './resources';\nimport { storage } from './providers';\n\n// reducers \nimport themeReducer from './containers/configuration/reducers';\nimport liveReducer from './containers/live/reducers';\nimport {\n fetchedObservations,\n overlays,\n selectedCampaign\n} from './containers/history/reducers';\nimport manualReducer from './containers/manual/reducer';\nimport annotationsReducer from './containers/derivedsets/reducers';\nimport relatedPropertiesReducer from './resources/equipment-models/reducers';\n\n// sagas\nimport * as sagas from './sagas';\n\n\nclass App extends Component {\n\n getLocale(){\n const userStorage = storage.load('lbtoken');\n const { user } = userStorage;\n return (user && user.settings) ? userStorage.user.settings.language : 'en-GB';\n }\n\n\n render() {\n return (\n // <Provider\n // store={createStore({\n // authProvider: authProvider(AUTH_PROVIDER),\n // dataProvider: dataProvider,\n // i18nProvider: i18nProvider,\n // history\n // })}\n // >\n <Admin\n title=\"WAVY Operation Software\"\n dataProvider={dataProvider}\n customReducers={{ \n theme: themeReducer, \n liveData: liveReducer, \n fetchedObservations, \n overlays, \n manual: manualReducer, \n relatedproperties: relatedPropertiesReducer, \n selectedCampaign, \n annotations: annotationsReducer\n }}\n customRoutes={customRoutes}\n customSagas={[sagas.watchLoginSuccess/*, manualSaga*/]}\n dashboard={Dashboard}\n loginPage={Login}\n appLayout={Layout}\n locale={this.getLocale()}\n i18nProvider={i18nProvider}\n authProvider={authProvider(AUTH_PROVIDER)}\n >\n\n {/* <Modal /> */}\n <Resource\n name=\"institutions\"\n list={Resources.InstitutionList}\n show={Resources.InstitutionShow}\n create={Resources.InstitutionCreate}\n edit={Resources.InstitutionEdit}\n />\n\n <Resource\n name=\"users\"\n list={Resources.UserList}\n show={Resources.UserShow}\n create={Resources.UserCreate}\n edit={Resources.UserEdit}\n />\n\n <Resource\n name=\"campaigns\"\n list={Resources.CampaignList}\n show={Resources.CampaignShow}\n create={Resources.CampaignCreate}\n edit={Resources.CampaignEdit}\n />\n\n <Resource\n name=\"launches\"\n create={Resources.LaunchesCreate}\n edit={Resources.LaunchesEdit}\n show={Resources.LaunchesShow}\n />\n\n <Resource\n name=\"teams\"\n list={Resources.TeamList}\n show={Resources.TeamShow}\n create={Resources.TeamCreate}\n edit={Resources.TeamEdit}\n />\n\n <Resource\n name=\"datasets\"\n list={Resources.DatasetList}\n />\n\n <Resource\n name=\"equipment\"\n list={Resources.EquipmentList}\n show={Resources.EquipmentShow}\n create={Resources.EquipmentCreate}\n edit={Resources.EquipmentEdit}\n />\n\n <Resource\n name=\"calibrations\"\n create={Resources.CalibrationsCreate}\n show={Resources.CalibrationsShow}\n />\n\n <Resource\n name='equipmentmodels'\n list={Resources.EquipmentModelList}\n create={Resources.EquipmentModelCreate}\n edit={Resources.EquipmentModelEdit}\n show={Resources.EquipmentModelShow}\n />\n\n <Resource\n name='equipmenttypes'\n list={Resources.EquipmentTypeList}\n create={Resources.EquipmentTypeCreate}\n edit={Resources.EquipmentTypeEdit}\n show={Resources.EquipmentTypeShow}\n />\n\n <Resource\n name=\"observations\"\n list={Resources.ObservationList}\n show={Resources.ObservationShow}\n />\n <Resource\n name='annotations'\n />\n <Resource\n name='overlays'\n list={Resources.OverlaysList}\n create={Resources.OverlaysCreate}\n show={Resources.OverlaysShow}\n edit={Resources.OverlayEdit}\n />\n <Resource\n name='tags'\n list={Resources.TagList}\n create={Resources.TagCreate}\n edit={Resources.TagEdit}\n show={Resources.TagShow}\n />\n <Resource\n name='parameters'\n list={Resources.ParametersList}\n show={Resources.ParametersShow}\n edit={Resources.ParametersEdit}\n />\n <Resource\n name='files'\n list={Resources.FilesList}\n show={Resources.FilesShow}\n create={Resources.FileCreate}\n />\n <Resource\n name='manuals'\n />\n <Resource\n name='derivedsets'\n list={Resources.DerivedDtsList}\n create={Resources.DerivedDtsCreate}\n edit={Resources.DerivedDtsEdit}\n show={Resources.DerivedDtsShow}\n />\n <Resource\n name='observedProperties'\n list={Resources.ObservedPropertiesList}\n create={Resources.ObservedPropertiesCreate}\n edit={Resources.ObservedPropertiesEdit}\n show={Resources.ObservedPropertiesShow}\n />\n <Resource\n name=\"modelproperties\"\n />\n {/* Counts using only one request, ref#127 */}\n <Resource\n name=\"datasets/count/observations\"\n />\n <Resource\n name=\"users/public\"\n />\n <Resource\n name=\"launches/count/equipment\"\n />\n <Resource\n name=\"publishes\"\n />\n <Resource\n name=\"notes\"\n edit={Resources.NotesEdit}\n show={Resources.NoteShow}\n\n />\n </Admin>\n // </Provider>\n );\n }\n}\n\nexport default App;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\nimport './index.css';\n\nReactDOM.render(<App />, document.getElementById('root'));\n"],"sourceRoot":""}