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

77 lines
2.9 KiB
TypeScript

// Metro module 14142 (f14143).
import { useEffect, useRef } from "react";
import QuestStore from "./QuestStore";
import Durations from "../../utils/Durations";
import { getIsEligibleForQuests } from "./lib/QuestsEligibility";
import DiscordAppState_native from "../app_state/DiscordAppState.native";
import { fetchCurrentQuests, fetchQuestToDeliver, clearQuestAdDecision } from "./QuestActionCreators";
import NewAdRequestBehaviorExperiment from "./experiments/NewAdRequestBehaviorExperiment";
import { useStateFromStores } from "../../_bundle/Module589";
import AdRecheckIntervalExperiment from "./experiments/AdRecheckIntervalExperiment";
import { isQuestExpired } from "./utils/QuestDataUtils";
let c9897_6, c9897_7;
const maybeRefreshAd = function maybeRefreshAd(stateFromStores, a1, a2) {
if (getIsEligibleForQuests() && !(stateFromStores != null && stateFromStores.fetchedAt + stateFromStores.ttlMillis >= Date.now())) {
if (DiscordAppState_native.getState() === "active") {
if (!QuestStore.isFetchingQuestToDeliverByPlacement(a1) && QuestStore.canRefreshAd(a1) && NewAdRequestBehaviorExperiment.getConfig({
location: "maybeRefreshAd"
}).enableNewRequestBehavior) {
fetchCurrentQuests();
fetchQuestToDeliver(a1, a2);
}
} else if (stateFromStores != null) {
clearQuestAdDecision(a1, stateFromStores.ttlMillis);
}
}
};
c9897_6 = 10 * Durations.Millis.MINUTE;
c9897_7 = 30 * Durations.Millis.SECOND;
export default function useQuestForAdPlacement(a0) {
let enableFastAdRecheck;
const ref = useRef(null);
const stateFromStores = useStateFromStores([QuestStore], () => {
let r7 = QuestStore.questAdDecisionByPlacement.get(a0);
if (r7 == null) {
r7 = null;
}
return r7;
});
const stateFromStores2 = useStateFromStores([QuestStore], () => {
const r7 = stateFromStores?.questId != null;
let r8 = null;
if (r7) {
let r12 = QuestStore.quests.get(stateFromStores.questId);
if (r12 == null) {
r12 = null;
}
r8 = r12;
}
return r8;
});
enableFastAdRecheck = AdRecheckIntervalExperiment.useConfig({
location: "useQuestForAdPlacement"
}).enableFastAdRecheck;
useEffect(() => {
if (ref.current != null) {
clearInterval(ref.current);
}
const r1 = enableFastAdRecheck ? c9897_7 : c9897_6;
let current;
maybeRefreshAd(stateFromStores, a0, "questBar-open");
ref.current = setInterval(() => {
let r9 = QuestStore.questAdDecisionByPlacement.get(a0);
if (r9 == null) {
r9 = null;
}
maybeRefreshAd(r9, a0, "questBar-interval");
}, r1);
current = ref.current;
return () => {
if (current != null) {
clearInterval(current);
}
};
}, [stateFromStores, a0, enableFastAdRecheck]);
return stateFromStores2 == null ? null : isQuestExpired(stateFromStores2) ? null : stateFromStores2;
};