Browse Source

Project input , version input , language code input , format input converted to Combobox

pull/13804/head
Salih 4 years ago
parent
commit
5a84785fdc
  1. 3
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Documents/IDocumentAdminAppService.cs
  2. 37
      modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs
  3. 6
      modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/DocumentsAdminClientProxy.Generated.cs
  4. 9
      modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/ProjectsAdminClientProxy.cs
  5. 8
      modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/DocumentsAdminController.cs
  6. 56
      modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/Index.cshtml
  7. 27
      modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/Index.cshtml.cs
  8. 66
      modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.js
  9. 29
      modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/Filter/a.cs
  10. 3
      modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/IDocumentRepository.cs
  11. 43
      modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs
  12. 6
      modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs

3
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Documents/IDocumentAdminAppService.cs

@ -3,6 +3,8 @@ using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
using Volo.Docs.Admin.Projects;
using Volo.Docs.Documents.Filter;
namespace Volo.Docs.Admin.Documents
{
@ -19,5 +21,6 @@ namespace Volo.Docs.Admin.Documents
Task RemoveFromCacheAsync(Guid documentId);
Task ReindexAsync(Guid documentId);
Task<FilterItems> GetFilterItemsAsync();
}
}

37
modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentAdminAppService.cs

@ -11,6 +11,7 @@ using Volo.Abp.Application.Services;
using Volo.Abp.Caching;
using Volo.Docs.Caching;
using Volo.Docs.Documents;
using Volo.Docs.Documents.Filter;
using Volo.Docs.Documents.FullSearch.Elastic;
using Volo.Docs.Localization;
using Volo.Docs.Projects;
@ -217,6 +218,42 @@ namespace Volo.Docs.Admin.Documents
await _elasticSearchService.AddOrUpdateAsync(document);
}
public Task<FilterItems> GetFilterItemsAsync()
{
// return _filterItemsCache.GetAsync(
// CacheKeyGenerator.GenerateFilterItemsCacheKey(),
// async () =>
// {
// var filterItems = new FilterItems();
// var projects = await _projectRepository.GetListAsync();
// foreach (var project in projects)
// {
// var projectFilterItems = new FilterItems();
// var documents = await _documentRepository.GetListByProjectId(project.Id);
// foreach (var document in documents)
// {
// projectFilterItems.Add(new FilterItem
// {
// Name = document.Name,
// Value = document.Name
// });
// }
//
// filterItems.Add(new FilterItem
// {
// Name = project.Name,
// Value = project.Name,
// Items = projectFilterItems
// });
// }
//
// return filterItems;
// }
// );
return _documentRepository.GetFilterItemsAsync();
}
private async Task UpdateDocumentUpdateInfoCache(Document document)
{
var cacheKey = $"DocumentUpdateInfo{document.ProjectId}#{document.Name}#{document.LanguageCode}#{document.Version}";

6
modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/DocumentsAdminClientProxy.Generated.cs

@ -7,6 +7,7 @@ using Volo.Abp.Http.Modeling;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Http.Client.ClientProxying;
using Volo.Docs.Admin.Documents;
using Volo.Docs.Documents.Filter;
// ReSharper disable once CheckNamespace
namespace Volo.Docs.Admin.ClientProxies;
@ -62,4 +63,9 @@ public partial class DocumentsAdminClientProxy : ClientProxyBase<IDocumentAdminA
{ typeof(Guid), documentId }
});
}
public Task<FilterItems> GetFilterItemsAsync()
{
throw new NotImplementedException();
}
}

9
modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/ProjectsAdminClientProxy.cs

@ -1,7 +1,16 @@
// This file is part of ProjectsAdminClientProxy, you can customize it here
// ReSharper disable once CheckNamespace
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Docs.Admin.Projects;
namespace Volo.Docs.Admin.ClientProxies;
public partial class ProjectsAdminClientProxy
{
public async Task<FilterComboboxValuesDto> GetFilterComboboxAsync()
{
return await this.RequestAsync<FilterComboboxValuesDto>(nameof(GetFilterComboboxAsync));
}
}

8
modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/DocumentsAdminController.cs

@ -6,6 +6,7 @@ using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Docs.Admin.Documents;
using Volo.Docs.Documents.Filter;
namespace Volo.Docs.Admin
{
@ -63,5 +64,12 @@ namespace Volo.Docs.Admin
{
await _documentAdminAppService.ReindexAsync(documentId);
}
[HttpGet]
[Route("GetFilterItems")]
public Task<FilterItems> GetFilterItemsAsync()
{
return _documentAdminAppService.GetFilterItemsAsync();
}
}
}

