feat(06-04): update PermissionsViewModel for multi-site global consumption

- Add _hasLocalSiteOverride field to track local user selection
- Override OnGlobalSitesChanged to pre-populate SelectedSites from global sites
- Set _hasLocalSiteOverride=true when user picks sites via site picker dialog
- Reset _hasLocalSiteOverride=false on tenant switch (OnTenantSwitched)
This commit is contained in:
Dev
2026-04-07 10:06:57 +02:00
parent 185642f4af
commit 1bf47b5c4e

View File

@@ -75,6 +75,12 @@ public partial class PermissionsViewModel : FeatureViewModelBase
public ObservableCollection<SiteInfo> SelectedSites { get; } = new();
/// <summary>
/// True when the user has manually selected sites via the site picker on this tab.
/// Prevents global site changes from overwriting the user's local selection.
/// </summary>
private bool _hasLocalSiteOverride;
// ── Dialog factory (set by View layer — keeps Window out of ViewModel) ──
/// <summary>
@@ -152,6 +158,15 @@ public partial class PermissionsViewModel : FeatureViewModelBase
// ── FeatureViewModelBase implementation ─────────────────────────────────
protected override void OnGlobalSitesChanged(IReadOnlyList<SiteInfo> sites)
{
if (_hasLocalSiteOverride) return;
SelectedSites.Clear();
foreach (var site in sites)
SelectedSites.Add(site);
}
protected override async Task RunOperationAsync(CancellationToken ct, IProgress<OperationProgress> progress)
{
var urls = SelectedSites.Count > 0
@@ -214,6 +229,7 @@ public partial class PermissionsViewModel : FeatureViewModelBase
protected override void OnTenantSwitched(TenantProfile profile)
{
_currentProfile = profile;
_hasLocalSiteOverride = false;
Results = new ObservableCollection<PermissionEntry>();
SiteUrl = string.Empty;
SelectedSites.Clear();
@@ -288,6 +304,7 @@ public partial class PermissionsViewModel : FeatureViewModelBase
var dialog = OpenSitePickerDialog.Invoke();
if (dialog?.ShowDialog() == true && dialog is Views.Dialogs.SitePickerDialog picker)
{
_hasLocalSiteOverride = true;
SelectedSites.Clear();
foreach (var site in picker.SelectedUrls)
SelectedSites.Add(site);