Browse Source

Made the base generic IProblems<T> interface implement the parent Problem property to avoid redundancy in child classes. Removed some commented code.

Kenric Nugteren 8 months ago
parent
commit
2a5d3d520e

+ 2 - 0
InABox.Core/Entity.cs

@@ -66,6 +66,8 @@ namespace InABox.Core
     public interface IProblems<T>: IProblems where T : Problem
     {
         new T Problem { get; set; }
+
+        IProblem IProblems.Problem => Problem;
     }
     
     public interface IIssues

+ 5 - 67
inabox.wpf/DynamicGrid/DynamicDataGrid.cs

@@ -65,22 +65,6 @@ public class DynamicDataGrid<TEntity> : DynamicGrid<TEntity>, IDynamicDataGrid w
         // so that clients will (usually) provide sufficient columns for saving
         foreach (var col in LookupFactory.RequiredColumns<TEntity>())
             HiddenColumns.Add(CoreUtils.CreateLambdaExpression<TEntity>(col.Property));
-
-        //HiddenColumns.Add(x => x.ID);
-
-        // if (typeof(TEntity).GetInterfaces().Contains(typeof(IIssues)))
-        // {
-        //     HiddenColumns.Add(x => (x as IIssues)!.Issues);
-        //     HiddenColumns.Add(x=>(x as IIssues)!.IssuesResolved);
-        //     var coltype = typeof(DynamicIssuesColumn<>).MakeGenericType(typeof(TEntity));
-        //     var column = Activator.CreateInstance(coltype, this);
-        //     var dic = (column as IDynamicIssuesColumn)!;
-        //     dic.CustomiseEditor = (v) => DoCustomiseIssuesEditor(v.OfType<TEntity>().ToArray());
-        //     dic.IssuesUpdated = (v, c) => DoUpdateIssues(v.OfType<TEntity>().ToArray(), c);
-        //     var dac = (column as DynamicActionColumn)!;
-        //     ActionColumns.Add(dac);
-        // }
-        
         
         if (typeof(TEntity).GetInterfaces().Contains(typeof(IProblems)))
         {
@@ -88,9 +72,6 @@ public class DynamicDataGrid<TEntity> : DynamicGrid<TEntity>, IDynamicDataGrid w
             HiddenColumns.Add(x=>(x as IProblems)!.Problem.Resolved);
             var coltype = typeof(DynamicProblemsColumn<>).MakeGenericType(typeof(TEntity));
             var column = Activator.CreateInstance(coltype, this);
-            //var dic = (column as IDynamicIssuesColumn)!;
-            //dic.CustomiseEditor = (v) => DoCustomiseIssuesEditor(v.OfType<TEntity>().ToArray());
-            //dic.IssuesUpdated = (v, c) => DoUpdateIssues(v.OfType<TEntity>().ToArray(), c);
             var dac = (column as DynamicActionColumn)!;
             ActionColumns.Add(dac);
         }
@@ -98,10 +79,6 @@ public class DynamicDataGrid<TEntity> : DynamicGrid<TEntity>, IDynamicDataGrid w
         SetupFilterColumns();
     }
 
-    // protected virtual void DoUpdateIssues(TEntity[] toArray, FrameworkElement? frameworkElement) { }
-    //
-    // protected virtual FrameworkElement? DoCustomiseIssuesEditor(TEntity[] values) => null;
-
     protected override void Init()
     {
         FilterComponent = new(this,
@@ -321,15 +298,14 @@ public class DynamicDataGrid<TEntity> : DynamicGrid<TEntity>, IDynamicDataGrid w
 
                 if (newFilter is not null)
                 {
-                    //var id = row.Get<TEntity, Guid>(x => x.ID);
                     if (filter is null)
-                        filter = newFilter;//new Filter<TEntity>(x => x.ID).IsEqualTo(id);
+                        filter = newFilter;
                     else
-                        filter = filter.Or(newFilter);//.Or(x => x.ID).IsEqualTo(id);
+                        filter = filter.Or(newFilter);
                 }
             }
 
-            var columns = LoadEditorColumns(); // new Columns<TEntity>().Default(ColumnType.IncludeOptional, ColumnType.IncludeForeignKeys, ColumnType.IncludeUserProperties);
+            var columns = LoadEditorColumns();
             var data = Client.Query(filter, columns);
             results.AddRange(data.ToObjects<TEntity>());
         }
@@ -340,7 +316,7 @@ public class DynamicDataGrid<TEntity> : DynamicGrid<TEntity>, IDynamicDataGrid w
     public override TEntity LoadItem(CoreRow row)
     {
         var id = row.Get<TEntity, Guid>(x => x.ID);
-        var filter = GetRowFilter(row);//new Filter<TEntity>(x => x.ID).IsEqualTo(id);
+        var filter = GetRowFilter(row);
         return Client.Query(filter, LoadEditorColumns()).ToObjects<TEntity>().FirstOrDefault()
             ?? throw new Exception($"No {typeof(TEntity).Name} with ID {id}");
     }