56
modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/Index.cshtml

@ -38,10 +38,16 @@
<div class="input-group mb-2">
<div class="input-group-text">@L["Project"].Value</div>
<input type="text"
id="ProjectId"
name="ProjectId"
class="form-control">
<select
id="ProjectId"
name="ProjectId"
class="form-select">
<option></option>
@foreach (var project in Model.FilterItems.Projects)
{
<option value="@project.Id">@project.Name</option>
}
</select>
</div>
</abp-column>
@ -49,10 +55,16 @@
<div class="input-group mb-2">
<div class="input-group-text">@L["Version"].Value</div>
<input type="text"
id="Version"
name="Version"
class="form-control">
<select
id="Version"
name="Version"
class="form-select">
<option></option>
@foreach (var version in Model.FilterItems.Versions)
{
<option value="@version.Version" data-version="@Model.ToJson(version)">@version.Version</option>
}
</select>
</div>
</abp-column>
@ -71,10 +83,16 @@
<div class="input-group mb-2">
<div class="input-group-text">@L["LanguageCode"].Value</div>
<input type="text"
id="LanguageCode"
name="LanguageCode"
class="form-control">
<select
id="LanguageCode"
name="LanguageCode"
class="form-select">
<option></option>
@foreach (var language in Model.FilterItems.Languages)
{
<option value="@language.Code" data-language="@Model.ToJson(language)">@language.Code</option>
}
</select>
</div>
</abp-column>
<abp-column size="Auto">
@ -143,10 +161,16 @@
<div class="input-group mb-2">
<div class="input-group-text">@L["Format"].Value</div>
<input type="text"
id="Format"
name="Format"
class="form-control">
<select
id="Format"
name="Format"
class="form-select">
<option></option>
@foreach (var format in Model.FilterItems.Formats)
{
<option value="@format">@format</option>
}
</select>
</div>
</abp-column>

27
modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/Index.cshtml.cs

@ -1,14 +1,35 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Volo.Docs.Admin.Documents;
using Volo.Docs.Admin.Projects;
using Volo.Docs.Documents.Filter;
namespace Volo.Docs.Admin.Pages.Docs.Admin.Documents;
[Authorize(DocsAdminPermissions.Projects.Default)]
public class IndexModel : DocsAdminPageModel
{
public virtual Task<IActionResult> OnGet()
private readonly IDocumentAdminAppService _documentAdminAppService;
public FilterItems FilterItems { get; set; }
public IndexModel(IDocumentAdminAppService documentAdminAppService)
{
_documentAdminAppService = documentAdminAppService;
}
public string ToJson(object obj)
{
return JsonConvert.SerializeObject(obj);
}
public virtual async Task<IActionResult> OnGet()
{
return Task.FromResult<IActionResult>(Page());
FilterItems = await _documentAdminAppService.GetFilterItemsAsync();
return Page();
}
}
}

66
modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.js

