Files
sure/app/javascript/controllers/pension_system_controller.js
ChakibMoMi 4f3230c904 Generalize pension system: multi-country strategy pattern
- Add JSONB pension_params column to retirement_configs
- Add data JSONB column to pension_entries
- Create pension calculator strategy classes (Base, DeGrv, UsSocialSecurity, UkStatePension, FrRegimeGeneral, EsSocialSecurity)
- Update RetirementConfig model to delegate to calculators
- Make PensionEntry.current_points optional for non-points systems
- Update controller strong params (pension_params: {})
- Add Stimulus pension_system_controller for dynamic form fields
- Update views with per-country field groups and conditional points columns
- Expand i18n (EN, DE) and add ES, FR locale files
- Update fixtures and tests for new schema

Addresses review feedback from jjmata on PR #1057
2026-04-09 00:37:11 +02:00

33 lines
1.0 KiB
JavaScript

import { Controller } from "@hotwired/stimulus";
// Toggles visibility of country-specific pension field groups
// based on the selected pension system.
//
// Usage:
// <div data-controller="pension-system">
// <select data-pension-system-target="select" data-action="change->pension-system#toggle">
// <div data-pension-system-target="fields" data-pension-system-key="de_grv"> ... </div>
// <div data-pension-system-target="fields" data-pension-system-key="us_ss"> ... </div>
// </div>
export default class extends Controller {
static targets = ["select", "fields"];
connect() {
this.toggle();
}
toggle() {
const selected = this.selectTarget.value;
this.fieldsTargets.forEach((el) => {
if (el.dataset.pensionSystemKey === selected) {
el.classList.remove("hidden");
el.querySelectorAll("input, select").forEach((i) => (i.disabled = false));
} else {
el.classList.add("hidden");
el.querySelectorAll("input, select").forEach((i) => (i.disabled = true));
}
});
}
}