@@ -366,7 +342,6 @@ public class DynamicDataGrid<TEntity> : DynamicGrid<TEntity>, IDynamicDataGrid w
                 CoreUtils.SetPropertyValue(delete, column.Property, row[column.Property]);
             }
 
-            //var delete = /* row.ToObject<TEntity>(); */ 
             deletes.Add(delete);
         }
 
@@ -394,18 +369,8 @@ public class DynamicDataGrid<TEntity> : DynamicGrid<TEntity>, IDynamicDataGrid w
             else if (prop is CustomProperty)
                 row.Set(column.ColumnName, obj.UserProperties[column.ColumnName]);
         }
-
-        //base.ObjectToRow(obj, row);
     }
 
-    //private void Auditgrid_OnReload(object sender, Dictionary<string, object> criteria, ref String sort)
-    //{
-    //	criteria["DocumentType"] = typeof(TEntity).EntityName();
-    //	criteria["DocumentID"] = (sender as FrameworkElement).Tag;
-
-    //	sort = "TimeStamp";
-    //}
-
     public override void LoadEditorButtons(TEntity item, DynamicEditorButtons buttons)
     {
         base.LoadEditorButtons(item, buttons);
@@ -413,9 +378,8 @@ public class DynamicDataGrid<TEntity> : DynamicGrid<TEntity>, IDynamicDataGrid w
             buttons.Add("Audit Trail", Wpf.Resources.view.AsBitmapImage(), item, AuditTrailClick);
     }
 
-    private void AuditTrailClick(object sender, object item)
+    private void AuditTrailClick(object sender, TEntity entity)
     {
-        var entity = (TEntity)item;
         var window = new AuditWindow(entity.ID);
         window.ShowDialog();
     }
@@ -520,7 +484,6 @@ public class DynamicDataGrid<TEntity> : DynamicGrid<TEntity>, IDynamicDataGrid w
             return result;
         });
         tasks.Add(itemtask);
-        //itemtask.Wait();
 
         Task<List<string?>>? codetask = null;
         if (!string.IsNullOrWhiteSpace(code))
@@ -536,7 +499,6 @@ public class DynamicDataGrid<TEntity> : DynamicGrid<TEntity>, IDynamicDataGrid w
             });
             tasks.Add(codetask);
         }
-        //codetask.Wait();
 
         var children = new Dictionary<Type, CoreTable>();
         foreach (var childtype in childtypes)
@@ -570,32 +532,8 @@ public class DynamicDataGrid<TEntity> : DynamicGrid<TEntity>, IDynamicDataGrid w
                 }
             });
             tasks.Add(childtask);
-            //childtask.Wait();
         }
 
-        //var manytomanys = CoreUtils.TypeList(
-        //    AppDomain.CurrentDomain.GetAssemblies(),
-        //    x => x.GetInterfaces().Any(intf => intf.IsGenericType && intf.GetGenericTypeDefinition() == typeof(IManyToMany<,>) && intf.GenericTypeArguments.Contains(typeof(T)))
-        //);
-
-        //Task<CoreTable> childtask = Task.Run(() =>
-        //{
-        //    var result = new CoreTable();
-        //    result.LoadColumns(typeof(TChild));
-        //    var children = new Client<TChild>().Load(new Filter<TChild>(x => linkfield).IsEqualTo(id));
-        //    foreach (var child in children)
-        //    {
-        //        child.ID = Guid.Empty;
-        //        String linkprop = CoreUtils.GetFullPropertyName<TChild, Guid>(linkfield, ".");
-        //        CoreUtils.SetPropertyValue(child, linkprop, Guid.Empty);
-        //        var newrow = result.NewRow();
-        //        result.LoadRow(newrow, child);
-        //        result.Rows.Add(newrow);
-        //    }
-        //    return result;
-        //});
-        //tasks.Add(childtask);
-
         Task.WaitAll(tasks.ToArray());
 
         var item = itemtask.Result;

+ 8 - 0
inabox.wpf/DynamicGrid/DynamicEditorButton.cs

@@ -8,6 +8,7 @@ namespace InABox.DynamicGrid
     public class DynamicEditorButton
     {
         public delegate void ClickHandler(object sender, object? item);
+        public delegate void ClickHandler<T>(object sender, T item);
 
         public DynamicEditorButton(string name, BitmapImage? image, object? item, ClickHandler onclick)
         {
@@ -41,5 +42,12 @@ namespace InABox.DynamicGrid
             Add(editorbutton);
             return editorbutton;
         }
+
+        public DynamicEditorButton Add<T>(string name, BitmapImage? image, T item, ClickHandler<T> onClick)
+        {
+            var editorbutton = new DynamicEditorButton(name, image, item, (o, e) => onClick(o, (T)e));
+            Add(editorbutton);
+            return editorbutton;
+        }
     }
 }