mirror of
https://github.com/we-promise/sure.git
synced 2026-05-30 07:49:01 +00:00
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
This commit is contained in:
32
app/javascript/controllers/pension_system_controller.js
Normal file
32
app/javascript/controllers/pension_system_controller.js
Normal file
@@ -0,0 +1,32 @@
|
||||
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));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user