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 System.Threading.Tasks;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services; using Volo.Abp.Application.Services;
using Volo.Docs.Admin.Projects;
using Volo.Docs.Documents.Filter;
namespace Volo.Docs.Admin.Documents namespace Volo.Docs.Admin.Documents
{ {
@ -19,5 +21,6 @@ namespace Volo.Docs.Admin.Documents
Task RemoveFromCacheAsync(Guid documentId); Task RemoveFromCacheAsync(Guid documentId);
Task ReindexAsync(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.Abp.Caching;
using Volo.Docs.Caching; using Volo.Docs.Caching;
using Volo.Docs.Documents; using Volo.Docs.Documents;
using Volo.Docs.Documents.Filter;
using Volo.Docs.Documents.FullSearch.Elastic; using Volo.Docs.Documents.FullSearch.Elastic;
using Volo.Docs.Localization; using Volo.Docs.Localization;
using Volo.Docs.Projects; using Volo.Docs.Projects;
@ -217,6 +218,42 @@ namespace Volo.Docs.Admin.Documents
await _elasticSearchService.AddOrUpdateAsync(document); 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) private async Task UpdateDocumentUpdateInfoCache(Document document)
{ {
var cacheKey = $"DocumentUpdateInfo{document.ProjectId}#{document.Name}#{document.LanguageCode}#{document.Version}"; 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.DependencyInjection;
using Volo.Abp.Http.Client.ClientProxying; using Volo.Abp.Http.Client.ClientProxying;
using Volo.Docs.Admin.Documents; using Volo.Docs.Admin.Documents;
using Volo.Docs.Documents.Filter;
// ReSharper disable once CheckNamespace // ReSharper disable once CheckNamespace
namespace Volo.Docs.Admin.ClientProxies; namespace Volo.Docs.Admin.ClientProxies;
@ -62,4 +63,9 @@ public partial class DocumentsAdminClientProxy : ClientProxyBase<IDocumentAdminA
{ typeof(Guid), documentId } { 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 // This file is part of ProjectsAdminClientProxy, you can customize it here
// ReSharper disable once CheckNamespace // ReSharper disable once CheckNamespace
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Docs.Admin.Projects;
namespace Volo.Docs.Admin.ClientProxies; namespace Volo.Docs.Admin.ClientProxies;
public partial class ProjectsAdminClientProxy 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.Application.Dtos;
using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc;
using Volo.Docs.Admin.Documents; using Volo.Docs.Admin.Documents;
using Volo.Docs.Documents.Filter;
namespace Volo.Docs.Admin namespace Volo.Docs.Admin
{ {
@ -63,5 +64,12 @@ namespace Volo.Docs.Admin
{ {
await _documentAdminAppService.ReindexAsync(documentId); 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 mb-2">
<div class="input-group-text">@L["Project"].Value</div> <div class="input-group-text">@L["Project"].Value</div>
<input type="text" <select
id="ProjectId" id="ProjectId"
name="ProjectId" name="ProjectId"
class="form-control"> class="form-select">
<option></option>
@foreach (var project in Model.FilterItems.Projects)
{
<option value="@project.Id">@project.Name</option>
}
</select>
</div> </div>
</abp-column> </abp-column>
@ -49,10 +55,16 @@
<div class="input-group mb-2"> <div class="input-group mb-2">
<div class="input-group-text">@L["Version"].Value</div> <div class="input-group-text">@L["Version"].Value</div>
<input type="text" <select
id="Version" id="Version"
name="Version" name="Version"
class="form-control"> 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> </div>
</abp-column> </abp-column>
@ -71,10 +83,16 @@
<div class="input-group mb-2"> <div class="input-group mb-2">
<div class="input-group-text">@L["LanguageCode"].Value</div> <div class="input-group-text">@L["LanguageCode"].Value</div>
<input type="text" <select
id="LanguageCode" id="LanguageCode"
name="LanguageCode" name="LanguageCode"
class="form-control"> 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> </div>
</abp-column> </abp-column>
<abp-column size="Auto"> <abp-column size="Auto">
@ -143,10 +161,16 @@
<div class="input-group mb-2"> <div class="input-group mb-2">
<div class="input-group-text">@L["Format"].Value</div> <div class="input-group-text">@L["Format"].Value</div>
<input type="text" <select
id="Format" id="Format"
name="Format" name="Format"
class="form-control"> class="form-select">
<option></option>
@foreach (var format in Model.FilterItems.Formats)
{
<option value="@format">@format</option>
}
</select>
</div> </div>
</abp-column> </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 System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; 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; namespace Volo.Docs.Admin.Pages.Docs.Admin.Documents;
[Authorize(DocsAdminPermissions.Projects.Default)] [Authorize(DocsAdminPermissions.Projects.Default)]
public class IndexModel : DocsAdminPageModel 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) { var getFormattedDate = function ($datePicker) {
return $datePicker.data().datepicker.getFormattedDate('yyyy-mm-dd'); 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 () { var getFilter = function () {
return { return {
projectId: $('#ProjectId').val(), 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;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories; using Volo.Abp.Domain.Repositories;
using Volo.Docs.Documents.Filter;
using Volo.Docs.Projects;
namespace Volo.Docs.Documents namespace Volo.Docs.Documents
{ {
@ -73,5 +75,6 @@ namespace Volo.Docs.Documents
CancellationToken cancellationToken = default); CancellationToken cancellationToken = default);
Task<Document> GetAsync(Guid id, 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 Microsoft.EntityFrameworkCore;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore;
using Volo.Docs.Documents.Filter;
using Volo.Docs.EntityFrameworkCore; using Volo.Docs.EntityFrameworkCore;
namespace Volo.Docs.Documents namespace Volo.Docs.Documents
@ -216,5 +217,47 @@ namespace Volo.Docs.Documents
LastCachedTime = x.d.LastCachedTime 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 Volo.Abp.MongoDB;
using MongoDB.Driver.Linq; using MongoDB.Driver.Linq;
using MongoDB.Driver; using MongoDB.Driver;
using Volo.Docs.Documents.Filter;
using Volo.Docs.MongoDB; 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)); 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( protected virtual async Task<IMongoQueryable<DocumentWithoutContent>> ApplyFilterForGetAll(
IMongoQueryable<Document> query, IMongoQueryable<Document> query,
Guid? projectId, Guid? projectId,

Loading…
Cancel
Save