@ -5,7 +5,73 @@ $(function () {
var getFormattedDate = function ($datePicker) {
return $datePicker.data().datepicker.getFormattedDate('yyyy-mm-dd');
};
var $projectId = $('#ProjectId');
var $version = $('#Version');
var $languageCode = $('#LanguageCode');
function $getOptions($select){
var select = $select.get(0);
return $(select.options)
}
function showLanguages(){
var selectedProjectId = $projectId.val();
var selectedVersion = $version.val();
var languages = $getOptions($languageCode);
languages.each(function(){
var language = $(this);
var languageCodeDto = language.attr('data-language');
if(!languageCodeDto) return;
languageCodeDto = JSON.parse(languageCodeDto);
if((!selectedVersion || languageCodeDto.Versions.includes(selectedVersion))
&& (!selectedProjectId || languageCodeDto.ProjectIds.includes(selectedProjectId)))
{
language.show();
}
else{
language.hide();
if(language.is(':selected')){
$languageCode.val('');
}
}
});
}
function showVersions(){
var selectedProjectId = $projectId.val();
var selectedLanguageCode = $languageCode.val();
var versions = $getOptions($version);
versions.each(function(){
var version = $(this);
var verisonDto = version.attr('data-version');
if(!verisonDto) return;
verisonDto = JSON.parse(verisonDto);
if((!selectedLanguageCode || verisonDto.Languages.includes(selectedLanguageCode))
&& (!selectedProjectId || verisonDto.ProjectIds.includes(selectedProjectId)))
{
version.show();
}
else{
version.hide();
if(version.is(':selected')){
$version.val('');
}
}
});
}
$projectId.on('change', function () {
showVersions();
showLanguages();
});
$version.on('change', function () {
showLanguages();
});
$languageCode.on('change', function () {
showVersions();
});
var getFilter = function () {
return {
projectId: $('#ProjectId').val(),

29
modules/docs/src/Volo.Docs.Domain.Shared/Volo/Docs/Documents/Filter/a.cs

@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
namespace Volo.Docs.Documents.Filter;
public class FilterItems
{
public IEnumerable<FilterProjectItem> Projects { get; set; }
public IEnumerable<FilterVersionItem> Versions { get; set; }
public IEnumerable<FilterLanguageCodeItem> Languages { get; set; }
public IEnumerable<string> Formats { get; set; }
}
public class FilterProjectItem
{
public Guid Id { get; set; }
public string Name { get; set; }
}
public class FilterVersionItem
{
public string Version { get; set; }
public IEnumerable<Guid> ProjectIds { get; set; }
public IEnumerable<string> Languages { get; set; }
}
public class FilterLanguageCodeItem
{
public string Code { get; set; }
public IEnumerable<Guid> ProjectIds { get; set; }
public IEnumerable<string> Versions { get; set; }
}

3
modules/docs/src/Volo.Docs.Domain/Volo/Docs/Documents/IDocumentRepository.cs

@ -3,6 +3,8 @@ using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
using Volo.Docs.Documents.Filter;
using Volo.Docs.Projects;
namespace Volo.Docs.Documents
{
@ -73,5 +75,6 @@ namespace Volo.Docs.Documents
CancellationToken cancellationToken = default);
Task<Document> GetAsync(Guid id, CancellationToken cancellationToken = default);
Task<FilterItems> GetFilterItemsAsync(CancellationToken cancellationToken = default);
}
}

43
modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/Documents/EFCoreDocumentRepository.cs

@ -7,6 +7,7 @@ using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
using Volo.Docs.Documents.Filter;
using Volo.Docs.EntityFrameworkCore;
namespace Volo.Docs.Documents
@ -216,5 +217,47 @@ namespace Volo.Docs.Documents
LastCachedTime = x.d.LastCachedTime
});
}
public async Task<FilterItems> GetFilterItemsAsync(CancellationToken cancellationToken = default)
{
var dbContext = await GetDbContextAsync();
var filterItems = new FilterItems();
filterItems.Formats = await dbContext.Documents.Select(x => x.Format).Distinct().ToListAsync(cancellationToken);
filterItems.Projects = await dbContext.Projects
.Select(x=>new FilterProjectItem()
{
Id = x.Id,
Name = x.Name
})
.OrderBy(x=>x.Name)
.ToListAsync(GetCancellationToken(cancellationToken));
filterItems.Versions = await dbContext.Documents
.GroupBy(x => x.Version)
.Select(x => new FilterVersionItem
{
ProjectIds = x.Select(x2 => x2.ProjectId).Distinct(),
Version = x.Key,
Languages = x.Select(x2 => x2.LanguageCode).Distinct()
})
.OrderByDescending(x => x.Version)
.ToListAsync(GetCancellationToken(cancellationToken));
filterItems.Languages = await dbContext.Documents
.GroupBy(x => x.LanguageCode)
.Select(x => new FilterLanguageCodeItem
{
ProjectIds = x.Select(x2 => x2.ProjectId).Distinct(),
Code = x.Key,
Versions = x.Select(x2 => x2.Version).Distinct()
})
.OrderBy(x=>x.Code)
.ToListAsync(GetCancellationToken(cancellationToken));
return filterItems;
}
}
}

6
modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/Documents/MongoDocumentRepository.cs

@ -8,6 +8,7 @@ using Volo.Abp.Domain.Repositories.MongoDB;
using Volo.Abp.MongoDB;
using MongoDB.Driver.Linq;
using MongoDB.Driver;
using Volo.Docs.Documents.Filter;
using Volo.Docs.MongoDB;
@ -156,6 +157,11 @@ namespace Volo.Docs.Documents
return await (await GetMongoQueryableAsync(cancellationToken)).Where(x => x.Id == id).SingleAsync(GetCancellationToken(cancellationToken));
}
public Task<FilterItems> GetFilterItemsAsync(CancellationToken cancellationToken = default)
{
throw new NotImplementedException();
}
protected virtual async Task<IMongoQueryable<DocumentWithoutContent>> ApplyFilterForGetAll(
IMongoQueryable<Document> query,
Guid? projectId,

Loading…
Cancel
Save