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.
 
 

347 line
21 KiB

  1. import React, { useState } from 'react'
  2. //component
  3. import PageBanner from '@/components/Common/PageBanner';
  4. import * as Icon from 'react-feather'
  5. import { useSelector, useDispatch } from 'react-redux'
  6. import { useRouter } from 'next/router'
  7. import { useToasts } from 'react-toast-notifications'
  8. //addon library
  9. import { resetIdCounter, Tab, Tabs, TabList, TabPanel } from 'react-tabs';
  10. resetIdCounter();
  11. import dynamic from 'next/dynamic'
  12. const OwlCarousel = dynamic(import('react-owl-carousel3'))
  13. //library yarn
  14. import NumberFormat from 'react-number-format';
  15. import util from '../../../lib/util';
  16. //sweet alert
  17. import swal from 'sweetalert';
  18. const options = {
  19. loop: true,
  20. nav: true,
  21. dots: false,
  22. autoplay: true,
  23. items: 1,
  24. smartSpeed: 1000,
  25. autoplayTimeout: 5000,
  26. navText: [
  27. "<i className='bx bx-chevron-left'></i>",
  28. "<i className='bx bx-chevron-right'></i>"
  29. ],
  30. };
  31. const ProductDetails = function ({ detailproduct, backend, user, ...props }) {
  32. const [formValue, setFormValue] = React.useState({
  33. product_img: "",
  34. product_name: "",
  35. product_color: "",
  36. product_price: "",
  37. });
  38. const [OTRProduct, setProductOTR] = useState('');
  39. const router = useRouter();
  40. return (
  41. <>
  42. <PageBanner pageTitle={detailproduct.Name} />
  43. <div className="shop-details-area ptb-80">
  44. <div className="container">
  45. <div className="row align-items-center">
  46. <div className="col-lg-5">
  47. <OwlCarousel
  48. className="products-details-image products-details-image-slides owl-carousel owl-theme"
  49. {...options}
  50. >
  51. {detailproduct.Image.data.map((option) => (
  52. <img src={`/api/util?img=${encodeURIComponent(option.attributes.url)}`} />
  53. ))}
  54. </OwlCarousel>
  55. </div>
  56. <div className="col-lg-7">
  57. <div className="products-details">
  58. <h5>
  59. <NumberFormat value={OTRProduct} displayType={'text'} thousandSeparator={true} prefix={'Rp.'} />
  60. </h5>
  61. {/* <h3>
  62. <NumberFormat value={data.product_otrs[0].price - data.product_otrs[0].price * data.discount} displayType={'text'} thousandSeparator={true} prefix={'Rp.'} />
  63. </h3>
  64. <h5>
  65. <div className="price" style={{ marginTop: "20px" }}>
  66. <NumberFormat
  67. style={{ color: "#EB1928" }}
  68. displayType={'text'}
  69. prefix={'%'}
  70. decimalScale={2}
  71. value={data.discount * 100}
  72. />
  73. <NumberFormat value={data.product_otrs[0].price} displayType={'text'} thousandSeparator={true} prefix={'Rp.'} />
  74. </div>
  75. </h5> */}
  76. {/* <p>{this.state.selectedOption}</p> */}
  77. <ul className="rating">
  78. <li><i className="flaticon-star-1"></i></li>
  79. <li><i className="flaticon-star-1"></i></li>
  80. <li><i className="flaticon-star-1"></i></li>
  81. <li><i className="flaticon-star-1"></i></li>
  82. <li><i className="flaticon-star-1"></i></li>
  83. </ul>
  84. <div className="availability">
  85. Availability: <span>{detailproduct.Stock}</span>
  86. </div>
  87. <form
  88. onSubmit={async (e) => {
  89. e.preventDefault();
  90. var newformValue = {
  91. ...formValue,
  92. product_name: detailproduct.Name,
  93. // product_img: detailproduct[0].backend.img[0],
  94. }
  95. setFormValue(newformValue)
  96. // console.log(JSON.stringify(newformValue));
  97. const response = await fetch(
  98. "/api/transaction/AddToCart",
  99. {
  100. method: "POST",
  101. headers: {
  102. 'Content-Type': 'application/json'
  103. },
  104. body: JSON.stringify(newformValue),
  105. }
  106. );
  107. if (response.ok) {
  108. var res = await response.json();
  109. // console.log("cek response :", res);
  110. if (res["STATUS"] === 1) {
  111. res["DATA"]["cart"];
  112. swal("Produk Berhasil Ditambah ke Keranjang", "Silahkan Cek Keranjang Belanja Anda", "success");
  113. router.push("/yamaha/Shop/Cart");
  114. }
  115. else {
  116. swal("Produk Gagal Ditambah ke Keranjang", "Silahkan Coba Lagi", "error");
  117. }
  118. } else {
  119. swal("Transaksi Gagal", "Silahkan Coba Lagi", "error");
  120. }
  121. return false;
  122. }}
  123. >
  124. <label>Harga Product per Daerah <span className="required">*</span></label>
  125. <div className="select-box" placeholder="Pilih Harga OTR">
  126. <select className="form-select"
  127. name="product_otr"
  128. onInput={(e) => {
  129. setFormValue({
  130. ...formValue,
  131. product_price: e.target.value.toString(),
  132. })
  133. }}
  134. onChange={e => setProductOTR(e.target.value)}
  135. >
  136. <option value="0">- Harga per Daerah -</option>
  137. {detailproduct.Product_prices.data.map((option) => (
  138. <option value={option.attributes.Price}>{(option.attributes.Region.data)?option.attributes.Region.data.attributes.Name:''}-{option.attributes.Price}</option>
  139. ))}
  140. </select>
  141. </div>
  142. <br />
  143. <label>Warna Product<span className="required">*</span></label>
  144. <div className="select-box" placeholder="Pilih Warna">
  145. <select className="form-select"
  146. name="product_color"
  147. onInput={(e) => {
  148. setFormValue({
  149. ...formValue,
  150. product_color: e.target.value.toString()
  151. })
  152. }}
  153. >
  154. <option value="0">- Pilih Product Color -</option>
  155. {detailproduct.Product_colors.data.map((option) => (
  156. <option value={option.attributes.Color}>{option.attributes.Color}</option>
  157. ))}
  158. </select>
  159. </div>
  160. <br />
  161. {/* <button type="submit">Add to Cart</button> */}
  162. <a className="add-to-wishlist-btn" title="Add to Wishlist">
  163. <Icon.Heart />
  164. </a>
  165. </form>
  166. <div className="custom-payment-options">
  167. <span>Metode Pembayaran : </span>
  168. <div className="payment-methods">
  169. <img src="/images/payment-image/Mastercard.svg" width="50px" alt="image" />
  170. <img src="/images/payment-image/Visa.svg" width="50px" alt="image" />
  171. <img src="/images/payment-image/BNI.svg" width="50px" alt="image" />
  172. <img src="/images/payment-image/BCA.svg" width="50px" alt="image" />
  173. <img src="/images/payment-image/Mandiri.svg" width="50px" alt="image" />
  174. <img src="/images/payment-image/BSI.svg" width="50px" alt="image" />
  175. <img src="/images/payment-image/Indomaret.svg" width="50px" alt="image" />
  176. </div>
  177. </div>
  178. <div className="products-share-social">
  179. <span>Share:</span>
  180. <ul>
  181. <li>
  182. <a className="facebook" target="_blank">
  183. <Icon.Facebook />
  184. </a>
  185. </li>
  186. <li>
  187. <a className="twitter" target="_blank">
  188. <Icon.Twitter />
  189. </a>
  190. </li>
  191. <li>
  192. <a className="instagram" target="_blank">
  193. <Icon.Instagram />
  194. </a>
  195. </li>
  196. </ul>
  197. </div>
  198. </div>
  199. </div>
  200. <div className="col-lg-12 col-md-12">
  201. <div className="products-details-tabs">
  202. <Tabs>
  203. <TabList>
  204. <Tab>Deskripsi</Tab>
  205. {/* <Tab>Info Penting</Tab> */}
  206. <Tab>Spesifikasi</Tab>
  207. {/* <Tab>Review</Tab> */}
  208. </TabList>
  209. <TabPanel>
  210. <div className="products-description" align="left">
  211. <p>{util.htmlParse(detailproduct.Description)}</p>
  212. </div>
  213. </TabPanel>
  214. {/* <TabPanel>
  215. <div className="products-description" align="left">
  216. <p>
  217. <p><b>Informasi mengenai prosedur pengiriman, pembelian dan dokumen</b></p>
  218. <ul>
  219. <li>Kota Palembang, Kayu Agung, Prabumulih, Pangkalan Balai, Betung : 2-3 hari kerja*</li>
  220. <li>Untuk daerah Sungsang/daerah lain yang menggunakan kapal motor, maka motor diantar sampai di dermaga sesuai dengan jadwal yang diinformasikan</li>
  221. <li>Sekayu, Babat Toman, Pendopo, Baturaja, Martapura, Muara Dua, Lahat, Tanjung Enim, Tugu Mulyo, Belitang : 4-5 hari kerja*</li>
  222. <li>Lubuk Linggau, Curup, Pagar Alam : 6-7 hari kerja*</li>
  223. </ul>
  224. <p><b>Harga</b></p>
  225. <ul>
  226. <li>Harga OTR sudah termasuk biaya pengiriman dan BBN, kecuali tambahan pengenaan pajak progresif kepemilikan kendaraan bermotor (sesuai dengan peraturan yang telah ditetapkan oleh pemerintah)</li>
  227. <li>Harga OTR diatas berlaku untuk KTP domisili PALEMBANG, OGAN ILIR, dan BANYUASIN, diluar wilayah tersebut harap menghubungi kami untuk konfirmasi harga.</li>
  228. <li>Harga OTR sewaktu-waktu dapat berubah.</li>
  229. <li>Proses pemesanan sepeda motor tidak dapat dibatalkan dan warna yang sudah dipesan tidak dapat diubah.</li>
  230. <li>Proses pemesanan yang terkait waktu pengiriman produk dan kelengkapan dokumen yang dibutuhkan untuk pembuatan STNK dan BPKB akan diinformasikan oleh pihak Dealer.</li>
  231. <li>Proses pengiriman sepeda motor akan dilakukan setelah pelunasan transaksi dan dokumen yang dibutuhkan telah lengkap.</li>
  232. </ul>
  233. <p><b>Dokumen</b></p>
  234. <ul>
  235. <li>Proses pembuatan STNK setelah KTP diterima oleh pihak dealer adalah 19-25 hari kerja*.</li>
  236. <li>Proses pembuatan BPKB adalah 3-4 bulan.</li>
  237. <li>STNK dan BPKB wajib diambil sendiri oleh pihak yang bersangkutan sesuai dengan identitas yang tertera STNK di dealer yang ditunjuk.</li>
  238. <li>Untuk proses pembuatan STNK dan BPKB sepenuhnya menjadi tanggung jawab dealer terkait.</li>
  239. <li>Buku servis diterima bersamaan dengan pengiriman sepeda motor.</li>
  240. </ul>
  241. <p><b>*tidak termasuk Sabtu dan Minggu.</b></p>
  242. </p>
  243. </div>
  244. </TabPanel> */}
  245. <TabPanel>
  246. <div className="products-description">
  247. <ul className="additional-information">
  248. <h2>Spesifikasi Mesin</h2>
  249. {util.htmlParse(detailproduct.Machine)}<br /><br />
  250. <h2>Spesifikasi Dimensi</h2>
  251. {util.htmlParse(detailproduct.Dimension)}<br /><br />
  252. <h2>Spesifikasi Rangka</h2>
  253. {util.htmlParse(detailproduct.Structure)}<br /><br />
  254. <h2>Spesifikasi Kelistrikan</h2>
  255. {util.htmlParse(detailproduct.Voltage)}<br /><br />
  256. </ul>
  257. </div>
  258. </TabPanel>
  259. {/* <TabPanel>
  260. <div className="products-reviews">
  261. <h3>Customer Reviews</h3>
  262. <p>There are no reviews yet.</p>
  263. <form className="review-form">
  264. <p>Rate this item:</p>
  265. <div className="star-rating">
  266. <i className='bx bxs-star'></i>
  267. <i className='bx bxs-star'></i>
  268. <i className='bx bxs-star'></i>
  269. <i className='bx bxs-star'></i>
  270. <i className='bx bxs-star'></i>
  271. <p>Very good product!</p>
  272. </div>
  273. <div className="row">
  274. <div className="col-lg-12">
  275. <div className="form-group">
  276. <textarea name="review-message" id="message" cols="30" rows="4" placeholder="Write your review*" className="form-control"></textarea>
  277. </div>
  278. </div>
  279. <div className="col-lg-6 col-md-6">
  280. <div className="form-group">
  281. <input type="text" placeholder="Name*" className="form-control" />
  282. </div>
  283. </div>
  284. <div className="col-lg-6 col-md-6">
  285. <div className="form-group">
  286. <input type="email" placeholder="Email*" className="form-control" />
  287. </div>
  288. </div>
  289. <div className="col-lg-12 col-md-12">
  290. <button type="submit" className="btn btn-primary">Submit</button>
  291. </div>
  292. </div>
  293. </form>
  294. </div>
  295. </TabPanel> */}
  296. </Tabs>
  297. </div>
  298. </div>
  299. </div>
  300. </div>
  301. </div>
  302. </>
  303. )
  304. }
  305. export default ProductDetails;