fix(sort): harden shared sort primitives (R13 S1 review round 2)
- SortControl no longer renders a blank select when an always-sorted view (no defaultLabel) is handed a key its options don't offer: it falls back to the first option instead of value="" (which also tripped React's controlled warning). Robustness now lives in the primitive, not each caller. - PLEX_SORT_FALLBACK is Object.frozen: it's handed out by reference from healSort/healPlexSort and stored as provider state, so freezing turns any accidental in-place SortState mutation into a loud error instead of silently corrupting the shared fallback. - Test: SortControl falls back to the first option for an unavailable key. Gate green: tsc/eslint(0 err)/prettier/knip clean, vitest 106.
This commit is contained in:
@@ -47,6 +47,11 @@ describe("SortControl", () => {
|
||||
expect(none.value).toBe("");
|
||||
});
|
||||
|
||||
it("falls back to the first option (not a blank select) for an unavailable key without defaultLabel", () => {
|
||||
renderControl({ key: "ghost", dir: "asc" });
|
||||
expect((screen.getByRole("combobox") as HTMLSelectElement).value).toBe("date");
|
||||
});
|
||||
|
||||
it("picking a new option fires onChange at that option's defaultDir", () => {
|
||||
const { onChange } = renderControl({ key: "title", dir: "asc" });
|
||||
fireEvent.change(screen.getByRole("combobox"), { target: { value: "date" } });
|
||||
|
||||
Reference in New Issue
Block a user