07 -- Deep-Dive Component Migration Analysis¶
Date: 2026-02-27 (updated) Scope: Razor-level code review of 5 major component groups + widget naming audit
Current Status: ALL CRITICAL AND HIGH ITEMS RESOLVED¶
| Component | Readiness | Blocking Issues |
|---|---|---|
| LoanBoxes | 100% | None (P2 performance item deferred) |
| News | 100% | None |
| Testimonials | 100% | None |
| Calculators | 95% | P2: slider UI, form validation |
| Grid Layouts | 100% | None |
| Widget Naming | RESOLVED | All naming issues fixed |
1. LoanBoxes -- DONE¶
Commits: 30706dd (dispatcher + 4 modes + MediaPicker fix)
V8 Architecture (6 files)¶
Partials/Grid/Editors/LoanBoxes/
+-- loanBoxesCompleteGridEditor.cshtml <- DISPATCHER
+-- loanBoxesCompleteTabs.cshtml <- Tabs mode
+-- loanBoxesCompleteBoxes.cshtml <- Boxes mode (Fancybox popups)
+-- loanBoxesCompleteFlipCards.cshtml <- FlipCards mode (CSS animated flip)
+-- loanBoxesCompleteAccordion.cshtml <- Accordion mode
+-- accordionContact.cshtml <- Contact sub-partial
V17 Implementation -- All 4 Modes Working¶
The dispatcher reads the display property and routes to the correct mode. All 4 display modes are implemented:
| Mode | Status | Notes |
|---|---|---|
| Tabs | DONE | Bootstrap tabs, icons from MediaPicker, sub-items from NestedContent |
| Boxes | DONE | Bootstrap modal popup UI |
| FlipCards | DONE | CSS 3D flip animation |
| Accordion | DONE | Bootstrap collapse panels |
MediaPicker fix applied: Uses MediaWithCrops + .MediaUrl() (not IPublishedContent).
Remaining P2 item: DescendantsOrSelf() traverses the content tree for site settings. Should use ISiteSettingsService.
2. News Dispatcher -- DONE¶
Commits: 599d7f8 (culture/visibility filters, property casing)
V17 Implementation (8 files -- all present)¶
Dispatcher: blockgrid/Components/grid_element_newscompletegrideditor.cshtml
Sub-partials: Partials/news/ -- all 7 layout files present
| Issue | Resolution |
|---|---|
| Property alias casing (ArticleImage vs articleImage) | DONE -- verified against element type; casing matches |
| Culture filtering in NewsList, topStory, topStory5Articles | DONE -- uses IVariationContextAccessor |
| Visibility filtering in topStory | DONE -- uses IsVisible() |
| Unused IImageUrlGenerator in 4AcrossNews | DONE -- removed |
3. Testimonials -- DONE¶
Commits: 599d7f8 (all 4 issues fixed)
V17 Implementation (1 merged file + shared card partial)¶
All 3 modes (slider, sliderInner, list) are merged into grid_element_testimonialcompletegrideditor.cshtml with if/else branches.
| Issue | Resolution |
|---|---|
| Slider column layout (was col-lg-4, should be col-md-12) | DONE -- full-width carousel layout |
| sliderInner lost image suppression | DONE -- conditional image rendering |
| Missing "read more" link | DONE -- link to testimonial detail page |
| Default layout changed (was "list", should be "slider") | DONE -- matches v8 default |
4. Calculators -- 95% DONE¶
Commits: ff6173c (API controller + stubs implemented + JS endpoints + service fields), plus localization pass
V17 Implementation (2-layer architecture)¶
| Type | Status | Notes |
|---|---|---|
| calculatorSmall | DONE | Compact form, AJAX submit, result display |
| calculatorInput | DONE | Labeled inputs, submit, result panel |
| calculatorInputVarRate | DONE | 257 lines, variable rate logic implemented |
| calculatorLarge | PARTIAL | Number inputs in place; slider UI deferred (P2) |
| calculatorIcon | DONE | 284 lines, icon grid with pop-out calculator |
| calculatorTool | DONE | Full tool with tabs |
Localization: DONE -- all 6 partials use IDictionaryService for Irish language support.
API Controller: DONE -- v17 API controller replaces v8 CalculatorsSurfaceController. All JS files updated to use new endpoints.
Service fields: DONE -- loanStepIncrement, termStepIncrement, etc. added to ICalculatorService.
Remaining P2 items:
- Slider UI for calculatorLarge (number inputs instead of range sliders)
- Form validation (basic HTML5 only; needs jQuery validation with localization)
5. Grid Layout Views -- DONE (No Changes Needed)¶
V8 to V17 Consolidation¶
11 v8 grid layout files were consolidated into 3 v17 files:
| V17 File | Purpose |
|---|---|
BootstrapGrid.cshtml |
Universal renderer, parameterized via ViewData |
_MultiSectionGrid.cshtml |
Multi-section sidebar handler |
footerDefault.cshtml |
Footer-specific renderer |
The property whitelist in BlockGridExtensions.cs was audited against all 14 v8 grid datatype configs. All properties are covered. No custom v8 properties were found outside the whitelist.
6. Widget Naming Convention -- RESOLVED¶
Commit: 65aace9 (naming fixes), 321ae86 (API keys externalized)
| Issue | Resolution |
|---|---|
| 4 naming conventions in blockgrid/Components | Accepted -- prefix-based naming is sufficient |
| Data protection duplicate pairs | DONE -- stubs removed, correct files retained |
| True duplicate (gridelementsubmenu) | DONE -- removed |
| Wrong header comments in 6 files | DONE -- corrected |
| Hardcoded API keys | DONE -- moved to appsettings.json |
Summary¶
All Original Issues by Severity¶
| Severity | Original Count | Resolved |
|---|---|---|
| CRITICAL | 11 | 11 |
| HIGH | 5 | 5 |
| MEDIUM | 9 | 9 |
| LOW | 6 | 6 |
Remaining P2 Items (Non-Blocking)¶
- Calculator slider UI (number inputs instead of range sliders)
- Calculator form validation (basic HTML5 only)
- LoanBoxes
DescendantsOrSelf()performance