{"version":3,"sources":["hooks/useAuth.js","env.js","pages/MessageDialog.jsx","pages/LoadingModal.jsx","components/Copyright.jsx","assets/images/login_bg.jpg","assets/images/tela-fk_ALT.jpg","assets/images/brands/bg_home_login3.jpg","assets/images/round_logo.png","assets/images/brands/brand_frigoking_login.png","api.js","pages/TermsDialog.jsx","pages/Login.jsx","components/MenuTree.jsx","components/DeviceCard.jsx","pages/Dashboard.jsx","components/DeviceControl/Grid.jsx","components/DeviceControl/DeviceControl.jsx","components/Drawer/SidebarItem.jsx","components/Drawer/Constants.js","components/Drawer/StyledMenu.jsx","common/colors.js","assets/images/brands/brand_webasto.png","assets/images/brands/brand_implemaster.png","assets/images/brands/brand_globus.png","assets/images/brands/meufrigokinglaranja.png","assets/icons/social-group_laranja.png","assets/icons/audience_laranja.png","assets/icons/index.js","assets/icons/dash.png","assets/icons/van_laranja.png","components/Drawer/Drawer.jsx","pages/Device.jsx","common/convert.js","pages/renderOnline.jsx","pages/renderEnum.jsx","common/difference.js","common/projects.js","hooks/useClient.js","hooks/useSelectionContext.js","components/DevicesAppBar.js","pages/DeviceList.jsx","components/ClientCard.jsx","components/ClientBreadcrumbs.jsx","pages/ClientList.jsx","pages/ClientAdd.jsx","pages/ClientDetail.jsx","pages/UserAdd.js","components/UserCard.js","pages-fk/components/UserChanger.jsx","pages/UserList.js","pages/ResetPassword.js","pages/AskResetPassword.jsx","pages/ResetPasswordConfirmation.js","pages/SignUp.jsx","assets/images/brands/icone_avatar.png","pages/CompleteProfile.jsx","pages-fk/api.js","pages-fk/components/ChartTemp.jsx","pages-fk/components/marker.png","pages-fk/components/marker-offline.png","pages-fk/components/DaySections.jsx","pages-fk/components/MiniTable.jsx","pages-fk/components/MapTruck.jsx","pages-fk/components/Wrapper.jsx","pages-fk/util.js","pages-fk/components/ParamChanger.jsx","pages-fk/components/ChipStatus.jsx","pages-fk/tabelas.js","pages-fk/parametros.js","pages-fk/components/Loading.jsx","pages-fk/Device.jsx","pages-fk/components/MapMultiple.jsx","assets/images/frigo_header.png","pages-fk/DeviceMultiple.jsx","pages-fk/components/ParamDisplay.jsx","pages-fk/Params.jsx","pages-fk/Charts.jsx","pages-fk/components/FileList.jsx","pages-fk/Logs.jsx","pages-fk/LogView.jsx","pages-fk/components/EnumValue.jsx","pages-fk/components/Breadlist.jsx","pages-fk/components/UserForms.jsx","pages-fk/UserTable.jsx","pages-fk/components/ClientForms.jsx","pages-fk/ClientTable.jsx","pages-fk/components/DeviceForms.jsx","pages-fk/DeviceTable.jsx","App.js","reportWebVitals.js","index.js"],"names":["initialState","localStorage","getItem","JSON","parse","username","impersonate","client","email","first_name","last_name","token","in_training","displayName","auth","fullname","trim","length","avatar","slice","toUpperCase","constate","React","useState","setAuth","useEffect","console","log","setItem","stringify","setClear","setLogin","data","s","setImpersonate","getFkLevel","_","get","AuthProvider","useAuthContext","useStyles","makeStyles","theme","dialog","minWidth","MessageDialog","open","onClose","message","classes","Dialog","aria-labelledby","aria-describedby","className","DialogTitle","id","DialogContent","DialogContentText","DialogActions","Button","onClick","color","autoFocus","LoadingModal","style","position","top","left","width","height","backgroundColor","display","justifyContent","alignItems","padding","borderRadius","Copyright","Typography","variant","align","Link","href","target","Date","getFullYear","axios","create","baseURL","timeout","headers","getHeaders","authJSON","Authorization","asAPI","resource","getOne","a","getAll","page","getAllAlternative","order","pagesize","search","filter","results","map","el","update","toUpdate","patch","toCreate","post","delete","devicesList","key","pageSize","remoteWrite","serial","params","traverse","visit","clients","path","c","slug","clientTree","meta","metaList","Object","keys","row","push","name","cpf_cnpj","oem","bloqueado","info","parent","pathNames","login","verifySmsCode","registerPhone","users","moveClient","clientSlug","newParentSlug","moveDevice","deviceSlug","newClient","placa","frota","device","resetPasswordCheckToken","resetPasswordAsk","response","verifyCode","resetPassword","completeProfile","Error","detectNewDevices","status","error","insertDevice","cnpj","TermsDialog","title","termsText","onAccept","onReject","setAccepted","dangerouslySetInnerHTML","__html","background","env","background_fk","background_default","root","image","backgroundImage","backgroundRepeat","palette","type","grey","backgroundSize","backgroundPosition","paper","margin","spacing","flexDirection","banner_fk","form","marginTop","submit","linkContainer","linkItem","StyledButton","withStyles","border","boxShadow","label","yup","required","fullName","telefone","Login","history","useHistory","useForm","register","handleSubmit","errors","setValue","clearErrors","setError","watch","getValues","nonFieldError","setNonFieldError","step","setStep","userData","setUserData","errorMessage","setErrorMessage","openDialog","setOpenDialog","loading","setLoading","openTermsDialog1","setOpenTermsDialog1","termsAccepted","setTermsAccepted","setPhoneCadastroRequired","setTelefone","validate","value","replace","handlePopState","window","addEventListener","removeEventListener","onSubmit","api","then","resp","smsVerificationRequired","emailVerificationRequired","phoneCadastroRequired","is_profile_complete","catch","handleErrors","phoneNumber","verificationCode","success","forEach","toString","Grid","container","component","CssBaseline","item","xs","sm","md","Paper","elevation","square","Avatar","src","roundLogo","smallLogo_fk","noValidate","TextField","fullWidth","autoComplete","inputRef","helperText","password","InputProps","readOnly","country","onChange","inputProps","isValid","match","specialLabel","inputStyle","containerStyle","marginBottom","inputClass","Box","p","borderColor","FormControlLabel","control","Checkbox","checked","event","mt","flexGrow","marginLeft","bullet","transform","fontSize","pos","drawerWidth","appBar","drawer","flexShrink","drawerPaper","toolbar","mixins","content","default","orange","getContrastText","deepOrange","subtitle","menuHeader","fontWeight","selected","button","transition","transitions","duration","shortest","textDecoration","action","hover","textAlign","text","secondary","large","createStyles","maxWidth","media","setpoint","controls","paddingLeft","paddingBottom","controlIcon","listStyles","iconStyles","primary","main","SidebarItem","Icon","isBold","listClasses","iconClasses","ListItem","ListItemIcon","ListItemText","primaryTypographyProps","StyledMenu","Constants","props","Menu","getContentAnchorEl","anchorOrigin","vertical","horizontal","transformOrigin","TransitionProps","MenuListProps","stringToColor","string","i","hash","charCodeAt","substr","Dashboard","Usuarios","ImageUsuarios","Dispositivos","Clientes","ImageClientes","Logo","Logos","alt","MyDrawer","anchorEl","setAnchorEl","useParams","useRouteMatch","Drawer","anchor","ButtonBase","aria-controls","aria-haspopup","currentTarget","px","pt","ml","keepMounted","Boolean","MenuItem","List","FKIcons","ListSubheader","fk_level","setpointToCelsius","val","f","Math","round","toCelsius","celsiusToSetpoint","toFahrenheit","defaultTheme","createTheme","Offline","Online","dark","Status","icon","Chip","clsx","size","renderOnline","ALL_ICONS","Level_0of2","createSvgIcon","fill","d","Level_1of2","Level_2of2","Level_0of3","Level_1of3","Level_2of3","Level_3of3","marginRight","overflow","textOverflow","Enum","renderEnum","difference","base","object","changes","result","isEqual","isObject","protocolToProject","proto","1","impl","smtp","fk","getClientSimple","pick","newPath","clientToOptions","options","useClient","current","useQuery","refetch","isLoading","isError","tree","fullPath","clientOptions","dir","dirList","currentSlug","selection","setSelection","arr","SelectionProvider","useSelectionContext","grow","menuButton","breakpoints","up","shape","alpha","common","white","searchIcon","pointerEvents","refreshIcon","inputRoot","inputInput","sectionDesktop","sectionMobile","DeviceTransferDialog","valueProp","devices","other","radioGroupRef","useRef","seen","entry","transferTargets","sx","maxHeight","onEntering","focus","dividers","RadioGroup","ref","aria-label","option","Radio","DeviceOptionMenu","dialogOpen","setDialogOpen","endIcon","disabled","PrimarySearchAppBar","mobileMoreAnchorEl","setMobileMoreAnchorEl","isMenuOpen","isMobileMenuOpen","projects","selectedProject","setSelectedProject","multiSelectionMode","setMultiSelectionMode","handleProfileMenuOpen","handleMobileMenuClose","handleMenuClose","renderMenu","mobileMenuId","renderMobileMenu","IconButton","Badge","badgeContent","AppBar","Toolbar","noWrap","enableFilterDropdown","Tooltip","x","SimpleAppbar","buttons","b","idx","baseColumns","field","headerName","renderCell","flex","optionsOnOff","ParamNumber","unit","InputAdornment","selectAdornment","ParamEnum","valueNumber","FormControl","formControl","InputLabel","Select","labelId","o","systemParameters","kind","renderSide","valueOptions","DeviceList","onlineOnly","columns","valueParser","valueFormatter","columnConfig","editable","activeFilters","items","columnField","operatorValue","rows","filterModel","autoHeight","disableColumnMenu","checkboxSelection","onSelectionModelChange","selectionModel","getRowClassName","getValue","DeviceListLoader","selectedStatus","toGrid","config","j","BulkDeviceEditor","close","multiple","oldParams","setOldParams","newParams","setNewParams","deviceSelected","setDeviceSelected","diff","setDiff","handleChange","newVal","find","obj","parameters","Param","format","output","isEmpty","startIcon","paramsWrite","parseInt","Content","setRows","grouped","groupBy","filtered","usePaginatedQuery","refetchInterval","refetchIntervalInBackground","resolvedData","Setpoint01","Setpoint02","ValorMaximoDoSetpoint","ValorMinimoDoSetpoint","OffSetSensorCamara1","OffsetSensorDeSuccao","OffSetSensorCamara2","OffSetDoSensorDeSerpentina","HabilitaSensorDeSerpentina","HabilitaSensorDePorta","HabilitaSensorTemperaturaCamara2","protocol","read_params","updated_at","write_params","params_changed_at","device_accessed_at","lastChange","formatDistanceToNow","parseISO","lastRead","formattedRow","isOnline","differenceInMinutes","readPending","fieldPresent","numericValue","convert","contentShift","deviceListLoader","multiControl","editorDrawerPaper","Device","online","lighten","easing","sharp","leavingScreen","easeOut","enteringScreen","ClientCard","children","Card","CardActionArea","RouterLink","to","CardContent","Breadcrumbs","separator","options3levels","n","myClient","makeAddClientLink","myClients","m","mb","gutterBottom","lg","Container","ClientBreadcrumbs","py","validationSchema","errorToFormik","k","join","NewUserForm","formik","useFormik","initialValues","values","setErrors","newUser","touched","Switch","formControlLabel","validatePassword","min","Message","ResetPassword","setToken","setStatus","Proxy","URLSearchParams","location","searchParams","prop","err","setEmail","code","setCode","confirmationMessage","setConfirmationMessage","emailFormik","verifyFormik","resetFormik","confirmPassword","oneOf","ResetPasswordConfirmation","htmlContent","setHtmlContent","currentUrl","backendUrl","includes","requestData","resetUrl","html","background_cadastro","SignUp","alert","confirmationCode","minLength","validateUpdate","razaoSocial","termsServiceAccepted","termsResponsabilityAccepted","radioGroup","CompleteProfile","openTermsDialog2","setOpenTermsDialog2","setTermsServiceAccepted","useLocation","preFilledData","handleCloseTermsDialog","abortEarly","validationErrors","inner","e","firstErrorMessage","firstErrorField","firstErrorElement","document","getElementById","countryCodeEditable","autoFormat","defaultValue","labelPlacement","onTermsServiceAcceptedChange","getMultiData","getMainScreenData","getPendingRemote","getAllParams","full","getHistory","fields","getParamHistory","paramArray","startDate","endDate","getLogFiles","remoteCommand","param","downloadFile","url","getOptions","responsive","maintainAspectRatio","scales","yAxis","ticks","callback","v","offset","xAxis","time","interval","displayFormats","hour","minute","zoom","animation","plugins","pan","enabled","mode","wheel","tooltip","callbacks","ctx","dataset","parsed","y","legend","Chart1","dateRange","chartParams","tz","startDateZoned","utcToZonedTime","endDateZoned","CircularProgress","disableShrink","textTransform","formattedSetpoint01","ts","formattedTemp","datasets","getTime","Chart2","formattedSetpoint02","ChartJS","CategoryScale","LinearScale","PointElement","LineElement","Title","Legend","TimeScale","nested","selectedText","removeLastThreeCharacters","str","substring","titleFromEntries","entries","first","last","day","setOpen","sections","setSections","selectedTimeIndex","setSelectedTimeIndex","date","currentEntries","abs","unshift","index","dayToSections","section","sectionClick","Collapse","in","unmountOnExit","disablePadding","ListItemSecondaryAction","table","tinyRow","lineHeight","MiniTable","TableContainer","Table","TableBody","TableRow","TableCell","scope","tryFormatDistance","addSuffix","getCustomMarker","L","iconUrl","markerImage","markerImageOffline","iconRetinaUrl","iconSize","popupAnchor","dateWithoutTime","formatDayOnly","dateString","MarkerData","EstadoControleCode","EntregaActive","Setpoint01Current","Setpoint02Current","TemperaturaCamara1","TemperaturaCamara2","MapWithSlider","popupText","staleTime","positions","lastPosition","lat","lng","relativeDate","days","setDays","indexDaySelected","setIndexDaySelected","dataByday","setDataByDay","selectedDay","setSelectedDay","extraMarker","setCustomMarker","sort","borderWidth","direction","borderBottom","max","ev","preventDefault","DaySections","vip","xl","MapContainer","center","TileLayer","Marker","Popup","latitude","longitude","Wrapper","msg","getInitiais","phone","words","split","humanFileSize","bytes","si","dp","thresh","units","u","r","toFixed","enumToBoolean","normalizeValue","num","Number","isNaN","EnumValue","MinMaxValue","onKeyUp","endAdornment","disableTypography","InputLabelProps","shrink","onKeyPress","ParamChanger","description","handleClose","onSave","pendingValue","setSelected","valid","setValid","pending","tipo","numberValue","parseFloat","validateMinMax","validateEnum","keyCode","Pending","yellow","ChipStatus","ChipPending","labels","EMBREAGEM_EVAPORADOR","VALVULA_DE_CAPACIDADE_1","VALVULA_DE_CAPACIDADE_2","VENTILADOR_CONDENSADOR_1_2","VENTILADOR_3","SOLENOIDE_1","SOLENOIDE_2","SOLENOIDE_3","VENTILADOR_1_e_2_CONDENSADOR","SENSOR_PORTA","PRESSOSTATO_ALTA","PRESSOSTATO_BAIXA","TEMPERATURA_SUCCAO","PRESSAO_ALTA","PRESSAO_BAIXA","ALTERNADOR_D_MAIS","ROTACAO_MOTOR","VERSAO_PAINEL","VERSAO_PANINEL_BOOTLOADER","VENSAO_BLE","HORAS","MINUTOS","SEGUNDOS","DIA_SEMANA","DIA_MES","MES","ANO","VERSAO_REFRIGERACAO","VERSAO_REFRIGERACAO_BOOTLOADER","TENSAO_RS","TENSAO_RT","TENSAO_ST","FREQUENCIA_REDE","SENSOR_UMIDADE","VENTILACAO","VENTILACAO_2","VENTILACAO_1_2","DEGELO","SELECAO_TENSAO","INVERSAO_FASE","SEQUENCIAMENTO_FASES","ACIONAMENTO_MOTOR","HABILITA_TRAFO","EMERGENCIA","TENSAO_BATERIA","TENSAO_BATERIA_LITIO","NIVEL_CARGA_BATERIA_LITIO","SOLENOIDE_BOMBA_INJETORA","ALIVIO","SOLENOIDE_PARTIDA","BOMBA_COMBUSTIVEL","AQUECIMENTO_CAMERA_COMBUSTAO","ACELERACAO_MOTOR","SIRENE","EXITACAO_ALTERNADOR","TEMPERATURA_AGUA_MOTOR_DIESEL","NIVEL_AGUA_MOTOR","PRESSOSTATO_OLEO","TEMPERATURA_YANMAR","TEMPERATURA_CABINE_1","TEMPERATURA_CABINE_2","TEMPERATURA_DE_SUPRIMENTO","TEMPERATURA_EVAPORADOR_1_CABINE","ENTRADA_RELE_TERMICO","VALVULA_LIQUIDO_CAMARA_2","HORIMETRO_ELETRICO","HORIMETRO_DIESEL","HORIMETRO_ACOPLADO","EVAPORADOR_1_APOLLO","EVAPORADOR_2_APOLLO","EVAPORADOR_3_APOLLO","CONDENSADOR_1_APOLLO","CONDENSADOR_2_APOLLO","COMPRESSOR_ACOPLADO_APOLLO","DEGELO_APOLLO","PRESSOSTATO_CONDENSADOR","STANDBY_MOTOR_ELETRICO_APOLLO","AQUECIMENTO_APOLLO","AQUECIMENTO_FLEX","SELECAO_220_380_APOLLO","MOTOR_ELETRICO","HABILITA_TRAFO_APOLLO","TEMPERATURA_RETORNO","TEMPERATURA_ADICIONAL","TEMPERATURA_SUCCAO_APOLLO","TRANSDUTOR_PRESSAO_ALTA_APOLLO","TRANSDUTOR_PRESSAO_BAIXA_APOLLO","SENSOR_PORTA_APOLLO","EMERGENCIA_APOLLO","PRESSOSTATO_ALTA_APOLLO","PRESSOSTATO_BAIXA_APOLLO","RELE_TERMICO","ADICIONAL_SEGUNDA_CAMERA_SAIDA_APOLLO","TEXTO_TEMPO_PARA_DEGELO","TEXTO_NUMERO_SERIAL","TEXTO_MENU_PARAMETROS","TEXTO_MENU_VISUALIZACAO","TEXTO_MENU_FALHAS","TEXTO_MENU_MODO_TESTE","TEXTO_MENU_DATA_LOG","TEXTO_MENU_BOOTLOADER","TEXTO_BACK_LIGHT","TEXTO_BLUETOOTH","TEXTO_MENU_MODELO_MAQUINA","TEXTO_TIPO_PROCESSO","TEXTO_MENU_EDIT_N_SERIAL","TEXTO_IDIOMA","TEXTO_ESTADO_INICIAL_BLE","TEXTO_MINIMA_TEMPERATURA_SETPOINT","TEXTO_MAXIMA_TEMPERATURA_SETPOINT","TEXTO_AJUSTE_HORAS","TEXTO_AJUSTE_MINUTOS","TEXTO_AJUSTE_ANO","TEXTO_AJUSTE_MES","TEXTO_AJUSTE_DIA","TEXTO_OFFSET_CABINE_1","TEXTO_HABILITA_SENSOR_SERPENTINA","TEXTO_HABILITA_PORTA","TEXTO_TEMPO_MAXIMO_REFRIGERACAO","TEXTO_TEMPO_MAXIMO_DEGELO","TEXTO_TEMPERATURA_MOTOR_LIGAR","TEXTO_TEMPERATURA_MOTOR_DESLIGA","TEXTO_TEMPO_GOTEJAMENTO","TEXTO_TEMPO_PRE_REFRIGERACAO","TEXTO_TIPO_DEGELO","TEXTO_MODO_DEGELO","TEXTO_HABILITA_DATA_HORA","TEXTO_HISTERESE","HABILITA_SENSOR_TEMPERATURA_CAMERA_2","TEXTO_TEMPERATURA_HABILITA_DEGELO","TEXTO_TEMPERATURA_INIBE_FALTA_DECREMENTO","TEXTO_TEMPERATURA_FIM_DEGELO","TEXTO_MOTOR_SEM_AQUECIMENTO","TEXTO_TEMPO_SEM_DECREMENTO_TEMPERATURA","TEXTO_TEMPO_PORTA_ABERTA","TEXTO_RPM_MOTO","TEXTO_ESTADO_VENTILACAO_REFRIGERACAO_OFF","ESTADO_VENTILACAO_DEGELO_ATIVO","TEXTO_ESTADO_COMPRESSOR_GOTEJAMENTO","TEXTO_TENSAO_MINIMA_220V","TEXTO_TENSAO_MINIMA_380V","TEXTO_TENSAO_MAXIMA_220V","TEXTO_TENSAO_MAXIMA_380V","TEXTO_TEMPO_VALIDAR_TENSAO_FORA_FAIXA","TEXTO_TEMPO_VALIDAR_TENSAO_DENTRO_FAIXA","TEXTO_TEMPO_VALIDAR_ASSIMETRIA_MODULAR_FALHA","TEXTO_TEMPO_VALIDAR_ASSIMETRO_MODULOAR_OK","TEXTO_TEMPO_VALIDAR_ASSIMETRO_ANGULAR_FALHA","TEXTO_TEMPO_VALIDAR_ASSIMETRIA_ALGULAR_OK","TEXTO_VALOR_ASSIMETRIA_MODULAR","TEXTO_VALOR_ASSIMETRIA_ANGULAR","TEXTO_RETARDO_ACIONAR_MOTOR","TEXTO_HABILITA_INVERSAO","TEXTO_TEMPO_AMOSTRAGEM_LOG","TEXTO_PRESSAO_SENSOR_MINIMA","TEXTO_PRESSAO_SENSOR_MAXIMA","TEXTO_PRESSAO_DESLIGAR_CONDENSADOR","TEXTO_HABILITA_TRANSDUTOR_PRESSAO","TEXTO_PRESSAO_LIGAR_CONDENSADOR","TEXTO_HABILITA_CONTROLE_PRESSAO_CONDENSADOR","TEXTO_PRESSAO_ALTA_FALHA","TEXTO_PRESSAO_ALTA_OK","TEXTO_PRESSAO_BAIXA_FALHA","TEXTO_PRESSAO_BAIXA_OK","TEXTO_SELECAO_REDE_ELETRICA","TEXTO_TENSAO_LIGAR_TRAFO_12V","TEXTO_TENSAO_LIGAR_TRAFO_24V","TEXTO_TENSAO_DESLIGAR_TRAFO_12V","TEXTO_TENSAO_DESLIGAR_TRAFO_24V","TEXTO_HISTERESE_TEMPO_TRANSFORMADOR","TEXTO_CONTROLE_TENSAO","TEXTO_BLOQUEIO_TEMPERATURA_RETORNO","TEXTO_OFFSET_SENSOR_SUCCAO","TEXTO_OFFSET_SENSOR_CAMERA_2","TEXTO_SAIDA_ADICIONAL","TEXTO_OFFSET_CABINE_2","TEXTO_OFFSET_SEPENTINA","TEXTO_OFFSET_SUPRIMENTO","TEXTO_OFFSET_MOTOR_DIESEL","TEXTO_HABILITA_SENSOR_UMIDADE","TEXTO_FUNCAO_MAQUINA","TEXTO_VENTILACAO_EVAPORADOR_EM_AQUECIMENTO","TEXTO_VENTILACAO_CONDENSADOR_EM_AQUECIMENTO","TEXTO_TEMPERATURA_HISTERESE_AQUECIMENTO","TEXTO_BLOQUEIO_DE_SETPOINT","TEXTO_BLOQUEIO_DE_ON_OFF","TEXTO_CONFIGURACAO_TIPO_TITAN","TEXTO_TENSAO_MAX_12V","TEXTO_TENSAO_MIN_12V","TEXTO_TENSAO_MAX_24V","TEXTO_TENSAO_MIN_24V","VERSAO_DIESEL","VERSAO_DIESEL_BOOTLOADER","TEXTO_DELTA_DE_TEMPERATURA_PARA_DEGELO_POR_FALTA_DE_DECREMENTO","TEXTO_DELTA_DE_TEMPO_PARA_DEGELO_POR_FALTA_DE_DECREMENTO","TEXTO_HABILITA_DEGELO_POR_FALTA_DE_DECREMENTO_NA_TEMPERATURA_DE_SUCCAO","TEXTO_TEMPO_DE_HISTERESE_MOTOR_DIESEL","TEXTO_HABILITA_FUNCAO_PARTIDA_MOTOR_PARA_CARREGAMENTO_DA_BATERIA","TEXTO_TEMPO_MINIMO_PARA_CARREGAMENTO_DA_BATERIA","TEXTO_TENSAO_MINIMA_PARA_LIGAR_MOTOR_PARA_CARREGAMENTO_DA_BATERIA","TEXTO_OFFSET_SENSOR_DE_PLACA_EUTETICA","TEXTO_HABILITA_SENSOR_DE_SUCCAO","TEXTO_DESABILITA_SENSOR_DE_SUCCAO","TEXTO_HABILITA_RECOLHIMENTO_DE_GAS","TEXTO_TEMPO_MAXIMO_DE_COMPRESSOR_LIGADO_DURANTE_O_RECOLHIMENTO_DE_GAS","TEXTO_HISTERESE_DE_TEMPO_DE_COMPRESSOR","TEXTO_TEMPO_BOMBA_DE_COMBUSTIVEL","TEXTO_TEMPO_EM_50_DE_CAPACIDADE_PARA_ATINGIR_SETPOINT","TEXTO_TEMPO_DE_ALIVIO","TEXTO_QUANTIDADE_DE_HORAS_PARA_ACORDAR_CONTROLE","TEXTO_TEMPO_DE_AQUECIMENTO_DE_CAMARA_DE_COMBUSTAO","TEXTO_TEMPO_PARA_LIGAR_EVAPORADOR","TEXTO_PRESSAO_ALTA_PARA_ATUAR_CONTROLE_DE_CAPACIDADE","TEXTO_PRESSAO_ALTA_PARA_DESLIGAR_CONTROLE_DE_CAPACIDADE","TEXTO_HABILITA_MODO_CONTINUO","TEXTO_CONTROLE_CAPACIDADE_EM_AQUECIMENTO","TEXTO_CONTROLE_CAPACIDADE_EM_REFRIGERACAO","TEXTO_HORIMETRO_PARA_REVISAO","TEXTO_QUANTIDADE_DE_HORAS_INCIO_NOTIFICACAO","TEMPERATURA_DE_PLACA_EUTETICA","CONTATOR_K3","LIGA_CONTATOR_K4_K5","POS_IGNICAO","Parametros_Apollo_E_Flex_FK","Parametros_Apollo_E_Flex_Eletrico_FK","Parametros_Apollo_E_Flex_USER","Parametros_Apollo_E_Flex_AST","Parametros_Apollo_E_Flex_ADM","parametros","AE","FK","USER","ADM","AST","AS","FE","FS","TI","EF","AFR","ADEPS","AEPS","Loading","Skeleton","range","LoadingParams","IconThermostat","SvgIcon","IconWifiOn","IconDriver","strokeWidth","strokeLinecap","strokeLinejoin","strokeMiterlimit","IconSnow","IconDegelo","IconAuto","rx","stroke","CardSetpoint","chartLink","helperIcon","temp","CardActions","CardConnection","green","red","CardControle","strokeColor","circleColor","Desligado","QueryBuilderIcon","Refrigeracao","Degelo","Gotejamento","PreRefrigeracao","DegeloPorTemperatura","DegeloManual","DegeloPorTempo","Aquecimento","Automatico","CardDriver","photo","displayedName","firstName","lastName","mask","repeat","maskedFirstName","maskedLastName","maskName","phoneToWhatsappLink","CardWithNumber","link","secondLabel","MapTruck_","memo","MapTruck","changeParam","setChangeParam","changeDescription","setChangeDescription","changeValue","setChangeValue","setChangePendingValue","pendingRemote","queryLogs","updated_by","TipoDeControleShort","EstadoControle","TipoDeControleString","chamber2","TempoParaDegelo","NumeroSerial","valueSetpoint1","valueSetpoint2","valueTemp1","valueTemp2","pendingDict","assign","applicableParams","handleClickSetpoint","Map","setFitBounds","validPoints","isFinite","validLatLng","points","point","computeCentroid","bounds","latLngBounds","DeviceCard","last_position","setpoint1","setpoint2","temp1","temp2","controle","decodeSetpoint","nameParts","justify","FrigoHeader","special_params","Hora","source","writer","month","year","Minuto","Ano","Mês","Dia","AjusteDaHora","AjusteDoMinuto","AjusteDoAno","AjusteDoMes","AjusteDoDiaDoMes","VersaoBle","VersoesDeSwPainel","VersaoBootloader","VersoesDeSwRefrigeracao","VersaoBootloaderRefrigeracao","VersoesDeSwDiesel","VersoesBootloaderDiesel","ParamDisplay","deviceParams","pendingParams","complexValue","Parameters","tipoDeControle","userLevel","datePicker","chartContainer","setHours","today","endOfDay","selectedStartDate","selectedEndDate","formattedStartDate","formattedEndDate","selectedDateRange","setSelectedDateRange","chart","showDateDisplay","ranges","TableHead","paddingTop","filename","LogFiles","FileList","files","LogView","readString","usePapaParse","setData","Body","csv","skipFirst","indexOf","header","skipEmptyLines","delimiter","parseCSV","nonEmptyColumns","selectableRows","print","download","rowsPerPage","FormHelperText","getBreadcrumbColor","isLast","empty","toBreadcrumbs","is_support","validateCreate","maskEmail","localPart","domain","maskedLocalPart","domainParts","maskedDomain","DialogUserChange","user","isOpen","initial","emptyValidationSchema","realValues","setRealValues","setMaskedValues","setValues","handleFieldChange","setFieldValue","prevValues","DialogUserCreate","resetForm","extraDataRows","maskValue","TITLE","prevSearchText","setPage","setPageSize","column","setOrder","searchText","setSearchText","enterPressed","setEnterPressed","filterText","setFilterText","baseOrder","useMemo","serializedOrder","_key","_slug","pageNumber","sorting","manual","tableColumns","customBodyRender","input","maskedValue","enableNestedDataAccess","count","serverSide","rowsPerPageOptions","onColumnSortChange","changedColumn","currentOrder","handleColumnHeaderClick","onChangePage","currentPage","onChangeRowsPerPage","numberOfRows","onSearchChange","newSearchText","handleSearchTextChange","searchProps","handleKeyUp","onFilterChange","filterList","fetchNewData","onRowClick","dataIndex","setTimeout","list","Array","isArray","others","DialogClientChange","confirmationMethod","clientRemove","DialogClientCreate","blockedColumn","setOptions","baseTableColumns","Breadlist","validateForm","when","is","otherwise","notRequired","DialogDeviceChange","isEdit","dialogTitle","newDevice","setClientId","manualInsertDialogOpen","setManualInsertDialogOpen","handleRefresh","onSuccess","THEMES","ptBR","typography","fontFamily","body1","h1","h2","appbar","PrivateRoute","Component","rest","loggedIn","render","pathname","state","from","queryCache","QueryCache","App","ThemeProvider","exact","Pages","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM"],"mappings":"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","file":"static/js/main.489dbfde.chunk.js","sourcesContent":["import React, { useEffect } from \"react\";\nimport constate from \"constate\";\nimport _ from \"lodash\";\n\nconst emptyState = {\n username: \"Anonymous\",\n impersonate: null,\n client: \"\",\n email: \"\",\n first_name: \"\",\n last_name: \"\",\n token: \"\",\n in_training: false,\n};\n\nconst initialState = localStorage.getItem(\"auth\") ? JSON.parse(localStorage.getItem(\"auth\")) : { ...emptyState };\n\nfunction useAuth() {\n const [auth, setAuth] = React.useState({ ...initialState });\n const setLogin = (data) => {\n // console.log(\"setAuth\");\n setAuth((s) => ({ ...s, ...data }));\n };\n const setImpersonate = (client) => {\n // console.log(\"setImpersoante\", client);\n setAuth((s) => ({ ...s, impersonate: client }));\n };\n const setClear = () => setAuth({ ...initialState });\n\n const getFkLevel = () => (auth ? _.get(auth, \"fk_level\", \"USER\") : \"USER\");\n\n useEffect(() => {\n console.log(\">>> AUTH\", auth);\n localStorage.setItem(\"auth\", JSON.stringify(auth));\n }, [auth]);\n\n return { auth, setClear, setLogin, setImpersonate, getFkLevel };\n}\n\nconst displayName = (auth) => {\n const { first_name, last_name, username } = auth;\n const fullname = `${first_name || \"\"} ${last_name || \"\"}`.trim();\n if (fullname.length > 0) {\n return fullname;\n }\n return username;\n};\n\nconst avatar = (auth) => {\n const { first_name, last_name, username } = auth;\n if (first_name !== \"\" || last_name !== \"\") {\n const initials = first_name.slice(0, 1) + last_name.slice(0, 1);\n return initials.toUpperCase();\n }\n return username.slice(0, 1).toUpperCase();\n};\n\nconst [AuthProvider, useAuthContext] = constate(useAuth);\n\nexport { AuthProvider, useAuthContext, displayName, avatar };\n","export default {\n ROOT_SLUG: \"globus\",\n Client: \"FK\",\n};\n","import React, { useState } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\n\nconst useStyles = makeStyles((theme) => ({\n dialog: {\n minWidth: '300px',\n },\n}));\n\nexport default function MessageDialog({ open, onClose, message }) {\n const classes = useStyles();\n\n return (\n \n \n \n \n {message}\n \n \n \n \n \n \n );\n}\n","import React, { useState } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\n\nconst useStyles = makeStyles((theme) => ({\n dialog: {\n minWidth: '300px',\n },\n}));\n\nconst LoadingModal = ({ message }) => {\n return (\n
\n
\n

{message}

\n
\n
\n );\n};\n\nexport default LoadingModal;\n","import Link from \"@material-ui/core/Link\";\nimport Typography from \"@material-ui/core/Typography\";\nimport React from \"react\";\n\nexport default function Copyright() {\n return (\n \n {\"Copyright © \"}\n \n Frigo King\n {\" \"}\n {new Date().getFullYear()}\n {\".\"}\n \n );\n}\n","export default __webpack_public_path__ + \"static/media/login_bg.8228fd58.jpg\";","export default __webpack_public_path__ + \"static/media/tela-fk_ALT.20e9bbc2.jpg\";","export default __webpack_public_path__ + \"static/media/bg_home_login3.08554c95.jpg\";","export default __webpack_public_path__ + \"static/media/round_logo.0ebaff54.png\";","export default \"data:image/png;base64,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\"","import axios from \"axios\";\nimport _ from \"lodash\";\n//import Cookies from \"js-cookie\";\nimport { useQuery } from 'react-query';\n\nconst baseUrl =\n process.env.NODE_ENV === \"development\"\n ? \"http://localhost:3535/\" // local https fails because certificate is ... temporary\n : \"https://api.globusway.com/\";\n\nconst client = axios.create({\n baseURL: baseUrl,\n timeout: 120000,\n headers: {\n \"X-Tenant\": \"globus\",\n },\n});\n\nfunction getHeaders() {\n // const token = Cookies.get(\"token\");\n const authJSON = localStorage.getItem(\"auth\");\n let token;\n // let impersonate;\n\n if (authJSON) {\n const auth = JSON.parse(authJSON);\n token = auth.token;\n // impersonate = auth.impersonate;\n }\n\n if (!token) {\n console.log(\"no Token present!?\");\n return;\n }\n let output = {\n Authorization: `Token ${token}`,\n };\n // if (impersonate) {\n // output[\"X-Impersonate\"] = impersonate;\n // }\n return output;\n}\n\nfunction asAPI(resource) {\n const headers = getHeaders();\n return {\n getOne: async ({ id }) => {\n const { data } = await client.get(`${resource}/${id}`, { headers });\n return data;\n },\n getAll: async (page ) => {\n const { data } = await client.get(`${resource}?page=${page}`, { headers });\n\t\tconsole.log(\"asAPI getAll\");\n return data;\n },\n getAllAlternative: async (page, order, pagesize, search, filter) => {\n const { data } = await client.get(`${resource}?page=${page}&order=${order}&pagesize=${pagesize}&search=${search}&filter=${filter}`, { headers });\n\t\tconsole.log(\"asAPI getAllAlternative\");\n if (data.results) {\n return {\n ...data,\n results: data.results.map((el) => ({ ...el, username: el[\"email\"] || el[\"username\"] })),\n };\n }\n return data;\n },\n // update: (toUpdate) => client.put(`${resource}/`, toUpdate, { headers }),\n update: (toUpdate) => client.patch(`${resource}/${toUpdate.id}/`, toUpdate, { headers }), // patch is partial update\n create: (toCreate) => client.post(`${resource}/`, toCreate, { headers }),\n delete: ({ id }) => client.delete(`${resource}/${id}`, { headers }),\n };\n}\n\nexport const devicesList = async (key, page, pageSize) => {\n const { data } = await client.get(`devices?fk=1&page=${page+1}`, {\n headers: getHeaders(),\n });\n return data;\n};\n\nexport const deviceDetail = async (key, serial) => {\n const { data } = await client.get(`devices/${serial}/`, {\n headers: getHeaders(),\n });\n return data;\n};\n\nexport const remoteWrite = async (key, serial, params) => client.post(`devices/${serial}/remote/`, { params: params });\n\n////////////////////////////////////////////////\n// api\n////////////////////////////////////////////////\n\nconst traverse = function (visit, clients, path) {\n for (let c of clients) {\n visit(c, path);\n traverse(visit, c.clients, [...path, c.slug]);\n }\n};\n\nexport const clientTree = async () => {\n const { data } = await client.get(`/clients/tree`, {\n headers: getHeaders(),\n });\n\n // Build a list of client-paths from the data\n let meta = {};\n meta[\"root\"] = [data, []]; // root , not slug\n meta[data.slug] = [data, []]; // root , not slug\n traverse((client, path) => (meta[client.slug] = [client, path]), data.clients, [data.slug]);\n\n // console.log(JSON.stringify(meta, null, 4));\n\n // Build an array of client with parents\n let metaList = [];\n for (const row of Object.keys(meta)) {\n if (row !== \"root\") {\n const path = meta[row][1];\n metaList.push({\n id: meta[row][0].id,\n name: meta[row][0].name,\n cpf_cnpj: meta[row][0].cpf_cnpj,\n oem: meta[row][0].oem,\n bloqueado: meta[row][0].bloqueado,\n info: meta[row][0].info,\n slug: row,\n parent: path && path[path.length - 1],\n path: path,\n pathNames: path.map((slug) => meta[slug][0].name),\n });\n }\n }\n\n // traverse((client, path) => (meta[client.slug] = [client, path]), data.clients, [data.slug]);\n\n return { ...data, meta, metaList };\n};\nexport const login = (data) => client.post(\"login/\", data);\n\n// Fun磯 para verificar o c󤩧o SMS\nexport const verifySmsCode = (data) => {\n return client.post('verify-sms-code/', data);\n};\n\n// Fun磯 para verificar o c󤩧o SMS\nexport const registerPhone = (data) => {\n return client.post('register-phone/', data);\n};\n\nexport const register = (data) => client.post(\"register/\", data);\n\n// With auth headers from cookie\nexport const users = () => asAPI(\"users\");\nexport const clients = () => asAPI(\"clients\");\nexport const devices = () => asAPI(\"devices\");\n\nexport const moveClient = async (clientSlug, newParentSlug) => {\n await client.post(`clients/move/`, { client: clientSlug, parent: newParentSlug }, { headers: getHeaders() });\n};\n\nexport const clientsList = async (key, page, impersonate) => {\n const { data } = await client.get(`clients?impersonate=${impersonate}&page=${page + 1}`, {\n headers: getHeaders(),\n });\n return data;\n};\n\nexport const moveDevice = async (deviceSlug, newParentSlug, serial, newClient, placa, frota) => {\n await client.post(`devices/${serial}/move/`, { device: deviceSlug, parent: newParentSlug, client: newClient, placa: placa, frota: frota }, { headers: getHeaders() });\n};\n\nexport const resetPasswordCheckToken = async (token) => {\n await client.get(`reset-password/token-validation/`, { params: { token } });\n};\n\n/*\nexport const resetPassword = async (token, password) => {\n await client.post(`reset-password/submit/?token=${token}`, { password });\n};\n*/\n\nexport const resetPasswordAsk = async (email) => {\n //const csrfToken = document.cookie.split('; ').find(row => row.startsWith('csrftoken')).split('=')[1];\n const headers = {\n //'Content-Type': 'application/json',\n //'X-CSRFToken': csrfToken\n };\n const response = await client.post(`reset-password/`, { email }, { headers: headers } );\n return response;\n};\n\nexport const verifyCode = async (data) => {\n const response = client.post('reset-password/verify/', data);\n return response;\n};\n\nexport const resetPassword = async (data) => {\n const response = client.post('reset-password/confirm/', data);\n return response;\n};\n\nexport const resetPasswordConfirmation = async (token, password) => {\n const headers = {\n //'Content-Type': 'application/json',\n //'X-CSRFToken': csrfToken\n };\n await client.post(`reset-password/confirm/`, { headers: headers } );\n};\n\n// API [Stefano 24042024]\nexport const completeProfile = async (data) => {\n try {\n const response = await client.post(\"complete-profile/\", data);\n return response.data; // Retorna a resposta do servidor\n } catch (error) {\n throw new Error(\"Erro ao validar os dados do usuᲩo. Por favor, tente novamente.\");\n }\n};\n\nexport const detectNewDevices = async ( ) => {\n try {\n const response = await client.post(`devices/detect/`, {}, {\n headers: getHeaders(),\n });\n // Verifique se a solicita磯 foi bem-sucedida com status 200\n if (response.status === 200) {\n console.log(\"Novos dispositivos detectados com sucesso.\");\n } else {\n console.error(\"Falha ao detectar novos dispositivos.\");\n }\n } catch (error) {\n console.error(\"Erro ao detectar novos dispositivos:\", error);\n throw new Error(\"Erro ao detectar novos dispositivos.\");\n }\n};\n\nexport const insertDevice = async ( serial, cnpj ) => {\n try {\n const response = await client.post(`devices/insert/`, { serial: serial, cnpj: cnpj }, {\n headers: getHeaders(),\n });\n // Verifique se a solicita磯 foi bem-sucedida com status 200\n if (response.status === 200) {\n console.log(\"Novo dispositivo inserido com sucesso.\");\n } else {\n console.error(\"Falha ao inserir novo dispositivo.\");\n }\n } catch (error) {\n console.error(\"Erro ao inserir novo dispositivo:\", error);\n throw new Error(\"Erro ao inserir novo dispositivo.\");\n }\n};\n\n// export const moveDevice = async (serial, newClient) => {\n// await client.post(`devices/${serial}/move/`, { client: newClient }, { headers: getHeaders() });\n// };\n\n/* Data examples: meta\n{\n \"root\": [\n {\n \"id\": 2,\n \"slug\": \"fk\",\n \"name\": \"FK\",\n \"info\": {\n \"devices\": 0,\n \"users\": 3,\n \"children\": 2,\n \"descendants\": 3\n },\n \"clients\": [\n {\n \"id\": 5,\n \"slug\": \"fk-north\",\n \"name\": \"FK North\",\n \"info\": {\n \"devices\": 1,\n \"users\": 1,\n \"children\": 1,\n \"descendants\": 1\n },\n \"clients\": [\n {\n \"id\": 15,\n \"slug\": \"fnk12\",\n \"name\": \"FNK12\",\n \"info\": {\n \"devices\": 1,\n \"users\": 2,\n \"children\": 0,\n \"descendants\": 0\n },\n \"clients\": []\n }\n ]\n }\n ]\n },\n []\n ],\n \"fk\": [\n {\n \"id\": 2,\n \"slug\": \"fk\",\n \"name\": \"FK\",\n \"info\": {\n \"devices\": 0,\n \"users\": 3,\n \"children\": 2,\n \"descendants\": 3\n },\n \"clients\": [\n {\n \"id\": 5,\n \"slug\": \"fk-north\",\n \"name\": \"FK North\",\n \"info\": {\n \"devices\": 1,\n \"users\": 1,\n \"children\": 1,\n \"descendants\": 1\n },\n \"clients\": [\n {\n \"id\": 15,\n \"slug\": \"fnk12\",\n \"name\": \"FNK12\",\n \"info\": {\n \"devices\": 1,\n \"users\": 2,\n \"children\": 0,\n \"descendants\": 0\n },\n \"clients\": []\n }\n ]\n }\n ]\n },\n []\n ],\n \"fk-north\": [\n {\n \"id\": 5,\n \"slug\": \"fk-north\",\n \"name\": \"FK North\",\n \"info\": {\n \"devices\": 1,\n \"users\": 1,\n \"children\": 1,\n \"descendants\": 1\n },\n \"clients\": [\n {\n \"id\": 15,\n \"slug\": \"fnk12\",\n \"name\": \"FNK12\",\n \"info\": {\n \"devices\": 1,\n \"users\": 2,\n \"children\": 0,\n \"descendants\": 0\n },\n \"clients\": []\n }\n ]\n },\n [\n \"fk\"\n ]\n ],\n \"fnk12\": [\n {\n \"id\": 15,\n \"slug\": \"fnk12\",\n \"name\": \"FNK12\",\n \"info\": {\n \"devices\": 1,\n \"users\": 2,\n \"children\": 0,\n \"descendants\": 0\n },\n \"clients\": []\n },\n [\n \"fk\",\n \"fk-north\"\n ]\n ]\n}*/\n","import React, { useState } from 'react';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Button from '@material-ui/core/Button';\nimport Typography from '@material-ui/core/Typography';\n\nexport default function TermsDialog({ open, onClose, title, termsText, onAccept, onReject }) {\n const [accepted, setAccepted] = useState(false);\n\n const handleAccept = () => {\n setAccepted(true);\n onAccept();\n onClose();\n };\n\n const handleReject = () => {\n setAccepted(false);\n onReject();\n onClose();\n };\n\n return (\n \n {title}\n \n \n \n \n \n \n \n \n );\n}\n","import React from \"react\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport Button from \"@material-ui/core/Button\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport TextField from \"@material-ui/core/TextField\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport Link from \"@material-ui/core/Link\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Box from \"@material-ui/core/Box\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { withStyles, makeStyles } from \"@material-ui/core/styles\";\nimport env from \"../env\";\nimport MessageDialog from './MessageDialog'; \nimport LoadingModal from \"./LoadingModal\"; // Importe o componente de janela de loading\n\nimport axios from \"axios\";\n//import Cookies from \"js-cookie\";\n\nimport Copyright from \"../components/Copyright\";\nimport background_default from \"../assets/images/login_bg.jpg\";\n//import background_cadastro from \"../assets/images/telafinal_cadastro_mfk.jpg\";\nimport background_cadastro from \"../assets/images/tela-fk_ALT.jpg\";\nimport background_fk from \"../assets/images/brands/bg_home_login3.jpg\";\n// import background_fk from \"../assets/images/brands/banner_test.png\";\nimport roundLogo from \"../assets/images/round_logo.png\";\nimport smallLogo_fk from \"../assets/images/brands/brand_frigoking_login.png\";\nimport { useHistory } from \"react-router-dom\";\nimport { useForm } from \"react-hook-form\";\nimport { useState, useEffect } from \"react\";\n\nimport * as api from \"../api\";\nimport { useAuthContext } from \"../hooks/useAuth\";\nimport TermsDialog from './TermsDialog';\n\nimport PhoneInput from 'react-phone-input-2';\nimport 'react-phone-input-2/lib/style.css';\nimport * as yup from \"yup\";\n\n\nconst background = env.Client === \"FK\" ? background_fk : background_default;\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n height: \"100vh\",\n },\n image: {\n backgroundImage: \"url(\" + background + \")\",\n backgroundRepeat: \"no-repeat\",\n backgroundColor: theme.palette.type === \"light\" ? theme.palette.grey[50] : theme.palette.grey[900],\n backgroundSize: \"cover\",\n backgroundPosition: \"center\",\n },\n paper: {\n margin: theme.spacing(8, 4),\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n },\n avatar: {\n margin: theme.spacing(3),\n height: 80,\n width: 80,\n },\n banner_fk: {\n margin: theme.spacing(3),\n },\n form: {\n width: \"100%\", // Fix IE 11 issue.\n marginTop: theme.spacing(1),\n },\n submit: {\n margin: theme.spacing(3, 0, 2),\n },\n linkContainer: {\n display: 'flex',\n flexDirection: 'column', // Organiza os itens em coluna\n alignItems: 'center', // Centraliza os itens horizontalmente\n marginTop: theme.spacing(2), // Adiciona um espaço acima do container\n },\n linkItem: {\n marginTop: theme.spacing(1), // Adiciona um espaço entre os links\n }\n}));\n\nconst StyledButton = withStyles({\n root: {\n background: \"linear-gradient(45deg, #ff6d00 30%, #ff9100 90%)\",\n borderRadius: 3,\n border: 0,\n color: \"white\",\n height: 48,\n padding: \"0 30px\",\n boxShadow: \"0 3px 5px 2px #eee\",\n },\n label: {},\n})(Button);\n\nconst termoResponsabilidadeHTML = `\n

Termo de Responsabilidade Criminal

\n

Declaração de Autoridade e Responsabilidade Legal

\n

Ao utilizar esta plataforma, o usuário afirma sob as penas da lei que possui autorização legítima para operar os equipamentos e acessar os dados neles contidos, seja como proprietário ou como agente autorizado pelo proprietário. Declarações falsas ou uso indevido dos dados ou da plataforma podem ser considerados delitos passíveis de ação penal conforme legislação vigente.

\n`;\n\nconst validateUpdate = yup.object({\n email: yup.string().required(\"Email é obrigatório\"),\n fullName: yup.string().required(\"Nome é obrigatório\"),\n telefone: yup.string().required(\"Telefone é obrigatório\"),\n});\n\nexport default function Login() {\n const classes = useStyles();\n let history = useHistory();\n const { register, handleSubmit, errors, setValue, clearErrors, setError, watch, getValues } = useForm();\n const [nonFieldError, setNonFieldError] = useState(\"\");\n const { setLogin } = useAuthContext();\n\n const [step, setStep] = useState('login'); // Adicione isso ao estado do componente\n const [userData, setUserData] = useState({}); // Para armazenar dados temporariamente\n\n const [errorMessage, setErrorMessage] = useState('');\n const [openDialog, setOpenDialog] = useState(false);\n\n const [loading, setLoading] = useState(false); // Estado para controlar o loading\n\n const [openTermsDialog1, setOpenTermsDialog1] = useState(false);\n const [termsAccepted, setTermsAccepted] = useState(false);\n\n const [phoneCadastroRequired, setPhoneCadastroRequired] = useState(false); // Novo estado\n\n const [telefone, setTelefone] = useState(\"\"); // Para armazenar dados temporariamente\n\n\n \n useEffect(() => {\n if (step === 'phoneCadastroRequired') {\n register({ name: 'telefone' }, {\n required: 'Telefone é obrigatório',\n validate: value => (value && value.replace(/\\D/g, '').length >= 10) || 'Número de telefone inválido',\n });\n }\n\n const handlePopState = () => {\n setStep('login');\n clearErrors();\n history.push(\"/\");\n };\n\n window.addEventListener('popstate', handlePopState);\n\n return () => {\n window.removeEventListener('popstate', handlePopState);\n };\n }, [clearErrors]);\n\n const handleDialogClose = () => {\n setOpenDialog(false);\n history.push(\"/\");\n };\n\n const handleCloseTermsDialog = () => {\n setOpenTermsDialog1(false);\n //setOpenTermsDialog2(false);\n //setSelectedTerms(null);\n };\n\n const handleTermsAcceptedChange = (event) => {\n setTermsAccepted(event.target.checked);\n };\n\n const onSubmit = async (data) => {\n \t console.log(\"onSubmit\");\n clearErrors();\n setNonFieldError(\"\");\n // console.log(\"onsubmit\", data);\n\n setLoading(true);\n\n if (step === 'login') {\n api\n .login(data)\n .then((resp) => {\n setLoading(false);\n if (resp.data.smsVerificationRequired) {\n // Armazena dados temporariamente e solicita código SMS\n setUserData(data); // Armazenar dados do usuário para uso posterior\n //setStep('verifySMS'); // Mudar etapa para inserção de código SMS\n setStep('acceptTermsSms');\n } else if (resp.data.emailVerificationRequired) {\n // Armazena dados temporariamente e solicita código SMS\n setUserData(data); // Armazenar dados do usuário para uso posterior\n //setStep('verifyEmail'); // Mudar etapa para inserção de código SMS\n setStep('acceptTermsEmail');\n } else if (resp.data.phoneCadastroRequired) {\n // Armazena dados temporariamente e solicita código SMS\n setUserData(data); // Armazenar dados do usuário para uso posterior\n //setStep('verifyEmail'); // Mudar etapa para inserção de código SMS\n setPhoneCadastroRequired(true);\n setStep('phoneCadastroRequired');\n } else if (resp.data.token) {\n // console.log(\"Login.jsx\", resp.data);\n setLogin({ ...resp.data, \n impersonate: resp.data.client,\n in_training: resp.data.in_training\n });\n // Cookies.set(\"token\", resp.data.token);\n if (!resp.data.is_profile_complete) {\n // Se o perfil não estiver completo, redirecionar para a tela de completar perfil\n console.log(\"data:\", data);\n console.log(\"resp.data:\", resp.data);\n history.push(`/completeprofile?email=${resp.data.username}` );\n } else {\n history.push(\"/device\");\n //history.push(\"/dashboard\");\n // window.location.reload(); // initial page with token\n }\n }\n })\n .catch((error) => handleErrors(error));\n } else if (step === 'phoneCadastroRequired') {\n // Enviar dados do telefone e continuar com a verificação do SMS\n console.log(\"userData:\", userData);\n console.log(\"telefone:\", data, telefone);\n api.registerPhone({ ...userData, phoneNumber: telefone })\n .then(() => {\n setLoading(false);\n setStep('verifySMS'); // Avançar para verificação do SMS\n })\n .catch((error) => handleErrors(error));\n } else if ((step === 'verifySMS')||(step === 'verifyEmail')) {\n // Supondo que `data` agora contenha o `verificationCode`\n api.verifySmsCode({...userData, verificationCode: data.verificationCode})\n .then((resp) => {\n setLoading(false);\n if(resp.data.success) {\n // Supondo que a resposta contém o token após a verificação bem-sucedida\n setLogin({ ...resp.data, \n impersonate: resp.data.client,\n in_training: resp.data.in_training\n });\n if (!resp.data.is_profile_complete) {\n // Se o perfil não estiver completo, redirecionar para a tela de completar perfil\n console.log(\"data:\", data);\n console.log(\"resp.data:\", resp.data);\n console.log(\"resp.data.username:\", resp.data.username);\n history.push(`/completeprofile?email=${resp.data.username}` );\n } else {\n history.push(\"/device\");\n //history.push(\"/dashboard\");\n // window.location.reload(); // initial page with token\n }\n } else {\n // Exibe a mensagem de erro no MessageDialog\n setErrorMessage(\"Codigo invalido ou expirado. \");\n setOpenDialog(true);\n\n }\n })\n .catch((error) => handleErrors(error));\n } else if ((step === 'acceptTermsSms')||(step === 'acceptTermsEmail')) {\n setLoading(false);\n if (termsAccepted) {\n if (step === 'acceptTermsSms') {\n setStep('verifySMS');\n } else if (step === 'acceptTermsEmail') {\n setStep('verifyEmail');\n } \n } else {\n setErrorMessage(\"Você deve aceitar os termos e condições.\");\n setOpenDialog(true);\n //setLoading(false);\n }\n }\n };\n\n // Função para lidar com erros tanto no login quanto na verificação do SMS\n const handleErrors = (error) => {\n setLoading(false);\n if (error.response && error.response.data) {\n Object.keys(error.response.data).forEach((key) => {\n if (key === \"non_field_errors\") {\n setNonFieldError(error.response.data[key][0]);\n } else {\n setError(key, { message: error.response.data[key] });\n }\n });\n } else {\n setNonFieldError(error.toString());\n }\n };\n\n return (\n \n \n \n \n
\n {env.Client == \"Default\" && }\n {env.Client == \"FK\" && }\n \n {step === 'login' ? 'Entrar' : step === 'phoneCadastroRequired' ? 'Cadastrar Telefone' : step === 'acceptTermsSms' || step === 'acceptTermsEmail' ? 'Aceitar Termos' : step === 'verifySMS' ? 'Verifique o código enviado para seu telefone' : 'Verifique o código enviado para o seu email'}\n \n
\n {step === 'login' ? (\n <>\n \n \n \n ) : step === 'phoneCadastroRequired' ? (\n <>\n\n \n \n \n E' necessario agora cadastrar seu Telefone Celular na plataforma.\n {\n setTelefone(value);\n setValue('telefone', value, true);\n console.log(\"Telefone atualizado:\", value); // Imprime o valor atualizado\n }}\n inputProps={{\n id: 'telefone',\n name: 'telefone',\n required: true,\n autoFocus: true,\n label: \"Telefone Celular\",\n autoComplete: 'off',\n }}\n isValid={(value, country) => {\n return value.match(/\\d/g).length >= 8;\n }}\n specialLabel=\"Telefone Celular\"\n inputStyle={{ width: '100%' }}\n containerStyle={{ marginTop: '16px', marginBottom: '20px' }}\n inputClass={`form-control ${errors.telefone ? 'Mui-error' : ''}`}\n helperText={errors.password && errors.password.message && \"E' necessario agora cadastrar um telefone na plataforma.\"}\n />\n \n \n ) : ((step === 'acceptTermsSms')||(step === 'acceptTermsEmail')) ? (\n <>\n \n Você precisa aceitar os termos de responsabilidade para continuar.\n \n setOpenTermsDialog1(true)}>\n Termos de responsabilidade de uso da plataforma Meu Frigo King.\n }\n />\n \n setTermsAccepted(true)}\n onReject={() => setTermsAccepted(false)}\n />\n \n ) : (\n \n )}\n\n \n {step === 'login' ? 'Entrar' : step === 'phoneCadastroRequired' ? 'Cadastrar Telefone' : (step === 'acceptTermsSms' || step === 'acceptTermsEmail') ? 'Aceitar Termos' : step === 'verifySMS' ? 'Verifique o código enviado para seu telefone' : 'Verifique o código enviado para o seu email'}\n \n {nonFieldError &&
{nonFieldError}
}\n \n
\n \n \n Esqueceu sua senha?\n \n \n \n \n Não tem uma conta? Cadastre-se\n \n \n
\n \n \n \n \n
\n
\n {/* Renderizar a janela de loading apenas quando o estado de loading for verdadeiro */}\n {loading && }\n \n {/* Restante do seu código */}\n
\n
\n
\n );\n}\n","import React from \"react\";\nimport { MenuItem, withStyles, makeStyles, ListItemText } from \"@material-ui/core\";\n\nimport TreeView from \"@material-ui/lab/TreeView\";\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\nimport ChevronRightIcon from \"@material-ui/icons/ChevronRight\";\nimport TreeItem from \"@material-ui/lab/TreeItem\";\nimport * as api from \"../api\";\nimport { useQuery } from \"react-query\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n flexGrow: 1,\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(1),\n marginLeft: theme.spacing(2),\n },\n}));\n\nconst makeMenuTree = (ref, onSelect, data, level = 0, showAdditionalInfo = true, selected = null) => {\n const deviceInfo = data && data.info && data.info.devices ? `${data.info.devices} devices` : \"No devices\";\n const clientInfo = data && data.info && data.info.children ? `${data.info.children} clients` : \"No clients\";\n\n const additionalInfo = `${clientInfo} · ${deviceInfo}`;\n\n return (\n \n onSelect(data.id)} selected={selected && selected == data.id} style={{ marginLeft: level * 20 }}>\n {showAdditionalInfo ? : data.name}\n \n {data.clients.map((d) => makeMenuTree(ref, onSelect, d, level + 1, showAdditionalInfo, selected))}\n \n );\n};\n\n// const MenuTree = ({ selected, onSelect }) => {\nconst MenuTree = React.forwardRef((props, ref) => {\n const classes = useStyles();\n\n // const { isLoading, error, data } = useQuery(\"tree\", () => api.tree(\"root\"));\n const { isLoading, isError, error, data } = useQuery(\"client-tree\", api.clientTree, { staleTime: 30000 });\n\n if (isLoading) return \"Loading...\";\n\n if (error) return \"An error has occurred: \" + error.message;\n\n return makeMenuTree(ref, props.onSelect, data, 0, true, props.selected);\n\n // return (\n // }\n // defaultExpandIcon={}\n // >\n // {makeTree(data)}\n // \n // );\n});\n\nexport default MenuTree;\n","import { Box, Button } from \"@material-ui/core\";\nimport React from \"react\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Card from \"@material-ui/core/Card\";\nimport CardActions from \"@material-ui/core/CardActions\";\nimport CardContent from \"@material-ui/core/CardContent\";\nimport Typography from \"@material-ui/core/Typography\";\n\nimport { parseISO, formatDistanceToNow } from \"date-fns\";\nimport differenceInMinutes from \"date-fns/differenceInMinutes\";\n\nconst makeLink = (device) => \"/device/\" + device.serial;\n\nfunction toCelsius(f) {\n return (5 / 9) * (f - 32);\n}\nconst MAGIC_TEMP_NUMBER = 4597.0;\nfunction setpointToCelsius(val) {\n const f = (val - MAGIC_TEMP_NUMBER) / 10.0;\n return toCelsius(f);\n}\n\nconst useStyles = makeStyles({\n root: {\n minWidth: 275,\n },\n bullet: {\n display: \"inline-block\",\n margin: \"0 2px\",\n transform: \"scale(0.8)\",\n },\n title: {\n fontSize: 14,\n },\n pos: {\n marginBottom: 12,\n },\n});\n\nexport default function DeviceCard({ device }) {\n const classes = useStyles();\n const bull = ;\n\n const { serial, updated_at, client, read_params } = device;\n let setpoint = \"Not avail.\";\n try {\n const params = JSON.parse(read_params);\n if (\"Setpoint\" in params) {\n setpoint = Math.round(setpointToCelsius(params[\"Setpoint\"])) + \"°C\";\n }\n } catch (error) {\n console.log(\"Could not parse json\");\n }\n\n console.log(\"ISONLINE\", { updated_at: parseISO(updated_at) });\n\n const isOnline = differenceInMinutes(new Date(), parseISO(updated_at)) <= 10;\n\n return (\n \n \n \n Dispostivo\n \n \n {serial}\n \n \n Setpoint: {setpoint}\n \n \n Status: {isOnline ? \"Online\" : \"Offline\"}\n \n\n \n Last seen {formatDistanceToNow(parseISO(updated_at))} ago\n \n \n \n \n \n \n );\n}\n\n// export default function DeviceCard({ device }) {\n// return (\n// \n// \n// \n// );\n// }\n","import { Link as RouterLink, useHistory, useParams } from \"react-router-dom\";\n\nimport { Avatar, Box, ButtonBase, Button, Divider, Menu, MenuItem, withStyles } from \"@material-ui/core\";\nimport AppBar from \"@material-ui/core/AppBar\";\nimport { deepOrange } from \"@material-ui/core/colors\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport Drawer from \"@material-ui/core/Drawer\";\nimport List from \"@material-ui/core/List\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport ListItemIcon from \"@material-ui/core/ListItemIcon\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Toolbar from \"@material-ui/core/Toolbar\";\nimport Typography from \"@material-ui/core/Typography\";\nimport KeyboardArrowDown from \"@material-ui/icons/KeyboardArrowDown\";\nimport UserIcon from \"@material-ui/icons/PersonOutline\";\nimport ClientIcon from \"@material-ui/icons/BusinessOutlined\";\nimport DeviceIcon from \"@material-ui/icons/LocalShippingOutlined\";\nimport AlertIcon from \"@material-ui/icons/ReportProblemOutlined\";\n\n//import Cookies from \"js-cookie\";\n\nimport * as api from \"../api\";\nimport MenuTree from \"../components/MenuTree\";\nimport DeviceCard from \"../components/DeviceCard\";\n\nimport { usePaginatedQuery, useQuery } from \"react-query\";\n\nimport React from \"react\";\nimport { useEffect } from \"react\";\nimport { useAuthContext } from \"../hooks/useAuth\";\n\nconst drawerWidth = 240;\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n },\n appBar: {\n width: `calc(100% - ${drawerWidth}px)`,\n marginLeft: drawerWidth,\n },\n drawer: {\n width: drawerWidth,\n flexShrink: 0,\n },\n drawerPaper: {\n width: drawerWidth,\n backgroundColor: \"#172026\",\n color: \"white\",\n },\n // necessary for content to be below app bar\n toolbar: theme.mixins.toolbar,\n content: {\n flexGrow: 1,\n backgroundColor: theme.palette.background.default,\n padding: theme.spacing(3),\n },\n orange: {\n color: theme.palette.getContrastText(deepOrange[500]),\n backgroundColor: deepOrange[500],\n },\n title: {\n fontSize: 18,\n },\n subtitle: {\n fontSize: 14,\n color: theme.palette.grey[400],\n },\n menuHeader: {\n color: \"#bbb\",\n // fontSize: 14,\n marginTop: theme.spacing(1),\n marginLeft: theme.spacing(2),\n fontWeight: \"bold\",\n },\n}));\n\nconst listStyles = makeStyles((theme) => ({\n root: {\n color: theme.palette.grey[500],\n \"&:hover\": {\n // backgroundColor: theme.palette.grey[100],\n color: theme.palette.grey[100],\n },\n },\n selected: {\n \"&.Mui-selected\": {\n backgroundColor: \"transparent\",\n color: \"white\",\n // fontWeight: 900,\n // \"&:hover, &:focus\": {\n // backgroundColor: theme.palette.grey[600],\n // },\n },\n },\n button: {\n transition: theme.transitions.create(\"background-color\", {\n duration: theme.transitions.duration.shortest,\n }),\n \"&:hover\": {\n textDecoration: \"none\",\n backgroundColor: theme.palette.action.hover,\n // Reset on touch devices, it doesn't add specificity\n \"@media (hover: none)\": {\n backgroundColor: \"transparent\",\n },\n },\n },\n}));\n\nconst iconStyles = makeStyles((theme) => ({\n root: {\n color: \"inherit\",\n },\n}));\n\nconst DataDisplay = () => {\n const { isLoading, error, data } = useQuery(\"users\", api.users().getAll);\n\n if (isLoading) return \"Loading...\";\n\n if (error) return \"An error has occurred: \" + error.message;\n\n return (\n
\n {data.results.map((x) => (\n

{x.username}

\n ))}\n
\n );\n};\n\nconst DevicesDisplay = ({ serial }) => {\n const [page, setPage] = React.useState(0);\n const { auth } = useAuthContext();\n\n const { isLoading, isError, error, resolvedData } = usePaginatedQuery([\"devices\", page, auth.impersonate], api.devicesList, {\n refetchInterval: 3000,\n refetchIntervalInBackground: true, // tab in background\n });\n\n // console.log(resolvedData);\n\n // resolvedData.sort()\n\n return (\n
\n {isLoading ? (\n
Loading...
\n ) : isError ? (\n
Error: {error.message}
\n ) : (\n // `resolvedData` will either resolve to the latest page's data\n // or if fetching a new page, the last successful page's data\n
\n {resolvedData.results.map((device) => (\n \n \n \n ))}\n
\n )}\n Current Page: {page + 1}\n {\" \"}\n {\n // console.log(\"latestData\", latestData);\n // Here, we use `latestData` so the Next Page\n // button isn't relying on potentially old data\n // setPage((old) => (!latestData || !latestData.next ? old : old + 1));\n }}\n >\n Next Page\n \n {/* {\n // Since the last page's data potentially sticks around between page requests,\n // we can use `isFetching` to show a background loading\n // indicator since our `status === 'loading'` state won't be triggered\n isFetching ? Loading... : null\n }{\" \"} */}\n
\n );\n};\n\nexport default function PermanentDrawerLeft() {\n const classes = useStyles();\n const listClasses = listStyles();\n const iconClasses = iconStyles();\n let history = useHistory();\n const { clear } = useAuthContext();\n\n const [anchorEl, setAnchorEl] = React.useState(null);\n\n let { id } = useParams();\n\n const handleClick = (event) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const handleSignOut = () => {\n // Cookies.remove(\"token\");\n clear();\n history.push(\"/\");\n // window.location.replace(\"/\");\n };\n\n // useEffect(() => {\n // api\n // .users()\n // .getAll()\n // .then(({ data: { results } }) => console.log(results));\n\n // api\n // .clients()\n // .getAll()\n // .then(({ data: { results } }) => console.log(results));\n\n // api\n // .devices()\n // .getAll()\n // .then(({ data: { results } }) => console.log(results));\n // }, []);\n\n const SidebarItem = ({ label, Icon, selected }) => (\n \n \n \n \n \n \n );\n\n const StyledMenu = withStyles({\n paper: {\n border: \"1px solid #d3d4d5\",\n marginTop: 10,\n minWidth: drawerWidth,\n },\n })((props) => (\n \n ));\n\n return (\n
\n \n {false && (\n \n \n \n Permanent drawer\n \n \n \n )}\n \n {/*
*/}\n \n \n HS\n \n \n \n Hugo Schmitt\n \n \n \n CLIENTE: root\n \n \n \n \n CLIENTES\n {\n console.log(\"Client selected: \" + id);\n handleClose();\n }}\n />\n \n User settings\n API Keys\n Sign out\n \n {/* */}\n \n \n \n \n \n \n \n \n \n
\n {/*
*/}\n {/*

Users

\n */}\n

Devices

\n \n
\n
\n );\n}\n","import React, { useState } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Grid from \"@material-ui/core/Grid\";\nimport {\n Avatar,\n Box,\n Button,\n ButtonGroup,\n SvgIcon,\n Typography,\n Drawer,\n} from \"@material-ui/core\";\nimport { DataGrid } from \"@material-ui/data-grid\";\nimport ToggleButton from \"@material-ui/lab/ToggleButton\";\nimport ToggleButtonGroup from \"@material-ui/lab/ToggleButtonGroup\";\nimport ButtonRow from \"./ButtonRow\";\nimport _ from \"lodash\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n flexGrow: 1,\n marginTop: 20,\n },\n paper: {\n padding: theme.spacing(2),\n textAlign: \"center\",\n color: theme.palette.text.secondary,\n },\n drawer: {\n margin: theme.spacing(2),\n },\n large: {\n width: theme.spacing(10),\n height: theme.spacing(10),\n display: \"inline-block\",\n },\n}));\n\nconst writeParamsList = [\n \"Setpoint\",\n \"P0_Valor\",\n \"P1_Valor\",\n \"P3_Valor\",\n \"P4_Valor\",\n \"P5_Valor\",\n \"P6_Valor\",\n \"P7_Valor\",\n \"P8_Valor\",\n \"P9_Valor\",\n \"dH_Valor\",\n \"PF_Valor\",\n \"Pd_Valor\",\n \"SL_Valor\",\n \"PL_Valor\",\n \"EC_Valor\",\n \"dA_Valor\",\n \"tL_Valor\",\n \"Refrigeracao\",\n \"Velocidade_da_Ventilacao\",\n \"Limpador_Traseiro\",\n \"Limpador_Dianteiro\",\n \"Farol_Dianteiro\",\n \"Farol_Traseiro\",\n \"Esguicho_de_Agua\",\n \"Carga_de_Gas\",\n \"Reset_dos_Parametros\",\n];\n\nexport default function AutoGrid({ params }) {\n const classes = useStyles();\n const [drawerOpen, setDrawerOpen] = useState(false);\n\n const columns = [\n { flex: 0.5, field: \"paramName\", headerName: \"Parameter\" },\n {\n flex: 1,\n field: \"paramValue\",\n headerName: \"Value (hex)\",\n valueFormatter: (params) => {\n if (!params.value) return \"0x0\";\n const valueHex = params.value.toString(16).toUpperCase();\n return `0x${valueHex}`;\n },\n },\n ];\n\n const rows = _.keys(params).map((key, idx) => ({\n id: idx,\n paramName: key,\n paramValue: params[key] || \"\",\n }));\n\n const writeColumns = [\n { flex: 0.5, field: \"paramName\", headerName: \"Parameter\" },\n {\n flex: 1,\n field: \"paramValue\",\n headerName: \"Value (hex)\",\n editable: true,\n valueFormatter: (params) => {\n if (!params.value) return \"0x0\";\n const valueHex = params.value.toString(16).toUpperCase();\n return `0x${valueHex}`;\n },\n },\n ];\n\n const writeRows = writeParamsList.map((key, idx) => ({\n id: idx,\n paramName: key,\n paramValue: params[key] || \"0\",\n }));\n\n return (\n
\n setDrawerOpen(false)}\n >\n \n \n Ventilação\n \n \n \n \n \n \n \n \n \n \n \n \n \n Ventilação\n \n \n \n \n \n \n \n \n \n \n \n \n Temperatura\n \n \n \n \n \n \n \n \n \n \n \n \n \n Parâmetros escrita\n \n
\n \n
\n \n {\n setDrawerOpen(true);\n }}\n >\n Write changes\n \n \n
\n
\n \n \n \n Parâmetros leitura\n \n
\n \n
\n
\n
\n
\n
\n );\n}\n","import React from \"react\";\nimport Card from \"@material-ui/core/Card\";\nimport CardActionArea from \"@material-ui/core/CardActionArea\";\nimport CardActions from \"@material-ui/core/CardActions\";\nimport CardContent from \"@material-ui/core/CardContent\";\nimport CardMedia from \"@material-ui/core/CardMedia\";\nimport Button from \"@material-ui/core/Button\";\nimport Typography from \"@material-ui/core/Typography\";\nimport {\n Theme,\n createStyles,\n makeStyles,\n useTheme,\n} from \"@material-ui/core/styles\";\n\nimport background from \"../../assets/images/login_bg.jpg\";\n//import background_cadastro from \"../assets/images/telafinal_cadastro_mfk.jpg\";\nimport { useParams } from \"react-router-dom\";\nimport * as api from \"../../api\";\nimport { usePaginatedQuery, useQuery } from \"react-query\";\nimport { Box, Slider } from \"@material-ui/core\";\n\nimport IconButton from \"@material-ui/core/IconButton\";\nimport RemoveIcon from \"@material-ui/icons/ArrowDownward\";\nimport AddIcon from \"@material-ui/icons/ArrowUpward\";\nimport { grey } from \"@material-ui/core/colors\";\nimport { useEffect } from \"react\";\nimport { parseISO, differenceInSeconds } from \"date-fns\";\n\n// Buttons\nimport FormatBoldIcon from \"@material-ui/icons/FormatBold\";\nimport FormatItalicIcon from \"@material-ui/icons/FormatItalic\";\nimport FormatUnderlinedIcon from \"@material-ui/icons/FormatUnderlined\";\nimport FormatColorFillIcon from \"@material-ui/icons/FormatColorFill\";\nimport ArrowDropDownIcon from \"@material-ui/icons/ArrowDropDown\";\nimport ToggleButton from \"@material-ui/lab/ToggleButton\";\nimport ToggleButtonGroup from \"@material-ui/lab/ToggleButtonGroup\";\n\nimport DeviceControlFlex from \"./Grid\";\n\nconst useStyles = makeStyles((theme) =>\n createStyles({\n root: {\n marginTop: 20,\n maxWidth: 785,\n },\n media: {\n height: 180,\n },\n setpoint: {\n // maxWidth: 200,\n fontWeight: 900,\n },\n controls: {\n display: \"flex\",\n alignItems: \"center\",\n paddingLeft: theme.spacing(1),\n paddingBottom: theme.spacing(1),\n },\n controlIcon: {\n height: 38,\n width: 38,\n },\n })\n);\n\nconst marks = [\n {\n value: 17,\n label: \"17°C\",\n },\n {\n value: 26,\n label: \"26°C\",\n },\n {\n value: 35,\n label: \"35°C\",\n },\n];\n\nconst MAGIC_TEMP_NUMBER = 4597.0;\n\nfunction toCelsius(f) {\n return (5 / 9) * (f - 32);\n}\nfunction setpointToCelsius(val) {\n const f = (val - MAGIC_TEMP_NUMBER) / 10.0;\n return Math.round(toCelsius(f)); // integer\n}\n\nfunction toFahrenheit(c) {\n return c * (9 / 5) + 32;\n}\n\nfunction celsiusToSetpoint(c) {\n return toFahrenheit(c) * 10.0 + MAGIC_TEMP_NUMBER;\n}\n\n// all this would come from a protocol file...\n// and widgets would be standard tings...\nconst LIMITS = {\n MIN: 17,\n MAX: 32,\n};\n\nconst REFETCH_INTERVAL_MS = 10000; // TOOD: change back\n\nexport default function DeviceControl() {\n const classes = useStyles();\n let { serial } = useParams();\n\n const [remoteSetpoint, setRemoteSetpoint] = React.useState(0);\n const [localSetpoint, setLocalSetpoint] = React.useState(0); // back to zero\n const [localChanged, setLocalChanged] = React.useState(null); // TODO: reset when values match? or timeout?\n const [localParams, setLocalParams] = React.useState({});\n\n const { isLoading, error, data } = useQuery(\n [\"device\", serial],\n api.deviceDetail,\n {\n refetchInterval: REFETCH_INTERVAL_MS, // only changes when\n }\n );\n\n React.useEffect(() => {\n try {\n params = JSON.parse(data.read_params);\n setLocalParams(params);\n const newSetpoint = setpointToCelsius(params[\"Setpoint\"]);\n const paramsChangedTs = parseISO(data.params_changed_at);\n console.table({\n newSetpoint,\n paramsChangedTs,\n localChanged,\n diff: differenceInSeconds(paramsChangedTs, localChanged),\n });\n\n if (\n localChanged == null ||\n differenceInSeconds(paramsChangedTs, localChanged) > 0\n ) {\n // If remote (eg: the panel) was updated after the React app, sync. overwrite the \"local setpoint\" value.\n setLocalSetpoint(newSetpoint);\n }\n setRemoteSetpoint(newSetpoint);\n } catch (error) {}\n }, [isLoading, error, data]);\n\n if (isLoading) return \"Loading...\";\n\n if (error) return \"An error has occurred: \" + error.message;\n\n let params = null;\n // let setpoint = 0;\n // console.log(localSetpoint, remoteSetpoint, localSetpoint == remoteSetpoint);\n\n return (\n
\n \n Dispositivo {serial}\n \n {true && (\n \n \n \n \n Dispositivo Frigo King\n \n \n MAC: {serial}\n \n\n \n \n
\n {\n setLocalChanged(new Date());\n setLocalSetpoint(Math.min(localSetpoint + 1, LIMITS.MAX));\n }}\n >\n \n \n \n {localSetpoint} °C\n \n {\n setLocalChanged(new Date());\n setLocalSetpoint(Math.max(localSetpoint - 1, LIMITS.MIN));\n }}\n >\n \n \n
\n
\n {remoteSetpoint != localSetpoint && (\n
\n \n Remote temperature: {remoteSetpoint} °C\n \n
\n )}\n\n {/* */}\n \n {\n console.log(\n \"remoteWrite\",\n localSetpoint,\n \"=\",\n celsiusToSetpoint(localSetpoint)\n );\n api.remoteWrite(\"remotewrite\", serial, {\n Setpoint: celsiusToSetpoint(localSetpoint),\n });\n }} // write remote value\n >\n Save\n \n \n
\n
\n {/* \n \n \n */}\n
\n )}\n \n \n \n
\n );\n}\n","import ListItem from \"@material-ui/core/ListItem\";\nimport ListItemIcon from \"@material-ui/core/ListItemIcon\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport React from \"react\";\nimport { withRouter } from \"react-router\";\nimport { useHistory } from \"react-router-dom\";\n\nconst listStyles = makeStyles((theme) => ({\n root: {\n color: theme.palette.grey[200],\n \"&:hover\": {\n // backgroundColor: theme.palette.grey[100],\n color: theme.palette.grey[100],\n },\n },\n selected: {\n \"&.Mui-selected\": {\n backgroundColor: \"transparent\",\n color: \"white\",\n // fontWeight: 900,\n // \"&:hover, &:focus\": {\n // backgroundColor: theme.palette.grey[600],\n // },\n },\n },\n button: {\n transition: theme.transitions.create(\"background-color\", {\n duration: theme.transitions.duration.shortest,\n }),\n \"&:hover\": {\n textDecoration: \"none\",\n backgroundColor: theme.palette.action.hover,\n // Reset on touch devices, it doesn't add specificity\n \"@media (hover: none)\": {\n backgroundColor: \"transparent\",\n },\n },\n },\n}));\n\nconst iconStyles = makeStyles((theme) => ({\n root: {\n color: theme.palette.primary.main,\n },\n}));\n\nexport const SidebarItem = ({ label, Icon, selected, href, isBold }) => {\n const history = useHistory();\n const listClasses = listStyles();\n const iconClasses = iconStyles();\n\n return (\n history.push(href)} button key={label} classes={listClasses} selected={selected}>\n \n \n \n \n \n );\n};\n\n// export const SidebarItem = withRouter(SidebarItem_);\n","export default {\n drawerWidth: 240,\n editorWidth: 500,\n};\n","import { Menu, withStyles } from \"@material-ui/core\";\nimport React from \"react\";\nimport Constants from \"./Constants\";\n\nexport const StyledMenu = withStyles({\n paper: {\n border: \"1px solid #d3d4d5\",\n marginTop: 10,\n minWidth: Constants.drawerWidth,\n },\n})((props) => (\n \n));\n","export function stringToColor(string) {\n let hash = 0;\n let i;\n\n /* eslint-disable no-bitwise */\n for (i = 0; i < string.length; i += 1) {\n hash = string.charCodeAt(i) + ((hash << 5) - hash);\n }\n\n let color = \"#\";\n\n for (i = 0; i < 3; i += 1) {\n const value = (hash >> (i * 8)) & 0xff;\n color += `00${value.toString(16)}`.substr(-2);\n }\n /* eslint-enable no-bitwise */\n\n return color;\n}\n","export default __webpack_public_path__ + \"static/media/brand_webasto.008432dc.png\";","export default __webpack_public_path__ + \"static/media/brand_implemaster.5ebddd22.png\";","export default \"data:image/png;base64,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\"","export default __webpack_public_path__ + \"static/media/meufrigokinglaranja.cd681d36.png\";","export default __webpack_public_path__ + \"static/media/social-group_laranja.f3e5cab1.png\";","export default __webpack_public_path__ + \"static/media/audience_laranja.c287a4ba.png\";","import ImageDashboard from \"./dash.png\";\nimport ImageUsuarios from \"./social-group_laranja.png\";\nimport ImageDispositivos from \"./van_laranja.png\";\nimport ImageClientes from \"./audience_laranja.png\";\n\nconst style = { width: 25, height: 25, marginTop: 2 };\n\nexport const Dashboard = () => ;\nexport const Usuarios = () => ;\nexport const Dispositivos = () => ;\nexport const Clientes = () => ;\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDcuMi1jMDAwIDc5LjFiNjVhNzliNCwgMjAyMi8wNi8xMy0yMjowMTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIzLjUgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkNFMTJFNTdBNDU4MTExRURBODExQkM0MDg3QTU0QkJEIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkNFMTJFNTdCNDU4MTExRURBODExQkM0MDg3QTU0QkJEIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Q0UxMkU1Nzg0NTgxMTFFREE4MTFCQzQwODdBNTRCQkQiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Q0UxMkU1Nzk0NTgxMTFFREE4MTFCQzQwODdBNTRCQkQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6GXjyMAAAHXElEQVR42uzd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\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDcuMi1jMDAwIDc5LjFiNjVhNzliNCwgMjAyMi8wNi8xMy0yMjowMTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIzLjUgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkFGRTY3RkM3NDU4MTExRURBNTNGOTM3MjExNkM0MzU0IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkFGRTY3RkM4NDU4MTExRURBNTNGOTM3MjExNkM0MzU0Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QUZFNjdGQzU0NTgxMTFFREE1M0Y5MzcyMTE2QzQzNTQiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QUZFNjdGQzY0NTgxMTFFREE1M0Y5MzcyMTE2QzQzNTQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7W58nqAAAho0lEQVR42uzd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\"","import { Avatar, Box, ButtonBase, Divider, ListSubheader, MenuItem } from \"@material-ui/core\";\nimport { deepOrange } from \"@material-ui/core/colors\";\nimport Drawer from \"@material-ui/core/Drawer\";\nimport List from \"@material-ui/core/List\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\nimport ClientIcon from \"@material-ui/icons/BusinessOutlined\";\nimport DashboardIcon from \"@material-ui/icons/Dashboard\";\nimport KeyboardArrowDown from \"@material-ui/icons/KeyboardArrowDown\";\nimport DeviceIcon from \"@material-ui/icons/LocalShippingOutlined\";\nimport UserIcon from \"@material-ui/icons/PersonOutline\";\nimport AlertIcon from \"@material-ui/icons/ReportProblemOutlined\";\n//import Cookies from \"js-cookie\";\nimport React from \"react\";\nimport { useHistory, useParams, useRouteMatch } from \"react-router-dom\";\nimport MenuTree from \"../MenuTree\";\nimport { SidebarItem } from \"./SidebarItem\";\nimport { StyledMenu } from \"./StyledMenu\";\nimport Constants from \"./Constants\";\nimport { avatar, displayName, useAuthContext } from \"../../hooks/useAuth\";\nimport { stringToColor } from \"../../common/colors\";\n\nimport * as Logos from \"../../assets/images/brands\";\nimport * as FKIcons from \"../../assets/icons\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n },\n appBar: {\n width: `calc(100% - ${Constants.drawerWidth}px)`,\n marginLeft: Constants.drawerWidth,\n },\n drawer: {\n width: Constants.drawerWidth,\n flexShrink: 0,\n },\n drawerPaper: {\n width: Constants.drawerWidth,\n backgroundColor: theme.drawer.background,\n color: \"white\",\n },\n // necessary for content to be below app bar\n toolbar: theme.mixins.toolbar,\n content: {\n flexGrow: 1,\n backgroundColor: theme.palette.background.default,\n padding: theme.spacing(3),\n },\n orange: {\n color: theme.palette.getContrastText(deepOrange[500]),\n backgroundColor: deepOrange[500],\n },\n title: {\n fontSize: 15,\n },\n subtitle: {\n fontSize: 14,\n color: theme.palette.grey[400],\n },\n menuHeader: {\n color: \"#bbb\",\n // fontSize: 14,\n marginTop: theme.spacing(1),\n marginLeft: theme.spacing(2),\n fontWeight: \"bold\",\n },\n}));\n\nconst Logo = ({ client }) => {\n const slug = client;\n const margin = 25;\n return (\n
\n {`${slug}\n
\n );\n};\n\nexport default function MyDrawer() {\n const classes = useStyles();\n let history = useHistory();\n const { setClear } = useAuthContext();\n\n const [anchorEl, setAnchorEl] = React.useState(null);\n\n let { id } = useParams();\n\n const handleClick = (event) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const handleSignOut = () => {\n // Cookies.remove(\"token\");\n setClear();\n history.push(\"/\");\n // window.location.replace(\"/\");\n };\n\n let { serial } = useParams();\n const match = useRouteMatch();\n const { auth, setImpersonate } = useAuthContext();\n\n let client = auth.client;\n // if (auth.impersonate && auth.impersonate != auth.client) {\n // client = auth.impersonate + \" [i]\";\n // }\n // console.log(\"match\", match, auth);\n\n return (\n \n {/*
*/}\n \n \n \n {avatar(auth)}\n \n \n \n {displayName(auth)}\n \n \n \n {auth.client && CLIENT: {client}}\n \n \n \n \n {/* SUB-CLIENTS */}\n {/* {\n console.log(\"Client selected: \" + id);\n setImpersonate(id);\n handleClose();\n }}\n /> */}\n {/* */}\n {/* User settings */}\n {/* API Keys */}\n Sair\n \n {/* */}\n \n \n \n GERENCIAMENTO\n {auth.fk_level === \"FK\" && }\n {auth.fk_level === \"FK\" && }\n \n {/* */}\n \n \n \n );\n}\n","import { deepOrange } from \"@material-ui/core/colors\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport React from \"react\";\nimport { useQuery } from \"react-query\";\nimport { useHistory, useParams } from \"react-router-dom\";\nimport * as api from \"../api\";\nimport DeviceControl from \"../components/DeviceControl/DeviceControl\";\nimport { Drawer, Constants } from \"../components/Drawer\";\n\nexport default function Device() {\n const classes = useStyles();\n let { serial } = useParams();\n\n return (\n
\n \n \n
\n \n
\n
\n );\n}\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n },\n appBar: {\n width: `calc(100% - ${Constants.drawerWidth}px)`,\n marginLeft: Constants.drawerWidth,\n },\n drawer: {\n width: Constants.drawerWidth,\n flexShrink: 0,\n },\n drawerPaper: {\n width: Constants.drawerWidth,\n backgroundColor: \"#172026\",\n color: \"white\",\n },\n // necessary for content to be below app bar\n toolbar: theme.mixins.toolbar,\n content: {\n flexGrow: 1,\n backgroundColor: theme.palette.background.default,\n padding: theme.spacing(3),\n },\n orange: {\n color: theme.palette.getContrastText(deepOrange[500]),\n backgroundColor: deepOrange[500],\n },\n title: {\n fontSize: 18,\n },\n subtitle: {\n fontSize: 14,\n color: theme.palette.grey[400],\n },\n menuHeader: {\n color: \"#bbb\",\n // fontSize: 14,\n marginTop: theme.spacing(1),\n marginLeft: theme.spacing(2),\n fontWeight: \"bold\",\n },\n}));\n","const MAGIC_TEMP_NUMBER = 4597.0;\n\nexport function toCelsius(f) {\n return (5 / 9) * (f - 32);\n}\nexport function setpointToCelsius(val) {\n const f = (val - MAGIC_TEMP_NUMBER) / 10.0;\n return Math.round(toCelsius(f)); // integer\n}\n\nexport function toFahrenheit(c) {\n return c * (9 / 5) + 32;\n}\n\nexport function celsiusToSetpoint(c) {\n return toFahrenheit(c) * 10.0 + MAGIC_TEMP_NUMBER;\n}\n","import Chip from \"@material-ui/core/Chip\";\nimport DoneIcon from \"@material-ui/icons/Done\";\nimport ReportProblemIcon from \"@material-ui/icons/ReportProblem\";\nimport { createStyles, createTheme, makeStyles } from \"@material-ui/core/styles\";\n\nimport clsx from \"clsx\";\nimport * as React from \"react\";\n\nconst defaultTheme = createTheme();\nconst useStyles = makeStyles(\n (theme) =>\n createStyles({\n root: {\n justifyContent: \"left\",\n \"& .icon\": {\n color: \"inherit\",\n },\n },\n Offline: {\n border: `1px solid`,\n },\n Online: {\n color: theme.palette.success.dark,\n border: `1px solid ${theme.palette.success.main}`,\n },\n }),\n { defaultTheme }\n);\n\nconst Status = React.memo((props) => {\n const { status } = props;\n let icon = null;\n const classes = useStyles();\n if (status === \"Online\") {\n icon = ;\n }\n return ;\n});\n\nexport function renderOnline(params) {\n return ;\n}\n","import * as React from \"react\";\nimport { makeStyles } from \"@material-ui/styles\";\n\nimport { createSvgIcon } from \"@material-ui/core\";\n\n// prettier-ignore\nconst ALL_ICONS = {\n Level_0of2: createSvgIcon( , \"Level02\" ),\n Level_1of2: createSvgIcon( , \"Level12\" ),\n Level_2of2: createSvgIcon(, \"Level22\"),\n Level_0of3: createSvgIcon( , \"Level03\" ),\n Level_1of3: createSvgIcon( , \"Level13\" ),\n Level_2of3: createSvgIcon(, \"Level23\"),\n Level_3of3: createSvgIcon(, \"Level33\"),\n};\n\nconst useStyles = makeStyles({\n root: {\n display: \"flex\",\n },\n icon: {\n marginRight: 4,\n marginTop: 2,\n height: 32,\n width: 32,\n fontSize: \"28px\",\n },\n label: {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n },\n});\n\n// const valuesToIcons = {\n// \"\"\n// }\n\nconst Enum = React.memo(function Speed(props) {\n const { value } = props;\n const classes = useStyles();\n\n let icon = null;\n if (value && value.icon) {\n icon = ALL_ICONS[value.icon];\n }\n\n // console.log(\"value is\", value, icon);\n\n return (\n
\n {icon && {React.createElement(icon)}}\n {value && value.label ? {value.label} : }\n
\n );\n});\n\nexport function renderEnum(params) {\n if (params.value == null) {\n return (\n
\n \n
\n );\n }\n return ;\n}\n","import _ from \"lodash\";\n/**\n * Deep diff between two objects, using lodash\n * @param {Object} object Object compared\n * @param {Object} base Object to compare with\n * @return {Object} Return a new object which represents the diff\n */\nexport function difference(base, object) {\n function changes(object, base) {\n return _.transform(object, function (result, value, key) {\n if (!_.isEqual(value, base[key])) {\n result[key] = _.isObject(value) && _.isObject(base[key]) ? changes(value, base[key]) : value;\n }\n });\n }\n return changes(object, base);\n}\n","export function protocolToProject(proto) {\n const options = {\n 1: \"Internal\",\n impl: \"CIP001\",\n smtp: \"HWB001\",\n fk: \"FK001\",\n };\n return options[proto] || \" Loading... \";\n}\n","import { useQuery } from \"react-query\";\nimport { useParams } from \"react-router-dom\";\nimport * as api from \"../api\";\nimport _ from \"lodash\";\n\nconst getClientSimple = (client) => _.pick(client, [\"id\", \"slug\", \"name\"]);\nconst traverse = function (visit, clients, path) {\n for (let c of clients) {\n const newPath = [...path, c.name];\n visit(c, newPath);\n traverse(visit, c.clients, newPath);\n }\n};\n\nconst clientToOptions = (root) => {\n let options = [{ client: getClientSimple(root), path: [root.name] }];\n traverse((client, path) => options.push({ client: getClientSimple(client), path }), root.clients, [root.name]);\n return options;\n};\n\nexport default function useClient() {\n let { client: slug } = useParams();\n const current = slug || \"root\"; //auth.impersonate;\n\n const { refetch, isLoading, isError, error, data: tree } = useQuery(\"client-tree\", api.clientTree);\n\n if (isLoading) return { loading: true };\n if (isError) return { error: error };\n\n const [client, path] = tree && tree.meta[current];\n const fullPath = [...path, current];\n\n const clientOptions = clientToOptions(client);\n\n /*\n Example:\n path: ['globus', 'fk'] \n client: {id: 2, slug: 'fk', name: 'FK', info: {…}, clients: [...]}\n dir: {root: Array(2), globus: Array(2), fk: Array(2), fk-north: Array(2), fnk1: Array(2), …}\n */\n return { refetch, path: fullPath, client, dir: tree.meta, dirList: tree.metaList, currentSlug: current, clientOptions };\n}\n","import React from \"react\";\nimport constate from \"constate\";\n\nfunction useSelection() {\n const [selection, setSelection] = React.useState([]);\n const update = (arr) => setSelection(arr);\n return { selection, update };\n}\n\nconst [SelectionProvider, useSelectionContext] = constate(useSelection);\n\nexport { SelectionProvider, useSelectionContext };\n","import React from \"react\";\nimport { alpha, makeStyles } from \"@material-ui/core/styles\";\nimport AppBar from \"@material-ui/core/AppBar\";\nimport Toolbar from \"@material-ui/core/Toolbar\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport Button from \"@material-ui/core/Button\";\nimport Typography from \"@material-ui/core/Typography\";\nimport InputBase from \"@material-ui/core/InputBase\";\nimport Badge from \"@material-ui/core/Badge\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport Menu from \"@material-ui/core/Menu\";\nimport MenuIcon from \"@material-ui/icons/Menu\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport AccountCircle from \"@material-ui/icons/AccountCircle\";\nimport MailIcon from \"@material-ui/icons/Mail\";\nimport CheckBoxIcon from \"@material-ui/icons/CheckBox\";\nimport CheckBoxOutlineBlankIcon from \"@material-ui/icons/CheckBoxOutlineBlank\";\nimport NotificationsIcon from \"@material-ui/icons/Notifications\";\nimport MoreIcon from \"@material-ui/icons/MoreVert\";\nimport Icon from \"@material-ui/core/Icon\";\nimport KeyboardArrowDownIcon from \"@material-ui/icons/KeyboardArrowDown\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport { protocolToProject } from \"../common/projects\";\nimport { Tooltip } from \"@material-ui/core\";\nimport List from \"@material-ui/core/List\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\nimport DialogContent from \"@material-ui/core/DialogContent\";\nimport DialogActions from \"@material-ui/core/DialogActions\";\nimport Dialog from \"@material-ui/core/Dialog\";\nimport RadioGroup from \"@material-ui/core/RadioGroup\";\nimport Radio from \"@material-ui/core/Radio\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport useClient from \"../hooks/useClient\";\nimport RefreshIcon from '@material-ui/icons/Refresh';\n\nimport { SelectionProvider, useSelectionContext } from \"../hooks/useSelectionContext\";\n\nconst useStyles = makeStyles((theme) => ({\n grow: {\n flexGrow: 1,\n },\n menuButton: {\n marginRight: theme.spacing(2),\n },\n title: {\n display: \"none\",\n [theme.breakpoints.up(\"sm\")]: {\n display: \"block\",\n },\n },\n search: {\n position: \"relative\",\n borderRadius: theme.shape.borderRadius,\n backgroundColor: alpha(theme.palette.common.white, 0.15),\n \"&:hover\": {\n backgroundColor: alpha(theme.palette.common.white, 0.25),\n },\n marginRight: theme.spacing(2),\n marginLeft: 0,\n width: \"100%\",\n [theme.breakpoints.up(\"sm\")]: {\n marginLeft: theme.spacing(3),\n width: \"auto\",\n },\n },\n searchIcon: {\n padding: theme.spacing(0, 2),\n height: \"100%\",\n position: \"absolute\",\n pointerEvents: \"none\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n refreshIcon: {\n padding: theme.spacing(0, 2),\n height: \"100%\",\n position: \"absolute\",\n pointerEvents: \"none\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n inputRoot: {\n color: \"inherit\",\n },\n inputInput: {\n padding: theme.spacing(1, 1, 1, 0),\n // vertical padding + font size from searchIcon\n paddingLeft: `calc(1em + ${theme.spacing(4)}px)`,\n transition: theme.transitions.create(\"width\"),\n width: \"100%\",\n [theme.breakpoints.up(\"md\")]: {\n width: \"20ch\",\n },\n },\n sectionDesktop: {\n display: \"none\",\n [theme.breakpoints.up(\"md\")]: {\n display: \"flex\",\n },\n },\n sectionMobile: {\n display: \"flex\",\n [theme.breakpoints.up(\"md\")]: {\n display: \"none\",\n },\n },\n button: {\n borderRadius: theme.shape.borderRadius,\n backgroundColor: alpha(theme.palette.common.white, 0.15),\n \"&:hover\": {\n backgroundColor: alpha(theme.palette.common.white, 0.25),\n },\n // backgroundColor: theme.button.appbar,\n marginRight: 0,\n marginLeft: theme.spacing(2),\n },\n}));\n\nconst transferTargets = (dir) => {\n let clients = [];\n let seen = {};\n for (const entry in dir) {\n const [client, paths] = dir[entry];\n if (client.slug in seen) {\n } else {\n seen[client.slug] = true;\n clients.push({ slug: client.slug, name: client.name });\n }\n }\n return clients;\n};\n\nfunction DeviceTransferDialog(props) {\n const { onClose, value: valueProp, open, devices, ...other } = props;\n const [value, setValue] = React.useState(valueProp);\n const radioGroupRef = React.useRef(null);\n\n let { client, isLoading, isError, dir } = useClient();\n let clients = transferTargets(dir);\n console.log(\"client\", dir, clients);\n\n React.useEffect(() => {\n if (!open) {\n setValue(valueProp);\n }\n }, [valueProp, open]);\n\n const handleEntering = () => {\n if (radioGroupRef.current != null) {\n radioGroupRef.current.focus();\n }\n };\n\n const handleCancel = () => {\n onClose();\n };\n\n const handleOk = () => {\n onClose(value);\n };\n\n const handleChange = (event) => {\n setValue(event.target.value);\n };\n\n // const clients = [\"Webasto\", \"FK\"];\n\n return (\n \n Move {devices.length} devices to client\n \n \n {clients.map((option) => (\n } label={option.name} />\n ))}\n \n \n \n \n \n \n \n );\n}\n\nconst MuiMenu = React.forwardRef((props, ref) => {\n return ;\n});\n\nconst MuiMenuItem = React.forwardRef((props, ref) => {\n return ;\n});\n\nconst DeviceOptionMenu = ({ devices }) => {\n const classes = useStyles();\n const [anchorEl, setAnchorEl] = React.useState(null);\n const [dialogOpen, setDialogOpen] = React.useState(false);\n const open = Boolean(anchorEl);\n\n const handleClick = (event) => {\n setAnchorEl(event.currentTarget);\n };\n const handleClose = () => {\n setAnchorEl(null);\n };\n const handleMove = () => {\n setAnchorEl(null);\n setDialogOpen(true);\n };\n const handleRemove = () => {\n setAnchorEl(null);\n setDialogOpen(true);\n };\n\n return (\n
\n \n \n \n Move {devices.length} devices\n \n \n Remove {devices.length} devices\n \n
\n {\n setDialogOpen(false);\n console.log(\"closing\", value);\n }}\n />\n
\n );\n};\n\nexport default function PrimarySearchAppBar(props) {\n const classes = useStyles();\n const [anchorEl, setAnchorEl] = React.useState(null);\n const [mobileMoreAnchorEl, setMobileMoreAnchorEl] = React.useState(null);\n\n const isMenuOpen = Boolean(anchorEl);\n const isMobileMenuOpen = Boolean(mobileMoreAnchorEl);\n\n const { projects, selectedProject, setSelectedProject, multiSelectionMode, setMultiSelectionMode } = props;\n const { selection, update } = useSelectionContext();\n\n const handleRefresh = () => {\n // Coloque aqui a lógica para atualizar a página\n console.log(\"Página atualizada!\");\n };\n\n const handleProfileMenuOpen = (event) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleMobileMenuClose = () => {\n setMobileMoreAnchorEl(null);\n };\n\n const handleMenuClose = () => {\n console.log(\"handleMenuClose\");\n setAnchorEl(null);\n handleMobileMenuClose();\n };\n\n const handleMobileMenuOpen = (event) => {\n setMobileMoreAnchorEl(event.currentTarget);\n };\n\n const menuId = \"primary-search-account-menu\";\n const renderMenu = (\n \n {projects.map((p) => (\n {\n console.log(\"set\", p);\n update([]);\n setSelectedProject(p);\n handleMenuClose();\n }}\n >\n {protocolToProject(p)}\n \n ))}\n \n );\n\n const mobileMenuId = \"primary-search-account-menu-mobile\";\n const renderMobileMenu = (\n \n \n \n \n \n \n \n

Messages

\n
\n \n \n \n \n \n \n

Notifications

\n
\n \n \n \n \n

Profile

\n
\n \n );\n\n return (\n
\n \n \n \n \n \n {false && (\n \n \n \n )}\n \n {props.title}\n \n {false && (\n
\n
\n \n
\n \n
\n )}\n {props.enableFilterDropdown && projects && projects.length > 1 && (\n \n )}\n\n {/* */}\n
\n \n
\n \n {\n setMultiSelectionMode((x) => !x);\n update([]);\n }}\n aria-label=\"enable multiple device selection\"\n color=\"inherit\"\n >\n {multiSelectionMode ? : }\n \n \n {/* \n \n \n \n \n \n \n */}\n
\n
\n \n \n \n
\n \n \n {renderMobileMenu}\n {renderMenu}\n
\n );\n}\n\nexport const SimpleAppbar = (props) => {\n const classes = useStyles();\n\n return (\n
\n \n \n \n {props.title}\n \n
\n {props.buttons?.map((b, idx) => (\n \n ))}\n \n \n
\n );\n};\n","import _ from \"lodash\";\nimport { deepOrange } from \"@material-ui/core/colors\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport React, { useEffect, useState } from \"react\";\nimport { useHistory, useParams } from \"react-router-dom\";\nimport DeviceControl from \"../components/DeviceControl/DeviceControl\";\nimport { Drawer as MenuLateral, Constants } from \"../components/Drawer\";\nimport AlertIcon from \"@material-ui/icons/ReportProblemOutlined\";\nimport Switch from \"@material-ui/core/Switch\";\nimport { parseISO, formatDistanceToNow } from \"date-fns\";\nimport differenceInMinutes from \"date-fns/differenceInMinutes\";\n//import Cookies from \"js-cookie\";\n\nimport { setpointToCelsius, celsiusToSetpoint } from \"../common/convert\";\n\nimport * as api from \"../api\";\nimport MenuTree from \"../components/MenuTree\";\nimport DeviceCard from \"../components/DeviceCard\";\nimport { createTheme, darken, lighten } from \"@material-ui/core/styles\";\nimport { usePaginatedQuery, useQuery } from \"react-query\";\nimport { DataGrid } from \"@material-ui/data-grid\";\n// import { XGrid as DataGrid } from \"@material-ui/x-grid\";\nimport constate from \"constate\";\nimport Drawer from \"@material-ui/core/Drawer\";\nimport { renderOnline } from \"./renderOnline\";\nimport { renderEnum } from \"./renderEnum\";\nimport TextField from \"@material-ui/core/TextField\";\nimport InputLabel from \"@material-ui/core/InputLabel\";\nimport FormHelperText from \"@material-ui/core/FormHelperText\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport Select from \"@material-ui/core/Select\";\nimport NativeSelect from \"@material-ui/core/NativeSelect\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport { InputAdornment } from \"@material-ui/core\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { useLayoutEffect } from \"react\";\nimport { useEnhancedEffect } from \"@material-ui/data-grid\";\nimport { difference } from \"../common/difference\";\nimport Button from \"@material-ui/core/Button\";\nimport DeleteIcon from \"@material-ui/icons/Delete\";\nimport CloudUploadIcon from \"@material-ui/icons/CloudUpload\";\nimport KeyboardVoiceIcon from \"@material-ui/icons/KeyboardVoice\";\nimport Icon from \"@material-ui/core/Icon\";\nimport SaveIcon from \"@material-ui/icons/Save\";\nimport AppBar from \"@material-ui/core/AppBar\";\nimport Toolbar from \"@material-ui/core/Toolbar\";\nimport Typography from \"@material-ui/core/Typography\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport MenuIcon from \"@material-ui/icons/Menu\";\n\nimport DeviceAppBar from \"../components/DevicesAppBar\";\n\nimport clsx from \"clsx\";\nimport { protocolToProject } from \"../common/projects\";\n\nimport { SelectionProvider, useSelectionContext } from \"../hooks/useSelectionContext\";\nimport { useAuthContext } from \"../hooks/useAuth\";\n\n/*\nclient\ncreated_at\nparams_changed_at\nprotocol\nread_params\nserial\nupdated_at\nwrite_params*/\n\nlet baseColumns = [\n {\n field: \"isOnline\",\n headerName: \"Status\",\n renderCell: renderOnline,\n flex: 1,\n },\n // {\n // field: \"lastRead\",\n // headerName: \"Device last seen\",\n // flex: 1,\n // },\n // {\n // field: \"readPending\",\n // headerName: \"Sync\",\n // flex: 1,\n // },\n {\n field: \"id\",\n headerName: \"Serial\",\n flex: 1,\n },\n // {\n // field: \"lastChange\",\n // headerName: \"Last change\",\n // flex: 1,\n // },\n];\n\nconst optionsOnOff = [\n { value: 0, icon: \"Level_0of1\", label: \"Desl.\" },\n { value: 1, icon: \"Level_1of1\", label: \"Ligado\" },\n];\n\nconst options3levels = [\n { value: 0, icon: \"Level_0of2\", label: \"Desl.\" },\n { value: 1, icon: \"Level_1of2\", label: \"Média\" },\n { value: 2, icon: \"Level_2of2\", label: \"Alta\" },\n];\n\nconst options4levels = [\n { value: 0, icon: \"Level_0of3\", label: \"Desl.\" },\n { value: 1, icon: \"Level_1of3\", label: \"Baixa\" },\n { value: 2, icon: \"Level_2of3\", label: \"Média\" },\n { value: 3, icon: \"Level_3of3\", label: \"Alta\" },\n];\n\n// const speedParser = (value) => {\n// // return value;\n// const result = options4levels.find((entry) => entry.value === value);\n// console.log(\"speedparser\", value, result);\n// return result;\n// };\n\n// const ParamText = ({ field, value }) => {\n// return (\n// \n// );\n// };\n\nconst ParamNumber = ({ field, headerName, value, unit, onChange, readOnly }) => {\n const classes = useStyles();\n\n let InputProps = {\n readOnly: readOnly, // user must click to enable editing..?\n };\n if (unit) {\n InputProps[\"endAdornment\"] = (\n \n {unit}\n \n );\n }\n // TODO: if min max... ?\n\n return (\n onChange(field, event)}\n InputProps={InputProps}\n // InputLabelProps={\n // {\n // // shrink: true,\n // }\n // }\n // InputProps={{ inputProps: { min: 0, max: 10 } }}\n />\n );\n};\n\nconst ParamEnum = ({ field, headerName, value, options, onChange }) => {\n const classes = useStyles();\n let valueNumber = value != null ? value : -1;\n\n // if (value != null && typeof value == \"object\") {\n // valueNumber = value.value;\n // }\n\n return (\n \n {headerName}\n \n \n );\n};\n\nconst valueFormatter = (x) => {\n // console.log(\"valueformatter\", x.value, options3levels[x.value]);\n return optionsOnOff[x.value];\n};\n\nconst valueParser = (x) => {\n console.log(\"valueParser\", x);\n return x;\n};\n\n// prettier-ignore\nconst XXXsystemParameters = [\n { field: \"Setpoint\", renderSide: ParamNumber, headerName: \"Setpoint\", unit: \"°C\", kind: \"number\", format: (n) => Math.round(setpointToCelsius(n)), output: (n) => celsiusToSetpoint(n)}, // TODO: max min etc?// + \" °C\" \n // { field: \"Tensao_da_Bateria\", renderSide: ParamNumber, headerName: \"Bateria\", unit: \"V\", readOnly: true, kind: \"number\", format: (v) => (v/10)},\n { field: \"Limpador_Dianteiro\", valueParser: valueParser, renderSide: ParamEnum, headerName: \"Limp. Dianteiro\", kind: \"select\", renderCell: renderEnum, valueOptions: optionsOnOff},\n { field: \"Limpador_Traseiro\", renderSide: ParamEnum, headerName: \"Limp. Traseiro\" , kind: \"select\", renderCell: renderEnum, valueOptions: optionsOnOff},\n { field: \"Esguicho_de_Agua\", renderSide: ParamEnum, headerName: \"Esguicho de Água\" , kind: \"select\", renderCell: renderEnum, valueOptions: optionsOnOff},\n { field: \"Farol_Dianteiro\", renderSide: ParamEnum, headerName: \"Farol Dianteiro\" , kind: \"select\", renderCell: renderEnum, valueOptions: options3levels}, // TODO: na verdade depende de um parametro\n { field: \"Farol_Traseiro\", renderSide: ParamEnum, headerName: \"Farol Traseiro\" , kind: \"select\", renderCell: renderEnum, valueOptions: options3levels},\n { field: \"Velocidade_da_Ventilacao\", renderSide: ParamEnum, headerName: \"Ventilação\", kind: \"select\", renderCell: renderEnum, valueOptions: options4levels},\n];\n\n// prettier-ignore\nconst systemParameters = [\n { kind: \"number\", renderSide: ParamNumber, field: \"Setpoint01\", headerName: \"Setpoint 01\" },\n { kind: \"number\", renderSide: ParamNumber, field: \"Setpoint02\", headerName: \"Setpoint 02\" },\n { kind: \"number\", renderSide: ParamNumber, field: \"ValorMaximoDoSetpoint\", headerName: \"Valor maximo do setpoint\" },\n { kind: \"number\", renderSide: ParamNumber, field: \"ValorMinimoDoSetpoint\", headerName: \"Valor minimo do setpoint\" },\n { kind: \"number\", renderSide: ParamNumber, field: \"OffSetSensorCamara1\", headerName: \"Off-set sensor câmara 1\" },\n // { kind: \"number\", renderSide: ParamNumber, field: \"OffsetSensorDeSuccao\", headerName: \"Offset sensor de sucção\" },\n // { kind: \"number\", renderSide: ParamNumber, field: \"OffSetSensorCamara2\", headerName: \"Off-set sensor câmara 2\" },\n // { kind: \"number\", renderSide: ParamNumber, field: \"OffSetDoSensorDeSerpentina\", headerName: \"Off-set do sensor de serpentina\" },\n { kind: \"select\", renderSide: ParamEnum, renderCell: renderEnum, valueOptions: optionsOnOff, field: \"HabilitaSensorDeSerpentina\", headerName: \"Habilita Sensor de serpentina\" },\n { kind: \"select\", renderSide: ParamEnum, renderCell: renderEnum, valueOptions: optionsOnOff, field: \"HabilitaSensorDePorta\", headerName: \"Habilita sensor de porta\" },\n { kind: \"select\", renderSide: ParamEnum, renderCell: renderEnum, valueOptions: optionsOnOff, field: \"HabilitaSensorTemperaturaCamara2\", headerName: \"Habilita sensor temperatura camara 2\" },\n { kind: \"select\", renderSide: ParamEnum, renderCell: renderEnum, valueOptions: optionsOnOff, field: \"HabilitaLogSomenteApolloEFlex\", headerName: \"Habilita log\" },\n];\n\nconst convert = (rows) => {\n let output = [];\n\n for (const device of rows) {\n const { serial, protocol, updated_at, client, read_params, write_params, params_changed_at, device_accessed_at } = device;\n\n const lastChange = formatDistanceToNow(parseISO(params_changed_at));\n const lastRead = formatDistanceToNow(parseISO(device_accessed_at));\n const isOnline = differenceInMinutes(new Date(), parseISO(device_accessed_at)) <= 1 ? \"Online\" : \"Offline\"; // todo: parametrizar?\n const readPending = write_params && write_params.length > 0 ? \"Read pending\" : \"Sync\"; // Read is pending when there are write_params\n let formattedRow = { id: serial, protocol, isOnline, lastChange, lastRead, readPending: readPending };\n let params;\n\n // let setpoint = \"Not avail.\";\n if (read_params && read_params.length > 0) {\n try {\n params = JSON.parse(read_params);\n for (const { field, headerName, editable, format, valueOptions } of systemParameters) {\n let value = \"Not avail.\";\n let fieldPresent = field;\n\n // // List of possible field names: stop at\n // if (Array.isArray(field)) {\n // for (const alt of field) {\n // if (alt in params) {\n // fieldPresent = alt;\n // continue;\n // }\n // }\n // } else {\n // fieldPresent = field;\n // }\n if (fieldPresent && fieldPresent in params) {\n const numericValue = params[fieldPresent];\n if (valueOptions) {\n // TODO: mudar pra inteiro novamente na escrita\n if (numericValue >= 0 && numericValue < valueOptions.length) {\n value = valueOptions[numericValue];\n } else {\n value = \"Out of range\"; // Cannot index valueOptions with value\n }\n } else if (format) {\n value = format(numericValue);\n } else {\n value = numericValue;\n }\n }\n formattedRow[fieldPresent] = value;\n }\n // if (\"Setpoint\" in params) {\n // setpoint = Math.round(setpointToCelsius(params[\"Setpoint\"])) + \"°C\";\n // }\n } catch (error) {\n console.log(\"Could not parse json\", read_params);\n }\n }\n // console.log(JSON.stringify(device, null, 4));\n\n // output.push({ original: params, formatted: formattedRow });\n output.push(formattedRow);\n }\n\n return output;\n};\n\nconst DeviceList = ({ devices, onlineOnly, multiSelectionMode }) => {\n // const [selectionModel, setSelectionModel] = React.useState([])\n const { selection, update } = useSelectionContext();\n // console.table(rows);\n // return
{JSON.stringify(cleanData)}
;\n let columns = [...baseColumns];\n for (const { field, headerName, valueOptions, valueParser, valueFormatter, editable, renderCell, readOnly } of systemParameters) {\n const columnConfig = { flex: 1, field, headerName, editable, renderCell, readOnly, valueParser, valueFormatter };\n if (valueOptions) {\n columnConfig.type = \"singleSelect\";\n columnConfig.valueOptions = valueOptions;\n // columnConfig.valueParser = valueParser;\n }\n columns.push(columnConfig);\n }\n\n // console.log({ columns });\n\n // const handleChange = (event) => {\n // setState({ ...state, [event.target.name]: event.target.checked });\n // };\n\n const filterModel = {\n items: [{ columnField: \"isOnline\", operatorValue: \"equals\", value: \"Online\" }],\n };\n const emptyFilter = {\n items: [],\n };\n const activeFilters = onlineOnly ? filterModel : emptyFilter;\n\n const rows = devices;\n console.log({ rows, columns });\n // const rows = convert(data);\n return (\n
\n `super-app-theme--${params.getValue(params.id, \"isOnline\")}`}\n />\n
\n );\n};\n\nconst DeviceListLoader = ({ isLoading, isError, error, devices, selectedStatus, multiSelectionMode }) => {\n const classes = useStyles();\n\n return (\n
\n {isLoading ? (\n
Loading...
\n ) : isError ? (\n
Error: {error.message}
\n ) : (\n
\n {/* \n \n \n Project\n \n \n \n \n \n Status\n \n \n \n */}\n\n
\n \n
\n
\n )}\n
\n );\n};\n\nconst toGrid = (items, config) => {\n const { columns } = config;\n let rows = [];\n\n for (let i = 0; i < items.length; i += columns) {\n rows.push(\n \n {items.slice(i, i + columns).map((item, j) => (\n \n {item}\n \n ))}\n \n );\n }\n\n return rows;\n};\n\nconst BulkDeviceEditor = ({ devices, selection, close }) => {\n const multiple = selection && selection.length > 1;\n const classes = useStyles();\n\n // const [name, setName] = useState(17);\n // const handleChange = (event) => {\n // setName(event.target.value);\n // };\n\n const [oldParams, setOldParams] = useState({});\n const [newParams, setNewParams] = useState({});\n const [deviceSelected, setDeviceSelected] = useState(null);\n const [diff, setDiff] = useState({});\n\n // const [fields, setState] = React.useState({ });\n\n const handleChange = (field, event) => {\n console.log(\"handleChange\", field, _.get(event, \"target.value\"));\n const newVal = _.get(event, \"target.value\");\n if (newVal != null) {\n setNewParams({ ...newParams, [field]: newVal });\n }\n };\n\n useEffect(() => {\n const d = devices.find((d) => d.id === selection[0]);\n setDeviceSelected({ ...d });\n }, [selection]);\n\n useEffect(() => {\n // console.log(\"newParams\", JSON.stringify(newParams, null, 4));\n setDiff(difference(oldParams, newParams));\n // console.log(\"diff\", JSON.stringify(difference(oldParams, newParams), null, 4));\n }, [newParams]);\n\n useEffect(() => {\n let obj = {};\n for (const { field } of systemParameters) {\n let value = _.get(deviceSelected, field, null);\n obj[field] = value == null || typeof value == \"number\" ? value : value.value;\n }\n // console.log(\"obj is \", obj);\n setNewParams(obj);\n setOldParams(obj); // those wont change when inputs change\n }, [deviceSelected]); // TODO: pensar bem quando seria esta atualizacao\n\n if (multiple) {\n return (\n
\n

--

\n
\n );\n }\n\n if (!selection || selection.length == 0) {\n return
no selection selected
;\n }\n\n // console.log(\"selection is here\", devices, selection, deviceSelected, devices[0]);\n\n let parameters = [];\n for (const { field, renderSide: Param, headerName, editable, format, valueOptions, unit, readOnly, output } of systemParameters) {\n // let value = multiple ? \"--\" : _.get(deviceSelected, field, \"Not avail\"); //devices[0]; // devices[deviceSelected]; //devices.find((device) => device.id === selection[0]); //_.get(selection[0], field, \"Not avail.\");\n // const Param = renderSide;\n parameters.push(\n \n );\n }\n\n return (\n
\n

{selection.length === 1 ? `Device ${selection[0]}` : `${selection.length} devices selected`}

\n {parameters && parameters.length > 0 && (\n
\n {toGrid(parameters, { columns: 2 })}\n
\n )}\n {/*
{JSON.stringify(devices).slice(0, 100)}
\n
{JSON.stringify(selection).slice(0, 100)}
*/}\n }\n onClick={() => {\n const serial = deviceSelected.id;\n let paramsWrite = {};\n for (const key of _.keys(diff)) {\n if (key === \"Setpoint\") {\n paramsWrite[key] = celsiusToSetpoint(parseInt(diff[key])); // TODO: deixar... generico... com tabela..\n } else {\n paramsWrite[key] = parseInt(diff[key]); // TODO: other conversion? use table?\n }\n }\n api.remoteWrite(\"remotewrite\", serial, paramsWrite);\n console.log(\"remoteWrite\", serial, paramsWrite);\n }}\n >\n Save\n \n \n
\n );\n};\n\nconst DISABLE_APP_BAR_FILTER = true;\n\nconst Content = () => {\n const [page, setPage] = React.useState(0);\n\n const { selection, update } = useSelectionContext();\n const [rows, setRows] = React.useState([]);\n const [selectedProject, setSelectedProject] = useState(null);\n const [selectedStatus, setSelectedStatus] = React.useState(\"all\");\n const [multiSelectionMode, setMultiSelectionMode] = React.useState(false);\n const { auth } = useAuthContext();\n\n const grouped = _.groupBy(rows, \"protocol\");\n const filtered = DISABLE_APP_BAR_FILTER ? rows : _.filter(rows, [\"protocol\", selectedProject]);\n\n // console.log(\"filtered\", filtered);\n\n const classes = useStyles();\n\n const { isLoading, isError, error, resolvedData } = usePaginatedQuery([\"devices\", page], api.devicesList, {\n refetchInterval: 3000,\n refetchIntervalInBackground: true, // tab in background\n });\n\n const sample_row = {\n // Esguicho_de_Agua: { value: 0, icon: \"Level_0of1\", label: \"Desl.\" },\n // Farol_Dianteiro: { value: 0, icon: \"Level_0of2\", label: \"Desl.\" },\n // Farol_Traseiro: { value: 0, icon: \"Level_0of2\", label: \"Desl.\" },\n // Limpador_Dianteiro: { value: 0, icon: \"Level_0of1\", label: \"Desl.\" },\n // Limpador_Traseiro: { value: 0, icon: \"Level_0of1\", label: \"Desl.\" },\n Setpoint01: 33,\n Setpoint02: 15,\n ValorMaximoDoSetpoint: 30,\n ValorMinimoDoSetpoint: 30,\n OffSetSensorCamara1: 30,\n OffsetSensorDeSuccao: 30,\n OffSetSensorCamara2: 30,\n OffSetDoSensorDeSerpentina: 30,\n HabilitaSensorDeSerpentina: { value: 1, icon: \"Level_0of1\", label: \"Lig.\" },\n HabilitaSensorDePorta: { value: 0, icon: \"Level_0of1\", label: \"Desl.\" },\n HabilitaSensorTemperaturaCamara2: { value: 0, icon: \"Level_0of1\", label: \"Desl.\" },\n HabilitaSensorDeSerpentina: { value: 1, icon: \"Level_0of1\", label: \"Lig.\" },\n HabilitaLogSomenteApolloEFlex: { value: 1, icon: \"Level_0of1\", label: \"Lig.\" },\n // Velocidade_da_Ventilacao: { value: 0, icon: \"Level_0of3\", label: \"Desl.\" },\n\n // metadata\n isOnline: \"Online\",\n lastChange: \"about 2 months\",\n lastRead: \"about 2 months\",\n protocol: \"\",\n readPending: \"Sync\",\n };\n\n // const MOCK_FK_ROWS = _.range(0, 10).map((n) => ({\n // ...sample_row,\n // id: `Disp. ${n + 1}`,\n // Setpoint01: _.random(15, 60),\n // Setpoint02: _.random(15, 60),\n // ValorMaximoDoSetpoint: _.random(15, 60),\n // ValorMinimoDoSetpoint: _.random(15, 60),\n // OffSetSensorCamara1: _.random(15, 60),\n // OffsetSensorDeSuccao: _.random(15, 60),\n // OffSetSensorCamara2: _.random(15, 60),\n // OffSetDoSensorDeSerpentina: _.random(15, 60),\n // isOnline: _.random(100) > 70 ? \"Online\" : \"Offline\",\n // }));\n\n useEffect(() => {\n if (!isLoading && !isError) {\n // console.log(\"ok now\", convert(resolvedData.results));\n // const { original, formatted } = convert(resolvedData.results);\n console.log(\"data from server\", resolvedData.results);\n const rows = convert(resolvedData.results);\n setRows(rows);\n // setRows(MOCK_FK_ROWS); // use rows from server\n if (selectedProject == null) {\n setSelectedProject(_.keys(grouped)[0]); // todo: not that good ?\n }\n } else {\n // console.log(\"isLoading\", isLoading, isError);\n setRows([]);\n }\n }, [isLoading, isError, resolvedData, selectedProject]);\n\n // useEffect(() => {\n // console.log(\"rows\", rows);\n // }, [rows]);\n\n const open = selection && selection.length > 0;\n\n return (\n <>\n \n \n
\n \n
\n \n
\n update([])}\n classes={{\n paper: classes.editorDrawerPaper,\n }}\n >\n update([])} />\n \n
\n \n );\n};\n\nexport default function Device() {\n // const { devices, selected } = React.useContext(DevicesContext);\n const classes = useStyles();\n let { serial } = useParams();\n\n return (\n
\n \n \n \n \n \n
\n );\n}\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n \"& .super-app-theme--Online\": {\n backgroundColor: theme.status.online,\n \"&:hover\": {\n backgroundColor: lighten(theme.status.online, 0.1),\n },\n },\n },\n appBar: {\n width: `calc(100% - ${Constants.drawerWidth}px)`,\n marginLeft: Constants.drawerWidth,\n },\n drawer: {\n width: Constants.drawerWidth,\n flexShrink: 0,\n },\n multiControl: {\n width: Constants.editorWidth,\n flexShrink: 0,\n\n // maxWidth: 400,\n // \"& .MuiPaper-root\": {\n // zIndex: 10000000, // breaks selects...\n // },\n },\n deviceListLoader: {\n margin: theme.spacing(2),\n },\n drawerPaper: {\n width: Constants.editorWidth,\n backgroundColor: \"#172026\",\n color: \"white\",\n },\n editorDrawerPaper: {\n width: Constants.editorWidth,\n },\n // necessary for content to be below app bar\n toolbar: theme.mixins.toolbar,\n content: {\n flexGrow: 1,\n backgroundColor: theme.palette.background.default,\n // padding: theme.spacing(3),\n transition: theme.transitions.create(\"margin\", {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n marginRight: -Constants.editorWidth,\n },\n contentShift: {\n transition: theme.transitions.create(\"margin\", {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n marginRight: 0,\n },\n orange: {\n color: theme.palette.getContrastText(deepOrange[500]),\n backgroundColor: deepOrange[500],\n },\n title: {\n fontSize: 18,\n },\n subtitle: {\n fontSize: 14,\n color: theme.palette.grey[400],\n },\n menuHeader: {\n color: \"#bbb\",\n // fontSize: 14,\n marginTop: theme.spacing(1),\n marginLeft: theme.spacing(2),\n fontWeight: \"bold\",\n },\n form: {\n \"& .MuiTextField-root\": {\n margin: theme.spacing(1),\n // width: \"100%\",\n },\n },\n formControl: {\n // margin: theme.spacing(1),\n // minWidth: 240,\n },\n selectAdornment: {\n marginRight: 6, //theme.spacing(1), its 8\n },\n button: {\n marginTop: theme.spacing(2),\n },\n}));\n","import { Box, Button, CardActionArea } from \"@material-ui/core\";\nimport React from \"react\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Card from \"@material-ui/core/Card\";\nimport CardActions from \"@material-ui/core/CardActions\";\nimport CardContent from \"@material-ui/core/CardContent\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { Link as RouterLink } from \"react-router-dom\";\n\nconst makeLinkOpen = (client) => \"/client/\" + client;\n\nconst useStyles = makeStyles({\n root: {\n minWidth: 275,\n },\n bullet: {\n display: \"inline-block\",\n margin: \"0 2px\",\n transform: \"scale(0.8)\",\n },\n title: {\n fontSize: 14,\n },\n pos: {\n marginBottom: 12,\n },\n});\n\nexport default function ClientCard({ id, slug, name, cpf_cnpj, oem, bloqueado, info }) {\n const { devices, children } = info;\n const classes = useStyles();\n return (\n \n \n \n \n {name}\n \n CPF/CNPJ: {cpf_cnpj}\n OEM: {oem ? \"Sim\" : \"Nao\"}\n Bloqueado: {bloqueado ? \"Sim\" : \"Nao\"}\n {devices > 0 ? `${devices} devices` : \"No devices\"}\n {children > 0 ? `${children} clients` : \"No clients\"}\n \n \n \n );\n}\n","import Breadcrumbs from \"@material-ui/core/Breadcrumbs\";\nimport Link from \"@material-ui/core/Link\";\nimport NavigateNextIcon from \"@material-ui/icons/NavigateNext\";\nimport React from \"react\";\nimport { Link as RouterLink } from \"react-router-dom\";\nimport useClient from \"../hooks/useClient\";\n\nexport default () => {\n const { loading, error, path, dir } = useClient();\n\n if (loading) return null;\n if (error) return
{error}
;\n\n const mklink = (target) => {\n return target == null ? `/client` : `/client/${target}`;\n };\n\n return (\n } aria-label=\"breadcrumb\">\n {path.map((clientSlug, idx) => (\n \n {dir[clientSlug][0].name || clientSlug}\n \n ))}\n \n );\n};\n","import _ from \"lodash\";\nimport { deepOrange } from \"@material-ui/core/colors\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport React, { useEffect, useState } from \"react\";\nimport { useHistory, useParams } from \"react-router-dom\";\nimport DeviceControl from \"../components/DeviceControl/DeviceControl\";\nimport { Drawer as MenuLateral, Constants } from \"../components/Drawer\";\nimport AlertIcon from \"@material-ui/icons/ReportProblemOutlined\";\nimport Switch from \"@material-ui/core/Switch\";\nimport { parseISO, formatDistanceToNow } from \"date-fns\";\nimport differenceInMinutes from \"date-fns/differenceInMinutes\";\n//import Cookies from \"js-cookie\";\n\nimport { setpointToCelsius, celsiusToSetpoint } from \"../common/convert\";\nimport NavigateNextIcon from \"@material-ui/icons/NavigateNext\";\n\nimport * as api from \"../api\";\nimport env from \"../env\";\nimport MenuTree from \"../components/MenuTree\";\nimport DeviceCard from \"../components/DeviceCard\";\nimport { createTheme, darken, lighten } from \"@material-ui/core/styles\";\nimport { usePaginatedQuery, useQuery } from \"react-query\";\nimport { DataGrid } from \"@material-ui/data-grid\";\n// import { XGrid as DataGrid } from \"@material-ui/x-grid\";\nimport constate from \"constate\";\nimport Drawer from \"@material-ui/core/Drawer\";\nimport { renderOnline } from \"./renderOnline\";\nimport { renderEnum } from \"./renderEnum\";\nimport TextField from \"@material-ui/core/TextField\";\nimport InputLabel from \"@material-ui/core/InputLabel\";\nimport FormHelperText from \"@material-ui/core/FormHelperText\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport Select from \"@material-ui/core/Select\";\nimport NativeSelect from \"@material-ui/core/NativeSelect\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport { Box, InputAdornment } from \"@material-ui/core\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { useLayoutEffect } from \"react\";\nimport { useEnhancedEffect } from \"@material-ui/data-grid\";\nimport { difference } from \"../common/difference\";\nimport Button from \"@material-ui/core/Button\";\nimport DeleteIcon from \"@material-ui/icons/Delete\";\nimport CloudUploadIcon from \"@material-ui/icons/CloudUpload\";\nimport KeyboardVoiceIcon from \"@material-ui/icons/KeyboardVoice\";\nimport Icon from \"@material-ui/core/Icon\";\nimport SaveIcon from \"@material-ui/icons/Save\";\nimport AppBar from \"@material-ui/core/AppBar\";\nimport Toolbar from \"@material-ui/core/Toolbar\";\nimport Typography from \"@material-ui/core/Typography\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport MenuIcon from \"@material-ui/icons/Menu\";\n\nimport Breadcrumbs from \"@material-ui/core/Breadcrumbs\";\nimport Link from \"@material-ui/core/Link\";\nimport { Link as RouterLink } from \"react-router-dom\";\n\nimport DeviceAppBar from \"../components/DevicesAppBar\";\n\nimport clsx from \"clsx\";\nimport { protocolToProject } from \"../common/projects\";\n\nimport { SelectionProvider, useSelectionContext } from \"../hooks/useSelectionContext\";\nimport { useAuthContext } from \"../hooks/useAuth\";\nimport ClientCard, { AddCard } from \"../components/ClientCard\";\nimport ClientHierarchyBreadcrumbs from \"../components/ClientBreadcrumbs\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport useClient from \"../hooks/useClient\";\n/*\nclient\ncreated_at\nparams_changed_at\nprotocol\nread_params\nserial\nupdated_at\nwrite_params*/\n\nlet baseColumns = [\n {\n field: \"isOnline\",\n headerName: \"Status\",\n renderCell: renderOnline,\n flex: 1,\n },\n // {\n // field: \"lastRead\",\n // headerName: \"Device last seen\",\n // flex: 1,\n // },\n // {\n // field: \"readPending\",\n // headerName: \"Sync\",\n // flex: 1,\n // },\n {\n field: \"id\",\n headerName: \"Serial\",\n flex: 1,\n },\n // {\n // field: \"lastChange\",\n // headerName: \"Last change\",\n // flex: 1,\n // },\n];\n\nconst optionsOnOff = [\n { value: 0, icon: \"Level_0of1\", label: \"Desl.\" },\n { value: 1, icon: \"Level_1of1\", label: \"Ligado\" },\n];\n\nconst options3levels = [\n { value: 0, icon: \"Level_0of2\", label: \"Desl.\" },\n { value: 1, icon: \"Level_1of2\", label: \"Média\" },\n { value: 2, icon: \"Level_2of2\", label: \"Alta\" },\n];\n\nconst options4levels = [\n { value: 0, icon: \"Level_0of3\", label: \"Desl.\" },\n { value: 1, icon: \"Level_1of3\", label: \"Baixa\" },\n { value: 2, icon: \"Level_2of3\", label: \"Média\" },\n { value: 3, icon: \"Level_3of3\", label: \"Alta\" },\n];\n\n// const speedParser = (value) => {\n// // return value;\n// const result = options4levels.find((entry) => entry.value === value);\n// console.log(\"speedparser\", value, result);\n// return result;\n// };\n\n// const ParamText = ({ field, value }) => {\n// return (\n// \n// );\n// };\n\nconst ParamNumber = ({ field, headerName, value, unit, onChange, readOnly }) => {\n const classes = useStyles();\n\n let InputProps = {\n readOnly: readOnly, // user must click to enable editing..?\n };\n if (unit) {\n InputProps[\"endAdornment\"] = (\n \n {unit}\n \n );\n }\n // TODO: if min max... ?\n\n return (\n onChange(field, event)}\n InputProps={InputProps}\n // InputLabelProps={\n // {\n // // shrink: true,\n // }\n // }\n // InputProps={{ inputProps: { min: 0, max: 10 } }}\n />\n );\n};\n\nconst ParamEnum = ({ field, headerName, value, options, onChange }) => {\n const classes = useStyles();\n let valueNumber = value != null ? value : -1;\n\n // if (value != null && typeof value == \"object\") {\n // valueNumber = value.value;\n // }\n\n return (\n \n {headerName}\n \n \n );\n};\n\nconst valueFormatter = (x) => {\n // console.log(\"valueformatter\", x.value, options3levels[x.value]);\n return optionsOnOff[x.value];\n};\n\nconst valueParser = (x) => {\n console.log(\"valueParser\", x);\n return x;\n};\n\n// prettier-ignore\nconst systemParameters = [\n { field: \"Setpoint\", renderSide: ParamNumber, headerName: \"Setpoint\", unit: \"°C\", kind: \"number\", format: (n) => Math.round(setpointToCelsius(n)), output: (n) => celsiusToSetpoint(n)}, // TODO: max min etc?// + \" °C\" \n // { field: \"Tensao_da_Bateria\", renderSide: ParamNumber, headerName: \"Bateria\", unit: \"V\", readOnly: true, kind: \"number\", format: (v) => (v/10)},\n { field: \"Limpador_Dianteiro\", valueParser: valueParser, renderSide: ParamEnum, headerName: \"Limp. Dianteiro\", kind: \"select\", renderCell: renderEnum, valueOptions: optionsOnOff},\n { field: \"Limpador_Traseiro\", renderSide: ParamEnum, headerName: \"Limp. Traseiro\" , kind: \"select\", renderCell: renderEnum, valueOptions: optionsOnOff},\n { field: \"Esguicho_de_Agua\", renderSide: ParamEnum, headerName: \"Esguicho de Água\" , kind: \"select\", renderCell: renderEnum, valueOptions: optionsOnOff},\n { field: \"Farol_Dianteiro\", renderSide: ParamEnum, headerName: \"Farol Dianteiro\" , kind: \"select\", renderCell: renderEnum, valueOptions: options3levels}, // TODO: na verdade depende de um parametro\n { field: \"Farol_Traseiro\", renderSide: ParamEnum, headerName: \"Farol Traseiro\" , kind: \"select\", renderCell: renderEnum, valueOptions: options3levels},\n { field: \"Velocidade_da_Ventilacao\", renderSide: ParamEnum, headerName: \"Ventilação\", kind: \"select\", renderCell: renderEnum, valueOptions: options4levels},\n];\n\nconst convert = (rows) => {\n let output = [];\n\n for (const device of rows) {\n const { serial, protocol, updated_at, client, read_params, write_params, params_changed_at, device_accessed_at } = device;\n\n const lastChange = formatDistanceToNow(parseISO(params_changed_at));\n const lastRead = formatDistanceToNow(parseISO(device_accessed_at));\n const isOnline = differenceInMinutes(new Date(), parseISO(device_accessed_at)) <= 1 ? \"Online\" : \"Offline\"; // todo: parametrizar?\n const readPending = write_params && write_params.length > 0 ? \"Read pending\" : \"Sync\"; // Read is pending when there are write_params\n let formattedRow = { id: serial, protocol, isOnline, lastChange, lastRead, readPending: readPending };\n let params;\n\n // let setpoint = \"Not avail.\";\n if (read_params && read_params.length > 0) {\n try {\n params = JSON.parse(read_params);\n for (const { field, headerName, editable, format, valueOptions } of systemParameters) {\n let value = \"Not avail.\";\n let fieldPresent = field;\n\n // // List of possible field names: stop at\n // if (Array.isArray(field)) {\n // for (const alt of field) {\n // if (alt in params) {\n // fieldPresent = alt;\n // continue;\n // }\n // }\n // } else {\n // fieldPresent = field;\n // }\n if (fieldPresent && fieldPresent in params) {\n const numericValue = params[fieldPresent];\n if (valueOptions) {\n // TODO: mudar pra inteiro novamente na escrita\n if (numericValue >= 0 && numericValue < valueOptions.length) {\n value = valueOptions[numericValue];\n } else {\n value = \"Out of range\"; // Cannot index valueOptions with value\n }\n } else if (format) {\n value = format(numericValue);\n } else {\n value = numericValue;\n }\n }\n formattedRow[fieldPresent] = value;\n }\n // if (\"Setpoint\" in params) {\n // setpoint = Math.round(setpointToCelsius(params[\"Setpoint\"])) + \"°C\";\n // }\n } catch (error) {\n console.log(\"Could not parse json\", read_params);\n }\n }\n // console.log(JSON.stringify(device, null, 4));\n\n // output.push({ original: params, formatted: formattedRow });\n output.push(formattedRow);\n }\n\n return output;\n};\n\nconst DeviceList = ({ devices, onlineOnly, multiSelectionMode }) => {\n // const [selectionModel, setSelectionModel] = React.useState([])\n const { selection, update } = useSelectionContext();\n // console.table(rows);\n // return
{JSON.stringify(cleanData)}
;\n let columns = [...baseColumns];\n for (const { field, headerName, valueOptions, valueParser, valueFormatter, editable, renderCell, readOnly } of systemParameters) {\n const columnConfig = { flex: 1, field, headerName, editable, renderCell, readOnly, valueParser, valueFormatter };\n if (valueOptions) {\n columnConfig.type = \"singleSelect\";\n columnConfig.valueOptions = valueOptions;\n // columnConfig.valueParser = valueParser;\n }\n columns.push(columnConfig);\n }\n\n // const handleChange = (event) => {\n // setState({ ...state, [event.target.name]: event.target.checked });\n // };\n\n const filterModel = {\n items: [{ columnField: \"isOnline\", operatorValue: \"equals\", value: \"Online\" }],\n };\n const emptyFilter = {\n items: [],\n };\n const activeFilters = onlineOnly ? filterModel : emptyFilter;\n\n const rows = devices;\n // const rows = convert(data);\n return (\n
\n `super-app-theme--${params.getValue(params.id, \"isOnline\")}`}\n />\n
\n );\n};\n\nconst DeviceListLoader = ({ isLoading, isError, error, devices, selectedStatus, multiSelectionMode }) => {\n const classes = useStyles();\n\n return (\n
\n {isLoading ? (\n
Loading...
\n ) : isError ? (\n
Error: {error.message}
\n ) : (\n
\n {/* \n \n \n Project\n \n \n \n \n \n Status\n \n \n \n */}\n\n
\n \n
\n
\n )}\n
\n );\n};\n\nconst toGrid = (items, config) => {\n const { columns } = config;\n let rows = [];\n\n for (let i = 0; i < items.length; i += columns) {\n rows.push(\n \n {items.slice(i, i + columns).map((item, j) => (\n \n {item}\n \n ))}\n \n );\n }\n\n return rows;\n};\n\nconst BulkDeviceEditor = ({ devices, selection, close }) => {\n const multiple = selection && selection.length > 1;\n const classes = useStyles();\n\n // const [name, setName] = useState(17);\n // const handleChange = (event) => {\n // setName(event.target.value);\n // };\n\n const [oldParams, setOldParams] = useState({});\n const [newParams, setNewParams] = useState({});\n const [deviceSelected, setDeviceSelected] = useState(null);\n const [diff, setDiff] = useState({});\n\n // const [fields, setState] = React.useState({ });\n\n const handleChange = (field, event) => {\n console.log(\"handleChange\", field, _.get(event, \"target.value\"));\n const newVal = _.get(event, \"target.value\");\n if (newVal != null) {\n setNewParams({ ...newParams, [field]: newVal });\n }\n };\n\n useEffect(() => {\n const d = devices.find((d) => d.id === selection[0]);\n setDeviceSelected({ ...d });\n }, [selection]);\n\n useEffect(() => {\n // console.log(\"newParams\", JSON.stringify(newParams, null, 4));\n setDiff(difference(oldParams, newParams));\n // console.log(\"diff\", JSON.stringify(difference(oldParams, newParams), null, 4));\n }, [newParams]);\n\n useEffect(() => {\n let obj = {};\n for (const { field } of systemParameters) {\n let value = _.get(deviceSelected, field, null);\n obj[field] = value == null || typeof value == \"number\" ? value : value.value;\n }\n // console.log(\"obj is \", obj);\n setNewParams(obj);\n setOldParams(obj); // those wont change when inputs change\n }, [deviceSelected]); // TODO: pensar bem quando seria esta atualizacao\n\n if (multiple) {\n return (\n
\n

--

\n
\n );\n }\n\n if (!selection || selection.length == 0) {\n return
no selection selected
;\n }\n\n // console.log(\"selection is here\", devices, selection, deviceSelected, devices[0]);\n\n let parameters = [];\n for (const { field, renderSide: Param, headerName, editable, format, valueOptions, unit, readOnly, output } of systemParameters) {\n // let value = multiple ? \"--\" : _.get(deviceSelected, field, \"Not avail\"); //devices[0]; // devices[deviceSelected]; //devices.find((device) => device.id === selection[0]); //_.get(selection[0], field, \"Not avail.\");\n // const Param = renderSide;\n parameters.push(\n \n );\n }\n\n return (\n
\n

{selection.length === 1 ? `Device ${selection[0]}` : `${selection.length} devices selected`}

\n {parameters && parameters.length > 0 && (\n
\n {toGrid(parameters, { columns: 2 })}\n
\n )}\n {/*
{JSON.stringify(devices).slice(0, 100)}
\n
{JSON.stringify(selection).slice(0, 100)}
*/}\n }\n onClick={() => {\n const serial = deviceSelected.id;\n let paramsWrite = {};\n for (const key of _.keys(diff)) {\n if (key === \"Setpoint\") {\n paramsWrite[key] = celsiusToSetpoint(parseInt(diff[key])); // TODO: deixar... generico... com tabela..\n } else {\n paramsWrite[key] = parseInt(diff[key]); // TODO: other conversion? use table?\n }\n }\n api.remoteWrite(\"remotewrite\", serial, paramsWrite);\n console.log(\"remoteWrite\", serial, paramsWrite);\n }}\n >\n Write params\n \n \n
\n );\n};\n\nconst DISABLE_APP_BAR_FILTER = true;\n\nconst Content = () => {\n const [page, setPage] = React.useState(0);\n\n const { selection, update } = useSelectionContext();\n const [rows, setRows] = React.useState([]);\n const [selectedProject, setSelectedProject] = useState(null);\n const [selectedStatus, setSelectedStatus] = React.useState(\"all\");\n const [multiSelectionMode, setMultiSelectionMode] = React.useState(false);\n const { auth } = useAuthContext();\n\n const grouped = _.groupBy(rows, \"protocol\");\n const filtered = DISABLE_APP_BAR_FILTER ? rows : _.filter(rows, [\"protocol\", selectedProject]);\n\n const { loading, error, path, client: myClient, currentSlug: current } = useClient();\n\n const classes = useStyles();\n // let { slug } = useParams();\n // const current = slug || \"root\"; //auth.impersonate;\n\n const makeAddClientLink = () => {\n return current == \"root\" ? `/client/new` : `/client/${current}/new`;\n };\n\n const open = selection && selection.length > 0;\n\n let myClients = [];\n let myPath = [];\n\n if (!loading && !error) {\n myClients = myClient.clients;\n myPath = path;\n }\n\n return (\n <>\n \n \n\n \n {loading ? (\n
Loading...
\n ) : error ? (\n
Error: {error.message}
\n ) : (\n // `resolvedData` will either resolve to the latest page's data\n // or if fetching a new page, the last successful page's data\n
\n \n \n \n\n \n \n \n Clients for {myClient.name}\n \n {/*
{JSON.stringify(myPath)}
*/}\n
\n
\n \n
\n
\n\n \n {myClients.map((client) => (\n \n \n \n ))}\n \n\n \n \n \n Devices for {myClient.name}\n \n {/*
{JSON.stringify(myPath)}
*/}\n
\n
\n \n
\n
\n\n \n {myClients.map((client) => (\n \n \n \n ))}\n \n
\n )}\n
\n \n
\n update([])}\n classes={{\n paper: classes.editorDrawerPaper,\n }}\n >\n update([])} />\n \n
\n \n );\n};\n\nexport default function Device() {\n // const { devices, selected } = React.useContext(DevicesContext);\n const classes = useStyles();\n\n return (\n
\n \n \n \n \n \n
\n );\n}\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n \"& .super-app-theme--Online\": {\n backgroundColor: theme.status.online,\n \"&:hover\": {\n backgroundColor: lighten(theme.status.online, 0.1),\n },\n },\n },\n appBar: {\n width: `calc(100% - ${Constants.drawerWidth}px)`,\n marginLeft: Constants.drawerWidth,\n },\n drawer: {\n width: Constants.drawerWidth,\n flexShrink: 0,\n },\n multiControl: {\n width: Constants.editorWidth,\n flexShrink: 0,\n\n // maxWidth: 400,\n // \"& .MuiPaper-root\": {\n // zIndex: 10000000, // breaks selects...\n // },\n },\n deviceListLoader: {\n margin: theme.spacing(2),\n },\n drawerPaper: {\n width: Constants.editorWidth,\n backgroundColor: \"#172026\",\n color: \"white\",\n },\n editorDrawerPaper: {\n width: Constants.editorWidth,\n },\n // necessary for content to be below app bar\n toolbar: theme.mixins.toolbar,\n content: {\n flexGrow: 1,\n backgroundColor: theme.palette.background.default,\n // padding: theme.spacing(3),\n transition: theme.transitions.create(\"margin\", {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n marginRight: -Constants.editorWidth,\n },\n contentShift: {\n transition: theme.transitions.create(\"margin\", {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n marginRight: 0,\n },\n orange: {\n color: theme.palette.getContrastText(deepOrange[500]),\n backgroundColor: deepOrange[500],\n },\n title: {\n fontSize: 18,\n },\n subtitle: {\n fontSize: 14,\n color: theme.palette.grey[400],\n },\n menuHeader: {\n color: \"#bbb\",\n // fontSize: 14,\n marginTop: theme.spacing(1),\n marginLeft: theme.spacing(2),\n fontWeight: \"bold\",\n },\n form: {\n \"& .MuiTextField-root\": {\n margin: theme.spacing(1),\n // width: \"100%\",\n },\n },\n formControl: {\n // margin: theme.spacing(1),\n // minWidth: 240,\n },\n selectAdornment: {\n marginRight: 6, //theme.spacing(1), its 8\n },\n button: {\n marginTop: theme.spacing(2),\n },\n}));\n","import Box from \"@material-ui/core/Box\";\nimport Button from \"@material-ui/core/Button\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport { lighten, makeStyles } from \"@material-ui/core/styles\";\nimport TextField from \"@material-ui/core/TextField\";\nimport Typography from \"@material-ui/core/Typography\";\nimport Switch from \"@material-ui/core/Switch\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport { useFormik } from \"formik\";\nimport React from \"react\";\nimport { useQuery } from \"react-query\";\nimport { useParams } from \"react-router-dom\";\nimport * as yup from \"yup\";\nimport * as api from \"../api\";\nimport ClientBreadcrumbs from \"../components/ClientBreadcrumbs\";\nimport { Drawer as MenuLateral } from \"../components/Drawer\";\nimport useClient from \"../hooks/useClient\";\n\nconst validationSchema = yup.object({\n name: yup.string(\"Enter a client name\").required(\"Name is required\"),\n});\n\nconst NewClientForm = ({ parent }) => {\n const { isLoading, isError, error, data } = useQuery(\"client-tree\", api.clientTree);\n\n const formik = useFormik({\n initialValues: {\n name: \"\",\n cpf_cnpj: \"\",\n oem: false,\n bloqueado: false,\n },\n validationSchema: validationSchema,\n onSubmit: async (values, { setErrors }) => {\n try {\n const response = await api.clients().create({ ...values, parent });\n // const response = await axios.get('/user?ID=12345');\n console.log(response);\n } catch (error) {\n setErrors({ name: error.response.data });\n }\n },\n });\n\n return (\n
\n \n \n \n \n Create client for {parent}\n \n
\n \n\n \n\n \n }\n label=\"OEM\"\n />\n\n \n }\n label=\"Bloqueado\"\n />\n\n \n \n
\n );\n};\n\nexport default function Device() {\n const classes = useStyles();\n let { client } = useClient();\n\n return (\n
\n \n \n \n \n \n
\n );\n}\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n \"& .super-app-theme--Online\": {\n backgroundColor: theme.status.online,\n \"&:hover\": {\n backgroundColor: lighten(theme.status.online, 0.1),\n },\n },\n },\n}));\n","import { Avatar, Box, Card, Container, Grid, Paper, Typography } from \"@material-ui/core\";\nimport { deepOrange, pink } from \"@material-ui/core/colors\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport { lighten, makeStyles } from \"@material-ui/core/styles\";\nimport React from \"react\";\nimport { useParams } from \"react-router-dom\";\nimport ClientBreadcrumbs from \"../components/ClientBreadcrumbs\";\nimport { Constants, Drawer as MenuLateral } from \"../components/Drawer\";\nimport useClient from \"../hooks/useClient\";\nimport { SelectionProvider } from \"../hooks/useSelectionContext\";\n\nimport ClientIcon from \"@material-ui/icons/BusinessOutlined\";\nimport DeviceIcon from \"@material-ui/icons/LocalShippingOutlined\";\nimport UserIcon from \"@material-ui/icons/PersonOutline\";\nimport AlertIcon from \"@material-ui/icons/ReportProblemOutlined\";\n\nfunction GridItem({ classes }) {\n return (\n // From 0 to 600px wide (smart-phones), I take up 12 columns, or the whole device width!\n // From 600-690px wide (tablets), I take up 6 out of 12 columns, so 2 columns fit the screen.\n // From 960px wide and above, I take up 25% of the device (3/12), so 4 columns fit the screen.\n \n item\n \n );\n}\n\nexport default function Device() {\n const classes = useStyles();\n\n const { loading, error, path, client: myClient, currentSlug: current } = useClient();\n\n const makeAddClientLink = () => {\n return current == \"root\" ? `/client/new` : `/client/${current}/new`;\n };\n\n return (\n
\n \n \n \n {loading ? (\n
Loading...
\n ) : error ? (\n
Error: {error.message}
\n ) : (\n // `resolvedData` will either resolve to the latest page's data\n // or if fetching a new page, the last successful page's data\n
\n \n \n \n\n \n \n \n Client {myClient.name} details\n \n {/*
{JSON.stringify(myPath)}
*/}\n
\n
\n {/* */}\n
\n
\n\n \n \n \n \n \n \n {myClient.info.users}\n \n USERS\n \n \n \n\n \n \n \n \n \n {myClient.info.children}\n \n CLIENTS\n \n \n \n\n \n \n \n \n \n {myClient.info.devices}\n \n DEVICES\n \n \n \n \n\n
{JSON.stringify(myClient, null, 4)}
\n\n {/* {myClients.map((client) => (\n \n \n \n ))} */}\n
\n )}\n
\n
\n );\n}\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n \"& .super-app-theme--Online\": {\n backgroundColor: theme.status.online,\n \"&:hover\": {\n backgroundColor: lighten(theme.status.online, 0.1),\n },\n },\n },\n appBar: {\n width: `calc(100% - ${Constants.drawerWidth}px)`,\n marginLeft: Constants.drawerWidth,\n },\n drawer: {\n width: Constants.drawerWidth,\n flexShrink: 0,\n },\n multiControl: {\n width: Constants.editorWidth,\n flexShrink: 0,\n\n // maxWidth: 400,\n // \"& .MuiPaper-root\": {\n // zIndex: 10000000, // breaks selects...\n // },\n },\n deviceListLoader: {\n margin: theme.spacing(2),\n },\n drawerPaper: {\n width: Constants.editorWidth,\n backgroundColor: \"#172026\",\n color: \"white\",\n },\n editorDrawerPaper: {\n width: Constants.editorWidth,\n },\n // necessary for content to be below app bar\n toolbar: theme.mixins.toolbar,\n content: {\n flexGrow: 1,\n backgroundColor: theme.palette.background.default,\n // padding: theme.spacing(3),\n transition: theme.transitions.create(\"margin\", {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n marginRight: -Constants.editorWidth,\n },\n contentShift: {\n transition: theme.transitions.create(\"margin\", {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n marginRight: 0,\n },\n orange: {\n color: theme.palette.getContrastText(deepOrange[500]),\n backgroundColor: deepOrange[500],\n },\n title: {\n fontSize: 18,\n },\n subtitle: {\n fontSize: 14,\n color: theme.palette.grey[400],\n },\n menuHeader: {\n color: \"#bbb\",\n // fontSize: 14,\n marginTop: theme.spacing(1),\n marginLeft: theme.spacing(2),\n fontWeight: \"bold\",\n },\n form: {\n \"& .MuiTextField-root\": {\n margin: theme.spacing(1),\n // width: \"100%\",\n },\n },\n formControl: {\n // margin: theme.spacing(1),\n // minWidth: 240,\n },\n selectAdornment: {\n marginRight: 6, //theme.spacing(1), its 8\n },\n button: {\n marginTop: theme.spacing(2),\n },\n}));\n","import Box from \"@material-ui/core/Box\";\nimport Button from \"@material-ui/core/Button\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport { lighten, makeStyles } from \"@material-ui/core/styles\";\nimport TextField from \"@material-ui/core/TextField\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { useFormik } from \"formik\";\nimport React from \"react\";\nimport { useQuery } from \"react-query\";\nimport { useParams } from \"react-router-dom\";\nimport * as yup from \"yup\";\nimport * as api from \"../api\";\nimport ClientBreadcrumbs from \"../components/ClientBreadcrumbs\";\nimport { Drawer as MenuLateral } from \"../components/Drawer\";\nimport useClient from \"../hooks/useClient\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport Switch from \"@material-ui/core/Switch\";\n\nconst validationSchema = yup.object({\n email: yup.string(\"Enter an email address\").required(\"Email is required\"),\n password: yup.string().required(\"Please Enter your password\"),\n in_training: yup.boolean(),\n});\n\n// Convert error \"Django format\" to formik\nconst errorToFormik = (resp) => {\n let output = {};\n for (const k of Object.keys(resp)) {\n output[k] = resp[k].join(\", \");\n }\n output[\"email\"] = output[\"username\"].replace(\"username\", \"email\");\n return output;\n};\n\nconst NewUserForm = ({ parent }) => {\n const { slug, name } = parent || { slug: null, parent: null };\n const formik = useFormik({\n initialValues: {\n email: \"\",\n password: \"\",\n first_name: \"\",\n last_name: \"\",\n in_training: false,\n },\n validationSchema: validationSchema,\n onSubmit: async (values, { setErrors }) => {\n try {\n console.log(\"onsubimt\");\n const newUser = { ...values, parent: slug, username: values.email };\n const response = await api.users().create(newUser);\n console.log(response);\n // TODO: close form ? return to list ?\n } catch (error) {\n console.log({ error });\n\n setErrors(errorToFormik(error.response.data));\n }\n },\n });\n\n return (\n
\n \n \n \n \n Add user for client {name}\n \n
\n \n \n\n \n\n \n\n \n }\n label=\"Em treinamento\"\n />\n\n \n \n
\n );\n};\n\nexport default function Device() {\n const classes = useStyles();\n let { client, isLoading, isError } = useClient();\n\n // React.useEffect(() => {\n // console.log({ client, isLoading, isError });\n // }, [client, isLoading, isError]);\n\n return (\n
\n \n \n {!isLoading && !isError && }\n
\n );\n}\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n \"& .super-app-theme--Online\": {\n backgroundColor: theme.status.online,\n \"&:hover\": {\n backgroundColor: lighten(theme.status.online, 0.1),\n },\n },\n },\n}));\n","import { Box, Button, CardActionArea } from \"@material-ui/core\";\nimport React from \"react\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Card from \"@material-ui/core/Card\";\nimport CardActions from \"@material-ui/core/CardActions\";\nimport CardContent from \"@material-ui/core/CardContent\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { Link as RouterLink } from \"react-router-dom\";\n\nconst makeLinkOpen = (username) => \"/user/\" + username;\n\nconst useStyles = makeStyles({\n bullet: {\n display: \"inline-block\",\n margin: \"0 2px\",\n transform: \"scale(0.8)\",\n },\n title: {\n fontSize: 14,\n },\n pos: {\n marginBottom: 12,\n },\n});\n\nexport default function UserCard({ username, client, email, first_name, last_name, user_type, onClick }) {\n const classes = useStyles();\n return (\n \n \n \n {/* {user_type} */}\n \n {first_name} {last_name}\n \n {email && (\n \n Email: {email}\n \n )}\n {username && email != username && (\n \n Username: {username}\n \n )}\n {client && (\n \n Client: {client}\n \n )}\n \n \n \n );\n}\n","import React, { useState } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Button from \"@material-ui/core/Button\";\nimport Dialog from \"@material-ui/core/Dialog\";\nimport DialogActions from \"@material-ui/core/DialogActions\";\nimport DialogContent from \"@material-ui/core/DialogContent\";\nimport DialogContentText from \"@material-ui/core/DialogContentText\";\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport InputLabel from \"@material-ui/core/InputLabel\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport Select from \"@material-ui/core/Select\";\nimport Switch from \"@material-ui/core/Switch\";\nimport { useEffect } from \"react\";\nimport { TextField } from \"@material-ui/core\";\nimport _ from \"lodash\";\n\nconst useStyles = makeStyles((theme) => ({\n form: {\n display: \"flex\",\n flexDirection: \"column\",\n // margin: \"auto\",\n minWidth: 400,\n },\n formControl: {\n margin: theme.spacing(1),\n },\n formControlLabel: {\n marginTop: theme.spacing(1),\n },\n}));\n\nconst EnumValue = ({ label, value, options, onChange }) => {\n return (\n <>\n {label}\n \n \n );\n};\n\nconst TextValue = ({ label, disabled, value, displayValue, onChange, onKeyUp }) => {\n const handleChange = (event) => {\n onChange(event.target.value);\n };\n\n return (\n {\n if (ev.key === \"Enter\") {\n ev.preventDefault();\n onKeyUp(ev);\n }\n }}\n />\n );\n};\n\nconst Field = ({ label, disabled, name, value, options, onChange }) => {\n // return (\n //
\n //
{name}
\n //
{value}
\n //
{options}
\n //
\n // );\n\n if (options) {\n return ;\n }\n return console.log(\"581212\")} />;\n};\n\nexport const UserChanger = ({ user, fields, isOpen, onClose, onSave }) => {\n const classes = useStyles();\n const [newValue, setNewValue] = useState(null);\n\n useEffect(() => {\n if (user) {\n console.log(\" \", JSON.stringify(user, null, 4));\n setNewValue({ ...user });\n }\n }, [isOpen]);\n\n const onKeyUp = (e) => {\n if (e.keyCode === 13) {\n e.preventDefault();\n // onSave(selected);\n }\n };\n\n return (\n \n {user?.id ? \"Editar usuário\" : \"Adicionar usuário\"}\n \n
\n {fields &&\n fields.map((f, key) => (\n \n {\n console.log(`onChange: ${f.name}: ${fieldValue}`);\n setNewValue({ ...newValue, [f.name]: fieldValue });\n }}\n />\n \n ))}\n\n setNewValue({ ...newValue, in_training: event.target.checked })}\n color=\"primary\"\n />\n }\n label=\"Em treinamento\"\n />\n \n
\n \n \n \n \n \n );\n};\n","import { Box } from \"@material-ui/core\";\nimport Button from \"@material-ui/core/Button\";\nimport { deepOrange } from \"@material-ui/core/colors\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { lighten, makeStyles } from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport React, { useState } from \"react\";\nimport { useQuery } from \"react-query\";\nimport { Link as RouterLink, useParams } from \"react-router-dom\";\nimport * as api from \"../api\";\nimport ClientHierarchyBreadcrumbs from \"../components/ClientBreadcrumbs\";\nimport { Constants, Drawer as MenuLateral } from \"../components/Drawer\";\nimport UserCard from \"../components/UserCard\";\nimport { useAuthContext } from \"../hooks/useAuth\";\nimport useClient from \"../hooks/useClient\";\nimport { SelectionProvider, useSelectionContext } from \"../hooks/useSelectionContext\";\nimport { UserChanger } from \"../pages-fk/components/UserChanger\";\n\nconst Content = () => {\n const [page, setPage] = React.useState(0);\n\n const { selection, update } = useSelectionContext();\n const [rows, setRows] = React.useState([]);\n const [selectedProject, setSelectedProject] = useState(null);\n const [selectedStatus, setSelectedStatus] = React.useState(\"all\");\n const [changeUser, setChangeUser] = useState(null);\n\n const [multiSelectionMode, setMultiSelectionMode] = React.useState(false);\n const { auth } = useAuthContext();\n const classes = useStyles();\n\n const { client } = useClient();\n\n let { client: slug } = useParams();\n slug = slug || \"root\";\n\n const makeAddUserLink = () => {\n return slug == \"root\" ? `/user/new` : `/user/${slug}/new`;\n };\n\n const { isLoading, isError, error, data: users } = useQuery([\"users\", slug || \"root\"], api.users().getAll(1));\n console.log(\"users\", users, isLoading, error);\n const open = false;\n\n return (\n <>\n
\n setChangeUser(null)}\n onSave={(value) => {\n // api.remoteCommand(null, serial, changeParam, normalizeValue(value)).then((result) => {\n console.log(\"onSave USER\", value);\n // setChangeParam(null);\n // pendingRemote.refetch();\n // });\n }}\n />\n\n \n {isLoading ? (\n
Loading...
\n ) : error ? (\n
Error: {error.message}
\n ) : (\n // `resolvedData` will either resolve to the latest page's data\n // or if fetching a new page, the last successful page's data\n
\n \n \n \n\n \n \n \n Users for {client && client.name}\n \n {/*
{JSON.stringify(myPath)}
*/}\n
\n
\n \n
\n
\n\n \n {users &&\n users.results.map((user) => (\n \n {\n setChangeUser(user);\n }}\n />\n \n ))}\n \n\n \n {/* {users.map((client) => (\n \n \n \n ))} */}\n \n
\n )}\n
\n
\n {/*
\n update([])}\n classes={{\n paper: classes.editorDrawerPaper,\n }}\n >\n update([])} />\n \n
*/}\n \n );\n};\n\nexport default function Device() {\n // const { devices, selected } = React.useContext(DevicesContext);\n const classes = useStyles();\n\n return (\n
\n \n \n \n \n \n
\n );\n}\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n // flexGrow: 1,\n display: \"flex\",\n \"& .super-app-theme--Online\": {\n backgroundColor: theme.status.online,\n \"&:hover\": {\n backgroundColor: lighten(theme.status.online, 0.1),\n },\n },\n },\n appBar: {\n width: `calc(100% - ${Constants.drawerWidth}px)`,\n marginLeft: Constants.drawerWidth,\n },\n drawer: {\n width: Constants.drawerWidth,\n flexShrink: 0,\n },\n multiControl: {\n width: Constants.editorWidth,\n flexShrink: 0,\n\n // maxWidth: 400,\n // \"& .MuiPaper-root\": {\n // zIndex: 10000000, // breaks selects...\n // },\n },\n deviceListLoader: {\n margin: theme.spacing(2),\n },\n drawerPaper: {\n width: Constants.editorWidth,\n backgroundColor: \"#172026\",\n color: \"white\",\n },\n editorDrawerPaper: {\n width: Constants.editorWidth,\n },\n // necessary for content to be below app bar\n toolbar: theme.mixins.toolbar,\n content: {\n flexGrow: 1,\n backgroundColor: theme.palette.background.default,\n // padding: theme.spacing(3),\n // transition: theme.transitions.create(\"margin\", {\n // easing: theme.transitions.easing.sharp,\n // duration: theme.transitions.duration.leavingScreen,\n // }),\n // marginRight: -Constants.editorWidth,\n },\n contentShift: {\n transition: theme.transitions.create(\"margin\", {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n marginRight: 0,\n },\n orange: {\n color: theme.palette.getContrastText(deepOrange[500]),\n backgroundColor: deepOrange[500],\n },\n title: {\n fontSize: 18,\n },\n subtitle: {\n fontSize: 14,\n color: theme.palette.grey[400],\n },\n menuHeader: {\n color: \"#bbb\",\n // fontSize: 14,\n marginTop: theme.spacing(1),\n marginLeft: theme.spacing(2),\n fontWeight: \"bold\",\n },\n form: {\n \"& .MuiTextField-root\": {\n margin: theme.spacing(1),\n // width: \"100%\",\n },\n },\n formControl: {\n // margin: theme.spacing(1),\n // minWidth: 240,\n },\n selectAdornment: {\n marginRight: 6, //theme.spacing(1), its 8\n },\n button: {\n marginTop: theme.spacing(2),\n },\n}));\n","import Avatar from \"@material-ui/core/Avatar\";\nimport Box from \"@material-ui/core/Box\";\nimport Button from \"@material-ui/core/Button\";\nimport Container from \"@material-ui/core/Container\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport TextField from \"@material-ui/core/TextField\";\nimport Typography from \"@material-ui/core/Typography\";\nimport LockOutlinedIcon from \"@material-ui/icons/LockOutlined\";\nimport axios from \"axios\";\nimport { useFormik } from \"formik\";\nimport React, { useEffect } from \"react\";\nimport Copyright from \"../components/Copyright\";\nimport * as yup from \"yup\";\nimport * as api from \"../api\";\n\nconst useStyles = makeStyles((theme) => ({\n paper: {\n marginTop: theme.spacing(8),\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n },\n avatar: {\n margin: theme.spacing(1),\n backgroundColor: theme.palette.secondary.main,\n },\n form: {\n width: \"100%\", // Fix IE 11 issue.\n marginTop: theme.spacing(1),\n },\n submit: {\n margin: theme.spacing(3, 0, 2),\n padding: theme.spacing(2),\n },\n}));\n\nconst validatePassword = yup.object({\n password: yup.string().min(6, \"Precisa ter no mínimo 6 caracteres\").required(\"Digite uma senha válida\"),\n});\n\nconst Message = ({ text, error }) => (\n \n \n {text || \"--\"}\n \n \n);\n\nexport default function ResetPassword() {\n const classes = useStyles();\n const [token, setToken] = React.useState(\"\");\n const [status, setStatus] = React.useState(\"loading\");\n\n React.useEffect(() => {\n const params = new Proxy(new URLSearchParams(window.location.search), {\n get: (searchParams, prop) => searchParams.get(prop),\n });\n if (params.token) {\n api\n .resetPasswordCheckToken(params.token)\n .then(() => {\n setStatus(\"ready\");\n setToken(params.token);\n })\n .catch(() => setStatus(\"invalid\"));\n } else {\n setStatus(\"invalid\");\n console.log(params);\n }\n }, []);\n\n const formik = useFormik({\n initialValues: {\n password: \"\",\n },\n validationSchema: validatePassword,\n onSubmit: async (values, { setErrors }) => {\n api\n .resetPassword(token, values.password)\n .then((result) => setStatus(\"success\"))\n .catch((err) => formik.setErrors({ password: err.response.data }));\n try {\n } catch (error) {\n console.log(\"errors\", error);\n // setErrors(errorToFormik(error.response.data));\n }\n },\n });\n\n let content;\n\n if (status === \"success\") {\n content = ;\n } else if (status === \"loading\") {\n content = ;\n } else if (status === \"invalid\") {\n content = ;\n } else {\n content = (\n
\n \n \n \n );\n }\n\n return (\n \n \n
\n \n \n \n \n Recuperação de senha\n \n {content}\n
\n \n \n \n
\n );\n}\n","import React, { useState } from \"react\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport Button from \"@material-ui/core/Button\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport TextField from \"@material-ui/core/TextField\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport Link from \"@material-ui/core/Link\";\nimport Paper from \"@material-ui/core/Paper\";\nimport Box from \"@material-ui/core/Box\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { withStyles, makeStyles } from \"@material-ui/core/styles\";\nimport env from \"../env\";\n\nimport axios from \"axios\";\n//import Cookies from \"js-cookie\";\n\nimport Copyright from \"../components/Copyright\";\nimport background_default from \"../assets/images/login_bg.jpg\";\n//import background_cadastro from \"../assets/images/telafinal_cadastro_mfk.jpg\";\nimport background_cadastro from \"../assets/images/tela-fk_ALT.jpg\";\nimport background_fk from \"../assets/images/brands/bg_home_login3.jpg\";\nimport roundLogo from \"../assets/images/round_logo.png\";\nimport smallLogo_fk from \"../assets/images/brands/brand_frigoking_login.png\";\n\nimport * as api from \"../api\";\nimport { useAuthContext } from \"../hooks/useAuth\";\nimport { useFormik } from \"formik\";\nimport * as yup from \"yup\";\nimport LoadingModal from \"./LoadingModal\";\nimport MessageDialog from './MessageDialog'; \nimport { useHistory } from \"react-router-dom\";\nimport { useForm } from 'react-hook-form';\n\nconst background = env.Client == \"FK\" ? background_fk : background_default;\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n height: \"100vh\",\n },\n image: {\n backgroundImage: \"url(\" + background + \")\",\n backgroundRepeat: \"no-repeat\",\n backgroundColor: theme.palette.type === \"light\" ? theme.palette.grey[50] : theme.palette.grey[900],\n backgroundSize: \"cover\",\n backgroundPosition: \"center\",\n },\n paper: {\n margin: theme.spacing(8, 4),\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n },\n avatar: {\n margin: theme.spacing(3),\n height: 80,\n width: 80,\n },\n banner_fk: {\n margin: theme.spacing(3),\n },\n form: {\n width: \"100%\", // Fix IE 11 issue.\n marginTop: theme.spacing(1),\n },\n submit: {\n margin: theme.spacing(3, 0, 2),\n },\n}));\n\nconst StyledButton = withStyles({\n root: {\n background: \"linear-gradient(45deg, #ff6d00 30%, #ff9100 90%)\",\n borderRadius: 3,\n border: 0,\n color: \"white\",\n height: 48,\n padding: \"0 30px\",\n boxShadow: \"0 3px 5px 2px #eee\",\n },\n label: {},\n})(Button);\n\nexport default function ResetPassword() {\n let history = useHistory();\n const classes = useStyles();\n const { register, handleSubmit, errors, clearErrors, setError } = useForm();\n const [step, setStep] = useState(\"email\");\n const [email, setEmail] = useState(\"\");\n const [code, setCode] = useState(\"\");\n const [loading, setLoading] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n const [openDialog, setOpenDialog] = useState(false);\n const [confirmationMessage, setConfirmationMessage] = useState('');\n\n const handleDialogClose = () => {\n setOpenDialog(false);\n if (step === 'email' && confirmationMessage != \"\" && !Object.keys(errors).length) {\n setConfirmationMessage(\"\");\n setStep('verify');\n } else if (step === 'verify' && confirmationMessage != \"\" && !Object.keys(errors).length) {\n setConfirmationMessage(\"\");\n setStep('reset');\n } else if (step === 'reset' && confirmationMessage != \"\" && !Object.keys(errors).length) {\n setConfirmationMessage(\"\");\n setStep('email');\n history.push(\"/\");\n } else if (errorMessage != \"\") {\n setErrorMessage(\"\");\n setStep('email');\n history.push(\"/\");\n }\n };\n\n const emailFormik = useFormik({\n initialValues: {\n email: \"\",\n },\n validationSchema: yup.object({\n email: yup.string(\"Enter an email address\").required(\"Email is required\"),\n }),\n onSubmit: async (values) => {\n try {\n setLoading(true);\n const response = await api.resetPasswordAsk(values.email);\n setLoading(false);\n console.log(\"response: \" + JSON.stringify(response, null, 2));\n\n if (response.data.success) {\n // Armazena dados temporariamente e solicita código SMS\n setEmail(values.email);\n //setStep('verify'); // Mudar etapa para inserção de código SMS\n setConfirmationMessage(response.data.message);\n setOpenDialog(true);\n } else {\n // Se os dados precisam ser confirmados manualmente pela equipe\n setErrorMessage(response.data.message);\n setOpenDialog(true);\n //setStep('email'); \n }\n \n } catch (error) {\n // Handle errors\n console.error(error);\n setLoading(false);\n setErrorMessage(error);\n setOpenDialog(true);\n //setStep('email'); \n }\n },\n });\n\n const verifyFormik = useFormik({\n initialValues: {\n code: \"\",\n },\n validationSchema: yup.object({\n code: yup.string(\"Enter the verification code\").required(\"Code is required\"),\n }),\n onSubmit: async (values) => {\n try {\n setLoading(true);\n // Assuming the API verifies the code\n const response = await api.verifyCode({ email, code: values.code });\n setLoading(false);\n console.log(\"response: \" + JSON.stringify(response, null, 2));\n\n if (response.data.success) {\n // Armazena dados temporariamente e solicita código SMS\n setCode(values.code);\n //setStep(\"reset\");\n setConfirmationMessage(response.data.message);\n setOpenDialog(true);\n } else {\n // Se os dados precisam ser confirmados manualmente pela equipe\n setErrorMessage(response.data.message);\n setOpenDialog(true);\n //setStep('email'); \n }\n } catch (error) {\n // Handle errors\n console.error(error);\n setLoading(false);\n setErrorMessage(error);\n setOpenDialog(true);\n //setStep('email'); \n }\n },\n });\n\n const resetFormik = useFormik({\n initialValues: {\n password: \"\",\n confirmPassword: \"\",\n },\n validationSchema: yup.object({\n password: yup.string(\"Enter a new password\").required(\"Password is required\"),\n confirmPassword: yup\n .string(\"Confirm your password\")\n .oneOf([yup.ref(\"password\"), null], \"Passwords must match\")\n .required(\"Confirm Password is required\"),\n }),\n onSubmit: async (values) => {\n try {\n setLoading(true);\n const response = await api.resetPassword({ email, code, password: values.password });\n // Password reset successful, redirect or show success message\n setLoading(false);\n console.log(\"response: \" + JSON.stringify(response, null, 2));\n\n if (response.data.success) {\n // Armazena dados temporariamente e solicita código SMS\n //setStep(\"email\");\n setConfirmationMessage(response.data.message);\n setOpenDialog(true);\n } else {\n // Se os dados precisam ser confirmados manualmente pela equipe\n setErrorMessage(response.data.message);\n setOpenDialog(true);\n //setStep('email'); \n }\n } catch (error) {\n // Handle errors\n console.error(error);\n setLoading(false);\n setErrorMessage(error);\n setOpenDialog(true);\n //setStep('email'); \n }\n },\n });\n\n return (\n \n \n \n \n
\n {env.Client == \"Default\" && }\n {env.Client == \"FK\" && }\n \n {step === \"email\" && \"Esqueci minha senha\"}\n {step === \"verify\" && \"Verifique o código enviado para seu email\"}\n {step === \"reset\" && \"Redefinir Senha\"}\n \n
\n {step === \"email\" && (\n <>\n \n \n Enviar código\n \n \n )}\n {step === \"verify\" && (\n <>\n \n \n Verificar Código\n \n \n )}\n {step === \"reset\" && (\n <>\n \n \n \n Redefinir Senha\n \n \n )}\n \n \n \n \n \n
\n
\n {/* Renderizar a janela de loading apenas quando o estado de loading for verdadeiro */}\n {loading && }\n \n \n
\n
\n
\n );\n}\n","import Avatar from \"@material-ui/core/Avatar\";\nimport Box from \"@material-ui/core/Box\";\nimport Button from \"@material-ui/core/Button\";\nimport Container from \"@material-ui/core/Container\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport TextField from \"@material-ui/core/TextField\";\nimport Typography from \"@material-ui/core/Typography\";\nimport LockOutlinedIcon from \"@material-ui/icons/LockOutlined\";\nimport axios from \"axios\";\nimport { useFormik } from \"formik\";\nimport React, { useEffect, useState } from \"react\";\nimport Copyright from \"../components/Copyright\";\nimport * as yup from \"yup\";\nimport * as api from \"../api\";\n\nconst useStyles = makeStyles((theme) => ({\n paper: {\n marginTop: theme.spacing(8),\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n },\n avatar: {\n margin: theme.spacing(1),\n backgroundColor: theme.palette.secondary.main,\n },\n form: {\n width: \"100%\", // Fix IE 11 issue.\n marginTop: theme.spacing(1),\n },\n submit: {\n margin: theme.spacing(3, 0, 2),\n padding: theme.spacing(2),\n },\n}));\n\nconst validatePassword = yup.object({\n password: yup.string().min(6, \"Precisa ter no mínimo 6 caracteres\").required(\"Digite uma senha válida\"),\n});\n\nconst Message = ({ text, error }) => (\n \n \n {text || \"--\"}\n \n \n);\n\nconst ResetPasswordConfirmation = () => {\n const [htmlContent, setHtmlContent] = useState(\"\");\n\n useEffect(() => {\n // Obtém o URL atual\n const currentUrl = window.location.href;\n\n // Define o URL do seu backend\n let backendUrl = currentUrl;\n if (currentUrl.includes(':3000')) {\n backendUrl = currentUrl.replace(':3000', ':8000');\n }\n\n // Monta os dados da solicitação\n const requestData = {\n resetUrl: currentUrl,\n };\n\n console.log(\"ResetPasswordConfirmation backendUrl=\" + backendUrl + \" requestData\" + requestData);\n\n // Faz a solicitação POST para o backend\n axios.get(backendUrl, requestData)\n .then(response => {\n // Lida com a resposta do backend, se necessário\n const html = response.data;\n setHtmlContent(html);\n //console.log(response.data);\n })\n .catch(error => {\n // Lida com erros na solicitação, se necessário\n console.error(error);\n });\n }, []); // A lista de dependências vazia garante que o efeito só será executado uma vez, após a renderização inicial\n\n return (\n
\n

Reset Password Confirmation

\n
\n
\n );\n};\n\nexport default ResetPasswordConfirmation;","import React, { useState } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { useForm } from 'react-hook-form';\nimport {\n Grid, CssBaseline, Paper, Avatar, Typography, TextField, Button, Link, Box\n} from '@material-ui/core';\nimport { makeStyles, withStyles } from '@material-ui/core/styles';\nimport { useAuthContext } from '../hooks/useAuth';\n\nimport Copyright from \"../components/Copyright\";\nimport background_default from \"../assets/images/login_bg.jpg\";\n//import background_cadastro from \"../assets/images/telafinal_cadastro_mfk.jpg\";\nimport background_cadastro from \"../assets/images/tela-fk_ALT.jpg\";\nimport background_fk from \"../assets/images/brands/bg_home_login3.jpg\";\n// import background_fk from \"../assets/images/brands/banner_test.png\";\nimport roundLogo from \"../assets/images/round_logo.png\";\nimport smallLogo_fk from \"../assets/images/brands/brand_frigoking_login.png\";\nimport smallLogo_fk_avatar from \"../assets/images/brands/icone_avatar.png\";\nimport * as api from \"../api\";\n\nimport LoadingModal from \"./LoadingModal\"; // Importe o componente de janela de loading\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n height: '100vh',\n },\n image: {\n backgroundImage: 'url(' + background_cadastro + ')',\n backgroundRepeat: 'no-repeat',\n backgroundColor: theme.palette.type === 'light' ? theme.palette.grey[50] : theme.palette.grey[900],\n backgroundSize: 'cover',\n backgroundPosition: 'left',\n },\n paper: {\n margin: theme.spacing(8, 4),\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n },\n avatar: {\n margin: theme.spacing(1),\n backgroundColor: theme.palette.secondary.main,\n },\n form: {\n width: '100%',\n marginTop: theme.spacing(1),\n },\n submit: {\n margin: theme.spacing(3, 0, 2),\n },\n linkContainer: {\n display: 'flex',\n flexDirection: 'column', // Organiza os itens em coluna\n alignItems: 'center', // Centraliza os itens horizontalmente\n marginTop: theme.spacing(2), // Adiciona um espaço acima do container\n },\n linkItem: {\n marginTop: theme.spacing(1), // Adiciona um espaço entre os links\n }\n}));\n\nconst StyledButton = withStyles({\n root: {\n background: 'linear-gradient(45deg, #ff6d00 30%, #ff9100 90%)',\n borderRadius: 3,\n border: 0,\n color: 'white',\n height: 48,\n padding: '0 30px',\n boxShadow: '0 3px 5px 2px rgba(255, 105, 135, .3)',\n },\n label: {},\n})(Button);\n\nexport default function SignUp() {\n const classes = useStyles();\n let history = useHistory();\n const { setLogin } = useAuthContext();\n const { register, handleSubmit, errors } = useForm();\n const [loading, setLoading] = useState(false); // Estado para controlar o loading\n const [step, setStep] = useState('register'); // Estado para controlar a etapa do processo\n const [userData, setUserData] = useState({}); // Para armazenar dados temporariamente\n\n const onSubmit = (data) => {\n console.log(\"Registration Data:\", data);\n\n setLoading(true);\n\n if (step === 'register') {\n \n // Verifica se as senhas são iguais\n if (data.password !== data.confirmPassword) {\n alert(\"As senhas não coincidem!\");\n setLoading(false);\n return; // Interrompe o processo de cadastro\n }\n\n setUserData(data);\n \n // Chamada para a API de registro\n api.register({\n email: data.email,\n password: data.password,\n }).then((response) => {\n // Se o registro for bem-sucedido, defina as informações de login\n //setLogin({ ...response.data });\n\n setLoading(false);\n \n // E navegue para a tela inicial/dashboard\n //history.push(\"/\"); // Atualize para o caminho da sua tela inicial/dashboard\n\n setUserData(data);\n setStep('confirmEmail');\n\n }).catch((error) => {\n setLoading(false);\n console.error(\"Registration error:\", error);\n alert(\"Erro no registro. Por favor, tente novamente.\");\n // Verifica se o erro contém mensagens de erro do backend\n if (error.response && error.response.data) {\n // Verifica se o erro de email específico está presente\n if (error.response.data) {\n const errorMessage = error.response.data;\n Object.keys(error.response.data).forEach((key) => {\n if (key === \"mensagem\") {\n alert(\"Erro: \" + error.response.data[key] );\n }\n });\n } else {\n // Caso haja outros erros que não sejam de email, trata como erro desconhecido\n alert(\"Erro desconhecido / Erro diferente de email\");\n }\n } else {\n // Caso a resposta do erro não esteja como esperado\n alert(\"Erro desconhecido: \" + error.toString());\n }\n setLoading(false);\n });\n } else if (step === 'confirmEmail') {\n setLoading(true);\n api.verifySmsCode({ ...userData, username: userData.email, verificationCode: data.confirmationCode })\n .then((response) => {\n setLoading(false);\n //setStep('completeProfile');\n history.push(`/completeprofile?email=${userData.email}` );\n })\n .catch((error) => {\n setLoading(false);\n console.error(\"Email confirmation error:\", error);\n alert(\"Erro na confirmação do email. Por favor, tente novamente.\");\n });\n } else if (step === 'completeProfile') {\n setLoading(true);\n api.completeProfile({ ...userData })\n .then((response) => {\n setLoading(false);\n setStep('verifyPhone');\n })\n .catch((error) => {\n setLoading(false);\n console.error(\"Complete profile error:\", error);\n alert(\"Erro ao completar perfil. Por favor, tente novamente.\");\n });\n } else if (step === 'verifyPhone') {\n setLoading(true);\n api.verifySmsCode({ ...userData, username: userData.email, verificationCode: data.verificationCode })\n .then((response) => {\n setLoading(false);\n setLogin({ ...response.data });\n history.push(\"/device\");\n })\n .catch((error) => {\n setLoading(false);\n console.error(\"Phone verification error:\", error);\n alert(\"Erro na verificação do telefone. Por favor, tente novamente.\");\n });\n }\n };\n\n return (\n \n \n \n \n
\n \n {/* Seu ícone ou imagem de avatar aqui */}\n \n \n {step === 'register' && 'Cadastro'}\n {step === 'confirmEmail' && 'Confirmação de Email'}\n {step === 'completeProfile' && 'Complete seu Perfil'}\n {step === 'verifyPhone' && 'Verificação de Telefone'}\n \n
\n {step === 'register' && (\n <>\n \n \n {errors.password && (\n {errors.password.message}\n )}\n \n \n )}\n {step === 'confirmEmail' && (\n \n )}\n {step === 'completeProfile' && (\n <>\n \n \n \n )}\n {step === 'verifyPhone' && (\n \n )}\n \n {step === 'register' && 'Cadastrar'}\n {step === 'confirmEmail' && 'Confirmar Email'}\n {step === 'completeProfile' && 'Completar Perfil'}\n {step === 'verifyPhone' && 'Verificar Telefone'}\n \n
\n \n \n {\"Já tem uma conta? Entrar\"}\n \n \n
\n \n \n \n \n
\n
\n {/* Renderizar a janela de loading apenas quando o estado de loading for verdadeiro */}\n {loading && }\n \n {/* Restante do seu código */}\n
\n
\n
\n );\n}\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAIAAAF0mx+sAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAydpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDkuMS1jMDAyIDc5LmE2YTYzOTY4YSwgMjAyNC8wMy8wNi0xMTo1MjowNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDI1LjExIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowOUU3NTNCQTU0MjgxMUVGQTE4MjlDQUE2OTE3QzdEMSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDowOUU3NTNCQjU0MjgxMUVGQTE4MjlDQUE2OTE3QzdEMSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjA5RTc1M0I4NTQyODExRUZBMTgyOUNBQTY5MTdDN0QxIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjA5RTc1M0I5NTQyODExRUZBMTgyOUNBQTY5MTdDN0QxIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+dkBMgQAABXRJREFUeNpi/P//PwMSYAFiRlF9IPnR9QuUv3RG+/Ezl5gZjvx7/ZThPxgwiOgByY+RSkxA+YC4AiD5rTedxdgFIIAY0cxj5JA2/fHzJ8QwvmV3mTg52YN8nIEcZnlNkAJBFRugYUCTIAYzwXV+igfJAwQQunloAKRcSNX29dv3QEcYOYV/ilL+Maea4dePX7sWQXUDpd9/+ARRDnEGBIAcA2H9f32Rn48HLgpEULfjtxsggIhwGh6ACGh8TpOWFLt4cDWQwZk/mc03De40Fgj19PmrbbuPABnfJ+YCw/PrpcMIpxE2HOhvuBCzghbf0tvoLocHC5OUMgPMt1C7gQH+8dMXSMT/Obvn/49vRAULQAARkMYPmBgoAFB3Q9IDIyOjp7NNT2ORoWP4z1+/4GHErKjz9/4VNo+Evw+v/71+EhI4CM0QwMXJoaGqwMHB/vffX0EBPkjyYmTn4m7dCFfz//3Lz9lWKDZDwNdv33fsO/rl6/c/f/7CE+b/n9/+f/sEV/N9dhVCAyRjQPLJfyQA0oyUc0CMXz+AjJ/b5sEFWXAFBsg4JADx5JdCp38vH+ILbWCiQk5X0Jwapczw+xdP/z6uigWDIJ4BAmjgbB44zSzw6MGUm9dWGLy/GYsmVna+hdfQbWZlZXlwboeDtQkwh6A4T1yOzScVZAe/CIhk40BP2+bGupPaKuq7pt1/9PTJpd3Sui4QcTbXGI7ERob//xh+/wTWICz6dj9X9aFrvnP/sY1P/P2z2zsmzdO08oeLc0RXgj3GxBFfD0pq0SqMXHzomhMi/IBZsq5j6rxlGxZPa4vNguaez3m2TILiyDkJPcCAoHcaqKYoyY7XUFWE6wQFhJkHe0QpnPs5xRCLZgjomboQTeTXnmVARCCez+9fBSyC4QgiCCzGgZmRd855JhEp5MoIeyJx8E/GmiV5Jh4EFTWN4fg0H9g4F2jt/MlNKLkHGLyMIJV/b57BksLgwCcq58jJ879+/UYWBJZhkOhh1jD7e+MUTpuBpR+w7vj+4ye6eDEozXDXLWdASnwImwtruvj5eK/cuIOs59+rx8AaiOHvn3/P739tjmLk4mXRtgKW4UO6MAAIMIqcPWCuHpIWoyRsNXNfSKOGGDChKt3naB8JkcrFy9O3F7vFb959gDcG4I2MAC+nz1++7j5wAtiCRpb68ePH/09vsYShuBzQFuQqHAr+/iEc1DGh3rXFaVlJ4d++/5CREpeTkQTaCiwWKwuSQ/3cMGySB/nAxJWrajGodZrZAyqfGRm52zczyaqBCgA1IwJBDQdXb9wFev3Vm3er5/VIiov+/v3H1sKoc9I8WWmJ+w+foilmVjEANjT+f/nAyCMALxv5Ft1kYGbmrl8FDGG0Mg+fxcAQnt3f8Prtu5be2dxcnB8/f+bi5ATWH3y83CFJxWiKfx/dyGLszGrhjeocZki8/tqxAK28xGfx0VMXzNyi/v37JyTIv2nJJGBedwvJ8I7KBpamz1++wVQPbF4zSSpiNerPmV2EUzUyePLsJZB89uK1sXPE379/P33+iifF/j66CYjIz07IVZ2BjjpWqQ8fPyM3RoE9DZ6eXfDqBFLtckRVQBof4AL/75dKn3+PbxHrYzgA1ldv3r5Hboij5E5WNjT1nFm9rDYBUEtfPPhS4Q3sWJIQ1HBw4fINYPsGwr52697uA8dxF4MsXNVLWLQt4c2IH/NqSQtqZJCTEglnL1ixEY/FjCyszDKqiIr8+2eKymp4uwSIEnPr8Kj8/+v750zzP1eOQbjsvum8U48x8gnRqZL41hb7c/1UaBgIivPOOM3mnUIgqIEZF8IwdAwj0hpgbxLUS0IFP1f3ARFGgPwbbQgMCAAAWbOJnjBHBRgAAAAASUVORK5CYII=\"","import React, { useState , useEffect } from 'react';\nimport { useHistory, useLocation } from 'react-router-dom';\nimport { useForm } from 'react-hook-form';\nimport {\n Grid, CssBaseline, Paper, Avatar, Typography, TextField, Button, Link, FormControlLabel, FormControl, FormLabel, RadioGroup, Radio, Checkbox\n} from '@material-ui/core';\nimport { Box } from '@material-ui/core';\nimport { makeStyles, withStyles } from '@material-ui/core/styles';\nimport { useAuthContext } from '../hooks/useAuth';\nimport * as yup from \"yup\";\nimport * as api from \"../api\";\n\nimport MessageDialog from './MessageDialog'; \nimport TermsDialog from './TermsDialog';\n\nimport Copyright from \"../components/Copyright\";\nimport background_default from \"../assets/images/login_bg.jpg\";\n//import background_cadastro from \"../assets/images/telafinal_cadastro_mfk.jpg\";\nimport background_cadastro from \"../assets/images/tela-fk_ALT.jpg\";\nimport background_fk from \"../assets/images/brands/bg_home_login3.jpg\";\n// import background_fk from \"../assets/images/brands/banner_test.png\";\nimport roundLogo from \"../assets/images/round_logo.png\";\nimport smallLogo_fk from \"../assets/images/brands/brand_frigoking_login.png\";\n\nimport LoadingModal from \"./LoadingModal\"; // Importe o componente de janela de loading\nimport PhoneInput from 'react-phone-input-2';\nimport 'react-phone-input-2/lib/style.css';\n\n\nconst validateUpdate = yup.object({\n fullName: yup.string().required(\"Nome é obrigatório\"),\n cpf_cnpj: yup.string().required(\"CPF/CNPJ é obrigatório\"),\n razaoSocial: yup.string().required(\"Nome do cliente é obrigatório\"),\n telefone: yup.string().required(\"Telefone é obrigatório\"),\n email: yup.string().required(\"Email é obrigatório\"),\n termsServiceAccepted: yup.boolean().oneOf([true], \"Você deve aceitar os termos e condições\"),\n termsResponsabilityAccepted: yup.boolean().oneOf([true], \"Você deve aceitar os termos e condições\"),\n});\n\n\n/*\nconst validateUpdate = (data) => {\n const errors = {};\n\n // Validar o campo \"fullName\"\n if (!data.fullName || data.fullName.trim() === '') {\n errors.fullName = 'Nome é obrigatório';\n }\n\n // Validar o campo \"cpf_cnpj\"\n if (!data.cpf_cnpj || data.cpf_cnpj.trim() === '') {\n errors.cpf_cnpj = 'CPF/CNPJ é obrigatório';\n }\n\n // Validar o campo \"telefone\"\n if (!data.telefone || data.telefone.trim() === '') {\n errors.telefone = 'Telefone é obrigatório';\n }\n\n // Validar o campo \"email\"\n if (!data.email || data.email.trim() === '') {\n errors.email = 'Email é obrigatório';\n } else if (!isValidEmail(data.email)) { // Substitua isValidEmail pela função de validação de email adequada\n errors.email = 'Email inválido';\n }\n\n // Validar o campo \"termsAccepted\"\n if (!data.termsAccepted) {\n errors.termsAccepted = 'Você deve aceitar os termos e condições';\n }\n\n \n // Validar o campo \"razaoSocial\"\n if (!data.razaoSocial || data.razaoSocial.trim() === '') {\n errors.razaoSocial = 'Nome do cliente é obrigatório';\n }\n\n return errors;\n};\n*/\n\n// Função auxiliar para validar o email\nconst isValidEmail = (email) => {\n // Implemente sua lógica de validação de email aqui\n // Retorna true se o email for válido, false caso contrário\n};\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n height: '100vh',\n },\n image: {\n backgroundImage: 'url(' + background_cadastro + ')',\n backgroundRepeat: 'no-repeat',\n backgroundColor: theme.palette.type === 'light' ? theme.palette.grey[50] : theme.palette.grey[900],\n backgroundSize: 'cover',\n backgroundPosition: 'left',\n },\n paper: {\n margin: theme.spacing(8, 4),\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n },\n avatar: {\n margin: theme.spacing(1),\n backgroundColor: theme.palette.secondary.main,\n },\n form: {\n width: '100%',\n marginTop: theme.spacing(1),\n },\n submit: {\n margin: theme.spacing(3, 0, 2),\n },\n radioGroup: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n },\n}));\n\nconst StyledButton = withStyles({\n root: {\n background: 'linear-gradient(45deg, #ff6d00 30%, #ff9100 90%)',\n borderRadius: 3,\n border: 0,\n color: 'white',\n height: 48,\n padding: '0 30px',\n boxShadow: '0 3px 5px 2px rgba(255, 105, 135, .3)',\n },\n label: {},\n})(Button);\n\nconst termsHTML = `\n

Termos de Serviço da Plataforma Meu Frigo King

\n

Data da Última Atualização: 02 de maio de 2024

\n
    \n
  1. Aceitação dos Termos
    Ao acessar ou usar a plataforma Meu Frigo King, você concorda em ficar vinculado a estes Termos de Serviço e a todas as leis e regulamentos aplicáveis. Se você não concorda com algum dos termos, você não está autorizado a usar ou acessar esta plataforma.
  2. \n
  3. Licença de Uso
    Concedemos a você uma licença limitada, não exclusiva, intransferível e revogável para usar a plataforma Meu Frigo King estritamente em conformidade com estes Termos de Serviço. Esta licença não inclui o direito de coletar ou usar informações contidas na plataforma para propósitos proibidos por nós, criar trabalhos derivados baseados nos conteúdos da plataforma, ou usar qualquer mineração de dados, robôs ou métodos similares de extração e coleta de dados.
  4. \n
  5. Propriedade Intelectual
    Os conteúdos presentes nesta plataforma, incluindo, mas não limitado a, textos, gráficos, imagens, logotipos, ícones de botão, imagens digitais, compilações de dados e software, são propriedade de Eq Tech Equipamentos Ltda. ou são fornecidos sob licença por seus respectivos proprietários e são protegidos pelas leis de direitos autorais e marcas registradas.
  6. \n
  7. Restrições de Uso
    Você está proibido de usar a plataforma para qualquer fim ilegal, para facilitar a violação de quaisquer leis ou regulamentos, ou de uma maneira que possa infringir os direitos da Eq Tech Equipamentos Ltda. ou de terceiros.
  8. \n
  9. Privacidade e Proteção de Dados Pessoais
    Sua privacidade é muito importante para nós. Nossa Política de Privacidade explica como tratamos seus dados pessoais e protegemos sua privacidade quando você usa a plataforma Meu Frigo King. Ao usar nossa plataforma, você concorda que a Eq Tech Equipamentos possa usar esses dados de acordo com sua política de privacidade.
  10. \n
  11. Modificações nos Termos
    A Eq Tech Equipamentos Ltda. reserva-se o direito de revisar e alterar estes Termos de Serviço a qualquer momento sem aviso prévio. Ao usar esta plataforma após qualquer modificação nos Termos, você concorda em ficar vinculado pela versão atualizada.
  12. \n
  13. Jurisdição e Leis Aplicáveis
    Estes Termos serão regidos e interpretados de acordo com as leis brasileiras, do Foro de Guaramirim (SC), sem considerar conflitos de disposições legais.
  14. \n
  15. Contato
    Para quaisquer questões relacionadas a estes Termos de Serviço, por favor entre em contato conosco através de frigoking@frigoking.com.br.
  16. \n
\n `;\n\n const termoResponsabilidadeHTML = `\n

Termo de Responsabilidade Criminal

\n

Declaração de Autoridade e Responsabilidade Legal

\n

Ao utilizar esta plataforma, o usuário afirma sob as penas da lei que possui autorização legítima para operar os equipamentos e acessar os dados neles contidos, seja como proprietário ou como agente autorizado pelo proprietário. Declarações falsas ou uso indevido dos dados ou da plataforma podem ser considerados delitos passíveis de ação penal conforme legislação vigente.

\n`;\n\n\nexport default function CompleteProfile() {\n const classes = useStyles();\n const history = useHistory();\n const { setLogin } = useAuthContext();\n const { register, handleSubmit, errors, setValue, clearErrors, watch } = useForm();\n const [confirmationMessage, setConfirmationMessage] = useState('');\n const [errorMessage, setErrorMessage] = useState('');\n const [openDialog, setOpenDialog] = useState(false);\n const [dialogMessage, setDialogMessage] = useState('');\n const [error, setError] = useState({});\n const [openTermsDialog1, setOpenTermsDialog1] = useState(false);\n const [openTermsDialog2, setOpenTermsDialog2] = useState(false);\n const [selectedTerms, setSelectedTerms] = useState(null);\n const [step, setStep] = useState('completeProfile'); // Altera a etapa para verificação de SMS\n const [userData, setUserData] = useState({}); // Para armazenar dados temporariamente\n const [nonFieldError, setNonFieldError] = useState(\"\");\n const [termsAccepted, setTermsAccepted] = useState(false);\n const [termsServiceAccepted, setTermsServiceAccepted] = useState(false);\n\n const [loading, setLoading] = useState(false); // Estado para controlar o loading\n\n const location = useLocation();\n const params = new URLSearchParams(location.search);\n const email = params.get(\"email\");\n const telefone = watch('telefone');\n\n console.log(\"email:\", email);\n\n // Dados pré-preenchidos\n const preFilledData = {\n email: email, // Usa o email passado como prop, ou deixa vazio se não fornecido\n // Outros campos pré-preenchidos\n };\n\n useEffect(() => {\n register({ name: 'telefone' }, {\n required: 'Telefone é obrigatório',\n validate: value => (value && value.replace(/\\D/g, '').length >= 10) || 'Número de telefone inválido',\n });\n }, [register]);\n\n const handleDialogClose = () => {\n setOpenDialog(false);\n if (step === 'completeProfile' && confirmationMessage != \"\" && !Object.keys(errors).length) {\n history.push(\"/\");\n } else if (step === 'verifySMS' && confirmationMessage != \"\" && !Object.keys(errors).length) {\n history.push(\"/\");\n }\n };\n\n \n const handleCloseTermsDialog = () => {\n setOpenTermsDialog1(false);\n setOpenTermsDialog2(false);\n //setSelectedTerms(null);\n };\n\n const handleTermsAcceptedChange = (event) => {\n setTermsAccepted(event.target.checked);\n };\n\n const handleTermsServiceAcceptedChange = (event) => {\n setTermsServiceAccepted(event.target.checked);\n };\n\n const handleInputChange = (event) => {\n // Converte o valor digitado para maiúsculas\n event.target.value = event.target.value.toUpperCase();\n };\n\n const onSubmit = async (data) => {\n console.log(\"Profile Data:\", data);\n\n setLoading(true);\n\n clearErrors();\n setNonFieldError(\"\");\n\n if (step === 'completeProfile') {\n try {\n // Validar os dados usando Yup\n await validateUpdate.validate(data, { abortEarly: false });\n\n // Enviar os dados para o backend\n const response = await api.completeProfile(data);\n\n console.log(\"response:\", response);\n\n setLoading(false);\n\n if (response.smsVerificationRequired) {\n // Armazena dados temporariamente e solicita código SMS\n setUserData(data); // Armazenar dados do usuário para uso posterior\n setStep('verifySMS'); // Mudar etapa para inserção de código SMS\n } else {\n // Verificar a resposta do backend\n if (response.success) {\n // Se os dados foram confirmados automaticamente\n setConfirmationMessage(\"Os dados foram confirmados automaticamente.\");\n setOpenDialog(true);\n //history.push(\"/\"); // Navega para a tela inicial após o cadastro\n } else {\n // Se os dados precisam ser confirmados manualmente pela equipe\n setConfirmationMessage(\"Aguarde. Seus dados serão confirmados pela equipe.\");\n setOpenDialog(true);\n }\n }\n } catch (error) {\n\n setLoading(false);\n\n console.error(\"Registration error:\", error);\n // Verifica se o erro contém mensagens de erro do backend\n if (error.response && error.response.data) {\n // Verifica se o erro de email específico está presente\n if (error.response.data) {\n const errorMessage = error.response.data;\n Object.keys(error.response.data).forEach((key) => {\n if (key === \"mensagem\") {\n alert(\"Erro: \" + error.response.data[key] );\n }\n });\n } else {\n // Caso haja outros erros que não sejam de email, trata como erro desconhecido\n alert(\"Erro desconhecido1: \" + error.toString());\n }\n } else {\n // Caso a resposta do erro não esteja como esperado\n alert(\"Erro desconhecido2: \" + error.toString());\n }\n\n // Captura os erros de validação do Yup\n if (error.name === 'ValidationError') {\n const validationErrors = {};\n error.inner.forEach((e) => {\n validationErrors[e.path] = e.message;\n });\n\n // Concatena todas as mensagens de erro em uma única string\n const firstErrorMessage = Object.values(validationErrors)[0];\n\n // Exibe a mensagem de erro no MessageDialog\n setErrorMessage(\"Por favor, corrija os erros no formulário. \" + firstErrorMessage);\n setOpenDialog(true);\n\n // Define os erros de validação para exibir no formulário\n setError(validationErrors);\n\n // Obtém o primeiro campo não validado para focar\n const firstErrorField = Object.keys(validationErrors)[0];\n const firstErrorElement = document.getElementById(firstErrorField);\n if (firstErrorElement) {\n firstErrorElement.focus(); // Define o foco no primeiro campo não validado\n }\n } else {\n console.error(\"Error CompleteProfile:\", error);\n setErrorMessage(\"Erro ao validar os dados. Por favor, tente novamente.\");\n setOpenDialog(true);\n\n \n }\n }\n } else if (step === 'verifySMS') {\n // Supondo que `data` agora contenha o `verificationCode`\n api.completeProfile({...userData, verificationCode: data.verificationCode})\n .then((resp) => {\n setLoading(false);\n if(resp.success) {\n // perfil completado\n setConfirmationMessage(\"Os dados foram confirmados automaticamente.\");\n setOpenDialog(true);\n\n //history.push(\"/device\");\n \n } else {\n setConfirmationMessage(\"Aguarde. Seus dados serão confirmados pela equipe.\");\n setOpenDialog(true);\n //history.push(\"/\");\n }\n })\n .catch((error) => {\n setLoading(false);\n handleErrors(error)\n });\n }\n }\n\n // Função para lidar com erros tanto no login quanto na verificação do SMS\n const handleErrors = (error) => {\n console.error(\"Registration error:\", error.toString());\n if (error.response ) {\n /*\n Object.keys(error.response.data).forEach((key) => {\n if (key === \"non_field_errors\") {\n setNonFieldError(error.response.data[key][0]);\n } else {\n setError(key, { message: error.response.data[key] });\n }\n });\n */\n\n console.error(\"Registration error:\", error);\n // Verifica se o erro contém mensagens de erro do backend\n if (error.response && error.response.data) {\n // Verifica se o erro de email específico está presente\n if (error.response.data) {\n const errorMessage = error.response.data;\n Object.keys(error.response.data).forEach((key) => {\n if (key === \"mensagem\") {\n alert(\"Erro: \" + error.response.data[key] );\n }\n });\n } else {\n // Caso haja outros erros que não sejam de email, trata como erro desconhecido\n alert(\"Erro desconhecido1: \" + error.toString());\n }\n } else {\n // Caso a resposta do erro não esteja como esperado\n alert(\"Erro desconhecido2: \" + error.toString());\n }\n } else {\n setNonFieldError(error.toString());\n\n alert(\"Erro desconhecido3: \" + error.toString());\n }\n };\n\n return (\n \n \n {/* Nova linha */}\n \n
\n \n {step === 'completeProfile' ? 'Complete seu Cadastro' : step === 'verifySMS' ? 'Verifique o código enviado para seu telefone' : 'Verifique o código enviado para o seu email'}\n \n
\n {step === 'completeProfile' ? (\n <>\n \n \n \n Telefone Celular\n setValue('telefone', value, true)}\n inputProps={{\n id: \"telefone\",\n name: 'telefone',\n required: true,\n autoFocus: true,\n autoComplete: 'off',\n }}\n isValid={(value, country) => {\n return value.match(/\\d/g).length >= 8;\n }}\n countryCodeEditable={false}\n autoFormat={false}\n error={Boolean(errors.telefone)}\n helperText={errors.telefone?.message}\n />\n \n
\n setOpenTermsDialog1(true)}>\n Termos de serviço da plataforma Meu Frigo King.\n Aceito}\n control={}\n labelPlacement=\"end\" // Posiciona o label à esquerda do checkbox\n />\n \n setTermsServiceAccepted(true)}\n onReject={() => setTermsServiceAccepted(false)}\n onTermsServiceAcceptedChange={handleTermsServiceAcceptedChange}\n />\n
\n
\n setOpenTermsDialog2(true)}>\n Termo de responsabilidade criminal.\n Aceito}\n control={}\n labelPlacement=\"end\" // Posiciona o label à esquerda do checkbox\n />\n \n setTermsAccepted(true)}\n onReject={() => setTermsAccepted(false)}\n />\n
\n \n \n ) : (\n \n )}\n \n {step === 'completeProfile' ? 'Concluir Cadastro' : 'Verificar Código'}\n \n {nonFieldError &&
{nonFieldError}
}\n \n \n \n
\n
\n {/* Renderizar a janela de loading apenas quando o estado de loading for verdadeiro */}\n {loading && }\n \n {/* Restante do seu código */}\n
\n
\n
\n );\n}\n","import axios from \"axios\";\n\nconst baseUrl = process.env.NODE_ENV === \"development\" ? \"http://localhost:3535/\" : \"https://api.globusway.com/\";\n\nconst client = axios.create({\n baseURL: baseUrl,\n timeout: 120000,\n headers: {\n \"X-Tenant\": \"globus\",\n },\n});\n\nfunction getHeaders() {\n const authJSON = localStorage.getItem(\"auth\");\n let token;\n\n if (authJSON) {\n const auth = JSON.parse(authJSON);\n token = auth.token;\n }\n\n if (!token) {\n console.log(\"no Token present!?\");\n return;\n }\n let output = {\n Authorization: `Token ${token}`,\n };\n return output;\n}\n\nexport const deviceDetail = async (key, serial) => {\n const { data } = await client.get(`devices/${serial}/`, {\n headers: getHeaders(),\n });\n return data;\n};\n\nconst params = [\n \"HabilitaSensorTemperaturaCamara2\",\n \"Setpoint01\",\n \"Setpoint02\",\n \"TemperaturaCamara1\",\n \"TemperaturaCamara2\",\n \"TipoDeControleShort\",\n \"TipoDeControleString\",\n \"EstadoControle\",\n \"TempoParaDegelo\",\n \"NumeroSerial\",\n];\n\nexport const getMultiData = async (key, serial) => {\n const { data } = await client.post(\n `fk/bulk-query/`,\n { params },\n {\n headers: getHeaders(),\n }\n );\n return data;\n};\n\nexport const getMainScreenData = async (key, serial) => {\n const { data } = await client.post(\n `fk/bulk-query/`,\n { serial: [serial], params },\n {\n headers: getHeaders(),\n }\n );\n return data;\n};\n\nexport const getPendingRemote = async (key, serial) => {\n const { data } = await client.get(`fk/remote-cmd/`, { params: { serial } }, { headers: getHeaders() });\n return data;\n};\n\nexport const getAllParams = async (key, serial) => {\n const { data } = await client.post(`fk/bulk-query/`, { serial: [serial], full: true }, { headers: getHeaders() });\n return data;\n};\n\nexport const getHistory = async (key, serial) => {\n const { data } = await client.post(\n `fk/history/`,\n { serial: serial, fields: [\"event\", \"position\", \"remote_command\"] },\n {\n headers: getHeaders(),\n }\n );\n return data;\n};\n\nexport const getParamHistory = async (key, serial, paramArray, startDate, endDate) => {\n\t//console.log(\"getParamHistory\");\n const { data } = await client.post(\n `fk/param-history/`,\n { serial: serial, params: paramArray, startDate: startDate, endDate: endDate },\n {\n headers: getHeaders(),\n }\n );\n return data;\n};\n\nexport const getLogFiles = async (key, serial) => {\n const { data } = await client.get(`fk/logs/${serial}/`, { headers: getHeaders() });\n return data;\n};\n\nexport const remoteCommand = async (key, serial, param, value) => {\n const { data } = await client.post(`fk/remote-cmd/`, { serial: [serial], param, value }, { headers: getHeaders() });\n return data;\n};\n\nexport const downloadFile = async (url) => {\n const { data } = await client.get(url, {\n headers: getHeaders(),\n });\n return data;\n};\n","import React from \"react\";\n\nimport { Chart as ChartJS, CategoryScale, LinearScale, PointElement, LineElement, Title, Tooltip, Legend, TimeScale } from \"chart.js\";\n// import \"chartjs-plugin-zoom\";\nimport zoom from \"chartjs-plugin-zoom\";\nimport \"chartjs-adapter-date-fns\";\nimport { Line } from \"react-chartjs-2\";\nimport Hammer from \"react-hammerjs\";\nimport * as api from \"../api\";\nimport { useQuery } from \"react-query\";\nimport _ from \"lodash\";\nimport { Box, CircularProgress, Typography } from \"@material-ui/core\";\n\n// [Stefano 03-08-2023] tratamento de fuso horario no grafico\nimport { utcToZonedTime } from \"date-fns-tz\";\n\nChartJS.register(CategoryScale, LinearScale, PointElement, LineElement, Title, Tooltip, Legend, TimeScale, zoom);\n\nfunction getOptions({ unit, interval }) {\n return {\n responsive: true,\n maintainAspectRatio: false,\n scales: {\n yAxis: {\n ticks: {\n callback: (v) => `${v} ${unit}`,\n },\n // title: {\n // title: \"Temp\",\n // color: \"black\",\n // // title: `Temp (${unit})`,\n // display: true,\n // },\n offset: true,\n // min: min,\n // max: max,\n },\n xAxis: {\n // The axis for this scale is determined from the first letter of the id as `'x'`\n // It is recommended to specify `position` and / or `axis` explicitly.\n type: \"time\",\n time: {\n // unit: \"hour\",\n unit: interval, // Specify the desired time unit (e.g., \"day\", \"hour\", \"minute\")\n displayFormats: {\n hour: \"MMM d, HH:mm\", // Customize the date format as needed\n minute: \"MMM d, HH:mm\", // Customize the date format as needed\n },\n },\n },\n },\n transitions: {\n zoom: {\n animation: {\n duration: 0,\n },\n },\n },\n plugins: {\n zoom: {\n pan: {\n enabled: true,\n mode: \"x\",\n },\n zoom: {\n enabled: true,\n mode: \"x\",\n wheel: {\n enabled: true,\n },\n },\n },\n tooltip: {\n callbacks: {\n label: (ctx) => {\n //if (ctx.parsed.y !== null) {\n // return `${ctx.dataset.label}: ${ctx.parsed.y} ${unit}`;\n //}\n //return ctx.dataset.label;\n const label = ctx.dataset.label || \"\";\n const value = ctx.parsed.y || \"\";\n return `${label}: ${value} ${unit}`;\n },\n },\n },\n legend: {\n display: true,\n position: \"top\",\n },\n // title: {\n // display: true,\n // text: \"Chart.js Line Chart\",\n // },\n },\n };\n}\n\nexport function Chart1({ serial, options, dateRange }) {\n const chartParams = [\"Setpoint01\", \"TemperaturaCamara1\"];\n\n const { startDate, endDate } = dateRange;\n\n const tz = \"America/Sao_Paulo\"; // Substitua pelo fuso hor�rio correto para sua regi�o\n const startDateZoned = utcToZonedTime(dateRange.startDate, tz);\n const endDateZoned = utcToZonedTime(dateRange.endDate, tz);\n\n //startDate.setHours(0,0,0,0);\n //endDate.setHours(23,59,59,999);\n console.log(\"api.js Chart1 startDate, endDate, dateRange\", startDate, endDate, dateRange);\n console.log(\"api.js Chart1 startDateZoned, endDateZoned, dateRange\", startDateZoned, endDateZoned, dateRange);\n\n const { isLoading, error, data } = useQuery([\"param-history\", serial, startDateZoned, endDateZoned], \n () => api.getParamHistory(\"\", serial, chartParams, startDateZoned, endDateZoned));\n\n console.log(\"api.js Chart1 isLoading, error, data\", isLoading, error, data);\n\n if (isLoading) {\n return (\n \n \n \n );\n }\n if (error) {\n return (\n \n \n Error\n \n \n Could not load chart data\n \n \n );\n }\n\n // const min = _.get(data.result[\"Setpoint01\"][0], \"value.Setpoint01.min\", -100);\n // const max = _.get(data.result[\"Setpoint01\"][0], \"value.Setpoint01.max\", 100);\n const unit = _.get(data, \"result.Setpoint01[0].value.Setpoint01.unit\", \"\"); // Extract unit from first value of Setpoint01 array\n const formattedSetpoint01 = data.result[\"Setpoint01\"].map((entry) => ({ \n x: new Date(entry.ts), y: entry.value[\"Setpoint01\"].current }));\n const formattedTemp = data.result[\"TemperaturaCamara1\"].map((entry) => ({ \n x: new Date(entry.ts), y: entry.value[\"TemperaturaCamara1\"] }));\n\n let datasets = [\n {\n label: \"Setpoint 1\",\n data: formattedSetpoint01,\n borderColor: \"rgb(255, 99, 132)\",\n backgroundColor: \"rgba(255, 99, 132, 0.5)\",\n },\n ];\n datasets.push({\n label: \"Temperatura 1\",\n data: formattedTemp,\n borderColor: \"rgb(53, 162, 235)\",\n backgroundColor: \"rgba(53, 162, 235, 0.5)\",\n });\n\n const interval = dateRange.endDate.getTime() - dateRange.startDate.getTime() >= 24 * 60 * 60 * 1000 // Verifica se o intervalo � de uma hora ou menos\n ? \"hour\" // Define a unidade de tempo para minutos\n : \"minute\"; // Define a unidade de tempo para horas\n\n return ;\n}\n\nexport function Chart2({ serial, options, dateRange }) {\n console.log(\"api.js Chart2\");\n const chartParams = [\"Setpoint02\", \"TemperaturaCamara2\"];\n console.log(\"api.js Chart2 chartParams\", chartParams);\n const { startDate, endDate } = dateRange;\n console.log(\"api.js Chart2 startDate, endDate, dateRange\", startDate, endDate, dateRange);\n \n const { isLoading, error, data } = useQuery(\n [\"param-history\", serial, startDate, endDate], \n () => api.getParamHistory(\"\", serial, chartParams, startDate, endDate)\n );\n \n console.log(\"api.js Chart2 isLoading, error, data\", isLoading, error, data);\n\n if (isLoading) {\n return (\n \n \n \n );\n }\n if (error) {\n return (\n \n \n Error\n \n \n Could not load chart data\n \n \n );\n }\n\n // const min = _.get(data.result[\"Setpoint02\"][0], \"value.Setpoint02.min\", -100);\n // const max = _.get(data.result[\"Setpoint02\"][0], \"value.Setpoint02.max\", 100);\n const unit = _.get(data, \"result.Setpoint02[0].value.Setpoint02.unit\", \"\"); // Extract unit from first value of Setpoint02 array\n const formattedSetpoint02 = data.result[\"Setpoint02\"].map((entry) => ({ x: new Date(entry.ts), y: entry.value[\"Setpoint02\"].current }));\n const formattedTemp = data.result[\"TemperaturaCamara2\"].map((entry) => ({ x: new Date(entry.ts), y: entry.value[\"TemperaturaCamara2\"] }));\n\n let datasets = [\n {\n label: \"Setpoint 2\",\n data: formattedSetpoint02,\n borderColor: \"rgb(255, 99, 132)\",\n backgroundColor: \"rgba(255, 99, 132, 0.5)\",\n },\n ];\n datasets.push({\n label: \"Temperatura 2\",\n data: formattedTemp,\n borderColor: \"rgb(53, 162, 235)\",\n backgroundColor: \"rgba(53, 162, 235, 0.5)\",\n });\n\n //const interval = \"minute\"; // Define a unidade de tempo para minutos\n const interval = dateRange.endDate.getTime() - dateRange.startDate.getTime() >= 24 * 60 * 60 * 1000 // Verifica se o intervalo � de um dia ou mais\n ? \"hour\" // Define a unidade de tempo para horas\n : \"minute\"; // Define a unidade de tempo para minutos\n\n return ;\n}\n","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","import React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport ListSubheader from \"@material-ui/core/ListSubheader\";\nimport List from \"@material-ui/core/List\";\nimport ListItem from \"@material-ui/core/ListItem\";\nimport ListItemIcon from \"@material-ui/core/ListItemIcon\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport Collapse from \"@material-ui/core/Collapse\";\nimport ExpandLess from \"@material-ui/icons/ExpandLess\";\nimport ExpandMore from \"@material-ui/icons/ExpandMore\";\nimport { format } from \"date-fns\";\n\nimport { grey } from \"@material-ui/core/colors\";\nimport ScheduleIcon from \"@material-ui/icons/Schedule\";\nimport CheckIcon from \"@material-ui/icons/Check\";\nimport CheckBoxOutlinedIcon from \"@material-ui/icons/CheckBoxOutlined\";\nimport ChevronRightOutlinedIcon from \"@material-ui/icons/ChevronRightOutlined\";\nimport ListItemSecondaryAction from \"@material-ui/core/ListItemSecondaryAction\";\nimport clsx from \"clsx\";\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n width: \"100%\",\n backgroundColor: theme.palette.background.paper,\n },\n nested: {\n paddingLeft: theme.spacing(4),\n backgroundColor: grey[50],\n },\n selected: {\n backgroundColor: grey[100],\n },\n selectedText: {\n color: theme.palette.secondary.main,\n },\n}));\n\nconst fmtTime = (date) => format(date, \"HH:mm:ss\");\n\nconst removeLastThreeCharacters = (str) => str.substring(0, str.length - 3);\n\nconst titleFromEntries = (entries) => {\n const first = entries[0];\n const last = entries[entries.length - 1];\n if (entries.length == 1) return removeLastThreeCharacters(first.label);\n return `${removeLastThreeCharacters(first.label)} - ${removeLastThreeCharacters(last.label)}`;\n};\n\nconst TEN_MINUTES_IN_MS = 1000 * 60 * 10;\n\nconst dayToSections = (day) => {\n const TIMESTAMP_KEY = \"localts\";\n if (!day || day.length == 0) return [];\n\n let last = null;\n let sections = [];\n let currentEntries = [];\n\n for (let i = 0; i < day.length; i++) {\n const row = day[i];\n const ts = row[TIMESTAMP_KEY];\n if (last != null) {\n const diff = Math.abs(ts - last);\n if (diff > TEN_MINUTES_IN_MS) {\n if (currentEntries) {\n sections.unshift({ label: titleFromEntries(currentEntries), entries: currentEntries });\n }\n currentEntries = [];\n }\n }\n last = ts;\n currentEntries.unshift({ index: i, label: fmtTime(new Date(row[TIMESTAMP_KEY])) });\n }\n\n sections.unshift({ label: titleFromEntries(currentEntries), entries: currentEntries });\n\n return sections;\n};\n\nexport default ({ day, onClick }) => {\n const classes = useStyles();\n const [open, setOpen] = React.useState({});\n const [sections, setSections] = React.useState(null);\n const [selectedTimeIndex, setSelectedTimeIndex] = React.useState(null);\n\n const sectionClick = (index) => {\n // setOpen({ ...open, [index]: !open[index] });\n setOpen({ [index]: !open[index] }); // close others\n };\n\n React.useEffect(() => {\n setSections(dayToSections(day));\n setOpen({});\n }, [day]);\n\n if (!sections) return \"loading\";\n\n return (\n \n {sections.map((section, index) => (\n
\n sectionClick(index)}>\n \n \n \n \n {open[index] ? : }\n \n \n \n {section.entries.map((entry, key) => (\n {\n setSelectedTimeIndex(entry.index);\n onClick(day[entry.index]);\n }}\n className={clsx(classes.nested, selectedTimeIndex === entry.index ? classes.selected : null)}\n >\n \n {selectedTimeIndex === entry.index && (\n \n \n \n )}\n \n ))}\n \n \n
\n ))}\n
\n );\n};\n","import React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Paper from \"@material-ui/core/Paper\";\n\nconst useStyles = makeStyles({\n table: {\n minWidth: 10,\n },\n tinyRow: {\n fontSize: 10,\n lineHeight: 1.3,\n padding: 4,\n },\n});\n\nexport default function MiniTable({ rows }) {\n const classes = useStyles();\n\n return (\n \n \n \n {rows.map((row) => (\n \n \n {row.label}\n \n \n {row.value}\n \n \n ))}\n \n
\n
\n );\n}\n","import React, { useEffect, useRef, ReactElement } from \"react\";\nimport { MapContainer, TileLayer, Marker, Popup } from \"react-leaflet\";\nimport * as api from \"../api\";\nimport { useQuery } from \"react-query\";\nimport _ from \"lodash\";\nimport { format, formatDistanceToNow, parse } from \"date-fns\";\nimport L from \"leaflet\";\n\nimport markerImage from \"./marker.png\";\nimport markerImageOffline from \"./marker-offline.png\";\nimport { Box, Grid, CircularProgress, Typography, Button } from \"@material-ui/core\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport KeyboardArrowLeft from \"@material-ui/icons/KeyboardArrowLeft\";\nimport KeyboardArrowRight from \"@material-ui/icons/KeyboardArrowRight\";\nimport DaySections from \"./DaySections\";\nimport MiniTable from \"./MiniTable\";\n\nfunction tryFormatDistance(ts) {\n try {\n return formatDistanceToNow(ts, { addSuffix: true });\n } catch (error) {\n return \"--\";\n }\n}\n\nconst getCustomMarker = (isOnline) => {\n return new L.icon({\n iconUrl: isOnline ? markerImage : markerImageOffline,\n iconRetinaUrl: isOnline ? markerImage : markerImageOffline,\n iconSize: [150 / 4, 201 / 4],\n popupAnchor: [0, -201 / 8],\n });\n};\n\nconst dateWithoutTime = (entry) => {\n if (entry.ts) {\n let d = new Date(entry.ts);\n return format(d, \"yyyy-MM-dd\");\n }\n return \"invalid\";\n};\n\nexport const App = ({ serial, isOnline, popupText }) => {\n const { error, isLoading, data } = useQuery([\"history\", serial], api.getHistory, { staleTime: 1000 * 60 * 10 });\n \n // [Stefano] 28-07-2023 correcao para ler a ultima posicao do caminhao, na verdade e'a primeira da lista\n //const lastPosition = _.get(data, \"result.position[data.result.position.length - 1]\");\n const lastPosition = _.get(data, \"result.position[0]\");\n \n const lat = _.get(lastPosition, \"value.latitude\");\n const lng = _.get(lastPosition, \"value.longitude\");\n const ts = _.get(lastPosition, \"localts\");\n const relativeDate = tryFormatDistance(ts);\n\n if (isLoading) {\n return (\n \n \n \n );\n }\n\n if (error || lat == null || lng == null) {\n return (\n \n \n Error\n \n \n Could not load position data\n \n \n );\n }\n\n return (\n \n \n \n \n
\n {serial}\n
\n
\n Last online {relativeDate}\n
\n
\n
\n
\n );\n};\n\nconst formatDayOnly = (dateString) => {\n if (!dateString) return \"--\";\n try {\n const date = parse(dateString, \"yyyy-MM-dd\", new Date());\n return format(date, \"PP\");\n // return format(date, \"dd MMM yyyy\");\n } catch (error) {\n return \"---\";\n }\n};\n\nconst MarkerData = ({ dateString, EntregaActive, EstadoControleCode, Setpoint01Current, Setpoint02Current, TemperaturaCamara1, TemperaturaCamara2 }) => {\n return (\n \n );\n};\n\nexport const MapWithSlider = ({ serial, isOnline, popupText }) => {\n const { error, isLoading, data } = useQuery([\"history\", serial], api.getHistory, { staleTime: 1000 * 60 * 10 });\n const positions = _.get(data, \"result.position\");\n //const lastPosition = _.get(data, \"result.position[${lengthPosition}]\");\n //const lastPosition = _.get(data, \"result.position[result.position.length - 1]\");\n const lastPosition = positions ? positions[positions.length - 1] : null;\n const lat = _.get(lastPosition, \"value.latitude\");\n const lng = _.get(lastPosition, \"value.longitude\");\n const ts = _.get(lastPosition, \"localts\");\n const relativeDate = tryFormatDistance(ts);\n\n const [days, setDays] = React.useState([]);\n const [indexDaySelected, setIndexDaySelected] = React.useState(0);\n const [dataByday, setDataByDay] = React.useState(null);\n const [selectedDay, setSelectedDay] = React.useState(null);\n const [extraMarker, setCustomMarker] = React.useState(null);\n\n useEffect(() => {\n if (data && data.result && data.result.position) {\n const grouped = _.groupBy(data.result.position, dateWithoutTime);\n let days = Object.keys(grouped);\n days.sort((a, b) => b - a);\n setDays(days);\n setDataByDay(grouped);\n }\n }, [data]);\n\n useEffect(() => {\n if (dataByday && days && dataByday[days[indexDaySelected]]) {\n setSelectedDay(dataByday[days[indexDaySelected]]);\n }\n }, [dataByday, days, indexDaySelected]);\n\n // [Stefano] Definindo o �ndice do dia selecionado como o �ltimo dia dispon�vel\n useEffect(() => {\n if (days && days.length > 0) {\n setIndexDaySelected(days.length - 1);\n }\n }, [days]);\n\n if (isLoading) {\n return (\n \n \n \n );\n }\n\n if (error || lat == null || lng == null) {\n return (\n \n \n Error\n \n \n Could not load position data\n \n \n );\n }\n\n const handleClick = (row) => {\n console.log({ row });\n setCustomMarker({ ...row.value, ...row.vip });\n };\n\n const selectPreviousDay = () => setIndexDaySelected(Math.max(0, indexDaySelected - 1));\n const selectNextDay = () => setIndexDaySelected(Math.min(days.length - 1, indexDaySelected + 1));\n\n return (\n \n \n \n \n \n ev.preventDefault()} align=\"center\" variant=\"h6\" style={{ color: \"#666\", fontWeight: 600, fontSize: \"1vw\" }}>\n {days && days.length > 0 ? formatDayOnly(days[indexDaySelected]) : \"--\"}\n \n \n \n \n \n \n \n \n\n \n \n \n \n \n
\n {serial}\n
\n
\n Last online {relativeDate}\n
\n
\n
\n {extraMarker && (\n \n \n
\n {serial}\n \n
\n
\n
\n )}\n
\n
\n
\n );\n};\n","import CssBaseline from \"@material-ui/core/CssBaseline\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport React from \"react\";\nimport { Drawer } from \"../../components/Drawer\";\nimport Typography from \"@material-ui/core/Typography\";\n\nexport const Wrapper = ({ children }) => {\n const classes = useStyles();\n\n return (\n
\n \n \n
{children}
\n
\n );\n};\n\nexport const message = (msg) => {\n return (\n \n \n {msg}\n \n \n );\n};\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n },\n content: {\n flexGrow: 1,\n backgroundColor: theme.palette.background.default,\n padding: theme.spacing(3),\n },\n}));\n","import { differenceInMinutes, parseISO } from \"date-fns\";\nimport _ from \"lodash\";\n\nexport function getInitiais(info) {\n const { name, email, phone } = info;\n if (name) {\n const words = name.trim().split(\" \");\n if (words.length == 1) {\n return words[0].slice(0, 1).toUpperCase();\n } else {\n const first_name = words[0];\n const last_name = words[words.length - 1];\n const initials = first_name.slice(0, 1) + last_name.slice(0, 1);\n return initials.toUpperCase();\n }\n } else if (email) {\n return email.trim().slice(0, 1).toUpperCase();\n }\n return null;\n}\n\nexport function humanFileSize(bytes, si = false, dp = 1) {\n const thresh = si ? 1000 : 1024;\n\n if (Math.abs(bytes) < thresh) {\n return bytes + \" B\";\n }\n\n const units = si ? [\"kB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"] : [\"KiB\", \"MiB\", \"GiB\", \"TiB\", \"PiB\", \"EiB\", \"ZiB\", \"YiB\"];\n let u = -1;\n const r = 10 ** dp;\n\n do {\n bytes /= thresh;\n ++u;\n } while (Math.round(Math.abs(bytes) * r) / r >= thresh && u < units.length - 1);\n\n return bytes.toFixed(dp) + \" \" + units[u];\n}\n\nexport const enumToBoolean = (value) => {\n try {\n const options = _.get(value, \"options\");\n const selected = _.get(value, \"selected\", 0);\n return options[selected] == \"Habilita\" || options[selected] == \"Enable\";\n } catch (error) {\n return false;\n }\n};\n\nexport const decodeSetpoint = (props) => {\n const { updated_at, params } = props;\n const { EstadoControle, HabilitaSensorTemperaturaCamara2, Setpoint01, Setpoint02, TemperaturaCamara1, TemperaturaCamara2 } = params;\n\n const chamber2 = enumToBoolean(HabilitaSensorTemperaturaCamara2);\n const isOnline = differenceInMinutes(new Date(), parseISO(updated_at)) <= 1;\n const setpoint1 = Setpoint01 == null ? \"--\" : _.get(Setpoint01, \"current\") + \" \" + _.get(Setpoint01, \"unit\");\n const setpoint2 = Setpoint02 == null ? \"--\" : _.get(Setpoint02, \"current\") + \" \" + _.get(Setpoint02, \"unit\");\n const temp1 = TemperaturaCamara1 == null ? \"--\" : TemperaturaCamara1 + \" \" + _.get(Setpoint01, \"unit\");\n const temp2 = TemperaturaCamara2 == null ? \"--\" : TemperaturaCamara2 + \" \" + _.get(Setpoint02, \"unit\");\n const controle = _.get(EstadoControle, \"description\", \"\\u00A0\");\n\n return {\n chamber2,\n isOnline,\n setpoint1,\n setpoint2,\n temp1: temp1 || \"--\",\n temp2: temp2 || \"--\",\n controle,\n };\n};\n\nexport const normalizeValue = (val) => {\n if (val == null) return null;\n const num = Number(val);\n if (Number.isNaN(num)) return val;\n return num;\n};\n","import React, { useState } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Button from \"@material-ui/core/Button\";\nimport Dialog from \"@material-ui/core/Dialog\";\nimport DialogActions from \"@material-ui/core/DialogActions\";\nimport DialogContent from \"@material-ui/core/DialogContent\";\nimport DialogContentText from \"@material-ui/core/DialogContentText\";\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport InputLabel from \"@material-ui/core/InputLabel\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport Select from \"@material-ui/core/Select\";\nimport Switch from \"@material-ui/core/Switch\";\nimport { useEffect } from \"react\";\nimport { Box, InputAdornment, TextField } from \"@material-ui/core\";\n\nconst useStyles = makeStyles((theme) => ({\n form: {\n display: \"flex\",\n flexDirection: \"column\",\n margin: \"auto\",\n width: \"fit-content\",\n },\n formControl: {\n marginTop: theme.spacing(2),\n minWidth: 120,\n },\n formControlLabel: {\n marginTop: theme.spacing(1),\n },\n}));\n\nconst EnumValue = ({ value, options, onChange }) => {\n return (\n \n );\n};\n\nconst MinMaxValue = ({ value, min, max, unit, onChange, onKeyUp }) => {\n const handleChange = (event) => {\n onChange(event.target.value);\n };\n\n let InputProps = {\n style: { fontSize: \"2rem\" },\n };\n if (unit) {\n InputProps.endAdornment = (\n \n {unit}\n \n );\n }\n\n return (\n
\n {\n if (ev.key === \"Enter\") {\n ev.preventDefault();\n onKeyUp(ev);\n }\n }}\n />\n \n \n Min: {min} {unit}\n \n \n Máx: {max} {unit}\n \n \n
\n );\n};\n\nconst getValue = (v, pending) => {\n if (v == null) return \"invalid\";\n if (pending) return pending;\n if (typeof v != \"object\") return v;\n if (v.tipo == \"minmax\") return v.current;\n if (v.tipo == \"enum\") return v.selected;\n \n // [Stefano] 28-07-2023 ate entender porque, retorna um valor normal\n //throw new Error(\"Unknown type\", v.tipo);\n return \"invalid\";\n};\n\nconst validateMinMax = (value, min, max) => {\n if (value == null) return false;\n if (typeof value == \"string\" && value.trim().length == 0) return false;\n const numberValue = parseFloat(value);\n if (typeof numberValue != \"number\") return false;\n if (numberValue < min || numberValue > max) return false;\n return true;\n};\nconst validateEnum = (value, options) => {\n if (value == null) return false;\n if (Number.isNaN(value)) return false;\n if (!options) return false;\n if (value < 0 || value >= options.length) return false;\n return true;\n};\n\nexport const ParamChanger = ({ param, description, value, open, handleClose, onSave, pendingValue }) => {\n const classes = useStyles();\n const [selected, setSelected] = useState(null);\n const [valid, setValid] = useState(false);\n\n const onChange = (event) => {\n console.log(\"onchange\", event.target.value);\n };\n\n useEffect(() => {\n if (open) {\n setSelected(getValue(value, pendingValue));\n }\n }, [open, pendingValue]);\n\n useEffect(() => {\n if (value && value.tipo) {\n if (value.tipo == \"minmax\") setValid(validateMinMax(selected, value.min, value.max));\n else if (value.tipo == \"enum\") setValid(validateEnum(selected, value.options));\n else setValid(selected != null);\n }\n }, [value, selected]);\n\n const onKeyUp = (e) => {\n if (e.keyCode === 13) {\n e.preventDefault();\n onSave(selected);\n }\n };\n\n return (\n \n {description}\n \n Selecione um novo valor para o parâmetro\n {/*
{JSON.stringify({ selected, options: value ? value.options : \"--\" })}
*/}\n
\n \n {value && value.tipo == \"enum\" ? : null}\n {value && value.tipo == \"minmax\" ? (\n \n ) : null}\n \n {/* } label=\"Full width\" /> */}\n \n
\n \n \n \n \n
\n );\n};\n","import Chip from \"@material-ui/core/Chip\";\nimport DoneIcon from \"@material-ui/icons/Done\";\nimport ReportProblemIcon from \"@material-ui/icons/ReportProblem\";\nimport { createStyles, createTheme, makeStyles } from \"@material-ui/core/styles\";\n\nimport clsx from \"clsx\";\nimport * as React from \"react\";\nimport { Box } from \"@material-ui/core\";\nimport { grey, yellow } from \"@material-ui/core/colors\";\n\nconst defaultTheme = createTheme();\nconst useStyles = makeStyles(\n (theme) =>\n createStyles({\n root: {\n fontWeight: \"bold\",\n borderRadius: 5,\n },\n Offline: {\n color: \"#888\",\n backgroundColor: `rgba(0,0,0,0.05)`,\n },\n Online: {\n color: theme.palette.success.main,\n backgroundColor: `rgba(0,255,0,0.1)`,\n },\n Pending: {\n color: yellow[800],\n backgroundColor: grey[100], //yellow[100],\n },\n }),\n { defaultTheme }\n);\n\nexport const ChipStatus = ({ online }) => {\n const classes = useStyles();\n if (online) {\n return (\n \n ONLINE\n \n );\n }\n return (\n \n OFFLINE\n \n );\n};\n\nexport const ChipPending = ({ pending }) => {\n const classes = useStyles();\n if (pending) {\n return (\n \n PENDING\n \n );\n }\n return
;\n};\n","// prettier-ignore\nexport const labels = {\n EMBREAGEM_EVAPORADOR: [ \"Embreagem evaporador\" ,\"Embrague del evaporador\" , \"Evaporator clutch\"] ,\n VALVULA_DE_CAPACIDADE_1: [ \"Válvula de capacidade 1\" , \"Válvula de capacidad 1\" , \"Capacity valve 1\"] ,\n VALVULA_DE_CAPACIDADE_2: [ \"Válvula de capacidade 2\" , \"Válvula de capacidad 2\" , \"Capacity valve 2\"] ,\n VENTILADOR_CONDENSADOR_1_2: [ \"Ventilador 1 e 2 do Condensador\" , \"Ventilador del condensador 1 y 2\" , \"Condenser Fan 1 and 2\"] ,\n VENTILADOR_3: [ \"Ventilador 3\" , \"Ventilador 3\" , \"Fan 3\"] ,\n SOLENOIDE_1: [ \"Solenoide 1\" , \"Solenoide 1\" , \"Solenoid 1\" ] ,\n SOLENOIDE_2: [ \"Solenoide 2\" , \"Solenoide 2\" , \"Solenoid 2\"] ,\n SOLENOIDE_3: [ \"Solenoide 3\" , \"Solenoide 3\" , \"Solenoid 3\"] ,\n VENTILADOR_1_e_2_CONDENSADOR: [ \"Condensador 1 e 2\" , \"Condensador 1 y 2\" , \"Condenser 1 and 2\"] ,\n SENSOR_PORTA: [ \"Sensor de porta\" , \"Sensor de puerta\" , \"Door sensor\" ] ,\n PRESSOSTATO_ALTA: [ \"Pressostato de alta\" , \"Presostato de alta\" , \"High pressure switch\" ] ,\n PRESSOSTATO_BAIXA: [ \"Pressostato de baixa\" , \"Presostato de baja\" , \"Low pressure switch\" ] ,\n TEMPERATURA_SUCCAO: [ \"Temperatura de Sucção\" , \"Temperatura de succión\" , \"Suction Temperature\" ] ,\n PRESSAO_ALTA: [ \"Pressão alta\" , \"Presión alta\" , \"High pressure\" ] ,\n PRESSAO_BAIXA: [ \"Pressão Baixa\" , \"Presión Baja\" , \"Low pressure\" ] ,\n ALTERNADOR_D_MAIS: [ \"D+\" , \"D+\" , \"D+\" ] ,\n ROTACAO_MOTOR: [ \"Rotação do motor\" , \"Rotación del motor\" , \"Motor rotation\" ] ,\n VERSAO_PAINEL: [ \"Versão do Painel\" , \"Versión del panel\" , \"Panel version\" ] ,\n VERSAO_PANINEL_BOOTLOADER: [ \"Versão do Bootloader Painel\" , \"Versión del bootloader panel\" , \"Bootloader Panel Version\" ] ,\n VENSAO_BLE: [ \"Versão do BLE\" , \"Versión del BLE\" , \"BLE Version\" ] ,\n HORAS: [ \"Hora\" , \"Hora\" , \"Hour\" ] ,\n MINUTOS: [ \"Minutos\" , \"Minutos\" , \"Minutes\" ] ,\n SEGUNDOS: [ \"Segundos\" , \"Segundos\" , \"Seconds\" ] ,\n DIA_SEMANA: [ \"Dia da semana\" , \"Día de la semana\" , \"Day of the week\" ] ,\n DIA_MES: [ \"Dia do mês\" , \"Día del mes\" , \"Day\" ] ,\n MES: [ \"Mês\" , \"Mes\" , \"Month\" ] ,\n ANO: [ \"Ano\" , \"Año\" , \"Year\" ] ,\n VERSAO_REFRIGERACAO: [ \"Versão do modulo refrigeração\" , \"Versión del modulo refrigeración\" , \"Cooling module version\" ] ,\n VERSAO_REFRIGERACAO_BOOTLOADER: [ \"Versão do bootloader refrigeração\" , \"Versión del bootloader refrigeración\" , \"Cooling bootloader version\" ] ,\n TENSAO_RS: [ \"Tensão entre fases R e S\" , \"Tensión entre fases R & S\" , \"Voltage between phases R and S\" ] ,\n TENSAO_RT: [ \"Tensão entre fases R e T\" , \"Tensión entre fases R & T\" , \"Voltage between phases R and T\" ] ,\n TENSAO_ST: [ \"Tensão entre fases S e T\" , \"Tensión entre fases S & T\" , \"Voltage between phases S and T\" ] ,\n FREQUENCIA_REDE: [ \"Frequência da rede\" , \"Frecuencia de la red\" , \"Frequency\" ] ,\n SENSOR_UMIDADE: [ \"Umidade\" , \"Humedad\" , \"Humidity\" ] ,\n VENTILACAO: [ \"Ventilador 1 do evaporador câmara 1\", \"Ventilador 1 evaporador cámara 1\" , \"Evaporator fan 1 chamber 1\" ] ,\n VENTILACAO_2: [ \"Ventilador 2 do evaporador câmara 1\", \"Ventilador 2 evaporador cámara 1\" , \"Evaporator fan 2 chamber 1\" ] ,\n VENTILACAO_1_2: [ \"Ventilador 1 do evaporador câmara 2\", \"Ventilador 1 evaporador cámara 2\" , \"Evaporator fan 1 chamber 2\" ] ,\n DEGELO: [ \"Degelo\" , \"Deshielo\" , \"Defrost\" ] ,\n SELECAO_TENSAO: [ \"Seleção de tensão\" , \"Selección de tensión\" , \"Voltage selection\" ] ,\n INVERSAO_FASE: [ \"Inversão de fase\" , \"Inversión de fase\" , \"Phase inversion\" ] ,\n SEQUENCIAMENTO_FASES: [ \"Sequenciamento de fases\" , \"Secuencia de fase\" , \"Phase sequencing\" ] ,\n ACIONAMENTO_MOTOR: [ \"Motor elétrico\" , \"Motor eléctrico\" , \"Eletric motor\" ] ,\n HABILITA_TRAFO: [ \"Habilita trafo\" , \"Habilita trafo\" , \"Habilita_trafo\" ] ,\n EMERGENCIA: [ \"Emergência\" , \"Emergencia\" , \"Emergency\" ] ,\n TENSAO_BATERIA: [ \"Bateria\" , \"Bateria\" , \"Battery\" ] ,\n TENSAO_BATERIA_LITIO: [ \"Tensão da Bateria de Lítio\" , \"Voltaje de la batería de litio\" , \"Lithium Battery Voltage\" ] ,\n NIVEL_CARGA_BATERIA_LITIO: [ \"Nivel de Carga Da Bateria de Lítio\" , \"Nivel de carga de la batería de litio\", \"Lithium Battery Charge Level\" ] ,\n SOLENOIDE_BOMBA_INJETORA: [ \"Solenoide bomba injetora\" , \"Solenoide de la bomba\" , \"Solenoid injection pump\" ] ,\n ALIVIO: [ \"Alívio\" , \"Alivio\" , \"Relief\" ] ,\n SOLENOIDE_PARTIDA: [ \"Solenoide partida\" , \"Solenoide partida\" , \"Starting solenoid\" ] ,\n BOMBA_COMBUSTIVEL: [ \"Bomba combustível\" , \"Bomba combustible\" , \"Fuel pump\" ] ,\n AQUECIMENTO_CAMERA_COMBUSTAO: [ \"Aquecimento câmera combustão\" , \"Calentamento cámara de combustión\" , \"Heating combustion camera\" ] ,\n ACELERACAO_MOTOR: [ \"Aceleração do Motor\" , \"Aceleración del motor\" , \"Engine Acceleration\" ] ,\n SIRENE: [ \"Sirene\" , \"Alarma\" , \"Siren\" ] ,\n EXITACAO_ALTERNADOR: [ \"Excitação do Alternador\" , \"Exitación del alternador\" , \"Alternator Excitation\" ] ,\n TEMPERATURA_AGUA_MOTOR_DIESEL: [ \"Temperatura da água do motor diesel\", \"Temperatura del agua del motor diesel\", \"Diesel engine water temperature\" ] ,\n NIVEL_AGUA_MOTOR: [ \"Nível de água motor\" , \"Nível del agua motor\" , \"Engine water level\" ] ,\n PRESSOSTATO_OLEO: [ \"Pressostato de óleo\" , \"Presostato de aceite\" , \"Oil Pressure Switch\" ] ,\n TEMPERATURA_YANMAR: [ \"Temperatura motor yanmar\" , \"Temperatura del motor yanmar\" , \"Yanmar engine temperature\" ] ,\n TEMPERATURA_CABINE_1: [ \"Temperatura câmara 1\" , \"Temperatura cámara 1\" , \"Chamber Temperature 1\" ] ,\n TEMPERATURA_CABINE_2: [ \"Temperatura câmara 2\" , \"Temperatura cámara 2\" , \"Chamber Temperature 2\" ] ,\n TEMPERATURA_DE_SUPRIMENTO: [ \"Temperatura de Suprimento\" , \"Temperatura de suministro\" , \"Supply Temperature\" ] ,\n TEMPERATURA_EVAPORADOR_1_CABINE: [ \"Temperatura de serpentina\" , \"Temperatura de serpentina\" , \"Coil sensor\" ] ,\n ENTRADA_RELE_TERMICO: [ \"Entrada relé térmico\" , \"Entrada de relé térmico\" , \"Thermal relay input\" ] ,\n VALVULA_LIQUIDO_CAMARA_2: [ \"Válvula líquido câmara 2\" , \"Valvula líquida cámara 2\" , \"Liquid Valve Chamber 2\" ] ,\n HORIMETRO_ELETRICO: [ \"Horimetro elétrico\" , \"Horimetro electrico\" , \"Electric horimeter\" ] ,\n HORIMETRO_DIESEL: [ \"Horimetro diesel\" , \"Horimetro diesel\" , \"Diesel horimeter\" ] ,\n HORIMETRO_ACOPLADO: [ \"Horimetro acoplado\" , \"Horimetro acoplado\" , \"Coupled horimeter\" ] ,\n EVAPORADOR_1_APOLLO: [ \"Ventilador 1 do evaporador câmara 1\", \"Ventilador 1 del evaporador cámara 1\" , \"Evaporator Fan 1 zone 1\" ] ,\n EVAPORADOR_2_APOLLO: [ \"Ventilador 2 do evaporador câmara 1\", \"Ventilador 2 del evaporador cámara 1\" , \"Evaporator Fan 2 zone 1\" ] ,\n EVAPORADOR_3_APOLLO: [ \"Ventilador 3 do evaporador câmara 1\", \"Ventilador 3 del evaporador cámara 1\" , \"Evaporator Fan 3 zone 1\" ] ,\n CONDENSADOR_1_APOLLO: [ \"Ventilador 1 do Condensador\" , \"Ventilador 1 do Condensador\" , \"Blower 1 condenser\" ] ,\n CONDENSADOR_2_APOLLO: [ \"Ventilador 2 do Condensador\" , \"Ventilador 2 do Condensador\" , \"Blower 2 condenser\" ] ,\n COMPRESSOR_ACOPLADO_APOLLO: [ \"Compressor\" , \"Compresor\" , \"Clutch\" ] ,\n DEGELO_APOLLO: [ \"Degelo\" , \"Deshielo\" , \"Defrost\" ] ,\n PRESSOSTATO_CONDENSADOR: [ \"Pressostato do Condensador\" , \"Pressostato do Condensador\" , \"Pressostato do Condensador\"] ,\n STANDBY_MOTOR_ELETRICO_APOLLO: [ \"Standby motor elétrico\" , \"Standby motor eléctrico\" , \"Stand-by eletric motor\" ] ,\n AQUECIMENTO_APOLLO: [ \"Aquecimento\" , \"Calefacción\" , \"Heating\" ] ,\n AQUECIMENTO_FLEX: [ \"Aquecimento\" , \"Calefacción\" , \"Heating\" ] ,\n SELECAO_220_380_APOLLO: [ \"Seleção de tensão\" , \"Selección de voltaje\" , \"Voltage selection\" ] ,\n MOTOR_ELETRICO: [ \"Motor elétrico\" , \"Motor eléctrico\" , \"Eletric motor\" ] ,\n HABILITA_TRAFO_APOLLO: [ \"Habilita trafo\" , \"Habilita trafo\" , \"Enable transformer\" ] ,\n TEMPERATURA_RETORNO: [ \"Temperatura câmara 1\" , \"Temperatura cámara 1\" , \"Chamber Temperature 1\" ] ,\n TEMPERATURA_ADICIONAL: [ \"Temperatura câmara 2\" , \"Temperatura cámara 2\" , \"Chamber Temperature 2\" ] ,\n TEMPERATURA_SUCCAO_APOLLO: [ \"Temperatura de sucção\" , \"Temperatura de succión\" , \"Suction temperature\" ] ,\n TRANSDUTOR_PRESSAO_ALTA_APOLLO: [ \"Pressão alta\" , \"Presion alta\" , \"High pressure\" ] ,\n TRANSDUTOR_PRESSAO_BAIXA_APOLLO: [ \"Pressão baixa\" , \"Pression baja\" , \"Low pressure\" ] ,\n SENSOR_PORTA_APOLLO: [ \"Sensor de porta\" , \"Sensor de puerta\" , \"Door sensor\" ] ,\n EMERGENCIA_APOLLO: [ \"Emergência\" , \"Emergencia\" , \"Emergency\" ] ,\n PRESSOSTATO_ALTA_APOLLO: [ \"Pressostato de alta\" , \"Presostato de alta\" , \"High pressure switch\" ] ,\n PRESSOSTATO_BAIXA_APOLLO: [ \"Pressostato de baixa\" , \"Presostato de baja\" , \"Low pressure switch\" ] ,\n RELE_TERMICO: [ \"Relé Térmico\" , \"Entrada de relé térmico\" , \"Thermal relay input\" ] ,\n ADICIONAL_SEGUNDA_CAMERA_SAIDA_APOLLO: [ \"Saída Adicional segunda câmera\" , \"Salida Adicional segunda cámara\" , \"Additional output second chamber\"] ,\n TEXTO_TEMPO_PARA_DEGELO: [ \"Tempo para degelo\" , \"Tiempo para deshielo\" , \"Time for defrost\"] ,\n TEXTO_NUMERO_SERIAL: [ \"N° de Série\" , \"N° de Serie\" , \"Serial No.\" ] ,\n TEXTO_MENU_PARAMETROS: [ \"Parâmetros\" ,\"Parámetros\" ,\"Parameters\"] ,\n TEXTO_MENU_VISUALIZACAO: [ \"Visualização\" ,\"Visualización\" ,\"Visualization\"] ,\n TEXTO_MENU_FALHAS: [ \"Falhas\" ,\"Fallas\" ,\"Failure\"] ,\n TEXTO_MENU_MODO_TESTE: [ \"Modo de Teste\" ,\"Modo Prueba\" ,\"Test mode\"] ,\n TEXTO_MENU_DATA_LOG: [ \"Data Log\" ,\"Data Log\" ,\"Data Log\"] ,\n TEXTO_MENU_BOOTLOADER: [ \"Bootloader módulos remotos\" ,\"Bootloader modulos remotos\" ,\"Remote module bootloader\"] ,\n TEXTO_BACK_LIGHT: [ \"Backlight \" ,\"Luz fondo\" ,\"Backlight\"] ,\n TEXTO_BLUETOOTH: [ \"Bluetooth\" ,\"Bluetooth\" ,\"Bluetooth\"] ,\n TEXTO_MENU_MODELO_MAQUINA: [ \"Modelo de máquina\" ,\"Modelo de máquina\" ,\"Machine model\"] ,\n TEXTO_TIPO_PROCESSO: [ \"Tipo de processo\" ,\"Tipo de proceso\" ,\"Process type\"] ,\n TEXTO_MENU_EDIT_N_SERIAL: [ \"Editar N° Serial\" ,\"Editar N° Serial\" ,\"Edit serial number\"] ,\n TEXTO_IDIOMA: [ \"Idioma\" ,\"Idioma\" ,\"Language\"] ,\n TEXTO_ESTADO_INICIAL_BLE: [ \"Estado inicial do BLE\" ,\"Estado inicial do BLE\" ,\"Initial state of BLE\"] ,\n TEXTO_MINIMA_TEMPERATURA_SETPOINT: [ \"Mínima temperatura de setpoint\" ,\"Mínima temperatura del setpoint\" ,\"Minimum setpoint temperature\"] ,\n TEXTO_MAXIMA_TEMPERATURA_SETPOINT: [ \"Máxima temperatura de setpoint\" ,\"Máxima temperatura del setpoint\" ,\"Maximum setpoint temperature\"] ,\n TEXTO_AJUSTE_HORAS: [ \"Ajuste da hora\" ,\"Ajuste de hora\" ,\"Hours setting\"] ,\n TEXTO_AJUSTE_MINUTOS: [ \"Ajuste do minuto\" ,\"Ajuste de minuto\" ,\"Minutes setting\"] ,\n TEXTO_AJUSTE_ANO: [ \"Ajuste do ano\" ,\"Ajuste de año\" ,\"Year setting\"] ,\n TEXTO_AJUSTE_MES: [ \"Ajuste do mês\" ,\"Ajuste de mes\" ,\"Month setting\"] ,\n TEXTO_AJUSTE_DIA: [ \"Ajuste do dia do mês\" ,\"Ajuste de día del mes\" ,\"Day setting\"] ,\n TEXTO_OFFSET_CABINE_1: [ \"Offset sensor câmara 1\" ,\"Offset del sensor cámara 1\" ,\"Chamber sensor offset 1\"] ,\n TEXTO_HABILITA_SENSOR_SERPENTINA: [ \"Habilita sensor de serpentina\" ,\"Habilita sensor de serpentina\" ,\"Enable coil temperature\"] ,\n TEXTO_HABILITA_PORTA: [ \"Habilita sensor de porta\" ,\"Habilita sensor de puerta\" ,\"Enable door sensor\"] ,\n TEXTO_TEMPO_MAXIMO_REFRIGERACAO: [ \"Tempo máximo de refrigeração\" ,\"Tiempo máximo de refrigeración\" ,\"Maximun cooling time\"] ,\n TEXTO_TEMPO_MAXIMO_DEGELO: [ \"Tempo máximo de degelo\" ,\"Tiempo maximo de deshielo\" ,\"Maximum defrost time\"] ,\n TEXTO_TEMPERATURA_MOTOR_LIGAR: [ \"Temperatura do motor para ligar\" ,\"Temperatura del motor para enceder\" ,\"Temperature to switch on engine\"] ,\n TEXTO_TEMPERATURA_MOTOR_DESLIGA: [ \"Temperatura do motor para desligar\" ,\"Temperatura del motor para apagar\" ,\"Engine shut down temperature\"] ,\n TEXTO_TEMPO_GOTEJAMENTO: [ \"Tempo de gotejamento\" ,\"Tiempo de goteo\" ,\"Drip time\"] ,\n TEXTO_TEMPO_PRE_REFRIGERACAO: [ \"Tempo de pré-refrigeração\" ,\"Tiempo de pre-refrigeración\" ,\"Pre-cooling time\"] ,\n TEXTO_TIPO_DEGELO: [ \"Tipo de degelo\" ,\"Tipo de deshielo\" ,\"Type of defrost\"] ,\n TEXTO_MODO_DEGELO: [ \"Modo de degelo\" ,\"Modo de deshielo\" ,\"Defrost mode\"] ,\n TEXTO_HABILITA_DATA_HORA: [ \"Habilita ajuste da hora e data ao inicializar\",\"Habilitar ajuste de hora y fecha al iniciar\",\"Enable time and date setting when initializing\"],\n TEXTO_HISTERESE: [ \"Histerese de temperatura para acionamento do compressor\",\"Histeresis de temperatura para accionamento del compressor\",\"Temperature hysteresis for turn on clutch\"],\n HABILITA_SENSOR_TEMPERATURA_CAMERA_2: [ \"Habilita sensor temperatura câmara 2\",\"Habilita sensor de temperatura de la cámara 2\",\"Enables temperature sensor camera 2\"],\n TEXTO_TEMPERATURA_HABILITA_DEGELO: [ \"Temperatura sucção para habilitar degelo\",\"Temperatura sucção para habilitar deshielo\",\"Suction temperature to enable defrost\"],\n TEXTO_TEMPERATURA_INIBE_FALTA_DECREMENTO: [ \"Temperatura que inibe o degelo por falta de decremento da temperatura de sucção\",\"Temperatura que inhibe el deshielo por falta de decremento de la temperatura de succión\",\"Temperature that inhibits defrost due to lack of suction temperature decrease\"],\n TEXTO_TEMPERATURA_FIM_DEGELO: [ \"Temperatura sucção para fim do degelo\",\"Temperatura sucção para fin de deshielo\",\"Suction defrost end temperature\"],\n TEXTO_MOTOR_SEM_AQUECIMENTO: [ \"Temperatura do motor sem pré-aquecimento\",\"Temperatura del motor sin pre-calentamiento\",\"Engine temperature without preheating\"],\n TEXTO_TEMPO_SEM_DECREMENTO_TEMPERATURA: [ \"Tempo sem decremento da temperatura de sucção\",\"Tiempo sin decremento de la temperatura de succión\",\"Time without decreasing suction temperature\"],\n TEXTO_TEMPO_PORTA_ABERTA: [ \"Tempo de porta aberta para desligar compressor\",\"Tiempo de puerta abierta para apagar compressor\",\"Open port time to turn off compressor\"],\n TEXTO_RPM_MOTO: [ \"RPM para detectar motor ligado\",\"RPM para detectar motor en marcha\",\"RPM to detect engine running\"],\n TEXTO_ESTADO_VENTILACAO_REFRIGERACAO_OFF: [ \"Estado da ventilação com refrigeração desligada\",\"Estado de ventilación con refrigeración apagada\",\"Condition of ventilation with cooling off\"],\n ESTADO_VENTILACAO_DEGELO_ATIVO: [ \"Estado da ventilação com degelo ativo\",\"Estado de la ventilación con deshielo activo\",\"Condition of ventilation with defrost on\"],\n TEXTO_ESTADO_COMPRESSOR_GOTEJAMENTO: [ \"Estado do compressor com gotejamento ativo\",\"Estado del compressor con goteo activo\",\"Condition of ventilation with drip on\"],\n TEXTO_TENSAO_MINIMA_220V: [ \"Tensão mínima de funcionamento em 220V\",\"Tensión mínima de operación en 220V\",\"Minimum operating voltage at 220V\"],\n TEXTO_TENSAO_MINIMA_380V: [ \"Tensão mínima de funcionamento em 380V\",\"Tensión mínima de operación en 380V\",\"Minimum operating voltage at 380V\"],\n TEXTO_TENSAO_MAXIMA_220V: [ \"Tensão máxima de funcionamento em 220V\",\"Tensión máxima de operación en 220V\",\"Maximum operating voltage at 220V\"],\n TEXTO_TENSAO_MAXIMA_380V: [ \"Tensão máxima de funcionamento em 380V\",\"Tensión máxima de operación en 380V\",\"Maximum operating voltage at 380V\"],\n TEXTO_TEMPO_VALIDAR_TENSAO_FORA_FAIXA: [ \"Tempo para validação de tensão fora da faixa\",\"Tiempo para validar la tensión fuera de la banda\",\"Time for voltage validation out of range\"],\n TEXTO_TEMPO_VALIDAR_TENSAO_DENTRO_FAIXA: [ \"Tempo para validação de tensão dentro da faixa\",\"Tiempo de validación dentro de la banda\",\"Time for voltage validation within range\"],\n TEXTO_TEMPO_VALIDAR_ASSIMETRIA_MODULAR_FALHA: [\"Tempo para validar assimetria modular em falha\",\"Tiempo para validar asimetría modular en falla\",\"Time to validate modular fault asymmetry\"],\n TEXTO_TEMPO_VALIDAR_ASSIMETRO_MODULOAR_OK: [ \"Tempo para validar assimetria modular\",\"Tiempo para validar asimetría modular\",\"Time to validate modular asymmetry\"],\n TEXTO_TEMPO_VALIDAR_ASSIMETRO_ANGULAR_FALHA: [ \"Tempo para validar assimetria angular em falha\",\"Tiempo para validar asimetría angular en falla\",\"Time to validate angular asymmetry at failure\"],\n TEXTO_TEMPO_VALIDAR_ASSIMETRIA_ALGULAR_OK: [ \"Tempo para validar assimetria angular\",\"Tiempo para validar asimetría angular\",\"Time to validate angular asymmetry\"],\n TEXTO_VALOR_ASSIMETRIA_MODULAR: [ \"Valor da assimetria modular\",\"Valor de asimetría modular\",\"Value of modular asymmetry\"],\n TEXTO_VALOR_ASSIMETRIA_ANGULAR: [ \"Valor da assimetria angular\",\"Valor de asimetría angular\",\"Value of angular asymmetry\"],\n TEXTO_RETARDO_ACIONAR_MOTOR: [ \"Retardo para acionar o motor\",\"Retardo para accionar el motor\",\"Delay to start the engine\"],\n TEXTO_HABILITA_INVERSAO: [ \"Habilita inversão de fase\",\"Habilita inversión de fase\",\"Enable phase reversal\"],\n TEXTO_TEMPO_AMOSTRAGEM_LOG: [ \"Tempo de amostragem para gerar log\",\"Tiempo de muestra para generar log\",\"Sampling time to generate log\"],\n TEXTO_PRESSAO_SENSOR_MINIMA: [ \"Pressão mínima do transdutor\",\"Presión mínima del transductor\",\"Minimum transducer pressure\"],\n TEXTO_PRESSAO_SENSOR_MAXIMA: [ \"Pressão máxima do transdutor\",\"Presión máxima del transductor\",\"Maximum transducer pressure\"],\n TEXTO_PRESSAO_DESLIGAR_CONDENSADOR: [ \"Pressão alta para desligar condensador\",\"Presión alta para desligar el condensador\",\"High pressure to turn off condenser\"],\n TEXTO_HABILITA_TRANSDUTOR_PRESSAO: [ \"Habilita transdutor\",\"Habilitar transductor\",\"Enable transducer\"],\n TEXTO_PRESSAO_LIGAR_CONDENSADOR: [ \"Pressão alta para ligar condensador\",\"Presión alta para ligar el condensador\",\"High pressure to turn on condenser\"],\n TEXTO_HABILITA_CONTROLE_PRESSAO_CONDENSADOR: [ \"Habilita controle de pressão do condensador\",\"Habilita el control de la presión del condensador\",\"Enables condenser pressure control\"],\n TEXTO_PRESSAO_ALTA_FALHA: [ \"Pressão alta para desligar compressor\",\"Presión alta para desligar el compressor\",\"High pressure turn off compressor\"],\n TEXTO_PRESSAO_ALTA_OK: [ \"Pressão alta para ligar compressor\",\"Presión alta para ligar el compressor\",\"High pressure turn on compressor\"],\n TEXTO_PRESSAO_BAIXA_FALHA: [ \"Pressão baixa para desligar compressor\",\"Presión bajo para desligar el compressor\",\"Low pressure turn off compressor\"],\n TEXTO_PRESSAO_BAIXA_OK: [ \"Pressão baixa para ligar compressor\",\"Presión bajo para ligar el compressor\",\"Low pressure turn on compressor\"],\n TEXTO_SELECAO_REDE_ELETRICA: [ \"Seleção rede elétrica\",\"Selección de red eléctrica\",\"Electric network selection\"],\n TEXTO_TENSAO_LIGAR_TRAFO_12V: [ \"Tensão para ligar transformador 12V\",\"Voltaje para ligar el transformador 12V\",\"Voltage to transformer on 12V\"],\n TEXTO_TENSAO_LIGAR_TRAFO_24V: [ \"Tensão para ligar transformador 24V\",\"Voltaje para ligar el transformador 24V\",\"Voltage to transformer on 24V\"],\n TEXTO_TENSAO_DESLIGAR_TRAFO_12V: [ \"Tensão para desligar transformador 12V\",\"Voltaje para desligar el transformador 12V\",\"Voltage to transformer off 12V\"],\n TEXTO_TENSAO_DESLIGAR_TRAFO_24V: [ \"Tensão para desligar transformador 24V\",\"Voltaje para desligar el transformador 24V\",\"Voltage to transformer off 24V\"],\n TEXTO_HISTERESE_TEMPO_TRANSFORMADOR: [ \"Histerese de tempo para desligar transformador\",\"Histéresis de tiempo para apagar el transformador\",\"Time hysteresis to turn off transformer\"],\n TEXTO_CONTROLE_TENSAO: [ \"Controle de tensão\",\"Control de voltaje\",\"Voltage control\"],\n TEXTO_BLOQUEIO_TEMPERATURA_RETORNO: [ \"Bloqueio da temperatura de retorno durante o degelo\",\"Bloqueo de la temperatura de retorno durante el deshielo\",\"Blocking of return temperature during defrost\"],\n TEXTO_OFFSET_SENSOR_SUCCAO: [ \"Offset do sensor de sucção\",\"Offset del sensor de succión\",\"Suction sensor offset\"],\n TEXTO_OFFSET_SENSOR_CAMERA_2: [ \"Offset sensor câmara 2\",\"Offset del sensor cámara 2\",\"Chamber sensor offset 2\"],\n TEXTO_SAIDA_ADICIONAL: [ \"Saída adicional\",\"Salida adicional\",\"Additional output\"],\n TEXTO_OFFSET_CABINE_2: [ \"Offset sensor câmara 2\",\"Offset del sensor cámara 2\",\"Chamber sensor Offset 2\"],\n TEXTO_OFFSET_SEPENTINA: [ \"Offset do sensor de serpentina\",\"Offset del sensor de serpentín\",\"Coil sensor offset\"],\n TEXTO_OFFSET_SUPRIMENTO: [ \"Offset do sensor de Suprimento\",\"Offset del sensor de Suprimento\",\"Supply sensor offset\"], \n TEXTO_OFFSET_MOTOR_DIESEL: [ \"Offset do sensor de água do motor diesel\",\"Offset del sensor de agua del motor diesel\",\"Diesel engine water sensor offset\"],\n TEXTO_HABILITA_SENSOR_UMIDADE: [ \"Habilita sensor de umidade\",\"Habilita sensor de humedad\",\"Enable humidity sensor\"],\n TEXTO_FUNCAO_MAQUINA: [ \"Função da máquina\",\"Función de la máquina\",\"Machine function\"],\n TEXTO_VENTILACAO_EVAPORADOR_EM_AQUECIMENTO: [ \"Ventilação do evaporador em aquecimento\",\"Ventilación do Evaporador in calefacción\",\"Heating evaporator Ventilation\"],\n TEXTO_VENTILACAO_CONDENSADOR_EM_AQUECIMENTO: [ \"Ventilação do condensador em aquecimento\",\"Ventilación do condensador in calefacción\",\"Heating Condenser Ventilation\"],\n TEXTO_TEMPERATURA_HISTERESE_AQUECIMENTO: [ \"Temperatura de histerese em aquecimento\",\"Temperatura de histéresis de calefacción\",\"Heating hysteresis temperature\"],\n TEXTO_BLOQUEIO_DE_SETPOINT: [ \"Bloqueio de setpoint\",\"Bloqueo de setpoint\",\"Setpoint lock\"],\n TEXTO_BLOQUEIO_DE_ON_OFF: [ \"Bloqueio de ON/OFF\",\"Bloqueo de ON/OFF\",\"ON/OFF lock\"],\n TEXTO_CONFIGURACAO_TIPO_TITAN: [ \"Tipo de TITAN\",\"Tipo de TITAN\",\"Type of TITAN\"], \n TEXTO_TENSAO_MAX_12V:\t [\"Tensão máxima da bateria 12V\",\"Voltaje maxima de la batería 12V\",\"Maximum battery voltage 12V\"],\n TEXTO_TENSAO_MIN_12V:\t [\"Tensão mínima da bateria 12V\",\"Voltaje mínima de la batería 12V\",\"Minimum battery voltage 12V\"],\n TEXTO_TENSAO_MAX_24V:\t [\"Tensão máxima da bateria 24V\",\"Voltaje maxima de la batería 24V\",\"Maximum battery voltage 24V\"],\n TEXTO_TENSAO_MIN_24V:\t [\"Tensão mínima da bateria 24V\",\"Voltaje mínima de la batería 24V\",\"Minimum battery voltage 24V\"],\n \n \n // HUGO\n VERSAO_DIESEL: [ \"Versão do modulo diesel\",\"Versión del modulo diesel\",\"Diesel module version\" ],\n VERSAO_DIESEL_BOOTLOADER: [ \"Versão do Bootloader Diesel\",\"Versión del bootloader diesel\",\"Diesel bootloader version\"],\n\n // ALTERACAO\n TEXTO_DELTA_DE_TEMPERATURA_PARA_DEGELO_POR_FALTA_DE_DECREMENTO : [\"Delta de temperatura para degelo por falta de decremento\", \"Delta de temperatura para deshielo por falta de decremento\", \"Temperature delta for defrost due to lack of decrement\"],\n TEXTO_DELTA_DE_TEMPO_PARA_DEGELO_POR_FALTA_DE_DECREMENTO : [\"Delta de tempo para degelo por falta de decremento\", \"Delta de tiempo para deshielo por falta de decremento\", \"Time delta for defrost due to lack of decrement\"],\n TEXTO_HABILITA_DEGELO_POR_FALTA_DE_DECREMENTO_NA_TEMPERATURA_DE_SUCCAO: [\"Habilita degelo por falta de decremento na temperatura de sucção\", \"Habilita deshielo por falta de disminución de la temperatura de succión\", \"Enables defrost for lack of decrement in suction temperature\"],\n TEXTO_TEMPO_DE_HISTERESE_MOTOR_DIESEL : [\"Tempo de histerese motor diesel\", \"Tiempo de histéresis del motor diesel\", \"Diesel engine hysteresis time\"],\n TEXTO_HABILITA_FUNCAO_PARTIDA_MOTOR_PARA_CARREGAMENTO_DA_BATERIA : [\"Habilita função partida motor para carregamento da bateria\", \"Habilite la función de arranque del motor para cargar la batería\", \"Enable engine start function for battery charging\"],\n TEXTO_TEMPO_MINIMO_PARA_CARREGAMENTO_DA_BATERIA : [\"Tempo mínimo para carregamento da bateria\", \"Tiempo mínimo de carga de la batería\", \"Minimum battery charging time\"],\n TEXTO_TENSAO_MINIMA_PARA_LIGAR_MOTOR_PARA_CARREGAMENTO_DA_BATERIA : [\"Tensão mínima para ligar motor para carregamento da bateria\", \"Voltaje mínimo para arrancar el motor para cargar la batería\", \"Minimum voltage to start motor for battery charging\"],\n TEXTO_OFFSET_SENSOR_DE_PLACA_EUTETICA : [\"Off-set sensor de placa eutética\", \"Sensor de compensación de placa eutéctica\", \"Eutectic plate offset sensor\" ],\n TEXTO_HABILITA_SENSOR_DE_SUCCAO : [\"Habilita sensor de sucção\", \"Habilita el sensor de succión\",\"Enables suction sensor\" ],\n TEXTO_DESABILITA_SENSOR_DE_SUCCAO : [\"Desabilita sensor de sucção\", \"Desactivar sensor de succión\", \"Disable suction sensor\"],\n TEXTO_HABILITA_RECOLHIMENTO_DE_GAS : [\"Habilita Recolhimento de gás\", \"Habilitar recolección de gas\", \"Enable gas collection\" ],\n TEXTO_TEMPO_MAXIMO_DE_COMPRESSOR_LIGADO_DURANTE_O_RECOLHIMENTO_DE_GAS : [\"Tempo máximo de compressor ligado durante o recolhimento de gás\", \"Compresor máximo a tiempo durante la recolección de gas\", \"Maximum compressor on time during gas collection\"],\n TEXTO_HISTERESE_DE_TEMPO_DE_COMPRESSOR : [\"Histerese de tempo de compressor\", \"Histeresis de tiempo de compresor\", \"Compressor time hysteresis\"],\n TEXTO_TEMPO_BOMBA_DE_COMBUSTIVEL: [\"Tempo Bomba de Combustivel\",\"Tiempo de la bomba de combustible\",\"Fuel Pump Time\"],\n TEXTO_TEMPO_EM_50_DE_CAPACIDADE_PARA_ATINGIR_SETPOINT: [\"Tempo em 50% de capacidade para atingir Setpoint\", \"Tiempo al 50% de capacidad para alcanzar el Setpoint\", \"Time at 50% capacity to reach Setpoint\"],\n TEXTO_TEMPO_DE_ALIVIO: [\"Tempo de Alivio\", \"Tiempo de alivio\", \"Relief Time\"],\n TEXTO_QUANTIDADE_DE_HORAS_PARA_ACORDAR_CONTROLE: [\"Quantidade de horas para acordar controle\",\"Número de horas para despertar el control\",\"Number of hours to wake up control\"],\n TEXTO_TEMPO_DE_AQUECIMENTO_DE_CAMARA_DE_COMBUSTAO: [\"Tempo de aquecimento de camara termica de combustão\",\"Tiempo de calentamiento de la cámara de combustión térmica\",\"Thermal combustion chamber heating time\"],\n TEXTO_TEMPO_PARA_LIGAR_EVAPORADOR: [\"Tempo para ligar evaporardor\",\"Es hora de encender el evaporador\",\"Time to turn on evaporator\"],\n TEXTO_PRESSAO_ALTA_PARA_ATUAR_CONTROLE_DE_CAPACIDADE: [\"Pressão alta para atuar no controle de capacidade\",\"Alta presión para actuar sobre el control de capacidad\",\"High pressure to act on capacity control\"],\n TEXTO_PRESSAO_ALTA_PARA_DESLIGAR_CONTROLE_DE_CAPACIDADE: [\"Pressão alta para desligar controle de capacidade\",\"Alta presión para apagar el control de capacidad\",\"High pressure to turn off capacity control\"],\n TEXTO_HABILITA_MODO_CONTINUO: [\"Habilita modo continuo\",\"Habilitar modo continuo\",\"Enable continuous mode\"],\n TEXTO_CONTROLE_CAPACIDADE_EM_AQUECIMENTO: [\"Controle de capacidade em Aquecimento\",\"Control de capacidad de calefacción\",\"Heating capacity control\"],\n TEXTO_CONTROLE_CAPACIDADE_EM_REFRIGERACAO: [\"Controle de capacidade em Refrigeração\",\"Control de capacidad en Refrigeración\",\"Capacity control in Refrigeration\"],\n TEXTO_HORIMETRO_PARA_REVISAO: [\"Horímetro para revisão\",\"Contador de horas para revisión\",\"Hour meter for review\"],\n TEXTO_QUANTIDADE_DE_HORAS_INCIO_NOTIFICACAO: [\"Quantidade de horas para início da notificação\",\"Número de horas para que comience la notificación\",\"Number of hours for notification to start\"],\n\n\n // IMPLEMENTAÇÃO\n TEMPERATURA_DE_PLACA_EUTETICA : [\"Temperatura placa eutética\" , \"Temperatura de la placa eutéctica\" , \"Eutectic plate temperature\"] ,\n CONTATOR_K3 : [\"Contator K3\" , \"Contactor K3\" , \"Contactor K3\"] ,\n LIGA_CONTATOR_K4_K5 : [\"Contatores K4 e K5\" , \"Contactores K4 y K5\" , \"Contactors K4 and K5\"] ,\n POS_IGNICAO : [\"Pós ignição\" , \"Post-ignición\" , \"Post Ignition\"] ,\n\n};\n\n\n// prettier-ignore\nconst Tabela_Modo_Teste_Apollo = [\n {description: labels.EVAPORADOR_1_APOLLO, kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 0},\n {description: labels.EVAPORADOR_2_APOLLO, kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 1},\n {description: labels.COMPRESSOR_ACOPLADO_APOLLO, kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 2},\n {description: labels.CONDENSADOR_1_APOLLO, kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 3},\n {description: labels.DEGELO_APOLLO, kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 4},\n {description: labels.STANDBY_MOTOR_ELETRICO_APOLLO, kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 5},\n {description: labels.AQUECIMENTO_APOLLO, kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 6},\n {description: labels.EVAPORADOR_3_APOLLO, kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 7},\n {description: labels.CONDENSADOR_2_APOLLO, kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 8},\n {description: labels.ADICIONAL_SEGUNDA_CAMERA_SAIDA_APOLLO, kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 9},\n {description: labels.TEMPERATURA_RETORNO_APOLLO, kind: \"input\", param: \"TemperaturaCamara1\" },\n {description: labels.TEMPERATURA_ADICIONAL_APOLLO, kind: \"input\", param: \"TemperaturaCamara2\" },\n {description: labels.TEMPERATURA_SUCCAO_APOLLO, kind: \"input\", param: \"TemperaturaSuccao\" },\n {description: labels.TRANSDUTOR_PRESSAO_ALTA_APOLLO, kind: \"input\", param: \"PressaoDoTransdutorDeAlta\" },\n {description: labels.TRANSDUTOR_PRESSAO_BAIXA_APOLLO, kind: \"input\", param: \"PressaoDoTransdutorDeBaixa\" },\n {description: labels.SENSOR_UMIDADE, kind: \"input\", param: \"Umidade\" },\n {description: labels.SENSOR_PORTA_APOLLO, kind: \"input\", param: \"EntradasDigitaisSensorDePorta\",},\n {description: labels.EMERGENCIA_APOLLO, kind: \"input\", param: \"EntradasDigitaisEmergencia\",},\n {description: labels.PRESSOSTATO_ALTA_APOLLO, kind: \"input\", param: \"EntradasDigitaisPressostatoDeAlta\",},\n {description: labels.PRESSOSTATO_BAIXA_APOLLO, kind: \"input\", param: \"EntradasDigitaisPressostatoDeBaixa\",},\n {description: labels.TENSAO_BATERIA, kind: \"input\", param: \"TensaoDaBateria\" },\n]\n\n// prettier-ignore\nconst Tabela_Modo_Teste_Apollo_Eletrico = [\n {description: labels.EVAPORADOR_1_APOLLO , kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 0},\n {description: labels.EVAPORADOR_2_APOLLO , kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 1},\n {description: labels.COMPRESSOR_ACOPLADO_APOLLO , kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 2},\n {description: labels.CONDENSADOR_1_APOLLO , kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 3},\n {description: labels.DEGELO_APOLLO , kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 4},\n {description: labels.STANDBY_MOTOR_ELETRICO_APOLLO , kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 5},\n {description: labels.AQUECIMENTO_APOLLO , kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 6},\n {description: labels.EVAPORADOR_3_APOLLO , kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 7},\n {description: labels.CONDENSADOR_2_APOLLO , kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 8},\n {description: labels.ADICIONAL_SEGUNDA_CAMERA_SAIDA_APOLLO , kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 9},\n {description: labels.SELECAO_220_380_APOLLO , kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 10},\n {description: labels.MOTOR_ELETRICO_APOLLO , kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 13},\n {description: labels.HABILITA_TRAFO_APOLLO , kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 14},\n {description: labels.TEMPERATURA_RETORNO_APOLLO , kind: \"input\", param: \"TemperaturaCamara1\" },\n {description: labels.TEMPERATURA_ADICIONAL_APOLLO , kind: \"input\", param: \"TemperaturaCamara2\" },\n {description: labels.TEMPERATURA_SUCCAO_APOLLO , kind: \"input\", param: \"TemperaturaSuccao\" },\n {description: labels.TRANSDUTOR_PRESSAO_ALTA_APOLLO , kind: \"input\", param: \"PressaoDoTransdutorDeAlta\" },\n {description: labels.TRANSDUTOR_PRESSAO_BAIXA_APOLLO , kind: \"input\", param: \"PressaoDoTransdutorDeBaixa\" },\n {description: labels.SENSOR_UMIDADE , kind: \"input\", param: \"Umidade\" },\n {description: labels.TENSAO_RS , kind: \"input\", param: \"RedeTrifasicaTensaoRS\" },\n {description: labels.TENSAO_RT , kind: \"input\", param: \"RedeTrifasicaTensaoRT\" },\n {description: labels.TENSAO_ST , kind: \"input\", param: \"RedeTrifasicaTensaoST\" },\n {description: labels.FREQUENCIA_REDE , kind: \"input\", param: \"RedeTrifasicaFrequencia\" },\n {description: labels.SENSOR_PORTA_APOLLO , kind: \"input\", param: \"EntradasDigitaisSensorDePorta\",},\n {description: labels.EMERGENCIA_APOLLO , kind: \"input\", param: \"EntradasDigitaisEmergencia\",},\n {description: labels.PRESSOSTATO_ALTA_APOLLO , kind: \"input\", param: \"EntradasDigitaisPressostatoDeAlta\",},\n {description: labels.PRESSOSTATO_BAIXA_APOLLO , kind: \"input\", param: \"EntradasDigitaisPressostatoDeBaixa\",},\n {description: labels.RELE_TERMICO_APOLLO , kind: \"input\", param: \"EntradasDigitaisReleTermico\",},\n {description: labels.TENSAO_BATERIA , kind: \"input\", param: \"TensaoDaBateria\" },\n]\n\n// prettier-ignore\nconst Tabela_Modo_Teste_Flex_Eletrico = [\n {description: labels.EVAPORADOR_1_APOLLO , kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 0},\n {description: labels.EVAPORADOR_2_APOLLO , kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 1},\n {description: labels.COMPRESSOR_ACOPLADO_APOLLO , kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 2},\n {description: labels.CONDENSADOR_1_APOLLO , kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 3},\n {description: labels.DEGELO_APOLLO , kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 4},\n {description: labels.ADICIONAL_SEGUNDA_CAMERA_SAIDA_APOLLO , kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 5},\n {description: labels.AQUECIMENTO_FLEX , kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 6},\n {description: labels.SELECAO_220_380_APOLLO , kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 10},\n {description: labels.MOTOR_ELETRICO_APOLLO , kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 13},\n {description: labels.HABILITA_TRAFO_APOLLO , kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 14},\n {description: labels.TEMPERATURA_RETORNO_APOLLO , kind: \"input\", param: \"TemperaturaCamara1\" },\n {description: labels.TEMPERATURA_ADICIONAL_APOLLO , kind: \"input\", param: \"TemperaturaCamara2\" },\n {description: labels.TEMPERATURA_SUCCAO_APOLLO , kind: \"input\", param: \"TemperaturaSuccao\" },\n {description: labels.TRANSDUTOR_PRESSAO_ALTA_APOLLO , kind: \"input\", param: \"PressaoDoTransdutorDeAlta\" },\n {description: labels.TRANSDUTOR_PRESSAO_BAIXA_APOLLO , kind: \"input\", param: \"PressaoDoTransdutorDeBaixa\" },\n {description: labels.SENSOR_UMIDADE , kind: \"input\", param: \"Umidade\" },\n {description: labels.TENSAO_RS , kind: \"input\", param: \"RedeTrifasicaTensaoRS\" },\n {description: labels.TENSAO_RT , kind: \"input\", param: \"RedeTrifasicaTensaoRT\" },\n {description: labels.TENSAO_ST , kind: \"input\", param: \"RedeTrifasicaTensaoST\" },\n {description: labels.FREQUENCIA_REDE , kind: \"input\", param: \"RedeTrifasicaFrequencia\" },\n {description: labels.SENSOR_PORTA_APOLLO , kind: \"input\", param: \"EntradasDigitaisSensorDePorta\"},\n {description: labels.EMERGENCIA_APOLLO , kind: \"input\", param: \"EntradasDigitaisEmergencia\"},\n {description: labels.PRESSOSTATO_ALTA_APOLLO , kind: \"input\", param: \"EntradasDigitaisPressostatoDeAlta\"},\n {description: labels.PRESSOSTATO_BAIXA_APOLLO , kind: \"input\", param: \"EntradasDigitaisPressostatoDeBaixa\"},\n {description: labels.RELE_TERMICO_APOLLO , kind: \"input\", param: \"EntradasDigitaisReleTermico\"},\n {description: labels.TENSAO_BATERIA , kind: \"input\", param: \"TensaoDaBateria\" },\n]\n\n// prettier-ignore\nconst Tabela_Modo_Teste_Flex = [\n {description: labels.EVAPORADOR_1_APOLLO, kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 0},\n {description: labels.EVAPORADOR_2_APOLLO, kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 1},\n {description: labels.COMPRESSOR_ACOPLADO_APOLLO, kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 2},\n {description: labels.CONDENSADOR_1_APOLLO, kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 3},\n {description: labels.DEGELO_APOLLO, kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 4},\n {description: labels.ADICIONAL_SEGUNDA_CAMERA_SAIDA_APOLLO, kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 5},\n {description: labels.AQUECIMENTO_FLEX, kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 6},\n {description: labels.TEMPERATURA_RETORNO_APOLLO, kind: \"input\", param: \"TemperaturaCamara1\" },\n {description: labels.TEMPERATURA_ADICIONAL_APOLLO, kind: \"input\", param: \"TemperaturaCamara2\" },\n {description: labels.TEMPERATURA_SUCCAO_APOLLO, kind: \"input\", param: \"TemperaturaSuccao\" },\n {description: labels.TRANSDUTOR_PRESSAO_ALTA_APOLLO, kind: \"input\", param: \"PressaoDoTransdutorDeAlta\" },\n {description: labels.TRANSDUTOR_PRESSAO_BAIXA_APOLLO, kind: \"input\", param: \"PressaoDoTransdutorDeBaixa\" },\n {description: labels.SENSOR_UMIDADE, kind: \"input\", param: \"Umidade\" },\n {description: labels.SENSOR_PORTA_APOLLO, kind: \"input\", param: \"EntradasDigitaisSensorDePorta\",},\n {description: labels.EMERGENCIA_APOLLO, kind: \"input\", param: \"EntradasDigitaisEmergencia\",},\n {description: labels.PRESSOSTATO_ALTA_APOLLO, kind: \"input\", param: \"EntradasDigitaisPressostatoDeAlta\",},\n {description: labels.PRESSOSTATO_BAIXA_APOLLO, kind: \"input\", param: \"EntradasDigitaisPressostatoDeBaixa\",},\n {description: labels.TENSAO_BATERIA, kind: \"input\", param: \"TensaoDaBateria\" },\n]\n\n// prettier-ignore\nconst Tabela_Modo_Teste_Titan = [\n {description: labels.VENTILACAO, kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 0},\n {description: labels.VENTIALCAO_2, kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 1},\n {description: labels.VENTILACAO_1_2, kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 2},\n {description: labels.VALVULA_LIQUIDO_CABINE_2, kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 3},\n {description: labels.DEGELO, kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 4},\n {description: labels.SELECAO_TENSAO, kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 10},\n {description: labels.INVERSAO_FASE, kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 11},\n {description: labels.SEQUENCIAMENTO_FASES, kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 12},\n {description: labels.ACIONAMENTO_MOTOR, kind: \"refrig\", param: \"ModoDeTesteSaidasDigitaisDoModuloRefrigeracao\", bit: 13},\n {description: labels.SENSOR_PORTA, kind: \"input\", param: \"SensorDePorta\",},\n {description: labels.EMERGENCIA, kind: \"input\", param: \"Emergencia\",},\n {description: labels.PRESSOSTATO_ALTA, kind: \"input\", param: \"PressostatoDeAlta\",},\n {description: labels.PRESSOSTATO_BAIXA, kind: \"input\", param: \"PressostatoDeBaixa\",},\n {description: labels.ENTRADA_RELE_TERMICO, kind: \"input\", param: \"ReleTermico\",},\n {description: labels.TENSAO_BATERIA, kind: \"input\", param: \"TensaoDaBateria\" },\n {description: labels.TEMPERATURA_CABINE_1, kind: \"input\", param: \"TemperaturaCamara1\" },\n {description: labels.TEMPERATURA_SUCCAO, kind: \"input\", param: \"TemperaturaSuccao\" },\n {description: labels.TEMPERATURA_CABINE_2, kind: \"input\", param: \"TemperaturaCamara2\" },\n {description: labels.TEMPERATURA_EVAPORADOR_1_CABINE, kind: \"input\", param: \"TemperaturaSerpentina\" },\n {description: labels.TEMPERATURA_AGUA_MOTOR_DIESEL, kind: \"input\", param: \"TemperaturaDaAguaDoMotor\" },\n {description: labels.PRESSAO_ALTA, kind: \"input\", param: \"PressaoDoTransdutorDeAlta\" },\n {description: labels.PRESSAO_BAIXA, kind: \"input\", param: \"PressaoDoTransdutorDeBaixa\" },\n {description: labels.SENSOR_UMIDADE, kind: \"input\", param: \"Umidade\" },\n {description: labels.TENSAO_RS, kind: \"input\", param: \"RedeTrifasicaTensaoRS\" },\n {description: labels.TENSAO_RT, kind: \"input\", param: \"RedeTrifasicaTensaoRT\" },\n {description: labels.TENSAO_ST, kind: \"input\", param: \"RedeTrifasicaTensaoST\" },\n {description: labels.FREQUENCIA_REDE, kind: \"input\", param: \"RedeTrifasicaFrequencia\" },\n {description: labels.SOLENOIDE_BOMBA_INJETORA, kind: \"diesel\", param: \"SaidasDigitaisDoModuloDiesel\", bit: 0},\n {description: labels.ALIVIO, kind: \"diesel\", param: \"SaidasDigitaisDoModuloDiesel\", bit: 1},\n {description: labels.SOLENOIDE_PARTIDA, kind: \"diesel\", param: \"SaidasDigitaisDoModuloDiesel\", bit: 2},\n {description: labels.BOMBA_COMBUSTIVEL, kind: \"diesel\", param: \"SaidasDigitaisDoModuloDiesel\", bit: 3},\n {description: labels.AQUECIMENTO_CAMERA_COMBUSTAO, kind: \"diesel\", param: \"SaidasDigitaisDoModuloDiesel\", bit: 4},\n {description: labels.ACELERACAO_MOTOR, kind: \"diesel\", param: \"SaidasDigitaisDoModuloDiesel\", bit: 5},\n {description: labels.SIRENE, kind: \"diesel\", param: \"SaidasDigitaisDoModuloDiesel\", bit: 6},\n {description: labels.EXITACAO_ALTERNADOR, kind: \"diesel\", param: \"SaidasDigitaisDoModuloDiesel\", bit: 7},\n {description: labels.NIVEL_AGUA_MOTOR, kind: \"input\", param: \"EntradasDieselNivelDeAgua\",},\n {description: labels.PRESSOSTATO_OLEO, kind: \"input\", param: \"EntradasDieselPressostatoDeOleo\",},\n {description: labels.TEMPERATURA_YANMAR, kind: \"input\", param: \"EntradasDieselTemperaturaMotorYanmar\",},\n {description: labels.ALTERNADOR_D_MAIS, kind: \"input\", param: \"EntradasDieselDPlus\",},\n]\n\n// prettier-ignore\nconst Tabela_Visualizacao_Apollo = [\n {description: labels.VERSAO_PAINEL, param: \"VersoesDeSwPainel\"}, \n {description: labels.VERSAO_PANINEL_BOOTLOADER, param: \"VersaoBootloader\"}, \n {description: labels.VENSAO_BLE, param: \"VersaoBle\"}, \n {description: labels.HORAS, param: \"Hora\"}, \n {description: labels.MINUTOS, param: \"Minuto\"}, \n {description: labels.SEGUNDOS, param: \"Segundos\"}, \n {description: labels.DIA_SEMANA, param: \"DiaDaSemana\"}, \n {description: labels.DIA_MES, param: \"Dia\"}, \n {description: labels.MES, param: \"Mês\"}, \n {description: labels.ANO, param: \"Ano\"}, \n {description: labels.VERSAO_REFRIGERACAO, param: \"VersoesDeSwRefrigeracao\"}, \n {description: labels.VERSAO_REFRIGERACAO_BOOTLOADER, param: \"VersaoBootloaderRefrigeracao\"}, \n {description: labels.TENSAO_BATERIA, param: \"TensaoDaBateria\"}, \n {description: labels.TEMPERATURA_RETORNO_APOLLO, param: \"TemperaturaCamara1\"}, \n {description: labels.TEMPERATURA_ADICIONAL_APOLLO, param: \"TemperaturaCamara2\"}, \n {description: labels.TEMPERATURA_SUCCAO_APOLLO, param: \"TemperaturaSuccao\"}, \n {description: labels.EVAPORADOR_1_APOLLO, param: \"SaidasDigitaisVentilador_1DoEvaporadorCamara_1\"},\n {description: labels.EVAPORADOR_2_APOLLO, param: \"SaidasDigitaisVentilador_2DoEvaporadorCamara_1\"},\n {description: labels.EVAPORADOR_3_APOLLO, param: \"SaidasDigitaisVentilador_3DoEvaporadorCamara_1\"},\n {description: labels.CONDENSADOR_1_APOLLO, param: \"SaidasDigitaisVentilador_1DoCondensador\"},\n {description: labels.CONDENSADOR_2_APOLLO, param: \"SaidasDigitaisVentiladdor_2DoCondensador\"},\n {description: labels.COMPRESSOR_ACOPLADO_APOLLO, param: \"SaidasDigitaisCompressor\"},\n {description: labels.DEGELO_APOLLO, param: \"SaidasDigitaisDegelo\"},\n {description: labels.STANDBY_MOTOR_ELETRICO_APOLLO, param: \"SaidasDigitaisStandByMotorEletrico\"},\n {description: labels.AQUECIMENTO_APOLLO, param: \"SaidasDigitaisAquecimento\"},\n {description: labels.ADICIONAL_SEGUNDA_CAMERA_SAIDA_APOLLO, param: \"SaidasDigitaisAdicionalSegundaCamera\"},\n {description: labels.SENSOR_PORTA_APOLLO, param: \"EntradasDigitaisSensorDePorta\"},\n {description: labels.EMERGENCIA_APOLLO, param: \"EntradasDigitaisEmergencia\"},\n {description: labels.PRESSOSTATO_ALTA_APOLLO, param: \"EntradasDigitaisPressostatoDeBaixa\"},\n {description: labels.PRESSOSTATO_BAIXA_APOLLO, param: \"EntradasDigitaisPressostatoDeAlta\"},\n {description: labels.TRANSDUTOR_PRESSAO_ALTA_APOLLO, param: \"PressaoDoTransdutorDeAlta\"},\n {description: labels.TRANSDUTOR_PRESSAO_BAIXA_APOLLO, param: \"PressaoDoTransdutorDeBaixa\"},\n {description: labels.SENSOR_UMIDADE, param: \"Umidade\"}, \n {description: labels.TEXTO_TEMPO_PARA_DEGELO, param: \"TempoParaDegelo\"}, \n {description: labels.TEXTO_NUMERO_SERIAL, param: \"NumeroSerial\"}, \n]\n\n// prettier-ignore\nconst Tabela_Visualizacao_Apollo_Eletrico = [\n {description: labels.VERSAO_PAINEL, param: \"VersoesDeSwPainel\"},\n {description: labels.VERSAO_PANINEL_BOOTLOADER, param: \"VersaoBootloader\"},\n {description: labels.VENSAO_BLE, param: \"VersaoBle\"},\n {description: labels.HORAS, param: \"Hora\"},\n {description: labels.MINUTOS, param: \"Minuto\"},\n {description: labels.SEGUNDOS, param: \"Segundos\"},\n {description: labels.DIA_SEMANA, param: \"DiaDaSemana\"},\n {description: labels.DIA_MES, param: \"Dia\"},\n {description: labels.MES, param: \"Mês\"},\n {description: labels.ANO, param: \"Ano\"},\n {description: labels.VERSAO_REFRIGERACAO, param: \"VersoesDeSwRefrigeracao\"},\n {description: labels.VERSAO_REFRIGERACAO_BOOTLOADER, param: \"VersaoBootloaderRefrigeracao\"},\n {description: labels.TENSAO_RS, param: \"RedeTrifasicaTensaoRS\"},\n {description: labels.TENSAO_RT, param: \"RedeTrifasicaTensaoRT\"},\n {description: labels.TENSAO_ST, param: \"RedeTrifasicaTensaoST\"},\n {description: labels.FREQUENCIA_REDE, param: \"RedeTrifasicaFrequencia\"},\n {description: labels.TENSAO_BATERIA, param: \"TensaoDaBateria\"},\n {description: labels.TEMPERATURA_RETORNO_APOLLO, param: \"TemperaturaCamara1\"},\n {description: labels.TEMPERATURA_ADICIONAL_APOLLO, param: \"TemperaturaCamara2\"},\n {description: labels.TEMPERATURA_SUCCAO_APOLLO, param: \"TemperaturaSuccao\"},\n {description: labels.EVAPORADOR_1_APOLLO, param: \"SaidasDigitaisVentilador_1DoEvaporadorCamara_1\"},\n {description: labels.EVAPORADOR_2_APOLLO, param: \"SaidasDigitaisVentilador_2DoEvaporadorCamara_1\"},\n {description: labels.EVAPORADOR_3_APOLLO, param: \"SaidasDigitaisVentilador_3DoEvaporadorCamara_1\"},\n {description: labels.CONDENSADOR_1_APOLLO, param: \"SaidasDigitaisVentilador_1DoCondensador\"},\n {description: labels.CONDENSADOR_2_APOLLO, param: \"SaidasDigitaisVentiladdor_2DoCondensador\"},\n {description: labels.COMPRESSOR_ACOPLADO_APOLLO, param: \"SaidasDigitaisCompressor\"},\n {description: labels.DEGELO_APOLLO, param: \"SaidasDigitaisDegelo\"},\n {description: labels.STANDBY_MOTOR_ELETRICO_APOLLO, param: \"SaidasDigitaisStandByMotorEletrico\"},\n {description: labels.AQUECIMENTO_APOLLO, param: \"SaidasDigitaisAquecimento\"},\n {description: labels.ADICIONAL_SEGUNDA_CAMERA_SAIDA_APOLLO, param: \"SaidasDigitaisAdicionalSegundaCamera\"},\n {description: labels.SELECAO_220_380_APOLLO, param: \"SaidasDigitaisSelecaoDeTensao\"},\n {description: labels.MOTOR_ELETRICO_APOLLO, param: \"SaidasDigitaisMotorEletrico\"},\n {description: labels.HABILITA_TRAFO_APOLLO, param: \"SaidasDigitaisHabilitaTrafo\"},\n {description: labels.RELE_TERMICO_APOLLO, param: \"EntradasDigitaisReleTermico\"},\n {description: labels.SENSOR_PORTA_APOLLO, param: \"EntradasDigitaisSensorDePorta\"},\n {description: labels.EMERGENCIA_APOLLO, param: \"EntradasDigitaisEmergencia\"},\n {description: labels.PRESSOSTATO_ALTA_APOLLO, param: \"EntradasDigitaisPressostatoDeBaixa\"},\n {description: labels.PRESSOSTATO_BAIXA_APOLLO, param: \"EntradasDigitaisPressostatoDeAlta\"},\n {description: labels.TRANSDUTOR_PRESSAO_ALTA_APOLLO, param: \"PressaoDoTransdutorDeAlta\"},\n {description: labels.TRANSDUTOR_PRESSAO_BAIXA_APOLLO, param: \"PressaoDoTransdutorDeBaixa\"},\n {description: labels.SENSOR_UMIDADE, param: \"Umidade\"},\n {description: labels.TEXTO_TEMPO_PARA_DEGELO, param: \"TempoParaDegelo\"},\n {description: labels.TEXTO_NUMERO_SERIAL, param: \"NumeroSerial\"},\n];\n\n// prettier-ignore\nconst Tabela_Visualizacao_Flex = [\n {description: labels.VERSAO_PAINEL, param: \"VersoesDeSwPainel\"}, \n {description: labels.VERSAO_PANINEL_BOOTLOADER, param: \"VersaoBootloader\"}, \n {description: labels.VENSAO_BLE, param: \"VersaoBle\"}, \n {description: labels.HORAS, param: \"Hora\"}, \n {description: labels.MINUTOS, param: \"Minuto\"}, \n {description: labels.SEGUNDOS, param: \"Segundos\"}, \n {description: labels.DIA_SEMANA, param: \"DiaDaSemana\"}, \n {description: labels.DIA_MES, param: \"Dia\"}, \n {description: labels.MES, param: \"Mês\"}, \n {description: labels.ANO, param: \"Ano\"}, \n {description: labels.VERSAO_REFRIGERACAO, param: \"VersoesDeSwRefrigeracao\"}, \n {description: labels.VERSAO_REFRIGERACAO_BOOTLOADER, param: \"VersaoBootloaderRefrigeracao\"}, \n {description: labels.TENSAO_BATERIA, param: \"TensaoDaBateria\"}, \n {description: labels.TEMPERATURA_RETORNO_APOLLO, param: \"TemperaturaCamara1\"}, \n {description: labels.TEMPERATURA_ADICIONAL_APOLLO, param: \"TemperaturaCamara2\"}, \n {description: labels.TEMPERATURA_SUCCAO_APOLLO, param: \"TemperaturaSuccao\"}, \n {description: labels.EVAPORADOR_1_APOLLO, param: \"SaidasDigitaisVentilador_1DoEvaporadorCamara_1\"},\n {description: labels.EVAPORADOR_2_APOLLO, param: \"SaidasDigitaisVentilador_2DoEvaporadorCamara_1\"},\n {description: labels.CONDENSADOR_1_APOLLO, param: \"SaidasDigitaisVentilador_1DoCondensador\"},\n {description: labels.COMPRESSOR_ACOPLADO_APOLLO, param: \"SaidasDigitaisCompressor\"},\n {description: labels.DEGELO_APOLLO, param: \"SaidasDigitaisDegelo\"},\n {description: labels.AQUECIMENTO_APOLLO, param: \"SaidasDigitaisAquecimento\"},\n {description: labels.ADICIONAL_SEGUNDA_CAMERA_SAIDA_APOLLO, param: \"SaidasDigitaisAdicionalSegundaCamera\"},\n {description: labels.SENSOR_PORTA_APOLLO, param: \"EntradasDigitaisSensorDePorta\"},\n {description: labels.EMERGENCIA_APOLLO, param: \"EntradasDigitaisEmergencia\"},\n {description: labels.PRESSOSTATO_ALTA_APOLLO, param: \"EntradasDigitaisPressostatoDeBaixa\"},\n {description: labels.PRESSOSTATO_BAIXA_APOLLO, param: \"EntradasDigitaisPressostatoDeAlta\"},\n {description: labels.TRANSDUTOR_PRESSAO_ALTA_APOLLO, param: \"PressaoDoTransdutorDeAlta\"},\n {description: labels.TRANSDUTOR_PRESSAO_BAIXA_APOLLO, param: \"PressaoDoTransdutorDeBaixa\"},\n {description: labels.SENSOR_UMIDADE, param: \"Umidade\"}, \n {description: labels.TEXTO_TEMPO_PARA_DEGELO, param: \"TempoParaDegelo\"}, \n {description: labels.TEXTO_NUMERO_SERIAL, param: \"NumeroSerial\"}, \n]\n\n// prettier-ignore\nconst Tabela_Visualizacao_Flex_Eletrico = [\n {description: labels.VERSAO_PAINEL, param: \"VersoesDeSwPainel\"},\n {description: labels.VERSAO_PANINEL_BOOTLOADER, param: \"VersaoBootloader\"},\n {description: labels.VENSAO_BLE, param: \"VersaoBle\"},\n {description: labels.HORAS, param: \"Hora\"},\n {description: labels.MINUTOS, param: \"Minuto\"},\n {description: labels.SEGUNDOS, param: \"Segundos\"},\n {description: labels.DIA_SEMANA, param: \"DiaDaSemana\"},\n {description: labels.DIA_MES, param: \"Dia\"},\n {description: labels.MES, param: \"Mês\"},\n {description: labels.ANO, param: \"Ano\"},\n {description: labels.VERSAO_REFRIGERACAO, param: \"VersoesDeSwRefrigeracao\"},\n {description: labels.VERSAO_REFRIGERACAO_BOOTLOADER, param: \"VersaoBootloaderRefrigeracao\"},\n {description: labels.TENSAO_RS, param: \"RedeTrifasicaTensaoRS\"},\n {description: labels.TENSAO_RT, param: \"RedeTrifasicaTensaoRT\"},\n {description: labels.TENSAO_ST, param: \"RedeTrifasicaTensaoST\"},\n {description: labels.FREQUENCIA_REDE, param: \"RedeTrifasicaFrequencia\"},\n {description: labels.TENSAO_BATERIA, param: \"TensaoDaBateria\"},\n {description: labels.TEMPERATURA_RETORNO_APOLLO, param: \"TemperaturaCamara1\"},\n {description: labels.TEMPERATURA_ADICIONAL_APOLLO, param: \"TemperaturaCamara2\"},\n {description: labels.TEMPERATURA_SUCCAO_APOLLO, param: \"TemperaturaSuccao\"},\n {description: labels.EVAPORADOR_1_APOLLO, param: \"SaidasDigitaisVentilador_1DoEvaporadorCamara_1\"},\n {description: labels.EVAPORADOR_2_APOLLO, param: \"SaidasDigitaisVentilador_2DoEvaporadorCamara_1\"},\n {description: labels.CONDENSADOR_1_APOLLO, param: \"SaidasDigitaisVentilador_1DoCondensador\"},\n {description: labels.COMPRESSOR_ACOPLADO_APOLLO, param: \"SaidasDigitaisCompressor\"},\n {description: labels.DEGELO_APOLLO, param: \"SaidasDigitaisDegelo\"},\n {description: labels.STANDBY_MOTOR_ELETRICO_APOLLO, param: \"SaidasDigitaisStandByMotorEletrico\"},\n {description: labels.AQUECIMENTO_APOLLO, param: \"SaidasDigitaisAquecimento\"},\n {description: labels.ADICIONAL_SEGUNDA_CAMERA_SAIDA_APOLLO, param: \"SaidasDigitaisAdicionalSegundaCamera\"},\n {description: labels.SELECAO_220_380_APOLLO, param: \"SaidasDigitaisSelecaoDeTensao\"},\n {description: labels.MOTOR_ELETRICO_APOLLO, param: \"SaidasDigitaisMotorEletrico\"},\n {description: labels.HABILITA_TRAFO_APOLLO, param: \"SaidasDigitaisHabilitaTrafo\"},\n {description: labels.RELE_TERMICO_APOLLO, param: \"EntradasDigitaisReleTermico\"},\n {description: labels.SENSOR_PORTA_APOLLO, param: \"EntradasDigitaisSensorDePorta\"},\n {description: labels.EMERGENCIA_APOLLO, param: \"EntradasDigitaisEmergencia\"},\n {description: labels.PRESSOSTATO_ALTA_APOLLO, param: \"EntradasDigitaisPressostatoDeBaixa\"},\n {description: labels.PRESSOSTATO_BAIXA_APOLLO, param: \"EntradasDigitaisPressostatoDeAlta\"},\n {description: labels.TRANSDUTOR_PRESSAO_ALTA_APOLLO, param: \"PressaoDoTransdutorDeAlta\"},\n {description: labels.TRANSDUTOR_PRESSAO_BAIXA_APOLLO, param: \"PressaoDoTransdutorDeBaixa\"},\n {description: labels.SENSOR_UMIDADE, param: \"Umidade\"},\n {description: labels.TEXTO_TEMPO_PARA_DEGELO, param: \"TempoParaDegelo\"},\n {description: labels.TEXTO_NUMERO_SERIAL, param: \"NumeroSerial\"},\n];\n\n// prettier-ignore\nconst Tabela_Visualizacao_Titan = [\n {description: labels.VERSAO_PAINEL, param: \"VersoesDeSwPainel\"}, \n {description: labels.VERSAO_PANINEL_BOOTLOADER, param: \"VersaoBootloader\"}, \n {description: labels.VENSAO_BLE, param: \"VersaoBle\"}, \n {description: labels.HORAS, param: \"Hora\"}, \n {description: labels.MINUTOS, param: \"Minuto\"}, \n {description: labels.SEGUNDOS, param: \"Segundos\"}, \n {description: labels.DIA_SEMANA, param: \"DiaDaSemana\"}, \n {description: labels.DIA_MES, param: \"Dia\"}, \n {description: labels.MES, param: \"Mês\"}, \n {description: labels.ANO, param: \"Ano\"}, \n {description: labels.VERSAO_REFRIGERACAO, param: \"VersoesDeSwRefrigeracao\"}, \n {description: labels.VERSAO_REFRIGERACAO_BOOTLOADER, param: \"VersaoBootloaderRefrigeracao\"}, \n {description: labels.VERSAO_DIESEL, param: \"VersoesDeSwDiesel\"}, \n {description: labels.VERSAO_DIESEL_BOOTLOADER, param: \"VersoesBootloaderDiesel\"}, \n {description: labels.TENSAO_RS, param: \"RedeTrifasicaTensaoRS\" },\n {description: labels.TENSAO_RT, param: \"RedeTrifasicaTensaoRT\" },\n {description: labels.TENSAO_ST, param: \"RedeTrifasicaTensaoST\" },\n {description: labels.FREQUENCIA_REDE, param: \"RedeTrifasicaFrequencia\" },\n {description: labels.TENSAO_BATERIA, param: \"TensaoDaBateria\"}, \n {description: labels.TEMPERATURA_CABINE_1, param: \"TemperaturaCamara1\" },\n {description: labels.TEMPERATURA_SUCCAO, param: \"TemperaturaSuccao\" },\n {description: labels.TEMPERATURA_CABINE_2, param: \"TemperaturaCamara2\" },\n {description: labels.TEMPERATURA_EVAPORADOR_1_CABINE, param: \"TemperaturaSerpentina\" },\n {description: labels.TEMPERATURA_AGUA_MOTOR_DIESEL, param: \"TemperaturaDaAguaDoMotor\" },\n {description: labels.ROTACAO_MOTOR, param: \"RotacaoDoMotor\" },\n {description: labels.PRESSAO_ALTA, param: \"PressaoDoTransdutorDeAlta\" },\n {description: labels.PRESSAO_BAIXA, param: \"PressaoDoTransdutorDeBaixa\" },\n {description: labels.SENSOR_UMIDADE, param: \"Umidade\" },\n {description: labels.PRESSOSTATO_ALTA, param: \"EntradasDigitaisPressostatoDeBaixa\",},\n {description: labels.PRESSOSTATO_BAIXA, param: \"EntradasDigitaisPressostatoDeAlta\",},\n {description: labels.SENSOR_PORTA, param: \"EntradasDigitaisSensorDePorta\",},\n {description: labels.NIVEL_AGUA_MOTOR, param: \"EntradasDieselNivelDeAgua\",},\n {description: labels.TEMPERATURA_YANMAR, param: \"EntradasDieselTemperaturaMotorYanmar\",},\n {description: labels.ENTRADA_RELE_TERMICO, param: \"EntradasDigitaisReleTermico\",},\n {description: labels.PRESSOSTATO_OLEO, param: \"EntradasDieselPressostatoDeOleo\",},\n {description: labels.ALTERNADOR_D_MAIS, param: \"EntradasDieselDPlus\",},\n {description: labels.VENTILACAO, param: \"SaidasDigitaisEvaporadorCabine_1_1\",},\n {description: labels.VENTIALCAO_2, param: \"SaidasDigitaisEvaporadorCabine_1_2\",},\n {description: labels.DEGELO, param: \"SaidasDigitaisDegeloValvulaNF\",},\n {description: labels.VALVULA_LIQUIDO_CABINE_2, param: \"SaidasDigitaisValvulaLiquidoCabine2\",},\n {description: labels.AQUECIMENTO_CAMERA_COMBUSTAO, param: \"SaidasDigitaisAquecimento\",},\n {description: labels.SOLENOIDE_PARTIDA, param: \"SaidasDieselPartida\",},\n {description: labels.BOMBA_COMBUSTIVEL, param: \"SaidasDieselBombaDeCombustivel\",},\n {description: labels.SIRENE, param: \"SaidasDieselSirene\",},\n {description: labels.EXITACAO_ALTERNADOR, param: \"SaidasDieselExcitacaoDoAlternador\",},\n {description: labels.SOLENOIDE_BOMBA_INJETORA, param: \"SaidasDieselBombaInvetora\",},\n {description: labels.ACELERACAO_MOTOR, param: \"SaidasDieselAceleracao\",},\n {description: labels.INVERSAO_FASE, param: \"SaidasDigitaisInversaoDeFase\",},\n {description: labels.SELECAO_TENSAO, param: \"SaidasDigitaisSelecaoDeTensao\",},\n {description: labels.ACIONAMENTO_MOTOR, param: \"SaidasDigitaisMotorEletrico\",},\n {description: labels.TEXTO_TEMPO_PARA_DEGELO, param: \"TempoParaDegelo\"}, \n {description: labels.TEXTO_NUMERO_SERIAL, param: \"NumeroSerial\"}, \n]\n\n// prettier-ignore\nconst Tabela_Parametros_Configuracao_Inicial_Indefinido = [\n { description: labels.TEXTO_MENU_MODELO_MAQUINA, param: \"SelecionaTipoDeControle\"},\n { description: labels.TEXTO_IDIOMA, param: \"Idioma\"},\n { description: labels.TEXTO_AJUSTE_HORAS, param: \"AjusteDaHora\"},\n { description: labels.TEXTO_AJUSTE_MINUTOS, param: \"AjusteDoMinuto\"},\n { description: labels.TEXTO_AJUSTE_ANO, param: \"AjusteDoAno\"},\n { description: labels.TEXTO_AJUSTE_MES, param: \"AjusteDoMes\"},\n { description: labels.TEXTO_AJUSTE_DIA, param: \"AjusteDoDiaDoMes\"},\n { description: labels.TEXTO_MENU_EDIT_N_SERIAL, param: \"NumeroSerial\" },\n ];\n\n// prettier-ignore\nconst Tabela_Parametros_Configuracao_Inicial_Apollo_Flex = [\n {description: labels.TEXTO_MENU_MODELO_MAQUINA, param: \"SelecionaTipoDeControle\"},\n {description: labels.TEXTO_IDIOMA, param: \"Idioma\"},\n {description: labels.TEXTO_AJUSTE_HORAS, param: \"AjusteDaHora\"},\n {description: labels.TEXTO_AJUSTE_MINUTOS, param: \"AjusteDoMinuto\"},\n {description: labels.TEXTO_AJUSTE_ANO, param: \"AjusteDoAno\"},\n {description: labels.TEXTO_AJUSTE_MES, param: \"AjusteDoMes\"},\n {description: labels.TEXTO_AJUSTE_DIA, param: \"AjusteDoDiaDoMes\"},\n {description: labels.TEXTO_MENU_EDIT_N_SERIAL, param: \"NumeroSerial\"},\n {description: labels.HABILITA_SENSOR_TEMPERATURA_CAMERA_2, param: \"HabilitaSensorTemperaturaCamara2\"},\n {description: labels.TEXTO_HABILITA_PORTA, param: \"HabilitaSensorDePorta\"},\n {description: labels.TEXTO_HABILITA_TRANSDUTOR_PRESSAO, param: \"HabilitaTransdutor\"}, \n]\n\n// prettier-ignore\nconst Tabela_Parametros_Configuracao_Inicial_Titan = [\n { description: labels.TEXTO_MENU_MODELO_MAQUINA, param: \"SelecionaTipoDeControle\"},\n { description: labels.TEXTO_IDIOMA, param: \"Idioma\"},\n { description: labels.TEXTO_AJUSTE_HORAS, param: \"AjusteDaHora\"},\n { description: labels.TEXTO_AJUSTE_MINUTOS, param: \"AjusteDoMinuto\"},\n { description: labels.TEXTO_AJUSTE_ANO, param: \"AjusteDoAno\"},\n { description: labels.TEXTO_AJUSTE_MES, param: \"AjusteDoMes\"},\n { description: labels.TEXTO_AJUSTE_DIA, param: \"AjusteDoDiaDoMes\"},\n { description: labels.TEXTO_MENU_EDIT_N_SERIAL, param: \"NumeroSerial\" },\n { description: labels.HABILITA_SENSOR_TEMPERATURA_CAMERA_2, param: \"HabilitaSensorTemperaturaCamara2\" },\n { description: labels.TEXTO_HABILITA_PORTA, param: \"HabilitaSensorDePorta\" },\n { description: labels.TEXTO_CONFIGURACAO_TIPO_TITAN, param: \"TipoDeTitan\" },\n];\n\nexport const modoInicial = {\n IN: Tabela_Parametros_Configuracao_Inicial_Indefinido,\n AS: Tabela_Parametros_Configuracao_Inicial_Apollo_Flex,\n AE: Tabela_Parametros_Configuracao_Inicial_Apollo_Flex,\n FE: Tabela_Parametros_Configuracao_Inicial_Apollo_Flex,\n FS: Tabela_Parametros_Configuracao_Inicial_Apollo_Flex,\n TI: Tabela_Parametros_Configuracao_Inicial_Titan,\n};\n\nexport const testes = {\n AS: Tabela_Modo_Teste_Apollo,\n AE: Tabela_Modo_Teste_Apollo_Eletrico,\n FE: Tabela_Modo_Teste_Flex_Eletrico,\n FS: Tabela_Modo_Teste_Flex,\n TI: Tabela_Modo_Teste_Titan,\n};\n\nexport const visualizacoes = {\n AS: Tabela_Visualizacao_Apollo,\n AE: Tabela_Visualizacao_Apollo_Eletrico,\n FE: Tabela_Visualizacao_Flex_Eletrico,\n FS: Tabela_Visualizacao_Flex,\n TI: Tabela_Visualizacao_Titan,\n};\n","import { labels } from \"./tabelas\";\n//import { labels } from \"./fk001_tabelas\";\n\n\n/* ========================= APOLLO E. e FLEX ========================== */\n// prettier-ignore\nconst Parametros_Apollo_E_Flex_FK = [\n { description: labels.TEXTO_IDIOMA, param: \"Idioma\"},\n { description: labels.TEXTO_AJUSTE_HORAS, param: \"AjusteDaHora\"},\n { description: labels.TEXTO_AJUSTE_MINUTOS, param: \"AjusteDoMinuto\"},\n { description: labels.TEXTO_AJUSTE_ANO, param: \"AjusteDoAno\"},\n { description: labels.TEXTO_AJUSTE_MES, param: \"AjusteDoMes\"},\n { description: labels.TEXTO_AJUSTE_DIA, param: \"AjusteDoDiaDoMes\"},\n { description: labels.TEXTO_OFFSET_CABINE_1, param: \"OffSetSensorCamara1\"},\n { description: labels.TEXTO_OFFSET_SENSOR_SUCCAO, param: \"OffsetSensorDeSuccao\"},\n { description: labels.TEXTO_OFFSET_SENSOR_CAMERA_2, param: \"OffSetSensorCamara2\"},\n { description: labels.TEXTO_TEMPO_PORTA_ABERTA, param: \"TempoDePortaAbertaParaDesligarCompressor\"},\n { description: labels.TEXTO_HABILITA_PORTA, param: \"HabilitaSensorDePorta\"},\n { description: labels.TEXTO_TEMPO_AMOSTRAGEM_LOG, param: \"TempoDeAmostragemParaGerarLog\"},\n { description: labels.HABILITA_SENSOR_TEMPERATURA_CAMERA_2, param: \"HabilitaSensorTemperaturaCamara2\"},\n { description: labels.TEXTO_SAIDA_ADICIONAL, param: \"FuncionamentoDaSaidaAdicional\"},\n { description: labels.TEXTO_HISTERESE, param: \"HistereseDeTemperaturaParaAcionamentoDoCompressor\"},\n { description: labels.TEXTO_HISTERESE_DE_TEMPO_DE_COMPRESSOR, param: \"HistereseDeTempoDoCompressor\"}, \n { description: labels.TEXTO_TEMPO_MAXIMO_REFRIGERACAO, param: \"TempoMaximoRefrigeracao\"},\n { description: labels.ESTADO_VENTILACAO_DEGELO_ATIVO, param: \"EstadoDaVentilacaoComDegeloAtivo\"},\n { description: labels.TEXTO_TEMPO_SEM_DECREMENTO_TEMPERATURA, param: \"TempoSemDecrementoDaTemperaturaDeSuccao\"},\n { description: labels.TEXTO_TEMPERATURA_INIBE_FALTA_DECREMENTO, param: \"TemperaturaQueInibeODegeloPorFaltaDeDecrementoDaTemperaturaDeSuccao\"},\n { description: labels.TEXTO_DELTA_DE_TEMPERATURA_PARA_DEGELO_POR_FALTA_DE_DECREMENTO, param: \"DeltaDeTemperaturaParaDegeloPorFaltaDeDecremento\"},\n { description: labels.TEXTO_DELTA_DE_TEMPO_PARA_DEGELO_POR_FALTA_DE_DECREMENTO, param: \"DeltaDeTempoParaDegeloPorFaltaDeDecremento\"},\n { description: labels.TEXTO_HABILITA_DEGELO_POR_FALTA_DE_DECREMENTO_NA_TEMPERATURA_DE_SUCCAO, param: \"HabilitaDegeloPorFaltaDeDecrementoNaTemperaturaDeSuccao\"}, \n { description: labels.TEXTO_TEMPERATURA_HABILITA_DEGELO, param: \"TemperaturaParaHabiltarDegelo\"},\n { description: labels.TEXTO_TEMPERATURA_FIM_DEGELO, param: \"TemperaturaFimDeDegelo\"},\n { description: labels.TEXTO_TEMPO_MAXIMO_DEGELO, param: \"TempoMaximoDeDegelo\"},\n { description: labels.TEXTO_TIPO_DEGELO, param: \"TipoDeDegelo\"},\n { description: labels.TEXTO_MODO_DEGELO, param: \"ModoDegelo\"},\n { description: labels.TEXTO_ESTADO_COMPRESSOR_GOTEJAMENTO, param: \"EstadoDaRefrigeracaoComGotejamentoAtivo\"},\n { description: labels.TEXTO_TEMPO_GOTEJAMENTO, param: \"TempoDeGotejamento\"},\n { description: labels.TEXTO_TEMPO_PRE_REFRIGERACAO, param: \"TempoDePreRefrigeracao\"},\n { description: labels.TEXTO_BLOQUEIO_TEMPERATURA_RETORNO, param: \"BloqueioDaTemperaturaDeRetornoDuranteODegelo\"},\n { description: labels.TEXTO_MINIMA_TEMPERATURA_SETPOINT, param: \"MinimaTemperaturaDeSetpoint\"},\n { description: labels.TEXTO_MAXIMA_TEMPERATURA_SETPOINT, param: \"MaximaTemperaturaDeSetpoint\"},\n { description: labels.TEXTO_PRESSAO_DESLIGAR_CONDENSADOR, param: \"PressaoParaDesligarCondensador\"},\n { description: labels.TEXTO_PRESSAO_LIGAR_CONDENSADOR, param: \"PressaoParaLigarCondensador\"},\n { description: labels.TEXTO_HABILITA_TRANSDUTOR_PRESSAO, param: \"HabilitaTransdutor\"},\n { description: labels.TEXTO_HABILITA_CONTROLE_PRESSAO_CONDENSADOR, param: \"HabilitaControleDePressaoParaCondensador\"},\n { description: labels.TEXTO_PRESSAO_ALTA_FALHA, param: \"PressaoDeAltaParaDesligarCompressor\"},\n { description: labels.TEXTO_PRESSAO_ALTA_OK, param: \"PressaoDeAltaParaLigarCompressor\"},\n { description: labels.TEXTO_PRESSAO_BAIXA_FALHA, param: \"PressaoDeBaixaParaDesligarCompressor\"},\n { description: labels.TEXTO_PRESSAO_BAIXA_OK, param: \"PressaoDeBaixaParaLigarCompressor\"},\n { description: labels.TEXTO_PRESSAO_SENSOR_MINIMA, param: \"PressaoMinimaDoTransdutor\"},\n { description: labels.TEXTO_PRESSAO_SENSOR_MAXIMA, param: \"PressaoMaximaDoTransdutor\"},\n { description: labels.TEXTO_CONTROLE_TENSAO, param: \"ControleTensao\"},\n { description: labels.TEXTO_TENSAO_MIN_12V, param: \"TensaoMinimaDeOperacao12V\"},\n { description: labels.TEXTO_TENSAO_MAX_12V, param: \"TensaoMaximoDeOperacao12V\"},\n { description: labels.TEXTO_TENSAO_MIN_24V, param: \"TensaoMinimaDeOperacao24V\"},\n { description: labels.TEXTO_TENSAO_MAX_24V, param: \"TensaoMaximoDeOperacao24V\"},\n { description: labels.TEXTO_HISTERESE_TEMPO_TRANSFORMADOR, param: \"HistereseDeTempoParaDesligarTransformador\"},\n { description: labels.TEXTO_TENSAO_DESLIGAR_TRAFO_12V, param: \"TensaoParaDesligarTransformador12V\"},\n { description: labels.TEXTO_TENSAO_LIGAR_TRAFO_12V, param: \"TensaoParaLigarTransformador12V\"},\n { description: labels.TEXTO_TENSAO_DESLIGAR_TRAFO_24V, param: \"TensaoParaDesligarTransformador24V\"},\n { description: labels.TEXTO_TENSAO_LIGAR_TRAFO_24V, param: \"TensaoParaLigarTransformador24V\"},\n { description: labels.TEXTO_HABILITA_SENSOR_UMIDADE, param: \"HabilitaSensorDeUmidade\"},\n { description: labels.TEXTO_FUNCAO_MAQUINA, param: \"FuncaoDaMaquina\"},\n { description: labels.TEXTO_VENTILACAO_EVAPORADOR_EM_AQUECIMENTO, param: \"VentilacaoDoEvaporadorEmAquecimento\"},\n { description: labels.TEXTO_VENTILACAO_CONDENSADOR_EM_AQUECIMENTO, param: \"VentilacaoDoCondensadorEmAquecimento\"},\n { description: labels.TEXTO_TEMPERATURA_HISTERESE_AQUECIMENTO, param: \"TemperaturaDeHistereseEmAquecimento\"},\n { description: labels.TEXTO_BLOQUEIO_DE_SETPOINT, param: \"BloqueioDeSetpoint\"},\n { description: labels.TEXTO_BLOQUEIO_DE_ON_OFF, param: \"BloqueioDeLigaDesliga\"},\n];\n\n// prettier-ignore\nconst Parametros_Apollo_E_Flex_Eletrico_FK = [\n { description: labels.TEXTO_IDIOMA, param: \"Idioma\"},\n { description: labels.TEXTO_AJUSTE_HORAS, param: \"AjusteDaHora\"},\n { description: labels.TEXTO_AJUSTE_MINUTOS, param: \"AjusteDoMinuto\"},\n { description: labels.TEXTO_AJUSTE_ANO, param: \"AjusteDoAno\"},\n { description: labels.TEXTO_AJUSTE_MES, param: \"AjusteDoMes\"},\n { description: labels.TEXTO_AJUSTE_DIA, param: \"AjusteDoDiaDoMes\"},\n { description: labels.TEXTO_OFFSET_CABINE_1, param: \"OffSetSensorCamara1\"},\n { description: labels.TEXTO_OFFSET_SENSOR_SUCCAO, param: \"OffsetSensorDeSuccao\"},\n { description: labels.TEXTO_OFFSET_SENSOR_CAMERA_2, param: \"OffSetSensorCamara2\"},\n { description: labels.TEXTO_TEMPO_PORTA_ABERTA, param: \"TempoDePortaAbertaParaDesligarCompressor\"},\n { description: labels.TEXTO_HABILITA_PORTA, param: \"HabilitaSensorDePorta\"},\n { description: labels.TEXTO_TEMPO_AMOSTRAGEM_LOG, param: \"TempoDeAmostragemParaGerarLog\"},\n { description: labels.HABILITA_SENSOR_TEMPERATURA_CAMERA_2, param: \"HabilitaSensorTemperaturaCamara2\"},\n { description: labels.TEXTO_SAIDA_ADICIONAL, param: \"FuncionamentoDaSaidaAdicional\"},\n { description: labels.TEXTO_HISTERESE, param: \"HistereseDeTemperaturaParaAcionamentoDoCompressor\"},\n { description: labels.TEXTO_HISTERESE_DE_TEMPO_DE_COMPRESSOR, param: \"HistereseDeTempoDoCompressor\"},\n { description: labels.TEXTO_TEMPO_MAXIMO_REFRIGERACAO, param: \"TempoMaximoRefrigeracao\"},\n { description: labels.ESTADO_VENTILACAO_DEGELO_ATIVO, param: \"EstadoDaVentilacaoComDegeloAtivo\"},\n { description: labels.TEXTO_TEMPO_SEM_DECREMENTO_TEMPERATURA, param: \"TempoSemDecrementoDaTemperaturaDeSuccao\"},\n { description: labels.TEXTO_TEMPERATURA_INIBE_FALTA_DECREMENTO, param: \"TemperaturaQueInibeODegeloPorFaltaDeDecrementoDaTemperaturaDeSuccao\"},\n { description: labels.TEXTO_DELTA_DE_TEMPERATURA_PARA_DEGELO_POR_FALTA_DE_DECREMENTO, param: \"DeltaDeTemperaturaParaDegeloPorFaltaDeDecremento\"},\n { description: labels.TEXTO_DELTA_DE_TEMPO_PARA_DEGELO_POR_FALTA_DE_DECREMENTO, param: \"DeltaDeTempoParaDegeloPorFaltaDeDecremento\"},\n { description: labels.TEXTO_HABILITA_DEGELO_POR_FALTA_DE_DECREMENTO_NA_TEMPERATURA_DE_SUCCAO, param: \"HabilitaDegeloPorFaltaDeDecrementoNaTemperaturaDeSuccao\"}, \n { description: labels.TEXTO_TEMPERATURA_HABILITA_DEGELO, param: \"TemperaturaParaHabiltarDegelo\"},\n { description: labels.TEXTO_TEMPERATURA_FIM_DEGELO, param: \"TemperaturaFimDeDegelo\"},\n { description: labels.TEXTO_TEMPO_MAXIMO_DEGELO, param: \"TempoMaximoDeDegelo\"},\n { description: labels.TEXTO_TIPO_DEGELO, param: \"TipoDeDegelo\"},\n { description: labels.TEXTO_MODO_DEGELO, param: \"ModoDegelo\"},\n { description: labels.TEXTO_ESTADO_COMPRESSOR_GOTEJAMENTO, param: \"EstadoDaRefrigeracaoComGotejamentoAtivo\"},\n { description: labels.TEXTO_TEMPO_GOTEJAMENTO, param: \"TempoDeGotejamento\"},\n { description: labels.TEXTO_TEMPO_PRE_REFRIGERACAO, param: \"TempoDePreRefrigeracao\"},\n { description: labels.TEXTO_BLOQUEIO_TEMPERATURA_RETORNO, param: \"BloqueioDaTemperaturaDeRetornoDuranteODegelo\"},\n { description: labels.TEXTO_MINIMA_TEMPERATURA_SETPOINT, param: \"MinimaTemperaturaDeSetpoint\"},\n { description: labels.TEXTO_MAXIMA_TEMPERATURA_SETPOINT, param: \"MaximaTemperaturaDeSetpoint\"},\n { description: labels.TEXTO_PRESSAO_DESLIGAR_CONDENSADOR, param: \"PressaoParaDesligarCondensador\"},\n { description: labels.TEXTO_PRESSAO_LIGAR_CONDENSADOR, param: \"PressaoParaLigarCondensador\"},\n { description: labels.TEXTO_HABILITA_TRANSDUTOR_PRESSAO, param: \"HabilitaTransdutor\"},\n { description: labels.TEXTO_HABILITA_CONTROLE_PRESSAO_CONDENSADOR, param: \"HabilitaControleDePressaoParaCondensador\"},\n { description: labels.TEXTO_PRESSAO_ALTA_FALHA, param: \"PressaoDeAltaParaDesligarCompressor\"},\n { description: labels.TEXTO_PRESSAO_ALTA_OK, param: \"PressaoDeAltaParaLigarCompressor\"},\n { description: labels.TEXTO_PRESSAO_BAIXA_FALHA, param: \"PressaoDeBaixaParaDesligarCompressor\"},\n { description: labels.TEXTO_PRESSAO_BAIXA_OK, param: \"PressaoDeBaixaParaLigarCompressor\"},\n { description: labels.TEXTO_PRESSAO_SENSOR_MINIMA, param: \"PressaoMinimaDoTransdutor\"},\n { description: labels.TEXTO_PRESSAO_SENSOR_MAXIMA, param: \"PressaoMaximaDoTransdutor\"},\n { description: labels.TEXTO_CONTROLE_TENSAO, param: \"ControleTensao\"},\n { description: labels.TEXTO_TENSAO_MIN_12V, param: \"TensaoMinimaDeOperacao12V\"},\n { description: labels.TEXTO_TENSAO_MAX_12V, param: \"TensaoMaximoDeOperacao12V\"},\n { description: labels.TEXTO_TENSAO_MIN_24V, param: \"TensaoMinimaDeOperacao24V\"},\n { description: labels.TEXTO_TENSAO_MAX_24V, param: \"TensaoMaximoDeOperacao24V\"},\n { description: labels.TEXTO_HISTERESE_TEMPO_TRANSFORMADOR, param: \"HistereseDeTempoParaDesligarTransformador\"},\n { description: labels.TEXTO_TENSAO_DESLIGAR_TRAFO_12V, param: \"TensaoParaDesligarTransformador12V\"},\n { description: labels.TEXTO_TENSAO_LIGAR_TRAFO_12V, param: \"TensaoParaLigarTransformador12V\"},\n { description: labels.TEXTO_TENSAO_DESLIGAR_TRAFO_24V, param: \"TensaoParaDesligarTransformador24V\"},\n { description: labels.TEXTO_TENSAO_LIGAR_TRAFO_24V, param: \"TensaoParaLigarTransformador24V\"},\n { description: labels.TEXTO_SELECAO_REDE_ELETRICA, param: \"SelecaoRedeEletrica\"},\n { description: labels.TEXTO_TENSAO_MINIMA_220V, param: \"TensaoMinimaDeFuncionamentoEm220V\"},\n { description: labels.TEXTO_TENSAO_MINIMA_380V, param: \"TensaoMinimaDeFuncionamentoEm380V\"},\n { description: labels.TEXTO_TENSAO_MAXIMA_220V, param: \"TensaoMaximaDeFuncionamentoEm220V\"},\n { description: labels.TEXTO_TENSAO_MAXIMA_380V, param: \"TensaoMaximaDeFuncionamentoEm380V\"},\n { description: labels.TEXTO_TEMPO_VALIDAR_TENSAO_FORA_FAIXA, param: \"TempoParaValidacaoDeTensaoForaDaFaixa\"},\n { description: labels.TEXTO_TEMPO_VALIDAR_TENSAO_DENTRO_FAIXA, param: \"TempoParaValidacaoDeTensaoDentroDaFaixa\"},\n { description: labels.TEXTO_TEMPO_VALIDAR_ASSIMETRIA_MODULAR_FALHA, param: \"TempoParaValidarAssimetriaModularEmFalha\"},\n { description: labels.TEXTO_TEMPO_VALIDAR_ASSIMETRO_MODULOAR_OK, param: \"TempoParaValidarDeAssimetriaModular\"},\n { description: labels.TEXTO_TEMPO_VALIDAR_ASSIMETRO_ANGULAR_FALHA, param: \"TempoParaValidarAssimetriaAngularEmFalha\"},\n { description: labels.TEXTO_TEMPO_VALIDAR_ASSIMETRIA_ALGULAR_OK, param: \"TempoParaValidarAssimetriaAngular\"},\n { description: labels.TEXTO_VALOR_ASSIMETRIA_MODULAR, param: \"ValorDeAssimetriaModular\"},\n { description: labels.TEXTO_VALOR_ASSIMETRIA_ANGULAR, param: \"ValorDeAssimetriaAngular\"},\n { description: labels.TEXTO_HABILITA_SENSOR_UMIDADE, param: \"HabilitaSensorDeUmidade\"},\n { description: labels.TEXTO_FUNCAO_MAQUINA, param: \"FuncaoDaMaquina\"},\n { description: labels.TEXTO_VENTILACAO_EVAPORADOR_EM_AQUECIMENTO, param: \"VentilacaoDoEvaporadorEmAquecimento\"},\n { description: labels.TEXTO_VENTILACAO_CONDENSADOR_EM_AQUECIMENTO, param: \"VentilacaoDoCondensadorEmAquecimento\"},\n { description: labels.TEXTO_TEMPERATURA_HISTERESE_AQUECIMENTO, param: \"TemperaturaDeHistereseEmAquecimento\"},\n { description: labels.TEXTO_BLOQUEIO_DE_SETPOINT, param: \"BloqueioDeSetpoint\"},\n { description: labels.TEXTO_BLOQUEIO_DE_ON_OFF, param: \"BloqueioDeLigaDesliga\"},\n];\n\n// prettier-ignore\nconst Parametros_Apollo_E_Flex_USER = [\n { description: labels.TEXTO_AJUSTE_HORAS, param: \"AjusteDaHora\"},\n { description: labels.TEXTO_AJUSTE_MINUTOS, param: \"AjusteDoMinuto\"},\n { description: labels.TEXTO_AJUSTE_ANO, param: \"AjusteDoAno\"},\n { description: labels.TEXTO_AJUSTE_MES, param: \"AjusteDoMes\"},\n { description: labels.TEXTO_AJUSTE_DIA, param: \"AjusteDoDiaDoMes\"},\n { description: labels.TEXTO_TEMPO_AMOSTRAGEM_LOG, param: \"TempoDeAmostragemParaGerarLog\"},\n];\n\n// prettier-ignore\nconst Parametros_Apollo_E_Flex_AST = [\n { description: labels.TEXTO_AJUSTE_HORAS, param: \"AjusteDaHora\"},\n { description: labels.TEXTO_AJUSTE_MINUTOS, param: \"AjusteDoMinuto\"},\n { description: labels.TEXTO_AJUSTE_ANO, param: \"AjusteDoAno\"},\n { description: labels.TEXTO_AJUSTE_MES, param: \"AjusteDoMes\"},\n { description: labels.TEXTO_AJUSTE_DIA, param: \"AjusteDoDiaDoMes\"},\n { description: labels.TEXTO_TEMPO_PORTA_ABERTA, param: \"TempoDePortaAbertaParaDesligarCompressor\"},\n { description: labels.TEXTO_HABILITA_PORTA, param: \"HabilitaSensorDePorta\"},\n { description: labels.TEXTO_TEMPO_SEM_DECREMENTO_TEMPERATURA, param: \"TempoSemDecrementoDaTemperaturaDeSuccao\"},\n { description: labels.TEXTO_DELTA_DE_TEMPERATURA_PARA_DEGELO_POR_FALTA_DE_DECREMENTO, param: \"DeltaDeTemperaturaParaDegeloPorFaltaDeDecremento\"},\n { description: labels.TEXTO_DELTA_DE_TEMPO_PARA_DEGELO_POR_FALTA_DE_DECREMENTO, param: \"DeltaDeTempoParaDegeloPorFaltaDeDecremento\"},\n { description: labels.TEXTO_HABILITA_DEGELO_POR_FALTA_DE_DECREMENTO_NA_TEMPERATURA_DE_SUCCAO, param: \"HabilitaDegeloPorFaltaDeDecrementoNaTemperaturaDeSuccao\"}, \n { description: labels.TEXTO_TEMPO_AMOSTRAGEM_LOG, param: \"TempoDeAmostragemParaGerarLog\"},\n { description: labels.TEXTO_SAIDA_ADICIONAL, param: \"FuncionamentoDaSaidaAdicional\"},\n { description: labels.TEXTO_TEMPO_MAXIMO_REFRIGERACAO, param: \"TempoMaximoRefrigeracao\"},\n { description: labels.TEXTO_TEMPO_MAXIMO_DEGELO, param: \"TempoMaximoDeDegelo\"},\n { description: labels.TEXTO_TIPO_DEGELO, param: \"TipoDeDegelo\"},\n { description: labels.TEXTO_MODO_DEGELO, param: \"ModoDegelo\"},\n { description: labels.TEXTO_TEMPO_GOTEJAMENTO, param: \"TempoDeGotejamento\"},\n { description: labels.TEXTO_TEMPO_PRE_REFRIGERACAO, param: \"TempoDePreRefrigeracao\"},\n { description: labels.TEXTO_MINIMA_TEMPERATURA_SETPOINT, param: \"MinimaTemperaturaDeSetpoint\"},\n { description: labels.TEXTO_MAXIMA_TEMPERATURA_SETPOINT, param: \"MaximaTemperaturaDeSetpoint\"},\n { description: labels.TEXTO_CONTROLE_TENSAO, param: \"ControleTensao\"},\n { description: labels.TEXTO_TENSAO_MIN_12V, param: \"TensaoMinimaDeOperacao12V\"},\n { description: labels.TEXTO_TENSAO_MAX_12V, param: \"TensaoMaximoDeOperacao12V\"},\n { description: labels.TEXTO_TENSAO_MIN_24V, param: \"TensaoMinimaDeOperacao24V\"},\n { description: labels.TEXTO_TENSAO_MAX_24V, param: \"TensaoMaximoDeOperacao24V\"},\n { description: labels.TEXTO_TEMPERATURA_HABILITA_DEGELO, param: \"TemperaturaParaHabiltarDegelo\"},\n { description: labels.TEXTO_HABILITA_SENSOR_UMIDADE, param: \"HabilitaSensorDeUmidade\"},\n { description: labels.TEXTO_FUNCAO_MAQUINA, param: \"FuncaoDaMaquina\"},\n { description: labels.TEXTO_VENTILACAO_EVAPORADOR_EM_AQUECIMENTO, param: \"VentilacaoDoEvaporadorEmAquecimento\"},\n { description: labels.TEXTO_VENTILACAO_CONDENSADOR_EM_AQUECIMENTO, param: \"VentilacaoDoCondensadorEmAquecimento\"}, \n { description: labels.TEXTO_TEMPERATURA_HISTERESE_AQUECIMENTO, param: \"TemperaturaDeHistereseEmAquecimento\"}, \n { description: labels.TEXTO_BLOQUEIO_DE_SETPOINT, param: \"BloqueioDeSetpoint\"},\n { description: labels.TEXTO_BLOQUEIO_DE_ON_OFF, param: \"BloqueioDeLigaDesliga\"},\n];\n\n// prettier-ignore\nconst Parametros_Apollo_E_Flex_ADM = [\n { description: labels.TEXTO_AJUSTE_HORAS, param: \"AjusteDaHora\"},\n { description: labels.TEXTO_AJUSTE_MINUTOS, param: \"AjusteDoMinuto\"},\n { description: labels.TEXTO_AJUSTE_ANO, param: \"AjusteDoAno\"},\n { description: labels.TEXTO_AJUSTE_MES, param: \"AjusteDoMes\"},\n { description: labels.TEXTO_AJUSTE_DIA, param: \"AjusteDoDiaDoMes\"},\n { description: labels.TEXTO_TEMPO_AMOSTRAGEM_LOG, param: \"TempoDeAmostragemParaGerarLog\"},\n { description: labels.TEXTO_MINIMA_TEMPERATURA_SETPOINT, param: \"MinimaTemperaturaDeSetpoint\"},\n { description: labels.TEXTO_MAXIMA_TEMPERATURA_SETPOINT, param: \"MaximaTemperaturaDeSetpoint\"},\n { description: labels.TEXTO_TEMPO_PORTA_ABERTA, param: \"TempoDePortaAbertaParaDesligarCompressor\"},\n];\n\n/* ============================= TITAN =============================== */\n// prettier-ignore\nconst Parametros_Titan_FK = [\n {description: labels.TEXTO_IDIOMA, param: \"Idioma\"},\n {description: labels.TEXTO_MINIMA_TEMPERATURA_SETPOINT, param: \"MinimaTemperaturaDeSetpoint\"},\n {description: labels.TEXTO_MAXIMA_TEMPERATURA_SETPOINT, param: \"MaximaTemperaturaDeSetpoint\"},\n {description: labels.TEXTO_AJUSTE_HORAS, param: \"AjusteDaHora\"},\n {description: labels.TEXTO_AJUSTE_MINUTOS, param: \"AjusteDoMinuto\"},\n {description: labels.TEXTO_AJUSTE_ANO, param: \"AjusteDoAno\"},\n {description: labels.TEXTO_AJUSTE_MES, param: \"AjusteDoMes\"},\n {description: labels.TEXTO_AJUSTE_DIA, param: \"AjusteDoDiaDoMes\"},\n {description: labels.TEXTO_OFFSET_CABINE_1, param: \"OffSetSensorCamara1\"},\n {description: labels.TEXTO_OFFSET_SENSOR_SUCCAO, param: \"OffsetSensorDeSuccao\"},\n {description: labels.TEXTO_OFFSET_CABINE_2, param: \"OffSetSensorCamara2\"},\n {description: labels.TEXTO_OFFSET_SEPENTINA, param: \"OffSetDoSensorDeSerpentina\"},\n {description: labels.TEXTO_OFFSET_MOTOR_DIESEL, param: \"OffsetDoSensorDeAguaDoMotorDiesel\"},\n {description: labels.TEXTO_HISTERESE, param: \"HistereseDeTemperaturaParaAcionamentoDoCompressor\"},\n { description: labels.TEXTO_HISTERESE_DE_TEMPO_DE_COMPRESSOR, param: \"HistereseDeTempoDoCompressor\"},\n {description: labels.TEXTO_HABILITA_SENSOR_SERPENTINA, param: \"HabilitaSensorDeSerpentina\"},\n {description: labels.HABILITA_SENSOR_TEMPERATURA_CAMERA_2, param: \"HabilitaSensorTemperaturaCamara2\"},\n {description: labels.TEXTO_HABILITA_PORTA, param: \"HabilitaSensorDePorta\"},\n {description: labels.TEXTO_TEMPO_PORTA_ABERTA, param: \"TempoDePortaAbertaParaDesligarCompressor\"},\n {description: labels.TEXTO_TEMPERATURA_INIBE_FALTA_DECREMENTO, param: \"TemperaturaQueInibeODegeloPorFaltaDeDecrementoDaTemperaturaDeSuccao\"},\n {description: labels.TEXTO_TEMPO_SEM_DECREMENTO_TEMPERATURA, param: \"TempoSemDecrementoDaTemperaturaDeSuccao\"},\n {description: labels.TEXTO_DELTA_DE_TEMPERATURA_PARA_DEGELO_POR_FALTA_DE_DECREMENTO, param: \"DeltaDeTemperaturaParaDegeloPorFaltaDeDecremento\"},\n {description: labels.TEXTO_DELTA_DE_TEMPO_PARA_DEGELO_POR_FALTA_DE_DECREMENTO, param: \"DeltaDeTempoParaDegeloPorFaltaDeDecremento\"},\n {description: labels.TEXTO_HABILITA_DEGELO_POR_FALTA_DE_DECREMENTO_NA_TEMPERATURA_DE_SUCCAO, param: \"HabilitaDegeloPorFaltaDeDecrementoNaTemperaturaDeSuccao\"},\n {description: labels.TEXTO_TEMPERATURA_HABILITA_DEGELO, param: \"TemperaturaParaHabiltarDegelo\"},\n {description: labels.TEXTO_TEMPERATURA_FIM_DEGELO, param: \"TemperaturaFimDeDegelo\"},\n {description: labels.TEXTO_CONFIGURACAO_TIPO_TITAN, param: \"TipoDeTitan\"},\n {description: labels.TEXTO_TEMPERATURA_MOTOR_DESLIGA, param: \"TemperaturaDoMotorParaDesligar\"},\n {description: labels.TEXTO_TEMPERATURA_MOTOR_LIGAR, param: \"TemperaturaDoMotorParaLigar\"},\n {description: labels.TEXTO_MOTOR_SEM_AQUECIMENTO, param: \"TemperaturaDoMotorSemPreAquecimento\"},\n {description: labels.TEXTO_TEMPO_DE_HISTERESE_MOTOR_DIESEL, param: \"TempoDeHistereseMotorDiesel\"},\n {description: labels.TEXTO_HABILITA_FUNCAO_PARTIDA_MOTOR_PARA_CARREGAMENTO_DA_BATERIA, param: \"HabilitaFuncaoPartidaMotorParaCarregamentoDaBateria\"},\n {description: labels.TEXTO_TEMPO_MINIMO_PARA_CARREGAMENTO_DA_BATERIA, param: \"TempoMinimoParaCarregamentoDaBateria\"},\n {description: labels.TEXTO_TENSAO_MINIMA_PARA_LIGAR_MOTOR_PARA_CARREGAMENTO_DA_BATERIA, param: \"TensaoMinimaParaLigarMotorParaCarregamentoDaBateria\"},\n {description: labels.TEXTO_TEMPO_MAXIMO_REFRIGERACAO, param: \"TempoMaximoRefrigeracao\"},\n {description: labels.TEXTO_TEMPO_MAXIMO_DEGELO, param: \"TempoMaximoDeDegelo\"},\n {description: labels.TEXTO_TEMPO_GOTEJAMENTO, param: \"TempoDeGotejamento\"},\n {description: labels.TEXTO_TEMPO_PRE_REFRIGERACAO, param: \"TempoDePreRefrigeracao\"},\n {description: labels.TEXTO_TIPO_DEGELO, param: \"TipoDeDegelo\"},\n {description: labels.TEXTO_MODO_DEGELO, param: \"ModoDegelo\"},\n {description: labels.TEXTO_RPM_MOTO, param: \"RpmParaDetectarMotorLigado\"},\n {description: labels.TEXTO_ESTADO_VENTILACAO_REFRIGERACAO_OFF, param: \"EstadoDaVentilacaoComRefrigeracaoDesligada\"},\n {description: labels.ESTADO_VENTILACAO_DEGELO_ATIVO, param: \"EstadoDaVentilacaoComDegeloAtivo\"},\n {description: labels.TEXTO_ESTADO_COMPRESSOR_GOTEJAMENTO, param: \"EstadoDaRefrigeracaoComGotejamentoAtivo\"},\n {description: labels.TEXTO_TENSAO_MINIMA_220V, param: \"TensaoMinimaDeFuncionamentoEm220V\"},\n {description: labels.TEXTO_TENSAO_MINIMA_380V, param: \"TensaoMinimaDeFuncionamentoEm380V\"},\n {description: labels.TEXTO_TENSAO_MAXIMA_220V, param: \"TensaoMaximaDeFuncionamentoEm220V\"},\n {description: labels.TEXTO_TENSAO_MAXIMA_380V, param: \"TensaoMaximaDeFuncionamentoEm380V\"},\n {description: labels.TEXTO_TEMPO_VALIDAR_TENSAO_FORA_FAIXA, param: \"TempoParaValidacaoDeTensaoForaDaFaixa\"},\n {description: labels.TEXTO_TEMPO_VALIDAR_TENSAO_DENTRO_FAIXA, param: \"TempoParaValidacaoDeTensaoDentroDaFaixa\"},\n {description: labels.TEXTO_TEMPO_VALIDAR_ASSIMETRIA_MODULAR_FALHA, param: \"TempoParaValidarAssimetriaModularEmFalha\"},\n {description: labels.TEXTO_TEMPO_VALIDAR_ASSIMETRO_MODULOAR_OK, param: \"TempoParaValidarDeAssimetriaModular\"},\n {description: labels.TEXTO_TEMPO_VALIDAR_ASSIMETRO_ANGULAR_FALHA, param: \"TempoParaValidarAssimetriaAngularEmFalha\"},\n {description: labels.TEXTO_TEMPO_VALIDAR_ASSIMETRIA_ALGULAR_OK, param: \"TempoParaValidarAssimetriaAngular\"},\n {description: labels.TEXTO_VALOR_ASSIMETRIA_MODULAR, param: \"ValorDeAssimetriaModular\"},\n {description: labels.TEXTO_VALOR_ASSIMETRIA_ANGULAR, param: \"ValorDeAssimetriaAngular\"},\n {description: labels.TEXTO_RETARDO_ACIONAR_MOTOR, param: \"RetardoParaAcionarOMotor\"},\n {description: labels.TEXTO_HABILITA_INVERSAO, param: \"HabilitaInversaoDeFase\"},\n {description: labels.TEXTO_TEMPO_AMOSTRAGEM_LOG, param: \"TempoDeAmostragemParaGerarLog\"},\n {description: labels.TEXTO_PRESSAO_ALTA_FALHA, param: \"PressaoDeAltaParaDesligarCompressor\"},\n {description: labels.TEXTO_PRESSAO_ALTA_OK, param: \"PressaoDeAltaParaLigarCompressor\"},\n {description: labels.TEXTO_PRESSAO_BAIXA_FALHA, param: \"PressaoDeBaixaParaDesligarCompressor\"},\n {description: labels.TEXTO_PRESSAO_BAIXA_OK, param: \"PressaoDeBaixaParaLigarCompressor\"},\n {description: labels.TEXTO_PRESSAO_SENSOR_MINIMA, param: \"PressaoMinimaDoTransdutor\"},\n {description: labels.TEXTO_PRESSAO_SENSOR_MAXIMA, param: \"PressaoMaximaDoTransdutor\"},\n {description: labels.TEXTO_HABILITA_SENSOR_UMIDADE, param: \"HabilitaSensorDeUmidade\"},\n {description: labels.TEXTO_FUNCAO_MAQUINA, param: \"FuncaoDaMaquina\"},\n {description: labels.TEXTO_VENTILACAO_EVAPORADOR_EM_AQUECIMENTO, param: \"VentilacaoDoEvaporadorEmAquecimento\"},\n {description: labels.TEXTO_TEMPERATURA_HISTERESE_AQUECIMENTO, param: \"TemperaturaDeHistereseEmAquecimento\"},\n {description: labels.TEXTO_BLOQUEIO_DE_SETPOINT, param: \"BloqueioDeSetpoint\"},\n {description: labels.TEXTO_BLOQUEIO_DE_ON_OFF, param: \"BloqueioDeLigaDesliga\"},\n];\n\n// prettier-ignore\nconst Parametros_Titan_USER = [\n { description: labels.TEXTO_AJUSTE_HORAS, param: \"AjusteDaHora\"},\n { description: labels.TEXTO_AJUSTE_MINUTOS, param: \"AjusteDoMinuto\"},\n { description: labels.TEXTO_AJUSTE_ANO, param: \"AjusteDoAno\"},\n { description: labels.TEXTO_AJUSTE_MES, param: \"AjusteDoMes\"},\n { description: labels.TEXTO_AJUSTE_DIA, param: \"AjusteDoDiaDoMes\"},\n { description: labels.TEXTO_TEMPO_AMOSTRAGEM_LOG, param: \"TempoDeAmostragemParaGerarLog\"},\n];\n\n// prettier-ignore\nconst Parametros_Titan_ADM = [\n { description: labels.TEXTO_MINIMA_TEMPERATURA_SETPOINT, param: \"MinimaTemperaturaDeSetpoint\"},\n { description: labels.TEXTO_MAXIMA_TEMPERATURA_SETPOINT, param: \"MaximaTemperaturaDeSetpoint\"},\n { description: labels.TEXTO_AJUSTE_HORAS, param: \"AjusteDaHora\"},\n { description: labels.TEXTO_AJUSTE_MINUTOS, param: \"AjusteDoMinuto\"},\n { description: labels.TEXTO_AJUSTE_ANO, param: \"AjusteDoAno\"},\n { description: labels.TEXTO_AJUSTE_MES, param: \"AjusteDoMes\"},\n { description: labels.TEXTO_AJUSTE_DIA, param: \"AjusteDoDiaDoMes\"},\n { description: labels.TEXTO_TEMPO_PORTA_ABERTA, param: \"TempoDePortaAbertaParaDesligarCompressor\"},\n { description: labels.TEXTO_TEMPO_AMOSTRAGEM_LOG, param: \"TempoDeAmostragemParaGerarLog\"},\n]\n\n// prettier-ignore\nconst Parametros_Titan_AST = [\n { description: labels.TEXTO_MINIMA_TEMPERATURA_SETPOINT, param: \"MinimaTemperaturaDeSetpoint\"},\n { description: labels.TEXTO_MAXIMA_TEMPERATURA_SETPOINT, param: \"MaximaTemperaturaDeSetpoint\"},\n { description: labels.TEXTO_AJUSTE_HORAS, param: \"AjusteDaHora\"},\n { description: labels.TEXTO_AJUSTE_MINUTOS, param: \"AjusteDoMinuto\"},\n { description: labels.TEXTO_AJUSTE_ANO, param: \"AjusteDoAno\"},\n { description: labels.TEXTO_AJUSTE_MES, param: \"AjusteDoMes\"},\n { description: labels.TEXTO_AJUSTE_DIA, param: \"AjusteDoDiaDoMes\"},\n { description: labels.HABILITA_SENSOR_TEMPERATURA_CAMERA_2, param: \"HabilitaSensorTemperaturaCamara2\"},\n { description: labels.TEXTO_HABILITA_PORTA, param: \"HabilitaSensorDePorta\"},\n { description: labels.TEXTO_TEMPO_PORTA_ABERTA, param: \"TempoDePortaAbertaParaDesligarCompressor\"},\n { description: labels.TEXTO_TEMPO_SEM_DECREMENTO_TEMPERATURA, param: \"TempoSemDecrementoDaTemperaturaDeSuccao\"},\n { description: labels.TEXTO_DELTA_DE_TEMPERATURA_PARA_DEGELO_POR_FALTA_DE_DECREMENTO, param: \"DeltaDeTemperaturaParaDegeloPorFaltaDeDecremento\"},\n { description: labels.TEXTO_DELTA_DE_TEMPO_PARA_DEGELO_POR_FALTA_DE_DECREMENTO, param: \"DeltaDeTempoParaDegeloPorFaltaDeDecremento\"},\n { description: labels.TEXTO_HABILITA_DEGELO_POR_FALTA_DE_DECREMENTO_NA_TEMPERATURA_DE_SUCCAO, param: \"HabilitaDegeloPorFaltaDeDecrementoNaTemperaturaDeSuccao\"}, \n { description: labels.TEXTO_TEMPERATURA_HABILITA_DEGELO, param: \"TemperaturaParaHabiltarDegelo\"},\n { description: labels.TEXTO_TEMPO_DE_HISTERESE_MOTOR_DIESEL, param: \"TempoDeHistereseMotorDiesel\"},\n { description: labels.TEXTO_HABILITA_FUNCAO_PARTIDA_MOTOR_PARA_CARREGAMENTO_DA_BATERIA, param: \"HabilitaFuncaoPartidaMotorParaCarregamentoDaBateria\"},\n { description: labels.TEXTO_TEMPO_MINIMO_PARA_CARREGAMENTO_DA_BATERIA, param: \"TempoMinimoParaCarregamentoDaBateria\"},\n { description: labels.TEXTO_TENSAO_MINIMA_PARA_LIGAR_MOTOR_PARA_CARREGAMENTO_DA_BATERIA, param: \"TensaoMinimaParaLigarMotorParaCarregamentoDaBateria\"},\n { description: labels.TEXTO_TEMPO_MAXIMO_REFRIGERACAO, param: \"TempoMaximoRefrigeracao\"},\n { description: labels.TEXTO_TEMPO_MAXIMO_DEGELO, param: \"TempoMaximoDeDegelo\"}, \n { description: labels.TEXTO_TEMPO_GOTEJAMENTO, param: \"TempoDeGotejamento\"},\n { description: labels.TEXTO_TEMPO_PRE_REFRIGERACAO, param: \"TempoDePreRefrigeracao\"},\n { description: labels.TEXTO_TIPO_DEGELO, param: \"TipoDeDegelo\"},\n { description: labels.TEXTO_MODO_DEGELO, param: \"ModoDegelo\"},\n { description: labels.TEXTO_TEMPO_AMOSTRAGEM_LOG, param: \"TempoDeAmostragemParaGerarLog\"},\n { description: labels.TEXTO_HABILITA_SENSOR_UMIDADE, param: \"HabilitaSensorDeUmidade\"},\n { description: labels.TEXTO_FUNCAO_MAQUINA, param: \"FuncaoDaMaquina\"},\n { description: labels.TEXTO_VENTILACAO_EVAPORADOR_EM_AQUECIMENTO, param: \"VentilacaoDoEvaporadorEmAquecimento\"},\n { description: labels.TEXTO_TEMPERATURA_HISTERESE_AQUECIMENTO, param: \"TemperaturaDeHistereseEmAquecimento\"},\n { description: labels.TEXTO_BLOQUEIO_DE_SETPOINT, param: \"BloqueioDeSetpoint\"},\n { description: labels.TEXTO_BLOQUEIO_DE_ON_OFF, param: \"BloqueioDeLigaDesliga\"},\n];\n\n/* ============================= APOLLO DUAL EPS =============================== */\n// prettier-ignore\nconst Parametros_Apollo_DUAL_FK = [\n { description: labels.TEXTO_AJUSTE_HORAS, param: \"AjusteDaHora\"},\n { description: labels.TEXTO_AJUSTE_MINUTOS, param: \"AjusteDoMinuto\"},\n { description: labels.TEXTO_AJUSTE_ANO, param: \"AjusteDoAno\"},\n { description: labels.TEXTO_AJUSTE_MES, param: \"AjusteDoMes\"},\n { description: labels.TEXTO_AJUSTE_DIA, param: \"AjusteDoDiaDoMes\"},\n { description: labels.TEXTO_IDIOMA, param: \"Idioma\"},\n { description: labels.TEXTO_BLOQUEIO_DE_SETPOINT, param: \"BloqueioDeSetpoint\"},\n { description: labels.TEXTO_BLOQUEIO_DE_ON_OFF, param: \"BloqueioDeLigaDesliga\"},\n { description: labels.TEXTO_TEMPO_AMOSTRAGEM_LOG, param: \"TempoDeAmostragemParaGerarLog\"},\n { description: labels.TEXTO_MINIMA_TEMPERATURA_SETPOINT, param: \"MinimaTemperaturaDeSetpoint\"},\n { description: labels.TEXTO_MAXIMA_TEMPERATURA_SETPOINT, param: \"MaximaTemperaturaDeSetpoint\"},\n { description: labels.TEXTO_BLOQUEIO_TEMPERATURA_RETORNO, param: \"BloqueioDaTemperaturaDeRetornoDuranteODegelo\"},\n { description: labels.TEXTO_OFFSET_CABINE_1, param: \"OffSetSensorCamara1\"},\n { description: labels.TEXTO_OFFSET_SENSOR_SUCCAO, param: \"OffsetSensorDeSuccao\"},\n { description: labels.HABILITA_SENSOR_TEMPERATURA_CAMERA_2, param: \"HabilitaSensorTemperaturaCamara2\"},\n { description: labels.TEXTO_OFFSET_SENSOR_CAMERA_2, param: \"OffSetSensorCamara2\"},\n { description: labels.TEXTO_OFFSET_SENSOR_DE_PLACA_EUTETICA, param: \"OffsetSensorDePlacaEutetica\"},\n { description: labels.TEXTO_HABILITA_PORTA, param: \"HabilitaSensorDePorta\"},\n { description: labels.TEXTO_TEMPO_PORTA_ABERTA, param: \"TempoDePortaAbertaParaDesligarCompressor\"},\n { description: labels.TEXTO_TEMPO_MAXIMO_REFRIGERACAO, param: \"TempoMaximoRefrigeracao\"},\n { description: labels.TEXTO_HISTERESE, param: \"HistereseDeTemperaturaParaAcionamentoDoCompressor\"},\n { description: labels.TEXTO_SAIDA_ADICIONAL, param: \"FuncionamentoDaSaidaAdicional\"},\n { description: labels.TEXTO_TIPO_DEGELO, param: \"TipoDeDegelo\"},\n { description: labels.TEXTO_MODO_DEGELO, param: \"ModoDegelo\"},\n { description: labels.TEXTO_TEMPO_MAXIMO_DEGELO, param: \"TempoMaximoDeDegelo\"},\n { description: labels.TEXTO_TEMPERATURA_HABILITA_DEGELO, param: \"TemperaturaParaHabiltarDegelo\"},\n { description: labels.TEXTO_TEMPERATURA_FIM_DEGELO, param: \"TemperaturaFimDeDegelo\"},\n { description: labels.ESTADO_VENTILACAO_DEGELO_ATIVO, param: \"EstadoDaVentilacaoComDegeloAtivo\"},\n { description: labels.TEXTO_HABILITA_DEGELO_POR_FALTA_DE_DECREMENTO_NA_TEMPERATURA_DE_SUCCAO, param: \"HabilitaDegeloPorFaltaDeDecrementoNaTemperaturaDeSuccao\"}, \n { description: labels.TEXTO_TEMPO_SEM_DECREMENTO_TEMPERATURA, param: \"TempoSemDecrementoDaTemperaturaDeSuccao\"},\n { description: labels.TEXTO_DELTA_DE_TEMPO_PARA_DEGELO_POR_FALTA_DE_DECREMENTO, param: \"DeltaDeTempoParaDegeloPorFaltaDeDecremento\"},\n { description: labels.TEXTO_TEMPERATURA_INIBE_FALTA_DECREMENTO, param: \"TemperaturaQueInibeODegeloPorFaltaDeDecrementoDaTemperaturaDeSuccao\"},\n { description: labels.TEXTO_DELTA_DE_TEMPERATURA_PARA_DEGELO_POR_FALTA_DE_DECREMENTO, param: \"DeltaDeTemperaturaParaDegeloPorFaltaDeDecremento\"},\n { description: labels.TEXTO_TEMPO_GOTEJAMENTO, param: \"TempoDeGotejamento\"},\n { description: labels.TEXTO_ESTADO_COMPRESSOR_GOTEJAMENTO, param: \"EstadoDaRefrigeracaoComGotejamentoAtivo\"},\n { description: labels.TEXTO_TEMPO_PRE_REFRIGERACAO, param: \"TempoDePreRefrigeracao\"},\n { description: labels.TEXTO_HABILITA_RECOLHIMENTO_DE_GAS, param: \"HabilitaRecolhimentoDeGas\"}, \n { description: labels.TEXTO_TEMPO_MAXIMO_DE_COMPRESSOR_LIGADO_DURANTE_O_RECOLHIMENTO_DE_GAS, param: \"TempoMaximoDeCompressorLigadoDuranteORecolhimentoDeGas\"},\n { description: labels.TEXTO_HABILITA_TRANSDUTOR_PRESSAO, param: \"HabilitaTransdutor\"},\n { description: labels.TEXTO_PRESSAO_SENSOR_MINIMA, param: \"PressaoMinimaDoTransdutor\"},\n { description: labels.TEXTO_PRESSAO_SENSOR_MAXIMA, param: \"PressaoMaximaDoTransdutor\"},\n { description: labels.TEXTO_PRESSAO_ALTA_FALHA, param: \"PressaoDeAltaParaDesligarCompressor\"},\n { description: labels.TEXTO_PRESSAO_ALTA_OK, param: \"PressaoDeAltaParaLigarCompressor\"},\n { description: labels.TEXTO_PRESSAO_BAIXA_FALHA, param: \"PressaoDeBaixaParaDesligarCompressor\"},\n { description: labels.TEXTO_PRESSAO_BAIXA_OK, param: \"PressaoDeBaixaParaLigarCompressor\"},\n { description: labels.TEXTO_PRESSAO_DESLIGAR_CONDENSADOR, param: \"PressaoParaDesligarCondensador\"},\n { description: labels.TEXTO_PRESSAO_LIGAR_CONDENSADOR, param: \"PressaoParaLigarCondensador\"},\n { description: labels.TEXTO_CONTROLE_TENSAO, param: \"ControleTensao\"},\n { description: labels.TEXTO_TENSAO_MIN_12V, param: \"TensaoMinimaDeOperacao12V\"},\n { description: labels.TEXTO_TENSAO_MAX_12V, param: \"TensaoMaximoDeOperacao12V\"},\n { description: labels.TEXTO_TENSAO_MIN_24V, param: \"TensaoMinimaDeOperacao24V\"},\n { description: labels.TEXTO_TENSAO_MAX_24V, param: \"TensaoMaximoDeOperacao24V\"},\n { description: labels.TEXTO_HISTERESE_TEMPO_TRANSFORMADOR, param: \"HistereseDeTempoParaDesligarTransformador\"},\n { description: labels.TEXTO_TENSAO_DESLIGAR_TRAFO_12V, param: \"TensaoParaDesligarTransformador12V\"},\n { description: labels.TEXTO_TENSAO_LIGAR_TRAFO_12V, param: \"TensaoParaLigarTransformador12V\"},\n { description: labels.TEXTO_TENSAO_DESLIGAR_TRAFO_24V, param: \"TensaoParaDesligarTransformador24V\"},\n { description: labels.TEXTO_TENSAO_LIGAR_TRAFO_24V, param: \"TensaoParaLigarTransformador24V\"},\n { description: labels.TEXTO_SELECAO_REDE_ELETRICA, param: \"SelecaoRedeEletrica\"},\n { description: labels.TEXTO_TENSAO_MINIMA_220V, param: \"TensaoMinimaDeFuncionamentoEm220V\"},\n { description: labels.TEXTO_TENSAO_MINIMA_380V, param: \"TensaoMinimaDeFuncionamentoEm380V\"},\n { description: labels.TEXTO_TENSAO_MAXIMA_220V, param: \"TensaoMaximaDeFuncionamentoEm220V\"},\n { description: labels.TEXTO_TENSAO_MAXIMA_380V, param: \"TensaoMaximaDeFuncionamentoEm380V\"},\n { description: labels.TEXTO_TEMPO_VALIDAR_TENSAO_FORA_FAIXA, param: \"TempoParaValidacaoDeTensaoForaDaFaixa\"},\n { description: labels.TEXTO_TEMPO_VALIDAR_TENSAO_DENTRO_FAIXA, param: \"TempoParaValidacaoDeTensaoDentroDaFaixa\"},\n { description: labels.TEXTO_TEMPO_VALIDAR_ASSIMETRIA_MODULAR_FALHA, param: \"TempoParaValidarAssimetriaModularEmFalha\"},\n { description: labels.TEXTO_TEMPO_VALIDAR_ASSIMETRO_MODULOAR_OK, param: \"TempoParaValidarDeAssimetriaModular\"},\n { description: labels.TEXTO_TEMPO_VALIDAR_ASSIMETRO_ANGULAR_FALHA, param: \"TempoParaValidarAssimetriaAngularEmFalha\"},\n { description: labels.TEXTO_TEMPO_VALIDAR_ASSIMETRIA_ALGULAR_OK, param: \"TempoParaValidarAssimetriaAngular\"},\n { description: labels.TEXTO_VALOR_ASSIMETRIA_MODULAR, param: \"ValorDeAssimetriaModular\"},\n { description: labels.TEXTO_VALOR_ASSIMETRIA_ANGULAR, param: \"ValorDeAssimetriaAngular\"},\n { description: labels.TEXTO_HABILITA_SENSOR_UMIDADE, param: \"HabilitaSensorDeUmidade\"}, \n];\n//prettier-ignore\nconst Parametros_Apollo_DUAL_USER = [\n { description: labels.TEXTO_AJUSTE_HORAS, param: \"AjusteDaHora\"},\n { description: labels.TEXTO_AJUSTE_MINUTOS, param: \"AjusteDoMinuto\"},\n { description: labels.TEXTO_AJUSTE_ANO, param: \"AjusteDoAno\"}, \n { description: labels.TEXTO_AJUSTE_MES, param: \"AjusteDoMes\"},\n { description: labels.TEXTO_AJUSTE_DIA, param: \"AjusteDoDiaDoMes\"},\n { description: labels.TEXTO_TEMPO_AMOSTRAGEM_LOG, param: \"TempoDeAmostragemParaGerarLog\"},\n];\n// prettier-ignore\nconst Parametros_Apollo_DUAL_ADM = [\n { description: labels.TEXTO_AJUSTE_HORAS, param: \"AjusteDaHora\"},\n { description: labels.TEXTO_AJUSTE_MINUTOS, param: \"AjusteDoMinuto\"},\n { description: labels.TEXTO_AJUSTE_ANO, param: \"AjusteDoAno\"}, \n { description: labels.TEXTO_AJUSTE_MES, param: \"AjusteDoMes\"},\n { description: labels.TEXTO_AJUSTE_DIA, param: \"AjusteDoDiaDoMes\"},\n { description: labels.TEXTO_TEMPO_AMOSTRAGEM_LOG, param: \"TempoDeAmostragemParaGerarLog\"},\n { description: labels.TEXTO_MINIMA_TEMPERATURA_SETPOINT, param: \"MinimaTemperaturaDeSetpoint\"},\n { description: labels.TEXTO_MAXIMA_TEMPERATURA_SETPOINT, param: \"MaximaTemperaturaDeSetpoint\"},\n { description: labels.TEXTO_TEMPO_PORTA_ABERTA, param: \"TempoDePortaAbertaParaDesligarCompressor\"},\n];\n// prettier-ignore\nconst Parametros_Apollo_DUAL_AST = [\n { description: labels.TEXTO_AJUSTE_HORAS, param: \"AjusteDaHora\"},\n { description: labels.TEXTO_AJUSTE_MINUTOS, param: \"AjusteDoMinuto\"},\n { description: labels.TEXTO_AJUSTE_ANO, param: \"AjusteDoAno\"}, \n { description: labels.TEXTO_AJUSTE_MES, param: \"AjusteDoMes\"},\n { description: labels.TEXTO_AJUSTE_DIA, param: \"AjusteDoDiaDoMes\"},\n { description: labels.TEXTO_BLOQUEIO_DE_SETPOINT, param: \"BloqueioDeSetpoint\"},\n { description: labels.TEXTO_BLOQUEIO_DE_ON_OFF, param: \"BloqueioDeLigaDesliga\"},\n { description: labels.TEXTO_TEMPO_AMOSTRAGEM_LOG, param: \"TempoDeAmostragemParaGerarLog\"},\n { description: labels.TEXTO_MINIMA_TEMPERATURA_SETPOINT, param: \"MinimaTemperaturaDeSetpoint\"},\n { description: labels.TEXTO_MAXIMA_TEMPERATURA_SETPOINT, param: \"MaximaTemperaturaDeSetpoint\"},\n { description: labels.TEXTO_HABILITA_PORTA, param: \"HabilitaSensorDePorta\"},\n { description: labels.TEXTO_TEMPO_PORTA_ABERTA, param: \"TempoDePortaAbertaParaDesligarCompressor\"},\n { description: labels.TEXTO_TEMPO_MAXIMO_REFRIGERACAO, param: \"TempoMaximoRefrigeracao\"},\n { description: labels.TEXTO_SAIDA_ADICIONAL, param: \"FuncionamentoDaSaidaAdicional\"},\n { description: labels.TEXTO_TIPO_DEGELO, param: \"TipoDeDegelo\"},\n { description: labels.TEXTO_MODO_DEGELO, param: \"ModoDegelo\"},\n { description: labels.TEXTO_TEMPO_MAXIMO_DEGELO, param: \"TempoMaximoDeDegelo\"},\n { description: labels.TEXTO_TEMPERATURA_HABILITA_DEGELO, param: \"TemperaturaParaHabiltarDegelo\"},\n { description: labels.TEXTO_HABILITA_DEGELO_POR_FALTA_DE_DECREMENTO_NA_TEMPERATURA_DE_SUCCAO, param: \"HabilitaDegeloPorFaltaDeDecrementoNaTemperaturaDeSuccao\"}, \n { description: labels.TEXTO_TEMPO_SEM_DECREMENTO_TEMPERATURA, param: \"TempoSemDecrementoDaTemperaturaDeSuccao\"},\n { description: labels.TEXTO_DELTA_DE_TEMPO_PARA_DEGELO_POR_FALTA_DE_DECREMENTO, param: \"DeltaDeTempoParaDegeloPorFaltaDeDecremento\"},\n { description: labels.TEXTO_DELTA_DE_TEMPERATURA_PARA_DEGELO_POR_FALTA_DE_DECREMENTO, param: \"DeltaDeTemperaturaParaDegeloPorFaltaDeDecremento\"},\n { description: labels.TEXTO_TEMPO_GOTEJAMENTO, param: \"TempoDeGotejamento\"},\n { description: labels.TEXTO_TEMPO_PRE_REFRIGERACAO, param: \"TempoDePreRefrigeracao\"},\n { description: labels.TEXTO_CONTROLE_TENSAO, param: \"ControleTensao\"},\n { description: labels.TEXTO_TENSAO_MIN_12V, param: \"TensaoMinimaDeOperacao12V\"},\n { description: labels.TEXTO_TENSAO_MAX_12V, param: \"TensaoMaximoDeOperacao12V\"},\n { description: labels.TEXTO_TENSAO_MIN_24V, param: \"TensaoMinimaDeOperacao24V\"},\n { description: labels.TEXTO_TENSAO_MAX_24V, param: \"TensaoMaximoDeOperacao24V\" },\n { description: labels.TEXTO_HABILITA_SENSOR_UMIDADE, param: \"HabilitaSensorDeUmidade\"}, \n\n];\n\n/* ================================= APOLLO FR =============================== */\n// prettier-ignore\nconst Parametros_Apollo_FR_FK = [\n { description: labels.TEXTO_AJUSTE_HORAS, param: \"AjusteDaHora\" },\n { description: labels.TEXTO_AJUSTE_MINUTOS, param: \"AjusteDoMinuto\" },\n { description: labels.TEXTO_AJUSTE_ANO, param: \"AjusteDoAno\" },\n { description: labels.TEXTO_AJUSTE_MES, param: \"AjusteDoMes\" },\n { description: labels.TEXTO_AJUSTE_DIA, param: \"AjusteDoDiaDoMes\" },\n { description: labels.TEXTO_IDIOMA, param: \"Idioma\" },\n { description: labels.TEXTO_BLOQUEIO_DE_SETPOINT, param: \"BloqueioDeSetpoint\" },\n { description: labels.TEXTO_BLOQUEIO_DE_ON_OFF, param: \"BloqueioDeLigaDesliga\" },\n { description: labels.TEXTO_TEMPO_AMOSTRAGEM_LOG, param: \"TempoDeAmostragemParaGerarLog\" },\n { description: labels.TEXTO_MINIMA_TEMPERATURA_SETPOINT, param: \"MinimaTemperaturaDeSetpoint\" },\n { description: labels.TEXTO_MAXIMA_TEMPERATURA_SETPOINT, param: \"MaximaTemperaturaDeSetpoint\" },\n { description: labels.TEXTO_OFFSET_CABINE_1, param: \"OffSetSensorCamara1\" },\n { description: labels.TEXTO_HABILITA_SENSOR_DE_SUCCAO, param: \"HabilitaSensorSuccao\"},\n { description: labels.TEXTO_OFFSET_SENSOR_SUCCAO, param: \"OffsetSensorDeSuccao\" },\n { description: labels.HABILITA_SENSOR_TEMPERATURA_CAMERA_2, param: \"HabilitaSensorTemperaturaCamara2\" },\n { description: labels.TEXTO_OFFSET_SENSOR_CAMERA_2, param: \"OffSetSensorCamara2\" },\n { description: labels.TEXTO_OFFSET_SENSOR_DE_PLACA_EUTETICA, param: \"OffsetSensorDePlacaEutetica\" },\n { description: labels.TEXTO_HABILITA_PORTA, param: \"HabilitaSensorDePorta\" },\n { description: labels.TEXTO_TEMPO_PORTA_ABERTA, param: \"TempoDePortaAbertaParaDesligarCompressor\" },\n { description: labels.TEXTO_HISTERESE, param: \"HistereseDeTemperaturaParaAcionamentoDoCompressor\" },\n { description: labels.TEXTO_SAIDA_ADICIONAL, param: \"FuncionamentoDaSaidaAdicional\" },\n { description: labels.TEXTO_HABILITA_RECOLHIMENTO_DE_GAS, param: \"HabilitaRecolhimentoDeGas\" },\n { description: labels.TEXTO_TEMPO_MAXIMO_DE_COMPRESSOR_LIGADO_DURANTE_O_RECOLHIMENTO_DE_GAS, param: \"TempoMaximoDeCompressorLigadoDuranteORecolhimentoDeGas\" },\n { description: labels.TEXTO_HABILITA_TRANSDUTOR_PRESSAO, param: \"HabilitaTransdutor\" },\n { description: labels.TEXTO_PRESSAO_SENSOR_MINIMA, param: \"PressaoMinimaDoTransdutor\" },\n { description: labels.TEXTO_PRESSAO_SENSOR_MAXIMA, param: \"PressaoMaximaDoTransdutor\" },\n { description: labels.TEXTO_PRESSAO_ALTA_FALHA, param: \"PressaoDeAltaParaDesligarCompressor\" },\n { description: labels.TEXTO_PRESSAO_ALTA_OK, param: \"PressaoDeAltaParaLigarCompressor\" },\n { description: labels.TEXTO_PRESSAO_BAIXA_FALHA, param: \"PressaoDeBaixaParaDesligarCompressor\" },\n { description: labels.TEXTO_PRESSAO_BAIXA_OK, param: \"PressaoDeBaixaParaLigarCompressor\" },\n { description: labels.TEXTO_PRESSAO_DESLIGAR_CONDENSADOR, param: \"PressaoParaDesligarCondensador\" },\n { description: labels.TEXTO_PRESSAO_LIGAR_CONDENSADOR, param: \"PressaoParaLigarCondensador\" },\n { description: labels.TEXTO_CONTROLE_TENSAO, param: \"ControleTensao\" },\n { description: labels.TEXTO_TENSAO_MIN_12V, param: \"TensaoMinimaDeOperacao12V\" },\n { description: labels.TEXTO_TENSAO_MAX_12V, param: \"TensaoMaximoDeOperacao12V\" },\n { description: labels.TEXTO_TENSAO_MIN_24V, param: \"TensaoMinimaDeOperacao24V\" },\n { description: labels.TEXTO_TENSAO_MAX_24V, param: \"TensaoMaximoDeOperacao24V\" },\n { description: labels.TEXTO_HISTERESE_TEMPO_TRANSFORMADOR, param: \"HistereseDeTempoParaDesligarTransformador\" },\n { description: labels.TEXTO_TENSAO_DESLIGAR_TRAFO_12V, param: \"TensaoParaDesligarTransformador12V\" },\n { description: labels.TEXTO_TENSAO_LIGAR_TRAFO_12V, param: \"TensaoParaLigarTransformador12V\" },\n { description: labels.TEXTO_TENSAO_DESLIGAR_TRAFO_24V, param: \"TensaoParaDesligarTransformador24V\" },\n { description: labels.TEXTO_TENSAO_LIGAR_TRAFO_24V, param: \"TensaoParaLigarTransformador24V\" },\n { description: labels.TEXTO_SELECAO_REDE_ELETRICA, param: \"SelecaoRedeEletrica\" },\n { description: labels.TEXTO_TENSAO_MINIMA_220V, param: \"TensaoMinimaDeFuncionamentoEm220V\" },\n { description: labels.TEXTO_TENSAO_MINIMA_380V, param: \"TensaoMinimaDeFuncionamentoEm380V\" },\n { description: labels.TEXTO_TENSAO_MAXIMA_220V, param: \"TensaoMaximaDeFuncionamentoEm220V\" },\n { description: labels.TEXTO_TENSAO_MAXIMA_380V, param: \"TensaoMaximaDeFuncionamentoEm380V\" },\n { description: labels.TEXTO_TEMPO_VALIDAR_TENSAO_FORA_FAIXA, param: \"TempoParaValidacaoDeTensaoForaDaFaixa\" },\n { description: labels.TEXTO_TEMPO_VALIDAR_TENSAO_DENTRO_FAIXA, param: \"TempoParaValidacaoDeTensaoDentroDaFaixa\" },\n { description: labels.TEXTO_TEMPO_VALIDAR_ASSIMETRIA_MODULAR_FALHA, param: \"TempoParaValidarAssimetriaModularEmFalha\" },\n { description: labels.TEXTO_TEMPO_VALIDAR_ASSIMETRO_MODULOAR_OK, param: \"TempoParaValidarDeAssimetriaModular\" },\n { description: labels.TEXTO_TEMPO_VALIDAR_ASSIMETRO_ANGULAR_FALHA, param: \"TempoParaValidarAssimetriaAngularEmFalha\" },\n { description: labels.TEXTO_TEMPO_VALIDAR_ASSIMETRIA_ALGULAR_OK, param: \"TempoParaValidarAssimetriaAngular\" },\n { description: labels.TEXTO_VALOR_ASSIMETRIA_MODULAR, param: \"ValorDeAssimetriaModular\" },\n { description: labels.TEXTO_VALOR_ASSIMETRIA_ANGULAR, param: \"ValorDeAssimetriaAngular\" },\n { description: labels.TEXTO_HABILITA_SENSOR_UMIDADE, param: \"HabilitaSensorDeUmidade\" },\n];\n// prettier-ignore\nconst Parametros_Apollo_FR_USER = [\n { description: labels.TEXTO_AJUSTE_HORAS, param: \"AjusteDaHora\" },\n { description: labels.TEXTO_AJUSTE_MINUTOS, param: \"AjusteDoMinuto\" },\n { description: labels.TEXTO_AJUSTE_ANO, param: \"AjusteDoAno\" },\n { description: labels.TEXTO_AJUSTE_MES, param: \"AjusteDoMes\" },\n { description: labels.TEXTO_AJUSTE_DIA, param: \"AjusteDoDiaDoMes\" },\n { description: labels.TEXTO_TEMPO_AMOSTRAGEM_LOG, param: \"TempoDeAmostragemParaGerarLog\" },\n];\n// prettier-ignore\nconst Parametros_Apollo_FR_ADM = [\n { description: labels.TEXTO_AJUSTE_HORAS, param: \"AjusteDaHora\" },\n { description: labels.TEXTO_AJUSTE_MINUTOS, param: \"AjusteDoMinuto\" },\n { description: labels.TEXTO_AJUSTE_ANO, param: \"AjusteDoAno\" },\n { description: labels.TEXTO_AJUSTE_MES, param: \"AjusteDoMes\" },\n { description: labels.TEXTO_AJUSTE_DIA, param: \"AjusteDoDiaDoMes\" },\n { description: labels.TEXTO_TEMPO_AMOSTRAGEM_LOG, param: \"TempoDeAmostragemParaGerarLog\" },\n { description: labels.TEXTO_MINIMA_TEMPERATURA_SETPOINT, param: \"MinimaTemperaturaDeSetpoint\" },\n { description: labels.TEXTO_MAXIMA_TEMPERATURA_SETPOINT, param: \"MaximaTemperaturaDeSetpoint\" },\n { description: labels.TEXTO_TEMPO_PORTA_ABERTA, param: \"TempoDePortaAbertaParaDesligarCompressor\" },\n];\n// prettier-ignore\nconst Parametros_Apollo_FR_AST = [\n { description: labels.TEXTO_AJUSTE_HORAS, param: \"AjusteDaHora\"},\n { description: labels.TEXTO_AJUSTE_MINUTOS, param: \"AjusteDoMinuto\"},\n { description: labels.TEXTO_AJUSTE_ANO, param: \"AjusteDoAno\"},\n { description: labels.TEXTO_AJUSTE_MES, param: \"AjusteDoMes\"},\n { description: labels.TEXTO_AJUSTE_DIA, param: \"AjusteDoDiaDoMes\"},\n { description: labels.TEXTO_BLOQUEIO_DE_SETPOINT, param: \"BloqueioDeSetpoint\"},\n { description: labels.TEXTO_BLOQUEIO_DE_ON_OFF, param: \"BloqueioDeLigaDesliga\"},\n { description: labels.TEXTO_TEMPO_AMOSTRAGEM_LOG, param: \"TempoDeAmostragemParaGerarLog\"},\n { description: labels.TEXTO_MINIMA_TEMPERATURA_SETPOINT, param: \"MinimaTemperaturaDeSetpoint\"},\n { description: labels.TEXTO_MAXIMA_TEMPERATURA_SETPOINT, param: \"MaximaTemperaturaDeSetpoint\"},\n { description: labels.TEXTO_HABILITA_PORTA, param: \"HabilitaSensorDePorta\"},\n { description: labels.TEXTO_TEMPO_PORTA_ABERTA, param: \"TempoDePortaAbertaParaDesligarCompressor\"},\n { description: labels.TEXTO_SAIDA_ADICIONAL, param: \"FuncionamentoDaSaidaAdicional\"},\n { description: labels.TEXTO_CONTROLE_TENSAO, param: \"ControleTensao\" },\n { description: labels.TEXTO_TENSAO_MIN_12V, param: \"TensaoMinimaDeOperacao12V\"},\n { description: labels.TEXTO_TENSAO_MAX_12V, param: \"TensaoMaximoDeOperacao12V\"},\n { description: labels.TEXTO_TENSAO_MIN_24V, param: \"TensaoMinimaDeOperacao24V\"},\n { description: labels.TEXTO_TENSAO_MAX_24V, param: \"TensaoMaximoDeOperacao24V\"},\n { description: labels.TEXTO_HABILITA_SENSOR_UMIDADE, param: \"HabilitaSensorDeUmidade\"},\n];\n\n/* =============================== APOLLO EPS ================================ */\n// prettier-ignore\nconst Parametros_Apollo_EPS_FK = [\n { description: labels.TEXTO_AJUSTE_HORAS, param: \"AjusteDaHora\"},\n { description: labels.TEXTO_AJUSTE_MINUTOS, param: \"AjusteDoMinuto\"},\n { description: labels.TEXTO_AJUSTE_ANO, param: \"AjusteDoAno\"},\n { description: labels.TEXTO_AJUSTE_MES, param: \"AjusteDoMes\"},\n { description: labels.TEXTO_AJUSTE_DIA, param: \"AjusteDoDiaDoMes\"},\n { description: labels.TEXTO_IDIOMA, param: \"Idioma\"},\n { description: labels.TEXTO_BLOQUEIO_DE_SETPOINT, param: \"BloqueioDeSetpoint\"},\n { description: labels.TEXTO_BLOQUEIO_DE_ON_OFF, param: \"BloqueioDeLigaDesliga\"},\n { description: labels.TEXTO_TEMPO_AMOSTRAGEM_LOG, param: \"TempoDeAmostragemParaGerarLog\"},\n { description: labels.TEXTO_MINIMA_TEMPERATURA_SETPOINT, param: \"MinimaTemperaturaDeSetpoint\"},\n { description: labels.TEXTO_MAXIMA_TEMPERATURA_SETPOINT, param: \"MaximaTemperaturaDeSetpoint\"},\n { description: labels.TEXTO_BLOQUEIO_TEMPERATURA_RETORNO, param: \"BloqueioDaTemperaturaDeRetornoDuranteODegelo\"},\n { description: labels.TEXTO_OFFSET_CABINE_1, param: \"OffSetSensorCamara1\"},\n { description: labels.TEXTO_OFFSET_SENSOR_SUCCAO, param: \"OffsetSensorDeSuccao\"},\n { description: labels.HABILITA_SENSOR_TEMPERATURA_CAMERA_2, param: \"HabilitaSensorTemperaturaCamara2\"},\n { description: labels.TEXTO_OFFSET_SENSOR_CAMERA_2, param: \"OffSetSensorCamara2\"},\n { description: labels.TEXTO_HABILITA_PORTA, param: \"HabilitaSensorDePorta\"},\n { description: labels.TEXTO_TEMPO_PORTA_ABERTA, param: \"TempoDePortaAbertaParaDesligarCompressor\"},\n { description: labels.TEXTO_TEMPO_MAXIMO_REFRIGERACAO, param: \"TempoMaximoRefrigeracao\"},\n { description: labels.TEXTO_HISTERESE, param: \"HistereseDeTemperaturaParaAcionamentoDoCompressor\"},\n { description: labels.TEXTO_SAIDA_ADICIONAL, param: \"FuncionamentoDaSaidaAdicional\"},\n { description: labels.TEXTO_TIPO_DEGELO, param: \"TipoDeDegelo\"},\n { description: labels.TEXTO_MODO_DEGELO, param: \"ModoDegelo\"},\n { description: labels.TEXTO_TEMPO_MAXIMO_DEGELO, param: \"TempoMaximoDeDegelo\"},\n { description: labels.TEXTO_TEMPERATURA_HABILITA_DEGELO, param: \"TemperaturaParaHabiltarDegelo\"},\n { description: labels.TEXTO_TEMPERATURA_FIM_DEGELO, param: \"TemperaturaFimDeDegelo\"},\n { description: labels.ESTADO_VENTILACAO_DEGELO_ATIVO, param: \"EstadoDaVentilacaoComDegeloAtivo\"},\n { description: labels.TEXTO_HABILITA_DEGELO_POR_FALTA_DE_DECREMENTO_NA_TEMPERATURA_DE_SUCCAO, param: \"HabilitaDegeloPorFaltaDeDecrementoNaTemperaturaDeSuccao\"}, \n { description: labels.TEXTO_TEMPO_SEM_DECREMENTO_TEMPERATURA, param: \"TempoSemDecrementoDaTemperaturaDeSuccao\"},\n { description: labels.TEXTO_DELTA_DE_TEMPO_PARA_DEGELO_POR_FALTA_DE_DECREMENTO, param: \"DeltaDeTempoParaDegeloPorFaltaDeDecremento\"},\n { description: labels.TEXTO_TEMPERATURA_INIBE_FALTA_DECREMENTO, param: \"TemperaturaQueInibeODegeloPorFaltaDeDecrementoDaTemperaturaDeSuccao\"},\n { description: labels.TEXTO_DELTA_DE_TEMPERATURA_PARA_DEGELO_POR_FALTA_DE_DECREMENTO, param: \"DeltaDeTemperaturaParaDegeloPorFaltaDeDecremento\"},\n { description: labels.TEXTO_TEMPO_GOTEJAMENTO, param: \"TempoDeGotejamento\"},\n { description: labels.TEXTO_ESTADO_COMPRESSOR_GOTEJAMENTO, param: \"EstadoDaRefrigeracaoComGotejamentoAtivo\"},\n { description: labels.TEXTO_TEMPO_PRE_REFRIGERACAO, param: \"TempoDePreRefrigeracao\"},\n { description: labels.TEXTO_HABILITA_TRANSDUTOR_PRESSAO, param: \"HabilitaTransdutor\"},\n { description: labels.TEXTO_PRESSAO_SENSOR_MINIMA, param: \"PressaoMinimaDoTransdutor\"},\n { description: labels.TEXTO_PRESSAO_SENSOR_MAXIMA, param: \"PressaoMaximaDoTransdutor\"},\n { description: labels.TEXTO_PRESSAO_ALTA_FALHA, param: \"PressaoDeAltaParaDesligarCompressor\"},\n { description: labels.TEXTO_PRESSAO_ALTA_OK, param: \"PressaoDeAltaParaLigarCompressor\"},\n { description: labels.TEXTO_PRESSAO_BAIXA_FALHA, param: \"PressaoDeBaixaParaDesligarCompressor\"},\n { description: labels.TEXTO_PRESSAO_BAIXA_OK, param: \"PressaoDeBaixaParaLigarCompressor\"},\n { description: labels.TEXTO_PRESSAO_DESLIGAR_CONDENSADOR, param: \"PressaoParaDesligarCondensador\"},\n { description: labels.TEXTO_PRESSAO_LIGAR_CONDENSADOR, param: \"PressaoParaLigarCondensador\"},\n { description: labels.TEXTO_CONTROLE_TENSAO, param: \"ControleTensao\"},\n { description: labels.TEXTO_TENSAO_MIN_12V, param: \"TensaoMinimaDeOperacao12V\"},\n { description: labels.TEXTO_TENSAO_MAX_12V, param: \"TensaoMaximoDeOperacao12V\"},\n { description: labels.TEXTO_TENSAO_MIN_24V, param: \"TensaoMinimaDeOperacao24V\"},\n { description: labels.TEXTO_TENSAO_MAX_24V, param: \"TensaoMaximoDeOperacao24V\"},\n { description: labels.TEXTO_HISTERESE_TEMPO_TRANSFORMADOR, param: \"HistereseDeTempoParaDesligarTransformador\"},\n { description: labels.TEXTO_TENSAO_DESLIGAR_TRAFO_12V, param: \"TensaoParaDesligarTransformador12V\"},\n { description: labels.TEXTO_TENSAO_LIGAR_TRAFO_12V, param: \"TensaoParaLigarTransformador12V\"},\n { description: labels.TEXTO_TENSAO_DESLIGAR_TRAFO_24V, param: \"TensaoParaDesligarTransformador24V\"},\n { description: labels.TEXTO_TENSAO_LIGAR_TRAFO_24V, param: \"TensaoParaLigarTransformador24V\"},\n { description: labels.TEXTO_SELECAO_REDE_ELETRICA, param: \"SelecaoRedeEletrica\"},\n { description: labels.TEXTO_TENSAO_MINIMA_220V, param: \"TensaoMinimaDeFuncionamentoEm220V\"},\n { description: labels.TEXTO_TENSAO_MINIMA_380V, param: \"TensaoMinimaDeFuncionamentoEm380V\"},\n { description: labels.TEXTO_TENSAO_MAXIMA_220V, param: \"TensaoMaximaDeFuncionamentoEm220V\"},\n { description: labels.TEXTO_TENSAO_MAXIMA_380V, param: \"TensaoMaximaDeFuncionamentoEm380V\"},\n { description: labels.TEXTO_TEMPO_VALIDAR_TENSAO_FORA_FAIXA, param: \"TempoParaValidacaoDeTensaoForaDaFaixa\"},\n { description: labels.TEXTO_TEMPO_VALIDAR_TENSAO_DENTRO_FAIXA, param: \"TempoParaValidacaoDeTensaoDentroDaFaixa\"},\n { description: labels.TEXTO_TEMPO_VALIDAR_ASSIMETRIA_MODULAR_FALHA, param: \"TempoParaValidarAssimetriaModularEmFalha\"},\n { description: labels.TEXTO_TEMPO_VALIDAR_ASSIMETRO_MODULOAR_OK, param: \"TempoParaValidarDeAssimetriaModular\"},\n { description: labels.TEXTO_TEMPO_VALIDAR_ASSIMETRO_ANGULAR_FALHA, param: \"TempoParaValidarAssimetriaAngularEmFalha\"},\n { description: labels.TEXTO_TEMPO_VALIDAR_ASSIMETRIA_ALGULAR_OK, param: \"TempoParaValidarAssimetriaAngular\"},\n { description: labels.TEXTO_VALOR_ASSIMETRIA_MODULAR, param: \"ValorDeAssimetriaModular\"},\n { description: labels.TEXTO_VALOR_ASSIMETRIA_ANGULAR, param: \"ValorDeAssimetriaAngular\"},\n { description: labels.TEXTO_HABILITA_SENSOR_UMIDADE, param: \"HabilitaSensorDeUmidade\"},\n];\n\n//prettier-ignore\nconst Parametros_Apollo_EPS_USER = [\n { description: labels.TEXTO_AJUSTE_HORAS, param: \"AjusteDaHora\"},\n { description: labels.TEXTO_AJUSTE_MINUTOS, param: \"AjusteDoMinuto\"},\n { description: labels.TEXTO_AJUSTE_ANO, param: \"AjusteDoAno\"},\n { description: labels.TEXTO_AJUSTE_MES, param: \"AjusteDoMes\"},\n { description: labels.TEXTO_AJUSTE_DIA, param: \"AjusteDoDiaDoMes\"},\n { description: labels.TEXTO_TEMPO_AMOSTRAGEM_LOG, param: \"TempoDeAmostragemParaGerarLog\"},\n];\n\n//prettier-ignore\nconst Parametros_Apollo_EPS_ADM = [\n { description: labels.TEXTO_AJUSTE_HORAS, param: \"AjusteDaHora\"},\n { description: labels.TEXTO_AJUSTE_MINUTOS, param: \"AjusteDoMinuto\"},\n { description: labels.TEXTO_AJUSTE_ANO, param: \"AjusteDoAno\"},\n { description: labels.TEXTO_AJUSTE_MES, param: \"AjusteDoMes\"},\n { description: labels.TEXTO_AJUSTE_DIA, param: \"AjusteDoDiaDoMes\"},\n { description: labels.TEXTO_TEMPO_AMOSTRAGEM_LOG, param: \"TempoDeAmostragemParaGerarLog\"},\n { description: labels.TEXTO_MINIMA_TEMPERATURA_SETPOINT, param: \"MinimaTemperaturaDeSetpoint\"},\n { description: labels.TEXTO_MAXIMA_TEMPERATURA_SETPOINT, param: \"MaximaTemperaturaDeSetpoint\"},\n { description: labels.TEXTO_TEMPO_PORTA_ABERTA, param: \"TempoDePortaAbertaParaDesligarCompressor\"},\n]\n//prettier-ignore\nconst Parametros_Apollo_EPS_AST = [\n { description: labels.TEXTO_AJUSTE_HORAS, param: \"AjusteDaHora\"},\n { description: labels.TEXTO_AJUSTE_MINUTOS, param: \"AjusteDoMinuto\"},\n { description: labels.TEXTO_AJUSTE_ANO, param: \"AjusteDoAno\"},\n { description: labels.TEXTO_AJUSTE_MES, param: \"AjusteDoMes\"},\n { description: labels.TEXTO_AJUSTE_DIA, param: \"AjusteDoDiaDoMes\"},\n { description: labels.TEXTO_BLOQUEIO_DE_SETPOINT, param: \"BloqueioDeSetpoint\"},\n { description: labels.TEXTO_BLOQUEIO_DE_ON_OFF, param: \"BloqueioDeLigaDesliga\"},\n { description: labels.TEXTO_TEMPO_AMOSTRAGEM_LOG, param: \"TempoDeAmostragemParaGerarLog\"},\n { description: labels.TEXTO_MINIMA_TEMPERATURA_SETPOINT, param: \"MinimaTemperaturaDeSetpoint\"},\n { description: labels.TEXTO_MAXIMA_TEMPERATURA_SETPOINT, param: \"MaximaTemperaturaDeSetpoint\"},\n { description: labels.TEXTO_HABILITA_PORTA, param: \"HabilitaSensorDePorta\"},\n { description: labels.TEXTO_TEMPO_PORTA_ABERTA, param: \"TempoDePortaAbertaParaDesligarCompressor\"},\n { description: labels.TEXTO_TEMPO_MAXIMO_REFRIGERACAO, param: \"TempoMaximoRefrigeracao\"},\n { description: labels.TEXTO_SAIDA_ADICIONAL, param: \"FuncionamentoDaSaidaAdicional\"},\n { description: labels.TEXTO_TIPO_DEGELO, param: \"TipoDeDegelo\"},\n { description: labels.TEXTO_MODO_DEGELO, param: \"ModoDegelo\"},\n { description: labels.TEXTO_TEMPO_MAXIMO_DEGELO, param: \"TempoMaximoDeDegelo\"},\n { description: labels.TEXTO_TEMPERATURA_HABILITA_DEGELO, param: \"TemperaturaParaHabiltarDegelo\"},\n { description: labels.TEXTO_HABILITA_DEGELO_POR_FALTA_DE_DECREMENTO_NA_TEMPERATURA_DE_SUCCAO, param: \"HabilitaDegeloPorFaltaDeDecrementoNaTemperaturaDeSuccao\"}, \n { description: labels.TEXTO_TEMPO_SEM_DECREMENTO_TEMPERATURA, param: \"TempoSemDecrementoDaTemperaturaDeSuccao\"},\n { description: labels.TEXTO_DELTA_DE_TEMPO_PARA_DEGELO_POR_FALTA_DE_DECREMENTO, param: \"DeltaDeTempoParaDegeloPorFaltaDeDecremento\"},\n { description: labels.TEXTO_DELTA_DE_TEMPERATURA_PARA_DEGELO_POR_FALTA_DE_DECREMENTO, param: \"DeltaDeTemperaturaParaDegeloPorFaltaDeDecremento\"},\n { description: labels.TEXTO_TEMPO_GOTEJAMENTO, param: \"TempoDeGotejamento\"},\n { description: labels.TEXTO_TEMPO_PRE_REFRIGERACAO, param: \"TempoDePreRefrigeracao\"},\n { description: labels.TEXTO_CONTROLE_TENSAO, param: \"ControleTensao\" },\n { description: labels.TEXTO_TENSAO_MIN_12V, param: \"TensaoMinimaDeOperacao12V\"},\n { description: labels.TEXTO_TENSAO_MAX_12V, param: \"TensaoMaximoDeOperacao12V\"},\n { description: labels.TEXTO_TENSAO_MIN_24V, param: \"TensaoMinimaDeOperacao24V\"},\n { description: labels.TEXTO_TENSAO_MAX_24V, param: \"TensaoMaximoDeOperacao24V\"},\n { description: labels.TEXTO_HABILITA_SENSOR_UMIDADE, param: \"HabilitaSensorDeUmidade\"},\n];\n\n// prettier-ignore\nexport const parametros = {\n AE: {FK: Parametros_Apollo_E_Flex_Eletrico_FK, USER: Parametros_Apollo_E_Flex_USER, ADM: Parametros_Apollo_E_Flex_ADM, AST: Parametros_Apollo_E_Flex_AST},\n AS: {FK: Parametros_Apollo_E_Flex_FK , USER: Parametros_Apollo_E_Flex_USER, ADM: Parametros_Apollo_E_Flex_ADM, AST: Parametros_Apollo_E_Flex_AST},\n FE: {FK: Parametros_Apollo_E_Flex_Eletrico_FK, USER: Parametros_Apollo_E_Flex_USER, ADM: Parametros_Apollo_E_Flex_ADM, AST: Parametros_Apollo_E_Flex_AST},\n FS: {FK: Parametros_Apollo_E_Flex_FK , USER: Parametros_Apollo_E_Flex_USER, ADM: Parametros_Apollo_E_Flex_ADM, AST: Parametros_Apollo_E_Flex_AST},\n TI: {FK: Parametros_Titan_FK , USER: Parametros_Titan_USER, ADM: Parametros_Titan_ADM, AST: Parametros_Titan_AST},\n\n EF: {FK: Parametros_Apollo_E_Flex_FK , USER: Parametros_Apollo_E_Flex_USER, ADM: Parametros_Apollo_E_Flex_ADM, AST: Parametros_Apollo_E_Flex_AST},\n AFR:{FK: Parametros_Apollo_FR_FK , USER: Parametros_Apollo_FR_USER , ADM: Parametros_Apollo_FR_ADM , AST: Parametros_Apollo_FR_AST},\n ADEPS: {FK: Parametros_Apollo_DUAL_FK , USER: Parametros_Apollo_DUAL_USER , ADM: Parametros_Apollo_DUAL_ADM , AST: Parametros_Apollo_DUAL_AST},\n AEPS: {FK: Parametros_Apollo_EPS_FK , USER: Parametros_Apollo_EPS_USER , ADM: Parametros_Apollo_EPS_ADM , AST: Parametros_Apollo_EPS_AST},\n};\n","import React from \"react\";\nimport _ from \"lodash\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { Grid } from \"@material-ui/core\";\nimport { Wrapper } from \"./Wrapper\";\nimport Skeleton from \"@material-ui/lab/Skeleton\";\n\nexport const Loading = () => (\n \n \n Loading...\n \n \n \n \n \n {_.range(0, 4).map((n) => (\n \n \n \n ))}\n \n \n);\n\nexport const LoadingParams = () => (\n \n \n Loading...\n \n \n {_.range(0, 50).map((n) => (\n \n \n \n ))}\n \n \n);\n","import CssBaseline from \"@material-ui/core/CssBaseline\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport React, { useState } from \"react\";\nimport { useQuery } from \"react-query\";\nimport { useParams } from \"react-router-dom\";\nimport DeviceControl from \"../components/DeviceControl/DeviceControl\";\nimport { Drawer } from \"../components/Drawer\";\nimport * as api from \"./api\";\nimport _ from \"lodash\";\n\nimport Card from \"@material-ui/core/Card\";\nimport CardActionArea from \"@material-ui/core/CardActionArea\";\nimport CardActions from \"@material-ui/core/CardActions\";\nimport CardContent from \"@material-ui/core/CardContent\";\nimport CardMedia from \"@material-ui/core/CardMedia\";\nimport Button from \"@material-ui/core/Button\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { Box, CircularProgress, Grid, Slider, SvgIcon } from \"@material-ui/core\";\nimport { parseISO, formatDistanceToNow } from \"date-fns\";\nimport differenceInMinutes from \"date-fns/differenceInMinutes\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport { blue, deepOrange, green, grey, red } from \"@material-ui/core/colors\";\nimport { Chart1 as ChartTemp } from \"./components/ChartTemp\";\nimport { MapWithSlider as MapTruck } from \"./components/MapTruck\";\nimport { Wrapper, message } from \"./components/Wrapper\";\nimport { enumToBoolean, getInitiais, normalizeValue } from \"./util\";\nimport { Link as RouterLink } from \"react-router-dom\";\nimport { ParamChanger } from \"./components/ParamChanger\";\nimport { ChipPending } from \"./components/ChipStatus\";\nimport CheckIcon from \"@material-ui/icons/Check\";\nimport SignalCellular4BarIcon from \"@material-ui/icons/SignalCellular4Bar\";\nimport ClearIcon from \"@material-ui/icons/Clear\";\nimport LocalShipping from \"@material-ui/icons/LocalShipping\";\nimport PauseIcon from \"@material-ui/icons/Pause\";\nimport QueryBuilderIcon from \"@material-ui/icons/QueryBuilder\";\nimport HourglassEmptyIcon from \"@material-ui/icons/HourglassEmpty\";\nimport SettingsIcon from \"@material-ui/icons/Settings\";\nimport DescriptionIcon from \"@material-ui/icons/Description\";\nimport { useAuthContext } from \"../hooks/useAuth\";\n\nimport { parametros } from \"./parametros\";\nimport { Loading } from \"./components/Loading\";\n\nfunction IconThermostat(props) {\n return (\n \n \n \n \n );\n}\n\nfunction IconWifiOff(props) {\n return (\n \n \n \n );\n}\n\nfunction IconWifiOn(props) {\n return (\n \n \n \n );\n}\n\nfunction IconDriver(props) {\n return (\n \n \n \n \n );\n}\n\n// Snow\n\nfunction IconSnow(props) {\n return (\n \n \n \n );\n}\n// drop\nfunction IconDegelo(props) {\n return (\n \n \n \n );\n}\n// auto\nfunction IconAuto(props) {\n return (\n \n \n \n \n );\n}\n// heat\nfunction IconHeater(props) {\n return (\n \n \n \n );\n}\n// const Parameter = ({ style, name, value, color, onClick, pending }) => {\n// const classes = useStyles();\n\n// return (\n// \n// \n// {/* */}\n// {pending && (\n// \n// PENDING\n// \n// )}\n// \n// \n// \n// \n// \n// \n// \n// {name.toUpperCase()}\n// \n// \n// {value.toUpperCase()}\n// \n// \n// \n// \n// );\n// };\n\n// const CardSimpler = ({ labels, onClick, pending }) => {\n// const classes = useStyles();\n\n// return (\n// \n// \n// \n// \n// \n// \n// {labels[0]}\n// \n// \n// \n// \n// \n// \n// {labels[1]}\n// \n// \n// {labels[2]}\n// \n// \n// \n// \n// \n// );\n// };\n\nconst CardSetpoint = ({ labels, onClick, chartLink, pending }) => {\n const classes = useStyles();\n return (\n \n \n \n \n \n \n {labels[0]}\n \n\n {pending ? (\n \n ) : (\n \n \n \n )}\n \n \n\n \n \n {labels[1]}\n \n {labels[2]}\n \n \n \n \n \n \n \n \n \n );\n};\n\nconst CardConnection = ({ isOnline }) => {\n const classes = useStyles();\n\n return (\n \n \n \n \n \n Conexão\n \n \n \n \n \n \n\n \n \n {isOnline ? : }\n {/* {isOnline ? : } */}\n \n {isOnline ? \"Online\" : \"Offline\"}\n \n \n \n \n \n );\n};\n\nconst CardControle = ({ code, description, color, strokeColor, circleColor }) => {\n const classes = useStyles();\n\n // prettier-ignore\n const icons = {\n Desligado: QueryBuilderIcon,\n Refrigeracao: IconSnow,\n Degelo: IconDegelo,\n Gotejamento: IconDegelo,\n PreRefrigeracao: IconSnow,\n DegeloPorTemperatura: IconDegelo,\n DegeloManual: IconDegelo,\n DegeloPorTempo: IconDegelo,\n Aquecimento: IconAuto,\n Automatico: IconAuto,\n };\n\n const Icon = icons[code] || IconAuto;\n\n return (\n \n \n \n \n \n Controle\n \n \n \n \n \n \n\n \n \n \n \n \n \n {description}\n \n \n \n \n \n );\n};\n\nconst CardLink = ({ style, label, link, color }) => {\n const classes = useStyles();\n\n return (\n \n \n \n \n \n \n \n \n \n {label.toUpperCase()}\n \n \n \n \n );\n};\n\nconst phoneToWhatsappLink = (phone) => {\n return `https://wa.me/${phone}`;\n};\n\nfunction maskName(name) {\n if (!name) return \"\";\n\n const [firstName, lastName] = name.split(\" \");\n if (!firstName || !lastName) return name;\n\n const mask = (str) => {\n if (str.length <= 2) return str; // Não mascara nomes muito curtos\n return str[0] + \"*\".repeat(str.length - 2) + str[str.length - 1];\n };\n\n const maskedFirstName = mask(firstName);\n const maskedLastName = mask(lastName);\n\n return `${maskedFirstName} ${maskedLastName}`;\n}\n\n\nconst CardDriver = ({ info }) => {\n const classes = useStyles();\n const { auth } = useAuthContext();\n\n if (!info) {\n return
loading
;\n }\n\n const { email, phone, name, photo } = info;\n\n const displayedName = auth.in_training ? maskName(name) : name; // Aplica a máscara se o usuário estiver em treinamento\n\n const avatar = photo ? (\n \n ) : (\n \n {getInitiais(info)}\n \n );\n\n const openWhatsapp = () => window.open(phoneToWhatsappLink(phone));\n\n return (\n \n \n \n \n \n \n Motorista\n \n \n \n \n \n \n\n \n \n {avatar}\n \n {displayedName || email || phone}\n \n \n \n \n \n \n \n \n \n );\n};\n\nconst TempChart = ({ enableSecondary, serial }) => {\n return (\n \n \n \n \n \n \n \n );\n};\n\nconst CardWithNumber = ({ avatar, link, label, secondLabel, icon }) => {\n const classes = useStyles();\n\n return (\n \n \n \n \n \n \n {label || secondLabel}\n \n {icon}\n \n \n\n \n \n {avatar || 0}\n \n {secondLabel || label}\n \n \n \n \n \n \n );\n};\n\nconst MapTruck_ = React.memo(MapTruck);\n\nexport default function Device() {\n const classes = useStyles();\n let { serial } = useParams();\n\n const [changeParam, setChangeParam] = useState(null);\n const [changeDescription, setChangeDescription] = useState(\"\");\n const [changeValue, setChangeValue] = useState(null);\n const [pendingValue, setChangePendingValue] = useState(null);\n const { getFkLevel } = useAuthContext();\n\n const pendingRemote = useQuery([\"pending-remote\", serial], api.getPendingRemote, { refetchInterval: 3000 });\n const queryLogs = useQuery([\"logs\", serial], () => api.getLogFiles(\"\", serial));\n\n const main = useQuery([\"device\", serial], api.getMainScreenData, {\n refetchInterval: 10000,\n staleTime: 10000,\n });\n\n if (main.isLoading) return ;\n if (main.error) return message(\"An error has occurred: \" + main.error.message);\n\n const params = _.get(main.data, \"result[0].params\");\n const updated_at = _.get(main.data, \"result[0].updated_at\");\n const updated_by = _.get(main.data, \"result[0].updated_by\");\n const language = 0; // pt\n if (!params) return message(\"Invalid params\");\n\n const {\n HabilitaSensorTemperaturaCamara2,\n Setpoint01,\n Setpoint02,\n TemperaturaCamara1,\n TemperaturaCamara2,\n TipoDeControleShort,\n TipoDeControleString,\n EstadoControle,\n TempoParaDegelo,\n NumeroSerial,\n } = params;\n\n const chamber2 = enumToBoolean(HabilitaSensorTemperaturaCamara2);\n const isOnline = differenceInMinutes(new Date(), parseISO(updated_at)) <= 1;\n const valueSetpoint1 = _.get(Setpoint01, \"current\") + \" \" + _.get(Setpoint01, \"unit\");\n const valueSetpoint2 = _.get(Setpoint02, \"current\") + \" \" + _.get(Setpoint02, \"unit\");\n const valueTemp1 = TemperaturaCamara1 + \" \" + _.get(Setpoint01, \"unit\");\n const valueTemp2 = TemperaturaCamara2 + \" \" + _.get(Setpoint02, \"unit\");\n\n const pending = _.get(pendingRemote.data, \"result[0].remote\");\n const pendingDict = pending == null ? {} : Object.assign({}, ...pending.map((x) => ({ [x.param]: x.value })));\n const userLevel = getFkLevel();\n\n let applicableParams = [];\n try {\n applicableParams = parametros[TipoDeControleShort][\"FK\"];\n } catch (error) {\n return message(\"Invalid device configuration\");\n }\n\n const handleClickSetpoint = (param, description) => {\n setChangeParam(param);\n setChangeDescription(description);\n setChangeValue(params[param]);\n if (pending) {\n setChangePendingValue(pendingDict[param]);\n } else {\n setChangePendingValue(null);\n }\n };\n\n return (\n \n setChangeParam(null)}\n onSave={(value) => {\n api.remoteCommand(null, serial, changeParam, normalizeValue(value)).then((result) => {\n setChangeParam(null);\n pendingRemote.refetch();\n });\n }}\n />\n\n \n Dispositivo {serial}\n \n \n \n \n \n \n \n {updated_by && (\n \n \n \n )}\n \n handleClickSetpoint(\"Setpoint01\", \"Setpoint 1\")}\n chartLink={`/device/${serial}/chart/1`}\n pending={\"Setpoint01\" in pendingDict}\n />\n \n\n {chamber2 && (\n \n handleClickSetpoint(\"Setpoint02\", \"Setpoint 2\")}\n chartLink={`/device/${serial}/chart/2`}\n pending={\"Setpoint02\" in pendingDict}\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 useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n },\n content: {\n flexGrow: 1,\n backgroundColor: theme.palette.background.default,\n padding: theme.spacing(3),\n },\n avatar: {\n width: theme.spacing(7),\n height: theme.spacing(7),\n backgroundColor: grey[100],\n },\n helperIcon: {\n width: theme.spacing(5),\n height: theme.spacing(5),\n backgroundColor: grey[100],\n },\n temp: {\n width: theme.spacing(7),\n height: theme.spacing(7),\n backgroundColor: \"white\",\n color: grey[500],\n fontWeight: \"bold\",\n },\n setpoint: {\n width: theme.spacing(10),\n height: theme.spacing(10),\n backgroundColor: grey[100],\n color: grey[500],\n fontWeight: \"bold\",\n },\n}));\n","import React, { useEffect, useRef, ReactElement, useState } from \"react\";\nimport { MapContainer, TileLayer, Marker, Popup, useMap } from \"react-leaflet\";\nimport * as api from \"../api\";\nimport { useQuery } from \"react-query\";\nimport _ from \"lodash\";\nimport { differenceInMinutes, formatDistanceToNow, parseISO } from \"date-fns\";\nimport L from \"leaflet\";\n\nimport markerImage from \"./marker.png\";\nimport markerImageOffline from \"./marker-offline.png\";\nimport { Box, CircularProgress, Typography } from \"@material-ui/core\";\nimport { Link as RouterLink } from \"react-router-dom\";\n\nfunction tryFormatDistance(ts) {\n try {\n return formatDistanceToNow(ts, { addSuffix: true });\n } catch (error) {\n return \"--\";\n }\n}\n\nconst getCustomMarker = (isOnline) => {\n return new L.icon({\n iconUrl: isOnline ? markerImage : markerImageOffline,\n iconRetinaUrl: isOnline ? markerImage : markerImageOffline,\n iconSize: [150 / 4, 201 / 4],\n popupAnchor: [0, -201 / 8],\n });\n};\n\nconst computeCentroid = (points) => {\n if (points.length === 0) {\n return { lat: null, lng: null };\n }\n\n let latitude = 0;\n let longitude = 0;\n let n = points.length;\n\n for (const point of points) {\n latitude += point[0];\n longitude += point[1];\n }\n\n return {\n lat: latitude / n,\n lng: longitude / n,\n };\n // return new LatLng(latitude/n, longitude/n);\n};\n\nconst Loading = () => (\n \n \n \n);\n\nconst Error = ({ message }) => (\n \n \n Error\n \n \n {message}\n \n \n);\n\nconst ChangeView = ({ center, zoom, bounds }) => {\n const map = useMap();\n\n useEffect(() => {\n if (bounds) {\n map.fitBounds(bounds);\n } else {\n map.setView(center, zoom);\n }\n }, [center, zoom, bounds, map]);\n\n return null;\n};\n\nexport const Map = ({ isLoading, error, data }) => {\n const [fitBounds, setFitBounds] = useState(null);\n\n //const validPoints = data.result.filter((d) => _.get(d, \"last_position.value.latitude\"));\n const validPoints = data.result.filter((d) =>\n _.get(d, \"last_position.value.latitude\") && \n _.get(d, \"last_position.value.longitude\") &&\n Number.isFinite(_.get(d, \"last_position.value.latitude\")) &&\n Number.isFinite(_.get(d, \"last_position.value.longitude\"))\n );\n //const validLatLng = validPoints.map((d) => ({ lat: _.get(d, \"last_position.value.latitude\"), lng: _.get(d, \"last_position.value.longitude\") }));\n const validLatLng = validPoints.map((d) => [\n _.get(d, \"last_position.value.latitude\"),\n _.get(d, \"last_position.value.longitude\"),\n ]);\n const { lat, lng } = computeCentroid(validLatLng); // used to center whole map\n const bounds = validLatLng.length > 0 ? L.latLngBounds(validLatLng) : null;\n\n useEffect(() => {\n if (data.result.length > 0) {\n const bounds = L.latLngBounds(validLatLng);\n setFitBounds(bounds);\n }\n }, [data]);\n\n if (isLoading) {\n return ;\n }\n\n if (error) {\n return ;\n }\n\n\n if (!bounds) {\n return ;\n }\n\n //const validPoints = data.result.filter((d) => _.get(d, \"last_position.value.latitude\"));\n //const validLatLng = validPoints.map((d) => ({ lat: _.get(d, \"last_position.value.latitude\"), lng: _.get(d, \"last_position.value.longitude\") }));\n //const { lat, lng } = computeCentroid(validLatLng); // used to center whole map\n\n // Do not return any value that would break our map below..\n if (lat == null || Number.isNaN(lat) || lng == null || Number.isNaN(lng)) {\n return ;\n }\n\n return (\n setFitBounds(fitBounds)} \n //bounds={fitBounds}\n >\n \n {validPoints.map((device) => (\n \n \n
\n {device.serial}\n
\n
\n Last online {tryFormatDistance(_.get(device, \"last_position.localts\"))}\n
\n
\n \n View device\n \n
\n
\n \n ))}\n
\n );\n};\n","export default __webpack_public_path__ + \"static/media/frigo_header.34dee9c3.png\";","import CssBaseline from \"@material-ui/core/CssBaseline\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport React from \"react\";\nimport { useQuery } from \"react-query\";\nimport { useParams } from \"react-router-dom\";\nimport DeviceControl from \"../components/DeviceControl/DeviceControl\";\nimport { Drawer } from \"../components/Drawer\";\nimport * as api from \"./api\";\nimport _ from \"lodash\";\n\nimport Card from \"@material-ui/core/Card\";\nimport CardActionArea from \"@material-ui/core/CardActionArea\";\nimport CardActions from \"@material-ui/core/CardActions\";\nimport CardContent from \"@material-ui/core/CardContent\";\nimport CardMedia from \"@material-ui/core/CardMedia\";\nimport Button from \"@material-ui/core/Button\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { Box, Chip, CircularProgress, Grid, Slider, SvgIcon } from \"@material-ui/core\";\nimport { parseISO, formatDistanceToNow } from \"date-fns\";\nimport differenceInMinutes from \"date-fns/differenceInMinutes\";\nimport Avatar from \"@material-ui/core/Avatar\";\nimport { blue, deepOrange, grey, red } from \"@material-ui/core/colors\";\nimport ChartTemp from \"./components/ChartTemp\";\nimport { ChipStatus } from \"./components/ChipStatus\";\nimport { Map as MapMultiple } from \"./components/MapMultiple\";\nimport { decodeSetpoint, getInitiais } from \"./util\";\nimport { Link as RouterLink } from \"react-router-dom\";\nimport { Wrapper, message } from \"./components/Wrapper\";\nimport { Loading } from \"./components/Loading\";\nimport { useAuthContext } from \"../hooks/useAuth\";\n\nimport { default as FrigoHeader } from \"../assets/images/frigo_header.png\";\n\nfunction IconThermostat(props) {\n return (\n \n \n \n \n );\n}\n\nfunction SvgDevice(props) {\n return (\n \n {/* */}\n \n \n 23\n \n \n 23\n \n \n );\n}\n\nfunction mask(str) {\n if (str.length <= 2) return str; // N�o mascara nomes muito curtos\n return str[0] + \"*\".repeat(str.length - 2) + str[str.length - 1];\n}\n\nfunction maskName(name) {\n if (!name) return \"\";\n\n const nameParts = name.split(\" \");\n \n if (nameParts.length === 1) {\n // Caso o nome seja �nico, mascarar apenas o nome\n const singleName = nameParts[0];\n return mask(singleName);\n }\n\n const [firstName, lastName] = nameParts;\n\n const maskedFirstName = mask(firstName);\n const maskedLastName = mask(lastName);\n\n return `${maskedFirstName} ${maskedLastName}`;\n}\n\nconst DeviceCard = (props) => {\n const classes = useStyles();\n const { serial, updated_at, updated_by, last_position, params } = props;\n const link = `/device/${serial}/`;\n const { auth } = useAuthContext();\n\n const { chamber2, isOnline, setpoint1, setpoint2, temp1, temp2, controle } = decodeSetpoint(props);\n\n const { name } = updated_by || {};\n const displayedName = auth.in_training ? maskName(name) : name; // Aplica a m�scara se o usu�rio estiver em treinamento\n\n return (\n \n \n \n \n \n \n {serial}\n \n \n \n \n {controle || \"--\"}\n \n \n {/*_.get(updated_by, \"name\", \"\\u00A0\")*/}\n {displayedName }\n \n \n\n \n \n {temp1}\n \n Setpoint: {setpoint1}\n \n \n {chamber2 && (\n \n {temp2}\n \n Setpoint: {setpoint2}\n \n \n )}\n \n\n {/* \n \n Atualizado: {updated_at}\n \n */}\n \n \n \n );\n};\n\nexport default function Device() {\n const classes = useStyles();\n\n const main = useQuery([\"multi-data\"], api.getMultiData, {\n refetchInterval: 10000,\n });\n\n if (main.isLoading) return ;\n if (main.error) return message(\"An error has occurred: \" + main.error.message);\n\n let devices = _.get(main, \"data.result\");\n if (devices == null || devices.length == 0) {\n return message(\"Error: no device found.\");\n }\n\n return (\n \n \n \n \n {_.get(main.data, \"result\", []).length} devices\n \n \n \n
\n \n \n \n
\n
\n
\n\n \n \n \n \n {devices.map((device) => (\n \n \n \n ))}\n \n
\n );\n}\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n },\n content: {\n flexGrow: 1,\n backgroundColor: theme.palette.background.default,\n padding: theme.spacing(3),\n },\n avatar: {\n width: theme.spacing(7),\n height: theme.spacing(7),\n backgroundColor: \"white\",\n color: grey[500],\n fontWeight: \"bold\",\n },\n}));\n","import CssBaseline from \"@material-ui/core/CssBaseline\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport React from \"react\";\nimport _ from \"lodash\";\n\nimport Card from \"@material-ui/core/Card\";\nimport CardActionArea from \"@material-ui/core/CardActionArea\";\nimport CardContent from \"@material-ui/core/CardContent\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { Box, Chip, CircularProgress, Grid, Slider, SvgIcon } from \"@material-ui/core\";\n\nconst formatSerial = (s) => s.substr(0, 2) + \".\" + s.substr(2);\n\n// prettier-ignore\nconst special_params = {\n Hora: {tipo: \"minmax\", source: \"DataEHora\", field: \"hour\", unit: \"h\", min: 0, max: 23 , writer: (d, n) => ([d.day, d.month, d.year >> 8, d.year & 0xff, n, d.min])},\n Minuto: {tipo: \"minmax\", source: \"DataEHora\", field: \"min\", unit: \"min\", min: 0, max: 59 , writer: (d, n) => ([d.day, d.month, d.year >> 8, d.year & 0xff, d.hour, n])},\n Ano: {tipo: \"minmax\", source: \"DataEHora\", field: \"year\", unit: \"\", min: 2000, max: 2099, writer: (d, n) => ([d.day, d.month, n >> 8, n & 0xff, d.hour, d.min])},\n Mês: {tipo: \"minmax\", source: \"DataEHora\", field: \"month\", unit: \"\", min: 1, max: 12 , writer: (d, n) => ([d.day, n, d.year >> 8, d.year & 0xff, d.hour, d.min])},\n Dia: {tipo: \"minmax\", source: \"DataEHora\", field: \"day\", unit: \"\", min: 1, max: 31 , writer: (d, n) => ([ n, d.month, d.year >> 8, d.year & 0xff, d.hour, d.min])},\n AjusteDaHora: {tipo: \"minmax\", source: \"DataEHora\", field: \"hour\", unit: \"h\", min: 0, max: 23 , writer: (d, n) => ([d.day, d.month, d.year >> 8, d.year & 0xff, n, d.min])},\n AjusteDoMinuto: {tipo: \"minmax\", source: \"DataEHora\", field: \"min\", unit: \"min\", min: 0, max: 59 , writer: (d, n) => ([d.day, d.month, d.year >> 8, d.year & 0xff, d.hour, n])},\n AjusteDoAno: {tipo: \"minmax\", source: \"DataEHora\", field: \"year\", unit: \"\", min: 2000, max: 2099, writer: (d, n) => ([d.day, d.month, n >> 8, n & 0xff, d.hour, d.min])},\n AjusteDoMes: {tipo: \"minmax\", source: \"DataEHora\", field: \"month\", unit: \"\", min: 1, max: 12 , writer: (d, n) => ([d.day, n, d.year >> 8, d.year & 0xff, d.hour, d.min])},\n AjusteDoDiaDoMes: {tipo: \"minmax\", source: \"DataEHora\", field: \"day\", unit: \"\", min: 1, max: 31 , writer: (d, n) => ([ n, d.month, d.year >> 8, d.year & 0xff, d.hour, d.min])},\n VersaoBle: {tipo: \"special\", source: \"VersaoBle\"},\n VersoesDeSwPainel: {tipo: \"special\", source: \"VersoesDeSwPainel\", field: \"sw\", format: (s) => (s/10).toFixed(1)},\n VersaoBootloader: {tipo: \"special\", source: \"VersoesDeSwPainel\", field: \"bootloader\", format: (s) => (s/10).toFixed(1)},\n VersoesDeSwRefrigeracao: {tipo: \"special\", source: \"VersoesDeSwRefrigeracao\", field: \"sw\", format: (s) => (s/10).toFixed(1)},\n VersaoBootloaderRefrigeracao: {tipo: \"special\", source: \"VersoesDeSwRefrigeracao\", field: \"bootloader\", format: (s) => (s/10).toFixed(1)},\n VersoesDeSwDiesel: {tipo: \"special\", source: \"VersoesDeSwDiesel\", field: \"sw\", format: (s) => (s/10).toFixed(1)},\n VersoesBootloaderDiesel: {tipo: \"special\", source: \"VersoesDeSwDiesel\", field: \"bootloader\", format: (s) => (s/10).toFixed(1)},\n NumeroSerial: {tipo: \"special\", source: \"NumeroSerial\", field: \"current\", format: formatSerial},\n};\n\nexport function ParamDisplay({ onClick, label, param, deviceParams, pending, pendingParams }) {\n let readParam = param in special_params ? special_params[param].source : param;\n\n let value;\n let unit;\n\n if (param != \"\") {\n if (param in special_params) {\n const meta = special_params[param];\n const complexValue = deviceParams[meta.source];\n value = complexValue && meta.field ? complexValue[meta.field] : complexValue;\n if (meta.format) {\n value = meta.format(value);\n }\n } else if (param in deviceParams) {\n const complexValue = deviceParams[param];\n value = JSON.stringify(complexValue);\n if (complexValue)\n if (typeof complexValue == \"object\") {\n if (\"tipo\" in complexValue && \"selected\" in complexValue && \"options\" in complexValue && complexValue[\"tipo\"] == \"enum\") {\n const { selected, options } = complexValue;\n if (pending) {\n value = options[pendingParams[param]];\n } else {\n value = options[selected];\n }\n } else {\n if (pending) {\n value = complexValue.unit === \"V\" ? parseFloat(pendingParams[param]).toFixed(1) : pendingParams[param];\n } else {\n value = complexValue.unit === \"V\" ? parseFloat(complexValue.current).toFixed(1) : complexValue.current;\n }\n unit = complexValue.unit;\n }\n } else {\n if (complexValue === -600 || complexValue == -6000) {\n // invalid value\n value = \"--\";\n } else {\n if (pending) {\n value = pendingParams[param];\n } else {\n value = complexValue.toString();\n }\n }\n }\n } else {\n value = \"--\"; // (${param})\n }\n }\n\n return (\n \n \n \n \n \n {label}\n \n {pending && }\n \n \n {value != null ? value : \"--\"}\n {unit ? \" \" + unit : \"\"}\n \n \n \n \n );\n}\n","import { Grid } from \"@material-ui/core\";\nimport Breadcrumbs from \"@material-ui/core/Breadcrumbs\";\nimport Link from \"@material-ui/core/Link\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\nimport _ from \"lodash\";\nimport React, { useState } from \"react\";\nimport { useQuery } from \"react-query\";\nimport { Link as RouterLink, useParams } from \"react-router-dom\";\nimport { useAuthContext } from \"../hooks/useAuth\";\nimport * as api from \"./api\";\nimport { LoadingParams } from \"./components/Loading\";\nimport { ParamChanger } from \"./components/ParamChanger\";\nimport { ParamDisplay } from \"./components/ParamDisplay\";\nimport { message, Wrapper } from \"./components/Wrapper\";\nimport { parametros } from \"./parametros\";\nimport { normalizeValue } from \"./util\";\n\nexport default function Parameters() {\n let { serial } = useParams();\n\n const { getFkLevel } = useAuthContext();\n\n const [changeParam, setChangeParam] = useState(null);\n const [changeDescription, setChangeDescription] = useState(\"\");\n const [changeValue, setChangeValue] = useState(null);\n const [pendingValue, setChangePendingValue] = useState(null);\n\n const [remoteCommands, setRemoteCommands] = useState([]);\n\n const { error, isLoading, data, refetch } = useQuery([\"get-all-params\", serial], api.getAllParams);\n\n const pendingRemote = useQuery([\"pending-remote\", serial], api.getPendingRemote);\n\n if (isLoading) return ;\n if (error) return message(\"An error has occurred: \" + error.message);\n\n if (pendingRemote.isLoading) return ;\n if (pendingRemote.error) return message(\"An error has ocurred: \" + error.message);\n\n const params = _.get(data, \"result[0].params\");\n const pending = _.get(pendingRemote.data, \"result[0].remote\");\n const pendingDict = Object.assign({}, ...pending.map((x) => ({ [x.param]: x.value })));\n\n const tipoDeControle = _.get(params, \"TipoDeControleShort\");\n const userLevel = getFkLevel(); //_.get(auth || {}, \"fk_level\", \"USER\");\n const language = 0; // pt\n\n if (!tipoDeControle || !userLevel) {\n return message(\"Bad config?\");\n }\n\n let applicableParams;\n try {\n applicableParams = parametros[tipoDeControle][userLevel];\n } catch (error) {\n return message(\"Bad config?\");\n }\n\n return (\n \n \n \n {serial}\n \n Parâmetros\n \n \n Parâmetros\n \n\n setChangeParam(null)}\n onSave={(value) => {\n api.remoteCommand(null, serial, changeParam, normalizeValue(value)).then((result) => {\n console.log(\"onSave\", value);\n setChangeParam(null);\n pendingRemote.refetch();\n });\n }}\n />\n\n \n {applicableParams.map((p) => (\n \n {\n setChangeParam(p.param);\n setChangeDescription(p.description[language]);\n setChangeValue(params[p.param]);\n if (pending) {\n setChangePendingValue(pendingDict[p.param]);\n } else {\n setChangePendingValue(null);\n }\n }}\n deviceParams={params}\n pendingParams={pendingDict}\n param={p.param}\n label={p.description[language]}\n />\n \n ))}\n \n \n );\n}\n","import { Box, Card, CardContent, Grid } from \"@material-ui/core\";\nimport Breadcrumbs from \"@material-ui/core/Breadcrumbs\";\nimport Link from \"@material-ui/core/Link\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\nimport _ from \"lodash\";\nimport React, { useState } from \"react\";\nimport { useQuery } from \"react-query\";\nimport { Link as RouterLink, useParams } from \"react-router-dom\";\nimport * as api from \"../api\";\nimport { ParamChanger } from \"./components/ParamChanger\";\nimport { ParamDisplay } from \"./components/ParamDisplay\";\nimport { message, Wrapper } from \"./components/Wrapper\";\nimport { Chart1, Chart2 } from \"./components/ChartTemp\";\nimport { parametros } from \"./parametros\";\nimport { normalizeValue } from \"./util\";\n\nimport { DateRangePicker } from \"react-date-range\";\nimport \"react-date-range/dist/styles.css\";\nimport \"react-date-range/dist/theme/default.css\";\n\n//[Stefano] 03-08-2023 configurando fuso horario\n//import { format } from \"date-fns\";\nimport { utcToZonedTime, format } from \"date-fns-tz\";\n\nconst useStyles = makeStyles((theme) => ({\n datePicker: {\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(2),\n height: \"100px\", // Defina a largura desejada para o seletor de intervalo de datas\n },\n chartContainer: {\n height: \"400px\", // Defina a altura desejada para o gráfico\n },\n}));\n\n export default function Parameters() {\n console.log(\"charts.js Parameters\");\n\n const today = new Date();\n today.setHours(0, 0, 0, 0); // Definir o horário para 00:00:00\n\n const endOfDay = new Date();\n endOfDay.setHours(23, 59, 59, 999); // Definir o horário para 23:59:59\n\n\n const [selectedDateRange, setSelectedDateRange] = useState(() => {\n const today = new Date();\n today.setHours(0, 0, 0, 0); // Definir o horário para 00:00:00\n\n const endOfDay = new Date();\n endOfDay.setHours(23, 59, 59, 999); // Definir o horário para 23:59:59\n\n const selectedStartDate = utcToZonedTime(today, \"America/Sao_Paulo\");\n const selectedEndDate = utcToZonedTime(endOfDay, \"America/Sao_Paulo\");\n \n console.log(\"charts.js Parameters selectedStartDate, selectedEndDate\", selectedStartDate, selectedEndDate);\n\n return {\n startDate: selectedStartDate,\n endDate: selectedEndDate,\n key: \"selection\",\n formattedStartDate: format(selectedStartDate, \"yyyy-MM-dd HH:mm:ss\"),\n formattedEndDate: format(selectedEndDate, \"yyyy-MM-dd HH:mm:ss\"),\n };\n });\n \n let { serial, id } = useParams();\n const label = id == 1 ? \"Câmara 1\" : \"Câmara 2\";\n selectedDateRange.startDate.setHours(0,0,0,0);\n selectedDateRange.endDate.setHours(23,59,59,999);\n console.log(\"charts.js selectedDateRange\", selectedDateRange);\n const chart = id == 1 ? : ;\n\n const classes = useStyles();\n \n const handleGetChartData = () => {\n\n setSelectedDateRange((prevState) => {\n\n const formattedStartDate = format(prevState.startDate, \"yyyy-MM-dd HH:mm:ss\");\n const formattedEndDate = format(prevState.endDate, \"yyyy-MM-dd 23:59:59\");\n \n //console.log(\"handleGetChartData\", formattedStartDate, formattedEndDate);\n console.log(\"charts.js Parameters handleGetChartData\");\n \n return {\n ...prevState,\n formattedStartDate,\n formattedEndDate,\n };\n\n });\n };\n\n //const { error, isLoading, data } = useQuery(\n // [\"chartData\", serial, selectedDateRange.formattedStartDate, selectedDateRange.formattedEndDate],\n // () => api.getChartData(serial, selectedDateRange.formattedStartDate, selectedDateRange.formattedEndDate),\n // { staleTime: 1000 * 60 * 10 }\n //);\n\n return (\n \n \n \n {serial}\n \n Gráficos\n \n \n {label}\n \n\n \n \n \n {chart}\n \n \n \n setSelectedDateRange(item.selection)}/>\n \n );\n}\n","import React from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Paper from \"@material-ui/core/Paper\";\nimport { default as IconDownload } from \"@material-ui/icons/GetApp\";\nimport Tooltip from \"@material-ui/core/Tooltip\";\nimport { default as IconView } from \"@material-ui/icons/Visibility\";\nimport { formatDistanceToNow, parseISO } from \"date-fns\";\nimport { humanFileSize } from \"../util\";\nimport IconButton from \"@material-ui/core/IconButton\";\nimport { Link as RouterLink } from \"react-router-dom\";\n\nconst baseUrl = process.env.NODE_ENV === \"development\" ? \"http://localhost:3535/fk/\" : \"https://api.globusway.com/\";\n\nexport default ({ rows }) => {\n const download = (key) => {\n window.location.href = `${baseUrl}fk/download/${key}`; //\"https://yoursite.com/src/assets/files/exampleDoc.pdf\"\n };\n return (\n \n \n \n \n Filename\n Size (kB) \n Date\n Actions\n \n \n \n {rows.map((row) => (\n \n \n {row.filename}\n \n \n {humanFileSize(row.size)}\n \n \n {formatDistanceToNow(parseISO(row.ts), { addSuffix: true })}\n \n \n \n \n \n \n \n \n download(row.key)}>\n \n \n \n \n \n ))}\n \n
\n
\n );\n};\n","import { Box, Card, CardContent, CircularProgress, Grid } from \"@material-ui/core\";\nimport Breadcrumbs from \"@material-ui/core/Breadcrumbs\";\nimport Link from \"@material-ui/core/Link\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\nimport _ from \"lodash\";\nimport React, { useState } from \"react\";\nimport { useQuery } from \"react-query\";\nimport { Link as RouterLink, useParams } from \"react-router-dom\";\nimport * as api from \"./api\";\nimport { ParamChanger } from \"./components/ParamChanger\";\nimport { ParamDisplay } from \"./components/ParamDisplay\";\nimport { message, Wrapper } from \"./components/Wrapper\";\nimport { Chart1, Chart2 } from \"./components/ChartTemp\";\nimport { parametros } from \"./parametros\";\nimport { normalizeValue } from \"./util\";\nimport FileList from \"./components/FileList\";\n\nconst LogFiles = ({ serial }) => {\n const { isLoading, error, data } = useQuery([\"logs\", serial], () => api.getLogFiles(\"\", serial));\n\n if (isLoading) {\n return (\n \n \n \n );\n }\n if (error) {\n return (\n \n \n Error\n \n \n Could not load chart data\n \n \n );\n }\n\n return ;\n};\n\nexport default function Parameters() {\n let { serial } = useParams();\n\n return (\n \n \n \n {serial}\n \n Logs\n \n \n Logs\n \n\n \n \n \n \n );\n}\n","import { Box, Card, CardContent, CircularProgress, Grid } from \"@material-ui/core\";\nimport Breadcrumbs from \"@material-ui/core/Breadcrumbs\";\nimport Link from \"@material-ui/core/Link\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\nimport _ from \"lodash\";\nimport React, { useState } from \"react\";\nimport { useQuery } from \"react-query\";\nimport { Link as RouterLink, useParams } from \"react-router-dom\";\nimport * as api from \"./api\";\nimport { ParamChanger } from \"./components/ParamChanger\";\nimport { ParamDisplay } from \"./components/ParamDisplay\";\nimport { message, Wrapper } from \"./components/Wrapper\";\nimport { Chart1, Chart2 } from \"./components/ChartTemp\";\nimport { parametros } from \"./parametros\";\nimport { normalizeValue } from \"./util\";\nimport FileList from \"./components/FileList\";\nimport { usePapaParse } from \"react-papaparse\";\n// import { DataGrid } from \"@mui/x-data-grid\";\nimport MUIDataTable from \"mui-datatables\";\n\nconst baseUrl = process.env.NODE_ENV === \"development\" ? \"http://localhost:3535/fk/\" : \"https://api.globusway.com/\";\n\nexport default function LogView() {\n const { readString } = usePapaParse();\n const [loading, setLoading] = useState(true);\n const [parsed, setData] = useState(null);\n\n let { serial, filename } = useParams();\n const key = `${serial}/logs/${filename}`;\n const url = `${baseUrl}fk/download/${key}`;\n\n const parseCSV = (csv) => {\n const skipFirst = csv.substring(csv.indexOf(\"\\n\") + 1);\n\t// correcao para ponto e virgula\n //const result = readString(skipFirst, { header: true, skipEmptyLines: true });\n\tconst result = readString(skipFirst, { header: true, skipEmptyLines: true, delimiter: \";\" });\n console.log(result);\n setLoading(false);\n setData(result);\n };\n\n const Body = ({ children }) => (\n \n \n \n {serial}\n \n \n Logs\n \n {filename}\n \n\n {children}\n \n );\n\n React.useEffect(() => {\n api.downloadFile(url).then((s) => parseCSV(s));\n }, []);\n\n if (loading) {\n return (\n \n Parsing CSV file...\n \n );\n }\n\n if (parsed == null) {\n return (\n \n Data is not valid?\n \n );\n }\n\n const { data, meta } = parsed;\n\n const nonEmptyColumns = meta.fields.filter((x) => x.trim().length > 0);\n\n return (\n \n \n \n );\n}\n","import React from \"react\";\nimport InputLabel from \"@material-ui/core/InputLabel\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport Select from \"@material-ui/core/Select\";\nimport { Box, FormHelperText } from \"@material-ui/core\";\n\nexport const EnumValue = ({ id, label, value, options, onChange, name, error, helperText, disabled }) => {\n return (\n \n {label}\n {\n console.log(\"onChange\", event.target.value);\n onChange(event.target.value);\n }}\n >\n {options.map((entry, key) => (\n \n {typeof entry == \"object\" ? entry.display : entry}\n \n ))}\n \n {helperText && {helperText}}\n \n );\n};\n","import React from \"react\";\nimport Breadcrumbs from \"@material-ui/core/Breadcrumbs\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { grey } from \"@material-ui/core/colors\";\n\nconst getBreadcrumbColor = (isLast) => (isLast ? grey[700] : grey[500]);\n\nexport default ({ data, empty }) => {\n if (!data || data.length == 0) return {empty || \"--\"};\n return (\n \n {data.map((item, key) => (\n \n {item}\n \n ))}\n \n );\n};\n\nexport const toBreadcrumbs = (val) => {\n // return val.join(\"-\");\n return (\n \n {val &&\n val.map((item, key) => (\n \n {item}\n \n ))}\n \n );\n};\n","import React, { useState } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Button from \"@material-ui/core/Button\";\nimport Dialog from \"@material-ui/core/Dialog\";\nimport Breadcrumbs from \"@material-ui/core/Breadcrumbs\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { grey } from \"@material-ui/core/colors\";\n\nimport DialogActions from \"@material-ui/core/DialogActions\";\nimport DialogContent from \"@material-ui/core/DialogContent\";\nimport DialogContentText from \"@material-ui/core/DialogContentText\";\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport Switch from \"@material-ui/core/Switch\";\nimport { useEffect } from \"react\";\nimport { TextField } from \"@material-ui/core\";\nimport _ from \"lodash\";\nimport * as yup from \"yup\";\nimport { useFormik } from \"formik\";\nimport * as api from \"../../api\";\nimport useClient from \"../../hooks/useClient\";\nimport { EnumValue } from \"./EnumValue\";\nimport { toBreadcrumbs } from \"./Breadlist\";\nimport { useAuthContext } from \"../../hooks/useAuth\";\n\nconst useStyles = makeStyles((theme) => ({\n form: {\n display: \"flex\",\n flexDirection: \"column\",\n // margin: \"auto\",\n minWidth: 400,\n },\n formControl: {\n margin: theme.spacing(1),\n },\n formControlLabel: {\n marginTop: theme.spacing(1),\n },\n}));\n\nconst validateUpdate = yup.object({\n email: yup.string(\"Enter an email address\").required(\"Email is required\"),\n first_name: yup.string(\"Enter a first name\").required(\"First name is required\"),\n last_name: yup.string(\"Enter a last name\").required(\"Last name is required\"),\n client: yup.string(\"Select a client for this user\").required(\"Client is required\"),\n fk_level: yup.string(\"Select access level for this user\").required(\"Access level is required\"),\n is_support: yup.boolean(),\n in_training: yup.boolean(),\n});\n\nconst validateCreate = yup.object({\n email: yup.string(\"Enter an email address\").required(\"Email is required\"),\n password: yup.string().required(\"Please Enter your password\").min(6, \"Password must be a string at least 6 characters long\"),\n first_name: yup.string(\"Enter a first name\").required(\"First name is required\"),\n last_name: yup.string(\"Enter a last name\").required(\"Last name is required\"),\n client: yup.string(\"Select a client for this user\").required(\"Client is required\"),\n fk_level: yup.string(\"Select access level for this user\").required(\"Access level is required\"),\n is_support: yup.boolean(),\n in_training: yup.boolean(),\n});\n\n// Convert error \"Django format\" to formik\nconst errorToFormik = (resp) => {\n let output = {};\n for (const k of Object.keys(resp)) {\n output[k] = resp[k].join(\", \");\n }\n output[\"email\"] = output[\"username\"].replace(\"username\", \"email\");\n return output;\n};\n\nfunction maskEmail(email) {\n const [localPart, domain] = email.split(\"@\");\n if (!localPart || !domain) return email;\n\n // Mascarando a parte local\n const maskedLocalPart = localPart[0] + \"*\".repeat(localPart.length - 2) + localPart[localPart.length - 1];\n\n // Mascarando o domínio\n const domainParts = domain.split(\".\");\n const maskedDomain = domainParts[0][0] + \"*\".repeat(domainParts[0].length - 2) + domainParts[0][domainParts[0].length - 1] + \".\" + domainParts[1];\n\n return `${maskedLocalPart}@${maskedDomain}`;\n}\n\nfunction maskName(name) {\n if (!name) return \"\";\n if (name.length <= 2) return name; // Não mascara nomes muito curtos\n return name[0] + \"*\".repeat(name.length - 2) + name[name.length - 1];\n}\n\nexport const DialogUserChange = ({ user, initial, isOpen, onClose, onSave }) => {\n const classes = useStyles();\n const [newValue, setNewValue] = useState(null);\n // const [clientOptions, setClientOptions] = useState(null);\n const { client, clientOptions } = useClient();\n const { auth } = useAuthContext();\n const [openConfirmDialog, setOpenConfirmDialog] = useState(false);\n\n const emptyValidationSchema = yup.object({}); // Esquema vazio para delete\n\n const [realValues, setRealValues] = useState({\n email: \"\",\n first_name: \"\",\n last_name: \"\"\n });\n\n const [maskedValues, setMaskedValues] = useState({\n email: \"\",\n first_name: \"\",\n last_name: \"\"\n });\n\n\n const formik = useFormik({\n initialValues: {\n email: \"\",\n first_name: \"\",\n last_name: \"\",\n client: \"\", // id\n fk_level: \"\", // string\n is_support: false,\n in_training: false,\n action: \"\",\n },\n validationSchema: (values) => {\n if (values?.action && values.action === \"delete\") {\n return emptyValidationSchema;\n } else if (values?.action) {\n return validateUpdate;\n }\n return emptyValidationSchema; // Se não houver action, retorna esquema vazio\n },\n onSubmit: async (values, { setErrors }) => {\n const newUser = { \n ...realValues, \n id: user.id, \n parent: values.client, \n fk_level: values.fk_level, \n username: realValues.email, \n in_training: values.in_training \n };\n console.log(\"asAPI user onSubmit \" + `${newUser}`);\n try {\n if (values.action === \"delete\") {\n await api.users().delete(newUser);\n } else {\n await api.users().update(newUser);\n }\n onClose();\n } catch (error) {\n setErrors(errorToFormik(error.response.data));\n }\n },\n });\n\n\n useEffect(() => {\n if (user) {\n // console.log(\" \", JSON.stringify(user, null, 4));\n // setNewValue({ ...user });\n //formik.setValues({ ...user });\n \n // Armazenar os valores reais\n setRealValues({\n email: user.email,\n first_name: user.first_name,\n last_name: user.last_name\n });\n\n if (auth.in_training) {\n setMaskedValues({\n email: maskEmail(user.email),\n first_name: maskName(user.first_name),\n last_name: maskName(user.last_name),\n });\n } else {\n setMaskedValues({\n email: user.email,\n first_name: user.first_name,\n last_name: user.last_name,\n });\n }\n\n // Definir valores mascarados no formik\n formik.setValues({\n ...user,\n email: auth.in_training ? maskEmail(user.email) : user.email,\n first_name: auth.in_training ? maskName(user.first_name) : user.first_name,\n last_name: auth.in_training ? maskName(user.last_name) : user.last_name,\n });\n }\n }, [isOpen]);\n\n const handleFieldChange = (field, value) => {\n // Atualize o estado do formik normalmente\n formik.setFieldValue(field, value);\n \n // Remover a máscara quando o campo for alterado\n setMaskedValues((prevValues) => ({\n ...prevValues,\n [field]: value, // Atualiza o valor sem máscara para o campo alterado\n }));\n setRealValues((prevValues) => ({\n ...prevValues,\n [field]: value, // Atualiza o valor real para o campo alterado\n }));\n };\n\n if (!clientOptions) return null; // for now\n\n \n\n return (\n \n {\"Editar usuário\"}\n \n
\n handleFieldChange(\"email\", event.target.value)}\n error={formik.touched.email && Boolean(formik.errors.email)}\n helperText={formik.touched.email && formik.errors.email}\n />\n handleFieldChange(\"first_name\", event.target.value)}\n error={formik.touched.first_name && Boolean(formik.errors.first_name)}\n helperText={formik.touched.first_name && formik.errors.first_name}\n />\n\n handleFieldChange(\"last_name\", event.target.value)}\n error={formik.touched.last_name && Boolean(formik.errors.last_name)}\n helperText={formik.touched.last_name && formik.errors.last_name}\n />\n\n formik.setFieldValue(\"fk_level\", value)}\n error={formik.touched.fk_level && Boolean(formik.errors.fk_level)}\n helperText={formik.touched.fk_level && formik.errors.fk_level}\n />\n\n ({ value: c.client.id, display: toBreadcrumbs(c.path) }))}\n value={formik.values.client || \"\"}\n onChange={(value) => formik.setFieldValue(\"client\", value)}\n error={formik.touched.client && Boolean(formik.errors.client)}\n helperText={formik.touched.client && formik.errors.client ? formik.errors.client : formik.values.client ? \"\" : \"CADASTRO PENDENTE\"}\n />\n\n formik.setFieldValue(\"is_support\", event.target.checked)}\n name=\"is_support\"\n color=\"primary\"\n />\n }\n label=\"Suporte\"\n />\n\n formik.setFieldValue(\"in_training\", event.target.checked)}\n name=\"in_training\"\n color=\"primary\"\n />\n }\n label=\"Em treinamento\"\n />\n\n \n
\n \n {\n formik.setFieldValue(\"action\", \"update\");\n formik.handleSubmit();\n }}\n variant=\"contained\"\n color=\"secondary\"\n >\n Atualizar\n \n {auth.fk_level === \"FK\" && (\n {\n formik.setFieldValue(\"action\", \"delete\");\n formik.handleSubmit();\n }}\n color=\"secondary\"\n >\n Remover\n \n )}\n \n \n \n );\n};\n\nexport const DialogUserCreate = ({ user, fields, isOpen, onClose, onSave }) => {\n const classes = useStyles();\n const { client, clientOptions } = useClient();\n\n const formik = useFormik({\n initialValues: {\n email: \"\",\n password: \"\",\n first_name: \"\",\n last_name: \"\",\n client: \"\", // id\n fk_level: \"\", // string\n is_support: false,\n in_training: false,\n },\n validationSchema: validateCreate,\n onSubmit: async (values, { setErrors }) => {\n try {\n const newUser = { ...values, parent: values.client, username: values.email };\n console.log(\"create\", newUser);\n const response = await api.users().create(newUser);\n console.log(response);\n onClose();\n // TODO: close form ? return to list ?\n } catch (error) {\n console.log(\"add user failed\", error);\n\n setErrors(errorToFormik(error.response.data));\n }\n },\n });\n\n useEffect(() => {\n if (isOpen) {\n formik.resetForm();\n }\n }, [isOpen]);\n\n if (!clientOptions) return null;\n\n return (\n \n {\"Adicionar usuário\"}\n \n
\n \n \n \n\n \n\n formik.setFieldValue(\"fk_level\", value)}\n error={formik.touched.fk_level && Boolean(formik.errors.fk_level)}\n helperText={formik.touched.fk_level && formik.errors.fk_level}\n />\n\n ({ value: c.client.id, display: toBreadcrumbs(c.path) }))}\n value={formik.values.client}\n onChange={(value) => formik.setFieldValue(\"client\", value)}\n error={formik.touched.client && Boolean(formik.errors.client)}\n helperText={formik.touched.client && formik.errors.client ? formik.errors.client : formik.values.client ? \"\" : \"CADASTRO PENDENTE\"}\n />\n\n formik.setFieldValue(\"is_support\", event.target.checked)}\n name=\"is_support\"\n color=\"primary\"\n />\n }\n label=\"Suporte\"\n />\n\n formik.setFieldValue(\"in_training\", event.target.checked)}\n name=\"in_training\"\n color=\"primary\"\n />\n }\n label=\"Em treinamento\"\n />\n \n
\n \n \n \n \n \n );\n};\n","import _ from \"lodash\";\nimport React from \"react\";\nimport { useQuery } from \"react-query\";\nimport * as api from \"../api\";\n\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { SimpleAppbar } from \"../components/DevicesAppBar\";\nimport { Drawer } from \"../components/Drawer\";\n\nimport MUIDataTable from \"mui-datatables\";\nimport TextField from \"@material-ui/core/TextField\"; // Add this import\nimport IconButton from \"@material-ui/core/IconButton\"; // Add this import\n//import SearchIcon from \"@material-ui/icons/Search\";\n\nimport { DialogUserChange, DialogUserCreate } from \"./components/UserForms\";\nimport MiniTable from \"./components/MiniTable\";\nimport { TableCell, TableRow } from \"@material-ui/core\";\n\n// [Stefano 03-08-2023] Importe o pacote de ícones para a pesquisa\nimport SearchIcon from \"@material-ui/icons/Search\";\n\nimport { useAuthContext } from \"../hooks/useAuth\";\n\nconst extraDataRows = [\n { key: \"name\", label: \"Nome\" },\n //{ key: \"cpf\", label: \"CPF\" },\n { key: \"phone\", label: \"Telefone\" },\n];\n\nfunction maskValue(value) {\n if (typeof value !== \"string\" || value.length <= 2) return value; // Não mascara valores muito curtos\n return value[0] + \"*\".repeat(value.length - 2) + value[value.length - 1];\n};\n\n\n\nfunction maskName(name) {\n if (!name) return \"\";\n\n const mask = (str) => {\n if (str.length <= 2) return str; // Não mascara nomes muito curtos\n return str[0] + \"*\".repeat(str.length - 2) + str[str.length - 1];\n };\n\n const [firstName, lastName] = name.split(\" \");\n const maskedFirstName = mask(firstName);\n const maskedLastName = lastName ? mask(lastName) : \"\";\n\n return `${maskedFirstName} ${maskedLastName}`.trim();\n};\n\nfunction maskEmail(email) {\n const [localPart, domain] = email.split(\"@\");\n if (!localPart || !domain) return email;\n\n // Mascarando a parte local\n const maskedLocalPart = localPart[0] + \"*\".repeat(localPart.length - 2) + localPart[localPart.length - 1];\n\n // Mascarando o domínio\n const domainParts = domain.split(\".\");\n const maskedDomain = domainParts[0][0] + \"*\".repeat(domainParts[0].length - 2) + domainParts[0][domainParts[0].length - 1] + \".\" + domainParts[1];\n\n return `${maskedLocalPart}@${maskedDomain}`;\n}\n\n\n\n// Stefano 13092023\n// Define a mapping of column labels to sorting strings\nconst columnSortingMap = {\n \"Usuario\": \"username\",\n \"Nome\": \"first_name\",\n \"Sobrenome\": \"last_name\",\n \"Cliente\": \"client_id\",\n \"Acesso\": \"fk_level\",\n \"Cadastro\": \"extra_data\",\n};\n\nconst TITLE = \"Usuários\";\nvar prevSearchText = \"\";\n\nexport default () => {\n const classes = useStyles();\n const [value, setValue] = React.useState(null);\n const [page, setPage] = React.useState(0);\n const [pageSize, setPageSize] = React.useState(20);\n const { auth } = useAuthContext();\n\n // Stefano 13092023 \n const [order, setOrder] = React.useState({\n column: 'username',\n direction: 'asc', // ou 'desc' para descendente\n });\n\n const [searchText, setSearchText] = React.useState('');\n const [enterPressed, setEnterPressed] = React.useState(false); // Step 1: Initialize enterPressed state\n\n const [filterText, setFilterText] = React.useState('');\n\n // Stefano 13092023 Function to handle column header click and update the order state\n const handleColumnHeaderClick = (column) => {\n const currentOrder = order.column === column ? order.direction : 'asc';\n setOrder({\n column: column,\n direction: currentOrder === 'asc' ? 'desc' : 'asc', // Toggle sorting direction\n });\n };\n\n // Stefano 13092023\n // Create a memoized \"orderParam\" variable\n const orderParam = React.useMemo(() => ({\n column: order.column,\n direction: order.direction,\n }), [order]);\n\n // Stefano 13092023\n // Callbacks para atualizar a página e o tamanho da página\n const handlePageChange = (event, newPage) => {\n console.log(\"handlePageChange\");\n setPage(newPage);\n };\n\n const handleRowsPerPageChange = (newPageSize) => {\n // Update the page size state with the new value\n setPageSize(newPageSize);\n \n // Optionally, you can trigger a data fetch or any other necessary actions here\n };\n\n const handleSearch = () => {\n // Perform the search logic here, like fetching data based on the searchText\n // You can use this function to refetch data with the new search term\n console.log(\"handleSearch\");\n if (enterPressed) {\n //refetch({ search: searchText, order: `${columnSortingMap[order.column]}:${order.direction}` });\n refetch({ search: searchText, order: `${order.column}:${order.direction}`, filter: filterText });\n }\n // Reset the Enter key state\n setEnterPressed(false);\n };\n\n const handleKeyUp = (e) => {\n if (e.key === 'Backspace' || e.key === 'Delete') {\n prevSearchText = ''; // Clear the search text\n setSearchText('');\n } else if (e.key === 'Shift' || e.key === 'CapsLock') {\n //ignora\n } else if (e.key !== 'Enter') {\n prevSearchText = prevSearchText + e.key;\n } else {\n setSearchText(prevSearchText);\n setEnterPressed(true);\n setPage(0);\n refetch();\n setEnterPressed(false);\n prevSearchText= \"\";\n }\n };\n\n const handleSearchTextChange = (newSearchText) => {\n console.log(\"UserTable handleSearchTextChange \" + newSearchText);\n if (enterPressed) {\n setEnterPressed(false);\n setSearchText(newSearchText);\n //refetch({ search: searchText, order: `${columnSortingMap[order.column]}:${order.direction}` });\n refetch({ search: searchText, order: `${order.column}:${order.direction}`, filter: filterText });\n }\n };\n\n const fetchNewData = (changedColumn, filterList) => {\n // Aqui você pode buscar novos dados do servidor\n // e atualizar o estado com setData(newData)\n console.log(\"UserTable fetchNewData \" + changedColumn + \",\" + filterList);\n if (enterPressed) {\n setEnterPressed(false);\n setFilterText(changedColumn + \"=\" + filterList);\n refetch({ search: searchText, order: `${order.column}:${order.direction}`, filter: filterText });\n }\n };\n\n const slug = null;\n // Serialize the order parameter to a string\n //const serializedOrder = `${order.column}:${order.direction}`;\n let baseOrder = order.column === \"client_detail.name\" ? \"client_id\" : order.column;\n baseOrder = order.column === \"username\" ? \"email\" : baseOrder;\n const serializedOrder = `${baseOrder}:${order.direction}`;\n console.log(\"column=\" + order.column);\n const { isLoading, isError, error, data, refetch } = useQuery(\n [\"users\", slug || \"root\", page, searchText, serializedOrder, filterText], \n (_key, _slug, pageNumber, search, sorting, filter) => api.users().getAllAlternative(pageNumber+1, sorting, pageSize, search, filter),\n {\n manual: true, // Disable automatic refetching\n //refetchOnWindowFocus: false, // Force refetch on every page change\n }\n );\n\n //React.useEffect(() => {\n // Manually refetch the query when the page changes\n // refetch();\n //}, [page, refetch]);\n\n const renderJsonData = (input) => {\n if (input === \"\") return \"--\";\n try {\n const data = JSON.parse(input);\n if (typeof data != \"object\" || _.isEmpty(data)) {\n return \"--\";\n }\n let items = [];\n for (const { key, label } of extraDataRows) {\n let maskedValue = auth.in_training ? maskValue(data[key]) : data[key]; // Aplica a máscara ao valor\n items.push({ label, value: maskedValue });\n }\n return ;\n } catch (error) {\n return \"(err)\";\n }\n };\n\n const tableColumns = [\n {\n name: \"username\",\n label: \"Usuário\",\n options: {\n //customBodyRender: (value) => value || \"--\",\n customBodyRender: (value) => {\n return auth.in_training ? maskEmail(value) || \"--\" : value || \"--\"; \n },\n },\n },\n {\n name: \"first_name\",\n label: \"Nome\",\n options: {\n customBodyRender: (value) => {\n return auth.in_training ? maskName(value) || \"--\" : value || \"--\";\n },\n },\n },\n {\n name: \"last_name\",\n label: \"Sobrenome\",\n options: {\n customBodyRender: (value) => {\n return auth.in_training ? maskName(value) || \"--\" : value || \"--\";\n },\n },\n },\n {\n name: \"client_detail.name\",\n label: \"Cliente\",\n options: {\n customBodyRender: (value) => {\n return value ? value : \"CADASTRO PENDENTE\";\n },\n },\n },\n {\n name: \"fk_level\",\n label: \"Acesso\",\n options: {\n customBodyRender: (value) => value || \"--\",\n },\n },\n {\n name: \"extra_data\",\n label: \"Cadastro\",\n options: {\n customBodyRender: renderJsonData,\n },\n },\n ];\n\n let content;\n if (isLoading) {\n content =
Loading...
;\n } else if (isError) {\n content =
Error: {error.message}
;\n } else if (data && data.results) {\n content = (\n {\n // Atualize o estado de ordem com a coluna e direção selecionadas\n //setOrder({ column: changedColumn, direction });\n \n // Envie a solicitação para o backend com a ordem selecionada\n //refetch({ search: searchText, order: `${changedColumn.name2}:${direction}` });\n\n // Call your updated handleColumnHeaderClick function to handle column sorting\n handleColumnHeaderClick(changedColumn, direction);\n\n // Refetch data with the new sorting parameters\n refetch();\n },\n onChangePage: (currentPage) => {\n setPage(currentPage);\n refetch();\n },\n //onChangePage: handlePageChange,\n onChangeRowsPerPage: (numberOfRows) => {\n // Call your custom event handler with the new page size value\n handleRowsPerPageChange(numberOfRows);\n refetch();\n },\n // expandableRows: true,\n // expandableRowsHeader: false,\n // expandableRowsOnClick: false,\n // renderExpandableRow: (rowData, rowMeta) => {\n // const colSpan = rowData.length + 1;\n // const { extra_data } = data.results[rowMeta.dataIndex];\n // return (\n // \n // {renderJsonData(extra_data)}\n // \n // );\n // },\n // [Stefano 03/08/2023] Habilitar a funcionalidade de pesquisa\n search: true,\n searchText: searchText || \"\", // Initialize the search text\n /*\n customSearchRender: (searchText, onSearchTextChange, handleSearch, hideSearch, options) => {\n return (\n
\n {\n //setSearchText(e.target.value);\n // options.setSearchText(e.target.value);\n handleSearch();\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n handleSearch();\n }\n }}\n />\n \n \n \n
\n );\n },\n */\n // Handle search input change\n onSearchChange: (newSearchText) => {\n //e.preventDefault();\n handleSearchTextChange(newSearchText); // Update the search text state\n //searchText = newSearchText;\n },\n //onSearchClose: () => {\n // handleSearch(); // Call the search function when the search field is closed\n // setSearchText(searchText);\n //},\n /*\n onKeyPress: (event) => {\n console.log(\"UserTable onKeyPress \" + event.key);\n if (event.key === \"Enter\") {\n console.log(\"Enter\");\n handleSearch(); // Call the search function when Enter is pressed\n setSearchText(searchText);\n setPage(0);\n refetch();\n }\n },\n */\n searchProps: {\n onKeyUp: (e) => {\n console.log(\"UserTable onKeyUp \" + e.key);\n handleKeyUp(e);\n },\n },\n \n // filtros\n //filterType: 'dropdown',\n //responsive: 'standard',\n onFilterChange: (changedColumn, filterList) => {\n fetchNewData();\n },\n /*\n searchProps: {\n // Customize the search field\n onKeyDown: (e) => {\n console.log(\"UserTable onKeyDown \" + e.key);\n if (e.key === \"Enter\") {\n console.log(\"Enter\");\n //e.preventDefault(); // Prevent form submission\n setSearchText(searchText); // Update searchText state\n setPage(0); // Reset page to 0 when performing a new search\n refetch({ search: searchText }); // Call refetch with the new search text\n }\n },\n onKeyUp: (e) => {\n console.log(\"UserTable onKeyUp \" + e.key);\n if (e.key === \"Enter\") {\n console.log(\"Enter\");\n setSearchText(searchText); \n console.log(\"search\");\n setPage(0);\n console.log(\"page\");\n refetch();\n console.log(\"refetch\");\n }\n },\n //onChange: (e) => {\n // setSearchText(e.target.value);\n //},\n },\n */\n // [Stefano 03/08/2023] Definir o ícone de pesquisa\n //searchText: ,\n onRowClick: (_, meta) => setValue(data.results[meta.dataIndex]),\n }}\n />\n );\n } else {\n
\n
Invalid data
\n
{JSON.stringify(data.results, null, 4)}
\n
;\n }\n\n return ( \n <>\n
\n \n \n
\n setValue({}) }]} />\n {\n setTimeout(refetch, 1000);\n refetch();\n setValue(null);\n }}\n onSave={() => {\n setTimeout(refetch, 1000);\n refetch(); // Atualiza a lista após salvar as mudanças\n setValue(null);\n }}\n />\n {\n setTimeout(refetch, 1000);\n refetch();\n setValue(null);\n }}\n onSave={() => {\n setTimeout(refetch, 1000);\n refetch(); // Atualiza a lista após salvar as mudanças\n setValue(null);\n }}\n />\n
{content}
\n
\n
\n\n \n \n );\n};\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n },\n list: {\n margin: theme.spacing(2),\n },\n content: {\n flexGrow: 1,\n backgroundColor: theme.palette.background.default,\n },\n}));\n","import React, { useState } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Button from \"@material-ui/core/Button\";\nimport Dialog from \"@material-ui/core/Dialog\";\nimport Breadcrumbs from \"@material-ui/core/Breadcrumbs\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { grey } from \"@material-ui/core/colors\";\n\nimport DialogActions from \"@material-ui/core/DialogActions\";\nimport DialogContent from \"@material-ui/core/DialogContent\";\nimport DialogContentText from \"@material-ui/core/DialogContentText\";\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport InputLabel from \"@material-ui/core/InputLabel\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport Select from \"@material-ui/core/Select\";\nimport Switch from \"@material-ui/core/Switch\";\nimport { useEffect } from \"react\";\nimport { Box, FormHelperText, TextField, Checkbox } from \"@material-ui/core\";\nimport _ from \"lodash\";\nimport * as yup from \"yup\";\nimport { useFormik } from \"formik\";\nimport * as api from \"../../api\";\nimport useClient from \"../../hooks/useClient\";\nimport { EnumValue } from \"./EnumValue\";\nimport { useAuthContext } from \"../../hooks/useAuth\";\n\n//import Checkbox from '@material-ui/core/Checkbox';\n\nimport Radio from '@material-ui/core/Radio';\nimport RadioGroup from '@material-ui/core/RadioGroup';\nimport FormLabel from '@material-ui/core/FormLabel';\n\nconst validateUpdate = yup.object({\n name: yup.string(\"Enter a client name\").required(\"Client name cannot be empty\"),\n \n});\n\nconst useStyles = makeStyles((theme) => ({\n form: {\n display: \"flex\",\n flexDirection: \"column\",\n // margin: \"auto\",\n minWidth: 400,\n },\n formControl: {\n margin: theme.spacing(1),\n },\n formControlLabel: {\n marginTop: theme.spacing(1),\n },\n radioGroup: {\n display: 'flex',\n flexDirection: 'row', // Coloca os elementos lado a lado\n alignItems: 'center', // Alinha verticalmente\n },\n}));\n\nconst getBreadcrumbColor = (isLast) => (isLast ? grey[700] : grey[500]);\n\nconst toBreadcrumbs = (val) => {\n // return val.join(\"-\");\n return (\n \n {val &&\n val.map((item, key) => (\n \n {item}\n \n ))}\n \n );\n};\n\n// Convert error \"Django format\" to formik\nconst errorToFormik = (resp) => {\n if (Array.isArray(resp)) {\n return {\n others: resp.join(\", \"),\n };\n }\n\n let output = {};\n for (const k of Object.keys(resp)) {\n output[k] = typeof resp[k] == \"string\" ? resp[k] + \", \" : resp[k].join(\", \");\n }\n\n if (output[\"username\"] && typeof output[\"username\"] == \"string\") {\n output[\"email\"] = output[\"username\"].replace(\"username\", \"email\");\n }\n return output;\n};\n\nfunction maskName(name) {\n if (!name) return \"\";\n\n const mask = (str) => {\n if (str.length <= 2) return str; // Não mascara nomes muito curtos\n return str[0] + \"*\".repeat(str.length - 2) + str[str.length - 1];\n };\n\n const [firstName, lastName] = name.split(\" \");\n const maskedFirstName = mask(firstName);\n const maskedLastName = lastName ? mask(lastName) : \"\";\n\n return `${maskedFirstName} ${maskedLastName}`.trim();\n};\n\nexport const DialogClientChange = ({ options, initial, isOpen, onClose, onSave }) => {\n const classes = useStyles();\n // const [clientOptions, setClientOptions] = useState(null);\n const clientOptions = options;\n const { auth } = useAuthContext();\n\n const [realValues, setRealValues] = useState({\n name: \"\",\n cpf_cnpj: \"\",\n });\n\n const [maskedValues, setMaskedValues] = useState({\n name: \"\",\n cpf_cnpj: \"\",\n });\n\n const formik = useFormik({\n initialValues: {\n name: \"\",\n parent: \"\",\n cpf_cnpj: \"\",\n oem: false,\n bloqueado: false,\n telefone: \"\",\n email: \"\",\n termsAccepted: false,\n confirmationMethod: \"\",\n },\n validationSchema: validateUpdate,\n onSubmit: async (values, { setErrors }) => {\n try {\n const newClient = { \n ...realValues, \n id: initial.id, \n parent: values.parent, \n name: realValues.name, \n cpf_cnpj: realValues.cpf_cnpj ,\n oem: values.oem, \n bloqueado: values.bloqueado, \n };\n if (initial.parent != values.parent) {\n await api.moveClient(values.slug, values.parent);\n }\n await api.clients().update(newClient);\n onClose();\n } catch (error) {\n console.log(\"got error\", errorToFormik(error.response.data));\n setErrors(errorToFormik(error.response.data));\n }\n },\n });\n\n useEffect(() => {\n if (initial) {\n //formik.setValues({ ...initial });\n\n setRealValues({\n name: initial.name,\n cpf_cnpj: initial.cpf_cnpj\n });\n\n if (auth.in_training) {\n setMaskedValues({\n name: maskName(initial.name),\n cpf_cnpj: maskName(initial.cpf_cnpj)\n });\n } else {\n setMaskedValues({\n name: initial.name,\n cpf_cnpj: initial.cpf_cnpj\n });\n }\n\n formik.setValues({\n ...initial,\n name: auth.in_training ? maskName(initial.name) : initial.name,\n cpf_cnpj: auth.in_training ? maskName(initial.cpf_cnpj) : initial.cpf_cnpj,\n });\n }\n }, [isOpen]);\n\n const handleFieldChange = (field, value) => {\n // Atualize o estado do formik normalmente\n formik.setFieldValue(field, value);\n \n // Remover a máscara quando o campo for alterado\n setMaskedValues((prevValues) => ({\n ...prevValues,\n [field]: value, // Atualiza o valor sem máscara para o campo alterado\n }));\n setRealValues((prevValues) => ({\n ...prevValues,\n [field]: value, // Atualiza o valor real para o campo alterado\n }));\n };\n\n const clientRemove = async (id) => {\n if (id == null) {\n formik.setErrors({ others: \"Cliente não encontrado\" });\n return;\n }\n\n try {\n await api.clients().delete({ id });\n //onClose();\n setTimeout(onClose, 1000);\n } catch (error) {\n console.log(\"got error\", errorToFormik(error.response.data));\n formik.setErrors(errorToFormik(error.response.data));\n if (error?.response?.data?.message) {\n formik.setErrors({ others: error.response.data.message });\n }\n }\n };\n\n if (!clientOptions) return null; // for now\n\n return (\n \n {\"Editar cliente\"}\n \n
\n handleFieldChange(\"name\", event.target.value)}\n error={formik.touched.name && Boolean(formik.errors.name)}\n helperText={formik.touched.name && formik.errors.name}\n />\n\n handleFieldChange(\"cpf_cnpj\", event.target.value)}\n error={formik.touched.cpf_cnpj && Boolean(formik.errors.cpf_cnpj)}\n helperText={formik.touched.cpf_cnpj && formik.errors.cpf_cnpj}\n />\n\n formik.setFieldValue(\"oem\", event.target.checked)}\n name=\"oem\"\n color=\"primary\"\n />\n }\n label=\"OEM\"\n />\n\n {auth.fk_level === \"FK\" && (\n formik.setFieldValue(\"bloqueado\", event.target.checked)}\n name=\"bloqueado\"\n color=\"primary\"\n />\n }\n label=\"Bloqueado\"\n />\n )}\n\n {formik.values.parent && (\n ({ value: c.slug, display: toBreadcrumbs([...c.pathNames, c.name]) }))}\n // options={clientOptions.map((c) => ({ value: c.slug, display: c.name }))}\n value={formik.values.parent}\n onChange={(value) => formik.setFieldValue(\"parent\", value)}\n error={formik.touched.parent && Boolean(formik.errors.parent)}\n helperText={formik.touched.parent && formik.errors.parent}\n />\n )}\n {formik.errors.others && {formik.errors.others}}\n \n
\n \n \n \n \n \n \n );\n};\n\nexport const DialogClientCreate = ({ options, isOpen, onClose }) => {\n const classes = useStyles();\n // const [clientOptions, setClientOptions] = useState(null);\n const clientOptions = options;\n const { client } = useClient();\n const { auth } = useAuthContext();\n\n const formik = useFormik({\n initialValues: {\n name: \"\",\n parent: \"\",\n cpf_cnpj: \"\",\n oem: false,\n bloqueado: false,\n },\n validationSchema: validateUpdate,\n onSubmit: async (values, { setErrors }) => {\n try {\n await api.clients().create(values);\n onClose();\n } catch (error) {\n console.log(\"got error\");\n setErrors(errorToFormik(error.response.data));\n }\n },\n });\n\n useEffect(() => {\n if (isOpen) {\n formik.resetForm();\n }\n }, [isOpen]);\n\n if (!clientOptions) return null;\n\n return (\n \n {\"Adicionar cliente\"}\n \n
\n \n\n \n\n formik.setFieldValue(\"oem\", event.target.checked)}\n name=\"oem\"\n color=\"primary\"\n />\n }\n label=\"OEM\"\n />\n\n {auth.fk_level === \"FK\" && (\n formik.setFieldValue(\"bloqueado\", event.target.checked)}\n name=\"bloqueado\"\n color=\"primary\"\n />\n }\n label=\"Bloqueado\"\n />\n )}\n\n ({ value: c.parent.id, display: toBreadcrumbs(c.path) }))}\n // options={clientOptions.map((c) => ({ value: c.slug, display: toBreadcrumbs(c.pathNames) }))}\n options={clientOptions.map((c) => ({ value: c.slug, display: toBreadcrumbs([...c.pathNames, c.name]) }))}\n value={formik.values.parent}\n onChange={(value) => formik.setFieldValue(\"parent\", value)}\n error={formik.touched.parent && Boolean(formik.errors.parent)}\n helperText={formik.touched.parent && formik.errors.parent}\n />\n\n \n
\n \n \n \n \n \n );\n};\n","import _ from \"lodash\";\nimport React from \"react\";\nimport { useQuery } from \"react-query\";\nimport * as api from \"../api\";\n\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { SimpleAppbar } from \"../components/DevicesAppBar\";\nimport { Drawer } from \"../components/Drawer\";\nimport useClient from \"../hooks/useClient\";\n\nimport MUIDataTable from \"mui-datatables\";\nimport Breadlist from \"./components/Breadlist\";\n\nimport { DialogClientCreate, DialogClientChange } from \"./components/ClientForms\";\nimport { useAuthContext } from \"../hooks/useAuth\"; // Importe o hook de contexto de autenticação\n\nfunction maskName(name) {\n if (!name) return \"\";\n\n const mask = (str) => {\n if (str.length <= 2) return str; // Não mascara nomes muito curtos\n return str[0] + \"*\".repeat(str.length - 2) + str[str.length - 1];\n };\n\n const [firstName, lastName] = name.split(\" \");\n const maskedFirstName = mask(firstName);\n const maskedLastName = lastName ? mask(lastName) : \"\";\n\n return `${maskedFirstName} ${maskedLastName}`.trim();\n};\n\n\n\nconst blockedColumn = {\n name: \"bloqueado\",\n label: \"Bloqueado\",\n options: {\n customBodyRender: (value) => (value ? \"Sim\" : \"Nao\"),\n },\n};\n\nconst TITLE = \"Clientes\";\n\nexport default () => {\n const classes = useStyles();\n const [value, setValue] = React.useState(null);\n const [options, setOptions] = React.useState([]);\n const { refetch, loading, error, client, dirList } = useClient();\n const { auth } = useAuthContext();\n\n const baseTableColumns = [\n {\n name: \"name\",\n label: \"Nome\",\n options: {\n customBodyRender: (value) => {\n return auth.in_training ? maskName(value) : value || \"--\"; // Aplica a máscara ao primeiro nome\n },\n },\n },\n {\n name: \"cpf_cnpj\",\n label: \"CNPJ/CPF\",\n options: {\n customBodyRender: (value) => {\n return auth.in_training ? maskName(value) : value || \"--\"; // Aplica a máscara ao primeiro nome\n },\n },\n },\n {\n name: \"oem\",\n label: \"OEM\",\n options: {\n customBodyRender: (value) => (value ? \"Sim\" : \"Nao\"),\n },\n },\n {\n name: \"info.users\",\n label: \"Usuários\",\n },\n {\n name: \"info.devices\",\n label: \"Dispositivos\",\n },\n {\n name: \"info.children\",\n label: \"Clientes (filhos)\",\n },\n {\n name: \"pathNames\",\n label: \"Cliente pai\",\n options: {\n customBodyRender: (value) => ,\n },\n },\n ];\n \n const tableColumns = React.useMemo(() => {\n if (auth.fk_level === \"FK\") {\n return [...baseTableColumns, blockedColumn];\n }\n return baseTableColumns;\n }, [auth.fk_level]);\n\n React.useEffect(() => {\n console.log({ dirList });\n if (dirList) {\n if (value) {\n if (value.slug) {\n setOptions(dirList.filter((x) => x.slug != value.slug)); // ie: cannot be parent of itself\n } else {\n setOptions(dirList);\n }\n }\n }\n }, [dirList, value]);\n\n let content;\n if (loading) {\n content =
Loading...
;\n } else if (error) {\n content =
Error: {error.message}
;\n } else if (dirList) {\n // content =
{JSON.stringify(dirList, null, 4)}
;\n content = (\n {\n console.log(\"onRowClick\", meta.dataIndex, dirList[meta.dataIndex]);\n setValue(dirList[meta.dataIndex]);\n },\n }}\n />\n );\n } else {\n
\n
Invalid data
\n
{JSON.stringify(client, null, 4)}
\n
;\n }\n\n return (\n
\n \n \n
\n setValue({}) }]} />\n {\n setTimeout(refetch, 1000);\n refetch();\n setValue(null);\n }}\n onSave={() => {\n setTimeout(refetch, 1000);\n refetch(); // Atualiza a lista após salvar as mudanças\n setValue(null);\n }}\n />\n {\n setTimeout(refetch, 1000);\n refetch();\n setValue(null);\n }}\n onSave={() => {\n setTimeout(refetch, 1000);\n refetch(); // Atualiza a lista após salvar as mudanças\n setValue(null);\n }}\n />\n
{content}
\n
\n
\n );\n};\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n },\n list: {\n margin: theme.spacing(2),\n },\n content: {\n flexGrow: 1,\n backgroundColor: theme.palette.background.default,\n },\n}));\n","import React, { useState } from \"react\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Button from \"@material-ui/core/Button\";\nimport Dialog from \"@material-ui/core/Dialog\";\nimport Breadcrumbs from \"@material-ui/core/Breadcrumbs\";\nimport Typography from \"@material-ui/core/Typography\";\nimport { grey } from \"@material-ui/core/colors\";\n\nimport DialogActions from \"@material-ui/core/DialogActions\";\nimport DialogContent from \"@material-ui/core/DialogContent\";\nimport DialogContentText from \"@material-ui/core/DialogContentText\";\nimport DialogTitle from \"@material-ui/core/DialogTitle\";\nimport FormControl from \"@material-ui/core/FormControl\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport InputLabel from \"@material-ui/core/InputLabel\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport Select from \"@material-ui/core/Select\";\nimport Switch from \"@material-ui/core/Switch\";\nimport { useEffect } from \"react\";\nimport { Box, FormHelperText, TextField } from \"@material-ui/core\";\nimport _ from \"lodash\";\nimport * as yup from \"yup\";\nimport { useFormik } from \"formik\";\nimport * as api from \"../../api\";\nimport useClient from \"../../hooks/useClient\";\nimport { EnumValue } from \"./EnumValue\";\nimport { toBreadcrumbs } from \"./Breadlist\";\nimport { useAuthContext } from \"../../hooks/useAuth\";\n\nimport LoadingModal from \"../../pages/LoadingModal\"; // Importe o componente de janela de loading\nimport MessageDialog from '../../pages/MessageDialog'; // Verifique o caminho correto para o componente\n\n\n\nconst validateForm = yup.object().shape({\n serial: yup.string(\"Digite o numero de serie\").required(\"Numero de serie e' obrigatorio\"),\n cnpj: yup.string(\"Digite o CNPJ\").when(\"isEdit\", {\n is: false, // Quando isEdit � true (edi��o).required(\"CNPJ e' obrigatorio\"),\n then: yup.string().required(\"CNPJ e' obrigatorio\"), // Torna obrigat�rio\n otherwise: yup.string().notRequired(), // N�o obrigat�rio em inser��o\n }),\n client: yup.string(\"Selecione o cliente deste usuario\").when(\"isEdit\", {\n is: true, // Quando isEdit � true (edi��o)\n then: yup.string().required(\"Cliente e' obrigatorio\"), // Torna obrigat�rio\n otherwise: yup.string().notRequired(), // N�o obrigat�rio em inser��o\n }),\n placa: yup.string(\"Digite a placa do veiculo\").when(\"isEdit\", {\n is: true,\n then: yup.string().required(\"A placa e' obrigatoria\"),\n otherwise: yup.string().notRequired(),\n }),\n frota: yup.string(\"Digite a Frota\").when(\"isEdit\", {\n is: true,\n then: yup.string().required(\"Frota e' obrigatoria\"),\n otherwise: yup.string().notRequired(),\n }),\n});\n\nconst useStyles = makeStyles((theme) => ({\n form: {\n display: \"flex\",\n flexDirection: \"column\",\n // margin: \"auto\",\n minWidth: 400,\n },\n formControl: {\n margin: theme.spacing(1),\n },\n formControlLabel: {\n marginTop: theme.spacing(1),\n },\n}));\n\n// Convert error \"Django format\" to formik\nconst errorToFormik = (resp) => {\n if (Array.isArray(resp)) {\n return {\n others: resp.join(\", \"),\n };\n }\n\n let output = {};\n for (const k of Object.keys(resp)) {\n output[k] = typeof resp[k] == \"string\" ? resp[k] + \", \" : resp[k].join(\", \");\n }\n\n if (output[\"username\"] && typeof output[\"username\"] == \"string\") {\n output[\"email\"] = output[\"username\"].replace(\"username\", \"email\");\n }\n return output;\n};\n\nexport const DialogDeviceChange = ({ initial={}, isOpen, onClose, onSave }) => {\n const classes = useStyles();\n const { client, clientOptions } = useClient();\n const [loading, setLoading] = useState(false); // Estado para controlar o loading\n const [confirmationMessage, setConfirmationMessage] = useState('');\n const [openDialog, setOpenDialog] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n const [errors, setErrors] = useState({});\n const { auth } = useAuthContext();\n \n // Determina se inserindo ou editando\n const isEdit = initial && initial.serial;\n const dialogTitle = isEdit ? \"Editar dispositivo\" : \"Inserir dispositivo\";\n\n function maskName(name) {\n if (!name) return \"\";\n if (name.length <= 2) return name; // N�o mascara nomes muito curtos\n return name[0] + \"*\".repeat(name.length - 2) + name[name.length - 1];\n }\n\n const [realValues, setRealValues] = useState({\n client: \"\",\n placa: \"\"\n });\n \n const [maskedValues, setMaskedValues] = useState({\n client: \"\",\n placa: \"\"\n });\n\n const formik = useFormik({\n initialValues: {\n serial: \"\",\n client: \"\",\n placa: \"\",\n frota: \"\",\n cnpj: \"\",\n loading: false,\n },\n validationSchema: validateForm,\n onSubmit: async (values, { setErrors }) => {\n const newDevice = { \n ...realValues, \n id: values.id, \n parent: values.client, \n placa: realValues.placa, \n client: realValues.client, \n serial: values.serial,\n frota: values.frota,\n cnpj: values.cnpj,\n loading: values.loading\n };\n console.log(\"asAPI device onSubmit \" + `${newDevice}`);\n try {\n //const { serial, client, placa, frota, cnpj } = values;\n setLoading(true);\n if (isEdit) {\n if (initial.client != newDevice.client || initial.placa != newDevice.placa || initial.frota != newDevice.frota ) {\n console.log(\"device change info: \", newDevice.serial, newDevice.client, newDevice.placa, newDevice.frota);\n await api.moveDevice(values.slug, values.parent, newDevice.serial, newDevice.client, newDevice.placa, newDevice.frota);\n setLoading(false);\n onClose();\n } else {\n console.log(\"device unchanged info: \", newDevice.serial, newDevice.client, newDevice.placa, newDevice.frota);\n setLoading(false);\n onClose();\n }\n } else {\n console.log(\"new device info: \", newDevice.serial, newDevice.cnpj);\n // Aqui voc� faria a chamada para inserir um novo dispositivo usando serial e cnpj\n await api.insertDevice(newDevice.serial, newDevice.cnpj); // Suponha que exista uma fun��o para isso\n setLoading(false);\n setConfirmationMessage(\"O dispositivo foi inserido com sucesso.\");\n setOpenDialog(true);\n //onClose();\n }\n //setLoading(false);\n //onClose();\n } catch (error) {\n setLoading(false);\n console.log(\"got error\", errorToFormik(error));\n setErrors(errorToFormik(error));\n\n setErrorMessage(\"M�quina n�o foi localizada. Por favor, entrar em contato com a FrigoKing.\");\n setOpenDialog(true);\n }\n },\n });\n\n useEffect(() => {\n \n\n if (isOpen) {\n // Somente atualize os valores se `initial` n�o estiver vazio\n if (initial && Object.keys(initial).length > 0) {\n // Armazenar os valores reais\n setRealValues({\n client: initial.client,\n placa: initial.placa\n });\n\n if (auth.in_training) {\n setMaskedValues({\n client: maskName(initial.client),\n placa: maskName(initial.placa)\n });\n } else {\n setMaskedValues({\n client: initial.client,\n placa: initial.placa\n });\n }\n\n formik.setValues({\n serial: initial.serial || \"\",\n client: initial.client || \"\",\n placa: auth.in_training ? maskName(initial.placa) || \"\" : initial.placa || \"\",\n frota: initial.frota || \"\",\n cnpj: initial.cnpj || \"\",\n });\n } else {\n // No caso de inser��o manual, redefine os valores para os valores iniciais padr�o\n formik.setValues({\n serial: \"\",\n client: \"\",\n placa: \"\",\n frota: \"\",\n cnpj: \"\",\n });\n }\n }\n console.log(\"initial\", initial);\n }, [isOpen]);\n\n const handleFieldChange = (field, value) => {\n // Atualize o estado do formik normalmente\n formik.setFieldValue(field, value);\n \n // Remover a m�scara quando o campo for alterado\n setMaskedValues((prevValues) => ({\n ...prevValues,\n [field]: value, // Atualiza o valor sem m�scara para o campo alterado\n }));\n setRealValues((prevValues) => ({\n ...prevValues,\n [field]: value, // Atualiza o valor real para o campo alterado\n }));\n };\n\n const handleDialogClose = () => {\n setOpenDialog(false);\n if (!isEdit && confirmationMessage != \"\" && !Object.keys(errors).length) {\n console.log(\"erro 1:\", confirmationMessage);\n setConfirmationMessage(\"\");\n onClose();\n } else if (errorMessage !== \"\") {\n console.log(\"erro 2:\", errorMessage);\n setErrorMessage(\"\");\n onClose(); // Fecha o di�logo principal mesmo em caso de erro\n }\n console.log(\"sem erro\");\n };\n\n if (!clientOptions) return null; // for now\n\n // return
{JSON.stringify(clientOptions, null, 4)}
;\n\n return (\n \n {dialogTitle} {/* T�tulo din�mico */}\n \n
\n handleFieldChange(\"serial\", event.target.value)}\n error={formik.touched.serial && Boolean(formik.errors.serial)}\n helperText={formik.touched.serial && formik.errors.serial}\n />\n\n {!isEdit && (\n handleFieldChange(\"cnpj\", event.target.value)}\n error={formik.touched.cnpj && Boolean(formik.errors.cnpj)}\n helperText={(formik.touched.cnpj && formik.errors.cnpj) || \"Referente � empresa onde a m�quina foi comprada\"}\n />\n )}\n\n {isEdit && (\n <>\n handleFieldChange(\"placa\", event.target.value)}\n error={formik.touched.placa && Boolean(formik.errors.placa)}\n helperText={formik.touched.placa && formik.errors.placa}\n />\n\n handleFieldChange(\"frota\", event.target.value)}\n error={formik.touched.frota && Boolean(formik.errors.frota)}\n helperText={formik.touched.frota && formik.errors.frota}\n />\n \n ({ value: c.slug, display: toBreadcrumbs([...c.pathNames, c.name]) }))}\n // options={clientOptions.map((c) => ({ value: c.slug, display: c.name }))}\n options={clientOptions.map((c) => ({ value: c.client.id, display: toBreadcrumbs(c.path) }))}\n value={formik.values.client}\n //onChange={(value) => formik.setFieldValue(\"client\", value)}\n onChange={(value) => handleFieldChange(\"client\", value)}\n error={formik.touched.client && Boolean(formik.errors.client)}\n helperText={formik.touched.client && formik.errors.client}\n />\n \n )}\n\n {formik.errors.others && {formik.errors.others}}\n\n \n \n \n \n \n \n
\n \n
\n {/* Renderizar a janela de loading apenas quando o estado de loading for verdadeiro */}\n {loading && }\n \n
\n \n );\n};\n","import _ from \"lodash\";\nimport React, { useState } from 'react';\nimport { usePaginatedQuery, useQuery } from \"react-query\";\nimport * as api from \"../api\";\n\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\n\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { SimpleAppbar } from \"../components/DevicesAppBar\";\nimport { Drawer } from \"../components/Drawer\";\n\nimport MUIDataTable from \"mui-datatables\";\n\nimport { DialogDeviceChange } from \"./components/DeviceForms\";\nimport { useAuthContext } from \"../hooks/useAuth\";\n\nimport RefreshIcon from '@material-ui/icons/Refresh';\nimport Button from \"@material-ui/core/Button\"; // Importe o componente de bot�o do Material-UI\nimport SearchIcon from \"@material-ui/icons/Search\";\n\nimport LoadingModal from \"../pages/LoadingModal\"; // Importe o componente de janela de loading\n\nfunction maskName(name) {\n if (!name) return \"\";\n\n const mask = (str) => {\n if (str.length <= 2) return str; // N�o mascara nomes muito curtos\n return str[0] + \"*\".repeat(str.length - 2) + str[str.length - 1];\n };\n\n const [firstName, lastName] = name.split(\" \");\n const maskedFirstName = mask(firstName);\n const maskedLastName = lastName ? mask(lastName) : \"\";\n\n return `${maskedFirstName} ${maskedLastName}`.trim();\n};\n\n\n\nconst TITLE = \"Dispositivos\";\nvar prevSearchText = \"\";\n\nexport default () => {\n const classes = useStyles();\n const [value, setValue] = React.useState(null);\n const [page, setPage] = React.useState(0);\n const [pageSize, setPageSize] = React.useState(20);\n const [clientId, setClientId] = useState(null);\n const [loading, setLoading] = useState(false); // Estado para controlar o loading\n const [manualInsertDialogOpen, setManualInsertDialogOpen] = useState(false);\n const { auth } = useAuthContext();\n\n // Stefano 13092023 \n const [order, setOrder] = React.useState({\n column: 'serial',\n direction: 'asc', // ou 'desc' para descendente\n });\n\n const [searchText, setSearchText] = React.useState('');\n const [enterPressed, setEnterPressed] = React.useState(false); // Step 1: Initialize enterPressed state\n\n const [filterText, setFilterText] = React.useState('');\n\n const slug = null;\n\n // Callback para processar os dados retornados pela API\n const handleData = (data) => {\n // Verifica se os dados e os detalhes do cliente est�o dispon�veis\n if (data && data.results && data.results.length > 0 && data.results[0].client) {\n // Extrai o ID do cliente e atualiza o estado clientId\n setClientId(data.results[0].client);\n console.log(\"handleData id:\", data.results[0].client);\n }\n };\n\n const handleRefresh = async ( data ) => {\n try {\n console.log(\"handlerefresh data:\", data);\n setLoading(true);\n // Envia uma solicita��o para o backend de detec��o de novos dispositivos\n await api.detectNewDevices( );\n setLoading(false);\n // Atualiza os dados\n refetch();\n } catch (error) {\n console.error(\"Error importing devices:\", error);\n setLoading(false);\n }\n };\n\n const handleManualInsert = () => {\n // A��o a ser executada ao clicar em \"Inserir Manual\"\n // Pode ser abrir um di�logo, redirecionar para outra p�gina, etc.\n console.log(\"Inserir Manual clicked\");\n \n // Exemplo: Abrir um di�logo de inser��o manual (se voc� tiver um componente de di�logo)\n setValue({}); // Reseta o valor atual, caso tenha\n setManualInsertDialogOpen(true); // Supondo que voc� tenha um estado para controlar o di�logo\n };\n \n // Stefano 13092023 Function to handle column header click and update the order state\n const handleColumnHeaderClick = (column) => {\n const currentOrder = order.column === column ? order.direction : 'asc';\n setOrder({\n column: column,\n direction: currentOrder === 'asc' ? 'desc' : 'asc', // Toggle sorting direction\n });\n };\n\n // Stefano 13092023\n // Create a memoized \"orderParam\" variable\n const orderParam = React.useMemo(() => ({\n column: order.column,\n direction: order.direction,\n }), [order]);\n\n\n // Callbacks para atualizar a p�gina e o tamanho da p�gina\n const handlePageChange = (event, newPage) => {\n setPage(newPage);\n };\n\n const handleRowsPerPageChange = (newPageSize) => {\n //setPageSize(parseInt(event.target.value, 10));\n setPageSize(newPageSize);\n };\n\n const handleSearch = () => {\n // Perform the search logic here, like fetching data based on the searchText\n // You can use this function to refetch data with the new search term\n console.log(\"handleSearch\");\n if (enterPressed) {\n //refetch({ search: searchText });\n refetch({ search: searchText, order: `${order.column}:${order.direction}`, filter: filterText });\n }\n // Reset the Enter key state\n setEnterPressed(false);\n };\n\n const handleKeyUp = (e) => {\n if (e.key === 'Backspace' || e.key === 'Delete') {\n prevSearchText = ''; // Clear the search text\n setSearchText('');\n } else if (e.key === 'Shift' || e.key === 'CapsLock') {\n //ignora\n } else if (e.key !== 'Enter') {\n prevSearchText = prevSearchText + e.key;\n } else {\n setSearchText(prevSearchText);\n setEnterPressed(true);\n setPage(0);\n refetch();\n setEnterPressed(false);\n prevSearchText= \"\";\n }\n };\n\n const handleSearchTextChange = (newSearchText) => {\n console.log(\"DeviceTable handleSearchTextChange \" + newSearchText);\n if (enterPressed) {\n setEnterPressed(false);\n setSearchText(newSearchText);\n //refetch({ search: searchText });\n refetch({ search: searchText, order: `${order.column}:${order.direction}`, filter: filterText });\n }\n };\n\n const fetchNewData = (changedColumn, filterList) => {\n // Aqui voc� pode buscar novos dados do servidor\n // e atualizar o estado com setData(newData)\n console.log(\"DeviceTable fetchNewData \" + changedColumn + \",\" + filterList);\n if (enterPressed) {\n setEnterPressed(false);\n setFilterText(changedColumn + \"=\" + filterList);\n refetch({ search: searchText, order: `${order.column}:${order.direction}`, filter: filterText });\n }\n };\n\n //const slug = null;\n let baseOrder = order.column === \"client_detail.name\" ? \"client_id\" : order.column;\n const serializedOrder = `${baseOrder}:${order.direction}`;\n const { isLoading, isError, error, data, refetch } = useQuery(\n [\"devices\", slug || \"root\", page, searchText, serializedOrder, filterText], \n (_key, _slug, pageNumber, search, sorting, filter) => api.devices().getAllAlternative(pageNumber+1, sorting, pageSize, search, filter),\n {\n manual: true, // Disable automatic refetching\n onSuccess: handleData\n //refetchOnWindowFocus: false, // Force refetch on every page change\n }\n );\n\n //const { refetch, isLoading, isError, error, data } = usePaginatedQuery(\n // [\"devices\", page], \n // api.devicesList\n //);\n\n const tableColumns = [\n {\n name: \"serial\",\n label: \"Serial\",\n },\n {\n name: \"client_detail.name\",\n label: \"Cliente\",\n options: {\n //customBodyRender: (value) => value || \"--\",\n customBodyRender: (value) => {\n return auth.in_training ? maskName(value) : value || \"--\"; // Aplica a m�scara ao nome de usu�rio\n },\n },\n },\n {\n name: \"placa\",\n label: \"Placa\",\n options: {\n //customBodyRender: (value) => value || \"--\",\n customBodyRender: (value) => {\n return auth.in_training ? maskName(value) || \"--\" : value || \"--\"; // Aplica a m�scara ao nome de usu�rio\n },\n },\n },\n {\n name: \"frota\",\n label: \"Frota\",\n options: {\n customBodyRender: (value) => value || \"--\",\n },\n },\n // {\n // name: \"last_name\",\n // label: \"Sobrenome\",\n // },\n // {\n // name: \"client_detail.name\",\n // label: \"Cliente\",\n // options: {\n // customBodyRender: (value) => value || \"--\",\n // },\n // },\n // {\n // name: \"fk_level\",\n // label: \"Acesso\",\n // options: {\n // customBodyRender: (value) => value || \"--\",\n // },\n // },\n ];\n\n let content;\n if (isLoading) {\n content =
Loading...
;\n } else if (isError) {\n content =
Error: {error.message}
;\n } else if (data && data.results) {\n content = (\n {\n // Atualize o estado de ordem com a coluna e dire��o selecionadas\n //setOrder({ column: changedColumn, direction });\n \n // Envie a solicita��o para o backend com a ordem selecionada\n //refetch({ search: searchText, order: `${changedColumn.name2}:${direction}` });\n\n // Call your updated handleColumnHeaderClick function to handle column sorting\n handleColumnHeaderClick(changedColumn, direction);\n\n // Refetch data with the new sorting parameters\n refetch();\n },\n onChangePage: (currentPage) => {\n setPage(currentPage);\n refetch();\n },\n //onChangeRowsPerPage: handleRowsPerPageChange,\n onChangeRowsPerPage: (numberOfRows) => {\n // Call your custom event handler with the new page size value\n handleRowsPerPageChange(numberOfRows);\n refetch();\n },\n // [Stefano 03/08/2023] Habilitar a funcionalidade de pesquisa\n search: true,\n searchText: searchText || \"\", // Initialize the search text\n onSearchChange: (newSearchText) => {\n //e.preventDefault();\n handleSearchTextChange(newSearchText); // Update the search text state\n //searchText = newSearchText;\n },\n searchProps: {\n onKeyUp: (e) => {\n console.log(\"DeviceTable onKeyUp \" + e.key);\n handleKeyUp(e);\n },\n },\n onFilterChange: (changedColumn, filterList) => {\n fetchNewData();\n },\n onRowClick: (_, meta) => setValue(data.results[meta.dataIndex]),\n }}\n />\n );\n } else {\n
\n
Invalid data
\n
{JSON.stringify(data.results, null, 4)}
\n
;\n }\n\n return (\n
\n \n \n
\n data && handleRefresh(data) },\n ]}\n />\n {\n refetch();\n setValue(null);\n }}\n />\n {\n setManualInsertDialogOpen(false);\n refetch(); // Recarregar os dados ap�s a inser��o manual\n }}\n />\n
{content}
\n
\n
\n {/* Renderizar a janela de loading apenas quando o estado de loading for verdadeiro */}\n {loading && }\n \n {/* Restante do seu c�digo */}\n
\n
\n );\n};\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: \"flex\",\n },\n list: {\n margin: theme.spacing(2),\n },\n content: {\n flexGrow: 1,\n backgroundColor: theme.palette.background.default,\n },\n}));\n","import React from \"react\";\nimport { BrowserRouter as Router, Switch, Route, useLocation, Redirect, useParams } from \"react-router-dom\";\n//import Cookies from \"js-cookie\";\nimport { useQuery, QueryCache, ReactQueryCacheProvider } from \"react-query\";\n\nimport { createTheme } from \"@material-ui/core/styles\";\nimport { ThemeProvider } from \"@material-ui/core/styles\";\nimport orange from \"@material-ui/core/colors/orange\";\nimport grey from \"@material-ui/core/colors/grey\";\nimport green from \"@material-ui/core/colors/green\";\nimport { AuthProvider, useAuthContext } from \"./hooks/useAuth\";\nimport { ptBR } from \"@material-ui/core/locale\";\n\nimport * as Pages from \"./pages\";\nimport * as FK from \"./pages-fk\";\n\nconst defaultTheme = createTheme(\n {\n palette: {\n primary: {\n main: \"#172026\", //grey[700],\n },\n secondary: {\n main: orange[800],\n },\n },\n status: {\n online: green[50],\n },\n drawer: {\n background: \"#172026\",\n },\n },\n ptBR\n);\n\n// Tarcisio da FrigoKing\n// Azul codigo #001831\n// Laranja #e84e0f\nconst fk = createTheme(\n {\n typography: {\n fontFamily: [\n '\"Open Sans\"',\n \"-apple-system\",\n \"BlinkMacSystemFont\",\n '\"Segoe UI\"',\n '\"Helvetica Neue\"',\n \"Arial\",\n \"sans-serif\",\n '\"Apple Color Emoji\"',\n '\"Segoe UI Emoji\"',\n '\"Segoe UI Symbol\"',\n ].join(\", \"),\n body1: {\n // fontFamily: \"OpenSans-Regular\",\n },\n h1: {\n fontWeight: 700,\n },\n h2: {\n fontWeight: 700,\n },\n },\n palette: {\n primary: {\n main: \"#e84e0f\",\n },\n secondary: {\n main: \"#001831\",\n },\n },\n status: {\n online: green[50],\n },\n button: {\n appbar: \"#001831\",\n },\n drawer: {\n background: \"#001831\",\n },\n },\n ptBR\n);\n\nconst THEMES = {\n default: defaultTheme,\n fk: fk,\n};\n\nfunction NoMatch() {\n let location = useLocation();\n\n return (\n
\n

\n No match for {location.pathname}\n

\n
\n );\n}\n\nexport const PrivateRoute = ({ component: Component, ...rest }) => {\n const { auth } = useAuthContext();\n\n const loggedIn = auth && auth.token != \"\";\n return (loggedIn ? : )} />;\n};\n\nconst queryCache = new QueryCache();\n\nexport default function App() {\n const [theme, setTheme] = React.useState(\"fk\");\n\n return (\n \n \n \n \n
\n \n \n \n \n {/* Password reset */}\n \n \n \n \n \n \n \n \n \n\n \n \n \n\n \n \n \n\n {/* Frigo routes... */}\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","const reportWebVitals = onPerfEntry => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport \"./index.css\";\nimport App from \"./App\";\nimport reportWebVitals from \"./reportWebVitals\";\n\nReactDOM.render(, document.getElementById(\"root\"));\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":""}