UNPKG

zwave-js-ui

Version:

Z-Wave Control Panel and MQTT Gateway

4 lines (3 loc) 13.9 kB
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./ExpandedNode-IBlPFURq.js","./index-CtTdmJsx.js","./index-2j-kvxFz.css","./ExpandedNode-Cz-LXYo1.css","./MissingKeysAlert-CbkDsXrO.js"])))=>i.map(i=>d[i]); import{I as d,_ as u,u as c,P as r,s as f,a as p,h as v,k as h,t as y,v as b,l as k,q as l,x as i,n as C}from"./index-CtTdmJsx.js";const _={name:"SmartStart",props:{socket:Object},mixins:[d],components:{ExpandedNode:()=>u(()=>import("./ExpandedNode-IBlPFURq.js"),__vite__mapDeps([0,1,2,3]),import.meta.url),MissingKeysAlert:()=>u(()=>import("./MissingKeysAlert-CbkDsXrO.js"),__vite__mapDeps([4,1,2]),import.meta.url)},watch:{tableOptions:{handler(){c().savePreferences({smartStartTable:this.tableOptions})},deep:!0}},computed:{streamerMode(){return c().ui.streamerMode}},data(){return{items:[],showInfoTooltip:!1,x:0,y:0,Protocols:r,fab:!1,search:"",tableOptions:{sortBy:["nodeId"]},expandedNode:null,expandedNodeDialog:!1,headers:[{text:"ID",value:"nodeId"},{text:"Name",value:"name"},{text:"Location",value:"location"},{text:"Active",value:"status"},{text:"Protocol",value:"protocol"},{text:"DSK",value:"dsk"},{text:"S2 Access Control",value:"securityClasses.s2AccessControl"},{text:"S2 Authenticated",value:"securityClasses.s2Authenticated"},{text:"S2 Unauthenticated",value:"securityClasses.s2Unauthenticated"},{text:"S0 Legacy",value:"securityClasses.s0Legacy"},{text:"Manufacturer",value:"manufacturer"},{text:"Label",value:"label"},{text:"Description",value:"description"},{text:"Actions",value:"actions",sortable:!1}],edited:!1}},mounted(){this.tableOptions=c().getPreference("smartStartTable",{page:1,itemsPerPage:10,sortBy:["nodeId"],sortDesc:[!1],groupBy:[],groupDesc:[],mustSort:!1,multiSort:!1}),this.refreshItems(),this.bindEvent(f.nodeAdded,()=>{this.refreshItems()})},beforeDestroy(){this.socket&&this.unbindEvents()},methods:{...p(c,["showSnackbar"]),onRowFocus(o,e){e.nodeId&&(this.x=o.clientX+10,this.y=o.clientY+10,this.showInfoTooltip=!0)},onRowBlur(){this.showInfoTooltip=!1},getProtocol:v,getProtocolColor:h,showNodeDialog(o){const e=this.nodes.find(s=>s.id===o.nodeId);e&&(this.expandedNode=e,this.expandedNodeDialog=!0)},closeDialog(){this.expandedNode=null,this.expandedNodeDialog=!1},async refreshItems(){const o=await this.app.apiRequest("getProvisioningEntries",[],{infoSnack:!1,errorSnack:!0});o.success&&(this.items=this.parseItems(o.result))},async exportList(){await this.app.exportConfiguration(this.items,"provisioningEntries","json")},async importList(){const{data:o}=await this.app.importFile("json");if(o)for(const e of o)this.updateItem(e)},async onChange(o){await this.updateItem(o),this.edited=!1,this.refreshItems()},async toggleProtocol(o){o.protocol=o.protocol===r.ZWave?r.ZWaveLongRange:r.ZWave,await this.onChange(o)},async updateItem(o){const e=await this.app.apiRequest("provisionSmartStartNode",[typeof o=="string"?o:this.convertItem(o)]);if(e.success){const s=e.result;this.showSnackbar(`Node ${s.nodeId||s.name||""} ${this.edited?"updated":"added"}`,"success"),this.refreshItems()}},async scanItem(){let o=await this.app.confirm("New entry","Scan QR Code or import it as an image","info",{qrScan:!0,canceltext:"Close",width:500});o&&(y(o)?this.showSnackbar(`Provided QR Code is not a SmartStart QR Code. In order to use it go to Control Panel > Manage Nodes and use Scan QR Code Inclusion.`,"warning"):this.updateItem(o))},async editItem(o){o&&(this.edited=!0);let e=[{type:"text",label:"Name",required:!0,key:"name",hint:"The node name",default:o?o.name:""},{type:"text",label:"Location",required:!0,key:"location",hint:"The node location",default:o?o.location:""}];o!=null&&o.nodeId||(e=[...e,{type:"text",label:"DSK",required:!0,key:"dsk",hint:"Enter the full DSK code (dashes included) for your device",rules:[b],default:o?o.dsk:""},{type:"list",label:"Protocol",required:!0,key:"protocol",items:k,disabled:o&&(!o.supportedProtocols||o.supportedProtocols.length<2),hint:"Inclusion protocol to use",default:o?o.protocol:r.ZWave},{type:"checkbox",label:"S2 Access Control",key:"s2AccessControl",disabled:o?!o.requestedSecurityClasses.s2AccessControl:!1,default:o?o.securityClasses.s2AccessControl:!1},{type:"checkbox",label:"S2 Authenticated",key:"s2Authenticated",disabled:o?!o.requestedSecurityClasses.s2Authenticated:!1,default:o?o.securityClasses.s2Authenticated:!1},{type:"checkbox",label:"S2 Unauthenticated",key:"s2Unauthenticated",disabled:o?!o.requestedSecurityClasses.s2Unauthenticated:!1,default:o?o.securityClasses.s2Unauthenticated:!1,show:t=>t.protocol===r.ZWave},{type:"checkbox",label:"S0 Legacy",key:"s0Legacy",disabled:o?!o.requestedSecurityClasses.s0Legacy:!1,default:o?o.securityClasses.s0Legacy:!1,show:t=>t.protocol===r.ZWave}]);let s=await this.app.confirm((o?"Update":"New")+" entry","","info",{confirmText:o?"Update":"Add",width:500,inputs:e});if(s.dsk||o!=null&&o.nodeId){if(!(o!=null&&o.nodeId)){const t={s2Unauthenticated:s.s2Unauthenticated,s2Authenticated:s.s2Authenticated,s2AccessControl:s.s2AccessControl,s0Legacy:s.s0Legacy};delete s.s2AccessControl,delete s.s2Authenticated,delete s.s2Unauthenticated,delete s.s0Legacy,s.securityClasses=t}o&&(s={...o,...s}),this.updateItem(s)}else Object.keys(s).length>0&&!s.dsk&&this.showSnackbar("DSK is required","error")},async removeItem(o){await this.app.confirm("Attention","Are you sure you want to delete this item from provisioning? Removing it from provisioning will not exclude the node","alert")&&(await this.app.apiRequest("unprovisionSmartStartNode",[o.dsk])).success&&(this.showSnackbar(`Node ${o.nodeId} removed`,"success"),this.refreshItems())},parseItems(o){return o.map(e=>({...e,status:!e.status,protocol:e.protocol??r.ZWave,securityClasses:l(e.securityClasses,!1),requestedSecurityClasses:l(e.requestedSecurityClasses,!e.requestedSecurityClasses)}))},convertItem(o){return o={...o,status:o.status?0:1,protocol:o.protocol??r.ZWave,securityClasses:i(o.securityClasses),requestedSecurityClasses:i(o.requestedSecurityClasses||l([],!0))},o}}};var S=function(){var e=this,s=e._self._c;return s("v-container",{staticClass:"pa-4",attrs:{fluid:""}},[s("v-data-table",{staticClass:"elevation-1",staticStyle:{"margin-bottom":"80px"},attrs:{headers:e.headers,items:e.items,search:e.search,options:e.tableOptions},on:{"update:options":function(t){e.tableOptions=t}},scopedSlots:e._u([{key:"top",fn:function(){return[s("v-col",{staticClass:"pt-0",attrs:{dense:""}},[s("h2",{staticClass:"pa-3"},[e._v("Provisioning Entries")]),s("missing-keys-alert"),s("v-menu",{attrs:{"position-x":e.x,"position-y":e.y,absolute:"","offset-y":"","offset-x":""},model:{value:e.showInfoTooltip,callback:function(t){e.showInfoTooltip=t},expression:"showInfoTooltip"}},[s("v-list",{attrs:{dense:""}},[s("v-list-item",{attrs:{dense:""}},[s("v-list-item-title",[e._v(" When an entry has a Node associated it cannot be edited ")])],1)],1)],1),s("v-row",[s("v-col",{attrs:{cols:"12",sm:"6"}},[s("v-text-field",{staticClass:"ma-2",staticStyle:{"max-width":"250px","min-width":"250px"},attrs:{clearable:"",flat:"","solo-inverted":"","hide-details":"","single-line":"","prepend-inner-icon":"search",label:"Search","append-icon":"refresh"},on:{"click:append":e.refreshItems},model:{value:e.search,callback:function(t){e.search=t},expression:"search"}})],1)],1)],1)]},proxy:!0},{key:"item.nodeId",fn:function({item:t}){return[t.nodeId?s("v-btn",{attrs:{color:"primary",small:"",rounded:""},on:{click:function(a){return a.stopPropagation(),e.showNodeDialog(t)}}},[e._v(" "+e._s(t.nodeId)+" "),s("v-icon",{staticClass:"ml-2",attrs:{small:""}},[e._v("open_in_new")])],1):e._e()]}},{key:"item.dsk",fn:function({item:t}){return[e.streamerMode?s("span",[e._v("*********")]):s("span",[e._v(" "+e._s(t.dsk)+" ")])]}},{key:"item.status",fn:function({item:t}){return[s("v-switch",{attrs:{dense:""},on:{change:function(a){return e.onChange(t)}},model:{value:t.status,callback:function(a){e.$set(t,"status",a)},expression:"item.status"}})]}},{key:"item.protocol",fn:function({item:t}){var a;return[(a=t.supportedProtocols)!=null&&a.includes(e.Protocols.ZWaveLongRange)?s("v-btn",{attrs:{disabled:!!t.nodeId,dense:"",rounded:"",small:"",outlined:"",color:e.getProtocolColor(t)},on:{click:function(n){return e.toggleProtocol(t)},focus:function(n){return e.onRowFocus(n,t)},blur:function(n){return e.onRowBlur(n,t)},mouseenter:function(n){return e.onRowFocus(n,t)},mouseleave:function(n){return e.onRowBlur(n,t)}}},[e._v(e._s(e.getProtocol(t)))]):s("span",{staticClass:"caption"},[e._v(" Z-Wave ")])]}},{key:"item.securityClasses.s2AccessControl",fn:function({item:t}){return[s("div",{on:{focus:function(a){return e.onRowFocus(a,t)},blur:function(a){return e.onRowBlur(a,t)},mouseenter:function(a){return e.onRowFocus(a,t)},mouseleave:function(a){return e.onRowBlur(a,t)}}},[s("v-checkbox",{attrs:{disabled:!!t.nodeId||!t.requestedSecurityClasses.s2AccessControl,"hide-details":"",dense:""},on:{change:function(a){return e.onChange(t)}},model:{value:t.securityClasses.s2AccessControl,callback:function(a){e.$set(t.securityClasses,"s2AccessControl",a)},expression:"item.securityClasses.s2AccessControl"}})],1)]}},{key:"item.securityClasses.s2Authenticated",fn:function({item:t}){return[s("div",{on:{focus:function(a){return e.onRowFocus(a,t)},blur:function(a){return e.onRowBlur(a,t)},mouseenter:function(a){return e.onRowFocus(a,t)},mouseleave:function(a){return e.onRowBlur(a,t)}}},[s("v-checkbox",{attrs:{disabled:!!t.nodeId||!t.requestedSecurityClasses.s2Authenticated,"hide-details":"",dense:""},on:{change:function(a){return e.onChange(t)}},model:{value:t.securityClasses.s2Authenticated,callback:function(a){e.$set(t.securityClasses,"s2Authenticated",a)},expression:"item.securityClasses.s2Authenticated"}})],1)]}},{key:"item.securityClasses.s2Unauthenticated",fn:function({item:t}){return[s("div",{on:{focus:function(a){return e.onRowFocus(a,t)},blur:function(a){return e.onRowBlur(a,t)},mouseenter:function(a){return e.onRowFocus(a,t)},mouseleave:function(a){return e.onRowBlur(a,t)}}},[t.protocol===e.Protocols.ZWave?s("v-checkbox",{attrs:{disabled:!!t.nodeId||!t.requestedSecurityClasses.s2Unauthenticated,"hide-details":"",dense:""},on:{change:function(a){return e.onChange(t)}},model:{value:t.securityClasses.s2Unauthenticated,callback:function(a){e.$set(t.securityClasses,"s2Unauthenticated",a)},expression:"item.securityClasses.s2Unauthenticated"}}):s("span")],1)]}},{key:"item.securityClasses.s0Legacy",fn:function({item:t}){return[s("div",{on:{focus:function(a){return e.onRowFocus(a,t)},blur:function(a){return e.onRowBlur(a,t)},mouseenter:function(a){return e.onRowFocus(a,t)},mouseleave:function(a){return e.onRowBlur(a,t)}}},[t.protocol===e.Protocols.ZWave?s("v-checkbox",{attrs:{disabled:!!t.nodeId||!t.requestedSecurityClasses.s0Legacy,"hide-details":"",dense:""},on:{change:function(a){return e.onChange(t)}},model:{value:t.securityClasses.s0Legacy,callback:function(a){e.$set(t.securityClasses,"s0Legacy",a)},expression:"item.securityClasses.s0Legacy"}}):s("span")],1)]}},{key:"item.actions",fn:function({item:t}){return[s("v-icon",{attrs:{small:"",color:"red"},on:{click:function(a){return e.removeItem(t)}}},[e._v("delete")]),s("v-icon",{attrs:{small:"",color:"success"},on:{click:function(a){return e.editItem(t)}}},[e._v("edit")])]}}],null,!0)}),s("v-speed-dial",{staticClass:"mb-7",attrs:{fixed:"",bottom:"",right:"",transition:"slide-y-reverse-transition"},scopedSlots:e._u([{key:"activator",fn:function(){return[s("v-btn",{attrs:{color:"blue darken-3",dark:"",fab:""},model:{value:e.fab,callback:function(t){e.fab=t},expression:"fab"}},[e.fab?s("v-icon",[e._v(" close ")]):s("v-icon",[e._v(" menu ")])],1)]},proxy:!0}]),model:{value:e.fab,callback:function(t){e.fab=t},expression:"fab"}},[s("v-tooltip",{attrs:{left:""},scopedSlots:e._u([{key:"activator",fn:function({on:t,attrs:a}){return[s("v-btn",e._g(e._b({attrs:{fab:"",dark:"",small:"",color:"primary"},on:{click:function(n){return e.editItem()}}},"v-btn",a,!1),t),[s("v-icon",[e._v("add")])],1)]}}])},[s("span",[e._v("Add")])]),s("v-tooltip",{attrs:{left:""},scopedSlots:e._u([{key:"activator",fn:function({on:t,attrs:a}){return[s("v-btn",e._g(e._b({attrs:{fab:"",dark:"",small:"",color:"warning"},on:{click:e.scanItem}},"v-btn",a,!1),t),[s("v-icon",[e._v("qr_code_scanner")])],1)]}}])},[s("span",[e._v("Scan")])]),s("v-tooltip",{attrs:{left:""},scopedSlots:e._u([{key:"activator",fn:function({on:t,attrs:a}){return[s("v-btn",e._g(e._b({attrs:{fab:"",dark:"",small:"",color:"success"},on:{click:e.refreshItems}},"v-btn",a,!1),t),[s("v-icon",[e._v("refresh")])],1)]}}])},[s("span",[e._v("Refresh")])]),s("v-tooltip",{attrs:{left:""},scopedSlots:e._u([{key:"activator",fn:function({on:t,attrs:a}){return[s("v-btn",e._g(e._b({attrs:{fab:"",dark:"",small:"",color:"red"},on:{click:e.importList}},"v-btn",a,!1),t),[s("v-icon",[e._v("file_download")])],1)]}}])},[s("span",[e._v("Import")])]),s("v-tooltip",{attrs:{left:""},scopedSlots:e._u([{key:"activator",fn:function({on:t,attrs:a}){return[s("v-btn",e._g(e._b({attrs:{fab:"",dark:"",small:"",color:"purple"},on:{click:e.exportList}},"v-btn",a,!1),t),[s("v-icon",[e._v("file_upload")])],1)]}}])},[s("span",[e._v("Export")])])],1),s("v-dialog",{attrs:{fullscreen:e.$vuetify.breakpoint.xs,"max-width":"1200px",persistent:""},on:{keydown:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"exit",void 0,t.key,void 0)?null:e.closeDialog()}},model:{value:e.expandedNodeDialog,callback:function(t){e.expandedNodeDialog=t},expression:"expandedNodeDialog"}},[s("v-card",{attrs:{"min-height":"90vh"}},[s("v-btn",{staticStyle:{position:"absolute",right:"5px",top:"5px"},attrs:{"x-small":"",icon:"",fab:""},on:{click:function(t){return e.closeDialog()}}},[s("v-icon",[e._v("close")])],1),s("v-card-text",{staticClass:"pt-3"},[s("expanded-node",{attrs:{node:e.expandedNode,socket:e.socket}})],1)],1)],1)],1)},w=[],m=C(_,S,w,!1,null,null);const A=m.exports;export{A as default};