zigbee2mqtt-frontend 0.9.1 → 0.9.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.
- package/CHANGELOG.md +19 -0
- package/dist/assets/{Availability-e3f34491.js → Availability-e21b5cd4.js} +1 -1
- package/dist/assets/Availability-e21b5cd4.js.br +0 -0
- package/dist/assets/{CodeEditor-8f838f2b.js → CodeEditor-bcea557c.js} +1 -1
- package/dist/assets/CodeEditor-bcea557c.js.br +0 -0
- package/dist/assets/ConnectedDevicePage-2bf88446.js +1 -0
- package/dist/assets/ConnectedDevicePage-2bf88446.js.br +0 -0
- package/dist/assets/{ConnectedMap-f2f16e4a.js → ConnectedMap-e5a88662.js} +1 -1
- package/dist/assets/ConnectedMap-e5a88662.js.br +0 -0
- package/dist/assets/{Dashboard-a31f63a3.js → Dashboard-39a47135.js} +1 -1
- package/dist/assets/Dashboard-39a47135.js.br +0 -0
- package/dist/assets/{DashboardDevice-ccfe7ecb.js → DashboardDevice-53502186.js} +1 -1
- package/dist/assets/DashboardDevice-53502186.js.br +0 -0
- package/dist/assets/{DashboardFeatureWrapper-a0202672.js → DashboardFeatureWrapper-4eb44544.js} +1 -1
- package/dist/assets/DashboardFeatureWrapper-4eb44544.js.br +0 -0
- package/dist/assets/{DeviceImage-b0ce2953.js → DeviceImage-7f9c1d0b.js} +1 -1
- package/dist/assets/DeviceImage-7f9c1d0b.js.br +0 -0
- package/dist/assets/{GroupPage-c55487be.js → GroupPage-d5b1f216.js} +1 -1
- package/dist/assets/GroupPage-d5b1f216.js.br +0 -0
- package/dist/assets/{ReactTableCom-c5fa0b55.js → ReactTableCom-94fac1ed.js} +1 -1
- package/dist/assets/ReactTableCom-94fac1ed.js.br +0 -0
- package/dist/assets/{RecallRemove-70fe8bb8.js → RecallRemove-eea6bd1b.js} +1 -1
- package/dist/assets/RecallRemove-eea6bd1b.js.br +0 -0
- package/dist/assets/{_baseSet-1ec3161b.js → _baseSet-71bef10a.js} +1 -1
- package/dist/assets/{_getAllKeysIn-d1e577d0.js → _getAllKeysIn-0e9e88c6.js} +1 -1
- package/dist/assets/{bootstrap-5.esm-35e5e53c.js → bootstrap-5.esm-03fbaf7a.js} +1 -1
- package/dist/assets/bootstrap-5.esm-03fbaf7a.js.br +0 -0
- package/dist/assets/index-1bf471bb.js +66 -0
- package/dist/assets/index-1bf471bb.js.br +0 -0
- package/dist/assets/index-2a4cf226.js +1 -0
- package/dist/assets/index-2a4cf226.js.br +0 -0
- package/dist/assets/{index-fa2b36de.js → index-3286b31b.js} +1 -1
- package/dist/assets/index-3286b31b.js.br +0 -0
- package/dist/assets/{index-cfdcdcf7.js → index-377f0e4f.js} +1 -1
- package/dist/assets/index-377f0e4f.js.br +0 -0
- package/dist/assets/{index-87401d53.js → index-58ee66c1.js} +1 -1
- package/dist/assets/index-58ee66c1.js.br +0 -0
- package/dist/assets/{index-16e319d7.js → index-67556f42.js} +46 -63
- package/dist/assets/index-67556f42.js.br +0 -0
- package/dist/assets/index-789be13c.js +1 -0
- package/dist/assets/{index-58298b0b.js → index-8cef62f7.js} +1 -1
- package/dist/assets/index-8cef62f7.js.br +0 -0
- package/dist/assets/index-b656f632.js +1 -0
- package/dist/assets/index-b656f632.js.br +0 -0
- package/dist/assets/{index-facf920d.js → index-e58a3a96.js} +1 -1
- package/dist/assets/index-e58a3a96.js.br +0 -0
- package/dist/assets/{intersection-87b17905.js → intersection-7e9d5857.js} +1 -1
- package/dist/assets/intersection-7e9d5857.js.br +0 -0
- package/dist/assets/{isEqual-7fe66f96.js → isEqual-7263d7f1.js} +1 -1
- package/dist/assets/{jszip.min-db1a8563.js → jszip.min-4f8e7911.js} +1 -1
- package/dist/assets/jszip.min-4f8e7911.js.br +0 -0
- package/dist/assets/{persist-2803de70.js → persist-2ee41679.js} +1 -1
- package/dist/assets/persist-2ee41679.js.br +0 -0
- package/dist/assets/{rjsf-translation-fields-201a8d86.js → rjsf-translation-fields-bf894a57.js} +1 -1
- package/dist/assets/{spinner-d5ff5058.js → spinner-70f57ec1.js} +1 -1
- package/dist/assets/{vendor-links-6df665d0.js → vendor-links-d1510746.js} +1 -1
- package/dist/assets/vendor-links-d1510746.js.br +0 -0
- package/dist/index.html +1 -1
- package/dist/index.html.br +0 -0
- package/package.json +1 -1
- package/dist/assets/Availability-e3f34491.js.br +0 -0
- package/dist/assets/CodeEditor-8f838f2b.js.br +0 -0
- package/dist/assets/ConnectedDevicePage-23fbac1c.js +0 -1
- package/dist/assets/ConnectedDevicePage-23fbac1c.js.br +0 -0
- package/dist/assets/ConnectedMap-f2f16e4a.js.br +0 -0
- package/dist/assets/Dashboard-a31f63a3.js.br +0 -0
- package/dist/assets/DashboardDevice-ccfe7ecb.js.br +0 -0
- package/dist/assets/DashboardFeatureWrapper-a0202672.js.br +0 -0
- package/dist/assets/DeviceImage-b0ce2953.js.br +0 -0
- package/dist/assets/GroupPage-c55487be.js.br +0 -0
- package/dist/assets/ReactTableCom-c5fa0b55.js.br +0 -0
- package/dist/assets/RecallRemove-70fe8bb8.js.br +0 -0
- package/dist/assets/bootstrap-5.esm-35e5e53c.js.br +0 -0
- package/dist/assets/index-16e319d7.js.br +0 -0
- package/dist/assets/index-58298b0b.js.br +0 -0
- package/dist/assets/index-6f4fc5d2.js +0 -1
- package/dist/assets/index-6f4fc5d2.js.br +0 -0
- package/dist/assets/index-87401d53.js.br +0 -0
- package/dist/assets/index-9d70ff17.js +0 -1
- package/dist/assets/index-cdcf121a.js +0 -36
- package/dist/assets/index-cdcf121a.js.br +0 -0
- package/dist/assets/index-cfdcdcf7.js.br +0 -0
- package/dist/assets/index-fa2281ed.js +0 -1
- package/dist/assets/index-fa2281ed.js.br +0 -0
- package/dist/assets/index-fa2b36de.js.br +0 -0
- package/dist/assets/index-facf920d.js.br +0 -0
- package/dist/assets/intersection-87b17905.js.br +0 -0
- package/dist/assets/jszip.min-db1a8563.js.br +0 -0
- package/dist/assets/persist-2803de70.js.br +0 -0
- package/dist/assets/vendor-links-6df665d0.js.br +0 -0
@@ -1 +0,0 @@
|
|
1
|
-
import{w as C,r as f,j as e,D as P,N as G,e as X,u as N,M as Z,f as ee,h as se,k as te,B as j,c as S,a as A,i as L,C as U,b as ne,E as T,d as ie,G as H,m as R,p as re,H as oe,x as ae,_ as ce,R as z,A as le,z as de,n as ue}from"./index-16e319d7.js";import{F as me,a as he,b as pe,w as ge,T as ve}from"./bootstrap-5.esm-35e5e53c.js";import{D as xe,a as fe,A as be}from"./Availability-e3f34491.js";import{D as je}from"./DeviceImage-b0ce2953.js";import{V as Ne,M as _e}from"./vendor-links-6df665d0.js";import{L as Ce,D,P as Se}from"./index-cfdcdcf7.js";import{E as y,D as Ae,A as Ie,R as we}from"./RecallRemove-70fe8bb8.js";import{F as Re,a as V,T as Ee}from"./DashboardFeatureWrapper-a0202672.js";import{T as ke,D as Pe}from"./rjsf-translation-fields-201a8d86.js";import{L as ye,A as Oe}from"./index-facf920d.js";import"./_getAllKeysIn-d1e577d0.js";import"./isEqual-7fe66f96.js";import"./intersection-87b17905.js";import"./index-9d70ff17.js";import"./powerSourceTypeToTranslationKey-452dac81.js";import"./_baseSet-1ec3161b.js";const W={"device-pic":"_device-pic_iu1xf_1","small-nav":"_small-nav_iu1xf_5"};function Be(s){const{allDevices:t,currentDevice:n,tab:r="info",t:i}=s,[o,a]=f.useState(""),c=Object.values(t).filter(d=>d.friendly_name.toLowerCase().includes(o.toLowerCase())&&d.ieee_address!==n.ieee_address);return e.jsx("h1",{className:"h3",children:e.jsxs(P,{children:[e.jsxs(P.Toggle,{"aria-label":i("select_a_device"),variant:"",size:"lg",children:[n.friendly_name," "]}),e.jsxs(P.Menu,{children:[e.jsx(me.Control,{autoFocus:!0,className:"mx-3 my-2 w-auto",placeholder:i("type_to_filter"),onChange:d=>a(d.target.value),value:o}),e.jsx($e,{devices:c,currentDevice:n,tab:r,setSearchTerm:a})]})]})})}const Me=C("devicePage")(Be);function $e({devices:s,currentDevice:t,tab:n,setSearchTerm:r}){return e.jsx(e.Fragment,{children:Object.values(s).map(i=>e.jsx(P.Item,{active:t.ieee_address===i.ieee_address,href:`#/device/${i.ieee_address}/${n}`,onClick:()=>r(""),children:i.friendly_name},i.ieee_address))})}const Le=s=>[{translationKey:"about",url:`/device/${s}/info`},{translationKey:"exposes",url:`/device/${s}/exposes`},{translationKey:"bind",url:`/device/${s}/bind`},{translationKey:"reporting",url:`/device/${s}/reporting`},{translationKey:"settings",url:`/device/${s}/settings`},{translationKey:"settings_specific",url:`/device/${s}/settings-specific`},{translationKey:"state",url:`/device/${s}/state`},{translationKey:"clusters",url:`/device/${s}/clusters`},{translationKey:"scene",url:`/device/${s}/scene`},{translationKey:"dev_console",url:`/device/${s}/dev-console`}],Ue=G.create(s=>{const t=X(),{device:n,setDeviceDescription:r}=s,[i,o]=f.useState(n.description),{t:a}=N(["zigbee","common"]),c=async()=>{await r(n.friendly_name,i),t.remove()};return e.jsxs(Z,{isOpen:t.visible,children:[e.jsxs(ee,{children:[e.jsx("h3",{children:a("update_description")}),e.jsx("small",{children:n.friendly_name})]}),e.jsx(se,{children:e.jsx("div",{className:"card",children:e.jsx("div",{className:"card-body",children:e.jsxs("div",{className:"mb-3",children:[e.jsx("label",{className:"form-label",children:a("description")}),e.jsx("textarea",{rows:3,onChange:d=>o(d.target.value),className:"form-control",value:i})]})})})}),e.jsxs(te,{children:[e.jsx("button",{type:"button",className:"btn btn-secondary",onClick:t.remove,children:a("common:close")}),e.jsx("button",{type:"button",className:"btn btn-primary",onClick:c,children:a("zigbee:save_description")})]})]})}),De=s=>{const{device:t,setDeviceDescription:n}=s,{t:r}=N(["zigbee","common"]);return e.jsx(j,{className:"btn btn-link btn-sm d-md-inline-block mx-1",onClick:()=>G.show(Ue,{device:t,setDeviceDescription:n}),title:r("edit_description"),children:e.jsx("i",{className:"fa fa-edit"})})},Fe=/\[(.*?)]\((.*?)\)/;class Ke extends f.Component{render(){var x;const{device:t,deviceStates:n,bridgeInfo:r,availability:i,t:o}=this.props,{configureDevice:a,renameDevice:c,removeDevice:d,setDeviceDescription:u,interviewDevice:h}=this.props,m=!!((x=r.config)!=null&&x.homeassistant),g=n[t.friendly_name]??{},v=[{translationKey:"friendly_name",render:l=>e.jsxs("dd",{className:"col-12 col-md-7",children:[e.jsx("strong",{children:l.friendly_name}),e.jsx(fe,{device:l,renameDevice:c,homeassistantEnabled:m,style:"link"})]})},{translationKey:"zigbee:description",render:l=>e.jsxs("dd",{className:"col-12 col-md-7",children:[e.jsx("pre",{style:{display:"inline"},children:l.description}),e.jsx(De,{device:l,setDeviceDescription:u,style:"link"})]})},{translationKey:"last_seen",render:(l,p,b)=>e.jsx("dd",{className:"col-12 col-md-7",children:e.jsx(Ce,{lastSeenType:b.config.advanced.last_seen,state:p})})},{translationKey:"avaliability:avaliability",render:(l,p,b,I)=>{var k;const{config:_}=b,$=!!_.availability,O=((k=_.devices[l.ieee_address])==null?void 0:k.availability)!==!1;return e.jsx("dd",{className:"col-12 col-md-7",children:e.jsx(be,{availability:I,disabled:L(l,_),availabilityFeatureEnabled:$,availabilityEnabledForDevice:O})})}},{key:"type",translationKey:"device_type"},{key:"model_id",translationKey:"zigbee_model"},{key:"manufacturer",translationKey:"zigbee_manufacturer"},{key:"definition.description",translationKey:"description",if:"supported",render:l=>{var I,_;const p=Fe.exec((I=l.definition)==null?void 0:I.description);let b=e.jsx("span",{children:(_=l.definition)==null?void 0:_.description});if(p){const[$,O,k]=p;b=e.jsx("a",{target:"_blank",rel:"noopener noreferrer",href:k,children:O})}return e.jsx("dd",{className:"col-12 col-md-7",children:b})}},{render:(l,p,b,I,_)=>e.jsx("dd",{className:"col-12 col-md-7",children:e.jsxs("p",{className:ne("mb-0","font-weight-bold",{"text-danger":!l.supported,"text-success":l.supported}),children:[e.jsx(D,{name:"supported",value:l.supported}),!l.supported&&e.jsxs(e.Fragment,{children:[" ",e.jsxs("a",{target:"_blank",rel:"noopener noreferrer",href:T,children:["(",_("how_to_add_support"),")"]})]})]})}),translationKey:"support_status"},{key:"ieee_address",translationKey:"ieee_address"},{key:"network_address",translationKey:"network_address",render:l=>e.jsxs("dd",{className:"col-12 col-md-7",children:[e.jsx("abbr",{title:o("network_address_hex"),children:ie(l.network_address)})," / ",e.jsx("abbr",{title:o("network_address_dec"),children:l.network_address})]})},{key:"date_code",translationKey:"firmware_build_date",if:"date_code"},{key:"software_build_id",translationKey:"firmware_version",if:"software_build_id"},{key:"definition.vendor",translationKey:"manufacturer",if:"supported",render:l=>e.jsx("dd",{className:"col-12 col-md-7",children:e.jsx(Ne,{device:l})})},{key:"definition.model",translationKey:"model",if:"supported",render:l=>e.jsx("dd",{className:"col-12 col-md-7",children:e.jsx(_e,{device:l})})},{translationKey:"power",render:(l,p)=>e.jsx("dd",{className:"col-12 col-md-7",children:e.jsx(Se,{showLevel:!0,device:l,deviceState:p})})},{translationKey:"interview_completed",render:l=>e.jsx("dd",{className:"col-12 col-md-7",children:e.jsx(D,{name:"interview_completed",value:l.interview_completed})})}];return e.jsxs(f.Fragment,{children:[e.jsx("div",{className:"d-flex justify-content-center",children:e.jsx(je,{className:`card-img-top w-auto ${W["device-pic"]}`,device:t,deviceStatus:g,disabled:L(t,r.config)})}),e.jsx("dl",{className:"row",children:v.filter(l=>l.if===void 0||U(t,l.if,!1)).map(l=>e.jsxs(f.Fragment,{children:[e.jsx("dt",{className:"col-12 col-md-5",children:o(l.translationKey)}),l.render?l.render(t,g,r,i[t.friendly_name]??"offline",o):e.jsx("dd",{className:"col-12 col-md-7",children:U(t,l.key)})]},l.translationKey))}),e.jsx(xe,{device:t,state:g,homeassistantEnabled:m,configureDevice:a,renameDevice:c,removeDevice:d,setDeviceDescription:u,interviewDevice:h})]})}}const Ge=["deviceStates","bridgeInfo","availability"],Te=C("zigbee")(S(Ge,A)(Ke)),He=Te,B={genPowerCfg:"PowerCfg",genScenes:"Scenes",genOnOff:"OnOff",genLevelCtrl:"LevelCtrl",lightingColorCtrl:"LColorCtrl",closuresWindowCovering:"Closures",genMultistateInput:"MultistateInput",genGroups:"Groups",genOta:"Ota",touchlink:"Touchlink",genIdentify:"Identify",msTemperatureMeasurement:"Temperature",msIlluminanceMeasurement:"Illuminance",msRelativeHumidity:"Humidity",msPressureMeasurement:"Pressure",msSoilMoisture:"Soil Moisture"};var E=(s=>(s[s.MULTIPLE=0]="MULTIPLE",s[s.SINGLE=1]="SINGLE",s))(E||{});function q(s){return s.length>0&&typeof s[0]!="string"}function ze(s){const[t]=f.useState(H(5)),{clusters:n=[],onChange:r,label:i,value:o,disabled:a}=s;let c=[];const d=u=>{const{checked:h,name:m}=u.target;let g=[...o];h?g.push(m):g=g.filter(v=>v!==m),r(g)};return q(n)?console.warn("Not implemented"):c=[...n].sort((u,h)=>u.toString().localeCompare(h.toString())).map(u=>e.jsxs("div",{className:"form-check form-check-inline",children:[e.jsx("input",{className:"form-check-input",type:"checkbox",checked:o.includes(u),name:u,id:`${t}_${u}`,value:u,onChange:d,disabled:a}),e.jsx("label",{className:"form-check-label",htmlFor:`${t}_${u}`,title:u,children:B[u]??u})]},u)),e.jsxs("div",{className:"form-group",children:[i&&e.jsx("label",{className:"form-label",children:i}),e.jsx("div",{className:"form-control border-0",children:c})]})}function Ve(s){const[t]=f.useState(H(5)),{clusters:n=[],onChange:r,value:i,label:o,disabled:a,...c}=s,{t:d}=N(["zigbee","common"]),u=[e.jsx("option",{hidden:!0,children:d("select_cluster")},"hidden")],h=m=>{r(m.target.value)};return q(n)?n.forEach(m=>{const g=m.clusters.map(v=>e.jsx("option",{value:v,children:B[v]??v},v));g.length===0&&g.push(e.jsx("option",{disabled:!0,children:d("none")},"none")),u.push(e.jsx("optgroup",{label:d(m.name),children:g},m.name))}):n.forEach(m=>{u.push(e.jsx("option",{value:m,children:B[m]??m},m))}),e.jsxs("div",{className:"form-group",children:[o&&e.jsx("label",{htmlFor:t,className:"form-label",children:o}),e.jsx("select",{id:t,value:i,className:"form-select",onChange:h,disabled:a,...c,children:u})]})}function M(s){const{pickerType:t,onChange:n,clusters:r,value:i,label:o,disabled:a,...c}=s;return t===E.MULTIPLE?e.jsx(ze,{onChange:n,clusters:r,value:i,disabled:a,label:o,...c}):e.jsx(Ve,{onChange:n,clusters:r,value:i,disabled:a,label:o,...c})}const We=(s,t,n)=>{var r;return s.target.type==="group"?n.find(i=>i.id===s.target.id):t[(r=s.target)==null?void 0:r.ieee_address]};class qe extends f.Component{constructor(){super(...arguments),this.state={stateRule:{}},this.setSourceEp=t=>{const{stateRule:n}=this.state;n.source.endpoint=t,this.setState({stateRule:n})},this.setDestination=(t,n)=>{const{stateRule:r}=this.state;if(n==="device"){const i=R(t);r.target.ieee_address=t.ieee_address,r.target.type="endpoint",r.target.endpoint=i[0],delete r.target.id}else n==="group"&&(r.target.id=t.id,r.target.type="group",delete r.target.ieee_address);r.clusters=[],this.setState({stateRule:r})},this.setDestinationEp=t=>{const{stateRule:n}=this.state;n.target.endpoint=t,n.clusters=[],this.setState({stateRule:n})},this.setClusters=t=>{const{stateRule:n}=this.state;n.clusters=t,this.setState({stateRule:n})},this.onBindOrUnBindClick=t=>{const{onUnBind:n,onBind:r}=this.props,i=this.getBidingParams();t=="Bind"?r(i):n(i)}}static getDerivedStateFromProps(t,n){const{rule:r}=t;return{stateRule:r}}getBidingParams(){var c;const{device:t,groups:n,devices:r}=this.props,{stateRule:i}=this.state;let o="",a;if(i.target.type==="group")o=n.find(u=>u.id===i.target.id).friendly_name;else if(i.target.type==="endpoint"){const d=r[(c=i.target)==null?void 0:c.ieee_address];o=d.friendly_name,d.type!=="Coordinator"&&(a=i.target.endpoint)}return{from:t.friendly_name,from_endpoint:i.source.endpoint,to:o,to_endpoint:a,clusters:i.clusters}}isValidRule(){const{stateRule:t}=this.state;let n;return t.target.type=="endpoint"?n=t.source.endpoint&&t.target.ieee_address&&t.target.endpoint&&t.clusters.length>0:t.target.type=="group"&&(n=t.source.endpoint&&t.target.id&&t.clusters.length>0),!!n}render(){const{devices:t,groups:n,device:r,t:i}=this.props,{stateRule:o}=this.state,a=R(r),c=We(o,t,n),d=R(c),u=new Set(o.clusters),h=r.endpoints[o.source.endpoint],m=o.target.type==="endpoint"&&o.target.endpoint?c==null?void 0:c.endpoints[o.target.endpoint]:void 0,g=o.target.type==="group"||(c==null?void 0:c.type)=="Coordinator";if(h&&(m||g))for(const v of[...h.clusters.input,...h.clusters.output]){const x=h.clusters.input.includes(v)&&(m==null?void 0:m.clusters.output.includes(v)),l=h.clusters.output.includes(v)&&(m==null?void 0:m.clusters.input.includes(v));(x||l||g)&&u.add(v)}return e.jsxs("div",{className:"row pb-2 border-bottom",children:[e.jsx("div",{className:"col-md-2",children:e.jsx(y,{label:i("source_endpoint"),disabled:!o.isNew,values:a,value:o.source.endpoint,onChange:this.setSourceEp})}),e.jsx("div",{className:"col-md-2",children:e.jsx(Ae,{label:i("destination"),disabled:!o.isNew,value:o.target.ieee_address||o.target.id,devices:t,groups:n,onChange:this.setDestination})}),e.jsx("div",{className:"col-md-2",children:o.target.type==="endpoint"?e.jsx(y,{label:i("destination_endpoint"),disabled:!o.isNew,values:d,value:o.target.endpoint,onChange:this.setDestinationEp}):null}),e.jsx("div",{className:"col-md-4",children:e.jsx(M,{label:i("clusters"),pickerType:E.MULTIPLE,clusters:Array.from(u),value:o.clusters,onChange:this.setClusters})}),e.jsx("div",{className:"col-md-2",children:e.jsxs("div",{className:"form-group",children:[e.jsx("label",{className:"form-label",children:"Actions"}),e.jsx("div",{className:"form-control border-0",children:e.jsxs("div",{className:"btn-group btn-group-sm",children:[e.jsxs(j,{item:"Bind",disabled:!this.isValidRule(),title:i("bind"),className:"btn btn-primary",onClick:this.onBindOrUnBindClick,children:[i("bind")," ",e.jsx("i",{className:"fa fa-heart"})]}),e.jsxs(j,{item:"Unbind",disabled:!o.isNew&&!this.isValidRule(),title:i("unbind"),className:"btn btn-danger",onClick:this.onBindOrUnBindClick,children:[e.jsx("i",{className:"fa fa-heart-broken"})," ",i("unbind")]})]})})]})})]})}}const Je=C(["common","zigbee"])(qe),Ye=s=>`${s.source.endpoint}-${s.isNew}${s.source.ieee_address}-${s.target.id}-${s.target.ieee_address}-${s.clusters.join("-")}`,Qe=s=>{const t={};return Object.entries(s.endpoints).forEach(([n,r])=>{r.bindings.forEach(i=>{let o=i.target.id??`${i.target.ieee_address}-${i.target.endpoint}`;o=`${o}-${n}`,t[o]?t[o].clusters.push(i.cluster):t[o]={source:{ieee_address:s.ieee_address,endpoint:n},target:i.target,clusters:[i.cluster]}})}),Object.values(t)};function Xe(s){const{device:t,devices:n,groups:r,removeBind:i,addBind:o}=s,[a]=f.useState({isNew:Date.now(),target:{},source:{ieee_address:t.ieee_address,endpoint:""},clusters:[]}),c=f.useMemo(()=>Qe(t),[t]);return e.jsx("div",{className:"container-fluid",children:[...c,a].map((d,u)=>e.jsx(Je,{rule:d,groups:r,onUnBind:i,onBind:o,device:t,idx:u,devices:n},Ye(d)))})}const Ze=["devices","groups"],es=S(Ze,A)(Xe),ss=es;var ts=he,ns=pe,is=ns(function(s,t,n){ts(s,t,n)}),rs=is;const J=re(rs);function Y(s){const{cluster:t,device:n,onChange:r,label:i,value:o,clusters:a,...c}=s,{bridgeDefinitions:d}=oe.getState(),{t:u}=N("zigbee"),h=x=>{const{value:l}=x.target,b=m(t)[l];b&&r(l,b)},m=x=>{const l=a??d;if(l.hasOwnProperty("clusters")&&l.clusters.hasOwnProperty(x)){const p=l.clusters[x];if(p&&Object.keys(p).length!==0)return p.attributes}else if(l.hasOwnProperty("custom_clusters")&&l.custom_clusters.hasOwnProperty(n.ieee_address)&&l.custom_clusters[n.ieee_address].hasOwnProperty(x)){const p=l.custom_clusters[n.ieee_address][x];if(p&&Object.keys(p).length!==0)return p.attributes}return[]},g=Object.keys(m(t));o!==void 0&&!g.includes(o)&&g.push(o);const v=g.map(x=>e.jsx("option",{value:x,children:x},x));return v.unshift(e.jsx("option",{hidden:!0,children:u("select_attribute")},"none")),e.jsxs("div",{className:"form-group",children:[i&&e.jsx("label",{className:"form-label",children:i}),e.jsx("select",{disabled:g.length===0,className:"form-control",onChange:h,value:o,...c,children:v})]})}const os=(s,t,n)=>{let r=[],i=[];n&&!i.includes(n)&&i.push(n);const o=s.endpoints[t];return o&&(i=i.concat(o.clusters.output),r=[...o.clusters.input],r=r.filter(a=>!i.includes(a))),[{name:"available",clusters:i},{name:"possible",clusters:r}]},as=["maximum_report_interval","minimum_report_interval","reportable_change","endpoint","cluster","attribute"],cs=s=>as.every(t=>s[t]!==void 0&&s[t]!=="");function F(s){const{onChange:t,label:n,value:r,name:i}=s;return e.jsxs("div",{className:"form-group",children:[e.jsx("label",{className:"form-label text-nowrap",children:n}),e.jsx("input",{onChange:t,value:r,required:!0,type:"number",name:i,className:"form-control"})]})}class ls extends f.Component{constructor(){super(...arguments),this.state={stateRule:{}},this.setSourceEp=t=>{const{stateRule:n}=this.state;n.endpoint=t,this.setState({stateRule:n})},this.setCluster=t=>{const{stateRule:n}=this.state;n.cluster=t,this.setState({stateRule:n})},this.setAttribute=t=>{const{stateRule:n}=this.state;n.attribute=t,this.setState({stateRule:n})},this.changeHandlerNumber=t=>{const{stateRule:n}=this.state,{name:r,valueAsNumber:i}=t.target;Number.isNaN(i)||(n[r]=i),this.setState({stateRule:n})},this.applyRule=()=>{const{onApply:t}=this.props,{stateRule:n}=this.state;t(n)},this.disableRule=()=>{const{onApply:t}=this.props,{stateRule:n}=this.state;t({...n,maximum_report_interval:65535})}}static getDerivedStateFromProps(t,n){const{rule:r}=t,{stateRule:i}=n;return{stateRule:J({},r,i)}}render(){const{rule:t,device:n,t:r}=this.props,{stateRule:i}=this.state,o=R(n);return e.jsxs("div",{className:"row pb-2 border-bottom",children:[e.jsx("div",{className:"col-md-2",children:e.jsx(y,{label:r("endpoint"),disabled:!t.isNew,values:o,value:i.endpoint,onChange:this.setSourceEp})}),e.jsx("div",{className:"col-md-2",children:e.jsx(M,{label:r("cluster"),disabled:!i.endpoint,pickerType:E.SINGLE,clusters:os(n,i.endpoint,i.cluster),value:i.cluster,onChange:this.setCluster})}),e.jsx("div",{className:"col-md-2",children:e.jsx(Y,{label:r("attribute"),disabled:!i.cluster,value:i.attribute,cluster:i.cluster,device:n,onChange:this.setAttribute})}),e.jsx("div",{className:"col-md-2",children:e.jsx(F,{onChange:this.changeHandlerNumber,value:i.minimum_report_interval,name:"minimum_report_interval",label:r("min_rep_interval")})}),e.jsx("div",{className:"col-md-1",children:e.jsx(F,{onChange:this.changeHandlerNumber,value:i.maximum_report_interval,name:"maximum_report_interval",label:r("max_rep_interval")})}),e.jsx("div",{className:"col-md-1",children:e.jsxs("div",{className:"form-group",children:[e.jsx("label",{className:"form-label text-nowrap",children:r("min_rep_change")}),e.jsx("input",{onChange:this.changeHandlerNumber,value:i.reportable_change,required:!0,type:"number",name:"reportable_change",className:"form-control"})]})}),e.jsx("div",{className:"col-md-2",children:e.jsxs("div",{className:"form-group",children:[e.jsx("label",{className:"form-label",children:r("actions")}),e.jsx("div",{className:"form-group",children:e.jsxs("div",{className:"btn-group",role:"group","aria-label":"Basic example",children:[e.jsx(j,{disabled:!cs(i),className:"btn btn-primary",onClick:this.applyRule,children:r("common:apply")}),i.isNew?null:e.jsx(j,{prompt:!0,className:"btn btn-danger",onClick:this.disableRule,children:r("common:disable")})]})})]})})]})}}const ds=C(["zigbee","common"])(ls),us=s=>{const t=[];return Object.entries(s.endpoints).forEach(([n,r])=>{r.configured_reportings.forEach(i=>{t.push({...i,endpoint:n})})}),t},ms=s=>`${s.isNew}${s.endpoint}${s.cluster}-${s.attribute}`;function hs(s){const{configureReport:t,device:n}=s,[r]=f.useState({isNew:Date.now(),reportable_change:0,minimum_report_interval:60,maximum_report_interval:3600,endpoint:"",cluster:"",attribute:""}),i=a=>{const{cluster:c,endpoint:d,attribute:u,minimum_report_interval:h,maximum_report_interval:m,reportable_change:g}=a;t(n.friendly_name,d,{cluster:c,attribute:u,minimum_report_interval:h,maximum_report_interval:m,reportable_change:g})},o=f.useMemo(()=>us(n),[n]);return e.jsx("div",{className:"container-fluid",children:[...o,r].map(a=>e.jsx(ds,{rule:a,device:n,onApply:i},ms(a)))})}const ps=["devices","groups"],gs=S(ps,A)(hs),vs=gs;function xs(s){const{device:t,deviceStates:n}=s,r=n[t.friendly_name]??{};return e.jsx("pre",{children:JSON.stringify(r,null,4)})}const fs=["deviceStates"],bs=S(fs,A)(xs),js=bs;function Ns(s){var c,d;const{device:t,deviceStates:n,setDeviceState:r,getDeviceState:i}=s,{t:o}=N(["exposes"]),a=n[t.friendly_name]??{};return(d=(c=t.definition)==null?void 0:c.exposes)!=null&&d.length?e.jsx(Re,{feature:{features:t.definition.exposes,type:"composite"},device:t,deviceState:a,onChange:async(u,h)=>{await r(t.friendly_name,h)},onRead:async(u,h)=>{await i(t.friendly_name,h)},parentFeatures:[],featureWrapperClass:V}):o("empty_exposes_definition")}const _s=["deviceStates"],Cs=S(_s,A)(Ns),Ss=Cs,As="_tree_k0evw_1",Is={tree:As},K=s=>{const{label:t,clusters:n}=s;return n.length?e.jsxs("li",{children:[e.jsx("span",{children:t}),e.jsx("ul",{children:n.map(r=>e.jsx("li",{children:e.jsx("span",{children:r})},r))})]}):null};function ws(s){const{t}=N("zigbee"),{device:n}=s;return e.jsx("dl",{className:`${Is.tree} row`,children:e.jsx("ul",{children:e.jsxs("li",{children:[e.jsx("span",{children:n.ieee_address}),e.jsx("ul",{children:Object.entries(n.endpoints).map(([r,i])=>e.jsxs("li",{children:[e.jsxs("span",{children:[t("endpoint")," ",e.jsx("strong",{children:r})]}),e.jsxs("ul",{children:[e.jsx(K,{label:t("output_clusters"),clusters:i.clusters.output}),e.jsx(K,{label:t("input_clusters"),clusters:i.clusters.input})]})]},r))})]})})})}const Rs=ge(ve),Es=s=>{const{docsUrl:t}=s,{t:n}=N("common");return e.jsx("div",{className:"card alert alert-info",role:"alert",children:e.jsxs("div",{className:"card-body",children:[e.jsx("i",{className:"fa-solid fa-circle-info fa-2xl me-2"}),e.jsx("a",{href:t,target:"_blank",rel:"noreferrer",className:"alert-link align-middle",children:n("read_the_docs_info")})]})})},ks={"ui:order":["friendly_name","disabled","retain","retention","qos","filtered_attributes","*"]};class Ps extends f.Component{constructor(){super(...arguments),this.state={newSetting:{key:"",value:"",type:""},updatedDeviceConfig:{}},this.formData=void 0,this.updateConfig=async t=>{const{formData:n}=t,{data:r}=this.getSchemaAndConfig(),{setDeviceOptions:i,device:o}=this.props,a=ae(r,n);await i(o.ieee_address,a),this.setState({updatedDeviceConfig:{}})}}getGenericDeviceSettingsSchema(){var n;const{bridgeInfo:{config_schema:t={}}}=this.props;return((n=t.definitions)==null?void 0:n.device)??{properties:{}}}getDeviceConfig(){const{bridgeInfo:{config:t},device:n}=this.props,{updatedDeviceConfig:r}=this.state;return J({},t==null?void 0:t.device_options,t==null?void 0:t.devices[n.ieee_address],r)}getSchemaAndConfig(){const t=this.getGenericDeviceSettingsSchema(),n=this.getDeviceConfig();return{schema:t,data:n,uiSchema:ks}}render(){const{schema:t,data:n,uiSchema:r}=this.getSchemaAndConfig();return this.formData||(this.formData=n),e.jsxs(e.Fragment,{children:[e.jsx(Es,{docsUrl:"https://www.zigbee2mqtt.io/guide/configuration/devices-groups.html#common-device-options"}),e.jsx(Rs,{schema:t,formData:this.formData,onChange:i=>this.formData=i.formData,onSubmit:this.updateConfig,uiSchema:r,fields:{TitleField:ke,DescriptionField:Pe}})]})}}function ys(s){const{sceneStore:t,sceneRecall:n,sceneRemove:r,sceneRemoveAll:i,setDeviceState:o,device:a,deviceState:c}=s;return e.jsxs("div",{className:"row",children:[e.jsx("div",{className:"col-12 col-sm-6 col-xxl-6 d-flex",children:e.jsx("div",{className:"card flex-fill",children:e.jsx("div",{className:"card-body py-4",children:e.jsx(Ie,{sceneStore:t,target:a,deviceState:c,setDeviceState:o})})})}),e.jsx("div",{className:"col-12 col-sm-6 col-xxl-6 d-flex",children:e.jsx("div",{className:"card flex-fill",children:e.jsx("div",{className:"card-body py-4",children:e.jsx(we,{sceneStore:t,sceneRecall:n,sceneRemove:r,sceneRemoveAll:i,target:a,deviceState:c})})})})]})}const Os=[],Bs=S(Os,A)(ys),Ms=Bs;function $s(s){var a,c;const{device:t,bridgeInfo:{config:n},setDeviceOptions:r}=s,{t:i}=N(["exposes"]),o=n.devices[t.ieee_address]??{};return(c=(a=t.definition)==null?void 0:a.options)!=null&&c.length?e.jsx(Ee,{showEndpointLabels:!0,feature:{features:t.definition.options},type:"composite",device:t,deviceState:o,onChange:async(d,u)=>{await r(t.ieee_address,u)},featureWrapperClass:V}):i("empty_exposes_definition")}const Ls=["bridgeInfo"],Us=S(Ls,A)($s),Ds=Us;function Q(s){const{logs:t,filterFn:n}=s,r=t.filter(n),i=r.length>0?r[r.length-1]:null,o=[];return i&&o.push(e.jsx(ye,{log:i,search:"",logLevel:Oe},"log")),e.jsx(e.Fragment,{children:o})}const Fs=s=>{const{executeCommand:t,device:n,logs:r}=s,{t:i}=N("zigbee"),[o,a]=f.useState(1),[c,d]=f.useState(""),[u,h]=f.useState(""),[m,g]=f.useState(JSON.stringify({},null,2)),v=()=>{let p=!0;try{JSON.parse(m)}catch{p=!1}return p&&!isNaN(parseInt(c))&&!isNaN(parseInt(u))},x=()=>{t(n.friendly_name,o,parseInt(c),parseInt(u),JSON.parse(m))},l=p=>p.message.startsWith("Invoked ");return e.jsxs("div",{children:[e.jsxs("div",{className:"row mb-3",children:[e.jsx("div",{className:"col-4 col-sm-3",children:e.jsxs("div",{className:"form-group",children:[e.jsx("label",{className:"form-label",children:i("endpoint")}),e.jsx("input",{type:"number",min:"1",max:"255",value:o,onChange:p=>a(p.target.valueAsNumber),className:"form-control"})]})}),e.jsx("div",{className:"col-4 col-sm-3",children:e.jsxs("div",{className:"col-auto",children:[e.jsx("label",{className:"form-label",children:i("cluster")}),e.jsx("input",{type:"text",value:c,placeholder:"example: 0x0001, 1, 123",onChange:p=>d(p.target.value),className:"form-control"})]})}),e.jsx("div",{className:"col-4 col-sm-3",children:e.jsxs("div",{className:"col-auto",children:[e.jsx("label",{className:"form-label",children:i("command")}),e.jsx("input",{type:"text",value:u,placeholder:"example: 0x0001, 1, 123",onChange:p=>h(p.target.value),className:"form-control"})]})})]}),e.jsx("div",{className:"row mb-3 ",children:e.jsx("div",{className:"col-9 col-sm-9",children:e.jsxs("div",{className:"col-auto",children:[e.jsx("label",{className:"form-label",children:i("payload")}),e.jsx("textarea",{rows:3,value:m,onChange:p=>g(p.target.value),className:"form-control"})]})})}),e.jsx("div",{className:"row",children:e.jsx("div",{className:"btn-group col col-3",children:e.jsx("button",{onClick:x,disabled:!v(),type:"button",className:"btn btn-success",children:i("execute")})})}),e.jsx("div",{className:"row",children:e.jsx(Q,{logs:r,filterFn:l})})]})},Ks=f.lazy(()=>ce(()=>import("./CodeEditor-8f838f2b.js"),["./CodeEditor-8f838f2b.js","./index-16e319d7.js","./index-0f5e7faa.css","./extends-98964cd2.js"],import.meta.url));class Gs extends z.Component{constructor(){super(...arguments),this.onGenerateExternalDefinitionClick=()=>{const{generateExternalDefinition:t,device:n}=this.props;t(n.ieee_address)}}render(){const{t,generatedExternalDefinitions:n,device:r,theme:i}=this.props,o=n[r.ieee_address];return o?e.jsxs(e.Fragment,{children:[t("generated_external_definition")," (",e.jsx("a",{href:T,target:"_blank",rel:"noreferrer",children:t("documentation")}),")",e.jsx(Ks,{value:o,theme:i})]}):e.jsx(j,{className:"btn btn-primary",onClick:this.onGenerateExternalDefinitionClick,children:t("generate_external_definition")})}}const Ts=C(["devConsole","common"])(Gs);var w=(s=>(s[s.NO_DATA=0]="NO_DATA",s[s.DATA8=8]="DATA8",s[s.DATA16=9]="DATA16",s[s.DATA24=10]="DATA24",s[s.DATA32=11]="DATA32",s[s.DATA40=12]="DATA40",s[s.DATA48=13]="DATA48",s[s.DATA56=14]="DATA56",s[s.DATA64=15]="DATA64",s[s.BOOLEAN=16]="BOOLEAN",s[s.BITMAP8=24]="BITMAP8",s[s.BITMAP16=25]="BITMAP16",s[s.BITMAP24=26]="BITMAP24",s[s.BITMAP32=27]="BITMAP32",s[s.BITMAP40=28]="BITMAP40",s[s.BITMAP48=29]="BITMAP48",s[s.BITMAP56=30]="BITMAP56",s[s.BITMAP64=31]="BITMAP64",s[s.UINT8=32]="UINT8",s[s.UINT16=33]="UINT16",s[s.UINT24=34]="UINT24",s[s.UINT32=35]="UINT32",s[s.UINT40=36]="UINT40",s[s.UINT48=37]="UINT48",s[s.UINT56=38]="UINT56",s[s.UINT64=39]="UINT64",s[s.INT8=40]="INT8",s[s.INT16=41]="INT16",s[s.INT24=42]="INT24",s[s.INT32=43]="INT32",s[s.INT40=44]="INT40",s[s.INT48=45]="INT48",s[s.INT56=46]="INT56",s[s.INT64=47]="INT64",s[s.ENUM8=48]="ENUM8",s[s.ENUM16=49]="ENUM16",s[s.SEMI_PREC=56]="SEMI_PREC",s[s.SINGLE_PREC=57]="SINGLE_PREC",s[s.DOUBLE_PREC=58]="DOUBLE_PREC",s[s.OCTET_STR=65]="OCTET_STR",s[s.CHAR_STR=66]="CHAR_STR",s[s.LONG_OCTET_STR=67]="LONG_OCTET_STR",s[s.LONG_CHAR_STR=68]="LONG_CHAR_STR",s[s.ARRAY=72]="ARRAY",s[s.STRUCT=76]="STRUCT",s[s.SET=80]="SET",s[s.BAG=81]="BAG",s[s.TOD=224]="TOD",s[s.DATE=225]="DATE",s[s.UTC=226]="UTC",s[s.CLUSTER_ID=232]="CLUSTER_ID",s[s.ATTR_ID=233]="ATTR_ID",s[s.BAC_OID=234]="BAC_OID",s[s.IEEE_ADDR=240]="IEEE_ADDR",s[s.SEC_KEY=241]="SEC_KEY",s[s.UNKNOWN=255]="UNKNOWN",s))(w||{});const Hs=["Read result of","Publish 'set' 'read' to","Publish 'set' 'write' to","Wrote "];class zs extends z.Component{constructor(t){super(t),this.onEndpointChange=o=>{this.setState({attributes:[],cluster:"",endpoint:o})},this.onClusterChange=o=>{this.setState({attributes:[],cluster:o})},this.onAttributeSelect=(o,a)=>{const{attributes:c}=this.state;if(!c.find(d=>d.attribute===o)){const d=c.concat([{attribute:o,definition:a}]);this.setState({attributes:d})}},this.onAttributeDelete=o=>{const{attributes:a}=this.state,c=a.filter(d=>d.attribute!==o);this.setState({attributes:c})},this.onReadClick=()=>{const{readDeviceAttributes:o,device:a}=this.props,{cluster:c,attributes:d,endpoint:u}=this.state;o(a.friendly_name,u,c,d.map(h=>h.attribute),{})},this.onWriteClick=()=>{const{writeDeviceAttributes:o,device:a}=this.props,{cluster:c,attributes:d,endpoint:u}=this.state;o(a.friendly_name,u,c,d,{})},this.onAttributeValueChange=(o,a)=>{const{attributes:c}=this.state,d=[...c],u=d.find(h=>h.attribute===o);u&&(u.value=a),this.setState({attributes:d})};const{device:n,clusters:r}=t,i=Object.keys(n.endpoints)[0];this.state={endpoint:i,cluster:"",attributes:[]}}renderSelectedAttribute(){const{attributes:t}=this.state;return t.map(({attribute:n,value:r="",definition:i})=>e.jsx("div",{className:"row mb-1",children:e.jsx("div",{className:"col-3",children:e.jsxs("div",{className:"row",children:[e.jsx("div",{className:"col-6",children:n}),e.jsx("div",{className:"col-3",children:e.jsx(Vs,{value:r,attribute:n,definition:i,onChange:this.onAttributeValueChange,"data-testid":"attribute-value-input"})}),e.jsx("div",{className:"col-2",children:e.jsx(j,{className:"btn btn-danger btn-sm",item:n,"data-testid":"remove-attribute",onClick:this.onAttributeDelete,children:e.jsx("i",{className:"fas fa-trash"})})})]})})},n))}render(){const{cluster:t,attributes:n,endpoint:r}=this.state,i=n.length===0,o=t==="",{t:a,device:c,clusters:d}=this.props,u=R(c),h=m=>Hs.some(g=>m.message.startsWith(g));return r?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"mb-3 row",children:[e.jsx("div",{className:"col-6 col-sm-3",children:e.jsx(y,{"data-testid":"endpoint-picker",label:a("zigbee:endpoint"),values:u,value:r,onChange:this.onEndpointChange})}),e.jsx("div",{className:"col-6 col-sm-3",children:e.jsx(M,{"data-testid":"cluster-picker",label:a("cluster"),pickerType:E.SINGLE,clusters:c.endpoints[r].clusters.input,value:t,onChange:this.onClusterChange})}),e.jsx("div",{className:"col-6 col-sm-3",children:e.jsx(Y,{"data-testid":"attribute-picker",label:a("attribute"),value:"",cluster:t,device:c,clusters:d,onChange:this.onAttributeSelect})})]}),e.jsx("div",{className:"mb-3 row","data-testid":"selected-attribute",children:this.renderSelectedAttribute()}),e.jsx("div",{className:"mb-3 row",children:e.jsxs("div",{className:"btn-group col col-3",role:"group",children:[e.jsx(j,{disabled:i||o,className:"btn btn-success me-2","data-testid":"read-attribute",onClick:this.onReadClick,children:a("read")}),e.jsx(j,{disabled:i||o,className:"btn btn-danger","data-testid":"write-attribute",onClick:this.onWriteClick,children:a("write")})]})}),e.jsx(Q,{logs:this.props.logs,filterFn:h})]}):e.jsx(e.Fragment,{children:"No endpoints"})}}function Vs(s){const{value:t,onChange:n,attribute:r,definition:i,...o}=s,c={[w.CHAR_STR]:"string",[w.LONG_CHAR_STR]:"string",[w.OCTET_STR]:"string",[w.LONG_OCTET_STR]:"string"}[i.type]??"number",d=u=>{const h=c==="number"?u.target.valueAsNumber:u.target.value;n(r,h)};return e.jsx("input",{className:"form-control",type:c,value:t,onChange:d,...o})}const Ws=C(["devConsole","common"])(zs);class qs extends f.Component{render(){return e.jsxs("div",{children:[e.jsx("div",{className:"card",children:e.jsx("div",{className:"card-body",children:e.jsx(Ts,{theme:this.props.theme,device:this.props.device,generateExternalDefinition:this.props.generateExternalDefinition,generatedExternalDefinitions:this.props.generatedExternalDefinitions})})}),e.jsx("div",{className:"card",children:e.jsx("div",{className:"card-body",children:e.jsx(Ws,{theme:this.props.theme,device:this.props.device,logs:this.props.logs,i18n:this.props.i18n,readDeviceAttributes:this.props.readDeviceAttributes,writeDeviceAttributes:this.props.writeDeviceAttributes})})}),e.jsx("div",{className:"card",children:e.jsx("div",{className:"card-body",children:e.jsx(Fs,{device:this.props.device,logs:this.props.logs,executeCommand:this.props.executeCommand})})})]})}}const Js=C(["devConsole","common"])(qs);function Ys(s){const{match:t,devices:n,logs:r}=s,{readDeviceAttributes:i,writeDeviceAttributes:o,setDeviceOptions:a,executeCommand:c,generateExternalDefinition:d,bridgeInfo:u,deviceStates:h,generatedExternalDefinitions:m,theme:g}=s,{tab:v,dev:x}=t.params,l=n[x],p=h[l.friendly_name]??{};switch(v){case"info":return e.jsx(He,{device:l});case"bind":return e.jsx(ss,{device:l});case"state":return e.jsx(js,{device:l});case"exposes":return e.jsx(Ss,{device:l});case"clusters":return e.jsx(ws,{device:l});case"reporting":return e.jsx(vs,{device:l});case"settings":return e.jsx(Ps,{device:l,setDeviceOptions:a,bridgeInfo:u});case"settings-specific":return e.jsx(Ds,{device:l,setDeviceOptions:a,bridgeInfo:u});case"dev-console":return e.jsx(Js,{device:l,logs:r,readDeviceAttributes:i,writeDeviceAttributes:o,generateExternalDefinition:d,generatedExternalDefinitions:m,executeCommand:c,theme:g});case"scene":return e.jsx(Ms,{device:l,deviceState:p});default:return e.jsx(le,{to:`/device/${x}/info`})}}function Qs(s){const{devices:t,match:n,t:r}=s,{dev:i,tab:o}=n.params,a=t[i];if(!a)return e.jsx("div",{className:"h-100 d-flex justify-content-center align-items-center",children:r("unknown_device")});const c=Le(i);return e.jsxs(e.Fragment,{children:[e.jsx(Me,{allDevices:t,currentDevice:a,tab:o}),e.jsxs("div",{className:"tab",children:[e.jsx("ul",{className:"nav nav-tabs",children:c.map(d=>e.jsx("li",{className:"nav-item",children:e.jsx(de,{activeClassName:"active",className:`nav-link ${W["small-nav"]}`,to:d.url,children:r(d.translationKey)})},d.translationKey))}),e.jsx("div",{className:"tab-content",children:e.jsx("div",{className:"tab-pane fade show active",children:e.jsx(Ys,{...s})})})]})]})}const pt=C("devicePage")(S(["devices","deviceStates","logs","bridgeInfo","generatedExternalDefinitions","theme"],A)(ue(Qs)));export{pt as ConnectedDevicePage};
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -1 +0,0 @@
|
|
1
|
-
import{p as N,q as S,u as T,j as t,w as _,r as v,B as u,n as C,c as D,a as z,v as F,F as I,x as O,y as q,z as A,A as B,b as K}from"./index-16e319d7.js";import{_ as P,w as E,T as V,c as j}from"./bootstrap-5.esm-35e5e53c.js";import{T as R,D as M}from"./rjsf-translation-fields-201a8d86.js";import{p as L}from"./powerSourceTypeToTranslationKey-452dac81.js";import{S as $}from"./spinner-d5ff5058.js";import{g as G,a as U}from"./index-9d70ff17.js";import"./_getAllKeysIn-d1e577d0.js";import"./isEqual-7fe66f96.js";import"./intersection-87b17905.js";const Z={"ui:order":["base_topic","server","user","password","client_id","version","ca","key","cert","reject_unauthorized","*"]},H={"ui:order":["port","adapter","disable_led","*"]},J={"ui:order":["port","host","*"]},Y={mqtt:Z,serial:H,frontend:J};var W=P,x=S;function Q(a,e,s,n){return a==null?[]:(x(e)||(e=e==null?[]:[e]),s=n?void 0:s,x(s)||(s=s==null?[]:[s]),W(a,e,s))}var X=Q;const ee=N(X);function te(a){const{devices:e}=a,{t:s}=T(["stats","zigbee"]),n=Object.values(e).filter(i=>i.type!=="Coordinator"),r=n.length,o={byType:{},byPowerSource:{},byVendor:{},byModel:{}};n.forEach(i=>{o.byModel[i.model_id]=(o.byModel[i.model_id]||0)+1,o.byVendor[i.manufacturer]=(o.byVendor[i.manufacturer]||0)+1,o.byType[s(i.type)]=(o.byType[s(i.type)]||0)+1;const l=s("zigbee:"+L(i.power_source));o.byPowerSource[l]=(o.byPowerSource[l]||0)+1});const m=Object.entries(o).map(([i,l])=>t.jsx("li",{className:"list-group-item d-flex justify-content-between align-items-start",children:t.jsxs("div",{className:"ms-2 me-auto",children:[t.jsx("div",{className:"fw-bold",children:s(i)}),ee(Object.entries(l),[([c,d])=>d],["desc"]).map(([c,d])=>t.jsxs("div",{children:[c,": ",d]},c))]})},i));return t.jsxs("ol",{className:"list-group list-group-numbered",children:[t.jsx("li",{className:"list-group-item d-flex justify-content-between align-items-start",children:t.jsx("div",{className:"ms-2 me-auto",children:t.jsxs("div",{className:"fw-bold",children:[s("total")," ",r]})})}),m]})}const se={access:"public",cache:""},ne=["*.css"],re="zigbee2mqtt-frontend",oe="0.9.1",ie="GPL-3.0",ae={build:"vite build",preview:"vite preview",start:"vite dev",postversion:"git push && git push --tags",version:"conventional-changelog -p angular -i CHANGELOG.md -s && git add CHANGELOG.md",pretty:'prettier --write "./**/*.{js,jsx,tsx}"',postinstall:"husky install",prepublishOnly:"pinst --disable",postpublish:"pinst --enable","test:unit":"vitest","test:coverage":"vitest run --coverage","test:eslint":'eslint "./src/**/*.{js,jsx,tsx}"',"test:pretty":'prettier --check "./**/*.{js,jsx,tsx}"',"i18n:download":"node download_translations.js","i18n:trim":"node trim-locales.js"},ce=["dist/*"],le={node:">=18"},de={"@codemirror/lang-javascript":"^6.2.2","@commitlint/cli":"~17.8.0","@commitlint/config-conventional":"~17.8.0","@ebay/nice-modal-react":"~1.2.13","@fortawesome/fontawesome-free":"~6.6.0","@rjsf/bootstrap-5":"https://github.com/nurikk/fileshare/blob/main/rjsf-bootstrap-5-4.2.0.tgz?raw=true","@rjsf/core":"~4.2.3","@testing-library/jest-dom":"^6.3.0","@testing-library/react":"^14.1.2","@testing-library/user-event":"^14.5.2","@types/color-convert":"~2.0.1","@types/d3-drag":"~3.0.4","@types/d3-force":"~3.0.6","@types/d3-selection":"~3.0.7","@types/d3-zoom":"~3.0.5","@types/events":"~3.0.1","@types/file-saver":"~2.0.5","@types/json-schema":"~7.0.13","@types/lodash":"~4.17.0","@types/react":"~18.2.24","@types/react-dom":"~18.2.8","@types/react-router-dom":"~5.3.3","@types/react-table":"~7.7.16","@types/react-transition-group":"~4.4.7","@types/reconnectingwebsocket":"~1.0.8","@types/ws":"~8.5.6","@typescript-eslint/eslint-plugin":"~6.7.4","@typescript-eslint/parser":"~6.7.4","@uiw/codemirror-theme-github":"^4.21.24","@uiw/react-codemirror":"^4.21.24","@vitejs/plugin-react":"~4.3.0","@vitest/coverage-v8":"^1.2.2",bootstrap:"~5.3.2",classnames:"~2.5.0","color-convert":"~2.0.1","conventional-changelog-cli":"~4.1.0","d3-drag":"~3.0.0","d3-force":"~3.0.0","d3-force-reuse":"~1.0.1","d3-selection":"~3.0.0","d3-zoom":"~3.0.0","deep-diff":"~1.0.2","deep-object-diff":"~1.1.9",eslint:"~8.57.0","eslint-config-prettier":"~9.1.0","eslint-config-react":"~1.1.7","eslint-plugin-prettier":"~5.0.0","eslint-plugin-react":"~7.33.2","eslint-plugin-react-refresh":"*",events:"~3.3.0","file-saver":"~2.0.5",husky:"~8.0.3",i18next:"~23.5.1","i18next-browser-languagedetector":"~7.1.0",jsdom:"^24.0.0",jszip:"~3.10.1",lodash:"~4.17.21",notyf:"~3.10.0",pinst:"~3.0.0",prettier:"~3.0.3",react:"~18.2.0","react-app-polyfill":"~3.0.0","react-bootstrap":"~2.10.0","react-css-theme-switcher":"~0.3.0","react-dom":"~18.2.0","react-i18next":"~13.5.0","react-image":"~4.1.0","react-notifications-component":"^4.0.1","react-router-dom":"~5.3.4","react-table":"~7.8.0","react-transition-group":"~4.4.5","reconnecting-websocket":"~4.4.0",sass:"~1.71.0",store2:"^2.14.2","timeago.js":"~4.0.2",typescript:"~5.2.2",unistore:"~3.5.2",vite:"~4.5.0","vite-plugin-compression":"~0.5.1","vite-plugin-html":"~3.2.0","vite-plugin-sass-dts":"~1.3.11",vitest:"^1.3.1",ws:"~8.17.0"},me="index.js",pe={hooks:{"commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},ue={type:"git",url:"git+https://github.com/nurikk/zigbee2mqtt-frontend.git"},ge={url:"https://github.com/nurikk/zigbee2mqtt-frontend/issues"},he="pnpm@9.1.0+sha256.22e36fba7f4880ecf749a5ca128b8435da085ecd49575e7fb9e64d6bf4fad394",fe={private:!1,publishConfig:se,sideEffects:ne,name:re,version:oe,license:ie,scripts:ae,eslintIgnore:ce,engines:le,devDependencies:de,main:me,husky:pe,repository:ue,bugs:ge,packageManager:he};function be(a){return new Promise((e,s)=>{const n=new FileReader;n.onloadend=()=>e(n.result),n.onerror=r=>s(r),n.readAsDataURL(a)})}async function ve(a){const e=await fetch(a);if(e.ok){const s=await e.blob();return be(s)}else return Promise.reject(e.status)}async function ye(a,e){for(const s of a)try{if(await e(s))return!0}catch{}return!1}function je(a){const[e,s]=v.useState("none"),{setDeviceOptions:n,t:r,devices:o}=a,[m,i]=v.useState({});async function l(c){if(i(p=>({...p,[c.ieee_address]:"init"})),!await ye([G,U],async p=>{const g=p(c),h=await ve(g);return await n(c.ieee_address,{icon:h}),i(f=>({...f,[c.ieee_address]:"done"})),!0}))throw new Error("Failed to localise image")}switch(v.useEffect(()=>{if(e=="start"){for(const c of Object.values(o).filter(d=>d.type!=="Coordinator"))l(c).catch(d=>{console.log("Error localising image",d),i(p=>({...p,[c.ieee_address]:"error"}))}).then();s("inprogress")}},[e]),e){case"none":return t.jsx(u,{className:"btn btn-primary d-block mt-2",onClick:()=>s("start"),children:r("localise_images")});case"inprogress":return t.jsx("div",{children:Object.values(o).map(c=>t.jsxs("div",{children:[c.friendly_name," ",m[c.ieee_address]]},c.ieee_address))});case"done":return t.jsx("div",{children:"done"})}return t.jsx("div",{children:"Unknown"})}const xe=_(["settings"])(je),ke=E(V),b="main",w=["groups","devices","device_options","ban","whitelist","map_options"],_e=["object","array"],k=(a,e={},s={})=>{e.required&&(e.required=e.required.filter(n=>a.includes(n)));for(const n of a)e.properties&&delete e.properties[n],delete s[n];return{schema:e,config:s}},we=[t.jsx("div",{className:"row pb-2",children:t.jsx("div",{className:"col",children:t.jsx("a",{target:"_blank",rel:"noopener noreferrer",href:"https://www.buymeacoffee.com/nurikk",children:t.jsx("img",{crossOrigin:"anonymous",src:"https://img.buymeacoffee.com/button-api/?text=Thanks for frontend&emoji=🍺&slug=nurikk&button_colour=FFDD00&font_colour=000000&font_family=Arial&outline_colour=000000&coffee_colour=ffffff"})})})},"nurikk"),t.jsx("div",{className:"row pb-2",children:t.jsx("div",{className:"col",children:t.jsx("a",{target:"_blank",rel:"noopener noreferrer",href:"https://www.buymeacoffee.com/koenkk",children:t.jsx("img",{crossOrigin:"anonymous",src:"https://img.buymeacoffee.com/button-api/?text=Thanks for zigbee2mqtt&emoji=☕&slug=koenkk&button_colour=FFDD00&font_colour=000000&font_family=Arial&outline_colour=000000&coffee_colour=ffffff"})})})},"koenkk")].sort(()=>Math.random()-.5),Ne=(a,e)=>_e.includes(e.type)&&!w.includes(a)||(e&&e.oneOf?e.oneOf.length>0:!1);class Se extends v.Component{constructor(){super(...arguments),this.state={keyName:b},this.settingsFormData={},this.downloadBackup=()=>{const{backup:e,bridgeInfo:s}=this.props,n=F(new Date).replace(/[\s_:]/g,"-"),r=`z2m-backup.${s.version}.${n}.zip`;I.saveAs(`data:application/zip;base64,${e}`,r)},this.addInstallCode=()=>{const{t:e,addInstallCode:s}=this.props,n=prompt(e("enter_install_code"));n&&s(n)},this.onSettingsSave=e=>{const{formData:s}=e,{updateBridgeConfig:n}=this.props,{keyName:r}=this.state,o=O(this.getSettingsInfo().currentConfig,s);n(r===b?o:{[r]:o})}}renderCategoriesTabs(){const{t:e}=this.props;return t.jsx("ul",{className:"nav nav-tabs",children:q.map(s=>t.jsx("li",{className:"nav-item",children:t.jsx(A,{className:"nav-link",activeClassName:"active",to:s.url,children:e(s.translationKey)})},s.url))})}render(){return t.jsxs("div",{className:"tab",children:[this.renderCategoriesTabs(),t.jsx("div",{className:"tab-content h-100 p-0 p-sm-3",children:t.jsx("div",{className:"tab-pane fade show active",children:this.renderSwitcher()})})]})}renderSwitcher(){const{match:e}=this.props,{tab:s}=e.params;switch(s){case"tools":return this.renderTools();case"bridge":return this.renderBridgeInfo();case"about":return this.renderAbout();case"settings":return this.renderSettings();case"donate":return this.renderDonate();case"translate":return this.renderTranslate();default:return t.jsx(B,{to:"/settings/settings"})}}renderTranslate(){const{t:e}=this.props;return t.jsx("div",{className:"p-3",children:t.jsxs("p",{children:[e("settings:translation_prompt")," ",t.jsx("a",{target:"_blank",rel:"noopener noreferrer",href:"https://poeditor.com/join/project?hash=Az88waAhPd",children:"POEditor"})]})})}renderAbout(){var l,c,d,p,g,h,f;const{bridgeInfo:e,devices:s,t:n}=this.props,o=((l=e.version)==null?void 0:l.match(/^\d+\.\d+\.\d+$/))===null?e.version:t.jsx("a",{target:"_blank",rel:"noopener noreferrer",href:`https://github.com/Koenkk/zigbee2mqtt/releases/tag/${e.version}`,children:e.version}),m=e.commit?t.jsxs(t.Fragment,{children:["commit:"," ",t.jsx("a",{target:"_blank",rel:"noopener noreferrer",href:`https://github.com/Koenkk/zigbee2mqtt/commit/${e.commit}`,children:e.commit})]}):null,i=[{translationKey:"zigbee2mqtt_version",content:t.jsxs(t.Fragment,{children:[o," ",m]})},{translationKey:"coordinator_type",content:t.jsx(t.Fragment,{children:((c=e.coordinator)==null?void 0:c.type)??n("common:unknown")})},{translationKey:"coordinator_revision",content:t.jsx(t.Fragment,{children:((p=(d=e.coordinator)==null?void 0:d.meta)==null?void 0:p.revision)??n("common:unknown")})},{translationKey:"coordinator_ieee_address",content:t.jsx(t.Fragment,{children:((g=e.coordinator)==null?void 0:g.ieee_address)??n("common:unknown")})},{translationKey:"frontend_version",content:fe.version},{translationKey:"zigbee_herdsman_converters_version",content:((h=e.zigbee_herdsman_converters)==null?void 0:h.version)??n("common:unknown")},{translationKey:"zigbee_herdsman_version",content:((f=e.zigbee_herdsman)==null?void 0:f.version)??n("common:unknown")},{translationKey:"stats",content:t.jsx(te,{devices:s})}];return t.jsx("div",{className:"p-3",children:i.map(y=>t.jsxs("dl",{className:"row",children:[t.jsx("dt",{className:"col-sm-3",children:n(y.translationKey)}),t.jsx("dd",{className:"col-sm-9",children:y.content})]},y.translationKey))})}renderBridgeInfo(){const{bridgeInfo:e}=this.props;return t.jsx("div",{className:"p-3",children:t.jsx("pre",{children:JSON.stringify(e,null,4)})})}renderBackupControls(){const{backup:e,preparingBackup:s,requestBackup:n,t:r}=this.props;return s?t.jsx(u,{className:"btn btn-primary d-block mt-2 disabled",children:t.jsx($,{})}):e?t.jsx(u,{className:"btn btn-primary d-block mt-2",onClick:this.downloadBackup,children:r("download_z2m_backup")}):t.jsx(u,{className:"btn btn-primary d-block mt-2",onClick:n,children:r("request_z2m_backup")})}renderTools(){const{exportState:e,restartBridge:s,setDeviceOptions:n,devices:r,t:o}=this.props;return t.jsxs("div",{className:"p-3",children:[t.jsx(u,{className:"btn btn-primary d-block mt-2",onClick:e,children:o("download_state")}),t.jsx(u,{className:"btn btn-danger d-block mt-2",onClick:s,prompt:!0,children:o("restart_zigbee2mqtt")}),this.renderBackupControls(),t.jsx(u,{className:"btn btn-primary d-block mt-2",onClick:this.addInstallCode,children:o("add_install_code")}),t.jsx(xe,{setDeviceOptions:n,devices:r})]})}getSettingsTabs(){const{bridgeInfo:{config_schema:e={properties:{}}},t:s}=this.props,n=Object.entries(e.properties).filter(([r,o])=>Ne(r,o)).map(([r,o])=>({name:r,title:s(r,{defaultValue:o.title})}));return n.unshift({name:b,title:s("main",{defaultValue:"Main"})}),n}getSettingsInfo(){const{keyName:e}=this.state,{bridgeInfo:{config_schema:s,config:n}}=this.props;let r=k(w,j(s),j(n)),o=r.schema,m;if(e===b){const i=this.getSettingsTabs().map(l=>l.name);r=k(i,r.schema,r.config),o=r.schema,m=r.config}else m=r.config[e],r.schema.properties&&(o=r.schema.properties[e]);return{currentSchema:o,currentConfig:m}}renderSettingsTabs(){const{t:e}=this.props,s=this.getSettingsTabs(),{keyName:n}=this.state;return t.jsx("div",{className:"nav nav-pills",children:s.map(r=>t.jsx("li",{className:"nav-item",children:t.jsx("a",{className:K("nav-link",{"bg-primary active":n===r.name}),"aria-current":"page",href:"#",onClick:o=>{this.setState({keyName:r.name}),o.preventDefault()},children:e(r.name,{defaultValue:r.title})})},r.name))})}renderSettings(){const{keyName:e}=this.state,{currentSchema:s,currentConfig:n}=this.getSettingsInfo();return e in this.settingsFormData||(this.settingsFormData[e]=n),t.jsxs("div",{className:"tab",children:[this.renderSettingsTabs(),t.jsx("div",{className:"tab-content",children:t.jsx("div",{className:"tab-pane active",children:t.jsx(ke,{idPrefix:e,schema:s,formData:this.settingsFormData[e],onChange:r=>this.settingsFormData[e]=r.formData,onSubmit:this.onSettingsSave,uiSchema:Y[e],fields:{TitleField:R,DescriptionField:M}})})})]})}renderDonate(){const{t:e}=this.props,s=e("donation_text",{returnObjects:!0,defaultValue:[]});return t.jsxs("div",{className:"container-fluid",children:[s.map(n=>t.jsx("p",{children:n},n)),we]})}}const Te=C(Se),Ce=["bridgeInfo","missingTranslations","devices","backup","preparingBackup"],Pe=_(["settings","common"])(D(Ce,z)(Te));export{Pe as ConnectedSettingsPage};
|
Binary file
|
Binary file
|
@@ -1 +0,0 @@
|
|
1
|
-
import{aP as n}from"./index-16e319d7.js";const a=""+new URL("generic-zigbee-device-c9aa86d9.png",import.meta.url).href,i="https://www.zigbee2mqtt.io/images/devices/",o=e=>{var t;return`${i}${n((t=e==null?void 0:e.definition)==null?void 0:t.model)}.jpg`},g=e=>{var t;return`${i}${n((t=e==null?void 0:e.definition)==null?void 0:t.model)}.png`},s=e=>{var t;return(t=e.definition)==null?void 0:t.icon},r=[s,g,o,()=>a];export{r as A,o as a,a as b,g};
|
@@ -1,36 +0,0 @@
|
|
1
|
-
import{j as e,B as c,N as m,u,e as E,r as l,M as g,f as C,h as v,k as b,_ as j,c as _,a as y,w as N}from"./index-16e319d7.js";const f=`class MyExampleExtension_TS_ {
|
2
|
-
constructor(zigbee, mqtt, state, publishEntityState, eventBus, settings, logger) {
|
3
|
-
logger.info('Loaded MyExampleExtension_TS_');
|
4
|
-
mqtt.publish('example/extension', 'hello from MyExampleExtension_TS_');
|
5
|
-
this.mqttBaseTopic = settings.get().mqtt.base_topic;
|
6
|
-
this.eventBus = eventBus;
|
7
|
-
this.mqtt = mqtt;
|
8
|
-
this.eventBus.on('stateChange', this.onStateChange.bind(this), this.constructor.name);
|
9
|
-
}
|
10
|
-
|
11
|
-
async onStateChange(data) {
|
12
|
-
console.log('State changed', data); // comment this out if clutters logs
|
13
|
-
|
14
|
-
const { entity, update } = data;
|
15
|
-
|
16
|
-
//example how to toggle state
|
17
|
-
if (entity.ID === '0x00158d000224154d') {
|
18
|
-
//state changed for some device (example: clicked a button)
|
19
|
-
if (update.action === 'single') {
|
20
|
-
const myLampIeeAddr = '0x00124b001e73227f'; // change this
|
21
|
-
this.mqtt.onMessage(\`\${this.mqttBaseTopic}/\${myLampIeeAddr}/set\`, JSON.stringify({ state: 'toggle' }));
|
22
|
-
}
|
23
|
-
}
|
24
|
-
}
|
25
|
-
|
26
|
-
async onMQTTMessage(topic, message) {
|
27
|
-
// console.log({topic, message});
|
28
|
-
}
|
29
|
-
|
30
|
-
async stop() {
|
31
|
-
this.eventBus.removeListeners(this.constructor.name);
|
32
|
-
}
|
33
|
-
}
|
34
|
-
|
35
|
-
module.exports = MyExampleExtension_TS_;
|
36
|
-
`,S=m.create(r=>{const{updateExtensionCode:t,onCreated:o,ts:n}=r,{t:a}=u(["extensions","common"]),s=E(),[i,x]=l.useState(`example-user-extension${n}.js`),d=f.replace(/_TS_/g,n.toString()),h=()=>{t({name:i,code:d}),o({name:i,code:d}),s.remove()};return e.jsxs(g,{isOpen:s.visible,children:[e.jsx(C,{children:a("create_new_extension")}),e.jsxs(v,{children:[e.jsx("label",{className:"form-label",children:a("extension_name_propmt")}),e.jsx("input",{type:"text",className:"form-control",value:i,onChange:p=>x(p.target.value)})]}),e.jsxs(b,{children:[e.jsx("button",{type:"button",className:"btn btn-secondary",onClick:s.remove,children:a("common:close")}),e.jsx("button",{type:"button",className:"btn btn-primary",onClick:h,children:a("common:ok")})]})]})});function M(r){return e.jsx(c,{className:"btn btn-success me-2",onClick:()=>m.show(S,{ts:Date.now(),...r}),children:e.jsx("i",{className:"fa fa-plus"})})}const T=l.lazy(()=>j(()=>import("./CodeEditor-8f838f2b.js"),["./CodeEditor-8f838f2b.js","./index-16e319d7.js","./index-0f5e7faa.css","./extends-98964cd2.js"],import.meta.url));class k extends l.Component{constructor(){super(...arguments),this.state={},this.loadExtension=t=>{const{value:o}=t.target;this.setState({currentExtension:o})},this.onExtensionCodeChange=t=>{const{updateExtensionCode:o}=this.props,{currentExtension:n}=this.state;n&&o({name:n,code:t})},this.onSaveClick=()=>{const{saveExtensionCode:t}=this.props;t(this.getCurrentExtension())},this.removeExtension=()=>{const{removeExtension:t}=this.props;t(this.getCurrentExtension())}}getCurrentExtension(){const{currentExtension:t}=this.state,{extensions:o}=this.props;return o.find(n=>n.name===t)}renderControls(){const{currentExtension:t}=this.state,{extensions:o,t:n,updateExtensionCode:a}=this.props;return e.jsxs("div",{className:"row mb-2",children:[e.jsx("div",{className:"col-6",children:e.jsxs("select",{value:t,className:"form-control",onChange:this.loadExtension,children:[e.jsx("option",{hidden:!0,children:n("select_extension_to_edit")},"hidden"),o.map(({name:s})=>e.jsx("option",{value:s,children:s},s))]})}),e.jsxs("div",{className:"col-6",children:[e.jsx(M,{updateExtensionCode:a,onCreated:s=>this.setState({currentExtension:s.name})}),e.jsx(c,{prompt:!0,disabled:!t,onClick:this.removeExtension,className:"btn btn-danger me-2",children:e.jsx("i",{className:"fa fa-trash"})}),e.jsx(c,{disabled:!t,onClick:this.onSaveClick,className:"btn btn-primary",children:n("common:save")})]})]})}renderEditor(){var s;const{currentExtension:t}=this.state,{extensions:o,theme:n}=this.props,a=((s=o.find(i=>i.name===t))==null?void 0:s.code)??"";return e.jsx(T,{value:a,onChange:this.onExtensionCodeChange,theme:n})}render(){return e.jsx("div",{className:"card h-100",children:e.jsxs("div",{className:"card-body h-100",children:[this.renderControls(),this.renderEditor()]})})}}const B=["extensions","theme"],q=_(B,y)(N("extensions")(k));export{q as ConnectedExtensionsEditorPage};
|
Binary file
|
Binary file
|
@@ -1 +0,0 @@
|
|
1
|
-
import{u as g,l as D,j as i,r as j,L as x,g as w,d as f,c as C,a as h,w as k,R as S,i as H}from"./index-16e319d7.js";import{V as E,M as L}from"./vendor-links-6df665d0.js";import{L as T,D as q,P as F}from"./index-cfdcdcf7.js";import{i as M,A as N,D as P}from"./Availability-e3f34491.js";import{T as A}from"./ReactTableCom-c5fa0b55.js";import{D as I}from"./DeviceImage-b0ce2953.js";import{D as R}from"./DEVICES_GLOBAL_NAME-6620c611.js";import"./powerSourceTypeToTranslationKey-452dac81.js";import"./persist-2803de70.js";import"./index-9d70ff17.js";const V={"action-column":"_action-column_1729o_1","device-pic":"_device-pic_1729o_8","device-image":"_device-image_1729o_14"};function B(t){const{data:l,lastSeenType:o,availabilityFeatureEnabled:r,homeassistantEnabled:d,setDeviceDescription:y}=t,{renameDevice:c,removeDevice:m,configureDevice:v,interviewDevice:u}=t,{t:s}=g(["zigbee","common","avaliability"]),b=o!=="disable"?[{id:"last_seen",Header:s("last_seen"),accessor:({state:e})=>{var a;return(a=D(e,o))==null?void 0:a.getTime()},Cell:({row:{original:{state:e}}})=>i.jsx(T,{state:e,lastSeenType:o})}]:[],_=r?[{id:"availability",Header:s("avaliability:avaliability"),accessor:({availabilityState:e})=>M(e)?e:e.state,Cell:({row:{original:{availabilityState:e,availabilityEnabledForDevice:a,disabled:n}}})=>i.jsx(N,{disabled:n,availability:e,availabilityEnabledForDevice:a})}]:[],p=j.useMemo(()=>[{id:"pic",Header:s("pic"),Cell:({row:{original:{device:e,state:a,disabled:n}}})=>i.jsx(I,{className:V["device-image"],device:e,deviceStatus:a,disabled:n}),accessor:e=>e,disableSortBy:!0},{id:"friendly_name",Header:s("friendly_name"),accessor:({device:e})=>[e.friendly_name,e.description].join(" "),Cell:({row:{original:{device:e}}})=>i.jsxs(i.Fragment,{children:[i.jsx(x,{to:w(e.ieee_address),children:e.friendly_name}),i.jsx("small",{className:"d-block",children:e.description})]})},{id:"ieee_address",Header:s("ieee_address"),accessor:({device:e})=>[e.ieee_address,f(e.network_address,4)].join(" "),Cell:({row:{original:{device:e}}})=>i.jsxs(i.Fragment,{children:[i.jsx("div",{children:e.ieee_address}),i.jsx("div",{children:i.jsxs("abbr",{title:`${s("network_address_hex")} (${s("network_address_dec")}: ${e.network_address})`,children:["(",f(e.network_address,4),")"]})})]})},{id:"manufacturer",Header:s("manufacturer"),accessor:({device:e})=>{var a;return[(a=e.definition)==null?void 0:a.vendor,e.manufacturer].join(" ")},Cell:({row:{original:{device:e}}})=>i.jsx(E,{device:e})},{id:"model",Header:s("model"),accessor:({device:e})=>{var a;return[(a=e.definition)==null?void 0:a.model,e.model_id].join(" ")},Cell:({row:{original:{device:e}}})=>i.jsx(L,{device:e})},{id:"lqi",Header:s("lqi"),accessor:({state:e})=>e.linkquality,Cell:({row:{original:{state:e}}})=>i.jsx(q,{value:e.linkquality,name:"linkquality"})},...b,..._,{id:"power",Header:s("power"),accessor:({state:e,device:a})=>{var n;return[e.battery,(n=a.definition)==null?void 0:n.power].join(" ")},Cell:({row:{original:{state:e,device:a}}})=>i.jsx(F,{device:a,deviceState:e})},{id:"controls",Header:"",Cell:({row:{original:{device:e,state:a}}})=>i.jsx(P,{device:e,state:a,homeassistantEnabled:d,renameDevice:c,removeDevice:m,configureDevice:v,setDeviceDescription:y,interviewDevice:u}),disableSortBy:!0}],[b,_,s,d,c,m,v,u]);return i.jsx("div",{className:"card",children:i.jsx("div",{className:"table-responsive",children:i.jsx(A,{id:R,columns:p,data:l})})})}function $(t){const{devices:l,deviceStates:o,bridgeInfo:{config:r},availability:d}=t,{renameDevice:y,removeDevice:c,configureDevice:m,setDeviceDescription:v,interviewDevice:u}=t,s=!!r.availability,b=!!(r!=null&&r.homeassistant),_=()=>Object.values(l).filter(e=>e.type!=="Coordinator").map(e=>{var n;const a=o[e.friendly_name]??{};return{id:e.friendly_name,disabled:H(e,r),device:e,state:a,availabilityState:d[e.friendly_name]??"offline",availabilityEnabledForDevice:((n=r.devices[e.ieee_address])==null?void 0:n.availability)!==!1}}),p=S.useMemo(()=>_(),[l,o]);return i.jsx(B,{data:p,lastSeenType:r.advanced.last_seen,availabilityFeatureEnabled:s,homeassistantEnabled:b,renameDevice:y,removeDevice:c,configureDevice:m,setDeviceDescription:v,interviewDevice:u})}const z=["devices","deviceStates","bridgeInfo","availability"],ee=C(z,h)(k(["zigbee","common"])($));export{ee as ConnectedZigbeePage};
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|