diff options
Diffstat (limited to 'Pages/Component')
| -rw-r--r-- | Pages/Component/MediaTagTable.razor | 43 | ||||
| -rw-r--r-- | Pages/Component/TagSelectDialog.razor | 25 |
2 files changed, 35 insertions, 33 deletions
diff --git a/Pages/Component/MediaTagTable.razor b/Pages/Component/MediaTagTable.razor index d4a4283..278304d 100644 --- a/Pages/Component/MediaTagTable.razor +++ b/Pages/Component/MediaTagTable.razor @@ -9,25 +9,25 @@ <th>Tag Name</th> <th></th> </tr> - @foreach(var tagDef in tagDefs) { + @foreach(var e in tagDefs) { <tr> <td> - @if(implicitTags[tagDef.Guid]) { - <i>@tagDef.Namespace</i> + @if(e.isImplicit) { + <i>@e.tagDef.Namespace</i> } else { - @tagDef.Namespace + @e.tagDef.Namespace } </td> <td> - @if(implicitTags[tagDef.Guid]) { - <i>@tagDef.Name</i> + @if(e.isImplicit) { + <i>@e.tagDef.Name</i> } else { - @tagDef.Name + @e.tagDef.Name } </td> <td> - @if(!implicitTags[tagDef.Guid]) { - <a href="javascript:;" @onclick=@(() => Delete(tagDef))>Delete</a> + @if(!e.isImplicit) { + <a href="javascript:;" @onclick=@(() => Delete(e.tagDef))>Delete</a> } </td> </tr> @@ -38,8 +38,7 @@ [Parameter] public Media Media { get; set; } - private TagDefinition[] tagDefs; - private Dictionary<Guid, bool> implicitTags; + private (TagDefinition tagDef, bool isImplicit)[] tagDefs; protected override void OnInitialized() => LoadTagDefs(); @@ -57,22 +56,8 @@ 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<Guid, bool>( - td.Guid, - !media.Tags.Select(t => t.TagDefinition.Guid).Contains(td.Guid)))); -} - - private IEnumerable<TagDefinition> GetTagRecursive(IEnumerable<TagDefinition> tagDefs) => - tagDefs - .Concat(tagDefs.SelectMany(td => GetTagRecursive(td.ImplicitTags))) - .DistinctBy(td => td.Guid); + tagDefs = tagService.GetAllTags(Media) + .Where(e => e.tagDefinition.Source == TagSource.UserTag) + .ToArray(); + } } diff --git a/Pages/Component/TagSelectDialog.razor b/Pages/Component/TagSelectDialog.razor index ebf6d58..d9e297a 100644 --- a/Pages/Component/TagSelectDialog.razor +++ b/Pages/Component/TagSelectDialog.razor @@ -30,9 +30,16 @@ [Parameter] public EventCallback<TagDefinition[]> OnSubmit { get; set; } + public TagDefinition[] SelectedTags { get; set; } = + Array.Empty<TagDefinition>(); + public bool Visible { get => visible; - set => visible = dialog.Visible = value; + set { + if(value) + LoadTags(); + visible = dialog.Visible = value; + } } private (TagDefinition tagDefinition, bool selected)[] tagDefinitions; @@ -46,18 +53,28 @@ public void Show() => Visible = true; public void Hide() => Visible = false; - protected override void OnInitialized() { + protected override void OnInitialized() => LoadTags(); + + private void LoadTags() { db = dbFactory.CreateDbContext(); + + var selected = SelectedTags.Select(td => td.Guid); + tagDefinitions = db.TagDefinitions .Where(td => td.Source == TagSource.UserTag) .OrderBy(td => td.Name) - .Select(td => new Tuple<TagDefinition, bool>(td, false).ToValueTuple()) + .Select(td => new Tuple<TagDefinition, bool>( + td, + selected.Contains(td.Guid)).ToValueTuple()) .ToArray(); } private async void Submit() { await OnSubmit.InvokeAsync( - tagDefinitions.Select(e => e.tagDefinition).ToArray()); + tagDefinitions + .Where(e => e.selected) + .Select(e => e.tagDefinition) + .ToArray()); for(int i = 0; i < tagDefinitions.Count(); i++) tagDefinitions[i].selected = false; Hide(); |
