|
@@ -12,6 +12,7 @@ using InABox.Core;
|
|
|
using InABox.Wpf;
|
|
|
using InABox.Core.Reports;
|
|
|
using Syncfusion.Data.Extensions;
|
|
|
+using System.Diagnostics.CodeAnalysis;
|
|
|
|
|
|
namespace InABox.DynamicGrid
|
|
|
{
|
|
@@ -442,9 +443,9 @@ namespace InABox.DynamicGrid
|
|
|
|
|
|
private static Dictionary<Type, Type[]> _dynamicGrids = new();
|
|
|
|
|
|
- public static Type FindDynamicGrid(Type gridType, Type entityType)
|
|
|
+ public static bool TryFindDynamicGrid(Type gridType, Type entityType, [NotNullWhen(true)] out Type? grid)
|
|
|
{
|
|
|
- if(!_dynamicGrids.TryGetValue(gridType, out var grids))
|
|
|
+ if (!_dynamicGrids.TryGetValue(gridType, out var grids))
|
|
|
{
|
|
|
grids = CoreUtils.TypeList(
|
|
|
AppDomain.CurrentDomain.GetAssemblies(),
|
|
@@ -457,7 +458,7 @@ namespace InABox.DynamicGrid
|
|
|
).ToArray();
|
|
|
_dynamicGrids[gridType] = grids;
|
|
|
}
|
|
|
- grids = grids.Where(x=>x.IsSubclassOfRawGeneric(gridType)).ToArray();
|
|
|
+ grids = grids.Where(x => x.IsSubclassOfRawGeneric(gridType)).ToArray();
|
|
|
var entityGrids = grids.Where(x =>
|
|
|
{
|
|
|
var baseGrid = x.GetSuperclassDefinition(typeof(BaseDynamicGrid<>));
|
|
@@ -465,17 +466,27 @@ namespace InABox.DynamicGrid
|
|
|
}).ToList();
|
|
|
|
|
|
var defaults = entityGrids.Where(x => x.IsAssignableTo(typeof(IDefaultGrid))).ToList();
|
|
|
- if(defaults.Count > 0)
|
|
|
+ if (defaults.Count > 0)
|
|
|
{
|
|
|
- if(defaults.Count > 1)
|
|
|
+ if (defaults.Count > 1)
|
|
|
{
|
|
|
Logger.Send(LogType.Information, ClientFactory.UserID, $"Error: {defaults.Count} IDefaultGrid derivations for {gridType.Name} of {entityType.Name}");
|
|
|
}
|
|
|
- return defaults.First();
|
|
|
+ grid = defaults.First();
|
|
|
+ return true;
|
|
|
}
|
|
|
|
|
|
- return entityGrids.FirstOrDefault()
|
|
|
- ?? gridType.MakeGenericType(entityType);
|
|
|
+ grid = entityGrids.FirstOrDefault();
|
|
|
+ return grid is not null;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static Type FindDynamicGrid(Type gridType, Type entityType)
|
|
|
+ {
|
|
|
+ if(TryFindDynamicGrid(gridType, entityType, out var grid))
|
|
|
+ {
|
|
|
+ return grid;
|
|
|
+ }
|
|
|
+ return gridType.MakeGenericType(entityType);
|
|
|
}
|
|
|
|
|
|
public static Window CreateGridWindow(string title, BaseDynamicGrid dynamicGrid)
|