@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,185 @@
1
+ import PropTypes from 'prop-types';
2
+ import React from 'react';
3
+ import Select from 'react-select';
4
+ import CreatableSelect from 'react-select/creatable';
5
+ import { Field } from '@components/common/form/Field';
6
+ import { Card } from '@components/admin/cms/Card';
7
+
8
+ const components = {
9
+ DropdownIndicator: null
10
+ };
11
+
12
+ const createOption = (label) => ({
13
+ label,
14
+ value: label
15
+ });
16
+
17
+ function AreaInput({ values }) {
18
+ const [inputValue, setInputValue] = React.useState('');
19
+ const [value, setValue] = React.useState(values);
20
+
21
+ const handleKeyDown = (event) => {
22
+ if (!inputValue) return;
23
+ switch (event.key) {
24
+ case 'Enter':
25
+ case 'Tab':
26
+ setValue((prev) => [...prev, createOption(inputValue)]);
27
+ setInputValue('');
28
+ event.preventDefault();
29
+ break;
30
+ default:
31
+ break;
32
+ }
33
+ };
34
+
35
+ return (
36
+ <CreatableSelect
37
+ components={components}
38
+ inputValue={inputValue}
39
+ name="area[]"
40
+ isClearable
41
+ isMulti
42
+ menuIsOpen={false}
43
+ onChange={(newValue) => {
44
+ setValue(newValue);
45
+ }}
46
+ onInputChange={(newValue) => setInputValue(newValue)}
47
+ onKeyDown={handleKeyDown}
48
+ placeholder="Type area and press enter..."
49
+ value={value}
50
+ />
51
+ );
52
+ }
53
+
54
+ AreaInput.propTypes = {
55
+ values: PropTypes.arrayOf(
56
+ PropTypes.shape({ label: PropTypes.string, value: PropTypes.string })
57
+ )
58
+ };
59
+
60
+ AreaInput.defaultProps = {
61
+ values: []
62
+ };
63
+
64
+ export default function General({ widget, routes }) {
65
+ const allRoutes = [
66
+ {
67
+ value: 'all',
68
+ label: 'All',
69
+ isAdmin: false,
70
+ isApi: false,
71
+ method: ['GET']
72
+ },
73
+ ...routes
74
+ ];
75
+ return (
76
+ <Card>
77
+ <Card.Session title="Name">
78
+ <Field
79
+ type="text"
80
+ name="name"
81
+ value={widget?.name}
82
+ placeholder="Name"
83
+ validationRules={['notEmpty']}
84
+ />
85
+ </Card.Session>
86
+ <Card.Session title="Status">
87
+ <Field
88
+ type="radio"
89
+ name="status"
90
+ options={[
91
+ { value: 0, text: 'Disabled' },
92
+ { value: 1, text: 'Enabled' }
93
+ ]}
94
+ value={widget ? widget.status : 1}
95
+ />
96
+ </Card.Session>
97
+ <Card.Session title="Area">
98
+ <AreaInput
99
+ values={
100
+ widget?.area?.length > 0
101
+ ? widget.area.map((a) => ({ value: a, label: a }))
102
+ : []
103
+ }
104
+ />
105
+ </Card.Session>
106
+ <Card.Session title="Page">
107
+ <Select
108
+ name="route[]"
109
+ options={allRoutes.filter(
110
+ (r) =>
111
+ r.isApi === false &&
112
+ r.isAdmin === false &&
113
+ r.method.includes('GET') &&
114
+ r.method.length === 1
115
+ )}
116
+ hideSelectedOptions
117
+ isMulti
118
+ aria-label="Select country"
119
+ defaultValue={
120
+ widget?.route
121
+ ? allRoutes.filter((r) => widget.route.includes(r.value))
122
+ : []
123
+ }
124
+ className="page-select relative z-50"
125
+ />
126
+ </Card.Session>
127
+ <Card.Session title="Sort order">
128
+ <Field
129
+ type="text"
130
+ name="sort_order"
131
+ value={widget?.sortOrder}
132
+ placeholder="Sort order"
133
+ validationRules={['notEmpty', 'number']}
134
+ />
135
+ </Card.Session>
136
+ </Card>
137
+ );
138
+ }
139
+
140
+ General.propTypes = {
141
+ widget: PropTypes.shape({
142
+ status: PropTypes.number,
143
+ name: PropTypes.string.isRequired,
144
+ sortOrder: PropTypes.number,
145
+ area: PropTypes.string,
146
+ route: PropTypes.string
147
+ }),
148
+ routes: PropTypes.arrayOf(
149
+ PropTypes.shape({
150
+ value: PropTypes.string,
151
+ label: PropTypes.string,
152
+ isApi: PropTypes.bool,
153
+ isAdmin: PropTypes.bool,
154
+ method: PropTypes.arrayOf(PropTypes.string)
155
+ })
156
+ ).isRequired
157
+ };
158
+
159
+ General.defaultProps = {
160
+ widget: null
161
+ };
162
+
163
+ export const layout = {
164
+ areaId: 'rightSide',
165
+ sortOrder: 15
166
+ };
167
+
168
+ export const query = `
169
+ query Query {
170
+ widget(id: getContextValue("widgetId", null)) {
171
+ name
172
+ status
173
+ sortOrder
174
+ area
175
+ route
176
+ }
177
+ routes {
178
+ value: id
179
+ label: name
180
+ isApi
181
+ isAdmin
182
+ method
183
+ }
184
+ }
185
+ `;
@@ -0,0 +1,37 @@
1
+ import PropTypes from 'prop-types';
2
+ import React from 'react';
3
+ import PageHeading from '@components/admin/cms/PageHeading';
4
+
5
+ export default function WidgetEditPageHeading({ backUrl, widget }) {
6
+ return (
7
+ <PageHeading
8
+ backUrl={backUrl}
9
+ heading={widget ? `Editing widget ${widget.name}` : 'Create A New Widget'}
10
+ />
11
+ );
12
+ }
13
+
14
+ WidgetEditPageHeading.propTypes = {
15
+ backUrl: PropTypes.string.isRequired,
16
+ widget: PropTypes.shape({
17
+ name: PropTypes.string.isRequired
18
+ })
19
+ };
20
+
21
+ WidgetEditPageHeading.defaultProps = {
22
+ widget: null
23
+ };
24
+
25
+ export const layout = {
26
+ areaId: 'content',
27
+ sortOrder: 5
28
+ };
29
+
30
+ export const query = `
31
+ query Query {
32
+ page: widget(id: getContextValue("widgetId", null)) {
33
+ name
34
+ }
35
+ backUrl: url(routeId: "widgetGrid")
36
+ }
37
+ `;
@@ -0,0 +1,55 @@
1
+ /* eslint-disable no-param-reassign */
2
+ import PropTypes from 'prop-types';
3
+ import React from 'react';
4
+ import { Card } from '@components/admin/cms/Card';
5
+ import Area from '@components/common/Area';
6
+
7
+ export default function Setting({ type }) {
8
+ const areaId = `widget_setting_form`;
9
+ return (
10
+ <Card title={`${type.name} widget setting`}>
11
+ <Card.Session>
12
+ <Area id={areaId} noOurter />
13
+ </Card.Session>
14
+ </Card>
15
+ );
16
+ }
17
+
18
+ Setting.propTypes = {
19
+ widget: PropTypes.shape({
20
+ urlKey: PropTypes.string,
21
+ metaTitle: PropTypes.string,
22
+ metaKeywords: PropTypes.string,
23
+ metaDescription: PropTypes.string
24
+ }),
25
+ type: PropTypes.shape({
26
+ code: PropTypes.string,
27
+ name: PropTypes.string
28
+ })
29
+ };
30
+
31
+ Setting.defaultProps = {
32
+ widget: {},
33
+ type: {}
34
+ };
35
+
36
+ export const layout = {
37
+ areaId: 'leftSide',
38
+ sortOrder: 30
39
+ };
40
+
41
+ export const query = `
42
+ query Query {
43
+ widget: widget(id: getContextValue('widgetId', null)) {
44
+ name
45
+ status
46
+ area
47
+ route
48
+ settings
49
+ }
50
+ type: widgetType(code: getContextValue('type', null)) {
51
+ code
52
+ name
53
+ }
54
+ }
55
+ `;
@@ -0,0 +1,415 @@
1
+ /* eslint-disable react/no-unstable-nested-components */
2
+ import PropTypes from 'prop-types';
3
+ import React, { useState } from 'react';
4
+ import axios from 'axios';
5
+ import Pagination from '@components/common/grid/Pagination';
6
+ import { useAlertContext } from '@components/common/modal/Alert';
7
+ import { Checkbox } from '@components/common/form/fields/Checkbox';
8
+ import { Card } from '@components/admin/cms/Card';
9
+ import Area from '@components/common/Area';
10
+ import StatusRow from '@components/common/grid/rows/StatusRow';
11
+ import PageName from '@components/admin/cms/cmsPageGrid/rows/PageName';
12
+ import { Form } from '@components/common/form/Form';
13
+ import { Field } from '@components/common/form/Field';
14
+ import SortableHeader from '@components/common/grid/headers/Sortable';
15
+ import WidgetTypeRow from '@components/admin/cms/widget/grid/WidgetTypeRow';
16
+
17
+ function Actions({ widgets = [], selectedIds = [] }) {
18
+ const { openAlert, closeAlert } = useAlertContext();
19
+ const [isLoading, setIsLoading] = useState(false);
20
+
21
+ const updatePages = async (status) => {
22
+ setIsLoading(true);
23
+ const promises = widgets
24
+ .filter((widget) => selectedIds.includes(widget.uuid))
25
+ .map((widget) =>
26
+ axios.patch(widget.updateApi, {
27
+ status
28
+ })
29
+ );
30
+ await Promise.all(promises);
31
+ setIsLoading(false);
32
+ // Refresh the page
33
+ window.location.reload();
34
+ };
35
+
36
+ const deletePages = async () => {
37
+ setIsLoading(true);
38
+ const promises = widgets
39
+ .filter((widget) => selectedIds.includes(widget.uuid))
40
+ .map((widget) => axios.delete(widget.deleteApi));
41
+ await Promise.all(promises);
42
+ setIsLoading(false);
43
+ // Refresh the page
44
+ window.location.reload();
45
+ };
46
+
47
+ const actions = [
48
+ {
49
+ name: 'Disable',
50
+ onAction: () => {
51
+ openAlert({
52
+ heading: `Disable ${selectedIds.length} widgets`,
53
+ content: 'Are you sure?',
54
+ primaryAction: {
55
+ title: 'Cancel',
56
+ onAction: closeAlert,
57
+ variant: 'primary'
58
+ },
59
+ secondaryAction: {
60
+ title: 'Disable',
61
+ onAction: async () => {
62
+ await updatePages(0);
63
+ },
64
+ variant: 'critical',
65
+ isLoading: false
66
+ }
67
+ });
68
+ }
69
+ },
70
+ {
71
+ name: 'Enable',
72
+ onAction: () => {
73
+ openAlert({
74
+ heading: `Enable ${selectedIds.length} widgets`,
75
+ content: 'Are you sure?',
76
+ primaryAction: {
77
+ title: 'Cancel',
78
+ onAction: closeAlert,
79
+ variant: 'primary'
80
+ },
81
+ secondaryAction: {
82
+ title: 'Enable',
83
+ onAction: async () => {
84
+ await updatePages(1);
85
+ },
86
+ variant: 'critical',
87
+ isLoading: false
88
+ }
89
+ });
90
+ }
91
+ },
92
+ {
93
+ name: 'Delete',
94
+ onAction: () => {
95
+ openAlert({
96
+ heading: `Delete ${selectedIds.length} widgets`,
97
+ content: <div>Can&apos;t be undone</div>,
98
+ primaryAction: {
99
+ title: 'Cancel',
100
+ onAction: closeAlert,
101
+ variant: 'primary'
102
+ },
103
+ secondaryAction: {
104
+ title: 'Delete',
105
+ onAction: async () => {
106
+ await deletePages();
107
+ },
108
+ variant: 'critical',
109
+ isLoading
110
+ }
111
+ });
112
+ }
113
+ }
114
+ ];
115
+
116
+ return (
117
+ <tr>
118
+ {selectedIds.length === 0 && null}
119
+ {selectedIds.length > 0 && (
120
+ <td style={{ borderTop: 0 }} colSpan="100">
121
+ <div className="inline-flex border border-divider rounded justify-items-start">
122
+ <a href="#" className="font-semibold pt-3 pb-3 pl-6 pr-6">
123
+ {selectedIds.length} selected
124
+ </a>
125
+ {actions.map((action) => (
126
+ <a
127
+ href="#"
128
+ onClick={(e) => {
129
+ e.preventDefault();
130
+ action.onAction();
131
+ }}
132
+ className="font-semibold pt-3 pb-3 pl-6 pr-6 block border-l border-divider self-center"
133
+ >
134
+ <span>{action.name}</span>
135
+ </a>
136
+ ))}
137
+ </div>
138
+ </td>
139
+ )}
140
+ </tr>
141
+ );
142
+ }
143
+
144
+ Actions.propTypes = {
145
+ selectedIds: PropTypes.arrayOf(PropTypes.string).isRequired,
146
+ widgets: PropTypes.arrayOf(
147
+ PropTypes.shape({
148
+ uuid: PropTypes.number.isRequired,
149
+ updateApi: PropTypes.string.isRequired,
150
+ deleteApi: PropTypes.string.isRequired
151
+ })
152
+ ).isRequired
153
+ };
154
+
155
+ export default function WidgetGrid({
156
+ widgets: { items, total, currentFilters = [] },
157
+ widgetTypes
158
+ }) {
159
+ const page = currentFilters.find((filter) => filter.key === 'page')
160
+ ? currentFilters.find((filter) => filter.key === 'page').value
161
+ : 1;
162
+ const limit = currentFilters.find((filter) => filter.key === 'limit')
163
+ ? currentFilters.find((filter) => filter.key === 'limit').value
164
+ : 20;
165
+
166
+ const [selectedRows, setSelectedRows] = useState([]);
167
+
168
+ return (
169
+ <Card>
170
+ <Card.Session
171
+ title={
172
+ <Form submitBtn={false}>
173
+ <Area
174
+ id="widgetGridFilter"
175
+ noOuter
176
+ coreComponents={[
177
+ {
178
+ component: {
179
+ default: () => (
180
+ <Field
181
+ type="text"
182
+ id="name"
183
+ placeholder="Search"
184
+ value={
185
+ currentFilters.find((f) => f.key === 'name')?.value
186
+ }
187
+ onKeyPress={(e) => {
188
+ // If the user press enter, we should submit the form
189
+ if (e.key === 'Enter') {
190
+ const url = new URL(document.location);
191
+ const name = document.getElementById('name')?.value;
192
+ if (name) {
193
+ url.searchParams.set('name[operation]', 'like');
194
+ url.searchParams.set('name[value]', name);
195
+ } else {
196
+ url.searchParams.delete('name[operation]');
197
+ url.searchParams.delete('name[value]');
198
+ }
199
+ window.location.href = url;
200
+ }
201
+ }}
202
+ />
203
+ )
204
+ },
205
+ sortOrder: 10
206
+ }
207
+ ]}
208
+ />
209
+ </Form>
210
+ }
211
+ actions={[
212
+ {
213
+ variant: 'interactive',
214
+ name: 'Clear filter',
215
+ onAction: () => {
216
+ // Just get the url and remove all query params
217
+ const url = new URL(document.location);
218
+ url.search = '';
219
+ window.location.href = url.href;
220
+ }
221
+ }
222
+ ]}
223
+ />
224
+ <table className="listing sticky">
225
+ <thead>
226
+ <tr>
227
+ <th className="align-bottom">
228
+ <Checkbox
229
+ onChange={(e) => {
230
+ if (e.target.checked) {
231
+ setSelectedRows(items.map((p) => p.uuid));
232
+ } else {
233
+ setSelectedRows([]);
234
+ }
235
+ }}
236
+ />
237
+ </th>
238
+ <Area
239
+ className=""
240
+ id="widgetGridHeader"
241
+ noOuter
242
+ coreComponents={[
243
+ {
244
+ component: {
245
+ default: () => (
246
+ <SortableHeader
247
+ title="Name"
248
+ name="name"
249
+ currentFilters={currentFilters}
250
+ />
251
+ )
252
+ },
253
+ sortOrder: 10
254
+ },
255
+ {
256
+ component: {
257
+ default: () => (
258
+ <SortableHeader
259
+ title="Type"
260
+ name="type"
261
+ currentFilters={currentFilters}
262
+ />
263
+ )
264
+ },
265
+ sortOrder: 15
266
+ },
267
+ {
268
+ component: {
269
+ default: () => (
270
+ <SortableHeader
271
+ title="Status"
272
+ name="status"
273
+ currentFilters={currentFilters}
274
+ />
275
+ )
276
+ },
277
+ sortOrder: 20
278
+ }
279
+ ]}
280
+ />
281
+ </tr>
282
+ </thead>
283
+ <tbody>
284
+ <Actions
285
+ widgets={items}
286
+ selectedIds={selectedRows}
287
+ setSelectedRows={setSelectedRows}
288
+ />
289
+ {items.map((w, i) => (
290
+ // eslint-disable-next-line react/no-array-index-key
291
+ <tr key={i}>
292
+ <td style={{ width: '2rem' }}>
293
+ <Checkbox
294
+ isChecked={selectedRows.includes(w.uuid)}
295
+ onChange={(e) => {
296
+ if (e.target.checked) {
297
+ setSelectedRows(selectedRows.concat([w.uuid]));
298
+ } else {
299
+ setSelectedRows(
300
+ selectedRows.filter((row) => row !== w.uuid)
301
+ );
302
+ }
303
+ }}
304
+ />
305
+ </td>
306
+ <Area
307
+ className=""
308
+ id="widgetGridRow"
309
+ row={w}
310
+ noOuter
311
+ coreComponents={[
312
+ {
313
+ component: {
314
+ default: () => <PageName url={w.editUrl} name={w.name} />
315
+ },
316
+ sortOrder: 10
317
+ },
318
+ {
319
+ component: {
320
+ default: () => (
321
+ <WidgetTypeRow code={w.type} types={widgetTypes} />
322
+ )
323
+ },
324
+ sortOrder: 15
325
+ },
326
+ {
327
+ component: {
328
+ default: ({ areaProps }) => (
329
+ <StatusRow id="status" areaProps={areaProps} />
330
+ )
331
+ },
332
+ sortOrder: 20
333
+ }
334
+ ]}
335
+ />
336
+ </tr>
337
+ ))}
338
+ </tbody>
339
+ </table>
340
+ {items.length === 0 && (
341
+ <div className="flex w-full justify-center">
342
+ There is no widget to display
343
+ </div>
344
+ )}
345
+ <Pagination total={total} limit={limit} page={page} />
346
+ </Card>
347
+ );
348
+ }
349
+
350
+ WidgetGrid.propTypes = {
351
+ widgets: PropTypes.shape({
352
+ items: PropTypes.arrayOf(
353
+ PropTypes.shape({
354
+ uuid: PropTypes.number.isRequired,
355
+ name: PropTypes.string.isRequired,
356
+ editUrl: PropTypes.string.isRequired,
357
+ updateApi: PropTypes.string.isRequired,
358
+ deleteApi: PropTypes.string.isRequired
359
+ })
360
+ ).isRequired,
361
+ total: PropTypes.number.isRequired,
362
+ currentFilters: PropTypes.arrayOf(
363
+ PropTypes.shape({
364
+ key: PropTypes.string.isRequired,
365
+ operation: PropTypes.string.isRequired,
366
+ value: PropTypes.string.isRequired
367
+ })
368
+ )
369
+ }).isRequired,
370
+ widgetTypes: PropTypes.arrayOf(
371
+ PropTypes.shape({
372
+ code: PropTypes.string.isRequired,
373
+ name: PropTypes.string.isRequired
374
+ })
375
+ ).isRequired
376
+ };
377
+
378
+ export const layout = {
379
+ areaId: 'content',
380
+ sortOrder: 20
381
+ };
382
+
383
+ export const query = `
384
+ query Query($filters: [FilterInput]) {
385
+ widgets (filters: $filters) {
386
+ items {
387
+ widgetId
388
+ uuid
389
+ name
390
+ area
391
+ route
392
+ type
393
+ status
394
+ editUrl
395
+ updateApi
396
+ deleteApi
397
+ }
398
+ total
399
+ currentFilters {
400
+ key
401
+ operation
402
+ value
403
+ }
404
+ }
405
+ widgetTypes {
406
+ code
407
+ name
408
+ }
409
+ }
410
+ `;
411
+
412
+ export const variables = `
413
+ {
414
+ filters: getContextValue('filtersFromUrl')
415
+ }`;
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import PageHeading from '@components/admin/cms/PageHeading';
3
+
4
+ export default function Heading() {
5
+ return <PageHeading backUrl={null} heading="Widgets" />;
6
+ }
7
+
8
+ export const layout = {
9
+ areaId: 'content',
10
+ sortOrder: 10
11
+ };