1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
@using System.Text.Json
@using ArcaneLibs.Extensions
@using LibMatrix
@using LibMatrix.Helpers
<tr>
<td style="vertical-align: top;">Initial room state:</td>
<td>
@foreach (var (displayName, events) in new Dictionary<string, List<StateEvent>>() {
{ "Important room state (before final access rules)", roomBuilder.ImportantState },
{ "Additional room state (after final access rules)", roomBuilder.InitialState },
}) {
<details open>
@code
{
// private static readonly string[] ImplementedStates = { "m.room.avatar", "m.room.history_visibility", "m.room.guest_access", "m.room.server_acl" };
}
@* <summary>@displayName: @events.Count(x => !ImplementedStates.Contains(x.Type)) events</summary> *@
<summary>@displayName: @events.Count events</summary>
<LinkButton OnClick="@(() => {
events.Clear();
StateHasChanged();
})">Remove all
</LinkButton>
<LinkButton OnClick="@(() => {
events.Insert(0, new() {
Type = "",
StateKey = "",
RawContent = new(),
});
StateHasChanged();
})">Add new event
</LinkButton>
<br/>
@if (events.Count > 1000) {
<span style="color: red;">Warning: Too many initial state events! (more than 1000) - Please use the save/load feature in the state panel instead.</span>
}
else {
int i = 0;
@foreach (var initialState in events) {
<div id="@(initialState.Type + "/" + initialState.StateKey)">
<span>Event @(++i) (@GetRemoveButton(events, initialState))</span>
<br/>
@* <FancyTextBox Multiline="true" Value="@initialState.ToJson(ignoreNull: true)" *@
@* ValueChanged="@(json => { *@
@* if (string.IsNullOrWhiteSpace(json)) *@
@* events.Remove(initialState); *@
@* else *@
@* events.Replace(initialState, JsonSerializer.Deserialize<StateEvent>(json)); *@
@* StateHasChanged(); *@
@* })"></FancyTextBox> *@
<FancyTextBoxLazyJson T="StateEvent" Value="@initialState" ValueChanged="@(evt => { events.Replace(initialState, evt); })"></FancyTextBoxLazyJson>
<br/>
</div>
}
}
</details>
}
</td>
</tr>
@code {
[Parameter]
public required RoomBuilder roomBuilder { get; set; }
[Parameter]
public required Action PageStateHasChanged { get; set; }
[Parameter]
public AuthenticatedHomeserverGeneric Homeserver { get; set; }
private RenderFragment GetRemoveButton(List<StateEvent> events, StateEvent initialState) {
return @<span>
<LinkButton InlineText="true" OnClick="@(() => {
events.Remove(initialState);
PageStateHasChanged();
})">Remove</LinkButton>
</span>;
}
}
|