Skip to content

Commit 69ebc4d

Browse files
committed
Add DropdownValueResolver
1 parent af9d9f5 commit 69ebc4d

File tree

3 files changed

+71
-38
lines changed

3 files changed

+71
-38
lines changed
Lines changed: 6 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
using System.Collections.Generic;
2-
using System.Linq;
3-
using TriInspector;
1+
using TriInspector;
42
using TriInspector.Drawers;
53
using TriInspector.Elements;
64
using TriInspector.Resolvers;
@@ -11,53 +9,23 @@ namespace TriInspector.Drawers
119
{
1210
public class DropdownDrawer<T> : TriAttributeDrawer<DropdownAttribute>
1311
{
14-
private ValueResolver<IEnumerable<TriDropdownItem<T>>> _itemsResolver;
15-
private ValueResolver<IEnumerable<T>> _valuesResolver;
12+
private DropdownValuesResolver<T> _valuesResolver;
1613

1714
public override TriExtensionInitializationResult Initialize(TriPropertyDefinition propertyDefinition)
1815
{
19-
_valuesResolver = ValueResolver.Resolve<IEnumerable<T>>(propertyDefinition, Attribute.Values);
16+
_valuesResolver = DropdownValuesResolver<T>.Resolve(propertyDefinition, Attribute.Values);
2017

21-
if (_valuesResolver.TryGetErrorString(out _))
18+
if (_valuesResolver.TryGetErrorString(out var error))
2219
{
23-
_itemsResolver =
24-
ValueResolver.Resolve<IEnumerable<TriDropdownItem<T>>>(propertyDefinition, Attribute.Values);
25-
26-
if (_itemsResolver.TryGetErrorString(out var itemResolverError))
27-
{
28-
return itemResolverError;
29-
}
20+
return error;
3021
}
3122

3223
return TriExtensionInitializationResult.Ok;
3324
}
3425

3526
public override TriElement CreateElement(TriProperty property, TriElement next)
3627
{
37-
return new TriDropdownElement(property, GetDropdownItems);
38-
}
39-
40-
private IEnumerable<ITriDropdownItem> GetDropdownItems(TriProperty property)
41-
{
42-
if (_valuesResolver != null)
43-
{
44-
var values = _valuesResolver.GetValue(property, Enumerable.Empty<T>());
45-
46-
foreach (var value in values)
47-
{
48-
yield return new TriDropdownItem {Text = $"{value}", Value = value,};
49-
}
50-
}
51-
52-
if (_itemsResolver != null)
53-
{
54-
var values = _itemsResolver.GetValue(property, Enumerable.Empty<TriDropdownItem<T>>());
55-
56-
foreach (var value in values)
57-
{
58-
yield return value;
59-
}
60-
}
28+
return new TriDropdownElement(property, _valuesResolver.GetDropdownItems);
6129
}
6230
}
6331
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
using System.Collections.Generic;
2+
using System.Linq;
3+
using JetBrains.Annotations;
4+
5+
namespace TriInspector.Resolvers
6+
{
7+
public class DropdownValuesResolver<T>
8+
{
9+
[CanBeNull] private ValueResolver<IEnumerable<TriDropdownItem<T>>> _itemsResolver;
10+
[CanBeNull] private ValueResolver<IEnumerable<T>> _valuesResolver;
11+
12+
[PublicAPI]
13+
public static DropdownValuesResolver<T> Resolve(TriPropertyDefinition propertyDefinition, string expression)
14+
{
15+
var valuesResolver = ValueResolver.Resolve<IEnumerable<T>>(propertyDefinition, expression);
16+
if (!valuesResolver.TryGetErrorString(out _))
17+
{
18+
return new DropdownValuesResolver<T>
19+
{
20+
_valuesResolver = valuesResolver,
21+
};
22+
}
23+
24+
var itemsResolver = ValueResolver.Resolve<IEnumerable<TriDropdownItem<T>>>(propertyDefinition, expression);
25+
26+
return new DropdownValuesResolver<T>
27+
{
28+
_itemsResolver = itemsResolver,
29+
};
30+
}
31+
32+
[PublicAPI]
33+
public bool TryGetErrorString(out string error)
34+
{
35+
return ValueResolver.TryGetErrorString(_valuesResolver, _itemsResolver, out error);
36+
}
37+
38+
[PublicAPI]
39+
public IEnumerable<ITriDropdownItem> GetDropdownItems(TriProperty property)
40+
{
41+
if (_valuesResolver != null)
42+
{
43+
var values = _valuesResolver.GetValue(property, Enumerable.Empty<T>());
44+
45+
foreach (var value in values)
46+
{
47+
yield return new TriDropdownItem {Text = $"{value}", Value = value,};
48+
}
49+
}
50+
51+
if (_itemsResolver != null)
52+
{
53+
var values = _itemsResolver.GetValue(property, Enumerable.Empty<TriDropdownItem<T>>());
54+
55+
foreach (var value in values)
56+
{
57+
yield return value;
58+
}
59+
}
60+
}
61+
}
62+
}

Editor/Resolvers/DropdownValuesResolver.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.

0 commit comments

Comments
 (0)