Browse Source

Fix to views loading deleted items, and fixed Merge button showing up on all multi-select grids

Kenric Nugteren 2 years ago
parent
commit
3f654521fd

+ 1 - 0
InABox.Core/CoreUtils.cs

@@ -274,6 +274,7 @@ namespace InABox.Core
         {
             return type.GetInterfaces(interfaceType).Any();
         }
+        public static bool HasInterface<T>(this Type type) => type.HasInterface(typeof(T));
         public static Type? GetInterfaceDefinition(this Type type, Type interfaceType)
         {
             return type.GetInterfaces(interfaceType).FirstOrDefault();

+ 1 - 1
InABox.DynamicGrid/DynamicDataGrid.cs

@@ -150,7 +150,7 @@ namespace InABox.DynamicGrid
         protected override void SelectItems(CoreRow[]? rows)
         {
             base.SelectItems(rows);
-            MergeBtn.Visibility = Options.Contains(DynamicGridOption.MultiSelect) && Security.CanMerge<TEntity>() && rows != null && rows.Length > 1
+            MergeBtn.Visibility = Options.Contains(DynamicGridOption.MultiSelect) && typeof(TEntity).IsAssignableTo(typeof(IMergeable)) && Security.CanMerge<TEntity>() && rows != null && rows.Length > 1
                 ? Visibility.Visible
                 : Visibility.Collapsed;
         }

+ 13 - 2
inabox.database.sqlite/SQLiteProvider.cs

@@ -784,9 +784,14 @@ namespace InABox.Database.SQLite
                             }
                         }
 
+                        var filter = Filter.Create<Entity>(table.Entity, x => x.Deleted).IsEqualTo(Guid.Empty);
+                        if(table.Filter is not null)
+                        {
+                            filter.And(table.Filter);
+                        }
 
                         var query = PrepareSelectNonGeneric(table.Entity, new SQLiteCommand(), 'A',
-                            table.Filter, columns, null,
+                            filter, columns, null,
                             null, constants, int.MaxValue, union.Distinct, false);
                         
                         queries.Add(query);
@@ -847,8 +852,14 @@ namespace InABox.Database.SQLite
                     int iTable = 0;
                     foreach (var table in cartesian.Tables)
                     {
+                        var filter = Filter.Create<Entity>(table.Type, x => x.Deleted).IsEqualTo(Guid.Empty);
+                        if (table.Filter is not null)
+                        {
+                            filter.And(table.Filter);
+                        }
+
                         var subQueryText = PrepareSelectNonGeneric(table.Type, new SQLiteCommand(), 'A',
-                            table.Filter, table.Columns, null,
+                            filter, table.Columns, null,
                             null, null, int.MaxValue, cartesian.Distinct, false);
                         
                         tables.Add($"({subQueryText}) T{iTable}");