Skip to content

Commit d4d6b08

Browse files
authored
feat: update SearchResult & BaseModal (#3)
* feat(utils): 添加元素类型判断 * chore: updaed * chore: update SearchResult
1 parent f600670 commit d4d6b08

File tree

5 files changed

+39
-14
lines changed

5 files changed

+39
-14
lines changed

packages/desktop-ui/src/_utils/is.ts

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import React from 'react'
2+
3+
export function isElement<P>(element: any): element is React.ReactElement<P> {
4+
return React.isValidElement(element)
5+
}
6+
7+
export function isDOMTypeElement<
8+
P extends React.HTMLAttributes<T> | React.SVGAttributes<T>,
9+
T extends Element,
10+
>(element: any): element is React.DOMElement<P, T> {
11+
return isElement(element) && typeof element.type === 'string'
12+
}

packages/desktop-ui/src/base-modal/demo/Event.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { Button, message } from 'antd'
55
function BaseModalBaseDemo() {
66
return (
77
<BaseModal
8-
modalContent={<>这是弹窗内容</>}
8+
modalContent="这是弹窗内容"
99
onClick={(event, modalAction) => {
1010
window.console.log({ event, modalAction })
1111
message.info({

packages/desktop-ui/src/base-modal/index.tsx

+21-13
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,16 @@ import { useBoolean } from 'ahooks'
33
import classNames from 'classnames'
44
import React, { useImperativeHandle, useRef } from 'react'
55
import { defaultPrefixCls } from '../constants'
6+
import { isDOMTypeElement, isElement } from '../_utils/is'
67

78
export interface BaseModalAction {
89
close: () => void
910
open: () => void
1011
}
1112

1213
export interface BaseModalProps {
13-
children?: React.ReactElement
14-
modalContent?: React.ReactElement
14+
children?: React.ReactNode
15+
modalContent?: React.ReactNode
1516
onClick?: (
1617
e: React.MouseEvent<HTMLElement>,
1718
modalAction: BaseModalAction
@@ -36,32 +37,39 @@ const BaseModal: React.ForwardRefRenderFunction<unknown, BaseModalProps> = (prop
3637

3738
useImperativeHandle(ref, () => modalActionRef.current, [modalActionRef])
3839

39-
const handleButtonClick = (e: React.MouseEvent<HTMLElement>) => {
40+
const handleButtonClick = (event: React.MouseEvent<HTMLElement>) => {
4041
if (onClick)
41-
return onClick(e, modalActionRef.current)
42+
return onClick(event, modalActionRef.current)
4243

4344
return open()
4445
}
4546

46-
const handleModalOk = (e: React.MouseEvent<HTMLElement>) => {
47+
const handleModalOk = (event: React.MouseEvent<HTMLElement>) => {
4748
if (onOk)
48-
return onOk(e)
49+
return onOk(event)
4950

5051
return close()
5152
}
5253

53-
const handleModalCancel = (e: React.MouseEvent<HTMLElement>) => {
54+
const handleModalCancel = (event: React.MouseEvent<HTMLElement>) => {
5455
if (onCancel)
55-
onCancel(e)
56+
onCancel(event)
5657

5758
return close()
5859
}
5960

60-
const buttonNode
61-
= children && React.cloneElement(children, { onClick: handleButtonClick })
62-
63-
const childrenNode
64-
= modalContent && React.cloneElement(modalContent, { modalAction: modalActionRef.current })
61+
// ======================== buttonNode ========================
62+
let buttonNode: React.ReactNode = children
63+
if (React.isValidElement(children))
64+
buttonNode = React.cloneElement<any>(children, { onClick: handleButtonClick })
65+
66+
// ======================== modalContent ========================
67+
let childrenNode: React.ReactNode = modalContent
68+
if (isElement(childrenNode) && !isDOMTypeElement(childrenNode)) {
69+
childrenNode = React.cloneElement<any>(childrenNode, {
70+
modalAction: modalActionRef.current,
71+
})
72+
}
6573

6674
return (
6775
<>

packages/desktop-ui/src/search-result/style/index.less

+1
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,6 @@
1616
overflow: overlay;
1717
background-color: #fff;
1818
box-shadow: 0 3px 6px rgba(0, 0, 0, .16);
19+
z-index: @base-z-index;
1920
}
2021
}

packages/desktop-ui/src/styles/themes/default.less

+4
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,7 @@
1717
// border
1818
@border-color: #ebebeb;
1919
@border-radius: 4px;
20+
21+
22+
// z-index
23+
@base-z-index: 1;

0 commit comments

Comments
 (0)