InkForge/app/InkForge.Desktop/Models/Note.cs

62 lines
1.2 KiB
C#
Raw Normal View History

2024-04-05 12:31:34 +02:00
using System.Reactive.Linq;
using System.Reactive.Subjects;
using ReactiveUI;
2024-02-26 18:08:18 +01:00
namespace InkForge.Desktop.Models;
2024-04-05 12:31:34 +02:00
public class Note : ReactiveObject
2024-02-26 18:08:18 +01:00
{
2024-04-05 12:31:34 +02:00
private readonly ObservableAsPropertyHelper<Note?> _parent;
private readonly BehaviorSubject<int?> _parentId = new(default);
private DateTimeOffset _createdTime;
private int _id;
private string _name = default!;
private DateTimeOffset _updatedTime;
public DateTimeOffset CreatedTime
{
get => _createdTime;
set => this.RaiseAndSetIfChanged(ref _createdTime, value);
}
public int Id
{
get => _id;
set => this.RaiseAndSetIfChanged(ref _id, value);
}
public string Name
{
get => _name;
set => this.RaiseAndSetIfChanged(ref _name, value);
}
public DateTimeOffset UpdatedTime
{
get => _updatedTime;
set => this.RaiseAndSetIfChanged(ref _updatedTime, value);
}
public Note? Parent
{
get => _parent.Value;
set => ParentId = value?.Id;
}
public int? ParentId
{
get => _parentId.Value;
set => _parentId.OnNext(value);
}
public Note(NoteStore noteStore)
{
_parent = _parentId.Select(id => id switch
{
{ } => noteStore.Watch((int)id),
_ => Observable.Empty<Note?>(),
}).Switch(null).ToProperty(this, nameof(Parent), deferSubscription: true);
}
2024-02-26 18:08:18 +01:00
}