Files
discord-decomp/modules/premium/hooks/usePromotionMarketingComponent.tsx
T
2026-11-01 12:12:55 +02:00

67 lines
2.3 KiB
TypeScript

// Metro module 6563 (f6564).
import { useEffect, useState, useRef } from "react";
import UserOfferStore from "../../../stores/billing/UserOfferStore";
import PromotionsStore from "../promotions/PromotionsStore";
import { maybeFetchActivePromotions } from "../promotions/PromotionsActionCreators";
import { useStateFromStores } from "../../../_bundle/Module589";
import { PromotionTypes } from "../promotions/constants";
export function usePromotionMarketingComponent(c15799_0) {
let stateFromStores, endDate, ref;
useEffect(() => {
maybeFetchActivePromotions();
}, []);
stateFromStores = useStateFromStores([PromotionsStore, UserOfferStore], () => {
const marketingComponentByType = PromotionsStore.getMarketingComponentByType(c15799_0);
if (marketingComponentByType == null) {
return null;
}
const promotionByTypeAndId = PromotionsStore.getPromotionByTypeAndId(PromotionTypes.MARKETING_MOMENT, marketingComponentByType.promotionId);
const trialId = promotionByTypeAndId?.trialId;
L7: {
if (trialId != null) {
const userTrialOffer = UserOfferStore.getUserTrialOffer(promotionByTypeAndId.trialId);
if (userTrialOffer != null) {
if (userTrialOffer.expires_at == null) {
break L7;
}
if (!(Date.parse(userTrialOffer.expires_at) < Date.now())) {
break L7;
}
}
return null;
}
}
return marketingComponentByType;
});
endDate = useStateFromStores([PromotionsStore], () => {
const MARKETING_MOMENT = PromotionTypes.MARKETING_MOMENT;
let r14 = stateFromStores?.promotionId;
if (r14 == null) {
r14 = "";
}
return PromotionsStore.getPromotionByTypeAndId(MARKETING_MOMENT, r14);
})?.endDate;
const [state, setState] = useState(false);
ref = useRef(null);
useEffect(() => {
if (endDate != null) {
const r21 = endDate.getTime() - Date.now();
if (r21 > 0 && r21 < 86400000) {
setState(false);
clearTimeout(ref.current);
ref.current = setTimeout(() => {
setState(true);
}, r21);
} else if (r21 <= 0) {
setState(true);
}
return () => {
clearTimeout(ref.current);
};
}
setState(false);
clearTimeout(ref.current);
}, [endDate]);
return state ? null : stateFromStores;
}