@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,614 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { useQuery } from 'urql';
4
+ import uniqid from 'uniqid';
5
+ import { useModal } from '@components/common/modal/useModal';
6
+ import './BasicMenuSetting.scss';
7
+ import CreatableSelect from 'react-select/creatable';
8
+ import Spinner from '@components/common/Spinner';
9
+ import Button from '@components/common/form/Button';
10
+ import { Field } from '@components/common/form/Field';
11
+ import { Card } from '../cms/Card';
12
+
13
+ const menuQuery = `
14
+ query Query ($filters: [FilterInput]) {
15
+ categories (filters: $filters) {
16
+ items {
17
+ value: uuid,
18
+ label: name
19
+ path {
20
+ name
21
+ }
22
+ }
23
+ }
24
+ cmsPages (filters: $filters) {
25
+ items {
26
+ value: uuid,
27
+ label: name
28
+ }
29
+ }
30
+ }
31
+ `;
32
+
33
+ async function loadSwappable() {
34
+ const { Swappable } = await import('@shopify/draggable');
35
+ return Swappable;
36
+ }
37
+
38
+ function MenuSettingPopup({ item, updateItem }) {
39
+ const [currentItem, setCurrentItem] = React.useState(item);
40
+ const [err, setErr] = React.useState(null);
41
+
42
+ const [result] = useQuery({
43
+ query: menuQuery,
44
+ variables: {
45
+ filters: []
46
+ }
47
+ });
48
+ const { data, fetching, error } = result;
49
+
50
+ if (fetching) {
51
+ return (
52
+ <div className="flex justify-center items-center">
53
+ <Spinner width={30} height={30} />
54
+ </div>
55
+ );
56
+ }
57
+ if (error) {
58
+ return (
59
+ <div className="flex justify-center items-center">
60
+ <p className="text-critical">{error.message}</p>
61
+ </div>
62
+ );
63
+ }
64
+
65
+ const groupOptions = [
66
+ {
67
+ label: 'Categories',
68
+ options: data.categories.items.map((i) => ({
69
+ ...i,
70
+ label: i.path.map((p) => p.name).join(' > ')
71
+ }))
72
+ },
73
+ {
74
+ label: 'CMS Pages',
75
+ options: data.cmsPages.items
76
+ },
77
+ {
78
+ label: 'Custom',
79
+ options:
80
+ currentItem.type === 'custom'
81
+ ? [
82
+ {
83
+ value: currentItem.uuid,
84
+ label: currentItem.uuid
85
+ }
86
+ ]
87
+ : []
88
+ }
89
+ ];
90
+ const handleCreate = (inputValue) => {
91
+ setCurrentItem({
92
+ ...item,
93
+ uuid: inputValue,
94
+ label: inputValue,
95
+ url: inputValue,
96
+ type: 'custom'
97
+ });
98
+ };
99
+
100
+ return (
101
+ <Card title="Menu item">
102
+ <Card.Session>
103
+ <div className="grid grid-flow-row gap-8">
104
+ <div>
105
+ <Field
106
+ type="input"
107
+ label="Name"
108
+ value={currentItem.name}
109
+ onChange={(e) =>
110
+ setCurrentItem({
111
+ ...currentItem,
112
+ name: e.target.value
113
+ })
114
+ }
115
+ />
116
+ </div>
117
+ <div>
118
+ <CreatableSelect
119
+ isClearable
120
+ onChange={(newValue) => {
121
+ setCurrentItem({
122
+ ...currentItem,
123
+ uuid: newValue.value,
124
+ label: newValue.label,
125
+ // eslint-disable-next-line no-underscore-dangle
126
+ type: newValue.__typename === 'Category' ? 'category' : 'page'
127
+ });
128
+ }}
129
+ onCreateOption={handleCreate}
130
+ options={groupOptions}
131
+ value={{
132
+ value: currentItem.uuid,
133
+ label:
134
+ currentItem.type === 'custom'
135
+ ? currentItem.uuid
136
+ : [
137
+ ...groupOptions[0].options,
138
+ ...groupOptions[1].options
139
+ ].find((option) => option.value === currentItem.uuid)
140
+ ?.label || ''
141
+ }}
142
+ />
143
+ </div>
144
+ {err && <div className="text-critical">{err}</div>}
145
+ <div className="flex justify-end">
146
+ <Button
147
+ title="Save"
148
+ onAction={() => {
149
+ if (currentItem.uuid === '') {
150
+ setErr('Please select a menu item');
151
+ return;
152
+ }
153
+ if (currentItem.name === '') {
154
+ setErr('Please enter a name');
155
+ return;
156
+ }
157
+ updateItem(currentItem);
158
+ }}
159
+ />
160
+ </div>
161
+ </div>
162
+ </Card.Session>
163
+ </Card>
164
+ );
165
+ }
166
+
167
+ MenuSettingPopup.propTypes = {
168
+ item: PropTypes.shape({
169
+ id: PropTypes.string,
170
+ name: PropTypes.string,
171
+ url: PropTypes.string,
172
+ type: PropTypes.string,
173
+ uuid: PropTypes.string,
174
+ children: PropTypes.arrayOf(
175
+ PropTypes.shape({
176
+ id: PropTypes.string,
177
+ name: PropTypes.string,
178
+ url: PropTypes.string,
179
+ type: PropTypes.string,
180
+ uuid: PropTypes.string
181
+ })
182
+ )
183
+ }).isRequired,
184
+ updateItem: PropTypes.func.isRequired
185
+ };
186
+
187
+ function MenuItem({ item, updateItem, deleteItem }) {
188
+ const modal = useModal();
189
+ const [itemInEdit, setItemInEdit] = React.useState(item);
190
+
191
+ const addChildren = (i) => {
192
+ updateItem({
193
+ ...item,
194
+ children: [...item.children, i]
195
+ });
196
+ };
197
+
198
+ const updateItemFunc = (i) => {
199
+ if (i.id === item.id) {
200
+ updateItem(i);
201
+ } else {
202
+ addChildren(i);
203
+ }
204
+ modal.closeModal();
205
+ };
206
+ return (
207
+ <div className="flex justify-between">
208
+ <div className="flex justify-start gap-5">
209
+ <a
210
+ className={
211
+ item.children
212
+ ? 'dragIcon cursor-move'
213
+ : 'dragIcon_child cursor-move'
214
+ }
215
+ >
216
+ <svg
217
+ viewBox="0 0 24 24"
218
+ xmlns="http://www.w3.org/2000/svg"
219
+ fill="#949494"
220
+ width={20}
221
+ height={20}
222
+ >
223
+ <g>
224
+ <path fill="none" d="M0 0h24v24H0z" />
225
+ <path
226
+ fillRule="nonzero"
227
+ d="M14 6h2v2h5a1 1 0 0 1 1 1v7.5L16 13l.036 8.062 2.223-2.15L20.041 22H9a1 1 0 0 1-1-1v-5H6v-2h2V9a1 1 0 0 1 1-1h5V6zm8 11.338V21a1 1 0 0 1-.048.307l-1.96-3.394L22 17.338zM4 14v2H2v-2h2zm0-4v2H2v-2h2zm0-4v2H2V6h2zm0-4v2H2V2h2zm4 0v2H6V2h2zm4 0v2h-2V2h2zm4 0v2h-2V2h2z"
228
+ />
229
+ </g>
230
+ </svg>
231
+ </a>
232
+ <div>{item.name}</div>
233
+ </div>
234
+ <div className="flex justify-end gap-5">
235
+ <a
236
+ className="text-interactive"
237
+ href="#"
238
+ onClick={(e) => {
239
+ e.preventDefault();
240
+ setItemInEdit(item);
241
+ modal.openModal();
242
+ }}
243
+ >
244
+ Edit
245
+ </a>
246
+ {item.children && (
247
+ <a
248
+ className="text-interactive"
249
+ href="#"
250
+ onClick={(e) => {
251
+ e.preventDefault();
252
+ setItemInEdit({
253
+ id: uniqid(),
254
+ name: '',
255
+ uuid: ''
256
+ });
257
+ modal.openModal();
258
+ }}
259
+ >
260
+ Add child
261
+ </a>
262
+ )}
263
+ <a
264
+ className="text-critical"
265
+ href="#"
266
+ onClick={(e) => {
267
+ e.preventDefault();
268
+ deleteItem(item);
269
+ }}
270
+ >
271
+ Delete
272
+ </a>
273
+ </div>
274
+ {modal.state.showing && (
275
+ <div className={modal.className} onAnimationEnd={modal.onAnimationEnd}>
276
+ <div
277
+ className="modal-wrapper flex self-center justify-center items-center"
278
+ tabIndex={-1}
279
+ role="dialog"
280
+ >
281
+ <div className="modal">
282
+ <MenuSettingPopup
283
+ item={itemInEdit}
284
+ updateItem={(i) => {
285
+ updateItemFunc(i);
286
+ }}
287
+ />
288
+ </div>
289
+ </div>
290
+ </div>
291
+ )}
292
+ </div>
293
+ );
294
+ }
295
+
296
+ MenuItem.propTypes = {
297
+ item: PropTypes.shape({
298
+ id: PropTypes.string,
299
+ name: PropTypes.string,
300
+ url: PropTypes.string,
301
+ type: PropTypes.string,
302
+ uuid: PropTypes.string,
303
+ children: PropTypes.arrayOf(
304
+ PropTypes.shape({
305
+ id: PropTypes.string,
306
+ name: PropTypes.string,
307
+ url: PropTypes.string,
308
+ type: PropTypes.string,
309
+ uuid: PropTypes.string
310
+ })
311
+ )
312
+ }).isRequired,
313
+ updateItem: PropTypes.func.isRequired,
314
+ deleteItem: PropTypes.func.isRequired
315
+ };
316
+
317
+ export default function BasicMenuSetting({
318
+ basicMenuWidget: { menus, isMain, className }
319
+ }) {
320
+ const [items, setItems] = React.useState(menus);
321
+ const modal = useModal();
322
+ // eslint-disable-next-line no-unused-vars
323
+ const swappable = React.useRef(null);
324
+ const swappableChild = React.useRef({});
325
+ React.useEffect(() => {
326
+ async function initSwappable() {
327
+ const Swappable = await loadSwappable();
328
+ // eslint-disable-next-line new-cap
329
+ const swappable = new Swappable(
330
+ document.querySelectorAll(`div.menu__container`),
331
+ {
332
+ draggable: 'div.draggable',
333
+ mirror: {
334
+ constrainDimensions: true
335
+ },
336
+ handle: '.dragIcon'
337
+ }
338
+ );
339
+ let source = null;
340
+ let destination = null;
341
+ swappable.on('swappable:swapped', (event) => {
342
+ source = event.data.dragEvent.data.source.id;
343
+ destination = event.data.dragEvent.data.over.id;
344
+ });
345
+
346
+ swappable.on('swappable:stop', () => {
347
+ if (!source || !destination) {
348
+ return;
349
+ }
350
+ setItems((originItems) => {
351
+ const newItems = Array.from(originItems);
352
+ const sr = originItems.find((item) => item.id === source);
353
+ newItems[originItems.findIndex((item) => item.id === source)] =
354
+ originItems.find((item) => item.id === destination);
355
+ newItems[originItems.findIndex((item) => item.id === destination)] =
356
+ sr;
357
+ return newItems;
358
+ });
359
+ });
360
+ swappable.current = swappable;
361
+ }
362
+ initSwappable();
363
+ }, []);
364
+
365
+ React.useEffect(() => {
366
+ async function initChildSwappable() {
367
+ const Swappable = await loadSwappable();
368
+ // eslint-disable-next-line new-cap
369
+ items.forEach((item) => {
370
+ if (swappableChild.current[item.id]) {
371
+ swappableChild.current[item.id].destroy();
372
+ }
373
+ const swappable = new Swappable(
374
+ document.querySelectorAll(`div#${item.id}`),
375
+ {
376
+ draggable: 'div.draggable_child',
377
+ mirror: {
378
+ constrainDimensions: true
379
+ },
380
+ handle: '.dragIcon_child'
381
+ }
382
+ );
383
+ let source = null;
384
+ let destination = null;
385
+ swappable.on('swappable:swapped', (event) => {
386
+ source = event.data.dragEvent.data.source.id;
387
+ destination = event.data.dragEvent.data.over.id;
388
+ });
389
+
390
+ swappable.on('swappable:stop', () => {
391
+ if (!source || !destination) {
392
+ return;
393
+ }
394
+ // Handle the update order of children
395
+ setItems((originItems) => {
396
+ const newItems = originItems.map((i) => {
397
+ if (i.id !== item.id) {
398
+ return i;
399
+ } else {
400
+ const newChildren = i.children.map((c) => ({ ...c }));
401
+ const sr = newChildren.find((c) => c.id === source);
402
+ newChildren[i.children.findIndex((c) => c.id === source)] =
403
+ i.children.find((c) => c.id === destination);
404
+ newChildren[i.children.findIndex((c) => c.id === destination)] =
405
+ sr;
406
+ return {
407
+ ...i,
408
+ children: newChildren
409
+ };
410
+ }
411
+ });
412
+ return newItems;
413
+ });
414
+ });
415
+ swappableChild.current[item.id] = swappable;
416
+ });
417
+ }
418
+ initChildSwappable();
419
+ }, [items]);
420
+
421
+ const updateItem = (item) => {
422
+ setItems((prevItems) => {
423
+ const newItems = prevItems.map((prevItem) => {
424
+ if (prevItem.id === item.id) {
425
+ return item;
426
+ } else if (prevItem.children.length > 0) {
427
+ return {
428
+ ...prevItem,
429
+ children: prevItem.children.map((child) => {
430
+ if (child.id === item.id) {
431
+ return item;
432
+ }
433
+ return child;
434
+ })
435
+ };
436
+ }
437
+ return prevItem;
438
+ });
439
+ return newItems;
440
+ });
441
+ };
442
+
443
+ const deleteItem = (item) => {
444
+ setItems((prevItems) => {
445
+ const newItems = prevItems.filter((prevItem) => {
446
+ if (prevItem.id === item.id) {
447
+ return false;
448
+ } else if (prevItem.children.length > 0) {
449
+ // eslint-disable-next-line no-param-reassign
450
+ prevItem.children = prevItem.children.filter(
451
+ (child) => child.id !== item.id
452
+ );
453
+ }
454
+ return true;
455
+ });
456
+ return newItems;
457
+ });
458
+ };
459
+
460
+ return (
461
+ <>
462
+ <Card.Session title="Menu Items">
463
+ <div className="menu__container">
464
+ {items.map((menu) => (
465
+ <div className="item draggable" id={menu.id} key={menu.id}>
466
+ <MenuItem
467
+ item={menu}
468
+ updateItem={updateItem}
469
+ deleteItem={deleteItem}
470
+ />
471
+ {menu.children.length > 0 && (
472
+ <div className="menu__container_child mt-5">
473
+ {menu.children.map((item) => (
474
+ <div
475
+ className="item draggable_child"
476
+ key={item.id}
477
+ id={item.id}
478
+ >
479
+ <MenuItem
480
+ item={item}
481
+ updateItem={updateItem}
482
+ deleteItem={deleteItem}
483
+ />
484
+ </div>
485
+ ))}
486
+ </div>
487
+ )}
488
+ </div>
489
+ ))}
490
+ <Field
491
+ type="hidden"
492
+ name="settings[menus]"
493
+ value={JSON.stringify(items)}
494
+ />
495
+ <div className="mt-5">
496
+ <a
497
+ href="#"
498
+ className="text-interactive"
499
+ onClick={(e) => {
500
+ e.preventDefault();
501
+ modal.openModal();
502
+ }}
503
+ >
504
+ Add menu item
505
+ </a>
506
+ </div>
507
+ {modal.state.showing && (
508
+ <div
509
+ className={modal.className}
510
+ onAnimationEnd={modal.onAnimationEnd}
511
+ >
512
+ <div
513
+ className="modal-wrapper flex self-center justify-center items-center"
514
+ tabIndex={-1}
515
+ role="dialog"
516
+ >
517
+ <div className="modal">
518
+ <MenuSettingPopup
519
+ item={{
520
+ id: uniqid(),
521
+ name: '',
522
+ uuid: '',
523
+ children: []
524
+ }}
525
+ updateItem={(item) => {
526
+ setItems((prevItems) => [...prevItems, item]);
527
+ modal.closeModal();
528
+ }}
529
+ />
530
+ </div>
531
+ </div>
532
+ </div>
533
+ )}
534
+ </div>
535
+ </Card.Session>
536
+ <Card.Session title="Setting">
537
+ <Field
538
+ type="toggle"
539
+ name="settings[isMain]"
540
+ label="Is Main Menu?"
541
+ value={isMain}
542
+ instruction="Only main menu will be styled for the mobile view"
543
+ />
544
+ <Field
545
+ type="input"
546
+ name="settings[className]"
547
+ label="Custom CSS classes"
548
+ value={className}
549
+ instruction="Add custom CSS classes to the menu"
550
+ />
551
+ </Card.Session>
552
+ </>
553
+ );
554
+ }
555
+
556
+ BasicMenuSetting.propTypes = {
557
+ basicMenuWidget: PropTypes.shape({
558
+ menus: PropTypes.arrayOf(
559
+ PropTypes.shape({
560
+ id: PropTypes.string,
561
+ name: PropTypes.string,
562
+ url: PropTypes.string,
563
+ type: PropTypes.string,
564
+ uuid: PropTypes.string,
565
+ children: PropTypes.arrayOf(
566
+ PropTypes.shape({
567
+ id: PropTypes.string,
568
+ name: PropTypes.string,
569
+ url: PropTypes.string,
570
+ type: PropTypes.string,
571
+ uuid: PropTypes.string
572
+ })
573
+ )
574
+ })
575
+ ),
576
+ isMain: PropTypes.bool,
577
+ className: PropTypes.string
578
+ })
579
+ };
580
+
581
+ BasicMenuSetting.defaultProps = {
582
+ basicMenuWidget: {
583
+ menus: [],
584
+ isMain: 1,
585
+ className: ''
586
+ }
587
+ };
588
+
589
+ export const query = `
590
+ query Query($settings: JSON) {
591
+ basicMenuWidget(settings: $settings) {
592
+ menus {
593
+ id
594
+ name
595
+ url
596
+ type
597
+ uuid
598
+ children {
599
+ id
600
+ name
601
+ url
602
+ type
603
+ uuid
604
+ }
605
+ }
606
+ isMain
607
+ className
608
+ }
609
+ }
610
+ `;
611
+
612
+ export const variables = `{
613
+ settings: getWidgetSetting()
614
+ }`;
@@ -0,0 +1,19 @@
1
+ .menu__container>* {
2
+ margin-top: 10px;
3
+ }
4
+
5
+ .item {
6
+ padding: 10px;
7
+ border: 1px dashed var(--border);
8
+ margin-top: 10px;
9
+ background-color: #fff;
10
+ }
11
+
12
+ .menu__container .draggable-source--is-dragging {
13
+ background: var(--divider);
14
+ color: var(--divider);
15
+ }
16
+
17
+ .menu__container .draggable-source--is-dragging>* {
18
+ visibility: hidden;
19
+ }