Browse Source

Added virtual FormatDisplay() function to ILookupDefinitionGenerator

frogsoftware 2 hours ago
parent
commit
713c5c20c3
2 changed files with 22 additions and 6 deletions
  1. 7 2
      InABox.Core/Editors/Utils/DataLookupEditor.cs
  2. 15 4
      InABox.Core/ILookupDefinition.cs

+ 7 - 2
InABox.Core/Editors/Utils/DataLookupEditor.cs

@@ -48,11 +48,16 @@ namespace InABox.Core
             var sort = LookupFactory.DefineSort(Type);
             var result = client.Query(filter, columns, sort);
 
+            var generator = LookupFactory.GetLookupGenerator(parent, columnname);
             result.Columns.Add(new CoreColumn { ColumnName = "Display", DataType = typeof(string) });
             foreach (var row in result.Rows)
             {
-                var values = row.ToDictionary(new[] { "Display" });
-                row["Display"] = LookupFactory.FormatLookup(Type, values, Array.Empty<string>());
+                var display = "";
+                if (generator != null)
+                    display = generator.FormatDisplay(row);
+                else
+                    display = LookupFactory.FormatLookup(Type, row.ToDictionary(new[] { "Display" }), Array.Empty<string>());
+                row["Display"] = display;
             }
 
             return result;

+ 15 - 4
InABox.Core/ILookupDefinition.cs

@@ -70,6 +70,7 @@ namespace InABox.Core
     public interface ILookupDefinitionGenerator
     {
         public IColumns DefineColumns();
+        string FormatDisplay(CoreRow row);
         public IFilter? DefineFilter(BaseObject[] items);
         public IColumns DefineFilterColumns();
         public ISortOrder? DefineSortOrder();
@@ -82,6 +83,9 @@ namespace InABox.Core
     {
         public virtual Columns<TLookup> DefineColumns() => Columns.None<TLookup>();
 
+        public virtual string? FormatDisplay(CoreRow row) =>
+            LookupFactory.FormatLookup<TLookup>(row.ToDictionary(), new string[] { "Display" });
+
         public virtual Filter<TLookup>? DefineFilter(TEntity[] items) => null;
 
         /// <summary>
@@ -105,6 +109,8 @@ namespace InABox.Core
 
         IColumns ILookupDefinitionGenerator.DefineColumns() => DefineColumns();
 
+        String ILookupDefinitionGenerator.FormatDisplay(CoreRow row) => FormatDisplay(row);
+
         IFilter? ILookupDefinitionGenerator.DefineFilter(BaseObject[] items) => DefineFilter(items as TEntity[]);
 
         IColumns ILookupDefinitionGenerator.DefineFilterColumns() => DefineFilterColumns();
@@ -170,7 +176,8 @@ namespace InABox.Core
                 ? Activator.CreateInstance(generator) as ILookupDefinitionGenerator
                 : null;
         }
-        private static ILookupDefinitionGenerator? GetLookupGenerator(Type T, string column)
+        
+        public static ILookupDefinitionGenerator? GetLookupGenerator(Type T, string column)
         {
             return GetLookupGenerator(GetLinkProperty(T, column));
         }
@@ -311,16 +318,20 @@ namespace InABox.Core
         public static IColumns DefineLookupColumns(Type TEntity, Type TLookup, string column)
         {
             var columns = Columns.None(TLookup);
-
+            
+            
             var property = GetLinkProperty(TEntity, column);
             if(property != null)
             {
+                
                 var prefix = property.Name + ".";
+                
+                columns.Add(column.Substring(prefix.Length));
 
                 // Add all required columns of the entity link.
-                foreach(var prop in DatabaseSchema.Properties(TEntity).Where(x => x.Required && x.Name.StartsWith(prefix)))
+                foreach(var prop in DatabaseSchema.Properties(property.PropertyType).Where(x => x.Required))
                 {
-                    columns.Add(prop.Name[prefix.Length..]);
+                    columns.Add(prop.Name);
                 }
 
                 // Add all columns which are associated with linked properties.