Browse Source

Shells now automatically Commit themselves when saving

Kenric Nugteren 1 week ago
parent
commit
b327de6349

+ 7 - 0
InABox.Avalonia/DataModels/CoreRepository.cs

@@ -713,6 +713,11 @@ namespace InABox.Avalonia
             ItemAdded?.Invoke(this, new CoreRepositoryItemCreatedArgs<TItem>(result));
             return result;
         }
+
+        public bool HasItem(TItem item)
+        {
+            return _table.Rows.Contains(item.Row);
+        }
         
         public virtual void CommitItem(TItem item)
         {
@@ -755,6 +760,8 @@ namespace InABox.Avalonia
         }
 
         object ICoreRepository.CreateItem() => this.CreateItem();
+
+        bool ICoreRepository.HasItem(object item) => item is TItem tItem ? HasItem(tItem) : false;
         
         void ICoreRepository.CommitItem(object item)
         {

+ 1 - 0
InABox.Avalonia/DataModels/ICoreRepository.cs

@@ -41,6 +41,7 @@ namespace InABox.Avalonia
         
         object CreateItem();
         void CommitItem(object item);
+        bool HasItem(object item);
         object AddItem();
         void DeleteItem(object item);
         IEnumerable Items { get; }

+ 2 - 1
InABox.Avalonia/DataModels/IShell.cs

@@ -13,12 +13,13 @@ namespace InABox.Avalonia
 
         bool IsChanged();
         void Save(string auditmessage);
+        void SyncRow();
         void Cancel();
 
         bool Match(string? text);
     }
 
-    public interface IShell<out TEntity>
+    public interface IShell<out TEntity> : IShell
         where TEntity : Entity, IRemotable, IPersistent 
     {
         TEntity Entity { get; }

+ 4 - 0
InABox.Avalonia/DataModels/Shell.cs

@@ -90,6 +90,10 @@ public abstract class Shell<TParent,TEntity> : INotifyPropertyChanged, IShell, I
             _entity.CommitChanges();
             SyncRow();
         }
+        if (!Parent.HasItem(this))
+        {
+            Parent.CommitItem(this);
+        }
     }
 
     public Task SaveAsync(string auditMessage)