about summary refs log tree commit diff
path: root/MatrixUtils.Web/Pages/Rooms/RoomCreateComponents/RoomCreatePermissionsOptions.razor
blob: ba28b82802ef0f16f4945b2501dff546fe487280 (plain) (blame)
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
@using ArcaneLibs.Extensions
@using LibMatrix.Helpers
<tr>
    <td>Permissions:</td>
    <details>
        <summary>
            @if (roomBuilder.Version is "org.matrix.hydra.11" or "12") {
                <span>@(roomBuilder.AdditionalCreators.Count + 1) creators, </span>
            }
            <span>@roomBuilder.PowerLevels.Users.Count members, @roomBuilder.PowerLevels.Events.Count events</span>
        </summary>

        @if (roomBuilder.Version is "org.matrix.hydra.11" or "12") {
            <span style="border-bottom: #444;">Creators:</span>
            <br/>
            <span>@Homeserver.WhoAmI.UserId (you - to change, visit <a href="/">the homepage</a>.)</span>
            <br/>

            <StringListEditor @bind-Items="@roomBuilder.AdditionalCreators"></StringListEditor>
            <br/>
        }

        <span style="border-bottom: #444;">Events:</span><br/>
        @foreach (var eventType in roomBuilder.PowerLevels.Events.Keys) {
            var _event = eventType;
            <tr>
                <td>
                    <LinkButton InlineText="true" OnClick="@(() => {
                                                               roomBuilder.PowerLevels.Events.Remove(_event);
                                                               StateHasChanged();
                                                           })">-
                    </LinkButton>
                    <div style="display: inline-flex;">
                        <FancyTextBox Formatter="@GetPermissionFriendlyName"
                                      Value="@_event"
                                      ValueChanged="val => { roomBuilder.PowerLevels.Events.ChangeKey(_event, val); }">
                        </FancyTextBox>
                        <span>:</span>
                    </div>
                </td>
                <td>
                    <input type="number" value="@roomBuilder.PowerLevels.Events[_event]"
                           @oninput="val => { roomBuilder.PowerLevels.Events[_event] = int.Parse(val.Value.ToString()); }"
                           @onfocusout="@(() => { roomBuilder.PowerLevels.Events = roomBuilder.PowerLevels.Events.OrderByDescending(x => x.Value).ThenBy(x => x.Key).ToDictionary(x => x.Key, x => x.Value); })"/>
                </td>
            </tr>
        }
        <tr>
            <td>
                <LinkButton InlineText="true" OnClick="@(() => {
                                                           roomBuilder.PowerLevels.Events[""] = 0;
                                                           StateHasChanged();
                                                       })">+
                </LinkButton>
            </td>
        </tr>

        <span style="border-bottom: #444;">Users:</span><br/>
        @foreach (var user in roomBuilder.PowerLevels.Users.Keys) {
            var _user = user;
            <tr>
                <td>
                    <LinkButton InlineText="true" OnClick="@(() => {
                                                               roomBuilder.PowerLevels.Users.Remove(_user);
                                                               StateHasChanged();
                                                           })">-
                    </LinkButton>
                    <div style="display: inline-flex;">
                        <FancyTextBox Value="@_user"
                                      ValueChanged="val => { roomBuilder.PowerLevels.Users.ChangeKey(_user, val); }">
                        </FancyTextBox>
                        <span>:</span>
                    </div>
                </td>
                <td>
                    <input type="number" value="@roomBuilder.PowerLevels.Users[_user]"
                           @oninput="val => { roomBuilder.PowerLevels.Users[_user] = int.Parse(val.Value.ToString()); }"
                           @onfocusout="@(() => { roomBuilder.PowerLevels.Users = roomBuilder.PowerLevels.Users.OrderByDescending(x => x.Value).ThenBy(x => x.Key).ToDictionary(x => x.Key, x => x.Value); })"/>
                </td>
            </tr>
        }
        <tr>
            <td>
                <LinkButton InlineText="true" OnClick="@(() => {
                                                           roomBuilder.PowerLevels.Users[""] = 0;
                                                           StateHasChanged();
                                                       })">+
                </LinkButton>
            </td>
        </tr>
    </details>
</tr>


@code {

    [Parameter]
    public required RoomBuilder roomBuilder { get; set; }

    [Parameter]
    public required Action PageStateHasChanged { get; set; }

    [Parameter]
    public AuthenticatedHomeserverGeneric Homeserver { get; set; }

    private string GetPermissionFriendlyName(string key) => key switch {
        "m.reaction" => "Send reaction",
        "m.room.avatar" => "Change room icon",
        "m.room.canonical_alias" => "Change room alias",
        "m.room.encryption" => "Enable encryption",
        "m.room.history_visibility" => "Change history visibility",
        "m.room.name" => "Change room name",
        "m.room.power_levels" => "Change power levels",
        "m.room.tombstone" => "Upgrade room",
        "m.room.topic" => "Change room topic",
        "m.room.pinned_events" => "Pin events",
        "m.room.server_acl" => "Change server ACLs",
        "org.matrix.msc4284.policy" => "Change policy server",
        "m.room.guest_access" => "Change guest access",
        _ => key
    };

}