Skip to content

Commit 13d29a6

Browse files
committed
feat: add support for controlled component
1 parent 397f132 commit 13d29a6

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

src/Common/SegmentedControl/NSegmentedControl.component.tsx

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,10 @@ type SegmentType = Pick<SelectPickerOptionType, 'value'> & {
2929

3030
export interface NSegmentedControlProps {
3131
segments: SegmentType[]
32-
// initialSelectedTab: TabType['value']
32+
/**
33+
* If defined, the component is controlled
34+
*/
35+
value?: SegmentType['value']
3336
onChange?: (selectedTab: SegmentType) => void
3437
name: string
3538
size?: Extract<ComponentSizeType, ComponentSizeType.xs | ComponentSizeType.small | ComponentSizeType.medium>
@@ -53,8 +56,15 @@ const wrapWithTooltip = (tooltipProps: SegmentType['tooltipProps']) => (children
5356
</Tooltip>
5457
)
5558

56-
const NSegmentedControl = ({ segments, onChange, name, size = ComponentSizeType.medium }: NSegmentedControlProps) => {
59+
const NSegmentedControl = ({
60+
segments,
61+
onChange,
62+
name,
63+
size = ComponentSizeType.medium,
64+
value: controlledValue,
65+
}: NSegmentedControlProps) => {
5766
const [selectedSegmentValue, setSelectedSegmentValue] = useState<SegmentType['value'] | null>(segments[0].value)
67+
const segmentValue = controlledValue === undefined ? selectedSegmentValue : controlledValue
5868

5969
const handleSegmentChange = (updatedSegment: SegmentType) => {
6070
setSelectedSegmentValue(updatedSegment.value)
@@ -67,7 +77,7 @@ const NSegmentedControl = ({ segments, onChange, name, size = ComponentSizeType.
6777
>
6878
{segments.map((segment) => {
6979
const { value, icon, isError, label, tooltipProps, ariaLabel } = segment
70-
const isSelected = value === selectedSegmentValue
80+
const isSelected = value === segmentValue
7181

7282
return (
7383
<ConditionalWrap

0 commit comments

Comments
 (0)