Skip to content

Commit ab91c34

Browse files
committed
feat: scaffold the component for segmented control
1 parent c1d0a55 commit ab91c34

File tree

2 files changed

+71
-0
lines changed

2 files changed

+71
-0
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
import { useState } from 'react'
2+
import { SelectPickerOptionType } from '@Shared/Components'
3+
// import { ComponentSizeType } from '@Shared/constants'
4+
5+
type SegmentType = Pick<SelectPickerOptionType, 'label' | 'value' | 'startIcon' | 'tooltipProps'>
6+
7+
export interface NSegmentedControlProps {
8+
segments: SegmentType[]
9+
// initialSelectedTab: TabType['value']
10+
onChange?: (selectedTab: SegmentType) => void
11+
// disabled?: boolean
12+
name: string
13+
// size?: Extract<ComponentSizeType, ComponentSizeType.xs | ComponentSizeType.small | ComponentSizeType.medium>
14+
}
15+
16+
const NSegmentedControl = ({ segments, onChange, name }: NSegmentedControlProps) => {
17+
const [selectedSegmentValue, setSelectedSegmentValue] = useState<SegmentType['value'] | null>(segments[0].value)
18+
19+
const handleSegmentChange = (updatedSegment: SegmentType) => {
20+
setSelectedSegmentValue(updatedSegment.value)
21+
onChange?.(updatedSegment)
22+
}
23+
24+
return (
25+
<div>
26+
<div className="dc__inline-flex dc__content-center dc__align-items-center dc__gap-2 br-6 bg__tertiary p-2">
27+
{segments.map((segment) => {
28+
const isSelected = segment.value === selectedSegmentValue
29+
30+
return (
31+
<div
32+
key={segment.value}
33+
// className={`segment ${i === activeIndex ? 'active' : 'inactive'}`}
34+
// ref={item.ref}
35+
className="dc__position-rel dc__text-center"
36+
>
37+
<input
38+
type="radio"
39+
value={segment.value}
40+
id={`${name}-${segment.value}`}
41+
name={name}
42+
onChange={() => handleSegmentChange(segment)}
43+
checked={isSelected}
44+
className="dc__opacity-0 m-0-imp dc__top-0 dc__left-0 dc__position-abs dc__bottom-0 dc__right-0 w-100 pointer h-100"
45+
/>
46+
<label
47+
htmlFor={`${name}-${segment.value}`}
48+
className={`"pointer m-0 dc__block py-3 px-7 br-4 flex py-1 px-5 flex dc__gap-4 ${isSelected ? 'bg__primary' : ''}`}
49+
style={
50+
isSelected
51+
? {
52+
border: '0.5px solid var(--border-secondary)',
53+
boxShadow: '0px 1px 2px 0px var(--black-20)',
54+
}
55+
: {}
56+
}
57+
>
58+
{segment.label}
59+
</label>
60+
</div>
61+
)
62+
})}
63+
</div>
64+
</div>
65+
)
66+
}
67+
68+
export default NSegmentedControl

src/Common/SegmentedControl/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,6 @@
1616

1717
export { type SegmentedControlProps, SegmentedControlVariant } from './types'
1818
export { default as SegmentedControl } from './SegmentedControl.component'
19+
20+
export { default as NSegmentedControl } from './NSegmentedControl.component'
21+
export { type NSegmentedControlProps } from './NSegmentedControl.component'

0 commit comments

Comments
 (0)