@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,27 @@
1
+ const { buildUrl } = require('@evershop/evershop/src/lib/router/buildUrl');
2
+ const { OK } = require('@evershop/evershop/src/lib/util/httpStatus');
3
+
4
+ // eslint-disable-next-line no-unused-vars
5
+ module.exports = async (request, response, delegate, next) => {
6
+ const widget = await delegate.updateWidget;
7
+ response.status(OK);
8
+ response.json({
9
+ data: {
10
+ ...widget,
11
+ links: [
12
+ {
13
+ rel: 'widgetGrid',
14
+ href: buildUrl('widgetGrid'),
15
+ action: 'GET',
16
+ types: ['text/xml']
17
+ },
18
+ {
19
+ rel: 'edit',
20
+ href: buildUrl('widgetEdit', { id: widget.uuid }),
21
+ action: 'GET',
22
+ types: ['text/xml']
23
+ }
24
+ ]
25
+ }
26
+ });
27
+ };
@@ -0,0 +1,18 @@
1
+ {
2
+ "type": "object",
3
+ "properties": {
4
+ "area": {
5
+ "type": "array",
6
+ "items": {
7
+ "type": "string"
8
+ }
9
+ },
10
+ "route": {
11
+ "type": "array",
12
+ "items": {
13
+ "type": "string"
14
+ }
15
+ }
16
+ },
17
+ "additionalProperties": true
18
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "methods": ["PATCH"],
3
+ "path": "/widgets/:id",
4
+ "access": "private"
5
+ }
@@ -0,0 +1,17 @@
1
+ const updateWidget = require('../../services/widget/updateWidget');
2
+
3
+ // eslint-disable-next-line no-unused-vars
4
+ module.exports = async (request, response, delegate) => {
5
+ const data = request.body;
6
+ if (!data.route || (data.route.length === 1 && data.route[0] === '')) {
7
+ data.route = [];
8
+ }
9
+ if (!data.area || (data.area.length === 1 && data.area[0] === '')) {
10
+ data.area = [];
11
+ }
12
+ const widget = await updateWidget(request.params.id, data, {
13
+ routeId: request.currentRoute.id
14
+ });
15
+
16
+ return widget;
17
+ };
@@ -1,12 +1,173 @@
1
1
  const config = require('config');
2
+ const { merge } = require('@evershop/evershop/src/lib/util/merge');
2
3
  const registerDefaultPageCollectionFilters = require('./services/registerDefaultPageCollectionFilters');
3
4
  const {
4
5
  defaultPaginationFilters
5
6
  } = require('../../lib/util/defaultPaginationFilters');
6
7
  const { addProcessor } = require('../../lib/util/registry');
8
+ const registerDefaultWidgetCollectionFilters = require('./services/registerDefaultWidgetCollectionFilters');
7
9
 
