@akinon/projectzero 2.0.0-beta.9 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (290) hide show
  1. package/CHANGELOG.md +191 -17
  2. package/app-template/.env.example +3 -0
  3. package/app-template/.github/instructions/account.instructions.md +749 -0
  4. package/app-template/.github/instructions/checkout.instructions.md +678 -0
  5. package/app-template/.github/instructions/default.instructions.md +279 -0
  6. package/app-template/.github/instructions/edge-cases.instructions.md +73 -0
  7. package/app-template/.github/instructions/routing.instructions.md +603 -0
  8. package/app-template/.github/instructions/settings.instructions.md +338 -0
  9. package/app-template/.gitignore +3 -0
  10. package/app-template/AGENTS.md +7 -0
  11. package/app-template/CHANGELOG.md +2065 -232
  12. package/app-template/Procfile +1 -1
  13. package/app-template/akinon.json +1 -4
  14. package/app-template/build.sh +10 -0
  15. package/app-template/docs/advanced-usage.md +111 -0
  16. package/app-template/docs/plugins.md +60 -25
  17. package/app-template/docs/sentry-usage.md +35 -0
  18. package/app-template/jest.config.ts +2 -2
  19. package/app-template/next-env.d.ts +1 -0
  20. package/app-template/{next.config.ts → next.config.mjs} +6 -7
  21. package/app-template/package.json +58 -50
  22. package/app-template/postcss.config.mjs +1 -4
  23. package/app-template/public/amex.svg +12 -0
  24. package/app-template/public/apple-pay.svg +16 -0
  25. package/app-template/public/assets/images/product-placeholder-1.jpg +0 -0
  26. package/app-template/public/assets/images/product-placeholder-2.jpg +0 -0
  27. package/app-template/public/assets/images/product-placeholder-3.jpg +0 -0
  28. package/app-template/public/assets/images/product-placeholder-4.jpg +0 -0
  29. package/app-template/public/google-pay.svg +16 -0
  30. package/app-template/public/locales/en/account.json +9 -4
  31. package/app-template/public/locales/en/auth.json +6 -7
  32. package/app-template/public/locales/en/basket.json +6 -6
  33. package/app-template/public/locales/en/blog.json +7 -0
  34. package/app-template/public/locales/en/category.json +3 -1
  35. package/app-template/public/locales/en/checkout.json +17 -4
  36. package/app-template/public/locales/en/common.json +61 -3
  37. package/app-template/public/locales/en/forgot_password.json +6 -7
  38. package/app-template/public/locales/en/product.json +84 -4
  39. package/app-template/public/locales/tr/account.json +9 -4
  40. package/app-template/public/locales/tr/auth.json +16 -17
  41. package/app-template/public/locales/tr/basket.json +4 -4
  42. package/app-template/public/locales/tr/blog.json +7 -0
  43. package/app-template/public/locales/tr/category.json +3 -1
  44. package/app-template/public/locales/tr/checkout.json +48 -36
  45. package/app-template/public/locales/tr/common.json +60 -2
  46. package/app-template/public/locales/tr/forgot_password.json +12 -13
  47. package/app-template/public/locales/tr/product.json +82 -0
  48. package/app-template/public/logo.svg +3 -27
  49. package/app-template/public/mastercard.svg +14 -0
  50. package/app-template/public/masterpass-javascript-sdk-web.min.js +1 -0
  51. package/app-template/public/promotion-banner.jpg +0 -0
  52. package/app-template/public/shop-pay.svg +12 -0
  53. package/app-template/public/visa.svg +12 -0
  54. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/[...prettyurl]/page.tsx +11 -11
  55. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/layout.tsx +4 -3
  56. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/orders/[id]/cancellation/page.tsx +13 -10
  57. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/orders/[id]/page.tsx +73 -51
  58. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/page.tsx +1 -1
  59. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/profile/page.tsx +2 -2
  60. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/address/stores/page.tsx +2 -2
  61. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/auth/page.tsx +1 -1
  62. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/basket/page.tsx +2 -2
  63. package/app-template/src/app/[pz]/blog/[slug]/page.tsx +120 -0
  64. package/app-template/src/app/[pz]/category/[pk]/page.tsx +37 -0
  65. package/app-template/src/app/[pz]/flat-page/[pk]/page.tsx +23 -0
  66. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/forms/[pk]/generate/page.tsx +2 -3
  67. package/app-template/src/app/[pz]/group-product/[pk]/page.tsx +93 -0
  68. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/landing-page/[pk]/page.tsx +2 -4
  69. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/layout.tsx +6 -11
  70. package/app-template/src/app/[pz]/list/page.tsx +26 -0
  71. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/not-found.tsx +5 -7
  72. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/orders/completed/[token]/page.tsx +6 -4
  73. package/app-template/src/app/[pz]/page.tsx +28 -0
  74. package/app-template/src/app/[pz]/pages/[slug]/page.tsx +19 -0
  75. package/app-template/src/app/[pz]/product/[pk]/page.tsx +102 -0
  76. package/app-template/src/app/[pz]/special-page/[pk]/page.tsx +35 -0
  77. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/users/email-set-primary/[[...id]]/page.tsx +3 -4
  78. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/users/registration/account-confirm-email/[[...id]]/page.tsx +3 -3
  79. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/users/reset/[[...id]]/page.tsx +41 -5
  80. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/xml-sitemap/[node]/route.ts +8 -6
  81. package/app-template/src/app/api/auth/[...nextauth]/route.ts +3 -0
  82. package/app-template/src/app/api/barcode-search/route.ts +1 -0
  83. package/app-template/src/app/api/cache/route.ts +1 -1
  84. package/app-template/src/app/api/form/[...id]/route.ts +1 -7
  85. package/app-template/src/app/api/image-proxy/route.ts +1 -0
  86. package/app-template/src/app/api/logout/route.ts +1 -1
  87. package/app-template/src/app/api/product-categories/route.ts +1 -0
  88. package/app-template/src/app/api/similar-product-list/route.ts +1 -0
  89. package/app-template/src/app/api/similar-products/route.ts +1 -0
  90. package/app-template/src/app/api/theme-settings/route.ts +12 -0
  91. package/app-template/src/app/api/virtual-try-on/limited-categories/route.ts +1 -0
  92. package/app-template/src/app/api/virtual-try-on/route.ts +1 -0
  93. package/app-template/src/app/api/web-vitals/route.ts +1 -1
  94. package/app-template/src/assets/fonts/pz-icon.css +211 -49
  95. package/app-template/src/assets/fonts/pz-icon.eot +0 -0
  96. package/app-template/src/assets/fonts/pz-icon.html +486 -0
  97. package/app-template/src/assets/fonts/pz-icon.scss +373 -49
  98. package/app-template/src/assets/fonts/pz-icon.svg +215 -53
  99. package/app-template/src/assets/fonts/pz-icon.ttf +0 -0
  100. package/app-template/src/assets/fonts/pz-icon.woff +0 -0
  101. package/app-template/src/assets/fonts/pz-icon.woff2 +0 -0
  102. package/app-template/src/assets/globals.scss +8 -133
  103. package/app-template/src/assets/icons/arrow-right.svg +3 -0
  104. package/app-template/src/assets/icons/cart.svg +4 -12
  105. package/app-template/src/assets/icons/check.svg +2 -18
  106. package/app-template/src/assets/icons/chevron-down.svg +2 -7
  107. package/app-template/src/assets/icons/delete.svg +3 -0
  108. package/app-template/src/assets/icons/facebook.svg +2 -8
  109. package/app-template/src/assets/icons/fav-off.svg +5 -0
  110. package/app-template/src/assets/icons/fav-on.svg +5 -0
  111. package/app-template/src/assets/icons/filter-and-sort.svg +3 -0
  112. package/app-template/src/assets/icons/heart.svg +3 -0
  113. package/app-template/src/assets/icons/instagram.svg +2 -13
  114. package/app-template/src/assets/icons/materials.svg +3 -0
  115. package/app-template/src/assets/icons/person.svg +4 -0
  116. package/app-template/src/assets/icons/pinterest.svg +5 -11
  117. package/app-template/src/assets/icons/ruler.svg +3 -0
  118. package/app-template/src/assets/icons/search.svg +8 -11
  119. package/app-template/src/assets/icons/share.svg +2 -9
  120. package/app-template/src/assets/icons/snapchat.svg +3 -0
  121. package/app-template/src/assets/icons/tiktok.svg +3 -0
  122. package/app-template/src/assets/icons/tumblr.svg +6 -0
  123. package/app-template/src/assets/icons/twitter.svg +2 -10
  124. package/app-template/src/assets/icons/vimeo.svg +3 -0
  125. package/app-template/src/assets/icons/youtube.svg +3 -0
  126. package/app-template/src/assets/icons/zoom.svg +8 -0
  127. package/app-template/src/auth.ts +3 -0
  128. package/app-template/src/components/__tests__/badge.test.tsx +2 -2
  129. package/app-template/src/components/__tests__/link.test.tsx +2 -0
  130. package/app-template/src/components/accordion.tsx +48 -23
  131. package/app-template/src/components/action-tooltip.tsx +160 -0
  132. package/app-template/src/components/button.tsx +1 -1
  133. package/app-template/src/components/carousel-core.tsx +4 -11
  134. package/app-template/src/components/checkbox.tsx +2 -1
  135. package/app-template/src/components/currency-select.tsx +150 -4
  136. package/app-template/src/components/file-input.tsx +27 -7
  137. package/app-template/src/components/generate-form-fields.tsx +49 -10
  138. package/app-template/src/components/icon.tsx +5 -6
  139. package/app-template/src/components/index.ts +4 -1
  140. package/app-template/src/components/input.tsx +11 -5
  141. package/app-template/src/components/language-select.tsx +88 -2
  142. package/app-template/src/components/modal.tsx +34 -16
  143. package/app-template/src/components/pagination.tsx +133 -20
  144. package/app-template/src/components/price.tsx +1 -1
  145. package/app-template/src/components/pwa-tags.tsx +1 -0
  146. package/app-template/src/components/quantity-input.tsx +63 -0
  147. package/app-template/src/components/quantity-selector.tsx +215 -0
  148. package/app-template/src/components/route-handler.tsx +50 -0
  149. package/app-template/src/components/select.tsx +86 -54
  150. package/app-template/src/components/shimmer.tsx +1 -1
  151. package/app-template/src/components/types/index.ts +51 -1
  152. package/app-template/src/components/widget-content.tsx +323 -0
  153. package/app-template/src/data/server/theme.ts +70 -0
  154. package/app-template/src/hooks/use-fav-button.tsx +9 -10
  155. package/app-template/src/hooks/use-product-cart.ts +80 -0
  156. package/app-template/src/hooks/use-stock-alert.ts +74 -0
  157. package/app-template/src/hooks/use-theme-settings.ts +42 -0
  158. package/app-template/src/lib/fonts.ts +149 -0
  159. package/app-template/src/plugins.js +12 -2
  160. package/app-template/src/{middleware.ts → proxy.ts} +3 -3
  161. package/app-template/src/redux/middlewares/category.ts +5 -4
  162. package/app-template/src/redux/store.ts +21 -1
  163. package/app-template/src/routes/index.ts +8 -7
  164. package/app-template/src/settings.js +6 -3
  165. package/app-template/src/types/hookform-resolvers-yup.d.ts +28 -0
  166. package/app-template/src/types/index.ts +74 -3
  167. package/app-template/src/types/next-auth.d.ts +2 -2
  168. package/app-template/src/types/widget.ts +169 -0
  169. package/app-template/src/utils/__tests__/theme-page-context.test.ts +145 -0
  170. package/app-template/src/utils/formatDate.ts +48 -0
  171. package/app-template/src/utils/styles.ts +71 -0
  172. package/app-template/src/utils/theme-page-context.ts +309 -0
  173. package/app-template/src/utils/variant-validation.ts +41 -0
  174. package/app-template/src/views/account/address-form.tsx +8 -4
  175. package/app-template/src/views/account/contact-form.tsx +148 -131
  176. package/app-template/src/views/account/content-header.tsx +4 -3
  177. package/app-template/src/views/account/faq/faq-tabs.tsx +8 -2
  178. package/app-template/src/views/account/favorite-item.tsx +1 -1
  179. package/app-template/src/views/account/order.tsx +11 -9
  180. package/app-template/src/views/account/orders/order-cancellation-item.tsx +1 -1
  181. package/app-template/src/views/account/orders/order-detail-header.tsx +1 -1
  182. package/app-template/src/views/anonymous-tracking/order-detail/index.tsx +45 -38
  183. package/app-template/src/views/basket/basket-item.tsx +6 -1
  184. package/app-template/src/views/basket/summary.tsx +16 -0
  185. package/app-template/src/views/breadcrumb.tsx +2 -2
  186. package/app-template/src/views/category/category-banner.tsx +4 -23
  187. package/app-template/src/views/category/category-info.tsx +2 -1
  188. package/app-template/src/views/category/filters/filter-item.tsx +138 -42
  189. package/app-template/src/views/category/filters/index.tsx +1 -1
  190. package/app-template/src/views/category/layout.tsx +1 -0
  191. package/app-template/src/views/checkout/auth.tsx +64 -40
  192. package/app-template/src/views/checkout/layout/header.tsx +10 -6
  193. package/app-template/src/views/checkout/steps/payment/options/credit-card/index.tsx +22 -6
  194. package/app-template/src/views/checkout/steps/payment/options/funds-transfer.tsx +25 -5
  195. package/app-template/src/views/checkout/steps/payment/options/loyalty.tsx +21 -2
  196. package/app-template/src/views/checkout/steps/payment/options/redirection.tsx +27 -5
  197. package/app-template/src/views/checkout/steps/payment/options/store-credit.tsx +464 -0
  198. package/app-template/src/views/checkout/steps/payment/payment-option-buttons.tsx +4 -4
  199. package/app-template/src/views/checkout/steps/shipping/address-box.tsx +33 -20
  200. package/app-template/src/views/checkout/steps/shipping/addresses.tsx +2 -2
  201. package/app-template/src/views/checkout/summary.tsx +12 -2
  202. package/app-template/src/views/find-in-store/index.tsx +2 -2
  203. package/app-template/src/views/guest-login/index.tsx +62 -58
  204. package/app-template/src/views/header/action-menu.tsx +1 -1
  205. package/app-template/src/views/header/band.tsx +2 -2
  206. package/app-template/src/views/header/index.tsx +1 -1
  207. package/app-template/src/views/header/mini-basket.tsx +3 -3
  208. package/app-template/src/views/header/mobile-hamburger-button.tsx +5 -8
  209. package/app-template/src/views/header/mobile-menu.tsx +18 -6
  210. package/app-template/src/views/header/navbar.tsx +1 -1
  211. package/app-template/src/views/header/pwa-back-button.tsx +1 -1
  212. package/app-template/src/views/header/search/index.tsx +13 -3
  213. package/app-template/src/views/header/search/results.tsx +1 -1
  214. package/app-template/src/views/header/user-menu.tsx +1 -3
  215. package/app-template/src/views/login/index.tsx +66 -57
  216. package/app-template/src/views/otp-login/index.tsx +11 -6
  217. package/app-template/src/views/product/index.ts +1 -0
  218. package/app-template/src/views/product/layout.tsx +26 -6
  219. package/app-template/src/views/product/price-wrapper.tsx +3 -24
  220. package/app-template/src/views/product/product-actions.tsx +165 -0
  221. package/app-template/src/views/product/product-info.tsx +76 -238
  222. package/app-template/src/views/product/product-share.tsx +58 -0
  223. package/app-template/src/views/product/product-variants.tsx +26 -0
  224. package/app-template/src/views/product/slider.tsx +22 -1
  225. package/app-template/src/views/product/variant.tsx +69 -41
  226. package/app-template/src/views/product-pointer-banner-item.tsx +1 -1
  227. package/app-template/src/views/register/index.tsx +31 -46
  228. package/app-template/src/views/sales-contract-modal/index.tsx +17 -17
  229. package/app-template/src/views/share/index.tsx +9 -6
  230. package/app-template/src/views/widgets/home-hero-slider-content.tsx +41 -39
  231. package/app-template/src/widgets/flatpages/about-us/index.tsx +78 -0
  232. package/app-template/src/widgets/flatpages/blog-list/index.tsx +129 -0
  233. package/app-template/src/widgets/footer-info.tsx +1 -1
  234. package/app-template/src/widgets/footer-menu.tsx +7 -3
  235. package/app-template/src/widgets/footer-subscription/footer-subscription-form.tsx +17 -14
  236. package/app-template/src/widgets/footer-subscription/index.tsx +1 -1
  237. package/app-template/src/widgets/home-stories-eng.tsx +43 -35
  238. package/app-template/src/widgets/index.ts +7 -0
  239. package/app-template/src/widgets/schemas/about-us.json +46 -0
  240. package/app-template/src/widgets/schemas/blog-list.json +37 -0
  241. package/app-template/src/widgets/schemas/blog.json +29 -0
  242. package/app-template/tailwind.config.js +155 -7
  243. package/app-template/tsconfig.json +29 -11
  244. package/codemods/migrate-auth-v5/index.js +339 -0
  245. package/codemods/migrate-auth-v5/transform.js +86 -0
  246. package/codemods/migrate-segments/index.js +591 -0
  247. package/codemods/update-tailwind-config/index.js +30 -0
  248. package/codemods/update-tailwind-config/transform.js +102 -0
  249. package/codemods/upgrade-to-2/index.js +549 -0
  250. package/commands/codemod.ts +0 -1
  251. package/commands/plugins.ts +111 -46
  252. package/dist/commands/codemod.js +0 -1
  253. package/dist/commands/plugins.js +104 -36
  254. package/package.json +3 -2
  255. package/app-template/src/app/[commerce]/[locale]/[currency]/category/[pk]/page.tsx +0 -22
  256. package/app-template/src/app/[commerce]/[locale]/[currency]/flat-page/[pk]/page.tsx +0 -20
  257. package/app-template/src/app/[commerce]/[locale]/[currency]/group-product/[pk]/page.tsx +0 -74
  258. package/app-template/src/app/[commerce]/[locale]/[currency]/list/page.tsx +0 -18
  259. package/app-template/src/app/[commerce]/[locale]/[currency]/page.tsx +0 -50
  260. package/app-template/src/app/[commerce]/[locale]/[currency]/product/[pk]/page.tsx +0 -84
  261. package/app-template/src/app/[commerce]/[locale]/[currency]/special-page/[pk]/page.tsx +0 -27
  262. package/app-template/src/pages/api/auth/[...nextauth].ts +0 -3
  263. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/address/page.tsx +0 -0
  264. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/change-email/page.tsx +0 -0
  265. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/change-password/page.tsx +0 -0
  266. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/contact/page.tsx +0 -0
  267. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/coupons/page.tsx +0 -0
  268. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/email-verification/page.tsx +0 -0
  269. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/faq/page.tsx +0 -0
  270. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/favourite-products/page.tsx +0 -0
  271. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/my-quotations/page.tsx +0 -0
  272. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/orders/[id]/layout.tsx +0 -0
  273. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/orders/page.tsx +0 -0
  274. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/anonymous-tracking/page.tsx +0 -0
  275. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/auth/oauth-login/page.tsx +0 -0
  276. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/basket-b2b/page.tsx +0 -0
  277. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/category/[pk]/loading.tsx +0 -0
  278. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/client-root.tsx +0 -0
  279. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/contact-us/page.tsx +0 -0
  280. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/error.tsx +0 -0
  281. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/flat-page/[pk]/loading.tsx +0 -0
  282. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/group-product/[pk]/loading.tsx +0 -0
  283. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/landing-page/[pk]/loading.tsx +0 -0
  284. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/list/loading.tsx +0 -0
  285. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/orders/checkout/page.tsx +0 -0
  286. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/orders/completed/[token]/layout.tsx +0 -0
  287. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/special-page/[pk]/loading.tsx +0 -0
  288. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/template.tsx +0 -0
  289. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/users/password/reset/page.tsx +0 -0
  290. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/xml-sitemap/route.ts +0 -0
