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, useState } from "react";
import { Animated, Dimensions, ScrollView, StyleSheet, View, TouchableWithoutFeedback } from "react-native";
import useDoubleTapToZoom from "../../hooks/useDoubleTapToZoom";
import useImageDimensions from "../../hooks/useImageDimensions";
import { getImageStyles, getImageTransform } from "../../utils";
import { ImageLoading } from "./ImageLoading";
const SWIPE_CLOSE_OFFSET = 75;
const SWIPE_CLOSE_VELOCITY = 1.55;
const SCREEN = Dimensions.get("screen");
const SCREEN_WIDTH = SCREEN.width;
const SCREEN_HEIGHT = SCREEN.height;

// @ts-ignore
const ImageItem = _ref => {
  let {
    imageSrc,
    onZoom,
    onRequestClose,
    onLongPress,
    delayLongPress,
    swipeToCloseEnabled = true,
    doubleTapToZoomEnabled = true
  } = _ref;
  const scrollViewRef = useRef(null);
  const [loaded, setLoaded] = useState(false);
  const [scaled, setScaled] = useState(false);
  const imageDimensions = useImageDimensions(imageSrc);
  const handleDoubleTap = useDoubleTapToZoom(scrollViewRef, scaled, SCREEN);
  const [translate, scale] = getImageTransform(imageDimensions, SCREEN);
  const scrollValueY = new Animated.Value(0);
  const scaleValue = new Animated.Value(scale || 1);
  const translateValue = new Animated.ValueXY(translate);
  const maxScale = scale && scale > 0 ? Math.max(1 / scale, 1) : 1;
  const imageOpacity = scrollValueY.interpolate({
    inputRange: [-SWIPE_CLOSE_OFFSET, 0, SWIPE_CLOSE_OFFSET],
    outputRange: [1, 1, 1]
  });
  const imagesStyles = getImageStyles(imageDimensions, translateValue, scaleValue);
  const imageStylesWithOpacity = {
    ...imagesStyles,
    opacity: imageOpacity
  };
  const onScrollEndDrag = useCallback(_ref2 => {
    var _nativeEvent$velocity, _nativeEvent$velocity2;
    let {
      nativeEvent
    } = _ref2;
    const velocityY = (_nativeEvent$velocity = nativeEvent === null || nativeEvent === void 0 ? void 0 : (_nativeEvent$velocity2 = nativeEvent.velocity) === null || _nativeEvent$velocity2 === void 0 ? void 0 : _nativeEvent$velocity2.y) !== null && _nativeEvent$velocity !== void 0 ? _nativeEvent$velocity : 0;
    const scaled = (nativeEvent === null || nativeEvent === void 0 ? void 0 : nativeEvent.zoomScale) > 1;
    onZoom(scaled);
    setScaled(scaled);
    if (!scaled && swipeToCloseEnabled && Math.abs(velocityY) > SWIPE_CLOSE_VELOCITY) {
      onRequestClose();
    }
  }, [scaled]);
  const onScroll = _ref3 => {
    var _nativeEvent$contentO, _nativeEvent$contentO2;
    let {
      nativeEvent
    } = _ref3;
    const offsetY = (_nativeEvent$contentO = nativeEvent === null || nativeEvent === void 0 ? void 0 : (_nativeEvent$contentO2 = nativeEvent.contentOffset) === null || _nativeEvent$contentO2 === void 0 ? void 0 : _nativeEvent$contentO2.y) !== null && _nativeEvent$contentO !== void 0 ? _nativeEvent$contentO : 0;
    if ((nativeEvent === null || nativeEvent === void 0 ? void 0 : nativeEvent.zoomScale) > 1) {
      return;
    }
    scrollValueY.setValue(offsetY);
  };
  const onLongPressHandler = useCallback(() => {
    onLongPress(imageSrc);
  }, [imageSrc, onLongPress]);
  return /*#__PURE__*/React.createElement(View, null, /*#__PURE__*/React.createElement(ScrollView, _extends({
    ref: scrollViewRef,
    style: styles.listItem,
    pinchGestureEnabled: true,
    showsHorizontalScrollIndicator: false,
    showsVerticalScrollIndicator: false,
    maximumZoomScale: maxScale,
    contentContainerStyle: styles.imageScrollContainer,
    scrollEnabled: swipeToCloseEnabled,
    onScrollEndDrag: onScrollEndDrag,
    scrollEventThrottle: 1
  }, swipeToCloseEnabled && {
    onScroll
  }), (!loaded || !imageDimensions) && /*#__PURE__*/React.createElement(ImageLoading, null), /*#__PURE__*/React.createElement(TouchableWithoutFeedback, {
    onPress: doubleTapToZoomEnabled ? handleDoubleTap : undefined,
    onLongPress: onLongPressHandler,
    delayLongPress: delayLongPress
  }, /*#__PURE__*/React.createElement(Animated.Image, {
    source: imageSrc,
    style: imageStylesWithOpacity,
    onLoad: () => setLoaded(true)
  }))));
};
const styles = StyleSheet.create({
  listItem: {
    width: SCREEN_WIDTH,
    height: SCREEN_HEIGHT
  },
  imageScrollContainer: {
    height: SCREEN_HEIGHT
  }
});
export default /*#__PURE__*/React.memo(ImageItem);
//# sourceMappingURL=ImageItem.ios.js.map