@inappstory/slide-api 0.1.51 → 0.1.52

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/dist/index.d.cts CHANGED
@@ -130,7 +130,9 @@ declare class WidgetTimer extends WidgetBase<WidgetTimerOptions> {
130
130
  };
131
131
  }
132
132
 
133
- type WidgetBarcodeOptions = WidgetOptionsBase;
133
+ type WidgetBarcodeOptions = WidgetOptionsBase & {
134
+ layers: Array<HTMLElement>;
135
+ };
134
136
 
135
137
  declare class WidgetBarcode extends WidgetBase<WidgetBarcodeOptions> {
136
138
  static DEFAULTS: WidgetBarcodeOptions;
@@ -148,6 +150,9 @@ declare class WidgetBarcode extends WidgetBase<WidgetBarcodeOptions> {
148
150
  private readonly msgNoMoreCodes;
149
151
  private readonly msgTryAgain;
150
152
  private readonly msgBarcodeRenderError;
153
+ private readonly promocodeExhaustedAction;
154
+ private readonly promocodeExhaustedNotificationText;
155
+ private readonly layers;
151
156
  constructor(element: HTMLElement, options: Partial<WidgetBarcodeOptions>, widgetCallbacks: WidgetCallbacks, widgetDeps: WidgetDeps);
152
157
  /**
153
158
  * Start or restart widget
@@ -170,17 +175,22 @@ declare class WidgetBarcode extends WidgetBase<WidgetBarcodeOptions> {
170
175
  copyToClipboard(element: HTMLElement): void;
171
176
  private completeWidget;
172
177
  isDone(): boolean;
178
+ doPromocodeExhaustedAction(): void;
179
+ private showPromocodeExhaustedNotification;
180
+ private showPromocodeExhaustedLayer;
173
181
  static api: {
174
182
  widgetClassName: string;
175
183
  onRefreshUserData: typeof WidgetBase.onRefreshUserData;
176
- init: (element: HTMLElement, localData: Record<string, any>, widgetCallbacks: WidgetCallbacks, widgetDeps: WidgetDeps) => void;
184
+ init: (element: HTMLElement, layers: Array<HTMLElement>, localData: Record<string, any>, widgetCallbacks: WidgetCallbacks, widgetDeps: WidgetDeps) => void;
177
185
  onStart: (element: HTMLElement) => void;
178
186
  onStop: (element: HTMLElement) => void;
179
187
  click: (element: HTMLElement) => boolean;
180
188
  };
181
189
  }
182
190
 
183
- type WidgetCopyOptions = WidgetOptionsBase;
191
+ type WidgetCopyOptions = WidgetOptionsBase & {
192
+ layers: Array<HTMLElement>;
193
+ };
184
194
 
185
195
  declare class WidgetCopy extends WidgetBase<WidgetCopyOptions> {
186
196
  static DEFAULTS: WidgetCopyOptions;
@@ -197,6 +207,9 @@ declare class WidgetCopy extends WidgetBase<WidgetCopyOptions> {
197
207
  private readonly geometry;
198
208
  private readonly resultLayer;
199
209
  private readonly resultLayerGeometry;
210
+ private readonly promocodeExhaustedAction;
211
+ private readonly promocodeExhaustedNotificationText;
212
+ private readonly layers;
200
213
  constructor(element: HTMLElement, options: Partial<WidgetCopyOptions>, widgetCallbacks: WidgetCallbacks, widgetDeps: WidgetDeps);
201
214
  /**
202
215
  * Start or restart widget
@@ -216,17 +229,22 @@ declare class WidgetCopy extends WidgetBase<WidgetCopyOptions> {
216
229
  copyToClipboard(element: HTMLElement): void;
217
230
  private completeWidget;
218
231
  isDone(): boolean;
232
+ doPromocodeExhaustedAction(): void;
233
+ private showPromocodeExhaustedNotification;
234
+ private showPromocodeExhaustedLayer;
219
235
  static api: {
220
236
  widgetClassName: string;
221
237
  onRefreshUserData: typeof WidgetBase.onRefreshUserData;
222
- init: (element: HTMLElement, localData: Record<string, any>, widgetCallbacks: WidgetCallbacks, widgetDeps: WidgetDeps) => void;
238
+ init: (element: HTMLElement, layers: Array<HTMLElement>, localData: Record<string, any>, widgetCallbacks: WidgetCallbacks, widgetDeps: WidgetDeps) => void;
223
239
  onStart: (element: HTMLElement) => void;
224
240
  onStop: (element: HTMLElement) => void;
225
241
  click: (element: HTMLElement) => boolean;
226
242
  };
227
243
  }
228
244
 
229
- type WidgetDataInputOptions = WidgetOptionsBase;
245
+ type WidgetDataInputOptions = WidgetOptionsBase & {
246
+ layers: Array<HTMLElement>;
247
+ };
230
248
 
231
249
  declare class WidgetDataInput extends WidgetBase<WidgetDataInputOptions> {
232
250
  static DEFAULTS: {
package/dist/index.d.ts CHANGED
@@ -130,7 +130,9 @@ declare class WidgetTimer extends WidgetBase<WidgetTimerOptions> {
130
130
  };
131
131
  }
132
132
 
133
- type WidgetBarcodeOptions = WidgetOptionsBase;
133
+ type WidgetBarcodeOptions = WidgetOptionsBase & {
134
+ layers: Array<HTMLElement>;
135
+ };
134
136
 
135
137
  declare class WidgetBarcode extends WidgetBase<WidgetBarcodeOptions> {
136
138
  static DEFAULTS: WidgetBarcodeOptions;
@@ -148,6 +150,9 @@ declare class WidgetBarcode extends WidgetBase<WidgetBarcodeOptions> {
148
150
  private readonly msgNoMoreCodes;
149
151
  private readonly msgTryAgain;
150
152
  private readonly msgBarcodeRenderError;
153
+ private readonly promocodeExhaustedAction;
154
+ private readonly promocodeExhaustedNotificationText;
155
+ private readonly layers;
151
156
  constructor(element: HTMLElement, options: Partial<WidgetBarcodeOptions>, widgetCallbacks: WidgetCallbacks, widgetDeps: WidgetDeps);
152
157
  /**
153
158
  * Start or restart widget
@@ -170,17 +175,22 @@ declare class WidgetBarcode extends WidgetBase<WidgetBarcodeOptions> {
170
175
  copyToClipboard(element: HTMLElement): void;
171
176
  private completeWidget;
172
177
  isDone(): boolean;
178
+ doPromocodeExhaustedAction(): void;
179
+ private showPromocodeExhaustedNotification;
180
+ private showPromocodeExhaustedLayer;
173
181
  static api: {
174
182
  widgetClassName: string;
175
183
  onRefreshUserData: typeof WidgetBase.onRefreshUserData;
176
- init: (element: HTMLElement, localData: Record<string, any>, widgetCallbacks: WidgetCallbacks, widgetDeps: WidgetDeps) => void;
184
+ init: (element: HTMLElement, layers: Array<HTMLElement>, localData: Record<string, any>, widgetCallbacks: WidgetCallbacks, widgetDeps: WidgetDeps) => void;
177
185
  onStart: (element: HTMLElement) => void;
178
186
  onStop: (element: HTMLElement) => void;
179
187
  click: (element: HTMLElement) => boolean;
180
188
  };
181
189
  }
182
190
 
183
- type WidgetCopyOptions = WidgetOptionsBase;
191
+ type WidgetCopyOptions = WidgetOptionsBase & {
192
+ layers: Array<HTMLElement>;
193
+ };
184
194
 
185
195
  declare class WidgetCopy extends WidgetBase<WidgetCopyOptions> {
186
196
  static DEFAULTS: WidgetCopyOptions;
@@ -197,6 +207,9 @@ declare class WidgetCopy extends WidgetBase<WidgetCopyOptions> {
197
207
  private readonly geometry;
198
208
  private readonly resultLayer;
199
209
  private readonly resultLayerGeometry;
210
+ private readonly promocodeExhaustedAction;
211
+ private readonly promocodeExhaustedNotificationText;
212
+ private readonly layers;
200
213
  constructor(element: HTMLElement, options: Partial<WidgetCopyOptions>, widgetCallbacks: WidgetCallbacks, widgetDeps: WidgetDeps);
201
214
  /**
202
215
  * Start or restart widget
@@ -216,17 +229,22 @@ declare class WidgetCopy extends WidgetBase<WidgetCopyOptions> {
216
229
  copyToClipboard(element: HTMLElement): void;
217
230
  private completeWidget;
218
231
  isDone(): boolean;
232
+ doPromocodeExhaustedAction(): void;
233
+ private showPromocodeExhaustedNotification;
234
+ private showPromocodeExhaustedLayer;
219
235
  static api: {
220
236
  widgetClassName: string;
221
237
  onRefreshUserData: typeof WidgetBase.onRefreshUserData;
222
- init: (element: HTMLElement, localData: Record<string, any>, widgetCallbacks: WidgetCallbacks, widgetDeps: WidgetDeps) => void;
238
+ init: (element: HTMLElement, layers: Array<HTMLElement>, localData: Record<string, any>, widgetCallbacks: WidgetCallbacks, widgetDeps: WidgetDeps) => void;
223
239
  onStart: (element: HTMLElement) => void;
224
240
  onStop: (element: HTMLElement) => void;
225
241
  click: (element: HTMLElement) => boolean;
226
242
  };
227
243
  }
228
244
 
229
- type WidgetDataInputOptions = WidgetOptionsBase;
245
+ type WidgetDataInputOptions = WidgetOptionsBase & {
246
+ layers: Array<HTMLElement>;
247
+ };
230
248
 
231
249
  declare class WidgetDataInput extends WidgetBase<WidgetDataInputOptions> {
232
250
  static DEFAULTS: {
package/dist/index.js CHANGED
@@ -1359,6 +1359,7 @@ class DataInput {
1359
1359
  class Barcode {
1360
1360
  _elementNodeRef;
1361
1361
  _layer;
1362
+ _layersNodesRefs;
1362
1363
  _widgetApi;
1363
1364
  _widgetCallbacks;
1364
1365
  _widgetDeps;
@@ -1366,9 +1367,10 @@ class Barcode {
1366
1367
  static className() {
1367
1368
  return Barcode._className;
1368
1369
  }
1369
- constructor(_elementNodeRef, _layer, _widgetApi, _widgetCallbacks, _widgetDeps) {
1370
+ constructor(_elementNodeRef, _layer, _layersNodesRefs, _widgetApi, _widgetCallbacks, _widgetDeps) {
1370
1371
  this._elementNodeRef = _elementNodeRef;
1371
1372
  this._layer = _layer;
1373
+ this._layersNodesRefs = _layersNodesRefs;
1372
1374
  this._widgetApi = _widgetApi;
1373
1375
  this._widgetCallbacks = _widgetCallbacks;
1374
1376
  this._widgetDeps = _widgetDeps;
@@ -1379,7 +1381,7 @@ class Barcode {
1379
1381
  }
1380
1382
  init(localData) {
1381
1383
  try {
1382
- this._widgetApi.init(this._elementNodeRef, localData, this._widgetCallbacks, this._widgetDeps);
1384
+ this._widgetApi.init(this._elementNodeRef, this._layersNodesRefs, localData, this._widgetCallbacks, this._widgetDeps);
1383
1385
  }
1384
1386
  catch (e) {
1385
1387
  console.error(e);
@@ -1406,7 +1408,7 @@ class Barcode {
1406
1408
  get isLayerForcePaused() {
1407
1409
  return false;
1408
1410
  }
1409
- static get [Symbol.for("___CTOR_ARGS___")]() { return [`HTMLElement`, `Layer`, `typeof WidgetBarcode.api`, `WidgetCallbacks`, `WidgetDeps`]; }
1411
+ static get [Symbol.for("___CTOR_ARGS___")]() { return [`HTMLElement`, `Layer`, `Array`, `typeof WidgetBarcode.api`, `WidgetCallbacks`, `WidgetDeps`]; }
1410
1412
  }
1411
1413
 
1412
1414
  class ClickableBase {
@@ -1729,6 +1731,7 @@ class Button extends ClickableBase {
1729
1731
  class Copy {
1730
1732
  _elementNodeRef;
1731
1733
  _layer;
1734
+ _layersNodesRefs;
1732
1735
  _widgetApi;
1733
1736
  _widgetCallbacks;
1734
1737
  _widgetDeps;
@@ -1736,9 +1739,10 @@ class Copy {
1736
1739
  static className() {
1737
1740
  return Copy._className;
1738
1741
  }
1739
- constructor(_elementNodeRef, _layer, _widgetApi, _widgetCallbacks, _widgetDeps) {
1742
+ constructor(_elementNodeRef, _layer, _layersNodesRefs, _widgetApi, _widgetCallbacks, _widgetDeps) {
1740
1743
  this._elementNodeRef = _elementNodeRef;
1741
1744
  this._layer = _layer;
1745
+ this._layersNodesRefs = _layersNodesRefs;
1742
1746
  this._widgetApi = _widgetApi;
1743
1747
  this._widgetCallbacks = _widgetCallbacks;
1744
1748
  this._widgetDeps = _widgetDeps;
@@ -1749,7 +1753,7 @@ class Copy {
1749
1753
  }
1750
1754
  init(localData) {
1751
1755
  try {
1752
- this._widgetApi.init(this._elementNodeRef, localData, this._widgetCallbacks, this._widgetDeps);
1756
+ this._widgetApi.init(this._elementNodeRef, this._layersNodesRefs, localData, this._widgetCallbacks, this._widgetDeps);
1753
1757
  }
1754
1758
  catch (e) {
1755
1759
  console.error(e);
@@ -1776,7 +1780,7 @@ class Copy {
1776
1780
  get isLayerForcePaused() {
1777
1781
  return false;
1778
1782
  }
1779
- static get [Symbol.for("___CTOR_ARGS___")]() { return [`HTMLElement`, `Layer`, `typeof WidgetCopy.api`, `WidgetCallbacks`, `WidgetDeps`]; }
1783
+ static get [Symbol.for("___CTOR_ARGS___")]() { return [`HTMLElement`, `Layer`, `Array`, `typeof WidgetCopy.api`, `WidgetCallbacks`, `WidgetDeps`]; }
1780
1784
  }
1781
1785
 
1782
1786
  class DateCountdown {
@@ -3633,9 +3637,11 @@ const tryCreateFromHtmlElement = (nodeRef, layer, widgetCallbacks, widgetDeps) =
3633
3637
  return new Video(nodeRef, layer, layoutApi.VideoPlayer, layer.slideApiDeps);
3634
3638
  //////// widgets ///////
3635
3639
  case Copy.className():
3636
- return layoutApi.widgetCopyApi ? new Copy(nodeRef, layer, layoutApi.widgetCopyApi, widgetCallbacks, widgetDeps) : null;
3640
+ return layoutApi.widgetCopyApi ? new Copy(nodeRef, layer, layersNodesRefs, layoutApi.widgetCopyApi, widgetCallbacks, widgetDeps) : null;
3637
3641
  case Barcode.className():
3638
- return layoutApi.widgetBarcodeApi ? new Barcode(nodeRef, layer, layoutApi.widgetBarcodeApi, widgetCallbacks, widgetDeps) : null;
3642
+ return layoutApi.widgetBarcodeApi
3643
+ ? new Barcode(nodeRef, layer, layersNodesRefs, layoutApi.widgetBarcodeApi, widgetCallbacks, widgetDeps)
3644
+ : null;
3639
3645
  case DataInput.className():
3640
3646
  return layoutApi.widgetDataInputApi
3641
3647
  ? new DataInput(nodeRef, layer, layersNodesRefs, layoutApi.widgetDataInputApi, widgetCallbacks, widgetDeps)
@@ -7108,16 +7114,16 @@ class CardApi {
7108
7114
  if (viewportRatio > _ratio) {
7109
7115
  // fit by height
7110
7116
  slideHeight = viewportHeight;
7111
- slideWidth = Math.ceil(slideHeight * _ratio);
7112
- offset = Math.ceil(slideWidth - viewportWidth) / 2;
7117
+ slideWidth = slideHeight * _ratio;
7118
+ offset = (slideWidth - viewportWidth) / 2;
7113
7119
  slideOffsetMargin = "0 " + -offset + "px"; // -8.5
7114
7120
  xOffset = offset + "px";
7115
7121
  }
7116
7122
  else {
7117
7123
  // fit by width, top and bottom - to offscreen or fill with bg image
7118
7124
  slideWidth = viewportWidth;
7119
- slideHeight = Math.ceil(viewportWidth / _ratio);
7120
- offset = Math.ceil(slideHeight - viewportHeight) / 2;
7125
+ slideHeight = viewportWidth / _ratio;
7126
+ offset = (slideHeight - viewportHeight) / 2;
7121
7127
  slideOffsetMargin = -1 * offset + "px" + " 0 ";
7122
7128
  // offset from viewport bottom to StoryBottom plus safe area offset bottom
7123
7129
  yOffset = `calc(${offset + this._overlappingActionBarHeight}px + env(safe-area-inset-bottom))`;
@@ -7129,8 +7135,8 @@ class CardApi {
7129
7135
  if (viewportRatio > _ratio) {
7130
7136
  // fit by width, top and bottom - to offscreen
7131
7137
  slideWidth = viewportWidth;
7132
- slideHeight = Math.ceil(viewportWidth / _ratio);
7133
- offset = Math.ceil(slideHeight - viewportHeight) / 2;
7138
+ slideHeight = viewportWidth / _ratio;
7139
+ offset = (slideHeight - viewportHeight) / 2;
7134
7140
  slideOffsetMargin = -offset + "px" + " 0 ";
7135
7141
  yOffset = offset + this._overlappingActionBarHeight + "px";
7136
7142
  }
@@ -7138,8 +7144,8 @@ class CardApi {
7138
7144
  // вьюпорт более вытянутый чем надо
7139
7145
  // fit by height, sides - to offscreen
7140
7146
  slideHeight = viewportHeight;
7141
- slideWidth = Math.ceil(slideHeight * _ratio);
7142
- offset = Math.ceil(slideWidth - viewportWidth) / 2;
7147
+ slideWidth = slideHeight * _ratio;
7148
+ offset = (slideWidth - viewportWidth) / 2;
7143
7149
  slideOffsetMargin = "0 " + -offset + "px"; // -8.5
7144
7150
  xOffset = offset + "px";
7145
7151
  }
@@ -17780,12 +17786,19 @@ FontLib.loadFont("OCR-A", 100, 100, "AAEAAAAPAIAAAwBwRkZUTXxHoksAADPIAAAAHEdERUY
17780
17786
  FontLib.loadFont("OCR-B", 96, 100, "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");
17781
17787
  function ean13(opts,dwg) { return _ToAny(bwipp_ean13,opts,dwg); }function pdf417(opts,dwg) { return _ToAny(bwipp_pdf417,opts,dwg); }function qrcode(opts,dwg) { return _ToAny(bwipp_qrcode,opts,dwg); }
17782
17788
 
17789
+ var WidgetBarcodePromocodeExhaustedAction;
17790
+ (function (WidgetBarcodePromocodeExhaustedAction) {
17791
+ WidgetBarcodePromocodeExhaustedAction["ShowNotification"] = "showNotification";
17792
+ WidgetBarcodePromocodeExhaustedAction["ShowLayer"] = "showLayer";
17793
+ })(WidgetBarcodePromocodeExhaustedAction || (WidgetBarcodePromocodeExhaustedAction = {}));
17794
+
17783
17795
  class WidgetBarcode extends WidgetBase {
17784
17796
  static DEFAULTS = {
17785
17797
  slide: null,
17786
17798
  activateAfterCreate: false,
17787
17799
  create: false,
17788
17800
  localData: {},
17801
+ layers: [],
17789
17802
  };
17790
17803
  static widgetClassName = "narrative-element-barcode";
17791
17804
  captionView;
@@ -17801,8 +17814,12 @@ class WidgetBarcode extends WidgetBase {
17801
17814
  msgNoMoreCodes;
17802
17815
  msgTryAgain;
17803
17816
  msgBarcodeRenderError;
17817
+ promocodeExhaustedAction;
17818
+ promocodeExhaustedNotificationText;
17819
+ layers;
17804
17820
  constructor(element, options, widgetCallbacks, widgetDeps) {
17805
17821
  super(element, options, widgetCallbacks, widgetDeps);
17822
+ this.layers = this.options.layers;
17806
17823
  this.captionView = this.element.querySelector(".narrative-element-text-lines");
17807
17824
  this.clipboardTarget = getTagData(element, "clipboardTarget");
17808
17825
  this.isPromotionalCode = getTagData(element, "clipboardType") === "promocode";
@@ -17815,6 +17832,10 @@ class WidgetBarcode extends WidgetBase {
17815
17832
  this.msgNoMoreCodes = getTagData(this.element, "msgNoMoreCodes");
17816
17833
  this.msgTryAgain = getTagData(this.element, "msgTryAgain");
17817
17834
  this.msgBarcodeRenderError = getTagData(this.element, "msgBarcodeRenderError");
17835
+ this.promocodeExhaustedAction =
17836
+ getTagData(element, "promocodeExhaustedAction") ??
17837
+ WidgetBarcodePromocodeExhaustedAction.ShowNotification;
17838
+ this.promocodeExhaustedNotificationText = getTagData(element, "promocodeExhaustedNotificationText") ?? this.msgNoMoreCodes;
17818
17839
  }
17819
17840
  /**
17820
17841
  * Start or restart widget
@@ -17976,7 +17997,7 @@ class WidgetBarcode extends WidgetBase {
17976
17997
  this.setLocalData(this.localData, true);
17977
17998
  }
17978
17999
  else {
17979
- this.msgNoMoreCodes && this.widgetDeps.slideApiDeps.showToast(this.msgNoMoreCodes);
18000
+ this.doPromocodeExhaustedAction();
17980
18001
  }
17981
18002
  }
17982
18003
  else if (status === 12163 || status === 12002) {
@@ -18048,11 +18069,30 @@ class WidgetBarcode extends WidgetBase {
18048
18069
  isDone() {
18049
18070
  return this.localData["_bc_g_" + this.elementId + "_done_at"] !== undefined;
18050
18071
  }
18072
+ doPromocodeExhaustedAction() {
18073
+ switch (this.promocodeExhaustedAction) {
18074
+ case WidgetBarcodePromocodeExhaustedAction.ShowNotification:
18075
+ this.showPromocodeExhaustedNotification();
18076
+ break;
18077
+ case WidgetBarcodePromocodeExhaustedAction.ShowLayer:
18078
+ this.showPromocodeExhaustedLayer();
18079
+ break;
18080
+ }
18081
+ }
18082
+ showPromocodeExhaustedNotification() {
18083
+ if (this.promocodeExhaustedNotificationText)
18084
+ this.widgetDeps.slideApiDeps.showToast(this.promocodeExhaustedNotificationText);
18085
+ }
18086
+ showPromocodeExhaustedLayer() {
18087
+ if (this.layers[1] != null) {
18088
+ this._showLayer(this.layers, 1);
18089
+ }
18090
+ }
18051
18091
  static api = {
18052
18092
  widgetClassName: WidgetBarcode.widgetClassName,
18053
18093
  onRefreshUserData: WidgetBarcode.onRefreshUserData,
18054
- init: function (element, localData, widgetCallbacks, widgetDeps) {
18055
- WidgetBarcode.initWidget(element, localData, (element, options) => new WidgetBarcode(element, options, widgetCallbacks, widgetDeps));
18094
+ init: function (element, layers, localData, widgetCallbacks, widgetDeps) {
18095
+ WidgetBarcode.initWidget(element, localData, (element, options) => new WidgetBarcode(element, { ...options, layers }, widgetCallbacks, widgetDeps));
18056
18096
  },
18057
18097
  onStart: function (element) {
18058
18098
  WidgetBarcode.getInstance(element)?.onStart();
@@ -18082,12 +18122,19 @@ class WidgetBarcode extends WidgetBase {
18082
18122
  static get [Symbol.for("___CTOR_ARGS___")]() { return [`HTMLElement`, `Partial`, `WidgetCallbacks`, `WidgetDeps`]; }
18083
18123
  }
18084
18124
 
18125
+ var WidgetCopyPromocodeExhaustedAction;
18126
+ (function (WidgetCopyPromocodeExhaustedAction) {
18127
+ WidgetCopyPromocodeExhaustedAction["ShowNotification"] = "showNotification";
18128
+ WidgetCopyPromocodeExhaustedAction["ShowLayer"] = "showLayer";
18129
+ })(WidgetCopyPromocodeExhaustedAction || (WidgetCopyPromocodeExhaustedAction = {}));
18130
+
18085
18131
  class WidgetCopy extends WidgetBase {
18086
18132
  static DEFAULTS = {
18087
18133
  slide: null,
18088
18134
  activateAfterCreate: false,
18089
18135
  create: false,
18090
18136
  localData: {},
18137
+ layers: [],
18091
18138
  };
18092
18139
  static widgetClassName = "narrative-element-copy";
18093
18140
  button;
@@ -18102,8 +18149,12 @@ class WidgetCopy extends WidgetBase {
18102
18149
  geometry;
18103
18150
  resultLayer;
18104
18151
  resultLayerGeometry;
18152
+ promocodeExhaustedAction;
18153
+ promocodeExhaustedNotificationText;
18154
+ layers;
18105
18155
  constructor(element, options, widgetCallbacks, widgetDeps) {
18106
18156
  super(element, options, widgetCallbacks, widgetDeps);
18157
+ this.layers = this.options.layers;
18107
18158
  this.button = this.element.querySelector(".narrative-element-text-lines");
18108
18159
  this.clipboardTarget = getTagData(element, "clipboardTarget");
18109
18160
  this.isPromotionalCode = getTagData(element, "clipboardType") === "promocode";
@@ -18112,6 +18163,9 @@ class WidgetCopy extends WidgetBase {
18112
18163
  this.msgServiceError = getTagData(this.element, "msgServiceError");
18113
18164
  this.msgNoMoreCodes = getTagData(this.element, "msgNoMoreCodes");
18114
18165
  this.msgTryAgain = getTagData(this.element, "msgTryAgain");
18166
+ this.promocodeExhaustedAction =
18167
+ getTagData(element, "promocodeExhaustedAction") ?? WidgetCopyPromocodeExhaustedAction.ShowNotification;
18168
+ this.promocodeExhaustedNotificationText = getTagData(element, "promocodeExhaustedNotificationText") ?? this.msgNoMoreCodes;
18115
18169
  this.geometry = this.element.closest(".narrative-element-geometry");
18116
18170
  // this is result layer - skip init
18117
18171
  // todo prevent call Widget.init on result-layer
@@ -18247,7 +18301,7 @@ class WidgetCopy extends WidgetBase {
18247
18301
  this.setLocalData(this.localData, true);
18248
18302
  }
18249
18303
  else {
18250
- this.msgNoMoreCodes && this.widgetDeps.slideApiDeps.showToast(this.msgNoMoreCodes);
18304
+ this.doPromocodeExhaustedAction();
18251
18305
  }
18252
18306
  }
18253
18307
  else if (status === 12163 || status === 12002) {
@@ -18322,13 +18376,32 @@ class WidgetCopy extends WidgetBase {
18322
18376
  isDone() {
18323
18377
  return this.localData["_cp_g_" + this.elementId + "_done_at"] !== undefined;
18324
18378
  }
18379
+ doPromocodeExhaustedAction() {
18380
+ switch (this.promocodeExhaustedAction) {
18381
+ case WidgetCopyPromocodeExhaustedAction.ShowNotification:
18382
+ this.showPromocodeExhaustedNotification();
18383
+ break;
18384
+ case WidgetCopyPromocodeExhaustedAction.ShowLayer:
18385
+ this.showPromocodeExhaustedLayer();
18386
+ break;
18387
+ }
18388
+ }
18389
+ showPromocodeExhaustedNotification() {
18390
+ if (this.promocodeExhaustedNotificationText)
18391
+ this.widgetDeps.slideApiDeps.showToast(this.promocodeExhaustedNotificationText);
18392
+ }
18393
+ showPromocodeExhaustedLayer() {
18394
+ if (this.layers[1] != null) {
18395
+ this._showLayer(this.layers, 1);
18396
+ }
18397
+ }
18325
18398
  static api = {
18326
18399
  widgetClassName: WidgetCopy.widgetClassName,
18327
18400
  onRefreshUserData: WidgetCopy.onRefreshUserData,
18328
- init: function (element, localData, widgetCallbacks, widgetDeps) {
18401
+ init: function (element, layers, localData, widgetCallbacks, widgetDeps) {
18329
18402
  // prevent initWidget for result layer
18330
18403
  if (!element.classList.contains("narrative-element-copy-result-variant")) {
18331
- WidgetCopy.initWidget(element, localData, (element, options) => new WidgetCopy(element, options, widgetCallbacks, widgetDeps));
18404
+ WidgetCopy.initWidget(element, localData, (element, options) => new WidgetCopy(element, { ...options, layers }, widgetCallbacks, widgetDeps));
18332
18405
  }
18333
18406
  },
18334
18407
  onStart: function (element) {