feat: 增加 TcPopover 用于在content中使用hooks关闭popover

release/desktop
moonrailgun 3 years ago
parent 6558f612c3
commit b3e4359920

@ -0,0 +1,44 @@
import React, { useCallback, useState, useMemo, useContext } from 'react';
import { Popover } from 'antd';
import type { PopoverProps } from 'antd/lib/popover';
import _noop from 'lodash/noop';
const TcPopoverContext = React.createContext({ closePopover: _noop });
/**
* Popover
* Popover
* Contextpopover
*/
export const TcPopover: React.FC<PopoverProps> = React.memo((props) => {
const [visible, setVisible] = useState(false);
const handleVisibleChange = useCallback((v) => {
setVisible(v);
}, []);
const closePopover = useCallback(() => {
setVisible(false);
}, []);
const handler = useMemo(() => ({ closePopover }), [closePopover]);
return (
<TcPopoverContext.Provider value={handler}>
<Popover
{...props}
visible={visible}
onVisibleChange={handleVisibleChange}
/>
</TcPopoverContext.Provider>
);
});
TcPopover.displayName = 'TcPopover';
export function useTcPopoverContext() {
const context = useContext(TcPopoverContext);
return {
closePopover: context?.closePopover ?? _noop,
};
}
Loading…
Cancel
Save