From 5c541897808bd96f08a21beac8247b2dbfe61587 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Fri, 27 Mar 2020 12:34:18 +0300 Subject: [PATCH] add home page #3381 --- .../Controllers/HomeController.cs | 19 ------ .../docs/app/VoloDocs.Web/Pages/Index.cshtml | 23 ++++++++ .../app/VoloDocs.Web/Pages/Index.cshtml.cs | 59 +++++++++++++++++++ 3 files changed, 82 insertions(+), 19 deletions(-) delete mode 100644 modules/docs/app/VoloDocs.Web/Controllers/HomeController.cs create mode 100644 modules/docs/app/VoloDocs.Web/Pages/Index.cshtml create mode 100644 modules/docs/app/VoloDocs.Web/Pages/Index.cshtml.cs diff --git a/modules/docs/app/VoloDocs.Web/Controllers/HomeController.cs b/modules/docs/app/VoloDocs.Web/Controllers/HomeController.cs deleted file mode 100644 index 17c6550502..0000000000 --- a/modules/docs/app/VoloDocs.Web/Controllers/HomeController.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Volo.Abp.AspNetCore.Mvc; - -namespace VoloDocs.Web.Controllers -{ - public class HomeController : AbpController - { - public void Index() - { - //if (!_urlUiOptions.RoutePrefix.IsNullOrWhiteSpace()) - //{ - // return Redirect("." + _urlUiOptions.RoutePrefix); - //} - - //return Page(); - - //return Redirect("/en/abp/latest"); - } - } -} diff --git a/modules/docs/app/VoloDocs.Web/Pages/Index.cshtml b/modules/docs/app/VoloDocs.Web/Pages/Index.cshtml new file mode 100644 index 0000000000..0a212f1499 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/Pages/Index.cshtml @@ -0,0 +1,23 @@ +@page +@model VoloDocs.Web.Pages.IndexModel +@{ +} + +@if (!Model.Projects.Any()) +{ + + No projects found!
+ See documentation to see how you can create a new one. +
+} +else +{ +

Projects

+ + + @foreach (var project in Model.Projects) + { + @project.Name + } + +} \ No newline at end of file diff --git a/modules/docs/app/VoloDocs.Web/Pages/Index.cshtml.cs b/modules/docs/app/VoloDocs.Web/Pages/Index.cshtml.cs new file mode 100644 index 0000000000..537d650f83 --- /dev/null +++ b/modules/docs/app/VoloDocs.Web/Pages/Index.cshtml.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.Extensions.Options; +using Volo.Docs; +using Volo.Docs.Projects; + +namespace VoloDocs.Web.Pages +{ + public class IndexModel : PageModel + { + public IReadOnlyList Projects { get; set; } + + private readonly DocsUiOptions _urlUiOptions; + + private readonly IProjectAppService _projectAppService; + + public IndexModel(IOptions urlOptions, IProjectAppService projectAppService) + { + _projectAppService = projectAppService; + _urlUiOptions = urlOptions.Value; + } + + public async Task OnGetAsync() + { + var projects = await _projectAppService.GetListAsync(); + + if (projects.Items.Count == 1) + { + return await RedirectToProjectAsync(projects.Items.First()); + } + else if (projects.Items.Count > 1) + { + Projects = projects.Items; + } + + return Page(); + } + + private async Task RedirectToProjectAsync(ProjectDto project, string language = "en", string version = null) + { + var path = GetUrlForProject(project, language, version); + return await Task.FromResult(Redirect(path)); + } + + //Eg: "/en/abp/latest" + public string GetUrlForProject(ProjectDto project, string language = "en", string version = null) + { + return "." + + _urlUiOptions.RoutePrefix.EnsureStartsWith('/').EnsureEndsWith('/') + + language.EnsureEndsWith('/') + + project.ShortName.EnsureEndsWith('/') + + (version ?? DocsAppConsts.Latest); + } + } +}