/**
* External dependencies
*/
// eslint-disable-next-line no-restricted-imports
import type { Ref } from 'react';
// eslint-disable-next-line no-restricted-imports
import { Radio } from 'reakit';
/**
* GeChiUI dependencies
*/
import { useInstanceId } from '@gechiui/compose';
/**
* Internal dependencies
*/
import {
contextConnect,
useContextSystem,
GeChiUIComponentProps,
} from '../../ui/context';
import type { ToggleGroupControlOptionProps, WithToolTipProps } from '../types';
import { useToggleGroupControlContext } from '../context';
import * as styles from './styles';
import { useCx } from '../../utils/hooks';
import Tooltip from '../../tooltip';
const { ButtonContentView, LabelPlaceholderView, LabelView } = styles;
const WithToolTip = ( { showTooltip, text, children }: WithToolTipProps ) => {
if ( showTooltip && text ) {
return (
{ children }
);
}
return <>{ children }>;
};
function ToggleGroupControlOption(
props: GeChiUIComponentProps< ToggleGroupControlOptionProps, 'button' >,
forwardedRef: Ref< any >
) {
const toggleGroupControlContext = useToggleGroupControlContext();
const id = useInstanceId(
ToggleGroupControlOption,
toggleGroupControlContext.baseId || 'toggle-group-control-option'
) as string;
const buttonProps = useContextSystem(
{ ...props, id },
'ToggleGroupControlOption'
);
const {
className,
isBlock = false,
label,
value,
showTooltip = false,
...radioProps
} = {
...toggleGroupControlContext,
...buttonProps,
};
const isActive = radioProps.state === value;
const cx = useCx();
const labelViewClasses = cx( isBlock && styles.labelBlock );
const classes = cx(
styles.buttonView,
className,
isActive && styles.buttonActive
);
const optionLabel = !! radioProps[ 'aria-label' ]
? radioProps[ 'aria-label' ]
: label;
return (
{ label }
{ label }
);
}
/**
* `ToggleGroupControlOption` is a form component and is meant to be used as a
* child of `ToggleGroupControl`.
*
* @example
* ```jsx
* import {
* __experimentalToggleGroupControl as ToggleGroupControl,
* __experimentalToggleGroupControlOption as ToggleGroupControlOption,
* } from '@gechiui/components';
*
* function Example() {
* return (
*
*
*
*
* );
* }
* ```
*/
const ConnectedToggleGroupControlOption = contextConnect(
ToggleGroupControlOption,
'ToggleGroupControlOption'
);
export default ConnectedToggleGroupControlOption;