@salla.sa/twilight-components 2.14.27 → 2.14.28

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.
Files changed (46) hide show
  1. package/dist/cjs/app-globals-b3827cef.js.map +1 -1
  2. package/dist/cjs/loader.cjs.js +1 -1
  3. package/dist/cjs/salla-add-product-button_48.cjs.entry.js.map +1 -1
  4. package/dist/cjs/salla-installment.cjs.entry.js +99 -32
  5. package/dist/cjs/salla-installment.cjs.entry.js.map +1 -1
  6. package/dist/cjs/twilight.cjs.js +1 -1
  7. package/dist/collection/components/salla-installment/salla-installment.js +118 -33
  8. package/dist/collection/components/salla-installment/salla-installment.js.map +1 -1
  9. package/dist/components/index.js.map +1 -1
  10. package/dist/components/salla-installment.js +101 -33
  11. package/dist/components/salla-installment.js.map +1 -1
  12. package/dist/components/salla-quick-buy2.js.map +1 -1
  13. package/dist/esm/app-globals-c672447c.js.map +1 -1
  14. package/dist/esm/loader.js +1 -1
  15. package/dist/esm/salla-add-product-button_48.entry.js.map +1 -1
  16. package/dist/esm/salla-installment.entry.js +99 -32
  17. package/dist/esm/salla-installment.entry.js.map +1 -1
  18. package/dist/esm/twilight.js +1 -1
  19. package/dist/esm-es5/app-globals-c672447c.js.map +1 -1
  20. package/dist/esm-es5/loader.js +1 -1
  21. package/dist/esm-es5/loader.js.map +1 -1
  22. package/dist/esm-es5/salla-add-product-button_48.entry.js.map +1 -1
  23. package/dist/esm-es5/salla-installment.entry.js +1 -1
  24. package/dist/esm-es5/salla-installment.entry.js.map +1 -1
  25. package/dist/esm-es5/twilight.js +1 -1
  26. package/dist/esm-es5/twilight.js.map +1 -1
  27. package/dist/twilight/p-39996533.system.js +1 -1
  28. package/dist/twilight/p-39996533.system.js.map +1 -1
  29. package/dist/twilight/p-40f6f722.entry.js.map +1 -1
  30. package/dist/twilight/p-5e19dec7.system.entry.js +5 -0
  31. package/dist/twilight/p-5e19dec7.system.entry.js.map +1 -0
  32. package/dist/twilight/p-bded3619.system.entry.js.map +1 -1
  33. package/dist/twilight/p-c69ac412.js.map +1 -1
  34. package/dist/twilight/p-e46cdbcc.system.js.map +1 -1
  35. package/dist/twilight/p-edac071a.entry.js +5 -0
  36. package/dist/twilight/p-edac071a.entry.js.map +1 -0
  37. package/dist/twilight/twilight.esm.js +1 -1
  38. package/dist/twilight/twilight.esm.js.map +1 -1
  39. package/dist/types/components/salla-installment/salla-installment.d.ts +20 -2
  40. package/dist/types/components.d.ts +8 -0
  41. package/dist/types/global.d.ts +20 -0
  42. package/package.json +5 -5
  43. package/dist/twilight/p-19b0d8c5.entry.js +0 -5
  44. package/dist/twilight/p-19b0d8c5.entry.js.map +0 -1
  45. package/dist/twilight/p-2f50e3dc.system.entry.js +0 -5
  46. package/dist/twilight/p-2f50e3dc.system.entry.js.map +0 -1
