import type { MouseEventHandler, ReactNode } from 'react'; import { type ConfirmActionProps } from '../ConfirmAction'; import { type IconButtonProps } from '../IconButton'; import { type MenuItemProps } from '../MenuItem'; export type NestedAction = MenuItemProps & { /** * Название действия */ name: string; /** * Обработчик действия */ onClick?: (row: TAction) => void; }; export type SingleAction = { /** * Название действия */ name: string; /** * Иконка действия */ icon?: ReactNode; /** * Флаг показа выпадающего списка при клике */ nested?: false; /** * Если `true`, при клике на кнопку будет вызываться подтверждение действия */ needConfirm?: boolean; /** * Поясняющий текст для подтверждения действия */ confirmText?: ConfirmActionProps['text']; /** * Параметры кнопки подтверждения действия */ confirmButtonProps?: ConfirmActionProps['confirmButtonProps']; /** * Если true, блокирует взаимодействие с actions */ isBlockingOperation?: boolean; /** * Причина блокировки действия */ disabledReason?: string; /** * Причина блокировки строки во время загрузки */ loadingNote?: string; /** * Обработчик действия */ onClick?: (row: TAction) => void; }; export type MultipleAction = MenuItemProps & { /** * Иконка действия */ icon: ReactNode; /** * Список действий для выпадающего списка */ actions: NestedAction[]; /** * Флаг показа выпадающего списка при клике */ nested: true; /** * Название действия */ name: string; /** * Причина блокировки строки во время загрузки */ loadingNote?: string; /** * Если true, блокирует взаимодействие с actions */ isBlockingOperation?: boolean; /** * Если true, происходит загрузка */ loading?: boolean; }; export type ActionHandler = (onClick: SingleAction['onClick'] | NestedAction['onClick']) => MouseEventHandler | undefined; export type MainActionKind = (IconButtonProps & SingleAction) | MultipleAction; export type SecondaryActionKind = MenuItemProps & SingleAction & { /** * Причина блокировки действия */ disabledReason?: string; /** * Если true, происходит загрузка */ loading?: boolean; }; export type Actions = { /** * Основные действия */ main: MainActionKind[]; /** * Вторичные действия */ secondary?: SecondaryActionKind[]; }; export type ActionCellBaseProps = { /** * Действия */ actions: Actions; isDisabledAction: boolean; handleWrapperClick: MouseEventHandler; handleActionClick: ActionHandler; };