8
10
  module.exports = () => {
9
- const themeConfig = {
11
+ addProcessor('configuratonSchema', (schema) => {
12
+ merge(schema, {
13
+ properties: {
14
+ themeConfig: {
15
+ type: 'object',
16
+ properties: {
17
+ logo: {
18
+ type: 'object',
19
+ properties: {
20
+ alt: {
21
+ type: 'string'
22
+ },
23
+ src: {
24
+ type: 'string',
25
+ format: 'uri-reference'
26
+ },
27
+ width: {
28
+ type: 'integer'
29
+ },
30
+ height: {
31
+ type: 'integer'
32
+ }
33
+ }
34
+ },
35
+ headTags: {
36
+ type: 'object',
37
+ properties: {
38
+ links: {
39
+ type: 'array',
40
+ items: {
41
+ type: 'object',
42
+ properties: {
43
+ rel: {
44
+ type: 'string'
45
+ },
46
+ href: {
47
+ type: 'string',
48
+ format: 'uri-reference'
49
+ }
50
+ },
51
+ required: ['rel', 'href']
52
+ }
53
+ },
54
+ metas: {
55
+ type: 'array',
56
+ items: {
57
+ type: 'object',
58
+ properties: {
59
+ name: {
60
+ type: 'string'
61
+ },
62
+ content: {
63
+ type: 'string'
64
+ }
65
+ },
66
+ required: ['name', 'content']
67
+ }
68
+ },
69
+ scripts: {
70
+ type: 'array',
71
+ items: {
72
+ type: 'object',
73
+ properties: {
74
+ src: {
75
+ type: 'string',
76
+ format: 'uri-reference'
77
+ },
78
+ type: {
79
+ type: 'string'
80
+ },
81
+ async: {
82
+ type: 'boolean'
83
+ },
84
+ defer: {
85
+ type: 'boolean'
86
+ },
87
+ crossorigin: {
88
+ type: 'string'
89
+ },
90
+ integrity: {
91
+ type: 'string'
92
+ },
93
+ noModule: {
94
+ type: 'string'
95
+ },
96
+ nonce: {
97
+ type: 'string'
98
+ }
99
+ },
100
+ required: ['src']
101
+ }
102
+ },
103
+ bases: {
104
+ type: 'array',
105
+ items: {
106
+ type: 'object',
107
+ properties: {
108
+ href: {
109
+ type: 'string',
110
+ format: 'uri-reference'
111
+ }
112
+ },
113
+ required: ['href']
114
+ }
115
+ }
116
+ }
117
+ }
118
+ }
119
+ },
120
+ system: {
121
+ type: 'object',
122
+ properties: {
123
+ file_storage: {
124
+ type: 'string',
125
+ enum: ['local']
126
+ }
127
+ }
128
+ },
129
+ widgets: {
130
+ type: 'object',
131
+ patternProperties: {
132
+ '^[a-zA-Z_]+$': {
133
+ type: 'object',
134
+ properties: {
135
+ setting_component: {
136
+ type: 'string'
137
+ },
138
+ component: {
139
+ type: 'string'
140
+ },
141
+ name: {
142
+ type: 'string'
143
+ },
144
+ description: {
145
+ type: 'string'
146
+ },
147
+ default_settings: {
148
+ type: 'object'
149
+ },
150
+ enabled: {
151
+ type: 'boolean'
152
+ }
153
+ },
154
+ required: [
155
+ 'setting_component',
156
+ 'component',
157
+ 'name',
158
+ 'description',
159
+ 'enabled'
160
+ ],
161
+ additionalProperties: false
162
+ }
163
+ }
164
+ }
165
+ }
166
+ });
167
+ return schema;
168
+ });
169
+
170
+ const defaultThemeConfig = {
10
171
  logo: {
11
172
  alt: undefined,
12
173
  src: undefined,
@@ -21,12 +182,40 @@ module.exports = () => {
21
182
  },
22
183
  copyRight: `© 2022 Evershop. All Rights Reserved.`
23
184
  };
24
- config.util.setModuleDefaults('themeConfig', themeConfig);
185
+ config.util.setModuleDefaults('themeConfig', defaultThemeConfig);
186
+
187
+ // Set the default file storage to local
25
188
  config.util.setModuleDefaults('system', {
26
189
  file_storage: 'local'
27
190
  });
28
191
 
29
- // Reigtering the default filters for attribute collection
192
+ // Register default widgets
193
+ const defaultWidgets = {
194
+ text_block: {
195
+ setting_component:
196
+ '@evershop/evershop/src/components/admin/widgets/TextBlockSetting.jsx',
197
+ component:
198
+ '@evershop/evershop/src/components/frontStore/widgets/TextBlock.jsx',
199
+ name: 'Text block',
200
+ description: 'A text block widget',
201
+ default_settings: {
202
+ className: 'page-width'
203
+ },
204
+ enabled: true
205
+ },
206
+ basic_menu: {
207
+ setting_component:
208
+ '@evershop/evershop/src/components/admin/widgets/BasicMenuSetting.jsx',
209
+ component:
210
+ '@evershop/evershop/src/components/frontStore/widgets/BasicMenu.jsx',
211
+ name: 'Menu',
212
+ description: 'A menu widget',
213
+ enabled: true
214
+ }
215
+ };
216
+ config.util.setModuleDefaults('widgets', defaultWidgets);
217
+
218
+ // Reigtering the default filters for cms page collection
30
219
  addProcessor(
31
220
  'cmsPageCollectionFilters',
32
221
  registerDefaultPageCollectionFilters,
@@ -37,4 +226,35 @@ module.exports = () => {
37
226
  (filters) => [...filters, ...defaultPaginationFilters],
38
227
  2
39
228
  );
229
+
230
+ // Reigtering the default filters for widget collection
231
+ addProcessor(
232
+ 'widgetCollectionFilters',
233
+ registerDefaultWidgetCollectionFilters,
234
+ 1
235
+ );
236
+ addProcessor(
237
+ 'widgetCollectionFilters',
238
+ (filters) => [...filters, ...defaultPaginationFilters],
239
+ 2
240
+ );
241
+
242
+ const parseMenus = (data) => {
243
+ if (data?.type !== 'basic_menu') {
244
+ return data;
245
+ }
246
+ // eslint-disable-next-line no-param-reassign
247
+ data.settings = data.settings || {};
248
+ if (data.settings.menus) {
249
+ // eslint-disable-next-line no-param-reassign
250
+ data.settings.menus = JSON.parse(data.settings.menus);
251
+ } else {
252
+ // eslint-disable-next-line no-param-reassign
253
+ data.settings.menus = [];
254
+ }
255
+ return data;
256
+ };
257
+
258
+ addProcessor('widgetDataBeforeCreate', parseMenus, 1);
259
+ addProcessor('widgetDataBeforeUpdate', parseMenus, 1);
40
260
  };
@@ -4,11 +4,10 @@ Lookup CMS page by ID
4
4
  type CmsPage {
5
5
  cmsPageId: Int
6
6
  uuid: String!
7
- layout: String!
8
7
  status: Int!
9
8
  urlKey: String!
10
9
  name: String!
11
- content: String!
10
+ content: JSON!
12
11
  metaTitle: String
13
12
  metaKeywords: String
14
13
  metaDescription: String
@@ -1,3 +1,4 @@
1
+ const { v4: uuidv4 } = require('uuid');
1
2
  const { buildUrl } = require('@evershop/evershop/src/lib/router/buildUrl');
2
3
  const { camelCase } = require('@evershop/evershop/src/lib/util/camelCase');
3
4
  const {
@@ -24,6 +25,39 @@ module.exports = {
24
25
  url: ({ urlKey }) => buildUrl('cmsPageView', { url_key: urlKey }),
25
26
  editUrl: ({ uuid }) => buildUrl('cmsPageEdit', { id: uuid }),
26
27
  updateApi: (page) => buildUrl('updateCmsPage', { id: page.uuid }),
27
- deleteApi: (page) => buildUrl('deleteCmsPage', { id: page.uuid })
28
+ deleteApi: (page) => buildUrl('deleteCmsPage', { id: page.uuid }),
29
+ content: ({ content }) => {
30
+ try {
31
+ return JSON.parse(content);
32
+ } catch (e) {
33
+ // This is for backward compatibility. If the content is not a JSON string then it is a raw HTML block
34
+ const rowId = `r__${uuidv4()}`;
35
+ return [
36
+ {
37
+ size: 1,
38
+ id: rowId,
39
+ columns: [
40
+ {
41
+ id: 'c__c5d90067-c786-4324-8e24-8e30520ac3d7',
42
+ size: 1,
43
+ data: {
44
+ time: 1723347125344,
45
+ blocks: [
46
+ {
47
+ id: 'AU89ItzUa7',
48
+ type: 'raw',
49
+ data: {
50
+ html: content
51
+ }
52
+ }
53
+ ],
54
+ version: '2.30.2'
55
+ }
56
+ }
57
+ ]
58
+ }
59
+ ];
60
+ }
61
+ }
28
62
  }
29
63
  };
@@ -0,0 +1,91 @@
1
+ """
2
+ Lookup Widget by ID
3
+ """
4
+ type Widget {
5
+ widgetId: Int
6
+ uuid: String!
7
+ name: String!
8
+ type: String!
9
+ area: [String!]
10
+ route: [String!]
11
+ sortOrder: Int!
12
+ status: Int!
13
+ settings: JSON!
14
+ editUrl: String!
15
+ updateApi: String!
16
+ deleteApi: String!
17
+ }
18
+
19
+ """
20
+ Widget type
21
+ """
22
+ type WidgetType {
23
+ code: String!
24
+ name: String!
25
+ description: String!
26
+ createWidgetUrl: String!
27
+ settingComponent: String!
28
+ component: String!
29
+ defaultSetting: JSON
30
+ }
31
+
32
+ """
33
+ Return a collection of Widget
34
+ """
35
+ type WidgetCollection {
36
+ items: [Widget]
37
+ currentPage: Int!
38
+ total: Int!
39
+ currentFilters: [Filter]
40
+ }
41
+
42
+ """
43
+ Return a text Widget
44
+ """
45
+ type TextBlockWidget {
46
+ text: JSON
47
+ className: String
48
+ }
49
+
50
+ """
51
+ Return a menu input
52
+ """
53
+ input BasicMenuInput {
54
+ id: ID
55
+ name: String!
56
+ label: String
57
+ url: String
58
+ children: [BasicMenuInput]
59
+ type: String!
60
+ uuid: String
61
+ }
62
+
63
+ """
64
+ Return a menu item
65
+ """
66
+ type Menu {
67
+ id: ID!
68
+ name: String!
69
+ url: String
70
+ children: [Menu]
71
+ type: String!
72
+ uuid: String
73
+ }
74
+
75
+ """
76
+ Return a menu Widget
77
+ """
78
+ type BasicMenuWidget {
79
+ menus: [Menu],
80
+ isMain: Boolean
81
+ className: String
82
+ }
83
+
84
+ extend type Query {
85
+ widget(id: Int): Widget
86
+ widgets(filters: [FilterInput]): WidgetCollection
87
+ widgetTypes: [WidgetType]
88
+ widgetType(code: String!): WidgetType
89
+ textWidget(text: String, className: String): TextBlockWidget
90
+ basicMenuWidget(settings: JSON ): BasicMenuWidget
91
+ }
@@ -0,0 +1,142 @@
1
+ const uniqid = require('uniqid');
2
+ const { buildUrl } = require('@evershop/evershop/src/lib/router/buildUrl');
3
+ const { camelCase } = require('@evershop/evershop/src/lib/util/camelCase');
4
+ const {
5
+ getEnabledWidgets
6
+ } = require('@evershop/evershop/src/lib/util/getEnabledWidgets');
7
+ const { select } = require('@evershop/postgres-query-builder');
8
+ const {
9
+ getWidgetsBaseQuery
10
+ } = require('../../../services/getWidgetsBaseQuery');
11
+ const { WidgetCollection } = require('../../../services/WidgetCollection');
12
+ const {
13
+ getCmsPagesBaseQuery
14
+ } = require('../../../services/getCmsPagesBaseQuery');
15
+
16
+ module.exports = {
17
+ Query: {
18
+ widget: async (root, { id }, { pool }) => {
19
+ const query = getWidgetsBaseQuery();
20
+ query.where('widget_id', '=', id);
21
+ const widget = await query.load(pool);
22
+ return widget ? camelCase(widget) : null;
23
+ },
24
+ widgets: async (_, { filters = [] }, { user }) => {
25
+ const query = getWidgetsBaseQuery();
26
+ const root = new WidgetCollection(query);
27
+ await root.init(filters, !!user);
28
+ return root;
29
+ },
30
+ widgetTypes: () => {
31
+ const types = getEnabledWidgets();
32
+ return types.map((row) => ({
33
+ code: row.type,
34
+ name: row.name,
35
+ description: row.description,
36
+ settingComponent: row.setting_component,
37
+ component: row.component,
38
+ defaultSettings: row.default_settings,
39
+ createWidgetUrl: buildUrl('widgetNew', { type: row.type })
40
+ }));
41
+ },
42
+ widgetType: (_, { code }) => {
43
+ const types = getEnabledWidgets();
44
+ const type = types.find((row) => row.type === code);
45
+ return type
46
+ ? {
47
+ code: type.type,
48
+ name: type.name,
49
+ description: type.description,
50
+ settingComponent: type.setting_component,
51
+ component: type.component,
52
+ defaultSettings: type.default_settings,
53
+ createWidgetUrl: buildUrl('widgetNew', { type: type.type })
54
+ }
55
+ : null;
56
+ },
57
+ textWidget(_, { text, className }) {
58
+ const replacements = {
59
+ '&lt;': '<',
60
+ '&gt;': '>'
61
+ };
62
+ const jsonText = text
63
+ ? text.replace(/&lt;|&gt;/g, (match) => replacements[match])
64
+ : '[]';
65
+ return { text: JSON.parse(jsonText), className };
66
+ },
67
+ basicMenuWidget: async (_, { settings }, { pool }) => {
68
+ const categories = [];
69
+ const pages = [];
70
+ const menus = settings?.menus || undefined;
71
+ const isMain = [1, '1', 'true', true].includes(settings?.isMain) || false;
72
+ if (!menus) {
73
+ return { menus: [] };
74
+ }
75
+ // eslint-disable-next-line no-restricted-syntax
76
+ for (const menu of menus) {
77
+ if (menu.type === 'category') {
78
+ categories.push(menu.uuid);
79
+ }
80
+ if (menu.type === 'page') {
81
+ pages.push(menu.uuid);
82
+ }
83
+ menu.children.forEach((child) => {
84
+ if (child.type === 'category') {
85
+ categories.push(child.uuid);
86
+ }
87
+ if (child.type === 'page') {
88
+ pages.push(child.uuid);
89
+ }
90
+ });
91
+ }
92
+ let urls = [];
93
+ if (categories.length > 0) {
94
+ const rewrites = await select()
95
+ .from('url_rewrite')
96
+ .where('entity_uuid', 'IN', categories)
97
+ .execute(pool);
98
+ urls = urls.concat(
99
+ rewrites.map((r) => ({
100
+ uuid: r.entity_uuid,
101
+ url: r.request_path
102
+ }))
103
+ );
104
+ }
105
+ if (pages.length > 0) {
106
+ const query = getCmsPagesBaseQuery();
107
+ query.where('uuid', 'IN', pages);
108
+ const cmsPages = await query.execute(pool);
109
+ urls = urls.concat(
110
+ cmsPages.map((p) => ({
111
+ uuid: p.uuid,
112
+ url: buildUrl('cmsPageView', { url_key: p.url_key })
113
+ }))
114
+ );
115
+ }
116
+ const items = menus.map((menu) => {
117
+ const url = urls.find((u) => u.uuid === menu.uuid);
118
+ return {
119
+ ...menu,
120
+ id: uniqid(),
121
+ // eslint-disable-next-line no-nested-ternary
122
+ url: url ? url.url : menu.type === 'custom' ? menu.url : null,
123
+ children: menu.children.map((child) => {
124
+ const url = urls.find((u) => u.uuid === child.uuid);
125
+ return {
126
+ ...child,
127
+ id: uniqid(),
128
+ // eslint-disable-next-line no-nested-ternary
129
+ url: url ? url.url : child.type === 'custom' ? child.url : null
130
+ };
131
+ })
132
+ };
133
+ });
134
+ return { menus: items, isMain, className: settings?.className };
135
+ }
136
+ },
137
+ Widget: {
138
+ editUrl: ({ uuid }) => buildUrl('widgetEdit', { id: uuid }),
139
+ updateApi: (widget) => buildUrl('updateWidget', { id: widget.uuid }),
140
+ deleteApi: (widget) => buildUrl('deleteWidget', { id: widget.uuid })
141
+ }
142
+ };
@@ -0,0 +1,22 @@
1
+ const { execute } = require('@evershop/postgres-query-builder');
2
+
3
+ // eslint-disable-next-line no-multi-assign
4
+ module.exports = exports = async (connection) => {
5
+ await execute(
6
+ connection,
7
+ `CREATE TABLE "widget" (
8
+ "widget_id" INT GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1) PRIMARY KEY,
9
+ "uuid" UUID NOT NULL DEFAULT gen_random_uuid (),
10
+ "name" varchar NOT NULL,
11
+ "type" varchar NOT NULL,
12
+ "route" jsonb NOT NULL default '[]'::jsonb,
13
+ "area" jsonb NOT NULL default '[]'::jsonb,
14
+ "sort_order" INT NOT NULL DEFAULT 1,
15
+ "settings" jsonb NOT NULL default '{}'::jsonb,
16
+ "status" boolean DEFAULT NULL,
17
+ "created_at" TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
18
+ "updated_at" TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
19
+ CONSTRAINT "WIDGET_UUID" UNIQUE ("uuid")
20
+ )`
21
+ );
22
+ };