docs(13-02): complete User Directory ViewModel plan
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
54
.planning/phases/12-branding-ui-views/12-RESEARCH.md
Normal file
54
.planning/phases/12-branding-ui-views/12-RESEARCH.md
Normal file
@@ -0,0 +1,54 @@
|
||||
# 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 `<Image Source=...>` 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 `<Application.Resources>`
|
||||
- `StringToVisibilityConverter` already exists — can show/hide preview based on non-null string
|
||||
|
||||
### XAML Layout
|
||||
- SettingsView uses `<StackPanel>` with `<Separator>` between sections
|
||||
- ProfileManagementDialog uses `<Grid>` with row definitions
|
||||
- Buttons: `<Button Content="{Binding Source=...}" Command="{Binding ...}" Width="60" Margin="4,0" />`
|
||||
|
||||
## Plan Breakdown
|
||||
|
||||
1. **12-01**: Base64ToImageSourceConverter + localization keys + App.xaml registration + ClientLogoPreview ViewModel property
|
||||
2. **12-02**: SettingsView.xaml MSP logo section
|
||||
3. **12-03**: ProfileManagementDialog.xaml client logo section + dialog resize
|
||||
Reference in New Issue
Block a user