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.
 
 

253 lines
12 KiB

  1. import React from 'react'
  2. import Link from 'next/link'
  3. import * as Icon from 'react-feather'
  4. import { useSelector } from 'react-redux'
  5. import AddToCartBtn from '@/components/others/Shop/AddToCartBtn'
  6. import Select from 'react-select';
  7. import Router from 'next/router'
  8. //addon library
  9. import { resetIdCounter, Tab, Tabs, TabList, TabPanel } from 'react-tabs';
  10. resetIdCounter();
  11. //yarn library
  12. import NumberFormat from 'react-number-format';
  13. const ProductCard = function ({ category,page,selected,products, ...props }) {
  14. const handleName = values => {
  15. Router.push({
  16. pathname: '/yamaha/Product/Sparepart',
  17. query: (values && values.length != 0) ? { filter: values["name"] } : {},
  18. })
  19. }
  20. category = category.map((i)=>i.replace(' ','_'));
  21. const pagination = (type,pages)=>{
  22. console.log(type,selected);
  23. var paging = [];
  24. var current = (selected==type)?page:1;
  25. for(var i=1;i<=pages;i++){
  26. paging.push(
  27. <Link key={i} href={{
  28. query: { s:type,p: i },
  29. }}>
  30. <li className={`page-item ${i==current?'active':''}`}>
  31. <a className="page-link" >{i}</a>
  32. </li>
  33. </Link>
  34. );
  35. }
  36. return (
  37. <div className="row justify-content-md-center">
  38. <div className="col-lg-12 col-md-12 col-sm-12">
  39. <div className="pagination-area">
  40. <nav aria-label="Page navigation">
  41. <ul className="pagination justify-content-center">
  42. {(current!='1')?(<li className="page-item"><Link href={{
  43. pathname: '/yamaha/product/Sparepart',
  44. query: { s:type,p: parseInt(current)-1 },
  45. }}>
  46. <a className="page-link" >Prev</a>
  47. </Link></li>):""}
  48. {paging}
  49. {(current!=pages)?<li className="page-item"><Link href={{
  50. pathname: '/yamaha/product/Sparepart',
  51. query: { s:type,p: parseInt(current)+1 },
  52. }}>
  53. <a className="page-link" >Next</a>
  54. </Link></li>:""}
  55. </ul>
  56. </nav>
  57. </div>
  58. </div>
  59. </div>
  60. );
  61. };
  62. const productGrid = function(product){
  63. if(product){
  64. return product.map((data) => {
  65. return (
  66. <div className="col-lg-3 col-md-6 col-sm-6" key={product.id}>
  67. <div className="single-products">
  68. <div className="products-image">
  69. <img src={`/api/util?img=${(data.attributes.Image.data)?encodeURIComponent(data.attributes.Image.data[0].attributes["url"]):''}`} />
  70. <ul>
  71. <li>
  72. <a >
  73. <Icon.Search />
  74. </a>
  75. </li>
  76. <li>
  77. <a onClick={function (evt) {
  78. evt.preventDefault();
  79. console.log(evt);
  80. navigator.clipboard.writeText(evt.target.baseURI+`${data.id}`).then(() => {
  81. alert("Link produk berhasil di copy. Silakan share ke teman - teman anda.");
  82. }, () => {
  83. alert("Gagal men-copy link. Silakan mencopy link produk secara manual");
  84. });
  85. }}>
  86. <Icon.Link/>
  87. </a>
  88. </li>
  89. </ul>
  90. </div>
  91. <div className="products-content">
  92. <h3>
  93. <Link href={"/yamaha/Product/Ygp_Detail?s=" + data.id}>
  94. <a>{data.name}</a>
  95. </Link>
  96. </h3>
  97. <span>
  98. <NumberFormat value={data.price1 - data.price1 * data.discount} displayType={'text'} thousandSeparator={true} prefix={'Rp.'} />
  99. </span><br />
  100. <span></span>
  101. <span>
  102. <div className="products-details">
  103. <div className="price">
  104. <NumberFormat
  105. style={{ color: "#EB1928" }}
  106. displayType={'text'}
  107. prefix={'%'}
  108. decimalScale={2}
  109. value={data.discount * 100}
  110. />
  111. <NumberFormat value={data.price1} displayType={'text'} thousandSeparator={true} prefix={'Rp.'} />
  112. </div>
  113. </div>
  114. </span>
  115. <ul>
  116. <li><i className="flaticon-star-1"></i></li>
  117. <li><i className="flaticon-star-1"></i></li>
  118. <li><i className="flaticon-star-1"></i></li>
  119. <li><i className="flaticon-star-1"></i></li>
  120. <li><i className="flaticon-star-1"></i></li>
  121. </ul>
  122. <Link href={"/yamaha/Product/Ygp_Detail?s=" + data.id}>
  123. <a className="add-to-cart-btn">Detail Product</a>
  124. </Link>
  125. </div>
  126. </div>
  127. </div>
  128. );
  129. });
  130. }
  131. else return(
  132. <div className="pt-80 pb-50 justify-content-center">
  133. <center><h5>Belum ada produk untuk saat ini. Tunggu berita selanjutnya dari kami ya!</h5></center>
  134. </div>);
  135. }
  136. return (
  137. <div className="shop-area ptb-80">
  138. <div className="container">
  139. <div className="woocommerce-topbar">
  140. <div className="row align-items-center">
  141. {/* <div className="col-lg-5 col-md-5 col-sm-5">
  142. <Select
  143. value={(selected) ? ygp.filter((i) => i.id == selected) : null}
  144. getOptionLabel={option => `${option.name}`}
  145. getOptionValue={option => option.id}
  146. options={ygp}
  147. isSearchable
  148. isMulti
  149. isClearable
  150. instanceId="name"
  151. placeholder="Cari Produk"
  152. onChange={values => handleName(values)}
  153. />
  154. </div> */}
  155. </div>
  156. </div>
  157. <div width="fullwidth">
  158. <div className="products-details-tabs">
  159. <Tabs>
  160. <TabList>
  161. {category.map((i)=>{
  162. return (<Tab key={i}>{i.replace(/\_/g,' ')}</Tab>);
  163. })}
  164. </TabList>
  165. {category.map((i)=>{
  166. return (
  167. <TabPanel>
  168. <div className="col-lg-2 col-md-2 col-sm-2">
  169. <div className="woocommerce-result-count">
  170. <p>Showing {(((selected==i)?page:1)-1)*8+1}-{(((selected==i)?page:1)*8>products[i].meta.pagination.total)?products[i].meta.pagination.total:((selected==i)?page:1)*8} of {products[i].meta.pagination.total} results</p>
  171. </div>
  172. </div>
  173. <div className="row justify-content-md">
  174. {productGrid(products[i].data)}
  175. {pagination(i.toLowerCase(),(products[i].meta)?products[i].meta.pagination.pageCount:1)}
  176. </div>
  177. </TabPanel>
  178. );
  179. })}
  180. {/* <TabPanel>
  181. <div className="row justify-content-md">
  182. {YGP}
  183. {pagination('ygp',ygp.meta.pagination.pageCount)}
  184. </div>
  185. </TabPanel>
  186. <TabPanel>
  187. <div className="row justify-content-md">
  188. {Yamalube}
  189. {pagination('lube',yamalube.meta.pagination.pageCount)}
  190. </div>
  191. </TabPanel>
  192. <TabPanel>
  193. <div className="row justify-content-md">
  194. {Helmet}
  195. {pagination('helmet',helmet.meta.pagination.pageCount)}
  196. </div>
  197. </TabPanel>
  198. <TabPanel>
  199. <div className="row justify-content-md">
  200. {Apparel}
  201. {pagination('apparel',apparel.meta.pagination.pageCount)}
  202. </div>
  203. </TabPanel>
  204. <TabPanel>
  205. <div className="row justify-content-md">
  206. {Accessories}
  207. {pagination('accessories',accessories.meta.pagination.pageCount)}
  208. </div>
  209. </TabPanel> */}
  210. </Tabs>
  211. </div>
  212. </div>
  213. {/* <div className="row justify-content-md-center">
  214. {Product}
  215. Pagination
  216. <div className="col-lg-12 col-md-12 col-sm-12">
  217. <div className="pagination-area">
  218. <nav aria-label="Page navigation">
  219. <ul className="pagination justify-content-center">
  220. <li className="page-item"><a className="page-link" >Prev</a></li>
  221. <li className="page-item active"><a className="page-link" >1</a></li>
  222. <li className="page-item"><a className="page-link" >2</a></li>
  223. <li className="page-item"><a className="page-link" >3</a></li>
  224. <li className="page-item"><a className="page-link" >Next</a></li>
  225. </ul>
  226. </nav>
  227. </div>
  228. </div>
  229. </div> */}
  230. </div>
  231. </div>
  232. )
  233. }
  234. export default ProductCard;