Condition Tree
Condition trees are a way to define custom conditions for various Skate Results features. With condition trees, you can access variables of a given context and define conditions based on them.
Syntax
Condition trees are written in JSON format. If you are not familiar with JSON, please check out the official JSON documentation.
A condition tree is an object with a single key-value pair. The key is the operator, and the value is an array of arguments. The arguments can be either values or other condition trees. A value can either be a string, number, boolean, null, or a reference to a variable in the context. To reference a variable, use the ref key with the variable name as the value.
{ "ref": "athlete.name" }
The following table lists all available operators and their syntax.
| Syntax | arg1 | arg2 | Explanation |
|---|---|---|---|
true | Resolves to true. | ||
false | Resolves to false. | ||
{ "or": arg1 } | Array: cond. trees | Resolves to true, if any item of arg1 is true. | |
{ "and": arg1 } | Array: cond. trees | Resolves to true, if all items of arg1 are true. | |
{ "not": arg1 } | Condition tree | Resolves to the opposite of arg1. | |
{ ">": [arg1, arg2] } | String, Number or ref. | String, Number or ref. | Resolves to true, if arg1 is greater than arg2.Resolves to false, if an argument is not a number or string. |
{ ">=": [arg1, arg2] } | String, Number or ref. | String, Number or ref. | Resolves to true, if arg1 is greater or equal to arg2.Resolves to false, if an argument is not a number. |
{ "<": [arg1, arg2] } | String, Number or ref. | String, Number or ref. | Resolves to true, if arg1 is less than arg2.Resolve to false, if an argument is not a number. |
{ "<=": [arg1, arg2] } | String, Number or ref. | String, Number or ref. | Resolves to true, if arg1 is less or equal to arg2.Resolves to false, if types are not numbers. |
{ "==": [arg1, arg2] } | Value or ref. | Value or ref. | Resolves to true, if arg1 equals arg2.Resolves to false, if types of arguments are different. |
{ "!=": [arg1, arg2] } | Value or ref. | Value or ref. | Resolves to false, if arg1 does not equal arg2.Resolves to true, if types of arguments are different. |
{ "in": [arg1, arg2] } | Value or ref. | Array: Value or ref | Resolves to true, if arg1 is in arg2.Resolves to false, if types of arguments are different. |
{ "not-in": [arg1, arg2] } | Value or ref. | Array: Value or ref | Resolves to true, if arg1 is not in arg2.Resolves to false, if types of arguments are different. |
Example
The following condition tree resolves to true, if the athlete's name is "Andi" and the athlete's gender is not "female".
{
"and": [
{ "==": [{ "ref": "athlete.name" }, "Andi"] },
{ "!=": [{ "ref": "athlete.gender" }, "female"] }
]
}
Features
Condition trees are currently used in the following features:
- Forms (work in progress): Conditional fields, emails, and validations
- Livestream inserts: Conditionally show/hide sources