@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
@@ -20,6 +20,7 @@ exports.loadModuleRoutes = function loadModuleRoutes(modulePath) {
20
20
  route.id,
21
21
  route.method,
22
22
  route.path,
23
+ route.name,
23
24
  route.isApi,
24
25
  route.folder
25
26
  );
@@ -37,6 +38,7 @@ exports.loadModuleRoutes = function loadModuleRoutes(modulePath) {
37
38
  route.id,
38
39
  route.method,
39
40
  route.path,
41
+ route.name,
40
42
  route.isApi,
41
43
  route.folder
42
44
  );
@@ -51,6 +53,7 @@ exports.loadModuleRoutes = function loadModuleRoutes(modulePath) {
51
53
  route.id,
52
54
  route.method,
53
55
  route.path,
56
+ route.name,
54
57
  route.isApi,
55
58
  route.folder,
56
59
  route.payloadSchema,
@@ -11,7 +11,14 @@ module.exports = exports = {};
11
11
  * @param {string} path The path of route
12
12
  *
13
13
  */
14
- exports.registerAdminRoute = (id, method, path, isApi = false, folder = '') => {
14
+ exports.registerAdminRoute = (
15
+ id,
16
+ method,
17
+ path,
18
+ name,
19
+ isApi = false,
20
+ folder = ''
21
+ ) => {
15
22
  // const route = validateRoute(id, method, path);
16
23
  const route = {
17
24
  id: String(id),
@@ -22,5 +29,6 @@ exports.registerAdminRoute = (id, method, path, isApi = false, folder = '') => {
22
29
  route.isApi = isApi;
23
30
  route.path = route.path === '/' ? '/admin' : `/admin${path}`;
24
31
  route.folder = folder;
32
+ route.name = name;
25
33
  addRoute(route);
26
34
  };
@@ -15,6 +15,7 @@ exports.registerFrontStoreRoute = (
15
15
  id,
16
16
  method,
17
17
  path,
18
+ name,
18
19
  isApi = false,
19
20
  folder = '',
20
21
  payloadSchema = null,
@@ -31,5 +32,6 @@ exports.registerFrontStoreRoute = (
31
32
  route.isAdmin = false;
32
33
  route.isApi = isApi;
33
34
  route.folder = folder;
35
+ route.name = name;
34
36
  addRoute(route);
35
37
  };
@@ -65,6 +65,7 @@ exports.scanForRoutes = (path, isAdmin, isApi) => {
65
65
 
66
66
  return {
67
67
  id: r,
68
+ name: routeJson?.name || r,
68
69
  method: methods,
69
70
  path: routePath,
70
71
  isAdmin,
@@ -8,7 +8,13 @@ describe('Test validateRoute', () => {
8
8
  beforeAll(() => {
9
9
  const routes = scanForRoutes(path.resolve(__dirname, 'b'), true, false);
10
10
  routes.forEach((route) => {
11
- registerAdminRoute(route.id, route.method, route.path, route.isApi);
11
+ registerAdminRoute(
12
+ route.id,
13
+ route.method,
14
+ route.path,
15
+ route.name,
16
+ route.isApi
17
+ );
12
18
  });
13
19
  });
14
20
 
@@ -54,7 +54,7 @@ const defaultPaginationFilters = [
54
54
  } else {
55
55
  query.limit(0, parseInt(value, 10));
56
56
  currentFilters.push({
57
- key: 'page',
57
+ key: 'limit',
58
58
  operation: 'eq',
59
59
  value
60
60
  });
@@ -77,22 +77,24 @@ const defaultPaginationFilters = [
77
77
  key: '*',
78
78
  operation: ['eq'],
79
79
  callback: (query, operation, value, currentFilters) => {
80
- const page = currentFilters.find((f) => f.key === 'page');
81
- const limit = currentFilters.find((f) => f.key === 'limit');
82
- if (!limit) {
83
- currentFilters.push({
84
- key: 'limit',
85
- operation: 'eq',
86
- value: CONSTANTS.ADMIN_COLLECTION_SIZE
87
- });
88
- }
89
- if (!page) {
90
- currentFilters.push({
91
- key: 'page',
92
- operation: 'eq',
93
- value: 1
94
- });
95
- }
80
+ const page = currentFilters.find((f) => f.key === 'page') || { value: 1 };
81
+ const limit = currentFilters.find((f) => f.key === 'limit') || {
82
+ value: CONSTANTS.ADMIN_COLLECTION_SIZE
83
+ };
84
+ currentFilters.push({
85
+ key: 'page',
86
+ operation: 'eq',
87
+ value: page.value
88
+ });
89
+ currentFilters.push({
90
+ key: 'limit',
91
+ operation: 'eq',
92
+ value: limit.value
93
+ });
94
+ query.limit(
95
+ (parseInt(page.value, 10) - 1) * parseInt(limit.value, 10),
96
+ parseInt(limit.value, 10)
97
+ );
96
98
  }
97
99
  }
98
100
  ];
@@ -0,0 +1,34 @@
1
+ const isResolvable = require('is-resolvable');
2
+ const { getConfig } = require('./getConfig');
3
+ const { generateComponentKey } = require('../webpack/util/keyGenerator');
4
+
5
+ module.exports = exports = {};
6
+
7
+ exports.getEnabledWidgets = function getEnabledWidgets() {
8
+ const configuredWidgets = getConfig('widgets', {});
9
+ const widgets = [];
10
+ Object.keys(configuredWidgets).forEach((widget) => {
11
+ // Make sure the enabled = true and the component path is exist
12
+ const { setting_component } = configuredWidgets[widget];
13
+ const { component } = configuredWidgets[widget];
14
+ // Make sure path is existed and it is a jsx file
15
+ if (!isResolvable(setting_component)) {
16
+ throw new Error(
17
+ `Widget ${widget} is not configured correctly. The setting_component is not existed or not a jsx file`
18
+ );
19
+ } else if (!isResolvable(component)) {
20
+ throw new Error(
21
+ `Widget ${widget} is not configured correctly. The component is not existed or not a jsx file`
22
+ );
23
+ }
24
+ if (configuredWidgets[widget].enabled === true) {
25
+ widgets.push({
26
+ ...configuredWidgets[widget],
27
+ type: widget,
28
+ settingComponentKey: generateComponentKey(setting_component),
29
+ componentKey: generateComponentKey(component)
30
+ });
31
+ }
32
+ });
33
+ return widgets;
34
+ };
@@ -1,28 +1,81 @@
1
1
  /* eslint-disable no-param-reassign */
2
2
  /**
3
- * This function take 2 objects and merge them into a new object
3
+ * This function take 2 objects: target and source, and merge them together recursively
4
+ * This function will not merge built-in objects like Date, RegExp, Map, Set
5
+ * This function will overwrite the value from the first object by the value from the second object if they have the same key and the value is primitive
6
+ * This function will merge array property from 2 objects
4
7
  *
5
- * @param {object} objectOne The first object
6
- * @param {object} objectTwo The second object
8
+ * @param {object} target The target object
9
+ * @param {object} source The source object
7
10
  *
8
- * @return {object} The new object
11
+ * @return {object} The new target object
9
12
  */
10
- function merge(objectOne, objectTwo) {
11
- if (typeof objectOne !== 'object' || objectOne === null) {
12
- throw new Error('`object` must be an object');
13
+ function merge(target, source, maxDepth = 20, currentDepth = 0) {
14
+ function isBuiltInObject(obj) {
15
+ return (
16
+ obj instanceof Date ||
17
+ obj instanceof RegExp ||
18
+ obj instanceof Map ||
19
+ obj instanceof Set
20
+ );
13
21
  }
14
- if (typeof objectTwo !== 'object' || objectTwo === null) {
15
- throw new Error('`object` must be an object');
22
+
23
+ if (isBuiltInObject(target) || isBuiltInObject(source)) {
24
+ throw new Error(
25
+ 'deepMerge cannot merge built-in objects like Date or RegExp'
26
+ );
27
+ }
28
+
29
+ if (
30
+ typeof target !== 'object' ||
31
+ target === null ||
32
+ typeof source !== 'object' ||
33
+ source === null
34
+ ) {
35
+ throw new Error('merge function can only merge plain objects');
16
36
  }
17
37
 
18
- const result = Object.create({});
38
+ if (currentDepth > maxDepth) {
39
+ throw new Error(`Maximum depth of ${maxDepth} exceeded`);
40
+ }
41
+
42
+ function getAllKeys(obj) {
43
+ let keys = [];
44
+ Object.getOwnPropertyNames(obj).forEach((key) => {
45
+ if (!keys.includes(key)) {
46
+ keys.push(key);
47
+ }
48
+ });
49
+ keys = keys.concat(Object.getOwnPropertySymbols(obj));
50
+ return keys;
51
+ }
19
52
 
20
- Object.keys(objectOne).forEach((key) => {
21
- result[key] = objectOne[key] ? objectOne[key] : objectTwo[key];
22
- delete objectTwo[key];
53
+ getAllKeys(source).forEach((key) => {
54
+ if (key in target) {
55
+ if (Array.isArray(target[key]) && Array.isArray(source[key])) {
56
+ target[key] = Array.from(new Set([...target[key], ...source[key]]));
57
+ } else if (
58
+ typeof target[key] === 'object' &&
59
+ typeof source[key] === 'object'
60
+ ) {
61
+ if (isBuiltInObject(target[key]) || isBuiltInObject(source[key])) {
62
+ target[key] = source[key];
63
+ } else {
64
+ merge(target[key], source[key], maxDepth, currentDepth + 1);
65
+ }
66
+ } else {
67
+ target[key] = source[key];
68
+ }
69
+ } else {
70
+ Object.defineProperty(
71
+ target,
72
+ key,
73
+ Object.getOwnPropertyDescriptor(source, key)
74
+ );
75
+ }
23
76
  });
24
77
 
25
- return { ...result, ...objectTwo };
78
+ return target;
26
79
  }
27
80
 
28
81
  // eslint-disable-next-line no-multi-assign
@@ -20,19 +20,36 @@ describe('Test until merge', () => {
20
20
  expect(merge(a, b)).toEqual({ a: 1, b: 1, c: 1 });
21
21
  });
22
22
 
23
- it('It should not overwrite the value from the first object if it is existed and truthy', () => {
23
+ it('It should not overwrite the value from the first object if it is existed', () => {
24
24
  const a = { a: 1 };
25
25
  const b = { a: 2, c: 1 };
26
26
  const c = merge(a, b);
27
- expect(c.a).toEqual(1);
27
+ expect(c.a).toEqual(2);
28
28
  });
29
29
 
30
- it('It should overwrite the value from the first object if it is not truthy', () => {
30
+ it('It should overwrite the value from the first object', () => {
31
31
  const a = { a: '', c: null, d: [] };
32
32
  const b = { a: 2, c: 1, d: 1 };
33
33
  const c = merge(a, b);
34
34
  expect(c.a).toEqual(2);
35
35
  expect(c.c).toEqual(1);
36
- expect(c.d).toEqual([]);
36
+ expect(c.d).toEqual(1);
37
+ });
38
+
39
+ it('It should merge array property from 2 objects', () => {
40
+ const a = { a: [1, 2] };
41
+ const b = { a: [2, 3], c: 1 };
42
+ const c = merge(a, b);
43
+ expect(c.a).toEqual([1, 2, 3]);
44
+ });
45
+
46
+ it('It should thrown an exception if the maximum depth is exceeded', () => {
47
+ const a = {
48
+ a: { b: { c: { d: { e: { f: { g: { h: { i: { j: { k: 1 } } } } } } } } } }
49
+ };
50
+ const b = {
51
+ a: { b: { c: { d: { e: { f: { g: { h: { i: { j: { k: 2 } } } } } } } } } }
52
+ };
53
+ expect(() => merge(a, b, 5)).toThrow(Error);
37
54
  });
38
55
  });
@@ -0,0 +1,83 @@
1
+ const { getAjv } = require('../../modules/base/services/getAjv');
2
+ const { getValueSync } = require('./registry');
3
+
4
+ module.exports.validateConfiguration = function validateConfiguration(config) {
5
+ const ajv = getAjv();
6
+ const configSchema = getValueSync(
7
+ 'configuratonSchema',
8
+ { type: 'object' },
9
+ null,
10
+ (schema) => {
11
+ ajv.validateSchema(schema);
12
+ if (ajv.errors) {
13
+ throw new Error(
14
+ `Your configuration schema is not valid: ${ajv.errors[0].instancePath}`
15
+ );
16
+ } else {
17
+ return true;
18
+ }
19
+ }
20
+ );
21
+
22
+ // Validate by using Ajv
23
+ const validate = ajv.compile(configSchema);
24
+ const reservedKeys = [
25
+ 'get',
26
+ 'has',
27
+ 'util',
28
+ 'getConfigSources',
29
+ 'makeHidden',
30
+ 'makeImmutable',
31
+ 'setModuleDefaults',
32
+ 'watch',
33
+ '_attachProtoDeep',
34
+ '_cloneDeep',
35
+ '_diffDeep',
36
+ '_equalsDeep',
37
+ '_extendDeep',
38
+ '_get',
39
+ '_getCmdLineArg',
40
+ '_initParam',
41
+ '_isObject',
42
+ '_loadFileConfigs',
43
+ '_parseFile',
44
+ '_stripComments',
45
+ '_stripYamlComments'
46
+ ];
47
+ const configuration = Object.keys(config).reduce((acc, key) => {
48
+ if (configSchema.properties[key] || !reservedKeys.includes(key)) {
49
+ acc[key] = config[key];
50
+ }
51
+ return acc;
52
+ }, {});
53
+ const valid = validate(configuration);
54
+ if (!valid) {
55
+ throw new Error(errorFormatter(validate.errors));
56
+ } else {
57
+ return true;
58
+ }
59
+ };
60
+
61
+ function errorFormatter(errors) {
62
+ const messages = ['Invalid configuration:'];
63
+ errors.forEach((error) => {
64
+ if (error.keyword === 'errorMessage') {
65
+ messages.push(`${error.message}. ${error.instancePath}`);
66
+ } else if (error.keyword === 'additionalProperties') {
67
+ messages.push(
68
+ `${error.instancePath}/${error.params.additionalProperty} is not allowed.`
69
+ );
70
+ } else if (error.keyword === 'enum') {
71
+ messages.push(
72
+ `${
73
+ error.instancePath
74
+ } must be one of the following values: ${error.params.allowedValues.join(
75
+ ', '
76
+ )}`
77
+ );
78
+ } else {
79
+ messages.push(`${error.instancePath} ${error.message}`);
80
+ }
81
+ });
82
+ return messages.join('\n');
83
+ }
@@ -167,7 +167,10 @@ module.exports.createBaseConfig = function createBaseConfig(isServer) {
167
167
  parse: {
168
168
  ecma: 2020
169
169
  },
170
- compress: false,
170
+ compress: {
171
+ unused: true,
172
+ dead_code: true
173
+ },
171
174
  mangle: {
172
175
  safari10: true
173
176
  },
@@ -5,6 +5,7 @@ const { createBaseConfig } = require('../createBaseConfig');
5
5
  const { getComponentsByRoute } = require('../../componee/getComponentsByRoute');
6
6
  const { CONSTANTS } = require('../../helpers');
7
7
  const { GraphqlPlugin } = require('../plugins/GraphqlPlugin');
8
+ const { getEnabledWidgets } = require('../../util/getEnabledWidgets');
8
9
 
9
10
  module.exports.createConfigClient = function createConfigClient(route) {
10
11
  const config = createBaseConfig(false);
@@ -21,7 +22,7 @@ module.exports.createConfigClient = function createConfigClient(route) {
21
22
  ),
22
23
  options: {
23
24
  getComponents: () => getComponentsByRoute(route),
24
- routeId: route.id
25
+ route
25
26
  }
26
27
  }
27
28
  ]
@@ -81,6 +82,7 @@ module.exports.createConfigClient = function createConfigClient(route) {
81
82
 
82
83
  config.entry = () => {
83
84
  const entry = {};
85
+
84
86
  entry[route.id] = [
85
87
  ...getComponentsByRoute(route),
86
88
  path.resolve(
@@ -89,7 +91,13 @@ module.exports.createConfigClient = function createConfigClient(route) {
89
91
  ),
90
92
  `webpack-hot-middleware/client?path=/eHot/${route.id}&reload=true&overlay=true`
91
93
  ];
92
-
94
+ // Widgets
95
+ const widgets = getEnabledWidgets();
96
+ if (!route.isAdmin) {
97
+ Object.keys(widgets).forEach((widget) => {
98
+ entry[route.id].push(widgets[widget].component);
99
+ });
100
+ }
93
101
  return entry;
94
102
  };
95
103
  config.watchOptions = {
@@ -3,13 +3,15 @@ const { inspect } = require('util');
3
3
  const JSON5 = require('json5');
4
4
  const { CONSTANTS } = require('../../helpers');
5
5
  const { error } = require('../../log/logger');
6
+ const { getEnabledWidgets } = require('../../util/getEnabledWidgets');
7
+ const { generateComponentKey } = require('../util/keyGenerator');
6
8
 
7
9
  /* eslint-disable no-multi-assign */
8
10
  /* eslint-disable global-require */
9
11
  module.exports = exports = function AreaLoader(c) {
10
12
  this.cacheable(false);
11
13
  const components = this.getOptions().getComponents();
12
- const { routeId } = this.getOptions();
14
+ const { route } = this.getOptions();
13
15
  const areas = {};
14
16
  components.forEach((module) => {
15
17
  this.addDependency(module);
@@ -28,9 +30,7 @@ module.exports = exports = function AreaLoader(c) {
28
30
  .replace(/(['"])?([a-zA-Z0-9_]+)(['"])?:/g, '"$2": ');
29
31
  try {
30
32
  const layout = JSON5.parse(check);
31
- const id = Buffer.from(module.replace(CONSTANTS.ROOTPATH, '')).toString(
32
- 'base64'
33
- );
33
+ const id = generateComponentKey(module.replace(CONSTANTS.ROOTPATH, ''));
34
34
  areas[layout.areaId] = areas[layout.areaId] || {};
35
35
  areas[layout.areaId][id] = {
36
36
  id,
@@ -43,11 +43,21 @@ module.exports = exports = function AreaLoader(c) {
43
43
  }
44
44
  }
45
45
  });
46
-
46
+ const widgets = getEnabledWidgets();
47
+ areas['*'] = areas['*'] || {};
48
+ widgets.forEach((widget) => {
49
+ areas['*'][widget.type] = {
50
+ id: widget.type,
51
+ sortOrder: widget.sortOrder || 0,
52
+ component: route.isAdmin
53
+ ? `---require('${widget.setting_component}')---`
54
+ : `---require('${widget.component}')---`
55
+ };
56
+ });
47
57
  const content = `Area.defaultProps.components = ${inspect(areas, { depth: 5 })
48
58
  .replace(/"---/g, '')
49
59
  .replace(/---"/g, '')} `;
50
60
  return c
51
61
  .replace('/** render */', content)
52
- .replace('/eHot', `/eHot/${routeId}`);
62
+ .replace('/eHot', `/eHot/${route.id}`);
53
63
  };
@@ -0,0 +1,9 @@
1
+ const crypto = require('crypto');
2
+
3
+ function generateComponentKey(text) {
4
+ return crypto.createHash('md5').update(text).digest('hex');
5
+ }
6
+
7
+ module.exports = exports = {
8
+ generateComponentKey
9
+ };
@@ -1,29 +1,39 @@
1
1
  const fs = require('fs');
2
2
  const uniqid = require('uniqid');
3
3
  const JSON5 = require('json5');
4
+ const isResolvable = require('is-resolvable');
4
5
  const { CONSTANTS } = require('../../helpers');
5
6
  const { parseGraphqlByFile } = require('./parseGraphqlByFile');
7
+ const { generateComponentKey } = require('./keyGenerator');
6
8
 
7
9
  module.exports.parseGraphql = function parseGraphql(modules) {
8
10
  let inUsedFragments = [];
9
11
  const propsMap = {};
10
- let queryStr = '';
12
+ let queries = {};
11
13
  let fragmentStr = '';
12
- const variables = {
13
- values: {},
14
- defs: []
15
- };
16
-
14
+ const variableList = {};
17
15
  modules.forEach((module) => {
18
- if (!fs.existsSync(module)) {
16
+ if (!fs.existsSync(module) && !isResolvable(module)) {
19
17
  return;
20
18
  }
21
-
22
- const moduleKey = Buffer.from(
23
- module.replace(CONSTANTS.ROOTPATH, '')
24
- ).toString('base64');
25
- const moduleGraphqlData = parseGraphqlByFile(module);
26
- queryStr += `\n${moduleGraphqlData.query.source}`;
19
+ const variables = {
20
+ values: {},
21
+ defs: []
22
+ };
23
+ let modulePath;
24
+ let moduleKey;
25
+ // If the module is resolvable, get the apsolute path
26
+ if (!fs.existsSync(module)) {
27
+ modulePath = require.resolve(module);
28
+ moduleKey = generateComponentKey(module);
29
+ } else {
30
+ modulePath = module;
31
+ moduleKey = generateComponentKey(
32
+ modulePath.replace(CONSTANTS.ROOTPATH, '')
33
+ );
34
+ }
35
+ const moduleGraphqlData = parseGraphqlByFile(modulePath);
36
+ queries[moduleKey] = moduleGraphqlData.query.source;
27
37
  fragmentStr += `\n${moduleGraphqlData.fragments.source}`;
28
38
  Object.assign(
29
39
  variables.values,
@@ -32,6 +42,7 @@ module.exports.parseGraphql = function parseGraphql(modules) {
32
42
  variables.defs = variables.defs.concat(
33
43
  moduleGraphqlData.variables.definitions
34
44
  );
45
+ variableList[moduleKey] = variables;
35
46
  propsMap[moduleKey] = moduleGraphqlData.query.props;
36
47
  inUsedFragments = inUsedFragments.concat(moduleGraphqlData.fragments.pairs);
37
48
  });
@@ -46,7 +57,10 @@ module.exports.parseGraphql = function parseGraphql(modules) {
46
57
  if (f) {
47
58
  // Replace fragment alias with the one already processed
48
59
  const regex = new RegExp(`\\.\\.\\.([ ]+)?${fragment.alias}`, 'g');
49
- queryStr = queryStr.replace(regex, `...${f.alias}`);
60
+ queries = Object.keys(queries).reduce((acc, key) => {
61
+ acc[key] = queries[key].replace(regex, `...${f.alias}`);
62
+ return acc;
63
+ }, {});
50
64
  fragmentStr = fragmentStr.replace(regex, `...${f.alias}`);
51
65
  } else {
52
66
  const regex = new RegExp(
@@ -80,9 +94,9 @@ module.exports.parseGraphql = function parseGraphql(modules) {
80
94
  });
81
95
 
82
96
  return {
83
- query: queryStr,
97
+ queries,
84
98
  fragments: fragmentStr,
85
- variables: JSON5.stringify(variables),
99
+ variables: variableList,
86
100
  propsMap
87
101
  };
88
102
  };
@@ -33,6 +33,14 @@ module.exports.parseGraphqlByFile = function parseGraphqlByFile(module) {
33
33
  }
34
34
  );
35
35
 
36
+ queryBody = queryBody.replace(
37
+ /getWidgetSetting\(([^)]+)\)/g,
38
+ (match, p1) => {
39
+ const base64 = Buffer.from(p1).toString('base64');
40
+ return `"getWidgetSetting_${base64}"`;
41
+ }
42
+ );
43
+
36
44
  const queryAst = parse(queryBody);
37
45
  const map = queryAst.definitions[0].selectionSet.selections.map(
38
46
  (selection) => {
@@ -74,7 +82,7 @@ module.exports.parseGraphqlByFile = function parseGraphqlByFile(module) {
74
82
  variables.push({
75
83
  origin: name,
76
84
  type,
77
- alias: `v${uniqid()}`
85
+ alias: `variable_${uniqid()}`
78
86
  });
79
87
  });
80
88
  }
@@ -179,7 +187,13 @@ module.exports.parseGraphqlByFile = function parseGraphqlByFile(module) {
179
187
  return `"getContextValue_${base64}"`;
180
188
  }
181
189
  );
182
-
190
+ variablesBody = variablesBody.replace(
191
+ /getWidgetSetting\(([^)]*)\)/g,
192
+ (match, p1) => {
193
+ const base64 = Buffer.from(p1).toString('base64');
194
+ return `"getWidgetSetting_${base64}"`;
195
+ }
196
+ );
183
197
  try {
184
198
  // Json parse the variables body
185
199
  const variablesJson = JSON5.parse(variablesBody);