UNPKG

@xo-union/tk-component-header-nav

Version:
53 lines 2.23 kB
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 }; };