258 lines
8.6 KiB
TypeScript
258 lines
8.6 KiB
TypeScript
// Metro module 15355 (f15356).
|
|
import { useState, useEffect, useCallback, useMemo } from "react";
|
|
import ICYMIStore from "./ICYMIStore";
|
|
import { SCROLL_EVENT_THROTTLE_MS } from "./ICYMIConstants";
|
|
import useICYMIItems from "./useICYMIItems";
|
|
import { useStateFromStores, useStateFromStoresObject } from "../../_bundle/Module589";
|
|
import { ICYMIAnalytics } from "./ICYMIAnalytics";
|
|
import { NON_ELIGIBLE_SCROLL_ITEMS } from "./ICYMIItemTypes";
|
|
import usePrevValue from "../../hooks/usePrevValue";
|
|
import ICYMIActionCreators from "./ICYMIActionCreators";
|
|
import { getViewableFeedItemsArray, itemToType, customStatusToContentInventoryEntry, isItemNSFW } from "./ICYMIUtils";
|
|
import { typeToString, ICYMIItemTypes } from "./ICYMITypes";
|
|
import { useICYMIReloadHandler } from "./useICYMIReloadHandler";
|
|
export function useSharedICYMILogic({ showDot, notificationItem }) {
|
|
let stateFromStores2, stateFromStores3, stateFromStores4, setState2, lastScrollEventTimestamp, c21892_11, c21892_12, callback, callback2, callback3;
|
|
stateFromStores2 = void 0;
|
|
stateFromStores3 = void 0;
|
|
stateFromStores4 = void 0;
|
|
setState2 = void 0;
|
|
lastScrollEventTimestamp = void 0;
|
|
c21892_11 = void 0;
|
|
c21892_12 = void 0;
|
|
callback = void 0;
|
|
callback2 = void 0;
|
|
callback3 = void 0;
|
|
const [endVisible, setState] = useState(false);
|
|
const iCYMIItems = useICYMIItems();
|
|
const { unreadItems, readItems, allUnreadItemsHydrated } = iCYMIItems;
|
|
const stateFromStores = useStateFromStores([ICYMIStore], () => ICYMIStore.getVersion(), []);
|
|
stateFromStores2 = useStateFromStores([ICYMIStore], () => !(ICYMIStore.isFirstPageHydrated() && stateFromStores > 0));
|
|
useEffect(() => {
|
|
if (ICYMIStore.getLoadId() != null) {
|
|
ICYMIAnalytics.trackFeedShown({
|
|
homeSessionId: "gravity"
|
|
});
|
|
}
|
|
}, [stateFromStores]);
|
|
stateFromStores3 = useStateFromStores([ICYMIStore], () => ICYMIStore.isRefreshing(), []);
|
|
stateFromStores4 = useStateFromStores([ICYMIStore], () => ICYMIStore.isHydrating(), []);
|
|
let visibleItemIds;
|
|
[visibleItemIds, setState2] = useState([]);
|
|
const stateFromStoresObject = useStateFromStoresObject([ICYMIStore], () => ({
|
|
loadId: ICYMIStore.getLoadId(),
|
|
lastScrollEventTimestamp: ICYMIStore.lastScrollEvent()
|
|
}));
|
|
const loadId = stateFromStoresObject.loadId;
|
|
lastScrollEventTimestamp = stateFromStoresObject.lastScrollEventTimestamp;
|
|
const r77 = visibleItemIds.filter((visibleItemId) => !NON_ELIGIBLE_SCROLL_ITEMS.has(visibleItemId.item.data.kind)).map((item) => item.item.id).pop();
|
|
c21892_11 = r77;
|
|
const prevValue = usePrevValue(r77);
|
|
c21892_12 = prevValue;
|
|
useEffect(() => {
|
|
if (!stateFromStores3 && !stateFromStores2) {
|
|
if (c21892_12 != null) {
|
|
if (c21892_11 != null && c21892_11 !== c21892_12) {
|
|
const r5 = Date.now();
|
|
if (r5 - lastScrollEventTimestamp > SCROLL_EVENT_THROTTLE_MS) {
|
|
ICYMIActionCreators.gravityScrollEvent(r5);
|
|
ICYMIAnalytics.trackFeedFirstScrollStarted();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}, [stateFromStores3, lastScrollEventTimestamp, prevValue, r77, loadId, stateFromStores2]);
|
|
callback = useCallback(({ viewableItems }) => {
|
|
if (viewableItems.some((viewableItem) => viewableItem.item.data.kind === "end")) {
|
|
setState(true);
|
|
}
|
|
if (viewableItems.length !== 0) {
|
|
setState2(viewableItems);
|
|
const r11 = [];
|
|
const viewableFeedItemsArray = getViewableFeedItemsArray(viewableItems);
|
|
let r34 = Date.now();
|
|
let r0 = viewableFeedItemsArray.length - 1;
|
|
while (0 <= r0) {
|
|
const r18 = viewableFeedItemsArray[r0];
|
|
const r1 = r0;
|
|
const r13 = r34;
|
|
let r37 = r13;
|
|
if (r18 != null) {
|
|
const r14 = {
|
|
id: r18.id,
|
|
type: typeToString(r18),
|
|
timestamp: null
|
|
};
|
|
const timestamp = +r13;
|
|
r37 = timestamp + 1;
|
|
r14.timestamp = timestamp;
|
|
r11.push(r14);
|
|
}
|
|
r0 = r1 - 1;
|
|
r34 = r37;
|
|
}
|
|
if (r11.length > 0) {
|
|
ICYMIActionCreators.ackGravityItems(r11, true);
|
|
}
|
|
ICYMIAnalytics.trackItemShortImpression(viewableItems, viewableFeedItemsArray.map((item) => ({
|
|
id: item.id,
|
|
type: typeToString(item)
|
|
})), stateFromStores);
|
|
}
|
|
}, [stateFromStores, setState]);
|
|
callback2 = useCallback(({ viewableItems }) => {
|
|
if (viewableItems.length !== 0) {
|
|
ICYMIAnalytics.trackItemLongImpression(viewableItems, getViewableFeedItemsArray(viewableItems).map((item) => ({
|
|
id: item.id,
|
|
type: typeToString(item)
|
|
})), stateFromStores);
|
|
ICYMIActionCreators.triggerItemsLongImpression(viewableItems.filter((viewableItem) => !NON_ELIGIBLE_SCROLL_ITEMS.has(viewableItem.item.data.kind)).map(({ item, index }) => {
|
|
const r6 = {
|
|
itemId: item.id,
|
|
itemType: itemToType(item),
|
|
triggerType: "list",
|
|
itemFeedIndex: index,
|
|
itemScore: null,
|
|
itemChannelType: null,
|
|
isInitiallyVisible: false
|
|
};
|
|
let score = item.score;
|
|
if (score == null) {
|
|
score = null;
|
|
}
|
|
r6.itemScore = score;
|
|
let channelType = item.channelType;
|
|
if (channelType == null) {
|
|
channelType = null;
|
|
}
|
|
r6.itemChannelType = channelType;
|
|
return r6;
|
|
}));
|
|
}
|
|
}, [stateFromStores]);
|
|
callback3 = useCallback((a0) => {
|
|
ICYMIActionCreators.startItemsDwell(a0.viewableItems.filter((viewableItem) => !NON_ELIGIBLE_SCROLL_ITEMS.has(viewableItem.item.data.kind)).map(({ item, index }) => {
|
|
const r6 = {
|
|
itemId: item.id,
|
|
itemType: itemToType(item),
|
|
triggerType: "list",
|
|
itemFeedIndex: index,
|
|
itemScore: null,
|
|
itemChannelType: null,
|
|
isInitiallyVisible: false
|
|
};
|
|
let score = item.score;
|
|
if (score == null) {
|
|
score = null;
|
|
}
|
|
r6.itemScore = score;
|
|
let channelType = item.channelType;
|
|
if (channelType == null) {
|
|
channelType = null;
|
|
}
|
|
r6.itemChannelType = channelType;
|
|
return r6;
|
|
}));
|
|
}, []);
|
|
const memo = useMemo(() => [{
|
|
viewabilityConfig: {
|
|
waitForInteraction: false,
|
|
viewAreaCoveragePercentThreshold: 100,
|
|
minimumViewTime: 50
|
|
},
|
|
onViewableItemsChanged: callback
|
|
}, {
|
|
viewabilityConfig: {
|
|
waitForInteraction: false,
|
|
viewAreaCoveragePercentThreshold: 50,
|
|
minimumViewTime: 1000
|
|
},
|
|
onViewableItemsChanged: callback2
|
|
}, {
|
|
viewabilityConfig: {
|
|
waitForInteraction: false,
|
|
viewAreaCoveragePercentThreshold: 50,
|
|
minimumViewTime: 50
|
|
},
|
|
onViewableItemsChanged: callback3
|
|
}], [callback, callback2, callback3]);
|
|
useEffect(() => {
|
|
ICYMIActionCreators.openICYMITab();
|
|
}, []);
|
|
const iCYMIReloadHandler = useICYMIReloadHandler(showDot);
|
|
const memo2 = useMemo(() => {
|
|
const data = [];
|
|
let c28006_0 = data;
|
|
if ((stateFromStores2 ? notificationItem != null : stateFromStores2) && notificationItem.type === ICYMIItemTypes.CUSTOM_STATUS) {
|
|
data.push({
|
|
id: notificationItem.id,
|
|
timestamp: Date.now(),
|
|
data: {
|
|
kind: "contentInventory",
|
|
content: customStatusToContentInventoryEntry(notificationItem).activity
|
|
},
|
|
score: notificationItem.score,
|
|
unread: true
|
|
});
|
|
}
|
|
if (stateFromStores2) {
|
|
data.push({
|
|
id: "loading",
|
|
timestamp: 0,
|
|
unread: false,
|
|
data: {
|
|
kind: "loading"
|
|
}
|
|
});
|
|
} else {
|
|
unreadItems.forEach((unreadItem) => {
|
|
if (!isItemNSFW(unreadItem)) {
|
|
c28006_0.push(unreadItem);
|
|
}
|
|
});
|
|
if (allUnreadItemsHydrated) {
|
|
data.push({
|
|
id: "end",
|
|
timestamp: 0,
|
|
unread: false,
|
|
data: {
|
|
kind: "end"
|
|
}
|
|
});
|
|
}
|
|
if (readItems.length > 0) {
|
|
readItems.forEach((readItem) => {
|
|
if (!isItemNSFW(readItem)) {
|
|
c28006_0.push(readItem);
|
|
}
|
|
});
|
|
}
|
|
if (stateFromStores4) {
|
|
data.push({
|
|
id: "bottomLoading",
|
|
timestamp: 0,
|
|
unread: false,
|
|
data: {
|
|
kind: "bottomLoading"
|
|
}
|
|
});
|
|
}
|
|
}
|
|
return {
|
|
data,
|
|
stickyHeaderIndices: []
|
|
};
|
|
}, [stateFromStores2, notificationItem, unreadItems, allUnreadItemsHydrated, readItems, stateFromStores4]);
|
|
return {
|
|
data: memo2.data,
|
|
loading: stateFromStores2,
|
|
version: stateFromStores,
|
|
visibleItemIds,
|
|
endVisible,
|
|
isRefreshing: stateFromStores3,
|
|
handleOnRefresh: iCYMIReloadHandler,
|
|
stickyHeaderIndices: memo2.stickyHeaderIndices,
|
|
viewabilityConfigCallbackPairs: memo
|
|
};
|
|
}
|