1
- namespace RJP . MultiUrlPicker
1
+ namespace RJP . MultiUrlPicker
2
2
{
3
3
using System ;
4
4
using System . Linq ;
16
16
17
17
public class MultiUrlPickerValueConverter : PropertyValueConverterBase , IPropertyValueConverterMeta
18
18
{
19
- private static int _maxNumberOfItems ;
19
+ private readonly IDataTypeService _dataTypeService ;
20
+
21
+ public MultiUrlPickerValueConverter ( IDataTypeService dataTypeService )
22
+ {
23
+ _dataTypeService = dataTypeService ;
24
+ }
25
+
26
+ public MultiUrlPickerValueConverter ( ) : this ( ApplicationContext . Current . Services . DataTypeService )
27
+ {
28
+ }
20
29
21
30
public override bool IsConverter ( PublishedPropertyType propertyType )
22
31
{
@@ -34,7 +43,7 @@ public override object ConvertDataToSource(PublishedPropertyType propertyType, o
34
43
35
44
public override object ConvertSourceToObject ( PublishedPropertyType propertyType , object source , bool preview )
36
45
{
37
- bool isMultiple = IsMultipleDataType ( propertyType . DataTypeId ) ;
46
+ bool isMultiple = IsMultipleDataType ( propertyType . DataTypeId , out int maxNumberOfItems ) ;
38
47
if ( source == null )
39
48
{
40
49
return isMultiple ? new MultiUrls ( ) : null ;
@@ -43,9 +52,9 @@ public override object ConvertSourceToObject(PublishedPropertyType propertyType,
43
52
var urls = new MultiUrls ( ( JArray ) source ) ;
44
53
if ( isMultiple )
45
54
{
46
- if ( _maxNumberOfItems > 0 )
55
+ if ( maxNumberOfItems > 0 )
47
56
{
48
- return urls . Take ( _maxNumberOfItems ) ;
57
+ return urls . Take ( maxNumberOfItems ) ;
49
58
}
50
59
return urls ;
51
60
}
@@ -54,7 +63,7 @@ public override object ConvertSourceToObject(PublishedPropertyType propertyType,
54
63
55
64
public Type GetPropertyValueType ( PublishedPropertyType propertyType )
56
65
{
57
- if ( IsMultipleDataType ( propertyType . DataTypeId ) )
66
+ if ( IsMultipleDataType ( propertyType . DataTypeId , out int maxNumberOfItems ) )
58
67
{
59
68
return typeof ( IEnumerable < Link > ) ;
60
69
}
@@ -75,16 +84,14 @@ public PropertyCacheLevel GetPropertyCacheLevel(PublishedPropertyType propertyTy
75
84
return PropertyCacheLevel . None ;
76
85
}
77
86
78
- private static bool IsMultipleDataType ( int dataTypeId )
87
+ private bool IsMultipleDataType ( int dataTypeId , out int maxNumberOfItems )
79
88
{
80
- IDataTypeService dataTypeService = ApplicationContext . Current . Services . DataTypeService ;
81
- IDictionary < string , PreValue > preValues = dataTypeService
89
+ IDictionary < string , PreValue > preValues = _dataTypeService
82
90
. GetPreValuesCollectionByDataTypeId ( dataTypeId )
83
91
. PreValuesAsDictionary ;
84
92
85
- PreValue maxNumberOfItems ;
86
- if ( preValues . TryGetValue ( "maxNumberOfItems" , out maxNumberOfItems ) &&
87
- int . TryParse ( maxNumberOfItems . Value , out _maxNumberOfItems ) )
93
+ if ( preValues . TryGetValue ( "maxNumberOfItems" , out PreValue maxNumberOfItemsPreValue ) &&
94
+ int . TryParse ( maxNumberOfItemsPreValue . Value , out maxNumberOfItems ) )
88
95
{
89
96
PreValue versionPreValue ;
90
97
Version version ;
@@ -94,9 +101,11 @@ private static bool IsMultipleDataType(int dataTypeId)
94
101
Version . TryParse ( versionPreValue . Value , out version )
95
102
&& version >= new Version ( 2 , 0 , 0 ) )
96
103
{
97
- return _maxNumberOfItems != 1 ;
104
+ return maxNumberOfItems != 1 ;
98
105
}
99
106
}
107
+
108
+ maxNumberOfItems = 0 ;
100
109
return true ;
101
110
}
102
111
}
0 commit comments