|
@@ -0,0 +1,89 @@
|
|
|
+@page "/news"
|
|
|
+@using Moonlight.App.Repositories
|
|
|
+@using Moonlight.App.Database.Entities
|
|
|
+@using Markdig
|
|
|
+@using Moonlight.App.Services
|
|
|
+@using Moonlight.App.Services.Interop
|
|
|
+@using Moonlight.Shared.Components.News
|
|
|
+
|
|
|
+@inject NewsEntryRepository NewsEntryRepository
|
|
|
+@inject SmartTranslateService SmartTranslateService
|
|
|
+@inject NavigationManager NavigationManager
|
|
|
+@inject AlertService AlertService
|
|
|
+
|
|
|
+<OnlyAdmin Silent="true">
|
|
|
+ <NewsEditor @ref="NewPostEditor" Model="NewPost" Save="DoSaveNewPost"></NewsEditor>
|
|
|
+</OnlyAdmin>
|
|
|
+
|
|
|
+<LazyLoader Load="Load">
|
|
|
+ @foreach (var entry in Entries)
|
|
|
+ {
|
|
|
+ <div class="card mb-6">
|
|
|
+ <div class="card-header">
|
|
|
+ <h3 class="card-title">@entry.Title</h3>
|
|
|
+ <div class="card-toolbar">
|
|
|
+ <OnlyAdmin>
|
|
|
+ <a href="/news/edit/@entry.Id">
|
|
|
+ <button class="btn btn-sm btn-light me-4">
|
|
|
+ <TL>Edit</TL>
|
|
|
+ </button>
|
|
|
+ </a>
|
|
|
+
|
|
|
+ <WButton CssClasses="btn btn-sm btn-light me-4"
|
|
|
+ Text="@SmartTranslateService.Translate("Delete")"
|
|
|
+ WorkingText="@SmartTranslateService.Translate("Deleting...")"
|
|
|
+ OnClick="() => Delete(entry)"></WButton>
|
|
|
+ </OnlyAdmin>
|
|
|
+
|
|
|
+ @{
|
|
|
+ string dateInt(int i) => i.ToString().Length < 2 ? "0" + i : i.ToString();
|
|
|
+ }
|
|
|
+ <span class="text-gray-600 fw-semibold">@dateInt(entry.Date.Day).@dateInt(entry.Date.Month).@entry.Date.Year</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="card-body">
|
|
|
+ @{
|
|
|
+ var html = (MarkupString)Markdown.ToHtml(entry.Markdown);
|
|
|
+ }
|
|
|
+
|
|
|
+ @html
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ }
|
|
|
+</LazyLoader>
|
|
|
+
|
|
|
+@code {
|
|
|
+ private NewsEntry NewPost = new();
|
|
|
+ private NewsEditor NewPostEditor;
|
|
|
+
|
|
|
+ private NewsEntry[] Entries;
|
|
|
+
|
|
|
+ private async Task Load(LazyLoader loader)
|
|
|
+ {
|
|
|
+ Entries = NewsEntryRepository.Get().OrderByDescending(x => x.Date).ToArray();
|
|
|
+ }
|
|
|
+
|
|
|
+ private async Task DoSaveNewPost(NewsEntry post)
|
|
|
+ {
|
|
|
+ NewsEntryRepository.Add(post);
|
|
|
+
|
|
|
+ NavigationManager.NavigateTo(NavigationManager.Uri, true);
|
|
|
+ }
|
|
|
+
|
|
|
+ private async Task Delete(NewsEntry entry)
|
|
|
+ {
|
|
|
+ var confirm = await AlertService.YesNo(
|
|
|
+ SmartTranslateService.Translate("Delete post"),
|
|
|
+ SmartTranslateService.Translate("Do you really want to delete the post \"") + entry.Title + "\"?",
|
|
|
+ SmartTranslateService.Translate("Yes"),
|
|
|
+ SmartTranslateService.Translate("No")
|
|
|
+ );
|
|
|
+
|
|
|
+ if(!confirm) return;
|
|
|
+
|
|
|
+ NewsEntryRepository.Delete(entry);
|
|
|
+
|
|
|
+ NavigationManager.NavigateTo(NavigationManager.Uri, true);
|
|
|
+ }
|
|
|
+}
|