|
@@ -112,13 +112,15 @@ public class SaveEventDataModelDefinition<T>(SaveEvent<T> ev) : IEventDataModelD
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-public class SaveEventDataModel<T>(T entity) : IEventDataModel, ITypedEventDataModel
|
|
|
+public class SaveEventDataModel<T>(T entity, IStore store) : IEventDataModel, ITypedEventDataModel
|
|
|
where T : Entity, new()
|
|
|
{
|
|
|
public T Entity { get; set; } = entity;
|
|
|
|
|
|
public Type EntityType => typeof(T);
|
|
|
|
|
|
+ public IStore Store { get; } = store;
|
|
|
+
|
|
|
public bool TryGetVariable(string name, out object? value)
|
|
|
{
|
|
|
var prefix = $"{typeof(T).Name}.";
|
|
@@ -190,6 +192,37 @@ public class PropertyChangedSaveEventTrigger<T> : IEventTrigger<SaveEvent<T>, Sa
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+[Caption("Filter")]
|
|
|
+public class FilterSaveEventTrigger<T> : IEventTrigger<SaveEvent<T>, SaveEventDataModel<T>>
|
|
|
+ where T : Entity, new()
|
|
|
+{
|
|
|
+ public Filter<T>? Filter { get; set; }
|
|
|
+
|
|
|
+ public IEnumerable<string> ReferencedVariables => GetReferencedProperties(Filter).Select(x => $"{typeof(T).Name}.{x}");
|
|
|
+
|
|
|
+ public string Description => Filter?.ToString() ?? "Blank Filter";
|
|
|
+
|
|
|
+ public bool Check(SaveEventDataModel<T> dataModel)
|
|
|
+ {
|
|
|
+ return Filter.Match(dataModel.Entity, dataModel.Store.GetQueryProviderFactory());
|
|
|
+ }
|
|
|
+
|
|
|
+ private IEnumerable<string> GetReferencedProperties(Filter<T>? filter)
|
|
|
+ {
|
|
|
+ if (filter is null) yield break;
|
|
|
+
|
|
|
+ if(filter.Operator != Operator.All && filter.Operator != Operator.None
|
|
|
+ && !filter.Property.IsNullOrWhiteSpace())
|
|
|
+ {
|
|
|
+ yield return filter.Property;
|
|
|
+ }
|
|
|
+ foreach(var prop in filter.Ands.Concat(filter.Ors).SelectMany(GetReferencedProperties))
|
|
|
+ {
|
|
|
+ yield return prop;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
[Caption("Custom Script")]
|
|
|
public class ScriptSaveEventTrigger<T> : IEventTrigger<SaveEvent<T>, SaveEventDataModel<T>>
|
|
|
where T : Entity, new()
|