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 { alertStore } from 'AlertStore'
|
||||
|
||||
export default {
|
||||
props: {
|
||||
|
|
@ -11,25 +12,38 @@ export default {
|
|||
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: `
|
||||
<form method="POST">
|
||||
<input type="hidden" name="action" value="modify">
|
||||
<input type="hidden" name="action-id" :value="event.id">
|
||||
|
||||
<div class="btn-toolbar pull-right">
|
||||
<template v-if="event.dataType === 'ColorEventData'">
|
||||
<input type="hidden" name="type" value="color">
|
||||
<input type="color" name="data" onchange="this.form.submit()" :value="event.data?.valueStr">
|
||||
</template>
|
||||
<template v-else-if="event.dataType === 'LevelEventData'">
|
||||
<input type="hidden" name="type" value="level">
|
||||
<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>
|
||||
<div class="btn-toolbar pull-right">
|
||||
<template v-if="event.dataType === 'ColorEventData'">
|
||||
<input type="color" @change="changeState" :value="event.data?.valueStr">
|
||||
</template>
|
||||
<template v-else-if="event.dataType === 'LevelEventData'">
|
||||
<input class="styled-slider slider-progress" type="range" min="0.0" max="1.0" step="0.1" @change="changeState" :value="event.data?.value">
|
||||
</template>
|
||||
<template v-else-if="event.dataType === 'OnOffEventData'">
|
||||
<input class="switch" type="checkbox" @change="changeState" v-model="checkboxChecked">
|
||||
</template>
|
||||
</div>
|
||||
`
|
||||
}
|
||||
|
|
@ -34,7 +34,7 @@ public class SendEventAction implements HalAction {
|
|||
// Send
|
||||
EventControllerManager.getInstance().send(event, dataObj);
|
||||
} else
|
||||
logger.warning("Unable to find event with id: "+ event.getId());
|
||||
logger.warning("Unable to find event for EventAction: " + this);
|
||||
} catch (Exception e) {
|
||||
logger.log(Level.SEVERE, null, e);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,13 @@
|
|||
package se.hal.page.api;
|
||||
|
||||
import se.hal.EventControllerManager;
|
||||
import se.hal.HalContext;
|
||||
import se.hal.intf.HalApiEndpoint;
|
||||
import se.hal.intf.HalEventData;
|
||||
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.ObjectUtil;
|
||||
import zutil.db.DBConnection;
|
||||
|
|
@ -43,46 +48,83 @@ public class EventApiEndpoint extends HalApiEndpoint {
|
|||
if (request.get("id") != null)
|
||||
reqIds = request.get("id").split(",");
|
||||
|
||||
String reqConfigType = request.get("configType");
|
||||
String reqDataType = request.get("dataType");
|
||||
if ("modify".equals(request.get("action"))) {
|
||||
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<>();
|
||||
for (Event event : Event.getLocalEvents(db)) {
|
||||
boolean filter_match = true;
|
||||
// change event data
|
||||
HalEventData eventData;
|
||||
|
||||
// id filtering
|
||||
if (!ObjectUtil.isEmpty((Object) reqIds) && !ArrayUtil.contains(reqIds, "" + event.getId())) {
|
||||
filter_match = false;
|
||||
switch (event.getDeviceConfig().getDeviceDataClass().getSimpleName()) {
|
||||
case "LevelEventData":
|
||||
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) &&
|
||||
!event.getDeviceConfig().getClass().getSimpleName().equals(reqConfigType)) {
|
||||
filter_match = false;
|
||||
// --------------------------------------
|
||||
// Generate DataNode
|
||||
// --------------------------------------
|
||||
|
||||
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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue