UNPKG

zigbee2mqtt-windfront

Version:

[![Version](https://img.shields.io/npm/v/zigbee2mqtt-windfront.svg)](https://npmjs.org/package/zigbee2mqtt-windfront) [![CI](https://github.com/Nerivec/zigbee2mqtt-windfront/actions/workflows/ci.yml/badge.svg)](https://github.com/Nerivec/zigbee2mqtt-windf

2 lines (1 loc) 12.6 kB
import{r as d,j as s,b as _,C as $,F as p,V as y,T as f,W as k,X as R,Y as V,a as z,A as I,c as x,d as T,t as L,S as O,f as E,L as q,N as P,M as U}from"./index-Cg_dwqpD.js";import{D as B}from"./DeviceImage-CHwoOcls.js";import{T as H}from"./Table-FUtHXzGb.js";import{u as G,T as K}from"./useTable-B3JMT6Iq.js";import{M as W,V as X}from"./VendorLink-D2p34CmW.js";import{P as Y}from"./PowerSource-BDEov_ab.js";import"./envs-CSqIi4cL.js";import"./index-BbB5QEu8.js";import"./DebouncedInput-E4d1IUlA.js";import"./snakeCase-CrKq36vi.js";import"./_createCompounder-Dcznv9Az.js";import"./isArray-uIIfUpwr.js";function J({indeterminate:o,...i}){const t=d.useRef(null);return d.useEffect(()=>{typeof o=="boolean"&&(t.current.indeterminate=!i.checked&&o)},[t,o]),s.jsx("input",{ref:t,type:"checkbox",className:"checkbox",...i})}const S=o=>{if(o==null||o<0)return;const i=o.toString(16).padStart(8,"0"),t=`${i[0]}.${i[1]}`,c=Number.parseInt(i.slice(2,4),16),u=`${i[4]}.${i[5]}`,h=Number.parseInt(i.slice(6),16);return[t,c,u,h]},Q=d.memo(({sourceIdx:o,device:i,state:t,onCheckClick:c,onUpdateClick:u,onScheduleClick:h,onUnscheduleClick:b})=>{const{t:l}=_(["ota","common"]);return t==null||t.state==="idle"?s.jsxs("div",{className:"join join-horizontal",children:[s.jsx($,{className:"btn btn-sm btn-square btn-outline btn-primary join-item",onClick:c,item:[o,i.ieee_address],title:l(a=>a.check),children:s.jsx(p,{icon:y})}),s.jsx(f,{className:"btn btn-sm btn-square btn-outline btn-info join-item",onClick:h,item:[o,i.ieee_address],title:l(a=>a.schedule),modalDescription:l(a=>a.schedule_info),modalCancelLabel:l(a=>a.cancel,{ns:"common"}),children:s.jsx(p,{icon:k})})]}):s.jsx("div",{className:"join join-horizontal",children:t.state==="available"?s.jsxs(s.Fragment,{children:[s.jsx(f,{className:"btn btn-sm btn-square btn-outline btn-error join-item",onClick:u,item:[o,i.ieee_address],title:l(a=>a.update),modalDescription:l(a=>a.dialog_confirmation_prompt,{ns:"common"}),modalCancelLabel:l(a=>a.cancel,{ns:"common"}),children:s.jsx(p,{icon:R})}),s.jsx(f,{className:"btn btn-sm btn-square btn-outline btn-info join-item",onClick:h,item:[o,i.ieee_address],title:l(a=>a.schedule),modalDescription:l(a=>a.schedule_info),modalCancelLabel:l(a=>a.cancel,{ns:"common"}),children:s.jsx(p,{icon:k})})]}):t.state==="scheduled"?s.jsx(f,{className:"btn btn-sm btn-square btn-outline btn-error join-item",onClick:b,item:[o,i.ieee_address],title:l(a=>a.unschedule),modalDescription:l(a=>a.dialog_confirmation_prompt,{ns:"common"}),modalCancelLabel:l(a=>a.cancel,{ns:"common"}),children:s.jsx(p,{icon:V})}):s.jsxs(s.Fragment,{children:[s.jsx($,{className:"btn btn-sm btn-square btn-outline btn-primary join-item",onClick:c,item:[o,i.ieee_address],title:l(a=>a.check),children:s.jsx(p,{icon:y})}),s.jsx(f,{className:"btn btn-sm btn-square btn-outline btn-info join-item",onClick:h,item:[o,i.ieee_address],title:l(a=>a.schedule),modalDescription:l(a=>a.schedule_info),modalCancelLabel:l(a=>a.cancel,{ns:"common"}),children:s.jsx(p,{icon:k})})]})})}),M=d.memo(({version:o})=>{const{t:i}=_("ota"),t=d.useMemo(()=>S(o),[o]);return t===void 0?s.jsx("span",{children:"N/A"}):s.jsxs("div",{className:"flex flex-col",children:[s.jsxs("span",{children:[i(c=>c.app),": ",`${t[0]} build ${t[1]}`]}),s.jsxs("span",{children:[i(c=>c.stack),": ",`${t[2]} build ${t[3]}`]})]})}),Z=({label:o,remaining:i,progress:t})=>{if(i&&i>0){const c=Math.floor(i/3600),u=Math.floor(i/60)%60,h=Math.floor(i%60),b=c>0,l=u>0;return s.jsxs(s.Fragment,{children:[s.jsx("progress",{className:"progress",value:t,max:"100"}),s.jsxs("div",{children:[o," ",b?`${c}:`:"",l?`${u.toString().padStart(2,"0")}:`:"",h.toString().padStart(2,"0")]})]})}return s.jsx("progress",{className:"progress",value:t,max:"100"})},ee=d.memo(({device:o})=>{const{t:i}=_("zigbee");let t="https://github.com/Koenkk/zigbee-OTA/releases";const c=o.software_build_id||i(u=>u.unknown);switch(o?.definition?.vendor){case"IKEA":t="https://ww8.ikea.com/ikeahomesmart/releasenotes/releasenotes.html";break;case"Inovelli":t="https://help.inovelli.com/en/articles/8503774-what-is-the-latest-firmware-version-for-your-device#h_b74c1e7dc6";break;case"Philips":t=`https://www.philips-hue.com/en-us/support/release-notes/${o.definition?.exposes.find(u=>u.type==="light")?"lamps":"accessories"}`;break;case"Ubisys":t=`https://www.ubisys.de/en/support/firmware/change-logs-${o.definition?.model?.replace(/[-]/g,"").toLowerCase()}/`;break}return s.jsx("a",{target:"_blank",rel:"noopener noreferrer",href:t,className:"link link-hover",children:c})});function be(){const o=z(e=>e.devices),i=z(e=>e.deviceStates),{t}=_(["ota","zigbee","common"]),[c,u]=d.useState({});d.useEffect(()=>{u({})},[o]);const h=d.useMemo(()=>{const e=[];for(let n=0;n<I.length;n++)for(const r of o[n])if(r.definition?.supports_ota&&!r.disabled){const m=i[n][r.friendly_name]??{};e.push({sourceIdx:n,device:r,state:m.update,batteryState:r.power_source==="Battery"?{batteryPercent:m.battery,batteryState:m.battery_state,batteryLow:m.battery_low}:void 0})}return e},[i,o]),b=d.useMemo(()=>Object.keys(c).length,[c]),l=d.useCallback(async e=>{const n=[];for(const r of g.getFilteredRowModel().rows)if(r.getIsSelected()){const{sourceIdx:m,device:A}=r.original;n.push(x(m,e,{id:A.ieee_address}))}u({}),n.length>0&&await Promise.allSettled(n)},[]),a=d.useCallback(async([e,n])=>await x(e,"bridge/request/device/ota_update/check",{id:n}),[]),C=d.useCallback(async([e,n])=>await x(e,"bridge/request/device/ota_update/update",{id:n}),[]),v=d.useCallback(async([e,n])=>await x(e,"bridge/request/device/ota_update/schedule",{id:n}),[]),F=d.useCallback(async([e,n])=>await x(e,"bridge/request/device/ota_update/unschedule",{id:n}),[]),D=d.useMemo(()=>[{id:"select",size:45,header:({table:e})=>s.jsx(J,{checked:e.getIsAllRowsSelected(),indeterminate:e.getIsSomeRowsSelected(),onChange:e.getToggleAllRowsSelectedHandler()}),accessorFn:()=>"",cell:({row:e})=>s.jsx("input",{type:"checkbox",className:"checkbox",checked:e.getIsSelected(),disabled:!e.getCanSelect(),onChange:e.getToggleSelectedHandler()}),enableGlobalFilter:!1,enableColumnFilter:!1,enableSorting:!1},{id:"source",size:60,header:()=>s.jsx("span",{title:t(e=>e.source,{ns:"common"}),children:s.jsx(p,{icon:E})}),accessorFn:({sourceIdx:e})=>T[e],cell:({row:{original:{sourceIdx:e}}})=>s.jsx(O,{idx:e,nameClassName:"hidden md:inline-block"}),filterFn:"equals",meta:{filterVariant:"select",showFacetedOccurrences:!0}},{id:"friendly_name",size:250,minSize:175,header:t(e=>e.friendly_name,{ns:"common"}),accessorFn:({device:e})=>`${e.friendly_name} ${e.description??""} ${e.ieee_address}`,cell:({row:{original:{sourceIdx:e,device:n,state:r,batteryState:m}}})=>s.jsxs("div",{className:"flex items-center gap-3",children:[s.jsx("div",{className:"avatar",children:s.jsx("div",{className:"h-11 w-11",style:{overflow:"visible"},children:s.jsx(B,{device:n,otaState:r?.state,disabled:!1})})}),s.jsxs("div",{className:"flex-grow flex flex-col min-w-0",children:[s.jsx(q,{to:`/device/${e}/${n.ieee_address}/info`,className:"link link-hover truncate",children:n.friendly_name}),n.description&&s.jsx("div",{className:"max-w-3xs text-xs opacity-50 truncate",title:n.description,children:n.description}),s.jsx("div",{className:"flex flex-row gap-1 mt-0.5 items-center",children:m&&s.jsx("span",{className:"badge badge-sm badge-soft badge-ghost cursor-default",children:s.jsx(Y,{device:n,...m,showLevel:!0})})})]})]}),sortingFn:(e,n)=>e.original.device.friendly_name.localeCompare(n.original.device.friendly_name),filterFn:"includesString",meta:{filterVariant:"text",textFaceted:!0}},{id:"ieee_address",minSize:175,header:t(e=>e.ieee_address,{ns:"zigbee"}),accessorFn:({device:e})=>`${e.ieee_address} ${L(e.network_address,4)} ${e.network_address}`,cell:({row:{original:{sourceIdx:e,device:n}}})=>s.jsxs(s.Fragment,{children:[s.jsx("div",{children:s.jsx(q,{to:`/device/${e}/${n.ieee_address}/info`,className:"link link-hover",children:n.ieee_address})}),s.jsxs("div",{className:"flex flex-row gap-1",children:[s.jsx("span",{className:"badge badge-ghost badge-sm cursor-default",title:t(r=>r.network_address_hex,{ns:"zigbee"}),children:L(n.network_address,4)}),s.jsx("span",{className:"badge badge-ghost badge-sm cursor-default",title:t(r=>r.network_address_dec,{ns:"zigbee"}),children:n.network_address})]})]}),sortingFn:(e,n)=>e.original.device.ieee_address.localeCompare(n.original.device.ieee_address),filterFn:"includesString",meta:{filterVariant:"text"}},{id:"model",minSize:175,header:t(e=>e.model,{ns:"zigbee"}),accessorFn:({device:e})=>`${e.definition?.model??""} ${e.model_id??""} ${e.definition?.vendor??e.manufacturer??""}`,cell:({row:{original:{device:e}}})=>s.jsxs(s.Fragment,{children:[s.jsx(W,{device:e}),s.jsx("div",{children:s.jsx("span",{className:"badge badge-sm badge-ghost tooltip tooltip-bottom","data-tip":t(n=>n.manufacturer,{ns:"zigbee"}),children:s.jsx(X,{device:e})})})]}),filterFn:"includesString",meta:{filterVariant:"text",textFaceted:!0,showFacetedOccurrences:!0}},{id:"firmware_id",minSize:175,header:t(e=>e.firmware_id,{ns:"zigbee"}),accessorFn:({device:e})=>`${e.software_build_id??""} ${e.date_code??""}`,cell:({row:{original:{device:e}}})=>s.jsxs(s.Fragment,{children:[s.jsx(ee,{device:e}),e.date_code&&s.jsx("div",{children:s.jsx("span",{className:"badge badge-sm badge-ghost tooltip tooltip-bottom","data-tip":t(n=>n.firmware_build_date,{ns:"zigbee"}),children:e.date_code})})]}),filterFn:"includesString",meta:{filterVariant:"text"}},{id:"firmware_version",minSize:175,header:t(e=>e.firmware_version),accessorFn:({state:e})=>S(e?.installed_version)?.join(" "),cell:({row:{original:{state:e}}})=>s.jsx(M,{version:e?.installed_version}),filterFn:"includesString",meta:{filterVariant:"text"}},{id:"available_firmware_version",minSize:175,header:t(e=>e.available_firmware_version),accessorFn:({state:e})=>S(e?.latest_version)?.join(" "),cell:({row:{original:{state:e}}})=>s.jsx(M,{version:e?.latest_version}),filterFn:"includesString",meta:{filterVariant:"text"}},{id:"state",header:t(e=>e.state,{ns:"common"}),accessorFn:({state:e})=>e?.state?t(n=>n[e.state]):t(n=>n.unknown,{ns:"zigbee"}),filterFn:"equals",meta:{filterVariant:"select"}},{id:"actions",header:"",minSize:130,accessorFn:({state:e})=>e?.state,cell:({row:{original:{sourceIdx:e,device:n,state:r}}})=>r?.state==="updating"?s.jsx(Z,{label:t(m=>m.remaining_time),remaining:r.remaining,progress:r.progress}):s.jsx(Q,{sourceIdx:e,device:n,state:r,onCheckClick:a,onUpdateClick:C,onScheduleClick:v,onUnscheduleClick:F}),enableSorting:!1,enableColumnFilter:!1,enableGlobalFilter:!1}],[a,C,v,F,t]),{table:g,resetFilters:N,globalFilter:j,columnFilters:w}=G({id:"ota-devices",columns:D,data:h,visibleColumns:{source:U,state:!1},sorting:[{id:"friendly_name",desc:!1}],rowSelection:c,onRowSelectionChange:u});return d.useEffect(()=>{const e=new Set;for(const m of g.getFilteredRowModel().rows)e.add(m.id);let n=!1;const r={};for(const m in c)e.has(m)?r[m]=!0:n=!0;n&&u(r)},[g,c,h,j,w]),s.jsxs(s.Fragment,{children:[s.jsx(P,{children:s.jsx(K,{table:g,resetFilters:N,globalFilter:j,columnFilters:w})}),s.jsxs("div",{className:"mb-5",children:[s.jsxs("div",{className:"flex flex-row flex-wrap gap-2 px-2 pb-3",children:[s.jsx(f,{className:"btn btn-outline btn-error btn-sm join-item",item:"bridge/request/device/ota_update/check",onClick:l,title:t(e=>e.check_selected),modalDescription:t(e=>e.dialog_confirmation_prompt,{ns:"common"}),modalCancelLabel:t(e=>e.cancel,{ns:"common"}),disabled:b===0,children:`${t(e=>e.check_selected)} (${b})`}),s.jsx(f,{className:"btn btn-outline btn-error btn-sm join-item",item:"bridge/request/device/ota_update/update",onClick:l,title:t(e=>e.update_selected),modalDescription:t(e=>e.update_selected_info),modalCancelLabel:t(e=>e.cancel,{ns:"common"}),disabled:b===0,children:`${t(e=>e.update_selected)} (${b})`}),s.jsx(f,{className:"btn btn-outline btn-error btn-sm join-item",item:"bridge/request/device/ota_update/schedule",onClick:l,title:t(e=>e.schedule_selected),modalDescription:t(e=>e.dialog_confirmation_prompt,{ns:"common"}),modalCancelLabel:t(e=>e.cancel,{ns:"common"}),disabled:b===0,children:`${t(e=>e.schedule_selected)} (${b})`}),s.jsx(f,{className:"btn btn-outline btn-error btn-sm join-item",item:"bridge/request/device/ota_update/unschedule",onClick:l,title:t(e=>e.unschedule_selected),modalDescription:t(e=>e.dialog_confirmation_prompt,{ns:"common"}),modalCancelLabel:t(e=>e.cancel,{ns:"common"}),disabled:b===0,children:`${t(e=>e.unschedule_selected)} (${b})`})]}),s.jsx(H,{id:"ota-devices",table:g,resetFilters:N,globalFilter:j,columnFilters:w})]})]})}export{be as default};