- {value}
+ {
+ isMultiSelect &&
+ value.map((key, index) => {
+ const v = valuesMap[key];
+ return (
+
+ );
+ })
+ }
+
+ {
+ !isMultiSelect && value
+ }
{
@@ -31,12 +51,15 @@ function HintedSelectInputSelectedValue(props) {
}
HintedSelectInputSelectedValue.propTypes = {
- value: PropTypes.string,
+ value: PropTypes.oneOfType([PropTypes.string, PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.number]))]).isRequired,
+ values: PropTypes.arrayOf(PropTypes.object).isRequired,
hint: PropTypes.string,
+ isMultiSelect: PropTypes.bool.isRequired,
includeHint: PropTypes.bool.isRequired
};
HintedSelectInputSelectedValue.defaultProps = {
+ isMultiSelect: false,
includeHint: true
};
diff --git a/frontend/src/Components/Form/ProviderFieldFormGroup.js b/frontend/src/Components/Form/ProviderFieldFormGroup.js
index e1263a096..bfbe1e763 100644
--- a/frontend/src/Components/Form/ProviderFieldFormGroup.js
+++ b/frontend/src/Components/Form/ProviderFieldFormGroup.js
@@ -6,7 +6,7 @@ import FormInputGroup from 'Components/Form/FormInputGroup';
import FormLabel from 'Components/Form/FormLabel';
import { inputTypes } from 'Helpers/Props';
-function getType(type) {
+function getType(type, value) {
switch (type) {
case 'captcha':
return inputTypes.CAPTCHA;
@@ -45,7 +45,8 @@ function getSelectValues(selectOptions) {
return _.reduce(selectOptions, (result, option) => {
result.push({
key: option.value,
- value: option.name
+ value: option.name,
+ hint: option.hint
});
return result;
@@ -87,7 +88,7 @@ function ProviderFieldFormGroup(props) {
{label}
();
RequiredFlags = new List();
}
@@ -45,7 +51,7 @@ namespace NzbDrone.Core.Indexers.FileList
[FieldDefinition(3, Label = "API URL", Advanced = true, HelpText = "Do not change this unless you know what you're doing. Since your API key will be sent to that host.")]
public string BaseUrl { get; set; }
- [FieldDefinition(4, Label = "Categories", Type = FieldType.TagSelect, SelectOptions = typeof(FileListCategories), Advanced = true, HelpText = "Categories for use in search and feeds. If unspecified, all options are used.")]
+ [FieldDefinition(4, Label = "Categories", Type = FieldType.Select, SelectOptions = typeof(FileListCategories), Advanced = true, HelpText = "Categories for use in search and feeds. If unspecified, all options are used.")]
public IEnumerable Categories { get; set; }
[FieldDefinition(5, Type = FieldType.Number, Label = "Minimum Seeders", HelpText = "Minimum number of seeders required.", Advanced = true)]
@@ -65,15 +71,25 @@ namespace NzbDrone.Core.Indexers.FileList
public enum FileListCategories
{
+ [FieldOption]
Movie_SD = 1,
+ [FieldOption]
Movie_DVD = 2,
+ [FieldOption]
Movie_DVDRO = 3,
+ [FieldOption]
Movie_HD = 4,
+ [FieldOption]
Movie_HDRO = 19,
+ [FieldOption]
Movie_BluRay = 20,
+ [FieldOption]
Movie_BluRay4K = 26,
+ [FieldOption]
Movie_3D = 25,
+ [FieldOption]
Movie_4K = 6,
+ [FieldOption]
Xxx = 7
}
}
diff --git a/src/Radarr.Http/ClientSchema/SchemaBuilder.cs b/src/Radarr.Http/ClientSchema/SchemaBuilder.cs
index 6805d12b9..5710adc09 100644
--- a/src/Radarr.Http/ClientSchema/SchemaBuilder.cs
+++ b/src/Radarr.Http/ClientSchema/SchemaBuilder.cs
@@ -146,10 +146,34 @@ namespace Radarr.Http.ClientSchema
{
if (selectOptions.IsEnum)
{
- var options = from Enum e in Enum.GetValues(selectOptions)
- select new SelectOption { Value = Convert.ToInt32(e), Name = e.ToString() };
+ var options = selectOptions.GetFields().Where(v => v.IsStatic).Select(v =>
+ {
+ var name = v.Name.Replace('_', ' ');
+ var value = Convert.ToInt32(v.GetRawConstantValue());
+ var attrib = v.GetCustomAttribute();
+ if (attrib != null)
+ {
+ return new SelectOption
+ {
+ Value = value,
+ Name = attrib.Label ?? name,
+ Order = attrib.Order,
+ Hint = attrib.Hint ?? $"({value})"
+ };
+ }
+ else
+ {
+ return new SelectOption
+ {
+ Value = value,
+ Name = name,
+ Order = value,
+ Hint = $"({value})"
+ };
+ }
+ });
- return options.OrderBy(o => o.Value).ToList();
+ return options.OrderBy(o => o.Order).ToList();
}
if (typeof(ISelectOptionsConverter).IsAssignableFrom(selectOptions))