import React, { ReactElement } from 'react';
import { Checkbox } from '@leafygreen-ui/checkbox';
import { cx } from '@leafygreen-ui/emotion';
import { Icon, isComponentGlyph } from '@leafygreen-ui/icon';
import { Theme } from '@leafygreen-ui/lib';
import { ComboboxSize } from '../types';
import {
checkBoxBaseStyles,
checkMarkDisabledStyles,
checkMarkSizeStyle,
checkMarkThemeStyles,
iconDisabledStyles,
iconHighlightedStyles,
iconThemeStyles,
} from './ComboboxOption.styles';
/**
* Util that returns the leftGlyph and rightGlyph.
*/
export const getGlyphs = ({
withIcons,
isSelected,
glyph,
optionTextId,
disabled,
darkMode,
size,
multiselect,
theme,
isFocused,
}: {
withIcons: boolean;
isSelected: boolean;
glyph?: ReactElement;
optionTextId: string;
disabled: boolean;
darkMode: boolean;
size: ComboboxSize;
multiselect: boolean;
theme: Theme;
isFocused: boolean;
}) => {
if (glyph && !isComponentGlyph(glyph)) {
console.error(
'`ComboboxOption` instance did not render icon because it is not a known glyph element.',
glyph,
);
}
const icon =
glyph && isComponentGlyph(glyph) ? (
React.cloneElement(glyph, {
...glyph.props,
className: cx(
iconThemeStyles[theme],
{
[iconHighlightedStyles[theme]]: isFocused,
[iconDisabledStyles[theme]]: disabled,
},
glyph.props.className,
),
})
) : (
<>>
);
const checkBox = (
);
const checkMark = (
);
const multiSelectLeftGlyph = withIcons ? icon : checkBox;
const multiSelectRightGlyph = withIcons && checkBox;
const singleSelectLeftGlyph = withIcons
? icon
: isSelected
? checkMark
: null;
const singleSelectRightGlyph = withIcons && isSelected && checkMark;
const leftGlyph = multiselect ? multiSelectLeftGlyph : singleSelectLeftGlyph;
const rightGlyph = multiselect
? multiSelectRightGlyph
: singleSelectRightGlyph;
return {
leftGlyph,
rightGlyph,
};
};