// Metro module 12321 (f12322). import * as Module19 from "react"; import { useRef, useState, useEffect, useCallback, useMemo } from "react"; import { ScrollView } from "react-native"; import * as _PlatformUtils from "../../../../utils/PlatformUtils"; import { dismissKeyboard } from "../../../../utils/native/ChatInputUtils"; import getMediaViewerStateForScreen from "../getMediaViewerStateForScreen"; import { useEntranceAnimationState } from "../useEntranceAnimation"; import { flattenSource } from "../MediaSourceUtil"; import { MediaViewerSourcesStore, removeSpoiler } from "../useMediaViewerSources"; import useShouldHideMediaOptions from "../../../media_channel/useShouldHideMediaOptions"; import { Gesture, GestureDetector } from "../../../../_bundle/Module5273"; import MediaViewerItemPresenter from "./MediaViewerItemPresenter"; import ZoomLayout_android from "../../../zoom_layout/ZoomLayout.android"; const isAndroid = _PlatformUtils.isAndroid(); const r29 = Module19.memo(function({ entranceAnimationDriver, index, onLongPress, originLayout, panGestureConfig, panGesture, renderMedia, source, useItemVisible, zoomed, windowWidth, windowHeight }) { let ref3, ref4, setState3, callback, callback2, obscure, field, memo, c19795_19, callback3, callback4, callback5, callback6, ref5; ref3 = void 0; ref4 = void 0; setState3 = void 0; callback = void 0; callback2 = void 0; obscure = void 0; field = void 0; memo = void 0; c19795_19 = void 0; callback3 = void 0; callback4 = void 0; callback5 = void 0; callback6 = void 0; ref5 = void 0; const ref = useRef(windowWidth); const ref2 = useRef(windowHeight); const [windowWidth2, setState] = useState(windowWidth); const [windowHeight2, setState2] = useState(windowHeight); useEffect(() => dismissKeyboard(), []); useEffect(() => { let c27287_0 = setTimeout(() => { setState(windowWidth); setState2(windowHeight); ref.current = windowWidth; ref2.current = windowHeight; }, 20); return () => clearTimeout(c27287_0); }, [windowWidth, windowHeight]); const maximumZoomScale = getMediaViewerStateForScreen(windowWidth2, windowHeight2, source).maximumZoomScale; ref3 = useRef(null); ref4 = useRef(null); let state; [state, setState3] = useState(false); callback = useCallback((a0, a1) => { if (ref3.current != null) { const current2 = ref.current; const current3 = ref2.current; const width = current2 / 2; const height = current3 / 2; ref3.current.getScrollResponder().scrollResponderZoomTo({ x: a0 - width / 2, y: a1 - height / 2, width, height, animated: true }); } else if (ref4.current !== null) { const current = ref4.current; if (current != null) { current.zoomTo({ x: a0, y: a1 }); } } }, []); callback2 = useCallback(function(animated = true) { if (ref3.current != null) { const current = ref.current; const current2 = ref2.current; ref3.current.getScrollResponder().scrollResponderZoomTo({ x: 0, y: 0, width: current, height: current2, animated }); } else if (ref4.current !== null) { ref4.current.unzoom({ animated }); } }, []); const callback7 = useCallback((a0) => { const r1 = a0.nativeEvent.zoomScale > 1; zoomed.set(r1); panGestureConfig.isInteracting.set(r1); let r16 = isAndroid; if (!isAndroid) { r16 = !useEntranceAnimationState.getState().isComplete; } if (!r16) { r16 = r1; } if (!r16) { setState3(true); setTimeout(() => { setState3(false); }, 500); } }, [zoomed, panGestureConfig]); let r77 = flattenSource(source); if (r77 == null) { r77 = {}; } obscure = r77.obscure; const channelId = r77.channelId; field = MediaViewerSourcesStore.useField("spoilerIndexes"); memo = useMemo(() => field.has(index), [index, field]); const shouldHideMediaOptions = useShouldHideMediaOptions(channelId); c19795_19 = shouldHideMediaOptions; callback3 = useCallback(() => { if (memo) { removeSpoiler(index); } else if (!c19795_19 && onLongPress != null) { onLongPress(); } }, [memo, index, onLongPress, shouldHideMediaOptions]); callback4 = useCallback(() => { if (!zoomed.get()) { panGestureConfig.overlayEnabled.set(!panGestureConfig.overlayEnabled.get()); } }, [zoomed, panGestureConfig]); callback5 = useCallback(({ absoluteX, absoluteY }) => { if (zoomed.get()) { callback2(); } else if (!zoomed.get()) { callback(absoluteX, absoluteY); } }, [callback2, callback, zoomed]); callback6 = useCallback(() => { removeSpoiler(index); }, [index]); const memo2 = useMemo(() => { const r26 = Gesture.Tap().runOnJS(true).enabled(!memo).numberOfTaps(2); const isAndroid2 = _PlatformUtils.isAndroid(); let r30 = 10; const r15 = r26.maxDistance(isAndroid2 ? 20 : 10).onStart(callback5); const r55 = Gesture.Tap().runOnJS(true).enabled(!memo).numberOfTaps(1).maxDistance(_PlatformUtils.isAndroid() ? 20 : 10).onStart(callback4); const r67 = Gesture.Tap().runOnJS(true).enabled(memo ? !obscure : memo).numberOfTaps(1); if (_PlatformUtils.isAndroid()) { r30 = 20; } return Gesture.Simultaneous(Gesture.Exclusive(r67.maxDistance(r30).onStart(callback6), r15, r55), Gesture.LongPress().runOnJS(true).enabled(!memo).onStart(callback3), panGesture); }, [callback5, callback3, callback6, memo, obscure, panGesture, callback4]); ref5 = useRef(false); useEffect(() => { if (ref5.current) { callback2(false); } else { ref5.current = true; } }, [callback2, windowWidth2, windowHeight2]); const r125 = ; return isAndroid ? {r125} : {r125}; }); export { r29 as MediaViewerItem };