/* 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 (
{title}
{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), } }