@@ -79,7 +79,10 @@ const ContactForm = () => {
79
79
  }
80
80
  );
81
81
 
82
- const [sendContact, { isSuccess: formSuccess }] = useSendContactMutation();
82
+ const [
83
+ sendContact,
84
+ { isSuccess: formSuccess, isLoading: isSubmitting, error: submitError }
85
+ ] = useSendContactMutation();
83
86
 
84
87
  if (ordersSuccess) {
85
88
  orders?.results?.map((item) => {
@@ -111,7 +114,7 @@ const ContactForm = () => {
111
114
  resolver: yupResolver(contactFormSchema(t))
112
115
  });
113
116
 
114
- const onSubmit: SubmitHandler<ContactFormType> = (data, event) => {
117
+ const onSubmit: SubmitHandler<ContactFormType> = (data) => {
115
118
  const formData = new FormData();
116
119
 
117
120
  Object.keys(data ?? {}).forEach((key) => {
@@ -122,6 +125,9 @@ const ContactForm = () => {
122
125
  }
123
126
  });
124
127
 
128
+ formData.append('subject', 'tdsadasdsa');
129
+ formData.append('order', '2222');
130
+
125
131
  sendContact(formData);
126
132
  };
127
133
 
@@ -141,153 +147,164 @@ const ContactForm = () => {
141
147
  }, [session, reset]);
142
148
 
143
149
  return (
144
- <div className="flex-1">
145
- <div className="bg-gray-150 p-4 lg:p-8">
146
- <h2 className="text-3xl text-center mb-5">
147
- {t('account.contact.header.title')}
148
- </h2>
149
- <p className="text-center">{t('account.contact.header.subtitle')}</p>
150
- </div>
151
- <div className="flex flex-col lg:flex-row">
150
+ <div className="max-w-lg mx-auto">
151
+ <div className="flex flex-col text-black-750">
152
152
  {formSuccess ? (
153
153
  <div>
154
- <div className="border border-gray-500 mt-5 p-6 lg:px-24 lg:py-10 lg:w-[670px]">
155
- <h3 className="text-3xl mb-5">
156
- {t('account.contact.form.success.title')}
157
- </h3>
158
- <p className="text-sm mb-4">
159
- {t('account.contact.form.success.description')}
160
- </p>
161
- <Link href={'/'} className="underline">
162
- {t('account.contact.form.success.button')}
163
- </Link>
164
- </div>
154
+ <h3 className="text-3xl mb-5">
155
+ {t('account.contact.form.success.title')}
156
+ </h3>
157
+ <p className="text-sm mb-4">
158
+ {t('account.contact.form.success.description')}
159
+ </p>
160
+ <Link href={'/'} className="underline">
161
+ {t('account.contact.form.success.button')}
162
+ </Link>
165
163
  </div>
166
164
  ) : (
167
- <form
168
- onSubmit={handleSubmit(onSubmit)}
169
- className="border border-gray-500 mt-5 p-6 lg:px-24 lg:py-10 lg:w-[670px]"
170
- >
171
- <div className="mb-5">
172
- <Input
173
- label={t('account.contact.form.full_name.placeholder')}
174
- className="mb-1"
175
- {...register('full_name')}
176
- error={errors.full_name}
177
- required
178
- />
179
- </div>
180
- <div className="mb-5">
181
- <Input
182
- label={t('account.contact.form.email.placeholder')}
183
- type="email"
184
- className="mb-1"
185
- {...register('email')}
186
- error={errors.email}
187
- required
188
- />
189
- </div>
190
- <div className="mb-5">
191
- <Input
192
- label={t('account.contact.form.phone.placeholder')}
193
- type="tel"
194
- className="mb-1"
195
- format={user_phone_format.replace(/9/g, '#')}
196
- mask="_"
197
- allowEmptyFormatting={true}
198
- control={control}
199
- {...register('phone')}
200
- error={errors.phone}
201
- required
202
- />
165
+ <>
166
+ <div>
167
+ <h2 className="text-[40px] mb-8">
168
+ {' '}
169
+ {t('account.contact.header.title')}
170
+ </h2>
171
+
172
+ <div className="mb-16">
173
+ <h3 className="mb-8 font-bold">{t('account.contact.hours')}</h3>
174
+ <p> Monday – Friday: 10:00am – 7:30pm</p>
175
+ <p>Saturday: 10:00am – 6:00pm</p>
176
+ <p>Sunday: 11:00am – 6:00pm</p>
177
+ </div>
203
178
  </div>
204
179
 
205
- <div className="mb-5 relative">
206
- {subjectLoading && <LoaderSpinner />}
207
- {subjectSuccess && (
208
- <>
209
- <Select
210
- className="w-full mb-1 border-gray-500 text-sm"
211
- options={filteredSubjects}
212
- {...register('subject')}
213
- error={errors.subject}
214
- onChange={handleChange}
215
- label={t('account.contact.form.subject.title')}
180
+ <form
181
+ onSubmit={handleSubmit(onSubmit)}
182
+ className="flex flex-col gap-4"
183
+ >
184
+ <div className="flex flex-col gap-4 lg:flex-row">
185
+ <div className="lg:w-1/2">
186
+ <Input
187
+ placeholder={t(
188
+ 'account.contact.form.full_name.placeholder'
189
+ )}
190
+ {...register('full_name')}
191
+ error={errors.full_name}
192
+ className="h-12"
216
193
  required
217
194
  />
218
- </>
219
- )}
220
- </div>
195
+ </div>
196
+
197
+ <div className="lg:w-1/2">
198
+ <Input
199
+ placeholder={t('account.contact.form.email.placeholder')}
200
+ type="email"
201
+ {...register('email')}
202
+ className="h-12"
203
+ error={errors.email}
204
+ required
205
+ />
206
+ </div>
207
+ </div>
221
208
 
222
- {selectedSubject === '2' && (
223
- <div className="mb-5 relative">
224
- {ordersLoading && <LoaderSpinner />}
225
- {ordersSuccess && (
209
+ <div>
210
+ <Input
211
+ placeholder={t('account.contact.form.phone.placeholder')}
212
+ type="tel"
213
+ className="h-12"
214
+ format={user_phone_format.replace(/9/g, '#')}
215
+ mask="_"
216
+ allowEmptyFormatting={true}
217
+ control={control}
218
+ {...register('phone')}
219
+ error={errors.phone}
220
+ required
221
+ />
222
+ </div>
223
+
224
+ <div className="relative">
225
+ {subjectLoading && <LoaderSpinner />}
226
+ {subjectSuccess && (
226
227
  <>
227
228
  <Select
228
- className="w-full mb-1 border-gray-500 text-sm"
229
- options={filteredOrders}
230
- {...register('order')}
231
- error={errors.order}
232
- label={t('account.contact.form.order.title')}
229
+ className="w-full h-12 border-gray-500 text-sm"
230
+ options={filteredSubjects}
231
+ {...register('subject')}
232
+ error={errors.subject}
233
+ onChange={handleChange}
233
234
  required
234
235
  />
235
236
  </>
236
237
  )}
237
238
  </div>
238
- )}
239
239
 
240
- <label className="text-xs text-gray-800 mb-2 block">
241
- {t('account.contact.form.message.title')}{' '}
242
- <span className="text-secondary">*</span>
243
- </label>
244
- <textarea
245
- className="border-gray-500 border w-full text-xs p-2.5 focus-visible:outline-hidden focus:border-black hover:border-black"
246
- rows={7}
247
- name="message"
248
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
249
- // @ts-ignore - Fix TS error
250
- {...register('message')}
251
- />
252
- {errors.message && (
253
- <div className="text-sm text-error">{errors.message.message}</div>
254
- )}
255
- <label className="text-xs text-gray-800 mb-2 block">
256
- {t('account.contact.form.file.title')}
257
- </label>
258
- <FileInput name="file" title="file" {...register('file')} />
259
- <Button type="submit" className="w-full font-medium mt-4">
260
- {t('account.contact.form.submit_button')}
261
- </Button>
262
- </form>
263
- )}
240
+ {selectedSubject === '2' && (
241
+ <div className="relative">
242
+ {ordersLoading && <LoaderSpinner />}
243
+ {ordersSuccess && (
244
+ <>
245
+ <Select
246
+ className="w-full h-12 border-gray-500 text-sm"
247
+ options={filteredOrders}
248
+ {...register('order')}
249
+ error={errors.order}
250
+ required
251
+ />
252
+ </>
253
+ )}
254
+ </div>
255
+ )}
264
256
 
265
- <div className="my-6 lg:ml-8">
266
- <h2 className="text-3xl mb-4">
267
- {' '}
268
- {t('account.contact.address_title')}
269
- </h2>
270
- <div className="mb-4">
271
- <h3 className="font-medium text-sm">London</h3>
272
- <p className="text-sm">7 Bell Yard, London, WC2A 2JR</p>
273
- <p className="text-sm">+44 20 3740 62 63</p>
274
- </div>
275
- <div className="mb-4">
276
- <h3 className="font-medium text-sm">İstanbul</h3>
277
- <p className="text-sm">YTU Davutpasa Teknopark A1 Z10</p>
278
- <p className="text-sm">+90 212 483 72 45</p>
279
- </div>
280
- <div className="mb-4">
281
- <h3 className="font-medium text-sm">Dubai</h3>
282
- <p className="text-sm">Level 21 Al Habtoor Business Tower</p>
283
- <p className="text-sm">+971 4275 6336</p>
284
- </div>
285
- <div className="mb-4">
286
- <h3 className="font-medium text-sm">Athens</h3>
287
- <p className="text-sm">Averof 18a, Chalandri</p>
288
- <p className="text-sm">+30 21 1411 6000</p>
289
- </div>
290
- </div>
257
+ <textarea
258
+ className="border-gray-500 border w-full text-xs p-2.5 focus-visible:outline-none focus:border-black hover:border-black"
259
+ rows={7}
260
+ name="message"
261
+ placeholder={t('account.contact.form.message.title')}
262
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
263
+ // @ts-ignore - Fix TS error
264
+ {...register('message')}
265
+ />
266
+ {errors.message && (
267
+ <div className="text-sm text-error">
268
+ {errors.message.message}
269
+ </div>
270
+ )}
271
+
272
+ <FileInput
273
+ name="file"
274
+ title="file"
275
+ buttonClassName="w-full h-12"
276
+ {...register('file')}
277
+ />
278
+ <Button
279
+ type="submit"
280
+ className="w-fit mt-4 h-12 px-8"
281
+ disabled={isSubmitting}
282
+ >
283
+ {isSubmitting
284
+ ? t('account.contact.form.submitting')
285
+ : t('account.contact.form.submit_button')}
286
+ </Button>
287
+
288
+ {submitError && (
289
+ <div className="text-sm text-error mt-2">
290
+ {'data' in submitError &&
291
+ submitError.data &&
292
+ typeof submitError.data === 'object'
293
+ ? Object.entries(submitError.data).map(
294
+ ([field, messages]) => (
295
+ <div key={field}>
296
+ {Array.isArray(messages)
297
+ ? messages.join(', ')
298
+ : String(messages)}
299
+ </div>
300
+ )
301
+ )
302
+ : t('account.contact.form.error.general')}
303
+ </div>
304
+ )}
305
+ </form>
306
+ </>
307
+ )}
291
308
  </div>
292
309
  </div>
293
310
  );
@@ -31,14 +31,15 @@ export const ContentHeader = (props: Props) => {
31
31
  </h3>
32
32
  <Select
33
33
  onChange={handleChange}
34
- className="w-full mb-4 bg-white md:mb-0 md:w-56 md:mr-4 text-xs"
34
+ className="w-full mb-4 md:mb-0 md:w-56 text-xs"
35
35
  options={orders}
36
36
  data-testid="account-orders-header-select"
37
37
  ></Select>
38
38
  <Button
39
39
  className={clsx(
40
- 'w-full md:w-56',
41
- isButtonDisabled && 'hover:bg-black/75 hover:text-white'
40
+ 'w-full md:w-56 md:ms-4',
41
+ isButtonDisabled &&
42
+ 'hover:bg-black hover:text-white disabled:opacity-75'
42
43
  )}
43
44
  onClick={handleClick}
44
45
  data-testid="account-orders-header-button"
@@ -3,6 +3,7 @@
3
3
  import { Accordion, LoaderSpinner, TabPanel, Tabs } from '@theme/components';
4
4
  import React from 'react';
5
5
  import { useGetWidgetQuery } from '@akinon/next/data/client/misc';
6
+ import { useLocalization } from '@akinon/next/hooks';
6
7
 
7
8
  interface Props {
8
9
  searchKey?: string;
@@ -11,6 +12,7 @@ interface Props {
11
12
  export function FaqTabs(props: Props) {
12
13
  const { searchKey } = props;
13
14
  const { data, isLoading } = useGetWidgetQuery('faq');
15
+ const { locale } = useLocalization();
14
16
 
15
17
  if (isLoading) {
16
18
  return <LoaderSpinner className="mt-4" />;
@@ -29,8 +31,12 @@ export function FaqTabs(props: Props) {
29
31
  {data?.attributes?.faq_contents
30
32
  ?.filter(
31
33
  (faq) =>
32
- faq.value.content.toLocaleLowerCase().includes(searchKey) ||
33
- faq.value.title.toLocaleLowerCase().includes(searchKey)
34
+ faq.value.content
35
+ .toLocaleLowerCase(locale)
36
+ .includes(searchKey) ||
37
+ faq.value.title
38
+ .toLocaleLowerCase(locale)
39
+ .includes(searchKey)
34
40
  )
35
41
  .map((faq, index) => {
36
42
  if (faq.value.category == item.value.category_id) {
@@ -91,7 +91,7 @@ export const FavoriteItem = (props: Props) => {
91
91
  size={14}
92
92
  onClick={() => removeFavorite(item.pk)}
93
93
  className={clsx(
94
- 'absolute top-4 right-4 cursor-pointer',
94
+ 'absolute top-4 right-4 cursor-pointer p-1 drop-shadow-[1px_2px_0px_rgb(255,255,255)]',
95
95
  isRemoveFavoriteLoading
96
96
  ? 'hover:cursor-wait'
97
97
  : 'hover:cursor-pointer'
@@ -13,7 +13,7 @@ export const Order = (props) => {
13
13
  .reverse()
14
14
  .join(' ');
15
15
 
16
- const orderStatus = getOrderStatus(props.status.value.toString(), t);
16
+ const orderStatus = getOrderStatus(props?.status?.value?.toString(), t);
17
17
 
18
18
  return (
19
19
  <div className="border border-gray px-5 py-4 text-sm mb-4 last:mb-0">
@@ -58,30 +58,32 @@ export const Order = (props) => {
58
58
 
59
59
  <div className="w-full flex flex-col justify-between mt-6 mb-2 order-3 md:items-center md:flex-row md:order-none md:gap-20 lg:gap-40">
60
60
  <ul className="flex flex-wrap gap-3.5 mb-6 items-center md:mb-0">
61
- {props.orderitem_set.slice(0, 3).map((item, index) => (
61
+ {props?.orderitem_set?.slice(0, 3).map((item, index) => (
62
62
  // TODO: Static image will change (TR)
63
- <li className="shrink-0" key={index}>
63
+ <li className="flex-shrink-0" key={index}>
64
64
  <Image
65
- src={item.product.image ? item.product.image : '/noimage.jpg'}
66
- alt={item.product.name}
65
+ src={
66
+ item?.product?.image ? item.product.image : '/noimage.jpg'
67
+ }
68
+ alt={item?.product?.name}
67
69
  width={64}
68
70
  height={96}
69
71
  />
70
72
  </li>
71
73
  ))}
72
- {props.orderitem_set.length > 3 && (
73
- <div>+ {props.orderitem_set.length - 3}</div>
74
+ {props?.orderitem_set?.length > 3 && (
75
+ <div>+ {props?.orderitem_set?.length - 3}</div>
74
76
  )}
75
77
  </ul>
76
78
 
77
- <span className={orderStatus.className}>{orderStatus.label}</span>
79
+ <span className={orderStatus?.className}>{orderStatus?.label}</span>
78
80
  </div>
79
81
 
80
82
  <div
81
83
  className="order-2 flex items-end md:order-none"
82
84
  data-testid="account-orders-count"
83
85
  >
84
- {props.orderitem_set.length} {t('account.my_orders.order.items')}
86
+ {props?.orderitem_set?.length} {t('account.my_orders.order.items')}
85
87
  </div>
86
88
  </div>
87
89
  </div>
@@ -45,7 +45,7 @@ export const OrderCancellationItem = ({
45
45
  onClick={handleClick}
46
46
  />
47
47
  )}
48
- <div className="shrink-0">
48
+ <div className="flex-shrink-0">
49
49
  <Link href={item.product.absolute_url}>
50
50
  <Image
51
51
  src={item.product.image ? item.product.image : '/noimage.jpg'}
@@ -21,7 +21,7 @@ export const OrderDetailHeader = ({ title, order, children }: Props) => {
21
21
  <div>
22
22
  <span>{t('account.my_orders.detail.order_number')}</span>:{' '}
23
23
  <span data-testid="account-orders-return-order-id">
24
- {order.number}
24
+ {order?.number}
25
25
  </span>
26
26
  </div>
27
27