17
17
import React , { SyntheticEvent , useCallback } from 'react'
18
18
import { Icon as IconComponent } from '@Shared/Components'
19
19
import { throttle , useEffectAfterMount } from '../Helper'
20
+ import { CHECKBOX_VALUE } from '@Common/Types'
20
21
import './Toggle.scss'
21
22
22
23
const Toggle = ( {
@@ -31,6 +32,7 @@ const Toggle = ({
31
32
throttleOnChange = false ,
32
33
shouldToggleValueOnLabelClick = false ,
33
34
isLoading = false ,
35
+ value = CHECKBOX_VALUE . CHECKED ,
34
36
...props
35
37
} ) => {
36
38
const [ active , setActive ] = React . useState ( selected )
@@ -70,8 +72,26 @@ const Toggle = ({
70
72
}
71
73
}
72
74
75
+ const isIntermediateView = selected && value === CHECKBOX_VALUE . INTERMEDIATE
76
+
77
+ const renderIcon = ( ) => {
78
+ if ( isIntermediateView ) {
79
+ return (
80
+ < div className = "w-100 h-100 dc__position-abs flex" >
81
+ < div className = "w-8 h-2 br-4 dc__no-shrink bg__white" />
82
+ </ div >
83
+ )
84
+ }
85
+
86
+ if ( Icon ) {
87
+ return < Icon className = { `icon-dim-20 br-4 p-2 ${ iconClass } ` } />
88
+ }
89
+
90
+ return null
91
+ }
92
+
73
93
return isLoading ? (
74
- < IconComponent name = ' ic-circle-loader' color = ' B500' size = { 20 } />
94
+ < IconComponent name = " ic-circle-loader" color = " B500" size = { 20 } />
75
95
) : (
76
96
< label
77
97
{ ...props }
@@ -80,8 +100,11 @@ const Toggle = ({
80
100
{ ...( shouldToggleValueOnLabelClick ? { onClick : handleLabelClick } : { } ) }
81
101
>
82
102
< input type = "checkbox" checked = { ! ! active } onChange = { handleChange } className = "toggle__input" />
83
- < span className = { `toggle__slider ${ Icon ? 'with-icon br-4 dc__border' : 'round' } ` } data-testid = { dataTestId } >
84
- { Icon && < Icon className = { `icon-dim-20 br-4 p-2 ${ iconClass } ` } /> }
103
+ < span
104
+ className = { `toggle__slider ${ isIntermediateView ? 'intermediate' : '' } ${ Icon ? 'with-icon br-4 dc__border' : 'round' } ` }
105
+ data-testid = { dataTestId }
106
+ >
107
+ { renderIcon ( ) }
85
108
</ span >
86
109
</ label >
87
110
)
0 commit comments