Browse Source

Added 'Tags' property to Kanban.

Kenric Nugteren 4 tháng trước cách đây
mục cha
commit
471546e11f
2 tập tin đã thay đổi với 41 bổ sung3 xóa
  1. 4 0
      prs.classes/Entities/Kanban/Kanban.cs
  2. 37 3
      prs.desktop/Grids/KanbanGrid.cs

+ 4 - 0
prs.classes/Entities/Kanban/Kanban.cs

@@ -153,6 +153,10 @@ namespace Comal.Classes
         [EnumLookupEditor(typeof(KanbanStatus))]
         public KanbanStatus Status { get; set; }
 
+        [EditorSequence("Other", 8)]
+        [TagsEditor]
+        public string Tags { get; set; } = "";
+
         [SecondaryIndex]
         [NullEditor]
         public DateTime Closed { get; set; } = DateTime.MinValue;

+ 37 - 3
prs.desktop/Grids/KanbanGrid.cs

@@ -14,17 +14,24 @@ using System.Windows.Controls;
 
 namespace PRSDesktop;
 
+public class KanbanGridSettings : IUserConfigurationSettings
+{
+    public string[] RecentTags { get; set; } = [];
+}
+
 public abstract class BaseKanbanGrid : DynamicDataGrid<Kanban>
 {
     protected abstract TaskPanelProperties Properties { get; }
 
+    protected KanbanGridSettings Settings { get; private set; }
+
     public BaseKanbanGrid()
     {
+        Settings = new UserConfiguration<KanbanGridSettings>().Load();
+
         ActionColumns.Add(new DynamicImageColumn(PRSDesktop.Resources.menu.AsBitmapImage(), FormMenuClick));
 
         HiddenColumns.Add(x => x.EmployeeLink.ID);
-
-        OnCustomiseEditor += CustomiseEditor;
     }
 
     protected override void DoValidate(Kanban[] items, List<string> errors)
@@ -73,7 +80,7 @@ public abstract class BaseKanbanGrid : DynamicDataGrid<Kanban>
         TaskPanel.ManageSubscribers(kanban);
     }
 
-    private void CustomiseEditor(IDynamicEditorForm sender, Kanban[]? items, DynamicGridColumn column, BaseEditor editor)
+    protected override void CustomiseEditor(IDynamicEditorForm sender, Kanban[]? items, DynamicGridColumn column, BaseEditor editor)
     {
         var kanban = items?.FirstOrDefault();
         if (kanban is null) return;
@@ -107,6 +114,33 @@ public abstract class BaseKanbanGrid : DynamicDataGrid<Kanban>
         }
     }
 
+    protected override void OnCreateEditorControl(string column, BaseEditor editor, IDynamicEditorControl control)
+    {
+        base.OnCreateEditorControl(column, editor, control);
+
+        if(column == nameof(Kanban.Tags) && control is TagsEditorControl tagsEditor)
+        {
+            tagsEditor.RecentTags = Settings.RecentTags.ToList();
+            tagsEditor.OnRecentTagsChanged += TagsEditor_OnRecentTagsChanged;
+        }
+    }
+
+    private void TagsEditor_OnRecentTagsChanged(IEnumerable<string> tags)
+    {
+        var lst = tags.ToArray();
+        if(lst.Length > 15)
+        {
+            var newArr = new string[15];
+            Array.Copy(lst, lst.Length - 15, newArr, 0, 15);
+            Settings.RecentTags = newArr;
+        }
+        else
+        {
+            Settings.RecentTags = lst;
+        }
+        new UserConfiguration<KanbanGridSettings>().Save(Settings);
+    }
+
     private bool IsFullControl(Kanban[] kanbans)
     {
         foreach (var kanban in kanbans)