From 010cdfec2670b693fbfb6ca2a60bd3ebb112a827 Mon Sep 17 00:00:00 2001 From: John Kapantzakis Date: Wed, 4 Feb 2026 18:04:05 +0200 Subject: [PATCH 1/2] Refactor ButtonGroup --- src/components/button/buttonGroup.js | 52 +++++++++++++++----- src/components/button/buttonGroup.stories.js | 42 ++++------------ src/components/button/buttonGroup.test.js | 12 ++--- 3 files changed, 57 insertions(+), 49 deletions(-) diff --git a/src/components/button/buttonGroup.js b/src/components/button/buttonGroup.js index bf60450c5..7cbae2fac 100644 --- a/src/components/button/buttonGroup.js +++ b/src/components/button/buttonGroup.js @@ -1,7 +1,9 @@ -import React, { Children, isValidElement, cloneElement, useCallback } from "react" +import React, { Children, isValidElement, cloneElement } from "react" import Flex from "@/components/templates/flex" import { Button } from "./button" +const noop = () => {} + const getButtonGroupProps = (itemIndex, itemsLength) => { const groupFirst = itemIndex == 0 const groupLast = itemIndex == itemsLength - 1 @@ -30,20 +32,34 @@ const Content = ({ children }) => { ) } -const RadioButtons = ({ items, checked, buttonProps = {}, onChange }) => { +const RadioButtons = ({ items, value, isMulti, buttonProps = {}, onChange }) => { return ( <> - {items.map(({ label, value, title }, index) => { + {items.map((item, index) => { const buttonGroupProps = getButtonGroupProps(index, items.length) - const isChecked = checked === value || (Array.isArray(checked) && checked.includes(value)) + const isSelected = + value === item.value || (Array.isArray(value) && value.includes(item.value)) + + const onClick = () => { + if (isMulti) { + const newValue = Array.isArray(value) + ? value.includes(item.value) + ? value.filter(v => v !== item.value) + : [...value, item.value] + : [item.value] + onChange(newValue) + } else { + onChange(item.value) + } + } return (