This commit is contained in:
2020-02-27 20:40:53 +00:00
parent 741158f05f
commit ed666419ab
2 changed files with 70 additions and 45 deletions

View File

@@ -48,6 +48,7 @@ namespace AyaNova.DataList
var ListViewFieldKeys = GetFieldListFromListView(listViewArray);
var CustomFieldDefinitions = GetCustomFieldDefinitionsForList();
//Generate JSON fragment to return with column definitions
StringBuilder sb = new StringBuilder();
@@ -106,50 +107,15 @@ namespace AyaNova.DataList
}
// //make sure the template parses and all the fields specified are really existant
// //this is more for dev errors or api users becuase the client shouldn't generate bad templates
// public bool ValidateTemplate(string template)
// {
// try
// {
// //parse the template
// var jtemplate = JObject.Parse(template);
// var fullFields = ((JArray)jtemplate["full"]).ToObject<string[]>();
// var miniFields = ((JArray)jtemplate["mini"]).ToObject<string[]>();
// foreach (string s in fullFields)
// {
// AyaDataListFieldDefinition o = FieldDefinitions.FirstOrDefault(x => x.FieldKey == s);
// if (o == null)
// {
// return false;
// }
// }
// foreach (string s in miniFields)
// {
// AyaDataListFieldDefinition o = FieldDefinitions.FirstOrDefault(x => x.FieldKey == s);
// if (o == null)
// {
// return false;
// }
// }
// }
// catch
// {
// return false;
// }
// return true;
// }
//Find and return a dictionary of all custom fields definitions for all types in list
//used to build the column array and define specific type defined for custom fields so client datatable
//knows how to format it
private Dictionary<string, JArray> GetCustomFieldDefinitionsForList()
private Dictionary<string, UiFieldDataType> GetCustomFieldDefinitionsForList()
{
Dictionary<string, JArray> ret = new Dictionary<string, JArray>();
//all keys and types can go in the same list since they are unique to each type of list
//i.e. both users and widget custom fields can be in the same list
Dictionary<string, UiFieldDataType> ret = new Dictionary<string, UiFieldDataType>();
List<string> typesProcessed = new List<string>();
//custom fields handling
foreach (AyaDataListFieldDefinition d in this.FieldDefinitions)
{
@@ -158,8 +124,10 @@ namespace AyaNova.DataList
//this relies on the convention I'm using of AyaType name as the first part of all custom fields lT keys, e.g.
//WidgetCustom1 -> Widget
var ayatypename = d.LtKey.Split("Custom")[0];
if (!ret.ContainsKey(ayatypename))
if (!typesProcessed.Contains(ayatypename))
{
//make sure we do each type only once
typesProcessed.Add(ayatypename);
//fetch it and set it
using (var ct = AyaNova.Util.ServiceProviderProvider.DBContext)
{
@@ -170,18 +138,75 @@ namespace AyaNova.DataList
throw new System.ArgumentNullException($"AyaDataList:GetCustomFieldDefinitionsForList, Custom field object type {ayatypename} has no FormCustom defined");
}
#endif
if (fc != null)
ret.Add(ayatypename, JArray.Parse(fc.Template));
//production handling of missing formcustom
if (fc == null)
continue;
//iterate the fields and add each custom one with a type to the return dictionary
var flds = JArray.Parse(fc.Template);
foreach(JToken t in flds){
if(t["type"]!=null){
ret.Add(t["fld"].Value<string>(),t["type"].Value<UiFieldDataType>());
}
}
}
}
}
}
/*{[
{
"fld": "Notes",
"required": true
},
{
"fld": "WidgetCustom1",
"required": false,
"type": 1
},
{
"fld": "WidgetCustom2",
"required": true,
"type": 4
},
{
"fld": "WidgetCustom3",
"required": false,
"type": 5
},
{
"fld": "WidgetCustom4",
"required": false,
"type": 6
},
{
"fld": "WidgetCustom5",
"required": false,
"type": 8
},
{
"fld": "WidgetCustom6",
"required": false,
"type": 2
},
{
"fld": "WidgetCustom7",
"required": false,
"type": 3
}
]}*/
return ret;
}
private class NameType
{
string name { get; set; }
UiFieldDataType datatype { get; set; }
}
}//eoc
}//eons