// Metro module 5309 (f5310).
import Module19, { useContext, useEffect, useMemo, useRef } from "react";
import { Platform } from "react-native";
import Module5288 from "./Module5288";
import { useWebEventHandlers } from "./convertToHandlerTag";
import { useDetectorUpdater } from "./Module5314";
import { useViewRefHandler } from "./Module5319";
import { needsToReattach } from "./Module5315";
import { useAnimatedGesture } from "./getHandler_5320";
import { useIsomorphicLayoutEffect } from "./Module5321";
import Module5299 from "./Module5299";
import { attachHandlers } from "./Module5317";
import { dropHandlers } from "./Module5316";
import { useMountReactions } from "./shouldUpdateDetector";
import { AnimatedWrap, Wrap } from "./Wrap";
Platform;
export const GestureDetector = (a0) => {
useContext(Module5288);
if (a0.gesture) {
let memo, webEventHandlers, current, current2, detectorUpdater;
const gesture = a0.gesture;
(function propagateDetectorConfig(a0, a1) {
for (const item of ["userSelect", "enableContextMenu", "touchAction"]) {
const r26 = a0[item];
if (r26 !== void 0) {
for (const item2 of a1.toGestureArray()) {
item2.config[item] = r26;
}
}
}
})(a0, gesture);
memo = useMemo(() => gesture.toGestureArray(), [gesture]);
const shouldUseReanimated = memo.some((item) => item.shouldUseReanimated);
webEventHandlers = useWebEventHandlers();
current = useRef({
firstRender: true,
viewRef: null,
previousViewTag: -1,
forceRebuildReanimatedEvent: false
}).current;
current2 = Module19.useRef({
attachedGestures: [],
animatedEventHandler: null,
animatedHandlers: null,
shouldUseReanimated,
isMounted: false
}).current;
detectorUpdater = useDetectorUpdater(current, current2, memo, gesture, webEventHandlers);
const viewRefHandler = useViewRefHandler(current, detectorUpdater);
const r58 = current.firstRender || current.forceRebuildReanimatedEvent || needsToReattach(current2, memo);
current.forceRebuildReanimatedEvent = false;
useAnimatedGesture(current2, r58);
useIsomorphicLayoutEffect(() => {
const viewTag = Module5299(current.viewRef);
current2.isMounted = true;
attachHandlers({
preparedGesture: current2,
gestureConfig: gesture,
gesturesToAttach: memo,
webEventHandlersRef: webEventHandlers,
viewTag
});
return () => {
current2.isMounted = false;
dropHandlers(current2);
};
}, []);
useEffect(() => {
if (current.firstRender) {
current.firstRender = false;
} else {
detectorUpdater();
}
}, [a0]);
useMountReactions(detectorUpdater, current2);
return shouldUseReanimated ? {a0.children} : {a0.children};
}
throw new Error("GestureDetector must have a gesture prop provided.");
};