SHA256
78 lines
2.4 KiB
C#
78 lines
2.4 KiB
C#
using MudBlazor;
|
|
using Somnia.GuestLog.Enums.Services;
|
|
using Somnia.GuestLog.Enums.UI;
|
|
using Somnia.GuestLog.Models.DTOs;
|
|
using IResult = Somnia.GuestLog.Models.DTOs.IResult;
|
|
|
|
namespace Somnia.GuestLog.Services;
|
|
|
|
public class UserMessageService(
|
|
ILocalizerService Localizer,
|
|
ISnackbar snackbar
|
|
) : IUserMessageService
|
|
{
|
|
public void ShowMessage(string text, MessageKind kind, params object[] parameters)
|
|
{
|
|
string formatedMsg = GetFormatedMessage(text, parameters);
|
|
ShowSnackbar(formatedMsg, kind);
|
|
}
|
|
|
|
|
|
public void ShowResult(IResult resultDto)
|
|
{
|
|
ShowResultWithMessage(resultDto, message: null);
|
|
}
|
|
|
|
public void ShowResultWithMessage(IResult resultDto, string? message)
|
|
{
|
|
string resultMsg = GetMsgForResultCode(resultDto.ResultCode);
|
|
resultMsg = GetFormatedMessage(resultMsg, resultDto.Context);
|
|
|
|
string finalMsg = message is not null ? $"{message.Trim().TrimEnd(':')}: {resultMsg}" : resultMsg;
|
|
|
|
//Show success when OK, error for UnknownErrors and warning otherwise.
|
|
MessageKind kind = resultDto switch
|
|
{
|
|
{ IsSuccess: true } => MessageKind.Success,
|
|
{ ResultCode: ResultCode.UnknownError } => MessageKind.Error,
|
|
_ => MessageKind.Warning
|
|
};
|
|
|
|
ShowSnackbar(finalMsg, kind);
|
|
}
|
|
|
|
|
|
#region Internal Methods
|
|
|
|
private void ShowSnackbar(string msg, MessageKind kind)
|
|
{
|
|
snackbar.Add(message: msg, severity: GetSnackbarSeveryForMessageKind(kind));
|
|
}
|
|
|
|
private string GetMsgForResultCode(ResultCode resultCode)
|
|
{
|
|
return Localizer.GetEnumValue(resultCode);
|
|
}
|
|
|
|
private static string GetFormatedMessage(string template, params object[]? parameters)
|
|
{
|
|
if (parameters is null || parameters.Length == 0)
|
|
{
|
|
return template;
|
|
}
|
|
|
|
return string.Format(template, parameters);
|
|
}
|
|
|
|
private static MudBlazor.Severity GetSnackbarSeveryForMessageKind(MessageKind kind) => kind switch
|
|
{
|
|
MessageKind.Info => MudBlazor.Severity.Info,
|
|
MessageKind.Warning => MudBlazor.Severity.Warning,
|
|
MessageKind.Error => MudBlazor.Severity.Error,
|
|
MessageKind.Success => MudBlazor.Severity.Success,
|
|
MessageKind.Normal => MudBlazor.Severity.Normal,
|
|
_ => throw new ArgumentOutOfRangeException(nameof(kind), $"Not expected MessageKind value: {kind}")
|
|
};
|
|
|
|
#endregion
|
|
} |