您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

ReviewsSorting.js 2.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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. console.log(reviews);
  20. const changeValue = (event) => {
  21. if (props.isAdmin) {
  22. console.log("sortiranje: ", event.target.value);
  23. // if(event.target.value.value === 1) {
  24. // dispatch(setReviews(reviews.givenReviews));
  25. // } else {
  26. // dispatch(setReviews(reviews.receivedReviews));
  27. // }
  28. } else {
  29. dispatch(
  30. setReviews(
  31. sortReviews(
  32. reviews,
  33. event.target.value.value === reviewSortEnum.POSITIVE.value
  34. )
  35. )
  36. );
  37. }
  38. props.changeSorting(event.target.value);
  39. setValue(event.target.value);
  40. };
  41. const sortEnum = useMemo(() => {
  42. if (props.isAdmin) return sortAdminEnum;
  43. return reviewSortEnum;
  44. });
  45. useImperativeHandle(ref, () => ({
  46. sortValue: value,
  47. hasGivenReview: value?.value === sortAdminEnum.GIVEN.value
  48. }))
  49. return (
  50. <HeaderSelect
  51. value={value || sortEnum.INITIAL}
  52. IconComponent={DownArrowIcon}
  53. onChange={changeValue}
  54. >
  55. <SelectOption style={{ display: "none" }} value={sortEnum.INITIAL}>
  56. {sortEnum.INITIAL.mainText}
  57. </SelectOption>
  58. {Object.keys(sortEnum).map((property) => {
  59. if (sortEnum[property].value === 0) return;
  60. return (
  61. <SelectOption
  62. value={sortEnum[property]}
  63. key={sortEnum[property].value}
  64. >
  65. {sortEnum[property].mainText}
  66. </SelectOption>
  67. );
  68. })}
  69. </HeaderSelect>
  70. );
  71. });
  72. ReviewsSorting.displayName = "ReviewsSorting";
  73. ReviewsSorting.propTypes = {
  74. children: PropTypes.node,
  75. changeSorting: PropTypes.func,
  76. isAdmin: PropTypes.bool,
  77. };
  78. export default ReviewsSorting;