@evershop/evershop 1.1.0 → 1.2.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 (391) 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 +20 -2
  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 +193 -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 +33 -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 +34 -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 +16 -6
  125. package/src/lib/webpack/util/keyGenerator.js +9 -0
  126. package/src/lib/webpack/util/parseGraphql.js +30 -16
  127. package/src/lib/webpack/util/parseGraphqlByFile.js +16 -2
  128. package/src/modules/auth/pages/admin/adminLogin/LoginForm.jsx +54 -21
  129. package/src/modules/auth/pages/admin/all/AdminUser.jsx +3 -3
  130. package/src/modules/base/bootstrap.js +79 -0
  131. package/src/modules/base/graphql/types/Route/Route.admin.graphql +15 -0
  132. package/src/modules/base/graphql/types/Route/Route.admin.resolvers.js +10 -0
  133. package/src/modules/base/pages/global/response[errorHandler].js +25 -1
  134. package/src/modules/catalog/bootstrap.js +125 -5
  135. package/src/modules/catalog/graphql/types/Category/Category.graphql +4 -3
  136. package/src/modules/catalog/graphql/types/Category/Category.resolvers.js +34 -0
  137. package/src/modules/catalog/graphql/types/Collection/Collection.graphql +2 -2
  138. package/src/modules/catalog/graphql/types/Collection/Collection.resolvers.js +34 -0
  139. package/src/modules/catalog/graphql/types/Product/Attribute/ProductAttribute.resolvers.js +1 -0
  140. package/src/modules/catalog/graphql/types/Product/Product.graphql +1 -1
  141. package/src/modules/catalog/graphql/types/Product/Product.resolvers.js +34 -0
  142. package/src/modules/catalog/graphql/types/Widget/CollectionProductsWidget/CollectionProductsWidget.graphql +11 -0
  143. package/src/modules/catalog/graphql/types/Widget/CollectionProductsWidget/CollectionProductsWidget.resolvers.js +8 -0
  144. package/src/modules/catalog/migration/Version-1.0.0.js +1 -0
  145. package/src/modules/catalog/migration/Version-1.0.7.js +10 -0
  146. package/src/modules/catalog/pages/admin/attributeEdit+attributeNew/FormContent.jsx +4 -4
  147. package/src/modules/catalog/pages/admin/attributeEdit+attributeNew/General.jsx +5 -5
  148. package/src/modules/catalog/pages/admin/attributeGrid/Grid.jsx +2 -2
  149. package/src/modules/catalog/pages/admin/categoryEdit/Products.jsx +4 -4
  150. package/src/modules/catalog/pages/admin/categoryEdit+categoryNew/FormContent.jsx +4 -4
  151. package/src/modules/catalog/pages/admin/categoryEdit+categoryNew/General.jsx +16 -18
  152. package/src/modules/catalog/pages/admin/categoryEdit+categoryNew/Image.jsx +1 -2
  153. package/src/modules/catalog/pages/admin/categoryEdit+categoryNew/Status.jsx +16 -1
  154. package/src/modules/catalog/pages/admin/categoryGrid/Grid.jsx +3 -3
  155. package/src/modules/catalog/pages/admin/collectionEdit/Products.jsx +4 -4
  156. package/src/modules/catalog/pages/admin/collectionEdit+collectionNew/FormContent.jsx +2 -2
  157. package/src/modules/catalog/pages/admin/collectionEdit+collectionNew/General.jsx +2 -2
  158. package/src/modules/catalog/pages/admin/collectionGrid/Grid.jsx +3 -3
  159. package/src/modules/catalog/pages/admin/productEdit/Collection.jsx +7 -7
  160. package/src/modules/catalog/pages/admin/productEdit+productNew/Attributes.jsx +8 -3
  161. package/src/modules/catalog/pages/admin/productEdit+productNew/CustomOptions.jsss +4 -4
  162. package/src/modules/catalog/pages/admin/productEdit+productNew/FormContent.jsx +4 -4
  163. package/src/modules/catalog/pages/admin/productEdit+productNew/General.jsx +15 -17
  164. package/src/modules/catalog/pages/admin/productGrid/Grid.jsx +3 -3
  165. package/src/modules/catalog/pages/frontStore/catalogSearch/General.jsx +2 -2
  166. package/src/modules/catalog/pages/frontStore/catalogSearch/Products.jsx +1 -1
  167. package/src/modules/catalog/pages/frontStore/catalogSearch/route.json +2 -1
  168. package/src/modules/catalog/pages/frontStore/categoryView/CategoryView.jsx +19 -2
  169. package/src/modules/catalog/pages/frontStore/categoryView/Filter.scss +1 -0
  170. package/src/modules/catalog/pages/frontStore/categoryView/General.jsx +6 -8
  171. package/src/modules/catalog/pages/frontStore/categoryView/General.scss +0 -2
  172. package/src/modules/catalog/pages/frontStore/categoryView/Pagination.jsx +6 -0
  173. package/src/modules/catalog/pages/frontStore/categoryView/Products.jsx +8 -1
  174. package/src/modules/catalog/pages/frontStore/categoryView/route.json +2 -1
  175. package/src/modules/catalog/pages/frontStore/productView/Description.jsx +15 -4
  176. package/src/modules/catalog/pages/frontStore/productView/Form.jsx +4 -4
  177. package/src/modules/catalog/pages/frontStore/productView/Form.scss +1 -0
  178. package/src/modules/catalog/pages/frontStore/productView/GeneralInfo.jsx +1 -1
  179. package/src/modules/catalog/pages/frontStore/productView/Images.jsx +1 -1
  180. package/src/modules/catalog/pages/frontStore/productView/Layout.jsx +1 -1
  181. package/src/modules/catalog/pages/frontStore/productView/Options.jsx +7 -3
  182. package/src/modules/catalog/pages/frontStore/productView/Variants.jsx +6 -6
  183. package/src/modules/catalog/pages/frontStore/productView/route.json +2 -1
  184. package/src/modules/catalog/services/AttributeCollection.js +10 -10
  185. package/src/modules/catalog/services/AttributeGroupCollection.js +10 -10
  186. package/src/modules/catalog/services/CategoryCollection.js +10 -10
  187. package/src/modules/catalog/services/CollectionCollection.js +10 -10
  188. package/src/modules/catalog/services/registerCartItemProductUrlField.js +35 -0
  189. package/src/modules/catalog/services/registerCartItemVariantOptionsField.js +51 -0
  190. package/src/modules/catalog/services/registerDefaultCategoryCollectionFilters.js +16 -0
  191. package/src/modules/checkout/api/addShippingNote/[context]bodyParser[auth].js +5 -0
  192. package/src/modules/checkout/api/addShippingNote/payloadSchema.json +15 -0
  193. package/src/modules/checkout/api/addShippingNote/route.json +5 -0
  194. package/src/modules/checkout/api/addShippingNote/saveShippingNote.js +50 -0
  195. package/src/modules/checkout/api/createCart/createNewCart.js +28 -3
  196. package/src/modules/checkout/api/updateCartItemQty/[bodyParser]updateQty.js +49 -0
  197. package/src/modules/checkout/api/updateCartItemQty/[context]bodyParser[auth].js +5 -0
  198. package/src/modules/checkout/api/updateCartItemQty/payloadSchema.json +21 -0
  199. package/src/modules/checkout/api/updateCartItemQty/route.json +5 -0
  200. package/src/modules/checkout/api/updateMineCartItemQty/[context]bodyParser[auth].js +5 -0
  201. package/src/modules/checkout/api/updateMineCartItemQty/[detectCurrentCart]updateQty.js +51 -0
  202. package/src/modules/checkout/api/updateMineCartItemQty/[getCurrentCustomer]detectCurrentCart.js +32 -0
  203. package/src/modules/checkout/api/updateMineCartItemQty/payloadSchema.json +21 -0
  204. package/src/modules/checkout/api/updateMineCartItemQty/route.json +5 -0
  205. package/src/modules/checkout/bootstrap.js +27 -0
  206. package/src/modules/checkout/graphql/types/Cart/Cart.graphql +22 -3
  207. package/src/modules/checkout/graphql/types/Cart/Cart.resolvers.js +18 -2
  208. package/src/modules/checkout/graphql/types/CheckoutSetting/CheckoutSetting.graphql +3 -0
  209. package/src/modules/checkout/graphql/types/CheckoutSetting/CheckoutSetting.resolvers.js +7 -0
  210. package/src/modules/checkout/migration/Version-1.0.0.js +14 -0
  211. package/src/modules/checkout/migration/Version-1.0.6.js +201 -0
  212. package/src/modules/checkout/pages/admin/shippingSetting/ShippingSetting.jsx +2 -2
  213. package/src/modules/checkout/pages/frontStore/all/[context]detectCurrentCart[auth].js +5 -0
  214. package/src/modules/checkout/pages/frontStore/cart/ShoppingCart.jsx +20 -12
  215. package/src/modules/checkout/pages/frontStore/cart/Summary.jsx +34 -23
  216. package/src/modules/checkout/pages/frontStore/cart/route.json +2 -1
  217. package/src/modules/checkout/pages/frontStore/checkout/Checkout.jsx +5 -5
  218. package/src/modules/checkout/pages/frontStore/checkout/Checkout.scss +4 -0
  219. package/src/modules/checkout/pages/frontStore/checkout/ShippingMethods.jsx +2 -2
  220. package/src/modules/checkout/pages/frontStore/checkout/ShippingNote.jsx +105 -0
  221. package/src/modules/checkout/pages/frontStore/checkout/Summary.jsx +14 -14
  222. package/src/modules/checkout/pages/frontStore/checkout/SummaryMobile.jsx +12 -15
  223. package/src/modules/checkout/pages/frontStore/checkout/route.json +2 -1
  224. package/src/modules/checkout/pages/frontStore/checkoutSuccess/CheckoutSuccess.jsx +1 -1
  225. package/src/modules/checkout/pages/frontStore/checkoutSuccess/CheckoutSuccess.scss +4 -0
  226. package/src/modules/checkout/pages/frontStore/checkoutSuccess/CustomerInfo.jsx +30 -32
  227. package/src/modules/checkout/pages/frontStore/checkoutSuccess/ShippingNote.jsx +47 -0
  228. package/src/modules/checkout/pages/frontStore/checkoutSuccess/Summary.jsx +12 -15
  229. package/src/modules/checkout/pages/frontStore/checkoutSuccess/route.json +2 -1
  230. package/src/modules/checkout/services/cart/Cart.js +31 -27
  231. package/src/modules/checkout/services/cart/registerCartBaseFields.js +133 -41
  232. package/src/modules/checkout/services/cart/registerCartItemBaseFields.js +300 -374
  233. package/src/modules/checkout/services/toPrice.js +1 -1
  234. package/src/modules/checkout/tests/basicSetup.js +85 -0
  235. package/src/modules/checkout/tests/coupons.js +82 -0
  236. package/src/modules/checkout/tests/products.js +67 -0
  237. package/src/modules/checkout/tests/taxRates.js +3 -0
  238. package/src/modules/checkout/tests/unit/discountAmount.test.js +60 -0
  239. package/src/modules/checkout/tests/unit/grandTotal.test.js +83 -0
  240. package/src/modules/checkout/tests/unit/lineTotal.test.js +92 -0
  241. package/src/modules/checkout/tests/unit/lineTotalWithDiscount.test.js +103 -0
  242. package/src/modules/checkout/tests/unit/productPrice.test.js +69 -0
  243. package/src/modules/checkout/tests/unit/subTotal.test.js +85 -0
  244. package/src/modules/checkout/tests/unit/subTotalWithDiscount.test.js +117 -0
  245. package/src/modules/checkout/tests/unit/taxAmount.test.js +68 -0
  246. package/src/modules/checkout/tests/unit/taxAmountRounding.test.js +277 -0
  247. package/src/modules/cms/api/createWidget/[context]bodyParser[auth].js +5 -0
  248. package/src/modules/cms/api/createWidget/createWidget[finish].js +17 -0
  249. package/src/modules/cms/api/createWidget/finish[apiResponse].js +27 -0
  250. package/src/modules/cms/api/createWidget/payloadSchema.json +18 -0
  251. package/src/modules/cms/api/createWidget/route.json +5 -0
  252. package/src/modules/cms/api/deleteWidget/deleteWidget.js +27 -0
  253. package/src/modules/cms/api/deleteWidget/route.json +5 -0
  254. package/src/modules/cms/api/updateWidget/[context]bodyParser[auth].js +5 -0
  255. package/src/modules/cms/api/updateWidget/finish[apiResponse].js +27 -0
  256. package/src/modules/cms/api/updateWidget/payloadSchema.json +18 -0
  257. package/src/modules/cms/api/updateWidget/route.json +5 -0
  258. package/src/modules/cms/api/updateWidget/updateWidget[finish].js +17 -0
  259. package/src/modules/cms/bootstrap.js +223 -3
  260. package/src/modules/cms/graphql/types/CmsPage/CmsPage.graphql +1 -2
  261. package/src/modules/cms/graphql/types/CmsPage/CmsPage.resolvers.js +35 -1
  262. package/src/modules/cms/graphql/types/Widget/Widget.graphql +91 -0
  263. package/src/modules/cms/graphql/types/Widget/Widget.resolvers.js +142 -0
  264. package/src/modules/cms/migration/Version-1.1.0.js +22 -0
  265. package/src/modules/cms/migration/Version-1.1.1.js +103 -0
  266. package/src/modules/cms/pages/admin/adminNotFound/NotFound.jsx +4 -4
  267. package/src/modules/cms/pages/admin/all/CmsMenuGroup.jsx +12 -4
  268. package/src/modules/cms/pages/admin/all/Notification.scss +1 -1
  269. package/src/modules/cms/pages/admin/all/search/NoResult.jsx +2 -2
  270. package/src/modules/cms/pages/admin/all/search/Results.jsx +3 -3
  271. package/src/modules/cms/pages/admin/cmsPageEdit+cmsPageNew/FormContent.jsx +7 -9
  272. package/src/modules/cms/pages/admin/cmsPageEdit+cmsPageNew/General.jsx +3 -3
  273. package/src/modules/cms/pages/admin/cmsPageEdit+cmsPageNew/Seo.jsx +1 -1
  274. package/src/modules/cms/pages/admin/cmsPageEdit+cmsPageNew/Status.jsx +40 -0
  275. package/src/modules/cms/pages/admin/cmsPageGrid/Grid.jsx +3 -4
  276. package/src/modules/cms/pages/admin/dashboard/Layout.jsx +3 -3
  277. package/src/modules/cms/pages/admin/widgetEdit/WidgetForm.jsx +52 -0
  278. package/src/modules/cms/pages/admin/widgetEdit/index.js +36 -0
  279. package/src/modules/cms/pages/admin/widgetEdit/route.json +4 -0
  280. package/src/modules/cms/pages/admin/widgetEdit+widgetNew/FormContent.jsx +69 -0
  281. package/src/modules/cms/pages/admin/widgetEdit+widgetNew/FormContent.scss +7 -0
  282. package/src/modules/cms/pages/admin/widgetEdit+widgetNew/General.jsx +185 -0
  283. package/src/modules/cms/pages/admin/widgetEdit+widgetNew/PageHeading.jsx +37 -0
  284. package/src/modules/cms/pages/admin/widgetEdit+widgetNew/Setting.jsx +55 -0
  285. package/src/modules/cms/pages/admin/widgetGrid/Grid.jsx +415 -0
  286. package/src/modules/cms/pages/admin/widgetGrid/Heading.jsx +11 -0
  287. package/src/modules/cms/pages/admin/widgetGrid/NewWidgetButton.jsx +52 -0
  288. package/src/modules/cms/pages/admin/widgetGrid/index.js +15 -0
  289. package/src/modules/cms/pages/admin/widgetGrid/route.json +4 -0
  290. package/src/modules/cms/pages/admin/widgetNew/WidgetNewForm.jsx +60 -0
  291. package/src/modules/cms/pages/admin/widgetNew/index.js +11 -0
  292. package/src/modules/cms/pages/admin/widgetNew/route.json +4 -0
  293. package/src/modules/cms/pages/admin/widgetNew/typeValidate.js +21 -0
  294. package/src/modules/cms/pages/frontStore/all/Breadcrumb.jsx +1 -1
  295. package/src/modules/cms/pages/frontStore/all/Footer.jsx +2 -2
  296. package/src/modules/cms/pages/frontStore/all/Layout.jsx +3 -3
  297. package/src/modules/cms/pages/frontStore/all/Layout.scss +13 -0
  298. package/src/modules/cms/pages/frontStore/all/Logo.jsx +2 -2
  299. package/src/modules/cms/pages/frontStore/all/Logo.scss +2 -4
  300. package/src/modules/cms/pages/frontStore/all/Notification.scss +1 -1
  301. package/src/modules/cms/pages/frontStore/cmsPageView/Layout.jsx +2 -2
  302. package/src/modules/cms/pages/frontStore/cmsPageView/View.jsx +5 -3
  303. package/src/modules/cms/pages/frontStore/cmsPageView/index.js +6 -12
  304. package/src/modules/cms/pages/frontStore/cmsPageView/route.json +2 -1
  305. package/src/modules/cms/pages/frontStore/homepage/route.json +2 -1
  306. package/src/modules/cms/pages/frontStore/notFound/NotFound.jsx +4 -4
  307. package/src/modules/cms/pages/frontStore/notFound/route.json +2 -1
  308. package/src/modules/cms/pages/frontStore/staticAsset/[context]staticAssets[auth].js +1 -1
  309. package/src/modules/cms/services/CMSPageCollection.js +10 -10
  310. package/src/modules/cms/services/WidgetCollection.js +62 -0
  311. package/src/modules/cms/services/getWidgetsBaseQuery.js +7 -0
  312. package/src/modules/cms/services/page/createPage.js +1 -2
  313. package/src/modules/cms/services/page/pageDataSchema.json +0 -4
  314. package/src/modules/cms/services/registerDefaultWidgetCollectionFilters.js +62 -0
  315. package/src/modules/cms/services/tailwind.admin.config.js +22 -107
  316. package/src/modules/cms/services/tailwind.frontStore.config.js +23 -108
  317. package/src/modules/cms/services/widget/createWidget.js +73 -0
  318. package/src/modules/cms/services/widget/deleteWidget.js +49 -0
  319. package/src/modules/cms/services/widget/loadWidgetInstances.js +54 -0
  320. package/src/modules/cms/services/widget/updateWidget.js +86 -0
  321. package/src/modules/cms/services/widget/widgetDataSchema.json +29 -0
  322. package/src/modules/cod/pages/admin/paymentSetting/CODSetting.jsx +2 -2
  323. package/src/modules/cod/pages/frontStore/checkout/CashOnDelivery.jsx +1 -1
  324. package/src/modules/customer/bootstrap.js +21 -4
  325. package/src/modules/customer/pages/admin/customerEdit/CustomerEditForm.jsx +3 -3
  326. package/src/modules/customer/pages/admin/customerEdit+customerNew/OrderHistory.jsx +1 -1
  327. package/src/modules/customer/pages/admin/customerGrid/Grid.jsx +3 -3
  328. package/src/modules/customer/pages/frontStore/account/AccountDetails.jsx +3 -3
  329. package/src/modules/customer/pages/frontStore/account/Layout.jsx +3 -3
  330. package/src/modules/customer/pages/frontStore/account/OrderHistory.jsx +1 -1
  331. package/src/modules/customer/pages/frontStore/account/route.json +2 -1
  332. package/src/modules/customer/pages/frontStore/login/LoginForm.jsx +2 -2
  333. package/src/modules/customer/pages/frontStore/login/route.json +2 -1
  334. package/src/modules/customer/pages/frontStore/register/RegisterForm.jsx +2 -2
  335. package/src/modules/customer/pages/frontStore/register/route.json +2 -1
  336. package/src/modules/customer/pages/frontStore/resetPasswordPage/ResetPasswordForm.jsx +2 -2
  337. package/src/modules/customer/pages/frontStore/resetPasswordPage/route.json +2 -1
  338. package/src/modules/customer/pages/frontStore/updatePasswordPage/UpdatePasswordForm.jsx +3 -3
  339. package/src/modules/customer/pages/frontStore/updatePasswordPage/route.json +2 -1
  340. package/src/modules/customer/services/CustomerCollection.js +10 -10
  341. package/src/modules/customer/services/CustomerGroupCollection.js +10 -10
  342. package/src/modules/graphql/pages/global/[bodyParser]buildQuery[graphql].js +241 -6
  343. package/src/modules/graphql/pages/global/[buildQuery]graphql[notification].js +12 -8
  344. package/src/modules/oms/bootstrap.js +87 -3
  345. package/src/modules/oms/graphql/types/Order/Order.graphql +11 -2
  346. package/src/modules/oms/graphql/types/Order/Order.resolvers.js +7 -1
  347. package/src/modules/oms/pages/admin/dashboard/Bestsellers.jsx +2 -2
  348. package/src/modules/oms/pages/admin/dashboard/Lifetimesales.jsx +5 -5
  349. package/src/modules/oms/pages/admin/orderEdit/AddTrackingButton.jsx +1 -1
  350. package/src/modules/oms/pages/admin/orderEdit/Items.jsx +7 -7
  351. package/src/modules/oms/pages/admin/orderEdit/Layout.jsx +3 -3
  352. package/src/modules/oms/pages/admin/orderEdit/Payment.jsx +6 -6
  353. package/src/modules/oms/pages/admin/orderEdit/ShipButton.jsx +1 -1
  354. package/src/modules/oms/pages/admin/orderGrid/Grid.jsx +3 -3
  355. package/src/modules/oms/services/OrderCollection.js +10 -10
  356. package/src/modules/paypal/api/paypalCreateOrder/[bodyParser]createOrder.js +55 -24
  357. package/src/modules/paypal/pages/admin/paymentSetting/PaypalSetting.jsx +6 -6
  358. package/src/modules/paypal/pages/frontStore/checkout/Paypal.jsx +3 -4
  359. package/src/modules/promotion/bootstrap.js +19 -101
  360. package/src/modules/promotion/pages/admin/couponEdit+couponNew/DiscountType.jsx +1 -1
  361. package/src/modules/promotion/pages/admin/couponEdit+couponNew/FormContent.jsx +5 -5
  362. package/src/modules/promotion/pages/admin/couponGrid/Grid.jsx +3 -3
  363. package/src/modules/promotion/pages/frontStore/cart/Coupon.jsx +2 -2
  364. package/src/modules/promotion/services/CouponCollection.js +10 -10
  365. package/src/modules/promotion/services/couponValidator.js +4 -7
  366. package/src/modules/promotion/services/discountCalculator.js +2 -7
  367. package/src/modules/promotion/services/registerCartItemPromotionFields.js +80 -0
  368. package/src/modules/promotion/services/registerCartPromotionFields.js +128 -0
  369. package/src/modules/promotion/services/registerDefaultCalculators.js +48 -20
  370. package/src/modules/promotion/services/registerDefaultValidators.js +16 -4
  371. package/src/modules/setting/pages/admin/paymentSetting/PaymentSetting.jsx +2 -2
  372. package/src/modules/setting/pages/admin/storeSetting/StoreSetting.jsx +98 -35
  373. package/src/modules/stripe/pages/admin/paymentSetting/StripePayment.jsx +5 -5
  374. package/src/modules/stripe/pages/frontStore/checkout/Stripe.jsx +1 -1
  375. package/src/modules/tax/bootstrap.js +40 -5
  376. package/src/modules/tax/graphql/types/Product/Price/ProductPrice.resolvers.js +6 -39
  377. package/src/modules/tax/graphql/types/TaxSetting/TaxSetting.graphql +1 -2
  378. package/src/modules/tax/graphql/types/TaxSetting/TaxSetting.resolvers.js +1 -8
  379. package/src/modules/tax/pages/admin/taxSetting/TaxSetting.jsx +4 -4
  380. package/src/modules/tax/services/TaxClassCollection.js +10 -10
  381. package/src/modules/tax/services/calculateTaxAmount.js +12 -9
  382. package/src/modules/tax/services/registerCartItemTaxPercentField.js +76 -0
  383. package/src/modules/auth/services/adminSessionMiddleware.js +0 -0
  384. package/src/modules/catalog/pages/frontStore/homepage/FeaturedCategories.jsx +0 -58
  385. package/src/modules/cms/pages/admin/cmsPageEdit+cmsPageNew/StatusAndLayout.jsx +0 -61
  386. package/src/modules/cms/pages/frontStore/all/Menu.jsx +0 -46
  387. package/src/modules/cms/pages/frontStore/all/Menu.scss +0 -7
  388. package/src/modules/cms/pages/frontStore/all/MobileMenu.jsx +0 -73
  389. package/src/modules/cms/pages/frontStore/all/MobileMenu.scss +0 -35
  390. package/src/modules/cms/pages/frontStore/homepage/MainBanner.jsx +0 -31
  391. package/src/modules/cms/pages/frontStore/homepage/MainBanner.scss +0 -48
