website

source code for the ttmaths.uk website
Log | Files | Refs | README

commit 4928862656a56f065773d4e5c65b7de9a121ddb5
parent 21541128ac663b8696201d9f5b6e7d857f341dba
Author: hrryt <harry@mayesfield.uk>
Date:   Fri, 31 Jul 2026 20:36:18 +0100

Invert multiple selection if none imminent

Diffstat:
Msrc/components/MultipleSelection.jsx | 14++++----------
1 file changed, 4 insertions(+), 10 deletions(-)

diff --git a/src/components/MultipleSelection.jsx b/src/components/MultipleSelection.jsx @@ -1,17 +1,11 @@ import * as React from 'react'; -function isEnabled(checked, index) { - return checked.some((value, i) => i === index ? !checked : value); -} - export default function MultipleSelection({ id, legend, values, labels = values, defaults = values.map(() => true) }) { const [checked, setChecked] = React.useState(defaults); - function setCheckedI(newValue, index) { - setChecked(checked.map((value, i) => { - if (i === index) { return newValue; } - return value; - })); + function updateChecked(newValue, index) { + const newChecked = checked.map((value, i) => i === index ? newValue : value); + setChecked(newChecked.some(Boolean) ? newChecked : checked.map((value) => !value)); } return ( @@ -21,7 +15,7 @@ export default function MultipleSelection({ id, legend, values, labels = values, const name = `${id}:${value}`; return ( <div key={value} className="field-row"> - <input type="checkbox" id={name} name={name} checked={checked[i]} disabled={!isEnabled(checked, i)} onChange={e => setCheckedI(e.target.checked, i)} /> + <input type="checkbox" id={name} name={name} checked={checked[i]} onChange={e => updateChecked(e.target.checked, i)} /> <label htmlFor={name}>{labels[i]}</label> </div> );