D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
usr
/
share
/
grafana
/
public
/
app
/
core
/
components
/
RolePicker
/
Filename :
RoleMenuOption.tsx
back
Copy
import { cx } from '@emotion/css'; import React, { FormEvent } from 'react'; import { Checkbox, Icon, Tooltip, useStyles2, useTheme2 } from '@grafana/ui'; import { getSelectStyles } from '@grafana/ui/src/components/Select/getSelectStyles'; import { Role } from 'app/types'; import { getStyles } from './styles'; interface RoleMenuOptionProps { data: Role; onChange: (value: Role) => void; isSelected?: boolean; isFocused?: boolean; disabled?: boolean; hideDescription?: boolean; } export const RoleMenuOption = React.forwardRef<HTMLDivElement, React.PropsWithChildren<RoleMenuOptionProps>>( ({ data, isFocused, isSelected, disabled, onChange, hideDescription }, ref) => { const theme = useTheme2(); const styles = getSelectStyles(theme); const customStyles = useStyles2(getStyles); const wrapperClassName = cx( styles.option, isFocused && styles.optionFocused, disabled && customStyles.menuOptionDisabled ); const onChangeInternal = (event: FormEvent<HTMLElement>) => { if (disabled) { return; } event.preventDefault(); event.stopPropagation(); onChange(data); }; return ( // TODO: fix keyboard a11y // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions <div ref={ref} className={wrapperClassName} aria-label="Role picker option" onClick={onChangeInternal}> <Checkbox value={isSelected} className={customStyles.menuOptionCheckbox} onChange={onChangeInternal} disabled={disabled} /> <div className={cx(styles.optionBody, customStyles.menuOptionBody)}> <span>{data.displayName || data.name}</span> {!hideDescription && data.description && <div className={styles.optionDescription}>{data.description}</div>} </div> {data.description && ( <Tooltip content={data.description}> <Icon name="info-circle" className={customStyles.menuOptionInfoSign} /> </Tooltip> )} </div> ); } ); RoleMenuOption.displayName = 'RoleMenuOption';