Browse Source

avalonia: added lookup fields (there is still a bug though)

Kenric Nugteren 1 month ago
parent
commit
f937060ede

+ 1 - 3
InABox.Avalonia/Components/AvaloniaDataGrid/Columns/AvaloniaDataGridColumn.cs

@@ -63,9 +63,7 @@ public abstract class AvaloniaDataGridColumn<TEntity, TType> : AvaloniaDataGridC
     public virtual bool Filter(TEntity item, string filter)
     {
         if (item is null) return false;
-        var property = item.GetType().GetProperty(ColumnName);
-        if(property is null) return false;
-        var value = property.GetValue(item);
+        var value = CoreUtils.GetPropertyValue(item, ColumnName);
         var sValue = value?.ToString() ?? "";
         return sValue.Contains(filter, StringComparison.CurrentCultureIgnoreCase);
     }

+ 2 - 2
InABox.Core/CoreTable/CoreTable.cs

@@ -497,12 +497,12 @@ namespace InABox.Core
         /// </summary>
         /// <param name="obj"></param>
         /// <returns></returns>
-        public CoreTable LoadRow(object obj)
+        public CoreRow LoadRow(object obj)
         {
             var row = NewRow();
             FillRow(row, obj);
             Rows.Add(row);
-            return this;
+            return row;
         }
 
         public int GetColumnIndex<T>(Expression<Func<T, object>> column)

+ 2 - 0
InABox.Core/Query/Column.cs

@@ -61,6 +61,8 @@ namespace InABox.Core
     {
         string Property { get; }
 
+        IProperty PropertyDefinition { get; set; }
+
         string IBaseColumn.Name => Property;
     }
 

+ 3 - 3
InABox.Database/Stores/AddressLookupStore.cs

@@ -58,9 +58,9 @@ public class AddressLookupStore : Store<AddressLookup>
         {
             if (filter == null || filter.Match(lookup, _queryProviderFactory))
             {
-                    var row = result.NewRow();
-                    result.LoadRow(lookup);
-                    result.Rows.Add(row);
+                var row = result.NewRow();
+                result.LoadRow(lookup);
+                result.Rows.Add(row);
             }
         }
         return result;

+ 97 - 98
inabox.wpf/DigitalForms/Designer/Controls/Fields/DFLookupControl.cs

@@ -7,123 +7,122 @@ using System.Windows;
 using System.Windows.Controls;
 using ComboItemType = System.Tuple<string, System.Collections.Generic.Dictionary<string, object?>>;
 
-namespace InABox.DynamicGrid
+namespace InABox.DynamicGrid;
+
+
+public class DFLookupControl : DynamicFormFieldControl<DFLayoutLookupField, DFLayoutLookupFieldProperties, Guid, DFLayoutLookupValue>
 {
 
-    public class DFLookupControl : DynamicFormFieldControl<DFLayoutLookupField, DFLayoutLookupFieldProperties, Guid, DFLayoutLookupValue>
+    private DFLayoutLookupValue _value = null!;
+    
+    private ComboBox Combo = null!; // late-initialising
+    
+    protected override FrameworkElement Create()
     {
-
-        private DFLayoutLookupValue _value = null!;
-        
-        private ComboBox Combo = null!; // late-initialising
-        
-        protected override FrameworkElement Create()
+        _value = new DFLayoutLookupValue();
+        Combo = new ComboBox();
+        if (CoreUtils.TryGetEntity(Field.Properties.LookupType, out var type))
         {
-            _value = new DFLayoutLookupValue();
-            Combo = new ComboBox();
-            if (CoreUtils.TryGetEntity(Field.Properties.LookupType, out var type))
-            {
-                var client = ClientFactory.CreateClient(type);
-                //Task.Run(() =>
-                //{
+            var client = ClientFactory.CreateClient(type);
+            //Task.Run(() =>
+            //{
 
-                var columns = LookupFactory.DefineColumns(type);
-                foreach(var property in Field.Properties.AdditionalPropertiesList)
-                {
-                    columns.Add(property);
-                }
+            var columns = LookupFactory.DefineColumns(type);
+            foreach(var property in Field.Properties.AdditionalPropertiesList)
+            {
+                columns.Add(property);
+            }
 
-                IFilter? filter;
-                if (!Field.Properties.Filter.IsNullOrWhiteSpace())
-                {
-                    filter = Serialization.Deserialize(typeof(Filter<>).MakeGenericType(type), Field.Properties.Filter) as IFilter;
-                    filter?.ConvertCustomValues((_, value) =>
-                    {
-                        var property = System.Text.Encoding.UTF8.GetString(value.Data);
-                        return FormDesignGrid.DataModel?.GetEntityValue(property);
-                    });
-                }
-                else
-                {
-                    filter = LookupFactory.DefineFilter(type);
-                }
-
-                var table = client.Query(
-                    filter,
-                    columns,
-                    LookupFactory.DefineSort(type)
-                );
-                var lookups = new Dictionary<Guid, ComboItemType>()
-                {
-                    { Guid.Empty, new("(None)", table.NewRow().ToDictionary(new[] { "ID" })) }
-                };
-                foreach (var row in table.Rows)
-                {
-                    var id = row.Get<Guid>("ID");
-                    var values = row.ToDictionary(new[] { "ID" });
-                    var display = LookupFactory.FormatLookup(type, values, Array.Empty<string>());
-                    lookups[id] = new(display, values);
-                }
-                //Dispatcher.Invoke(() =>
-                //{
-
-                Combo.DisplayMemberPath = "Value.Item1";
-                Combo.SelectedValuePath = "Key";
-                Combo.ItemsSource = lookups;
-                Combo.VerticalContentAlignment = VerticalAlignment.Center;
-                Combo.SelectionChanged += (sender, e) =>
+            IFilter? filter;
+            if (!Field.Properties.Filter.IsNullOrWhiteSpace())
+            {
+                filter = Serialization.Deserialize(typeof(Filter<>).MakeGenericType(type), Field.Properties.Filter) as IFilter;
+                filter?.ConvertCustomValues((_, value) =>
                 {
-                    var lookup = (KeyValuePair<Guid, ComboItemType>?)Combo.SelectedItem;
+                    var property = System.Text.Encoding.UTF8.GetString(value.Data);
+                    return FormDesignGrid.DataModel?.GetEntityValue(property);
+                });
+            }
+            else
+            {
+                filter = LookupFactory.DefineFilter(type);
+            }
 
-                    _value.ID = lookup?.Key ?? Guid.Empty;
-                    _value.Text = _value.ID != Guid.Empty ? lookup?.Value.Item1 ?? "" : "";
-                    _value.Values = lookup?.Value.Item2 ?? new Dictionary<string, object?>();
+            var table = client.Query(
+                filter,
+                columns,
+                LookupFactory.DefineSort(type)
+            );
+            var lookups = new Dictionary<Guid, ComboItemType>()
+            {
+                { Guid.Empty, new("(None)", table.NewRow().ToDictionary(new[] { "ID" })) }
+            };
+            foreach (var row in table.Rows)
+            {
+                var id = row.Get<Guid>("ID");
+                var values = row.ToDictionary(new[] { "ID" });
+                var display = LookupFactory.FormatLookup(type, values, Array.Empty<string>());
+                lookups[id] = new(display, values);
+            }
+            //Dispatcher.Invoke(() =>
+            //{
+
+            Combo.DisplayMemberPath = "Value.Item1";
+            Combo.SelectedValuePath = "Key";
+            Combo.ItemsSource = lookups;
+            Combo.VerticalContentAlignment = VerticalAlignment.Center;
+            Combo.SelectionChanged += (sender, e) =>
+            {
+                var lookup = (KeyValuePair<Guid, ComboItemType>?)Combo.SelectedItem;
 
-                    ChangeField();
-                };
-                //});
+                _value.ID = lookup?.Key ?? Guid.Empty;
+                _value.Text = _value.ID != Guid.Empty ? lookup?.Value.Item1 ?? "" : "";
+                _value.Values = lookup?.Value.Item2 ?? new Dictionary<string, object?>();
 
-                //});
-            }
+                ChangeField();
+            };
+            //});
 
-            return Combo;
+            //});
         }
 
-        public override void SetSerializedValue(DFLayoutLookupValue value)
-        {
-            SetValue(value.ID);
-        }
+        return Combo;
+    }
 
