Files
discord-decomp/modules/quests/native/BountiesModal/useBountiesAutoScroll.tsx
T
2026-11-01 12:12:55 +02:00

296 lines
9.3 KiB
TypeScript

// Metro module 14042 (f14043).
import { useState, useRef, useCallback, useEffect } from "react";
import { AppState } from "react-native";
import { QuestsExperimentLocations } from "../../QuestConstants";
import { BountiesVerticalScrollExperiment } from "../../experiments/BountiesVerticalScrollExperiment";
import { useForceBountiesSwipeUpNux } from "./bountiesSwipeUpNuxDevTools";
import { useSharedValue } from "../../../reanimated/ReanimatedRexport";
import { withTiming } from "../../../../design/animation/reanimated/timing/timing";
import { timingSlow, timingStandard } from "../../../../design/animation/reanimated/timing/timingPresets";
import { getIsInAppBrowserOpen, subscribeToIsInAppBrowserOpen } from "../../../links/native/BrowserManager";
let c9818_6 = new Set();
export const AUTO_SCROLL_PEEK_SCALE = 0.83;
export const AUTO_SCROLL_PEEK_TOP_OFFSET = 54;
export function clearDismissedScrollAffordanceBountyIds() {
c9818_6.clear();
}
export function useBountiesAutoScroll({ listRef, enabled, mode, activeIndex, activeBountyId, slotHeight, onCountdownCancelled }) {
let callback2, callback3, callback4, callback5, callback6, callback7, callback8, callback9, callback10, callback11, callback12, callback13;
callback2 = void 0;
callback3 = void 0;
callback4 = void 0;
callback5 = void 0;
callback6 = void 0;
callback7 = void 0;
callback8 = void 0;
callback9 = void 0;
callback10 = void 0;
callback11 = void 0;
callback12 = void 0;
callback13 = void 0;
const config = BountiesVerticalScrollExperiment.useConfig({
location: QuestsExperimentLocations.VIDEO_MODAL_MOBILE
});
const { autoScrollLeadMs, autoScrollEndCardMs, ctaTimerMilliSeconds } = config;
const r4 = autoScrollLeadMs / 1000;
let c20867_8 = r4;
const current = r4 + autoScrollEndCardMs / 1000;
const [r48] = useForceBountiesSwipeUpNux();
let c20867_10 = r48;
const [visible, setState] = useState(false);
const [peekActive, setState2] = useState(false);
const [progress, setState3] = useState(0);
const [showProgressRing, setState4] = useState(false);
const ref = useRef(false);
const ref2 = useRef(false);
const ref3 = useRef(false);
const ref4 = useRef(false);
const ref5 = useRef(null);
const ref6 = useRef(null);
const ref7 = useRef(0);
const ref8 = useRef(null);
const ref9 = useRef(false);
const ref10 = useRef(false);
const sharedValue = useSharedValue(1);
const ref11 = useRef(current);
const callback = useCallback(() => {
if (ref5.current != null) {
clearInterval(ref5.current);
ref5.current = null;
}
ref8.current = null;
}, []);
callback2 = useCallback(() => {
if (ref6.current != null) {
clearTimeout(ref6.current);
ref6.current = null;
}
}, []);
callback3 = useCallback((a0) => {
if (!(c20867_10 || a0 == null)) {
c9818_6.add(a0);
}
}, [r48]);
callback4 = useCallback((a0) => (c20867_10 ? !c20867_10 : a0 != null) && c9818_6.has(a0), [r48]);
callback5 = useCallback(() => {
setState(false);
setState2(false);
setState3(0);
setState4(false);
}, []);
const [state, setState5] = useState(activeIndex);
const [state2, setState6] = useState(activeBountyId);
if (!(state === activeIndex && state2 === activeBountyId)) {
setState5(activeIndex);
setState6(activeBountyId);
callback5();
}
useEffect(() => {
callback();
callback2();
ref.current = callback4(activeBountyId);
ref2.current = callback4(activeBountyId);
ref3.current = false;
ref4.current = false;
ref7.current = 0;
ref9.current = false;
ref10.current = false;
sharedValue.set(1);
}, [activeIndex, activeBountyId, callback, callback2, sharedValue, callback4]);
useEffect(() => () => {
callback();
callback2();
}, [callback, callback2]);
useEffect(() => {
ref11.current = current;
}, [current]);
callback6 = useCallback(function(r7 = 0) {
const r6 = ref2.current || ref.current || callback4(activeBountyId);
let r1 = !r6;
if (!r6) {
ref2.current = true;
callback3(activeBountyId);
callback2();
ref6.current = setTimeout(() => {
ref6.current = null;
if (!(ref.current || ref4.current)) {
sharedValue.set(withTiming(0.83, timingSlow));
setState2(true);
ref6.current = setTimeout(() => {
ref6.current = null;
if (!(ref.current || ref4.current)) {
setState(true);
}
}, 500);
}
}, r7);
r1 = true;
}
return r1;
}, [activeBountyId, callback2, callback3, sharedValue, callback4]);
callback7 = useCallback(() => {
if (!(ref4.current || ref.current)) {
ref4.current = true;
callback3(activeBountyId);
callback();
callback2();
callback5();
sharedValue.set(1);
const current2 = listRef.current;
if (current2 != null) {
current2.scrollToOffset({
offset: (activeIndex + 1) * slotHeight,
animated: true
});
}
}
}, [activeBountyId, activeIndex, callback, callback2, listRef, callback3, sharedValue, callback5, slotHeight]);
callback8 = useCallback(() => {
if (!ref.current && !ref9.current) {
const current3 = Date.now();
if (ref8.current != null) {
ref7.current = ref7.current + (current3 - ref8.current);
}
ref8.current = current3;
const current2 = ref11.current;
const r22 = ref7.current / 1000;
if (r22 >= current2) {
callback7();
} else {
setState3(r22 / current2);
}
}
}, [callback7]);
callback9 = useCallback(() => {
if (!(ref3.current || ref5.current != null || ref9.current)) {
ref3.current = true;
ref7.current = 0;
ref8.current = Date.now();
setState3(0);
setState4(true);
ref5.current = setInterval(callback8, 50);
}
}, [callback8]);
callback10 = useCallback(() => {
if (ref3.current && !ref9.current && ref5.current != null) {
const r6 = Date.now();
if (ref8.current != null) {
ref7.current = ref7.current + (r6 - ref8.current);
}
ref9.current = true;
callback();
}
}, [callback]);
callback11 = useCallback(() => {
if (ref3.current && ref9.current && !ref.current && !ref4.current) {
ref9.current = false;
ref8.current = Date.now();
ref5.current = setInterval(callback8, 50);
}
}, [callback8]);
callback12 = useCallback(() => {
if (!ref9.current) {
callback10();
ref10.current = true;
}
}, [callback10]);
callback13 = useCallback(() => {
if (ref10.current && !getIsInAppBrowserOpen()) {
ref10.current = false;
callback11();
}
}, [callback11]);
useEffect(() => {
let c27615_1;
let c27615_0 = AppState.addEventListener("change", (a0) => {
if (a0 === "active") {
callback13();
} else {
callback12();
}
});
c27615_1 = subscribeToIsInAppBrowserOpen((a0) => {
if (a0) {
callback12();
} else {
callback13();
}
});
return () => {
c27615_0.remove();
c27615_1();
};
}, [callback12, callback13]);
return {
visible,
peekActive,
progress,
showProgressRing,
peekScale: sharedValue,
cancel: useCallback((a0) => {
const current2 = ref2.current;
if (!((current2 ? ref.current : !current2) || ref4.current)) {
ref.current = true;
callback3(activeBountyId);
callback();
setState(false);
setState3(0);
sharedValue.set(withTiming(1, timingStandard));
if (mode === "countdown" && onCountdownCancelled != null) {
onCountdownCancelled(a0);
}
callback2();
callback5();
}
}, [activeBountyId, callback, callback2, callback3, mode, onCountdownCancelled, sharedValue, callback5]),
dismissOnClose: useCallback(() => {
if (ref2.current) {
ref.current = true;
callback3(activeBountyId);
callback();
callback2();
callback5();
sharedValue.set(1);
}
}, [activeBountyId, callback, callback2, callback3, sharedValue, callback5]),
takeDidAutoScroll: useCallback(() => {
const current2 = ref4.current;
ref4.current = false;
callback2();
callback5();
return current2;
}, [callback2, callback5]),
onPlaybackTimeChange: useCallback((a0, a1, a2, a3, a4) => {
if (!((enabled ? mode !== "countdown" : !enabled) || ref.current || ref4.current || a1 <= 0)) {
const current2 = ref2.current;
if (current2 ? !current2 : a4 ? a4 : 1000 * a3 > ctaTimerMilliSeconds) {
callback6(5000);
}
if ((a2 ? !ref3.current : a2) && !(a1 - a0 > c20867_8)) {
callback9();
}
}
}, [r4, ctaTimerMilliSeconds, enabled, mode, callback6, callback9]),
onEndCardVisible: useCallback(() => {
if (!((enabled ? ref.current : !enabled) || callback4(activeBountyId))) {
if (mode !== "hint") {
if (!ref2.current) {
callback6();
}
if (ref3.current) {
if (ref9.current) {
callback11();
}
} else {
callback9();
}
} else {
callback6();
}
}
}, [activeBountyId, enabled, mode, callback11, callback6, callback9, callback4]),
pauseCountdown: callback10,
resumeCountdown: callback11
};
}