@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
|
@@ -39,7 +39,7 @@ export default function Attributes({ product, groups: { items } }) {
|
|
|
39
39
|
value={currentGroup.groupId}
|
|
40
40
|
name="group_id"
|
|
41
41
|
/>
|
|
42
|
-
<div className="border rounded border-divider p-
|
|
42
|
+
<div className="border rounded border-divider p-4">
|
|
43
43
|
<span>{currentGroup.groupName}</span>
|
|
44
44
|
</div>
|
|
45
45
|
<div className="italic text-textSubdued">
|
|
@@ -254,7 +254,7 @@ export const layout = {
|
|
|
254
254
|
};
|
|
255
255
|
|
|
256
256
|
export const query = `
|
|
257
|
-
query Query {
|
|
257
|
+
query Query ($filters: [FilterInput!]) {
|
|
258
258
|
product(id: getContextValue("productId", null)) {
|
|
259
259
|
groupId
|
|
260
260
|
variantGroupId
|
|
@@ -264,7 +264,7 @@ export const query = `
|
|
|
264
264
|
optionText
|
|
265
265
|
}
|
|
266
266
|
},
|
|
267
|
-
groups: attributeGroups {
|
|
267
|
+
groups: attributeGroups(filters: $filters) {
|
|
268
268
|
items {
|
|
269
269
|
groupId: attributeGroupId
|
|
270
270
|
groupName
|
|
@@ -285,3 +285,8 @@ export const query = `
|
|
|
285
285
|
}
|
|
286
286
|
}
|
|
287
287
|
`;
|
|
288
|
+
|
|
289
|
+
export const variables = `
|
|
290
|
+
{
|
|
291
|
+
filters: [{ key: "limit", operation: 'eq', value: 1000 }]
|
|
292
|
+
}`;
|
|
@@ -68,7 +68,7 @@ export default function CustomOption() {
|
|
|
68
68
|
} = option;
|
|
69
69
|
return (
|
|
70
70
|
<Card.Session key={option_id} title={option_name || 'New option'} actions={[{ variant: 'critical', name: 'Remove option', onAction: () => { removeOption(option_id); } }]}>
|
|
71
|
-
<div className="grid grid-cols-3 gap-
|
|
71
|
+
<div className="grid grid-cols-3 gap-4 mb-4">
|
|
72
72
|
<div>
|
|
73
73
|
<Field
|
|
74
74
|
name={`options[${option_id}][option_name]`}
|
|
@@ -99,7 +99,7 @@ export default function CustomOption() {
|
|
|
99
99
|
/>
|
|
100
100
|
</div>
|
|
101
101
|
</div>
|
|
102
|
-
<div className="mb-
|
|
102
|
+
<div className="mb-4">
|
|
103
103
|
<Field
|
|
104
104
|
name={`options[${option_id}][is_required]`}
|
|
105
105
|
isChecked={parseInt(is_required, 10) === 1}
|
|
@@ -109,7 +109,7 @@ export default function CustomOption() {
|
|
|
109
109
|
/>
|
|
110
110
|
</div>
|
|
111
111
|
<Card.Session title="Option values" actions={[{ variant: 'interactive', name: 'Add value', onAction: () => { addCustomOptionValue(option_id); } }]}>
|
|
112
|
-
<div className="grid grid-cols-4 gap-
|
|
112
|
+
<div className="grid grid-cols-4 gap-4 mt-2">
|
|
113
113
|
<div>Value</div>
|
|
114
114
|
<div>Extra Price</div>
|
|
115
115
|
<div>Sort Order</div>
|
|
@@ -121,7 +121,7 @@ export default function CustomOption() {
|
|
|
121
121
|
value_id, option_id, extra_price, sort_order, value
|
|
122
122
|
} = val;
|
|
123
123
|
return (
|
|
124
|
-
<div key={val.value_id} className="grid-cols-4 grid gap-
|
|
124
|
+
<div key={val.value_id} className="grid-cols-4 grid gap-4 mb-2">
|
|
125
125
|
<div>
|
|
126
126
|
<Field
|
|
127
127
|
name={`options[${option_id}][values][${value_id}][value]`}
|
|
@@ -9,15 +9,15 @@ export default function FormContent({ gridUrl }) {
|
|
|
9
9
|
const { state } = useFormContext();
|
|
10
10
|
return (
|
|
11
11
|
<>
|
|
12
|
-
<div className="grid grid-cols-3 gap-x-
|
|
13
|
-
<div className="col-span-2 grid grid-cols-1 gap-
|
|
12
|
+
<div className="grid grid-cols-3 gap-x-8 grid-flow-row ">
|
|
13
|
+
<div className="col-span-2 grid grid-cols-1 gap-8 auto-rows-max">
|
|
14
14
|
<Area id="leftSide" noOuter />
|
|
15
15
|
</div>
|
|
16
|
-
<div className="col-span-1 grid grid-cols-1 gap-
|
|
16
|
+
<div className="col-span-1 grid grid-cols-1 gap-8 auto-rows-max">
|
|
17
17
|
<Area id="rightSide" noOuter />
|
|
18
18
|
</div>
|
|
19
19
|
</div>
|
|
20
|
-
<div className="form-submit-button flex border-t border-divider mt-
|
|
20
|
+
<div className="form-submit-button flex border-t border-divider mt-6 pt-6 justify-between">
|
|
21
21
|
<Button
|
|
22
22
|
title="Cancel"
|
|
23
23
|
variant="critical"
|
|
@@ -3,12 +3,12 @@ import React from 'react';
|
|
|
3
3
|
import Area from '@components/common/Area';
|
|
4
4
|
import { Field } from '@components/common/form/Field';
|
|
5
5
|
import { Card } from '@components/admin/cms/Card';
|
|
6
|
-
import CkeditorField from '@components/common/form/fields/Ckeditor';
|
|
7
6
|
import CategoryTree from '@components/admin/catalog/productEdit/category/CategoryTree';
|
|
7
|
+
import Editor from '@components/common/form/fields/Editor';
|
|
8
8
|
|
|
9
9
|
function SKUPriceWeight({ sku, price, weight, setting }) {
|
|
10
10
|
return (
|
|
11
|
-
<div className="grid grid-cols-3 gap-
|
|
11
|
+
<div className="grid grid-cols-3 gap-4 mt-6">
|
|
12
12
|
<div>
|
|
13
13
|
<Field
|
|
14
14
|
id="sku"
|
|
@@ -71,17 +71,17 @@ function Category({ product }) {
|
|
|
71
71
|
);
|
|
72
72
|
|
|
73
73
|
return (
|
|
74
|
-
<div className="mt-
|
|
75
|
-
<div className="mb-
|
|
74
|
+
<div className="mt-6 relative">
|
|
75
|
+
<div className="mb-4">Category</div>
|
|
76
76
|
{category && (
|
|
77
|
-
<div className="border rounded border-[#c9cccf] mb-
|
|
77
|
+
<div className="border rounded border-[#c9cccf] mb-4 p-4">
|
|
78
78
|
{category.path.map((item, index) => (
|
|
79
79
|
<span key={item.name} className="text-gray-500">
|
|
80
80
|
{item.name}
|
|
81
81
|
{index < category.path.length - 1 && ' > '}
|
|
82
82
|
</span>
|
|
83
83
|
))}
|
|
84
|
-
<span className="text-interactive pl-
|
|
84
|
+
<span className="text-interactive pl-8">
|
|
85
85
|
<a
|
|
86
86
|
href="#"
|
|
87
87
|
onClick={(e) => {
|
|
@@ -97,7 +97,7 @@ function Category({ product }) {
|
|
|
97
97
|
e.preventDefault();
|
|
98
98
|
setCategory(null);
|
|
99
99
|
}}
|
|
100
|
-
className="text-critical ml-
|
|
100
|
+
className="text-critical ml-8"
|
|
101
101
|
>
|
|
102
102
|
Unassign
|
|
103
103
|
</a>
|
|
@@ -117,15 +117,13 @@ function Category({ product }) {
|
|
|
117
117
|
</a>
|
|
118
118
|
)}
|
|
119
119
|
{selecting && (
|
|
120
|
-
<
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
/>
|
|
128
|
-
</div>
|
|
120
|
+
<CategoryTree
|
|
121
|
+
selectedCategory={category}
|
|
122
|
+
setSelectedCategory={(cat) => {
|
|
123
|
+
setCategory(cat);
|
|
124
|
+
setSelecting(false);
|
|
125
|
+
}}
|
|
126
|
+
/>
|
|
129
127
|
)}
|
|
130
128
|
{category && (
|
|
131
129
|
<input type="hidden" name="category_id" value={category?.categoryId} />
|
|
@@ -229,7 +227,7 @@ export default function General({
|
|
|
229
227
|
id: 'tax_class'
|
|
230
228
|
},
|
|
231
229
|
{
|
|
232
|
-
component: { default:
|
|
230
|
+
component: { default: Editor },
|
|
233
231
|
props: {
|
|
234
232
|
id: 'description',
|
|
235
233
|
name: 'description',
|
|
@@ -124,7 +124,7 @@ function Actions({ products = [], selectedIds = [] }) {
|
|
|
124
124
|
{selectedIds.length > 0 && (
|
|
125
125
|
<td style={{ borderTop: 0 }} colSpan="100">
|
|
126
126
|
<div className="inline-flex border border-divider rounded justify-items-start">
|
|
127
|
-
<a href="#" className="font-semibold pt-
|
|
127
|
+
<a href="#" className="font-semibold pt-3 pb-3 pl-6 pr-6">
|
|
128
128
|
{selectedIds.length} selected
|
|
129
129
|
</a>
|
|
130
130
|
{actions.map((action) => (
|
|
@@ -134,7 +134,7 @@ function Actions({ products = [], selectedIds = [] }) {
|
|
|
134
134
|
e.preventDefault();
|
|
135
135
|
action.onAction();
|
|
136
136
|
}}
|
|
137
|
-
className="font-semibold pt-
|
|
137
|
+
className="font-semibold pt-3 pb-3 pl-6 pr-6 block border-l border-divider self-center"
|
|
138
138
|
>
|
|
139
139
|
<span>{action.name}</span>
|
|
140
140
|
</a>
|
|
@@ -174,7 +174,7 @@ export default function ProductGrid({
|
|
|
174
174
|
<Card.Session
|
|
175
175
|
title={
|
|
176
176
|
<Form submitBtn={false}>
|
|
177
|
-
<div className="flex gap-
|
|
177
|
+
<div className="flex gap-8 justify-center items-center">
|
|
178
178
|
<Area
|
|
179
179
|
id="productGridFilter"
|
|
180
180
|
noOuter
|
|
@@ -15,9 +15,9 @@ export default function SearchInfo() {
|
|
|
15
15
|
|
|
16
16
|
return (
|
|
17
17
|
<div className="page-width">
|
|
18
|
-
<div className="mb-
|
|
18
|
+
<div className="mb-4 md:mb-8">
|
|
19
19
|
<div className="text-left ">
|
|
20
|
-
<h1 className="search-name mt-
|
|
20
|
+
<h1 className="search-name mt-10">
|
|
21
21
|
{_('Search results for "${keyword}"', { keyword: key })}
|
|
22
22
|
</h1>
|
|
23
23
|
</div>
|
|
@@ -7,7 +7,7 @@ export default function Products({ products: { items } }) {
|
|
|
7
7
|
return (
|
|
8
8
|
<div>
|
|
9
9
|
<ProductList products={items} countPerRow={4} />
|
|
10
|
-
<span className="product-count italic block mt-
|
|
10
|
+
<span className="product-count italic block mt-8">
|
|
11
11
|
{_('${count} products', { count: items.length })}
|
|
12
12
|
</span>
|
|
13
13
|
</div>
|
|
@@ -1,16 +1,33 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import PropTypes from 'prop-types';
|
|
2
3
|
import Area from '@components/common/Area';
|
|
3
4
|
|
|
4
|
-
export default function CategoryView() {
|
|
5
|
+
export default function CategoryView({ category }) {
|
|
6
|
+
if (!category.showProducts) {
|
|
7
|
+
return null;
|
|
8
|
+
}
|
|
5
9
|
return (
|
|
6
|
-
<div className="page-width grid grid-cols-1 md:grid-cols-4 gap-
|
|
10
|
+
<div className="page-width grid grid-cols-1 md:grid-cols-4 gap-8">
|
|
7
11
|
<Area id="leftColumn" className="md:col-span-1" />
|
|
8
12
|
<Area id="rightColumn" className="md:col-span-3" />
|
|
9
13
|
</div>
|
|
10
14
|
);
|
|
11
15
|
}
|
|
12
16
|
|
|
17
|
+
CategoryView.propTypes = {
|
|
18
|
+
category: PropTypes.shape({
|
|
19
|
+
showProducts: PropTypes.number
|
|
20
|
+
}).isRequired
|
|
21
|
+
};
|
|
22
|
+
|
|
13
23
|
export const layout = {
|
|
14
24
|
areaId: 'content',
|
|
15
25
|
sortOrder: 10
|
|
16
26
|
};
|
|
27
|
+
|
|
28
|
+
export const query = `
|
|
29
|
+
query Query {
|
|
30
|
+
category(id: getContextValue('categoryId')) {
|
|
31
|
+
showProducts
|
|
32
|
+
}
|
|
33
|
+
}`;
|
|
@@ -2,23 +2,21 @@
|
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
4
|
import './General.scss';
|
|
5
|
-
import
|
|
5
|
+
import Editor from '@components/common/Editor';
|
|
6
6
|
|
|
7
7
|
export default function CategoryInfo({
|
|
8
8
|
category: { name, description, image }
|
|
9
9
|
}) {
|
|
10
10
|
return (
|
|
11
11
|
<div className="page-width">
|
|
12
|
-
<div className="mb-
|
|
12
|
+
<div className="mb-4 md:mb-8 category__general">
|
|
13
13
|
{image && (
|
|
14
14
|
<img src={image.url} alt={name} className="category__image" />
|
|
15
15
|
)}
|
|
16
|
-
<div className="category__info">
|
|
17
|
-
<
|
|
18
|
-
|
|
19
|
-
<
|
|
20
|
-
<CKEditor content={description} />
|
|
21
|
-
</div>
|
|
16
|
+
<div className="category__info prose prose-base max-w-none">
|
|
17
|
+
<h1 className="category__name">{name}</h1>
|
|
18
|
+
<div className="category__description">
|
|
19
|
+
<Editor rows={description} />
|
|
22
20
|
</div>
|
|
23
21
|
</div>
|
|
24
22
|
</div>
|
|
@@ -4,9 +4,13 @@ import { Pagination } from '@components/frontStore/catalog/product/list/Paginati
|
|
|
4
4
|
|
|
5
5
|
export default function PaginationWrapper({
|
|
6
6
|
products: {
|
|
7
|
+
showProducts,
|
|
7
8
|
products: { total, currentFilters }
|
|
8
9
|
}
|
|
9
10
|
}) {
|
|
11
|
+
if (!showProducts) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
10
14
|
const page = currentFilters.find((filter) => filter.key === 'page');
|
|
11
15
|
const limit = currentFilters.find((filter) => filter.key === 'limit');
|
|
12
16
|
|
|
@@ -21,6 +25,7 @@ export default function PaginationWrapper({
|
|
|
21
25
|
|
|
22
26
|
PaginationWrapper.propTypes = {
|
|
23
27
|
products: PropTypes.shape({
|
|
28
|
+
showProducts: PropTypes.number.isRequired,
|
|
24
29
|
products: PropTypes.shape({
|
|
25
30
|
total: PropTypes.number.isRequired,
|
|
26
31
|
currentFilters: PropTypes.arrayOf(
|
|
@@ -42,6 +47,7 @@ export const layout = {
|
|
|
42
47
|
export const query = `
|
|
43
48
|
query Query($filters: [FilterInput]) {
|
|
44
49
|
products: category(id: getContextValue('categoryId')) {
|
|
50
|
+
showProducts
|
|
45
51
|
products(filters: $filters) {
|
|
46
52
|
total
|
|
47
53
|
currentFilters {
|
|
@@ -5,13 +5,17 @@ import { _ } from '@evershop/evershop/src/lib/locale/translate';
|
|
|
5
5
|
|
|
6
6
|
export default function Products({
|
|
7
7
|
products: {
|
|
8
|
+
showProducts,
|
|
8
9
|
products: { items }
|
|
9
10
|
}
|
|
10
11
|
}) {
|
|
12
|
+
if (!showProducts) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
11
15
|
return (
|
|
12
16
|
<div>
|
|
13
17
|
<ProductList products={items} countPerRow={3} />
|
|
14
|
-
<span className="product-count italic block mt-
|
|
18
|
+
<span className="product-count italic block mt-8">
|
|
15
19
|
{_('${count} products', { count: items.length })}
|
|
16
20
|
</span>
|
|
17
21
|
</div>
|
|
@@ -20,6 +24,7 @@ export default function Products({
|
|
|
20
24
|
|
|
21
25
|
Products.propTypes = {
|
|
22
26
|
products: PropTypes.shape({
|
|
27
|
+
showProducts: PropTypes.number,
|
|
23
28
|
products: PropTypes.shape({
|
|
24
29
|
items: PropTypes.arrayOf(
|
|
25
30
|
PropTypes.shape({
|
|
@@ -48,6 +53,7 @@ Products.propTypes = {
|
|
|
48
53
|
|
|
49
54
|
Products.defaultProps = {
|
|
50
55
|
products: {
|
|
56
|
+
showProducts: 1,
|
|
51
57
|
products: {
|
|
52
58
|
items: []
|
|
53
59
|
}
|
|
@@ -62,6 +68,7 @@ export const layout = {
|
|
|
62
68
|
export const query = `
|
|
63
69
|
query Query($filters: [FilterInput]) {
|
|
64
70
|
products: category(id: getContextValue('categoryId')) {
|
|
71
|
+
showProducts
|
|
65
72
|
products(filters: $filters) {
|
|
66
73
|
items {
|
|
67
74
|
...Product
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/* eslint-disable react/no-danger */
|
|
2
|
-
import
|
|
2
|
+
import Editor from '@components/common/Editor';
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
4
|
import React from 'react';
|
|
5
5
|
|
|
6
6
|
export default function Description({ product: { description } }) {
|
|
7
7
|
return (
|
|
8
|
-
<div className="mt-
|
|
8
|
+
<div className="mt-8 md:mt-12">
|
|
9
9
|
<div className="product-description">
|
|
10
|
-
<
|
|
10
|
+
<Editor rows={description} />
|
|
11
11
|
</div>
|
|
12
12
|
</div>
|
|
13
13
|
);
|
|
@@ -15,7 +15,18 @@ export default function Description({ product: { description } }) {
|
|
|
15
15
|
|
|
16
16
|
Description.propTypes = {
|
|
17
17
|
product: PropTypes.shape({
|
|
18
|
-
description: PropTypes.
|
|
18
|
+
description: PropTypes.arrayOf(
|
|
19
|
+
PropTypes.shape({
|
|
20
|
+
size: PropTypes.number.isRequired,
|
|
21
|
+
columns: PropTypes.arrayOf(
|
|
22
|
+
PropTypes.shape({
|
|
23
|
+
size: PropTypes.number.isRequired,
|
|
24
|
+
// eslint-disable-next-line react/forbid-prop-types
|
|
25
|
+
data: PropTypes.object
|
|
26
|
+
})
|
|
27
|
+
).isRequired
|
|
28
|
+
})
|
|
29
|
+
).isRequired
|
|
19
30
|
}).isRequired
|
|
20
31
|
};
|
|
21
32
|
|
|
@@ -86,7 +86,7 @@ ToastMessage.propTypes = {
|
|
|
86
86
|
|
|
87
87
|
function AddToCart({ stockAvaibility, loading = false, error }) {
|
|
88
88
|
return (
|
|
89
|
-
<div className="add-to-cart mt-
|
|
89
|
+
<div className="add-to-cart mt-8">
|
|
90
90
|
<div style={{ width: '8rem' }}>
|
|
91
91
|
<Field
|
|
92
92
|
type="text"
|
|
@@ -98,8 +98,8 @@ function AddToCart({ stockAvaibility, loading = false, error }) {
|
|
|
98
98
|
formId="productForm"
|
|
99
99
|
/>
|
|
100
100
|
</div>
|
|
101
|
-
{error && <div className="text-critical mt-
|
|
102
|
-
<div className="mt-
|
|
101
|
+
{error && <div className="text-critical mt-4">{error}</div>}
|
|
102
|
+
<div className="mt-4">
|
|
103
103
|
{stockAvaibility === true && (
|
|
104
104
|
<Button
|
|
105
105
|
title={_('ADD TO CART')}
|
|
@@ -211,7 +211,7 @@ ProductForm.propTypes = {
|
|
|
211
211
|
|
|
212
212
|
export const layout = {
|
|
213
213
|
areaId: 'productPageMiddleRight',
|
|
214
|
-
sortOrder:
|
|
214
|
+
sortOrder: 45
|
|
215
215
|
};
|
|
216
216
|
|
|
217
217
|
export const query = `
|
|
@@ -51,7 +51,7 @@ export default function Images({ product: { uuid, image, gallery = [] } }) {
|
|
|
51
51
|
return (
|
|
52
52
|
<div className="product-single-media">
|
|
53
53
|
<Current image={current} />
|
|
54
|
-
<ul className="more-view-thumbnail product-gallery mt-
|
|
54
|
+
<ul className="more-view-thumbnail product-gallery mt-8 grid grid-cols-4 gap-4">
|
|
55
55
|
{thumbs.map((i, j) => (
|
|
56
56
|
<li key={j} className="flex justify-center items-center">
|
|
57
57
|
<a
|
|
@@ -6,7 +6,7 @@ export default function ProductPageLayout() {
|
|
|
6
6
|
<div className="product-detail">
|
|
7
7
|
<Area id="productPageTop" className="product-page-top" />
|
|
8
8
|
<div className="product-page-middle page-width">
|
|
9
|
-
<div className="grid grid-cols-1 gap-
|
|
9
|
+
<div className="grid grid-cols-1 gap-12 md:grid-cols-2">
|
|
10
10
|
<Area id="productPageMiddleLeft" />
|
|
11
11
|
<Area id="productPageMiddleRight" />
|
|
12
12
|
</div>
|
|
@@ -10,8 +10,8 @@ export default function Options({ options = [] }) {
|
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
return (
|
|
13
|
-
<div className="product-single-options mt-
|
|
14
|
-
<div className="product-single-options-title mb-
|
|
13
|
+
<div className="product-single-options mt-16 mb-16">
|
|
14
|
+
<div className="product-single-options-title mb-8">
|
|
15
15
|
<strong>Options</strong>
|
|
16
16
|
</div>
|
|
17
17
|
{options.map((o, i) => {
|
|
@@ -77,7 +77,11 @@ Options.propTypes = {
|
|
|
77
77
|
optionName: PropTypes.string,
|
|
78
78
|
optionType: PropTypes.string
|
|
79
79
|
})
|
|
80
|
-
)
|
|
80
|
+
)
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
Options.defaultProps = {
|
|
84
|
+
options: []
|
|
81
85
|
};
|
|
82
86
|
|
|
83
87
|
export const layout = {
|
|
@@ -146,7 +146,7 @@ export default function Variants({
|
|
|
146
146
|
};
|
|
147
147
|
|
|
148
148
|
return (
|
|
149
|
-
<div className="variant variant-container grid grid-cols-1 gap-
|
|
149
|
+
<div className="variant variant-container grid grid-cols-1 gap-4 mt-8">
|
|
150
150
|
{attributes.map((a, i) => {
|
|
151
151
|
const options = a.options.filter(
|
|
152
152
|
(v, j, s) =>
|
|
@@ -157,17 +157,17 @@ export default function Variants({
|
|
|
157
157
|
<input
|
|
158
158
|
name={`variant_options[${i}][attribute_id]`}
|
|
159
159
|
type="hidden"
|
|
160
|
-
value={a.attributeId}
|
|
160
|
+
value={a.attributeId || ''}
|
|
161
161
|
/>
|
|
162
162
|
<input
|
|
163
163
|
name={`variant_options[${i}][optionId]`}
|
|
164
164
|
type="hidden"
|
|
165
|
-
value={a.selectedOption}
|
|
165
|
+
value={a.selectedOption || ''}
|
|
166
166
|
/>
|
|
167
|
-
<div className="mb-
|
|
167
|
+
<div className="mb-2 text-textSubdued uppercase">
|
|
168
168
|
<span>{a.attribute_name}</span>
|
|
169
169
|
</div>
|
|
170
|
-
<ul className="variant-option-list flex justify-start gap-
|
|
170
|
+
<ul className="variant-option-list flex justify-start gap-2 flex-wrap">
|
|
171
171
|
{options.map((o) => {
|
|
172
172
|
let className = '';
|
|
173
173
|
if (a.selected && a.selectedOption === o.optionId) {
|
|
@@ -240,7 +240,7 @@ Variants.propTypes = {
|
|
|
240
240
|
|
|
241
241
|
export const layout = {
|
|
242
242
|
areaId: 'productPageMiddleRight',
|
|
243
|
-
sortOrder:
|
|
243
|
+
sortOrder: 35
|
|
244
244
|
};
|
|
245
245
|
|
|
246
246
|
export const query = `
|
|
@@ -17,16 +17,16 @@ class AttributeCollection {
|
|
|
17
17
|
);
|
|
18
18
|
|
|
19
19
|
attributeCollectionFilters.forEach((filter) => {
|
|
20
|
-
const check = filters.find(
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
20
|
+
const check = filters.find(
|
|
21
|
+
(f) => f.key === filter.key && filter.operation.includes(f.operation)
|
|
22
|
+
);
|
|
23
|
+
if (filter.key === '*' || check) {
|
|
24
|
+
filter.callback(
|
|
25
|
+
this.baseQuery,
|
|
26
|
+
check?.operation,
|
|
27
|
+
check?.value,
|
|
28
|
+
currentFilters
|
|
29
|
+
);
|
|
30
30
|
}
|
|
31
31
|
});
|
|
32
32
|
|
|
@@ -58,16 +58,16 @@ class AttributeGroupCollection {
|
|
|
58
58
|
);
|
|
59
59
|
|
|
60
60
|
attributeGroupCollectionFilters.forEach((filter) => {
|
|
61
|
-
const check = filters.find(
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
61
|
+
const check = filters.find(
|
|
62
|
+
(f) => f.key === filter.key && filter.operation.includes(f.operation)
|
|
63
|
+
);
|
|
64
|
+
if (filter.key === '*' || check) {
|
|
65
|
+
filter.callback(
|
|
66
|
+
this.baseQuery,
|
|
67
|
+
check?.operation,
|
|
68
|
+
check?.value,
|
|
69
|
+
currentFilters
|
|
70
|
+
);
|
|
71
71
|
}
|
|
72
72
|
});
|
|
73
73
|
|