281 lines
11 KiB
TypeScript
281 lines
11 KiB
TypeScript
// 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
|
|
};
|
|
}
|