From 34ea58182d9f902c3a9ac85f7850ad3e4e3a64f1 Mon Sep 17 00:00:00 2001 From: Paul Schneider Date: Sun, 30 Aug 2026 19:44:25 +0100 Subject: [PATCH] display the circle names --- .../ViewModels/PostAclDialogViewModel.cs | 34 ++++++++++++++----- src/PostIt/PostIt/Views/PostAclDialog.axaml | 7 ++-- 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/PostIt/PostIt/ViewModels/PostAclDialogViewModel.cs b/src/PostIt/PostIt/ViewModels/PostAclDialogViewModel.cs index 1c6b8864..60544606 100644 --- a/src/PostIt/PostIt/ViewModels/PostAclDialogViewModel.cs +++ b/src/PostIt/PostIt/ViewModels/PostAclDialogViewModel.cs @@ -15,6 +15,12 @@ using System.Net.Http; namespace PostIt.ViewModels; +public sealed class PostAclEntry +{ + public long CircleId { get; init; } + public string CircleName { get; init; } = string.Empty; +} + /// /// View model for the "Gérer l'ACL" modal of a single blog post. /// @@ -45,7 +51,7 @@ public partial class PostAclDialogViewModel : ViewModelBase MyCircles { get; set; } = new(); [ObservableProperty] - public partial ObservableCollection + public partial ObservableCollection AclEntries { get; set; } = new(); [ObservableProperty] @@ -82,10 +88,7 @@ public partial class PostAclDialogViewModel : ViewModelBase _aclClient = aclClient ?? throw new ArgumentNullException(nameof(aclClient)); _circleClient = circleClient ?? throw new ArgumentNullException(nameof(circleClient)); - AclEntries = new ObservableCollection(post.GetACL().Select(a => new CircleAuthorization - { - CircleId = a.CircleId - })); + AclEntries = new ObservableCollection(post.GetACL().Select(a => ToAclEntry(a.CircleId))); SelectedCircleToAdd = null; } @@ -108,6 +111,9 @@ public partial class PostAclDialogViewModel : ViewModelBase var circles = circlesTask.Result ?? new List(); MyCircles = new ObservableCollection(circles); + // Resolve labels now that circles are available. + AclEntries = new ObservableCollection(AclEntries.Select(a => ToAclEntry(a.CircleId))); + StatusMessage = $"{AclEntries.Count} autorisation(s)"; _loaded = true; @@ -147,7 +153,7 @@ public partial class PostAclDialogViewModel : ViewModelBase }); if (created is not null) { - AclEntries.Add(new CircleAuthorization { CircleId = created.CircleId }); + AclEntries.Add(ToAclEntry(created.CircleId)); StatusMessage = $"Cercle « {SelectedCircleToAdd.Name} » autorisé"; } else @@ -173,7 +179,7 @@ public partial class PostAclDialogViewModel : ViewModelBase } [RelayCommand] - public async Task RevokeAsync(PostAccessControlRulePayload? acl) + public async Task RevokeAsync(PostAclEntry? acl) { if (acl is null) return; IsBusy = true; @@ -200,10 +206,20 @@ public partial class PostAclDialogViewModel : ViewModelBase var allAcl = await _aclClient.GetMyAclAsync(); var currentPostAcl = (allAcl ?? new List()) .Where(a => a.BlogPostId == Post.Id) - .Select(a => new CircleAuthorization { CircleId = a.CircleId }) + .Select(a => ToAclEntry(a.CircleId)) .GroupBy(a => a.CircleId) .Select(g => g.First()) .ToList(); - AclEntries = new ObservableCollection(currentPostAcl); + AclEntries = new ObservableCollection(currentPostAcl); + } + + private PostAclEntry ToAclEntry(long circleId) + { + var circleName = MyCircles.FirstOrDefault(c => c.Id == circleId)?.Name; + return new PostAclEntry + { + CircleId = circleId, + CircleName = string.IsNullOrWhiteSpace(circleName) ? $"Cercle #{circleId}" : circleName + }; } } diff --git a/src/PostIt/PostIt/Views/PostAclDialog.axaml b/src/PostIt/PostIt/Views/PostAclDialog.axaml index da5320d3..8552988e 100644 --- a/src/PostIt/PostIt/Views/PostAclDialog.axaml +++ b/src/PostIt/PostIt/Views/PostAclDialog.axaml @@ -3,8 +3,7 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="PostIt.Views.PostAclDialog" xmlns:vm="using:PostIt.ViewModels" - xmlns:dtos="using:Yavsc.Api.Client.Dtos" - xmlns:yabst="using:Yavsc.Abstract.Identity.Security" + xmlns:dtos="using:Yavsc.Api.Client.Dtos" x:DataType="vm:PostAclDialogViewModel" > @@ -32,10 +31,10 @@ - + -