Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

Header.js 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. import React, { useMemo } from "react";
  2. import PropTypes from "prop-types";
  3. import {
  4. CategoryIcon,
  5. HeaderContainer,
  6. HeaderOptions,
  7. HeaderWrapperContainer,
  8. LocationIcon,
  9. PageTitleContainer,
  10. SubcategoryIcon,
  11. SwapsHeaderIcon,
  12. SwapsIcon,
  13. SwapsTitle,
  14. UserIcon,
  15. } from "./Header.styled";
  16. import { sortEnum } from "../../../enums/sortEnum";
  17. import { useTranslation } from "react-i18next";
  18. import SkeletonHeader from "./SkeletonHeader/SkeletonHeader";
  19. import useIsMobile from "../../../hooks/useIsMobile";
  20. // import { ArrowButton } from "../../Buttons/ArrowButton/ArrowButton";
  21. import TooltipHeader from "./TooltipHeader/TooltipHeader";
  22. import GridButtons from "./GridButtons/GridButtons";
  23. import HeaderSelect from "./HeaderSelect/HeaderSelect";
  24. const Header = (props) => {
  25. const { t } = useTranslation();
  26. const sorting = props?.sorting;
  27. const { isMobile } = useIsMobile();
  28. // Changing header string on refresh or on load
  29. const altString = useMemo(() => {
  30. if (!props?.users) {
  31. if (sorting?.selectedSortOption === sortEnum.OLD) {
  32. return `: ${t("header.oldOffers")}`;
  33. }
  34. if (sorting?.selectedSortOption === sortEnum.POPULAR) {
  35. return `: ${t("header.popularOffers")}`;
  36. }
  37. }
  38. return `: ${t("header.newOffers")}`;
  39. }, [sorting?.selectedSortOption]);
  40. const headerTitle = useMemo(() => {
  41. return props.users
  42. ? t("admin.users.headerTitle")
  43. : props.categories
  44. ? t("admin.categories.headerTitle")
  45. : props.subcategories
  46. ? t("admin.subcategories.subcategoriesHeaderTitle")
  47. : props.category
  48. ? t("admin.subcategories.headerTitle")
  49. : props.location
  50. ? t("admin.locations.headerTitle")
  51. : !isMobile
  52. ? t("header.myOffers")
  53. : props.myOffers
  54. ? t("header.myOffers")
  55. : t("offer.offers");
  56. }, [props, t, isMobile]);
  57. const headerIcon = useMemo(() => {
  58. return props.users ? (
  59. <UserIcon />
  60. ) : props.categories || props.category ? (
  61. <CategoryIcon />
  62. ) : props.subcategories ? (
  63. <SubcategoryIcon />
  64. ) : props.location ? (
  65. <LocationIcon />
  66. ) : isMobile ? (
  67. <SwapsIcon />
  68. ) : (
  69. <SwapsHeaderIcon />
  70. );
  71. });
  72. return (
  73. <>
  74. {props?.skeleton && (
  75. <SkeletonHeader skeleton={props?.skeleton} myOffers={props?.myOffers} />
  76. )}
  77. <HeaderWrapperContainer
  78. className={props.className}
  79. skeleton={props?.skeleton}
  80. isAdmin={props?.isAdmin}
  81. >
  82. <HeaderContainer>
  83. {/* Setting appropriate header title if page is market place or my offers */}
  84. <TooltipHeader
  85. altText={altString}
  86. headerTitle={headerTitle}
  87. headerIcon={headerIcon}
  88. offers={props?.offers}
  89. myOffers={props?.myOffers}
  90. hideBackButton={props?.hideBackButton}
  91. />
  92. {/* ^^^^^^ */}
  93. <HeaderOptions>
  94. <GridButtons
  95. hideGrid={props?.hideGrid}
  96. isGrid={props?.isGrid}
  97. setIsGrid={props?.setIsGrid}
  98. />
  99. {/* Select option to choose sorting */}
  100. {!props?.hideSorting && (
  101. <HeaderSelect
  102. myOffers={props?.myOffers}
  103. sorting={sorting}
  104. hideSorting={props?.hideSorting}
  105. />
  106. )}
  107. {/* ^^^^^^ */}
  108. </HeaderOptions>
  109. </HeaderContainer>
  110. {isMobile && (
  111. <PageTitleContainer>
  112. {headerIcon}
  113. <SwapsTitle>{headerTitle}</SwapsTitle>
  114. </PageTitleContainer>
  115. )}
  116. </HeaderWrapperContainer>
  117. </>
  118. );
  119. };
  120. Header.propTypes = {
  121. children: PropTypes.node,
  122. setIsGrid: PropTypes.func,
  123. isGrid: PropTypes.bool,
  124. offers: PropTypes.any,
  125. myOffers: PropTypes.bool,
  126. skeleton: PropTypes.bool,
  127. sorting: PropTypes.any,
  128. isAdmin: PropTypes.bool,
  129. users: PropTypes.bool,
  130. categories: PropTypes.bool,
  131. hideGrid: PropTypes.bool,
  132. className: PropTypes.string,
  133. hideBackButton: PropTypes.bool,
  134. category: PropTypes.bool,
  135. subcategories: PropTypes.bool,
  136. hideSorting: PropTypes.bool,
  137. location: PropTypes.bool,
  138. };
  139. Header.defaultProps = {
  140. isGrid: false,
  141. };
  142. export default Header;