function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
/**
 * Copyright (c) JOB TODAY S.A. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 *
 */
// @ts-nocheck
import React, { useCallback, useRef, useEffect } from 'react';
import { Animated, Dimensions, StyleSheet, View, VirtualizedList, Modal } from 'react-native';
import ImageItem from './components/ImageItem/ImageItem';
import ImageDefaultHeader from './components/ImageDefaultHeader';
import StatusBarManager from './components/StatusBarManager';
import useAnimatedComponents from './hooks/useAnimatedComponents';
import useImageIndexChange from './hooks/useImageIndexChange';
import useRequestClose from './hooks/useRequestClose';
const DEFAULT_ANIMATION_TYPE = 'fade';
const DEFAULT_BG_COLOR = '#000';
const DEFAULT_DELAY_LONG_PRESS = 800;
const SCREEN = Dimensions.get('screen');
const SCREEN_WIDTH = SCREEN.width;
function ImageViewing(_ref) {
  let {
    images,
    keyExtractor,
    imageIndex,
    visible,
    onRequestClose,
    onLongPress = () => {},
    onImageIndexChange,
    animationType = DEFAULT_ANIMATION_TYPE,
    backgroundColor = DEFAULT_BG_COLOR,
    presentationStyle,
    swipeToCloseEnabled,
    doubleTapToZoomEnabled,
    delayLongPress = DEFAULT_DELAY_LONG_PRESS,
    HeaderComponent,
    FooterComponent
  } = _ref;
  const imageList = useRef(null);
  const [opacity, onRequestCloseEnhanced] = useRequestClose(onRequestClose);
  const [currentImageIndex, onScroll] = useImageIndexChange(imageIndex, SCREEN);
  const [headerTransform, footerTransform, toggleBarsVisible] = useAnimatedComponents();
  useEffect(() => {
    if (onImageIndexChange) {
      onImageIndexChange(currentImageIndex);
    }
  }, [currentImageIndex]);
  const onZoom = useCallback(isScaled => {
    var _imageList$current;
    // @ts-ignore
    imageList === null || imageList === void 0 ? void 0 : (_imageList$current = imageList.current) === null || _imageList$current === void 0 ? void 0 : _imageList$current.setNativeProps({
      scrollEnabled: !isScaled
    });
    toggleBarsVisible(!isScaled);
  }, [imageList]);
  if (!visible) {
    return null;
  }
  return /*#__PURE__*/React.createElement(Modal, {
    transparent: presentationStyle === 'overFullScreen',
    visible: visible,
    presentationStyle: presentationStyle,
    animationType: animationType,
    onRequestClose: onRequestCloseEnhanced,
    supportedOrientations: ['portrait'],
    hardwareAccelerated: true
  }, /*#__PURE__*/React.createElement(StatusBarManager, {
    presentationStyle: presentationStyle
  }), /*#__PURE__*/React.createElement(View, {
    style: [styles.container, {
      opacity,
      backgroundColor
    }]
  }, /*#__PURE__*/React.createElement(Animated.View, {
    style: [styles.header, {
      transform: headerTransform
    }]
  }, typeof HeaderComponent !== 'undefined' ? /*#__PURE__*/React.createElement(HeaderComponent, {
    imageIndex: currentImageIndex
  }) : /*#__PURE__*/React.createElement(ImageDefaultHeader, {
    onRequestClose: onRequestCloseEnhanced
  })), /*#__PURE__*/React.createElement(VirtualizedList, {
    ref: imageList,
    data: images,
    horizontal: true,
    pagingEnabled: true,
    windowSize: 2,
    initialNumToRender: 1,
    maxToRenderPerBatch: 1,
    showsHorizontalScrollIndicator: false,
    showsVerticalScrollIndicator: false,
    initialScrollIndex: imageIndex,
    getItem: (_, index) => images[index],
    getItemCount: () => images.length,
    getItemLayout: (_, index) => ({
      length: SCREEN_WIDTH,
      offset: SCREEN_WIDTH * index,
      index
    }),
    renderItem: _ref2 => {
      let {
        item: imageSrc
      } = _ref2;
      return /*#__PURE__*/React.createElement(ImageItem, {
        onZoom: onZoom,
        imageSrc: imageSrc,
        onRequestClose: onRequestCloseEnhanced,
        onLongPress: onLongPress,
        delayLongPress: delayLongPress,
        swipeToCloseEnabled: swipeToCloseEnabled,
        doubleTapToZoomEnabled: doubleTapToZoomEnabled
      });
    },
    onMomentumScrollEnd: onScroll
    //@ts-ignore
    ,
    keyExtractor: (imageSrc, index) => keyExtractor ? keyExtractor(imageSrc, index) : typeof imageSrc === 'number' ? `${imageSrc}` : imageSrc.uri
  }), typeof FooterComponent !== 'undefined' && /*#__PURE__*/React.createElement(Animated.View, {
    style: [styles.footer, {
      transform: footerTransform
    }]
  }, /*#__PURE__*/React.createElement(FooterComponent, {
    imageIndex: currentImageIndex
  }))));
}
const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#000'
  },
  header: {
    position: 'absolute',
    width: '100%',
    zIndex: 1,
    top: 0
  },
  footer: {
    position: 'absolute',
    width: '100%',
    zIndex: 1,
    bottom: 0
  }
});
const EnhancedImageViewing = props => /*#__PURE__*/React.createElement(ImageViewing, _extends({
  key: props.imageIndex
}, props));
export default EnhancedImageViewing;
//# sourceMappingURL=ImageViewing.js.map