11import React from 'react' ;
22
3- import { Checkbox , SegmentedRadioGroup , Select } from '@gravity-ui/uikit' ;
3+ import { Checkbox , SegmentedRadioGroup , Select , Switch } from '@gravity-ui/uikit' ;
44import isObjectLike from 'lodash/isObjectLike' ;
55import some from 'lodash/some' ;
66
@@ -61,7 +61,7 @@ export const useOneOf = ({props, onTogglerChange}: UseOneOfParams) => {
6161 [ setOneOfValue , input . onChange , oneOfValue ] ,
6262 ) ;
6363
64- const onCheckboxChange = React . useCallback (
64+ const onCheckedChange = React . useCallback (
6565 ( checked : boolean ) => {
6666 if ( specBooleanMap ) {
6767 const value = String ( checked ) as 'true' | 'false' ;
@@ -73,7 +73,7 @@ export const useOneOf = ({props, onTogglerChange}: UseOneOfParams) => {
7373 [ onOneOfChange , specBooleanMap ] ,
7474 ) ;
7575
76- const checkboxValue = React . useMemo ( ( ) => {
76+ const checkedValue = React . useMemo ( ( ) => {
7777 if ( specBooleanMap ) {
7878 const keyBooleanMap = objectKeys ( specBooleanMap ) . find (
7979 ( key ) => specBooleanMap [ key ] === oneOfValue ,
@@ -123,11 +123,12 @@ export const useOneOf = ({props, onTogglerChange}: UseOneOfParams) => {
123123 }
124124
125125 if (
126- spec . viewSpec . oneOfParams ?. toggler === 'checkbox' &&
126+ ( spec . viewSpec . oneOfParams ?. toggler === 'checkbox' ||
127+ spec . viewSpec . oneOfParams ?. toggler === 'switch' ) &&
127128 options . length === 2 &&
128129 specBooleanMap
129130 ) {
130- return 'checkbox' ;
131+ return spec . viewSpec . oneOfParams . toggler ;
131132 }
132133
133134 return 'radio' ;
@@ -176,8 +177,21 @@ export const useOneOf = ({props, onTogglerChange}: UseOneOfParams) => {
176177 return (
177178 < div className = { b ( 'checkbox' ) } >
178179 < Checkbox
179- checked = { checkboxValue }
180- onUpdate = { onCheckboxChange }
180+ checked = { checkedValue }
181+ onUpdate = { onCheckedChange }
182+ disabled = { spec . viewSpec . disabled }
183+ qa = { name }
184+ />
185+ </ div >
186+ ) ;
187+ }
188+
189+ if ( togglerType === 'switch' ) {
190+ return (
191+ < div className = { b ( 'switch' ) } >
192+ < Switch
193+ checked = { checkedValue }
194+ onUpdate = { onCheckedChange }
181195 disabled = { spec . viewSpec . disabled }
182196 qa = { name }
183197 />
@@ -208,8 +222,8 @@ export const useOneOf = ({props, onTogglerChange}: UseOneOfParams) => {
208222 options ,
209223 onOneOfChange ,
210224 specProperties ,
211- onCheckboxChange ,
212- checkboxValue ,
225+ onCheckedChange ,
226+ checkedValue ,
213227 ] ) ;
214228
215229 const toggler = React . useMemo ( ( ) => {
0 commit comments