diff --git a/.planning/STATE.md b/.planning/STATE.md index 820a7c5..fa1eb69 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -4,7 +4,7 @@ milestone: v1.0 milestone_name: milestone status: completed stopped_at: Completed 08-04-PLAN.md -last_updated: "2026-04-07T12:14:18.411Z" +last_updated: "2026-04-07T12:14:33.370Z" last_activity: 2026-04-07 — Completed 08-04 (Export Services Simplified Overloads) progress: total_phases: 4 @@ -102,6 +102,7 @@ Decisions are logged in PROJECT.md Key Decisions table. - [Phase 07-09]: Guest badge (orange pill) and warning icon (⚠) use DataTrigger-driven Visibility on DataGridTemplateColumn cells — collapsed by default, visible only when IsExternalUser/IsHighPrivilege=True - [Phase 07-10]: Extended CreateViewModel to 3-tuple (vm, auditMock, graphMock) so debounce test can verify SearchUsersAsync calls - [Phase 08]: ActiveItemsSource returns Results or SimplifiedResults based on IsSimplifiedMode -- View binds to single property +- [Phase 08]: InvertBoolConverter in Core/Converters namespace for reuse; summary cards use WrapPanel; row color triggers only match SimplifiedPermissionEntry ### Pending Todos diff --git a/.planning/phases/08-simplified-permissions/08-03-SUMMARY.md b/.planning/phases/08-simplified-permissions/08-03-SUMMARY.md new file mode 100644 index 0000000..5084668 --- /dev/null +++ b/.planning/phases/08-simplified-permissions/08-03-SUMMARY.md @@ -0,0 +1,76 @@ +--- +phase: 08-simplified-permissions +plan: 03 +subsystem: view +tags: [permissions, simplified-mode, xaml, ui, color-coding, summary-panel, converter] +dependency_graph: + requires: [IsSimplifiedMode, IsDetailView, ActiveItemsSource, Summaries, RiskLevel, SimplifiedPermissionEntry, PermissionSummary] + provides: [PermissionsView simplified UI, InvertBoolConverter, risk-level color coding, summary cards] + affects: [08-04, 08-05] +tech_stack: + added: [InvertBoolConverter] + patterns: [MultiDataTrigger visibility, DataTrigger color coding, WrapPanel summary cards, RelativeSource ancestor binding] +key_files: + created: + - SharepointToolbox/Core/Converters/InvertBoolConverter.cs + modified: + - SharepointToolbox/Views/Tabs/PermissionsView.xaml +decisions: + - InvertBoolConverter in Core/Converters namespace for reuse across views + - Summary cards use WrapPanel for responsive horizontal layout + - Row color triggers apply to all rows but only match SimplifiedPermissionEntry objects (no-op for PermissionEntry) +metrics: + duration_seconds: 77 + completed: "2026-04-07T12:13:00Z" +--- + +# Phase 08 Plan 03: Permissions View Simplified Mode UI Summary + +Updated PermissionsView.xaml with toggle controls, color-coded summary panel, and RiskLevel-based DataGrid row styling; created InvertBoolConverter for radio button inverse binding. + +## What Was Done + +### Task 1: Add toggles, summary panel, and color-coded DataGrid to PermissionsView.xaml + +**Commit:** 163c506 + +Added the full simplified permissions UI layer to PermissionsView.xaml: + +1. **Display Options GroupBox** in left panel with: + - Simplified Mode checkbox bound to `IsSimplifiedMode` + - Simple/Detailed radio buttons bound to `IsDetailView` (Simple uses InvertBoolConverter) + - Radio buttons disabled when simplified mode is off, with grayed-out label + +2. **Summary panel** (ItemsControl bound to `Summaries`): + - Visible only when `IsSimplifiedMode` is True (DataTrigger) + - WrapPanel layout with color-coded cards per RiskLevel + - Each card shows Count, Label, and DistinctUsers + - Colors: High=red (#FEE2E2), Medium=amber (#FEF3C7), Low=green (#D1FAE5), ReadOnly=blue (#DBEAFE) + +3. **DataGrid updates**: + - Binds to `ActiveItemsSource` instead of `Results` + - Row style with DataTrigger color coding by RiskLevel (lighter tints: #FEF2F2, #FFFBEB, #ECFDF5, #EFF6FF) + - MultiDataTrigger collapses DataGrid when IsSimplifiedMode=True AND IsDetailView=False + - New "Simplified" column bound to `SimplifiedLabels`, visibility via BooleanToVisibilityConverter on DataContext.IsSimplifiedMode + +4. **InvertBoolConverter** created at `SharepointToolbox/Core/Converters/InvertBoolConverter.cs`: + - IValueConverter that negates boolean values + - Used for "Simple" radio button binding (Simple = !IsDetailView) + +**Files created:** `SharepointToolbox/Core/Converters/InvertBoolConverter.cs` +**Files modified:** `SharepointToolbox/Views/Tabs/PermissionsView.xaml` + +## Deviations from Plan + +None - plan executed exactly as written. + +## Verification + +- `dotnet build SharepointToolbox/SharepointToolbox.csproj --no-incremental` succeeded with 0 errors, 0 warnings +- PermissionsView.xaml contains bindings for IsSimplifiedMode, IsDetailView, ActiveItemsSource, Summaries +- InvertBoolConverter.cs exists and compiles +- Summary panel uses DataTrigger on RiskLevel for color coding +- DataGrid row style uses DataTrigger on RiskLevel for row background colors +- SimplifiedLabels column visibility bound to IsSimplifiedMode via BoolToVis converter + +## Self-Check: PASSED