TourIAm/TIAMSharedUI/Pages/User/SysAdmins/MessageDetailGridComponent....

179 lines
8.2 KiB
Plaintext

@using AyCode.Core
@using AyCode.Core.Enums
@using AyCode.Core.Helpers
@using TIAM.Entities.Products
@using TIAM.Entities.ServiceProviders
@using TIAM.Entities.Transfers
@using TIAM.Entities.Drivers
@using TIAM.Entities.Users
@using TIAM.Models.Dtos.Users
@using TIAMSharedUI.Shared.Components.BaseComponents
@using TIAMWebApp.Shared.Application.Interfaces
@using TIAMWebApp.Shared.Application.Utility
@using AyCode.Services.Loggers
@using TIAM.Core.Loggers
@using TIAM.Entities.Addresses
@using TIAMSharedUI.Shared.Components.Grids
@using TIAMSharedUI.Pages.Components.EditComponents
@using TIAMWebApp.Shared.Application.Services
@using AyCode.Interfaces.Addresses
@using TIAM.Entities.Emails
@using AyCode.Blazor.Components.Services
@using AyCode.Core.Extensions
@using TIAM.Models
@using TIAM.Services
@inherits UserBasePageComponent
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject AdminSignalRClient AdminSignalRClient;
@inject ISessionService sessionService
@inject IComponentUpdateService ComponentUpdateService
<MessageDetailGrid CssClass="my-grid" @ref="_messageGrid"
Logger="_logger"
SignalRClient="AdminSignalRClient"
GetAllMessageTag="GetAllMessageTag"
ContextIds="@(ContextId.IsNullOrEmpty() ? throw new InvalidDataException($"ContextId.IsNullOrEmpty(); ContextId: {ContextId}") : [ContextId.Value])"
CustomizeElement="CustomizeElement"
ShowFilterRow="ShowFilterRow">
<Columns>
<DxGridCommandColumn Width="135" MinWidth="135" Visible="AcDomain.IsDeveloperVersion" DeleteButtonVisible="AcDomain.IsDeveloperVersion" EditButtonVisible="AcDomain.IsDeveloperVersion" FixedPosition="GridColumnFixedPosition.Left" />
<DxGridDataColumn FieldName="SenderId" Caption=" " Width="30px" ShowInColumnChooser="AcDomain.IsDeveloperVersion" DisplayFormat="N" AllowSort="false">
<CellDisplayTemplate>
@{
var isOutgoing = ((EmailMessage)context.DataItem).SenderId == myUserId;
if (isOutgoing)
{
<i class="fa-solid fa-right-from-bracket text-info"></i>
}
else
{
<i class="fa-solid fa-right-to-bracket text-primary"></i>
}
}
<span> | </span>
@{
var contextType = ((EmailMessage)context.DataItem).ContextType;
switch (contextType)
{
case MessageContextType.Transfer:
{
<i class="fa-solid fa-car-side"></i>
break;
}
case MessageContextType.Company:
{
<i class="fa-solid fa-paperclip"></i>
break;
}
case MessageContextType.Product:
{
<i class="fa-solid fa-bed"></i>
break;
}
case MessageContextType.Private:
{
<i class="fa-solid fa-lock"></i>
break;
}
case MessageContextType.Unset:
{
<i class="fa-solid fa-circle-xmark"></i>
break;
}
}
}
</CellDisplayTemplate>
</DxGridDataColumn>
<DxGridDataColumn FieldName="Id" Width="150" ShowInColumnChooser="AcDomain.IsDeveloperVersion" Visible="AcDomain.IsDeveloperVersion" DisplayFormat="N" />
<DxGridDataColumn FieldName="ContextId" Width="150px" ShowInColumnChooser="AcDomain.IsDeveloperVersion" Visible="AcDomain.IsDeveloperVersion" DisplayFormat="N" />
<DxGridDataColumn FieldName="Created" Caption="Received" DisplayFormat="g" Width="@(IsMessageTextVisible ? 140.ToString() : 85.ToString())" CaptionAlignment="GridTextAlignment.Center" TextAlignment="GridTextAlignment.Center">
<CellDisplayTemplate>
@{
var created = ((EmailMessage)context.DataItem).Created.ToLocalTime();
if (IsMessageTextVisible)
{
@created.ToString("g")
}
else
{
<div style="padding: 3px 3px 1px 3px; margin: 0 auto;">@created.ToString("d").Replace(" ", string.Empty)</div>
<div style="padding: 2px 3px 3px 3px; margin: 0 auto;">@created.ToString("t").Replace(" ", string.Empty)</div>
}
}
</CellDisplayTemplate>
</DxGridDataColumn>
<DxGridDataColumn FieldName="EmailAddress" Caption="Sender" Width="200px" Visible="IsSenderEmailVisible || AcDomain.IsDeveloperVersion" />
<DxGridDataColumn FieldName="Subject">
<CellDisplayTemplate>
@{
var subjectString = ((EmailMessage)context.DataItem).Subject;
<p style="word-break: normal; white-space: normal; padding: 0; margin: 0 auto;">@subjectString</p>
if (!IsMessageTextVisible)
{
var textString = System.Text.RegularExpressions.Regex.Replace(((EmailMessage)context.DataItem).Text!, "<(.|\n)*?>", string.Empty);
if (textString.Length > 80) textString = textString[..80] + "...";
<div style="color: darkgray; word-break: normal; white-space: normal; padding: 3px 5px 0 0; margin: 0 auto;">@textString</div>
}
}
</CellDisplayTemplate>
</DxGridDataColumn>
<DxGridDataColumn FieldName="Text" Visible="@IsMessageTextVisible">
<CellDisplayTemplate Context="displayTextContext">
<text>@System.Text.RegularExpressions.Regex.Replace((displayTextContext.Value as string)!, "<(.|\n)*?>", string.Empty)</text>
</CellDisplayTemplate>
</DxGridDataColumn>
<DxGridDataColumn FieldName="IsReaded" Caption="Read" Visible="@IsMessageTextVisible" Width="70" CaptionAlignment="GridTextAlignment.Center" TextAlignment="GridTextAlignment.Center" />
</Columns>
<DetailRowTemplate>
@{
var emailMessage = ((EmailMessage)context.DataItem);
<div>@((MarkupString)(emailMessage.Text ?? string.Empty))</div>
if (!emailMessage.IsReaded)
{
emailMessage.IsReaded = true;
_messageGrid.UpdateDataItemAsync(emailMessage).Forget();
sessionService.SiteViewModel.UnreadMessages.RemoveAll(x => x.Id == emailMessage.Id);
ComponentUpdateService.CallRequestRefreshAll();
//InvokeAsync(StateHasChanged).ContinueWith(x => _messageGrid.UpdateDataItemAsync(emailMessage).Forget());
}
}
</DetailRowTemplate>
</MessageDetailGrid>
@code {
[Parameter] public Guid? ContextId { get; set; }
//[Parameter] public IEmailMessageRelation ParentData { get; set; } = null!;
[Parameter] public bool IsMessageTextVisible { get; set; } = true;
[Parameter] public bool IsSenderEmailVisible { get; set; } = true;
[Parameter] public int GetAllMessageTag { get; set; } = SignalRTags.GetMessagesByContextId;
[Parameter] public bool ShowFilterRow { get; set; } = false;
private MessageGrid _messageGrid = null!;
private LoggerClient<MessageDetailGridComponent> _logger = null!;
private Guid? myUserId;
protected override void OnInitialized()
{
_logger = new LoggerClient<MessageDetailGridComponent>(LogWriters.ToArray());
myUserId = _sessionService.User.UserId;
}
private void CustomizeElement(GridCustomizeElementEventArgs e)
{
if (e.ElementType != GridElementType.DataRow) return;
e.Style = (bool)e.Grid.GetRowValue(e.VisibleIndex, "IsReaded") == false ? "font-weight: bold;" : "font-weight: normal;";
}
}