Files
DiunaBI/DiunaBI.UI.Shared/Pages/LayerDetailPage.razor.cs

123 lines
3.1 KiB
C#

using DiunaBI.Application.DTOModels;
using Microsoft.AspNetCore.Components;
using MudBlazor;
using System.Reflection;
namespace DiunaBI.UI.Shared.Pages;
public partial class LayerDetailPage : ComponentBase
{
[Parameter]
public Guid Id { get; set; }
[Inject]
private ISnackbar Snackbar { get; set; } = null!;
private LayerDto? layer;
private List<RecordDto> records = new();
private List<string> displayedColumns = new();
private double valueSum = 0;
private bool isLoading = false;
protected override async Task OnInitializedAsync()
{
await LoadLayer();
}
protected override async Task OnParametersSetAsync()
{
await LoadLayer();
}
private async Task LoadLayer()
{
isLoading = true;
StateHasChanged();
try
{
layer = await LayerService.GetLayerByIdAsync(Id);
if (layer != null && layer.Records != null)
{
records = layer.Records;
CalculateDisplayedColumns();
CalculateValueSum();
}
}
catch (Exception ex)
{
Console.Error.WriteLine($"Error loading layer: {ex.Message}");
Snackbar.Add("Error loading layer", Severity.Error);
}
finally
{
isLoading = false;
StateHasChanged();
}
}
private void CalculateDisplayedColumns()
{
displayedColumns.Clear();
// Check which Value columns have data
for (int i = 1; i <= 32; i++)
{
var columnName = $"Value{i}";
var hasData = records.Any(r => GetRecordValueByName(r, columnName) != null);
if (hasData)
{
displayedColumns.Add(columnName);
}
}
// Check if Desc1 has data
if (records.Any(r => !string.IsNullOrEmpty(r.Desc1)))
{
displayedColumns.Add("Description1");
}
}
private void CalculateValueSum()
{
valueSum = records
.Where(r => r.Value1.HasValue)
.Sum(r => r.Value1!.Value);
}
private string GetRecordValue(RecordDto record, string columnName)
{
if (columnName == "Description1")
{
return record.Desc1 ?? string.Empty;
}
var value = GetRecordValueByName(record, columnName);
return value.HasValue ? value.Value.ToString("N2") : string.Empty;
}
private double? GetRecordValueByName(RecordDto record, string columnName)
{
var property = typeof(RecordDto).GetProperty(columnName, BindingFlags.Public | BindingFlags.Instance);
if (property != null && property.PropertyType == typeof(double?))
{
return property.GetValue(record) as double?;
}
return null;
}
private void Export()
{
// TODO: Implement export functionality
Snackbar.Add("Export functionality coming soon", Severity.Error);
}
private void ProcessLayer()
{
// TODO: Implement process layer functionality
Snackbar.Add("Process layer functionality coming soon", Severity.Error);
}
}