Faqs.tsx 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688
  1. "use client";
  2. import { useState } from "react";
  3. import HeadBack from "@/components/head/HeadBack";
  4. type FaqItem = {
  5. q: React.ReactNode;
  6. a: React.ReactNode;
  7. };
  8. type FaqSection = {
  9. title: string;
  10. items: FaqItem[];
  11. };
  12. type FaqGroup = {
  13. groupTitle: string;
  14. sections: FaqSection[];
  15. };
  16. const faqData: FaqGroup[] = [
  17. {
  18. groupTitle: "Question Before Purchase",
  19. sections: [
  20. {
  21. title: "1. About Order",
  22. items: [
  23. {
  24. q: "How do I pay for an order?",
  25. a: (
  26. <div className="space-y-2">
  27. <p>
  28. To pay for your order on www.asteriahair.com, follow the steps
  29. below:
  30. </p>
  31. <p>
  32. (1) Select the hair items you would like to order and click
  33. the "Buy Now" button.
  34. </p>
  35. <p>
  36. (2) Fill in the address information and choose the shipping
  37. method and payment method on the checkout page, then click the
  38. "Place Order" button.
  39. </p>
  40. <p>(3) Go to the payment platform to complete the payment.</p>
  41. </div>
  42. ),
  43. },
  44. {
  45. q: "How do I use my coupon code? Can I use two coupon codes in one order?",
  46. a: (
  47. <div className="space-y-2">
  48. <p>
  49. The purchasing process on our website is: Buy Now &gt Checkout
  50. &gt Confirm &gt Payment.
  51. </p>
  52. <p>
  53. When you are in the process of Checkout or Confirm, you can
  54. apply the coupon code if you have one, and please note that
  55. only one coupon code is allowed for one order.
  56. </p>
  57. </div>
  58. ),
  59. },
  60. {
  61. q: "I have bought something but seen it at a different price on your website.",
  62. a: (
  63. <p>
  64. As an online business we act much faster in adjusting our prices
  65. in response to trends, stock and demand from customers. It's our
  66. general view not to refund the difference.
  67. </p>
  68. ),
  69. },
  70. {
  71. q: "Is there any hidden charges to my order?",
  72. a: (
  73. <p>
  74. Basically, the final amount you will pay is just the price of
  75. the product plus shipping(if you choose a paid shipping).
  76. Sometimes, because of the exchange rate of currency, when the
  77. payment finally cleared through the bank, the total amount will
  78. be a little different to the price of the product, but its only
  79. less than 0.5% of the total price.
  80. </p>
  81. ),
  82. },
  83. {
  84. q: "Do I have to pay the customs duties & taxes?",
  85. a: (
  86. <p>
  87. Orders shipped outside of the United States may be subject to
  88. import taxes, customs duties and fees levied by the destination
  89. country. The recipient of an international shipment may be
  90. subject to such import taxes, customs duties and fees.
  91. Additional charges for customs clearance must be fulfilled by
  92. the recipient. Customs policies vary widely, the customs duty is
  93. determined by the custom of your country, and it is uncertain to
  94. know how much about it, you should contact your local customs
  95. office for more information.
  96. </p>
  97. ),
  98. },
  99. ],
  100. },
  101. {
  102. title: "2. About Products",
  103. items: [
  104. {
  105. q: "Is your hair 100% human hair?",
  106. a: <p>Yes, we only sell high quality 100% human virgin hair.</p>,
  107. },
  108. {
  109. q: "Can I ask for small/large cap?",
  110. a: (
  111. <div className="space-y-2">
  112. <p>
  113. Our Stock Size is Medium cap which is 22.5 inches, and we have
  114. the combs and elastic band or adjustable straps inside to help
  115. fit the head. Kindly Reminder:
  116. </p>
  117. <p>
  118. For full Lace Wig and 360 Lace Wig: The size of our full lace
  119. wigs and 360 lace wigs could not be changed.
  120. </p>
  121. <p>
  122. For U-part Wig and Headband Wig: The cap size of U-part wigs
  123. and headband wigs could not be changed, but the U-part wig’s
  124. top is empty so you can adjust the wig according to your head
  125. size, and the headband wig’s cap can be available with
  126. adjustable strap, elastic velcro snapping design wig with 5
  127. Clips, which can fit all head sizes perfectly, cap can be
  128. available with adjustable strap.
  129. </p>
  130. <p>For lace front / lace closure wig:</p>
  131. <p>
  132. (1) Small Size is 21.5 inches, Large Size is 23.5 inches, you
  133. should know your own size and make a suitable decision.
  134. </p>
  135. <p>
  136. (2) If you change to those special cap sizes, you may need to
  137. wait about another extra 5-10 days. Would you like to wait? If
  138. you can wait and you want to ask for the small/big cap, please
  139. remember to leave the comments about it when you check out or
  140. send emails to us. Customer service email:{" "}
  141. <a
  142. href="mailto:server@asteriahair.com"
  143. className="text-blue-600 underline"
  144. >
  145. server@asteriahair.com
  146. </a>
  147. .
  148. </p>
  149. <p>
  150. (3) Custom-sized hairnets are subject to an additional charge
  151. of approximately $10.
  152. </p>
  153. </div>
  154. ),
  155. },
  156. {
  157. q: "Does your wig come in bleached?",
  158. a: (
  159. <p>
  160. Yes, The lace of our wigs are slightly bleached under the
  161. condition that the hair would not shed, if you need more
  162. bleaching, we advise to find a professional hairstylist to help.
  163. </p>
  164. ),
  165. },
  166. {
  167. q: "Is your wig pre plucked?",
  168. a: (
  169. <p>
  170. Yes, all of our wigs come slightly pre plucked, you can
  171. customize it to your liking once you receive it.
  172. </p>
  173. ),
  174. },
  175. {
  176. q: "Can your hair be dyed / bleached?",
  177. a: (
  178. <div className="space-y-2">
  179. <p>
  180. Yes. Our hairs are 100% human virgin hair and all our natural
  181. color hair can be dyed or bleached to #27, as a general rule
  182. it is easier to darken the hair than to lighter the hair. We
  183. do suggest getting a professional opinion by an experienced
  184. colorist and having your hairdresser dye the hair as you will
  185. get the results you want, coloring them yourself always poses
  186. a high risk of not coming out the shade you want.
  187. </p>
  188. <p>
  189. We would advise for a one clip weft to be tested prior to
  190. coloring or restyling the full set to make sure the resulting
  191. shade is what you anticipate.
  192. </p>
  193. <p>
  194. Note: Any dyeing and bleaching is done at the customer's own
  195. discretion and we cannot be held accountable if the results do
  196. not come out as intended.
  197. </p>
  198. </div>
  199. ),
  200. },
  201. {
  202. q: "How many hair bundles can make a full head?",
  203. a: (
  204. <p>
  205. Normally the weight of 1 bundle is 95g-105g,we suggest you to
  206. take 3-4 bundles for a full head,Especially for the length from
  207. 20inch to 30inch,4 bundles are necessary.
  208. </p>
  209. ),
  210. },
  211. ],
  212. },
  213. {
  214. title: "3. About Payment",
  215. items: [
  216. {
  217. q: "What types of payment do you accept?",
  218. a: (
  219. <p>
  220. We accept the following payment methods: Paypal, Credit Cards
  221. (Visa Card, MasterCard, and American Express), Klarna, Western
  222. Union, Moneygram. If you have any payment problems, please
  223. contact with us:{" "}
  224. <a
  225. href="mailto:server@asteriahair.com"
  226. className="text-blue-600 underline"
  227. >
  228. server@asteriahair.com
  229. </a>
  230. .
  231. </p>
  232. ),
  233. },
  234. {
  235. q: "Do you accept payment by installment?",
  236. a: <p>Yes, Now we support PayPal Pay later and Klarna payment.</p>,
  237. },
  238. {
  239. q: "When I pay via PayPal, do I have to have a PayPal account? Can I use credit cards?",
  240. a: (
  241. <p>
  242. It is not necessary to have a PayPal account to order, you can
  243. pay with Credit/Debit Card directly. When you check out, please
  244. click paypal button, then you can choose the "Pay with Credit
  245. Card" on pop-up payment page.
  246. </p>
  247. ),
  248. },
  249. {
  250. q: "Why is my card declined?",
  251. a: (
  252. <p>
  253. Sometimes when your card is expired, insufficient balance or
  254. poor credit which may have a record of Chargeback or others will
  255. lead to card declined when paying. So we suggest customers not
  256. take a dispute for no reasons, because your credit record will
  257. be affected, and your next shopping will be declined. When your
  258. card is declined, you can call your bank for the problem. Or you
  259. can try another card. If you still have problems, please send an
  260. email to us :{" "}
  261. <a
  262. href="mailto:server@asteriahair.com"
  263. className="text-blue-600 underline"
  264. >
  265. server@asteriahair.com
  266. </a>
  267. .
  268. </p>
  269. ),
  270. },
  271. {
  272. q: "Why did my payment fail?",
  273. a: (
  274. <div className="space-y-2">
  275. <p>
  276. If your payment for an order has failed, please check it is
  277. not due to the following situations:
  278. </p>
  279. <p>
  280. (1) Card security code failed, Please note that an incorrect
  281. card security code could cause payment failure. Card security
  282. code is the short numeric code on the back of your credit
  283. card. Please verify that you have entered the correct card
  284. security code and try again.
  285. </p>
  286. <p>
  287. (2) Insufficient fund, If you meet the insufficient fund error
  288. log when you make payment by credit card, please make sure
  289. that you have sufficient funds in your account and that
  290. payment for your order does not exceed your credit limit.
  291. </p>
  292. <p>
  293. (3) Please also make sure you have used a Visa or MasterCard
  294. personal credit card to finish payment, because at present
  295. debit card or business card is unable to be supported.
  296. </p>
  297. <p>
  298. (4) Exceed limit, Please make sure the order amount does not
  299. exceed your credit limit,or the payment is unable to go
  300. through smoothly.
  301. </p>
  302. </div>
  303. ),
  304. },
  305. {
  306. q: "If I pay on your website, Is my information safe?",
  307. a: (
  308. <p>
  309. We are sure that our website is legal, which has been certified
  310. by the card organization. So please don’t worry about that. Your
  311. payment information is kept by your bank or card organization,
  312. but not saved by us. We only use your shipping info for
  313. delivery. Your information is safe and we will keep your
  314. information confidential.
  315. </p>
  316. ),
  317. },
  318. {
  319. q: "Can you send me an invoice?",
  320. a: (
  321. <p>
  322. Yes, we can send you the invoice via Paypal Or Klarna if you
  323. need, just feel free to contact us via email:{" "}
  324. <a
  325. href="mailto:server@asteriahair.com"
  326. className="text-blue-600 underline"
  327. >
  328. server@asteriahair.com
  329. </a>
  330. .
  331. </p>
  332. ),
  333. },
  334. ],
  335. },
  336. {
  337. title: "4. About Shipment",
  338. items: [
  339. {
  340. q: "How long will my hair be shipped after I place an order?",
  341. a: (
  342. <p>
  343. Generally, your package will be shipped within 24 hours after
  344. order confirm (except Weekends and Holiday). However, we may
  345. need to wait for 2 or 3 days for the stock at times, thus the
  346. delivery will be delayed for 2 or 3 days.
  347. </p>
  348. ),
  349. },
  350. {
  351. q: "Which express do you use? How long can I receive my order?",
  352. a: (
  353. <p>
  354. We use DHL, FedEx , USPS, GES, TNT, DPEX or UPS. Generally, the
  355. package will be delivered within 3-7 business days to most
  356. countries once shipped out. The time you receive your order will
  357. depend on many factors, such as the shipping method and the
  358. location of the shipping address. Please be aware of that bad
  359. weathers, pandemic may cause the shipping delays sometimes. Once
  360. your order has shipped out, you will receive the tracking number
  361. by email.
  362. </p>
  363. ),
  364. },
  365. {
  366. q: "Can you provide the Overnight / Expedite shipping service?",
  367. a: (
  368. <p>
  369. 1-2 day expedite shipping is available for USA orders if the
  370. hair you want is in stock in our US warehouse. Please contact us
  371. to confirm it before you order. Our Customer service email:{" "}
  372. <a
  373. href="mailto:server@asteriahair.com"
  374. className="text-blue-600 underline"
  375. >
  376. server@asteriahair.com
  377. </a>
  378. .
  379. </p>
  380. ),
  381. },
  382. {
  383. q: "Can I receive my order on Saturday or Sunday?",
  384. a: (
  385. <p>
  386. Most express companies are weekend off. If the package has been
  387. arrived your city, you can go to the local sites to pick it up.
  388. </p>
  389. ),
  390. },
  391. {
  392. q: "I am in a remote area, can you ship it?",
  393. a: (
  394. <p>
  395. Generally, we can ship to most of the countries and regions
  396. worldwide, but individual places may be charged remote fees. If
  397. the zip code in the area can not be found on the express
  398. delivery system, we will not be able to ship it, you need to
  399. provide a new address.
  400. </p>
  401. ),
  402. },
  403. {
  404. q: "Can I use Po.box as the shipping address?",
  405. a: (
  406. <p>
  407. We don't accept PO.box (including FPO or APO) as the shipping
  408. address, because the Express(DHL/FedEx/UPS/USPS/GES/TNT) can't
  409. deliver and we only accept the physical address as shipping
  410. address.
  411. </p>
  412. ),
  413. },
  414. ],
  415. },
  416. {
  417. title: "5. About Account",
  418. items: [
  419. {
  420. q: "How to register a member?",
  421. a: (
  422. <div className="space-y-1">
  423. <p>(1) Open the Web page, click on the "sign up".</p>
  424. <p>
  425. (2) You need fill out your mailbox address、password and
  426. telephone number.
  427. </p>
  428. <p>
  429. (3) Click “Create An Account” the specified page appears, you
  430. need to improve your information.
  431. </p>
  432. </div>
  433. ),
  434. },
  435. {
  436. q: "How to reset my password?",
  437. a: (
  438. <p>
  439. Go to sign in page and click forget password. We will quickly
  440. email you a link to reset your password, if you don't get the
  441. email, please check your spam email at first. If still no email,
  442. please feel free to contact customer service, we can help reset
  443. your password.
  444. </p>
  445. ),
  446. },
  447. {
  448. q: "How can I check my reward points?",
  449. a: (
  450. <p>
  451. Please be aware of that you need to be registered to earn and
  452. spend Reward Points. Sign in your account and you can check your
  453. reward points at “Points” Section. For more details, please
  454. check our reward points page.
  455. </p>
  456. ),
  457. },
  458. ],
  459. },
  460. ],
  461. },
  462. {
  463. groupTitle: "Question After Purchase",
  464. sections: [
  465. {
  466. title: "1. About Track Order",
  467. items: [
  468. {
  469. q: "How to track my order?",
  470. a: (
  471. <div className="space-y-2">
  472. <p>
  473. Method 1: Log into “MY ACCOUNT” to view the status of your
  474. order Track your shipment by using the tracking number
  475. provided to you once your items have been shipped. You cannot
  476. track your order before it has been shipped. If you don’t know
  477. what your tracking number is or if you’re having difficulty
  478. tracking your package, please feel free to contact our
  479. customer service department for assistance.
  480. </p>
  481. <p>
  482. Method 2: You can use your order number or shipment number to
  483. track your order though our Track Order page.
  484. </p>
  485. </div>
  486. ),
  487. },
  488. {
  489. q: "Why haven't I received my order yet?",
  490. a: (
  491. <p>
  492. Once the package has been shipped out, we will email you the
  493. tracking number, you can check the status. If not, please feel
  494. free to contact our customer service:{" "}
  495. <a
  496. href="mailto:server@asteriahair.com"
  497. className="text-blue-600 underline"
  498. >
  499. server@asteriahair.com
  500. </a>
  501. , we will help you to check it.
  502. </p>
  503. ),
  504. },
  505. {
  506. q: "Why is the shipment of my order always at the pending status?",
  507. a: (
  508. <p>
  509. If it shows abnormality or pending in short time, that maybe
  510. normal transport state. If it lasts a long time( over 1 day),
  511. you can call the DHL/FedEx/UPS/USPS/TNT to ask about what is
  512. going on about it. Or you can send us the Email to{" "}
  513. <a
  514. href="mailto:server@asteriahair.com"
  515. className="text-blue-600 underline"
  516. >
  517. server@asteriahair.com
  518. </a>
  519. , we will help you out.
  520. </p>
  521. ),
  522. },
  523. {
  524. q: "If I'm not at home, how can I sign for my package? Can I have a delivery service without signature",
  525. a: (
  526. <p>
  527. If you are not at home, you can ask your family and neighbors to
  528. sign for it for you, or you can contact the local express
  529. customer service and reschedule with them to deliver your
  530. package, or you can choose to pick up the package yourself. In
  531. order for you to successfully receive the package, we recommend
  532. that you sign for it yourself, after you applied the service
  533. without signature, if the package is lost or stolen, we do not
  534. take any responsibility.
  535. </p>
  536. ),
  537. },
  538. {
  539. q: "Why the shipment status shows that I have signed. But I did not receive the parcel yet.",
  540. a: (
  541. <p>
  542. Once that happens, it means someone has signed the package for
  543. you. It may be your neighbor or family and friends, It is also
  544. possible that the courier drop your package around your house.
  545. Please confirm it first. If not, please contact the express
  546. company first to tell them your situation and let them help you
  547. find the package, and please ask them as many details as
  548. possible, whch is important to find the package later.
  549. </p>
  550. ),
  551. },
  552. ],
  553. },
  554. {
  555. title: "2. About Return / Refunds",
  556. items: [
  557. {
  558. q: "What is your return & exchange policy?",
  559. a: (
  560. <p>
  561. We offer 30 days no reason return if the hair is in its original
  562. state. For more details please check our return policy /
  563. exchange policy page.
  564. </p>
  565. ),
  566. },
  567. {
  568. q: "When will I get a refund after returning the package?",
  569. a: (
  570. <p>
  571. A full refund will be provided to the original method of payment
  572. after we have received, inspected and confirmed. All customers
  573. must contact us after sending the package back and provide us
  574. with the tracking information in order for us to process the
  575. refund. Some financial institutions can take up to 3 business
  576. days to process the refund. Please allow a few business days for
  577. your financial institution to reflect the refund on your
  578. statement prior to contacting us.
  579. </p>
  580. ),
  581. },
  582. {
  583. q: "If I refuse to accept the package, can I get a full refund?",
  584. a: (
  585. <p>
  586. We do not accept the refusal without any reasons. If you refuse
  587. to sign the package and lead to the return, you will need to pay
  588. for the return shipping and the shipping fee we paid the first
  589. time. Any expenses incurred during the return of the parcel will
  590. also be deducted from your payment. So we suggest that customers
  591. contact us within 24 hours via email before shipping if they
  592. have any problems (such as place the wrong order/ want to cancel
  593. /want to exchange), so that we can help you to solve it timely.
  594. </p>
  595. ),
  596. },
  597. ],
  598. },
  599. ],
  600. },
  601. ];
  602. export default function Faqs() {
  603. const [openSections, setOpenSections] = useState<string[]>([]);
  604. const [openItems, setOpenItems] = useState<string[]>([]);
  605. const toggleSection = (g: number, s: number) => {
  606. const k = `${g}-${s}`;
  607. setOpenSections((p) =>
  608. p.includes(k) ? p.filter((x) => x !== k) : [...p, k],
  609. );
  610. };
  611. const toggleItem = (g: number, s: number, i: number) => {
  612. const k = `${g}-${s}-${i}`;
  613. setOpenItems((p) => (p.includes(k) ? p.filter((x) => x !== k) : [...p, k]));
  614. };
  615. return (
  616. <>
  617. <HeadBack />
  618. <div className="max-w-4xl mx-auto px-4 py-12">
  619. {faqData.map((group, groupIdx) => (
  620. <div key={groupIdx} className="mb-14">
  621. <h2 className="text-2xl font-bold mb-6 text-gray-800">
  622. {group.groupTitle}
  623. </h2>
  624. <div className="space-y-4">
  625. {group.sections.map((sec, secIdx) => {
  626. const secKey = `${groupIdx}-${secIdx}`;
  627. const secOpen = openSections.includes(secKey);
  628. return (
  629. <div
  630. key={secKey}
  631. className="border border-gray-200 rounded-lg overflow-hidden"
  632. >
  633. <button
  634. onClick={() => toggleSection(groupIdx, secIdx)}
  635. className="w-full flex justify-between items-center px-5 py-3 bg-gray-50 text-left font-semibold text-gray-800"
  636. >
  637. {sec.title}
  638. <span className="text-xl">{secOpen ? "−" : "+"}</span>
  639. </button>
  640. {secOpen && (
  641. <div className="divide-y divide-gray-100">
  642. {sec.items.map((item, itemIdx) => {
  643. const itemKey = `${groupIdx}-${secIdx}-${itemIdx}`;
  644. const itemOpen = openItems.includes(itemKey);
  645. return (
  646. <div key={itemKey} className="px-5 py-4">
  647. <button
  648. onClick={() =>
  649. toggleItem(groupIdx, secIdx, itemIdx)
  650. }
  651. className="w-full flex justify-between items-center text-left font-medium text-gray-700"
  652. >
  653. <span>{item.q}</span>
  654. <span className="text-xl ml-2">
  655. {itemOpen ? "−" : "+"}
  656. </span>
  657. </button>
  658. {itemOpen && (
  659. <div className="mt-3 text-gray-600 text-sm md:text-base">
  660. {item.a}
  661. </div>
  662. )}
  663. </div>
  664. );
  665. })}
  666. </div>
  667. )}
  668. </div>
  669. );
  670. })}
  671. </div>
  672. </div>
  673. ))}
  674. </div>
  675. </>
  676. );
  677. }