Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

ReviewsSorting.js 2.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import React, { forwardRef, useImperativeHandle, useMemo } from "react";
  2. import PropTypes from "prop-types";
  3. import {
  4. DownArrowIcon,
  5. HeaderSelect,
  6. SelectOption,
  7. } from "./ReviewsSorting.styled";
  8. import { useState } from "react";
  9. import { useDispatch, useSelector } from "react-redux";
  10. import { selectSelectedReviews } from "../../../store/selectors/reviewSelector";
  11. import { sortReviews } from "../../../util/helpers/reviewsHelper";
  12. import { reviewSortEnum } from "../../../enums/reviewEnum";
  13. import { setReviews } from "../../../store/actions/review/reviewActions";
  14. import { sortAdminEnum } from "../../../enums/sortEnum";
  15. const ReviewsSorting = forwardRef((props, ref) => {
  16. const reviews = useSelector(selectSelectedReviews);
  17. const dispatch = useDispatch();
  18. const [value, setValue] = useState();
  19. const changeValue = (event) => {
  20. if (props.isAdmin) {
  21. // if(event.target.value.value === 1) {
  22. // dispatch(setReviews(reviews.givenReviews));
  23. // } else {
  24. // dispatch(setReviews(reviews.receivedReviews));
  25. // }
  26. } else {
  27. dispatch(
  28. setReviews(
  29. sortReviews(
  30. reviews,
  31. event.target.value.value === reviewSortEnum.POSITIVE.value
  32. )
  33. )
  34. );
  35. }
  36. props.changeSorting(event.target.value);
  37. setValue(event.target.value);
  38. };
  39. const sortEnum = useMemo(() => {
  40. if (props.isAdmin) return sortAdminEnum;
  41. return reviewSortEnum;
  42. });
  43. useImperativeHandle(ref, () => ({
  44. sortValue: value,
  45. hasGivenReview: value?.value === sortAdminEnum.GIVEN.value
  46. }))
  47. return (
  48. <HeaderSelect
  49. value={value || sortEnum.INITIAL}
  50. IconComponent={DownArrowIcon}
  51. onChange={changeValue}
  52. >
  53. <SelectOption style={{ display: "none" }} value={sortEnum.INITIAL}>
  54. {sortEnum.INITIAL.mainText}
  55. </SelectOption>
  56. {Object.keys(sortEnum).map((property) => {
  57. if (sortEnum[property].value === 0) return;
  58. return (
  59. <SelectOption
  60. value={sortEnum[property]}
  61. key={sortEnum[property].value}
  62. >
  63. {sortEnum[property].mainText}
  64. </SelectOption>
  65. );
  66. })}
  67. </HeaderSelect>
  68. );
  69. });
  70. ReviewsSorting.displayName = "ReviewsSorting";
  71. ReviewsSorting.propTypes = {
  72. children: PropTypes.node,
  73. changeSorting: PropTypes.func,
  74. isAdmin: PropTypes.bool,
  75. };
  76. export default ReviewsSorting;