@@ -40,6 +40,7 @@ export interface PreviewProps extends Omit<IDialogPropTypes, 'onClose'> {
4040 src ?: string ;
4141 alt ?: string ;
4242 fallback ?: string ;
43+ movable ?: boolean ;
4344 rootClassName ?: string ;
4445 icons ?: {
4546 rotateLeft ?: React . ReactNode ;
@@ -98,6 +99,7 @@ const Preview: React.FC<PreviewProps> = props => {
9899 src,
99100 alt,
100101 fallback,
102+ movable = true ,
101103 onClose,
102104 visible,
103105 icons = { } ,
@@ -229,7 +231,7 @@ const Preview: React.FC<PreviewProps> = props => {
229231
230232 const onMouseDown : React . MouseEventHandler < HTMLDivElement > = event => {
231233 // Only allow main button
232- if ( event . button !== 0 ) return ;
234+ if ( ! movable || event . button !== 0 ) return ;
233235 event . preventDefault ( ) ;
234236 event . stopPropagation ( ) ;
235237 downPositionRef . current = {
@@ -295,31 +297,35 @@ const Preview: React.FC<PreviewProps> = props => {
295297 useEffect ( ( ) => {
296298 let onTopMouseUpListener ;
297299 let onTopMouseMoveListener ;
298-
299- const onMouseUpListener = addEventListener ( window , 'mouseup' , onMouseUp , false ) ;
300- const onMouseMoveListener = addEventListener ( window , 'mousemove' , onMouseMove , false ) ;
301-
302- try {
303- // Resolve if in iframe lost event
304- /* istanbul ignore next */
305- if ( window . top !== window . self ) {
306- onTopMouseUpListener = addEventListener ( window . top , 'mouseup' , onMouseUp , false ) ;
307- onTopMouseMoveListener = addEventListener ( window . top , 'mousemove' , onMouseMove , false ) ;
300+ let onMouseUpListener ;
301+ let onMouseMoveListener ;
302+
303+ if ( movable ) {
304+ onMouseUpListener = addEventListener ( window , 'mouseup' , onMouseUp , false ) ;
305+ onMouseMoveListener = addEventListener ( window , 'mousemove' , onMouseMove , false ) ;
306+
307+ try {
308+ // Resolve if in iframe lost event
309+ /* istanbul ignore next */
310+ if ( window . top !== window . self ) {
311+ onTopMouseUpListener = addEventListener ( window . top , 'mouseup' , onMouseUp , false ) ;
312+ onTopMouseMoveListener = addEventListener ( window . top , 'mousemove' , onMouseMove , false ) ;
313+ }
314+ } catch ( error ) {
315+ /* istanbul ignore next */
316+ warning ( false , `[rc-image] ${ error } ` ) ;
308317 }
309- } catch ( error ) {
310- /* istanbul ignore next */
311- warning ( false , `[rc-image] ${ error } ` ) ;
312318 }
313319
314320 return ( ) => {
315- onMouseUpListener . remove ( ) ;
316- onMouseMoveListener . remove ( ) ;
321+ onMouseUpListener ? .remove ( ) ;
322+ onMouseMoveListener ? .remove ( ) ;
317323 /* istanbul ignore next */
318324 onTopMouseUpListener ?. remove ( ) ;
319325 /* istanbul ignore next */
320326 onTopMouseMoveListener ?. remove ( ) ;
321327 } ;
322- } , [ visible , isMoving , x , y , rotate ] ) ;
328+ } , [ visible , isMoving , x , y , rotate , movable ] ) ;
323329
324330 useEffect ( ( ) => {
325331 const onKeyDownListener = addEventListener ( window , 'keydown' , onKeyDown , false ) ;
0 commit comments