Skip to content

Commit

Permalink
feat(DialogOption): add IsFade parameter (#5518)
Browse files Browse the repository at this point in the history
* doc: 文档注释更新为英语

* refactor: 增加 IsFade 参数

* refactor: 增加 IsFade 参数支持

* test: 更新单元测试

* test: 更新单元测试

* chore: bump version 9.4.4

* refactor: 重构代码
  • Loading branch information
ArgoZhang authored Mar 5, 2025
1 parent 28a9d85 commit 39c42d4
Show file tree
Hide file tree
Showing 6 changed files with 91 additions and 89 deletions.
2 changes: 1 addition & 1 deletion src/BootstrapBlazor/BootstrapBlazor.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Razor">

<PropertyGroup>
<Version>9.4.3-beta04</Version>
<Version>9.4.4</Version>
</PropertyGroup>

<ItemGroup>
Expand Down
3 changes: 2 additions & 1 deletion src/BootstrapBlazor/Components/Dialog/Dialog.razor
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
@namespace BootstrapBlazor.Components
@inherits BootstrapComponentBase

<Modal @ref="ModalContainer" IsBackdrop="IsBackdrop" IsKeyboard="@IsKeyboard" OnShownAsync="@OnShownAsync" OnCloseAsync="OnCloseAsync">
<Modal @ref="_modal" IsBackdrop="_isBackdrop" IsKeyboard="@_isKeyboard" IsFade="@_isFade"
OnShownAsync="@_onShownAsync" OnCloseAsync="@_onCloseAsync">
@for (var index = 0; index < DialogParameters.Keys.Count; index++)
{
@RenderDialog(index, DialogParameters.Keys.ElementAt(index))
Expand Down
82 changes: 36 additions & 46 deletions src/BootstrapBlazor/Components/Dialog/Dialog.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,103 +6,93 @@
namespace BootstrapBlazor.Components;

/// <summary>
/// Dialog 对话框组件
/// Dialog component
/// </summary>
public partial class Dialog : IDisposable
{
/// <summary>
/// 获得/设置 Modal 容器组件实例
/// </summary>
[NotNull]
private Modal? ModalContainer { get; set; }

/// <summary>
/// 获得/设置 弹出对话框实例集合
/// </summary>
private Dictionary<Dictionary<string, object>, (bool IsKeyboard, bool IsBackdrop)> DialogParameters { get; } = [];

private bool IsKeyboard { get; set; }

private bool IsBackdrop { get; set; }

/// <summary>
/// DialogServices 服务实例
/// </summary>
[Inject]
[NotNull]
private DialogService? DialogService { get; set; }

[NotNull]
private Func<Task>? OnShownAsync { get; set; }
private Modal? _modal = null;

[NotNull]
private Func<Task>? _onShownAsync = null;

[NotNull]
private Func<Task>? OnCloseAsync { get; set; }
private Func<Task>? _onCloseAsync = null;

private Dictionary<string, object>? CurrentParameter { get; set; }
private readonly Dictionary<Dictionary<string, object>, (bool IsKeyboard, bool IsBackdrop)> DialogParameters = [];
private Dictionary<string, object>? _currentParameter;
private bool _isKeyboard = false;
private bool _isBackdrop = false;
private bool _isFade = true;

/// <summary>
/// OnInitialized 方法
/// <inheritdoc/>
/// </summary>
protected override void OnInitialized()
{
base.OnInitialized();

// 注册 Dialog 弹窗事件
// Register Dialog popup event
DialogService.Register(this, Show);
}

/// <summary>
/// OnAfterRenderAsync 方法
/// <inheritdoc/>
/// </summary>
/// <param name="firstRender"></param>
/// <returns></returns>
protected override async Task OnAfterRenderAsync(bool firstRender)
{
await base.OnAfterRenderAsync(firstRender);

if (CurrentParameter != null)
if (_currentParameter != null)
{
await ModalContainer.Show();
await _modal.Show();
}
}

private async Task Show(DialogOption option)
{
OnShownAsync = async () =>
_onShownAsync = async () =>
{
if (option.OnShownAsync != null)
{
await option.OnShownAsync();
}
};

OnCloseAsync = async () =>
_onCloseAsync = async () =>
{
// 回调 OnCloseAsync
// Callback OnCloseAsync
if (option.OnCloseAsync != null)
{
await option.OnCloseAsync();
}

// 移除当前 DialogParameter
if (CurrentParameter != null)
// Remove current DialogParameter
if (_currentParameter != null)
{
DialogParameters.Remove(CurrentParameter);
DialogParameters.Remove(_currentParameter);

// 多弹窗支持
// Support for multiple dialogs
var p = DialogParameters.LastOrDefault();
CurrentParameter = p.Key;
IsKeyboard = p.Value.IsKeyboard;
IsBackdrop = p.Value.IsBackdrop;
_currentParameter = p.Key;
_isKeyboard = p.Value.IsKeyboard;
_isBackdrop = p.Value.IsBackdrop;

StateHasChanged();
}
};

IsKeyboard = option.IsKeyboard;
IsBackdrop = option.IsBackdrop;
_isKeyboard = option.IsKeyboard;
_isBackdrop = option.IsBackdrop;
_isFade = option.IsFade;

option.Modal = ModalContainer;
option.Modal = _modal;

var parameters = option.ToAttributes();
var content = option.BodyTemplate ?? option.Component?.Render();
Expand Down Expand Up @@ -163,11 +153,11 @@ private async Task Show(DialogOption option)
}
}

// 保存当前 Dialog 参数
CurrentParameter = parameters;
// Save current Dialog parameters
_currentParameter = parameters;

// 添加 ModalDialog 到容器中
DialogParameters.Add(parameters, (IsKeyboard, IsBackdrop));
// Add ModalDialog to the container
DialogParameters.Add(parameters, (_isKeyboard, _isBackdrop));
await InvokeAsync(StateHasChanged);
}

Expand All @@ -180,7 +170,7 @@ private static RenderFragment RenderDialog(int index, Dictionary<string, object>
};

/// <summary>
/// Dispose 方法
/// Dispose method
/// </summary>
/// <param name="disposing"></param>
protected virtual void Dispose(bool disposing)
Expand All @@ -192,7 +182,7 @@ protected virtual void Dispose(bool disposing)
}

/// <summary>
/// Dispose 方法
/// <inheritdoc/>
/// </summary>
public void Dispose()
{
Expand Down
Loading

0 comments on commit 39c42d4

Please sign in to comment.