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.

348 wiersze
20 KiB

  1. import React 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 ReactHtmlParser from "react-html-parser";
  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 class='bx bx-chevron-left'></i>",
  28. "<i class='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. product_otr: "",
  38. });
  39. const MotorDetail = detailproduct.map((data) => {
  40. return (
  41. <div>
  42. <PageBanner pageTitle={data.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. <img src={`${backend}${data.img[0]["url"]}`} />
  52. <img src={`${backend}${data.img[1]["url"]}`} />
  53. <img src={`${backend}${data.img[2]["url"]}`} />
  54. <img src={`${backend}${data.img[3]["url"]}`} />
  55. <img src={`${backend}${data.img[4]["url"]}`} />
  56. <img src={`${backend}${data.img[5]["url"]}`} />
  57. </OwlCarousel>
  58. </div>
  59. <div className="col-lg-7">
  60. <div className="products-details">
  61. <h3>
  62. <NumberFormat value={data.price} displayType={'text'} thousandSeparator={true} prefix={'Rp.'} /> s/d <NumberFormat value={data.price2} displayType={'text'} thousandSeparator={true} prefix={'Rp.'} />
  63. </h3>
  64. <ul className="rating">
  65. <li><i className="flaticon-star-1"></i></li>
  66. <li><i className="flaticon-star-1"></i></li>
  67. <li><i className="flaticon-star-1"></i></li>
  68. <li><i className="flaticon-star-1"></i></li>
  69. <li><i className="flaticon-star-1"></i></li>
  70. </ul>
  71. <div className="availability">
  72. Availability: <span>{data.stock}</span>
  73. </div>
  74. <form
  75. onSubmit={async (e) => {
  76. e.preventDefault();
  77. var newformValue = {
  78. ...formValue,
  79. product_img: detailproduct.img,
  80. product_name: detailproduct[0].name,
  81. product_price: detailproduct[0].price,
  82. }
  83. setFormValue(newformValue)
  84. console.log(JSON.stringify(newformValue));
  85. const response = await fetch(
  86. "/api/transaction/AddToCart",
  87. {
  88. method: "POST",
  89. headers: {
  90. 'Content-Type': 'application/json'
  91. },
  92. body: JSON.stringify(newformValue),
  93. }
  94. );
  95. if (response.ok) {
  96. var res = await response.json();
  97. console.log("cek response :", res);
  98. if (res["STATUS"] === 1) {
  99. res["DATA"]["cart"];
  100. swal("Produk Berhasil Ditambah ke Keranjang", "Silahkan Cek Keranjang Belanja Anda", "success");
  101. }
  102. else {
  103. swal("Produk Gagal Ditambah ke Keranjang", "Silahkan Coba Lagi", "error");
  104. }
  105. } else {
  106. swal("Transaksi Gagal", "Silahkan Coba Lagi", "error");
  107. }
  108. return false;
  109. }}
  110. >
  111. <label>Product OTR <span className="required">*</span></label>
  112. <div className="select-box" placeholder="Pilih Harga OTR">
  113. <select className="form-select"
  114. name="product_otr"
  115. onInput={(e) => {
  116. setFormValue({
  117. ...formValue,
  118. product_otr: e.target.value.toString()
  119. })
  120. }}
  121. >
  122. <option value="0">- Pilih Product OTR -</option>
  123. <option value={"Palembang"}>OTR Palembang</option>
  124. <option value={"Sumsel"}>OTR Sumatera Selatan</option>
  125. <option value={"Bengkulu"}>OTR Bengkulu</option>
  126. </select>
  127. </div>
  128. <br />
  129. <label>Product Color <span className="required">*</span></label>
  130. <div className="select-box" placeholder="Pilih Harga OTR">
  131. <select className="form-select"
  132. name="product_color"
  133. onInput={(e) => {
  134. setFormValue({
  135. ...formValue,
  136. product_color: e.target.value.toString()
  137. })
  138. }}
  139. >
  140. <option value="0">- Pilih Product Color -</option>
  141. <option value="Putih">Putih</option>
  142. <option value="Merah">Merah</option>
  143. <option value="Hitam">Hitam</option>
  144. <option value="Abu-Abu">Abu - Abu</option>
  145. </select>
  146. </div>
  147. <br />
  148. <button type="submit">Add to Cart</button>
  149. <a href="#" className="add-to-wishlist-btn" title="Add to Wishlist">
  150. <Icon.Heart />
  151. </a>
  152. </form>
  153. <div className="custom-payment-options">
  154. <span>Metode Pembayaran : </span>
  155. <div className="payment-methods">
  156. <img src="/images/payment-image/payment-img1.svg" alt="image" />
  157. <img src="/images/payment-image/payment-img2.svg" alt="image" />
  158. <img src="/images/payment-image/payment-img3.svg" alt="image" />
  159. <img src="/images/payment-image/payment-img4.svg" alt="image" />
  160. <img src="/images/payment-image/payment-img5.svg" alt="image" />
  161. <img src="/images/payment-image/payment-img6.svg" alt="image" />
  162. <img src="/images/payment-image/payment-img7.svg" alt="image" />
  163. </div>
  164. </div>
  165. <div className="products-share-social">
  166. <span>Share:</span>
  167. <ul>
  168. <li>
  169. <a href="#" className="facebook" target="_blank">
  170. <Icon.Facebook />
  171. </a>
  172. </li>
  173. <li>
  174. <a href="#" className="twitter" target="_blank">
  175. <Icon.Twitter />
  176. </a>
  177. </li>
  178. <li>
  179. <a href="#" className="linkedin" target="_blank">
  180. <Icon.Linkedin />
  181. </a>
  182. </li>
  183. <li>
  184. <a href="#" className="instagram" target="_blank">
  185. <Icon.Instagram />
  186. </a>
  187. </li>
  188. </ul>
  189. </div>
  190. </div>
  191. </div>
  192. <div className="col-lg-12 col-md-12">
  193. <div className="products-details-tabs">
  194. <Tabs>
  195. <TabList>
  196. <Tab>Deskripsi</Tab>
  197. <Tab>Info Penting</Tab>
  198. <Tab>Additional Information</Tab>
  199. <Tab>Review</Tab>
  200. </TabList>
  201. <TabPanel>
  202. <div className="products-description" align="left">
  203. <p>{ReactHtmlParser(data.description)}</p>
  204. </div>
  205. </TabPanel>
  206. <TabPanel>
  207. <div className="products-description" align="left">
  208. <p>
  209. <p><b>Informasi mengenai prosedur pengiriman, pembelian dan dokumen</b></p>
  210. <ul>
  211. <li>Kota Palembang, Kayu Agung, Prabumulih, Pangkalan Balai, Betung : 2-3 hari kerja*</li>
  212. <li>Untuk daerah Sungsang/daerah lain yang menggunakan kapal motor, maka motor diantar sampai di dermaga sesuai dengan jadwal yang diinformasikan</li>
  213. <li>Sekayu, Babat Toman, Pendopo, Baturaja, Martapura, Muara Dua, Lahat, Tanjung Enim, Tugu Mulyo, Belitang : 4-5 hari kerja*</li>
  214. <li>Lubuk Linggau, Curup, Pagar Alam : 6-7 hari kerja*</li>
  215. </ul>
  216. <p><b>Harga</b></p>
  217. <ul>
  218. <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>
  219. <li>Harga OTR diatas berlaku untuk KTP domisili PALEMBANG, OGAN ILIR, dan BANYUASIN, diluar wilayah tersebut harap menghubungi kami untuk konfirmasi harga.</li>
  220. <li>Harga OTR sewaktu-waktu dapat berubah.</li>
  221. <li>Proses pemesanan sepeda motor tidak dapat dibatalkan dan warna yang sudah dipesan tidak dapat diubah.</li>
  222. <li>Proses pemesanan yang terkait waktu pengiriman produk dan kelengkapan dokumen yang dibutuhkan untuk pembuatan STNK dan BPKB akan diinformasikan oleh pihak Dealer.</li>
  223. <li>Proses pengiriman sepeda motor akan dilakukan setelah pelunasan transaksi dan dokumen yang dibutuhkan telah lengkap.</li>
  224. </ul>
  225. <p><b>Dokumen</b></p>
  226. <ul>
  227. <li>Proses pembuatan STNK setelah KTP diterima oleh pihak dealer adalah 19-25 hari kerja*.</li>
  228. <li>Proses pembuatan BPKB adalah 3-4 bulan.</li>
  229. <li>STNK dan BPKB wajib diambil sendiri oleh pihak yang bersangkutan sesuai dengan identitas yang tertera STNK di dealer yang ditunjuk.</li>
  230. <li>Untuk proses pembuatan STNK dan BPKB sepenuhnya menjadi tanggung jawab dealer terkait.</li>
  231. <li>Buku servis diterima bersamaan dengan pengiriman sepeda motor.</li>
  232. </ul>
  233. <p><b>*tidak termasuk Sabtu dan Minggu.</b></p>
  234. </p>
  235. </div>
  236. </TabPanel>
  237. <TabPanel>
  238. <div className="products-description">
  239. <ul className="additional-information">
  240. <h2>Spesifikasi Mesin</h2>
  241. {ReactHtmlParser(data.spesifikasi_mesin)}<br /><br />
  242. <h2>Spesifikasi Dimensi</h2>
  243. {ReactHtmlParser(data.spesifikasi_dimensi)}<br /><br />
  244. <h2>Spesifikasi Rangka</h2>
  245. {ReactHtmlParser(data.spesifikasi_rangka)}<br /><br />
  246. <h2>Spesifikasi Kelistrikan</h2>
  247. {ReactHtmlParser(data.spesifikasi_kelistrikan)}<br /><br />
  248. </ul>
  249. </div>
  250. </TabPanel>
  251. <TabPanel>
  252. <div className="products-reviews">
  253. <h3>Customer Reviews</h3>
  254. <p>There are no reviews yet.</p>
  255. <form className="review-form">
  256. <p>Rate this item:</p>
  257. <div className="star-rating">
  258. <i className='bx bxs-star'></i>
  259. <i className='bx bxs-star'></i>
  260. <i className='bx bxs-star'></i>
  261. <i className='bx bxs-star'></i>
  262. <i className='bx bxs-star'></i>
  263. <p>Very good product!</p>
  264. </div>
  265. <div className="row">
  266. <div className="col-lg-12">
  267. <div className="form-group">
  268. <textarea name="review-message" id="message" cols="30" rows="4" placeholder="Write your review*" className="form-control"></textarea>
  269. </div>
  270. </div>
  271. <div className="col-lg-6 col-md-6">
  272. <div className="form-group">
  273. <input type="text" placeholder="Name*" className="form-control" />
  274. </div>
  275. </div>
  276. <div className="col-lg-6 col-md-6">
  277. <div className="form-group">
  278. <input type="email" placeholder="Email*" className="form-control" />
  279. </div>
  280. </div>
  281. <div className="col-lg-12 col-md-12">
  282. <button type="submit" className="btn btn-primary">Submit</button>
  283. </div>
  284. </div>
  285. </form>
  286. </div>
  287. </TabPanel>
  288. </Tabs>
  289. </div>
  290. </div>
  291. </div>
  292. </div>
  293. </div>
  294. </div>
  295. );
  296. })
  297. return (
  298. <>
  299. {MotorDetail}
  300. </>
  301. )
  302. }
  303. export default ProductDetails;