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,
}
}