UNPKG

zwave-js-ui

Version:

Z-Wave Control Panel and MQTT Gateway

2 lines (1 loc) 7.72 kB
import{I as n,ay as i,ar as u,az as l,a as d,u as c,c as h,n as p}from"./index-CtTdmJsx.js";const y=[{text:"January",value:1},{text:"February",value:2},{text:"March",value:3},{text:"April",value:4},{text:"May",value:5},{text:"June",value:6},{text:"July",value:7},{text:"August",value:8},{text:"September",value:9},{text:"October",value:10},{text:"November",value:11},{text:"December",value:12}],m={mixins:[n],props:{node:Object,user:Object,activeMode:String},data(){return{mode:"daily",weekdays:Object.keys(i).map(t=>({text:t,value:i[t]})).filter(t=>typeof t.value=="number"),loading:!1,rules:{required:t=>{let e=!1;return t instanceof Array?e=t.length>0:e=!!t||t===0,e||"This field is required."},positive:t=>t>0||"Value must be positive."}}},computed:{schedule(){return this.node.schedule[this.mode||"daily"]},supportedModes(){return this.modes.filter(t=>this.node.schedule[t.value].numSlots>0)},modes(){const t=[{text:"Daily",value:"daily"},{text:"Weekly",value:"weekly"},{text:"Yearly",value:"yearly"}];for(const e of t)this.activeMode!==e.value&&(e.text=`${e.text} (disabled)`);return t},items(){const t=[];for(const e of this.user.schedule.slots){if(e.type!==this.mode)continue;let s={slotId:e.slotId,start:"",end:"",slot:e};switch(this.mode){case"daily":s.weekdays=e.weekdays.map(a=>u(i,a)),s.start=`${l(e.startHour,2)}:${l(e.startMinute,2)}`,s.duration=`${e.durationHour}h ${e.durationMinute}m`;break;case"weekly":s.weekday=u(i,e.weekday),s.start=`${l(e.startHour,2)}:${l(e.startMinute,2)}`,s.stop=`${l(e.stopHour,2)}:${l(e.stopMinute,2)}`;break;case"yearly":s.start=new Date(2e3+e.startYear,e.startMonth-1,e.startDay,e.startHour,e.startMinute).toLocaleString(),s.stop=new Date(2e3+e.stopYear,e.stopMonth-1,e.stopDay,e.stopHour,e.stopMinute).toLocaleString();break}t.push(s)}return t},headers(){let t=[{text:"Slot Id",value:"slotId"},{text:"Start",value:"start"}];switch(this.mode){case"daily":t=[...t,{text:"Weekdays",value:"weekdays"},{text:"Duration",value:"duration"}];break;case"weekly":t=[...t,{text:"Weekday",value:"weekday"},{text:"Stop",value:"stop"}];break;case"yearly":t=[...t,{text:"Stop",value:"stop"}];break}return t.push({text:"Actions",value:"actions",sortable:!1}),t}},mounted(){this.mode=this.activeMode||"daily"},methods:{...d(c,["showSnackbar"]),validSlot(t,e){return!this.items.some(s=>s.slotId===e.slotId)||"Slot already exists"},async enableMode(){(await this.app.apiRequest("setSchedule",[this.node.id,this.mode,{...this.items[0].slot,type:void 0}])).success&&this.showSnackbar(`Mode ${this.mode} enabled`,"success")},async refresh(){const t=await this.app.confirm("Refresh schedules","Do you want to query the schedules from the device or to get them from the cache? Querying from the device may take a while but will always return the latest schedules stored on it.","info",{confirmText:"Query",cancelText:"Cache"});this.loading=!0;const e=await this.app.apiRequest("getSchedules",[this.node.id,{mode:this.mode,fromCache:!t}]);this.loading=!1,e.success&&this.showSnackbar("Schedules updated","success")},async cancel(){(await this.app.apiRequest("cancelGetSchedule",[])).success&&(this.loading=!1,this.showSnackbar("Schedule cancelled","success"))},async removeSlot(t){(await this.app.apiRequest("setSchedule",[this.node.id,this.mode,{slotId:t.slotId,userId:this.user.id}])).success&&this.showSnackbar("Slot removed","success")},getInputs(t){const e=this.schedule.numSlots,s=new Date().getFullYear(),a={slotId:{type:"list",autocomplete:!0,key:"slotId",label:"Slot Id",default:1,cols:6,rules:[this.rules.required,this.validSlot],items:[...Array(e).keys()].map(r=>r+1)},weekdays:{type:"list",autocomplete:!0,key:"weekdays",label:"Weekdays",default:this.weekdays.map(r=>r.value),rules:[this.rules.required],items:this.weekdays,multiple:!0},startHour:{type:"list",autocomplete:!0,key:"startHour",label:"Start Hour",default:0,cols:6,rules:[this.rules.required],items:[...Array(24).keys()]},startMinute:{type:"list",autocomplete:!0,key:"startMinute",label:"Start Minute",default:0,cols:6,rules:[this.rules.required],items:[...Array(60).keys()]},durationHour:{type:"list",autocomplete:!0,key:"durationHour",label:"Duration Hour",cols:6,default:0,rules:[this.rules.required],items:[...Array(24).keys()]},durationMinute:{type:"list",autocomplete:!0,key:"durationMinute",label:"Duration Minute",default:0,cols:6,rules:[this.rules.required],items:[...Array(60).keys()]},startYear:{type:"list",autocomplete:!0,key:"startYear",label:"Start Year",default:0,cols:6,rules:[this.rules.required],items:[...Array(100).keys()].map(r=>r+2e3).filter(r=>r>=s)},startMonth:{type:"list",autocomplete:!0,key:"startMonth",label:"Start Month",default:1,cols:6,rules:[this.rules.required],items:y},startDay:{type:"list",autocomplete:!0,key:"startDay",label:"Start Day",default:1,cols:6,rules:[this.rules.required],items:[...Array(31).keys()].map(r=>r+1)}};let o=[];return this.mode==="daily"?o=[a.weekdays,a.startHour,a.startMinute,a.durationHour,a.durationMinute]:this.mode==="weekly"?o=[{...a.weekdays,key:"weekday",multiple:!1,default:1},a.startHour,a.startMinute,{...a.startHour,key:"stopHour",label:"Stop Hour"},{...a.startMinute,key:"stopMinute",label:"Stop Minute"}]:this.mode==="yearly"&&(o=[a.startYear,a.startMonth,a.startDay,a.startHour,a.startMinute,{...a.startYear,key:"stopYear",label:"Stop Year"},{...a.startMonth,key:"stopMonth",label:"Stop Month"},{...a.startDay,key:"stopDay",label:"Stop Day"},{...a.startHour,key:"stopHour",label:"Stop Hour"},{...a.startMinute,key:"stopMinute",label:"Stop Minute"}]),t||o.unshift(a.slotId),o},async editSlot(t){let e={};t&&(e=h(t),e.startYear&&(e.startYear+=2e3,e.stopYear+=2e3));const s=await this.app.confirm(t?"Edit slot":"New slot","","info",{width:900,inputs:this.getInputs(t),confirmText:t?"Edit":"Add",values:e});if(Object.keys(s).length===0)return;t&&(s.slotId=t.slotId),s.startYear&&(s.startYear-=2e3,s.stopYear-=2e3),t&&Object.assign(t,s),(await this.app.apiRequest("setSchedule",[this.node.id,this.mode,{...s,userId:this.user.id}])).success&&this.showSnackbar("Slot saved","success")}}};var f=function(){var e=this,s=e._self._c;return s("v-container",{attrs:{"grid-list-md":""}},[s("v-row",{attrs:{justify:"center"}},[s("v-select",{staticClass:"ma-2",staticStyle:{"max-width":"200px"},attrs:{dense:"",items:e.supportedModes,"persistent-hint":"",hint:`Max slots: ${this.schedule.numSlots}`},model:{value:e.mode,callback:function(a){e.mode=a},expression:"mode"}})],1),s("v-row",{staticClass:"pa-1",attrs:{justify:"center"}},[s("v-data-table",{attrs:{headers:e.headers,items:e.items,"item-key":"id",loading:e.loading,dense:"","mobile-breakpoint":0},scopedSlots:e._u([{key:"top",fn:function(){return[e.loading?s("v-btn",{staticClass:"mb-2",attrs:{small:"",outlined:"",text:"",color:"error"},on:{click:function(a){return e.cancel()}}},[e._v("Stop")]):s("v-btn",{staticClass:"mb-2",attrs:{small:"",outlined:"",text:"",color:"primary"},on:{click:function(a){return e.refresh()}}},[e._v("Refresh")]),s("v-btn",{staticClass:"mb-2",attrs:{small:"",outlined:"",text:"",disabled:e.schedule.numSlots<=e.items.length,color:"green"},on:{click:function(a){return e.editSlot()}}},[e._v("Add")]),e.mode!==e.activeMode&&e.items.length>0?s("v-btn",{staticClass:"mb-2",attrs:{small:"",outlined:"",text:"",color:"warning"},on:{click:function(a){return e.enableMode()}}},[e._v("Enable")]):e._e()]},proxy:!0},{key:"item.actions",fn:function({item:a}){return[s("v-icon",{attrs:{small:"",color:"red"},on:{click:function(o){return e.removeSlot(a.slot)}}},[e._v("delete")]),s("v-icon",{attrs:{small:"",color:"success"},on:{click:function(o){return e.editSlot(a.slot)}}},[e._v("edit")])]}}],null,!0)})],1)],1)},k=[],v=p(m,f,k,!1,null,null);const S=v.exports;export{S as default};