homeassistant widget minor code cleanup / changes

- limit to 4 blocks
- allow container to handle field filtering
This commit is contained in:
shamoon 2023-04-12 01:06:48 -07:00
parent 59448b7277
commit 352b4146f7
3 changed files with 13 additions and 11 deletions

View File

@ -14,7 +14,7 @@ export default function Container({ error = false, children, service }) {
// fields: [ "resources.cpu", "resources.mem", "field"] // fields: [ "resources.cpu", "resources.mem", "field"]
// or even // or even
// fields: [ "resources.cpu", "widget_type.field" ] // fields: [ "resources.cpu", "widget_type.field" ]
visibleChildren = children.filter(child => fields.some(field => { visibleChildren = children?.filter(child => fields.some(field => {
let fullField = field; let fullField = field;
if (!field.includes(".")) { if (!field.includes(".")) {
fullField = `${type}.${field}`; fullField = `${type}.${field}`;

View File

@ -5,12 +5,12 @@ import useWidgetAPI from "utils/proxy/use-widget-api";
export default function Component({ service }) { export default function Component({ service }) {
const { widget } = service; const { widget } = service;
const { data, error } = useWidgetAPI(widget, "", { refreshInterval: 60000 }); const { data, error } = useWidgetAPI(widget, null, { refreshInterval: 60000 });
if (error) { if (error) {
return <Container error={error} />; return <Container error={error} />;
} }
const panels = [];
data?.forEach(d => panels.push(<Block label={d.label} value={d.value} />)); return <Container service={service}>
{data?.map(d => <Block label={d.label} value={d.value} key={d.label} />)}
return <Container service={service}>{panels}</Container>; </Container>;
} }

View File

@ -6,7 +6,7 @@ const logger = createLogger("homeassistantProxyHandler");
const defaultQueries = [ const defaultQueries = [
{ {
template: "{{ states.person|selectattr('state','equalto','home')|list|length }} / {{ states.person|selectattr('state','search','(^home$|^not home$)')|list|length }}", template: "{{ states.person|selectattr('state','equalto','home')|list|length }} / {{ states.person|list|length }}",
label: "homeassistant.people_home" label: "homeassistant.people_home"
}, },
{ {
@ -52,7 +52,7 @@ async function getQuery(query, { url, key }) {
output: (data) => ({ label, value: data.toString() }) output: (data) => ({ label, value: data.toString() })
}; };
} }
return { result: [500, "", { error: { message: `invalid query ${JSON.stringify(query)}` } }] }; return { result: [500, null, { error: { message: `invalid query ${JSON.stringify(query)}` } }] };
} }
export default async function homeassistantProxyHandler(req, res) { export default async function homeassistantProxyHandler(req, res) {
@ -68,9 +68,11 @@ export default async function homeassistantProxyHandler(req, res) {
logger.debug("Invalid or missing widget for service '%s' in group '%s'", service, group); logger.debug("Invalid or missing widget for service '%s' in group '%s'", service, group);
return res.status(400).json({ error: "Invalid proxy service type" }); return res.status(400).json({ error: "Invalid proxy service type" });
} }
const queries = widget.custom !== undefined && widget.fields === undefined ? let queries = defaultQueries;
widget.custom : defaultQueries.filter(q => widget.fields?.includes(q.label.split(".")[1]) ?? true); if (!widget.fields && widget.custom) {
queries = widget.custom.slice(0, 4);
}
const results = await Promise.all(queries.map(q => getQuery(q, widget))); const results = await Promise.all(queries.map(q => getQuery(q, widget)));