| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 | 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<string> 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<FilterPredicate>? 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<DynamicActionColumn> columns)    {        List<String> 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;        }    }    }
 |