@@ -13,45 +13,55 @@ namespace BootstrapBlazor.Components;
13
13
public partial class EditDialog < TModel >
14
14
{
15
15
/// <summary>
16
- /// 获得/设置 保存回调委托
16
+ /// 获得/设置 查询时是否显示正在加载中动画 默认为 false
17
17
/// </summary>
18
18
[ Parameter ]
19
- #if NET6_0_OR_GREATER
20
- [ EditorRequired ]
21
- #endif
22
- public Func < EditContext , Task > ? OnSaveAsync { get ; set ; }
19
+ public bool ShowLoading { get ; set ; }
23
20
24
21
/// <summary>
25
- /// 获得/设置 获得/设置 重置按钮文本
22
+ /// 获得/设置 组件是否采用 Tracking 模式对编辑项进行直接更新 默认 false
26
23
/// </summary>
27
24
[ Parameter ]
28
- [ NotNull ]
29
- public string ? CloseButtonText { get ; set ; }
25
+ public bool IsTracking { get ; set ; }
30
26
31
27
/// <summary>
32
- /// 获得/设置 查询时是否显示正在加载中动画 默认为 false
28
+ /// 获得/设置 实体类编辑模式 Add 还是 Update
33
29
/// </summary>
34
30
[ Parameter ]
35
- public bool ShowLoading { get ; set ; }
31
+ public ItemChangedType ItemChangedType { get ; set ; }
36
32
37
33
/// <summary>
38
- /// 获得/设置 组件是否采用 Tracking 模式对编辑项进行直接更新 默认 false
34
+ /// 获得/设置 保存按钮图标
39
35
/// </summary>
40
36
[ Parameter ]
41
- public bool IsTracking { get ; set ; }
37
+ public string ? SaveButtonIcon { get ; set ; }
42
38
43
39
/// <summary>
44
- /// 获得/设置 实体类编辑模式 Add 还是 Update
40
+ /// 获得/设置 保存按钮文本
45
41
/// </summary>
46
42
[ Parameter ]
47
- public ItemChangedType ItemChangedType { get ; set ; }
43
+ public string ? SaveButtonText { get ; set ; }
48
44
49
45
/// <summary>
50
- /// 获得/设置 查询按钮文本
46
+ /// 获得/设置 保存回调委托 返回 false 时保持编辑弹窗 返回 true 时关闭编辑弹窗
51
47
/// </summary>
52
48
[ Parameter ]
53
- [ NotNull ]
54
- public string ? SaveButtonText { get ; set ; }
49
+ #if NET6_0_OR_GREATER
50
+ [ EditorRequired ]
51
+ #endif
52
+ public Func < EditContext , Task < bool > > ? OnSaveAsync { get ; set ; }
53
+
54
+ /// <summary>
55
+ /// 获得/设置 关闭按钮图标
56
+ /// </summary>
57
+ [ Parameter ]
58
+ public string ? CloseButtonIcon { get ; set ; }
59
+
60
+ /// <summary>
61
+ /// 获得/设置 获得/设置 重置按钮文本
62
+ /// </summary>
63
+ [ Parameter ]
64
+ public string ? CloseButtonText { get ; set ; }
55
65
56
66
/// <summary>
57
67
/// 获得/设置 关闭弹窗回调方法
@@ -71,11 +81,8 @@ public partial class EditDialog<TModel>
71
81
[ Parameter ]
72
82
public RenderFragment < TModel > ? FooterTemplate { get ; set ; }
73
83
74
- /// <summary>
75
- /// 获得/设置 保存按钮图标
76
- /// </summary>
77
- [ Parameter ]
78
- public string ? SaveButtonIcon { get ; set ; }
84
+ [ CascadingParameter ]
85
+ private Func < Task > ? CloseAsync { get ; set ; }
79
86
80
87
[ Inject ]
81
88
[ NotNull ]
@@ -92,6 +99,7 @@ protected override void OnParametersSet()
92
99
{
93
100
base . OnParametersSet ( ) ;
94
101
102
+ CloseButtonIcon ??= IconTheme . GetIconByKey ( ComponentIcons . DialogCloseButtonIcon ) ;
95
103
SaveButtonIcon ??= IconTheme . GetIconByKey ( ComponentIcons . DialogSaveButtonIcon ) ;
96
104
97
105
CloseButtonText ??= Localizer [ nameof ( CloseButtonText ) ] ;
@@ -103,8 +111,13 @@ private async Task OnValidSubmitAsync(EditContext context)
103
111
if ( OnSaveAsync != null )
104
112
{
105
113
await ToggleLoading ( true ) ;
106
- await OnSaveAsync ( context ) ;
114
+ var save = await OnSaveAsync ( context ) ;
107
115
await ToggleLoading ( false ) ;
116
+
117
+ if ( save && CloseAsync != null )
118
+ {
119
+ await CloseAsync ( ) ;
120
+ }
108
121
}
109
122
}
110
123
@@ -132,8 +145,9 @@ public async ValueTask ToggleLoading(bool state)
132
145
if ( ! IsTracking )
133
146
{
134
147
builder . OpenComponent < DialogCloseButton > ( 20 ) ;
135
- builder . AddAttribute ( 21 , nameof ( Button . Text ) , CloseButtonText ) ;
136
- builder . AddAttribute ( 22 , nameof ( Button . OnClickWithoutRender ) , OnCloseAsync ) ;
148
+ builder . AddAttribute ( 21 , nameof ( Button . Icon ) , CloseButtonIcon ) ;
149
+ builder . AddAttribute ( 22 , nameof ( Button . Text ) , CloseButtonText ) ;
150
+ builder . AddAttribute ( 23 , nameof ( Button . OnClickWithoutRender ) , OnCloseAsync ) ;
137
151
builder . CloseComponent ( ) ;
138
152
}
139
153
builder . OpenComponent < Button > ( 30 ) ;
0 commit comments