Fixed Event overview page to properly modify events
This commit is contained in:
parent
d049e524d5
commit
60024dc915
3 changed files with 110 additions and 54 deletions
|
|
@ -1,4 +1,5 @@
|
||||||
import {eventStore} from 'EventStore'
|
import {eventStore} from 'EventStore'
|
||||||
|
import { alertStore } from 'AlertStore'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
props: {
|
props: {
|
||||||
|
|
@ -11,25 +12,38 @@ export default {
|
||||||
checkboxChecked: internalEvent.data?.valueStr == 'ON',
|
checkboxChecked: internalEvent.data?.valueStr == 'ON',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
methods: {
|
||||||
|
changeState(changeEvent) {
|
||||||
|
fetch('/api/event?' + new URLSearchParams({
|
||||||
|
id: this.event.id,
|
||||||
|
action: "modify",
|
||||||
|
data: changeEvent.target.type == "checkbox" ? this.checkboxChecked : changeEvent.target.value
|
||||||
|
}).toString(), {
|
||||||
|
method: 'PUT',
|
||||||
|
headers: {
|
||||||
|
'Accept': 'application/json',
|
||||||
|
},
|
||||||
|
})
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(json => {
|
||||||
|
if (json['error'] != null) {
|
||||||
|
alertStore.alertError(json['error']);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
template: `
|
template: `
|
||||||
<form method="POST">
|
<div class="btn-toolbar pull-right">
|
||||||
<input type="hidden" name="action" value="modify">
|
<template v-if="event.dataType === 'ColorEventData'">
|
||||||
<input type="hidden" name="action-id" :value="event.id">
|
<input type="color" @change="changeState" :value="event.data?.valueStr">
|
||||||
|
</template>
|
||||||
<div class="btn-toolbar pull-right">
|
<template v-else-if="event.dataType === 'LevelEventData'">
|
||||||
<template v-if="event.dataType === 'ColorEventData'">
|
<input class="styled-slider slider-progress" type="range" min="0.0" max="1.0" step="0.1" @change="changeState" :value="event.data?.value">
|
||||||
<input type="hidden" name="type" value="color">
|
</template>
|
||||||
<input type="color" name="data" onchange="this.form.submit()" :value="event.data?.valueStr">
|
<template v-else-if="event.dataType === 'OnOffEventData'">
|
||||||
</template>
|
<input class="switch" type="checkbox" @change="changeState" v-model="checkboxChecked">
|
||||||
<template v-else-if="event.dataType === 'LevelEventData'">
|
</template>
|
||||||
<input type="hidden" name="type" value="level">
|
</div>
|
||||||
<input class="styled-slider slider-progress" type="range" name="data" min="0" max="100" step="10" onchange="this.form.submit()" :value="event.data?.value * 100">
|
|
||||||
</template>
|
|
||||||
<template v-else-if="event.dataType === 'OnOffEventData'">
|
|
||||||
<input type="hidden" name="type" value="on-off">
|
|
||||||
<input class="switch" type="checkbox" name="data" onchange="this.form.submit()" v-model="checkboxChecked">
|
|
||||||
</template>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
`
|
`
|
||||||
}
|
}
|
||||||
|
|
@ -34,7 +34,7 @@ public class SendEventAction implements HalAction {
|
||||||
// Send
|
// Send
|
||||||
EventControllerManager.getInstance().send(event, dataObj);
|
EventControllerManager.getInstance().send(event, dataObj);
|
||||||
} else
|
} else
|
||||||
logger.warning("Unable to find event with id: "+ event.getId());
|
logger.warning("Unable to find event for EventAction: " + this);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.log(Level.SEVERE, null, e);
|
logger.log(Level.SEVERE, null, e);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,13 @@
|
||||||
package se.hal.page.api;
|
package se.hal.page.api;
|
||||||
|
|
||||||
|
import se.hal.EventControllerManager;
|
||||||
import se.hal.HalContext;
|
import se.hal.HalContext;
|
||||||
import se.hal.intf.HalApiEndpoint;
|
import se.hal.intf.HalApiEndpoint;
|
||||||
|
import se.hal.intf.HalEventData;
|
||||||
import se.hal.struct.Event;
|
import se.hal.struct.Event;
|
||||||
|
import se.hal.struct.devicedata.ColorEventData;
|
||||||
|
import se.hal.struct.devicedata.LevelEventData;
|
||||||
|
import se.hal.struct.devicedata.OnOffEventData;
|
||||||
import zutil.ArrayUtil;
|
import zutil.ArrayUtil;
|
||||||
import zutil.ObjectUtil;
|
import zutil.ObjectUtil;
|
||||||
import zutil.db.DBConnection;
|
import zutil.db.DBConnection;
|
||||||
|
|
@ -43,46 +48,83 @@ public class EventApiEndpoint extends HalApiEndpoint {
|
||||||
if (request.get("id") != null)
|
if (request.get("id") != null)
|
||||||
reqIds = request.get("id").split(",");
|
reqIds = request.get("id").split(",");
|
||||||
|
|
||||||
String reqConfigType = request.get("configType");
|
if ("modify".equals(request.get("action"))) {
|
||||||
String reqDataType = request.get("dataType");
|
for (String idStr : reqIds) {
|
||||||
|
int id = Integer.parseInt(idStr);
|
||||||
|
Event event = Event.getEvent(db, id);
|
||||||
|
|
||||||
// Filter devices
|
if (event == null) {
|
||||||
|
logger.warning("Could not find given Event id: " + id);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
List<Event> events = new ArrayList<>();
|
// change event data
|
||||||
for (Event event : Event.getLocalEvents(db)) {
|
HalEventData eventData;
|
||||||
boolean filter_match = true;
|
|
||||||
|
|
||||||
// id filtering
|
switch (event.getDeviceConfig().getDeviceDataClass().getSimpleName()) {
|
||||||
if (!ObjectUtil.isEmpty((Object) reqIds) && !ArrayUtil.contains(reqIds, "" + event.getId())) {
|
case "LevelEventData":
|
||||||
filter_match = false;
|
eventData = new LevelEventData(Integer.parseInt(request.get("data")) / 100.0, 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "ColorEventData":
|
||||||
|
eventData = new ColorEventData(request.get("data"), 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "OnOffEventData":
|
||||||
|
boolean booleanData = "on".equalsIgnoreCase(request.get("data")) || "true".equalsIgnoreCase(request.get("data"));
|
||||||
|
eventData = new OnOffEventData(booleanData, 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
logger.warning("Unable to process event change request for event " + id + ", data type not supported: " + event.getDeviceConfig().getDeviceDataClass());
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.info("Modifying Event(" + id + ") state: " + eventData);
|
||||||
|
EventControllerManager.getInstance().send(event, eventData);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
String reqConfigType = request.get("configType");
|
||||||
|
String reqDataType = request.get("dataType");
|
||||||
|
|
||||||
|
// Filter devices
|
||||||
|
|
||||||
|
List<Event> events = new ArrayList<>();
|
||||||
|
for (Event event : Event.getLocalEvents(db)) {
|
||||||
|
boolean filter_match = true;
|
||||||
|
|
||||||
|
// id filtering
|
||||||
|
if (!ObjectUtil.isEmpty((Object) reqIds) && !ArrayUtil.contains(reqIds, "" + event.getId())) {
|
||||||
|
filter_match = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// device type filtering
|
||||||
|
if (!ObjectUtil.isEmpty(reqConfigType) &&
|
||||||
|
!event.getDeviceConfig().getClass().getSimpleName().equals(reqConfigType)) {
|
||||||
|
filter_match = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// data type filtering
|
||||||
|
if (!ObjectUtil.isEmpty(reqDataType) &&
|
||||||
|
!event.getDeviceConfig().getDeviceDataClass().getSimpleName().equals(reqDataType)) {
|
||||||
|
filter_match = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check the filter
|
||||||
|
if (filter_match) {
|
||||||
|
events.add(event);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// device type filtering
|
// --------------------------------------
|
||||||
if (!ObjectUtil.isEmpty(reqConfigType) &&
|
// Generate DataNode
|
||||||
!event.getDeviceConfig().getClass().getSimpleName().equals(reqConfigType)) {
|
// --------------------------------------
|
||||||
filter_match = false;
|
|
||||||
|
for (Event event : events) {
|
||||||
|
DataNode deviceNode = event.getDataNode();
|
||||||
|
deviceNode.set("type", "Event");
|
||||||
|
root.add(deviceNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
// data type filtering
|
|
||||||
if (!ObjectUtil.isEmpty(reqDataType) &&
|
|
||||||
!event.getDeviceConfig().getDeviceDataClass().getSimpleName().equals(reqDataType)) {
|
|
||||||
filter_match = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check the filter
|
|
||||||
if (filter_match) {
|
|
||||||
events.add(event);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------------------------------
|
|
||||||
// Generate DataNode
|
|
||||||
// --------------------------------------
|
|
||||||
|
|
||||||
for (Event event : events) {
|
|
||||||
DataNode deviceNode = event.getDataNode();
|
|
||||||
deviceNode.set("type", "Event");
|
|
||||||
root.add(deviceNode);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return root;
|
return root;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue