import classNames from 'classnames'; import React, { Dispatch, SetStateAction, useContext, useRef, useMemo } from 'react'; import { CaretDownOutlined } from '@ant-design/icons'; import useMedia from 'react-use/lib/useMedia'; import { useRect } from '@reach/rect'; import { SizeType } from '../../../config-provider/SizeContext'; import ConfigProvider, { ConfigContext } from '../../../config-provider'; import Button from '../../../button'; import Dropdown from '../../../dropdown'; import Menu from '../../../menu'; import defaultLocale from '../../../locale/en_US'; import { ApolloTableRowSelection } from '../../interfaces'; export interface BatchActionsProps { children: React.ReactNode; tableAlertRenderResult: | false | { promotedBulkActions?: { content: string; disabled?: boolean; hidden?: boolean; onClick: React.MouseEventHandler; }[]; bulkActions?: { content: string; disabled?: boolean; hidden?: boolean; onClick: (e: React.MouseEvent) => void; }[]; }; size: SizeType; rowSelection: ApolloTableRowSelection; propsRowSelection: ApolloTableRowSelection | undefined; // 是否有多页(不止一页) hasAnyPage: boolean; isSelectedAll: boolean; setIsSelectedAll: Dispatch>; dataSource: T[] | undefined; onCleanSelected: () => void; setSelectedRowsAndKey: (keys: React.ReactText[], rows: T[]) => void; getRowKey: any; cardLeft: number; } export const BatchActions = ({ children, tableAlertRenderResult, size, rowSelection, propsRowSelection, hasAnyPage, isSelectedAll, setIsSelectedAll, dataSource, onCleanSelected, setSelectedRowsAndKey, getRowKey, cardLeft, }: BatchActionsProps) => { const { getPrefixCls } = useContext(ConfigProvider.ConfigContext); const isNavigationCollapsed = useMedia('(max-width: 768px)'); const prefixCls = getPrefixCls('apollo-table-selection'); const { locale: { ApolloTable: locale } = { ApolloTable: defaultLocale.ApolloTable } } = React.useContext(ConfigContext); const ref = useRef(null); const rect = useRect(ref); const promotedBulkActions = useMemo(() => { if (tableAlertRenderResult && tableAlertRenderResult.promotedBulkActions) { return ( tableAlertRenderResult && tableAlertRenderResult.promotedBulkActions.filter(i => !i.hidden) ); } return undefined; }, [tableAlertRenderResult]); const bulkActions = useMemo(() => { if (tableAlertRenderResult && tableAlertRenderResult.bulkActions) { return tableAlertRenderResult && tableAlertRenderResult.bulkActions.filter(i => !i.hidden); } return undefined; }, [tableAlertRenderResult]); return ( <> {children}
{(children as any)?.[0].props.children} {`${locale?.selected} ${ isSelectedAll ? `${(dataSource || []).length}+` : (rowSelection as any).selectedRowKeys?.length } ${locale?.item}`}
{(promotedBulkActions?.length || 0) + (bulkActions?.length || 0) > 0 && (
{promotedBulkActions && (promotedBulkActions.length < 2 ? true : !isNavigationCollapsed) && promotedBulkActions.map((item, index) => (
))} {(!!bulkActions?.length || (isNavigationCollapsed && promotedBulkActions && promotedBulkActions.length > 1)) && (
{(isNavigationCollapsed && promotedBulkActions && promotedBulkActions.length > 1 ? promotedBulkActions : [] ) .concat(bulkActions || []) .map((item, index) => ( item.onClick(domEvent)} > {item.content} ))} } trigger={['click']} >
)}
)} {rowSelection && rowSelection.allowSelectAll && hasAnyPage && ( {!isSelectedAll && ( )} {isSelectedAll && (
{`${locale?.selectedAll} ${(dataSource || []).length}+ ${locale?.itemEnd}`}
)} {isSelectedAll && ( )} )} ); };