@xo-union/tk-component-header-nav
Version:
53 lines • 2.23 kB
JavaScript
import { useMemo } from "react";
import { useIsControlled, useConstant, useUnstableReference } from "@tkww/orion-web-lib-react";
import { useLocation } from "./useLocation.js";
import { getDefaultFavoritesConfig } from "./getDefaultFavoritesConfig.js";
import useMembershipData from "./useMembershipData.js";
import useRewardsBarVisibility from "./useRewardsBarVisibility.js";
import generateHeaderLinks from "../../utils/generateHeaderLinks/index.js";
export const useDefaultProps = props => {
var _membership$data;
/* eslint-disable react-hooks/rules-of-hooks */
const membershipIsControlled = useIsControlled(props.membership);
const showRewardsBarIsControlled = useIsControlled(props.showRewardsBar);
const locationIsControlled = useIsControlled(props.location);
const favoritesIsControlled = useIsControlled(props.favorites);
const firstFavoritesValue = useConstant(() => props.favorites);
const {
loggedIn,
activeProduct
} = props;
const location = useUnstableReference(locationIsControlled ? props.location : useLocation());
const membership = membershipIsControlled ? props.membership : useMembershipData(loggedIn);
const showRewardsBar = showRewardsBarIsControlled ? props.showRewardsBar : useRewardsBarVisibility({
member: ((_membership$data = membership.data) === null || _membership$data === void 0 ? void 0 : _membership$data.member) || null,
location
});
const stableLinks = useUnstableReference(props.links ?? {});
const links = useMemo(() => {
const defaultLinks = generateHeaderLinks(props.knotHostEnv);
return {
...defaultLinks,
...stableLinks
};
}, [props.knotHostEnv, stableLinks]);
const defaultFavoritesConfig = getDefaultFavoritesConfig({
activeProduct,
links,
location,
explicitlyOptedIn: favoritesIsControlled && !!firstFavoritesValue
});
const favorites =
// eslint-disable-next-line no-nested-ternary
!favoritesIsControlled || props.favorites === true ? defaultFavoritesConfig : typeof props.favorites === 'object' && props.favorites !== null ? {
...defaultFavoritesConfig,
...props.favorites
} : false;
return {
...props,
membership,
showRewardsBar,
links,
favorites
};
};