Files
SomniaGuestLog/src/Somnia.GuestLog/Services/UserMessageService.cs
T
Daniel-Garmig cf31cbc414 feat StayExport - Added LocalizerService
- Added new "LocalizerService" to get localization for enum values (and other dynamic/db values in the future).
2026-09-02 13:15:10 +02:00

77 lines
2.3 KiB
C#

using MudBlazor;
using Somnia.GuestLog.Enums.Services;
using Somnia.GuestLog.Enums.UI;
using Somnia.GuestLog.Models.DTOs;
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(Result resultDto)
{
ShowResultWithMessage(resultDto, message: null);
}
public void ShowResultWithMessage(Result 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
}