浏览代码

Reworked DynamicEditorPage visiblity to allow overridign functionality.

Kenric Nugteren 6 月之前
父节点
当前提交
a81c5164a6

+ 2 - 0
inabox.wpf/DigitalForms/DigitalFormReportGrid.cs

@@ -26,6 +26,8 @@ namespace InABox.DynamicGrid
 
         public bool Ready { get; set; }
 
+        public bool Visible => true;
+
         private DigitalForm Form { get; set; }
 
         private List<ReportTemplate> OriginalItems { get; set; } = new();

+ 2 - 0
inabox.wpf/DynamicGrid/DynamicEditorForm/DynamicEditorGrid.xaml.cs

@@ -210,6 +210,8 @@ public partial class DynamicEditorGrid : UserControl, IDynamicEditorHost
         public DynamicEditorGrid EditorGrid { get; set; } = null!; // Set by DynamicEditorGrid
         public bool Ready { get; set; }
 
+        public bool Visible => true;
+
         private List<BaseDynamicEditorControl> EditorList { get; set; }
 
         public IEnumerable<IDynamicEditorControl> Editors => EditorList;

+ 2 - 16
inabox.wpf/DynamicGrid/DynamicGridUtils.cs

@@ -159,14 +159,7 @@ public static class DynamicGridUtils
             }
             _manytomanytomanypages[type] = pageTypes.ToArray();
         }
-        foreach(var pageType in pageTypes)
-        {
-            var entityType = pageType.GetSuperclassDefinition(typeof(DynamicGrid<>))!.GenericTypeArguments[0];
-            if (Security.CanView(entityType))
-            {
-                pages.Add((Activator.CreateInstance(pageType) as IDynamicEditorPage)!);
-            }
-        }
+        pages.AddRange(pageTypes.Select(x => (Activator.CreateInstance(x) as IDynamicEditorPage)!));
     }
 
     public static IEnumerable<Type> GetOneToManyTypes(Type type)
@@ -223,14 +216,7 @@ public static class DynamicGridUtils
 
             _onetomanypages[type] = pageTypes.ToArray();
         }
-        foreach(var pageType in pageTypes)
-        {
-            var entityType = pageType.GetSuperclassDefinition(typeof(DynamicGrid<>))!.GenericTypeArguments[0];
-            if (Security.CanView(entityType))
-            {
-                pages.Add((Activator.CreateInstance(pageType) as IDynamicEditorPage)!);
-            }
-        }
+        pages.AddRange(pageTypes.Select(x => (Activator.CreateInstance(x) as IDynamicEditorPage)!));
     }
 
     public static void LoadCustomEditorPages(Type type, DynamicEditorPages pages)

+ 2 - 0
inabox.wpf/DynamicGrid/Grids/DynamicEnclosedListGrid.cs

@@ -30,6 +30,8 @@ public class DynamicEnclosedListGrid<TOne, TMany> : DynamicGrid<TMany>, IDynamic
 
     public PageType PageType => PageType.Other;
 
+    public bool Visible => true;
+
     public bool ReadOnly { get; set; }
 
     protected DynamicGridCustomColumnsComponent<TMany> ColumnsComponent;

+ 1 - 0
inabox.wpf/DynamicGrid/Grids/DynamicGrid.cs

@@ -1592,6 +1592,7 @@ public abstract class DynamicGrid<T> : DynamicGrid, IDynamicGridUIComponentParen
         DynamicGridUtils.LoadEnclosedListPages(typeof(T), pages);
         DynamicGridUtils.LoadManyToManyPages(typeof(T), pages);
         DynamicGridUtils.LoadCustomEditorPages(typeof(T), pages);
+        pages.RemoveAll(x => !x.Visible);
         foreach (var page in pages)
             page.Ready = false;
         return pages;

+ 2 - 0
inabox.wpf/DynamicGrid/Grids/DynamicManyToManyGrid.cs

@@ -63,6 +63,8 @@ public class DynamicManyToManyGrid<TManyToMany, TThis> : DynamicGrid<TManyToMany
         }
     }
 
+    public virtual bool Visible => Security.CanView<TManyToMany>();
+
     private static bool IsAutoEntity => typeof(TManyToMany).HasAttribute<AutoEntity>();
 
     protected DynamicGridCustomColumnsComponent<TManyToMany> ColumnsComponent;

+ 2 - 0
inabox.wpf/DynamicGrid/Grids/DynamicOneToManyGrid.cs

@@ -38,6 +38,8 @@ public class DynamicOneToManyGrid<TOne, TMany> : DynamicGrid<TMany>,
 
     protected DynamicGridCustomColumnsComponent<TMany> ColumnsComponent;
 
+    public virtual bool Visible => Security.CanView<TMany>();
+
     public DynamicOneToManyGrid()
     {
         Ready = false;

+ 8 - 0
inabox.wpf/DynamicGrid/Pages/DynamicEditorPage.cs

@@ -22,6 +22,14 @@ public interface IDynamicEditorPage
 
     bool Ready { get; set; }
 
+    /// <summary>
+    /// Is this page visible?
+    /// </summary>
+    /// <remarks>
+    /// Based on security tokens and the likes.
+    /// </remarks>
+    bool Visible { get; }
+
     bool ReadOnly { get; set; }
 
     int Order { get; set; }