// 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 }; }