-        public override DFLayoutLookupValue GetSerializedValue()
-        {
-            return _value;
-        }
+    public override void SetSerializedValue(DFLayoutLookupValue value)
+    {
+        SetValue(value.ID);
+    }
 
-        public override object? GetEntityValue()
-        {
-            return (Guid?)Combo.SelectedValue ?? Guid.Empty;
-        }
+    public override DFLayoutLookupValue GetSerializedValue()
+    {
+        return _value;
+    }
 
-        public override object? GetData(string dataField)
-        {
-            return ((KeyValuePair<Guid, ComboItemType>?)Combo.SelectedItem)?.Value.Item2.GetValueOrDefault(dataField);
-        }
+    public override object? GetEntityValue()
+    {
+        return (Guid?)Combo.SelectedValue ?? Guid.Empty;
+    }
+
+    public override object? GetData(string dataField)
+    {
+        return ((KeyValuePair<Guid, ComboItemType>?)Combo.SelectedItem)?.Value.Item2.GetValueOrDefault(dataField);
+    }
 
-        public override Guid GetValue() => ((KeyValuePair<Guid, ComboItemType>?)Combo.SelectedItem)?.Key ?? Guid.Empty;
+    public override Guid GetValue() => ((KeyValuePair<Guid, ComboItemType>?)Combo.SelectedItem)?.Key ?? Guid.Empty;
 
-        public override void SetValue(Guid value)
-        {
-            if (Combo.ItemsSource is not Dictionary<Guid, ComboItemType> lookups)
-                return;
-            var lookup = lookups!.FirstOrDefault(x => x.Key == value);
-            Combo.SelectedItem = lookup;
+    public override void SetValue(Guid value)
+    {
+        if (Combo.ItemsSource is not Dictionary<Guid, ComboItemType> lookups)
+            return;
+        var lookup = lookups!.FirstOrDefault(x => x.Key == value);
+        Combo.SelectedItem = lookup;
 
-            var combo = lookup.Value;
+        var combo = lookup.Value;
 
-            _value.ID = lookup.Key;
-            _value.Text = _value.ID != Guid.Empty ? combo?.Item1 ?? "" : "";
-            _value.Values = combo?.Item2 ?? new Dictionary<string, object?>();
-        }
-        protected override bool IsEmpty() => Combo.SelectedValue == null || (Guid)Combo.SelectedValue == Guid.Empty;
+        _value.ID = lookup.Key;
+        _value.Text = _value.ID != Guid.Empty ? combo?.Item1 ?? "" : "";
+        _value.Values = combo?.Item2 ?? new Dictionary<string, object?>();
     }
+    protected override bool IsEmpty() => Combo.SelectedValue == null || (Guid)Combo.SelectedValue == Guid.Empty;
 }