rerobe-js-orm 2.4.56 → 2.4.61

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;
7
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
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,
@@ -30,6 +30,7 @@ class MerchantFromFormState extends MerchantFactory_1.default {
30
30
  theme: (_j = fs.props) === null || _j === void 0 ? void 0 : _j.theme,
31
31
  webshopTenantId: (_k = fs.props) === null || _k === void 0 ? void 0 : _k.webshopTenantId,
32
32
  webhooks: fs.fields.webhooks.selectedValues,
33
+ sharedSecret: (_l = fs.props) === null || _l === void 0 ? void 0 : _l.sharedSecret,
33
34
  };
34
35
  return new Merchant_1.default(Object.assign({}, merchantAttributes));
35
36
  }
@@ -6,19 +6,16 @@ class WebhookFormState extends FormState_1.default {
6
6
  constructor(props) {
7
7
  super();
8
8
  this.props = {
9
- key: (props === null || props === void 0 ? void 0 : props.key) || '',
10
- method: (props === null || props === void 0 ? void 0 : props.method) || '',
11
- url: (props === null || props === void 0 ? void 0 : props.url) || '',
9
+ event: (props === null || props === void 0 ? void 0 : props.event) || '',
10
+ callBackUrl: (props === null || props === void 0 ? void 0 : props.callBackUrl) || '',
12
11
  };
13
- this.fields.key = this.fieldFactory('singleSelect', 'key', options_1.webhookKeyOptions);
14
- this.fields.method = this.fieldFactory('singleSelect', 'method', options_1.httpRequestMethodOptions);
15
- this.fields.url = this.fieldFactory('textInput', 'url');
12
+ this.fields.event = this.fieldFactory('singleSelect', 'event', options_1.webhookKeyOptions);
13
+ this.fields.callBackUrl = this.fieldFactory('textInput', 'callBackUrl');
16
14
  }
17
15
  toObj() {
18
16
  return {
19
- key: this.fields.key.selectedValue,
20
- method: this.fields.method.selectedValue,
21
- url: this.fields.url.inputValue,
17
+ event: this.fields.event.selectedValue,
18
+ callBackUrl: this.fields.callBackUrl.inputValue,
22
19
  };
23
20
  }
24
21
  fieldFactory(fieldType, fieldKey, fieldOptions) {
@@ -363,9 +363,9 @@ const tzArr = [
363
363
  const timeZoneOptions = tzArr.map((tz) => ({ label: `${tz[2]}`, value: `${tz[2]}` }));
364
364
  exports.timeZoneOptions = timeZoneOptions;
365
365
  const webhookKeyOptions = [
366
- { label: 'Create Product', value: Merchant_1.default.RIBBN_WEBHOOK_DICT.createProductWebhook },
367
- { label: 'Update Product', value: Merchant_1.default.RIBBN_WEBHOOK_DICT.updateProductWebhook },
368
- { label: 'Delete Product', value: Merchant_1.default.RIBBN_WEBHOOK_DICT.deleteProductWebhook },
366
+ { label: 'Create Product', value: Merchant_1.default.RIBBN_WEBHOOK_EVENT_DICT.productCreate },
367
+ { label: 'Update Product', value: Merchant_1.default.RIBBN_WEBHOOK_EVENT_DICT.productUpdate },
368
+ { label: 'Delete Product', value: Merchant_1.default.RIBBN_WEBHOOK_EVENT_DICT.productDelete },
369
369
  ];
370
370
  exports.webhookKeyOptions = webhookKeyOptions;
371
371
  const httpRequestMethodOptions = [
@@ -7,10 +7,13 @@ export default class ReRobeProductHelpers {
7
7
  static sizeCommentPretty(sizeComment: string): string;
8
8
  static getSizeLabel(clothingSize: string[], shoeSize: string, jeanSize: string): string;
9
9
  static generateArrForDetailsBulletList(productObj: CompleteProduct): string[];
10
+ static autoCreateFullDescriptionHTML(productObj: CompleteProduct, customHeading?: string): string;
11
+ static autoCreateFullSwedishDescriptionForTraderaHTML(productObj: CompleteProduct, merchantName?: string): string;
10
12
  static prepareProductForMutation(productObj: CompleteProduct, mediaInputArr?: {
11
13
  originalSource: string;
12
14
  }[]): CompleteProduct;
13
15
  static getSubtitle(title: string): string;
14
16
  static sizeFinder(sizeLabel: string, sizeToMatch: string): boolean;
17
+ static convertReRobeSizeToStandardSize(productObj: CompleteProduct): string;
15
18
  static buildLineItem(productObj: CompleteProduct, quantity?: number): ProductLineItem;
16
19
  }
@@ -69,6 +69,7 @@ class ReRobeProductHelpers {
69
69
  }
70
70
  return '';
71
71
  }
72
+ // ToDo: refactor
72
73
  static getSizeLabel(clothingSize, shoeSize, jeanSize) {
73
74
  let sizeLabel = 'NA';
74
75
  if (clothingSize && clothingSize.length > 0 && clothingSize[0].trim()) {
@@ -98,6 +99,98 @@ class ReRobeProductHelpers {
98
99
  ];
99
100
  return descriptionArr.filter((d) => d);
100
101
  }
102
+ static autoCreateFullDescriptionHTML(productObj, customHeading) {
103
+ const productStyle = productObj.productStyle.join(', ');
104
+ const size = this.getSizeLabel(productObj.clothingSize, productObj.shoeSize, productObj.jeanSize);
105
+ const sizeComment = productObj.sizeComment;
106
+ const color = productObj.color;
107
+ const productRemarks = productObj.productRemarks;
108
+ const condition = productObj.condition;
109
+ const priceNew = productObj.purchasePrice;
110
+ const yearPurchased = productObj.yearPurchased;
111
+ const materials = this.materialCompJoinedString();
112
+ const measurements = this.measurementsJoinedString(productObj.measurements);
113
+ const fit = options_1.sizeCommentOptions.filter((option) => option.value === sizeComment)[0].label;
114
+ const descriptionObj = {
115
+ title: customHeading ? `<p>${customHeading}</p>\n` : 'REMOVE_ME',
116
+ line0: `<ul>`,
117
+ line1: size ? `\n<li>Size: ${size}</li>` : 'REMOVE_ME',
118
+ line2: fit ? `\n<li>Fit: ${fit}</li>` : 'REMOVE_ME',
119
+ line3: condition ? `\n<li>Condition: ${condition}</li>` : 'REMOVE_ME',
120
+ line4: color ? `\n<li>Color: ${color}</li>` : 'REMOVE_ME',
121
+ line5: productStyle && productStyle.length > 0 ? `\n<li>Style: ${productStyle}</li>` : 'REMOVE_ME',
122
+ line6: materials ? `\n<li>Material: ${materials}</li>` : 'REMOVE_ME',
123
+ line7: measurements ? `\n<li>Measurements: ${measurements}</li>` : 'REMOVE_ME',
124
+ line8: productRemarks ? `\n<li>Remarks: ${productRemarks}</li>` : 'REMOVE_ME',
125
+ line9: priceNew ? `\n<li>Purchase price: ${priceNew}</li>` : 'REMOVE_ME',
126
+ line10: yearPurchased ? `\n<li>Year purchased: ${yearPurchased}</li>` : 'REMOVE_ME',
127
+ line11: `\n</ul>`,
128
+ };
129
+ return Object.values(descriptionObj).reduce((acc, cur) => {
130
+ if (!cur.includes('REMOVE_ME')) {
131
+ acc = acc.concat(cur);
132
+ }
133
+ return acc;
134
+ }, '');
135
+ }
136
+ static autoCreateFullSwedishDescriptionForTraderaHTML(productObj, merchantName = 'våra') {
137
+ return `
138
+ <p>
139
+ <strong>Beskrivning</strong>
140
+ ${String(this.autoCreateFullDescriptionHTML(productObj)).trim()}
141
+ </p>
142
+
143
+ <p>
144
+ <strong>Angiven storlek</strong>
145
+ <br>
146
+ Storlekar beskrivs enligt befintliga lappar på plaggen samt från före detta ägare av plagget. Om en lapp eller angiven storlek saknas, uppskattas en ungefärlig storlek av oss. Vi försöker även alltid att mäta produkter som underdelar, väskor och accessoarer. Vid mer information kring specifika plagg och dess mått finns vi ett meddelande bort med snabbt svar på detta..
147
+ </p>
148
+
149
+ <p>
150
+ <strong>Skick</strong>
151
+ <br>
152
+ Alla våra produkter är begagnade och säljs i befintligt skick. Varje plagg genomgår en noga genomförd kvalitetskontroll där de kontrolleras och autentiseras av ${merchantName}’s produktions team och säljs endast i bästa möjliga skick. Läs mer om detta under vår FAQ-flik på vår hemsida samt i vår app.
153
+ </p>
154
+
155
+ <p>
156
+ <strong>Prissättning</strong>
157
+ <br>
158
+ Våra priser är baserade på de accepterade prisförslag som angetts vid inlämning av plagg. Vi ger prisförslag enligt vår egen historiska data, research från andra plattformar samt vår djupa kunskap om modebranschen, dess nuvarande trender och stilar.
159
+ </p>
160
+
161
+ <p>
162
+ <strong>Betalning</strong>
163
+ <br>
164
+ Vi använder oss av "Tradera betalning" vilket innebär att du som köpare kan välja att betala med Swish, kort eller PayPal. ${merchantName}’s rabatter och erbjudanden gäller endast vid köp på vår hemsida samt via vår app.
165
+ <br>
166
+ <br>
167
+ Tänk på att produkter kan ligga i flera varukorgar samtidigt. Om din vara står som ”slut/såld” vid utcheckningen beror det på att någon annan hunnit före.
168
+ </p>
169
+
170
+ <p>
171
+ <strong>Retur</strong>
172
+ <br>
173
+ Vi har 14 dagars öppet köp från då din order har packats och levererats till dig. Returer är endast giltiga om prislappen sitter kvar, samt att varan är i samma skick som när du köpte den. Via Tradera är det du som kund som står för frakten vid returer. Läs mer om detta under vår FAQ-flik.
174
+ </p>
175
+
176
+ <p>
177
+ <strong>Frakt</strong>
178
+ <br>
179
+ Vi skickar alla våra ordrar via Postnord till hela Sverige, samt internationellt. Vi packar och skickar din order inom 24h, och din order ska vara hos dig inom 1-3 arbetsdagar. Om din order ska skickas till annan adress än den som är angiven på Tradera kontakt gärna oss innan betalning.
180
+ </p>
181
+
182
+ <p>
183
+ <strong>Frakt 69:- oavsett antal varor</strong>
184
+ <br>
185
+ <br>
186
+ * Det vill säga, endast en fraktkostnad vid köp av flertalet varor.
187
+ <br>
188
+ * Vi samfraktar alla varor som beställs vid ett och samma tillfälle.
189
+ <br>
190
+ * For international buyers within the EU the displayed shipping cost is accurate.
191
+ </p>
192
+ `;
193
+ }
101
194
  static prepareProductForMutation(productObj, mediaInputArr = []) {
102
195
  const productObjClone = Object.assign({}, productObj);
103
196
  const { status, dateInQualityControl, dateInPendingPublication, dateListedOnline, publishedAt, price } = productObj;
@@ -189,6 +282,31 @@ class ReRobeProductHelpers {
189
282
  }
190
283
  return false;
191
284
  }
285
+ static convertReRobeSizeToStandardSize(productObj) {
286
+ let size = 'Not Applicable';
287
+ if (productObj.productCategory === 'Clothing' && productObj.productType !== 'Jeans') {
288
+ if (productObj.clothingSize && productObj.clothingSize.length > 0) {
289
+ const arr = productObj.clothingSize[0].split('(');
290
+ if (arr.length === 2) {
291
+ const [universalSize] = arr;
292
+ size = universalSize.trim();
293
+ }
294
+ if (arr.length === 1) {
295
+ [size] = productObj.clothingSize;
296
+ }
297
+ }
298
+ }
299
+ if (productObj.productType === 'Jeans') {
300
+ size = productObj.jeanSize;
301
+ }
302
+ if (productObj.productCategory === 'Shoes') {
303
+ size = productObj.shoeSize;
304
+ }
305
+ if (size === 'No Size') {
306
+ size = 'Not Applicable';
307
+ }
308
+ return size;
309
+ }
192
310
  // RibbnProductHelper candidate
193
311
  static buildLineItem(productObj, quantity = 1) {
194
312
  const { documentId, title, price, coverPhotoUrl, imageUrls, brand } = productObj;
package/lib/index.d.ts CHANGED
@@ -27,7 +27,8 @@ import ProductStateManager from './models/ProductStateManager';
27
27
  import PayoutAccount from './models/PayoutAccount';
28
28
  import PayoutAccountFormState from './form-states/PayoutAccount/PayoutAccountFormState';
29
29
  import MerchantFormState from './form-states/Merchant/MerchantFormState';
30
+ import WebhookFormState from './form-states/Merchant/WebhookFormState';
30
31
  import ReRobeProductHelpers from './helpers/ReRobeProductHelpers';
31
32
  import AnalyticsHelpers from './helpers/AnalyticsHelpers';
32
33
  import OrderHelpers from './helpers/OrderHelpers';
33
- export { ProductFromAlgoliaJSONDoc, ProductFromShopifyWebhookJSONDoc, ProductFromShopifyJSClientJSONDoc, ProductFormStateFactory, SellRequestFormStateFactory, PickUpFormStateFactory, AddressFormStateFactory, UserFormStateFactory, UserFromShopifyWebhookJSONDoc, UserFromAuthTemplateMethod, DraftOrderFromMirakl, DraftOrderFromApp, ChatRoomFromNewUserSignUp, KlarnaSessionFactory, Product, ProductStateManager, Order, OrderFromShopifyWebhook, OrderFromShopifyAdminApi, OrderFromShopifyStorefrontApi, OrderFromApp, OrderFormStateFactory, RefundFormStateFactory, PayoutAccount, PayoutAccountFormState, Merchant, MerchantFormState, MerchantFormStateFactory, ReRobeProductHelpers, User, AnalyticsHelpers, OrderHelpers, };
34
+ export { ProductFromAlgoliaJSONDoc, ProductFromShopifyWebhookJSONDoc, ProductFromShopifyJSClientJSONDoc, ProductFormStateFactory, SellRequestFormStateFactory, PickUpFormStateFactory, AddressFormStateFactory, UserFormStateFactory, UserFromShopifyWebhookJSONDoc, UserFromAuthTemplateMethod, DraftOrderFromMirakl, DraftOrderFromApp, ChatRoomFromNewUserSignUp, KlarnaSessionFactory, Product, ProductStateManager, Order, OrderFromShopifyWebhook, OrderFromShopifyAdminApi, OrderFromShopifyStorefrontApi, OrderFromApp, OrderFormStateFactory, RefundFormStateFactory, PayoutAccount, PayoutAccountFormState, Merchant, MerchantFormState, MerchantFormStateFactory, ReRobeProductHelpers, User, AnalyticsHelpers, OrderHelpers, WebhookFormState, };
package/lib/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.OrderHelpers = exports.AnalyticsHelpers = exports.User = exports.ReRobeProductHelpers = exports.MerchantFormStateFactory = exports.MerchantFormState = exports.Merchant = exports.PayoutAccountFormState = exports.PayoutAccount = exports.RefundFormStateFactory = exports.OrderFormStateFactory = exports.OrderFromApp = exports.OrderFromShopifyStorefrontApi = exports.OrderFromShopifyAdminApi = exports.OrderFromShopifyWebhook = exports.Order = exports.ProductStateManager = exports.Product = exports.KlarnaSessionFactory = exports.ChatRoomFromNewUserSignUp = exports.DraftOrderFromApp = exports.DraftOrderFromMirakl = exports.UserFromAuthTemplateMethod = exports.UserFromShopifyWebhookJSONDoc = exports.UserFormStateFactory = exports.AddressFormStateFactory = exports.PickUpFormStateFactory = exports.SellRequestFormStateFactory = exports.ProductFormStateFactory = exports.ProductFromShopifyJSClientJSONDoc = exports.ProductFromShopifyWebhookJSONDoc = exports.ProductFromAlgoliaJSONDoc = void 0;
3
+ exports.WebhookFormState = exports.OrderHelpers = exports.AnalyticsHelpers = exports.User = exports.ReRobeProductHelpers = exports.MerchantFormStateFactory = exports.MerchantFormState = exports.Merchant = exports.PayoutAccountFormState = exports.PayoutAccount = exports.RefundFormStateFactory = exports.OrderFormStateFactory = exports.OrderFromApp = exports.OrderFromShopifyStorefrontApi = exports.OrderFromShopifyAdminApi = exports.OrderFromShopifyWebhook = exports.Order = exports.ProductStateManager = exports.Product = exports.KlarnaSessionFactory = exports.ChatRoomFromNewUserSignUp = exports.DraftOrderFromApp = exports.DraftOrderFromMirakl = exports.UserFromAuthTemplateMethod = exports.UserFromShopifyWebhookJSONDoc = exports.UserFormStateFactory = exports.AddressFormStateFactory = exports.PickUpFormStateFactory = exports.SellRequestFormStateFactory = exports.ProductFormStateFactory = exports.ProductFromShopifyJSClientJSONDoc = exports.ProductFromShopifyWebhookJSONDoc = exports.ProductFromAlgoliaJSONDoc = void 0;
4
4
  const ProductFromShopifyJSClientJSONDoc_1 = require("./factories/Product/ProductFromShopifyJSClientJSONDoc");
5
5
  exports.ProductFromShopifyJSClientJSONDoc = ProductFromShopifyJSClientJSONDoc_1.default;
6
6
  const ProductFromAlgoliaJSONDoc_1 = require("./factories/Product/ProductFromAlgoliaJSONDoc");
@@ -59,6 +59,8 @@ const PayoutAccountFormState_1 = require("./form-states/PayoutAccount/PayoutAcco
59
59
  exports.PayoutAccountFormState = PayoutAccountFormState_1.default;
60
60
  const MerchantFormState_1 = require("./form-states/Merchant/MerchantFormState");
61
61
  exports.MerchantFormState = MerchantFormState_1.default;
62
+ const WebhookFormState_1 = require("./form-states/Merchant/WebhookFormState");
63
+ exports.WebhookFormState = WebhookFormState_1.default;
62
64
  const ReRobeProductHelpers_1 = require("./helpers/ReRobeProductHelpers");
63
65
  exports.ReRobeProductHelpers = ReRobeProductHelpers_1.default;
64
66
  const AnalyticsHelpers_1 = require("./helpers/AnalyticsHelpers");
@@ -31,10 +31,10 @@ export default class Merchant extends Base {
31
31
  pound: string;
32
32
  once: string;
33
33
  };
34
- static RIBBN_WEBHOOK_DICT: {
35
- createProductWebhook: string;
36
- updateProductWebhook: string;
37
- deleteProductWebhook: string;
34
+ static RIBBN_WEBHOOK_EVENT_DICT: {
35
+ productCreate: string;
36
+ productUpdate: string;
37
+ productDelete: string;
38
38
  };
39
39
  name: string;
40
40
  id: string;
@@ -60,6 +60,7 @@ export default class Merchant extends Base {
60
60
  theme: MerchantTheme;
61
61
  webshopTenantId: string;
62
62
  webhooks: MerchantWebHook[];
63
+ sharedSecret: string;
63
64
  constructor(props?: any);
64
65
  toObj(): MerchantObj;
65
66
  }
@@ -49,6 +49,7 @@ class Merchant extends Base_1.default {
49
49
  };
50
50
  this.webshopTenantId = (props === null || props === void 0 ? void 0 : props.webshopTenantId) || '';
51
51
  this.webhooks = (props === null || props === void 0 ? void 0 : props.webhooks) || [];
52
+ this.sharedSecret = (props === null || props === void 0 ? void 0 : props.sharedSecret) || '';
52
53
  }
53
54
  toObj() {
54
55
  return {
@@ -76,6 +77,7 @@ class Merchant extends Base_1.default {
76
77
  theme: this.theme,
77
78
  webshopTenantId: this.webshopTenantId,
78
79
  webhooks: this.webhooks,
80
+ sharedSecret: this.sharedSecret,
79
81
  };
80
82
  }
81
83
  }
@@ -111,9 +113,9 @@ Merchant.IMPERIAL_WEIGHT_TYPES = {
111
113
  pound: 'POUND',
112
114
  once: 'ONCE',
113
115
  };
114
- Merchant.RIBBN_WEBHOOK_DICT = {
115
- createProductWebhook: 'CREATE_PRODUCT_WEBHOOK',
116
- updateProductWebhook: 'UPDATE_PRODUCT_WEBHOOK',
117
- deleteProductWebhook: 'DELETE_PRODUCT_WEBHOOK',
118
- // TODO: Add webhook keys for other models (Orders, User, etc)
116
+ Merchant.RIBBN_WEBHOOK_EVENT_DICT = {
117
+ productCreate: 'PRODUCT_CREATE',
118
+ productUpdate: 'PRODUCT_UPDATE',
119
+ productDelete: 'PRODUCT_DELETE',
120
+ // TODO: Add webhook events for other models (Orders, User, etc)
119
121
  };
@@ -23,6 +23,7 @@ declare type MerchantObj = {
23
23
  theme: MerchantTheme;
24
24
  webhooks: MerchantWebHook[];
25
25
  webshopTenantId: string;
26
+ sharedSecret: string;
26
27
  };
27
28
  declare type MerchantTypes = 'INDIVIDUAL' | 'BUSINESS';
28
29
  declare type RibbnPaymentTiers = 'FREE' | 'TIER_ONE';
@@ -44,9 +45,8 @@ declare type MerchantTheme = {
44
45
  warningColor: string;
45
46
  };
46
47
  declare type MerchantWebHook = {
47
- key: string;
48
- method: string;
49
- url: string;
48
+ event: string;
49
+ callBackUrl: string;
50
50
  };
51
51
  declare type MerchantFormFields = {
52
52
  name: TextInputFormField<string>;
@@ -65,7 +65,6 @@ declare type MerchantFormFields = {
65
65
  webhooks: MultiSelectFormField<MerchantWebHook>;
66
66
  };
67
67
  declare type WebhookFormFields = {
68
- key: SingleSelectFormField<string>;
69
- method: SingleSelectFormField<string>;
70
- url: TextInputFormField<string>;
68
+ event: SingleSelectFormField<string>;
69
+ callBackUrl: TextInputFormField<string>;
71
70
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rerobe-js-orm",
3
- "version": "2.4.56",
3
+ "version": "2.4.61",
4
4
  "description": "ReRobe's Javascript ORM Framework",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",