Skip to content

Commit 1b05bb1

Browse files
authored
Merge pull request #2859 from erri120/feat/2682
Allow pages to specify serializable page data
2 parents dc9cac8 + ebff16b commit 1b05bb1

File tree

4 files changed

+33
-2
lines changed

4 files changed

+33
-2
lines changed

Diff for: src/NexusMods.App.UI/Pages/Diagnostics/Details/DiagnosticDetailsPage.cs

+16
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using JetBrains.Annotations;
22
using Microsoft.Extensions.DependencyInjection;
33
using NexusMods.Abstractions.Diagnostics;
4+
using NexusMods.Abstractions.Loadouts;
45
using NexusMods.App.UI.Controls.MarkdownRenderer;
56
using NexusMods.App.UI.WorkspaceSystem;
67

@@ -10,8 +11,23 @@ public record DiagnosticDetailsPageContext : IPageFactoryContext
1011
{
1112
public required Diagnostic Diagnostic { get; init; }
1213

14+
public required LoadoutId LoadoutId { get; init; }
15+
1316
/// <inheritdoc/>
1417
public bool IsEphemeral => true;
18+
19+
/// <inheritdoc/>
20+
public PageData GetSerializablePageData()
21+
{
22+
return new PageData
23+
{
24+
FactoryId = DiagnosticListPageFactory.StaticId,
25+
Context = new DiagnosticListPageContext
26+
{
27+
LoadoutId = LoadoutId,
28+
},
29+
};
30+
}
1531
}
1632

1733
[UsedImplicitly]

Diff for: src/NexusMods.App.UI/Pages/Diagnostics/List/DiagnosticListViewModel.cs

+1
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ public DiagnosticListViewModel(
152152
Context = new DiagnosticDetailsPageContext
153153
{
154154
Diagnostic = diagnostic,
155+
LoadoutId = LoadoutId,
155156
},
156157
};
157158

Diff for: src/NexusMods.App.UI/WorkspaceSystem/Page/IPageFactoryContext.cs

+5
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@ public interface IPageFactoryContext
1111
/// </summary>
1212
bool IsEphemeral => false;
1313

14+
/// <summary>
15+
/// Alternative <see cref="PageData"/> to persist when <see cref="IsEphemeral"/> is <c>true</c>.
16+
/// </summary>
17+
PageData? GetSerializablePageData() => null;
18+
1419
/// <summary>
1520
/// Gets the tracking name.
1621
/// </summary>

Diff for: src/NexusMods.App.UI/WorkspaceSystem/PanelTab/PanelTabViewModel.cs

+11-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Diagnostics;
12
using System.Reactive;
23
using DynamicData.Kernel;
34
using NexusMods.Abstractions.UI;
@@ -45,12 +46,20 @@ public PanelTabViewModel(IWorkspaceController workspaceController, WorkspaceId w
4546

4647
public TabData? ToData()
4748
{
48-
if (Contents.PageData.Context.IsEphemeral) return null;
49+
var pageData = Contents.PageData;
50+
if (pageData.Context.IsEphemeral)
51+
{
52+
var serializablePageData = pageData.Context.GetSerializablePageData();
53+
if (serializablePageData is null) return null;
54+
55+
Debug.Assert(!serializablePageData.Context.IsEphemeral);
56+
pageData = serializablePageData;
57+
}
4958

5059
return new TabData
5160
{
5261
Id = Id,
53-
PageData = Contents.PageData,
62+
PageData = pageData,
5463
};
5564
}
5665
}

0 commit comments

Comments
 (0)