Skip to content

Commit 99d2426

Browse files
authored
Merge pull request #1349 from Blazam-App/deps
New Advanced Search Feature
2 parents 2de1dca + 1170592 commit 99d2426

28 files changed

+644
-568
lines changed

BLAZAM/BLAZAM.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<ImplicitUsings>enable</ImplicitUsings>
77
<ServerGarbageCollection>false</ServerGarbageCollection>
88
<AssemblyVersion>1.5.2</AssemblyVersion>
9-
<Version>2026.02.26.0141</Version>
9+
<Version>2026.03.03.2359</Version>
1010
<IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
1111
<RootNamespace>BLAZAM</RootNamespace>
1212
<GenerateDocumentationFile>True</GenerateDocumentationFile>

BLAZAM/Pages/AdvSearch.razor

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
@page "/advsearch"
2+
@page "/advsearch/{seachGuid}"
3+
@using System.Web
4+
@using BLAZAM.Global.Data
5+
@using BLAZAM.Gui.UI.DataGrids
6+
7+
@inherits SearchPageBase
8+
@attribute [Authorize(Roles = (UserRoles.SearchOUs + "," + UserRoles.SearchComputers + "," + UserRoles.SearchGroups + "," + UserRoles.SearchUsers + "," + UserRoles.SuperAdmin))]
9+
<AuthorizeView Roles="@(UserRoles.SearchOUs + ","+UserRoles.SearchComputers + ","+UserRoles.SearchGroups + "," +UserRoles.SearchUsers+","+UserRoles.SuperAdmin)">
10+
11+
12+
<DemoHelpAlert />
13+
14+
15+
16+
@if (Searcher?.Results.Count > 1)
17+
{
18+
<DirectoryEntryDataGrid IsLoadingData=LoadingData
19+
Entries="Searcher.Results"
20+
ItemsPerPage="50"
21+
NoResultsMessage="@AppLocalization[Lang.No_matching_results]"
22+
RowClicked="@((u)=>{ Nav.NavigateTo(u.Item.SearchUri);})"/>
23+
<MudStack Row=true>
24+
Results found: @Searcher.Results.Count
25+
</MudStack>
26+
27+
28+
}
29+
else if (Searcher?.Results.Count == 1)
30+
{
31+
32+
var result = Searcher.Results[0];
33+
if (result.CanRead)
34+
{
35+
36+
@if (result.IsDeleted)
37+
{
38+
<MudText>@AppLocalization[Lang.Deleted]</MudText>
39+
}
40+
else
41+
{
42+
<ViewDirectoryEntry DirectoryEntry="result" />
43+
}
44+
}
45+
46+
}
47+
48+
else if (LoadingData)
49+
{
50+
<SearchIcon Icon="@SearchIcon" Text="@ModelsTypeName" />
51+
}
52+
else if (Searcher?.Results.Count == 0)
53+
{
54+
<MudAlert Class="mud-alert-filled-info">
55+
No results were found.
56+
</MudAlert>
57+
}
58+
59+
</AuthorizeView>

BLAZAM/Pages/AdvSearch.razor.cs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// Import necessary namespaces for various functionalities
2+
using BLAZAM.ActiveDirectory.Adapters;
3+
using BLAZAM.ActiveDirectory.Interfaces;
4+
using BLAZAM.ActiveDirectory.Searchers;
5+
using BLAZAM.Common.Data;
6+
using BLAZAM.Gui.Layouts;
7+
using BLAZAM.Gui.UI;
8+
using BLAZAM.Gui.UI.Outputs;
9+
using BLAZAM.Services;
10+
using BLAZAM.Services.Helpers;
11+
using Microsoft.AspNetCore.Components;
12+
using MudBlazor;
13+
using System.Diagnostics;
14+
using System.Web;
15+
16+
namespace BLAZAM.Pages
17+
{
18+
/// <summary>
19+
/// Represents a search component that facilitates searching for directory entries based on various parameters and
20+
/// filters.
21+
/// </summary>
22+
/// <remarks>This component integrates with the <see cref="SearchService"/> to manage search parameters
23+
/// and performs searches using the <see cref="ADSearch"/> class. It supports initializing search terms from the
24+
/// URI, handling cascading parameters, and managing search results.</remarks>
25+
public partial class AdvSearch : SearchPageBase
26+
{
27+
[Parameter]
28+
public string? seachGuid { get; set; }
29+
30+
private string? _previousSeachGuid;
31+
32+
protected override async Task OnParametersSetAsync()
33+
{
34+
if (_previousSeachGuid != seachGuid)
35+
{
36+
_previousSeachGuid = seachGuid;
37+
await PerformSearch();
38+
}
39+
}
40+
protected override async Task PerformSearch()
41+
{
42+
LoadingData = true;
43+
if (SearchService.Filters != null && SearchService.Filters.Count > 0)
44+
{
45+
Searcher.Results = await SearchService.Filters.GetFilteredEntries(SearchService.SeachObjectType, DbFactory, Directory);
46+
}
47+
LoadingData = false;
48+
}
49+
}
50+
}

