|
@@ -1,15 +1,15 @@
|
|
|
import { Barrage } from "@/components/Barrage";
|
|
import { Barrage } from "@/components/Barrage";
|
|
|
import { CouponModal } from "@/components/CouponModal";
|
|
import { CouponModal } from "@/components/CouponModal";
|
|
|
-import { NewbieActivityModal } from "@/components/NewbieActivityModal";
|
|
|
|
|
|
|
+import { AdElement, SuperAdModal } from "@/components/SuperAdModal";
|
|
|
import { Colors } from "@/constants/Colors";
|
|
import { Colors } from "@/constants/Colors";
|
|
|
import { Images } from "@/constants/images";
|
|
import { Images } from "@/constants/images";
|
|
|
-import { CouponItem, getNewbieGiftBagInfo, listValidCoupon } from "@/services/activity";
|
|
|
|
|
|
|
+import { CouponItem, listValidCoupon } from "@/services/activity";
|
|
|
import { getFeedbackList, getPoolList, PoolItem } from "@/services/award";
|
|
import { getFeedbackList, getPoolList, PoolItem } from "@/services/award";
|
|
|
|
|
+import { getPageConfig } from "@/services/base";
|
|
|
import { getToken } from "@/services/http";
|
|
import { getToken } from "@/services/http";
|
|
|
-import AsyncStorage from "@react-native-async-storage/async-storage";
|
|
|
|
|
import { Image } from "expo-image";
|
|
import { Image } from "expo-image";
|
|
|
import { useFocusEffect, useRouter } from "expo-router";
|
|
import { useFocusEffect, useRouter } from "expo-router";
|
|
|
-import React, { useCallback, useEffect, useMemo, useState } from "react";
|
|
|
|
|
|
|
+import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
|
import {
|
|
import {
|
|
|
ActivityIndicator,
|
|
ActivityIndicator,
|
|
|
Dimensions,
|
|
Dimensions,
|
|
@@ -148,9 +148,9 @@ export default function BoxScreen() {
|
|
|
// 新人优惠券弹窗
|
|
// 新人优惠券弹窗
|
|
|
const [couponVisible, setCouponVisible] = useState(false);
|
|
const [couponVisible, setCouponVisible] = useState(false);
|
|
|
const [couponList, setCouponList] = useState<CouponItem[]>([]);
|
|
const [couponList, setCouponList] = useState<CouponItem[]>([]);
|
|
|
- const [newPeopleChecked, setNewPeopleChecked] = useState(false);
|
|
|
|
|
- // 新人大礼包海报弹窗
|
|
|
|
|
- const [activityVisible, setActivityVisible] = useState(false);
|
|
|
|
|
|
|
+ // 广告弹窗 (super_ad)
|
|
|
|
|
+ const [adElements, setAdElements] = useState<AdElement[]>([]);
|
|
|
|
|
+ const adShownRef = useRef(false);
|
|
|
|
|
|
|
|
// 加载弹幕
|
|
// 加载弹幕
|
|
|
const loadBarrage = useCallback(async () => {
|
|
const loadBarrage = useCallback(async () => {
|
|
@@ -164,27 +164,21 @@ export default function BoxScreen() {
|
|
|
}
|
|
}
|
|
|
}, []);
|
|
}, []);
|
|
|
|
|
|
|
|
- // 新人大礼包检测(Vue: initNewPeople)—— 一个设备只弹一次
|
|
|
|
|
- const initNewPeople = useCallback(async () => {
|
|
|
|
|
- if (newPeopleChecked) return;
|
|
|
|
|
- const token = getToken();
|
|
|
|
|
- if (!token) return; // 未登录不检测
|
|
|
|
|
|
|
+ // 广告弹窗加载(Vue: App.vue onShow 加载 super_ad + pages/award/index.vue 展示)
|
|
|
|
|
+ // 每个 session (冷启动) 只展示一次
|
|
|
|
|
+ const initSuperAd = useCallback(async () => {
|
|
|
|
|
+ if (adShownRef.current) return;
|
|
|
try {
|
|
try {
|
|
|
- const flag = await AsyncStorage.getItem("NEW_PEOPLE");
|
|
|
|
|
- if (flag) {
|
|
|
|
|
- setNewPeopleChecked(true);
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
- const data = await getNewbieGiftBagInfo();
|
|
|
|
|
- if (data) {
|
|
|
|
|
- setNewPeopleChecked(true);
|
|
|
|
|
- setActivityVisible(true);
|
|
|
|
|
- await AsyncStorage.setItem("NEW_PEOPLE", "1");
|
|
|
|
|
|
|
+ const config = await getPageConfig("super_ad_app");
|
|
|
|
|
+ const elements = (config?.components?.[0]?.elements || []) as AdElement[];
|
|
|
|
|
+ if (elements.length > 0) {
|
|
|
|
|
+ adShownRef.current = true;
|
|
|
|
|
+ setAdElements(elements);
|
|
|
}
|
|
}
|
|
|
} catch (e) {
|
|
} catch (e) {
|
|
|
// 静默失败
|
|
// 静默失败
|
|
|
}
|
|
}
|
|
|
- }, [newPeopleChecked]);
|
|
|
|
|
|
|
+ }, []);
|
|
|
|
|
|
|
|
// 优惠券检测(Vue: initCoupon)
|
|
// 优惠券检测(Vue: initCoupon)
|
|
|
const initCoupon = useCallback(async () => {
|
|
const initCoupon = useCallback(async () => {
|
|
@@ -240,12 +234,12 @@ export default function BoxScreen() {
|
|
|
loadBarrage();
|
|
loadBarrage();
|
|
|
}, [typeIndex, priceSort]);
|
|
}, [typeIndex, priceSort]);
|
|
|
|
|
|
|
|
- // 对齐 Vue onShow:每次页面获得焦点检查新人弹窗/优惠券
|
|
|
|
|
|
|
+ // 对齐 Vue onShow:每次页面获得焦点检查广告弹窗/优惠券
|
|
|
useFocusEffect(
|
|
useFocusEffect(
|
|
|
useCallback(() => {
|
|
useCallback(() => {
|
|
|
- initNewPeople();
|
|
|
|
|
|
|
+ initSuperAd();
|
|
|
initCoupon();
|
|
initCoupon();
|
|
|
- }, [initNewPeople, initCoupon]),
|
|
|
|
|
|
|
+ }, [initSuperAd, initCoupon]),
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
// 执行搜索
|
|
// 执行搜索
|
|
@@ -434,11 +428,13 @@ export default function BoxScreen() {
|
|
|
}}
|
|
}}
|
|
|
/>
|
|
/>
|
|
|
|
|
|
|
|
- {/* 新人大礼包海报弹窗 */}
|
|
|
|
|
- <NewbieActivityModal
|
|
|
|
|
- visible={activityVisible}
|
|
|
|
|
- onClose={() => setActivityVisible(false)}
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ {/* 广告弹窗 (super_ad) */}
|
|
|
|
|
+ {adElements.length > 0 && (
|
|
|
|
|
+ <SuperAdModal
|
|
|
|
|
+ elements={adElements}
|
|
|
|
|
+ onClose={() => setAdElements([])}
|
|
|
|
|
+ />
|
|
|
|
|
+ )}
|
|
|
</View>
|
|
</View>
|
|
|
</View>
|
|
</View>
|
|
|
);
|
|
);
|