From 0a91dd4ff3cde5be77ad1063f380cbdf986bcef5 Mon Sep 17 00:00:00 2001 From: Dev Date: Tue, 7 Apr 2026 10:08:52 +0200 Subject: [PATCH] feat(06-04): update TransferViewModel for global site consumption; confirm BulkMembers excluded - TransferViewModel: add _hasLocalSourceSiteOverride field - Override OnGlobalSitesChanged to pre-fill SourceSiteUrl from first global site - Add OnSourceSiteUrlChanged partial to detect local user input - Reset _hasLocalSourceSiteOverride on tenant switch - BulkMembersViewModel confirmed excluded: no SiteUrl field, CSV-driven, no OnGlobalSitesChanged override added --- .../ViewModels/Tabs/TransferViewModel.cs | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/SharepointToolbox/ViewModels/Tabs/TransferViewModel.cs b/SharepointToolbox/ViewModels/Tabs/TransferViewModel.cs index a614bc7..45c8ecd 100644 --- a/SharepointToolbox/ViewModels/Tabs/TransferViewModel.cs +++ b/SharepointToolbox/ViewModels/Tabs/TransferViewModel.cs @@ -17,6 +17,7 @@ public partial class TransferViewModel : FeatureViewModelBase private readonly BulkResultCsvExportService _exportService; private readonly ILogger _logger; private TenantProfile? _currentProfile; + private bool _hasLocalSourceSiteOverride; // Source selection [ObservableProperty] private string _sourceSiteUrl = string.Empty; @@ -61,6 +62,26 @@ public partial class TransferViewModel : FeatureViewModelBase ExportFailedCommand = new AsyncRelayCommand(ExportFailedAsync, () => HasFailures); } + protected override void OnGlobalSitesChanged(IReadOnlyList sites) + { + if (_hasLocalSourceSiteOverride) return; + SourceSiteUrl = sites.Count > 0 ? sites[0].Url : string.Empty; + } + + partial void OnSourceSiteUrlChanged(string value) + { + if (string.IsNullOrWhiteSpace(value)) + { + _hasLocalSourceSiteOverride = false; + if (GlobalSites.Count > 0) + SourceSiteUrl = GlobalSites[0].Url; + } + else if (GlobalSites.Count == 0 || value != GlobalSites[0].Url) + { + _hasLocalSourceSiteOverride = true; + } + } + protected override async Task RunOperationAsync(CancellationToken ct, IProgress progress) { if (_currentProfile == null) @@ -152,6 +173,7 @@ public partial class TransferViewModel : FeatureViewModelBase protected override void OnTenantSwitched(TenantProfile profile) { _currentProfile = profile; + _hasLocalSourceSiteOverride = false; SourceSiteUrl = string.Empty; SourceLibrary = string.Empty; SourceFolderPath = string.Empty;