Skip to content

Commit 89da44a

Browse files
authored
feat(Popover): 新增 Confirm 用法 (#751)
1 parent e5cd99a commit 89da44a

File tree

4 files changed

+106
-1
lines changed

4 files changed

+106
-1
lines changed

‎packages/react-popover/README.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,26 @@ class Demo extends React.Component {
334334
ReactDOM.render(<Demo />, _mount_);
335335
```
336336
337+
### Confirm 用法
338+
339+
<!--rehype:bgWhite=true&codeSandbox=true&codePen=true-->
340+
```jsx
341+
import React from 'react';
342+
import ReactDOM from 'react-dom';
343+
import { Popover, Row } from 'uiw';
344+
345+
class Demo extends React.Component {
346+
render() {
347+
return (
348+
<Row style={{ alignItems: 'center' }}>
349+
<Popover.Confirm title="Are you sure delete this?">delete</Popover.Confirm>
350+
</Row>
351+
)
352+
}
353+
}
354+
ReactDOM.render(<Demo />, _mount_);
355+
```
356+
337357
## Props
338358
339359
| 参数 | 说明 | 类型 | 默认值 |
@@ -348,4 +368,18 @@ ReactDOM.render(<Demo />, _mount_);
348368
| autoAdjustOverflow | 弹出层被遮挡时自动调整位��,继承 `<OverlayTrigger />` 组件属性 | Boolean | `false` |
349369
| onVisibleChange | 显示隐藏的回调,继承 `<OverlayTrigger />` 组件属性 | Function(isVisible:bool) | - |
350370
371+
## Confirm Props
372+
373+
| 参数 | 说明 | 类型 | 默认值 |
374+
|--------- |-------- |--------- |-------- |
375+
| trigger| 悬停/点击弹出窗口,继承 `<OverlayTrigger />` 组件属性 | Enum{`hover`, `click`, `focus`} | `hover` |
376+
| placement | 气泡框位置,可现实箭头在不同的方位 | Enum{`top`, `topLeft`, `topRight`,<br /> `left`, `leftTop`, `leftBottom`,<br /> `right`, `rightTop`, `rightBottom`,<br /> `bottom`, `bottomLeft`, `bottomRight`} | `top` |
377+
| visibleArrow | 是否显示箭头 | Boolean | `true` |
378+
| children | 子元素 | React.ReactNode | - |
379+
| onConfirm | 确定方法 | ()=>void | |
380+
| confirmText | 确定按钮文本 | string | Yes |
381+
| title | 标题信息 | React.ReactNode | - |
382+
| cancelText | 取消按钮文本 | string | No |
383+
384+
351385
更多属性请参考 [OverlayTrigger](#/components/overlay-trigger)。

‎packages/react-popover/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@
4444
"react-dom": ">=16.9.0"
4545
},
4646
"dependencies": {
47-
"@uiw/react-overlay-trigger": "^4.19.0"
47+
"@uiw/react-overlay-trigger": "^4.19.0",
48+
"@uiw/react-icon": "^4.19.0",
49+
"@uiw/react-button": "^4.19.0"
4850
}
4951
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import React, { useState } from 'react';
2+
import Popover, { PopoverProps } from './';
3+
import './style/index.less';
4+
import Button from '@uiw/react-button';
5+
import Icon from '@uiw/react-icon';
6+
7+
interface Confirm {
8+
trigger?: PopoverProps['trigger'];
9+
placement?: PopoverProps['placement'];
10+
children?: React.ReactNode;
11+
visibleArrow?: PopoverProps['visibleArrow'];
12+
onConfirm?: () => void;
13+
confirmText?: string;
14+
title?: React.ReactNode;
15+
cancelText?: string;
16+
}
17+
18+
export default function Confirm(props: Confirm) {
19+
const {
20+
trigger = 'click',
21+
placement = 'top',
22+
confirmText = 'Yes',
23+
title,
24+
cancelText = 'No',
25+
visibleArrow,
26+
children,
27+
onConfirm,
28+
} = props;
29+
const [isOpen, setIsOpen] = useState(false);
30+
return (
31+
<Popover
32+
isOpen={isOpen}
33+
visibleArrow={visibleArrow}
34+
content={
35+
<div style={{ padding: '12px 16px', position: 'relative' }}>
36+
<Icon
37+
type="information"
38+
style={{ position: 'absolute', top: 13.5, fontSize: 14, transform: 'rotate(180deg)', color: '#faad14' }}
39+
/>
40+
<div style={{ paddingLeft: 20 }}>
41+
<div style={{ fontSize: 14 }}>{title}</div>
42+
<div style={{ position: 'relative', bottom: 0, marginTop: 12, display: 'flex', justifyContent: 'end' }}>
43+
<Button size="small" onClick={() => setIsOpen(false)}>
44+
{cancelText}
45+
</Button>
46+
<Button
47+
size="small"
48+
type="primary"
49+
style={{ marginLeft: 10 }}
50+
onClick={() => {
51+
onConfirm?.();
52+
setIsOpen(false);
53+
}}
54+
>
55+
{confirmText}
56+
</Button>
57+
</div>
58+
</div>
59+
</div>
60+
}
61+
trigger={trigger}
62+
placement={placement}
63+
>
64+
<div onClick={() => setIsOpen(true)}>{children}</div>
65+
</Popover>
66+
);
67+
}

‎packages/react-popover/src/index.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import React from 'react';
22
import OverlayTrigger, { OverlayTriggerProps } from '@uiw/react-overlay-trigger';
3+
import Confirm from './Confirm';
34
import './style/index.less';
45

56
export interface PopoverProps extends OverlayTriggerProps {
@@ -8,6 +9,7 @@ export interface PopoverProps extends OverlayTriggerProps {
89
}
910

1011
export default class Popover extends React.Component<PopoverProps> {
12+
static Confirm = Confirm;
1113
public static defaultProps: PopoverProps = {
1214
prefixCls: 'w-popover',
1315
placement: 'top',

0 commit comments

Comments
 (0)