using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using InABox.Core; namespace InABox.Avalonia { public class ShellColumn where TEntity : Entity { public int Index { get; } public Expression> Expression { get; } public string ColumnName { get; } public ShellColumn(int index, Expression> expression) { Index = index; Expression = expression; ColumnName = CoreUtils.GetFullPropertyName(expression, "."); } } public class ShellColumns : IShellColumns where TEntity : Entity { private static Dictionary> _columns = new(); public int IndexOf(string name) => _columns[name].Index; public string this[string name] => _columns[name].ColumnName; public ShellColumns Map(string property, Expression> expression) { int iCol = _columns.Keys.Count; if(_columns.TryGetValue(property, out var column)) { iCol = column.Index; } _columns[property] = new(iCol, expression); return this; } public string? FindShellProperty(string entityProperty) { foreach(var (property, column) in _columns) { if(column.ColumnName == entityProperty) { return property; } } return null; } public Columns Columns => new Columns(ColumnTypeFlags.None).Add(_columns.Select(x => x.Value.ColumnName)); public int Count => _columns.Count; } }