rerobe-js-orm 2.4.85 → 2.4.89

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.
@@ -4,7 +4,7 @@ const MerchantFactory_1 = require("./MerchantFactory");
4
4
  const Merchant_1 = require("../../models/Merchant");
5
5
  class MerchantFromFormState extends MerchantFactory_1.default {
6
6
  createMerchant(fs) {
7
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
7
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
8
8
  const merchantAttributes = {
9
9
  id: ((_a = fs.props) === null || _a === void 0 ? void 0 : _a.id) || '',
10
10
  name: fs.fields.name.inputValue,
@@ -27,10 +27,11 @@ class MerchantFromFormState extends MerchantFactory_1.default {
27
27
  numOrders: (_f = fs.props) === null || _f === void 0 ? void 0 : _f.numOrders,
28
28
  numProducts: (_g = fs.props) === null || _g === void 0 ? void 0 : _g.numProducts,
29
29
  orderTags: (_h = fs.props) === null || _h === void 0 ? void 0 : _h.orderTags,
30
- theme: (_j = fs.props) === null || _j === void 0 ? void 0 : _j.theme,
31
- webshopTenantId: (_k = fs.props) === null || _k === void 0 ? void 0 : _k.webshopTenantId,
30
+ productTags: (_j = fs.props) === null || _j === void 0 ? void 0 : _j.productTags,
31
+ theme: (_k = fs.props) === null || _k === void 0 ? void 0 : _k.theme,
32
+ webshopTenantId: (_l = fs.props) === null || _l === void 0 ? void 0 : _l.webshopTenantId,
32
33
  webhooks: fs.fields.webhooks.selectedValues,
33
- sharedSecret: (_l = fs.props) === null || _l === void 0 ? void 0 : _l.sharedSecret,
34
+ sharedSecret: (_m = fs.props) === null || _m === void 0 ? void 0 : _m.sharedSecret,
34
35
  };
35
36
  return new Merchant_1.default(Object.assign({}, merchantAttributes));
36
37
  }
@@ -8,6 +8,7 @@ export default class ProductFormState extends FormState {
8
8
  label: string;
9
9
  value: string;
10
10
  }[];
11
+ tags: string[];
11
12
  };
12
13
  constructor(props?: any, opts?: any);
13
14
  autoCreateTitle(): string;
@@ -531,13 +531,15 @@ class ProductFormState extends FormState_1.default {
531
531
  hidden = this.props.productStyle.length < 1;
532
532
  }
533
533
  if (fieldKey === 'tags') {
534
+ let selectedTagOptions = [];
534
535
  if (this.props.tags && Array.isArray(this.props.tags) && this.props.tags.length > 0) {
535
- this.props.tags.forEach((tag) => {
536
- if (!options.map((o) => o.value).includes(tag)) {
537
- options.splice(0, 0, { label: tag, value: tag });
538
- }
539
- });
536
+ selectedTagOptions = this.props.tags.map((t) => ({ label: t, value: t }));
537
+ }
538
+ let tagOptions = [];
539
+ if (this.opts && this.opts.tags && this.opts.tags.length > 0) {
540
+ tagOptions = this.opts.tags.map((t) => ({ label: t, value: t }));
540
541
  }
542
+ options = this.utilities.uniqObjArray([...selectedTagOptions, ...tagOptions], 'value');
541
543
  hidden = Boolean(this.props.tags && Array.isArray(this.props.tags) && this.props.tags.length < 1);
542
544
  }
543
545
  if (fieldKey === 'featuredCollections') {
@@ -7,6 +7,11 @@ export default class Utilities {
7
7
  getWeekNumberFromDate(dateString: string): string;
8
8
  capitalizeString(s: string): string;
9
9
  startCase(s: string): string;
10
+ camelCase(s: string): string;
10
11
  constantCase(str: string): any;
11
12
  makeRandId(length: number): string;
13
+ sanitizeString(v: any): string;
14
+ sanitzeStringArr(v: any): string[];
15
+ sanitizeNumber(v: any, to?: number): number;
16
+ sanitizeMillisTimeStamp(t: any): number;
12
17
  }
@@ -47,6 +47,9 @@ class Utilities {
47
47
  startCase(s) {
48
48
  return lodash_1.startCase(s);
49
49
  }
50
+ camelCase(s) {
51
+ return lodash_1.camelCase(s);
52
+ }
50
53
  constantCase(str) {
51
54
  return lodash_1.snakeCase(str).toUpperCase();
52
55
  }
@@ -60,5 +63,26 @@ class Utilities {
60
63
  }
61
64
  return result;
62
65
  }
66
+ sanitizeString(v) {
67
+ if (v && (typeof v === 'string' || typeof v === 'number')) {
68
+ return String(v);
69
+ }
70
+ return '';
71
+ }
72
+ sanitzeStringArr(v) {
73
+ if (v && Array.isArray(v)) {
74
+ return v.filter((e) => e).map((e) => String(e));
75
+ }
76
+ return [];
77
+ }
78
+ sanitizeNumber(v, to = 1) {
79
+ return Number.isNaN(parseFloat(String(v))) ? Number(to) : parseFloat(String(v));
80
+ }
81
+ sanitizeMillisTimeStamp(t) {
82
+ if (t && typeof t === 'number') {
83
+ return t;
84
+ }
85
+ return 0;
86
+ }
63
87
  }
64
88
  exports.default = Utilities;
@@ -57,6 +57,7 @@ export default class Merchant extends Base {
57
57
  numOrders: number;
58
58
  numProducts: number;
59
59
  orderTags: string[];
60
+ productTags: string[];
60
61
  theme: MerchantTheme;
61
62
  webshopTenantId: string;
62
63
  webhooks: MerchantWebHook[];
@@ -34,6 +34,7 @@ class Merchant extends Base_1.default {
34
34
  this.numOrders = (props === null || props === void 0 ? void 0 : props.numOrders) || 0;
35
35
  this.numProducts = (props === null || props === void 0 ? void 0 : props.numProducts) || 0;
36
36
  this.orderTags = (props === null || props === void 0 ? void 0 : props.orderTags) || [];
37
+ this.productTags = (props === null || props === void 0 ? void 0 : props.productTags) || [];
37
38
  this.theme = (props === null || props === void 0 ? void 0 : props.theme) || {
38
39
  layoutType: 'StandardNavLayout',
39
40
  bgColor: '#fff',
@@ -74,6 +75,7 @@ class Merchant extends Base_1.default {
74
75
  numOrders: this.numOrders,
75
76
  numProducts: this.numProducts,
76
77
  orderTags: this.orderTags,
78
+ productTags: this.productTags,
77
79
  theme: this.theme,
78
80
  webshopTenantId: this.webshopTenantId,
79
81
  webhooks: this.webhooks,
@@ -10,11 +10,29 @@ export default class Product extends Base {
10
10
  toObj(): CompleteProduct;
11
11
  toProductInputObjForShopify(location?: string): any;
12
12
  toObjForTextTranslation(): TranslatableAttributes;
13
+ toObjForTypesense(): TypesenseProductObj;
13
14
  updateSelfFromTranslatedTextArray(translatedTextArray?: string[]): void;
14
15
  autoCreateTitle(): string;
15
16
  autoCreateDescriptionHTML(): string;
17
+ generateSchemaForTypesense(name?: string): {
18
+ default_sorting_field: string;
19
+ fields: ({
20
+ facet: boolean;
21
+ name: string;
22
+ type: string;
23
+ optional?: undefined;
24
+ } | {
25
+ facet: boolean;
26
+ optional: boolean;
27
+ name: string;
28
+ type: string;
29
+ })[];
30
+ name: string;
31
+ };
16
32
  private materialCompTagsArrayForShopify;
17
33
  private materialCompJoinedString;
18
34
  private measurementsJoinedString;
19
35
  private convertMaterialCompJoinedStrToObj;
36
+ private sanitizeMaterialComp;
37
+ private sanitizeCommission;
20
38
  }
@@ -117,7 +117,7 @@ class Product extends Base_1.default {
117
117
  }
118
118
  toPartialObj() {
119
119
  return Object.assign(Object.assign({}, this.attributes), this.filterAttributes);
120
- }
120
+ } // ToDo: Deprecate soon
121
121
  toObj() {
122
122
  return Object.assign(Object.assign(Object.assign(Object.assign({}, this.attributes), this.filterAttributes), this.consignmentAttributes), this.timestampAttributes);
123
123
  }
@@ -228,6 +228,87 @@ class Product extends Base_1.default {
228
228
  condition: this.filterAttributes.condition || this.FIELD_NOT_TRANSLATABLE_KEY,
229
229
  };
230
230
  }
231
+ toObjForTypesense() {
232
+ const stagedObj = {
233
+ brand: this.utilities.sanitizeString(this.filterAttributes.brand),
234
+ clothingSize: this.utilities.sanitzeStringArr(this.filterAttributes.clothingSize),
235
+ jeanSize: this.utilities.sanitizeString(this.filterAttributes.jeanSize),
236
+ shoeSize: this.utilities.sanitizeString(this.filterAttributes.shoeSize),
237
+ condition: this.utilities.sanitizeString(this.filterAttributes.condition),
238
+ featuredCollections: this.utilities.sanitzeStringArr(this.filterAttributes.featuredCollections),
239
+ isOnSale: this.utilities.sanitizeString(this.consignmentAttributes.isOnSale),
240
+ merchants: this.utilities.sanitzeStringArr(this.attributes.merchants),
241
+ price: this.utilities.sanitizeNumber(this.attributes.price),
242
+ suggestedResalePrice: this.utilities.sanitizeNumber(this.consignmentAttributes.suggestedResalePrice),
243
+ salePrice: this.utilities.sanitizeNumber(this.consignmentAttributes.salePrice),
244
+ compareAtPrice: this.utilities.sanitizeNumber(this.attributes.compareAtPrice),
245
+ costPerItem: this.utilities.sanitizeNumber(this.attributes.costPerItem),
246
+ priceRange: this.utilities.sanitizeString(this.filterAttributes.priceRange),
247
+ productCategory: this.utilities.sanitizeString(this.filterAttributes.productCategory),
248
+ productType: this.utilities.sanitizeString(this.filterAttributes.productType),
249
+ productStyle: this.utilities.sanitzeStringArr(this.filterAttributes.productStyle),
250
+ reRobeCommission: this.sanitizeCommission(),
251
+ rfidTag: this.utilities.sanitizeString(this.attributes.rfidTag),
252
+ salesChannel: this.utilities.sanitzeStringArr(this.consignmentAttributes.salesChannel),
253
+ status: this.utilities.sanitizeString(this.consignmentAttributes.status),
254
+ tags: this.utilities.sanitzeStringArr(this.filterAttributes.tags),
255
+ title: this.utilities.sanitizeString(this.attributes.title),
256
+ vendorName: this.utilities.sanitizeString(this.attributes.vendorName),
257
+ vendorId: this.utilities.sanitizeString(this.attributes.vendorId),
258
+ createdAtTimestamp: this.utilities.sanitizeMillisTimeStamp(this.timestampAttributes.createdAtTimestamp),
259
+ updatedAtTimestamp: this.utilities.sanitizeMillisTimeStamp(this.timestampAttributes.updatedAtTimestamp),
260
+ sellRequestReviewTimestamp: this.utilities.sanitizeMillisTimeStamp(this.timestampAttributes.sellRequestReviewTimestamp),
261
+ sellRequestReviewDraftTimestamp: this.utilities.sanitizeMillisTimeStamp(this.timestampAttributes.sellRequestReviewDraftTimestamp),
262
+ rejectedTimestamp: this.utilities.sanitizeMillisTimeStamp(this.timestampAttributes.rejectedTimestamp),
263
+ holdTimestamp: this.utilities.sanitizeMillisTimeStamp(this.timestampAttributes.holdTimestamp),
264
+ acceptedTimestamp: this.utilities.sanitizeMillisTimeStamp(this.timestampAttributes.acceptedTimestamp),
265
+ sellerToDropOffTimestamp: this.utilities.sanitizeMillisTimeStamp(this.timestampAttributes.sellerToDropOffTimestamp),
266
+ sellerToShipTimestamp: this.utilities.sanitizeMillisTimeStamp(this.timestampAttributes.sellerToShipTimestamp),
267
+ sellerToGetPickUpTimestamp: this.utilities.sanitizeMillisTimeStamp(this.timestampAttributes.sellerToGetPickUpTimestamp),
268
+ qualityControlTimestamp: this.utilities.sanitizeMillisTimeStamp(this.timestampAttributes.qualityControlTimestamp),
269
+ pendingPublicationTimestamp: this.utilities.sanitizeMillisTimeStamp(this.timestampAttributes.pendingPublicationTimestamp),
270
+ listedTimestamp: this.utilities.sanitizeMillisTimeStamp(this.timestampAttributes.listedTimestamp),
271
+ clearanceTimestamp: this.utilities.sanitizeMillisTimeStamp(this.timestampAttributes.clearanceTimestamp),
272
+ reservedTimestamp: this.utilities.sanitizeMillisTimeStamp(this.timestampAttributes.reservedTimestamp),
273
+ soldTimestamp: this.utilities.sanitizeMillisTimeStamp(this.timestampAttributes.soldTimestamp),
274
+ returnedTimestamp: this.utilities.sanitizeMillisTimeStamp(this.timestampAttributes.returnedTimestamp),
275
+ soldSellerToBePaidTimestamp: this.utilities.sanitizeMillisTimeStamp(this.timestampAttributes.soldSellerToBePaidTimestamp),
276
+ soldSellerPaidTimestamp: this.utilities.sanitizeMillisTimeStamp(this.timestampAttributes.soldSellerPaidTimestamp),
277
+ sellerSelfRejectTimestamp: this.utilities.sanitizeMillisTimeStamp(this.timestampAttributes.sellerSelfRejectTimestamp),
278
+ liquidationRequestedTimestamp: this.utilities.sanitizeMillisTimeStamp(this.timestampAttributes.liquidationRequestedTimestamp),
279
+ sellerLiquidatedTimestamp: this.utilities.sanitizeMillisTimeStamp(this.timestampAttributes.sellerLiquidatedTimestamp),
280
+ selectedForClearance: this.utilities.sanitizeString(this.consignmentAttributes.selectedForClearance),
281
+ availableForSale: !!this.attributes.availableForSale,
282
+ color: this.utilities.sanitizeString(this.filterAttributes.color),
283
+ description: this.utilities.sanitizeString(this.attributes.description),
284
+ discountType: this.utilities.sanitizeString(this.consignmentAttributes.discountType),
285
+ discountValue: this.utilities.sanitizeNumber(this.consignmentAttributes.discountValue, 0),
286
+ id: this.utilities.sanitizeString(this.filterAttributes.documentId),
287
+ documentId: this.utilities.sanitizeString(this.filterAttributes.documentId),
288
+ shopifyId: this.utilities.sanitizeString(this.attributes.shopifyId),
289
+ gender: this.utilities.sanitizeString(this.filterAttributes.gender),
290
+ handle: this.utilities.sanitizeString(this.attributes.handle),
291
+ imageUrls: this.utilities.sanitzeStringArr(this.attributes.imageUrls),
292
+ sellRequestImageUrls: this.utilities.sanitzeStringArr(this.consignmentAttributes.sellRequestImageUrls),
293
+ reservedBy: this.utilities.sanitzeStringArr(this.attributes.reservedBy),
294
+ 'materialComposition.names': Object.keys(this.sanitizeMaterialComp()),
295
+ 'inventoryLocations.ids': this.consignmentAttributes.inventoryLocations && Array.isArray(this.consignmentAttributes.inventoryLocations)
296
+ ? this.consignmentAttributes.inventoryLocations.map((c) => String(c.id))
297
+ : [],
298
+ };
299
+ this.consignmentAttributes.inventoryLocations.forEach((l) => {
300
+ if (l.id) {
301
+ stagedObj[`inventoryLocations.${l.id}.availableAmount`] = l.availableAmount || 0;
302
+ stagedObj[`inventoryLocations.${l.id}.incomingAmount`] = l.incomingAmount || 0;
303
+ }
304
+ });
305
+ Object.values(this.sanitizeMaterialComp()).forEach((v, i) => {
306
+ if (v) {
307
+ stagedObj[`materialComposition.${Object.keys(this.sanitizeMaterialComp())[i]}.value`] = v;
308
+ }
309
+ });
310
+ return stagedObj;
311
+ }
231
312
  updateSelfFromTranslatedTextArray(translatedTextArray = []) {
232
313
  const checkFieldTranslated = (val) => {
233
314
  return val !== this.FIELD_NOT_TRANSLATABLE_KEY;
@@ -326,6 +407,281 @@ class Product extends Base_1.default {
326
407
  return acc;
327
408
  }, '');
328
409
  }
410
+ generateSchemaForTypesense(name = 'prod_products_20210108') {
411
+ return {
412
+ default_sorting_field: 'createdAtTimestamp',
413
+ fields: [
414
+ {
415
+ facet: true,
416
+ name: 'brand',
417
+ type: 'string',
418
+ },
419
+ {
420
+ facet: true,
421
+ name: 'clothingSize',
422
+ type: 'string[]',
423
+ },
424
+ {
425
+ facet: true,
426
+ name: 'jeanSize',
427
+ type: 'string',
428
+ },
429
+ {
430
+ facet: true,
431
+ name: 'shoeSize',
432
+ type: 'string',
433
+ },
434
+ {
435
+ facet: true,
436
+ name: 'condition',
437
+ type: 'string',
438
+ },
439
+ {
440
+ facet: true,
441
+ optional: true,
442
+ name: 'featuredCollections',
443
+ type: 'string[]',
444
+ },
445
+ {
446
+ facet: true,
447
+ optional: true,
448
+ name: 'isOnSale',
449
+ type: 'string',
450
+ },
451
+ {
452
+ facet: false,
453
+ optional: false,
454
+ name: 'merchants',
455
+ type: 'string[]',
456
+ },
457
+ {
458
+ facet: true,
459
+ name: 'price',
460
+ type: 'float',
461
+ },
462
+ {
463
+ facet: true,
464
+ optional: true,
465
+ name: 'suggestedResalePrice',
466
+ type: 'float',
467
+ },
468
+ {
469
+ facet: true,
470
+ optional: true,
471
+ name: 'salePrice',
472
+ type: 'float',
473
+ },
474
+ {
475
+ facet: false,
476
+ optional: true,
477
+ name: 'compareAtPrice',
478
+ type: 'float',
479
+ },
480
+ {
481
+ facet: false,
482
+ optional: true,
483
+ name: 'costPerItem',
484
+ type: 'float',
485
+ },
486
+ {
487
+ facet: true,
488
+ name: 'priceRange',
489
+ type: 'string',
490
+ },
491
+ {
492
+ facet: true,
493
+ name: 'productCategory',
494
+ type: 'string',
495
+ },
496
+ {
497
+ facet: true,
498
+ name: 'productType',
499
+ type: 'string',
500
+ },
501
+ {
502
+ facet: true,
503
+ name: 'productStyle',
504
+ type: 'string[]',
505
+ },
506
+ {
507
+ facet: true,
508
+ name: 'reRobeCommission',
509
+ type: 'float',
510
+ },
511
+ {
512
+ facet: true,
513
+ optional: true,
514
+ name: 'rfidTag',
515
+ type: 'string',
516
+ },
517
+ {
518
+ facet: true,
519
+ optional: true,
520
+ name: 'salesChannel',
521
+ type: 'string[]',
522
+ },
523
+ {
524
+ facet: true,
525
+ name: 'status',
526
+ type: 'string',
527
+ },
528
+ {
529
+ facet: true,
530
+ optional: true,
531
+ name: 'tags',
532
+ type: 'string[]',
533
+ },
534
+ {
535
+ facet: false,
536
+ name: 'title',
537
+ type: 'string',
538
+ },
539
+ {
540
+ facet: true,
541
+ name: 'vendorName',
542
+ type: 'string',
543
+ },
544
+ {
545
+ facet: true,
546
+ name: 'vendorId',
547
+ type: 'string',
548
+ },
549
+ {
550
+ facet: false,
551
+ optional: true,
552
+ name: '.*Timestamp',
553
+ type: 'int32',
554
+ },
555
+ {
556
+ facet: false,
557
+ name: 'createdAtTimestamp',
558
+ type: 'int32',
559
+ },
560
+ {
561
+ facet: false,
562
+ name: 'updatedAtTimestamp',
563
+ type: 'int32',
564
+ },
565
+ {
566
+ facet: true,
567
+ name: 'availableForSale',
568
+ type: 'bool',
569
+ },
570
+ {
571
+ facet: true,
572
+ name: 'selectedForClearance',
573
+ type: 'string',
574
+ },
575
+ {
576
+ facet: true,
577
+ name: 'color',
578
+ type: 'string',
579
+ },
580
+ {
581
+ facet: false,
582
+ name: 'description',
583
+ type: 'string',
584
+ },
585
+ {
586
+ facet: false,
587
+ optional: true,
588
+ name: 'discountType',
589
+ type: 'string',
590
+ },
591
+ {
592
+ facet: false,
593
+ optional: true,
594
+ name: 'discountValue',
595
+ type: 'string',
596
+ },
597
+ {
598
+ facet: false,
599
+ name: 'id',
600
+ type: 'string',
601
+ },
602
+ {
603
+ facet: false,
604
+ name: 'documentId',
605
+ type: 'string',
606
+ },
607
+ {
608
+ facet: false,
609
+ name: 'shopifyId',
610
+ type: 'string',
611
+ },
612
+ {
613
+ facet: true,
614
+ name: 'gender',
615
+ type: 'string',
616
+ },
617
+ {
618
+ facet: false,
619
+ optional: true,
620
+ name: 'handle',
621
+ type: 'string',
622
+ },
623
+ {
624
+ facet: false,
625
+ name: 'imageUrls',
626
+ type: 'string[]',
627
+ },
628
+ {
629
+ facet: false,
630
+ name: 'sellRequestImageUrls',
631
+ type: 'string[]',
632
+ },
633
+ {
634
+ facet: false,
635
+ optional: true,
636
+ name: 'notesForProductionTeam',
637
+ type: 'string',
638
+ },
639
+ {
640
+ facet: false,
641
+ optional: true,
642
+ name: 'nextAvailableSeason',
643
+ type: 'string',
644
+ },
645
+ {
646
+ facet: false,
647
+ optional: true,
648
+ name: 'reservedBy',
649
+ type: 'string[]',
650
+ },
651
+ {
652
+ facet: true,
653
+ optional: true,
654
+ name: 'inventoryLocations.ids',
655
+ type: 'string[]',
656
+ },
657
+ {
658
+ facet: true,
659
+ optional: true,
660
+ name: 'inventoryLocations..*.availableAmount',
661
+ type: 'int32',
662
+ },
663
+ {
664
+ facet: true,
665
+ optional: true,
666
+ name: 'inventoryLocations..*.incomingAmount',
667
+ type: 'int32',
668
+ },
669
+ {
670
+ facet: true,
671
+ optional: true,
672
+ name: 'materialComposition.names',
673
+ type: 'string[]',
674
+ },
675
+ {
676
+ facet: true,
677
+ optional: true,
678
+ name: 'materialComposition..*.value',
679
+ type: 'int32',
680
+ },
681
+ ],
682
+ name,
683
+ };
684
+ }
329
685
  materialCompTagsArrayForShopify() {
330
686
  return Object.keys(this.filterAttributes.materialComposition).reduce((acc, cur, idx) => {
331
687
  acc.push(`${cur} ${Object.values(this.filterAttributes.materialComposition)[idx]}`);
@@ -367,5 +723,41 @@ class Product extends Base_1.default {
367
723
  }
368
724
  return materialObj;
369
725
  }
726
+ sanitizeMaterialComp() {
727
+ let materialComp = this.filterAttributes.materialComposition;
728
+ if (materialComp && Array.isArray(materialComp)) {
729
+ materialComp = materialComp.reduce((acc, cur) => {
730
+ const camelKey = this.utilities.camelCase(cur);
731
+ acc[camelKey] = 100;
732
+ return acc;
733
+ }, {});
734
+ }
735
+ if (typeof materialComp !== 'object') {
736
+ materialComp = {};
737
+ }
738
+ if (materialComp && Object.keys(materialComp).length > 0) {
739
+ const mcKeys = Object.keys(materialComp);
740
+ const mcValues = Object.values(materialComp);
741
+ materialComp = mcKeys.reduce((acc, curr, ind) => {
742
+ if (curr.charCodeAt(0) >= 65 && curr.charCodeAt(0) <= 90) {
743
+ return acc;
744
+ }
745
+ const camelKey = this.utilities.camelCase(curr);
746
+ acc[camelKey] = Number(mcValues[ind]);
747
+ return acc;
748
+ }, {});
749
+ }
750
+ return materialComp;
751
+ }
752
+ sanitizeCommission() {
753
+ const com = this.consignmentAttributes.reRobeCommission;
754
+ if (Number.isNaN(parseFloat(String(com)))) {
755
+ return 0.5;
756
+ }
757
+ if (parseFloat(String(com)) <= 1) {
758
+ return parseFloat(String(com));
759
+ }
760
+ return parseFloat(String(com)) / 100;
761
+ }
370
762
  }
371
763
  exports.default = Product;
@@ -20,6 +20,7 @@ declare type MerchantObj = {
20
20
  numOrders: number;
21
21
  numProducts: number;
22
22
  orderTags: string[];
23
+ productTags: string[];
23
24
  theme: MerchantTheme;
24
25
  webhooks: MerchantWebHook[];
25
26
  webshopTenantId: string;
@@ -231,3 +231,67 @@ declare type InventoryLocation = {
231
231
  incomingAmount: number;
232
232
  availableAmount: number;
233
233
  };
234
+ declare type TypesenseProductObj = {
235
+ brand: string;
236
+ clothingSize: string[];
237
+ jeanSize: string;
238
+ shoeSize: string;
239
+ condition: string;
240
+ featuredCollections: string[];
241
+ isOnSale: string;
242
+ merchants: string[];
243
+ price: number;
244
+ suggestedResalePrice: number;
245
+ salePrice: number;
246
+ compareAtPrice: number;
247
+ costPerItem: number;
248
+ priceRange: string;
249
+ productCategory: string;
250
+ productType: string;
251
+ productStyle: string[];
252
+ reRobeCommission: number;
253
+ rfidTag: string;
254
+ salesChannel: string[];
255
+ status: string;
256
+ tags: string[];
257
+ title: string;
258
+ vendorName: string;
259
+ vendorId: string;
260
+ createdAtTimestamp: number;
261
+ updatedAtTimestamp: number;
262
+ sellRequestReviewTimestamp: number;
263
+ sellRequestReviewDraftTimestamp: number;
264
+ rejectedTimestamp: number;
265
+ holdTimestamp: number;
266
+ acceptedTimestamp: number;
267
+ sellerToDropOffTimestamp: number;
268
+ sellerToShipTimestamp: number;
269
+ sellerToGetPickUpTimestamp: number;
270
+ qualityControlTimestamp: number;
271
+ pendingPublicationTimestamp: number;
272
+ listedTimestamp: number;
273
+ clearanceTimestamp: number;
274
+ reservedTimestamp: number;
275
+ soldTimestamp: number;
276
+ returnedTimestamp: number;
277
+ soldSellerToBePaidTimestamp: number;
278
+ soldSellerPaidTimestamp: number;
279
+ sellerSelfRejectTimestamp: number;
280
+ liquidationRequestedTimestamp: number;
281
+ sellerLiquidatedTimestamp: number;
282
+ availableForSale: boolean;
283
+ color: string;
284
+ description: string;
285
+ discountType: string;
286
+ discountValue: number;
287
+ id: string;
288
+ documentId: string;
289
+ gender: string;
290
+ handle: string;
291
+ imageUrls: string[];
292
+ sellRequestImageUrls: string[];
293
+ reservedBy: string[];
294
+ 'inventoryLocations.ids': string[];
295
+ 'materialComposition.names': string[];
296
+ [key: string]: any;
297
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rerobe-js-orm",
3
- "version": "2.4.85",
3
+ "version": "2.4.89",
4
4
  "description": "ReRobe's Javascript ORM Framework",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",