UNPKG

zwave-js-ui

Version:

Z-Wave Control Panel and MQTT Gateway

2 lines (1 loc) 8.03 kB
import{_ as S,I as w,e as c,z as y,w as l,b as u,V as h,K as v,l as k,k as d,h as M,i as m,u as g,X as x,dC as f,e9 as p,ea as n}from"./index-DwzE-W2i.js";import{V as H}from"./VDataTable-D8DZXD9Y.js";import"./sort-C8HQTCiq.js";import"./VTable-Cxuwit5L.js";const I=[{title:"January",value:1},{title:"February",value:2},{title:"March",value:3},{title:"April",value:4},{title:"May",value:5},{title:"June",value:6},{title:"July",value:7},{title:"August",value:8},{title:"September",value:9},{title:"October",value:10},{title:"November",value:11},{title:"December",value:12}],D={mixins:[w],props:{node:Object,_user:Object,activeMode:String},data(){return{mode:"daily",weekdays:Object.keys(p).map(t=>({title:t,value:p[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=[{title:"Daily",value:"daily"},{title:"Weekly",value:"weekly"},{title:"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 a={slotId:e.slotId,start:"",end:"",slot:e};switch(this.mode){case"daily":a.weekdays=e.weekdays.map(s=>f(p,s)),a.start=`${n(e.startHour,2)}:${n(e.startMinute,2)}`,a.duration=`${e.durationHour}h ${e.durationMinute}m`;break;case"weekly":a.weekday=f(p,e.weekday),a.start=`${n(e.startHour,2)}:${n(e.startMinute,2)}`,a.stop=`${n(e.stopHour,2)}:${n(e.stopMinute,2)}`;break;case"yearly":a.start=new Date(2e3+e.startYear,e.startMonth-1,e.startDay,e.startHour,e.startMinute).toLocaleString(),a.stop=new Date(2e3+e.stopYear,e.stopMonth-1,e.stopDay,e.stopHour,e.stopMinute).toLocaleString();break}t.push(a)}return t},headers(){let t=[{title:"Slot Id",key:"slotId"},{title:"Start",key:"start"}];switch(this.mode){case"daily":t=[...t,{title:"Weekdays",key:"weekdays"},{title:"Duration",key:"duration"}];break;case"weekly":t=[...t,{title:"Weekday",key:"weekday"},{title:"Stop",key:"stop"}];break;case"yearly":t=[...t,{title:"Stop",key:"stop"}];break}return t.push({title:"Actions",key:"actions",sortable:!1}),t}},mounted(){this.mode=this.activeMode||"daily"},methods:{validSlot(t,e){return!this.items.some(a=>a.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,a=new Date().getFullYear(),s={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>=a)},startMonth:{type:"list",autocomplete:!0,key:"startMonth",label:"Start Month",default:1,cols:6,rules:[this.rules.required],items:I},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 i=[];return this.mode==="daily"?i=[s.weekdays,s.startHour,s.startMinute,s.durationHour,s.durationMinute]:this.mode==="weekly"?i=[{...s.weekdays,key:"weekday",multiple:!1,default:1},s.startHour,s.startMinute,{...s.startHour,key:"stopHour",label:"Stop Hour"},{...s.startMinute,key:"stopMinute",label:"Stop Minute"}]:this.mode==="yearly"&&(i=[s.startYear,s.startMonth,s.startDay,s.startHour,s.startMinute,{...s.startYear,key:"stopYear",label:"Stop Year"},{...s.startMonth,key:"stopMonth",label:"Stop Month"},{...s.startDay,key:"stopDay",label:"Stop Day"},{...s.startHour,key:"stopHour",label:"Stop Hour"},{...s.startMinute,key:"stopMinute",label:"Stop Minute"}]),t||i.unshift(s.slotId),i},async editSlot(t){let e={};t&&(e=x(t),e.startYear&&(e.startYear+=2e3,e.stopYear+=2e3));const a=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(a).length===0)return;t&&(a.slotId=t.slotId),a.startYear&&(a.startYear-=2e3,a.stopYear-=2e3),t&&Object.assign(t,a),(await this.app.apiRequest("setSchedule",[this.node.id,this.mode,{...a,userId:this._user.id}])).success&&this.showSnackbar("Slot saved","success")}}};function Y(t,e,a,s,i,r){return y(),c(g,{"grid-list-md":""},{default:l(()=>[u(h,{justify:"center"},{default:l(()=>[u(v,{class:"ma-2",style:{"max-width":"200px"},modelValue:i.mode,"onUpdate:modelValue":e[0]||(e[0]=o=>i.mode=o),density:"compact",items:r.supportedModes,"persistent-hint":"",hint:`Max slots: ${this.schedule.numSlots}`},null,8,["modelValue","items","hint"])]),_:1}),u(h,{justify:"center",class:"mx-auto mt-2",style:{"max-width":"600px"}},{default:l(()=>[u(H,{headers:r.headers,items:r.items,"item-key":"slotId",loading:i.loading,density:"compact","mobile-breakpoint":0},{top:l(()=>[u(h,{class:"my-1",density:"compatct",justify:"center"},{default:l(()=>[i.loading?(y(),c(m,{key:1,size:"small",variant:"text",color:"error",onClick:e[2]||(e[2]=o=>r.cancel())},{default:l(()=>[...e[6]||(e[6]=[d("Stop",-1)])]),_:1})):(y(),c(m,{key:0,size:"small",variant:"text",color:"primary",onClick:e[1]||(e[1]=o=>r.refresh())},{default:l(()=>[...e[5]||(e[5]=[d("Refresh",-1)])]),_:1})),u(m,{size:"small",variant:"text",disabled:r.schedule.numSlots<=r.items.length,color:"success",onClick:e[3]||(e[3]=o=>r.editSlot())},{default:l(()=>[...e[7]||(e[7]=[d("Add",-1)])]),_:1},8,["disabled"]),i.mode!==a.activeMode&&r.items.length>0?(y(),c(m,{key:2,size:"small",variant:"text",color:"warning",onClick:e[4]||(e[4]=o=>r.enableMode())},{default:l(()=>[...e[8]||(e[8]=[d("Enable",-1)])]),_:1})):M("",!0)]),_:1})]),"item.actions":l(({item:o})=>[u(k,{size:"small",color:"error",onClick:b=>r.removeSlot(o.slot)},{default:l(()=>[...e[9]||(e[9]=[d("delete",-1)])]),_:1},8,["onClick"]),u(k,{class:"ml-2",size:"small",color:"success",onClick:b=>r.editSlot(o.slot)},{default:l(()=>[...e[10]||(e[10]=[d("edit",-1)])]),_:1},8,["onClick"])]),_:2},1032,["headers","items","loading"])]),_:1})]),_:1})}const R=S(D,[["render",Y]]);export{R as default};