PagePathNavTitle.tsx 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import { type JSX, useState } from 'react';
  2. import dynamic from 'next/dynamic';
  3. import withLoadingProps from 'next-dynamic-loading-props';
  4. import { useIsomorphicLayoutEffect } from 'usehooks-ts';
  5. import type { PagePathNavLayoutProps } from '../PagePathNav';
  6. import { PagePathNav } from '../PagePathNav';
  7. const PagePathNavSticky = withLoadingProps<PagePathNavLayoutProps>(
  8. (useLoadingProps) =>
  9. dynamic(
  10. () =>
  11. // biome-ignore lint/style/noRestrictedImports: no-problem dynamic import
  12. import('~/client/components/PagePathNavSticky').then(
  13. (mod) => mod.PagePathNavSticky,
  14. ),
  15. {
  16. ssr: false,
  17. loading: () => {
  18. const props = useLoadingProps();
  19. return <PagePathNav {...props} />;
  20. },
  21. },
  22. ),
  23. );
  24. /**
  25. * Switch PagePathNav and PagePathNavSticky
  26. * @returns
  27. */
  28. export const PagePathNavTitle = (
  29. props: PagePathNavLayoutProps,
  30. ): JSX.Element => {
  31. const [isClient, setClient] = useState(false);
  32. useIsomorphicLayoutEffect(() => {
  33. setClient(true);
  34. }, []);
  35. return isClient ? (
  36. <PagePathNavSticky {...props} latterLinkClassName="fs-2" />
  37. ) : (
  38. <PagePathNav {...props} latterLinkClassName="fs-2" />
  39. );
  40. };