Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

AboutPageContent.js 3.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import React, { useEffect, useRef } from "react";
  2. import PropTypes from "prop-types";
  3. import { useLocation } from "react-router-dom";
  4. import { useDispatch, useSelector } from "react-redux";
  5. import { selectAboutRouteSelected } from "../../store/selectors/appSelectors";
  6. import scrollConstants from "../../constants/scrollConstants";
  7. import { setAboutRouteSelected } from "../../store/actions/app/appActions";
  8. import { AboutPageContainer } from "./AboutPageContent.styled";
  9. import AboutComponent from "./AboutComponent";
  10. import PricesComponent from "../Prices/PricesComponent";
  11. import PrivacyPolicyComponent from "../PrivacyPolicy/PrivacyPolicyComponent";
  12. import AboutFooter from "../Footer/AboutFooter";
  13. const AboutPageContent = () => {
  14. const aboutRef = useRef(null);
  15. const pricesRef = useRef(null);
  16. const privacyPolicyRef = useRef(null);
  17. const dispatch = useDispatch();
  18. const aboutRouteSelected = useSelector(selectAboutRouteSelected);
  19. const location = useLocation();
  20. useEffect(() => {
  21. if (location.state && location.state?.clicked) {
  22. if (location.state.navigation === scrollConstants.about.aboutPage) {
  23. window.scrollTo({ top: 0, behavior: "smooth" });
  24. if (aboutRouteSelected !== scrollConstants.about.aboutPage) {
  25. dispatch(setAboutRouteSelected(scrollConstants.about.aboutPage));
  26. }
  27. }
  28. if (location.state.navigation === scrollConstants.about.pricesPage) {
  29. const yAxis = pricesRef.current.offsetTop;
  30. window.scrollTo({ top: yAxis, behavior: "smooth" });
  31. if (aboutRouteSelected !== scrollConstants.about.pricesPage) {
  32. dispatch(setAboutRouteSelected(scrollConstants.about.pricesPage));
  33. }
  34. }
  35. if (
  36. location.state.navigation === scrollConstants.about.privacyPolicyPage
  37. ) {
  38. const yAxis = privacyPolicyRef.current.offsetTop - 64;
  39. window.scrollTo({ top: yAxis, behavior: "smooth" });
  40. if (aboutRouteSelected !== scrollConstants.about.privacyPolicyPage) {
  41. dispatch(
  42. setAboutRouteSelected(scrollConstants.about.privacyPolicyPage)
  43. );
  44. }
  45. }
  46. location.state = {};
  47. }
  48. }, [location]);
  49. useEffect(() => {
  50. const listener = () => {
  51. if (
  52. window.scrollY >
  53. pricesRef.current.offsetTop - window.innerHeight / 2
  54. ) {
  55. if (
  56. window.scrollY >
  57. privacyPolicyRef.current.offsetTop - window.innerHeight / 2
  58. ) {
  59. if (aboutRouteSelected !== scrollConstants.about.privacyPolicyPage) {
  60. dispatch(
  61. setAboutRouteSelected(scrollConstants.about.privacyPolicyPage)
  62. );
  63. }
  64. } else if (aboutRouteSelected !== scrollConstants.about.pricesPage) {
  65. dispatch(setAboutRouteSelected(scrollConstants.about.pricesPage));
  66. }
  67. } else {
  68. if (aboutRouteSelected !== scrollConstants.about.aboutPage) {
  69. dispatch(setAboutRouteSelected(scrollConstants.about.aboutPage));
  70. }
  71. }
  72. };
  73. window.addEventListener("scroll", listener);
  74. return () => window.removeEventListener("scroll", listener);
  75. }, [aboutRouteSelected]);
  76. return (
  77. <AboutPageContainer>
  78. <AboutComponent ref={aboutRef} id={scrollConstants.about.aboutPage} />
  79. <PricesComponent ref={pricesRef} id={scrollConstants.about.pricesPage} />
  80. <PrivacyPolicyComponent
  81. ref={privacyPolicyRef}
  82. id={scrollConstants.about.privacyPolicyPage}
  83. />
  84. <AboutFooter />
  85. </AboutPageContainer>
  86. );
  87. };
  88. AboutPageContent.propTypes = {
  89. children: PropTypes.node,
  90. };
  91. export default AboutPageContent;