feat(po): add week, month, year to line-item unit options
All checks were successful
PR checks / checks (pull_request) Successful in 31s
All checks were successful
PR checks / checks (pull_request) Successful in 31s
The PO line-items Unit of Measure dropdown only offered hr/day among time-based units. Add week, month and year so durations beyond days can be selected, as requested. UOM_OPTIONS is the single source of truth and `unit` is validated as a free-form string, so no schema/validation change is needed. Fixes #44 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
5bb3549142
commit
e9e618fda8
2 changed files with 24 additions and 2 deletions
|
|
@ -20,8 +20,11 @@ const UOM_OPTIONS = [
|
|||
{ value: "mL", label: "mL — Millilitre" },
|
||||
{ value: "m", label: "m — Metre" },
|
||||
{ value: "m2", label: "m² — Sq. Metre" },
|
||||
{ value: "hr", label: "hr — Hour" },
|
||||
{ value: "day", label: "day — Day" },
|
||||
{ value: "hr", label: "hr — Hour" },
|
||||
{ value: "day", label: "day — Day" },
|
||||
{ value: "week", label: "week — Week" },
|
||||
{ value: "month", label: "month — Month" },
|
||||
{ value: "year", label: "year — Year" },
|
||||
{ value: "lump", label: "lump — Lump Sum" },
|
||||
{ value: "Ltr", label: "Ltr — Litre (alt)" },
|
||||
];
|
||||
|
|
|
|||
|
|
@ -93,6 +93,25 @@ describe("LineItemsEditor — edit mode", () => {
|
|||
const lastCall = onChange.mock.calls[onChange.mock.calls.length - 1][0] as LineItemInput[];
|
||||
expect(lastCall[0].gstRate).toBeCloseTo(0.05);
|
||||
});
|
||||
|
||||
it("offers month and year as unit-of-measure options", () => {
|
||||
render(<LineItemsEditor items={[DEFAULT_ITEM]} onChange={vi.fn()} />);
|
||||
const selects = screen.getAllByRole("combobox") as HTMLSelectElement[];
|
||||
const unitSelect = selects.find((s) => s.value === "pc")!;
|
||||
const values = Array.from(unitSelect.options).map((o) => o.value);
|
||||
expect(values).toContain("month");
|
||||
expect(values).toContain("year");
|
||||
});
|
||||
|
||||
it("calls onChange with the selected duration unit", async () => {
|
||||
const onChange = vi.fn();
|
||||
render(<LineItemsEditor items={[DEFAULT_ITEM]} onChange={onChange} />);
|
||||
const selects = screen.getAllByRole("combobox") as HTMLSelectElement[];
|
||||
const unitSelect = selects.find((s) => s.value === "pc")!;
|
||||
fireEvent.change(unitSelect, { target: { value: "year" } });
|
||||
const lastCall = onChange.mock.calls[onChange.mock.calls.length - 1][0] as LineItemInput[];
|
||||
expect(lastCall[0].unit).toBe("year");
|
||||
});
|
||||
});
|
||||
|
||||
// ── Totals calculation (edit mode) ────────────────────────────────────────────
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue