refactoring the code.
This commit is contained in:
@ -1,22 +1,26 @@
|
||||
@using Oqtane.Modules.SearchResults.Services
|
||||
@namespace Oqtane.Modules.SearchResults
|
||||
@using Microsoft.AspNetCore.Http
|
||||
@using Oqtane.Services
|
||||
@using System.Net
|
||||
@namespace Oqtane.Modules.Admin.SearchResults
|
||||
@inherits ModuleBase
|
||||
@inject ISearchResultsService SearchResultsService
|
||||
@inject IStringLocalizer<Index> Localizer
|
||||
@inject IHttpContextAccessor HttpContext
|
||||
|
||||
<div class="search-result-container">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text">@Localizer["SearchPrefix"]</span>
|
||||
<input type="text" class="form-control shadow-none" maxlength="50"
|
||||
aria-label="Keywords"
|
||||
placeholder="@Localizer["SearchPlaceholder"]"
|
||||
@bind="_keywords"
|
||||
@bind:event="oninput"
|
||||
@onkeypress="KeywordsChanged">
|
||||
<button class="btn btn-primary shadow-none" type="button" @onclick="@(async () => await Search())">@Localizer["Search"]</button>
|
||||
</div>
|
||||
<form method="post" @formname="SearchInputForm" @onsubmit="@(async () => await Search())" data-enhance>
|
||||
<div class="input-group mb-3">
|
||||
<span class="input-group-text">@Localizer["SearchPrefix"]</span>
|
||||
<input type="hidden" name="@Constants.RequestVerificationToken" value="@SiteState.AntiForgeryToken" />
|
||||
<input type="text" name="keywords" class="form-control shadow-none" maxlength="50"
|
||||
aria-label="Keywords"
|
||||
placeholder="@Localizer["SearchPlaceholder"]"
|
||||
@bind-value="_keywords">
|
||||
<button class="btn btn-primary shadow-none" type="submit">@Localizer["Search"]</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
@ -35,12 +39,13 @@
|
||||
Format="Grid"
|
||||
PageSize="@_pageSize.ToString()"
|
||||
DisplayPages="@_displayPages.ToString()"
|
||||
CurrentPage="@_currentPage.ToString()" Columns="1"
|
||||
Toolbar="Bottom">
|
||||
CurrentPage="@_currentPage.ToString()"
|
||||
Columns="1"
|
||||
Toolbar="Bottom"
|
||||
Parameters="@($"q={_keywords}")">
|
||||
<Row>
|
||||
<div class="search-item">
|
||||
<h4 class="mb-1"><a href="@context.Url">@context.Title</a></h4>
|
||||
<div class="font-13 text-success mb-3">@context.Url</div>
|
||||
<p class="mb-0 text-muted">@((MarkupString)context.Snippet)</p>
|
||||
</div>
|
||||
</Row>
|
||||
@ -59,13 +64,16 @@
|
||||
</div>
|
||||
</div>
|
||||
@code {
|
||||
public override string RenderMode => RenderModes.Static;
|
||||
private const int SearchDefaultPageSize = 10;
|
||||
|
||||
private SearchSortDirections _searchSortDirection = SearchSortDirections.Descending; //default sort by
|
||||
private SearchSortFields _searchSortField = SearchSortFields.Relevance;
|
||||
private string _keywords;
|
||||
private bool _loading;
|
||||
private SearchResults _searchResults;
|
||||
private int _currentPage = 0;
|
||||
private int _pageSize = Constants.SearchDefaultPageSize;
|
||||
private int _pageSize = SearchDefaultPageSize;
|
||||
private int _displayPages = 7;
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
@ -75,18 +83,9 @@
|
||||
_pageSize = int.Parse(ModuleState.Settings["PageSize"]);
|
||||
}
|
||||
|
||||
if (PageState.QueryString.ContainsKey("s"))
|
||||
if (PageState.QueryString.ContainsKey("q"))
|
||||
{
|
||||
_keywords = PageState.QueryString["s"];
|
||||
}
|
||||
|
||||
if (PageState.QueryString.ContainsKey("p"))
|
||||
{
|
||||
_currentPage = Convert.ToInt32(PageState.QueryString["p"]);
|
||||
if (_currentPage < 1)
|
||||
{
|
||||
_currentPage = 1;
|
||||
}
|
||||
_keywords = WebUtility.UrlDecode(PageState.QueryString["q"]);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(_keywords))
|
||||
@ -95,19 +94,9 @@
|
||||
}
|
||||
}
|
||||
|
||||
private async Task KeywordsChanged(KeyboardEventArgs e)
|
||||
{
|
||||
if (e.Code == "Enter" || e.Code == "NumpadEnter")
|
||||
{
|
||||
if (!string.IsNullOrEmpty(_keywords))
|
||||
{
|
||||
await Search();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async Task Search()
|
||||
{
|
||||
_keywords = HttpContext.HttpContext.Request.Form["keywords"];
|
||||
if (string.IsNullOrEmpty(_keywords))
|
||||
{
|
||||
AddModuleMessage(Localizer["MissingKeywords"], MessageType.Warning);
|
||||
@ -116,7 +105,6 @@
|
||||
{
|
||||
ClearModuleMessage();
|
||||
|
||||
|
||||
_currentPage = 0;
|
||||
await PerformSearch();
|
||||
}
|
@ -3,19 +3,18 @@ using Oqtane.Documentation;
|
||||
using Oqtane.Models;
|
||||
using Oqtane.Shared;
|
||||
|
||||
namespace Oqtane.Modules.SearchResults
|
||||
namespace Oqtane.Modules.Admin.SearchResults
|
||||
{
|
||||
[PrivateApi("Mark SearchResults classes as private, since it's not very useful in the public docs")]
|
||||
[PrivateApi("Mark this as private, since it's not very useful in the public docs")]
|
||||
public class ModuleInfo : IModule
|
||||
{
|
||||
public ModuleDefinition ModuleDefinition => new ModuleDefinition
|
||||
{
|
||||
Name = "Search Results",
|
||||
Description = "Display Search Results",
|
||||
Version = "1.0.0",
|
||||
Version = Constants.Version,
|
||||
ServerManagerType = "",
|
||||
ReleaseVersions = "1.0.0",
|
||||
SettingsType = "Oqtane.Modules.SearchResults.Settings, Oqtane.Client",
|
||||
SettingsType = "Oqtane.Modules.Admin.SearchResults.Settings, Oqtane.Client",
|
||||
Resources = new List<Resource>()
|
||||
{
|
||||
new Resource { ResourceType = ResourceType.Stylesheet, Url = "~/Module.css" }
|
@ -1,7 +1,7 @@
|
||||
@namespace Oqtane.Modules.SearchResults
|
||||
@namespace Oqtane.Modules.Admin.SearchResults
|
||||
@inherits ModuleBase
|
||||
@inject ISettingService SettingService
|
||||
@implements Oqtane.Interfaces.ISettingsControl
|
||||
@inject ISettingService SettingService
|
||||
@inject IStringLocalizer<Settings> Localizer
|
||||
@inject IStringLocalizer<SharedResources> SharedLocalizer
|
||||
|
||||
@ -15,14 +15,16 @@
|
||||
</div>
|
||||
|
||||
@code {
|
||||
private string resourceType = "Oqtane.Modules.SearchResults.Settings, Oqtane.Client"; // for localization
|
||||
private const string SearchDefaultPageSize = "10";
|
||||
|
||||
private string resourceType = "Oqtane.Modules.Admin.SearchResults.Settings, Oqtane.Client"; // for localization
|
||||
private string _pageSize;
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
try
|
||||
{
|
||||
_pageSize = SettingService.GetSetting(ModuleState.Settings, "PageSize", Constants.SearchDefaultPageSize.ToString());
|
||||
_pageSize = SettingService.GetSetting(ModuleState.Settings, "PageSize", SearchDefaultPageSize);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
@ -1,13 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using Oqtane.Documentation;
|
||||
using Oqtane.Models;
|
||||
|
||||
namespace Oqtane.Modules.SearchResults.Services
|
||||
{
|
||||
[PrivateApi("Mark SearchResults classes as private, since it's not very useful in the public docs")]
|
||||
public interface ISearchResultsService
|
||||
{
|
||||
Task<Models.SearchResults> SearchAsync(int moduleId, SearchQuery searchQuery);
|
||||
}
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Net.Http;
|
||||
using System.Threading.Tasks;
|
||||
using Oqtane.Documentation;
|
||||
using Oqtane.Models;
|
||||
using Oqtane.Services;
|
||||
using Oqtane.Shared;
|
||||
|
||||
namespace Oqtane.Modules.SearchResults.Services
|
||||
{
|
||||
[PrivateApi("Mark SearchResults classes as private, since it's not very useful in the public docs")]
|
||||
public class SearchResultsService : ServiceBase, ISearchResultsService, IClientService
|
||||
{
|
||||
public SearchResultsService(HttpClient http, SiteState siteState) : base(http, siteState) {}
|
||||
|
||||
private string ApiUrl => CreateApiUrl("SearchResults");
|
||||
|
||||
public async Task<Models.SearchResults> SearchAsync(int moduleId, SearchQuery searchQuery)
|
||||
{
|
||||
return await PostJsonAsync<SearchQuery, Models.SearchResults>(CreateAuthorizationPolicyUrl(ApiUrl, EntityNames.Module, moduleId), searchQuery);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user