mirror of
https://git.rwth-aachen.de/acs/public/villas/web/
synced 2025-03-09 00:00:01 +01:00
fix for widgets that use signals in case no signal is selected
This commit is contained in:
parent
f3f58696ca
commit
3e78c99771
5 changed files with 138 additions and 125 deletions
|
@ -81,114 +81,116 @@ class WidgetGauge extends Component {
|
|||
// get the signal with the selected signal ID
|
||||
let signalID = props.widget.signalIDs[0];
|
||||
let signal = props.signals.filter(s => s.id === signalID)
|
||||
// determine ID of infrastructure component related to signal[0] (there is only one signal for a lamp widget)
|
||||
let icID = props.icIDs[signal[0].id];
|
||||
|
||||
let returnState = {}
|
||||
if(signal.length > 0) {
|
||||
// determine ID of infrastructure component related to signal[0] (there is only one signal for a lamp widget)
|
||||
let icID = props.icIDs[signal[0].id];
|
||||
|
||||
returnState["colorZones"] = props.widget.customProperties.zones;
|
||||
let returnState = {}
|
||||
|
||||
if(signalID){
|
||||
returnState["signalID"] = signalID;
|
||||
}
|
||||
// Update unit (assuming there is exactly one signal for this widget)
|
||||
if(signal !== undefined){
|
||||
returnState["unit"] = signal[0].unit;
|
||||
}
|
||||
returnState["colorZones"] = props.widget.customProperties.zones;
|
||||
|
||||
// update value
|
||||
if (signalID) {
|
||||
returnState["signalID"] = signalID;
|
||||
}
|
||||
// Update unit (assuming there is exactly one signal for this widget)
|
||||
if (signal !== undefined) {
|
||||
returnState["unit"] = signal[0].unit;
|
||||
}
|
||||
|
||||
// check if data available
|
||||
if (props.data == null
|
||||
|| props.data[icID] == null
|
||||
|| props.data[icID].output == null
|
||||
|| props.data[icID].output.values == null) {
|
||||
return{ value: 0, minValue: 0, maxValue: 10};
|
||||
}
|
||||
// update value
|
||||
|
||||
// memorize if min or max value is updated
|
||||
let updateValue = false;
|
||||
let updateMinValue = false;
|
||||
let updateMaxValue = false;
|
||||
// check if data available
|
||||
if (props.data == null
|
||||
|| props.data[icID] == null
|
||||
|| props.data[icID].output == null
|
||||
|| props.data[icID].output.values == null) {
|
||||
return {value: 0, minValue: 0, maxValue: 10};
|
||||
}
|
||||
|
||||
// check if value has changed
|
||||
const data = props.data[icID].output.values[signal[0].index-1];
|
||||
// Take just 3 decimal positions
|
||||
// Note: Favor this method over Number.toFixed(n) in order to avoid a type conversion, since it returns a String
|
||||
if (data != null) {
|
||||
const value = signal[0].scalingFactor * Math.round(data[data.length - 1].y * 1e3) / 1e3;
|
||||
let minValue = null;
|
||||
let maxValue = null;
|
||||
// memorize if min or max value is updated
|
||||
let updateValue = false;
|
||||
let updateMinValue = false;
|
||||
let updateMaxValue = false;
|
||||
|
||||
if ((state.value !== value && value != null) || props.widget.customProperties.valueUseMinMax || state.useMinMaxChange) {
|
||||
//value has changed
|
||||
updateValue = true;
|
||||
// check if value has changed
|
||||
const data = props.data[icID].output.values[signal[0].index - 1];
|
||||
// Take just 3 decimal positions
|
||||
// Note: Favor this method over Number.toFixed(n) in order to avoid a type conversion, since it returns a String
|
||||
if (data != null) {
|
||||
const value = signal[0].scalingFactor * Math.round(data[data.length - 1].y * 1e3) / 1e3;
|
||||
let minValue = null;
|
||||
let maxValue = null;
|
||||
|
||||
// update min-max if needed
|
||||
let updateLabels = false;
|
||||
if ((state.value !== value && value != null) || props.widget.customProperties.valueUseMinMax || state.useMinMaxChange) {
|
||||
//value has changed
|
||||
updateValue = true;
|
||||
|
||||
minValue = state.minValue;
|
||||
maxValue = state.maxValue;
|
||||
// update min-max if needed
|
||||
let updateLabels = false;
|
||||
|
||||
if (minValue == null || (!props.widget.customProperties.valueUseMinMax && (value < minValue || signalID !== state.signalID)) ||state.useMinMaxChange) {
|
||||
minValue = value - 0.5;
|
||||
updateLabels = true;
|
||||
updateMinValue = true;
|
||||
}
|
||||
minValue = state.minValue;
|
||||
maxValue = state.maxValue;
|
||||
|
||||
if (maxValue == null || (!props.widget.customProperties.valueUseMinMax && (value > maxValue || signalID !== state.signalID)) || state.useMinMaxChange) {
|
||||
maxValue = value + 0.5;
|
||||
updateLabels = true;
|
||||
updateMaxValue = true;
|
||||
returnState["useMinMaxChange"] = false;
|
||||
}
|
||||
if (minValue == null || (!props.widget.customProperties.valueUseMinMax && (value < minValue || signalID !== state.signalID)) || state.useMinMaxChange) {
|
||||
minValue = value - 0.5;
|
||||
updateLabels = true;
|
||||
updateMinValue = true;
|
||||
}
|
||||
|
||||
if (props.widget.customProperties.valueUseMinMax) {
|
||||
if (maxValue == null || (!props.widget.customProperties.valueUseMinMax && (value > maxValue || signalID !== state.signalID)) || state.useMinMaxChange) {
|
||||
maxValue = value + 0.5;
|
||||
updateLabels = true;
|
||||
updateMaxValue = true;
|
||||
returnState["useMinMaxChange"] = false;
|
||||
}
|
||||
|
||||
if (props.widget.customProperties.valueUseMinMax) {
|
||||
minValue = props.widget.customProperties.valueMin;
|
||||
updateMinValue = true;
|
||||
maxValue = props.widget.customProperties.valueMax;
|
||||
updateMaxValue = true;
|
||||
updateLabels = true;
|
||||
|
||||
}
|
||||
|
||||
if (updateLabels === false && state.gauge) {
|
||||
// check if min/max changed
|
||||
if (minValue > state.gauge.minValue) {
|
||||
minValue = state.gauge.minValue;
|
||||
updateMinValue = true;
|
||||
}
|
||||
|
||||
if (maxValue < state.gauge.maxValue) {
|
||||
maxValue = state.gauge.maxValue;
|
||||
updateMaxValue = true;
|
||||
if (updateLabels === false && state.gauge) {
|
||||
// check if min/max changed
|
||||
if (minValue > state.gauge.minValue) {
|
||||
minValue = state.gauge.minValue;
|
||||
updateMinValue = true;
|
||||
}
|
||||
|
||||
if (maxValue < state.gauge.maxValue) {
|
||||
maxValue = state.gauge.maxValue;
|
||||
updateMaxValue = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(props.widget.customProperties.valueUseMinMax !== state.useMinMax){
|
||||
returnState["useMinMax"] = props.widget.customProperties.valueUseMinMax;
|
||||
}
|
||||
if (props.widget.customProperties.valueUseMinMax !== state.useMinMax) {
|
||||
returnState["useMinMax"] = props.widget.customProperties.valueUseMinMax;
|
||||
}
|
||||
|
||||
// prepare returned state
|
||||
if(updateValue === true){
|
||||
returnState["value"] = value;
|
||||
}
|
||||
if(updateMinValue === true){
|
||||
returnState["minValue"] = minValue;
|
||||
}
|
||||
if(updateMaxValue === true){
|
||||
returnState["maxValue"] = maxValue;
|
||||
}
|
||||
|
||||
if (returnState !== {}){
|
||||
return returnState;
|
||||
}
|
||||
else{
|
||||
return null;
|
||||
}
|
||||
} // if there is signal data
|
||||
// prepare returned state
|
||||
if (updateValue === true) {
|
||||
returnState["value"] = value;
|
||||
}
|
||||
if (updateMinValue === true) {
|
||||
returnState["minValue"] = minValue;
|
||||
}
|
||||
if (updateMaxValue === true) {
|
||||
returnState["maxValue"] = maxValue;
|
||||
}
|
||||
|
||||
if (returnState !== {}) {
|
||||
return returnState;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
} // if there is signal data
|
||||
}
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -42,11 +42,13 @@ class WidgetInput extends Component {
|
|||
value = Number(props.widget.customProperties.default_value)
|
||||
}
|
||||
|
||||
// Update unit (assuming there is exactly one signal for this widget)
|
||||
let signalID = props.widget.signalIDs[0];
|
||||
let signal = props.signals.find(sig => sig.id === signalID);
|
||||
if(signal !== undefined){
|
||||
unit = signal.unit;
|
||||
if (props.widget.signalIDs.length > 0) {
|
||||
// Update unit (assuming there is exactly one signal for this widget)
|
||||
let signalID = props.widget.signalIDs[0];
|
||||
let signal = props.signals.find(sig => sig.id === signalID);
|
||||
if (signal !== undefined) {
|
||||
unit = signal.unit;
|
||||
}
|
||||
}
|
||||
|
||||
if (unit !== '' && value !== ''){
|
||||
|
|
|
@ -36,21 +36,24 @@ class WidgetLamp extends Component {
|
|||
// get the signal with the selected signal ID
|
||||
let signalID = props.widget.signalIDs[0];
|
||||
let signal = props.signals.filter(s => s.id === signalID)
|
||||
// determine ID of infrastructure component related to signal[0] (there is only one signal for a lamp widget)
|
||||
let icID = props.icIDs[signal[0].id];
|
||||
|
||||
// check if data available
|
||||
if (props.data == null
|
||||
|| props.data[icID] == null
|
||||
|| props.data[icID].output == null
|
||||
|| props.data[icID].output.values == null) {
|
||||
return{value:''};
|
||||
}
|
||||
if(signal.length>0) {
|
||||
// determine ID of infrastructure component related to signal[0] (there is only one signal for a lamp widget)
|
||||
let icID = props.icIDs[signal[0].id];
|
||||
|
||||
// check if value has changed
|
||||
const data = props.data[icID].output.values[signal[0].index-1];
|
||||
if (data != null && Number(state.value) !== signal[0].scalingFactor * data[data.length - 1].y) {
|
||||
return { value: signal[0].scalingFactor * data[data.length - 1].y };
|
||||
// check if data available
|
||||
if (props.data == null
|
||||
|| props.data[icID] == null
|
||||
|| props.data[icID].output == null
|
||||
|| props.data[icID].output.values == null) {
|
||||
return {value: ''};
|
||||
}
|
||||
|
||||
// check if value has changed
|
||||
const data = props.data[icID].output.values[signal[0].index - 1];
|
||||
if (data != null && Number(state.value) !== signal[0].scalingFactor * data[data.length - 1].y) {
|
||||
return {value: signal[0].scalingFactor * data[data.length - 1].y};
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
|
|
|
@ -53,10 +53,12 @@ class WidgetSlider extends Component {
|
|||
}
|
||||
|
||||
// Update unit (assuming there is exactly one signal for this widget)
|
||||
let signalID = props.widget.signalIDs[0];
|
||||
let signal = props.signals.find(sig => sig.id === signalID);
|
||||
if(signal !== undefined){
|
||||
unit = signal.unit;
|
||||
if (props.widget.signalIDs.length > 0) {
|
||||
let signalID = props.widget.signalIDs[0];
|
||||
let signal = props.signals.find(sig => sig.id === signalID);
|
||||
if (signal !== undefined) {
|
||||
unit = signal.unit;
|
||||
}
|
||||
}
|
||||
|
||||
if (unit !== '' && value !== ''){
|
||||
|
|
|
@ -36,31 +36,35 @@ class WidgetValue extends Component {
|
|||
// get the signal with the selected signal ID
|
||||
let signalID = props.widget.signalIDs[0];
|
||||
let signal = props.signals.filter(s => s.id === signalID)
|
||||
// determine ID of infrastructure component related to signal[0] (there is only one signal for a value widget)
|
||||
let icID = props.icIDs[signal[0].id];
|
||||
if(signal.length>0) {
|
||||
// determine ID of infrastructure component related to signal[0] (there is only one signal for a value widget)
|
||||
let icID = props.icIDs[signal[0].id];
|
||||
|
||||
// check if data available
|
||||
let value = ''
|
||||
if (props.data == null || props.data[icID] == null || props.data[icID].output == null || props.data[icID].output.values == null) {
|
||||
value = '';
|
||||
} else {
|
||||
// check if value has changed
|
||||
const data = props.data[icID].output.values[signal[0].index - 1];
|
||||
if (data != null && Number(state.value) !== data[data.length - 1].y) {
|
||||
value = signal[0].scalingFactor * data[data.length - 1].y;
|
||||
// check if data available
|
||||
let value = ''
|
||||
if (props.data == null || props.data[icID] == null || props.data[icID].output == null || props.data[icID].output.values == null) {
|
||||
value = '';
|
||||
} else {
|
||||
// check if value has changed
|
||||
const data = props.data[icID].output.values[signal[0].index - 1];
|
||||
if (data != null && Number(state.value) !== data[data.length - 1].y) {
|
||||
value = signal[0].scalingFactor * data[data.length - 1].y;
|
||||
}
|
||||
}
|
||||
|
||||
// Update unit (assuming there is exactly one signal for this widget)
|
||||
let unit = '';
|
||||
if (signal !== undefined) {
|
||||
unit = signal[0].unit;
|
||||
}
|
||||
|
||||
return {
|
||||
value: value,
|
||||
unit: unit,
|
||||
};
|
||||
}
|
||||
|
||||
// Update unit (assuming there is exactly one signal for this widget)
|
||||
let unit = '';
|
||||
if(signal !== undefined){
|
||||
unit = signal[0].unit;
|
||||
}
|
||||
|
||||
return {
|
||||
value: value,
|
||||
unit: unit,
|
||||
};
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue