Skip to content

Commit

Permalink
Merge pull request #50 from ApitechFR/fix/sr7-cond-conflit
Browse files Browse the repository at this point in the history
Refactor shape component rendering and conditions handling
  • Loading branch information
LouisCorbet committed Apr 3, 2024
2 parents 70d196e + ce5d6d5 commit cc3379e
Showing 1 changed file with 70 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,37 +31,40 @@ scada.scheme.handleBlinking = function (divComp, blinking, bool) {
}
};
scada.scheme.updateStyles = function (divComp, cond, bool) {
if ('color' in cond) {
if ("color" in cond) {
divComp.css("color", cond.color);
}
if ('rotation' in cond) {
if ("rotation" in cond) {
divComp.css("transform", "rotate(" + cond.rotation + "deg)");
}

if ('backgroundColor' in cond) {
if ("backgroundColor" in cond) {
if (bool) {
divComp.css("background-color", cond.backgroundColor);
} else {
divComp.css("background-color", cond.backColor ? String(cond.backColor) : "");
divComp.css(
"background-color",
cond.backColor ? String(cond.backColor) : "",
);
}
}
if ('isVisible' in cond) {
if ("isVisible" in cond) {
if (bool) {
divComp.css("visibility", cond.isVisible ? "visible" : "hidden");
} else {
divComp.css("visibility", "visible");
}
}

if ('width' in cond) {
if ("width" in cond) {
if (bool) {
divComp.css("width", cond.width);
} else {
divComp.css("width", "100px");
}
}

if ('height' in cond) {
if ("height" in cond) {
if (bool) {
divComp.css("height", cond.height);
} else {
Expand All @@ -70,7 +73,6 @@ scada.scheme.updateStyles = function (divComp, cond, bool) {
}
};


scada.scheme.applyRotation = function (divComp, props) {
if (props.rotation && props.rotation > 0) {
divComp.css({
Expand All @@ -95,6 +97,54 @@ scada.scheme.updateColors = function (divComp, cnlDataExt, isHovered, props) {
setBackColor(divComp, backColor, true, statusColor);
setBorderColor(divComp, borderColor, true, statusColor);
};
function mergeAndModifyConditions(conditions) {
let result = [];
const criteriaFields = [
"compareOperator1",
"compareArgument1",
"logicalOperator",
"compareOperator2",
"compareArgument2",
];

let groups = conditions.reduce((acc, condition) => {
const criteriaKey = criteriaFields
.map((field) => condition[field])
.join("_");
if (!acc[criteriaKey]) acc[criteriaKey] = [];
acc[criteriaKey].push(condition);
return acc;
}, {});

// Fusion of each group
Object.values(groups).forEach((group) => {
let mergedCondition = group.reduce(
(acc, condition) => {
Object.keys(condition).forEach((key) => {
if (!criteriaFields.includes(key)) {
if (
typeof condition[key] === "string" &&
condition[key] &&
!acc[key]
)
acc[key] = condition[key];
if (
typeof condition[key] === "number" &&
condition[key] > (acc[key] || 0)
)
acc[key] = condition[key];
}
});
return acc;
},
{ ...group[0] },
);

result.push(mergedCondition);
});

return result;
}

scada.scheme.updateComponentData = function (component, renderContext) {
var props = component.props;
Expand All @@ -106,15 +156,21 @@ scada.scheme.updateComponentData = function (component, renderContext) {

if (props.conditions && cnlDataExt.d.stat > 0) {
var cnlVal = cnlDataExt.d.val;
var mergedAndModifiedConditions = mergeAndModifyConditions(
props.conditions,
);
let count = 0;

for (var cond of props.conditions) {
for (var cond of mergedAndModifiedConditions) {
if (scada.scheme.calc.conditionSatisfied(cond, cnlVal)) {
scada.scheme.updateStyles(divComp, cond, true);
scada.scheme.handleBlinking(divComp, cond.blinking, true);
break;
count = count + 1;
} else {
scada.scheme.updateStyles(divComp, props, false);
scada.scheme.handleBlinking(divComp, cond.blinking, false);
if (count < 0) {
scada.scheme.updateStyles(divComp, props, false);
scada.scheme.handleBlinking(divComp, cond.blinking, false);
}
}
}
}
Expand All @@ -138,6 +194,8 @@ scada.scheme.CustomSVGRenderer.prototype.createDom = function (

var divComp = $("<div id='comp" + component.id + "'></div>");
this.prepareComponent(divComp, component, false, true);
this.setBackColor(divComp, props.backColor);

scada.scheme.applyRotation(divComp, props);

if (
Expand Down

0 comments on commit cc3379e

Please sign in to comment.