using System; using System.Collections.Generic; using System.Data; using System.Linq; using Syncfusion.Data; namespace InABox.DynamicGrid; public static class IDynamicGridUIComponentExtensions { public static string CreateFilterExpression(this DynamicActionColumn column, string propertyName) { List criteria = new(); var sel = column.SelectedFilters ?? []; var exc = column.ExcludeFilters ?? []; if (sel.Any()) { var sels = String.Join(", ",sel.Select(x => $"'{x}'")); criteria.Add($"{propertyName} IN ({sels})"); } if (exc.Any()) { var excs = String.Join(", ",exc.Select(x => $"'{x}'")); criteria.Add($"{propertyName} NOT IN ({excs})"); } if (criteria.Any()) return $"{string.Join(" AND ", criteria)}"; return "true"; } public static void SetFilters(this DynamicActionColumn column, IEnumerable? predicates) { if (predicates != null) { var filter = predicates.Select(x => x.FilterValue.ToString()!).ToArray(); var include = predicates.Any(x => x.FilterType == FilterType.Equals); if (include) { column.SelectedFilters = filter; column.ExcludeFilters = null; } else if(column.Filters is not null) { column.SelectedFilters = column.Filters.Except(filter).ToArray(); column.ExcludeFilters = null; } else { column.SelectedFilters = null; column.ExcludeFilters = filter; } } else { column.SelectedFilters = null; column.ExcludeFilters = null; } } public static void ApplyFilters(this DataView? view, IEnumerable columns) { List criteria = new(); foreach (var column in columns) criteria.Add(column.GetFilterExpression?.Invoke(column) ?? ""); var filter = string.Join(" AND ", criteria.Where(x => !string.IsNullOrWhiteSpace(x))); if (view != null) { view.RowStateFilter = DataViewRowState.CurrentRows; view.RowFilter = filter; if (view.Count == 0) view.RowStateFilter = DataViewRowState.None; } } }