{"version":3,"sources":["../node_modules/@aws-amplify/ui-components/dist/esm-es5 lazy /^/.*/.entry/.js$/ include: /.entry/.js$/ exclude: /.system/.entry/.js$/ groupOptions: {} namespace object","../node_modules/@elastic/eui/es/components/icon/assets lazy /^/.*/.js$/ groupOptions: {} namespace object","theme/theme.ts","component/Map/markerConfig.ts","component/Map/CssMarker.tsx","assets/sensor_g.svg","assets/co2.png","assets/ullage.png","assets/humidity.png","component/Map/MarkerContent.tsx","assets/temperature.png","component/Map/Marker.tsx","assets/sensor_r.svg","ui/Button.tsx","component/Context.tsx","component/SideBar.tsx","store/action.ts","assets/chevron-down.svg","assets/chevron-up.svg","component/Grid.tsx","intefaces/measure.ts","component/Atmo/AtmoIndices.tsx","assets/log_atmo_transparent.png","component/GoogleMap.tsx","assets/menu.svg","assets/business-report.svg","assets/internet-of-things.png","assets/map.svg","assets/smart-home.svg","assets/config.svg","component/Header.tsx","assets/logo.png","component/DashboardUnits/Gauge.tsx","utils/number.ts","component/DashboardUnits/VerticalGauge.tsx","component/DashboardUnits/DashLineChart.tsx","component/DashboardUnits/DatePicker.tsx","locales/amplify-dict.ts","i18n.ts","utils/export.ts","assets/download.svg","component/Dashboard.tsx","component/Login.tsx","component/Admin/Modal.tsx","component/Admin/ButtonWithModal.tsx","component/Admin/CreatePlanForm.tsx","component/Admin/CreateBuildingForm.tsx","component/Admin/DeleteBuildingForm.tsx","component/Admin/DeletePlanForm.tsx","component/DeviceOverrideInfo.tsx","assets/sensor.svg","component/InDoor/components/SimpleChart.tsx","component/InDoor/components/PlanSideBar.tsx","component/InDoor/components/PlanManager.tsx","assets/houche2.png","component/InDoor/components/SensorWidget.tsx","component/InDoor/components/SensorDetails.tsx","component/InDoor/components/SensorWithData.tsx","component/InDoor/components/utils.ts","component/InDoor/components/PlanWithSensor.tsx","component/InDoor/components/PlanMonitor.tsx","component/InDoor/components/GlobalMonitor.tsx","component/InDoor/InDoor.tsx","component/SideBarChirpstack.tsx","component/IoT/getLines.ts","component/IoT/DashboardChirpstack.tsx","component/Report/ReportSelector.tsx","component/Report/ReportBody.tsx","component/Report/Report.tsx","App.tsx","reportWebVitals.ts","index.tsx"],"names":["map","webpackAsyncContext","req","__webpack_require__","o","Promise","resolve","then","e","Error","code","ids","id","keys","Object","module","exports","all","slice","dropShaw","elevation","boxShadow","Gray","Green","LightWarning","MediumWarning","HighWarning","Alert","Red","DefaultColor","gradientOrange","DefaultMarkerColor","defaultV","scale","hoverState","showBallonState","withText","size","width","CssMarkerWidth","height","Math","sqrt","origin","x","y","ColorPickerBySensorData","v","sensor","CO2Color","CssMarker","dead","isHover","children","styleMarkerMarker","zIndexStyle","markerStyle","contrast","min","transform","WebkitTransform","filter","WebkitFilter","calcMarkerMarkerStyle","zIndex","round","sizeOriginX","sizeOriginY","position","left","top","willChange","transition","transformOrigin","getMarkerStyle","markerColor","markerColorPicker","Wrapper","style","Foot","backgroundColor","Content","borderColor","boxSizing","border","styled","div","SensorDataDisplayList","name","key","icon","IconHumidity","IconCO2","IconUllage","MarkerContent","pointData","cluster","numPoints","textStyle","colorHex","ceil","toString","textAlign","fontWeight","fontSize","display","alignItems","justifyContent","color","calcMarkerTextStyle","src","SensorInfo","marginRight","alt","flexWrap","reduce","acc","targetData","undefined","push","IconWrapper","co2","Number","isInteger","toFixed","img","Marker","deviceId","onHover","onClickMarker","pickedInSideBar","history","useHistory","useState","setIsHover","markerHolderStyle","cursor","getMarkerHolderStyle","onMouseEnter","onMouseLeave","onClickCapture","onDoubleClickCapture","preventDefault","i18n","language","Button","large","AccessTokenCtx","React","createContext","Sidebar","hoverId","zoomToPoint","onSensorSelected","forceClickable","defaultGeolocations","disableFetchLocation","selectedSensor","setSelectedSensor","accessToken","useContext","useTranslation","t","useParams","geolocations","setGeolocations","geoSource","selectOrClear","idToSelect","find","g","useEffect","length","selected","deviceName","fetch","headers","Authorization","res","json","data","sort","a","b","console","error","document","getElementById","scrollIntoView","behavior","block","inline","Container","Line","onClick","SectionHeader","SectionTitle","SectionList","location","geoLocation","lastMeasureAt","moment","isBefore","add","SectionContent","onDoubleClick","hovered","SensorIcon","title","flexDirection","maxWidth","overflowWrap","SensorRed","fetchDevices","callback","fetchBuildings","fetchPlans","updateBuildingIndoorPosition","building","method","body","JSON","stringify","window","navigator","EMode","Grid","onHoverId","setDisplay","setGridApi","gridColumnApi","setGridColumnApi","isHidden","buttonString","ShowDataButtonWrapper","bottom","ChevronWrapper","ChevronUp","ChevronDown","GridWrapper","AgGridWrapper","className","onGridReady","api","columnApi","autoSizeAllColumns","rowData","onRowDataChanged","headerName","field","resizable","sortable","pinned","onCellClicked","event","valueFormatter","params","value","fromNow","valueGetter","tvoc","lvoc","hide","attrs","maxHeight","indiceColor","indice","getInsee","groups","group","insee","AtmoIndices","atmoIndices","setAtmoIndices","fetchAtmoIndices","result","pm25","sous_indices","index","polluant_nom","IndexNumber","concentration","alignContent","IndexNumberSuffix","Logo","props","SimpleMap","globalBounds","setGlobalBounds","setMap","maps","setMaps","zoom","setZoom","places","setPlaces","placesAndCluster","setPlacesAndCluster","setCluster","gridData","setGridData","setHoverId","p","latitude","longitude","bounds","getMapBounds","fitBounds","toJSON","west","south","east","north","getCluster","nw","lng","lat","se","getZoom","calculatePlacesAndCluster","curZoom","wx","wy","pointsInCluster","points","some","pp","ppp","findNextZoomToSeperateThePoints","setCenter","LatLngBounds","forEach","extend","LatLng","sc","supercluster","others","minZoom","maxZoom","radius","target","bootstrapURLKeys","region","options","disableDoubleClickZoom","defaultCenter","defaultZoom","yesIWantToUseGoogleMapApiInternals","onGoogleApiLoaded","addListener","apiIsLoaded","gd","Header","signedIn","onSignOut","menuOpen","setMenuOpen","url","useRouteMatch","targetLanguage","href","Language","replace","pathname","SignOutWrapper","Menu","MenuSvg","MenuItems","MenuItem","SvgWrapper","Img","DashboardSvg","Subtitle","MapSvg","SmartHomeSvg","IoT","ConfigSvg","getRangeWithColorV2","cur","colors","thresholds","gap","idx","tickColors","ticks","i","Gauge","additionalInfo","maxValue","percent","unit","minValue","max","matchMedia","matcherMini","matcherMedium","matches","mini","setMini","medium","setMedium","addEventListener","ev","removeEventListener","autoFit","Title","multi","hint","axis","label","formatter","text","item","opacity","tickLine","subTickLine","innerRadius","indicator","pin","pointer","startAngle","PI","endAngle","range","statistic","content","datum","offsetY","transparency","baseColor","floor","generateData","base","Array","fill","VerticalGauge","heightChart","CurValue","visible","animate","appear","lineWidth","startColor","transpose","DataMarker","autoAdjust","line","point","direction","DashLineChart","titleHeight","adjust","ChartWrapper","unix","parseInt","format","shared","showCrosshairs","type","registerLocale","fr","en","DatePickers","mode","onRelativeMode","onRelativeDateChange","onAutoMode","startDate","setStartDate","endDate","setEndDate","toDate","PickerType","enabled","Auto","Relative","startDateControl","onChange","date","isInvalid","showTimeSelect","locale","endDateControl","dict","Translations","BACK_TO_SIGN_IN","CHANGE_PASSWORD_ACTION","CHANGE_PASSWORD","CODE_LABEL","CODE_PLACEHOLDER","CONFIRM_SIGN_UP_CODE_LABEL","CONFIRM_SIGN_UP_CODE_PLACEHOLDER","CONFIRM_SIGN_UP_HEADER_TEXT","CONFIRM_SIGN_UP_LOST_CODE","CONFIRM_SIGN_UP_RESEND_CODE","CONFIRM_SIGN_UP_SUBMIT_BUTTON_TEXT","CONFIRM_SMS_CODE","CONFIRM_TOTP_CODE","CONFIRMER","CREATE_ACCOUNT_TEXT","EMAIL_LABEL","EMAIL_PLACEHOLDER","FORGOT_PASSWORD_TEXT","LESS_THAN_TWO_MFA_VALUES_MESSAGE","NEW_PASSWORD_LABEL","NEW_PASSWORD_PLACEHOLDER","NO_ACCOUNT_TEXT","USERNAME_REMOVE_WHITESPACE","PASSWORD_REMOVE_WHITESPACE","PASSWORD_LABEL","PASSWORD_PLACEHOLDER","PHONE_LABEL","PHONE_PLACEHOLDER","QR_CODE_ALT","RESET_PASSWORD_TEXT","RESET_YOUR_PASSWORD","SELECT_MFA_TYPE_HEADER_TEXT","SELECT_MFA_TYPE_SUBMIT_BUTTON_TEXT","SEND_CODE","SUBMIT","SETUP_TOTP_REQUIRED","SIGN_IN_ACTION","SIGN_IN_HEADER_TEXT","SIGN_IN_TEXT","SIGN_IN_WITH_AMAZON","SIGN_IN_WITH_AUTH0","SIGN_IN_WITH_AWS","SIGN_IN_WITH_FACEBOOK","SIGN_IN_WITH_GOOGLE","SIGN_OUT","SIGN_UP_EMAIL_PLACEHOLDER","SIGN_UP_HAVE_ACCOUNT_TEXT","SIGN_UP_HEADER_TEXT","SIGN_UP_PASSWORD_PLACEHOLDER","SIGN_UP_SUBMIT_BUTTON_TEXT","SIGN_UP_USERNAME_PLACEHOLDER","SUCCESS_MFA_TYPE","TOTP_HEADER_TEXT","TOTP_LABEL","TOTP_ISSUER","TOTP_SETUP_FAILURE","TOTP_SUBMIT_BUTTON_TEXT","TOTP_SUCCESS_MESSAGE","UNABLE_TO_SETUP_MFA_AT_THIS_TIME","USERNAME_LABEL","USERNAME_PLACEHOLDER","VERIFY_CONTACT_EMAIL_LABEL","VERIFY_CONTACT_HEADER_TEXT","VERIFY_CONTACT_PHONE_LABEL","VERIFY_CONTACT_SUBMIT_LABEL","VERIFY_CONTACT_VERIFY_LABEL","ADDRESS_LABEL","ADDRESS_PLACEHOLDER","NICKNAME_LABEL","NICKNAME_PLACEHOLDER","BIRTHDATE_LABEL","BIRTHDATE_PLACEHOLDER","PICTURE_LABEL","PICTURE_PLACEHOLDER","FAMILY_NAME_LABEL","FAMILY_NAME_PLACEHOLDER","PREFERRED_USERNAME_LABEL","PREFERRED_USERNAME_PLACEHOLDER","GENDER_LABEL","GENDER_PLACEHOLDER","PROFILE_LABEL","PROFILE_PLACEHOLDER","GIVEN_NAME_LABEL","GIVEN_NAME_PLACEHOLDER","ZONEINFO_LABEL","ZONEINFO_PLACEHOLDER","LOCALE_LABEL","LOCALE_PLACEHOLDER","UPDATED_AT_LABEL","UPDATED_AT_PLACEHOLDER","MIDDLE_NAME_LABEL","MIDDLE_NAME_PLACEHOLDER","WEBSITE_LABEL","WEBSITE_PLACEHOLDER","NAME_LABEL","NAME_PLACEHOLDER","PHOTO_PICKER_TITLE","PHOTO_PICKER_HINT","PHOTO_PICKER_PLACEHOLDER_HINT","PHOTO_PICKER_BUTTON_TEXT","IMAGE_PICKER_TITLE","IMAGE_PICKER_HINT","IMAGE_PICKER_PLACEHOLDER_HINT","IMAGE_PICKER_BUTTON_TEXT","PICKER_TEXT","TEXT_FALLBACK_CONTENT","CONFIRM_SIGN_UP_FAILED","SIGN_UP_FAILED","resources","setGlobalLanguage","I18n","putVocabularies","setLanguage","use","initReactI18next","init","fallbackLng","keySeparator","interpolation","escapeValue","keyParser","k","line1Field","line2Field","line3Field","getDashboardSizing","totalHeight","innerHeight","totalWidth","innerWidth","dividedBy","partialHeight","gaugeWidth","chartWidth","verticalGaugeHeight","Dashboard","path","setData","icone","setIcone","lines","setLines","sizing","setSizing","fetchInterval","setFetchInterval","setMode","exporting","Date","relativeDate","setRelativeDate","ref","useRef","getSortData","sensorType","time","CreatedAt","getTime","subscription","subscribed","fetchData","start","end","clearInterval","setInterval","current","continuousStart","complete","ICONE","todayStart","startOf","todayEnd","yesterdayStart","yesterdayEnd","co2In3Days","c","isBetween","todayCO2","yesterdayCO2","n0","n1","n2","total","log2","dataSelector","source","Infinity","mv","tooltipV","lastRecord","line1","line2","line3","progress","FlexRow","DatePicker","DownloadWrapper","workbook","XLSX","utils","book_new","entries","worksheet","json_to_sheet","book_append_sheet","writeFile","exportDataToXlsx","DownloadImg","DownloadSVG","Amplify","configure","Auth","userPoolId","userPoolWebClientId","Login","onSignedIn","authState","setAuthState","token","setToken","refreshToken","currentAuthenticatedUser","cognitoUser","currentSession","refreshSession","getRefreshToken","err","session","setTimeout","getAccessToken","getJwtToken","AuthState","SignedIn","onAuthUIStateChange","nextAuthState","decodePayload","Provider","hideSignUp","slot","Modal","closeModal","onClose","ButtonWithModal","buttonText","isModalVisible","setIsModalVisible","margin","CreatePlanForm","buildings","refresh","buildingOptions","useMemo","ID","buildingOption","setBuildingOption","planName","setPlanName","loading","validation","invalidated","validationErrors","formStatus","setFormStatus","component","onPickBuilding","status","validate","plan","success","createPlan","buildingId","CreateBuildingForm","formData","setFormData","validationStatus","createBuilding","isLoading","DeleteBuildingForm","setValue","doubleConfirm","setDoubleConfirm","closeSecondConfirm","deleteBuilding","finally","DeletePlanForm","plans","getPlanLabel","planId","deletePlan","DeviceOverrideInfo","setRowData","setPlans","setBuildings","planOptions","concat","components","numericCellEditor","getNumericCellEditor","defaultColDef","flex","minWidth","editable","onCellValueChanged","param","colDef","device","updateIndoorDevice","devEUI","deviceInfo","updateDevice","cellEditor","cellEditorParams","values","isCharNumeric","charStr","test","isKeyPressedNumeric","charCode","which","keyCode","getCharCodeFromEvent","String","fromCharCode","NumericCellEditor","prototype","this","focusAfterAttached","cellStartedEdit","eInput","createElement","charPress","that","focus","getGui","afterGuiAttached","select","isCancelBeforeStart","cancelBeforeStart","isCancelAfterEnd","getValue","parseFloat","focusIn","focusOut","_extends","assign","bind","arguments","hasOwnProperty","call","apply","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","d","SvgSensor","_ref","svgRef","titleId","enableBackground","viewBox","xmlns","ForwardRef","SimpleChart","pure","shape","PlanSideBar","pickedBuildingId","setPickedBuildingId","summary","StyledSensorSvg","highLowTemperatureAlert","SensorTitle","SensorSub","avgTemperature","avgHumidity","SensorDetails","sub","SensorSvg","PlanManager","fileUploader","fileName","SensorWidget","labelLeft","labelRight","unitLeft","unitRight","percentageLeft","percentageRight","WidgetLeft","Circle","cx","cy","r","perimeter","percentage","WidgetRight","Data","Text","borderLeft","svg","circle","devices","positions","parentWidth","isOverflow","positionX","Row","lastMeasure","temperature","humidity","SensorWithData","temp","indoorPosition","measure","picked","onContextMenu","hideTimeout","setHideTimeout","setHovered","delayedHovered","setDelayedHovered","clearTimeout","useMoveInOut","SensorData","PlanWithSensor","pickedSensor","setPickedSensor","sensors","updateSensorIndoorPosition","wrapperRef","Plan","clientX","offsetLeft","clientWidth","clientY","offsetTop","clientHeight","indoorX","indoorY","PlanMonitor","isAdmin","pickedPlanId","pickedSensorId","setPickedSensorId","setPickedPlanId","tooltipDisplay","setTooltipDisplay","Tooltip","SelectorGroup","PlanSelector","PlanOption","SensorSelector","SensorOption","chirpstackDevices","option","GlobalMonitor","enableBuildingIndoorPositionSetter","setEnableBuildingIndoorPositionSetter","getBuildSensors","InDoor","updateIndoorPosition","getLinesBySensorType","selector","getTekelekLines","getPrototypeLines","getPrototype2Lines","getDefaultLines","sortedData","SideBarChirpstack","includes","exportDataToXlsIoT","getExportedLines","ReportSelector","fetchReportData","selectedDeviceOption","setSelectedDeviceOption","deviceOption","setDeviceOption","currentWeek","week","generateWeekOptions","weekOption","selectedWeekOption","setSelectedWeekOption","year","getFullYear","identifier","platform","device_type","fetchChirpstackDevices","response","iconeCalculator","ReportBody","chartData","co2SeriesData","count","red","highWarning","mediumWarning","lightWarning","green","sum","maxAt","num","avg","analyseData","ReportContainer","TitleWrapper","TitleColumn","IndicesWrapper","DetailsTitle","DetailsWrapper","DetailsColumn","DetailsRow","AlertColumn","CO2Table","CO2Row","CO2Column","Observation","ObservationDetails","h2","Report","from","to","URLSearchParams","append","AppWithLanguagePath","showSignOutButton","setShowSignOutButton","setGroups","setLoading","exact","DashboardChirpstack","App","RouteApp","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode"],"mappings":"gpGAAA,IAAIA,EAAM,CACT,qCAAsC,CACrC,IACA,KAED,mCAAoC,CACnC,IACA,KAED,mCAAoC,CACnC,IACA,KAED,8BAA+B,CAC9B,IACA,KAED,6BAA8B,CAC7B,IACA,KAED,8BAA+B,CAC9B,IACA,KAED,uCAAwC,CACvC,IACA,KAED,+BAAgC,CAC/B,IACA,KAED,yCAA0C,CACzC,IACA,KAED,uCAAwC,CACvC,IACA,KAED,kCAAmC,CAClC,IACA,KAED,+BAAgC,CAC/B,IACA,KAED,iCAAkC,CACjC,IACA,KAED,0BAA2B,CAC1B,IACA,KAED,0BAA2B,CAC1B,IACA,KAED,2BAA4B,CAC3B,IACA,KAED,kCAAmC,CAClC,IACA,KAED,4BAA6B,CAC5B,IACA,KAED,oCAAqC,CACpC,IACA,KAED,8BAA+B,CAC9B,IACA,KAED,qCAAsC,CACrC,IACA,KAED,8BAA+B,CAC9B,IACA,KAED,oCAAqC,CACpC,IACA,KAED,6BAA8B,CAC7B,IACA,KAED,qCAAsC,CACrC,IACA,KAED,oCAAqC,CACpC,IACA,KAED,2BAA4B,CAC3B,IACA,KAED,6BAA8B,CAC7B,IACA,MAGF,SAASC,EAAoBC,GAC5B,IAAIC,EAAoBC,EAAEJ,EAAKE,GAC9B,OAAOG,QAAQC,UAAUC,MAAK,WAC7B,IAAIC,EAAI,IAAIC,MAAM,uBAAyBP,EAAM,KAEjD,MADAM,EAAEE,KAAO,mBACHF,CACP,IAGD,IAAIG,EAAMX,EAAIE,GAAMU,EAAKD,EAAI,GAC7B,OAAOR,EAAoBK,EAAEG,EAAI,IAAIJ,MAAK,WACzC,OAAOJ,EAAoBS,EAC5B,GACD,CACAX,EAAoBY,KAAO,WAC1B,OAAOC,OAAOD,KAAKb,EACpB,EACAC,EAAoBW,GAAK,IACzBG,EAAOC,QAAUf,C,sBCpIjB,IAAID,EAAM,CACT,qBAAsB,CACrB,IACA,GAED,iBAAkB,CACjB,IACA,GAED,aAAc,CACb,IACA,GAED,qBAAsB,CACrB,IACA,GAED,kBAAmB,CAClB,IACA,GAED,iBAAkB,CACjB,IACA,GAED,oBAAqB,CACpB,IACA,GAED,6BAA8B,CAC7B,IACA,GAED,eAAgB,CACf,IACA,GAED,sBAAuB,CACtB,IACA,GAED,qBAAsB,CACrB,IACA,IAED,kBAAmB,CAClB,IACA,IAED,gBAAiB,CAChB,IACA,IAED,mBAAoB,CACnB,IACA,IAED,qCAAsC,CACrC,IACA,IAED,qBAAsB,CACrB,IACA,IAED,oBAAqB,CACpB,IACA,IAED,oBAAqB,CACpB,IACA,IAED,eAAgB,CACf,IACA,IAED,oBAAqB,CACpB,IACA,IAED,eAAgB,CACf,IACA,IAED,iBAAkB,CACjB,IACA,IAED,gBAAiB,CAChB,IACA,IAED,qBAAsB,CACrB,IACA,IAED,4BAA6B,CAC5B,IACA,IAED,yBAA0B,CACzB,IACA,IAED,wBAAyB,CACxB,IACA,IAED,gBAAiB,CAChB,IACA,IAED,gBAAiB,CAChB,IACA,IAED,sBAAuB,CACtB,IACA,IAED,sBAAuB,CACtB,IACA,IAED,mBAAoB,CACnB,IACA,IAED,cAAe,CACd,IACA,IAED,sBAAuB,CACtB,IACA,IAED,oBAAqB,CACpB,IACA,IAED,sBAAuB,CACtB,IACA,IAED,oBAAqB,CACpB,IACA,IAED,2BAA4B,CAC3B,IACA,IAED,qBAAsB,CACrB,IACA,IAED,yBAA0B,CACzB,IACA,IAED,2BAA4B,CAC3B,IACA,IAED,oBAAqB,CACpB,IACA,IAED,8BAA+B,CAC9B,IACA,IAED,kBAAmB,CAClB,IACA,IAED,eAAgB,CACf,IACA,IAED,oBAAqB,CACpB,IACA,IAED,6BAA8B,CAC7B,IACA,IAED,kBAAmB,CAClB,IACA,IAED,uBAAwB,CACvB,IACA,IAED,qBAAsB,CACrB,IACA,IAED,mBAAoB,CACnB,IACA,IAED,4BAA6B,CAC5B,IACA,IAED,YAAa,CACZ,IACA,IAED,kBAAmB,CAClB,IACA,IAED,kBAAmB,CAClB,IACA,IAED,mBAAoB,CACnB,IACA,IAED,gBAAiB,CAChB,IACA,IAED,gBAAiB,CAChB,IACA,IAED,cAAe,CACd,IACA,IAED,YAAa,CACZ,IACA,IAED,iBAAkB,CACjB,IACA,IAED,YAAa,CACZ,IACA,IAED,wBAAyB,CACxB,IACA,IAED,sBAAuB,CACtB,IACA,IAED,cAAe,CACd,IACA,IAED,aAAc,CACb,IACA,IAED,aAAc,CACb,IACA,IAED,WAAY,CACX,IACA,IAED,gBAAiB,CAChB,IACA,IAED,gBAAiB,CAChB,IACA,IAED,aAAc,CACb,IACA,IAED,2BAA4B,CAC3B,IACA,IAED,aAAc,CACb,IACA,IAED,aAAc,CACb,IACA,IAED,oBAAqB,CACpB,IACA,IAED,mBAAoB,CACnB,IACA,IAED,kBAAmB,CAClB,IACA,IAED,aAAc,CACb,IACA,IAED,eAAgB,CACf,IACA,IAED,eAAgB,CACf,IACA,IAED,uBAAwB,CACvB,IACA,IAED,4BAA6B,CAC5B,IACA,IAED,uBAAwB,CACvB,IACA,IAED,wBAAyB,CACxB,IACA,IAED,2BAA4B,CAC3B,IACA,IAED,yBAA0B,CACzB,IACA,IAED,YAAa,CACZ,IACA,IAED,sBAAuB,CACtB,IACA,IAED,aAAc,CACb,IACA,IAED,4BAA6B,CAC5B,IACA,IAED,kBAAmB,CAClB,IACA,IAED,gBAAiB,CAChB,IACA,IAED,WAAY,CACX,IACA,IAED,gBAAiB,CAChB,IACA,IAED,gBAAiB,CAChB,IACA,IAED,oBAAqB,CACpB,IACA,IAED,qBAAsB,CACrB,IACA,IAED,iBAAkB,CACjB,IACA,IAED,WAAY,CACX,IACA,IAED,gBAAiB,CAChB,IACA,IAED,kCAAmC,CAClC,IACA,KAED,gCAAiC,CAChC,IACA,KAED,6BAA8B,CAC7B,IACA,KAED,6BAA8B,CAC7B,IACA,KAED,2BAA4B,CAC3B,IACA,KAED,6BAA8B,CAC7B,IACA,KAED,4BAA6B,CAC5B,IACA,KAED,0BAA2B,CAC1B,IACA,KAED,gCAAiC,CAChC,IACA,KAED,iCAAkC,CACjC,IACA,KAED,6BAA8B,CAC7B,IACA,KAED,8BAA+B,CAC9B,IACA,KAED,2BAA4B,CAC3B,IACA,KAED,yBAA0B,CACzB,IACA,KAED,0BAA2B,CAC1B,IACA,KAED,mBAAoB,CACnB,IACA,KAED,yBAA0B,CACzB,IACA,KAED,sBAAuB,CACtB,IACA,KAED,sBAAuB,CACtB,IACA,KAED,qBAAsB,CACrB,IACA,KAED,mBAAoB,CACnB,IACA,KAED,2BAA4B,CAC3B,IACA,KAED,mBAAoB,CACnB,IACA,KAED,qBAAsB,CACrB,IACA,KAED,oBAAqB,CACpB,IACA,KAED,wBAAyB,CACxB,IACA,KAED,mBAAoB,CACnB,IACA,KAED,6BAA8B,CAC7B,IACA,KAED,aAAc,CACb,IACA,KAED,aAAc,CACb,KAED,WAAY,CACX,IACA,KAED,cAAe,CACd,IACA,KAED,YAAa,CACZ,IACA,KAED,cAAe,CACd,IACA,KAED,kBAAmB,CAClB,IACA,KAED,cAAe,CACd,IACA,KAED,WAAY,CACX,IACA,KAED,kBAAmB,CAClB,IACA,KAED,mBAAoB,CACnB,IACA,KAED,kBAAmB,CAClB,IACA,KAED,oBAAqB,CACpB,IACA,KAED,gBAAiB,CAChB,IACA,KAED,cAAe,CACd,IACA,KAED,YAAa,CACZ,IACA,KAED,YAAa,CACZ,IACA,KAED,oBAAqB,CACpB,IACA,KAED,qBAAsB,CACrB,IACA,KAED,0BAA2B,CAC1B,IACA,KAED,mBAAoB,CACnB,IACA,KAED,iBAAkB,CACjB,IACA,KAED,qBAAsB,CACrB,IACA,KAED,sBAAuB,CACtB,IACA,KAED,mBAAoB,CACnB,IACA,KAED,gBAAiB,CAChB,IACA,KAED,YAAa,CACZ,IACA,KAED,eAAgB,CACf,IACA,KAED,aAAc,CACb,IACA,KAED,YAAa,CACZ,IACA,KAED,uBAAwB,CACvB,IACA,KAED,YAAa,CACZ,IACA,KAED,aAAc,CACb,IACA,KAED,eAAgB,CACf,IACA,KAED,YAAa,CACZ,IACA,KAED,YAAa,CACZ,IACA,KAED,iBAAkB,CACjB,IACA,KAED,aAAc,CACb,IACA,KAED,cAAe,CACd,IACA,KAED,mBAAoB,CACnB,IACA,KAED,kBAAmB,CAClB,IACA,KAED,mBAAoB,CACnB,IACA,KAED,qBAAsB,CACrB,IACA,KAED,kBAAmB,CAClB,IACA,KAED,qBAAsB,CACrB,IACA,KAED,sBAAuB,CACtB,IACA,KAED,mBAAoB,CACnB,IACA,KAED,eAAgB,CACf,IACA,KAED,cAAe,CACd,IACA,KAED,UAAW,CACV,IACA,KAED,yBAA0B,CACzB,IACA,KAED,iBAAkB,CACjB,IACA,KAED,oBAAqB,CACpB,IACA,KAED,mBAAoB,CACnB,IACA,KAED,oBAAqB,CACpB,IACA,KAED,iBAAkB,CACjB,IACA,KAED,cAAe,CACd,IACA,KAED,YAAa,CACZ,IACA,KAED,YAAa,CACZ,IACA,KAED,gBAAiB,CAChB,IACA,KAED,YAAa,CACZ,IACA,KAED,gBAAiB,CAChB,IACA,KAED,sBAAuB,CACtB,IACA,KAED,mBAAoB,CACnB,IACA,KAED,uBAAwB,CACvB,IACA,KAED,gBAAiB,CAChB,IACA,KAED,qBAAsB,CACrB,IACA,KAED,kBAAmB,CAClB,IACA,KAED,uBAAwB,CACvB,IACA,KAED,kBAAmB,CAClB,IACA,KAED,+BAAgC,CAC/B,IACA,KAED,iBAAkB,CACjB,IACA,KAED,kBAAmB,CAClB,IACA,KAED,sBAAuB,CACtB,IACA,KAED,iBAAkB,CACjB,IACA,KAED,wBAAyB,CACxB,IACA,KAED,sBAAuB,CACtB,IACA,KAED,mBAAoB,CACnB,IACA,KAED,uBAAwB,CACvB,IACA,KAED,oBAAqB,CACpB,IACA,KAED,0BAA2B,CAC1B,IACA,KAED,0BAA2B,CAC1B,IACA,KAED,8BAA+B,CAC9B,IACA,KAED,iBAAkB,CACjB,IACA,KAED,gBAAiB,CAChB,IACA,KAED,qBAAsB,CACrB,IACA,KAED,mBAAoB,CACnB,IACA,KAED,kBAAmB,CAClB,IACA,KAED,mBAAoB,CACnB,IACA,KAED,qBAAsB,CACrB,IACA,KAED,oBAAqB,CACpB,IACA,KAED,gBAAiB,CAChB,IACA,KAED,qBAAsB,CACrB,IACA,KAED,kBAAmB,CAClB,IACA,KAED,mBAAoB,CACnB,IACA,KAED,uBAAwB,CACvB,IACA,KAED,oBAAqB,CACpB,IACA,KAED,qBAAsB,CACrB,IACA,KAED,iBAAkB,CACjB,IACA,KAED,sBAAuB,CACtB,IACA,KAED,oBAAqB,CACpB,IACA,KAED,oBAAqB,CACpB,IACA,KAED,kBAAmB,CAClB,IACA,KAED,kBAAmB,CAClB,IACA,KAED,0BAA2B,CAC1B,IACA,KAED,oBAAqB,CACpB,IACA,KAED,gBAAiB,CAChB,IACA,KAED,qBAAsB,CACrB,IACA,KAED,uBAAwB,CACvB,IACA,KAED,qBAAsB,CACrB,IACA,KAED,kBAAmB,CAClB,IACA,KAED,qBAAsB,CACrB,IACA,KAED,wBAAyB,CACxB,IACA,KAED,mBAAoB,CACnB,IACA,KAED,kBAAmB,CAClB,IACA,KAED,mBAAoB,CACnB,IACA,KAED,oBAAqB,CACpB,IACA,KAED,oBAAqB,CACpB,IACA,KAED,6BAA8B,CAC7B,IACA,KAED,uBAAwB,CACvB,IACA,KAED,mBAAoB,CACnB,IACA,KAED,sBAAuB,CACtB,IACA,KAED,uBAAwB,CACvB,IACA,KAED,sBAAuB,CACtB,IACA,KAED,cAAe,CACd,IACA,KAED,wBAAyB,CACxB,IACA,KAED,uBAAwB,CACvB,IACA,KAED,kBAAmB,CAClB,IACA,KAED,cAAe,CACd,IACA,KAED,YAAa,CACZ,IACA,KAED,gBAAiB,CAChB,IACA,KAED,gBAAiB,CAChB,IACA,KAED,iBAAkB,CACjB,IACA,KAED,cAAe,CACd,IACA,KAED,aAAc,CACb,IACA,KAED,gBAAiB,CAChB,IACA,KAED,aAAc,CACb,IACA,KAED,uBAAwB,CACvB,IACA,KAED,8BAA+B,CAC9B,IACA,KAED,6BAA8B,CAC7B,IACA,KAED,8BAA+B,CAC9B,IACA,KAED,kCAAmC,CAClC,IACA,KAED,gCAAiC,CAChC,IACA,KAED,mCAAoC,CACnC,IACA,KAED,0BAA2B,CAC1B,IACA,KAED,gCAAiC,CAChC,IACA,KAED,yBAA0B,CACzB,IACA,KAED,cAAe,CACd,IACA,KAED,YAAa,CACZ,IACA,KAED,cAAe,CACd,IACA,KAED,YAAa,CACZ,IACA,KAED,cAAe,CACd,IACA,KAED,eAAgB,CACf,IACA,KAED,cAAe,CACd,IACA,KAED,eAAgB,CACf,IACA,KAED,kBAAmB,CAClB,IACA,KAED,mBAAoB,CACnB,IACA,KAED,aAAc,CACb,IACA,KAED,kBAAmB,CAClB,IACA,KAED,eAAgB,CACf,IACA,KAED,aAAc,CACb,IACA,KAED,cAAe,CACd,IACA,KAED,eAAgB,CACf,IACA,KAED,WAAY,CACX,IACA,KAED,kBAAmB,CAClB,IACA,KAED,YAAa,CACZ,IACA,KAED,kBAAmB,CAClB,IACA,KAED,YAAa,CACZ,IACA,KAED,sBAAuB,CACtB,IACA,KAED,6BAA8B,CAC7B,IACA,KAED,cAAe,CACd,IACA,KAED,YAAa,CACZ,IACA,KAED,0BAA2B,CAC1B,IACA,KAED,aAAc,CACb,IACA,KAED,eAAgB,CACf,IACA,KAED,gBAAiB,CAChB,IACA,KAED,kBAAmB,CAClB,IACA,KAED,YAAa,CACZ,IACA,KAED,aAAc,CACb,IACA,KAED,cAAe,CACd,IACA,KAED,sBAAuB,CACtB,IACA,KAED,8BAA+B,CAC9B,IACA,KAED,8BAA+B,CAC9B,IACA,KAED,aAAc,CACb,IACA,KAED,aAAc,CACb,IACA,KAED,iBAAkB,CACjB,IACA,KAED,gBAAiB,CAChB,IACA,KAED,iBAAkB,CACjB,IACA,KAED,iBAAkB,CACjB,IACA,KAED,eAAgB,CACf,IACA,KAED,gBAAiB,CAChB,IACA,KAED,qBAAsB,CACrB,IACA,KAED,sBAAuB,CACtB,IACA,KAED,kBAAmB,CAClB,IACA,KAED,wBAAyB,CACxB,IACA,KAED,mBAAoB,CACnB,IACA,KAED,yBAA0B,CACzB,IACA,KAED,wBAAyB,CACxB,IACA,KAED,yBAA0B,CACzB,IACA,KAED,aAAc,CACb,IACA,KAED,YAAa,CACZ,IACA,KAED,mBAAoB,CACnB,IACA,KAED,kBAAmB,CAClB,IACA,KAED,eAAgB,CACf,IACA,KAED,cAAe,CACd,IACA,KAED,iBAAkB,CACjB,IACA,KAED,oBAAqB,CACpB,IACA,KAED,eAAgB,CACf,IACA,KAED,uBAAwB,CACvB,IACA,KAED,6BAA8B,CAC7B,IACA,KAED,8BAA+B,CAC9B,IACA,KAED,4BAA6B,CAC5B,IACA,KAED,WAAY,CACX,IACA,KAED,YAAa,CACZ,IACA,KAED,mBAAoB,CACnB,IACA,KAED,gBAAiB,CAChB,IACA,KAED,kBAAmB,CAClB,IACA,KAED,yBAA0B,CACzB,IACA,KAED,8BAA+B,CAC9B,IACA,KAED,yBAA0B,CACzB,IACA,KAED,0BAA2B,CAC1B,IACA,KAED,2BAA4B,CAC3B,IACA,KAED,yBAA0B,CACzB,IACA,KAED,uCAAwC,CACvC,IACA,KAED,4BAA6B,CAC5B,IACA,KAED,wBAAyB,CACxB,IACA,KAED,+BAAgC,CAC/B,IACA,KAED,2BAA4B,CAC3B,IACA,KAED,wBAAyB,CACxB,IACA,KAED,8BAA+B,CAC9B,IACA,KAED,yBAA0B,CACzB,IACA,KAED,6BAA8B,CAC7B,IACA,KAED,yBAA0B,CACzB,IACA,KAED,wBAAyB,CACxB,IACA,KAED,6BAA8B,CAC7B,IACA,KAED,4BAA6B,CAC5B,IACA,KAED,uBAAwB,CACvB,IACA,KAED,6BAA8B,CAC7B,IACA,KAED,sBAAuB,CACtB,IACA,KAED,6BAA8B,CAC7B,IACA,KAED,wBAAyB,CACxB,IACA,KAED,uBAAwB,CACvB,IACA,KAED,2BAA4B,CAC3B,IACA,KAED,0BAA2B,CAC1B,IACA,KAED,0BAA2B,CAC1B,IACA,KAED,6BAA8B,CAC7B,IACA,KAED,0BAA2B,CAC1B,IACA,KAED,wBAAyB,CACxB,IACA,KAED,0BAA2B,CAC1B,IACA,KAED,0BAA2B,CAC1B,IACA,KAED,4BAA6B,CAC5B,IACA,KAED,2BAA4B,CAC3B,IACA,KAED,6BAA8B,CAC7B,IACA,KAED,8BAA+B,CAC9B,IACA,KAED,4BAA6B,CAC5B,IACA,KAED,yBAA0B,CACzB,IACA,KAED,+BAAgC,CAC/B,IACA,KAED,gCAAiC,CAChC,IACA,KAED,wBAAyB,CACxB,IACA,KAED,8BAA+B,CAC9B,IACA,KAED,yBAA0B,CACzB,IACA,KAED,0BAA2B,CAC1B,IACA,KAED,0BAA2B,CAC1B,IACA,KAED,0BAA2B,CAC1B,IACA,KAED,wBAAyB,CACxB,KACA,KAED,8BAA+B,CAC9B,KACA,KAED,4BAA6B,CAC5B,KACA,KAED,gBAAiB,CAChB,KACA,KAED,aAAc,CACb,KACA,KAED,cAAe,CACd,KACA,KAED,cAAe,CACd,KACA,KAED,YAAa,CACZ,KACA,KAED,aAAc,CACb,KACA,KAED,cAAe,CACd,KACA,KAED,mBAAoB,CACnB,KACA,KAED,gBAAiB,CAChB,KACA,KAED,wBAAyB,CACxB,KACA,KAED,0BAA2B,CAC1B,KACA,KAED,kCAAmC,CAClC,KACA,KAED,wBAAyB,CACxB,KACA,KAED,gCAAiC,CAChC,KACA,KAED,iBAAkB,CACjB,KACA,KAED,gBAAiB,CAChB,KACA,KAED,gBAAiB,CAChB,KACA,KAED,0BAA2B,CAC1B,KACA,KAED,sBAAuB,CACtB,KACA,KAED,kBAAmB,CAClB,KACA,KAED,eAAgB,CACf,KACA,KAED,iBAAkB,CACjB,KACA,KAED,qBAAsB,CACrB,KACA,KAED,gBAAiB,CAChB,KACA,KAED,oBAAqB,CACpB,KACA,KAED,gBAAiB,CAChB,KACA,KAED,0BAA2B,CAC1B,KACA,KAED,gBAAiB,CAChB,KACA,KAED,wBAAyB,CACxB,KACA,KAED,cAAe,CACd,KACA,MAGF,SAASC,EAAoBC,GAC5B,IAAIC,EAAoBC,EAAEJ,EAAKE,GAC9B,OAAOG,QAAQC,UAAUC,MAAK,WAC7B,IAAIC,EAAI,IAAIC,MAAM,uBAAyBP,EAAM,KAEjD,MADAM,EAAEE,KAAO,mBACHF,CACP,IAGD,IAAIG,EAAMX,EAAIE,GAAMU,EAAKD,EAAI,GAC7B,OAAON,QAAQY,IAAIN,EAAIO,MAAM,GAAGlB,IAAIG,EAAoBK,IAAID,MAAK,WAChE,OAAOJ,EAAoBS,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","file":"static/js/main.e2f7165e.chunk.js","sourcesContent":["var map = {\n\t\"./amplify-amazon-button_5.entry.js\": [\n\t\t582,\n\t\t440\n\t],\n\t\"./amplify-auth-fields_9.entry.js\": [\n\t\t583,\n\t\t441\n\t],\n\t\"./amplify-authenticator.entry.js\": [\n\t\t584,\n\t\t429\n\t],\n\t\"./amplify-button_3.entry.js\": [\n\t\t585,\n\t\t442\n\t],\n\t\"./amplify-chatbot.entry.js\": [\n\t\t586,\n\t\t428\n\t],\n\t\"./amplify-checkbox.entry.js\": [\n\t\t587,\n\t\t443\n\t],\n\t\"./amplify-confirm-sign-in_7.entry.js\": [\n\t\t588,\n\t\t430\n\t],\n\t\"./amplify-container.entry.js\": [\n\t\t589,\n\t\t444\n\t],\n\t\"./amplify-federated-buttons_2.entry.js\": [\n\t\t590,\n\t\t445\n\t],\n\t\"./amplify-federated-sign-in.entry.js\": [\n\t\t591,\n\t\t446\n\t],\n\t\"./amplify-form-field_4.entry.js\": [\n\t\t592,\n\t\t447\n\t],\n\t\"./amplify-greetings.entry.js\": [\n\t\t593,\n\t\t448\n\t],\n\t\"./amplify-icon-button.entry.js\": [\n\t\t594,\n\t\t449\n\t],\n\t\"./amplify-icon.entry.js\": [\n\t\t595,\n\t\t431\n\t],\n\t\"./amplify-link.entry.js\": [\n\t\t596,\n\t\t450\n\t],\n\t\"./amplify-nav_2.entry.js\": [\n\t\t597,\n\t\t451\n\t],\n\t\"./amplify-photo-picker.entry.js\": [\n\t\t598,\n\t\t452\n\t],\n\t\"./amplify-picker.entry.js\": [\n\t\t599,\n\t\t453\n\t],\n\t\"./amplify-radio-button_2.entry.js\": [\n\t\t600,\n\t\t432\n\t],\n\t\"./amplify-s3-album.entry.js\": [\n\t\t601,\n\t\t433\n\t],\n\t\"./amplify-s3-image-picker.entry.js\": [\n\t\t602,\n\t\t434\n\t],\n\t\"./amplify-s3-image.entry.js\": [\n\t\t603,\n\t\t435\n\t],\n\t\"./amplify-s3-text-picker.entry.js\": [\n\t\t604,\n\t\t436\n\t],\n\t\"./amplify-s3-text.entry.js\": [\n\t\t605,\n\t\t437\n\t],\n\t\"./amplify-select-mfa-type.entry.js\": [\n\t\t606,\n\t\t454\n\t],\n\t\"./amplify-sign-in-button.entry.js\": [\n\t\t607,\n\t\t438\n\t],\n\t\"./amplify-toast.entry.js\": [\n\t\t608,\n\t\t455\n\t],\n\t\"./amplify-tooltip.entry.js\": [\n\t\t609,\n\t\t456\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn __webpack_require__.e(ids[1]).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 341;\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./accessibility.js\": [\n\t\t610,\n\t\t0\n\t],\n\t\"./aggregate.js\": [\n\t\t611,\n\t\t1\n\t],\n\t\"./alert.js\": [\n\t\t612,\n\t\t2\n\t],\n\t\"./analyze_event.js\": [\n\t\t613,\n\t\t3\n\t],\n\t\"./annotation.js\": [\n\t\t614,\n\t\t4\n\t],\n\t\"./apm_trace.js\": [\n\t\t615,\n\t\t5\n\t],\n\t\"./app_add_data.js\": [\n\t\t616,\n\t\t6\n\t],\n\t\"./app_advanced_settings.js\": [\n\t\t617,\n\t\t7\n\t],\n\t\"./app_apm.js\": [\n\t\t618,\n\t\t8\n\t],\n\t\"./app_app_search.js\": [\n\t\t619,\n\t\t9\n\t],\n\t\"./app_auditbeat.js\": [\n\t\t620,\n\t\t10\n\t],\n\t\"./app_canvas.js\": [\n\t\t621,\n\t\t11\n\t],\n\t\"./app_code.js\": [\n\t\t622,\n\t\t12\n\t],\n\t\"./app_console.js\": [\n\t\t623,\n\t\t13\n\t],\n\t\"./app_cross_cluster_replication.js\": [\n\t\t624,\n\t\t14\n\t],\n\t\"./app_dashboard.js\": [\n\t\t625,\n\t\t15\n\t],\n\t\"./app_devtools.js\": [\n\t\t626,\n\t\t16\n\t],\n\t\"./app_discover.js\": [\n\t\t627,\n\t\t17\n\t],\n\t\"./app_ems.js\": [\n\t\t628,\n\t\t18\n\t],\n\t\"./app_filebeat.js\": [\n\t\t629,\n\t\t19\n\t],\n\t\"./app_gis.js\": [\n\t\t630,\n\t\t20\n\t],\n\t\"./app_graph.js\": [\n\t\t631,\n\t\t21\n\t],\n\t\"./app_grok.js\": [\n\t\t632,\n\t\t22\n\t],\n\t\"./app_heartbeat.js\": [\n\t\t633,\n\t\t23\n\t],\n\t\"./app_index_management.js\": [\n\t\t634,\n\t\t24\n\t],\n\t\"./app_index_pattern.js\": [\n\t\t635,\n\t\t25\n\t],\n\t\"./app_index_rollup.js\": [\n\t\t636,\n\t\t26\n\t],\n\t\"./app_lens.js\": [\n\t\t637,\n\t\t27\n\t],\n\t\"./app_logs.js\": [\n\t\t638,\n\t\t28\n\t],\n\t\"./app_management.js\": [\n\t\t639,\n\t\t29\n\t],\n\t\"./app_metricbeat.js\": [\n\t\t640,\n\t\t30\n\t],\n\t\"./app_metrics.js\": [\n\t\t641,\n\t\t31\n\t],\n\t\"./app_ml.js\": [\n\t\t642,\n\t\t32\n\t],\n\t\"./app_monitoring.js\": [\n\t\t643,\n\t\t33\n\t],\n\t\"./app_notebook.js\": [\n\t\t644,\n\t\t34\n\t],\n\t\"./app_packetbeat.js\": [\n\t\t645,\n\t\t35\n\t],\n\t\"./app_pipeline.js\": [\n\t\t646,\n\t\t36\n\t],\n\t\"./app_recently_viewed.js\": [\n\t\t647,\n\t\t37\n\t],\n\t\"./app_reporting.js\": [\n\t\t648,\n\t\t38\n\t],\n\t\"./app_saved_objects.js\": [\n\t\t649,\n\t\t39\n\t],\n\t\"./app_search_profiler.js\": [\n\t\t650,\n\t\t40\n\t],\n\t\"./app_security.js\": [\n\t\t651,\n\t\t41\n\t],\n\t\"./app_security_analytics.js\": [\n\t\t652,\n\t\t42\n\t],\n\t\"./app_spaces.js\": [\n\t\t653,\n\t\t43\n\t],\n\t\"./app_sql.js\": [\n\t\t654,\n\t\t44\n\t],\n\t\"./app_timelion.js\": [\n\t\t655,\n\t\t45\n\t],\n\t\"./app_upgrade_assistant.js\": [\n\t\t656,\n\t\t46\n\t],\n\t\"./app_uptime.js\": [\n\t\t657,\n\t\t47\n\t],\n\t\"./app_users_roles.js\": [\n\t\t658,\n\t\t48\n\t],\n\t\"./app_visualize.js\": [\n\t\t659,\n\t\t49\n\t],\n\t\"./app_watches.js\": [\n\t\t660,\n\t\t50\n\t],\n\t\"./app_workplace_search.js\": [\n\t\t661,\n\t\t51\n\t],\n\t\"./apps.js\": [\n\t\t662,\n\t\t52\n\t],\n\t\"./arrow_down.js\": [\n\t\t663,\n\t\t53\n\t],\n\t\"./arrow_left.js\": [\n\t\t664,\n\t\t54\n\t],\n\t\"./arrow_right.js\": [\n\t\t665,\n\t\t55\n\t],\n\t\"./arrow_up.js\": [\n\t\t666,\n\t\t56\n\t],\n\t\"./asterisk.js\": [\n\t\t667,\n\t\t57\n\t],\n\t\"./beaker.js\": [\n\t\t668,\n\t\t58\n\t],\n\t\"./bell.js\": [\n\t\t669,\n\t\t59\n\t],\n\t\"./bellSlash.js\": [\n\t\t670,\n\t\t60\n\t],\n\t\"./bolt.js\": [\n\t\t671,\n\t\t61\n\t],\n\t\"./boxes_horizontal.js\": [\n\t\t672,\n\t\t62\n\t],\n\t\"./boxes_vertical.js\": [\n\t\t673,\n\t\t63\n\t],\n\t\"./branch.js\": [\n\t\t674,\n\t\t64\n\t],\n\t\"./broom.js\": [\n\t\t675,\n\t\t65\n\t],\n\t\"./brush.js\": [\n\t\t676,\n\t\t66\n\t],\n\t\"./bug.js\": [\n\t\t677,\n\t\t67\n\t],\n\t\"./bullseye.js\": [\n\t\t678,\n\t\t68\n\t],\n\t\"./calendar.js\": [\n\t\t679,\n\t\t69\n\t],\n\t\"./check.js\": [\n\t\t680,\n\t\t70\n\t],\n\t\"./checkInCircleFilled.js\": [\n\t\t681,\n\t\t71\n\t],\n\t\"./cheer.js\": [\n\t\t682,\n\t\t72\n\t],\n\t\"./clock.js\": [\n\t\t683,\n\t\t73\n\t],\n\t\"./cloudDrizzle.js\": [\n\t\t684,\n\t\t74\n\t],\n\t\"./cloudStormy.js\": [\n\t\t685,\n\t\t75\n\t],\n\t\"./cloudSunny.js\": [\n\t\t686,\n\t\t76\n\t],\n\t\"./color.js\": [\n\t\t687,\n\t\t77\n\t],\n\t\"./compute.js\": [\n\t\t688,\n\t\t78\n\t],\n\t\"./console.js\": [\n\t\t689,\n\t\t79\n\t],\n\t\"./continuityAbove.js\": [\n\t\t690,\n\t\t80\n\t],\n\t\"./continuityAboveBelow.js\": [\n\t\t691,\n\t\t81\n\t],\n\t\"./continuityBelow.js\": [\n\t\t692,\n\t\t82\n\t],\n\t\"./continuityWithin.js\": [\n\t\t693,\n\t\t83\n\t],\n\t\"./controls_horizontal.js\": [\n\t\t694,\n\t\t84\n\t],\n\t\"./controls_vertical.js\": [\n\t\t695,\n\t\t85\n\t],\n\t\"./copy.js\": [\n\t\t696,\n\t\t86\n\t],\n\t\"./copy_clipboard.js\": [\n\t\t697,\n\t\t87\n\t],\n\t\"./cross.js\": [\n\t\t698,\n\t\t88\n\t],\n\t\"./crossInACircleFilled.js\": [\n\t\t699,\n\t\t89\n\t],\n\t\"./crosshairs.js\": [\n\t\t700,\n\t\t90\n\t],\n\t\"./currency.js\": [\n\t\t701,\n\t\t91\n\t],\n\t\"./cut.js\": [\n\t\t702,\n\t\t92\n\t],\n\t\"./database.js\": [\n\t\t703,\n\t\t93\n\t],\n\t\"./document.js\": [\n\t\t704,\n\t\t94\n\t],\n\t\"./documentEdit.js\": [\n\t\t705,\n\t\t95\n\t],\n\t\"./documentation.js\": [\n\t\t706,\n\t\t96\n\t],\n\t\"./documents.js\": [\n\t\t707,\n\t\t97\n\t],\n\t\"./dot.js\": [\n\t\t708,\n\t\t98\n\t],\n\t\"./download.js\": [\n\t\t709,\n\t\t99\n\t],\n\t\"./editorDistributeHorizontal.js\": [\n\t\t710,\n\t\t100\n\t],\n\t\"./editorDistributeVertical.js\": [\n\t\t711,\n\t\t101\n\t],\n\t\"./editorItemAlignBottom.js\": [\n\t\t712,\n\t\t102\n\t],\n\t\"./editorItemAlignCenter.js\": [\n\t\t713,\n\t\t103\n\t],\n\t\"./editorItemAlignLeft.js\": [\n\t\t714,\n\t\t104\n\t],\n\t\"./editorItemAlignMiddle.js\": [\n\t\t715,\n\t\t105\n\t],\n\t\"./editorItemAlignRight.js\": [\n\t\t716,\n\t\t106\n\t],\n\t\"./editorItemAlignTop.js\": [\n\t\t717,\n\t\t107\n\t],\n\t\"./editorPositionBottomLeft.js\": [\n\t\t718,\n\t\t108\n\t],\n\t\"./editorPositionBottomRight.js\": [\n\t\t719,\n\t\t109\n\t],\n\t\"./editorPositionTopLeft.js\": [\n\t\t720,\n\t\t110\n\t],\n\t\"./editorPositionTopRight.js\": [\n\t\t721,\n\t\t111\n\t],\n\t\"./editor_align_center.js\": [\n\t\t722,\n\t\t112\n\t],\n\t\"./editor_align_left.js\": [\n\t\t723,\n\t\t113\n\t],\n\t\"./editor_align_right.js\": [\n\t\t724,\n\t\t114\n\t],\n\t\"./editor_bold.js\": [\n\t\t725,\n\t\t115\n\t],\n\t\"./editor_code_block.js\": [\n\t\t726,\n\t\t116\n\t],\n\t\"./editor_comment.js\": [\n\t\t727,\n\t\t117\n\t],\n\t\"./editor_heading.js\": [\n\t\t728,\n\t\t118\n\t],\n\t\"./editor_italic.js\": [\n\t\t729,\n\t\t119\n\t],\n\t\"./editor_link.js\": [\n\t\t730,\n\t\t120\n\t],\n\t\"./editor_ordered_list.js\": [\n\t\t731,\n\t\t121\n\t],\n\t\"./editor_redo.js\": [\n\t\t732,\n\t\t122\n\t],\n\t\"./editor_strike.js\": [\n\t\t733,\n\t\t123\n\t],\n\t\"./editor_table.js\": [\n\t\t734,\n\t\t124\n\t],\n\t\"./editor_underline.js\": [\n\t\t735,\n\t\t125\n\t],\n\t\"./editor_undo.js\": [\n\t\t736,\n\t\t126\n\t],\n\t\"./editor_unordered_list.js\": [\n\t\t737,\n\t\t127\n\t],\n\t\"./email.js\": [\n\t\t738,\n\t\t128\n\t],\n\t\"./empty.js\": [\n\t\t126\n\t],\n\t\"./eql.js\": [\n\t\t739,\n\t\t129\n\t],\n\t\"./eraser.js\": [\n\t\t740,\n\t\t130\n\t],\n\t\"./exit.js\": [\n\t\t741,\n\t\t131\n\t],\n\t\"./expand.js\": [\n\t\t742,\n\t\t132\n\t],\n\t\"./expandMini.js\": [\n\t\t743,\n\t\t133\n\t],\n\t\"./export.js\": [\n\t\t744,\n\t\t134\n\t],\n\t\"./eye.js\": [\n\t\t745,\n\t\t135\n\t],\n\t\"./eye_closed.js\": [\n\t\t746,\n\t\t136\n\t],\n\t\"./faceNeutral.js\": [\n\t\t747,\n\t\t137\n\t],\n\t\"./face_happy.js\": [\n\t\t748,\n\t\t138\n\t],\n\t\"./face_neutral.js\": [\n\t\t749,\n\t\t139\n\t],\n\t\"./face_sad.js\": [\n\t\t750,\n\t\t140\n\t],\n\t\"./filter.js\": [\n\t\t751,\n\t\t141\n\t],\n\t\"./flag.js\": [\n\t\t752,\n\t\t142\n\t],\n\t\"./fold.js\": [\n\t\t753,\n\t\t143\n\t],\n\t\"./folder_check.js\": [\n\t\t754,\n\t\t144\n\t],\n\t\"./folder_closed.js\": [\n\t\t755,\n\t\t145\n\t],\n\t\"./folder_exclamation.js\": [\n\t\t756,\n\t\t146\n\t],\n\t\"./folder_open.js\": [\n\t\t757,\n\t\t147\n\t],\n\t\"./frameNext.js\": [\n\t\t758,\n\t\t148\n\t],\n\t\"./framePrevious.js\": [\n\t\t759,\n\t\t149\n\t],\n\t\"./fullScreenExit.js\": [\n\t\t760,\n\t\t150\n\t],\n\t\"./full_screen.js\": [\n\t\t761,\n\t\t151\n\t],\n\t\"./function.js\": [\n\t\t762,\n\t\t152\n\t],\n\t\"./gear.js\": [\n\t\t763,\n\t\t153\n\t],\n\t\"./glasses.js\": [\n\t\t764,\n\t\t154\n\t],\n\t\"./globe.js\": [\n\t\t765,\n\t\t155\n\t],\n\t\"./grab.js\": [\n\t\t766,\n\t\t156\n\t],\n\t\"./grab_horizontal.js\": [\n\t\t767,\n\t\t157\n\t],\n\t\"./grid.js\": [\n\t\t768,\n\t\t158\n\t],\n\t\"./heart.js\": [\n\t\t769,\n\t\t159\n\t],\n\t\"./heatmap.js\": [\n\t\t770,\n\t\t160\n\t],\n\t\"./help.js\": [\n\t\t771,\n\t\t161\n\t],\n\t\"./home.js\": [\n\t\t772,\n\t\t162\n\t],\n\t\"./iInCircle.js\": [\n\t\t773,\n\t\t163\n\t],\n\t\"./image.js\": [\n\t\t774,\n\t\t164\n\t],\n\t\"./import.js\": [\n\t\t775,\n\t\t165\n\t],\n\t\"./index_close.js\": [\n\t\t776,\n\t\t166\n\t],\n\t\"./index_edit.js\": [\n\t\t777,\n\t\t167\n\t],\n\t\"./index_flush.js\": [\n\t\t778,\n\t\t168\n\t],\n\t\"./index_mapping.js\": [\n\t\t779,\n\t\t169\n\t],\n\t\"./index_open.js\": [\n\t\t780,\n\t\t170\n\t],\n\t\"./index_runtime.js\": [\n\t\t781,\n\t\t171\n\t],\n\t\"./index_settings.js\": [\n\t\t782,\n\t\t172\n\t],\n\t\"./inputOutput.js\": [\n\t\t783,\n\t\t173\n\t],\n\t\"./inspect.js\": [\n\t\t784,\n\t\t174\n\t],\n\t\"./invert.js\": [\n\t\t785,\n\t\t175\n\t],\n\t\"./ip.js\": [\n\t\t786,\n\t\t176\n\t],\n\t\"./keyboard_shortcut.js\": [\n\t\t787,\n\t\t177\n\t],\n\t\"./kql_field.js\": [\n\t\t788,\n\t\t178\n\t],\n\t\"./kql_function.js\": [\n\t\t789,\n\t\t179\n\t],\n\t\"./kql_operand.js\": [\n\t\t790,\n\t\t180\n\t],\n\t\"./kql_selector.js\": [\n\t\t791,\n\t\t181\n\t],\n\t\"./kql_value.js\": [\n\t\t792,\n\t\t182\n\t],\n\t\"./layers.js\": [\n\t\t793,\n\t\t183\n\t],\n\t\"./link.js\": [\n\t\t794,\n\t\t184\n\t],\n\t\"./list.js\": [\n\t\t795,\n\t\t185\n\t],\n\t\"./list_add.js\": [\n\t\t796,\n\t\t186\n\t],\n\t\"./lock.js\": [\n\t\t797,\n\t\t187\n\t],\n\t\"./lockOpen.js\": [\n\t\t798,\n\t\t188\n\t],\n\t\"./logo_aerospike.js\": [\n\t\t799,\n\t\t189\n\t],\n\t\"./logo_apache.js\": [\n\t\t800,\n\t\t190\n\t],\n\t\"./logo_app_search.js\": [\n\t\t801,\n\t\t191\n\t],\n\t\"./logo_aws.js\": [\n\t\t802,\n\t\t192\n\t],\n\t\"./logo_aws_mono.js\": [\n\t\t803,\n\t\t193\n\t],\n\t\"./logo_azure.js\": [\n\t\t804,\n\t\t194\n\t],\n\t\"./logo_azure_mono.js\": [\n\t\t805,\n\t\t195\n\t],\n\t\"./logo_beats.js\": [\n\t\t806,\n\t\t196\n\t],\n\t\"./logo_business_analytics.js\": [\n\t\t807,\n\t\t197\n\t],\n\t\"./logo_ceph.js\": [\n\t\t808,\n\t\t198\n\t],\n\t\"./logo_cloud.js\": [\n\t\t809,\n\t\t199\n\t],\n\t\"./logo_cloud_ece.js\": [\n\t\t810,\n\t\t200\n\t],\n\t\"./logo_code.js\": [\n\t\t811,\n\t\t201\n\t],\n\t\"./logo_codesandbox.js\": [\n\t\t812,\n\t\t202\n\t],\n\t\"./logo_couchbase.js\": [\n\t\t813,\n\t\t203\n\t],\n\t\"./logo_docker.js\": [\n\t\t814,\n\t\t204\n\t],\n\t\"./logo_dropwizard.js\": [\n\t\t815,\n\t\t205\n\t],\n\t\"./logo_elastic.js\": [\n\t\t816,\n\t\t206\n\t],\n\t\"./logo_elastic_stack.js\": [\n\t\t817,\n\t\t207\n\t],\n\t\"./logo_elasticsearch.js\": [\n\t\t818,\n\t\t208\n\t],\n\t\"./logo_enterprise_search.js\": [\n\t\t819,\n\t\t209\n\t],\n\t\"./logo_etcd.js\": [\n\t\t820,\n\t\t210\n\t],\n\t\"./logo_gcp.js\": [\n\t\t821,\n\t\t211\n\t],\n\t\"./logo_gcp_mono.js\": [\n\t\t822,\n\t\t212\n\t],\n\t\"./logo_github.js\": [\n\t\t823,\n\t\t213\n\t],\n\t\"./logo_gmail.js\": [\n\t\t824,\n\t\t214\n\t],\n\t\"./logo_golang.js\": [\n\t\t825,\n\t\t215\n\t],\n\t\"./logo_google_g.js\": [\n\t\t826,\n\t\t216\n\t],\n\t\"./logo_haproxy.js\": [\n\t\t827,\n\t\t217\n\t],\n\t\"./logo_ibm.js\": [\n\t\t828,\n\t\t218\n\t],\n\t\"./logo_ibm_mono.js\": [\n\t\t829,\n\t\t219\n\t],\n\t\"./logo_kafka.js\": [\n\t\t830,\n\t\t220\n\t],\n\t\"./logo_kibana.js\": [\n\t\t831,\n\t\t221\n\t],\n\t\"./logo_kubernetes.js\": [\n\t\t832,\n\t\t222\n\t],\n\t\"./logo_logging.js\": [\n\t\t833,\n\t\t223\n\t],\n\t\"./logo_logstash.js\": [\n\t\t834,\n\t\t224\n\t],\n\t\"./logo_maps.js\": [\n\t\t835,\n\t\t225\n\t],\n\t\"./logo_memcached.js\": [\n\t\t836,\n\t\t226\n\t],\n\t\"./logo_metrics.js\": [\n\t\t837,\n\t\t227\n\t],\n\t\"./logo_mongodb.js\": [\n\t\t838,\n\t\t228\n\t],\n\t\"./logo_mysql.js\": [\n\t\t839,\n\t\t229\n\t],\n\t\"./logo_nginx.js\": [\n\t\t840,\n\t\t230\n\t],\n\t\"./logo_observability.js\": [\n\t\t841,\n\t\t231\n\t],\n\t\"./logo_osquery.js\": [\n\t\t842,\n\t\t232\n\t],\n\t\"./logo_php.js\": [\n\t\t843,\n\t\t233\n\t],\n\t\"./logo_postgres.js\": [\n\t\t844,\n\t\t234\n\t],\n\t\"./logo_prometheus.js\": [\n\t\t845,\n\t\t235\n\t],\n\t\"./logo_rabbitmq.js\": [\n\t\t846,\n\t\t236\n\t],\n\t\"./logo_redis.js\": [\n\t\t847,\n\t\t237\n\t],\n\t\"./logo_security.js\": [\n\t\t848,\n\t\t238\n\t],\n\t\"./logo_site_search.js\": [\n\t\t849,\n\t\t239\n\t],\n\t\"./logo_sketch.js\": [\n\t\t850,\n\t\t240\n\t],\n\t\"./logo_slack.js\": [\n\t\t851,\n\t\t241\n\t],\n\t\"./logo_uptime.js\": [\n\t\t852,\n\t\t242\n\t],\n\t\"./logo_webhook.js\": [\n\t\t853,\n\t\t243\n\t],\n\t\"./logo_windows.js\": [\n\t\t854,\n\t\t244\n\t],\n\t\"./logo_workplace_search.js\": [\n\t\t855,\n\t\t245\n\t],\n\t\"./logstash_filter.js\": [\n\t\t856,\n\t\t246\n\t],\n\t\"./logstash_if.js\": [\n\t\t857,\n\t\t247\n\t],\n\t\"./logstash_input.js\": [\n\t\t858,\n\t\t248\n\t],\n\t\"./logstash_output.js\": [\n\t\t859,\n\t\t249\n\t],\n\t\"./logstash_queue.js\": [\n\t\t860,\n\t\t250\n\t],\n\t\"./magnet.js\": [\n\t\t861,\n\t\t251\n\t],\n\t\"./magnifyWithMinus.js\": [\n\t\t862,\n\t\t252\n\t],\n\t\"./magnifyWithPlus.js\": [\n\t\t863,\n\t\t253\n\t],\n\t\"./map_marker.js\": [\n\t\t864,\n\t\t254\n\t],\n\t\"./memory.js\": [\n\t\t865,\n\t\t255\n\t],\n\t\"./menu.js\": [\n\t\t866,\n\t\t256\n\t],\n\t\"./menuDown.js\": [\n\t\t867,\n\t\t257\n\t],\n\t\"./menuLeft.js\": [\n\t\t868,\n\t\t258\n\t],\n\t\"./menuRight.js\": [\n\t\t869,\n\t\t259\n\t],\n\t\"./menuUp.js\": [\n\t\t870,\n\t\t260\n\t],\n\t\"./merge.js\": [\n\t\t871,\n\t\t261\n\t],\n\t\"./minimize.js\": [\n\t\t872,\n\t\t262\n\t],\n\t\"./minus.js\": [\n\t\t873,\n\t\t263\n\t],\n\t\"./minus_in_circle.js\": [\n\t\t874,\n\t\t264\n\t],\n\t\"./minus_in_circle_filled.js\": [\n\t\t875,\n\t\t265\n\t],\n\t\"./ml_classification_job.js\": [\n\t\t876,\n\t\t266\n\t],\n\t\"./ml_create_advanced_job.js\": [\n\t\t877,\n\t\t267\n\t],\n\t\"./ml_create_multi_metric_job.js\": [\n\t\t878,\n\t\t268\n\t],\n\t\"./ml_create_population_job.js\": [\n\t\t879,\n\t\t269\n\t],\n\t\"./ml_create_single_metric_job.js\": [\n\t\t880,\n\t\t270\n\t],\n\t\"./ml_data_visualizer.js\": [\n\t\t881,\n\t\t271\n\t],\n\t\"./ml_outlier_detection_job.js\": [\n\t\t882,\n\t\t272\n\t],\n\t\"./ml_regression_job.js\": [\n\t\t883,\n\t\t273\n\t],\n\t\"./mobile.js\": [\n\t\t884,\n\t\t274\n\t],\n\t\"./moon.js\": [\n\t\t885,\n\t\t275\n\t],\n\t\"./nested.js\": [\n\t\t886,\n\t\t276\n\t],\n\t\"./node.js\": [\n\t\t887,\n\t\t277\n\t],\n\t\"./number.js\": [\n\t\t888,\n\t\t278\n\t],\n\t\"./offline.js\": [\n\t\t889,\n\t\t279\n\t],\n\t\"./online.js\": [\n\t\t890,\n\t\t280\n\t],\n\t\"./package.js\": [\n\t\t891,\n\t\t281\n\t],\n\t\"./pageSelect.js\": [\n\t\t892,\n\t\t282\n\t],\n\t\"./pagesSelect.js\": [\n\t\t893,\n\t\t283\n\t],\n\t\"./paint.js\": [\n\t\t894,\n\t\t284\n\t],\n\t\"./paper_clip.js\": [\n\t\t895,\n\t\t285\n\t],\n\t\"./partial.js\": [\n\t\t896,\n\t\t286\n\t],\n\t\"./pause.js\": [\n\t\t897,\n\t\t287\n\t],\n\t\"./pencil.js\": [\n\t\t898,\n\t\t288\n\t],\n\t\"./percent.js\": [\n\t\t899,\n\t\t289\n\t],\n\t\"./pin.js\": [\n\t\t900,\n\t\t290\n\t],\n\t\"./pin_filled.js\": [\n\t\t901,\n\t\t291\n\t],\n\t\"./play.js\": [\n\t\t902,\n\t\t292\n\t],\n\t\"./playFilled.js\": [\n\t\t903,\n\t\t293\n\t],\n\t\"./plus.js\": [\n\t\t904,\n\t\t294\n\t],\n\t\"./plus_in_circle.js\": [\n\t\t905,\n\t\t295\n\t],\n\t\"./plus_in_circle_filled.js\": [\n\t\t906,\n\t\t296\n\t],\n\t\"./popout.js\": [\n\t\t907,\n\t\t297\n\t],\n\t\"./push.js\": [\n\t\t908,\n\t\t298\n\t],\n\t\"./question_in_circle.js\": [\n\t\t909,\n\t\t299\n\t],\n\t\"./quote.js\": [\n\t\t910,\n\t\t300\n\t],\n\t\"./refresh.js\": [\n\t\t911,\n\t\t301\n\t],\n\t\"./reporter.js\": [\n\t\t912,\n\t\t302\n\t],\n\t\"./return_key.js\": [\n\t\t913,\n\t\t303\n\t],\n\t\"./save.js\": [\n\t\t914,\n\t\t304\n\t],\n\t\"./scale.js\": [\n\t\t915,\n\t\t305\n\t],\n\t\"./search.js\": [\n\t\t916,\n\t\t306\n\t],\n\t\"./securitySignal.js\": [\n\t\t917,\n\t\t307\n\t],\n\t\"./securitySignalDetected.js\": [\n\t\t918,\n\t\t308\n\t],\n\t\"./securitySignalResolved.js\": [\n\t\t919,\n\t\t309\n\t],\n\t\"./shard.js\": [\n\t\t920,\n\t\t310\n\t],\n\t\"./share.js\": [\n\t\t921,\n\t\t311\n\t],\n\t\"./snowflake.js\": [\n\t\t922,\n\t\t312\n\t],\n\t\"./sortLeft.js\": [\n\t\t923,\n\t\t313\n\t],\n\t\"./sortRight.js\": [\n\t\t924,\n\t\t314\n\t],\n\t\"./sort_down.js\": [\n\t\t925,\n\t\t315\n\t],\n\t\"./sort_up.js\": [\n\t\t926,\n\t\t316\n\t],\n\t\"./sortable.js\": [\n\t\t927,\n\t\t317\n\t],\n\t\"./starPlusEmpty.js\": [\n\t\t928,\n\t\t318\n\t],\n\t\"./starPlusFilled.js\": [\n\t\t929,\n\t\t319\n\t],\n\t\"./star_empty.js\": [\n\t\t930,\n\t\t320\n\t],\n\t\"./star_empty_space.js\": [\n\t\t931,\n\t\t321\n\t],\n\t\"./star_filled.js\": [\n\t\t932,\n\t\t322\n\t],\n\t\"./star_filled_space.js\": [\n\t\t933,\n\t\t323\n\t],\n\t\"./star_minus_empty.js\": [\n\t\t934,\n\t\t324\n\t],\n\t\"./star_minus_filled.js\": [\n\t\t935,\n\t\t325\n\t],\n\t\"./stats.js\": [\n\t\t936,\n\t\t326\n\t],\n\t\"./stop.js\": [\n\t\t937,\n\t\t327\n\t],\n\t\"./stop_filled.js\": [\n\t\t938,\n\t\t328\n\t],\n\t\"./stop_slash.js\": [\n\t\t939,\n\t\t329\n\t],\n\t\"./storage.js\": [\n\t\t940,\n\t\t330\n\t],\n\t\"./string.js\": [\n\t\t941,\n\t\t331\n\t],\n\t\"./submodule.js\": [\n\t\t942,\n\t\t332\n\t],\n\t\"./swatch_input.js\": [\n\t\t943,\n\t\t333\n\t],\n\t\"./symlink.js\": [\n\t\t944,\n\t\t334\n\t],\n\t\"./tableOfContents.js\": [\n\t\t945,\n\t\t335\n\t],\n\t\"./table_density_compact.js\": [\n\t\t946,\n\t\t336\n\t],\n\t\"./table_density_expanded.js\": [\n\t\t947,\n\t\t337\n\t],\n\t\"./table_density_normal.js\": [\n\t\t948,\n\t\t338\n\t],\n\t\"./tag.js\": [\n\t\t949,\n\t\t339\n\t],\n\t\"./tear.js\": [\n\t\t950,\n\t\t340\n\t],\n\t\"./temperature.js\": [\n\t\t951,\n\t\t341\n\t],\n\t\"./timeline.js\": [\n\t\t952,\n\t\t342\n\t],\n\t\"./timeslider.js\": [\n\t\t953,\n\t\t343\n\t],\n\t\"./tokens/tokenAlias.js\": [\n\t\t954,\n\t\t344\n\t],\n\t\"./tokens/tokenAnnotation.js\": [\n\t\t955,\n\t\t345\n\t],\n\t\"./tokens/tokenArray.js\": [\n\t\t956,\n\t\t346\n\t],\n\t\"./tokens/tokenBinary.js\": [\n\t\t957,\n\t\t347\n\t],\n\t\"./tokens/tokenBoolean.js\": [\n\t\t958,\n\t\t348\n\t],\n\t\"./tokens/tokenClass.js\": [\n\t\t959,\n\t\t349\n\t],\n\t\"./tokens/tokenCompletionSuggester.js\": [\n\t\t960,\n\t\t350\n\t],\n\t\"./tokens/tokenConstant.js\": [\n\t\t961,\n\t\t351\n\t],\n\t\"./tokens/tokenDate.js\": [\n\t\t962,\n\t\t352\n\t],\n\t\"./tokens/tokenDenseVector.js\": [\n\t\t963,\n\t\t353\n\t],\n\t\"./tokens/tokenElement.js\": [\n\t\t964,\n\t\t354\n\t],\n\t\"./tokens/tokenEnum.js\": [\n\t\t965,\n\t\t355\n\t],\n\t\"./tokens/tokenEnumMember.js\": [\n\t\t966,\n\t\t356\n\t],\n\t\"./tokens/tokenEvent.js\": [\n\t\t967,\n\t\t357\n\t],\n\t\"./tokens/tokenException.js\": [\n\t\t968,\n\t\t358\n\t],\n\t\"./tokens/tokenField.js\": [\n\t\t969,\n\t\t359\n\t],\n\t\"./tokens/tokenFile.js\": [\n\t\t970,\n\t\t360\n\t],\n\t\"./tokens/tokenFlattened.js\": [\n\t\t971,\n\t\t361\n\t],\n\t\"./tokens/tokenFunction.js\": [\n\t\t972,\n\t\t362\n\t],\n\t\"./tokens/tokenGeo.js\": [\n\t\t973,\n\t\t363\n\t],\n\t\"./tokens/tokenHistogram.js\": [\n\t\t974,\n\t\t364\n\t],\n\t\"./tokens/tokenIP.js\": [\n\t\t975,\n\t\t365\n\t],\n\t\"./tokens/tokenInterface.js\": [\n\t\t976,\n\t\t366\n\t],\n\t\"./tokens/tokenJoin.js\": [\n\t\t977,\n\t\t367\n\t],\n\t\"./tokens/tokenKey.js\": [\n\t\t978,\n\t\t368\n\t],\n\t\"./tokens/tokenKeyword.js\": [\n\t\t979,\n\t\t369\n\t],\n\t\"./tokens/tokenMethod.js\": [\n\t\t980,\n\t\t370\n\t],\n\t\"./tokens/tokenModule.js\": [\n\t\t981,\n\t\t371\n\t],\n\t\"./tokens/tokenNamespace.js\": [\n\t\t982,\n\t\t372\n\t],\n\t\"./tokens/tokenNested.js\": [\n\t\t983,\n\t\t373\n\t],\n\t\"./tokens/tokenNull.js\": [\n\t\t984,\n\t\t374\n\t],\n\t\"./tokens/tokenNumber.js\": [\n\t\t985,\n\t\t375\n\t],\n\t\"./tokens/tokenObject.js\": [\n\t\t986,\n\t\t376\n\t],\n\t\"./tokens/tokenOperator.js\": [\n\t\t987,\n\t\t377\n\t],\n\t\"./tokens/tokenPackage.js\": [\n\t\t988,\n\t\t378\n\t],\n\t\"./tokens/tokenParameter.js\": [\n\t\t989,\n\t\t379\n\t],\n\t\"./tokens/tokenPercolator.js\": [\n\t\t990,\n\t\t380\n\t],\n\t\"./tokens/tokenProperty.js\": [\n\t\t991,\n\t\t381\n\t],\n\t\"./tokens/tokenRange.js\": [\n\t\t992,\n\t\t382\n\t],\n\t\"./tokens/tokenRankFeature.js\": [\n\t\t993,\n\t\t383\n\t],\n\t\"./tokens/tokenRankFeatures.js\": [\n\t\t994,\n\t\t384\n\t],\n\t\"./tokens/tokenRepo.js\": [\n\t\t995,\n\t\t385\n\t],\n\t\"./tokens/tokenSearchType.js\": [\n\t\t996,\n\t\t386\n\t],\n\t\"./tokens/tokenShape.js\": [\n\t\t997,\n\t\t387\n\t],\n\t\"./tokens/tokenString.js\": [\n\t\t998,\n\t\t388\n\t],\n\t\"./tokens/tokenStruct.js\": [\n\t\t999,\n\t\t389\n\t],\n\t\"./tokens/tokenSymbol.js\": [\n\t\t1000,\n\t\t390\n\t],\n\t\"./tokens/tokenText.js\": [\n\t\t1001,\n\t\t391\n\t],\n\t\"./tokens/tokenTokenCount.js\": [\n\t\t1002,\n\t\t392\n\t],\n\t\"./tokens/tokenVariable.js\": [\n\t\t1003,\n\t\t393\n\t],\n\t\"./training.js\": [\n\t\t1004,\n\t\t394\n\t],\n\t\"./trash.js\": [\n\t\t1005,\n\t\t395\n\t],\n\t\"./unfold.js\": [\n\t\t1006,\n\t\t396\n\t],\n\t\"./unlink.js\": [\n\t\t1007,\n\t\t397\n\t],\n\t\"./user.js\": [\n\t\t1008,\n\t\t398\n\t],\n\t\"./users.js\": [\n\t\t1009,\n\t\t399\n\t],\n\t\"./vector.js\": [\n\t\t1010,\n\t\t400\n\t],\n\t\"./videoPlayer.js\": [\n\t\t1011,\n\t\t401\n\t],\n\t\"./vis_area.js\": [\n\t\t1012,\n\t\t402\n\t],\n\t\"./vis_area_stacked.js\": [\n\t\t1013,\n\t\t403\n\t],\n\t\"./vis_bar_horizontal.js\": [\n\t\t1014,\n\t\t404\n\t],\n\t\"./vis_bar_horizontal_stacked.js\": [\n\t\t1015,\n\t\t405\n\t],\n\t\"./vis_bar_vertical.js\": [\n\t\t1016,\n\t\t406\n\t],\n\t\"./vis_bar_vertical_stacked.js\": [\n\t\t1017,\n\t\t407\n\t],\n\t\"./vis_gauge.js\": [\n\t\t1018,\n\t\t408\n\t],\n\t\"./vis_goal.js\": [\n\t\t1019,\n\t\t409\n\t],\n\t\"./vis_line.js\": [\n\t\t1020,\n\t\t410\n\t],\n\t\"./vis_map_coordinate.js\": [\n\t\t1021,\n\t\t411\n\t],\n\t\"./vis_map_region.js\": [\n\t\t1022,\n\t\t412\n\t],\n\t\"./vis_metric.js\": [\n\t\t1023,\n\t\t413\n\t],\n\t\"./vis_pie.js\": [\n\t\t1024,\n\t\t414\n\t],\n\t\"./vis_table.js\": [\n\t\t1025,\n\t\t415\n\t],\n\t\"./vis_tag_cloud.js\": [\n\t\t1026,\n\t\t416\n\t],\n\t\"./vis_text.js\": [\n\t\t1027,\n\t\t417\n\t],\n\t\"./vis_timelion.js\": [\n\t\t1028,\n\t\t418\n\t],\n\t\"./vis_vega.js\": [\n\t\t1029,\n\t\t419\n\t],\n\t\"./vis_visual_builder.js\": [\n\t\t1030,\n\t\t420\n\t],\n\t\"./wordWrap.js\": [\n\t\t1031,\n\t\t421\n\t],\n\t\"./wordWrapDisabled.js\": [\n\t\t1032,\n\t\t422\n\t],\n\t\"./wrench.js\": [\n\t\t1033,\n\t\t423\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 428;\nmodule.exports = webpackAsyncContext;","export const dropShaw = (elevation: number) => ({\r\n boxShadow: `\r\n 0 0 1px rgba(0,0,0,.12),\r\n 0 ${elevation / 4}px ${elevation}px rgba(0,0,0,.08), \r\n 0 ${elevation / 2}px ${elevation * 2}px -${elevation / 2}px rgba(0,0,0,.12)\r\n `,\r\n})\r\n\r\nexport const Gray = '#C6C6C6'\r\nexport const Green = '#4caf50'\r\nexport const LightWarning = '#8bc34a'\r\nexport const MediumWarning = '#fdd835'\r\nexport const HighWarning = '#ff9800'\r\nexport const Alert = '#ff5722'\r\nexport const Red = '#dd2c00'\r\nexport const DefaultColor = '#5b8ff9'\r\nexport const gradientOrange =\r\n 'linear-gradient(to top, rgb(255 234 172 / 90%), #e3d350)'\r\nexport const gradientBlue =\r\n 'linear-gradient(to top, rgb(221 243 223 / 38%), #3defd0)'\r\nexport const gradientGreen =\r\n 'linear-gradient(to top, rgb(172 255 172 / 90%), #50e37f)'\r\nexport const gradientRed =\r\n 'linear-gradient(to top,rgb(237 161 161 / 90%),#fd2121)'\r\nexport const sideBarWidth = 250\r\nexport const headerHeight = 60\r\n","import {\n Alert,\n Green,\n HighWarning,\n LightWarning,\n MediumWarning,\n} from '../../theme/theme'\nimport React, { CSSProperties } from 'react'\n\nexport const DefaultMarkerColor = '#00bcd4'\nexport const CssMarkerBorderSize = 5\nexport const IconSize = 30\n\nexport const K_HINT_HTML_DEFAULT_Z_INDEX = 1000000\nexport const K_SCALE_HOVER = 1.3\nexport const K_SCALE_TABLE_HOVER = 1\nexport const K_SCALE_NORMAL = 1\nexport const K_MIN_CONTRAST = 0.4\n\nexport const WidthDelta = 10\n// this is the border size of the css marker\nexport const HeightDelta = 5\nexport const CssMarkerWidth = 170\nexport const CssMarkerHeight = 60\nexport const heightRate = (Math.sqrt(2) - 1) / 2 + 1\nexport const defaultV = {\n scale: K_SCALE_NORMAL,\n hoverState: false,\n showBallonState: false,\n withText: false,\n size: {\n width: CssMarkerWidth + WidthDelta,\n height: CssMarkerHeight * heightRate + HeightDelta,\n },\n origin: { x: 0.5, y: 1 },\n}\n\nexport const calcMarkerTextStyle = (scale: number): CSSProperties => {\n const K_MAX_COLOR_VALUE = 0\n const K_MIN_COLOR_VALUE = 8\n const colorV = Math.ceil(\n K_MIN_COLOR_VALUE +\n (K_MAX_COLOR_VALUE - K_MIN_COLOR_VALUE) *\n Math.min(scale / K_SCALE_NORMAL, 1)\n )\n const colorHex = colorV.toString(16)\n const colorHTML = `#${colorHex}${colorHex}${colorHex}`\n\n return {\n width: '100%',\n textAlign: 'center',\n fontWeight: 'bold',\n fontSize: 20,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: colorHTML,\n }\n}\n\nexport const calcMarkerMarkerStyle = (\n scale: number,\n zIndexStyle: any,\n markerStyle: any\n) => {\n const contrast =\n K_MIN_CONTRAST +\n (1 - K_MIN_CONTRAST) * Math.min(scale / K_SCALE_NORMAL, 1)\n\n return {\n transform: `scale(${scale} , ${scale})`,\n WebkitTransform: `scale(${scale} , ${scale})`,\n filter: `contrast(${contrast})`,\n WebkitFilter: `contrast(${contrast})`,\n ...markerStyle,\n ...zIndexStyle,\n }\n}\n\nexport const CO2Color = (v: number) => {\n if (v < 1000) {\n return Green\n }\n if (v < 2000) {\n return LightWarning\n }\n if (v < 3000) {\n return MediumWarning\n }\n if (v < 4000) {\n return HighWarning\n }\n return Alert\n}\n\nexport const ColorPickerBySensorData = (v: number, sensor: string) => {\n switch (sensor) {\n case 'co2':\n return CO2Color(v)\n default:\n return DefaultMarkerColor\n }\n}\nexport const getMarkerHolderStyle = (\n size: { width: number; height: number },\n origin: { x: number; y: number }\n): CSSProperties => {\n const left = -size.width * origin.x\n const top = -size.height * origin.y\n return {\n position: 'absolute',\n width: size.width,\n height: size.height,\n left: left,\n top: top,\n cursor: 'pointer',\n }\n}\n\nexport const getMarkerStyle = (\n size: { width: number; height: number },\n origin: { x: number; y: number }\n) => {\n const sizeOriginX = size.width * origin.x\n const sizeOriginY = size.height * origin.y\n\n return {\n position: 'absolute',\n width: size.width,\n height: size.height,\n left: 0,\n top: 0,\n willChange: 'transform', // it looks like this setting make firefox random marker movements smaller\n // transition: 'transform 0.25s ease',\n transition: 'transform 0.25s cubic-bezier(0.485, 1.650, 0.545, 0.835)',\n transformOrigin: `${sizeOriginX}px ${sizeOriginY}px`,\n }\n}\n","import React, { ReactChild, ReactChildren } from 'react'\nimport styled from 'styled-components'\nimport {\n calcMarkerMarkerStyle,\n CssMarkerBorderSize,\n defaultV,\n getMarkerStyle,\n K_HINT_HTML_DEFAULT_Z_INDEX,\n} from './markerConfig'\ninterface CssMarkerProps {\n dead: boolean\n isHover: boolean\n width: number\n height: number\n scale: number\n children?: ReactChild | ReactChildren\n}\n\nconst CssMarker = ({\n dead,\n isHover,\n width,\n height,\n children,\n scale,\n}: CssMarkerProps) => {\n const zIndexStyle = {\n zIndex:\n Math.round(scale * 10000) +\n (isHover ? K_HINT_HTML_DEFAULT_Z_INDEX : 0),\n }\n const markerStyle = getMarkerStyle(defaultV.size, defaultV.origin)\n\n const styleMarkerMarker = calcMarkerMarkerStyle(\n scale,\n zIndexStyle,\n markerStyle\n )\n\n const markerColor = markerColorPicker(dead)\n return (\n \n \n \n {children}\n \n \n )\n}\n\nexport default CssMarker\n\nconst markerColorPicker = (dead: boolean) => {\n if (dead) {\n return 'red'\n } else {\n return '#00cae9'\n }\n}\nconst Wrapper = styled.div`\n position: relative;\n z-index: 0;\n`\nconst Content = styled.div`\n background-color: #fff;\n border-radius: 15px;\n`\nconst Foot = styled.div`\n border-radius: 50% 50% 50% 0;\n position: absolute;\n transform: rotate(-45deg);\n top: ${CssMarkerBorderSize}px;\n z-index: -1;\n`\n","export default __webpack_public_path__ + \"static/media/sensor_g.09cd3190.svg\";","export default __webpack_public_path__ + \"static/media/co2.fd1e5e02.png\";","export default __webpack_public_path__ + \"static/media/ullage.f78f8f42.png\";","export default __webpack_public_path__ + \"static/media/humidity.eb322d36.png\";","import { ILastMeasure } from '../../intefaces/measure'\nimport SensorInfo from '../../assets/sensor_g.svg'\nimport React, { ReactNode } from 'react'\nimport {\n calcMarkerTextStyle,\n ColorPickerBySensorData,\n CssMarkerHeight,\n DefaultMarkerColor,\n IconSize,\n} from './markerConfig'\nimport IconCO2 from '../../assets/co2.png'\nimport IconUllage from '../../assets/ullage.png'\nimport IconHumidity from '../../assets/humidity.png'\nimport IconTemperature from '../../assets/temperature.png'\nimport styled from 'styled-components'\n\ninterface IDisplayList {\n name: string\n key: string\n icon: string\n}\nconst SensorDataDisplayList: IDisplayList[] = [\n {\n name: 'Temperature',\n key: 'temperature',\n icon: IconTemperature,\n },\n {\n name: 'Humidity',\n key: 'humidity',\n icon: IconHumidity,\n },\n {\n name: 'CO2',\n key: 'co2',\n icon: IconCO2,\n },\n {\n name: 'Ullage',\n key: 'ullage',\n icon: IconUllage,\n },\n]\n\nconst MarkerContent = ({\n pointData,\n cluster,\n numPoints,\n scale,\n}: {\n pointData: ILastMeasure\n cluster: boolean\n numPoints: number\n scale: number\n}) => {\n const textStyle = calcMarkerTextStyle(scale)\n const renderSensorData = () => {\n return SensorDataDisplayList.reduce((acc, sensor) => {\n const targetData = pointData?.[sensor.key]\n if (targetData !== undefined) {\n acc.push(\n \n \n \n {targetData\n ? Number.isInteger(targetData)\n ? targetData\n : (targetData as number).toFixed(1)\n : '/'}\n \n \n )\n }\n return acc\n }, [])\n }\n return (\n \n \n {cluster ? (\n <>\n \n {numPoints}\n \n ) : (\n \n {renderSensorData()}\n \n )}\n \n \n )\n}\n\nexport default MarkerContent\n\nconst IconWrapper = styled.img``\n","export default __webpack_public_path__ + \"static/media/temperature.107f8cf0.png\";","import React, { useState } from 'react'\nimport i18n from 'i18next'\nimport { useHistory } from 'react-router-dom'\nimport CssMarker from './CssMarker'\nimport { ILastMeasure } from '../../intefaces/measure'\nimport {\n CssMarkerHeight,\n CssMarkerWidth,\n defaultV,\n getMarkerHolderStyle,\n K_SCALE_HOVER,\n K_SCALE_NORMAL,\n} from './markerConfig'\nimport MarkerContent from './MarkerContent'\n\nconst Marker = ({\n cluster,\n numPoints,\n deviceId,\n onHover,\n onClickMarker,\n dead,\n pickedInSideBar,\n pointData,\n}: {\n cluster: boolean\n lat: number\n lng: number\n numPoints: number\n deviceId: string\n onHover: Function\n onClickMarker: Function\n pickedInSideBar: boolean\n pointData: ILastMeasure\n dead: boolean\n $hover?: boolean //passed by google map, but not so efficient\n}) => {\n const history = useHistory()\n const [isHover, setIsHover] = useState(false)\n let scale = isHover || pickedInSideBar ? K_SCALE_HOVER : K_SCALE_NORMAL\n const markerHolderStyle = getMarkerHolderStyle(\n defaultV.size,\n defaultV.origin\n )\n\n return (\n {\n setIsHover(true)\n onHover(true)\n }}\n onMouseLeave={() => {\n setIsHover(false)\n onHover(false)\n }}\n onClickCapture={() => {\n onClickMarker()\n }}\n onDoubleClickCapture={(e: React.MouseEvent) => {\n e.preventDefault()\n if (dead || !deviceId || cluster) {\n return\n }\n history.push(`/${i18n.language}/dashboard/${deviceId}`)\n }}\n >\n \n \n \n \n )\n}\n\nexport default Marker\n","export default __webpack_public_path__ + \"static/media/sensor_r.04b76922.svg\";","import styled from 'styled-components'\r\n\r\nexport const Button = styled.div<{ large?: boolean }>`\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n width: ${({ large }) => (large ? `31ch` : '215px')};\r\n min-width: 215px;\r\n height: 26px;\r\n font-weight: 500;\r\n font-size: 14px;\r\n opacity: 1;\r\n text-align: center;\r\n color: rgba(153, 153, 153, 1);\r\n background: rgba(255, 255, 255, 1);\r\n border-radius: 4px;\r\n box-shadow: 0px 2px 10px rgb(0 0 0 / 25%);\r\n overflow: hidden;\r\n cursor: pointer;\r\n`\r\n","import React from 'react'\r\n\r\nexport const AccessTokenCtx = React.createContext('')\r\n","import React, { useContext, useEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport SensorInfo from '../assets/sensor_g.svg'\nimport SensorRed from '../assets/sensor_r.svg'\nimport { Button } from '../ui/Button'\nimport { IGeolocation } from '../intefaces/map'\nimport moment from 'moment'\nimport { AccessTokenCtx } from './Context'\nimport { useTranslation } from 'react-i18next'\nimport { useHistory, useParams } from 'react-router-dom'\n\nconst Sidebar: React.FunctionComponent<{\n defaultGeolocations?: IGeolocation[]\n disableFetchLocation?: boolean\n forceClickable?: boolean\n children?: React.ReactChild | React.ReactChildren\n zoomToPoint?: Function\n onSensorSelected?: Function\n hoverId?: string\n selectedSensor: IGeolocation\n setSelectedSensor: Function\n}> = ({\n hoverId,\n children,\n zoomToPoint,\n onSensorSelected,\n forceClickable,\n defaultGeolocations,\n disableFetchLocation,\n selectedSensor,\n setSelectedSensor,\n}) => {\n const accessToken = useContext(AccessTokenCtx)\n const { t, i18n } = useTranslation()\n const history = useHistory()\n const { deviceId } = useParams<{ deviceId: string }>()\n const [geolocations, setGeolocations] = useState([])\n const geoSource = disableFetchLocation ? defaultGeolocations : geolocations\n\n const selectOrClear = (id: string) => {\n const idToSelect = selectedSensor?.deviceId !== id ? id : ''\n setSelectedSensor(geoSource?.find((g) => g.deviceId === id))\n onSensorSelected?.(id)\n zoomToPoint?.(idToSelect)\n }\n useEffect(() => {\n // use this hook to set the data when first load\n if ((geolocations?.length ?? 0) > 0 && selectedSensor?.deviceId) {\n const selected = geolocations?.find(\n (g) => g.deviceId === selectedSensor?.deviceId\n )\n // when first load, we do not have device name loaded, we only get device id from url\n if (!selectedSensor?.deviceName) {\n setSelectedSensor(selected)\n }\n }\n }, [geolocations, selectedSensor])\n useEffect(() => {\n try {\n if (!disableFetchLocation) {\n fetch('/api/v3/devices', {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n })\n .then((res) => res.json())\n .then((data) =>\n setGeolocations(\n data.sort((a: IGeolocation, b: IGeolocation) =>\n a.deviceName < b.deviceName ? -1 : 1\n )\n )\n )\n }\n } catch (e) {\n console.error(e)\n }\n }, [accessToken, disableFetchLocation])\n useEffect(() => {\n if (deviceId) {\n document?.getElementById(deviceId)?.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'nearest',\n })\n }\n }, [deviceId])\n useEffect(() => {\n if (selectedSensor) {\n document?.getElementById(selectedSensor.deviceId)?.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'nearest',\n })\n }\n }, [selectedSensor, document.getElementById(selectedSensor?.deviceId)])\n useEffect(() => {\n if (hoverId) {\n document?.getElementById(hoverId)?.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'nearest',\n })\n }\n }, [hoverId])\n return (\n \n {zoomToPoint !== undefined ? (\n \n \n \n ) : (\n <>\n )}\n \n {t('Sensors')}\n \n \n {geoSource?.map(\n ({\n deviceName,\n deviceId,\n geoLocation: { location },\n lastMeasureAt,\n }) => {\n const dead = moment(lastMeasureAt).isBefore(\n moment().add(-3, 'day')\n )\n return (\n {\n if (forceClickable || !dead) {\n selectOrClear(deviceId)\n }\n }}\n onDoubleClick={(e: React.MouseEvent) => {\n if (!dead) {\n e.preventDefault()\n history.push(\n `/${i18n.language}/dashboard/${deviceId}`\n )\n }\n }}\n dead={!forceClickable && dead}\n hovered={hoverId === deviceId}\n >\n \n \n
\n {location ? location : deviceName}\n
\n \n {location ? deviceName : deviceId}\n \n \n \n )\n }\n )}\n
\n
\n )\n}\nexport default Sidebar\nconst Container = styled.div`\n display: flex;\n flex: 0 0 250px;\n justify-content: start;\n flex-direction: column;\n align-items: center;\n background-color: rgb(249 249 249);\n border-right: 1px solid #d6d6d6;\n overflow-y: hidden;\n height: calc(100vh - 60px);\n box-sizing: content-box;\n`\n\nconst Line = styled.div`\n margin: 10px 0;\n`\nconst SectionHeader = styled.div`\n display: flex;\n justify-content: start;\n width: 90%;\n margin: 10px 0 10px 20px;\n`\nconst SectionTitle = styled.div`\n font-weight: 500;\n font-size: 18px;\n opacity: 1;\n text-align: left;\n color: rgba(153, 153, 153, 1);\n`\nconst SectionList = styled.div`\n display: flex;\n width: 90%;\n justify-content: start;\n flex-direction: column;\n overflow-y: auto;\n`\nconst SectionContent = styled.div<{\n selected?: boolean\n dead: boolean\n hovered: boolean\n}>`\n display: flex;\n margin: 10px;\n width: 90%;\n\n padding: 10px 0;\n &:hover {\n box-shadow: 0px 1px 10px rgb(0 0 0 / 25%);\n }\n ${({ hovered }) =>\n hovered ? 'box-shadow: 0px 1px 10px rgb(0 0 0 / 25%);' : ''}\n ${({ selected }) =>\n selected ? 'box-shadow: 0px 1px 10px rgb(0 0 0 / 25%);' : ''}\n cursor:pointer;\n transition: box-shadow 0.3s ease-in-out;\n ${({ dead }) => (dead ? 'cursor:not-allowed;' : '')}\n align-items: center;\n`\nconst SensorIcon = styled.div<{ dead: boolean }>`\n width: 25px;\n height: 25px;\n margin: 0px 10px;\n background-image: url(${({ dead }) => (dead ? SensorRed : SensorInfo)});\n`\n","import { IGeolocation } from '../intefaces/map'\nimport {\n IBuilding,\n IChirpstackDevice,\n IPlan,\n} from '../component/InDoor/components/Interface'\n\nexport const fetchDevices = (accessToken: string, callback: Function) => {\n try {\n fetch('/api/v3/devices', {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n })\n .then((res) => res.json())\n .then((data) =>\n callback(\n data.sort((a: IGeolocation, b: IGeolocation) =>\n a.deviceName < b.deviceName ? -1 : 1\n )\n )\n )\n } catch (e) {\n console.error(e)\n }\n}\n\nexport const fetchBuildings = (accessToken: string, callback: Function) => {\n try {\n fetch('/api/v1/indoor/buildings', {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n })\n .then((res) => res.json())\n .then((data) => callback(data))\n } catch (e) {\n console.error(e)\n }\n}\n\nexport const fetchPlans = (accessToken: string, callback: Function) => {\n try {\n fetch('/api/v1/indoor/plans', {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n })\n .then((res) => res.json())\n .then((data) => callback(data))\n } catch (e) {\n console.error(e)\n }\n}\n\n// create building\nexport const createBuilding = (\n accessToken: string,\n building: Partial,\n callback: Function\n) => {\n try {\n fetch('/api/v1/indoor/building', {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(building),\n })\n .then((res) => res.json())\n .then(() => callback({ success: true }))\n } catch (e) {\n callback({ success: false })\n console.error(e)\n }\n}\n\nexport const createPlan = (\n accessToken: string,\n plan: Partial,\n callback: Function\n) => {\n try {\n fetch('/api/v1/indoor/plan', {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(plan),\n })\n .then((res) => res.json())\n .then(() => callback({ success: true }))\n } catch (e) {\n callback({ success: false })\n console.error(e)\n }\n}\n\nexport const updateIndoorDevice = (\n accessToken: string,\n device: Partial\n) => {\n try {\n return fetch('/api/v1/indoor/device', {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(device),\n }).then((res) => res.json())\n } catch (e) {\n console.error(e)\n }\n}\n\nexport const updateBuildingIndoorPosition = (\n accessToken: string,\n building: Partial\n) => {\n try {\n return fetch('/api/v1/indoor/building/indoor', {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(building),\n }).then((res) => res.json())\n } catch (e) {\n console.error(e)\n }\n}\n\nexport const deletePlan = (accessToken: string, planId: number) => {\n try {\n return fetch('/api/v1/indoor/plan', {\n method: 'DELETE',\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ id: planId }),\n }).then((res) => res.json())\n } catch (e) {\n console.error(e)\n }\n}\nexport const deleteBuilding = (accessToken: string, buildingId: number) => {\n try {\n return fetch('/api/v1/indoor/building', {\n method: 'DELETE',\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ id: buildingId }),\n }).then((res) => res.json())\n } catch (e) {\n console.error(e)\n }\n}\n","export default __webpack_public_path__ + \"static/media/chevron-down.1ac881ad.svg\";","export default __webpack_public_path__ + \"static/media/chevron-up.7e732acf.svg\";","import React, { useContext, useState } from 'react'\nimport { AgGridColumn, AgGridReact } from 'ag-grid-react'\nimport { CellClickedEvent, ColumnApi, GridApi } from 'ag-grid-community'\nimport * as moment from 'moment'\nimport 'ag-grid-community/dist/styles/ag-grid.css'\nimport 'ag-grid-community/dist/styles/ag-theme-alpine.css'\nimport {\n CellDoubleClickedEvent,\n GridReadyEvent,\n} from 'ag-grid-community/dist/lib/events'\nimport ChevronDown from '../assets/chevron-down.svg'\nimport ChevronUp from '../assets/chevron-up.svg'\nimport styled from 'styled-components'\nimport { Button } from '../ui/Button'\nimport { ILastMeasure } from '../intefaces/measure'\nimport { ValueFormatterParams } from 'ag-grid-community/dist/lib/entities/colDef'\n\nimport 'moment/locale/fr'\nimport { AccessTokenCtx } from './Context'\nimport { useTranslation } from 'react-i18next'\nimport { useHistory } from 'react-router-dom'\n\nmoment.locale(window?.navigator?.language ?? 'en')\n\nconst Grid = ({\n data,\n onHoverId,\n}: {\n data: ILastMeasure[]\n onHoverId: Function\n}) => {\n const { t, i18n } = useTranslation()\n const history = useHistory()\n const accessToken = useContext(AccessTokenCtx)\n const [display, setDisplay] = useState('0')\n const [gridApi, setGridApi] = useState()\n const [gridColumnApi, setGridColumnApi] = useState()\n\n const resizeGrid = () => {\n gridColumnApi?.autoSizeAllColumns()\n }\n const onGridReady = (e: GridReadyEvent) => {\n setGridApi(e.api)\n setGridColumnApi(e.columnApi)\n e.columnApi.autoSizeAllColumns()\n }\n const showData = () => {\n setDisplay(display === '0' ? '500px' : '0')\n }\n const isHidden = display === '0'\n const buttonString = t(`${isHidden ? 'Show' : 'Hide'} Data Table`)\n return (\n
\n \n \n \n\n \n \n {\n resizeGrid()\n }}\n >\n {\n history.push(\n `/${i18n.language}/dashboard/${event.data.id}`\n )\n }}\n />\n \n {\n return moment.unix(params.value).fromNow()\n }}\n resizable\n filter\n sortable\n />\n \n \n \n {\n // TODO: clean this when fully remove nemo\n return params.data.tvoc || params.data.lvoc\n }}\n resizable\n filter\n sortable\n />\n\n \n \n \n \n \n \n \n \n \n \n
\n )\n}\n\nexport default Grid\n\nconst GridWrapper = styled.div`\n position: absolute;\n right: 0;\n bottom: 0;\n`\nconst AgGridWrapper = styled.div.attrs<{ display: string }>(({ display }) => ({\n style: { maxHeight: display },\n}))<{ display: string }>`\n width: calc(100vw - 251px);\n height: 500px;\n transition: max-height 1s;\n`\n\nconst ChevronWrapper = styled.img`\n padding-top: 1px;\n margin-right: 10px;\n`\nconst ShowDataButtonWrapper = styled.div.attrs<{ bottom: string }>(\n ({ bottom }) => ({\n style: { bottom: bottom },\n })\n)<{ bottom: string }>`\n position: absolute;\n right: calc(50vw - 233px);\n transition: bottom 1s;\n`\n","export enum EMode {\n Auto,\n Relative,\n}\n\nexport interface ILastMeasure {\n id: string\n temperature: number\n humidity: number\n co2: number\n lvoc: number\n pm1: number\n pm2dot5: number\n pm10: number\n pressure: number\n formaldehyde: number\n battery: number\n ullage: number\n [x: string]: number | string\n}\n\nexport interface IDeviceMeasures {\n id: string\n temperature: IMeasureValue[]\n humidity: IMeasureValue[]\n co2: IMeasureValue[]\n lvoc: IMeasureValue[]\n pm1: IMeasureValue[]\n pm2dot5: IMeasureValue[]\n pm10: IMeasureValue[]\n pressure: IMeasureValue[]\n formaldehyde: IMeasureValue[]\n battery: IMeasureValue[]\n}\n\nexport interface IDeviceMeasuresV2 {\n id: string\n time: number\n name: string\n temperature: number\n humidity: number\n co2: number\n lvoc: number\n pm1: number\n pm2dot5: number\n pm10: number\n pressure: number\n formaldehyde: number\n battery: number\n}\n\nexport interface IChirpstackDeviceMeasures {\n id: string\n CreatedAt: string\n UpdatedAt: string\n deviceID: number\n temperature: number\n humidity: number\n motion: number\n light: number\n vdd: number\n dewpoint: number\n co2: number\n ullage?: number\n}\n\nexport interface IMeasureValue {\n time: number\n value: number\n}\n\nexport interface ILine {\n x: string | number\n y: number\n tooltipV: string\n type: string\n}\n\nexport interface IField {\n key: keyof Omit\n label: string\n unit: string\n}\n\nexport interface IData {\n x: number\n y: number\n tooltipV: string\n type: string\n}\n\nexport interface IReportData {\n co2SeriesData: { time: number; co2: number }[]\n from: string\n to: string\n week: number\n year: number\n}\n","import React, { useContext, useEffect, useState } from 'react'\nimport styled from 'styled-components'\n\nimport AtmoLogo from '../../assets/log_atmo_transparent.png'\nimport { AccessTokenCtx } from '../Context'\nimport {\n Alert,\n Green,\n HighWarning,\n LightWarning,\n MediumWarning,\n Red,\n} from '../../theme/theme'\nimport insee from './insee.json'\n\ninterface AtmoIndices {\n data: {\n echeance: number\n date_echeance: string\n indice: number\n qualificatif: string\n couleur_html: string\n date_calcul: string\n commune_insee: string\n commune_nom: string\n type_valeur: string\n sous_indices: {\n polluant_nom: string\n concentration: number\n indice: number\n }[]\n polluants_majoritaires: string[]\n }[]\n}\nconst indiceColor = (indice: number) => {\n switch (indice) {\n case 1:\n return Green\n case 2:\n return LightWarning\n case 3:\n return MediumWarning\n case 4:\n return HighWarning\n case 5:\n return Alert\n case 6:\n return Red\n case 7:\n return Red\n default:\n return '#000000'\n }\n}\n\nconst getInsee = (groups: string[]) => {\n for (const group of groups) {\n const res = insee[group as keyof typeof insee]\n if (res) {\n return res\n }\n }\n return '38185'\n}\nconst AtmoIndices = ({ groups }: { groups: string[] }) => {\n const accessToken = useContext(AccessTokenCtx)\n const [atmoIndices, setAtmoIndices] = useState()\n const fetchAtmoIndices = async () => {\n try {\n const result = await fetch(\n `/api/v1/atmo/indices?insee=${getInsee(groups)}`,\n {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'content-type': 'application/json',\n },\n method: 'GET',\n }\n )\n const data = await result.json()\n setAtmoIndices(data)\n } catch (e) {\n console.error(e)\n }\n }\n\n useEffect(() => {\n fetchAtmoIndices()\n }, [])\n const pm25 = atmoIndices?.data?.[0]?.sous_indices?.find(\n (index) => index.polluant_nom === 'PM2.5'\n )\n\n return (\n \n \n {pm25?.concentration}\n \n \n {pm25?.polluant_nom}\n \n \n \n )\n}\n\nexport default AtmoIndices\nconst IndexNumber = styled.div<{ color: string }>`\n margin-left: 10px;\n font-size: 3.5rem;\n font-weight: 600;\n color: ${(props) => props.color};\n`\nconst IndexNumberSuffix = styled.div`\n margin-left: 10px;\n font-size: 1rem;\n font-weight: 600;\n color: #fff;\n`\nconst Container = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n background: #bae1c5;\n box-shadow: 6px 6px 8px 0 #26a28f;\n border-radius: 22px;\n display: flex;\n align-items: flex-end;\n`\n\nconst Logo = styled.img`\n width: 100px;\n height: 3rem;\n border-radius: 15px;\n`\n","export default \"data:image/png;base64,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\"","import React, { useContext, useEffect, useState } from 'react'\nimport GoogleMapReact, { MapOptions, Position } from 'google-map-react'\n\nimport Marker from './Map/Marker'\nimport { IGeolocation, IPlace } from '../intefaces/map'\n// @ts-ignore\nimport supercluster from 'points-cluster'\nimport Sidebar from './SideBar'\nimport { fetchDevices } from '../store/action'\nimport Grid from './Grid'\nimport { AccessTokenCtx } from './Context'\nimport { ILastMeasure } from '../intefaces/measure'\nimport moment from 'moment'\nimport AtmoIndices from './Atmo/AtmoIndices'\n\ninterface IPlaceOrCluster {\n numPoints: number\n points: IGeolocation[]\n wx: number\n wy: number\n x: number\n y: number\n zoom: number\n}\n\nconst SimpleMap = ({\n language,\n groups,\n}: {\n language: string\n groups: string[]\n}) => {\n const accessToken = useContext(AccessTokenCtx)\n const [globalBounds, setGlobalBounds] = useState()\n const [map, setMap] = useState()\n const [maps, setMaps] = useState()\n const [zoom, setZoom] = useState(1)\n const [places, setPlaces] = useState([])\n const [placesAndCluster, setPlacesAndCluster] = useState(\n []\n )\n const [cluster, setCluster] = useState()\n const [gridData, setGridData] = useState([])\n const [hoverId, setHoverId] = useState()\n const [selectedSensor, setSelectedSensor] = useState(\n {} as IGeolocation\n )\n useEffect(() => {\n try {\n fetch('/api/v3/devices/measures/last', {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n })\n .then((res) => res.json())\n .then((data) => setGridData(data))\n } catch (e) {\n console.error(e)\n }\n }, [])\n\n useEffect(() => {\n fetchDevices(accessToken, (places: IGeolocation[]) =>\n setPlaces(\n places.filter(\n (p) =>\n p.geoLocation.latitude !== 0 &&\n p.geoLocation.longitude !== 0\n )\n )\n )\n }, [accessToken])\n useEffect(() => {\n // load cluster\n if (map !== undefined && maps !== undefined) {\n const bounds = getMapBounds(maps, places)\n setGlobalBounds(bounds)\n // Fit map to bounds\n map.fitBounds(bounds)\n const { west, south, east, north } = bounds.toJSON() as {\n [x: string]: number\n }\n getCluster(places, {\n bounds: {\n nw: { lng: west, lat: north },\n se: { lng: east, lat: south },\n },\n zoom: map.getZoom() as number,\n })\n }\n }, [map, maps, places])\n useEffect(() => {\n if (map !== undefined && maps !== undefined && cluster !== undefined) {\n setPlacesAndCluster(\n calculatePlacesAndCluster(maps, places, cluster, map.getZoom())\n )\n }\n }, [map, maps, zoom, cluster, places])\n const calculatePlacesAndCluster = (\n maps: any,\n places: IGeolocation[],\n cluster: Function,\n zoom: number\n ): IPlaceOrCluster[] => {\n const bounds = getMapBounds(maps, places)\n const { west, south, east, north } = bounds.toJSON() as {\n [x: string]: number\n }\n return cluster({\n bounds: {\n nw: { lng: west, lat: north },\n se: { lng: east, lat: south },\n },\n zoom,\n }) as IPlaceOrCluster[]\n }\n const findNextZoomToSeperateThePoints = (position: Position) => {\n const curZoom = map.getZoom()\n const p = placesAndCluster?.find(\n (p) => p.wx === position.lng && p.wy === position.lat\n )\n if (p !== undefined && cluster !== undefined) {\n const pointsInCluster = p.points\n for (let zoom = curZoom + 1; zoom <= 18; zoom++) {\n const newCluster = calculatePlacesAndCluster(\n maps,\n places,\n cluster,\n zoom\n )\n\n if (\n newCluster.some(\n (p) =>\n p.points.length < pointsInCluster.length &&\n pointsInCluster?.some((pp) =>\n p.points.some(\n (ppp) => pp.deviceName === ppp.deviceName\n )\n )\n )\n ) {\n return zoom\n }\n }\n return 18\n }\n return 1\n }\n const onClickMarker = (position: Position) => {\n if (map) {\n map.setZoom(findNextZoomToSeperateThePoints(position))\n map.setCenter(position)\n }\n }\n const zoomToPoint = (id: string) => {\n const target = places.filter((p) => p.deviceId === id)?.[0]\n if (\n id &&\n target?.geoLocation?.latitude &&\n target?.geoLocation?.latitude\n ) {\n map.setCenter({\n lat: target.geoLocation.latitude,\n lng: target.geoLocation.longitude,\n })\n map.setZoom(18)\n } else {\n map.fitBounds(globalBounds)\n }\n }\n // Return map bounds based on list of places\n const getMapBounds = (maps: any, places: IGeolocation[]) => {\n if (maps) {\n const bounds = new maps.LatLngBounds()\n places.forEach(({ geoLocation: { latitude, longitude } }) => {\n bounds.extend(new maps.LatLng(latitude, longitude))\n })\n return bounds\n }\n }\n\n // Fit map to its bounds after the api is loaded\n const apiIsLoaded = (map: any, maps: any) => {\n setMap(map)\n setMaps(maps)\n map.addListener('zoom_changed', () => {\n setZoom(map.getZoom())\n })\n }\n const getCluster = (\n geolocations: IGeolocation[],\n bounds: {\n bounds: {\n nw: { lng: number; lat: number }\n se: { lng: number; lat: number }\n }\n zoom: number\n }\n ) => {\n const sc = new supercluster(\n geolocations.map(\n ({ geoLocation: { latitude, longitude }, ...others }) => {\n return {\n lat: latitude,\n lng: longitude,\n ...others,\n }\n }\n ),\n {\n minZoom: 1, // min zoom to generate clusters on\n maxZoom: 16, // max zoom level to cluster the points on\n radius: 40, // cluster radius in pixels\n }\n )\n setCluster(() => sc)\n\n const placesAndCluster = sc(bounds)\n setPlacesAndCluster(placesAndCluster)\n }\n return (\n // height is necessary. value minus header's 60px\n <>\n \n \n \n apiIsLoaded(map, maps)\n }\n >\n {placesAndCluster.map(\n ({ wx: lng, wy: lat, numPoints, points }) => {\n const pointData = gridData?.filter(\n (gd) => gd.id === points[0].deviceId\n )?.[0]\n return (\n 1}\n pointData={pointData}\n numPoints={numPoints}\n deviceId={\n numPoints === 1\n ? points[0].deviceId\n : ''\n }\n pickedInSideBar={\n numPoints === 1 &&\n selectedSensor?.deviceId ===\n points[0].deviceId\n }\n onHover={(hovered: boolean) => {\n if (numPoints === 1) {\n if (hovered) {\n setHoverId(points[0].deviceId)\n } else {\n setHoverId('')\n }\n }\n }}\n onClickMarker={() => {\n onClickMarker({\n lat,\n lng,\n })\n if (numPoints === 1) {\n setSelectedSensor(points[0])\n }\n }}\n dead={\n numPoints === 1 &&\n moment(\n points[0].lastMeasureAt\n ).isBefore(moment().add(-3, 'day'))\n }\n />\n )\n }\n )}\n \n \n \n setHoverId(id)} />\n \n )\n}\n\nexport default SimpleMap\n","export default __webpack_public_path__ + \"static/media/menu.b4b11768.svg\";","export default __webpack_public_path__ + \"static/media/business-report.18524fcc.svg\";","export default __webpack_public_path__ + \"static/media/internet-of-things.76091640.png\";","export default __webpack_public_path__ + \"static/media/map.5306f812.svg\";","export default __webpack_public_path__ + \"static/media/smart-home.de55d3fc.svg\";","export default __webpack_public_path__ + \"static/media/config.bdfad0c3.svg\";","import React, { useState } from 'react'\nimport styled from 'styled-components'\nimport { useHistory, useRouteMatch } from 'react-router-dom'\n\nimport { dropShaw } from '../theme/theme'\nimport LogoPng from '../assets/logo.png'\nimport MenuSvg from '../assets/menu.svg'\nimport DashboardSvg from '../assets/business-report.svg'\nimport IoT from '../assets/internet-of-things.png'\nimport MapSvg from '../assets/map.svg'\nimport SmartHomeSvg from '../assets/smart-home.svg'\nimport ConfigSvg from '../assets/config.svg'\nimport { AmplifySignOut } from '@aws-amplify/ui-react'\nimport { useTranslation } from 'react-i18next'\n\nconst Header: React.FunctionComponent<{\n children: React.ReactChild | React.ReactChildren\n signedIn: boolean\n onSignOut: Function\n groups: string[]\n}> = ({ children, signedIn, onSignOut, groups }) => {\n const [menuOpen, setMenuOpen] = useState(false)\n const history = useHistory()\n const { url } = useRouteMatch()\n const { t, i18n } = useTranslation()\n const languageGetter = () => {\n if (i18n.language === 'fr') {\n return 'en'\n }\n return 'fr'\n }\n const targetLanguage = languageGetter()\n\n const isAdmin = () => groups.some((g) => g === 'admin')\n\n return (\n \n \n \n \n \n {children}\n \n {\n window.location.replace(\n history.location.pathname.replace(\n `/${i18n.language}`,\n `/${targetLanguage}`\n )\n )\n }}\n >\n {targetLanguage}\n \n {signedIn ? (\n <>\n onSignOut()}\n >\n \n \n {\n setMenuOpen(!menuOpen)\n }}\n >\n {'menu'}\n \n \n ) : (\n <>\n )}\n\n {menuOpen ? (\n <>\n \n {\n history.push(`${url}/dashboard`)\n setMenuOpen(false)\n }}\n >\n \n \n \n {t('Dashboard')}\n \n\n {\n history.push(`${url}`)\n setMenuOpen(false)\n }}\n >\n \n \n \n {t('Map')}\n \n {\n history.push(`${url}/indoor`)\n setMenuOpen(false)\n }}\n >\n \n \n \n {t('H/T')}\n \n {\n history.push(`${url}/dashboard-indoor`)\n setMenuOpen(false)\n }}\n >\n \n \n \n {t('IoT')}\n \n {isAdmin() ? (\n {\n history.push(`${url}/admin`)\n setMenuOpen(false)\n }}\n >\n \n \n \n {t('Admin')}\n \n ) : (\n <>\n )}\n \n \n ) : (\n <>\n )}\n \n )\n}\nexport default Header\n\nconst Container = styled.div`\n height: 60px;\n position: relative;\n z-index: 100;\n ${dropShaw(10)};\n background-color: white;\n`\n\nconst Content = styled.div<{ maxWidth: number }>`\n display: flex;\n align-items: center;\n max-width: ${({ maxWidth }) => maxWidth}px;\n padding: 0 60px;\n margin: 0 auto;\n\n > h1 {\n font-weight: lighter;\n font-size: 27px;\n margin: 0;\n text-transform: uppercase;\n }\n > a {\n text-decoration: none;\n }\n`\n\nconst Logo = styled.div`\n margin: 5px 30px 5px 0;\n height: 50px;\n width: 111px;\n background-image: url(${LogoPng});\n`\nconst Language = styled.div<{ large?: boolean }>`\n position: absolute;\n top: 20px;\n right: 300px;\n cursor: pointer;\n text-transform: uppercase;\n`\nconst SignOutWrapper = styled.div<{ large?: boolean }>`\n position: absolute;\n display: flex;\n top: 12px;\n right: 110px;\n box-shadow: 0px 1px 5px rgb(0 0 0 / 25%);\n height: 36px;\n border-radius: 4px;\n border: 1px solid #b4a3a3;\n width: ${({ large }) => (large ? '130' : '90')}px;\n justify-content: center;\n align-items: center;\n`\nconst Menu = styled.div`\n position: absolute;\n right: 0%;\n top: 0%;\n bottom: 0%;\n\n background: #ffffff;\n box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.08),\n 0px 7px 20px rgba(33, 24, 67, 0.14);\n width: 60px;\n display: flex;\n padding: 18px;\n justify-content: center;\n cursor: pointer;\n`\n\nconst MenuItems = styled.div`\n position: absolute;\n right: 0%;\n top: 60px;\n\n background: #ffffff;\n box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.08),\n 0px 7px 20px rgba(33, 24, 67, 0.14);\n min-width: 96px;\n max-width: 270px;\n justify-content: flex-start;\n flex-wrap: wrap;\n align-items: baseline;\n display: flex;\n`\nconst SvgWrapper = styled.div`\n width: 60px;\n height: 40px;\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n`\nconst Subtitle = styled.div`\n font-size: 10px;\n text-align: center;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`\n\nconst MenuItem = styled.div`\n width: 60px;\n height: auto;\n display: flex;\n flex-direction: column;\n cursor: pointer;\n margin: 20px 10px 10px 20px;\n transition: background-color 0.5s ease;\n &:hover {\n background-color: #4b4be814;\n > ${Subtitle} {\n overflow: visible;\n white-space: inherit;\n }\n }\n`\nconst Img = styled.img`\n width: 30px;\n`\n","export default \"data:image/png;base64,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\"","import React, { useEffect, useState } from 'react'\nimport { GaugeChart } from 'bizcharts'\nimport { Data, Datum } from 'bizcharts/lib/interface'\nimport { ListItem } from 'bizcharts/lib/plots/core/dependents'\nimport styled from 'styled-components'\nimport { DefaultColor, dropShaw, Gray, Green } from '../../theme/theme'\nimport { isInt } from '../../utils/number'\n\nconst Gauge = ({\n additionalInfo,\n maxValue,\n percent,\n title,\n unit,\n minValue = 0,\n min = 0,\n max = 1,\n width = 300,\n height = 200,\n gap = 0.01,\n colors = [DefaultColor],\n thresholds = [0, 1],\n}: {\n additionalInfo?: { value: string; hint: string }\n maxValue: number\n percent: number\n title: string\n unit: string\n minValue?: number\n min?: number\n max?: number\n width?: number\n colors?: string[]\n thresholds?: number[]\n gap?: number\n height?: number\n}) => {\n const [matcherMini] = useState(window.matchMedia('(max-height: 768px)'))\n const [matcherMedium] = useState(window.matchMedia('(max-height: 1080px)'))\n const [mini, setMini] = useState(matcherMini.matches)\n const [medium, setMedium] = useState(matcherMedium.matches)\n\n useEffect(() => {\n matcherMini.addEventListener('change', (ev) => {\n setMini(ev.matches)\n })\n matcherMedium.addEventListener('change', (ev) => {\n setMedium(ev.matches)\n })\n return () => {\n matcherMini.removeEventListener('change', (ev) => {\n setMini(ev.matches)\n })\n matcherMedium.removeEventListener('change', (ev) => {\n setMedium(ev.matches)\n })\n }\n })\n return (\n \n \n
{title}
\n {additionalInfo && (\n \n {additionalInfo.value}\n \n )}\n \n }\n axis={{\n label: {\n formatter: (\n text: string,\n item: ListItem,\n index: number\n ) => {\n return (\n item.value * (maxValue - minValue) +\n minValue\n ).toFixed(0)\n },\n style: {\n fontSize: mini ? 8 : medium ? 12 : 16,\n opacity: mini ? 0 : 1,\n },\n },\n tickLine: { ...(mini ? { length: 0 } : {}) },\n subTickLine: { ...(mini ? { length: 0 } : {}) },\n }}\n radius={1}\n innerRadius={0.8}\n indicator={{\n pin: { style: { opacity: 0 } },\n pointer: { style: { opacity: 0 } },\n }}\n startAngle={Math.PI * -1.05}\n endAngle={Math.PI * 0.05}\n range={getRangeWithColorV2(percent, colors, thresholds)}\n statistic={{\n content: {\n style: {\n color: '#39B8FF',\n fontSize: mini ? '12px' : medium ? '20px' : '30px',\n zIndex: '-1',\n },\n formatter: (\n datum?: Datum,\n data?: Data /** filterData */\n ) => {\n const v =\n (datum?.percent ?? 0) * (maxValue - minValue) +\n minValue\n return (\n (datum?.percent ?? 0) * (maxValue - minValue) +\n minValue\n ).toFixed(isInt(v) ? 0 : 1)\n },\n offsetY: -10,\n },\n title: {\n style: {\n color: '#39B8FF',\n fontSize: mini ? '6px' : medium ? '8px' : '10px',\n zIndex: '-1',\n },\n formatter: () => unit,\n },\n }}\n />\n
\n )\n}\n\nconst getRangeWithColorV2 = (\n cur: number,\n colors: string[] = [DefaultColor],\n thresholds: number[] = [0, 1],\n min: number = 0,\n max: number = 1,\n gap: number = 0.005\n) => {\n const block = thresholds.length - 1\n let idx = 0\n const tickColors: string[] = []\n const ticks: number[] = []\n for (let i = 1; i < thresholds.length; i++) {\n if (thresholds[i] > cur) {\n idx = i - 1\n break\n }\n }\n for (let i = 0; i < thresholds.length; i++) {\n ticks.push(thresholds[i])\n if (i !== 0 && i !== block && i !== idx) {\n ticks.push(thresholds[i] + gap)\n tickColors.push(colors[i])\n }\n if (i === idx && idx !== 0) {\n ticks.push(thresholds[i] + gap)\n tickColors.push(DefaultColor)\n }\n if (i < idx) {\n tickColors.push(colors[idx])\n } else if (i === idx) {\n if (cur > thresholds[i] + gap || cur < thresholds[i] - gap) {\n ticks.push(cur)\n tickColors.push(colors[idx])\n }\n\n tickColors.push(Gray)\n } else {\n tickColors.push(Gray)\n }\n }\n return {\n ticks,\n color: tickColors,\n }\n}\n\nexport default Gauge\nconst Container = styled.div<{ height: number }>`\n ${dropShaw(10)};\n margin: 5px;\n padding: 10px;\n height: ${({ height }) => height}px;\n box-sizing: content-box;\n`\nconst Title = styled.div<{ multi: boolean }>`\n display: flex;\n justify-content: ${({ multi }) => (multi ? 'space-evenly' : 'center')};\n line-height: 20px;\n text-align: center;\n font-weight: 500;\n font-size: 20px;\n color: #43bcff;\n @media (max-height: 1080px) {\n font-weight: 500;\n font-size: 18px;\n }\n @media (max-height: 768px) {\n font-weight: 500;\n font-size: 12px;\n }\n`\n","export const isInt = (n: number) => {\r\n return n % 1 < 0.1\r\n}\r\n","import React, { useEffect, useState } from 'react'\nimport { Annotation, Axis, Chart, Coord, Interval, Tooltip } from 'bizcharts'\nimport styled from 'styled-components'\nimport {\n Alert,\n DefaultColor,\n dropShaw,\n Gray,\n HighWarning,\n} from '../../theme/theme'\n\nconst colorPicker = (v: number, max: number, startColor: string) => {\n if (v < max * 0.33) {\n return startColor\n }\n if (v < max * 0.66) {\n return HighWarning\n }\n return Alert\n}\nconst transparency = (baseColor: string, percent: number) => {\n return baseColor + Math.floor(255 * (0.5 + 0.5 * percent)).toString(16)\n}\nconst VerticalGauge = ({\n title,\n value,\n width = 300,\n height = 560,\n color = DefaultColor,\n}: {\n title: string\n value: number\n width?: number\n height?: number\n color?: string\n}) => {\n const [matcherMini] = useState(window.matchMedia('(max-height: 768px)'))\n const [matcherMedium] = useState(window.matchMedia('(max-height: 1080px)'))\n const [mini, setMini] = useState(matcherMini.matches)\n const [medium, setMedium] = useState(matcherMedium.matches)\n const heightChart = (height / 20) * 11\n\n useEffect(() => {\n matcherMini.addEventListener('change', (ev) => {\n setMini(ev.matches)\n })\n matcherMedium.addEventListener('change', (ev) => {\n setMedium(ev.matches)\n })\n return () => {\n matcherMini.removeEventListener('change', (ev) => {\n setMini(ev.matches)\n })\n matcherMedium.removeEventListener('change', (ev) => {\n setMedium(ev.matches)\n })\n }\n })\n return (\n \n {title}\n {value}\n \n \n \n ({\n lineWidth: 20,\n width: 1,\n height: 1,\n fill: percent\n ? transparency(\n colorPicker(value, 100, color),\n percent\n )\n : Gray,\n }),\n ]}\n />\n \n \n \n \n \n )\n}\n\nconst generateData = (cur: number) => {\n const n = 100\n const base = Math.floor(cur)\n const percent = cur - base\n return new Array(n).fill(0).map((v, i) => ({\n x: (100 / n) * (i + 1),\n y: [50, 100],\n percent: i <= base ? 1 : i === base + 1 ? percent : 0,\n }))\n}\n\nexport default VerticalGauge\n\nconst Container = styled.div<{ height: number }>`\n ${dropShaw(10)};\n margin: 5px;\n padding: 10px;\n height: ${({ height }) => height}px;\n box-sizing: content-box;\n`\nconst Title = styled.div`\n height: 40px;\n padding: 10px;\n line-height: 40px;\n text-align: left;\n font-weight: 500;\n font-size: 18px;\n @media (max-height: 1080px) {\n font-size: 18px;\n }\n @media (max-height: 768px) {\n font-size: 12px;\n }\n`\nconst CurValue = styled.div<{ height: number }>`\n height: ${({ height }) => height}px;\n line-height: ${({ height }) => height * 2 - 24 - 5}px;\n text-align: center;\n font-weight: bold;\n font-size: 24px;\n\n @media (max-height: 1080px) {\n font-size: 18px;\n line-height: ${({ height }) => height * 2 - 18 - 5}px;\n }\n @media (max-height: 768px) {\n font-size: 12px;\n line-height: ${({ height }) => height * 2 - 12 - 5}px;\n }\n}\n`\n","import React, { ReactNode } from 'react'\nimport { Axis, Chart, Interaction, Legend, Line, Tooltip } from 'bizcharts'\nimport { ListItem } from 'bizcharts/lib/plots/core/dependents'\nimport moment from 'moment'\nimport styled from 'styled-components'\nimport { dropShaw } from '../../theme/theme'\nimport { ILine } from '../../intefaces/measure'\nimport { AdjustOption } from '@antv/g2/lib/interface'\n\nconst DashLineChart = ({\n title,\n height,\n width,\n data,\n titleHeight = 30,\n adjust = [],\n}: {\n title: string | ReactNode | ReactNode[]\n height: number\n width: number\n data: ILine[]\n titleHeight?: number\n adjust?: AdjustOption[]\n}) => (\n \n {title}\n \n {\n return moment\n .unix(parseInt(item?.id ?? ''))\n .format('MM/DD HH:mm:ss')\n },\n }}\n />\n \n \n \n \n \n \n)\n\nexport default DashLineChart\n\nconst ChartWrapper = styled.div<{ height: number }>`\n ${dropShaw(10)};\n margin: 5px;\n padding: 10px;\n height: ${({ height }) => height}px;\n box-sizing: content-box;\n`\n\nconst Title = styled.div<{ titleHeight: number }>`\n height: ${(props) => props.titleHeight}px;\n line-height: 30px;\n text-align: left;\n font-weight: 500;\n font-size: 18px;\n`\n","import React, { useEffect, useState } from 'react'\nimport DatePicker, { registerLocale } from 'react-datepicker'\nimport fr from 'date-fns/locale/fr'\nimport en from 'date-fns/locale/en-US'\nimport { useTranslation } from 'react-i18next'\n\nimport styled from 'styled-components'\nimport moment, { Moment } from 'moment'\n\nimport { EMode } from '../../intefaces/measure'\nimport { EuiDatePicker, EuiDatePickerRange } from '@elastic/eui'\n\nregisterLocale('fr', fr)\nregisterLocale('en', en)\nconst DatePickers = ({\n mode,\n onRelativeMode,\n onRelativeDateChange,\n onAutoMode,\n}: {\n mode: EMode\n onRelativeMode: Function\n onRelativeDateChange: Function\n onAutoMode: Function\n}) => {\n const { t, i18n } = useTranslation()\n const [startDate, setStartDate] = useState(moment().add(-3, 'd'))\n const [endDate, setEndDate] = useState(moment())\n useEffect(() => {\n onRelativeDateChange([startDate.toDate(), endDate.toDate()])\n }, [startDate, endDate])\n return (\n \n {\n onAutoMode()\n }}\n >\n {t('Auto Refresh') + ' '} (1min)\n \n {\n onRelativeMode([startDate.toDate(), endDate.toDate()])\n }}\n >\n {t('Relative')}\n \n\n {mode === EMode.Relative && (\n {\n if (date) {\n setStartDate(date)\n }\n }}\n startDate={startDate}\n endDate={endDate}\n isInvalid={startDate > endDate}\n aria-label=\"Start date\"\n showTimeSelect\n locale={i18n.language}\n />\n }\n endDateControl={\n {\n if (date) {\n setEndDate(date)\n }\n }}\n startDate={startDate}\n endDate={endDate}\n isInvalid={startDate > endDate}\n aria-label=\"End date\"\n showTimeSelect\n locale={i18n.language}\n />\n }\n />\n )}\n \n )\n}\n\nexport default DatePickers\n\nconst PickerType = styled.div<{ enabled?: boolean }>`\n box-sizing: content-box;\n height: 30px;\n line-height: 30px;\n width: auto;\n ${({ enabled }) =>\n enabled\n ? `\n background: linear-gradient(0deg, rgb(133 180 255) 0%,rgb(173 224 255) 100%);\n box-shadow: 0px 1px 10px rgb(0 0 0 / 25%);`\n : ''}\n text-align: center;\n margin: 0 10px;\n padding: 5px 10px;\n border: 1px solid #dddddd;\n border-radius: 5px;\n font-size: 15px;\n cursor: pointer;\n`\nconst DatePickerTitle = styled.div`\n margin-right: 5px;\n`\nconst RangeWrapper = styled.div`\n display: flex;\n margin-right: 5px;\n height: 30px;\n line-height: 30px;\n margin: 0 10px;\n padding: 5px 10px;\n`\nconst Wrapper = styled.div`\n box-sizing: content-box;\n display: flex;\n`\n","import { Translations } from '@aws-amplify/ui-components'\r\n\r\nconst dict = {\r\n fr: {\r\n [Translations.BACK_TO_SIGN_IN]: 'Retour à la connexion',\r\n [Translations.CHANGE_PASSWORD_ACTION]: 'Modifier',\r\n [Translations.CHANGE_PASSWORD]: 'Modifier le mot de passe',\r\n [Translations.CODE_LABEL]: 'Code de vérification',\r\n [Translations.CODE_PLACEHOLDER]: 'Entrez le code',\r\n [Translations.CONFIRM_SIGN_UP_CODE_LABEL]: 'Code de confirmation',\r\n [Translations.CONFIRM_SIGN_UP_CODE_PLACEHOLDER]: 'Entrez votre code',\r\n [Translations.CONFIRM_SIGN_UP_HEADER_TEXT]: \"Confirmer l'inscription\",\r\n [Translations.CONFIRM_SIGN_UP_LOST_CODE]: 'Vous avez perdu votre code?',\r\n [Translations.CONFIRM_SIGN_UP_RESEND_CODE]: 'Renvoyer le code',\r\n [Translations.CONFIRM_SIGN_UP_SUBMIT_BUTTON_TEXT]: 'Confirmer',\r\n [Translations.CONFIRM_SMS_CODE]: 'Confirmer le code SMS',\r\n [Translations.CONFIRM_TOTP_CODE]: 'Confirmer le code TOTP',\r\n [Translations.CONFIRMER]: 'Confirmer',\r\n [Translations.CREATE_ACCOUNT_TEXT]: 'Créer un compte',\r\n [Translations.EMAIL_LABEL]: 'Adresse e-mail *',\r\n [Translations.EMAIL_PLACEHOLDER]: 'Entrez votre adresse e-mail',\r\n [Translations.FORGOT_PASSWORD_TEXT]: 'Mot de passe oublié?',\r\n [Translations.LESS_THAN_TWO_MFA_VALUES_MESSAGE]:\r\n 'Moins de deux types MFA disponibles',\r\n [Translations.NEW_PASSWORD_LABEL]: 'Nouveau mot de passe',\r\n [Translations.NEW_PASSWORD_PLACEHOLDER]:\r\n 'Entrez votre nouveau mot de passe',\r\n [Translations.NO_ACCOUNT_TEXT]: 'Pas de compte?',\r\n [Translations.USERNAME_REMOVE_WHITESPACE]:\r\n \"Le nom d'utilisateur ne peut pas contenir d'espaces\",\r\n [Translations.PASSWORD_REMOVE_WHITESPACE]:\r\n 'Le mot de passe ne peut pas commencer ou se terminer par un espace',\r\n [Translations.PASSWORD_LABEL]: 'Mot de passe *',\r\n [Translations.PASSWORD_PLACEHOLDER]: 'Entrez votre mot de passe',\r\n [Translations.PHONE_LABEL]: 'Numéro de téléphone *',\r\n [Translations.PHONE_PLACEHOLDER]: '(555) 555-1212',\r\n [Translations.QR_CODE_ALT]: 'qrcode',\r\n [Translations.RESET_PASSWORD_TEXT]: 'Réinitialiser le mot de passe',\r\n [Translations.RESET_YOUR_PASSWORD]: 'Réinitialisez votre mot de passe',\r\n [Translations.SELECT_MFA_TYPE_HEADER_TEXT]: 'Sélectionner le type MFA',\r\n [Translations.SELECT_MFA_TYPE_SUBMIT_BUTTON_TEXT]: 'Vérifier',\r\n [Translations.SEND_CODE]: 'Envoyer le code',\r\n [Translations.SUBMIT]: 'Soumettre',\r\n [Translations.SETUP_TOTP_REQUIRED]: 'TOTP doit être configuré',\r\n [Translations.SIGN_IN_ACTION]: 'Connexion',\r\n [Translations.SIGN_IN_HEADER_TEXT]: 'Connectez-vous à votre compte',\r\n [Translations.SIGN_IN_TEXT]: 'Connectez-vous',\r\n [Translations.SIGN_IN_WITH_AMAZON]: 'Connectez-vous avec Amazon',\r\n [Translations.SIGN_IN_WITH_AUTH0]: 'Connectez-vous avec Auth0',\r\n [Translations.SIGN_IN_WITH_AWS]: 'Connectez-vous avec AWS',\r\n [Translations.SIGN_IN_WITH_FACEBOOK]: 'Connectez-vous avec Facebook',\r\n [Translations.SIGN_IN_WITH_GOOGLE]: 'Connectez-vous avec Google',\r\n [Translations.SIGN_OUT]: 'Déconnexion',\r\n [Translations.SIGN_UP_EMAIL_PLACEHOLDER]: 'E-mail',\r\n [Translations.SIGN_UP_HAVE_ACCOUNT_TEXT]: 'Vous avez un compte?',\r\n [Translations.SIGN_UP_HEADER_TEXT]: 'Créer un nouveau compte',\r\n [Translations.SIGN_UP_PASSWORD_PLACEHOLDER]: 'Mot de passe',\r\n [Translations.SIGN_UP_SUBMIT_BUTTON_TEXT]: 'Créer un compte',\r\n [Translations.SIGN_UP_USERNAME_PLACEHOLDER]: \"Nom d'utilisateur\",\r\n [Translations.SUCCESS_MFA_TYPE]:\r\n 'Succès! Votre type MFA est maintenant:',\r\n [Translations.TOTP_HEADER_TEXT]:\r\n 'Scannez puis entrez le code de vérification',\r\n [Translations.TOTP_LABEL]: 'Entrez le code de sécurité:',\r\n [Translations.TOTP_ISSUER]: 'AWSCognito',\r\n [Translations.TOTP_SETUP_FAILURE]: 'La configuration TOTP a échoué',\r\n [Translations.TOTP_SUBMIT_BUTTON_TEXT]: 'Vérifier le jeton de sécurité',\r\n [Translations.TOTP_SUCCESS_MESSAGE]: 'Configuration de TOTP réussie!',\r\n [Translations.UNABLE_TO_SETUP_MFA_AT_THIS_TIME]:\r\n 'Échec! Impossible de configurer MFA pour le moment',\r\n [Translations.USERNAME_LABEL]: \"Nom d'utilisateur *\",\r\n [Translations.USERNAME_PLACEHOLDER]: \"Entrez votre nom d'utilisateur\",\r\n [Translations.VERIFY_CONTACT_EMAIL_LABEL]: 'E-mail',\r\n [Translations.VERIFY_CONTACT_HEADER_TEXT]:\r\n 'La récupération de compte nécessite des informations de contact vérifiées',\r\n [Translations.VERIFY_CONTACT_PHONE_LABEL]: 'Numéro de téléphone',\r\n [Translations.VERIFY_CONTACT_SUBMIT_LABEL]: 'Soumettre',\r\n [Translations.VERIFY_CONTACT_VERIFY_LABEL]: 'Vérifier',\r\n [Translations.ADDRESS_LABEL]: 'Adresse',\r\n [Translations.ADDRESS_PLACEHOLDER]: 'Entrez votre adresse',\r\n [Translations.NICKNAME_LABEL]: 'Surnom',\r\n [Translations.NICKNAME_PLACEHOLDER]: 'Entrez votre pseudo',\r\n [Translations.BIRTHDATE_LABEL]: 'Anniversaire',\r\n [Translations.BIRTHDATE_PLACEHOLDER]: 'Entrez votre anniversaire',\r\n [Translations.PICTURE_LABEL]: \"URL de l'image\",\r\n [Translations.PICTURE_PLACEHOLDER]: \"Entrez l'URL de votre image\",\r\n [Translations.FAMILY_NAME_LABEL]: 'Nom de famille',\r\n [Translations.FAMILY_NAME_PLACEHOLDER]: 'Entrez votre nom de famille',\r\n [Translations.PREFERRED_USERNAME_LABEL]: \"Nom d'utilisateur préféré\",\r\n [Translations.PREFERRED_USERNAME_PLACEHOLDER]:\r\n \"Entrez votre nom d'utilisateur préféré\",\r\n [Translations.GENDER_LABEL]: 'Sexe',\r\n [Translations.GENDER_PLACEHOLDER]: 'Entrez votre sexe',\r\n [Translations.PROFILE_LABEL]: 'URL du profil',\r\n [Translations.PROFILE_PLACEHOLDER]: \"Entrez l'URL de votre profil\",\r\n [Translations.GIVEN_NAME_LABEL]: 'Prénom',\r\n [Translations.GIVEN_NAME_PLACEHOLDER]: 'Entrez votre prénom',\r\n [Translations.ZONEINFO_LABEL]: 'Fuseau horaire',\r\n [Translations.ZONEINFO_PLACEHOLDER]: 'Entrez votre fuseau horaire',\r\n [Translations.LOCALE_LABEL]: 'Paramètres régionaux',\r\n [Translations.LOCALE_PLACEHOLDER]: 'Entrez vos paramètres régionaux',\r\n [Translations.UPDATED_AT_LABEL]: 'Mis à jour à',\r\n [Translations.UPDATED_AT_PLACEHOLDER]:\r\n \"Entrez l'heure de la dernière mise à jour des informations\",\r\n [Translations.MIDDLE_NAME_LABEL]: 'Second prénom',\r\n [Translations.MIDDLE_NAME_PLACEHOLDER]: 'Entrez votre deuxième prénom',\r\n [Translations.WEBSITE_LABEL]: 'Site Web',\r\n [Translations.WEBSITE_PLACEHOLDER]: 'Entrez votre site Web',\r\n [Translations.NAME_LABEL]: 'Nom complet',\r\n [Translations.NAME_PLACEHOLDER]: 'Entrez votre nom complet',\r\n [Translations.PHOTO_PICKER_TITLE]: 'Titre du sélecteur',\r\n [Translations.PHOTO_PICKER_HINT]:\r\n 'Le texte ou le contenu auxiliaire peut occuper cet espace ici',\r\n [Translations.PHOTO_PICKER_PLACEHOLDER_HINT]: \"Indice d'espace réservé\",\r\n [Translations.PHOTO_PICKER_BUTTON_TEXT]: 'Bouton',\r\n [Translations.IMAGE_PICKER_TITLE]: 'Ajouter une photo de profil',\r\n [Translations.IMAGE_PICKER_HINT]:\r\n \"Prévisualiser l'image avant l'importation\",\r\n [Translations.IMAGE_PICKER_PLACEHOLDER_HINT]:\r\n 'Appuyez pour sélectionner une image',\r\n [Translations.IMAGE_PICKER_BUTTON_TEXT]: 'Télécharger',\r\n [Translations.PICKER_TEXT]: 'Choisissez un fichier',\r\n [Translations.TEXT_FALLBACK_CONTENT]: 'Contenu de secours',\r\n [Translations.CONFIRM_SIGN_UP_FAILED]:\r\n \"Confirmation échec de l'inscription\",\r\n [Translations.SIGN_UP_FAILED]: 'Inscription échouée',\r\n },\r\n}\r\n\r\nexport default dict\r\n","import i18n from 'i18next'\r\nimport { initReactI18next } from 'react-i18next'\r\nimport en from './locales/en.json'\r\nimport fr from './locales/fr.json'\r\nimport { I18n } from 'aws-amplify'\r\nimport dict from './locales/amplify-dict'\r\n\r\nconst resources = {\r\n en,\r\n fr,\r\n}\r\n\r\nexport const setGlobalLanguage = async (\r\n language: string,\r\n callback: Function\r\n) => {\r\n await I18n.putVocabularies(dict)\r\n await I18n.setLanguage(language)\r\n await i18n\r\n .use(initReactI18next) // passes i18n down to react-i18next\r\n .init({\r\n resources,\r\n lng: language,\r\n fallbackLng: 'en',\r\n keySeparator: false, // we do not use keys in form messages.welcome\r\n\r\n interpolation: {\r\n escapeValue: false, // react already safes from xss\r\n },\r\n })\r\n callback()\r\n}\r\n\r\nexport default i18n\r\n","import XLSX from 'xlsx'\nimport {\n IChirpstackDeviceMeasures,\n IDeviceMeasuresV2,\n} from '../intefaces/measure'\nimport moment from 'moment'\nimport i18n from '../i18n'\n\nconst keyParser = (k: string) => {\n switch (k) {\n case 'CreatedAt':\n return i18n.t('Time')\n case 'time':\n return i18n.t('Time')\n case 'temperature':\n return i18n.t('Temperature') + '[°C]'\n case 'humidity':\n return i18n.t('Humidity') + '[%]'\n case 'lvoc':\n return i18n.t('TVOC') + '[ppb]'\n case 'tvoc':\n return i18n.t('TVOC') + '[ppb]'\n case 'co2':\n return i18n.t('CO2') + '[ppm]'\n case 'pm1':\n return i18n.t('PM 1.0') + '[µg/m³]'\n case 'pm2dot5':\n return i18n.t('PM 2.5') + '[µg/m³]'\n case 'pm10':\n return i18n.t('PM 10.0') + '[µg/m³]'\n case 'battery':\n return i18n.t('Battery') + '[V]'\n case 'pressure':\n return i18n.t('Pressure') + '[mb]'\n case 'formaldehyde':\n return i18n.t('Formaldehyde') + '[µg/m³]'\n case 'ullage':\n return i18n.t('Ullage')\n default:\n return i18n.t('unknown')\n }\n}\nexport const exportDataToXlsx = (\n data: Omit[],\n ICONE: string\n) => {\n var workbook = XLSX.utils.book_new()\n const res = data.map((v) =>\n Object.entries(v).reduce((acc, [k, v]) => {\n if (\n k === 'id' ||\n k === 'location' ||\n k === 'measureBid' ||\n k === 'name'\n ) {\n return acc\n }\n if (k === 'time') {\n acc[keyParser(k)] = moment.unix(v as number).format()\n return acc\n }\n acc[keyParser(k)] = v\n return acc\n }, {} as { [x: string]: any })\n )\n if (res[0]) {\n res[0][ICONE] = null\n }\n const worksheet = XLSX.utils.json_to_sheet(res as unknown[])\n\n XLSX.utils.book_append_sheet(workbook, worksheet, 'export')\n\n XLSX.writeFile(workbook, `${data?.[0]?.['name'] ?? ''}-export.xlsb`)\n}\n\nexport const exportDataToXlsIoT = (\n data: IChirpstackDeviceMeasures[],\n deviceName: string,\n keys: string[]\n) => {\n var workbook = XLSX.utils.book_new()\n const res = data.map((v) =>\n Object.entries(v).reduce((acc, [k, v]) => {\n if (!keys.includes(k)) {\n return acc\n }\n if (k === 'CreatedAt') {\n acc[keyParser(k)] = moment(v).format()\n return acc\n }\n acc[keyParser(k)] = v\n return acc\n }, {} as { [x: string]: any })\n )\n const worksheet = XLSX.utils.json_to_sheet(res as unknown[])\n\n XLSX.utils.book_append_sheet(workbook, worksheet, 'export')\n\n XLSX.writeFile(workbook, `${deviceName}-export.xlsb`)\n}\n","export default __webpack_public_path__ + \"static/media/download.c3e0ceee.svg\";","import React, { useContext, useEffect, useRef, useState } from 'react'\nimport styled from 'styled-components'\nimport LoadingBar from 'react-top-loading-bar'\n\nimport moment from 'moment'\nimport {\n EMode,\n IData,\n IDeviceMeasuresV2,\n IField,\n ILine,\n} from '../intefaces/measure'\nimport Gauge from './DashboardUnits/Gauge'\nimport VerticalGauge from './DashboardUnits/VerticalGauge'\nimport {\n Alert,\n DefaultColor,\n Green,\n headerHeight,\n HighWarning,\n LightWarning,\n MediumWarning,\n sideBarWidth,\n} from '../theme/theme'\nimport DashLineChart from './DashboardUnits/DashLineChart'\nimport DashBarChart from './DashboardUnits/DashBarChart'\nimport Sidebar from './SideBar'\nimport { AccessTokenCtx } from './Context'\nimport { useTranslation } from 'react-i18next'\nimport { useHistory, useParams, useRouteMatch } from 'react-router-dom'\nimport DatePickers from './DashboardUnits/DatePicker'\nimport { exportDataToXlsx } from '../utils/export'\nimport DownloadSVG from '../assets/download.svg'\nimport { IGeolocation } from '../intefaces/map'\n\nconst line1Field: IField[] = [\n { key: 'temperature', label: 'Temperature', unit: '[°C]' },\n { key: 'humidity', label: 'Humidity', unit: '[%]' },\n]\nconst line2Field: IField[] = [\n { key: 'lvoc', label: 'TVOC', unit: '[ppb]' },\n { key: 'co2', label: 'CO2', unit: '[ppm]' },\n]\nconst line3Field: IField[] = [\n { key: 'pm2dot5', label: 'PM 2.5', unit: '[µg/m³]' },\n { key: 'pm10', label: 'PM 10.0', unit: '[µg/m³]' },\n]\nconst getDashboardSizing = () => {\n const totalHeight = window.innerHeight - headerHeight - 40 - 45\n const totalWidth = window.innerWidth - sideBarWidth - 60\n const dividedBy = window.innerHeight < 1080 ? 4 : 5\n const partialHeight = Math.floor(totalHeight / dividedBy)\n const gaugeWidth = partialHeight * 1.4\n const chartWidth = totalWidth - gaugeWidth * 2\n const verticalGaugeHeight = partialHeight * (dividedBy - 2)\n return { gaugeWidth, partialHeight, chartWidth, verticalGaugeHeight }\n}\n// fetch every 1 min\nconst interval = 60 * 1000\n\ninterface IIcone {\n todayCO2: {\n n0: number\n n1: number\n n2: number\n total: number\n icone: number\n }\n yesterdayCO2: {\n n0: number\n n1: number\n n2: number\n total: number\n icone: number\n }\n}\n\nconst Dashboard = () => {\n const { t } = useTranslation()\n const accessToken = useContext(AccessTokenCtx)\n const { path } = useRouteMatch()\n const history = useHistory()\n const { deviceId } = useParams<{ deviceId: string }>()\n const [data, setData] = useState([])\n const [icone, setIcone] = useState<{ value: string; hint: string }>({\n value: '',\n hint: '',\n })\n const [lines, setLines] = useState<{ [x: string]: ILine[] }>({})\n const [sizing, setSizing] = useState(getDashboardSizing())\n const [selectedSensor, setSelectedSensor] = useState({\n deviceId,\n } as IGeolocation)\n const [fetchInterval, setFetchInterval] = useState()\n const [mode, setMode] = useState(EMode.Auto)\n const [exporting, setExporting] = useState(false)\n const [relativeDate, setRelativeDate] = useState<[Date, Date]>([\n new Date(),\n new Date(),\n ])\n const ref = useRef(null)\n const clearFetch = () => {\n if (fetchInterval !== undefined) {\n clearInterval(fetchInterval)\n }\n }\n const getSortData = (data: any) => {\n if (selectedSensor.sensorType === 'nemo') {\n return data?.time\n } else {\n return new Date(data?.CreatedAt).getTime() / 1000\n }\n }\n const getApi = () => {\n if (selectedSensor.sensorType === 'nemo') {\n return `/api/v2/device/measures`\n } else {\n return `/api/v1/chirpstack/measures`\n }\n }\n useEffect(() => {\n window.addEventListener('resize', () => {\n setSizing(getDashboardSizing())\n })\n return () => {\n window.removeEventListener('resize', () => {\n setSizing(getDashboardSizing())\n })\n }\n }, [])\n useEffect(() => {\n if (mode === EMode.Relative) {\n const subscription = { subscribed: true }\n fetchData({\n start: relativeDate[0],\n end: relativeDate[1],\n subscription,\n })\n return () => {\n subscription.subscribed = false\n }\n }\n }, [mode, relativeDate, selectedSensor])\n useEffect(() => {\n clearFetch()\n if (selectedSensor.deviceId !== '') {\n if (mode === EMode.Auto) {\n const subscription = { subscribed: true }\n fetchData({ subscription })\n setFetchInterval(\n setInterval(() => {\n fetchData({})\n }, interval)\n )\n return () => {\n subscription.subscribed = false\n if (fetchInterval !== undefined) {\n clearInterval(fetchInterval)\n }\n }\n }\n }\n }, [selectedSensor, mode])\n const fetchData = ({\n start,\n end,\n subscription,\n }: {\n start?: Date\n end?: Date\n subscription?: { subscribed: boolean }\n }) => {\n if (!selectedSensor?.deviceId) {\n return\n }\n try {\n ref?.current?.continuousStart(10, 100)\n fetch(\n `${getApi()}?start=${\n start\n ? moment(start).unix()\n : moment(new Date()).add(-3, 'days').unix()\n }&end=${end ? moment(end).unix() : ''}&deviceSerialNumber=${\n selectedSensor.deviceId\n }`,\n {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n }\n )\n .then((res) => res.json())\n .then((data) => {\n ref?.current?.complete()\n subscription?.subscribed && setData(data)\n })\n } catch (e) {\n console.error(e)\n }\n }\n const onSensorSelected = (id: string) => {\n history.push(path.replace('/:deviceId', '') + '/' + id)\n }\n\n const ICONE = () => {\n const todayStart = moment().startOf('day').add(7.5, 'h')\n const todayEnd = moment().startOf('day').add(17.5, 'h')\n const yesterdayStart = moment().startOf('day').add(-16.5, 'h')\n const yesterdayEnd = moment().startOf('day').add(-6.5, 'h')\n const co2In3Days =\n data?.sort((a, b) => getSortData(b) - getSortData(a)) ?? []\n const icone: IIcone = co2In3Days?.reduce(\n (acc, c) => {\n let target\n if (\n moment.unix(getSortData(c)).isBetween(todayStart, todayEnd)\n ) {\n target = acc.todayCO2\n }\n if (\n moment\n .unix(getSortData(c))\n .isBetween(yesterdayStart, yesterdayEnd)\n ) {\n target = acc.yesterdayCO2\n }\n if (target !== undefined) {\n if (c.co2 < 1000) {\n target.n0 += 1\n } else if (c.co2 < 1700) {\n target.n1 += 1\n } else {\n target.n2 += 1\n }\n target.total += 1\n }\n return acc\n },\n {\n todayCO2: {\n n0: 0,\n n1: 0,\n n2: 0,\n total: 0,\n icone: 0,\n },\n yesterdayCO2: {\n n0: 0,\n n1: 0,\n n2: 0,\n total: 0,\n icone: 0,\n },\n }\n )\n // when data point if not enough, we return -1 which indicates that the value is not available\n const calculator = (target: keyof IIcone) => {\n if (icone[target].total < 50) {\n icone[target].icone = -1\n return\n }\n icone[target].icone =\n 2.5 *\n Math.log2(\n (icone[target].n1 + 3 * icone[target].n2) /\n icone[target].total +\n 1\n )\n }\n Object?.keys(icone)?.forEach((k) => calculator(k as keyof IIcone))\n return icone\n }\n const dataSelector = (source: IField[], max: number = Infinity) =>\n source.reduce(\n (acc: IData[], cur) => [\n ...acc,\n ...(data\n ?.sort((a, b) => getSortData(b) - getSortData(a))\n ?.map(\n (mv) =>\n ({\n x: getSortData(mv),\n y:\n mv[cur.key as keyof IDeviceMeasuresV2] > max\n ? max\n : mv[\n cur.key as keyof IDeviceMeasuresV2\n ],\n tooltipV: moment\n .unix(getSortData(mv))\n .format('YYYY/MM/DD HH:mm:ss'),\n type: `${t(cur.label)} ${cur.unit}`,\n } as IData)\n ) ?? []),\n ],\n []\n )\n const lastRecord = (key: keyof Omit) =>\n data?.sort((a, b) => getSortData(b) - getSortData(a))?.[0]?.[key] ?? 0\n useEffect(() => {\n setLines({\n line1: dataSelector(line1Field),\n line2: dataSelector(line2Field),\n line3: dataSelector(line3Field, 1000),\n })\n const icone = ICONE()\n if (icone.todayCO2.icone >= 0) {\n setIcone({\n value: `ICONE: ${Math.round(icone.todayCO2.icone)}`,\n hint: t('calculated at ') + moment().format(t('YYYY/MM/DD')),\n })\n } else if (icone.yesterdayCO2.icone >= 0) {\n setIcone({\n value: `${t('ICONE D-1')}: ${Math.round(\n icone.yesterdayCO2.icone\n )}`,\n hint:\n t('calculated at ') +\n moment()\n .startOf('day')\n .add(-1, 'd')\n .format(t('YYYY/MM/DD')),\n })\n } else {\n setIcone({ value: `ICONE: /`, hint: '' })\n }\n }, [data])\n return (\n <>\n \n \n \n \n {\n setMode(EMode.Auto)\n }}\n onRelativeMode={(date: [Date, Date]) => {\n setMode(EMode.Relative)\n setRelativeDate(date)\n }}\n onRelativeDateChange={(date: [Date, Date]) => {\n setRelativeDate(date)\n }}\n />\n {\n if (!exporting) {\n exportDataToXlsx(data, icone.value)\n }\n }}\n >\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default Dashboard\n\nconst Container = styled.div`\n position: absolute;\n width: calc(100vw - 251px);\n height: calc(100vh - 90px);\n position: absolute;\n right: 0;\n top: 70px;\n`\nconst FlexRow = styled.div`\n display: flex;\n margin: 5px 0;\n`\nconst DownloadWrapper = styled.div`\n margin: 5px 65px 5px 0;\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n`\nconst DownloadImg = styled.img`\n width: 30px;\n`\n","import React, { ReactChild, ReactChildren, useEffect } from 'react'\r\n\r\nimport Amplify, { Auth } from 'aws-amplify'\r\nimport { AmplifyAuthenticator, AmplifySignIn } from '@aws-amplify/ui-react'\r\nimport { AuthState, onAuthUIStateChange } from '@aws-amplify/ui-components'\r\nimport styled from 'styled-components'\r\n\r\nimport { AccessTokenCtx } from './Context'\r\nimport { CognitoUserSession } from 'amazon-cognito-identity-js'\r\n\r\nAmplify.configure({\r\n Auth: {\r\n region: 'eu-west-3',\r\n userPoolId: 'eu-west-3_iUxuHF2xg',\r\n userPoolWebClientId: '2jsmoppoq2jdh3m3ehu73hb8ot',\r\n },\r\n})\r\nconst Login = ({\r\n children,\r\n onSignedIn,\r\n}: {\r\n children: ReactChildren | ReactChild | undefined\r\n onSignedIn: Function\r\n}) => {\r\n const [authState, setAuthState] = React.useState()\r\n const [token, setToken] = React.useState()\r\n const refreshToken = async () => {\r\n const cognitoUser = await Auth.currentAuthenticatedUser()\r\n const currentSession = await Auth.currentSession()\r\n cognitoUser.refreshSession(\r\n currentSession.getRefreshToken(),\r\n (err: any, session: CognitoUserSession) => {\r\n setTimeout(() => {\r\n setToken(session.getAccessToken().getJwtToken())\r\n }, 1000 * 2)\r\n }\r\n )\r\n }\r\n useEffect(() => {\r\n if (authState === AuthState.SignedIn) {\r\n const i = setInterval(refreshToken, 1000 * 60 * 60)\r\n return () => {\r\n clearInterval(i)\r\n }\r\n }\r\n }, [authState])\r\n useEffect(() => {\r\n return onAuthUIStateChange((nextAuthState) => {\r\n setAuthState(nextAuthState)\r\n if (nextAuthState === AuthState.SignedIn) {\r\n Auth.currentSession().then((session) => {\r\n setTimeout(() => {\r\n setToken(session.getAccessToken().getJwtToken())\r\n }, 100)\r\n onSignedIn(\r\n session.getAccessToken().decodePayload()[\r\n 'cognito:groups'\r\n ]\r\n )\r\n })\r\n }\r\n })\r\n }, [onSignedIn])\r\n return authState === AuthState.SignedIn && token ? (\r\n \r\n {children}\r\n \r\n ) : (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\nexport default Login\r\n\r\nconst Container = styled.div`\r\n --amplify-primary-color: #4ebbfb;\r\n position: relative;\r\n display: flex;\r\n justify-content: center;\r\n`\r\n","import {\n EuiModal,\n EuiModalBody,\n EuiModalHeader,\n EuiModalHeaderTitle,\n} from '@elastic/eui'\nimport React from 'react'\n\nconst Modal = ({\n title,\n closeModal,\n children,\n}: {\n title: string\n closeModal: (\n event?:\n | React.KeyboardEvent\n | React.MouseEvent\n ) => void\n children: Function\n}) => {\n return (\n \n \n \n

{title}

\n
\n
\n {children(closeModal)}\n
\n )\n}\n\nexport default Modal\n","import { Button } from '../../ui/Button'\nimport Modal from './Modal'\nimport React, { ReactChild, ReactChildren, ReactNode, useState } from 'react'\n\nconst ButtonWithModal = ({\n title,\n buttonText,\n children,\n}: {\n title: string\n buttonText: string\n children: Function\n}) => {\n const [isModalVisible, setIsModalVisible] = useState(false)\n const closeModal = () => {\n setIsModalVisible(false)\n }\n const showModal = () => setIsModalVisible(true)\n return (\n <>\n \n {isModalVisible && (\n \n {children}\n \n )}\n \n )\n}\nexport default ButtonWithModal\n","import { IBuilding } from '../InDoor/components/Interface'\nimport React, { useContext, useMemo, useState } from 'react'\nimport { AccessTokenCtx } from '../Context'\nimport { createPlan } from '../../store/action'\nimport {\n EuiButton,\n EuiFieldText,\n EuiForm,\n EuiFormRow,\n EuiSelect,\n EuiSpacer,\n} from '@elastic/eui'\n\nexport const CreatePlanForm = ({\n buildings,\n closeModal,\n refresh,\n}: {\n buildings: IBuilding[]\n closeModal: Function\n refresh: Function\n}) => {\n const accessToken = useContext(AccessTokenCtx)\n const buildingOptions = useMemo(\n () =>\n buildings.map((building) => {\n return {\n value: building.ID,\n text: building.name,\n }\n }),\n [buildings]\n )\n const [buildingOption, setBuildingOption] = useState(\n buildingOptions[0].value\n )\n const [planName, setPlanName] = useState('')\n const [formStatus, setFormStatus] = useState({\n loading: false,\n validation: {\n name: false,\n building: false,\n },\n invalidated: false,\n validationErrors: new Array(),\n })\n\n const onPickBuilding = (e: any) => {\n setBuildingOption(parseInt(e.target.value))\n }\n const onPlanNameChange = (e: any) => {\n setPlanName(e.target.value)\n }\n const validate = () => {\n const status = {\n ...formStatus,\n validation: {\n name: false,\n building: false,\n },\n invalidated: false,\n validationErrors: new Array(),\n }\n if (planName.length === 0) {\n status.validationErrors.push('Plan name is required')\n status.validation.name = true\n status.invalidated = true\n }\n if (buildingOption <= 0) {\n status.validationErrors.push('Building is required')\n status.validation.building = true\n status.invalidated = true\n }\n\n return status\n }\n const submit = () => {\n const status = validate()\n if (status.invalidated) {\n setFormStatus({ ...status })\n }\n setFormStatus({ ...status, loading: true })\n if (status.invalidated) {\n return\n }\n createPlan(\n accessToken,\n {\n name: planName,\n buildingId: buildingOption,\n },\n ({ success }: { success: boolean }) => {\n setFormStatus({ ...formStatus, loading: false })\n if (success) {\n refresh()\n closeModal()\n }\n }\n )\n }\n return (\n <>\n \n \n \n \n \n onPickBuilding(e)}\n aria-label=\"Use aria labels when no actual label is in use\"\n />\n \n \n \n Create\n \n )\n}\n","import React, { useContext, useState } from 'react'\nimport { AccessTokenCtx } from '../Context'\nimport { createBuilding } from '../../store/action'\nimport {\n EuiButton,\n EuiFieldText,\n EuiForm,\n EuiFormRow,\n EuiSpacer,\n} from '@elastic/eui'\n\nexport const CreateBuildingForm = ({\n closeModal,\n refresh,\n}: {\n closeModal: Function\n refresh: Function\n}) => {\n const accessToken = useContext(AccessTokenCtx)\n const [formData, setFormData] = useState({\n name: '',\n group: '',\n })\n const [formStatus, setFormStatus] = useState({\n loading: false,\n validation: {\n name: false,\n group: false,\n },\n invalidated: false,\n validationErrors: new Array(),\n })\n\n const onChange = (e: any) => {\n setFormData({ ...formData, [e.target.name]: e.target.value })\n }\n const submit = () => {\n const validationStatus = validate()\n if (validationStatus.invalidated) {\n setFormStatus({ ...validationStatus })\n }\n setFormStatus({ ...validationStatus, loading: true })\n createBuilding(\n accessToken,\n { ...formData },\n ({ success }: { success: boolean }) => {\n setFormStatus({ ...validationStatus, loading: false })\n if (success) {\n refresh()\n closeModal()\n }\n }\n )\n }\n\n const validate = () => {\n const status = {\n ...formStatus,\n validation: {\n name: false,\n group: false,\n },\n invalidated: false,\n validationErrors: new Array(),\n }\n if (formData.name === '') {\n status.validation.name = true\n status.invalidated = true\n status.validationErrors.push('Name is required')\n }\n if (formData.group === '') {\n status.validation.group = true\n status.invalidated = true\n status.validationErrors.push('Group is required')\n }\n return status\n }\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n Create\n \n \n )\n}\n","import React, { useContext, useMemo, useState } from 'react'\nimport {\n EuiButton,\n EuiFlexGroup,\n EuiFlexItem,\n EuiForm,\n EuiModal,\n EuiModalBody,\n EuiModalHeader,\n EuiModalHeaderTitle,\n EuiSelect,\n} from '@elastic/eui'\nimport { IBuilding } from '../InDoor/components/Interface'\nimport { deleteBuilding } from '../../store/action'\nimport { AccessTokenCtx } from '../Context'\nconst DeleteBuildingForm = ({\n buildings,\n closeModal,\n refresh,\n}: {\n buildings: IBuilding[]\n closeModal: Function\n refresh: Function\n}) => {\n const accessToken = useContext(AccessTokenCtx)\n const options = useMemo(() => {\n return buildings.map((building) => {\n return { value: building.ID, text: building.name }\n })\n }, [buildings])\n const [value, setValue] = useState(options[1].value)\n const [doubleConfirm, setDoubleConfirm] = useState(false)\n\n const onChange = (e: React.ChangeEvent) => {\n setValue(parseInt(e.target.value))\n }\n\n const onFirstConfirm = () => {\n setDoubleConfirm(true)\n }\n const closeSecondConfirm = () => {\n setDoubleConfirm(false)\n }\n const onSecondConfirm = () => {\n deleteBuilding(accessToken, value)?.finally(() => {\n closeSecondConfirm()\n refresh()\n closeModal()\n })\n }\n return (\n \n \n onChange(e)}\n aria-label=\"building picker\"\n />\n \n \n \n \n {\n closeModal()\n }}\n color={'text'}\n >\n Cancel\n \n \n \n Confirm\n \n \n \n {doubleConfirm ? (\n \n \n \n

Please Confirm the Deletion

\n
\n
\n \n \n \n \n Cancel\n \n \n \n \n Confirm\n \n \n \n \n
\n ) : (\n <>\n )}\n
\n )\n}\n\nexport default DeleteBuildingForm\n","import React, { useContext, useMemo, useState } from 'react'\nimport {\n EuiButton,\n EuiFlexGroup,\n EuiFlexItem,\n EuiForm,\n EuiModal,\n EuiModalBody,\n EuiModalHeader,\n EuiModalHeaderTitle,\n EuiSelect,\n} from '@elastic/eui'\nimport { IBuilding, IPlan } from '../InDoor/components/Interface'\nimport { deletePlan } from '../../store/action'\nimport { AccessTokenCtx } from '../Context'\n\nconst DeletePlanForm = ({\n plans,\n buildings,\n closeModal,\n refresh,\n}: {\n buildings: IBuilding[]\n plans: IPlan[]\n closeModal: Function\n refresh: Function\n}) => {\n const accessToken = useContext(AccessTokenCtx)\n const getPlanLabel = (plan: IPlan, buildings: IBuilding[]) => {\n const building = buildings.find(\n (building) => building.ID === plan.buildingId\n )\n return `Building: ${building?.name} - Plan: ${plan.name}`\n }\n const options = useMemo(() => {\n return plans.map((plan) => {\n return { value: plan.ID, text: getPlanLabel(plan, buildings) }\n })\n }, [plans])\n const [value, setValue] = useState(options[1].value)\n const [doubleConfirm, setDoubleConfirm] = useState(false)\n\n const onChange = (e: React.ChangeEvent) => {\n setValue(parseInt(e.target.value))\n }\n\n const onFirstConfirm = () => {\n setDoubleConfirm(true)\n }\n const closeSecondConfirm = () => {\n setDoubleConfirm(false)\n }\n const onSecondConfirm = () => {\n deletePlan(accessToken, value)?.finally(() => {\n closeSecondConfirm()\n refresh()\n closeModal()\n })\n }\n return (\n \n \n onChange(e)}\n aria-label=\"building picker\"\n />\n \n \n \n \n {\n closeModal()\n }}\n color={'text'}\n >\n Cancel\n \n \n \n Confirm\n \n \n \n {doubleConfirm ? (\n \n \n \n

Please Confirm the Deletion

\n
\n
\n \n \n \n \n Cancel\n \n \n \n \n Confirm\n \n \n \n \n
\n ) : (\n <>\n )}\n
\n )\n}\n\nexport default DeletePlanForm\n","import React, { useContext, useEffect, useMemo, useState } from 'react'\nimport { AgGridColumn, AgGridReact } from 'ag-grid-react'\nimport styled from 'styled-components'\nimport { useTranslation } from 'react-i18next'\nimport { GridReadyEvent } from 'ag-grid-community/dist/lib/events'\nimport { CellValueChangedEvent, ColumnApi, GridApi } from 'ag-grid-community'\nimport { AccessTokenCtx } from './Context'\nimport {\n fetchBuildings,\n fetchDevices,\n fetchPlans,\n updateIndoorDevice,\n} from '../store/action'\nimport { IGeolocation } from '../intefaces/map'\nimport { IBuilding, IPlan } from './InDoor/components/Interface'\nimport ButtonWithModal from './Admin/ButtonWithModal'\nimport { CreatePlanForm } from './Admin/CreatePlanForm'\nimport { CreateBuildingForm } from './Admin/CreateBuildingForm'\nimport DeleteBuildingForm from './Admin/DeleteBuildingForm'\nimport DeletePlanForm from './Admin/DeletePlanForm'\n\nconst DeviceOverrideInfo = () => {\n const { t } = useTranslation()\n const accessToken = useContext(AccessTokenCtx)\n const [gridApi, setGridApi] = useState()\n const [gridColumnApi, setGridColumnApi] = useState()\n const [rowData, setRowData] = useState([])\n const [plans, setPlans] = useState([])\n const [buildings, setBuildings] = useState([])\n const planOptions = useMemo(() => {\n return [-1].concat(plans.map((plan) => plan.ID))\n }, [plans])\n useEffect(() => {\n try {\n fetchDevices(accessToken, setRowData)\n fetchBuildings(accessToken, setBuildings)\n fetchPlans(accessToken, setPlans)\n } catch (e) {\n console.error(e)\n }\n }, [])\n\n const updateDevice = (deviceInfo: any) => {\n try {\n return fetch('/api/v3/device', {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'content-type': 'application/json',\n },\n method: 'POST',\n body: JSON.stringify(deviceInfo),\n })\n } catch (e) {\n console.error(e)\n }\n }\n\n const resizeGrid = () => {\n gridColumnApi?.autoSizeAllColumns()\n }\n const onGridReady = (e: GridReadyEvent) => {\n setGridApi(e.api)\n setGridColumnApi(e.columnApi)\n e.columnApi.autoSizeAllColumns()\n }\n return (\n
\n \n \n {(closeModal: Function) => (\n \n fetchBuildings(accessToken, setBuildings)\n }\n />\n )}\n \n\n \n {(closeModal: Function) => (\n fetchPlans(accessToken, setPlans)}\n />\n )}\n \n \n {(closeModal: Function) => (\n {\n fetchBuildings(accessToken, setBuildings)\n fetchPlans(accessToken, setPlans)\n fetchDevices(accessToken, setRowData)\n }}\n />\n )}\n \n \n {(closeModal: Function) => (\n {\n fetchBuildings(accessToken, setBuildings)\n fetchPlans(accessToken, setPlans)\n fetchDevices(accessToken, setRowData)\n }}\n />\n )}\n \n
\n \n {\n resizeGrid()\n }}\n defaultColDef={{\n flex: 1,\n minWidth: 110,\n editable: true,\n resizable: true,\n }}\n onCellValueChanged={(param: CellValueChangedEvent) => {\n if (param.colDef.headerName === 'Plan') {\n updateIndoorDevice(accessToken, {\n devEUI: param.data.deviceId,\n planId: param.value,\n sensorType: param.data.sensorType,\n })\n } else {\n updateDevice(param.data)\n }\n }}\n >\n \n \n \n \n \n \n \n {\n if (params.value === -1) {\n return 'None'\n }\n const plan = plans.find(\n (plan) => plan.ID === params.value\n )\n return plan?.name ?? ''\n }}\n cellEditor=\"agSelectCellEditor\"\n cellEditorParams={{\n values: planOptions,\n }}\n />\n \n \n \n )\n}\n\nexport default DeviceOverrideInfo\n\nconst AgGridWrapper = styled.div`\n width: 100vw;\n height: calc(100vh - 61px);\n transition: max-height 1s;\n`\n\nfunction getNumericCellEditor() {\n function isCharNumeric(charStr: any, value: string) {\n return /\\d/.test(charStr) || (charStr === '.' && !/\\./.test(value))\n }\n\n function isKeyPressedNumeric(event: any, value: string) {\n var charCode = getCharCodeFromEvent(event)\n var charStr = String.fromCharCode(charCode)\n return isCharNumeric(charStr, value)\n }\n\n function getCharCodeFromEvent(event: any) {\n event = event || window.event\n return typeof event.which === 'undefined' ? event.keyCode : event.which\n }\n\n function NumericCellEditor() {}\n\n NumericCellEditor.prototype.init = function (params: any) {\n this.focusAfterAttached = params.cellStartedEdit\n this.eInput = document.createElement('input')\n this.eInput.style.width = '100%'\n this.eInput.style.height = '100%'\n this.eInput.style.border = '0px'\n this.eInput.value = isCharNumeric(params.charPress, this.eInput.value)\n ? params.charPress\n : params.value\n var that = this\n this.eInput.addEventListener('keypress', function (event: any) {\n if (!isKeyPressedNumeric(event, that.eInput.value)) {\n that.eInput.focus()\n if (event.preventDefault) event.preventDefault()\n }\n })\n }\n NumericCellEditor.prototype.getGui = function () {\n return this.eInput\n }\n NumericCellEditor.prototype.afterGuiAttached = function () {\n if (this.focusAfterAttached) {\n this.eInput.focus()\n this.eInput.select()\n }\n }\n NumericCellEditor.prototype.isCancelBeforeStart = function () {\n return this.cancelBeforeStart\n }\n NumericCellEditor.prototype.isCancelAfterEnd = function () {}\n NumericCellEditor.prototype.getValue = function () {\n return parseFloat(this.eInput.value)\n }\n NumericCellEditor.prototype.focusIn = function () {\n var eInput = this.getGui()\n eInput.focus()\n eInput.select()\n }\n NumericCellEditor.prototype.focusOut = function () {}\n return NumericCellEditor\n}\n","var _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nvar _ref2 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"m254.618 188.692c-36.352 0-65.926 29.574-65.926 65.926s29.574 65.926 65.926 65.926 65.926-29.574 65.926-65.926-29.575-65.926-65.926-65.926zm0 101.852c-19.81 0-35.926-16.117-35.926-35.926s16.117-35.926 35.926-35.926 35.926 16.117 35.926 35.926-16.117 35.926-35.926 35.926z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"m337.461 154.133c-6.39-5.274-15.845-4.368-21.117 2.021-5.273 6.39-4.368 15.844 2.021 21.117 23.184 19.133 36.48 47.325 36.48 77.347s-13.296 58.214-36.48 77.347c-6.389 5.273-7.294 14.727-2.021 21.117 2.966 3.594 7.255 5.453 11.577 5.453 3.362 0 6.744-1.125 9.54-3.432 30.114-24.852 47.385-61.478 47.385-100.485s-17.271-75.633-47.385-100.485z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"m193.236 332.771c-24.688-19.156-38.847-48.038-38.847-79.242 0-30.022 13.296-58.214 36.48-77.347 6.389-5.273 7.294-14.727 2.021-21.117-5.272-6.389-14.727-7.294-21.117-2.021-30.113 24.852-47.384 61.478-47.384 100.485 0 40.542 18.391 78.063 50.457 102.944 2.735 2.122 5.972 3.149 9.185 3.149 4.477 0 8.905-1.995 11.862-5.805 5.077-6.544 3.888-15.967-2.657-21.046z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"m431.837 175.578c-10.461-23.763-25.373-44.889-44.32-62.791-6.021-5.689-15.514-5.42-21.205.601-5.689 6.021-5.42 15.515.602 21.205 33.049 31.227 51.25 73.453 51.25 118.9 0 45.929-19.49 90.017-53.473 120.961-6.125 5.578-6.569 15.064-.992 21.19 2.96 3.25 7.02 4.901 11.095 4.901 3.604 0 7.22-1.292 10.095-3.909 40.212-36.616 63.274-88.79 63.274-143.143.001-27.092-5.492-53.306-16.326-77.915z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"m147.534 378.073c-35.883-31.113-56.463-76.17-56.463-123.618 0-47.274 20.455-92.223 56.12-123.32 6.244-5.444 6.892-14.919 1.448-21.164-5.444-6.244-14.919-6.893-21.164-1.448-42.201 36.795-66.404 89.986-66.404 145.932 0 56.151 24.351 109.47 66.81 146.284 2.838 2.461 6.337 3.667 9.82 3.667 4.198 0 8.374-1.753 11.339-5.173 5.428-6.259 4.753-15.732-1.506-21.16z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"m487.613 151.121c-13.856-31.352-33.599-59.198-58.681-82.764-6.038-5.673-15.531-5.378-21.203.661-5.673 6.037-5.377 15.53.661 21.203 22.138 20.8 39.561 45.371 51.783 73.027 12.648 28.621 19.062 59.137 19.062 90.703 0 31.888-6.541 62.691-19.44 91.553-12.466 27.893-30.213 52.598-52.75 73.43-6.083 5.623-6.456 15.113-.833 21.197 2.957 3.198 6.981 4.818 11.019 4.818 3.642 0 7.293-1.318 10.178-3.985 25.532-23.602 45.643-51.6 59.774-83.218 14.632-32.738 22.051-67.66 22.051-103.794.001-35.77-7.274-70.367-21.621-102.831z\"\n}), /*#__PURE__*/React.createElement(\"path\", {\n d: \"m104.819 421.993c-47.548-42.586-74.819-103.592-74.819-167.375s27.271-124.79 74.819-167.375c6.171-5.527 6.693-15.01 1.167-21.181-5.528-6.171-15.011-6.693-21.181-1.167-53.895 48.27-84.805 117.421-84.805 189.723s30.91 141.453 84.804 189.723c2.863 2.564 6.439 3.826 10.002 3.826 4.116 0 8.216-1.685 11.179-4.993 5.527-6.17 5.005-15.653-1.166-21.181z\"\n}));\nfunction SvgSensor(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_1\",\n enableBackground: \"new 0 0 509.235 509.235\",\n height: 25,\n viewBox: \"0 0 509.235 509.235\",\n width: 25,\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _ref2);\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgSensor);\nexport default __webpack_public_path__ + \"static/media/sensor.dab5e5d3.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react'\r\nimport { Chart, Line } from 'bizcharts'\r\nimport { IHistory } from './Interface'\r\nconst SimpleChart = ({ data }: { data: IHistory[] }) => {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default SimpleChart\r\n","import React from 'react'\nimport styled from 'styled-components'\nimport { useTranslation } from 'react-i18next'\nimport { IBuilding } from './Interface'\nimport { Button } from '../../../ui/Button'\nimport { ReactComponent as SensorSvg } from '../../../assets/sensor.svg'\nimport SimpleChart from './SimpleChart'\nimport { Green, Red } from '../../../theme/theme'\nconst PlanSideBar = ({\n buildings,\n pickedBuildingId,\n setPickedBuildingId,\n}: {\n buildings: IBuilding[]\n pickedBuildingId: number\n setPickedBuildingId: Function\n}) => {\n const { t } = useTranslation()\n return (\n \n \n {t('Sensors')}\n \n \n \n \n \n {buildings?.map(({ ID, name, summary, history }) => (\n {\n setPickedBuildingId(ID)\n }}\n >\n \n \n \n {name}\n {history?.length > 0 ? (\n \n ) : (\n <>\n )}\n \n {`${t(\n 'Temperature'\n )}: ${summary.avgTemperature.toFixed(\n 1\n )}°C`}\n {`${t(\n 'Humidity'\n )}: ${summary.avgHumidity.toFixed(1)}%`}\n \n \n ))}\n \n \n )\n}\n\nexport default PlanSideBar\n\nconst Container = styled.div`\n display: flex;\n flex: 0 0 250px;\n justify-content: start;\n flex-direction: column;\n align-items: center;\n background-color: rgb(249 249 249);\n border-right: 1px solid #d6d6d6;\n overflow-y: hidden;\n height: calc(100vh - 60px);\n box-sizing: content-box;\n`\n\nconst Line = styled.div`\n margin: 10px 0;\n`\nconst SectionHeader = styled.div`\n display: flex;\n justify-content: start;\n width: 90%;\n margin: 10px 0 10px 20px;\n`\nconst SectionTitle = styled.div`\n font-weight: 500;\n font-size: 18px;\n opacity: 1;\n text-align: left;\n color: rgba(153, 153, 153, 1);\n`\nconst SectionList = styled.div`\n display: flex;\n width: 90%;\n justify-content: start;\n flex-direction: column;\n overflow-y: auto;\n`\nconst SectionContent = styled.div<{\n selected?: boolean\n hovered?: boolean\n}>`\n display: flex;\n margin: 10px;\n width: 90%;\n\n padding: 10px 0;\n &:hover {\n box-shadow: 0px 1px 10px rgb(0 0 0 / 25%);\n }\n ${({ hovered }) =>\n hovered ? 'box-shadow: 0px 1px 10px rgb(0 0 0 / 25%);' : ''}\n ${({ selected }) =>\n selected ? 'box-shadow: 0px 1px 10px rgb(0 0 0 / 25%);' : ''}\n cursor:pointer;\n transition: box-shadow 0.3s ease-in-out;\n align-items: center;\n`\nconst PlanIcon = styled.div<{}>`\n width: 25px;\n height: 25px;\n margin: 0px 10px;\n`\n\nconst SensorDetails = styled.div`\n display: flex;\n flex-direction: column;\n max-width: 155px;\n overflow-wrap: break-word;\n`\nconst SensorTitle = styled.div`\n display: grid;\n grid-template-columns: 100px auto;\n justify-items: flex-start;\n align-items: center;\n`\nconst SensorSub = styled.sub`\n font-size: 10px;\n color: grey;\n`\n\nconst StyledSensorSvg = styled(SensorSvg)<{ highLowTemperatureAlert: boolean }>`\n fill: ${({ highLowTemperatureAlert }) =>\n highLowTemperatureAlert ? Red : Green};\n width: 30px;\n height: auto;\n padding: 5px;\n}\n`\n","import React, { useRef } from 'react'\r\nimport styled from 'styled-components'\r\n\r\nconst PlanManager = () => {\r\n const fileUploader = useRef(null)\r\n const fileName = useRef(null)\r\n\r\n return (\r\n \r\n
Plan File
\r\n \r\n
Plan Name:
\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default PlanManager\r\n\r\nconst Wrapper = styled.div``\r\n","export default __webpack_public_path__ + \"static/media/houche2.21a7faa7.png\";","import React from 'react'\r\nimport styled from 'styled-components'\r\n\r\nconst SensorWidget = ({\r\n size,\r\n labelLeft,\r\n labelRight,\r\n unitLeft,\r\n unitRight,\r\n percentageLeft,\r\n percentageRight,\r\n}: {\r\n size: number\r\n labelLeft: string\r\n labelRight: string\r\n unitLeft: string\r\n unitRight: string\r\n percentageLeft: number\r\n percentageRight: number\r\n}) => {\r\n return (\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n {labelLeft}\r\n
{unitLeft}
\r\n
\r\n \r\n {labelRight}\r\n
{unitRight}
\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default SensorWidget\r\nconst Wrapper = styled.div`\r\n position: relative;\r\n height: 73px;\r\n width: 102px;\r\n`\r\nconst Data = styled.div`\r\n display: grid;\r\n position: absolute;\r\n top: 0;\r\n place-items: center;\r\n height: 73px;\r\n width: 102px;\r\n grid-template-columns: 50% 50%;\r\n`\r\nconst Text = styled.div`\r\n width: 100%;\r\n text-align: center;\r\n`\r\nconst WidgetRight = styled.svg`\r\n position: absolute;\r\n top: 0px;\r\n left: 30px;\r\n width: 73px;\r\n height: 73px;\r\n transform: rotate(-90deg) scaleX(-1);\r\n z-index: 1000;\r\n margin: 0;\r\n padding: 0;\r\n font-family: 'Roboto', sans-serif;\r\n`\r\n\r\nconst WidgetLeft = styled.svg`\r\n position: absolute;\r\n top: 0px;\r\n left: 0;\r\n width: 73px;\r\n height: 73px;\r\n transform: rotate(90deg);\r\n z-index: 1000;\r\n margin: 0;\r\n padding: 0;\r\n font-family: 'Roboto', sans-serif;\r\n`\r\n\r\nconst Circle = styled.circle<{ perimeter: string; percentage: number }>`\r\n width: 100%;\r\n height: 100%;\r\n transform: translate(2px, 2px);\r\n fill: none;\r\n stroke-width: 3px;\r\n stroke-linecap: round;\r\n stroke-dashoffset: ${({ perimeter, percentage }) =>\r\n `calc(${perimeter} - (${perimeter} / 2 * ${percentage}) / 100);`} \r\n stroke: #00a1ff;\r\n stroke-dasharray: ${({ perimeter }) => perimeter};\r\n`\r\n","import React from 'react'\nimport styled from 'styled-components'\nimport { IChirpstackDevice } from './Interface'\nimport moment from 'moment'\nimport { useTranslation } from 'react-i18next'\n\nconst SensorDetails = ({\n hovered,\n devices,\n positions,\n parentWidth,\n}: {\n hovered?: boolean\n devices?: IChirpstackDevice[] | undefined\n positions?: number[]\n parentWidth?: number | undefined\n setHovered: Function\n}) => {\n const { t } = useTranslation()\n const isOverflow = (parentWidth: number, positionX: number) => {\n return parentWidth * positionX + 50 + 550 > parentWidth\n }\n return (\n \n \n
{t('Name')}
\n
{t('Date')}
\n
{t('Temperature')}
\n
{t('Humidity')}
\n
\n {devices?.map(\n ({\n ID,\n name,\n deviceName,\n geoLocation,\n lastMeasure: { temperature, humidity, CreatedAt },\n }) => (\n \n
{geoLocation?.location || name || deviceName}
\n
{moment(CreatedAt).fromNow()}
\n
{temperature.toFixed(1)}°C
\n
{humidity.toFixed(1)}%
\n
\n )\n )}\n \n )\n}\n\nexport default SensorDetails\n\nconst Wrapper = styled.div<{ hovered?: boolean; isOverflow: boolean }>`\n position: absolute;\n z-index: ${({ hovered }) => (hovered ? 10000 : -1)};\n top: 0;\n ${({ isOverflow }) => (isOverflow ? 'right: 110px;' : 'left: 110px;')}\n background: white;\n box-shadow: 0px 1px 10px rgb(0 0 0 / 25%);\n display: flex;\n flex-direction: column;\n opacity: ${({ hovered }) => (hovered ? 1 : 0)};\n transition: opacity 0.5s ease;\n max-height: 500px;\n overflow-y: scroll;\n`\n\nconst Row = styled.div`\n background: white;\n box-shadow: 0px 1px 10px rgb(0 0 0 / 25%);\n display: flex;\n justify-content: space-around;\n > div:nth-child(1) {\n width: 200px;\n padding: 3px;\n }\n > div:nth-child(2) {\n width: 200px;\n padding: 3px;\n }\n > div {\n width: 100px;\n }\n`\n","import React, { useEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport { IChirpstackDevice, ISensorMeasure } from './Interface'\nimport SensorWidget from './SensorWidget'\nimport {\n gradientBlue,\n gradientGreen,\n gradientOrange,\n gradientRed,\n} from '../../../theme/theme'\nimport SensorDetails from './SensorDetails'\nimport { getTemperaturePercentage } from './utils'\n\nfunction useMoveInOut() {\n const [hideTimeout, setHideTimeout] = useState()\n const [hovered, setHovered] = useState(false)\n const [delayedHovered, setDelayedHovered] = useState(false)\n\n useEffect(() => {\n if (hovered) {\n if (hideTimeout) {\n clearTimeout(hideTimeout)\n }\n setDelayedHovered(true)\n } else {\n setHideTimeout(\n setTimeout(() => {\n setDelayedHovered(false)\n }, 200)\n )\n }\n }, [hovered])\n\n return [delayedHovered, setHovered] as const\n}\nexport const SensorWithData = ({\n indoorPosition,\n measure,\n picked,\n onContextMenu,\n devices,\n parentWidth,\n onClick,\n}: {\n measure: ISensorMeasure\n indoorPosition: number[]\n picked: boolean\n onContextMenu: Function\n // for global mode, we show devices as additional info\n devices?: IChirpstackDevice[]\n parentWidth?: number\n onClick?: Function\n}) => {\n const [hovered, setHovered] = useMoveInOut()\n const getBackGroundColor = (temperature: number) => {\n if (measure.highLowTemperatureAlert) {\n return gradientRed\n }\n if (temperature < 17) {\n return gradientBlue\n } else if (temperature > 23) {\n return gradientOrange\n }\n return gradientGreen\n }\n return (\n {\n onClick?.()\n }}\n onContextMenu={(e) => {\n e.preventDefault()\n onContextMenu()\n }}\n onMouseEnter={(e) => {\n setHovered(true)\n }}\n onMouseLeave={(e) => {\n setHovered(false)\n }}\n backgroundColor={getBackGroundColor(measure.temperature)}\n >\n \n {(devices?.length ?? 0) > 0 ? (\n \n ) : (\n <>\n )}\n\n {/**/}\n {/* */}\n {/* */}\n {/* {measure?.temperature?.toFixed(1) || 0}°C*/}\n {/* */}\n {/* */}\n {/* {measure?.humidity?.toFixed(1) || 0}%*/}\n {/* */}\n {/* */}\n {/* */}\n {/**/}\n {/**/}\n \n )\n}\n\n// We need to make a minimum position for the sensor, otherwise it will be hidden\nconst SensorData = styled.div<{\n indoorPosition: number[]\n picked: boolean\n backgroundColor: string\n}>`\n cursor: default;\n position: absolute;\n width: 102px;\n height: 73px;\n left: calc(\n ${({ indoorPosition }) => Math.max(0.03, indoorPosition[0]) * 100}% -\n 50px\n );\n top: calc(\n ${({ indoorPosition }) => Math.max(0.05, indoorPosition[1]) * 100}% -\n 60px\n );\n display: grid;\n grid-template-rows: 1fr 1fr;\n place-items: center;\n background: ${({ picked, backgroundColor }) =>\n picked ? gradientOrange : backgroundColor};\n font-size: 16px;\n font-weight: bold;\n box-shadow: 0px 1px 10px rgb(0 0 0 / 25%);\n border-radius: 50px;\n`\nconst DataLayer = styled.div`\n display: grid;\n grid-template-columns: 1fr 1fr;\n`\nconst SensorDataColumn = styled.div`\n display: grid;\n grid-template-rows: 1fr 1fr;\n place-items: center;\n`\nconst SensorTemperature = styled.div``\nconst SensorHumidity = styled.div``\nconst SensorImg = styled.img`\n width: 50px;\n height: 50px;\n`\nconst ArrowDown = styled.div`\n width: 0px;\n height: 0px;\n border-left: 10px solid transparent;\n border-right: 10px solid transparent;\n border-top: 10px solid #4bdbba;\n`\n","const TempMin = -20\r\nconst TempMax = 45\r\n\r\nexport const getTemperaturePercentage = (temp: number) =>\r\n ((temp - TempMin) / (TempMax - TempMin)) * 100\r\n","import styled from 'styled-components'\nimport React, { useRef } from 'react'\nimport Plan from '../../../assets/houche2.png'\nimport { SensorWithData } from './SensorWithData'\nimport { dropShaw } from '../../../theme/theme'\nimport { IChirpstackDevice } from './Interface'\n\nexport const PlanWithSensor = ({\n planName,\n planId,\n pickedSensor,\n setPickedSensor,\n sensors,\n updateSensorIndoorPosition,\n onContextMenu,\n}: {\n planName: string\n planId: number\n pickedSensor: number\n setPickedSensor: Function\n sensors: IChirpstackDevice[]\n updateSensorIndoorPosition: Function\n onContextMenu: Function\n}) => {\n const wrapperRef = useRef(null)\n return (\n <>\n {\n e.preventDefault()\n }}\n >\n {\n updateSensorIndoorPosition([\n wrapperRef.current\n ? (ev.clientX -\n (wrapperRef.current.offsetLeft ?? 0)) /\n wrapperRef.current.clientWidth\n : 0,\n wrapperRef.current\n ? (ev.clientY -\n (wrapperRef?.current?.offsetTop ?? 0)) /\n wrapperRef.current.clientHeight\n : 0,\n ])\n }}\n onContextMenu={() => {\n onContextMenu()\n }}\n alt={'indoor plan'}\n />\n {sensors\n ?.filter((d) => d.planId === planId)\n ?.map(({ ID, indoorX, indoorY, lastMeasure }) => (\n {\n setPickedSensor(ID)\n }}\n />\n ))}\n \n \n )\n}\nconst Wrapper = styled.div`\n position: relative;\n width: 100%;\n height: calc(100vh - 60px);\n ${dropShaw(10)}\n`\nconst Img = styled.img`\n width: 100%;\n height: 100%;\n`\n","import styled from 'styled-components'\r\nimport { dropShaw } from '../../../theme/theme'\r\nimport { IPlan } from './Interface'\r\nimport PlanManager from './PlanManager'\r\nimport { PlanWithSensor } from './PlanWithSensor'\r\nimport React, { useState } from 'react'\r\n\r\nexport function PlanMonitor({\r\n isAdmin,\r\n pickedPlanId,\r\n pickedSensorId,\r\n setPickedSensorId,\r\n setPickedPlanId,\r\n updateSensorIndoorPosition,\r\n plans,\r\n}: {\r\n isAdmin: boolean\r\n pickedPlanId: number\r\n pickedSensorId: number\r\n setPickedSensorId: (id: number) => void\r\n setPickedPlanId: (id: number) => void\r\n updateSensorIndoorPosition: Function\r\n plans: IPlan[]\r\n}) {\r\n const [tooltipDisplay, setTooltipDisplay] = useState(false)\r\n return (\r\n
\r\n \r\n \r\n
Picked Plan
\r\n \r\n setPickedPlanId(parseInt(e.target.value))\r\n }\r\n >\r\n \r\n {plans?.map(({ ID, name }) => (\r\n \r\n {name}\r\n \r\n ))}\r\n \r\n
\r\n \r\n
Picked Sensor
\r\n \r\n setPickedSensorId(parseInt(e.target.value))\r\n }\r\n >\r\n \r\n {plans\r\n ?.find((p) => p.ID === pickedPlanId)\r\n ?.chirpstackDevices?.map(({ ID, deviceName }) => (\r\n \r\n {deviceName}\r\n \r\n ))}\r\n \r\n
\r\n \r\n
\r\n {plans.map(({ ID, name, chirpstackDevices }) => (\r\n {\r\n if (!isAdmin) {\r\n return\r\n }\r\n setPickedSensorId(id)\r\n }}\r\n sensors={chirpstackDevices}\r\n updateSensorIndoorPosition={updateSensorIndoorPosition(ID)}\r\n onContextMenu={() => {\r\n if (!isAdmin) {\r\n return\r\n }\r\n setTooltipDisplay(!tooltipDisplay)\r\n }}\r\n />\r\n ))}\r\n
\r\n )\r\n}\r\n\r\nconst Tooltip = styled.div<{ visible: boolean }>`\r\n display: ${({ visible }) => (visible ? 'grid' : 'none')};\r\n grid-template-columns: 350px;\r\n grid-template-rows: 1fr 1fr 1fr;\r\n place-items: center;\r\n position: fixed;\r\n z-index: 1000;\r\n background: white;\r\n height: 280px;\r\n \r\n ${dropShaw(10)}\r\n}\r\n`\r\nconst SelectorGroup = styled.div`\r\n margin: 5px;\r\n width: 250px;\r\n font-size: 18px;\r\n`\r\nconst SensorSelector = styled.select`\r\n width: 250px;\r\n height: 25px;\r\n line-height: 25px;\r\n border: 0px;\r\n ${dropShaw(10)}\r\n`\r\nconst SensorOption = styled.option``\r\nconst PlanSelector = styled.select`\r\n width: 250px;\r\n height: 25px;\r\n border: 0px;\r\n ${dropShaw(10)}\r\n`\r\nconst PlanOption = styled.option``\r\n","import styled from 'styled-components'\nimport { dropShaw } from '../../../theme/theme'\nimport { IBuilding, IChirpstackDevice, IPlan } from './Interface'\nimport React, { useContext, useRef, useState } from 'react'\nimport Plan from '../../../assets/houche2.png'\nimport { SensorWithData } from './SensorWithData'\nimport 'moment/locale/fr'\nimport * as moment from 'moment'\nimport { updateBuildingIndoorPosition } from '../../../store/action'\nimport { AccessTokenCtx } from '../../Context'\nmoment.locale(window?.navigator?.language ?? 'en')\n\nexport function GlobalMonitor({\n buildings,\n isAdmin,\n refresh,\n}: {\n buildings: IBuilding[]\n isAdmin: boolean\n refresh: Function\n}) {\n const accessToken = useContext(AccessTokenCtx)\n const [pickedBuildingId, setPickedBuildingId] = useState(-1)\n const [\n enableBuildingIndoorPositionSetter,\n setEnableBuildingIndoorPositionSetter,\n ] = useState(false)\n const wrapperRef = useRef(null)\n const getBuildSensors = (plans: IPlan[]) => {\n return plans.reduce((acc, plan) => {\n plan.chirpstackDevices.forEach((device) => {\n acc.push(device)\n })\n return acc\n }, [] as IChirpstackDevice[])\n }\n return (\n
\n {\n e.preventDefault()\n }}\n >\n {\n e.preventDefault()\n if (isAdmin) {\n setEnableBuildingIndoorPositionSetter(\n !enableBuildingIndoorPositionSetter\n )\n if (enableBuildingIndoorPositionSetter) {\n setPickedBuildingId(-1)\n }\n }\n }}\n onClick={(ev) => {\n if (enableBuildingIndoorPositionSetter) {\n updateBuildingIndoorPosition(accessToken, {\n ID: pickedBuildingId,\n indoorX: wrapperRef.current\n ? (ev.clientX -\n (wrapperRef.current.offsetLeft ??\n 0)) /\n wrapperRef.current.clientWidth\n : 0,\n indoorY: wrapperRef.current\n ? (ev.clientY -\n (wrapperRef?.current?.offsetTop ??\n 0)) /\n wrapperRef.current.clientHeight\n : 0,\n })?.then(() => {\n refresh()\n })\n }\n }}\n />\n {buildings?.map(({ ID, indoorX, indoorY, summary, plans }) => (\n {\n if (enableBuildingIndoorPositionSetter) {\n setPickedBuildingId(ID)\n }\n }}\n onContextMenu={() => {}}\n />\n ))}\n \n
\n )\n}\n\nconst Wrapper = styled.div`\n position: relative;\n width: 100%;\n height: calc(100vh - 60px);\n ${dropShaw(10)}\n`\nconst Img = styled.img`\n width: 100%;\n height: 100%;\n`\n","import React, { useContext, useEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport PlanSideBar from './components/PlanSideBar'\nimport { IBuilding } from './components/Interface'\nimport { AccessTokenCtx } from '../Context'\nimport { PlanMonitor } from './components/PlanMonitor'\nimport { GlobalMonitor } from './components/GlobalMonitor'\n// fetch every 1 min\nconst interval = 30 * 1000\nconst InDoor = ({ groups }: { groups: string[] }) => {\n const isAdmin = () => groups.some((g) => g === 'admin')\n const accessToken = useContext(AccessTokenCtx)\n const [buildings, setBuildings] = useState([])\n const [fetchInterval, setFetchInterval] = useState()\n const [pickedBuildingId, setPickedBuildingId] = useState(0)\n const [pickedSensorId, setPickedSensorId] = useState(0)\n const [pickedPlanId, setPickedPlanId] = useState(0)\n const fetchBuildings = (accessToken: string) => {\n try {\n fetch('/api/v2/buildings', {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n })\n .then((res) => res.json())\n .then((data) => {\n setBuildings(data)\n })\n } catch (e) {\n console.error(e)\n }\n }\n const updateIndoorPosition = (planId: number, indoorPosition: number[]) => {\n try {\n if (!isAdmin()) {\n return\n }\n fetch('/api/v1/device/indoor', {\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${accessToken}`,\n },\n method: 'POST',\n body: JSON.stringify({\n deviceId: pickedSensorId,\n x: indoorPosition[0],\n y: indoorPosition[1],\n planId,\n }),\n }).then(() => {\n fetchBuildings(accessToken)\n })\n } catch (e) {\n console.error(e)\n }\n }\n const updateSensorIndoorPosition =\n (planId: number) => (indoorPosition: number[]) => {\n if (!pickedSensorId) {\n return\n }\n updateIndoorPosition(planId, indoorPosition)\n }\n useEffect(() => {\n fetchBuildings(accessToken)\n setFetchInterval(\n setInterval(() => {\n fetchBuildings(accessToken)\n }, interval)\n )\n return () => {\n if (fetchInterval !== undefined) {\n clearInterval(fetchInterval)\n }\n }\n }, [accessToken])\n return (\n \n {\n setPickedBuildingId(id)\n setPickedPlanId(\n buildings.find((b) => b.ID === id)?.plans?.[0]?.ID ?? 0\n )\n }}\n />\n {pickedBuildingId ? (\n setPickedSensorId(id)}\n setPickedPlanId={(id: number) => setPickedPlanId(id)}\n updateSensorIndoorPosition={updateSensorIndoorPosition}\n plans={\n buildings.find((b) => b.ID === pickedBuildingId)\n ?.plans ?? []\n }\n />\n ) : (\n {\n fetchBuildings(accessToken)\n }}\n />\n )}\n \n )\n}\n\nexport default InDoor\n\nconst Wrapper = styled.div`\n display: grid;\n grid-template-columns: 250px calc(100vw - 250px);\n`\n","import React, { useContext, useEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport SensorInfo from '../assets/sensor_g.svg'\nimport SensorRed from '../assets/sensor_r.svg'\nimport { Button } from '../ui/Button'\nimport moment from 'moment'\nimport { AccessTokenCtx } from './Context'\nimport { useTranslation } from 'react-i18next'\nimport { useHistory, useParams } from 'react-router-dom'\nimport { IGeolocation, IGeolocationChirpstack } from '../intefaces/map'\n\nconst Sidebar: React.FunctionComponent<{\n defaultGeolocations?: IGeolocation[]\n disableFetchLocation?: boolean\n forceClickable?: boolean\n children?: React.ReactChild | React.ReactChildren\n zoomToPoint?: Function\n onSensorSelected?: Function\n hoverId?: string\n selectedSensor: IGeolocation\n setSelectedSensor: Function\n}> = ({\n hoverId,\n children,\n zoomToPoint,\n onSensorSelected,\n forceClickable,\n defaultGeolocations,\n disableFetchLocation,\n selectedSensor,\n setSelectedSensor,\n}) => {\n const accessToken = useContext(AccessTokenCtx)\n const { t } = useTranslation()\n const { deviceId } = useParams<{ deviceId: string }>()\n const [geolocations, setGeolocations] = useState([])\n const geoSource = disableFetchLocation ? defaultGeolocations : geolocations\n\n const selectOrClear = (id: string) => {\n const idToSelect = selectedSensor?.deviceId !== id ? id : ''\n setSelectedSensor(geoSource?.find((g) => g.deviceId === id))\n onSensorSelected?.(id)\n zoomToPoint?.(idToSelect)\n }\n useEffect(() => {\n // use this hook to set the data when first load\n if (geolocations?.length > 0 && selectedSensor?.deviceId) {\n const selected = geolocations.find(\n (g) => g.deviceId === selectedSensor.deviceId\n )\n // when first load, we do not have device name loaded, we only get device id from url\n if (!selectedSensor.deviceName) {\n setSelectedSensor(selected)\n }\n }\n }, [geolocations, selectedSensor])\n useEffect(() => {\n try {\n if (!disableFetchLocation) {\n fetch('/api/v2/chirpstack/devices', {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n })\n .then((res) => res.json())\n .then((data) =>\n setGeolocations(\n data.sort((a: IGeolocation, b: IGeolocation) =>\n a.deviceName < b.deviceName ? -1 : 1\n )\n )\n )\n }\n } catch (e) {\n console.error(e)\n }\n }, [accessToken, disableFetchLocation])\n useEffect(() => {\n if (deviceId) {\n document?.getElementById(deviceId)?.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'nearest',\n })\n }\n }, [deviceId, document.getElementById(deviceId)])\n useEffect(() => {\n if (selectedSensor) {\n document?.getElementById(selectedSensor?.deviceId)?.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'nearest',\n })\n }\n }, [selectedSensor, document.getElementById(selectedSensor?.deviceId)])\n useEffect(() => {\n if (hoverId) {\n document?.getElementById(hoverId)?.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'nearest',\n })\n }\n }, [hoverId])\n return (\n \n {zoomToPoint !== undefined ? (\n \n \n \n ) : (\n <>\n )}\n \n {t('Sensors')}\n \n \n {geoSource?.map(\n ({\n deviceName,\n deviceId,\n lastMeasureAt,\n geoLocation: { location },\n }) => {\n const dead = moment(lastMeasureAt).isBefore(\n moment().add(-3, 'day')\n )\n return (\n {\n if (forceClickable || !dead) {\n selectOrClear(deviceId)\n }\n }}\n dead={!forceClickable && dead}\n hovered={hoverId === deviceName}\n >\n \n \n
\n {location ? location : deviceName}\n
\n \n {location ? deviceName : deviceId}\n \n \n \n )\n }\n )}\n
\n
\n )\n}\nexport default Sidebar\nconst Container = styled.div`\n display: flex;\n flex: 0 0 250px;\n justify-content: start;\n flex-direction: column;\n align-items: center;\n background-color: rgb(249 249 249);\n border-right: 1px solid #d6d6d6;\n overflow-y: hidden;\n height: calc(100vh - 60px);\n box-sizing: content-box;\n`\n\nconst Line = styled.div`\n margin: 10px 0;\n`\nconst SectionHeader = styled.div`\n display: flex;\n justify-content: start;\n width: 90%;\n margin: 10px 0 10px 20px;\n`\nconst SectionTitle = styled.div`\n font-weight: 500;\n font-size: 18px;\n opacity: 1;\n text-align: left;\n color: rgba(153, 153, 153, 1);\n`\nconst SectionList = styled.div`\n display: flex;\n width: 90%;\n justify-content: start;\n flex-direction: column;\n overflow-y: auto;\n`\nconst SectionContent = styled.div<{\n selected?: boolean\n dead: boolean\n hovered: boolean\n}>`\n display: flex;\n margin: 10px;\n width: 90%;\n\n padding: 10px 0;\n &:hover {\n box-shadow: 0px 1px 10px rgb(0 0 0 / 25%);\n }\n ${({ hovered }) =>\n hovered ? 'box-shadow: 0px 1px 10px rgb(0 0 0 / 25%);' : ''}\n ${({ selected }) =>\n selected ? 'box-shadow: 0px 1px 10px rgb(0 0 0 / 25%);' : ''}\n cursor:pointer;\n transition: box-shadow 0.3s ease-in-out;\n ${({ dead }) => (dead ? 'cursor:not-allowed;' : '')}\n align-items: center;\n`\nconst SensorIcon = styled.div<{ dead: boolean }>`\n width: 25px;\n height: 25px;\n margin: 0px 10px;\n background-image: url(${({ dead }) => (dead ? SensorRed : SensorInfo)});\n`\n","export const getDefaultLines = (t: any) => [\n {\n selector: [\n { key: 'temperature', label: t('Temperature'), unit: '[°C]' },\n { key: 'humidity', label: t('Humidity'), unit: '[%]' },\n ],\n title: `${t('Temperature')} / ${t('Humidity')}`,\n },\n {\n selector: [{ key: 'dewpoint', label: t('Dewpoint'), unit: '[ppb]' }],\n title: t('Dewpoint'),\n },\n {\n selector: [{ key: 'vdd', label: t('VDD'), unit: '' }],\n title: t('VDD'),\n },\n {\n selector: [\n { key: 'motion', label: t('Motion'), unit: '' },\n { key: 'light', label: t('Light'), unit: '[lux]' },\n ],\n title: `${t('Motion')} / ${t('Light')}`,\n },\n {\n selector: [{ key: 'co2', label: t('CO2'), unit: '[ppm]' }],\n title: t('CO2'),\n },\n]\n\nexport const getPrototypeLines = (t: any) => [\n {\n selector: [\n { key: 'temperature', label: t('Temperature'), unit: '[°C]' },\n { key: 'humidity', label: t('Humidity'), unit: '[%]' },\n ],\n title: `${t('Temperature')} / ${t('Humidity')}`,\n },\n {\n selector: [{ key: 'co2', label: t('CO2'), unit: '[ppm]' }],\n title: t('CO2'),\n },\n {\n selector: [{ key: 'tvoc', label: t('TVOC'), unit: '[ppb]' }],\n title: t('TVOC'),\n },\n {\n selector: [{ key: 'pm2dot5', label: t('PM 2.5'), unit: '' }],\n title: t('PM 2.5'),\n },\n {\n selector: [{ key: 'pm10', label: t('PM 10.0'), unit: '' }],\n title: t('PM 10.0'),\n },\n]\nexport const getPrototype2Lines = (t: any) => [\n {\n selector: [\n { key: 'temperature', label: t('Temperature'), unit: '[°C]' },\n ],\n title: `${t('Temperature')} `,\n },\n {\n selector: [{ key: 'humidity', label: t('Humidity'), unit: '[%]' }],\n title: t('Humidity'),\n },\n]\nexport const getTekelekLines = (t: any) => [\n {\n selector: [{ key: 'ullage', label: t('Ullage'), unit: '' }],\n title: t('Ullage'),\n },\n]\n\nexport const getLinesBySensorType = (t: any, sensorType: string) => {\n switch (sensorType) {\n case 'tekelek':\n return getTekelekLines(t)\n case 'proto':\n return getPrototypeLines(t)\n case 'proto2':\n return getPrototype2Lines(t)\n default:\n return getDefaultLines(t)\n }\n}\n\nexport const getExportedLines = (t: any, sensorType: string) => {\n return getLinesBySensorType(t, sensorType).reduce(\n (acc, line) => {\n line.selector.forEach((selector) => {\n acc.push(selector.key)\n })\n return acc\n },\n ['CreatedAt']\n )\n}\n","import React, { useContext, useEffect, useRef, useState } from 'react'\nimport styled from 'styled-components'\nimport LoadingBar from 'react-top-loading-bar'\n\nimport moment from 'moment'\nimport {\n EMode,\n IChirpstackDeviceMeasures,\n IData,\n ILine,\n} from '../../intefaces/measure'\nimport { DefaultColor, headerHeight, sideBarWidth } from '../../theme/theme'\nimport DashLineChart from '../DashboardUnits/DashLineChart'\nimport { AccessTokenCtx } from '../Context'\nimport { useTranslation } from 'react-i18next'\nimport { useHistory, useParams, useRouteMatch } from 'react-router-dom'\nimport DatePickers from '../DashboardUnits/DatePicker'\nimport DownloadSVG from '../../assets/download.svg'\nimport SideBarChirpstack from '../SideBarChirpstack'\nimport { getExportedLines, getLinesBySensorType } from './getLines'\nimport { IGeolocation } from '../../intefaces/map'\nimport { exportDataToXlsIoT } from '../../utils/export'\n\nexport interface IField {\n key: string\n label: string\n unit: string\n}\n\nconst getDashboardSizing = () => {\n const totalHeight = window.innerHeight - headerHeight - 40 - 45\n const totalWidth = window.innerWidth - sideBarWidth - 60\n const dividedBy = window.innerHeight < 1080 ? 4 : 5\n const partialHeight = Math.floor(totalHeight / dividedBy)\n const gaugeWidth = partialHeight * 1.4\n const chartWidth = totalWidth // - gaugeWidth * 2\n const verticalGaugeHeight = partialHeight * (dividedBy - 2)\n return { gaugeWidth, partialHeight, chartWidth, verticalGaugeHeight }\n}\n// fetch every 1 min\nconst interval = 60 * 1000\n\nconst Dashboard = () => {\n const { t } = useTranslation()\n const accessToken = useContext(AccessTokenCtx)\n const { path } = useRouteMatch()\n const history = useHistory()\n const { deviceId } = useParams<{ deviceId: string }>()\n const [data, setData] = useState([])\n const [lines, setLines] = useState<{ selector: ILine[]; title: string }[]>(\n []\n )\n const [sizing, setSizing] = useState(getDashboardSizing())\n const [selectedSensor, setSelectedSensor] = useState({\n deviceId,\n } as IGeolocation)\n const [fetchInterval, setFetchInterval] = useState()\n const [mode, setMode] = useState(EMode.Auto)\n const [exporting, setExporting] = useState(false)\n const [relativeDate, setRelativeDate] = useState<[Date, Date]>([\n new Date(),\n new Date(),\n ])\n const ref = useRef(null)\n const clearFetch = () => {\n if (fetchInterval !== undefined) {\n clearInterval(fetchInterval)\n }\n }\n useEffect(() => {\n window.addEventListener('resize', () => {\n setSizing(getDashboardSizing())\n })\n return () => {\n window.removeEventListener('resize', () => {\n setSizing(getDashboardSizing())\n })\n }\n }, [])\n useEffect(() => {\n if (mode === EMode.Relative) {\n fetchData(...relativeDate)\n }\n }, [mode, relativeDate, selectedSensor])\n useEffect(() => {\n clearFetch()\n if (selectedSensor?.deviceId) {\n if (mode === EMode.Auto) {\n fetchData()\n setFetchInterval(\n setInterval(() => {\n fetchData()\n }, interval)\n )\n return () => {\n if (fetchInterval !== undefined) {\n clearInterval(fetchInterval)\n }\n }\n }\n }\n }, [selectedSensor, mode])\n const fetchData = (start?: Date, end?: Date) => {\n if (!selectedSensor?.deviceId) {\n return\n }\n try {\n ref?.current?.continuousStart(10, 100)\n fetch(\n `/api/v1/chirpstack/measures?start=${\n start\n ? moment(start).unix()\n : moment().add(-3, 'days').unix()\n }&end=${end ? moment(end).unix() : ''}&deviceSerialNumber=${\n selectedSensor.deviceId\n }`,\n {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n }\n )\n .then((res) => res.json())\n .then((data) => {\n ref?.current?.complete()\n\n setData(data)\n })\n } catch (e) {\n console.error(e)\n }\n }\n const onSensorSelected = (id: string) => {\n history.push(path.replace('/:deviceId', '') + '/' + id)\n }\n\n const dataSelector = (\n data: IChirpstackDeviceMeasures[],\n source: IField[]\n ) => {\n const sortedData = data?.sort(\n (a, b) => moment(b.CreatedAt).unix() - moment(a.CreatedAt).unix()\n )\n return source.reduce((acc: IData[], cur) => {\n sortedData?.forEach((mv) => {\n const y = mv[cur.key as keyof IChirpstackDeviceMeasures]\n if (y !== undefined) {\n acc.push({\n x: moment(mv.CreatedAt).unix(),\n y,\n tooltipV: moment(mv.CreatedAt).format(\n 'YYYY/MM/DD HH:mm:ss'\n ),\n type: `${t(cur.label)} ${cur.unit}`,\n } as unknown as IData)\n }\n })\n return acc\n }, [])\n }\n\n useEffect(() => {\n setLines(\n getLinesBySensorType(t, selectedSensor.sensorType).map((line) => ({\n selector: dataSelector(data, line.selector),\n title: line.title,\n }))\n )\n }, [data, selectedSensor.sensorType, t])\n return (\n <>\n \n \n \n \n {\n setMode(EMode.Auto)\n }}\n onRelativeMode={(date: [Date, Date]) => {\n setMode(EMode.Relative)\n setRelativeDate(date)\n }}\n onRelativeDateChange={(date: [Date, Date]) => {\n setRelativeDate(date)\n }}\n />\n {\n if (!exporting && selectedSensor.deviceId) {\n exportDataToXlsIoT(\n data,\n selectedSensor.deviceName,\n getExportedLines(\n t,\n selectedSensor.sensorType\n )\n )\n }\n }}\n >\n \n \n \n {lines.map((line, index) => (\n \n \n \n ))}\n \n \n )\n}\n\nexport default Dashboard\n\nconst Container = styled.div`\n position: absolute;\n width: calc(100vw - 251px);\n height: calc(100vh - 90px);\n position: absolute;\n right: 0;\n top: 70px;\n overflow: auto;\n`\nconst FlexRow = styled.div`\n display: flex;\n margin: 5px 0;\n`\nconst DownloadWrapper = styled.div`\n margin: 5px 65px 5px 0;\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n`\nconst DownloadImg = styled.img`\n width: 30px;\n`\n","import React, { useContext, useEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport Select from 'react-select'\n\nimport { IGeolocation, IGeolocationChirpstack } from '../../intefaces/map'\nimport { AccessTokenCtx } from '../Context'\nimport { useTranslation } from 'react-i18next'\nimport moment from 'moment'\ninterface IDeviceOptions {\n label: string\n value: string\n platform: string\n device_type: string\n}\n\ninterface IWeekOptions {\n label: string\n value: number\n}\n\nconst ReportSelector = ({\n fetchReportData,\n}: {\n fetchReportData: (data: {\n week: number\n year: number\n identifier: string\n platform: string\n device_type: string\n }) => void\n}) => {\n const { t } = useTranslation()\n\n const generateWeekOptions = () => {\n const options = []\n for (let i = 1; i <= 52; i++) {\n const currentWeek = moment().week(i)\n options.push({\n label: `${t('Week')} ${i} (${currentWeek.format(\n 'DD/MM/YYYY'\n )} - ${currentWeek.add(6, 'days').format('DD/MM/YYYY')})`,\n value: i,\n })\n }\n return options\n }\n const accessToken = useContext(AccessTokenCtx)\n const [selectedDeviceOption, setSelectedDeviceOption] =\n useState()\n const [deviceOption, setDeviceOption] = useState([])\n const [weekOption] = useState(generateWeekOptions())\n const [selectedWeekOption, setSelectedWeekOption] = useState()\n useEffect(() => {\n if (selectedDeviceOption?.value && selectedWeekOption?.value) {\n fetchReportData({\n week: selectedWeekOption.value,\n year: new Date().getFullYear(),\n identifier: selectedDeviceOption.value,\n platform: selectedDeviceOption.platform,\n device_type: selectedDeviceOption.device_type,\n })\n }\n }, [selectedDeviceOption, selectedWeekOption])\n // const fetchNemoDevices = async () => {\n // try {\n // const response = await fetch('/api/v3/devices', {\n // headers: {\n // Authorization: `Bearer ${accessToken}`,\n // },\n // })\n // const data = (await response.json()) as IGeolocation[]\n // return data.map((device) => {\n // return {\n // label: device.location\n // ? `${device.location}(${device.name})`\n // : device.name,\n // value: device.name,\n // platform: 'nemocloud',\n // device_type: 'nemo',\n // }\n // })\n // } catch (e) {\n // console.error(e)\n // }\n // }\n const fetchChirpstackDevices = async () => {\n try {\n const response = await fetch('/api/v1/chirpstack/devices', {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n })\n const data = (await response.json()) as IGeolocationChirpstack[]\n return data.map((device) => {\n return {\n label: device.deviceName,\n value: device.deviceName,\n platform: 'chirpstack',\n device_type: 'ers',\n }\n })\n } catch (e) {\n console.error(e)\n }\n }\n useEffect(() => {\n Promise.all([\n // fetchNemoDevices(),\n fetchChirpstackDevices(),\n ]).then((values) => {\n let options: any = []\n values.forEach((value) => {\n options = [...options, ...(value ?? [])]\n })\n setDeviceOption(options)\n })\n }, [])\n return (\n \n
Select a device:
\n \n\n
Select a week:
\n \n
\n )\n}\nexport default ReportSelector\nconst Container = styled.div`\n width: 400px;\n height: calc(100vh - 64px);\n`\n","import React from 'react'\nimport styled from 'styled-components'\nimport {\n Green,\n HighWarning,\n LightWarning,\n MediumWarning,\n Red,\n} from '../../theme/theme'\nimport DashLineChart from '../DashboardUnits/DashLineChart'\n// import data from './mockdata/data.json'\nimport moment from 'moment'\nimport { IReportData } from '../../intefaces/measure'\n// count data point number in different range of value\nconst analyseData = (data: { x: number; y: number }[]) => {\n const count = {\n red: 0,\n highWarning: 0,\n mediumWarning: 0,\n lightWarning: 0,\n green: 0,\n }\n let sum = 0\n let max = 0\n let maxAt = 0\n let num = 0\n const icone = {\n n0: 0,\n n1: 0,\n n2: 0,\n total: 0,\n res: 0,\n }\n\n data.forEach((item) => {\n // sum, avg max\n sum += item.y\n num++\n if (item.y > max) {\n max = item.y\n maxAt = item.x\n }\n // count\n if (item.y > 2500) {\n count.red++\n } else if (item.y > 1700) {\n count.highWarning++\n } else if (item.y > 1000) {\n count.mediumWarning++\n } else if (item.y > 600) {\n count.lightWarning++\n } else {\n count.green++\n }\n\n // icone\n if (item.y < 1000) {\n icone.n0 += 1\n } else if (item.y < 1700) {\n icone.n1 += 1\n } else {\n icone.n2 += 1\n }\n icone.total += 1\n icone.res = iconeCalculator(icone)\n })\n return { count, max, maxAt, avg: num ? sum / num : 0, icone }\n}\nconst iconeCalculator = (target: {\n n0: number\n n1: number\n n2: number\n total: number\n}) => {\n if (target.total < 50) {\n return -1\n }\n return 2.5 * Math.log2((target.n1 + 3 * target.n2) / target.total + 1)\n}\nconst ReportBody = ({ data }: { data: IReportData }) => {\n const chartData =\n data.co2SeriesData\n ?.map((item) => {\n return {\n x: item.time,\n y: item.co2,\n tooltipV: 'data',\n type: 'co2[ppm]',\n }\n })\n ?.sort((a, b) => b.x - a.x) ?? []\n const { count, max, avg, maxAt, icone } = analyseData(chartData)\n\n return (\n \n \n \n
Localisation :
\n
Marie de la Mûre
\n
\n \n
\n Rapport Hebdomadaire CO2\n
\n
Etat Civil
\n
\n \n
S{data.week}
\n
\n
\n \n \n
\n Evolution de la concentration en CO\n 2 (ppm)\n
\n
Etat Civil - S44
\n \n }\n width={700}\n height={350}\n data={chartData}\n />\n
\n ICONE: {icone.res.toFixed(2)}\n Période occupation\n \n \n \n \n [CO2] max:\n \n {max} ppm\n \n \n \n [CO2] moy:\n \n {avg.toFixed(0)} ppm\n \n \n \n \n {moment.unix(maxAt).format('YYYY/MM/DD HH:mm:ss')}\n \n \n \n \n Seuil Alerte:\n 0\n \n \n \n \n \n Plages\n \n \n Nb Heures\n \n \n \n 1\n \n \n 400-600\n \n Excellent\n \n {count.green}\n \n \n \n \n 2\n \n \n 600-1000\n \n Bon\n \n {count.lightWarning}\n \n \n \n \n 3\n \n \n 1000-1700\n \n Moyen\n \n {count.mediumWarning}\n \n \n \n \n 4\n \n \n 1700-2500\n \n Mauvais\n \n {count.highWarning}\n \n \n \n \n 5\n \n \n 2500-5000\n \n Critique\n \n {count.red}\n \n \n \n Observations / Commentaires:\n \n
\n )\n}\nexport default ReportBody\nconst ReportContainer = styled.div`\n min-width: 800px;\n position: absolute;\n left: calc(50vw - 400px);\n`\nconst TitleWrapper = styled.div`\n margin: 0px 20px;\n\n font-size: 1.5rem;\n font-weight: bold;\n margin-bottom: 1rem;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n`\nconst TitleColumn = styled.div`\n font-size: 1.5rem;\n font-weight: bold;\n margin-bottom: 1rem;\n > div {\n height: 40px;\n }\n`\nconst ChartWrapper = styled.div`\n width: 100%;\n height: 350px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n`\nconst IndicesWrapper = styled.div`\n font-size: 1.5rem;\n margin: 10px 50px;\n`\nconst DetailsWrapper = styled.div`\n display: flex;\n align-content: center;\n justify-content: space-around;\n`\nconst DetailsTitle = styled.h2`\n text-align: center;\n`\n\nconst DetailsRow = styled.div`\n display: flex;\n justify-content: space-between;\n width: 300px;\n`\nconst DetailsColumn = styled.div``\nconst Alert = styled.div`\n display: flex;\n font-size: 1.5rem;\n margin: 10px 50px;\n`\nconst AlertColumn = styled.div`\n margin-right: 20px;\n`\n\nconst CO2Table = styled.div`\n display: flex;\n flex-direction: column;\n`\nconst CO2Row = styled.div`\n display: flex;\n justify-content: space-evenly;\n`\nconst CO2Column = styled.div`\n width: 100px;\n`\n\nconst Observation = styled.div`\n display: flex;\n font-size: 1.5rem;\n margin: 10px 50px;\n`\n\nconst ObservationDetails = styled.div`\n display: flex;\n height: 300px;\n margin: 0px 20px;\n border: 1px solid black;\n`\n","import React, { useContext } from 'react'\nimport ReportSelector from './ReportSelector'\nimport ReportBody from './ReportBody'\nimport { AccessTokenCtx } from '../Context'\nimport { IReportData } from '../../intefaces/measure'\n\nconst Report = () => {\n const accessToken = useContext(AccessTokenCtx)\n const [data, setData] = React.useState({\n week: 0,\n year: 0,\n from: '',\n to: '',\n co2SeriesData: [],\n })\n const fetchReportData = async (data: {\n week: number\n year: number\n identifier: string\n platform: string\n device_type: string\n }) => {\n const params = new URLSearchParams()\n Object.keys(data).forEach((key) => {\n // @ts-ignore\n params.append(key, data?.[key]?.toString() ?? '')\n })\n try {\n const result = await fetch('/api/v1/report?' + params.toString(), {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n 'content-type': 'application/json',\n },\n method: 'GET',\n })\n const data = await result.json()\n setData(data)\n } catch (e) {\n console.error(e)\n }\n }\n return (\n <>\n \n \n \n )\n}\n\nexport default Report\n","import React, { useState } from 'react'\nimport SimpleMap from './component/GoogleMap'\nimport Header from './component/Header'\nimport styled from 'styled-components'\nimport Dashboard from './component/Dashboard'\nimport {\n BrowserRouter as Router,\n Redirect,\n Route,\n Switch,\n useRouteMatch,\n} from 'react-router-dom'\nimport Login from './component/Login'\nimport { setGlobalLanguage } from './i18n'\nimport DeviceOverrideInfo from './component/DeviceOverrideInfo'\nimport InDoor from './component/InDoor/InDoor'\nimport DashboardChirpstack from './component/IoT/DashboardChirpstack'\nimport ReportBody from './component/Report/ReportBody'\nimport Report from './component/Report/Report'\n\nconst AppWithLanguagePath = ({ language }: { language: string }) => {\n const { path } = useRouteMatch()\n const [showSignOutButton, setShowSignOutButton] = useState(false)\n const [groups, setGroups] = useState([])\n const [loading, setLoading] = useState(true)\n setGlobalLanguage(language, () => {\n setLoading(false)\n })\n return loading ? (\n <>\n ) : (\n
\n setShowSignOutButton(false)}\n groups={groups}\n >\n

Cleair

\n \n {\n setShowSignOutButton(true)\n setGroups(groups)\n }}\n >\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n )\n}\nconst App = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nconst Container = styled.div`\n display: flex;\n width: 100%;\n height: 100%;\n flex-direction: row;\n`\nconst RouteApp = () => (\n \n \n \n)\nexport default RouteApp\n","import { ReportHandler } from 'web-vitals'\r\n\r\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\r\n if (onPerfEntry && onPerfEntry instanceof Function) {\r\n import('web-vitals').then(\r\n ({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\r\n getCLS(onPerfEntry)\r\n getFID(onPerfEntry)\r\n getFCP(onPerfEntry)\r\n getLCP(onPerfEntry)\r\n getTTFB(onPerfEntry)\r\n }\r\n )\r\n }\r\n}\r\n\r\nexport default reportWebVitals\r\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport './index.css'\nimport './eui.css'\nimport App from './App'\nimport reportWebVitals from './reportWebVitals'\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n)\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals()\n"],"sourceRoot":""}