using System.Collections.Generic; using System.Linq; using System.Text; using AyaNova.Biz; using Newtonsoft.Json.Linq; namespace AyaNova.DataList { /// /// DataList object base class /// internal abstract class AyaDataList : IAyaDataList { public AyaDataList() { } public string SQLFrom { get; set; } public List FieldDefinitions { get; set; }//NOTE: First field after df is used as the title above the narrow grid view so it should be the name of the item to be shown that is most identifiable public AuthorizationRoles AllowedRoles { get; set; } public AyaType DefaultListObjectType { get; set; } public string DefaultListView { get; set; } //return array of field keys in list view public List GetFieldListFromListView(JArray listViewArray) { // [{key:"COLUMN UNIQUE KEY ID",sort:"-" or "+",filter:{any:true/false,items:[{FILTER OBJECT SEE BELOW}]} }, {key:"second column unique key"},{...etc...}] List ret = new List(); for (int i = 0; i < listViewArray.Count; i++) { var cm = listViewArray[i]; //Get some info about this column / field ret.Append(cm["fld"].Value()); } return ret; } public Newtonsoft.Json.Linq.JArray GenerateListColumnsJSONFromListView(JArray listViewArray) { throw new System.NotImplementedException("AyaDataList:GenerateListColumnsJSONFromListView not coded yet "); // //parse the template // var jtemplate = JObject.Parse(listView); // //convert to strings (https://stackoverflow.com/a/33836599/8939) // var fullFields = ((JArray)jtemplate["full"]).ToObject(); // //Generate JSON fragment to return with column definitions // StringBuilder sb = new StringBuilder(); // sb.Append("["); // //df First column is always the df column // sb.Append($"{{\"cm\":\"df\",\"dt\":0,\"ay\":{(int)DefaultListObjectType}}}"); // foreach (string s in fullFields) // { // AyaDataListFieldDefinition o = FieldDefinitions.FirstOrDefault(x => x.FieldKey == s); // #if (DEBUG) // //Developers little helper // if (o == null) // { // throw new System.ArgumentNullException($"DEV ERROR in AyaDataList::GenerateListColumnsJSONFromTemplate - field {s} specified in template was NOT found in ObjectFields list"); // } // #endif // if (o != null) // {//Here is where we can vet the field name, if it doesn't exist. For production we'll just ignore those ones // sb.Append(","); // sb.Append("{"); // //Build required part of column definition // sb.Append($"\"cm\":\"{o.LtKey}\",\"dt\":{(int)o.UiFieldDataType}"); // //Has a AyObjectType? (linkable / openable) // if (o.AyaObjectType != 0) // sb.Append($",\"ay\":{(int)o.AyaObjectType}"); // //Has a Enumtype? // if (!string.IsNullOrEmpty(o.EnumType)) // sb.Append($",\"et\":\"{AyaNova.Util.StringUtil.TrimTypeName(o.EnumType)}\""); // sb.Append("}"); // } // } // sb.Append("]"); // return JArray.Parse(sb.ToString()); } // //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(); // var miniFields = ((JArray)jtemplate["mini"]).ToObject(); // 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; // } }//eoc }//eons