Skip to content

Commit 937327b

Browse files
committed
feat: add support for disabled attribute in segmented control
1 parent 0e109f9 commit 937327b

File tree

3 files changed

+17
-4
lines changed

3 files changed

+17
-4
lines changed

src/Common/SegmentedControl/Segment.tsx

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,16 @@ const wrapWithTooltip = (tooltipProps: SegmentType['tooltipProps']) => (children
1212
</Tooltip>
1313
)
1414

15-
const Segment = ({ segment, isSelected, name, selectedSegmentRef, onChange, fullWidth, size }: SegmentProps) => {
15+
const Segment = ({
16+
segment,
17+
isSelected,
18+
name,
19+
selectedSegmentRef,
20+
onChange,
21+
fullWidth,
22+
size,
23+
disabled,
24+
}: SegmentProps) => {
1625
const { value, icon, isError, label, tooltipProps, ariaLabel } = segment
1726
const handleChange = () => {
1827
onChange(segment)
@@ -32,11 +41,12 @@ const Segment = ({ segment, isSelected, name, selectedSegmentRef, onChange, full
3241
onChange={handleChange}
3342
checked={isSelected}
3443
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 dc__visibility-hidden"
44+
disabled={disabled}
3545
/>
3646

3747
<label
3848
htmlFor={`${name}-${value}`}
39-
className={`pointer m-0 flex ${!fullWidth ? 'left' : ''} dc__gap-4 br-4 segmented-control__segment segmented-control__segment--${size} ${isSelected ? 'fw-6 segmented-control__segment--selected' : 'fw-4'} ${segment.isError ? 'cr-5' : 'cn-9'} ${COMPONENT_SIZE_TO_SEGMENT_CLASS_MAP[size]}`}
49+
className={`pointer m-0 flex ${!fullWidth ? 'left' : ''} dc__gap-4 br-4 segmented-control__segment segmented-control__segment--${size} ${isSelected ? 'fw-6 segmented-control__segment--selected' : 'fw-4'} ${segment.isError ? 'cr-5' : 'cn-9'} ${disabled ? 'cursor-not-allowed' : ''} ${COMPONENT_SIZE_TO_SEGMENT_CLASS_MAP[size]}`}
4050
aria-label={ariaLabel}
4151
>
4252
{(isError || icon) && (

src/Common/SegmentedControl/SegmentedControl.component.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ const SegmentedControl = ({
1111
size = ComponentSizeType.medium,
1212
value: controlledValue,
1313
fullWidth = false,
14+
disabled,
1415
}: SegmentedControlProps) => {
1516
const isUnControlledComponent = controlledValue === undefined
1617

@@ -38,7 +39,7 @@ const SegmentedControl = ({
3839

3940
return (
4041
<div
41-
className={`segmented-control ${!fullWidth ? 'dc__inline-flex' : ''} br-6 ${size === ComponentSizeType.xs ? 'p-1' : 'p-2'}`}
42+
className={`segmented-control ${!fullWidth ? 'dc__inline-flex' : ''} ${disabled ? 'dc__disabled' : ''} br-6 ${size === ComponentSizeType.xs ? 'p-1' : 'p-2'}`}
4243
>
4344
<div
4445
className="segmented-control__container flex left dc__position-rel dc__align-items-center dc__gap-2"
@@ -57,6 +58,7 @@ const SegmentedControl = ({
5758
isSelected={isSelected}
5859
fullWidth={fullWidth}
5960
size={size}
61+
disabled={disabled}
6062
/>
6163
)
6264
})}

src/Common/SegmentedControl/types.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ export type SegmentedControlProps = {
5454
name: string
5555
size?: Extract<ComponentSizeType, ComponentSizeType.xs | ComponentSizeType.small | ComponentSizeType.medium>
5656
fullWidth?: boolean
57+
disabled?: boolean
5758
} & (
5859
| {
5960
value?: never
@@ -72,7 +73,7 @@ export type SegmentedControlProps = {
7273
)
7374

7475
export interface SegmentProps
75-
extends Required<Pick<SegmentedControlProps, 'name' | 'onChange' | 'fullWidth' | 'size'>> {
76+
extends Required<Pick<SegmentedControlProps, 'name' | 'onChange' | 'fullWidth' | 'size' | 'disabled'>> {
7677
isSelected: boolean
7778
segment: SegmentType
7879
selectedSegmentRef: RefObject<HTMLDivElement> | undefined

0 commit comments

Comments
 (0)