BLAZAM/Pages/Search.razor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
}
3232
</ItemContent>
3333
<Placeholder>
34-
<MudText Typo="Typo.h1">Loading...</MudText>
34+
<MudText Typo="Typo.h1">@AppLocalization[Lang.Loading]...</MudText>
3535

3636

3737
</Placeholder>

BLAZAM/Pages/SearchPage.cs

Lines changed: 0 additions & 152 deletions
This file was deleted.

BLAZAM/Pages/SearchPageBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ private void OnSearchUpdated()
163163
/// null or empty.
164164
/// </remarks>
165165
/// <returns></returns>
166-
protected async Task PerformSearch()
166+
protected virtual async Task PerformSearch()
167167
{
168168
results.Clear();
169169

BLAZAMGui/UI/Dashboard/WidgetContainer.razor

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,5 @@
3939
[Parameter]
4040
public CurrentUserDashboardWidgets Dashboard { get; set; }
4141

42-
protected override async Task OnInitializedAsync()
43-
{
44-
await base.OnInitializedAsync();
45-
46-
}
47-
4842

4943
}

BLAZAMGui/UI/Dashboard/Widgets/ChangedPasswordsWidget.razor.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,12 @@ namespace BLAZAM.Gui.UI.Dashboard.Widgets
44
{
55
public partial class ChangedPasswordsWidget : TimeFrameWidget
66
{
7+
protected override TimeSpan? _timeFrame => JsonSettings?.FromJson<TimeSpan>()??TimeSpan.FromDays(90);
8+
79
public ChangedPasswordsWidget()
810
{
911
Title = Localization.AppLocalization.Changed_Passwords;
1012
WidgetType = DashboardWidgetType.PasswordsChanged;
11-
if (_timeFrame == null)
12-
{
13-
_timeFrame = TimeSpan.FromDays(90);
14-
}
1513
}
1614

1715
private List<IADUser> LockedUsers = [];
@@ -20,7 +18,6 @@ public ChangedPasswordsWidget()
2018
protected override async Task RefreshDataAsync()
2119
{
2220
LoadingData = true;
23-
LoadSettings();
2421
LockedUsers = (await Directory.Users.FindChangedPasswordUsersAsync((int)_timeFrame!.Value.TotalDays, false)).Where(u => u.CanRead).ToList();
2522
LoadingData = false;
2623

BLAZAMGui/UI/Dashboard/Widgets/DeletedEntriesWidget.razor.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ private List<IDirectoryEntryAdapter> DeletedEntries
2020
protected override async Task RefreshDataAsync()
2121
{
2222
LoadingData = true;
23-
LoadSettings();
2423

2524
var search = new ADSearch(Directory)
2625
{
Lines changed: 9 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,12 @@
1-
@inherits Widget
1+
@using BLAZAM.Gui.UI.DataGrids
2+
@inherits Widget
23
@attribute [Authorize]
3-
4-
<MudDataGrid T="IDirectoryEntryAdapter"
5-
Items="FavoriteEntries"
6-
RowClick="@RowClicked"
7-
RowClass="cursor-pointer"
8-
Dense=true
9-
Filterable=true
10-
RowsPerPage="@ItemsPerPage"
11-
RowsPerPageChanged="@SetRowsPerPage"
12-
FilterMode="DataGridFilterMode.Simple"
13-
Loading=@LoadingData
14-
Square=true
15-
ColumnResizeMode="ResizeMode.Column"
16-
Virtualize=true
17-
Class="py-0"
18-
SortMode="SortMode.Single">
19-
<Columns>
20-
<TemplateColumn Style="width:100px;" Title=@AppLocalization[Lang.Type]>
21-
<CellTemplate>
22-
<DirectoryEntryTypeIcon Entry=context.Item />
23-
24-
</CellTemplate>
25-
</TemplateColumn>
26-
<TemplateColumn Title=@AppLocalization[Lang.Name]>
27-
<CellTemplate>
28-
<DirectoryEntryLink Entry="@context.Item" OnChanged="RefreshDataAsync" />
29-
</CellTemplate>
30-
</TemplateColumn>
31-
<TemplateColumn Title=@AppLocalization[Lang.Changed]>
32-
<CellTemplate>
33-
@if (context.Item?.LastChanged != null)
34-
{
35-
<MudText>@context.Item.LastChanged?.ToLocalTime()</MudText>
36-
}
37-
</CellTemplate>
38-
</TemplateColumn>
39-
</Columns>
40-
<PagerContent>
41-
<MudDataGridPager PageSizeOptions=@([5, 10, 25, 50, 100]) T="IDirectoryEntryAdapter" />
42-
</PagerContent>
43-
<NoRecordsContent>
44-
<MudText>@AppLocalization[Lang.No_Favorites]</MudText>
45-
</NoRecordsContent>
46-
</MudDataGrid>
4+
<DirectoryEntryDataGrid Entries="FavoriteEntries"
5+
RowClicked="RowClicked"
6+
IsLoadingData="LoadingData"
7+
ItemsPerPage="ItemsPerPage"
8+
ItemsPerPageChanged="SetRowsPerPage"
9+
EntryChanged="RefreshDataAsync"
10+
NoResultsMessage="@AppLocalization[Lang.No_Favorites]" />
4711

4812

0 commit comments

Comments
 (0)