@evershop/evershop 1.0.0 → 1.1.0
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/client/index.js +1 -1
- package/bin/build/complie.js +1 -1
- package/bin/build/index.js +1 -1
- package/bin/build/server/index.js +1 -1
- package/bin/build/server/useDDL.js +1 -1
- package/bin/dev/index.js +2 -1
- package/bin/evershop +8 -7
- package/bin/extension/index.js +1 -1
- package/bin/install/index.js +1 -1
- package/bin/lib/addDefaultMiddlewareFuncs.js +2 -2
- package/bin/lib/app.js +1 -1
- package/bin/lib/bootstrap/migrate.js +1 -1
- package/bin/lib/buildEntry.js +1 -1
- package/bin/lib/onError.js +1 -1
- package/bin/lib/onListening.js +1 -1
- package/bin/lib/startUp.js +10 -9
- package/bin/lib/watch/watchComponents.js +16 -26
- package/bin/lib/watch/watchMF.js +1 -1
- package/bin/lib/watch/watchMR.js +1 -1
- package/bin/lib/watch/watchSchema.js +1 -1
- package/bin/user/changePassword.js +1 -1
- package/bin/user/create.js +1 -1
- package/package.json +2 -2
- package/src/components/admin/catalog/productEdit/category/CategoryItem.jsx +1 -1
- package/src/components/admin/catalog/productEdit/category/CategoryTree.jsx +1 -1
- package/src/components/admin/catalog/productEdit/variants/CreateVariantGroup.jsx +3 -8
- package/src/components/admin/catalog/productEdit/variants/Variant.jsx +1 -1
- package/src/components/admin/catalog/productEdit/variants/VariantModal.jsx +62 -6
- package/src/components/admin/catalog/productEdit/variants/Variants.jsx +1 -1
- package/src/components/admin/checkout/shippingSetting/Method.jsx +130 -0
- package/src/components/admin/{oms → checkout}/shippingSetting/MethodForm.jsx +124 -13
- package/src/components/admin/{oms → checkout}/shippingSetting/Methods.jsx +2 -2
- package/src/components/admin/checkout/shippingSetting/PriceBasedPrice.jsx +101 -0
- package/src/components/admin/checkout/shippingSetting/WeightBasedPrice.jsx +101 -0
- package/src/components/admin/{oms → checkout}/shippingSetting/Zone.jsx +34 -4
- package/src/components/admin/{oms → checkout}/shippingSetting/Zones.jsx +6 -3
- package/src/components/admin/promotion/couponEdit/AttributeGroupSelector.jsx +5 -5
- package/src/components/admin/promotion/couponEdit/CategorySelector.jsx +5 -5
- package/src/components/admin/promotion/couponEdit/CollectionSelector.jsx +5 -5
- package/src/components/admin/promotion/couponEdit/ProductSkuSelector.jsx +27 -6
- package/src/components/common/context/checkout.jsx +8 -14
- package/src/components/common/form/Field.jsx +1 -1
- package/src/components/common/form/fields/Input.jsx +2 -1
- package/src/components/common/form/validator.js +6 -2
- package/src/components/common/grid/headers/Dummy.jsx +1 -1
- package/src/components/common/grid/headers/Sortable.jsx +148 -0
- package/src/components/common/grid/rows/StatusRow.jsx +1 -1
- package/src/components/common/list/Filter.jsx +83 -0
- package/src/components/common/list/Filter.scss +39 -0
- package/src/components/frontStore/catalog/categoryView/filter/AttributeFilter.jsx +19 -5
- package/src/components/frontStore/catalog/categoryView/filter/CategoryFilter.jsx +59 -52
- package/src/components/frontStore/catalog/categoryView/filter/PriceFilter.jsx +20 -11
- package/src/components/frontStore/catalog/product/list/SortOptions.jsx +4 -2
- package/src/components/frontStore/catalog/product/list/Sorting.jsx +5 -5
- package/src/components/frontStore/checkout/checkout/payment/paymentStep/StepContent.jsx +9 -6
- package/src/components/frontStore/stripe/checkout/CheckoutForm.jsx +8 -4
- package/src/lib/event/callSubscibers.js +14 -11
- package/src/lib/event/event-manager.js +1 -1
- package/src/lib/event/loadSubscribers.js +2 -2
- package/src/lib/helpers.js +3 -1
- package/src/lib/log/CustomColorize.js +22 -0
- package/src/lib/log/logger.js +153 -19
- package/src/lib/middleware/Handler.js +2 -3
- package/src/lib/middleware/async.js +5 -9
- package/src/lib/middleware/sync.js +5 -10
- package/src/lib/middleware/tests/app/app.js +1 -1
- package/src/lib/router/buildAbsoluteUrl.js +1 -1
- package/src/lib/util/buildFilterFromUrl.js +31 -64
- package/src/lib/util/defaultPaginationFilters.js +102 -0
- package/src/lib/util/filterOperationMapp.js +16 -0
- package/src/lib/util/registry.js +44 -6
- package/src/lib/webpack/dev/createConfigClient.js +2 -0
- package/src/lib/webpack/loaders/AreaLoader.js +1 -1
- package/src/lib/webpack/loaders/loadTranslationFromCsv.js +1 -1
- package/src/lib/webpack/plugins/Tailwindcss.js +1 -1
- package/src/modules/auth/graphql/types/AdminUser/AdminUser.admin.resolvers.js +6 -6
- package/src/modules/auth/pages/admin/adminLogin/LoginForm.jsx +1 -15
- package/src/modules/base/api/global/[apiResponse]apiErrorHandler.js +2 -2
- package/src/modules/base/pages/global/[response]errorHandler.js +2 -2
- package/src/modules/catalog/api/addProductToCategory/addProducts.js +1 -1
- package/src/modules/catalog/api/addProductToCollection/addProducts.js +35 -22
- package/src/modules/catalog/api/removeProductFromCollection/removeProducts.js +20 -5
- package/src/modules/catalog/bootstrap.js +63 -0
- package/src/modules/catalog/graphql/types/Attribute/Attribute.admin.graphql +2 -2
- package/src/modules/catalog/graphql/types/Attribute/Attribute.admin.resolvers.js +48 -276
- package/src/modules/catalog/graphql/types/Category/Category.graphql +15 -2
- package/src/modules/catalog/graphql/types/Category/Category.resolvers.js +2 -2
- package/src/modules/catalog/graphql/types/Collection/Collection.resolvers.js +2 -2
- package/src/modules/catalog/graphql/types/Product/Product.resolvers.js +1 -1
- package/src/modules/catalog/graphql/types/Product/Variant/Variant.graphql +2 -2
- package/src/modules/catalog/graphql/types/Product/Variant/Variant.resolvers.js +68 -92
- package/src/modules/catalog/pages/admin/attributeEdit+attributeNew/General.jsx +13 -9
- package/src/modules/catalog/pages/admin/attributeGrid/Grid.jsx +82 -39
- package/src/modules/catalog/pages/admin/attributeGrid/index.js +1 -1
- package/src/modules/catalog/pages/admin/categoryEdit/Products.jsx +5 -5
- package/src/modules/catalog/pages/admin/categoryGrid/Grid.jsx +48 -16
- package/src/modules/catalog/pages/admin/categoryGrid/index.js +1 -1
- package/src/modules/catalog/pages/admin/collectionEdit/Products.jsx +5 -5
- package/src/modules/catalog/pages/admin/collectionGrid/Grid.jsx +46 -5
- package/src/modules/catalog/pages/admin/collectionGrid/index.js +1 -1
- package/src/modules/catalog/pages/admin/productEdit+productNew/Attributes.jsx +28 -24
- package/src/modules/catalog/pages/admin/productGrid/Grid.jsx +158 -26
- package/src/modules/catalog/pages/admin/productGrid/index.js +1 -2
- package/src/modules/catalog/pages/frontStore/all/SearchBox.jsx +2 -1
- package/src/modules/catalog/pages/frontStore/catalogSearch/[index]filters.js +4 -59
- package/src/modules/catalog/pages/frontStore/catalogSearch/index.js +11 -0
- package/src/modules/catalog/pages/frontStore/categoryView/Filter.jsx +22 -6
- package/src/modules/catalog/pages/frontStore/categoryView/Filter.scss +2 -0
- package/src/modules/catalog/pages/frontStore/categoryView/[index]filters.js +5 -105
- package/src/modules/catalog/pages/frontStore/homepage/FeaturedProducts.jsx +1 -1
- package/src/modules/catalog/pages/frontStore/productView/Form.jsx +8 -3
- package/src/modules/catalog/pages/frontStore/productView/Variants.jsx +102 -40
- package/src/modules/catalog/services/AttributeCollection.js +59 -0
- package/src/modules/catalog/services/AttributeGroupCollection.js +100 -0
- package/src/modules/catalog/services/CategoryCollection.js +27 -84
- package/src/modules/catalog/services/CollectionCollection.js +24 -72
- package/src/modules/catalog/services/ProductCollection.js +50 -216
- package/src/modules/catalog/services/attribute/deleteProductAttribute.js +15 -0
- package/src/modules/catalog/services/getAttributeGroupsBaseQuery.js +3 -0
- package/src/modules/catalog/services/getAttributesBaseQuery.js +3 -0
- package/src/modules/catalog/services/getCollectionsBaseQuery.js +0 -1
- package/src/modules/catalog/services/product/updateProduct.js +8 -2
- package/src/modules/catalog/services/registerDefaultAttributeCollectionFilters.js +149 -0
- package/src/modules/catalog/services/registerDefaultCategoryCollectionFilters.js +85 -0
- package/src/modules/catalog/services/registerDefaultCollectionCollectionFilters.js +65 -0
- package/src/modules/catalog/services/registerDefaultProductCollectionFilters.js +219 -0
- package/src/modules/catalog/subscribers/category_created/buildUrlRewrite.js +1 -1
- package/src/modules/catalog/subscribers/category_deleted/deleteUrlRewrite.js +1 -1
- package/src/modules/catalog/subscribers/category_updated/builUrlRewrite.js +1 -1
- package/src/modules/catalog/subscribers/product_created/builUrlRewrite.js +1 -1
- package/src/modules/catalog/subscribers/product_deleted/deleteUrlRewrite.js +1 -1
- package/src/modules/catalog/subscribers/product_image_added/localGenerateProductImageVariant.js +3 -3
- package/src/modules/checkout/api/addCartShippingMethod/saveShippingMethod.js +6 -1
- package/src/modules/checkout/api/createCart/[context]bodyParser[auth].js +5 -0
- package/src/modules/checkout/api/createCart/createNewCart.js +92 -0
- package/src/modules/checkout/api/createCart/payloadSchema.json +44 -0
- package/src/modules/checkout/api/createCart/route.json +5 -0
- package/src/modules/checkout/api/deleteShippingZone/deleteShippingZone.js +58 -0
- package/src/modules/checkout/api/deleteShippingZone/route.json +5 -0
- package/src/modules/checkout/api/deleteShippingZoneMethod/deleteShippingZoneMethod.js +85 -0
- package/src/modules/checkout/api/deleteShippingZoneMethod/route.json +5 -0
- package/src/modules/checkout/api/getShippingMethods/sendMethods.js +37 -0
- package/src/modules/checkout/api/updateShippingMethod/[context]borderParser[auth].js +5 -0
- package/src/modules/checkout/api/updateShippingMethod/payloadSchema.json +12 -0
- package/src/modules/checkout/api/updateShippingMethod/route.json +5 -0
- package/src/modules/checkout/api/updateShippingMethod/updateShippingMethod.js +64 -0
- package/src/modules/checkout/api/updateShippingZoneMethod/payloadSchema.json +43 -1
- package/src/modules/checkout/api/updateShippingZoneMethod/updateShippingZoneMethod.js +17 -3
- package/src/modules/checkout/bootstrap.js +1 -1
- package/src/modules/checkout/graphql/types/ShippingMethod/ShippingMethod.graphql +1 -0
- package/src/modules/checkout/graphql/types/ShippingMethod/ShippingMethod.resolvers.js +4 -0
- package/src/modules/checkout/graphql/types/ShippingZone/ShippingZone.graphql +21 -1
- package/src/modules/checkout/graphql/types/ShippingZone/ShippingZone.resolvers.js +34 -4
- package/src/modules/checkout/graphql/types/Weight/Weight.resolvers.js +8 -11
- package/src/modules/checkout/migration/Version-1.0.5.js +28 -0
- package/src/modules/{oms → checkout}/pages/admin/shippingSetting/ShippingSetting.jsx +66 -43
- package/src/modules/checkout/pages/frontStore/all/[auth]addCustomerToCart.js +3 -3
- package/src/modules/checkout/pages/frontStore/checkout/PaymentStep.jsx +3 -2
- package/src/modules/checkout/pages/frontStore/checkout/ShippingMethods.jsx +23 -10
- package/src/modules/checkout/pages/frontStore/checkout/SummaryMobile.jsx +132 -0
- package/src/modules/checkout/pages/frontStore/checkout/SummaryMobile.scss +7 -0
- package/src/modules/checkout/services/cart/Cart.js +23 -7
- package/src/modules/checkout/services/cart/DataObject.js +3 -3
- package/src/modules/checkout/services/cart/registerCartBaseFields.js +32 -0
- package/src/modules/checkout/services/cart/registerCartItemBaseFields.js +3 -2
- package/src/modules/cms/bootstrap.js +17 -0
- package/src/modules/cms/graphql/types/CmsPage/CmsPage.resolvers.js +2 -11
- package/src/modules/cms/pages/admin/all/Layout.scss +3 -2
- package/src/modules/cms/pages/admin/all/SearchBox.jsx +1 -1
- package/src/modules/cms/pages/admin/cmsPageGrid/Grid.jsx +62 -9
- package/src/modules/cms/pages/admin/cmsPageGrid/index.js +1 -2
- package/src/modules/cms/services/CMSPageCollection.js +23 -70
- package/src/modules/cms/services/registerDefaultPageCollectionFilters.js +62 -0
- package/src/modules/cms/services/tailwind.admin.config.js +6 -1
- package/src/modules/customer/api/createCustomer/[bodyParser]createCustomer.js +2 -2
- package/src/modules/customer/api/resetPassword/[bodyParser]resetPassword.js +2 -2
- package/src/modules/customer/api/updatePassword/[bodyParser]updatePassword.js +2 -2
- package/src/modules/customer/bootstrap.js +29 -0
- package/src/modules/customer/graphql/types/Customer/Customer.admin.resolvers.js +2 -4
- package/src/modules/customer/pages/admin/customerGrid/Grid.jsx +108 -14
- package/src/modules/customer/pages/admin/customerGrid/index.js +1 -2
- package/src/modules/customer/pages/frontStore/login/LoginForm.jsx +0 -1
- package/src/modules/customer/services/CustomerCollection.js +23 -104
- package/src/modules/customer/services/CustomerGroupCollection.js +21 -70
- package/src/modules/customer/services/registerDefaultCustomerCollectionFilters.js +90 -0
- package/src/modules/customer/services/registerDefaultCustomerGroupCollectionFilters.js +50 -0
- package/src/modules/graphql/pages/global/[bodyParser]buildQuery[graphql].js +1 -1
- package/src/modules/graphql/pages/global/[buildQuery]graphql[notification].js +1 -1
- package/src/modules/graphql/services/graphqlMiddleware.js +1 -1
- package/src/modules/oms/bootstrap.js +17 -0
- package/src/modules/oms/graphql/types/Order/Order.admin.resolvers.js +1 -1
- package/src/modules/oms/graphql/types/Order/Order.resolvers.js +2 -1
- package/src/modules/oms/pages/admin/orderGrid/Grid.jsx +152 -51
- package/src/modules/oms/pages/admin/orderGrid/index.js +1 -2
- package/src/modules/oms/services/OrderCollection.js +19 -139
- package/src/modules/oms/services/registerDefaultOrderCollectionFilters.js +121 -0
- package/src/modules/promotion/bootstrap.js +16 -0
- package/src/modules/promotion/graphql/types/Coupon/Coupon.admin.resolvers.js +2 -7
- package/src/modules/promotion/pages/admin/couponGrid/Grid.jsx +157 -33
- package/src/modules/promotion/pages/admin/couponGrid/index.js +1 -2
- package/src/modules/promotion/services/CouponCollection.js +21 -130
- package/src/modules/promotion/services/registerDefaultCouponCollectionFilters.js +72 -0
- package/src/modules/stripe/api/stripeWebHook/[bodyJson]webhook.js +4 -2
- package/src/modules/tax/bootstrap.js +17 -0
- package/src/modules/tax/services/TaxClassCollection.js +22 -56
- package/src/modules/tax/services/registerDefaultTaxClassCollectionFilters.js +49 -0
- package/src/components/admin/oms/shippingSetting/Method.jsx +0 -73
- package/src/components/common/grid/headers/Basic.jsx +0 -55
- package/src/lib/log/debuger.js +0 -89
- package/src/modules/customer/pages/frontStore/login/LoginButton.jsx +0 -27
- /package/src/components/admin/{oms → checkout}/shippingSetting/ZoneForm.jsx +0 -0
- /package/src/modules/{oms → checkout}/pages/admin/all/ShippingSettingMenu.jsx +0 -0
- /package/src/modules/{oms → checkout}/pages/admin/shippingSetting/index.js +0 -0
- /package/src/modules/{oms → checkout}/pages/admin/shippingSetting/route.json +0 -0
|
@@ -12,9 +12,11 @@ import AttributeNameRow from '@components/admin/catalog/attributeGrid/rows/Attri
|
|
|
12
12
|
import GroupRow from '@components/admin/catalog/attributeGrid/rows/GroupRow';
|
|
13
13
|
import BasicRow from '@components/common/grid/rows/BasicRow';
|
|
14
14
|
import YesNoRow from '@components/common/grid/rows/YesNoRow';
|
|
15
|
-
import
|
|
16
|
-
import
|
|
17
|
-
import
|
|
15
|
+
import SortableHeader from '@components/common/grid/headers/Sortable';
|
|
16
|
+
import DummyColumnHeader from '@components/common/grid/headers/Dummy';
|
|
17
|
+
import { Form } from '@components/common/form/Form';
|
|
18
|
+
import { Field } from '@components/common/form/Field';
|
|
19
|
+
import { toast } from 'react-toastify';
|
|
18
20
|
|
|
19
21
|
function Actions({ attributes = [], selectedIds = [] }) {
|
|
20
22
|
const { openAlert, closeAlert } = useAlertContext();
|
|
@@ -22,13 +24,29 @@ function Actions({ attributes = [], selectedIds = [] }) {
|
|
|
22
24
|
|
|
23
25
|
const deleteAttributes = async () => {
|
|
24
26
|
setIsLoading(true);
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
try {
|
|
28
|
+
const promises = attributes
|
|
29
|
+
.filter((attribute) => selectedIds.includes(attribute.uuid))
|
|
30
|
+
.map((attribute) =>
|
|
31
|
+
axios.delete(attribute.deleteApi, {
|
|
32
|
+
validateStatus: () => true
|
|
33
|
+
})
|
|
34
|
+
);
|
|
35
|
+
const responses = await Promise.allSettled(promises);
|
|
36
|
+
setIsLoading(false);
|
|
37
|
+
responses.forEach((response) => {
|
|
38
|
+
// Get the axios response status code
|
|
39
|
+
const { status } = response.value;
|
|
40
|
+
if (status !== 200) {
|
|
41
|
+
throw new Error(response.value.data.error.message);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
// Refresh the page
|
|
45
|
+
window.location.reload();
|
|
46
|
+
} catch (e) {
|
|
47
|
+
setIsLoading(false);
|
|
48
|
+
toast.error(e.message);
|
|
49
|
+
}
|
|
32
50
|
};
|
|
33
51
|
|
|
34
52
|
const actions = [
|
|
@@ -107,6 +125,45 @@ export default function AttributeGrid({
|
|
|
107
125
|
|
|
108
126
|
return (
|
|
109
127
|
<Card>
|
|
128
|
+
<Card.Session
|
|
129
|
+
title={
|
|
130
|
+
<Form submitBtn={false}>
|
|
131
|
+
<Field
|
|
132
|
+
type="text"
|
|
133
|
+
id="name"
|
|
134
|
+
placeholder="Search"
|
|
135
|
+
value={currentFilters.find((f) => f.key === 'name')?.value}
|
|
136
|
+
onKeyPress={(e) => {
|
|
137
|
+
// If the user press enter, we should submit the form
|
|
138
|
+
if (e.key === 'Enter') {
|
|
139
|
+
const url = new URL(document.location);
|
|
140
|
+
const name = document.getElementById('name')?.value;
|
|
141
|
+
if (name) {
|
|
142
|
+
url.searchParams.set('name[operation]', 'like');
|
|
143
|
+
url.searchParams.set('name[value]', name);
|
|
144
|
+
} else {
|
|
145
|
+
url.searchParams.delete('name[operation]');
|
|
146
|
+
url.searchParams.delete('name[value]');
|
|
147
|
+
}
|
|
148
|
+
window.location.href = url;
|
|
149
|
+
}
|
|
150
|
+
}}
|
|
151
|
+
/>
|
|
152
|
+
</Form>
|
|
153
|
+
}
|
|
154
|
+
actions={[
|
|
155
|
+
{
|
|
156
|
+
variant: 'interactive',
|
|
157
|
+
name: 'Clear filter',
|
|
158
|
+
onAction: () => {
|
|
159
|
+
// Just get the url and remove all query params
|
|
160
|
+
const url = new URL(document.location);
|
|
161
|
+
url.search = '';
|
|
162
|
+
window.location.href = url.href;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
]}
|
|
166
|
+
/>
|
|
110
167
|
<table className="listing sticky">
|
|
111
168
|
<thead>
|
|
112
169
|
<tr>
|
|
@@ -127,8 +184,8 @@ export default function AttributeGrid({
|
|
|
127
184
|
{
|
|
128
185
|
component: {
|
|
129
186
|
default: () => (
|
|
130
|
-
<
|
|
131
|
-
|
|
187
|
+
<SortableHeader
|
|
188
|
+
name="name"
|
|
132
189
|
title="Attribute Name"
|
|
133
190
|
currentFilters={currentFilters}
|
|
134
191
|
/>
|
|
@@ -138,25 +195,17 @@ export default function AttributeGrid({
|
|
|
138
195
|
},
|
|
139
196
|
{
|
|
140
197
|
component: {
|
|
141
|
-
default: () =>
|
|
142
|
-
<GroupHeader id="group" currentFilters={currentFilters} />
|
|
143
|
-
)
|
|
198
|
+
default: () => <DummyColumnHeader title="Groups" />
|
|
144
199
|
},
|
|
145
200
|
sortOrder: 15
|
|
146
201
|
},
|
|
147
202
|
{
|
|
148
203
|
component: {
|
|
149
204
|
default: () => (
|
|
150
|
-
<
|
|
151
|
-
|
|
205
|
+
<SortableHeader
|
|
206
|
+
name="type"
|
|
152
207
|
title="Type"
|
|
153
208
|
currentFilters={currentFilters}
|
|
154
|
-
options={[
|
|
155
|
-
{ value: 'text', text: 'Text' },
|
|
156
|
-
{ value: 'select', text: 'Select' },
|
|
157
|
-
{ value: 'multiselect', text: 'Multi Select' },
|
|
158
|
-
{ value: 'textarea', text: 'Text Area' }
|
|
159
|
-
]}
|
|
160
209
|
/>
|
|
161
210
|
)
|
|
162
211
|
},
|
|
@@ -165,14 +214,10 @@ export default function AttributeGrid({
|
|
|
165
214
|
{
|
|
166
215
|
component: {
|
|
167
216
|
default: () => (
|
|
168
|
-
<
|
|
169
|
-
|
|
217
|
+
<SortableHeader
|
|
218
|
+
name="is_required"
|
|
170
219
|
title="Is Required?"
|
|
171
220
|
currentFilters={currentFilters}
|
|
172
|
-
options={[
|
|
173
|
-
{ value: 1, text: 'Yes' },
|
|
174
|
-
{ value: 0, text: 'No' }
|
|
175
|
-
]}
|
|
176
221
|
/>
|
|
177
222
|
)
|
|
178
223
|
},
|
|
@@ -181,14 +226,10 @@ export default function AttributeGrid({
|
|
|
181
226
|
{
|
|
182
227
|
component: {
|
|
183
228
|
default: () => (
|
|
184
|
-
<
|
|
185
|
-
|
|
229
|
+
<SortableHeader
|
|
230
|
+
name="is_filterable"
|
|
186
231
|
title="Is Filterable?"
|
|
187
232
|
currentFilters={currentFilters}
|
|
188
|
-
options={[
|
|
189
|
-
{ value: 1, text: 'Yes' },
|
|
190
|
-
{ value: 0, text: 'No' }
|
|
191
|
-
]}
|
|
192
233
|
/>
|
|
193
234
|
)
|
|
194
235
|
},
|
|
@@ -238,7 +279,7 @@ export default function AttributeGrid({
|
|
|
238
279
|
},
|
|
239
280
|
{
|
|
240
281
|
component: {
|
|
241
|
-
default: () => <GroupRow groups={a.groups} />
|
|
282
|
+
default: () => <GroupRow groups={a.groups?.items} />
|
|
242
283
|
},
|
|
243
284
|
sortOrder: 15
|
|
244
285
|
},
|
|
@@ -329,9 +370,11 @@ export const query = `
|
|
|
329
370
|
updateApi
|
|
330
371
|
deleteApi
|
|
331
372
|
groups {
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
373
|
+
items {
|
|
374
|
+
attributeGroupId
|
|
375
|
+
groupName
|
|
376
|
+
updateApi
|
|
377
|
+
}
|
|
335
378
|
}
|
|
336
379
|
}
|
|
337
380
|
total
|
|
@@ -46,13 +46,13 @@ export default function Products({ category: { categoryId, addProductApi } }) {
|
|
|
46
46
|
id: parseInt(categoryId, 10),
|
|
47
47
|
filters: !keyword
|
|
48
48
|
? [
|
|
49
|
-
{ key: 'page', operation: '
|
|
50
|
-
{ key: 'limit', operation: '
|
|
49
|
+
{ key: 'page', operation: 'eq', value: page.toString() },
|
|
50
|
+
{ key: 'limit', operation: 'eq', value: '10' }
|
|
51
51
|
]
|
|
52
52
|
: [
|
|
53
|
-
{ key: 'page', operation: '
|
|
54
|
-
{ key: 'limit', operation: '
|
|
55
|
-
{ key: 'keyword', operation: '
|
|
53
|
+
{ key: 'page', operation: 'eq', value: page.toString() },
|
|
54
|
+
{ key: 'limit', operation: 'eq', value: '10' },
|
|
55
|
+
{ key: 'keyword', operation: 'eq', value: keyword }
|
|
56
56
|
]
|
|
57
57
|
},
|
|
58
58
|
pause: true
|
|
@@ -10,10 +10,11 @@ import { useAlertContext } from '@components/common/modal/Alert';
|
|
|
10
10
|
import { Checkbox } from '@components/common/form/fields/Checkbox';
|
|
11
11
|
import { Card } from '@components/admin/cms/Card';
|
|
12
12
|
import CategoryNameRow from '@components/admin/catalog/categoryGrid/rows/CategoryName';
|
|
13
|
-
import BasicColumnHeader from '@components/common/grid/headers/Basic';
|
|
14
|
-
import DropdownColumnHeader from '@components/common/grid/headers/Dropdown';
|
|
15
13
|
import StatusRow from '@components/common/grid/rows/StatusRow';
|
|
16
14
|
import YesNoRow from '@components/common/grid/rows/YesNoRow';
|
|
15
|
+
import SortableHeader from '@components/common/grid/headers/Sortable';
|
|
16
|
+
import { Form } from '@components/common/form/Form';
|
|
17
|
+
import { Field } from '@components/common/form/Field';
|
|
17
18
|
|
|
18
19
|
function Actions({ categories = [], selectedIds = [] }) {
|
|
19
20
|
const { openAlert, closeAlert } = useAlertContext();
|
|
@@ -106,6 +107,45 @@ export default function CategoryGrid({
|
|
|
106
107
|
|
|
107
108
|
return (
|
|
108
109
|
<Card>
|
|
110
|
+
<Card.Session
|
|
111
|
+
title={
|
|
112
|
+
<Form submitBtn={false}>
|
|
113
|
+
<Field
|
|
114
|
+
type="text"
|
|
115
|
+
id="name"
|
|
116
|
+
placeholder="Search"
|
|
117
|
+
value={currentFilters.find((f) => f.key === 'name')?.value}
|
|
118
|
+
onKeyPress={(e) => {
|
|
119
|
+
// If the user press enter, we should submit the form
|
|
120
|
+
if (e.key === 'Enter') {
|
|
121
|
+
const url = new URL(document.location);
|
|
122
|
+
const name = document.getElementById('name')?.value;
|
|
123
|
+
if (name) {
|
|
124
|
+
url.searchParams.set('name[operation]', 'like');
|
|
125
|
+
url.searchParams.set('name[value]', name);
|
|
126
|
+
} else {
|
|
127
|
+
url.searchParams.delete('name[operation]');
|
|
128
|
+
url.searchParams.delete('name[value]');
|
|
129
|
+
}
|
|
130
|
+
window.location.href = url;
|
|
131
|
+
}
|
|
132
|
+
}}
|
|
133
|
+
/>
|
|
134
|
+
</Form>
|
|
135
|
+
}
|
|
136
|
+
actions={[
|
|
137
|
+
{
|
|
138
|
+
variant: 'interactive',
|
|
139
|
+
name: 'Clear filter',
|
|
140
|
+
onAction: () => {
|
|
141
|
+
// Just get the url and remove all query params
|
|
142
|
+
const url = new URL(document.location);
|
|
143
|
+
url.search = '';
|
|
144
|
+
window.location.href = url.href;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
]}
|
|
148
|
+
/>
|
|
109
149
|
<table className="listing sticky">
|
|
110
150
|
<thead>
|
|
111
151
|
<tr>
|
|
@@ -128,9 +168,9 @@ export default function CategoryGrid({
|
|
|
128
168
|
{
|
|
129
169
|
component: {
|
|
130
170
|
default: () => (
|
|
131
|
-
<
|
|
171
|
+
<SortableHeader
|
|
132
172
|
title="Category Name"
|
|
133
|
-
|
|
173
|
+
name="name"
|
|
134
174
|
currentFilters={currentFilters}
|
|
135
175
|
/>
|
|
136
176
|
)
|
|
@@ -140,14 +180,10 @@ export default function CategoryGrid({
|
|
|
140
180
|
{
|
|
141
181
|
component: {
|
|
142
182
|
default: () => (
|
|
143
|
-
<
|
|
144
|
-
|
|
183
|
+
<SortableHeader
|
|
184
|
+
name="status"
|
|
145
185
|
title="Status"
|
|
146
186
|
currentFilters={currentFilters}
|
|
147
|
-
options={[
|
|
148
|
-
{ value: 1, text: 'Enabled' },
|
|
149
|
-
{ value: 0, text: 'Disabled' }
|
|
150
|
-
]}
|
|
151
187
|
/>
|
|
152
188
|
)
|
|
153
189
|
},
|
|
@@ -156,14 +192,10 @@ export default function CategoryGrid({
|
|
|
156
192
|
{
|
|
157
193
|
component: {
|
|
158
194
|
default: () => (
|
|
159
|
-
<
|
|
160
|
-
|
|
195
|
+
<SortableHeader
|
|
196
|
+
name="include_in_nav"
|
|
161
197
|
title="Include In Menu"
|
|
162
198
|
currentFilters={currentFilters}
|
|
163
|
-
options={[
|
|
164
|
-
{ value: 1, text: 'Yes' },
|
|
165
|
-
{ value: 0, text: 'No' }
|
|
166
|
-
]}
|
|
167
199
|
/>
|
|
168
200
|
)
|
|
169
201
|
},
|
|
@@ -46,13 +46,13 @@ export default function Products({ collection: { code, addProductApi } }) {
|
|
|
46
46
|
code,
|
|
47
47
|
filters: !keyword
|
|
48
48
|
? [
|
|
49
|
-
{ key: 'page', operation: '
|
|
50
|
-
{ key: 'limit', operation: '
|
|
49
|
+
{ key: 'page', operation: 'eq', value: page.toString() },
|
|
50
|
+
{ key: 'limit', operation: 'eq', value: '10' }
|
|
51
51
|
]
|
|
52
52
|
: [
|
|
53
|
-
{ key: 'page', operation: '
|
|
54
|
-
{ key: 'limit', operation: '
|
|
55
|
-
{ key: 'keyword', operation: '
|
|
53
|
+
{ key: 'page', operation: 'eq', value: page.toString() },
|
|
54
|
+
{ key: 'limit', operation: 'eq', value: '10' },
|
|
55
|
+
{ key: 'keyword', operation: 'eq', value: keyword }
|
|
56
56
|
]
|
|
57
57
|
},
|
|
58
58
|
pause: true
|
|
@@ -10,9 +10,11 @@ import { useAlertContext } from '@components/common/modal/Alert';
|
|
|
10
10
|
import { Checkbox } from '@components/common/form/fields/Checkbox';
|
|
11
11
|
import { Card } from '@components/admin/cms/Card';
|
|
12
12
|
import CollectionNameRow from '@components/admin/catalog/collectionGrid/rows/CollectionNameRow';
|
|
13
|
-
import BasicColumnHeader from '@components/common/grid/headers/Basic';
|
|
14
13
|
import TextRow from '@components/common/grid/rows/TextRow';
|
|
15
14
|
import DummyColumnHeader from '@components/common/grid/headers/Dummy';
|
|
15
|
+
import SortableHeader from '@components/common/grid/headers/Sortable';
|
|
16
|
+
import { Form } from '@components/common/form/Form';
|
|
17
|
+
import { Field } from '@components/common/form/Field';
|
|
16
18
|
|
|
17
19
|
function Actions({ collections = [], selectedIds = [] }) {
|
|
18
20
|
const { openAlert, closeAlert } = useAlertContext();
|
|
@@ -106,6 +108,45 @@ export default function CollectionGrid({
|
|
|
106
108
|
return (
|
|
107
109
|
<div className="w-2/3" style={{ margin: '0 auto' }}>
|
|
108
110
|
<Card>
|
|
111
|
+
<Card.Session
|
|
112
|
+
title={
|
|
113
|
+
<Form submitBtn={false}>
|
|
114
|
+
<Field
|
|
115
|
+
type="text"
|
|
116
|
+
id="name"
|
|
117
|
+
placeholder="Search"
|
|
118
|
+
value={currentFilters.find((f) => f.key === 'name')?.value}
|
|
119
|
+
onKeyPress={(e) => {
|
|
120
|
+
// If the user press enter, we should submit the form
|
|
121
|
+
if (e.key === 'Enter') {
|
|
122
|
+
const url = new URL(document.location);
|
|
123
|
+
const name = document.getElementById('name')?.value;
|
|
124
|
+
if (name) {
|
|
125
|
+
url.searchParams.set('name[operation]', 'like');
|
|
126
|
+
url.searchParams.set('name[value]', name);
|
|
127
|
+
} else {
|
|
128
|
+
url.searchParams.delete('name[operation]');
|
|
129
|
+
url.searchParams.delete('name[value]');
|
|
130
|
+
}
|
|
131
|
+
window.location.href = url;
|
|
132
|
+
}
|
|
133
|
+
}}
|
|
134
|
+
/>
|
|
135
|
+
</Form>
|
|
136
|
+
}
|
|
137
|
+
actions={[
|
|
138
|
+
{
|
|
139
|
+
variant: 'interactive',
|
|
140
|
+
name: 'Clear filter',
|
|
141
|
+
onAction: () => {
|
|
142
|
+
// Just get the url and remove all query params
|
|
143
|
+
const url = new URL(document.location);
|
|
144
|
+
url.search = '';
|
|
145
|
+
window.location.href = url.href;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
]}
|
|
149
|
+
/>
|
|
109
150
|
<table className="listing sticky">
|
|
110
151
|
<thead>
|
|
111
152
|
<tr>
|
|
@@ -140,9 +181,9 @@ export default function CollectionGrid({
|
|
|
140
181
|
{
|
|
141
182
|
component: {
|
|
142
183
|
default: () => (
|
|
143
|
-
<
|
|
184
|
+
<SortableHeader
|
|
144
185
|
title="Collection Name"
|
|
145
|
-
|
|
186
|
+
name="name"
|
|
146
187
|
currentFilters={currentFilters}
|
|
147
188
|
/>
|
|
148
189
|
)
|
|
@@ -152,9 +193,9 @@ export default function CollectionGrid({
|
|
|
152
193
|
{
|
|
153
194
|
component: {
|
|
154
195
|
default: () => (
|
|
155
|
-
<
|
|
196
|
+
<SortableHeader
|
|
156
197
|
title="Code"
|
|
157
|
-
|
|
198
|
+
name="code"
|
|
158
199
|
currentFilters={currentFilters}
|
|
159
200
|
/>
|
|
160
201
|
)
|
|
@@ -11,5 +11,5 @@ module.exports = (request, response) => {
|
|
|
11
11
|
title: 'Collections',
|
|
12
12
|
description: 'Collections'
|
|
13
13
|
});
|
|
14
|
-
setContextValue(request, 'filtersFromUrl', buildFilterFromUrl(request
|
|
14
|
+
setContextValue(request, 'filtersFromUrl', buildFilterFromUrl(request));
|
|
15
15
|
};
|
|
@@ -66,7 +66,7 @@ export default function Attributes({ product, groups: { items } }) {
|
|
|
66
66
|
<Card.Session title="Attributes">
|
|
67
67
|
<table className="table table-auto">
|
|
68
68
|
<tbody>
|
|
69
|
-
{currentGroup.attributes.map((attribute, index) => {
|
|
69
|
+
{currentGroup.attributes.items.map((attribute, index) => {
|
|
70
70
|
const valueIndex = attributeIndex.find(
|
|
71
71
|
(idx) => idx.attributeId === attribute.attributeId
|
|
72
72
|
);
|
|
@@ -210,21 +210,23 @@ Attributes.propTypes = {
|
|
|
210
210
|
PropTypes.shape({
|
|
211
211
|
groupId: PropTypes.number,
|
|
212
212
|
groupName: PropTypes.string,
|
|
213
|
-
attributes:
|
|
214
|
-
PropTypes.
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
PropTypes.
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
213
|
+
attributes: {
|
|
214
|
+
items: PropTypes.arrayOf(
|
|
215
|
+
PropTypes.shape({
|
|
216
|
+
attributeId: PropTypes.number,
|
|
217
|
+
attributeName: PropTypes.string,
|
|
218
|
+
attributeCode: PropTypes.string,
|
|
219
|
+
type: PropTypes.string,
|
|
220
|
+
isRequired: PropTypes.number,
|
|
221
|
+
options: PropTypes.arrayOf(
|
|
222
|
+
PropTypes.shape({
|
|
223
|
+
optionId: PropTypes.number,
|
|
224
|
+
optionText: PropTypes.string
|
|
225
|
+
})
|
|
226
|
+
)
|
|
227
|
+
})
|
|
228
|
+
)
|
|
229
|
+
}
|
|
228
230
|
})
|
|
229
231
|
)
|
|
230
232
|
}),
|
|
@@ -267,14 +269,16 @@ export const query = `
|
|
|
267
269
|
groupId: attributeGroupId
|
|
268
270
|
groupName
|
|
269
271
|
attributes {
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
272
|
+
items {
|
|
273
|
+
attributeId
|
|
274
|
+
attributeName
|
|
275
|
+
attributeCode
|
|
276
|
+
type
|
|
277
|
+
isRequired
|
|
278
|
+
options {
|
|
279
|
+
optionId: attributeOptionId
|
|
280
|
+
optionText
|
|
281
|
+
}
|
|
278
282
|
}
|
|
279
283
|
}
|
|
280
284
|
}
|