From 963652bc612dea9f0e0684542c2053cf137f129f Mon Sep 17 00:00:00 2001 From: Christian Hood Date: Fri, 20 Mar 2026 02:12:33 -0400 Subject: [PATCH] Normalize callback prop naming to on[Noun][Verb] convention MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rename onAmountSave → onPaycheckAmountSave and onGenerate → onPaycheckGenerate in PaycheckColumn to match the on[Noun][Verb] pattern used by all other callback props (onBillPaidToggle, onBillAmountSave, etc.). Document the convention in CLAUDE.md. Nightshift-Task: event-taxonomy Nightshift-Ref: https://github.com/marcus/nightshift --- CLAUDE.md | 2 ++ client/src/pages/PaycheckView.jsx | 14 +++++++------- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 1ddc338..653b473 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -77,6 +77,8 @@ cd client && npm run test:watch - Export pure functions (validators, formatters, etc.) for direct testing - Run `npm test` in both `server/` and `client/` before committing +**Callback prop naming convention:** React callback props follow `on[Noun][Verb]` (e.g., `onBillPaidToggle`, `onPaycheckAmountSave`, `onPaycheckGenerate`). Event handler functions in the parent component use the `handle[Action]` prefix (e.g., `handleAmountSave`, `handleBillPaidToggle`). + ## Application Structure The default route `/` renders the paycheck-centric main view (`client/src/pages/PaycheckView.jsx`). It shows the current month's two paychecks side-by-side with bills, paid status, one-time expenses, and remaining balance. Month navigation (prev/next) fetches data via `GET /api/paychecks?year=&month=`. diff --git a/client/src/pages/PaycheckView.jsx b/client/src/pages/PaycheckView.jsx index ef0e872..9413690 100644 --- a/client/src/pages/PaycheckView.jsx +++ b/client/src/pages/PaycheckView.jsx @@ -29,7 +29,7 @@ export { ordinal, formatCurrency, formatPayDate }; // ─── PaycheckColumn ─────────────────────────────────────────────────────────── -function PaycheckColumn({ paycheck, onBillPaidToggle, categories, onOtePaidToggle, onOteDelete, onOteAdd, onGenerate, onAmountSave, onBillAmountSave, onFinancingPaidToggle }) { +function PaycheckColumn({ paycheck, onBillPaidToggle, categories, onOtePaidToggle, onOteDelete, onOteAdd, onPaycheckGenerate, onPaycheckAmountSave, onBillAmountSave, onFinancingPaidToggle }) { const [newOteName, setNewOteName] = useState(''); const [newOteAmount, setNewOteAmount] = useState(''); const [actuals, setActuals] = useState([]); @@ -95,7 +95,7 @@ function PaycheckColumn({ paycheck, onBillPaidToggle, categories, onOtePaidToggl // Lazy generate if this is a virtual paycheck let paycheckId = paycheck.id; if (!paycheckId) { - const generated = await onGenerate(); + const generated = await onPaycheckGenerate(); paycheckId = generated.find(p => p.paycheck_number === paycheck.paycheck_number).id; } @@ -151,7 +151,7 @@ function PaycheckColumn({ paycheck, onBillPaidToggle, categories, onOtePaidToggl setAmountSaving(true); setAmountError(null); try { - await onAmountSave(paycheck.paycheck_number, parseFloat(editGross) || 0, parseFloat(editNet) || 0); + await onPaycheckAmountSave(paycheck.paycheck_number, parseFloat(editGross) || 0, parseFloat(editNet) || 0); setEditingAmounts(false); } catch (err) { setAmountError(err.message); @@ -755,8 +755,8 @@ function PaycheckView() { onOteDelete={handleOteDelete} onOteAdd={handleOteAdd} categories={categories} - onGenerate={generateMonth} - onAmountSave={handleAmountSave} + onPaycheckGenerate={generateMonth} + onPaycheckAmountSave={handleAmountSave} onBillAmountSave={handleBillAmountSave} onFinancingPaidToggle={handleFinancingPaidToggle} /> @@ -767,8 +767,8 @@ function PaycheckView() { onOteDelete={handleOteDelete} onOteAdd={handleOteAdd} categories={categories} - onGenerate={generateMonth} - onAmountSave={handleAmountSave} + onPaycheckGenerate={generateMonth} + onPaycheckAmountSave={handleAmountSave} onBillAmountSave={handleBillAmountSave} onFinancingPaidToggle={handleFinancingPaidToggle} /> -- 2.49.1