// Metro module 9749 (f9750). import _slicedToArray from "../../../_bundle/_slicedToArray"; import { useMemo, useEffect } from "react"; import UserProfileStore from "../../user_profile/UserProfileStore"; import AuthenticationStore from "../../../stores/AuthenticationStore"; import WishlistRecommendationsStore from "../WishlistRecommendationsStore"; import WishlistRecommendationRecord, { WishlistRecommendationReason } from "../records/WishlistRecommendationRecord"; import Durations from "../../../utils/Durations"; import { useStateFromStores, useStateFromStoresObject, useStateFromStoresArray } from "../../../_bundle/Module589"; import { WishlistFetchSource, useFetchWishlists } from "./useWishlistHooks"; import { isNotNullish } from "../../../utils/GlobalUtils"; import WishlistActionCreators from "../WishlistActionCreators"; import { uniq } from "../../../_bundle/Module12"; import { useGetOrFetchStorefrontPricesForSkuIds } from "../../storefront/hooks/useGetOrFetchStorefrontPrices"; import maybeFetchUserProfile from "../../user_profile/maybeFetchUserProfile"; import { useWishlistApplicationIds } from "./useWishlistApplicationIds.native"; import { useWishlistSkuFilter } from "./useWishlistSkuFilter.native"; function $mk83234($env) { return () => { const r1 = $env.$parent; (0, r1[1])(r1[2][13])($env[0]); }; } function $mk83235($env) { return () => ({ defaultWishlistId: $env.$parent[5].getFirstWishlistId($env[0]) }); } function $mk83236($env) { return () => { const r0 = $env; return [{ userId: r0[0], wishlistId: r0[1] }]; }; } let c6459_9, c6459_10; let env6459 = {}; const useWishlistRecommendationsWithWishlists = function useWishlistRecommendationsWithWishlists({ userIdsAndWishlistIds, numItems: numItems4, applicationIds: applicationIds3, source = WishlistFetchSource.USER_PROFILE, filterByApplicationIds = false }) { let c17452_1, memo, memo2, memo3, isFetching, errors, filteredRecommendations, skusToUserAndReasonRecommendations, combinedSkus; let numItems, applicationIds; c17452_1 = void 0; memo = void 0; memo2 = void 0; memo3 = void 0; isFetching = void 0; errors = void 0; filteredRecommendations = void 0; skusToUserAndReasonRecommendations = void 0; combinedSkus = void 0; const memo4 = useMemo(() => userIdsAndWishlistIds.map((userIdsAndWishlistId) => userIdsAndWishlistId.userId), [userIdsAndWishlistIds]); numItems = numItems4; applicationIds = applicationIds3; const stateFromStores2 = useStateFromStores([WishlistRecommendationsStore], () => WishlistRecommendationsStore.getRecommendations(memo4, applicationIds)); useEffect(() => { if (memo4.length !== 0 && applicationIds.length !== 0) { const recommendations2 = WishlistRecommendationsStore.getRecommendations(memo4, applicationIds); if (recommendations2 != null) { if (recommendations2.state === "loading") { return void 0; } const r2 = recommendations2.fetchedAt < Date.now() - c6459_9; const r24 = recommendations2.state === "success" && recommendations2.data.skus.length >= numItems; if (!r2 && r24) { return void 0; } } WishlistActionCreators.fetchWishlistRecommendations(applicationIds, memo4, numItems); } }, [memo4, applicationIds, numItems]); const r37 = memo4.length !== 0 ? applicationIds.length === 0 ? c6459_10 : stateFromStores2 : c6459_10; c17452_1 = r37; const r38 = filterByApplicationIds ? applicationIds : void 0; let wishlists, memo5, memo6; const applicationIds2 = r38; const stateFromStores = useStateFromStores([AuthenticationStore], () => AuthenticationStore.getId()); const fetchWishlists = useFetchWishlists({ wishlistIdsAndUsers: userIdsAndWishlistIds, source }); wishlists = fetchWishlists.wishlists; const { isFetching: isFetching2, errors: errors2 } = fetchWishlists; memo5 = useMemo(() => { const r32 = wishlists.filter(isNotNullish); const r33 = {}; for (const item of r32) { for (const item2 of item.items) { if (!(item2.sku == null || item2.isOwned || applicationIds2 != null && !applicationIds2.includes(item2.sku.applicationId))) { const skuId = item2.skuId; const r60 = { ...r33[item2.skuId] != null ? r33[item2.skuId] : {} }; r60[item.userId] = WishlistRecommendationReason.WISHLIST; r33[skuId] = r60; } } } return r33; }, [wishlists, applicationIds2]); memo6 = useMemo(() => Object.fromEntries(wishlists.filter(isNotNullish).flatMap((item) => item.items).filter((item) => item != null && item.sku != null && !item.isOwned && (applicationIds2 == null || applicationIds2.includes(item.sku.applicationId))).map((item) => [item.skuId, item.sku])), [wishlists, applicationIds2]); memo = useMemo(() => Object.keys(memo6).sort((a, b) => { let r5 = memo5[b]; if (r5 == null) { r5 = {}; } let r6 = memo5[a]; if (r6 == null) { r6 = {}; } const r17 = Object.keys(r5).length - Object.keys(r6).length; const r18 = r6; if (r17 !== 0) { return r17; } const r23 = Boolean(r5[stateFromStores]); return Number(Boolean(r18[stateFromStores])) - Number(r23); }).map((item) => memo6[item]), [stateFromStores, memo6, memo5]); memo2 = memo6; memo3 = memo5; isFetching = isFetching2; errors = errors2; const memo8 = useMemo(() => c17452_1 != null && c17452_1.state === "success" ? { filteredRecommendations: c17452_1.data.skus.filter((sku) => !(sku.id in memo2)), skusToUserAndReasonRecommendations: c17452_1.data.skusToUserAndReason } : { filteredRecommendations: [], skusToUserAndReasonRecommendations: {} }, [r37, memo6]); filteredRecommendations = memo8.filteredRecommendations; skusToUserAndReasonRecommendations = memo8.skusToUserAndReasonRecommendations; const memo9 = useMemo(() => { const combinedSkusToUserAndReason = { ...skusToUserAndReasonRecommendations }; for (const item of Object.entries(memo3)) { const r33 = _slicedToArray(item, 2); const r34 = r33[0]; combinedSkusToUserAndReason[r34] = { ...combinedSkusToUserAndReason[r34], ...r33[1] }; } return { combinedSkus: [...memo, ...filteredRecommendations], combinedSkusToUserAndReason }; }, [memo, filteredRecommendations, memo5, skusToUserAndReasonRecommendations]); combinedSkus = memo9.combinedSkus; const combinedSkusToUserAndReason = memo9.combinedSkusToUserAndReason; const memo10 = useMemo(() => { let r3; L8: { r3 = "loading"; if (!isFetching) { const r2 = c17452_1 == null; r3 = "loading"; if (!r2) { if (c17452_1 != null) { const state = c17452_1.state; r3 = "loading"; if (state === "loading") { break L8; } } r3 = errors.filter(isNotNullish).length > 0 ? "error" : c17452_1.state === "error" ? "error" : "success"; } } } return r3; }, [isFetching, r37, errors]); useGetOrFetchStorefrontPricesForSkuIds({ skuIds: useMemo(() => uniq([...filteredRecommendations.map((filteredRecommendation) => filteredRecommendation.id), ...combinedSkus.map((combinedSku) => combinedSku.id)]), [filteredRecommendations, combinedSkus]) }); return { recommendations: filteredRecommendations, wishlistAndRecommendations: combinedSkus, skusToUserAndReason: combinedSkusToUserAndReason, status: memo10 }; }; c6459_9 = 30 * Durations.Millis.MINUTE; c6459_10 = { state: "success", data: new WishlistRecommendationRecord({ skus: [], skus_to_user_and_reason: {}, applications: [] }), fetchedAt: 0 }; export function useWishlistRecommendationsForSingleUser({ userId, numItems: numItems4, source = WishlistFetchSource.USER_PROFILE }) { let env17455; const r6 = env17455 = { $parent: env6459 }; env17455[0] = userId; useEffect($mk83234(r6), [userId]); const defaultWishlistId = useStateFromStoresObject([UserProfileStore], $mk83235(r6)).defaultWishlistId; env17455[1] = defaultWishlistId; const wishlistRecommendationsWithWishlists = useWishlistRecommendationsWithWishlists({ userIdsAndWishlistIds: useMemo($mk83236(r6), [userId, defaultWishlistId]), applicationIds: useWishlistApplicationIds(userId), numItems: numItems4, source }); const { wishlistAndRecommendations: wishlistAndRecommendations2, skusToUserAndReason, status } = wishlistRecommendationsWithWishlists; const wishlistSkuFilter = useWishlistSkuFilter({ wishlistAndRecommendations: wishlistAndRecommendations2, skusToUserAndReason, userId, numItems: numItems4 }); return { wishlistAndRecommendations: wishlistSkuFilter.slicedWishlistAndRecommendations, skusToUserAndReason, status, defaultWishlistId, totalUnownedWishlistItemCount: wishlistSkuFilter.totalUnownedWishlistItemCount }; } export function useRecommendationsForApplicationIds({ applicationIds: applicationIds3, userIds, numItems: numItems2, source = WishlistFetchSource.USER_PROFILE }) { let wishlistAndRecommendations; let stateFromStoresArray; wishlistAndRecommendations = void 0; const memo7 = useMemo(() => userIds == null ? void 0 : userIds.slice(0, 5), [userIds]); stateFromStoresArray = void 0; useEffect(() => { memo7.forEach((item) => { maybeFetchUserProfile(item); }); }, [memo7]); stateFromStoresArray = useStateFromStoresArray([UserProfileStore], () => memo7.map((item) => { let r5 = UserProfileStore.getFirstWishlistId(item); if (r5 == null) { r5 = null; } return r5; })); const r39 = useWishlistRecommendationsWithWishlists({ userIdsAndWishlistIds: useMemo(() => memo7.map((item, index) => ({ userId: item, wishlistId: stateFromStoresArray[index] })), [memo7, stateFromStoresArray]), applicationIds: applicationIds3, numItems: numItems2, source, filterByApplicationIds: true }); wishlistAndRecommendations = r39.wishlistAndRecommendations; const { skusToUserAndReason, status } = r39; return { recommendations: useMemo(() => wishlistAndRecommendations.slice(0, numItems2), [wishlistAndRecommendations, numItems2]), skusToUserAndReason, status }; } export function useRecommendationsForSingleUser({ userId, numItems: numItems3, source = WishlistFetchSource.USER_PROFILE }) { let env17459; const r11 = env17459 = { $parent: env6459 }; env17459[0] = userId; env17459[1] = void 0; useEffect($mk83234(r11), [userId]); const defaultWishlistId = useStateFromStoresObject([UserProfileStore], $mk83235(r11)).defaultWishlistId; env17459[1] = defaultWishlistId; const r39 = useWishlistRecommendationsWithWishlists({ userIdsAndWishlistIds: useMemo($mk83236(r11), [userId, defaultWishlistId]), applicationIds: useWishlistApplicationIds(userId), numItems: numItems3, source }); const { recommendations, skusToUserAndReason, status } = r39; return { recommendations: useMemo(() => recommendations.slice(0, numItems3), [recommendations, numItems3]), skusToUserAndReason, status }; }