File tree Expand file tree Collapse file tree 3 files changed +32
-1
lines changed
Expand file tree Collapse file tree 3 files changed +32
-1
lines changed Original file line number Diff line number Diff line change @@ -69,6 +69,7 @@ export default () => (
6969| --- | --- | --- | --- |
7070| open | boolean | - | Whether the preview is open or not |
7171| closeIcon | React.ReactNode | - | Custom close icon |
72+ | maskClosable | boolean | true | Whether to close preview on clicking mask |
7273| src | string | - | Customize preview src |
7374| movable | boolean | true | Enable drag |
7475| scaleStep | number | 0.5 | The number to which the scale is increased or decreased |
@@ -114,6 +115,7 @@ export default () => (
114115| movable | boolean | true | Enable drag |
115116| current | number | - | Current index |
116117| closeIcon | React.ReactNode | - | Custom close icon |
118+ | maskClosable | boolean | true | Whether to close preview on clicking mask |
117119| scaleStep | number | 0.5 | The number to which the scale is increased or decreased |
118120| minScale | number | 1 | Min scale |
119121| maxScale | number | 50 | Max scale |
Original file line number Diff line number Diff line change @@ -87,6 +87,7 @@ export interface InternalPreviewConfig {
8787 open ?: boolean ;
8888 getContainer ?: PortalProps [ 'getContainer' ] ;
8989 zIndex ?: number ;
90+ maskClosable ?: boolean ;
9091 afterOpenChange ?: ( open : boolean ) => void ;
9192
9293 // Operation
@@ -174,6 +175,7 @@ const Preview: React.FC<PreviewProps> = props => {
174175 onClose,
175176 open,
176177 afterOpenChange,
178+ maskClosable = true ,
177179 icons = { } ,
178180 closeIcon,
179181 getContainer,
@@ -450,7 +452,7 @@ const Preview: React.FC<PreviewProps> = props => {
450452 < div
451453 className = { clsx ( `${ prefixCls } -mask` , classNames . mask ) }
452454 style = { styles . mask }
453- onClick = { onClose }
455+ onClick = { maskClosable ? onClose : undefined }
454456 />
455457
456458 { /* Body */ }
Original file line number Diff line number Diff line change @@ -101,6 +101,33 @@ describe('Preview', () => {
101101 expect ( onPreviewCloseMock ) . toHaveBeenCalledWith ( false ) ;
102102 } ) ;
103103
104+ it ( 'maskClosable should control mask close behavior only' , ( ) => {
105+ const onPreviewOpenChange = jest . fn ( ) ;
106+ const { container } = render (
107+ < Image
108+ src = "https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"
109+ preview = { {
110+ maskClosable : false ,
111+ onOpenChange : onPreviewOpenChange ,
112+ } }
113+ /> ,
114+ ) ;
115+
116+ fireEvent . click ( container . querySelector ( '.rc-image' ) ) ;
117+ act ( ( ) => {
118+ jest . runAllTimers ( ) ;
119+ } ) ;
120+
121+ onPreviewOpenChange . mockReset ( ) ;
122+
123+ fireEvent . click ( document . querySelector ( '.rc-image-preview-mask' ) ) ;
124+ expect ( document . querySelector ( '.rc-image-preview' ) ) . toBeTruthy ( ) ;
125+ expect ( onPreviewOpenChange ) . not . toHaveBeenCalled ( ) ;
126+
127+ fireEvent . click ( document . querySelector ( '.rc-image-preview-close' ) ) ;
128+ expect ( onPreviewOpenChange ) . toHaveBeenCalledWith ( false ) ;
129+ } ) ;
130+
104131 it ( 'Unmount' , ( ) => {
105132 const { container, unmount } = render (
106133 < Image src = "https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png" /> ,
You can’t perform that action at this time.
0 commit comments