/* eslint-disable react-hooks/exhaustive-deps */
/* eslint-disable react-hooks/rules-of-hooks */
import React, { memo, forwardRef, useEffect } from 'react'
import { Space, Dropdown, Menu } from 'antd'
import { ColumnHeightOutlined, FullscreenOutlined, FullscreenExitOutlined } from '@ant-design/icons'
import { useMount, useUpdate } from 'ahooks'
import { Action } from '@fexd/pro-utils'
import { run } from '@fexd/tools'
import { useProps } from '../../utils'
import useActionsPlugin from '../actions'
import useConfigPlugin, { I18nText } from '../config'
const SizeIcon = memo(function SizeIcon() {
const { setSize, size } = useConfigPlugin(({ size }) => [size])
return (
{
setSize(key as 'small')
}}
>
{[
{
key: 'large',
label: ,
},
{
key: 'middle',
label: ,
},
{
key: 'small',
label: ,
},
].map((item) => (
{item?.label}
))}
}
>
)
})
const FullscreenIcon = memo(function FullscreenIcon(props) {
const { wrapperDomRef } = useProps()
const update = useUpdate()
const isFullscreen = !!document.fullscreenElement
useEffect(() => {
if (!wrapperDomRef.current) {
return
}
document.addEventListener('fullscreenchange', update)
return () => {
document.removeEventListener('fullscreenchange', update)
if (!!document.fullscreenElement) {
document.exitFullscreen()
run(wrapperDomRef!.current, 'classList.remove', 'f-pro-table-wrapper-fullscreen')
document.body.classList.remove('f-pro-table-scroll-block')
}
}
}, [])
useEffect(() => {
if (isFullscreen) {
run(wrapperDomRef.current, 'classList.add', 'f-pro-table-wrapper-fullscreen')
document.body.classList.add('f-pro-table-scroll-block')
} else {
run(wrapperDomRef.current, 'classList.remove', 'f-pro-table-wrapper-fullscreen')
document.body.classList.remove('f-pro-table-scroll-block')
}
return () => {
run(wrapperDomRef.current, 'classList.remove', 'f-pro-table-wrapper-fullscreen')
document.body.classList.remove('f-pro-table-scroll-block')
}
}, [isFullscreen])
return (
: }
onClick={() => {
if (isFullscreen) {
document.exitFullscreen()
return
}
run(document.documentElement, 'requestFullscreen')
}}
{...props}
/>
)
})
const TableToolbar = memo(
forwardRef(function TableToolbar(_, ref: any) {
const { title, toolbarStyle } = useProps()
const {
builtInActions: { tableActionConfigs, iconActionConfigs },
setIconActions: registerIconActions,
renderTableActions,
renderIconActions,
} = useActionsPlugin(({ builtInActions }) => [builtInActions.tableActionConfigs, builtInActions.iconActionConfigs])
useMount(() => {
registerIconActions({
fullscreen: ,
'table-size': { icon: },
size: { icon: },
})
})
return (
{tableActionConfigs?.length > 0 && {renderTableActions()}
}
{iconActionConfigs?.length > 0 && (
{renderIconActions()}
)}
)
}),
)
export default function useTableToolbar({ ref }: any) {
const { title } = useProps()
const {
builtInActions: { tableActionConfigs, iconActionConfigs },
} = useActionsPlugin(({ builtInActions }) => [builtInActions.tableActionConfigs, builtInActions.iconActionConfigs])
const hasToolbar = !!title || tableActionConfigs?.length > 0 || iconActionConfigs?.length > 0
return {
hasToolbar,
renderToolbar: () => (hasToolbar ? : null),
}
}