Files
discord-decomp/modules/wishlists/hooks/useWishlistHooks.tsx
T
2026-11-01 12:12:55 +02:00

198 lines
8.9 KiB
TypeScript

// Metro module 8673 (f8674).
import { useMemo, useEffect } from "react";
import UserProfileStore from "../../user_profile/UserProfileStore";
import AuthenticationStore from "../../../stores/AuthenticationStore";
import UserStore from "../../../stores/UserStore";
import WishlistStore from "../WishlistStore";
import { getWishlistSkuIds } from "../records/WishlistRecord";
import { useStateFromStoresArray, useStateFromStores, useStateFromStoresObject } from "../../../_bundle/Module589";
import WishlistActionCreators from "../WishlistActionCreators";
import { uniq } from "../../../_bundle/Module12";
import { useGetOrFetchStorefrontPricesForSkuIds } from "../../storefront/hooks/useGetOrFetchStorefrontPrices";
import maybeFetchUserProfile from "../../user_profile/maybeFetchUserProfile";
import useDisplayProfileSocialLayerStorefrontApplicationIds from "../../slayer_storefront/hooks/useDisplayProfileSocialLayerStorefrontApplicationIds";
import { useWishlistGiftableItems } from "./useWishlistGiftableItems.native";
function $mk81116($env) {
return () => $env.$parent[8].getUser($env[0]);
}
function $mk81117($env) {
return () => {
const r5 = $env[0];
return {
userProfile: r5 != null ? $env.$parent[6].getUserProfile(r5) : null,
wishlistId: r5 != null ? $env.$parent[6].getFirstWishlistId(r5) : null
};
};
}
function $mk81118($env) {
return () => {
const r4 = $env;
if (r4[0] != null && r4[2] == null && r4[1] != null && r4[2] == null) {
const r11 = $env.$parent;
const r15 = (0, r11[1])(r11[2][11]);
const r7 = r4[1];
r15(r7.id, r7.getAvatarURL(null, 80));
}
};
}
let useFetchWishlist, c5648_11;
let env5648 = {};
const getUserWishlistKey = function getUserWishlistKey(a0, a1) {
return a1 != null ? `${a0}:${a1}` : `${a0}:default`;
};
useFetchWishlist = function useFetchWishlist({ wishlistId, userId, source = c5648_11.USER_PROFILE }) {
let c16707_3, c16707_4, c16707_5, stateFromStores;
const USER_PROFILE = source;
c16707_3 = void 0;
c16707_4 = void 0;
c16707_5 = void 0;
stateFromStores = void 0;
const [wishlist, r26, error, r28] = useStateFromStoresArray([WishlistStore], () => wishlistId == null ? [null, "success", void 0, void 0] : [WishlistStore.getWishlist(wishlistId), WishlistStore.getStatus(wishlistId), WishlistStore.getError(wishlistId), WishlistStore.getUpdatedAt(wishlistId)]);
c16707_3 = wishlist;
c16707_4 = error;
c16707_5 = r28;
useGetOrFetchStorefrontPricesForSkuIds({
skuIds: useMemo(() => c16707_3 == null ? [] : uniq((0, getWishlistSkuIds)(c16707_3)), [wishlist])
});
stateFromStores = useStateFromStores([UserProfileStore], () => {
if (wishlistId != null && userId != null) {
return UserProfileStore.getWishlistSettings(userId, wishlistId)?.updated_at;
}
});
(0, useEffect)(() => {
if (!(wishlistId == null || WishlistStore.isFetching(wishlistId) || c16707_4 != null) && (c16707_3 == null || stateFromStores != null && c16707_5 !== stateFromStores)) {
WishlistActionCreators.fetchWishlist(wishlistId, stateFromStores, USER_PROFILE);
}
}, [wishlistId, USER_PROFILE, wishlist, stateFromStores, r28, error]);
return {
wishlist,
isFetching: r26 === "fetching",
wasFetched: r26 === "success" || r26 === "error",
error
};
};
const r34 = {
WISHLIST: "wishlist",
POPULAR: "popular"
};
c5648_11 = {
USER_PROFILE: "user_profile"
};
export const WISHLIST_IN_DM_LENGTH = 5;
export const WISHLIST_IN_DM_LENGTH_MOBILE = 6;
export const WISHLIST_TOOLTIP_DELAY_MS = 350;
export { r34 as WishlistItemSource };
export { c5648_11 as WishlistFetchSource };
export function useFetchWishlists({ wishlistIdsAndUsers, source = c5648_11.USER_PROFILE }) {
let stateFromStoresArray, memo;
const USER_PROFILE2 = source;
stateFromStoresArray = void 0;
memo = void 0;
const stateFromStoresArray2 = useStateFromStoresArray([WishlistStore], () => wishlistIdsAndUsers.map(({ wishlistId: wishlistId2 }) => wishlistId2 != null ? WishlistStore.getWishlist(wishlistId2) : null), [wishlistIdsAndUsers]);
const stateFromStores2 = useStateFromStores([WishlistStore], () => wishlistIdsAndUsers.some(({ wishlistId: wishlistId2 }) => wishlistId2 != null && WishlistStore.isFetching(wishlistId2)), [wishlistIdsAndUsers]);
const stateFromStoresArray3 = useStateFromStoresArray([WishlistStore], () => wishlistIdsAndUsers.map(({ wishlistId: wishlistId2 }) => wishlistId2 != null ? WishlistStore.getError(wishlistId2) : void 0), [wishlistIdsAndUsers]);
stateFromStoresArray = useStateFromStoresArray([UserProfileStore], () => wishlistIdsAndUsers.map(({ wishlistId: wishlistId2, userId: userId2 }) => wishlistId2 != null ? UserProfileStore.getWishlistSettings(userId2, wishlistId2)?.updated_at : void 0));
memo = useMemo(() => {
const r0 = {};
let c26259_0 = r0;
wishlistIdsAndUsers.forEach(({ userId: userId2, wishlistId: wishlistId2 }, index) => {
if (!(index >= stateFromStoresArray.length)) {
c26259_0[wishlistId2 != null ? `${userId2}:${wishlistId2}` : `${userId2}:default`] = stateFromStoresArray[index];
}
});
return r0;
}, [wishlistIdsAndUsers, stateFromStoresArray]);
(0, useEffect)(() => {
for (const wishlistIdsAndUser of wishlistIdsAndUsers) {
const { wishlistId: wishlistId2, userId: userId2 } = wishlistIdsAndUser;
if (wishlistId2 != null) {
if (!WishlistStore.isFetching(wishlistId2) && WishlistStore.getError(wishlistId2) == null) {
const wishlist = WishlistStore.getWishlist(wishlistId2);
const updatedAt = WishlistStore.getUpdatedAt(wishlistId2);
const r48 = memo[getUserWishlistKey(userId2, wishlistId2)];
if (wishlist == null || r48 != null && updatedAt !== r48) {
WishlistActionCreators.fetchWishlist(wishlistId2, r48, USER_PROFILE2);
}
}
}
}
}, [wishlistIdsAndUsers, USER_PROFILE2, memo]);
return {
wishlists: stateFromStoresArray2,
isFetching: stateFromStores2,
errors: stateFromStoresArray3
};
}
export { useFetchWishlist };
export function useIsSkuInWishlist(c16710_0, c16710_1) {
return useStateFromStores([WishlistStore], () => c16710_0 != null && WishlistStore.hasSkuId(c16710_0, c16710_1));
}
export function useShouldShowWishlistInDMGifting({ isGift, giftRecipient, isSocialLayerStorefrontEnabled = true }) {
let c16711_3, wishlistGiftableItems;
let c16711_2 = isSocialLayerStorefrontEnabled;
c16711_3 = void 0;
wishlistGiftableItems = void 0;
useEffect(() => {
if (giftRecipient?.id != null) {
maybeFetchUserProfile(giftRecipient.id);
}
}, [giftRecipient?.id]);
const displayProfileSocialLayerStorefrontApplicationIds = useDisplayProfileSocialLayerStorefrontApplicationIds({
userId: giftRecipient?.id
});
c16711_3 = displayProfileSocialLayerStorefrontApplicationIds;
const stateFromStores2 = useStateFromStores([UserProfileStore], () => giftRecipient?.id == null ? null : UserProfileStore.getFirstWishlistId(giftRecipient.id));
wishlistGiftableItems = useWishlistGiftableItems(useFetchWishlist({
wishlistId: stateFromStores2 != null ? isGift ? giftRecipient != null ? stateFromStores2 : null : null : null,
userId: giftRecipient?.id
}).wishlist);
return useMemo(() => isGift === true && giftRecipient != null && (wishlistGiftableItems.length > 0 || c16711_2 && c16711_3.length > 0), [isGift, giftRecipient, wishlistGiftableItems, displayProfileSocialLayerStorefrontApplicationIds, isSocialLayerStorefrontEnabled]);
}
export function useCurrentUserWishlist() {
let env16712;
const stateFromStores2 = useStateFromStores([AuthenticationStore], () => AuthenticationStore.getId());
const r16 = env16712 = {
$parent: env5648
};
env16712[0] = stateFromStores2;
env16712[1] = void 0;
env16712[2] = void 0;
const stateFromStores3 = useStateFromStores([UserStore], $mk81116(r16));
env16712[1] = stateFromStores3;
const stateFromStoresObject = useStateFromStoresObject([UserProfileStore], $mk81117(r16), [stateFromStores2]);
const userProfile = stateFromStoresObject.userProfile;
env16712[2] = userProfile;
const wishlistId2 = stateFromStoresObject.wishlistId;
useEffect($mk81118(r16), [stateFromStores3, stateFromStores2, userProfile]);
return {
...useFetchWishlist({
wishlistId: wishlistId2,
userId: stateFromStores2
}),
wishlistId: wishlistId2,
userProfile
};
}
export function useFetchWishlistAndProfileInfoForUser(a0) {
let env16708;
const r1 = env16708 = {
$parent: env5648
};
env16708[0] = a0;
const stateFromStores2 = useStateFromStores([UserStore], $mk81116(r1));
env16708[1] = stateFromStores2;
const stateFromStoresObject = useStateFromStoresObject([UserProfileStore], $mk81117(r1), [a0]);
const userProfile = stateFromStoresObject.userProfile;
env16708[2] = userProfile;
const wishlistId2 = stateFromStoresObject.wishlistId;
useEffect($mk81118(r1), [stateFromStores2, a0, userProfile]);
return {
...useFetchWishlist({
wishlistId: wishlistId2,
userId: a0
}),
wishlistId: wishlistId2,
userProfile
};
}