summaryrefslogtreecommitdiff
path: root/Pages/Component/MediaTagTable.razor
blob: e6875298b931c888ce78f179723bca749adcb160 (plain)
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
@inject IDbContextFactory<HBContext> dbFactory
@inject ITagService tagService

<link rel="stylesheet" href="@(nameof(HyperBooru)).styles.css"/>

<table class="data-table">
    <tr>
        <th>Namespace</th>
        <th>Tag Name</th>
        <th></th>
    </tr>
    @foreach(var e in tagDefs) {
        <tr>
            <td>
                @if(e.isImplicit) {
                    <i>@e.tagDef.Namespace</i>
                } else {
                    @e.tagDef.Namespace
                }
            </td>
            <td>
                <a href="/Gallery?t=@(e.tagDef.Guid)" class="nondecorated">
                    @if(e.isImplicit) {
                        <i>@e.tagDef.Name</i>
                    } else {
                        @e.tagDef.Name
                    }
                </a>
            </td>
            <td>
                @if(!e.isImplicit) {
                    <a href="javascript:;" @onclick=@(() => Delete(e.tagDef))>Delete</a>
                } else {
                    <a href="javascript:;" @onclick=@(() => MakeExplicit(e.tagDef))>Make Explicit</a>
                }
            </td>
        </tr>
    }
</table>

@code {
    [Parameter]
    public Media Media { get; set; }

    private (TagDefinition tagDef, bool isImplicit)[] tagDefs;

    protected override void OnInitialized() => LoadTagDefs();

    public void Refresh() {
        LoadTagDefs();
        StateHasChanged();
    }

    private void Delete(TagDefinition tagDef) {
        tagService.RemoveTag(Media.Guid, tagDef.Guid);
        Refresh();
    }

    private void LoadTagDefs() {
        using var db = dbFactory.CreateDbContext();
        var media = db.Media.First(m => m.ObjectId == Media.ObjectId);

        tagDefs = tagService.GetAllTags(Media)
            .Where(e => e.tagDefinition.Source == TagSource.UserTag)
            .ToArray();
    }

    private void MakeExplicit(TagDefinition tagDef) {
        tagService.AddTag(Media, tagDef);
        Refresh();
    }
}