feat(triggers): add Expression to the script & alarm trigger codecs
This commit is contained in:
@@ -10,7 +10,7 @@ namespace ScadaLink.CentralUI.Components.Shared;
|
||||
/// trigger; <see cref="Unknown"/> is a stored trigger-type string the runtime
|
||||
/// does not recognize (preserved as-is by the editor).
|
||||
/// </summary>
|
||||
internal enum ScriptTriggerKind { None, Interval, ValueChange, Conditional, Call, Unknown }
|
||||
internal enum ScriptTriggerKind { None, Interval, ValueChange, Conditional, Call, Expression, Unknown }
|
||||
|
||||
/// <summary>A script's trigger as the editor emits it: a type string + config JSON.</summary>
|
||||
public sealed record ScriptTriggerValue(string? TriggerType, string? Config);
|
||||
@@ -29,6 +29,9 @@ internal sealed class ScriptTriggerModel
|
||||
|
||||
/// <summary>Comparison threshold (Conditional).</summary>
|
||||
public double? Threshold { get; set; }
|
||||
|
||||
/// <summary>Boolean C# expression (Expression).</summary>
|
||||
public string? Expression { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -59,6 +62,7 @@ internal static class ScriptTriggerConfigCodec
|
||||
"valuechange" => ScriptTriggerKind.ValueChange,
|
||||
"conditional" => ScriptTriggerKind.Conditional,
|
||||
"call" => ScriptTriggerKind.Call,
|
||||
"expression" => ScriptTriggerKind.Expression,
|
||||
_ => ScriptTriggerKind.Unknown
|
||||
};
|
||||
}
|
||||
@@ -70,6 +74,7 @@ internal static class ScriptTriggerConfigCodec
|
||||
ScriptTriggerKind.ValueChange => "ValueChange",
|
||||
ScriptTriggerKind.Conditional => "Conditional",
|
||||
ScriptTriggerKind.Call => "Call",
|
||||
ScriptTriggerKind.Expression => "Expression",
|
||||
_ => null
|
||||
};
|
||||
|
||||
@@ -104,6 +109,10 @@ internal static class ScriptTriggerConfigCodec
|
||||
model.Operator = NormalizeOperator(op);
|
||||
model.Threshold = TryReadDouble(root, "threshold") ?? TryReadDouble(root, "value");
|
||||
break;
|
||||
|
||||
case ScriptTriggerKind.Expression:
|
||||
model.Expression = root.TryGetProperty("expression", out var e) ? e.GetString() : null;
|
||||
break;
|
||||
}
|
||||
}
|
||||
catch (JsonException)
|
||||
@@ -144,6 +153,10 @@ internal static class ScriptTriggerConfigCodec
|
||||
w.WriteNumber("threshold", model.Threshold.Value);
|
||||
break;
|
||||
|
||||
case ScriptTriggerKind.Expression:
|
||||
w.WriteString("expression", model.Expression ?? "");
|
||||
break;
|
||||
|
||||
// Call → empty object.
|
||||
}
|
||||
w.WriteEndObject();
|
||||
|
||||
Reference in New Issue
Block a user