Skip to content

Commit 015c14e

Browse files
committed
feat(Button): add single-select to button group
1 parent e8be714 commit 015c14e

4 files changed

Lines changed: 17 additions & 7 deletions

File tree

example/src/components/controls/EchoButton.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useState } from 'react'
1+
import { useEffect, useState } from 'react'
22
import { ChevronDown } from 'lucide-react'
33
import { Button, SineIcon, SquareIcon, SawtoothIcon, TriangleIcon } from '@echo-ui'
44

@@ -14,6 +14,10 @@ export const EchoButton = () => {
1414
setToggled(toggled)
1515
}
1616

17+
useEffect(() => {
18+
console.log(values)
19+
}, [values])
20+
1721
return (
1822
<section className="flex flex-col">
1923
<Button className="mb-4 w-20" size="sm">

packages/components/controller/Button/Button.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,9 @@ export const Button = forwardRef<ButtonRef, ButtonProps>((props, ref) => {
2626

2727
let toggled = _toggled
2828
if (isInGroup) {
29-
toggled = groupContext.value?.length ? groupContext.value.includes(value) : _toggled
29+
if (Array.isArray(groupContext.value)) {
30+
toggled = groupContext.value?.length ? groupContext.value.includes(value) : _toggled
31+
} else toggled = groupContext.value === value
3032
}
3133

3234
useEffect(() => {

packages/components/controller/Button/Group.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,13 @@ export const ButtonGroup = forwardRef<ButtonGroupRef, ButtonGroupProps>((props,
2121

2222
const handleGroupChange = (v: any) => {
2323
const newValue = v
24-
const updatedValue = value.includes(newValue)
25-
? value.filter((val) => val !== newValue)
26-
: [...value, newValue]
24+
25+
let updatedValue
26+
if (Array.isArray(value)) {
27+
updatedValue = value.includes(newValue)
28+
? value.filter((val) => val !== newValue)
29+
: [...value, newValue]
30+
} else updatedValue = newValue
2731

2832
onChange?.(updatedValue)
2933
}

packages/components/controller/Button/types.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export interface ButtonGroupProps extends Omit<AbstractButtonProps<ButtonGroupRe
3636
/**
3737
* @description The values associated with the button group.
3838
*/
39-
value?: any[]
39+
value?: any
4040

4141
/**
4242
* @description Allows to set custom class names for the button and toggled state.
@@ -51,7 +51,7 @@ export interface ButtonGroupProps extends Omit<AbstractButtonProps<ButtonGroupRe
5151
/**
5252
* @description Callback function when the values in the button group change.
5353
*/
54-
onChange?: (values: any[]) => void
54+
onChange?: (values: any) => void
5555
}
5656

5757
export interface ButtonRef extends HTMLButtonElement {}

0 commit comments

Comments
 (0)