You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import { useEffect } from "react";
  2. import { useDispatch, useSelector } from "react-redux";
  3. import { sortEnum } from "../enums/sortEnum";
  4. import { setFilteredSortOption } from "../store/actions/filters/filtersActions";
  5. import { selectSelectedSortOption } from "../store/selectors/filtersSelectors";
  6. import { useQueryString } from "./useQueryString";
  7. import { convertQueryStringFrontend } from "../util/helpers/queryHelpers";
  8. import {
  9. KEY_PAGE,
  10. KEY_SORTBY,
  11. KEY_SORT_DATE,
  12. KEY_SORT_POPULAR,
  13. VALUE_SORTBY_NEW,
  14. VALUE_SORTBY_OLD,
  15. VALUE_SORTBY_POPULAR,
  16. } from "../constants/queryStringConstants";
  17. const useSorting = () => {
  18. const dispatch = useDispatch();
  19. const selectedSortOption = useSelector(selectSelectedSortOption);
  20. const sortOptions = sortEnum;
  21. const queryStringHook = useQueryString();
  22. // Setting sort option on initially load or refresh page
  23. useEffect(() => {
  24. if (queryStringHook.loadedFromURL) {
  25. const queryString = queryStringHook.queryString;
  26. let queryObject = new URLSearchParams(
  27. convertQueryStringFrontend(queryString)
  28. );
  29. if (queryObject.has(KEY_SORTBY)) {
  30. if (queryObject.get(KEY_SORTBY) === VALUE_SORTBY_NEW) {
  31. setSelectedSortOption(sortEnum.NEW);
  32. }
  33. if (queryObject.get(KEY_SORTBY) === VALUE_SORTBY_OLD) {
  34. setSelectedSortOption(sortEnum.OLD);
  35. }
  36. if (queryObject.get(KEY_SORTBY) === VALUE_SORTBY_POPULAR) {
  37. setSelectedSortOption(sortEnum.POPULAR);
  38. }
  39. } else {
  40. setSelectedSortOption(sortOptions.INITIAL);
  41. }
  42. }
  43. }, [queryStringHook.queryString, queryStringHook.loadedFromURL]);
  44. const setSelectedSortOption = (payload, shouldGoFirstPage = false) => {
  45. dispatch(setFilteredSortOption(payload));
  46. let _des_date = null;
  47. let _des_popular = null;
  48. if (payload.value === sortOptions.NEW.value) {
  49. _des_date = true;
  50. }
  51. if (payload.value === sortOptions.OLD.value) {
  52. _des_date = false;
  53. }
  54. if (payload.value === sortOptions.POPULAR.value) {
  55. _des_popular = true;
  56. }
  57. let queryArray = [];
  58. if (_des_date !== null) {
  59. queryArray.push({ key: KEY_SORT_DATE, value: `${_des_date}` });
  60. queryArray.push({ key: KEY_SORT_POPULAR });
  61. }
  62. if (_des_popular !== null) {
  63. queryArray.push({ key: KEY_SORT_POPULAR, value: `${_des_popular}` });
  64. queryArray.push({ key: KEY_SORT_DATE });
  65. }
  66. if (shouldGoFirstPage) {
  67. queryArray.push({ key: KEY_PAGE, value: "1" });
  68. }
  69. queryStringHook.appendMultipleToQueryString(queryArray);
  70. };
  71. const changeSorting = (payload) => {
  72. setSelectedSortOption(payload, true);
  73. };
  74. return {
  75. selectedSortOption,
  76. setSelectedSortOption,
  77. sortOptions,
  78. changeSorting,
  79. };
  80. };
  81. export default useSorting;