瀏覽代碼

Wrote function to wrap the code written in DataLookupEditor, that formats a lookup.

Kenric Nugteren 8 月之前
父節點
當前提交
00061effbc
共有 2 個文件被更改,包括 20 次插入9 次删除
  1. 1 7
      InABox.Core/Editors/Utils/DataLookupEditor.cs
  2. 19 2
      InABox.Core/ILookupDefinition.cs

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

@@ -48,16 +48,10 @@ 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 display = "";
-                if (generator != null)
-                    display = generator.FormatDisplay(row);
-                else
-                    display = LookupFactory.FormatLookup(Type, row.ToDictionary(new[] { "Display" }), Array.Empty<string>());
-                row["Display"] = display;
+                row["Display"] = LookupFactory.FormatLookup(Type, row, columnname);
             }
 
             return result;

+ 19 - 2
InABox.Core/ILookupDefinition.cs

@@ -83,7 +83,7 @@ namespace InABox.Core
     {
         public virtual Columns<TLookup> DefineColumns() => Columns.None<TLookup>();
 
-        public virtual string? FormatDisplay(CoreRow row) =>
+        public virtual string FormatDisplay(CoreRow row) =>
             LookupFactory.FormatLookup<TLookup>(row.ToDictionary(), new string[] { "Display" });
 
         public virtual Filter<TLookup>? DefineFilter(TEntity[] items) => null;
@@ -109,7 +109,7 @@ namespace InABox.Core
 
         IColumns ILookupDefinitionGenerator.DefineColumns() => DefineColumns();
 
-        String ILookupDefinitionGenerator.FormatDisplay(CoreRow row) => FormatDisplay(row);
+        string ILookupDefinitionGenerator.FormatDisplay(CoreRow row) => FormatDisplay(row);
 
         IFilter? ILookupDefinitionGenerator.DefineFilter(BaseObject[] items) => DefineFilter(items as TEntity[]);
 
@@ -438,6 +438,19 @@ namespace InABox.Core
             return DefaultFormatLookup(values, exclude);
         }
 
+        public static string FormatLookup(Type TEntity, CoreRow row, string column)
+        {
+            var generator = GetLookupGenerator(TEntity, column);
+            if(generator != null)
+            {
+                return generator.FormatDisplay(row);
+            }
+            else
+            {
+                return FormatLookup(TEntity, row.ToDictionary(new[] { "Display" }), Array.Empty<string>());
+            }
+        }
+
         public static ISortOrder? DefineSort(Type T)
         {
             return GetDefinition(T)?.DefineSortOrder();
@@ -489,6 +502,10 @@ namespace InABox.Core
 
         public static string FormatLookup<T>(Dictionary<string, object?> values, IEnumerable<string> exclude) => FormatLookup(typeof(T), values, exclude);
 
+        public static string FormatLookup<TEntity, TLookup, TLookupLink>(CoreRow row, Expression<Func<TEntity, TLookupLink>> column)
+            where TLookupLink : IEntityLink<TLookup>
+            => FormatLookup(typeof(TEntity), row, CoreUtils.GetFullPropertyName(column, "."));
+
         public static void OnCreateItem<TEntity, TLookup, TLookupLink>(Expression<Func<TEntity, TLookupLink>> column, TEntity[] items, TLookup item)
             where TLookupLink : IEntityLink<TLookup>
             where TEntity : BaseObject