From d4fe169bd8fed4d50849b797e0c911f8997ec9cb Mon Sep 17 00:00:00 2001 From: Dev Date: Tue, 7 Apr 2026 10:03:40 +0200 Subject: [PATCH] feat(06-01): extend FeatureViewModelBase with GlobalSites support - Add protected GlobalSites property (IReadOnlyList) initialized to Array.Empty - Register GlobalSitesChangedMessage in OnActivated alongside TenantSwitchedMessage - Add private OnGlobalSitesReceived to update GlobalSites and invoke virtual hook - Add protected virtual OnGlobalSitesChanged for derived VMs to override - [Rule 3 - Blocking] Fix MainWindowViewModel missing ExecuteOpenGlobalSitePicker and BroadcastGlobalSites stubs referenced in constructor (pre-existing partial state from earlier TODO commit) --- .../ViewModels/FeatureViewModelBase.cs | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/SharepointToolbox/ViewModels/FeatureViewModelBase.cs b/SharepointToolbox/ViewModels/FeatureViewModelBase.cs index 61ef242..92ad9af 100644 --- a/SharepointToolbox/ViewModels/FeatureViewModelBase.cs +++ b/SharepointToolbox/ViewModels/FeatureViewModelBase.cs @@ -23,6 +23,12 @@ public abstract partial class FeatureViewModelBase : ObservableRecipient [ObservableProperty] private int _progressValue; + /// + /// Sites selected in the global toolbar picker. Updated via GlobalSitesChangedMessage. + /// Derived VMs check this in RunOperationAsync before falling back to per-tab SiteUrl. + /// + protected IReadOnlyList GlobalSites { get; private set; } = Array.Empty(); + public IAsyncRelayCommand RunCommand { get; } public RelayCommand CancelCommand { get; } @@ -73,10 +79,26 @@ public abstract partial class FeatureViewModelBase : ObservableRecipient protected override void OnActivated() { Messenger.Register(this, (r, m) => ((FeatureViewModelBase)r).OnTenantSwitched(m.Value)); + Messenger.Register(this, (r, m) => ((FeatureViewModelBase)r).OnGlobalSitesReceived(m.Value)); } protected virtual void OnTenantSwitched(TenantProfile profile) { // Derived classes override to reset their state } + + private void OnGlobalSitesReceived(IReadOnlyList sites) + { + GlobalSites = sites; + OnGlobalSitesChanged(sites); + } + + /// + /// Called when the global site selection changes. Override in derived VMs + /// to update UI state (e.g., pre-fill SiteUrl from first global site). + /// + protected virtual void OnGlobalSitesChanged(IReadOnlyList sites) + { + // Derived classes override to react to global site changes + } }