|
@@ -12,207 +12,208 @@ using System.Threading.Tasks;
|
|
|
using System.Windows;
|
|
|
using System.Windows.Controls;
|
|
|
|
|
|
-namespace PRSServer.Forms
|
|
|
+namespace PRSServer.Forms;
|
|
|
+
|
|
|
+internal class SMSProviderGrid : DynamicGrid<SMSProviderProperties>, IDynamicEditorPage
|
|
|
{
|
|
|
- internal class SMSProviderGrid : DynamicGrid<SMSProviderProperties>, IDynamicEditorPage
|
|
|
- {
|
|
|
- public DynamicEditorGrid EditorGrid { get; set; }
|
|
|
+ public DynamicEditorGrid EditorGrid { get; set; }
|
|
|
|
|
|
- public List<SMSProviderProperties> WorkingList { get; set; }
|
|
|
+ public List<SMSProviderProperties> WorkingList { get; set; }
|
|
|
|
|
|
- public bool Ready { get; set; }
|
|
|
+ public bool Ready { get; set; }
|
|
|
|
|
|
- private bool _readOnly;
|
|
|
- public bool ReadOnly
|
|
|
+ private bool _readOnly;
|
|
|
+ public bool ReadOnly
|
|
|
+ {
|
|
|
+ get => _readOnly;
|
|
|
+ set
|
|
|
{
|
|
|
- get => _readOnly;
|
|
|
- set
|
|
|
+ if (_readOnly != value)
|
|
|
{
|
|
|
- if (_readOnly != value)
|
|
|
- {
|
|
|
- _readOnly = value;
|
|
|
- Reconfigure();
|
|
|
- }
|
|
|
+ _readOnly = value;
|
|
|
+ Reconfigure();
|
|
|
}
|
|
|
}
|
|
|
+ }
|
|
|
+
|
|
|
+ public bool Visible => true;
|
|
|
|
|
|
- public PageType PageType => PageType.Other;
|
|
|
+ public PageType PageType => PageType.Other;
|
|
|
|
|
|
- protected override void Init()
|
|
|
+ protected override void Init()
|
|
|
+ {
|
|
|
+ }
|
|
|
+
|
|
|
+ protected override void DoReconfigure(DynamicGridOptions options)
|
|
|
+ {
|
|
|
+ if (ReadOnly)
|
|
|
{
|
|
|
+ options.EditRows = true;
|
|
|
}
|
|
|
-
|
|
|
- protected override void DoReconfigure(DynamicGridOptions options)
|
|
|
+ else
|
|
|
{
|
|
|
- if (ReadOnly)
|
|
|
- {
|
|
|
- options.EditRows = true;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- options.AddRows = true;
|
|
|
- options.EditRows = true;
|
|
|
- options.DeleteRows = true;
|
|
|
- }
|
|
|
+ options.AddRows = true;
|
|
|
+ options.EditRows = true;
|
|
|
+ options.DeleteRows = true;
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- protected override DynamicGridColumns LoadColumns()
|
|
|
- {
|
|
|
- var result = new DynamicGridColumns();
|
|
|
+ protected override DynamicGridColumns LoadColumns()
|
|
|
+ {
|
|
|
+ var result = new DynamicGridColumns();
|
|
|
|
|
|
- result.Add<SMSProviderProperties>(x => x.ProviderType, 100, "Type", "", Alignment.MiddleCenter);
|
|
|
+ result.Add<SMSProviderProperties>(x => x.ProviderType, 100, "Type", "", Alignment.MiddleCenter);
|
|
|
|
|
|
- return result;
|
|
|
- }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
|
|
|
- public void AfterSave(object item)
|
|
|
- {
|
|
|
- var serverProperties = item as DatabaseServerProperties;
|
|
|
- serverProperties.SMSProviderProperties = WorkingList.ToDictionary(x => x.ProviderType, x => x.Properties);
|
|
|
- }
|
|
|
+ public void AfterSave(object item)
|
|
|
+ {
|
|
|
+ var serverProperties = item as DatabaseServerProperties;
|
|
|
+ serverProperties.SMSProviderProperties = WorkingList.ToDictionary(x => x.ProviderType, x => x.Properties);
|
|
|
+ }
|
|
|
|
|
|
- public void BeforeSave(object item)
|
|
|
- {
|
|
|
- }
|
|
|
+ public void BeforeSave(object item)
|
|
|
+ {
|
|
|
+ }
|
|
|
|
|
|
- public string Caption()
|
|
|
- {
|
|
|
- return "2FA Providers";
|
|
|
- }
|
|
|
+ public string Caption()
|
|
|
+ {
|
|
|
+ return "2FA Providers";
|
|
|
+ }
|
|
|
|
|
|
- protected override void DoAdd(bool OpenEditorOnDirectEdit = false)
|
|
|
+ protected override void DoAdd(bool OpenEditorOnDirectEdit = false)
|
|
|
+ {
|
|
|
+ var menu = new ContextMenu();
|
|
|
+ foreach(var item in Enum.GetValues(typeof(SMSProviderType)))
|
|
|
{
|
|
|
- var menu = new ContextMenu();
|
|
|
- foreach(var item in Enum.GetValues(typeof(SMSProviderType)))
|
|
|
- {
|
|
|
- if(!WorkingList.Any(x => x.ProviderType == (SMSProviderType)item))
|
|
|
- {
|
|
|
- var menuItem = new MenuItem();
|
|
|
- menuItem.Header = item.ToString();
|
|
|
- menuItem.Tag = item;
|
|
|
- menuItem.Click += MenuItem_Click;
|
|
|
- menu.Items.Add(menuItem);
|
|
|
- }
|
|
|
- }
|
|
|
- if(menu.Items.Count == 0)
|
|
|
+ if(!WorkingList.Any(x => x.ProviderType == (SMSProviderType)item))
|
|
|
{
|
|
|
- var emptyItem = new MenuItem();
|
|
|
- emptyItem.Header = "No more provider types";
|
|
|
- emptyItem.IsEnabled = false;
|
|
|
- menu.Items.Add(emptyItem);
|
|
|
+ var menuItem = new MenuItem();
|
|
|
+ menuItem.Header = item.ToString();
|
|
|
+ menuItem.Tag = item;
|
|
|
+ menuItem.Click += MenuItem_Click;
|
|
|
+ menu.Items.Add(menuItem);
|
|
|
}
|
|
|
- menu.IsOpen = true;
|
|
|
}
|
|
|
-
|
|
|
- private bool EditProperties(BaseSMSProviderProperties properties)
|
|
|
+ if(menu.Items.Count == 0)
|
|
|
{
|
|
|
- var editor = new DynamicEditorForm(properties.GetType());
|
|
|
- editor.ReadOnly = ReadOnly;
|
|
|
- editor.Items = new BaseObject[] { properties };
|
|
|
- return editor.ShowDialog() == true;
|
|
|
+ var emptyItem = new MenuItem();
|
|
|
+ emptyItem.Header = "No more provider types";
|
|
|
+ emptyItem.IsEnabled = false;
|
|
|
+ menu.Items.Add(emptyItem);
|
|
|
}
|
|
|
+ menu.IsOpen = true;
|
|
|
+ }
|
|
|
|
|
|
- private void MenuItem_Click(object sender, RoutedEventArgs e)
|
|
|
- {
|
|
|
- var smsProviderType = (SMSProviderType)(sender as MenuItem)!.Tag;
|
|
|
- BaseSMSProviderProperties? properties = SMSProviderProperties.ToProperties(smsProviderType, null);
|
|
|
+ private bool EditProperties(BaseSMSProviderProperties properties)
|
|
|
+ {
|
|
|
+ var editor = new DynamicEditorForm(properties.GetType());
|
|
|
+ editor.ReadOnly = ReadOnly;
|
|
|
+ editor.Items = new BaseObject[] { properties };
|
|
|
+ return editor.ShowDialog() == true;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void MenuItem_Click(object sender, RoutedEventArgs e)
|
|
|
+ {
|
|
|
+ var smsProviderType = (SMSProviderType)(sender as MenuItem)!.Tag;
|
|
|
+ BaseSMSProviderProperties? properties = SMSProviderProperties.ToProperties(smsProviderType, null);
|
|
|
|
|
|
- if(properties != null && EditProperties(properties))
|
|
|
+ if(properties != null && EditProperties(properties))
|
|
|
+ {
|
|
|
+ SaveItem(new SMSProviderProperties()
|
|
|
{
|
|
|
- SaveItem(new SMSProviderProperties()
|
|
|
- {
|
|
|
- ProviderType = smsProviderType,
|
|
|
- Properties = Serialization.Serialize(properties)
|
|
|
- });
|
|
|
- Refresh(false, true);
|
|
|
- }
|
|
|
+ ProviderType = smsProviderType,
|
|
|
+ Properties = Serialization.Serialize(properties)
|
|
|
+ });
|
|
|
+ Refresh(false, true);
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- public void Load(object item, Func<Type, CoreTable?>? PageDataHandler)
|
|
|
+ public void Load(object item, Func<Type, CoreTable?>? PageDataHandler)
|
|
|
+ {
|
|
|
+ var data = PageDataHandler?.Invoke(typeof(SMSProviderProperties));
|
|
|
+ if (data != null)
|
|
|
+ {
|
|
|
+ WorkingList = data.Rows.Select(x => x.ToObject<SMSProviderProperties>()).ToList();
|
|
|
+ }
|
|
|
+ else
|
|
|
{
|
|
|
- var data = PageDataHandler?.Invoke(typeof(SMSProviderProperties));
|
|
|
- if (data != null)
|
|
|
+ var serverProperties = item as DatabaseServerProperties;
|
|
|
+ if(serverProperties?.SMSProviderProperties != null)
|
|
|
{
|
|
|
- WorkingList = data.Rows.Select(x => x.ToObject<SMSProviderProperties>()).ToList();
|
|
|
+ WorkingList = serverProperties.SMSProviderProperties.Select(
|
|
|
+ x => new SMSProviderProperties() { ProviderType = x.Key, Properties = x.Value }).ToList();
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- var serverProperties = item as DatabaseServerProperties;
|
|
|
- if(serverProperties?.SMSProviderProperties != null)
|
|
|
- {
|
|
|
- WorkingList = serverProperties.SMSProviderProperties.Select(
|
|
|
- x => new SMSProviderProperties() { ProviderType = x.Key, Properties = x.Value }).ToList();
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- WorkingList = new();
|
|
|
- }
|
|
|
+ WorkingList = new();
|
|
|
}
|
|
|
-
|
|
|
- Refresh(true, true);
|
|
|
- Ready = true;
|
|
|
}
|
|
|
|
|
|
- public void Cancel()
|
|
|
- {
|
|
|
- // Not doing anything here, even though we really should.
|
|
|
- }
|
|
|
+ Refresh(true, true);
|
|
|
+ Ready = true;
|
|
|
+ }
|
|
|
|
|
|
- public Size MinimumSize()
|
|
|
- {
|
|
|
- return new Size(400, 400);
|
|
|
- }
|
|
|
+ public void Cancel()
|
|
|
+ {
|
|
|
+ // Not doing anything here, even though we really should.
|
|
|
+ }
|
|
|
|
|
|
- public int Order { get; set; } = int.MinValue;
|
|
|
+ public Size MinimumSize()
|
|
|
+ {
|
|
|
+ return new Size(400, 400);
|
|
|
+ }
|
|
|
|
|
|
- public override void DeleteItems(params CoreRow[] rows)
|
|
|
- {
|
|
|
- foreach(var row in rows)
|
|
|
- {
|
|
|
- WorkingList.RemoveAll(x => x.ProviderType.ToString() == row["ProviderType"].ToString());
|
|
|
- }
|
|
|
- }
|
|
|
+ public int Order { get; set; } = int.MinValue;
|
|
|
|
|
|
- public override bool EditItems(SMSProviderProperties[] items, Func<Type, CoreTable> PageDataHandler = null, bool PreloadPages = false)
|
|
|
+ public override void DeleteItems(params CoreRow[] rows)
|
|
|
+ {
|
|
|
+ foreach(var row in rows)
|
|
|
{
|
|
|
- var item = items.FirstOrDefault();
|
|
|
- if (item == null)
|
|
|
- return false;
|
|
|
-
|
|
|
- BaseSMSProviderProperties? properties = item.ToProperties();
|
|
|
+ WorkingList.RemoveAll(x => x.ProviderType.ToString() == row["ProviderType"].ToString());
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- if (properties != null && EditProperties(properties))
|
|
|
- {
|
|
|
- item.Properties = Serialization.Serialize(properties);
|
|
|
- return true;
|
|
|
- }
|
|
|
+ public override bool EditItems(SMSProviderProperties[] items, Func<Type, CoreTable> PageDataHandler = null, bool PreloadPages = false)
|
|
|
+ {
|
|
|
+ var item = items.FirstOrDefault();
|
|
|
+ if (item == null)
|
|
|
return false;
|
|
|
- }
|
|
|
|
|
|
- public override SMSProviderProperties LoadItem(CoreRow row)
|
|
|
- {
|
|
|
- return WorkingList[row.Index];
|
|
|
- }
|
|
|
+ BaseSMSProviderProperties? properties = item.ToProperties();
|
|
|
|
|
|
- protected override void Reload(
|
|
|
- Filters<SMSProviderProperties> criteria, Columns<SMSProviderProperties> columns, ref SortOrder<SMSProviderProperties>? sort,
|
|
|
- CancellationToken token, Action<CoreTable?, Exception?> action)
|
|
|
+ if (properties != null && EditProperties(properties))
|
|
|
{
|
|
|
- var table = new CoreTable();
|
|
|
- table.LoadColumns(typeof(SMSProviderProperties));
|
|
|
+ item.Properties = Serialization.Serialize(properties);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
|
|
|
- foreach(var item in WorkingList)
|
|
|
- {
|
|
|
- table.LoadRow(item);
|
|
|
- }
|
|
|
+ public override SMSProviderProperties LoadItem(CoreRow row)
|
|
|
+ {
|
|
|
+ return WorkingList[row.Index];
|
|
|
+ }
|
|
|
|
|
|
- action(table, null);
|
|
|
- }
|
|
|
+ protected override void Reload(
|
|
|
+ Filters<SMSProviderProperties> criteria, Columns<SMSProviderProperties> columns, ref SortOrder<SMSProviderProperties>? sort,
|
|
|
+ CancellationToken token, Action<CoreTable?, Exception?> action)
|
|
|
+ {
|
|
|
+ var table = new CoreTable();
|
|
|
+ table.LoadColumns(typeof(SMSProviderProperties));
|
|
|
|
|
|
- public override void SaveItem(SMSProviderProperties item)
|
|
|
+ foreach(var item in WorkingList)
|
|
|
{
|
|
|
- if (!WorkingList.Contains(item))
|
|
|
- WorkingList.Add(item);
|
|
|
+ table.LoadRow(item);
|
|
|
}
|
|
|
+
|
|
|
+ action(table, null);
|
|
|
+ }
|
|
|
+
|
|
|
+ public override void SaveItem(SMSProviderProperties item)
|
|
|
+ {
|
|
|
+ if (!WorkingList.Contains(item))
|
|
|
+ WorkingList.Add(item);
|
|
|
}
|
|
|
}
|