@@ -0,0 +1,52 @@
1
+ import PropTypes from 'prop-types';
2
+ import React from 'react';
3
+ import Button from '@components/common/form/Button';
4
+ import { useAlertContext } from '@components/common/modal/Alert';
5
+ import WidgetTypes from '@components/admin/cms/widget/WidgetTypes';
6
+
7
+ export default function NewWidgetButton({ widgetTypes }) {
8
+ const { openAlert, closeAlert } = useAlertContext();
9
+ return (
10
+ <Button
11
+ title="New Widget"
12
+ onAction={() => {
13
+ openAlert({
14
+ heading: `Select type`,
15
+ content: <WidgetTypes types={widgetTypes} />,
16
+ primaryAction: {
17
+ title: 'Cancel',
18
+ onAction: closeAlert,
19
+ variant: 'primary'
20
+ }
21
+ });
22
+ }}
23
+ />
24
+ );
25
+ }
26
+
27
+ NewWidgetButton.propTypes = {
28
+ widgetTypes: PropTypes.arrayOf(
29
+ PropTypes.shape({
30
+ code: PropTypes.string,
31
+ name: PropTypes.string,
32
+ description: PropTypes.string,
33
+ createWidgetUrl: PropTypes.string
34
+ })
35
+ ).isRequired
36
+ };
37
+
38
+ export const layout = {
39
+ areaId: 'pageHeadingRight',
40
+ sortOrder: 10
41
+ };
42
+
43
+ export const query = `
44
+ query Query {
45
+ widgetTypes {
46
+ code
47
+ name
48
+ description
49
+ createWidgetUrl
50
+ }
51
+ }
52
+ `;
@@ -0,0 +1,15 @@
1
+ const {
2
+ buildFilterFromUrl
3
+ } = require('@evershop/evershop/src/lib/util/buildFilterFromUrl');
4
+ const {
5
+ setContextValue
6
+ } = require('../../../../graphql/services/contextHelper');
7
+
8
+ // eslint-disable-next-line no-unused-vars
9
+ module.exports = (request, response) => {
10
+ setContextValue(request, 'pageInfo', {
11
+ title: 'Widgets',
12
+ description: 'Widgets'
13
+ });
14
+ setContextValue(request, 'filtersFromUrl', buildFilterFromUrl(request));
15
+ };
@@ -0,0 +1,4 @@
1
+ {
2
+ "methods": ["GET"],
3
+ "path": "/widgets"
4
+ }
@@ -0,0 +1,60 @@
1
+ import PropTypes from 'prop-types';
2
+ import React from 'react';
3
+ import { toast } from 'react-toastify';
4
+ import Area from '@components/common/Area';
5
+ import { Form } from '@components/common/form/Form';
6
+ import { get } from '@evershop/evershop/src/lib/util/get';
7
+
8
+ export default function WidgetNewForm({ action }) {
9
+ const id = 'widgetForm';
10
+ return (
11
+ <Form
12
+ method="POST"
13
+ action={action}
14
+ onError={() => {
15
+ toast.error('Something wrong. Please reload the page!');
16
+ }}
17
+ onSuccess={(response) => {
18
+ if (response.error) {
19
+ toast.error(
20
+ get(
21
+ response,
22
+ 'error.message',
23
+ 'Something wrong. Please reload the page!'
24
+ )
25
+ );
26
+ } else {
27
+ toast.success('Widget saved successfully!');
28
+ // Wait for 2 seconds to show the success message
29
+ setTimeout(() => {
30
+ // Redirect to the edit page
31
+ const editUrl = response.data.links.find(
32
+ (link) => link.rel === 'edit'
33
+ ).href;
34
+ window.location.href = editUrl;
35
+ }, 1500);
36
+ }
37
+ }}
38
+ submitBtn={false}
39
+ id={id}
40
+ >
41
+ <Area id={id} noOuter />
42
+ </Form>
43
+ );
44
+ }
45
+
46
+ WidgetNewForm.propTypes = {
47
+ action: PropTypes.string.isRequired
48
+ };
49
+
50
+ export const layout = {
51
+ areaId: 'content',
52
+ sortOrder: 10
53
+ };
54
+
55
+ export const query = `
56
+ query Query {
57
+ action: url(routeId: "createWidget")
58
+ gridUrl: url(routeId: "widgetGrid")
59
+ }
60
+ `;
@@ -0,0 +1,11 @@
1
+ const {
2
+ setContextValue
3
+ } = require('../../../../graphql/services/contextHelper');
4
+
5
+ // eslint-disable-next-line no-unused-vars
6
+ module.exports = (request, response) => {
7
+ setContextValue(request, 'pageInfo', {
8
+ title: 'Create a new widget',
9
+ description: 'Create a new widget'
10
+ });
11
+ };
@@ -0,0 +1,4 @@
1
+ {
2
+ "methods": ["GET"],
3
+ "path": "/widgets/new/:type"
4
+ }
@@ -0,0 +1,21 @@
1
+ const {
2
+ getEnabledWidgets
3
+ } = require('@evershop/evershop/src/lib/util/getEnabledWidgets');
4
+ const { buildUrl } = require('@evershop/evershop/src/lib/router/buildUrl');
5
+ const {
6
+ setContextValue
7
+ } = require('../../../../graphql/services/contextHelper');
8
+
9
+ // eslint-disable-next-line no-unused-vars
10
+ module.exports = (request, response, delegate, next) => {
11
+ const { type } = request.params;
12
+ const enabledWidgets = getEnabledWidgets();
13
+
14
+ if (!enabledWidgets.find((widget) => widget.type === type)) {
15
+ // Redirect to the widget grid if the widget type is not found
16
+ response.redirect(buildUrl('widgetGrid'));
17
+ } else {
18
+ setContextValue(request, 'type', type);
19
+ next();
20
+ }
21
+ };
@@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
3
3
 
