summaryrefslogtreecommitdiff
path: root/Pages/Component
diff options
context:
space:
mode:
Diffstat (limited to 'Pages/Component')
-rw-r--r--Pages/Component/MediaTagTable.razor43
-rw-r--r--Pages/Component/TagSelectDialog.razor25
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();