DropdownMenu

size
disabled
import {DropdownMenu} from '@gravity-ui/uikit';

El componente de menú desplegable ofrece agrupaciones de elementos, submenús y un botón personalizable. Los elementos del menú desplegable se configuran con la items propiedad. De forma predeterminada, el conmutador de menú es un botón con el icono de puntos suspensivos (****), que se puede anular con la propiedad. renderSwitcher

<DropdownMenu
    items={[
        {
            action: () => console.log('Rename'),
            text: 'Rename',
        },
        {
            action: () => console.log('Delete'),
            text: 'Delete',
            theme: 'danger',
        },
    ]}
/>

Elementos agrupados

DropdownMenu los elementos se pueden agrupar y separar visualmente de otros elementos del menú mediante la introducción de matrices de elementos de menú anidados en la items matriz.

<DropdownMenu
    items={[
        [
            {
                action: () => console.log('Call'),
                text: 'Call',
            },
            {
                action: () => console.log('Send email'),
                text: 'Send email',
            },
        ],
        {
            action: () => console.log('Rename'),
            text: 'Rename',
        },
        {
            action: () => console.log('Delete'),
            text: 'Delete',
            theme: 'danger',
        },
    ]}
/>

Submenús

La items propiedad de un elemento de menú individual agrega subelementos anidados a dicho elemento.

Los elementos de menú con submenús reciben los siguientes nombres de clase adicionales para permitir un estilo adicional:

  • .g-dropdown-menu__menu-item_with-submenu: Para artículos con más de un elemento anidado.
  • .g-dropdown-menu__menu-item_active-parent: Para el elemento cuyo submenú está abierto actualmente.
<DropdownMenu
    items={[
        {
            action: () => console.log('Rename'),
            text: 'Rename',
        },
        {
            action: () => console.log('Delete'),
            text: 'Delete',
            theme: 'danger',
        },
        {
            text: 'More',
            items: [
                {
                    action: () => console.log('Mark as'),
                    text: 'Mark as',
                    items: [
                        {
                            action: () => console.log('Important'),
                            text: 'Important',
                        },
                        {
                            action: () => console.log('Favorite'),
                            text: 'Favorite',
                        },
                    ],
                },
                {
                    action: () => console.log('Copy'),
                    text: 'Copy',
                },
                {
                    text: 'Move to',
                    items: [
                        {
                            action: () => console.log('Location #1'),
                            text: 'Location #1',
                        },
                        {
                            action: () => console.log('Location #2'),
                            text: 'Location #2',
                        },
                    ],
                },
            ],
        },
    ]}
/>

Alternar menú personalizado

Para configurar el conmutador de menú, utilice la renderSwitcher propiedad. Puede ser cualquier función que devuelva un componente de React (o cualquiera de los (props: SwitcherProps) => React.ReactNode términos de TypeScript, ver SwitcherProps más abajo). De forma predeterminada, el conmutador de menú es un botón con el icono de puntos suspensivos ().

John Doe
<DropdownMenu
    renderSwitcher={(props) => (
        <div {...props} style={{cursor: 'pointer', borderBottom: '1px dotted'}}>John Doe</div>
    )}
    items={[
        {
            action: () => console.log('Rename'),
            text: 'Rename',
        },
        {
            action: () => console.log('Delete'),
            text: 'Delete',
            theme: 'danger',
        },
    ]}
/>

El ejemplo anterior está demasiado simplificado para demostrar la idea del interruptor de menú personalizable. En una aplicación real, generalmente se recomienda que el interruptor del menú en el que se puede hacer clic sea un componente accesible con un teclado y otras tecnologías de asistencia, como un botón.

Iconos personalizados

Puede añadir iconos personalizados a un DropdownMenu elemento mediante la iconEnd propiedad iconStart o. De forma predeterminada, los DropdownMenu elementos no tienen iconos.

