From bb16d5c47538e682130f4fa0c5472428ad988741 Mon Sep 17 00:00:00 2001 From: Claudio Maggioni Date: Tue, 5 May 2020 17:04:53 +0200 Subject: [PATCH] Done 1 read scene part --- smart-hut/src/components/HostModal.js | 50 ++++++------- smart-hut/src/components/RoomModal.js | 3 +- .../src/components/dashboard/HostsPanel.js | 71 +++++++++++++------ .../dashboard/devices/DeviceSettingsModal.js | 10 +-- smart-hut/src/remote.js | 13 +++- smart-hut/src/store.js | 10 +++ smart-hut/src/storeActions.js | 5 ++ 7 files changed, 100 insertions(+), 62 deletions(-) diff --git a/smart-hut/src/components/HostModal.js b/smart-hut/src/components/HostModal.js index e262e3f..cd03809 100644 --- a/smart-hut/src/components/HostModal.js +++ b/smart-hut/src/components/HostModal.js @@ -22,8 +22,7 @@ class HostModal extends Component { .then(() => { this.setState({ ...this.state, - guests: this.props.guests - .map((u) => u.id), + guests: this.props.guests.map((u) => u.id), }); }) .catch(console.error); @@ -32,11 +31,13 @@ class HostModal extends Component { .then((users) => this.setState({ ...this.state, - users: users.filter(u => u.id !== this.props.currentUserId).map((u) => ({ - key: u.id, - text: `@${u.username} (${u.name})`, - value: u.id, - })), + users: users + .filter((u) => u.id !== this.props.currentUserId) + .map((u) => ({ + key: u.id, + text: `@${u.username} (${u.name})`, + value: u.id, + })), }) ) .catch(console.error); @@ -86,25 +87,20 @@ class HostModal extends Component {
Select guests
- -

Spaghetti!

-
- -
- - - - -
-
+
+ + + + +
+ + + + ))} + +
+ Devices +
+ + {this.props.hostDeviceIds.map((id) => { + return ( + + ); + })} + + ); } } @@ -44,6 +72,7 @@ class HostsPanel extends Component { const mapStateToProps = (state, _) => ({ isActiveDefaultHost: state.active.activeHost === -1, activeHost: state.active.activeHost, + hostScenes: state.hostScenes[state.active.activeHost] || [], hostDevices: state.hostDevices, hostDeviceIds: Object.keys(state.hostDevices[state.active.activeHost] || {}), }); diff --git a/smart-hut/src/components/dashboard/devices/DeviceSettingsModal.js b/smart-hut/src/components/dashboard/devices/DeviceSettingsModal.js index 83773c8..c6b9408 100644 --- a/smart-hut/src/components/dashboard/devices/DeviceSettingsModal.js +++ b/smart-hut/src/components/dashboard/devices/DeviceSettingsModal.js @@ -1,13 +1,5 @@ import React, { Component, useState } from "react"; -import { - Button, - Form, - Icon, - Header, - Modal, - Input, - Checkbox, -} from "semantic-ui-react"; +import { Button, Form, Icon, Header, Modal, Input } from "semantic-ui-react"; import { connect } from "react-redux"; import { RemoteService } from "../../../remote"; diff --git a/smart-hut/src/remote.js b/smart-hut/src/remote.js index 4eec55d..f0cfcea 100644 --- a/smart-hut/src/remote.js +++ b/smart-hut/src/remote.js @@ -304,10 +304,17 @@ export const RemoteService = { * @returns {Promise} promise that resolves to void and rejects * with user-fiendly errors as a RemoteError */ - fetchAllScenes: () => { + fetchAllScenes: (hostId = null) => { return (dispatch) => { - return Endpoint.get("/scene") - .then((res) => void dispatch(actions.scenesUpdate(res.data))) + return Endpoint.get("/scene", hostId ? { hostId } : {}) + .then( + (res) => + void dispatch( + !hostId + ? actions.scenesUpdate(res.data) + : actions.hostScenesUpdate(hostId, res.data) + ) + ) .catch((err) => { console.error("Fetch all scenes error", err); throw new RemoteError(["Network error"]); diff --git a/smart-hut/src/store.js b/smart-hut/src/store.js index 1ade73b..f256839 100644 --- a/smart-hut/src/store.js +++ b/smart-hut/src/store.js @@ -120,6 +120,15 @@ function reducer(previousState, action) { createOrUpdateScene(scene); } break; + case "HOST_SCENES_UPDATE": + change = { + hostScenes: { + [action.hostId]: { $set: action.scenes }, // stored as array + }, + }; + + newState = update(previousState, change); + break; case "STATES_UPDATE": //console.log(action.sceneStates); change = null; @@ -576,6 +585,7 @@ const initState = { rooms: {}, /** @type {[integer]Scene} */ scenes: {}, + hostScenes: {}, /** @type {[integer]Automation} */ automations: {}, /** @type {[integer]Device} */ diff --git a/smart-hut/src/storeActions.js b/smart-hut/src/storeActions.js index 64c2a52..218f4b9 100644 --- a/smart-hut/src/storeActions.js +++ b/smart-hut/src/storeActions.js @@ -102,6 +102,11 @@ const actions = { type: "SCENES_UPDATE", scenes, }), + hostScenesUpdate: (hostId, scenes) => ({ + type: "HOST_SCENES_UPDATE", + hostId, + scenes, + }), deviceDelete: (deviceId) => ({ type: "DEVICE_DELETE", deviceId,