# Phase 12 Research: Branding UI Views ## What Exists (Phase 11 Deliverables) ### SettingsViewModel (already complete) - `BrowseMspLogoCommand` (IAsyncRelayCommand) — opens file dialog, imports via IBrandingService, saves, updates preview - `ClearMspLogoCommand` (IAsyncRelayCommand) — clears via IBrandingService, nulls preview - `MspLogoPreview` (string?) — data URI format `data:{mime};base64,{b64}`, set on load and after browse/clear - `StatusMessage` — inherited from FeatureViewModelBase, set on error ### ProfileManagementViewModel (already complete) - `BrowseClientLogoCommand` — opens file dialog, imports, persists to profile - `ClearClientLogoCommand` — nulls ClientLogo, persists - `AutoPullClientLogoCommand` — fetches from Entra branding API, persists - `ValidationMessage` — set on error or success feedback - **GAP**: No `ClientLogoPreview` string property — SelectedProfile.ClientLogo is a LogoData object, NOT a data URI string. TenantProfile is not ObservableObject, so binding to SelectedProfile.ClientLogo won't notify UI on change. ### SettingsView.xaml (NO logo UI) - Current: Language combo + Data folder text+browse — that's it - Need: Add MSP logo section with Image preview, Browse, Clear buttons ### ProfileManagementDialog.xaml (NO logo UI) - Current: Profile ListBox, Name/URL/ClientId fields, Add/Rename/Delete/Close buttons - Window: 500x480, NoResize - Need: Add client logo section with Image preview, Browse, Clear, Auto-Pull buttons; resize dialog ## Infrastructure Gaps ### No Image Converter - `MspLogoPreview` is a data URI string — WPF `` does NOT natively bind to data URI strings - Need `Base64ToImageSourceConverter` IValueConverter: parse data URI → decode base64 → create BitmapImage from byte stream - Register in App.xaml as global resource ### Localization Keys Missing - No keys for logo UI labels/buttons in Strings.resx / Strings.fr.resx - Need: `settings.logo.msp`, `settings.logo.browse`, `settings.logo.clear`, `profile.logo.client`, `profile.logo.browse`, `profile.logo.clear`, `profile.logo.autopull`, `logo.nopreview` ## Available Patterns ### Converters - Live in `SharepointToolbox/Views/Converters/` (IndentConverter.cs has multiple converters) - Registered in App.xaml under `` - `StringToVisibilityConverter` already exists — can show/hide preview based on non-null string ### XAML Layout - SettingsView uses `` with `` between sections - ProfileManagementDialog uses `` with row definitions - Buttons: `