UIKit
7.41.0
• ActionsPanelコンポーネント
UIKit
7.41.0
AccordionActionTooltipActionsPanelAlertArrowToggleAvatarBreadcrumbsButtonCardCheckboxClipboardButtonDefinitionListDialogDisclosureDividerDrawerDropdownMenuFilePreviewHelpMarkHotkeyIconLabelLinkListLoaderMenuModalNumberInputOverlayPaginationPalettePasswordInputPinInputPlaceholderContainerPopoverPopupPortalProgressRadioRadioGroupSegmentedRadioGroupSelectSheetSkeletonSliderSpinStepperSwitchTableTabsTextTextAreaTextInputToasterTocTooltipUserUserLabel
Date Components
3.4.2
Navigation
4.0.17
withNote
withClose
Use an ActionsPanel to render multiple buttons in a row.
When there is not enough space, buttons that don't fit will be added to an overflow menu.
§Example
import type {ActionsPanelProps} from '@gravity-ui/uikit'; import {ActionsPanel} from '@gravity-ui/uikit'; const actions: ActionsPanelProps['actions'] = [ { id: 'action_1', button: { props: { children: 'Action 1', onClick: () => console.log('click button action 1'), }, }, dropdown: { item: { action: () => console.log('click dropdown action 1'), text: 'Action 1', }, }, }, { id: 'action_2', button: { props: { children: 'Action 2', onClick: () => console.log('click button action 2'), }, }, dropdown: { item: { action: () => console.log('click dropdown action 2'), text: 'Action 2', }, }, }, ]; export default function () { return <ActionsPanel actions={actions} />; }
§Action icons
Use Button or DropdownMenu properties to set icons.
import {Files, PencilToSquare, TrashBin} from '@gravity-ui/icons'; import type {ActionsPanelProps} from '@gravity-ui/uikit'; import {ActionsPanel, Flex, Icon} from '@gravity-ui/uikit'; const actions: ActionsPanelProps['actions'] = [ { id: 'edit', button: { props: { children: [<Icon key="icon" data={PencilToSquare} />, 'Edit'], onClick: () => console.log('Edit'), }, }, dropdown: { item: { action: () => console.log('Edit'), text: ( <Flex alignItems="center" gap={1}> <Icon data={PencilToSquare} /> Edit </Flex> ), }, }, }, { id: 'copy', button: { props: { children: [<Icon key="icon" data={Files} />, 'Copy'], onClick: () => console.log('Copy'), }, }, dropdown: { item: { action: () => console.log('Copy'), text: ( <Flex alignItems="center" gap={1}> <Icon data={Files} /> Copy </Flex> ), }, }, }, { id: 'delete', collapsed: true, button: { props: { children: [<Icon key="icon" data={TrashBin} />, 'Delete'], onClick: () => console.log('Delete'), }, }, dropdown: { item: { action: () => console.log('Delete'), text: ( <Flex alignItems="center" gap={1}> <Icon data={TrashBin} /> Delete </Flex> ), }, }, }, ]; export default function () { return <ActionsPanel actions={actions} />; }
§Note
Use the renderNote property to render a note.
10 items
import type {ActionsPanelProps} from '@gravity-ui/uikit'; import {ActionsPanel} from '@gravity-ui/uikit'; const actions: ActionsPanelProps['actions'] = [ { id: 'action_1', button: { props: { children: 'Action 1', onClick: () => console.log('click button action 1'), view: 'normal-contrast', }, }, dropdown: { item: { action: () => console.log('click dropdown action 1'), text: 'Action 1', }, }, }, { id: 'action_2', button: { props: { children: 'Action 2', onClick: () => console.log('click button action 2'), }, }, dropdown: { item: { action: () => console.log('click dropdown action 2'), text: 'Action 2', }, }, }, { id: 'action_3', button: { props: { children: 'Action 3', onClick: () => console.log('click button action 3'), }, }, dropdown: { item: { action: () => console.log('click dropdown action 3'), text: 'Action 3', }, }, }, { id: 'action_4', button: { props: { children: 'Action 4', onClick: () => console.log('click button action 4'), }, }, dropdown: { item: { action: () => console.log('click dropdown action 4'), text: 'Action 4', }, }, }, ]; export default function () { return <ActionsPanel actions={actions} renderNote={() => '10 items'} maxRowActions={2} />; }
§Groups in dropdown menu
Use action.dropdown.group for groping actions in dropdown menu.
import type {ActionsPanelProps} from '@gravity-ui/uikit'; import {ActionsPanel} from '@gravity-ui/uikit'; const actions: ActionsPanelProps['actions'] = [ { id: 'action_1', collapsed: true, button: { props: { children: 'Action 1', onClick: () => console.log('click button action 1'), }, }, dropdown: { item: { action: () => console.log('click dropdown action 1'), text: 'Action 1', }, group: '1', }, }, { id: 'action_2', collapsed: true, button: { props: { children: 'Action 2', onClick: () => console.log('click button action 2'), }, }, dropdown: { item: { action: () => console.log('click dropdown action 2'), text: 'Action 2', }, group: '2', }, }, { id: 'action_3', collapsed: true, button: { props: { children: 'Action 3', onClick: () => console.log('click button action 3'), }, }, dropdown: { item: { action: () => console.log('click dropdown action 3'), text: 'Action 3', }, group: '1', }, }, ]; export default function () { return <ActionsPanel actions={actions} />; }
§Action sub-menu and nested dropdown menu
See actions example below and documentation about the DropdownMenu component.
import {ChevronDown} from '@gravity-ui/icons'; import {ActionsPanel, Icon} from '@gravity-ui/uikit'; import type {ActionsPanelProps} from '@gravity-ui/uikit'; const actions: ActionsPanelProps['actions'] = [ { id: 'button-with-sub-menu', button: { props: { children: ['Sub-menu', <Icon key="icon" data={ChevronDown} />], view: 'outlined-contrast', onClick: () => console.log('click button action 2'), }, }, dropdown: { item: { text: 'Sub-menu', items: [ { action: () => console.log('Edit'), text: 'Edit', }, { action: () => console.log('Delete'), text: 'Delete', theme: 'danger', }, ], }, }, }, { id: 'nested-menu', collapsed: true, button: { props: { children: 'Nested', onClick: () => console.log('click button nested'), }, }, dropdown: { item: { text: 'Other', items: [ { text: 'Select', items: [ { action: () => console.log('Select One'), text: 'One', }, { action: () => console.log('Select All'), text: 'All', }, ], }, { action: () => console.log('Copy'), text: 'Copy', }, { text: 'Move to', items: [ { action: () => console.log('Move to folder 1'), text: 'Folder 1', }, { action: () => console.log('Move to folder 2'), text: 'Folder 2', }, ], }, ], }, }, }, ]; export default function () { return <ActionsPanel actions={actions} />; }
§Properties
| Name | Description | Type | Default |
|---|---|---|---|
| actions | Array of actions | ActionsPanelItem[] | |
| onClose | Optional close button click handler | () => void | |
| renderNote | Optional render-prop for displaying the content of a note | () => React.ReactNode | |
| className | Optional HTML class attribute | string | |
| noteClassName | Optional HTML class attribute | string | |
| maxRowActions | Maximum number of actions in a row | number | 4 |
§ActionsPanelItem:
| Name | Description | Type | Default |
|---|---|---|---|
| id | Unique action id | string | |
| dropdown | Settings for dropdown action in overflow menu | {item: DropdownMenuItem; group?: string} | |
| button | Settings for button action | {props: ButtonProps} | |
| collapsed | If true, then item always inside the dropdown | boolean |