script.js 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  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. }
  158. function myOrder(parentEl) {
  159. getGQL(gqlUrl) (
  160. `query yourOrders {
  161. OrderFind(query: "[{}]") {
  162. _id
  163. total
  164. orderGoods {
  165. count
  166. good {
  167. name
  168. price
  169. images {
  170. url
  171. }
  172. }
  173. }
  174. owner {
  175. login
  176. }
  177. }
  178. }
  179. `
  180. ).then((res) => {
  181. parentEl.innerHTML = "";
  182. parentEl.style = "justify-content: spase-around; ";
  183. var array = res.data.OrderFind;
  184. for(let i = 0; i < array.length; i++) {
  185. var oneOrder = array[i].orderGoods;
  186. let icon = document.createElement("div");
  187. for(let j = 0; j < oneOrder.length; j++) {
  188. if(oneOrder[j].good !== null) {
  189. debugger
  190. icon.style = "margin: 30px; border: 2px solid black; padding:30px"
  191. parentEl.appendChild(icon);
  192. let goodInner = document.createElement("div");
  193. goodInner.style = "width: 250px; height: 200px;"
  194. icon.appendChild(goodInner);
  195. let goodImg = document.createElement("img");
  196. goodImg.setAttribute("src", `http://shop-roles.asmer.fs.a-level.com.ua/${oneOrder[j].good.images[0].url}`);
  197. goodImg.style = "width: 70px; height: 70px;"
  198. goodInner.appendChild(goodImg);
  199. let goodName = document.createElement("h4");
  200. goodName.innerText = oneOrder[j].good.name;
  201. goodInner.appendChild(goodName);
  202. let goodCount = document.createElement("span");
  203. goodCount.innerText = `${oneOrder[j].count} шт `;
  204. goodInner.appendChild(goodCount)
  205. let goodPrice = document.createElement("span");
  206. goodPrice.innerText = `${oneOrder[j].good.price} грн`;
  207. goodInner.appendChild(goodPrice);
  208. console.log(oneOrder)
  209. }
  210. }
  211. let totalOrder = document.createElement("h3");
  212. totalOrder.innerText = `${array[i].total} грн`;
  213. icon.appendChild(totalOrder);
  214. }
  215. console.log(array);
  216. });
  217. }
  218. const orders = document.getElementById("orders");
  219. orders.onclick = () => myOrder(goodsDiv)