@evershop/evershop 1.1.0 → 1.2.0

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 (390) hide show
  1. package/bin/build/index.js +24 -0
  2. package/bin/extension/index.js +2 -2
  3. package/bin/lib/addDefaultMiddlewareFuncs.js +7 -2
  4. package/bin/lib/buildEntry.js +15 -0
  5. package/bin/lib/onListening.js +7 -4
  6. package/bin/lib/startUp.js +6 -0
  7. package/package.json +9 -1
  8. package/src/components/admin/catalog/productEdit/category/CategoryItem.jsx +2 -7
  9. package/src/components/admin/catalog/productEdit/category/CategoryTree.jsx +14 -7
  10. package/src/components/admin/catalog/productEdit/category/CategoryTree.scss +10 -0
  11. package/src/components/admin/catalog/productEdit/variants/CreateVariant.jsx +2 -2
  12. package/src/components/admin/catalog/productEdit/variants/CreateVariantGroup.jsx +1 -1
  13. package/src/components/admin/catalog/productEdit/variants/EditVariant.jsx +1 -1
  14. package/src/components/admin/catalog/productEdit/variants/New.jsx +2 -2
  15. package/src/components/admin/catalog/productEdit/variants/Search.jsx +1 -1
  16. package/src/components/admin/catalog/productEdit/variants/SearchModal.jsx +1 -1
  17. package/src/components/admin/catalog/productEdit/variants/VariantModal.jsx +6 -6
  18. package/src/components/admin/catalog/productGrid/rows/ThumbnailRow.jsx +1 -1
  19. package/src/components/admin/checkout/shippingSetting/Method.jsx +6 -6
  20. package/src/components/admin/checkout/shippingSetting/MethodForm.jsx +4 -4
  21. package/src/components/admin/checkout/shippingSetting/Methods.jsx +3 -3
  22. package/src/components/admin/checkout/shippingSetting/PriceBasedPrice.jsx +2 -2
  23. package/src/components/admin/checkout/shippingSetting/WeightBasedPrice.jsx +2 -2
  24. package/src/components/admin/checkout/shippingSetting/Zone.jsx +7 -7
  25. package/src/components/admin/checkout/shippingSetting/ZoneForm.jsx +1 -1
  26. package/src/components/admin/cms/Card.jsx +3 -3
  27. package/src/components/admin/cms/PageHeading.jsx +3 -3
  28. package/src/components/admin/cms/widget/WidgetTypes.jsx +28 -0
  29. package/src/components/admin/cms/widget/grid/WidgetTypeRow.jsx +29 -0
  30. package/src/components/admin/oms/orderEdit/items/ItemVariantOptions.jsx +1 -1
  31. package/src/components/admin/oms/orderEdit/items/Name.jsx +1 -1
  32. package/src/components/admin/oms/orderGrid/headers/OrderDateColumnHeader.jsx +1 -1
  33. package/src/components/admin/promotion/couponEdit/AttributeGroupSelector.jsx +3 -3
  34. package/src/components/admin/promotion/couponEdit/BuyXGetY.jsx +2 -2
  35. package/src/components/admin/promotion/couponEdit/CategorySelector.jsx +6 -6
  36. package/src/components/admin/promotion/couponEdit/CollectionSelector.jsx +3 -3
  37. package/src/components/admin/promotion/couponEdit/ProductSkuSelector.jsx +4 -4
  38. package/src/components/admin/promotion/couponEdit/RequireProducts.jsx +2 -2
  39. package/src/components/admin/promotion/couponEdit/Setting.jsx +1 -1
  40. package/src/components/admin/promotion/couponEdit/TargetProducts.jsx +4 -4
  41. package/src/components/admin/tax/taxSetting/Rate.jsx +6 -6
  42. package/src/components/admin/tax/taxSetting/RateForm.jsx +5 -5
  43. package/src/components/admin/tax/taxSetting/Rates.jsx +6 -6
  44. package/src/components/admin/tax/taxSetting/TaxClass.jsx +3 -3
  45. package/src/components/admin/tax/taxSetting/TaxClassForm.jsx +1 -1
  46. package/src/components/admin/widgets/BasicMenuSetting.jsx +614 -0
  47. package/src/components/admin/widgets/BasicMenuSetting.scss +19 -0
  48. package/src/components/admin/widgets/CollectionProductsSetting.jsx +203 -0
  49. package/src/components/admin/widgets/TextBlockSetting.jsx +70 -0
  50. package/src/components/common/Area.jsx +31 -8
  51. package/src/components/common/Badge.jsx +1 -1
  52. package/src/components/common/Editor.jsx +191 -0
  53. package/src/components/common/Notification.scss +1 -0
  54. package/src/components/common/SimplePagination.jsx +2 -2
  55. package/src/components/common/form/Form.jsx +1 -1
  56. package/src/components/common/form/fields/Checkbox.jsx +1 -1
  57. package/src/components/common/form/fields/Ckeditor.jsx +11 -11
  58. package/src/components/common/form/fields/Editor.jsx +326 -0
  59. package/src/components/common/form/fields/Editor.scss +29 -0
  60. package/src/components/common/form/fields/Radio.jsx +1 -1
  61. package/src/components/common/form/fields/editor/FileBrowser.jsx +419 -0
  62. package/src/components/common/form/fields/editor/FileBrowser.scss +37 -0
  63. package/src/components/common/form/fields/editor/GetColumnClasses.jsx +14 -0
  64. package/src/components/common/form/fields/editor/GetRowClasses.jsx +18 -0
  65. package/src/components/common/form/fields/editor/RowTemplates.jsx +154 -0
  66. package/src/components/common/grid/Pagination.jsx +4 -4
  67. package/src/components/common/grid/headers/FromTo.jsx +1 -1
  68. package/src/components/common/grid/headers/Sortable.jsx +1 -1
  69. package/src/components/common/grid/rows/ThumbnailRow.jsx +1 -1
  70. package/src/components/common/list/Filter.jsx +1 -1
  71. package/src/components/common/modal/Alert.jsx +1 -1
  72. package/src/components/common/modal/Modal.jsx +1 -1
  73. package/src/components/frontStore/catalog/categoryView/filter/AttributeFilter.jsx +2 -2
  74. package/src/components/frontStore/catalog/categoryView/filter/CategoryFilter.jsx +3 -2
  75. package/src/components/frontStore/catalog/categoryView/filter/CategoryFilter.scss +5 -0
  76. package/src/components/frontStore/catalog/product/list/List.jsx +4 -4
  77. package/src/components/frontStore/catalog/product/list/Pagination.jsx +1 -1
  78. package/src/components/frontStore/catalog/product/list/Sorting.jsx +2 -2
  79. package/src/components/frontStore/catalog/product/list/item/Name.jsx +1 -1
  80. package/src/components/frontStore/checkout/cart/Empty.jsx +3 -3
  81. package/src/components/frontStore/checkout/cart/items/ItemOptions.jsx +1 -1
  82. package/src/components/frontStore/checkout/cart/items/ItemVariantOptions.jsx +1 -1
  83. package/src/components/frontStore/checkout/cart/items/Items.jsx +20 -21
  84. package/src/components/frontStore/checkout/cart/items/Items.scss +47 -0
  85. package/src/components/frontStore/checkout/cart/items/Quantity.jsx +154 -0
  86. package/src/components/frontStore/checkout/checkout/StepTitle.jsx +1 -1
  87. package/src/components/frontStore/checkout/checkout/payment/paymentStep/StepContent.jsx +5 -5
  88. package/src/components/frontStore/checkout/checkout/shipment/StepContent.jsx +1 -1
  89. package/src/components/frontStore/checkout/checkout/summary/Cart.jsx +10 -12
  90. package/src/components/frontStore/checkout/checkout/summary/Items.jsx +9 -9
  91. package/src/components/frontStore/checkout/checkout/summary/cart/Total.jsx +6 -6
  92. package/src/components/frontStore/checkout/success/summary/items/ItemOptions.jsx +1 -1
  93. package/src/components/frontStore/checkout/success/summary/items/Items.jsx +9 -6
  94. package/src/components/frontStore/checkout/success/summary/order/OrderSummary.jsx +9 -13
  95. package/src/components/frontStore/checkout/success/summary/order/Total.jsx +5 -5
  96. package/src/components/frontStore/customer/address/addressForm/AddressFormLoadingSkeleton.jsx +2 -2
  97. package/src/components/frontStore/customer/address/addressForm/NameAndTelephone.jsx +1 -1
  98. package/src/components/frontStore/customer/address/addressForm/ProvinceAndPostcode.jsx +1 -1
  99. package/src/components/frontStore/customer/checkout/Edit.jsx +2 -2
  100. package/src/components/frontStore/customer/detail/Order.jsx +4 -4
  101. package/src/components/frontStore/stripe/checkout/CheckoutForm.jsx +2 -2
  102. package/src/components/frontStore/stripe/checkout/TestCards.jsx +1 -1
  103. package/src/components/frontStore/widgets/BasicMenu.jsx +129 -0
  104. package/src/{modules/catalog/pages/frontStore/homepage/FeaturedProducts.jsx → components/frontStore/widgets/CollectionProducts.jsx} +40 -32
  105. package/src/components/frontStore/widgets/TextBlock.jsx +46 -0
  106. package/src/lib/componee/getComponentsByRoute.js +15 -2
  107. package/src/lib/event/event-manager.js +1 -1
  108. package/src/lib/middleware/tests/app/modules/404page/pages/frontStore/product/route.json +2 -1
  109. package/src/lib/middlewares/static.js +3 -1
  110. package/src/lib/response/render.js +5 -6
  111. package/src/lib/router/Router.js +1 -1
  112. package/src/lib/router/loadModuleRoutes.js +3 -0
  113. package/src/lib/router/registerAdminRoute.js +9 -1
  114. package/src/lib/router/registerFrontStoreRoute.js +2 -0
  115. package/src/lib/router/scanForRoutes.js +1 -0
  116. package/src/lib/router/tests/unit/unit.validateRoute.test.js +7 -1
  117. package/src/lib/util/defaultPaginationFilters.js +19 -17
  118. package/src/lib/util/getEnabledWidgets.js +28 -0
  119. package/src/lib/util/merge.js +67 -14
  120. package/src/lib/util/tests/unit/util.merge.test.js +21 -4
  121. package/src/lib/util/validateConfiguration.js +83 -0
  122. package/src/lib/webpack/createBaseConfig.js +4 -1
  123. package/src/lib/webpack/dev/createConfigClient.js +10 -2
  124. package/src/lib/webpack/loaders/AreaLoader.js +14 -3
  125. package/src/lib/webpack/util/parseGraphql.js +29 -16
  126. package/src/lib/webpack/util/parseGraphqlByFile.js +16 -2
  127. package/src/modules/auth/pages/admin/adminLogin/LoginForm.jsx +54 -21
  128. package/src/modules/auth/pages/admin/all/AdminUser.jsx +3 -3
  129. package/src/modules/base/bootstrap.js +79 -0
  130. package/src/modules/base/graphql/types/Route/Route.admin.graphql +15 -0
  131. package/src/modules/base/graphql/types/Route/Route.admin.resolvers.js +10 -0
  132. package/src/modules/base/pages/global/response[errorHandler].js +23 -0
  133. package/src/modules/catalog/bootstrap.js +125 -5
  134. package/src/modules/catalog/graphql/types/Category/Category.graphql +4 -3
  135. package/src/modules/catalog/graphql/types/Category/Category.resolvers.js +34 -0
  136. package/src/modules/catalog/graphql/types/Collection/Collection.graphql +2 -2
  137. package/src/modules/catalog/graphql/types/Collection/Collection.resolvers.js +34 -0
  138. package/src/modules/catalog/graphql/types/Product/Attribute/ProductAttribute.resolvers.js +1 -0
  139. package/src/modules/catalog/graphql/types/Product/Product.graphql +1 -1
  140. package/src/modules/catalog/graphql/types/Product/Product.resolvers.js +34 -0
  141. package/src/modules/catalog/graphql/types/Widget/CollectionProductsWidget/CollectionProductsWidget.graphql +11 -0
  142. package/src/modules/catalog/graphql/types/Widget/CollectionProductsWidget/CollectionProductsWidget.resolvers.js +8 -0
  143. package/src/modules/catalog/migration/Version-1.0.0.js +1 -0
  144. package/src/modules/catalog/migration/Version-1.0.7.js +10 -0
  145. package/src/modules/catalog/pages/admin/attributeEdit+attributeNew/FormContent.jsx +4 -4
  146. package/src/modules/catalog/pages/admin/attributeEdit+attributeNew/General.jsx +5 -5
  147. package/src/modules/catalog/pages/admin/attributeGrid/Grid.jsx +2 -2
  148. package/src/modules/catalog/pages/admin/categoryEdit/Products.jsx +4 -4
  149. package/src/modules/catalog/pages/admin/categoryEdit+categoryNew/FormContent.jsx +4 -4
  150. package/src/modules/catalog/pages/admin/categoryEdit+categoryNew/General.jsx +16 -18
  151. package/src/modules/catalog/pages/admin/categoryEdit+categoryNew/Image.jsx +1 -2
  152. package/src/modules/catalog/pages/admin/categoryEdit+categoryNew/Status.jsx +16 -1
  153. package/src/modules/catalog/pages/admin/categoryGrid/Grid.jsx +3 -3
  154. package/src/modules/catalog/pages/admin/collectionEdit/Products.jsx +4 -4
  155. package/src/modules/catalog/pages/admin/collectionEdit+collectionNew/FormContent.jsx +2 -2
  156. package/src/modules/catalog/pages/admin/collectionEdit+collectionNew/General.jsx +2 -2
  157. package/src/modules/catalog/pages/admin/collectionGrid/Grid.jsx +3 -3
  158. package/src/modules/catalog/pages/admin/productEdit/Collection.jsx +7 -7
  159. package/src/modules/catalog/pages/admin/productEdit+productNew/Attributes.jsx +1 -1
  160. package/src/modules/catalog/pages/admin/productEdit+productNew/CustomOptions.jsss +4 -4
  161. package/src/modules/catalog/pages/admin/productEdit+productNew/FormContent.jsx +4 -4
  162. package/src/modules/catalog/pages/admin/productEdit+productNew/General.jsx +15 -17
  163. package/src/modules/catalog/pages/admin/productGrid/Grid.jsx +3 -3
  164. package/src/modules/catalog/pages/frontStore/catalogSearch/General.jsx +2 -2
  165. package/src/modules/catalog/pages/frontStore/catalogSearch/Products.jsx +1 -1
  166. package/src/modules/catalog/pages/frontStore/catalogSearch/route.json +2 -1
  167. package/src/modules/catalog/pages/frontStore/categoryView/CategoryView.jsx +19 -2
  168. package/src/modules/catalog/pages/frontStore/categoryView/Filter.scss +1 -0
  169. package/src/modules/catalog/pages/frontStore/categoryView/General.jsx +6 -8
  170. package/src/modules/catalog/pages/frontStore/categoryView/General.scss +0 -2
  171. package/src/modules/catalog/pages/frontStore/categoryView/Pagination.jsx +6 -0
  172. package/src/modules/catalog/pages/frontStore/categoryView/Products.jsx +8 -1
  173. package/src/modules/catalog/pages/frontStore/categoryView/route.json +2 -1
  174. package/src/modules/catalog/pages/frontStore/productView/Description.jsx +3 -3
  175. package/src/modules/catalog/pages/frontStore/productView/Form.jsx +4 -4
  176. package/src/modules/catalog/pages/frontStore/productView/Form.scss +1 -0
  177. package/src/modules/catalog/pages/frontStore/productView/GeneralInfo.jsx +1 -1
  178. package/src/modules/catalog/pages/frontStore/productView/Images.jsx +1 -1
  179. package/src/modules/catalog/pages/frontStore/productView/Layout.jsx +1 -1
  180. package/src/modules/catalog/pages/frontStore/productView/Options.jsx +2 -2
  181. package/src/modules/catalog/pages/frontStore/productView/Variants.jsx +4 -4
  182. package/src/modules/catalog/pages/frontStore/productView/route.json +2 -1
  183. package/src/modules/catalog/services/AttributeCollection.js +10 -10
  184. package/src/modules/catalog/services/AttributeGroupCollection.js +10 -10
  185. package/src/modules/catalog/services/CategoryCollection.js +10 -10
  186. package/src/modules/catalog/services/CollectionCollection.js +10 -10
  187. package/src/modules/catalog/services/registerCartItemProductUrlField.js +35 -0
  188. package/src/modules/catalog/services/registerCartItemVariantOptionsField.js +51 -0
  189. package/src/modules/catalog/services/registerDefaultCategoryCollectionFilters.js +16 -0
  190. package/src/modules/checkout/api/addShippingNote/[context]bodyParser[auth].js +5 -0
  191. package/src/modules/checkout/api/addShippingNote/payloadSchema.json +15 -0
  192. package/src/modules/checkout/api/addShippingNote/route.json +5 -0
  193. package/src/modules/checkout/api/addShippingNote/saveShippingNote.js +50 -0
  194. package/src/modules/checkout/api/createCart/createNewCart.js +28 -1
  195. package/src/modules/checkout/api/updateCartItemQty/[bodyParser]updateQty.js +49 -0
  196. package/src/modules/checkout/api/updateCartItemQty/[context]bodyParser[auth].js +5 -0
  197. package/src/modules/checkout/api/updateCartItemQty/payloadSchema.json +21 -0
  198. package/src/modules/checkout/api/updateCartItemQty/route.json +5 -0
  199. package/src/modules/checkout/api/updateMineCartItemQty/[context]bodyParser[auth].js +5 -0
  200. package/src/modules/checkout/api/updateMineCartItemQty/[detectCurrentCart]updateQty.js +51 -0
  201. package/src/modules/checkout/api/updateMineCartItemQty/[getCurrentCustomer]detectCurrentCart.js +32 -0
  202. package/src/modules/checkout/api/updateMineCartItemQty/payloadSchema.json +21 -0
  203. package/src/modules/checkout/api/updateMineCartItemQty/route.json +5 -0
  204. package/src/modules/checkout/bootstrap.js +27 -0
  205. package/src/modules/checkout/graphql/types/Cart/Cart.graphql +22 -3
  206. package/src/modules/checkout/graphql/types/Cart/Cart.resolvers.js +18 -2
  207. package/src/modules/checkout/graphql/types/CheckoutSetting/CheckoutSetting.graphql +3 -0
  208. package/src/modules/checkout/graphql/types/CheckoutSetting/CheckoutSetting.resolvers.js +7 -0
  209. package/src/modules/checkout/migration/Version-1.0.0.js +14 -0
  210. package/src/modules/checkout/migration/Version-1.0.6.js +201 -0
  211. package/src/modules/checkout/pages/admin/shippingSetting/ShippingSetting.jsx +2 -2
  212. package/src/modules/checkout/pages/frontStore/all/[context]detectCurrentCart[auth].js +5 -0
  213. package/src/modules/checkout/pages/frontStore/cart/ShoppingCart.jsx +17 -8
  214. package/src/modules/checkout/pages/frontStore/cart/Summary.jsx +18 -19
  215. package/src/modules/checkout/pages/frontStore/cart/route.json +2 -1
  216. package/src/modules/checkout/pages/frontStore/checkout/Checkout.jsx +5 -5
  217. package/src/modules/checkout/pages/frontStore/checkout/Checkout.scss +4 -0
  218. package/src/modules/checkout/pages/frontStore/checkout/ShippingMethods.jsx +2 -2
  219. package/src/modules/checkout/pages/frontStore/checkout/ShippingNote.jsx +105 -0
  220. package/src/modules/checkout/pages/frontStore/checkout/Summary.jsx +14 -14
  221. package/src/modules/checkout/pages/frontStore/checkout/SummaryMobile.jsx +12 -15
  222. package/src/modules/checkout/pages/frontStore/checkout/route.json +2 -1
  223. package/src/modules/checkout/pages/frontStore/checkoutSuccess/CheckoutSuccess.jsx +1 -1
  224. package/src/modules/checkout/pages/frontStore/checkoutSuccess/CheckoutSuccess.scss +4 -0
  225. package/src/modules/checkout/pages/frontStore/checkoutSuccess/CustomerInfo.jsx +30 -32
  226. package/src/modules/checkout/pages/frontStore/checkoutSuccess/ShippingNote.jsx +47 -0
  227. package/src/modules/checkout/pages/frontStore/checkoutSuccess/Summary.jsx +12 -15
  228. package/src/modules/checkout/pages/frontStore/checkoutSuccess/route.json +2 -1
  229. package/src/modules/checkout/services/cart/Cart.js +31 -27
  230. package/src/modules/checkout/services/cart/registerCartBaseFields.js +133 -41
  231. package/src/modules/checkout/services/cart/registerCartItemBaseFields.js +300 -374
  232. package/src/modules/checkout/services/toPrice.js +1 -1
  233. package/src/modules/checkout/tests/basicSetup.js +85 -0
  234. package/src/modules/checkout/tests/coupons.js +82 -0
  235. package/src/modules/checkout/tests/products.js +67 -0
  236. package/src/modules/checkout/tests/taxRates.js +3 -0
  237. package/src/modules/checkout/tests/unit/discountAmount.test.js +60 -0
  238. package/src/modules/checkout/tests/unit/grandTotal.test.js +83 -0
  239. package/src/modules/checkout/tests/unit/lineTotal.test.js +90 -0
  240. package/src/modules/checkout/tests/unit/lineTotalWithDiscount.test.js +103 -0
  241. package/src/modules/checkout/tests/unit/productPrice.test.js +67 -0
  242. package/src/modules/checkout/tests/unit/subTotal.test.js +85 -0
  243. package/src/modules/checkout/tests/unit/subTotalWithDiscount.test.js +117 -0
  244. package/src/modules/checkout/tests/unit/taxAmount.test.js +67 -0
  245. package/src/modules/checkout/tests/unit/taxAmountRounding.test.js +277 -0
  246. package/src/modules/cms/api/createWidget/[context]bodyParser[auth].js +5 -0
  247. package/src/modules/cms/api/createWidget/createWidget[finish].js +17 -0
  248. package/src/modules/cms/api/createWidget/finish[apiResponse].js +27 -0
  249. package/src/modules/cms/api/createWidget/payloadSchema.json +18 -0
  250. package/src/modules/cms/api/createWidget/route.json +5 -0
  251. package/src/modules/cms/api/deleteWidget/deleteWidget.js +27 -0
  252. package/src/modules/cms/api/deleteWidget/route.json +5 -0
  253. package/src/modules/cms/api/updateWidget/[context]bodyParser[auth].js +5 -0
  254. package/src/modules/cms/api/updateWidget/finish[apiResponse].js +27 -0
  255. package/src/modules/cms/api/updateWidget/payloadSchema.json +18 -0
  256. package/src/modules/cms/api/updateWidget/route.json +5 -0
  257. package/src/modules/cms/api/updateWidget/updateWidget[finish].js +17 -0
  258. package/src/modules/cms/bootstrap.js +223 -3
  259. package/src/modules/cms/graphql/types/CmsPage/CmsPage.graphql +1 -2
  260. package/src/modules/cms/graphql/types/CmsPage/CmsPage.resolvers.js +35 -1
  261. package/src/modules/cms/graphql/types/Widget/Widget.graphql +91 -0
  262. package/src/modules/cms/graphql/types/Widget/Widget.resolvers.js +142 -0
  263. package/src/modules/cms/migration/Version-1.1.0.js +22 -0
  264. package/src/modules/cms/migration/Version-1.1.1.js +103 -0
  265. package/src/modules/cms/pages/admin/adminNotFound/NotFound.jsx +4 -4
  266. package/src/modules/cms/pages/admin/all/CmsMenuGroup.jsx +12 -4
  267. package/src/modules/cms/pages/admin/all/Notification.scss +1 -1
  268. package/src/modules/cms/pages/admin/all/search/NoResult.jsx +2 -2
  269. package/src/modules/cms/pages/admin/all/search/Results.jsx +3 -3
  270. package/src/modules/cms/pages/admin/cmsPageEdit+cmsPageNew/FormContent.jsx +7 -9
  271. package/src/modules/cms/pages/admin/cmsPageEdit+cmsPageNew/General.jsx +3 -3
  272. package/src/modules/cms/pages/admin/cmsPageEdit+cmsPageNew/Seo.jsx +1 -1
  273. package/src/modules/cms/pages/admin/cmsPageEdit+cmsPageNew/Status.jsx +40 -0
  274. package/src/modules/cms/pages/admin/cmsPageGrid/Grid.jsx +3 -4
  275. package/src/modules/cms/pages/admin/dashboard/Layout.jsx +3 -3
  276. package/src/modules/cms/pages/admin/widgetEdit/WidgetForm.jsx +52 -0
  277. package/src/modules/cms/pages/admin/widgetEdit/index.js +36 -0
  278. package/src/modules/cms/pages/admin/widgetEdit/route.json +4 -0
  279. package/src/modules/cms/pages/admin/widgetEdit+widgetNew/FormContent.jsx +69 -0
  280. package/src/modules/cms/pages/admin/widgetEdit+widgetNew/FormContent.scss +7 -0
  281. package/src/modules/cms/pages/admin/widgetEdit+widgetNew/General.jsx +185 -0
  282. package/src/modules/cms/pages/admin/widgetEdit+widgetNew/PageHeading.jsx +37 -0
  283. package/src/modules/cms/pages/admin/widgetEdit+widgetNew/Setting.jsx +55 -0
  284. package/src/modules/cms/pages/admin/widgetGrid/Grid.jsx +415 -0
  285. package/src/modules/cms/pages/admin/widgetGrid/Heading.jsx +11 -0
  286. package/src/modules/cms/pages/admin/widgetGrid/NewWidgetButton.jsx +52 -0
  287. package/src/modules/cms/pages/admin/widgetGrid/index.js +15 -0
  288. package/src/modules/cms/pages/admin/widgetGrid/route.json +4 -0
  289. package/src/modules/cms/pages/admin/widgetNew/WidgetNewForm.jsx +60 -0
  290. package/src/modules/cms/pages/admin/widgetNew/index.js +11 -0
  291. package/src/modules/cms/pages/admin/widgetNew/route.json +4 -0
  292. package/src/modules/cms/pages/admin/widgetNew/typeValidate.js +21 -0
  293. package/src/modules/cms/pages/frontStore/all/Breadcrumb.jsx +1 -1
  294. package/src/modules/cms/pages/frontStore/all/Footer.jsx +2 -2
  295. package/src/modules/cms/pages/frontStore/all/Layout.jsx +3 -3
  296. package/src/modules/cms/pages/frontStore/all/Layout.scss +13 -0
  297. package/src/modules/cms/pages/frontStore/all/Logo.jsx +2 -2
  298. package/src/modules/cms/pages/frontStore/all/Logo.scss +2 -4
  299. package/src/modules/cms/pages/frontStore/all/Notification.scss +1 -1
  300. package/src/modules/cms/pages/frontStore/cmsPageView/Layout.jsx +2 -2
  301. package/src/modules/cms/pages/frontStore/cmsPageView/View.jsx +5 -3
  302. package/src/modules/cms/pages/frontStore/cmsPageView/index.js +6 -12
  303. package/src/modules/cms/pages/frontStore/cmsPageView/route.json +2 -1
  304. package/src/modules/cms/pages/frontStore/homepage/route.json +2 -1
  305. package/src/modules/cms/pages/frontStore/notFound/NotFound.jsx +4 -4
  306. package/src/modules/cms/pages/frontStore/notFound/route.json +2 -1
  307. package/src/modules/cms/pages/frontStore/staticAsset/[context]staticAssets[auth].js +1 -1
  308. package/src/modules/cms/services/CMSPageCollection.js +10 -10
  309. package/src/modules/cms/services/WidgetCollection.js +62 -0
  310. package/src/modules/cms/services/getWidgetsBaseQuery.js +7 -0
  311. package/src/modules/cms/services/page/createPage.js +1 -2
  312. package/src/modules/cms/services/page/pageDataSchema.json +0 -4
  313. package/src/modules/cms/services/registerDefaultWidgetCollectionFilters.js +62 -0
  314. package/src/modules/cms/services/tailwind.admin.config.js +22 -107
  315. package/src/modules/cms/services/tailwind.frontStore.config.js +23 -108
  316. package/src/modules/cms/services/widget/createWidget.js +73 -0
  317. package/src/modules/cms/services/widget/deleteWidget.js +49 -0
  318. package/src/modules/cms/services/widget/loadWidgetInstances.js +54 -0
  319. package/src/modules/cms/services/widget/updateWidget.js +86 -0
  320. package/src/modules/cms/services/widget/widgetDataSchema.json +29 -0
  321. package/src/modules/cod/pages/admin/paymentSetting/CODSetting.jsx +2 -2
  322. package/src/modules/cod/pages/frontStore/checkout/CashOnDelivery.jsx +1 -1
  323. package/src/modules/customer/bootstrap.js +21 -4
  324. package/src/modules/customer/pages/admin/customerEdit/CustomerEditForm.jsx +3 -3
  325. package/src/modules/customer/pages/admin/customerEdit+customerNew/OrderHistory.jsx +1 -1
  326. package/src/modules/customer/pages/admin/customerGrid/Grid.jsx +3 -3
  327. package/src/modules/customer/pages/frontStore/account/AccountDetails.jsx +3 -3
  328. package/src/modules/customer/pages/frontStore/account/Layout.jsx +3 -3
  329. package/src/modules/customer/pages/frontStore/account/OrderHistory.jsx +1 -1
  330. package/src/modules/customer/pages/frontStore/account/route.json +2 -1
  331. package/src/modules/customer/pages/frontStore/login/LoginForm.jsx +2 -2
  332. package/src/modules/customer/pages/frontStore/login/route.json +2 -1
  333. package/src/modules/customer/pages/frontStore/register/RegisterForm.jsx +2 -2
  334. package/src/modules/customer/pages/frontStore/register/route.json +2 -1
  335. package/src/modules/customer/pages/frontStore/resetPasswordPage/ResetPasswordForm.jsx +2 -2
  336. package/src/modules/customer/pages/frontStore/resetPasswordPage/route.json +2 -1
  337. package/src/modules/customer/pages/frontStore/updatePasswordPage/UpdatePasswordForm.jsx +3 -3
  338. package/src/modules/customer/pages/frontStore/updatePasswordPage/route.json +2 -1
  339. package/src/modules/customer/services/CustomerCollection.js +10 -10
  340. package/src/modules/customer/services/CustomerGroupCollection.js +10 -10
  341. package/src/modules/graphql/pages/global/[bodyParser]buildQuery[graphql].js +238 -6
  342. package/src/modules/graphql/pages/global/[buildQuery]graphql[notification].js +12 -8
  343. package/src/modules/oms/bootstrap.js +87 -3
  344. package/src/modules/oms/graphql/types/Order/Order.graphql +11 -2
  345. package/src/modules/oms/graphql/types/Order/Order.resolvers.js +7 -1
  346. package/src/modules/oms/pages/admin/dashboard/Bestsellers.jsx +2 -2
  347. package/src/modules/oms/pages/admin/dashboard/Lifetimesales.jsx +5 -5
  348. package/src/modules/oms/pages/admin/orderEdit/AddTrackingButton.jsx +1 -1
  349. package/src/modules/oms/pages/admin/orderEdit/Items.jsx +7 -7
  350. package/src/modules/oms/pages/admin/orderEdit/Layout.jsx +3 -3
  351. package/src/modules/oms/pages/admin/orderEdit/Payment.jsx +6 -6
  352. package/src/modules/oms/pages/admin/orderEdit/ShipButton.jsx +1 -1
  353. package/src/modules/oms/pages/admin/orderGrid/Grid.jsx +3 -3
  354. package/src/modules/oms/services/OrderCollection.js +10 -10
  355. package/src/modules/paypal/api/paypalCreateOrder/[bodyParser]createOrder.js +55 -24
  356. package/src/modules/paypal/pages/admin/paymentSetting/PaypalSetting.jsx +6 -6
  357. package/src/modules/paypal/pages/frontStore/checkout/Paypal.jsx +3 -4
  358. package/src/modules/promotion/bootstrap.js +19 -101
  359. package/src/modules/promotion/pages/admin/couponEdit+couponNew/DiscountType.jsx +1 -1
  360. package/src/modules/promotion/pages/admin/couponEdit+couponNew/FormContent.jsx +5 -5
  361. package/src/modules/promotion/pages/admin/couponGrid/Grid.jsx +3 -3
  362. package/src/modules/promotion/pages/frontStore/cart/Coupon.jsx +2 -2
  363. package/src/modules/promotion/services/CouponCollection.js +10 -10
  364. package/src/modules/promotion/services/couponValidator.js +4 -7
  365. package/src/modules/promotion/services/discountCalculator.js +2 -7
  366. package/src/modules/promotion/services/registerCartItemPromotionFields.js +80 -0
  367. package/src/modules/promotion/services/registerCartPromotionFields.js +128 -0
  368. package/src/modules/promotion/services/registerDefaultCalculators.js +48 -20
  369. package/src/modules/promotion/services/registerDefaultValidators.js +16 -4
  370. package/src/modules/setting/pages/admin/paymentSetting/PaymentSetting.jsx +2 -2
  371. package/src/modules/setting/pages/admin/storeSetting/StoreSetting.jsx +98 -35
  372. package/src/modules/stripe/pages/admin/paymentSetting/StripePayment.jsx +5 -5
  373. package/src/modules/stripe/pages/frontStore/checkout/Stripe.jsx +1 -1
  374. package/src/modules/tax/bootstrap.js +40 -5
  375. package/src/modules/tax/graphql/types/Product/Price/ProductPrice.resolvers.js +6 -39
  376. package/src/modules/tax/graphql/types/TaxSetting/TaxSetting.graphql +1 -2
  377. package/src/modules/tax/graphql/types/TaxSetting/TaxSetting.resolvers.js +1 -8
  378. package/src/modules/tax/pages/admin/taxSetting/TaxSetting.jsx +4 -4
  379. package/src/modules/tax/services/TaxClassCollection.js +10 -10
  380. package/src/modules/tax/services/calculateTaxAmount.js +12 -9
  381. package/src/modules/tax/services/registerCartItemTaxPercentField.js +76 -0
  382. package/src/modules/auth/services/adminSessionMiddleware.js +0 -0
  383. package/src/modules/catalog/pages/frontStore/homepage/FeaturedCategories.jsx +0 -58
  384. package/src/modules/cms/pages/admin/cmsPageEdit+cmsPageNew/StatusAndLayout.jsx +0 -61
  385. package/src/modules/cms/pages/frontStore/all/Menu.jsx +0 -46
  386. package/src/modules/cms/pages/frontStore/all/Menu.scss +0 -7
  387. package/src/modules/cms/pages/frontStore/all/MobileMenu.jsx +0 -73
  388. package/src/modules/cms/pages/frontStore/all/MobileMenu.scss +0 -35
  389. package/src/modules/cms/pages/frontStore/homepage/MainBanner.jsx +0 -31
  390. package/src/modules/cms/pages/frontStore/homepage/MainBanner.scss +0 -48
