Skip to content

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)

  1. Calculator slider UI (number inputs instead of range sliders)
  2. Calculator form validation (basic HTML5 only)
  3. LoanBoxes DescendantsOrSelf() performance
Migration documentation by Double for Progress Credit Union