// Copyright (c) Arlo Godfrey. All Rights Reserved.
// Licensed under the GNU Lesser General Public License, Version 3.0 with additional terms.
// See the LICENSE, LICENSE.LESSER and LICENSE.ADDITIONAL files in the project root for more information.
using System;
using System.ComponentModel;
using System.Threading;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using OwlCore;
using StrixMusic.Sdk.AppModels;
namespace StrixMusic.Sdk.ViewModels.Notifications
{
///
/// A view model wrapper for the class.
///
[Bindable(true)]
public sealed class NotificationViewModel : ObservableObject, IDisposable
{
private readonly SynchronizationContext _syncContext;
private AbstractUINotificationViewModel _abstractUINotificationViewModel;
///
/// The original notification model.
///
public Notification Model { get; }
///
/// Creates a new instance of .
///
/// The backing model.
public NotificationViewModel(Notification model)
{
_syncContext = SynchronizationContext.Current;
Model = model;
_abstractUINotificationViewModel = new AbstractUINotificationViewModel(model.AbstractUICollection);
DismissCommand = new RelayCommand(model.Dismiss);
}
///
/// The view model of the Notification being show.
///
public AbstractUINotificationViewModel AbstractUINotificationViewModel
{
get => _abstractUINotificationViewModel;
set
{
_abstractUINotificationViewModel = value;
_syncContext.Post(_ => OnPropertyChanged(nameof(AbstractUINotificationViewModel)), null);
}
}
///
/// Handles dismissing the notification via a bindable command.
///
public IRelayCommand DismissCommand { get; set; }
///
public void Dispose() => _abstractUINotificationViewModel?.Dispose();
}
}