diff --git a/src/Connected.Components/Components/ModalDialog.razor b/src/Connected.Components/Components/ModalDialog.razor
index 8e84da8..7215aed 100644
--- a/src/Connected.Components/Components/ModalDialog.razor
+++ b/src/Connected.Components/Components/ModalDialog.razor
@@ -1,7 +1,8 @@
-@if (IsVisible)
+@using Connected.Models.Modal;
+@if (IsVisible)
{
CheckEscape(e))">
-
diff --git a/src/Connected.Components/Components/ModalDialog.razor.cs b/src/Connected.Components/Components/ModalDialog.razor.cs
index e918da2..70548f9 100644
--- a/src/Connected.Components/Components/ModalDialog.razor.cs
+++ b/src/Connected.Components/Components/ModalDialog.razor.cs
@@ -1,9 +1,10 @@
-using Connected.Services.Modal;
+using Connected.Models.Modal;
+using Connected.Services.Modal;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Web;
namespace Connected.Components;
-public partial class ModalDialog: IDisposable
+public partial class ModalDialog : IDisposable
{
[Inject] ModalDialogService? ModalService { get; set; }
@@ -11,54 +12,51 @@ public partial class ModalDialog: IDisposable
protected bool IsVisible { get; set; }
protected string? Title { get; set; }
protected RenderFragment? Content { get; set; }
-
protected bool OverlayClickToClose { get; set; } = true;
- protected Event? OnOk { get; set; }
- protected Event? OnClose { get; set; }
+ protected List
buttons { get; set; } = new();
protected ModalOptions? ModalOptions { get; set; }
+
+
protected override void OnInitialized()
{
ModalService.OnShow += ShowModal;
ModalService.OnClose += CloseModal;
}
+ protected override async Task OnAfterRenderAsync(bool firstRender)
+ {
+ if (IsVisible)
+ await root.FocusAsync();
+ }
+
- public void ShowModal(string title, RenderFragment content, Event OnOk = null, Event OnClose = null, ModalOptions options = null, string CancelButtonText = "Cancel", string OKButtonText = "OK")
+ public void ShowModal(string title, RenderFragment content, List buttons, ModalOptions options)
{
Title = title;
Content = content;
IsVisible = true;
- this.OKButtonText = OKButtonText;
- this.CancelButtonText = CancelButtonText;
-
ModalOptions = options;
-
- this.OnOk = OnOk;
- this.OnClose = OnClose;
+ this.buttons = buttons;
StateHasChanged();
}
- public void CloseModal(bool OkClicked = false)
+ public void CloseModal(ModalButton? button)
{
- IsVisible = false;
- Title = "";
- Content = null;
- if (OkClicked)
- {
- if (OnOk is not null)
- OnOk.Delegate.DynamicInvoke(OnOk.args);
- }
- else
+ if (button is not null)
{
- if (OnClose is not null)
- OnClose.Delegate.DynamicInvoke(OnClose.args);
+ if (button.CloseDialogOnClick)
+ {
+ IsVisible = false;
+ Title = "";
+ Content = null;
+ }
+ button.OnClickEvent.Delegate.DynamicInvoke(button.OnClickEvent.args);
}
-
StateHasChanged();
}
@@ -71,24 +69,26 @@ public partial class ModalDialog: IDisposable
}
}
- public string OKButtonText { get; set; } ="OK";
-
- public string CancelButtonText { get; set; } = "Cancel";
-
public void CheckEscape(KeyboardEventArgs args)
{
- var key = args.Key.ToLower();
- if (key.Equals("escape"))
+ if (ModalOptions.CloseOnEscKey)
{
- CloseModal();
+ var key = args.Key.ToLower();
+ if (key.Equals("escape"))
+ {
+ CloseModal(null);
+ }
}
}
public void CloseIfEnabled(MouseEventArgs args)
{
- if (OverlayClickToClose)
+ if (!ModalOptions.DisableBackdropClick)
{
- CloseModal();
+ if (OverlayClickToClose)
+ {
+ CloseModal(null);
+ }
}
OverlayClickToClose = true;
}
diff --git a/src/Connected.Components/Enums/ModalButtonType.cs b/src/Connected.Components/Enums/ModalButtonType.cs
new file mode 100644
index 0000000..87739fb
--- /dev/null
+++ b/src/Connected.Components/Enums/ModalButtonType.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Connected.Enums;
+public enum ModalButtonType
+{
+ OkButton,
+ CancelButton,
+ RegularButton
+}
diff --git a/src/Connected.Components/Models/Modal/ModalButton.cs b/src/Connected.Components/Models/Modal/ModalButton.cs
new file mode 100644
index 0000000..e81f476
--- /dev/null
+++ b/src/Connected.Components/Models/Modal/ModalButton.cs
@@ -0,0 +1,37 @@
+using Connected.Enums;
+using Connected.Services.Modal;
+
+namespace Connected.Models.Modal;
+public class ModalButton
+{
+ ModalDialogService _dialogService;
+ public Event OnClickEvent { get; set; }
+ public ModalButtonType ModalButtonType { get; set; } = ModalButtonType.RegularButton;
+ public string ButtonText { get; set; }
+
+ public bool CloseDialogOnClick { get; set; } = true;
+
+ public ModalButton(Event OnClickEvent, string ButtonText, ModalButtonType ModalButtonType = ModalButtonType.RegularButton, bool CloseDialogOnClick = true)
+ {
+ this.OnClickEvent = OnClickEvent;
+ this.ButtonText = ButtonText;
+ this.ModalButtonType= ModalButtonType;
+ this.CloseDialogOnClick = CloseDialogOnClick;
+ }
+
+ public string GetButtonClass
+ {
+ get
+ {
+ switch (this.ModalButtonType)
+ {
+ case ModalButtonType.CancelButton:
+ return "btn-sm btn-core";
+ case ModalButtonType.OkButton:
+ return "btn-sm btn-info";
+ default:
+ return "btn-sm btn-secondary";
+ }
+ }
+ }
+}
diff --git a/src/Connected.Components/Models/Modal/ModalEvent.cs b/src/Connected.Components/Models/Modal/ModalEvent.cs
new file mode 100644
index 0000000..d0af9b1
--- /dev/null
+++ b/src/Connected.Components/Models/Modal/ModalEvent.cs
@@ -0,0 +1,12 @@
+namespace Connected.Models.Modal;
+public class Event
+{
+ public Delegate Delegate;
+ public object[] args;
+
+ public Event(Delegate Delegate, object[] Args)
+ {
+ this.Delegate = Delegate;
+ args = Args;
+ }
+}
diff --git a/src/Connected.Components/Models/Modal/ModalOptions.cs b/src/Connected.Components/Models/Modal/ModalOptions.cs
new file mode 100644
index 0000000..fa5bea0
--- /dev/null
+++ b/src/Connected.Components/Models/Modal/ModalOptions.cs
@@ -0,0 +1,10 @@
+namespace Connected.Models.Modal;
+public class ModalOptions
+{
+ public bool CloseOnEscKey { get; set; } = true;
+ public bool DisableBackdropClick { get; set; } = false;
+ public bool NoHeader { get; set; } = false;
+
+
+
+}
diff --git a/src/Connected.Components/Services/Modal/ModalDialogService.cs b/src/Connected.Components/Services/Modal/ModalDialogService.cs
index 83bc365..12c94c0 100644
--- a/src/Connected.Components/Services/Modal/ModalDialogService.cs
+++ b/src/Connected.Components/Services/Modal/ModalDialogService.cs
@@ -1,24 +1,28 @@
-using Microsoft.AspNetCore.Components;
+using Connected.Components;
+using Connected.Models.Modal;
+using Microsoft.AspNetCore.Components;
namespace Connected.Services.Modal;
public class ModalDialogService
{
- public event Action OnShow;
- public event Action OnClose;
+ public event Action, ModalOptions> OnShow;
+ public event Action OnClose;
- public void ShowDialog(string title, RenderFragment content, Event OnConfirm, Event OnCancel, ModalOptions options, string CancelButtonText="Cancel", string OKButtonText="OK")
+ public void ShowDialog(string title, RenderFragment content, List buttons, ModalOptions options)
{
- OnShow?.Invoke(title, content, OnConfirm, OnCancel, options, OKButtonText, CancelButtonText);
+ OnShow?.Invoke(title, content, buttons, options);
}
- public void ShowDialog(string title, MarkupString contentMarkup, Event OnConfirm, Event OnCancel, ModalOptions options, string CancelButtonText = "Cancel", string OKButtonText = "OK")
+ public void ShowDialog(string title, MarkupString contentMarkup, List buttons, ModalOptions options)
{
var content = new RenderFragment(x => x.AddContent(1, contentMarkup));
- OnShow?.Invoke(title, content, OnConfirm, OnCancel, options, OKButtonText, CancelButtonText);
+ OnShow?.Invoke(title, content, buttons, options);
}
- public void Close(bool OkClicked)
+ public void Close(ModalButton? button)
{
- OnClose?.Invoke(OkClicked);
+ OnClose?.Invoke(button);
}
+
+
}