@@ -9,15 +9,15 @@ export default function FormContent({ gridUrl }) {
9
9
  const { state } = useFormContext();
10
10
  return (
11
11
  <>
12
- <div className="grid grid-cols-3 gap-x-2 grid-flow-row ">
13
- <div className="col-span-2 grid grid-cols-1 gap-2 auto-rows-max">
12
+ <div className="grid grid-cols-3 gap-x-8 grid-flow-row ">
13
+ <div className="col-span-2 grid grid-cols-1 gap-8 auto-rows-max">
14
14
  <Area id="leftSide" noOuter />
15
15
  </div>
16
- <div className="col-span-1 grid grid-cols-1 gap-2 auto-rows-max">
16
+ <div className="col-span-1 grid grid-cols-1 gap-8 auto-rows-max">
17
17
  <Area id="rightSide" noOuter />
18
18
  </div>
19
19
  </div>
20
- <div className="form-submit-button flex border-t border-divider mt-15 pt-15 justify-between">
20
+ <div className="form-submit-button flex border-t border-divider mt-6 pt-6 justify-between">
21
21
  <Button
22
22
  title="Cancel"
23
23
  variant="critical"
@@ -3,12 +3,12 @@ import React from 'react';
3
3
  import Area from '@components/common/Area';
4
4
  import { Field } from '@components/common/form/Field';
5
5
  import { Card } from '@components/admin/cms/Card';
6
- import CkeditorField from '@components/common/form/fields/Ckeditor';
7
6
  import CategoryTree from '@components/admin/catalog/productEdit/category/CategoryTree';
7
+ import Editor from '@components/common/form/fields/Editor';
8
8
 
9
9
  function SKUPriceWeight({ sku, price, weight, setting }) {
10
10
  return (
11
- <div className="grid grid-cols-3 gap-1 mt-15">
11
+ <div className="grid grid-cols-3 gap-4 mt-6">
12
12
  <div>
13
13
  <Field
14
14
  id="sku"
@@ -71,17 +71,17 @@ function Category({ product }) {
71
71
  );
72
72
 
73
73
  return (
74
- <div className="mt-15 relative">
75
- <div className="mb-1">Category</div>
74
+ <div className="mt-6 relative">
75
+ <div className="mb-4">Category</div>
76
76
  {category && (
77
- <div className="border rounded border-[#c9cccf] mb-1 p-1">
77
+ <div className="border rounded border-[#c9cccf] mb-4 p-4">
78
78
  {category.path.map((item, index) => (
79
79
  <span key={item.name} className="text-gray-500">
80
80
  {item.name}
81
81
  {index < category.path.length - 1 && ' > '}
82
82
  </span>
83
83
  ))}
84
- <span className="text-interactive pl-2">
84
+ <span className="text-interactive pl-8">
85
85
  <a
86
86
  href="#"
87
87
  onClick={(e) => {
@@ -97,7 +97,7 @@ function Category({ product }) {
97
97
  e.preventDefault();
98
98
  setCategory(null);
99
99
  }}
100
- className="text-critical ml-2"
100
+ className="text-critical ml-8"
101
101
  >
102
102
  Unassign
103
103
  </a>
@@ -117,15 +117,13 @@ function Category({ product }) {
117
117
  </a>
118
118
  )}
119
119
  {selecting && (
120
- <div className="absolute top-5 left-0 right-0 bg-[#eff2f5] z-50 border rounded border-[#c9cccf] p-[10px]">
121
- <CategoryTree
122
- selectedCategory={category}
123
- setSelectedCategory={(cat) => {
124
- setCategory(cat);
125
- setSelecting(false);
126
- }}
127
- />
128
- </div>
120
+ <CategoryTree
121
+ selectedCategory={category}
122
+ setSelectedCategory={(cat) => {
123
+ setCategory(cat);
124
+ setSelecting(false);
125
+ }}
126
+ />
129
127
  )}
130
128
  {category && (
131
129
  <input type="hidden" name="category_id" value={category?.categoryId} />
@@ -229,7 +227,7 @@ export default function General({
229
227
  id: 'tax_class'
230
228
  },
231
229
  {
232
- component: { default: CkeditorField },
230
+ component: { default: Editor },
233
231
  props: {
234
232
  id: 'description',
235
233
  name: 'description',
@@ -124,7 +124,7 @@ function Actions({ products = [], selectedIds = [] }) {
124
124
  {selectedIds.length > 0 && (
125
125
  <td style={{ borderTop: 0 }} colSpan="100">
126
126
  <div className="inline-flex border border-divider rounded justify-items-start">
127
- <a href="#" className="font-semibold pt-075 pb-075 pl-15 pr-15">
127
+ <a href="#" className="font-semibold pt-3 pb-3 pl-6 pr-6">
128
128
  {selectedIds.length} selected
129
129
  </a>
130
130
  {actions.map((action) => (
@@ -134,7 +134,7 @@ function Actions({ products = [], selectedIds = [] }) {
134
134
  e.preventDefault();
135
135
  action.onAction();
136
136
  }}
137
- className="font-semibold pt-075 pb-075 pl-15 pr-15 block border-l border-divider self-center"
137
+ className="font-semibold pt-3 pb-3 pl-6 pr-6 block border-l border-divider self-center"
138
138
  >
139
139
  <span>{action.name}</span>
140
140
  </a>
@@ -174,7 +174,7 @@ export default function ProductGrid({
174
174
  <Card.Session
175
175
  title={
176
176
  <Form submitBtn={false}>
177
- <div className="flex gap-2 justify-center items-center">
177
+ <div className="flex gap-8 justify-center items-center">
178
178
  <Area
179
179
  id="productGridFilter"
180
180
  noOuter
@@ -15,9 +15,9 @@ export default function SearchInfo() {
15
15
 
16
16
  return (
17
17
  <div className="page-width">
18
- <div className="mb-1 md:mb-2">
18
+ <div className="mb-4 md:mb-8">
19
19
  <div className="text-left ">
20
- <h1 className="search-name mt-25">
20
+ <h1 className="search-name mt-10">
21
21
  {_('Search results for "${keyword}"', { keyword: key })}
22
22
  </h1>
23
23
  </div>
@@ -7,7 +7,7 @@ export default function Products({ products: { items } }) {
7
7
  return (
8
8
  <div>
9
9
  <ProductList products={items} countPerRow={4} />
10
- <span className="product-count italic block mt-2">
10
+ <span className="product-count italic block mt-8">
11
11
  {_('${count} products', { count: items.length })}
12
12
  </span>
13
13
  </div>
@@ -1,4 +1,5 @@
1
1
  {
2
2
  "methods": ["GET"],
3
- "path": "/search"
3
+ "path": "/search",
4
+ "name": "Catalog search page"
4
5
  }
@@ -1,16 +1,33 @@
1
1
  import React from 'react';
2
+ import PropTypes from 'prop-types';
2
3
  import Area from '@components/common/Area';
3
4
 
4
- export default function CategoryView() {
5
+ export default function CategoryView({ category }) {
6
+ if (!category.showProducts) {
7
+ return null;
8
+ }
5
9
  return (
6
- <div className="page-width grid grid-cols-1 md:grid-cols-4 gap-2">
10
+ <div className="page-width grid grid-cols-1 md:grid-cols-4 gap-8">
7
11
  <Area id="leftColumn" className="md:col-span-1" />
8
12
  <Area id="rightColumn" className="md:col-span-3" />
9
13
  </div>
10
14
  );
11
15
  }
12
16
 
17
+ CategoryView.propTypes = {
18
+ category: PropTypes.shape({
19
+ showProducts: PropTypes.number
20
+ }).isRequired
21
+ };
22
+
13
23
  export const layout = {
14
24
  areaId: 'content',
15
25
  sortOrder: 10
16
26
  };
27
+
28
+ export const query = `
29
+ query Query {
30
+ category(id: getContextValue('categoryId')) {
31
+ showProducts
32
+ }
33
+ }`;
@@ -132,6 +132,7 @@ input[type='range']:nth-child(1)::-webkit-slider-thumb {
132
132
  background-color: #fff;
133
133
  padding: 20px;
134
134
  box-sizing: border-box;
135
+ overflow: auto;
135
136
  }
136
137
 
137
138
  .filter-opener,
@@ -2,23 +2,21 @@
2
2
  import React from 'react';
3
3
  import PropTypes from 'prop-types';
4
4
  import './General.scss';
5
- import { CKEditor } from '@components/common/CKEditor';
5
+ import Editor from '@components/common/Editor';
6
6
 
7
7
  export default function CategoryInfo({
8
8
  category: { name, description, image }
9
9
  }) {
10
10
  return (
11
11
  <div className="page-width">
12
- <div className="mb-1 md:mb-2 category__general">
12
+ <div className="mb-4 md:mb-8 category__general">
13
13
  {image && (
14
14
  <img src={image.url} alt={name} className="category__image" />
15
15
  )}
16
- <div className="category__info">
17
- <div>
18
- <h1 className="category__name">{name}</h1>
19
- <div className="category__description">
20
- <CKEditor content={description} />
21
- </div>
16
+ <div className="category__info prose prose-base max-w-none">
17
+ <h1 className="category__name">{name}</h1>
18
+ <div className="category__description">
19
+ <Editor rows={description} />
22
20
  </div>
23
21
  </div>
24
22
  </div>
@@ -20,8 +20,6 @@
20
20
  padding: 50px;
21
21
  }
22
22
  .category__info {
23
- color: black;
24
- display: flex;
25
23
  align-items: center;
26
24
  }
27
25
  }
@@ -4,9 +4,13 @@ import { Pagination } from '@components/frontStore/catalog/product/list/Paginati
4
4
 
5
5
  export default function PaginationWrapper({
6
6
  products: {
7
+ showProducts,
7
8
  products: { total, currentFilters }
8
9
  }
9
10
  }) {
11
+ if (!showProducts) {
12
+ return null;
13
+ }
10
14
  const page = currentFilters.find((filter) => filter.key === 'page');
11
15
  const limit = currentFilters.find((filter) => filter.key === 'limit');
12
16
 
@@ -21,6 +25,7 @@ export default function PaginationWrapper({
21
25
 
22
26
  PaginationWrapper.propTypes = {
23
27
  products: PropTypes.shape({
28
+ showProducts: PropTypes.number.isRequired,
24
29
  products: PropTypes.shape({
25
30
  total: PropTypes.number.isRequired,
26
31
  currentFilters: PropTypes.arrayOf(
@@ -42,6 +47,7 @@ export const layout = {
42
47
  export const query = `
43
48
  query Query($filters: [FilterInput]) {
44
49
  products: category(id: getContextValue('categoryId')) {
50
+ showProducts
45
51
  products(filters: $filters) {
46
52
  total
47
53
  currentFilters {
@@ -5,13 +5,17 @@ import { _ } from '@evershop/evershop/src/lib/locale/translate';
5
5
 
6
6
  export default function Products({
7
7
  products: {
8
+ showProducts,
8
9
  products: { items }
9
10
  }
10
11
  }) {
12
+ if (!showProducts) {
13
+ return null;
14
+ }
11
15
  return (
12
16
  <div>
13
17
  <ProductList products={items} countPerRow={3} />
14
- <span className="product-count italic block mt-2">
18
+ <span className="product-count italic block mt-8">
15
19
  {_('${count} products', { count: items.length })}
16
20
  </span>
17
21
  </div>
@@ -20,6 +24,7 @@ export default function Products({
20
24
 
21
25
  Products.propTypes = {
22
26
  products: PropTypes.shape({
27
+ showProducts: PropTypes.number,
23
28
  products: PropTypes.shape({
24
29
  items: PropTypes.arrayOf(
25
30
  PropTypes.shape({
@@ -48,6 +53,7 @@ Products.propTypes = {
48
53
 
49
54
  Products.defaultProps = {
50
55
  products: {
56
+ showProducts: 1,
51
57
  products: {
52
58
  items: []
53
59
  }
@@ -62,6 +68,7 @@ export const layout = {
62
68
  export const query = `
63
69
  query Query($filters: [FilterInput]) {
64
70
  products: category(id: getContextValue('categoryId')) {
71
+ showProducts
65
72
  products(filters: $filters) {
66
73
  items {
67
74
  ...Product
@@ -1,4 +1,5 @@
1
1
  {
2
2
  "methods": ["GET"],
3
- "path": "/category/:uuid"
3
+ "path": "/category/:uuid",
4
+ "name": "Category page"
4
5
  }
@@ -1,13 +1,13 @@
1
1
  /* eslint-disable react/no-danger */
2
- import { CKEditor } from '@components/common/CKEditor';
2
+ import Editor from '@components/common/Editor';
3
3
  import PropTypes from 'prop-types';
4
4
  import React from 'react';
5
5
 
6
6
  export default function Description({ product: { description } }) {
7
7
  return (
8
- <div className="mt-2 md:mt-3">
8
+ <div className="mt-8 md:mt-12">
9
9
  <div className="product-description">
10
- <CKEditor content={description} />
10
+ <Editor rows={description} />
11
11
  </div>
12
12
  </div>
13
13
  );
@@ -86,7 +86,7 @@ ToastMessage.propTypes = {
86
86
 
87
87
  function AddToCart({ stockAvaibility, loading = false, error }) {
88
88
  return (
89
- <div className="add-to-cart mt-2">
89
+ <div className="add-to-cart mt-8">
90
90
  <div style={{ width: '8rem' }}>
91
91
  <Field
92
92
  type="text"
@@ -98,8 +98,8 @@ function AddToCart({ stockAvaibility, loading = false, error }) {
98
98
  formId="productForm"
99
99
  />
100
100
  </div>
101
- {error && <div className="text-critical mt-1">{error}</div>}
102
- <div className="mt-1">
101
+ {error && <div className="text-critical mt-4">{error}</div>}
102
+ <div className="mt-4">
103
103
  {stockAvaibility === true && (
104
104
  <Button
105
105
  title={_('ADD TO CART')}
@@ -211,7 +211,7 @@ ProductForm.propTypes = {
211
211
 
212
212
  export const layout = {
213
213
  areaId: 'productPageMiddleRight',
214
- sortOrder: 20
214
+ sortOrder: 45
215
215
  };
216
216
 
217
217
  export const query = `
@@ -21,6 +21,7 @@
21
21
  padding: 2rem;
22
22
  border: 1px solid var(--divider);
23
23
  box-shadow: 1px 1px 10px 2px #ebebeb80;
24
+ background-color: #fff;
24
25
  .top-head {
25
26
  grid-template-columns: 4fr 1fr;
26
27
  padding-bottom: 1rem;
@@ -10,7 +10,7 @@ export default function GeneralInfo({ product }) {
10
10
  return (
11
11
  <Area
12
12
  id="productViewGeneralInfo"
13
- className="flex flex-col gap-1"
13
+ className="flex flex-col gap-4"
14
14
  coreComponents={[
15
15
  {
16
16
  component: { default: Name },
@@ -51,7 +51,7 @@ export default function Images({ product: { uuid, image, gallery = [] } }) {
51
51
  return (
52
52
  <div className="product-single-media">
53
53
  <Current image={current} />
54
- <ul className="more-view-thumbnail product-gallery mt-2 grid grid-cols-4 gap-1">
54
+ <ul className="more-view-thumbnail product-gallery mt-8 grid grid-cols-4 gap-4">
55
55
  {thumbs.map((i, j) => (
56
56
  <li key={j} className="flex justify-center items-center">
57
57
  <a
@@ -6,7 +6,7 @@ export default function ProductPageLayout() {
6
6
  <div className="product-detail">
7
7
  <Area id="productPageTop" className="product-page-top" />
8
8
  <div className="product-page-middle page-width">
9
- <div className="grid grid-cols-1 gap-3 md:grid-cols-2">
9
+ <div className="grid grid-cols-1 gap-12 md:grid-cols-2">
10
10
  <Area id="productPageMiddleLeft" />
11
11
  <Area id="productPageMiddleRight" />
12
12
  </div>
@@ -10,8 +10,8 @@ export default function Options({ options = [] }) {
10
10
  }
11
11
 
12
12
  return (
13
- <div className="product-single-options mt-4 mb-4">
14
- <div className="product-single-options-title mb-2">
13
+ <div className="product-single-options mt-16 mb-16">
14
+ <div className="product-single-options-title mb-8">
15
15
  <strong>Options</strong>
16
16
  </div>
17
17
  {options.map((o, i) => {
@@ -146,7 +146,7 @@ export default function Variants({
146
146
  };
147
147
 
148
148
  return (
149
- <div className="variant variant-container grid grid-cols-1 gap-1 mt-2">
149
+ <div className="variant variant-container grid grid-cols-1 gap-4 mt-8">
150
150
  {attributes.map((a, i) => {
151
151
  const options = a.options.filter(
152
152
  (v, j, s) =>
@@ -164,10 +164,10 @@ export default function Variants({
164
164
  type="hidden"
165
165
  value={a.selectedOption}
166
166
  />
167
- <div className="mb-05 text-textSubdued uppercase">
167
+ <div className="mb-2 text-textSubdued uppercase">
168
168
  <span>{a.attribute_name}</span>
169
169
  </div>
170
- <ul className="variant-option-list flex justify-start gap-05 flex-wrap">
170
+ <ul className="variant-option-list flex justify-start gap-2 flex-wrap">
171
171
  {options.map((o) => {
172
172
  let className = '';
173
173
  if (a.selected && a.selectedOption === o.optionId) {
@@ -240,7 +240,7 @@ Variants.propTypes = {
240
240
 
241
241
  export const layout = {
242
242
  areaId: 'productPageMiddleRight',
243
- sortOrder: 40
243
+ sortOrder: 35
244
244
  };
245
245
 
246
246
  export const query = `
@@ -1,4 +1,5 @@
1
1
  {
2
2
  "methods": ["GET"],
3
- "path": "/product/:uuid"
3
+ "path": "/product/:uuid",
4
+ "name": "Product single page"
4
5
  }
@@ -17,16 +17,16 @@ class AttributeCollection {
17
17
  );
18
18
 
19
19
  attributeCollectionFilters.forEach((filter) => {
20
- const check = filters.find((f) => f.key === filter.key);
21
- if (check) {
22
- if (filter.operation.includes(check.operation)) {
23
- filter.callback(
24
- this.baseQuery,
25
- check.operation,
26
- check.value,
27
- currentFilters
28
- );
29
- }
20
+ const check = filters.find(
21
+ (f) => f.key === filter.key && filter.operation.includes(f.operation)
22
+ );
23
+ if (filter.key === '*' || check) {
24
+ filter.callback(
25
+ this.baseQuery,
26
+ check?.operation,
27
+ check?.value,
28
+ currentFilters
29
+ );
30
30
  }
31
31
  });
32
32
 
@@ -58,16 +58,16 @@ class AttributeGroupCollection {
58
58
  );
59
59
 
60
60
  attributeGroupCollectionFilters.forEach((filter) => {
61
- const check = filters.find((f) => f.key === filter.key);
62
- if (check) {
63
- if (filter.operation.includes(check.operation)) {
64
- filter.callback(
65
- this.baseQuery,
66
- check.operation,
67
- check.value,
68
- currentFilters
69
- );
70
- }
61
+ const check = filters.find(
62
+ (f) => f.key === filter.key && filter.operation.includes(f.operation)
63
+ );
64
+ if (filter.key === '*' || check) {
65
+ filter.callback(
66
+ this.baseQuery,
67
+ check?.operation,
68
+ check?.value,
69
+ currentFilters
70
+ );
71
71
  }
72
72
  });
73
73
 
@@ -24,16 +24,16 @@ class CategoryCollection {
24
24
  );
25
25
 
26
26
  categoryCollectionFilters.forEach((filter) => {
27
- const check = filters.find((f) => f.key === filter.key);
28
- if (check) {
29
- if (filter.operation.includes(check.operation)) {
30
- filter.callback(
31
- this.baseQuery,
32
- check.operation,
33
- check.value,
34
- currentFilters
35
- );
36
- }
27
+ const check = filters.find(
28
+ (f) => f.key === filter.key && filter.operation.includes(f.operation)
29
+ );
30
+ if (filter.key === '*' || check) {
31
+ filter.callback(
32
+ this.baseQuery,
33
+ check?.operation,
34
+ check?.value,
35
+ currentFilters
36
+ );
37
37
  }
38
38
  });
39
39
 
@@ -18,16 +18,16 @@ class CollectionCollection {
18
18
  );
19
19
 
20
20
  collectionCollectionFilters.forEach((filter) => {
21
- const check = filters.find((f) => f.key === filter.key);
22
- if (check) {
23
- if (filter.operation.includes(check.operation)) {
24
- filter.callback(
25
- this.baseQuery,
26
- check.operation,
27
- check.value,
28
- currentFilters
29
- );
30
- }
21
+ const check = filters.find(
22
+ (f) => f.key === filter.key && filter.operation.includes(f.operation)
23
+ );
24
+ if (filter.key === '*' || check) {
25
+ filter.callback(
26
+ this.baseQuery,
27
+ check?.operation,
28
+ check?.value,
29
+ currentFilters
30
+ );
31
31
  }
32
32
  });
33
33
 
@@ -0,0 +1,35 @@
1
+ const { pool } = require('@evershop/evershop/src/lib/postgres/connection');
2
+ const { buildUrl } = require('@evershop/evershop/src/lib/router/buildUrl');
3
+ const { select } = require('@evershop/postgres-query-builder');
4
+
5
+ module.exports = exports = {};
6
+
7
+ exports.registerCartItemProductUrlField = (fields) => {
8
+ const newFields = fields.concat([
9
+ {
10
+ key: 'productUrl',
11
+ resolvers: [
12
+ async function resolver() {
13
+ const product = await this.getProduct();
14
+ if (!this.getData('product_id')) {
15
+ return null;
16
+ }
17
+ const urlRewrite = await select()
18
+ .from('url_rewrite')
19
+ .where('entity_uuid', '=', product.uuid)
20
+ .and('entity_type', '=', 'product')
21
+ .load(pool);
22
+ if (!urlRewrite) {
23
+ return buildUrl('productView', {
24
+ uuid: product.uuid
25
+ });
26
+ } else {
27
+ return urlRewrite.request_path;
28
+ }
29
+ }
30
+ ],
31
+ dependencies: ['product_id']
32
+ }
33
+ ]);
34
+ return newFields;
35
+ };