Files
ApplianceRepair/Components/Pages/admin/Admin.razor.cs

184 lines
7.1 KiB
C#
Raw Normal View History

using Microsoft.AspNetCore.Components;
2026-05-01 19:48:34 -05:00
using Microsoft.JSInterop;
namespace ApplianceRepair.Components.Pages.admin
2026-04-22 20:09:26 -05:00
{
2026-05-01 19:48:34 -05:00
public partial class Admin(HomePageReader homePageReader, ContentCardReader contentCardReader, BusinessConfigReader businessConfigReader, RepairRequestReader repairRequestReader, RepairRequestMediaReader repairRequestMediaReader) : ComponentBase
2026-04-22 20:09:26 -05:00
{
public HomePageModel? HomePageModel;
2026-04-25 13:14:08 -05:00
public BusinessInfoModel? BusinessInfo;
public List<RepairRequestModel>? RepairRequests;
2026-04-22 20:09:26 -05:00
2026-05-01 19:48:34 -05:00
public List<RepairRequestMediaRecord>? SelectedRequestMedia;
public int SelectedRequestMediaImageIndex = 0;
private enum AdminTab { Home, Requests, BusinessInfo }
2026-04-25 13:14:08 -05:00
private AdminTab CurrentTab = AdminTab.Home;
2026-04-22 20:09:26 -05:00
2026-04-25 13:14:08 -05:00
protected override async Task OnInitializedAsync()
2026-04-22 20:09:26 -05:00
{
2026-04-25 13:14:08 -05:00
var businessConfig = await businessConfigReader.ReadLatestRecord() ?? Defaults.DefaultBusinessConfig;
var latestHomeRecord = await homePageReader.ReadLatestRecord() ?? Defaults.DefaultHomePageContent;
var servicesList = await contentCardReader.ReadAllByPageAndGroup(HomePageModel.PageName, nameof(HomePageModel.ContentCardTypes.Services)) ?? [];
var trustList = await contentCardReader.ReadAllByPageAndGroup(HomePageModel.PageName, nameof(HomePageModel.ContentCardTypes.Trust)) ?? [];
BusinessInfo = new BusinessInfoModel(businessConfig);
HomePageModel = new HomePageModel(latestHomeRecord, businessConfig, servicesList, trustList);
RepairRequests = [];
(await repairRequestReader.ReadAll()).ForEach((record) =>
{
RepairRequests.Add(new RepairRequestModel(record));
});
2026-04-22 20:09:26 -05:00
}
2026-05-01 19:48:34 -05:00
private async void RefreshContentCards()
{
if (HomePageModel == null)
{
return;
}
var servicesList = await contentCardReader.ReadAllByPageAndGroup(HomePageModel.PageName, nameof(HomePageModel.ContentCardTypes.Services)) ?? [];
var trustList = await contentCardReader.ReadAllByPageAndGroup(HomePageModel.PageName, nameof(HomePageModel.ContentCardTypes.Trust)) ?? [];
HomePageModel.ServicesCards.Clear();
foreach (var card in servicesList)
{
HomePageModel.ServicesCards.Add(new ContentCardModel(card));
}
HomePageModel.TrustCards.Clear();
foreach (var card in trustList)
{
HomePageModel.TrustCards.Add(new ContentCardModel(card));
}
}
2026-04-22 20:09:26 -05:00
private async void RevertHomePageModel()
{
2026-04-25 13:14:08 -05:00
var businessConfig = await businessConfigReader.ReadLatestRecord() ?? Defaults.DefaultBusinessConfig;
var latestHomeRecord = await homePageReader.ReadLatestRecord() ?? Defaults.DefaultHomePageContent;
var servicesList = await contentCardReader.ReadAllByPageAndGroup(HomePageModel.PageName, nameof(HomePageModel.ContentCardTypes.Services)) ?? [];
var trustList = await contentCardReader.ReadAllByPageAndGroup(HomePageModel.PageName, nameof(HomePageModel.ContentCardTypes.Trust)) ?? [];
BusinessInfo = new BusinessInfoModel(businessConfig);
HomePageModel = new HomePageModel(latestHomeRecord, businessConfig, servicesList, trustList);
}
private async void RevertBusinessInfo()
{
var businessConfig = await businessConfigReader.ReadLatestRecord() ?? Defaults.DefaultBusinessConfig;
BusinessInfo = new BusinessInfoModel(businessConfig);
2026-04-22 20:09:26 -05:00
}
private async void SaveHomePageModel()
{
HomePageModel.UpdatedAt = DateTime.Now;
2026-04-25 13:14:08 -05:00
await homePageReader.UpdateRecord(HomePageModel);
2026-04-22 20:09:26 -05:00
foreach (var card in HomePageModel.ServicesCards)
{
2026-04-25 13:14:08 -05:00
card.UpdatedAt = DateTime.Now;
2026-04-22 20:09:26 -05:00
await contentCardReader.UpdateRecord(card);
}
foreach (var card in HomePageModel.TrustCards)
{
2026-04-25 13:14:08 -05:00
card.UpdatedAt = DateTime.Now;
2026-04-22 20:09:26 -05:00
await contentCardReader.UpdateRecord(card);
}
2026-04-25 13:14:08 -05:00
}
2026-04-22 20:09:26 -05:00
2026-04-25 13:14:08 -05:00
private async void SaveBusinessInfo()
{
BusinessInfo.UpdatedAt = DateTime.Now;
await businessConfigReader.UpdateRecord(BusinessInfo);
2026-04-22 20:09:26 -05:00
}
2026-05-01 19:48:34 -05:00
private async Task DeleteContentCard(ContentCardModel card)
{
await contentCardReader.DeleteRecord(card);
RefreshContentCards();
}
2026-04-22 20:09:26 -05:00
private void AddServiceCard()
{
HomePageModel?.ServicesCards.Add(new ContentCardModel() {
CreatedAt = DateTime.Now,
UpdatedAt = DateTime.Now,
BelongsToPage = HomePageModel.PageName,
2026-04-25 13:14:08 -05:00
Group = HomePageModel.ContentCardTypes.Services.ToString(),
2026-04-22 20:09:26 -05:00
Header = "Service Name",
Text = "Short Description"
});
}
private async void AddTrustCard()
{
HomePageModel?.TrustCards.Add(new ContentCardModel()
{
CreatedAt = DateTime.Now,
UpdatedAt = DateTime.Now,
BelongsToPage = HomePageModel.PageName,
Group = HomePageModel.ContentCardTypes.Trust.ToString(),
Header = "Header",
Text = "Short Description"
});
}
2026-05-01 19:48:34 -05:00
private async Task ViewRequestImages(RepairRequestModel request)
{
if (!string.IsNullOrEmpty(request.RequestNumber))
{
SelectedRequestMedia = await repairRequestMediaReader.ReadAllByRequestNumber(request.RequestNumber);
SelectedRequestMediaImageIndex = 0;
await JS.InvokeVoidAsync("eval", $"document.getElementById('imageViewerModal').showModal()");
}
}
private async Task CloseImageViewer()
{
await JS.InvokeVoidAsync("eval", $"document.getElementById('imageViewerModal').close()");
SelectedRequestMedia = [];
}
private async Task ImageViewerModal_PrevImage()
{
if (SelectedRequestMedia == null) return;
SelectedRequestMediaImageIndex++;
if (SelectedRequestMediaImageIndex >= SelectedRequestMedia.Count())
{
SelectedRequestMediaImageIndex = 0;
}
}
private async Task ImageViewerModal_NextImage()
{
if (SelectedRequestMedia == null) return;
SelectedRequestMediaImageIndex--;
if (SelectedRequestMediaImageIndex < 0)
{
SelectedRequestMediaImageIndex = SelectedRequestMedia.Count() - 1;
}
}
private string GetWebPath(string fullPath = "")
{
if (string.IsNullOrEmpty(fullPath)) return "";
var marker = "wwwroot";
var index = fullPath.IndexOf(marker);
if (index != -1)
{
// Returns "/uploads/filename.jpg"
return fullPath.Substring(index + marker.Length).Replace('\\', '/');
}
return fullPath;
}
2026-04-22 20:09:26 -05:00
}
}