diff options
author | sowgro <tpoke.ferrari@gmail.com> | 2024-11-07 12:40:42 -0500 |
---|---|---|
committer | sowgro <tpoke.ferrari@gmail.com> | 2024-11-07 12:40:42 -0500 |
commit | 03b7ccaa5c152c8d7ed73374be8ad4d4d034845b (patch) | |
tree | 7ce20a5749018fbe82c85ee1bd7c2a5c5083eb4b /extension/src/components/RadioButtonGroup.tsx | |
parent | 958ab3cd5edad8b48a3fa49e0f151b3285abdbfa (diff) | |
download | bookmarks-home-03b7ccaa5c152c8d7ed73374be8ad4d4d034845b.tar.gz bookmarks-home-03b7ccaa5c152c8d7ed73374be8ad4d4d034845b.tar.bz2 bookmarks-home-03b7ccaa5c152c8d7ed73374be8ad4d4d034845b.zip |
Implement sorting and refactor
Diffstat (limited to 'extension/src/components/RadioButtonGroup.tsx')
-rw-r--r-- | extension/src/components/RadioButtonGroup.tsx | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/extension/src/components/RadioButtonGroup.tsx b/extension/src/components/RadioButtonGroup.tsx new file mode 100644 index 0000000..297800d --- /dev/null +++ b/extension/src/components/RadioButtonGroup.tsx @@ -0,0 +1,37 @@ +import React, {ReactElement, useEffect, useId, useState} from "react"; + +/** + * A component for a group of radio buttons where only one can be selected + * + * @param props.children html <option> elements for each radio option + * @param props.value The option which is selected + * @param props.onChange A function that will be called when the selected option changes + */ +function RadioButtonGroup(props: { children: ReactElement<HTMLOptionElement>[], value: any, onChange?: (arg0: any) => void }) { + const [selected, setSelected] = useState(props.value); + useEffect(() => { + setSelected(props.value); + }, [props.value]); + useEffect(() => { + props.onChange && props.onChange(selected); + }, [selected]) + + return ( + <div className="radio-group"> + { props.children.map((item) => ( + <label> + <input + type="radio" + name={useId()} + value={item.props.value} + checked={item.props.value === selected} + onChange={e => setSelected(e.target.value)} + /> + {item.props.children.toString()} + </label> + )) } + </div> + ) +} + +export default RadioButtonGroup
\ No newline at end of file |