Skip to content

Commit 6881e0f

Browse files
committed
Add Dropdown values validation
1 parent 69ebc4d commit 6881e0f

File tree

4 files changed

+62
-0
lines changed

4 files changed

+62
-0
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
using TriInspector;
2+
using TriInspector.Resolvers;
3+
using TriInspector.Validators;
4+
5+
[assembly: RegisterTriAttributeValidator(typeof(DropdownValidator<>))]
6+
7+
namespace TriInspector.Validators
8+
{
9+
public class DropdownValidator<T> : TriAttributeValidator<DropdownAttribute>
10+
{
11+
private DropdownValuesResolver<T> _valuesResolver;
12+
13+
public override TriExtensionInitializationResult Initialize(TriPropertyDefinition propertyDefinition)
14+
{
15+
_valuesResolver = DropdownValuesResolver<T>.Resolve(propertyDefinition, Attribute.Values);
16+
17+
if (_valuesResolver.TryGetErrorString(out var error))
18+
{
19+
return error;
20+
}
21+
22+
return TriExtensionInitializationResult.Ok;
23+
}
24+
25+
public override TriValidationResult Validate(TriProperty property)
26+
{
27+
foreach (var item in _valuesResolver.GetDropdownItems(property))
28+
{
29+
if (property.Comparer.Equals(item.Value, property.Value))
30+
{
31+
return TriValidationResult.Valid;
32+
}
33+
}
34+
35+
var msg = $"Dropdown value '{property.Value}' not valid";
36+
37+
switch (Attribute.ValidationMessageType)
38+
{
39+
case TriMessageType.Info:
40+
return TriValidationResult.Info(msg);
41+
42+
case TriMessageType.Warning:
43+
return TriValidationResult.Warning(msg);
44+
45+
case TriMessageType.Error:
46+
return TriValidationResult.Error(msg);
47+
}
48+
49+
return TriValidationResult.Valid;
50+
}
51+
}
52+
}

Editor.Extras/Validators/DropdownValidator.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Runtime/Attributes/DropdownAttribute.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ public class DropdownAttribute : Attribute
99
{
1010
public string Values { get; }
1111

12+
public TriMessageType ValidationMessageType { get; set; } = TriMessageType.Error;
13+
1214
public DropdownAttribute(string values)
1315
{
1416
Values = values;

Runtime/TriValidationResult.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@ public TriValidationResult(bool valid, string message, TriMessageType messageTyp
1515
public string Message { get; }
1616
public TriMessageType MessageType { get; }
1717

18+
public static TriValidationResult Info(string error)
19+
{
20+
return new TriValidationResult(false, error, TriMessageType.Info);
21+
}
22+
1823
public static TriValidationResult Error(string error)
1924
{
2025
return new TriValidationResult(false, error, TriMessageType.Error);

0 commit comments

Comments
 (0)