@page "/TagDefinitions" @* * @inject IDbContextFactory dbFactory * @inject ITagService tagService * @inject IUserService userService * @implements IDisposable *@ @inject HBSession hb Tag Definitions
@foreach(var ns in tagNamespaces) { @foreach(var tagDef in tagDefinitions.Where(td => td.Namespace == ns)) { }
Alias Name Implicit Tags
@tagDef.Alias @tagDef.Name @{ var implicitTags = tagDefinitions .IntersectBy(tagDef.ImplicitTags, td => td.TagDefinitionId) .OrderBy(td => td.Name); // .Where(td => td.Source == TagSource.UserTag); foreach(var tag in implicitTags) { @tag.Name if(tag != implicitTags.Last()) @(", ") } } tagEditDialog.Show(tagDef))>Edit PromptToDelete(tagDef))> Delete PromptImplicitTags(tagDef))> Implicit Tags @* @if(tagDef.ImplicitTags.Select(td => td.Guid).Contains(HBContext.NsfwTag)) { SetNsfw(tagDef, false))>Make SFW } else { SetNsfw(tagDef, true))>Make NSFW } *@
}
@code { private TabContainer tabContainer; private Dialog deleteTagDialog; private TagEditDialog tagEditDialog; private TagSelectDialog implicitTagDialog; private TagDefinition? toDelete; private TagDefinition? toEditImplicit; private TagDefinition[] tagDefinitions; private string[] tagNamespaces = Array.Empty(); // protected override void OnInitialized() => // userService.UserSessionState.OnStateChange += ShowNsfwChanged; protected override void OnParametersSet() => LoadTagsAsync(); private async void LoadTagsAsync() { bool showNsfw = true; Guid[] nsfwTags = Array.Empty(); // if(!userService.UserSessionState.ShowNsfw) // nsfwTags = tagService.TagsThatImply(HBContext.NsfwTag) // .Select(td => td.ObjectId) // .ToArray(); tagDefinitions = (await hb.Tag.GetTagDefinitionAsync()) // TODO: Limit shown tags to user-tags //.Where(td => td.Source == TagSource.UserTag) .OrderBy(td => td.Namespace) .ThenBy(td => td.Name) .Where(td => showNsfw || !td.ImplicitTags.Intersect(nsfwTags).Any()) .ToArray(); tagNamespaces = tagDefinitions .Select(td => td.Namespace) .Order() .Distinct() .ToArray(); await InvokeAsync(() => StateHasChanged()); } private void PromptToDelete(TagDefinition toDelete) { this.toDelete = toDelete; deleteTagDialog.Show(); } private void DeleteTagDefinition() { // if(toDelete is null) // return; // tagService.DeleteTagDefinition(toDelete); // deleteTagDialog.Hide(); // LoadTagsAsync(); // StateHasChanged(); } private void PromptTagCreate() { string? ns = tabContainer.ActivePane?.Title; if(ns == "Default") ns = null; tagEditDialog.Show(ns); } private void TagUpdated(object? sender, EventArgs e) { LoadTagsAsync(); StateHasChanged(); } private void PromptImplicitTags(TagDefinition toEditImplicit) { // this.toEditImplicit = toEditImplicit; // implicitTagDialog.SelectedTags = // toEditImplicit.ImplicitTags.ToArray(); // implicitTagDialog.Show(); } private void SetImplicitTags(TagDefinition[] tagDefs) { if(toEditImplicit is null) return; // tagService.SetImplicitTags(toEditImplicit, tagDefs); LoadTagsAsync(); StateHasChanged(); } private void SetNsfw(TagDefinition tagDef, bool nsfw) { // if(nsfw) // tagService.AddImplicitTag(tagDef.Guid, HBContext.NsfwTag); // else // tagService.RemoveImplicitTag(tagDef.Guid, HBContext.NsfwTag); // LoadTagsAsync(); // StateHasChanged(); } // private async void ShowNsfwChanged(UserSessionState userSessionState) => // await InvokeAsync(() => { // LoadTagsAsync(); // StateHasChanged(); // }); // public void Dispose() => // userService.UserSessionState.OnStateChange -= ShowNsfwChanged; }