rerobe-js-orm 4.0.3 → 4.0.5
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/lib/factories/Product/ProductFromFormState.js +2 -0
- package/lib/form-states/Product/ProductFormState.d.ts +7 -0
- package/lib/form-states/Product/ProductFormState.js +103 -18
- package/lib/models/Product.d.ts +2 -0
- package/lib/models/Product.js +10 -13
- package/lib/types/rerobe-product-types.d.ts +6 -0
- package/package.json +1 -1
|
@@ -43,6 +43,8 @@ class ProductFromFormState extends ProductFactory_1.default {
|
|
|
43
43
|
brand: props.fields.brand.selectedValue,
|
|
44
44
|
measurementCategory: props.fields.measurementCategory.selectedValue,
|
|
45
45
|
size: props.fields.size.selectedValue,
|
|
46
|
+
standardSize: props.fields.standardSize.selectedValue,
|
|
47
|
+
internationalSize: props.fields.internationalSize.selectedValue,
|
|
46
48
|
clothingSize: props.fields.clothingSize.selectedValues,
|
|
47
49
|
jeanSize: props.fields.jeanSize.selectedValue,
|
|
48
50
|
shoeSize: props.fields.shoeSize.selectedValue,
|
|
@@ -12,6 +12,9 @@ export default class ProductFormState extends FormState {
|
|
|
12
12
|
taxonomy: {
|
|
13
13
|
[key: string]: any;
|
|
14
14
|
};
|
|
15
|
+
sizeTaxonomy: {
|
|
16
|
+
[key: string]: any;
|
|
17
|
+
};
|
|
15
18
|
brands: string[];
|
|
16
19
|
colors: string[];
|
|
17
20
|
sizes: string[];
|
|
@@ -48,6 +51,10 @@ export default class ProductFormState extends FormState {
|
|
|
48
51
|
private setProductTypesFromPassedOptions;
|
|
49
52
|
private setProductStylesFromCategoryAndType;
|
|
50
53
|
private setProductStylesFromPassedOptions;
|
|
54
|
+
private measurementCategorySelectHandler;
|
|
55
|
+
private setStandardSizeOptionsFromGenderAndMeasurementCategory;
|
|
56
|
+
private standardSizeSelectHandler;
|
|
57
|
+
private setInternationalSizeOptionsFromPassedOptions;
|
|
51
58
|
private discountTypeChangeHandler;
|
|
52
59
|
private discountValueChangeHandler;
|
|
53
60
|
private calculateSalePrice;
|
|
@@ -32,6 +32,8 @@ class ProductFormState extends FormState_1.default {
|
|
|
32
32
|
this.fields.brand = this.fieldFactory('singleSelect', 'brand', options_1.brands);
|
|
33
33
|
this.fields.measurementCategory = this.fieldFactory('singleSelect', 'measurementCategory', options_1.measurementCategoryOptions);
|
|
34
34
|
this.fields.size = this.fieldFactory('singleSelect', 'size', options_1.clothingSizeOptions);
|
|
35
|
+
this.fields.standardSize = this.fieldFactory('singleSelect', 'standardSize', options_1.clothingSizeOptions);
|
|
36
|
+
this.fields.internationalSize = this.fieldFactory('singleSelect', 'internationalSize', []);
|
|
35
37
|
this.fields.color = this.fieldFactory('singleSelect', 'color', options_1.colors);
|
|
36
38
|
this.fields.condition = this.fieldFactory('singleSelect', 'condition', options_1.conditions);
|
|
37
39
|
this.fields.gender = this.fieldFactory('singleSelect', 'gender', options_1.genderOptions);
|
|
@@ -142,10 +144,7 @@ class ProductFormState extends FormState_1.default {
|
|
|
142
144
|
this.fields.shoeSize.hidden = true;
|
|
143
145
|
this.fields.shoeSize.valid = false;
|
|
144
146
|
this.fields.shoeSize.selectedValue = '';
|
|
145
|
-
// Reset size fields except options
|
|
146
147
|
this.fields.size.hidden = false;
|
|
147
|
-
this.fields.size.valid = false;
|
|
148
|
-
this.fields.size.selectedValue = '';
|
|
149
148
|
}
|
|
150
149
|
geWeightArray(range) {
|
|
151
150
|
if (!range)
|
|
@@ -216,10 +215,7 @@ class ProductFormState extends FormState_1.default {
|
|
|
216
215
|
this.fields.shoeSize.hidden = true;
|
|
217
216
|
this.fields.shoeSize.selectedValue = '';
|
|
218
217
|
this.fields.shoeSize.valid = false;
|
|
219
|
-
// Reset Size
|
|
220
218
|
this.fields.size.hidden = false;
|
|
221
|
-
this.fields.size.selectedValue = '';
|
|
222
|
-
this.fields.size.valid = false;
|
|
223
219
|
}
|
|
224
220
|
productTypeSelectHandler(value) {
|
|
225
221
|
// Mutate productType selectedValue and valid prop
|
|
@@ -243,9 +239,6 @@ class ProductFormState extends FormState_1.default {
|
|
|
243
239
|
this.fields.shoeSize.selectedValue = '';
|
|
244
240
|
this.fields.shoeSize.valid = false;
|
|
245
241
|
this.fields.shoeSize.hidden = !value || this.fields.productCategory.selectedValue !== 'Shoes';
|
|
246
|
-
// Reset size
|
|
247
|
-
this.fields.size.selectedValue = '';
|
|
248
|
-
this.fields.size.valid = false;
|
|
249
242
|
this.fields.size.hidden = false;
|
|
250
243
|
}
|
|
251
244
|
setPriceRangeFromPrice(value) {
|
|
@@ -442,6 +435,88 @@ class ProductFormState extends FormState_1.default {
|
|
|
442
435
|
}
|
|
443
436
|
return options;
|
|
444
437
|
}
|
|
438
|
+
measurementCategorySelectHandler(value) {
|
|
439
|
+
// Mutate measurementCategory selectedValue and valid prop
|
|
440
|
+
this.fields.measurementCategory.selectedValue = value;
|
|
441
|
+
this.fields.measurementCategory.valid = !!value;
|
|
442
|
+
// Update standardSize fields based on new measurementCategory value and selected gender
|
|
443
|
+
this.fields.standardSize.options = this.setStandardSizeOptionsFromGenderAndMeasurementCategory(value, this.fields.gender.selectedValue);
|
|
444
|
+
this.fields.standardSize.hidden = !value;
|
|
445
|
+
this.fields.standardSize.valid = false;
|
|
446
|
+
this.fields.standardSize.selectedValue = '';
|
|
447
|
+
// Reset International Sizes
|
|
448
|
+
this.fields.internationalSize.options = [];
|
|
449
|
+
this.fields.internationalSize.selectedValue = '';
|
|
450
|
+
this.fields.internationalSize.valid = false;
|
|
451
|
+
this.fields.internationalSize.hidden = !value;
|
|
452
|
+
}
|
|
453
|
+
setStandardSizeOptionsFromGenderAndMeasurementCategory(measurementCategory, genderSelected) {
|
|
454
|
+
let options = [
|
|
455
|
+
'One Size',
|
|
456
|
+
'Adjustable',
|
|
457
|
+
'XS',
|
|
458
|
+
'S',
|
|
459
|
+
'M',
|
|
460
|
+
'L',
|
|
461
|
+
'XL',
|
|
462
|
+
'XXL',
|
|
463
|
+
'3XL',
|
|
464
|
+
].map((v) => ({ label: v, value: v, internationalSizes: [] }));
|
|
465
|
+
if (measurementCategory &&
|
|
466
|
+
genderSelected &&
|
|
467
|
+
this.opts &&
|
|
468
|
+
this.opts.sizeTaxonomy &&
|
|
469
|
+
Object.keys(this.opts.sizeTaxonomy).length > 0) {
|
|
470
|
+
const t = this.opts.sizeTaxonomy;
|
|
471
|
+
const { [genderSelected]: { [measurementCategory]: standardSizeArr = [] } = {} } = t;
|
|
472
|
+
options = standardSizeArr;
|
|
473
|
+
}
|
|
474
|
+
let selectedStandardSizeOptions = [];
|
|
475
|
+
if (this.props.standardSize) {
|
|
476
|
+
selectedStandardSizeOptions = [
|
|
477
|
+
{ label: this.props.standardSize, value: this.props.standardSize, internationalSizes: [] },
|
|
478
|
+
];
|
|
479
|
+
if (!options.map((o) => o.value).includes(this.props.standardSize)) {
|
|
480
|
+
options.splice(0, 0, ...selectedStandardSizeOptions);
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
return options;
|
|
484
|
+
}
|
|
485
|
+
standardSizeSelectHandler(value) {
|
|
486
|
+
// Mutate standardSize selectedValue and valid prop
|
|
487
|
+
this.fields.standardSize.selectedValue = value;
|
|
488
|
+
this.fields.standardSize.valid = !!value;
|
|
489
|
+
// Update internationalSizes fields based on selected value and measurementCategory selected
|
|
490
|
+
// and resets other props
|
|
491
|
+
this.fields.internationalSize.options = this.setInternationalSizeOptionsFromPassedOptions(this.fields.measurementCategory.selectedValue, value);
|
|
492
|
+
this.fields.internationalSize.selectedValue = '';
|
|
493
|
+
this.fields.internationalSize.valid = false;
|
|
494
|
+
this.fields.internationalSize.hidden = false;
|
|
495
|
+
}
|
|
496
|
+
setInternationalSizeOptionsFromPassedOptions(measurementCategory, standardSize) {
|
|
497
|
+
let options = [];
|
|
498
|
+
if (this.opts &&
|
|
499
|
+
this.opts.sizeTaxonomy &&
|
|
500
|
+
Object.keys(this.opts.sizeTaxonomy).length > 0 &&
|
|
501
|
+
measurementCategory &&
|
|
502
|
+
standardSize) {
|
|
503
|
+
const t = this.opts.sizeTaxonomy;
|
|
504
|
+
const genderSelected = this.fields.gender.selectedValue;
|
|
505
|
+
const { [genderSelected]: { [measurementCategory]: standardSizeArr = [] } = {} } = t;
|
|
506
|
+
const [sSize] = standardSizeArr.filter((p) => p.value === standardSize);
|
|
507
|
+
if (sSize) {
|
|
508
|
+
options = sSize.internationalSizes.map((s) => ({ label: s, value: s }));
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
let selectedInternationalSizeOptions = [];
|
|
512
|
+
if (this.props.internationalSize) {
|
|
513
|
+
selectedInternationalSizeOptions = [{ label: this.props.internationalSize, value: this.props.internationalSize }];
|
|
514
|
+
if (!options.map((o) => o.value).includes(this.props.internationalSize)) {
|
|
515
|
+
options.splice(0, 0, ...selectedInternationalSizeOptions);
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
return options;
|
|
519
|
+
}
|
|
445
520
|
discountTypeChangeHandler(val) {
|
|
446
521
|
const prevVal = this.fields.discountType.selectedValue;
|
|
447
522
|
if (val === 'amount' && prevVal === 'percentage' && this.fields.discountValue.inputValue) {
|
|
@@ -571,6 +646,25 @@ class ProductFormState extends FormState_1.default {
|
|
|
571
646
|
hidden = !this.props.productCategory;
|
|
572
647
|
onChangeHandler = (val) => this.productTypeSelectHandler(val);
|
|
573
648
|
}
|
|
649
|
+
if (fieldKey === 'measurementCategory') {
|
|
650
|
+
let selectedOptions = [];
|
|
651
|
+
if (this.props.measurementCategory) {
|
|
652
|
+
selectedOptions = [{ label: this.props.measurementCategory, value: this.props.measurementCategory }];
|
|
653
|
+
if (!options.map((o) => o.value).includes(this.props.measurementCategory)) {
|
|
654
|
+
options.splice(0, 0, ...selectedOptions);
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
onChangeHandler = (val) => this.measurementCategorySelectHandler(val);
|
|
658
|
+
}
|
|
659
|
+
if (fieldKey === 'standardSize') {
|
|
660
|
+
options = this.setStandardSizeOptionsFromGenderAndMeasurementCategory(this.props.measurementCategory, this.props.gender);
|
|
661
|
+
hidden = !(this.props.measurementCategory && this.props.standardSize);
|
|
662
|
+
onChangeHandler = (val) => this.standardSizeSelectHandler(val);
|
|
663
|
+
}
|
|
664
|
+
if (fieldKey === 'internationalSize') {
|
|
665
|
+
options = this.setInternationalSizeOptionsFromPassedOptions(this.props.measurementCategory, this.props.standardSize);
|
|
666
|
+
hidden = !(this.props.measurementCategory && this.props.standardSize);
|
|
667
|
+
}
|
|
574
668
|
if (fieldKey === 'size') {
|
|
575
669
|
let selectedSizeOptions = [];
|
|
576
670
|
if (this.props.size) {
|
|
@@ -648,15 +742,6 @@ class ProductFormState extends FormState_1.default {
|
|
|
648
742
|
}
|
|
649
743
|
}
|
|
650
744
|
}
|
|
651
|
-
if (fieldKey === 'measurementCategory') {
|
|
652
|
-
let selectedOptions = [];
|
|
653
|
-
if (this.props.measurementCategory) {
|
|
654
|
-
selectedOptions = [{ label: this.props.measurementCategory, value: this.props.measurementCategory }];
|
|
655
|
-
if (!options.map((o) => o.value).includes(this.props.measurementCategory)) {
|
|
656
|
-
options.splice(0, 0, ...selectedOptions);
|
|
657
|
-
}
|
|
658
|
-
}
|
|
659
|
-
}
|
|
660
745
|
if (fieldKey === 'primaryAgeCategory') {
|
|
661
746
|
let selectedPrimaryAgeCategoryOptions = [];
|
|
662
747
|
if (this.props.primaryAgeCategory) {
|
package/lib/models/Product.d.ts
CHANGED
package/lib/models/Product.js
CHANGED
|
@@ -50,6 +50,8 @@ class Product extends Base_1.default {
|
|
|
50
50
|
jeanSize: (props === null || props === void 0 ? void 0 : props.jeanSize) || '',
|
|
51
51
|
shoeSize: (props === null || props === void 0 ? void 0 : props.shoeSize) || '',
|
|
52
52
|
size: (props === null || props === void 0 ? void 0 : props.size) || '',
|
|
53
|
+
standardSize: this.utilities.sanitizeString(props === null || props === void 0 ? void 0 : props.standardSize) || '',
|
|
54
|
+
internationalSize: this.utilities.sanitizeString(props === null || props === void 0 ? void 0 : props.internationalSize) || '',
|
|
53
55
|
measurementCategory: (props === null || props === void 0 ? void 0 : props.measurementCategory) || '',
|
|
54
56
|
productCategory: (props === null || props === void 0 ? void 0 : props.productCategory) || '',
|
|
55
57
|
productType: (props === null || props === void 0 ? void 0 : props.productType) || '',
|
|
@@ -290,6 +292,8 @@ class Product extends Base_1.default {
|
|
|
290
292
|
const stagedObj = {
|
|
291
293
|
brand: this.utilities.sanitizeString(this.filterAttributes.brand),
|
|
292
294
|
size: this.utilities.sanitizeString(this.filterAttributes.size),
|
|
295
|
+
standardSize: this.utilities.sanitizeString(this.filterAttributes.standardSize),
|
|
296
|
+
internationalSize: this.utilities.sanitizeString(this.filterAttributes.standardSize),
|
|
293
297
|
clothingSize: this.utilities.sanitzeStringArr(this.filterAttributes.clothingSize),
|
|
294
298
|
jeanSize: this.utilities.sanitizeString(this.filterAttributes.jeanSize),
|
|
295
299
|
shoeSize: this.utilities.sanitizeString(this.filterAttributes.shoeSize),
|
|
@@ -403,6 +407,8 @@ class Product extends Base_1.default {
|
|
|
403
407
|
brand: this.filterAttributes.brand,
|
|
404
408
|
color: this.filterAttributes.color,
|
|
405
409
|
size: this.filterAttributes.size,
|
|
410
|
+
standardSize: this.filterAttributes.standardSize,
|
|
411
|
+
internationalSize: this.filterAttributes.internationalSize,
|
|
406
412
|
materialComposition: this.filterAttributes.materialComposition,
|
|
407
413
|
salePrice: this.consignmentAttributes.salePrice,
|
|
408
414
|
isOnSale: this.consignmentAttributes.isOnSale,
|
|
@@ -629,30 +635,21 @@ class Product extends Base_1.default {
|
|
|
629
635
|
},
|
|
630
636
|
{
|
|
631
637
|
facet: true,
|
|
632
|
-
name: '
|
|
633
|
-
type: 'string[]',
|
|
634
|
-
},
|
|
635
|
-
{
|
|
636
|
-
facet: true,
|
|
637
|
-
name: 'jeanSize',
|
|
638
|
+
name: 'standardSize',
|
|
638
639
|
type: 'string',
|
|
640
|
+
optional: true,
|
|
639
641
|
},
|
|
640
642
|
{
|
|
641
643
|
facet: true,
|
|
642
|
-
name: '
|
|
644
|
+
name: 'internationalSize',
|
|
643
645
|
type: 'string',
|
|
646
|
+
optional: true,
|
|
644
647
|
},
|
|
645
648
|
{
|
|
646
649
|
facet: true,
|
|
647
650
|
name: 'condition',
|
|
648
651
|
type: 'string',
|
|
649
652
|
},
|
|
650
|
-
{
|
|
651
|
-
facet: true,
|
|
652
|
-
optional: true,
|
|
653
|
-
name: 'featuredCollections',
|
|
654
|
-
type: 'string[]',
|
|
655
|
-
},
|
|
656
653
|
{
|
|
657
654
|
facet: true,
|
|
658
655
|
optional: true,
|
|
@@ -35,6 +35,8 @@ type ProductFilterAttributes = {
|
|
|
35
35
|
documentId: string;
|
|
36
36
|
brand: string;
|
|
37
37
|
size: string;
|
|
38
|
+
standardSize: string;
|
|
39
|
+
internationalSize: string;
|
|
38
40
|
clothingSize: string[];
|
|
39
41
|
shoeSize: string;
|
|
40
42
|
jeanSize: string;
|
|
@@ -175,6 +177,8 @@ type ProductAttributesFormFields = {
|
|
|
175
177
|
type ProductFilterAttributesFormFields = {
|
|
176
178
|
brand: SingleSelectFormField<string>;
|
|
177
179
|
size: SingleSelectFormField<string>;
|
|
180
|
+
standardSize: SingleSelectFormField<string>;
|
|
181
|
+
internationalSize: SingleSelectFormField<string>;
|
|
178
182
|
clothingSize: MultiSelectFormField<string>;
|
|
179
183
|
jeanSize: SingleSelectFormField<string>;
|
|
180
184
|
shoeSize: SingleSelectFormField<string>;
|
|
@@ -258,6 +262,8 @@ type InventoryLocation = {
|
|
|
258
262
|
type TypesenseProductObj = {
|
|
259
263
|
brand: string;
|
|
260
264
|
size: string;
|
|
265
|
+
standardSize: string;
|
|
266
|
+
internationalSize: string;
|
|
261
267
|
clothingSize: string[];
|
|
262
268
|
jeanSize: string;
|
|
263
269
|
shoeSize: string;
|