@@ -9,13 +9,18 @@ export class SallaInstallment {
9
9
  this.price = undefined;
10
10
  this.language = salla.config.get('user.language_code');
11
11
  this.currency = salla.config.get('user.currency_code');
12
- this.tamaraIsActive = undefined;
12
+ this.country = salla.config.get('user.country_code');
13
13
  this.tabbyIsActive = undefined;
14
14
  this.spotiiIsActive = undefined;
15
+ this.tamaraIsActive = undefined;
15
16
  this.mispayActive = undefined;
16
- this.installment_sheria_text = (replacement) => salla.lang.get("pages.products.installments", replacement);
17
+ this.installment_sheria_text = replacement => salla.lang.get('pages.products.installments', replacement);
17
18
  salla.lang.onLoaded(() => {
18
- this.installment_sheria_text({ payment: salla.money(parseFloat(this.price)), amount: salla.money((parseFloat(this.price) / 3).toFixed(2)), installments: 3 });
19
+ this.installment_sheria_text({
20
+ payment: salla.money(parseFloat(this.price)),
21
+ amount: salla.money((parseFloat(this.price) / 3).toFixed(2)),
22
+ installments: 3,
23
+ });
19
24
  const installment = salla.config.get('store.settings.installments');
20
25
  if (installment) {
21
26
  this.tamaraIsActive = installment.tamara;
@@ -34,18 +39,21 @@ export class SallaInstallment {
34
39
  });
35
40
  }
36
41
  render() {
42
+ var _a;
37
43
  if (!this.isValidPrice(this.price)) {
38
44
  return '';
39
45
  }
40
- return (h(Host, null, this.tamaraIsActive ?
41
- h("div", { class: "tamara-product-widget", "data-price": this.price, "data-currency": this.currency, "data-lang": this.language, "data-payment-type": "installment" })
42
- : '', this.tabbyIsActive ?
43
- h("div", { id: "tabbyPromoWrapper" }, h("div", { id: "tabbyPromo" }))
44
- : '', this.spotiiIsActive ?
45
- h("div", { class: "spotii-wrapper" }, h("div", { class: "spotii-promo" }))
46
- : '', this.mispayActive ?
47
- h("div", { class: "s-installment-mispay-wrapper" }, h("div", { class: "s-installment-mispay-content" }, h("img", { src: salla.url.cdn('images/payment/png/mispay.png'), alt: "mispay" }), h("span", { class: "s-installment-mispay-content-text" }, this.installment_sheria_text({ payment: salla.money(parseFloat(this.price)), amount: salla.money((parseFloat(this.price) / 4).toFixed(2)), installments: 4 }))))
48
- : ''));
46
+ return (h(Host, null, this.tamaraIsActive &&
47
+ (((_a = this.tamaraIsActive) === null || _a === void 0 ? void 0 : _a.publicKey) ? (
48
+ // Tamara widget v2
49
+ h("div", { class: "mb-5" }, h("tamara-widget", { type: "tamara-summary", "inline-type": "2", amount: this.price }))) : (
50
+ // Tamara widget v1 fallback
51
+ h("div", { class: "tamara-product-widget", "data-price": this.price, "data-currency": this.currency, "data-lang": this.language, "data-payment-type": "installment" }))), this.tabbyIsActive ? (h("div", { id: "tabbyPromoWrapper" }, h("div", { id: "tabbyPromo" }))) : (''), this.spotiiIsActive ? (h("div", { class: "spotii-wrapper" }, h("div", { class: "spotii-promo" }))) : (''), this.shouldShowMispay() &&
52
+ (this.mispayActive.publicKey ? (h("div", { class: "mb-5" }, h("mispay-widget", { amount: this.price, lang: this.language }))) : (h("div", { class: "s-installment-mispay-wrapper" }, h("div", { class: "s-installment-mispay-content" }, h("img", { src: salla.url.cdn('images/payment/png/mispay.png'), alt: "mispay" }), h("span", { class: "s-installment-mispay-content-text" }, this.installment_sheria_text({
53
+ payment: salla.money(parseFloat(this.price)),
54
+ amount: salla.money((parseFloat(this.price) / 4).toFixed(2)),
55
+ installments: 4,
56
+ }))))))));
49
57
  }
50
58
  renderInstallments(isUpdating = false) {
51
59
  if (!this.isValidPrice(this.price)) {
@@ -53,21 +61,7 @@ export class SallaInstallment {
53
61
  }
54
62
  // Tamara
55
63
  if (this.tamaraIsActive) {
56
- if (isUpdating) {
57
- var oldTamaraScript = document.querySelector('script[src="https://cdn.tamara.co/widget/product-widget.min.js"]');
58
- if (oldTamaraScript) {
59
- oldTamaraScript.remove();
60
- }
61
- }
62
- var tamaraScript = document.createElement('script');
63
- tamaraScript.setAttribute('src', 'https://cdn.tamara.co/widget/product-widget.min.js');
64
- document.head.appendChild(tamaraScript);
65
- tamaraScript.onload = () => {
66
- window.TamaraProductWidget.init({ lang: this.language });
67
- setTimeout(() => {
68
- window.TamaraProductWidget.render();
69
- }, 300);
70
- };
64
+ this.loadTamara({ isUpdating });
71
65
  }
72
66
  // tabby
73
67
  if (this.tabbyIsActive) {
@@ -133,11 +127,11 @@ export class SallaInstallment {
133
127
  renderToPath: ['.spotii-promo'],
134
128
  numberOfPayment: 3,
135
129
  currency: this.currency,
136
- templateLine: "${textOne} ${number} ${textTwo} " + amount + "${logo} ${info}",
130
+ templateLine: '${textOne} ${number} ${textTwo} ' + amount + '${logo} ${info}',
137
131
  //todo:: translate these
138
- textOne: isRTL ? "جزء الدفع على" : "Split it into",
139
- textTwo: isRTL ? "أقساط متساوية بدون تكاليف اضافية بقيمة" : "payments of",
140
- textThree: "مع",
132
+ textOne: isRTL ? 'جزء الدفع على' : 'Split it into',
133
+ textTwo: isRTL ? 'أقساط متساوية بدون تكاليف اضافية بقيمة' : 'payments of',
134
+ textThree: 'مع',
141
135
  price: this.price,
142
136
  // forcedShow: false,
143
137
  // merchantID: null,
@@ -149,6 +143,13 @@ export class SallaInstallment {
149
143
  // // setTimeout()
150
144
  // }
151
145
  }
146
+ // Mispay
147
+ if (this.shouldShowMispay() && this.mispayActive.publicKey) {
148
+ this.loadExternalScript({
149
+ position: 'head',
150
+ src: `https://widget.mispay.co/v1/sdk.js?authorize=${this.mispayActive.publicKey}`,
151
+ });
152
+ }
152
153
  }
153
154
  isValidPrice(price) {
154
155
  const pricePattern = /^\d+(\.\d{1,2})?$/;
@@ -156,6 +157,70 @@ export class SallaInstallment {
156
157
  const isGreaterThanZero = parseFloat(price) > 0;
157
158
  return isValid && isGreaterThanZero;
158
159
  }
160
+ loadExternalScript({ src, onLoad, position, }) {
161
+ const script = document.createElement('script');
162
+ script.src = src;
163
+ script.onload = onLoad;
164
+ document[position].appendChild(script);
165
+ }
166
+ loadTamara({ isUpdating }) {
167
+ var _a;
168
+ const isV2Enabled = !!((_a = this.tamaraIsActive) === null || _a === void 0 ? void 0 : _a.publicKey);
169
+ if (isUpdating) {
170
+ setTimeout(() => {
171
+ var _a, _b;
172
+ if (isV2Enabled) {
173
+ return (_a = window.TamaraWidgetV2) === null || _a === void 0 ? void 0 : _a.refresh();
174
+ }
175
+ // v1 fallback widget refresh
176
+ (_b = window.TamaraProductWidget) === null || _b === void 0 ? void 0 : _b.render();
177
+ }, 300);
178
+ }
179
+ else {
180
+ if (isV2Enabled) {
181
+ const language_code = salla.config.get('user.language_code');
182
+ const lang = ['ar', 'en'].includes(language_code) ? language_code : 'ar';
183
+ // this used in case user change the currency to get the country code
184
+ const countryCodeByCurrency = this.currency.slice(0, -1);
185
+ const country = ['SA', 'AE', 'KW', 'BH', 'OM', 'QA'].includes(countryCodeByCurrency)
186
+ ? countryCodeByCurrency
187
+ : null;
188
+ if (!country) {
189
+ console.error('Tamara: Country code is not supported', countryCodeByCurrency);
190
+ }
191
+ else {
192
+ window.tamaraWidgetConfig = {
193
+ lang,
194
+ country,
195
+ publicKey: this.tamaraIsActive.publicKey,
196
+ style: {
197
+ fontSize: '14px',
198
+ },
199
+ };
200
+ this.loadExternalScript({
201
+ position: 'head',
202
+ src: 'https://cdn.tamara.co/widget-v2/tamara-widget.js',
203
+ });
204
+ }
205
+ }
206
+ else {
207
+ // v1 fallback widget
208
+ this.loadExternalScript({
209
+ position: 'head',
210
+ src: 'https://cdn.tamara.co/widget/product-widget.min.js',
211
+ onLoad: () => {
212
+ window.TamaraProductWidget.init({ lang: this.language });
213
+ setTimeout(() => {
214
+ window.TamaraProductWidget.render();
215
+ }, 300);
216
+ },
217
+ });
218
+ }
219
+ }
220
+ }
221
+ shouldShowMispay() {
222
+ return this.currency === 'SAR' && this.mispayActive && parseInt(this.price) >= 200;
223
+ }
159
224
  /**
160
225
  * this is workaround to remove the default border and add margin
161
226
  * we will try to remove tabby border 5 times for 7.5 seconds
@@ -167,7 +232,9 @@ export class SallaInstallment {
167
232
  this.tabbyRemoveBorderTries++;
168
233
  setTimeout(() => {
169
234
  let promo = document.querySelector('#tabbyPromo>div>div');
170
- promo = promo ? promo.shadowRoot.querySelector('div[class^="styles__tabby-promo-snippet--"]') : null;
235
+ promo = promo
236
+ ? promo.shadowRoot.querySelector('div[class^="styles__tabby-promo-snippet--"]')
237
+ : null;
171
238
  if (promo) {
172
239
  promo.style = 'border: none; margin: 15px 0!important;';
173
240
  this.tabbyBorderRemoved = true;
@@ -242,14 +309,32 @@ export class SallaInstallment {
242
309
  "attribute": "currency",
243
310
  "reflect": false,
244
311
  "defaultValue": "salla.config.get('user.currency_code')"
312
+ },
313
+ "country": {
314
+ "type": "string",
315
+ "mutable": false,
316
+ "complexType": {
317
+ "original": "string",
318
+ "resolved": "string",
319
+ "references": {}
320
+ },
321
+ "required": false,
322
+ "optional": false,
323
+ "docs": {
324
+ "tags": [],
325
+ "text": "Country code"
326
+ },
327
+ "attribute": "country",
328
+ "reflect": false,
329
+ "defaultValue": "salla.config.get('user.country_code')"
245
330
  }
246
331
  };
247
332
  }
248
333
  static get states() {
249
334
  return {
250
- "tamaraIsActive": {},
251
335
  "tabbyIsActive": {},
252
336
  "spotiiIsActive": {},
337
+ "tamaraIsActive": {},
253
338
  "mispayActive": {},
254
339
  "installment_sheria_text": {}
255
340
  };
@@ -1 +1 @@
1
- {"version":3,"file":"salla-installment.js","sourceRoot":"","sources":["../../../src/components/salla-installment/salla-installment.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Host, h, Prop, State, Element } from '@stencil/core';\n\n@Component({\n tag: 'salla-installment',\n styleUrl: 'salla-installment.scss',\n})\n\nexport class SallaInstallment {\n private tabbyBorderRemoved: boolean = false;\n private tabbyRemoveBorderTries: number = 0;\n @Element() host: HTMLElement;\n constructor() {\n salla.lang.onLoaded(() => {\n this.installment_sheria_text({ payment: salla.money(parseFloat(this.price)), amount: salla.money((parseFloat(this.price) / 3).toFixed(2)), installments: 3 })\n const installment = salla.config.get('store.settings.installments');\n if (installment) {\n this.tamaraIsActive = installment.tamara;\n this.tabbyIsActive = installment.tabby;\n this.spotiiIsActive = installment.spotii;\n this.mispayActive = installment.mispay;\n }\n this.renderInstallments();\n });\n\n salla.event.on('product::price.updated', ({ data }) => {\n if (!data.price || data.price == this.price) {\n return;\n }\n this.price = data.price;\n this.renderInstallments(true);\n });\n }\n\n /**\n * Current product price\n */\n @Prop() price: string;\n /**\n * Language code\n */\n @Prop() language: string = salla.config.get('user.language_code');\n /**\n * Currency code\n */\n @Prop() currency: string = salla.config.get('user.currency_code');\n\n @State() tamaraIsActive: boolean;\n @State() tabbyIsActive: boolean;\n @State() spotiiIsActive: boolean;\n @State() mispayActive: boolean;\n\n @State() installment_sheria_text: (replacement: object) => string = (replacement) => salla.lang.get(\"pages.products.installments\", replacement)\n\n render() {\n if (!this.isValidPrice(this.price)) {\n return '';\n }\n return (\n <Host>\n {this.tamaraIsActive ?\n <div class=\"tamara-product-widget\"\n data-price={this.price}\n data-currency={this.currency}\n data-lang={this.language}\n data-payment-type=\"installment\">\n </div>\n : ''}\n\n {this.tabbyIsActive ?\n <div id=\"tabbyPromoWrapper\">\n <div id=\"tabbyPromo\"></div>\n </div>\n : ''}\n\n {this.spotiiIsActive ?\n <div class=\"spotii-wrapper\">\n {/*No need for the price, the price already in the page, and also tammara & tabby doesn't have price */}\n <div class=\"spotii-promo\"></div>\n </div>\n : ''}\n {this.mispayActive ?\n <div class=\"s-installment-mispay-wrapper\">\n <div class=\"s-installment-mispay-content\">\n <img src={salla.url.cdn('images/payment/png/mispay.png')} alt=\"mispay\" />\n <span class=\"s-installment-mispay-content-text\">{this.installment_sheria_text({ payment: salla.money(parseFloat(this.price)), amount: salla.money((parseFloat(this.price) / 4).toFixed(2)), installments: 4 })}</span>\n </div>\n </div>\n : ''}\n </Host>\n );\n }\n\n renderInstallments(isUpdating: boolean = false) {\n if (!this.isValidPrice(this.price)) {\n return\n }\n // Tamara\n if (this.tamaraIsActive) {\n if (isUpdating) {\n var oldTamaraScript = document.querySelector('script[src=\"https://cdn.tamara.co/widget/product-widget.min.js\"]');\n if (oldTamaraScript) {\n oldTamaraScript.remove();\n }\n }\n\n var tamaraScript = document.createElement('script');\n tamaraScript.setAttribute('src', 'https://cdn.tamara.co/widget/product-widget.min.js');\n document.head.appendChild(tamaraScript);\n tamaraScript.onload = () => {\n window.TamaraProductWidget.init({ lang: this.language });\n setTimeout(() => {\n window.TamaraProductWidget.render();\n }, 300);\n };\n }\n\n // tabby\n if (this.tabbyIsActive) {\n if (isUpdating) {\n\n // remove #tabbyPromoWrapper and re append it\n var oldTabbyWrapper = this.host.querySelector('#tabbyPromoWrapper');\n if (oldTabbyWrapper) {\n oldTabbyWrapper.remove();\n }\n\n var tabbyPromoWrapper = document.createElement('div');\n tabbyPromoWrapper.setAttribute('id', 'tabbyPromoWrapper');\n var tabbyPromo = document.createElement('div');\n tabbyPromo.setAttribute('id', 'tabbyPromo');\n tabbyPromoWrapper.appendChild(tabbyPromo);\n this.host.appendChild(tabbyPromoWrapper);\n\n var oldTabbyScript = document.querySelector('script[src=\"https://checkout.tabby.ai/tabby-promo.js\"]');\n if (oldTabbyScript) {\n oldTabbyScript.remove();\n }\n }\n\n var tabbyScript = document.createElement('script');\n tabbyScript.setAttribute('src', 'https://checkout.tabby.ai/tabby-promo.js');\n document.head.appendChild(tabbyScript);\n tabbyScript.onload = () => {\n const TabbyPromo = window.TabbyPromo;\n new TabbyPromo({\n selector: '#tabbyPromo',\n currency: this.currency,\n price: this.price,\n lang: this.language,\n publicKey: salla.config.get('store.settings.installments.tabby.publicKey'),\n merchantCode: salla.config.get('store.settings.installments.tabby.merchantCode'),\n\n });\n document.querySelectorAll('.tabby-promo-snippet__logo').forEach(function (element) {\n element.setAttribute('aria-label', 'Tabby Logo');\n });\n }\n // this is a workaround to remove the default border and add margin\n this.removeTabbyBorder();\n }\n\n // Spotii\n if (this.spotiiIsActive) {\n if (isUpdating) {\n\n var oldSpotiiWrapper = this.host.querySelector('.spotii-wrapper');\n if (oldSpotiiWrapper) {\n oldSpotiiWrapper.remove();\n }\n\n var spotiiPromoWrapper = document.createElement('div');\n spotiiPromoWrapper.classList.add('spotii-wrapper');\n var spotiiPromo = document.createElement('div');\n spotiiPromo.classList.add('spotii-promo');\n spotiiPromoWrapper.appendChild(spotiiPromo);\n this.host.appendChild(spotiiPromoWrapper);\n var oldSpotiiScript = document.querySelector('script[src=\"' + salla.url.cdn('js/price-widget-ar-salla.js') + '\"]');\n if (oldSpotiiScript) {\n oldSpotiiScript.remove();\n }\n }\n\n let amount = salla.money((Number(this.price) / 3).toFixed(2));\n let isRTL = salla.config.get('theme.is_rtl', true);\n window.spotiiConfig = {\n targetXPath: ['.spotii-wrapper'],\n renderToPath: ['.spotii-promo'],\n numberOfPayment: 3,\n currency: this.currency,\n templateLine: \"${textOne} ${number} ${textTwo} \" + amount + \"${logo} ${info}\",\n //todo:: translate these\n textOne: isRTL ? \"جزء الدفع على\" : \"Split it into\",\n textTwo: isRTL ? \"أقساط متساوية بدون تكاليف اضافية بقيمة\" : \"payments of\",\n textThree: \"مع\",\n price: this.price,\n // forcedShow: false,\n // merchantID: null,\n };\n\n var spotiiScript = document.createElement('script');\n spotiiScript.setAttribute('src', salla.url.cdn('js/price-widget-ar-salla.js'));\n document.head.appendChild(spotiiScript);\n // spotiiScript.onload = () => {\n // // setTimeout()\n // }\n }\n }\n\n private isValidPrice(price: string): boolean {\n const pricePattern = /^\\d+(\\.\\d{1,2})?$/;\n const isValid = pricePattern.test(price);\n const isGreaterThanZero = parseFloat(price) > 0;\n\n return isValid && isGreaterThanZero;\n }\n\n /**\n * this is workaround to remove the default border and add margin\n * we will try to remove tabby border 5 times for 7.5 seconds\n */\n removeTabbyBorder() {\n if (this.tabbyBorderRemoved || this.tabbyRemoveBorderTries > 5) {\n return;\n }\n this.tabbyRemoveBorderTries++;\n setTimeout(() => {\n let promo: any = document.querySelector('#tabbyPromo>div>div');\n promo = promo ? promo.shadowRoot.querySelector('div[class^=\"styles__tabby-promo-snippet--\"]') : null;\n if (promo) {\n promo.style = 'border: none; margin: 15px 0!important;';\n this.tabbyBorderRemoved = true;\n } else {\n this.removeTabbyBorder();\n }\n }, this.tabbyRemoveBorderTries * 500)\n }\n}\n"]}
1
+ {"version":3,"file":"salla-installment.js","sourceRoot":"","sources":["../../../src/components/salla-installment/salla-installment.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Host, h, Prop, State, Element } from '@stencil/core';\n\n@Component({\n tag: 'salla-installment',\n styleUrl: 'salla-installment.scss',\n})\nexport class SallaInstallment {\n private tabbyBorderRemoved: boolean = false;\n private tabbyRemoveBorderTries: number = 0;\n @Element() host: HTMLElement;\n constructor() {\n salla.lang.onLoaded(() => {\n this.installment_sheria_text({\n payment: salla.money(parseFloat(this.price)),\n amount: salla.money((parseFloat(this.price) / 3).toFixed(2)),\n installments: 3,\n });\n const installment = salla.config.get('store.settings.installments');\n if (installment) {\n this.tamaraIsActive = installment.tamara;\n this.tabbyIsActive = installment.tabby;\n this.spotiiIsActive = installment.spotii;\n this.mispayActive = installment.mispay;\n }\n this.renderInstallments();\n });\n\n salla.event.on('product::price.updated', ({ data }) => {\n if (!data.price || data.price == this.price) {\n return;\n }\n this.price = data.price;\n this.renderInstallments(true);\n });\n }\n\n /**\n * Current product price\n */\n @Prop() price: string;\n /**\n * Language code\n */\n @Prop() language: string = salla.config.get('user.language_code');\n /**\n * Currency code\n */\n @Prop() currency: string = salla.config.get('user.currency_code');\n /**\n * Country code\n */\n @Prop() country: string = salla.config.get('user.country_code');\n\n @State() tabbyIsActive: boolean;\n @State() spotiiIsActive: boolean;\n @State() tamaraIsActive: null | { publicKey: string };\n @State() mispayActive: null | { merchantCode: string; publicKey: string };\n\n @State() installment_sheria_text: (replacement: object) => string = replacement =>\n salla.lang.get('pages.products.installments', replacement);\n\n render() {\n if (!this.isValidPrice(this.price)) {\n return '';\n }\n return (\n <Host>\n {this.tamaraIsActive &&\n (this.tamaraIsActive?.publicKey ? (\n // Tamara widget v2\n <div class=\"mb-5\">\n <tamara-widget\n type=\"tamara-summary\"\n inline-type=\"2\"\n amount={this.price}\n ></tamara-widget>\n </div>\n ) : (\n // Tamara widget v1 fallback\n <div\n class=\"tamara-product-widget\"\n data-price={this.price}\n data-currency={this.currency}\n data-lang={this.language}\n data-payment-type=\"installment\"\n ></div>\n ))}\n\n {this.tabbyIsActive ? (\n <div id=\"tabbyPromoWrapper\">\n <div id=\"tabbyPromo\"></div>\n </div>\n ) : (\n ''\n )}\n\n {this.spotiiIsActive ? (\n <div class=\"spotii-wrapper\">\n {/*No need for the price, the price already in the page, and also tammara & tabby doesn't have price */}\n <div class=\"spotii-promo\"></div>\n </div>\n ) : (\n ''\n )}\n\n {this.shouldShowMispay() &&\n (this.mispayActive.publicKey ? (\n <div class=\"mb-5\">\n <mispay-widget amount={this.price} lang={this.language}></mispay-widget>\n </div>\n ) : (\n <div class=\"s-installment-mispay-wrapper\">\n <div class=\"s-installment-mispay-content\">\n <img src={salla.url.cdn('images/payment/png/mispay.png')} alt=\"mispay\" />\n <span class=\"s-installment-mispay-content-text\">\n {this.installment_sheria_text({\n payment: salla.money(parseFloat(this.price)),\n amount: salla.money((parseFloat(this.price) / 4).toFixed(2)),\n installments: 4,\n })}\n </span>\n </div>\n </div>\n ))}\n </Host>\n );\n }\n\n renderInstallments(isUpdating: boolean = false) {\n if (!this.isValidPrice(this.price)) {\n return;\n }\n // Tamara\n if (this.tamaraIsActive) {\n this.loadTamara({ isUpdating });\n }\n\n // tabby\n if (this.tabbyIsActive) {\n if (isUpdating) {\n // remove #tabbyPromoWrapper and re append it\n var oldTabbyWrapper = this.host.querySelector('#tabbyPromoWrapper');\n if (oldTabbyWrapper) {\n oldTabbyWrapper.remove();\n }\n\n var tabbyPromoWrapper = document.createElement('div');\n tabbyPromoWrapper.setAttribute('id', 'tabbyPromoWrapper');\n var tabbyPromo = document.createElement('div');\n tabbyPromo.setAttribute('id', 'tabbyPromo');\n tabbyPromoWrapper.appendChild(tabbyPromo);\n this.host.appendChild(tabbyPromoWrapper);\n\n var oldTabbyScript = document.querySelector(\n 'script[src=\"https://checkout.tabby.ai/tabby-promo.js\"]',\n );\n if (oldTabbyScript) {\n oldTabbyScript.remove();\n }\n }\n\n var tabbyScript = document.createElement('script');\n tabbyScript.setAttribute('src', 'https://checkout.tabby.ai/tabby-promo.js');\n document.head.appendChild(tabbyScript);\n tabbyScript.onload = () => {\n const TabbyPromo = window.TabbyPromo;\n new TabbyPromo({\n selector: '#tabbyPromo',\n currency: this.currency,\n price: this.price,\n lang: this.language,\n publicKey: salla.config.get('store.settings.installments.tabby.publicKey'),\n merchantCode: salla.config.get('store.settings.installments.tabby.merchantCode'),\n });\n document.querySelectorAll('.tabby-promo-snippet__logo').forEach(function (element) {\n element.setAttribute('aria-label', 'Tabby Logo');\n });\n };\n // this is a workaround to remove the default border and add margin\n this.removeTabbyBorder();\n }\n\n // Spotii\n if (this.spotiiIsActive) {\n if (isUpdating) {\n var oldSpotiiWrapper = this.host.querySelector('.spotii-wrapper');\n if (oldSpotiiWrapper) {\n oldSpotiiWrapper.remove();\n }\n\n var spotiiPromoWrapper = document.createElement('div');\n spotiiPromoWrapper.classList.add('spotii-wrapper');\n var spotiiPromo = document.createElement('div');\n spotiiPromo.classList.add('spotii-promo');\n spotiiPromoWrapper.appendChild(spotiiPromo);\n this.host.appendChild(spotiiPromoWrapper);\n var oldSpotiiScript = document.querySelector(\n 'script[src=\"' + salla.url.cdn('js/price-widget-ar-salla.js') + '\"]',\n );\n if (oldSpotiiScript) {\n oldSpotiiScript.remove();\n }\n }\n\n let amount = salla.money((Number(this.price) / 3).toFixed(2));\n let isRTL = salla.config.get('theme.is_rtl', true);\n window.spotiiConfig = {\n targetXPath: ['.spotii-wrapper'],\n renderToPath: ['.spotii-promo'],\n numberOfPayment: 3,\n currency: this.currency,\n templateLine: '${textOne} ${number} ${textTwo} ' + amount + '${logo} ${info}',\n //todo:: translate these\n textOne: isRTL ? 'جزء الدفع على' : 'Split it into',\n textTwo: isRTL ? 'أقساط متساوية بدون تكاليف اضافية بقيمة' : 'payments of',\n textThree: 'مع',\n price: this.price,\n // forcedShow: false,\n // merchantID: null,\n };\n\n var spotiiScript = document.createElement('script');\n spotiiScript.setAttribute('src', salla.url.cdn('js/price-widget-ar-salla.js'));\n document.head.appendChild(spotiiScript);\n // spotiiScript.onload = () => {\n // // setTimeout()\n // }\n }\n\n // Mispay\n if (this.shouldShowMispay() && this.mispayActive.publicKey) {\n this.loadExternalScript({\n position: 'head',\n src: `https://widget.mispay.co/v1/sdk.js?authorize=${this.mispayActive.publicKey}`,\n });\n }\n }\n\n private isValidPrice(price: string): boolean {\n const pricePattern = /^\\d+(\\.\\d{1,2})?$/;\n const isValid = pricePattern.test(price);\n const isGreaterThanZero = parseFloat(price) > 0;\n\n return isValid && isGreaterThanZero;\n }\n\n loadExternalScript({\n src,\n onLoad,\n position,\n }: {\n src: string;\n onLoad?: HTMLScriptElement['onload'];\n position: 'head' | 'body';\n }) {\n const script = document.createElement('script');\n script.src = src;\n script.onload = onLoad;\n document[position].appendChild(script);\n }\n\n loadTamara({ isUpdating }: { isUpdating: boolean }) {\n const isV2Enabled = !!this.tamaraIsActive?.publicKey;\n\n if (isUpdating) {\n setTimeout(() => {\n if (isV2Enabled) {\n return window.TamaraWidgetV2?.refresh();\n }\n\n // v1 fallback widget refresh\n window.TamaraProductWidget?.render();\n }, 300);\n } else {\n if (isV2Enabled) {\n const language_code = salla.config.get('user.language_code');\n const lang = ['ar', 'en'].includes(language_code) ? language_code : 'ar';\n // this used in case user change the currency to get the country code\n const countryCodeByCurrency = this.currency.slice(0, -1);\n const country = ['SA', 'AE', 'KW', 'BH', 'OM', 'QA'].includes(countryCodeByCurrency)\n ? countryCodeByCurrency\n : null;\n\n if (!country) {\n console.error('Tamara: Country code is not supported', countryCodeByCurrency);\n } else {\n window.tamaraWidgetConfig = {\n lang,\n country,\n publicKey: this.tamaraIsActive.publicKey,\n style: {\n fontSize: '14px',\n },\n };\n\n this.loadExternalScript({\n position: 'head',\n src: 'https://cdn.tamara.co/widget-v2/tamara-widget.js',\n });\n }\n } else {\n // v1 fallback widget\n this.loadExternalScript({\n position: 'head',\n src: 'https://cdn.tamara.co/widget/product-widget.min.js',\n onLoad: () => {\n window.TamaraProductWidget.init({ lang: this.language });\n setTimeout(() => {\n window.TamaraProductWidget.render();\n }, 300);\n },\n });\n }\n }\n }\n\n shouldShowMispay() {\n return this.currency === 'SAR' && this.mispayActive && parseInt(this.price) >= 200;\n }\n\n /**\n * this is workaround to remove the default border and add margin\n * we will try to remove tabby border 5 times for 7.5 seconds\n */\n removeTabbyBorder() {\n if (this.tabbyBorderRemoved || this.tabbyRemoveBorderTries > 5) {\n return;\n }\n this.tabbyRemoveBorderTries++;\n setTimeout(() => {\n let promo: any = document.querySelector('#tabbyPromo>div>div');\n promo = promo\n ? promo.shadowRoot.querySelector('div[class^=\"styles__tabby-promo-snippet--\"]')\n : null;\n if (promo) {\n promo.style = 'border: none; margin: 15px 0!important;';\n this.tabbyBorderRemoved = true;\n } else {\n this.removeTabbyBorder();\n }\n }, this.tabbyRemoveBorderTries * 500);\n }\n}\n"]}