Puede cambiar el icono de alternancia del menú con las renderSwitcher propiedades DropdownMenudel menú. De forma predeterminada, el conmutador de menú es un botón con el icono de puntos suspensivos ().

<DropdownMenu
    renderSwitcher={(props) => (
        <Button {...props} view="flat">
            <Icon size={16} data={Bars} />
        </Button>
    )}
    items={[
        {
            iconStart: <Icon size={16} data={Pencil} />,
            action: () => console.log('Rename'),
            text: 'Rename',
        },
        {
            iconStart: <Icon size={16} data={TrashBin} />,
            action: () => console.log('Delete'),
            text: 'Delete',
            theme: 'danger',
        },
    ]}
/>

Propiedades

NombreDescripciónTipoPredeterminado
itemsConjunto de artículos. Las matrices anidadas de elementos representan grupos separados visualmente.(Elemento del menú desplegable| [[ Elemento del menú desplegable])]| []
dataCarga útil proporcionada a las acciones ejecutadas desde el menú. (Esto puede resultar útil para los menús contextuales).any
iconIcono del predeterminado switcher.React.ReactNodeIcono de puntos suspensivos
sizeSe aplica tanto al menú predeterminado switcher como al menú.'s'| 'm'| 'l'| 'xl''m'
disabledAl establecer esta propiedad para que true se desactive el switcher botón y se impida que se abra el menú.boolean
renderSwitcherFunción de renderizado para el control de conmutación del menú.React.ReactNode
switcherWrapperClassNameValor de la className propiedad switcherdel componente principal.string
defaultSwitcherPropsswitcher Propiedades predeterminadas.ButtonProps
defaultSwitcherClassNameValor de la className propiedad del valor predeterminado switcher.string
menuPropsAnula las propiedades predeterminadas del menú desplegable emergente.MenuProps
popupPropsAnula las propiedades predeterminadas de la ventana emergente.PopupProps
openAlterna la visibilidad del menú desplegable.boolean
onOpenToggleSe llama cuando se abre o cierra el menú.() => void
onSwitcherClickSe llama cuando switcher se hace clic en él.controlador de eventos React.mouse<HTMLElement>
hideOnScrollEspecifica si se debe ocultar el menú cuando se desplaza un elemento principal.booleantrue
childrenContenido personalizado dentro del menú emergente.React.ReactNode

Este tipo describe los elementos individuales del menú desplegable.

NombreDescripciónTipoPredeterminado
textContenido de los elementos del menú.React.ReactNode
actionControlador de clics en los elementos del menú. Obtiene los parámetros del componente principal del menú desplegable ( event tanto como data).(event: React.MouseEvent, data: any) => void
iconStartIcono del elemento del menú antes del contenido del elemento.React.ReactNode
iconEndIcono del elemento del menú después del contenido del elemento. Se ignora si el elemento tiene un submenú.React.ReactNode
hiddenDetermina si el elemento está oculto.boolean
disabledDetermina si el elemento está desactivado.boolean
hrefEl elemento del menú con esta propiedad se convierte en un enlace a la ubicación especificada.string
targetIgual que el target atributo de la <a> etiqueta.string
relIgual que el rel atributo de la <a> etiqueta.string
extraPropsPropiedades adicionales de los elementos del menú.object
titleTexto de información sobre herramientas.string
classNameclass Valor de atributo HTML.string
itemsElementos del submenú.(Elemento del menú desplegable| [[Elemento del menú desplegable])]
popupPropsPropiedades de la ventana emergente del submenú.string
pathRuta de los índices desde la raíz hasta el elemento actual.number[]
closeMenucloseMenu Llamada personalizada. Puede invocarse en lugar de cerrar el menú principal y usarse para cerrar los submenús antes del menú principal.() => void

SwitcherProps

NombreDescripciónTipo
onClickSe llama cuando se hace clic en el conmutador.() => void
onKeyDownSe llama cuando el conmutador está enfocado y se presiona la tecla de acción.() => void