import React, { memo, useMemo } from 'react' import { message, Popover, ConfigProvider as AntdConfigProvider } from 'antd' import { SettingOutlined, ReloadOutlined, SearchOutlined, FilterOutlined } from '@ant-design/icons' import { useSetState, useMemoizedFn, useLatest } from 'ahooks' import { delay, classnames } from '@fexd/tools' import { SetState } from 'ahooks/es/useSetState' import { useProps } from '../../utils' import useQueryFieldPlugin from '../queryField' import useModalPlugin from '../modal' import useConfigPlugin from '../config' import QueryFieldForm from '../queryField/QueryField' import { ProTableBuiltInActionType, ProTableTableActionType, ProTableBuiltInIconActionNames } from './types' import Actions from './Actions' import Action from '../actions/Action' const RefreshButton = memo(function RefreshButton({ ...props }: any) { const queryField = useQueryFieldPlugin(({ loading }) => [loading]) const { loading, refresh } = queryField return ( } onClick={() => refresh()} // tooltip={tooltip} type="text" {...props} /> ) }) const QueryButton = memo(function QueryButton({ ...props }: any) { const queryField = useQueryFieldPlugin(() => []) const modal = useModalPlugin(() => []) const { t } = useConfigPlugin(() => []) const { queryFieldTriggerOnEnter } = useProps() return ( ( <>
{renderFields()}
{rawActions}
)} // 聚焦状态下,回车键时刷新 onEnterDown={async () => { if (!queryFieldTriggerOnEnter) { return } queryField.setPaginationParams({ page: 1 }) await delay(100) queryField.refresh({ page: 1, }) }} /> } placement="bottomRight" > } type="text" {...props} />
) }) // 图标动作 export default function useIconActions(): { iconActions: Record iconActionConfigs: ProTableTableActionType[] setIconActions: SetState> renderIconActions: () => JSX.Element } { const { iconActions: iconActionConfigs, builtInActions } = useProps() const latestIconActionConfigs = useLatest(iconActionConfigs) const [iconActions, setIconActions] = useSetState>({ refresh: , search: , ...(builtInActions?.iconActions ?? {}), } as Record) const latestIconActions = useLatest(iconActions) const renderIconActions = useMemoizedFn(() => ( latestIconActionConfigs?.current as any} getBuiltInActions={() => latestIconActions.current} renderAction={({ ...actionProps }: any = {}) => ( )} /> )) return { iconActions, iconActionConfigs: useMemo( () => (iconActionConfigs ?? []) .filter(Boolean) .filter( (action) => (action as any)?.hidden !== true, ) as ProTableTableActionType[], [iconActionConfigs], ), setIconActions, renderIconActions, } }