4
4
  function Breadcrumb({ pageInfo: { breadcrumbs } }) {
5
5
  return breadcrumbs.length ? (
6
- <div className="page-width my-2">
6
+ <div className="breadcrumb page-width my-8">
7
7
  {breadcrumbs.map((breadcrumb, index) =>
8
8
  index === breadcrumbs.length - 1 ? (
9
9
  <span key={index}>{breadcrumb.title}</span>
@@ -4,9 +4,9 @@ import PropTypes from 'prop-types';
4
4
  function Footer({ themeConfig: { copyRight } }) {
5
5
  return (
6
6
  <div className="footer__default">
7
- <div className="page-width grid grid-cols-1 md:grid-cols-2 gap-2 justify-between">
7
+ <div className="page-width grid grid-cols-1 md:grid-cols-2 gap-8 justify-between">
8
8
  <div>
9
- <div className="card-icons flex justify-center space-x-1 md:justify-start">
9
+ <div className="card-icons flex justify-center space-x-4 md:justify-start">
10
10
  <div>
11
11
  <svg
12
12
  xmlns="http://www.w3.org/2000/svg"
@@ -8,7 +8,7 @@ export default function Layout() {
8
8
  return (
9
9
  <>
10
10
  <LoadingBar />
11
- <div className="header flex justify-between">
11
+ <div className="header grid grid-cols-3">
12
12
  <Area
13
13
  id="header"
14
14
  noOuter
@@ -17,7 +17,7 @@ export default function Layout() {
17
17
  component: { default: Area },
18
18
  props: {
19
19
  id: 'icon-wrapper',
20
- className: 'icon-wrapper flex justify-between space-x-1'
20
+ className: 'icon-wrapper flex justify-end space-x-4'
21
21
  },
22
22
  sortOrder: 20
23
23
  }
@@ -25,7 +25,7 @@ export default function Layout() {
25
25
  />
26
26
  </div>
27
27
  <main className="content">
28
- <Area id="content" className="" noOuter />
28
+ <Area id="content" noOuter />
29
29
  </main>
30
30
  <div className="footer">
31
31
  <Area id="footer" noOuter coreComponents={[]} />
@@ -246,3 +246,16 @@ table {
246
246
  button.outline {
247
247
  outline: none;
248
248
  }
249
+
250
+ .editor__html {
251
+ a {
252
+ color: var(--interactive);
253
+ text-decoration: none;
254
+ &:hover {
255
+ text-decoration: underline;
256
+ }
257
+ }
258
+ }
259
+ html .prose {
260
+ font-size: 100%;
261
+ }
@@ -8,7 +8,7 @@ export default function Logo({
8
8
  }
9
9
  }) {
10
10
  return (
11
- <div className="logo">
11
+ <div className="logo md:ml-0 flex justify-center items-center">
12
12
  {src && (
13
13
  <a href="/" className="logo-icon">
14
14
  <img src={src} alt={alt} width={width} height={height} />
@@ -66,7 +66,7 @@ Logo.defaultProps = {
66
66
 
67
67
  export const layout = {
68
68
  areaId: 'header',
69
- sortOrder: 1
69
+ sortOrder: 10
70
70
  };
71
71
 
72
72
  export const query = `
@@ -1,10 +1,8 @@
1
1
  .logo {
2
- display: flex;
3
2
  a.logo-icon {
4
3
  svg {
5
- width: 3rem;
6
- height: 3rem;
4
+ width: 4rem;
5
+ height: 4rem;
7
6
  }
8
- margin-right: 0.5rem;
9
7
  }
10
8
  }
@@ -4,7 +4,7 @@
4
4
  transform: translate3d(0, 0, 9999px);
5
5
  position: fixed;
6
6
  width: 380px;
7
- background-color: #fff;
7
+ background-color: transparent;
8
8
  }
9
9
  .Toastify__toast-container--top-left {
10
10
  top: 1em;
@@ -12,9 +12,9 @@ export default function Layout() {
12
12
  <Area id="content" className="" noOuter />
13
13
  </main>
14
14
  <div className="footer">
15
- <div className="page-width grid grid-cols-1 md:grid-cols-2 gap-2 justify-between">
15
+ <div className="page-width grid grid-cols-1 md:grid-cols-2 gap-8 justify-between">
16
16
  <div>
17
- <div className="card-icons flex justify-center space-x-1 md:justify-start">
17
+ <div className="card-icons flex justify-center space-x-4 md:justify-start">
18
18
  <div>
19
19
  <svg
20
20
  xmlns="http://www.w3.org/2000/svg"
@@ -1,13 +1,15 @@
1
1
  /* eslint-disable react/no-danger */
2
2
  import PropTypes from 'prop-types';
3
3
  import React from 'react';
4
- import { CKEditor } from '@components/common/CKEditor';
4
+ import Editor from '@components/common/Editor';
5
5
 
6
6
  export default function Page({ page }) {
7
7
  return (
8
8
  <div className="page-width">
9
- <h1 className="text-center mb-3">{page.name}</h1>
10
- <CKEditor content={page.content} />
9
+ <div className="prose prose-base max-w-none">
10
+ <h1 className="text-center">{page.name}</h1>
11
+ <Editor rows={page.content} />
12
+ </div>
11
13
  </div>
12
14
  );
13
15
  }
@@ -1,24 +1,18 @@
1
- const { select } = require('@evershop/postgres-query-builder');
2
1
  const { pool } = require('@evershop/evershop/src/lib/postgres/connection');
3
2
  const {
4
3
  setContextValue
5
4
  } = require('../../../../graphql/services/contextHelper');
5
+ const {
6
+ getCmsPagesBaseQuery
7
+ } = require('../../../services/getCmsPagesBaseQuery');
6
8
 
7
9
  module.exports = async (request, response, delegate, next) => {
8
10
  try {
9
- const query = select();
11
+ const query = getCmsPagesBaseQuery();
10
12
  query
11
- .from('cms_page')
12
- .leftJoin('cms_page_description')
13
- .on(
14
- 'cms_page.cms_page_id',
15
- '=',
16
- 'cms_page_description.cms_page_description_cms_page_id'
17
- );
18
-
19
- query.where('cms_page_description.url_key', '=', request.params.url_key);
13
+ .where('cms_page_description.url_key', '=', request.params.url_key)
14
+ .and('cms_page.status', '=', 1);
20
15
  const page = await query.load(pool);
21
-
22
16
  if (page === null) {
23
17
  response.status(404);
24
18
  next();
@@ -1,4 +1,5 @@
1
1
  {
2
2
  "methods": ["GET"],
3
- "path": "/page/:url_key"
3
+ "path": "/page/:url_key",
4
+ "name": "Static Page"
4
5
  }
@@ -1,4 +1,5 @@
1
1
  {
2
2
  "methods": ["GET"],
3
- "path": "/"
3
+ "path": "/",
4
+ "name": "Home Page"
4
5
  }
@@ -6,7 +6,7 @@ import { _ } from '@evershop/evershop/src/lib/locale/translate';
6
6
 
7
7
  function Name() {
8
8
  return (
9
- <h1 className="page-name text-center mt-25 mb-15">
9
+ <h1 className="page-name text-center mt-10 mb-6">
10
10
  {_('404 Page Not Found')}
11
11
  </h1>
12
12
  );
@@ -18,7 +18,7 @@ function Content({ continueShoppingUrl }) {
18
18
  <div className="text-center">
19
19
  {_('The page you requested does not exist.')}
20
20
  </div>
21
- <div className="mt-2 text-center">
21
+ <div className="mt-8 text-center">
22
22
  <Button
23
23
  title={_('Continue shopping')}
24
24
  url={continueShoppingUrl}
@@ -35,8 +35,8 @@ Content.propTypes = {
35
35
 
36
36
  export default function NotFound({ continueShoppingUrl }) {
37
37
  return (
38
- <div className="page-width mt-25">
39
- <div className="pt-15">
38
+ <div className="page-width mt-10">
39
+ <div className="pt-6">
40
40
  <Area
41
41
  id="notfound-page"
42
42
  coreComponents={[
@@ -1,4 +1,5 @@
1
1
  {
2
2
  "methods": ["GET"],
3
- "path": "/notfound"
3
+ "path": "/notfound",
4
+ "name": "Not Found"
4
5
  }
@@ -1,5 +1,5 @@
1
1
  const staticMiddleware = require('@evershop/evershop/src/lib/middlewares/static');
2
2
 
3
- module.exports = (request, response, stack, next) => {
3
+ module.exports = (request, response, delegate, next) => {
4
4
  staticMiddleware(request, response, next);
5
5
  };
@@ -20,16 +20,16 @@ class CMSPageCollection {
20
20
  );
21
21
 
22
22
  cmsPageCollectionFilters.forEach((filter) => {
23
- const check = filters.find((f) => f.key === filter.key);
24
- if (check) {
25
- if (filter.operation.includes(check.operation)) {
26
- filter.callback(
27
- this.baseQuery,
28
- check.operation,
29
- check.value,
30
- currentFilters
31
- );
32
- }
23
+ const check = filters.find(
24
+ (f) => f.key === filter.key && filter.operation.includes(f.operation)
25
+ );
26
+ if (filter.key === '*' || check) {
27
+ filter.callback(
28
+ this.baseQuery,
29
+ check?.operation,
30
+ check?.value,
31
+ currentFilters
32
+ );
33
33
  }
34
34
  });
35
35
 
@@ -0,0 +1,62 @@
1
+ const { camelCase } = require('@evershop/evershop/src/lib/util/camelCase');
2
+ const { pool } = require('@evershop/evershop/src/lib/postgres/connection');
3
+ const { getValue } = require('@evershop/evershop/src/lib/util/registry');
4
+
5
+ class WidgetCollection {
6
+ constructor(baseQuery) {
7
+ this.baseQuery = baseQuery;
8
+ }
9
+
10
+ async init(filters = [], isAdmin = false) {
11
+ if (!isAdmin) {
12
+ this.baseQuery.andWhere('widget.status', '=', 't');
13
+ }
14
+ const currentFilters = [];
15
+
16
+ // Apply the filters
17
+ const widgetCollectionFilters = await getValue(
18
+ 'widgetCollectionFilters',
19
+ []
20
+ );
21
+
22
+ widgetCollectionFilters.forEach((filter) => {
23
+ const check = filters.find(
24
+ (f) => f.key === filter.key && filter.operation.includes(f.operation)
25
+ );
26
+ if (filter.key === '*' || check) {
27
+ filter.callback(
28
+ this.baseQuery,
29
+ check?.operation,
30
+ check?.value,
31
+ currentFilters
32
+ );
33
+ }
34
+ });
35
+
36
+ // Clone the main query for getting total right before doing the paging
37
+ const totalQuery = this.baseQuery.clone();
38
+ totalQuery.select('COUNT(widget.widget_id)', 'total');
39
+ totalQuery.removeOrderBy();
40
+ totalQuery.removeLimit();
41
+
42
+ this.currentFilters = currentFilters;
43
+ this.totalQuery = totalQuery;
44
+ }
45
+
46
+ async items() {
47
+ const items = await this.baseQuery.execute(pool);
48
+ return items.map((row) => camelCase(row));
49
+ }
50
+
51
+ async total() {
52
+ // Call items to get the total
53
+ const total = await this.totalQuery.execute(pool);
54
+ return total[0].total;
55
+ }
56
+
57
+ currentFilters() {
58
+ return this.currentFilters;
59
+ }
60
+ }
61
+
62
+ module.exports.WidgetCollection = WidgetCollection;
@@ -0,0 +1,7 @@
1
+ const { select } = require('@evershop/postgres-query-builder');
2
+
3
+ module.exports.getWidgetsBaseQuery = () => {
4
+ const query = select().from('widget');
5
+
6
+ return query;
7
+ };
@@ -22,8 +22,7 @@ function validatePageDataBeforeInsert(data) {
22
22
  'name',
23
23
  'url_key',
24
24
  'content',
25
- 'meta_title',
26
- 'layout'
25
+ 'meta_title'
27
26
  ];
28
27
  const jsonSchema = getValueSync('createPageDataJsonSchema', pageDataSchema);
29
28
  const validate = ajv.compile(jsonSchema);
@@ -5,10 +5,6 @@
5
5
  "type": ["string", "integer"],
6
6
  "enum": ["0", "1", 0, 1]
7
7
  },
8
- "layout": {
9
- "type": "string",
10
- "enum": ["oneColumn", "twoColumnsLeft", "twoColumnsRight", "threeColumns"]
11
- },
12
8
  "name": {
13
9
  "type": "string"
14
10
  },
@@ -0,0 +1,62 @@
1
+ const {
2
+ OPERATION_MAP
3
+ } = require('@evershop/evershop/src/lib/util/filterOperationMapp');
4
+ const { getValueSync } = require('@evershop/evershop/src/lib/util/registry');
5
+
6
+ module.exports = async function registerDefaultWidgetCollectionFilters() {
7
+ // List of default supported filters
8
+ const defaultFilters = [
9
+ {
10
+ key: 'name',
11
+ operation: ['eq', 'like'],
12
+ callback: (query, operation, value, currentFilters) => {
13
+ if (operation === 'eq') {
14
+ query.andWhere('widget.name', '=', value);
15
+ } else {
16
+ query.andWhere('widget.name', 'ilike', `%${value}%`);
17
+ }
18
+ currentFilters.push({
19
+ key: 'name',
20
+ operation,
21
+ value
22
+ });
23
+ }
24
+ },
25
+ {
26
+ key: 'status',
27
+ operation: ['eq'],
28
+ callback: (query, operation, value, currentFilters) => {
29
+ query.andWhere('widget.status', OPERATION_MAP[operation], value);
30
+ currentFilters.push({
31
+ key: 'status',
32
+ operation,
33
+ value
34
+ });
35
+ }
36
+ },
37
+ {
38
+ key: 'ob',
39
+ operation: ['eq'],
40
+ callback: (query, operation, value, currentFilters) => {
41
+ const widgetCollectionSortBy = getValueSync('widgetCollectionSortBy', {
42
+ name: (query) => query.orderBy('widget.name'),
43
+ type: (query) => query.orderBy('widget.type'),
44
+ area: (query) => query.orderBy('widget.area'),
45
+ route: (query) => query.orderBy('widget.route'),
46
+ status: (query) => query.orderBy('widget.status')
47
+ });
48
+
49
+ if (widgetCollectionSortBy[value]) {
50
+ widgetCollectionSortBy[value](query, operation);
51
+ currentFilters.push({
52
+ key: 'ob',
53
+ operation,
54
+ value
55
+ });
56
+ }
57
+ }
58
+ }
59
+ ];
60
+
61
+ return defaultFilters;
62
+ };