Skip to content

Commit a31e824

Browse files
committed
Refactor dialog handling and improve type safety
Refactored code across multiple components to enhance readability, maintainability, and type safety. Introduced `DialogParameters<TDialog>` to replace the generic `DialogParameters`, ensuring better compile-time checks and reducing runtime errors. - **Contacts.razor**: Updated `ShowEditFormDialog` to use `DialogParameters<TDialog>`. Removed unused methods and improved formatting. - **PicklistSets.razor**: Simplified structure, updated `OnCreate` to use `DialogParameters<TDialog>`, and removed redundant regions. - **Tenants.razor**: Refactored dialog-related methods (`OnCreateTenant`, `OnEditTenant`, etc.) to use `DialogParameters<TDialog>`. Added missing `@using` directives. - **DialogServiceHelper.cs**: Replaced generic `DialogParameters` with strongly-typed `DialogParameters<TDialog>`. Enhanced documentation and updated dialog helper methods for better type safety. Standardized formatting and removed redundant code/comments across all files.
1 parent 3fba1cb commit a31e824

4 files changed

Lines changed: 328 additions & 316 deletions

File tree

src/Server.UI/Pages/Contacts/Contacts.razor

Lines changed: 65 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -160,72 +160,75 @@
160160

161161

162162
@code {
163-
public string? Title { get; private set; }
164-
private int _defaultPageSize = 15;
165-
private HashSet<ContactDto> _selectedContacts = new HashSet<ContactDto>();
166-
private MudDataGrid<ContactDto> _contactsGrid = default!;
167-
private ContactDto _contactDto = new();
168-
private bool _loading;
169-
private bool _uploading;
170-
private bool _exporting;
171-
[CascadingParameter]
172-
private UserProfile? UserProfile { get; set; }
163+
public string? Title { get; private set; }
164+
private int _defaultPageSize = 15;
165+
private HashSet<ContactDto> _selectedContacts = new HashSet<ContactDto>();
166+
private MudDataGrid<ContactDto> _contactsGrid = default!;
167+
private ContactDto _contactDto = new();
168+
private bool _loading;
169+
private bool _uploading;
170+
private bool _exporting;
171+
[CascadingParameter]
172+
private UserProfile? UserProfile { get; set; }
173173

174174

175-
private ContactsWithPaginationQuery _contactsQuery { get; set; } = new();
176-
private ContactsAccessRights _accessRights = new();
175+
private ContactsWithPaginationQuery _contactsQuery { get; set; } = new();
176+
private ContactsAccessRights _accessRights = new();
177177

178-
protected override async Task OnInitializedAsync()
179-
{
180-
Title = L[_contactDto.GetClassDescription()];
181-
_accessRights = await PermissionService.GetAccessRightsAsync<ContactsAccessRights>();
182-
}
183-
184-
private async Task<GridData<ContactDto>> ServerReload(GridState<ContactDto> state)
185-
{
186-
try
187-
{
188-
_loading = true;
189-
_contactsQuery.CurrentUser = UserProfile;
190-
var sortDefinition = state.SortDefinitions.FirstOrDefault();
191-
_contactsQuery.OrderBy = sortDefinition?.SortBy ?? "Id";
192-
_contactsQuery.SortDirection = (sortDefinition != null && sortDefinition.Descending)
193-
? SortDirection.Descending.ToString()
194-
: SortDirection.Ascending.ToString();
195-
_contactsQuery.PageNumber = state.Page + 1;
196-
_contactsQuery.PageSize = state.PageSize;
197-
var result = await Mediator.Send(_contactsQuery).ConfigureAwait(false);
198-
return new GridData<ContactDto>() { TotalItems = result.TotalItems, Items = result.Items };
199-
}
200-
finally
201-
{
202-
_loading = false;
203-
}
178+
protected override async Task OnInitializedAsync()
179+
{
180+
Title = L[_contactDto.GetClassDescription()];
181+
_accessRights = await PermissionService.GetAccessRightsAsync<ContactsAccessRights>();
182+
}
204183

205-
}
206-
private async Task OnSearch(string text)
207-
{
208-
_selectedContacts.Clear();
209-
_contactsQuery.Keyword = text;
210-
await _contactsGrid.ReloadServerData();
211-
}
212-
private async Task OnListViewChanged(ContactListView listview)
213-
{
214-
_contactsQuery.ListView = listview;
215-
await _contactsGrid.ReloadServerData();
216-
}
217-
private async Task OnRefresh()
218-
{
219-
ContactCacheKey.Refresh();
220-
_selectedContacts.Clear();
221-
_contactsQuery.Keyword = string.Empty;
222-
await _contactsGrid.ReloadServerData();
223-
}
224-
private Task ShowEditFormDialog(string title, AddEditContactCommand command)
225-
{
226-
return DialogServiceHelper.ShowFormDialogAsync<ContactFormDialog, AddEditContactCommand>(
227-
title,
228-
command,
184+
private async Task<GridData<ContactDto>> ServerReload(GridState<ContactDto> state)
185+
{
186+
try
187+
{
188+
_loading = true;
189+
_contactsQuery.CurrentUser = UserProfile;
190+
var sortDefinition = state.SortDefinitions.FirstOrDefault();
191+
_contactsQuery.OrderBy = sortDefinition?.SortBy ?? "Id";
192+
_contactsQuery.SortDirection = (sortDefinition != null && sortDefinition.Descending)
193+
? SortDirection.Descending.ToString()
194+
: SortDirection.Ascending.ToString();
195+
_contactsQuery.PageNumber = state.Page + 1;
196+
_contactsQuery.PageSize = state.PageSize;
197+
var result = await Mediator.Send(_contactsQuery).ConfigureAwait(false);
198+
return new GridData<ContactDto>() { TotalItems = result.TotalItems, Items = result.Items };
199+
}
200+
finally
201+
{
202+
_loading = false;
203+
}
204+
205+
}
206+
private async Task OnSearch(string text)
207+
{
208+
_selectedContacts.Clear();
209+
_contactsQuery.Keyword = text;
210+
await _contactsGrid.ReloadServerData();
211+
}
212+
private async Task OnListViewChanged(ContactListView listview)
213+
{
214+
_contactsQuery.ListView = listview;
215+
await _contactsGrid.ReloadServerData();
216+
}
217+
private async Task OnRefresh()
218+
{
219+
ContactCacheKey.Refresh();
220+
_selectedContacts.Clear();
221+
_contactsQuery.Keyword = string.Empty;
222+
await _contactsGrid.ReloadServerData();
223+
}
224+
private Task ShowEditFormDialog(string title, AddEditContactCommand command)
225+
{
226+
return DialogServiceHelper.ShowFormDialogAsync<ContactFormDialog, AddEditContactCommand>(
227+
title,
228+
new DialogParameters<ContactFormDialog>
229+
{
230+
{ x=>x._model,command}
231+
},
229232
async () =>
230233
{
231234
await _contactsGrid.ReloadServerData();

src/Server.UI/Pages/PicklistSets/PicklistSets.razor

Lines changed: 122 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -124,129 +124,132 @@
124124
</MudDataGrid>
125125

126126
@code {
127-
#region Fields & Properties
128-
129-
[CascadingParameter] private Task<AuthenticationState> AuthState { get; set; } = default!;
130-
[CascadingParameter] private UserProfile? UserProfile { get; set; }
131-
private MudDataGrid<PicklistSetDto> _table = null!;
132-
public string Title { get; set; } = "Picklist";
133-
private IList<PicklistSetDto> _keyValueList = new List<PicklistSetDto>();
134-
private HashSet<PicklistSetDto> _selectedItems = new();
135-
private PicklistSetDto SelectedItem { get; set; } = new();
136-
private PicklistSetDto ElementBeforeEdit { get; set; } = new();
137-
138-
private string _searchString = string.Empty;
139-
private Picklist? _searchPicklist;
140-
private int _defaultPageSize = 15;
141-
142-
private PicklistSetsWithPaginationQuery _picklistQuery { get; set; } = new();
143-
private PicklistSetsAccessRights _accessRights = new();
144-
145-
146-
private bool _loading;
147-
private bool _uploading;
148-
private bool _exporting;
149-
150-
#endregion
151-
152-
153-
154-
protected override async Task OnInitializedAsync()
155-
{
156-
Title = L[SelectedItem.GetClassDescription()];
157-
_accessRights = await PermissionService.GetAccessRightsAsync<PicklistSetsAccessRights>();
158-
}
159-
160-
161-
162-
#region Grid Data & Search
163-
164-
private async Task<GridData<PicklistSetDto>> ServerReload(GridState<PicklistSetDto> state)
165-
{
166-
try
167-
{
168-
_loading = true;
169-
_picklistQuery.CurrentUser = UserProfile;
170-
_picklistQuery.Keyword = _searchString;
171-
_picklistQuery.Picklist = _searchPicklist;
172-
_picklistQuery.OrderBy = state.SortDefinitions.FirstOrDefault()?.SortBy ?? "Id";
173-
_picklistQuery.SortDirection = (state.SortDefinitions.FirstOrDefault()?.Descending ?? true)
174-
? SortDirection.Descending.ToString()
175-
: SortDirection.Ascending.ToString();
176-
_picklistQuery.PageNumber = state.Page + 1;
177-
_picklistQuery.PageSize = state.PageSize;
178-
var result = await Mediator.Send(_picklistQuery);
179-
return new GridData<PicklistSetDto> { TotalItems = result.TotalItems, Items = result.Items };
180-
}
181-
finally
182-
{
183-
_loading = false;
184-
}
185-
}
186-
187-
private async Task OnChangedListView(PickListView listview)
188-
{
189-
_picklistQuery.ListView = listview;
190-
await _table.ReloadServerData();
191-
}
192-
193-
private async Task OnKeywordSearch(string text)
194-
{
195-
_searchString = text;
196-
await _table.ReloadServerData();
197-
}
198-
199-
private async Task OnPicklistSearch(Picklist? val)
200-
{
201-
_searchPicklist = val;
202-
await _table.ReloadServerData();
203-
}
204-
205-
private async Task OnRefresh()
206-
{
207-
PicklistSetCacheKey.Refresh();
208-
_searchString = string.Empty;
209-
await InvokeAsync(() => _table.ReloadServerData());
210-
}
211-
212-
#endregion
213-
214-
#region Edit & Commit Changes
215-
216-
private void PicklistChanged(PicklistSetDto item)
217-
{
218-
// Trigger the commit of cell changes.
219-
_table.CommittedItemChanges.InvokeAsync(item);
220-
}
221-
222-
private void CommittedItemChanges(PicklistSetDto item)
223-
{
224-
InvokeAsync(async () =>
225-
{
226-
var command = Mapper.Map<AddEditPicklistSetCommand>(item);
227-
var result = await Mediator.Send(command);
228-
if (!result.Succeeded)
229-
{
230-
Snackbar.Add(result.ErrorMessage, Severity.Error);
231-
}
232-
StateHasChanged();
233-
});
234-
}
235-
236-
#endregion
237-
238-
#region Create & Delete
239-
240-
private Task OnCreate()
241-
{
242-
var command = new AddEditPicklistSetCommand
127+
#region Fields & Properties
128+
129+
[CascadingParameter] private Task<AuthenticationState> AuthState { get; set; } = default!;
130+
[CascadingParameter] private UserProfile? UserProfile { get; set; }
131+
private MudDataGrid<PicklistSetDto> _table = null!;
132+
public string Title { get; set; } = "Picklist";
133+
private IList<PicklistSetDto> _keyValueList = new List<PicklistSetDto>();
134+
private HashSet<PicklistSetDto> _selectedItems = new();
135+
private PicklistSetDto SelectedItem { get; set; } = new();
136+
private PicklistSetDto ElementBeforeEdit { get; set; } = new();
137+
138+
private string _searchString = string.Empty;
139+
private Picklist? _searchPicklist;
140+
private int _defaultPageSize = 15;
141+
142+
private PicklistSetsWithPaginationQuery _picklistQuery { get; set; } = new();
143+
private PicklistSetsAccessRights _accessRights = new();
144+
145+
146+
private bool _loading;
147+
private bool _uploading;
148+
private bool _exporting;
149+
150+
#endregion
151+
152+
153+
154+
protected override async Task OnInitializedAsync()
155+
{
156+
Title = L[SelectedItem.GetClassDescription()];
157+
_accessRights = await PermissionService.GetAccessRightsAsync<PicklistSetsAccessRights>();
158+
}
159+
160+
161+
162+
#region Grid Data & Search
163+
164+
private async Task<GridData<PicklistSetDto>> ServerReload(GridState<PicklistSetDto> state)
165+
{
166+
try
167+
{
168+
_loading = true;
169+
_picklistQuery.CurrentUser = UserProfile;
170+
_picklistQuery.Keyword = _searchString;
171+
_picklistQuery.Picklist = _searchPicklist;
172+
_picklistQuery.OrderBy = state.SortDefinitions.FirstOrDefault()?.SortBy ?? "Id";
173+
_picklistQuery.SortDirection = (state.SortDefinitions.FirstOrDefault()?.Descending ?? true)
174+
? SortDirection.Descending.ToString()
175+
: SortDirection.Ascending.ToString();
176+
_picklistQuery.PageNumber = state.Page + 1;
177+
_picklistQuery.PageSize = state.PageSize;
178+
var result = await Mediator.Send(_picklistQuery);
179+
return new GridData<PicklistSetDto> { TotalItems = result.TotalItems, Items = result.Items };
180+
}
181+
finally
182+
{
183+
_loading = false;
184+
}
185+
}
186+
187+
private async Task OnChangedListView(PickListView listview)
188+
{
189+
_picklistQuery.ListView = listview;
190+
await _table.ReloadServerData();
191+
}
192+
193+
private async Task OnKeywordSearch(string text)
194+
{
195+
_searchString = text;
196+
await _table.ReloadServerData();
197+
}
198+
199+
private async Task OnPicklistSearch(Picklist? val)
200+
{
201+
_searchPicklist = val;
202+
await _table.ReloadServerData();
203+
}
204+
205+
private async Task OnRefresh()
206+
{
207+
PicklistSetCacheKey.Refresh();
208+
_searchString = string.Empty;
209+
await InvokeAsync(() => _table.ReloadServerData());
210+
}
211+
212+
#endregion
213+
214+
#region Edit & Commit Changes
215+
216+
private void PicklistChanged(PicklistSetDto item)
217+
{
218+
// Trigger the commit of cell changes.
219+
_table.CommittedItemChanges.InvokeAsync(item);
220+
}
221+
222+
private void CommittedItemChanges(PicklistSetDto item)
223+
{
224+
InvokeAsync(async () =>
225+
{
226+
var command = Mapper.Map<AddEditPicklistSetCommand>(item);
227+
var result = await Mediator.Send(command);
228+
if (!result.Succeeded)
229+
{
230+
Snackbar.Add(result.ErrorMessage, Severity.Error);
231+
}
232+
StateHasChanged();
233+
});
234+
}
235+
236+
#endregion
237+
238+
#region Create & Delete
239+
240+
private Task OnCreate()
241+
{
242+
var command = new AddEditPicklistSetCommand
243243
{
244244
Name = SelectedItem.Name,
245245
Description = SelectedItem?.Description
246246
};
247-
return DialogServiceHelper.ShowFormDialogAsync<CreatePicklistDialog, AddEditPicklistSetCommand>(
248-
L["Create a picklist"],
249-
command,
247+
return DialogServiceHelper.ShowFormDialogAsync<CreatePicklistDialog, AddEditPicklistSetCommand>(
248+
L["Create a picklist"],
249+
new DialogParameters<CreatePicklistDialog>()
250+
{
251+
{x=>x._model, command }
252+
},
250253
async () =>
251254
{
252255
await _table.ReloadServerData();

0 commit comments

Comments
 (0)