import {FatalError, Widget} from '@bthlabs/homehub-components'; import { IconArrowsRotate, IconBasicLightbulb, Icon, } from '@bthlabs/homehub-icons'; import ClassName from 'classnames'; import React from 'react'; import {Form} from 'react-bootstrap'; import './TradfriWidgetView.scss'; export const TradfriWidgetSettingsView = (props) => { const onHostInputChange = React.useCallback( (event) => { props.setNextCharacteristics({ ...props.nextCharacteristics, host: event.target.value, }); }, [props] ); const onKeyInputChange = React.useCallback( (event) => { props.setNextCharacteristics({ ...props.nextCharacteristics, key: event.target.value, }); }, [props] ); if (!props.nextCharacteristics) { return null; } return (
Host Key
); }; export const Group = (props) => { const lights = React.useMemo( () => { return props.lights.filter((light) => { return props.group.member_ids.includes(light.id); }); }, [props] ); const isOn = React.useMemo( () => { return lights.every((light) => { return light.state; }); }, [lights] ); const onClick = React.useCallback( () => { props.onSetLightsState( lights.map((light) => { return light.id; }), !isOn ); }, [props, lights, isOn] ); const groupClassName = ClassName('group', { 'group-on': isOn, }); return (
{props.group.name}
); }; export const TradfriWidgetView = (props) => { const onGroupSetLightsState = React.useCallback( (lightIds, nextState) => { (async () => { const nextServiceState = { data: { ...props.serviceState.data(), lights: props.serviceState.data().lights.map((light) => { if (lightIds.includes(light.id)) { return { ...light, state: nextState, }; } return light; }), }, }; props.setServiceState(nextServiceState); await props.service.setLightsState(lightIds, nextState); })(); }, [props] ); if (props.serviceState === null) { return null; } const className = ClassName('TradfriWidgetView', { 'is-loading': ( props.serviceState.isLoading() || props.serviceState.hasFatalError() ), }); return ( {props.serviceState.isLoading() && } {props.serviceState.hasData() && props.serviceState.data().groups.map((group) => { return ( ); })} {props.serviceState.hasFatalError() && } ); }; TradfriWidgetView.defaultLayout = { h: 4, w: 6, }; TradfriWidgetView.icon = IconBasicLightbulb; TradfriWidgetView.layoutConstraints = { minH: 4, minW: 6, }; TradfriWidgetView.settingsView = TradfriWidgetSettingsView; TradfriWidgetView.title = 'Tradfri';