@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.
- package/bin/build/index.js +24 -0
- package/bin/extension/index.js +2 -2
- package/bin/lib/addDefaultMiddlewareFuncs.js +7 -2
- package/bin/lib/buildEntry.js +20 -2
- package/bin/lib/onListening.js +7 -4
- package/bin/lib/startUp.js +6 -0
- package/package.json +9 -1
- package/src/components/admin/catalog/productEdit/category/CategoryItem.jsx +2 -7
- package/src/components/admin/catalog/productEdit/category/CategoryTree.jsx +14 -7
- package/src/components/admin/catalog/productEdit/category/CategoryTree.scss +10 -0
- package/src/components/admin/catalog/productEdit/variants/CreateVariant.jsx +2 -2
- package/src/components/admin/catalog/productEdit/variants/CreateVariantGroup.jsx +1 -1
- package/src/components/admin/catalog/productEdit/variants/EditVariant.jsx +1 -1
- package/src/components/admin/catalog/productEdit/variants/New.jsx +2 -2
- package/src/components/admin/catalog/productEdit/variants/Search.jsx +1 -1
- package/src/components/admin/catalog/productEdit/variants/SearchModal.jsx +1 -1
- package/src/components/admin/catalog/productEdit/variants/VariantModal.jsx +6 -6
- package/src/components/admin/catalog/productGrid/rows/ThumbnailRow.jsx +1 -1
- package/src/components/admin/checkout/shippingSetting/Method.jsx +6 -6
- package/src/components/admin/checkout/shippingSetting/MethodForm.jsx +4 -4
- package/src/components/admin/checkout/shippingSetting/Methods.jsx +3 -3
- package/src/components/admin/checkout/shippingSetting/PriceBasedPrice.jsx +2 -2
- package/src/components/admin/checkout/shippingSetting/WeightBasedPrice.jsx +2 -2
- package/src/components/admin/checkout/shippingSetting/Zone.jsx +7 -7
- package/src/components/admin/checkout/shippingSetting/ZoneForm.jsx +1 -1
- package/src/components/admin/cms/Card.jsx +3 -3
- package/src/components/admin/cms/PageHeading.jsx +3 -3
- package/src/components/admin/cms/widget/WidgetTypes.jsx +28 -0
- package/src/components/admin/cms/widget/grid/WidgetTypeRow.jsx +29 -0
- package/src/components/admin/oms/orderEdit/items/ItemVariantOptions.jsx +1 -1
- package/src/components/admin/oms/orderEdit/items/Name.jsx +1 -1
- package/src/components/admin/oms/orderGrid/headers/OrderDateColumnHeader.jsx +1 -1
- package/src/components/admin/promotion/couponEdit/AttributeGroupSelector.jsx +3 -3
- package/src/components/admin/promotion/couponEdit/BuyXGetY.jsx +2 -2
- package/src/components/admin/promotion/couponEdit/CategorySelector.jsx +6 -6
- package/src/components/admin/promotion/couponEdit/CollectionSelector.jsx +3 -3
- package/src/components/admin/promotion/couponEdit/ProductSkuSelector.jsx +4 -4
- package/src/components/admin/promotion/couponEdit/RequireProducts.jsx +2 -2
- package/src/components/admin/promotion/couponEdit/Setting.jsx +1 -1
- package/src/components/admin/promotion/couponEdit/TargetProducts.jsx +4 -4
- package/src/components/admin/tax/taxSetting/Rate.jsx +6 -6
- package/src/components/admin/tax/taxSetting/RateForm.jsx +5 -5
- package/src/components/admin/tax/taxSetting/Rates.jsx +6 -6
- package/src/components/admin/tax/taxSetting/TaxClass.jsx +3 -3
- package/src/components/admin/tax/taxSetting/TaxClassForm.jsx +1 -1
- package/src/components/admin/widgets/BasicMenuSetting.jsx +614 -0
- package/src/components/admin/widgets/BasicMenuSetting.scss +19 -0
- package/src/components/admin/widgets/CollectionProductsSetting.jsx +203 -0
- package/src/components/admin/widgets/TextBlockSetting.jsx +70 -0
- package/src/components/common/Area.jsx +31 -8
- package/src/components/common/Badge.jsx +1 -1
- package/src/components/common/Editor.jsx +193 -0
- package/src/components/common/Notification.scss +1 -0
- package/src/components/common/SimplePagination.jsx +2 -2
- package/src/components/common/form/Form.jsx +1 -1
- package/src/components/common/form/fields/Checkbox.jsx +1 -1
- package/src/components/common/form/fields/Ckeditor.jsx +11 -11
- package/src/components/common/form/fields/Editor.jsx +326 -0
- package/src/components/common/form/fields/Editor.scss +33 -0
- package/src/components/common/form/fields/Radio.jsx +1 -1
- package/src/components/common/form/fields/editor/FileBrowser.jsx +419 -0
- package/src/components/common/form/fields/editor/FileBrowser.scss +37 -0
- package/src/components/common/form/fields/editor/GetColumnClasses.jsx +14 -0
- package/src/components/common/form/fields/editor/GetRowClasses.jsx +18 -0
- package/src/components/common/form/fields/editor/RowTemplates.jsx +154 -0
- package/src/components/common/grid/Pagination.jsx +4 -4
- package/src/components/common/grid/headers/FromTo.jsx +1 -1
- package/src/components/common/grid/headers/Sortable.jsx +1 -1
- package/src/components/common/grid/rows/ThumbnailRow.jsx +1 -1
- package/src/components/common/list/Filter.jsx +1 -1
- package/src/components/common/modal/Alert.jsx +1 -1
- package/src/components/common/modal/Modal.jsx +1 -1
- package/src/components/frontStore/catalog/categoryView/filter/AttributeFilter.jsx +2 -2
- package/src/components/frontStore/catalog/categoryView/filter/CategoryFilter.jsx +3 -2
- package/src/components/frontStore/catalog/categoryView/filter/CategoryFilter.scss +5 -0
- package/src/components/frontStore/catalog/product/list/List.jsx +4 -4
- package/src/components/frontStore/catalog/product/list/Pagination.jsx +1 -1
- package/src/components/frontStore/catalog/product/list/Sorting.jsx +2 -2
- package/src/components/frontStore/catalog/product/list/item/Name.jsx +1 -1
- package/src/components/frontStore/checkout/cart/Empty.jsx +3 -3
- package/src/components/frontStore/checkout/cart/items/ItemOptions.jsx +1 -1
- package/src/components/frontStore/checkout/cart/items/ItemVariantOptions.jsx +1 -1
- package/src/components/frontStore/checkout/cart/items/Items.jsx +20 -21
- package/src/components/frontStore/checkout/cart/items/Items.scss +47 -0
- package/src/components/frontStore/checkout/cart/items/Quantity.jsx +154 -0
- package/src/components/frontStore/checkout/checkout/StepTitle.jsx +1 -1
- package/src/components/frontStore/checkout/checkout/payment/paymentStep/StepContent.jsx +5 -5
- package/src/components/frontStore/checkout/checkout/shipment/StepContent.jsx +1 -1
- package/src/components/frontStore/checkout/checkout/summary/Cart.jsx +10 -12
- package/src/components/frontStore/checkout/checkout/summary/Items.jsx +9 -9
- package/src/components/frontStore/checkout/checkout/summary/cart/Total.jsx +6 -6
- package/src/components/frontStore/checkout/success/summary/items/ItemOptions.jsx +1 -1
- package/src/components/frontStore/checkout/success/summary/items/Items.jsx +9 -6
- package/src/components/frontStore/checkout/success/summary/order/OrderSummary.jsx +9 -13
- package/src/components/frontStore/checkout/success/summary/order/Total.jsx +5 -5
- package/src/components/frontStore/customer/address/addressForm/AddressFormLoadingSkeleton.jsx +2 -2
- package/src/components/frontStore/customer/address/addressForm/NameAndTelephone.jsx +1 -1
- package/src/components/frontStore/customer/address/addressForm/ProvinceAndPostcode.jsx +1 -1
- package/src/components/frontStore/customer/checkout/Edit.jsx +2 -2
- package/src/components/frontStore/customer/detail/Order.jsx +4 -4
- package/src/components/frontStore/stripe/checkout/CheckoutForm.jsx +2 -2
- package/src/components/frontStore/stripe/checkout/TestCards.jsx +1 -1
- package/src/components/frontStore/widgets/BasicMenu.jsx +129 -0
- package/src/{modules/catalog/pages/frontStore/homepage/FeaturedProducts.jsx → components/frontStore/widgets/CollectionProducts.jsx} +40 -32
- package/src/components/frontStore/widgets/TextBlock.jsx +46 -0
- package/src/lib/componee/getComponentsByRoute.js +15 -2
- package/src/lib/event/event-manager.js +1 -1
- package/src/lib/middleware/tests/app/modules/404page/pages/frontStore/product/route.json +2 -1
- package/src/lib/middlewares/static.js +3 -1
- package/src/lib/response/render.js +5 -6
- package/src/lib/router/Router.js +1 -1
- package/src/lib/router/loadModuleRoutes.js +3 -0
- package/src/lib/router/registerAdminRoute.js +9 -1
- package/src/lib/router/registerFrontStoreRoute.js +2 -0
- package/src/lib/router/scanForRoutes.js +1 -0
- package/src/lib/router/tests/unit/unit.validateRoute.test.js +7 -1
- package/src/lib/util/defaultPaginationFilters.js +19 -17
- package/src/lib/util/getEnabledWidgets.js +34 -0
- package/src/lib/util/merge.js +67 -14
- package/src/lib/util/tests/unit/util.merge.test.js +21 -4
- package/src/lib/util/validateConfiguration.js +83 -0
- package/src/lib/webpack/createBaseConfig.js +4 -1
- package/src/lib/webpack/dev/createConfigClient.js +10 -2
- package/src/lib/webpack/loaders/AreaLoader.js +16 -6
- package/src/lib/webpack/util/keyGenerator.js +9 -0
- package/src/lib/webpack/util/parseGraphql.js +30 -16
- package/src/lib/webpack/util/parseGraphqlByFile.js +16 -2
- package/src/modules/auth/pages/admin/adminLogin/LoginForm.jsx +54 -21
- package/src/modules/auth/pages/admin/all/AdminUser.jsx +3 -3
- package/src/modules/base/bootstrap.js +79 -0
- package/src/modules/base/graphql/types/Route/Route.admin.graphql +15 -0
- package/src/modules/base/graphql/types/Route/Route.admin.resolvers.js +10 -0
- package/src/modules/base/pages/global/response[errorHandler].js +25 -1
- package/src/modules/catalog/bootstrap.js +125 -5
- package/src/modules/catalog/graphql/types/Category/Category.graphql +4 -3
- package/src/modules/catalog/graphql/types/Category/Category.resolvers.js +34 -0
- package/src/modules/catalog/graphql/types/Collection/Collection.graphql +2 -2
- package/src/modules/catalog/graphql/types/Collection/Collection.resolvers.js +34 -0
- package/src/modules/catalog/graphql/types/Product/Attribute/ProductAttribute.resolvers.js +1 -0
- package/src/modules/catalog/graphql/types/Product/Product.graphql +1 -1
- package/src/modules/catalog/graphql/types/Product/Product.resolvers.js +34 -0
- package/src/modules/catalog/graphql/types/Widget/CollectionProductsWidget/CollectionProductsWidget.graphql +11 -0
- package/src/modules/catalog/graphql/types/Widget/CollectionProductsWidget/CollectionProductsWidget.resolvers.js +8 -0
- package/src/modules/catalog/migration/Version-1.0.0.js +1 -0
- package/src/modules/catalog/migration/Version-1.0.7.js +10 -0
- package/src/modules/catalog/pages/admin/attributeEdit+attributeNew/FormContent.jsx +4 -4
- package/src/modules/catalog/pages/admin/attributeEdit+attributeNew/General.jsx +5 -5
- package/src/modules/catalog/pages/admin/attributeGrid/Grid.jsx +2 -2
- package/src/modules/catalog/pages/admin/categoryEdit/Products.jsx +4 -4
- package/src/modules/catalog/pages/admin/categoryEdit+categoryNew/FormContent.jsx +4 -4
- package/src/modules/catalog/pages/admin/categoryEdit+categoryNew/General.jsx +16 -18
- package/src/modules/catalog/pages/admin/categoryEdit+categoryNew/Image.jsx +1 -2
- package/src/modules/catalog/pages/admin/categoryEdit+categoryNew/Status.jsx +16 -1
- package/src/modules/catalog/pages/admin/categoryGrid/Grid.jsx +3 -3
- package/src/modules/catalog/pages/admin/collectionEdit/Products.jsx +4 -4
- package/src/modules/catalog/pages/admin/collectionEdit+collectionNew/FormContent.jsx +2 -2
- package/src/modules/catalog/pages/admin/collectionEdit+collectionNew/General.jsx +2 -2
- package/src/modules/catalog/pages/admin/collectionGrid/Grid.jsx +3 -3
- package/src/modules/catalog/pages/admin/productEdit/Collection.jsx +7 -7
- package/src/modules/catalog/pages/admin/productEdit+productNew/Attributes.jsx +8 -3
- package/src/modules/catalog/pages/admin/productEdit+productNew/CustomOptions.jsss +4 -4
- package/src/modules/catalog/pages/admin/productEdit+productNew/FormContent.jsx +4 -4
- package/src/modules/catalog/pages/admin/productEdit+productNew/General.jsx +15 -17
- package/src/modules/catalog/pages/admin/productGrid/Grid.jsx +3 -3
- package/src/modules/catalog/pages/frontStore/catalogSearch/General.jsx +2 -2
- package/src/modules/catalog/pages/frontStore/catalogSearch/Products.jsx +1 -1
- package/src/modules/catalog/pages/frontStore/catalogSearch/route.json +2 -1
- package/src/modules/catalog/pages/frontStore/categoryView/CategoryView.jsx +19 -2
- package/src/modules/catalog/pages/frontStore/categoryView/Filter.scss +1 -0
- package/src/modules/catalog/pages/frontStore/categoryView/General.jsx +6 -8
- package/src/modules/catalog/pages/frontStore/categoryView/General.scss +0 -2
- package/src/modules/catalog/pages/frontStore/categoryView/Pagination.jsx +6 -0
- package/src/modules/catalog/pages/frontStore/categoryView/Products.jsx +8 -1
- package/src/modules/catalog/pages/frontStore/categoryView/route.json +2 -1
- package/src/modules/catalog/pages/frontStore/productView/Description.jsx +15 -4
- package/src/modules/catalog/pages/frontStore/productView/Form.jsx +4 -4
- package/src/modules/catalog/pages/frontStore/productView/Form.scss +1 -0
- package/src/modules/catalog/pages/frontStore/productView/GeneralInfo.jsx +1 -1
- package/src/modules/catalog/pages/frontStore/productView/Images.jsx +1 -1
- package/src/modules/catalog/pages/frontStore/productView/Layout.jsx +1 -1
- package/src/modules/catalog/pages/frontStore/productView/Options.jsx +7 -3
- package/src/modules/catalog/pages/frontStore/productView/Variants.jsx +6 -6
- package/src/modules/catalog/pages/frontStore/productView/route.json +2 -1
- package/src/modules/catalog/services/AttributeCollection.js +10 -10
- package/src/modules/catalog/services/AttributeGroupCollection.js +10 -10
- package/src/modules/catalog/services/CategoryCollection.js +10 -10
- package/src/modules/catalog/services/CollectionCollection.js +10 -10
- package/src/modules/catalog/services/registerCartItemProductUrlField.js +35 -0
- package/src/modules/catalog/services/registerCartItemVariantOptionsField.js +51 -0
- package/src/modules/catalog/services/registerDefaultCategoryCollectionFilters.js +16 -0
- package/src/modules/checkout/api/addShippingNote/[context]bodyParser[auth].js +5 -0
- package/src/modules/checkout/api/addShippingNote/payloadSchema.json +15 -0
- package/src/modules/checkout/api/addShippingNote/route.json +5 -0
- package/src/modules/checkout/api/addShippingNote/saveShippingNote.js +50 -0
- package/src/modules/checkout/api/createCart/createNewCart.js +28 -3
- package/src/modules/checkout/api/updateCartItemQty/[bodyParser]updateQty.js +49 -0
- package/src/modules/checkout/api/updateCartItemQty/[context]bodyParser[auth].js +5 -0
- package/src/modules/checkout/api/updateCartItemQty/payloadSchema.json +21 -0
- package/src/modules/checkout/api/updateCartItemQty/route.json +5 -0
- package/src/modules/checkout/api/updateMineCartItemQty/[context]bodyParser[auth].js +5 -0
- package/src/modules/checkout/api/updateMineCartItemQty/[detectCurrentCart]updateQty.js +51 -0
- package/src/modules/checkout/api/updateMineCartItemQty/[getCurrentCustomer]detectCurrentCart.js +32 -0
- package/src/modules/checkout/api/updateMineCartItemQty/payloadSchema.json +21 -0
- package/src/modules/checkout/api/updateMineCartItemQty/route.json +5 -0
- package/src/modules/checkout/bootstrap.js +27 -0
- package/src/modules/checkout/graphql/types/Cart/Cart.graphql +22 -3
- package/src/modules/checkout/graphql/types/Cart/Cart.resolvers.js +18 -2
- package/src/modules/checkout/graphql/types/CheckoutSetting/CheckoutSetting.graphql +3 -0
- package/src/modules/checkout/graphql/types/CheckoutSetting/CheckoutSetting.resolvers.js +7 -0
- package/src/modules/checkout/migration/Version-1.0.0.js +14 -0
- package/src/modules/checkout/migration/Version-1.0.6.js +201 -0
- package/src/modules/checkout/pages/admin/shippingSetting/ShippingSetting.jsx +2 -2
- package/src/modules/checkout/pages/frontStore/all/[context]detectCurrentCart[auth].js +5 -0
- package/src/modules/checkout/pages/frontStore/cart/ShoppingCart.jsx +20 -12
- package/src/modules/checkout/pages/frontStore/cart/Summary.jsx +34 -23
- package/src/modules/checkout/pages/frontStore/cart/route.json +2 -1
- package/src/modules/checkout/pages/frontStore/checkout/Checkout.jsx +5 -5
- package/src/modules/checkout/pages/frontStore/checkout/Checkout.scss +4 -0
- package/src/modules/checkout/pages/frontStore/checkout/ShippingMethods.jsx +2 -2
- package/src/modules/checkout/pages/frontStore/checkout/ShippingNote.jsx +105 -0
- package/src/modules/checkout/pages/frontStore/checkout/Summary.jsx +14 -14
- package/src/modules/checkout/pages/frontStore/checkout/SummaryMobile.jsx +12 -15
- package/src/modules/checkout/pages/frontStore/checkout/route.json +2 -1
- package/src/modules/checkout/pages/frontStore/checkoutSuccess/CheckoutSuccess.jsx +1 -1
- package/src/modules/checkout/pages/frontStore/checkoutSuccess/CheckoutSuccess.scss +4 -0
- package/src/modules/checkout/pages/frontStore/checkoutSuccess/CustomerInfo.jsx +30 -32
- package/src/modules/checkout/pages/frontStore/checkoutSuccess/ShippingNote.jsx +47 -0
- package/src/modules/checkout/pages/frontStore/checkoutSuccess/Summary.jsx +12 -15
- package/src/modules/checkout/pages/frontStore/checkoutSuccess/route.json +2 -1
- package/src/modules/checkout/services/cart/Cart.js +31 -27
- package/src/modules/checkout/services/cart/registerCartBaseFields.js +133 -41
- package/src/modules/checkout/services/cart/registerCartItemBaseFields.js +300 -374
- package/src/modules/checkout/services/toPrice.js +1 -1
- package/src/modules/checkout/tests/basicSetup.js +85 -0
- package/src/modules/checkout/tests/coupons.js +82 -0
- package/src/modules/checkout/tests/products.js +67 -0
- package/src/modules/checkout/tests/taxRates.js +3 -0
- package/src/modules/checkout/tests/unit/discountAmount.test.js +60 -0
- package/src/modules/checkout/tests/unit/grandTotal.test.js +83 -0
- package/src/modules/checkout/tests/unit/lineTotal.test.js +92 -0
- package/src/modules/checkout/tests/unit/lineTotalWithDiscount.test.js +103 -0
- package/src/modules/checkout/tests/unit/productPrice.test.js +69 -0
- package/src/modules/checkout/tests/unit/subTotal.test.js +85 -0
- package/src/modules/checkout/tests/unit/subTotalWithDiscount.test.js +117 -0
- package/src/modules/checkout/tests/unit/taxAmount.test.js +68 -0
- package/src/modules/checkout/tests/unit/taxAmountRounding.test.js +277 -0
- package/src/modules/cms/api/createWidget/[context]bodyParser[auth].js +5 -0
- package/src/modules/cms/api/createWidget/createWidget[finish].js +17 -0
- package/src/modules/cms/api/createWidget/finish[apiResponse].js +27 -0
- package/src/modules/cms/api/createWidget/payloadSchema.json +18 -0
- package/src/modules/cms/api/createWidget/route.json +5 -0
- package/src/modules/cms/api/deleteWidget/deleteWidget.js +27 -0
- package/src/modules/cms/api/deleteWidget/route.json +5 -0
- package/src/modules/cms/api/updateWidget/[context]bodyParser[auth].js +5 -0
- package/src/modules/cms/api/updateWidget/finish[apiResponse].js +27 -0
- package/src/modules/cms/api/updateWidget/payloadSchema.json +18 -0
- package/src/modules/cms/api/updateWidget/route.json +5 -0
- package/src/modules/cms/api/updateWidget/updateWidget[finish].js +17 -0
- package/src/modules/cms/bootstrap.js +223 -3
- package/src/modules/cms/graphql/types/CmsPage/CmsPage.graphql +1 -2
- package/src/modules/cms/graphql/types/CmsPage/CmsPage.resolvers.js +35 -1
- package/src/modules/cms/graphql/types/Widget/Widget.graphql +91 -0
- package/src/modules/cms/graphql/types/Widget/Widget.resolvers.js +142 -0
- package/src/modules/cms/migration/Version-1.1.0.js +22 -0
- package/src/modules/cms/migration/Version-1.1.1.js +103 -0
- package/src/modules/cms/pages/admin/adminNotFound/NotFound.jsx +4 -4
- package/src/modules/cms/pages/admin/all/CmsMenuGroup.jsx +12 -4
- package/src/modules/cms/pages/admin/all/Notification.scss +1 -1
- package/src/modules/cms/pages/admin/all/search/NoResult.jsx +2 -2
- package/src/modules/cms/pages/admin/all/search/Results.jsx +3 -3
- package/src/modules/cms/pages/admin/cmsPageEdit+cmsPageNew/FormContent.jsx +7 -9
- package/src/modules/cms/pages/admin/cmsPageEdit+cmsPageNew/General.jsx +3 -3
- package/src/modules/cms/pages/admin/cmsPageEdit+cmsPageNew/Seo.jsx +1 -1
- package/src/modules/cms/pages/admin/cmsPageEdit+cmsPageNew/Status.jsx +40 -0
- package/src/modules/cms/pages/admin/cmsPageGrid/Grid.jsx +3 -4
- package/src/modules/cms/pages/admin/dashboard/Layout.jsx +3 -3
- package/src/modules/cms/pages/admin/widgetEdit/WidgetForm.jsx +52 -0
- package/src/modules/cms/pages/admin/widgetEdit/index.js +36 -0
- package/src/modules/cms/pages/admin/widgetEdit/route.json +4 -0
- package/src/modules/cms/pages/admin/widgetEdit+widgetNew/FormContent.jsx +69 -0
- package/src/modules/cms/pages/admin/widgetEdit+widgetNew/FormContent.scss +7 -0
- package/src/modules/cms/pages/admin/widgetEdit+widgetNew/General.jsx +185 -0
- package/src/modules/cms/pages/admin/widgetEdit+widgetNew/PageHeading.jsx +37 -0
- package/src/modules/cms/pages/admin/widgetEdit+widgetNew/Setting.jsx +55 -0
- package/src/modules/cms/pages/admin/widgetGrid/Grid.jsx +415 -0
- package/src/modules/cms/pages/admin/widgetGrid/Heading.jsx +11 -0
- package/src/modules/cms/pages/admin/widgetGrid/NewWidgetButton.jsx +52 -0
- package/src/modules/cms/pages/admin/widgetGrid/index.js +15 -0
- package/src/modules/cms/pages/admin/widgetGrid/route.json +4 -0
- package/src/modules/cms/pages/admin/widgetNew/WidgetNewForm.jsx +60 -0
- package/src/modules/cms/pages/admin/widgetNew/index.js +11 -0
- package/src/modules/cms/pages/admin/widgetNew/route.json +4 -0
- package/src/modules/cms/pages/admin/widgetNew/typeValidate.js +21 -0
- package/src/modules/cms/pages/frontStore/all/Breadcrumb.jsx +1 -1
- package/src/modules/cms/pages/frontStore/all/Footer.jsx +2 -2
- package/src/modules/cms/pages/frontStore/all/Layout.jsx +3 -3
- package/src/modules/cms/pages/frontStore/all/Layout.scss +13 -0
- package/src/modules/cms/pages/frontStore/all/Logo.jsx +2 -2
- package/src/modules/cms/pages/frontStore/all/Logo.scss +2 -4
- package/src/modules/cms/pages/frontStore/all/Notification.scss +1 -1
- package/src/modules/cms/pages/frontStore/cmsPageView/Layout.jsx +2 -2
- package/src/modules/cms/pages/frontStore/cmsPageView/View.jsx +5 -3
- package/src/modules/cms/pages/frontStore/cmsPageView/index.js +6 -12
- package/src/modules/cms/pages/frontStore/cmsPageView/route.json +2 -1
- package/src/modules/cms/pages/frontStore/homepage/route.json +2 -1
- package/src/modules/cms/pages/frontStore/notFound/NotFound.jsx +4 -4
- package/src/modules/cms/pages/frontStore/notFound/route.json +2 -1
- package/src/modules/cms/pages/frontStore/staticAsset/[context]staticAssets[auth].js +1 -1
- package/src/modules/cms/services/CMSPageCollection.js +10 -10
- package/src/modules/cms/services/WidgetCollection.js +62 -0
- package/src/modules/cms/services/getWidgetsBaseQuery.js +7 -0
- package/src/modules/cms/services/page/createPage.js +1 -2
- package/src/modules/cms/services/page/pageDataSchema.json +0 -4
- package/src/modules/cms/services/registerDefaultWidgetCollectionFilters.js +62 -0
- package/src/modules/cms/services/tailwind.admin.config.js +22 -107
- package/src/modules/cms/services/tailwind.frontStore.config.js +23 -108
- package/src/modules/cms/services/widget/createWidget.js +73 -0
- package/src/modules/cms/services/widget/deleteWidget.js +49 -0
- package/src/modules/cms/services/widget/loadWidgetInstances.js +54 -0
- package/src/modules/cms/services/widget/updateWidget.js +86 -0
- package/src/modules/cms/services/widget/widgetDataSchema.json +29 -0
- package/src/modules/cod/pages/admin/paymentSetting/CODSetting.jsx +2 -2
- package/src/modules/cod/pages/frontStore/checkout/CashOnDelivery.jsx +1 -1
- package/src/modules/customer/bootstrap.js +21 -4
- package/src/modules/customer/pages/admin/customerEdit/CustomerEditForm.jsx +3 -3
- package/src/modules/customer/pages/admin/customerEdit+customerNew/OrderHistory.jsx +1 -1
- package/src/modules/customer/pages/admin/customerGrid/Grid.jsx +3 -3
- package/src/modules/customer/pages/frontStore/account/AccountDetails.jsx +3 -3
- package/src/modules/customer/pages/frontStore/account/Layout.jsx +3 -3
- package/src/modules/customer/pages/frontStore/account/OrderHistory.jsx +1 -1
- package/src/modules/customer/pages/frontStore/account/route.json +2 -1
- package/src/modules/customer/pages/frontStore/login/LoginForm.jsx +2 -2
- package/src/modules/customer/pages/frontStore/login/route.json +2 -1
- package/src/modules/customer/pages/frontStore/register/RegisterForm.jsx +2 -2
- package/src/modules/customer/pages/frontStore/register/route.json +2 -1
- package/src/modules/customer/pages/frontStore/resetPasswordPage/ResetPasswordForm.jsx +2 -2
- package/src/modules/customer/pages/frontStore/resetPasswordPage/route.json +2 -1
- package/src/modules/customer/pages/frontStore/updatePasswordPage/UpdatePasswordForm.jsx +3 -3
- package/src/modules/customer/pages/frontStore/updatePasswordPage/route.json +2 -1
- package/src/modules/customer/services/CustomerCollection.js +10 -10
- package/src/modules/customer/services/CustomerGroupCollection.js +10 -10
- package/src/modules/graphql/pages/global/[bodyParser]buildQuery[graphql].js +241 -6
- package/src/modules/graphql/pages/global/[buildQuery]graphql[notification].js +12 -8
- package/src/modules/oms/bootstrap.js +87 -3
- package/src/modules/oms/graphql/types/Order/Order.graphql +11 -2
- package/src/modules/oms/graphql/types/Order/Order.resolvers.js +7 -1
- package/src/modules/oms/pages/admin/dashboard/Bestsellers.jsx +2 -2
- package/src/modules/oms/pages/admin/dashboard/Lifetimesales.jsx +5 -5
- package/src/modules/oms/pages/admin/orderEdit/AddTrackingButton.jsx +1 -1
- package/src/modules/oms/pages/admin/orderEdit/Items.jsx +7 -7
- package/src/modules/oms/pages/admin/orderEdit/Layout.jsx +3 -3
- package/src/modules/oms/pages/admin/orderEdit/Payment.jsx +6 -6
- package/src/modules/oms/pages/admin/orderEdit/ShipButton.jsx +1 -1
- package/src/modules/oms/pages/admin/orderGrid/Grid.jsx +3 -3
- package/src/modules/oms/services/OrderCollection.js +10 -10
- package/src/modules/paypal/api/paypalCreateOrder/[bodyParser]createOrder.js +55 -24
- package/src/modules/paypal/pages/admin/paymentSetting/PaypalSetting.jsx +6 -6
- package/src/modules/paypal/pages/frontStore/checkout/Paypal.jsx +3 -4
- package/src/modules/promotion/bootstrap.js +19 -101
- package/src/modules/promotion/pages/admin/couponEdit+couponNew/DiscountType.jsx +1 -1
- package/src/modules/promotion/pages/admin/couponEdit+couponNew/FormContent.jsx +5 -5
- package/src/modules/promotion/pages/admin/couponGrid/Grid.jsx +3 -3
- package/src/modules/promotion/pages/frontStore/cart/Coupon.jsx +2 -2
- package/src/modules/promotion/services/CouponCollection.js +10 -10
- package/src/modules/promotion/services/couponValidator.js +4 -7
- package/src/modules/promotion/services/discountCalculator.js +2 -7
- package/src/modules/promotion/services/registerCartItemPromotionFields.js +80 -0
- package/src/modules/promotion/services/registerCartPromotionFields.js +128 -0
- package/src/modules/promotion/services/registerDefaultCalculators.js +48 -20
- package/src/modules/promotion/services/registerDefaultValidators.js +16 -4
- package/src/modules/setting/pages/admin/paymentSetting/PaymentSetting.jsx +2 -2
- package/src/modules/setting/pages/admin/storeSetting/StoreSetting.jsx +98 -35
- package/src/modules/stripe/pages/admin/paymentSetting/StripePayment.jsx +5 -5
- package/src/modules/stripe/pages/frontStore/checkout/Stripe.jsx +1 -1
- package/src/modules/tax/bootstrap.js +40 -5
- package/src/modules/tax/graphql/types/Product/Price/ProductPrice.resolvers.js +6 -39
- package/src/modules/tax/graphql/types/TaxSetting/TaxSetting.graphql +1 -2
- package/src/modules/tax/graphql/types/TaxSetting/TaxSetting.resolvers.js +1 -8
- package/src/modules/tax/pages/admin/taxSetting/TaxSetting.jsx +4 -4
- package/src/modules/tax/services/TaxClassCollection.js +10 -10
- package/src/modules/tax/services/calculateTaxAmount.js +12 -9
- package/src/modules/tax/services/registerCartItemTaxPercentField.js +76 -0
- package/src/modules/auth/services/adminSessionMiddleware.js +0 -0
- package/src/modules/catalog/pages/frontStore/homepage/FeaturedCategories.jsx +0 -58
- package/src/modules/cms/pages/admin/cmsPageEdit+cmsPageNew/StatusAndLayout.jsx +0 -61
- package/src/modules/cms/pages/frontStore/all/Menu.jsx +0 -46
- package/src/modules/cms/pages/frontStore/all/Menu.scss +0 -7
- package/src/modules/cms/pages/frontStore/all/MobileMenu.jsx +0 -73
- package/src/modules/cms/pages/frontStore/all/MobileMenu.scss +0 -35
- package/src/modules/cms/pages/frontStore/homepage/MainBanner.jsx +0 -31
- package/src/modules/cms/pages/frontStore/homepage/MainBanner.scss +0 -48
|
@@ -20,6 +20,7 @@ exports.loadModuleRoutes = function loadModuleRoutes(modulePath) {
|
|
|
20
20
|
route.id,
|
|
21
21
|
route.method,
|
|
22
22
|
route.path,
|
|
23
|
+
route.name,
|
|
23
24
|
route.isApi,
|
|
24
25
|
route.folder
|
|
25
26
|
);
|
|
@@ -37,6 +38,7 @@ exports.loadModuleRoutes = function loadModuleRoutes(modulePath) {
|
|
|
37
38
|
route.id,
|
|
38
39
|
route.method,
|
|
39
40
|
route.path,
|
|
41
|
+
route.name,
|
|
40
42
|
route.isApi,
|
|
41
43
|
route.folder
|
|
42
44
|
);
|
|
@@ -51,6 +53,7 @@ exports.loadModuleRoutes = function loadModuleRoutes(modulePath) {
|
|
|
51
53
|
route.id,
|
|
52
54
|
route.method,
|
|
53
55
|
route.path,
|
|
56
|
+
route.name,
|
|
54
57
|
route.isApi,
|
|
55
58
|
route.folder,
|
|
56
59
|
route.payloadSchema,
|
|
@@ -11,7 +11,14 @@ module.exports = exports = {};
|
|
|
11
11
|
* @param {string} path The path of route
|
|
12
12
|
*
|
|
13
13
|
*/
|
|
14
|
-
exports.registerAdminRoute = (
|
|
14
|
+
exports.registerAdminRoute = (
|
|
15
|
+
id,
|
|
16
|
+
method,
|
|
17
|
+
path,
|
|
18
|
+
name,
|
|
19
|
+
isApi = false,
|
|
20
|
+
folder = ''
|
|
21
|
+
) => {
|
|
15
22
|
// const route = validateRoute(id, method, path);
|
|
16
23
|
const route = {
|
|
17
24
|
id: String(id),
|
|
@@ -22,5 +29,6 @@ exports.registerAdminRoute = (id, method, path, isApi = false, folder = '') => {
|
|
|
22
29
|
route.isApi = isApi;
|
|
23
30
|
route.path = route.path === '/' ? '/admin' : `/admin${path}`;
|
|
24
31
|
route.folder = folder;
|
|
32
|
+
route.name = name;
|
|
25
33
|
addRoute(route);
|
|
26
34
|
};
|
|
@@ -15,6 +15,7 @@ exports.registerFrontStoreRoute = (
|
|
|
15
15
|
id,
|
|
16
16
|
method,
|
|
17
17
|
path,
|
|
18
|
+
name,
|
|
18
19
|
isApi = false,
|
|
19
20
|
folder = '',
|
|
20
21
|
payloadSchema = null,
|
|
@@ -31,5 +32,6 @@ exports.registerFrontStoreRoute = (
|
|
|
31
32
|
route.isAdmin = false;
|
|
32
33
|
route.isApi = isApi;
|
|
33
34
|
route.folder = folder;
|
|
35
|
+
route.name = name;
|
|
34
36
|
addRoute(route);
|
|
35
37
|
};
|
|
@@ -8,7 +8,13 @@ describe('Test validateRoute', () => {
|
|
|
8
8
|
beforeAll(() => {
|
|
9
9
|
const routes = scanForRoutes(path.resolve(__dirname, 'b'), true, false);
|
|
10
10
|
routes.forEach((route) => {
|
|
11
|
-
registerAdminRoute(
|
|
11
|
+
registerAdminRoute(
|
|
12
|
+
route.id,
|
|
13
|
+
route.method,
|
|
14
|
+
route.path,
|
|
15
|
+
route.name,
|
|
16
|
+
route.isApi
|
|
17
|
+
);
|
|
12
18
|
});
|
|
13
19
|
});
|
|
14
20
|
|
|
@@ -54,7 +54,7 @@ const defaultPaginationFilters = [
|
|
|
54
54
|
} else {
|
|
55
55
|
query.limit(0, parseInt(value, 10));
|
|
56
56
|
currentFilters.push({
|
|
57
|
-
key: '
|
|
57
|
+
key: 'limit',
|
|
58
58
|
operation: 'eq',
|
|
59
59
|
value
|
|
60
60
|
});
|
|
@@ -77,22 +77,24 @@ const defaultPaginationFilters = [
|
|
|
77
77
|
key: '*',
|
|
78
78
|
operation: ['eq'],
|
|
79
79
|
callback: (query, operation, value, currentFilters) => {
|
|
80
|
-
const page = currentFilters.find((f) => f.key === 'page');
|
|
81
|
-
const limit = currentFilters.find((f) => f.key === 'limit')
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
80
|
+
const page = currentFilters.find((f) => f.key === 'page') || { value: 1 };
|
|
81
|
+
const limit = currentFilters.find((f) => f.key === 'limit') || {
|
|
82
|
+
value: CONSTANTS.ADMIN_COLLECTION_SIZE
|
|
83
|
+
};
|
|
84
|
+
currentFilters.push({
|
|
85
|
+
key: 'page',
|
|
86
|
+
operation: 'eq',
|
|
87
|
+
value: page.value
|
|
88
|
+
});
|
|
89
|
+
currentFilters.push({
|
|
90
|
+
key: 'limit',
|
|
91
|
+
operation: 'eq',
|
|
92
|
+
value: limit.value
|
|
93
|
+
});
|
|
94
|
+
query.limit(
|
|
95
|
+
(parseInt(page.value, 10) - 1) * parseInt(limit.value, 10),
|
|
96
|
+
parseInt(limit.value, 10)
|
|
97
|
+
);
|
|
96
98
|
}
|
|
97
99
|
}
|
|
98
100
|
];
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
const isResolvable = require('is-resolvable');
|
|
2
|
+
const { getConfig } = require('./getConfig');
|
|
3
|
+
const { generateComponentKey } = require('../webpack/util/keyGenerator');
|
|
4
|
+
|
|
5
|
+
module.exports = exports = {};
|
|
6
|
+
|
|
7
|
+
exports.getEnabledWidgets = function getEnabledWidgets() {
|
|
8
|
+
const configuredWidgets = getConfig('widgets', {});
|
|
9
|
+
const widgets = [];
|
|
10
|
+
Object.keys(configuredWidgets).forEach((widget) => {
|
|
11
|
+
// Make sure the enabled = true and the component path is exist
|
|
12
|
+
const { setting_component } = configuredWidgets[widget];
|
|
13
|
+
const { component } = configuredWidgets[widget];
|
|
14
|
+
// Make sure path is existed and it is a jsx file
|
|
15
|
+
if (!isResolvable(setting_component)) {
|
|
16
|
+
throw new Error(
|
|
17
|
+
`Widget ${widget} is not configured correctly. The setting_component is not existed or not a jsx file`
|
|
18
|
+
);
|
|
19
|
+
} else if (!isResolvable(component)) {
|
|
20
|
+
throw new Error(
|
|
21
|
+
`Widget ${widget} is not configured correctly. The component is not existed or not a jsx file`
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
if (configuredWidgets[widget].enabled === true) {
|
|
25
|
+
widgets.push({
|
|
26
|
+
...configuredWidgets[widget],
|
|
27
|
+
type: widget,
|
|
28
|
+
settingComponentKey: generateComponentKey(setting_component),
|
|
29
|
+
componentKey: generateComponentKey(component)
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
return widgets;
|
|
34
|
+
};
|
package/src/lib/util/merge.js
CHANGED
|
@@ -1,28 +1,81 @@
|
|
|
1
1
|
/* eslint-disable no-param-reassign */
|
|
2
2
|
/**
|
|
3
|
-
* This function take 2 objects and merge them
|
|
3
|
+
* This function take 2 objects: target and source, and merge them together recursively
|
|
4
|
+
* This function will not merge built-in objects like Date, RegExp, Map, Set
|
|
5
|
+
* This function will overwrite the value from the first object by the value from the second object if they have the same key and the value is primitive
|
|
6
|
+
* This function will merge array property from 2 objects
|
|
4
7
|
*
|
|
5
|
-
* @param {object}
|
|
6
|
-
* @param {object}
|
|
8
|
+
* @param {object} target The target object
|
|
9
|
+
* @param {object} source The source object
|
|
7
10
|
*
|
|
8
|
-
* @return {object}
|
|
11
|
+
* @return {object} The new target object
|
|
9
12
|
*/
|
|
10
|
-
function merge(
|
|
11
|
-
|
|
12
|
-
|
|
13
|
+
function merge(target, source, maxDepth = 20, currentDepth = 0) {
|
|
14
|
+
function isBuiltInObject(obj) {
|
|
15
|
+
return (
|
|
16
|
+
obj instanceof Date ||
|
|
17
|
+
obj instanceof RegExp ||
|
|
18
|
+
obj instanceof Map ||
|
|
19
|
+
obj instanceof Set
|
|
20
|
+
);
|
|
13
21
|
}
|
|
14
|
-
|
|
15
|
-
|
|
22
|
+
|
|
23
|
+
if (isBuiltInObject(target) || isBuiltInObject(source)) {
|
|
24
|
+
throw new Error(
|
|
25
|
+
'deepMerge cannot merge built-in objects like Date or RegExp'
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (
|
|
30
|
+
typeof target !== 'object' ||
|
|
31
|
+
target === null ||
|
|
32
|
+
typeof source !== 'object' ||
|
|
33
|
+
source === null
|
|
34
|
+
) {
|
|
35
|
+
throw new Error('merge function can only merge plain objects');
|
|
16
36
|
}
|
|
17
37
|
|
|
18
|
-
|
|
38
|
+
if (currentDepth > maxDepth) {
|
|
39
|
+
throw new Error(`Maximum depth of ${maxDepth} exceeded`);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function getAllKeys(obj) {
|
|
43
|
+
let keys = [];
|
|
44
|
+
Object.getOwnPropertyNames(obj).forEach((key) => {
|
|
45
|
+
if (!keys.includes(key)) {
|
|
46
|
+
keys.push(key);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
keys = keys.concat(Object.getOwnPropertySymbols(obj));
|
|
50
|
+
return keys;
|
|
51
|
+
}
|
|
19
52
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
53
|
+
getAllKeys(source).forEach((key) => {
|
|
54
|
+
if (key in target) {
|
|
55
|
+
if (Array.isArray(target[key]) && Array.isArray(source[key])) {
|
|
56
|
+
target[key] = Array.from(new Set([...target[key], ...source[key]]));
|
|
57
|
+
} else if (
|
|
58
|
+
typeof target[key] === 'object' &&
|
|
59
|
+
typeof source[key] === 'object'
|
|
60
|
+
) {
|
|
61
|
+
if (isBuiltInObject(target[key]) || isBuiltInObject(source[key])) {
|
|
62
|
+
target[key] = source[key];
|
|
63
|
+
} else {
|
|
64
|
+
merge(target[key], source[key], maxDepth, currentDepth + 1);
|
|
65
|
+
}
|
|
66
|
+
} else {
|
|
67
|
+
target[key] = source[key];
|
|
68
|
+
}
|
|
69
|
+
} else {
|
|
70
|
+
Object.defineProperty(
|
|
71
|
+
target,
|
|
72
|
+
key,
|
|
73
|
+
Object.getOwnPropertyDescriptor(source, key)
|
|
74
|
+
);
|
|
75
|
+
}
|
|
23
76
|
});
|
|
24
77
|
|
|
25
|
-
return
|
|
78
|
+
return target;
|
|
26
79
|
}
|
|
27
80
|
|
|
28
81
|
// eslint-disable-next-line no-multi-assign
|
|
@@ -20,19 +20,36 @@ describe('Test until merge', () => {
|
|
|
20
20
|
expect(merge(a, b)).toEqual({ a: 1, b: 1, c: 1 });
|
|
21
21
|
});
|
|
22
22
|
|
|
23
|
-
it('It should not overwrite the value from the first object if it is existed
|
|
23
|
+
it('It should not overwrite the value from the first object if it is existed', () => {
|
|
24
24
|
const a = { a: 1 };
|
|
25
25
|
const b = { a: 2, c: 1 };
|
|
26
26
|
const c = merge(a, b);
|
|
27
|
-
expect(c.a).toEqual(
|
|
27
|
+
expect(c.a).toEqual(2);
|
|
28
28
|
});
|
|
29
29
|
|
|
30
|
-
it('It should overwrite the value from the first object
|
|
30
|
+
it('It should overwrite the value from the first object', () => {
|
|
31
31
|
const a = { a: '', c: null, d: [] };
|
|
32
32
|
const b = { a: 2, c: 1, d: 1 };
|
|
33
33
|
const c = merge(a, b);
|
|
34
34
|
expect(c.a).toEqual(2);
|
|
35
35
|
expect(c.c).toEqual(1);
|
|
36
|
-
expect(c.d).toEqual(
|
|
36
|
+
expect(c.d).toEqual(1);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
it('It should merge array property from 2 objects', () => {
|
|
40
|
+
const a = { a: [1, 2] };
|
|
41
|
+
const b = { a: [2, 3], c: 1 };
|
|
42
|
+
const c = merge(a, b);
|
|
43
|
+
expect(c.a).toEqual([1, 2, 3]);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it('It should thrown an exception if the maximum depth is exceeded', () => {
|
|
47
|
+
const a = {
|
|
48
|
+
a: { b: { c: { d: { e: { f: { g: { h: { i: { j: { k: 1 } } } } } } } } } }
|
|
49
|
+
};
|
|
50
|
+
const b = {
|
|
51
|
+
a: { b: { c: { d: { e: { f: { g: { h: { i: { j: { k: 2 } } } } } } } } } }
|
|
52
|
+
};
|
|
53
|
+
expect(() => merge(a, b, 5)).toThrow(Error);
|
|
37
54
|
});
|
|
38
55
|
});
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
const { getAjv } = require('../../modules/base/services/getAjv');
|
|
2
|
+
const { getValueSync } = require('./registry');
|
|
3
|
+
|
|
4
|
+
module.exports.validateConfiguration = function validateConfiguration(config) {
|
|
5
|
+
const ajv = getAjv();
|
|
6
|
+
const configSchema = getValueSync(
|
|
7
|
+
'configuratonSchema',
|
|
8
|
+
{ type: 'object' },
|
|
9
|
+
null,
|
|
10
|
+
(schema) => {
|
|
11
|
+
ajv.validateSchema(schema);
|
|
12
|
+
if (ajv.errors) {
|
|
13
|
+
throw new Error(
|
|
14
|
+
`Your configuration schema is not valid: ${ajv.errors[0].instancePath}`
|
|
15
|
+
);
|
|
16
|
+
} else {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
// Validate by using Ajv
|
|
23
|
+
const validate = ajv.compile(configSchema);
|
|
24
|
+
const reservedKeys = [
|
|
25
|
+
'get',
|
|
26
|
+
'has',
|
|
27
|
+
'util',
|
|
28
|
+
'getConfigSources',
|
|
29
|
+
'makeHidden',
|
|
30
|
+
'makeImmutable',
|
|
31
|
+
'setModuleDefaults',
|
|
32
|
+
'watch',
|
|
33
|
+
'_attachProtoDeep',
|
|
34
|
+
'_cloneDeep',
|
|
35
|
+
'_diffDeep',
|
|
36
|
+
'_equalsDeep',
|
|
37
|
+
'_extendDeep',
|
|
38
|
+
'_get',
|
|
39
|
+
'_getCmdLineArg',
|
|
40
|
+
'_initParam',
|
|
41
|
+
'_isObject',
|
|
42
|
+
'_loadFileConfigs',
|
|
43
|
+
'_parseFile',
|
|
44
|
+
'_stripComments',
|
|
45
|
+
'_stripYamlComments'
|
|
46
|
+
];
|
|
47
|
+
const configuration = Object.keys(config).reduce((acc, key) => {
|
|
48
|
+
if (configSchema.properties[key] || !reservedKeys.includes(key)) {
|
|
49
|
+
acc[key] = config[key];
|
|
50
|
+
}
|
|
51
|
+
return acc;
|
|
52
|
+
}, {});
|
|
53
|
+
const valid = validate(configuration);
|
|
54
|
+
if (!valid) {
|
|
55
|
+
throw new Error(errorFormatter(validate.errors));
|
|
56
|
+
} else {
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
function errorFormatter(errors) {
|
|
62
|
+
const messages = ['Invalid configuration:'];
|
|
63
|
+
errors.forEach((error) => {
|
|
64
|
+
if (error.keyword === 'errorMessage') {
|
|
65
|
+
messages.push(`${error.message}. ${error.instancePath}`);
|
|
66
|
+
} else if (error.keyword === 'additionalProperties') {
|
|
67
|
+
messages.push(
|
|
68
|
+
`${error.instancePath}/${error.params.additionalProperty} is not allowed.`
|
|
69
|
+
);
|
|
70
|
+
} else if (error.keyword === 'enum') {
|
|
71
|
+
messages.push(
|
|
72
|
+
`${
|
|
73
|
+
error.instancePath
|
|
74
|
+
} must be one of the following values: ${error.params.allowedValues.join(
|
|
75
|
+
', '
|
|
76
|
+
)}`
|
|
77
|
+
);
|
|
78
|
+
} else {
|
|
79
|
+
messages.push(`${error.instancePath} ${error.message}`);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
return messages.join('\n');
|
|
83
|
+
}
|
|
@@ -5,6 +5,7 @@ const { createBaseConfig } = require('../createBaseConfig');
|
|
|
5
5
|
const { getComponentsByRoute } = require('../../componee/getComponentsByRoute');
|
|
6
6
|
const { CONSTANTS } = require('../../helpers');
|
|
7
7
|
const { GraphqlPlugin } = require('../plugins/GraphqlPlugin');
|
|
8
|
+
const { getEnabledWidgets } = require('../../util/getEnabledWidgets');
|
|
8
9
|
|
|
9
10
|
module.exports.createConfigClient = function createConfigClient(route) {
|
|
10
11
|
const config = createBaseConfig(false);
|
|
@@ -21,7 +22,7 @@ module.exports.createConfigClient = function createConfigClient(route) {
|
|
|
21
22
|
),
|
|
22
23
|
options: {
|
|
23
24
|
getComponents: () => getComponentsByRoute(route),
|
|
24
|
-
|
|
25
|
+
route
|
|
25
26
|
}
|
|
26
27
|
}
|
|
27
28
|
]
|
|
@@ -81,6 +82,7 @@ module.exports.createConfigClient = function createConfigClient(route) {
|
|
|
81
82
|
|
|
82
83
|
config.entry = () => {
|
|
83
84
|
const entry = {};
|
|
85
|
+
|
|
84
86
|
entry[route.id] = [
|
|
85
87
|
...getComponentsByRoute(route),
|
|
86
88
|
path.resolve(
|
|
@@ -89,7 +91,13 @@ module.exports.createConfigClient = function createConfigClient(route) {
|
|
|
89
91
|
),
|
|
90
92
|
`webpack-hot-middleware/client?path=/eHot/${route.id}&reload=true&overlay=true`
|
|
91
93
|
];
|
|
92
|
-
|
|
94
|
+
// Widgets
|
|
95
|
+
const widgets = getEnabledWidgets();
|
|
96
|
+
if (!route.isAdmin) {
|
|
97
|
+
Object.keys(widgets).forEach((widget) => {
|
|
98
|
+
entry[route.id].push(widgets[widget].component);
|
|
99
|
+
});
|
|
100
|
+
}
|
|
93
101
|
return entry;
|
|
94
102
|
};
|
|
95
103
|
config.watchOptions = {
|
|
@@ -3,13 +3,15 @@ const { inspect } = require('util');
|
|
|
3
3
|
const JSON5 = require('json5');
|
|
4
4
|
const { CONSTANTS } = require('../../helpers');
|
|
5
5
|
const { error } = require('../../log/logger');
|
|
6
|
+
const { getEnabledWidgets } = require('../../util/getEnabledWidgets');
|
|
7
|
+
const { generateComponentKey } = require('../util/keyGenerator');
|
|
6
8
|
|
|
7
9
|
/* eslint-disable no-multi-assign */
|
|
8
10
|
/* eslint-disable global-require */
|
|
9
11
|
module.exports = exports = function AreaLoader(c) {
|
|
10
12
|
this.cacheable(false);
|
|
11
13
|
const components = this.getOptions().getComponents();
|
|
12
|
-
const {
|
|
14
|
+
const { route } = this.getOptions();
|
|
13
15
|
const areas = {};
|
|
14
16
|
components.forEach((module) => {
|
|
15
17
|
this.addDependency(module);
|
|
@@ -28,9 +30,7 @@ module.exports = exports = function AreaLoader(c) {
|
|
|
28
30
|
.replace(/(['"])?([a-zA-Z0-9_]+)(['"])?:/g, '"$2": ');
|
|
29
31
|
try {
|
|
30
32
|
const layout = JSON5.parse(check);
|
|
31
|
-
const id =
|
|
32
|
-
'base64'
|
|
33
|
-
);
|
|
33
|
+
const id = generateComponentKey(module.replace(CONSTANTS.ROOTPATH, ''));
|
|
34
34
|
areas[layout.areaId] = areas[layout.areaId] || {};
|
|
35
35
|
areas[layout.areaId][id] = {
|
|
36
36
|
id,
|
|
@@ -43,11 +43,21 @@ module.exports = exports = function AreaLoader(c) {
|
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
});
|
|
46
|
-
|
|
46
|
+
const widgets = getEnabledWidgets();
|
|
47
|
+
areas['*'] = areas['*'] || {};
|
|
48
|
+
widgets.forEach((widget) => {
|
|
49
|
+
areas['*'][widget.type] = {
|
|
50
|
+
id: widget.type,
|
|
51
|
+
sortOrder: widget.sortOrder || 0,
|
|
52
|
+
component: route.isAdmin
|
|
53
|
+
? `---require('${widget.setting_component}')---`
|
|
54
|
+
: `---require('${widget.component}')---`
|
|
55
|
+
};
|
|
56
|
+
});
|
|
47
57
|
const content = `Area.defaultProps.components = ${inspect(areas, { depth: 5 })
|
|
48
58
|
.replace(/"---/g, '')
|
|
49
59
|
.replace(/---"/g, '')} `;
|
|
50
60
|
return c
|
|
51
61
|
.replace('/** render */', content)
|
|
52
|
-
.replace('/eHot', `/eHot/${
|
|
62
|
+
.replace('/eHot', `/eHot/${route.id}`);
|
|
53
63
|
};
|
|
@@ -1,29 +1,39 @@
|
|
|
1
1
|
const fs = require('fs');
|
|
2
2
|
const uniqid = require('uniqid');
|
|
3
3
|
const JSON5 = require('json5');
|
|
4
|
+
const isResolvable = require('is-resolvable');
|
|
4
5
|
const { CONSTANTS } = require('../../helpers');
|
|
5
6
|
const { parseGraphqlByFile } = require('./parseGraphqlByFile');
|
|
7
|
+
const { generateComponentKey } = require('./keyGenerator');
|
|
6
8
|
|
|
7
9
|
module.exports.parseGraphql = function parseGraphql(modules) {
|
|
8
10
|
let inUsedFragments = [];
|
|
9
11
|
const propsMap = {};
|
|
10
|
-
let
|
|
12
|
+
let queries = {};
|
|
11
13
|
let fragmentStr = '';
|
|
12
|
-
const
|
|
13
|
-
values: {},
|
|
14
|
-
defs: []
|
|
15
|
-
};
|
|
16
|
-
|
|
14
|
+
const variableList = {};
|
|
17
15
|
modules.forEach((module) => {
|
|
18
|
-
if (!fs.existsSync(module)) {
|
|
16
|
+
if (!fs.existsSync(module) && !isResolvable(module)) {
|
|
19
17
|
return;
|
|
20
18
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
19
|
+
const variables = {
|
|
20
|
+
values: {},
|
|
21
|
+
defs: []
|
|
22
|
+
};
|
|
23
|
+
let modulePath;
|
|
24
|
+
let moduleKey;
|
|
25
|
+
// If the module is resolvable, get the apsolute path
|
|
26
|
+
if (!fs.existsSync(module)) {
|
|
27
|
+
modulePath = require.resolve(module);
|
|
28
|
+
moduleKey = generateComponentKey(module);
|
|
29
|
+
} else {
|
|
30
|
+
modulePath = module;
|
|
31
|
+
moduleKey = generateComponentKey(
|
|
32
|
+
modulePath.replace(CONSTANTS.ROOTPATH, '')
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
const moduleGraphqlData = parseGraphqlByFile(modulePath);
|
|
36
|
+
queries[moduleKey] = moduleGraphqlData.query.source;
|
|
27
37
|
fragmentStr += `\n${moduleGraphqlData.fragments.source}`;
|
|
28
38
|
Object.assign(
|
|
29
39
|
variables.values,
|
|
@@ -32,6 +42,7 @@ module.exports.parseGraphql = function parseGraphql(modules) {
|
|
|
32
42
|
variables.defs = variables.defs.concat(
|
|
33
43
|
moduleGraphqlData.variables.definitions
|
|
34
44
|
);
|
|
45
|
+
variableList[moduleKey] = variables;
|
|
35
46
|
propsMap[moduleKey] = moduleGraphqlData.query.props;
|
|
36
47
|
inUsedFragments = inUsedFragments.concat(moduleGraphqlData.fragments.pairs);
|
|
37
48
|
});
|
|
@@ -46,7 +57,10 @@ module.exports.parseGraphql = function parseGraphql(modules) {
|
|
|
46
57
|
if (f) {
|
|
47
58
|
// Replace fragment alias with the one already processed
|
|
48
59
|
const regex = new RegExp(`\\.\\.\\.([ ]+)?${fragment.alias}`, 'g');
|
|
49
|
-
|
|
60
|
+
queries = Object.keys(queries).reduce((acc, key) => {
|
|
61
|
+
acc[key] = queries[key].replace(regex, `...${f.alias}`);
|
|
62
|
+
return acc;
|
|
63
|
+
}, {});
|
|
50
64
|
fragmentStr = fragmentStr.replace(regex, `...${f.alias}`);
|
|
51
65
|
} else {
|
|
52
66
|
const regex = new RegExp(
|
|
@@ -80,9 +94,9 @@ module.exports.parseGraphql = function parseGraphql(modules) {
|
|
|
80
94
|
});
|
|
81
95
|
|
|
82
96
|
return {
|
|
83
|
-
|
|
97
|
+
queries,
|
|
84
98
|
fragments: fragmentStr,
|
|
85
|
-
variables:
|
|
99
|
+
variables: variableList,
|
|
86
100
|
propsMap
|
|
87
101
|
};
|
|
88
102
|
};
|
|
@@ -33,6 +33,14 @@ module.exports.parseGraphqlByFile = function parseGraphqlByFile(module) {
|
|
|
33
33
|
}
|
|
34
34
|
);
|
|
35
35
|
|
|
36
|
+
queryBody = queryBody.replace(
|
|
37
|
+
/getWidgetSetting\(([^)]+)\)/g,
|
|
38
|
+
(match, p1) => {
|
|
39
|
+
const base64 = Buffer.from(p1).toString('base64');
|
|
40
|
+
return `"getWidgetSetting_${base64}"`;
|
|
41
|
+
}
|
|
42
|
+
);
|
|
43
|
+
|
|
36
44
|
const queryAst = parse(queryBody);
|
|
37
45
|
const map = queryAst.definitions[0].selectionSet.selections.map(
|
|
38
46
|
(selection) => {
|
|
@@ -74,7 +82,7 @@ module.exports.parseGraphqlByFile = function parseGraphqlByFile(module) {
|
|
|
74
82
|
variables.push({
|
|
75
83
|
origin: name,
|
|
76
84
|
type,
|
|
77
|
-
alias: `
|
|
85
|
+
alias: `variable_${uniqid()}`
|
|
78
86
|
});
|
|
79
87
|
});
|
|
80
88
|
}
|
|
@@ -179,7 +187,13 @@ module.exports.parseGraphqlByFile = function parseGraphqlByFile(module) {
|
|
|
179
187
|
return `"getContextValue_${base64}"`;
|
|
180
188
|
}
|
|
181
189
|
);
|
|
182
|
-
|
|
190
|
+
variablesBody = variablesBody.replace(
|
|
191
|
+
/getWidgetSetting\(([^)]*)\)/g,
|
|
192
|
+
(match, p1) => {
|
|
193
|
+
const base64 = Buffer.from(p1).toString('base64');
|
|
194
|
+
return `"getWidgetSetting_${base64}"`;
|
|
195
|
+
}
|
|
196
|
+
);
|
|
183
197
|
try {
|
|
184
198
|
// Json parse the variables body
|
|
185
199
|
const variablesJson = JSON5.parse(variablesBody);
|