iobroker.admin 6.5.2 → 6.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- "use strict";(self.webpackChunksrc_rx=self.webpackChunksrc_rx||[]).push([[2251],{94437:function(Ts,dt,l){var S=l(4819),a=l.n(S),Tt=l(15854),d=l.n(Tt),Ot=l(23167),Pt=l(86856),L=l(58503),mt=l.n(L),q=l(94427),h=l.n(q),Se=l(72170),He=l(62976),jt=l(16055),At=l(42158),Ce=l(33919),B=l(4819),Bt=Object.defineProperty,ut=Object.getOwnPropertySymbols,Dt=Object.prototype.hasOwnProperty,p=Object.prototype.propertyIsEnumerable,gt=(R,D,P)=>D in R?Bt(R,D,{enumerable:!0,configurable:!0,writable:!0,value:P}):R[D]=P,ft=(R,D)=>{for(var P in D||(D={}))Dt.call(D,P)&&gt(R,P,D[P]);if(ut)for(var P of ut(D))p.call(D,P)&&gt(R,P,D[P]);return R};const Ft=`
1
+ "use strict";(self.webpackChunksrc_rx=self.webpackChunksrc_rx||[]).push([[2251],{94437:function(ks,dt,l){var S=l(4819),a=l.n(S),kt=l(15854),d=l.n(kt),Ot=l(23167),Pt=l(86856),L=l(58503),mt=l.n(L),q=l(94427),h=l.n(q),Se=l(72170),ke=l(62976),jt=l(16055),At=l(42158),Ce=l(33919),B=l(4819),Bt=Object.defineProperty,ut=Object.getOwnPropertySymbols,Dt=Object.prototype.hasOwnProperty,p=Object.prototype.propertyIsEnumerable,gt=(R,D,P)=>D in R?Bt(R,D,{enumerable:!0,configurable:!0,writable:!0,value:P}):R[D]=P,ft=(R,D)=>{for(var P in D||(D={}))Dt.call(D,P)&&gt(R,P,D[P]);if(ut)for(var P of ut(D))p.call(D,P)&&gt(R,P,D[P]);return R};const Ft=`
2
2
  /*!
3
3
  * Cropper.js v1.5.12
4
4
  * https://fengyuanchen.github.io/cropperjs
@@ -303,11 +303,11 @@
303
303
  .cropper-disabled .cropper-point {
304
304
  cursor: not-allowed;
305
305
  }
306
- `,Mt=R=>({dropZone:{width:"100%",height:100,position:"relative"},dropZoneEmpty:{},image:{objectFit:"contain",margin:"auto",display:"flex",width:"100%",height:"100%"},uploadDiv:{position:"relative",width:"100%",height:300,opacity:.9,marginTop:30,cursor:"pointer",outline:"none"},uploadDivDragging:{opacity:1,background:"rgba(128,255,128,0.1)"},uploadCenterDiv:{margin:5,border:"3px dashed grey",borderRadius:5,width:"calc(100% - 10px)",height:"calc(100% - 10px)",position:"relative",display:"flex"},uploadCenterIcon:{paddingTop:10,width:48,height:48},uploadCenterText:{fontSize:16},uploadCenterTextAndIcon:{textAlign:"center",position:"absolute",top:0,bottom:0,left:0,right:0,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center"},disabledOpacity:{opacity:.3,cursor:"default"},buttonRemoveWrapper:{position:"absolute",zIndex:222,right:0},buttonCropWrapper:{position:"absolute",zIndex:222,right:0,top:50},error:{border:"2px solid red"}});class oe extends S.Component{constructor(D){if(super(D),this.state={uploadFile:!1,anchorEl:null,cropHandler:!1},this.cropperRef=(0,S.createRef)(),!window.document.getElementById("cropper-style-json-component")){const P=window.document.createElement("style");P.setAttribute("id","cropper-style-json-component"),P.innerHTML=Ft,window.document.head.appendChild(P)}}onDrop(D){const{maxSize:P,t:Z,onChange:_}=this.props,U=D[0],ee=new FileReader;ee.onabort=()=>console.log("file reading was aborted"),ee.onerror=()=>console.log("file reading has failed"),ee.onload=()=>{let de="image/"+U.name.split(".").pop().toLowerCase();if(de==="image/jpg"?de="image/jpeg":de.includes("svg")&&(de="image/svg+xml"),U.size>P)return window.alert(Z("ra_File is too big. Max %sk allowed. Try use SVG.",Math.round(P/1024)));const Te=`data:${de};base64,${btoa(new Uint8Array(ee.result).reduce((Ze,ze)=>Ze+String.fromCharCode(ze),""))}`;_(Te)},ee.readAsArrayBuffer(U)}render(){const{disabled:D,maxSize:P,classes:Z,icon:_,t:U,removeIconFunc:ee,accept:de,error:Te,crop:Ze,onChange:ze}=this.props,{uploadFile:vt,anchorEl:bt,cropHandler:me}=this.state;return B.createElement(Ot.default,{disabled:D||me,key:"dropzone",multiple:!1,accept:de,maxSize:P,onDragEnter:()=>this.setState({uploadFile:"dragging"}),onDragLeave:()=>this.setState({uploadFile:!0}),onDrop:(xe,ue)=>{if(this.setState({uploadFile:!1}),!xe.length)window.alert(ue&&ue[0]&&ue[0].errors&&ue[0].errors[0]&&ue[0].errors[0].message||U("ra_Cannot upload"));else return this.onDrop(xe)}},({getRootProps:xe,getInputProps:ue})=>B.createElement("div",ft({className:Ce.default.clsx(Z.uploadDiv,vt==="dragging"&&Z.uploadDivDragging,Z.dropZone,D&&Z.disabledOpacity,!_&&Z.dropZoneEmpty)},xe()),B.createElement("input",ft({},ue())),B.createElement("div",{className:Ce.default.clsx(Z.uploadCenterDiv,Te&&Z.error)},_?ee&&!me&&B.createElement("div",{className:Z.buttonRemoveWrapper},B.createElement(q.Tooltip,{title:U("ra_Clear")},B.createElement(Se.Z,{size:"large",onClick:ge=>{ee&&ee(),ge.stopPropagation()}},B.createElement(He.default,null)))):B.createElement("div",{className:Z.uploadCenterTextAndIcon},B.createElement(At.FaFileUpload,{className:Z.uploadCenterIcon}),B.createElement("div",{className:Z.uploadCenterText},U(vt==="dragging"?"ra_Drop file here":"ra_Place your files here or click here to open the browse dialog"))),_&&Ze&&B.createElement("div",{className:Z.buttonCropWrapper},B.createElement(q.Tooltip,{title:U("ra_Crop")},B.createElement(Se.Z,{size:"large",onClick:ge=>{me?this.setState({anchorEl:ge.currentTarget}):this.setState({cropHandler:!0}),ge.stopPropagation()}},B.createElement(jt.default,{color:me?"primary":"inherit"}))),B.createElement(q.Menu,{anchorEl:bt,keepMounted:!0,open:Boolean(bt),onClose:()=>this.setState({anchorEl:null})},B.createElement(q.MenuItem,{onClick:()=>this.setState({anchorEl:null,cropHandler:!1},()=>{var ge,Ue;const Et=(Ue=(ge=this.cropperRef)==null?void 0:ge.current)==null?void 0:Ue.cropper;ze(Et.getCroppedCanvas().toDataURL())})},U("ra_Save")),B.createElement(q.MenuItem,{onClick:()=>this.setState({anchorEl:null,cropHandler:!1})},U("ra_Close")))),_&&!me?B.createElement("img",{src:_,className:Z.image,alt:"icon"}):null,_&&Ze&&me?B.createElement(Pt.Cropper,{ref:this.cropperRef,className:Z.image,src:_,initialAspectRatio:1,viewMode:1,guides:!1,minCropBoxHeight:10,minCropBoxWidth:10,background:!1,checkOrientation:!1}):null)))}}oe.defaultProps={disabled:!1,maxSize:10*1024,icon:null,removeIconFunc:null,accept:{"image/*":[]},error:!1,onChange:R=>console.log(R),t:R=>R,crop:!1},oe.propTypes={classes:d().object,maxSize:d().number,disabled:d().bool,crop:d().bool,error:d().bool,onChange:d().func,accept:d().object,t:d().func},dt.Z=(0,L.withStyles)(Mt)(oe)},72251:function(Ts,dt,l){l.r(dt),l.d(dt,{default:function(){return va}});var S=l(4819),a=l.n(S),Tt=l(15854),d=l.n(Tt),Ot=l(23261),Pt=l.n(Ot),L=l(58503),mt=l(72170),q=l(88261),h=l(94427),Se=l(83609),He=l(22675),jt=l(65228),At=l(21936),Ce=l(62976),B=l(45761),Bt=l(54198),ut=l(10186),Dt=l(40314),p=l(75606),gt=l(17688),ft=l(89316),Ft=l(86887),Mt=l(44625),oe=l(91495),R=l(39323),D=l(1635),P=l(59599),Z=l(83358),_=l(71429),U=l(11456),ee=l(61513),de=l(94466),Te=l(17536),Ze=l(43253);const ze="0 2px 2px 0 rgba(0, 0, 0, .14),0 3px 1px -2px rgba(0, 0, 0, .12),0 1px 5px 0 rgba(0, 0, 0, .2)",vt="0 8px 17px 0 rgba(0, 0, 0, .2),0 6px 20px 0 rgba(0, 0, 0, .19)",bt=n=>({root:{position:"relative",margin:10,width:300,minHeight:200,background:n.palette.background.default,boxShadow:ze,display:"flex",flexDirection:"column",transition:"box-shadow 0.5s","&:hover":{boxShadow:vt},"& .warning":{backgroundColor:"#de0000 !important","&:before":{position:"absolute",right:0,top:-5,content:'"\u26A0"',fontSize:25,height:"30px",width:"30px",color:"black"},animation:"$warning 2.5s ease-in-out infinite alternate"}},"@keyframes warning":{"0%":{opacity:1},"100%":{opacity:.7}},imageBlock:{minHeight:60,display:"flex",padding:"0 10px 0 10px",position:"relative",justifyContent:"space-between",transition:"background 0.5s"},img:{width:45,height:45,margin:"auto 0",position:"relative","&:after":{content:'""',position:"absolute",zIndex:2,top:0,left:0,width:"100%",height:"100%",background:'url("img/no-image.png") 100% 100% no-repeat',backgroundSize:"cover",backgroundColor:"#fff"}},installed:{background:"#77c7ff8c"},fab:{position:"absolute",bottom:-20,width:40,height:40,right:20},collapse:{height:"100%",position:"absolute",width:"100%",zIndex:3,marginTop:"auto",bottom:0,transition:"height 0.3s",justifyContent:"space-between",display:"flex",flexDirection:"column"},collapseOff:{height:0},close:{width:20,height:20,opacity:.9,cursor:"pointer",position:"relative",marginLeft:"auto",marginBottom:10,transition:"all 0.6s ease","&:hover":{transform:"rotate(90deg)"},"&:before":{position:"absolute",left:9,content:'""',height:20,width:3,backgroundColor:"#ff4f4f",transform:"rotate(45deg)"},"&:after":{position:"absolute",left:9,content:'""',height:20,width:3,backgroundColor:"#ff4f4f",transform:"rotate(-45deg)"}},footerBlock:{background:n.palette.background.default,padding:10,display:"flex",justifyContent:"space-between"},hidden:{display:"none"},onOffLine:{alignSelf:"center",width:"100%",height:4},adapter:{width:"100%",fontWeight:"bold",fontSize:16,verticalAlign:"middle",paddingLeft:8,paddingTop:16,color:n.palette.mode==="dark"?"#333":"#555"},cardContent:{marginTop:16,paddingTop:0},cardContentInfo:{overflow:"auto",paddingTop:0,backgroundColor:n.palette.background.paper,color:n.palette.mode==="dark"?"#EEE":"#111"},cardContentH5:{height:"100%",display:"flex",flexDirection:"column",justifyContent:"space-between",paddingBottom:"10px !important"},marginTop10:{marginTop:10},displayFlex:{display:"flex"},marginLeft5:{marginLeft:5},enableButton:{display:"flex",justifyContent:"space-between",alignItems:"center"},instanceStateNotAlive1:{backgroundColor:"rgba(192, 192, 192, 0.4)"},instanceStateAliveNotConnected1:{backgroundColor:"rgba(255, 177, 0, 0.4)"},instanceStateAliveAndConnected1:{backgroundColor:"rgba(0, 255, 0, 0.4)"},green:{background:"#00ce00",position:"relative"},red:{background:"#da0000"},"@keyframes red":{"0%":{opacity:1},"100%":{opacity:.85}},dotLine:{width:50,height:"100%",background:"linear-gradient(90deg, rgba(0,206,0,0.7497373949579832) 0%, rgba(31,255,1,1) 50%, rgba(0,206,0,0.7805497198879552) 100%)",zIndex:2,position:"absolute",left:-11},"@keyframes colors":{"0%":{left:-51},"100%":{left:"101%"}},versionDate:{alignSelf:"center"},cardContentDiv:{position:"sticky",right:0,top:0,paddingTop:10},badge:{cursor:"pointer"},emptyButton:{width:48},greenText:{color:n.palette.success.dark},curdContentFlexCenter:{display:"flex",alignItems:"center",marginLeft:4},wrapperAvailable:{display:"flex",alignItems:"center"},buttonUpdate:{border:"1px solid",padding:"0px 7px",borderRadius:5,display:"flex",alignItems:"center",cursor:"pointer",transition:"background 0.5s","&:hover":{background:"#00800026"}},buttonUpdateIcon:{height:20,width:20,marginRight:10},debug:{backgroundColor:_.Z[700]},info:{backgroundColor:U.default[700]},warn:{backgroundColor:ee.Z[700]},error:{backgroundColor:de.Z[700]},smallAvatar:{width:24,height:24},formControl:{display:"flex"},baseSettingsButton:{transform:"rotate(45deg)"},newValue:{animation:"$newValueAnimation 2s ease-in-out"},"@keyframes newValueAnimation":{"0%":{color:"#00f900"},"80%":{color:"#008000"},"100%":{color:n.palette.mode==="dark"?"#fff":"#000"}}});let me="-",xe="-",ue="- %",ge="- %",Ue="-",Et=1,Vt=1,Kt=1;const Os=["silly","debug","info","warn","error"];function We(n,e){const t=n.className.split(" "),s=t.indexOf(e);s!==-1&&(t.splice(s,1),n.className=t.join(" ")),t.push(e),setTimeout(i=>n.className=i,100,t.join(" "))}const Xt=({_id:n,alive:e,available:t,classes:s,color:i,connected:r,connectedToHost:E,isCurrentHost:w,description:C,events:V,executeCommandRemove:H,expertMode:ke,getLogLevelIcon:se,formatInfo:we,hidden:ye,hostData:j,hostsWorker:O,image:ae,installed:M,name:z,openHostUpdateDialog:ne,setBaseSettingsDialog:re,setEditDialog:I,showAdaptersWarning:Ne,socket:x,systemConfig:Nt,t:k})=>{const[It,Me]=(0,S.useState)(!1),F=(0,S.useRef)(),K=(0,S.useRef)(),X=(0,S.useRef)(),G=(0,S.useRef)(),Q=(0,S.useRef)(),Ye=(y,f)=>{xe=f&&f.val!==null?`\u21E5${f.val}`:"-",F.current&&(F.current.innerHTML=`${xe} / ${me}`,We(F.current,s.newValue))},qe=(y,f)=>{me=f&&f.val!==null?`\u21A6${f.val}`:"-",F.current&&(F.current.innerHTML=`${xe} / ${me}`,We(F.current,s.newValue))},_e=(y,f)=>!y||y.val===null||y.val===void 0?"-"+(f?" "+f:""):Nt.common.isFloatComma?y.val.toString().replace(".",",")+(f?" "+f:""):y.val+(f?" "+f:""),Y=(y,f)=>{let he;y.endsWith("diskFree")?Et=(f==null?void 0:f.val)||0:y.endsWith("diskSize")?Vt=(f==null?void 0:f.val)||0:y.endsWith("diskWarning")&&(Kt=(f==null?void 0:f.val)||0),he=Et/Vt*100<=Kt,K.current&&(he?(K.current.setAttribute("title",k("Warning: Free space on disk is low")),K.current.classList.add("warning")):(K.current.removeAttribute("title"),K.current.classList.remove("warning")))},et=(y,f)=>{ue=_e(f,"%"),X.current&&(X.current.innerHTML=ue,We(X.current,s.newValue))},tt=(y,f)=>{ge=_e(f,"%"),G.current&&(G.current.innerHTML=ge,We(G.current,s.newValue))},st=(y,f)=>{if(f.val){const he=Math.floor(f.val/86400),Re=Math.floor(f.val%(3600*24)/3600);Ue=he?`${he}d${Re}h`:`${Re}h`}Q.current&&(Q.current.innerHTML=Ue,We(Q.current,s.newValue))},at=y=>{if(!y)return 0;const{result:f}=y;let he=0;if(!f||!f.system)return he;if(Object.keys(f.system.categories).length){let Re=f.system.categories;Object.keys(Re).forEach(ba=>Object.keys(Re[ba].instances).forEach(wa=>he++))}return he},[nt,rt]=(0,S.useState)({notifications:{},count:0}),ot=(y,f)=>{f&&(lt(f.val),pt(f.val))};(0,S.useEffect)(()=>{const y=f=>f&&f[n]&&rt({notifications:f[n],count:at(f[n])});return O.registerNotificationHandler(y),O.getNotifications(n).then(f=>f&&f[n]&&rt({notifications:f[n],count:at(f[n])})),x.subscribeState(`${n}.inputCount`,Ye),x.subscribeState(`${n}.outputCount`,qe),x.subscribeState(`${n}.cpu`,et),x.subscribeState(`${n}.mem`,tt),x.subscribeState(`${n}.uptime`,st),x.subscribeState(`${n}.diskFree`,Y),x.subscribeState(`${n}.diskSize`,Y),x.subscribeState(`${n}.diskWarning`,Y),x.subscribeState(`${n}.logLevel`,ot),()=>{O.unregisterNotificationHandler(y),x.unsubscribeState(`${n}.inputCount`,Ye),x.unsubscribeState(`${n}.outputCount`,qe),x.unsubscribeState(`${n}.cpu`,et),x.unsubscribeState(`${n}.mem`,tt),x.unsubscribeState(`${n}.uptime`,st),x.unsubscribeState(`${n}.diskFree`,Y),x.unsubscribeState(`${n}.diskSize`,Y),x.unsubscribeState(`${n}.diskWarning`,Y),x.unsubscribeState(`${n}.logLevel`,ot)}},[n,x,s]);const[ce,Le]=(0,S.useState)(!1),[pe,it]=(0,S.useState)(!1),[Ie,lt]=(0,S.useState)(null),[ct,pt]=(0,S.useState)(null),ht=(w||e)&&Te.default.updateAvailable(M,t),Zt=()=>{let y=[];X.current&&y.push(`CPU: ${X.current.innerHTML}`),G.current&&y.push(`RAM: ${G.current.innerHTML}`),Q.current&&y.push(`${k("Uptime")}: ${Q.current.innerHTML}`),y.push(`${k("Available")}: ${t}`),y.push(`${k("Installed")}: ${M}`),F.current&&y.push(`${k("Events")}: ${F.current.innerHTML}`),j&&typeof j=="object"&&Object.keys(j).map(f=>y.push(k(f)+": "+(we[f]?we[f](j[f],k):j[f]||"--"))),p.Utils.copyToClipboard(y.join(`
307
- `)),window.alert(k("Copied"))};let kt=!1,v;pe&&(v=k("Edit log level rule for %s",z),kt=!0);const b=kt?a().createElement(Ze.Z,{title:v,open:!0,onApply:y=>{pe&&(x.setState(`${n}.logLevel`,ct),it(!1))},onClose:()=>{pe&&(pt(Ie),it(!1))}},pe&&a().createElement(h.FormControl,{className:s.formControl,variant:"outlined",style:{marginTop:8}},a().createElement(h.InputLabel,null,k("log level")),a().createElement(h.Select,{variant:"standard",value:ct,fullWidth:!0,onChange:y=>pt(y.target.value)},Os.map(y=>a().createElement(h.MenuItem,{key:y,value:y},k(y))))),pe&&a().createElement(h.FormControl,{className:s.formControl,variant:"outlined"},a().createElement(h.FormHelperText,null,k("Log level will be reset to the saved level after the restart of the controller")),a().createElement(h.FormHelperText,null,k("You can set the log level permanently in the base host settings"),a().createElement(P.default,{className:s.baseSettingsButton})))):null;return a().createElement(h.Card,{key:n,className:p.Utils.clsx(s.root,ye?s.hidden:"")},b,(It||ce)&&a().createElement("div",{className:p.Utils.clsx(s.collapse,It?"":s.collapseOff)},a().createElement(h.CardContent,{className:s.cardContentInfo},a().createElement("div",{className:s.cardContentDiv},a().createElement("div",{className:s.close,onClick:()=>Me(!1)})),C),a().createElement("div",{className:s.footerBlock})),a().createElement("div",{className:p.Utils.clsx(s.onOffLine,e?s.green:s.red)},e&&a().createElement("div",{className:s.dotLine})),a().createElement("div",{ref:K,style:{background:i||"inherit"},className:p.Utils.clsx(s.imageBlock,(!E||!e)&&s.instanceStateNotAlive1,E&&e&&r===!1&&s.instanceStateAliveNotConnected1,E&&e&&r!==!1&&s.instanceStateAliveAndConnected1)},a().createElement(h.CardMedia,{className:s.img,component:"img",image:ae||"img/no-image.png"}),a().createElement("div",{style:{color:i&&p.Utils.invertColor(i,!0)||"inherit"},className:s.adapter},a().createElement(h.Badge,{title:k("Hosts notifications"),badgeContent:nt.count,color:"error",className:s.badge,onClick:y=>{y.stopPropagation(),Ne({[n]:nt.notifications},x,n)}},z)),a().createElement(h.Fab,{disabled:typeof C=="string",onMouseOut:()=>Le(!1),onMouseOver:()=>Le(!0),onClick:()=>Me(!0),className:s.fab,color:"primary","aria-label":"add"},a().createElement(Mt.Z,null))),a().createElement(h.CardContent,{className:s.cardContentH5},a().createElement(h.Typography,{variant:"body2",color:"textSecondary",component:"div"},a().createElement("div",{className:s.displayFlex},"CPU:",a().createElement("div",{ref:X,className:s.marginLeft5},"- %"))),a().createElement(h.Typography,{variant:"body2",color:"textSecondary",component:"div"},a().createElement("div",{className:s.displayFlex},"RAM:",a().createElement("div",{ref:G,className:s.marginLeft5},"- %"))),a().createElement(h.Typography,{variant:"body2",color:"textSecondary",component:"div"},a().createElement("div",{className:s.displayFlex},k("Uptime"),": ",a().createElement("div",{ref:Q,className:s.marginLeft5},"-d -h"))),a().createElement(h.Typography,{variant:"body2",color:"textSecondary",component:"div",className:s.wrapperAvailable},k("Available")," js-controller: ",a().createElement("div",{className:p.Utils.clsx(ht&&s.greenText,s.curdContentFlexCenter)},ht?a().createElement(h.Tooltip,{title:k("Update")},a().createElement("div",{onClick:ne,className:s.buttonUpdate},a().createElement(h.IconButton,{className:s.buttonUpdateIcon,size:"small"},a().createElement(He.default,null)),t)):t)),a().createElement(h.Typography,{variant:"body2",color:"textSecondary",component:"p"},k("Installed")," js-controller: ",M),a().createElement(h.Typography,{variant:"body2",color:"textSecondary",component:"div"},a().createElement("div",{className:s.displayFlex},k("Events"),": ",a().createElement("div",{ref:F,className:s.marginLeft5},V))),a().createElement("div",{className:s.marginTop10},a().createElement(h.Typography,{component:"span",className:s.enableButton},a().createElement(h.IconButton,{size:"large",onClick:()=>I(!0)},a().createElement(R.default,null)),ke&&a().createElement(h.Tooltip,{title:k("Host Base Settings")},a().createElement("div",null,a().createElement(h.IconButton,{size:"large",disabled:!e,onClick:re},a().createElement(P.default,{className:s.baseSettingsButton})))),a().createElement(h.Tooltip,{title:k("Restart host")},a().createElement("div",null,a().createElement(h.IconButton,{size:"large",disabled:!e,onClick:y=>{y.stopPropagation(),x.restartController(n).catch(f=>window.alert(`Cannot restart: ${f}`))}},a().createElement(D.Z,null)))),ke&&Ie&&a().createElement(h.Tooltip,{title:`${k("loglevel")} ${Ie}`},a().createElement(h.IconButton,{size:"large",onClick:()=>it(!0)},a().createElement(h.Avatar,{className:p.Utils.clsx(s.smallAvatar,s[Ie])},se(Ie)))),!e&&!w?a().createElement(h.Tooltip,{title:k("Remove")},a().createElement(h.IconButton,{size:"large",onClick:H},a().createElement(oe.default,null))):a().createElement("div",{className:s.emptyButton}),a().createElement(h.Tooltip,{title:k("Copy")},a().createElement(h.IconButton,{size:"large",onClick:()=>Zt()},a().createElement(Z.default,null)))))))};Xt.propTypes={t:d().func,systemConfig:d().object,isCurrentHost:d().bool};var Ps=(0,L.withStyles)(bt)(Xt);const js="0 2px 2px 0 rgba(0, 0, 0, .14),0 3px 1px -2px rgba(0, 0, 0, .12),0 1px 5px 0 rgba(0, 0, 0, .2)",As="0 8px 17px 0 rgba(0, 0, 0, .2),0 6px 20px 0 rgba(0, 0, 0, .19)",Bs=n=>({root:{position:"relative",margin:7,background:n.palette.background.default,boxShadow:js,overflow:"hidden",transition:"box-shadow 0.5s,height 0.3s","&:hover":{boxShadow:As}},imageBlock:{marginRight:6,minHeight:60,width:"100%",maxWidth:300,display:"flex",padding:"0 10px 0 10px",position:"relative",justifyContent:"space-between",transition:"background 0.5s"},img:{width:45,height:45,margin:"auto 0",position:"relative","&:after":{content:'""',position:"absolute",zIndex:2,top:0,left:0,width:"100%",height:"100%",background:'url("img/no-image.png") 100% 100% no-repeat',backgroundSize:"cover",backgroundColor:"#fff"}},collapse:{height:160,backgroundColor:"rgba(128, 128, 128, 0.1)",width:"100%",zIndex:3,marginTop:"auto",bottom:0,transition:"height 0.3s",justifyContent:"space-between",display:"flex",flexDirection:"column"},collapseOff:{height:0},collapseOn:{animation:"$height 1s"},"@keyframes height":{"0%":{height:0},"100%":{height:160}},footerBlock:{background:n.palette.background.default,padding:10,display:"flex",justifyContent:"space-between"},hidden:{display:"none"},onOff:{alignSelf:"center",width:4,height:"100%"},host:{width:"100%",fontWeight:"bold",fontSize:16,paddingLeft:8,alignSelf:"center",color:n.palette.mode==="dark"?"#ddd":"#222",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},cardContentH5:{height:"100%",display:"flex",width:"100%",justifyContent:"space-between",padding:"10px !important",alignItems:"center"},marginTop10:{marginLeft:"auto",display:"flex"},enableButton:{display:"flex",justifyContent:"space-between"},emptyButton:{width:48},green:{background:"#00ce00",position:"relative",overflow:"hidden"},dotLine:{width:10,height:20,background:"linear-gradient( rgba(0,206,0,0.7497373949579832) 0%, rgba(31,255,1,1) 50%, rgba(0,206,0,0.7805497198879552) 100%)",zIndex:2,position:"absolute",top:-21},"@keyframes colors":{"0%":{top:-21},"100%":{top:"101%"}},red:{background:"#da0000"},"@keyframes red":{"0%":{opacity:1},"100%":{opacity:.8}},flex:{flex:1,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},cardContentInfo:{overflow:"auto",paddingTop:0,justifyContent:"center",display:"flex",height:"100%",position:"relative"},cursorNoDrop:{cursor:"no-drop !important"},wrapperFlex:{display:"flex",cursor:"pointer","& .warning":{backgroundColor:"#de0000 !important","&:before":{position:"absolute",right:0,top:-5,content:'"\u26A0"',fontSize:25,height:"30px",width:"30px",color:"black"},animation:"$warning 2.5s ease-in-out infinite alternate"}},"@keyframes warning":{"0%":{opacity:1},"100%":{opacity:.7}},wrapperColor:{position:"relative",overflow:"hidden"},"@media screen and (max-width: 1100px)":{hidden1100:{display:"none !important"}},"@media screen and (max-width: 800px)":{hidden800:{display:"none !important"}},"@media screen and (max-width: 600px)":{hidden600:{display:"none !important"}},"@media screen and (max-width: 500px)":{wrapperFlex:{flexDirection:"column"}},badge:{top:14},greenText:{color:n.palette.success.dark},curdContentFlexCenter:{display:"flex",alignItems:"center"},wrapperAvailable:{display:"flex",alignItems:"center"},buttonUpdate:{border:"1px solid",padding:"0px 7px",borderRadius:5,display:"flex",alignItems:"center",cursor:"pointer",transition:"background 0.5s","&:hover":{background:"#00800026"}},buttonUpdateIcon:{height:20,width:20,marginRight:10},debug:{backgroundColor:_.Z[700]},info:{backgroundColor:U.default[700]},warn:{backgroundColor:ee.Z[700]},error:{backgroundColor:de.Z[700]},smallAvatar:{width:24,height:24},formControl:{display:"flex"},baseSettingsButton:{transform:"rotate(45deg)"},newValue:{animation:"$newValueAnimation 2s ease-in-out"},"@keyframes newValueAnimation":{"0%":{color:"#00f900"},"80%":{color:"#008000"},"100%":{color:n.palette.mode==="dark"?"#fff":"#000"}}});let Lt="-",Rt="-",Gt="- %",Qt="- %",Yt="-",qt=1,_t=1,es=1;const Ds=(0,L.withStyles)(n=>({badge:{right:-3,top:13,padding:"0 4px"}}))(h.Badge),Fs=["silly","debug","info","warn","error"];function Je(n,e){const t=n.className.split(" "),s=t.indexOf(e);s!==-1&&(t.splice(s,1),n.className=t.join(" ")),t.push(e),setTimeout(i=>n.className=i,100,t.join(" "))}const ts=({_id:n,alive:e,available:t,classes:s,color:i,isCurrentHost:r,description:E,events:w,executeCommandRemove:C,expertMode:V,getLogLevelIcon:H,formatInfo:ke,hidden:se,hostsWorker:we,hostData:ye,image:j,installed:O,name:ae,openHostUpdateDialog:M,setBaseSettingsDialog:z,setEditDialog:ne,showAdaptersWarning:re,socket:I,systemConfig:Ne,t:x})=>{const[Nt,k]=(0,S.useState)(!1),[It,Me]=(0,S.useState)(!1),F=(0,S.useRef)(),K=(0,S.useRef)(),X=(0,S.useRef)(),G=(0,S.useRef)(),Q=(0,S.useRef)(),Ye=(v,b)=>{Rt=b&&b.val!==null?`\u21E5${b.val}`:"-",F.current&&(F.current.innerHTML=`${Rt} / ${Lt}`,Je(F.current,s.newValue))},qe=(v,b)=>{Lt=b&&b.val!==null?`\u21A6${b.val}`:"-",F.current&&(F.current.innerHTML=`${Rt} / ${Lt}`,Je(F.current,s.newValue))},_e=(v,b)=>!v||v.val===null||v.val===void 0?"-"+(b?" "+b:""):Ne.common.isFloatComma?v.val.toString().replace(".",",")+(b?" "+b:""):v.val+(b?" "+b:""),Y=(v,b)=>{let y;v.endsWith("diskFree")?qt=(b==null?void 0:b.val)||0:v.endsWith("diskSize")?_t=(b==null?void 0:b.val)||0:v.endsWith("diskWarning")&&(es=(b==null?void 0:b.val)||0),y=qt/_t*100<=es,K.current&&(y?(K.current.setAttribute("title",x("Warning: Free space on disk is low")),K.current.classList.add("warning")):(K.current.removeAttribute("title"),K.current.classList.remove("warning")))},et=(v,b)=>{Gt=_e(b,"%"),X.current&&(X.current.innerHTML=Gt,Je(X.current,s.newValue))},tt=(v,b)=>{Qt=_e(b,"%"),G.current&&(G.current.innerHTML=Qt,Je(G.current,s.newValue))},st=(v,b)=>{if(b&&b.val){const y=Math.floor(b.val/86400),f=Math.floor(b.val%(3600*24)/3600);Yt=y?`${y}d${f}h`:`${f}h`}Q.current&&(Q.current.innerHTML=Yt,Je(Q.current,s.newValue))},at=v=>{if(!v)return 0;const{result:b}=v;let y=0;if(!b||!b.system)return y;if(Object.keys(b.system.categories).length){let f=b.system.categories;Object.keys(f).forEach(he=>Object.keys(f[he].instances).forEach(Re=>y++))}return y},[nt,rt]=(0,S.useState)({notifications:{},count:0}),ot=(v,b)=>{b&&(it(b.val),lt(b.val))};(0,S.useEffect)(()=>{const v=b=>b&&b[n]&&rt({notifications:b[n],count:at(b[n])});return we.registerNotificationHandler(v),we.getNotifications(n).then(b=>{b&&b[n]&&rt({notifications:b[n],count:at(b[n])})}),I.subscribeState(`${n}.inputCount`,Ye),I.subscribeState(`${n}.outputCount`,qe),I.subscribeState(`${n}.cpu`,et),I.subscribeState(`${n}.mem`,tt),I.subscribeState(`${n}.uptime`,st),I.subscribeState(`${n}.diskFree`,Y),I.subscribeState(`${n}.diskSize`,Y),I.subscribeState(`${n}.diskWarning`,Y),I.subscribeState(`${n}.logLevel`,ot),()=>{we.unregisterNotificationHandler(v),I.unsubscribeState(`${n}.inputCount`,Ye),I.unsubscribeState(`${n}.outputCount`,qe),I.unsubscribeState(`${n}.cpu`,et),I.unsubscribeState(`${n}.mem`,tt),I.unsubscribeState(`${n}.uptime`,st),I.unsubscribeState(`${n}.diskFree`,Y),I.unsubscribeState(`${n}.diskSize`,Y),I.unsubscribeState(`${n}.diskWarning`,Y),I.unsubscribeState(`${n}.logLevel`,ot)}},[n,I,s]);const[ce,Le]=(0,S.useState)(!1),[pe,it]=(0,S.useState)(null),[Ie,lt]=(0,S.useState)(null),ct=(r||e)&&Te.default.updateAvailable(O,t),pt=()=>{let v=[];X.current&&v.push(`CPU: ${X.current.innerHTML}`),G.current&&v.push(`RAM: ${G.current.innerHTML}`),Q.current&&v.push(`${x("Uptime")}: ${Q.current.innerHTML}`),v.push(`${x("Available")}: ${t}`),v.push(`${x("Installed")}: ${O}`),F.current&&v.push(`${x("Events")}: ${F.current.innerHTML}`),ye&&typeof ye=="object"&&Object.keys(ye).map(b=>v.push(`${x(b)}: ${ke[b]?ke[b](ye[b],x):ye[b]||"--"}`)),p.Utils.copyToClipboard(v.join(`
308
- `)),window.alert(x("Copied"))};let ht=!1,Zt;ce&&(Zt=x("Edit log level rule for %s",ae),ht=!0);const kt=ht?a().createElement(Ze.Z,{title:Zt,open:!0,onApply:v=>{ce&&(I.setState(`${n}.logLevel`,Ie),Le(!1))},onClose:v=>{ce&&(lt(pe),Le(!1))}},ce&&a().createElement(h.FormControl,{className:s.formControl,variant:"outlined"},a().createElement(h.InputLabel,null,x("log level")),a().createElement(h.Select,{variant:"standard",value:Ie,fullWidth:!0,onChange:v=>lt(v.target.value)},Fs.map(v=>a().createElement(h.MenuItem,{key:v,value:v},x(v))))),ce&&a().createElement(h.FormControl,{className:s.formControl,variant:"outlined"},a().createElement(h.FormHelperText,null,x("Log level will be reset to the saved level after the restart of the controller")),a().createElement(h.FormHelperText,null,x("You can set the log level permanently in the base host settings"),a().createElement(P.default,{className:s.baseSettingsButton})))):null;return a().createElement("div",{style:{border:`2px solid ${i||"inherit"}`,borderRadius:5},onMouseOut:ce?null:()=>Me(!1),onMouseOver:ce?null:()=>Me(!0),onMouseMove:ce?null:()=>Me(!0),key:n,className:p.Utils.clsx(s.root,se?s.hidden:"")},kt,a().createElement("div",{className:p.Utils.clsx(s.wrapperFlex,!e&&s.cursorNoDrop),onClick:ce?null:()=>k(v=>!v)},a().createElement("div",{className:s.wrapperColor},a().createElement("div",{className:p.Utils.clsx(s.onOff,e?s.green:s.red)}),e&&a().createElement("div",{className:s.dotLine})),a().createElement("div",{ref:K,style:{background:i||"inherit"},className:s.imageBlock},a().createElement(Ds,{title:x("Hosts notifications"),badgeContent:nt.count,color:"error",onClick:v=>{v.stopPropagation(),re({[n]:nt.notifications},I,n)}},a().createElement(h.CardMedia,{className:s.img,component:"img",image:j||"img/no-image.png"})),a().createElement("div",{style:{color:i&&p.Utils.invertColor(i,!0)||"inherit"},className:s.host},ae)),a().createElement(h.CardContent,{className:s.cardContentH5},a().createElement(h.Typography,{className:p.Utils.clsx(s.flex,s.hidden800),variant:"body2",color:"textSecondary",component:"div"},a().createElement("div",{ref:X},"- %")),a().createElement(h.Typography,{className:p.Utils.clsx(s.flex,s.hidden800),variant:"body2",color:"textSecondary",component:"div"},a().createElement("div",{ref:G},"- %")),a().createElement(h.Typography,{className:p.Utils.clsx(s.flex,s.hidden800),variant:"body2",color:"textSecondary",component:"div"},a().createElement("div",{ref:Q},"-/-")),a().createElement(h.Typography,{className:p.Utils.clsx(s.flex,s.hidden1100),variant:"body2",color:"textSecondary",component:"div"},a().createElement("div",{className:p.Utils.clsx(ct&&s.greenText,s.curdContentFlexCenter)},ct?a().createElement(h.Tooltip,{title:x("Update")},a().createElement("div",{onClick:v=>{v.stopPropagation(),M()},className:s.buttonUpdate},a().createElement(h.IconButton,{className:s.buttonUpdateIcon,size:"small"},a().createElement(He.default,null)),t)):t)),a().createElement(h.Typography,{className:p.Utils.clsx(s.flex,s.hidden1100),variant:"body2",color:"textSecondary",component:"p"},O),a().createElement(h.Typography,{className:p.Utils.clsx(s.flex,s.hidden600),variant:"body2",color:"textSecondary",component:"div"},a().createElement("div",{ref:F},w)),a().createElement("div",{className:s.marginTop10},a().createElement(h.Typography,{component:"span",className:s.enableButton},a().createElement(h.IconButton,{size:"large",onClick:v=>{v.stopPropagation(),ne(!0)}},a().createElement(R.default,null)),V&&a().createElement(h.Tooltip,{title:x("Host Base Settings")},a().createElement("div",null,a().createElement(h.IconButton,{size:"large",disabled:!e,onClick:v=>{z(),v.stopPropagation()}},a().createElement(P.default,{className:s.baseSettingsButton})))),a().createElement(h.Tooltip,{title:x("Restart host")},a().createElement("div",null,a().createElement(h.IconButton,{size:"large",disabled:!e,onClick:v=>{v.stopPropagation(),I.restartController(n).catch(b=>window.alert(`Cannot restart: ${b}`))}},a().createElement(D.Z,null)))),V&&pe?a().createElement(h.Tooltip,{title:`${x("loglevel")} ${pe}`},a().createElement(h.IconButton,{size:"large",onClick:v=>{v.stopPropagation(),Le(!0)}},a().createElement(h.Avatar,{className:p.Utils.clsx(s.smallAvatar,s[pe])},H(pe)))):a().createElement("div",{className:s.emptyButton}),a().createElement(h.Tooltip,{title:x("Remove")},a().createElement("span",null,a().createElement(h.IconButton,{size:"large",disabled:e||r,title:e||r?x("You cannot delete host, when it is alive"):"",onClick:v=>{C(),v.stopPropagation()}},a().createElement(oe.default,null)))))))),(Nt||It)&&typeof E=="object"&&a().createElement("div",{className:p.Utils.clsx(s.collapse,Nt?s.collapseOn:s.collapseOff),onClick:v=>v.stopPropagation()},a().createElement(h.CardContent,{className:s.cardContentInfo},E,a().createElement(h.Tooltip,{title:x("Copy")},a().createElement(h.IconButton,{size:"large",onClick:()=>pt(),style:{position:"absolute",top:8,right:8}},a().createElement(Z.default,null)))),a().createElement("div",{className:s.footerBlock})))};ts.propTypes={t:d().func,systemConfig:d().object,isCurrentHost:d().bool};var Ms=(0,L.withStyles)(Bs)(ts),yt=l(66447),Ht=l(29480),St=l(6774),Ct=l(19974),W=l(78565),g=l(18635),ss=l(26021),Oe=l(17773),Ls=l(94437),A=l(4819);const Rs=n=>({error:{border:"2px solid #FF0000"},id:{fontStyle:"italic"},dialog:{height:"calc(100% - 64px)"},button:{marginTop:20,marginLeft:n.spacing(1)},funcDivEdit:{width:"100%"},funcEditName:{display:"inline-block",width:85},funcEdit:{width:400},marginTop:{marginTop:20},commonTabWrapper:{flexFlow:"wrap",display:"flex"},commonWrapper:{width:500,minWidth:300},flexDrop:{width:"100%",maxWidth:500,margin:"auto",display:"flex"},marginBlock:{marginTop:20},buttonAdd:{minWidth:150},textField:{width:"100%"},flex:{display:"flex"},close:{width:"20px",height:"20px",opacity:"0.9",cursor:"pointer",position:"relative",top:20,transition:"all 0.6s ease","&:hover":{transform:"rotate(90deg)"},"&:before":{position:"absolute",left:"9px",content:'""',height:"20px",width:"3px",backgroundColor:"#ff4f4f",transform:"rotate(45deg)"},"&:after":{position:"absolute",left:"9px",content:'""',height:"20px",width:"3px",backgroundColor:"#ff4f4f",transform:"rotate(-45deg)"}},color:{width:70},buttonRemoveWrapper:{position:"absolute",zIndex:222,right:0},tabsPadding:{padding:"0px 24px"}});class as extends S.Component{constructor(e){super(e),this.state={text:JSON.stringify(this.props.obj,null,2),error:!1,changed:!1,tab:(window._localStorage||window.localStorage).getItem((this.props.dialogName||"App")+".editTab")||"object"},this.originalObj=JSON.stringify(this.props.obj,null,2)}prepareObject(e){e=e||this.state.text;try{const t=JSON.parse(e);return t._id=this.props.obj._id,t}catch(t){return null}}onChange(e){const t={text:e},s=this.prepareObject(e);s?(t.changed=this.originalObj!==JSON.stringify(s,null,2),this.state.error&&(t.error=!1)):t.error=!0,this.setState(t)}onUpdate(){try{const e=JSON.parse(this.state.text);e._id=this.props.obj._id,this.props.onClose(e)}catch(e){}}setCommonItem(e,t,s){e.common[t]=s,this.onChange(JSON.stringify(e,null,2))}removeCommonItem(e,t){delete e.common[t],this.onChange(JSON.stringify(e,null,2))}buttonAddKey(e,t){const{t:s,classes:i}=this.props;return A.createElement("div",{className:i.marginBlock},A.createElement(W.Z,{className:i.buttonAdd,variant:"contained",color:"secondary",onClick:t,startIcon:A.createElement(Oe.default,null)},s("Add "+e)))}buttonRemoveKey(e,t){const{t:s,classes:i}=this.props;return A.createElement(q.Z,{title:s("Remove "+e)},A.createElement("div",{className:i.close,onClick:t}))}renderCommonEdit(){try{const e=JSON.parse(this.state.text),t=!1,{classes:s,t:i}=this.props;return A.createElement("div",{className:s.commonTabWrapper},A.createElement("div",{className:s.commonWrapper},typeof e.common.title!="undefined"?A.createElement(g.Z,{variant:"standard",disabled:t,label:i("title"),className:p.Utils.clsx(s.marginBlock,s.textField),fullWidth:!0,value:e.common.title,onChange:r=>this.setCommonItem(e,"title",r.target.value)}):this.buttonAddKey("title",()=>this.setCommonItem(e,"title","")),typeof e.common.color!="undefined"?A.createElement("div",{className:s.flex},A.createElement(g.Z,{variant:"standard",disabled:t,className:p.Utils.clsx(s.marginBlock,s.color),label:i("Color"),type:"color",value:e.common.color,onChange:r=>this.setCommonItem(e,"color",r.target.value)}),this.buttonRemoveKey("color",()=>this.removeCommonItem(e,"color"))):this.buttonAddKey("color",()=>this.setCommonItem(e,"color",""))),typeof e.common.icon!="undefined"?A.createElement("div",{className:s.flexDrop},A.createElement(Ls.Z,{disabled:t,crop:!0,maxSize:256*1024,icon:e.common.icon,removeIconFunc:()=>this.setCommonItem(e,"icon",""),onChange:r=>this.setCommonItem(e,"icon",r),t:i}),this.buttonRemoveKey("icon",()=>this.removeCommonItem(e,"icon"))):A.createElement("div",{className:s.flexDrop},this.buttonAddKey("icon",()=>this.setCommonItem(e,"icon",""))))}catch(e){return A.createElement("div",null,this.props.t("Cannot parse JSON!"))}}render(){return A.createElement(yt.Z,{classes:{paper:this.props.classes.dialog},open:!0,maxWidth:"lg",fullWidth:this.state.type!=="number"&&this.state.type!=="boolean",fullScreen:!1,onClose:()=>this.props.onClose(),"aria-labelledby":"edit-value-dialog-title","aria-describedby":"edit-value-dialog-description"},A.createElement(Ht.Z,{id:"edit-value-dialog-title"},this.props.t("Edit host settings"),": ",A.createElement("span",{className:this.props.classes.id},this.props.obj._id)),A.createElement(St.Z,null,this.renderCommonEdit()),A.createElement(Ct.Z,null,A.createElement(W.Z,{variant:"contained",disabled:this.state.error||!this.state.changed,onClick:()=>this.onUpdate(),color:"primary",startIcon:A.createElement(ss.default,null)},this.props.t("Write")),A.createElement(W.Z,{variant:"contained",onClick:()=>this.props.onClose(),color:"grey",startIcon:A.createElement(Ce.default,null)},this.props.t("Cancel"))))}}as.propTypes={classes:d().object,socket:d().object,obj:d().object,expertMode:d().bool,onClose:d().func.isRequired,dialogName:d().string,objects:d().object,t:d().func};var Hs=(0,L.withStyles)(Rs)(as),zs=l(70776),Pe=l(62664),Us=l(9790),Ws=Object.defineProperty,xt=Object.getOwnPropertySymbols,ns=Object.prototype.hasOwnProperty,rs=Object.prototype.propertyIsEnumerable,os=(n,e,t)=>e in n?Ws(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,is=(n,e)=>{for(var t in e||(e={}))ns.call(e,t)&&os(n,t,e[t]);if(xt)for(var t of xt(e))rs.call(e,t)&&os(n,t,e[t]);return n},zt=(n,e)=>{var t={};for(var s in n)ns.call(n,s)&&e.indexOf(s)<0&&(t[s]=n[s]);if(n!=null&&xt)for(var s of xt(n))e.indexOf(s)<0&&rs.call(n,s)&&(t[s]=n[s]);return t};const Js=(0,L.makeStyles)(n=>({root:{width:"100%",height:"auto",display:"flex",flexDirection:"column",overflow:"auto",padding:10},paper:{maxWidth:1e3},overflowHidden:{display:"flex",overflow:"hidden"},h1:{fontWeight:500,fontSize:35,margin:"10px 0"},h2:{padding:"10px 7px",fontSize:25,fontWeight:300,borderRadius:3,background:"#4dabf5",color:n.palette.mode==="dark"?"black":"white"},h22:{padding:0,margin:0,fontSize:25,fontWeight:300,borderRadius:3,background:"#4dabf5",color:n.palette.mode==="dark"?"black":"white"},standardText:{fontSize:15,margin:"10px 0","& > a":{textDecoration:"none",color:"#1e88e5"}},standardTextSmall:{fontSize:12,color:"black"},standardTextSmall2:{fontSize:12},silver:{color:"silver","& > a":{textDecoration:"none",color:"#1e88e5"}},pre:{whiteSpace:"pre-wrap",background:"#e4e3e3",padding:10,borderRadius:3,position:"relative"},copyButton:{color:"black",position:"absolute",right:10,top:4},comment:{color:"#00000078"},accordionSummary:{background:"#4dabf5",borderRadius:3,"& .MuiAccordionSummary-content":{margin:0}},accordionDetails:{display:"flex",flexDirection:"column"},code:{backgroundColor:n.palette.mode==="dark"?"#123456":"#93bbe7",padding:"0 3px 0 3px"},copyButtonSmall:{width:31,height:16}}));function ls(n,e,t){const s=n.split(`
306
+ `,Mt=R=>({dropZone:{width:"100%",height:100,position:"relative"},dropZoneEmpty:{},image:{objectFit:"contain",margin:"auto",display:"flex",width:"100%",height:"100%"},uploadDiv:{position:"relative",width:"100%",height:300,opacity:.9,marginTop:30,cursor:"pointer",outline:"none"},uploadDivDragging:{opacity:1,background:"rgba(128,255,128,0.1)"},uploadCenterDiv:{margin:5,border:"3px dashed grey",borderRadius:5,width:"calc(100% - 10px)",height:"calc(100% - 10px)",position:"relative",display:"flex"},uploadCenterIcon:{paddingTop:10,width:48,height:48},uploadCenterText:{fontSize:16},uploadCenterTextAndIcon:{textAlign:"center",position:"absolute",top:0,bottom:0,left:0,right:0,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center"},disabledOpacity:{opacity:.3,cursor:"default"},buttonRemoveWrapper:{position:"absolute",zIndex:222,right:0},buttonCropWrapper:{position:"absolute",zIndex:222,right:0,top:50},error:{border:"2px solid red"}});class oe extends S.Component{constructor(D){if(super(D),this.state={uploadFile:!1,anchorEl:null,cropHandler:!1},this.cropperRef=(0,S.createRef)(),!window.document.getElementById("cropper-style-json-component")){const P=window.document.createElement("style");P.setAttribute("id","cropper-style-json-component"),P.innerHTML=Ft,window.document.head.appendChild(P)}}onDrop(D){const{maxSize:P,t:Z,onChange:_}=this.props,U=D[0],ee=new FileReader;ee.onabort=()=>console.log("file reading was aborted"),ee.onerror=()=>console.log("file reading has failed"),ee.onload=()=>{let de="image/"+U.name.split(".").pop().toLowerCase();if(de==="image/jpg"?de="image/jpeg":de.includes("svg")&&(de="image/svg+xml"),U.size>P)return window.alert(Z("ra_File is too big. Max %sk allowed. Try use SVG.",Math.round(P/1024)));const Oe=`data:${de};base64,${btoa(new Uint8Array(ee.result).reduce((Ze,ze)=>Ze+String.fromCharCode(ze),""))}`;_(Oe)},ee.readAsArrayBuffer(U)}render(){const{disabled:D,maxSize:P,classes:Z,icon:_,t:U,removeIconFunc:ee,accept:de,error:Oe,crop:Ze,onChange:ze}=this.props,{uploadFile:vt,anchorEl:bt,cropHandler:me}=this.state;return B.createElement(Ot.default,{disabled:D||me,key:"dropzone",multiple:!1,accept:de,maxSize:P,onDragEnter:()=>this.setState({uploadFile:"dragging"}),onDragLeave:()=>this.setState({uploadFile:!0}),onDrop:(xe,ue)=>{if(this.setState({uploadFile:!1}),!xe.length)window.alert(ue&&ue[0]&&ue[0].errors&&ue[0].errors[0]&&ue[0].errors[0].message||U("ra_Cannot upload"));else return this.onDrop(xe)}},({getRootProps:xe,getInputProps:ue})=>B.createElement("div",ft({className:Ce.default.clsx(Z.uploadDiv,vt==="dragging"&&Z.uploadDivDragging,Z.dropZone,D&&Z.disabledOpacity,!_&&Z.dropZoneEmpty)},xe()),B.createElement("input",ft({},ue())),B.createElement("div",{className:Ce.default.clsx(Z.uploadCenterDiv,Oe&&Z.error)},_?ee&&!me&&B.createElement("div",{className:Z.buttonRemoveWrapper},B.createElement(q.Tooltip,{title:U("ra_Clear")},B.createElement(Se.Z,{size:"large",onClick:ge=>{ee&&ee(),ge.stopPropagation()}},B.createElement(ke.default,null)))):B.createElement("div",{className:Z.uploadCenterTextAndIcon},B.createElement(At.FaFileUpload,{className:Z.uploadCenterIcon}),B.createElement("div",{className:Z.uploadCenterText},U(vt==="dragging"?"ra_Drop file here":"ra_Place your files here or click here to open the browse dialog"))),_&&Ze&&B.createElement("div",{className:Z.buttonCropWrapper},B.createElement(q.Tooltip,{title:U("ra_Crop")},B.createElement(Se.Z,{size:"large",onClick:ge=>{me?this.setState({anchorEl:ge.currentTarget}):this.setState({cropHandler:!0}),ge.stopPropagation()}},B.createElement(jt.default,{color:me?"primary":"inherit"}))),B.createElement(q.Menu,{anchorEl:bt,keepMounted:!0,open:Boolean(bt),onClose:()=>this.setState({anchorEl:null})},B.createElement(q.MenuItem,{onClick:()=>this.setState({anchorEl:null,cropHandler:!1},()=>{var ge,Ue;const Et=(Ue=(ge=this.cropperRef)==null?void 0:ge.current)==null?void 0:Ue.cropper;ze(Et.getCroppedCanvas().toDataURL())})},U("ra_Save")),B.createElement(q.MenuItem,{onClick:()=>this.setState({anchorEl:null,cropHandler:!1})},U("ra_Close")))),_&&!me?B.createElement("img",{src:_,className:Z.image,alt:"icon"}):null,_&&Ze&&me?B.createElement(Pt.Cropper,{ref:this.cropperRef,className:Z.image,src:_,initialAspectRatio:1,viewMode:1,guides:!1,minCropBoxHeight:10,minCropBoxWidth:10,background:!1,checkOrientation:!1}):null)))}}oe.defaultProps={disabled:!1,maxSize:10*1024,icon:null,removeIconFunc:null,accept:{"image/*":[]},error:!1,onChange:R=>console.log(R),t:R=>R,crop:!1},oe.propTypes={classes:d().object,maxSize:d().number,disabled:d().bool,crop:d().bool,error:d().bool,onChange:d().func,accept:d().object,t:d().func},dt.Z=(0,L.withStyles)(Mt)(oe)},72251:function(ks,dt,l){l.r(dt),l.d(dt,{default:function(){return va}});var S=l(4819),a=l.n(S),kt=l(15854),d=l.n(kt),Ot=l(23261),Pt=l.n(Ot),L=l(58503),mt=l(72170),q=l(88261),h=l(94427),Se=l(83609),ke=l(22675),jt=l(65228),At=l(21936),Ce=l(62976),B=l(45761),Bt=l(54198),ut=l(10186),Dt=l(40314),p=l(75606),gt=l(17688),ft=l(89316),Ft=l(86887),Mt=l(44625),oe=l(91495),R=l(39323),D=l(1635),P=l(59599),Z=l(83358),_=l(71429),U=l(11456),ee=l(61513),de=l(94466),Oe=l(17536),Ze=l(43253);const ze="0 2px 2px 0 rgba(0, 0, 0, .14),0 3px 1px -2px rgba(0, 0, 0, .12),0 1px 5px 0 rgba(0, 0, 0, .2)",vt="0 8px 17px 0 rgba(0, 0, 0, .2),0 6px 20px 0 rgba(0, 0, 0, .19)",bt=n=>({root:{position:"relative",margin:10,width:300,minHeight:200,background:n.palette.background.default,boxShadow:ze,display:"flex",flexDirection:"column",transition:"box-shadow 0.5s","&:hover":{boxShadow:vt},"& .warning":{backgroundColor:"#de0000 !important","&:before":{position:"absolute",right:0,top:-5,content:'"\u26A0"',fontSize:25,height:"30px",width:"30px",color:"black"},animation:"$warning 2.5s ease-in-out infinite alternate"}},"@keyframes warning":{"0%":{opacity:1},"100%":{opacity:.7}},imageBlock:{minHeight:60,display:"flex",padding:"0 10px 0 10px",position:"relative",justifyContent:"space-between",transition:"background 0.5s"},img:{width:45,height:45,margin:"auto 0",position:"relative","&:after":{content:'""',position:"absolute",zIndex:2,top:0,left:0,width:"100%",height:"100%",background:'url("img/no-image.png") 100% 100% no-repeat',backgroundSize:"cover",backgroundColor:"#fff"}},installed:{background:"#77c7ff8c"},fab:{position:"absolute",bottom:-20,width:40,height:40,right:20},collapse:{height:"100%",position:"absolute",width:"100%",zIndex:3,marginTop:"auto",bottom:0,transition:"height 0.3s",justifyContent:"space-between",display:"flex",flexDirection:"column"},collapseOff:{height:0},close:{width:20,height:20,opacity:.9,cursor:"pointer",position:"relative",marginLeft:"auto",marginBottom:10,transition:"all 0.6s ease","&:hover":{transform:"rotate(90deg)"},"&:before":{position:"absolute",left:9,content:'""',height:20,width:3,backgroundColor:"#ff4f4f",transform:"rotate(45deg)"},"&:after":{position:"absolute",left:9,content:'""',height:20,width:3,backgroundColor:"#ff4f4f",transform:"rotate(-45deg)"}},footerBlock:{background:n.palette.background.default,padding:10,display:"flex",justifyContent:"space-between"},hidden:{display:"none"},onOffLine:{alignSelf:"center",width:"100%",height:4},adapter:{width:"100%",fontWeight:"bold",fontSize:16,verticalAlign:"middle",paddingLeft:8,paddingTop:16,color:n.palette.mode==="dark"?"#333":"#555"},cardContent:{marginTop:16,paddingTop:0},cardContentInfo:{overflow:"auto",paddingTop:0,backgroundColor:n.palette.background.paper,color:n.palette.mode==="dark"?"#EEE":"#111"},cardContentH5:{height:"100%",display:"flex",flexDirection:"column",justifyContent:"space-between",paddingBottom:"10px !important"},marginTop10:{marginTop:10},displayFlex:{display:"flex"},marginLeft5:{marginLeft:5},enableButton:{display:"flex",justifyContent:"space-between",alignItems:"center"},instanceStateNotAlive1:{backgroundColor:"rgba(192, 192, 192, 0.4)"},instanceStateAliveNotConnected1:{backgroundColor:"rgba(255, 177, 0, 0.4)"},instanceStateAliveAndConnected1:{backgroundColor:"rgba(0, 255, 0, 0.4)"},green:{background:"#00ce00",position:"relative"},red:{background:"#da0000"},"@keyframes red":{"0%":{opacity:1},"100%":{opacity:.85}},dotLine:{width:50,height:"100%",background:"linear-gradient(90deg, rgba(0,206,0,0.7497373949579832) 0%, rgba(31,255,1,1) 50%, rgba(0,206,0,0.7805497198879552) 100%)",zIndex:2,position:"absolute",left:-11},"@keyframes colors":{"0%":{left:-51},"100%":{left:"101%"}},versionDate:{alignSelf:"center"},cardContentDiv:{position:"sticky",right:0,top:0,paddingTop:10},badge:{cursor:"pointer"},emptyButton:{width:48},greenText:{color:n.palette.success.dark},curdContentFlexCenter:{display:"flex",alignItems:"center",marginLeft:4},wrapperAvailable:{display:"flex",alignItems:"center"},buttonUpdate:{border:"1px solid",padding:"0px 7px",borderRadius:5,display:"flex",alignItems:"center",cursor:"pointer",transition:"background 0.5s","&:hover":{background:"#00800026"}},buttonUpdateIcon:{height:20,width:20,marginRight:10},debug:{backgroundColor:_.Z[700]},info:{backgroundColor:U.default[700]},warn:{backgroundColor:ee.Z[700]},error:{backgroundColor:de.Z[700]},smallAvatar:{width:24,height:24},formControl:{display:"flex"},baseSettingsButton:{transform:"rotate(45deg)"},newValue:{animation:"$newValueAnimation 2s ease-in-out"},"@keyframes newValueAnimation":{"0%":{color:"#00f900"},"80%":{color:"#008000"},"100%":{color:n.palette.mode==="dark"?"#fff":"#000"}}});let me="-",xe="-",ue="- %",ge="- %",Ue="-",Et=1,Vt=1,Kt=1;const Os=["silly","debug","info","warn","error"];function We(n,e){const t=n.className.split(" "),s=t.indexOf(e);s!==-1&&(t.splice(s,1),n.className=t.join(" ")),t.push(e),setTimeout(i=>n.className=i,100,t.join(" "))}const Xt=({_id:n,alive:e,available:t,classes:s,color:i,connected:r,connectedToHost:E,isCurrentHost:w,description:C,events:V,executeCommandRemove:H,expertMode:Te,getLogLevelIcon:se,formatInfo:we,hidden:ye,hostData:j,hostsWorker:O,image:ae,installed:M,name:z,openHostUpdateDialog:ne,setBaseSettingsDialog:re,setEditDialog:I,showAdaptersWarning:Ne,socket:x,systemConfig:Nt,t:T})=>{const[It,Le]=(0,S.useState)(!1),F=(0,S.useRef)(),K=(0,S.useRef)(),X=(0,S.useRef)(),G=(0,S.useRef)(),Q=(0,S.useRef)(),Ye=(y,f)=>{xe=f&&f.val!==null?`\u21E5${f.val}`:"-",F.current&&(F.current.innerHTML=`${xe} / ${me}`,We(F.current,s.newValue))},qe=(y,f)=>{me=f&&f.val!==null?`\u21A6${f.val}`:"-",F.current&&(F.current.innerHTML=`${xe} / ${me}`,We(F.current,s.newValue))},_e=(y,f)=>!y||y.val===null||y.val===void 0?"-"+(f?" "+f:""):Nt.common.isFloatComma?y.val.toString().replace(".",",")+(f?" "+f:""):y.val+(f?" "+f:""),Y=(y,f)=>{let he;y.endsWith("diskFree")?Et=(f==null?void 0:f.val)||0:y.endsWith("diskSize")?Vt=(f==null?void 0:f.val)||0:y.endsWith("diskWarning")&&(Kt=(f==null?void 0:f.val)||0),he=Et/Vt*100<=Kt,K.current&&(he?(K.current.setAttribute("title",T("Warning: Free space on disk is low")),K.current.classList.add("warning")):(K.current.removeAttribute("title"),K.current.classList.remove("warning")))},et=(y,f)=>{ue=_e(f,"%"),X.current&&(X.current.innerHTML=ue,We(X.current,s.newValue))},tt=(y,f)=>{ge=_e(f,"%"),G.current&&(G.current.innerHTML=ge,We(G.current,s.newValue))},st=(y,f)=>{if(f.val){const he=Math.floor(f.val/86400),He=Math.floor(f.val%(3600*24)/3600);Ue=he?`${he}d${He}h`:`${He}h`}Q.current&&(Q.current.innerHTML=Ue,We(Q.current,s.newValue))},at=y=>{if(!y)return 0;const{result:f}=y;let he=0;if(!f||!f.system)return he;if(Object.keys(f.system.categories).length){let He=f.system.categories;Object.keys(He).forEach(ba=>Object.keys(He[ba].instances).forEach(wa=>he++))}return he},[nt,rt]=(0,S.useState)({notifications:{},count:0}),ot=(y,f)=>{f&&(lt(f.val),pt(f.val))};(0,S.useEffect)(()=>{const y=f=>f&&f[n]&&rt({notifications:f[n],count:at(f[n])});return O.registerNotificationHandler(y),O.getNotifications(n).then(f=>f&&f[n]&&rt({notifications:f[n],count:at(f[n])})),x.subscribeState(`${n}.inputCount`,Ye),x.subscribeState(`${n}.outputCount`,qe),x.subscribeState(`${n}.cpu`,et),x.subscribeState(`${n}.mem`,tt),x.subscribeState(`${n}.uptime`,st),x.subscribeState(`${n}.diskFree`,Y),x.subscribeState(`${n}.diskSize`,Y),x.subscribeState(`${n}.diskWarning`,Y),x.subscribeState(`${n}.logLevel`,ot),()=>{O.unregisterNotificationHandler(y),x.unsubscribeState(`${n}.inputCount`,Ye),x.unsubscribeState(`${n}.outputCount`,qe),x.unsubscribeState(`${n}.cpu`,et),x.unsubscribeState(`${n}.mem`,tt),x.unsubscribeState(`${n}.uptime`,st),x.unsubscribeState(`${n}.diskFree`,Y),x.unsubscribeState(`${n}.diskSize`,Y),x.unsubscribeState(`${n}.diskWarning`,Y),x.unsubscribeState(`${n}.logLevel`,ot)}},[n,x,s]);const[ce,Re]=(0,S.useState)(!1),[pe,it]=(0,S.useState)(!1),[Ie,lt]=(0,S.useState)(null),[ct,pt]=(0,S.useState)(null),ht=(w||e)&&Oe.default.updateAvailable(M,t),Zt=()=>{let y=[];X.current&&y.push(`CPU: ${X.current.innerHTML}`),G.current&&y.push(`RAM: ${G.current.innerHTML}`),Q.current&&y.push(`${T("Uptime")}: ${Q.current.innerHTML}`),y.push(`${T("Available")}: ${t}`),y.push(`${T("Installed")}: ${M}`),F.current&&y.push(`${T("Events")}: ${F.current.innerHTML}`),j&&typeof j=="object"&&Object.keys(j).map(f=>y.push(T(f)+": "+(we[f]?we[f](j[f],T):j[f]||"--"))),p.Utils.copyToClipboard(y.join(`
307
+ `)),window.alert(T("Copied"))};let Tt=!1,v;pe&&(v=T("Edit log level rule for %s",z),Tt=!0);const b=Tt?a().createElement(Ze.Z,{title:v,open:!0,onApply:y=>{pe&&(x.setState(`${n}.logLevel`,ct),it(!1))},onClose:()=>{pe&&(pt(Ie),it(!1))}},pe&&a().createElement(h.FormControl,{className:s.formControl,variant:"outlined",style:{marginTop:8}},a().createElement(h.InputLabel,null,T("log level")),a().createElement(h.Select,{variant:"standard",value:ct,fullWidth:!0,onChange:y=>pt(y.target.value)},Os.map(y=>a().createElement(h.MenuItem,{key:y,value:y},T(y))))),pe&&a().createElement(h.FormControl,{className:s.formControl,variant:"outlined"},a().createElement(h.FormHelperText,null,T("Log level will be reset to the saved level after the restart of the controller")),a().createElement(h.FormHelperText,null,T("You can set the log level permanently in the base host settings"),a().createElement(P.default,{className:s.baseSettingsButton})))):null;return a().createElement(h.Card,{key:n,className:p.Utils.clsx(s.root,ye?s.hidden:"")},b,(It||ce)&&a().createElement("div",{className:p.Utils.clsx(s.collapse,It?"":s.collapseOff)},a().createElement(h.CardContent,{className:s.cardContentInfo},a().createElement("div",{className:s.cardContentDiv},a().createElement("div",{className:s.close,onClick:()=>Le(!1)})),C),a().createElement("div",{className:s.footerBlock})),a().createElement("div",{className:p.Utils.clsx(s.onOffLine,e?s.green:s.red)},e&&a().createElement("div",{className:s.dotLine})),a().createElement("div",{ref:K,style:{background:i||"inherit"},className:p.Utils.clsx(s.imageBlock,(!E||!e)&&s.instanceStateNotAlive1,E&&e&&r===!1&&s.instanceStateAliveNotConnected1,E&&e&&r!==!1&&s.instanceStateAliveAndConnected1)},a().createElement(h.CardMedia,{className:s.img,component:"img",image:ae||"img/no-image.png"}),a().createElement("div",{style:{color:i&&p.Utils.invertColor(i,!0)||"inherit"},className:s.adapter},a().createElement(h.Badge,{title:T("Hosts notifications"),badgeContent:nt.count,color:"error",className:s.badge,onClick:y=>{y.stopPropagation(),Ne({[n]:nt.notifications},x,n)}},z)),a().createElement(h.Fab,{disabled:typeof C=="string",onMouseOut:()=>Re(!1),onMouseOver:()=>Re(!0),onClick:()=>Le(!0),className:s.fab,color:"primary","aria-label":"add"},a().createElement(Mt.Z,null))),a().createElement(h.CardContent,{className:s.cardContentH5},a().createElement(h.Typography,{variant:"body2",color:"textSecondary",component:"div"},a().createElement("div",{className:s.displayFlex},"CPU:",a().createElement("div",{ref:X,className:s.marginLeft5},"- %"))),a().createElement(h.Typography,{variant:"body2",color:"textSecondary",component:"div"},a().createElement("div",{className:s.displayFlex},"RAM:",a().createElement("div",{ref:G,className:s.marginLeft5},"- %"))),a().createElement(h.Typography,{variant:"body2",color:"textSecondary",component:"div"},a().createElement("div",{className:s.displayFlex},T("Uptime"),": ",a().createElement("div",{ref:Q,className:s.marginLeft5},"-d -h"))),a().createElement(h.Typography,{variant:"body2",color:"textSecondary",component:"div",className:s.wrapperAvailable},T("Available")," js-controller: ",a().createElement("div",{className:p.Utils.clsx(ht&&s.greenText,s.curdContentFlexCenter)},ht?a().createElement(h.Tooltip,{title:T("Update")},a().createElement("div",{onClick:ne,className:s.buttonUpdate},a().createElement(h.IconButton,{className:s.buttonUpdateIcon,size:"small"},a().createElement(ke.default,null)),t)):t)),a().createElement(h.Typography,{variant:"body2",color:"textSecondary",component:"p"},T("Installed")," js-controller: ",M),a().createElement(h.Typography,{variant:"body2",color:"textSecondary",component:"div"},a().createElement("div",{className:s.displayFlex},T("Events"),": ",a().createElement("div",{ref:F,className:s.marginLeft5},V))),a().createElement("div",{className:s.marginTop10},a().createElement(h.Typography,{component:"span",className:s.enableButton},a().createElement(h.IconButton,{size:"large",onClick:()=>I(!0)},a().createElement(R.default,null)),Te&&a().createElement(h.Tooltip,{title:T("Host Base Settings")},a().createElement("div",null,a().createElement(h.IconButton,{size:"large",disabled:!e,onClick:re},a().createElement(P.default,{className:s.baseSettingsButton})))),a().createElement(h.Tooltip,{title:T("Restart host")},a().createElement("div",null,a().createElement(h.IconButton,{size:"large",disabled:!e,onClick:y=>{y.stopPropagation(),x.restartController(n).catch(f=>window.alert(`Cannot restart: ${f}`))}},a().createElement(D.Z,null)))),Te&&Ie&&a().createElement(h.Tooltip,{title:`${T("loglevel")} ${Ie}`},a().createElement(h.IconButton,{size:"large",onClick:()=>it(!0)},a().createElement(h.Avatar,{className:p.Utils.clsx(s.smallAvatar,s[Ie])},se(Ie)))),!e&&!w?a().createElement(h.Tooltip,{title:T("Remove")},a().createElement(h.IconButton,{size:"large",onClick:H},a().createElement(oe.default,null))):a().createElement("div",{className:s.emptyButton}),a().createElement(h.Tooltip,{title:T("Copy")},a().createElement(h.IconButton,{size:"large",onClick:()=>Zt()},a().createElement(Z.default,null)))))))};Xt.propTypes={t:d().func,systemConfig:d().object,isCurrentHost:d().bool};var Ps=(0,L.withStyles)(bt)(Xt);const js="0 2px 2px 0 rgba(0, 0, 0, .14),0 3px 1px -2px rgba(0, 0, 0, .12),0 1px 5px 0 rgba(0, 0, 0, .2)",As="0 8px 17px 0 rgba(0, 0, 0, .2),0 6px 20px 0 rgba(0, 0, 0, .19)",Bs=n=>({root:{position:"relative",margin:7,background:n.palette.background.default,boxShadow:js,overflow:"hidden",transition:"box-shadow 0.5s,height 0.3s","&:hover":{boxShadow:As}},imageBlock:{marginRight:6,minHeight:60,width:"100%",maxWidth:300,display:"flex",padding:"0 10px 0 10px",position:"relative",justifyContent:"space-between",transition:"background 0.5s"},img:{width:45,height:45,margin:"auto 0",position:"relative","&:after":{content:'""',position:"absolute",zIndex:2,top:0,left:0,width:"100%",height:"100%",background:'url("img/no-image.png") 100% 100% no-repeat',backgroundSize:"cover",backgroundColor:"#fff"}},collapse:{height:160,backgroundColor:"rgba(128, 128, 128, 0.1)",width:"100%",zIndex:3,marginTop:"auto",bottom:0,transition:"height 0.3s",justifyContent:"space-between",display:"flex",flexDirection:"column"},collapseOff:{height:0},collapseOn:{animation:"$height 1s"},"@keyframes height":{"0%":{height:0},"100%":{height:160}},footerBlock:{background:n.palette.background.default,padding:10,display:"flex",justifyContent:"space-between"},hidden:{display:"none"},onOff:{alignSelf:"center",width:4,height:"100%"},host:{width:"100%",fontWeight:"bold",fontSize:16,paddingLeft:8,alignSelf:"center",color:n.palette.mode==="dark"?"#ddd":"#222",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},cardContentH5:{height:"100%",display:"flex",width:"100%",justifyContent:"space-between",padding:"10px !important",alignItems:"center"},marginTop10:{marginLeft:"auto",display:"flex"},enableButton:{display:"flex",justifyContent:"space-between"},emptyButton:{width:48},green:{background:"#00ce00",position:"relative",overflow:"hidden"},dotLine:{width:10,height:20,background:"linear-gradient( rgba(0,206,0,0.7497373949579832) 0%, rgba(31,255,1,1) 50%, rgba(0,206,0,0.7805497198879552) 100%)",zIndex:2,position:"absolute",top:-21},"@keyframes colors":{"0%":{top:-21},"100%":{top:"101%"}},red:{background:"#da0000"},"@keyframes red":{"0%":{opacity:1},"100%":{opacity:.8}},flex:{flex:1,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},cardContentInfo:{overflow:"auto",paddingTop:0,justifyContent:"center",display:"flex",height:"100%",position:"relative"},cursorNoDrop:{cursor:"no-drop !important"},wrapperFlex:{display:"flex",cursor:"pointer","& .warning":{backgroundColor:"#de0000 !important","&:before":{position:"absolute",right:0,top:-5,content:'"\u26A0"',fontSize:25,height:"30px",width:"30px",color:"black"},animation:"$warning 2.5s ease-in-out infinite alternate"}},"@keyframes warning":{"0%":{opacity:1},"100%":{opacity:.7}},wrapperColor:{position:"relative",overflow:"hidden"},"@media screen and (max-width: 1100px)":{hidden1100:{display:"none !important"}},"@media screen and (max-width: 800px)":{hidden800:{display:"none !important"}},"@media screen and (max-width: 600px)":{hidden600:{display:"none !important"}},"@media screen and (max-width: 500px)":{wrapperFlex:{flexDirection:"column"}},badge:{top:14},greenText:{color:n.palette.success.dark},curdContentFlexCenter:{display:"flex",alignItems:"center"},wrapperAvailable:{display:"flex",alignItems:"center"},buttonUpdate:{border:"1px solid",padding:"0px 7px",borderRadius:5,display:"flex",alignItems:"center",cursor:"pointer",transition:"background 0.5s","&:hover":{background:"#00800026"}},buttonUpdateIcon:{height:20,width:20,marginRight:10},debug:{backgroundColor:_.Z[700]},info:{backgroundColor:U.default[700]},warn:{backgroundColor:ee.Z[700]},error:{backgroundColor:de.Z[700]},smallAvatar:{width:24,height:24},formControl:{display:"flex"},baseSettingsButton:{transform:"rotate(45deg)"},newValue:{animation:"$newValueAnimation 2s ease-in-out"},"@keyframes newValueAnimation":{"0%":{color:"#00f900"},"80%":{color:"#008000"},"100%":{color:n.palette.mode==="dark"?"#fff":"#000"}}});let Lt="-",Rt="-",Gt="- %",Qt="- %",Yt="-",qt=1,_t=1,es=1;const Ds=(0,L.withStyles)(n=>({badge:{right:-3,top:13,padding:"0 4px"}}))(h.Badge),Fs=["silly","debug","info","warn","error"];function Je(n,e){const t=n.className.split(" "),s=t.indexOf(e);s!==-1&&(t.splice(s,1),n.className=t.join(" ")),t.push(e),setTimeout(i=>n.className=i,100,t.join(" "))}const ts=({_id:n,alive:e,available:t,classes:s,color:i,isCurrentHost:r,description:E,events:w,executeCommandRemove:C,expertMode:V,getLogLevelIcon:H,formatInfo:Te,hidden:se,hostsWorker:we,hostData:ye,image:j,installed:O,name:ae,openHostUpdateDialog:M,setBaseSettingsDialog:z,setEditDialog:ne,showAdaptersWarning:re,socket:I,systemConfig:Ne,t:x})=>{const[Nt,T]=(0,S.useState)(!1),[It,Le]=(0,S.useState)(!1),F=(0,S.useRef)(),K=(0,S.useRef)(),X=(0,S.useRef)(),G=(0,S.useRef)(),Q=(0,S.useRef)(),Ye=(v,b)=>{Rt=b&&b.val!==null?`\u21E5${b.val}`:"-",F.current&&(F.current.innerHTML=`${Rt} / ${Lt}`,Je(F.current,s.newValue))},qe=(v,b)=>{Lt=b&&b.val!==null?`\u21A6${b.val}`:"-",F.current&&(F.current.innerHTML=`${Rt} / ${Lt}`,Je(F.current,s.newValue))},_e=(v,b)=>!v||v.val===null||v.val===void 0?"-"+(b?" "+b:""):Ne.common.isFloatComma?v.val.toString().replace(".",",")+(b?" "+b:""):v.val+(b?" "+b:""),Y=(v,b)=>{let y;v.endsWith("diskFree")?qt=(b==null?void 0:b.val)||0:v.endsWith("diskSize")?_t=(b==null?void 0:b.val)||0:v.endsWith("diskWarning")&&(es=(b==null?void 0:b.val)||0),y=qt/_t*100<=es,K.current&&(y?(K.current.setAttribute("title",x("Warning: Free space on disk is low")),K.current.classList.add("warning")):(K.current.removeAttribute("title"),K.current.classList.remove("warning")))},et=(v,b)=>{Gt=_e(b,"%"),X.current&&(X.current.innerHTML=Gt,Je(X.current,s.newValue))},tt=(v,b)=>{Qt=_e(b,"%"),G.current&&(G.current.innerHTML=Qt,Je(G.current,s.newValue))},st=(v,b)=>{if(b&&b.val){const y=Math.floor(b.val/86400),f=Math.floor(b.val%(3600*24)/3600);Yt=y?`${y}d${f}h`:`${f}h`}Q.current&&(Q.current.innerHTML=Yt,Je(Q.current,s.newValue))},at=v=>{if(!v)return 0;const{result:b}=v;let y=0;if(!b||!b.system)return y;if(Object.keys(b.system.categories).length){let f=b.system.categories;Object.keys(f).forEach(he=>Object.keys(f[he].instances).forEach(He=>y++))}return y},[nt,rt]=(0,S.useState)({notifications:{},count:0}),ot=(v,b)=>{b&&(it(b.val),lt(b.val))};(0,S.useEffect)(()=>{const v=b=>b&&b[n]&&rt({notifications:b[n],count:at(b[n])});return we.registerNotificationHandler(v),we.getNotifications(n).then(b=>{b&&b[n]&&rt({notifications:b[n],count:at(b[n])})}),I.subscribeState(`${n}.inputCount`,Ye),I.subscribeState(`${n}.outputCount`,qe),I.subscribeState(`${n}.cpu`,et),I.subscribeState(`${n}.mem`,tt),I.subscribeState(`${n}.uptime`,st),I.subscribeState(`${n}.diskFree`,Y),I.subscribeState(`${n}.diskSize`,Y),I.subscribeState(`${n}.diskWarning`,Y),I.subscribeState(`${n}.logLevel`,ot),()=>{we.unregisterNotificationHandler(v),I.unsubscribeState(`${n}.inputCount`,Ye),I.unsubscribeState(`${n}.outputCount`,qe),I.unsubscribeState(`${n}.cpu`,et),I.unsubscribeState(`${n}.mem`,tt),I.unsubscribeState(`${n}.uptime`,st),I.unsubscribeState(`${n}.diskFree`,Y),I.unsubscribeState(`${n}.diskSize`,Y),I.unsubscribeState(`${n}.diskWarning`,Y),I.unsubscribeState(`${n}.logLevel`,ot)}},[n,I,s]);const[ce,Re]=(0,S.useState)(!1),[pe,it]=(0,S.useState)(null),[Ie,lt]=(0,S.useState)(null),ct=(r||e)&&Oe.default.updateAvailable(O,t),pt=()=>{let v=[];X.current&&v.push(`CPU: ${X.current.innerHTML}`),G.current&&v.push(`RAM: ${G.current.innerHTML}`),Q.current&&v.push(`${x("Uptime")}: ${Q.current.innerHTML}`),v.push(`${x("Available")}: ${t}`),v.push(`${x("Installed")}: ${O}`),F.current&&v.push(`${x("Events")}: ${F.current.innerHTML}`),ye&&typeof ye=="object"&&Object.keys(ye).map(b=>v.push(`${x(b)}: ${Te[b]?Te[b](ye[b],x):ye[b]||"--"}`)),p.Utils.copyToClipboard(v.join(`
308
+ `)),window.alert(x("Copied"))};let ht=!1,Zt;ce&&(Zt=x("Edit log level rule for %s",ae),ht=!0);const Tt=ht?a().createElement(Ze.Z,{title:Zt,open:!0,onApply:v=>{ce&&(I.setState(`${n}.logLevel`,Ie),Re(!1))},onClose:v=>{ce&&(lt(pe),Re(!1))}},ce&&a().createElement(h.FormControl,{className:s.formControl,variant:"outlined"},a().createElement(h.InputLabel,null,x("log level")),a().createElement(h.Select,{variant:"standard",value:Ie,fullWidth:!0,onChange:v=>lt(v.target.value)},Fs.map(v=>a().createElement(h.MenuItem,{key:v,value:v},x(v))))),ce&&a().createElement(h.FormControl,{className:s.formControl,variant:"outlined"},a().createElement(h.FormHelperText,null,x("Log level will be reset to the saved level after the restart of the controller")),a().createElement(h.FormHelperText,null,x("You can set the log level permanently in the base host settings"),a().createElement(P.default,{className:s.baseSettingsButton})))):null;return a().createElement("div",{style:{border:`2px solid ${i||"inherit"}`,borderRadius:5},onMouseOut:ce?null:()=>Le(!1),onMouseOver:ce?null:()=>Le(!0),onMouseMove:ce?null:()=>Le(!0),key:n,className:p.Utils.clsx(s.root,se?s.hidden:"")},Tt,a().createElement("div",{className:p.Utils.clsx(s.wrapperFlex,!e&&s.cursorNoDrop),onClick:ce?null:()=>T(v=>!v)},a().createElement("div",{className:s.wrapperColor},a().createElement("div",{className:p.Utils.clsx(s.onOff,e?s.green:s.red)}),e&&a().createElement("div",{className:s.dotLine})),a().createElement("div",{ref:K,style:{background:i||"inherit"},className:s.imageBlock},a().createElement(Ds,{title:x("Hosts notifications"),badgeContent:nt.count,color:"error",onClick:v=>{v.stopPropagation(),re({[n]:nt.notifications},I,n)}},a().createElement(h.CardMedia,{className:s.img,component:"img",image:j||"img/no-image.png"})),a().createElement("div",{style:{color:i&&p.Utils.invertColor(i,!0)||"inherit"},className:s.host},ae)),a().createElement(h.CardContent,{className:s.cardContentH5},a().createElement(h.Typography,{className:p.Utils.clsx(s.flex,s.hidden800),variant:"body2",color:"textSecondary",component:"div"},a().createElement("div",{ref:X},"- %")),a().createElement(h.Typography,{className:p.Utils.clsx(s.flex,s.hidden800),variant:"body2",color:"textSecondary",component:"div"},a().createElement("div",{ref:G},"- %")),a().createElement(h.Typography,{className:p.Utils.clsx(s.flex,s.hidden800),variant:"body2",color:"textSecondary",component:"div"},a().createElement("div",{ref:Q},"-/-")),a().createElement(h.Typography,{className:p.Utils.clsx(s.flex,s.hidden1100),variant:"body2",color:"textSecondary",component:"div"},a().createElement("div",{className:p.Utils.clsx(ct&&s.greenText,s.curdContentFlexCenter)},ct?a().createElement(h.Tooltip,{title:x("Update")},a().createElement("div",{onClick:v=>{v.stopPropagation(),M()},className:s.buttonUpdate},a().createElement(h.IconButton,{className:s.buttonUpdateIcon,size:"small"},a().createElement(ke.default,null)),t)):t)),a().createElement(h.Typography,{className:p.Utils.clsx(s.flex,s.hidden1100),variant:"body2",color:"textSecondary",component:"p"},O),a().createElement(h.Typography,{className:p.Utils.clsx(s.flex,s.hidden600),variant:"body2",color:"textSecondary",component:"div"},a().createElement("div",{ref:F},w)),a().createElement("div",{className:s.marginTop10},a().createElement(h.Typography,{component:"span",className:s.enableButton},a().createElement(h.IconButton,{size:"large",onClick:v=>{v.stopPropagation(),ne(!0)}},a().createElement(R.default,null)),V&&a().createElement(h.Tooltip,{title:x("Host Base Settings")},a().createElement("div",null,a().createElement(h.IconButton,{size:"large",disabled:!e,onClick:v=>{z(),v.stopPropagation()}},a().createElement(P.default,{className:s.baseSettingsButton})))),a().createElement(h.Tooltip,{title:x("Restart host")},a().createElement("div",null,a().createElement(h.IconButton,{size:"large",disabled:!e,onClick:v=>{v.stopPropagation(),I.restartController(n).catch(b=>window.alert(`Cannot restart: ${b}`))}},a().createElement(D.Z,null)))),V&&pe?a().createElement(h.Tooltip,{title:`${x("loglevel")} ${pe}`},a().createElement(h.IconButton,{size:"large",onClick:v=>{v.stopPropagation(),Re(!0)}},a().createElement(h.Avatar,{className:p.Utils.clsx(s.smallAvatar,s[pe])},H(pe)))):a().createElement("div",{className:s.emptyButton}),a().createElement(h.Tooltip,{title:x("Remove")},a().createElement("span",null,a().createElement(h.IconButton,{size:"large",disabled:e||r,title:e||r?x("You cannot delete host, when it is alive"):"",onClick:v=>{C(),v.stopPropagation()}},a().createElement(oe.default,null)))))))),(Nt||It)&&typeof E=="object"&&a().createElement("div",{className:p.Utils.clsx(s.collapse,Nt?s.collapseOn:s.collapseOff),onClick:v=>v.stopPropagation()},a().createElement(h.CardContent,{className:s.cardContentInfo},E,a().createElement(h.Tooltip,{title:x("Copy")},a().createElement(h.IconButton,{size:"large",onClick:()=>pt(),style:{position:"absolute",top:8,right:8}},a().createElement(Z.default,null)))),a().createElement("div",{className:s.footerBlock})))};ts.propTypes={t:d().func,systemConfig:d().object,isCurrentHost:d().bool};var Ms=(0,L.withStyles)(Bs)(ts),yt=l(66447),Ht=l(29480),St=l(6774),Ct=l(19974),W=l(78565),g=l(18635),ss=l(26021),Pe=l(17773),Ls=l(94437),A=l(4819);const Rs=n=>({error:{border:"2px solid #FF0000"},id:{fontStyle:"italic"},dialog:{height:"calc(100% - 64px)"},button:{marginTop:20,marginLeft:n.spacing(1)},funcDivEdit:{width:"100%"},funcEditName:{display:"inline-block",width:85},funcEdit:{width:400},marginTop:{marginTop:20},commonTabWrapper:{flexFlow:"wrap",display:"flex"},commonWrapper:{width:500,minWidth:300},flexDrop:{width:"100%",maxWidth:500,margin:"auto",display:"flex"},marginBlock:{marginTop:20},buttonAdd:{minWidth:150},textField:{width:"100%"},flex:{display:"flex"},close:{width:"20px",height:"20px",opacity:"0.9",cursor:"pointer",position:"relative",top:20,transition:"all 0.6s ease","&:hover":{transform:"rotate(90deg)"},"&:before":{position:"absolute",left:"9px",content:'""',height:"20px",width:"3px",backgroundColor:"#ff4f4f",transform:"rotate(45deg)"},"&:after":{position:"absolute",left:"9px",content:'""',height:"20px",width:"3px",backgroundColor:"#ff4f4f",transform:"rotate(-45deg)"}},color:{width:70},buttonRemoveWrapper:{position:"absolute",zIndex:222,right:0},tabsPadding:{padding:"0px 24px"}});class as extends S.Component{constructor(e){super(e),this.state={text:JSON.stringify(this.props.obj,null,2),error:!1,changed:!1,tab:(window._localStorage||window.localStorage).getItem((this.props.dialogName||"App")+".editTab")||"object"},this.originalObj=JSON.stringify(this.props.obj,null,2)}prepareObject(e){e=e||this.state.text;try{const t=JSON.parse(e);return t._id=this.props.obj._id,t}catch(t){return null}}onChange(e){const t={text:e},s=this.prepareObject(e);s?(t.changed=this.originalObj!==JSON.stringify(s,null,2),this.state.error&&(t.error=!1)):t.error=!0,this.setState(t)}onUpdate(){try{const e=JSON.parse(this.state.text);e._id=this.props.obj._id,this.props.onClose(e)}catch(e){}}setCommonItem(e,t,s){e.common[t]=s,this.onChange(JSON.stringify(e,null,2))}removeCommonItem(e,t){delete e.common[t],this.onChange(JSON.stringify(e,null,2))}buttonAddKey(e,t){const{t:s,classes:i}=this.props;return A.createElement("div",{className:i.marginBlock},A.createElement(W.Z,{className:i.buttonAdd,variant:"contained",color:"secondary",onClick:t,startIcon:A.createElement(Pe.default,null)},s("Add "+e)))}buttonRemoveKey(e,t){const{t:s,classes:i}=this.props;return A.createElement(q.Z,{title:s("Remove "+e)},A.createElement("div",{className:i.close,onClick:t}))}renderCommonEdit(){try{const e=JSON.parse(this.state.text),t=!1,{classes:s,t:i}=this.props;return A.createElement("div",{className:s.commonTabWrapper},A.createElement("div",{className:s.commonWrapper},typeof e.common.title!="undefined"?A.createElement(g.Z,{variant:"standard",disabled:t,label:i("title"),className:p.Utils.clsx(s.marginBlock,s.textField),fullWidth:!0,value:e.common.title,onChange:r=>this.setCommonItem(e,"title",r.target.value)}):this.buttonAddKey("title",()=>this.setCommonItem(e,"title","")),typeof e.common.color!="undefined"?A.createElement("div",{className:s.flex},A.createElement(g.Z,{variant:"standard",disabled:t,className:p.Utils.clsx(s.marginBlock,s.color),label:i("Color"),type:"color",value:e.common.color,onChange:r=>this.setCommonItem(e,"color",r.target.value)}),this.buttonRemoveKey("color",()=>this.removeCommonItem(e,"color"))):this.buttonAddKey("color",()=>this.setCommonItem(e,"color",""))),typeof e.common.icon!="undefined"?A.createElement("div",{className:s.flexDrop},A.createElement(Ls.Z,{disabled:t,crop:!0,maxSize:256*1024,icon:e.common.icon,removeIconFunc:()=>this.setCommonItem(e,"icon",""),onChange:r=>this.setCommonItem(e,"icon",r),t:i}),this.buttonRemoveKey("icon",()=>this.removeCommonItem(e,"icon"))):A.createElement("div",{className:s.flexDrop},this.buttonAddKey("icon",()=>this.setCommonItem(e,"icon",""))))}catch(e){return A.createElement("div",null,this.props.t("Cannot parse JSON!"))}}render(){return A.createElement(yt.Z,{classes:{paper:this.props.classes.dialog},open:!0,maxWidth:"lg",fullWidth:this.state.type!=="number"&&this.state.type!=="boolean",fullScreen:!1,onClose:()=>this.props.onClose(),"aria-labelledby":"edit-value-dialog-title","aria-describedby":"edit-value-dialog-description"},A.createElement(Ht.Z,{id:"edit-value-dialog-title"},this.props.t("Edit host settings"),": ",A.createElement("span",{className:this.props.classes.id},this.props.obj._id)),A.createElement(St.Z,null,this.renderCommonEdit()),A.createElement(Ct.Z,null,A.createElement(W.Z,{variant:"contained",disabled:this.state.error||!this.state.changed,onClick:()=>this.onUpdate(),color:"primary",startIcon:A.createElement(ss.default,null)},this.props.t("Write")),A.createElement(W.Z,{variant:"contained",onClick:()=>this.props.onClose(),color:"grey",startIcon:A.createElement(Ce.default,null)},this.props.t("Cancel"))))}}as.propTypes={classes:d().object,socket:d().object,obj:d().object,expertMode:d().bool,onClose:d().func.isRequired,dialogName:d().string,objects:d().object,t:d().func};var Hs=(0,L.withStyles)(Rs)(as),zs=l(70776),je=l(62664),Us=l(9790),Ws=Object.defineProperty,xt=Object.getOwnPropertySymbols,ns=Object.prototype.hasOwnProperty,rs=Object.prototype.propertyIsEnumerable,os=(n,e,t)=>e in n?Ws(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,is=(n,e)=>{for(var t in e||(e={}))ns.call(e,t)&&os(n,t,e[t]);if(xt)for(var t of xt(e))rs.call(e,t)&&os(n,t,e[t]);return n},zt=(n,e)=>{var t={};for(var s in n)ns.call(n,s)&&e.indexOf(s)<0&&(t[s]=n[s]);if(n!=null&&xt)for(var s of xt(n))e.indexOf(s)<0&&rs.call(n,s)&&(t[s]=n[s]);return t};const Js=(0,L.makeStyles)(n=>({root:{width:"100%",height:"auto",display:"flex",flexDirection:"column",overflow:"auto",padding:10},paper:{maxWidth:1e3},overflowHidden:{display:"flex",overflow:"hidden"},h1:{fontWeight:500,fontSize:35,margin:"10px 0"},h2:{padding:"10px 7px",fontSize:25,fontWeight:300,borderRadius:3,background:"#4dabf5",color:n.palette.mode==="dark"?"black":"white"},h22:{padding:0,margin:0,fontSize:25,fontWeight:300,borderRadius:3,background:"#4dabf5",color:n.palette.mode==="dark"?"black":"white"},standardText:{fontSize:15,margin:"10px 0","& > a":{textDecoration:"none",color:"#1e88e5"}},standardTextSmall:{fontSize:12,color:"black"},standardTextSmall2:{fontSize:12},silver:{color:"silver","& > a":{textDecoration:"none",color:"#1e88e5"}},pre:{whiteSpace:"pre-wrap",background:"#e4e3e3",padding:10,borderRadius:3,position:"relative"},copyButton:{color:"black",position:"absolute",right:10,top:4},comment:{color:"#00000078"},accordionSummary:{background:"#4dabf5",borderRadius:3,"& .MuiAccordionSummary-content":{margin:0}},accordionDetails:{display:"flex",flexDirection:"column"},code:{backgroundColor:n.palette.mode==="dark"?"#123456":"#93bbe7",padding:"0 3px 0 3px"},copyButtonSmall:{width:31,height:16}}));function ls(n,e,t){const s=n.split(`
309
309
  `);let i=[],r=!1;for(let E=0;E<s.length;E++){const w=s[E].toLowerCase();w.startsWith("##")&&(r=w.includes(e.toLowerCase())&&(!t||!w.includes(t.toLowerCase()))),r||i.push(s[E])}return i.join(`
310
- `)}const cs=({socket:n,hostId:e,theme:t,version:s,onClose:i})=>{const r=Js(),[E,w]=(0,S.useState)(null),[C,V]=(0,S.useState)(""),[H,ke]=(0,S.useState)(""),se=j=>{p.Utils.copyToClipboard(j),window.alert(p.I18n.t("Copied"))};(0,S.useEffect)(()=>{(!C||!H)&&n.getHostInfoShort(e).then(j=>{j.location&&j.location!==C&&V(j.location),j.os&&j.os!==H&&ke(j.os),fetch(`https://raw.githubusercontent.com/ioBroker/ioBroker.docs/master/admin/${p.I18n.getLanguage()}/controller-upgrade.md`).then(O=>O.text()).then(O=>{let ae=j.os||H,M=(j.location||C).replace(/\\/g,"/");ae==="win32"?O=ls(O,"linux","windows"):O=ls(O,"windows","linux"),O=O.replace(/cd \/opt\/iobroker/g,`cd ${M}`),O=O.replace(/cd C:\\iobroker/g,`cd ${M}`),O=O.replace(/x\.y\.z/g,s),O=O.split("<!-- copy");const z=[];O.forEach(ne=>{if(ne.includes("-->")){let[re,I]=ne.split("-->"),Ne=!1;re.startsWith(" small")&&(re=re.replace(/^ {2}small /,""),Ne=!0),re=re.replace(/^\n\r/,"").replace(/^\n/,""),Ne?z.push(a().createElement(h.IconButton,{key:`b${z.length}`,onClick:()=>se(re)},a().createElement(Z.default,null))):z.push(a().createElement(W.Z,{key:`b${z.length}`,variant:"contained",onClick:()=>se(re),startIcon:a().createElement(Z.default,null)},p.I18n.t("Copy to clipboard"))),z.push(I)}else z.push(ne)}),w(z)})}).catch(j=>window.alert(`Cannot get information about host "${e}": ${j}`))},[C,H,n,s,e]);const we=()=>a().createElement(a().Fragment,null,E.map((j,O)=>typeof j=="object"?j:a().createElement(zs.D,{key:`t_${O}`,components:{em:ae=>{var M=ae,{node:z}=M,ne=zt(M,["node"]);return a().createElement(h.IconButton,{className:r.copyButtonSmall,onClick:()=>se(ne.children[0])},a().createElement(Z.default,null))},a:ae=>{var M=ae,{node:z}=M,ne=zt(M,["node"]);return a().createElement("a",is({style:{color:"inherit"}},ne))},code:ae=>{var M=ae,{node:z,inline:ne,className:re,children:I}=M,Ne=zt(M,["node","inline","className","children"]);return a().createElement("code",is({className:r.code},Ne),I)}}},j))),ye=()=>a().createElement(h.Card,{className:r.root},a().createElement("div",{className:r.standardText},p.I18n.t("Due to the different hardware and platforms under which ioBroker runs, the js-controller has to be updated manually. Further details can be found in the appropriate section.")),a().createElement("h2",{className:r.h2},p.I18n.t("General information for all platforms")),a().createElement("div",{className:r.standardText},p.I18n.t("For an update from js-controller 1.x to 2.x please always read the information at")," ",a().createElement("a",{href:"https://forum.iobroker.net/topic/26759/js-controller-2-jetzt-f%C3%BCr-alle-im-stable",target:"_blank"},"forum"),"."),a().createElement("div",{className:r.standardText},p.I18n.t("Otherwise please update the slaves first with an update of master-slave systems and the master last!")),H!=="win32"&&a().createElement(a().Fragment,null,a().createElement("h2",{className:r.h2},p.I18n.t("Linux/macOS (new installer)")),a().createElement("div",{className:r.standardText},p.I18n.t("This is the recommended option")),a().createElement("div",{className:r.standardText},p.I18n.t("Please execute the following commands in an SSH shell (console):")),a().createElement("pre",{className:r.pre},a().createElement(h.IconButton,{size:"small",onClick:()=>{window.alert(p.I18n.t("Copied")),se(`iob backup
310
+ `)}const cs=({socket:n,hostId:e,theme:t,version:s,onClose:i})=>{const r=Js(),[E,w]=(0,S.useState)(null),[C,V]=(0,S.useState)(""),[H,Te]=(0,S.useState)(""),se=j=>{p.Utils.copyToClipboard(j),window.alert(p.I18n.t("Copied"))};(0,S.useEffect)(()=>{(!C||!H)&&n.getHostInfoShort(e).then(j=>{j.location&&j.location!==C&&V(j.location),j.os&&j.os!==H&&Te(j.os),fetch(`https://raw.githubusercontent.com/ioBroker/ioBroker.docs/master/admin/${p.I18n.getLanguage()}/controller-upgrade.md`).then(O=>O.text()).then(O=>{let ae=j.os||H,M=(j.location||C).replace(/\\/g,"/");ae==="win32"?O=ls(O,"linux","windows"):O=ls(O,"windows","linux"),O=O.replace(/cd \/opt\/iobroker/g,`cd ${M}`),O=O.replace(/cd C:\\iobroker/g,`cd ${M}`),O=O.replace(/x\.y\.z/g,s),O=O.split("<!-- copy");const z=[];O.forEach(ne=>{if(ne.includes("-->")){let[re,I]=ne.split("-->"),Ne=!1;re.startsWith(" small")&&(re=re.replace(/^ {2}small /,""),Ne=!0),re=re.replace(/^\n\r/,"").replace(/^\n/,""),Ne?z.push(a().createElement(h.IconButton,{key:`b${z.length}`,onClick:()=>se(re)},a().createElement(Z.default,null))):z.push(a().createElement(W.Z,{key:`b${z.length}`,variant:"contained",onClick:()=>se(re),startIcon:a().createElement(Z.default,null)},p.I18n.t("Copy to clipboard"))),z.push(I)}else z.push(ne)}),w(z)})}).catch(j=>window.alert(`Cannot get information about host "${e}": ${j}`))},[C,H,n,s,e]);const we=()=>a().createElement(a().Fragment,null,E.map((j,O)=>typeof j=="object"?j:a().createElement(zs.D,{key:`t_${O}`,components:{em:ae=>{var M=ae,{node:z}=M,ne=zt(M,["node"]);return a().createElement(h.IconButton,{className:r.copyButtonSmall,onClick:()=>se(ne.children[0])},a().createElement(Z.default,null))},a:ae=>{var M=ae,{node:z}=M,ne=zt(M,["node"]);return a().createElement("a",is({style:{color:"inherit"}},ne))},code:ae=>{var M=ae,{node:z,inline:ne,className:re,children:I}=M,Ne=zt(M,["node","inline","className","children"]);return a().createElement("code",is({className:r.code},Ne),I)}}},j))),ye=()=>a().createElement(h.Card,{className:r.root},a().createElement("div",{className:r.standardText},p.I18n.t("Due to the different hardware and platforms under which ioBroker runs, the js-controller has to be updated manually. Further details can be found in the appropriate section.")),a().createElement("h2",{className:r.h2},p.I18n.t("General information for all platforms")),a().createElement("div",{className:r.standardText},p.I18n.t("For an update from js-controller 1.x to 2.x please always read the information at")," ",a().createElement("a",{href:"https://forum.iobroker.net/topic/26759/js-controller-2-jetzt-f%C3%BCr-alle-im-stable",target:"_blank"},"forum"),"."),a().createElement("div",{className:r.standardText},p.I18n.t("Otherwise please update the slaves first with an update of master-slave systems and the master last!")),H!=="win32"&&a().createElement(a().Fragment,null,a().createElement("h2",{className:r.h2},p.I18n.t("Linux/macOS (new installer)")),a().createElement("div",{className:r.standardText},p.I18n.t("This is the recommended option")),a().createElement("div",{className:r.standardText},p.I18n.t("Please execute the following commands in an SSH shell (console):")),a().createElement("pre",{className:r.pre},a().createElement(h.IconButton,{size:"small",onClick:()=>{window.alert(p.I18n.t("Copied")),se(`iob backup
311
311
  iob stop
312
312
  iob update
313
313
  iob upgrade self
@@ -324,9 +324,9 @@ iob stop
324
324
  iob status
325
325
  iob update
326
326
  iob upgrade self
327
- `)},className:r.copyButton},a().createElement(Z.default,null)),a().createElement("div",{className:r.standardTextSmall},"cd ",(C||"C:\\iobroker").replace(/\//g,"\\")," ",C?null:p.I18n.t("(or where ioBroker was installed)")),a().createElement("div",{className:r.standardTextSmall},"iob backup"),a().createElement("div",{className:r.standardTextSmall},"iob stop ",p.I18n.t("to stop the ioBroker service")),a().createElement("div",{className:r.standardTextSmall},"iob status ",p.I18n.t("to check if ioBroker has finished")),a().createElement("div",{className:r.standardTextSmall},"iob update"),a().createElement("div",{className:r.standardTextSmall},"iob upgrade self")),a().createElement("div",{className:p.Utils.clsx(r.standardTextSmall2)},p.I18n.t("Start ioBroker service or reboot computer, then ioBroker should restart and you can be sure that all the old processes were finished."))),a().createElement(h.Accordion,{style:{paddingTop:14}},a().createElement(h.AccordionSummary,{className:r.accordionSummary,expandIcon:a().createElement(Pe.default,null)},a().createElement("h2",{className:r.h22},p.I18n.t("Emergency Linux / macOS / Windows"))),a().createElement(h.AccordionDetails,{className:r.accordionDetails},a().createElement("div",{className:r.standardText},p.I18n.t("(manual reinstallation, if somehow nothing works after the update)")),a().createElement("div",{className:r.standardText},p.I18n.t('On Windows first please call in the start menu under "ioBroker" the command line of the relevant ioBroker instance. The correct directory is then set automatically. On Linux or macOS please go to the ioBroker directory.')),a().createElement("div",{className:r.standardText},p.I18n.t("Run npm install iobroker.js-controller there. A specific version can be installed using npm install iobroker.js-controller@x.y.z (replace x.y.z with the desired version).")),a().createElement("div",{className:r.standardText},p.I18n.t("If there are problems with access rights when running on Linux the command has to be changed slightly:")),a().createElement("div",{className:r.standardTextSmall2},p.I18n.t("For systems created with the new Linux installer:")),a().createElement("pre",{className:r.pre},a().createElement(h.IconButton,{size:"small",onClick:()=>{window.alert(p.I18n.t("Copied")),se(`cd ${H==="win32"?(C||"C:\\iobroker").replace(/\//g,"\\"):C||"/opt/iobroker"}
328
- sudo -u iobroker -H npm install iobroker.js-controller`)},className:r.copyButton},a().createElement(Z.default,null)),a().createElement("div",{className:r.standardTextSmall},"cd ",H==="win32"?(C||"C:\\iobroker").replace(/\//g,"\\"):C||"/opt/iobroker"),a().createElement("div",{className:r.standardTextSmall},"sudo -u iobroker -H npm install iobroker.js-controller")),a().createElement("div",{className:r.standardTextSmall2},p.I18n.t("For systems installed manually under Linux, prefix sudo or run as root.")),a().createElement("div",{className:r.standardText},p.I18n.t("This way is only necessary in very few cases and please consult the forum beforehand!")))));return a().createElement(yt.Z,{onClose:()=>i(),open:!0,classes:{paper:r.paper}},a().createElement(h.DialogTitle,null,p.I18n.t("js-controller upgrade instructions")),a().createElement(St.Z,{className:E?null:r.overflowHidden,dividers:!0},E?we():ye()),a().createElement(Ct.Z,null,a().createElement(W.Z,{variant:"contained",onClick:()=>{window.open("https://github.com/ioBroker/ioBroker.js-controller/blob/master/CHANGELOG.md","_blank"),i()},color:"grey",startIcon:a().createElement(Us.default,null)},p.I18n.t("Show whole changelog")),a().createElement(W.Z,{variant:"contained",onClick:()=>i(),color:"primary",startIcon:a().createElement(Ce.default,null)},p.I18n.t("Ok"))))};cs.propTypes={socket:d().object,hostId:d().string,theme:d().object,version:d().string,onClose:d().func};var $s=cs,je=l(84998),Vs=l(36609),Ae=l(49630),Ks=l(13820),Xs=l(66966),Ut=l(41728),Be=l(70703),c=l(75836),$=l(2598),ie=l(36315),De=l(30464),T=l(4819);const Gs=n=>({paper:{height:"100%",maxHeight:"100%",maxWidth:"100%",overflow:"auto",padding:n.spacing(1)},controlItem:{width:`calc(100% - ${n.spacing(2)})`,marginBottom:n.spacing(2),marginRight:n.spacing(1),marginLeft:n.spacing(1)},RAM:{width:400,marginRight:n.spacing(1)}});class ps extends S.Component{constructor(e){super(e);const t=this.props.settings||{};this.state={memoryLimitMB:t.memoryLimitMB||0,hostname:t.hostname||"",statisticsInterval:t.statisticsInterval||15e3,checkDiskInterval:t.checkDiskInterval||3e5,instanceStartInterval:t.instanceStartInterval||2e3,compact:t.compact||!1,allowShellCommands:t.allowShellCommands||!1,memLimitWarn:t.memLimitWarn||100,memLimitError:t.memLimitError||50},this.focusRef=(0,S.createRef)()}componentDidMount(){this.focusRef.current&&this.focusRef.current.focus()}onChange(){this.props.onChange({memoryLimitMB:this.state.memoryLimitMB,hostname:this.state.hostname,statisticsInterval:this.state.statisticsInterval,checkDiskInterval:this.state.checkDiskInterval,noChmod:this.state.noChmod,instanceStartInterval:this.state.instanceStartInterval,compact:this.state.compact,allowShellCommands:this.state.allowShellCommands,memLimitWarn:this.state.memLimitWarn,memLimitError:this.state.memLimitError})}render(){return T.createElement(De.Z,{className:this.props.classes.paper},T.createElement(c.ZP,{item:!0,className:this.props.classes.gridSettings},T.createElement(c.ZP,{container:!0,direction:"column"},T.createElement(c.ZP,{item:!0},T.createElement(g.Z,{variant:"standard",label:this.props.t("Host name"),className:this.props.classes.controlItem,value:this.state.hostname||this.props.currentHost.replace("system.host.",""),onChange:e=>this.setState({hostname:e.target.value},()=>this.onChange()),helperText:this.props.t("You can change the host name, but be aware, that all instances must be assigned anew")})),T.createElement(c.ZP,{item:!0},T.createElement(g.Z,{variant:"standard",label:this.props.t("Check disk space interval"),className:this.props.classes.controlItem,value:this.state.checkDiskInterval,type:"number",min:1e3,onChange:e=>this.setState({checkDiskInterval:parseInt(e.target.value,10)},()=>this.onChange()),helperText:this.props.t("How oft the disk will be checked. Do not set it to low, because it can affect system performance. Value is in ms")})),T.createElement(c.ZP,{item:!0},T.createElement(g.Z,{variant:"standard",label:this.props.t("Instance statistics update interval"),className:this.props.classes.controlItem,value:this.state.statisticsInterval,type:"number",min:5e3,onChange:e=>this.setState({statisticsInterval:parseInt(e.target.value,10)},()=>this.onChange()),helperText:this.props.t("How oft the instance statistics will be updated. Used RAM, CPU and so on. Value is in ms")})),T.createElement(c.ZP,{item:!0,className:this.props.classes.controlItem},T.createElement($.Z,{control:T.createElement(ie.Z,{checked:this.state.compact,onChange:e=>this.setState({compact:e.target.checked},()=>this.onChange())}),label:this.props.t("Compact mode")}),T.createElement("div",null,this.props.t("When enabled adapter instances can run in one or few processes to save RAM usage."))),T.createElement(c.ZP,{item:!0,className:this.props.classes.controlItem},T.createElement($.Z,{control:T.createElement(ie.Z,{checked:this.state.allowShellCommands,onChange:e=>this.setState({allowShellCommands:e.target.checked},()=>this.onChange())}),label:this.props.t("Allow shell's commands")}),T.createElement("div",null,this.props.t('Allow execution of sendToHost("shell", "cli command")'))),T.createElement(c.ZP,{item:!0},T.createElement(g.Z,{variant:"standard",label:this.props.t("Limit RAM size for controller"),className:this.props.classes.controlItem,value:this.state.memoryLimitMB,type:"number",onChange:e=>this.setState({memoryLimitMB:parseInt(e.target.value,10)},()=>this.onChange()),helperText:this.props.t("MB")})),T.createElement(c.ZP,{item:!0},T.createElement(c.ZP,{container:!0,direction:"row",className:this.props.classes.controlItem},T.createElement(c.ZP,{item:!0},T.createElement(g.Z,{variant:"standard",label:this.props.t("Show warning im log if RAM less than"),className:this.props.classes.RAM,value:this.state.memLimitWarn,type:"number",onChange:e=>this.setState({memLimitWarn:parseInt(e.target.value,10)},()=>this.onChange()),helperText:this.props.t("MB")})),T.createElement(c.ZP,{item:!0},T.createElement(g.Z,{variant:"standard",label:this.props.t("Show error in log if RAM less than"),className:this.props.classes.RAM,value:this.state.memLimitError,type:"number",onChange:e=>this.setState({memLimitError:parseInt(e.target.value,10)},()=>this.onChange()),helperText:this.props.t("MB")})))))))}}ps.propTypes={t:d().func,onChange:d().func.isRequired,settings:d().object.isRequired,currentHost:d().string};var Qs=(0,Be.default)()((0,L.withStyles)(Gs)(ps)),J=l(4819);const Ys=n=>({paper:{height:"100%",maxHeight:"100%",maxWidth:"100%",overflow:"auto",padding:n.spacing(1)},controlItem:{width:`calc(100% - ${n.spacing(2)})`,marginBottom:n.spacing(2),marginRight:n.spacing(1),marginLeft:n.spacing(1)},RAM:{width:400,marginRight:n.spacing(1)}});class hs extends S.Component{constructor(e){super(e);const t=this.props.settings||{};this.state={enabled:t.enabled||!1,secure:t.secure||!0,password:""},t.password&&this.props.socket.decrypt(t.password).then(s=>this.setState({password:s})),this.focusRef=(0,S.createRef)()}componentDidMount(){this.focusRef.current&&this.focusRef.current.focus()}onChange(){const e={enabled:this.state.enabled,secure:this.state.secure};this.state.password?this.props.socket.encrypt(this.state.password).then(t=>{e.password=t,this.props.onChange(e)}):this.props.onChange(e)}render(){return J.createElement(De.Z,{className:this.props.classes.paper},J.createElement("form",{className:this.props.classes.form,noValidate:!0,autoComplete:"off"},J.createElement(c.ZP,{item:!0,className:this.props.classes.gridSettings},J.createElement(c.ZP,{container:!0,direction:"column"},J.createElement(c.ZP,{item:!0,className:this.props.classes.controlItem},J.createElement($.Z,{control:J.createElement(ie.Z,{checked:this.state.enabled,onChange:e=>this.setState({enabled:e.target.checked},()=>this.onChange())}),label:this.props.t("Allow slave connections")}),J.createElement("div",null,this.props.t("When activated this host can be discovered by other iobroker installations in your network to become the master of a multihost system."))),J.createElement(c.ZP,{item:!0,className:this.props.classes.controlItem},J.createElement($.Z,{control:J.createElement(ie.Z,{checked:this.state.secure,onChange:e=>this.setState({secure:e.target.checked},()=>this.onChange())}),label:this.props.t("With password")}),J.createElement("div",null,this.props.t("Ask password by connection establishment"))),this.state.secure?J.createElement(c.ZP,{item:!0},J.createElement(g.Z,{variant:"standard",label:this.props.t("Multi-host password"),className:this.props.classes.controlItem,value:this.state.password,type:"password",inputProps:{autoComplete:"new-password",form:{autoComplete:"off"}},autoComplete:"off",onChange:e=>this.setState({password:e.target.value},()=>this.onChange())})):null))))}}hs.propTypes={t:d().func,onChange:d().func.isRequired,settings:d().object.isRequired,socket:d().object};var qs=(0,Be.default)()((0,L.withStyles)(Ys)(hs)),ve=l(66116),be=l(67304),Wt=l(23736),N=l(41381),Fe=l(98056),te=l(71386),ds=l(21233),m=l(4819);const _s=n=>({paper:{height:"100%",maxHeight:"100%",maxWidth:"100%",overflow:"auto",padding:n.spacing(1)},controlItem:{width:400,marginBottom:n.spacing(2),marginRight:n.spacing(1),marginLeft:n.spacing(1)},dangerZone:{backgroundColor:"rgba(255, 165, 0, 0.05)",border:"2px solid rgba(255, 165, 0)",marginBottom:n.spacing(1)},dangerZoneHeader:{background:"rgba(255, 165, 0)",color:"#FFF",paddingLeft:n.spacing(2),paddingTop:4,paddingBottom:4,marginTop:-1,marginLeft:-1},warning:{padding:8,fontSize:14,color:n.palette.mode==="dark"?"#ffa500":"#b17200"}}),Jt={autoCompress:{sizeFactor:2,sizeFactorMinimumSize:25e3},throttleFS:{intervalMs:6e4,maxBufferedCommands:1e3}};class ms extends S.Component{constructor(e){super(e);const t=this.props.settings||{};t.options=t.options||{auth_pass:"",retry_max_delay:2e3,retry_max_count:19,db:0,family:0},t.backup=t.backup||{disabled:!1,files:24,hours:48,period:120,path:""},t.jsonlOptions=t.jsonlOptions||Jt,t.jsonlOptions.autoCompress=t.jsonlOptions.autoCompress||Jt.autoCompress,t.jsonlOptions.throttleFS=t.jsonlOptions.throttleFS||Jt.throttleFS,this.state={type:t.type||"file",host:Array.isArray(t.host)?t.host.join(","):t.host||"127.0.0.1",port:t.port||9001,noFileCache:t.noFileCache||!1,dataDir:t.dataDir||"",connectTimeout:t.connectTimeout||2e3,writeFileInterval:t.writeFileInterval||5e3,options_auth_pass:t.options.auth_pass||t.pass||"",options_retry_max_delay:t.options.retry_max_delay||2e3,options_retry_max_count:t.options.retry_max_count||19,options_db:t.options.db||0,options_family:t.options.family||0,backup_disabled:t.backup.disabled||!1,backup_files:t.backup.files||24,backup_hours:t.backup.hours||48,backup_period:t.backup.period||120,backup_path:t.backup.path||"",jsonlOptions_autoCompress_sizeFactor:t.jsonlOptions.autoCompress.sizeFactor||2,jsonlOptions_autoCompress_sizeFactorMinimumSize:t.jsonlOptions.autoCompress.sizeFactorMinimumSize||25e3,jsonlOptions_throttleFS_intervalMs:t.jsonlOptions.throttleFS.intervalMs||6e4,jsonlOptions_throttleFS_maxBufferedCommands:t.jsonlOptions.throttleFS.maxBufferedCommands||100,textIP:Array.isArray(t.host)||(t.host||"").match(/[^.\d]/)||(t.host||"").includes(","),IPs:["0.0.0.0","127.0.0.1"],loading:!0,showWarningDialog:!1,toConfirmType:"",originalDBType:t.type||"file"},this.focusRef=(0,S.createRef)(),this.props.socket.getIpAddresses(this.props.currentHost).then(s=>{const i=[...s];!i.includes("0.0.0.0")&&i.push("0.0.0.0"),!i.includes("127.0.0.1")&&i.push("127.0.0.1");let r=this.state.host.match(/[^.\d]/)||(this.state.host||"").includes(",");!r&&!i.includes(i)&&(r=!0),this.setState({IPs:i,loading:!1,textIP:r})})}componentDidMount(){this.focusRef.current&&this.focusRef.current.focus()}onChange(){const e={type:this.state.type,host:this.state.host,port:parseInt(this.state.port,10),noFileCache:this.state.noFileCache,connectTimeout:parseInt(this.state.connectTimeout,10),writeFileInterval:parseInt(this.state.writeFileInterval,10),dataDir:this.state.dataDir,options:{auth_pass:this.state.options_auth_pass||null,retry_max_delay:parseInt(this.state.options_retry_max_delay,10),retry_max_count:parseInt(this.state.options_retry_max_count,10),db:parseInt(this.state.options_db,10),family:parseInt(this.state.options_family,10)},backup:{disabled:this.state.backup_disabled,files:parseInt(this.state.backup_files,10),hours:parseInt(this.state.backup_hours,10),period:parseInt(this.state.backup_period,10),path:this.state.backup_path},jsonlOptions:{autoCompress:{sizeFactor:parseInt(this.state.jsonlOptions_autoCompress_sizeFactor,10),sizeFactorMinimumSize:parseInt(this.state.jsonlOptions_autoCompress_sizeFactorMinimumSize,10)},throttleFS:{intervalMs:parseInt(this.state.jsonlOptions_throttleFS_intervalMs,10),maxBufferedCommands:parseInt(this.state.jsonlOptions_throttleFS_maxBufferedCommands,10)}}};e.jsonlOptions.autoCompress.sizeFactor<2&&(e.jsonlOptions.autoCompress.sizeFactor=2),e.jsonlOptions.autoCompress.sizeFactorMinimumSize<0&&(e.jsonlOptions.autoCompress.sizeFactorMinimumSize=0),e.jsonlOptions.throttleFS.intervalMs<0&&(e.jsonlOptions.throttleFS.intervalMs=0),e.jsonlOptions.throttleFS.maxBufferedCommands<0&&(e.jsonlOptions.throttleFS.maxBufferedCommands=0),this.props.onChange(e)}renderWarning(){return this.state.showWarningDialog?m.createElement(p.Confirm,{title:this.props.t("Please confirm"),text:this.props.t("switch_db_note"),onClose:e=>{if(e){let t;this.state.toConfirmType==="redis"?t=6379:t=9001,this.setState({type:this.state.toConfirmType,showWarningDialog:!1,port:t},()=>this.onChange())}else this.setState({showWarningDialog:!1})}}):null}render(){return m.createElement(De.Z,{className:this.props.classes.paper},this.renderWarning(),m.createElement(c.ZP,{item:!0,className:p.Utils.clsx(this.props.classes.gridSettings,this.props.classes.dangerZone)},m.createElement("h3",{className:this.props.classes.dangerZoneHeader,title:this.props.t("Invalid settings in these fields could lead to dead host")},this.props.t("Danger zone")),m.createElement("p",{className:this.props.classes.warning},this.props.t("base_settings_hint")),m.createElement(c.ZP,{container:!0,direction:"column"},m.createElement(c.ZP,{item:!0},m.createElement(q.Z,{title:this.props.t("switch_db_note")},m.createElement(te.Z,{className:this.props.classes.controlItem,variant:"standard"},m.createElement(ve.Z,null,this.props.t("Type")),m.createElement(be.Z,{variant:"standard",value:this.state.type,onChange:e=>{if(e.target.value!==this.state.originalDBType)this.setState({toConfirmType:e.target.value,showWarningDialog:!0});else{let t;e.target.value==="redis"?t=6379:t=9001,this.setState({type:e.target.value,port:t},()=>this.onChange())}}},m.createElement(N.Z,{value:"jsonl"},"JSON Lines"),m.createElement(N.Z,{value:"file"},this.props.t("File")),m.createElement(N.Z,{value:"redis"},"Redis"))))),m.createElement(c.ZP,{item:!0,style:{paddingLeft:8}},m.createElement($.Z,{control:m.createElement(ds.Z,{checked:this.state.textIP,onChange:e=>this.setState({textIP:e.target.checked},()=>this.onChange())}),label:this.props.t("IP is domain or more than one address")})),m.createElement(c.ZP,{item:!0},this.state.textIP?m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.host,type:"text",onChange:e=>this.setState({host:e.target.value},()=>this.onChange()),label:this.props.t("Bind IP address"),helperText:this.props.t("You can enter more than one address divided by comma")}):m.createElement(te.Z,{className:this.props.classes.controlItem,variant:"standard"},m.createElement(ve.Z,null,this.props.t("Bind IP address")),m.createElement(be.Z,{variant:"standard",value:this.state.host,onChange:e=>this.setState({host:e.target.value},()=>this.onChange())},this.state.IPs.map(e=>m.createElement(N.Z,{key:e,value:e},e==="0.0.0.0"?`0.0.0.0 [${this.props.t("All addresses")}]`:e))))),m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.port,type:"number",min:1,max:65535,onChange:e=>this.setState({port:e.target.value},()=>this.onChange()),label:this.props.t("Port")})),this.state.type==="file"||this.state.type==="jsonl"?m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.dataDir,helperText:this.props.t("Optional. Always relative to iobroker.js-controller/"),onChange:e=>this.setState({dataDir:e.target.value},()=>this.onChange()),label:this.props.t("Directory path")})):null,m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.options_auth_pass,type:"password",helperText:this.props.t("Optional"),inputProps:{autoComplete:"new-password",form:{autoComplete:"off"}},autoComplete:"off",onChange:e=>this.setState({options_auth_pass:e.target.value},()=>this.onChange()),label:this.state.type==="redis"?this.props.t("Redis password"):this.props.t("Connection password")})))),m.createElement(c.ZP,{item:!0,className:this.props.classes.gridSettings},m.createElement(c.ZP,{container:!0,direction:"column"},this.state.type==="file"||this.state.type==="jsonl"?m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.connectTimeout,helperText:this.props.t("ms"),type:"number",min:200,onChange:e=>this.setState({connectTimeout:e.target.value},()=>this.onChange()),label:this.props.t("Connect timeout")})):null,this.state.type==="file"||this.state.type==="jsonl"?m.createElement(c.ZP,{item:!0},m.createElement(te.Z,{component:"fieldset",variant:"standard",className:this.props.classes.controlItem},m.createElement(Wt.Z,null,m.createElement($.Z,{control:m.createElement(ie.Z,{checked:this.state.noFileCache,onChange:e=>this.setState({noFileCache:e.target.checked},()=>this.onChange())}),label:this.props.t("No file cache")})),m.createElement(Fe.Z,null,this.props.t("Always read files from disk and do not cache them in RAM. Used for debugging.")))):null,this.state.type==="file"?m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.writeFileInterval,helperText:this.props.t("How often the data from RAM will be saved on disk in ms"),type:"number",min:200,onChange:e=>this.setState({writeFileInterval:e.target.value},()=>this.onChange()),label:this.props.t("Store file interval")})):null,this.state.type==="redis"?m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.options_retry_max_delay,type:"number",helperText:this.props.t("Maximum delay between connection attempts"),onChange:e=>this.setState({options_retry_max_delay:e.target.value},()=>this.onChange()),label:this.props.t("Retry maximum delay")})):null,this.state.type==="redis"?m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.options_retry_max_count,type:"number",helperText:this.props.t("Maximum number of connection retries"),onChange:e=>this.setState({options_retry_max_count:e.target.value},()=>this.onChange()),label:this.props.t("Retry maximum count")})):null,this.state.type==="redis"?m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.options_db,type:"number",helperText:this.props.t("Used for sentinels"),onChange:e=>this.setState({options_db:e.target.value},()=>this.onChange()),label:this.props.t("DB number")})):null,this.state.type==="redis"?m.createElement(c.ZP,{item:!0},m.createElement(te.Z,{className:this.props.classes.controlItem,variant:"standard"},m.createElement(ve.Z,null,this.props.t("Family number")),m.createElement(be.Z,{variant:"standard",value:this.state.options_family,onChange:e=>this.setState({options_family:e.target.value},()=>this.onChange())},m.createElement(N.Z,{value:0},"auto"),m.createElement(N.Z,{value:4},"IPv4"),m.createElement(N.Z,{value:6},"IPv6")),m.createElement(Fe.Z,null,this.props.t("Used for sentinels")))):null,this.state.type==="jsonl"?m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.jsonlOptions_autoCompress_sizeFactor,type:"number",inputProps:{min:2},helperText:this.props.t("The JSONL DB is append-only and will contain unnecessary entries after a while."),onChange:e=>this.setState({jsonlOptions_autoCompress_sizeFactor:e.target.value},()=>this.onChange()),label:this.props.t("Auto-compress size factor")})):null,this.state.type==="jsonl"?m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.jsonlOptions_autoCompress_sizeFactorMinimumSize,type:"number",inputProps:{min:0},helperText:this.props.t("It will be compressed when the uncompressed size is >= size * sizeFactor AND >= sizeFactorMinimumSize"),onChange:e=>this.setState({jsonlOptions_autoCompress_sizeFactorMinimumSize:e.target.value},()=>this.onChange()),label:this.props.t("Auto-compress size factor minimum size")})):null,this.state.type==="jsonl"?m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.jsonlOptions_throttleFS_intervalMs,type:"number",inputProps:{min:0},helperText:this.props.t("Write to the database file no more than every X milliseconds"),onChange:e=>this.setState({jsonlOptions_throttleFS_intervalMs:e.target.value},()=>this.onChange()),label:this.props.t("Minimal write interval")})):null,this.state.type==="jsonl"?m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.jsonlOptions_throttleFS_maxBufferedCommands,type:"number",inputProps:{min:0},helperText:this.props.t("Force writing after this many changes have been buffered. This reduces memory consumption and data loss in case of a crash"),onChange:e=>this.setState({jsonlOptions_throttleFS_maxBufferedCommands:e.target.value},()=>this.onChange()),label:this.props.t("Maximum changes before write")})):null,this.state.type==="file"||this.state.type==="jsonl"?m.createElement(c.ZP,{item:!0},m.createElement(te.Z,{component:"fieldset",variant:"standard",className:this.props.classes.controlItem},m.createElement(Wt.Z,null,m.createElement($.Z,{control:m.createElement(ie.Z,{checked:this.state.backup_disabled,onChange:e=>this.setState({backup_disabled:e.target.checked},()=>this.onChange())}),label:this.props.t("No on-the-fly backup")})),m.createElement(Fe.Z,null,this.props.t("By every write the backup of object.json will be created.")))):null,(this.state.type==="file"||this.state.type==="jsonl")&&!this.state.backup_disabled?m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.backup_files,type:"number",helperText:this.props.t("Minimal number of backup files, after the deletion will be executed according to the backup time settings"),onChange:e=>this.setState({backup_files:e.target.value},()=>this.onChange()),label:this.props.t("Number of files")})):null,(this.state.type==="file"||this.state.type==="jsonl")&&!this.state.backup_disabled?m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.backup_hours,type:"number",helperText:this.props.t("All backups older than these hours will be deleted, but only if the number of files is greater than of the files number"),onChange:e=>this.setState({backup_hours:e.target.value},()=>this.onChange()),label:this.props.t("Backup hours")})):null,(this.state.type==="file"||this.state.type==="jsonl")&&!this.state.backup_disabled?m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.backup_period,type:"number",helperText:this.props.t("By default the backup is every 2 hours. Time is in minutes. To disable backup set the value to 0"),onChange:e=>this.setState({backup_period:e.target.value},()=>this.onChange()),label:this.props.t("How often")})):null,(this.state.type==="file"||this.state.type==="jsonl")&&!this.state.backup_disabled?m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.backup_path,helperText:this.props.t("Absolute path to backup directory or empty to backup in data directory. Leave it empty for default storage place."),onChange:e=>this.setState({backup_path:e.target.value},()=>this.onChange()),label:this.props.t("Path")})):null)))}}ms.propTypes={t:d().func,onChange:d().func.isRequired,settings:d().object.isRequired,currentHost:d().string};var ea=(0,p.withWidth)()((0,L.withStyles)(_s)(ms)),us=l(23060),u=l(4819);const ta=n=>({paper:{height:"100%",maxHeight:"100%",maxWidth:"100%",overflow:"auto",padding:n.spacing(1)},controlItem:{width:400,marginBottom:n.spacing(2),marginRight:n.spacing(1),marginLeft:n.spacing(1)},dangerZone:{backgroundColor:"rgba(255, 165, 0, 0.05)",border:"2px solid rgba(255, 165, 0)",marginBottom:n.spacing(1)},dangerZoneHeader:{background:"rgba(255, 165, 0)",color:"#FFF",paddingLeft:n.spacing(2),paddingTop:4,paddingBottom:4,marginTop:-1,marginLeft:-1},warning:{padding:8,fontSize:14,color:n.palette.mode==="dark"?"#ffa500":"#b17200"}}),$t={autoCompress:{sizeFactor:2,sizeFactorMinimumSize:25e3},throttleFS:{intervalMs:6e4,maxBufferedCommands:1e3}};class gs extends S.Component{constructor(e){super(e);const t=this.props.settings||{};t.options=t.options||{auth_pass:"",retry_max_delay:2e3,retry_max_count:19,db:0,family:0},t.backup=t.backup||{disabled:!1,files:24,hours:48,period:120,path:""},t.jsonlOptions=t.jsonlOptions||$t,t.jsonlOptions.autoCompress=t.jsonlOptions.autoCompress||$t.autoCompress,t.jsonlOptions.throttleFS=t.jsonlOptions.throttleFS||$t.throttleFS,this.state={type:t.type||"file",host:Array.isArray(t.host)?t.host.join(","):t.host||"127.0.0.1",port:t.port||9e3,connectTimeout:t.connectTimeout||2e3,writeFileInterval:t.writeFileInterval||5e3,dataDir:t.dataDir||"",options_auth_pass:t.options.auth_pass||t.pass||"",options_retry_max_delay:t.options.retry_max_delay||2e3,options_retry_max_count:t.options.retry_max_count||19,options_db:t.options.db||0,options_family:t.options.family||0,backup_disabled:t.backup.disabled||!1,backup_files:t.backup.files||24,backup_hours:t.backup.hours||48,backup_period:t.backup.period||120,backup_path:t.backup.path||"",jsonlOptions_autoCompress_sizeFactor:t.jsonlOptions.autoCompress.sizeFactor||2,jsonlOptions_autoCompress_sizeFactorMinimumSize:t.jsonlOptions.autoCompress.sizeFactorMinimumSize||25e3,jsonlOptions_throttleFS_intervalMs:t.jsonlOptions.throttleFS.intervalMs||6e4,jsonlOptions_throttleFS_maxBufferedCommands:t.jsonlOptions.throttleFS.maxBufferedCommands||100,textIP:Array.isArray(t.host)||(t.host||"").match(/[^.\d]/)||(t.host||"").includes(","),IPs:["0.0.0.0","127.0.0.1"],loading:!0,showWarningDialog:!1,toConfirmType:"",originalDBType:t.type||"file"},this.focusRef=(0,S.createRef)(),this.props.socket.getIpAddresses(this.props.currentHost).then(s=>{const i=[...s];!i.includes("0.0.0.0")&&i.push("0.0.0.0"),!i.includes("127.0.0.1")&&i.push("127.0.0.1"),this.setState({IPs:i,loading:!1})})}componentDidMount(){this.focusRef.current&&this.focusRef.current.focus()}onChange(){const e={type:this.state.type,host:this.state.host,port:parseInt(this.state.port,10),noFileCache:this.state.noFileCache,connectTimeout:parseInt(this.state.connectTimeout,10),writeFileInterval:parseInt(this.state.writeFileInterval,10),dataDir:this.state.dataDir,options:{auth_pass:this.state.options_auth_pass||null,retry_max_delay:parseInt(this.state.options_retry_max_delay,10),retry_max_count:parseInt(this.state.options_retry_max_count,10),db:parseInt(this.state.options_db,10),family:parseInt(this.state.options_family,10)},backup:{disabled:this.state.backup_disabled,files:parseInt(this.state.backup_files,10),hours:parseInt(this.state.backup_hours,10),period:parseInt(this.state.backup_period,10),path:this.state.backup_path},jsonlOptions:{autoCompress:{sizeFactor:parseInt(this.state.jsonlOptions_autoCompress_sizeFactor,10),sizeFactorMinimumSize:parseInt(this.state.jsonlOptions_autoCompress_sizeFactorMinimumSize,10)},throttleFS:{intervalMs:parseInt(this.state.jsonlOptions_throttleFS_intervalMs,10),maxBufferedCommands:parseInt(this.state.jsonlOptions_throttleFS_maxBufferedCommands,10)}}};e.jsonlOptions.autoCompress.sizeFactor<2&&(e.jsonlOptions.autoCompress.sizeFactor=2),e.jsonlOptions.autoCompress.sizeFactorMinimumSize<0&&(e.jsonlOptions.autoCompress.sizeFactorMinimumSize=0),e.jsonlOptions.throttleFS.intervalMs<0&&(e.jsonlOptions.throttleFS.intervalMs=0),e.jsonlOptions.throttleFS.maxBufferedCommands<0&&(e.jsonlOptions.throttleFS.maxBufferedCommands=0),this.props.onChange(e)}renderWarning(){return this.state.showWarningDialog?u.createElement(Ut.default,{title:this.props.t("Please confirm"),text:this.props.t("switch_db_note"),onClose:e=>{if(e){let t;this.state.toConfirmType==="redis"?t=6379:t=9e3,this.setState({type:this.state.toConfirmType,showWarningDialog:!1,port:t},()=>this.onChange())}else this.setState({showWarningDialog:!1})}}):null}render(){return u.createElement(De.Z,{className:this.props.classes.paper},this.renderWarning(),u.createElement(c.ZP,{item:!0,className:(0,us.default)(this.props.classes.gridSettings,this.props.classes.dangerZone)},u.createElement("h3",{className:this.props.classes.dangerZoneHeader,title:this.props.t("Invalid settings in these fields could lead to dead host")},this.props.t("Danger zone")),u.createElement("p",{className:this.props.classes.warning},this.props.t("base_settings_hint")),u.createElement(c.ZP,{container:!0,direction:"column"},u.createElement(c.ZP,{item:!0},u.createElement(q.Z,{title:this.props.t("switch_db_note")},u.createElement(te.Z,{className:this.props.classes.controlItem,variant:"standard"},u.createElement(ve.Z,null,this.props.t("Type")),u.createElement(be.Z,{variant:"standard",value:this.state.type,onChange:e=>{if(e.target.value!==this.state.originalDBType)this.setState({toConfirmType:e.target.value,showWarningDialog:!0});else{let t;e.target.value==="redis"?t=6379:t=9e3,this.setState({type:e.target.value,port:t},()=>this.onChange())}}},u.createElement(N.Z,{value:"jsonl"},"JSON Lines"),u.createElement(N.Z,{value:"file"},this.props.t("File")),u.createElement(N.Z,{value:"redis"},"Redis"))))),u.createElement(c.ZP,{item:!0,style:{paddingLeft:8}},u.createElement($.Z,{control:u.createElement(ds.Z,{checked:this.state.textIP,onChange:e=>this.setState({textIP:e.target.checked},()=>this.onChange())}),label:this.props.t("IP is domain or more than one address")})),u.createElement(c.ZP,{item:!0},this.state.textIP?u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.host,type:"text",onChange:e=>this.setState({host:e.target.value},()=>this.onChange()),label:this.props.t("Bind IP address"),helperText:this.props.t("You can enter more than one address divided by comma")}):u.createElement(te.Z,{className:this.props.classes.controlItem,variant:"standard"},u.createElement(ve.Z,null,this.props.t("Bind IP address")),u.createElement(be.Z,{variant:"standard",value:this.state.host,onChange:e=>this.setState({host:e.target.value},()=>this.onChange())},this.state.IPs.map(e=>u.createElement(N.Z,{key:e,value:e},e==="0.0.0.0"?`0.0.0.0 [${this.props.t("All addresses")}]`:e))))),u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.port,type:"number",min:1,max:65535,onChange:e=>this.setState({port:e.target.value},()=>this.onChange()),label:this.props.t("Port")})),this.state.type==="file"?u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.dataDir,helperText:this.props.t("Optional. Always relative to iobroker.js-controller/"),onChange:e=>this.setState({dataDir:e.target.value},()=>this.onChange()),label:this.props.t("Directory path")})):null,u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.options_auth_pass,type:"password",helperText:this.props.t("Optional"),inputProps:{autoComplete:"new-password",form:{autoComplete:"off"}},autoComplete:"off",onChange:e=>this.setState({options_auth_pass:e.target.value},()=>this.onChange()),label:this.state.type==="redis"?this.props.t("Redis password"):this.props.t("Connection password")})))),u.createElement(c.ZP,{item:!0,className:this.props.classes.gridSettings},u.createElement(c.ZP,{container:!0,direction:"column"},this.state.type==="file"||this.state.type==="jsonl"?u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.connectTimeout,helperText:this.props.t("ms"),type:"number",min:200,onChange:e=>this.setState({connectTimeout:e.target.value},()=>this.onChange()),label:this.props.t("Connect timeout")})):null,this.state.type==="file"?u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.writeFileInterval,helperText:this.props.t("How often the data from RAM will be saved on disk in ms"),type:"number",min:200,onChange:e=>this.setState({writeFileInterval:e.target.value},()=>this.onChange()),label:this.props.t("Store file interval")})):null,this.state.type==="redis"?u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.options_retry_max_delay,type:"number",helperText:this.props.t("Maximum delay between connection attempts"),onChange:e=>this.setState({options_retry_max_delay:e.target.value},()=>this.onChange()),label:this.props.t("Retry maximum delay")})):null,this.state.type==="redis"?u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.options_retry_max_count,type:"number",helperText:this.props.t("Maximum number of connection retries"),onChange:e=>this.setState({options_retry_max_count:e.target.value},()=>this.onChange()),label:this.props.t("Retry maximum count")})):null,this.state.type==="redis"?u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.options_db,type:"number",helperText:this.props.t("Used for sentinels"),onChange:e=>this.setState({options_db:e.target.value},()=>this.onChange()),label:this.props.t("DB number")})):null,this.state.type==="redis"?u.createElement(c.ZP,{item:!0},u.createElement(te.Z,{className:this.props.classes.controlItem,variant:"standard"},u.createElement(ve.Z,null,this.props.t("Family number")),u.createElement(be.Z,{variant:"standard",value:this.state.options_family,onChange:e=>this.setState({options_family:e.target.value},()=>this.onChange())},u.createElement(N.Z,{value:0},"auto"),u.createElement(N.Z,{value:4},"IPv4"),u.createElement(N.Z,{value:6},"IPv6")),u.createElement(Fe.Z,null,this.props.t("Used for sentinels")))):null,this.state.type==="jsonl"?u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.jsonlOptions_autoCompress_sizeFactor,type:"number",inputProps:{min:2},helperText:this.props.t("The JSONL DB is append-only and will contain unnecessary entries after a while."),onChange:e=>this.setState({jsonlOptions_autoCompress_sizeFactor:e.target.value},()=>this.onChange()),label:this.props.t("Auto-compress size factor")})):null,this.state.type==="jsonl"?u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.jsonlOptions_autoCompress_sizeFactorMinimumSize,type:"number",inputProps:{min:0},helperText:this.props.t("It will be compressed when the uncompressed size is >= size * sizeFactor AND >= sizeFactorMinimumSize"),onChange:e=>this.setState({jsonlOptions_autoCompress_sizeFactorMinimumSize:e.target.value},()=>this.onChange()),label:this.props.t("Auto-compress size factor minimum size")})):null,this.state.type==="jsonl"?u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.jsonlOptions_throttleFS_intervalMs,type:"number",inputProps:{min:0},helperText:this.props.t("Write to the database file no more than every X milliseconds"),onChange:e=>this.setState({jsonlOptions_throttleFS_intervalMs:e.target.value},()=>this.onChange()),label:this.props.t("Minimal write interval")})):null,this.state.type==="jsonl"?u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.jsonlOptions_throttleFS_maxBufferedCommands,type:"number",inputProps:{min:0},helperText:this.props.t("Force writing after this many changes have been buffered. This reduces memory consumption and data loss in case of a crash"),onChange:e=>this.setState({jsonlOptions_throttleFS_maxBufferedCommands:e.target.value},()=>this.onChange()),label:this.props.t("Maximum changes before write")})):null,this.state.type==="file"||this.state.type==="jsonl"?u.createElement(c.ZP,{item:!0},u.createElement(te.Z,{component:"fieldset",className:this.props.classes.controlItem,variant:"standard"},u.createElement(Wt.Z,null,u.createElement($.Z,{control:u.createElement(ie.Z,{checked:this.state.backup_disabled,onChange:e=>this.setState({backup_disabled:e.target.checked},()=>this.onChange())}),label:this.props.t("No on-the-fly backup")})),u.createElement(Fe.Z,null,this.props.t("By every write the backup of object.json will be created.")))):null,(this.state.type==="file"||this.state.type==="jsonl")&&!this.state.backup_disabled?u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.backup_files,type:"number",helperText:this.props.t("Minimal number of backup files, after the deletion will be executed according to the backup time settings"),onChange:e=>this.setState({backup_files:e.target.value},()=>this.onChange()),label:this.props.t("Number of files")})):null,(this.state.type==="file"||this.state.type==="jsonl")&&!this.state.backup_disabled?u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.backup_hours,type:"number",helperText:this.props.t("All backups older than these hours will be deleted, but only if the number of files is greater than of the files number"),onChange:e=>this.setState({backup_hours:e.target.value},()=>this.onChange()),label:this.props.t("Backup hours")})):null,(this.state.type==="file"||this.state.type==="jsonl")&&!this.state.backup_disabled?u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.backup_period,type:"number",helperText:this.props.t("By default the backup is every 2 hours. Time is in minutes. To disable backup set the value to 0"),onChange:e=>this.setState({backup_period:e.target.value},()=>this.onChange()),label:this.props.t("How often")})):null,(this.state.type==="file"||this.state.type==="jsonl")&&!this.state.backup_disabled?u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.backup_path,helperText:this.props.t("Absolute path to backup directory or empty to backup in data directory. Leave it empty for default storage place."),onChange:e=>this.setState({backup_path:e.target.value},()=>this.onChange()),label:this.props.t("Path")})):null)))}}gs.propTypes={t:d().func,onChange:d().func.isRequired,settings:d().object.isRequired,currentHost:d().string};var sa=(0,Be.default)()((0,L.withStyles)(ta)(gs)),aa=l(56892),$e=l(28475),Ve=l(12923),Ke=l(18226),Xe=l(99296),Ge=l(67552),fs=l(79802),vs=l(59954),bs=l(97562),Es=l(92866),ys="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAbCAYAAADMIInqAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAiPSURBVFhH7Zd7UFTXGcDPvXffy8IusMsbQUEgoyiKD4pBnoKgVkoRX1WpNia2QZ2MzFTS2MykmlqiMzWJqSUxJq1KG0VrE0GxqSgSNVEx4SEaAeXNLrDsLvve2+/cvQusgIHWf2jymzns+b5zLvd+3/nOd75DoGEsWJDLaWvrXsXhcH/S3a0ODArynqfRDLRptfo6qVRcRdOGww8fftbGTv+/YNAB/v4ZsSrVQJHBYAunaVb5BBwOMri58farVI9eR+iejVVPakj8x8dn6cKWlv5zev3YxmMsFiRQqYyv8fleb+XnH2CenexQ2JCqqroLRiMKYHWIzyctLi680ujo4Aa93nDfbDZ72WxIYB/FQUMsbG5+VNHf/6DRrpu8kFeu3EnRaKzhrIxEIq5ZLhdHqdUXMior31+mVJ5fFhKiiBCLqXp2CrJaETKbyTxWnNSQtbWP5w4Pe3d30cWWln9+w4oMdXV/bw8K8tgLZoNkYZpeb5zLDE5yIJ7n7EZI8jtWRl5eLl91dn4azYqDxMZu4ldWVrqxaQMgIAnWK1lhkODgDLHNRuVqNIYMiJQ5Wq0JnCocsFjM/w4PD/ikqurop+zUUYHnY8xmIs9mIxI7O7V4QSDajJc8PEQfZ2fHXyguPhPa2KiLwXNJklLZbDf+wTw4Cr3rkUg8j5dDSYYOOyslRI8Ccs6FJP6J+XZizpz1+bduPf49M8pA0zKZ8N3U1NlvyeWuTYcOFTwlLToTGZmdcu9e9xGj0RZkzxXOEARtE4nIE/v2bdmVl7e+nVUzyGTpHKGQ+BCMXgOOG5FgKQr/tf4xPNxPUFPT8QKWeDzqlsn0rzEjsSMe+fCnCdtcFsG6DfscC0fwUZvPsp9PS3rbSoSHZ/k+eKBshAzPY8cZeDwSGnELHHJ51qyg6tWrUz5/+eW1j9jhESxevDn9xo3Gs3q9lcOqxkQm456fPj1g+fXrRyGbIHTsWAm1e/f7x1tbNauYCU+BJFE/JGRX3P9OByQgH/hpE8+XIEGE2K5kGRDKX3HL+foAWV9/qk0q5f8BDGWH7JhMNqTVWiGEbTsrKx9+uHPne80KRfrNmTPXrC0uLmXWw8HBg8dcqqtbPhgynrbKZLwTQUGibIR0yWFhnoVwqpjsYxCavaalarX6JVZE+/Z9tKS1td/JeD6f6AkOdi9FyPBmYKC0xh4BCDmMnwi6m1pk7hx8PYPQoNzfdSYujQ2MJCowUHQQPuJFCD+uXTc6sAJwUlAfgHO2InQZZ0SoI9JWt7frTzATwJEyGf/V3t6Lg3kFM2/ez1Lv3HlcajbbHe3pKap9553tkTk5aVZPz7RLSqU+kRkAKIq+BnljRXd3mQrLOEKOHy/PraioP6zXWwYjbLwRgPukkEL86SKnrUCI3S87bdTZs1dFNTX1boOhLEheMotl7O3v4cHfq1JdKMB9L6/0k52duhzcFwhI4+bNSTEkSTiVzFwuhywqKr/a32+aimU4blFUlL9XWFiQ9dSpqna12sA4nsslLYsXh0WXl79XjeXhBAdnHmps7PkVK07IAc6A2YSwhDM1ZpOTAxyUlFwSFxS8PVWpHIi3Wul4CO2EgQGLjB1mgPygjYz0nvbllye7CGJRBU1Tz2M9GA4RIGTmPEl/vxEyOrPtAfzb62XvSzuh0GZ6kO1rVKrzMxjhCcLCVkY0NPTU0rT9s/87B1CwqrzXBJk7C6V5ew2jlrOZmUm62tqSr7u6yg7BKmeFhMgVvr4SOCmGIgJyhItAIEjCfZp2GIX3KI3gTjFqGzIeg/8XlrHhQ+swZYqc7Y3Ez0+uFQqdcvXEILg6QiTP8v5c/wY2nlGtWZO/A380Bq8evOQvhYW7Rpzvu3Yd4BQVlTX39hp8WRVyc+Nvg4rxMIcTV2GxEEwEgAt0kHb+bO+PDZfLRb6+fr9pbm6AjYkjwJ7lpFJBTV9f2agREBW1NqK6urUWEiHDhCKA5tynvGf+VH7y9l1GduDvv0KPUBx4wN7k8uRUdsgJcADl4pLcAAcezMMtjl6wYAOTyYODV5506Pn8BGtW1o6ZzEPjIDd3j6tYnNzjeJ7LjTfHxm6cxQ474eGRCrdQx/sX0zxe4lfs0KhgB0CjO+Kos6r8nMG7znBIqNDO2EPQ3uC2V7h8+Q6nFcjKeoW4cuXuL3U6UyirgqsxaZNIRJW47+rK+8SxPaAIIq9evf9qQsJWp6MyJeVFF6Ew7ixCMfdwEwhi6yIjV8iOHn29381NeJudBtuE5lRWfvvuxo17IlgVKir6G7VkyUtbIA9B1ToBbIgmKOkBzozkHI/9xY9ZrRPEwoUb5l+/3nwN7gODHwz3fo1C4XpDpdLcNJstkLH5cZAIfwQJkZ2BjzHBZaWyLJ4VIXSTIXTNz+E+Ab6E2uJqQIDk47t3v33o7i71s9l4+X19RmYco1AIz3R1lWbifkzMhqVffNH0mSO5YSQSnkUs5pbDTbSZz+c/DxXic8Pfj/muLTAemDdGR6974/btlgJ8yxsfliaFQpIABjSxCuyAGSYTfRNWib02Pw1zvUQijtdoLsLet+Pnl36ktVX7C/aTxsWzcABzCqxbt2TP3LlTdkC1ph6e6Z8EanlIfLxrYrEoebjxmL6+8m9cXbmLoAgC/ej/Az/v4SG4A9Vd4nDjMf7+XtvCwhR/5XDwJWskoIdj0Ou0XO7Cap4NTu7Ozv61d0tLx4aamuZZUqlrUm+vjhmXSPidXC5V7evrfnrTprTzW7fmMEfIaCQnbxHX1bWt7OnRZXh6ypLUah0SiwUDRqPxWmCg/Nz8+aGnjxz5rXNdOgyIxpj2dvULcNOLV6sHRJ6erkip7CkJDQ06tX37j+/n5xc1dnRomLnPIgImFVASB3h7L4PwGt8pMB5GLYS+T/zgAPb3e8sPDmB/Jw34voKPREf730DoP5pKhvU07RMQAAAAAElFTkSuQmCC",o=l(4819);const na=n=>({paper:{height:"100%",maxHeight:"100%",maxWidth:"100%",overflow:"hidden",padding:n.spacing(1)},gridSettings:{height:"calc(100% - "+n.mixins.toolbar.minHeight+"px)",width:"100%",overflow:"auto"},controlItem:{width:400,marginBottom:n.spacing(2),marginRight:n.spacing(1),marginLeft:n.spacing(1)},delButton:{position:"absolute",top:2,right:n.spacing(6)},addButton:{marginRight:n.spacing(1)},buttonIcon:{height:24},headingIcon:{height:24,marginRight:n.spacing(1)}});class Ss extends S.Component{constructor(e){super(e);const t=this.props.settings||{};t.transport=t.transport||{},Object.keys(t.transport).forEach(s=>{if(t.transport[s].type==="file"){let i=typeof t.transport[s].maxSize=="string"?t.transport[s].maxSize.includes("k")?.1:t.transport[s].maxSize.includes("g")?10:1:1;t.transport[s].maxSize=(parseInt(t.transport[s].maxSize,10)||0)*i,t.transport[s].level=t.transport[s].level||"",t.transport[s].maxFiles=t.transport[s].maxFiles||0}else t.transport[s].type==="syslog"?(t.transport[s].level=t.transport[s].level||"",t.transport[s].host=t.transport[s].host||"",t.transport[s].port=t.transport[s].port||0,t.transport[s].path=t.transport[s].path||"",t.transport[s].facility=t.transport[s].facility||"",t.transport[s].sysLogType=t.transport[s].sysLogType||"",t.transport[s].app_name=t.transport[s].app_name||"",t.transport[s].eol=t.transport[s].eol||""):t.transport[s].type==="http"?(t.transport[s].level=t.transport[s].level||"",t.transport[s].host=t.transport[s].host||"",t.transport[s].port=t.transport[s].port||0,t.transport[s].path=t.transport[s].path||"/",t.transport[s].auth=t.transport[s].auth||"None",t.transport[s].ssl=t.transport[s].ssl||!1):t.transport[s].type==="stream"?(t.transport[s].stream=t.transport[s].stream||"",t.transport[s].level=t.transport[s].level||"",t.transport[s].silent=t.transport[s].silent||!1,t.transport[s].eol=t.transport[s].eol||""):t.transport[s].type==="seq"&&(t.transport[s].level=t.transport[s].level||"",t.transport[s].serverUrl=t.transport[s].serverUrl||"",t.transport[s].apiKey=t.transport[s].apiKey||"",t.transport[s].eol=t.transport[s].eol||"")}),this.state={level:t.level||"info",maxDays:t.maxDays||7,noStdout:t.noStdout||!0,transport:t.transport||{},expanded:[]},this.focusRef=(0,S.createRef)()}componentDidMount(){this.focusRef.current&&this.focusRef.current.focus()}onChange(){const e={level:this.state.level,maxDays:parseInt(this.state.maxDays,10),noStdout:this.state.noStdout,transport:{}};Object.keys(this.state.transport).forEach(t=>{e.transport[t]=JSON.parse(JSON.stringify(this.state.transport[t])),this.state.transport[t].type==="file"?(e.transport[t].maxSize=parseInt(e.transport[t].maxSize,10)||null,e.transport[t].maxSize&&(e.transport[t].maxSize=e.transport[t].maxSize.toString()+"m"),e.transport[t].maxFiles=parseInt(e.transport[t].maxFiles,10)||null):this.state.transport[t].type==="syslog"?(!e.transport[t].port&&delete e.transport[t].port,!e.transport[t].path&&delete e.transport[t].path,!e.transport[t].sysLogType&&delete e.transport[t].sysLogType,!e.transport[t].app_name&&delete e.transport[t].app_name,!e.transport[t].eol&&delete e.transport[t].eol):this.state.transport[t].type==="http"?(e.transport[t].host=e.transport[t].host||"",e.transport[t].port=parseInt(e.transport[t].port,10)||80,e.transport[t].path=e.transport[t].path||"/",e.transport[t].auth=e.transport[t].auth||"",e.transport[t].ssl=e.transport[t].ssl||!1):this.state.transport[t].type==="stream"&&(e.transport[t].stream=e.transport[t].stream||"",e.transport[t].level=e.transport[t].level||"info",e.transport[t].silent=e.transport[t].silent||!1,e.transport[t].eol=e.transport[t].eol||"")}),this.props.onChange(e)}onDelete(e){const t=JSON.parse(JSON.stringify(this.state.transport));delete t[e],this.setState({transport:t},()=>this.onChange())}renderEnabled(e){return o.createElement(c.ZP,{item:!0},o.createElement($.Z,{className:this.props.classes.controlItem,control:o.createElement(ie.Z,{checked:this.state.transport[e].enabled,onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].enabled=t.target.checked,this.setState({transport:s},()=>this.onChange())}}),label:this.props.t("Enabled")}))}renderLogLevel(e){return this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(te.Z,{className:this.props.classes.controlItem,variant:"standard"},o.createElement(ve.Z,null,this.props.t("Level")),o.createElement(be.Z,{variant:"standard",value:this.state.transport[e].level||"_",renderValue:()=>this.state.transport[e].level||this.props.t("default"),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].level=t.target.value==="_"?"":t.target.value,this.setState({transport:s},()=>this.onChange())}},o.createElement(N.Z,{value:"_"},this.props.t("default")),o.createElement(N.Z,{value:"silly"},"silly"),o.createElement(N.Z,{value:"debug"},"debug"),o.createElement(N.Z,{value:"info"},"info"),o.createElement(N.Z,{value:"warn"},"warn"),o.createElement(N.Z,{value:"error"},"error")),o.createElement(Fe.Z,null,this.props.t("Level of messages that this transport should log (default: level set on parent logger)")))):null}renderSyslog(e){return o.createElement($e.Z,{key:e,expanded:this.state.expanded.includes(e),onChange:()=>{const t=[...this.state.expanded],s=t.indexOf(e);s===-1?t.push(e):t.splice(s,1),this.setState({expanded:t})}},o.createElement(Ke.Z,{expandIcon:o.createElement(Pe.default,null),style:{position:"relative",background:"rgba(128, 128, 128, 0.3)"}},o.createElement(bs.Z,{className:this.props.classes.headingIcon}),o.createElement(Xe.Z,{className:this.props.classes.heading},e),o.createElement(Ge.Z,{size:"small",className:this.props.classes.delButton,onClick:()=>this.onDelete(e)},o.createElement(oe.default,null))),o.createElement(Ve.Z,null,o.createElement(c.ZP,{container:!0,direction:"column"},this.renderEnabled(e),this.renderLogLevel(e),this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].host,helperText:this.props.t("The host running syslogd, defaults to localhost"),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].host=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("File name")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].port,type:"number",helperText:this.props.t("The port on the host that syslog is running on, defaults to syslogd's default port(514/UDP)."),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].port=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("Port")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(te.Z,{className:this.props.classes.controlItem,variant:"standard"},o.createElement(ve.Z,null,this.props.t("Protocol")),o.createElement(be.Z,{variant:"standard",value:this.state.transport[e].protocol,onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].protocol=t.target.value,this.setState({transport:s},()=>this.onChange())}},o.createElement(N.Z,{value:"udp4"},"udp4"),o.createElement(N.Z,{value:"tcp4"},"tcp4"),o.createElement(N.Z,{value:"unix"},"unix"),o.createElement(N.Z,{value:"unix-connect"},"unix-connect")))):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].path,helperText:this.props.t("The path to the syslog dgram socket (i.e. /dev/log or /var/run/syslog for OS X)."),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].path=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("Path")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].facility,helperText:this.props.t("Syslog facility to use (Default: local0)."),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].facility=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("Facility")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].localhost,helperText:this.props.t("Host to indicate that log messages are coming from (Default: localhost)."),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].localhost=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("Log name")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].sysLogType,helperText:this.props.t("The type of the syslog protocol to use (Default: BSD)."),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].sysLogType=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("SysLog Type")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].app_name,helperText:this.props.t("The name of the application (Default: process.title)."),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].app_name=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("Application name")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].eol,helperText:this.props.t("The end of line character to be added to the end of the message (Default: Message without modifications)."),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].eol=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("End of line char")})):null)))}renderFile(e){return o.createElement($e.Z,{key:e,expanded:this.state.expanded.includes(e),onChange:()=>{const t=[...this.state.expanded],s=t.indexOf(e);s===-1?t.push(e):t.splice(s,1),this.setState({expanded:t})}},o.createElement(Ke.Z,{style:{background:"rgba(128, 128, 128, 0.3)"},expandIcon:o.createElement(Pe.default,null)},o.createElement(vs.Z,{className:this.props.classes.headingIcon}),o.createElement(Xe.Z,{className:this.props.classes.heading},e),o.createElement(Ge.Z,{size:"small",className:this.props.classes.delButton,onClick:()=>this.onDelete(e)},o.createElement(oe.default,null))),o.createElement(Ve.Z,null,o.createElement(c.ZP,{container:!0,direction:"column"},this.renderEnabled(e),this.renderLogLevel(e),this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].filename,onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].filename=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("File name")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].fileext,onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].fileext=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("File extension")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].maxSize,type:"number",helperText:this.props.t("MB"),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].maxSize=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("Maximal size of one file")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].maxFiles,type:"number",onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].maxFiles=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("Maximal number of files")})):null)))}renderHttp(e){return o.createElement($e.Z,{key:e,expanded:this.state.expanded.includes(e),onChange:()=>{const t=[...this.state.expanded],s=t.indexOf(e);s===-1?t.push(e):t.splice(s,1),this.setState({expanded:t})}},o.createElement(Ke.Z,{expandIcon:o.createElement(Pe.default,null),style:{position:"relative",background:"rgba(128, 128, 128, 0.3)"}},o.createElement(fs.default,{className:this.props.classes.headingIcon}),o.createElement(Xe.Z,{className:this.props.classes.heading},e),o.createElement(Ge.Z,{size:"small",className:this.props.classes.delButton,onClick:()=>this.onDelete(e)},o.createElement(oe.default,null))),o.createElement(Ve.Z,null,o.createElement(c.ZP,{container:!0,direction:"column"},this.renderEnabled(e),this.renderLogLevel(e),this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].host,helperText:this.props.t("Remote host of the HTTP logging endpoint"),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].host=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("Host")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].port,type:"number",helperText:this.props.t("Remote port of the HTTP logging endpoint"),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].port=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("Port")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].path,helperText:this.props.t("Remote URI of the HTTP logging endpoint"),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].path=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("Path")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].auth,helperText:this.props.t("An object representing the username and password for HTTP Basic Auth"),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].auth=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("Auth")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement($.Z,{className:this.props.classes.controlItem,control:o.createElement(ie.Z,{checked:this.state.transport[e].ssl,onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].ssl=t.target.checked,this.setState({transport:s},()=>this.onChange())}}),label:this.props.t("SSL")})):null)))}renderStream(e){return o.createElement($e.Z,{key:e,expanded:this.state.expanded.includes(e),onChange:()=>{const t=[...this.state.expanded],s=t.indexOf(e);s===-1?t.push(e):t.splice(s,1),this.setState({expanded:t})}},o.createElement(Ke.Z,{expandIcon:o.createElement(Pe.default,null),style:{position:"relative",background:"rgba(128, 128, 128, 0.3)"}},o.createElement(Es.default,{className:this.props.classes.headingIcon}),o.createElement(Xe.Z,{className:this.props.classes.heading},e),o.createElement(Ge.Z,{size:"small",className:this.props.classes.delButton,onClick:()=>this.onDelete(e)},o.createElement(oe.default,null))),o.createElement(Ve.Z,null,o.createElement(c.ZP,{container:!0,direction:"column"},this.renderEnabled(e),this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].stream,helperText:this.props.t("any Node.js stream. If an objectMode stream is provided then the entire info object will be written. Otherwise info[MESSAGE] will be written"),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].stream=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("File name")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement($.Z,{className:this.props.classes.controlItem,control:o.createElement(ie.Z,{checked:this.state.transport[e].silent,onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].silent=t.target.checked,this.setState({transport:s},()=>this.onChange())}}),label:this.props.t("Silent")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].eol,helperText:this.props.t("Line-ending character to use. (default: os.EOL).)"),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].eol=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("EOL")})):null)))}renderSEQ(e){return o.createElement($e.Z,{key:e,expanded:this.state.expanded.includes(e),onChange:()=>{const t=[...this.state.expanded],s=t.indexOf(e);s===-1?t.push(e):t.splice(s,1),this.setState({expanded:t})}},o.createElement(Ke.Z,{expandIcon:o.createElement(Pe.default,null),style:{position:"relative",background:"rgba(128, 128, 128, 0.3)"}},o.createElement("img",{className:this.props.classes.headingIcon,src:ys,alt:"seq"}),o.createElement(Xe.Z,{className:this.props.classes.heading},e),o.createElement(Ge.Z,{size:"small",className:this.props.classes.delButton,onClick:()=>this.onDelete(e)},o.createElement(oe.default,null))),o.createElement(Ve.Z,null,o.createElement(c.ZP,{container:!0,direction:"column"},this.renderEnabled(e),this.renderLogLevel(e),this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].serverUrl,helperText:this.props.t("The http(s) URL including port of the seq server. If you use HTTPS a real certificate is needed; self signed certs are ot accepted."),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].serverUrl=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("Server URL")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].apiKey,helperText:this.props.t("The apiKey of the seq system"),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].apiKey=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("API key")})):null)))}add(e){if(e==="file"){let t=1;for(;Object.keys(this.state.transport).find(r=>r===e+t);)t++;const s=e+t,i=JSON.parse(JSON.stringify(this.state.transport));i[s]={type:e,enabled:!0,filename:"log/iobroker",fileext:".log",maxSize:0,maxFiles:0},this.setState({transport:i},()=>this.onChange())}else if(e==="syslog"){let t=1;for(;Object.keys(this.state.transport).find(r=>r===e+t);)t++;const s=e+t,i=JSON.parse(JSON.stringify(this.state.transport));i[s]={type:e,enabled:!0,host:"127.0.0.1",port:0,protocol:"udp4",path:"",facility:"",localhost:"iobroker",sysLogType:"",app_name:"",eol:""},this.setState({transport:i},()=>this.onChange())}else if(e==="http"){let t=1;for(;Object.keys(this.state.transport).find(r=>r===e+t);)t++;const s=e+t,i=JSON.parse(JSON.stringify(this.state.transport));i[s]={type:e,enabled:!0,host:"127.0.0.1",port:80,path:"/",auth:"None",ssl:!1},this.setState({transport:i},()=>this.onChange())}else if(e==="stream"){let t=1;for(;Object.keys(this.state.transport).find(r=>r===e+t);)t++;const s=e+t,i=JSON.parse(JSON.stringify(this.state.transport));i[s]={type:e,enabled:!0,stream:"/dev/null",level:"info",silent:!1,eol:""},this.setState({transport:i},()=>this.onChange())}else if(e==="seq"){let t=1;for(;Object.keys(this.state.transport).find(r=>r===e+t);)t++;const s=e+t,i=JSON.parse(JSON.stringify(this.state.transport));i[s]={type:e,enabled:!0,level:"info",serverUrl:"http://IP:PORT",apiKey:""},this.setState({transport:i},()=>this.onChange())}}render(){return o.createElement(De.Z,{className:this.props.classes.paper},o.createElement(c.ZP,{item:!0,className:this.props.classes.gridSettings},o.createElement(c.ZP,{container:!0,direction:"column"},o.createElement(c.ZP,{item:!0},o.createElement(te.Z,{className:this.props.classes.controlItem,variant:"standard"},o.createElement(ve.Z,null,this.props.t("Level")),o.createElement(be.Z,{variant:"standard",value:this.state.level,onChange:e=>this.setState({level:e.target.value},()=>this.onChange())},o.createElement(N.Z,{value:"silly"},"silly"),o.createElement(N.Z,{value:"debug"},"debug"),o.createElement(N.Z,{value:"info"},"info"),o.createElement(N.Z,{value:"warn"},"warn"),o.createElement(N.Z,{value:"error"},"error")))),o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.maxDays,helperText:this.props.t("Every day one file"),type:"number",onChange:e=>this.setState({maxDays:e.target.value},()=>this.onChange()),label:this.props.t("Maximum number of days")})),o.createElement(c.ZP,{item:!0},o.createElement($.Z,{className:this.props.classes.controlItem,control:o.createElement(ie.Z,{checked:this.state.noStdout,onChange:e=>this.setState({noStdout:e.target.checked},()=>this.onChange())}),label:this.props.t("No stdout outputs")})),Object.keys(this.state.transport).map(e=>{switch(this.state.transport[e].type){case"syslog":return this.renderSyslog(e);case"file":return this.renderFile(e);case"http":return this.renderHttp(e);case"stream":return this.renderStream(e);case"seq":return this.renderSEQ(e);default:return null}}))),o.createElement(aa.Z,null,o.createElement(W.Z,{color:"grey",className:this.props.classes.addButton,variant:"contained",onClick:()=>this.add("file"),startIcon:o.createElement(Oe.default,null)},o.createElement(vs.Z,{className:this.props.classes.buttonIcon}),this.props.t("File log")),o.createElement(W.Z,{color:"grey",className:this.props.classes.addButton,variant:"contained",onClick:()=>this.add("syslog"),startIcon:o.createElement(Oe.default,null)},o.createElement(bs.Z,{className:this.props.classes.buttonIcon}),this.props.t("Syslog")),o.createElement(W.Z,{color:"grey",className:this.props.classes.addButton,variant:"contained",onClick:()=>this.add("http"),startIcon:o.createElement(Oe.default,null)},o.createElement(fs.default,{className:this.props.classes.buttonIcon}),this.props.t("HTTP log")),o.createElement(W.Z,{color:"grey",className:this.props.classes.addButton,variant:"contained",onClick:()=>this.add("stream"),startIcon:o.createElement(Oe.default,null)},o.createElement(Es.default,{className:this.props.classes.buttonIcon}),this.props.t("Stream log")),o.createElement(W.Z,{color:"grey",className:this.props.classes.addButton,variant:"contained",onClick:()=>this.add("seq"),startIcon:o.createElement(Oe.default,null)},o.createElement("img",{src:ys,className:this.props.classes.buttonIcon,alt:"seq"}),this.props.t("SEQ log"))))}}Ss.propTypes={t:d().func,onChange:d().func.isRequired,settings:d().object.isRequired,currentHost:d().string};var ra=(0,Be.default)()((0,L.withStyles)(na)(Ss)),oa=l(83732),ia=l.n(oa),Ea=l(41698),ya=l(59815),Sa=l(25817),Ca=l(27233),xa=l(3819),wt=l(4819);const la=n=>({paper:{height:"100%",maxHeight:"100%",maxWidth:"100%",overflow:"auto",padding:n.spacing(1)},title:{width:"100%",height:32},divWithoutTitle:{width:"100%",height:"calc(100% - "+32+"px)",border:"2px solid #00000000"},error:{border:"2px solid #FF0000"}});class Cs extends S.Component{constructor(e){super(e),this.state={settings:JSON.stringify(this.props.settings||{},null,2),error:!1}}static getDerivedStateFromProps(e,t){return null}editorDidMount(e,t){e.focus()}onChange(e){const t={settings:e};try{const s=JSON.parse(e);this.state.error&&(t.error=!1),this.setState(t,()=>this.props.onChange(s))}catch(s){t.error=!0,this.setState(t)}}render(){return wt.createElement(De.Z,{className:this.props.classes.paper},wt.createElement("div",{className:this.props.classes.title},this.props.t("For future use")),wt.createElement("div",{className:(0,us.default)(this.props.classes.divWithoutTitle,this.state.error&&this.props.classes.error)},wt.createElement(ia(),{mode:"json",width:"100%",height:"100%",theme:this.props.themeName==="dark"?"clouds_midnight":"chrome",value:this.state.settings,onChange:e=>this.onChange(e),name:"UNIQUE_ID_OF_DIV1",fontSize:14,setOptions:{enableBasicAutocompletion:!0,enableLiveAutocompletion:!0,enableSnippets:!0},editorProps:{$blockScrolling:!0}})))}}Cs.propTypes={t:d().func,onChange:d().func.isRequired,settings:d().object.isRequired,themeName:d().string};var ca=(0,Be.default)()((0,L.withStyles)(la)(Cs));const pa=n=>({content:{height:500,overflow:"hidden"},tabPanel:{width:"100%",height:`calc(100% - ${n.mixins.toolbar.minHeight}px)`,overflow:"auto"},selected:{color:n.palette.mode==="dark"?"#FFF !important":"#222 !important"}});class xs extends S.Component{constructor(e){super(e),this.state={currentTab:0,hasChanges:[],currentHost:this.props.currentHost,hosts:this.props.hosts,loading:!0,confirmExit:!1,showRestart:!1,system:null,multihostService:null,objects:null,states:null,log:null,plugins:null,saving:!1}}componentDidMount(){this.getSettings(this.state.currentHost)}renderConfirmDialog(){return this.state.confirmExit?a().createElement(Ut.default,{text:this.props.t("Discard unsaved changes?"),onClose:e=>this.setState({confirmExit:!1},()=>e&&this.props.onClose())}):null}renderRestartDialog(){return this.state.showRestart?a().createElement(Ut.default,{title:this.props.t("Please confirm"),text:a().createElement(a().Fragment,null,a().createElement("div",null,this.props.t("Restart works only if controller started as system service.")),a().createElement("div",null,this.props.t("Would you like to restart the controller for your changes to take effect?"))),ok:this.props.t("Restart"),cancel:this.props.t("No restart"),onClose:e=>this.setState({showRestart:!1},()=>{e&&this.props.socket.restartController(this.props.currentHost).then(()=>setTimeout(()=>window.location.reload(!1),500)).catch(t=>window.alert(`Cannot restart: ${t}`)),this.props.onClose()})}):null}getSettings(e){this.props.socket.readBaseSettings(e||this.state.currentHost).then(t=>{t&&t.config&&(delete t.config.dataDirComment,this.originalSettings=JSON.parse(JSON.stringify(t.config)),t.config.loading=!1,this.setState(t.config))})}onSave(e){const t={system:this.state.system,multihostService:this.state.multihostService,objects:this.state.objects,states:this.state.states,log:this.state.log,plugins:this.state.plugins},s=Object.assign({},this.originalSettings,t);this.setState({saving:!0},()=>{this.props.socket.writeBaseSettings(e||this.state.currentHost,s).then(()=>{this.originalSettings=JSON.parse(JSON.stringify(t)),this.setState({hasChanges:[],showRestart:!0,saving:!1})}).catch(i=>{window.alert("Cannot save settings: "+i),this.setState({saving:!1})})})}updateSettings(e,t){const s=[...this.state.hasChanges],i=JSON.stringify(this.originalSettings[e])!==JSON.stringify(t),r=s.indexOf(e);i&&r===-1?s.push(e):!i&&r!==-1&&s.splice(r,1),this.setState({[e]:t,hasChanges:s})}renderSystem(){const e="system";return a().createElement(Qs,{settings:this.state[e],t:this.props.t,currentHost:this.props.currentHost,onChange:t=>this.updateSettings(e,t)})}renderMultihost(){const e="multihostService";return a().createElement(qs,{settings:this.state[e],t:this.props.t,socket:this.props.socket,currentHost:this.props.currentHost,onChange:t=>this.updateSettings(e,t)})}renderObjects(){const e="objects";return a().createElement(ea,{settings:this.state[e],t:this.props.t,socket:this.props.socket,currentHost:this.props.currentHost,onChange:t=>this.updateSettings(e,t)})}renderStates(){const e="states";return a().createElement(sa,{settings:this.state[e],t:this.props.t,socket:this.props.socket,currentHost:this.props.currentHost,onChange:t=>this.updateSettings(e,t)})}renderLog(){const e="log";return a().createElement(ra,{settings:this.state[e],t:this.props.t,socket:this.props.socket,currentHost:this.props.currentHost,onChange:t=>this.updateSettings(e,t)})}renderPlugins(){const e="plugins";return a().createElement(ca,{settings:this.state[e],t:this.props.t,themeName:this.props.themeName,onChange:t=>this.updateSettings(e,t)})}render(){return a().createElement(yt.Z,{className:this.props.classes.dialog,open:!0,onClose:()=>!1,fullWidth:!0,maxWidth:"xl","aria-labelledby":"base-settings-dialog-title"},a().createElement(Ht.Z,{id:"base-settings-dialog-title"},this.props.t("Host Base Settings"),": ",this.props.currentHostName||this.props.currentHost),a().createElement(St.Z,{className:this.props.classes.content},a().createElement(Vs.Z,{position:"static"},a().createElement(Ks.Z,{value:this.state.currentTab,onChange:(e,t)=>this.setState({currentTab:t}),"aria-label":"system tabs",indicatorColor:"secondary"},a().createElement(Ae.Z,{label:this.props.t("System"),id:"system-tab","aria-controls":"simple-tabpanel-0",classes:{selected:this.props.classes.selected}}),a().createElement(Ae.Z,{label:this.props.t("Multi-host"),id:"multihost-tab",classes:{selected:this.props.classes.selected},"aria-controls":"simple-tabpanel-1"}),a().createElement(Ae.Z,{label:this.props.t("Objects"),id:"objects-tab","aria-controls":"simple-tabpanel-3",classes:{selected:this.props.classes.selected}}),a().createElement(Ae.Z,{label:this.props.t("States"),id:"states-tab","aria-controls":"simple-tabpanel-4",classes:{selected:this.props.classes.selected}}),a().createElement(Ae.Z,{label:this.props.t("Log"),id:"log-tab","aria-controls":"simple-tabpanel-5",classes:{selected:this.props.classes.selected}}),a().createElement(Ae.Z,{label:this.props.t("Plugins"),id:"plugins-tab","aria-controls":"simple-tabpanel-6",classes:{selected:this.props.classes.selected}}))),this.state.loading?a().createElement(Xs.Z,null):null,!this.state.loading&&this.state.currentTab===0?a().createElement("div",{className:this.props.classes.tabPanel},this.renderSystem()):null,!this.state.loading&&this.state.currentTab===1?a().createElement("div",{className:this.props.classes.tabPanel},this.renderMultihost()):null,!this.state.loading&&this.state.currentTab===2?a().createElement("div",{className:this.props.classes.tabPanel},this.renderObjects()):null,!this.state.loading&&this.state.currentTab===3?a().createElement("div",{className:this.props.classes.tabPanel},this.renderStates()):null,!this.state.loading&&this.state.currentTab===4?a().createElement("div",{className:this.props.classes.tabPanel},this.renderLog()):null,!this.state.loading&&this.state.currentTab===5?a().createElement("div",{className:this.props.classes.tabPanel},this.renderPlugins()):null,this.renderConfirmDialog(),this.renderRestartDialog()),a().createElement(Ct.Z,null,a().createElement(W.Z,{variant:"contained",disabled:!this.state.hasChanges.length||this.state.saving,onClick:()=>this.onSave(),color:"primary",startIcon:a().createElement(ss.default,null)},this.props.t("Save & Close")),a().createElement(W.Z,{variant:"contained",color:"grey",disabled:this.state.saving,onClick:()=>this.state.hasChanges.length?this.setState({confirmExit:!0}):this.props.onClose(),startIcon:a().createElement(Ce.default,null)},this.state.hasChanges.length?this.props.t("Cancel"):this.props.t("Close"))))}}xs.propTypes={t:d().func,currentHost:d().string,currentHostName:d().string,hosts:d().array,lang:d().string,socket:d().object,themeName:d().string,onClose:d().func.isRequired};var ha=(0,Be.default)()((0,L.withStyles)(pa)(xs)),ws=l(13046),da=l(89786);class Ns extends S.Component{constructor(e){super(e),this.state={response:null,error:null,starting:!0},this.textareaRef=a().createRef(),this.link=`${window.location.protocol}//${window.location.host}${window.location.pathname}`}componentDidMount(){this.props.socket.getRawSocket().emit("sendToHost",this.props.hostId,"upgradeController",{version:this.props.version,adminInstance:parseInt(this.props.adminInstance.split(".").pop(),10)},e=>{e.result?(this.setState({starting:!1}),this.intervall=setInterval(()=>this.checkStatus(),1e4)):(this.setState({error:p.I18n.t("Not updatable"),starting:!1}),this.props.onUpdating(!1))})}componentWillUnmount(){this.intervall&&clearInterval(this.intervall),this.intervall=null}checkStatus(){fetch(this.link).then(e=>e.json()).then(e=>this.setState({response:e},()=>{e&&!e.running&&(this.props.onUpdating(!1),this.intervall&&clearInterval(this.intervall),this.intervall=null),this.textareaRef.current&&setTimeout(()=>{this.textareaRef.current.scrollTop=this.textareaRef.current.scrollHeight},100)})).catch(e=>{this.intervall&&clearInterval(this.intervall),this.intervall=null,this.setState({error:e.toString()},()=>this.props.onUpdating(!1))})}render(){var e,t;return a().createElement(yt.Z,{onClose:(s,i)=>{i!=="escapeKeyDown"&&i!=="backdropClick"&&this.props.onClose()},open:!0,maxWidth:"lg",fullWidth:!0},a().createElement(Ht.Z,null,p.I18n.t("Updating JS-Controller...")),a().createElement(St.Z,{style:{height:400,padding:"0 20px",overflow:"hidden"}},(!this.state.response||this.state.response.running)&&!this.state.error?a().createElement(h.LinearProgress,null):null,this.state.response||this.state.error?a().createElement("textarea",{ref:this.textareaRef,style:{width:"100%",height:"100%",resize:"none",fontFamily:"Consolas,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New, monospace",border:!this.state.error&&!((e=this.state.response)!=null&&e.running)&&((t=this.state.response)!=null&&t.success)?"1px solid green":this.state.error||this.state.response&&this.state.response.running&&!this.state.response.success?"1px solid red":void 0},value:this.state.error?this.state.error:this.state.response.stderr?this.state.response.stderr.join(`
327
+ `)},className:r.copyButton},a().createElement(Z.default,null)),a().createElement("div",{className:r.standardTextSmall},"cd ",(C||"C:\\iobroker").replace(/\//g,"\\")," ",C?null:p.I18n.t("(or where ioBroker was installed)")),a().createElement("div",{className:r.standardTextSmall},"iob backup"),a().createElement("div",{className:r.standardTextSmall},"iob stop ",p.I18n.t("to stop the ioBroker service")),a().createElement("div",{className:r.standardTextSmall},"iob status ",p.I18n.t("to check if ioBroker has finished")),a().createElement("div",{className:r.standardTextSmall},"iob update"),a().createElement("div",{className:r.standardTextSmall},"iob upgrade self")),a().createElement("div",{className:p.Utils.clsx(r.standardTextSmall2)},p.I18n.t("Start ioBroker service or reboot computer, then ioBroker should restart and you can be sure that all the old processes were finished."))),a().createElement(h.Accordion,{style:{paddingTop:14}},a().createElement(h.AccordionSummary,{className:r.accordionSummary,expandIcon:a().createElement(je.default,null)},a().createElement("h2",{className:r.h22},p.I18n.t("Emergency Linux / macOS / Windows"))),a().createElement(h.AccordionDetails,{className:r.accordionDetails},a().createElement("div",{className:r.standardText},p.I18n.t("(manual reinstallation, if somehow nothing works after the update)")),a().createElement("div",{className:r.standardText},p.I18n.t('On Windows first please call in the start menu under "ioBroker" the command line of the relevant ioBroker instance. The correct directory is then set automatically. On Linux or macOS please go to the ioBroker directory.')),a().createElement("div",{className:r.standardText},p.I18n.t("Run npm install iobroker.js-controller there. A specific version can be installed using npm install iobroker.js-controller@x.y.z (replace x.y.z with the desired version).")),a().createElement("div",{className:r.standardText},p.I18n.t("If there are problems with access rights when running on Linux the command has to be changed slightly:")),a().createElement("div",{className:r.standardTextSmall2},p.I18n.t("For systems created with the new Linux installer:")),a().createElement("pre",{className:r.pre},a().createElement(h.IconButton,{size:"small",onClick:()=>{window.alert(p.I18n.t("Copied")),se(`cd ${H==="win32"?(C||"C:\\iobroker").replace(/\//g,"\\"):C||"/opt/iobroker"}
328
+ sudo -u iobroker -H npm install iobroker.js-controller`)},className:r.copyButton},a().createElement(Z.default,null)),a().createElement("div",{className:r.standardTextSmall},"cd ",H==="win32"?(C||"C:\\iobroker").replace(/\//g,"\\"):C||"/opt/iobroker"),a().createElement("div",{className:r.standardTextSmall},"sudo -u iobroker -H npm install iobroker.js-controller")),a().createElement("div",{className:r.standardTextSmall2},p.I18n.t("For systems installed manually under Linux, prefix sudo or run as root.")),a().createElement("div",{className:r.standardText},p.I18n.t("This way is only necessary in very few cases and please consult the forum beforehand!")))));return a().createElement(yt.Z,{onClose:()=>i(),open:!0,classes:{paper:r.paper}},a().createElement(h.DialogTitle,null,p.I18n.t("js-controller upgrade instructions")),a().createElement(St.Z,{className:E?null:r.overflowHidden,dividers:!0},E?we():ye()),a().createElement(Ct.Z,null,a().createElement(W.Z,{variant:"contained",onClick:()=>{window.open("https://github.com/ioBroker/ioBroker.js-controller/blob/master/CHANGELOG.md","_blank"),i()},color:"grey",startIcon:a().createElement(Us.default,null)},p.I18n.t("Show whole changelog")),a().createElement(W.Z,{variant:"contained",onClick:()=>i(),color:"primary",startIcon:a().createElement(Ce.default,null)},p.I18n.t("Ok"))))};cs.propTypes={socket:d().object,hostId:d().string,theme:d().object,version:d().string,onClose:d().func};var $s=cs,Ae=l(84998),Vs=l(36609),Be=l(49630),Ks=l(13820),Xs=l(66966),Ut=l(41728),De=l(70703),c=l(75836),$=l(2598),ie=l(36315),Fe=l(30464),k=l(4819);const Gs=n=>({paper:{height:"100%",maxHeight:"100%",maxWidth:"100%",overflow:"auto",padding:n.spacing(1)},controlItem:{width:`calc(100% - ${n.spacing(2)})`,marginBottom:n.spacing(2),marginRight:n.spacing(1),marginLeft:n.spacing(1)},RAM:{width:400,marginRight:n.spacing(1)}});class ps extends S.Component{constructor(e){super(e);const t=this.props.settings||{};this.state={memoryLimitMB:t.memoryLimitMB||0,hostname:t.hostname||"",statisticsInterval:t.statisticsInterval||15e3,checkDiskInterval:t.checkDiskInterval||3e5,instanceStartInterval:t.instanceStartInterval||2e3,compact:t.compact||!1,allowShellCommands:t.allowShellCommands||!1,memLimitWarn:t.memLimitWarn||100,memLimitError:t.memLimitError||50},this.focusRef=(0,S.createRef)()}componentDidMount(){this.focusRef.current&&this.focusRef.current.focus()}onChange(){this.props.onChange({memoryLimitMB:this.state.memoryLimitMB,hostname:this.state.hostname,statisticsInterval:this.state.statisticsInterval,checkDiskInterval:this.state.checkDiskInterval,noChmod:this.state.noChmod,instanceStartInterval:this.state.instanceStartInterval,compact:this.state.compact,allowShellCommands:this.state.allowShellCommands,memLimitWarn:this.state.memLimitWarn,memLimitError:this.state.memLimitError})}render(){return k.createElement(Fe.Z,{className:this.props.classes.paper},k.createElement(c.ZP,{item:!0,className:this.props.classes.gridSettings},k.createElement(c.ZP,{container:!0,direction:"column"},k.createElement(c.ZP,{item:!0},k.createElement(g.Z,{variant:"standard",label:this.props.t("Host name"),className:this.props.classes.controlItem,value:this.state.hostname||this.props.currentHost.replace("system.host.",""),onChange:e=>this.setState({hostname:e.target.value},()=>this.onChange()),helperText:this.props.t("You can change the host name, but be aware, that all instances must be assigned anew")})),k.createElement(c.ZP,{item:!0},k.createElement(g.Z,{variant:"standard",label:this.props.t("Check disk space interval"),className:this.props.classes.controlItem,value:this.state.checkDiskInterval,type:"number",min:1e3,onChange:e=>this.setState({checkDiskInterval:parseInt(e.target.value,10)},()=>this.onChange()),helperText:this.props.t("How oft the disk will be checked. Do not set it to low, because it can affect system performance. Value is in ms")})),k.createElement(c.ZP,{item:!0},k.createElement(g.Z,{variant:"standard",label:this.props.t("Instance statistics update interval"),className:this.props.classes.controlItem,value:this.state.statisticsInterval,type:"number",min:5e3,onChange:e=>this.setState({statisticsInterval:parseInt(e.target.value,10)},()=>this.onChange()),helperText:this.props.t("How oft the instance statistics will be updated. Used RAM, CPU and so on. Value is in ms")})),k.createElement(c.ZP,{item:!0,className:this.props.classes.controlItem},k.createElement($.Z,{control:k.createElement(ie.Z,{checked:this.state.compact,onChange:e=>this.setState({compact:e.target.checked},()=>this.onChange())}),label:this.props.t("Compact mode")}),k.createElement("div",null,this.props.t("When enabled adapter instances can run in one or few processes to save RAM usage."))),k.createElement(c.ZP,{item:!0,className:this.props.classes.controlItem},k.createElement($.Z,{control:k.createElement(ie.Z,{checked:this.state.allowShellCommands,onChange:e=>this.setState({allowShellCommands:e.target.checked},()=>this.onChange())}),label:this.props.t("Allow shell's commands")}),k.createElement("div",null,this.props.t('Allow execution of sendToHost("shell", "cli command")'))),k.createElement(c.ZP,{item:!0},k.createElement(g.Z,{variant:"standard",label:this.props.t("Limit RAM size for controller"),className:this.props.classes.controlItem,value:this.state.memoryLimitMB,type:"number",onChange:e=>this.setState({memoryLimitMB:parseInt(e.target.value,10)},()=>this.onChange()),helperText:this.props.t("MB")})),k.createElement(c.ZP,{item:!0},k.createElement(c.ZP,{container:!0,direction:"row",className:this.props.classes.controlItem},k.createElement(c.ZP,{item:!0},k.createElement(g.Z,{variant:"standard",label:this.props.t("Show warning im log if RAM less than"),className:this.props.classes.RAM,value:this.state.memLimitWarn,type:"number",onChange:e=>this.setState({memLimitWarn:parseInt(e.target.value,10)},()=>this.onChange()),helperText:this.props.t("MB")})),k.createElement(c.ZP,{item:!0},k.createElement(g.Z,{variant:"standard",label:this.props.t("Show error in log if RAM less than"),className:this.props.classes.RAM,value:this.state.memLimitError,type:"number",onChange:e=>this.setState({memLimitError:parseInt(e.target.value,10)},()=>this.onChange()),helperText:this.props.t("MB")})))))))}}ps.propTypes={t:d().func,onChange:d().func.isRequired,settings:d().object.isRequired,currentHost:d().string};var Qs=(0,De.default)()((0,L.withStyles)(Gs)(ps)),J=l(4819);const Ys=n=>({paper:{height:"100%",maxHeight:"100%",maxWidth:"100%",overflow:"auto",padding:n.spacing(1)},controlItem:{width:`calc(100% - ${n.spacing(2)})`,marginBottom:n.spacing(2),marginRight:n.spacing(1),marginLeft:n.spacing(1)},RAM:{width:400,marginRight:n.spacing(1)}});class hs extends S.Component{constructor(e){super(e);const t=this.props.settings||{};this.state={enabled:t.enabled||!1,secure:t.secure||!0,password:""},t.password&&this.props.socket.decrypt(t.password).then(s=>this.setState({password:s})),this.focusRef=(0,S.createRef)()}componentDidMount(){this.focusRef.current&&this.focusRef.current.focus()}onChange(){const e={enabled:this.state.enabled,secure:this.state.secure};this.state.password?this.props.socket.encrypt(this.state.password).then(t=>{e.password=t,this.props.onChange(e)}):this.props.onChange(e)}render(){return J.createElement(Fe.Z,{className:this.props.classes.paper},J.createElement("form",{className:this.props.classes.form,noValidate:!0,autoComplete:"off"},J.createElement(c.ZP,{item:!0,className:this.props.classes.gridSettings},J.createElement(c.ZP,{container:!0,direction:"column"},J.createElement(c.ZP,{item:!0,className:this.props.classes.controlItem},J.createElement($.Z,{control:J.createElement(ie.Z,{checked:this.state.enabled,onChange:e=>this.setState({enabled:e.target.checked},()=>this.onChange())}),label:this.props.t("Allow slave connections")}),J.createElement("div",null,this.props.t("When activated this host can be discovered by other iobroker installations in your network to become the master of a multihost system."))),J.createElement(c.ZP,{item:!0,className:this.props.classes.controlItem},J.createElement($.Z,{control:J.createElement(ie.Z,{checked:this.state.secure,onChange:e=>this.setState({secure:e.target.checked},()=>this.onChange())}),label:this.props.t("With password")}),J.createElement("div",null,this.props.t("Ask password by connection establishment"))),this.state.secure?J.createElement(c.ZP,{item:!0},J.createElement(g.Z,{variant:"standard",label:this.props.t("Multi-host password"),className:this.props.classes.controlItem,value:this.state.password,type:"password",inputProps:{autoComplete:"new-password",form:{autoComplete:"off"}},autoComplete:"off",onChange:e=>this.setState({password:e.target.value},()=>this.onChange())})):null))))}}hs.propTypes={t:d().func,onChange:d().func.isRequired,settings:d().object.isRequired,socket:d().object};var qs=(0,De.default)()((0,L.withStyles)(Ys)(hs)),ve=l(66116),be=l(67304),Wt=l(23736),N=l(41381),Me=l(98056),te=l(71386),ds=l(21233),m=l(4819);const _s=n=>({paper:{height:"100%",maxHeight:"100%",maxWidth:"100%",overflow:"auto",padding:n.spacing(1)},controlItem:{width:400,marginBottom:n.spacing(2),marginRight:n.spacing(1),marginLeft:n.spacing(1)},dangerZone:{backgroundColor:"rgba(255, 165, 0, 0.05)",border:"2px solid rgba(255, 165, 0)",marginBottom:n.spacing(1)},dangerZoneHeader:{background:"rgba(255, 165, 0)",color:"#FFF",paddingLeft:n.spacing(2),paddingTop:4,paddingBottom:4,marginTop:-1,marginLeft:-1},warning:{padding:8,fontSize:14,color:n.palette.mode==="dark"?"#ffa500":"#b17200"}}),Jt={autoCompress:{sizeFactor:2,sizeFactorMinimumSize:25e3},throttleFS:{intervalMs:6e4,maxBufferedCommands:1e3}};class ms extends S.Component{constructor(e){super(e);const t=this.props.settings||{};t.options=t.options||{auth_pass:"",retry_max_delay:2e3,retry_max_count:19,db:0,family:0},t.backup=t.backup||{disabled:!1,files:24,hours:48,period:120,path:""},t.jsonlOptions=t.jsonlOptions||Jt,t.jsonlOptions.autoCompress=t.jsonlOptions.autoCompress||Jt.autoCompress,t.jsonlOptions.throttleFS=t.jsonlOptions.throttleFS||Jt.throttleFS,this.state={type:t.type||"file",host:Array.isArray(t.host)?t.host.join(","):t.host||"127.0.0.1",port:t.port||9001,noFileCache:t.noFileCache||!1,dataDir:t.dataDir||"",connectTimeout:t.connectTimeout||2e3,writeFileInterval:t.writeFileInterval||5e3,options_auth_pass:t.options.auth_pass||t.pass||"",options_retry_max_delay:t.options.retry_max_delay||2e3,options_retry_max_count:t.options.retry_max_count||19,options_db:t.options.db||0,options_family:t.options.family||0,backup_disabled:t.backup.disabled||!1,backup_files:t.backup.files||24,backup_hours:t.backup.hours||48,backup_period:t.backup.period||120,backup_path:t.backup.path||"",jsonlOptions_autoCompress_sizeFactor:t.jsonlOptions.autoCompress.sizeFactor||2,jsonlOptions_autoCompress_sizeFactorMinimumSize:t.jsonlOptions.autoCompress.sizeFactorMinimumSize||25e3,jsonlOptions_throttleFS_intervalMs:t.jsonlOptions.throttleFS.intervalMs||6e4,jsonlOptions_throttleFS_maxBufferedCommands:t.jsonlOptions.throttleFS.maxBufferedCommands||100,textIP:Array.isArray(t.host)||(t.host||"").match(/[^.\d]/)||(t.host||"").includes(","),IPs:["0.0.0.0","127.0.0.1"],loading:!0,showWarningDialog:!1,toConfirmType:"",originalDBType:t.type||"file"},this.focusRef=(0,S.createRef)(),this.props.socket.getIpAddresses(this.props.currentHost).then(s=>{const i=[...s];!i.includes("0.0.0.0")&&i.push("0.0.0.0"),!i.includes("127.0.0.1")&&i.push("127.0.0.1");let r=this.state.host.match(/[^.\d]/)||(this.state.host||"").includes(",");!r&&!i.includes(i)&&(r=!0),this.setState({IPs:i,loading:!1,textIP:r})})}componentDidMount(){this.focusRef.current&&this.focusRef.current.focus()}onChange(){const e={type:this.state.type,host:this.state.host,port:parseInt(this.state.port,10),noFileCache:this.state.noFileCache,connectTimeout:parseInt(this.state.connectTimeout,10),writeFileInterval:parseInt(this.state.writeFileInterval,10),dataDir:this.state.dataDir,options:{auth_pass:this.state.options_auth_pass||null,retry_max_delay:parseInt(this.state.options_retry_max_delay,10),retry_max_count:parseInt(this.state.options_retry_max_count,10),db:parseInt(this.state.options_db,10),family:parseInt(this.state.options_family,10)},backup:{disabled:this.state.backup_disabled,files:parseInt(this.state.backup_files,10),hours:parseInt(this.state.backup_hours,10),period:parseInt(this.state.backup_period,10),path:this.state.backup_path},jsonlOptions:{autoCompress:{sizeFactor:parseInt(this.state.jsonlOptions_autoCompress_sizeFactor,10),sizeFactorMinimumSize:parseInt(this.state.jsonlOptions_autoCompress_sizeFactorMinimumSize,10)},throttleFS:{intervalMs:parseInt(this.state.jsonlOptions_throttleFS_intervalMs,10),maxBufferedCommands:parseInt(this.state.jsonlOptions_throttleFS_maxBufferedCommands,10)}}};e.jsonlOptions.autoCompress.sizeFactor<2&&(e.jsonlOptions.autoCompress.sizeFactor=2),e.jsonlOptions.autoCompress.sizeFactorMinimumSize<0&&(e.jsonlOptions.autoCompress.sizeFactorMinimumSize=0),e.jsonlOptions.throttleFS.intervalMs<0&&(e.jsonlOptions.throttleFS.intervalMs=0),e.jsonlOptions.throttleFS.maxBufferedCommands<0&&(e.jsonlOptions.throttleFS.maxBufferedCommands=0),this.props.onChange(e)}renderWarning(){return this.state.showWarningDialog?m.createElement(p.Confirm,{title:this.props.t("Please confirm"),text:this.props.t("switch_db_note"),onClose:e=>{if(e){let t;this.state.toConfirmType==="redis"?t=6379:t=9001,this.setState({type:this.state.toConfirmType,showWarningDialog:!1,port:t},()=>this.onChange())}else this.setState({showWarningDialog:!1})}}):null}render(){return m.createElement(Fe.Z,{className:this.props.classes.paper},this.renderWarning(),m.createElement(c.ZP,{item:!0,className:p.Utils.clsx(this.props.classes.gridSettings,this.props.classes.dangerZone)},m.createElement("h3",{className:this.props.classes.dangerZoneHeader,title:this.props.t("Invalid settings in these fields could lead to dead host")},this.props.t("Danger zone")),m.createElement("p",{className:this.props.classes.warning},this.props.t("base_settings_hint")),m.createElement(c.ZP,{container:!0,direction:"column"},m.createElement(c.ZP,{item:!0},m.createElement(q.Z,{title:this.props.t("switch_db_note")},m.createElement(te.Z,{className:this.props.classes.controlItem,variant:"standard"},m.createElement(ve.Z,null,this.props.t("Type")),m.createElement(be.Z,{variant:"standard",value:this.state.type,onChange:e=>{if(e.target.value!==this.state.originalDBType)this.setState({toConfirmType:e.target.value,showWarningDialog:!0});else{let t;e.target.value==="redis"?t=6379:t=9001,this.setState({type:e.target.value,port:t},()=>this.onChange())}}},m.createElement(N.Z,{value:"jsonl"},"JSON Lines"),m.createElement(N.Z,{value:"file"},this.props.t("File")),m.createElement(N.Z,{value:"redis"},"Redis"))))),m.createElement(c.ZP,{item:!0,style:{paddingLeft:8}},m.createElement($.Z,{control:m.createElement(ds.Z,{checked:this.state.textIP,onChange:e=>this.setState({textIP:e.target.checked},()=>this.onChange())}),label:this.props.t("IP is domain or more than one address")})),m.createElement(c.ZP,{item:!0},this.state.textIP?m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.host,type:"text",onChange:e=>this.setState({host:e.target.value},()=>this.onChange()),label:this.props.t("Bind IP address"),helperText:this.props.t("You can enter more than one address divided by comma")}):m.createElement(te.Z,{className:this.props.classes.controlItem,variant:"standard"},m.createElement(ve.Z,null,this.props.t("Bind IP address")),m.createElement(be.Z,{variant:"standard",value:this.state.host,onChange:e=>this.setState({host:e.target.value},()=>this.onChange())},this.state.IPs.map(e=>m.createElement(N.Z,{key:e,value:e},e==="0.0.0.0"?`0.0.0.0 [${this.props.t("All addresses")}]`:e))))),m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.port,type:"number",min:1,max:65535,onChange:e=>this.setState({port:e.target.value},()=>this.onChange()),label:this.props.t("Port")})),this.state.type==="file"||this.state.type==="jsonl"?m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.dataDir,helperText:this.props.t("Optional. Always relative to iobroker.js-controller/"),onChange:e=>this.setState({dataDir:e.target.value},()=>this.onChange()),label:this.props.t("Directory path")})):null,m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.options_auth_pass,type:"password",helperText:this.props.t("Optional"),inputProps:{autoComplete:"new-password",form:{autoComplete:"off"}},autoComplete:"off",onChange:e=>this.setState({options_auth_pass:e.target.value},()=>this.onChange()),label:this.state.type==="redis"?this.props.t("Redis password"):this.props.t("Connection password")})))),m.createElement(c.ZP,{item:!0,className:this.props.classes.gridSettings},m.createElement(c.ZP,{container:!0,direction:"column"},this.state.type==="file"||this.state.type==="jsonl"?m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.connectTimeout,helperText:this.props.t("ms"),type:"number",min:200,onChange:e=>this.setState({connectTimeout:e.target.value},()=>this.onChange()),label:this.props.t("Connect timeout")})):null,this.state.type==="file"||this.state.type==="jsonl"?m.createElement(c.ZP,{item:!0},m.createElement(te.Z,{component:"fieldset",variant:"standard",className:this.props.classes.controlItem},m.createElement(Wt.Z,null,m.createElement($.Z,{control:m.createElement(ie.Z,{checked:this.state.noFileCache,onChange:e=>this.setState({noFileCache:e.target.checked},()=>this.onChange())}),label:this.props.t("No file cache")})),m.createElement(Me.Z,null,this.props.t("Always read files from disk and do not cache them in RAM. Used for debugging.")))):null,this.state.type==="file"?m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.writeFileInterval,helperText:this.props.t("How often the data from RAM will be saved on disk in ms"),type:"number",min:200,onChange:e=>this.setState({writeFileInterval:e.target.value},()=>this.onChange()),label:this.props.t("Store file interval")})):null,this.state.type==="redis"?m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.options_retry_max_delay,type:"number",helperText:this.props.t("Maximum delay between connection attempts"),onChange:e=>this.setState({options_retry_max_delay:e.target.value},()=>this.onChange()),label:this.props.t("Retry maximum delay")})):null,this.state.type==="redis"?m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.options_retry_max_count,type:"number",helperText:this.props.t("Maximum number of connection retries"),onChange:e=>this.setState({options_retry_max_count:e.target.value},()=>this.onChange()),label:this.props.t("Retry maximum count")})):null,this.state.type==="redis"?m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.options_db,type:"number",helperText:this.props.t("Used for sentinels"),onChange:e=>this.setState({options_db:e.target.value},()=>this.onChange()),label:this.props.t("DB number")})):null,this.state.type==="redis"?m.createElement(c.ZP,{item:!0},m.createElement(te.Z,{className:this.props.classes.controlItem,variant:"standard"},m.createElement(ve.Z,null,this.props.t("Family number")),m.createElement(be.Z,{variant:"standard",value:this.state.options_family,onChange:e=>this.setState({options_family:e.target.value},()=>this.onChange())},m.createElement(N.Z,{value:0},"auto"),m.createElement(N.Z,{value:4},"IPv4"),m.createElement(N.Z,{value:6},"IPv6")),m.createElement(Me.Z,null,this.props.t("Used for sentinels")))):null,this.state.type==="jsonl"?m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.jsonlOptions_autoCompress_sizeFactor,type:"number",inputProps:{min:2},helperText:this.props.t("The JSONL DB is append-only and will contain unnecessary entries after a while."),onChange:e=>this.setState({jsonlOptions_autoCompress_sizeFactor:e.target.value},()=>this.onChange()),label:this.props.t("Auto-compress size factor")})):null,this.state.type==="jsonl"?m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.jsonlOptions_autoCompress_sizeFactorMinimumSize,type:"number",inputProps:{min:0},helperText:this.props.t("It will be compressed when the uncompressed size is >= size * sizeFactor AND >= sizeFactorMinimumSize"),onChange:e=>this.setState({jsonlOptions_autoCompress_sizeFactorMinimumSize:e.target.value},()=>this.onChange()),label:this.props.t("Auto-compress size factor minimum size")})):null,this.state.type==="jsonl"?m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.jsonlOptions_throttleFS_intervalMs,type:"number",inputProps:{min:0},helperText:this.props.t("Write to the database file no more than every X milliseconds"),onChange:e=>this.setState({jsonlOptions_throttleFS_intervalMs:e.target.value},()=>this.onChange()),label:this.props.t("Minimal write interval")})):null,this.state.type==="jsonl"?m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.jsonlOptions_throttleFS_maxBufferedCommands,type:"number",inputProps:{min:0},helperText:this.props.t("Force writing after this many changes have been buffered. This reduces memory consumption and data loss in case of a crash"),onChange:e=>this.setState({jsonlOptions_throttleFS_maxBufferedCommands:e.target.value},()=>this.onChange()),label:this.props.t("Maximum changes before write")})):null,this.state.type==="file"||this.state.type==="jsonl"?m.createElement(c.ZP,{item:!0},m.createElement(te.Z,{component:"fieldset",variant:"standard",className:this.props.classes.controlItem},m.createElement(Wt.Z,null,m.createElement($.Z,{control:m.createElement(ie.Z,{checked:this.state.backup_disabled,onChange:e=>this.setState({backup_disabled:e.target.checked},()=>this.onChange())}),label:this.props.t("No on-the-fly backup")})),m.createElement(Me.Z,null,this.props.t("By every write the backup of object.json will be created.")))):null,(this.state.type==="file"||this.state.type==="jsonl")&&!this.state.backup_disabled?m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.backup_files,type:"number",helperText:this.props.t("Minimal number of backup files, after the deletion will be executed according to the backup time settings"),onChange:e=>this.setState({backup_files:e.target.value},()=>this.onChange()),label:this.props.t("Number of files")})):null,(this.state.type==="file"||this.state.type==="jsonl")&&!this.state.backup_disabled?m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.backup_hours,type:"number",helperText:this.props.t("All backups older than these hours will be deleted, but only if the number of files is greater than of the files number"),onChange:e=>this.setState({backup_hours:e.target.value},()=>this.onChange()),label:this.props.t("Backup hours")})):null,(this.state.type==="file"||this.state.type==="jsonl")&&!this.state.backup_disabled?m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.backup_period,type:"number",helperText:this.props.t("By default the backup is every 2 hours. Time is in minutes. To disable backup set the value to 0"),onChange:e=>this.setState({backup_period:e.target.value},()=>this.onChange()),label:this.props.t("How often")})):null,(this.state.type==="file"||this.state.type==="jsonl")&&!this.state.backup_disabled?m.createElement(c.ZP,{item:!0},m.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.backup_path,helperText:this.props.t("Absolute path to backup directory or empty to backup in data directory. Leave it empty for default storage place."),onChange:e=>this.setState({backup_path:e.target.value},()=>this.onChange()),label:this.props.t("Path")})):null)))}}ms.propTypes={t:d().func,onChange:d().func.isRequired,settings:d().object.isRequired,currentHost:d().string};var ea=(0,p.withWidth)()((0,L.withStyles)(_s)(ms)),us=l(23060),u=l(4819);const ta=n=>({paper:{height:"100%",maxHeight:"100%",maxWidth:"100%",overflow:"auto",padding:n.spacing(1)},controlItem:{width:400,marginBottom:n.spacing(2),marginRight:n.spacing(1),marginLeft:n.spacing(1)},dangerZone:{backgroundColor:"rgba(255, 165, 0, 0.05)",border:"2px solid rgba(255, 165, 0)",marginBottom:n.spacing(1)},dangerZoneHeader:{background:"rgba(255, 165, 0)",color:"#FFF",paddingLeft:n.spacing(2),paddingTop:4,paddingBottom:4,marginTop:-1,marginLeft:-1},warning:{padding:8,fontSize:14,color:n.palette.mode==="dark"?"#ffa500":"#b17200"}}),$t={autoCompress:{sizeFactor:2,sizeFactorMinimumSize:25e3},throttleFS:{intervalMs:6e4,maxBufferedCommands:1e3}};class gs extends S.Component{constructor(e){super(e);const t=this.props.settings||{};t.options=t.options||{auth_pass:"",retry_max_delay:2e3,retry_max_count:19,db:0,family:0},t.backup=t.backup||{disabled:!1,files:24,hours:48,period:120,path:""},t.jsonlOptions=t.jsonlOptions||$t,t.jsonlOptions.autoCompress=t.jsonlOptions.autoCompress||$t.autoCompress,t.jsonlOptions.throttleFS=t.jsonlOptions.throttleFS||$t.throttleFS,this.state={type:t.type||"file",host:Array.isArray(t.host)?t.host.join(","):t.host||"127.0.0.1",port:t.port||9e3,connectTimeout:t.connectTimeout||2e3,writeFileInterval:t.writeFileInterval||5e3,dataDir:t.dataDir||"",options_auth_pass:t.options.auth_pass||t.pass||"",options_retry_max_delay:t.options.retry_max_delay||2e3,options_retry_max_count:t.options.retry_max_count||19,options_db:t.options.db||0,options_family:t.options.family||0,backup_disabled:t.backup.disabled||!1,backup_files:t.backup.files||24,backup_hours:t.backup.hours||48,backup_period:t.backup.period||120,backup_path:t.backup.path||"",jsonlOptions_autoCompress_sizeFactor:t.jsonlOptions.autoCompress.sizeFactor||2,jsonlOptions_autoCompress_sizeFactorMinimumSize:t.jsonlOptions.autoCompress.sizeFactorMinimumSize||25e3,jsonlOptions_throttleFS_intervalMs:t.jsonlOptions.throttleFS.intervalMs||6e4,jsonlOptions_throttleFS_maxBufferedCommands:t.jsonlOptions.throttleFS.maxBufferedCommands||100,textIP:Array.isArray(t.host)||(t.host||"").match(/[^.\d]/)||(t.host||"").includes(","),IPs:["0.0.0.0","127.0.0.1"],loading:!0,showWarningDialog:!1,toConfirmType:"",originalDBType:t.type||"file"},this.focusRef=(0,S.createRef)(),this.props.socket.getIpAddresses(this.props.currentHost).then(s=>{const i=[...s];!i.includes("0.0.0.0")&&i.push("0.0.0.0"),!i.includes("127.0.0.1")&&i.push("127.0.0.1"),this.setState({IPs:i,loading:!1})})}componentDidMount(){this.focusRef.current&&this.focusRef.current.focus()}onChange(){const e={type:this.state.type,host:this.state.host,port:parseInt(this.state.port,10),noFileCache:this.state.noFileCache,connectTimeout:parseInt(this.state.connectTimeout,10),writeFileInterval:parseInt(this.state.writeFileInterval,10),dataDir:this.state.dataDir,options:{auth_pass:this.state.options_auth_pass||null,retry_max_delay:parseInt(this.state.options_retry_max_delay,10),retry_max_count:parseInt(this.state.options_retry_max_count,10),db:parseInt(this.state.options_db,10),family:parseInt(this.state.options_family,10)},backup:{disabled:this.state.backup_disabled,files:parseInt(this.state.backup_files,10),hours:parseInt(this.state.backup_hours,10),period:parseInt(this.state.backup_period,10),path:this.state.backup_path},jsonlOptions:{autoCompress:{sizeFactor:parseInt(this.state.jsonlOptions_autoCompress_sizeFactor,10),sizeFactorMinimumSize:parseInt(this.state.jsonlOptions_autoCompress_sizeFactorMinimumSize,10)},throttleFS:{intervalMs:parseInt(this.state.jsonlOptions_throttleFS_intervalMs,10),maxBufferedCommands:parseInt(this.state.jsonlOptions_throttleFS_maxBufferedCommands,10)}}};e.jsonlOptions.autoCompress.sizeFactor<2&&(e.jsonlOptions.autoCompress.sizeFactor=2),e.jsonlOptions.autoCompress.sizeFactorMinimumSize<0&&(e.jsonlOptions.autoCompress.sizeFactorMinimumSize=0),e.jsonlOptions.throttleFS.intervalMs<0&&(e.jsonlOptions.throttleFS.intervalMs=0),e.jsonlOptions.throttleFS.maxBufferedCommands<0&&(e.jsonlOptions.throttleFS.maxBufferedCommands=0),this.props.onChange(e)}renderWarning(){return this.state.showWarningDialog?u.createElement(Ut.default,{title:this.props.t("Please confirm"),text:this.props.t("switch_db_note"),onClose:e=>{if(e){let t;this.state.toConfirmType==="redis"?t=6379:t=9e3,this.setState({type:this.state.toConfirmType,showWarningDialog:!1,port:t},()=>this.onChange())}else this.setState({showWarningDialog:!1})}}):null}render(){return u.createElement(Fe.Z,{className:this.props.classes.paper},this.renderWarning(),u.createElement(c.ZP,{item:!0,className:(0,us.default)(this.props.classes.gridSettings,this.props.classes.dangerZone)},u.createElement("h3",{className:this.props.classes.dangerZoneHeader,title:this.props.t("Invalid settings in these fields could lead to dead host")},this.props.t("Danger zone")),u.createElement("p",{className:this.props.classes.warning},this.props.t("base_settings_hint")),u.createElement(c.ZP,{container:!0,direction:"column"},u.createElement(c.ZP,{item:!0},u.createElement(q.Z,{title:this.props.t("switch_db_note")},u.createElement(te.Z,{className:this.props.classes.controlItem,variant:"standard"},u.createElement(ve.Z,null,this.props.t("Type")),u.createElement(be.Z,{variant:"standard",value:this.state.type,onChange:e=>{if(e.target.value!==this.state.originalDBType)this.setState({toConfirmType:e.target.value,showWarningDialog:!0});else{let t;e.target.value==="redis"?t=6379:t=9e3,this.setState({type:e.target.value,port:t},()=>this.onChange())}}},u.createElement(N.Z,{value:"jsonl"},"JSON Lines"),u.createElement(N.Z,{value:"file"},this.props.t("File")),u.createElement(N.Z,{value:"redis"},"Redis"))))),u.createElement(c.ZP,{item:!0,style:{paddingLeft:8}},u.createElement($.Z,{control:u.createElement(ds.Z,{checked:this.state.textIP,onChange:e=>this.setState({textIP:e.target.checked},()=>this.onChange())}),label:this.props.t("IP is domain or more than one address")})),u.createElement(c.ZP,{item:!0},this.state.textIP?u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.host,type:"text",onChange:e=>this.setState({host:e.target.value},()=>this.onChange()),label:this.props.t("Bind IP address"),helperText:this.props.t("You can enter more than one address divided by comma")}):u.createElement(te.Z,{className:this.props.classes.controlItem,variant:"standard"},u.createElement(ve.Z,null,this.props.t("Bind IP address")),u.createElement(be.Z,{variant:"standard",value:this.state.host,onChange:e=>this.setState({host:e.target.value},()=>this.onChange())},this.state.IPs.map(e=>u.createElement(N.Z,{key:e,value:e},e==="0.0.0.0"?`0.0.0.0 [${this.props.t("All addresses")}]`:e))))),u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.port,type:"number",min:1,max:65535,onChange:e=>this.setState({port:e.target.value},()=>this.onChange()),label:this.props.t("Port")})),this.state.type==="file"?u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.dataDir,helperText:this.props.t("Optional. Always relative to iobroker.js-controller/"),onChange:e=>this.setState({dataDir:e.target.value},()=>this.onChange()),label:this.props.t("Directory path")})):null,u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.options_auth_pass,type:"password",helperText:this.props.t("Optional"),inputProps:{autoComplete:"new-password",form:{autoComplete:"off"}},autoComplete:"off",onChange:e=>this.setState({options_auth_pass:e.target.value},()=>this.onChange()),label:this.state.type==="redis"?this.props.t("Redis password"):this.props.t("Connection password")})))),u.createElement(c.ZP,{item:!0,className:this.props.classes.gridSettings},u.createElement(c.ZP,{container:!0,direction:"column"},this.state.type==="file"||this.state.type==="jsonl"?u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.connectTimeout,helperText:this.props.t("ms"),type:"number",min:200,onChange:e=>this.setState({connectTimeout:e.target.value},()=>this.onChange()),label:this.props.t("Connect timeout")})):null,this.state.type==="file"?u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.writeFileInterval,helperText:this.props.t("How often the data from RAM will be saved on disk in ms"),type:"number",min:200,onChange:e=>this.setState({writeFileInterval:e.target.value},()=>this.onChange()),label:this.props.t("Store file interval")})):null,this.state.type==="redis"?u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.options_retry_max_delay,type:"number",helperText:this.props.t("Maximum delay between connection attempts"),onChange:e=>this.setState({options_retry_max_delay:e.target.value},()=>this.onChange()),label:this.props.t("Retry maximum delay")})):null,this.state.type==="redis"?u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.options_retry_max_count,type:"number",helperText:this.props.t("Maximum number of connection retries"),onChange:e=>this.setState({options_retry_max_count:e.target.value},()=>this.onChange()),label:this.props.t("Retry maximum count")})):null,this.state.type==="redis"?u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.options_db,type:"number",helperText:this.props.t("Used for sentinels"),onChange:e=>this.setState({options_db:e.target.value},()=>this.onChange()),label:this.props.t("DB number")})):null,this.state.type==="redis"?u.createElement(c.ZP,{item:!0},u.createElement(te.Z,{className:this.props.classes.controlItem,variant:"standard"},u.createElement(ve.Z,null,this.props.t("Family number")),u.createElement(be.Z,{variant:"standard",value:this.state.options_family,onChange:e=>this.setState({options_family:e.target.value},()=>this.onChange())},u.createElement(N.Z,{value:0},"auto"),u.createElement(N.Z,{value:4},"IPv4"),u.createElement(N.Z,{value:6},"IPv6")),u.createElement(Me.Z,null,this.props.t("Used for sentinels")))):null,this.state.type==="jsonl"?u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.jsonlOptions_autoCompress_sizeFactor,type:"number",inputProps:{min:2},helperText:this.props.t("The JSONL DB is append-only and will contain unnecessary entries after a while."),onChange:e=>this.setState({jsonlOptions_autoCompress_sizeFactor:e.target.value},()=>this.onChange()),label:this.props.t("Auto-compress size factor")})):null,this.state.type==="jsonl"?u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.jsonlOptions_autoCompress_sizeFactorMinimumSize,type:"number",inputProps:{min:0},helperText:this.props.t("It will be compressed when the uncompressed size is >= size * sizeFactor AND >= sizeFactorMinimumSize"),onChange:e=>this.setState({jsonlOptions_autoCompress_sizeFactorMinimumSize:e.target.value},()=>this.onChange()),label:this.props.t("Auto-compress size factor minimum size")})):null,this.state.type==="jsonl"?u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.jsonlOptions_throttleFS_intervalMs,type:"number",inputProps:{min:0},helperText:this.props.t("Write to the database file no more than every X milliseconds"),onChange:e=>this.setState({jsonlOptions_throttleFS_intervalMs:e.target.value},()=>this.onChange()),label:this.props.t("Minimal write interval")})):null,this.state.type==="jsonl"?u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.jsonlOptions_throttleFS_maxBufferedCommands,type:"number",inputProps:{min:0},helperText:this.props.t("Force writing after this many changes have been buffered. This reduces memory consumption and data loss in case of a crash"),onChange:e=>this.setState({jsonlOptions_throttleFS_maxBufferedCommands:e.target.value},()=>this.onChange()),label:this.props.t("Maximum changes before write")})):null,this.state.type==="file"||this.state.type==="jsonl"?u.createElement(c.ZP,{item:!0},u.createElement(te.Z,{component:"fieldset",className:this.props.classes.controlItem,variant:"standard"},u.createElement(Wt.Z,null,u.createElement($.Z,{control:u.createElement(ie.Z,{checked:this.state.backup_disabled,onChange:e=>this.setState({backup_disabled:e.target.checked},()=>this.onChange())}),label:this.props.t("No on-the-fly backup")})),u.createElement(Me.Z,null,this.props.t("By every write the backup of object.json will be created.")))):null,(this.state.type==="file"||this.state.type==="jsonl")&&!this.state.backup_disabled?u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.backup_files,type:"number",helperText:this.props.t("Minimal number of backup files, after the deletion will be executed according to the backup time settings"),onChange:e=>this.setState({backup_files:e.target.value},()=>this.onChange()),label:this.props.t("Number of files")})):null,(this.state.type==="file"||this.state.type==="jsonl")&&!this.state.backup_disabled?u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.backup_hours,type:"number",helperText:this.props.t("All backups older than these hours will be deleted, but only if the number of files is greater than of the files number"),onChange:e=>this.setState({backup_hours:e.target.value},()=>this.onChange()),label:this.props.t("Backup hours")})):null,(this.state.type==="file"||this.state.type==="jsonl")&&!this.state.backup_disabled?u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.backup_period,type:"number",helperText:this.props.t("By default the backup is every 2 hours. Time is in minutes. To disable backup set the value to 0"),onChange:e=>this.setState({backup_period:e.target.value},()=>this.onChange()),label:this.props.t("How often")})):null,(this.state.type==="file"||this.state.type==="jsonl")&&!this.state.backup_disabled?u.createElement(c.ZP,{item:!0},u.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.backup_path,helperText:this.props.t("Absolute path to backup directory or empty to backup in data directory. Leave it empty for default storage place."),onChange:e=>this.setState({backup_path:e.target.value},()=>this.onChange()),label:this.props.t("Path")})):null)))}}gs.propTypes={t:d().func,onChange:d().func.isRequired,settings:d().object.isRequired,currentHost:d().string};var sa=(0,De.default)()((0,L.withStyles)(ta)(gs)),aa=l(56892),$e=l(28475),Ve=l(12923),Ke=l(18226),Xe=l(99296),Ge=l(67552),fs=l(79802),vs=l(59954),bs=l(97562),Es=l(92866),ys="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAAbCAYAAADMIInqAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAiPSURBVFhH7Zd7UFTXGcDPvXffy8IusMsbQUEgoyiKD4pBnoKgVkoRX1WpNia2QZ2MzFTS2MykmlqiMzWJqSUxJq1KG0VrE0GxqSgSNVEx4SEaAeXNLrDsLvve2+/cvQusgIHWf2jymzns+b5zLvd+3/nOd75DoGEsWJDLaWvrXsXhcH/S3a0ODArynqfRDLRptfo6qVRcRdOGww8fftbGTv+/YNAB/v4ZsSrVQJHBYAunaVb5BBwOMri58farVI9eR+iejVVPakj8x8dn6cKWlv5zev3YxmMsFiRQqYyv8fleb+XnH2CenexQ2JCqqroLRiMKYHWIzyctLi680ujo4Aa93nDfbDZ72WxIYB/FQUMsbG5+VNHf/6DRrpu8kFeu3EnRaKzhrIxEIq5ZLhdHqdUXMior31+mVJ5fFhKiiBCLqXp2CrJaETKbyTxWnNSQtbWP5w4Pe3d30cWWln9+w4oMdXV/bw8K8tgLZoNkYZpeb5zLDE5yIJ7n7EZI8jtWRl5eLl91dn4azYqDxMZu4ldWVrqxaQMgIAnWK1lhkODgDLHNRuVqNIYMiJQ5Wq0JnCocsFjM/w4PD/ikqurop+zUUYHnY8xmIs9mIxI7O7V4QSDajJc8PEQfZ2fHXyguPhPa2KiLwXNJklLZbDf+wTw4Cr3rkUg8j5dDSYYOOyslRI8Ccs6FJP6J+XZizpz1+bduPf49M8pA0zKZ8N3U1NlvyeWuTYcOFTwlLToTGZmdcu9e9xGj0RZkzxXOEARtE4nIE/v2bdmVl7e+nVUzyGTpHKGQ+BCMXgOOG5FgKQr/tf4xPNxPUFPT8QKWeDzqlsn0rzEjsSMe+fCnCdtcFsG6DfscC0fwUZvPsp9PS3rbSoSHZ/k+eKBshAzPY8cZeDwSGnELHHJ51qyg6tWrUz5/+eW1j9jhESxevDn9xo3Gs3q9lcOqxkQm456fPj1g+fXrRyGbIHTsWAm1e/f7x1tbNauYCU+BJFE/JGRX3P9OByQgH/hpE8+XIEGE2K5kGRDKX3HL+foAWV9/qk0q5f8BDGWH7JhMNqTVWiGEbTsrKx9+uHPne80KRfrNmTPXrC0uLmXWw8HBg8dcqqtbPhgynrbKZLwTQUGibIR0yWFhnoVwqpjsYxCavaalarX6JVZE+/Z9tKS1td/JeD6f6AkOdi9FyPBmYKC0xh4BCDmMnwi6m1pk7hx8PYPQoNzfdSYujQ2MJCowUHQQPuJFCD+uXTc6sAJwUlAfgHO2InQZZ0SoI9JWt7frTzATwJEyGf/V3t6Lg3kFM2/ez1Lv3HlcajbbHe3pKap9553tkTk5aVZPz7RLSqU+kRkAKIq+BnljRXd3mQrLOEKOHy/PraioP6zXWwYjbLwRgPukkEL86SKnrUCI3S87bdTZs1dFNTX1boOhLEheMotl7O3v4cHfq1JdKMB9L6/0k52duhzcFwhI4+bNSTEkSTiVzFwuhywqKr/a32+aimU4blFUlL9XWFiQ9dSpqna12sA4nsslLYsXh0WXl79XjeXhBAdnHmps7PkVK07IAc6A2YSwhDM1ZpOTAxyUlFwSFxS8PVWpHIi3Wul4CO2EgQGLjB1mgPygjYz0nvbllye7CGJRBU1Tz2M9GA4RIGTmPEl/vxEyOrPtAfzb62XvSzuh0GZ6kO1rVKrzMxjhCcLCVkY0NPTU0rT9s/87B1CwqrzXBJk7C6V5ew2jlrOZmUm62tqSr7u6yg7BKmeFhMgVvr4SOCmGIgJyhItAIEjCfZp2GIX3KI3gTjFqGzIeg/8XlrHhQ+swZYqc7Y3Ez0+uFQqdcvXEILg6QiTP8v5c/wY2nlGtWZO/A380Bq8evOQvhYW7Rpzvu3Yd4BQVlTX39hp8WRVyc+Nvg4rxMIcTV2GxEEwEgAt0kHb+bO+PDZfLRb6+fr9pbm6AjYkjwJ7lpFJBTV9f2agREBW1NqK6urUWEiHDhCKA5tynvGf+VH7y9l1GduDvv0KPUBx4wN7k8uRUdsgJcADl4pLcAAcezMMtjl6wYAOTyYODV5506Pn8BGtW1o6ZzEPjIDd3j6tYnNzjeJ7LjTfHxm6cxQ474eGRCrdQx/sX0zxe4lfs0KhgB0CjO+Kos6r8nMG7znBIqNDO2EPQ3uC2V7h8+Q6nFcjKeoW4cuXuL3U6UyirgqsxaZNIRJW47+rK+8SxPaAIIq9evf9qQsJWp6MyJeVFF6Ew7ixCMfdwEwhi6yIjV8iOHn29381NeJudBtuE5lRWfvvuxo17IlgVKir6G7VkyUtbIA9B1ToBbIgmKOkBzozkHI/9xY9ZrRPEwoUb5l+/3nwN7gODHwz3fo1C4XpDpdLcNJstkLH5cZAIfwQJkZ2BjzHBZaWyLJ4VIXSTIXTNz+E+Ab6E2uJqQIDk47t3v33o7i71s9l4+X19RmYco1AIz3R1lWbifkzMhqVffNH0mSO5YSQSnkUs5pbDTbSZz+c/DxXic8Pfj/muLTAemDdGR6974/btlgJ8yxsfliaFQpIABjSxCuyAGSYTfRNWib02Pw1zvUQijtdoLsLet+Pnl36ktVX7C/aTxsWzcABzCqxbt2TP3LlTdkC1ph6e6Z8EanlIfLxrYrEoebjxmL6+8m9cXbmLoAgC/ej/Az/v4SG4A9Vd4nDjMf7+XtvCwhR/5XDwJWskoIdj0Ou0XO7Cap4NTu7Ozv61d0tLx4aamuZZUqlrUm+vjhmXSPidXC5V7evrfnrTprTzW7fmMEfIaCQnbxHX1bWt7OnRZXh6ypLUah0SiwUDRqPxWmCg/Nz8+aGnjxz5rXNdOgyIxpj2dvULcNOLV6sHRJ6erkip7CkJDQ06tX37j+/n5xc1dnRomLnPIgImFVASB3h7L4PwGt8pMB5GLYS+T/zgAPb3e8sPDmB/Jw34voKPREf730DoP5pKhvU07RMQAAAAAElFTkSuQmCC",o=l(4819);const na=n=>({paper:{height:"100%",maxHeight:"100%",maxWidth:"100%",overflow:"hidden",padding:n.spacing(1)},gridSettings:{height:"calc(100% - "+n.mixins.toolbar.minHeight+"px)",width:"100%",overflow:"auto"},controlItem:{width:400,marginBottom:n.spacing(2),marginRight:n.spacing(1),marginLeft:n.spacing(1)},delButton:{position:"absolute",top:2,right:n.spacing(6)},addButton:{marginRight:n.spacing(1)},buttonIcon:{height:24},headingIcon:{height:24,marginRight:n.spacing(1)}});class Ss extends S.Component{constructor(e){super(e);const t=this.props.settings||{};t.transport=t.transport||{},Object.keys(t.transport).forEach(s=>{if(t.transport[s].type==="file"){let i=typeof t.transport[s].maxSize=="string"?t.transport[s].maxSize.includes("k")?.1:t.transport[s].maxSize.includes("g")?10:1:1;t.transport[s].maxSize=(parseInt(t.transport[s].maxSize,10)||0)*i,t.transport[s].level=t.transport[s].level||"",t.transport[s].maxFiles=t.transport[s].maxFiles||0}else t.transport[s].type==="syslog"?(t.transport[s].level=t.transport[s].level||"",t.transport[s].host=t.transport[s].host||"",t.transport[s].port=t.transport[s].port||0,t.transport[s].path=t.transport[s].path||"",t.transport[s].facility=t.transport[s].facility||"",t.transport[s].sysLogType=t.transport[s].sysLogType||"",t.transport[s].app_name=t.transport[s].app_name||"",t.transport[s].eol=t.transport[s].eol||""):t.transport[s].type==="http"?(t.transport[s].level=t.transport[s].level||"",t.transport[s].host=t.transport[s].host||"",t.transport[s].port=t.transport[s].port||0,t.transport[s].path=t.transport[s].path||"/",t.transport[s].auth=t.transport[s].auth||"None",t.transport[s].ssl=t.transport[s].ssl||!1):t.transport[s].type==="stream"?(t.transport[s].stream=t.transport[s].stream||"",t.transport[s].level=t.transport[s].level||"",t.transport[s].silent=t.transport[s].silent||!1,t.transport[s].eol=t.transport[s].eol||""):t.transport[s].type==="seq"&&(t.transport[s].level=t.transport[s].level||"",t.transport[s].serverUrl=t.transport[s].serverUrl||"",t.transport[s].apiKey=t.transport[s].apiKey||"",t.transport[s].eol=t.transport[s].eol||"")}),this.state={level:t.level||"info",maxDays:t.maxDays||7,noStdout:t.noStdout||!0,transport:t.transport||{},expanded:[]},this.focusRef=(0,S.createRef)()}componentDidMount(){this.focusRef.current&&this.focusRef.current.focus()}onChange(){const e={level:this.state.level,maxDays:parseInt(this.state.maxDays,10),noStdout:this.state.noStdout,transport:{}};Object.keys(this.state.transport).forEach(t=>{e.transport[t]=JSON.parse(JSON.stringify(this.state.transport[t])),this.state.transport[t].type==="file"?(e.transport[t].maxSize=parseInt(e.transport[t].maxSize,10)||null,e.transport[t].maxSize&&(e.transport[t].maxSize=e.transport[t].maxSize.toString()+"m"),e.transport[t].maxFiles=parseInt(e.transport[t].maxFiles,10)||null):this.state.transport[t].type==="syslog"?(!e.transport[t].port&&delete e.transport[t].port,!e.transport[t].path&&delete e.transport[t].path,!e.transport[t].sysLogType&&delete e.transport[t].sysLogType,!e.transport[t].app_name&&delete e.transport[t].app_name,!e.transport[t].eol&&delete e.transport[t].eol):this.state.transport[t].type==="http"?(e.transport[t].host=e.transport[t].host||"",e.transport[t].port=parseInt(e.transport[t].port,10)||80,e.transport[t].path=e.transport[t].path||"/",e.transport[t].auth=e.transport[t].auth||"",e.transport[t].ssl=e.transport[t].ssl||!1):this.state.transport[t].type==="stream"&&(e.transport[t].stream=e.transport[t].stream||"",e.transport[t].level=e.transport[t].level||"info",e.transport[t].silent=e.transport[t].silent||!1,e.transport[t].eol=e.transport[t].eol||"")}),this.props.onChange(e)}onDelete(e){const t=JSON.parse(JSON.stringify(this.state.transport));delete t[e],this.setState({transport:t},()=>this.onChange())}renderEnabled(e){return o.createElement(c.ZP,{item:!0},o.createElement($.Z,{className:this.props.classes.controlItem,control:o.createElement(ie.Z,{checked:this.state.transport[e].enabled,onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].enabled=t.target.checked,this.setState({transport:s},()=>this.onChange())}}),label:this.props.t("Enabled")}))}renderLogLevel(e){return this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(te.Z,{className:this.props.classes.controlItem,variant:"standard"},o.createElement(ve.Z,null,this.props.t("Level")),o.createElement(be.Z,{variant:"standard",value:this.state.transport[e].level||"_",renderValue:()=>this.state.transport[e].level||this.props.t("default"),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].level=t.target.value==="_"?"":t.target.value,this.setState({transport:s},()=>this.onChange())}},o.createElement(N.Z,{value:"_"},this.props.t("default")),o.createElement(N.Z,{value:"silly"},"silly"),o.createElement(N.Z,{value:"debug"},"debug"),o.createElement(N.Z,{value:"info"},"info"),o.createElement(N.Z,{value:"warn"},"warn"),o.createElement(N.Z,{value:"error"},"error")),o.createElement(Me.Z,null,this.props.t("Level of messages that this transport should log (default: level set on parent logger)")))):null}renderSyslog(e){return o.createElement($e.Z,{key:e,expanded:this.state.expanded.includes(e),onChange:()=>{const t=[...this.state.expanded],s=t.indexOf(e);s===-1?t.push(e):t.splice(s,1),this.setState({expanded:t})}},o.createElement(Ke.Z,{expandIcon:o.createElement(je.default,null),style:{position:"relative",background:"rgba(128, 128, 128, 0.3)"}},o.createElement(bs.Z,{className:this.props.classes.headingIcon}),o.createElement(Xe.Z,{className:this.props.classes.heading},e),o.createElement(Ge.Z,{size:"small",className:this.props.classes.delButton,onClick:()=>this.onDelete(e)},o.createElement(oe.default,null))),o.createElement(Ve.Z,null,o.createElement(c.ZP,{container:!0,direction:"column"},this.renderEnabled(e),this.renderLogLevel(e),this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].host,helperText:this.props.t("The host running syslogd, defaults to localhost"),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].host=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("File name")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].port,type:"number",helperText:this.props.t("The port on the host that syslog is running on, defaults to syslogd's default port(514/UDP)."),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].port=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("Port")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(te.Z,{className:this.props.classes.controlItem,variant:"standard"},o.createElement(ve.Z,null,this.props.t("Protocol")),o.createElement(be.Z,{variant:"standard",value:this.state.transport[e].protocol,onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].protocol=t.target.value,this.setState({transport:s},()=>this.onChange())}},o.createElement(N.Z,{value:"udp4"},"udp4"),o.createElement(N.Z,{value:"tcp4"},"tcp4"),o.createElement(N.Z,{value:"unix"},"unix"),o.createElement(N.Z,{value:"unix-connect"},"unix-connect")))):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].path,helperText:this.props.t("The path to the syslog dgram socket (i.e. /dev/log or /var/run/syslog for OS X)."),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].path=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("Path")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].facility,helperText:this.props.t("Syslog facility to use (Default: local0)."),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].facility=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("Facility")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].localhost,helperText:this.props.t("Host to indicate that log messages are coming from (Default: localhost)."),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].localhost=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("Log name")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].sysLogType,helperText:this.props.t("The type of the syslog protocol to use (Default: BSD)."),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].sysLogType=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("SysLog Type")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].app_name,helperText:this.props.t("The name of the application (Default: process.title)."),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].app_name=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("Application name")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].eol,helperText:this.props.t("The end of line character to be added to the end of the message (Default: Message without modifications)."),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].eol=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("End of line char")})):null)))}renderFile(e){return o.createElement($e.Z,{key:e,expanded:this.state.expanded.includes(e),onChange:()=>{const t=[...this.state.expanded],s=t.indexOf(e);s===-1?t.push(e):t.splice(s,1),this.setState({expanded:t})}},o.createElement(Ke.Z,{style:{background:"rgba(128, 128, 128, 0.3)"},expandIcon:o.createElement(je.default,null)},o.createElement(vs.Z,{className:this.props.classes.headingIcon}),o.createElement(Xe.Z,{className:this.props.classes.heading},e),o.createElement(Ge.Z,{size:"small",className:this.props.classes.delButton,onClick:()=>this.onDelete(e)},o.createElement(oe.default,null))),o.createElement(Ve.Z,null,o.createElement(c.ZP,{container:!0,direction:"column"},this.renderEnabled(e),this.renderLogLevel(e),this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].filename,onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].filename=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("File name")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].fileext,onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].fileext=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("File extension")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].maxSize,type:"number",helperText:this.props.t("MB"),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].maxSize=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("Maximal size of one file")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].maxFiles,type:"number",onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].maxFiles=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("Maximal number of files")})):null)))}renderHttp(e){return o.createElement($e.Z,{key:e,expanded:this.state.expanded.includes(e),onChange:()=>{const t=[...this.state.expanded],s=t.indexOf(e);s===-1?t.push(e):t.splice(s,1),this.setState({expanded:t})}},o.createElement(Ke.Z,{expandIcon:o.createElement(je.default,null),style:{position:"relative",background:"rgba(128, 128, 128, 0.3)"}},o.createElement(fs.default,{className:this.props.classes.headingIcon}),o.createElement(Xe.Z,{className:this.props.classes.heading},e),o.createElement(Ge.Z,{size:"small",className:this.props.classes.delButton,onClick:()=>this.onDelete(e)},o.createElement(oe.default,null))),o.createElement(Ve.Z,null,o.createElement(c.ZP,{container:!0,direction:"column"},this.renderEnabled(e),this.renderLogLevel(e),this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].host,helperText:this.props.t("Remote host of the HTTP logging endpoint"),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].host=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("Host")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].port,type:"number",helperText:this.props.t("Remote port of the HTTP logging endpoint"),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].port=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("Port")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].path,helperText:this.props.t("Remote URI of the HTTP logging endpoint"),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].path=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("Path")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].auth,helperText:this.props.t("An object representing the username and password for HTTP Basic Auth"),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].auth=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("Auth")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement($.Z,{className:this.props.classes.controlItem,control:o.createElement(ie.Z,{checked:this.state.transport[e].ssl,onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].ssl=t.target.checked,this.setState({transport:s},()=>this.onChange())}}),label:this.props.t("SSL")})):null)))}renderStream(e){return o.createElement($e.Z,{key:e,expanded:this.state.expanded.includes(e),onChange:()=>{const t=[...this.state.expanded],s=t.indexOf(e);s===-1?t.push(e):t.splice(s,1),this.setState({expanded:t})}},o.createElement(Ke.Z,{expandIcon:o.createElement(je.default,null),style:{position:"relative",background:"rgba(128, 128, 128, 0.3)"}},o.createElement(Es.default,{className:this.props.classes.headingIcon}),o.createElement(Xe.Z,{className:this.props.classes.heading},e),o.createElement(Ge.Z,{size:"small",className:this.props.classes.delButton,onClick:()=>this.onDelete(e)},o.createElement(oe.default,null))),o.createElement(Ve.Z,null,o.createElement(c.ZP,{container:!0,direction:"column"},this.renderEnabled(e),this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].stream,helperText:this.props.t("any Node.js stream. If an objectMode stream is provided then the entire info object will be written. Otherwise info[MESSAGE] will be written"),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].stream=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("File name")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement($.Z,{className:this.props.classes.controlItem,control:o.createElement(ie.Z,{checked:this.state.transport[e].silent,onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].silent=t.target.checked,this.setState({transport:s},()=>this.onChange())}}),label:this.props.t("Silent")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].eol,helperText:this.props.t("Line-ending character to use. (default: os.EOL).)"),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].eol=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("EOL")})):null)))}renderSEQ(e){return o.createElement($e.Z,{key:e,expanded:this.state.expanded.includes(e),onChange:()=>{const t=[...this.state.expanded],s=t.indexOf(e);s===-1?t.push(e):t.splice(s,1),this.setState({expanded:t})}},o.createElement(Ke.Z,{expandIcon:o.createElement(je.default,null),style:{position:"relative",background:"rgba(128, 128, 128, 0.3)"}},o.createElement("img",{className:this.props.classes.headingIcon,src:ys,alt:"seq"}),o.createElement(Xe.Z,{className:this.props.classes.heading},e),o.createElement(Ge.Z,{size:"small",className:this.props.classes.delButton,onClick:()=>this.onDelete(e)},o.createElement(oe.default,null))),o.createElement(Ve.Z,null,o.createElement(c.ZP,{container:!0,direction:"column"},this.renderEnabled(e),this.renderLogLevel(e),this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].serverUrl,helperText:this.props.t("The http(s) URL including port of the seq server. If you use HTTPS a real certificate is needed; self signed certs are ot accepted."),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].serverUrl=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("Server URL")})):null,this.state.transport[e].enabled?o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.transport[e].apiKey,helperText:this.props.t("The apiKey of the seq system"),onChange:t=>{const s=JSON.parse(JSON.stringify(this.state.transport));s[e].apiKey=t.target.value,this.setState({transport:s},()=>this.onChange())},label:this.props.t("API key")})):null)))}add(e){if(e==="file"){let t=1;for(;Object.keys(this.state.transport).find(r=>r===e+t);)t++;const s=e+t,i=JSON.parse(JSON.stringify(this.state.transport));i[s]={type:e,enabled:!0,filename:"log/iobroker",fileext:".log",maxSize:0,maxFiles:0},this.setState({transport:i},()=>this.onChange())}else if(e==="syslog"){let t=1;for(;Object.keys(this.state.transport).find(r=>r===e+t);)t++;const s=e+t,i=JSON.parse(JSON.stringify(this.state.transport));i[s]={type:e,enabled:!0,host:"127.0.0.1",port:0,protocol:"udp4",path:"",facility:"",localhost:"iobroker",sysLogType:"",app_name:"",eol:""},this.setState({transport:i},()=>this.onChange())}else if(e==="http"){let t=1;for(;Object.keys(this.state.transport).find(r=>r===e+t);)t++;const s=e+t,i=JSON.parse(JSON.stringify(this.state.transport));i[s]={type:e,enabled:!0,host:"127.0.0.1",port:80,path:"/",auth:"None",ssl:!1},this.setState({transport:i},()=>this.onChange())}else if(e==="stream"){let t=1;for(;Object.keys(this.state.transport).find(r=>r===e+t);)t++;const s=e+t,i=JSON.parse(JSON.stringify(this.state.transport));i[s]={type:e,enabled:!0,stream:"/dev/null",level:"info",silent:!1,eol:""},this.setState({transport:i},()=>this.onChange())}else if(e==="seq"){let t=1;for(;Object.keys(this.state.transport).find(r=>r===e+t);)t++;const s=e+t,i=JSON.parse(JSON.stringify(this.state.transport));i[s]={type:e,enabled:!0,level:"info",serverUrl:"http://IP:PORT",apiKey:""},this.setState({transport:i},()=>this.onChange())}}render(){return o.createElement(Fe.Z,{className:this.props.classes.paper},o.createElement(c.ZP,{item:!0,className:this.props.classes.gridSettings},o.createElement(c.ZP,{container:!0,direction:"column"},o.createElement(c.ZP,{item:!0},o.createElement(te.Z,{className:this.props.classes.controlItem,variant:"standard"},o.createElement(ve.Z,null,this.props.t("Level")),o.createElement(be.Z,{variant:"standard",value:this.state.level,onChange:e=>this.setState({level:e.target.value},()=>this.onChange())},o.createElement(N.Z,{value:"silly"},"silly"),o.createElement(N.Z,{value:"debug"},"debug"),o.createElement(N.Z,{value:"info"},"info"),o.createElement(N.Z,{value:"warn"},"warn"),o.createElement(N.Z,{value:"error"},"error")))),o.createElement(c.ZP,{item:!0},o.createElement(g.Z,{variant:"standard",className:this.props.classes.controlItem,value:this.state.maxDays,helperText:this.props.t("Every day one file"),type:"number",onChange:e=>this.setState({maxDays:e.target.value},()=>this.onChange()),label:this.props.t("Maximum number of days")})),o.createElement(c.ZP,{item:!0},o.createElement($.Z,{className:this.props.classes.controlItem,control:o.createElement(ie.Z,{checked:this.state.noStdout,onChange:e=>this.setState({noStdout:e.target.checked},()=>this.onChange())}),label:this.props.t("No stdout outputs")})),Object.keys(this.state.transport).map(e=>{switch(this.state.transport[e].type){case"syslog":return this.renderSyslog(e);case"file":return this.renderFile(e);case"http":return this.renderHttp(e);case"stream":return this.renderStream(e);case"seq":return this.renderSEQ(e);default:return null}}))),o.createElement(aa.Z,null,o.createElement(W.Z,{color:"grey",className:this.props.classes.addButton,variant:"contained",onClick:()=>this.add("file"),startIcon:o.createElement(Pe.default,null)},o.createElement(vs.Z,{className:this.props.classes.buttonIcon}),this.props.t("File log")),o.createElement(W.Z,{color:"grey",className:this.props.classes.addButton,variant:"contained",onClick:()=>this.add("syslog"),startIcon:o.createElement(Pe.default,null)},o.createElement(bs.Z,{className:this.props.classes.buttonIcon}),this.props.t("Syslog")),o.createElement(W.Z,{color:"grey",className:this.props.classes.addButton,variant:"contained",onClick:()=>this.add("http"),startIcon:o.createElement(Pe.default,null)},o.createElement(fs.default,{className:this.props.classes.buttonIcon}),this.props.t("HTTP log")),o.createElement(W.Z,{color:"grey",className:this.props.classes.addButton,variant:"contained",onClick:()=>this.add("stream"),startIcon:o.createElement(Pe.default,null)},o.createElement(Es.default,{className:this.props.classes.buttonIcon}),this.props.t("Stream log")),o.createElement(W.Z,{color:"grey",className:this.props.classes.addButton,variant:"contained",onClick:()=>this.add("seq"),startIcon:o.createElement(Pe.default,null)},o.createElement("img",{src:ys,className:this.props.classes.buttonIcon,alt:"seq"}),this.props.t("SEQ log"))))}}Ss.propTypes={t:d().func,onChange:d().func.isRequired,settings:d().object.isRequired,currentHost:d().string};var ra=(0,De.default)()((0,L.withStyles)(na)(Ss)),oa=l(83732),ia=l.n(oa),Ea=l(41698),ya=l(59815),Sa=l(25817),Ca=l(27233),xa=l(3819),wt=l(4819);const la=n=>({paper:{height:"100%",maxHeight:"100%",maxWidth:"100%",overflow:"auto",padding:n.spacing(1)},title:{width:"100%",height:32},divWithoutTitle:{width:"100%",height:"calc(100% - "+32+"px)",border:"2px solid #00000000"},error:{border:"2px solid #FF0000"}});class Cs extends S.Component{constructor(e){super(e),this.state={settings:JSON.stringify(this.props.settings||{},null,2),error:!1}}static getDerivedStateFromProps(e,t){return null}editorDidMount(e,t){e.focus()}onChange(e){const t={settings:e};try{const s=JSON.parse(e);this.state.error&&(t.error=!1),this.setState(t,()=>this.props.onChange(s))}catch(s){t.error=!0,this.setState(t)}}render(){return wt.createElement(Fe.Z,{className:this.props.classes.paper},wt.createElement("div",{className:this.props.classes.title},this.props.t("For future use")),wt.createElement("div",{className:(0,us.default)(this.props.classes.divWithoutTitle,this.state.error&&this.props.classes.error)},wt.createElement(ia(),{mode:"json",width:"100%",height:"100%",theme:this.props.themeName==="dark"?"clouds_midnight":"chrome",value:this.state.settings,onChange:e=>this.onChange(e),name:"UNIQUE_ID_OF_DIV1",fontSize:14,setOptions:{enableBasicAutocompletion:!0,enableLiveAutocompletion:!0,enableSnippets:!0},editorProps:{$blockScrolling:!0}})))}}Cs.propTypes={t:d().func,onChange:d().func.isRequired,settings:d().object.isRequired,themeName:d().string};var ca=(0,De.default)()((0,L.withStyles)(la)(Cs));const pa=n=>({content:{height:500,overflow:"hidden"},tabPanel:{width:"100%",height:`calc(100% - ${n.mixins.toolbar.minHeight}px)`,overflow:"auto"},selected:{color:n.palette.mode==="dark"?"#FFF !important":"#222 !important"}});class xs extends S.Component{constructor(e){super(e),this.state={currentTab:0,hasChanges:[],currentHost:this.props.currentHost,hosts:this.props.hosts,loading:!0,confirmExit:!1,showRestart:!1,system:null,multihostService:null,objects:null,states:null,log:null,plugins:null,saving:!1}}componentDidMount(){this.getSettings(this.state.currentHost)}renderConfirmDialog(){return this.state.confirmExit?a().createElement(Ut.default,{text:this.props.t("Discard unsaved changes?"),onClose:e=>this.setState({confirmExit:!1},()=>e&&this.props.onClose())}):null}renderRestartDialog(){return this.state.showRestart?a().createElement(Ut.default,{title:this.props.t("Please confirm"),text:a().createElement(a().Fragment,null,a().createElement("div",null,this.props.t("Restart works only if controller started as system service.")),a().createElement("div",null,this.props.t("Would you like to restart the controller for your changes to take effect?"))),ok:this.props.t("Restart"),cancel:this.props.t("No restart"),onClose:e=>this.setState({showRestart:!1},()=>{e&&this.props.socket.restartController(this.props.currentHost).then(()=>setTimeout(()=>window.location.reload(!1),500)).catch(t=>window.alert(`Cannot restart: ${t}`)),this.props.onClose()})}):null}getSettings(e){this.props.socket.readBaseSettings(e||this.state.currentHost).then(t=>{t&&t.config&&(delete t.config.dataDirComment,this.originalSettings=JSON.parse(JSON.stringify(t.config)),t.config.loading=!1,this.setState(t.config))})}onSave(e){const t={system:this.state.system,multihostService:this.state.multihostService,objects:this.state.objects,states:this.state.states,log:this.state.log,plugins:this.state.plugins},s=Object.assign({},this.originalSettings,t);this.setState({saving:!0},()=>{this.props.socket.writeBaseSettings(e||this.state.currentHost,s).then(()=>{this.originalSettings=JSON.parse(JSON.stringify(t)),this.setState({hasChanges:[],showRestart:!0,saving:!1})}).catch(i=>{window.alert("Cannot save settings: "+i),this.setState({saving:!1})})})}updateSettings(e,t){const s=[...this.state.hasChanges],i=JSON.stringify(this.originalSettings[e])!==JSON.stringify(t),r=s.indexOf(e);i&&r===-1?s.push(e):!i&&r!==-1&&s.splice(r,1),this.setState({[e]:t,hasChanges:s})}renderSystem(){const e="system";return a().createElement(Qs,{settings:this.state[e],t:this.props.t,currentHost:this.props.currentHost,onChange:t=>this.updateSettings(e,t)})}renderMultihost(){const e="multihostService";return a().createElement(qs,{settings:this.state[e],t:this.props.t,socket:this.props.socket,currentHost:this.props.currentHost,onChange:t=>this.updateSettings(e,t)})}renderObjects(){const e="objects";return a().createElement(ea,{settings:this.state[e],t:this.props.t,socket:this.props.socket,currentHost:this.props.currentHost,onChange:t=>this.updateSettings(e,t)})}renderStates(){const e="states";return a().createElement(sa,{settings:this.state[e],t:this.props.t,socket:this.props.socket,currentHost:this.props.currentHost,onChange:t=>this.updateSettings(e,t)})}renderLog(){const e="log";return a().createElement(ra,{settings:this.state[e],t:this.props.t,socket:this.props.socket,currentHost:this.props.currentHost,onChange:t=>this.updateSettings(e,t)})}renderPlugins(){const e="plugins";return a().createElement(ca,{settings:this.state[e],t:this.props.t,themeName:this.props.themeName,onChange:t=>this.updateSettings(e,t)})}render(){return a().createElement(yt.Z,{className:this.props.classes.dialog,open:!0,onClose:()=>!1,fullWidth:!0,maxWidth:"xl","aria-labelledby":"base-settings-dialog-title"},a().createElement(Ht.Z,{id:"base-settings-dialog-title"},this.props.t("Host Base Settings"),": ",this.props.currentHostName||this.props.currentHost),a().createElement(St.Z,{className:this.props.classes.content},a().createElement(Vs.Z,{position:"static"},a().createElement(Ks.Z,{value:this.state.currentTab,onChange:(e,t)=>this.setState({currentTab:t}),"aria-label":"system tabs",indicatorColor:"secondary"},a().createElement(Be.Z,{label:this.props.t("System"),id:"system-tab","aria-controls":"simple-tabpanel-0",classes:{selected:this.props.classes.selected}}),a().createElement(Be.Z,{label:this.props.t("Multi-host"),id:"multihost-tab",classes:{selected:this.props.classes.selected},"aria-controls":"simple-tabpanel-1"}),a().createElement(Be.Z,{label:this.props.t("Objects"),id:"objects-tab","aria-controls":"simple-tabpanel-3",classes:{selected:this.props.classes.selected}}),a().createElement(Be.Z,{label:this.props.t("States"),id:"states-tab","aria-controls":"simple-tabpanel-4",classes:{selected:this.props.classes.selected}}),a().createElement(Be.Z,{label:this.props.t("Log"),id:"log-tab","aria-controls":"simple-tabpanel-5",classes:{selected:this.props.classes.selected}}),a().createElement(Be.Z,{label:this.props.t("Plugins"),id:"plugins-tab","aria-controls":"simple-tabpanel-6",classes:{selected:this.props.classes.selected}}))),this.state.loading?a().createElement(Xs.Z,null):null,!this.state.loading&&this.state.currentTab===0?a().createElement("div",{className:this.props.classes.tabPanel},this.renderSystem()):null,!this.state.loading&&this.state.currentTab===1?a().createElement("div",{className:this.props.classes.tabPanel},this.renderMultihost()):null,!this.state.loading&&this.state.currentTab===2?a().createElement("div",{className:this.props.classes.tabPanel},this.renderObjects()):null,!this.state.loading&&this.state.currentTab===3?a().createElement("div",{className:this.props.classes.tabPanel},this.renderStates()):null,!this.state.loading&&this.state.currentTab===4?a().createElement("div",{className:this.props.classes.tabPanel},this.renderLog()):null,!this.state.loading&&this.state.currentTab===5?a().createElement("div",{className:this.props.classes.tabPanel},this.renderPlugins()):null,this.renderConfirmDialog(),this.renderRestartDialog()),a().createElement(Ct.Z,null,a().createElement(W.Z,{variant:"contained",disabled:!this.state.hasChanges.length||this.state.saving,onClick:()=>this.onSave(),color:"primary",startIcon:a().createElement(ss.default,null)},this.props.t("Save & Close")),a().createElement(W.Z,{variant:"contained",color:"grey",disabled:this.state.saving,onClick:()=>this.state.hasChanges.length?this.setState({confirmExit:!0}):this.props.onClose(),startIcon:a().createElement(Ce.default,null)},this.state.hasChanges.length?this.props.t("Cancel"):this.props.t("Close"))))}}xs.propTypes={t:d().func,currentHost:d().string,currentHostName:d().string,hosts:d().array,lang:d().string,socket:d().object,themeName:d().string,onClose:d().func.isRequired};var ha=(0,De.default)()((0,L.withStyles)(pa)(xs)),ws=l(13046),da=l(89786);class Ns extends S.Component{constructor(e){super(e),this.state={response:null,error:null,starting:!0},this.updating=!1,this.textareaRef=a().createRef(),this.link=`${window.location.protocol}//${window.location.host}${window.location.pathname}`}setUpdating(e){this.updating!==e&&(this.updating=e,this.props.onUpdating(e))}componentDidMount(){this.props.socket.getRawSocket().emit("sendToHost",this.props.hostId,"upgradeController",{version:this.props.version,adminInstance:parseInt(this.props.adminInstance.split(".").pop(),10)},e=>{e.result?(this.setUpdating(!0),this.intervall=setInterval(()=>this.checkStatus(),1e3),this.startTimeout=setTimeout(()=>{this.startTimeout=null,this.setState({starting:!1})},1e4)):(this.setState({error:p.I18n.t("Not updatable"),starting:!1}),this.setUpdating(!1))})}componentWillUnmount(){this.intervall&&clearInterval(this.intervall),this.intervall=null,this.startTimeout&&clearTimeout(this.startTimeout),this.startTimeout=null}checkStatus(){fetch(this.link).then(e=>e.json()).then(e=>{e&&e.stderr&&(e.stderr=e.stderr.filter(t=>t.trim())),e&&!e.running&&e.success&&e.stdout?(e.stdout.push(""),e.stdout.push("---------------------------------------------------"),e.stdout.push(p.I18n.t("js-controller was successfully updated to %s",this.props.version))):e!=null&&e.stdout&&(e.stdout.unshift(""),e.stdout.unshift("---------------------------------------------------"),e.stdout.unshift(p.I18n.t("updating js-controller to %s...",this.props.version))),this.setState({response:e,error:null},()=>{e&&!e.running?(this.setUpdating(!1),this.intervall&&clearInterval(this.intervall),this.intervall=null):e!=null&&e.running&&this.setUpdating(!0),this.textareaRef.current&&setTimeout(()=>this.textareaRef.current.scrollTop=this.textareaRef.current.scrollHeight,100)})}).catch(e=>{this.state.starting||this.setState({error:e.toString()},()=>this.setUpdating(!1))})}render(){var e,t,s,i,r;return a().createElement(yt.Z,{onClose:(E,w)=>{w!=="escapeKeyDown"&&w!=="backdropClick"&&this.props.onClose()},open:!0,maxWidth:"lg",fullWidth:!0},a().createElement(Ht.Z,null,p.I18n.t("Updating JS-Controller...")),a().createElement(St.Z,{style:{height:400,padding:"0 20px",overflow:"hidden"}},(!this.state.response||this.state.response.running)&&!this.state.error?a().createElement(h.LinearProgress,null):null,this.state.response||this.state.error?a().createElement("textarea",{ref:this.textareaRef,style:{width:"100%",height:"100%",resize:"none",background:this.props.themeName==="dark"?"#000":"#fff",color:this.props.themeName==="dark"?"#EEE":"#111",boxSizing:"border-box",fontFamily:"Consolas,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New, monospace",border:(e=this.state.response)!=null&&e.success?"2px solid green":this.state.error||this.state.response&&!this.state.response.running&&!this.state.response.success?"2px solid red":void 0},value:this.state.error?this.state.error:this.state.response.stderr&&this.state.response.stderr.length?this.state.response.stderr.join(`
329
329
  `):this.state.response.stdout.join(`
330
- `),readOnly:!0}):null),a().createElement(Ct.Z,null,a().createElement(W.Z,{variant:"contained",disabled:this.state.starting||!this.state.error&&this.state.response&&!this.state.response.running,onClick:()=>{this.state.response&&this.state.response.success&&window.location.reload(),this.props.onClose()},color:"grey",startIcon:a().createElement(Ce.default,null)},p.I18n.t("Close"))))}}Ns.propTypes={socket:d().object.isRequired,hostId:d().string.isRequired,onClose:d().func.isRequired,version:d().string.isRequired,adminInstance:d().string.isRequired,onUpdating:d().func.isRequired};var ma=Ns,ua=Object.defineProperty,ga=(n,e,t)=>e in n?ua(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,le=(n,e,t)=>(ga(n,typeof e!="symbol"?e+"":e,t),t),Qe=(n,e,t)=>new Promise((s,i)=>{var r=C=>{try{w(t.next(C))}catch(V){i(V)}},E=C=>{try{w(t.throw(C))}catch(V){i(V)}},w=C=>C.done?s(C.value):Promise.resolve(C.value).then(r,E);w((t=t.apply(n,e)).next())});const fa=()=>({grow:{flexGrow:1},cards:{display:"flex",flexFlow:"wrap",justifyContent:"center"},tabHeaderWrapper:{height:30,display:"flex",margin:7},tabHeaderFirstItem:{width:312,paddingLeft:30,fontSize:14,fontWeight:600,alignSelf:"center"},tabHeaderItem:{flex:1,fontSize:14,fontWeight:600,alignSelf:"center"},tabHeaderItemButton:{width:144,fontSize:14,fontWeight:600,alignSelf:"center"},widthButtons:{width:240},tabFlex:{display:"flex",flex:1,padding:"0 10px"},bold:{fontWeight:"bold"},wrapperInfo:{display:"flex",flexFlow:"wrap",width:"100%"},marginRight:{marginRight:"auto"},wrapperBlockItem:{display:"flex",flexFlow:"nowrap",whiteSpace:"nowrap",margin:10},ul:{paddingTop:0,paddingBottom:0,paddingLeft:16,paddingRight:8},nowrap:{display:"flex",flexFlow:"nowrap",flex:1,whiteSpace:"nowrap",marginRight:5},"@media screen and (max-width: 1100px)":{hidden1100:{display:"none !important"}},"@media screen and (max-width: 800px)":{hidden800:{display:"none !important"}},"@media screen and (max-width: 600px)":{hidden600:{display:"none !important"}},jsController:{fontSize:12,opacity:.4,display:"block"}});let Ee={};const fe={Uptime:je.Z.formatSeconds,"System uptime":je.Z.formatSeconds,RAM:je.Z.formatRam,Speed:je.Z.formatSpeed,"Disk size":je.Z.formatBytes,"Disk free":je.Z.formatBytes},Is=(n,e,t,s)=>{const i=s?s[n]:null;return i?typeof i=="string"?i:[a().createElement("ul",{className:t.ul},i&&typeof i=="object"?Object.keys(i).map(r=>a().createElement("li",{key:r},a().createElement("span",{className:t.black},a().createElement("span",{className:t.bold},e(r),": "),fe[r]?fe[r](i[r],e):i[r]||"--"))):a().createElement(Se.Z,null)),a().createElement("div",{className:t.wrapperInfo},a().createElement("div",{className:t.marginRight},i&&typeof i=="object"?Object.keys(i).map((r,E)=>E<5&&a().createElement("div",{className:t.wrapperBlockItem,key:r},a().createElement("span",{className:p.Utils.clsx(t.bold,t.nowrap)},e(r),": "),fe[r]?fe[r](i[r],e):i[r]||"--")):a().createElement(Se.Z,null)),a().createElement("div",{className:t.marginRight},i&&typeof i=="object"?Object.keys(i).map((r,E)=>E>4&&E<10&&a().createElement("div",{className:t.wrapperBlockItem,key:r},a().createElement("span",{className:p.Utils.clsx(t.bold,t.nowrap)},e(r),": "),fe[r]?fe[r](i[r],e):i[r]||"--")):a().createElement(Se.Z,null)),a().createElement("div",{className:t.marginRight},i&&typeof i=="object"&&Object.keys(i).map((r,E)=>E>10&&a().createElement("div",{className:t.wrapperBlockItem,key:r},i&&typeof i=="object"?a().createElement(a().Fragment,null,a().createElement("span",{className:p.Utils.clsx(t.bold,t.nowrap)},e(r),": "),fe[r]?fe[r](i[r],e):i[r]||"--"):a().createElement(Se.Z,null)))))]:[a().createElement(Se.Z,null)]},Zs=n=>n==="debug"?a().createElement(B.Z,null):n==="info"?a().createElement(Bt.default,null):n==="warn"?a().createElement(ut.default,null):n==="error"?a().createElement(Dt.default,null):null;class ks extends S.Component{constructor(e){super(e),le(this,"t",(t,s,i)=>(s!==void 0&&i!==void 0&&!Ee[`${t} ${s} ${i}`]?Ee[`${t} ${s} ${i}`]=this.props.t(t,s,i):s!==void 0&&!Ee[`${t} ${s}`]?Ee[`${t} ${s}`]=this.props.t(t,s):Ee[t]||(Ee[t]=this.props.t(t)),s!==void 0&&i!==void 0?Ee[`${t} ${s} ${i}`]:s!==void 0?Ee[`${t} ${s}`]:Ee[t])),le(this,"getHostsData",(t,s)=>{const i=t.map(r=>s[r._id]?this.props.socket.getHostInfo(r._id,null,this.state.readTimeoutMs).catch(E=>(console.error("Cannot get getHostInfo: "+E),E.toString().includes("timeout")&&this.setState({showSlowConnectionWarning:!0}),E)).then(E=>({id:r._id,data:E})):{id:r._id,data:"offline"});return new Promise(r=>Promise.all(i).then(E=>{const w={};E.forEach(C=>w[C.id]=C.data),r(w)}))}),le(this,"readInfo",()=>this.props.socket.getHosts(!0,!1,this.state.readTimeoutMs).then(t=>this.props.socket.getRepository(this.props.currentHost,{update:!1},!1,this.state.readTimeoutMs).then(s=>Qe(this,null,function*(){const i=JSON.parse(JSON.stringify(this.state.alive));for(let w=0;w<t.length;w++){let C=yield this.props.socket.getState(`${t[w]._id}.alive`);i[t[w]._id]=C?!!C.val:!1}const r=yield this.getHostsData(t,i),E={alive:i,hosts:t,hostsData:r,repository:s};this.state.filterText&&t.length<=2&&(E.filterText=""),this.setState(E)})).catch(s=>{window.alert("Cannot getRepository: "+s),s.toString().includes("timeout")&&this.setState({showSlowConnectionWarning:!0})}))),le(this,"updateHosts",(t,s)=>{const i=JSON.parse(JSON.stringify(this.state.hosts)),r=JSON.parse(JSON.stringify(this.state.alive));Array.isArray(t)||(t={id:t,obj:s,type:s?"changed":"delete"}),Promise.all(t.map(E=>Qe(this,null,function*(){const w=i.find(C=>C._id===E.id);if(w){const C=i.indexOf(w);E.obj?i[C]=E.obj:i.splice(C,1)}else{const C=yield this.props.socket.getState(E.id+".alive");r[E.id]=C?C.val:!1,i.push(E.obj)}}))).then(()=>{const E={hosts:i,alive:r};this.state.filterText&&i.length<=2&&(E.filterText=""),this.setState(E)})}),le(this,"updateHostsAlive",t=>{let s=JSON.parse(JSON.stringify(this.state.alive)),i=!1;t.forEach(r=>{r.type==="delete"?s[r.id]!==void 0&&(delete s[r.id],i=!0):!!s[r.id]!=!!r.alive&&(s[r.id]=r.alive,i=!0)}),i&&this.setState({alive:s})}),le(this,"renderEditObjectDialog",()=>this.state.editDialog.dialogName?a().createElement(Hs,{obj:this.state.hosts[this.state.editDialog.index],socket:this.props.socket,dialogName:this.state.editDialog.dialogName,t:this.t,expertMode:this.props.expertMode,onClose:t=>{this.setState({editDialog:{index:0,dialogName:""}}),t&&this.props.socket.setObject(t._id,t).then(s=>this.forceUpdate()).catch(s=>alert("Cannot write object: "+s))}}):null),le(this,"renderSlowConnectionWarning",()=>this.state.showSlowConnectionWarning?a().createElement(ws.Z,{readTimeoutMs:this.state.readTimeoutMs,t:this.t,onClose:t=>Qe(this,null,function*(){this.setState({showSlowConnectionWarning:!1}),t&&(this.setState({readTimeoutMs:t}),yield this.readInfo())})}):null),le(this,"closeHostUpdateDialog",t=>this.setState({hostUpdateDialog:!1,hostUpdate:null},t)),le(this,"openHostUpdateDialog",(t,s)=>Qe(this,null,function*(){const i=yield this.props.socket.checkFeatureSupported("CONTROLLER_UI_UPGRADE");this.setState({hostUpdateDialog:!0,hostUpdate:t,updateAvailable:i},s)})),le(this,"getNews",(t,s=!1)=>{const i=this.state.repository["js-controller"],r=this.state.hosts.find(w=>w.common.name===this.state.hostUpdate).common.installedVersion,E=[];return r&&i&&i.news&&Object.keys(i.news).forEach(w=>{try{(Pt().gt(w,r)||s)&&E.push({version:w,news:this.props.noTranslation?i.news[w].en:i.news[w][this.props.lang]||i.news[w].en})}catch(C){console.warn(`Cannot compare "${w}" and "${r}"`)}}),E}),le(this,"hostUpdateDialogCb",()=>this.state.hostUpdateDialog?a().createElement(da.Z,{open:!0,adapter:this.state.hostUpdate,adapterObject:this.state.repository["js-controller"],t:this.t,textUpdate:this.state.updateAvailable?this.t("Start update"):this.t("Show instructions"),rightDependencies:!0,news:this.getNews(),toggleTranslation:this.props.toggleTranslation,noTranslation:this.props.noTranslation,onUpdate:()=>Qe(this,null,function*(){const t=this.state.hostUpdate;this.closeHostUpdateDialog(()=>this.setState({updateDialog:t}))}),onClose:()=>this.closeHostUpdateDialog()}):null),this.state={viewMode:(window._localStorage||window.localStorage).getItem("Hosts.viewMode")==="true",alive:{},hosts:[],repository:{},hostsData:{},filterText:(window._localStorage||window.localStorage).getItem("Hosts.filterText")||"",showSlowConnectionWarning:!1,readTimeoutMs:ws.Z.getReadTimeoutMs(),hostUpdate:!1,updateDialog:!1,hostUpdateDialog:null,editDialog:{index:0,dialogName:""},baseSettingsDialog:{index:0,dialogName:""}}}componentDidMount(){this.readInfo().then(()=>{this.props.hostsWorker.registerHandler(this.updateHosts),this.props.hostsWorker.registerAliveHandler(this.updateHostsAlive)})}componentWillUnmount(){this.props.hostsWorker.unregisterHandler(this.updateHosts),this.props.hostsWorker.unregisterAliveHandler(this.updateHostsAlive)}getPanels(){const e=this.renderHosts().filter(t=>this.state.filterText?t.name.toLowerCase().includes(this.state.filterText.toLowerCase()):!0).map(t=>this.state.viewMode?t.renderCard:t.renderRow);return e.length?e:this.t("All items are filtered out")}baseSettingsSettingsDialog(){return this.state.baseSettingsDialog.dialogName?a().createElement(ha,{currentHost:this.state.baseSettingsDialog.dialogName,hosts:this.state.hosts,themeName:this.props.themeName,currentHostName:this.state.baseSettingsDialog.dialogName,key:"base",onClose:()=>this.setState({baseSettingsDialog:{index:0,dialogName:""}}),lang:this.props.lang,socket:this.props.socket,t:this.t}):null}renderUpdateDialog(){return this.state.updateDialog?this.state.updateAvailable?a().createElement(ma,{socket:this.props.socket,hostId:this.state.updateDialog,version:this.state.repository["js-controller"].version,onClose:()=>this.setState({updateDialog:!1}),adminInstance:this.props.adminInstance,onUpdating:e=>this.props.onUpdating(e)}):a().createElement($s,{socket:this.props.socket,hostId:this.state.updateDialog,theme:this.props.theme,version:this.state.repository["js-controller"].version,onClose:()=>this.setState({updateDialog:!1})}):null}renderHosts(){return this.state.hosts.map(({_id:e,common:{name:t,icon:s,color:i,title:r,installedVersion:E},native:{os:{platform:w}}},C)=>{var V,H;return{renderCard:this.state.viewMode?a().createElement(Ps,{systemConfig:this.props.systemConfig,key:e,setEditDialog:()=>this.setState({editDialog:{index:C,dialogName:t}}),setBaseSettingsDialog:()=>this.setState({baseSettingsDialog:{index:C,dialogName:t}}),hostsWorker:this.props.hostsWorker,expertMode:this.props.expertMode,socket:this.props.socket,name:t,getLogLevelIcon:Zs,alive:this.state.alive[e],color:i,image:s,title:r,os:w,openHostUpdateDialog:()=>this.openHostUpdateDialog(t),description:Is(e,this.t,this.props.classes,this.state.hostsData)[0],hostData:this.state.hostsData[e],formatInfo:fe,available:((V=this.state.repository["js-controller"])==null?void 0:V.version)||"-",executeCommandRemove:()=>this.props.executeCommand(`host remove ${t}`),isCurrentHost:this.props.currentHost===e,installed:E,events:"- / -",t:this.t,_id:e,showAdaptersWarning:this.props.showAdaptersWarning}):null,renderRow:this.state.viewMode?null:a().createElement(Ms,{systemConfig:this.props.systemConfig,key:e,setEditDialog:()=>this.setState({editDialog:{index:C,dialogName:t}}),setBaseSettingsDialog:()=>this.setState({baseSettingsDialog:{index:C,dialogName:t}}),hostsWorker:this.props.hostsWorker,expertMode:this.props.expertMode,socket:this.props.socket,name:t,alive:this.state.alive[e],color:i,image:s,title:r,os:w,getLogLevelIcon:Zs,openHostUpdateDialog:()=>this.openHostUpdateDialog(t),executeCommandRemove:()=>this.props.executeCommand(`host remove ${t}`),isCurrentHost:this.props.currentHost===e,description:Is(e,this.t,this.props.classes,this.state.hostsData)[1],hostData:this.state.hostsData[e],formatInfo:fe,available:((H=this.state.repository["js-controller"])==null?void 0:H.version)||"-",installed:E,events:"- / -",t:this.t,_id:e,showAdaptersWarning:this.props.showAdaptersWarning}),name:t}})}render(){const{classes:e,expertMode:t}=this.props;return this.state.hosts.length?a().createElement(gt.Z,null,this.renderEditObjectDialog(),this.baseSettingsSettingsDialog(),this.renderSlowConnectionWarning(),this.hostUpdateDialogCb(),this.renderUpdateDialog(),a().createElement(Ft.Z,null,a().createElement(q.Z,{title:this.t("Show / hide List")},a().createElement(mt.Z,{size:"large",onClick:()=>{(window._localStorage||window.localStorage).setItem("Hosts.viewMode",this.state.viewMode?"false":"true"),this.setState({viewMode:!this.state.viewMode})}},this.state.viewMode?a().createElement(At.Z,null):a().createElement(jt.Z,null))),a().createElement(q.Z,{title:this.t("Reload")},a().createElement(mt.Z,{size:"large",onClick:()=>this.forceUpdate()},a().createElement(He.default,null))),a().createElement("div",{className:e.grow}),this.state.hosts.length>2?a().createElement(h.TextField,{variant:"standard",label:this.t("Filter"),style:{margin:"5px 0"},value:this.state.filterText,onChange:s=>{(window._localStorage||window.localStorage).setItem("Hosts.viewMode",s.target.value),this.setState({filterText:s.target.value})},InputProps:{endAdornment:this.state.filterText?a().createElement(h.InputAdornment,{position:"end"},a().createElement(mt.Z,{size:"small",onClick:()=>{(window._localStorage||window.localStorage).setItem("Hosts.viewMode",""),this.setState({filterText:""})}},a().createElement(Ce.default,null))):null}}):null,a().createElement("div",{className:e.grow})),a().createElement(ft.Z,{overflow:"auto"},a().createElement("div",{className:this.state.viewMode?e.cards:""},!this.state.viewMode&&a().createElement("div",{className:e.tabHeaderWrapper},a().createElement("div",{className:e.tabHeaderFirstItem},this.t("Name:")),a().createElement("div",{className:e.tabFlex},a().createElement("div",{className:p.Utils.clsx(e.tabHeaderItem,e.hidden800)},"CPU"),a().createElement("div",{className:p.Utils.clsx(e.tabHeaderItem,e.hidden800)},"RAM"),a().createElement("div",{className:p.Utils.clsx(e.tabHeaderItem,e.hidden800)},this.t("Uptime")),a().createElement("div",{className:p.Utils.clsx(e.tabHeaderItem,e.hidden1100)},this.t("Available"),a().createElement("div",{className:e.jsController},"js-controller")),a().createElement("div",{className:p.Utils.clsx(e.tabHeaderItem,e.hidden1100)},this.t("Installed"),a().createElement("div",{className:e.jsController},"js-controller")),a().createElement("div",{className:p.Utils.clsx(e.tabHeaderItem,e.hidden600)},this.t("Events")),a().createElement("div",{className:p.Utils.clsx(e.tabHeaderItemButton,t&&e.widthButtons)}))),this.getPanels()))):a().createElement(h.LinearProgress,null)}}ks.propTypes={t:d().func,expertMode:d().bool,socket:d().object,systemConfig:d().object,executeCommand:d().func,hostsWorker:d().object,showAdaptersWarning:d().func,theme:d().object,noTranslation:d().bool,toggleTranslation:d().func,currentHost:d().string,adminInstance:d().string,onUpdating:d().func};var va=(0,p.withWidth)()((0,L.withStyles)(fa)(ks))}}]);
330
+ `),readOnly:!0}):null),a().createElement(Ct.Z,null,a().createElement(W.Z,{variant:"contained",disabled:this.state.starting||!this.state.error&&((t=this.state.response)==null?void 0:t.running),onClick:()=>{var E;(E=this.state.response)!=null&&E.success&&window.location.reload(),this.props.onClose()},color:(s=this.state.response)!=null&&s.success?"primary":"grey",startIcon:(i=this.state.response)!=null&&i.success?a().createElement(ke.default,null):a().createElement(Ce.default,null)},(r=this.state.response)!=null&&r.success?p.I18n.t("Reload"):p.I18n.t("Close"))))}}Ns.propTypes={socket:d().object.isRequired,hostId:d().string.isRequired,onClose:d().func.isRequired,version:d().string.isRequired,adminInstance:d().string.isRequired,onUpdating:d().func.isRequired,themeName:d().string};var ma=Ns,ua=Object.defineProperty,ga=(n,e,t)=>e in n?ua(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,le=(n,e,t)=>(ga(n,typeof e!="symbol"?e+"":e,t),t),Qe=(n,e,t)=>new Promise((s,i)=>{var r=C=>{try{w(t.next(C))}catch(V){i(V)}},E=C=>{try{w(t.throw(C))}catch(V){i(V)}},w=C=>C.done?s(C.value):Promise.resolve(C.value).then(r,E);w((t=t.apply(n,e)).next())});const fa=()=>({grow:{flexGrow:1},cards:{display:"flex",flexFlow:"wrap",justifyContent:"center"},tabHeaderWrapper:{height:30,display:"flex",margin:7},tabHeaderFirstItem:{width:312,paddingLeft:30,fontSize:14,fontWeight:600,alignSelf:"center"},tabHeaderItem:{flex:1,fontSize:14,fontWeight:600,alignSelf:"center"},tabHeaderItemButton:{width:144,fontSize:14,fontWeight:600,alignSelf:"center"},widthButtons:{width:240},tabFlex:{display:"flex",flex:1,padding:"0 10px"},bold:{fontWeight:"bold"},wrapperInfo:{display:"flex",flexFlow:"wrap",width:"100%"},marginRight:{marginRight:"auto"},wrapperBlockItem:{display:"flex",flexFlow:"nowrap",whiteSpace:"nowrap",margin:10},ul:{paddingTop:0,paddingBottom:0,paddingLeft:16,paddingRight:8},nowrap:{display:"flex",flexFlow:"nowrap",flex:1,whiteSpace:"nowrap",marginRight:5},"@media screen and (max-width: 1100px)":{hidden1100:{display:"none !important"}},"@media screen and (max-width: 800px)":{hidden800:{display:"none !important"}},"@media screen and (max-width: 600px)":{hidden600:{display:"none !important"}},jsController:{fontSize:12,opacity:.4,display:"block"}});let Ee={};const fe={Uptime:Ae.Z.formatSeconds,"System uptime":Ae.Z.formatSeconds,RAM:Ae.Z.formatRam,Speed:Ae.Z.formatSpeed,"Disk size":Ae.Z.formatBytes,"Disk free":Ae.Z.formatBytes},Is=(n,e,t,s)=>{const i=s?s[n]:null;return i?typeof i=="string"?i:[a().createElement("ul",{className:t.ul},i&&typeof i=="object"?Object.keys(i).map(r=>a().createElement("li",{key:r},a().createElement("span",{className:t.black},a().createElement("span",{className:t.bold},e(r),": "),fe[r]?fe[r](i[r],e):i[r]||"--"))):a().createElement(Se.Z,null)),a().createElement("div",{className:t.wrapperInfo},a().createElement("div",{className:t.marginRight},i&&typeof i=="object"?Object.keys(i).map((r,E)=>E<5&&a().createElement("div",{className:t.wrapperBlockItem,key:r},a().createElement("span",{className:p.Utils.clsx(t.bold,t.nowrap)},e(r),": "),fe[r]?fe[r](i[r],e):i[r]||"--")):a().createElement(Se.Z,null)),a().createElement("div",{className:t.marginRight},i&&typeof i=="object"?Object.keys(i).map((r,E)=>E>4&&E<10&&a().createElement("div",{className:t.wrapperBlockItem,key:r},a().createElement("span",{className:p.Utils.clsx(t.bold,t.nowrap)},e(r),": "),fe[r]?fe[r](i[r],e):i[r]||"--")):a().createElement(Se.Z,null)),a().createElement("div",{className:t.marginRight},i&&typeof i=="object"&&Object.keys(i).map((r,E)=>E>10&&a().createElement("div",{className:t.wrapperBlockItem,key:r},i&&typeof i=="object"?a().createElement(a().Fragment,null,a().createElement("span",{className:p.Utils.clsx(t.bold,t.nowrap)},e(r),": "),fe[r]?fe[r](i[r],e):i[r]||"--"):a().createElement(Se.Z,null)))))]:[a().createElement(Se.Z,null)]},Zs=n=>n==="debug"?a().createElement(B.Z,null):n==="info"?a().createElement(Bt.default,null):n==="warn"?a().createElement(ut.default,null):n==="error"?a().createElement(Dt.default,null):null;class Ts extends S.Component{constructor(e){super(e),le(this,"t",(t,s,i)=>(s!==void 0&&i!==void 0&&!Ee[`${t} ${s} ${i}`]?Ee[`${t} ${s} ${i}`]=this.props.t(t,s,i):s!==void 0&&!Ee[`${t} ${s}`]?Ee[`${t} ${s}`]=this.props.t(t,s):Ee[t]||(Ee[t]=this.props.t(t)),s!==void 0&&i!==void 0?Ee[`${t} ${s} ${i}`]:s!==void 0?Ee[`${t} ${s}`]:Ee[t])),le(this,"getHostsData",(t,s)=>{const i=t.map(r=>s[r._id]?this.props.socket.getHostInfo(r._id,null,this.state.readTimeoutMs).catch(E=>(console.error("Cannot get getHostInfo: "+E),E.toString().includes("timeout")&&this.setState({showSlowConnectionWarning:!0}),E)).then(E=>({id:r._id,data:E})):{id:r._id,data:"offline"});return new Promise(r=>Promise.all(i).then(E=>{const w={};E.forEach(C=>w[C.id]=C.data),r(w)}))}),le(this,"readInfo",()=>this.props.socket.getHosts(!0,!1,this.state.readTimeoutMs).then(t=>this.props.socket.getRepository(this.props.currentHost,{update:!1},!1,this.state.readTimeoutMs).then(s=>Qe(this,null,function*(){const i=JSON.parse(JSON.stringify(this.state.alive));for(let w=0;w<t.length;w++){let C=yield this.props.socket.getState(`${t[w]._id}.alive`);i[t[w]._id]=C?!!C.val:!1}const r=yield this.getHostsData(t,i),E={alive:i,hosts:t,hostsData:r,repository:s};this.state.filterText&&t.length<=2&&(E.filterText=""),this.setState(E)})).catch(s=>{window.alert("Cannot getRepository: "+s),s.toString().includes("timeout")&&this.setState({showSlowConnectionWarning:!0})}))),le(this,"updateHosts",(t,s)=>{const i=JSON.parse(JSON.stringify(this.state.hosts)),r=JSON.parse(JSON.stringify(this.state.alive));Array.isArray(t)||(t={id:t,obj:s,type:s?"changed":"delete"}),Promise.all(t.map(E=>Qe(this,null,function*(){const w=i.find(C=>C._id===E.id);if(w){const C=i.indexOf(w);E.obj?i[C]=E.obj:i.splice(C,1)}else{const C=yield this.props.socket.getState(E.id+".alive");r[E.id]=C?C.val:!1,i.push(E.obj)}}))).then(()=>{const E={hosts:i,alive:r};this.state.filterText&&i.length<=2&&(E.filterText=""),this.setState(E)})}),le(this,"updateHostsAlive",t=>{let s=JSON.parse(JSON.stringify(this.state.alive)),i=!1;t.forEach(r=>{r.type==="delete"?s[r.id]!==void 0&&(delete s[r.id],i=!0):!!s[r.id]!=!!r.alive&&(s[r.id]=r.alive,i=!0)}),i&&this.setState({alive:s})}),le(this,"renderEditObjectDialog",()=>this.state.editDialog.dialogName?a().createElement(Hs,{obj:this.state.hosts[this.state.editDialog.index],socket:this.props.socket,dialogName:this.state.editDialog.dialogName,t:this.t,expertMode:this.props.expertMode,onClose:t=>{this.setState({editDialog:{index:0,dialogName:""}}),t&&this.props.socket.setObject(t._id,t).then(s=>this.forceUpdate()).catch(s=>alert("Cannot write object: "+s))}}):null),le(this,"renderSlowConnectionWarning",()=>this.state.showSlowConnectionWarning?a().createElement(ws.Z,{readTimeoutMs:this.state.readTimeoutMs,t:this.t,onClose:t=>Qe(this,null,function*(){this.setState({showSlowConnectionWarning:!1}),t&&(this.setState({readTimeoutMs:t}),yield this.readInfo())})}):null),le(this,"closeHostUpdateDialog",t=>this.setState({hostUpdateDialog:!1,hostUpdate:null},t)),le(this,"openHostUpdateDialog",(t,s)=>Qe(this,null,function*(){const i=yield this.props.socket.checkFeatureSupported("CONTROLLER_UI_UPGRADE");this.setState({hostUpdateDialog:!0,hostUpdate:t,updateAvailable:i},s)})),le(this,"getNews",(t,s=!1)=>{const i=this.state.repository["js-controller"],r=this.state.hosts.find(w=>w.common.name===this.state.hostUpdate).common.installedVersion,E=[];return r&&i&&i.news&&Object.keys(i.news).forEach(w=>{try{(Pt().gt(w,r)||s)&&E.push({version:w,news:this.props.noTranslation?i.news[w].en:i.news[w][this.props.lang]||i.news[w].en})}catch(C){console.warn(`Cannot compare "${w}" and "${r}"`)}}),E}),le(this,"hostUpdateDialogCb",()=>this.state.hostUpdateDialog?a().createElement(da.Z,{open:!0,adapter:this.state.hostUpdate,adapterObject:this.state.repository["js-controller"],t:this.t,textUpdate:this.state.updateAvailable?this.t("Start update"):this.t("Show instructions"),rightDependencies:!0,news:this.getNews(),toggleTranslation:this.props.toggleTranslation,noTranslation:this.props.noTranslation,onUpdate:()=>Qe(this,null,function*(){const t=this.state.hostUpdate;this.closeHostUpdateDialog(()=>this.setState({updateDialog:t}))}),onClose:()=>this.closeHostUpdateDialog()}):null),this.state={viewMode:(window._localStorage||window.localStorage).getItem("Hosts.viewMode")==="true",alive:{},hosts:[],repository:{},hostsData:{},filterText:(window._localStorage||window.localStorage).getItem("Hosts.filterText")||"",showSlowConnectionWarning:!1,readTimeoutMs:ws.Z.getReadTimeoutMs(),hostUpdate:!1,updateDialog:!1,hostUpdateDialog:null,editDialog:{index:0,dialogName:""},baseSettingsDialog:{index:0,dialogName:""}}}componentDidMount(){this.readInfo().then(()=>{this.props.hostsWorker.registerHandler(this.updateHosts),this.props.hostsWorker.registerAliveHandler(this.updateHostsAlive)})}componentWillUnmount(){this.props.hostsWorker.unregisterHandler(this.updateHosts),this.props.hostsWorker.unregisterAliveHandler(this.updateHostsAlive)}getPanels(){const e=this.renderHosts().filter(t=>this.state.filterText?t.name.toLowerCase().includes(this.state.filterText.toLowerCase()):!0).map(t=>this.state.viewMode?t.renderCard:t.renderRow);return e.length?e:this.t("All items are filtered out")}baseSettingsSettingsDialog(){return this.state.baseSettingsDialog.dialogName?a().createElement(ha,{currentHost:this.state.baseSettingsDialog.dialogName,hosts:this.state.hosts,themeName:this.props.themeName,currentHostName:this.state.baseSettingsDialog.dialogName,key:"base",onClose:()=>this.setState({baseSettingsDialog:{index:0,dialogName:""}}),lang:this.props.lang,socket:this.props.socket,t:this.t}):null}renderUpdateDialog(){return this.state.updateDialog?this.state.updateAvailable?a().createElement(ma,{socket:this.props.socket,hostId:this.state.updateDialog,version:this.state.repository["js-controller"].version,onClose:()=>this.setState({updateDialog:!1}),adminInstance:this.props.adminInstance,onUpdating:e=>this.props.onUpdating(e),themeName:this.props.themeName}):a().createElement($s,{socket:this.props.socket,hostId:this.state.updateDialog,theme:this.props.theme,version:this.state.repository["js-controller"].version,onClose:()=>this.setState({updateDialog:!1})}):null}renderHosts(){return this.state.hosts.map(({_id:e,common:{name:t,icon:s,color:i,title:r,installedVersion:E},native:{os:{platform:w}}},C)=>{var V,H;return{renderCard:this.state.viewMode?a().createElement(Ps,{systemConfig:this.props.systemConfig,key:e,setEditDialog:()=>this.setState({editDialog:{index:C,dialogName:t}}),setBaseSettingsDialog:()=>this.setState({baseSettingsDialog:{index:C,dialogName:t}}),hostsWorker:this.props.hostsWorker,expertMode:this.props.expertMode,socket:this.props.socket,name:t,getLogLevelIcon:Zs,alive:this.state.alive[e],color:i,image:s,title:r,os:w,openHostUpdateDialog:()=>this.openHostUpdateDialog(t),description:Is(e,this.t,this.props.classes,this.state.hostsData)[0],hostData:this.state.hostsData[e],formatInfo:fe,available:((V=this.state.repository["js-controller"])==null?void 0:V.version)||"-",executeCommandRemove:()=>this.props.executeCommand(`host remove ${t}`),isCurrentHost:this.props.currentHost===e,installed:E,events:"- / -",t:this.t,_id:e,showAdaptersWarning:this.props.showAdaptersWarning}):null,renderRow:this.state.viewMode?null:a().createElement(Ms,{systemConfig:this.props.systemConfig,key:e,setEditDialog:()=>this.setState({editDialog:{index:C,dialogName:t}}),setBaseSettingsDialog:()=>this.setState({baseSettingsDialog:{index:C,dialogName:t}}),hostsWorker:this.props.hostsWorker,expertMode:this.props.expertMode,socket:this.props.socket,name:t,alive:this.state.alive[e],color:i,image:s,title:r,os:w,getLogLevelIcon:Zs,openHostUpdateDialog:()=>this.openHostUpdateDialog(t),executeCommandRemove:()=>this.props.executeCommand(`host remove ${t}`),isCurrentHost:this.props.currentHost===e,description:Is(e,this.t,this.props.classes,this.state.hostsData)[1],hostData:this.state.hostsData[e],formatInfo:fe,available:((H=this.state.repository["js-controller"])==null?void 0:H.version)||"-",installed:E,events:"- / -",t:this.t,_id:e,showAdaptersWarning:this.props.showAdaptersWarning}),name:t}})}render(){const{classes:e,expertMode:t}=this.props;return this.state.hosts.length?a().createElement(gt.Z,null,this.renderEditObjectDialog(),this.baseSettingsSettingsDialog(),this.renderSlowConnectionWarning(),this.hostUpdateDialogCb(),this.renderUpdateDialog(),a().createElement(Ft.Z,null,a().createElement(q.Z,{title:this.t("Show / hide List")},a().createElement(mt.Z,{size:"large",onClick:()=>{(window._localStorage||window.localStorage).setItem("Hosts.viewMode",this.state.viewMode?"false":"true"),this.setState({viewMode:!this.state.viewMode})}},this.state.viewMode?a().createElement(At.Z,null):a().createElement(jt.Z,null))),a().createElement(q.Z,{title:this.t("Reload")},a().createElement(mt.Z,{size:"large",onClick:()=>this.forceUpdate()},a().createElement(ke.default,null))),a().createElement("div",{className:e.grow}),this.state.hosts.length>2?a().createElement(h.TextField,{variant:"standard",label:this.t("Filter"),style:{margin:"5px 0"},value:this.state.filterText,onChange:s=>{(window._localStorage||window.localStorage).setItem("Hosts.viewMode",s.target.value),this.setState({filterText:s.target.value})},InputProps:{endAdornment:this.state.filterText?a().createElement(h.InputAdornment,{position:"end"},a().createElement(mt.Z,{size:"small",onClick:()=>{(window._localStorage||window.localStorage).setItem("Hosts.viewMode",""),this.setState({filterText:""})}},a().createElement(Ce.default,null))):null}}):null,a().createElement("div",{className:e.grow})),a().createElement(ft.Z,{overflow:"auto"},a().createElement("div",{className:this.state.viewMode?e.cards:""},!this.state.viewMode&&a().createElement("div",{className:e.tabHeaderWrapper},a().createElement("div",{className:e.tabHeaderFirstItem},this.t("Name:")),a().createElement("div",{className:e.tabFlex},a().createElement("div",{className:p.Utils.clsx(e.tabHeaderItem,e.hidden800)},"CPU"),a().createElement("div",{className:p.Utils.clsx(e.tabHeaderItem,e.hidden800)},"RAM"),a().createElement("div",{className:p.Utils.clsx(e.tabHeaderItem,e.hidden800)},this.t("Uptime")),a().createElement("div",{className:p.Utils.clsx(e.tabHeaderItem,e.hidden1100)},this.t("Available"),a().createElement("div",{className:e.jsController},"js-controller")),a().createElement("div",{className:p.Utils.clsx(e.tabHeaderItem,e.hidden1100)},this.t("Installed"),a().createElement("div",{className:e.jsController},"js-controller")),a().createElement("div",{className:p.Utils.clsx(e.tabHeaderItem,e.hidden600)},this.t("Events")),a().createElement("div",{className:p.Utils.clsx(e.tabHeaderItemButton,t&&e.widthButtons)}))),this.getPanels()))):a().createElement(h.LinearProgress,null)}}Ts.propTypes={t:d().func,expertMode:d().bool,socket:d().object,systemConfig:d().object,executeCommand:d().func,hostsWorker:d().object,showAdaptersWarning:d().func,theme:d().object,noTranslation:d().bool,toggleTranslation:d().func,currentHost:d().string,adminInstance:d().string,onUpdating:d().func};var va=(0,p.withWidth)()((0,L.withStyles)(fa)(Ts))}}]);
331
331
 
332
- //# sourceMappingURL=2251.f0f2687d.chunk.js.map
332
+ //# sourceMappingURL=2251.294e39b4.chunk.js.map