選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

queryHelpers.js 8.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. import {
  2. ALL_CATEGORIES,
  3. COMMA,
  4. SPREAD,
  5. } from "../../constants/marketplaceHeaderTitle";
  6. import {
  7. initialSize,
  8. KEY_CATEGORY,
  9. KEY_LOCATION,
  10. KEY_NAME,
  11. KEY_PAGE,
  12. KEY_SEARCH,
  13. KEY_SIZE,
  14. KEY_SORTBY,
  15. KEY_SORT_DATE,
  16. KEY_SORT_POPULAR,
  17. KEY_SUBCATEGORY,
  18. VALUE_SORTBY_NEW,
  19. VALUE_SORTBY_OLD,
  20. VALUE_SORTBY_POPULAR,
  21. } from "../../constants/queryStringConstants";
  22. import { sortEnum } from "../../enums/sortEnum";
  23. // import { ReactComponent as CategoryHeader } from "../../assets/images/svg/category-header.svg"
  24. // import qs from "query-string";
  25. export const convertQueryStringForFrontend = (queryURL) => {
  26. const queryObject = new URLSearchParams(queryURL);
  27. const queryObjectToReturn = new URLSearchParams(queryURL);
  28. if (queryObject.has(KEY_SORT_DATE)) {
  29. queryObjectToReturn.delete(KEY_SORT_DATE);
  30. if (queryObject.get(KEY_SORT_DATE) === "true") {
  31. queryObjectToReturn.append(KEY_SORTBY, sortEnum.NEW.queryString);
  32. } else {
  33. queryObjectToReturn.append(KEY_SORTBY, sortEnum.OLD.queryString);
  34. }
  35. }
  36. if (queryObject.has(KEY_NAME)) {
  37. queryObjectToReturn.delete(KEY_NAME);
  38. queryObjectToReturn.append(KEY_SEARCH, queryObject.get(KEY_NAME));
  39. }
  40. if (queryObject.has(KEY_SORT_POPULAR)) {
  41. queryObjectToReturn.delete(KEY_SORT_POPULAR);
  42. queryObjectToReturn.append(KEY_SORTBY, sortEnum.POPULAR.queryString);
  43. }
  44. if (queryObject.has(KEY_SIZE)) {
  45. queryObjectToReturn.delete(KEY_SIZE);
  46. }
  47. if (queryObject.has(KEY_PAGE)) {
  48. if (queryObject.get(KEY_PAGE) === "1") {
  49. queryObjectToReturn.delete(KEY_PAGE);
  50. queryObjectToReturn.delete(KEY_SIZE);
  51. return queryObjectToReturn.toString();
  52. } else {
  53. queryObjectToReturn.delete(KEY_PAGE);
  54. return (
  55. queryObjectToReturn.toString() + "&page=" + queryObject.get(KEY_PAGE)
  56. );
  57. }
  58. }
  59. return queryObjectToReturn.toString();
  60. };
  61. export const combineQueryStrings = (firstQuery, secondQuery) => {
  62. const firstQueryObject = new URLSearchParams(firstQuery);
  63. const secondQueryObject = new URLSearchParams(secondQuery);
  64. const thirdQueryObject = new URLSearchParams(secondQueryObject.toString());
  65. let arrayOfProperties = Object.getOwnPropertyNames(
  66. Object.fromEntries(firstQueryObject)
  67. );
  68. arrayOfProperties.forEach((property) => {
  69. if (!secondQueryObject.has(property)) {
  70. // console.log("ovde je doslo query: ", property);
  71. // thirdQueryObject.append(property, secondQueryObject.get(property));
  72. thirdQueryObject.append(property, firstQueryObject.get(property));
  73. } else {
  74. // console.log("ovde ispod: ", property);
  75. }
  76. });
  77. return thirdQueryObject.toString();
  78. };
  79. export const convertQueryStringForBackend = (queryURL) => {
  80. const queryObject = new URLSearchParams(queryURL);
  81. const newQueryObject = new URLSearchParams();
  82. if (queryObject.has(KEY_CATEGORY)) {
  83. newQueryObject.append(
  84. KEY_CATEGORY,
  85. queryObject.getAll(KEY_CATEGORY)[
  86. queryObject.getAll(KEY_CATEGORY).length - 1
  87. ]
  88. );
  89. }
  90. if (queryObject.has(KEY_SUBCATEGORY)) {
  91. newQueryObject.append(
  92. KEY_SUBCATEGORY,
  93. queryObject.getAll(KEY_SUBCATEGORY)[
  94. queryObject.getAll(KEY_SUBCATEGORY).length - 1
  95. ]
  96. );
  97. }
  98. if (queryObject.has(KEY_SEARCH) && queryObject.get(KEY_SEARCH)?.length > 0) {
  99. newQueryObject.append(
  100. KEY_NAME,
  101. queryObject.getAll(KEY_SEARCH)[queryObject.getAll(KEY_SEARCH).length - 1]
  102. );
  103. }
  104. if (queryObject.has(KEY_NAME)) {
  105. newQueryObject.append(
  106. KEY_NAME,
  107. queryObject.getAll(KEY_NAME)[queryObject.getAll(KEY_NAME).length - 1]
  108. );
  109. }
  110. if (queryObject.has(KEY_LOCATION)) {
  111. const arrayOfLocations = queryObject.getAll(KEY_LOCATION);
  112. arrayOfLocations.forEach((item) => {
  113. newQueryObject.append(KEY_LOCATION, item);
  114. });
  115. }
  116. if (queryObject.has(KEY_SORTBY)) {
  117. newQueryObject.delete(KEY_SORTBY);
  118. if (queryObject.get(KEY_SORTBY) === VALUE_SORTBY_NEW) {
  119. newQueryObject.append(KEY_SORT_DATE, "true");
  120. }
  121. if (queryObject.get(KEY_SORTBY) === VALUE_SORTBY_OLD) {
  122. newQueryObject.append(KEY_SORT_DATE, "false");
  123. }
  124. if (queryObject.get(KEY_SORTBY) === VALUE_SORTBY_POPULAR) {
  125. newQueryObject.append(KEY_SORT_POPULAR, "true");
  126. }
  127. }
  128. if (queryObject.has(KEY_SORT_DATE)) {
  129. newQueryObject.append(KEY_SORT_DATE, queryObject.get(KEY_SORT_DATE));
  130. }
  131. if (queryObject.has(KEY_SORT_POPULAR)) {
  132. newQueryObject.append(KEY_SORT_POPULAR, queryObject.get(KEY_SORT_POPULAR));
  133. }
  134. newQueryObject.append(KEY_SIZE, initialSize);
  135. if (!queryObject.has(KEY_PAGE)) {
  136. newQueryObject.append(KEY_PAGE, "1");
  137. } else {
  138. newQueryObject.append(KEY_PAGE, queryObject.get(KEY_PAGE));
  139. }
  140. return newQueryObject.toString();
  141. };
  142. export const getQueryObjectHelper = (queryString) => {
  143. let newObject = {};
  144. const queryObject = new URLSearchParams(queryString);
  145. if (queryObject.has(KEY_CATEGORY)) {
  146. newObject[KEY_CATEGORY] = queryObject.get(KEY_CATEGORY);
  147. }
  148. if (queryObject.has(KEY_SUBCATEGORY)) {
  149. newObject[KEY_SUBCATEGORY] = queryObject.get(KEY_SUBCATEGORY);
  150. }
  151. if (queryObject.has(KEY_SEARCH)) {
  152. newObject[KEY_SEARCH] = queryObject.get(KEY_SEARCH);
  153. }
  154. if (queryObject.has(KEY_NAME)) {
  155. newObject[KEY_NAME] = queryObject.get(KEY_NAME);
  156. }
  157. if (queryObject.has(KEY_LOCATION)) {
  158. const arrayOfLocations = queryObject.getAll(KEY_LOCATION);
  159. newObject[KEY_LOCATION] = [];
  160. arrayOfLocations.forEach((item) => {
  161. newObject[KEY_LOCATION].push(item);
  162. });
  163. }
  164. if (queryObject.has(KEY_SORTBY)) {
  165. newObject[KEY_SORTBY] = queryObject.get(KEY_SORTBY);
  166. }
  167. if (queryObject.has(KEY_SORT_DATE)) {
  168. newObject[KEY_SORT_DATE] = queryObject.get(KEY_SORT_DATE);
  169. }
  170. if (queryObject.has(KEY_SORT_POPULAR)) {
  171. newObject[KEY_SORT_POPULAR] = queryObject.get(KEY_SORT_POPULAR);
  172. }
  173. if (queryObject.has(KEY_PAGE)) {
  174. newObject[KEY_PAGE] = queryObject.get(KEY_PAGE);
  175. }
  176. if (queryObject.has(KEY_SIZE)) {
  177. newObject[KEY_SIZE] = queryObject.get(KEY_SIZE);
  178. }
  179. return newObject;
  180. };
  181. export const makeHeaderStringHelper = (filters) => {
  182. let headerStringLocal = ALL_CATEGORIES;
  183. // Adding category to header string
  184. if (filters.category.selectedCategory?.name) {
  185. headerStringLocal = filters.category.selectedCategory?.name;
  186. // Adding subcategories to header string
  187. if (filters.subcategory.selectedSubcategory?.name) {
  188. headerStringLocal += `${SPREAD}${filters.subcategory.selectedSubcategory.name}`;
  189. }
  190. }
  191. // Adding locations to header string
  192. if (
  193. filters.locations.selectedLocations &&
  194. filters.locations.selectedLocations?.length > 0
  195. ) {
  196. headerStringLocal += SPREAD;
  197. filters.locations.selectedLocations.forEach((location, index) => {
  198. // Checking if item is last
  199. if (index + 1 === filters.locations.selectedLocations.length) {
  200. headerStringLocal += location.city;
  201. } else {
  202. headerStringLocal += location.city + COMMA;
  203. }
  204. });
  205. }
  206. return headerStringLocal;
  207. };
  208. export const makeQueryStringHelper = (filters, paging, search, sorting) => {
  209. const newQueryString = new URLSearchParams();
  210. if (filters.category.selectedCategoryLocally?.name) {
  211. newQueryString.append(
  212. KEY_CATEGORY,
  213. filters.category.selectedCategoryLocally.name
  214. );
  215. }
  216. if (filters.subcategory.selectedSubcategoryLocally?.name) {
  217. newQueryString.append(
  218. KEY_SUBCATEGORY,
  219. filters.subcategory.selectedSubcategoryLocally.name
  220. );
  221. }
  222. if (filters.locations.selectedLocationsLocally?.length > 0) {
  223. filters.locations.selectedLocationsLocally.forEach((location) =>
  224. newQueryString.append(KEY_LOCATION, location?.city)
  225. );
  226. }
  227. if (sorting.selectedSortOption?.value) {
  228. if (sorting.selectedSortOption?.value === sortEnum.NEW.value) {
  229. newQueryString.append(KEY_SORTBY, VALUE_SORTBY_NEW);
  230. }
  231. if (sorting.selectedSortOption?.value === sortEnum.OLD.value) {
  232. newQueryString.append(KEY_SORTBY, VALUE_SORTBY_OLD);
  233. }
  234. if (sorting.selectedSortOption?.value === sortEnum.POPULAR.value) {
  235. newQueryString.append(KEY_SORTBY, VALUE_SORTBY_POPULAR);
  236. }
  237. }
  238. if (paging.currentPage !== 1) {
  239. newQueryString.append(KEY_PAGE, paging.currentPage);
  240. }
  241. newQueryString.append(KEY_SEARCH, search.searchString ?? "");
  242. return newQueryString;
  243. };
  244. export const changePageQueryStringHelper = (queryString, newPage) => {
  245. const newQueryString = new URLSearchParams(queryString);
  246. if (newQueryString.has(KEY_PAGE)) {
  247. newQueryString.delete(KEY_PAGE);
  248. }
  249. newQueryString.set(KEY_PAGE, newPage);
  250. return newQueryString.toString();
  251. };
  252. export const changePageQueryObjectHelper = (queryObject, newPage) => {
  253. if (queryObject.has(KEY_PAGE)) {
  254. queryObject.delete(KEY_PAGE);
  255. }
  256. queryObject.set(KEY_PAGE, newPage);
  257. return queryObject;
  258. };
  259. export const removePageAndSizeHelper = (queryString) => {
  260. const newQueryString = new URLSearchParams(queryString);
  261. if (newQueryString.has(KEY_PAGE)) newQueryString.delete(KEY_PAGE);
  262. if (newQueryString.has(KEY_SIZE)) newQueryString.delete(KEY_SIZE);
  263. return newQueryString.toString();
  264. }