script.js 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. const gqlUrl = "http://shop-roles.asmer.fs.a-level.com.ua/graphql";
  2. const yourDiv = document.getElementById("categories");
  3. const goodsDiv = document.getElementById("goodsBox");
  4. goodsDiv.style = "display:flex"
  5. if(localStorage.authtoken) {
  6. loginFormDiv.innerHTML = ""
  7. let sayHi = document.createElement("h2");
  8. sayHi.setAttribute("style", "margin-bottom: 0px")
  9. sayHi.innerText = `Hi, user!`;
  10. loginFormDiv.appendChild(sayHi);
  11. }
  12. const getGQL = url => (query, variables = {}) =>
  13. fetch(url, {
  14. method: 'POST',
  15. headers: {
  16. 'Accept': 'application/json',
  17. 'Content-Type': 'application/json',
  18. ...(localStorage.authToken ? {Authorization: `Bearer ${localStorage.authToken}`} : {})
  19. },
  20. body: JSON.stringify({query, variables})
  21. }).then(res => res.json())
  22. getGQL(gqlUrl)(`
  23. query categories {
  24. CategoryFind(query:"[{}]") {
  25. _id name
  26. goods {name, price _id, images {url}}
  27. image {
  28. _id
  29. createdAt
  30. text
  31. originalFileName
  32. }
  33. }
  34. }
  35. `).then(res => categories(res, yourDiv));
  36. function categories(data, parentEl) {
  37. var list = document.createElement("ul");
  38. parentEl.appendChild(list);
  39. for(let i = 0; i < data.data.CategoryFind.length; i++) {
  40. let oneCat = document.createElement("li");
  41. if(data.data.CategoryFind[i].subCategories) {
  42. oneCat.innerText = `${data.data.CategoryFind[i].name} >`;
  43. } else {
  44. oneCat.innerText = data.data.CategoryFind[i].name;
  45. }
  46. let thisSubcat = false;
  47. oneCat.onclick = () => getGQL(gqlUrl) (
  48. `query categoryFind($query: String) {
  49. CategoryFindOne(query: $query) {
  50. name,
  51. goods {
  52. _id
  53. },
  54. subCategories {name, _id}
  55. }
  56. }
  57. `,{query: JSON.stringify([{_id: `${data.data.CategoryFind[i]._id}` }]) }
  58. ).then((res) => {
  59. if(thisSubcat == false) {
  60. if(res.data.CategoryFindOne.subCategories) {
  61. let subArray = res.data.CategoryFindOne.subCategories;
  62. oneCategory(subArray, oneCat)
  63. thisSubcat = true;
  64. } else {
  65. goodsOnPage(goodsDiv, data.data.CategoryFind[i].goods)
  66. }
  67. } else {
  68. let lastChild = oneCat.lastChild;
  69. oneCat.removeChild(lastChild);
  70. thisSubcat = false;
  71. }
  72. })
  73. list.appendChild(oneCat);
  74. }
  75. }
  76. function oneCategory(dataArr, parentEl) {
  77. var list = document.createElement("ul");
  78. parentEl.appendChild(list);
  79. for(let i = 0; i < dataArr.length; i++) {
  80. let oneCat = document.createElement("li");
  81. oneCat.innerText = dataArr[i].name;
  82. oneCat.onclick = function(event) {
  83. event.stopPropagation();
  84. getGQL(gqlUrl) (
  85. `query goods($query: String) {
  86. GoodFind(query: $query) {
  87. name, price,
  88. images{url}, _id
  89. categories {
  90. _id
  91. createdAt
  92. name
  93. }
  94. }
  95. }`,{query: JSON.stringify([{
  96. "categories._id": `${dataArr[i]._id}`
  97. }]) }).then(res =>(goodsOnPage(goodsDiv, res.data.GoodFind)));
  98. }
  99. list.appendChild(oneCat);
  100. }
  101. }
  102. function goodsOnPage(parentEl, goodsArr = null) {
  103. debugger
  104. parentEl.innerHTML = "";
  105. parentEl.style = "justify-content: spase-around;"
  106. if(goodsArr == null||goodsArr.length == 0) {
  107. parentEl.innerHTML = "К сожалению нет таких товаров. Попробуйте, пожалуйста, другую категорию";
  108. return
  109. }
  110. for(let key of goodsArr) {
  111. let icon = document.createElement("div");
  112. parentEl.appendChild(icon);
  113. let iconImg = document.createElement("img");
  114. iconImg.setAttribute("src", `http://shop-roles.asmer.fs.a-level.com.ua/${key.images[0].url}`);
  115. iconImg.style = "width: 60%; height: 60%"
  116. icon.appendChild(iconImg);
  117. let iconName = document.createElement("h5");
  118. iconName.innerText = key.name;
  119. icon.appendChild(iconName);
  120. let iconprice = document.createElement("span");
  121. iconprice.innerText = `${key.price}грн`
  122. icon.appendChild(iconprice);
  123. icon.onclick = () => getGQL(gqlUrl) (
  124. `query oneGood($query: String) {
  125. GoodFindOne(query: $query) {
  126. _id
  127. createdAt
  128. name
  129. description
  130. price
  131. images{url}
  132. }
  133. }
  134. `,{query: JSON.stringify([{_id: `${key._id}` }]) }
  135. ).then((res) => oneGoodDescription(res.data.GoodFindOne, goodsDiv));
  136. }
  137. }
  138. function oneGoodDescription(data, parentEl) {
  139. parentEl.innerHTML = ""
  140. parentEl.style = "justify-content: center;"
  141. var icon = document.createElement("div");
  142. icon.style = "display: flex; justify-content: center; flex-direction: column";
  143. let iconImg = document.createElement("img");
  144. iconImg.setAttribute("src", `http://shop-roles.asmer.fs.a-level.com.ua/${data.images[0].url}`);
  145. iconImg.style = "width: 100%; height: 100%";
  146. icon.appendChild(iconImg);
  147. let iconName = document.createElement("h5");
  148. iconName.innerText = data.name;
  149. icon.appendChild(iconName);
  150. let iconDescrip = document.createElement("p");
  151. iconDescrip.innerText = data.description;
  152. icon.appendChild(iconDescrip)
  153. let iconprice = document.createElement("span");
  154. iconprice.innerText = `${data.price}грн`
  155. icon.appendChild(iconprice);
  156. parentEl.appendChild(icon);
  157. }