Gestito notificationData nelle notifiche push

This commit is contained in:
2025-09-12 17:37:36 +02:00
parent 223e74c490
commit 0f3047a2b6
10 changed files with 59 additions and 23 deletions

View File

@@ -1,8 +1,11 @@
using CommunityToolkit.Mvvm.Messaging; using CommunityToolkit.Mvvm.Messaging;
using salesbook.Shared.Core.Dto;
using salesbook.Shared.Core.Entity; using salesbook.Shared.Core.Entity;
using salesbook.Shared.Core.Helpers;
using salesbook.Shared.Core.Interface.IntegryApi; using salesbook.Shared.Core.Interface.IntegryApi;
using salesbook.Shared.Core.Messages.Notification.NewPush; using salesbook.Shared.Core.Messages.Notification.NewPush;
using Shiny.Push; using Shiny.Push;
using System.Text.Json;
namespace salesbook.Maui.Core.System.Notification.Push; namespace salesbook.Maui.Core.System.Notification.Push;
@@ -20,10 +23,25 @@ public class PushNotificationDelegate(
public Task OnReceived(PushNotification notification) public Task OnReceived(PushNotification notification)
{ {
if (notification.Notification is null) return Task.CompletedTask; if (notification.Notification is null) return Task.CompletedTask;
var data = notification.Data;
NotificationDataDTO? notificationDataDto = null;
if (!data.IsNullOrEmpty())
{
var json = JsonSerializer.Serialize(data);
notificationDataDto = JsonSerializer.Deserialize<NotificationDataDTO>(json);
}
if (notificationDataDto?.NotificationId == null) return Task.CompletedTask;
var notificationId = long.Parse(notificationDataDto.NotificationId);
var pushNotification = new WtbNotification var pushNotification = new WtbNotification
{ {
Id = notificationId,
Title = notification.Notification.Title, Title = notification.Notification.Title,
Body = notification.Notification.Message Body = notification.Notification.Message,
NotificationData = notificationDataDto
}; };
messenger.Send(new NewPushNotificationMessage(pushNotification)); messenger.Send(new NewPushNotificationMessage(pushNotification));

View File

@@ -77,11 +77,11 @@
[JSInvokable] [JSInvokable]
public async Task Delete(string id) public async Task Delete(string id)
{ {
Loading = true;
_ = InvokeAsync(StateHasChanged);
if (!long.TryParse(id, out var notificationId)) return; if (!long.TryParse(id, out var notificationId)) return;
Loading = true;
StateHasChanged();
var removed = false; var removed = false;
if (Notification.ReceivedNotifications.RemoveAll(x => x.Id == notificationId) > 0) if (Notification.ReceivedNotifications.RemoveAll(x => x.Id == notificationId) > 0)
@@ -91,16 +91,18 @@
else if (Notification.NotificationsRead.RemoveAll(x => x.Id == notificationId) > 0) else if (Notification.NotificationsRead.RemoveAll(x => x.Id == notificationId) > 0)
removed = true; removed = true;
if (!removed) return; if (!removed)
{
Loading = false;
StateHasChanged();
return;
}
await IntegryNotificationRestClient.Delete(notificationId);
NotificationService.OrderNotificationList(); NotificationService.OrderNotificationList();
Loading = false; Loading = false;
_ = InvokeAsync(StateHasChanged); StateHasChanged();
_ = Task.Run(() =>
{
_ = IntegryNotificationRestClient.Delete(notificationId);
});
Messenger.Send(new NotificationsLoadedMessage()); Messenger.Send(new NotificationsLoadedMessage());
} }
@@ -109,7 +111,7 @@
public async Task MarkAsRead(string id) public async Task MarkAsRead(string id)
{ {
Loading = true; Loading = true;
_ = InvokeAsync(StateHasChanged); StateHasChanged();
var notificationId = long.Parse(id); var notificationId = long.Parse(id);

View File

@@ -47,11 +47,11 @@
Notification.StartDate < DateTime.Today && Notification.Body != null && Notification.Body.Contains("Oggi") Notification.StartDate < DateTime.Today && Notification.Body != null && Notification.Body.Contains("Oggi")
) )
{ {
<MudText Typo="Typo.caption" Class="subtitle">@Notification.Body.Replace("Oggi", $"{Notification.StartDate:d}")</MudText> <div class="subtitle">@Notification.Body.Replace("Oggi", $"{Notification.StartDate:d}")</div>
} }
else else
{ {
<MudText Typo="Typo.caption" Class="subtitle">@Notification.Body</MudText> <div class="subtitle">@Notification.Body</div>
} }
</div> </div>
</div> </div>

View File

@@ -105,4 +105,6 @@
.notification-body ::deep > .subtitle { .notification-body ::deep > .subtitle {
font-size: 12px; font-size: 12px;
color: var(--mud-palette-drawer-text); color: var(--mud-palette-drawer-text);
line-height: inherit;
margin-top: .5rem;
} }

View File

@@ -4,6 +4,9 @@ namespace salesbook.Shared.Core.Dto;
public class NotificationDataDTO public class NotificationDataDTO
{ {
[JsonPropertyName("notificationId")]
public string? NotificationId { get; set; }
[JsonPropertyName("activityId")] [JsonPropertyName("activityId")]
public string? ActivityId { get; set; } public string? ActivityId { get; set; }

View File

@@ -4,7 +4,7 @@ namespace salesbook.Shared.Core.Interface.IntegryApi;
public interface IIntegryNotificationRestClient public interface IIntegryNotificationRestClient
{ {
Task<List<WtbNotification>> Get(); Task<List<WtbNotification>?> Get();
Task<WtbNotification> MarkAsRead(long id); Task<WtbNotification> MarkAsRead(long id);
Task Delete(long id); Task Delete(long id);
Task DeleteAll(); Task DeleteAll();

View File

@@ -10,7 +10,7 @@ public class IntegryNotificationRestClient(
IUserSession userSession, IUserSession userSession,
IIntegryApiRestClient integryApiRestClient) : IIntegryNotificationRestClient IIntegryApiRestClient integryApiRestClient) : IIntegryNotificationRestClient
{ {
public Task<List<WtbNotification>> Get() public Task<List<WtbNotification>?> Get()
{ {
var queryParams = new Dictionary<string, object> var queryParams = new Dictionary<string, object>
{ {
@@ -18,7 +18,7 @@ public class IntegryNotificationRestClient(
{ "forUser", userSession.User.Username } { "forUser", userSession.User.Username }
}; };
return integryApiRestClient.Get<List<WtbNotification>>("notification", queryParams)!; return integryApiRestClient.Get<List<WtbNotification>>("notification", queryParams);
} }
public Task<WtbNotification> MarkAsRead(long id) => public Task<WtbNotification> MarkAsRead(long id) =>

View File

@@ -12,6 +12,8 @@ public class NotificationService(
public async Task LoadNotification() public async Task LoadNotification()
{ {
var allNotifications = await integryNotificationRestClient.Get(); var allNotifications = await integryNotificationRestClient.Get();
if (allNotifications == null) return;
var allIds = allNotifications.Select(n => n.Id).ToHashSet(); var allIds = allNotifications.Select(n => n.Id).ToHashSet();
Notification.ReceivedNotifications = Notification.ReceivedNotifications Notification.ReceivedNotifications = Notification.ReceivedNotifications

View File

@@ -145,13 +145,17 @@ function initRow(row) {
} }
function removeRow(row) { function removeRow(row) {
//collapseAndRemove(row); const id = row.id;
dotnetHelper.invokeMethodAsync('Delete', row.id);
collapseAndRemove(row);
dotnetHelper.invokeMethodAsync('Delete', id);
} }
function markAsRead(row) { function markAsRead(row) {
//collapseAndRemove(row); const id = row.id;
dotnetHelper.invokeMethodAsync('MarkAsRead', row.id);
collapseAndRemove(row);
dotnetHelper.invokeMethodAsync('MarkAsRead', id);
} }
function collapseAndRemove(row) { function collapseAndRemove(row) {

View File

@@ -14,12 +14,12 @@ public class ManageDataService : IManageDataService
throw new NotImplementedException(); throw new NotImplementedException();
} }
public Task<List<AnagClie>> GetClienti(WhereCondContact? whereCond) public Task<List<AnagClie>> GetClienti(WhereCondContact? whereCond = null)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
public Task<List<PtbPros>> GetProspect(WhereCondContact? whereCond) public Task<List<PtbPros>> GetProspect(WhereCondContact? whereCond = null)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
@@ -34,6 +34,11 @@ public class ManageDataService : IManageDataService
throw new NotImplementedException(); throw new NotImplementedException();
} }
public Task<List<ActivityDTO>> GetActivityTryLocalDb(WhereCondActivity whereCond)
{
throw new NotImplementedException();
}
public Task<List<ActivityDTO>> GetActivity(WhereCondActivity whereCond, bool useLocalDb = false) public Task<List<ActivityDTO>> GetActivity(WhereCondActivity whereCond, bool useLocalDb = false)
{ {
throw new NotImplementedException(); throw new NotImplementedException();