2023-01-19 11:21:05 +08:00
|
|
|
import React, { useMemo, useState } from 'react';
|
2024-08-09 11:24:29 +08:00
|
|
|
import { Button, ConfigProvider, Flex, Popover, Segmented } from 'antd';
|
|
|
|
import type { PopoverProps } from 'antd';
|
2023-01-19 11:21:05 +08:00
|
|
|
|
|
|
|
const text = <span>Title</span>;
|
2023-11-01 22:27:37 +08:00
|
|
|
|
|
|
|
const buttonWidth = 80;
|
|
|
|
|
2023-01-19 11:21:05 +08:00
|
|
|
const content = (
|
|
|
|
<div>
|
|
|
|
<p>Content</p>
|
|
|
|
<p>Content</p>
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
|
|
|
|
const App: React.FC = () => {
|
2024-08-09 11:24:29 +08:00
|
|
|
const [arrow, setArrow] = useState<'Show' | 'Hide' | 'Center'>('Show');
|
2023-01-19 11:21:05 +08:00
|
|
|
|
2024-08-09 11:24:29 +08:00
|
|
|
const mergedArrow = useMemo<PopoverProps['arrow']>(() => {
|
2023-10-30 13:57:57 +08:00
|
|
|
if (arrow === 'Hide') {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (arrow === 'Show') {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
return {
|
|
|
|
pointAtCenter: true,
|
|
|
|
};
|
|
|
|
}, [arrow]);
|
2023-01-19 11:21:05 +08:00
|
|
|
|
|
|
|
return (
|
2023-11-01 22:27:37 +08:00
|
|
|
<ConfigProvider button={{ style: { width: buttonWidth, margin: 4 } }}>
|
2023-01-19 11:21:05 +08:00
|
|
|
<Segmented
|
2023-10-30 15:02:00 +08:00
|
|
|
options={['Show', 'Hide', 'Center']}
|
2024-10-22 10:09:31 +08:00
|
|
|
onChange={setArrow}
|
2023-10-30 13:57:57 +08:00
|
|
|
style={{ marginBottom: 24 }}
|
2023-01-19 11:21:05 +08:00
|
|
|
/>
|
2024-08-09 11:24:29 +08:00
|
|
|
<Flex vertical justify="center" align="center" className="demo">
|
|
|
|
<Flex justify="center" align="center" style={{ whiteSpace: 'nowrap' }}>
|
2023-10-30 13:57:57 +08:00
|
|
|
<Popover placement="topLeft" title={text} content={content} arrow={mergedArrow}>
|
|
|
|
<Button>TL</Button>
|
|
|
|
</Popover>
|
|
|
|
<Popover placement="top" title={text} content={content} arrow={mergedArrow}>
|
|
|
|
<Button>Top</Button>
|
|
|
|
</Popover>
|
|
|
|
<Popover placement="topRight" title={text} content={content} arrow={mergedArrow}>
|
|
|
|
<Button>TR</Button>
|
|
|
|
</Popover>
|
2024-08-09 11:24:29 +08:00
|
|
|
</Flex>
|
|
|
|
<Flex style={{ width: buttonWidth * 5 + 32 }} justify="space-between" align="center">
|
|
|
|
<Flex align="center" vertical>
|
|
|
|
<Popover placement="leftTop" title={text} content={content} arrow={mergedArrow}>
|
|
|
|
<Button>LT</Button>
|
|
|
|
</Popover>
|
|
|
|
<Popover placement="left" title={text} content={content} arrow={mergedArrow}>
|
|
|
|
<Button>Left</Button>
|
|
|
|
</Popover>
|
|
|
|
<Popover placement="leftBottom" title={text} content={content} arrow={mergedArrow}>
|
|
|
|
<Button>LB</Button>
|
|
|
|
</Popover>
|
|
|
|
</Flex>
|
|
|
|
<Flex align="center" vertical>
|
|
|
|
<Popover placement="rightTop" title={text} content={content} arrow={mergedArrow}>
|
|
|
|
<Button>RT</Button>
|
|
|
|
</Popover>
|
|
|
|
<Popover placement="right" title={text} content={content} arrow={mergedArrow}>
|
|
|
|
<Button>Right</Button>
|
|
|
|
</Popover>
|
|
|
|
<Popover placement="rightBottom" title={text} content={content} arrow={mergedArrow}>
|
|
|
|
<Button>RB</Button>
|
|
|
|
</Popover>
|
|
|
|
</Flex>
|
|
|
|
</Flex>
|
|
|
|
<Flex justify="center" align="center" style={{ whiteSpace: 'nowrap' }}>
|
2023-10-30 13:57:57 +08:00
|
|
|
<Popover placement="bottomLeft" title={text} content={content} arrow={mergedArrow}>
|
|
|
|
<Button>BL</Button>
|
|
|
|
</Popover>
|
|
|
|
<Popover placement="bottom" title={text} content={content} arrow={mergedArrow}>
|
|
|
|
<Button>Bottom</Button>
|
|
|
|
</Popover>
|
|
|
|
<Popover placement="bottomRight" title={text} content={content} arrow={mergedArrow}>
|
|
|
|
<Button>BR</Button>
|
|
|
|
</Popover>
|
2024-08-09 11:24:29 +08:00
|
|
|
</Flex>
|
|
|
|
</Flex>
|
2023-10-30 13:57:57 +08:00
|
|
|
</ConfigProvider>
|
2023-01-19 11:21:05 +08:00
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
export default App;
|