website

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

commit 21541128ac663b8696201d9f5b6e7d857f341dba
parent 73fb2c94a3fc40955273de793fb2bf3aa3d239d5
Author: hrryt <harry@mayesfield.uk>
Date:   Fri, 31 Jul 2026 19:54:51 +0100

Disallow none checked in MultipleSelection

Diffstat:
Msrc/components/MultipleSelection.jsx | 15++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/components/MultipleSelection.jsx b/src/components/MultipleSelection.jsx @@ -1,6 +1,19 @@ 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; + })); + } + return ( <fieldset key={id}> <legend>{legend}</legend> @@ -8,7 +21,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} defaultChecked={defaults[i]} /> + <input type="checkbox" id={name} name={name} checked={checked[i]} disabled={!isEnabled(checked, i)} onChange={e => setCheckedI(e.target.checked, i)} /> <label htmlFor={name}>{labels[i]}</label> </div> );