import React, { useEffect, useState } from 'react'; import { GenesysDevIcon, GenesysDevIcons } from 'genesys-dev-icons'; import { BooleanChangedCallback, DxToggleProps } from '..'; import DxLabel from '../dxlabel/DxLabel'; import './DxToggle.scss'; export default function DxToggle(props: DxToggleProps) { let initialValue: boolean | undefined = props.value !== undefined ? props.value : props.initialValue; if (!props.isTriState) initialValue = initialValue || false; const [value, setValue] = useState(initialValue); const trueIcon = props.trueIcon || GenesysDevIcons.AppCheck; const falseIcon = props.falseIcon || GenesysDevIcons.AppTimes; useEffect(() => { if (props.initialValue || props.value === value || (!props.isTriState && props.value === undefined)) return; setValue(props.value); }, [props.value]); useEffect(() => { if (props.onChange) props.onChange(value); // eslint-disable-next-line react-hooks/exhaustive-deps }, [value]); const setToggleValue = (e: React.MouseEvent) => { e.preventDefault(); e.stopPropagation(); if (props.disabled) return; if (props.isTriState) { if (value === undefined) setValue(true); else if (value === true) setValue(false); else setValue(undefined); } else { setValue(!value); } }; const getToggleValue = () => { if (props.disabled) return 'mixed'; if (props.isTriState) { if (value === undefined) return 'mixed'; } if (value === true) return 'true'; if (value === false) return 'false'; }; return (
{value !== false ? : undefined} {value === true && props.isTriState ?
 
: undefined}
{value !== undefined ? : undefined}
{value === false && props.isTriState ?
 
: undefined} {value !== true ? : undefined}
); }