/
EditorView.razor
62 lines (52 loc) · 1.83 KB
/
EditorView.razor
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
@page "/admin/pages/editor/{Slug?}/"
@inject HttpClient _httpClient
@inject IStringLocalizer<Resource> _localizer
@inject IToaster _toaster
@inject NavigationManager _navigation
@inject ToasterService _toasterService
<PageTitleComponent Title="@_localizer["new-page"]" />
<PostEditorComponent Post="@Post" OnSaveCallback="OnSaveAsync" OnRemoveCallback="OnRemoveAsync"></PostEditorComponent>
@code {
[Parameter] public string? Slug { get; set; }
protected PostEditorDto Post { get; set; } = new PostEditorDto
{
Title = string.Empty,
Description = string.Empty,
Content = string.Empty,
PostType = PostType.Page,
Cover = BlogifierSharedConstant.DefaultCover,
Categories = new List<CategoryDto>(),
};
protected override async Task OnParametersSetAsync()
{
if (!string.IsNullOrEmpty(Slug))
{
Post = (await _httpClient.GetFromJsonAsync<PostEditorDto>($"api/post/byslug/{Slug}"))!;
if (Post.Categories == null) Post.Categories = new List<CategoryDto>();
}
}
protected async Task OnSaveAsync(PostEditorDto post)
{
if (Post.Id == 0)
{
var response = await _httpClient.PostAsJsonAsync<PostEditorDto>($"api/post/add", Post);
if (_toasterService.CheckResponse(response))
{
var slug = await response.Content.ReadAsStringAsync();
_navigation.NavigateTo($"/admin/pages/editor/{slug}");
}
}
else
{
var response = await _httpClient.PutAsJsonAsync<PostEditorDto>($"api/post/update", Post);
_toasterService.CheckResponse(response);
}
}
protected async Task OnRemoveAsync(int id)
{
var result = await _httpClient.DeleteAsync($"api/post/{id}");
if (result.IsSuccessStatusCode) _toaster.Success(_localizer["completed"]);
else _toaster.Error(_localizer["generic-error"]);
_navigation.NavigateTo($"admin");
}
}