From acd4ca24259da98839847130bf34a27d10b0cf9f Mon Sep 17 00:00:00 2001 From: Jake Mannens Date: Wed, 16 Aug 2023 14:19:33 +1000 Subject: Fixed most existing dialogs --- Pages/Component/MediaTagTable.razor | 69 ++++++++++++++++++++--------------- Pages/Component/TagSelectDialog.razor | 49 +++++++++++++++---------- 2 files changed, 68 insertions(+), 50 deletions(-) (limited to 'Pages/Component') diff --git a/Pages/Component/MediaTagTable.razor b/Pages/Component/MediaTagTable.razor index 1bd4de4..d4a4283 100644 --- a/Pages/Component/MediaTagTable.razor +++ b/Pages/Component/MediaTagTable.razor @@ -9,24 +9,27 @@ Tag Name - @foreach(var tag in userTags) { - bool isImplicit = IsImplicit(tag); + @foreach(var tagDef in tagDefs) { - @if(isImplicit) { - @tag.Namespace + @if(implicitTags[tagDef.Guid]) { + @tagDef.Namespace } else { - @tag.Namespace + @tagDef.Namespace } - @if(isImplicit) { - @tag.Name + @if(implicitTags[tagDef.Guid]) { + @tagDef.Name } else { - @tag.Name + @tagDef.Name + } + + + @if(!implicitTags[tagDef.Guid]) { + Delete(tagDef))>Delete } - Delete(tag))>Delete } @@ -35,32 +38,38 @@ [Parameter] public Media Media { get; set; } - private IEnumerable userTags { - get { - using var db = dbFactory.CreateDbContext(); - if(db.Entry(Media).State == EntityState.Detached) - db.Attach(Media); - return GetTagRecursive( - Media.Tags - .Select(t => t.TagDefinition)) - .Where(td => td.Source == TagSource.UserTag) - .OrderBy(td => td.Namespace) - .ThenBy(td => td.Name) - .ToArray(); - } - } + private TagDefinition[] tagDefs; + private Dictionary implicitTags; - public void Refresh() => StateHasChanged(); + protected override void OnInitialized() => LoadTagDefs(); - private void Delete(TagDefinition tagDef) { - tagService.RemoveTag(Media, tagDef); + public void Refresh() { + LoadTagDefs(); StateHasChanged(); } - private bool IsImplicit(TagDefinition tagDef) => - !Media.Tags - .Select(t => t.TagDefinition.Guid) - .Contains(tagDef.Guid); + 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 = GetTagRecursive( + media.Tags + .Select(t => t.TagDefinition)) + .Where(td => td.Source == TagSource.UserTag) + .OrderBy(td => td.Namespace) + .ThenBy(td => td.Name) + .ToArray(); + + implicitTags = new(tagDefs + .Select(td => new KeyValuePair( + td.Guid, + !media.Tags.Select(t => t.TagDefinition.Guid).Contains(td.Guid)))); +} private IEnumerable GetTagRecursive(IEnumerable tagDefs) => tagDefs diff --git a/Pages/Component/TagSelectDialog.razor b/Pages/Component/TagSelectDialog.razor index 590c8f2..ebf6d58 100644 --- a/Pages/Component/TagSelectDialog.razor +++ b/Pages/Component/TagSelectDialog.razor @@ -1,13 +1,20 @@ -@inject HBContext db +@inject IDbContextFactory dbFactory +@implements IDisposable
- @foreach(var tagDef in tagDefinitions) { - Checked(tagDef, e.Value))/> - + @for(int i = 0; i < tagDefinitions.Count(); i++) { + var local = i; + + }
@@ -28,32 +35,34 @@ set => visible = dialog.Visible = value; } - private bool visible; + private (TagDefinition tagDefinition, bool selected)[] tagDefinitions; - private Dialog dialog; + private HBContext db; - private IEnumerable tagDefinitions => db.TagDefinitions - .Where(td => td.Source == TagSource.UserTag) - .OrderBy(td => td.Name); + private Dialog dialog; - private List selected = new(); + private bool visible; public void Show() => Visible = true; public void Hide() => Visible = false; + protected override void OnInitialized() { + db = dbFactory.CreateDbContext(); + tagDefinitions = db.TagDefinitions + .Where(td => td.Source == TagSource.UserTag) + .OrderBy(td => td.Name) + .Select(td => new Tuple(td, false).ToValueTuple()) + .ToArray(); + } + private async void Submit() { - await OnSubmit.InvokeAsync(selected.ToArray()); - selected.Clear(); + await OnSubmit.InvokeAsync( + tagDefinitions.Select(e => e.tagDefinition).ToArray()); + for(int i = 0; i < tagDefinitions.Count(); i++) + tagDefinitions[i].selected = false; Hide(); StateHasChanged(); } - private void Checked(TagDefinition tagDef, object? isChecked) { - if(isChecked is bool && (bool) isChecked == true) - if (!selected.Contains(tagDef)) - selected.Add(tagDef); - else - if (selected.Contains(tagDef)) - selected.Remove(tagDef); - } + public void Dispose() => db.Dispose(); } -- cgit v1.3