@hakit/core
Version:
A collection of React hooks and helpers for Home Assistant to easily communicate with the Home Assistant WebSocket API.
3 lines (2 loc) • 6.43 kB
JavaScript
"use strict";const c=require("react"),f=require("lodash"),j=require("./cjs/hooks/useSubscribeEntity/index.js"),B=require("./cjs/hooks/useService/index.js"),H=require("./cjs/hooks/useHistory/index.js"),p=require("./index-BbkMZwLg.cjs"),v=require("@iconify/react");require("./cjs/utils/light/index.js");const y=require("./cjs/utils/computeDomain.js");require("./cjs/hooks/useLocale/locales/index.js");require("./cjs/HassConnect/HassContext.js");const X=require("use-debounce"),U=require("./cjs/utils/colors.js"),R=require("deep-object-diff"),V=require("./cjs/utils/time/time-ago.js");require("home-assistant-js-websocket");const L=require("./cjs/hooks/useIcon/domains/binary_sensor.js"),$=require("./cjs/hooks/useIcon/domains/sensor.js"),G=require("./cjs/hooks/useIcon/domains/number.js"),J=require("./cjs/hooks/useIcon/domains/cover.js"),K=require("./cjs/hooks/useIcon/domains/alarm.js"),Q=require("./cjs/hooks/useIcon/domains/weather.js"),b=require("./cjs/hooks/useIcon/domains/constants.js");require("./cjs/hooks/useIcon/domains/battery.js");function W(r,t){const e=c.useMemo(()=>{const s=f.snakeCase(r);return b.FIXED_DOMAIN_ICONS[s]?b.FIXED_DOMAIN_ICONS[s]:"mdi:information-outline"},[r]);return e===null?null:p.jsx(v.Icon,{style:{fontSize:t?.fontSize??"24px"},icon:e,...t})}function Y(r,t){return c.useMemo(()=>r===null?null:p.jsx(v.Icon,{style:{fontSize:t?.fontSize??"24px"},icon:r||"octicon:info-24",...t}),[r,t])}function q(r,t){const e=t.state;switch(r){case"alarm_control_panel":return K.alarmPanelIcon(e);case"automation":return e==="unavailable"?"mdi:robot-confused":e==="off"?"mdi:robot-off":"mdi:robot";case"binary_sensor":return L.binarySensorIcon(t);case"button":switch(t.attributes.device_class){case"identify":return"mdi:crosshairs-question";case"restart":return"mdi:restart";case"update":return"mdi:package-up";default:return"mdi:button-pointer"}case"camera":return e==="off"?"mdi:video-off":"mdi:video";case"cover":return J.coverIcon(t);case"device_tracker":return t.attributes.source_type==="router"?e==="home"?"mdi:lan-connect":"mdi:lan-disconnect":["bluetooth","bluetooth_le"].includes(t.attributes.source_type)?e==="home"?"mdi:bluetooth-connect":"mdi:bluetooth":e==="not_home"?"mdi:account-arrow-right":"mdi:account";case"event":switch(t.attributes.device_class){case"doorbell":return"mdi:doorbell";case"button":return"mdi:gesture-tap-button";case"motion":return"mdi:motion-sensor";default:return"mdi:eye-check"}case"fan":return e==="off"?"mdi:fan-off":"mdi:fan";case"humidifier":return e==="off"?"mdi:air-humidifier-off":"mdi:air-humidifier";case"input_boolean":return e==="on"?"mdi:check-circle-outline":"mdi:close-circle-outline";case"input_datetime":if(!t.attributes.has_date)return"mdi:clock";if(!t.attributes.has_time)return"mdi:calendar";break;case"lock":switch(e){case"unlocked":return"mdi:lock-open";case"jammed":return"mdi:lock-alert";case"locking":case"unlocking":return"mdi:lock-clock";default:return"mdi:lock"}case"media_player":switch(t.attributes.device_class){case"speaker":switch(e){case"playing":return"mdi:speaker-play";case"paused":return"mdi:speaker-pause";case"off":return"mdi:speaker-off";default:return"mdi:speaker"}case"tv":switch(e){case"playing":return"mdi:television-play";case"paused":return"mdi:television-pause";case"off":return"mdi:television-off";default:return"mdi:television"}case"receiver":switch(e){case"off":return"mdi:audio-video-off";default:return"mdi:audio-video"}default:switch(e){case"playing":case"paused":return"mdi:cast-connected";case"off":return"mdi:cast-off";default:return"mdi:cast"}}case"number":{const s=G.numberIcon(t);if(s)return s;break}case"person":return e==="not_home"?"mdi:account-arrow-right":"mdi:account";case"switch":switch(t.attributes.device_class){case"outlet":return e==="on"?"mdi:power-plug":"mdi:power-plug-off";case"switch":return e==="on"?"mdi:toggle-switch-variant":"mdi:toggle-switch-variant-off";default:return"mdi:toggle-switch-variant"}case"sensor":{const s=$.sensorIcon(t);if(s)return s;break}case"sun":return t.state==="above_horizon"?"mdi:white-balance-sunny":"mdi:weather-night";case"switch_as_x":return"mdi:swap-horizontal";case"threshold":return"mdi:chart-sankey";case"update":return"mdi:package";case"water_heater":return e==="off"?"mdi:water-boiler-off":"mdi:water-boiler";case"weather":return Q.weatherIcon(t.state)}if(r in b.FIXED_DOMAIN_ICONS)return b.FIXED_DOMAIN_ICONS[r]}function Z(r,t){const e=O(r||"unknown",{returnNullIfNotFound:!0});return c.useMemo(()=>{if(e===null)return null;const h=e.attributes.icon??q(y.computeDomain(r),e);return h?p.jsx(v.Icon,{style:{fontSize:t?.fontSize??"24px"},icon:h,...t}):null},[e,r,t])}const w={throttle:25,returnNullIfNotFound:!1,historyOptions:{hoursToShow:24,significantChangesOnly:!0,minimalResponse:!0,disable:!0}};function O(r,t=w){const{throttle:e,returnNullIfNotFound:s,historyOptions:h}={...w,...t,historyOptions:{...w.historyOptions,...t.historyOptions}},I=j.useSubscribeEntity(r),i=I(s),x=y.computeDomain(r),E=B.useService(x,r),D=H.useHistory(r,h),{useStore:C}=p.useHass(),S=C(n=>n.config?.language),a=c.useCallback(n=>{const g=new Date,u=new Date(n.attributes.last_triggered??n.last_updated),d=V.timeAgo(u,S),k=Math.abs(g.getTime()-u.getTime()),m=d==="just now",{hexColor:_,rgbColor:M,brightness:z,brightnessValue:F,rgbaColor:A,color:T}=U.getCssColorValue(n);return{...n,custom:{color:T,relativeTime:d,timeDiff:k,active:m,hexColor:_,rgbColor:M,brightness:z,brightnessValue:F,rgbaColor:A}}},[S]),N=X.useThrottledCallback(n=>{l(a(n))},e,{leading:!0,trailing:!0}),[o,l]=c.useState(i!==null?a(i):null);return c.useEffect(()=>{l(n=>n===null?null:a(n))},[a]),c.useEffect(()=>{const n=I(!0);if(n&&o){const g=R.diff(f.omit(n,"custom","last_changed","last_updated","context","attributes.icon"),f.omit(o,"custom","last_changed","last_updated","context","attributes.icon")),u=f.cloneDeep(n),d=typeof u.attributes.icon=="string",k=typeof o.attributes.icon=="string";let m=!f.isEmpty(g);if(d&&k&&u.attributes.icon!==o.attributes.icon)m=!0;else if(!d){const _=q(y.computeDomain(u.entity_id),u);_!==o.attributes.icon&&(u.attributes.icon=_,m=!0)}m&&N(u)}},[o,N,I]),c.useEffect(()=>{i&&!o&&l(a(i)),!i&&o&&l(null),i&&o&&i.entity_id!==o.entity_id&&l(a(i))},[i,o,a]),c.useMemo(()=>o===null?null:{...o,history:D,service:E},[o,D,E])}exports.getIconByEntity=q;exports.useEntity=O;exports.useIcon=Y;exports.useIconByDomain=W;exports.useIconByEntity=Z;
//# sourceMappingURL=index-BaeYRyIt.cjs.map