Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 

160 wiersze
7.9 KiB

  1. import React from 'react'
  2. import * as Icon from 'react-feather'
  3. import { useSelector } from 'react-redux'
  4. import NumberFormat from 'react-number-format';
  5. import Select from 'react-select';
  6. import Router from 'next/router';
  7. import Link from 'next/link';
  8. const ProductCards = function ({ company,total,selected, product,pages,current, backend, user, ...props }) {
  9. // const products = useSelector((state) => state.products)
  10. // const handleName = values => {
  11. // Router.push({
  12. // pathname: '/yamaha/product/motor',
  13. // query: (values&&values.length!=0)?{ filter: values["name"] }:{},
  14. // })
  15. // }
  16. if(product&&product.length>0){
  17. const pagination = ()=>{
  18. var paging = [];
  19. for(var i=1;i<=pages;i++){
  20. paging.push(
  21. <li key={`link_${i}`} className={`page-item ${i==current?'active':''}`}>
  22. <Link href={`./?p=${i}`} ><a className="page-link">{i}</a></Link>
  23. </li>
  24. );
  25. }
  26. return paging;
  27. };
  28. const Product = product.map((data) => {
  29. return (
  30. <div className="col-lg-3 col-md-6 col-sm-6" key={product.id}>
  31. <div className="single-products">
  32. <div className="products-image">
  33. <img src={`/api/util?img=${encodeURIComponent(data.attributes.Image.data[0].attributes.url)}`}
  34. />
  35. <ul>
  36. <li>
  37. <Link href={`/product/${data.id}`}>
  38. <a >
  39. <Icon.Search />
  40. </a>
  41. </Link>
  42. </li>
  43. {/* <li>
  44. <a >
  45. <Icon.Heart />
  46. </a>
  47. </li> */}
  48. <li>
  49. <a onClick={function (evt) {
  50. evt.preventDefault();
  51. navigator.clipboard.writeText(evt.target.baseURI.substring(0,evt.target.baseURI.lastIndexOf('product/')+8)+`${data.id}`).then(() => {
  52. alert("a produk berhasil di copy. Silakan share ke teman - teman anda.");
  53. }, () => {
  54. alert("Gagal men-copy link. Silakan mencopy link produk secara manual");
  55. });
  56. }}>
  57. <Icon.Link/>
  58. </a>
  59. </li>
  60. </ul>
  61. </div>
  62. <div className="products-content">
  63. <h3>
  64. <Link href={`/product/${data.id}`}>
  65. <a>{data.attributes.Name}</a>
  66. </Link>
  67. </h3>
  68. {
  69. (data.attributes.Product_prices.data.length==0)
  70. ?"-"
  71. :(data.attributes.Product_prices.data.length==1)
  72. ?(<span><NumberFormat value={Math.min.apply(null, data.attributes.Product_prices.data.map((i)=>i.attributes.Price))} displayType={'text'} thousandSeparator={true} prefix={'Rp.'} /></span>)
  73. :(
  74. <span>
  75. <NumberFormat value={Math.min.apply(null, data.attributes.Product_prices.data.map((i)=>i.attributes.Price))} displayType={'text'} thousandSeparator={true} prefix={'Rp.'} />
  76. {" s/d "}
  77. <NumberFormat value={Math.max.apply(null, data.attributes.Product_prices.data.map((i)=>i.attributes.Price))} displayType={'text'} thousandSeparator={true} prefix={'Rp.'} />
  78. </span>
  79. )
  80. }
  81. {/* <ul>
  82. <li><i className="flaticon-star-1"></i></li>
  83. <li><i className="flaticon-star-1"></i></li>
  84. <li><i className="flaticon-star-1"></i></li>
  85. <li><i className="flaticon-star-1"></i></li>
  86. <li><i className="flaticon-star-1"></i></li>
  87. </ul> */}
  88. <Link href={`/product/${data.id}`}>
  89. <a className="add-to-cart-btn">Detail Product</a>
  90. </Link>
  91. </div>
  92. </div>
  93. </div>
  94. );
  95. })
  96. return (
  97. <div className="shop-area ptb-80">
  98. <div className="container">
  99. <div className="woocommerce-topbar">
  100. <div className="row align-items-center">
  101. <div className="col-lg-7 col-md-7 col-sm-7">
  102. <div className="woocommerce-result-count">
  103. <p>Menampilkan {(current-1)*8+1}-{(current*8>total)?total:current*8} of {total} results</p>
  104. </div>
  105. </div>
  106. <div className="col-lg-5 col-md-5 col-sm-5">
  107. {/* <Select
  108. value={(selected) ? product.filter((i) => i.id == selected) : null}
  109. getOptionLabel={option => `${option.name}`}
  110. getOptionValue={option => option.id}
  111. options={product}
  112. isClearable="true"
  113. instanceId="name"
  114. placeholder="Cari Produk"
  115. onChange={values => handleName(values)}
  116. /> */}
  117. </div>
  118. </div>
  119. </div>
  120. <div className="row justify-content-md">
  121. {Product}
  122. {/* Pagination */}
  123. <div className="col-lg-12 col-md-12 col-sm-12">
  124. <div className="pagination-area">
  125. <nav aria-label="Page navigation">
  126. <ul className="pagination justify-content-center">
  127. {(current!='1')?(<li className="page-item">
  128. <Link href={`./?p=${parseInt(current)-1}`} ><a className="page-link" >Prev</a></Link>
  129. </li>):""}
  130. {pagination()}
  131. {(current!=pages)?<li className="page-item">
  132. <Link href={`./?p=${parseInt(current)+1}`} ><a className="page-link" >Next</a></Link>
  133. </li>:""}
  134. </ul>
  135. </nav>
  136. </div>
  137. </div>
  138. </div>
  139. </div>
  140. </div>
  141. )
  142. }
  143. else{
  144. return (
  145. <div className="pt-80 pb-50 justify-content-center">
  146. <center><h5>Belum ada produk yang terdaftar untuk saat ini. Tunggu berita selanjutnya dari kami ya!</h5></center>
  147. </div>
  148. );
  149. }
  150. }
  151. export default ProductCards;