@@ -2,8 +2,6 @@ import React, { useMemo } from 'react';
22import styled from 'styled-components' ;
33import v4 from 'uuid/v4' ;
44import classNames from 'classnames' ;
5- import FormikFieldWrapper from '@/components/elements/FormikFieldWrapper' ;
6- import { Field , FieldProps } from 'formik' ;
75
86const ToggleContainer = styled . div `
97 ${ tw `relative select-none w-12 leading-normal` } ;
@@ -36,49 +34,44 @@ const ToggleContainer = styled.div`
3634 }
3735` ;
3836
39- interface Props {
37+ export interface SwitchProps {
4038 name : string ;
41- description ?: string ;
4239 label : string ;
43- enabled ?: boolean ;
40+ description ?: string ;
41+ defaultChecked ?: boolean ;
42+ onChange ?: ( e : React . ChangeEvent < HTMLInputElement > ) => void ;
43+ children ?: React . ReactNode ;
4444}
4545
46- const Switch = ( { name, label, description } : Props ) => {
46+ const Switch = ( { name, label, description, defaultChecked , onChange , children } : SwitchProps ) => {
4747 const uuid = useMemo ( ( ) => v4 ( ) , [ ] ) ;
4848
4949 return (
50- < FormikFieldWrapper name = { name } >
51- < div className = { 'flex items-center' } >
52- < ToggleContainer className = { 'mr-4 flex-none' } >
53- < Field name = { name } >
54- { ( { field, form } : FieldProps ) => (
55- < input
56- id = { uuid }
57- name = { name }
58- type = { 'checkbox' }
59- onChange = { ( ) => {
60- form . setFieldTouched ( name ) ;
61- form . setFieldValue ( field . name , ! field . value ) ;
62- } }
63- defaultChecked = { field . value }
64- />
65- ) }
66- </ Field >
67- < label htmlFor = { uuid } />
68- </ ToggleContainer >
69- < div className = { 'w-full' } >
70- < label
71- className = { classNames ( 'input-dark-label cursor-pointer' , { 'mb-0' : ! ! description } ) }
72- htmlFor = { uuid }
73- > { label } </ label >
74- { description &&
75- < p className = { 'input-help' } >
76- { description }
77- </ p >
78- }
79- </ div >
50+ < div className = { 'flex items-center' } >
51+ < ToggleContainer className = { 'mr-4 flex-none' } >
52+ { children
53+ || < input
54+ id = { uuid }
55+ name = { name }
56+ type = { 'checkbox' }
57+ onChange = { e => onChange && onChange ( e ) }
58+ defaultChecked = { defaultChecked }
59+ />
60+ }
61+ < label htmlFor = { uuid } />
62+ </ ToggleContainer >
63+ < div className = { 'w-full' } >
64+ < label
65+ className = { classNames ( 'input-dark-label cursor-pointer' , { 'mb-0' : ! ! description } ) }
66+ htmlFor = { uuid }
67+ > { label } </ label >
68+ { description &&
69+ < p className = { 'input-help' } >
70+ { description }
71+ </ p >
72+ }
8073 </ div >
81- </ FormikFieldWrapper >
74+ </ div >
8275 ) ;
8376} ;
8477
0 commit comments